/** * Method to get the field options. * * @return array The field option objects. * @since 1.6 */ protected function getOptions() { // Initialize variables. $session = JFactory::getSession(); $options = array(); // Initialize some field attributes. $extension = $this->element['extension'] ? (string) $this->element['extension'] : (string) $this->element['scope']; $published = (string) $this->element['published']; // OLD values // Load the category options for a given extension. if (!empty($extension)) { // Filter over published state or not depending upon if it is present. if ($published) { $options = JHtml::_('category.options', $extension, array('filter.published' => explode(',', $published))); } else { $options = JHtml::_('category.options', $extension); } // Verify permissions. If the action attribute is set, then we scan the options. if ($action = (string) $this->element['action']) { // Get the current user object. $user = JFactory::getUser(); // TODO: Add a preload method to JAccess so that we can get all the asset rules in one query and cache them. // eg JAccess::preload('core.create', 'com_content.category') foreach ($options as $i => $option) { // Unset the option if the user isn't authorised for it. if (!$user->authorise($action, $extension . '.category.' . $option->value)) { unset($options[$i]); } } } } else { JError::raiseWarning(500, JText::_('JLIB_FORM_ERROR_FIELDS_CATEGORY_ERROR_EXTENSION_EMPTY')); } // if no value exists, try to load a selected filter category from the old category filters if (!$this->value && $this->form instanceof JForm) { $context = $this->form->getName(); $this->value = array(); for ($i = 0; $i < 20; $i++) { if ($this->form->getValue("catid{$i}", "params", 0)) { $this->value[] = $this->form->getValue("catid{$i}", "params", 0); } } } // Merge any additional options in the XML definition. $options = array_merge(parent::getOptions(), $options); return $options; }