3 * StatusNet, the distributed open-source microblogging tool
5 * List of featured users
9 * LICENCE: This program is free software: you can redistribute it and/or modify
10 * it under the terms of the GNU Affero General Public License as published by
11 * the Free Software Foundation, either version 3 of the License, or
12 * (at your option) any later version.
14 * This program is distributed in the hope that it will be useful,
15 * but WITHOUT ANY WARRANTY; without even the implied warranty of
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 * GNU Affero General Public License for more details.
19 * You should have received a copy of the GNU Affero General Public License
20 * along with this program. If not, see <http://www.gnu.org/licenses/>.
24 * @author Zach Copley <zach@status.net>
25 * @author Evan Prodromou <evan@status.net>
26 * @copyright 2008-2009 StatusNet, Inc.
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/
31 if (!defined('STATUSNET') && !defined('LACONICA')) {
35 require_once INSTALLDIR.'/lib/profilelist.php';
36 require_once INSTALLDIR.'/lib/publicgroupnav.php';
39 * List of featured users
43 * @author Zach Copley <zach@status.net>
44 * @author Evan Prodromou <evan@status.net>
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/
48 class FeaturedAction extends Action
52 function isReadOnly($args)
57 function prepare($args)
59 parent::prepare($args);
60 $this->page = ($this->arg('page')) ? ($this->arg('page')+0) : 1;
67 if ($this->page == 1) {
68 // TRANS: Page title for first page of featured users.
69 return _('Featured users');
71 // TRANS: Page title for all but first page of featured users.
72 // TRANS: %d is the page number being displayed.
73 return sprintf(_('Featured users, page %d'), $this->page);
77 function handle($args)
79 parent::handle($args);
84 function showPageNotice()
86 $instr = $this->getInstructions();
87 $output = common_markup_to_html($instr);
88 $this->elementStart('div', 'instructions');
90 $this->elementEnd('div');
93 function getInstructions()
95 // TRANS: Description on page displaying featured users.
96 return sprintf(_('A selection of some great users on %s.'),
97 common_config('site', 'name'));
100 function showContent()
102 // XXX: Note I'm doing it this two-stage way because a raw query
103 // with a JOIN was *not* working. --Zach
105 $featured_nicks = common_config('nickname', 'featured');
107 if (count($featured_nicks) > 0) {
111 foreach ($featured_nicks as $nick) {
112 $quoted[] = "'$nick'";
116 $user->whereAdd(sprintf('nickname IN (%s)', implode(',', $quoted)));
117 $user->limit(($this->page - 1) * PROFILES_PER_PAGE, PROFILES_PER_PAGE + 1);
118 $user->orderBy(common_database_tablename('user') .'.nickname ASC');
122 $profile_ids = array();
124 while ($user->fetch()) {
125 $profile_ids[] = $user->id;
128 $profile = new Profile;
129 $profile->whereAdd(sprintf('profile.id IN (%s)', implode(',', $profile_ids)));
130 $profile->orderBy('nickname ASC');
132 $cnt = $profile->find();
135 $featured = new ProfileList($profile, $this);
141 $this->pagination($this->page > 1, $cnt > PROFILES_PER_PAGE,
142 $this->page, 'featured');