xref: /plugin/recommend/admin.php (revision ea12645d06884d8af79733106dfa783257e875ff)
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);
18*ea12645dSAnna Dabrowska        // all log files
192937e9a5SAnna Dabrowska        $this->logs = $log->getLogs();
20*ea12645dSAnna Dabrowska        // entries for the current/selected month
21*ea12645dSAnna Dabrowska        $this->entries = $log->getEntries();
2275494ca1SAnna Dabrowska
2375494ca1SAnna Dabrowska        global $INPUT;
2475494ca1SAnna Dabrowska        global $ID;
2575494ca1SAnna Dabrowska
2675494ca1SAnna Dabrowska        /** @var helper_plugin_recommend_assignment $assignmentsHelper */
2775494ca1SAnna Dabrowska        $assignmentsHelper = plugin_load('helper', 'recommend_assignment');
2875494ca1SAnna Dabrowska
2975494ca1SAnna Dabrowska        if ($INPUT->str('action') && $INPUT->arr('assignment') && checkSecurityToken()) {
3075494ca1SAnna Dabrowska            $assignment = $INPUT->arr('assignment');
3175494ca1SAnna Dabrowska                if ($INPUT->str('action') === 'delete') {
3275494ca1SAnna Dabrowska                    $ok = $assignmentsHelper->removeAssignment($assignment);
3375494ca1SAnna Dabrowska                    if (!$ok) {
3475494ca1SAnna Dabrowska                        msg('failed to remove pattern', -1);
3575494ca1SAnna Dabrowska                    }
3675494ca1SAnna Dabrowska                } elseif ($INPUT->str('action') === 'add') {
3775494ca1SAnna Dabrowska                    if ($assignment['pattern'][0] == '/') {
3875494ca1SAnna Dabrowska                        if (@preg_match($assignment['pattern'], null) === false) {
3975494ca1SAnna Dabrowska                            msg('Invalid regular expression. Pattern not saved', -1);
4075494ca1SAnna Dabrowska                        } else {
4175494ca1SAnna Dabrowska                            $ok = $assignmentsHelper->addAssignment($assignment);
4275494ca1SAnna Dabrowska                            if (!$ok) {
4375494ca1SAnna Dabrowska                                msg('failed to add pattern', -1);
4475494ca1SAnna Dabrowska                            }
4575494ca1SAnna Dabrowska                        }
4675494ca1SAnna Dabrowska                    } else {
4775494ca1SAnna Dabrowska                        $ok = $assignmentsHelper->addAssignment($assignment);
4875494ca1SAnna Dabrowska                        if (!$ok) {
4975494ca1SAnna Dabrowska                            msg('failed to add pattern', -1);
5075494ca1SAnna Dabrowska                        }
5175494ca1SAnna Dabrowska                    }
5275494ca1SAnna Dabrowska
5375494ca1SAnna Dabrowska            }
5475494ca1SAnna Dabrowska
5575494ca1SAnna Dabrowska            send_redirect(wl($ID, array('do' => 'admin', 'page' => 'recommend'), true, '&'));
5675494ca1SAnna Dabrowska        }
57cbc3cee5SAdrian Lang    }
58cbc3cee5SAdrian Lang
592937e9a5SAnna Dabrowska    public function getTOC() {
6075494ca1SAnna Dabrowska        return array_map([$this, 'recommendMakeTOC'], $this->logs);
61cbc3cee5SAdrian Lang    }
62cbc3cee5SAdrian Lang
632937e9a5SAnna Dabrowska    public function html() {
6475494ca1SAnna Dabrowska        echo $this->locale_xhtml('intro');
6575494ca1SAnna Dabrowska
6675494ca1SAnna Dabrowska        echo '<h2>' . $this->getLang('headline_snippets') . '</h2>';
6775494ca1SAnna Dabrowska
6875494ca1SAnna Dabrowska        echo $this->getForm();
6975494ca1SAnna Dabrowska
70*ea12645dSAnna Dabrowska        if (!$this->logs) {
71*ea12645dSAnna Dabrowska            echo $this->getLang('no_logs');
72*ea12645dSAnna Dabrowska            return;
73*ea12645dSAnna Dabrowska        }
74*ea12645dSAnna Dabrowska
7575494ca1SAnna Dabrowska        echo '<h2>' . $this->getLang('headline_logs') . '</h2>';
76*ea12645dSAnna Dabrowska
77*ea12645dSAnna Dabrowska        if (!$this->entries) {
78*ea12645dSAnna Dabrowska            echo sprintf($this->getLang('no_entries'), $this->month);
79*ea12645dSAnna Dabrowska            return;
80*ea12645dSAnna Dabrowska        }
81*ea12645dSAnna Dabrowska
82*ea12645dSAnna Dabrowska        echo sprintf('<p>' . $this->getLang('status_entries') . '</p>', $this->month, count($this->entries));
83cbc3cee5SAdrian Lang        echo '<ul>';
84cbc3cee5SAdrian Lang        foreach (array_reverse($this->entries) as $entry) {
85d462c752SAdrian Lang            echo "<li>" . hsc($entry) . "</li>";
86cbc3cee5SAdrian Lang        }
87cbc3cee5SAdrian Lang        echo '</ul>';
88cbc3cee5SAdrian Lang    }
89cbc3cee5SAdrian Lang
9075494ca1SAnna Dabrowska    protected function getForm()
9175494ca1SAnna Dabrowska    {
92cbc3cee5SAdrian Lang        global $ID;
9375494ca1SAnna Dabrowska
9475494ca1SAnna Dabrowska        $assignments = helper_plugin_recommend_assignment::getAssignments();
9575494ca1SAnna Dabrowska
9675494ca1SAnna Dabrowska        $form = '<form action="' . wl($ID) . '" action="post">';
9775494ca1SAnna Dabrowska        $form .= '<input type="hidden" name="do" value="admin" />';
9875494ca1SAnna Dabrowska        $form .= '<input type="hidden" name="page" value="recommend" />';
9975494ca1SAnna Dabrowska        $form .= '<input type="hidden" name="sectok" value="' . getSecurityToken() . '" />';
10075494ca1SAnna Dabrowska        $form .= '<table class="inline">';
10175494ca1SAnna Dabrowska
10275494ca1SAnna Dabrowska        // header
10375494ca1SAnna Dabrowska        $form .= '<tr>';
10475494ca1SAnna Dabrowska        $form .= '<th>' . $this->getLang('assign_pattern') . '</th>';
10575494ca1SAnna Dabrowska        $form .= '<th>' . $this->getLang('assign_user') . '</th>';
106d0dae647SAnna Dabrowska        $form .= '<th>' . $this->getLang('assign_subject') . '</th>';
10775494ca1SAnna Dabrowska        $form .= '<th>' . $this->getLang('assign_message') . '</th>';
10875494ca1SAnna Dabrowska        $form .= '<th></th>';
10975494ca1SAnna Dabrowska        $form .= '</tr>';
11075494ca1SAnna Dabrowska
11175494ca1SAnna Dabrowska        // existing assignments
112*ea12645dSAnna Dabrowska        if ($assignments) {
11375494ca1SAnna Dabrowska            foreach ($assignments as $assignment) {
11475494ca1SAnna Dabrowska                $pattern = $assignment['pattern'];
11575494ca1SAnna Dabrowska                $user = $assignment['user'];
116d0dae647SAnna Dabrowska                $subject = $assignment['subject'];
11775494ca1SAnna Dabrowska                $message = $assignment['message'];
11875494ca1SAnna Dabrowska
11975494ca1SAnna Dabrowska                $link = wl(
12075494ca1SAnna Dabrowska                    $ID,
12175494ca1SAnna Dabrowska                    [
12275494ca1SAnna Dabrowska                        'do' => 'admin',
12375494ca1SAnna Dabrowska                        'page' => 'recommend',
12475494ca1SAnna Dabrowska                        'action' => 'delete',
12575494ca1SAnna Dabrowska                        'sectok' => getSecurityToken(),
12675494ca1SAnna Dabrowska                        'assignment[pattern]' => $pattern,
12775494ca1SAnna Dabrowska                        'assignment[user]' => $user,
128d0dae647SAnna Dabrowska                        'assignment[subject]' => $subject,
12975494ca1SAnna Dabrowska                        'assignment[message]' => $message,
13075494ca1SAnna Dabrowska                    ]
13175494ca1SAnna Dabrowska                );
13275494ca1SAnna Dabrowska
13375494ca1SAnna Dabrowska                $form .= '<tr>';
13475494ca1SAnna Dabrowska                $form .= '<td>' . hsc($pattern) . '</td>';
13575494ca1SAnna Dabrowska                $form .= '<td>' . hsc($user) . '</td>';
136d0dae647SAnna Dabrowska                $form .= '<td>' . hsc($subject) . '</td>';
137b8b86b6cSAnna Dabrowska                $form .= '<td>' . nl2br($message) . '</td>';
13875494ca1SAnna Dabrowska                $form .= '<td><a class="deletePattern" href="' . $link . '">' . $this->getLang('assign_del') . '</a></td>';
13975494ca1SAnna Dabrowska                $form .= '</tr>';
14075494ca1SAnna Dabrowska            }
141*ea12645dSAnna Dabrowska        }
14275494ca1SAnna Dabrowska
14375494ca1SAnna Dabrowska        // new assignment form
14475494ca1SAnna Dabrowska        $form .= '<tr>';
14575494ca1SAnna Dabrowska        $form .= '<td><input type="text" name="assignment[pattern]" /></td>';
14675494ca1SAnna Dabrowska        $form .= '<td><input type="text" name="assignment[user]" /></td>';
147d0dae647SAnna Dabrowska        $form .= '<td><input type="text" name="assignment[subject]" /></td>';
14875494ca1SAnna Dabrowska        $form .= '<td><textarea cols="30" rows="4" name="assignment[message]"></textarea></td>';
14975494ca1SAnna Dabrowska        $form .= '<td><button type="submit" name="action" value="add">' . $this->getLang('assign_add') . '</button></td>';
15075494ca1SAnna Dabrowska        $form .= '</tr>';
15175494ca1SAnna Dabrowska
15275494ca1SAnna Dabrowska        $form .= '</table>';
15375494ca1SAnna Dabrowska        $form .= '</form>';
15475494ca1SAnna Dabrowska
15575494ca1SAnna Dabrowska        return $form;
15675494ca1SAnna Dabrowska    }
15775494ca1SAnna Dabrowska
15875494ca1SAnna Dabrowska    protected function recommendMakeTOC($month) {
15975494ca1SAnna Dabrowska        global $ID;
16075494ca1SAnna Dabrowska        return html_mktocitem('?do=admin&page=recommend&id=' . $ID . '&rec_month=' . $month, $month, 2, '');
1612937e9a5SAnna Dabrowska    }
162cbc3cee5SAdrian Lang}
163