1<?php 2 3/** 4 * DokuWiki Plugin struct (Admin Component) 5 * 6 * @license GPL 2 http://www.gnu.org/licenses/gpl-2.0.html 7 * @author Andreas Gohr, Michael Große <dokuwiki@cosmocode.de> 8 */ 9 10// must be run within Dokuwiki 11use dokuwiki\plugin\struct\meta\Assignments; 12use dokuwiki\plugin\struct\meta\Schema; 13use dokuwiki\plugin\struct\meta\StructException; 14 15if (!defined('DOKU_INC')) die(); 16 17class admin_plugin_struct_assignments extends DokuWiki_Admin_Plugin 18{ 19 20 /** 21 * @return int sort number in admin menu 22 */ 23 public function getMenuSort() 24 { 25 return 501; 26 } 27 28 /** 29 * Return the text that is displayed at the main admin menu 30 * 31 * @param string $language language code 32 * @return string menu string 33 */ 34 public function getMenuText($language) 35 { 36 return $this->getLang('menu_assignments'); 37 } 38 39 /** 40 * @return bool true if only access for superuser, false is for superusers and moderators 41 */ 42 public function forAdminOnly() 43 { 44 return false; 45 } 46 47 /** 48 * Should carry out any processing required by the plugin. 49 */ 50 public function handle() 51 { 52 global $INPUT; 53 global $ID; 54 55 try { 56 $assignments = Assignments::getInstance(); 57 } catch (StructException $e) { 58 msg($e->getMessage(), -1); 59 return false; 60 } 61 62 if ($INPUT->str('action') && $INPUT->arr('assignment') && checkSecurityToken()) { 63 $assignment = $INPUT->arr('assignment'); 64 if (!blank($assignment['assign']) && !blank($assignment['tbl'])) { 65 if ($INPUT->str('action') === 'delete') { 66 $ok = $assignments->removePattern($assignment['assign'], $assignment['tbl']); 67 if (!$ok) msg('failed to remove pattern', -1); 68 } elseif ($INPUT->str('action') === 'add') { 69 if ($assignment['assign'][0] == '/') { 70 if (@preg_match($assignment['assign'], null) === false) { 71 msg('Invalid regular expression. Pattern not saved', -1); 72 } else { 73 $ok = $assignments->addPattern($assignment['assign'], $assignment['tbl']); 74 if (!$ok) msg('failed to add pattern', -1); 75 } 76 } else { 77 $ok = $assignments->addPattern($assignment['assign'], $assignment['tbl']); 78 if (!$ok) msg('failed to add pattern', -1); 79 } 80 } 81 } 82 83 84 85 send_redirect(wl($ID, array('do' => 'admin', 'page' => 'struct_assignments'), true, '&')); 86 } 87 } 88 89 /** 90 * Render HTML output, e.g. helpful text and a form 91 */ 92 public function html() 93 { 94 global $ID; 95 96 echo $this->locale_xhtml('assignments_intro'); 97 98 try { 99 $ass = Assignments::getInstance(); 100 } catch (StructException $e) { 101 msg($e->getMessage(), -1); 102 return false; 103 } 104 $assignments = $ass->getAllPatterns(); 105 106 echo '<form action="' . wl($ID) . '" action="post">'; 107 echo '<input type="hidden" name="do" value="admin" />'; 108 echo '<input type="hidden" name="page" value="struct_assignments" />'; 109 echo '<input type="hidden" name="sectok" value="' . getSecurityToken() . '" />'; 110 echo '<table class="inline">'; 111 112 // header 113 echo '<tr>'; 114 echo '<th>' . $this->getLang('assign_assign') . '</th>'; 115 echo '<th>' . $this->getLang('assign_tbl') . '</th>'; 116 echo '<th></th>'; 117 echo '</tr>'; 118 119 // existing assignments 120 foreach ($assignments as $assignment) { 121 $schema = $assignment['tbl']; 122 $assignee = $assignment['pattern']; 123 124 $link = wl( 125 $ID, 126 array( 127 'do' => 'admin', 128 'page' => 'struct_assignments', 129 'action' => 'delete', 130 'sectok' => getSecurityToken(), 131 'assignment[tbl]' => $schema, 132 'assignment[assign]' => $assignee, 133 ) 134 ); 135 136 echo '<tr>'; 137 echo '<td>' . hsc($assignee) . '</td>'; 138 echo '<td>' . hsc($schema) . '</td>'; 139 echo '<td><a class="deleteSchema" href="' . $link . '">' . $this->getLang('assign_del') . '</a></td>'; 140 echo '</tr>'; 141 } 142 143 // new assignment form 144 echo '<tr>'; 145 echo '<td><input type="text" name="assignment[assign]" /></td>'; 146 echo '<td>'; 147 echo '<select name="assignment[tbl]">'; 148 foreach (Schema::getAll() as $table) { 149 echo '<option value="' . hsc($table) . '">' . hsc($table) . '</option>'; 150 } 151 echo '</select>'; 152 echo '</td>'; 153 echo '<td><button type="submit" name="action" value="add">' . $this->getLang('assign_add') . '</button></td>'; 154 echo '</tr>'; 155 156 echo '</table>'; 157 echo '</form>'; 158 } 159 160 /** 161 * Copies the TOC from the Schema Editor 162 * 163 * @return array 164 */ 165 public function getTOC() 166 { 167 /** @var admin_plugin_struct_schemas $plugin */ 168 $plugin = plugin_load('admin', 'struct_schemas'); 169 return $plugin->getTOC(); 170 } 171} 172 173// vim:ts=4:sw=4:et: 174