xref: /plugin/structpublish/admin.php (revision 910e7e15ab7eacafbaa096c48916ba3bb1c5258f)
187106851SAnna Dabrowska<?php
2*910e7e15SAnna Dabrowska
3*910e7e15SAnna Dabrowskause dokuwiki\plugin\structpublish\meta\Assignments;
4*910e7e15SAnna Dabrowska
587106851SAnna Dabrowska/**
687106851SAnna Dabrowska * DokuWiki Plugin structpublish (Admin Component)
787106851SAnna Dabrowska *
887106851SAnna Dabrowska * @license GPL 2 http://www.gnu.org/licenses/gpl-2.0.html
987106851SAnna Dabrowska * @author  Anna Dabrowska <dokuwiki@cosmocode.de>
1087106851SAnna Dabrowska */
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    /**
31*910e7e15SAnna Dabrowska     * Based on struct pattern assignments
3287106851SAnna Dabrowska     */
3387106851SAnna Dabrowska    public function handle()
3487106851SAnna Dabrowska    {
35*910e7e15SAnna Dabrowska        global $INPUT;
36*910e7e15SAnna Dabrowska        global $ID;
3787106851SAnna Dabrowska
38*910e7e15SAnna Dabrowska        try {
39*910e7e15SAnna Dabrowska            $assignments = Assignments::getInstance();
40*910e7e15SAnna Dabrowska        } catch (Exception $e) {
41*910e7e15SAnna Dabrowska            msg($e->getMessage(), -1);
42*910e7e15SAnna Dabrowska            return false;
43*910e7e15SAnna Dabrowska        }
44*910e7e15SAnna Dabrowska
45*910e7e15SAnna Dabrowska        if ($INPUT->str('action') && $INPUT->arr('assignment') && checkSecurityToken()) {
46*910e7e15SAnna Dabrowska            $assignment = $INPUT->arr('assignment');
47*910e7e15SAnna Dabrowska            if (!blank($assignment['pattern']) && !blank($assignment['status'])) {
48*910e7e15SAnna Dabrowska                if ($INPUT->str('action') === 'delete') {
49*910e7e15SAnna Dabrowska                    $ok = $assignments->removePattern($assignment['pattern'], $assignment['user'], $assignment['status']);
50*910e7e15SAnna Dabrowska                    if (!$ok) msg('failed to remove pattern', -1);
51*910e7e15SAnna Dabrowska                } elseif ($INPUT->str('action') === 'add') {
52*910e7e15SAnna Dabrowska                    if ($assignment['pattern'][0] == '/') {
53*910e7e15SAnna Dabrowska                        if (@preg_match($assignment['pattern'], null) === false) {
54*910e7e15SAnna Dabrowska                            msg('Invalid regular expression. Pattern not saved', -1);
55*910e7e15SAnna Dabrowska                        } else {
56*910e7e15SAnna Dabrowska                            $ok = $assignments->addPattern($assignment['pattern'], $assignment['user'], $assignment['status']);
57*910e7e15SAnna Dabrowska                            if (!$ok) msg('failed to add pattern', -1);
58*910e7e15SAnna Dabrowska                        }
59*910e7e15SAnna Dabrowska                    } else {
60*910e7e15SAnna Dabrowska                        $ok = $assignments->addPattern($assignment['pattern'],$assignment['user'], $assignment['status']);
61*910e7e15SAnna Dabrowska                        if (!$ok) msg('failed to add pattern', -1);
62*910e7e15SAnna Dabrowska                    }
63*910e7e15SAnna Dabrowska                }
64*910e7e15SAnna Dabrowska            }
65*910e7e15SAnna Dabrowska
66*910e7e15SAnna Dabrowska            send_redirect(wl($ID, array('do' => 'admin', 'page' => 'structpublish'), true, '&'));
67*910e7e15SAnna Dabrowska        }
6887106851SAnna Dabrowska    }
6987106851SAnna Dabrowska
7087106851SAnna Dabrowska    /**
7187106851SAnna Dabrowska     * Render HTML output, e.g. helpful text and a form
7287106851SAnna Dabrowska     */
7387106851SAnna Dabrowska    public function html()
7487106851SAnna Dabrowska    {
7587106851SAnna Dabrowska        ptln('<h1>' . $this->getLang('menu') . '</h1>');
76*910e7e15SAnna Dabrowska
77*910e7e15SAnna Dabrowska        global $ID;
78*910e7e15SAnna Dabrowska
79*910e7e15SAnna Dabrowska        try {
80*910e7e15SAnna Dabrowska            $assignments = Assignments::getInstance();
81*910e7e15SAnna Dabrowska        } catch (Exception $e) {
82*910e7e15SAnna Dabrowska            msg($e->getMessage(), -1);
83*910e7e15SAnna Dabrowska            return false;
84*910e7e15SAnna Dabrowska        }
85*910e7e15SAnna Dabrowska        $list = $assignments->getAllPatterns();
86*910e7e15SAnna Dabrowska
87*910e7e15SAnna Dabrowska        echo '<form action="' . wl($ID) . '" action="post">';
88*910e7e15SAnna Dabrowska        echo '<input type="hidden" name="do" value="admin" />';
89*910e7e15SAnna Dabrowska        echo '<input type="hidden" name="page" value="structpublish" />';
90*910e7e15SAnna Dabrowska        echo '<input type="hidden" name="sectok" value="' . getSecurityToken() . '" />';
91*910e7e15SAnna Dabrowska        echo '<table class="inline">';
92*910e7e15SAnna Dabrowska
93*910e7e15SAnna Dabrowska        // header
94*910e7e15SAnna Dabrowska        echo '<tr>';
95*910e7e15SAnna Dabrowska        echo '<th>' . $this->getLang('assign_pattern') . '</th>';
96*910e7e15SAnna Dabrowska        echo '<th>' . $this->getLang('assign_status') . '</th>';
97*910e7e15SAnna Dabrowska        echo '<th>' . $this->getLang('assign_user') . '</th>';
98*910e7e15SAnna Dabrowska        echo '<th></th>';
99*910e7e15SAnna Dabrowska        echo '</tr>';
100*910e7e15SAnna Dabrowska
101*910e7e15SAnna Dabrowska        // existing assignments
102*910e7e15SAnna Dabrowska        foreach ($list as $assignment) {
103*910e7e15SAnna Dabrowska            $pattern = $assignment['pattern'];
104*910e7e15SAnna Dabrowska            $status = $assignment['status'];
105*910e7e15SAnna Dabrowska            $user = $assignment['user'];
106*910e7e15SAnna Dabrowska
107*910e7e15SAnna Dabrowska            $link = wl(
108*910e7e15SAnna Dabrowska                $ID,
109*910e7e15SAnna Dabrowska                [
110*910e7e15SAnna Dabrowska                    'do' => 'admin',
111*910e7e15SAnna Dabrowska                    'page' => 'structpublish',
112*910e7e15SAnna Dabrowska                    'action' => 'delete',
113*910e7e15SAnna Dabrowska                    'sectok' => getSecurityToken(),
114*910e7e15SAnna Dabrowska                    'assignment[status]' => $status,
115*910e7e15SAnna Dabrowska                    'assignment[pattern]' => $pattern,
116*910e7e15SAnna Dabrowska                    'assignment[user]' => $user,
117*910e7e15SAnna Dabrowska                ]
118*910e7e15SAnna Dabrowska            );
119*910e7e15SAnna Dabrowska
120*910e7e15SAnna Dabrowska            echo '<tr>';
121*910e7e15SAnna Dabrowska            echo '<td>' . hsc($pattern) . '</td>';
122*910e7e15SAnna Dabrowska            echo '<td>' . hsc($status) . '</td>';
123*910e7e15SAnna Dabrowska            echo '<td>' . hsc($user) . '</td>';
124*910e7e15SAnna Dabrowska            echo '<td><a class="deleteSchema" href="' . $link . '">' . $this->getLang('assign_del') . '</a></td>';
125*910e7e15SAnna Dabrowska            echo '</tr>';
126*910e7e15SAnna Dabrowska        }
127*910e7e15SAnna Dabrowska
128*910e7e15SAnna Dabrowska        // new assignment form
129*910e7e15SAnna Dabrowska        echo '<tr>';
130*910e7e15SAnna Dabrowska        echo '<td><input type="text" name="assignment[pattern]" /></td>';
131*910e7e15SAnna Dabrowska        echo '<td>';
132*910e7e15SAnna Dabrowska        echo '<select name="assignment[status]">';
133*910e7e15SAnna Dabrowska        foreach (['approve', 'publish'] as $status) {
134*910e7e15SAnna Dabrowska            echo '<option value="' . $status . '">' . $status . '</option>';
135*910e7e15SAnna Dabrowska        }
136*910e7e15SAnna Dabrowska        echo '</select>';
137*910e7e15SAnna Dabrowska        echo '</td>';
138*910e7e15SAnna Dabrowska        echo '<td><input type="text" name="assignment[user]" /></td>';
139*910e7e15SAnna Dabrowska        echo '<td><button type="submit" name="action" value="add">' . $this->getLang('assign_add') . '</button></td>';
140*910e7e15SAnna Dabrowska        echo '</tr>';
141*910e7e15SAnna Dabrowska
142*910e7e15SAnna Dabrowska        echo '</table>';
143*910e7e15SAnna Dabrowska        echo '</form>';
14487106851SAnna Dabrowska    }
14587106851SAnna Dabrowska}
14687106851SAnna Dabrowska
147