Beispiel #1
0
 /**
  * MonitorModelAbstract constructor.
  *
  * @param   JApplicationCms  $application  The Application object to use in this model.
  * @param   boolean          $loadFilters  If set to true, filters and list options will be loaded from the page request.
  *
  * @throws Exception
  */
 public function __construct($application = null, $loadFilters = true)
 {
     parent::__construct();
     if ($application) {
         $this->app = $application;
     } else {
         $this->app = JFactory::getApplication();
     }
     if ($loadFilters) {
         // Receive & set filters
         if ($this->filters = $this->app->getUserStateFromRequest('filter.' . $this->prefix, 'filter', array(), 'array')) {
             foreach ($this->filters as $filter => $value) {
                 $this->getState()->set('filter.' . $this->prefix . '.' . $filter, $value);
             }
         }
         // Receive & set list options
         if ($this->list = $this->app->getUserStateFromRequest('list.' . $this->prefix, 'list', array(), 'array')) {
             if (isset($this->list['fullordering']) && $this->list['fullordering']) {
                 $fullOrdering = explode(' ', $this->list['fullordering']);
                 $this->list['ordering'] = $fullOrdering[0];
                 $this->list['direction'] = $fullOrdering[1];
             }
             foreach ($this->list as $key => $value) {
                 $this->getState()->set('list.' . $this->prefix . '.' . $key, $value);
             }
         }
         if (!isset($this->list['limit']) && ($limit = $this->app->getUserStateFromRequest('list.' . $this->prefix . '.limit', 'limit', null)) !== null) {
             $this->list['limit'] = $limit;
             $this->getState()->set('list.' . $this->prefix . '.limit', $limit);
         }
     }
 }
