]> git.mxchange.org Git - quix0rs-gnu-social.git/blobdiff - lib/activityhandlerplugin.php
Event fixes for activityhandlerplugin
[quix0rs-gnu-social.git] / lib / activityhandlerplugin.php
index b105bf21f23493c7111815de35207072efb93f4a..19e4dc27b0fd7836477b8c3ae3a38c9fd74719ba 100644 (file)
@@ -160,10 +160,11 @@ abstract class ActivityHandlerPlugin extends Plugin
     * @fixme are there any standard options?
     *
     * @param Activity $activity
-    * @param Profile $actor
+    * @param Notice   $stored       The notice in our database for this certain object
     * @param array $options=array()
     *
-    * @return Notice the resulting notice
+    * @return object    If the verb handling plugin creates an object, it can be returned here (otherwise true)
+    * @throws exception On any error.
     */
     protected function saveObjectFromActivity(Activity $activity, Notice $stored, array $options=array())
     {
@@ -174,7 +175,7 @@ abstract class ActivityHandlerPlugin extends Plugin
      * This usually gets called from Notice::saveActivity after a Notice object has been created,
      * so it contains a proper id and a uri for the object to be saved.
      */
-    public function onStoreActivityObject(Activity $act, Notice $stored, array $options=array(), &$object) {
+    public function onStoreActivityObject(Activity $act, Notice $stored, array $options, &$object) {
         // $this->oldSaveNew is there during a migration period of plugins, to start using
         // Notice::saveActivity instead of Notice::saveNew
         if (!$this->isMyActivity($act) || isset($this->oldSaveNew)) {
@@ -182,7 +183,13 @@ abstract class ActivityHandlerPlugin extends Plugin
         }
         $object = $this->saveObjectFromActivity($act, $stored, $options);
         try {
-            $act->context->attention = array_merge($act->context->attention, $object->getAttentionArray());
+            // In the future we probably want to use something like ActivityVerb_DataObject for the kind
+            // of objects which are returned from saveObjectFromActivity.
+            if ($object instanceof Managed_DataObject) {
+                // If the verb handling plugin figured out some more attention URIs, add them here to the
+                // original activity. This is only done if a separate object is actually needed to be saved.
+                $act->context->attention = array_merge($act->context->attention, $object->getAttentionArray());
+            }
         } catch (Exception $e) {
             common_debug('WARNING: Could not get attention list from object '.get_class($object).'!');
         }
@@ -430,12 +437,13 @@ abstract class ActivityHandlerPlugin extends Plugin
      * Handle object posted via AtomPub
      *
      * @param Activity &$activity Activity that was posted
-     * @param User     $user      User that posted it
+     * @param Profile   $scoped   Profile of user posting
      * @param Notice   &$notice   Resulting notice
      *
      * @return boolean hook value
      */
-    function onStartAtomPubNewActivity(Activity &$activity, $user, &$notice)
+    // FIXME: Make sure we can really do strong Notice typing with a $notice===null without having =null here
+    public function onStartAtomPubNewActivity(Activity &$activity, Profile $scoped, Notice &$notice)
     {
         if (!$this->isMyActivity($activity)) {
             return true;
@@ -443,10 +451,9 @@ abstract class ActivityHandlerPlugin extends Plugin
 
         $options = array('source' => 'atompub');
 
-        // $user->getProfile() is a Profile
-        $notice = $this->saveNoticeFromActivity($activity,
-                                                $user->getProfile(),
-                                                $options);
+        $notice = $this->saveNoticeFromActivity($activity, $scoped, $options);
+
+        Event::handle('EndAtomPubNewActivity', array($activity, $scoped, $notice));
 
         return false;
     }
@@ -594,19 +601,44 @@ abstract class ActivityHandlerPlugin extends Plugin
         $nli->showNoticeLink();
         $nli->showNoticeSource();
         $nli->showNoticeLocation();
-        $nli->showContext();
+        $nli->showPermalink();
         $nli->showRepeat();
 
         $nli->showNoticeOptions();
     }
 
+    public function onStartShowNoticeItemNotice(NoticeListItem $nli)
+    {
+        if (!$this->isMyNotice($nli->notice)) {
+            return true;
+        }
+
+        $this->showNoticeItemNotice($nli);
+
+        Event::handle('EndShowNoticeItemNotice', array($nli));
+        return false;
+    }
+
+    protected function showNoticeItemNotice(NoticeListItem $nli)
+    {
+        $nli->showNoticeTitle();
+        $nli->showAuthor();
+        $nli->showAddressees();
+        $nli->showContent();
+    }
+
     public function onStartShowNoticeContent(Notice $stored, HTMLOutputter $out, Profile $scoped=null)
     {
         if (!$this->isMyNotice($stored)) {
             return true;
         }
 
-        $out->text($stored->getContent());
+        $this->showNoticeContent($stored, $out, $scoped);
         return false;
     }
+
+    protected function showNoticeContent(Notice $stored, HTMLOutputter $out, Profile $scoped=null)
+    {
+        $out->text($stored->getContent());
+    }
 }