xref: /plugin/approve/admin.php (revision 1989ee26e4c10d9fe322c2a0aa4ae990f031b47b)
11b552e87SSzymon Olewniczak<?php
21b552e87SSzymon Olewniczak
3*1989ee26SSzymon Olewniczakuse dokuwiki\Extension\AdminPlugin;
4*1989ee26SSzymon Olewniczakuse dokuwiki\Extension\Event;
51b552e87SSzymon Olewniczak
6*1989ee26SSzymon 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*1989ee26SSzymon Olewniczak        /** @var helper_plugin_approve_data $db */
26*1989ee26SSzymon Olewniczak        $db = $this->loadHelper('approve_data');
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') {
32*1989ee26SSzymon Olewniczak                $db->deleteMaintainer((int) $assignment['id']);
33*1989ee26SSzymon Olewniczak                $db->updatePagesAssignments();
34086ec97fSSzymon Olewniczak            } else if ($INPUT->str('action') === 'add' && !blank($assignment['assign'])) {
35*1989ee26SSzymon Olewniczak                $approver = '';
362ce523c6SSzymon Olewniczak                if (!blank($assignment['approver'])) {
37*1989ee26SSzymon Olewniczak                    $approver = $assignment['approver'];
3891f47af0SErik Inge Bolsø                } elseif (!blank($assignment['approver_fb'])) {
39*1989ee26SSzymon Olewniczak                    $approver = $assignment['approver_fb'];
401b552e87SSzymon Olewniczak                }
41*1989ee26SSzymon Olewniczak                $db->addMaintainer($assignment['assign'], $approver);
42b1ff32a1SSzymon Olewniczak
43*1989ee26SSzymon Olewniczak                // TODO: Transaction must be commit before updatePageAssignments
44*1989ee26SSzymon Olewniczak                $db->updatePagesAssignments();
451b552e87SSzymon Olewniczak            }
46086ec97fSSzymon Olewniczak
47086ec97fSSzymon Olewniczak            send_redirect(wl($ID, array('do' => 'admin', 'page' => 'approve'), true, '&'));
481b552e87SSzymon Olewniczak        }
491b552e87SSzymon Olewniczak    }
501b552e87SSzymon Olewniczak
511b552e87SSzymon Olewniczak    /**
521b552e87SSzymon Olewniczak     * Render HTML output, e.g. helpful text and a form
531b552e87SSzymon Olewniczak     */
541b552e87SSzymon Olewniczak    public function html()
551b552e87SSzymon Olewniczak    {
561b552e87SSzymon Olewniczak        global $ID;
577e838775SSzymon Olewniczak        /* @var DokuWiki_Auth_Plugin $auth */
58086ec97fSSzymon Olewniczak        global $auth;
591b552e87SSzymon Olewniczak
600c60a293SSzymon Olewniczak        try {
610c60a293SSzymon Olewniczak            /** @var \helper_plugin_approve_db $db_helper */
620c60a293SSzymon Olewniczak            $db_helper = plugin_load('helper', 'approve_db');
630c60a293SSzymon Olewniczak            $sqlite = $db_helper->getDB();
640c60a293SSzymon Olewniczak        } catch (Exception $e) {
650c60a293SSzymon Olewniczak            msg($e->getMessage(), -1);
660c60a293SSzymon Olewniczak            return;
670c60a293SSzymon Olewniczak        }
680c60a293SSzymon Olewniczak
690c60a293SSzymon Olewniczak        $res = $sqlite->query('SELECT * FROM maintainer ORDER BY namespace');
700c60a293SSzymon Olewniczak        $assignments = $sqlite->res2arr($res);
711b552e87SSzymon Olewniczak
72086ec97fSSzymon Olewniczak        echo $this->locale_xhtml('assignments_intro');
731b552e87SSzymon Olewniczak
74086ec97fSSzymon Olewniczak        echo '<form action="' . wl($ID) . '" action="post">';
75086ec97fSSzymon Olewniczak        echo '<input type="hidden" name="do" value="admin" />';
76086ec97fSSzymon Olewniczak        echo '<input type="hidden" name="page" value="approve" />';
77086ec97fSSzymon Olewniczak        echo '<input type="hidden" name="sectok" value="' . getSecurityToken() . '" />';
78086ec97fSSzymon Olewniczak        echo '<table class="inline">';
791b552e87SSzymon Olewniczak
80086ec97fSSzymon Olewniczak        // header
81086ec97fSSzymon Olewniczak        echo '<tr>';
82086ec97fSSzymon Olewniczak        echo '<th>'.$this->getLang('admin h_assignment_namespace').'</th>';
832ce523c6SSzymon Olewniczak        echo '<th>'.$this->getLang('admin h_assignment_approver').'</th>';
84086ec97fSSzymon Olewniczak        echo '<th></th>';
85086ec97fSSzymon Olewniczak        echo '</tr>';
861b552e87SSzymon Olewniczak
87086ec97fSSzymon Olewniczak        // existing assignments
88086ec97fSSzymon Olewniczak        foreach($assignments as $assignment) {
89086ec97fSSzymon Olewniczak            $id = $assignment['id'];
90086ec97fSSzymon Olewniczak            $namespace = $assignment['namespace'];
912ce523c6SSzymon Olewniczak            $approver = $assignment['approver'] ? $assignment['approver'] : '---';
921b552e87SSzymon Olewniczak
93086ec97fSSzymon Olewniczak            $link = wl(
94086ec97fSSzymon Olewniczak                $ID, array(
951b552e87SSzymon Olewniczak                    'do' => 'admin',
96086ec97fSSzymon Olewniczak                    'page' => 'approve',
97086ec97fSSzymon Olewniczak                    'action' => 'delete',
98086ec97fSSzymon Olewniczak                    'sectok' => getSecurityToken(),
99086ec97fSSzymon Olewniczak                    'assignment[id]' => $id
100086ec97fSSzymon Olewniczak                )
101086ec97fSSzymon Olewniczak            );
1021b552e87SSzymon Olewniczak
103086ec97fSSzymon Olewniczak            echo '<tr>';
104086ec97fSSzymon Olewniczak            echo '<td>' . hsc($namespace) . '</td>';
1052ce523c6SSzymon Olewniczak            $user = $auth->getUserData($approver);
106c7d53eabSSzymon Olewniczak            if ($user) {
107c7d53eabSSzymon Olewniczak                echo '<td>' . hsc($user['name']) . '</td>';
108c7d53eabSSzymon Olewniczak            } else {
1092ce523c6SSzymon Olewniczak                echo '<td>' . hsc($approver) . '</td>';
110c7d53eabSSzymon Olewniczak            }
111086ec97fSSzymon Olewniczak            echo '<td><a href="' . $link . '">'.$this->getLang('admin btn_delete').'</a></td>';
112086ec97fSSzymon Olewniczak            echo '</tr>';
1131b552e87SSzymon Olewniczak        }
1141b552e87SSzymon Olewniczak
115086ec97fSSzymon Olewniczak        // new assignment form
116086ec97fSSzymon Olewniczak        echo '<tr>';
117086ec97fSSzymon Olewniczak        echo '<td><input type="text" name="assignment[assign]" /></td>';
118086ec97fSSzymon Olewniczak        echo '<td>';
1196dbb709bSSzymon Olewniczak        if ($auth->canDo('getUsers')) {
1202ce523c6SSzymon Olewniczak            echo '<select name="assignment[approver]">';
121086ec97fSSzymon Olewniczak            echo '<option value="">---</option>';
12291f47af0SErik Inge Bolsø            if ($auth->canDo('getGroups')) {
12391f47af0SErik Inge Bolsø                foreach($auth->retrieveGroups() as $group) {
12491f47af0SErik Inge Bolsø                    echo '<option value="@' . hsc($group) . '">' . '@' . hsc($group) . '</option>';
12591f47af0SErik Inge Bolsø                }
12691f47af0SErik Inge Bolsø            }
127086ec97fSSzymon Olewniczak            foreach($auth->retrieveUsers() as $login => $data) {
128086ec97fSSzymon Olewniczak                echo '<option value="' . hsc($login) . '">' . hsc($data['name']) . '</option>';
1291b552e87SSzymon Olewniczak            }
130086ec97fSSzymon Olewniczak            echo '</select>';
13191f47af0SErik Inge Bolsø            // in case your auth plugin can do groups, but not list them (like the default one),
13291f47af0SErik Inge Bolsø            // leave a text field as backup
1333e6f089eSSzymon Olewniczak            if (!$auth->canDo('getGroups')) {
1343e6f089eSSzymon Olewniczak                echo '<input name="assignment[approver_fb]" id="plugin__approve_group_input">';
1353e6f089eSSzymon Olewniczak            }
1366dbb709bSSzymon Olewniczak        } else {
1376dbb709bSSzymon Olewniczak            echo '<input name="assignment[approver]">';
1386dbb709bSSzymon Olewniczak        }
139086ec97fSSzymon Olewniczak        echo '</td>';
1406dbb709bSSzymon Olewniczak
141086ec97fSSzymon Olewniczak        echo '<td><button type="submit" name="action" value="add">'.$this->getLang('admin btn_add').'</button></td>';
142086ec97fSSzymon Olewniczak        echo '</tr>';
1431b552e87SSzymon Olewniczak
144086ec97fSSzymon Olewniczak        echo '</table>';
1451b552e87SSzymon Olewniczak    }
1461b552e87SSzymon Olewniczak}
1471b552e87SSzymon Olewniczak
1481b552e87SSzymon Olewniczak// vim:ts=4:sw=4:et:
149