xref: /plugin/struct/action/diff.php (revision 4cd5cc28e2bf004aed676e9b1f46cc188a4b2240)
110caaf49SAndreas Gohr<?php
2d6d97f60SAnna Dabrowska
310caaf49SAndreas Gohr/**
410caaf49SAndreas Gohr * DokuWiki Plugin struct (Action Component)
510caaf49SAndreas Gohr *
610caaf49SAndreas Gohr * @license GPL 2 http://www.gnu.org/licenses/gpl-2.0.html
710caaf49SAndreas Gohr * @author  Andreas Gohr, Michael Große <dokuwiki@cosmocode.de>
810caaf49SAndreas Gohr */
910caaf49SAndreas Gohr
10f411d872SAndreas Gohruse dokuwiki\plugin\struct\meta\AccessTable;
11ba766201SAndreas Gohruse dokuwiki\plugin\struct\meta\Assignments;
1294c9aa4cSAndreas Gohruse dokuwiki\plugin\struct\meta\AccessTableData;
13a28d6152SAndreas Gohruse dokuwiki\plugin\struct\meta\StructException;
1410caaf49SAndreas Gohr
15d6d97f60SAnna Dabrowskaclass action_plugin_struct_diff extends DokuWiki_Action_Plugin
16d6d97f60SAnna Dabrowska{
1710caaf49SAndreas Gohr
1810caaf49SAndreas Gohr    /**
1910caaf49SAndreas Gohr     * Registers a callback function for a given event
2010caaf49SAndreas Gohr     *
2110caaf49SAndreas Gohr     * @param Doku_Event_Handler $controller DokuWiki's event controller object
2210caaf49SAndreas Gohr     * @return void
2310caaf49SAndreas Gohr     */
24d6d97f60SAnna Dabrowska    public function register(Doku_Event_Handler $controller)
25d6d97f60SAnna Dabrowska    {
26748e747fSAnna Dabrowska        $controller->register_hook('IO_WIKIPAGE_READ', 'AFTER', $this, 'handleDiffload');
2710caaf49SAndreas Gohr    }
2810caaf49SAndreas Gohr
2910caaf49SAndreas Gohr    /**
3010caaf49SAndreas Gohr     * Add structured data to the diff
3110caaf49SAndreas Gohr     *
3210caaf49SAndreas Gohr     * This is done by adding pseudo syntax to the page source when it is loaded in diff context
3310caaf49SAndreas Gohr     *
3410caaf49SAndreas Gohr     * @param Doku_Event $event event object by reference
3510caaf49SAndreas Gohr     * @param mixed $param [the parameters passed as fifth argument to register_hook() when this
3610caaf49SAndreas Gohr     *                           handler was registered]
3710caaf49SAndreas Gohr     * @return bool
3810caaf49SAndreas Gohr     */
39748e747fSAnna Dabrowska    public function handleDiffload(Doku_Event $event, $param)
40d6d97f60SAnna Dabrowska    {
4110caaf49SAndreas Gohr        global $ACT;
4210caaf49SAndreas Gohr        global $INFO;
4310caaf49SAndreas Gohr        if ($ACT != 'diff') return;
4410caaf49SAndreas Gohr        $id = $event->data[2];
450c555ad4SMichael Grosse        if (!blank($event->data[1])) {
460c555ad4SMichael Grosse            $id = $event->data[1] . ':' . $id;
470c555ad4SMichael Grosse        }
487f803aa8SAnna Dabrowska        $rev = $event->data[3] ?: time();
4910caaf49SAndreas Gohr        if ($INFO['id'] != $id) return;
5010caaf49SAndreas Gohr
51025cb9daSAndreas Gohr        $assignments = Assignments::getInstance();
5210caaf49SAndreas Gohr        $tables = $assignments->getPageAssignments($id);
5310caaf49SAndreas Gohr        if (!$tables) return;
5410caaf49SAndreas Gohr
5508e7b568SAndreas Gohr        $event->result .= "\n---- struct data ----\n";
5610caaf49SAndreas Gohr        foreach ($tables as $table) {
57a28d6152SAndreas Gohr            try {
58*4cd5cc28SAnna Dabrowska                $schemadata = AccessTable::getPageAccess($table, $id, $rev);
59a28d6152SAndreas Gohr            } catch (StructException $ignored) {
60a28d6152SAndreas Gohr                continue; // no such schema at this revision
61a28d6152SAndreas Gohr            }
6208e7b568SAndreas Gohr            $event->result .= $schemadata->getDataPseudoSyntax();
6310caaf49SAndreas Gohr        }
6408e7b568SAndreas Gohr        $event->result .= "----\n";
6510caaf49SAndreas Gohr    }
6610caaf49SAndreas Gohr}
6710caaf49SAndreas Gohr
6810caaf49SAndreas Gohr// vim:ts=4:sw=4:et:
69