]> git.mxchange.org Git - quix0rs-gnu-social.git/blobdiff - plugins/Event/classes/RSVP.php
Merge remote-tracking branch 'upstream/master' into social-master
[quix0rs-gnu-social.git] / plugins / Event / classes / RSVP.php
index 520347eeb629a731105e4f5cb9df745ec2931ccd..f6b8c0aa7c847a2a28509132f8a6d9ebe8209df0 100644 (file)
@@ -114,6 +114,7 @@ class RSVP extends Managed_DataObject
         while ($rsvp->fetch()) {
             $event = Happening::getKV('id', $rsvp->event_id);
             if (!$event instanceof Happening) {
+                $rsvp->delete();
                 continue;
             }
             $orig = clone($rsvp);
@@ -124,16 +125,39 @@ class RSVP extends Managed_DataObject
         print "Resuming core schema upgrade...";
     }
 
-    function saveNew($profile, $event, $verb, $options=array())
+    function saveNew(Profile $profile, $event, $verb, array $options = array())
     {
-        if (array_key_exists('uri', $options)) {
-            $other = RSVP::getKV('uri', $options['uri']);
-            if (!empty($other)) {
-                // TRANS: Client exception thrown when trying to save an already existing RSVP ("please respond").
-                throw new ClientException(_m('RSVP already exists.'));
-            }
+        $eventNotice = $event->getNotice();
+        $options = array_merge(array('source' => 'web'), $options);
+
+        $act = new Activity();
+        $act->type    = ActivityObject::ACTIVITY;
+        $act->verb    = $verb;
+        $act->time    = $options['created'] ? strtotime($options['created']) : time();
+        $act->title   = _m("RSVP");
+        $act->actor   = $profile->asActivityObject();
+        $act->target  = $eventNotice->asActivityObject();
+        $act->objects = array(clone($act->target));
+        $act->content = RSVP::toHTML($profile, $event, self::codeFor($verb));
+
+        $act->id = common_local_url('showrsvp', array('id' => UUID::gen()));
+        $act->link = $act->id;
+
+        $saved = Notice::saveActivity($act, $profile, $options);
+
+        return $saved;
+    }
+
+    function saveNewFromNotice($notice, $event, $verb)
+    {
+        $other = RSVP::getKV('uri', $notice->uri);
+        if (!empty($other)) {
+            // TRANS: Client exception thrown when trying to save an already existing RSVP ("please respond").
+            throw new ClientException(_m('RSVP already exists.'));
         }
 
+        $profile = $notice->getProfile();
+
         try {
             $other = RSVP::getByKeys( [ 'profile_id' => $profile->getID(),
                                         'event_uri' => $event->getUri(),
@@ -146,54 +170,19 @@ class RSVP extends Managed_DataObject
 
         $rsvp = new RSVP();
 
-        $rsvp->id          = UUID::gen();
-        $rsvp->profile_id  = $profile->getID();
-        $rsvp->event_uri    = $event->getUri();
-        $rsvp->response      = self::codeFor($verb);
-
-        if (array_key_exists('created', $options)) {
-            $rsvp->created = $options['created'];
-        } else {
-            $rsvp->created = common_sql_now();
-        }
-
-        if (array_key_exists('uri', $options)) {
-            $rsvp->uri = $options['uri'];
-        } else {
-            $rsvp->uri = common_local_url('showrsvp',
-                                        array('id' => $rsvp->id));
-        }
+        preg_match('/\/([^\/]+)\/*/', $notice->uri, $match);
+        $rsvp->id          = $match[1] ? $match[1] : UUID::gen();
+        $rsvp->profile_id  = $profile->id;
+        $rsvp->event_id    = $event->id;
+        $rsvp->response    = self::codeFor($verb);
+        $rsvp->created     = $notice->created;
+        $rsvp->uri         = $notice->uri;
 
         $rsvp->insert();
 
         self::blow('rsvp:for-event:%s', $event->getUri());
 
-        // XXX: come up with something sexier
-
-        $content = $rsvp->asString();
-
-        $rendered = $rsvp->asHTML();
-
-        $options = array_merge(array('object_type' => $verb),
-                               $options);
-
-        if (!array_key_exists('uri', $options)) {
-            $options['uri'] = $rsvp->uri;
-        }
-
-        $eventNotice = $event->getNotice();
-
-        if (!empty($eventNotice)) {
-            $options['reply_to'] = $eventNotice->getID();
-        }
-
-        $saved = Notice::saveNew($profile->getID(),
-                                 $content,
-                                 array_key_exists('source', $options) ?
-                                 $options['source'] : 'web',
-                                 $options);
-
-        return $saved;
+        return $rsvp;
     }
 
     function codeFor($verb)
@@ -330,7 +319,7 @@ class RSVP extends Managed_DataObject
                               $this->response);
     }
 
-    static function toHTML($profile, $event, $response)
+    static function toHTML(Profile $profile, Event $event, $response)
     {
         $fmt = null;