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 1087fdbc6bSMichael Großeuse dokuwiki\Form\Form; 111a8d1235SAndreas Gohruse plugin\struct\meta\Assignments; 1287fdbc6bSMichael Großeuse plugin\struct\meta\Schema; 1387fdbc6bSMichael Großeuse plugin\struct\meta\SchemaEditor; 1487fdbc6bSMichael Große 1587fdbc6bSMichael Großeif(!defined('DOKU_INC')) die(); 1687fdbc6bSMichael Große 1787fdbc6bSMichael Großeclass admin_plugin_struct_assignments extends DokuWiki_Admin_Plugin { 1887fdbc6bSMichael Große 1987fdbc6bSMichael Große /** @var helper_plugin_sqlite */ 2087fdbc6bSMichael Große protected $sqlite; 2187fdbc6bSMichael Große 2287fdbc6bSMichael Große /** 2387fdbc6bSMichael Große * @return int sort number in admin menu 2487fdbc6bSMichael Große */ 2587fdbc6bSMichael Große public function getMenuSort() { 2687fdbc6bSMichael Große return 501; 2787fdbc6bSMichael Große } 2887fdbc6bSMichael Große 2940b81cabSAndreas Gohr /** 3040b81cabSAndreas Gohr * Return the text that is displayed at the main admin menu 3140b81cabSAndreas Gohr * 3240b81cabSAndreas Gohr * @param string $language language code 3340b81cabSAndreas Gohr * @return string menu string 3440b81cabSAndreas Gohr */ 3540b81cabSAndreas Gohr public function getMenuText($language) { 3640b81cabSAndreas Gohr return $this->getLang('menu_assignments'); 3787fdbc6bSMichael Große } 3887fdbc6bSMichael Große 3987fdbc6bSMichael Große /** 4087fdbc6bSMichael Große * @return bool true if only access for superuser, false is for superusers and moderators 4187fdbc6bSMichael Große */ 4287fdbc6bSMichael Große public function forAdminOnly() { 4387fdbc6bSMichael Große return true; 4487fdbc6bSMichael Große } 4587fdbc6bSMichael Große 4687fdbc6bSMichael Große /** 4787fdbc6bSMichael Große * Should carry out any processing required by the plugin. 4887fdbc6bSMichael Große */ 4987fdbc6bSMichael Große public function handle() { 5087fdbc6bSMichael Große global $INPUT; 5187fdbc6bSMichael Große 521a8d1235SAndreas Gohr $assignments = new Assignments(); 5387fdbc6bSMichael Große if($INPUT->str('action') && $INPUT->arr('assignment') && checkSecurityToken()) { 5487fdbc6bSMichael Große $assignment = $INPUT->arr('assignment'); 551a8d1235SAndreas Gohr $ok = false; 5687fdbc6bSMichael Große if ($INPUT->str('action') === 'delete') { 571a8d1235SAndreas Gohr $ok = $assignments->remove($assignment['assign'], $assignment['tbl']); 581a8d1235SAndreas Gohr } else if($INPUT->str('action') === 'add') { 591a8d1235SAndreas Gohr $ok = $assignments->add($assignment['assign'], $assignment['tbl']); 6087fdbc6bSMichael Große } 611a8d1235SAndreas Gohr if(empty($sql) || empty($assignment['assign']) || empty($assignment['tbl']) || !$ok) { 6287fdbc6bSMichael Große msg('something went wrong while saving', -1); 6387fdbc6bSMichael Große } 6487fdbc6bSMichael Große } 6587fdbc6bSMichael Große } 6687fdbc6bSMichael Große 6787fdbc6bSMichael Große /** 6887fdbc6bSMichael Große * Render HTML output, e.g. helpful text and a form 6987fdbc6bSMichael Große */ 7087fdbc6bSMichael Große public function html() { 71*a3d1e459SAndreas Gohr global $ID; 72*a3d1e459SAndreas Gohr 7387fdbc6bSMichael Große echo $this->locale_xhtml('assignments_intro'); 7487fdbc6bSMichael Große 7587fdbc6bSMichael Große $res = $this->sqlite->query('SELECT tbl FROM schemas GROUP BY tbl'); 7687fdbc6bSMichael Große $schemas = $this->sqlite->res2arr($res); 7787fdbc6bSMichael Große $this->sqlite->res_close($res); 7887fdbc6bSMichael Große 791a8d1235SAndreas Gohr $ass = new Assignments(); 801a8d1235SAndreas Gohr $assignments = $ass->getAll(); 8187fdbc6bSMichael Große 82*a3d1e459SAndreas Gohr 83*a3d1e459SAndreas Gohr 84*a3d1e459SAndreas Gohr echo '<form action="'.wl($ID).'">'; 85*a3d1e459SAndreas Gohr echo '<input type="hidden" name="do" value="admin" />'; 86*a3d1e459SAndreas Gohr echo '<input type="hidden" name="page" value="struct_assignments" />'; 87*a3d1e459SAndreas Gohr echo '<input type="hidden" name="sectok" value="'.getSecurityToken().'" />'; 88*a3d1e459SAndreas Gohr echo '<table class="inline">'; 89*a3d1e459SAndreas Gohr 90*a3d1e459SAndreas Gohr // header 91*a3d1e459SAndreas Gohr echo '<tr>'; 92*a3d1e459SAndreas Gohr echo '<th>Page/Namespace</th>'; // FIXME localize 93*a3d1e459SAndreas Gohr echo '<th>Schema</th>'; // FIXME localize 94*a3d1e459SAndreas Gohr echo '<th></th>'; 95*a3d1e459SAndreas Gohr echo '</tr>'; 96*a3d1e459SAndreas Gohr 97*a3d1e459SAndreas Gohr // existing assignments 9887fdbc6bSMichael Große foreach ($assignments as $assignment) { 9987fdbc6bSMichael Große $schema = $assignment['tbl']; 10087fdbc6bSMichael Große $assignee = $assignment['assign']; 101*a3d1e459SAndreas Gohr 102*a3d1e459SAndreas Gohr $link = wl($ID, array( 103*a3d1e459SAndreas Gohr 'do' => 'admin', 104*a3d1e459SAndreas Gohr 'page' => 'struct_assignments', 105*a3d1e459SAndreas Gohr 'action' => 'delete', 106*a3d1e459SAndreas Gohr 'sectok' => getSecurityToken(), 107*a3d1e459SAndreas Gohr 'assignment[tbl]' => $schema, 108*a3d1e459SAndreas Gohr 'assignment[assign]' => $assignee, 109*a3d1e459SAndreas Gohr )); 110*a3d1e459SAndreas Gohr 111*a3d1e459SAndreas Gohr echo '<tr>'; 112*a3d1e459SAndreas Gohr echo '<td>'.hsc($assignee).'</td>'; 113*a3d1e459SAndreas Gohr echo '<td>'.hsc($schema).'</td>'; 114*a3d1e459SAndreas Gohr echo '<td><a href="'.$link.'">Delete</a></td>'; //FIXME localize 115*a3d1e459SAndreas Gohr echo '</tr>'; 11687fdbc6bSMichael Große } 117*a3d1e459SAndreas Gohr 118*a3d1e459SAndreas Gohr // new assignment form 119*a3d1e459SAndreas Gohr echo '<tr>'; 120*a3d1e459SAndreas Gohr echo '<td><input type="text" name="assignment[assign]" /></td>'; 121*a3d1e459SAndreas Gohr echo '<td>'; 122*a3d1e459SAndreas Gohr echo '<select name="assignment[tbl]">'; 12387fdbc6bSMichael Große foreach ($schemas as $schema){ 124*a3d1e459SAndreas Gohr echo '<option value="'. hsc($schema['tbl']) .'">'. hsc($schema['tbl']) . '</option>'; 12587fdbc6bSMichael Große } 126*a3d1e459SAndreas Gohr echo '</select>'; 127*a3d1e459SAndreas Gohr echo '</td>'; 128*a3d1e459SAndreas Gohr echo '<td><button type="submit" name="action" value="add">Add</button></td>'; // FIXME localize 129*a3d1e459SAndreas Gohr echo '</tr>'; 130*a3d1e459SAndreas Gohr 131*a3d1e459SAndreas Gohr echo '</table>'; 13287fdbc6bSMichael Große } 133dbffe06eSAndreas Gohr 134dbffe06eSAndreas Gohr /** 135dbffe06eSAndreas Gohr * Copies the TOC from the Schema Editor 136dbffe06eSAndreas Gohr * 137dbffe06eSAndreas Gohr * @return array 138dbffe06eSAndreas Gohr */ 139dbffe06eSAndreas Gohr public function getTOC() { 140dbffe06eSAndreas Gohr /** @var admin_plugin_struct_schemas $plugin */ 141dbffe06eSAndreas Gohr $plugin = plugin_load('admin', 'struct_schemas'); 142dbffe06eSAndreas Gohr return $plugin->getTOC(); 14387fdbc6bSMichael Große } 14487fdbc6bSMichael Große 14587fdbc6bSMichael Große} 14687fdbc6bSMichael Große 14787fdbc6bSMichael Große// vim:ts=4:sw=4:et: 148