diff options
-rw-r--r-- | actions/featured.php | 100 | ||||
-rw-r--r-- | actions/publictagcloud.php | 149 | ||||
-rw-r--r-- | actions/showfavorites.php | 11 | ||||
-rw-r--r-- | actions/tag.php | 161 | ||||
-rw-r--r-- | htaccess.sample | 2 | ||||
-rw-r--r-- | lib/profilelist.php | 150 | ||||
-rw-r--r-- | lib/publicgroupnav.php | 4 | ||||
-rw-r--r-- | lib/util.php | 10 |
8 files changed, 366 insertions, 221 deletions
diff --git a/actions/featured.php b/actions/featured.php index 035622691..f3bade6a5 100644 --- a/actions/featured.php +++ b/actions/featured.php @@ -1,67 +1,107 @@ <?php -/* - * Laconica - a distributed open-source microblogging tool - * Copyright (C) 2008, Controlez-Vous, Inc. +/** + * Laconica, the distributed open-source microblogging tool * - * This program is free software: you can redistribute it and/or modify + * List of featured users + * + * 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 + * 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/>. + * along with this program. If not, see <http://www.gnu.org/licenses/>. + * + * @category Public + * @package Laconica + * @author Zach Copley <zach@controlyourself.ca> + * @author Evan Prodromou <evan@controlyourself.ca> + * @copyright 2008-2009 Control Yourself, Inc. + * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0 + * @link http://laconi.ca/ */ -if (!defined('LACONICA')) { exit(1); } +if (!defined('LACONICA')) { + exit(1); +} -require_once(INSTALLDIR.'/lib/stream.php'); require_once(INSTALLDIR.'/lib/profilelist.php'); +require_once INSTALLDIR.'/lib/publicgroupnav.php'; + +/** + * List of featured users + * + * @category Public + * @package Laconica + * @author Zach Copley <zach@controlyourself.ca> + * @author Evan Prodromou <evan@controlyourself.ca> + * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0 + * @link http://laconi.ca/ + */ -class FeaturedAction extends StreamAction +class FeaturedAction extends Action { + var $page = null; - function handle($args) + function isReadOnly() { - parent::handle($args); + return true; + } + + function prepare($args) + { + parent::prepare($args); + $this->page = ($this->arg('page')) ? ($this->arg('page')+0) : 1; - $page = ($this->arg('page')) ? ($this->arg('page')+0) : 1; + return true; + } - common_show_header(_('Featured users'), - array($this, 'show_header'), null, - array($this, 'show_top')); + function title() + { + if ($this->page == 1) { + return _('Featured users'); + } else { + return sprintf(_('Featured users, page %d'), $this->page); + } + } - $this->show_notices($page); + function handle($args) + { + parent::handle($args); - common_show_footer(); + $this->showPage(); } - function show_top() + function showPageNotice() { - $instr = $this->get_instructions(); + $instr = $this->getInstructions(); $output = common_markup_to_html($instr); $this->elementStart('div', 'instructions'); $this->raw($output); $this->elementEnd('div'); - $this->public_views_menu(); } - function show_header() + function showLocalNav() { + $nav = new PublicGroupNav($this); + $nav->show(); } - function get_instructions() + function getInstructions() { - return _('Featured users'); + return sprintf(_('A selection of some of the great users on %s'), + common_config('site', 'name')); } - function show_notices($page) + function showContent() { - // XXX: Note I'm doing it this two-stage way because a raw query // with a JOIN was *not* working. --Zach @@ -77,7 +117,7 @@ class FeaturedAction extends StreamAction $user = new User; $user->whereAdd(sprintf('nickname IN (%s)', implode(',', $quoted))); - $user->limit(($page - 1) * PROFILES_PER_PAGE, PROFILES_PER_PAGE + 1); + $user->limit(($this->page - 1) * PROFILES_PER_PAGE, PROFILES_PER_PAGE + 1); $user->orderBy('user.nickname ASC'); $user->find(); @@ -95,14 +135,14 @@ class FeaturedAction extends StreamAction $cnt = $profile->find(); if ($cnt > 0) { - $featured = new ProfileList($profile); - $featured->show_list(); + $featured = new ProfileList($profile, null, $this); + $featured->show(); } $profile->free(); - common_pagination($page > 1, $cnt > PROFILES_PER_PAGE, $page, 'featured'); + $this->pagination($this->page > 1, $cnt > PROFILES_PER_PAGE, + $this->page, 'featured'); } } - }
\ No newline at end of file diff --git a/actions/publictagcloud.php b/actions/publictagcloud.php new file mode 100644 index 000000000..ec28edbad --- /dev/null +++ b/actions/publictagcloud.php @@ -0,0 +1,149 @@ +<?php +/** + * Laconica, the distributed open-source microblogging tool + * + * Public tag cloud for notices + * + * 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 Public + * @package Laconica + * @author Mike Cochrane <mikec@mikenz.geek.nz> + * @author Evan Prodromou <evan@controlyourself.ca> + * @copyright 2008 Mike Cochrane + * @copyright 2008-2009 Control Yourself, Inc. + * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0 + * @link http://laconi.ca/ + */ + +if (!defined('LACONICA')) { exit(1); } + +define('TAGS_PER_PAGE', 100); + +/** + * Public tag cloud for notices + * + * @category Personal + * @package Laconica + * @author Mike Cochrane <mikec@mikenz.geek.nz> + * @author Evan Prodromou <evan@controlyourself.ca> + * @copyright 2008 Mike Cochrane + * @copyright 2008-2009 Control Yourself, Inc. + * @link http://laconi.ca/ + */ + +class PublictagcloudAction extends Action +{ + function isReadOnly() + { + return true; + } + + function title() + { + return _('Public tag cloud'); + } + + function showPageNotice() + { + $this->element('p', 'instructions', + sprintf(_('These are most popular recent tags on %s '), + common_config('site', 'name'))); + } + + function showLocalNav() + { + $nav = new PublicGroupNav($this); + $nav->show(); + } + + function handle($args) + { + parent::handle($args); + $this->showPage(); + } + + function showContent() + { + # This should probably be cached rather than recalculated + $tags = new Notice_tag(); + + #Need to clear the selection and then only re-add the field + #we are grouping by, otherwise it's not a valid 'group by' + #even though MySQL seems to let it slide... + $tags->selectAdd(); + $tags->selectAdd('tag'); + + #Add the aggregated columns... + $tags->selectAdd('max(notice_id) as last_notice_id'); + if(common_config('db','type')=='pgsql') { + $calc='sum(exp(-extract(epoch from (now()-created))/%s)) as weight'; + } else { + $calc='sum(exp(-(now() - created)/%s)) as weight'; + } + $tags->selectAdd(sprintf($calc, common_config('tag', 'dropoff'))); + $tags->groupBy('tag'); + $tags->orderBy('weight DESC'); + + $tags->limit(TAGS_PER_PAGE); + + $cnt = $tags->find(); + + if ($cnt > 0) { + $this->elementStart('p', 'tagcloud'); + + $tw = array(); + $sum = 0; + while ($tags->fetch()) { + $tw[$tags->tag] = $tags->weight; + $sum += $tags->weight; + } + + ksort($tw); + + foreach ($tw as $tag => $weight) { + $this->showTag($tag, $weight, $weight/$sum); + } + + $this->elementEnd('p'); + } + } + + function showTag($tag, $weight, $relative) + { + # XXX: these should probably tune to the size of the site + if ($relative > 0.1) { + $cls = 'largest'; + } else if ($relative > 0.05) { + $cls = 'verylarge'; + } else if ($relative > 0.02) { + $cls = 'large'; + } else if ($relative > 0.01) { + $cls = 'medium'; + } else if ($relative > 0.005) { + $cls = 'small'; + } else if ($relative > 0.002) { + $cls = 'verysmall'; + } else { + $cls = 'smallest'; + } + + $this->element('a', array('class' => "$cls weight-$weight relative-$relative", + 'href' => common_local_url('tag', array('tag' => $tag))), + $tag); + $this->text(' '); + } +} diff --git a/actions/showfavorites.php b/actions/showfavorites.php index d2c91c025..bb68f8d94 100644 --- a/actions/showfavorites.php +++ b/actions/showfavorites.php @@ -53,6 +53,17 @@ class ShowfavoritesAction extends Action var $page = null; /** + * Is this a read-only page? + * + * @return boolean true + */ + + function isReadOnly() + { + return true; + } + + /** * Title of the page * * Includes name of user and page number. diff --git a/actions/tag.php b/actions/tag.php index 3096b75b3..039cd9660 100644 --- a/actions/tag.php +++ b/actions/tag.php @@ -19,154 +19,71 @@ if (!defined('LACONICA')) { exit(1); } -require_once(INSTALLDIR.'/actions/showstream.php'); -define('TAGS_PER_PAGE', 100); - -class TagAction extends StreamAction +class TagAction extends Action { - - function handle($args) + function prepare($args) { + parent::prepare($args); + $this->tag = $this->trimmed('tag'); - parent::handle($args); - - # Looks like we're good; show the header - - if (isset($args['tag']) && $args['tag']) { - $tag = $args['tag']; - common_show_header(sprintf(_("Notices tagged with %s"), $tag), - array($this, 'show_header'), $tag, - array($this, 'show_top')); - $this->show_notices($tag); - } else { - common_show_header(_("Tags"), - array($this, 'show_header'), '', - array($this, 'show_top')); - $this->show_tags(); + if (!$this->tag) { + common_redirect(common_local_url('publictagcloud'), 301); + return false; } - common_show_footer(); + $this->page = ($this->arg('page')) ? ($this->arg('page')+0) : 1; + return true; } - function show_header($tag = false) + function title() { - if ($tag) { - $this->element('link', array('rel' => 'alternate', - 'href' => common_local_url('tagrss', array('tag' => $tag)), - 'type' => 'application/rss+xml', - 'title' => sprintf(_('Feed for tag %s'), $tag))); + if ($this->page == 1) { + return sprintf(_("Notices tagged with %s"), $this->tag); + } else { + return sprintf(_("Notices tagged with %s, page %d"), + $this->tag, + $this->page); } } - function get_instructions() + function handle($args) { - return _('Showing most popular tags from the last week'); + parent::handle($args); + + $this->showPage(); } - function show_top($tag = false) + function showFeeds() { - if (!$tag) { - $instr = $this->get_instructions(); - $output = common_markup_to_html($instr); - $this->elementStart('div', 'instructions'); - $this->raw($output); - $this->elementEnd('div'); - $this->public_views_menu(); - } - else { - $this->show_feeds_list(array(0=>array('href'=>common_local_url('tagrss'), - 'type' => 'rss', - 'version' => 'RSS 1.0', - 'item' => 'tagrss'))); - } + $this->element('link', array('rel' => 'alternate', + 'href' => common_local_url('tagrss', array('tag' => $this->tag)), + 'type' => 'application/rss+xml', + 'title' => sprintf(_('Feed for tag %s'), $this->tag))); } - function show_tags() + function showPageNotice() { - # This should probably be cached rather than recalculated - $tags = DB_DataObject::factory('Notice_tag'); - - #Need to clear the selection and then only re-add the field - #we are grouping by, otherwise it's not a valid 'group by' - #even though MySQL seems to let it slide... - $tags->selectAdd(); - $tags->selectAdd('tag'); - - #Add the aggregated columns... - $tags->selectAdd('max(notice_id) as last_notice_id'); - if(common_config('db','type')=='pgsql') { - $calc='sum(exp(-extract(epoch from (now()-created))/%s)) as weight'; - } else { - $calc='sum(exp(-(now() - created)/%s)) as weight'; - } - $tags->selectAdd(sprintf($calc, common_config('tag', 'dropoff'))); - $tags->groupBy('tag'); - $tags->orderBy('weight DESC'); - - # $tags->whereAdd('created > "' . strftime('%Y-%m-%d %H:%M:%S', strtotime('-1 MONTH')) . '"'); - - $tags->limit(TAGS_PER_PAGE); - - $cnt = $tags->find(); - - if ($cnt > 0) { - $this->elementStart('p', 'tagcloud'); - - $tw = array(); - $sum = 0; - while ($tags->fetch()) { - $tw[$tags->tag] = $tags->weight; - $sum += $tags->weight; - } - - ksort($tw); - - foreach ($tw as $tag => $weight) { - $this->show_tag($tag, $weight, $weight/$sum); - } - - $this->elementEnd('p'); - } + return sprintf(_('Messages tagged "%s", most recent first'), $this->tag); } - function show_tag($tag, $weight, $relative) + function showExportData() { - - # XXX: these should probably tune to the size of the site - if ($relative > 0.1) { - $cls = 'largest'; - } else if ($relative > 0.05) { - $cls = 'verylarge'; - } else if ($relative > 0.02) { - $cls = 'large'; - } else if ($relative > 0.01) { - $cls = 'medium'; - } else if ($relative > 0.005) { - $cls = 'small'; - } else if ($relative > 0.002) { - $cls = 'verysmall'; - } else { - $cls = 'smallest'; - } - - $this->element('a', array('class' => "$cls weight-$weight relative-$relative", - 'href' => common_local_url('tag', array('tag' => $tag))), - $tag); - $this->text(' '); + $fl = new FeedList($this); + $fl->show(array(0=>array('href'=>common_local_url('tagrss', array('tag' => $this->tag)), + 'type' => 'rss', + 'version' => 'RSS 1.0', + 'item' => 'tagrss'))); } - function show_notices($tag) + function showContent() { + $notice = Notice_tag::getStream($this->tag, (($this->page-1)*NOTICES_PER_PAGE), NOTICES_PER_PAGE + 1); - $cnt = 0; - - $page = ($this->arg('page')) ? ($this->arg('page')+0) : 1; - - $notice = Notice_tag::getStream($tag, (($page-1)*NOTICES_PER_PAGE), NOTICES_PER_PAGE + 1); + $nl = new NoticeList($notice, $this); - $cnt = $this->show_notice_list($notice); + $cnt = $nl->show(); - common_pagination($page > 1, $cnt > NOTICES_PER_PAGE, - $page, 'tag', array('tag' => $tag)); + $this->pagination($this->page > 1, $cnt > NOTICES_PER_PAGE, + $this->page, 'tag', array('tag' => $this->tag)); } } diff --git a/htaccess.sample b/htaccess.sample index 10e51b5b0..b0e3e93e0 100644 --- a/htaccess.sample +++ b/htaccess.sample @@ -76,7 +76,7 @@ RewriteRule ^message/(\d+)$ index.php?action=showmessage&message=$1 [L,QSA] RewriteRule ^user/(\d+)$ index.php?action=userbyid&id=$1 [L,QSA] -RewriteRule ^tags/?$ index.php?action=tag [L,QSA] +RewriteRule ^tags/?$ index.php?action=publictagcloud [L,QSA] RewriteRule ^tag/([a-zA-Z0-9]+)/rss$ index.php?action=tagrss&tag=$1 [L,QSA] RewriteRule ^tag(/(.*))?$ index.php?action=tag&tag=$2 [L,QSA] diff --git a/lib/profilelist.php b/lib/profilelist.php index bda05daf3..fdc71ab8d 100644 --- a/lib/profilelist.php +++ b/lib/profilelist.php @@ -1,10 +1,13 @@ <?php -/* - * Laconica - a distributed open-source microblogging tool - * Copyright (C) 2008, Controlez-Vous, Inc. +/** + * Laconica, the distributed open-source microblogging tool * - * This program is free software: you can redistribute it and/or modify + * Widget to show a list of profiles + * + * 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. @@ -16,30 +19,56 @@ * * 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 Public + * @package Laconica + * @author Evan Prodromou <evan@controlyourself.ca> + * @copyright 2008-2009 Control Yourself, Inc. + * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0 + * @link http://laconi.ca/ */ -if (!defined('LACONICA')) { exit(1); } +if (!defined('LACONICA')) { + exit(1); +} + +require_once INSTALLDIR.'/lib/widget.php'; define('PROFILES_PER_PAGE', 20); -class ProfileList -{ +/** + * Widget to show a list of profiles + * + * @category Public + * @package Laconica + * @author Zach Copley <zach@controlyourself.ca> + * @author Evan Prodromou <evan@controlyourself.ca> + * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0 + * @link http://laconi.ca/ + */ +class ProfileList extends Widget +{ + /** Current profile, profile query. */ var $profile = null; + /** Owner of this list */ var $owner = null; + /** Action object using us. */ var $action = null; function __construct($profile, $owner=null, $action=null) { + parent::__construct($action); + $this->profile = $profile; $this->owner = $owner; $this->action = $action; } - function show_list() + function show() { - common_element_start('ul', array('id' => 'profiles', 'class' => 'profile_list')); + $this->out->elementStart('ul', array('id' => 'profiles', 'class' => 'profile_list')); $cnt = 0; @@ -48,18 +77,17 @@ class ProfileList if($cnt > PROFILES_PER_PAGE) { break; } - $this->show(); + $this->showProfile(); } - common_element_end('ul'); + $this->out->elementEnd('ul'); return $cnt; } - function show() + function showProfile() { - - common_element_start('li', array('class' => 'profile_single', + $this->out->elementStart('li', array('class' => 'profile_single', 'id' => 'profile-' . $this->profile->id)); $user = common_current_user(); @@ -68,51 +96,53 @@ class ProfileList # XXX: special-case for user looking at own # subscriptions page if ($user->isSubscribed($this->profile)) { - common_unsubscribe_form($this->profile); + $usf = new UnsubscribeForm($this->out, $this->profile); + $usf->show(); } else { - common_subscribe_form($this->profile); + $sf = new SubscribeForm($this->out, $this->profile); + $sf->show(); } } $avatar = $this->profile->getAvatar(AVATAR_STREAM_SIZE); - common_element_start('a', array('href' => $this->profile->profileurl)); - common_element('img', array('src' => ($avatar) ? common_avatar_display_url($avatar) : common_default_avatar(AVATAR_STREAM_SIZE), + $this->out->elementStart('a', array('href' => $this->profile->profileurl)); + $this->out->element('img', array('src' => ($avatar) ? common_avatar_display_url($avatar) : common_default_avatar(AVATAR_STREAM_SIZE), 'class' => 'avatar stream', 'width' => AVATAR_STREAM_SIZE, 'height' => AVATAR_STREAM_SIZE, 'alt' => ($this->profile->fullname) ? $this->profile->fullname : $this->profile->nickname)); - common_element_end('a'); - common_element_start('p'); - common_element_start('a', array('href' => $this->profile->profileurl, + $this->out->elementEnd('a'); + $this->out->elementStart('p'); + $this->out->elementStart('a', array('href' => $this->profile->profileurl, 'class' => 'nickname')); - common_raw($this->highlight($this->profile->nickname)); - common_element_end('a'); + $this->out->raw($this->highlight($this->profile->nickname)); + $this->out->elementEnd('a'); if ($this->profile->fullname) { - common_text(' | '); - common_element_start('span', 'fullname'); - common_raw($this->highlight($this->profile->fullname)); - common_element_end('span'); + $this->out->text(' | '); + $this->out->elementStart('span', 'fullname'); + $this->out->raw($this->highlight($this->profile->fullname)); + $this->out->elementEnd('span'); } if ($this->profile->location) { - common_text(' | '); - common_element_start('span', 'location'); - common_raw($this->highlight($this->profile->location)); - common_element_end('span'); + $this->out->text(' | '); + $this->out->elementStart('span', 'location'); + $this->out->raw($this->highlight($this->profile->location)); + $this->out->elementEnd('span'); } - common_element_end('p'); + $this->out->elementEnd('p'); if ($this->profile->homepage) { - common_element_start('p', 'website'); - common_element_start('a', array('href' => $this->profile->homepage)); - common_raw($this->highlight($this->profile->homepage)); - common_element_end('a'); - common_element_end('p'); + $this->out->elementStart('p', 'website'); + $this->out->elementStart('a', array('href' => $this->profile->homepage)); + $this->out->raw($this->highlight($this->profile->homepage)); + $this->out->elementEnd('a'); + $this->out->elementEnd('p'); } if ($this->profile->bio) { - common_element_start('p', 'bio'); - common_raw($this->highlight($this->profile->bio)); - common_element_end('p'); + $this->out->elementStart('p', 'bio'); + $this->out->raw($this->highlight($this->profile->bio)); + $this->out->elementEnd('p'); } # If we're on a list with an owner (subscriptions or subscribers)... @@ -121,49 +151,49 @@ class ProfileList # Get tags $tags = Profile_tag::getTags($this->owner->id, $this->profile->id); - common_element_start('div', 'tags_user'); - common_element_start('dl'); - common_element_start('dt'); + $this->out->elementStart('div', 'tags_user'); + $this->out->elementStart('dl'); + $this->out->elementStart('dt'); if ($user->id == $this->owner->id) { - common_element('a', array('href' => common_local_url('tagother', + $this->out->element('a', array('href' => common_local_url('tagother', array('id' => $this->profile->id))), _('Tags')); } else { - common_text(_('Tags')); + $this->out->text(_('Tags')); } - common_text(":"); - common_element_end('dt'); - common_element_start('dd'); + $this->out->text(":"); + $this->out->elementEnd('dt'); + $this->out->elementStart('dd'); if ($tags) { - common_element_start('ul', 'tags xoxo'); + $this->out->elementStart('ul', 'tags xoxo'); foreach ($tags as $tag) { - common_element_start('li'); - common_element('a', array('rel' => 'tag', + $this->out->elementStart('li'); + $this->out->element('a', array('rel' => 'tag', 'href' => common_local_url($this->action, array('nickname' => $this->owner->nickname, 'tag' => $tag))), $tag); - common_element_end('li'); + $this->out->elementEnd('li'); } - common_element_end('ul'); + $this->out->elementEnd('ul'); } else { - common_text(_('(none)')); + $this->out->text(_('(none)')); } - common_element_end('dd'); - common_element_end('dl'); - common_element_end('div'); + $this->out->elementEnd('dd'); + $this->out->elementEnd('dl'); + $this->out->elementEnd('div'); } if ($user && $user->id == $this->owner->id) { - $this->show_owner_controls($this->profile); + $this->showOwnerControls($this->profile); } - common_element_end('li'); + $this->out->elementEnd('li'); } /* Override this in subclasses. */ - function show_owner_controls($profile) + function showOwnerControls($profile) { return; } diff --git a/lib/publicgroupnav.php b/lib/publicgroupnav.php index 97b57ec17..8dd97a3b7 100644 --- a/lib/publicgroupnav.php +++ b/lib/publicgroupnav.php @@ -76,8 +76,8 @@ class PublicGroupNav extends Widget $this->out->menuItem(common_local_url('public'), _('Public'), _('Public timeline'), $action_name == 'public', 'nav_timeline_public'); - $this->out->menuItem(common_local_url('tag'), _('Recent tags'), - _('Recent tags'), $action_name == 'tag', 'nav_recent-tags'); + $this->out->menuItem(common_local_url('publictagcloud'), _('Recent tags'), + _('Recent tags'), $action_name == 'publictagcloud', 'nav_recent-tags'); if (count(common_config('nickname', 'featured')) > 0) { $this->out->menuItem(common_local_url('featured'), _('Featured'), diff --git a/lib/util.php b/lib/util.php index d67c64972..73c4cdcc8 100644 --- a/lib/util.php +++ b/lib/util.php @@ -865,13 +865,11 @@ function common_fancy_url($action, $args=null) case 'avatarbynickname': return common_path($args['nickname'].'/avatar/'.$args['size']); case 'tag': - if (isset($args['tag']) && $args['tag']) { - $path = 'tag/' . $args['tag']; - unset($args['tag']); - } else { - $path = 'tags'; - } + $path = 'tag/' . $args['tag']; + unset($args['tag']); return common_path($path . (($args) ? ('?' . http_build_query($args)) : '')); + case 'publictagcloud': + return common_path('tags'); case 'peopletag': $path = 'peopletag/' . $args['tag']; unset($args['tag']); |