3 * Laconica, 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@controlyourself.ca>
25 * @author Evan Prodromou <evan@controlyourself.ca>
26 * @copyright 2008-2009 Control Yourself, Inc.
27 * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
28 * @link http://laconi.ca/
31 if (!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@controlyourself.ca>
44 * @author Evan Prodromou <evan@controlyourself.ca>
45 * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
46 * @link http://laconi.ca/
49 class FeaturedAction extends Action
53 function isReadOnly($args)
58 function prepare($args)
60 parent::prepare($args);
61 $this->page = ($this->arg('page')) ? ($this->arg('page')+0) : 1;
68 if ($this->page == 1) {
69 return _('Featured users');
71 return sprintf(_('Featured users, page %d'), $this->page);
75 function handle($args)
77 parent::handle($args);
82 function showPageNotice()
84 $instr = $this->getInstructions();
85 $output = common_markup_to_html($instr);
86 $this->elementStart('div', 'instructions');
88 $this->elementEnd('div');
91 function showLocalNav()
93 $nav = new PublicGroupNav($this);
97 function getInstructions()
99 return sprintf(_('A selection of some of the great users on %s'),
100 common_config('site', 'name'));
103 function showContent()
105 // XXX: Note I'm doing it this two-stage way because a raw query
106 // with a JOIN was *not* working. --Zach
108 $featured_nicks = common_config('nickname', 'featured');
110 if (count($featured_nicks) > 0) {
114 foreach ($featured_nicks as $nick) {
115 $quoted[] = "'$nick'";
119 $user->whereAdd(sprintf('nickname IN (%s)', implode(',', $quoted)));
120 $user->limit(($this->page - 1) * PROFILES_PER_PAGE, PROFILES_PER_PAGE + 1);
121 $user->orderBy(common_database_tablename('user') .'.nickname ASC');
125 $profile_ids = array();
127 while ($user->fetch()) {
128 $profile_ids[] = $user->id;
131 $profile = new Profile;
132 $profile->whereAdd(sprintf('profile.id IN (%s)', implode(',', $profile_ids)));
133 $profile->orderBy('nickname ASC');
135 $cnt = $profile->find();
138 $featured = new ProfileList($profile, $this);
144 $this->pagination($this->page > 1, $cnt > PROFILES_PER_PAGE,
145 $this->page, 'featured');