xref: /plugin/struct/action/search.php (revision d6d97f6064c3b0f90310be8341edc9585520ee54)
176ad0db2SAndreas Gohr<?php
2*d6d97f60SAnna 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 */
16*d6d97f60SAnna Dabrowskaclass action_plugin_struct_search extends DokuWiki_Action_Plugin
17*d6d97f60SAnna 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     */
25*d6d97f60SAnna Dabrowska    public function register(Doku_Event_Handler $controller)
26*d6d97f60SAnna Dabrowska    {
2776ad0db2SAndreas Gohr        $controller->register_hook('INDEXER_PAGE_ADD', 'BEFORE', $this, 'handle_indexing');
2876ad0db2SAndreas Gohr        $controller->register_hook('FULLTEXT_SNIPPET_CREATE', 'BEFORE', $this, 'handle_snippets');
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     */
39*d6d97f60SAnna Dabrowska    public function handle_indexing(Doku_Event $event, $param)
40*d6d97f60SAnna 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
46a14cf85dSAnna Dabrowska        $now = time();
4776ad0db2SAndreas Gohr        foreach ($tables as $table) {
48a14cf85dSAnna Dabrowska            $schemadata = AccessTable::byTableName($table, $id, $now);
4976ad0db2SAndreas Gohr            $event->data['body'] .= $schemadata->getDataPseudoSyntax();
5076ad0db2SAndreas Gohr        }
5176ad0db2SAndreas Gohr    }
5276ad0db2SAndreas Gohr
5376ad0db2SAndreas Gohr    /**
5476ad0db2SAndreas Gohr     * Adds the structured data to the page body to be snippeted
5576ad0db2SAndreas Gohr     *
5676ad0db2SAndreas Gohr     * @param Doku_Event $event event object by reference
5776ad0db2SAndreas Gohr     * @param mixed $param [the parameters passed as fifth argument to register_hook() when this
5876ad0db2SAndreas Gohr     *                           handler was registered]
5976ad0db2SAndreas Gohr     * @return bool
6076ad0db2SAndreas Gohr     */
61*d6d97f60SAnna Dabrowska    public function handle_snippets(Doku_Event $event, $param)
62*d6d97f60SAnna Dabrowska    {
6376ad0db2SAndreas Gohr        $id = $event->data['id'];
64025cb9daSAndreas Gohr        $assignments = Assignments::getInstance();
6576ad0db2SAndreas Gohr        $tables = $assignments->getPageAssignments($id);
6676ad0db2SAndreas Gohr        if (!$tables) return;
6776ad0db2SAndreas Gohr
68a14cf85dSAnna Dabrowska        $now = time();
6976ad0db2SAndreas Gohr        foreach ($tables as $table) {
70a14cf85dSAnna Dabrowska            $schemadata = AccessTable::byTableName($table, $id, $now);
7176ad0db2SAndreas Gohr            $event->data['text'] .= $schemadata->getDataPseudoSyntax();
7276ad0db2SAndreas Gohr        }
7376ad0db2SAndreas Gohr    }
7476ad0db2SAndreas Gohr}
7576ad0db2SAndreas Gohr
7676ad0db2SAndreas Gohr// vim:ts=4:sw=4:et:
77