187fdbc6bSMichael Große<?php 287fdbc6bSMichael Große/** 387fdbc6bSMichael Große * DokuWiki Plugin struct (Admin Component) 487fdbc6bSMichael Große * 587fdbc6bSMichael Große * @license GPL 2 http://www.gnu.org/licenses/gpl-2.0.html 687fdbc6bSMichael Große * @author Andreas Gohr, Michael Große <dokuwiki@cosmocode.de> 787fdbc6bSMichael Große */ 887fdbc6bSMichael Große 987fdbc6bSMichael Große// must be run within Dokuwiki 10ba766201SAndreas Gohruse dokuwiki\plugin\struct\meta\Assignments; 11ba766201SAndreas Gohruse dokuwiki\plugin\struct\meta\Schema; 12*7cbcfbdbSAndreas Gohruse dokuwiki\plugin\struct\meta\StructException; 1387fdbc6bSMichael Große 1487fdbc6bSMichael Großeif(!defined('DOKU_INC')) die(); 1587fdbc6bSMichael Große 1687fdbc6bSMichael Großeclass admin_plugin_struct_assignments extends DokuWiki_Admin_Plugin { 1787fdbc6bSMichael Große 1887fdbc6bSMichael Große /** 1987fdbc6bSMichael Große * @return int sort number in admin menu 2087fdbc6bSMichael Große */ 2187fdbc6bSMichael Große public function getMenuSort() { 2287fdbc6bSMichael Große return 501; 2387fdbc6bSMichael Große } 2487fdbc6bSMichael Große 2540b81cabSAndreas Gohr /** 2640b81cabSAndreas Gohr * Return the text that is displayed at the main admin menu 2740b81cabSAndreas Gohr * 2840b81cabSAndreas Gohr * @param string $language language code 2940b81cabSAndreas Gohr * @return string menu string 3040b81cabSAndreas Gohr */ 3140b81cabSAndreas Gohr public function getMenuText($language) { 3240b81cabSAndreas Gohr return $this->getLang('menu_assignments'); 3387fdbc6bSMichael Große } 3487fdbc6bSMichael Große 3587fdbc6bSMichael Große /** 3687fdbc6bSMichael Große * @return bool true if only access for superuser, false is for superusers and moderators 3787fdbc6bSMichael Große */ 3887fdbc6bSMichael Große public function forAdminOnly() { 394d220607SAndreas Gohr return false; 4087fdbc6bSMichael Große } 4187fdbc6bSMichael Große 4287fdbc6bSMichael Große /** 4387fdbc6bSMichael Große * Should carry out any processing required by the plugin. 4487fdbc6bSMichael Große */ 4587fdbc6bSMichael Große public function handle() { 4687fdbc6bSMichael Große global $INPUT; 4728e05468SAndreas Gohr global $ID; 4887fdbc6bSMichael Große 49*7cbcfbdbSAndreas Gohr try { 50025cb9daSAndreas Gohr $assignments = Assignments::getInstance(); 51*7cbcfbdbSAndreas Gohr } catch(StructException $e) { 52*7cbcfbdbSAndreas Gohr msg($e->getMessage(), -1); 53*7cbcfbdbSAndreas Gohr return false; 54*7cbcfbdbSAndreas Gohr } 55*7cbcfbdbSAndreas Gohr 5687fdbc6bSMichael Große if($INPUT->str('action') && $INPUT->arr('assignment') && checkSecurityToken()) { 5787fdbc6bSMichael Große $assignment = $INPUT->arr('assignment'); 5828e05468SAndreas Gohr if(!blank($assignment['assign']) && !blank($assignment['tbl'])) { 5987fdbc6bSMichael Große if($INPUT->str('action') === 'delete') { 6033d7be6aSAndreas Gohr $ok = $assignments->removePattern($assignment['assign'], $assignment['tbl']); 619914e87eSAndreas Gohr if(!$ok) msg('failed to remove pattern', -1); 621a8d1235SAndreas Gohr } else if($INPUT->str('action') === 'add') { 639914e87eSAndreas Gohr if($assignment['assign']{0} == '/') { 649914e87eSAndreas Gohr if(@preg_match($assignment['assign'], null) === false) { 659914e87eSAndreas Gohr msg('Invalid regular expression. Pattern not saved', -1); 669914e87eSAndreas Gohr } else { 6733d7be6aSAndreas Gohr $ok = $assignments->addPattern($assignment['assign'], $assignment['tbl']); 689914e87eSAndreas Gohr if(!$ok) msg('failed to add pattern', -1); 699914e87eSAndreas Gohr } 709914e87eSAndreas Gohr } else { 719914e87eSAndreas Gohr $ok = $assignments->addPattern($assignment['assign'], $assignment['tbl']); 729914e87eSAndreas Gohr if(!$ok) msg('failed to add pattern', -1); 739914e87eSAndreas Gohr } 7487fdbc6bSMichael Große } 7528e05468SAndreas Gohr } 7628e05468SAndreas Gohr 779914e87eSAndreas Gohr 7828e05468SAndreas Gohr 7928e05468SAndreas Gohr send_redirect(wl($ID, array('do' => 'admin', 'page' => 'struct_assignments'), true, '&')); 8087fdbc6bSMichael Große } 8187fdbc6bSMichael Große } 8287fdbc6bSMichael Große 8387fdbc6bSMichael Große /** 8487fdbc6bSMichael Große * Render HTML output, e.g. helpful text and a form 8587fdbc6bSMichael Große */ 8687fdbc6bSMichael Große public function html() { 87a3d1e459SAndreas Gohr global $ID; 88a3d1e459SAndreas Gohr 8987fdbc6bSMichael Große echo $this->locale_xhtml('assignments_intro'); 9087fdbc6bSMichael Große 91*7cbcfbdbSAndreas Gohr try { 92025cb9daSAndreas Gohr $ass = Assignments::getInstance(); 93*7cbcfbdbSAndreas Gohr } catch(StructException $e) { 94*7cbcfbdbSAndreas Gohr msg($e->getMessage(), -1); 95*7cbcfbdbSAndreas Gohr return false; 96*7cbcfbdbSAndreas Gohr } 9733d7be6aSAndreas Gohr $assignments = $ass->getAllPatterns(); 9887fdbc6bSMichael Große 9928e05468SAndreas Gohr echo '<form action="' . wl($ID) . '" action="post">'; 100a3d1e459SAndreas Gohr echo '<input type="hidden" name="do" value="admin" />'; 101a3d1e459SAndreas Gohr echo '<input type="hidden" name="page" value="struct_assignments" />'; 102a3d1e459SAndreas Gohr echo '<input type="hidden" name="sectok" value="' . getSecurityToken() . '" />'; 103a3d1e459SAndreas Gohr echo '<table class="inline">'; 104a3d1e459SAndreas Gohr 105a3d1e459SAndreas Gohr // header 106a3d1e459SAndreas Gohr echo '<tr>'; 107ececd523SAndreas Gohr echo '<th>'.$this->getLang('assign_assign').'</th>'; 108ececd523SAndreas Gohr echo '<th>'.$this->getLang('assign_tbl').'</th>'; 109a3d1e459SAndreas Gohr echo '<th></th>'; 110a3d1e459SAndreas Gohr echo '</tr>'; 111a3d1e459SAndreas Gohr 112a3d1e459SAndreas Gohr // existing assignments 11387fdbc6bSMichael Große foreach($assignments as $assignment) { 11487fdbc6bSMichael Große $schema = $assignment['tbl']; 115f8d8a899SAndreas Gohr $assignee = $assignment['pattern']; 116a3d1e459SAndreas Gohr 11728e05468SAndreas Gohr $link = wl( 11828e05468SAndreas Gohr $ID, array( 119a3d1e459SAndreas Gohr 'do' => 'admin', 120a3d1e459SAndreas Gohr 'page' => 'struct_assignments', 121a3d1e459SAndreas Gohr 'action' => 'delete', 122a3d1e459SAndreas Gohr 'sectok' => getSecurityToken(), 123a3d1e459SAndreas Gohr 'assignment[tbl]' => $schema, 124a3d1e459SAndreas Gohr 'assignment[assign]' => $assignee, 12528e05468SAndreas Gohr ) 12628e05468SAndreas Gohr ); 127a3d1e459SAndreas Gohr 128a3d1e459SAndreas Gohr echo '<tr>'; 129a3d1e459SAndreas Gohr echo '<td>' . hsc($assignee) . '</td>'; 130a3d1e459SAndreas Gohr echo '<td>' . hsc($schema) . '</td>'; 131e4e17387SMichael Grosse echo '<td><a class="deleteSchema" href="' . $link . '">'.$this->getLang('assign_del').'</a></td>'; 132a3d1e459SAndreas Gohr echo '</tr>'; 13387fdbc6bSMichael Große } 134a3d1e459SAndreas Gohr 135a3d1e459SAndreas Gohr // new assignment form 136a3d1e459SAndreas Gohr echo '<tr>'; 137a3d1e459SAndreas Gohr echo '<td><input type="text" name="assignment[assign]" /></td>'; 138a3d1e459SAndreas Gohr echo '<td>'; 139a3d1e459SAndreas Gohr echo '<select name="assignment[tbl]">'; 140fc26989eSAndreas Gohr foreach(Schema::getAll('page') as $table) { 141097f4a53SAndreas Gohr echo '<option value="' . hsc($table) . '">' . hsc($table) . '</option>'; 14287fdbc6bSMichael Große } 143a3d1e459SAndreas Gohr echo '</select>'; 144a3d1e459SAndreas Gohr echo '</td>'; 145ececd523SAndreas Gohr echo '<td><button type="submit" name="action" value="add">'.$this->getLang('assign_add').'</button></td>'; 146a3d1e459SAndreas Gohr echo '</tr>'; 147a3d1e459SAndreas Gohr 148a3d1e459SAndreas Gohr echo '</table>'; 14987fdbc6bSMichael Große } 150dbffe06eSAndreas Gohr 151dbffe06eSAndreas Gohr /** 152dbffe06eSAndreas Gohr * Copies the TOC from the Schema Editor 153dbffe06eSAndreas Gohr * 154dbffe06eSAndreas Gohr * @return array 155dbffe06eSAndreas Gohr */ 156dbffe06eSAndreas Gohr public function getTOC() { 157dbffe06eSAndreas Gohr /** @var admin_plugin_struct_schemas $plugin */ 158dbffe06eSAndreas Gohr $plugin = plugin_load('admin', 'struct_schemas'); 159dbffe06eSAndreas Gohr return $plugin->getTOC(); 16087fdbc6bSMichael Große } 16187fdbc6bSMichael Große 16287fdbc6bSMichael Große} 16387fdbc6bSMichael Große 16487fdbc6bSMichael Große// vim:ts=4:sw=4:et: 165