]> git.mxchange.org Git - quix0rs-gnu-social.git/commitdiff
All notice streams check notice scope
authorEvan Prodromou <evan@status.net>
Fri, 25 Mar 2011 16:22:22 +0000 (12:22 -0400)
committerEvan Prodromou <evan@status.net>
Fri, 25 Mar 2011 16:22:22 +0000 (12:22 -0400)
Added filtering code so that notice streams check notice scope.

Added new class to implement filtering a stream, FilteringNoticeStream.

Added a subclass that does the logic for checking Notice scope.

And made all the streams use ScopingNoticeStream.

13 files changed:
lib/conversationnoticestream.php
lib/favenoticestream.php
lib/filenoticestream.php
lib/filteringnoticestream.php [new file with mode: 0644]
lib/groupnoticestream.php
lib/profilenoticestream.php
lib/publicnoticestream.php
lib/repeatedbymenoticestream.php
lib/repeatsofmenoticestream.php
lib/replynoticestream.php
lib/scopingnoticestream.php [new file with mode: 0644]
lib/taggedprofilenoticestream.php
lib/tagnoticestream.php

index b26e898612cd5d86e4a1b9fc293de4a2b4056be2..d7338d0245bc5ab7963f57c5dafc7531d52ece4a 100644 (file)
@@ -1,14 +1,70 @@
 <?php
+/**
+ * StatusNet - the distributed open-source microblogging tool
+ * Copyright (C) 2011, StatusNet, Inc.
+ *
+ * Notice stream for a conversation
+ * 
+ * PHP version 5
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ *
+ * @category  Cache
+ * @package   StatusNet
+ * @author    Evan Prodromou <evan@status.net>
+ * @copyright 2011 StatusNet, Inc.
+ * @license   http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPL 3.0
+ * @link      http://status.net/
+ */
 
-class ConversationNoticeStream extends CachingNoticeStream
+if (!defined('STATUSNET')) {
+    // This check helps protect against security problems;
+    // your code file can't be executed directly from the web.
+    exit(1);
+}
+
+/**
+ * Notice stream for a conversation
+ *
+ * @category  Stream
+ * @package   StatusNet
+ * @author    Evan Prodromou <evan@status.net>
+ * @copyright 2011 StatusNet, Inc.
+ * @license   http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPL 3.0
+ * @link      http://status.net/
+ */
+
+class ConversationNoticeStream extends ScopingNoticeStream
 {
     function __construct($id)
     {
-        parent::__construct(new RawConversationNoticeStream($id),
-                            'notice:conversation_ids:'.$id);
+        parent::__construct(new CachingNoticeStream(new RawConversationNoticeStream($id),
+                                                    'notice:conversation_ids:'.$id));
     }
 }
 
+/**
+ * Notice stream for a conversation
+ *
+ * @category  Stream
+ * @package   StatusNet
+ * @author    Evan Prodromou <evan@status.net>
+ * @copyright 2011 StatusNet, Inc.
+ * @license   http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPL 3.0
+ * @link      http://status.net/
+ */
+
 class RawConversationNoticeStream extends NoticeStream
 {
     protected $id;
index 5aaad5ce5b51f3c9a452342a5c42e1684b7e68c0..987805cf9d970246f9cd8192474f811fb28ac44d 100644 (file)
@@ -1,6 +1,51 @@
 <?php
+/**
+ * StatusNet - the distributed open-source microblogging tool
+ * Copyright (C) 2011, StatusNet, Inc.
+ *
+ * Notice stream for favorites
+ * 
+ * PHP version 5
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ *
+ * @category  Stream
+ * @package   StatusNet
+ * @author    Evan Prodromou <evan@status.net>
+ * @copyright 2011 StatusNet, Inc.
+ * @license   http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPL 3.0
+ * @link      http://status.net/
+ */
+
+if (!defined('STATUSNET')) {
+    // This check helps protect against security problems;
+    // your code file can't be executed directly from the web.
+    exit(1);
+}
 
-class FaveNoticeStream extends CachingNoticeStream
+/**
+ * Notice stream for favorites
+ *
+ * @category  Stream
+ * @package   StatusNet
+ * @author    Evan Prodromou <evan@status.net>
+ * @copyright 2011 StatusNet, Inc.
+ * @license   http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPL 3.0
+ * @link      http://status.net/
+ */
+
+class FaveNoticeStream extends ScopingNoticeStream
 {
     function __construct($user_id, $own)
     {
@@ -10,10 +55,21 @@ class FaveNoticeStream extends CachingNoticeStream
         } else {
             $key = 'fave:ids_by_user:'.$user_id;
         }
-        parent::__construct($stream, $key);
+        parent::__construct(new CachingNoticeStream($stream, $key));
     }
 }
 
