diff --git a/lib/action.php b/lib/action.php index f626c04480..0234d2fa23 100644 --- a/lib/action.php +++ b/lib/action.php @@ -1354,13 +1354,16 @@ class Action extends HTMLOutputter // lawsuit * * @return nothing */ - function menuItem($url, $text, $title=null, $is_selected=false, $id=null) + function menuItem($url, $text, $title=null, $is_selected=false, $id=null, $class=null) { // Added @id to li for some control. // XXX: We might want to move this to htmloutputter.php $lattrs = array(); - if ($is_selected) { - $lattrs['class'] = 'current'; + if ($class !== null) { + $lattrs['class'] = $class; + if ($is_selected) { + $lattrs['class'] = trim('current ' . $lattrs['class']); + } } (is_null($id)) ? $lattrs : $lattrs['id'] = $id; diff --git a/lib/defaultlocalnav.php b/lib/defaultlocalnav.php index 84a6267ac9..ffef87480c 100644 --- a/lib/defaultlocalnav.php +++ b/lib/defaultlocalnav.php @@ -72,6 +72,14 @@ class DefaultLocalNav extends Menu } } + if (!empty($user)) { + $sn = new ListsNav($this->action, $user->getProfile()); + if ($sn->hasLists()) { + // TRANS: Menu item in default local navigation panel. + $this->submenu(_m('MENU', 'Lists'), $sn); + } + } + Event::handle('EndDefaultLocalNav', array($this, $user)); } diff --git a/lib/listsnav.php b/lib/listsnav.php new file mode 100644 index 0000000000..67d8941ba3 --- /dev/null +++ b/lib/listsnav.php @@ -0,0 +1,90 @@ +. + * + * @category Widget + * @package StatusNet + * @author Shashi Gowda + * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0 + * @link http://status.net/ + */ + +if (!defined('STATUSNET') && !defined('LACONICA')) { + exit(1); +} + +/** + * Peopletags a user has subscribed to + * + * @category Widget + * @package StatusNet + * @author Shashi Gowda + * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0 + * @link http://status.net/ + */ +class ListsNav extends Menu +{ + var $profile=null; + var $lists=null; + + function __construct($out, Profile $profile) + { + parent::__construct($out); + $this->profile = $profile; + + $user = common_current_user(); + + $this->lists = $profile->getOwnedTags($user); + } + + function show() + { + $action = $this->actionName; + + $this->out->elementStart('ul', array('class' => 'nav')); + + if (Event::handle('StartListsNav', array($this))) { + + while ($this->lists->fetch()) { + $mode = $this->lists->private ? 'private' : 'public'; + $this->out->menuItem(($this->lists->mainpage) ? + $this->lists->mainpage : + common_local_url('showprofiletag', + array('tagger' => $this->profile->nickname, + 'tag' => $this->lists->tag)), + $this->lists->tag, + '', + $action == 'showprofiletag' && + $this->action->arg('tagger') == $this->profile->nickname && + $this->action->arg('tag') == $this->lists->tag, + 'nav_timeline_list_'.$this->lists->id, + 'mode-' . $mode); + } + Event::handle('EndListsNav', array($this)); + } + + $this->out->elementEnd('ul'); + } + + function hasLists() + { + return (!empty($this->lists) && $this->lists->N > 0); + } +} diff --git a/lib/peopletagsubscriptionssection.php b/lib/peopletagsubscriptionssection.php index 616af28d4c..ab90f7eb75 100644 --- a/lib/peopletagsubscriptionssection.php +++ b/lib/peopletagsubscriptionssection.php @@ -42,21 +42,22 @@ if (!defined('STATUSNET') && !defined('LACONICA')) { class PeopletagSubscriptionsSection extends PeopletagSection { var $profile=null; + var $ptags=null; function __construct($out, Profile $profile) { parent::__construct($out); $this->profile = $profile; + + $limit = PEOPLETAGS_PER_SECTION+1; + $offset = 0; + + $this->ptags = $this->profile->getTagSubscriptions($offset, $limit); } function getPeopletags() { - $limit = PEOPLETAGS_PER_SECTION+1; - $offset = 0; - - $ptags = $this->profile->getTagSubscriptions($offset, $limit); - - return $ptags; + return $this->ptags; } function title() diff --git a/lib/profileaction.php b/lib/profileaction.php index 16592783c9..ca008739de 100644 --- a/lib/profileaction.php +++ b/lib/profileaction.php @@ -97,7 +97,8 @@ class ProfileAction extends OwnerDesignAction $this->showSubscriptions(); $this->showSubscribers(); $this->showGroups(); - $this->showPeopletags(); + $this->showListsFor(); + $this->showListSubscriptions(); $this->showStatistics(); } @@ -189,14 +190,25 @@ class ProfileAction extends OwnerDesignAction $this->elementEnd('div'); } - function showPeopletags() + function showListsFor() { - if (Event::handle('StartShowPeopletagsSection', array($this))) { + if (Event::handle('StartShowListsForSection', array($this))) { $section = new PeopletagsForUserSection($this, $this->profile); $section->show(); - Event::handle('EndShowPeopletagsSection', array($this)); + Event::handle('EndShowListsForSection', array($this)); + } + } + + function showListSubscriptions() + { + if (Event::handle('StartShowListSubscriptionsSection', array($this))) { + + $section = new PeopletagSubscriptionsSection($this, $this->profile); + $section->show(); + + Event::handle('EndShowListSubscriptionsSection', array($this)); } }