]> git.mxchange.org Git - quix0rs-gnu-social.git/commitdiff
Twitter bridge - don't delete Twitter users. Update them instead.
authorzach <zach@controlyourself.ca>
Fri, 14 Nov 2008 05:30:44 +0000 (00:30 -0500)
committerzach <zach@controlyourself.ca>
Fri, 14 Nov 2008 05:30:44 +0000 (00:30 -0500)
darcs-hash:20081114053044-462f3-30e2d27261bca1977b89dee409383e178f446149.gz

actions/twittersettings.php
classes/Foreign_user.php

index cf50be62af59396bdf63adde15e30751c2b4eddc..1115708a5cd9387e4e6305c4b541626f990186fe 100644 (file)
@@ -138,16 +138,45 @@ class TwittersettingsAction extends SettingsAction {
                        return;
                }
 
-               $fuser = DB_DataObject::factory('foreign_user');
-               $fuser->id = $twitter_id;
-               $fuser->service = 1; // Twitter
-               $fuser->uri = "http://www.twitter.com/$twitter_username";
-               $fuser->nickname = $twitter_username;
-               $fuser->created = common_sql_now();
-               $result = $fuser->insert();
+               $fuser = null;
+               $result = null;
+
+               // Check to see whether the Twitter user is already in the system,
+               // and update its username and uri if so.
+               $fuser = Foreign_User::getForeignUser($twitter_id, 1);
+
+               if ($fuser) {
+
+                       $original = clone($fuser);
+
+                       $fuser->nickname = $twitter_username;
+                       $fuser->uri = "http://www.twitter.com/$twitter_username";
+
+                       $result = $fuser->updateKeys($original);
+
+                       if (!$result) {
+                               common_log_db_error($fuser, 'UPDATE', __FILE__);
+                       }
+
+               } else {
+
+                       // Otherwise, add the Twitter user
+                       $fuser = DB_DataObject::factory('foreign_user');
+
+                       $fuser->nickname = $twitter_username;
+                       $fuser->uri = "http://www.twitter.com/$twitter_username";
+                       $fuser->id = $twitter_id;
+                       $fuser->service = 1; // Twitter
+                       $fuser->created = common_sql_now();
+                       $result = $fuser->insert();
+
+                       if (!$result) {
+                               common_log_db_error($fuser, 'INSERT', __FILE__);
+                       }
+
+               }
 
                if (!$result) {
-                       common_log_db_error($fuser, 'INSERT', __FILE__);
                        $this->show_form(_('Unable to save your Twitter settings!'));
                        return;
                }
@@ -162,7 +191,7 @@ class TwittersettingsAction extends SettingsAction {
                $flink->created = common_sql_now();
 
                $this->set_flags($flink, $noticesync, $replysync, $friendsync);
-               
+
                $flink_id = $flink->insert();
 
                if (!$flink_id) {
@@ -179,7 +208,6 @@ class TwittersettingsAction extends SettingsAction {
 
                // For now we assume one Twitter acct per Laconica acct
                $flink = Foreign_link::getForeignLink($user->id, 1);
-               $fuser = Foreign_user::getForeignUser($flink->foreign_id, 1);
                $flink_foreign_id = $this->arg('flink_foreign_id');
 
                if (!$flink) {
@@ -193,14 +221,6 @@ class TwittersettingsAction extends SettingsAction {
                    return;
                }
 
-               $result = $fuser->delete();
-
-               if (!$result) {
-                       common_log_db_error($fuser, 'DELETE', __FILE__);
-                       $this->show_form(_('Couldn\'t remove Twitter user.'));
-                       return;
-               }
-
                $result = $flink->delete();
 
                if (!$result) {
@@ -229,7 +249,7 @@ class TwittersettingsAction extends SettingsAction {
                $flink->query('BEGIN');
 
                $original = clone($flink);
-               
+
                $this->set_flags($flink, $noticesync, $replysync, $friendsync);
 
                $result = $flink->update($original);
@@ -318,7 +338,7 @@ class TwittersettingsAction extends SettingsAction {
                } else {
                        $flink->noticesync &= ~FOREIGN_NOTICE_SEND;
                }
-               
+
                if ($replysync) {
                        $flink->noticesync |= FOREIGN_NOTICE_SEND_REPLY;
                } else {
@@ -330,7 +350,7 @@ class TwittersettingsAction extends SettingsAction {
                } else {
                        $flink->friendsync &= ~FOREIGN_FRIEND_RECV;
                }
-               
+
                $flink->profilesync = 0; // XXX: leave as default?
        }
 }
\ No newline at end of file
index d70923caa5848f451b19250409b40683140478e3..027fae69d16e2839732468b2be6e6a28931700ef 100644 (file)
@@ -39,4 +39,32 @@ class Foreign_user extends Memcached_DataObject
                return NULL;            
        }
        
+       function updateKeys(&$orig) {
+               $parts = array();
+               foreach (array('id', 'service', 'uri', 'nickname') as $k) {
+                       if (strcmp($this->$k, $orig->$k) != 0) {
+                               $parts[] = $k . ' = ' . $this->_quote($this->$k);
+                       }
+               }
+               if (count($parts) == 0) {
+                       # No changes
+                       return true;
+               }
+               $toupdate = implode(', ', $parts);
+
+               $table = $this->tableName();
+               if(common_config('db','quote_identifiers')) {
+                       $table = '"' . $table . '"';
+               }
+               $qry = 'UPDATE ' . $table . ' SET ' . $toupdate .
+                 ' WHERE id = ' . $this->id;
+               $orig->decache();
+               $result = $this->query($qry);
+               if ($result) {
+                       $this->encache();
+               }
+               return $result;
+       }
+
+       
 }