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