xref: /plugin/struct/action/search.php (revision 4cd5cc28e2bf004aed676e9b1f46cc188a4b2240)
176ad0db2SAndreas Gohr<?php
2d6d97f60SAnna Dabrowska
376ad0db2SAndreas Gohr/**
476ad0db2SAndreas Gohr * DokuWiki Plugin struct (Action Component)
576ad0db2SAndreas Gohr *
676ad0db2SAndreas Gohr * @license GPL 2 http://www.gnu.org/licenses/gpl-2.0.html
776ad0db2SAndreas Gohr * @author  Andreas Gohr, Michael Große <dokuwiki@cosmocode.de>
876ad0db2SAndreas Gohr */
976ad0db2SAndreas Gohr
10f411d872SAndreas Gohruse dokuwiki\plugin\struct\meta\AccessTable;
11ba766201SAndreas Gohruse dokuwiki\plugin\struct\meta\Assignments;
1276ad0db2SAndreas Gohr
13a14cf85dSAnna Dabrowska/**
14a14cf85dSAnna Dabrowska * Inject struct data into indexed pages and search result snippets
15a14cf85dSAnna Dabrowska */
16d6d97f60SAnna Dabrowskaclass action_plugin_struct_search extends DokuWiki_Action_Plugin
17d6d97f60SAnna Dabrowska{
1876ad0db2SAndreas Gohr
1976ad0db2SAndreas Gohr    /**
2076ad0db2SAndreas Gohr     * Registers a callback function for a given event
2176ad0db2SAndreas Gohr     *
2276ad0db2SAndreas Gohr     * @param Doku_Event_Handler $controller DokuWiki's event controller object
2376ad0db2SAndreas Gohr     * @return void
2476ad0db2SAndreas Gohr     */
25d6d97f60SAnna Dabrowska    public function register(Doku_Event_Handler $controller)
26d6d97f60SAnna Dabrowska    {
27748e747fSAnna Dabrowska        $controller->register_hook('INDEXER_PAGE_ADD', 'BEFORE', $this, 'handleIndexing');
28748e747fSAnna Dabrowska        $controller->register_hook('FULLTEXT_SNIPPET_CREATE', 'BEFORE', $this, 'handleSnippets');
2976ad0db2SAndreas Gohr    }
3076ad0db2SAndreas Gohr
3176ad0db2SAndreas Gohr    /**
3276ad0db2SAndreas Gohr     * Adds the structured data to the page body to be indexed
3376ad0db2SAndreas Gohr     *
3476ad0db2SAndreas Gohr     * @param Doku_Event $event event object by reference
3576ad0db2SAndreas Gohr     * @param mixed $param [the parameters passed as fifth argument to register_hook() when this
3676ad0db2SAndreas Gohr     *                           handler was registered]
3776ad0db2SAndreas Gohr     * @return bool
3876ad0db2SAndreas Gohr     */
39748e747fSAnna Dabrowska    public function handleIndexing(Doku_Event $event, $param)
40d6d97f60SAnna Dabrowska    {
4176ad0db2SAndreas Gohr        $id = $event->data['page'];
42025cb9daSAndreas Gohr        $assignments = Assignments::getInstance();
4376ad0db2SAndreas Gohr        $tables = $assignments->getPageAssignments($id);
4476ad0db2SAndreas Gohr        if (!$tables) return;
4576ad0db2SAndreas Gohr
4676ad0db2SAndreas Gohr        foreach ($tables as $table) {
47*4cd5cc28SAnna Dabrowska            $schemadata = AccessTable::getPageAccess($table, $id);
4876ad0db2SAndreas Gohr            $event->data['body'] .= $schemadata->getDataPseudoSyntax();
4976ad0db2SAndreas Gohr        }
5076ad0db2SAndreas Gohr    }
5176ad0db2SAndreas Gohr
5276ad0db2SAndreas Gohr    /**
5376ad0db2SAndreas Gohr     * Adds the structured data to the page body to be snippeted
5476ad0db2SAndreas Gohr     *
5576ad0db2SAndreas Gohr     * @param Doku_Event $event event object by reference
5676ad0db2SAndreas Gohr     * @param mixed $param [the parameters passed as fifth argument to register_hook() when this
5776ad0db2SAndreas Gohr     *                           handler was registered]
5876ad0db2SAndreas Gohr     * @return bool
5976ad0db2SAndreas Gohr     */
60748e747fSAnna Dabrowska    public function handleSnippets(Doku_Event $event, $param)
61d6d97f60SAnna Dabrowska    {
6276ad0db2SAndreas Gohr        $id = $event->data['id'];
63025cb9daSAndreas Gohr        $assignments = Assignments::getInstance();
6476ad0db2SAndreas Gohr        $tables = $assignments->getPageAssignments($id);
6576ad0db2SAndreas Gohr        if (!$tables) return;
6676ad0db2SAndreas Gohr
6776ad0db2SAndreas Gohr        foreach ($tables as $table) {
68*4cd5cc28SAnna Dabrowska            $schemadata = AccessTable::getPageAccess($table, $id);
6976ad0db2SAndreas Gohr            $event->data['text'] .= $schemadata->getDataPseudoSyntax();
7076ad0db2SAndreas Gohr        }
7176ad0db2SAndreas Gohr    }
7276ad0db2SAndreas Gohr}
7376ad0db2SAndreas Gohr
7476ad0db2SAndreas Gohr// vim:ts=4:sw=4:et:
75