/** * edit category */ public function edit() { $cid = FormUtil::getPassedValue('cid', 0); $root_id = FormUtil::getPassedValue('dr', 1); $mode = FormUtil::getPassedValue('mode', 'new'); $allCats = ''; $editCat = ''; $languages = ZLanguage::getInstalledLanguages(); // indicates that we're editing if ($mode == 'edit') { if (!SecurityUtil::checkPermission('Categories::category', "::", ACCESS_ADMIN)) { return LogUtil::registerPermissionError(); } if (!$cid) { return LogUtil::registerError($this->__('Error! Cannot determine valid \'cid\' for edit mode in \'Categories_admin_edit\'.')); } $category = new Categories_DBObject_Category(); $editCat = $category->select($cid); if ($editCat == false) { return LogUtil::registerError($this->__('Sorry! No such item found.'), 404); } } else { // new category creation if (!SecurityUtil::checkPermission('Categories::category', '::', ACCESS_ADD)) { return LogUtil::registerPermissionError(); } // since we inherit the domain settings from the parent, we get // the inherited (and merged) object from session if (isset($_SESSION['newCategory']) && $_SESSION['newCategory']) { $editCat = $_SESSION['newCategory']; unset($_SESSION['newCategory']); $category = new Categories_DBObject_Category(); // need this for validation info } // if we're back from validation get the object from input elseif (FormUtil::getValidationErrors()) { $category = new Categories_DBObject_Category(DBObject::GET_FROM_VALIDATION_FAILED); // need this for validation info $editCat = $category->get(); } // someone just pressen 'new' -> populate defaults else { $category = new Categories_DBObject_Category(); // need this for validation info $editCat['sort_value'] = '0'; } } $reloadOnCatChange = ($mode != 'edit'); $allCats = CategoryUtil::getSubCategories($root_id, true, true, true, false, true); // now remove the categories which are below $editCat ... // you should not be able to set these as a parent category as it creates a circular hierarchy (see bug #4992) if (isset($editCat['ipath'])) { $cSlashEdit = StringUtil::countInstances($editCat['ipath'], '/'); foreach ($allCats as $k => $v) { $cSlashCat = StringUtil::countInstances($v['ipath'], '/'); if ($cSlashCat >= $cSlashEdit && strpos($v['ipath'], $editCat['ipath']) !== false) { unset($allCats[$k]); } } } $selector = CategoryUtil::getSelector_Categories($allCats, 'id', (isset($editCat['parent_id']) ? $editCat['parent_id'] : 0), 'category[parent_id]', isset($defaultValue) ? $defaultValue : null, null, $reloadOnCatChange); $attributes = isset($editCat['__ATTRIBUTES__']) ? $editCat['__ATTRIBUTES__'] : array(); $this->view->assign('mode', $mode) ->assign('category', $editCat) ->assign('attributes', $attributes) ->assign('languages', $languages) ->assign('categorySelector', $selector) ->assign('validation', $category->_objValidation); if ($mode == 'edit') { $this->view->assign('haveSubcategories', CategoryUtil::haveDirectSubcategories($cid)) ->assign('haveLeafSubcategories', CategoryUtil::haveDirectSubcategories($cid, false, true)); } return $this->view->fetch('categories_admin_edit.tpl'); }