xref: /plugin/structnotification/admin.php (revision e96b00ce614311bc1690b610d7467dc7a3323015)
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 Olewniczakclass admin_plugin_structnotification extends DokuWiki_Admin_Plugin
10a1f4c7baSSzymon Olewniczak{
11*e96b00ceSAnna Dabrowska    protected $headers = ['schema', 'field', 'operator', 'value', 'filters', 'users_and_groups', 'message'];
124677fc3cSSzymon Olewniczak    protected $operators = ['before', 'after', 'at'];
13922aade7SSzymon Olewniczak
14a1f4c7baSSzymon Olewniczak    /**
15a1f4c7baSSzymon Olewniczak     * @return int sort number in admin menu
16a1f4c7baSSzymon Olewniczak     */
17a1f4c7baSSzymon Olewniczak    public function getMenuSort()
18a1f4c7baSSzymon Olewniczak    {
19922aade7SSzymon Olewniczak        return 499;
20a1f4c7baSSzymon Olewniczak    }
21a1f4c7baSSzymon Olewniczak
22a1f4c7baSSzymon Olewniczak    /**
23a1f4c7baSSzymon Olewniczak     * @return bool true if only access for superuser, false is for superusers and moderators
24a1f4c7baSSzymon Olewniczak     */
25a1f4c7baSSzymon Olewniczak    public function forAdminOnly()
26a1f4c7baSSzymon Olewniczak    {
27a1f4c7baSSzymon Olewniczak        return false;
28a1f4c7baSSzymon Olewniczak    }
29a1f4c7baSSzymon Olewniczak
30a1f4c7baSSzymon Olewniczak    /**
31a1f4c7baSSzymon Olewniczak     * Should carry out any processing required by the plugin.
32a1f4c7baSSzymon Olewniczak     */
33a1f4c7baSSzymon Olewniczak    public function handle()
34a1f4c7baSSzymon Olewniczak    {
35922aade7SSzymon Olewniczak        global $INPUT;
36922aade7SSzymon Olewniczak        global $ID;
37a1f4c7baSSzymon Olewniczak
38922aade7SSzymon Olewniczak        try {
39922aade7SSzymon Olewniczak            /** @var \helper_plugin_structnotification_db$db_helper */
40922aade7SSzymon Olewniczak            $db_helper = plugin_load('helper', 'structnotification_db');
41922aade7SSzymon Olewniczak            $sqlite = $db_helper->getDB();
42922aade7SSzymon Olewniczak        } catch (Exception $e) {
43922aade7SSzymon Olewniczak            msg($e->getMessage(), -1);
44922aade7SSzymon Olewniczak            return;
45922aade7SSzymon Olewniczak        }
46922aade7SSzymon Olewniczak
47922aade7SSzymon Olewniczak        if ($INPUT->str('action') && $INPUT->arr('predicate') && checkSecurityToken()) {
48922aade7SSzymon Olewniczak            $predicate = $INPUT->arr('predicate');
49922aade7SSzymon Olewniczak            if ($INPUT->str('action') === 'add') {
50922aade7SSzymon Olewniczak                $errors = $this->validate($predicate);
51922aade7SSzymon Olewniczak                if ($errors) {
52922aade7SSzymon Olewniczak                    $this->display_errors($errors);
53922aade7SSzymon Olewniczak                    return;
54922aade7SSzymon Olewniczak                }
55922aade7SSzymon Olewniczak                $ok = $sqlite->storeEntry('predicate', $predicate);
56922aade7SSzymon Olewniczak                if(!$ok) msg('failed to add predicate', -1);
57922aade7SSzymon Olewniczak            } elseif($INPUT->str('action') === 'delete') {
58922aade7SSzymon Olewniczak                $ok = $sqlite->query('DELETE FROM predicate WHERE id=?', $predicate['id']);
59922aade7SSzymon Olewniczak                if(!$ok) msg('failed to delete predicate', -1);
60922aade7SSzymon Olewniczak            } elseif($INPUT->str('action') === 'update') {
61922aade7SSzymon Olewniczak                $errors = $this->validate($predicate);
62922aade7SSzymon Olewniczak                if ($errors) {
63922aade7SSzymon Olewniczak                    $this->display_errors($errors);
64922aade7SSzymon Olewniczak                    return;
65922aade7SSzymon Olewniczak                }
66922aade7SSzymon Olewniczak
67922aade7SSzymon Olewniczak                $set = implode(',', array_map(function ($header) {
68922aade7SSzymon Olewniczak                    return "$header=?";
69922aade7SSzymon Olewniczak                }, $this->headers));
70922aade7SSzymon Olewniczak                $predicate['id'] = $INPUT->str('edit');
71922aade7SSzymon Olewniczak                $ok = $sqlite->query("UPDATE predicate SET $set WHERE id=?", $predicate);
72922aade7SSzymon Olewniczak                if(!$ok) msg('failed to update predicate', -1);
73922aade7SSzymon Olewniczak            }
74922aade7SSzymon Olewniczak
75922aade7SSzymon Olewniczak            if ($ok) send_redirect(wl($ID, array('do' => 'admin', 'page' => 'structnotification'), true, '&'));
76922aade7SSzymon Olewniczak        }
77a1f4c7baSSzymon Olewniczak    }
78a1f4c7baSSzymon Olewniczak
79a1f4c7baSSzymon Olewniczak    /**
80a1f4c7baSSzymon Olewniczak     * Render HTML output, e.g. helpful text and a form
81a1f4c7baSSzymon Olewniczak     */
82a1f4c7baSSzymon Olewniczak    public function html()
83a1f4c7baSSzymon Olewniczak    {
84922aade7SSzymon Olewniczak        global $INPUT;
85922aade7SSzymon Olewniczak        global $ID;
86922aade7SSzymon Olewniczak
87922aade7SSzymon Olewniczak        try {
88922aade7SSzymon Olewniczak            /** @var \helper_plugin_structnotification_db$db_helper */
89922aade7SSzymon Olewniczak            $db_helper = plugin_load('helper', 'structnotification_db');
90922aade7SSzymon Olewniczak            $sqlite = $db_helper->getDB();
91922aade7SSzymon Olewniczak        } catch (Exception $e) {
92922aade7SSzymon Olewniczak            msg($e->getMessage(), -1);
93922aade7SSzymon Olewniczak            return;
94922aade7SSzymon Olewniczak        }
95922aade7SSzymon Olewniczak
96a1f4c7baSSzymon Olewniczak        ptln('<h1>' . $this->getLang('menu') . '</h1>');
97922aade7SSzymon Olewniczak        ptln('<table>');
98922aade7SSzymon Olewniczak
99922aade7SSzymon Olewniczak        ptln('<tr>');
100922aade7SSzymon Olewniczak        foreach ($this->headers as $header) {
101922aade7SSzymon Olewniczak            ptln('<th>' . $this->getLang('admin header '. $header) . '</th>');
102922aade7SSzymon Olewniczak        }
103922aade7SSzymon Olewniczak        //extra field for buttons
104922aade7SSzymon Olewniczak        ptln('<th></th>');
105922aade7SSzymon Olewniczak        ptln('</tr>');
106922aade7SSzymon Olewniczak
107922aade7SSzymon Olewniczak        $q = 'SELECT * FROM predicate';
108922aade7SSzymon Olewniczak        $res = $sqlite->query($q);
109922aade7SSzymon Olewniczak
110922aade7SSzymon Olewniczak        $predicates = $sqlite->res2arr($res);
111922aade7SSzymon Olewniczak
112922aade7SSzymon Olewniczak        foreach ($predicates as $predicate) {
113922aade7SSzymon Olewniczak            if ($INPUT->str('edit') == $predicate['id']) {
114922aade7SSzymon Olewniczak                if (!$INPUT->has('predicate')) {
115922aade7SSzymon Olewniczak                    $INPUT->set('predicate', $predicate);
116922aade7SSzymon Olewniczak                }
117922aade7SSzymon Olewniczak
118922aade7SSzymon Olewniczak                ptln($this->form('update'));
119922aade7SSzymon Olewniczak                continue;
120922aade7SSzymon Olewniczak            }
121922aade7SSzymon Olewniczak
122922aade7SSzymon Olewniczak            ptln('<tr>');
123922aade7SSzymon Olewniczak            foreach ($this->headers as $header) {
124ac63f65fSSzymon Olewniczak                $value = $predicate[$header];
125ac63f65fSSzymon Olewniczak                if ($header == 'message') {
126ac63f65fSSzymon Olewniczak                    $html = p_render('xhtml',p_get_instructions($value), $info);
127ac63f65fSSzymon Olewniczak                    ptln('<td>' . $html . '</td>');
128ac63f65fSSzymon Olewniczak                } else {
129ac63f65fSSzymon Olewniczak                    ptln('<td>' . $value . '</td>');
130ac63f65fSSzymon Olewniczak                }
131922aade7SSzymon Olewniczak            }
132922aade7SSzymon Olewniczak
133922aade7SSzymon Olewniczak            ptln('<td>');
134922aade7SSzymon Olewniczak            $link = wl(
135922aade7SSzymon Olewniczak                $ID, array(
136922aade7SSzymon Olewniczak                    'do' => 'admin',
137922aade7SSzymon Olewniczak                    'page' => 'structnotification',
138922aade7SSzymon Olewniczak                    'edit' => $predicate['id']
139922aade7SSzymon Olewniczak                )
140922aade7SSzymon Olewniczak            );
141922aade7SSzymon Olewniczak            ptln('<a href="' . $link . '">'.$this->getLang('edit').'</a> | ');
142922aade7SSzymon Olewniczak
143922aade7SSzymon Olewniczak            $link = wl(
144922aade7SSzymon Olewniczak                $ID, array(
145922aade7SSzymon Olewniczak                    'do' => 'admin',
146922aade7SSzymon Olewniczak                    'page' => 'structnotification',
147922aade7SSzymon Olewniczak                    'action' => 'delete',
148922aade7SSzymon Olewniczak                    'sectok' => getSecurityToken(),
149922aade7SSzymon Olewniczak                    'predicate[id]' => $predicate['id']
150922aade7SSzymon Olewniczak                )
151922aade7SSzymon Olewniczak            );
152922aade7SSzymon Olewniczak            ptln('<a class="plugin__structnotification_delete" href="' . $link . '">'.$this->getLang('delete').'</a>');
153922aade7SSzymon Olewniczak
154922aade7SSzymon Olewniczak            ptln('</td>');
155922aade7SSzymon Olewniczak            ptln('</tr>');
156922aade7SSzymon Olewniczak        }
157922aade7SSzymon Olewniczak        if (!$INPUT->has('edit')) {
158922aade7SSzymon Olewniczak            ptln($this->form());
159922aade7SSzymon Olewniczak        }
160922aade7SSzymon Olewniczak        ptln('</table>');
161922aade7SSzymon Olewniczak    }
162922aade7SSzymon Olewniczak
163922aade7SSzymon Olewniczak    protected function form($action='add')
164922aade7SSzymon Olewniczak    {
165922aade7SSzymon Olewniczak        global $ID;
166922aade7SSzymon Olewniczak
167922aade7SSzymon Olewniczak        $form = new dokuwiki\Form\Form();
168922aade7SSzymon Olewniczak        $form->addTagOpen('tr');
169922aade7SSzymon Olewniczak
170922aade7SSzymon Olewniczak        $form->addTagOpen('td');
171ac63f65fSSzymon Olewniczak        $form->addTextInput('predicate[schema]')->attr('style', 'width: 8em');
172922aade7SSzymon Olewniczak        $form->addTagClose('td');
173922aade7SSzymon Olewniczak
174922aade7SSzymon Olewniczak        $form->addTagOpen('td');
175ac63f65fSSzymon Olewniczak        $form->addTextInput('predicate[field]')->attr('style', 'width: 8em');
176922aade7SSzymon Olewniczak        $form->addTagClose('td');
177922aade7SSzymon Olewniczak
178922aade7SSzymon Olewniczak        $form->addTagOpen('td');
179922aade7SSzymon Olewniczak        $form->addDropdown('predicate[operator]', $this->operators);
180922aade7SSzymon Olewniczak        $form->addTagClose('td');
181922aade7SSzymon Olewniczak
182922aade7SSzymon Olewniczak        $form->addTagOpen('td');
1834677fc3cSSzymon Olewniczak        $form->addTextInput('predicate[value]')->attr('style', 'width: 12em');
184922aade7SSzymon Olewniczak        $form->addTagClose('td');
185922aade7SSzymon Olewniczak
186922aade7SSzymon Olewniczak        $form->addTagOpen('td');
187*e96b00ceSAnna Dabrowska        $form->addTextarea('predicate[filters]')->attr('style', 'width: 12em; height: 5em;');
188*e96b00ceSAnna Dabrowska        $form->addTagClose('td');
189*e96b00ceSAnna Dabrowska
190*e96b00ceSAnna Dabrowska        $form->addTagOpen('td');
191ac63f65fSSzymon Olewniczak        $form->addTextInput('predicate[users_and_groups]')->attr('style', 'width: 12em');
192922aade7SSzymon Olewniczak        $form->addTagClose('td');
193922aade7SSzymon Olewniczak
194922aade7SSzymon Olewniczak        $form->addTagOpen('td');
195ac63f65fSSzymon Olewniczak        $form->addHTML('<div id="tool__bar"></div>');
196ac63f65fSSzymon Olewniczak        $form->setHiddenField('id', $ID); //for linkwiz
197ac63f65fSSzymon Olewniczak        $form->addTextarea('predicate[message]')
198ac63f65fSSzymon Olewniczak            ->id('wiki__text')
199ac63f65fSSzymon Olewniczak            ->attr('style', 'width: 100%; height: 10em;');
200922aade7SSzymon Olewniczak        $form->addTagClose('td');
201922aade7SSzymon Olewniczak
202922aade7SSzymon Olewniczak        $form->addTagOpen('td');
203922aade7SSzymon Olewniczak        $form->addButton('action', $this->getLang($action))->val($action);
204922aade7SSzymon Olewniczak        $link = wl(
205922aade7SSzymon Olewniczak            $ID, [
206922aade7SSzymon Olewniczak                'do' => 'admin',
207922aade7SSzymon Olewniczak                'page' => 'structnotification',
208922aade7SSzymon Olewniczak            ]
209922aade7SSzymon Olewniczak        );
210922aade7SSzymon Olewniczak        $cancel_link = '<a href="' . $link . '" style="margin-left:1em" id="plugin__structnotification_cancel">' . $this->getLang('cancel') . '</a>';
211922aade7SSzymon Olewniczak        $form->addHTML($cancel_link);
212922aade7SSzymon Olewniczak        $form->addTagClose('td');
213922aade7SSzymon Olewniczak
214922aade7SSzymon Olewniczak
215922aade7SSzymon Olewniczak        $form->addTagClose('tr');
216922aade7SSzymon Olewniczak
217922aade7SSzymon Olewniczak        return $form->toHTML();
218922aade7SSzymon Olewniczak    }
219922aade7SSzymon Olewniczak
220922aade7SSzymon Olewniczak    protected function validate($predicate)
221922aade7SSzymon Olewniczak    {
222922aade7SSzymon Olewniczak        $errors = [];
223922aade7SSzymon Olewniczak        if (blank($predicate['schema'])) {
224922aade7SSzymon Olewniczak            $errors[] = 'val schema blank';
225922aade7SSzymon Olewniczak        }
226922aade7SSzymon Olewniczak
227922aade7SSzymon Olewniczak        if (blank($predicate['field'])) {
228922aade7SSzymon Olewniczak            $errors[] = 'val field blank';
229922aade7SSzymon Olewniczak        }
230922aade7SSzymon Olewniczak
231922aade7SSzymon Olewniczak        if (blank($predicate['operator'])) {
232922aade7SSzymon Olewniczak            $errors[] = 'val operator blank';
233922aade7SSzymon Olewniczak        }
234922aade7SSzymon Olewniczak
2354677fc3cSSzymon Olewniczak        if (blank($predicate['value'])) {
2364677fc3cSSzymon Olewniczak            $errors[] = 'val value blank';
237922aade7SSzymon Olewniczak        }
238922aade7SSzymon Olewniczak
239922aade7SSzymon Olewniczak        if (blank($predicate['users_and_groups'])) {
240922aade7SSzymon Olewniczak            $errors[] = 'val users_and_groups blank';
241922aade7SSzymon Olewniczak        }
242922aade7SSzymon Olewniczak
243922aade7SSzymon Olewniczak        if (blank($predicate['message'])) {
244922aade7SSzymon Olewniczak            $errors[] = 'val message blank';
245922aade7SSzymon Olewniczak        }
246922aade7SSzymon Olewniczak
247922aade7SSzymon Olewniczak        return $errors;
248922aade7SSzymon Olewniczak    }
249922aade7SSzymon Olewniczak
250922aade7SSzymon Olewniczak    protected function display_errors($errors) {
251922aade7SSzymon Olewniczak        foreach ($errors as $error) {
252922aade7SSzymon Olewniczak            $msg = $this->getLang($error);
253922aade7SSzymon Olewniczak            if (!$msg) $msg = $error;
254922aade7SSzymon Olewniczak            msg($error, -1);
255922aade7SSzymon Olewniczak        }
256a1f4c7baSSzymon Olewniczak    }
257a1f4c7baSSzymon Olewniczak}
258a1f4c7baSSzymon Olewniczak
259