e248066b74
Add the code to registration to handle invitation codes. Some edge cases on invitations: is the user already subbed to this person? Tell them. Is the person already on the system? Sub the user to them, then, and tell the user. Add some code to User to auto-sub invitees whenever the email address changes. Call it from a new registration with an invite code, and also from confirmaddress. Some whitespace cleanup in the files touched. darcs-hash:20080827001927-84dde-b50e5d921ca3f2fb894821730ff93cac09d2ba66.gz
96 lines
2.9 KiB
PHP
96 lines
2.9 KiB
PHP
<?php
|
|
/*
|
|
* Laconica - a distributed open-source microblogging tool
|
|
* Copyright (C) 2008, Controlez-Vous, Inc.
|
|
*
|
|
* This program is free software: you can redistribute it and/or modify
|
|
* it under the terms of the GNU Affero General Public License as published by
|
|
* the Free Software Foundation, either version 3 of the License, or
|
|
* (at your option) any later version.
|
|
*
|
|
* This program is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU Affero General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU Affero General Public License
|
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
*/
|
|
|
|
if (!defined('LACONICA')) { exit(1); }
|
|
|
|
class ConfirmaddressAction extends Action {
|
|
|
|
function handle($args) {
|
|
parent::handle($args);
|
|
if (!common_logged_in()) {
|
|
common_set_returnto($this->self_url());
|
|
common_redirect(common_local_url('login'));
|
|
return;
|
|
}
|
|
$code = $this->trimmed('code');
|
|
if (!$code) {
|
|
$this->client_error(_('No confirmation code.'));
|
|
return;
|
|
}
|
|
$confirm = Confirm_address::staticGet('code', $code);
|
|
if (!$confirm) {
|
|
$this->client_error(_('Confirmation code not found.'));
|
|
return;
|
|
}
|
|
$cur = common_current_user();
|
|
if ($cur->id != $confirm->user_id) {
|
|
$this->client_error(_('That confirmation code is not for you!'));
|
|
return;
|
|
}
|
|
$type = $confirm->address_type;
|
|
if (!in_array($type, array('email', 'jabber', 'sms'))) {
|
|
$this->server_error(sprintf(_('Unrecognized address type %s'), $type));
|
|
return;
|
|
}
|
|
if ($cur->$type == $confirm->address) {
|
|
$this->client_error(_('That address has already been confirmed.'));
|
|
return;
|
|
}
|
|
|
|
$cur->query('BEGIN');
|
|
|
|
$orig_user = clone($cur);
|
|
|
|
$cur->$type = $confirm->address;
|
|
|
|
if ($type == 'sms') {
|
|
$cur->carrier = ($confirm->address_extra)+0;
|
|
$carrier = Sms_carrier::staticGet($cur->carrier);
|
|
$cur->smsemail = $carrier->toEmailAddress($cur->sms);
|
|
}
|
|
|
|
$result = $cur->updateKeys($orig_user);
|
|
|
|
if (!$result) {
|
|
common_log_db_error($cur, 'UPDATE', __FILE__);
|
|
$this->server_error(_('Couldn\'t update user.'));
|
|
return;
|
|
}
|
|
|
|
if ($type == 'email') {
|
|
$cur->emailChanged();
|
|
}
|
|
|
|
$result = $confirm->delete();
|
|
|
|
if (!$result) {
|
|
common_log_db_error($confirm, 'DELETE', __FILE__);
|
|
$this->server_error(_('Couldn\'t delete email confirmation.'));
|
|
return;
|
|
}
|
|
|
|
$cur->query('COMMIT');
|
|
|
|
common_show_header(_('Confirm Address'));
|
|
common_element('p', NULL,
|
|
sprintf(_('The address "%s" has been confirmed for your account.'), $cur->$type));
|
|
common_show_footer();
|
|
}
|
|
}
|