1*c3437056SNickeau<?php 2*c3437056SNickeau 3*c3437056SNickeauuse ComboStrap\BacklinkMenuItem; 4*c3437056SNickeauuse ComboStrap\Event; 5*c3437056SNickeauuse ComboStrap\FileSystems; 6*c3437056SNickeauuse ComboStrap\Identity; 7*c3437056SNickeauuse ComboStrap\LinkUtility; 8*c3437056SNickeauuse ComboStrap\MetadataDokuWikiStore; 9*c3437056SNickeauuse ComboStrap\Mime; 10*c3437056SNickeauuse ComboStrap\Page; 11*c3437056SNickeauuse ComboStrap\PagePath; 12*c3437056SNickeauuse ComboStrap\PluginUtility; 13*c3437056SNickeauuse ComboStrap\Reference; 14*c3437056SNickeauuse ComboStrap\References; 15*c3437056SNickeau 16*c3437056SNickeau 17*c3437056SNickeaurequire_once(__DIR__ . '/../ComboStrap/PluginUtility.php'); 18*c3437056SNickeau 19*c3437056SNickeau/** 20*c3437056SNickeau * Handle the backlink menu item 21*c3437056SNickeau */ 22*c3437056SNickeauclass action_plugin_combo_backlinkmenuitem extends DokuWiki_Action_Plugin 23*c3437056SNickeau{ 24*c3437056SNickeau 25*c3437056SNickeau 26*c3437056SNickeau const CALL_ID = "combo-backlink"; 27*c3437056SNickeau const CANONICAL = "backlink"; 28*c3437056SNickeau const WHREF = "whref"; 29*c3437056SNickeau 30*c3437056SNickeau public function register(Doku_Event_Handler $controller) 31*c3437056SNickeau { 32*c3437056SNickeau 33*c3437056SNickeau 34*c3437056SNickeau /** 35*c3437056SNickeau * Add a icon in the page tools menu 36*c3437056SNickeau * https://www.dokuwiki.org/devel:event:menu_items_assembly 37*c3437056SNickeau */ 38*c3437056SNickeau $controller->register_hook('MENU_ITEMS_ASSEMBLY', 'AFTER', $this, 'addMenuItem'); 39*c3437056SNickeau 40*c3437056SNickeau 41*c3437056SNickeau /** 42*c3437056SNickeau * The ajax api to return data 43*c3437056SNickeau */ 44*c3437056SNickeau $controller->register_hook('AJAX_CALL_UNKNOWN', 'BEFORE', $this, 'ajaxCall'); 45*c3437056SNickeau 46*c3437056SNickeau 47*c3437056SNickeau } 48*c3437056SNickeau 49*c3437056SNickeau function addMenuItem(Doku_Event $event, $param) 50*c3437056SNickeau { 51*c3437056SNickeau 52*c3437056SNickeau 53*c3437056SNickeau /** 54*c3437056SNickeau * The `view` property defines the menu that is currently built 55*c3437056SNickeau * https://www.dokuwiki.org/devel:menus 56*c3437056SNickeau * If this is not the page menu, return 57*c3437056SNickeau */ 58*c3437056SNickeau if ($event->data['view'] != 'page') return; 59*c3437056SNickeau 60*c3437056SNickeau global $INFO; 61*c3437056SNickeau if (!$INFO['exists']) { 62*c3437056SNickeau return; 63*c3437056SNickeau } 64*c3437056SNickeau $menuItems = &$event->data["items"]; 65*c3437056SNickeau foreach ($menuItems as $key => $menuItem) { 66*c3437056SNickeau if ($menuItem instanceof \dokuwiki\Menu\Item\Backlink) { 67*c3437056SNickeau $menuItems[$key] = new BacklinkMenuItem(); 68*c3437056SNickeau break; 69*c3437056SNickeau } 70*c3437056SNickeau } 71*c3437056SNickeau /** 72*c3437056SNickeau * Add the wl to build the link to the backlinks actions 73*c3437056SNickeau */ 74*c3437056SNickeau $id = PluginUtility::getMainPageDokuwikiId(); 75*c3437056SNickeau global $JSINFO; 76*c3437056SNickeau $JSINFO[self::WHREF] = wl($id); 77*c3437056SNickeau 78*c3437056SNickeau } 79*c3437056SNickeau 80*c3437056SNickeau /** 81*c3437056SNickeau * Main function; dispatches the visual comment actions 82*c3437056SNickeau * @param $event Doku_Event 83*c3437056SNickeau */ 84*c3437056SNickeau function ajaxCall(&$event, $param): void 85*c3437056SNickeau { 86*c3437056SNickeau $call = $event->data; 87*c3437056SNickeau if ($call != self::CALL_ID) { 88*c3437056SNickeau return; 89*c3437056SNickeau } 90*c3437056SNickeau //no other ajax call handlers needed 91*c3437056SNickeau $event->stopPropagation(); 92*c3437056SNickeau $event->preventDefault(); 93*c3437056SNickeau 94*c3437056SNickeau /** 95*c3437056SNickeau * Shared check between post and get HTTP method 96*c3437056SNickeau */ 97*c3437056SNickeau $id = $_GET["id"]; 98*c3437056SNickeau if ($id === null) { 99*c3437056SNickeau /** 100*c3437056SNickeau * With {@link TestRequest} 101*c3437056SNickeau * for instance 102*c3437056SNickeau */ 103*c3437056SNickeau $id = $_REQUEST["id"]; 104*c3437056SNickeau } 105*c3437056SNickeau 106*c3437056SNickeau if (empty($id)) { 107*c3437056SNickeau \ComboStrap\HttpResponse::create(\ComboStrap\HttpResponse::STATUS_BAD_REQUEST) 108*c3437056SNickeau ->setEvent($event) 109*c3437056SNickeau ->setCanonical(self::CANONICAL) 110*c3437056SNickeau ->send("The page id should not be empty", Mime::HTML); 111*c3437056SNickeau return; 112*c3437056SNickeau } 113*c3437056SNickeau 114*c3437056SNickeau 115*c3437056SNickeau $backlinkPages = Page::createPageFromId($id); 116*c3437056SNickeau $html = syntax_plugin_combo_related::getHtmlRelated($backlinkPages); 117*c3437056SNickeau 118*c3437056SNickeau 119*c3437056SNickeau \ComboStrap\HttpResponse::create(\ComboStrap\HttpResponse::STATUS_ALL_GOOD) 120*c3437056SNickeau ->setEvent($event) 121*c3437056SNickeau ->setCanonical(self::CANONICAL) 122*c3437056SNickeau ->send($html, Mime::HTML); 123*c3437056SNickeau 124*c3437056SNickeau } 125*c3437056SNickeau 126*c3437056SNickeau 127*c3437056SNickeau} 128*c3437056SNickeau 129*c3437056SNickeau 130*c3437056SNickeau 131