/** * Send forgot password email. * * @param string $Email * @return bool */ public function passwordRequest($Email) { if (!$Email) { return false; } $Users = $this->getWhere(['Email' => $Email])->resultObject(); if (count($Users) == 0) { // Check for the username. $Users = $this->getWhere(['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('[' . $AppTitle . '] ' . t('Reset Your Password')); $Email->to($User->Email); $emailTemplate = $Email->getEmailTemplate()->setTitle(t('Reset Your Password'))->setMessage(sprintf(t('We\'ve received a request to change your password.'), $AppTitle))->setButton(externalUrl('/entry/passwordreset/' . $User->UserID . '/' . $PasswordResetKey), t('Change My Password')); $Email->setEmailTemplate($emailTemplate); try { $Email->send(); } catch (Exception $e) { if (debug()) { throw $e; } } $NoEmail = false; } if ($NoEmail) { $this->Validation->addValidationResult('Name', 'There is no email address associated with that account.'); return false; } return true; }
/** * 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; }
/** * Prompts new admins how to get started using new install. * * @since 2.0.0 * @access public */ public function gettingStarted() { $this->permission('Garden.Settings.Manage'); $this->setData('Title', t('Getting Started')); $this->addSideMenu('dashboard/settings/gettingstarted'); $this->TextEnterEmails = t('TextEnterEmails', 'Type email addresses separated by commas here'); if ($this->Form->authenticatedPostBack()) { // Do invitations to new members. $Message = $this->Form->getFormValue('InvitationMessage'); $Message .= "\n\n" . Gdn::request()->Url('/', true); $Message = trim($Message); $Recipients = $this->Form->getFormValue('Recipients'); if ($Recipients == $this->TextEnterEmails) { $Recipients = ''; } $Recipients = explode(',', $Recipients); $CountRecipients = 0; foreach ($Recipients as $Recipient) { if (trim($Recipient) != '') { $CountRecipients++; if (!validateEmail($Recipient)) { $this->Form->addError(sprintf(t('%s is not a valid email address'), $Recipient)); } } } if ($CountRecipients == 0) { $this->Form->addError(t('You must provide at least one recipient')); } if ($this->Form->errorCount() == 0) { $Email = new Gdn_Email(); $Email->subject(t('Check out my new community!')); $Email->message($Message); foreach ($Recipients as $Recipient) { if (trim($Recipient) != '') { $Email->to($Recipient); try { $Email->send(); } catch (Exception $ex) { $this->Form->addError($ex); } } } } if ($this->Form->errorCount() == 0) { $this->informMessage(t('Your invitations were sent successfully.')); } } $this->render(); }
/** * * * @param $InvitationID * @throws Exception */ public function send($InvitationID) { $Invitation = $this->GetByInvitationID($InvitationID); $Session = Gdn::session(); if ($Invitation === false) { throw new Exception(t('ErrorRecordNotFound')); } elseif ($Session->UserID != $Invitation->SenderUserID) { throw new Exception(t('InviteErrorPermission', t('ErrorPermission'))); } else { // Some information for the email $RegistrationUrl = ExternalUrl("entry/registerinvitation/{$Invitation->Code}"); $AppTitle = Gdn::config('Garden.Title'); $Email = new Gdn_Email(); $Email->subject(sprintf(t('[%s] Invitation'), $AppTitle)); $Email->to($Invitation->Email); $Email->message(sprintf(t('EmailInvitation'), $Invitation->SenderName, $AppTitle, $RegistrationUrl)); $Email->send(); } }
/** * * * @param $InvitationID * @throws Exception */ public function send($InvitationID) { $Invitation = $this->GetByInvitationID($InvitationID); $Session = Gdn::session(); if ($Invitation === false) { throw new Exception(t('ErrorRecordNotFound')); } elseif ($Session->UserID != $Invitation->SenderUserID) { throw new Exception(t('InviteErrorPermission', t('ErrorPermission'))); } else { // Some information for the email $RegistrationUrl = ExternalUrl("entry/registerinvitation/{$Invitation->Code}"); $AppTitle = Gdn::config('Garden.Title'); $Email = new Gdn_Email(); $Email->subject(sprintf(t('[%s] Invitation'), $AppTitle)); $Email->to($Invitation->Email); $emailTemplate = $Email->getEmailTemplate(); $message = t('Hello!') . ' ' . sprintf(t('%s has invited you to join %s.'), $Invitation->SenderName, $AppTitle); $emailTemplate->setButton($RegistrationUrl, t('Join this Community Now'))->setMessage($message)->setTitle(sprintf(t('Join %s'), $AppTitle)); $Email->setEmailTemplate($emailTemplate); try { $Email->send(); } catch (Exception $e) { if (debug()) { throw $e; } } } }
/** * Queue a notification for sending. * * @since 2.0.17 * @access public * @param int $ActivityID * @param string $Story * @param string $Position * @param bool $Force */ public function queueNotification($ActivityID, $Story = '', $Position = 'last', $Force = false) { $Activity = $this->getID($ActivityID); if (!is_object($Activity)) { return; } $Story = Gdn_Format::text($Story == '' ? $Activity->Story : $Story, false); // If this is a comment on another activity, fudge the activity a bit so that everything appears properly. if (is_null($Activity->RegardingUserID) && $Activity->CommentActivityID > 0) { $CommentActivity = $this->getID($Activity->CommentActivityID); $Activity->RegardingUserID = $CommentActivity->RegardingUserID; $Activity->Route = '/activity/item/' . $Activity->CommentActivityID; } $User = Gdn::userModel()->getID($Activity->RegardingUserID, DATASET_TYPE_OBJECT); //$this->SQL->select('UserID, Name, Email, Preferences')->from('User')->where('UserID', $Activity->RegardingUserID)->get()->firstRow(); if ($User) { if ($Force) { $Preference = $Force; } else { // $Preferences = Gdn_Format::Unserialize($User->Preferences); $ConfigPreference = c('Preferences.Email.' . $Activity->ActivityType, '0'); if ($ConfigPreference !== false) { $Preference = val('Email.' . $Activity->ActivityType, $User->Preferences, $ConfigPreference); } else { $Preference = false; } } if ($Preference) { $ActivityHeadline = Gdn_Format::text(Gdn_Format::activityHeadline($Activity, $Activity->ActivityUserID, $Activity->RegardingUserID), false); $Email = new Gdn_Email(); $Email->subject(sprintf(t('[%1$s] %2$s'), Gdn::config('Garden.Title'), $ActivityHeadline)); $Email->to($User); $url = externalUrl(val('Route', $Activity) == '' ? '/' : val('Route', $Activity)); $emailTemplate = $Email->getEmailTemplate()->setButton($url, t('Check it out'))->setTitle(Gdn_Format::plainText(val('Headline', $Activity))); if ($message = val('Story', $Activity)) { $emailTemplate->setMessage($message, true); } $Email->setEmailTemplate($emailTemplate); if (!array_key_exists($User->UserID, $this->_NotificationQueue)) { $this->_NotificationQueue[$User->UserID] = array(); } $Notification = array('ActivityID' => $ActivityID, 'User' => $User, 'Email' => $Email, 'Route' => $Activity->Route, 'Story' => $Story, 'Headline' => $ActivityHeadline, 'Activity' => $Activity); if ($Position == 'first') { $this->_NotificationQueue[$User->UserID] = array_merge(array($Notification), $this->_NotificationQueue[$User->UserID]); } else { $this->_NotificationQueue[$User->UserID][] = $Notification; } } } }