if ($_SERVER['REQUEST_METHOD'] == 'POST' && $this->boolean('delete')) {
// TRANS: Title for edit people tag page after deleting a tag.
// TRANS: %s is a tag.
- return sprintf(_('Delete %s people tag'), $this->peopletag->tag);
+ return sprintf(_('Delete %s list'), $this->peopletag->tag);
}
// TRANS: Title for edit people tag page.
// TRANS: %s is a tag.
- return sprintf(_('Edit people tag %s'), $this->peopletag->tag);
+ return sprintf(_('Edit list %s'), $this->peopletag->tag);
}
/**
if (!$this->peopletag) {
// TRANS: Client error displayed when referring to a non-exsting people tag.
- $this->clientError(_('No such people tag.'), 404);
+ $this->clientError(_('No such list.'), 404);
return false;
}
} else {
$this->element('p', 'instructions',
// TRANS: Form instruction for edit people tag form.
- _('Use this form to edit the people tag.'));
+ _('Use this form to edit the list.'));
}
}
if (!$result) {
common_log_db_error($this->group, 'UPDATE', __FILE__);
// TRANS: TRANS: Server error displayed when updating a people tag fails.
- $this->serverError(_('Could not update people tag.'));
+ $this->serverError(_('Could not update list.'));
}
$this->peopletag->query('COMMIT');
if (!$this->peopletag) {
// TRANS: Client error displayed when referring to non-existing people tag.
- $this->clientError(_('No such people tag.'), 404);
+ $this->clientError(_('No such list.'), 404);
return false;
}
if ($this->page == 1) {
// TRANS: Title for list of people tagged by the user with a tag.
// TRANS: %1$s is a tag, %2$s is a username.
- return sprintf(_('People tagged %1$s by %2$s'),
+ return sprintf(_('People listed in %1$s by %2$s'),
$this->peopletag->tag, $this->tagger->nickname);
} else {
// TRANS: Title for list of people tagged by the user with a tag.
// TRANS: %1$s is a tag, %2$s is a username, %2$s is a page number.
- return sprintf(_('People tagged %1$s by %2$s, page %3$d'),
+ return sprintf(_('People listed in %1$s by %2$s, page %3$d'),
$this->peopletag->tag, $this->user->nickname,
$this->page);
}
/**
* StatusNet, the distributed open-source microblogging tool
*
- * People tags by a user
+ * Lists by a user
*
* PHP version 5
*
if ($this->page == 1) {
if ($this->isOwner()) {
if ($this->arg('private')) {
- // TRANS: Title for people tags by a user page for a private tag.
- return _('Private people tags by you');
+ // TRANS: Title for lists by a user page for a private tag.
+ return _('Private lists by you');
} else if ($this->arg('public')) {
- // TRANS: Title for people tags by a user page for a public tag.
- return _('Public people tags by you');
+ // TRANS: Title for lists by a user page for a public tag.
+ return _('Public lists by you');
}
- // TRANS: Title for people tags by a user page.
- return _('People tags by you');
+ // TRANS: Title for lists by a user page.
+ return _('Lists by you');
}
- // TRANS: Title for people tags by a user page.
+ // TRANS: Title for lists by a user page.
// TRANS: %s is a user nickname.
- return sprintf(_('People tags by %s'), $this->tagger->nickname);
+ return sprintf(_('Lists by %s'), $this->tagger->nickname);
} else {
- // TRANS: Title for people tags by a user page.
+ // TRANS: Title for lists by a user page.
// TRANS: %1$s is a user nickname, %2$d is a page number.
- return sprintf(_('People tags by %1$s, page %2$d'), $this->tagger->nickname, $this->page);
+ return sprintf(_('Lists by %1$s, page %2$d'), $this->tagger->nickname, $this->page);
}
}
if ($this->isOwner()) {
$this->tags = $this->tagger->getPrivateTags($offset, $limit);
} else {
- // TRANS: Client error displayed when trying view another user's private people tags.
- $this->clientError(_('You cannot view others\' private people tags'), 403);
+ // TRANS: Client error displayed when trying view another user's private lists.
+ $this->clientError(_('You cannot view others\' private lists'), 403);
}
} else {
$this->tags = $this->tagger->getOwnedTags(common_current_user(), $offset, $limit);
array('href' =>
common_local_url('peopletagsforuser',
array('nickname' => $this->user->nickname))),
- // TRANS: Link text to show people tags for user %s.
- sprintf(_('People tags for %s'), $this->tagger->nickname));
+ // TRANS: Link text to show lists for user %s.
+ sprintf(_('Lists for %s'), $this->tagger->nickname));
$this->elementEnd('li');
if ($this->isOwner()) {
function showAnonymousMessage()
{
$notice =
- // TRANS: Message displayed for anonymous users on page that displays people tags by a user.
+ // TRANS: Message displayed for anonymous users on page that displays lists by a user.
// TRANS: This message contains Markdown links in the form [description](links).
// TRANS: %s is a tagger nickname.
- sprintf(_('These are people tags created by **%s**. ' .
- 'People tags are how you sort similar ' .
+ sprintf(_('These are lists created by **%s**. ' .
+ 'Lists are how you sort similar ' .
'people on %%%%site.name%%%%, a [micro-blogging]' .
'(http://en.wikipedia.org/wiki/Micro-blogging) service ' .
'based on the Free Software [StatusNet](http://status.net/) tool. ' .
return !empty($user) && $user->id == $this->tagger->id;
}
+ function showObjectNav()
+ {
+ $nav = new PeopletagNav($this, $this->tagger);
+ $nav->show();
+ }
+
function showEmptyListMessage()
{
- // TRANS: Message displayed on page that displays people tags by a user when there are none.
+ // TRANS: Message displayed on page that displays lists by a user when there are none.
// TRANS: This message contains Markdown links in the form [description](links).
// TRANS: %s is a tagger nickname.
- $message = sprintf(_('%s has not created any [people tags](%%%%doc.tags%%%%) yet.'), $this->tagger->nickname);
+ $message = sprintf(_('%s has not created any [lists](%%%%doc.lists%%%%) yet.'), $this->tagger->nickname);
$this->elementStart('div', 'guide');
$this->raw(common_markup_to_html($message));
$this->elementEnd('div');
}
+ function showProfileBlock()
+ {
+ $block = new AccountProfileBlock($this, $this->tagger);
+ $block->show();
+ }
+
function showSections()
{
#TODO: tags with most subscribers
{
if ($this->page == 1) {
// Page title. %s is a tagged user's nickname.
- return sprintf(_('People tags for %s'), $this->tagged->nickname);
+ return sprintf(_('Lists with %s in them'), $this->tagged->nickname);
} else {
// Page title. %1$s is a tagged user's nickname, %2$s is a page number.
- return sprintf(_('People tags for %1$s, page %2$d'), $this->tagged->nickname, $this->page);
+ return sprintf(_('Lists with %1$s, page %2$d'), $this->tagged->nickname, $this->page);
}
}
// TRANS: Message displayed for anonymous users on page that displays people tags for a user.
// TRANS: This message contains Markdown links in the form [description](links).
// TRANS: %s is a tagger nickname.
- sprintf(_('These are people tags for **%s**. ' .
- 'People tags are how you sort similar ' .
+ sprintf(_('These are lists for **%s**. ' .
+ 'lists are how you sort similar ' .
'people on %%%%site.name%%%%, a [micro-blogging]' .
'(http://en.wikipedia.org/wiki/Micro-blogging) service ' .
'based on the Free Software [StatusNet](http://status.net/) tool. ' .
$this->elementEnd('div');
}
- function showPageNotice()
- {
- $this->elementStart('dl', 'filter_tags');
- $this->elementStart('dd', array('id' => 'filter_tags_for',
- 'class' => 'child_1'));
-
- $user = common_current_user();
- // TRANS: Page notice.
- $text = ($this->tagged->id == @$user->id) ? _('People tags by you') :
- // TRANS: Page notice. %s is a tagger's nickname.
- sprintf(_('People tags by %s'), $this->tagged->nickname);
- $this->element('a',
- array('href' =>
- common_local_url('peopletagsbyuser',
- array('nickname' => $this->tagged->nickname))),
- $text);
- $this->elementEnd('dd');
- $this->elementEnd('dl');
- }
-
-
function showContent()
{
#TODO: controls here.
// TRANS: Message displayed on page that displays people tags for a user when there are none.
// TRANS: This message contains Markdown links in the form [description](links).
// TRANS: %s is a tagger nickname.
- $message = sprintf(_('%s has not been [tagged](%%%%doc.tags%%%%) by anyone yet.'), $this->tagged->nickname);
+ $message = sprintf(_('%s has not been [listed](%%%%doc.lists%%%%) by anyone yet.'), $this->tagged->nickname);
$this->elementStart('div', 'guide');
$this->raw(common_markup_to_html($message));
$this->elementEnd('div');
}
+ function showObjectNav()
+ {
+ $nav = new PeopletagNav($this, $this->tagged);
+ $nav->show();
+ }
+
+ function showProfileBlock()
+ {
+ $block = new AccountProfileBlock($this, $this->tagged);
+ $block->show();
+ }
+
function showSections()
{
#TODO: tags with most subscribers
if ($this->page == 1) {
// TRANS: Title for page that displays people tags subscribed to by a user.
// TRANS: %s is a profile nickname.
- return sprintf(_('People tags subscriptions by %s'), $this->profile->nickname);
+ return sprintf(_('Lists subscribed to by %s'), $this->profile->nickname);
} else {
// TRANS: Title for page that displays people tags subscribed to by a user.
// TRANS: %1$s is a profile nickname, %2$d is a page number.
- return sprintf(_('People tags subscriptions by %1$s, page %2$d'), $this->profile->nickname, $this->page);
+ return sprintf(_('Lists subscribed to by %1$s, page %2$d'), $this->profile->nickname, $this->page);
}
}
// TRANS: Message displayed for anonymous users on page that displays people tags subscribed to by a user.
// TRANS: This message contains Markdown links in the form [description](links).
// TRANS: %s is a profile nickname.
- sprintf(_('These are people tags subscribed to by **%s**. ' .
- 'People tags are how you sort similar ' .
+ sprintf(_('These are lists subscribed to by **%s**. ' .
+ 'Lists are how you sort similar ' .
'people on %%%%site.name%%%%, a [micro-blogging]' .
'(http://en.wikipedia.org/wiki/Micro-blogging) service ' .
'based on the Free Software [StatusNet](http://status.net/) tool. ' .
'You can easily keep track of what they ' .
- 'are doing by subscribing to the tag\'s timeline.' ), $this->profile->nickname);
+ 'are doing by subscribing to the list\'s timeline.' ), $this->profile->nickname);
$this->elementStart('div', array('id' => 'anon_notice'));
$this->raw(common_markup_to_html($notice));
$this->elementEnd('div');
$this->page, 'peopletagsubscriptions', array('nickname' => $this->profile->id));
}
+ function showObjectNav()
+ {
+ $nav = new PeopletagNav($this, $this->profile);
+ $nav->show();
+ }
+
+ function showProfileBlock()
+ {
+ $block = new AccountProfileBlock($this, $this->profile);
+ $block->show();
+ }
+
function showSections()
{
#TODO: tags with most subscribers
class ShowprofiletagAction extends Action
{
- var $notice, $tagger, $peopletag;
+ var $notice, $tagger, $peopletag, $userProfile;
function isReadOnly($args)
{
}
$this->page = ($this->arg('page')) ? ($this->arg('page')+0) : 1;
- $this->notice = $this->peopletag->getNotices(($this->page-1)*NOTICES_PER_PAGE, NOTICES_PER_PAGE + 1);
+ $this->userProfile = Profile::current();
+
+ $stream = new PeopletagNoticeStream($this->peopletag, $this->userProfile);
+
+ $this->notice = $stream->getNotices(($this->page-1)*NOTICES_PER_PAGE,
+ NOTICES_PER_PAGE + 1);
if ($this->page > 1 && $this->notice->N == 0) {
// TRANS: Server error when page not found (404).
if($this->peopletag->private) {
// TRANS: Title for private people tag timeline.
// TRANS: %1$s is a people tag, %2$s is a page number.
- return sprintf(_('Private timeline for people tagged %1$s by you, page %2$d'),
+ return sprintf(_('Private timeline for %1$s list by you, page %2$d'),
$this->peopletag->tag, $this->page);
}
if (!empty($current) && $current->id == $this->peopletag->tagger) {
// TRANS: Title for public people tag timeline where the viewer is the tagger.
// TRANS: %1$s is a people tag, %2$s is a page number.
- return sprintf(_('Timeline for people tagged %1$s by you, page %2$d'),
+ return sprintf(_('Timeline for %1$s list by you, page %2$d'),
$this->peopletag->tag, $this->page);
}
// TRANS: Title for private people tag timeline.
// TRANS: %1$s is a people tag, %2$s is the tagger's nickname, %3$d is a page number.
- return sprintf(_('Timeline for people tagged %1$s by %2$s, page %3$d'),
+ return sprintf(_('Timeline for %1$s list by %2$s, page %3$d'),
$this->peopletag->tag,
$this->tagger->nickname,
$this->page
if($this->peopletag->private) {
// TRANS: Title for private people tag timeline.
// TRANS: %s is a people tag.
- return sprintf(_('Private timeline of people tagged %s by you'),
+ return sprintf(_('Private timeline of %s list by you'),
$this->peopletag->tag);
}
if (!empty($current) && $current->id == $this->peopletag->tagger) {
// TRANS: Title for public people tag timeline where the viewer is the tagger.
// TRANS: %s is a people tag.
- return sprintf(_('Timeline for people tagged %s by you'),
+ return sprintf(_('Timeline for %s list by you'),
$this->peopletag->tag);
}
// TRANS: Title for private people tag timeline.
// TRANS: %1$s is a people tag, %2$s is the tagger's nickname.
- return sprintf(_('Timeline for people tagged %1$s by %2$s'),
+ return sprintf(_('Timeline for %1$s list by %2$s'),
$this->peopletag->tag,
$this->tagger->nickname
);
),
// TRANS: Feed title.
// TRANS: %1$s is a people tag, %2$s is tagger's nickname.
- sprintf(_('Feed for people tagged %1$s by %2$s (Atom)'),
+ sprintf(_('Feed for %1$s list by %2$s (Atom)'),
$this->peopletag->tag, $this->tagger->nickname
)
)
{
// TRANS: Empty list message for people tag timeline.
// TRANS: %1$s is a people tag, %2$s is a tagger's nickname.
- $message = sprintf(_('This is the timeline for people tagged %1$s by %2$s but no one has posted anything yet.'),
+ $message = sprintf(_('This is the timeline for %1$s list by %2$s but no one has posted anything yet.'),
$this->peopletag->tag,
$this->tagger->nickname) . ' ';
function showNotices()
{
if (Event::handle('StartShowProfileTagContent', array($this))) {
- $nl = new NoticeList($this->notice, $this);
+ $nl = new ThreadedNoticeList($this->notice, $this, $this->userProfile);
$cnt = $nl->show();
$this->showEmptyListMessage();
}
- $this->pagination(
- $this->page > 1, $cnt > NOTICES_PER_PAGE,
- $this->page, 'showprofiletag', array('tag' => $this->peopletag->tag,
- 'tagger' => $this->tagger->nickname)
+ $this->pagination($this->page > 1,
+ $cnt > NOTICES_PER_PAGE,
+ $this->page,
+ 'showprofiletag',
+ array('tag' => $this->peopletag->tag,
+ 'tagger' => $this->tagger->nickname)
);
Event::handle('EndShowProfileTagContent', array($this));
if(!empty($current) && $this->peopletag->tagger == $current->id) {
// TRANS: Header on show profile tag page.
// TRANS: %s is a people tag.
- $title = sprintf(_('People tagged %s by you'), $this->peopletag->tag);
+ $title = sprintf(_('Listed'), $this->peopletag->tag);
} else {
// TRANS: Header on show profile tag page.
// TRANS: %1$s is a people tag, %2$s is a tagger's nickname.
- $title = sprintf(_('People tagged %1$s by %2$s'),
+ $title = sprintf(_('Listed'),
$this->peopletag->tag,
$this->tagger->nickname);
}
$notice->saveKnownGroups($groups);
- if (isset($peopletags)) {
- $notice->saveProfileTags($peopletags);
- } else {
- $notice->saveProfileTags();
- }
-
if (isset($urls)) {
$notice->saveKnownUrls($urls);
} else {
if (!empty($profile)) {
$profile->blowNoticeCount();
}
+
+ $ptags = $this->getProfileTags();
+ foreach ($ptags as $ptag) {
+ $ptag->blowNoticeStreamCache();
+ }
}
/**
// In case we're the first, will need to calc a new root.
self::blow('notice:conversation_root:%d', $this->conversation);
}
+
+ $ptags = $this->getProfileTags();
+ foreach ($ptags as $ptag) {
+ $ptag->blowNoticeStreamCache(true);
+ }
}
/** save all urls in the notice to the db
function getProfileTags()
{
- // Don't save ptags for repeats, for now.
-
- if (!empty($this->repeat_of)) {
- return array();
- }
-
- // XXX: cache me
-
- $ptags = array();
-
- $ptagi = new Profile_tag_inbox();
-
- $ptagi->selectAdd();
- $ptagi->selectAdd('profile_tag_id');
-
- $ptagi->notice_id = $this->id;
+ $profile = $this->getProfile();
+ $list = $profile->getOtherTags($profile);
+ $ptags = array();
- if ($ptagi->find()) {
- while ($ptagi->fetch()) {
- $profile_list = Profile_list::staticGet('id', $ptagi->profile_tag_id);
- if ($profile_list) {
- $ptags[] = $profile_list;
- }
- }
+ while($list->fetch()) {
+ $ptags[] = clone($list);
}
- $ptagi->free();
-
return $ptags;
}
return true;
}
- /**
- * record targets into profile_tag_inbox.
- * @return array of Profile_list objects
- */
- function saveProfileTags($known=array())
- {
- // Don't save ptags for repeats, for now
-
- if (!empty($this->repeat_of)) {
- return array();
- }
-
- if (is_array($known)) {
- $ptags = $known;
- } else {
- $ptags = array();
- }
-
- $ptag = new Profile_tag();
- $ptag->tagged = $this->profile_id;
-
- if($ptag->find()) {
- while($ptag->fetch()) {
- $plist = Profile_list::getByTaggerAndTag($ptag->tagger, $ptag->tag);
- if (!empty($plist)) {
- $ptags[] = clone($plist);
- }
- }
- }
-
- foreach ($ptags as $target) {
- $this->addToProfileTagInbox($target);
- }
-
- return $ptags;
- }
-
- function addToProfileTagInbox($plist)
- {
- $ptagi = Profile_tag_inbox::pkeyGet(array('profile_tag_id' => $plist->id,
- 'notice_id' => $this->id));
-
- if (empty($ptagi)) {
-
- $ptagi = new Profile_tag_inbox();
-
- $ptagi->query('BEGIN');
- $ptagi->profile_tag_id = $plist->id;
- $ptagi->notice_id = $this->id;
- $ptagi->created = $this->created;
-
- $result = $ptagi->insert();
- if (!$result) {
- common_log_db_error($ptagi, 'INSERT', __FILE__);
- // TRANS: Server exception thrown when saving profile_tag inbox fails.
- throw new ServerException(_('Problem saving profile_tag inbox.'));
- }
-
- $ptagi->query('COMMIT');
-
- self::blow('profile_tag:notice_ids:%d', $ptagi->profile_tag_id);
- }
-
- return true;
- }
-
/**
* Save reply records indicating that this notice needs to be
* delivered to the local users with the given URIs.
return $stream->getNotices($offset, $limit, $since_id, $max_id);
}
- /**
- * Query notices by users associated with this tag from the database.
- *
- * @param integer $offset offset
- * @param integer $limit maximum no of results
- * @param integer $since_id=null since this id
- * @param integer $max_id=null maximum id in result
- *
- * @return array array of notice ids.
- */
-
- function _streamDirect($offset, $limit, $since_id, $max_id)
- {
- $inbox = new Profile_tag_inbox();
-
- $inbox->profile_tag_id = $this->id;
-
- $inbox->selectAdd();
- $inbox->selectAdd('notice_id');
-
- if ($since_id != 0) {
- $inbox->whereAdd('notice_id > ' . $since_id);
- }
-
- if ($max_id != 0) {
- $inbox->whereAdd('notice_id <= ' . $max_id);
- }
-
- $inbox->orderBy('notice_id DESC');
-
- if (!is_null($offset)) {
- $inbox->limit($offset, $limit);
- }
-
- $ids = array();
-
- if ($inbox->find()) {
- while ($inbox->fetch()) {
- $ids[] = $inbox->notice_id;
- }
- }
-
- return $ids;
- }
-
/**
* Get subscribers (local and remote) to this people tag
* Order by reverse chronology
return $count;
}
+ /**
+ * get the cached number of profiles subscribed to this
+ * people tag, re-count if the argument is true.
+ *
+ * @param boolean $recount whether to ignore cache
+ *
+ * @return integer count
+ */
+
+ function blowNoticeStreamCache($all=false)
+ {
+ self::blow('profile_list:notice_ids:%d', $this->id);
+ if ($all) {
+ self::blow('profile_list:notice_ids:%d;last', $this->id);
+ }
+ }
+
/**
* get the Profile_list object by the
* given tagger and with given tag
+++ /dev/null
-<?php
-/**
- * Table Definition for profile_tag_inbox
- */
-
-class Profile_tag_inbox extends Memcached_DataObject
-{
- ###START_AUTOCODE
- /* the code below is auto generated do not remove the above tag */
-
- public $__table = 'profile_tag_inbox'; // table name
- public $profile_tag_id; // int(4) primary_key not_null
- public $notice_id; // int(4) primary_key not_null
- public $created; // datetime() not_null
-
- /* Static get */
-
- function staticGet($k,$v=NULL) { return Memcached_DataObject::staticGet('Profile_tag_inbox',$k,$v); }
-
- /* the code above is auto generated do not remove the tag below */
- ###END_AUTOCODE
-
- function pkeyGet($kv)
- {
- return Memcached_DataObject::pkeyGet('Profile_tag_inbox', $kv);
- }
-}
tagger = K
tag = K
-[profile_tag_inbox]
-profile_tag_id = 129
-notice_id = 129
-created = 142
-
-[profile_tag_inbox__keys]
-profile_tag_id = K
-notice_id = K
-
[profile_tag_subscription]
profile_tag_id = 129
profile_id = 129
[notice]
profile_id = profile:id
reply_to = notice:id
+profile_id = profile_tag:tagged
[reply]
notice_id = notice:id
[profile_list]
tagger = profile:id
-[profile_tag_inbox]
-profile_tag_id = profile_list:id
-notice_id = notice:id
-
[profile_tag_subscription]
profile_tag_id = profile_list:id
profile_id = profile:id
*
* @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;
}
}
+ 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));
}
--- /dev/null
+<?php
+/**
+ * StatusNet, the distributed open-source microblogging tool
+ *
+ * Lists a user has created
+ *
+ * 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 Widget
+ * @package StatusNet
+ * @author Shashi Gowda <connect2shashi@gmail.com>
+ * @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 <connect2shashi@gmail.com>
+ * @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);
+ }
+}
{
// TRANS: Form legend for people tag edit form.
// TRANS: %s is a people tag.
- $this->out->element('legend', null, sprintf(_('Edit people tag %s'), $this->peopletag->tag));
+ $this->out->element('legend', null, sprintf(_('Edit list %s'), $this->peopletag->tag));
}
/**
$desclimit = Profile_list::maxDescription();
if ($desclimit == 0) {
// TRANS: Field title for description of people tag.
- $descinstr = _('Describe the people tag or topic.');
+ $descinstr = _('Describe the list or topic.');
} else {
// TRANS: Field title for description of people tag.
// TRANS: %d is the maximum number of characters for the description.
- $descinstr = sprintf(_m('Describe the people tag or topic in %d character.',
- 'Describe the people tag or topic in %d characters.',
+ $descinstr = sprintf(_m('Describe the list or topic in %d character.',
+ 'Describe the list or topic in %d characters.',
$desclimit),
$desclimit);
}
'submit',
'delete',
// TRANS: Button title to delete a people tag.
- _('Delete this people tag.'));
+ _('Delete this list.'));
}
function showProfileList()
$this->out->menuItem(common_local_url('showprofiletag', array('tagger' => $user_profile->nickname,
'tag' => $tag->tag)),
// TRANS: Menu item in people tag navigation panel.
- _m('MENU','People tag'),
+ _m('MENU','List'),
// TRANS: Menu item title in people tag navigation panel.
// TRANS: %1$s is a tag, %2$s is a nickname.
- sprintf(_('%1$s tag by %2$s.'), $tag->tag,
+ sprintf(_('%1$s list by %2$s.'), $tag->tag,
(($user_profile && $user_profile->fullname) ? $user_profile->fullname : $nickname)),
$action == 'showprofiletag', 'nav_timeline_peopletag');
$this->out->menuItem(common_local_url('peopletagged', array('tagger' => $user->nickname,
'tag' => $tag->tag)),
// TRANS: Menu item in people tag navigation panel.
- _m('MENU','Tagged'),
+ _m('MENU','Listed'),
// TRANS: Menu item title in people tag navigation panel.
// TRANS: %1$s is a tag, %2$s is a nickname.
- sprintf(_('%1$s tag by %2$s.'), $tag->tag,
+ sprintf(_('%1$s list by %2$s.'), $tag->tag,
(($user_profile && $user_profile->fullname) ? $user_profile->fullname : $nickname)),
$action == 'peopletagged', 'nav_peopletag_tagged');
_m('MENU','Subscribers'),
// TRANS: Menu item title in people tag navigation panel.
// TRANS: %1$s is a tag, %2$s is a nickname.
- sprintf(_('Subscribers to %1$s tag by %2$s.'), $tag->tag,
+ sprintf(_('Subscribers to %1$s list by %2$s.'), $tag->tag,
(($user_profile && $user_profile->fullname) ? $user_profile->fullname : $nickname)),
$action == 'peopletagsubscribers', 'nav_peopletag_subscribers');
_m('MENU','Edit'),
// TRANS: Menu item title in people tag navigation panel.
// TRANS: %s is a tag.
- sprintf(_('Edit %s tag by you.'), $tag->tag,
+ sprintf(_('Edit %s list by you.'), $tag->tag,
(($user_profile && $user_profile->fullname) ? $user_profile->fullname : $nickname)),
$action == 'editpeopletag', 'nav_peopletag_edit');
}
common_local_url('editpeopletag', array('tagger' => $this->profile->nickname,
'tag' => $this->peopletag->tag)),
// TRANS: Title for link to edit people tag settings.
- 'title' => _('Edit people tag settings.')),
+ 'title' => _('Edit list settings.')),
// TRANS: Text for link to edit people tag settings.
_('Edit'));
$this->out->elementEnd('li');
--- /dev/null
+<?php
+/**
+ * StatusNet, the distributed open-source microblogging tool
+ *
+ * Tabset for a particular list
+ *
+ * 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 Action
+ * @package StatusNet
+ * @author Shashi Gowda <connect2shashi@gmail.com>
+ * @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);
+}
+
+require_once INSTALLDIR.'/lib/widget.php';
+
+/**
+ * Tabset for a group
+ *
+ * Shows a group of tabs for a particular user group
+ *
+ * @category Output
+ * @package StatusNet
+ * @author Shashi Gowda <connect2shashi@gmail.com>
+ * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
+ * @link http://status.net/
+ *
+ * @see HTMLOutputter
+ */
+class PeopletagNav extends Menu
+{
+ var $group = null;
+
+ /**
+ * Construction
+ *
+ * @param Action $action current action, used for output
+ */
+ function __construct($action=null, $profile=null)
+ {
+ parent::__construct($action);
+ $this->profile = $profile;
+ }
+
+ /**
+ * Show the menu
+ *
+ * @return void
+ */
+ function show()
+ {
+ $action_name = $this->action->trimmed('action');
+ $nickname = $this->profile->nickname;
+
+ $this->out->elementStart('ul', array('class' => 'nav'));
+ if (Event::handle('StartPeopletagGroupNav', array($this))) {
+ $this->out->menuItem(common_local_url('peopletagsubscriptions', array('nickname' =>
+ $nickname)),
+ // TRANS: Menu item in the group navigation page.
+ _m('MENU','List Subscriptions'),
+ // TRANS: Tooltip for menu item in the group navigation page.
+ // TRANS: %s is the nickname of the group.
+ sprintf(_m('TOOLTIP','Lists subscribed to by %s'), $nickname),
+ $action_name == 'peopletagsubscriptions',
+ 'nav_list_group');
+ $this->out->menuItem(common_local_url('peopletagsforuser', array('nickname' =>
+ $nickname)),
+ // TRANS: Menu item in the group navigation page.
+ sprintf(_m('MENU','Lists with %s'), $nickname),
+ // TRANS: Tooltip for menu item in the group navigation page.
+ // TRANS: %s is the nickname of the group.
+ sprintf(_m('TOOLTIP','Lists with %s'), $nickname),
+ $action_name == 'peopletagsforuser',
+ 'nav_lists_with');
+ $this->out->menuItem(common_local_url('peopletagsbyuser', array('nickname' =>
+ $nickname)),
+ // TRANS: Menu item in the group navigation page.
+ sprintf(_m('MENU','Lists by %s'), $nickname),
+ // TRANS: Tooltip for menu item in the group navigation page.
+ // TRANS: %s is the nickname of the group.
+ sprintf(_m('TOOLTIP','Lists by %s'), $nickname),
+ $action_name == 'peopletagsbyuser',
+ 'nav_lists_by');
+ Event::handle('EndGroupGroupNav', array($this));
+ }
+ $this->out->elementEnd('ul');
+ }
+}
*/
class RawPeopletagNoticeStream extends NoticeStream
{
- protected $profile_tag;
+ protected $profile_list;
- function __construct($profile_tag)
+ function __construct($profile_list)
{
- $this->profile_tag = $profile_tag;
+ $this->profile_list = $profile_list;
}
+ /**
+ * Query notices by users associated with this tag from the database.
+ *
+ * @param integer $offset offset
+ * @param integer $limit maximum no of results
+ * @param integer $since_id=null since this id
+ * @param integer $max_id=null maximum id in result
+ *
+ * @return array array of notice ids.
+ */
+
function getNoticeIds($offset, $limit, $since_id, $max_id)
{
- $inbox = new Profile_tag_inbox();
+ $notice = new Notice();
- $inbox->profile_tag_id = $this->profile_tag->id;
+ $notice->selectAdd();
+ $notice->selectAdd('notice.id');
- $inbox->selectAdd();
- $inbox->selectAdd('notice_id');
+ $ptag = new Profile_tag();
+ $ptag->tag = $this->profile_list->tag;
+ $ptag->tagger = $this->profile_list->tagger;
+ $notice->joinAdd($ptag);
- Notice::addWhereSinceId($inbox, $since_id, 'notice_id');
- Notice::addWhereMaxId($inbox, $max_id, 'notice_id');
+ if ($since_id != 0) {
+ $notice->whereAdd('notice.id > ' . $since_id);
+ }
- $inbox->orderBy('created DESC, notice_id DESC');
+ if ($max_id != 0) {
+ $notice->whereAdd('notice.id <= ' . $max_id);
+ }
+
+ $notice->orderBy('notice.id DESC');
if (!is_null($offset)) {
- $inbox->limit($offset, $limit);
+ $notice->limit($offset, $limit);
}
$ids = array();
-
- if ($inbox->find()) {
- while ($inbox->fetch()) {
- $ids[] = $inbox->notice_id;
+ if ($notice->find()) {
+ while ($notice->fetch()) {
+ $ids[] = $notice->id;
}
}
function title()
{
// TRANS: Title for section contaning people tags with the most subscribers.
- return _('People tags with most subscribers');
+ return _('Lists with most subscribers');
}
function divId()
class PeopletagSectionItem extends PeopletagListItem
{
+
function showStart()
{
}
common_log(LOG_WARNING, "Trying to show missing peopletag; skipping.");
return;
}
+ $mode = ($this->peopletag->private) ? 'private' : 'public';
$this->out->elementStart('tr');
- $this->out->elementStart('td', 'peopletag');
+ $this->out->elementStart('td', 'peopletag mode-' . $mode);
$this->showPeopletag();
$this->out->elementEnd('td');
{
// TRANS: Tag summary. %1$d is the number of users tagged with the tag,
// TRANS: %2$d is the number of subscribers to the tag.
- $title = sprintf(_('Tagged: %1$d Subscribers: %2$d'),
+ $title = sprintf(_('Listed: %1$d Subscribers: %2$d'),
$this->peopletag->taggedCount(),
$this->peopletag->subscriberCount());
$this->out->elementStart('span', 'entry-title tag');
+
$this->out->element('a',
array('rel' => 'bookmark',
'href' => $this->url(),
function title()
{
- $name = $this->profile->getBestName();
- if ($this->profile->id == common_current_user()->id) {
- $name = 'you';
+ $user = common_current_user();
+
+ if (!empty($user) && $this->profile->id == $user->id) {
+ return sprintf(_('Lists with you'));
}
- // TRANS: Title for page that displays which people tags a user has been tagged with.
+ // TRANS: Title for page that displays
+ // which people tags a user has been tagged with.
// TRANS: %s is a profile name.
- return sprintf(_('People tags for %s'), $name);
+ return sprintf(_('Lists with %s'), $this->profile->getBestName());
}
function link()
class PeopletagSubscriptionsSection extends PeopletagSection
{
var $profile=null;
+ var $ptags=null;
function __construct($out, Profile $profile)
{
parent::__construct($out);
$this->profile = $profile;
- }
- function getPeopletags()
- {
$limit = PEOPLETAGS_PER_SECTION+1;
$offset = 0;
- $ptags = $this->profile->getTagSubscriptions($offset, $limit);
+ $this->ptags = $this->profile->getTagSubscriptions($offset, $limit);
+ }
- return $ptags;
+ function getPeopletags()
+ {
+ return $this->ptags;
}
function title()
{
// TRANS: Title for page that displays people tags a user has subscribed to.
- return _('People tag subscriptions');
+ return _('List subscriptions');
}
function link()
// TRANS: Replaces %s in '%s\'s favorite notices'. (Yes, we know we need to fix this.)
($user_profile) ? $name : _m('FIXME','User')),
$mine && $action =='showfavorites', 'nav_timeline_favorites');
- $this->out->menuItem(common_local_url('peopletagsbyuser', array('nickname' =>
- $nickname)),
- // TRANS: Menu item in personal group navigation menu.
- _m('MENU','People tags'),
- // @todo i18n FIXME: Need to make this two messages.
- // TRANS: Menu item title in personal group navigation menu.
- // TRANS: %s is a username.
- sprintf(_('People tags by %s'),
- // TRANS: Replaces %s in 'People tags by %s'. (Yes, we know we need to fix this.)
- ($user_profile) ? $name : _('User')),
- in_array($action, array('peopletagsbyuser', 'peopletagsforuser')),
- 'nav_timeline_peopletags');
$cur = common_current_user();
$this->showSubscriptions();
$this->showSubscribers();
$this->showGroups();
- $this->showPeopletagSubs();
- $this->showPeopletags();
+ $this->showListsFor();
+ $this->showListSubscriptions();
$this->showStatistics();
}
$this->elementEnd('div');
}
- function showPeopletagSubs()
+ function showListsFor()
{
- $user = common_current_user();
- if (!empty($user) && $this->profile->id == $user->id) {
- if (Event::handle('StartShowPeopletagSubscriptionsSection', array($this))) {
+ if (Event::handle('StartShowListsForSection', array($this))) {
- $profile = $user->getProfile();
- $section = new PeopletagSubscriptionsSection($this, $profile);
- $section->show();
+ $section = new PeopletagsForUserSection($this, $this->profile);
+ $section->show();
- Event::handle('EndShowPeopletagSubscriptionsSection', array($this));
- }
+ Event::handle('EndShowListsForSection', array($this));
}
}
- function showPeopletags()
+ function showListSubscriptions()
{
- if (Event::handle('StartShowPeopletagsSection', array($this))) {
+ if (Event::handle('StartShowListSubscriptionsSection', array($this))) {
- $section = new PeopletagsForUserSection($this, $this->profile);
+ $section = new PeopletagSubscriptionsSection($this, $this->profile);
$section->show();
- Event::handle('EndShowPeopletagsSection', array($this));
+ Event::handle('EndShowListSubscriptionsSection', array($this));
}
}
// TRANS: Menu item title in search group navigation panel.
_('Recent tags'), $this->actionName == 'publictagcloud', 'nav_recent-tags');
- // TRANS: Menu item in search group navigation panel.
- $this->out->menuItem(common_local_url('publicpeopletagcloud'), _m('MENU','People tags'),
- // TRANS: Menu item title in search group navigation panel.
- _('People tags'), in_array($this->actionName, array('publicpeopletagcloud',
- 'peopletag', 'selftag')), 'nav_people-tags');
-
if (count(common_config('nickname', 'featured')) > 0) {
// TRANS: Menu item in search group navigation panel.
$this->out->menuItem(common_local_url('featured'), _m('MENU','Featured'),
$this->user->nickname),
$action == 'usergroups',
'nav_usergroups');
- $this->out->menuItem(common_local_url('peopletagsbyuser',
+ $this->out->menuItem(common_local_url('peopletagsubscriptions',
array('nickname' =>
$this->user->nickname)),
// TRANS: Menu item title in local navigation menu.
- _m('MENU','People tags'),
+ _m('MENU','Lists'),
// TRANS: Menu item title in local navigation menu.
// TRANS: %s is a user nickname.
- sprintf(_('People tags by %s.'),
+ sprintf(_('List subscriptions by %s.'),
$this->user->nickname),
- in_array($action, array('peopletagsbyuser', 'peopletagsforuser')),
+ in_array($action, array('peopletagsbyuser', 'peopletagsubscriptions', 'peopletagsforuser')),
'nav_timeline_peopletags');
if (common_config('invite', 'enabled') && !is_null($cur) && $this->user->id === $cur->id) {
if ($oprofile) {
if (!$oprofile->subscribe()) {
// TRANS: Exception thrown when setup of remote people tag subscription fails.
- throw new Exception(_m('Could not set up remote people tag subscription.'));
+ throw new Exception(_m('Could not set up remote list subscription.'));
}
$sub = $user->getProfile();
$act->title = _m('TITLE','Follow list');
// TRANS: Success message for remote list follow through OStatus.
// TRANS: %1$s is the subscriber name, %2$s the prople tag, %3$s is the tagger's name.
- $act->content = sprintf(_m("%1$s is now following people tagged %2$s by %3$s."),
+ $act->content = sprintf(_m("%1$s is now following people listed in %2$s by %3$s."),
$sub->getBestName(),
$oprofile->getBestName(),
$tagger->getBestName());
common_date_iso8601(time()));
$act->time = time();
$act->title = _m('TITLE','Tag');
- $act->content = sprintf(_m('%1$s tagged %2$s in the list %3$s.'),
+ $act->content = sprintf(_m('%1$s listed %2$s in the list %3$s.'),
$tagger->getBestName(),
$tagged->getBestName(),
$plist->getBestName());
function getInstructions()
{
- return _m('You can subscribe to people tags from other supported sites. Paste the tag\'s profile URI below:');
+ return _m('You can subscribe to lists from other supported sites. Paste the lists\'s URI below:');
}
function selfLink()
$this->peopletag = Profile_list::staticGet('id', $id);
if (empty($this->peopletag)) {
- $this->clientError(_m('No such people tag.'));
+ $this->clientError(_m('No such list.'));
}
$oprofile = Ostatus_profile::staticGet('peopletag_id', $id);
if (!empty($oprofile)) {
- $this->clientError(_m('Cannot accept remote posts for a remote people tag.'));
+ $this->clientError(_m('Cannot accept remote posts for a remote list.'));
}
return true;
$this->clientError(_m('Cannot read profile to set up profile tag subscription.'));
}
if ($oprofile->isGroup()) {
- $this->clientError(_m('Groups cannot subscribe to people tags.'));
+ $this->clientError(_m('Groups cannot subscribe to lists.'));
}
common_log(LOG_INFO, "Remote profile {$oprofile->uri} subscribing to local peopletag ".$this->peopletag->getBestName());
try {
Profile_tag_subscription::add($this->peopletag, $profile);
} catch (Exception $e) {
- $this->serverError(sprintf(_m('Could not subscribe remote user %1$s to people tag %2$s.'),
+ $this->serverError(sprintf(_m('Could not subscribe remote user %1$s to list %2$s.'),
$oprofile->uri, $this->peopletag->getBestName()));
}
}
{
$oprofile = $this->ensureProfile();
if (!$oprofile) {
- $this->clientError(_m('Cannot read profile to cancel people tag membership.'));
+ $this->clientError(_m('Cannot read profile to cancel list membership.'));
}
if ($oprofile->isGroup()) {
- $this->clientError(_m('Groups cannot subscribe to people tags.'));
+ $this->clientError(_m('Groups cannot subscribe to lists.'));
}
common_log(LOG_INFO, "Remote profile {$oprofile->uri} unsubscribing from local peopletag ".$this->peopletag->getBestName());
Profile_tag_subscription::remove($this->peopletag->tagger, $this->peopletag->tag, $profile->id);
} catch (Exception $e) {
- $this->serverError(sprintf(_m('Could not remove remote user %1$s from people tag %2$s.'),
+ $this->serverError(sprintf(_m('Could not remove remote user %1$s from list %2$s.'),
$oprofile->uri, $this->peopletag->getBestName()));
return;
}