187106851SAnna Dabrowska<?php 2910e7e15SAnna Dabrowska 3910e7e15SAnna Dabrowskause dokuwiki\plugin\structpublish\meta\Assignments; 4e31c94d7SAndreas 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 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 /** 31910e7e15SAnna Dabrowska * Based on struct pattern assignments 3287106851SAnna Dabrowska */ 3387106851SAnna Dabrowska public function handle() 3487106851SAnna Dabrowska { 35910e7e15SAnna Dabrowska global $INPUT; 36910e7e15SAnna Dabrowska global $ID; 3787106851SAnna Dabrowska 38910e7e15SAnna Dabrowska try { 39910e7e15SAnna Dabrowska $assignments = Assignments::getInstance(); 40910e7e15SAnna Dabrowska } catch (Exception $e) { 41910e7e15SAnna Dabrowska msg($e->getMessage(), -1); 428b0ba635SAndreas Gohr return; 43910e7e15SAnna Dabrowska } 44910e7e15SAnna Dabrowska 45910e7e15SAnna Dabrowska if ($INPUT->str('action') && $INPUT->arr('assignment') && checkSecurityToken()) { 46910e7e15SAnna Dabrowska $assignment = $INPUT->arr('assignment'); 47910e7e15SAnna Dabrowska if (!blank($assignment['pattern']) && !blank($assignment['status'])) { 48910e7e15SAnna Dabrowska if ($INPUT->str('action') === 'delete') { 49*31e730e1SAnna Dabrowska $ok = $assignments->removePattern( 50*31e730e1SAnna Dabrowska $assignment['pattern'], 51*31e730e1SAnna Dabrowska $assignment['user'], 52*31e730e1SAnna Dabrowska $assignment['status'] 53*31e730e1SAnna Dabrowska ); 548b0ba635SAndreas Gohr if (!$ok) { 558b0ba635SAndreas Gohr msg('failed to remove pattern', -1); 568b0ba635SAndreas Gohr } 57910e7e15SAnna Dabrowska } elseif ($INPUT->str('action') === 'add') { 58910e7e15SAnna Dabrowska if ($assignment['pattern'][0] == '/') { 59910e7e15SAnna Dabrowska if (@preg_match($assignment['pattern'], null) === false) { 60910e7e15SAnna Dabrowska msg('Invalid regular expression. Pattern not saved', -1); 61910e7e15SAnna Dabrowska } else { 62*31e730e1SAnna Dabrowska $ok = $assignments->addPattern( 63*31e730e1SAnna Dabrowska $assignment['pattern'], 64*31e730e1SAnna Dabrowska $assignment['user'], 65*31e730e1SAnna Dabrowska $assignment['status'] 66*31e730e1SAnna Dabrowska ); 678b0ba635SAndreas Gohr if (!$ok) { 688b0ba635SAndreas Gohr msg('failed to add pattern', -1); 698b0ba635SAndreas Gohr } 70910e7e15SAnna Dabrowska } 71910e7e15SAnna Dabrowska } else { 72*31e730e1SAnna Dabrowska $ok = $assignments->addPattern( 73*31e730e1SAnna Dabrowska $assignment['pattern'], 74*31e730e1SAnna Dabrowska $assignment['user'], 75*31e730e1SAnna Dabrowska $assignment['status'] 76*31e730e1SAnna Dabrowska ); 778b0ba635SAndreas Gohr if (!$ok) { 788b0ba635SAndreas Gohr msg('failed to add pattern', -1); 798b0ba635SAndreas Gohr } 80910e7e15SAnna Dabrowska } 81910e7e15SAnna Dabrowska } 82910e7e15SAnna Dabrowska } 83910e7e15SAnna Dabrowska 84910e7e15SAnna Dabrowska send_redirect(wl($ID, array('do' => 'admin', 'page' => 'structpublish'), true, '&')); 85910e7e15SAnna Dabrowska } 8687106851SAnna Dabrowska } 8787106851SAnna Dabrowska 8887106851SAnna Dabrowska /** 898b0ba635SAndreas Gohr * Render HTML output 9087106851SAnna Dabrowska */ 9187106851SAnna Dabrowska public function html() 9287106851SAnna Dabrowska { 9387106851SAnna Dabrowska ptln('<h1>' . $this->getLang('menu') . '</h1>'); 94910e7e15SAnna Dabrowska 95910e7e15SAnna Dabrowska global $ID; 96910e7e15SAnna Dabrowska 97910e7e15SAnna Dabrowska try { 98910e7e15SAnna Dabrowska $assignments = Assignments::getInstance(); 99910e7e15SAnna Dabrowska } catch (Exception $e) { 100910e7e15SAnna Dabrowska msg($e->getMessage(), -1); 1018b0ba635SAndreas Gohr return; 102910e7e15SAnna Dabrowska } 103910e7e15SAnna Dabrowska $list = $assignments->getAllPatterns(); 104910e7e15SAnna Dabrowska 105910e7e15SAnna Dabrowska echo '<form action="' . wl($ID) . '" action="post">'; 106910e7e15SAnna Dabrowska echo '<input type="hidden" name="do" value="admin" />'; 107910e7e15SAnna Dabrowska echo '<input type="hidden" name="page" value="structpublish" />'; 108910e7e15SAnna Dabrowska echo '<input type="hidden" name="sectok" value="' . getSecurityToken() . '" />'; 109910e7e15SAnna Dabrowska echo '<table class="inline">'; 110910e7e15SAnna Dabrowska 111910e7e15SAnna Dabrowska // header 112910e7e15SAnna Dabrowska echo '<tr>'; 113910e7e15SAnna Dabrowska echo '<th>' . $this->getLang('assign_pattern') . '</th>'; 114910e7e15SAnna Dabrowska echo '<th>' . $this->getLang('assign_status') . '</th>'; 115910e7e15SAnna Dabrowska echo '<th>' . $this->getLang('assign_user') . '</th>'; 116910e7e15SAnna Dabrowska echo '<th></th>'; 117910e7e15SAnna Dabrowska echo '</tr>'; 118910e7e15SAnna Dabrowska 119910e7e15SAnna Dabrowska // existing assignments 120910e7e15SAnna Dabrowska foreach ($list as $assignment) { 121910e7e15SAnna Dabrowska $pattern = $assignment['pattern']; 122910e7e15SAnna Dabrowska $status = $assignment['status']; 123910e7e15SAnna Dabrowska $user = $assignment['user']; 124910e7e15SAnna Dabrowska 125910e7e15SAnna Dabrowska $link = wl( 126910e7e15SAnna Dabrowska $ID, 127910e7e15SAnna Dabrowska [ 128910e7e15SAnna Dabrowska 'do' => 'admin', 129910e7e15SAnna Dabrowska 'page' => 'structpublish', 130910e7e15SAnna Dabrowska 'action' => 'delete', 131910e7e15SAnna Dabrowska 'sectok' => getSecurityToken(), 132910e7e15SAnna Dabrowska 'assignment[status]' => $status, 133910e7e15SAnna Dabrowska 'assignment[pattern]' => $pattern, 134910e7e15SAnna Dabrowska 'assignment[user]' => $user, 135910e7e15SAnna Dabrowska ] 136910e7e15SAnna Dabrowska ); 137910e7e15SAnna Dabrowska 138910e7e15SAnna Dabrowska echo '<tr>'; 139910e7e15SAnna Dabrowska echo '<td>' . hsc($pattern) . '</td>'; 140910e7e15SAnna Dabrowska echo '<td>' . hsc($status) . '</td>'; 141910e7e15SAnna Dabrowska echo '<td>' . hsc($user) . '</td>'; 142910e7e15SAnna Dabrowska echo '<td><a class="deleteSchema" href="' . $link . '">' . $this->getLang('assign_del') . '</a></td>'; 143910e7e15SAnna Dabrowska echo '</tr>'; 144910e7e15SAnna Dabrowska } 145910e7e15SAnna Dabrowska 146910e7e15SAnna Dabrowska // new assignment form 147910e7e15SAnna Dabrowska echo '<tr>'; 148910e7e15SAnna Dabrowska echo '<td><input type="text" name="assignment[pattern]" /></td>'; 149910e7e15SAnna Dabrowska echo '<td>'; 150910e7e15SAnna Dabrowska echo '<select name="assignment[status]">'; 151e31c94d7SAndreas Gohr foreach ([Constants::ACTION_APPROVE, Constants::ACTION_PUBLISH] as $status) { 152910e7e15SAnna Dabrowska echo '<option value="' . $status . '">' . $status . '</option>'; 153910e7e15SAnna Dabrowska } 154910e7e15SAnna Dabrowska echo '</select>'; 155910e7e15SAnna Dabrowska echo '</td>'; 156910e7e15SAnna Dabrowska echo '<td><input type="text" name="assignment[user]" /></td>'; 157910e7e15SAnna Dabrowska echo '<td><button type="submit" name="action" value="add">' . $this->getLang('assign_add') . '</button></td>'; 158910e7e15SAnna Dabrowska echo '</tr>'; 159910e7e15SAnna Dabrowska 160910e7e15SAnna Dabrowska echo '</table>'; 161910e7e15SAnna Dabrowska echo '</form>'; 16287106851SAnna Dabrowska } 16387106851SAnna Dabrowska} 164