streams/mod/register.php
redmatrix baedd25309 'auto channel creation' - if the corresponding config variable is set, create a channel when an account is created.
Plugins can provide the necessary channel details (probably from an extended registration form). If no details are provided, a social (mostly public) channel will be created using the LHS of the email address and you will be directed to your channel page (unless email verification is required, in which case this step will be delayed until successful validation and login). If the reddress is already assigned a random name(1000-9999) reddress will be assigned.
2016-01-12 15:43:08 -08:00

247 lines
6.9 KiB
PHP

<?php
require_once('include/identity.php');
function register_init(&$a) {
$result = null;
$cmd = ((argc() > 1) ? argv(1) : '');
// Provide a stored request for somebody desiring a connection
// when they first need to register someplace. Once they've
// created a channel, we'll try to revive the connection request
// and process it.
if($_REQUEST['connect'])
$_SESSION['connect'] = $_REQUEST['connect'];
switch($cmd) {
case 'invite_check.json':
$result = check_account_invite($_REQUEST['invite_code']);
break;
case 'email_check.json':
$result = check_account_email($_REQUEST['email']);
break;
case 'password_check.json':
$result = check_account_password($_REQUEST['password']);
break;
default:
break;
}
if($result) {
json_return_and_die($result);
}
}
function register_post(&$a) {
$max_dailies = intval(get_config('system','max_daily_registrations'));
if($max_dailies) {
$r = q("select count(account_id) as total from account where account_created > %s - INTERVAL %s",
db_utcnow(), db_quoteinterval('1 day')
);
if($r && $r[0]['total'] >= $max_dailies) {
notice( t('Maximum daily site registrations exceeded. Please try again tomorrow.') . EOL);
return;
}
}
if(! x($_POST,'tos')) {
notice( t('Please indicate acceptance of the Terms of Service. Registration failed.') . EOL);
return;
}
$policy = get_config('system','register_policy');
$email_verify = get_config('system','verify_email');
switch($policy) {
case REGISTER_OPEN:
$flags = ACCOUNT_OK;
break;
case REGISTER_APPROVE:
$flags = ACCOUNT_BLOCKED | ACCOUNT_PENDING;
break;
default:
case REGISTER_CLOSED:
if(! is_site_admin()) {
notice( t('Permission denied.') . EOL );
return;
}
$flags = ACCOUNT_BLOCKED;
break;
}
if($email_verify && $policy == REGISTER_OPEN)
$flags = $flags | ACCOUNT_UNVERIFIED;
if((! $_POST['password']) || ($_POST['password'] !== $_POST['password2'])) {
notice( t('Passwords do not match.') . EOL);
return;
}
$arr = $_POST;
$arr['account_flags'] = $flags;
$result = create_account($arr);
if(! $result['success']) {
notice($result['message']);
return;
}
require_once('include/security.php');
$using_invites = intval(get_config('system','invitation_only'));
$num_invites = intval(get_config('system','number_invites'));
$invite_code = ((x($_POST,'invite_code')) ? notags(trim($_POST['invite_code'])) : '');
if($using_invites && $invite_code) {
q("delete * from register where hash = '%s'", dbesc($invite_code));
// @FIXME - this also needs to be considered when using 'invites_remaining' in mod/invite.php
set_aconfig($result['account']['account_id'],'system','invites_remaining',$num_invites);
}
if($policy == REGISTER_OPEN ) {
if($email_verify) {
$res = verify_email_address($result);
}
else {
$res = send_register_success_email($result['email'],$result['password']);
}
if($res) {
info( t('Registration successful. Please check your email for validation instructions.') . EOL ) ;
}
}
elseif($policy == REGISTER_APPROVE) {
$res = send_reg_approval_email($result);
if($res) {
info( t('Your registration is pending approval by the site owner.') . EOL ) ;
}
else {
notice( t('Your registration can not be processed.') . EOL);
}
goaway(z_root());
}
if($email_verify) {
goaway(z_root());
}
authenticate_success($result['account'],true,false,true);
$new_channel = false;
if(get_config('system','auto_channel_create')) {
$new_channel = auto_channel_create($result['account']['account_id']);
if($new_channel['success']) {
$channel_id = $new_channel['channel']['channel_id'];
change_channel($channel_id);
$next_page = '~';
}
else
$new_channel = false;
}
if(! $new_channel) {
if(! strlen($next_page = get_config('system','workflow_register_next')))
$next_page = 'new_channel';
$_SESSION['workflow'] = true;
}
goaway(z_root() . '/' . $next_page);
}
function register_content(&$a) {
$registration_is = '';
$other_sites = '';
if(get_config('system','register_policy') == REGISTER_CLOSED) {
if(get_config('system','directory_mode') == DIRECTORY_MODE_STANDALONE) {
notice( t('Registration on this site is disabled.') . EOL);
return;
}
require_once('mod/pubsites.php');
return pubsites_content($a);
}
if(get_config('system','register_policy') == REGISTER_APPROVE) {
$registration_is = t('Registration on this site/hub is by approval only.');
$other_sites = t('<a href="pubsites">Register at another affiliated site/hub</a>');
}
$max_dailies = intval(get_config('system','max_daily_registrations'));
if($max_dailies) {
$r = q("select count(account_id) as total from account where account_created > %s - INTERVAL %s",
db_utcnow(), db_quoteinterval('1 day')
);
if($r && $r[0]['total'] >= $max_dailies) {
logger('max daily registrations exceeded.');
notice( t('This site has exceeded the number of allowed daily account registrations. Please try again tomorrow.') . EOL);
return;
}
}
// Configurable terms of service link
$tosurl = get_config('system','tos_url');
if(! $tosurl)
$tosurl = $a->get_baseurl() . '/help/TermsOfService';
$toslink = '<a href="' . $tosurl . '" >' . t('Terms of Service') . '</a>';
// Configurable whether to restrict age or not - default is based on international legal requirements
// This can be relaxed if you are on a restricted server that does not share with public servers
if(get_config('system','no_age_restriction'))
$label_tos = sprintf( t('I accept the %s for this website'), $toslink);
else
$label_tos = sprintf( t('I am over 13 years of age and accept the %s for this website'), $toslink);
$enable_tos = 1 - intval(get_config('system','no_termsofservice'));
$email = ((x($_REQUEST,'email')) ? strip_tags(trim($_REQUEST['email'])) : "" );
$password = ((x($_REQUEST,'password')) ? trim($_REQUEST['password']) : "" );
$password2 = ((x($_REQUEST,'password2')) ? trim($_REQUEST['password2']) : "" );
$invite_code = ((x($_REQUEST,'invite_code')) ? strip_tags(trim($_REQUEST['invite_code'])) : "" );
require_once('include/bbcode.php');
$o = replace_macros(get_markup_template('register.tpl'), array(
'$title' => t('Registration'),
'$reg_is' => $registration_is,
'$registertext' => bbcode(get_config('system','register_text')),
'$other_sites' => $other_sites,
'$invitations' => get_config('system','invitation_only'),
'$invite_desc' => t('Membership on this site is by invitation only.'),
'$label_invite' => t('Please enter your invitation code'),
'$invite_code' => $invite_code,
'$label_email' => t('Your email address'),
'$label_pass1' => t('Choose a password'),
'$label_pass2' => t('Please re-enter your password'),
'$label_tos' => $label_tos,
'$enable_tos' => $enable_tos,
'$email' => $email,
'$pass1' => $password,
'$pass2' => $password2,
'$submit' => t('Register')
));
return $o;
}