diff --git a/htdocs/core/tpl/login.tpl.php b/htdocs/core/tpl/login.tpl.php
index b7e6fd15dcb..eaf2d602571 100644
--- a/htdocs/core/tpl/login.tpl.php
+++ b/htdocs/core/tpl/login.tpl.php
@@ -372,9 +372,19 @@ if (isset($conf->file->main_authentication) && preg_match('/google/', $conf->fil
// Show error message if defined
if (!empty($_SESSION['dol_loginmesg'])) {
?>
-
+ /', $message)) { // if it contains this comment, this is a warning message
+ $message = str_replace('', '', $message);
+ print '
';
+ } else {
+ print '
';
+ }
+ print dol_escape_htmltag($message);
+ print '
';
+ ?>
+
.
*/
-
if (!defined('NOBROWSERNOTIF')) {
define('NOBROWSERNOTIF', 1);
}
@@ -234,15 +233,19 @@ if (!empty($morelogincontent)) {
-
-
- trans('SendNewPasswordDesc'); ?>
-
-
-
- trans('AuthenticationDoesNotAllowSendNewPassword', $mode); ?>
-
-
+';
+ print $langs->trans('SendNewPasswordDesc');
+ print '';
+ }
+} else {
+ print '
';
+ print $langs->trans('AuthenticationDoesNotAllowSendNewPassword', $mode);
+ print '
';
+}
+?>
diff --git a/htdocs/core/tpl/passwordreset.tpl.php b/htdocs/core/tpl/passwordreset.tpl.php
new file mode 100644
index 00000000000..1f35b1a251a
--- /dev/null
+++ b/htdocs/core/tpl/passwordreset.tpl.php
@@ -0,0 +1,367 @@
+
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see
.
+ */
+
+// To show this page, we need parameters: setnewpassword=1&username=...&passworduidhash=...
+
+if (!defined('NOBROWSERNOTIF')) {
+ define('NOBROWSERNOTIF', 1);
+}
+
+// Protection to avoid direct call of template
+if (empty($conf) || !is_object($conf)) {
+ print "Error, template page can't be called as URL";
+ exit;
+}
+
+// DDOS protection
+$size = (int) $_SERVER['CONTENT_LENGTH'];
+if ($size > 10000) {
+ $langs->loadLangs(array("errors", "install"));
+ httponly_accessforbidden('
'.$langs->trans("ErrorRequestTooLarge").'
'.$langs->trans("ClickHereToGoToApp").'', 413, 1);
+}
+
+require_once DOL_DOCUMENT_ROOT.'/core/lib/functions2.lib.php';
+
+header('Cache-Control: Public, must-revalidate');
+header("Content-type: text/html; charset=".$conf->file->character_set_client);
+
+if (GETPOST('dol_hide_topmenu')) {
+ $conf->dol_hide_topmenu = 1;
+}
+if (GETPOST('dol_hide_leftmenu')) {
+ $conf->dol_hide_leftmenu = 1;
+}
+if (GETPOST('dol_optimize_smallscreen')) {
+ $conf->dol_optimize_smallscreen = 1;
+}
+if (GETPOST('dol_no_mouse_hover')) {
+ $conf->dol_no_mouse_hover = 1;
+}
+if (GETPOST('dol_use_jmobile')) {
+ $conf->dol_use_jmobile = 1;
+}
+
+// If we force to use jmobile, then we reenable javascript
+if (!empty($conf->dol_use_jmobile)) {
+ $conf->use_javascript_ajax = 1;
+}
+
+$php_self = $_SERVER['PHP_SELF'];
+$php_self .= dol_escape_htmltag($_SERVER["QUERY_STRING"]) ? '?'.dol_escape_htmltag($_SERVER["QUERY_STRING"]) : '';
+$php_self = str_replace('action=validatenewpassword', '', $php_self);
+
+$titleofpage = $langs->trans('ResetPassword');
+
+// Javascript code on logon page only to detect user tz, dst_observed, dst_first, dst_second
+$arrayofjs = array();
+
+$disablenofollow = 1;
+if (!preg_match('/'.constant('DOL_APPLICATION_TITLE').'/', $title)) {
+ $disablenofollow = 0;
+}
+if (!empty($conf->global->MAIN_OPTIMIZEFORTEXTBROWSER)) {
+ $disablenofollow = 0;
+}
+
+print top_htmlhead('', $titleofpage, 0, 0, $arrayofjs, array(), 1, $disablenofollow);
+
+
+$colorbackhmenu1 = '60,70,100'; // topmenu
+if (!isset($conf->global->THEME_ELDY_TOPMENU_BACK1)) {
+ $conf->global->THEME_ELDY_TOPMENU_BACK1 = $colorbackhmenu1;
+}
+$colorbackhmenu1 = empty($user->conf->THEME_ELDY_ENABLE_PERSONALIZED) ? (empty($conf->global->THEME_ELDY_TOPMENU_BACK1) ? $colorbackhmenu1 : $conf->global->THEME_ELDY_TOPMENU_BACK1) : (empty($user->conf->THEME_ELDY_TOPMENU_BACK1) ? $colorbackhmenu1 : $user->conf->THEME_ELDY_TOPMENU_BACK1);
+$colorbackhmenu1 = join(',', colorStringToArray($colorbackhmenu1)); // Normalize value to 'x,y,z'
+
+
+$edituser = new User($db);
+
+
+// Validate parameters
+if ($setnewpassword && $username && $passworduidhash) {
+ $result = $edituser->fetch('', $username);
+ if ($result < 0) {
+ $message = '
'.dol_escape_htmltag($langs->trans("ErrorTechnicalError")).'
';
+ } else {
+ global $dolibarr_main_instance_unique_id;
+
+ //print $edituser->pass_temp.'-'.$edituser->id.'-'.$dolibarr_main_instance_unique_id.' '.$passworduidhash;
+ if ($edituser->pass_temp && dol_verifyHash($edituser->pass_temp.'-'.$edituser->id.'-'.$dolibarr_main_instance_unique_id, $passworduidhash)) {
+ // Clear session
+ unset($_SESSION['dol_login']);
+
+ // Parameters to reset the user are validated
+ } else {
+ $langs->load("errors");
+ $message = '
'.$langs->trans("ErrorFailedToValidatePasswordReset").'
';
+ }
+ }
+} else {
+ $langs->load("errors");
+ $message = '
'.$langs->trans("ErrorFailedToValidatePasswordReset").'
';
+}
+
+
+?>
+
+
+global->MAIN_LOGIN_BACKGROUND) ? '' : ' style="background-size: cover; background-position: center center; background-attachment: fixed; background-repeat: no-repeat; background-image: url(\''.DOL_URL_ROOT.'/viewimage.php?cache=1&noalt=1&modulepart=mycompany&file='.urlencode('logos/'.$conf->global->MAIN_LOGIN_BACKGROUND).'\')"'; ?>>
+
+dol_use_jmobile)) { ?>
+
+
+
+
+
global->MAIN_LOGIN_BACKGROUND) ? ' style="background-size: cover; background-position: center center; background-attachment: fixed; background-repeat: no-repeat; background-image: linear-gradient(rgb('.$colorbackhmenu1.',0.3), rgb(240,240,240));"' : '' ?>>
+
+
+
+
+
+
+';
+ print $langs->trans('EnterNewPasswordHere');
+ print '';
+ }
+} else {
+ print '
';
+ print $langs->trans('AuthenticationDoesNotAllowSendNewPassword', $mode);
+ print '
';
+}
+?>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+global->MAIN_HTML_FOOTER)) {
+ print $conf->global->MAIN_HTML_FOOTER;
+}
+
+if (!empty($morelogincontent) && is_array($morelogincontent)) {
+ foreach ($morelogincontent as $format => $option) {
+ if ($format == 'js') {
+ echo "\n".'';
+ echo $option."\n";
+ }
+ }
+} elseif (!empty($moreloginextracontent)) {
+ echo '';
+ echo $moreloginextracontent;
+}
+
+// Google Analytics
+// TODO Add a hook here
+if (!empty($conf->google->enabled) && !empty($conf->global->MAIN_GOOGLE_AN_ID)) {
+ $tmptagarray = explode(',', $conf->global->MAIN_GOOGLE_AN_ID);
+ foreach ($tmptagarray as $tmptag) {
+ print "\n";
+ print "\n";
+ print "
+
+
+ ";
+ print "\n";
+ }
+}
+
+// TODO Replace this with a hook
+// Google Adsense (need Google module)
+if (!empty($conf->google->enabled) && !empty($conf->global->MAIN_GOOGLE_AD_CLIENT) && !empty($conf->global->MAIN_GOOGLE_AD_SLOT)) {
+ if (empty($conf->dol_use_jmobile)) {
+ ?>
+
+
+
+
+
+
+
+
+
+
+
+
+