2008-05-09 03:16:04 +01:00
< ? php
2009-09-13 10:27:34 +01:00
/**
2009-08-25 23:14:12 +01:00
* StatusNet - the distributed open - source microblogging tool
2011-09-23 22:18:21 +01:00
* Copyright ( C ) 2008 - 2011 , StatusNet , Inc .
2008-05-20 20:14:12 +01:00
*
2008-05-14 20:26:48 +01:00
* 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 .
2008-05-20 20:14:12 +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-20 20:14:12 +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-09-16 03:30:52 +01:00
*
2009-09-13 10:27:34 +01:00
* @ category Actions
* @ package Actions
* @ author Adrian Lang < mail @ adrianlang . de >
2010-06-08 05:32:53 +01:00
* @ author Brenda Wallace < shiny @ cpan . org >
* @ author Brion Vibber < brion @ pobox . com >
2009-09-13 10:27:34 +01:00
* @ author Craig Andrews < candrews @ integralblue . com >
2010-06-08 05:32:53 +01:00
* @ author Evan Prodromou < evan @ status . net >
2009-09-13 10:27:34 +01:00
* @ author Jeffery To < jeffery . to @ gmail . com >
2010-06-08 05:32:53 +01:00
* @ author Meitar Moscovitz < meitarm @ gmail . com >
* @ author Mike Cochrane < mikec @ mikenz . geek . nz >
* @ author Robin Millette < millette @ status . net >
* @ author Sarven Capadisli < csarven @ status . net >
* @ author Siebrand Mazeland < s . mazeland @ xs4all . nl >
* @ author Zach Copley < zach @ status . net >
2014-03-05 00:17:34 +00:00
* @ copyright 2009 - 2014 Free Software Foundation , Inc http :// www . fsf . org
2009-09-13 10:27:34 +01:00
* @ license GNU Affero General Public License http :// www . gnu . org / licenses /
* @ link http :// status . net
2008-05-14 20:26:48 +01:00
*/
2014-03-05 00:17:34 +00:00
if ( ! defined ( 'GNUSOCIAL' ) && ! defined ( 'STATUSNET' )) { exit ( 1 ); }
2008-05-17 20:10:34 +01:00
2009-04-07 22:47:08 +01:00
class AllAction extends ProfileAction
2008-12-23 19:49:23 +00:00
{
2009-08-16 15:37:15 +01:00
var $notice ;
2014-03-05 00:17:34 +00:00
protected function prepare ( array $args = array ())
2009-08-16 15:37:15 +01:00
{
parent :: prepare ( $args );
2011-09-23 22:50:38 +01:00
$user = common_current_user ();
2011-09-23 22:18:21 +01:00
2011-09-24 12:12:34 +01:00
if ( ! empty ( $user ) && $user -> streamModeOnly ()) {
2014-03-05 00:17:34 +00:00
$stream = new InboxNoticeStream ( $this -> target , $this -> scoped );
2011-09-23 22:18:21 +01:00
} else {
2014-03-05 00:17:34 +00:00
$stream = new ThreadingInboxNoticeStream ( $this -> target , $this -> scoped );
2011-09-23 22:18:21 +01:00
}
2011-04-07 19:52:44 +01:00
$this -> notice = $stream -> getNotices (( $this -> page - 1 ) * NOTICES_PER_PAGE ,
2011-04-18 21:28:41 +01:00
NOTICES_PER_PAGE + 1 );
2009-08-16 15:37:15 +01:00
2009-09-13 10:27:34 +01:00
if ( $this -> page > 1 && $this -> notice -> N == 0 ) {
2015-01-29 22:35:49 +00:00
// TRANS: Client error when page not found (404).
$this -> clientError ( _ ( 'No such page.' ), 404 );
2009-08-16 15:37:15 +01:00
}
return true ;
}
2009-01-15 23:46:22 +00:00
function title ()
{
2014-03-05 00:17:34 +00:00
if ( ! empty ( $this -> scoped ) && $this -> scoped -> id == $this -> target -> id ) {
2011-05-05 11:47:26 +01:00
// TRANS: Title of a user's own start page.
2011-05-04 18:49:46 +01:00
return _ ( 'Home timeline' );
2009-01-19 13:27:45 +00:00
} else {
2011-05-05 11:47:26 +01:00
// TRANS: Title of another user's start page.
// TRANS: %s is the other user's name.
2014-03-05 00:17:34 +00:00
return sprintf ( _ ( " %s's home timeline " ), $this -> target -> getBestName ());
2009-01-19 13:27:45 +00:00
}
2009-01-15 23:46:22 +00:00
}
2009-01-19 13:27:45 +00:00
2009-02-11 16:37:50 +00:00
function getFeeds ()
2008-12-23 19:33:23 +00:00
{
2009-09-13 10:27:34 +01:00
return array (
2011-06-22 22:19:46 +01:00
new Feed ( Feed :: JSON ,
common_local_url (
'ApiTimelineFriends' , array (
'format' => 'as' ,
2014-03-05 00:17:34 +00:00
'id' => $this -> target -> nickname
2011-06-22 22:19:46 +01:00
)
),
// TRANS: %s is user nickname.
2014-03-05 00:17:34 +00:00
sprintf ( _ ( 'Feed for friends of %s (Activity Streams JSON)' ), $this -> target -> nickname )),
2009-09-13 10:27:34 +01:00
new Feed ( Feed :: RSS1 ,
common_local_url (
'allrss' , array (
'nickname' =>
2014-03-05 00:17:34 +00:00
$this -> target -> nickname )
2009-09-13 10:27:34 +01:00
),
2010-10-25 22:51:00 +01:00
// TRANS: %s is user nickname.
2014-03-05 00:17:34 +00:00
sprintf ( _ ( 'Feed for friends of %s (RSS 1.0)' ), $this -> target -> nickname )),
2009-09-13 10:27:34 +01:00
new Feed ( Feed :: RSS2 ,
common_local_url (
2009-10-29 23:09:42 +00:00
'ApiTimelineFriends' , array (
'format' => 'rss' ,
2014-03-05 00:17:34 +00:00
'id' => $this -> target -> nickname
2009-09-13 10:27:34 +01:00
)
),
2010-10-25 22:51:00 +01:00
// TRANS: %s is user nickname.
2014-03-05 00:17:34 +00:00
sprintf ( _ ( 'Feed for friends of %s (RSS 2.0)' ), $this -> target -> nickname )),
2009-09-13 10:27:34 +01:00
new Feed ( Feed :: ATOM ,
common_local_url (
2009-10-29 23:09:42 +00:00
'ApiTimelineFriends' , array (
'format' => 'atom' ,
2014-03-05 00:17:34 +00:00
'id' => $this -> target -> nickname
2009-09-13 10:27:34 +01:00
)
),
2010-10-25 22:51:00 +01:00
// TRANS: %s is user nickname.
2014-03-05 00:17:34 +00:00
sprintf ( _ ( 'Feed for friends of %s (Atom)' ), $this -> target -> nickname ))
2009-09-13 10:27:34 +01:00
);
2008-12-23 19:19:07 +00:00
}
2009-01-19 13:27:45 +00:00
2009-04-07 23:16:09 +01:00
function showEmptyListMessage ()
2009-04-07 17:11:03 +01:00
{
2010-10-25 22:51:00 +01:00
// TRANS: Empty list message. %s is a user nickname.
2014-03-05 00:17:34 +00:00
$message = sprintf ( _ ( 'This is the timeline for %s and friends but no one has posted anything yet.' ), $this -> target -> nickname ) . ' ' ;
2009-04-07 17:11:03 +01:00
if ( common_logged_in ()) {
2014-03-05 00:17:34 +00:00
if ( $this -> target -> id === $this -> scoped -> id ) {
2010-10-21 00:53:42 +01:00
// TRANS: Encouragement displayed on logged in user's empty timeline.
// TRANS: This message contains Markdown links. Keep "](" together.
2009-04-23 02:03:17 +01:00
$message .= _ ( 'Try subscribing to more people, [join a group](%%action.groups%%) or post something yourself.' );
2009-04-07 17:11:03 +01:00
} else {
2010-10-25 22:51:00 +01:00
// TRANS: %1$s is user nickname, %2$s is user nickname, %2$s is user nickname prefixed with "@".
2010-10-21 00:53:42 +01:00
// TRANS: This message contains Markdown links. Keep "](" together.
2014-03-05 00:17:34 +00:00
$message .= sprintf ( _ ( 'You can try to [nudge %1$s](../%2$s) from their profile or [post something to them](%%%%action.newnotice%%%%?status_textarea=%3$s).' ), $this -> target -> nickname , $this -> target -> nickname , '@' . $this -> target -> nickname );
2009-04-07 17:11:03 +01:00
}
2009-09-13 10:27:34 +01:00
} else {
2011-06-19 10:11:12 +01:00
// TRANS: Encouragement displayed on empty timeline user pages for anonymous users.
2010-10-21 00:53:42 +01:00
// TRANS: %s is a user nickname. This message contains Markdown links. Keep "](" together.
2014-03-05 00:17:34 +00:00
$message .= sprintf ( _ ( 'Why not [register an account](%%%%action.register%%%%) and then nudge %s or post a notice to them.' ), $this -> target -> nickname );
2009-04-07 17:11:03 +01:00
}
2009-04-07 22:09:27 +01:00
$this -> elementStart ( 'div' , 'guide' );
2009-04-07 17:11:03 +01:00
$this -> raw ( common_markup_to_html ( $message ));
$this -> elementEnd ( 'div' );
}
2009-01-15 23:46:22 +00:00
function showContent ()
{
2010-03-02 17:33:25 +00:00
if ( Event :: handle ( 'StartShowAllContent' , array ( $this ))) {
2011-04-11 01:16:51 +01:00
$profile = null ;
$current_user = common_current_user ();
if ( ! empty ( $current_user )) {
$profile = $current_user -> getProfile ();
}
2011-09-24 12:12:34 +01:00
if ( ! empty ( $current_user ) && $current_user -> streamModeOnly ()) {
2015-01-08 19:29:09 +00:00
$nl = new PrimaryNoticeList ( $this -> notice , $this , array ( 'show_n' => NOTICES_PER_PAGE ));
2011-09-23 22:18:21 +01:00
} else {
$nl = new ThreadedNoticeList ( $this -> notice , $this , $profile );
}
2009-01-15 23:46:22 +00:00
2010-03-02 17:33:25 +00:00
$cnt = $nl -> show ();
2009-01-19 13:27:45 +00:00
2010-03-02 17:33:25 +00:00
if ( 0 == $cnt ) {
$this -> showEmptyListMessage ();
}
2009-04-07 23:16:09 +01:00
2010-03-02 17:33:25 +00:00
$this -> pagination (
$this -> page > 1 , $cnt > NOTICES_PER_PAGE ,
2014-03-05 00:17:34 +00:00
$this -> page , 'all' , array ( 'nickname' => $this -> target -> nickname )
2010-03-02 17:33:25 +00:00
);
Event :: handle ( 'EndShowAllContent' , array ( $this ));
}
2008-12-23 19:19:07 +00:00
}
2009-02-02 00:43:41 +00:00
2011-04-14 23:19:18 +01:00
function showSections ()
{
2011-07-06 01:27:11 +01:00
// Show invite button, as long as site isn't closed, and
// we have a logged in user.
2012-10-17 15:09:40 +01:00
if ( common_config ( 'invite' , 'enabled' ) && ! common_config ( 'site' , 'closed' ) && common_logged_in ()) {
2011-07-06 01:27:11 +01:00
if ( ! common_config ( 'site' , 'private' )) {
$ibs = new InviteButtonSection (
$this ,
// TRANS: Button text for inviting more users to the StatusNet instance.
// TRANS: Less business/enterprise-oriented language for public sites.
_m ( 'BUTTON' , 'Send invite' )
);
} else {
$ibs = new InviteButtonSection ( $this );
}
$ibs -> show ();
}
2011-09-19 21:19:12 +01:00
// XXX: make this a little more convenient
2011-09-20 02:55:11 +01:00
if ( ! common_config ( 'performance' , 'high' )) {
2014-03-05 00:17:34 +00:00
$pop = new InboxTagCloudSection ( $this , $this -> target );
2011-09-20 02:55:11 +01:00
$pop -> show ();
2011-09-19 21:19:12 +01:00
}
2011-04-14 23:19:18 +01:00
}
2009-12-08 22:02:48 +00:00
}
2011-04-15 23:51:18 +01:00
class ThreadingInboxNoticeStream extends ThreadingNoticeStream
{
2014-03-06 02:43:48 +00:00
function __construct ( Profile $target , Profile $scoped = null )
2011-04-15 23:51:18 +01:00
{
2014-03-06 02:43:48 +00:00
parent :: __construct ( new InboxNoticeStream ( $target , $scoped ));
2011-04-15 23:51:18 +01:00
}
}