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 107234bfb1Ssplitbrainuse dokuwiki\Extension\ActionPlugin; 117234bfb1Ssplitbrainuse dokuwiki\Extension\EventHandler; 127234bfb1Ssplitbrainuse dokuwiki\Extension\Event; 13f411d872SAndreas Gohruse dokuwiki\plugin\struct\meta\AccessTable; 14ba766201SAndreas Gohruse dokuwiki\plugin\struct\meta\Assignments; 15a28d6152SAndreas Gohruse dokuwiki\plugin\struct\meta\StructException; 1610caaf49SAndreas Gohr 177234bfb1Ssplitbrainclass action_plugin_struct_diff extends ActionPlugin 18d6d97f60SAnna Dabrowska{ 1910caaf49SAndreas Gohr /** 2010caaf49SAndreas Gohr * Registers a callback function for a given event 2110caaf49SAndreas Gohr * 22*5e29103aSannda * @param EventHandler $controller DokuWiki's event controller object 2310caaf49SAndreas Gohr * @return void 2410caaf49SAndreas Gohr */ 257234bfb1Ssplitbrain public function register(EventHandler $controller) 26d6d97f60SAnna Dabrowska { 27748e747fSAnna Dabrowska $controller->register_hook('IO_WIKIPAGE_READ', 'AFTER', $this, 'handleDiffload'); 2810caaf49SAndreas Gohr } 2910caaf49SAndreas Gohr 3010caaf49SAndreas Gohr /** 3110caaf49SAndreas Gohr * Add structured data to the diff 3210caaf49SAndreas Gohr * 3310caaf49SAndreas Gohr * This is done by adding pseudo syntax to the page source when it is loaded in diff context 3410caaf49SAndreas Gohr * 35*5e29103aSannda * @param Event $event event object by reference 3610caaf49SAndreas Gohr * @param mixed $param [the parameters passed as fifth argument to register_hook() when this 3710caaf49SAndreas Gohr * handler was registered] 3810caaf49SAndreas Gohr * @return bool 3910caaf49SAndreas Gohr */ 407234bfb1Ssplitbrain public function handleDiffload(Event $event, $param) 41d6d97f60SAnna Dabrowska { 4210caaf49SAndreas Gohr global $ACT; 4310caaf49SAndreas Gohr global $INFO; 4410caaf49SAndreas Gohr if ($ACT != 'diff') return; 4510caaf49SAndreas Gohr $id = $event->data[2]; 460c555ad4SMichael Grosse if (!blank($event->data[1])) { 470c555ad4SMichael Grosse $id = $event->data[1] . ':' . $id; 480c555ad4SMichael Grosse } 497f803aa8SAnna Dabrowska $rev = $event->data[3] ?: time(); 5010caaf49SAndreas Gohr if ($INFO['id'] != $id) return; 5110caaf49SAndreas Gohr 52025cb9daSAndreas Gohr $assignments = Assignments::getInstance(); 5310caaf49SAndreas Gohr $tables = $assignments->getPageAssignments($id); 5410caaf49SAndreas Gohr if (!$tables) return; 5510caaf49SAndreas Gohr 5608e7b568SAndreas Gohr $event->result .= "\n---- struct data ----\n"; 5710caaf49SAndreas Gohr foreach ($tables as $table) { 58a28d6152SAndreas Gohr try { 594cd5cc28SAnna Dabrowska $schemadata = AccessTable::getPageAccess($table, $id, $rev); 60a28d6152SAndreas Gohr } catch (StructException $ignored) { 61a28d6152SAndreas Gohr continue; // no such schema at this revision 62a28d6152SAndreas Gohr } 6308e7b568SAndreas Gohr $event->result .= $schemadata->getDataPseudoSyntax(); 6410caaf49SAndreas Gohr } 6508e7b568SAndreas Gohr $event->result .= "----\n"; 6610caaf49SAndreas Gohr } 6710caaf49SAndreas Gohr} 6810caaf49SAndreas Gohr 6910caaf49SAndreas Gohr// vim:ts=4:sw=4:et: 70