2008-05-08 01:48:07 +09:00
< ? php
2009-01-20 01:56:41 +09:00
/**
2009-08-26 07:12:20 +09:00
* StatusNet , the distributed open - source microblogging tool
2008-05-18 04:24:47 +09:00
*
2009-01-20 01:56:41 +09:00
* User profile page
*
* PHP version 5
*
* LICENCE : This program is free software : you can redistribute it and / or modify
2008-05-15 04:26:48 +09:00
* 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 .
2008-05-18 04:24:47 +09:00
*
2008-05-15 04:26:48 +09:00
* 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 .
2008-05-18 04:24:47 +09:00
*
2008-05-15 04:26:48 +09:00
* 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 />.
2009-01-20 01:56:41 +09:00
*
* @ category Personal
2009-08-26 07:12:20 +09:00
* @ package StatusNet
2009-08-26 07:19:04 +09:00
* @ author Evan Prodromou < evan @ status . net >
* @ author Sarven Capadisli < csarven @ status . net >
2009-08-26 07:12:20 +09:00
* @ copyright 2008 - 2009 StatusNet , Inc .
2009-01-20 01:56:41 +09:00
* @ license http :// www . fsf . org / licensing / licenses / agpl - 3.0 . html GNU Affero General Public License version 3.0
2009-08-26 07:16:46 +09:00
* @ link http :// status . net /
2008-05-15 04:26:48 +09:00
*/
2015-03-12 23:53:59 +09:00
if ( ! defined ( 'GNUSOCIAL' )) { exit ( 1 ); }
2008-05-18 04:10:34 +09:00
2009-01-20 01:56:41 +09:00
/**
* User profile page
*
* When I created this page , " show stream " seemed like the best name for it .
* Now , it seems like a really bad name .
*
* It shows a stream of the user ' s posts , plus lots of profile info , links
* to subscriptions and stuff , etc .
*
* @ category Personal
2009-08-26 07:12:20 +09:00
* @ package StatusNet
2009-08-26 07:19:04 +09:00
* @ author Evan Prodromou < evan @ status . net >
2009-01-20 01:56:41 +09:00
* @ license http :// www . fsf . org / licensing / licenses / agpl - 3.0 . html GNU Affero General Public License version 3.0
2009-08-26 07:16:46 +09:00
* @ link http :// status . net /
2009-01-20 01:56:41 +09:00
*/
2015-07-05 02:48:35 +09:00
class ShowstreamAction extends NoticestreamAction
2008-12-24 04:49:23 +09:00
{
2015-07-10 19:34:06 +09:00
protected $target = null ;
2011-09-19 01:33:35 +09:00
2015-06-06 04:24:41 +09:00
protected function doPreparation ()
{
// showstream requires a nickname
2015-07-10 19:34:06 +09:00
$nickname_arg = $this -> trimmed ( 'nickname' );
2015-06-06 04:24:41 +09:00
$nickname = common_canonical_nickname ( $nickname_arg );
// Permanent redirect on non-canonical nickname
if ( $nickname_arg != $nickname ) {
$args = array ( 'nickname' => $nickname );
if ( $this -> arg ( 'page' ) && $this -> arg ( 'page' ) != 1 ) {
$args [ 'page' ] = $this -> arg [ 'page' ];
}
common_redirect ( common_local_url ( $this -> getActionName (), $args ), 301 );
}
2015-07-10 19:34:06 +09:00
try {
$user = User :: getByNickname ( $nickname );
} catch ( NoSuchUserException $e ) {
2015-06-06 04:24:41 +09:00
$group = Local_group :: getKV ( 'nickname' , $nickname );
if ( $group instanceof Local_group ) {
common_redirect ( $group -> getProfile () -> getUrl ());
}
2015-07-10 19:34:06 +09:00
// No user nor group found, throw the NoSuchUserException again
throw $e ;
2015-06-06 04:24:41 +09:00
}
2015-07-10 19:34:06 +09:00
$this -> target = $user -> getProfile ();
2015-06-06 04:24:41 +09:00
}
2015-06-26 03:13:27 +09:00
public function getStream ()
2011-09-19 01:33:35 +09:00
{
if ( empty ( $this -> tag )) {
2015-04-23 04:22:02 +09:00
$stream = new ProfileNoticeStream ( $this -> target , $this -> scoped );
2011-09-19 01:33:35 +09:00
} else {
2015-04-23 04:22:02 +09:00
$stream = new TaggedProfileNoticeStream ( $this -> target , $this -> tag , $this -> scoped );
2011-09-19 01:33:35 +09:00
}
2015-06-06 04:49:34 +09:00
return $stream ;
2011-09-19 01:33:35 +09:00
}
2009-01-23 17:45:48 +09:00
2009-01-20 01:56:41 +09:00
function title ()
2008-12-24 04:33:23 +09:00
{
2015-04-23 04:22:02 +09:00
$base = $this -> target -> getFancyName ();
2009-05-19 06:18:57 +09:00
if ( ! empty ( $this -> tag )) {
2010-11-03 06:20:06 +09:00
if ( $this -> page == 1 ) {
2011-08-15 22:57:36 +09:00
// TRANS: Page title showing tagged notices in one user's timeline.
2011-03-24 20:09:50 +09:00
// TRANS: %1$s is the username, %2$s is the hash tag.
2011-04-01 05:43:57 +09:00
return sprintf ( _ ( 'Notices by %1$s tagged %2$s' ), $base , $this -> tag );
2010-11-03 06:20:06 +09:00
} else {
2011-08-15 22:57:36 +09:00
// TRANS: Page title showing tagged notices in one user's timeline.
2011-02-17 08:39:53 +09:00
// TRANS: %1$s is the username, %2$s is the hash tag, %3$d is the page number.
2011-04-01 05:43:57 +09:00
return sprintf ( _ ( 'Notices by %1$s tagged %2$s, page %3$d' ), $base , $this -> tag , $this -> page );
2010-11-03 06:20:06 +09:00
}
2009-01-20 01:56:41 +09:00
} else {
2010-11-03 06:20:06 +09:00
if ( $this -> page == 1 ) {
return $base ;
} else {
2011-08-15 22:57:36 +09:00
// TRANS: Extended page title showing tagged notices in one user's timeline.
2010-11-03 07:48:36 +09:00
// TRANS: %1$s is the username, %2$d is the page number.
2011-04-01 05:43:57 +09:00
return sprintf ( _ ( 'Notices by %1$s, page %2$d' ),
2010-11-03 06:20:06 +09:00
$base ,
$this -> page );
}
2009-01-20 01:56:41 +09:00
}
}
2008-05-18 04:24:47 +09:00
2009-01-20 01:56:41 +09:00
function showContent ()
2008-12-24 04:33:23 +09:00
{
2009-01-20 01:56:41 +09:00
$this -> showNotices ();
}
2008-12-24 04:19:07 +09:00
2011-03-15 01:10:07 +09:00
function showProfileBlock ()
{
2015-04-23 04:22:02 +09:00
$block = new AccountProfileBlock ( $this , $this -> target );
2011-03-15 01:10:07 +09:00
$block -> show ();
}
2009-01-20 08:19:05 +09:00
function showPageNoticeBlock ()
{
return ;
2009-01-20 01:56:41 +09:00
}
2009-02-12 01:37:50 +09:00
function getFeeds ()
2009-01-20 01:56:41 +09:00
{
2009-05-19 07:18:08 +09:00
if ( ! empty ( $this -> tag )) {
return array ( new Feed ( Feed :: RSS1 ,
2009-10-07 18:55:54 +09:00
common_local_url ( 'userrss' ,
2015-04-23 04:22:02 +09:00
array ( 'nickname' => $this -> target -> getNickname (),
2009-10-07 18:55:54 +09:00
'tag' => $this -> tag )),
2010-11-03 07:48:36 +09:00
// TRANS: Title for link to notice feed.
// TRANS: %1$s is a user nickname, %2$s is a hashtag.
2010-01-10 09:45:58 +09:00
sprintf ( _ ( 'Notice feed for %1$s tagged %2$s (RSS 1.0)' ),
2015-04-23 04:22:02 +09:00
$this -> target -> getNickname (), $this -> tag )));
2009-05-19 07:18:08 +09:00
}
2011-06-23 06:09:04 +09:00
return array ( new Feed ( Feed :: JSON ,
common_local_url ( 'ApiTimelineUser' ,
array (
2015-06-06 04:24:41 +09:00
'id' => $this -> target -> getID (),
2011-06-23 06:09:04 +09:00
'format' => 'as' )),
// TRANS: Title for link to notice feed.
// TRANS: %s is a user nickname.
sprintf ( _ ( 'Notice feed for %s (Activity Streams JSON)' ),
2015-04-23 04:22:02 +09:00
$this -> target -> getNickname ())),
2011-06-23 06:09:04 +09:00
new Feed ( Feed :: RSS1 ,
2009-02-12 01:37:50 +09:00
common_local_url ( 'userrss' ,
2015-04-23 04:22:02 +09:00
array ( 'nickname' => $this -> target -> getNickname ())),
2010-11-03 07:48:36 +09:00
// TRANS: Title for link to notice feed.
// TRANS: %s is a user nickname.
2009-02-12 01:37:50 +09:00
sprintf ( _ ( 'Notice feed for %s (RSS 1.0)' ),
2015-04-23 04:22:02 +09:00
$this -> target -> getNickname ())),
2009-02-12 01:37:50 +09:00
new Feed ( Feed :: RSS2 ,
2009-10-30 08:09:42 +09:00
common_local_url ( 'ApiTimelineUser' ,
array (
2015-06-06 04:24:41 +09:00
'id' => $this -> target -> getID (),
2009-10-30 08:09:42 +09:00
'format' => 'rss' )),
2010-11-03 07:48:36 +09:00
// TRANS: Title for link to notice feed.
// TRANS: %s is a user nickname.
2009-02-12 01:37:50 +09:00
sprintf ( _ ( 'Notice feed for %s (RSS 2.0)' ),
2015-04-23 04:22:02 +09:00
$this -> target -> getNickname ())),
2009-02-12 01:37:50 +09:00
new Feed ( Feed :: ATOM ,
2009-10-30 08:09:42 +09:00
common_local_url ( 'ApiTimelineUser' ,
array (
2015-06-06 04:24:41 +09:00
'id' => $this -> target -> getID (),
2009-10-30 08:09:42 +09:00
'format' => 'atom' )),
2011-03-24 20:09:50 +09:00
// TRANS: Title for link to notice feed.
// TRANS: %s is a user nickname.
2009-02-12 01:37:50 +09:00
sprintf ( _ ( 'Notice feed for %s (Atom)' ),
2015-04-23 04:22:02 +09:00
$this -> target -> getNickname ())),
2009-02-12 01:37:50 +09:00
new Feed ( Feed :: FOAF ,
common_local_url ( 'foaf' , array ( 'nickname' =>
2015-04-23 04:22:02 +09:00
$this -> target -> getNickname ())),
2010-11-03 07:48:36 +09:00
// TRANS: Title for link to notice feed. FOAF stands for Friend of a Friend.
// TRANS: More information at http://www.foaf-project.org. %s is a user nickname.
2015-04-23 04:22:02 +09:00
sprintf ( _ ( 'FOAF for %s' ), $this -> target -> getNickname ())));
2009-01-20 01:56:41 +09:00
}
function extraHead ()
{
2015-04-23 04:22:02 +09:00
if ( $this -> target -> bio ) {
2009-01-16 07:57:15 +09:00
$this -> element ( 'meta' , array ( 'name' => 'description' ,
2015-04-23 04:22:02 +09:00
'content' => $this -> target -> getDescription ()));
2008-12-24 04:19:07 +09:00
}
2015-04-23 04:22:02 +09:00
if ( $this -> target -> isLocal () && $this -> target -> getUser () -> emailmicroid && $this -> target -> getUser () -> email && $this -> target -> getUrl ()) {
$id = new Microid ( 'mailto:' . $this -> target -> getUser () -> email ,
2009-01-20 01:56:41 +09:00
$this -> selfUrl ());
2009-01-16 07:57:15 +09:00
$this -> element ( 'meta' , array ( 'name' => 'microid' ,
2009-01-20 01:56:41 +09:00
'content' => $id -> toString ()));
2008-12-24 04:19:07 +09:00
}
2009-01-20 01:56:41 +09:00
// See https://wiki.mozilla.org/Microsummaries
2008-12-24 04:19:07 +09:00
2009-01-16 07:57:15 +09:00
$this -> element ( 'link' , array ( 'rel' => 'microsummary' ,
2008-12-24 04:19:07 +09:00
'href' => common_local_url ( 'microsummary' ,
2015-04-23 04:22:02 +09:00
array ( 'nickname' => $this -> target -> getNickname ()))));
2010-02-01 05:16:59 +09:00
$rsd = common_local_url ( 'rsd' ,
2015-04-23 04:22:02 +09:00
array ( 'nickname' => $this -> target -> getNickname ()));
2010-02-01 05:16:59 +09:00
// RSD, http://tales.phrasewise.com/rfc/rsd
$this -> element ( 'link' , array ( 'rel' => 'EditURI' ,
'type' => 'application/rsd+xml' ,
'href' => $rsd ));
2012-01-27 01:02:29 +09:00
if ( $this -> page != 1 ) {
$this -> element ( 'link' , array ( 'rel' => 'canonical' ,
2015-04-23 04:22:02 +09:00
'href' => $this -> target -> getUrl ()));
2012-01-27 01:02:29 +09:00
}
2008-12-24 04:19:07 +09:00
}
2009-04-08 08:14:02 +09:00
function showEmptyListMessage ()
{
2011-08-15 22:57:36 +09:00
// TRANS: First sentence of empty list message for a timeline. $1%s is a user nickname.
2015-06-06 04:24:41 +09:00
$message = sprintf ( _ ( 'This is the timeline for %1$s, but %1$s hasn\'t posted anything yet.' ), $this -> target -> getNickname ()) . ' ' ;
2009-04-08 08:14:02 +09:00
2015-06-06 04:24:41 +09:00
if ( $this -> scoped instanceof Profile ) {
if ( $this -> target -> getID () === $this -> scoped -> getID ()) {
2010-11-03 07:48:36 +09:00
// TRANS: Second sentence of empty list message for a stream for the user themselves.
2009-04-08 08:14:02 +09:00
$message .= _ ( 'Seen anything interesting recently? You haven\'t posted any notices yet, now would be a good time to start :)' );
} else {
2011-08-15 22:57:36 +09:00
// TRANS: Second sentence of empty list message for a non-self timeline. %1$s is a user nickname, %2$s is a part of a URL.
2010-11-03 07:48:36 +09:00
// TRANS: This message contains a Markdown link. Keep "](" together.
2015-06-06 04:24:41 +09:00
$message .= sprintf ( _ ( 'You can try to nudge %1$s or [post something to them](%%%%action.newnotice%%%%?status_textarea=%2$s).' ), $this -> target -> getNickname (), '@' . $this -> target -> getNickname ());
2009-04-08 08:14:02 +09:00
}
}
else {
2010-11-03 07:48:36 +09:00
// TRANS: Second sentence of empty message for anonymous users. %s is a user nickname.
// TRANS: This message contains a Markdown link. Keep "](" together.
2015-06-06 04:24:41 +09:00
$message .= sprintf ( _ ( 'Why not [register an account](%%%%action.register%%%%) and then nudge %s or post a notice to them.' ), $this -> target -> getNickname ());
2009-04-08 08:14:02 +09:00
}
$this -> elementStart ( 'div' , 'guide' );
$this -> raw ( common_markup_to_html ( $message ));
$this -> elementEnd ( 'div' );
}
2009-01-20 01:56:41 +09:00
function showNotices ()
2008-12-24 04:33:23 +09:00
{
2015-03-13 00:33:34 +09:00
$pnl = new NoticeList ( $this -> notice , $this );
2009-01-20 01:56:41 +09:00
$cnt = $pnl -> show ();
2009-04-08 08:14:02 +09:00
if ( 0 == $cnt ) {
2009-04-08 10:20:50 +09:00
$this -> showEmptyListMessage ();
2009-04-08 08:14:02 +09:00
}
2009-01-20 01:56:41 +09:00
2015-06-06 04:24:41 +09:00
$args = array ( 'nickname' => $this -> target -> getNickname ());
2009-09-16 18:07:33 +09:00
if ( ! empty ( $this -> tag ))
{
$args [ 'tag' ] = $this -> tag ;
}
2009-01-20 01:56:41 +09:00
$this -> pagination ( $this -> page > 1 , $cnt > NOTICES_PER_PAGE , $this -> page ,
2009-09-16 18:07:33 +09:00
'showstream' , $args );
2008-12-24 04:19:07 +09:00
}
2009-01-23 12:15:03 +09:00
function showAnonymousMessage ()
{
2009-03-20 06:55:03 +09:00
if ( ! ( common_config ( 'site' , 'closed' ) || common_config ( 'site' , 'inviteonly' ))) {
2011-08-15 22:57:36 +09:00
// TRANS: Announcement for anonymous users showing a timeline if site registrations are open.
2010-11-03 07:48:36 +09:00
// TRANS: This message contains a Markdown link. Keep "](" together.
2009-03-20 06:55:03 +09:00
$m = sprintf ( _ ( '**%s** has an account on %%%%site.name%%%%, a [micro-blogging](http://en.wikipedia.org/wiki/Micro-blogging) service ' .
2009-10-07 18:55:54 +09:00
'based on the Free Software [StatusNet](http://status.net/) tool. ' .
'[Join now](%%%%action.register%%%%) to follow **%s**\'s notices and many more! ([Read more](%%%%doc.help%%%%))' ),
2015-06-06 04:24:41 +09:00
$this -> target -> getNickname (), $this -> target -> getNickname ());
2009-03-20 06:55:03 +09:00
} else {
2011-08-15 22:57:36 +09:00
// TRANS: Announcement for anonymous users showing a timeline if site registrations are closed or invite only.
2010-11-03 07:48:36 +09:00
// TRANS: This message contains a Markdown link. Keep "](" together.
2009-03-20 06:55:03 +09:00
$m = sprintf ( _ ( '**%s** has an account on %%%%site.name%%%%, a [micro-blogging](http://en.wikipedia.org/wiki/Micro-blogging) service ' .
2011-10-29 21:34:50 +09:00
'based on the Free Software [StatusNet](http://status.net/) tool.' ),
2015-06-06 04:24:41 +09:00
$this -> target -> getNickname (), $this -> target -> getNickname ());
2009-10-07 18:55:54 +09:00
}
2009-01-23 12:47:32 +09:00
$this -> elementStart ( 'div' , array ( 'id' => 'anon_notice' ));
2009-01-23 12:15:03 +09:00
$this -> raw ( common_markup_to_html ( $m ));
2009-01-23 12:31:50 +09:00
$this -> elementEnd ( 'div' );
2009-01-23 12:15:03 +09:00
}
2009-04-08 06:47:08 +09:00
function showSections ()
{
parent :: showSections ();
2011-09-20 10:55:11 +09:00
if ( ! common_config ( 'performance' , 'high' )) {
2015-07-10 19:34:06 +09:00
$cloud = new PersonalTagCloudSection ( $this -> target , $this );
2011-09-20 10:55:11 +09:00
$cloud -> show ();
}
2009-04-08 06:47:08 +09:00
}
2011-03-29 05:24:28 +09:00
function noticeFormOptions ()
{
$options = parent :: noticeFormOptions ();
2015-07-10 19:34:06 +09:00
if ( ! $this -> scoped instanceof Profile || ! $this -> scoped -> sameAs ( $this -> target )) {
2015-04-23 04:22:02 +09:00
$options [ 'to_profile' ] = $this -> target ;
2011-03-29 05:24:28 +09:00
}
return $options ;
}
2008-12-12 08:12:52 +09:00
}