xref: /plugin/combo/action/linkwizard.php (revision c3437056399326d621a01da73b649707fbb0ae69) !
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