xref: /plugin/approve/admin.php (revision b59355cdb0bc1813158c3cec643671b1fa1b3e90)
11b552e87SSzymon Olewniczak<?php
21b552e87SSzymon Olewniczak
31989ee26SSzymon Olewniczakuse dokuwiki\Extension\AdminPlugin;
41989ee26SSzymon Olewniczakuse dokuwiki\Extension\Event;
51b552e87SSzymon Olewniczak
61989ee26SSzymon Olewniczakclass admin_plugin_approve extends AdminPlugin
71b552e87SSzymon Olewniczak{
81b552e87SSzymon Olewniczak    /**
91b552e87SSzymon Olewniczak     * @return int sort number in admin menu
101b552e87SSzymon Olewniczak     */
111b552e87SSzymon Olewniczak    public function getMenuSort()
121b552e87SSzymon Olewniczak    {
131b552e87SSzymon Olewniczak        return 1;
141b552e87SSzymon Olewniczak    }
151b552e87SSzymon Olewniczak
161b552e87SSzymon Olewniczak    /**
171b552e87SSzymon Olewniczak     * Should carry out any processing required by the plugin.
181b552e87SSzymon Olewniczak     */
191b552e87SSzymon Olewniczak    public function handle()
201b552e87SSzymon Olewniczak    {
21086ec97fSSzymon Olewniczak        global $ID;
221b552e87SSzymon Olewniczak        /* @var Input */
231b552e87SSzymon Olewniczak        global $INPUT;
241b552e87SSzymon Olewniczak
25*b59355cdSSzymon Olewniczak        /** @var helper_plugin_approve_db $db */
26*b59355cdSSzymon Olewniczak        $db = $this->loadHelper('approve_db');
270c60a293SSzymon Olewniczak
28086ec97fSSzymon Olewniczak        if($INPUT->str('action') && $INPUT->arr('assignment') && checkSecurityToken()) {
29086ec97fSSzymon Olewniczak            $assignment = $INPUT->arr('assignment');
30086ec97fSSzymon Olewniczak            //insert empty string as NULL
31086ec97fSSzymon Olewniczak            if ($INPUT->str('action') === 'delete') {
321989ee26SSzymon Olewniczak                $db->deleteMaintainer((int) $assignment['id']);
331989ee26SSzymon Olewniczak                $db->updatePagesAssignments();
34086ec97fSSzymon Olewniczak            } else if ($INPUT->str('action') === 'add' && !blank($assignment['assign'])) {
351989ee26SSzymon Olewniczak                $approver = '';
362ce523c6SSzymon Olewniczak                if (!blank($assignment['approver'])) {
371989ee26SSzymon Olewniczak                    $approver = $assignment['approver'];
3891f47af0SErik Inge Bolsø                } elseif (!blank($assignment['approver_fb'])) {
391989ee26SSzymon Olewniczak                    $approver = $assignment['approver_fb'];
401b552e87SSzymon Olewniczak                }
411989ee26SSzymon Olewniczak                $db->addMaintainer($assignment['assign'], $approver);
421989ee26SSzymon Olewniczak                $db->updatePagesAssignments();
431b552e87SSzymon Olewniczak            }
44086ec97fSSzymon Olewniczak
45086ec97fSSzymon Olewniczak            send_redirect(wl($ID, array('do' => 'admin', 'page' => 'approve'), true, '&'));
461b552e87SSzymon Olewniczak        }
471b552e87SSzymon Olewniczak    }
481b552e87SSzymon Olewniczak
491b552e87SSzymon Olewniczak    /**
501b552e87SSzymon Olewniczak     * Render HTML output, e.g. helpful text and a form
511b552e87SSzymon Olewniczak     */
521b552e87SSzymon Olewniczak    public function html()
531b552e87SSzymon Olewniczak    {
541b552e87SSzymon Olewniczak        global $ID;
557e838775SSzymon Olewniczak        /* @var DokuWiki_Auth_Plugin $auth */
56086ec97fSSzymon Olewniczak        global $auth;
571b552e87SSzymon Olewniczak
58086ec97fSSzymon Olewniczak        echo $this->locale_xhtml('assignments_intro');
591b552e87SSzymon Olewniczak
60086ec97fSSzymon Olewniczak        echo '<form action="' . wl($ID) . '" action="post">';
61086ec97fSSzymon Olewniczak        echo '<input type="hidden" name="do" value="admin" />';
62086ec97fSSzymon Olewniczak        echo '<input type="hidden" name="page" value="approve" />';
63086ec97fSSzymon Olewniczak        echo '<input type="hidden" name="sectok" value="' . getSecurityToken() . '" />';
64086ec97fSSzymon Olewniczak        echo '<table class="inline">';
651b552e87SSzymon Olewniczak
66086ec97fSSzymon Olewniczak        // header
67086ec97fSSzymon Olewniczak        echo '<tr>';
68086ec97fSSzymon Olewniczak        echo '<th>'.$this->getLang('admin h_assignment_namespace').'</th>';
692ce523c6SSzymon Olewniczak        echo '<th>'.$this->getLang('admin h_assignment_approver').'</th>';
70086ec97fSSzymon Olewniczak        echo '<th></th>';
71086ec97fSSzymon Olewniczak        echo '</tr>';
721b552e87SSzymon Olewniczak
73*b59355cdSSzymon Olewniczak        /** @var helper_plugin_approve_db $db */
74*b59355cdSSzymon Olewniczak        $db = $this->loadHelper('approve_db');
75*b59355cdSSzymon Olewniczak        $assignments = $db->getMaintainers();
76*b59355cdSSzymon Olewniczak
77086ec97fSSzymon Olewniczak        foreach($assignments as $assignment) {
78086ec97fSSzymon Olewniczak            $id = $assignment['id'];
79086ec97fSSzymon Olewniczak            $namespace = $assignment['namespace'];
80*b59355cdSSzymon Olewniczak            $approver = $assignment['approver'] ?: '---';
811b552e87SSzymon Olewniczak
82086ec97fSSzymon Olewniczak            $link = wl(
83086ec97fSSzymon Olewniczak                $ID, array(
841b552e87SSzymon Olewniczak                    'do' => 'admin',
85086ec97fSSzymon Olewniczak                    'page' => 'approve',
86086ec97fSSzymon Olewniczak                    'action' => 'delete',
87086ec97fSSzymon Olewniczak                    'sectok' => getSecurityToken(),
88086ec97fSSzymon Olewniczak                    'assignment[id]' => $id
89086ec97fSSzymon Olewniczak                )
90086ec97fSSzymon Olewniczak            );
911b552e87SSzymon Olewniczak
92086ec97fSSzymon Olewniczak            echo '<tr>';
93086ec97fSSzymon Olewniczak            echo '<td>' . hsc($namespace) . '</td>';
942ce523c6SSzymon Olewniczak            $user = $auth->getUserData($approver);
95c7d53eabSSzymon Olewniczak            if ($user) {
96c7d53eabSSzymon Olewniczak                echo '<td>' . hsc($user['name']) . '</td>';
97c7d53eabSSzymon Olewniczak            } else {
982ce523c6SSzymon Olewniczak                echo '<td>' . hsc($approver) . '</td>';
99c7d53eabSSzymon Olewniczak            }
100086ec97fSSzymon Olewniczak            echo '<td><a href="' . $link . '">'.$this->getLang('admin btn_delete').'</a></td>';
101086ec97fSSzymon Olewniczak            echo '</tr>';
1021b552e87SSzymon Olewniczak        }
1031b552e87SSzymon Olewniczak
104086ec97fSSzymon Olewniczak        // new assignment form
105086ec97fSSzymon Olewniczak        echo '<tr>';
106086ec97fSSzymon Olewniczak        echo '<td><input type="text" name="assignment[assign]" /></td>';
107086ec97fSSzymon Olewniczak        echo '<td>';
1086dbb709bSSzymon Olewniczak        if ($auth->canDo('getUsers')) {
1092ce523c6SSzymon Olewniczak            echo '<select name="assignment[approver]">';
110086ec97fSSzymon Olewniczak            echo '<option value="">---</option>';
11191f47af0SErik Inge Bolsø            if ($auth->canDo('getGroups')) {
11291f47af0SErik Inge Bolsø                foreach($auth->retrieveGroups() as $group) {
11391f47af0SErik Inge Bolsø                    echo '<option value="@' . hsc($group) . '">' . '@' . hsc($group) . '</option>';
11491f47af0SErik Inge Bolsø                }
11591f47af0SErik Inge Bolsø            }
116086ec97fSSzymon Olewniczak            foreach($auth->retrieveUsers() as $login => $data) {
117086ec97fSSzymon Olewniczak                echo '<option value="' . hsc($login) . '">' . hsc($data['name']) . '</option>';
1181b552e87SSzymon Olewniczak            }
119086ec97fSSzymon Olewniczak            echo '</select>';
12091f47af0SErik Inge Bolsø            // in case your auth plugin can do groups, but not list them (like the default one),
12191f47af0SErik Inge Bolsø            // leave a text field as backup
1223e6f089eSSzymon Olewniczak            if (!$auth->canDo('getGroups')) {
1233e6f089eSSzymon Olewniczak                echo '<input name="assignment[approver_fb]" id="plugin__approve_group_input">';
1243e6f089eSSzymon Olewniczak            }
1256dbb709bSSzymon Olewniczak        } else {
1266dbb709bSSzymon Olewniczak            echo '<input name="assignment[approver]">';
1276dbb709bSSzymon Olewniczak        }
128086ec97fSSzymon Olewniczak        echo '</td>';
1296dbb709bSSzymon Olewniczak
130086ec97fSSzymon Olewniczak        echo '<td><button type="submit" name="action" value="add">'.$this->getLang('admin btn_add').'</button></td>';
131086ec97fSSzymon Olewniczak        echo '</tr>';
1321b552e87SSzymon Olewniczak
133086ec97fSSzymon Olewniczak        echo '</table>';
1341b552e87SSzymon Olewniczak    }
1351b552e87SSzymon Olewniczak}
1361b552e87SSzymon Olewniczak
1371b552e87SSzymon Olewniczak// vim:ts=4:sw=4:et:
138