]> git.mxchange.org Git - quix0rs-gnu-social.git/blob - lib/groupnoticestream.php
*** Privacy Leak fixed: ***
[quix0rs-gnu-social.git] / lib / groupnoticestream.php
1 <?php
2 /**
3  * StatusNet - the distributed open-source microblogging tool
4  * Copyright (C) 2011, StatusNet, Inc.
5  *
6  * Stream of notices for a group
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  Stream
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('GNUSOCIAL')) { exit(1); }
32
33 /**
34  * Stream of notices for a group
35  *
36  * @category  Stream
37  * @package   StatusNet
38  * @author    Evan Prodromou <evan@status.net>
39  * @copyright 2011 StatusNet, Inc.
40  * @license   http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPL 3.0
41  * @link      http://status.net/
42  */
43 class GroupNoticeStream extends ScopingNoticeStream
44 {
45     var $group;
46
47     function __construct($group, Profile $scoped=null)
48     {
49         $this->group = $group;
50
51         parent::__construct(new CachingNoticeStream(new RawGroupNoticeStream($group),
52                                                     'user_group:notice_ids:' . $group->id),
53                             $scoped);
54     }
55
56     function getNoticeIds($offset, $limit, $since_id, $max_id)
57     {
58         if ($this->impossibleStream()) {
59             return array();
60         } else {
61             return parent::getNoticeIds($offset, $limit, $since_id, $max_id);
62         }
63     }
64
65     function getNotices($offset, $limit, $sinceId = null, $maxId = null)
66     {
67         if ($this->impossibleStream()) {
68             return new ArrayWrapper(array());
69         } else {
70             return parent::getNotices($offset, $limit, $sinceId, $maxId);
71         }
72     }
73
74     function impossibleStream() 
75     {
76         if ($this->group->force_scope &&
77             (!$this->scoped instanceof Profile || $this->scoped->isMember($this->group))) {
78             return true;
79         }
80
81         return false;
82     }
83 }
84
85 /**
86  * Stream of notices for a group
87  *
88  * @category  Stream
89  * @package   StatusNet
90  * @author    Evan Prodromou <evan@status.net>
91  * @copyright 2011 StatusNet, Inc.
92  * @license   http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPL 3.0
93  * @link      http://status.net/
94  */
95 class RawGroupNoticeStream extends NoticeStream
96 {
97     protected $group;
98
99     function __construct($group)
100     {
101         $this->group = $group;
102     }
103
104     function getNoticeIds($offset, $limit, $since_id, $max_id)
105     {
106         $inbox = new Group_inbox();
107
108         $inbox->group_id = $this->group->id;
109
110         $inbox->selectAdd();
111         $inbox->selectAdd('notice_id');
112
113         Notice::addWhereSinceId($inbox, $since_id, 'notice_id');
114         Notice::addWhereMaxId($inbox, $max_id, 'notice_id');
115
116         $inbox->orderBy('created DESC, notice_id DESC');
117
118         if (!is_null($offset)) {
119             $inbox->limit($offset, $limit);
120         }
121
122         $ids = array();
123
124         if ($inbox->find()) {
125             while ($inbox->fetch()) {
126                 $ids[] = $inbox->notice_id;
127             }
128         }
129
130         return $ids;
131     }
132 }