X-Git-Url: https://git.mxchange.org/?p=quix0rs-gnu-social.git;a=blobdiff_plain;f=plugins%2FFavorite%2Fclasses%2FFave.php;h=bad8d42b8c5e747d4434b762b77208574a7349ab;hp=ad7cc67df86ebccd10b9ac7c3a1a37430368cd77;hb=d6b28c64830f632bb2f4b6f3c9369b9e56ad217a;hpb=0926316a76ee8d2af9ed591eec8193a8fb5fec9a diff --git a/plugins/Favorite/classes/Fave.php b/plugins/Favorite/classes/Fave.php index ad7cc67df8..bad8d42b8c 100644 --- a/plugins/Favorite/classes/Fave.php +++ b/plugins/Favorite/classes/Fave.php @@ -114,24 +114,41 @@ class Fave extends Managed_DataObject public function delete($useWhere=false) { - $profile = Profile::getKV('id', $this->user_id); - $notice = Notice::getKV('id', $this->notice_id); - $result = null; - if (Event::handle('StartDisfavorNotice', array($profile, $notice, &$result))) { + try { + $profile = $this->getActor(); + $notice = $this->getTarget(); - $result = parent::delete($useWhere); + if (Event::handle('StartDisfavorNotice', array($profile, $notice, &$result))) { - self::blowCacheForProfileId($this->user_id); - self::blowCacheForNoticeId($this->notice_id); - self::blow('popular'); + $result = parent::delete($useWhere); - if ($result) { - Event::handle('EndDisfavorNotice', array($profile, $notice)); + 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); } + // 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; } @@ -250,7 +267,7 @@ class Fave extends Managed_DataObject * * @return array Array of Fave objects */ - static public function byNotice($notice) + static public function byNotice(Notice $notice) { if (!isset(self::$_faves[$notice->id])) { self::fillFaves(array($notice->id)); @@ -391,14 +408,7 @@ class Fave extends Managed_DataObject public function getTarget() { - // throws exception on failure - $target = new Notice(); - $target->id = $this->notice_id; - if (!$target->find(true)) { - throw new NoResultException($target); - } - - return $target; + return Notice::getByID($this->notice_id); } public function getTargetObject()