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