11b552e87SSzymon Olewniczak<?php 21b552e87SSzymon Olewniczak 3*1989ee26SSzymon Olewniczakuse dokuwiki\Extension\AdminPlugin; 4*1989ee26SSzymon Olewniczakuse dokuwiki\Extension\Event; 51b552e87SSzymon Olewniczak 6*1989ee26SSzymon 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*1989ee26SSzymon Olewniczak /** @var helper_plugin_approve_data $db */ 26*1989ee26SSzymon Olewniczak $db = $this->loadHelper('approve_data'); 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') { 32*1989ee26SSzymon Olewniczak $db->deleteMaintainer((int) $assignment['id']); 33*1989ee26SSzymon Olewniczak $db->updatePagesAssignments(); 34086ec97fSSzymon Olewniczak } else if ($INPUT->str('action') === 'add' && !blank($assignment['assign'])) { 35*1989ee26SSzymon Olewniczak $approver = ''; 362ce523c6SSzymon Olewniczak if (!blank($assignment['approver'])) { 37*1989ee26SSzymon Olewniczak $approver = $assignment['approver']; 3891f47af0SErik Inge Bolsø } elseif (!blank($assignment['approver_fb'])) { 39*1989ee26SSzymon Olewniczak $approver = $assignment['approver_fb']; 401b552e87SSzymon Olewniczak } 41*1989ee26SSzymon Olewniczak $db->addMaintainer($assignment['assign'], $approver); 42b1ff32a1SSzymon Olewniczak 43*1989ee26SSzymon Olewniczak // TODO: Transaction must be commit before updatePageAssignments 44*1989ee26SSzymon Olewniczak $db->updatePagesAssignments(); 451b552e87SSzymon Olewniczak } 46086ec97fSSzymon Olewniczak 47086ec97fSSzymon Olewniczak send_redirect(wl($ID, array('do' => 'admin', 'page' => 'approve'), true, '&')); 481b552e87SSzymon Olewniczak } 491b552e87SSzymon Olewniczak } 501b552e87SSzymon Olewniczak 511b552e87SSzymon Olewniczak /** 521b552e87SSzymon Olewniczak * Render HTML output, e.g. helpful text and a form 531b552e87SSzymon Olewniczak */ 541b552e87SSzymon Olewniczak public function html() 551b552e87SSzymon Olewniczak { 561b552e87SSzymon Olewniczak global $ID; 577e838775SSzymon Olewniczak /* @var DokuWiki_Auth_Plugin $auth */ 58086ec97fSSzymon Olewniczak global $auth; 591b552e87SSzymon Olewniczak 600c60a293SSzymon Olewniczak try { 610c60a293SSzymon Olewniczak /** @var \helper_plugin_approve_db $db_helper */ 620c60a293SSzymon Olewniczak $db_helper = plugin_load('helper', 'approve_db'); 630c60a293SSzymon Olewniczak $sqlite = $db_helper->getDB(); 640c60a293SSzymon Olewniczak } catch (Exception $e) { 650c60a293SSzymon Olewniczak msg($e->getMessage(), -1); 660c60a293SSzymon Olewniczak return; 670c60a293SSzymon Olewniczak } 680c60a293SSzymon Olewniczak 690c60a293SSzymon Olewniczak $res = $sqlite->query('SELECT * FROM maintainer ORDER BY namespace'); 700c60a293SSzymon Olewniczak $assignments = $sqlite->res2arr($res); 711b552e87SSzymon Olewniczak 72086ec97fSSzymon Olewniczak echo $this->locale_xhtml('assignments_intro'); 731b552e87SSzymon Olewniczak 74086ec97fSSzymon Olewniczak echo '<form action="' . wl($ID) . '" action="post">'; 75086ec97fSSzymon Olewniczak echo '<input type="hidden" name="do" value="admin" />'; 76086ec97fSSzymon Olewniczak echo '<input type="hidden" name="page" value="approve" />'; 77086ec97fSSzymon Olewniczak echo '<input type="hidden" name="sectok" value="' . getSecurityToken() . '" />'; 78086ec97fSSzymon Olewniczak echo '<table class="inline">'; 791b552e87SSzymon Olewniczak 80086ec97fSSzymon Olewniczak // header 81086ec97fSSzymon Olewniczak echo '<tr>'; 82086ec97fSSzymon Olewniczak echo '<th>'.$this->getLang('admin h_assignment_namespace').'</th>'; 832ce523c6SSzymon Olewniczak echo '<th>'.$this->getLang('admin h_assignment_approver').'</th>'; 84086ec97fSSzymon Olewniczak echo '<th></th>'; 85086ec97fSSzymon Olewniczak echo '</tr>'; 861b552e87SSzymon Olewniczak 87086ec97fSSzymon Olewniczak // existing assignments 88086ec97fSSzymon Olewniczak foreach($assignments as $assignment) { 89086ec97fSSzymon Olewniczak $id = $assignment['id']; 90086ec97fSSzymon Olewniczak $namespace = $assignment['namespace']; 912ce523c6SSzymon Olewniczak $approver = $assignment['approver'] ? $assignment['approver'] : '---'; 921b552e87SSzymon Olewniczak 93086ec97fSSzymon Olewniczak $link = wl( 94086ec97fSSzymon Olewniczak $ID, array( 951b552e87SSzymon Olewniczak 'do' => 'admin', 96086ec97fSSzymon Olewniczak 'page' => 'approve', 97086ec97fSSzymon Olewniczak 'action' => 'delete', 98086ec97fSSzymon Olewniczak 'sectok' => getSecurityToken(), 99086ec97fSSzymon Olewniczak 'assignment[id]' => $id 100086ec97fSSzymon Olewniczak ) 101086ec97fSSzymon Olewniczak ); 1021b552e87SSzymon Olewniczak 103086ec97fSSzymon Olewniczak echo '<tr>'; 104086ec97fSSzymon Olewniczak echo '<td>' . hsc($namespace) . '</td>'; 1052ce523c6SSzymon Olewniczak $user = $auth->getUserData($approver); 106c7d53eabSSzymon Olewniczak if ($user) { 107c7d53eabSSzymon Olewniczak echo '<td>' . hsc($user['name']) . '</td>'; 108c7d53eabSSzymon Olewniczak } else { 1092ce523c6SSzymon Olewniczak echo '<td>' . hsc($approver) . '</td>'; 110c7d53eabSSzymon Olewniczak } 111086ec97fSSzymon Olewniczak echo '<td><a href="' . $link . '">'.$this->getLang('admin btn_delete').'</a></td>'; 112086ec97fSSzymon Olewniczak echo '</tr>'; 1131b552e87SSzymon Olewniczak } 1141b552e87SSzymon Olewniczak 115086ec97fSSzymon Olewniczak // new assignment form 116086ec97fSSzymon Olewniczak echo '<tr>'; 117086ec97fSSzymon Olewniczak echo '<td><input type="text" name="assignment[assign]" /></td>'; 118086ec97fSSzymon Olewniczak echo '<td>'; 1196dbb709bSSzymon Olewniczak if ($auth->canDo('getUsers')) { 1202ce523c6SSzymon Olewniczak echo '<select name="assignment[approver]">'; 121086ec97fSSzymon Olewniczak echo '<option value="">---</option>'; 12291f47af0SErik Inge Bolsø if ($auth->canDo('getGroups')) { 12391f47af0SErik Inge Bolsø foreach($auth->retrieveGroups() as $group) { 12491f47af0SErik Inge Bolsø echo '<option value="@' . hsc($group) . '">' . '@' . hsc($group) . '</option>'; 12591f47af0SErik Inge Bolsø } 12691f47af0SErik Inge Bolsø } 127086ec97fSSzymon Olewniczak foreach($auth->retrieveUsers() as $login => $data) { 128086ec97fSSzymon Olewniczak echo '<option value="' . hsc($login) . '">' . hsc($data['name']) . '</option>'; 1291b552e87SSzymon Olewniczak } 130086ec97fSSzymon Olewniczak echo '</select>'; 13191f47af0SErik Inge Bolsø // in case your auth plugin can do groups, but not list them (like the default one), 13291f47af0SErik Inge Bolsø // leave a text field as backup 1333e6f089eSSzymon Olewniczak if (!$auth->canDo('getGroups')) { 1343e6f089eSSzymon Olewniczak echo '<input name="assignment[approver_fb]" id="plugin__approve_group_input">'; 1353e6f089eSSzymon Olewniczak } 1366dbb709bSSzymon Olewniczak } else { 1376dbb709bSSzymon Olewniczak echo '<input name="assignment[approver]">'; 1386dbb709bSSzymon Olewniczak } 139086ec97fSSzymon Olewniczak echo '</td>'; 1406dbb709bSSzymon Olewniczak 141086ec97fSSzymon Olewniczak echo '<td><button type="submit" name="action" value="add">'.$this->getLang('admin btn_add').'</button></td>'; 142086ec97fSSzymon Olewniczak echo '</tr>'; 1431b552e87SSzymon Olewniczak 144086ec97fSSzymon Olewniczak echo '</table>'; 1451b552e87SSzymon Olewniczak } 1461b552e87SSzymon Olewniczak} 1471b552e87SSzymon Olewniczak 1481b552e87SSzymon Olewniczak// vim:ts=4:sw=4:et: 149