xref: /plugin/struct/action/search.php (revision 76ad0db27dc8d6968c3493b3f0c04fbdbd7728ae) !
1*76ad0db2SAndreas Gohr<?php
2*76ad0db2SAndreas Gohr/**
3*76ad0db2SAndreas Gohr * DokuWiki Plugin struct (Action Component)
4*76ad0db2SAndreas Gohr *
5*76ad0db2SAndreas Gohr * @license GPL 2 http://www.gnu.org/licenses/gpl-2.0.html
6*76ad0db2SAndreas Gohr * @author  Andreas Gohr, Michael Große <dokuwiki@cosmocode.de>
7*76ad0db2SAndreas Gohr */
8*76ad0db2SAndreas Gohr
9*76ad0db2SAndreas Gohr// must be run within Dokuwiki
10*76ad0db2SAndreas Gohruse plugin\struct\meta\Assignments;
11*76ad0db2SAndreas Gohruse plugin\struct\meta\SchemaData;
12*76ad0db2SAndreas Gohr
13*76ad0db2SAndreas Gohrif(!defined('DOKU_INC')) die();
14*76ad0db2SAndreas Gohr
15*76ad0db2SAndreas Gohrclass action_plugin_struct_search extends DokuWiki_Action_Plugin {
16*76ad0db2SAndreas Gohr
17*76ad0db2SAndreas Gohr    /**
18*76ad0db2SAndreas Gohr     * Registers a callback function for a given event
19*76ad0db2SAndreas Gohr     *
20*76ad0db2SAndreas Gohr     * @param Doku_Event_Handler $controller DokuWiki's event controller object
21*76ad0db2SAndreas Gohr     * @return void
22*76ad0db2SAndreas Gohr     */
23*76ad0db2SAndreas Gohr    public function register(Doku_Event_Handler $controller) {
24*76ad0db2SAndreas Gohr        $controller->register_hook('INDEXER_PAGE_ADD', 'BEFORE', $this, 'handle_indexing');
25*76ad0db2SAndreas Gohr        $controller->register_hook('FULLTEXT_SNIPPET_CREATE', 'BEFORE', $this, 'handle_snippets');
26*76ad0db2SAndreas Gohr    }
27*76ad0db2SAndreas Gohr
28*76ad0db2SAndreas Gohr    /**
29*76ad0db2SAndreas Gohr     * Adds the structured data to the page body to be indexed
30*76ad0db2SAndreas Gohr     *
31*76ad0db2SAndreas Gohr     * @param Doku_Event $event event object by reference
32*76ad0db2SAndreas Gohr     * @param mixed $param [the parameters passed as fifth argument to register_hook() when this
33*76ad0db2SAndreas Gohr     *                           handler was registered]
34*76ad0db2SAndreas Gohr     * @return bool
35*76ad0db2SAndreas Gohr     */
36*76ad0db2SAndreas Gohr    public function handle_indexing(Doku_Event $event, $param) {
37*76ad0db2SAndreas Gohr        $id = $event->data['page'];
38*76ad0db2SAndreas Gohr        $assignments = new Assignments();
39*76ad0db2SAndreas Gohr        $tables = $assignments->getPageAssignments($id);
40*76ad0db2SAndreas Gohr        if(!$tables) return;
41*76ad0db2SAndreas Gohr
42*76ad0db2SAndreas Gohr        foreach($tables as $table) {
43*76ad0db2SAndreas Gohr            $schemadata = new SchemaData($table, $id, 0);
44*76ad0db2SAndreas Gohr            $event->data['body'] .= $schemadata->getDataPseudoSyntax();
45*76ad0db2SAndreas Gohr        }
46*76ad0db2SAndreas Gohr    }
47*76ad0db2SAndreas Gohr
48*76ad0db2SAndreas Gohr    /**
49*76ad0db2SAndreas Gohr     * Adds the structured data to the page body to be snippeted
50*76ad0db2SAndreas Gohr     *
51*76ad0db2SAndreas Gohr     * @param Doku_Event $event event object by reference
52*76ad0db2SAndreas Gohr     * @param mixed $param [the parameters passed as fifth argument to register_hook() when this
53*76ad0db2SAndreas Gohr     *                           handler was registered]
54*76ad0db2SAndreas Gohr     * @return bool
55*76ad0db2SAndreas Gohr     */
56*76ad0db2SAndreas Gohr    public function handle_snippets(Doku_Event $event, $param) {
57*76ad0db2SAndreas Gohr        $id = $event->data['id'];
58*76ad0db2SAndreas Gohr        $assignments = new Assignments();
59*76ad0db2SAndreas Gohr        $tables = $assignments->getPageAssignments($id);
60*76ad0db2SAndreas Gohr        if(!$tables) return;
61*76ad0db2SAndreas Gohr
62*76ad0db2SAndreas Gohr        foreach($tables as $table) {
63*76ad0db2SAndreas Gohr            $schemadata = new SchemaData($table, $id, 0);
64*76ad0db2SAndreas Gohr            $event->data['text'] .= $schemadata->getDataPseudoSyntax();
65*76ad0db2SAndreas Gohr        }
66*76ad0db2SAndreas Gohr    }
67*76ad0db2SAndreas Gohr}
68*76ad0db2SAndreas Gohr
69*76ad0db2SAndreas Gohr// vim:ts=4:sw=4:et:
70