From e3c4b0c85d3fbae9604b22d3666fe36a3c1c7551 Mon Sep 17 00:00:00 2001
From: Zach Copley <zach@status.net>
Date: Fri, 5 Mar 2010 03:14:40 +0000
Subject: A better way to safely delete Foreign_links

---
 classes/Foreign_link.php                       | 17 +++++++++++++++++
 plugins/TwitterBridge/twitter.php              | 11 +----------
 plugins/TwitterBridge/twitterauthorization.php |  2 +-
 plugins/TwitterBridge/twittersettings.php      | 11 +----------
 4 files changed, 20 insertions(+), 21 deletions(-)

diff --git a/classes/Foreign_link.php b/classes/Foreign_link.php
index ae8c22fd8..e47b2e309 100644
--- a/classes/Foreign_link.php
+++ b/classes/Foreign_link.php
@@ -113,4 +113,21 @@ class Foreign_link extends Memcached_DataObject
         return User::staticGet($this->user_id);
     }
 
+    // Make sure we only ever delete one record at a time
+    function safeDelete()
+    {
+        if (!empty($this->user_id)
+            && !empty($this->foreign_id)
+            && !empty($this->service))
+        {
+            return $this->delete();
+        } else {
+            common_debug(LOG_WARNING,
+                'Foreign_link::safeDelete() tried to delete a '
+                . 'Foreign_link without a fully specified compound key: '
+                . var_export($this, true));
+            return false;
+        }
+    }
+
 }
diff --git a/plugins/TwitterBridge/twitter.php b/plugins/TwitterBridge/twitter.php
index 90805bfc4..2805b3ab5 100644
--- a/plugins/TwitterBridge/twitter.php
+++ b/plugins/TwitterBridge/twitter.php
@@ -273,16 +273,7 @@ function remove_twitter_link($flink)
     common_log(LOG_INFO, 'Removing Twitter bridge Foreign link for ' .
                "user $user->nickname (user id: $user->id).");
 
-    $result = false;
-
-    // Be extra careful to make sure we have a good flink
-    // before deleting
-    if (!empty($flink->user_id)
-                && !empty($flink->foreign_id)
-                && !empty($flink->service))
-    {
-                $result = $flink->delete();
-    }
+    $result = $flink->safeDelete();
 
     if (empty($result)) {
         common_log(LOG_ERR, 'Could not remove Twitter bridge ' .
diff --git a/plugins/TwitterBridge/twitterauthorization.php b/plugins/TwitterBridge/twitterauthorization.php
index bce679622..e20731e5c 100644
--- a/plugins/TwitterBridge/twitterauthorization.php
+++ b/plugins/TwitterBridge/twitterauthorization.php
@@ -278,7 +278,7 @@ class TwitterauthorizationAction extends Action
         $result = $flink->find(true);
 
         if (!empty($result)) {
-            $flink->delete();
+            $flink->safeDelete();
         }
 
         $flink->user_id     = $user_id;
diff --git a/plugins/TwitterBridge/twittersettings.php b/plugins/TwitterBridge/twittersettings.php
index f22a059f7..631b29f52 100644
--- a/plugins/TwitterBridge/twittersettings.php
+++ b/plugins/TwitterBridge/twittersettings.php
@@ -250,16 +250,7 @@ class TwittersettingsAction extends ConnectSettingsAction
         $user = common_current_user();
         $flink = Foreign_link::getByUserID($user->id, TWITTER_SERVICE);
 
-        $result = false;
-
-        // Be extra careful to make sure we have a good flink
-        // before deleting
-        if (!empty($flink->user_id)
-            && !empty($flink->foreign_id)
-            && !empty($flink->service))
-        {
-            $result = $flink->delete();
-        }
+        $result = $flink->safeDelete();
 
         if (empty($result)) {
             common_log_db_error($flink, 'DELETE', __FILE__);
-- 
cgit v1.2.3-54-g00ecf