X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=actions%2Fshowprofiletag.php;h=f99c9155e4c2f4c089656b76daddea6004a2ed7f;hb=3255e2e1b81ce6d8d867e924eeacff2c9e53d706;hp=f33021bf6245f748bbc5dee628471921cde31683;hpb=e47a2a3bcae95609b277983357cec8e6f713216b;p=quix0rs-gnu-social.git diff --git a/actions/showprofiletag.php b/actions/showprofiletag.php index f33021bf62..f99c9155e4 100644 --- a/actions/showprofiletag.php +++ b/actions/showprofiletag.php @@ -22,98 +22,31 @@ * @link http://status.net */ -if (!defined('STATUSNET') && !defined('LACONICA')) { - exit(1); -} - -require_once INSTALLDIR.'/lib/profileminilist.php'; -require_once INSTALLDIR.'/lib/peopletaglist.php'; -require_once INSTALLDIR.'/lib/noticelist.php'; -require_once INSTALLDIR.'/lib/feedlist.php'; +if (!defined('GNUSOCIAL')) { exit(1); } -class ShowprofiletagAction extends Action +class ShowprofiletagAction extends ShowstreamAction { - var $notice, $tagger, $peopletag, $userProfile; + var $notice, $peopletag; - function isReadOnly($args) + protected function doStreamPreparation() { - return true; - } - - function prepare($args) - { - parent::prepare($args); - - $tagger_arg = $this->arg('tagger'); - $tag_arg = $this->arg('tag'); - $tagger = common_canonical_nickname($tagger_arg); - $tag = common_canonical_tag($tag_arg); - - // Permanent redirect on non-canonical nickname - - if ($tagger_arg != $tagger || $tag_arg != $tag) { - $args = array('tagger' => $nickname, 'tag' => $tag); - if ($this->page != 1) { - $args['page'] = $this->page; - } - common_redirect(common_local_url('showprofiletag', $args), 301); - return false; + $tag = common_canonical_tag($this->arg('tag')); + try { + $this->peopletag = Profile_list::getByPK(array('tagger' => $this->target->getID(), 'tag' => $tag)); + } catch (NoResultException $e) { + // TRANS: Client error displayed trying to reference a non-existing list. + throw new ClientException('No such list.'); } - if (!$tagger) { - // TRANS: Client error displayed when a tagger is expected but not provided. - $this->clientError(_('No tagger.'), 404); - return false; + if ($this->peopletag->private && !$this->peopletag->getTagger()->sameAs($this->scoped)) { + // TRANS: Client error displayed trying to reference a non-existing list. + throw new AuthorizationException('You do not have permission to see this list.'); } - - $user = User::staticGet('nickname', $tagger); - - if (!$user) { - // TRANS: Client error displayed trying to perform an action related to a non-existing user. - $this->clientError(_('No such user.'), 404); - return false; - } - - $this->tagger = $user->getProfile(); - $this->peopletag = Profile_list::pkeyGet(array('tagger' => $user->id, 'tag' => $tag)); - - $current = common_current_user(); - $can_see = !empty($this->peopletag) && (!$this->peopletag->private || - ($this->peopletag->private && $this->peopletag->tagger === $current->id)); - - if (!$can_see) { - // TRANS: Client error displayed trying to reference a non-existing people tag. - $this->clientError(_('No such people tag.'), 404); - return false; - } - - $this->page = ($this->arg('page')) ? ($this->arg('page')+0) : 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). - $this->serverError(_('No such page.'), $code = 404); - } - - return true; } - function handle($args) + public function getStream() { - parent::handle($args); - - if (!$this->peopletag) { - // TRANS: Client error displayed trying to perform an action related to a non-existing user. - $this->clientError(_('No such user.')); - return; - } - - $this->showPage(); + return new PeopletagNoticeStream($this->peopletag, $this->scoped); } function title() @@ -121,7 +54,7 @@ class ShowprofiletagAction extends Action if ($this->page > 1) { if($this->peopletag->private) { // TRANS: Title for private list timeline. - // TRANS: %1$s is a people tag, %2$s is a page number. + // TRANS: %1$s is a list, %2$s is a page number. return sprintf(_('Private timeline for %1$s list by you, page %2$d'), $this->peopletag->tag, $this->page); } @@ -129,16 +62,16 @@ class ShowprofiletagAction extends Action $current = common_current_user(); if (!empty($current) && $current->id == $this->peopletag->tagger) { // TRANS: Title for public list timeline where the viewer is the tagger. - // TRANS: %1$s is a people tag, %2$s is a page number. + // TRANS: %1$s is a list, %2$s is a page number. return sprintf(_('Timeline for %1$s list by you, page %2$d'), $this->peopletag->tag, $this->page); } // TRANS: Title for private list timeline. - // TRANS: %1$s is a people tag, %2$s is the tagger's nickname, %3$d is a page number. + // TRANS: %1$s is a list, %2$s is the tagger's nickname, %3$d is a page number. return sprintf(_('Timeline for %1$s list by %2$s, page %3$d'), $this->peopletag->tag, - $this->tagger->nickname, + $this->target->getNickname(), $this->page ); } else { @@ -161,7 +94,7 @@ class ShowprofiletagAction extends Action // TRANS: %1$s is a list, %2$s is the tagger's nickname. return sprintf(_('Timeline for %1$s list by %2$s'), $this->peopletag->tag, - $this->tagger->nickname + $this->target->getNickname() ); } } @@ -169,21 +102,32 @@ class ShowprofiletagAction extends Action function getFeeds() { #XXX: make these actually work - return array(new Feed(Feed::RSS2, + return array(new Feed(Feed::JSON, common_local_url( 'ApiTimelineList', array( - 'user' => $this->tagger->id, + 'user' => $this->target->id, + 'id' => $this->peopletag->id, + 'format' => 'as' + ) + ), + // TRANS: Feed title. + // TRANS: %s is tagger's nickname. + sprintf(_('Feed for friends of %s (Activity Streams JSON)'), $this->target->getNickname())), + new Feed(Feed::RSS2, + common_local_url( + 'ApiTimelineList', array( + 'user' => $this->target->id, 'id' => $this->peopletag->id, 'format' => 'rss' ) ), // TRANS: Feed title. // TRANS: %s is tagger's nickname. - sprintf(_('Feed for friends of %s (RSS 2.0)'), $this->tagger->nickname)), + sprintf(_('Feed for friends of %s (RSS 2.0)'), $this->target->getNickname())), new Feed(Feed::ATOM, common_local_url( 'ApiTimelineList', array( - 'user' => $this->tagger->id, + 'user' => $this->target->id, 'id' => $this->peopletag->id, 'format' => 'atom' ) @@ -191,7 +135,7 @@ class ShowprofiletagAction extends Action // TRANS: Feed title. // TRANS: %1$s is a list, %2$s is tagger's nickname. sprintf(_('Feed for %1$s list by %2$s (Atom)'), - $this->peopletag->tag, $this->tagger->nickname + $this->peopletag->tag, $this->target->getNickname() ) ) ); @@ -209,16 +153,15 @@ class ShowprofiletagAction extends Action // TRANS: %1$s is a list, %2$s is a tagger's nickname. $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) . ' '; + $this->target->getNickname()) . ' '; if (common_logged_in()) { - $current_user = common_current_user(); - if ($this->tagger->id == $current_user->id) { - // TRANS: Additional empty list message for people tag timeline for currently logged in user tagged tags. + if ($this->target->sameAs($this->scoped)) { + // TRANS: Additional empty list message for list timeline for currently logged in user tagged tags. $message .= _('Try tagging more people.'); } } else { - // TRANS: Additional empty list message for people tag timeline. + // TRANS: Additional empty list message for list timeline. // TRANS: This message contains Markdown links in the form [description](link). $message .= _('Why not [register an account](%%%%action.register%%%%) and start following this timeline!'); } @@ -228,23 +171,22 @@ class ShowprofiletagAction extends Action $this->elementEnd('div'); } - function showContent() + protected function showContent() { $this->showPeopletag(); - $this->showNotices(); + parent::showContent(); } function showPeopletag() { - $cur = common_current_user(); - $tag = new Peopletag($this->peopletag, $cur, $this); + $tag = new Peopletag($this->peopletag, $this->scoped, $this); $tag->show(); } function showNotices() { if (Event::handle('StartShowProfileTagContent', array($this))) { - $nl = new ThreadedNoticeList($this->notice, $this, $this->userProfile); + $nl = new PrimaryNoticeList($this->notice, $this, array('show_n'=>NOTICES_PER_PAGE)); $cnt = $nl->show(); @@ -257,7 +199,7 @@ class ShowprofiletagAction extends Action $this->page, 'showprofiletag', array('tag' => $this->peopletag->tag, - 'tagger' => $this->tagger->nickname) + 'nickname' => $this->target->getNickname()) ); Event::handle('EndShowProfileTagContent', array($this)); @@ -273,11 +215,6 @@ class ShowprofiletagAction extends Action # $this->showStatistics(); } - function showPageTitle() - { - $this->element('h1', null, $this->title()); - } - function showTagged() { $profile = $this->peopletag->getTagged(0, PROFILES_PER_MINILIST + 1); @@ -304,10 +241,10 @@ class ShowprofiletagAction extends Action if ($cnt > PROFILES_PER_MINILIST) { $this->elementStart('p'); $this->element('a', array('href' => common_local_url('taggedprofiles', - array('nickname' => $this->tagger->nickname, + array('nickname' => $this->target->getNickname(), 'profiletag' => $this->peopletag->tag)), 'class' => 'more'), - // TRANS: Link for more "People tagged x by a user" + // TRANS: Link for more "People in list x by a user" // TRANS: if there are more than the mini list's maximum. _('Show all')); $this->elementEnd('p'); @@ -339,40 +276,10 @@ class ShowprofiletagAction extends Action } } - if ($cnt > PROFILES_PER_MINILIST) { - $this->elementStart('p'); - $this->element('a', array('href' => common_local_url('profiletagsubscribers', - array('nickname' => $this->tagger->nickname, - 'profiletag' => $this->peopletag->tag)), - 'class' => 'more'), - // TRANS: Link for more "People following tag x" - // TRANS: if there are more than the mini list's maximum. - _('All subscribers')); - $this->elementEnd('p'); - } + // FIXME: link to full list Event::handle('EndShowProfileTagSubscribersMiniList', array($this)); } $this->elementEnd('div'); } } - -class Peopletag extends PeopletagListItem -{ - function showStart() - { - $mode = $this->peopletag->private ? 'private' : 'public'; - $this->out->elementStart('div', array('class' => 'hentry peopletag peopletag-profile mode-'.$mode, - 'id' => 'peopletag-' . $this->peopletag->id)); - } - - function showEnd() - { - $this->out->elementEnd('div'); - } - - function showAvatar() - { - parent::showAvatar(AVATAR_PROFILE_SIZE); - } -}