]> git.mxchange.org Git - quix0rs-gnu-social.git/commitdiff
Eventify Notice getAsTimestamp (for Deleted_notice)
authorMikael Nordfeldth <mmn@hethane.se>
Wed, 13 Jan 2016 20:01:47 +0000 (21:01 +0100)
committerMikael Nordfeldth <mmn@hethane.se>
Wed, 13 Jan 2016 20:01:47 +0000 (21:01 +0100)
classes/Notice.php
plugins/ActivityModeration/ActivityModerationPlugin.php

index 60c821ae5d2eeef191a9a57f3bfebb7e8841bc07..020df0c4589ece6e5d8b7b2e8b3f1a8cfd3070af 100644 (file)
@@ -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);
     }
 
     /**
index 35eb5eb17a3d73ac19e2d8d389918336553eb500..526b8b1875c45b0207d5294b20257f80983ef4f8 100644 (file)
@@ -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