1<?php 2 3use dokuwiki\Extension\AdminPlugin; 4use dokuwiki\Extension\Event; 5 6class admin_plugin_approve extends AdminPlugin 7{ 8 /** 9 * @return int sort number in admin menu 10 */ 11 public function getMenuSort() 12 { 13 return 1; 14 } 15 16 /** 17 * Should carry out any processing required by the plugin. 18 */ 19 public function handle() 20 { 21 global $ID; 22 /* @var Input */ 23 global $INPUT; 24 25 /** @var helper_plugin_approve_data $db */ 26 $db = $this->loadHelper('approve_data'); 27 28 if($INPUT->str('action') && $INPUT->arr('assignment') && checkSecurityToken()) { 29 $assignment = $INPUT->arr('assignment'); 30 //insert empty string as NULL 31 if ($INPUT->str('action') === 'delete') { 32 $db->deleteMaintainer((int) $assignment['id']); 33 $db->updatePagesAssignments(); 34 } else if ($INPUT->str('action') === 'add' && !blank($assignment['assign'])) { 35 $approver = ''; 36 if (!blank($assignment['approver'])) { 37 $approver = $assignment['approver']; 38 } elseif (!blank($assignment['approver_fb'])) { 39 $approver = $assignment['approver_fb']; 40 } 41 $db->addMaintainer($assignment['assign'], $approver); 42 43 // TODO: Transaction must be commit before updatePageAssignments 44 $db->updatePagesAssignments(); 45 } 46 47 send_redirect(wl($ID, array('do' => 'admin', 'page' => 'approve'), true, '&')); 48 } 49 } 50 51 /** 52 * Render HTML output, e.g. helpful text and a form 53 */ 54 public function html() 55 { 56 global $ID; 57 /* @var DokuWiki_Auth_Plugin $auth */ 58 global $auth; 59 60 try { 61 /** @var \helper_plugin_approve_db $db_helper */ 62 $db_helper = plugin_load('helper', 'approve_db'); 63 $sqlite = $db_helper->getDB(); 64 } catch (Exception $e) { 65 msg($e->getMessage(), -1); 66 return; 67 } 68 69 $res = $sqlite->query('SELECT * FROM maintainer ORDER BY namespace'); 70 $assignments = $sqlite->res2arr($res); 71 72 echo $this->locale_xhtml('assignments_intro'); 73 74 echo '<form action="' . wl($ID) . '" action="post">'; 75 echo '<input type="hidden" name="do" value="admin" />'; 76 echo '<input type="hidden" name="page" value="approve" />'; 77 echo '<input type="hidden" name="sectok" value="' . getSecurityToken() . '" />'; 78 echo '<table class="inline">'; 79 80 // header 81 echo '<tr>'; 82 echo '<th>'.$this->getLang('admin h_assignment_namespace').'</th>'; 83 echo '<th>'.$this->getLang('admin h_assignment_approver').'</th>'; 84 echo '<th></th>'; 85 echo '</tr>'; 86 87 // existing assignments 88 foreach($assignments as $assignment) { 89 $id = $assignment['id']; 90 $namespace = $assignment['namespace']; 91 $approver = $assignment['approver'] ? $assignment['approver'] : '---'; 92 93 $link = wl( 94 $ID, array( 95 'do' => 'admin', 96 'page' => 'approve', 97 'action' => 'delete', 98 'sectok' => getSecurityToken(), 99 'assignment[id]' => $id 100 ) 101 ); 102 103 echo '<tr>'; 104 echo '<td>' . hsc($namespace) . '</td>'; 105 $user = $auth->getUserData($approver); 106 if ($user) { 107 echo '<td>' . hsc($user['name']) . '</td>'; 108 } else { 109 echo '<td>' . hsc($approver) . '</td>'; 110 } 111 echo '<td><a href="' . $link . '">'.$this->getLang('admin btn_delete').'</a></td>'; 112 echo '</tr>'; 113 } 114 115 // new assignment form 116 echo '<tr>'; 117 echo '<td><input type="text" name="assignment[assign]" /></td>'; 118 echo '<td>'; 119 if ($auth->canDo('getUsers')) { 120 echo '<select name="assignment[approver]">'; 121 echo '<option value="">---</option>'; 122 if ($auth->canDo('getGroups')) { 123 foreach($auth->retrieveGroups() as $group) { 124 echo '<option value="@' . hsc($group) . '">' . '@' . hsc($group) . '</option>'; 125 } 126 } 127 foreach($auth->retrieveUsers() as $login => $data) { 128 echo '<option value="' . hsc($login) . '">' . hsc($data['name']) . '</option>'; 129 } 130 echo '</select>'; 131 // in case your auth plugin can do groups, but not list them (like the default one), 132 // leave a text field as backup 133 if (!$auth->canDo('getGroups')) { 134 echo '<input name="assignment[approver_fb]" id="plugin__approve_group_input">'; 135 } 136 } else { 137 echo '<input name="assignment[approver]">'; 138 } 139 echo '</td>'; 140 141 echo '<td><button type="submit" name="action" value="add">'.$this->getLang('admin btn_add').'</button></td>'; 142 echo '</tr>'; 143 144 echo '</table>'; 145 } 146} 147 148// vim:ts=4:sw=4:et: 149