1*c3437056SNickeau<?php 2*c3437056SNickeau 3*c3437056SNickeauuse ComboStrap\ExceptionCombo; 4*c3437056SNickeauuse ComboStrap\Json; 5*c3437056SNickeauuse ComboStrap\LogUtility; 6*c3437056SNickeauuse ComboStrap\PluginUtility; 7*c3437056SNickeauuse ComboStrap\Sqlite; 8*c3437056SNickeau 9*c3437056SNickeaurequire_once(__DIR__ . '/../ComboStrap/PluginUtility.php'); 10*c3437056SNickeau 11*c3437056SNickeau 12*c3437056SNickeau/** 13*c3437056SNickeau * Set the home of the web site documentation 14*c3437056SNickeau */ 15*c3437056SNickeauclass action_plugin_combo_linkwizard extends DokuWiki_Action_Plugin 16*c3437056SNickeau{ 17*c3437056SNickeau 18*c3437056SNickeau const CONF_ENABLE_ENHANCED_LINK_WIZARD = "enableEnhancedLinkWizard"; 19*c3437056SNickeau const CANONICAL = "linkwizard"; 20*c3437056SNickeau 21*c3437056SNickeau /** 22*c3437056SNickeau * @param Doku_Event_Handler $controller 23*c3437056SNickeau */ 24*c3437056SNickeau function register(Doku_Event_Handler $controller) 25*c3437056SNickeau { 26*c3437056SNickeau 27*c3437056SNickeau /** 28*c3437056SNickeau * https://www.dokuwiki.org/devel:event:search_query_pagelookup 29*c3437056SNickeau */ 30*c3437056SNickeau $controller->register_hook('SEARCH_QUERY_PAGELOOKUP', 'AFTER', $this, 'searchPage', array()); 31*c3437056SNickeau 32*c3437056SNickeau } 33*c3437056SNickeau 34*c3437056SNickeau 35*c3437056SNickeau /** 36*c3437056SNickeau * Modify the returned pages 37*c3437056SNickeau * The {@link callLinkWiz} of inc/Ajax.php do 38*c3437056SNickeau * just a page search with {@link ft_pageLookup()} 39*c3437056SNickeau * https://www.dokuwiki.org/search 40*c3437056SNickeau * @param Doku_Event $event 41*c3437056SNickeau * @param $params 42*c3437056SNickeau * The path are initialized in {@link init_paths} 43*c3437056SNickeau * @return void 44*c3437056SNickeau */ 45*c3437056SNickeau function searchPage(Doku_Event $event, $params) 46*c3437056SNickeau { 47*c3437056SNickeau global $INPUT; 48*c3437056SNickeau /** 49*c3437056SNickeau * linkwiz is the editor toolbar action 50*c3437056SNickeau * qsearch is the search button 51*c3437056SNickeau */ 52*c3437056SNickeau $postCall = $INPUT->post->str('call'); 53*c3437056SNickeau if (!(in_array($postCall, ["linkwiz", "qsearch", action_plugin_combo_search::CALL]))) { 54*c3437056SNickeau return; 55*c3437056SNickeau } 56*c3437056SNickeau if (PluginUtility::getConfValue(self::CONF_ENABLE_ENHANCED_LINK_WIZARD, 1) === 0) { 57*c3437056SNickeau return; 58*c3437056SNickeau } 59*c3437056SNickeau $sqlite = Sqlite::createOrGetSqlite(); 60*c3437056SNickeau if ($sqlite === null) { 61*c3437056SNickeau return; 62*c3437056SNickeau } 63*c3437056SNickeau 64*c3437056SNickeau $searchTerm = $event->data["id"]; // yes id is the search term 65*c3437056SNickeau if (strlen($searchTerm) < 3) { 66*c3437056SNickeau return; 67*c3437056SNickeau } 68*c3437056SNickeau $pattern = "*$searchTerm*"; 69*c3437056SNickeau $patterns = [$pattern, $pattern, $pattern, $pattern]; 70*c3437056SNickeau $searchTerm = <<<EOF 71*c3437056SNickeauselect id as "id", title as "title" from pages where id glob ? or H1 glob ? or title glob ? or name glob ? order by id ASC; 72*c3437056SNickeauEOF; 73*c3437056SNickeau $rows = []; 74*c3437056SNickeau $request = $sqlite 75*c3437056SNickeau ->createRequest() 76*c3437056SNickeau ->setQueryParametrized($searchTerm, $patterns); 77*c3437056SNickeau try { 78*c3437056SNickeau $rows = $request 79*c3437056SNickeau ->execute() 80*c3437056SNickeau ->getRows(); 81*c3437056SNickeau } catch (ExceptionCombo $e) { 82*c3437056SNickeau LogUtility::msg("Error while trying to retrieve a list of page", LogUtility::LVL_MSG_ERROR, self::CANONICAL); 83*c3437056SNickeau } finally { 84*c3437056SNickeau $request->close(); 85*c3437056SNickeau } 86*c3437056SNickeau 87*c3437056SNickeau foreach ($rows as $row) { 88*c3437056SNickeau $event->result[$row["id"]] = $row["title"]; 89*c3437056SNickeau } 90*c3437056SNickeau 91*c3437056SNickeau 92*c3437056SNickeau } 93*c3437056SNickeau 94*c3437056SNickeau 95*c3437056SNickeau} 96