1877c5a1bSSatoshi Sahara<?php 2877c5a1bSSatoshi Sahara 3877c5a1bSSatoshi Saharanamespace dokuwiki\Ui; 4877c5a1bSSatoshi Sahara 579a2d784SGerrit Uitslaguse dokuwiki\Extension\AuthPlugin; 6877c5a1bSSatoshi Saharause dokuwiki\Form\Form; 7455aa67eSAndreas 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; 27455aa67eSAndreas Gohr global $INFO; 28455aa67eSAndreas Gohr global $INPUT; 29877c5a1bSSatoshi Sahara 30455aa67eSAndreas Gohr $userinfo = [ 31455aa67eSAndreas Gohr 'user' => $_SERVER['REMOTE_USER'], 32455aa67eSAndreas Gohr 'name' => $INPUT->post->str('fullname', $INFO['userinfo']['name'], true), 33455aa67eSAndreas Gohr 'mail' => $INPUT->post->str('email', $INFO['userinfo']['mail'], true), 34455aa67eSAndreas Gohr 35455aa67eSAndreas Gohr ]; 36455aa67eSAndreas Gohr 3726dfc232SAndreas Gohr echo p_locale_xhtml('updateprofile'); 3826dfc232SAndreas Gohr echo '<div class="centeralign">'; 39877c5a1bSSatoshi Sahara 40455aa67eSAndreas Gohr echo $this->updateProfileForm($userinfo)->toHTML('UpdateProfile'); 41455aa67eSAndreas Gohr echo $this->tokenForm($userinfo['user'])->toHTML(); 42455aa67eSAndreas Gohr if ($auth->canDo('delUser') && actionOK('profile_delete')) { 43*1ef69b55SNickeau echo $this->deleteProfileForm()->toHTML('ProfileDelete'); 44455aa67eSAndreas Gohr } 45877c5a1bSSatoshi Sahara 46455aa67eSAndreas Gohr echo '</div>'; 47455aa67eSAndreas Gohr } 48455aa67eSAndreas Gohr 49455aa67eSAndreas Gohr /** 50455aa67eSAndreas Gohr * Add the password confirmation field to the form if configured 51455aa67eSAndreas Gohr * 52455aa67eSAndreas Gohr * @param Form $form 53455aa67eSAndreas Gohr * @return void 54455aa67eSAndreas Gohr */ 55455aa67eSAndreas Gohr protected function addPasswordConfirmation(Form $form) 56455aa67eSAndreas Gohr { 57455aa67eSAndreas Gohr global $lang; 58455aa67eSAndreas Gohr global $conf; 59455aa67eSAndreas Gohr 60455aa67eSAndreas Gohr if (!$conf['profileconfirm']) return; 61455aa67eSAndreas Gohr $form->addHTML("<br>\n"); 62455aa67eSAndreas Gohr $attr = ['size' => '50', 'required' => 'required']; 63455aa67eSAndreas Gohr $input = $form->addPasswordInput('oldpass', $lang['oldpass'])->attrs($attr) 64455aa67eSAndreas Gohr ->addClass('edit'); 65455aa67eSAndreas Gohr $input->getLabel()->attr('class', 'block'); 66455aa67eSAndreas Gohr $form->addHTML("<br>\n"); 67455aa67eSAndreas Gohr } 68455aa67eSAndreas Gohr 69455aa67eSAndreas Gohr /** 70455aa67eSAndreas Gohr * Create the profile form 71455aa67eSAndreas Gohr * 72455aa67eSAndreas Gohr * @return Form 73455aa67eSAndreas Gohr */ 74455aa67eSAndreas Gohr protected function updateProfileForm($userinfo) 75455aa67eSAndreas Gohr { 76455aa67eSAndreas Gohr global $lang; 77455aa67eSAndreas Gohr /** @var AuthPlugin $auth */ 78455aa67eSAndreas Gohr global $auth; 79455aa67eSAndreas 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']; 87455aa67eSAndreas Gohr $input = $form->addTextInput('login', $lang['user']) 88455aa67eSAndreas Gohr ->attrs($attr) 89455aa67eSAndreas Gohr ->addClass('edit') 90455aa67eSAndreas 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'; 96455aa67eSAndreas Gohr $input = $form->addTextInput('fullname', $lang['fullname']) 97455aa67eSAndreas Gohr ->attrs($attr) 98455aa67eSAndreas Gohr ->addClass('edit') 99455aa67eSAndreas 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'; 105455aa67eSAndreas Gohr $input = $form->addTextInput('email', $lang['email']) 106455aa67eSAndreas Gohr ->attrs($attr) 107455aa67eSAndreas Gohr ->addClass('edit') 108455aa67eSAndreas 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 123455aa67eSAndreas 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 131455aa67eSAndreas Gohr return $form; 132455aa67eSAndreas Gohr } 133877c5a1bSSatoshi Sahara 134455aa67eSAndreas Gohr /** 135455aa67eSAndreas Gohr * Create the profile delete form 136455aa67eSAndreas Gohr * 137455aa67eSAndreas Gohr * @return Form 138455aa67eSAndreas Gohr */ 139455aa67eSAndreas Gohr protected function deleteProfileForm() 140455aa67eSAndreas Gohr { 141455aa67eSAndreas 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 154455aa67eSAndreas 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'); 159455aa67eSAndreas Gohr return $form; 160877c5a1bSSatoshi Sahara } 161877c5a1bSSatoshi Sahara 162455aa67eSAndreas Gohr /** 163455aa67eSAndreas Gohr * Get the authentication token form 164455aa67eSAndreas Gohr * 165455aa67eSAndreas Gohr * @param string $user 166455aa67eSAndreas Gohr * @return Form 167455aa67eSAndreas Gohr */ 168455aa67eSAndreas Gohr protected function tokenForm($user) 169455aa67eSAndreas Gohr { 170455aa67eSAndreas Gohr global $lang; 171455aa67eSAndreas Gohr 172455aa67eSAndreas Gohr $token = JWT::fromUser($user); 173455aa67eSAndreas Gohr 174455aa67eSAndreas Gohr $form = new Form(['id' => 'dw__profiletoken', 'action' => wl(), 'method' => 'POST']); 175455aa67eSAndreas Gohr $form->setHiddenField('do', 'authtoken'); 176455aa67eSAndreas Gohr $form->setHiddenField('id', 'ID'); 177455aa67eSAndreas Gohr $form->addFieldsetOpen($lang['proftokenlegend']); 178455aa67eSAndreas Gohr $form->addHTML('<p>' . $lang['proftokeninfo'] . '</p>'); 179455aa67eSAndreas Gohr $form->addHTML('<p><code style="display: block; word-break: break-word">' . $token->getToken() . '</code></p>'); 180455aa67eSAndreas Gohr $form->addButton('regen', $lang['proftokengenerate']); 181455aa67eSAndreas Gohr $form->addFieldsetClose(); 182455aa67eSAndreas Gohr 183455aa67eSAndreas Gohr return $form; 184877c5a1bSSatoshi Sahara } 185877c5a1bSSatoshi Sahara} 186