]> git.mxchange.org Git - quix0rs-gnu-social.git/commitdiff
correctly use Confirm_address
authorEvan Prodromou <evan@controlezvous.ca>
Sun, 22 Jun 2008 16:16:07 +0000 (12:16 -0400)
committerEvan Prodromou <evan@controlezvous.ca>
Sun, 22 Jun 2008 16:16:07 +0000 (12:16 -0400)
darcs-hash:20080622161607-34904-d8e042b80fe6acd3cb6ad763216a0b1817752cac.gz

actions/confirmaddress.php
actions/profilesettings.php
actions/register.php
classes/Confirm_address.php
classes/Sms_carrier.php [new file with mode: 0644]
classes/User.php
classes/stoica.ini
db/laconica.sql

index 72b42c2a7b4c1fcbafc46e26e18f5d3184c060fd..76f79da05c23a8cccb59c28eddd28263c71c52dd 100644 (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->$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();
     }
 }
index 5f157e3fec254a077de661840f679ad901d8a5e3..673258f820107bf20db39cb252abdaca7abbe508 100644 (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,
index 2bb4f12f0f9537213022bfe6ae4abe2d79057acf..862ca2a784f134d02700ea155b20d495b2a5b8f6 100644 (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) {
index f0c354babb61aa70973de3ce311ff462b84cf6a9..50711999f6aff79e2abb2711ef513c7686d8ce9a 100644 (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 */
diff --git a/classes/Sms_carrier.php b/classes/Sms_carrier.php
new file mode 100644 (file)
index 0000000..5fb7417
--- /dev/null
@@ -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
+}
index 78815a72ea972b1ac4c69fa93fe04c5ccdde9fd6..0e7fd5447448d5b24b2f1e1a5ed1adbb4de77ec0 100644 (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);
                        }
index d5f758c8c574ea36d2c9a86d6773db49ec52cf2f..3245b39b743104503ab9091ce6b52b66feeddfb7 100644 (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
index 5561076f93a0d6f937242446e73aebc187ed60c4..1fd7dc02545400f7049d0e5ad498ea894e4ff0da 100644 (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;