11b552e87SSzymon Olewniczak<?php 21b552e87SSzymon Olewniczak 31989ee26SSzymon Olewniczakuse dokuwiki\Extension\AdminPlugin; 41989ee26SSzymon Olewniczakuse dokuwiki\Extension\Event; 51b552e87SSzymon Olewniczak 61989ee26SSzymon Olewniczakclass admin_plugin_approve extends AdminPlugin 71b552e87SSzymon Olewniczak{ 81b552e87SSzymon Olewniczak /** 91b552e87SSzymon Olewniczak * @return int sort number in admin menu 101b552e87SSzymon Olewniczak */ 111b552e87SSzymon Olewniczak public function getMenuSort() 121b552e87SSzymon Olewniczak { 131b552e87SSzymon Olewniczak return 1; 141b552e87SSzymon Olewniczak } 151b552e87SSzymon Olewniczak 161b552e87SSzymon Olewniczak /** 171b552e87SSzymon Olewniczak * Should carry out any processing required by the plugin. 181b552e87SSzymon Olewniczak */ 191b552e87SSzymon Olewniczak public function handle() 201b552e87SSzymon Olewniczak { 21086ec97fSSzymon Olewniczak global $ID; 221b552e87SSzymon Olewniczak /* @var Input */ 231b552e87SSzymon Olewniczak global $INPUT; 241b552e87SSzymon Olewniczak 25*b59355cdSSzymon Olewniczak /** @var helper_plugin_approve_db $db */ 26*b59355cdSSzymon Olewniczak $db = $this->loadHelper('approve_db'); 270c60a293SSzymon Olewniczak 28086ec97fSSzymon Olewniczak if($INPUT->str('action') && $INPUT->arr('assignment') && checkSecurityToken()) { 29086ec97fSSzymon Olewniczak $assignment = $INPUT->arr('assignment'); 30086ec97fSSzymon Olewniczak //insert empty string as NULL 31086ec97fSSzymon Olewniczak if ($INPUT->str('action') === 'delete') { 321989ee26SSzymon Olewniczak $db->deleteMaintainer((int) $assignment['id']); 331989ee26SSzymon Olewniczak $db->updatePagesAssignments(); 34086ec97fSSzymon Olewniczak } else if ($INPUT->str('action') === 'add' && !blank($assignment['assign'])) { 351989ee26SSzymon Olewniczak $approver = ''; 362ce523c6SSzymon Olewniczak if (!blank($assignment['approver'])) { 371989ee26SSzymon Olewniczak $approver = $assignment['approver']; 3891f47af0SErik Inge Bolsø } elseif (!blank($assignment['approver_fb'])) { 391989ee26SSzymon Olewniczak $approver = $assignment['approver_fb']; 401b552e87SSzymon Olewniczak } 411989ee26SSzymon Olewniczak $db->addMaintainer($assignment['assign'], $approver); 421989ee26SSzymon Olewniczak $db->updatePagesAssignments(); 431b552e87SSzymon Olewniczak } 44086ec97fSSzymon Olewniczak 45086ec97fSSzymon Olewniczak send_redirect(wl($ID, array('do' => 'admin', 'page' => 'approve'), true, '&')); 461b552e87SSzymon Olewniczak } 471b552e87SSzymon Olewniczak } 481b552e87SSzymon Olewniczak 491b552e87SSzymon Olewniczak /** 501b552e87SSzymon Olewniczak * Render HTML output, e.g. helpful text and a form 511b552e87SSzymon Olewniczak */ 521b552e87SSzymon Olewniczak public function html() 531b552e87SSzymon Olewniczak { 541b552e87SSzymon Olewniczak global $ID; 557e838775SSzymon Olewniczak /* @var DokuWiki_Auth_Plugin $auth */ 56086ec97fSSzymon Olewniczak global $auth; 571b552e87SSzymon Olewniczak 58086ec97fSSzymon Olewniczak echo $this->locale_xhtml('assignments_intro'); 591b552e87SSzymon Olewniczak 60086ec97fSSzymon Olewniczak echo '<form action="' . wl($ID) . '" action="post">'; 61086ec97fSSzymon Olewniczak echo '<input type="hidden" name="do" value="admin" />'; 62086ec97fSSzymon Olewniczak echo '<input type="hidden" name="page" value="approve" />'; 63086ec97fSSzymon Olewniczak echo '<input type="hidden" name="sectok" value="' . getSecurityToken() . '" />'; 64086ec97fSSzymon Olewniczak echo '<table class="inline">'; 651b552e87SSzymon Olewniczak 66086ec97fSSzymon Olewniczak // header 67086ec97fSSzymon Olewniczak echo '<tr>'; 68086ec97fSSzymon Olewniczak echo '<th>'.$this->getLang('admin h_assignment_namespace').'</th>'; 692ce523c6SSzymon Olewniczak echo '<th>'.$this->getLang('admin h_assignment_approver').'</th>'; 70086ec97fSSzymon Olewniczak echo '<th></th>'; 71086ec97fSSzymon Olewniczak echo '</tr>'; 721b552e87SSzymon Olewniczak 73*b59355cdSSzymon Olewniczak /** @var helper_plugin_approve_db $db */ 74*b59355cdSSzymon Olewniczak $db = $this->loadHelper('approve_db'); 75*b59355cdSSzymon Olewniczak $assignments = $db->getMaintainers(); 76*b59355cdSSzymon Olewniczak 77086ec97fSSzymon Olewniczak foreach($assignments as $assignment) { 78086ec97fSSzymon Olewniczak $id = $assignment['id']; 79086ec97fSSzymon Olewniczak $namespace = $assignment['namespace']; 80*b59355cdSSzymon Olewniczak $approver = $assignment['approver'] ?: '---'; 811b552e87SSzymon Olewniczak 82086ec97fSSzymon Olewniczak $link = wl( 83086ec97fSSzymon Olewniczak $ID, array( 841b552e87SSzymon Olewniczak 'do' => 'admin', 85086ec97fSSzymon Olewniczak 'page' => 'approve', 86086ec97fSSzymon Olewniczak 'action' => 'delete', 87086ec97fSSzymon Olewniczak 'sectok' => getSecurityToken(), 88086ec97fSSzymon Olewniczak 'assignment[id]' => $id 89086ec97fSSzymon Olewniczak ) 90086ec97fSSzymon Olewniczak ); 911b552e87SSzymon Olewniczak 92086ec97fSSzymon Olewniczak echo '<tr>'; 93086ec97fSSzymon Olewniczak echo '<td>' . hsc($namespace) . '</td>'; 942ce523c6SSzymon Olewniczak $user = $auth->getUserData($approver); 95c7d53eabSSzymon Olewniczak if ($user) { 96c7d53eabSSzymon Olewniczak echo '<td>' . hsc($user['name']) . '</td>'; 97c7d53eabSSzymon Olewniczak } else { 982ce523c6SSzymon Olewniczak echo '<td>' . hsc($approver) . '</td>'; 99c7d53eabSSzymon Olewniczak } 100086ec97fSSzymon Olewniczak echo '<td><a href="' . $link . '">'.$this->getLang('admin btn_delete').'</a></td>'; 101086ec97fSSzymon Olewniczak echo '</tr>'; 1021b552e87SSzymon Olewniczak } 1031b552e87SSzymon Olewniczak 104086ec97fSSzymon Olewniczak // new assignment form 105086ec97fSSzymon Olewniczak echo '<tr>'; 106086ec97fSSzymon Olewniczak echo '<td><input type="text" name="assignment[assign]" /></td>'; 107086ec97fSSzymon Olewniczak echo '<td>'; 1086dbb709bSSzymon Olewniczak if ($auth->canDo('getUsers')) { 1092ce523c6SSzymon Olewniczak echo '<select name="assignment[approver]">'; 110086ec97fSSzymon Olewniczak echo '<option value="">---</option>'; 11191f47af0SErik Inge Bolsø if ($auth->canDo('getGroups')) { 11291f47af0SErik Inge Bolsø foreach($auth->retrieveGroups() as $group) { 11391f47af0SErik Inge Bolsø echo '<option value="@' . hsc($group) . '">' . '@' . hsc($group) . '</option>'; 11491f47af0SErik Inge Bolsø } 11591f47af0SErik Inge Bolsø } 116086ec97fSSzymon Olewniczak foreach($auth->retrieveUsers() as $login => $data) { 117086ec97fSSzymon Olewniczak echo '<option value="' . hsc($login) . '">' . hsc($data['name']) . '</option>'; 1181b552e87SSzymon Olewniczak } 119086ec97fSSzymon Olewniczak echo '</select>'; 12091f47af0SErik Inge Bolsø // in case your auth plugin can do groups, but not list them (like the default one), 12191f47af0SErik Inge Bolsø // leave a text field as backup 1223e6f089eSSzymon Olewniczak if (!$auth->canDo('getGroups')) { 1233e6f089eSSzymon Olewniczak echo '<input name="assignment[approver_fb]" id="plugin__approve_group_input">'; 1243e6f089eSSzymon Olewniczak } 1256dbb709bSSzymon Olewniczak } else { 1266dbb709bSSzymon Olewniczak echo '<input name="assignment[approver]">'; 1276dbb709bSSzymon Olewniczak } 128086ec97fSSzymon Olewniczak echo '</td>'; 1296dbb709bSSzymon Olewniczak 130086ec97fSSzymon Olewniczak echo '<td><button type="submit" name="action" value="add">'.$this->getLang('admin btn_add').'</button></td>'; 131086ec97fSSzymon Olewniczak echo '</tr>'; 1321b552e87SSzymon Olewniczak 133086ec97fSSzymon Olewniczak echo '</table>'; 1341b552e87SSzymon Olewniczak } 1351b552e87SSzymon Olewniczak} 1361b552e87SSzymon Olewniczak 1371b552e87SSzymon Olewniczak// vim:ts=4:sw=4:et: 138