correctly use Confirm_address

darcs-hash:20080622161607-34904-d8e042b80fe6acd3cb6ad763216a0b1817752cac.gz
This commit is contained in:
Evan Prodromou 2008-06-22 12:16:07 -04:00
parent 403039510c
commit 4fd1f6246d
8 changed files with 84 additions and 23 deletions

View File

@ -33,27 +33,37 @@ class ConfirmemailAction extends Action {
$this->client_error(_t('No confirmation code.'));
return;
}
$confirm_email = Confirm_email::staticGet('code', $code);
if (!$confirm_email) {
$confirm = Confirm_address::staticGet('code', $code);
if (!$confirm) {
$this->client_error(_t('Confirmation code not found.'));
return;
}
$cur = common_current_user();
if ($cur->id != $confirm_email->user_id) {
if ($cur->id != $confirm->user_id) {
$this->client_error(_t('That confirmation code is not for you!'));
return;
}
if ($cur->email == $confirm_email->email) {
$this->client_error(_t('That email address is already confirmed.'));
return;
}
$type = $confirm->address_type;
if (!in_array($type, array('email', 'jabber', 'sms'))) {
$this->server_error(_t('Unrecognized address type ') . $type);
return;
}
if ($cur->$type == $confirm->address) {
$this->client_error(_t('That address has already been confirmed.'));
return;
}
$cur->query('BEGIN');
$orig_user = clone($cur);
$cur->email = $confirm_email->email;
$result = $cur->updateKeys($orig_user);
$cur->$type = $confirm->address;
if ($type == 'sms') {
$cur->carrier = ($confirm->address_extra)+0;
}
$result = $cur->updateKeys($orig_user);
if (!$result) {
common_log_db_error($cur, 'UPDATE', __FILE__);
@ -61,20 +71,20 @@ class ConfirmemailAction extends Action {
return;
}
$result = $confirm_email->delete();
$result = $confirm->delete();
if (!$result) {
common_log_db_error($confirm_email, 'DELETE', __FILE__);
common_log_db_error($confirm, 'DELETE', __FILE__);
$this->server_error(_t('Couldn\'t delete email confirmation.'));
return;
}
$cur->query('COMMIT');
common_show_header(_t('Confirm E-mail Address'));
common_show_header(_t('Confirm Address'));
common_element('p', NULL,
_t('The email address "') . $cur->email .
_t('The address "') . $cur->email .
_t('" has been confirmed for your account.'));
common_show_footer(_t('Confirm E-mail Address'));
common_show_footer();
}
}

View File

@ -138,10 +138,10 @@ class ProfilesettingsAction extends SettingsAction {
# We don't update email directly; it gets done by confirmemail
$confirm = new Confirm_email();
$confirm->code = common_good_rand(16);
$confirm->user_id = $user->id;
$confirm->email = $email;
$confirm->address = $email;
$confirm->address_type = 'email';
$result = $confirm->insert();
@ -150,6 +150,7 @@ class ProfilesettingsAction extends SettingsAction {
common_server_error(_t('Couldnt confirm email.'));
return FALSE;
}
# XXX: try not to do this in the middle of a transaction
mail_confirm_address($confirm->code,

View File

@ -120,10 +120,11 @@ class RegisterAction extends Action {
if ($email) {
$confirm = new Confirm_email();
$confirm = new Confirm_address();
$confirm->code = common_good_rand(16);
$confirm->user_id = $user->id;
$confirm->email = $email;
$confirm->address = $email;
$confirm->address_type = 'email';
$result = $confirm->insert();
if (!$result) {

View File

@ -13,7 +13,8 @@ class Confirm_address extends DB_DataObject
public $code; // varchar(32) primary_key not_null
public $user_id; // int(4) not_null
public $address; // varchar(255) not_null
public $address_type; // varchar(32) not_null
public $address_extra; // varchar(255) not_null
public $address_type; // varchar(8) not_null
public $modified; // timestamp() not_null default_CURRENT_TIMESTAMP
/* Static get */

24
classes/Sms_carrier.php Normal file
View File

@ -0,0 +1,24 @@
<?php
/**
* Table Definition for sms_carrier
*/
require_once 'DB/DataObject.php';
class Sms_carrier extends DB_DataObject
{
###START_AUTOCODE
/* the code below is auto generated do not remove the above tag */
public $__table = 'sms_carrier'; // table name
public $id; // int(4) primary_key not_null
public $name; // varchar(64) unique_key
public $email_pattern; // varchar(255) not_null
public $created; // datetime() not_null
public $modified; // timestamp() not_null default_CURRENT_TIMESTAMP
/* Static get */
function staticGet($k,$v=NULL) { return DB_DataObject::staticGet('Sms_carrier',$k,$v); }
/* the code above is auto generated do not remove the tag below */
###END_AUTOCODE
}

View File

@ -36,6 +36,7 @@ class User extends DB_DataObject
public $email; // varchar(255) unique_key
public $jabber; // varchar(255) unique_key
public $sms; // varchar(64) unique_key
public $carrier; // int(4)
public $uri; // varchar(255) unique_key
public $created; // datetime() not_null
public $modified; // timestamp() not_null default_CURRENT_TIMESTAMP
@ -68,7 +69,7 @@ class User extends DB_DataObject
function updateKeys(&$orig) {
$parts = array();
foreach (array('nickname', 'email') as $k) {
foreach (array('nickname', 'email', 'jabber', 'sms', 'carrier') as $k) {
if (strcmp($this->$k, $orig->$k) != 0) {
$parts[] = $k . ' = ' . $this->_quote($this->$k);
}

View File

@ -20,6 +20,7 @@ url = U
code = 130
user_id = 129
address = 130
address_extra = 130
address_type = 130
modified = 384
@ -86,6 +87,17 @@ modified = 384
id = K
uri = U
[sms_carrier]
id = 129
name = 2
email_pattern = 130
created = 142
modified = 384
[sms_carrier__keys]
id = K
name = U
[subscription]
subscriber = 129
subscribed = 129
@ -118,6 +130,7 @@ password = 2
email = 2
jabber = 2
sms = 2
carrier = 1
uri = 2
created = 142
modified = 384

View File

@ -29,6 +29,14 @@ create table avatar (
index avatar_profile_id_idx (profile_id)
) ENGINE=InnoDB;
create table sms_carrier (
id integer primary key comment 'primary key for SMS carrier',
name varchar(64) unique key comment 'name of the carrier',
email_pattern varchar(255) not null comment 'sprintf pattern for making an email address from a phone number',
created datetime not null comment 'date this record was created',
modified timestamp comment 'date this record was modified'
) ENGINE=InnoDB;
/* local users */
create table user (
@ -38,6 +46,7 @@ create table user (
email varchar(255) unique key comment 'email address for password recovery etc.',
jabber varchar(255) unique key comment 'jabber ID for notices',
sms varchar(64) unique key comment 'sms phone number',
carrier integer comment 'foreign key to sms_carrier' references sms_carrier (id),
uri varchar(255) unique key comment 'universally unique identifier, usually a tag URI',
created datetime not null comment 'date this record was created',
modified timestamp comment 'date this record was modified'
@ -151,6 +160,7 @@ create table confirm_address (
code varchar(32) not null primary key comment 'good random code',
user_id integer not null comment 'user who requested confirmation' references user (id),
address varchar(255) not null comment 'address (email, Jabber, SMS, etc.)',
address_type varchar(32) not null comment 'address type ("email", "jabber", "sms")',
address_extra varchar(255) not null comment 'carrier ID, for SMS',
address_type varchar(8) not null comment 'address type ("email", "jabber", "sms")',
modified timestamp comment 'date this record was modified'
);
) ENGINE=InnoDB;