]> git.mxchange.org Git - quix0rs-gnu-social.git/blobdiff - plugins/Favorite/classes/Fave.php
processFeed would abort on certain errors where findLocalObject failed
[quix0rs-gnu-social.git] / plugins / Favorite / classes / Fave.php
index 7fa7705e8faee2a854c2f782ce883723c289b6a4..a5acb66d20d80ef5bbf91c11a57ed7df3e187f39 100644 (file)
@@ -124,27 +124,30 @@ class Fave extends Managed_DataObject
 
                 $result = parent::delete($useWhere);
 
-                self::blowCacheForProfileId($this->user_id);
-                self::blowCacheForNoticeId($this->notice_id);
-                self::blow('popular');
-
                 if ($result !== false) {
                     Event::handle('EndDisfavorNotice', array($profile, $notice));
                 }
             }
 
         } catch (NoResultException $e) {
+            // In case there's some inconsistency where the profile or notice was deleted without losing the fave db entry
             common_log(LOG_INFO, '"'.get_class($e->obj).'" with id=='.var_export($e->obj->id, true).' object not found when deleting favorite, ignoring...');
+        } catch (EmptyIdException $e) {
+            // Some buggy instances of GNU social have had favroites with notice id==0 stored in the database
+            common_log(LOG_INFO, '"'.get_class($e->obj).'"object had empty id deleting favorite, ignoring...');
+        }
 
+        // If we catch an exception above, then $result===null because parent::delete only returns an int>=0 or boolean false
+        if (is_null($result)) {
             // Delete it without the event, as something is wrong and we don't want it anyway.
             $result = parent::delete($useWhere);
-
-            self::blowCacheForProfileId($this->user_id);
-            self::blowCacheForNoticeId($this->notice_id);
-            self::blow('popular');
         }
 
-
+        // Err, apparently we can reference $this->user_id after parent::delete,
+        // I guess it's safe because this is the order it was before!
+        self::blowCacheForProfileId($this->user_id);
+        self::blowCacheForNoticeId($this->notice_id);
+        self::blow('popular');
 
         return $result;
     }
@@ -350,6 +353,8 @@ class Fave extends Managed_DataObject
      */
     static public function parseActivityObject(ActivityObject $actobj, Notice $stored)
     {
+        // throws exception if nothing was found, but it could also be a non-Notice...
+        // FIXME: This should only test _one_ URI (and not the links etc.) though a function like this could be useful in other cases
         $local = ActivityUtils::findLocalObject($actobj->getIdentifiers());
         if (!$local instanceof Notice) {
             // $local always returns something, but this was not what we expected. Something is wrong.