xref: /plugin/recommend/admin.php (revision d0dae647eb4b3e8c01b15579fdc5751cb44d3575)
1cbc3cee5SAdrian Lang<?php
2cbc3cee5SAdrian Lang
3cbc3cee5SAdrian Langclass admin_plugin_recommend extends DokuWiki_Admin_Plugin {
42937e9a5SAnna Dabrowska
52937e9a5SAnna Dabrowska    protected $entries;
62937e9a5SAnna Dabrowska    protected $logs;
72937e9a5SAnna Dabrowska    protected $month;
875494ca1SAnna Dabrowska    protected $assignments;
9cbc3cee5SAdrian Lang
102937e9a5SAnna Dabrowska    public function handle() {
11cbc3cee5SAdrian Lang        if (isset($_REQUEST['rec_month']) &&
12cbc3cee5SAdrian Lang            preg_match('/^\d{4}-\d{2}$/', $_REQUEST['rec_month'])) {
13cbc3cee5SAdrian Lang            $this->month = $_REQUEST['rec_month'];
14cbc3cee5SAdrian Lang        } else {
15cbc3cee5SAdrian Lang            $this->month = date('Y-m');
16cbc3cee5SAdrian Lang        }
172937e9a5SAnna Dabrowska        $log = new helper_plugin_recommend_log($this->month);
18cbc3cee5SAdrian Lang        $this->entries = $log->getEntries();
192937e9a5SAnna Dabrowska        $this->logs = $log->getLogs();
2075494ca1SAnna Dabrowska
2175494ca1SAnna Dabrowska        global $INPUT;
2275494ca1SAnna Dabrowska        global $ID;
2375494ca1SAnna Dabrowska
2475494ca1SAnna Dabrowska        /** @var helper_plugin_recommend_assignment $assignmentsHelper */
2575494ca1SAnna Dabrowska        $assignmentsHelper = plugin_load('helper', 'recommend_assignment');
2675494ca1SAnna Dabrowska
2775494ca1SAnna Dabrowska        if ($INPUT->str('action') && $INPUT->arr('assignment') && checkSecurityToken()) {
2875494ca1SAnna Dabrowska            $assignment = $INPUT->arr('assignment');
2975494ca1SAnna Dabrowska                if ($INPUT->str('action') === 'delete') {
3075494ca1SAnna Dabrowska                    $ok = $assignmentsHelper->removeAssignment($assignment);
3175494ca1SAnna Dabrowska                    if (!$ok) {
3275494ca1SAnna Dabrowska                        msg('failed to remove pattern', -1);
3375494ca1SAnna Dabrowska                    }
3475494ca1SAnna Dabrowska                } elseif ($INPUT->str('action') === 'add') {
3575494ca1SAnna Dabrowska                    if ($assignment['pattern'][0] == '/') {
3675494ca1SAnna Dabrowska                        if (@preg_match($assignment['pattern'], null) === false) {
3775494ca1SAnna Dabrowska                            msg('Invalid regular expression. Pattern not saved', -1);
3875494ca1SAnna Dabrowska                        } else {
3975494ca1SAnna Dabrowska                            $ok = $assignmentsHelper->addAssignment($assignment);
4075494ca1SAnna Dabrowska                            if (!$ok) {
4175494ca1SAnna Dabrowska                                msg('failed to add pattern', -1);
4275494ca1SAnna Dabrowska                            }
4375494ca1SAnna Dabrowska                        }
4475494ca1SAnna Dabrowska                    } else {
4575494ca1SAnna Dabrowska                        $ok = $assignmentsHelper->addAssignment($assignment);
4675494ca1SAnna Dabrowska                        if (!$ok) {
4775494ca1SAnna Dabrowska                            msg('failed to add pattern', -1);
4875494ca1SAnna Dabrowska                        }
4975494ca1SAnna Dabrowska                    }
5075494ca1SAnna Dabrowska
5175494ca1SAnna Dabrowska            }
5275494ca1SAnna Dabrowska
5375494ca1SAnna Dabrowska            send_redirect(wl($ID, array('do' => 'admin', 'page' => 'recommend'), true, '&'));
5475494ca1SAnna Dabrowska        }
55cbc3cee5SAdrian Lang    }
56cbc3cee5SAdrian Lang
572937e9a5SAnna Dabrowska    public function getTOC() {
5875494ca1SAnna Dabrowska        return array_map([$this, 'recommendMakeTOC'], $this->logs);
59cbc3cee5SAdrian Lang    }
60cbc3cee5SAdrian Lang
612937e9a5SAnna Dabrowska    public function html() {
6275494ca1SAnna Dabrowska        echo $this->locale_xhtml('intro');
6375494ca1SAnna Dabrowska
64cbc3cee5SAdrian Lang        if (!$this->logs) {
65cbc3cee5SAdrian Lang            echo 'No recommendations.';
66cbc3cee5SAdrian Lang        }
67cbc3cee5SAdrian Lang        if (!$this->entries) {
68cbc3cee5SAdrian Lang            echo 'No recommendations were made in ' . $this->month . '.';
69cbc3cee5SAdrian Lang        }
7075494ca1SAnna Dabrowska
7175494ca1SAnna Dabrowska        echo '<h2>' . $this->getLang('headline_snippets') . '</h2>';
7275494ca1SAnna Dabrowska
7375494ca1SAnna Dabrowska        echo $this->getForm();
7475494ca1SAnna Dabrowska
7575494ca1SAnna Dabrowska        echo '<h2>' . $this->getLang('headline_logs') . '</h2>';
76cbc3cee5SAdrian Lang        echo '<p>In ' . $this->month . ', your users made the following ' . count($this->entries) . ' recommendations:</p>';
77cbc3cee5SAdrian Lang        echo '<ul>';
78cbc3cee5SAdrian Lang        foreach (array_reverse($this->entries) as $entry) {
79d462c752SAdrian Lang            echo "<li>" . hsc($entry) . "</li>";
80cbc3cee5SAdrian Lang        }
81cbc3cee5SAdrian Lang        echo '</ul>';
82cbc3cee5SAdrian Lang    }
83cbc3cee5SAdrian Lang
8475494ca1SAnna Dabrowska    protected function getForm()
8575494ca1SAnna Dabrowska    {
86cbc3cee5SAdrian Lang        global $ID;
8775494ca1SAnna Dabrowska
8875494ca1SAnna Dabrowska        $assignments = helper_plugin_recommend_assignment::getAssignments();
8975494ca1SAnna Dabrowska
9075494ca1SAnna Dabrowska        $form = '<form action="' . wl($ID) . '" action="post">';
9175494ca1SAnna Dabrowska        $form .= '<input type="hidden" name="do" value="admin" />';
9275494ca1SAnna Dabrowska        $form .= '<input type="hidden" name="page" value="recommend" />';
9375494ca1SAnna Dabrowska        $form .= '<input type="hidden" name="sectok" value="' . getSecurityToken() . '" />';
9475494ca1SAnna Dabrowska        $form .= '<table class="inline">';
9575494ca1SAnna Dabrowska
9675494ca1SAnna Dabrowska        // header
9775494ca1SAnna Dabrowska        $form .= '<tr>';
9875494ca1SAnna Dabrowska        $form .= '<th>' . $this->getLang('assign_pattern') . '</th>';
9975494ca1SAnna Dabrowska        $form .= '<th>' . $this->getLang('assign_user') . '</th>';
100*d0dae647SAnna Dabrowska        $form .= '<th>' . $this->getLang('assign_subject') . '</th>';
10175494ca1SAnna Dabrowska        $form .= '<th>' . $this->getLang('assign_message') . '</th>';
10275494ca1SAnna Dabrowska        $form .= '<th></th>';
10375494ca1SAnna Dabrowska        $form .= '</tr>';
10475494ca1SAnna Dabrowska
10575494ca1SAnna Dabrowska        // existing assignments
10675494ca1SAnna Dabrowska        foreach ($assignments as $assignment) {
10775494ca1SAnna Dabrowska            $pattern = $assignment['pattern'];
10875494ca1SAnna Dabrowska            $user = $assignment['user'];
109*d0dae647SAnna Dabrowska            $subject = $assignment['subject'];
11075494ca1SAnna Dabrowska            $message = $assignment['message'];
11175494ca1SAnna Dabrowska
11275494ca1SAnna Dabrowska            $link = wl(
11375494ca1SAnna Dabrowska                $ID,
11475494ca1SAnna Dabrowska                [
11575494ca1SAnna Dabrowska                    'do' => 'admin',
11675494ca1SAnna Dabrowska                    'page' => 'recommend',
11775494ca1SAnna Dabrowska                    'action' => 'delete',
11875494ca1SAnna Dabrowska                    'sectok' => getSecurityToken(),
11975494ca1SAnna Dabrowska                    'assignment[pattern]' => $pattern,
12075494ca1SAnna Dabrowska                    'assignment[user]' => $user,
121*d0dae647SAnna Dabrowska                    'assignment[subject]' => $subject,
12275494ca1SAnna Dabrowska                    'assignment[message]' => $message,
12375494ca1SAnna Dabrowska                ]
12475494ca1SAnna Dabrowska            );
12575494ca1SAnna Dabrowska
12675494ca1SAnna Dabrowska            $form .= '<tr>';
12775494ca1SAnna Dabrowska            $form .= '<td>' . hsc($pattern) . '</td>';
12875494ca1SAnna Dabrowska            $form .= '<td>' . hsc($user) . '</td>';
129*d0dae647SAnna Dabrowska            $form .= '<td>' . hsc($subject) . '</td>';
130b8b86b6cSAnna Dabrowska            $form .= '<td>' . nl2br($message) . '</td>';
13175494ca1SAnna Dabrowska            $form .= '<td><a class="deletePattern" href="' . $link . '">' . $this->getLang('assign_del') . '</a></td>';
13275494ca1SAnna Dabrowska            $form .= '</tr>';
13375494ca1SAnna Dabrowska        }
13475494ca1SAnna Dabrowska
13575494ca1SAnna Dabrowska        // new assignment form
13675494ca1SAnna Dabrowska        $form .= '<tr>';
13775494ca1SAnna Dabrowska        $form .= '<td><input type="text" name="assignment[pattern]" /></td>';
13875494ca1SAnna Dabrowska        $form .= '<td><input type="text" name="assignment[user]" /></td>';
139*d0dae647SAnna Dabrowska        $form .= '<td><input type="text" name="assignment[subject]" /></td>';
14075494ca1SAnna Dabrowska        $form .= '<td><textarea cols="30" rows="4" name="assignment[message]"></textarea></td>';
14175494ca1SAnna Dabrowska        $form .= '<td><button type="submit" name="action" value="add">' . $this->getLang('assign_add') . '</button></td>';
14275494ca1SAnna Dabrowska        $form .= '</tr>';
14375494ca1SAnna Dabrowska
14475494ca1SAnna Dabrowska        $form .= '</table>';
14575494ca1SAnna Dabrowska        $form .= '</form>';
14675494ca1SAnna Dabrowska
14775494ca1SAnna Dabrowska        return $form;
14875494ca1SAnna Dabrowska    }
14975494ca1SAnna Dabrowska
15075494ca1SAnna Dabrowska    protected function recommendMakeTOC($month) {
15175494ca1SAnna Dabrowska        global $ID;
15275494ca1SAnna Dabrowska        return html_mktocitem('?do=admin&page=recommend&id=' . $ID . '&rec_month=' . $month, $month, 2, '');
1532937e9a5SAnna Dabrowska    }
154cbc3cee5SAdrian Lang}
155