/** * Execute the extra. */ public function execute() { // get activation key $key = $this->URL->getParameter(0); // load template $this->loadTemplate(); // do we have an activation key? if (isset($key)) { // get profile id $profileId = FrontendProfilesModel::getIdBySetting('activation_key', $key); // have id? if ($profileId != null) { // update status FrontendProfilesModel::update($profileId, array('status' => 'active')); // delete activation key FrontendProfilesModel::deleteSetting($profileId, 'activation_key'); // login profile FrontendProfilesAuthentication::login($profileId); // trigger event FrontendModel::triggerEvent('profiles', 'after_activate', array('id' => $profileId)); // show success message $this->tpl->assign('activationSuccess', true); } else { $this->redirect(FrontendNavigation::getURL(404)); } } else { $this->redirect(FrontendNavigation::getURL(404)); } }
/** * Validate the form */ private function validateForm() { // is the form submitted if ($this->frm->isSubmitted()) { // get field $txtEmail = $this->frm->getField('email'); // field is filled in? if ($txtEmail->isFilled(FL::getError('EmailIsRequired'))) { // valid email? if ($txtEmail->isEmail(FL::getError('EmailIsInvalid'))) { // email exists? if (FrontendProfilesModel::existsByEmail($txtEmail->getValue())) { // get profile id using the filled in email $profileId = FrontendProfilesModel::getIdByEmail($txtEmail->getValue()); // get profile $profile = FrontendProfilesModel::get($profileId); // must be inactive if ($profile->getStatus() != FrontendProfilesAuthentication::LOGIN_INACTIVE) { $txtEmail->addError(FL::getError('ProfileIsActive')); } } else { $txtEmail->addError(FL::getError('EmailIsInvalid')); } } } // valid login if ($this->frm->isCorrect()) { // activation URL $mailValues['activationUrl'] = SITE_URL . FrontendNavigation::getURLForBlock('profiles', 'activate') . '/' . $profile->getSetting('activation_key'); // trigger event FrontendModel::triggerEvent('profiles', 'after_resend_activation', array('id' => $profileId)); // send email FrontendMailer::addEmail(FL::getMessage('RegisterSubject'), FRONTEND_MODULES_PATH . '/profiles/layout/templates/mails/register.tpl', $mailValues, $profile->getEmail(), ''); // redirect $this->redirect(SELF . '?sent=true'); } else { $this->tpl->assign('resendActivationHasError', true); } } }
/** * Validate the form. */ private function validateForm() { // is the form submitted if ($this->frm->isSubmitted()) { // get fields $txtEmail = $this->frm->getField('email'); $txtPassword = $this->frm->getField('password'); $chkRemember = $this->frm->getField('remember'); // required fields $txtEmail->isFilled(FL::getError('EmailIsRequired')); $txtPassword->isFilled(FL::getError('PasswordIsRequired')); // both fields filled in if ($txtEmail->isFilled() && $txtPassword->isFilled()) { // valid email? if ($txtEmail->isEmail(FL::getError('EmailIsInvalid'))) { // get the status for the given login $loginStatus = FrontendProfilesAuthentication::getLoginStatus($txtEmail->getValue(), $txtPassword->getValue()); // valid login? if ($loginStatus !== FrontendProfilesAuthentication::LOGIN_ACTIVE) { // get the error string to use $errorString = sprintf(FL::getError('Profiles' . SpoonFilter::toCamelCase($loginStatus) . 'Login'), FrontendNavigation::getURLForBlock('profiles', 'resend_activation')); // add the error to stack $this->frm->addError($errorString); // add the error to the template variables $this->tpl->assign('loginError', $errorString); } } } // valid login if ($this->frm->isCorrect()) { // get profile id $profileId = FrontendProfilesModel::getIdByEmail($txtEmail->getValue()); // login FrontendProfilesAuthentication::login($profileId, $chkRemember->getChecked()); // update salt and password for Dieter's security features FrontendProfilesAuthentication::updatePassword($profileId, $txtPassword->getValue()); // trigger event FrontendModel::triggerEvent('profiles', 'after_logged_in', array('id' => $profileId)); // querystring $queryString = urldecode(SpoonFilter::getGetValue('queryString', null, SITE_URL)); // redirect $this->redirect($queryString); } } }
/** * Validate the form */ private function validateForm() { // is the form submitted if ($this->frm->isSubmitted()) { // get field $txtEmail = $this->frm->getField('email'); // field is filled in? if ($txtEmail->isFilled(FL::getError('EmailIsRequired'))) { // valid email? if ($txtEmail->isEmail(FL::getError('EmailIsInvalid'))) { // email exists? if (!FrontendProfilesModel::existsByEmail($txtEmail->getValue())) { $txtEmail->addError(FL::getError('EmailIsUnknown')); } } } // valid login if ($this->frm->isCorrect()) { // get profile id $profileId = FrontendProfilesModel::getIdByEmail($txtEmail->getValue()); // generate forgot password key $key = FrontendProfilesModel::getEncryptedString($profileId . microtime(), FrontendProfilesModel::getRandomString()); // insert forgot password key FrontendProfilesModel::setSetting($profileId, 'forgot_password_key', $key); // reset url $mailValues['resetUrl'] = SITE_URL . FrontendNavigation::getURLForBlock('profiles', 'reset_password') . '/' . $key; $mailValues['firstName'] = FrontendProfilesModel::getSetting($profileId, 'first_name'); $mailValues['lastName'] = FrontendProfilesModel::getSetting($profileId, 'last_name'); // trigger event FrontendModel::triggerEvent('profiles', 'after_forgot_password', array('id' => $profileId)); // send email FrontendMailer::addEmail(FL::getMessage('ForgotPasswordSubject'), FRONTEND_MODULES_PATH . '/profiles/layout/templates/mails/forgot_password.tpl', $mailValues, $txtEmail->getValue(), ''); // redirect $this->redirect(SELF . '?sent=true'); } else { $this->tpl->assign('forgotPasswordHasError', true); } } }
/** * Validate the form */ private function validateForm() { // is the form submitted if ($this->frm->isSubmitted()) { // get fields $txtEmail = $this->frm->getField('email'); $txtPassword = $this->frm->getField('password'); // check email if ($txtEmail->isFilled(FL::getError('EmailIsRequired'))) { // valid email? if ($txtEmail->isEmail(FL::getError('EmailIsInvalid'))) { // email already exists? if (FrontendProfilesModel::existsByEmail($txtEmail->getValue())) { // set error $txtEmail->setError(FL::getError('EmailExists')); } } } // check password $txtPassword->isFilled(FL::getError('PasswordIsRequired')); // no errors if ($this->frm->isCorrect()) { // generate salt $salt = FrontendProfilesModel::getRandomString(); // init values $values = array(); // values $values['email'] = $txtEmail->getValue(); $values['password'] = FrontendProfilesModel::getEncryptedString($txtPassword->getValue(), $salt); $values['status'] = 'inactive'; $values['display_name'] = $txtEmail->getValue(); $values['registered_on'] = FrontendModel::getUTCDate(); /* * Add a profile. * We use a try-catch statement to catch errors when more users sign up simultaneously. */ try { // insert profile $profileId = FrontendProfilesModel::insert($values); // use the profile id as url until we have an actual url FrontendProfilesModel::update($profileId, array('url' => FrontendProfilesModel::getUrl($values['display_name']))); // trigger event FrontendModel::triggerEvent('profiles', 'after_register', array('id' => $profileId)); // generate activation key $activationKey = FrontendProfilesModel::getEncryptedString($profileId . microtime(), $salt); // set settings FrontendProfilesModel::setSetting($profileId, 'salt', $salt); FrontendProfilesModel::setSetting($profileId, 'activation_key', $activationKey); // login FrontendProfilesAuthentication::login($profileId); // activation URL $mailValues['activationUrl'] = SITE_URL . FrontendNavigation::getURLForBlock('profiles', 'activate') . '/' . $activationKey; // send email FrontendMailer::addEmail(FL::getMessage('RegisterSubject'), FRONTEND_MODULES_PATH . '/profiles/layout/templates/mails/register.tpl', $mailValues, $values['email'], ''); // redirect $this->redirect(SELF . '?sent=true'); } catch (Exception $e) { // when debugging we need to see the exceptions if (SPOON_DEBUG) { throw $e; } // show error $this->tpl->assign('registerHasFormError', true); } } else { $this->tpl->assign('registerHasFormError', true); } } }
/** * Update profile password and salt. * * @return void * @param int $profileId Profile id for which we are changing the password. * @param string $password New password. */ public static function updatePassword($profileId, $password) { // redefine $profileId = (int) $profileId; $password = (string) $password; // get new salt $salt = FrontendProfilesModel::getRandomString(); // encrypt password $encryptedPassword = FrontendProfilesModel::getEncryptedString($password, $salt); // update salt FrontendProfilesModel::setSetting($profileId, 'salt', $salt); // update password FrontendProfilesModel::update($profileId, array('password' => $encryptedPassword)); }
/** * Set a profile setting. * * @return void * @param string $name Setting name. * @param string $value New setting value. */ public function setSetting($name, $value) { // set setting FrontendProfilesModel::setSetting($this->getId(), (string) $name, $value); // add setting to cache $this->settings[$name] = $value; }
/** * Validate the form. */ private function validateForm() { // is the form submitted if ($this->frm->isSubmitted()) { // get fields $txtPassword = $this->frm->getField('password'); $txtEmail = $this->frm->getField('email'); // password filled in? if ($txtPassword->isFilled(FL::getError('PasswordIsRequired'))) { // password correct? if (FrontendProfilesAuthentication::getLoginStatus($this->profile->getEmail(), $txtPassword->getValue()) !== FrontendProfilesAuthentication::LOGIN_ACTIVE) { // set error $txtPassword->addError(FL::getError('InvalidPassword')); } // email filled in? if ($txtEmail->isFilled(FL::getError('EmailIsRequired'))) { // valid email? if ($txtEmail->isEmail(FL::getError('EmailIsInvalid'))) { // email already exists? if (FrontendProfilesModel::existsByEmail($txtEmail->getValue(), $this->profile->getId())) { // set error $txtEmail->setError(FL::getError('EmailExists')); } } } } // no errors if ($this->frm->isCorrect()) { // update email FrontendProfilesModel::update($this->profile->getId(), array('email' => $txtEmail->getValue())); // trigger event FrontendModel::triggerEvent('profiles', 'after_change_email', array('id' => $this->profile->getId())); // redirect $this->redirect(SITE_URL . FrontendNavigation::getURLForBlock('profiles', 'change_email') . '?sent=true'); } else { $this->tpl->assign('updateEmailHasFormError', true); } } }
/** * Validate the form. */ private function validateForm() { // is the form submitted if ($this->frm->isSubmitted()) { // get fields $txtDisplayName = $this->frm->getField('display_name'); $txtFirstName = $this->frm->getField('first_name'); $txtLastName = $this->frm->getField('last_name'); $txtCity = $this->frm->getField('city'); $ddmCountry = $this->frm->getField('country'); $ddmGender = $this->frm->getField('gender'); $ddmDay = $this->frm->getField('day'); $ddmMonth = $this->frm->getField('month'); $ddmYear = $this->frm->getField('year'); // get number of display name changes $nameChanges = (int) FrontendProfilesModel::getSetting($this->profile->getId(), 'display_name_changes'); // has there been a valid display name change request? if ($this->profile->getDisplayName() !== $txtDisplayName->getValue() && $nameChanges <= FrontendProfilesModel::MAX_DISPLAY_NAME_CHANGES) { // display name filled in? if ($txtDisplayName->isFilled(FL::getError('FieldIsRequired'))) { // display name exists? if (FrontendProfilesModel::existsDisplayName($txtDisplayName->getValue(), $this->profile->getId())) { // set error $txtDisplayName->addError(FL::getError('DisplayNameExists')); } } } // birthdate is not required but if one is filled we need all if ($ddmMonth->isFilled() || $ddmDay->isFilled() || $ddmYear->isFilled()) { // valid birth date? if (!checkdate($ddmMonth->getValue(), $ddmDay->getValue(), $ddmYear->getValue())) { // set error $ddmYear->addError(FL::getError('DateIsInvalid')); } } // no errors if ($this->frm->isCorrect()) { // init $values = array(); // has there been a valid display name change request? if ($this->profile->getDisplayName() !== $txtDisplayName->getValue() && $nameChanges <= FrontendProfilesModel::MAX_DISPLAY_NAME_CHANGES) { // get display name value $values['display_name'] = $txtDisplayName->getValue(); // update url based on the new display name $values['url'] = FrontendProfilesModel::getUrl($txtDisplayName->getValue(), $this->profile->getId()); // update display name count $this->profile->setSetting('display_name_changes', $nameChanges + 1); } // update values if (!empty($values)) { FrontendProfilesModel::update($this->profile->getId(), $values); } // bday is filled in if ($ddmYear->isFilled()) { // mysql format $birthDate = $ddmYear->getValue() . '-'; $birthDate .= str_pad($ddmMonth->getValue(), 2, '0', STR_PAD_LEFT) . '-'; $birthDate .= str_pad($ddmDay->getValue(), 2, '0', STR_PAD_LEFT); } else { $birthDate = null; } // update settings $this->profile->setSetting('first_name', $txtFirstName->getValue()); $this->profile->setSetting('last_name', $txtLastName->getValue()); $this->profile->setSetting('city', $txtCity->getValue()); $this->profile->setSetting('country', $ddmCountry->getValue()); $this->profile->setSetting('gender', $ddmGender->getValue()); $this->profile->setSetting('birth_date', $birthDate); // trigger event FrontendModel::triggerEvent('profiles', 'after_saved_settings', array('id' => $this->profile->getId())); // redirect $this->redirect(SITE_URL . FrontendNavigation::getURLForBlock('profiles', 'settings') . '?sent=true'); } else { $this->tpl->assign('updateSettingsHasFormError', true); } } }
/** * Validate the form. * * @return void */ private function validateForm() { // is the form submitted if ($this->frm->isSubmitted()) { // get fields $txtPassword = $this->frm->getField('password'); // field is filled in? $txtPassword->isFilled(FL::getError('PasswordIsRequired')); // valid if ($this->frm->isCorrect()) { // get profile id $profileId = FrontendProfilesModel::getIdBySetting('forgot_password_key', $this->URL->getParameter(0)); // remove key (we can only update the password once with this key) FrontendProfilesModel::deleteSetting($profileId, 'forgot_password_key'); // update password FrontendProfilesAuthentication::updatePassword($profileId, $txtPassword->getValue()); // login (check again because we might have logged in in the meanwhile) if (!FrontendProfilesAuthentication::isLoggedIn()) { FrontendProfilesAuthentication::login($profileId); } // trigger event FrontendModel::triggerEvent('profiles', 'after_reset_password', array('id' => $profileId)); // redirect $this->redirect(FrontendNavigation::getURLForBlock('profiles', 'reset_password') . '/' . $this->URL->getParameter(0) . '?saved=true'); } else { $this->tpl->assign('forgotPasswordHasError', true); } } }