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_JUDOWNLOAD_CAN_NOT_DELETE_DEFAULT_TEMPLATE_STYLE')); return false; } $defaultStyleObject = JUDownloadFrontHelperTemplate::getDefaultTemplateStyle(); $query = $db->getQuery(true); $query->update('#__judownload_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('#__judownload_categories'); $query->where('style_id = ' . $pk); $db->setQuery($query); $categoryArrayAssignedToStyle = $db->loadColumn(); $query = $db->getQuery(true); $query->update('#__judownload_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 = JUDownloadFrontHelperTemplate::getTemplateStyleOfCategory($categoryIdAssignedToStyle); if ($styleObjectOfCategory->template_id != $this->template_id) { $query = $db->getQuery(true); $query->update('#__judownload_categories'); $query->set('template_params = ""'); $query->where('id = ' . $categoryIdAssignedToStyle); $db->setQuery($query); $db->execute(); $query = $db->getQuery(true); $query->update('#__judownload_documents AS d'); $query->set('d.template_params = ""'); $query->join('', '#__judownload_documents_xref AS dxref ON d.id = dxref.doc_id AND dxref.main = 1'); $query->where('d.style_id = -1'); $query->where('dxref.cat_id = ' . $categoryIdAssignedToStyle); $db->setQuery($query); $db->execute(); JUDownloadFrontHelperTemplate::removeTemplateParamsOfInheritedStyleCatDoc($categoryIdAssignedToStyle); } } $query = $db->getQuery(true); $query->select('d.id'); $query->select('dxref.cat_id AS cat_id'); $query->from('#__judownload_documents AS d'); $query->join('', '#__judownload_documents_xref AS dxref ON d.id = dxref.doc_id AND dxref.main = 1'); $query->where('d.style_id = ' . $pk); $db->setQuery($query); $documentObjectListAssignedToStyle = $db->loadObjectList(); $catArrayResetTemplateParams = array(); foreach ($documentObjectListAssignedToStyle as $documentObject) { $styleObjectOfCategory = JUDownloadFrontHelperTemplate::getTemplateStyleOfCategory($documentObject->cat_id); if ($styleObjectOfCategory->template_id != $this->template_id) { $catArrayResetTemplateParams[] = $documentObject->cat_id; } } $catArrayResetTemplateParams = array_unique($catArrayResetTemplateParams); if (is_array($catArrayResetTemplateParams) && count($catArrayResetTemplateParams)) { $query = $db->getQuery(true); $query->update('#__judownload_documents AS d'); $query->join('', '#__judownload_documents_xref AS dxref ON d.id = dxref.doc_id AND dxref.main = 1'); $query->set('d.template_params = ""'); $query->set('d.style_id = -1'); $query->where('dxref.cat_id IN (' . implode(',', $catArrayResetTemplateParams) . ')'); $query->where('d.style_id = ' . $pk); $db->setQuery($query); $db->execute(); } return parent::delete($pk); }
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; }
public function save($data) { $app = JFactory::getApplication(); $categoryArrayAddToStyle = $data['categories'] ? $data['categories'] : array(); unset($data['categories']); $dispatcher = JDispatcher::getInstance(); $table = $this->getTable(); $key = $table->getKeyName(); $pk = !empty($data[$key]) ? $data[$key] : (int) $this->getState($this->getName() . '.id'); $isNew = true; $db = JFactory::getDbo(); $defaultTemplateStyleObject = JUDownloadFrontHelperTemplate::getDefaultTemplateStyle(); JPluginHelper::importPlugin('content'); try { if ($pk > 0) { $table->load($pk); if ($table->home == 1) { $data["home"] = 1; } $templateId = $table->template_id; $isNew = false; } else { $templateId = $data["template_id"]; } if ($data["home"] == 1 && $table->home != 1) { if ($templateId != $defaultTemplateStyleObject->template_id) { if ($data['changeTemplateStyleAction'] == 1) { JUDownloadFrontHelperTemplate::updateStyleIdForCatDocUsingDefaultStyle($defaultTemplateStyleObject->id); $app->enqueueMessage(JText::sprintf('COM_JUDOWNLOAD_DEFAULT_TEMPLATE_STYLE_HAS_BEEN_CHANGED_TO_X', $defaultTemplateStyleObject->title), 'Notice'); } else { JUDownloadFrontHelperTemplate::removeTemplateParamsOfCatDocUsingDefaultStyle(); } } } if ($data['home']) { if ($data['home'] != 1) { if ($defaultTemplateStyleObject->template_id != $templateId) { $data['home'] = 0; } } } $query = $db->getQuery(true); $query->select("tpl.*"); $query->select("plg.title,plg.folder"); $query->from("#__judownload_templates AS tpl"); $query->join("", "#__judownload_plugins AS plg ON plg.id = tpl.plugin_id"); $query->where("tpl.id = " . $templateId); $db->setQuery($query); $templateObject = $db->loadObject(); if (!is_object($templateObject)) { $this->setError(JText::_("COM_JUDOWNLOAD_TEMPLATE_DOES_NOT_EXIST")); return false; } $query = $db->getQuery(true); $query->select("id"); $query->from("#__judownload_template_styles"); $query->where("template_id = " . $templateObject->parent_id); $db->setQuery($query); $styleParentObjectList = $db->loadColumn(); $parentStyleId = (int) $data["parent_id"]; if (is_array($styleParentObjectList) && !empty($styleParentObjectList)) { if (!in_array($parentStyleId, $styleParentObjectList)) { $this->setError(JText::_("COM_JUDOWNLOAD_INVALID_PARENT_STYLE")); return false; } } else { if ($templateObject->parent_id == 1) { $this->setError(JText::_("COM_JUDOWNLOAD_PARENT_STYLE_DOES_NOT_EXIST_YOU_NEED_TO_CREATE_ROOT_STYLE")); return false; } $query = $db->getQuery(true); $query->select("tpl.*"); $query->select("plg.title,plg.folder"); $query->from("#__judownload_templates AS tpl"); $query->join("", "#__judownload_plugins AS plg ON plg.id = tpl.plugin_id"); $query->where("tpl.id = " . $templateObject->parent_id); $db->setQuery($query); $templateParentObject = $db->loadObject(); $this->setError(JText::_("COM_JUDOWNLOAD_PARENT_STYLE_DOES_NOT_EXIST") . $templateParentObject->title); return false; } if ($table->parent_id != $data['parent_id'] || $data['id'] == 0) { $table->setLocation($data['parent_id'], 'last-child'); } 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; } if ($table->home) { $query = $db->getQuery(true); $query->update("#__judownload_template_styles"); $query->set("home = 0"); $query->where("home = " . $db->quote($table->home)); $query->where("id != " . $table->id); $db->setQuery($query); $db->execute(); } $query = $db->getQuery(true); $query->select('id'); $query->from('#__judownload_categories'); $query->where('style_id =' . $table->id); $db->setQuery($query); $categoryArrayAssignedToStyle = $db->loadColumn(); $categoryArrayRemovedStyle = array_diff($categoryArrayAssignedToStyle, $categoryArrayAddToStyle); if (!empty($categoryArrayRemovedStyle)) { foreach ($categoryArrayRemovedStyle as $categoryIdRemovedStyle) { $query = $db->getQuery(true); $query->update('#__judownload_categories'); $query->set('style_id = -2'); if ($defaultTemplateStyleObject->template_id != $table->template_id) { $query->set('template_params = ""'); } $query->where('parent_id = 0'); $query->where('id = ' . $categoryIdRemovedStyle); $db->setQuery($query); $db->execute(); $query = $db->getQuery(true); $query->update('#__judownload_categories'); $query->set('style_id = -1'); $query->where('parent_id != 0'); $query->where('id = ' . $categoryIdRemovedStyle); $db->setQuery($query); $db->execute(); } foreach ($categoryArrayRemovedStyle as $categoryIdRemovedStyle) { $templateStyleOfCategoryObject = JUDownloadFrontHelperTemplate::getTemplateStyleOfCategory($categoryIdRemovedStyle); if ($templateStyleOfCategoryObject->template_id != $table->template_id) { $query = $db->getQuery(true); $query->update('#__judownload_categories'); $query->set('template_params = ""'); $query->where('style_id = -1'); $query->where('parent_id != 0'); $query->where('id = ' . $categoryIdRemovedStyle); $db->setQuery($query); $db->execute(); JUDownloadFrontHelperTemplate::removeTemplateParamsOfInheritedStyleCatDoc($categoryIdRemovedStyle); } } } if (!empty($categoryArrayAddToStyle)) { foreach ($categoryArrayAddToStyle as $categoryIdAddToStyle) { $query = $db->getQuery(true); $query->update('#__judownload_categories'); $query->set('style_id = ' . $table->id); $query->where('style_id != ' . $table->id); $query->where('id = ' . $categoryIdAddToStyle); $db->setQuery($query); $db->execute(); JUDownloadFrontHelperTemplate::removeTemplateParamsOfInheritedStyleCatDoc($categoryIdAddToStyle); } } $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; }