1877c5a1bSSatoshi Sahara<?php 2877c5a1bSSatoshi Sahara 3877c5a1bSSatoshi Saharanamespace dokuwiki\Ui; 4877c5a1bSSatoshi Sahara 579a2d784SGerrit Uitslaguse dokuwiki\Extension\AuthPlugin; 6877c5a1bSSatoshi Saharause dokuwiki\Form\Form; 7*455aa67eSAndreas Gohruse dokuwiki\JWT; 8877c5a1bSSatoshi Sahara 9877c5a1bSSatoshi Sahara/** 10f9dfcbbeSSatoshi Sahara * DokuWiki User Profile Interface 11877c5a1bSSatoshi Sahara * 12877c5a1bSSatoshi Sahara * @package dokuwiki\Ui 13877c5a1bSSatoshi Sahara */ 14877c5a1bSSatoshi Saharaclass UserProfile extends Ui 15877c5a1bSSatoshi Sahara{ 16877c5a1bSSatoshi Sahara /** 17877c5a1bSSatoshi Sahara * Display the User Profile Form Panel 18877c5a1bSSatoshi Sahara * 19e2d055f5SAndreas Gohr * @return void 20877c5a1bSSatoshi Sahara * @author Andreas Gohr <andi@splitbrain.org> 21877c5a1bSSatoshi Sahara * 22877c5a1bSSatoshi Sahara */ 23877c5a1bSSatoshi Sahara public function show() 24877c5a1bSSatoshi Sahara { 25877c5a1bSSatoshi Sahara /** @var AuthPlugin $auth */ 26877c5a1bSSatoshi Sahara global $auth; 27*455aa67eSAndreas Gohr global $INFO; 28*455aa67eSAndreas Gohr global $INPUT; 29877c5a1bSSatoshi Sahara 30*455aa67eSAndreas Gohr $userinfo = [ 31*455aa67eSAndreas Gohr 'user' => $_SERVER['REMOTE_USER'], 32*455aa67eSAndreas Gohr 'name' => $INPUT->post->str('fullname', $INFO['userinfo']['name'], true), 33*455aa67eSAndreas Gohr 'mail' => $INPUT->post->str('email', $INFO['userinfo']['mail'], true), 34*455aa67eSAndreas Gohr 35*455aa67eSAndreas Gohr ]; 36*455aa67eSAndreas Gohr 3726dfc232SAndreas Gohr echo p_locale_xhtml('updateprofile'); 3826dfc232SAndreas Gohr echo '<div class="centeralign">'; 39877c5a1bSSatoshi Sahara 40*455aa67eSAndreas Gohr echo $this->updateProfileForm($userinfo)->toHTML('UpdateProfile'); 41*455aa67eSAndreas Gohr echo $this->tokenForm($userinfo['user'])->toHTML(); 42*455aa67eSAndreas Gohr if ($auth->canDo('delUser') && actionOK('profile_delete')) { 43*455aa67eSAndreas Gohr $this->deleteProfileForm()->toHTML('ProfileDelete'); 44*455aa67eSAndreas Gohr } 45877c5a1bSSatoshi Sahara 46*455aa67eSAndreas Gohr echo '</div>'; 47*455aa67eSAndreas Gohr } 48*455aa67eSAndreas Gohr 49*455aa67eSAndreas Gohr /** 50*455aa67eSAndreas Gohr * Add the password confirmation field to the form if configured 51*455aa67eSAndreas Gohr * 52*455aa67eSAndreas Gohr * @param Form $form 53*455aa67eSAndreas Gohr * @return void 54*455aa67eSAndreas Gohr */ 55*455aa67eSAndreas Gohr protected function addPasswordConfirmation(Form $form) 56*455aa67eSAndreas Gohr { 57*455aa67eSAndreas Gohr global $lang; 58*455aa67eSAndreas Gohr global $conf; 59*455aa67eSAndreas Gohr 60*455aa67eSAndreas Gohr if (!$conf['profileconfirm']) return; 61*455aa67eSAndreas Gohr $form->addHTML("<br>\n"); 62*455aa67eSAndreas Gohr $attr = ['size' => '50', 'required' => 'required']; 63*455aa67eSAndreas Gohr $input = $form->addPasswordInput('oldpass', $lang['oldpass'])->attrs($attr) 64*455aa67eSAndreas Gohr ->addClass('edit'); 65*455aa67eSAndreas Gohr $input->getLabel()->attr('class', 'block'); 66*455aa67eSAndreas Gohr $form->addHTML("<br>\n"); 67*455aa67eSAndreas Gohr } 68*455aa67eSAndreas Gohr 69*455aa67eSAndreas Gohr /** 70*455aa67eSAndreas Gohr * Create the profile form 71*455aa67eSAndreas Gohr * 72*455aa67eSAndreas Gohr * @return Form 73*455aa67eSAndreas Gohr */ 74*455aa67eSAndreas Gohr protected function updateProfileForm($userinfo) 75*455aa67eSAndreas Gohr { 76*455aa67eSAndreas Gohr global $lang; 77*455aa67eSAndreas Gohr /** @var AuthPlugin $auth */ 78*455aa67eSAndreas Gohr global $auth; 79*455aa67eSAndreas Gohr 80877c5a1bSSatoshi Sahara $form = new Form(['id' => 'dw__register']); 81877c5a1bSSatoshi Sahara $form->addTagOpen('div')->addClass('no'); 82877c5a1bSSatoshi Sahara $form->addFieldsetOpen($lang['profile']); 83877c5a1bSSatoshi Sahara $form->setHiddenField('do', 'profile'); 84877c5a1bSSatoshi Sahara $form->setHiddenField('save', '1'); 85877c5a1bSSatoshi Sahara 86e2d055f5SAndreas Gohr $attr = ['size' => '50', 'disabled' => 'disabled']; 87*455aa67eSAndreas Gohr $input = $form->addTextInput('login', $lang['user']) 88*455aa67eSAndreas Gohr ->attrs($attr) 89*455aa67eSAndreas Gohr ->addClass('edit') 90*455aa67eSAndreas Gohr ->val($userinfo['user']); 91877c5a1bSSatoshi Sahara $input->getLabel()->attr('class', 'block'); 92877c5a1bSSatoshi Sahara $form->addHTML("<br>\n"); 93877c5a1bSSatoshi Sahara 94e2d055f5SAndreas Gohr $attr = ['size' => '50']; 95877c5a1bSSatoshi Sahara if (!$auth->canDo('modName')) $attr['disabled'] = 'disabled'; 96*455aa67eSAndreas Gohr $input = $form->addTextInput('fullname', $lang['fullname']) 97*455aa67eSAndreas Gohr ->attrs($attr) 98*455aa67eSAndreas Gohr ->addClass('edit') 99*455aa67eSAndreas Gohr ->val($userinfo['name']); 100877c5a1bSSatoshi Sahara $input->getLabel()->attr('class', 'block'); 101877c5a1bSSatoshi Sahara $form->addHTML("<br>\n"); 102877c5a1bSSatoshi Sahara 103e2d055f5SAndreas Gohr $attr = ['type' => 'email', 'size' => '50']; 104877c5a1bSSatoshi Sahara if (!$auth->canDo('modMail')) $attr['disabled'] = 'disabled'; 105*455aa67eSAndreas Gohr $input = $form->addTextInput('email', $lang['email']) 106*455aa67eSAndreas Gohr ->attrs($attr) 107*455aa67eSAndreas Gohr ->addClass('edit') 108*455aa67eSAndreas Gohr ->val($userinfo['mail']); 109877c5a1bSSatoshi Sahara $input->getLabel()->attr('class', 'block'); 110877c5a1bSSatoshi Sahara $form->addHTML("<br>\n"); 111877c5a1bSSatoshi Sahara 112877c5a1bSSatoshi Sahara if ($auth->canDo('modPass')) { 113e2d055f5SAndreas Gohr $attr = ['size' => '50']; 114877c5a1bSSatoshi Sahara $input = $form->addPasswordInput('newpass', $lang['newpass'])->attrs($attr)->addClass('edit'); 115877c5a1bSSatoshi Sahara $input->getLabel()->attr('class', 'block'); 116877c5a1bSSatoshi Sahara $form->addHTML("<br>\n"); 117877c5a1bSSatoshi Sahara 118877c5a1bSSatoshi Sahara $input = $form->addPasswordInput('passchk', $lang['passchk'])->attrs($attr)->addClass('edit'); 119877c5a1bSSatoshi Sahara $input->getLabel()->attr('class', 'block'); 120877c5a1bSSatoshi Sahara $form->addHTML("<br>\n"); 121877c5a1bSSatoshi Sahara } 122877c5a1bSSatoshi Sahara 123*455aa67eSAndreas Gohr $this->addPasswordConfirmation($form); 124877c5a1bSSatoshi Sahara 125877c5a1bSSatoshi Sahara $form->addButton('', $lang['btn_save'])->attr('type', 'submit'); 126877c5a1bSSatoshi Sahara $form->addButton('', $lang['btn_reset'])->attr('type', 'reset'); 127877c5a1bSSatoshi Sahara 128877c5a1bSSatoshi Sahara $form->addFieldsetClose(); 129877c5a1bSSatoshi Sahara $form->addTagClose('div'); 130877c5a1bSSatoshi Sahara 131*455aa67eSAndreas Gohr return $form; 132*455aa67eSAndreas Gohr } 133877c5a1bSSatoshi Sahara 134*455aa67eSAndreas Gohr /** 135*455aa67eSAndreas Gohr * Create the profile delete form 136*455aa67eSAndreas Gohr * 137*455aa67eSAndreas Gohr * @return Form 138*455aa67eSAndreas Gohr */ 139*455aa67eSAndreas Gohr protected function deleteProfileForm() 140*455aa67eSAndreas Gohr { 141*455aa67eSAndreas Gohr global $lang; 142877c5a1bSSatoshi Sahara 143877c5a1bSSatoshi Sahara $form = new Form(['id' => 'dw__profiledelete']); 144877c5a1bSSatoshi Sahara $form->addTagOpen('div')->addClass('no'); 145877c5a1bSSatoshi Sahara $form->addFieldsetOpen($lang['profdeleteuser']); 146877c5a1bSSatoshi Sahara $form->setHiddenField('do', 'profile_delete'); 147877c5a1bSSatoshi Sahara $form->setHiddenField('delete', '1'); 148877c5a1bSSatoshi Sahara 149877c5a1bSSatoshi Sahara $form->addCheckbox('confirm_delete', $lang['profconfdelete']) 150877c5a1bSSatoshi Sahara ->attrs(['required' => 'required']) 151877c5a1bSSatoshi Sahara ->id('dw__confirmdelete') 152877c5a1bSSatoshi Sahara ->val('1'); 153877c5a1bSSatoshi Sahara 154*455aa67eSAndreas Gohr $this->addPasswordConfirmation($form); 155877c5a1bSSatoshi Sahara 156877c5a1bSSatoshi Sahara $form->addButton('', $lang['btn_deleteuser'])->attr('type', 'submit'); 157877c5a1bSSatoshi Sahara $form->addFieldsetClose(); 158877c5a1bSSatoshi Sahara $form->addTagClose('div'); 159*455aa67eSAndreas Gohr return $form; 160877c5a1bSSatoshi Sahara } 161877c5a1bSSatoshi Sahara 162*455aa67eSAndreas Gohr /** 163*455aa67eSAndreas Gohr * Get the authentication token form 164*455aa67eSAndreas Gohr * 165*455aa67eSAndreas Gohr * @param string $user 166*455aa67eSAndreas Gohr * @return Form 167*455aa67eSAndreas Gohr */ 168*455aa67eSAndreas Gohr protected function tokenForm($user) 169*455aa67eSAndreas Gohr { 170*455aa67eSAndreas Gohr global $lang; 171*455aa67eSAndreas Gohr 172*455aa67eSAndreas Gohr $token = JWT::fromUser($user); 173*455aa67eSAndreas Gohr 174*455aa67eSAndreas Gohr $form = new Form(['id' => 'dw__profiletoken', 'action' => wl(), 'method' => 'POST']); 175*455aa67eSAndreas Gohr $form->setHiddenField('do', 'authtoken'); 176*455aa67eSAndreas Gohr $form->setHiddenField('id', 'ID'); 177*455aa67eSAndreas Gohr $form->addFieldsetOpen($lang['proftokenlegend']); 178*455aa67eSAndreas Gohr $form->addHTML('<p>' . $lang['proftokeninfo'] . '</p>'); 179*455aa67eSAndreas Gohr $form->addHTML('<p><code style="display: block; word-break: break-word">' . $token->getToken() . '</code></p>'); 180*455aa67eSAndreas Gohr $form->addButton('regen', $lang['proftokengenerate']); 181*455aa67eSAndreas Gohr $form->addFieldsetClose(); 182*455aa67eSAndreas Gohr 183*455aa67eSAndreas Gohr return $form; 184877c5a1bSSatoshi Sahara } 185877c5a1bSSatoshi Sahara} 186