Файл: concrete5.7.5.6/concrete/controllers/single_page/register.php
Строк: 311
<?php
namespace ConcreteControllerSinglePage;
use PageController;
use Config;
use Loader;
use User;
use UserInfo;
use UserAttributeKey;
class Register extends PageController {
public $helpers = array('form', 'html');
protected $displayUserName = true;
public function on_start() {
if(!in_array(Config::get('concrete.user.registration.type'), array('validate_email', 'enabled', 'manual_approve'))) {
$this->replace('/page_not_found');
}
$u = new User();
$this->set('u', $u);
$this->set('displayUserName', $this->displayUserName);
$this->requireAsset('css', 'core/frontend/captcha');
}
public function forward($cID = 0) {
$this->set('rcID', Loader::helper('security')->sanitizeInt($cID));
}
public function do_register() {
$e = Loader::helper('validation/error');
$ip = Loader::helper('validation/ip');
$txt = Loader::helper('text');
$vals = Loader::helper('validation/strings');
$valc = Loader::helper('concrete/validation');
$token = Core::make('ConcreteCoreValidationCSRFToken');
if ($token->validate('register.do_register')) {
$username = $_POST['uName'];
$password = $_POST['uPassword'];
$passwordConfirm = $_POST['uPasswordConfirm'];
// clean the username
$username = trim($username);
$username = preg_replace("/ +/", " ", $username);
if ($ip->isBanned()) {
$e->add($ip->getErrorMessage());
}
if (Config::get('concrete.user.registration.captcha')) {
$captcha = Loader::helper('validation/captcha');
if (!$captcha->check()) {
$e->add(t("Incorrect image validation code. Please check the image and re-enter the letters or numbers as necessary."));
}
}
if (!$vals->email($_POST['uEmail'])) {
$e->add(t('Invalid email address provided.'));
} elseif (!$valc->isUniqueEmail($_POST['uEmail'])) {
$e->add(t("The email address %s is already in use. Please choose another.", $_POST['uEmail']));
}
if ($this->displayUserName) {
if (strlen($username) < Config::get('concrete.user.username.minimum')) {
$e->add(t('A username must be at least %s characters long.',
Config::get('concrete.user.username.minimum')));
}
if (strlen($username) > Config::get('concrete.user.username.maximum')) {
$e->add(t('A username cannot be more than %s characters long.',
Config::get('concrete.user.username.maximum')));
}
if (strlen($username) >= Config::get('concrete.user.username.minimum') && strlen($username) <= Config::get('concrete.user.username.maximum') && !$valc->username($username)) {
if (Config::get('concrete.user.username.allow_spaces')) {
$e->add(t('A username may only contain letters, numbers, spaces (not at the beginning/end), dots (not at the beginning/end), underscores (not at the beginning/end).'));
} else {
$e->add(t('A username may only contain letters, numbers, dots (not at the beginning/end), underscores (not at the beginning/end).'));
}
}
if (!$valc->isUniqueUsername($username)) {
$e->add(t("The username %s already exists. Please choose another", $username));
}
}
if ($username == USER_SUPER) {
$e->add(t('Invalid Username'));
}
Core::make('validator/password')->isValid($password, $e);
if ($password) {
if ($password != $passwordConfirm) {
$e->add(t('The two passwords provided do not match.'));
}
}
$aks = UserAttributeKey::getRegistrationList();
foreach ($aks as $uak) {
if ($uak->isAttributeKeyRequiredOnRegister()) {
$e1 = $uak->validateAttributeForm();
if ($e1 == false) {
$e->add(t('The field "%s" is required', $uak->getAttributeKeyDisplayName()));
} elseif ($e1 instanceof ConcreteCoreErrorError) {
$e->add($e1);
}
}
}
} else {
$e->add(t('Invalid token.'));
}
if (!$e->has()) {
// do the registration
$data = $_POST;
$data['uName'] = $username;
$data['uPassword'] = $password;
$data['uPasswordConfirm'] = $passwordConfirm;
$process = UserInfo::register($data);
if (is_object($process)) {
$process->saveUserAttributesForm($aks);
if (Config::get('concrete.user.registration.notification')) { //do we notify someone if a new user is added?
$mh = Loader::helper('mail');
if(Config::get('concrete.user.registration.notification_email')) {
$mh->to(Config::get('concrete.user.registration.notification_email'));
} else {
$adminUser = UserInfo::getByID(USER_SUPER_ID);
if (is_object($adminUser)) {
$mh->to($adminUser->getUserEmail());
}
}
$mh->addParameter('uID', $process->getUserID());
$mh->addParameter('user', $process);
$mh->addParameter('uName', $process->getUserName());
$mh->addParameter('uEmail', $process->getUserEmail());
$attribs = UserAttributeKey::getRegistrationList();
$attribValues = array();
foreach($attribs as $ak) {
$attribValues[] = $ak->getAttributeKeyDisplayName('text') . ': ' . $process->getAttribute($ak->getAttributeKeyHandle(), 'display');
}
$mh->addParameter('attribs', $attribValues);
$mh->addParameter('siteName', Config::get('concrete.site'));
if (Config::get('concrete.user.registration.notification_email')) {
$mh->from(Config::get('concrete.user.registration.notification_email'), t('Website Registration Notification'));
} else {
$adminUser = UserInfo::getByID(USER_SUPER_ID);
if (is_object($adminUser)) {
$mh->from($adminUser->getUserEmail(), t('Website Registration Notification'));
}
}
if(Config::get('concrete.user.registration.type') == 'manual_approve') {
$mh->load('user_register_approval_required');
} else {
$mh->load('user_register');
}
$mh->sendMail();
}
// now we log the user in
if (Config::get('concrete.user.registration.email_registration')) {
$u = new User($_POST['uEmail'], $_POST['uPassword']);
} else {
$u = new User($_POST['uName'], $_POST['uPassword']);
}
// if this is successful, uID is loaded into session for this user
$rcID = $this->post('rcID');
$nh = Loader::helper('validation/numbers');
if (!$nh->integer($rcID)) {
$rcID = 0;
}
// now we check whether we need to validate this user's email address
if (Config::get('concrete.user.registration.validate_email')) {
$uHash = $process->setupValidation();
$mh = Loader::helper('mail');
$fromEmail = (string) Config::get('concrete.email.validate_registration.address');
if (strpos($fromEmail, '@')) {
$fromName = (string) Config::get('concrete.email.validate_registration.name');
if ($fromName === '') {
$fromName = t('Validate Email Address');
}
$mh->from($fromEmail, $fromName);
}
$mh->addParameter('uEmail', $_POST['uEmail']);
$mh->addParameter('uHash', $uHash);
$mh->addParameter('site', Config::get('concrete.site'));
$mh->to($_POST['uEmail']);
$mh->load('validate_user_email');
$mh->sendMail();
//$this->redirect('/register', 'register_success_validate', $rcID);
$redirectMethod='register_success_validate';
$u->logout();
} else if(Config::get('concrete.user.registration.approval')) {
$ui = UserInfo::getByID($u->getUserID());
$ui->deactivate();
// Email to the user when he/she registered but needs approval
$mh = Loader::helper('mail');
$mh->addParameter('uEmail', $_POST['uEmail']);
$mh->addParameter('site', Config::get('concrete.site'));
$mh->to($_POST['uEmail']);
$mh->load('user_register_approval_required_to_user');
$mh->sendMail();
//$this->redirect('/register', 'register_pending', $rcID);
$redirectMethod='register_pending';
$this->set('message', $this->getRegisterPendingMsg());
$u->logout();
}
if (!$u->isError()) {
//$this->redirect('/register', 'register_success', $rcID);
if(!$redirectMethod){
$redirectMethod='register_success';
}
}
if($_REQUEST['format']!='JSON')
$this->redirect('/register', $redirectMethod, $rcID);
}
} else {
$this->set('error', $e);
}
}
public function register_success_validate($rcID = 0) {
$this->set('rcID', $rcID);
$this->set('registerSuccess', 'validate');
$this->set('successMsg', $this->getRegisterSuccessValidateMsgs() );
}
public function register_success($rcID = 0) {
$this->set('rcID', $rcID);
$this->set('registerSuccess', 'registered');
$this->set('successMsg', $this->getRegisterSuccessMsg() );
}
public function register_pending($rcID = 0) {
$this->set('rcID', $rcID);
$this->set('registerSuccess', 'pending');
$this->set('successMsg', $this->getRegisterPendingMsg() );
}
public function getRegisterSuccessMsg(){
return t('Your account has been created, and you are now logged in.');
}
public function getRegisterSuccessValidateMsgs(){
$msgs=array();
$msgs[]= t('You are registered but you need to validate your email address. Some or all functionality on this site will be limited until you do so.');
$msgs[]= t('An email has been sent to your email address. Click on the URL contained in the email to validate your email address.');
return $msgs;
}
public function getRegisterPendingMsg(){
return t('You are registered but a site administrator must review your account, you will not be able to login until your account has been approved.');
}
}
?>