示例#1
0
 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;
 }
示例#2
0
 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;
 }