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); 42*8b0ba635SAndreas 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*8b0ba635SAndreas Gohr $ok = $assignments->removePattern($assignment['pattern'], $assignment['user'], 50*8b0ba635SAndreas Gohr $assignment['status']); 51*8b0ba635SAndreas Gohr if (!$ok) { 52*8b0ba635SAndreas Gohr msg('failed to remove pattern', -1); 53*8b0ba635SAndreas Gohr } 54910e7e15SAnna Dabrowska } elseif ($INPUT->str('action') === 'add') { 55910e7e15SAnna Dabrowska if ($assignment['pattern'][0] == '/') { 56910e7e15SAnna Dabrowska if (@preg_match($assignment['pattern'], null) === false) { 57910e7e15SAnna Dabrowska msg('Invalid regular expression. Pattern not saved', -1); 58910e7e15SAnna Dabrowska } else { 59*8b0ba635SAndreas Gohr $ok = $assignments->addPattern($assignment['pattern'], $assignment['user'], 60*8b0ba635SAndreas Gohr $assignment['status']); 61*8b0ba635SAndreas Gohr if (!$ok) { 62*8b0ba635SAndreas Gohr msg('failed to add pattern', -1); 63*8b0ba635SAndreas Gohr } 64910e7e15SAnna Dabrowska } 65910e7e15SAnna Dabrowska } else { 66*8b0ba635SAndreas Gohr $ok = $assignments->addPattern($assignment['pattern'], $assignment['user'], 67*8b0ba635SAndreas Gohr $assignment['status']); 68*8b0ba635SAndreas Gohr if (!$ok) { 69*8b0ba635SAndreas Gohr msg('failed to add pattern', -1); 70*8b0ba635SAndreas Gohr } 71910e7e15SAnna Dabrowska } 72910e7e15SAnna Dabrowska } 73910e7e15SAnna Dabrowska } 74910e7e15SAnna Dabrowska 75910e7e15SAnna Dabrowska send_redirect(wl($ID, array('do' => 'admin', 'page' => 'structpublish'), true, '&')); 76910e7e15SAnna Dabrowska } 7787106851SAnna Dabrowska } 7887106851SAnna Dabrowska 7987106851SAnna Dabrowska /** 80*8b0ba635SAndreas Gohr * Render HTML output 8187106851SAnna Dabrowska */ 8287106851SAnna Dabrowska public function html() 8387106851SAnna Dabrowska { 8487106851SAnna Dabrowska ptln('<h1>' . $this->getLang('menu') . '</h1>'); 85910e7e15SAnna Dabrowska 86910e7e15SAnna Dabrowska global $ID; 87910e7e15SAnna Dabrowska 88910e7e15SAnna Dabrowska try { 89910e7e15SAnna Dabrowska $assignments = Assignments::getInstance(); 90910e7e15SAnna Dabrowska } catch(Exception $e) { 91910e7e15SAnna Dabrowska msg($e->getMessage(), -1); 92*8b0ba635SAndreas Gohr return; 93910e7e15SAnna Dabrowska } 94910e7e15SAnna Dabrowska $list = $assignments->getAllPatterns(); 95910e7e15SAnna Dabrowska 96910e7e15SAnna Dabrowska echo '<form action="' . wl($ID) . '" action="post">'; 97910e7e15SAnna Dabrowska echo '<input type="hidden" name="do" value="admin" />'; 98910e7e15SAnna Dabrowska echo '<input type="hidden" name="page" value="structpublish" />'; 99910e7e15SAnna Dabrowska echo '<input type="hidden" name="sectok" value="' . getSecurityToken() . '" />'; 100910e7e15SAnna Dabrowska echo '<table class="inline">'; 101910e7e15SAnna Dabrowska 102910e7e15SAnna Dabrowska // header 103910e7e15SAnna Dabrowska echo '<tr>'; 104910e7e15SAnna Dabrowska echo '<th>' . $this->getLang('assign_pattern') . '</th>'; 105910e7e15SAnna Dabrowska echo '<th>' . $this->getLang('assign_status') . '</th>'; 106910e7e15SAnna Dabrowska echo '<th>' . $this->getLang('assign_user') . '</th>'; 107910e7e15SAnna Dabrowska echo '<th></th>'; 108910e7e15SAnna Dabrowska echo '</tr>'; 109910e7e15SAnna Dabrowska 110910e7e15SAnna Dabrowska // existing assignments 111910e7e15SAnna Dabrowska foreach ($list as $assignment) { 112910e7e15SAnna Dabrowska $pattern = $assignment['pattern']; 113910e7e15SAnna Dabrowska $status = $assignment['status']; 114910e7e15SAnna Dabrowska $user = $assignment['user']; 115910e7e15SAnna Dabrowska 116910e7e15SAnna Dabrowska $link = wl( 117910e7e15SAnna Dabrowska $ID, 118910e7e15SAnna Dabrowska [ 119910e7e15SAnna Dabrowska 'do' => 'admin', 120910e7e15SAnna Dabrowska 'page' => 'structpublish', 121910e7e15SAnna Dabrowska 'action' => 'delete', 122910e7e15SAnna Dabrowska 'sectok' => getSecurityToken(), 123910e7e15SAnna Dabrowska 'assignment[status]' => $status, 124910e7e15SAnna Dabrowska 'assignment[pattern]' => $pattern, 125910e7e15SAnna Dabrowska 'assignment[user]' => $user, 126910e7e15SAnna Dabrowska ] 127910e7e15SAnna Dabrowska ); 128910e7e15SAnna Dabrowska 129910e7e15SAnna Dabrowska echo '<tr>'; 130910e7e15SAnna Dabrowska echo '<td>' . hsc($pattern) . '</td>'; 131910e7e15SAnna Dabrowska echo '<td>' . hsc($status) . '</td>'; 132910e7e15SAnna Dabrowska echo '<td>' . hsc($user) . '</td>'; 133910e7e15SAnna Dabrowska echo '<td><a class="deleteSchema" href="' . $link . '">' . $this->getLang('assign_del') . '</a></td>'; 134910e7e15SAnna Dabrowska echo '</tr>'; 135910e7e15SAnna Dabrowska } 136910e7e15SAnna Dabrowska 137910e7e15SAnna Dabrowska // new assignment form 138910e7e15SAnna Dabrowska echo '<tr>'; 139910e7e15SAnna Dabrowska echo '<td><input type="text" name="assignment[pattern]" /></td>'; 140910e7e15SAnna Dabrowska echo '<td>'; 141910e7e15SAnna Dabrowska echo '<select name="assignment[status]">'; 142e31c94d7SAndreas Gohr foreach ([Constants::ACTION_APPROVE, Constants::ACTION_PUBLISH] as $status) { 143910e7e15SAnna Dabrowska echo '<option value="' . $status . '">' . $status . '</option>'; 144910e7e15SAnna Dabrowska } 145910e7e15SAnna Dabrowska echo '</select>'; 146910e7e15SAnna Dabrowska echo '</td>'; 147910e7e15SAnna Dabrowska echo '<td><input type="text" name="assignment[user]" /></td>'; 148910e7e15SAnna Dabrowska echo '<td><button type="submit" name="action" value="add">' . $this->getLang('assign_add') . '</button></td>'; 149910e7e15SAnna Dabrowska echo '</tr>'; 150910e7e15SAnna Dabrowska 151910e7e15SAnna Dabrowska echo '</table>'; 152910e7e15SAnna Dabrowska echo '</form>'; 15387106851SAnna Dabrowska } 15487106851SAnna Dabrowska} 15587106851SAnna Dabrowska 156