xref: /plugin/recommend/admin.php (revision c6f9d3d590f898165ce791277f4554ff3ef97548)
1cbc3cee5SAdrian Lang<?php
2cbc3cee5SAdrian Lang
3*c6f9d3d5SAnna Dabrowskause dokuwiki\Extension\AdminPlugin;
42937e9a5SAnna Dabrowska
5*c6f9d3d5SAnna Dabrowskaclass admin_plugin_recommend extends AdminPlugin
6*c6f9d3d5SAnna Dabrowska{
72937e9a5SAnna Dabrowska    protected $entries;
82937e9a5SAnna Dabrowska    protected $logs;
92937e9a5SAnna Dabrowska    protected $month;
1075494ca1SAnna Dabrowska    protected $assignments;
11cbc3cee5SAdrian Lang
12*c6f9d3d5SAnna Dabrowska    public function handle()
13*c6f9d3d5SAnna Dabrowska    {
14*c6f9d3d5SAnna Dabrowska        if (
15*c6f9d3d5SAnna Dabrowska            isset($_REQUEST['rec_month']) &&
16*c6f9d3d5SAnna Dabrowska            preg_match('/^\d{4}-\d{2}$/', $_REQUEST['rec_month'])
17*c6f9d3d5SAnna Dabrowska        ) {
18cbc3cee5SAdrian Lang            $this->month = $_REQUEST['rec_month'];
19cbc3cee5SAdrian Lang        } else {
20cbc3cee5SAdrian Lang            $this->month = date('Y-m');
21cbc3cee5SAdrian Lang        }
222937e9a5SAnna Dabrowska        $log = new helper_plugin_recommend_log($this->month);
23ea12645dSAnna Dabrowska        // all log files
242937e9a5SAnna Dabrowska        $this->logs = $log->getLogs();
25ea12645dSAnna Dabrowska        // entries for the current/selected month
26ea12645dSAnna Dabrowska        $this->entries = $log->getEntries();
2775494ca1SAnna Dabrowska
2875494ca1SAnna Dabrowska        global $INPUT;
2975494ca1SAnna Dabrowska        global $ID;
3075494ca1SAnna Dabrowska
3175494ca1SAnna Dabrowska        /** @var helper_plugin_recommend_assignment $assignmentsHelper */
3275494ca1SAnna Dabrowska        $assignmentsHelper = plugin_load('helper', 'recommend_assignment');
3375494ca1SAnna Dabrowska
3475494ca1SAnna Dabrowska        if ($INPUT->str('action') && $INPUT->arr('assignment') && checkSecurityToken()) {
3575494ca1SAnna Dabrowska            $assignment = $INPUT->arr('assignment');
3675494ca1SAnna Dabrowska            if ($INPUT->str('action') === 'delete') {
3775494ca1SAnna Dabrowska                $ok = $assignmentsHelper->removeAssignment($assignment);
3875494ca1SAnna Dabrowska                if (!$ok) {
3975494ca1SAnna Dabrowska                    msg('failed to remove pattern', -1);
4075494ca1SAnna Dabrowska                }
4175494ca1SAnna Dabrowska            } elseif ($INPUT->str('action') === 'add') {
4275494ca1SAnna Dabrowska                if ($assignment['pattern'][0] == '/') {
4375494ca1SAnna Dabrowska                    if (@preg_match($assignment['pattern'], null) === false) {
4475494ca1SAnna Dabrowska                        msg('Invalid regular expression. Pattern not saved', -1);
4575494ca1SAnna Dabrowska                    } else {
4675494ca1SAnna Dabrowska                        $ok = $assignmentsHelper->addAssignment($assignment);
4775494ca1SAnna Dabrowska                        if (!$ok) {
4875494ca1SAnna Dabrowska                            msg('failed to add pattern', -1);
4975494ca1SAnna Dabrowska                        }
5075494ca1SAnna Dabrowska                    }
5175494ca1SAnna Dabrowska                } else {
5275494ca1SAnna Dabrowska                    $ok = $assignmentsHelper->addAssignment($assignment);
5375494ca1SAnna Dabrowska                    if (!$ok) {
5475494ca1SAnna Dabrowska                        msg('failed to add pattern', -1);
5575494ca1SAnna Dabrowska                    }
5675494ca1SAnna Dabrowska                }
5775494ca1SAnna Dabrowska            }
5875494ca1SAnna Dabrowska
59*c6f9d3d5SAnna Dabrowska            send_redirect(wl($ID, ['do' => 'admin', 'page' => 'recommend'], true, '&'));
6075494ca1SAnna Dabrowska        }
61cbc3cee5SAdrian Lang    }
62cbc3cee5SAdrian Lang
63*c6f9d3d5SAnna Dabrowska    public function getTOC()
64*c6f9d3d5SAnna Dabrowska    {
6575494ca1SAnna Dabrowska        return array_map([$this, 'recommendMakeTOC'], $this->logs);
66cbc3cee5SAdrian Lang    }
67cbc3cee5SAdrian Lang
68*c6f9d3d5SAnna Dabrowska    public function html()
69*c6f9d3d5SAnna Dabrowska    {
7075494ca1SAnna Dabrowska        echo $this->locale_xhtml('intro');
7175494ca1SAnna Dabrowska
7275494ca1SAnna Dabrowska        echo '<h2>' . $this->getLang('headline_snippets') . '</h2>';
7375494ca1SAnna Dabrowska
7475494ca1SAnna Dabrowska        echo $this->getForm();
7575494ca1SAnna Dabrowska
76ea12645dSAnna Dabrowska        if (!$this->logs) {
77ea12645dSAnna Dabrowska            echo $this->getLang('no_logs');
78ea12645dSAnna Dabrowska            return;
79ea12645dSAnna Dabrowska        }
80ea12645dSAnna Dabrowska
8175494ca1SAnna Dabrowska        echo '<h2>' . $this->getLang('headline_logs') . '</h2>';
82ea12645dSAnna Dabrowska
83ea12645dSAnna Dabrowska        if (!$this->entries) {
84ea12645dSAnna Dabrowska            echo sprintf($this->getLang('no_entries'), $this->month);
85ea12645dSAnna Dabrowska            return;
86ea12645dSAnna Dabrowska        }
87ea12645dSAnna Dabrowska
88ea12645dSAnna Dabrowska        echo sprintf('<p>' . $this->getLang('status_entries') . '</p>', $this->month, count($this->entries));
89cbc3cee5SAdrian Lang        echo '<ul>';
90cbc3cee5SAdrian Lang        foreach (array_reverse($this->entries) as $entry) {
91d462c752SAdrian Lang            echo "<li>" . hsc($entry) . "</li>";
92cbc3cee5SAdrian Lang        }
93cbc3cee5SAdrian Lang        echo '</ul>';
94cbc3cee5SAdrian Lang    }
95cbc3cee5SAdrian Lang
9675494ca1SAnna Dabrowska    protected function getForm()
9775494ca1SAnna Dabrowska    {
98cbc3cee5SAdrian Lang        global $ID;
9975494ca1SAnna Dabrowska
10075494ca1SAnna Dabrowska        $assignments = helper_plugin_recommend_assignment::getAssignments();
10175494ca1SAnna Dabrowska
10275494ca1SAnna Dabrowska        $form = '<form action="' . wl($ID) . '" action="post">';
10375494ca1SAnna Dabrowska        $form .= '<input type="hidden" name="do" value="admin" />';
10475494ca1SAnna Dabrowska        $form .= '<input type="hidden" name="page" value="recommend" />';
10575494ca1SAnna Dabrowska        $form .= '<input type="hidden" name="sectok" value="' . getSecurityToken() . '" />';
10675494ca1SAnna Dabrowska        $form .= '<table class="inline">';
10775494ca1SAnna Dabrowska
10875494ca1SAnna Dabrowska        // header
10975494ca1SAnna Dabrowska        $form .= '<tr>';
11075494ca1SAnna Dabrowska        $form .= '<th>' . $this->getLang('assign_pattern') . '</th>';
11175494ca1SAnna Dabrowska        $form .= '<th>' . $this->getLang('assign_user') . '</th>';
112d0dae647SAnna Dabrowska        $form .= '<th>' . $this->getLang('assign_subject') . '</th>';
11375494ca1SAnna Dabrowska        $form .= '<th>' . $this->getLang('assign_message') . '</th>';
11475494ca1SAnna Dabrowska        $form .= '<th></th>';
11575494ca1SAnna Dabrowska        $form .= '</tr>';
11675494ca1SAnna Dabrowska
11775494ca1SAnna Dabrowska        // existing assignments
118ea12645dSAnna Dabrowska        if ($assignments) {
11975494ca1SAnna Dabrowska            foreach ($assignments as $assignment) {
12075494ca1SAnna Dabrowska                $pattern = $assignment['pattern'];
12175494ca1SAnna Dabrowska                $user = $assignment['user'];
122d0dae647SAnna Dabrowska                $subject = $assignment['subject'];
12375494ca1SAnna Dabrowska                $message = $assignment['message'];
12475494ca1SAnna Dabrowska
12575494ca1SAnna Dabrowska                $link = wl(
12675494ca1SAnna Dabrowska                    $ID,
12775494ca1SAnna Dabrowska                    [
12875494ca1SAnna Dabrowska                        'do' => 'admin',
12975494ca1SAnna Dabrowska                        'page' => 'recommend',
13075494ca1SAnna Dabrowska                        'action' => 'delete',
13175494ca1SAnna Dabrowska                        'sectok' => getSecurityToken(),
13275494ca1SAnna Dabrowska                        'assignment[pattern]' => $pattern,
13375494ca1SAnna Dabrowska                        'assignment[user]' => $user,
134d0dae647SAnna Dabrowska                        'assignment[subject]' => $subject,
13575494ca1SAnna Dabrowska                        'assignment[message]' => $message,
13675494ca1SAnna Dabrowska                    ]
13775494ca1SAnna Dabrowska                );
13875494ca1SAnna Dabrowska
13975494ca1SAnna Dabrowska                $form .= '<tr>';
14075494ca1SAnna Dabrowska                $form .= '<td>' . hsc($pattern) . '</td>';
14175494ca1SAnna Dabrowska                $form .= '<td>' . hsc($user) . '</td>';
142d0dae647SAnna Dabrowska                $form .= '<td>' . hsc($subject) . '</td>';
143b8b86b6cSAnna Dabrowska                $form .= '<td>' . nl2br($message) . '</td>';
144*c6f9d3d5SAnna Dabrowska                $form .= '<td><a class="deletePattern" href="' .
145*c6f9d3d5SAnna Dabrowska                    $link . '">' . $this->getLang('assign_del') . '</a></td>';
14675494ca1SAnna Dabrowska                $form .= '</tr>';
14775494ca1SAnna Dabrowska            }
148ea12645dSAnna Dabrowska        }
14975494ca1SAnna Dabrowska
15075494ca1SAnna Dabrowska        // new assignment form
15175494ca1SAnna Dabrowska        $form .= '<tr>';
15275494ca1SAnna Dabrowska        $form .= '<td><input type="text" name="assignment[pattern]" /></td>';
15375494ca1SAnna Dabrowska        $form .= '<td><input type="text" name="assignment[user]" /></td>';
154d0dae647SAnna Dabrowska        $form .= '<td><input type="text" name="assignment[subject]" /></td>';
15575494ca1SAnna Dabrowska        $form .= '<td><textarea cols="30" rows="4" name="assignment[message]"></textarea></td>';
156*c6f9d3d5SAnna Dabrowska        $form .= '<td><button type="submit" name="action" value="add">' .
157*c6f9d3d5SAnna Dabrowska            $this->getLang('assign_add') . '</button></td>';
15875494ca1SAnna Dabrowska        $form .= '</tr>';
15975494ca1SAnna Dabrowska
16075494ca1SAnna Dabrowska        $form .= '</table>';
16175494ca1SAnna Dabrowska        $form .= '</form>';
16275494ca1SAnna Dabrowska
16375494ca1SAnna Dabrowska        return $form;
16475494ca1SAnna Dabrowska    }
16575494ca1SAnna Dabrowska
166*c6f9d3d5SAnna Dabrowska    protected function recommendMakeTOC($month)
167*c6f9d3d5SAnna Dabrowska    {
16875494ca1SAnna Dabrowska        global $ID;
16975494ca1SAnna Dabrowska        return html_mktocitem('?do=admin&page=recommend&id=' . $ID . '&rec_month=' . $month, $month, 2, '');
1702937e9a5SAnna Dabrowska    }
171cbc3cee5SAdrian Lang}
172