]> git.mxchange.org Git - quix0rs-gnu-social.git/blobdiff - lib/distribqueuehandler.php
Merge commit 'refs/merge-requests/41' of https://gitorious.org/social/mainline into...
[quix0rs-gnu-social.git] / lib / distribqueuehandler.php
index d2be7a92c72488d846374bb27413f103490fd34d..036d970f2af9c3be343ffa36d350265b690895ac 100644 (file)
@@ -17,7 +17,7 @@
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
 
-if (!defined('STATUSNET') && !defined('LACONICA')) { exit(1); }
+if (!defined('GNUSOCIAL') && !defined('STATUSNET')) { exit(1); }
 
 /**
  * Base class for queue handlers.
@@ -43,14 +43,17 @@ class DistribQueueHandler
      * @return string
      */
 
-    function transport()
+    public function transport()
     {
         return 'distrib';
     }
 
     /**
-     * Here's the meat of your queue handler -- you're handed a Notice
-     * object, which you may do as you will with.
+     * Handle distribution of a notice after we've saved it:
+     * @li add to local recipient inboxes
+     * @li send email notifications to local @-reply targets
+     * @li run final EndNoticeSave plugin events
+     * @li put any remaining post-processing into the queues
      *
      * If this function indicates failure, a warning will be logged
      * and the item is placed back in the queue to be re-run.
@@ -58,24 +61,42 @@ class DistribQueueHandler
      * @param Notice $notice
      * @return boolean true on success, false on failure
      */
-    function handle($notice)
+    public function handle(Notice $notice)
     {
-        // XXX: do we need to change this for remote users?
+        // We have to manually add attentions to non-profile subs and non-mentions
+        $ptAtts = $notice->getAttentionsFromProfileTags();
+        foreach (array_keys($ptAtts) as $profile_id) {
+            $profile = Profile::getKV('id', $profile_id);
+            if ($profile instanceof Profile) {
+                try {
+                    common_debug('Adding Attention for '.$notice->getID().' profile '.$profile->getID());
+                    Attention::saveNew($notice, $profile);
+                } catch (Exception $e) {
+                    $this->logit($notice, $e);
+                }
+            }
+        }
+
+        try {
+            $notice->sendReplyNotifications();
+        } catch (Exception $e) {
+            $this->logit($notice, $e);
+        }
 
         try {
-            $notice->addToInboxes();
+            Event::handle('EndNoticeDistribute', array($notice));
         } catch (Exception $e) {
             $this->logit($notice, $e);
         }
 
         try {
             Event::handle('EndNoticeSave', array($notice));
-            // Enqueue for other handlers
         } catch (Exception $e) {
             $this->logit($notice, $e);
         }
 
         try {
+            // Enqueue for other handlers
             common_enqueue_notice($notice);
         } catch (Exception $e) {
             $this->logit($notice, $e);