xref: /plugin/approve/action/viewmode.php (revision c708a86f173ded59efaa534cd399f83e819daa4e)
1*c708a86fSSzymon Olewniczak<?php
2*c708a86fSSzymon Olewniczak
3*c708a86fSSzymon Olewniczakuse dokuwiki\plugin\approve\meta\ViewModeEdit;
4*c708a86fSSzymon Olewniczakuse dokuwiki\plugin\approve\meta\ViewModeSiteTools;
5*c708a86fSSzymon Olewniczak
6*c708a86fSSzymon Olewniczak/**
7*c708a86fSSzymon Olewniczak * Approve Plugin: places a link in usermenue and allows for change between modes
8*c708a86fSSzymon Olewniczak * Copied and adapted from userpage plugin
9*c708a86fSSzymon Olewniczak *
10*c708a86fSSzymon Olewniczak * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
11*c708a86fSSzymon Olewniczak * @author     Michael Kirchner
12*c708a86fSSzymon Olewniczak * @author     Blake Martin
13*c708a86fSSzymon Olewniczak * @author     Andreas Gohr <andi@splitbrain.org>
14*c708a86fSSzymon Olewniczak * @author     Anika Henke <anika@selfthinker.org>
15*c708a86fSSzymon Olewniczak */
16*c708a86fSSzymon Olewniczak
17*c708a86fSSzymon Olewniczakclass action_plugin_approve_viewmode extends DokuWiki_Action_Plugin
18*c708a86fSSzymon Olewniczak{
19*c708a86fSSzymon Olewniczak    /** @inheritdoc */
20*c708a86fSSzymon Olewniczak    function register(Doku_Event_Handler $controller)
21*c708a86fSSzymon Olewniczak    {
22*c708a86fSSzymon Olewniczak        $controller->register_hook('ACTION_ACT_PREPROCESS', 'BEFORE', $this, 'handleAct');
23*c708a86fSSzymon Olewniczak        $controller->register_hook('MENU_ITEMS_ASSEMBLY', 'AFTER', $this, 'addSiteTools');
24*c708a86fSSzymon Olewniczak        $controller->register_hook('MENU_ITEMS_ASSEMBLY', 'AFTER', $this, 'addPageTools');
25*c708a86fSSzymon Olewniczak    }
26*c708a86fSSzymon Olewniczak
27*c708a86fSSzymon Olewniczak    public function handleAct(Doku_Event $event)
28*c708a86fSSzymon Olewniczak    {
29*c708a86fSSzymon Olewniczak        if (!$this->getConf('viewmode')) return;
30*c708a86fSSzymon Olewniczak        if ($event->data != 'viewmodesitetools' && $event->data != 'viewmodeedit') return;
31*c708a86fSSzymon Olewniczak        $viewmode = get_doku_pref('approve_viewmode', false);
32*c708a86fSSzymon Olewniczak        set_doku_pref('approve_viewmode', !$viewmode);  // toggle status
33*c708a86fSSzymon Olewniczak        $event->data = 'redirect';
34*c708a86fSSzymon Olewniczak    }
35*c708a86fSSzymon Olewniczak
36*c708a86fSSzymon Olewniczak    /**
37*c708a86fSSzymon Olewniczak     * Add Link for mode change to the site tools
38*c708a86fSSzymon Olewniczak     *
39*c708a86fSSzymon Olewniczak     * @param Doku_Event $event
40*c708a86fSSzymon Olewniczak     * @return bool
41*c708a86fSSzymon Olewniczak     */
42*c708a86fSSzymon Olewniczak    public function addSiteTools(Doku_Event $event)
43*c708a86fSSzymon Olewniczak    {
44*c708a86fSSzymon Olewniczak        global $INPUT;
45*c708a86fSSzymon Olewniczak        if (!$this->getConf('viewmode')) return false;
46*c708a86fSSzymon Olewniczak        if (!$INPUT->server->str('REMOTE_USER')) return false;
47*c708a86fSSzymon Olewniczak        if ($event->data['view'] != 'user') return false;
48*c708a86fSSzymon Olewniczak
49*c708a86fSSzymon Olewniczak        array_splice($event->data['items'], 1, 0, [new ViewModeSiteTools()]);
50*c708a86fSSzymon Olewniczak
51*c708a86fSSzymon Olewniczak        return true;
52*c708a86fSSzymon Olewniczak    }
53*c708a86fSSzymon Olewniczak
54*c708a86fSSzymon Olewniczak    public function addPageTools(Doku_Event $event)
55*c708a86fSSzymon Olewniczak    {
56*c708a86fSSzymon Olewniczak        global $INPUT;
57*c708a86fSSzymon Olewniczak        if (!$this->getConf('viewmode')) return false;
58*c708a86fSSzymon Olewniczak        if (!$INPUT->server->str('REMOTE_USER')) return false;
59*c708a86fSSzymon Olewniczak        if ($event->data['view'] != 'page') return false;
60*c708a86fSSzymon Olewniczak
61*c708a86fSSzymon Olewniczak        $viewmode = get_doku_pref('approve_viewmode', false);
62*c708a86fSSzymon Olewniczak        if ($viewmode) {
63*c708a86fSSzymon Olewniczak            array_splice($event->data['items'], 0, 1, [new ViewModeEdit()]);
64*c708a86fSSzymon Olewniczak        }
65*c708a86fSSzymon Olewniczak        return true;
66*c708a86fSSzymon Olewniczak    }
67*c708a86fSSzymon Olewniczak
68*c708a86fSSzymon Olewniczak}