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 10*ba766201SAndreas Gohruse dokuwiki\plugin\struct\meta\Assignments; 11*ba766201SAndreas Gohruse dokuwiki\plugin\struct\meta\Schema; 1287fdbc6bSMichael Große 1387fdbc6bSMichael Großeif(!defined('DOKU_INC')) die(); 1487fdbc6bSMichael Große 1587fdbc6bSMichael Großeclass admin_plugin_struct_assignments extends DokuWiki_Admin_Plugin { 1687fdbc6bSMichael Große 1787fdbc6bSMichael Große /** 1887fdbc6bSMichael Große * @return int sort number in admin menu 1987fdbc6bSMichael Große */ 2087fdbc6bSMichael Große public function getMenuSort() { 2187fdbc6bSMichael Große return 501; 2287fdbc6bSMichael Große } 2387fdbc6bSMichael Große 2440b81cabSAndreas Gohr /** 2540b81cabSAndreas Gohr * Return the text that is displayed at the main admin menu 2640b81cabSAndreas Gohr * 2740b81cabSAndreas Gohr * @param string $language language code 2840b81cabSAndreas Gohr * @return string menu string 2940b81cabSAndreas Gohr */ 3040b81cabSAndreas Gohr public function getMenuText($language) { 3140b81cabSAndreas Gohr return $this->getLang('menu_assignments'); 3287fdbc6bSMichael Große } 3387fdbc6bSMichael Große 3487fdbc6bSMichael Große /** 3587fdbc6bSMichael Große * @return bool true if only access for superuser, false is for superusers and moderators 3687fdbc6bSMichael Große */ 3787fdbc6bSMichael Große public function forAdminOnly() { 384d220607SAndreas Gohr return false; 3987fdbc6bSMichael Große } 4087fdbc6bSMichael Große 4187fdbc6bSMichael Große /** 4287fdbc6bSMichael Große * Should carry out any processing required by the plugin. 4387fdbc6bSMichael Große */ 4487fdbc6bSMichael Große public function handle() { 4587fdbc6bSMichael Große global $INPUT; 4628e05468SAndreas Gohr global $ID; 4787fdbc6bSMichael Große 481a8d1235SAndreas Gohr $assignments = new Assignments(); 4987fdbc6bSMichael Große if($INPUT->str('action') && $INPUT->arr('assignment') && checkSecurityToken()) { 5087fdbc6bSMichael Große $assignment = $INPUT->arr('assignment'); 5128e05468SAndreas Gohr if(!blank($assignment['assign']) && !blank($assignment['tbl'])) { 5287fdbc6bSMichael Große if($INPUT->str('action') === 'delete') { 5333d7be6aSAndreas Gohr $ok = $assignments->removePattern($assignment['assign'], $assignment['tbl']); 549914e87eSAndreas Gohr if(!$ok) msg('failed to remove pattern', -1); 551a8d1235SAndreas Gohr } else if($INPUT->str('action') === 'add') { 569914e87eSAndreas Gohr if($assignment['assign']{0} == '/') { 579914e87eSAndreas Gohr if(@preg_match($assignment['assign'], null) === false) { 589914e87eSAndreas Gohr msg('Invalid regular expression. Pattern not saved', -1); 599914e87eSAndreas Gohr } else { 6033d7be6aSAndreas Gohr $ok = $assignments->addPattern($assignment['assign'], $assignment['tbl']); 619914e87eSAndreas Gohr if(!$ok) msg('failed to add pattern', -1); 629914e87eSAndreas Gohr } 639914e87eSAndreas Gohr } else { 649914e87eSAndreas Gohr $ok = $assignments->addPattern($assignment['assign'], $assignment['tbl']); 659914e87eSAndreas Gohr if(!$ok) msg('failed to add pattern', -1); 669914e87eSAndreas Gohr } 6787fdbc6bSMichael Große } 6828e05468SAndreas Gohr } 6928e05468SAndreas Gohr 709914e87eSAndreas Gohr 7128e05468SAndreas Gohr 7228e05468SAndreas Gohr send_redirect(wl($ID, array('do' => 'admin', 'page' => 'struct_assignments'), true, '&')); 7387fdbc6bSMichael Große } 7487fdbc6bSMichael Große } 7587fdbc6bSMichael Große 7687fdbc6bSMichael Große /** 7787fdbc6bSMichael Große * Render HTML output, e.g. helpful text and a form 7887fdbc6bSMichael Große */ 7987fdbc6bSMichael Große public function html() { 80a3d1e459SAndreas Gohr global $ID; 81a3d1e459SAndreas Gohr 8287fdbc6bSMichael Große echo $this->locale_xhtml('assignments_intro'); 8387fdbc6bSMichael Große 841a8d1235SAndreas Gohr $ass = new Assignments(); 8533d7be6aSAndreas Gohr $assignments = $ass->getAllPatterns(); 8687fdbc6bSMichael Große 8728e05468SAndreas Gohr echo '<form action="' . wl($ID) . '" action="post">'; 88a3d1e459SAndreas Gohr echo '<input type="hidden" name="do" value="admin" />'; 89a3d1e459SAndreas Gohr echo '<input type="hidden" name="page" value="struct_assignments" />'; 90a3d1e459SAndreas Gohr echo '<input type="hidden" name="sectok" value="' . getSecurityToken() . '" />'; 91a3d1e459SAndreas Gohr echo '<table class="inline">'; 92a3d1e459SAndreas Gohr 93a3d1e459SAndreas Gohr // header 94a3d1e459SAndreas Gohr echo '<tr>'; 95ececd523SAndreas Gohr echo '<th>'.$this->getLang('assign_assign').'</th>'; 96ececd523SAndreas Gohr echo '<th>'.$this->getLang('assign_tbl').'</th>'; 97a3d1e459SAndreas Gohr echo '<th></th>'; 98a3d1e459SAndreas Gohr echo '</tr>'; 99a3d1e459SAndreas Gohr 100a3d1e459SAndreas Gohr // existing assignments 10187fdbc6bSMichael Große foreach($assignments as $assignment) { 10287fdbc6bSMichael Große $schema = $assignment['tbl']; 103f8d8a899SAndreas Gohr $assignee = $assignment['pattern']; 104a3d1e459SAndreas Gohr 10528e05468SAndreas Gohr $link = wl( 10628e05468SAndreas Gohr $ID, array( 107a3d1e459SAndreas Gohr 'do' => 'admin', 108a3d1e459SAndreas Gohr 'page' => 'struct_assignments', 109a3d1e459SAndreas Gohr 'action' => 'delete', 110a3d1e459SAndreas Gohr 'sectok' => getSecurityToken(), 111a3d1e459SAndreas Gohr 'assignment[tbl]' => $schema, 112a3d1e459SAndreas Gohr 'assignment[assign]' => $assignee, 11328e05468SAndreas Gohr ) 11428e05468SAndreas Gohr ); 115a3d1e459SAndreas Gohr 116a3d1e459SAndreas Gohr echo '<tr>'; 117a3d1e459SAndreas Gohr echo '<td>' . hsc($assignee) . '</td>'; 118a3d1e459SAndreas Gohr echo '<td>' . hsc($schema) . '</td>'; 119ececd523SAndreas Gohr echo '<td><a href="' . $link . '">'.$this->getLang('assign_del').'</a></td>'; 120a3d1e459SAndreas Gohr echo '</tr>'; 12187fdbc6bSMichael Große } 122a3d1e459SAndreas Gohr 123a3d1e459SAndreas Gohr // new assignment form 124a3d1e459SAndreas Gohr echo '<tr>'; 125a3d1e459SAndreas Gohr echo '<td><input type="text" name="assignment[assign]" /></td>'; 126a3d1e459SAndreas Gohr echo '<td>'; 127a3d1e459SAndreas Gohr echo '<select name="assignment[tbl]">'; 128097f4a53SAndreas Gohr foreach(Schema::getAll() as $table) { 129097f4a53SAndreas Gohr echo '<option value="' . hsc($table) . '">' . hsc($table) . '</option>'; 13087fdbc6bSMichael Große } 131a3d1e459SAndreas Gohr echo '</select>'; 132a3d1e459SAndreas Gohr echo '</td>'; 133ececd523SAndreas Gohr echo '<td><button type="submit" name="action" value="add">'.$this->getLang('assign_add').'</button></td>'; 134a3d1e459SAndreas Gohr echo '</tr>'; 135a3d1e459SAndreas Gohr 136a3d1e459SAndreas Gohr echo '</table>'; 13787fdbc6bSMichael Große } 138dbffe06eSAndreas Gohr 139dbffe06eSAndreas Gohr /** 140dbffe06eSAndreas Gohr * Copies the TOC from the Schema Editor 141dbffe06eSAndreas Gohr * 142dbffe06eSAndreas Gohr * @return array 143dbffe06eSAndreas Gohr */ 144dbffe06eSAndreas Gohr public function getTOC() { 145dbffe06eSAndreas Gohr /** @var admin_plugin_struct_schemas $plugin */ 146dbffe06eSAndreas Gohr $plugin = plugin_load('admin', 'struct_schemas'); 147dbffe06eSAndreas Gohr return $plugin->getTOC(); 14887fdbc6bSMichael Große } 14987fdbc6bSMichael Große 15087fdbc6bSMichael Große} 15187fdbc6bSMichael Große 15287fdbc6bSMichael Große// vim:ts=4:sw=4:et: 153