187106851SAnna Dabrowska<?php 2910e7e15SAnna Dabrowska 3910e7e15SAnna Dabrowskause dokuwiki\plugin\structpublish\meta\Assignments; 4*e31c94d7SAndreas Gohruse dokuwiki\plugin\structpublish\meta\Constants; 5910e7e15SAnna Dabrowska 687106851SAnna Dabrowska/** 787106851SAnna Dabrowska * DokuWiki Plugin structpublish (Admin Component) 887106851SAnna Dabrowska * 987106851SAnna Dabrowska * @license GPL 2 http://www.gnu.org/licenses/gpl-2.0.html 1087106851SAnna Dabrowska * @author Anna Dabrowska <dokuwiki@cosmocode.de> 1187106851SAnna Dabrowska */ 1287106851SAnna Dabrowska 1387106851SAnna Dabrowskaclass admin_plugin_structpublish extends DokuWiki_Admin_Plugin 1487106851SAnna Dabrowska{ 1587106851SAnna Dabrowska /** 1687106851SAnna Dabrowska * @return int sort number in admin menu 1787106851SAnna Dabrowska */ 1887106851SAnna Dabrowska public function getMenuSort() 1987106851SAnna Dabrowska { 2087106851SAnna Dabrowska return 555; 2187106851SAnna Dabrowska } 2287106851SAnna Dabrowska 2387106851SAnna Dabrowska /** 2487106851SAnna Dabrowska * @return bool true if only access for superuser, false is for superusers and moderators 2587106851SAnna Dabrowska */ 2687106851SAnna Dabrowska public function forAdminOnly() 2787106851SAnna Dabrowska { 2887106851SAnna Dabrowska return false; 2987106851SAnna Dabrowska } 3087106851SAnna Dabrowska 3187106851SAnna Dabrowska /** 32910e7e15SAnna Dabrowska * Based on struct pattern assignments 3387106851SAnna Dabrowska */ 3487106851SAnna Dabrowska public function handle() 3587106851SAnna Dabrowska { 36910e7e15SAnna Dabrowska global $INPUT; 37910e7e15SAnna Dabrowska global $ID; 3887106851SAnna Dabrowska 39910e7e15SAnna Dabrowska try { 40910e7e15SAnna Dabrowska $assignments = Assignments::getInstance(); 41910e7e15SAnna Dabrowska } catch (Exception $e) { 42910e7e15SAnna Dabrowska msg($e->getMessage(), -1); 43910e7e15SAnna Dabrowska return false; 44910e7e15SAnna Dabrowska } 45910e7e15SAnna Dabrowska 46910e7e15SAnna Dabrowska if ($INPUT->str('action') && $INPUT->arr('assignment') && checkSecurityToken()) { 47910e7e15SAnna Dabrowska $assignment = $INPUT->arr('assignment'); 48910e7e15SAnna Dabrowska if (!blank($assignment['pattern']) && !blank($assignment['status'])) { 49910e7e15SAnna Dabrowska if ($INPUT->str('action') === 'delete') { 50910e7e15SAnna Dabrowska $ok = $assignments->removePattern($assignment['pattern'], $assignment['user'], $assignment['status']); 51910e7e15SAnna Dabrowska if (!$ok) msg('failed to remove pattern', -1); 52910e7e15SAnna Dabrowska } elseif ($INPUT->str('action') === 'add') { 53910e7e15SAnna Dabrowska if ($assignment['pattern'][0] == '/') { 54910e7e15SAnna Dabrowska if (@preg_match($assignment['pattern'], null) === false) { 55910e7e15SAnna Dabrowska msg('Invalid regular expression. Pattern not saved', -1); 56910e7e15SAnna Dabrowska } else { 57910e7e15SAnna Dabrowska $ok = $assignments->addPattern($assignment['pattern'], $assignment['user'], $assignment['status']); 58910e7e15SAnna Dabrowska if (!$ok) msg('failed to add pattern', -1); 59910e7e15SAnna Dabrowska } 60910e7e15SAnna Dabrowska } else { 61910e7e15SAnna Dabrowska $ok = $assignments->addPattern($assignment['pattern'],$assignment['user'], $assignment['status']); 62910e7e15SAnna Dabrowska if (!$ok) msg('failed to add pattern', -1); 63910e7e15SAnna Dabrowska } 64910e7e15SAnna Dabrowska } 65910e7e15SAnna Dabrowska } 66910e7e15SAnna Dabrowska 67910e7e15SAnna Dabrowska send_redirect(wl($ID, array('do' => 'admin', 'page' => 'structpublish'), true, '&')); 68910e7e15SAnna Dabrowska } 6987106851SAnna Dabrowska } 7087106851SAnna Dabrowska 7187106851SAnna Dabrowska /** 7287106851SAnna Dabrowska * Render HTML output, e.g. helpful text and a form 7387106851SAnna Dabrowska */ 7487106851SAnna Dabrowska public function html() 7587106851SAnna Dabrowska { 7687106851SAnna Dabrowska ptln('<h1>' . $this->getLang('menu') . '</h1>'); 77910e7e15SAnna Dabrowska 78910e7e15SAnna Dabrowska global $ID; 79910e7e15SAnna Dabrowska 80910e7e15SAnna Dabrowska try { 81910e7e15SAnna Dabrowska $assignments = Assignments::getInstance(); 82910e7e15SAnna Dabrowska } catch (Exception $e) { 83910e7e15SAnna Dabrowska msg($e->getMessage(), -1); 84910e7e15SAnna Dabrowska return false; 85910e7e15SAnna Dabrowska } 86910e7e15SAnna Dabrowska $list = $assignments->getAllPatterns(); 87910e7e15SAnna Dabrowska 88910e7e15SAnna Dabrowska echo '<form action="' . wl($ID) . '" action="post">'; 89910e7e15SAnna Dabrowska echo '<input type="hidden" name="do" value="admin" />'; 90910e7e15SAnna Dabrowska echo '<input type="hidden" name="page" value="structpublish" />'; 91910e7e15SAnna Dabrowska echo '<input type="hidden" name="sectok" value="' . getSecurityToken() . '" />'; 92910e7e15SAnna Dabrowska echo '<table class="inline">'; 93910e7e15SAnna Dabrowska 94910e7e15SAnna Dabrowska // header 95910e7e15SAnna Dabrowska echo '<tr>'; 96910e7e15SAnna Dabrowska echo '<th>' . $this->getLang('assign_pattern') . '</th>'; 97910e7e15SAnna Dabrowska echo '<th>' . $this->getLang('assign_status') . '</th>'; 98910e7e15SAnna Dabrowska echo '<th>' . $this->getLang('assign_user') . '</th>'; 99910e7e15SAnna Dabrowska echo '<th></th>'; 100910e7e15SAnna Dabrowska echo '</tr>'; 101910e7e15SAnna Dabrowska 102910e7e15SAnna Dabrowska // existing assignments 103910e7e15SAnna Dabrowska foreach ($list as $assignment) { 104910e7e15SAnna Dabrowska $pattern = $assignment['pattern']; 105910e7e15SAnna Dabrowska $status = $assignment['status']; 106910e7e15SAnna Dabrowska $user = $assignment['user']; 107910e7e15SAnna Dabrowska 108910e7e15SAnna Dabrowska $link = wl( 109910e7e15SAnna Dabrowska $ID, 110910e7e15SAnna Dabrowska [ 111910e7e15SAnna Dabrowska 'do' => 'admin', 112910e7e15SAnna Dabrowska 'page' => 'structpublish', 113910e7e15SAnna Dabrowska 'action' => 'delete', 114910e7e15SAnna Dabrowska 'sectok' => getSecurityToken(), 115910e7e15SAnna Dabrowska 'assignment[status]' => $status, 116910e7e15SAnna Dabrowska 'assignment[pattern]' => $pattern, 117910e7e15SAnna Dabrowska 'assignment[user]' => $user, 118910e7e15SAnna Dabrowska ] 119910e7e15SAnna Dabrowska ); 120910e7e15SAnna Dabrowska 121910e7e15SAnna Dabrowska echo '<tr>'; 122910e7e15SAnna Dabrowska echo '<td>' . hsc($pattern) . '</td>'; 123910e7e15SAnna Dabrowska echo '<td>' . hsc($status) . '</td>'; 124910e7e15SAnna Dabrowska echo '<td>' . hsc($user) . '</td>'; 125910e7e15SAnna Dabrowska echo '<td><a class="deleteSchema" href="' . $link . '">' . $this->getLang('assign_del') . '</a></td>'; 126910e7e15SAnna Dabrowska echo '</tr>'; 127910e7e15SAnna Dabrowska } 128910e7e15SAnna Dabrowska 129910e7e15SAnna Dabrowska // new assignment form 130910e7e15SAnna Dabrowska echo '<tr>'; 131910e7e15SAnna Dabrowska echo '<td><input type="text" name="assignment[pattern]" /></td>'; 132910e7e15SAnna Dabrowska echo '<td>'; 133910e7e15SAnna Dabrowska echo '<select name="assignment[status]">'; 134*e31c94d7SAndreas Gohr foreach ([Constants::ACTION_APPROVE, Constants::ACTION_PUBLISH] as $status) { 135910e7e15SAnna Dabrowska echo '<option value="' . $status . '">' . $status . '</option>'; 136910e7e15SAnna Dabrowska } 137910e7e15SAnna Dabrowska echo '</select>'; 138910e7e15SAnna Dabrowska echo '</td>'; 139910e7e15SAnna Dabrowska echo '<td><input type="text" name="assignment[user]" /></td>'; 140910e7e15SAnna Dabrowska echo '<td><button type="submit" name="action" value="add">' . $this->getLang('assign_add') . '</button></td>'; 141910e7e15SAnna Dabrowska echo '</tr>'; 142910e7e15SAnna Dabrowska 143910e7e15SAnna Dabrowska echo '</table>'; 144910e7e15SAnna Dabrowska echo '</form>'; 14587106851SAnna Dabrowska } 14687106851SAnna Dabrowska} 14787106851SAnna Dabrowska 148