xref: /plugin/structpublish/admin.php (revision 31e730e145521fb7010758415a11c928f44439b8)
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);
428b0ba635SAndreas 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*31e730e1SAnna Dabrowska                    $ok = $assignments->removePattern(
50*31e730e1SAnna Dabrowska                        $assignment['pattern'],
51*31e730e1SAnna Dabrowska                        $assignment['user'],
52*31e730e1SAnna Dabrowska                        $assignment['status']
53*31e730e1SAnna Dabrowska                    );
548b0ba635SAndreas Gohr                    if (!$ok) {
558b0ba635SAndreas Gohr                        msg('failed to remove pattern', -1);
568b0ba635SAndreas Gohr                    }
57910e7e15SAnna Dabrowska                } elseif ($INPUT->str('action') === 'add') {
58910e7e15SAnna Dabrowska                    if ($assignment['pattern'][0] == '/') {
59910e7e15SAnna Dabrowska                        if (@preg_match($assignment['pattern'], null) === false) {
60910e7e15SAnna Dabrowska                            msg('Invalid regular expression. Pattern not saved', -1);
61910e7e15SAnna Dabrowska                        } else {
62*31e730e1SAnna Dabrowska                            $ok = $assignments->addPattern(
63*31e730e1SAnna Dabrowska                                $assignment['pattern'],
64*31e730e1SAnna Dabrowska                                $assignment['user'],
65*31e730e1SAnna Dabrowska                                $assignment['status']
66*31e730e1SAnna Dabrowska                            );
678b0ba635SAndreas Gohr                            if (!$ok) {
688b0ba635SAndreas Gohr                                msg('failed to add pattern', -1);
698b0ba635SAndreas Gohr                            }
70910e7e15SAnna Dabrowska                        }
71910e7e15SAnna Dabrowska                    } else {
72*31e730e1SAnna Dabrowska                        $ok = $assignments->addPattern(
73*31e730e1SAnna Dabrowska                            $assignment['pattern'],
74*31e730e1SAnna Dabrowska                            $assignment['user'],
75*31e730e1SAnna Dabrowska                            $assignment['status']
76*31e730e1SAnna Dabrowska                        );
778b0ba635SAndreas Gohr                        if (!$ok) {
788b0ba635SAndreas Gohr                            msg('failed to add pattern', -1);
798b0ba635SAndreas Gohr                        }
80910e7e15SAnna Dabrowska                    }
81910e7e15SAnna Dabrowska                }
82910e7e15SAnna Dabrowska            }
83910e7e15SAnna Dabrowska
84910e7e15SAnna Dabrowska            send_redirect(wl($ID, array('do' => 'admin', 'page' => 'structpublish'), true, '&'));
85910e7e15SAnna Dabrowska        }
8687106851SAnna Dabrowska    }
8787106851SAnna Dabrowska
8887106851SAnna Dabrowska    /**
898b0ba635SAndreas Gohr     * Render HTML output
9087106851SAnna Dabrowska     */
9187106851SAnna Dabrowska    public function html()
9287106851SAnna Dabrowska    {
9387106851SAnna Dabrowska        ptln('<h1>' . $this->getLang('menu') . '</h1>');
94910e7e15SAnna Dabrowska
95910e7e15SAnna Dabrowska        global $ID;
96910e7e15SAnna Dabrowska
97910e7e15SAnna Dabrowska        try {
98910e7e15SAnna Dabrowska            $assignments = Assignments::getInstance();
99910e7e15SAnna Dabrowska        } catch (Exception $e) {
100910e7e15SAnna Dabrowska            msg($e->getMessage(), -1);
1018b0ba635SAndreas Gohr            return;
102910e7e15SAnna Dabrowska        }
103910e7e15SAnna Dabrowska        $list = $assignments->getAllPatterns();
104910e7e15SAnna Dabrowska
105910e7e15SAnna Dabrowska        echo '<form action="' . wl($ID) . '" action="post">';
106910e7e15SAnna Dabrowska        echo '<input type="hidden" name="do" value="admin" />';
107910e7e15SAnna Dabrowska        echo '<input type="hidden" name="page" value="structpublish" />';
108910e7e15SAnna Dabrowska        echo '<input type="hidden" name="sectok" value="' . getSecurityToken() . '" />';
109910e7e15SAnna Dabrowska        echo '<table class="inline">';
110910e7e15SAnna Dabrowska
111910e7e15SAnna Dabrowska        // header
112910e7e15SAnna Dabrowska        echo '<tr>';
113910e7e15SAnna Dabrowska        echo '<th>' . $this->getLang('assign_pattern') . '</th>';
114910e7e15SAnna Dabrowska        echo '<th>' . $this->getLang('assign_status') . '</th>';
115910e7e15SAnna Dabrowska        echo '<th>' . $this->getLang('assign_user') . '</th>';
116910e7e15SAnna Dabrowska        echo '<th></th>';
117910e7e15SAnna Dabrowska        echo '</tr>';
118910e7e15SAnna Dabrowska
119910e7e15SAnna Dabrowska        // existing assignments
120910e7e15SAnna Dabrowska        foreach ($list as $assignment) {
121910e7e15SAnna Dabrowska            $pattern = $assignment['pattern'];
122910e7e15SAnna Dabrowska            $status = $assignment['status'];
123910e7e15SAnna Dabrowska            $user = $assignment['user'];
124910e7e15SAnna Dabrowska
125910e7e15SAnna Dabrowska            $link = wl(
126910e7e15SAnna Dabrowska                $ID,
127910e7e15SAnna Dabrowska                [
128910e7e15SAnna Dabrowska                    'do' => 'admin',
129910e7e15SAnna Dabrowska                    'page' => 'structpublish',
130910e7e15SAnna Dabrowska                    'action' => 'delete',
131910e7e15SAnna Dabrowska                    'sectok' => getSecurityToken(),
132910e7e15SAnna Dabrowska                    'assignment[status]' => $status,
133910e7e15SAnna Dabrowska                    'assignment[pattern]' => $pattern,
134910e7e15SAnna Dabrowska                    'assignment[user]' => $user,
135910e7e15SAnna Dabrowska                ]
136910e7e15SAnna Dabrowska            );
137910e7e15SAnna Dabrowska
138910e7e15SAnna Dabrowska            echo '<tr>';
139910e7e15SAnna Dabrowska            echo '<td>' . hsc($pattern) . '</td>';
140910e7e15SAnna Dabrowska            echo '<td>' . hsc($status) . '</td>';
141910e7e15SAnna Dabrowska            echo '<td>' . hsc($user) . '</td>';
142910e7e15SAnna Dabrowska            echo '<td><a class="deleteSchema" href="' . $link . '">' . $this->getLang('assign_del') . '</a></td>';
143910e7e15SAnna Dabrowska            echo '</tr>';
144910e7e15SAnna Dabrowska        }
145910e7e15SAnna Dabrowska
146910e7e15SAnna Dabrowska        // new assignment form
147910e7e15SAnna Dabrowska        echo '<tr>';
148910e7e15SAnna Dabrowska        echo '<td><input type="text" name="assignment[pattern]" /></td>';
149910e7e15SAnna Dabrowska        echo '<td>';
150910e7e15SAnna Dabrowska        echo '<select name="assignment[status]">';
151e31c94d7SAndreas Gohr        foreach ([Constants::ACTION_APPROVE, Constants::ACTION_PUBLISH] as $status) {
152910e7e15SAnna Dabrowska            echo '<option value="' . $status . '">' . $status . '</option>';
153910e7e15SAnna Dabrowska        }
154910e7e15SAnna Dabrowska        echo '</select>';
155910e7e15SAnna Dabrowska        echo '</td>';
156910e7e15SAnna Dabrowska        echo '<td><input type="text" name="assignment[user]" /></td>';
157910e7e15SAnna Dabrowska        echo '<td><button type="submit" name="action" value="add">' . $this->getLang('assign_add') . '</button></td>';
158910e7e15SAnna Dabrowska        echo '</tr>';
159910e7e15SAnna Dabrowska
160910e7e15SAnna Dabrowska        echo '</table>';
161910e7e15SAnna Dabrowska        echo '</form>';
16287106851SAnna Dabrowska    }
16387106851SAnna Dabrowska}
164