private function validateForm()
{
// is the form submitted
if ($this->frm->isSubmitted()) {
// get fields
$txtDisplayName = $this->frm->getField('display_name');
$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'));
$txtDisplayName->isFilled(FL::getError('FieldIsRequired'));
// no errors
if ($this->frm->isCorrect()) {
// init values
$settings = array();
$values = array();
// generate salt
$settings['salt'] = FrontendProfilesModel::getRandomString();
$settings['language'] = LANGUAGE;
// values
$values['email'] = $txtEmail->getValue();
$values['password'] = FrontendProfilesModel::getEncryptedString($txtPassword->getValue(), $settings['salt']);
$values['status'] = 'inactive';
$values['display_name'] = $txtDisplayName->getValue();
$values['registered_on'] = FrontendModel::getUTCDate();
$values['last_login'] = FrontendModel::getUTCDate(null, 0);
/*
* 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
$settings['activation_key'] = FrontendProfilesModel::getEncryptedString($profileId . microtime(), $settings['salt']);
// set settings
FrontendProfilesModel::setSettings($profileId, $settings);
// login
FrontendProfilesAuthentication::login($profileId);
// activation URL
$mailValues['activationUrl'] = SITE_URL . FrontendNavigation::getURLForBlock('Profiles', 'Activate') . '/' . $settings['activation_key'];
// send email
$from = $this->get('fork.settings')->get('Core', 'mailer_from');
$replyTo = $this->get('fork.settings')->get('Core', 'mailer_reply_to');
$message = Message::newInstance(FL::getMessage('RegisterSubject'))->setFrom(array($from['email'] => $from['name']))->setTo(array($txtEmail->getValue() => ''))->setReplyTo(array($replyTo['email'] => $replyTo['name']))->parseHtml('/Profiles/Layout/Templates/Mails/Register.html.twig', $mailValues, true);
$this->get('mailer')->send($message);
// redirect
$this->redirect(SITE_URL . $this->URL->getQueryString() . '?sent=true');
} catch (\Exception $e) {
// make sure RedirectExceptions get thrown
if ($e instanceof RedirectException) {
throw $e;
}
// when debugging we need to see the exceptions
if ($this->getContainer()->getParameter('kernel.debug')) {
throw $e;
}
// show error
$this->tpl->assign('registerHasFormError', true);
}
} else {
$this->tpl->assign('registerHasFormError', true);
}
}
}