1a6bf47aaSNickeau<?php 2a6bf47aaSNickeau/** 3a6bf47aaSNickeau * Action Component 4a6bf47aaSNickeau * Add a button in the edit toolbar 5a6bf47aaSNickeau * 6a6bf47aaSNickeau * @license GPL 2 (http://www.gnu.org/licenses/gpl.html) 7a6bf47aaSNickeau * @author Nicolas GERARD 8a6bf47aaSNickeau */ 9a6bf47aaSNickeau 10a6bf47aaSNickeauuse ComboStrap\Identity; 11*04fd306cSNickeauuse ComboStrap\IdentityFormsHelper; 12a6bf47aaSNickeauuse ComboStrap\LogUtility; 13*04fd306cSNickeauuse dokuwiki\Form\Form; 14a6bf47aaSNickeauuse dokuwiki\Menu\Item\Resendpwd; 15a6bf47aaSNickeau 16a6bf47aaSNickeauif (!defined('DOKU_INC')) die(); 1737748cd8SNickeaurequire_once(__DIR__ . '/../ComboStrap/PluginUtility.php'); 18a6bf47aaSNickeau 19a6bf47aaSNickeau 20a6bf47aaSNickeauclass action_plugin_combo_resend extends DokuWiki_Action_Plugin 21a6bf47aaSNickeau{ 22a6bf47aaSNickeau 23a6bf47aaSNickeau const CANONICAL = "resend"; 24a6bf47aaSNickeau const FORM_RESEND_PWD_CLASS = "form-" . self::CANONICAL; 25a6bf47aaSNickeau const CONF_ENABLE_RESEND_PWD_FORM = "enableResendPwdForm"; 26a6bf47aaSNickeau 27a6bf47aaSNickeau /** 28a6bf47aaSNickeau * @return string 29a6bf47aaSNickeau */ 30*04fd306cSNickeau public static function getResendPasswordParagraphWithLinkToFormPage(): string 31a6bf47aaSNickeau { 32a6bf47aaSNickeau /** 33a6bf47aaSNickeau * Resend pwd 34a6bf47aaSNickeau */ 35a6bf47aaSNickeau $resendPwdHtml = ""; 36a6bf47aaSNickeau if (actionOK('resendpwd')) { 37a6bf47aaSNickeau $resendPwLink = (new Resendpwd())->asHtmlLink('', false); 38a6bf47aaSNickeau global $lang; 39a6bf47aaSNickeau $resentText = $lang['pwdforget']; 40a6bf47aaSNickeau $resendPwdHtml = <<<EOF 41a6bf47aaSNickeau<p class="resendpwd">$resentText : $resendPwLink</p> 42a6bf47aaSNickeauEOF; 43a6bf47aaSNickeau } 44a6bf47aaSNickeau return $resendPwdHtml; 45a6bf47aaSNickeau } 46a6bf47aaSNickeau 47*04fd306cSNickeau private static function updateNewFormResend(Form &$form) 48a6bf47aaSNickeau { 49a6bf47aaSNickeau /** 50*04fd306cSNickeau * The Login page is an admin page created via buffer 51*04fd306cSNickeau * We print before the forms 52*04fd306cSNickeau * to avoid a FOUC 53a6bf47aaSNickeau */ 54*04fd306cSNickeau print IdentityFormsHelper::getHtmlStyleTag(self::CANONICAL); 55a6bf47aaSNickeau 56*04fd306cSNickeau 57*04fd306cSNickeau $form->addClass(Identity::FORM_IDENTITY_CLASS . " " . self::FORM_RESEND_PWD_CLASS); 58a6bf47aaSNickeau /** 59*04fd306cSNickeau * Heading 60a6bf47aaSNickeau */ 61*04fd306cSNickeau $headerHTML = IdentityFormsHelper::getHeaderHTML($form, self::FORM_RESEND_PWD_CLASS); 62*04fd306cSNickeau if ($headerHTML != "") { 63*04fd306cSNickeau $form->addHTML($headerHTML, 1); 64*04fd306cSNickeau } 65a6bf47aaSNickeau 66*04fd306cSNickeau IdentityFormsHelper::deleteFieldSetAndBrFromForm($form); 67*04fd306cSNickeau IdentityFormsHelper::toBoostrapInputElements($form, self::FORM_RESEND_PWD_CLASS); 68*04fd306cSNickeau IdentityFormsHelper::toBootStrapSubmitButton($form); 69a6bf47aaSNickeau 70a6bf47aaSNickeau } 71a6bf47aaSNickeau 72a6bf47aaSNickeau 73*04fd306cSNickeau private static function updateDokuFormResend(Doku_Form &$form) 74*04fd306cSNickeau { 75a6bf47aaSNickeau /** 76a6bf47aaSNickeau * The Login page is created via buffer 77a6bf47aaSNickeau * We print before the forms 78a6bf47aaSNickeau * to avoid a FOUC 79a6bf47aaSNickeau */ 80*04fd306cSNickeau print IdentityFormsHelper::getHtmlStyleTag(self::CANONICAL); 81a6bf47aaSNickeau 82a6bf47aaSNickeau 83a6bf47aaSNickeau /** 84a6bf47aaSNickeau * @var Doku_Form $form 85a6bf47aaSNickeau */ 86a6bf47aaSNickeau $class = &$form->params["class"]; 87*04fd306cSNickeau IdentityFormsHelper::addIdentityClass($class, self::FORM_RESEND_PWD_CLASS); 88a6bf47aaSNickeau $newFormContent = []; 89a6bf47aaSNickeau 90a6bf47aaSNickeau 91a6bf47aaSNickeau /** 92a6bf47aaSNickeau * Header (Logo / Title) 93a6bf47aaSNickeau */ 94*04fd306cSNickeau $newFormContent[] = IdentityFormsHelper::getHeaderHTML($form, self::FORM_RESEND_PWD_CLASS); 95a6bf47aaSNickeau 96a6bf47aaSNickeau /** 97a6bf47aaSNickeau * Form Attributes 98a6bf47aaSNickeau * 99a6bf47aaSNickeau */ 100a6bf47aaSNickeau foreach ($form->_content as $field) { 101a6bf47aaSNickeau if (!is_array($field)) { 102a6bf47aaSNickeau continue; 103a6bf47aaSNickeau } 104a6bf47aaSNickeau $fieldName = $field["name"]; 105a6bf47aaSNickeau if ($fieldName == null) { 106a6bf47aaSNickeau // this is not an input field 107a6bf47aaSNickeau if ($field["type"] == "submit") { 108a6bf47aaSNickeau /** 109a6bf47aaSNickeau * This is important to keep the submit element intact 110a6bf47aaSNickeau * for forms integration such as captcha 111a6bf47aaSNickeau * The search the submit button to insert before it 112a6bf47aaSNickeau */ 113a6bf47aaSNickeau $classes = "btn btn-primary btn-block"; 114a6bf47aaSNickeau if (isset($field["class"])) { 115a6bf47aaSNickeau $field["class"] = $field["class"] . " " . $classes; 116a6bf47aaSNickeau } else { 117a6bf47aaSNickeau $field["class"] = $classes; 118a6bf47aaSNickeau } 119a6bf47aaSNickeau $newFormContent[] = $field; 120a6bf47aaSNickeau } 121a6bf47aaSNickeau continue; 122a6bf47aaSNickeau } 123a6bf47aaSNickeau switch ($fieldName) { 124a6bf47aaSNickeau case "login": 125a6bf47aaSNickeau $loginText = $field["_text"]; 126a6bf47aaSNickeau $loginValue = $field["value"]; 127a6bf47aaSNickeau $loginHTML = <<<EOF 128a6bf47aaSNickeau<div class="form-floating"> 129a6bf47aaSNickeau <input type="text" id="inputUserName" class="form-control" placeholder="$loginText" required="required" autofocus="" name="u" value="$loginValue"> 130a6bf47aaSNickeau <label for="inputUserName">$loginText</label> 131a6bf47aaSNickeau</div> 132a6bf47aaSNickeauEOF; 133a6bf47aaSNickeau $newFormContent[] = $loginHTML; 134a6bf47aaSNickeau break; 135a6bf47aaSNickeau default: 136a6bf47aaSNickeau LogUtility::msg("The register field name($fieldName) is unknown", LogUtility::LVL_MSG_ERROR, \ComboStrap\Identity::CANONICAL); 137a6bf47aaSNickeau 138a6bf47aaSNickeau 139a6bf47aaSNickeau } 140a6bf47aaSNickeau } 141a6bf47aaSNickeau 142a6bf47aaSNickeau 143a6bf47aaSNickeau /** 144a6bf47aaSNickeau * Register and Login HTML paragraph 145a6bf47aaSNickeau */ 146a6bf47aaSNickeau $registerHtml = action_plugin_combo_registration::getRegisterLinkAndParagraph(); 147a6bf47aaSNickeau if (!empty($registerHtml)) { 148a6bf47aaSNickeau $newFormContent[] = $registerHtml; 149a6bf47aaSNickeau } 150a6bf47aaSNickeau $loginLinkToHtmlForm = action_plugin_combo_login::getLoginParagraphWithLinkToFormPage(); 151a6bf47aaSNickeau if (!empty($loginLinkToHtmlForm)) { 152a6bf47aaSNickeau $newFormContent[] = $loginLinkToHtmlForm; 153a6bf47aaSNickeau } 154a6bf47aaSNickeau 155a6bf47aaSNickeau /** 156a6bf47aaSNickeau * Update 157a6bf47aaSNickeau */ 158a6bf47aaSNickeau $form->_content = $newFormContent; 159a6bf47aaSNickeau 160*04fd306cSNickeau } 161*04fd306cSNickeau 162*04fd306cSNickeau 163*04fd306cSNickeau function register(Doku_Event_Handler $controller) 164*04fd306cSNickeau { 165*04fd306cSNickeau /** 166*04fd306cSNickeau * To modify the form and add class 167*04fd306cSNickeau * 168*04fd306cSNickeau * Deprecated object passed by the event but still in use 169*04fd306cSNickeau * https://www.dokuwiki.org/devel:event:html_resendpwdform_output 170*04fd306cSNickeau */ 171*04fd306cSNickeau $controller->register_hook('HTML_RESENDPWDFORM_OUTPUT', 'BEFORE', $this, 'handle_resendpwd_html', array()); 172*04fd306cSNickeau /** 173*04fd306cSNickeau * New Event 174*04fd306cSNickeau * https://www.dokuwiki.org/devel:event:form_resendpwd_output 175*04fd306cSNickeau * 176*04fd306cSNickeau */ 177*04fd306cSNickeau $controller->register_hook('FORM_RESENDPWD_OUTPUT', 'BEFORE', $this, 'handle_resendpwd_html', array()); 178*04fd306cSNickeau 179*04fd306cSNickeau 180*04fd306cSNickeau } 181*04fd306cSNickeau 182*04fd306cSNickeau function handle_resendpwd_html(&$event, $param) 183*04fd306cSNickeau { 184*04fd306cSNickeau 185*04fd306cSNickeau $form = &$event->data; 186*04fd306cSNickeau $class = get_class($form); 187*04fd306cSNickeau switch ($class) { 188*04fd306cSNickeau case Doku_Form::class: 189*04fd306cSNickeau /** 190*04fd306cSNickeau * Old one 191*04fd306cSNickeau * @var Doku_Form $form 192*04fd306cSNickeau */ 193*04fd306cSNickeau self::updateDokuFormResend($form); 194*04fd306cSNickeau return; 195*04fd306cSNickeau case dokuwiki\Form\Form::class; 196*04fd306cSNickeau /** 197*04fd306cSNickeau * New One 198*04fd306cSNickeau * @var Form $form 199*04fd306cSNickeau */ 200*04fd306cSNickeau self::updateNewFormResend($form); 201*04fd306cSNickeau return; 202*04fd306cSNickeau } 203a6bf47aaSNickeau 204a6bf47aaSNickeau 205a6bf47aaSNickeau } 206a6bf47aaSNickeau 207a6bf47aaSNickeau 208a6bf47aaSNickeau} 209a6bf47aaSNickeau 210