xref: /plugin/recommend/admin.php (revision 75494ca1620e263b1ca1a80c8e4863ca3326371d)
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;
8*75494ca1SAnna 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();
20*75494ca1SAnna Dabrowska
21*75494ca1SAnna Dabrowska        global $INPUT;
22*75494ca1SAnna Dabrowska        global $ID;
23*75494ca1SAnna Dabrowska
24*75494ca1SAnna Dabrowska        /** @var helper_plugin_recommend_assignment $assignmentsHelper */
25*75494ca1SAnna Dabrowska        $assignmentsHelper = plugin_load('helper', 'recommend_assignment');
26*75494ca1SAnna Dabrowska
27*75494ca1SAnna Dabrowska        if ($INPUT->str('action') && $INPUT->arr('assignment') && checkSecurityToken()) {
28*75494ca1SAnna Dabrowska            $assignment = $INPUT->arr('assignment');
29*75494ca1SAnna Dabrowska                if ($INPUT->str('action') === 'delete') {
30*75494ca1SAnna Dabrowska                    $ok = $assignmentsHelper->removeAssignment($assignment);
31*75494ca1SAnna Dabrowska                    if (!$ok) {
32*75494ca1SAnna Dabrowska                        msg('failed to remove pattern', -1);
33*75494ca1SAnna Dabrowska                    }
34*75494ca1SAnna Dabrowska                } elseif ($INPUT->str('action') === 'add') {
35*75494ca1SAnna Dabrowska                    if ($assignment['pattern'][0] == '/') {
36*75494ca1SAnna Dabrowska                        if (@preg_match($assignment['pattern'], null) === false) {
37*75494ca1SAnna Dabrowska                            msg('Invalid regular expression. Pattern not saved', -1);
38*75494ca1SAnna Dabrowska                        } else {
39*75494ca1SAnna Dabrowska                            $ok = $assignmentsHelper->addAssignment($assignment);
40*75494ca1SAnna Dabrowska                            if (!$ok) {
41*75494ca1SAnna Dabrowska                                msg('failed to add pattern', -1);
42*75494ca1SAnna Dabrowska                            }
43*75494ca1SAnna Dabrowska                        }
44*75494ca1SAnna Dabrowska                    } else {
45*75494ca1SAnna Dabrowska                        $ok = $assignmentsHelper->addAssignment($assignment);
46*75494ca1SAnna Dabrowska                        if (!$ok) {
47*75494ca1SAnna Dabrowska                            msg('failed to add pattern', -1);
48*75494ca1SAnna Dabrowska                        }
49*75494ca1SAnna Dabrowska                    }
50*75494ca1SAnna Dabrowska
51*75494ca1SAnna Dabrowska            }
52*75494ca1SAnna Dabrowska
53*75494ca1SAnna Dabrowska            send_redirect(wl($ID, array('do' => 'admin', 'page' => 'recommend'), true, '&'));
54*75494ca1SAnna Dabrowska        }
55cbc3cee5SAdrian Lang    }
56cbc3cee5SAdrian Lang
572937e9a5SAnna Dabrowska    public function getTOC() {
58*75494ca1SAnna Dabrowska        return array_map([$this, 'recommendMakeTOC'], $this->logs);
59cbc3cee5SAdrian Lang    }
60cbc3cee5SAdrian Lang
612937e9a5SAnna Dabrowska    public function html() {
62*75494ca1SAnna Dabrowska        echo $this->locale_xhtml('intro');
63*75494ca1SAnna Dabrowska
64cbc3cee5SAdrian Lang        if (!$this->logs) {
65cbc3cee5SAdrian Lang            echo 'No recommendations.';
66cbc3cee5SAdrian Lang            return;
67cbc3cee5SAdrian Lang        }
68cbc3cee5SAdrian Lang        if (!$this->entries) {
69cbc3cee5SAdrian Lang            echo 'No recommendations were made in ' . $this->month . '.';
70cbc3cee5SAdrian Lang            return;
71cbc3cee5SAdrian Lang        }
72*75494ca1SAnna Dabrowska
73*75494ca1SAnna Dabrowska        echo '<h2>' . $this->getLang('headline_snippets') . '</h2>';
74*75494ca1SAnna Dabrowska
75*75494ca1SAnna Dabrowska        echo $this->getForm();
76*75494ca1SAnna Dabrowska
77*75494ca1SAnna Dabrowska        echo '<h2>' . $this->getLang('headline_logs') . '</h2>';
78cbc3cee5SAdrian Lang        echo '<p>In ' . $this->month . ', your users made the following ' . count($this->entries) . ' recommendations:</p>';
79cbc3cee5SAdrian Lang        echo '<ul>';
80cbc3cee5SAdrian Lang        foreach (array_reverse($this->entries) as $entry) {
81d462c752SAdrian Lang            echo "<li>" . hsc($entry) . "</li>";
82cbc3cee5SAdrian Lang        }
83cbc3cee5SAdrian Lang        echo '</ul>';
84cbc3cee5SAdrian Lang    }
85cbc3cee5SAdrian Lang
86*75494ca1SAnna Dabrowska    protected function getForm()
87*75494ca1SAnna Dabrowska    {
88cbc3cee5SAdrian Lang        global $ID;
89*75494ca1SAnna Dabrowska
90*75494ca1SAnna Dabrowska        $assignments = helper_plugin_recommend_assignment::getAssignments();
91*75494ca1SAnna Dabrowska
92*75494ca1SAnna Dabrowska        $form = '<form action="' . wl($ID) . '" action="post">';
93*75494ca1SAnna Dabrowska        $form .= '<input type="hidden" name="do" value="admin" />';
94*75494ca1SAnna Dabrowska        $form .= '<input type="hidden" name="page" value="recommend" />';
95*75494ca1SAnna Dabrowska        $form .= '<input type="hidden" name="sectok" value="' . getSecurityToken() . '" />';
96*75494ca1SAnna Dabrowska        $form .= '<table class="inline">';
97*75494ca1SAnna Dabrowska
98*75494ca1SAnna Dabrowska        // header
99*75494ca1SAnna Dabrowska        $form .= '<tr>';
100*75494ca1SAnna Dabrowska        $form .= '<th>' . $this->getLang('assign_pattern') . '</th>';
101*75494ca1SAnna Dabrowska        $form .= '<th>' . $this->getLang('assign_user') . '</th>';
102*75494ca1SAnna Dabrowska        $form .= '<th>' . $this->getLang('assign_message') . '</th>';
103*75494ca1SAnna Dabrowska        $form .= '<th></th>';
104*75494ca1SAnna Dabrowska        $form .= '</tr>';
105*75494ca1SAnna Dabrowska
106*75494ca1SAnna Dabrowska        // existing assignments
107*75494ca1SAnna Dabrowska        foreach ($assignments as $assignment) {
108*75494ca1SAnna Dabrowska            $pattern = $assignment['pattern'];
109*75494ca1SAnna Dabrowska            $user = $assignment['user'];
110*75494ca1SAnna Dabrowska            $message = $assignment['message'];
111*75494ca1SAnna Dabrowska
112*75494ca1SAnna Dabrowska            $link = wl(
113*75494ca1SAnna Dabrowska                $ID,
114*75494ca1SAnna Dabrowska                [
115*75494ca1SAnna Dabrowska                    'do' => 'admin',
116*75494ca1SAnna Dabrowska                    'page' => 'recommend',
117*75494ca1SAnna Dabrowska                    'action' => 'delete',
118*75494ca1SAnna Dabrowska                    'sectok' => getSecurityToken(),
119*75494ca1SAnna Dabrowska                    'assignment[pattern]' => $pattern,
120*75494ca1SAnna Dabrowska                    'assignment[user]' => $user,
121*75494ca1SAnna Dabrowska                    'assignment[message]' => $message,
122*75494ca1SAnna Dabrowska                ]
123*75494ca1SAnna Dabrowska            );
124*75494ca1SAnna Dabrowska
125*75494ca1SAnna Dabrowska            $form .= '<tr>';
126*75494ca1SAnna Dabrowska            $form .= '<td>' . hsc($pattern) . '</td>';
127*75494ca1SAnna Dabrowska            $form .= '<td>' . hsc($user) . '</td>';
128*75494ca1SAnna Dabrowska            $form .= '<td>' . $message . '</td>';
129*75494ca1SAnna Dabrowska            $form .= '<td><a class="deletePattern" href="' . $link . '">' . $this->getLang('assign_del') . '</a></td>';
130*75494ca1SAnna Dabrowska            $form .= '</tr>';
131*75494ca1SAnna Dabrowska        }
132*75494ca1SAnna Dabrowska
133*75494ca1SAnna Dabrowska        // new assignment form
134*75494ca1SAnna Dabrowska        $form .= '<tr>';
135*75494ca1SAnna Dabrowska        $form .= '<td><input type="text" name="assignment[pattern]" /></td>';
136*75494ca1SAnna Dabrowska        $form .= '<td><input type="text" name="assignment[user]" /></td>';
137*75494ca1SAnna Dabrowska        $form .= '<td><textarea cols="30" rows="4" name="assignment[message]"></textarea></td>';
138*75494ca1SAnna Dabrowska        $form .= '<td><button type="submit" name="action" value="add">' . $this->getLang('assign_add') . '</button></td>';
139*75494ca1SAnna Dabrowska        $form .= '</tr>';
140*75494ca1SAnna Dabrowska
141*75494ca1SAnna Dabrowska        $form .= '</table>';
142*75494ca1SAnna Dabrowska        $form .= '</form>';
143*75494ca1SAnna Dabrowska
144*75494ca1SAnna Dabrowska        return $form;
145*75494ca1SAnna Dabrowska    }
146*75494ca1SAnna Dabrowska
147*75494ca1SAnna Dabrowska    protected function recommendMakeTOC($month) {
148*75494ca1SAnna Dabrowska        global $ID;
149*75494ca1SAnna Dabrowska        return html_mktocitem('?do=admin&page=recommend&id=' . $ID . '&rec_month=' . $month, $month, 2, '');
1502937e9a5SAnna Dabrowska    }
151cbc3cee5SAdrian Lang}
152