summaryrefslogtreecommitdiffstats
path: root/www/password.php
diff options
context:
space:
mode:
Diffstat (limited to 'www/password.php')
-rw-r--r--www/password.php249
1 files changed, 181 insertions, 68 deletions
diff --git a/www/password.php b/www/password.php
index 77a58ce..7981d0a 100644
--- a/www/password.php
+++ b/www/password.php
@@ -1,78 +1,191 @@
<?php
-/***************************************************************************
- Copyright (C) 2005 Scuttle project
- https://sourceforge.net/projects/scuttle/
-
- 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 2 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, write to the Free Software
- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- ***************************************************************************/
-
+/**
+ * SemanticScuttle - your social bookmark manager.
+ * User password reset form.
+ *
+ * PHP version 5.
+ *
+ * @category Bookmarking
+ * @package SemanticScuttle
+ * @author Benjamin Huynh-Kim-Bang <mensonge@users.sourceforge.net>
+ * @author Christian Weiske <cweiske@cweiske.de>
+ * @author Eric Dane <ericdane@users.sourceforge.net>
+ * @author Marcus Campbell <marcus.campbell@gmail.com>
+ * @license GPL http://www.gnu.org/licenses/gpl.html
+ * @link http://sourceforge.net/projects/semanticscuttle
+ */
require_once 'www-header.php';
-/* Service creation: only useful services are created */
-// No specific services
-
-/* Managing all possible inputs */
-isset($_POST['submitted']) ? define('POST_SUBMITTED', $_POST['submitted']): define('POST_SUBMITTED', '');
-isset($_POST['username']) ? define('POST_USERNAME', $_POST['username']): define('POST_USERNAME', '');
-isset($_POST['email']) ? define('POST_EMAIL', $_POST['email']): define('POST_EMAIL', '');
-
-// IF SUBMITTED
-if (POST_SUBMITTED != '') {
-
- // NO USERNAME
- if (!POST_USERNAME) {
- $tplVars['error'] = T_('You must enter your username.');
-
- // NO E-MAIL
- } elseif (!POST_EMAIL) {
- $tplVars['error'] = T_('You must enter your <abbr title="electronic mail">e-mail</abbr> address.');
-
- // USERNAME AND E-MAIL
- } else {
-
- // NO MATCH
- $userinfo = $userservice->getObjectUserByUsername(POST_USERNAME);
- if ($userinfo == NULL) {
- $tplVars['error'] = T_('No matches found for that username.');
-
- } elseif (POST_EMAIL != $userinfo->getEmail()) {
- $tplVars['error'] = T_('No matches found for that combination of username and <abbr title="electronic mail">e-mail</abbr> address.');
-
- // MATCH
- } else {
+require_once 'HTML/QuickForm2.php';
+require_once 'SemanticScuttle/QuickForm2/Renderer/CoolArray.php';
+require_once 'HTML/QuickForm2/Element/NumeralCaptcha.php';
+
+
+
+//we register a strange name here so we can change the class
+// itself easily
+HTML_QuickForm2_Factory::registerElement(
+ 'sc-captcha',
+ 'HTML_QuickForm2_Element_NumeralCaptcha'
+);
+
+//do not append '-0' to IDs
+HTML_Common2::setOption('id_force_append_index', false);
+
+$form = new HTML_QuickForm2(
+ 'registration', 'post',
+ array('action' => createURL('password')),
+ true
+);
+
+$user = $form->addElement(
+ 'text', 'username',
+ array(
+ 'size' => 20,
+ 'class' => 'required'
+ )
+)->setLabel(T_('Username'));
+$user->addRule(
+ 'required',
+ T_('You <em>must</em> enter a username, password and e-mail address.')
+);
+$user->addRule(
+ 'callback',
+ T_('This username is not valid (too short, too long, forbidden characters...), please make another choice.'),
+ array($userservice, 'isValidUsername')
+);
+$user->addRule(
+ 'notcallback',
+ T_('This username has been reserved, please make another choice.'),
+ array($userservice, 'isReserved')
+);
+$user->addRule(
+ 'callback',
+ T_('No matches found for that username.'),
+ array($userservice, 'existsUserWithUsername')
+);
+$form->addRule(
+ 'callback',
+ T_('No matches found for that combination of username and <abbr title="electronic mail">e-mail</abbr> address.'),
+ 'checkUserEmailCombination'
+);
+
+
+$email = $form->addElement(
+ 'text', 'email',
+ array(
+ 'size' => 40,
+ 'class' => 'required'
+ )
+)->setLabel(T_('E-mail'));
+$email->addRule(
+ 'required',
+ T_('You <em>must</em> enter a username, password and e-mail address.')
+);
+$email->addRule(
+ 'callback',
+ T_('E-mail address is not valid. Please try again.'),
+ array($userservice, 'isValidEmail')
+);
+
+
+$captcha = $form->addElement(
+ 'sc-captcha', 'captcha',
+ array(
+ 'size' => 40
+ ),
+ array(
+ 'captchaSolutionWrong'
+ => T_('Antispam answer is not valid. Please try again.')
+ )
+)
+->setLabel(T_('Antispam question'));
+
+
+$form->addElement(
+ 'submit', 'submit',
+ array('value' => T_('Generate Password'))
+);
+
+/**
+ * Checks if the user and email combination exists in the database.
+ *
+ * @param array $arValues Key-value array of form values
+ *
+ * @return boolean True if it exists, false if not
+ */
+function checkUserEmailCombination($arValues)
+{
+ //FIXME: remove this once HTML_QuickForm2 calls form rules
+ // only after element rules match
+ // http://pear.php.net/bugs/17576
+ if (trim($arValues['username']) == ''
+ || trim($arValues['email']) == ''
+ ) {
+ return false;
+ }
+
+ $userservice = SemanticScuttle_Service_Factory::get('User');
+ return $userservice->userEmailCombinationValid(
+ $arValues['username'], $arValues['email']
+ );
+}
- // GENERATE AND STORE PASSWORD
- $password = $userservice->generatePassword($userinfo->getId());
- if (!($password = $userservice->generatePassword($userinfo->getId()))) {
- $tplVars['error'] = T_('There was an error while generating your new password. Please try again.');
- } else {
- // SEND E-MAIL
- $message = T_('Your new password is:') ."\n". $password ."\n\n". T_('To keep your bookmarks secure, you should change this password in your profile the next time you log in.');
- $message = wordwrap($message, 70);
- $headers = 'From: '. $adminemail;
- $mail = mail(POST_EMAIL, sprintf(T_('%s Account Information'), $sitename), $message);
- $tplVars['msg'] = sprintf(T_('New password generated and sent to %s'), POST_EMAIL);
- }
- }
- }
+$tplVars['error'] = '';
+if ($form->validate()) {
+ $arValues = $form->getValue();
+ $arUser = $userservice->getUserByUsername($arValues['username']);
+ $password = $userservice->generatePassword($arUser['uId']);
+ if ($password === false) {
+ $tplVars['error'] = T_('There was an error while generating your new password. Please try again.');
+ } else {
+ //change password and send email out
+ $message = T_('Your new password is:')
+ . "\n" . $password . "\n\n"
+ . T_('To keep your bookmarks secure, you should change this password in your profile the next time you log in.');
+ $message = wordwrap($message, 70);
+ $headers = 'From: '. $adminemail;
+ $mail = mail(
+ $arValues['email'],
+ sprintf(T_('%s Account Information'), $sitename),
+ $message
+ );
+ $tplVars['msg'] = sprintf(
+ T_('New password generated and sent to %s'),
+ $arValues['email']
+ );
+ $captcha->clearCaptchaSession();
+ }
+} else {
+ HTML_QuickForm2_Renderer::register(
+ 'coolarray',
+ 'SemanticScuttle_QuickForm2_Renderer_CoolArray'
+ );
+ //$renderer = HTML_QuickForm2_Renderer::factory('coolarray')
+ $renderer = new SemanticScuttle_QuickForm2_Renderer_CoolArray();
+ $renderer->setOption(
+ array(
+ 'group_hiddens' => true,
+ 'group_errors' => true
+ )
+ );
+
+ $tplVars['form'] = $form->render($renderer);
+ //fscking form error is not in form|errors
+ $tplVars['error'] .= implode(
+ '<br/>',
+ array_unique(
+ array_merge(
+ $tplVars['form']['errors'],
+ array($form->getError())
+ )
+ )
+ );
}
-$templatename = 'password.tpl';
+$tplVars['loadjs'] = true;
$tplVars['subtitle'] = T_('Forgotten Password');
-$tplVars['formaction'] = createURL('password');
-$templateservice->loadTemplate($templatename, $tplVars);
+$templateservice->loadTemplate('password.tpl', $tplVars);
?>