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