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