/**
* Send forgot password email.
*
* @param $Email
* @return bool
* @throws Exception
*/
public function passwordRequest($Email)
{
if (!$Email) {
return false;
}
$Users = $this->getWhere(array('Email' => $Email))->resultObject();
if (count($Users) == 0) {
// Check for the username.
$Users = $this->getWhere(array('Name' => $Email))->resultObject();
}
$this->EventArguments['Users'] =& $Users;
$this->EventArguments['Email'] = $Email;
$this->fireEvent('BeforePasswordRequest');
if (count($Users) == 0) {
$this->Validation->addValidationResult('Name', "Couldn't find an account associated with that email/username.");
return false;
}
$NoEmail = true;
foreach ($Users as $User) {
if (!$User->Email) {
continue;
}
$Email = new Gdn_Email();
// Instantiate in loop to clear previous settings
$PasswordResetKey = BetterRandomString(20, 'Aa0');
$PasswordResetExpires = strtotime('+1 hour');
$this->saveAttribute($User->UserID, 'PasswordResetKey', $PasswordResetKey);
$this->saveAttribute($User->UserID, 'PasswordResetExpires', $PasswordResetExpires);
$AppTitle = c('Garden.Title');
$Email->subject(sprintf(t('[%s] Password Reset Request'), $AppTitle));
$Email->to($User->Email);
$Email->message(sprintf(t('PasswordRequest'), $User->Name, $AppTitle, ExternalUrl('/entry/passwordreset/' . $User->UserID . '/' . $PasswordResetKey)));
$Email->send();
$NoEmail = false;
}
if ($NoEmail) {
$this->Validation->addValidationResult('Name', 'There is no email address associated with that account.');
return false;
}
return true;
}