add hooks for user registration

This commit is contained in:
Evan Prodromou 2010-01-29 17:54:54 -05:00
parent 2a054a50fb
commit 8cb8b357a4
2 changed files with 112 additions and 96 deletions

View File

@ -699,3 +699,12 @@ StartShowContentLicense: Showing the default license for content
EndShowContentLicense: Showing the default license for content EndShowContentLicense: Showing the default license for content
- $action: the current action - $action: the current action
StartUserRegister: When a new user is being registered
- &$profile: new profile data (no ID)
- &$user: new user account (no ID or URI)
EndUserRegister: When a new user has been registered
- &$profile: new profile data
- &$user: new user account

View File

@ -209,8 +209,6 @@ class User extends Memcached_DataObject
$profile = new Profile(); $profile = new Profile();
$profile->query('BEGIN');
if(!empty($email)) if(!empty($email))
{ {
$email = common_canonical_email($email); $email = common_canonical_email($email);
@ -220,7 +218,7 @@ class User extends Memcached_DataObject
$profile->nickname = $nickname; $profile->nickname = $nickname;
if(! User::allowed_nickname($nickname)){ if(! User::allowed_nickname($nickname)){
common_log(LOG_WARNING, sprintf("Attempted to register a nickname that is not allowed: %s", $profile->nickname), common_log(LOG_WARNING, sprintf("Attempted to register a nickname that is not allowed: %s", $profile->nickname),
__FILE__); __FILE__);
} }
$profile->profileurl = common_profile_url($nickname); $profile->profileurl = common_profile_url($nickname);
@ -248,16 +246,8 @@ class User extends Memcached_DataObject
$profile->created = common_sql_now(); $profile->created = common_sql_now();
$id = $profile->insert();
if (empty($id)) {
common_log_db_error($profile, 'INSERT', __FILE__);
return false;
}
$user = new User(); $user = new User();
$user->id = $id;
$user->nickname = $nickname; $user->nickname = $nickname;
if (!empty($password)) { // may not have a password for OpenID users if (!empty($password)) { // may not have a password for OpenID users
@ -282,109 +272,126 @@ class User extends Memcached_DataObject
$user->inboxed = 1; $user->inboxed = 1;
$user->created = common_sql_now(); $user->created = common_sql_now();
$user->uri = common_user_uri($user);
$result = $user->insert(); if (Event::handle('StartUserRegister', array(&$user, &$profile))) {
if (!$result) { $profile->query('BEGIN');
common_log_db_error($user, 'INSERT', __FILE__);
return false;
}
// Everyone gets an inbox $id = $profile->insert();
$inbox = new Inbox(); if (empty($id)) {
common_log_db_error($profile, 'INSERT', __FILE__);
$inbox->user_id = $user->id;
$inbox->notice_ids = '';
$result = $inbox->insert();
if (!$result) {
common_log_db_error($inbox, 'INSERT', __FILE__);
return false;
}
// Everyone is subscribed to themself
$subscription = new Subscription();
$subscription->subscriber = $user->id;
$subscription->subscribed = $user->id;
$subscription->created = $user->created;
$result = $subscription->insert();
if (!$result) {
common_log_db_error($subscription, 'INSERT', __FILE__);
return false;
}
if (!empty($email) && !$user->email) {
$confirm = new Confirm_address();
$confirm->code = common_confirmation_code(128);
$confirm->user_id = $user->id;
$confirm->address = $email;
$confirm->address_type = 'email';
$result = $confirm->insert();
if (!$result) {
common_log_db_error($confirm, 'INSERT', __FILE__);
return false; return false;
} }
}
if (!empty($code) && $user->email) { $user->id = $id;
$user->emailChanged(); $user->uri = common_user_uri($user);
}
// Default system subscription $result = $user->insert();
$defnick = common_config('newuser', 'default'); if (!$result) {
common_log_db_error($user, 'INSERT', __FILE__);
return false;
}
if (!empty($defnick)) { // Everyone gets an inbox
$defuser = User::staticGet('nickname', $defnick);
if (empty($defuser)) {
common_log(LOG_WARNING, sprintf("Default user %s does not exist.", $defnick),
__FILE__);
} else {
$defsub = new Subscription();
$defsub->subscriber = $user->id;
$defsub->subscribed = $defuser->id;
$defsub->created = $user->created;
$result = $defsub->insert(); $inbox = new Inbox();
$inbox->user_id = $user->id;
$inbox->notice_ids = '';
$result = $inbox->insert();
if (!$result) {
common_log_db_error($inbox, 'INSERT', __FILE__);
return false;
}
// Everyone is subscribed to themself
$subscription = new Subscription();
$subscription->subscriber = $user->id;
$subscription->subscribed = $user->id;
$subscription->created = $user->created;
$result = $subscription->insert();
if (!$result) {
common_log_db_error($subscription, 'INSERT', __FILE__);
return false;
}
if (!empty($email) && !$user->email) {
$confirm = new Confirm_address();
$confirm->code = common_confirmation_code(128);
$confirm->user_id = $user->id;
$confirm->address = $email;
$confirm->address_type = 'email';
$result = $confirm->insert();
if (!$result) { if (!$result) {
common_log_db_error($defsub, 'INSERT', __FILE__); common_log_db_error($confirm, 'INSERT', __FILE__);
return false; return false;
} }
} }
}
$profile->query('COMMIT');
if (!empty($email) && !$user->email) {
mail_confirm_address($user, $confirm->code, $profile->nickname, $email);
}
// Welcome message
$welcome = common_config('newuser', 'welcome');
if (!empty($welcome)) {
$welcomeuser = User::staticGet('nickname', $welcome);
if (empty($welcomeuser)) {
common_log(LOG_WARNING, sprintf("Welcome user %s does not exist.", $defnick),
__FILE__);
} else {
$notice = Notice::saveNew($welcomeuser->id,
sprintf(_('Welcome to %1$s, @%2$s!'),
common_config('site', 'name'),
$user->nickname),
'system');
if (!empty($code) && $user->email) {
$user->emailChanged();
} }
// Default system subscription
$defnick = common_config('newuser', 'default');
if (!empty($defnick)) {
$defuser = User::staticGet('nickname', $defnick);
if (empty($defuser)) {
common_log(LOG_WARNING, sprintf("Default user %s does not exist.", $defnick),
__FILE__);
} else {
$defsub = new Subscription();
$defsub->subscriber = $user->id;
$defsub->subscribed = $defuser->id;
$defsub->created = $user->created;
$result = $defsub->insert();
if (!$result) {
common_log_db_error($defsub, 'INSERT', __FILE__);
return false;
}
}
}
$profile->query('COMMIT');
if (!empty($email) && !$user->email) {
mail_confirm_address($user, $confirm->code, $profile->nickname, $email);
}
// Welcome message
$welcome = common_config('newuser', 'welcome');
if (!empty($welcome)) {
$welcomeuser = User::staticGet('nickname', $welcome);
if (empty($welcomeuser)) {
common_log(LOG_WARNING, sprintf("Welcome user %s does not exist.", $defnick),
__FILE__);
} else {
$notice = Notice::saveNew($welcomeuser->id,
sprintf(_('Welcome to %1$s, @%2$s!'),
common_config('site', 'name'),
$user->nickname),
'system');
}
}
Event::handle('EndUserRegister', array(&$profile, &$user));
} }
return $user; return $user;