xref: /plugin/structnotification/admin.php (revision 4677fc3cbc4a73f810813a1efa8b2d7e4e090b7c)
1a1f4c7baSSzymon Olewniczak<?php
2a1f4c7baSSzymon Olewniczak/**
3a1f4c7baSSzymon Olewniczak * DokuWiki Plugin structnotification (Admin Component)
4a1f4c7baSSzymon Olewniczak *
5a1f4c7baSSzymon Olewniczak * @license GPL 2 http://www.gnu.org/licenses/gpl-2.0.html
6a1f4c7baSSzymon Olewniczak * @author  Szymon Olewniczak <it@rid.pl>
7a1f4c7baSSzymon Olewniczak */
8a1f4c7baSSzymon Olewniczak
9a1f4c7baSSzymon Olewniczak// must be run within Dokuwiki
10a1f4c7baSSzymon Olewniczakif (!defined('DOKU_INC')) {
11a1f4c7baSSzymon Olewniczak    die();
12a1f4c7baSSzymon Olewniczak}
13a1f4c7baSSzymon Olewniczak
14a1f4c7baSSzymon Olewniczakclass admin_plugin_structnotification extends DokuWiki_Admin_Plugin
15a1f4c7baSSzymon Olewniczak{
16a1f4c7baSSzymon Olewniczak
17*4677fc3cSSzymon Olewniczak    protected $headers = ['schema', 'field', 'operator', 'value', 'users_and_groups', 'message'];
18*4677fc3cSSzymon Olewniczak    protected $operators = ['before', 'after', 'at'];
19922aade7SSzymon Olewniczak
20a1f4c7baSSzymon Olewniczak    /**
21a1f4c7baSSzymon Olewniczak     * @return int sort number in admin menu
22a1f4c7baSSzymon Olewniczak     */
23a1f4c7baSSzymon Olewniczak    public function getMenuSort()
24a1f4c7baSSzymon Olewniczak    {
25922aade7SSzymon Olewniczak        return 499;
26a1f4c7baSSzymon Olewniczak    }
27a1f4c7baSSzymon Olewniczak
28a1f4c7baSSzymon Olewniczak    /**
29a1f4c7baSSzymon Olewniczak     * @return bool true if only access for superuser, false is for superusers and moderators
30a1f4c7baSSzymon Olewniczak     */
31a1f4c7baSSzymon Olewniczak    public function forAdminOnly()
32a1f4c7baSSzymon Olewniczak    {
33a1f4c7baSSzymon Olewniczak        return false;
34a1f4c7baSSzymon Olewniczak    }
35a1f4c7baSSzymon Olewniczak
36a1f4c7baSSzymon Olewniczak    /**
37a1f4c7baSSzymon Olewniczak     * Should carry out any processing required by the plugin.
38a1f4c7baSSzymon Olewniczak     */
39a1f4c7baSSzymon Olewniczak    public function handle()
40a1f4c7baSSzymon Olewniczak    {
41922aade7SSzymon Olewniczak        global $INPUT;
42922aade7SSzymon Olewniczak        global $ID;
43a1f4c7baSSzymon Olewniczak
44922aade7SSzymon Olewniczak        try {
45922aade7SSzymon Olewniczak            /** @var \helper_plugin_structnotification_db$db_helper */
46922aade7SSzymon Olewniczak            $db_helper = plugin_load('helper', 'structnotification_db');
47922aade7SSzymon Olewniczak            $sqlite = $db_helper->getDB();
48922aade7SSzymon Olewniczak        } catch (Exception $e) {
49922aade7SSzymon Olewniczak            msg($e->getMessage(), -1);
50922aade7SSzymon Olewniczak            return;
51922aade7SSzymon Olewniczak        }
52922aade7SSzymon Olewniczak
53922aade7SSzymon Olewniczak
54922aade7SSzymon Olewniczak        if ($INPUT->str('action') && $INPUT->arr('predicate') && checkSecurityToken()) {
55922aade7SSzymon Olewniczak            $predicate = $INPUT->arr('predicate');
56922aade7SSzymon Olewniczak            if ($INPUT->str('action') === 'add') {
57922aade7SSzymon Olewniczak                $errors = $this->validate($predicate);
58922aade7SSzymon Olewniczak                if ($errors) {
59922aade7SSzymon Olewniczak                    $this->display_errors($errors);
60922aade7SSzymon Olewniczak                    return;
61922aade7SSzymon Olewniczak                }
62922aade7SSzymon Olewniczak                $ok = $sqlite->storeEntry('predicate', $predicate);
63922aade7SSzymon Olewniczak                if(!$ok) msg('failed to add predicate', -1);
64922aade7SSzymon Olewniczak            } elseif($INPUT->str('action') === 'delete') {
65922aade7SSzymon Olewniczak                $ok = $sqlite->query('DELETE FROM predicate WHERE id=?', $predicate['id']);
66922aade7SSzymon Olewniczak                if(!$ok) msg('failed to delete predicate', -1);
67922aade7SSzymon Olewniczak            } elseif($INPUT->str('action') === 'update') {
68922aade7SSzymon Olewniczak                $errors = $this->validate($predicate);
69922aade7SSzymon Olewniczak                if ($errors) {
70922aade7SSzymon Olewniczak                    $this->display_errors($errors);
71922aade7SSzymon Olewniczak                    return;
72922aade7SSzymon Olewniczak                }
73922aade7SSzymon Olewniczak
74922aade7SSzymon Olewniczak                $set = implode(',', array_map(function ($header) {
75922aade7SSzymon Olewniczak                    return "$header=?";
76922aade7SSzymon Olewniczak                }, $this->headers));
77922aade7SSzymon Olewniczak                $predicate['id'] = $INPUT->str('edit');
78922aade7SSzymon Olewniczak                $ok = $sqlite->query("UPDATE predicate SET $set WHERE id=?", $predicate);
79922aade7SSzymon Olewniczak                if(!$ok) msg('failed to update predicate', -1);
80922aade7SSzymon Olewniczak            }
81922aade7SSzymon Olewniczak
82922aade7SSzymon Olewniczak
83922aade7SSzymon Olewniczak            if ($ok) send_redirect(wl($ID, array('do' => 'admin', 'page' => 'structnotification'), true, '&'));
84922aade7SSzymon Olewniczak        }
85a1f4c7baSSzymon Olewniczak    }
86a1f4c7baSSzymon Olewniczak
87a1f4c7baSSzymon Olewniczak    /**
88a1f4c7baSSzymon Olewniczak     * Render HTML output, e.g. helpful text and a form
89a1f4c7baSSzymon Olewniczak     */
90a1f4c7baSSzymon Olewniczak    public function html()
91a1f4c7baSSzymon Olewniczak    {
92922aade7SSzymon Olewniczak        global $INPUT;
93922aade7SSzymon Olewniczak        global $ID;
94922aade7SSzymon Olewniczak
95922aade7SSzymon Olewniczak        try {
96922aade7SSzymon Olewniczak            /** @var \helper_plugin_structnotification_db$db_helper */
97922aade7SSzymon Olewniczak            $db_helper = plugin_load('helper', 'structnotification_db');
98922aade7SSzymon Olewniczak            $sqlite = $db_helper->getDB();
99922aade7SSzymon Olewniczak        } catch (Exception $e) {
100922aade7SSzymon Olewniczak            msg($e->getMessage(), -1);
101922aade7SSzymon Olewniczak            return;
102922aade7SSzymon Olewniczak        }
103922aade7SSzymon Olewniczak
104a1f4c7baSSzymon Olewniczak        ptln('<h1>' . $this->getLang('menu') . '</h1>');
105922aade7SSzymon Olewniczak        ptln('<table>');
106922aade7SSzymon Olewniczak
107922aade7SSzymon Olewniczak        ptln('<tr>');
108922aade7SSzymon Olewniczak        foreach ($this->headers as $header) {
109922aade7SSzymon Olewniczak            ptln('<th>' . $this->getLang('admin header '. $header) . '</th>');
110922aade7SSzymon Olewniczak        }
111922aade7SSzymon Olewniczak        //extra field for buttons
112922aade7SSzymon Olewniczak        ptln('<th></th>');
113922aade7SSzymon Olewniczak        ptln('</tr>');
114922aade7SSzymon Olewniczak
115922aade7SSzymon Olewniczak        $q = 'SELECT * FROM predicate';
116922aade7SSzymon Olewniczak        $res = $sqlite->query($q);
117922aade7SSzymon Olewniczak
118922aade7SSzymon Olewniczak        $predicates = $sqlite->res2arr($res);
119922aade7SSzymon Olewniczak
120922aade7SSzymon Olewniczak        foreach ($predicates as $predicate) {
121922aade7SSzymon Olewniczak            if ($INPUT->str('edit') == $predicate['id']) {
122922aade7SSzymon Olewniczak                if (!$INPUT->has('predicate')) {
123922aade7SSzymon Olewniczak                    $INPUT->set('predicate', $predicate);
124922aade7SSzymon Olewniczak                }
125922aade7SSzymon Olewniczak
126922aade7SSzymon Olewniczak                ptln($this->form('update'));
127922aade7SSzymon Olewniczak                continue;
128922aade7SSzymon Olewniczak            }
129922aade7SSzymon Olewniczak
130922aade7SSzymon Olewniczak            ptln('<tr>');
131922aade7SSzymon Olewniczak            foreach ($this->headers as $header) {
132ac63f65fSSzymon Olewniczak                $value = $predicate[$header];
133ac63f65fSSzymon Olewniczak                if ($header == 'message') {
134ac63f65fSSzymon Olewniczak                    $html = p_render('xhtml',p_get_instructions($value), $info);
135ac63f65fSSzymon Olewniczak                    ptln('<td>' . $html . '</td>');
136ac63f65fSSzymon Olewniczak                } else {
137ac63f65fSSzymon Olewniczak                    ptln('<td>' . $value . '</td>');
138ac63f65fSSzymon Olewniczak                }
139922aade7SSzymon Olewniczak            }
140922aade7SSzymon Olewniczak
141922aade7SSzymon Olewniczak            ptln('<td>');
142922aade7SSzymon Olewniczak            $link = wl(
143922aade7SSzymon Olewniczak                $ID, array(
144922aade7SSzymon Olewniczak                    'do' => 'admin',
145922aade7SSzymon Olewniczak                    'page' => 'structnotification',
146922aade7SSzymon Olewniczak                    'edit' => $predicate['id']
147922aade7SSzymon Olewniczak                )
148922aade7SSzymon Olewniczak            );
149922aade7SSzymon Olewniczak            ptln('<a href="' . $link . '">'.$this->getLang('edit').'</a> | ');
150922aade7SSzymon Olewniczak
151922aade7SSzymon Olewniczak            $link = wl(
152922aade7SSzymon Olewniczak                $ID, array(
153922aade7SSzymon Olewniczak                    'do' => 'admin',
154922aade7SSzymon Olewniczak                    'page' => 'structnotification',
155922aade7SSzymon Olewniczak                    'action' => 'delete',
156922aade7SSzymon Olewniczak                    'sectok' => getSecurityToken(),
157922aade7SSzymon Olewniczak                    'predicate[id]' => $predicate['id']
158922aade7SSzymon Olewniczak                )
159922aade7SSzymon Olewniczak            );
160922aade7SSzymon Olewniczak            ptln('<a class="plugin__structnotification_delete" href="' . $link . '">'.$this->getLang('delete').'</a>');
161922aade7SSzymon Olewniczak
162922aade7SSzymon Olewniczak            ptln('</td>');
163922aade7SSzymon Olewniczak            ptln('</tr>');
164922aade7SSzymon Olewniczak        }
165922aade7SSzymon Olewniczak        if (!$INPUT->has('edit')) {
166922aade7SSzymon Olewniczak            ptln($this->form());
167922aade7SSzymon Olewniczak        }
168922aade7SSzymon Olewniczak        ptln('</table>');
169922aade7SSzymon Olewniczak    }
170922aade7SSzymon Olewniczak
171922aade7SSzymon Olewniczak    protected function form($action='add')
172922aade7SSzymon Olewniczak    {
173922aade7SSzymon Olewniczak        global $ID;
174922aade7SSzymon Olewniczak
175922aade7SSzymon Olewniczak        $form = new dokuwiki\Form\Form();
176922aade7SSzymon Olewniczak        $form->addTagOpen('tr');
177922aade7SSzymon Olewniczak
178922aade7SSzymon Olewniczak        $form->addTagOpen('td');
179ac63f65fSSzymon Olewniczak        $form->addTextInput('predicate[schema]')->attr('style', 'width: 8em');
180922aade7SSzymon Olewniczak        $form->addTagClose('td');
181922aade7SSzymon Olewniczak
182922aade7SSzymon Olewniczak        $form->addTagOpen('td');
183ac63f65fSSzymon Olewniczak        $form->addTextInput('predicate[field]')->attr('style', 'width: 8em');
184922aade7SSzymon Olewniczak        $form->addTagClose('td');
185922aade7SSzymon Olewniczak
186922aade7SSzymon Olewniczak        $form->addTagOpen('td');
187922aade7SSzymon Olewniczak        $form->addDropdown('predicate[operator]', $this->operators);
188922aade7SSzymon Olewniczak        $form->addTagClose('td');
189922aade7SSzymon Olewniczak
190922aade7SSzymon Olewniczak        $form->addTagOpen('td');
191*4677fc3cSSzymon Olewniczak        $form->addTextInput('predicate[value]')->attr('style', 'width: 12em');
192922aade7SSzymon Olewniczak        $form->addTagClose('td');
193922aade7SSzymon Olewniczak
194922aade7SSzymon Olewniczak        $form->addTagOpen('td');
195ac63f65fSSzymon Olewniczak        $form->addTextInput('predicate[users_and_groups]')->attr('style', 'width: 12em');
196922aade7SSzymon Olewniczak        $form->addTagClose('td');
197922aade7SSzymon Olewniczak
198922aade7SSzymon Olewniczak        $form->addTagOpen('td');
199ac63f65fSSzymon Olewniczak        $form->addHTML('<div id="tool__bar"></div>');
200ac63f65fSSzymon Olewniczak        $form->setHiddenField('id', $ID); //for linkwiz
201ac63f65fSSzymon Olewniczak        $form->addTextarea('predicate[message]')
202ac63f65fSSzymon Olewniczak            ->id('wiki__text')
203ac63f65fSSzymon Olewniczak            ->attr('style', 'width: 100%; height: 10em;');
204922aade7SSzymon Olewniczak        $form->addTagClose('td');
205922aade7SSzymon Olewniczak
206922aade7SSzymon Olewniczak        $form->addTagOpen('td');
207922aade7SSzymon Olewniczak        $form->addButton('action', $this->getLang($action))->val($action);
208922aade7SSzymon Olewniczak        $link = wl(
209922aade7SSzymon Olewniczak            $ID, [
210922aade7SSzymon Olewniczak                'do' => 'admin',
211922aade7SSzymon Olewniczak                'page' => 'structnotification',
212922aade7SSzymon Olewniczak            ]
213922aade7SSzymon Olewniczak        );
214922aade7SSzymon Olewniczak        $cancel_link = '<a href="' . $link . '" style="margin-left:1em" id="plugin__structnotification_cancel">' . $this->getLang('cancel') . '</a>';
215922aade7SSzymon Olewniczak        $form->addHTML($cancel_link);
216922aade7SSzymon Olewniczak        $form->addTagClose('td');
217922aade7SSzymon Olewniczak
218922aade7SSzymon Olewniczak
219922aade7SSzymon Olewniczak        $form->addTagClose('tr');
220922aade7SSzymon Olewniczak
221922aade7SSzymon Olewniczak        return $form->toHTML();
222922aade7SSzymon Olewniczak    }
223922aade7SSzymon Olewniczak
224922aade7SSzymon Olewniczak    protected function validate($predicate)
225922aade7SSzymon Olewniczak    {
226922aade7SSzymon Olewniczak        $errors = [];
227922aade7SSzymon Olewniczak        if (blank($predicate['schema'])) {
228922aade7SSzymon Olewniczak            $errors[] = 'val schema blank';
229922aade7SSzymon Olewniczak        }
230922aade7SSzymon Olewniczak
231922aade7SSzymon Olewniczak        if (blank($predicate['field'])) {
232922aade7SSzymon Olewniczak            $errors[] = 'val field blank';
233922aade7SSzymon Olewniczak        }
234922aade7SSzymon Olewniczak
235922aade7SSzymon Olewniczak        if (blank($predicate['operator'])) {
236922aade7SSzymon Olewniczak            $errors[] = 'val operator blank';
237922aade7SSzymon Olewniczak        }
238922aade7SSzymon Olewniczak
239*4677fc3cSSzymon Olewniczak        if (blank($predicate['value'])) {
240*4677fc3cSSzymon Olewniczak            $errors[] = 'val value blank';
241922aade7SSzymon Olewniczak        }
242922aade7SSzymon Olewniczak
243922aade7SSzymon Olewniczak        if (blank($predicate['users_and_groups'])) {
244922aade7SSzymon Olewniczak            $errors[] = 'val users_and_groups blank';
245922aade7SSzymon Olewniczak        }
246922aade7SSzymon Olewniczak
247922aade7SSzymon Olewniczak        if (blank($predicate['message'])) {
248922aade7SSzymon Olewniczak            $errors[] = 'val message blank';
249922aade7SSzymon Olewniczak        }
250922aade7SSzymon Olewniczak
251922aade7SSzymon Olewniczak        return $errors;
252922aade7SSzymon Olewniczak    }
253922aade7SSzymon Olewniczak
254922aade7SSzymon Olewniczak    protected function display_errors($errors) {
255922aade7SSzymon Olewniczak        foreach ($errors as $error) {
256922aade7SSzymon Olewniczak            $msg = $this->getLang($error);
257922aade7SSzymon Olewniczak            if (!$msg) $msg = $error;
258922aade7SSzymon Olewniczak            msg($error, -1);
259922aade7SSzymon Olewniczak        }
260a1f4c7baSSzymon Olewniczak    }
261a1f4c7baSSzymon Olewniczak}
262a1f4c7baSSzymon Olewniczak
263