xref: /plugin/structpublish/admin.php (revision 8b0ba635402b9a3b9717898c9e08f6ff65eb73f7)
187106851SAnna Dabrowska<?php
2910e7e15SAnna Dabrowska
3910e7e15SAnna Dabrowskause dokuwiki\plugin\structpublish\meta\Assignments;
4e31c94d7SAndreas Gohruse dokuwiki\plugin\structpublish\meta\Constants;
5910e7e15SAnna Dabrowska
687106851SAnna Dabrowska/**
787106851SAnna Dabrowska * DokuWiki Plugin structpublish (Admin Component)
887106851SAnna Dabrowska *
987106851SAnna Dabrowska * @license GPL 2 http://www.gnu.org/licenses/gpl-2.0.html
1087106851SAnna Dabrowska * @author  Anna Dabrowska <dokuwiki@cosmocode.de>
1187106851SAnna Dabrowska */
1287106851SAnna Dabrowskaclass admin_plugin_structpublish extends DokuWiki_Admin_Plugin
1387106851SAnna Dabrowska{
1487106851SAnna Dabrowska    /**
1587106851SAnna Dabrowska     * @return int sort number in admin menu
1687106851SAnna Dabrowska     */
1787106851SAnna Dabrowska    public function getMenuSort()
1887106851SAnna Dabrowska    {
1987106851SAnna Dabrowska        return 555;
2087106851SAnna Dabrowska    }
2187106851SAnna Dabrowska
2287106851SAnna Dabrowska    /**
2387106851SAnna Dabrowska     * @return bool true if only access for superuser, false is for superusers and moderators
2487106851SAnna Dabrowska     */
2587106851SAnna Dabrowska    public function forAdminOnly()
2687106851SAnna Dabrowska    {
2787106851SAnna Dabrowska        return false;
2887106851SAnna Dabrowska    }
2987106851SAnna Dabrowska
3087106851SAnna Dabrowska    /**
31910e7e15SAnna Dabrowska     * Based on struct pattern assignments
3287106851SAnna Dabrowska     */
3387106851SAnna Dabrowska    public function handle()
3487106851SAnna Dabrowska    {
35910e7e15SAnna Dabrowska        global $INPUT;
36910e7e15SAnna Dabrowska        global $ID;
3787106851SAnna Dabrowska
38910e7e15SAnna Dabrowska        try {
39910e7e15SAnna Dabrowska            $assignments = Assignments::getInstance();
40910e7e15SAnna Dabrowska        } catch(Exception $e) {
41910e7e15SAnna Dabrowska            msg($e->getMessage(), -1);
42*8b0ba635SAndreas Gohr            return;
43910e7e15SAnna Dabrowska        }
44910e7e15SAnna Dabrowska
45910e7e15SAnna Dabrowska        if ($INPUT->str('action') && $INPUT->arr('assignment') && checkSecurityToken()) {
46910e7e15SAnna Dabrowska            $assignment = $INPUT->arr('assignment');
47910e7e15SAnna Dabrowska            if (!blank($assignment['pattern']) && !blank($assignment['status'])) {
48910e7e15SAnna Dabrowska                if ($INPUT->str('action') === 'delete') {
49*8b0ba635SAndreas Gohr                    $ok = $assignments->removePattern($assignment['pattern'], $assignment['user'],
50*8b0ba635SAndreas Gohr                        $assignment['status']);
51*8b0ba635SAndreas Gohr                    if (!$ok) {
52*8b0ba635SAndreas Gohr                        msg('failed to remove pattern', -1);
53*8b0ba635SAndreas Gohr                    }
54910e7e15SAnna Dabrowska                } elseif ($INPUT->str('action') === 'add') {
55910e7e15SAnna Dabrowska                    if ($assignment['pattern'][0] == '/') {
56910e7e15SAnna Dabrowska                        if (@preg_match($assignment['pattern'], null) === false) {
57910e7e15SAnna Dabrowska                            msg('Invalid regular expression. Pattern not saved', -1);
58910e7e15SAnna Dabrowska                        } else {
59*8b0ba635SAndreas Gohr                            $ok = $assignments->addPattern($assignment['pattern'], $assignment['user'],
60*8b0ba635SAndreas Gohr                                $assignment['status']);
61*8b0ba635SAndreas Gohr                            if (!$ok) {
62*8b0ba635SAndreas Gohr                                msg('failed to add pattern', -1);
63*8b0ba635SAndreas Gohr                            }
64910e7e15SAnna Dabrowska                        }
65910e7e15SAnna Dabrowska                    } else {
66*8b0ba635SAndreas Gohr                        $ok = $assignments->addPattern($assignment['pattern'], $assignment['user'],
67*8b0ba635SAndreas Gohr                            $assignment['status']);
68*8b0ba635SAndreas Gohr                        if (!$ok) {
69*8b0ba635SAndreas Gohr                            msg('failed to add pattern', -1);
70*8b0ba635SAndreas Gohr                        }
71910e7e15SAnna Dabrowska                    }
72910e7e15SAnna Dabrowska                }
73910e7e15SAnna Dabrowska            }
74910e7e15SAnna Dabrowska
75910e7e15SAnna Dabrowska            send_redirect(wl($ID, array('do' => 'admin', 'page' => 'structpublish'), true, '&'));
76910e7e15SAnna Dabrowska        }
7787106851SAnna Dabrowska    }
7887106851SAnna Dabrowska
7987106851SAnna Dabrowska    /**
80*8b0ba635SAndreas Gohr     * Render HTML output
8187106851SAnna Dabrowska     */
8287106851SAnna Dabrowska    public function html()
8387106851SAnna Dabrowska    {
8487106851SAnna Dabrowska        ptln('<h1>' . $this->getLang('menu') . '</h1>');
85910e7e15SAnna Dabrowska
86910e7e15SAnna Dabrowska        global $ID;
87910e7e15SAnna Dabrowska
88910e7e15SAnna Dabrowska        try {
89910e7e15SAnna Dabrowska            $assignments = Assignments::getInstance();
90910e7e15SAnna Dabrowska        } catch(Exception $e) {
91910e7e15SAnna Dabrowska            msg($e->getMessage(), -1);
92*8b0ba635SAndreas Gohr            return;
93910e7e15SAnna Dabrowska        }
94910e7e15SAnna Dabrowska        $list = $assignments->getAllPatterns();
95910e7e15SAnna Dabrowska
96910e7e15SAnna Dabrowska        echo '<form action="' . wl($ID) . '" action="post">';
97910e7e15SAnna Dabrowska        echo '<input type="hidden" name="do" value="admin" />';
98910e7e15SAnna Dabrowska        echo '<input type="hidden" name="page" value="structpublish" />';
99910e7e15SAnna Dabrowska        echo '<input type="hidden" name="sectok" value="' . getSecurityToken() . '" />';
100910e7e15SAnna Dabrowska        echo '<table class="inline">';
101910e7e15SAnna Dabrowska
102910e7e15SAnna Dabrowska        // header
103910e7e15SAnna Dabrowska        echo '<tr>';
104910e7e15SAnna Dabrowska        echo '<th>' . $this->getLang('assign_pattern') . '</th>';
105910e7e15SAnna Dabrowska        echo '<th>' . $this->getLang('assign_status') . '</th>';
106910e7e15SAnna Dabrowska        echo '<th>' . $this->getLang('assign_user') . '</th>';
107910e7e15SAnna Dabrowska        echo '<th></th>';
108910e7e15SAnna Dabrowska        echo '</tr>';
109910e7e15SAnna Dabrowska
110910e7e15SAnna Dabrowska        // existing assignments
111910e7e15SAnna Dabrowska        foreach ($list as $assignment) {
112910e7e15SAnna Dabrowska            $pattern = $assignment['pattern'];
113910e7e15SAnna Dabrowska            $status = $assignment['status'];
114910e7e15SAnna Dabrowska            $user = $assignment['user'];
115910e7e15SAnna Dabrowska
116910e7e15SAnna Dabrowska            $link = wl(
117910e7e15SAnna Dabrowska                $ID,
118910e7e15SAnna Dabrowska                [
119910e7e15SAnna Dabrowska                    'do' => 'admin',
120910e7e15SAnna Dabrowska                    'page' => 'structpublish',
121910e7e15SAnna Dabrowska                    'action' => 'delete',
122910e7e15SAnna Dabrowska                    'sectok' => getSecurityToken(),
123910e7e15SAnna Dabrowska                    'assignment[status]' => $status,
124910e7e15SAnna Dabrowska                    'assignment[pattern]' => $pattern,
125910e7e15SAnna Dabrowska                    'assignment[user]' => $user,
126910e7e15SAnna Dabrowska                ]
127910e7e15SAnna Dabrowska            );
128910e7e15SAnna Dabrowska
129910e7e15SAnna Dabrowska            echo '<tr>';
130910e7e15SAnna Dabrowska            echo '<td>' . hsc($pattern) . '</td>';
131910e7e15SAnna Dabrowska            echo '<td>' . hsc($status) . '</td>';
132910e7e15SAnna Dabrowska            echo '<td>' . hsc($user) . '</td>';
133910e7e15SAnna Dabrowska            echo '<td><a class="deleteSchema" href="' . $link . '">' . $this->getLang('assign_del') . '</a></td>';
134910e7e15SAnna Dabrowska            echo '</tr>';
135910e7e15SAnna Dabrowska        }
136910e7e15SAnna Dabrowska
137910e7e15SAnna Dabrowska        // new assignment form
138910e7e15SAnna Dabrowska        echo '<tr>';
139910e7e15SAnna Dabrowska        echo '<td><input type="text" name="assignment[pattern]" /></td>';
140910e7e15SAnna Dabrowska        echo '<td>';
141910e7e15SAnna Dabrowska        echo '<select name="assignment[status]">';
142e31c94d7SAndreas Gohr        foreach ([Constants::ACTION_APPROVE, Constants::ACTION_PUBLISH] as $status) {
143910e7e15SAnna Dabrowska            echo '<option value="' . $status . '">' . $status . '</option>';
144910e7e15SAnna Dabrowska        }
145910e7e15SAnna Dabrowska        echo '</select>';
146910e7e15SAnna Dabrowska        echo '</td>';
147910e7e15SAnna Dabrowska        echo '<td><input type="text" name="assignment[user]" /></td>';
148910e7e15SAnna Dabrowska        echo '<td><button type="submit" name="action" value="add">' . $this->getLang('assign_add') . '</button></td>';
149910e7e15SAnna Dabrowska        echo '</tr>';
150910e7e15SAnna Dabrowska
151910e7e15SAnna Dabrowska        echo '</table>';
152910e7e15SAnna Dabrowska        echo '</form>';
15387106851SAnna Dabrowska    }
15487106851SAnna Dabrowska}
15587106851SAnna Dabrowska
156