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; } }
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; } }