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