Example #1
0
 private function getSystemCollection($name)
 {
     switch ($name) {
         case 'itemId':
             $collection = new self($this->definition);
             $collection->addNew($name, 'lookup')->setLabel(tr('Item ID'))->setHelp(tr('Look up a single item by ID.'))->setControl(new Control\TextField("tf_itemId"))->setApplyCondition(function ($control, Search_Query $query) {
                 $value = $control->getValue();
                 if ($value) {
                     $query->filterIdentifier($value, 'object_id');
                 }
             });
             return $collection;
         case 'search':
             $collection = new self($this->definition);
             $collection->addNew($name, 'search')->setLabel(tr('Search'))->setHelp(tr('Full-text search across all of the content.'))->setControl(new Control\TextField("tf_search"))->setApplyCondition(function ($control, Search_Query $query) {
                 $value = $control->getValue();
                 if ($value) {
                     $o = TikiLib::lib('tiki')->get_preference('unified_default_content', array('contents'), true);
                     if (count($o) == 1 && empty($o[0])) {
                         // Use "contents" field by default, if no default is specified
                         $query->filterContent($value, array('contents'));
                     } else {
                         $query->filterContent($value, $o);
                     }
                 }
             });
             return $collection;
         case 'status':
             $types = TikiLib::lib('trk')->status_types();
             $possibilities = array_map(function ($item) {
                 return $item['label'];
             }, $types);
             $collection = new self($this->definition);
             $collection->addNew($name, 'dropdown')->setLabel(tr('Status'))->setControl(new Control\DropDown("tfdd_status", $possibilities))->setApplyCondition(function ($control, Search_Query $query) {
                 $value = $control->getValue();
                 if ($value) {
                     $query->filterIdentifier($value, 'tracker_status');
                 }
             });
             $controls = ['multiselect' => new Control\MultiSelect("tfms_status", $possibilities), 'checkboxes' => new Control\InlineCheckboxes("tfc_status", $possibilities)];
             foreach ($controls as $key => $control) {
                 $collection->addNew($name, $key)->setLabel(tr('Status'))->setControl($control)->setApplyCondition(function ($control, Search_Query $query) {
                     $values = $control->getValues();
                     if (!empty($values)) {
                         $sub = $query->getSubQuery("tfms_status");
                         foreach ($values as $v) {
                             $sub->filterIdentifier((string) $v, 'tracker_status');
                         }
                     }
                 });
             }
             return $collection;
         case 'facet':
             $collection = new self($this->definition);
             $lib = \TikiLib::lib('unifiedsearch');
             $provider = $lib->getFacetProvider();
             foreach ($provider->getFacets() as $facet) {
                 $getoptions = function () use($facet) {
                     if ($this->resultset) {
                         if ($filter = $this->resultset->getFacet($facet)) {
                             return $filter->getOptions();
                         }
                     }
                     return [];
                 };
                 $renderextra = function ($id) use($facet) {
                     $label = $facet->render($id) ?: tr('Unknown value');
                     return "{$label} (0)";
                 };
                 $collection->addNew($name, 'facet-any-' . $facet->getName())->setLabel(tr('%0 (any of)', $facet->getLabel()))->setControl(new Control\MultiSelect("facet_any_{$facet->getName()}", $getoptions, $renderextra))->setApplyCondition(function ($control, Search_Query $query) use($facet) {
                     $query->requestFacet($facet);
                     $values = $control->getValues();
                     if (!empty($values)) {
                         $query->getPostFilter()->filterContent(implode(" OR ", $values), $facet->getName());
                     }
                 });
                 $collection->addNew($name, 'facet-all-' . $facet->getName())->setLabel(tr('%0 (all of)', $facet->getLabel()))->setControl(new Control\MultiSelect("facet_all_{$facet->getName()}", $getoptions, $renderextra))->setApplyCondition(function ($control, Search_Query $query) use($facet) {
                     $query->requestFacet($facet);
                     $values = $control->getValues();
                     if (!empty($values)) {
                         $query->getPostFilter()->filterContent(implode(" AND ", $values), $facet->getName());
                     }
                 });
             }
             return $collection;
     }
 }
Example #2
0
 private function getSystemSchema($name)
 {
     switch ($name) {
         case 'actions':
             $trackerId = $this->definition->getConfiguration('trackerId');
             $schema = new self($this->definition);
             $schema->addNew($name, 'all')->setLabel(tr('Actions'))->addQuerySource('itemId', 'object_id')->setReadOnly(true)->setPlainReplacement(false)->setRenderTransform(function ($value, $extra) use($trackerId) {
                 $smarty = \TikiLib::lib('smarty');
                 $item = \Tracker_Item::fromId($extra['itemId']);
                 $smarty->assign('tabular_actions', ['trackerId' => $trackerId, 'itemId' => $extra['itemId'], 'canModify' => $item->canModify(), 'canRemove' => $item->canRemove()]);
                 return $smarty->fetch('tabular/item_actions.tpl');
             });
             return $schema;
         case 'itemId':
             $schema = new self($this->definition);
             $schema->addNew($name, 'id')->setLabel(tr('Item ID'))->addQuerySource('itemId', 'object_id')->setRenderTransform(function ($value, $extra) {
                 return $extra['itemId'];
             })->setParseIntoTransform(function (&$info, $value) {
                 $info['itemId'] = (int) $value;
             });
             return $schema;
         case 'status':
             $types = \TikiLib::lib('trk')->status_types();
             $invert = array_flip(array_map(function ($s) {
                 return $s['name'];
             }, $types));
             $schema = new self($this->definition);
             $schema->addNew($name, 'system')->setLabel(tr('Status'))->addQuerySource('status', 'tracker_status')->setRenderTransform(function ($value, $extra) {
                 return $extra['status'];
             })->setParseIntoTransform(function (&$info, $value) {
                 $info['status'] = $value;
             });
             $schema->addNew($name, 'name')->setLabel(tr('Status'))->addQuerySource('status', 'tracker_status')->setRenderTransform(function ($value, $extra) use($types) {
                 return $types[$extra['status']]['name'];
             })->setParseIntoTransform(function (&$info, $value) use($invert) {
                 $info['status'] = $invert[$value];
             });
             return $schema;
     }
 }