Beispiel #2
0
 /**
  * Creates an array of HTML code for each filter
  * Also adds in JS code to manage filters
  *
  * @param   string  $container  container
  * @param   string  $type       type listviz
  * @param   string  $id         html id, only used if called from viz plugin
  * @param   string  $ref        js filter ref, used when rendering filters for visualizations
  *
  * @return  array	of html code for each filter
  */
 protected function &makeFilters($container = 'listform_1', $type = 'list', $id = '', $ref = '')
 {
     $aFilters = array();
     $fScript = array();
     $opts = new stdClass();
     $opts->container = $container;
     $opts->type = $type;
     $opts->id = $type === 'list' ? $this->getId() : $id;
     $opts->ref = $this->getRenderContext();
     $opts->advancedSearch = $this->advancedSearch->opts();
     $opts->advancedSearch->controller = $type;
     $package = $this->app->getUserState('com_fabrik.package', 'fabrik');
     $filters = $this->getFilterArray();
     $params = $this->getParams();
     // Paul Switch to 0/1 for NO/YES from AND/OR so that bootstrap classes work but support legacy values
     if ($params->get('search-mode', '0') == '1' || $params->get('search-mode', '0') == 'OR') {
         // One field to search them all (and in the darkness bind them)
         $requestKey = $this->getFilterModel()->getSearchAllRequestKey();
         $v = $this->getFilterModel()->getSearchAllValue('html');
         $o = new stdClass();
         $searchLabel = $params->get('search-all-label', FText::_('COM_FABRIK_SEARCH'));
         $class = FabrikWorker::j3() ? 'fabrik_filter search-query input-medium' : 'fabrik_filter';
         $o->id = 'searchall_' . $this->getRenderContext();
         $o->displayValue = '';
         $o->filter = '<input type="search" size="20" placeholder="' . $searchLabel . '"title="' . $searchLabel . '" value="' . $v . '" class="' . $class . '" name="' . $requestKey . '" id="' . $id . '" />';
         if ($params->get('search-mode-advanced') == 1) {
             $searchOpts = array();
             $searchOpts[] = JHTML::_('select.option', 'all', FText::_('COM_FABRIK_ALL_OF_THESE_TERMS'));
             $searchOpts[] = JHTML::_('select.option', 'any', FText::_('COM_FABRIK_ANY_OF_THESE_TERMS'));
             $searchOpts[] = JHTML::_('select.option', 'exact', FText::_('COM_FABRIK_EXACT_TERMS'));
             $searchOpts[] = JHTML::_('select.option', 'none', FText::_('COM_FABRIK_NONE_OF_THESE_TERMS'));
             $mode = $this->app->getUserStateFromRequest('com_' . $package . '.list' . $this->getRenderContext() . '.searchallmode', 'search-mode-advanced');
             $o->filter .= '&nbsp;' . JHTML::_('select.genericList', $searchOpts, 'search-mode-advanced', "class='fabrik_filter'", 'value', 'text', $mode);
         }
         $o->name = 'all';
         $o->label = $searchLabel;
         $o->displayValue = '';
         $aFilters[] = $o;
     }
     $counter = 0;
     /* $$$ hugh - another one of those weird ones where if we use = the foreach loop
      * will sometimes skip a group
      * $groups = $this->getFormGroupElementData();
      */
     $groups = $this->getFormGroupElementData();
     foreach ($groups as $groupModel) {
         $groupModel->getGroup();
         $elementModels = null;
         $elementModels = $groupModel->getPublishedElements();
         foreach ($elementModels as $elementModel) {
             $element = $elementModel->getElement();
             /*$$ rob added as some filter_types were null, have to double check that this doesnt
              * mess with showing the readonly values from search forms
              */
             if (isset($element->filter_type) && $element->filter_type != '' && $element->filter_type != 'null') {
                 if ($elementModel->canView('list') && $elementModel->canUseFilter()) {
                     /* $$$ rob in faceted browsing somehow (not sure how!) some elements from the faceted table get inserted into elementModels
                      * with their form id set - so test if its been set and if its not the same as the current form id
                      * if so then ignore
                      */
                     if (isset($element->form_id) && (int) $element->form_id !== 0 && $element->form_id !== $this->getFormModel()->getId()) {
                         continue;
                     }
                     // Force the correct group model into the element model to ensure no wierdness in getting the element name
                     $elementModel->setGroupModel($groupModel);
                     $o = new stdClass();
                     $o->name = $elementModel->getFullName(true, false);
                     $o->id = $elementModel->getHTMLId() . 'value';
                     $o->filter = $elementModel->getFilter($counter, true);
                     $fScript[] = $elementModel->filterJS(true, $container);
                     $o->required = $elementModel->getParams()->get('filter_required');
                     $o->label = $elementModel->getListHeading();
                     $o->displayValue = $elementModel->filterDisplayValues;
                     $aFilters[] = $o;
                     $counter++;
                 }
             }
         }
     }
     $opts->filters = $aFilters;
     $opts = json_encode($opts);
     array_unshift($fScript, "\tFabrik.filter_{$container} = new FbListFilter({$opts});");
     $fScript[] = 'Fabrik.filter_' . $container . ".update();";
     $this->filterJs = implode("\n", $fScript);
     // Check for search form filters - if they exists create hidden elements for them
     $keys = FArrayHelper::getValue($filters, 'key', array());
     foreach ($keys as $i => $key) {
         if ($filters['no-filter-setup'][$i] == '1' && !in_array($filters['search_type'][$i], array('searchall', 'advanced', 'jpluginfilters'))) {
             $o = new stdClass();
             /* $$$ rob - we are now setting read only filters 'filter' var to the elements read only
              * label for the passed in filter value
              *$o->filter = $value;
              */
             $elementModel = $this->getFormModel()->getElement(str_replace('`', '', $key));
             $o->filter = FArrayHelper::getValue($filters['filter'], $i);
             if ($elementModel) {
                 $elementModel->getElement()->filter_type = 'hidden';
                 $o->filter .= $elementModel->getFilter($counter, true);
             }
             $o->name = FabrikString::safeColNameToArrayKey($filters['key'][$i]);
             $o->label = $filters['label'][$i];
             $o->displayValue = $elementModel->filterDisplayValues;
             $o->id = $elementModel->getHTMLId() . 'value';
             $aFilters[] = $o;
             $counter++;
         }
     }
     return $aFilters;
 }