xref: /plugin/structpublish/admin.php (revision e31c94d7935dccc7709b66e483c744379995197d)
187106851SAnna Dabrowska<?php
2910e7e15SAnna Dabrowska
3910e7e15SAnna Dabrowskause dokuwiki\plugin\structpublish\meta\Assignments;
4*e31c94d7SAndreas 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 Dabrowska
1387106851SAnna Dabrowskaclass admin_plugin_structpublish extends DokuWiki_Admin_Plugin
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);
43910e7e15SAnna Dabrowska            return false;
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') {
50910e7e15SAnna Dabrowska                    $ok = $assignments->removePattern($assignment['pattern'], $assignment['user'], $assignment['status']);
51910e7e15SAnna Dabrowska                    if (!$ok) msg('failed to remove pattern', -1);
52910e7e15SAnna Dabrowska                } elseif ($INPUT->str('action') === 'add') {
53910e7e15SAnna Dabrowska                    if ($assignment['pattern'][0] == '/') {
54910e7e15SAnna Dabrowska                        if (@preg_match($assignment['pattern'], null) === false) {
55910e7e15SAnna Dabrowska                            msg('Invalid regular expression. Pattern not saved', -1);
56910e7e15SAnna Dabrowska                        } else {
57910e7e15SAnna Dabrowska                            $ok = $assignments->addPattern($assignment['pattern'], $assignment['user'], $assignment['status']);
58910e7e15SAnna Dabrowska                            if (!$ok) msg('failed to add pattern', -1);
59910e7e15SAnna Dabrowska                        }
60910e7e15SAnna Dabrowska                    } else {
61910e7e15SAnna Dabrowska                        $ok = $assignments->addPattern($assignment['pattern'],$assignment['user'], $assignment['status']);
62910e7e15SAnna Dabrowska                        if (!$ok) msg('failed to add pattern', -1);
63910e7e15SAnna Dabrowska                    }
64910e7e15SAnna Dabrowska                }
65910e7e15SAnna Dabrowska            }
66910e7e15SAnna Dabrowska
67910e7e15SAnna Dabrowska            send_redirect(wl($ID, array('do' => 'admin', 'page' => 'structpublish'), true, '&'));
68910e7e15SAnna Dabrowska        }
6987106851SAnna Dabrowska    }
7087106851SAnna Dabrowska
7187106851SAnna Dabrowska    /**
7287106851SAnna Dabrowska     * Render HTML output, e.g. helpful text and a form
7387106851SAnna Dabrowska     */
7487106851SAnna Dabrowska    public function html()
7587106851SAnna Dabrowska    {
7687106851SAnna Dabrowska        ptln('<h1>' . $this->getLang('menu') . '</h1>');
77910e7e15SAnna Dabrowska
78910e7e15SAnna Dabrowska        global $ID;
79910e7e15SAnna Dabrowska
80910e7e15SAnna Dabrowska        try {
81910e7e15SAnna Dabrowska            $assignments = Assignments::getInstance();
82910e7e15SAnna Dabrowska        } catch (Exception $e) {
83910e7e15SAnna Dabrowska            msg($e->getMessage(), -1);
84910e7e15SAnna Dabrowska            return false;
85910e7e15SAnna Dabrowska        }
86910e7e15SAnna Dabrowska        $list = $assignments->getAllPatterns();
87910e7e15SAnna Dabrowska
88910e7e15SAnna Dabrowska        echo '<form action="' . wl($ID) . '" action="post">';
89910e7e15SAnna Dabrowska        echo '<input type="hidden" name="do" value="admin" />';
90910e7e15SAnna Dabrowska        echo '<input type="hidden" name="page" value="structpublish" />';
91910e7e15SAnna Dabrowska        echo '<input type="hidden" name="sectok" value="' . getSecurityToken() . '" />';
92910e7e15SAnna Dabrowska        echo '<table class="inline">';
93910e7e15SAnna Dabrowska
94910e7e15SAnna Dabrowska        // header
95910e7e15SAnna Dabrowska        echo '<tr>';
96910e7e15SAnna Dabrowska        echo '<th>' . $this->getLang('assign_pattern') . '</th>';
97910e7e15SAnna Dabrowska        echo '<th>' . $this->getLang('assign_status') . '</th>';
98910e7e15SAnna Dabrowska        echo '<th>' . $this->getLang('assign_user') . '</th>';
99910e7e15SAnna Dabrowska        echo '<th></th>';
100910e7e15SAnna Dabrowska        echo '</tr>';
101910e7e15SAnna Dabrowska
102910e7e15SAnna Dabrowska        // existing assignments
103910e7e15SAnna Dabrowska        foreach ($list as $assignment) {
104910e7e15SAnna Dabrowska            $pattern = $assignment['pattern'];
105910e7e15SAnna Dabrowska            $status = $assignment['status'];
106910e7e15SAnna Dabrowska            $user = $assignment['user'];
107910e7e15SAnna Dabrowska
108910e7e15SAnna Dabrowska            $link = wl(
109910e7e15SAnna Dabrowska                $ID,
110910e7e15SAnna Dabrowska                [
111910e7e15SAnna Dabrowska                    'do' => 'admin',
112910e7e15SAnna Dabrowska                    'page' => 'structpublish',
113910e7e15SAnna Dabrowska                    'action' => 'delete',
114910e7e15SAnna Dabrowska                    'sectok' => getSecurityToken(),
115910e7e15SAnna Dabrowska                    'assignment[status]' => $status,
116910e7e15SAnna Dabrowska                    'assignment[pattern]' => $pattern,
117910e7e15SAnna Dabrowska                    'assignment[user]' => $user,
118910e7e15SAnna Dabrowska                ]
119910e7e15SAnna Dabrowska            );
120910e7e15SAnna Dabrowska
121910e7e15SAnna Dabrowska            echo '<tr>';
122910e7e15SAnna Dabrowska            echo '<td>' . hsc($pattern) . '</td>';
123910e7e15SAnna Dabrowska            echo '<td>' . hsc($status) . '</td>';
124910e7e15SAnna Dabrowska            echo '<td>' . hsc($user) . '</td>';
125910e7e15SAnna Dabrowska            echo '<td><a class="deleteSchema" href="' . $link . '">' . $this->getLang('assign_del') . '</a></td>';
126910e7e15SAnna Dabrowska            echo '</tr>';
127910e7e15SAnna Dabrowska        }
128910e7e15SAnna Dabrowska
129910e7e15SAnna Dabrowska        // new assignment form
130910e7e15SAnna Dabrowska        echo '<tr>';
131910e7e15SAnna Dabrowska        echo '<td><input type="text" name="assignment[pattern]" /></td>';
132910e7e15SAnna Dabrowska        echo '<td>';
133910e7e15SAnna Dabrowska        echo '<select name="assignment[status]">';
134*e31c94d7SAndreas Gohr        foreach ([Constants::ACTION_APPROVE, Constants::ACTION_PUBLISH] as $status) {
135910e7e15SAnna Dabrowska            echo '<option value="' . $status . '">' . $status . '</option>';
136910e7e15SAnna Dabrowska        }
137910e7e15SAnna Dabrowska        echo '</select>';
138910e7e15SAnna Dabrowska        echo '</td>';
139910e7e15SAnna Dabrowska        echo '<td><input type="text" name="assignment[user]" /></td>';
140910e7e15SAnna Dabrowska        echo '<td><button type="submit" name="action" value="add">' . $this->getLang('assign_add') . '</button></td>';
141910e7e15SAnna Dabrowska        echo '</tr>';
142910e7e15SAnna Dabrowska
143910e7e15SAnna Dabrowska        echo '</table>';
144910e7e15SAnna Dabrowska        echo '</form>';
14587106851SAnna Dabrowska    }
14687106851SAnna Dabrowska}
14787106851SAnna Dabrowska
148