summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--actions/confirmaddress.php40
-rw-r--r--actions/profilesettings.php5
-rw-r--r--actions/register.php5
-rw-r--r--classes/Confirm_address.php3
-rw-r--r--classes/Sms_carrier.php24
-rw-r--r--classes/User.php3
-rw-r--r--classes/stoica.ini13
-rw-r--r--db/laconica.sql14
8 files changed, 84 insertions, 23 deletions
diff --git a/actions/confirmaddress.php b/actions/confirmaddress.php
index 72b42c2a7..76f79da05 100644
--- a/actions/confirmaddress.php
+++ b/actions/confirmaddress.php
@@ -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->$type = $confirm->address;
+
+ if ($type == 'sms') {
+ $cur->carrier = ($confirm->address_extra)+0;
+ }
- $cur->email = $confirm_email->email;
- $result = $cur->updateKeys($orig_user);
+ $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();
}
}
diff --git a/actions/profilesettings.php b/actions/profilesettings.php
index 5f157e3fe..673258f82 100644
--- a/actions/profilesettings.php
+++ b/actions/profilesettings.php
@@ -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,
diff --git a/actions/register.php b/actions/register.php
index 2bb4f12f0..862ca2a78 100644
--- a/actions/register.php
+++ b/actions/register.php
@@ -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) {
diff --git a/classes/Confirm_address.php b/classes/Confirm_address.php
index f0c354bab..50711999f 100644
--- a/classes/Confirm_address.php
+++ b/classes/Confirm_address.php
@@ -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 */
diff --git a/classes/Sms_carrier.php b/classes/Sms_carrier.php
new file mode 100644
index 000000000..5fb741731
--- /dev/null
+++ b/classes/Sms_carrier.php
@@ -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
+}
diff --git a/classes/User.php b/classes/User.php
index 78815a72e..0e7fd5447 100644
--- a/classes/User.php
+++ b/classes/User.php
@@ -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);
}
diff --git a/classes/stoica.ini b/classes/stoica.ini
index d5f758c8c..3245b39b7 100644
--- a/classes/stoica.ini
+++ b/classes/stoica.ini
@@ -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
diff --git a/db/laconica.sql b/db/laconica.sql
index 5561076f9..1fd7dc025 100644
--- a/db/laconica.sql
+++ b/db/laconica.sql
@@ -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;