Ejemplo n.º 1
0
 function testSourceFindsEntryWithMultipleSourceResults()
 {
     $wikiSource = new Search_ContentSource_Static(array('Test' => array(array('title' => 'Test', 'hash' => '3'), array('title' => 'Test (latest)', 'hash' => '4'))), array('title' => 'sortable', 'hash' => 'identifier'));
     $source = new Search_Formatter_DataSource_Declarative();
     $source->addContentSource('wiki page', $wikiSource);
     $in = new Search_ResultSet(array(array('object_type' => 'wiki page', 'object_id' => 'Test', 'hash' => '4')), 11, 10, 10);
     $out = new Search_ResultSet(array(array('object_type' => 'wiki page', 'object_id' => 'Test', 'title' => 'Test (latest)', 'hash' => '4')), 11, 10, 10);
     $this->assertEquals($out, $source->getInformation($in, array('object_id', 'hash', 'title')));
 }
Ejemplo n.º 2
0
 function testContentSourceNotAvailable()
 {
     $source = new Search_Formatter_DataSource_Declarative();
     $this->assertEquals([], $source->getData(['object_type' => 'wiki page', 'object_id' => 'Test'], 'title'));
 }
Ejemplo n.º 3
0
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);
}