Exemplo n.º 1
0
 function getFilterCollection()
 {
     $filters = new Tracker\Filter\Collection($this->getTrackerDefinition());
     $permName = $this->getConfiguration('permName');
     $name = $this->getConfiguration('name');
     $baseKey = $this->getBaseKey();
     $filters->addNew($permName, 'lookup')->setLabel($name)->setControl(new Tracker\Filter\Control\TextField("tf_{$permName}_lookup"))->setApplyCondition(function ($control, Search_Query $query) use($baseKey) {
         $value = $control->getValue();
         if ($value) {
             $query->filterIdentifier($value, $baseKey);
         }
     });
     return $filters;
 }
Exemplo n.º 2
0
 function getFilterCollection()
 {
     $collection = new Tracker\Filter\Collection($this->getTrackerDefinition());
     $permName = $this->getConfiguration('permName');
     $name = $this->getConfiguration('name');
     $baseKey = $this->getBaseKey();
     $sourceCategories = $this->getApplicableCategories();
     $options = array_map(function ($i) {
         return $i['relativePathString'];
     }, $sourceCategories);
     $collection->addNew($permName, 'dropdown')->setLabel($name)->setControl(new Tracker\Filter\Control\DropDown("tf_{$permName}_dd", $options))->setApplyCondition(function ($control, Search_Query $query) use($baseKey) {
         $value = $control->getValue();
         if ($value) {
             $query->filterCategory((string) $value);
         }
     });
     $controls = ['any-of' => new Tracker\Filter\Control\MultiSelect("tf_{$permName}_anyd", $options), 'any-of-checkboxes' => new Tracker\Filter\Control\InlineCheckboxes("tf_{$permName}_anyc", $options)];
     foreach ($controls as $key => $control) {
         $collection->addNew($permName, $key)->setLabel(tr('%0 (any of)', $name))->setControl($control)->setApplyCondition(function ($control, Search_Query $query) use($baseKey) {
             $values = $control->getValues();
             if (!empty($values)) {
                 $query->filterCategory(implode(' OR ', $values));
             }
         });
     }
     $type = $this->getOption('inputtype');
     if ($type == 'm' || $type == 'checkbox') {
         $controls = ['all-of' => new Tracker\Filter\Control\MultiSelect("tf_{$permName}_alld", $options), 'all-of-checkboxes' => new Tracker\Filter\Control\InlineCheckboxes("tf_{$permName}_allc", $options)];
         foreach ($controls as $key => $control) {
             $collection->addNew($permName, $key)->setLabel(tr('%0 (all of)', $name))->setControl($control)->setApplyCondition(function ($control, Search_Query $query) use($baseKey) {
                 $values = $control->getValues();
                 if (!empty($values)) {
                     $query->filterCategory(implode(' AND ', $values));
                 }
             });
         }
     }
     return $collection;
 }
Exemplo n.º 3
0
 function getFilterCollection()
 {
     $filters = new Tracker\Filter\Collection($this->getTrackerDefinition());
     $permName = $this->getConfiguration('permName');
     $name = $this->getConfiguration('name');
     $baseKey = $this->getBaseKey();
     $possibilities = $this->getPossibilities();
     $filters->addNew($permName, 'dropdown')->setLabel($name)->setControl(new Tracker\Filter\Control\DropDown("tf_{$permName}_dd", $possibilities))->setApplyCondition(function ($control, Search_Query $query) use($baseKey) {
         $value = $control->getValue();
         if ($value) {
             $query->filterIdentifier($value, $baseKey);
         }
     });
     $filters->addNew($permName, 'multiselect')->setLabel($name)->setControl(new Tracker\Filter\Control\MultiSelect("tf_{$permName}_ms", $possibilities))->setApplyCondition(function ($control, Search_Query $query) use($permName, $baseKey) {
         $values = $control->getValues();
         if (!empty($values)) {
             $sub = $query->getSubQuery("ms_{$permName}");
             foreach ($values as $v) {
                 $sub->filterIdentifier((string) $v, $baseKey);
             }
         }
     });
     return $filters;
 }
