xref: /plugin/struct/action/search.php (revision 748e747f37aa44250ee32847b5fc3ff1e47f0835)
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    {
27*748e747fSAnna Dabrowska        $controller->register_hook('INDEXER_PAGE_ADD', 'BEFORE', $this, 'handleIndexing');
28*748e747fSAnna 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     */
39*748e747fSAnna 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
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*748e747fSAnna Dabrowska    public function handleSnippets(Doku_Event $event, $param)
62d6d97f60SAnna 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