public function moveCats($cat_id_arr, $tocat_id, $move_option_arr) { $tocat_id = (int) $tocat_id; $cat_id_arr = (array) $cat_id_arr; if (empty($cat_id_arr)) { JError::raiseWarning(100, JText::_('COM_JUDIRECTORY_NO_SOURCE_CATEGORY_SELECTED')); return false; } if (empty($tocat_id)) { JError::raiseWarning(100, JText::_('COM_JUDIRECTORY_NO_TARGET_CATEGORY_SELECTED')); return false; } $user = JFactory::getUser(); $table = $this->getTable(); if (!$table->load($tocat_id)) { JError::raiseWarning(500, JText::_('COM_JUDIRECTORY_TARGET_CATEGORY_NOT_FOUND')); return false; } $assetName = 'com_judirectory.category.' . (int) $tocat_id; $candoCreate = $user->authorise('judir.category.create', $assetName); if (!$candoCreate) { JError::raiseError(100, JText::sprintf('COM_JUDIRECTORY_CAN_NOT_CREATE_CATEGORY_IN_CATEGORY_X', $table->title)); return false; } set_time_limit(0); $total_moved_categories = 0; foreach ($cat_id_arr as $cat_id) { if (!$table->load($cat_id, true)) { continue; } $assetName = 'com_judirectory.category.' . (int) $cat_id; $candoEdit = $user->authorise('judir.category.edit', $assetName); if (!$candoEdit) { JError::raiseWarning(100, JText::_('COM_JUDIRECTORY_YOU_DONT_HAVE_PERMISSION_TO_EDIT_CAT')); continue; } if ($this->isChildCategory($cat_id, $tocat_id) || $tocat_id == $table->parent_id) { continue; } $table->setLocation($tocat_id, 'last-child'); if (in_array('keep_extra_fields', $move_option_arr)) { if ($table->selected_fieldgroup == -1) { $tocat_obj = JUDirectoryHelper::getCategoryByID($tocat_id); if ($table->fieldgroup_id != $tocat_obj->fieldgroup_id) { $table->selected_fieldgroup = $table->fieldgroup_id; } } } else { if ($table->fieldgroup_id != 0) { JUDirectoryHelper::changeInheritedFieldGroupId($table->id, 0); $query = "DELETE FROM #__judirectory_fields_ordering WHERE `item_id` = " . $table->id . " AND `type` = 'category'"; $db = JFactory::getDbo(); $db->setQuery($query); $db->execute(); } $table->selected_fieldgroup = $table->fieldgroup_id = 0; } if (in_array('keep_rates', $move_option_arr)) { if ($table->selected_criteriagroup == -1) { $tocat_obj = JUDirectoryHelper::getCategoryByID($tocat_id); if ($table->criteriagroup_id != $tocat_obj->criteriagroup_id) { $table->selected_criteriagroup = $table->criteriagroup_id; } } } else { $table->selected_criteriagroup = $table->criteriagroup_id = 0; JUDirectoryHelper::changeInheritedCriteriagroupId($table->id, $table->criteriagroup_id); } if ($table->style_id == -1) { if ($table->parent_id != $tocat_id) { $oldTemplateStyleObject = JUDirectoryFrontHelperTemplate::getTemplateStyleOfCategory($table->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 { $table->template_params = ''; JUDirectoryFrontHelperTemplate::removeTemplateParamsOfInheritedStyleCatListing($table->id); } } } } if ($table->store()) { $total_moved_categories++; } } return $total_moved_categories; }
public function save($data) { if (!$data['id']) { return false; } $dispatcher = JDispatcher::getInstance(); $table = $this->getTable(); $key = $table->getKeyName(); $pk = !empty($data[$key]) ? $data[$key] : (int) $this->getState($this->getName() . '.id'); $isNew = true; JPluginHelper::importPlugin('content'); try { if ($pk > 0) { $table->load($pk); $isNew = false; } if (!$table->bind($data)) { $this->setError($table->getError()); return false; } $this->prepareTable($table); if (!$table->check()) { $this->setError($table->getError()); return false; } $result = $dispatcher->trigger($this->event_before_save, array($this->option . '.' . $this->name, &$table, $isNew)); if (in_array(false, $result, true)) { $this->setError($table->getError()); return false; } if (!$table->store()) { $this->setError($table->getError()); return false; } $db = JFactory::getDbo(); $fieldgroup_id = $table->id; if (!isset($data['assigntocats'])) { $data['assigntocats'] = array(); } $query = "SELECT id FROM #__judirectory_categories WHERE fieldgroup_id =" . $fieldgroup_id . ' AND selected_fieldgroup != -1'; $db->setQuery($query); $catid_has_this_exgr = $db->loadColumn(); $cat_remove_exgr = array_diff($catid_has_this_exgr, $data['assigntocats']); if (!empty($cat_remove_exgr)) { $query = "UPDATE #__judirectory_categories SET selected_fieldgroup = 0, fieldgroup_id = 0 WHERE id IN (" . implode(',', $cat_remove_exgr) . ")"; $db->setQuery($query); $db->execute(); foreach ($cat_remove_exgr as $cat_remove) { $listing_id_arr = JUDirectoryHelper::getListingIdsByCatId($cat_remove); foreach ($listing_id_arr as $listingId) { JUDirectoryHelper::deleteFieldValuesOfListing($listingId); } JUDirectoryHelper::changeInheritedFieldGroupId($cat_remove, 0); } } $cat_add_exgr = array_diff($data['assigntocats'], $catid_has_this_exgr); if ($cat_add_exgr) { $query = "UPDATE #__judirectory_categories SET selected_fieldgroup = {$fieldgroup_id}, fieldgroup_id = {$fieldgroup_id} WHERE id IN (" . implode(', ', $cat_add_exgr) . ")"; $db->setQuery($query); $db->execute(); foreach ($cat_add_exgr as $add_exgr) { JUDirectoryHelper::changeInheritedFieldGroupId($add_exgr, $fieldgroup_id); } } if ($table->field_ordering_type == 1) { $app = JFactory::getApplication(); $fields_ordering = $app->input->post->get("fields_ordering", array(), 'array'); if ($fields_ordering) { JTable::addIncludePath(JPATH_ADMINISTRATOR . '/components/com_judirectory/tables'); $fieldOrderingTable = JTable::getInstance("FieldOrdering", "JUDirectoryTable"); $db = $this->getDbo(); $query = "SELECT id FROM #__judirectory_fields WHERE group_id = 1 OR group_id = " . $table->id; $db->setQuery($query); $field_ids = $db->loadColumn(); $ordering = 0; foreach ($fields_ordering as $key => $field_id) { if (in_array($field_id, $field_ids)) { $ordering++; $fieldOrderingTable->reset(); if ($fieldOrderingTable->load(array("item_id" => $fieldgroup_id, "type" => "fieldgroup", "field_id" => $field_id))) { $fieldOrderingTable->bind(array("ordering" => $ordering)); } else { $fieldOrderingTable->bind(array("id" => 0, "item_id" => $fieldgroup_id, "type" => "fieldgroup", "field_id" => $field_id, "ordering" => $ordering)); } $fieldOrderingTable->store(); } } } } $this->cleanCache(); $dispatcher->trigger($this->event_after_save, array($this->option . '.' . $this->name, &$table, $isNew)); } catch (Exception $e) { $this->setError($e->getMessage()); return false; } $pkName = $table->getKeyName(); if (isset($table->{$pkName})) { $this->setState($this->getName() . '.id', $table->{$pkName}); } $this->setState($this->getName() . '.new', $isNew); return true; }