2008-09-17 04:53:46 +09:00
< ? php
2008-12-23 04:50:41 +09:00
/**
* Laconica , the distributed open - source microblogging tool
2008-09-17 04:53:46 +09:00
*
2008-12-23 04:50:41 +09:00
* common superclass for direct messages inbox and outbox
*
* PHP version 5
*
* LICENCE : This program is free software : you can redistribute it and / or modify
2008-09-17 04:53:46 +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 .
*
* 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 .
*
* 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 />.
2008-12-23 04:50:41 +09:00
*
2008-12-23 05:13:04 +09:00
* @ category Message
2008-12-23 04:50:41 +09:00
* @ package Laconica
* @ author Evan Prodromou < evan @ controlyourself . ca >
* @ copyright 2008 Control Yourself , Inc .
* @ license http :// www . fsf . org / licensing / licenses / agpl - 3.0 . html GNU Affero General Public License version 3.0
* @ link http :// laconi . ca /
2008-09-17 04:53:46 +09:00
*/
2008-12-23 04:50:41 +09:00
if ( ! defined ( 'LACONICA' )) {
exit ( 1 );
}
2008-09-17 04:53:46 +09:00
define ( 'MESSAGES_PER_PAGE' , 20 );
2008-12-23 04:50:41 +09:00
/**
* common superclass for direct messages inbox and outbox
*
2008-12-23 05:13:04 +09:00
* @ category Message
2008-12-23 04:50:41 +09:00
* @ package Laconica
* @ author Evan Prodromou < evan @ controlyourself . ca >
* @ license http :// www . fsf . org / licensing / licenses / agpl - 3.0 . html GNU Affero General Public License version 3.0
* @ link http :// laconi . ca /
* @ see InboxAction
* @ see OutboxAction
*/
2009-05-24 12:40:11 +09:00
class MailboxAction extends CurrentUserDesignAction
2008-12-23 04:50:41 +09:00
{
2009-01-21 10:49:47 +09:00
var $page = null ;
2009-05-24 12:40:11 +09:00
function prepare ( $args )
2009-01-21 10:49:47 +09:00
{
parent :: prepare ( $args );
$nickname = common_canonical_nickname ( $this -> arg ( 'nickname' ));
$this -> user = User :: staticGet ( 'nickname' , $nickname );
$this -> page = $this -> trimmed ( 'page' );
if ( ! $this -> page ) {
$this -> page = 1 ;
}
2009-02-06 09:16:10 +09:00
common_set_returnto ( $this -> selfUrl ());
2009-01-21 10:49:47 +09:00
return true ;
}
2008-12-23 04:50:41 +09:00
/**
* output page based on arguments
*
* @ param array $args HTTP arguments ( from $_REQUEST )
*
* @ return void
*/
function handle ( $args )
{
parent :: handle ( $args );
2009-01-21 10:49:47 +09:00
if ( ! $this -> user ) {
$this -> clientError ( _ ( 'No such user.' ), 404 );
2008-12-23 04:50:41 +09:00
return ;
}
$cur = common_current_user ();
2009-01-21 10:49:47 +09:00
if ( ! $cur || $cur -> id != $this -> user -> id ) {
$this -> clientError ( _ ( 'Only the user can read their own mailboxes.' ),
403 );
2008-12-23 04:50:41 +09:00
return ;
}
2009-01-21 10:49:47 +09:00
$this -> showPage ();
2008-12-23 04:50:41 +09:00
}
2009-01-21 10:49:47 +09:00
function showLocalNav ()
2008-12-23 04:50:41 +09:00
{
2009-01-21 10:49:47 +09:00
$nav = new PersonalGroupNav ( $this );
$nav -> show ();
2008-12-23 04:50:41 +09:00
}
2009-01-21 10:49:47 +09:00
function showNoticeForm ()
2008-12-23 04:50:41 +09:00
{
2009-01-21 10:49:47 +09:00
$message_form = new MessageForm ( $this );
$message_form -> show ();
2008-12-23 04:50:41 +09:00
}
2009-01-21 10:49:47 +09:00
function showContent ()
2008-12-23 04:50:41 +09:00
{
2009-01-21 10:49:47 +09:00
$message = $this -> getMessages ();
2008-12-23 04:50:41 +09:00
if ( $message ) {
$cnt = 0 ;
2009-01-21 14:27:16 +09:00
$this -> elementStart ( 'div' , array ( 'id' => 'notices_primary' ));
$this -> element ( 'h2' , null , _ ( 'Notices' ));
$this -> elementStart ( 'ul' , 'notices' );
2008-12-23 04:50:41 +09:00
while ( $message -> fetch () && $cnt <= MESSAGES_PER_PAGE ) {
$cnt ++ ;
if ( $cnt > MESSAGES_PER_PAGE ) {
break ;
}
2008-12-23 05:13:04 +09:00
$this -> showMessage ( $message );
2008-12-23 04:50:41 +09:00
}
2009-01-21 10:49:47 +09:00
$this -> elementEnd ( 'ul' );
2008-12-23 04:50:41 +09:00
2009-01-21 10:49:47 +09:00
$this -> pagination ( $this -> page > 1 , $cnt > MESSAGES_PER_PAGE ,
$this -> page , $this -> trimmed ( 'action' ),
array ( 'nickname' => $this -> user -> nickname ));
2009-01-21 14:27:16 +09:00
$this -> elementEnd ( 'div' );
2008-12-23 04:50:41 +09:00
$message -> free ();
unset ( $message );
}
2009-04-08 09:27:12 +09:00
else {
$this -> element ( 'p' , 'guide' , _ ( 'You have no private messages. You can send private message to engage other users in conversation. People can send you messages for your eyes only.' ));
}
2008-12-23 04:50:41 +09:00
}
2009-01-21 10:49:47 +09:00
function getMessages ()
{
return null ;
}
2008-12-23 04:50:41 +09:00
/**
* returns the profile we want to show with the message
*
* For inboxes , we show the sender ; for outboxes , the recipient .
*
* @ param Message $message The message to get the profile for
*
* @ return Profile The profile that matches the message
*/
2008-12-23 05:13:04 +09:00
function getMessageProfile ( $message )
2008-12-23 04:50:41 +09:00
{
return null ;
}
/**
* show a single message in the list format
*
2009-01-21 10:49:47 +09:00
* XXX : This needs to be extracted out into a MessageList similar
* to NoticeList .
*
2008-12-23 04:50:41 +09:00
* @ param Message $message the message to show
*
* @ return void
*/
2008-12-23 05:13:04 +09:00
function showMessage ( $message )
2008-12-23 04:50:41 +09:00
{
2009-01-21 14:27:16 +09:00
$this -> elementStart ( 'li' , array ( 'class' => 'hentry notice' ,
2008-12-23 04:50:41 +09:00
'id' => 'message-' . $message -> id ));
2008-12-23 05:13:04 +09:00
$profile = $this -> getMessageProfile ( $message );
2008-12-23 04:50:41 +09:00
2009-01-21 14:27:16 +09:00
$this -> elementStart ( 'div' , 'entry-title' );
$this -> elementStart ( 'span' , 'vcard author' );
$this -> elementStart ( 'a' , array ( 'href' => $profile -> profileurl ,
'class' => 'url' ));
2008-12-23 04:50:41 +09:00
$avatar = $profile -> getAvatar ( AVATAR_STREAM_SIZE );
2009-01-21 10:49:47 +09:00
$this -> element ( 'img' , array ( 'src' => ( $avatar ) ?
2009-02-06 17:13:08 +09:00
$avatar -> displayUrl () :
Avatar :: defaultImage ( AVATAR_STREAM_SIZE ),
2009-01-21 14:27:16 +09:00
'class' => 'photo avatar' ,
2008-12-23 04:50:41 +09:00
'width' => AVATAR_STREAM_SIZE ,
'height' => AVATAR_STREAM_SIZE ,
'alt' =>
( $profile -> fullname ) ? $profile -> fullname :
$profile -> nickname ));
2009-01-21 14:27:16 +09:00
$this -> element ( 'span' , array ( 'class' => 'nickname fn' ),
$profile -> nickname );
2009-01-21 10:49:47 +09:00
$this -> elementEnd ( 'a' );
2009-01-21 14:27:16 +09:00
$this -> elementEnd ( 'span' );
2008-12-23 04:50:41 +09:00
// FIXME: URL, image, video, audio
2009-01-21 14:27:16 +09:00
$this -> elementStart ( 'p' , array ( 'class' => 'entry-content' ));
2009-01-21 10:49:47 +09:00
$this -> raw ( $message -> rendered );
$this -> elementEnd ( 'p' );
2009-01-21 14:27:16 +09:00
$this -> elementEnd ( 'div' );
2008-12-23 04:50:41 +09:00
$messageurl = common_local_url ( 'showmessage' ,
array ( 'message' => $message -> id ));
// XXX: we need to figure this out better. Is this right?
if ( strcmp ( $message -> uri , $messageurl ) != 0 &&
preg_match ( '/^http/' , $message -> uri )) {
$messageurl = $message -> uri ;
}
2009-01-21 14:27:16 +09:00
$this -> elementStart ( 'div' , 'entry-content' );
$this -> elementStart ( 'dl' , 'timestamp' );
$this -> element ( 'dt' , null , _ ( 'Published' ));
$this -> elementStart ( 'dd' , null );
$dt = common_date_iso8601 ( $message -> created );
$this -> elementStart ( 'a' , array ( 'rel' => 'bookmark' ,
'href' => $messageurl ));
$this -> element ( 'abbr' , array ( 'class' => 'published' ,
'title' => $dt ),
common_date_string ( $message -> created ));
$this -> elementEnd ( 'a' );
$this -> elementEnd ( 'dd' );
$this -> elementEnd ( 'dl' );
2008-12-23 04:50:41 +09:00
if ( $message -> source ) {
2009-01-21 14:27:16 +09:00
$this -> elementStart ( 'dl' , 'device' );
$this -> elementStart ( 'dt' );
$this -> text ( _ ( 'From' ));
$this -> elementEnd ( 'dt' );
2009-01-21 10:49:47 +09:00
$this -> showSource ( $message -> source );
2009-01-21 14:27:16 +09:00
$this -> elementEnd ( 'dl' );
2008-12-23 04:50:41 +09:00
}
2009-01-21 14:27:16 +09:00
$this -> elementEnd ( 'div' );
2008-12-23 04:50:41 +09:00
2009-01-21 10:49:47 +09:00
$this -> elementEnd ( 'li' );
2008-12-23 04:50:41 +09:00
}
2009-01-21 10:49:47 +09:00
/**
* Show the page notice
*
* Shows instructions for the page
*
* @ return void
*/
function showPageNotice ()
{
$instr = $this -> getInstructions ();
$output = common_markup_to_html ( $instr );
$this -> elementStart ( 'div' , 'instructions' );
$this -> raw ( $output );
$this -> elementEnd ( 'div' );
}
/**
* Show the source of the message
*
* Returns either the name ( and link ) of the API client that posted the notice ,
* or one of other other channels .
*
2009-05-24 12:40:11 +09:00
* @ param string $source the source of the message
2009-01-21 10:49:47 +09:00
*
* @ return void
*/
2009-05-24 12:40:11 +09:00
function showSource ( $source )
2009-01-21 10:49:47 +09:00
{
$source_name = _ ( $source );
switch ( $source ) {
case 'web' :
case 'xmpp' :
case 'mail' :
case 'omb' :
case 'api' :
2009-01-21 14:27:16 +09:00
$this -> element ( 'dd' , null , $source_name );
2009-01-21 10:49:47 +09:00
break ;
default :
$ns = Notice_source :: staticGet ( $source );
if ( $ns ) {
2009-01-21 14:27:16 +09:00
$this -> elementStart ( 'dd' , null );
$this -> element ( 'a' , array ( 'href' => $ns -> url ,
'rel' => 'external' ),
2009-01-21 10:49:47 +09:00
$ns -> name );
2009-01-21 14:27:16 +09:00
$this -> elementEnd ( 'dd' );
2009-01-21 10:49:47 +09:00
} else {
2009-01-21 14:27:16 +09:00
$this -> element ( 'dd' , null , $source_name );
2009-01-21 10:49:47 +09:00
}
break ;
}
return ;
}
2008-09-17 04:53:46 +09:00
}