2008-05-07 17:48:07 +01:00
< ? php
2009-01-19 16:56:41 +00:00
/**
2009-08-25 23:12:20 +01:00
* StatusNet , the distributed open - source microblogging tool
2008-05-17 20:24:47 +01:00
*
2009-01-19 16:56:41 +00:00
* User profile page
*
* PHP version 5
*
* LICENCE : This program is free software : you can redistribute it and / or modify
2008-05-14 20:26:48 +01: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-17 20:24:47 +01:00
*
2008-05-14 20:26:48 +01: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-17 20:24:47 +01:00
*
2008-05-14 20:26:48 +01: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-19 16:56:41 +00:00
*
* @ category Personal
2009-08-25 23:12:20 +01:00
* @ package StatusNet
2009-08-25 23:19:04 +01:00
* @ author Evan Prodromou < evan @ status . net >
* @ author Sarven Capadisli < csarven @ status . net >
2009-08-25 23:12:20 +01:00
* @ copyright 2008 - 2009 StatusNet , Inc .
2009-01-19 16:56:41 +00:00
* @ license http :// www . fsf . org / licensing / licenses / agpl - 3.0 . html GNU Affero General Public License version 3.0
2009-08-25 23:16:46 +01:00
* @ link http :// status . net /
2008-05-14 20:26:48 +01:00
*/
2015-03-12 14:53:59 +00:00
if ( ! defined ( 'GNUSOCIAL' )) { exit ( 1 ); }
2008-05-17 20:10:34 +01:00
2009-01-19 16:56:41 +00: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-25 23:12:20 +01:00
* @ package StatusNet
2009-08-25 23:19:04 +01:00
* @ author Evan Prodromou < evan @ status . net >
2009-01-19 16:56:41 +00:00
* @ license http :// www . fsf . org / licensing / licenses / agpl - 3.0 . html GNU Affero General Public License version 3.0
2009-08-25 23:16:46 +01:00
* @ link http :// status . net /
2009-01-19 16:56:41 +00:00
*/
2015-07-04 18:48:35 +01:00
class ShowstreamAction extends NoticestreamAction
2008-12-23 19:49:23 +00:00
{
2015-06-25 19:13:27 +01:00
public function getStream ()
2011-09-18 17:33:35 +01:00
{
if ( empty ( $this -> tag )) {
2015-04-22 20:22:02 +01:00
$stream = new ProfileNoticeStream ( $this -> target , $this -> scoped );
2011-09-18 17:33:35 +01:00
} else {
2015-04-22 20:22:02 +01:00
$stream = new TaggedProfileNoticeStream ( $this -> target , $this -> tag , $this -> scoped );
2011-09-18 17:33:35 +01:00
}
2015-06-05 20:49:34 +01:00
return $stream ;
2011-09-18 17:33:35 +01:00
}
2009-01-19 16:56:41 +00:00
function title ()
2008-12-23 19:33:23 +00:00
{
2015-04-22 20:22:02 +01:00
$base = $this -> target -> getFancyName ();
2009-05-18 22:18:57 +01:00
if ( ! empty ( $this -> tag )) {
2010-11-02 21:20:06 +00:00
if ( $this -> page == 1 ) {
2011-08-15 14:57:36 +01:00
// TRANS: Page title showing tagged notices in one user's timeline.
2011-03-24 11:09:50 +00:00
// TRANS: %1$s is the username, %2$s is the hash tag.
2011-03-31 21:43:57 +01:00
return sprintf ( _ ( 'Notices by %1$s tagged %2$s' ), $base , $this -> tag );
2010-11-02 21:20:06 +00:00
} else {
2011-08-15 14:57:36 +01:00
// TRANS: Page title showing tagged notices in one user's timeline.
2011-02-16 23:39:53 +00:00
// TRANS: %1$s is the username, %2$s is the hash tag, %3$d is the page number.
2011-03-31 21:43:57 +01:00
return sprintf ( _ ( 'Notices by %1$s tagged %2$s, page %3$d' ), $base , $this -> tag , $this -> page );
2010-11-02 21:20:06 +00:00
}
2009-01-19 16:56:41 +00:00
} else {
2010-11-02 21:20:06 +00:00
if ( $this -> page == 1 ) {
2015-07-25 13:45:45 +01:00
return sprintf ( _ ( 'Notices by %s' ), $base );
2010-11-02 21:20:06 +00:00
} else {
2011-08-15 14:57:36 +01:00
// TRANS: Extended page title showing tagged notices in one user's timeline.
2010-11-02 22:48:36 +00:00
// TRANS: %1$s is the username, %2$d is the page number.
2011-03-31 21:43:57 +01:00
return sprintf ( _ ( 'Notices by %1$s, page %2$d' ),
2010-11-02 21:20:06 +00:00
$base ,
$this -> page );
}
2009-01-19 16:56:41 +00:00
}
}
2008-05-17 20:24:47 +01:00
2015-09-27 22:46:30 +01:00
protected function showContent ()
2008-12-23 19:33:23 +00:00
{
2009-01-19 16:56:41 +00:00
$this -> showNotices ();
}
2008-12-23 19:19:07 +00:00
2011-03-14 16:10:07 +00:00
function showProfileBlock ()
{
2015-04-22 20:22:02 +01:00
$block = new AccountProfileBlock ( $this , $this -> target );
2011-03-14 16:10:07 +00:00
$block -> show ();
}
2009-01-19 23:19:05 +00:00
function showPageNoticeBlock ()
{
return ;
2009-01-19 16:56:41 +00:00
}
2009-02-11 16:37:50 +00:00
function getFeeds ()
2009-01-19 16:56:41 +00:00
{
2009-05-18 23:18:08 +01:00
if ( ! empty ( $this -> tag )) {
return array ( new Feed ( Feed :: RSS1 ,
2009-10-07 10:55:54 +01:00
common_local_url ( 'userrss' ,
2015-04-22 20:22:02 +01:00
array ( 'nickname' => $this -> target -> getNickname (),
2009-10-07 10:55:54 +01:00
'tag' => $this -> tag )),
2010-11-02 22:48:36 +00:00
// TRANS: Title for link to notice feed.
// TRANS: %1$s is a user nickname, %2$s is a hashtag.
2010-01-10 00:45:58 +00:00
sprintf ( _ ( 'Notice feed for %1$s tagged %2$s (RSS 1.0)' ),
2015-04-22 20:22:02 +01:00
$this -> target -> getNickname (), $this -> tag )));
2009-05-18 23:18:08 +01:00
}
2017-04-09 11:13:53 +01:00
if ( ! $this -> target -> isLocal ()) {
// remote profiles at least have Atom, but we can't guarantee anything else
return array (
new Feed ( Feed :: ATOM ,
$this -> target -> getAtomFeed (),
// TRANS: Title for link to notice feed.
// TRANS: %s is a user nickname.
sprintf ( _ ( 'Notice feed for %s (Atom)' ),
$this -> target -> getNickname ()))
);
}
2011-06-22 22:09:04 +01:00
return array ( new Feed ( Feed :: JSON ,
common_local_url ( 'ApiTimelineUser' ,
array (
2015-06-05 20:24:41 +01:00
'id' => $this -> target -> getID (),
2011-06-22 22:09:04 +01: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-22 20:22:02 +01:00
$this -> target -> getNickname ())),
2011-06-22 22:09:04 +01:00
new Feed ( Feed :: RSS1 ,
2009-02-11 16:37:50 +00:00
common_local_url ( 'userrss' ,
2015-04-22 20:22:02 +01:00
array ( 'nickname' => $this -> target -> getNickname ())),
2010-11-02 22:48:36 +00:00
// TRANS: Title for link to notice feed.
// TRANS: %s is a user nickname.
2009-02-11 16:37:50 +00:00
sprintf ( _ ( 'Notice feed for %s (RSS 1.0)' ),
2015-04-22 20:22:02 +01:00
$this -> target -> getNickname ())),
2009-02-11 16:37:50 +00:00
new Feed ( Feed :: RSS2 ,
2009-10-29 23:09:42 +00:00
common_local_url ( 'ApiTimelineUser' ,
array (
2015-06-05 20:24:41 +01:00
'id' => $this -> target -> getID (),
2009-10-29 23:09:42 +00:00
'format' => 'rss' )),
2010-11-02 22:48:36 +00:00
// TRANS: Title for link to notice feed.
// TRANS: %s is a user nickname.
2009-02-11 16:37:50 +00:00
sprintf ( _ ( 'Notice feed for %s (RSS 2.0)' ),
2015-04-22 20:22:02 +01:00
$this -> target -> getNickname ())),
2009-02-11 16:37:50 +00:00
new Feed ( Feed :: ATOM ,
2017-04-09 11:13:53 +01:00
$this -> target -> getAtomFeed (),
2011-03-24 11:09:50 +00:00
// TRANS: Title for link to notice feed.
// TRANS: %s is a user nickname.
2009-02-11 16:37:50 +00:00
sprintf ( _ ( 'Notice feed for %s (Atom)' ),
2015-04-22 20:22:02 +01:00
$this -> target -> getNickname ())),
2009-02-11 16:37:50 +00:00
new Feed ( Feed :: FOAF ,
common_local_url ( 'foaf' , array ( 'nickname' =>
2015-04-22 20:22:02 +01:00
$this -> target -> getNickname ())),
2010-11-02 22:48:36 +00: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-22 20:22:02 +01:00
sprintf ( _ ( 'FOAF for %s' ), $this -> target -> getNickname ())));
2009-01-19 16:56:41 +00:00
}
2016-02-24 15:43:09 +00:00
public function extraHeaders ()
{
parent :: extraHeaders ();
// Publish all the rel="me" in the HTTP headers on our main profile page
if ( get_class ( $this ) == 'ShowstreamAction' ) {
foreach ( $this -> target -> getRelMes () as $relMe ) {
2016-02-28 19:50:45 +00:00
header ( 'Link: <' . htmlspecialchars ( $relMe [ 'href' ]) . '>; rel="me"' , false );
2016-02-24 15:43:09 +00:00
}
}
}
2009-01-19 16:56:41 +00:00
function extraHead ()
{
2015-04-22 20:22:02 +01:00
if ( $this -> target -> bio ) {
2009-01-15 22:57:15 +00:00
$this -> element ( 'meta' , array ( 'name' => 'description' ,
2015-04-22 20:22:02 +01:00
'content' => $this -> target -> getDescription ()));
2008-12-23 19:19:07 +00:00
}
2010-01-31 20:16:59 +00:00
$rsd = common_local_url ( 'rsd' ,
2015-04-22 20:22:02 +01:00
array ( 'nickname' => $this -> target -> getNickname ()));
2010-01-31 20:16:59 +00:00
// RSD, http://tales.phrasewise.com/rfc/rsd
$this -> element ( 'link' , array ( 'rel' => 'EditURI' ,
'type' => 'application/rsd+xml' ,
'href' => $rsd ));
2012-01-26 16:02:29 +00:00
if ( $this -> page != 1 ) {
$this -> element ( 'link' , array ( 'rel' => 'canonical' ,
2015-04-22 20:22:02 +01:00
'href' => $this -> target -> getUrl ()));
2012-01-26 16:02:29 +00:00
}
2008-12-23 19:19:07 +00:00
}
2009-04-08 00:14:02 +01:00
function showEmptyListMessage ()
{
2011-08-15 14:57:36 +01:00
// TRANS: First sentence of empty list message for a timeline. $1%s is a user nickname.
2015-06-05 20:24:41 +01:00
$message = sprintf ( _ ( 'This is the timeline for %1$s, but %1$s hasn\'t posted anything yet.' ), $this -> target -> getNickname ()) . ' ' ;
2009-04-08 00:14:02 +01:00
2015-06-05 20:24:41 +01:00
if ( $this -> scoped instanceof Profile ) {
if ( $this -> target -> getID () === $this -> scoped -> getID ()) {
2010-11-02 22:48:36 +00:00
// TRANS: Second sentence of empty list message for a stream for the user themselves.
2009-04-08 00:14:02 +01: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 14:57:36 +01: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-02 22:48:36 +00:00
// TRANS: This message contains a Markdown link. Keep "](" together.
2015-06-05 20:24:41 +01: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 00:14:02 +01:00
}
}
else {
2010-11-02 22:48:36 +00: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-05 20:24:41 +01: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 00:14:02 +01:00
}
$this -> elementStart ( 'div' , 'guide' );
$this -> raw ( common_markup_to_html ( $message ));
$this -> elementEnd ( 'div' );
}
2009-01-19 16:56:41 +00:00
function showNotices ()
2008-12-23 19:33:23 +00:00
{
2016-06-21 14:55:49 +01:00
$pnl = new PrimaryNoticeList ( $this -> notice , $this );
2009-01-19 16:56:41 +00:00
$cnt = $pnl -> show ();
2009-04-08 00:14:02 +01:00
if ( 0 == $cnt ) {
2009-04-08 02:20:50 +01:00
$this -> showEmptyListMessage ();
2009-04-08 00:14:02 +01:00
}
2009-01-19 16:56:41 +00:00
2017-07-11 20:16:30 +01:00
// either nickname or id will be used, depending on which action (showstream, userbyid...)
$args = array ( 'nickname' => $this -> target -> getNickname (), 'id' => $this -> target -> getID ());
2009-09-16 10:07:33 +01:00
if ( ! empty ( $this -> tag ))
{
$args [ 'tag' ] = $this -> tag ;
}
2009-01-19 16:56:41 +00:00
$this -> pagination ( $this -> page > 1 , $cnt > NOTICES_PER_PAGE , $this -> page ,
2017-07-11 20:16:30 +01:00
$this -> getActionName (), $args );
2008-12-23 19:19:07 +00:00
}
2009-01-23 03:15:03 +00:00
function showAnonymousMessage ()
{
2009-03-19 21:55:03 +00:00
if ( ! ( common_config ( 'site' , 'closed' ) || common_config ( 'site' , 'inviteonly' ))) {
2011-08-15 14:57:36 +01:00
// TRANS: Announcement for anonymous users showing a timeline if site registrations are open.
2010-11-02 22:48:36 +00:00
// TRANS: This message contains a Markdown link. Keep "](" together.
2009-03-19 21:55:03 +00:00
$m = sprintf ( _ ( '**%s** has an account on %%%%site.name%%%%, a [micro-blogging](http://en.wikipedia.org/wiki/Micro-blogging) service ' .
2009-10-07 10:55:54 +01: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-05 20:24:41 +01:00
$this -> target -> getNickname (), $this -> target -> getNickname ());
2009-03-19 21:55:03 +00:00
} else {
2011-08-15 14:57:36 +01:00
// TRANS: Announcement for anonymous users showing a timeline if site registrations are closed or invite only.
2010-11-02 22:48:36 +00:00
// TRANS: This message contains a Markdown link. Keep "](" together.
2009-03-19 21:55:03 +00:00
$m = sprintf ( _ ( '**%s** has an account on %%%%site.name%%%%, a [micro-blogging](http://en.wikipedia.org/wiki/Micro-blogging) service ' .
2011-10-29 13:34:50 +01:00
'based on the Free Software [StatusNet](http://status.net/) tool.' ),
2015-06-05 20:24:41 +01:00
$this -> target -> getNickname (), $this -> target -> getNickname ());
2009-10-07 10:55:54 +01:00
}
2009-01-23 03:47:32 +00:00
$this -> elementStart ( 'div' , array ( 'id' => 'anon_notice' ));
2009-01-23 03:15:03 +00:00
$this -> raw ( common_markup_to_html ( $m ));
2009-01-23 03:31:50 +00:00
$this -> elementEnd ( 'div' );
2009-01-23 03:15:03 +00:00
}
2011-03-28 21:24:28 +01:00
function noticeFormOptions ()
{
$options = parent :: noticeFormOptions ();
2015-07-10 11:34:06 +01:00
if ( ! $this -> scoped instanceof Profile || ! $this -> scoped -> sameAs ( $this -> target )) {
2015-04-22 20:22:02 +01:00
$options [ 'to_profile' ] = $this -> target ;
2011-03-28 21:24:28 +01:00
}
return $options ;
}
2008-12-11 23:12:52 +00:00
}