187fdbc6bSMichael Große<?php 2d6d97f60SAnna Dabrowska 387fdbc6bSMichael Große/** 487fdbc6bSMichael Große * DokuWiki Plugin struct (Admin Component) 587fdbc6bSMichael Große * 687fdbc6bSMichael Große * @license GPL 2 http://www.gnu.org/licenses/gpl-2.0.html 787fdbc6bSMichael Große * @author Andreas Gohr, Michael Große <dokuwiki@cosmocode.de> 887fdbc6bSMichael Große */ 987fdbc6bSMichael Große 1087fdbc6bSMichael Große// must be run within Dokuwiki 11ba766201SAndreas Gohruse dokuwiki\plugin\struct\meta\Assignments; 12ba766201SAndreas Gohruse dokuwiki\plugin\struct\meta\Schema; 137cbcfbdbSAndreas Gohruse dokuwiki\plugin\struct\meta\StructException; 1487fdbc6bSMichael Große 15d6d97f60SAnna Dabrowskaclass admin_plugin_struct_assignments extends DokuWiki_Admin_Plugin 16d6d97f60SAnna Dabrowska{ 1787fdbc6bSMichael Große /** 1887fdbc6bSMichael Große * @return int sort number in admin menu 1987fdbc6bSMichael Große */ 20d6d97f60SAnna Dabrowska public function getMenuSort() 21d6d97f60SAnna Dabrowska { 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 */ 31d6d97f60SAnna Dabrowska public function getMenuText($language) 32d6d97f60SAnna Dabrowska { 3340b81cabSAndreas Gohr return $this->getLang('menu_assignments'); 3487fdbc6bSMichael Große } 3587fdbc6bSMichael Große 3687fdbc6bSMichael Große /** 3787fdbc6bSMichael Große * @return bool true if only access for superuser, false is for superusers and moderators 3887fdbc6bSMichael Große */ 39d6d97f60SAnna Dabrowska public function forAdminOnly() 40d6d97f60SAnna Dabrowska { 414d220607SAndreas Gohr return false; 4287fdbc6bSMichael Große } 4387fdbc6bSMichael Große 4487fdbc6bSMichael Große /** 4587fdbc6bSMichael Große * Should carry out any processing required by the plugin. 4687fdbc6bSMichael Große */ 47d6d97f60SAnna Dabrowska public function handle() 48d6d97f60SAnna Dabrowska { 4987fdbc6bSMichael Große global $INPUT; 5028e05468SAndreas Gohr global $ID; 5187fdbc6bSMichael Große 527cbcfbdbSAndreas Gohr try { 53025cb9daSAndreas Gohr $assignments = Assignments::getInstance(); 547cbcfbdbSAndreas Gohr } catch (StructException $e) { 557cbcfbdbSAndreas Gohr msg($e->getMessage(), -1); 567cbcfbdbSAndreas Gohr return false; 577cbcfbdbSAndreas Gohr } 587cbcfbdbSAndreas Gohr 5987fdbc6bSMichael Große if ($INPUT->str('action') && $INPUT->arr('assignment') && checkSecurityToken()) { 6087fdbc6bSMichael Große $assignment = $INPUT->arr('assignment'); 6128e05468SAndreas Gohr if (!blank($assignment['assign']) && !blank($assignment['tbl'])) { 6287fdbc6bSMichael Große if ($INPUT->str('action') === 'delete') { 6333d7be6aSAndreas Gohr $ok = $assignments->removePattern($assignment['assign'], $assignment['tbl']); 649914e87eSAndreas Gohr if (!$ok) msg('failed to remove pattern', -1); 651a8d1235SAndreas Gohr } elseif ($INPUT->str('action') === 'add') { 66d982cb29SMichael Große if ($assignment['assign'][0] == '/') { 679914e87eSAndreas Gohr if (@preg_match($assignment['assign'], null) === false) { 689914e87eSAndreas Gohr msg('Invalid regular expression. Pattern not saved', -1); 699914e87eSAndreas Gohr } else { 7033d7be6aSAndreas Gohr $ok = $assignments->addPattern($assignment['assign'], $assignment['tbl']); 719914e87eSAndreas Gohr if (!$ok) msg('failed to add pattern', -1); 729914e87eSAndreas Gohr } 739914e87eSAndreas Gohr } else { 749914e87eSAndreas Gohr $ok = $assignments->addPattern($assignment['assign'], $assignment['tbl']); 759914e87eSAndreas Gohr if (!$ok) msg('failed to add pattern', -1); 769914e87eSAndreas Gohr } 7787fdbc6bSMichael Große } 7828e05468SAndreas Gohr } 7928e05468SAndreas Gohr 809914e87eSAndreas Gohr 8128e05468SAndreas Gohr send_redirect(wl($ID, array('do' => 'admin', 'page' => 'struct_assignments'), true, '&')); 8287fdbc6bSMichael Große } 8387fdbc6bSMichael Große } 8487fdbc6bSMichael Große 8587fdbc6bSMichael Große /** 8687fdbc6bSMichael Große * Render HTML output, e.g. helpful text and a form 8787fdbc6bSMichael Große */ 88d6d97f60SAnna Dabrowska public function html() 89d6d97f60SAnna Dabrowska { 90a3d1e459SAndreas Gohr global $ID; 91a3d1e459SAndreas Gohr 9287fdbc6bSMichael Große echo $this->locale_xhtml('assignments_intro'); 9387fdbc6bSMichael Große 947cbcfbdbSAndreas Gohr try { 95025cb9daSAndreas Gohr $ass = Assignments::getInstance(); 967cbcfbdbSAndreas Gohr } catch (StructException $e) { 977cbcfbdbSAndreas Gohr msg($e->getMessage(), -1); 987cbcfbdbSAndreas Gohr return false; 997cbcfbdbSAndreas Gohr } 10033d7be6aSAndreas Gohr $assignments = $ass->getAllPatterns(); 10187fdbc6bSMichael Große 10228e05468SAndreas Gohr echo '<form action="' . wl($ID) . '" action="post">'; 103a3d1e459SAndreas Gohr echo '<input type="hidden" name="do" value="admin" />'; 104a3d1e459SAndreas Gohr echo '<input type="hidden" name="page" value="struct_assignments" />'; 105a3d1e459SAndreas Gohr echo '<input type="hidden" name="sectok" value="' . getSecurityToken() . '" />'; 106a3d1e459SAndreas Gohr echo '<table class="inline">'; 107a3d1e459SAndreas Gohr 108a3d1e459SAndreas Gohr // header 109a3d1e459SAndreas Gohr echo '<tr>'; 110ececd523SAndreas Gohr echo '<th>' . $this->getLang('assign_assign') . '</th>'; 111ececd523SAndreas Gohr echo '<th>' . $this->getLang('assign_tbl') . '</th>'; 112a3d1e459SAndreas Gohr echo '<th></th>'; 113a3d1e459SAndreas Gohr echo '</tr>'; 114a3d1e459SAndreas Gohr 115a3d1e459SAndreas Gohr // existing assignments 11687fdbc6bSMichael Große foreach ($assignments as $assignment) { 11787fdbc6bSMichael Große $schema = $assignment['tbl']; 118f8d8a899SAndreas Gohr $assignee = $assignment['pattern']; 119a3d1e459SAndreas Gohr 12028e05468SAndreas Gohr $link = wl( 121d6d97f60SAnna Dabrowska $ID, 122d6d97f60SAnna Dabrowska array( 123a3d1e459SAndreas Gohr 'do' => 'admin', 124a3d1e459SAndreas Gohr 'page' => 'struct_assignments', 125a3d1e459SAndreas Gohr 'action' => 'delete', 126a3d1e459SAndreas Gohr 'sectok' => getSecurityToken(), 127a3d1e459SAndreas Gohr 'assignment[tbl]' => $schema, 128a3d1e459SAndreas Gohr 'assignment[assign]' => $assignee, 12928e05468SAndreas Gohr ) 13028e05468SAndreas Gohr ); 131a3d1e459SAndreas Gohr 132a3d1e459SAndreas Gohr echo '<tr>'; 133a3d1e459SAndreas Gohr echo '<td>' . hsc($assignee) . '</td>'; 134a3d1e459SAndreas Gohr echo '<td>' . hsc($schema) . '</td>'; 135e4e17387SMichael Grosse echo '<td><a class="deleteSchema" href="' . $link . '">' . $this->getLang('assign_del') . '</a></td>'; 136a3d1e459SAndreas Gohr echo '</tr>'; 13787fdbc6bSMichael Große } 138a3d1e459SAndreas Gohr 139a3d1e459SAndreas Gohr // new assignment form 140a3d1e459SAndreas Gohr echo '<tr>'; 141a3d1e459SAndreas Gohr echo '<td><input type="text" name="assignment[assign]" /></td>'; 142a3d1e459SAndreas Gohr echo '<td>'; 143a3d1e459SAndreas Gohr echo '<select name="assignment[tbl]">'; 144*6c9d1a10SAnna Dabrowska $schemas = helper_plugin_struct::getSchema(); 145*6c9d1a10SAnna Dabrowska foreach ($schemas as $schema) { 146*6c9d1a10SAnna Dabrowska if ($schema->isInternal()) continue; 147*6c9d1a10SAnna Dabrowska $table = $schema->getTable(); 148097f4a53SAndreas Gohr echo '<option value="' . hsc($table) . '">' . hsc($table) . '</option>'; 14987fdbc6bSMichael Große } 150a3d1e459SAndreas Gohr echo '</select>'; 151a3d1e459SAndreas Gohr echo '</td>'; 152ececd523SAndreas Gohr echo '<td><button type="submit" name="action" value="add">' . $this->getLang('assign_add') . '</button></td>'; 153a3d1e459SAndreas Gohr echo '</tr>'; 154a3d1e459SAndreas Gohr 155a3d1e459SAndreas Gohr echo '</table>'; 15661e808e6Sjf908 echo '</form>'; 15787fdbc6bSMichael Große } 158dbffe06eSAndreas Gohr 159dbffe06eSAndreas Gohr /** 160dbffe06eSAndreas Gohr * Copies the TOC from the Schema Editor 161dbffe06eSAndreas Gohr * 162dbffe06eSAndreas Gohr * @return array 163dbffe06eSAndreas Gohr */ 164d6d97f60SAnna Dabrowska public function getTOC() 165d6d97f60SAnna Dabrowska { 166dbffe06eSAndreas Gohr /** @var admin_plugin_struct_schemas $plugin */ 167dbffe06eSAndreas Gohr $plugin = plugin_load('admin', 'struct_schemas'); 168dbffe06eSAndreas Gohr return $plugin->getTOC(); 16987fdbc6bSMichael Große } 17087fdbc6bSMichael Große} 17187fdbc6bSMichael Große 17287fdbc6bSMichael Große// vim:ts=4:sw=4:et: 173