2008-05-09 11:16:04 +09:00
< ? php
2009-09-13 18:27:34 +09:00
/**
2009-08-26 07:14:12 +09:00
* StatusNet - the distributed open - source microblogging tool
2009-08-26 07:12:20 +09:00
* Copyright ( C ) 2008 , 2009 , StatusNet , Inc .
2008-05-21 04:14:12 +09:00
*
2008-05-15 04:26:48 +09: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-21 04:14:12 +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-21 04:14:12 +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-09-16 11:30:52 +09:00
*
2009-09-13 18:27:34 +09:00
* @ category Actions
* @ package Actions
2009-09-16 11:28:59 +09:00
* @ author Evan Prodromou < evan @ status . net >
2009-09-13 18:27:34 +09:00
* @ author Mike Cochrane < mikec @ mikenz . geek . nz >
* @ author Robin Millette < millette @ controlyourself . ca >
* @ author Adrian Lang < mail @ adrianlang . de >
* @ author Meitar Moscovitz < meitarm @ gmail . com >
2009-09-16 18:14:26 +09:00
* @ author Sarven Capadisli < csarven @ status . net >
2009-09-13 18:27:34 +09:00
* @ author Craig Andrews < candrews @ integralblue . com >
* @ author Jeffery To < jeffery . to @ gmail . com >
* @ author Zach Copley < zach @ controlyourself . ca >
* @ license GNU Affero General Public License http :// www . gnu . org / licenses /
* @ link http :// status . net
2008-05-15 04:26:48 +09:00
*/
2009-09-16 11:30:52 +09:00
if ( ! defined ( 'STATUSNET' ) && ! defined ( 'LACONICA' )) {
exit ( 1 );
2009-09-13 18:27:34 +09:00
}
2008-05-09 11:16:04 +09:00
2009-01-16 08:46:22 +09:00
require_once INSTALLDIR . '/lib/personalgroupnav.php' ;
require_once INSTALLDIR . '/lib/noticelist.php' ;
require_once INSTALLDIR . '/lib/feedlist.php' ;
2008-05-18 04:10:34 +09:00
2009-04-08 06:47:08 +09:00
class AllAction extends ProfileAction
2008-12-24 04:49:23 +09:00
{
2009-08-16 23:37:15 +09:00
var $notice ;
2009-04-14 04:49:26 +09:00
function isReadOnly ( $args )
2009-01-16 08:46:22 +09:00
{
return true ;
}
2009-01-19 22:27:45 +09:00
2009-08-16 23:37:15 +09:00
function prepare ( $args )
{
parent :: prepare ( $args );
$cur = common_current_user ();
if ( ! empty ( $cur ) && $cur -> id == $this -> user -> id ) {
$this -> notice = $this -> user -> noticeInbox (( $this -> page - 1 ) * NOTICES_PER_PAGE , NOTICES_PER_PAGE + 1 );
} else {
$this -> notice = $this -> user -> noticesWithFriends (( $this -> page - 1 ) * NOTICES_PER_PAGE , NOTICES_PER_PAGE + 1 );
}
2009-09-13 18:27:34 +09:00
if ( $this -> page > 1 && $this -> notice -> N == 0 ) {
$this -> serverError ( _ ( 'No such page' ), $code = 404 );
2009-08-16 23:37:15 +09:00
}
return true ;
}
2008-12-24 04:33:23 +09:00
function handle ( $args )
{
2008-12-24 04:19:07 +09:00
parent :: handle ( $args );
2009-01-19 22:27:45 +09:00
2009-01-16 08:46:22 +09:00
if ( ! $this -> user ) {
2009-01-16 08:03:38 +09:00
$this -> clientError ( _ ( 'No such user.' ));
2008-12-24 04:19:07 +09:00
return ;
}
2009-01-19 22:27:45 +09:00
$this -> showPage ();
2008-12-24 04:19:07 +09:00
}
2009-01-19 22:27:45 +09:00
2009-01-16 08:46:22 +09:00
function title ()
{
2009-01-19 22:27:45 +09:00
if ( $this -> page > 1 ) {
return sprintf ( _ ( " %s and friends, page %d " ), $this -> user -> nickname , $this -> page );
} else {
return sprintf ( _ ( " %s and friends " ), $this -> user -> nickname );
}
2009-01-16 08:46:22 +09:00
}
2009-01-19 22:27:45 +09:00
2009-02-12 01:37:50 +09:00
function getFeeds ()
2008-12-24 04:33:23 +09:00
{
2009-09-13 18:27:34 +09:00
return array (
new Feed ( Feed :: RSS1 ,
common_local_url (
'allrss' , array (
'nickname' =>
$this -> user -> nickname )
),
sprintf ( _ ( 'Feed for friends of %s (RSS 1.0)' ), $this -> user -> nickname )),
new Feed ( Feed :: RSS2 ,
common_local_url (
2009-10-30 08:09:42 +09:00
'ApiTimelineFriends' , array (
'format' => 'rss' ,
'id' => $this -> user -> nickname
2009-09-13 18:27:34 +09:00
)
),
sprintf ( _ ( 'Feed for friends of %s (RSS 2.0)' ), $this -> user -> nickname )),
new Feed ( Feed :: ATOM ,
common_local_url (
2009-10-30 08:09:42 +09:00
'ApiTimelineFriends' , array (
'format' => 'atom' ,
'id' => $this -> user -> nickname
2009-09-13 18:27:34 +09:00
)
),
sprintf ( _ ( 'Feed for friends of %s (Atom)' ), $this -> user -> nickname ))
);
2008-12-24 04:19:07 +09:00
}
2009-01-19 22:27:45 +09:00
2009-01-16 08:46:22 +09:00
function showLocalNav ()
2008-12-24 04:33:23 +09:00
{
2009-01-19 22:27:45 +09:00
$nav = new PersonalGroupNav ( $this );
$nav -> show ();
2008-12-24 04:19:07 +09:00
}
2008-07-08 18:51:13 +09:00
2009-04-08 07:16:09 +09:00
function showEmptyListMessage ()
2009-04-08 01:11:03 +09:00
{
2009-04-08 06:12:11 +09:00
$message = sprintf ( _ ( 'This is the timeline for %s and friends but no one has posted anything yet.' ), $this -> user -> nickname ) . ' ' ;
2009-04-08 01:11:03 +09:00
if ( common_logged_in ()) {
$current_user = common_current_user ();
if ( $this -> user -> id === $current_user -> id ) {
2009-04-23 10:03:17 +09:00
$message .= _ ( 'Try subscribing to more people, [join a group](%%action.groups%%) or post something yourself.' );
2009-04-08 01:11:03 +09:00
} else {
2009-04-08 08:25:12 +09:00
$message .= sprintf ( _ ( 'You can try to [nudge %s](../%s) from his profile or [post something to his or her attention](%%%%action.newnotice%%%%?status_textarea=%s).' ), $this -> user -> nickname , $this -> user -> nickname , '@' . $this -> user -> nickname );
2009-04-08 01:11:03 +09:00
}
2009-09-13 18:27:34 +09:00
} else {
2009-08-22 05:45:42 +09:00
$message .= sprintf ( _ ( 'Why not [register an account](%%%%action.register%%%%) and then nudge %s or post a notice to his or her attention.' ), $this -> user -> nickname );
2009-04-08 01:11:03 +09:00
}
2009-04-08 06:09:27 +09:00
$this -> elementStart ( 'div' , 'guide' );
2009-04-08 01:11:03 +09:00
$this -> raw ( common_markup_to_html ( $message ));
$this -> elementEnd ( 'div' );
}
2009-01-16 08:46:22 +09:00
function showContent ()
{
2009-12-09 07:02:48 +09:00
$nl = new InboxNoticeList ( $this -> notice , $this -> user , $this );
2009-01-16 08:46:22 +09:00
$cnt = $nl -> show ();
2009-01-19 22:27:45 +09:00
2009-04-08 07:16:09 +09:00
if ( 0 == $cnt ) {
$this -> showEmptyListMessage ();
}
2009-09-13 18:27:34 +09:00
$this -> pagination (
$this -> page > 1 , $cnt > NOTICES_PER_PAGE ,
$this -> page , 'all' , array ( 'nickname' => $this -> user -> nickname )
);
2008-12-24 04:19:07 +09:00
}
2009-02-02 09:43:41 +09:00
function showPageTitle ()
{
2009-12-03 02:47:02 +09:00
$user = common_current_user ();
2009-02-02 09:43:41 +09:00
if ( $user && ( $user -> id == $this -> user -> id )) {
2009-09-13 18:27:34 +09:00
$this -> element ( 'h1' , null , _ ( " You and friends " ));
2009-02-12 01:37:50 +09:00
} else {
2009-09-13 18:27:34 +09:00
$this -> element ( 'h1' , null , sprintf ( _ ( '%s and friends' ), $this -> user -> nickname ));
2009-02-02 09:43:41 +09:00
}
}
2009-12-09 07:02:48 +09:00
}
class InboxNoticeList extends NoticeList
{
var $owner = null ;
function __construct ( $notice , $owner , $out = null )
{
parent :: __construct ( $notice , $out );
$this -> owner = $owner ;
}
function newListItem ( $notice )
{
return new InboxNoticeListItem ( $notice , $this -> owner , $this -> out );
}
}
2009-02-02 09:43:41 +09:00
2009-12-09 07:02:48 +09:00
class InboxNoticeListItem extends NoticeListItem
{
var $owner = null ;
var $ib = null ;
function __construct ( $notice , $owner , $out = null )
{
parent :: __construct ( $notice , $out );
$this -> owner = $owner ;
$this -> ib = Notice_inbox :: pkeyGet ( array ( 'user_id' => $owner -> id ,
'notice_id' => $notice -> id ));
}
function showAuthor ()
{
parent :: showAuthor ();
if ( $this -> ib -> source == NOTICE_INBOX_SOURCE_FORWARD ) {
$this -> out -> element ( 'span' , 'forward' , _ ( 'Fwd' ));
}
}
function showEnd ()
{
if ( $this -> ib -> source == NOTICE_INBOX_SOURCE_FORWARD ) {
$forward = new Forward ();
// FIXME: scary join!
$forward -> query ( 'SELECT profile_id ' .
'FROM forward JOIN subscription ON forward.profile_id = subscription.subscribed ' .
'WHERE subscription.subscriber = ' . $this -> owner -> id . ' ' .
'AND forward.notice_id = ' . $this -> notice -> id . ' ' .
'ORDER BY forward.created ' );
$n = 0 ;
$firstForwarder = null ;
while ( $forward -> fetch ()) {
if ( empty ( $firstForwarder )) {
$firstForwarder = Profile :: staticGet ( 'id' , $forward -> profile_id );
}
$n ++ ;
}
$forward -> free ();
unset ( $forward );
$this -> out -> elementStart ( 'span' , 'forwards' );
$link = XMLStringer :: estring ( 'a' , array ( 'href' => $firstForwarder -> profileurl ),
$firstForwarder -> nickname );
if ( $n == 1 ) {
$this -> out -> raw ( sprintf ( _ ( 'Forwarded by %s' ), $link ));
} else {
// XXX: use that cool ngettext thing
$this -> out -> raw ( sprintf ( _ ( 'Forwarded by %s and %d other(s)' ), $link , $n - 1 ));
}
$this -> out -> elementEnd ( 'span' );
}
parent :: showEnd ();
}
2008-05-09 11:16:04 +09:00
}