git.gnu.io has moved to IP address 209.51.188.249 -- please double check where you are logging in.

grouprss.php 4.53 KB
Newer Older
Robin Millette's avatar
Robin Millette committed
1 2
<?php
/**
3
 * StatusNet, the distributed open-source microblogging tool
Robin Millette's avatar
Robin Millette committed
4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
 *
 * Group main page
 *
 * PHP version 5
 *
 * LICENCE: 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  Group
23
 * @package   StatusNet
24 25
 * @author    Evan Prodromou <evan@status.net>
 * @author    Sarven Capadisli <csarven@status.net>
26
 * @copyright 2008-2009 StatusNet, Inc.
Robin Millette's avatar
Robin Millette committed
27
 * @license   http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
28
 * @link      http://status.net/
Robin Millette's avatar
Robin Millette committed
29 30
 */

31
if (!defined('STATUSNET') && !defined('LACONICA')) {
Robin Millette's avatar
Robin Millette committed
32 33 34 35 36
    exit(1);
}

require_once INSTALLDIR.'/lib/rssaction.php';

37
define('MEMBERS_PER_SECTION', 27);
Robin Millette's avatar
Robin Millette committed
38 39 40 41 42

/**
 * Group RSS feed
 *
 * @category Group
43
 * @package  StatusNet
44
 * @author   Evan Prodromou <evan@status.net>
Robin Millette's avatar
Robin Millette committed
45
 * @license  http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
46
 * @link     http://status.net/
Robin Millette's avatar
Robin Millette committed
47 48 49 50 51 52 53 54 55 56 57
 */
class groupRssAction extends Rss10Action
{
    /** group we're viewing. */
    var $group = null;

    /**
     * Is this page read-only?
     *
     * @return boolean true
     */
58
    function isReadOnly($args)
Robin Millette's avatar
Robin Millette committed
59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87
    {
        return true;
    }

    /**
     * Prepare the action
     *
     * Reads and validates arguments and instantiates the attributes.
     *
     * @param array $args $_REQUEST args
     *
     * @return boolean success flag
     */
    function prepare($args)
    {
        parent::prepare($args);

        $nickname_arg = $this->arg('nickname');
        $nickname = common_canonical_nickname($nickname_arg);

        // Permanent redirect on non-canonical nickname

        if ($nickname_arg != $nickname) {
            $args = array('nickname' => $nickname);
            common_redirect(common_local_url('showgroup', $args), 301);
            return false;
        }

        if (!$nickname) {
88
            // TRANS: Client error displayed when requesting a group RSS feed without providing a group nickname.
89
            $this->clientError(_('No nickname.'), 404);
Robin Millette's avatar
Robin Millette committed
90 91 92
            return false;
        }

93 94 95
        $local = Local_group::staticGet('nickname', $nickname);

        if (!$local) {
96
            // TRANS: Client error displayed when requesting a group RSS feed for group that does not exist.
97 98 99 100 101
            $this->clientError(_('No such group.'), 404);
            return false;
        }

        $this->group = User_group::staticGet('id', $local->group_id);
Robin Millette's avatar
Robin Millette committed
102 103

        if (!$this->group) {
104
            // TRANS: Client error displayed when requesting a group RSS feed for an object that is not a group.
105
            $this->clientError(_('No such group.'), 404);
Robin Millette's avatar
Robin Millette committed
106 107 108
            return false;
        }

109
        $this->notices = $this->getNotices($this->limit);
Robin Millette's avatar
Robin Millette committed
110 111 112 113 114 115
        return true;
    }

    function getNotices($limit=0)
    {
        $group = $this->group;
116

Robin Millette's avatar
Robin Millette committed
117 118 119
        if (is_null($group)) {
            return null;
        }
120

121
        $notices = array();
Robin Millette's avatar
Robin Millette committed
122
        $notice = $group->getNotices(0, ($limit == 0) ? NOTICES_PER_PAGE : $limit);
123

Robin Millette's avatar
Robin Millette committed
124 125 126 127 128 129 130 131 132 133 134 135 136
        while ($notice->fetch()) {
            $notices[] = clone($notice);
        }

        return $notices;
    }

    function getChannel()
    {
        $group = $this->group;
        $c = array('url' => common_local_url('grouprss',
                                             array('nickname' =>
                                                   $group->nickname)),
137
                   // TRANS: Message is used as link title. %s is a user nickname.
138
                   'title' => sprintf(_('%s timeline'), $group->nickname),
Robin Millette's avatar
Robin Millette committed
139
                   'link' => common_local_url('showgroup', array('nickname' => $group->nickname)),
140
                   // TRANS: Message is used as link description. %1$s is a group name, %2$s is a site name.
141 142
                   'description' => sprintf(_('Updates from members of %1$s on %2$s!'),
                                            $group->nickname, common_config('site', 'name')));
Robin Millette's avatar
Robin Millette committed
143 144 145 146 147 148 149 150
        return $c;
    }

    function getImage()
    {
        return $this->group->homepage_logo;
    }
}