Exemplo n.º 4
0
 function getFilterCollection()
 {
     $filters = new Tracker\Filter\Collection($this->getTrackerDefinition());
     $permName = $this->getConfiguration('permName');
     $name = $this->getConfiguration('name');
     $baseKey = $this->getBaseKey();
     $possibilities = ['selected' => tr('Yes'), 'unselected' => tr('No')];
     $filters->addNew($permName, 'dropdown')->setLabel($name)->setControl(new Tracker\Filter\Control\DropDown("tf_{$permName}_ck", $possibilities))->setApplyCondition(function ($control, Search_Query $query) use($baseKey) {
         $value = $control->getValue();
         if ($value == 'selected') {
             $query->filterContent('y', $baseKey);
         } elseif ($value == 'unselected') {
             $query->filterContent('NOT y', $baseKey);
         }
     });
     return $filters;
 }
Exemplo n.º 5
0
 function getFilterCollection()
 {
     global $prefs;
     $filters = new Tracker\Filter\Collection($this->getTrackerDefinition());
     $permName = $this->getConfiguration('permName');
     $name = $this->getConfiguration('name');
     $baseKey = $this->getBaseKey();
     $generateFulltext = function ($field) {
         return function ($control, Search_Query $query) use($field) {
             $value = $control->getValue();
             if ($value) {
                 $query->filterContent($value, $field);
             }
         };
     };
     if ('y' !== $this->getConfiguration('isMultilingual', 'n')) {
         $filters->addNew($permName, 'fulltext')->setLabel($name)->setHelp(tr('Full-text search of the content of the field.'))->setControl(new Tracker\Filter\Control\TextField("tf_{$permName}_ft"))->setApplyCondition($generateFulltext($baseKey));
         $filters->addNew($permName, 'initial')->setLabel($name)->setHelp(tr('Search for a value prefix.'))->setControl(new Tracker\Filter\Control\TextField("tf_{$permName}_init"))->setApplyCondition(function ($control, Search_Query $query) use($baseKey) {
             $value = $control->getValue();
             if ($value) {
                 $query->filterInitial($value, $baseKey);
             }
         });
         if ('y' === $this->getOption('exact', 'n')) {
             $filters->addNew($permName, 'exact')->setLabel($name)->setHelp(tr('Search for a precise value.'))->setControl(new Tracker\Filter\Control\TextField("tf_{$permName}_em"))->setApplyCondition(function ($control, Search_Query $query) use($baseKey) {
                 $value = $control->getValue();
                 if ($value) {
                     $query->filterIdentifier($value, $baseKey . '_exact');
                 }
             });
         }
     } else {
         $language = $prefs['language'];
         $filters->addNew($permName, "fulltext-current")->setLabel($name)->setHelp(tr('Full-text search in the current language.'))->setControl(new Tracker\Filter\Control\TextField("tf_{$permName}_current_ft"))->setApplyCondition($generateFulltext("{$baseKey}_{$language}"));
         $fields = [];
         foreach ($prefs['available_languages'] as $lang) {
             $field = "{$baseKey}_{$lang}";
             $fields[] = $field;
             $filters->addNew($permName, "fulltext-{$lang}")->setLabel(tr('%0 (%1)', $name, $lang))->setHelp(tr('Full-text search in a specific language (%0).', $lang))->setControl(new Tracker\Filter\Control\TextField("tf_{$permName}_{$lang}_ft"))->setApplyCondition($generateFulltext($field));
         }
         $filters->addNew($permName, "fulltext")->setLabel(tr('%0 (any language)', $name))->setHelp(tr('Full-text search in any language.'))->setControl(new Tracker\Filter\Control\TextField("tf_{$permName}_ft"))->setApplyCondition($generateFulltext(implode(',', $fields)));
     }
     return $filters;
 }
