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