+/**
+ * Raw notice stream for favorites
+ *
+ * @category  Stream
+ * @package   StatusNet
+ * @author    Evan Prodromou <evan@status.net>
+ * @copyright 2011 StatusNet, Inc.
+ * @license   http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPL 3.0
+ * @link      http://status.net/
+ */
+
 class RawFaveNoticeStream extends NoticeStream
 {
     protected $user_id;
index fddc5d33ce930cb72af4d7a7c431ae95273a8536..8c01893634d55fe030a3a6dced098c73ca8b6d1e 100644 (file)
@@ -1,22 +1,67 @@
 <?php
+/**
+ * StatusNet - the distributed open-source microblogging tool
+ * Copyright (C) 2011, StatusNet, Inc.
+ *
+ * Stream of notices that reference an URL
+ * 
+ * PHP version 5
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ *
+ * @category  Stream
+ * @package   StatusNet
+ * @author    Evan Prodromou <evan@status.net>
+ * @copyright 2011 StatusNet, Inc.
+ * @license   http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPL 3.0
+ * @link      http://status.net/
+ */
 
-class FileNoticeStream extends CachingNoticeStream
+if (!defined('STATUSNET')) {
+    // This check helps protect against security problems;
+    // your code file can't be executed directly from the web.
+    exit(1);
+}
+
+class FileNoticeStream extends ScopingNoticeStream
 {
     function __construct($file)
     {
-        parent::__construct(new RawFileNoticeStream($file),
-                            'file:notice-ids:'.$this->url);
+        parent::__construct(new CachingNoticeStream(new RawFileNoticeStream($file),
+                                                    'file:notice-ids:'.$this->url));
     }
 }
 
+/**
+ * Raw stream for a file
+ *
+ * @category  Stream
+ * @package   StatusNet
+ * @author    Evan Prodromou <evan@status.net>
+ * @copyright 2011 StatusNet, Inc.
+ * @license   http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPL 3.0
+ * @link      http://status.net/
+ */
+
 class RawFileNoticeStream extends NoticeStream
 {
     protected $file = null;
 
     function __construct($file)
     {
-        $this->file = $file;
         parent::__construct();
+        $this->file = $file;
     }
 
     /**
diff --git a/lib/filteringnoticestream.php b/lib/filteringnoticestream.php
new file mode 100644 (file)
index 0000000..a3bdc08
--- /dev/null
@@ -0,0 +1,115 @@
+<?php
+/**
+ * StatusNet - the distributed open-source microblogging tool
+ * Copyright (C) 2011, StatusNet, Inc.
+ *
+ * A notice stream that filters its upstream content
+ * 
+ * PHP version 5
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ *
+ * @category  Stream
+ * @package   StatusNet
+ * @author    Evan Prodromou <evan@status.net>
+ * @copyright 2011 StatusNet, Inc.
+ * @license   http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPL 3.0
+ * @link      http://status.net/
+ */
+
+if (!defined('STATUSNET')) {
+    // This check helps protect against security problems;
+    // your code file can't be executed directly from the web.
+    exit(1);
+}
+
+/**
+ * A class for presenting a filtered notice stream based on an upstream stream
+ *
+ * @category  Stream
+ * @package   StatusNet
+ * @author    Evan Prodromou <evan@status.net>
+ * @copyright 2011 StatusNet, Inc.
+ * @license   http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPL 3.0
+ * @link      http://status.net/
+ */
+
+abstract class FilteringNoticeStream extends NoticeStream
+{
+    protected $upstream;
+
+    function __construct($upstream)
+    {
+        $this->upstream = $upstream;
+    }
+
+    abstract function filter($notice);
+
+    function getNotices($offset, $limit, $sinceId, $maxId)
+    {
+        // "offset" is virtual; we have to get a lot
+        $total = $offset + $limit;
+
+        $filtered = array();
+
+        $startAt = 0;
+        $askFor  = $total;
+
+        // Keep going till we have $total notices in $notices array,
+        // or we get nothing from upstream.
+
+        $results = null;
+
+        do {
+
+            $raw = $this->upstream->getNotices($startAt, $askFor, $sinceId, $maxId);
+
+            $results = $raw->N;
+
+            if ($results == 0) {
+                break;
+            }
+
+            while ($raw->fetch()) {
+                if ($this->filter($raw)) {
+                    $filtered[] = clone($raw);
+                    if (count($filtered >= $total)) {
+                        break;
+                    }
+                }
+            }
+
+            // XXX: make these smarter; factor hit rate into $askFor
+
+            $startAt += $askFor;
+            $askFor   = max($total - count($filtered), NOTICES_PER_PAGE);
+
+        } while (count($filtered) < $total && $results !== 0);
+
+        return new ArrayWrapper(array_slice($filtered, $offset, $limit));
+    }
+
+    function getNoticeIds($offset, $limit, $sinceId, $maxId)
+    {
+        $notices = $this->getNotices($offset, $limit, $sinceId, $maxId);
+
+        $ids = array();
+
+        while ($notices->fetch()) {
+            $ids[] = $notice->id;
+        }
+
+        return $ids;
+    }
+}
index a6aa2c352c29f300e3ee9d03d3a7c0ec6992b1f3..22d94d0482fcc7f1ee54884dfc692473f41ec3e0 100644 (file)
@@ -1,14 +1,68 @@
-<?
+<?php
+/**
+ * StatusNet - the distributed open-source microblogging tool
+ * Copyright (C) 2011, StatusNet, Inc.
+ *
+ * Stream of notices for a group
+ * 
+ * PHP version 5
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ *
+ * @category  Stream
+ * @package   StatusNet
+ * @author    Evan Prodromou <evan@status.net>
+ * @copyright 2011 StatusNet, Inc.
+ * @license   http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPL 3.0
+ * @link      http://status.net/
+ */
 
-class GroupNoticeStream extends CachingNoticeStream
+if (!defined('STATUSNET')) {
+    // This check helps protect against security problems;
+    // your code file can't be executed directly from the web.
+    exit(1);
+}
+
+/**
+ * Stream of notices for a group
+ *
+ * @category  Stream
+ * @package   StatusNet
+ * @author    Evan Prodromou <evan@status.net>
+ * @copyright 2011 StatusNet, Inc.
+ * @license   http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPL 3.0
+ * @link      http://status.net/
+ */
+class GroupNoticeStream extends ScopingNoticeStream
 {
     function __construct($group)
     {
-        parent::__construct(new RawGroupNoticeStream($group),
-                            'user_group:notice_ids:' . $group->id);
+        parent::__construct(new CachingNoticeStream(new RawGroupNoticeStream($group),
+                                                    'user_group:notice_ids:' . $group->id));
     }
 }
 
+/**
+ * Stream of notices for a group
+ *
+ * @category  Stream
+ * @package   StatusNet
+ * @author    Evan Prodromou <evan@status.net>
+ * @copyright 2011 StatusNet, Inc.
+ * @license   http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPL 3.0
+ * @link      http://status.net/
+ */
 class RawGroupNoticeStream extends NoticeStream
 {
     protected $group;
index 9324bfb85d61f0ce2951b9424ed6a84033564cb6..ca54ad4892b7eb81976b12e2d374048ad1f665d3 100644 (file)
@@ -45,12 +45,12 @@ if (!defined('STATUSNET')) {
  * @link      http://status.net/
  */
 
-class ProfileNoticeStream extends CachingNoticeStream
+class ProfileNoticeStream extends ScopingNoticeStream
 {
     function __construct($profile)
     {
-        parent::__construct(new RawProfileNoticeStream($profile),
-                            'profile:notice_ids:' . $profile->id);
+        parent::__construct(new CachingNoticeStream(new RawProfileNoticeStream($profile),
+                                                    'profile:notice_ids:' . $profile->id));
     }
 }
 
index 0162375451e73205b50aafa4d4177f10ccc37510..19d0ad96a0c783a1d124e2fd0483fbba178b6f4c 100644 (file)
@@ -1,13 +1,70 @@
 <?php
+/**
+ * StatusNet - the distributed open-source microblogging tool
+ * Copyright (C) 2011, StatusNet, Inc.
+ *
+ * Public stream
+ * 
+ * PHP version 5
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ *
+ * @category  Stream
+ * @package   StatusNet
+ * @author    Evan Prodromou <evan@status.net>
+ * @copyright 2011 StatusNet, Inc.
+ * @license   http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPL 3.0
+ * @link      http://status.net/
+ */
 
-class PublicNoticeStream extends CachingNoticeStream
+if (!defined('STATUSNET')) {
+    // This check helps protect against security problems;
+    // your code file can't be executed directly from the web.
+    exit(1);
+}
+
+/**
+ * Public stream
+ *
+ * @category  Stream
+ * @package   StatusNet
+ * @author    Evan Prodromou <evan@status.net>
+ * @copyright 2011 StatusNet, Inc.
+ * @license   http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPL 3.0
+ * @link      http://status.net/
+ */
+
+class PublicNoticeStream extends ScopingNoticeStream
 {
     function __construct()
     {
-        parent::__construct(new RawPublicNoticeStream(), 'public');
+        parent::__construct(new CachingNoticeStream(new RawPublicNoticeStream(),
+                                                    'public'));
     }
 }
 
+/**
+ * Raw public stream
+ *
+ * @category  Stream
+ * @package   StatusNet
+ * @author    Evan Prodromou <evan@status.net>
+ * @copyright 2011 StatusNet, Inc.
+ * @license   http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPL 3.0
+ * @link      http://status.net/
+ */
+
 class RawPublicNoticeStream extends NoticeStream
 {
     function getNoticeIds($offset=0, $limit=20, $since_id=0, $max_id=0)
index 2c4c00ebf9f056fdab9a43103167cf156deb2f90..98c1583d6a596481a252a9ef7d1ad14b32358296 100644 (file)
@@ -1,14 +1,70 @@
 <?php
+/**
+ * StatusNet - the distributed open-source microblogging tool
+ * Copyright (C) 2011, StatusNet, Inc.
+ *
+ * Stream of notices repeated by me
+ * 
+ * PHP version 5
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ *
+ * @category  Stream
+ * @package   StatusNet
+ * @author    Evan Prodromou <evan@status.net>
+ * @copyright 2011 StatusNet, Inc.
+ * @license   http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPL 3.0
+ * @link      http://status.net/
+ */
 
-class RepeatedByMeNoticeStream extends CachingNoticeStream
+if (!defined('STATUSNET')) {
+    // This check helps protect against security problems;
+    // your code file can't be executed directly from the web.
+    exit(1);
+}
+
+/**
+ * Stream of notices repeated by me
+ *
+ * @category  General
+ * @package   StatusNet
+ * @author    Evan Prodromou <evan@status.net>
+ * @copyright 2011 StatusNet, Inc.
+ * @license   http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPL 3.0
+ * @link      http://status.net/
+ */
+
+class RepeatedByMeNoticeStream extends ScopingNoticeStream
 {
     function __construct($user)
     {
-        parent::__construct(new RawRepeatedByMeNoticeStream($user),
-                            'user:repeated_by_me:'.$user->id);
+        parent::__construct(new CachingNoticeStream(new RawRepeatedByMeNoticeStream($user),
+                                                    'user:repeated_by_me:'.$user->id));
     }
 }
 
+/**
+ * Raw stream of notices repeated by me
+ *
+ * @category  General
+ * @package   StatusNet
+ * @author    Evan Prodromou <evan@status.net>
+ * @copyright 2011 StatusNet, Inc.
+ * @license   http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPL 3.0
+ * @link      http://status.net/
+ */
+
 class RawRepeatedByMeNoticeStream extends NoticeStream
 {
     protected $user;
index 1441908e5aeb6e41b2ac9fe038217fa89c082987..f51fc9e4472d49b1d041f01cbeae762e60875497 100644 (file)
@@ -1,14 +1,69 @@
 <?php
+/**
+ * StatusNet - the distributed open-source microblogging tool
+ * Copyright (C) 2011, StatusNet, Inc.
+ *
+ * Stream of notices that are repeats of mine
+ * 
+ * PHP version 5
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ *
+ * @category  Stream
+ * @package   StatusNet
+ * @author    Evan Prodromou <evan@status.net>
+ * @copyright 2011 StatusNet, Inc.
+ * @license   http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPL 3.0
+ * @link      http://status.net/
+ */
 
-class RepeatsOfMeNoticeStream extends CachingNoticeStream
+if (!defined('STATUSNET')) {
+    // This check helps protect against security problems;
+    // your code file can't be executed directly from the web.
+    exit(1);
+}
+
+/**
+ * Stream of notices that are repeats of mine
+ *
+ * @category  Stream
+ * @package   StatusNet
+ * @author    Evan Prodromou <evan@status.net>
+ * @copyright 2011 StatusNet, Inc.
+ * @license   http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPL 3.0
+ * @link      http://status.net/
+ */
+
+class RepeatsOfMeNoticeStream extends ScopingNoticeStream
 {
     function __construct($user)
     {
-        parent::__construct(new RawRepeatsOfMeNoticeStream($user),
-                            'user:repeats_of_me:'.$user->id);
+        parent::__construct(new CachingNoticeStream(new RawRepeatsOfMeNoticeStream($user),
+                                                    'user:repeats_of_me:'.$user->id));
     }
 }
 
+/**
+ * Raw stream of notices that are repeats of mine
+ *
+ * @category  Stream
+ * @package   StatusNet
+ * @author    Evan Prodromou <evan@status.net>
+ * @copyright 2011 StatusNet, Inc.
+ * @license   http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPL 3.0
+ * @link      http://status.net/
+ */
 class RawRepeatsOfMeNoticeStream extends NoticeStream
 {
     protected $user;
index f358afcc5400651b48e1299a5b6f93d2d5c4b871..d9214b710778fca99ff25c7f678fcb06ee62faf1 100644 (file)
@@ -1,14 +1,70 @@
 <?php
+/**
+ * StatusNet - the distributed open-source microblogging tool
+ * Copyright (C) 2011, StatusNet, Inc.
+ *
+ * Stream of mentions of me
+ * 
+ * PHP version 5
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ *
+ * @category  Stream
+ * @package   StatusNet
+ * @author    Evan Prodromou <evan@status.net>
+ * @copyright 2011 StatusNet, Inc.
+ * @license   http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPL 3.0
+ * @link      http://status.net/
+ */
 
-class ReplyNoticeStream extends CachingNoticeStream
+if (!defined('STATUSNET')) {
+    // This check helps protect against security problems;
+    // your code file can't be executed directly from the web.
+    exit(1);
+}
+
+/**
+ * Stream of mentions of me
+ *
+ * @category  Stream
+ * @package   StatusNet
+ * @author    Evan Prodromou <evan@status.net>
+ * @copyright 2011 StatusNet, Inc.
+ * @license   http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPL 3.0
+ * @link      http://status.net/
+ */
+
+class ReplyNoticeStream extends ScopingNoticeStream
 {
     function __construct($userId)
     {
-        parent::__construct(new RawReplyNoticeStream($userId),
-                            'reply:stream:' . $userId);
+        parent::__construct(new CachingNoticeStream(new RawReplyNoticeStream($userId),
+                                                    'reply:stream:' . $userId));
     }
 }
 
+/**
+ * Raw stream of mentions of me
+ *
+ * @category  Stream
+ * @package   StatusNet
+ * @author    Evan Prodromou <evan@status.net>
+ * @copyright 2011 StatusNet, Inc.
+ * @license   http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPL 3.0
+ * @link      http://status.net/
+ */
+
 class RawReplyNoticeStream extends NoticeStream
 {
     protected $userId;
diff --git a/lib/scopingnoticestream.php b/lib/scopingnoticestream.php
new file mode 100644 (file)
index 0000000..a7ecbcd
--- /dev/null
@@ -0,0 +1,78 @@
+<?php
+/**
+ * StatusNet - the distributed open-source microblogging tool
+ * Copyright (C) 2011, StatusNet, Inc.
+ *
+ * Filtering notice stream that recognizes notice scope
+ * 
+ * PHP version 5
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ *
+ * @category  Stream
+ * @package   StatusNet
+ * @author    Evan Prodromou <evan@status.net>
+ * @copyright 2011 StatusNet, Inc.
+ * @license   http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPL 3.0
+ * @link      http://status.net/
+ */
+
+if (!defined('STATUSNET')) {
+    // This check helps protect against security problems;
+    // your code file can't be executed directly from the web.
+    exit(1);
+}
+
+/**
+ * Class comment
+ *
+ * @category  Stream
+ * @package   StatusNet
+ * @author    Evan Prodromou <evan@status.net>
+ * @copyright 2011 StatusNet, Inc.
+ * @license   http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPL 3.0
+ * @link      http://status.net/
+ */
+
+class ScopingNoticeStream extends FilteringNoticeStream
+{
+    protected $profile;
+
+    function __construct($upstream, $profile = null)
+    {
+        parent::__construct($upstream);
+
+        if (empty($profile)) {
+            $user = common_current_user();
+            if (!empty($user)) {
+                $profile = $user->getProfile();
+            }
+        }
+        $this->profile = $profile;
+    }
+
+    /**
+     * Only return notices where the profile is in scope
+     *
+     * @param Notice $notice The notice to check
+     *
+     * @return boolean whether to include the notice
+     */
+
+    function filter($notice)
+    {
+        return $notice->inScope($this->profile);
+    }
+    
+}
index d1711876eb23f903441d324e00df559f765fa63e..83c304ed8ffedce35d2797e9f2b53014b56b35f1 100644 (file)
@@ -1,14 +1,70 @@
-<?
+<?php
+/**
+ * StatusNet - the distributed open-source microblogging tool
+ * Copyright (C) 2011, StatusNet, Inc.
+ *
+ * Stream of notices by a profile with a given tag
+ * 
+ * PHP version 5
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ *
+ * @category  Stream
+ * @package   StatusNet
+ * @author    Evan Prodromou <evan@status.net>
+ * @copyright 2011 StatusNet, Inc.
+ * @license   http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPL 3.0
+ * @link      http://status.net/
+ */
 
-class TaggedProfileNoticeStream extends CachingNoticeStream
+if (!defined('STATUSNET')) {
+    // This check helps protect against security problems;
+    // your code file can't be executed directly from the web.
+    exit(1);
+}
+
+/**
+ * Stream of notices with a given profile and tag
+ *
+ * @category  Stream
+ * @package   StatusNet
+ * @author    Evan Prodromou <evan@status.net>
+ * @copyright 2011 StatusNet, Inc.
+ * @license   http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPL 3.0
+ * @link      http://status.net/
+ */
+
+class TaggedProfileNoticeStream extends ScopingNoticeStream
 {
     function __construct($profile, $tag)
     {
-        parent::__construct(new RawTaggedProfileNoticeStream($profile, $tag),
-                            'profile:notice_ids_tagged:'.$profile->id.':'.Cache::keyize($tag));
+        parent::__construct(new CachingNoticeStream(new RawTaggedProfileNoticeStream($profile, $tag),
+                                                    'profile:notice_ids_tagged:'.$profile->id.':'.Cache::keyize($tag)));
     }
 }
 
+/**
+ * Raw stream of notices with a given profile and tag
+ *
+ * @category  Stream
+ * @package   StatusNet
+ * @author    Evan Prodromou <evan@status.net>
+ * @copyright 2011 StatusNet, Inc.
+ * @license   http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPL 3.0
+ * @link      http://status.net/
+ */
+
 class RawTaggedProfileNoticeStream extends NoticeStream
 {
     protected $profile;
index 0e287744dd0215b4c8bf6ec5b418266987dafaa8..1dcf9f14bb9b4f12e951daad8462783bfafc7f7b 100644 (file)
@@ -1,14 +1,70 @@
 <?php
+/**
+ * StatusNet - the distributed open-source microblogging tool
+ * Copyright (C) 2011, StatusNet, Inc.
+ *
+ * Stream of notices with a given tag
+ * 
+ * PHP version 5
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ *
+ * @category  Stream
+ * @package   StatusNet
+ * @author    Evan Prodromou <evan@status.net>
+ * @copyright 2011 StatusNet, Inc.
+ * @license   http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPL 3.0
+ * @link      http://status.net/
+ */
 
-class TagNoticeStream extends CachingNoticeStream
+if (!defined('STATUSNET')) {
+    // This check helps protect against security problems;
+    // your code file can't be executed directly from the web.
+    exit(1);
+}
+
+/**
+ * Stream of notices with a given tag
+ *
+ * @category  Stream
+ * @package   StatusNet
+ * @author    Evan Prodromou <evan@status.net>
+ * @copyright 2011 StatusNet, Inc.
+ * @license   http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPL 3.0
+ * @link      http://status.net/
+ */
+
+class TagNoticeStream extends ScopingNoticeStream
 {
     function __construct($tag)
     {
-        parent::__construct(new RawTagNoticeStream($tag),
-                            'notice_tag:notice_ids:' . Cache::keyize($tag));
+        parent::__construct(new CachingNoticeStream(new RawTagNoticeStream($tag),
+                                                    'notice_tag:notice_ids:' . Cache::keyize($tag)));
     }
 }
 
+/**
+ * Raw stream of notices with a given tag
+ *
+ * @category  Stream
+ * @package   StatusNet
+ * @author    Evan Prodromou <evan@status.net>
+ * @copyright 2011 StatusNet, Inc.
+ * @license   http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPL 3.0
+ * @link      http://status.net/
+ */
+
 class RawTagNoticeStream extends NoticeStream
 {
     protected $tag;