// | Render | // +----------------------------------------------------------------------+ $dialog = new CMS_dialog(); $content = ''; $dialog->setTitle($cms_language->getMessage(MESSAGE_PAGE_TITLE_MODULE, array($cms_module->getLabel($cms_language))) . " :: " . $cms_language->getMessage(MESSAGE_PAGE_TITLE, false, MOD_CMS_FORMS_CODENAME)); $dialog->setBacklink("items.php?item=" . $item->getId()); if ($cms_message) { $dialog->setActionMessage($cms_message); } // Insert prefered text editor for textarea field $toolbarset = !$cms_module->getParameters("editor_toolbar") ? 'Basic' : $cms_module->getParameters("editor_toolbar"); $attrs = array('form' => 'frmitem', 'field' => 'source_' . $item->getID(), 'value' => $item->getAttribute('source'), 'language' => $cms_language, 'width' => 600, 'height' => 600, 'rows' => 8, 'toolbarset' => $toolbarset); $text_editor = CMS_textEditor::getEditorFromParams($attrs); $dialog->setJavascript($text_editor->getJavascript()); // Get listboxes for categories $a_all_categories = CMS_moduleCategories_catalog::getAllCategoriesAsArray($cms_user, $cms_module->getCodename(), $cms_language); if (!sizeof($a_all_categories)) { //user has no right on categories so he can't edit/create items header("Location: " . $cms_module->getAdminFrontendPath(PATH_RELATIVETO_WEBROOT) . "?cms_message_id=65&" . session_name() . "=" . session_id()); exit; } $s_categories_listboxes = CMS_moduleCategories_catalog::getListBoxes(array('field_name' => 'ids', 'items_possible' => $a_all_categories, 'items_selected' => $item_relations->getCategoriesIds(), 'select_width' => '250px', 'select_height' => '120px', 'form_name' => 'frmitem')); // Default check statuses for radios $public = array(); $public[1] = $item->getAttribute('public') === true ? ' checked="checked"' : ''; $public[0] = $item->getAttribute('public') === false ? ' checked="checked"' : ''; $content = ' <table border="0" cellpadding="3" cellspacing="2"> <form name="frmitem" action="' . $_SERVER["SCRIPT_NAME"] . '" method="post" enctype="multipart/form-data" onSubmit="getSelectedOptionsInField_ids();"> <input type="hidden" name="cms_action" value="validate" /> <input type="hidden" name="language" value="' . CMS_session::getSessionVar("items_language") . '" />
/** * Returns each category ID and label in a module given user can see * * @param CMS_language $cms_language, the language of the labels * @param boolean $restrictToUsedCat, restrict returned categories to used ones only (default false) * @param string $cms_module, the module codename (optional) * @param boolean $editableOnly, return only user editable categories (default false : viewvable ones) * @param mixed $clearanceLevel * - false : CLEARANCE_MODULE_VIEW * - true : CLEARANCE_MODULE_EDIT * - constant value : clearanceLevel value * @param mixed $categoriesRoot, root category ID to use (default : false : the field root category) * @param boolean $strict, return strict categories available for user for this field (without the parent tree). default false * @param mixed (boolean or array) $usedByItemsIds, This parameters is used only if $restrictToUsedCat is used. False to restrict to only used categories (default) * @return array(string) the statements or false if profile hasn't any access to any categories * @access public */ function getAllCategoriesAsArray($language = false, $restrictToUsedCat = false, $module = false, $clearanceLevel = false, $categoriesRoot = false, $strict = false, $usedByItemsIds = false, $crossLanguage = false) { global $cms_user; $params = $this->getParamsValues(); $categoriesRoot = $categoriesRoot ? $categoriesRoot : $params['rootCategory']; //check category root if ($categoriesRoot) { $cat = CMS_moduleCategories_catalog::getByID($categoriesRoot); if (!$cat || $cat->hasError()) { $categoriesRoot = false; } } //get module if none passed if (!$module) { $module = CMS_poly_object_catalog::getModuleCodenameForField($this->_field->getID()); } if (APPLICATION_ENFORCES_ACCESS_CONTROL && !is_object($cms_user)) { $this->raiseError("Valid user missing"); return false; } if (!is_object($cms_user)) { //TODO : ugly but missing time (need to redo the getAllCategoriesAsArray to accept no valid cms_user : append only in frontend without APPLICATION_ENFORCES_ACCESS_CONTROL. Medias module already doing something like this) $user = new CMS_profile_user(ROOT_PROFILEUSER_ID); $categories = CMS_moduleCategories_catalog::getAllCategoriesAsArray($user, $module, $language, $categoriesRoot, -1, $clearanceLevel, $strict, $crossLanguage); } else { $user = $cms_user; $categories = CMS_moduleCategories_catalog::getAllCategoriesAsArray($user, $module, $language, $categoriesRoot, -1, $clearanceLevel, $strict, $crossLanguage); } if ($restrictToUsedCat) { //pr($usedCategories); //filter categories by items ids if (is_array($usedByItemsIds)) { //Get all used categories IDS for this object field and givens items ids $usedCategories = $this->getAllUsedCategoriesForField($usedByItemsIds); } else { //Get all used categories IDS for this object field $usedCategories = $this->getAllUsedCategoriesForField(); } if (is_array($usedCategories) && $usedCategories) { //get all categories lineage $catArbo = CMS_moduleCategories_catalog::getViewvableCategoriesForProfile($user, $module, true, $clearanceLevel, $strict); //pr($catArbo); //need to remove all unused categories from list $categoriesToKeep = array(); foreach ($usedCategories as $catID) { $cats = isset($catArbo[$catID]) ? explode(';', $catArbo[$catID]) : array(); foreach ($cats as $aCat) { $categoriesToKeep[$aCat] = $aCat; } } //pr($categoriesToKeep); //then remove unused categories from initial list if (is_array($categories)) { foreach (array_keys($categories) as $catID) { if (!isset($categoriesToKeep[$catID])) { unset($categories[$catID]); } } } //pr($categories); } else { //no categories used $categories = array(); } if (!$categories) { return array(); } } return $categories; }
/** * Returns each category ID and label in a module given user can see * * @access public * @param CMS_language $cms_language, the language of the labels * @param boolean $restrictToUsedCat, restrict returned categories to used ones only (default false) * @return array(string) the statements or false if profile hasn't any access to any categories */ function getAllCategoriesAsArray($language = false, $restrictToUsedCat = false) { global $cms_user; $categories = CMS_moduleCategories_catalog::getAllCategoriesAsArray($cms_user, MOD_CMS_FORMS_CODENAME, $language); //pr($categories); if (!$restrictToUsedCat) { return $categories; } else { //Get all used categories IDS for this object field $usedCategories = CMS_forms_formularCategories::getAllUsedCategoriesForField($language); if (sizeof($usedCategories)) { //get all categories lineage $catArbo = CMS_moduleCategories_catalog::getViewvableCategoriesForProfile($cms_user, MOD_CMS_FORMS_CODENAME, true); //pr($catArbo); //need to remove all unused categories from list $categoriesToKeep = array(); foreach ($usedCategories as $catID) { $cats = explode(';', $catArbo[$catID]); foreach ($cats as $aCat) { $categoriesToKeep[$aCat] = $aCat; } } //pr($categoriesToKeep); //then remove unused categories from initial list foreach ($categories as $catID => $catLabel) { if (!isset($categoriesToKeep[$catID])) { unset($categories[$catID]); } } //pr($categories); return $categories; } else { //no categories used return array(); } } }