xref: /plugin/approve/action/viewmode.php (revision 1989ee26e4c10d9fe322c2a0aa4ae990f031b47b)
1c708a86fSSzymon Olewniczak<?php
2c708a86fSSzymon Olewniczak
3*1989ee26SSzymon Olewniczakuse dokuwiki\Extension\ActionPlugin;
4*1989ee26SSzymon Olewniczakuse dokuwiki\Extension\EventHandler;
5*1989ee26SSzymon Olewniczakuse dokuwiki\Extension\Event;
6c708a86fSSzymon Olewniczakuse dokuwiki\plugin\approve\meta\ViewModeEdit;
7c708a86fSSzymon Olewniczakuse dokuwiki\plugin\approve\meta\ViewModeSiteTools;
8c708a86fSSzymon Olewniczak
9*1989ee26SSzymon Olewniczakclass action_plugin_approve_viewmode extends ActionPlugin
10c708a86fSSzymon Olewniczak{
11c708a86fSSzymon Olewniczak    /** @inheritdoc */
12*1989ee26SSzymon Olewniczak    function register(EventHandler $controller)
13c708a86fSSzymon Olewniczak    {
14c708a86fSSzymon Olewniczak        $controller->register_hook('ACTION_ACT_PREPROCESS', 'BEFORE', $this, 'handleAct');
15c708a86fSSzymon Olewniczak        $controller->register_hook('MENU_ITEMS_ASSEMBLY', 'AFTER', $this, 'addSiteTools');
16c708a86fSSzymon Olewniczak        $controller->register_hook('MENU_ITEMS_ASSEMBLY', 'AFTER', $this, 'addPageTools');
17c708a86fSSzymon Olewniczak    }
18c708a86fSSzymon Olewniczak
19*1989ee26SSzymon Olewniczak    public function handleAct(Event $event)
20c708a86fSSzymon Olewniczak    {
21c708a86fSSzymon Olewniczak        if (!$this->getConf('viewmode')) return;
22c708a86fSSzymon Olewniczak        if ($event->data != 'viewmodesitetools' && $event->data != 'viewmodeedit') return;
23c708a86fSSzymon Olewniczak        $viewmode = get_doku_pref('approve_viewmode', false);
24c708a86fSSzymon Olewniczak        set_doku_pref('approve_viewmode', !$viewmode);  // toggle status
25c708a86fSSzymon Olewniczak        $event->data = 'redirect';
26c708a86fSSzymon Olewniczak    }
27c708a86fSSzymon Olewniczak
28c708a86fSSzymon Olewniczak    /**
29c708a86fSSzymon Olewniczak     * Add Link for mode change to the site tools
30c708a86fSSzymon Olewniczak     *
31*1989ee26SSzymon Olewniczak     * @param Event $event
32c708a86fSSzymon Olewniczak     * @return bool
33c708a86fSSzymon Olewniczak     */
34*1989ee26SSzymon Olewniczak    public function addSiteTools(Event $event)
35c708a86fSSzymon Olewniczak    {
36c708a86fSSzymon Olewniczak        global $INPUT;
37c708a86fSSzymon Olewniczak        if (!$this->getConf('viewmode')) return false;
38c708a86fSSzymon Olewniczak        if (!$INPUT->server->str('REMOTE_USER')) return false;
39c708a86fSSzymon Olewniczak        if ($event->data['view'] != 'user') return false;
40c708a86fSSzymon Olewniczak
41c708a86fSSzymon Olewniczak        array_splice($event->data['items'], 1, 0, [new ViewModeSiteTools()]);
42c708a86fSSzymon Olewniczak
43c708a86fSSzymon Olewniczak        return true;
44c708a86fSSzymon Olewniczak    }
45c708a86fSSzymon Olewniczak
46*1989ee26SSzymon Olewniczak    public function addPageTools(Event $event)
47c708a86fSSzymon Olewniczak    {
48c708a86fSSzymon Olewniczak        global $INPUT;
49c708a86fSSzymon Olewniczak        if (!$this->getConf('viewmode')) return false;
50c708a86fSSzymon Olewniczak        if (!$INPUT->server->str('REMOTE_USER')) return false;
51c708a86fSSzymon Olewniczak        if ($event->data['view'] != 'page') return false;
52c708a86fSSzymon Olewniczak
53c708a86fSSzymon Olewniczak        $viewmode = get_doku_pref('approve_viewmode', false);
54c708a86fSSzymon Olewniczak        if ($viewmode) {
55c708a86fSSzymon Olewniczak            array_splice($event->data['items'], 0, 1, [new ViewModeEdit()]);
56c708a86fSSzymon Olewniczak        }
57c708a86fSSzymon Olewniczak        return true;
58c708a86fSSzymon Olewniczak    }
59c708a86fSSzymon Olewniczak
60c708a86fSSzymon Olewniczak}
61