xref: /plugin/structpublish/admin.php (revision 9ab8cbae39a6ffa37705f745bc76916ea212a92b)
187106851SAnna Dabrowska<?php
2910e7e15SAnna Dabrowska
3*9ab8cbaeSanndause dokuwiki\Extension\AdminPlugin;
4910e7e15SAnna Dabrowskause dokuwiki\plugin\structpublish\meta\Assignments;
5e31c94d7SAndreas Gohruse dokuwiki\plugin\structpublish\meta\Constants;
6910e7e15SAnna Dabrowska
787106851SAnna Dabrowska/**
887106851SAnna Dabrowska * DokuWiki Plugin structpublish (Admin Component)
987106851SAnna Dabrowska *
1087106851SAnna Dabrowska * @license GPL 2 http://www.gnu.org/licenses/gpl-2.0.html
1187106851SAnna Dabrowska * @author  Anna Dabrowska <dokuwiki@cosmocode.de>
1287106851SAnna Dabrowska */
13*9ab8cbaeSanndaclass admin_plugin_structpublish extends AdminPlugin
1487106851SAnna Dabrowska{
1587106851SAnna Dabrowska    /**
1687106851SAnna Dabrowska     * @return int sort number in admin menu
1787106851SAnna Dabrowska     */
1887106851SAnna Dabrowska    public function getMenuSort()
1987106851SAnna Dabrowska    {
2087106851SAnna Dabrowska        return 555;
2187106851SAnna Dabrowska    }
2287106851SAnna Dabrowska
2387106851SAnna Dabrowska    /**
2487106851SAnna Dabrowska     * @return bool true if only access for superuser, false is for superusers and moderators
2587106851SAnna Dabrowska     */
2687106851SAnna Dabrowska    public function forAdminOnly()
2787106851SAnna Dabrowska    {
2887106851SAnna Dabrowska        return false;
2987106851SAnna Dabrowska    }
3087106851SAnna Dabrowska
3187106851SAnna Dabrowska    /**
32910e7e15SAnna Dabrowska     * Based on struct pattern assignments
3387106851SAnna Dabrowska     */
3487106851SAnna Dabrowska    public function handle()
3587106851SAnna Dabrowska    {
36910e7e15SAnna Dabrowska        global $INPUT;
37910e7e15SAnna Dabrowska        global $ID;
3887106851SAnna Dabrowska
39910e7e15SAnna Dabrowska        try {
40910e7e15SAnna Dabrowska            $assignments = Assignments::getInstance();
41910e7e15SAnna Dabrowska        } catch (Exception $e) {
42910e7e15SAnna Dabrowska            msg($e->getMessage(), -1);
438b0ba635SAndreas Gohr            return;
44910e7e15SAnna Dabrowska        }
45910e7e15SAnna Dabrowska
46910e7e15SAnna Dabrowska        if ($INPUT->str('action') && $INPUT->arr('assignment') && checkSecurityToken()) {
47910e7e15SAnna Dabrowska            $assignment = $INPUT->arr('assignment');
48910e7e15SAnna Dabrowska            if (!blank($assignment['pattern']) && !blank($assignment['status'])) {
49910e7e15SAnna Dabrowska                if ($INPUT->str('action') === 'delete') {
5031e730e1SAnna Dabrowska                    $ok = $assignments->removePattern(
5131e730e1SAnna Dabrowska                        $assignment['pattern'],
5231e730e1SAnna Dabrowska                        $assignment['user'],
5331e730e1SAnna Dabrowska                        $assignment['status']
5431e730e1SAnna Dabrowska                    );
558b0ba635SAndreas Gohr                    if (!$ok) {
568b0ba635SAndreas Gohr                        msg('failed to remove pattern', -1);
578b0ba635SAndreas Gohr                    }
58910e7e15SAnna Dabrowska                } elseif ($INPUT->str('action') === 'add') {
59910e7e15SAnna Dabrowska                    if ($assignment['pattern'][0] == '/') {
60910e7e15SAnna Dabrowska                        if (@preg_match($assignment['pattern'], null) === false) {
61910e7e15SAnna Dabrowska                            msg('Invalid regular expression. Pattern not saved', -1);
62910e7e15SAnna Dabrowska                        } else {
6331e730e1SAnna Dabrowska                            $ok = $assignments->addPattern(
6431e730e1SAnna Dabrowska                                $assignment['pattern'],
6531e730e1SAnna Dabrowska                                $assignment['user'],
6631e730e1SAnna Dabrowska                                $assignment['status']
6731e730e1SAnna Dabrowska                            );
688b0ba635SAndreas Gohr                            if (!$ok) {
698b0ba635SAndreas Gohr                                msg('failed to add pattern', -1);
708b0ba635SAndreas Gohr                            }
71910e7e15SAnna Dabrowska                        }
72910e7e15SAnna Dabrowska                    } else {
7331e730e1SAnna Dabrowska                        $ok = $assignments->addPattern(
7431e730e1SAnna Dabrowska                            $assignment['pattern'],
7531e730e1SAnna Dabrowska                            $assignment['user'],
7631e730e1SAnna Dabrowska                            $assignment['status']
7731e730e1SAnna Dabrowska                        );
788b0ba635SAndreas Gohr                        if (!$ok) {
798b0ba635SAndreas Gohr                            msg('failed to add pattern', -1);
808b0ba635SAndreas Gohr                        }
81910e7e15SAnna Dabrowska                    }
82910e7e15SAnna Dabrowska                }
83910e7e15SAnna Dabrowska            }
84910e7e15SAnna Dabrowska
85*9ab8cbaeSannda            send_redirect(wl($ID, ['do' => 'admin', 'page' => 'structpublish'], true, '&'));
86910e7e15SAnna Dabrowska        }
8787106851SAnna Dabrowska    }
8887106851SAnna Dabrowska
8987106851SAnna Dabrowska    /**
908b0ba635SAndreas Gohr     * Render HTML output
9187106851SAnna Dabrowska     */
9287106851SAnna Dabrowska    public function html()
9387106851SAnna Dabrowska    {
94*9ab8cbaeSannda        echo '<h1>' . $this->getLang('menu') . '</h1>';
95910e7e15SAnna Dabrowska
96910e7e15SAnna Dabrowska        global $ID;
97910e7e15SAnna Dabrowska
98910e7e15SAnna Dabrowska        try {
99910e7e15SAnna Dabrowska            $assignments = Assignments::getInstance();
100910e7e15SAnna Dabrowska        } catch (Exception $e) {
101910e7e15SAnna Dabrowska            msg($e->getMessage(), -1);
1028b0ba635SAndreas Gohr            return;
103910e7e15SAnna Dabrowska        }
104910e7e15SAnna Dabrowska        $list = $assignments->getAllPatterns();
105910e7e15SAnna Dabrowska
106910e7e15SAnna Dabrowska        echo '<form action="' . wl($ID) . '" action="post">';
107910e7e15SAnna Dabrowska        echo '<input type="hidden" name="do" value="admin" />';
108910e7e15SAnna Dabrowska        echo '<input type="hidden" name="page" value="structpublish" />';
109910e7e15SAnna Dabrowska        echo '<input type="hidden" name="sectok" value="' . getSecurityToken() . '" />';
110910e7e15SAnna Dabrowska        echo '<table class="inline">';
111910e7e15SAnna Dabrowska
112910e7e15SAnna Dabrowska        // header
113910e7e15SAnna Dabrowska        echo '<tr>';
114910e7e15SAnna Dabrowska        echo '<th>' . $this->getLang('assign_pattern') . '</th>';
115910e7e15SAnna Dabrowska        echo '<th>' . $this->getLang('assign_status') . '</th>';
116910e7e15SAnna Dabrowska        echo '<th>' . $this->getLang('assign_user') . '</th>';
117910e7e15SAnna Dabrowska        echo '<th></th>';
118910e7e15SAnna Dabrowska        echo '</tr>';
119910e7e15SAnna Dabrowska
120910e7e15SAnna Dabrowska        // existing assignments
121910e7e15SAnna Dabrowska        foreach ($list as $assignment) {
122910e7e15SAnna Dabrowska            $pattern = $assignment['pattern'];
123910e7e15SAnna Dabrowska            $status = $assignment['status'];
124910e7e15SAnna Dabrowska            $user = $assignment['user'];
125910e7e15SAnna Dabrowska
126910e7e15SAnna Dabrowska            $link = wl(
127910e7e15SAnna Dabrowska                $ID,
128910e7e15SAnna Dabrowska                [
129910e7e15SAnna Dabrowska                    'do' => 'admin',
130910e7e15SAnna Dabrowska                    'page' => 'structpublish',
131910e7e15SAnna Dabrowska                    'action' => 'delete',
132910e7e15SAnna Dabrowska                    'sectok' => getSecurityToken(),
133910e7e15SAnna Dabrowska                    'assignment[status]' => $status,
134910e7e15SAnna Dabrowska                    'assignment[pattern]' => $pattern,
135910e7e15SAnna Dabrowska                    'assignment[user]' => $user,
136910e7e15SAnna Dabrowska                ]
137910e7e15SAnna Dabrowska            );
138910e7e15SAnna Dabrowska
139910e7e15SAnna Dabrowska            echo '<tr>';
140910e7e15SAnna Dabrowska            echo '<td>' . hsc($pattern) . '</td>';
141910e7e15SAnna Dabrowska            echo '<td>' . hsc($status) . '</td>';
142910e7e15SAnna Dabrowska            echo '<td>' . hsc($user) . '</td>';
143910e7e15SAnna Dabrowska            echo '<td><a class="deleteSchema" href="' . $link . '">' . $this->getLang('assign_del') . '</a></td>';
144910e7e15SAnna Dabrowska            echo '</tr>';
145910e7e15SAnna Dabrowska        }
146910e7e15SAnna Dabrowska
147910e7e15SAnna Dabrowska        // new assignment form
148910e7e15SAnna Dabrowska        echo '<tr>';
149910e7e15SAnna Dabrowska        echo '<td><input type="text" name="assignment[pattern]" /></td>';
150910e7e15SAnna Dabrowska        echo '<td>';
151910e7e15SAnna Dabrowska        echo '<select name="assignment[status]">';
152e31c94d7SAndreas Gohr        foreach ([Constants::ACTION_APPROVE, Constants::ACTION_PUBLISH] as $status) {
153910e7e15SAnna Dabrowska            echo '<option value="' . $status . '">' . $status . '</option>';
154910e7e15SAnna Dabrowska        }
155910e7e15SAnna Dabrowska        echo '</select>';
156910e7e15SAnna Dabrowska        echo '</td>';
157910e7e15SAnna Dabrowska        echo '<td><input type="text" name="assignment[user]" /></td>';
158910e7e15SAnna Dabrowska        echo '<td><button type="submit" name="action" value="add">' . $this->getLang('assign_add') . '</button></td>';
159910e7e15SAnna Dabrowska        echo '</tr>';
160910e7e15SAnna Dabrowska
161910e7e15SAnna Dabrowska        echo '</table>';
162910e7e15SAnna Dabrowska        echo '</form>';
16387106851SAnna Dabrowska    }
16487106851SAnna Dabrowska}
165