187106851SAnna Dabrowska<?php 2*910e7e15SAnna Dabrowska 3*910e7e15SAnna Dabrowskause dokuwiki\plugin\structpublish\meta\Assignments; 4*910e7e15SAnna Dabrowska 587106851SAnna Dabrowska/** 687106851SAnna Dabrowska * DokuWiki Plugin structpublish (Admin Component) 787106851SAnna Dabrowska * 887106851SAnna Dabrowska * @license GPL 2 http://www.gnu.org/licenses/gpl-2.0.html 987106851SAnna Dabrowska * @author Anna Dabrowska <dokuwiki@cosmocode.de> 1087106851SAnna Dabrowska */ 1187106851SAnna Dabrowska 1287106851SAnna Dabrowskaclass admin_plugin_structpublish extends DokuWiki_Admin_Plugin 1387106851SAnna Dabrowska{ 1487106851SAnna Dabrowska /** 1587106851SAnna Dabrowska * @return int sort number in admin menu 1687106851SAnna Dabrowska */ 1787106851SAnna Dabrowska public function getMenuSort() 1887106851SAnna Dabrowska { 1987106851SAnna Dabrowska return 555; 2087106851SAnna Dabrowska } 2187106851SAnna Dabrowska 2287106851SAnna Dabrowska /** 2387106851SAnna Dabrowska * @return bool true if only access for superuser, false is for superusers and moderators 2487106851SAnna Dabrowska */ 2587106851SAnna Dabrowska public function forAdminOnly() 2687106851SAnna Dabrowska { 2787106851SAnna Dabrowska return false; 2887106851SAnna Dabrowska } 2987106851SAnna Dabrowska 3087106851SAnna Dabrowska /** 31*910e7e15SAnna Dabrowska * Based on struct pattern assignments 3287106851SAnna Dabrowska */ 3387106851SAnna Dabrowska public function handle() 3487106851SAnna Dabrowska { 35*910e7e15SAnna Dabrowska global $INPUT; 36*910e7e15SAnna Dabrowska global $ID; 3787106851SAnna Dabrowska 38*910e7e15SAnna Dabrowska try { 39*910e7e15SAnna Dabrowska $assignments = Assignments::getInstance(); 40*910e7e15SAnna Dabrowska } catch (Exception $e) { 41*910e7e15SAnna Dabrowska msg($e->getMessage(), -1); 42*910e7e15SAnna Dabrowska return false; 43*910e7e15SAnna Dabrowska } 44*910e7e15SAnna Dabrowska 45*910e7e15SAnna Dabrowska if ($INPUT->str('action') && $INPUT->arr('assignment') && checkSecurityToken()) { 46*910e7e15SAnna Dabrowska $assignment = $INPUT->arr('assignment'); 47*910e7e15SAnna Dabrowska if (!blank($assignment['pattern']) && !blank($assignment['status'])) { 48*910e7e15SAnna Dabrowska if ($INPUT->str('action') === 'delete') { 49*910e7e15SAnna Dabrowska $ok = $assignments->removePattern($assignment['pattern'], $assignment['user'], $assignment['status']); 50*910e7e15SAnna Dabrowska if (!$ok) msg('failed to remove pattern', -1); 51*910e7e15SAnna Dabrowska } elseif ($INPUT->str('action') === 'add') { 52*910e7e15SAnna Dabrowska if ($assignment['pattern'][0] == '/') { 53*910e7e15SAnna Dabrowska if (@preg_match($assignment['pattern'], null) === false) { 54*910e7e15SAnna Dabrowska msg('Invalid regular expression. Pattern not saved', -1); 55*910e7e15SAnna Dabrowska } else { 56*910e7e15SAnna Dabrowska $ok = $assignments->addPattern($assignment['pattern'], $assignment['user'], $assignment['status']); 57*910e7e15SAnna Dabrowska if (!$ok) msg('failed to add pattern', -1); 58*910e7e15SAnna Dabrowska } 59*910e7e15SAnna Dabrowska } else { 60*910e7e15SAnna Dabrowska $ok = $assignments->addPattern($assignment['pattern'],$assignment['user'], $assignment['status']); 61*910e7e15SAnna Dabrowska if (!$ok) msg('failed to add pattern', -1); 62*910e7e15SAnna Dabrowska } 63*910e7e15SAnna Dabrowska } 64*910e7e15SAnna Dabrowska } 65*910e7e15SAnna Dabrowska 66*910e7e15SAnna Dabrowska send_redirect(wl($ID, array('do' => 'admin', 'page' => 'structpublish'), true, '&')); 67*910e7e15SAnna Dabrowska } 6887106851SAnna Dabrowska } 6987106851SAnna Dabrowska 7087106851SAnna Dabrowska /** 7187106851SAnna Dabrowska * Render HTML output, e.g. helpful text and a form 7287106851SAnna Dabrowska */ 7387106851SAnna Dabrowska public function html() 7487106851SAnna Dabrowska { 7587106851SAnna Dabrowska ptln('<h1>' . $this->getLang('menu') . '</h1>'); 76*910e7e15SAnna Dabrowska 77*910e7e15SAnna Dabrowska global $ID; 78*910e7e15SAnna Dabrowska 79*910e7e15SAnna Dabrowska try { 80*910e7e15SAnna Dabrowska $assignments = Assignments::getInstance(); 81*910e7e15SAnna Dabrowska } catch (Exception $e) { 82*910e7e15SAnna Dabrowska msg($e->getMessage(), -1); 83*910e7e15SAnna Dabrowska return false; 84*910e7e15SAnna Dabrowska } 85*910e7e15SAnna Dabrowska $list = $assignments->getAllPatterns(); 86*910e7e15SAnna Dabrowska 87*910e7e15SAnna Dabrowska echo '<form action="' . wl($ID) . '" action="post">'; 88*910e7e15SAnna Dabrowska echo '<input type="hidden" name="do" value="admin" />'; 89*910e7e15SAnna Dabrowska echo '<input type="hidden" name="page" value="structpublish" />'; 90*910e7e15SAnna Dabrowska echo '<input type="hidden" name="sectok" value="' . getSecurityToken() . '" />'; 91*910e7e15SAnna Dabrowska echo '<table class="inline">'; 92*910e7e15SAnna Dabrowska 93*910e7e15SAnna Dabrowska // header 94*910e7e15SAnna Dabrowska echo '<tr>'; 95*910e7e15SAnna Dabrowska echo '<th>' . $this->getLang('assign_pattern') . '</th>'; 96*910e7e15SAnna Dabrowska echo '<th>' . $this->getLang('assign_status') . '</th>'; 97*910e7e15SAnna Dabrowska echo '<th>' . $this->getLang('assign_user') . '</th>'; 98*910e7e15SAnna Dabrowska echo '<th></th>'; 99*910e7e15SAnna Dabrowska echo '</tr>'; 100*910e7e15SAnna Dabrowska 101*910e7e15SAnna Dabrowska // existing assignments 102*910e7e15SAnna Dabrowska foreach ($list as $assignment) { 103*910e7e15SAnna Dabrowska $pattern = $assignment['pattern']; 104*910e7e15SAnna Dabrowska $status = $assignment['status']; 105*910e7e15SAnna Dabrowska $user = $assignment['user']; 106*910e7e15SAnna Dabrowska 107*910e7e15SAnna Dabrowska $link = wl( 108*910e7e15SAnna Dabrowska $ID, 109*910e7e15SAnna Dabrowska [ 110*910e7e15SAnna Dabrowska 'do' => 'admin', 111*910e7e15SAnna Dabrowska 'page' => 'structpublish', 112*910e7e15SAnna Dabrowska 'action' => 'delete', 113*910e7e15SAnna Dabrowska 'sectok' => getSecurityToken(), 114*910e7e15SAnna Dabrowska 'assignment[status]' => $status, 115*910e7e15SAnna Dabrowska 'assignment[pattern]' => $pattern, 116*910e7e15SAnna Dabrowska 'assignment[user]' => $user, 117*910e7e15SAnna Dabrowska ] 118*910e7e15SAnna Dabrowska ); 119*910e7e15SAnna Dabrowska 120*910e7e15SAnna Dabrowska echo '<tr>'; 121*910e7e15SAnna Dabrowska echo '<td>' . hsc($pattern) . '</td>'; 122*910e7e15SAnna Dabrowska echo '<td>' . hsc($status) . '</td>'; 123*910e7e15SAnna Dabrowska echo '<td>' . hsc($user) . '</td>'; 124*910e7e15SAnna Dabrowska echo '<td><a class="deleteSchema" href="' . $link . '">' . $this->getLang('assign_del') . '</a></td>'; 125*910e7e15SAnna Dabrowska echo '</tr>'; 126*910e7e15SAnna Dabrowska } 127*910e7e15SAnna Dabrowska 128*910e7e15SAnna Dabrowska // new assignment form 129*910e7e15SAnna Dabrowska echo '<tr>'; 130*910e7e15SAnna Dabrowska echo '<td><input type="text" name="assignment[pattern]" /></td>'; 131*910e7e15SAnna Dabrowska echo '<td>'; 132*910e7e15SAnna Dabrowska echo '<select name="assignment[status]">'; 133*910e7e15SAnna Dabrowska foreach (['approve', 'publish'] as $status) { 134*910e7e15SAnna Dabrowska echo '<option value="' . $status . '">' . $status . '</option>'; 135*910e7e15SAnna Dabrowska } 136*910e7e15SAnna Dabrowska echo '</select>'; 137*910e7e15SAnna Dabrowska echo '</td>'; 138*910e7e15SAnna Dabrowska echo '<td><input type="text" name="assignment[user]" /></td>'; 139*910e7e15SAnna Dabrowska echo '<td><button type="submit" name="action" value="add">' . $this->getLang('assign_add') . '</button></td>'; 140*910e7e15SAnna Dabrowska echo '</tr>'; 141*910e7e15SAnna Dabrowska 142*910e7e15SAnna Dabrowska echo '</table>'; 143*910e7e15SAnna Dabrowska echo '</form>'; 14487106851SAnna Dabrowska } 14587106851SAnna Dabrowska} 14687106851SAnna Dabrowska 147