187106851SAnna Dabrowska<?php 2910e7e15SAnna Dabrowska 3*9ab8cbaeSanndause dokuwiki\Extension\AdminPlugin; 4910e7e15SAnna Dabrowskause dokuwiki\plugin\structpublish\meta\Assignments; 5e31c94d7SAndreas Gohruse dokuwiki\plugin\structpublish\meta\Constants; 6910e7e15SAnna Dabrowska 787106851SAnna Dabrowska/** 887106851SAnna Dabrowska * DokuWiki Plugin structpublish (Admin Component) 987106851SAnna Dabrowska * 1087106851SAnna Dabrowska * @license GPL 2 http://www.gnu.org/licenses/gpl-2.0.html 1187106851SAnna Dabrowska * @author Anna Dabrowska <dokuwiki@cosmocode.de> 1287106851SAnna Dabrowska */ 13*9ab8cbaeSanndaclass admin_plugin_structpublish extends AdminPlugin 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); 438b0ba635SAndreas Gohr return; 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') { 5031e730e1SAnna Dabrowska $ok = $assignments->removePattern( 5131e730e1SAnna Dabrowska $assignment['pattern'], 5231e730e1SAnna Dabrowska $assignment['user'], 5331e730e1SAnna Dabrowska $assignment['status'] 5431e730e1SAnna Dabrowska ); 558b0ba635SAndreas Gohr if (!$ok) { 568b0ba635SAndreas Gohr msg('failed to remove pattern', -1); 578b0ba635SAndreas Gohr } 58910e7e15SAnna Dabrowska } elseif ($INPUT->str('action') === 'add') { 59910e7e15SAnna Dabrowska if ($assignment['pattern'][0] == '/') { 60910e7e15SAnna Dabrowska if (@preg_match($assignment['pattern'], null) === false) { 61910e7e15SAnna Dabrowska msg('Invalid regular expression. Pattern not saved', -1); 62910e7e15SAnna Dabrowska } else { 6331e730e1SAnna Dabrowska $ok = $assignments->addPattern( 6431e730e1SAnna Dabrowska $assignment['pattern'], 6531e730e1SAnna Dabrowska $assignment['user'], 6631e730e1SAnna Dabrowska $assignment['status'] 6731e730e1SAnna Dabrowska ); 688b0ba635SAndreas Gohr if (!$ok) { 698b0ba635SAndreas Gohr msg('failed to add pattern', -1); 708b0ba635SAndreas Gohr } 71910e7e15SAnna Dabrowska } 72910e7e15SAnna Dabrowska } else { 7331e730e1SAnna Dabrowska $ok = $assignments->addPattern( 7431e730e1SAnna Dabrowska $assignment['pattern'], 7531e730e1SAnna Dabrowska $assignment['user'], 7631e730e1SAnna Dabrowska $assignment['status'] 7731e730e1SAnna Dabrowska ); 788b0ba635SAndreas Gohr if (!$ok) { 798b0ba635SAndreas Gohr msg('failed to add pattern', -1); 808b0ba635SAndreas Gohr } 81910e7e15SAnna Dabrowska } 82910e7e15SAnna Dabrowska } 83910e7e15SAnna Dabrowska } 84910e7e15SAnna Dabrowska 85*9ab8cbaeSannda send_redirect(wl($ID, ['do' => 'admin', 'page' => 'structpublish'], true, '&')); 86910e7e15SAnna Dabrowska } 8787106851SAnna Dabrowska } 8887106851SAnna Dabrowska 8987106851SAnna Dabrowska /** 908b0ba635SAndreas Gohr * Render HTML output 9187106851SAnna Dabrowska */ 9287106851SAnna Dabrowska public function html() 9387106851SAnna Dabrowska { 94*9ab8cbaeSannda echo '<h1>' . $this->getLang('menu') . '</h1>'; 95910e7e15SAnna Dabrowska 96910e7e15SAnna Dabrowska global $ID; 97910e7e15SAnna Dabrowska 98910e7e15SAnna Dabrowska try { 99910e7e15SAnna Dabrowska $assignments = Assignments::getInstance(); 100910e7e15SAnna Dabrowska } catch (Exception $e) { 101910e7e15SAnna Dabrowska msg($e->getMessage(), -1); 1028b0ba635SAndreas Gohr return; 103910e7e15SAnna Dabrowska } 104910e7e15SAnna Dabrowska $list = $assignments->getAllPatterns(); 105910e7e15SAnna Dabrowska 106910e7e15SAnna Dabrowska echo '<form action="' . wl($ID) . '" action="post">'; 107910e7e15SAnna Dabrowska echo '<input type="hidden" name="do" value="admin" />'; 108910e7e15SAnna Dabrowska echo '<input type="hidden" name="page" value="structpublish" />'; 109910e7e15SAnna Dabrowska echo '<input type="hidden" name="sectok" value="' . getSecurityToken() . '" />'; 110910e7e15SAnna Dabrowska echo '<table class="inline">'; 111910e7e15SAnna Dabrowska 112910e7e15SAnna Dabrowska // header 113910e7e15SAnna Dabrowska echo '<tr>'; 114910e7e15SAnna Dabrowska echo '<th>' . $this->getLang('assign_pattern') . '</th>'; 115910e7e15SAnna Dabrowska echo '<th>' . $this->getLang('assign_status') . '</th>'; 116910e7e15SAnna Dabrowska echo '<th>' . $this->getLang('assign_user') . '</th>'; 117910e7e15SAnna Dabrowska echo '<th></th>'; 118910e7e15SAnna Dabrowska echo '</tr>'; 119910e7e15SAnna Dabrowska 120910e7e15SAnna Dabrowska // existing assignments 121910e7e15SAnna Dabrowska foreach ($list as $assignment) { 122910e7e15SAnna Dabrowska $pattern = $assignment['pattern']; 123910e7e15SAnna Dabrowska $status = $assignment['status']; 124910e7e15SAnna Dabrowska $user = $assignment['user']; 125910e7e15SAnna Dabrowska 126910e7e15SAnna Dabrowska $link = wl( 127910e7e15SAnna Dabrowska $ID, 128910e7e15SAnna Dabrowska [ 129910e7e15SAnna Dabrowska 'do' => 'admin', 130910e7e15SAnna Dabrowska 'page' => 'structpublish', 131910e7e15SAnna Dabrowska 'action' => 'delete', 132910e7e15SAnna Dabrowska 'sectok' => getSecurityToken(), 133910e7e15SAnna Dabrowska 'assignment[status]' => $status, 134910e7e15SAnna Dabrowska 'assignment[pattern]' => $pattern, 135910e7e15SAnna Dabrowska 'assignment[user]' => $user, 136910e7e15SAnna Dabrowska ] 137910e7e15SAnna Dabrowska ); 138910e7e15SAnna Dabrowska 139910e7e15SAnna Dabrowska echo '<tr>'; 140910e7e15SAnna Dabrowska echo '<td>' . hsc($pattern) . '</td>'; 141910e7e15SAnna Dabrowska echo '<td>' . hsc($status) . '</td>'; 142910e7e15SAnna Dabrowska echo '<td>' . hsc($user) . '</td>'; 143910e7e15SAnna Dabrowska echo '<td><a class="deleteSchema" href="' . $link . '">' . $this->getLang('assign_del') . '</a></td>'; 144910e7e15SAnna Dabrowska echo '</tr>'; 145910e7e15SAnna Dabrowska } 146910e7e15SAnna Dabrowska 147910e7e15SAnna Dabrowska // new assignment form 148910e7e15SAnna Dabrowska echo '<tr>'; 149910e7e15SAnna Dabrowska echo '<td><input type="text" name="assignment[pattern]" /></td>'; 150910e7e15SAnna Dabrowska echo '<td>'; 151910e7e15SAnna Dabrowska echo '<select name="assignment[status]">'; 152e31c94d7SAndreas Gohr foreach ([Constants::ACTION_APPROVE, Constants::ACTION_PUBLISH] as $status) { 153910e7e15SAnna Dabrowska echo '<option value="' . $status . '">' . $status . '</option>'; 154910e7e15SAnna Dabrowska } 155910e7e15SAnna Dabrowska echo '</select>'; 156910e7e15SAnna Dabrowska echo '</td>'; 157910e7e15SAnna Dabrowska echo '<td><input type="text" name="assignment[user]" /></td>'; 158910e7e15SAnna Dabrowska echo '<td><button type="submit" name="action" value="add">' . $this->getLang('assign_add') . '</button></td>'; 159910e7e15SAnna Dabrowska echo '</tr>'; 160910e7e15SAnna Dabrowska 161910e7e15SAnna Dabrowska echo '</table>'; 162910e7e15SAnna Dabrowska echo '</form>'; 16387106851SAnna Dabrowska } 16487106851SAnna Dabrowska} 165