xref: /plugin/combo/action/resend.php (revision 04fd306c7c155fa133ebb3669986875d65988276)
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