예제 #1
0
    /**
     * 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);
    }
예제 #2
0
파일: Ajax.php 프로젝트: projectesIF/Sirius
    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);
    }
예제 #3
0
    /**
     * 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');
    }
예제 #4
0
 /**
  * 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'));
 }