Exemplo n.º 6
0
 function getFilterCollection()
 {
     $filters = new Tracker\Filter\Collection($this->getTrackerDefinition());
     $permName = $this->getConfiguration('permName');
     $name = $this->getConfiguration('name');
     $baseKey = $this->getBaseKey();
     $filters->addNew($permName, 'range')->setLabel($name)->setControl(new Tracker\Filter\Control\DateRange("tf_{$permName}_range"))->setApplyCondition(function ($control, Search_Query $query) use($baseKey) {
         if ($control->hasValue()) {
             $query->filterRange($control->getFrom(), $control->getTo(), $baseKey);
         }
     });
     return $filters;
 }
Exemplo n.º 7
0
 function getFilterCollection()
 {
     $collection = new Tracker\Filter\Collection($this->getTrackerDefinition());
     $permName = $this->getConfiguration('permName');
     $name = $this->getConfiguration('name');
     $baseKey = $this->getBaseKey();
     $collection->addNew($permName, 'selector')->setLabel($name)->setControl(new Tracker\Filter\Control\ObjectSelector("tf_{$permName}_os", ['type' => 'trackeritem', 'tracker_status' => implode(' OR ', str_split($this->getOption('status', 'opc'), 1)), 'tracker_id' => $this->getOption('trackerId'), '_placeholder' => tr(TikiLib::lib('object')->get_title('tracker', $this->getOption('trackerId')))]))->setApplyCondition(function ($control, Search_Query $query) use($baseKey) {
         $value = $control->getValue();
         if ($value) {
             $query->filterIdentifier((string) $value, $baseKey);
         }
     });
     $collection->addNew($permName, 'multiselect')->setLabel($name)->setControl(new Tracker\Filter\Control\ObjectSelector("tf_{$permName}_ms", ['type' => 'trackeritem', 'tracker_status' => implode(' OR ', str_split($this->getOption('status', 'opc'), 1)), 'tracker_id' => $this->getOption('trackerId'), '_placeholder' => tr(TikiLib::lib('object')->get_title('tracker', $this->getOption('trackerId')))], true))->setApplyCondition(function ($control, Search_Query $query) use($baseKey) {
         $value = $control->getValue();
         if ($value) {
             $value = array_map(function ($v) {
                 return str_replace('trackeritem:', '', $v);
             }, $value);
             $query->filterMultivalue(implode(' OR ', $value), $baseKey);
         }
     });
     $indexRemote = array_filter($this->getOption('indexRemote') ?: []);
     if (count($indexRemote)) {
         $trklib = TikiLib::lib('trk');
         $trackerId = $this->getOption('trackerId');
         $item = $trklib->get_tracker_item($this->getItemId());
         $definition = Tracker_Definition::get($trackerId);
         $factory = $definition->getFieldFactory();
         foreach ($indexRemote as $fieldId) {
             $field = $definition->getField($fieldId);
             $handler = $factory->getHandler($field, $item);
             if ($handler instanceof Tracker_Field_Filterable) {
                 $handler->setBaseKeyPrefix($permName . '_');
                 $sub = $handler->getFilterCollection();
                 $collection->addCloned($permName, $sub);
             }
         }
     }
     return $collection;
 }
Exemplo n.º 8
0
 function action_select_filter($input)
 {
     $permName = $input->permName->word();
     $trackerId = $input->trackerId->int();
     $tracker = \Tracker_Definition::get($trackerId);
     if (!$tracker) {
         throw new Services_Exception_NotFound();
     }
     Services_Exception_Denied::checkObject('tiki_p_view_trackers', 'tracker', $trackerId);
     $schema = new \Tracker\Filter\Collection($tracker);
     $local = $schema->getFieldCollection($permName);
     if ($_SERVER['REQUEST_METHOD'] == 'POST') {
         $column = $schema->addFilter($permName, $input->mode->text());
         return ['field' => $column->getField(), 'mode' => $column->getMode(), 'label' => $column->getLabel()];
     }
     return ['title' => tr('Fields in %0', $tracker->getConfiguration('name')), 'trackerId' => $trackerId, 'permName' => $permName, 'collection' => $local];
 }