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\Dimension; 11a6bf47aaSNickeauuse ComboStrap\Identity; 12a6bf47aaSNickeauuse ComboStrap\LogUtility; 13a6bf47aaSNickeauuse ComboStrap\Site; 14a6bf47aaSNickeauuse ComboStrap\Snippet; 15a6bf47aaSNickeauuse ComboStrap\TagAttributes; 16a6bf47aaSNickeauuse dokuwiki\Menu\Item\Resendpwd; 17a6bf47aaSNickeau 18a6bf47aaSNickeauif (!defined('DOKU_INC')) die(); 19*37748cd8SNickeaurequire_once(__DIR__ . '/../ComboStrap/PluginUtility.php'); 20a6bf47aaSNickeau 21a6bf47aaSNickeau 22a6bf47aaSNickeauclass action_plugin_combo_resend extends DokuWiki_Action_Plugin 23a6bf47aaSNickeau{ 24a6bf47aaSNickeau 25a6bf47aaSNickeau const CANONICAL = "resend"; 26a6bf47aaSNickeau const FORM_RESEND_PWD_CLASS = "form-" .self::CANONICAL; 27a6bf47aaSNickeau const CONF_ENABLE_RESEND_PWD_FORM = "enableResendPwdForm"; 28a6bf47aaSNickeau 29a6bf47aaSNickeau /** 30a6bf47aaSNickeau * @return string 31a6bf47aaSNickeau */ 32a6bf47aaSNickeau public static function getResendPasswordParagraphWithLinkToFormPage() 33a6bf47aaSNickeau { 34a6bf47aaSNickeau /** 35a6bf47aaSNickeau * Resend pwd 36a6bf47aaSNickeau */ 37a6bf47aaSNickeau $resendPwdHtml = ""; 38a6bf47aaSNickeau if (actionOK('resendpwd')) { 39a6bf47aaSNickeau $resendPwLink = (new Resendpwd())->asHtmlLink('', false); 40a6bf47aaSNickeau global $lang; 41a6bf47aaSNickeau $resentText = $lang['pwdforget']; 42a6bf47aaSNickeau $resendPwdHtml = <<<EOF 43a6bf47aaSNickeau<p class="resendpwd">$resentText : $resendPwLink</p> 44a6bf47aaSNickeauEOF; 45a6bf47aaSNickeau } 46a6bf47aaSNickeau return $resendPwdHtml; 47a6bf47aaSNickeau } 48a6bf47aaSNickeau 49a6bf47aaSNickeau 50a6bf47aaSNickeau function register(Doku_Event_Handler $controller) 51a6bf47aaSNickeau { 52a6bf47aaSNickeau /** 53a6bf47aaSNickeau * To modify the form and add class 54a6bf47aaSNickeau * 55a6bf47aaSNickeau * Deprecated object passed by the event but still in use 56a6bf47aaSNickeau * https://www.dokuwiki.org/devel:event:html_resendpwdform_output 57a6bf47aaSNickeau */ 58a6bf47aaSNickeau $controller->register_hook('HTML_RESENDPWDFORM_OUTPUT', 'BEFORE', $this, 'handle_resendpwd_html', array()); 59a6bf47aaSNickeau 60a6bf47aaSNickeau /** 61a6bf47aaSNickeau * Event using the new object not found anywhere 62a6bf47aaSNickeau * 63a6bf47aaSNickeau * https://www.dokuwiki.org/devel:event:form_resendpwd_output 64a6bf47aaSNickeau */ 65a6bf47aaSNickeau 66a6bf47aaSNickeau 67a6bf47aaSNickeau } 68a6bf47aaSNickeau 69a6bf47aaSNickeau function handle_resendpwd_html(&$event, $param) 70a6bf47aaSNickeau { 71a6bf47aaSNickeau 72a6bf47aaSNickeau /** 73a6bf47aaSNickeau * The Login page is created via buffer 74a6bf47aaSNickeau * We print before the forms 75a6bf47aaSNickeau * to avoid a FOUC 76a6bf47aaSNickeau */ 77a6bf47aaSNickeau $loginCss = Snippet::createCssSnippet(self::CANONICAL); 78a6bf47aaSNickeau $content = $loginCss->getContent(); 79a6bf47aaSNickeau $class = $loginCss->getClass(); 80a6bf47aaSNickeau $cssHtml = <<<EOF 81a6bf47aaSNickeau<style class="$class"> 82a6bf47aaSNickeau$content 83a6bf47aaSNickeau</style> 84a6bf47aaSNickeauEOF; 85a6bf47aaSNickeau print $cssHtml; 86a6bf47aaSNickeau 87a6bf47aaSNickeau 88a6bf47aaSNickeau /** 89a6bf47aaSNickeau * @var Doku_Form $form 90a6bf47aaSNickeau */ 91a6bf47aaSNickeau $form = &$event->data; 92a6bf47aaSNickeau $class = &$form->params["class"]; 93a6bf47aaSNickeau if (isset($class)) { 94a6bf47aaSNickeau $class = $class . " " . self::FORM_RESEND_PWD_CLASS; 95a6bf47aaSNickeau } else { 96a6bf47aaSNickeau $class = self::FORM_RESEND_PWD_CLASS; 97a6bf47aaSNickeau } 98a6bf47aaSNickeau $newFormContent = []; 99a6bf47aaSNickeau 100a6bf47aaSNickeau 101a6bf47aaSNickeau /** 102a6bf47aaSNickeau * Header (Logo / Title) 103a6bf47aaSNickeau */ 104a6bf47aaSNickeau $newFormContent[] = Identity::getHeaderHTML($form, self::FORM_RESEND_PWD_CLASS); 105a6bf47aaSNickeau 106a6bf47aaSNickeau /** 107a6bf47aaSNickeau * Form Attributes 108a6bf47aaSNickeau * 109a6bf47aaSNickeau */ 110a6bf47aaSNickeau foreach ($form->_content as $field) { 111a6bf47aaSNickeau if (!is_array($field)) { 112a6bf47aaSNickeau continue; 113a6bf47aaSNickeau } 114a6bf47aaSNickeau $fieldName = $field["name"]; 115a6bf47aaSNickeau if ($fieldName == null) { 116a6bf47aaSNickeau // this is not an input field 117a6bf47aaSNickeau if ($field["type"] == "submit") { 118a6bf47aaSNickeau /** 119a6bf47aaSNickeau * This is important to keep the submit element intact 120a6bf47aaSNickeau * for forms integration such as captcha 121a6bf47aaSNickeau * The search the submit button to insert before it 122a6bf47aaSNickeau */ 123a6bf47aaSNickeau $classes = "btn btn-primary btn-block"; 124a6bf47aaSNickeau if (isset($field["class"])) { 125a6bf47aaSNickeau $field["class"] = $field["class"] . " " . $classes; 126a6bf47aaSNickeau } else { 127a6bf47aaSNickeau $field["class"] = $classes; 128a6bf47aaSNickeau } 129a6bf47aaSNickeau $newFormContent[] = $field; 130a6bf47aaSNickeau } 131a6bf47aaSNickeau continue; 132a6bf47aaSNickeau } 133a6bf47aaSNickeau switch ($fieldName) { 134a6bf47aaSNickeau case "login": 135a6bf47aaSNickeau $loginText = $field["_text"]; 136a6bf47aaSNickeau $loginValue = $field["value"]; 137a6bf47aaSNickeau $loginHTML=<<<EOF 138a6bf47aaSNickeau<div class="form-floating"> 139a6bf47aaSNickeau <input type="text" id="inputUserName" class="form-control" placeholder="$loginText" required="required" autofocus="" name="u" value="$loginValue"> 140a6bf47aaSNickeau <label for="inputUserName">$loginText</label> 141a6bf47aaSNickeau</div> 142a6bf47aaSNickeauEOF; 143a6bf47aaSNickeau $newFormContent[] = $loginHTML; 144a6bf47aaSNickeau break; 145a6bf47aaSNickeau default: 146a6bf47aaSNickeau LogUtility::msg("The register field name($fieldName) is unknown", LogUtility::LVL_MSG_ERROR, \ComboStrap\Identity::CANONICAL); 147a6bf47aaSNickeau 148a6bf47aaSNickeau 149a6bf47aaSNickeau } 150a6bf47aaSNickeau } 151a6bf47aaSNickeau 152a6bf47aaSNickeau 153a6bf47aaSNickeau 154a6bf47aaSNickeau 155a6bf47aaSNickeau /** 156a6bf47aaSNickeau * Register and Login HTML paragraph 157a6bf47aaSNickeau */ 158a6bf47aaSNickeau $registerHtml = action_plugin_combo_registration::getRegisterLinkAndParagraph(); 159a6bf47aaSNickeau if (!empty($registerHtml)) { 160a6bf47aaSNickeau $newFormContent[] = $registerHtml; 161a6bf47aaSNickeau } 162a6bf47aaSNickeau $loginLinkToHtmlForm = action_plugin_combo_login::getLoginParagraphWithLinkToFormPage(); 163a6bf47aaSNickeau if (!empty($loginLinkToHtmlForm)) { 164a6bf47aaSNickeau $newFormContent[] = $loginLinkToHtmlForm; 165a6bf47aaSNickeau } 166a6bf47aaSNickeau 167a6bf47aaSNickeau /** 168a6bf47aaSNickeau * Update 169a6bf47aaSNickeau */ 170a6bf47aaSNickeau $form->_content = $newFormContent; 171a6bf47aaSNickeau 172a6bf47aaSNickeau return true; 173a6bf47aaSNickeau 174a6bf47aaSNickeau 175a6bf47aaSNickeau } 176a6bf47aaSNickeau 177a6bf47aaSNickeau 178a6bf47aaSNickeau} 179a6bf47aaSNickeau 180