diff options
-rw-r--r-- | doc/ChangeLog | 4 | ||||
-rw-r--r-- | identification.php | 3 | ||||
-rw-r--r-- | language/en_UK.iso-8859-1/common.lang.php | 12 | ||||
-rw-r--r-- | language/fr_FR.iso-8859-1/common.lang.php | 12 | ||||
-rw-r--r-- | password.php | 217 | ||||
-rw-r--r-- | template/yoga/content.css | 1 | ||||
-rw-r--r-- | template/yoga/identification.tpl | 2 | ||||
-rw-r--r-- | template/yoga/password.tpl | 51 | ||||
-rw-r--r-- | template/yoga/register.tpl | 1 | ||||
-rw-r--r-- | template/yoga/theme/lost_password.png | bin | 0 -> 1716 bytes |
10 files changed, 301 insertions, 2 deletions
diff --git a/doc/ChangeLog b/doc/ChangeLog index 7f034c412..0a5aa9c64 100644 --- a/doc/ChangeLog +++ b/doc/ChangeLog @@ -1,5 +1,9 @@ 2005-09-17 Pierrick LE GALL + * new: automatic new password sent by mail when requested by user + +2005-09-17 Pierrick LE GALL + * improvement: add information about how to use an external table for users diff --git a/identification.php b/identification.php index 772f42722..c55e009ed 100644 --- a/identification.php +++ b/identification.php @@ -71,8 +71,6 @@ $template->set_filenames( array('identification'=>'identification.tpl') ); $template->assign_vars( array( - 'MAIL_ADMIN' => $conf['mail_webmaster'], - 'L_TITLE' => $lang['identification'], 'L_USERNAME' => $lang['login'], 'L_PASSWORD' => $lang['password'], @@ -83,6 +81,7 @@ $template->assign_vars( 'L_REMEMBER_ME'=>$lang['remember_me'], 'U_REGISTER' => add_session_id(PHPWG_ROOT_PATH.'register.php'), + 'U_LOST_PASSWORD' => add_session_id(PHPWG_ROOT_PATH.'password.php'), 'U_HOME' => add_session_id(PHPWG_ROOT_PATH.'category.php'), 'F_LOGIN_ACTION' => add_session_id(PHPWG_ROOT_PATH.'identification.php') diff --git a/language/en_UK.iso-8859-1/common.lang.php b/language/en_UK.iso-8859-1/common.lang.php index 756408332..7dddd87ed 100644 --- a/language/en_UK.iso-8859-1/common.lang.php +++ b/language/en_UK.iso-8859-1/common.lang.php @@ -48,17 +48,21 @@ $lang['Category'] = 'Category'; $lang['Close this window'] = 'Close this window'; $lang['Confirm Password'] = 'Confirm Password'; $lang['Connection settings'] = 'Connection settings'; +$lang['Contact webmaster'] = 'Contact webmaster'; $lang['Create a new account'] = 'Create a new account'; $lang['Created on'] = 'Created on'; $lang['Current password is wrong'] = 'Current password is wrong'; $lang['Dimensions'] = 'Dimensions'; $lang['Display'] = 'Display'; +$lang['Email address is missing'] = 'Email address is missing'; $lang['Email address'] = 'Email address'; $lang['Enter your personnal informations'] = 'Enter your personnal informations'; +$lang['Error sending email'] = 'Error sending email'; $lang['File'] = 'File'; $lang['Filesize'] = 'Filesize'; $lang['Filter and display'] = 'Filter and display'; $lang['Filter'] = 'Filter'; +$lang['Forgot your password?'] = 'Forgot your password?'; $lang['Go through the gallery as a visitor'] = 'Go through the gallery as a visitor'; $lang['Help'] = 'Help'; $lang['Identification'] = 'Identification'; @@ -69,9 +73,13 @@ $lang['Mail address'] = 'Mail address'; $lang['N/A'] = 'N/A'; $lang['New on %s'] = 'New on %s'; $lang['New password confirmation does not correspond'] = 'New password confirmation does not correspond'; +$lang['New password sent by email'] = 'New password sent by email'; +$lang['No email address'] = 'No email address'; +$lang['No user matches this email address'] = 'No user matches this email address'; $lang['Notification'] = 'Notification'; $lang['Number of items'] = 'Number of items'; $lang['Original dimensions'] = 'Original dimensions'; +$lang['Password forgotten'] = 'Password forgotten'; $lang['Password'] = 'Password'; $lang['PhpWebGallery Help'] = 'PhpWebGallery Help'; $lang['Profile'] = 'Profile'; @@ -80,7 +88,9 @@ $lang['Register'] = 'Register'; $lang['Registered on'] = 'Registered on'; $lang['Registration'] = 'Registration'; $lang['Reset'] = 'Reset'; +$lang['Retrieve password'] = 'Retrieve password'; $lang['Search'] = 'Search'; +$lang['Send new password'] = 'Send new password'; $lang['Since'] = 'Since'; $lang['Sort by'] = 'Sort by'; $lang['Sort order'] = 'Sort order'; @@ -197,6 +207,7 @@ $lang['no_category'] = 'Home'; $lang['no_rate'] = 'no rate'; $lang['notification'] = 'notification'; $lang['only_members'] = 'Only members can access this page'; +$lang['password updated'] = 'password updated'; $lang['password'] = 'Password'; $lang['password_hint'] = 'You only have to give your password if you wish to change your e-mail'; $lang['periods_error'] = 'Recent period must be a positive integer value'; @@ -286,6 +297,7 @@ $lang['upload_picture'] = 'Upload a picture'; $lang['upload_successful'] = 'Picture uploaded with success, an administrator will validate it as soon as possible'; $lang['upload_title'] = 'Upload a picture'; $lang['upload_username'] = 'Username'; +$lang['useful when password forgotten'] = 'useful when password forgotten'; $lang['w_month'] = 'Month'; $lang['yes'] = 'Yes'; ?>
\ No newline at end of file diff --git a/language/fr_FR.iso-8859-1/common.lang.php b/language/fr_FR.iso-8859-1/common.lang.php index 8b3df9ec9..5c6a9fc7d 100644 --- a/language/fr_FR.iso-8859-1/common.lang.php +++ b/language/fr_FR.iso-8859-1/common.lang.php @@ -47,17 +47,21 @@ $lang['Category'] = 'Catégori'; $lang['Close this window'] = 'Fermer cette fenêtre'; $lang['Confirm Password'] = 'Confirmer le mot de passe'; $lang['Connection settings'] = 'Paramètres de connexion'; +$lang['Contact webmaster'] = 'Contacter le webmestre'; $lang['Create a new account'] = 'Créer un nouveau compte'; $lang['Created on'] = 'Créer le'; $lang['Current password is wrong'] = 'Erreur sur le mot de passe actuel'; $lang['Dimensions'] = 'Dimensions'; $lang['Display'] = 'Affichage'; +$lang['Email address is missing'] = 'L\'adresse email manque'; $lang['Email address'] = 'Adresse email'; $lang['Enter your personnal informations'] = 'Entrer vos informations personnelles'; +$lang['Error sending email'] = 'Erreur à l\'envoi du mail'; $lang['File'] = 'Fichier'; $lang['Filesize'] = 'Poids'; $lang['Filter and display'] = 'Filtrer et afficher'; $lang['Filter'] = 'Filtre'; +$lang['Forgot your password?'] = 'Mot de passe oublié ?'; $lang['Go through the gallery as a visitor'] = 'Parcourir la galerie en tant que visiteur'; $lang['Help'] = 'Aide'; $lang['Identification'] = 'Identification'; @@ -68,9 +72,13 @@ $lang['Mail address'] = $lang['Email address']; $lang['N/A'] = 'non disponible'; $lang['New on %s'] = 'Nouveau le %s'; $lang['New password confirmation does not correspond'] = 'Erreur de confirmation de mot de passe'; +$lang['New password sent by email'] = 'Nouveau mot de passe envoyé par mail'; +$lang['No email address'] = 'Pas d\'adresse email'; +$lang['No user matches this email address'] = 'Cette adresse email ne correspond à aucun utilisateur'; $lang['Notification'] = 'Notification'; $lang['Number of items'] = 'Nombre d\'élément'; $lang['Original dimensions'] = 'Dimensions d\'origine'; +$lang['Password forgotten'] = 'Mot de passe oublié'; $lang['Password'] = 'Mot de passe'; $lang['PhpWebGallery Help'] = 'Aide de PhpWebGallery'; $lang['Profile'] = 'Profil'; @@ -79,7 +87,9 @@ $lang['Register'] = 'S\'enregistrer'; $lang['Registered on'] = 'Enregistré le'; $lang['Registration'] = 'Enregistrement'; $lang['Reset'] = 'Annuler'; +$lang['Retrieve password'] = 'Récupérer un mot de passe'; $lang['Search'] = 'Rechercher'; +$lang['Send new password'] = 'Envoyer le nouveau mot de passe'; $lang['Since'] = 'Depuis'; $lang['Sort by'] = 'Trier selon'; $lang['Sort order'] = 'Ordre de tri'; @@ -196,6 +206,7 @@ $lang['no_category'] = 'Accueil'; $lang['no_rate'] = 'pas de note'; $lang['notification'] = 'notification'; $lang['only_members'] = 'Seuls les membres enregistrés peuvent accéder à cette page'; +$lang['password updated'] = 'mot de passe mis à jour'; $lang['password'] = 'Mot de passe'; $lang['password_hint'] = 'Vous n\'avez à donner votre mot de passe que si vous désirez en changer.'; $lang['periods_error'] = 'La période de nouveauté doit être un entier positif'; @@ -285,6 +296,7 @@ $lang['upload_picture'] = 'Ajouter une image'; $lang['upload_successful'] = 'Image ajoutée avec succès, un administrateur doit valider l\'ajout pour le rendre visible'; $lang['upload_title'] = 'Ajouter une image'; $lang['upload_username'] = 'Nom utilisateur'; +$lang['useful when password forgotten'] = 'utile en cas d\'oubli de mot de passe'; $lang['w_month'] = 'Mois'; $lang['yes'] = 'Oui'; ?>
\ No newline at end of file diff --git a/password.php b/password.php new file mode 100644 index 000000000..0be971964 --- /dev/null +++ b/password.php @@ -0,0 +1,217 @@ +<?php +// +-----------------------------------------------------------------------+ +// | PhpWebGallery - a PHP based picture gallery | +// | Copyright (C) 2002-2003 Pierrick LE GALL - pierrick@phpwebgallery.net | +// | Copyright (C) 2003-2005 PhpWebGallery Team - http://phpwebgallery.net | +// +-----------------------------------------------------------------------+ +// | branch : BSF (Best So Far) +// | file : $RCSfile$ +// | last update : $Date$ +// | last modifier : $Author$ +// | revision : $Revision$ +// +-----------------------------------------------------------------------+ +// | 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 | +// | | +// | 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, write to the Free Software | +// | Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, | +// | USA. | +// +-----------------------------------------------------------------------+ + +// +-----------------------------------------------------------------------+ +// | initialization | +// +-----------------------------------------------------------------------+ + +define('PHPWG_ROOT_PATH','./'); +include_once( PHPWG_ROOT_PATH.'include/common.inc.php' ); + +// +-----------------------------------------------------------------------+ +// | functions | +// +-----------------------------------------------------------------------+ + +/** + * sends an email, using PhpWebGallery specific informations + */ +function pwg_mail($to, $from, $infos = '') +{ + global $conf; + + $headers = 'From: <'.$from.'>'."\n"; + $headers.= 'Reply-To: '.$from."\n"; + + $options = '-f '.$from; + + $subject = l10n('password updated'); + + $content = $infos; + $content.= "\n\n-- \nPhpWebGallery ".PHPWG_VERSION; + + return mail($to, $subject, $content, $headers, $options); +} + +// +-----------------------------------------------------------------------+ +// | send a new password | +// +-----------------------------------------------------------------------+ + +$page['errors'] = array(); +$page['infos'] = array(); + +if (isset($_POST['submit'])) +{ + // in case of error, creation of mailto link + $query = ' +SELECT '.$conf['user_fields']['email'].' + FROM '.USERS_TABLE.' + WHERE '.$conf['user_fields']['id'].' = '.$conf['webmaster_id'].' +;'; + list($mail_webmaster) = mysql_fetch_array(pwg_query($query)); + + $mailto = + '<a href="mailto:'.$mail_webmaster.'">' + .l10n('Contact webmaster') + .'</a>' + ; + + if (isset($_POST['no_mail_address']) and $_POST['no_mail_address'] == 1) + { + array_push($page['infos'], l10n('Email address is missing')); + array_push($page['infos'], $mailto); + } + else if (isset($_POST['mail_address']) and !empty($_POST['mail_address'])) + { + $mail_address = mysql_escape_string($_POST['mail_address']); + + $query = ' +SELECT '.$conf['user_fields']['id'].' AS id + , '.$conf['user_fields']['username'].' AS username + , '.$conf['user_fields']['email'].' AS email + FROM '.USERS_TABLE.' + WHERE '.$conf['user_fields']['email'].' = \''.$mail_address.'\' +;'; + $result = pwg_query($query); + + if (mysql_num_rows($result) > 0) + { + $error_on_mail = false; + $datas = array(); + + while ($row = mysql_fetch_array($result)) + { + $new_password = generate_key(6); + + $infos = + l10n('Username').': '.$row['username'] + ."\n".l10n('Password').': '.$new_password + ; + + if (pwg_mail($row['email'], $mail_webmaster, $infos)) + { + $data = + array( + $conf['user_fields']['id'] + => $row['id'], + + $conf['user_fields']['password'] + => $conf['pass_convert']($new_password) + ); + + array_push($datas, $data); + } + else + { + $error_on_mail = true; + } + } + + if ($error_on_mail) + { + array_push($page['errors'], l10n('Error sending email')); + array_push($page['errors'], $mailto); + } + else + { + include_once(PHPWG_ROOT_PATH.'admin/include/functions.php'); + mass_updates( + USERS_TABLE, + array( + 'primary' => array($conf['user_fields']['id']), + 'update' => array($conf['user_fields']['password']) + ), + $datas + ); + + array_push($page['infos'], l10n('New password sent by email')); + } + } + else + { + array_push($page['errors'], l10n('No user matches this email address')); + array_push($page['errors'], $mailto); + } + } +} + +// +-----------------------------------------------------------------------+ +// | template initialization | +// +-----------------------------------------------------------------------+ + +$title = l10n('Forgot your password?'); +$page['body_id'] = 'thePasswordPage'; +include(PHPWG_ROOT_PATH.'include/page_header.php'); +$template->set_filenames(array('password'=>'password.tpl')); + +$template->assign_vars( + array( + 'U_HOME' => add_session_id(PHPWG_ROOT_PATH.'category.php') + ) + ); + +// +-----------------------------------------------------------------------+ +// | infos & errors display | +// +-----------------------------------------------------------------------+ + +if (count($page['errors']) != 0) +{ + $template->assign_block_vars('errors', array()); + + foreach ($page['errors'] as $error) + { + $template->assign_block_vars( + 'errors.error', + array( + 'ERROR' => $error + ) + ); + } +} + +if (count($page['infos']) != 0) +{ + $template->assign_block_vars('infos', array()); + + foreach ($page['infos'] as $info) + { + $template->assign_block_vars( + 'infos.info', + array( + 'INFO' => $info + ) + ); + } +} + +// +-----------------------------------------------------------------------+ +// | html code display | +// +-----------------------------------------------------------------------+ + +$template->parse('password'); +include(PHPWG_ROOT_PATH.'include/page_tail.php'); + +?>
\ No newline at end of file diff --git a/template/yoga/content.css b/template/yoga/content.css index 4d3775b21..c9aadf458 100644 --- a/template/yoga/content.css +++ b/template/yoga/content.css @@ -15,6 +15,7 @@ BODY#theProfilePage #content, BODY#theSearchPage #content, BODY#theAboutPage #content, BODY#thePopuphelpPage #content, +BODY#thePasswordPage #content, BODY#theNotificationPage #content { margin: 1em; diff --git a/template/yoga/identification.tpl b/template/yoga/identification.tpl index d120524d0..ef4fc2e8c 100644 --- a/template/yoga/identification.tpl +++ b/template/yoga/identification.tpl @@ -3,6 +3,7 @@ <div class="titrePage"> <ul class="categoryActions"> + <li><a href="{U_LOST_PASSWORD}" title="{lang:Forgot your password?}"><img src="template/yoga/theme/lost_password.png" alt="{lang:Forgot your password?}"></a></li> <li><a href="{U_REGISTER}" title="{lang:Create a new account}"><img src="./template/yoga/theme/register.png" alt="{lang:register}"/></a></li> <li><a href="{U_HOME}" title="{lang:Go through the gallery as a visitor}"><img src="./template/yoga/theme/home.png" alt="{lang:home}"/></a></li> </ul> @@ -48,6 +49,7 @@ <p> <a href="{U_REGISTER}"><img src="template/yoga/theme/register.png" alt=""> {L_REGISTER}</a> + <a href="{U_LOST_PASSWORD}"><img src="template/yoga/theme/lost_password.png" alt=""> {lang:Forgot your password?}</a> </p> </div> <!-- content --> diff --git a/template/yoga/password.tpl b/template/yoga/password.tpl new file mode 100644 index 000000000..e077fa905 --- /dev/null +++ b/template/yoga/password.tpl @@ -0,0 +1,51 @@ +<!-- $Id$ --> +<div id="content"> + + <div class="titrePage"> + <ul class="categoryActions"> + <li><a href="{U_HOME}" title="{lang:Go through the gallery as a visitor}"><img src="./template/yoga/theme/home.png" alt="{lang:home}"/></a></li> + </ul> + <h2>{lang:Password forgotten}</h2> + </div> + + <!-- BEGIN errors --> + <div class="errors"> + <ul> + <!-- BEGIN error --> + <li>{errors.error.ERROR}</li> + <!-- END error --> + </ul> + </div> + <!-- END errors --> + + <!-- BEGIN infos --> + <div class="infos"> + <ul> + <!-- BEGIN info --> + <li>{infos.info.INFO}</li> + <!-- END info --> + </ul> + </div> + <!-- END infos --> + +<form action="{F_ACTION}" method="post" class="properties"> + <fieldset> + <legend>{lang:Retrieve password}</legend> + + <ul> + <li> + <label for="mail_address">{lang:Email address}</label> + <input class="login" type="text" name="mail_address" id="mail_address" size="40" maxlength="40"> + </li> + + <li> + <label>{lang:No email address}</label> + <input type="checkbox" name="no_mail_address" value="1"> + </li> + </ul> + </fieldset> + + <p><input type="submit" name="submit" value="{lang:Send new password}"></p> +</form> + +</div> <!-- content --> diff --git a/template/yoga/register.tpl b/template/yoga/register.tpl index 09740e881..5aa861b41 100644 --- a/template/yoga/register.tpl +++ b/template/yoga/register.tpl @@ -42,6 +42,7 @@ <li> <label for="mail_address">{lang:Mail address}</label> <input type="text" name="mail_address" id="mail_address" value="{F_EMAIL}" onfocus="this.className='focus';" onblur="this.className='nofocus';"> + ({lang:useful when password forgotten}) </li> </ul> diff --git a/template/yoga/theme/lost_password.png b/template/yoga/theme/lost_password.png Binary files differnew file mode 100644 index 000000000..76e50305f --- /dev/null +++ b/template/yoga/theme/lost_password.png |