/** * update category */ public function edit() { $this->checkCsrfToken(); if (!SecurityUtil::checkPermission('Categories::', '::', ACCESS_EDIT)) { return LogUtil::registerPermissionError(); } $dr = (int)FormUtil::getPassedValue('dr', 0, 'POST'); $ref = System::serverGetVar('HTTP_REFERER'); $returnfunc = strpos($ref, "useredit") !== false ? 'useredit' : 'edit'; $url = ModUtil::url('Categories', 'user', $returnfunc, array('dr' => $dr)); if (!$dr) { return LogUtil::registerError($this->__('Error! The document root is invalid.'), null, $url); } $obj = new Categories_DBObject_Category (); $data = $obj->getDataFromInput(); $oldData = $obj->get($data['id']); $obj->setData($data); if (!$oldData) { $msg = $this->__f('Error! Cannot retrieve category with ID %s.', $data['id']); return LogUtil::registerError($msg, null, $url); } if ($oldData['is_locked']) { //! %1$s is the id, %2$s is the name return LogUtil::registerError($this->__f('Notice: The administrator has locked the category \'%2$s\' (ID \'%$1s\'). You cannot edit or delete it.', array($data['id'], $oldData['name'])), null, $url); } if (!$obj->validate()) { $_POST['cid'] = (int)$_POST['category']['id']; $this->redirect(ModUtil::url('Categories', 'user', 'edit', $_POST) . '#top'); } $attributes = array(); $values = FormUtil::getPassedValue('attribute_value', 'POST'); foreach (FormUtil::getPassedValue('attribute_name', 'POST') as $index => $name) { if (!empty($name)) $attributes[$name] = $values[$index]; } $obj->setDataField('__ATTRIBUTES__', $attributes); // update new category data $obj->update(); // since a name change will change the object path, we must rebuild it here if ($oldData['name'] != $data['name']) { CategoryUtil::rebuildPaths('path', 'name', $data['id']); } $msg = $this->__f('Done! Saved the %s category.', $oldData['name']); LogUtil::registerStatus($msg); $this->redirect($url); }
public function edit($args = array()) { $this->checkAjaxToken(); $mode = $this->request->request->get('mode', 'new'); $accessLevel = $mode == 'edit' ? ACCESS_EDIT : ACCESS_ADD; $this->throwForbiddenUnless(SecurityUtil::checkPermission('Categories::', '::', $accessLevel)); $cid = isset($args['cid']) ? $args['cid'] : $this->request->request->get('cid', 0); $parent = isset($args['parent']) ? $args['parent'] : $this->request->request->get('parent', 1); $validationErrors = FormUtil::getValidationErrors(); $editCat = ''; $languages = ZLanguage::getInstalledLanguages(); if ($validationErrors) { $category = new Categories_DBObject_Category(DBObject::GET_FROM_VALIDATION_FAILED); // need this for validation info $editCat = $category->get(); $validationErrors = $validationErrors['category']; } else { // indicates that we're editing if ($mode == 'edit') { if (!$cid) { return new Zikula_Response_Ajax_BadData($this->__('Error! Cannot determine valid \'cid\' for edit mode in \'Categories_admin_edit\'.')); } $category = new Categories_DBObject_Category(); $editCat = $category->select($cid); $this->throwNotFoundUnless($editCat, $this->__('Sorry! No such item found.')); } else { // someone just pressen 'new' -> populate defaults $category = new Categories_DBObject_Category(); // need this for validation info $editCat['sort_value'] = '0'; $editCat['parent_id'] = $parent; } } $attributes = isset($editCat['__ATTRIBUTES__']) ? $editCat['__ATTRIBUTES__'] : array(); Zikula_AbstractController::configureView(); $this->view->setCaching(Zikula_View::CACHE_DISABLED); $this->view->assign('mode', $mode) ->assign('category', $editCat) ->assign('attributes', $attributes) ->assign('languages', $languages) ->assign('validation', $category->_objValidation); $result = array( 'action' => $mode == 'new' ? 'add' : 'edit', 'result' => $this->view->fetch('categories_adminajax_edit.tpl'), 'validationErrors' => $validationErrors ); if ($validationErrors) { return new Zikula_Response_Ajax_BadData($validationErrors, $result); } return new Zikula_Response_Ajax($result); }
/** * 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'); }
/** * move category */ public function move() { $this->checkCsrfToken(); if (!SecurityUtil::checkPermission('Categories::', '::', ACCESS_EDIT)) { return LogUtil::registerPermissionError(); } if (FormUtil::getPassedValue('category_cancel', null, 'POST')) { return System::redirect(ModUtil::url('Categories', 'admin', 'view')); } $cid = FormUtil::getPassedValue('cid', null, 'POST'); $cat = new Categories_DBObject_Category(); $cat->get($cid); $cat->move($_POST['category']['parent_id']); $msg = __f('Done! Moved the %s category.', $cat->_objData['name']); LogUtil::registerStatus($msg); $this->redirect(ModUtil::url('Categories', 'admin', 'view')); }