]> git.mxchange.org Git - quix0rs-gnu-social.git/blob - lib/inboxnoticestream.php
Merge remote-tracking branch 'gitorious/1.0.x' into 1.0.x
[quix0rs-gnu-social.git] / lib / inboxnoticestream.php
1 <?php
2 /**
3  * StatusNet - the distributed open-source microblogging tool
4  * Copyright (C) 2011, StatusNet, Inc.
5  *
6  * Stream of notices for the user's inbox
7  *
8  * PHP version 5
9  *
10  * This program is free software: you can redistribute it and/or modify
11  * it under the terms of the GNU Affero General Public License as published by
12  * the Free Software Foundation, either version 3 of the License, or
13  * (at your option) any later version.
14  *
15  * This program is distributed in the hope that it will be useful,
16  * but WITHOUT ANY WARRANTY; without even the implied warranty of
17  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18  * GNU Affero General Public License for more details.
19  *
20  * You should have received a copy of the GNU Affero General Public License
21  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
22  *
23  * @category  Cache
24  * @package   StatusNet
25  * @author    Evan Prodromou <evan@status.net>
26  * @copyright 2011 StatusNet, Inc.
27  * @license   http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPL 3.0
28  * @link      http://status.net/
29  */
30
31 if (!defined('STATUSNET')) {
32     // This check helps protect against security problems;
33     // your code file can't be executed directly from the web.
34     exit(1);
35 }
36
37 /**
38  * Stream of notices for the user's inbox
39  *
40  * @category  General
41  * @package   StatusNet
42  * @author    Evan Prodromou <evan@status.net>
43  * @copyright 2011 StatusNet, Inc.
44  * @license   http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPL 3.0
45  * @link      http://status.net/
46  */
47 class InboxNoticeStream extends ScopingNoticeStream
48 {
49     /**
50      * Constructor
51      *
52      * @param User $user User to get a stream for
53      */
54     function __construct($user, $profile = null)
55     {
56         // Note: we don't use CachingNoticeStream since RawInboxNoticeStream
57         // uses Inbox::staticGet(), which is cached.
58         parent::__construct(new RawInboxNoticeStream($user), $profile);
59     }
60 }
61
62 /**
63  * Raw stream of notices for the user's inbox
64  *
65  * @category  General
66  * @package   StatusNet
67  * @author    Evan Prodromou <evan@status.net>
68  * @copyright 2011 StatusNet, Inc.
69  * @license   http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPL 3.0
70  * @link      http://status.net/
71  */
72 class RawInboxNoticeStream extends NoticeStream
73 {
74     protected $user  = null;
75     protected $inbox = null;
76
77     /**
78      * Constructor
79      *
80      * @param User $user User to get a stream for
81      */
82     function __construct($user)
83     {
84         $this->user  = $user;
85         $this->inbox = Inbox::staticGet('user_id', $user->id);
86     }
87
88     /**
89      * Get IDs in a range
90      *
91      * @param int $offset   Offset from start
92      * @param int $limit    Limit of number to get
93      * @param int $since_id Since this notice
94      * @param int $max_id   Before this notice
95      *
96      * @return Array IDs found
97      */
98     function getNoticeIds($offset, $limit, $since_id, $max_id)
99     {
100         if (empty($this->inbox)) {
101             $this->inbox = Inbox::fromNoticeInbox($user_id);
102             if (empty($this->inbox)) {
103                 return array();
104             } else {
105                 $this->inbox->encache();
106             }
107         }
108
109         $ids = $this->inbox->unpack();
110
111         if (!empty($since_id)) {
112             $newids = array();
113             foreach ($ids as $id) {
114                 if ($id > $since_id) {
115                     $newids[] = $id;
116                 }
117             }
118             $ids = $newids;
119         }
120
121         if (!empty($max_id)) {
122             $newids = array();
123             foreach ($ids as $id) {
124                 if ($id <= $max_id) {
125                     $newids[] = $id;
126                 }
127             }
128             $ids = $newids;
129         }
130
131         $ids = array_slice($ids, $offset, $limit);
132
133         return $ids;
134     }
135 }