public function listingChangeCategory() { $app = JFactory::getApplication(); if ($app->input->get('action', '') == 'update-maincat') { $ori_cat_id = $app->input->getInt('ori_cat_id', 0); $ori_cat = JUDirectoryHelper::getCategoryById($ori_cat_id); $data['ori_field_group_id'] = 0; $data['new_field_group_id'] = 0; $data['new_field_group_name'] = ""; $data['path'] = ""; if ($ori_cat) { $data['ori_field_group_id'] = $ori_cat->fieldgroup_id; } $new_cat_id = $app->input->getInt('new_cat_id', 0); $rootCat = JUDirectoryFrontHelperCategory::getRootCategory(); $params = JUDirectoryHelper::getParams(); if ($rootCat->id == $new_cat_id && !$params->get('allow_add_listing_to_root', 0)) { return ""; } $new_cat = JUDirectoryHelper::getCategoryById($new_cat_id); if ($new_cat) { $db = JFactory::getDbo(); $query = "SELECT id, name FROM #__judirectory_fields_groups WHERE id = " . $new_cat->fieldgroup_id . " AND published = 1"; $db->setQuery($query); $fieldgroup = $db->loadObject(); if ($fieldgroup) { $data['new_field_group_id'] = $fieldgroup->id; $data['new_field_group_name'] = $fieldgroup->name; } $data['path'] = JUDirectoryHelper::generateCategoryPath($new_cat_id); } if ($data['ori_field_group_id'] != $data['new_field_group_id']) { $data['msg_field_group'] = JText::_('COM_JUDIRECTORY_CHANGE_MAIN_CATEGORY_CAUSE_CHANGE_FIELD_GROUP_WARNING'); } $listingId = $app->input->getInt('id', 0); $data['message_style'] = JText::_('COM_JUDIRECTORY_INHERIT'); if ($listingId) { $listingObject = JUDirectoryHelper::getListingById($listingId); if ($listingObject->style_id == -1) { $oldStyleObject = JUDirectoryFrontHelperTemplate::getTemplateStyleOfCategory($listingId->cat_id); $newStyleObject = JUDirectoryFrontHelperTemplate::getTemplateStyleOfCategory($new_cat->id); if ($oldStyleObject->template_id != $newStyleObject->template_id) { $data['msg_style'] = JText::_('COM_JUDIRECTORY_CHANGE_MAIN_CATEGORY_CAUSE_CHANGE_TEMPLATE_WARNING'); } } $newTemplateStyleObject = JUDirectoryFrontHelperTemplate::getTemplateStyleOfCategory($new_cat->id); $data['message_style'] = JText::_('COM_JUDIRECTORY_INHERIT') . ' (' . $newTemplateStyleObject->title . ' [' . $newTemplateStyleObject->template_title . ' ]' . ')'; } return json_encode($data); } elseif ($app->input->getInt('action', '') == 'insert_secondary_cat') { $cat_id_str = $app->input->get('secondary_cat_id', '', 'string'); $html = ''; if (!empty($cat_id_str)) { $cat_id_arr = explode(",", $cat_id_str); foreach ($cat_id_arr as $key => $cat_id) { $html .= "<li id=\"cat-" . $cat_id . "\"><a class=\"drag-icon\"></a><span>" . JUDirectoryHelper::generateCategoryPath($cat_id) . "</span><a href=\"#\" onclick=\"return false\" class=\"remove-secondary-cat\" ><i class=\"icon-minus fa fa-minus-circle\"></i> " . JText::_('COM_JUDIRECTORY_REMOVE') . "</a></li>"; } } return $html; } }
public function delete($pk = null) { $db = JFactory::getDbo(); $k = $this->_tbl_key; $pk = is_null($pk) ? $this->{$k} : $pk; $this->load($pk); if ($this->home == 1 || $this->default == 1) { $this->setError(JText::_('COM_JUDIRECTORY_CAN_NOT_DELETE_DEFAULT_TEMPLATE_STYLE')); return false; } $defaultStyleObject = JUDirectoryFrontHelperTemplate::getDefaultTemplateStyle(); $query = $db->getQuery(true); $query->update('#__judirectory_categories'); $query->set('style_id = -2'); if ($defaultStyleObject->template_id != $this->template_id) { $query->set('template_params = ""'); } $query->where('parent_id = 0'); $query->where('style_id = ' . $pk); $db->setQuery($query); $db->execute(); $query = $db->getQuery(true); $query->select('id'); $query->from('#__judirectory_categories'); $query->where('style_id = ' . $pk); $db->setQuery($query); $categoryArrayAssignedToStyle = $db->loadColumn(); $query = $db->getQuery(true); $query->update('#__judirectory_categories'); $query->set('style_id = -1'); $query->where('parent_id != 0'); $query->where('style_id = ' . $pk); $db->setQuery($query); $db->execute(); foreach ($categoryArrayAssignedToStyle as $categoryIdAssignedToStyle) { $styleObjectOfCategory = JUDirectoryFrontHelperTemplate::getTemplateStyleOfCategory($categoryIdAssignedToStyle); if ($styleObjectOfCategory->template_id != $this->template_id) { $query = $db->getQuery(true); $query->update('#__judirectory_categories'); $query->set('template_params = ""'); $query->where('id = ' . $categoryIdAssignedToStyle); $db->setQuery($query); $db->execute(); $query = $db->getQuery(true); $query->update('#__judirectory_listings AS listing'); $query->set('listing.template_params = ""'); $query->join('', '#__judirectory_listings_xref AS listingxref ON listing.id = listingxref.listing_id AND listingxref.main = 1'); $query->where('listing.style_id = -1'); $query->where('listingxref.cat_id = ' . $categoryIdAssignedToStyle); $db->setQuery($query); $db->execute(); JUDirectoryFrontHelperTemplate::removeTemplateParamsOfInheritedStyleCatListing($categoryIdAssignedToStyle); } } $query = $db->getQuery(true); $query->select('listing.id'); $query->select('listingxref.cat_id AS cat_id'); $query->from('#__judirectory_listings AS listing'); $query->join('', '#__judirectory_listings_xref AS listingxref ON listing.id = listingxref.listing_id AND listingxref.main = 1'); $query->where('listing.style_id = ' . $pk); $db->setQuery($query); $listingObjectListAssignedToStyle = $db->loadObjectList(); $catArrayResetTemplateParams = array(); foreach ($listingObjectListAssignedToStyle as $listingObject) { $styleObjectOfCategory = JUDirectoryFrontHelperTemplate::getTemplateStyleOfCategory($listingObject->cat_id); if ($styleObjectOfCategory->template_id != $this->template_id) { $catArrayResetTemplateParams[] = $listingObject->cat_id; } } $catArrayResetTemplateParams = array_unique($catArrayResetTemplateParams); if (is_array($catArrayResetTemplateParams) && count($catArrayResetTemplateParams)) { $query = $db->getQuery(true); $query->update('#__judirectory_listings AS listing'); $query->join('', '#__judirectory_listings_xref AS listingxref ON listing.id = listingxref.listing_id AND listingxref.main = 1'); $query->set('listing.template_params = ""'); $query->set('listing.style_id = -1'); $query->where('listingxref.cat_id IN (' . implode(',', $catArrayResetTemplateParams) . ')'); $query->where('listing.style_id = ' . $pk); $db->setQuery($query); $db->execute(); } return parent::delete($pk); }
public function moveListings($listing_id_arr, $tocat_id, $move_option_arr = array()) { $dispatcher = JDispatcher::getInstance(); $user = JFactory::getUser(); JTable::addIncludePath(JPATH_ADMINISTRATOR . '/components/com_judirectory/tables'); $catTable = JTable::getInstance("Category", "JUDirectoryTable"); if ($tocat_id) { if (!$catTable->load($tocat_id)) { JError::raiseWarning(500, JText::_('COM_JUDIRECTORY_TARGET_CATEGORY_NOT_FOUND')); return false; } $table = $this->getTable(); $db = JFactory::getDbo(); $assetName = 'com_judirectory.category.' . (int) $tocat_id; $query = 'SELECT id FROM #__assets WHERE name="' . $assetName . '"'; $db->setQuery($query); $tocat_asset_id = $db->loadResult(); $canCreate = $user->authorise('judir.listing.create', $assetName); if (!$canCreate) { JError::raiseError(100, JText::sprintf('COM_JUDIRECTORY_CAN_NOT_CREATE_LISTING_IN_THIS_CATEGORY', $catTable->title)); return false; } } else { JError::raiseWarning(500, JText::_('COM_JUDIRECTORY_NO_TARGET_CATEGORY_SELECTED')); return false; } if (empty($listing_id_arr)) { JError::raiseError(100, JText::_('COM_JUDIRECTORY_NO_ITEM_SELECTED')); return false; } set_time_limit(0); $moved_listings = array(); foreach ($listing_id_arr as $listing_id) { if (!$table->load($listing_id)) { continue; } $assetName = 'com_judirectory.listing.' . (int) $listing_id; $canDoEdit = $user->authorise('judir.listing.edit', $assetName); if (!$canDoEdit) { if (!$user->id) { JError::raiseWarning(100, JText::sprintf('COM_JUDIRECTORY_YOU_DONT_HAVE_PERMISSION_TO_ACCESS_LISTING', $table->title)); continue; } else { if ($user->id == $table->created_by) { $canDoEditOwn = $user->authorise('judir.listing.edit.own', $assetName); if (!$canDoEditOwn) { JError::raiseWarning(100, JText::sprintf('COM_JUDIRECTORY_YOU_DONT_HAVE_PERMISSION_TO_ACCESS_LISTING', $table->title)); continue; } } } } $query = "SELECT cat_id FROM #__judirectory_listings_xref WHERE listing_id = " . $listing_id . " AND main=1"; $db->setQuery($query); $cat_id = $db->loadResult(); if ($tocat_id == $cat_id) { continue; } $result = $dispatcher->trigger($this->onContentBeforeMove, array($this->option . '.' . $this->name, $table, $tocat_id, $move_option_arr)); if (in_array(false, $result, true)) { $this->setError($table->getError()); return false; } if ($table->style_id == -1) { $oldTemplateStyleObject = JUDirectoryFrontHelperTemplate::getTemplateStyleOfCategory($cat_id); $newTemplateStyleObject = JUDirectoryFrontHelperTemplate::getTemplateStyleOfCategory($tocat_id); if ($oldTemplateStyleObject->template_id != $newTemplateStyleObject->template_id) { if (in_array('keep_template_params', $move_option_arr)) { $table->style_id = $oldTemplateStyleObject->id; } else { $query = "UPDATE #__judirectory_listings SET template_params = '' WHERE id=" . $listing_id; $db->setQuery($query); $db->execute(); } } } $query = "SELECT COUNT(*) FROM #__judirectory_listings_xref WHERE cat_id=" . $tocat_id . " AND listing_id=" . $listing_id . " AND main=0"; $db->setQuery($query); $is_secondary_cat = $db->loadResult(); if ($is_secondary_cat) { $query = "DELETE FROM #__judirectory_listings_xref WHERE listing_id=" . $listing_id . " AND main=1"; $db->setQuery($query); $db->execute(); $query = "UPDATE #__judirectory_listings_xref SET main=1 WHERE cat_id=" . $tocat_id . " AND listing_id=" . $listing_id; $db->setQuery($query); $db->execute(); } else { $query = "UPDATE #__judirectory_listings_xref SET cat_id=" . $tocat_id . " WHERE listing_id=" . $listing_id . " AND main=1"; $db->setQuery($query); $db->execute(); } if (in_array('keep_permission', $move_option_arr)) { $query = 'UPDATE #__assets SET `parent_id` = ' . $tocat_asset_id . ' WHERE name="com_judirectory.listing.' . $listing_id . '"'; $db->setQuery($query); $db->execute(); } else { $query = 'UPDATE #__assets SET `parent_id` = ' . $tocat_asset_id . ', `rules` = "{}" WHERE name="com_judirectory.listing.' . $listing_id . '"'; $db->setQuery($query); $db->execute(); } $moved_listings[] = $listing_id; $this->cleanCache(); $dispatcher->trigger($this->onContentAfterMove, array($this->option . '.' . $this->name, $table, $tocat_id, $move_option_arr)); } $total_moved_listings = count($moved_listings); if ($total_moved_listings) { $old_field_groupid = JUDirectoryHelper::getCategoryById($cat_id)->fieldgroup_id; $new_field_groupid = JUDirectoryHelper::getCategoryById($tocat_id)->fieldgroup_id; $keep_extra_fields = in_array("keep_extra_fields", $move_option_arr); if ($keep_extra_fields) { $keep_extra_fields = $old_field_groupid == $new_field_groupid ? true : false; } if (!$keep_extra_fields) { foreach ($moved_listings as $listing_id) { JUDirectoryHelper::deleteFieldValuesOfListing($listing_id); } } $old_criteria_groupid = JUDirectoryHelper::getCategoryById($cat_id)->criteriagroup_id; $new_criteria_groupid = JUDirectoryHelper::getCategoryById($tocat_id)->criteriagroup_id; $keep_rates = in_array("keep_rates", $move_option_arr); if ($keep_rates) { $keep_rates = $old_criteria_groupid == $new_criteria_groupid ? true : false; } if (!$keep_rates) { JTable::addIncludePath(JPATH_ADMINISTRATOR . "/components/com_judirectory/tables"); $ratingTable = JTable::getInstance("Rating", "JUDirectoryTable"); foreach ($moved_listings as $listing_id) { $query = "SELECT id FROM #__judirectory_rating WHERE listing_id = " . $listing_id; $db->setQuery($query); $ratingIds = $db->loadColumn(); foreach ($ratingIds as $ratingId) { $ratingTable->delete($ratingId); } } } } return $total_moved_listings; }