예제 #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_JUDOWNLOAD_NO_SOURCE_CATEGORY_SELECTED'));
         return false;
     }
     if (empty($tocat_id)) {
         JError::raiseWarning(100, JText::_('COM_JUDOWNLOAD_NO_TARGET_CATEGORY_SELECTED'));
         return false;
     }
     $user = JFactory::getUser();
     $table = $this->getTable();
     if (!$table->load($tocat_id)) {
         JError::raiseWarning(500, JText::_('COM_JUDOWNLOAD_TARGET_CATEGORY_NOT_FOUND'));
         return false;
     }
     $assetName = 'com_judownload.category.' . (int) $tocat_id;
     $candoCreate = $user->authorise('judl.category.create', $assetName);
     if (!$candoCreate) {
         JError::raiseError(100, JText::sprintf('COM_JUDOWNLOAD_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_judownload.category.' . (int) $cat_id;
         $candoEdit = $user->authorise('judl.category.edit', $assetName);
         if (!$candoEdit) {
             JError::raiseWarning(100, JText::_('COM_JUDOWNLOAD_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 = JUDownloadHelper::getCategoryByID($tocat_id);
                 if ($table->fieldgroup_id != $tocat_obj->fieldgroup_id) {
                     $table->selected_fieldgroup = $table->fieldgroup_id;
                 }
             }
         } else {
             if ($table->fieldgroup_id != 0) {
                 JUDownloadHelper::changeInheritedFieldGroupId($table->id, 0);
                 $query = "DELETE FROM #__judownload_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 = JUDownloadHelper::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;
             JUDownloadHelper::changeInheritedCriteriagroupId($table->id, $table->criteriagroup_id);
         }
         if ($table->style_id == -1) {
             if ($table->parent_id != $tocat_id) {
                 $oldTemplateStyleObject = JUDownloadFrontHelperTemplate::getTemplateStyleOfCategory($table->id);
                 $newTemplateStyleObject = JUDownloadFrontHelperTemplate::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 = '';
                         JUDownloadFrontHelperTemplate::removeTemplateParamsOfInheritedStyleCatDoc($table->id);
                     }
                 }
             }
         }
         if ($table->store()) {
             $total_moved_categories++;
         }
     }
     return $total_moved_categories;
 }