From 45dd3431262846893f958efea9fdfd55ca5f6aed Mon Sep 17 00:00:00 2001 From: Mikael Nordfeldth Date: Wed, 13 Jan 2016 21:01:47 +0100 Subject: [PATCH] Eventify Notice getAsTimestamp (for Deleted_notice) --- classes/Notice.php | 38 ++++++++++--------- .../ActivityModerationPlugin.php | 12 ++++++ 2 files changed, 32 insertions(+), 18 deletions(-) diff --git a/classes/Notice.php b/classes/Notice.php index 60c821ae5d..020df0c458 100644 --- a/classes/Notice.php +++ b/classes/Notice.php @@ -2615,21 +2615,21 @@ class Notice extends Managed_DataObject */ public static function getAsTimestamp($id) { - if (!$id) { - return false; + if (empty($id)) { + throw new EmptyIdException('Notice'); } - $notice = Notice::getKV('id', $id); - if ($notice) { - return $notice->created; + $timestamp = null; + if (Event::handle('GetNoticeSqlTimestamp', array($id, &$timestamp))) { + // getByID throws exception if $id isn't found + $notice = Notice::getByID($id); + $timestamp = $notice->created; } - $deleted = Deleted_notice::getKV('id', $id); - if ($deleted) { - return $deleted->created; + if (empty($timestamp)) { + throw new ServerException('No timestamp found for Notice with id=='._ve($id)); } - - return false; + return $timestamp; } /** @@ -2645,11 +2645,12 @@ class Notice extends Managed_DataObject */ public static function whereSinceId($id, $idField='id', $createdField='created') { - $since = Notice::getAsTimestamp($id); - if ($since) { - return sprintf("($createdField = '%s' and $idField > %d) or ($createdField > '%s')", $since, $id, $since); + try { + $since = Notice::getAsTimestamp($id); + } catch (Exception $e) { + return false; } - return false; + return sprintf("($createdField = '%s' and $idField > %d) or ($createdField > '%s')", $since, $id, $since); } /** @@ -2684,11 +2685,12 @@ class Notice extends Managed_DataObject */ public static function whereMaxId($id, $idField='id', $createdField='created') { - $max = Notice::getAsTimestamp($id); - if ($max) { - return sprintf("($createdField < '%s') or ($createdField = '%s' and $idField <= %d)", $max, $max, $id); + try { + $max = Notice::getAsTimestamp($id); + } catch (Exception $e) { + return false; } - return false; + return sprintf("($createdField < '%s') or ($createdField = '%s' and $idField <= %d)", $max, $max, $id); } /** diff --git a/plugins/ActivityModeration/ActivityModerationPlugin.php b/plugins/ActivityModeration/ActivityModerationPlugin.php index 35eb5eb17a..526b8b1875 100644 --- a/plugins/ActivityModeration/ActivityModerationPlugin.php +++ b/plugins/ActivityModeration/ActivityModerationPlugin.php @@ -34,6 +34,18 @@ class ActivityModerationPlugin extends ActivityVerbHandlerPlugin return true; } + public function onGetNoticeSqlTimestamp($id, &$timestamp) + { + try { + $deleted = Deleted_notice::getByID($id); + $timestamp = $deleted->act_created; + } catch (NoResultException $e) { + return true; + } + // we're done for the event, so return false to stop it + return false; + } + protected function getActionTitle(ManagedAction $action, $verb, Notice $target, Profile $scoped) { // FIXME: switch based on action type