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); 18cbc3cee5SAdrian Lang $this->entries = $log->getEntries(); 192937e9a5SAnna Dabrowska $this->logs = $log->getLogs(); 2075494ca1SAnna Dabrowska 2175494ca1SAnna Dabrowska global $INPUT; 2275494ca1SAnna Dabrowska global $ID; 2375494ca1SAnna Dabrowska 2475494ca1SAnna Dabrowska /** @var helper_plugin_recommend_assignment $assignmentsHelper */ 2575494ca1SAnna Dabrowska $assignmentsHelper = plugin_load('helper', 'recommend_assignment'); 2675494ca1SAnna Dabrowska 2775494ca1SAnna Dabrowska if ($INPUT->str('action') && $INPUT->arr('assignment') && checkSecurityToken()) { 2875494ca1SAnna Dabrowska $assignment = $INPUT->arr('assignment'); 2975494ca1SAnna Dabrowska if ($INPUT->str('action') === 'delete') { 3075494ca1SAnna Dabrowska $ok = $assignmentsHelper->removeAssignment($assignment); 3175494ca1SAnna Dabrowska if (!$ok) { 3275494ca1SAnna Dabrowska msg('failed to remove pattern', -1); 3375494ca1SAnna Dabrowska } 3475494ca1SAnna Dabrowska } elseif ($INPUT->str('action') === 'add') { 3575494ca1SAnna Dabrowska if ($assignment['pattern'][0] == '/') { 3675494ca1SAnna Dabrowska if (@preg_match($assignment['pattern'], null) === false) { 3775494ca1SAnna Dabrowska msg('Invalid regular expression. Pattern not saved', -1); 3875494ca1SAnna Dabrowska } else { 3975494ca1SAnna Dabrowska $ok = $assignmentsHelper->addAssignment($assignment); 4075494ca1SAnna Dabrowska if (!$ok) { 4175494ca1SAnna Dabrowska msg('failed to add pattern', -1); 4275494ca1SAnna Dabrowska } 4375494ca1SAnna Dabrowska } 4475494ca1SAnna Dabrowska } else { 4575494ca1SAnna Dabrowska $ok = $assignmentsHelper->addAssignment($assignment); 4675494ca1SAnna Dabrowska if (!$ok) { 4775494ca1SAnna Dabrowska msg('failed to add pattern', -1); 4875494ca1SAnna Dabrowska } 4975494ca1SAnna Dabrowska } 5075494ca1SAnna Dabrowska 5175494ca1SAnna Dabrowska } 5275494ca1SAnna Dabrowska 5375494ca1SAnna Dabrowska send_redirect(wl($ID, array('do' => 'admin', 'page' => 'recommend'), true, '&')); 5475494ca1SAnna Dabrowska } 55cbc3cee5SAdrian Lang } 56cbc3cee5SAdrian Lang 572937e9a5SAnna Dabrowska public function getTOC() { 5875494ca1SAnna Dabrowska return array_map([$this, 'recommendMakeTOC'], $this->logs); 59cbc3cee5SAdrian Lang } 60cbc3cee5SAdrian Lang 612937e9a5SAnna Dabrowska public function html() { 6275494ca1SAnna Dabrowska echo $this->locale_xhtml('intro'); 6375494ca1SAnna Dabrowska 64cbc3cee5SAdrian Lang if (!$this->logs) { 65cbc3cee5SAdrian Lang echo 'No recommendations.'; 66cbc3cee5SAdrian Lang } 67cbc3cee5SAdrian Lang if (!$this->entries) { 68cbc3cee5SAdrian Lang echo 'No recommendations were made in ' . $this->month . '.'; 69cbc3cee5SAdrian Lang } 7075494ca1SAnna Dabrowska 7175494ca1SAnna Dabrowska echo '<h2>' . $this->getLang('headline_snippets') . '</h2>'; 7275494ca1SAnna Dabrowska 7375494ca1SAnna Dabrowska echo $this->getForm(); 7475494ca1SAnna Dabrowska 7575494ca1SAnna Dabrowska echo '<h2>' . $this->getLang('headline_logs') . '</h2>'; 76cbc3cee5SAdrian Lang echo '<p>In ' . $this->month . ', your users made the following ' . count($this->entries) . ' recommendations:</p>'; 77cbc3cee5SAdrian Lang echo '<ul>'; 78cbc3cee5SAdrian Lang foreach (array_reverse($this->entries) as $entry) { 79d462c752SAdrian Lang echo "<li>" . hsc($entry) . "</li>"; 80cbc3cee5SAdrian Lang } 81cbc3cee5SAdrian Lang echo '</ul>'; 82cbc3cee5SAdrian Lang } 83cbc3cee5SAdrian Lang 8475494ca1SAnna Dabrowska protected function getForm() 8575494ca1SAnna Dabrowska { 86cbc3cee5SAdrian Lang global $ID; 8775494ca1SAnna Dabrowska 8875494ca1SAnna Dabrowska $assignments = helper_plugin_recommend_assignment::getAssignments(); 8975494ca1SAnna Dabrowska 9075494ca1SAnna Dabrowska $form = '<form action="' . wl($ID) . '" action="post">'; 9175494ca1SAnna Dabrowska $form .= '<input type="hidden" name="do" value="admin" />'; 9275494ca1SAnna Dabrowska $form .= '<input type="hidden" name="page" value="recommend" />'; 9375494ca1SAnna Dabrowska $form .= '<input type="hidden" name="sectok" value="' . getSecurityToken() . '" />'; 9475494ca1SAnna Dabrowska $form .= '<table class="inline">'; 9575494ca1SAnna Dabrowska 9675494ca1SAnna Dabrowska // header 9775494ca1SAnna Dabrowska $form .= '<tr>'; 9875494ca1SAnna Dabrowska $form .= '<th>' . $this->getLang('assign_pattern') . '</th>'; 9975494ca1SAnna Dabrowska $form .= '<th>' . $this->getLang('assign_user') . '</th>'; 100*d0dae647SAnna Dabrowska $form .= '<th>' . $this->getLang('assign_subject') . '</th>'; 10175494ca1SAnna Dabrowska $form .= '<th>' . $this->getLang('assign_message') . '</th>'; 10275494ca1SAnna Dabrowska $form .= '<th></th>'; 10375494ca1SAnna Dabrowska $form .= '</tr>'; 10475494ca1SAnna Dabrowska 10575494ca1SAnna Dabrowska // existing assignments 10675494ca1SAnna Dabrowska foreach ($assignments as $assignment) { 10775494ca1SAnna Dabrowska $pattern = $assignment['pattern']; 10875494ca1SAnna Dabrowska $user = $assignment['user']; 109*d0dae647SAnna Dabrowska $subject = $assignment['subject']; 11075494ca1SAnna Dabrowska $message = $assignment['message']; 11175494ca1SAnna Dabrowska 11275494ca1SAnna Dabrowska $link = wl( 11375494ca1SAnna Dabrowska $ID, 11475494ca1SAnna Dabrowska [ 11575494ca1SAnna Dabrowska 'do' => 'admin', 11675494ca1SAnna Dabrowska 'page' => 'recommend', 11775494ca1SAnna Dabrowska 'action' => 'delete', 11875494ca1SAnna Dabrowska 'sectok' => getSecurityToken(), 11975494ca1SAnna Dabrowska 'assignment[pattern]' => $pattern, 12075494ca1SAnna Dabrowska 'assignment[user]' => $user, 121*d0dae647SAnna Dabrowska 'assignment[subject]' => $subject, 12275494ca1SAnna Dabrowska 'assignment[message]' => $message, 12375494ca1SAnna Dabrowska ] 12475494ca1SAnna Dabrowska ); 12575494ca1SAnna Dabrowska 12675494ca1SAnna Dabrowska $form .= '<tr>'; 12775494ca1SAnna Dabrowska $form .= '<td>' . hsc($pattern) . '</td>'; 12875494ca1SAnna Dabrowska $form .= '<td>' . hsc($user) . '</td>'; 129*d0dae647SAnna Dabrowska $form .= '<td>' . hsc($subject) . '</td>'; 130b8b86b6cSAnna Dabrowska $form .= '<td>' . nl2br($message) . '</td>'; 13175494ca1SAnna Dabrowska $form .= '<td><a class="deletePattern" href="' . $link . '">' . $this->getLang('assign_del') . '</a></td>'; 13275494ca1SAnna Dabrowska $form .= '</tr>'; 13375494ca1SAnna Dabrowska } 13475494ca1SAnna Dabrowska 13575494ca1SAnna Dabrowska // new assignment form 13675494ca1SAnna Dabrowska $form .= '<tr>'; 13775494ca1SAnna Dabrowska $form .= '<td><input type="text" name="assignment[pattern]" /></td>'; 13875494ca1SAnna Dabrowska $form .= '<td><input type="text" name="assignment[user]" /></td>'; 139*d0dae647SAnna Dabrowska $form .= '<td><input type="text" name="assignment[subject]" /></td>'; 14075494ca1SAnna Dabrowska $form .= '<td><textarea cols="30" rows="4" name="assignment[message]"></textarea></td>'; 14175494ca1SAnna Dabrowska $form .= '<td><button type="submit" name="action" value="add">' . $this->getLang('assign_add') . '</button></td>'; 14275494ca1SAnna Dabrowska $form .= '</tr>'; 14375494ca1SAnna Dabrowska 14475494ca1SAnna Dabrowska $form .= '</table>'; 14575494ca1SAnna Dabrowska $form .= '</form>'; 14675494ca1SAnna Dabrowska 14775494ca1SAnna Dabrowska return $form; 14875494ca1SAnna Dabrowska } 14975494ca1SAnna Dabrowska 15075494ca1SAnna Dabrowska protected function recommendMakeTOC($month) { 15175494ca1SAnna Dabrowska global $ID; 15275494ca1SAnna Dabrowska return html_mktocitem('?do=admin&page=recommend&id=' . $ID . '&rec_month=' . $month, $month, 2, ''); 1532937e9a5SAnna Dabrowska } 154cbc3cee5SAdrian Lang} 155