function testValueFromGlobal() { $source = new Search_Formatter_DataSource_Declarative(); $source->addGlobalSource($this->categorySource); $source->addGlobalSource($this->permissionSource); $this->assertEquals(['categories' => [1, 2, 3]], $source->getData(['object_type' => 'wiki page', 'object_id' => 'Test'], 'categories')); $this->assertEquals(['allowed_groups' => ['Editors', 'Admins']], $source->getData(['object_type' => 'wiki page', 'object_id' => 'Test'], 'allowed_groups')); }
function testProvideResultSet() { $source = new Search_Formatter_DataSource_Declarative(); $source->addContentSource('wiki page', $this->wikiSource); $source->addGlobalSource($this->categorySource); $in = new Search_ResultSet(array(array('object_type' => 'wiki page', 'object_id' => 'Test')), 11, 10, 10); $out = new Search_ResultSet(array(array('object_type' => 'wiki page', 'object_id' => 'Test', 'description' => 'ABC', 'categories' => array(1, 2, 3))), 11, 10, 10); $this->assertEquals($out, $source->getInformation($in, array('object_id', 'description', 'categories', 'allowed_groups'))); }
function wikiplugin_listexecute($data, $params) { $unifiedsearchlib = TikiLib::lib('unifiedsearch'); $actions = array(); $factory = new Search_Action_Factory(); $factory->register(array('change_status' => 'Search_Action_ChangeStatusAction', 'delete' => 'Search_Action_Delete', 'email' => 'Search_Action_EmailAction', 'wiki_approval' => 'Search_Action_WikiApprovalAction', 'tracker_item_modify' => 'Search_Action_TrackerItemModify')); $query = new Search_Query(); $unifiedsearchlib->initQuery($query); $matches = WikiParser_PluginMatcher::match($data); $builder = new Search_Query_WikiBuilder($query); $builder->apply($matches); foreach ($matches as $match) { $name = $match->getName(); if ($name == 'action') { $action = $factory->fromMatch($match); if ($action && $action->isAllowed(Perms::get()->getGroups())) { $actions[$action->getName()] = $action; } } } if (!empty($_REQUEST['sort_mode'])) { $query->setOrder($_REQUEST['sort_mode']); } $index = $unifiedsearchlib->getIndex(); $result = $query->search($index); $plugin = new Search_Formatter_Plugin_SmartyTemplate('templates/wiki-plugins/wikiplugin_listexecute.tpl'); $paginationArguments = $builder->getPaginationArguments(); $dataSource = $unifiedsearchlib->getDataSource(); $builder = new Search_Formatter_Builder(); $builder->setPaginationArguments($paginationArguments); $builder->apply($matches); $builder->setFormatterPlugin($plugin); $formatter = $builder->getFormatter(); $formatter->setDataSource($dataSource); $reportSource = new Search_GlobalSource_Reporting(); if (isset($_POST['list_action'], $_POST['objects'])) { $action = $_POST['list_action']; $objects = (array) $_POST['objects']; if (isset($actions[$action])) { $tx = TikiDb::get()->begin(); $action = $actions[$action]; $plugin->setFields(array_fill_keys($action->getFields(), null)); $list = $formatter->getPopulatedList($result); foreach ($list as $entry) { $identifier = "{$entry['object_type']}:{$entry['object_id']}"; if (in_array($identifier, $objects) || in_array('ALL', $objects)) { $success = $action->execute($entry); $reportSource->setStatus($entry['object_type'], $entry['object_id'], $success); } } $tx->commit(); } } $plugin = new Search_Formatter_Plugin_SmartyTemplate('templates/wiki-plugins/wikiplugin_listexecute.tpl'); $plugin->setFields(array('report_status' => null)); $plugin->setData(array('actions' => array_keys($actions))); $dataSource = new Search_Formatter_DataSource_Declarative(); $dataSource->addGlobalSource($reportSource); $formatter = new Search_Formatter($plugin); $formatter->setDataSource($dataSource); return $formatter->format($result); }