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
*/
2009-08-26 15:41:36 +01:00
if ( ! defined ( 'STATUSNET' ) && ! defined ( 'LACONICA' )) {
2009-01-19 16:56:41 +00:00
exit ( 1 );
}
2008-05-07 17:48:07 +01:00
2009-01-19 16:56:41 +00:00
require_once INSTALLDIR . '/lib/personalgroupnav.php' ;
require_once INSTALLDIR . '/lib/noticelist.php' ;
2009-01-21 18:03:33 +00:00
require_once INSTALLDIR . '/lib/profileminilist.php' ;
2009-01-21 18:33:06 +00:00
require_once INSTALLDIR . '/lib/groupminilist.php' ;
2009-01-19 16:56:41 +00:00
require_once INSTALLDIR . '/lib/feedlist.php' ;
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
*/
2008-05-09 03:16:04 +01:00
2009-04-07 22:47:08 +01:00
class ShowstreamAction extends ProfileAction
2008-12-23 19:49:23 +00:00
{
2009-04-13 20:49:26 +01:00
function isReadOnly ( $args )
2009-01-23 08:45:48 +00:00
{
return true ;
}
2009-01-19 16:56:41 +00:00
function title ()
2008-12-23 19:33:23 +00:00
{
2009-03-30 14:58:28 +01:00
if ( ! empty ( $this -> profile -> fullname )) {
$base = $this -> profile -> fullname . ' (' . $this -> user -> nickname . ') ' ;
} else {
$base = $this -> user -> nickname ;
}
2009-05-18 22:18:57 +01:00
if ( ! empty ( $this -> tag )) {
$base .= sprintf ( _ ( ' tagged %s' ), $this -> tag );
}
2009-03-30 14:58:28 +01:00
2009-01-19 16:56:41 +00:00
if ( $this -> page == 1 ) {
2009-03-30 14:58:28 +01:00
return $base ;
2009-01-19 16:56:41 +00:00
} else {
return sprintf ( _ ( " %s, page %d " ),
2009-03-30 14:58:28 +01:00
$base ,
2009-01-19 16:56:41 +00:00
$this -> page );
}
}
2008-05-17 20:24:47 +01:00
2009-01-19 16:56:41 +00:00
function handle ( $args )
{
2008-12-23 19:19:07 +00:00
2009-01-19 16:56:41 +00:00
// Looks like we're good; start output
2008-12-23 19:19:07 +00:00
2009-01-19 16:56:41 +00:00
// For YADIS discovery, we also have a <meta> tag
2008-12-23 19:19:07 +00:00
2009-01-19 16:56:41 +00:00
header ( 'X-XRDS-Location: ' . common_local_url ( 'xrds' , array ( 'nickname' =>
$this -> user -> nickname )));
2008-12-23 19:19:07 +00:00
2009-01-19 16:56:41 +00:00
$this -> showPage ();
2008-12-23 19:19:07 +00:00
}
2009-01-19 16:56:41 +00:00
function showContent ()
2008-12-23 19:33:23 +00:00
{
2009-01-19 16:56:41 +00:00
$this -> showProfile ();
$this -> showNotices ();
}
2008-12-23 19:19:07 +00:00
2009-01-19 16:56:41 +00:00
function showLocalNav ()
{
$nav = new PersonalGroupNav ( $this );
$nav -> show ();
}
2008-12-23 19:19:07 +00:00
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' ,
array ( 'nickname' => $this -> user -> nickname ,
'tag' => $this -> tag )),
sprintf ( _ ( 'Notice feed for %s tagged %s (RSS 1.0)' ),
$this -> user -> nickname , $this -> tag )));
2009-05-18 23:18:08 +01:00
}
2009-02-11 16:37:50 +00:00
return array ( new Feed ( Feed :: RSS1 ,
common_local_url ( 'userrss' ,
array ( 'nickname' => $this -> user -> nickname )),
sprintf ( _ ( 'Notice feed for %s (RSS 1.0)' ),
$this -> user -> nickname )),
new Feed ( Feed :: RSS2 ,
common_local_url ( 'api' ,
array ( 'apiaction' => 'statuses' ,
'method' => 'user_timeline' ,
'argument' => $this -> user -> nickname . '.rss' )),
sprintf ( _ ( 'Notice feed for %s (RSS 2.0)' ),
$this -> user -> nickname )),
new Feed ( Feed :: ATOM ,
common_local_url ( 'api' ,
array ( 'apiaction' => 'statuses' ,
'method' => 'user_timeline' ,
'argument' => $this -> user -> nickname . '.atom' )),
sprintf ( _ ( 'Notice feed for %s (Atom)' ),
$this -> user -> nickname )),
new Feed ( Feed :: FOAF ,
common_local_url ( 'foaf' , array ( 'nickname' =>
$this -> user -> nickname )),
sprintf ( _ ( 'FOAF for %s' ), $this -> user -> nickname )));
2009-01-19 16:56:41 +00:00
}
function extraHead ()
{
// for remote subscriptions etc.
2009-01-15 22:57:15 +00:00
$this -> element ( 'meta' , array ( 'http-equiv' => 'X-XRDS-Location' ,
2008-12-23 19:19:07 +00:00
'content' => common_local_url ( 'xrds' , array ( 'nickname' =>
2009-02-09 17:07:21 +00:00
$this -> user -> nickname ))));
2009-01-19 16:56:41 +00:00
if ( $this -> profile -> bio ) {
2009-01-15 22:57:15 +00:00
$this -> element ( 'meta' , array ( 'name' => 'description' ,
2009-01-19 16:56:41 +00:00
'content' => $this -> profile -> bio ));
2008-12-23 19:19:07 +00:00
}
2009-01-19 16:56:41 +00:00
if ( $this -> user -> emailmicroid && $this -> user -> email && $this -> profile -> profileurl ) {
$id = new Microid ( 'mailto:' . $this -> user -> email ,
$this -> selfUrl ());
2009-01-15 22:57:15 +00:00
$this -> element ( 'meta' , array ( 'name' => 'microid' ,
2009-01-19 16:56:41 +00:00
'content' => $id -> toString ()));
2008-12-23 19:19:07 +00:00
}
2009-01-19 16:56:41 +00:00
if ( $this -> user -> jabbermicroid && $this -> user -> jabber && $this -> profile -> profileurl ) {
$id = new Microid ( 'xmpp:' . $this -> user -> jabber ,
$this -> selfUrl ());
2009-01-15 22:57:15 +00:00
$this -> element ( 'meta' , array ( 'name' => 'microid' ,
2009-01-19 16:56:41 +00:00
'content' => $id -> toString ()));
2008-12-23 19:19:07 +00:00
}
2009-01-19 16:56:41 +00:00
// See https://wiki.mozilla.org/Microsummaries
2008-12-23 19:19:07 +00:00
2009-01-15 22:57:15 +00:00
$this -> element ( 'link' , array ( 'rel' => 'microsummary' ,
2008-12-23 19:19:07 +00:00
'href' => common_local_url ( 'microsummary' ,
2009-01-19 16:56:41 +00:00
array ( 'nickname' => $this -> profile -> nickname ))));
2008-12-23 19:19:07 +00:00
}
2009-01-19 16:56:41 +00:00
function showProfile ()
2008-12-23 19:33:23 +00:00
{
2009-10-09 20:28:12 +01:00
$this -> showProfileData ();
$this -> showEntityActions ();
}
2009-02-09 17:07:21 +00:00
2009-10-09 20:28:12 +01:00
function showProfileData ()
{
if ( Event :: handle ( 'StartShowLargeProfileSection' , array ( & $this , & $this -> profile ))) {
$this -> elementStart ( 'div' , 'entity_profile vcard author' );
$this -> element ( 'h2' , null , _ ( 'User profile' ));
if ( Event :: handle ( 'StartShowLargeProfileElements' , array ( & $this , & $this -> profile ))) {
$avatar = $this -> profile -> getAvatar ( AVATAR_PROFILE_SIZE );
$this -> elementStart ( 'dl' , 'entity_depiction' );
$this -> element ( 'dt' , null , _ ( 'Photo' ));
$this -> elementStart ( 'dd' );
$this -> element ( 'img' , array ( 'src' => ( $avatar ) ? $avatar -> displayUrl () : Avatar :: defaultImage ( AVATAR_PROFILE_SIZE ),
'class' => 'photo avatar' ,
'width' => AVATAR_PROFILE_SIZE ,
'height' => AVATAR_PROFILE_SIZE ,
'alt' => $this -> profile -> nickname ));
$this -> elementEnd ( 'dd' );
$user = User :: staticGet ( 'id' , $this -> profile -> id );
$cur = common_current_user ();
if ( $cur && $cur -> id == $user -> id ) {
$this -> elementStart ( 'dd' );
$this -> element ( 'a' , array ( 'href' => common_local_url ( 'avatarsettings' )), _ ( 'Edit Avatar' ));
$this -> elementEnd ( 'dd' );
}
2009-01-19 22:40:21 +00:00
2009-10-09 20:28:12 +01:00
$this -> elementEnd ( 'dl' );
$this -> elementStart ( 'dl' , 'entity_nickname' );
$this -> element ( 'dt' , null , _ ( 'Nickname' ));
$this -> elementStart ( 'dd' );
$hasFN = ( $this -> profile -> fullname ) ? 'nickname url uid' : 'fn nickname url uid' ;
$this -> element ( 'a' , array ( 'href' => $this -> profile -> profileurl ,
'rel' => 'me' , 'class' => $hasFN ),
$this -> profile -> nickname );
$this -> elementEnd ( 'dd' );
$this -> elementEnd ( 'dl' );
if ( $this -> profile -> fullname ) {
$this -> elementStart ( 'dl' , 'entity_fn' );
$this -> element ( 'dt' , null , _ ( 'Full name' ));
$this -> elementStart ( 'dd' );
$this -> element ( 'span' , 'fn' , $this -> profile -> fullname );
$this -> elementEnd ( 'dd' );
$this -> elementEnd ( 'dl' );
}
2009-01-19 22:40:21 +00:00
2009-10-09 20:28:12 +01:00
if ( $this -> profile -> location ) {
$this -> elementStart ( 'dl' , 'entity_location' );
$this -> element ( 'dt' , null , _ ( 'Location' ));
$this -> element ( 'dd' , 'label' , $this -> profile -> location );
$this -> elementEnd ( 'dl' );
}
2009-01-19 22:40:21 +00:00
2009-10-09 20:28:12 +01:00
if ( $this -> profile -> homepage ) {
$this -> elementStart ( 'dl' , 'entity_url' );
$this -> element ( 'dt' , null , _ ( 'URL' ));
$this -> elementStart ( 'dd' );
$this -> element ( 'a' , array ( 'href' => $this -> profile -> homepage ,
'rel' => 'me' , 'class' => 'url' ),
$this -> profile -> homepage );
$this -> elementEnd ( 'dd' );
$this -> elementEnd ( 'dl' );
}
2009-01-19 22:40:21 +00:00
2009-10-09 20:28:12 +01:00
if ( $this -> profile -> bio ) {
$this -> elementStart ( 'dl' , 'entity_note' );
$this -> element ( 'dt' , null , _ ( 'Note' ));
$this -> element ( 'dd' , 'note' , $this -> profile -> bio );
$this -> elementEnd ( 'dl' );
}
2009-10-07 10:55:54 +01:00
2009-10-09 20:28:12 +01:00
$tags = Profile_tag :: getTags ( $this -> profile -> id , $this -> profile -> id );
if ( count ( $tags ) > 0 ) {
$this -> elementStart ( 'dl' , 'entity_tags' );
$this -> element ( 'dt' , null , _ ( 'Tags' ));
$this -> elementStart ( 'dd' );
$this -> elementStart ( 'ul' , 'tags xoxo' );
foreach ( $tags as $tag ) {
$this -> elementStart ( 'li' );
// Avoid space by using raw output.
$pt = '<span class="mark_hash">#</span><a rel="tag" href="' .
common_local_url ( 'peopletag' , array ( 'tag' => $tag )) .
'">' . $tag . '</a>' ;
$this -> raw ( $pt );
$this -> elementEnd ( 'li' );
}
$this -> elementEnd ( 'ul' );
$this -> elementEnd ( 'dd' );
$this -> elementEnd ( 'dl' );
}
2008-11-16 02:27:35 +00:00
2009-10-09 20:28:12 +01:00
Event :: handle ( 'EndShowLargeProfileElements' , array ( & $this , & $this -> profile ));
}
2009-02-02 16:33:47 +00:00
2009-10-09 20:28:12 +01:00
$this -> elementEnd ( 'div' );
Event :: handle ( 'EndShowLargeProfileSection' , array ( & $this , & $this -> profile ));
}
}
2009-10-07 10:55:54 +01:00
2009-10-09 20:28:12 +01:00
function showEntityActions ()
{
if ( Event :: handle ( 'StartShowLargeEntityActionsSection' , array ( & $this , & $this -> profile ))) {
2009-02-02 16:33:47 +00:00
2009-10-09 20:28:12 +01:00
$this -> elementStart ( 'div' , 'entity_actions' );
$this -> element ( 'h2' , null , _ ( 'User actions' ));
$this -> elementStart ( 'ul' );
2009-10-07 10:55:54 +01:00
2009-10-09 20:28:12 +01:00
if ( Event :: handle ( 'StartShowLargeEntityActionsElements' , array ( & $this , & $this -> profile ))) {
if ( empty ( $cur )) { // not logged in
$this -> elementStart ( 'li' , 'entity_subscribe' );
$this -> showRemoteSubscribeLink ();
$this -> elementEnd ( 'li' );
2009-01-21 18:03:33 +00:00
} else {
2009-10-09 20:28:12 +01:00
if ( $cur -> id == $this -> profile -> id ) { // your own page
$this -> elementStart ( 'li' , 'entity_edit' );
$this -> element ( 'a' , array ( 'href' => common_local_url ( 'profilesettings' ),
'title' => _ ( 'Edit profile settings' )),
_ ( 'Edit' ));
$this -> elementEnd ( 'li' );
} else { // someone else's page
2009-10-07 10:55:54 +01:00
2009-10-09 20:28:12 +01:00
// subscribe/unsubscribe button
2009-10-07 10:55:54 +01:00
2009-10-09 20:28:12 +01:00
$this -> elementStart ( 'li' , 'entity_subscribe' );
2009-10-07 10:55:54 +01:00
2009-10-09 20:28:12 +01:00
if ( $cur -> isSubscribed ( $this -> profile )) {
$usf = new UnsubscribeForm ( $this , $this -> profile );
$usf -> show ();
} else {
$sf = new SubscribeForm ( $this , $this -> profile );
$sf -> show ();
}
$this -> elementEnd ( 'li' );
2009-10-07 10:55:54 +01:00
2009-10-09 20:28:12 +01:00
if ( $cur -> mutuallySubscribed ( $user )) {
// message
$this -> elementStart ( 'li' , 'entity_send-a-message' );
$this -> element ( 'a' , array ( 'href' => common_local_url ( 'newmessage' , array ( 'to' => $user -> id )),
'title' => _ ( 'Send a direct message to this user' )),
_ ( 'Message' ));
$this -> elementEnd ( 'li' );
// nudge
if ( $user -> email && $user -> emailnotifynudge ) {
$this -> elementStart ( 'li' , 'entity_nudge' );
$nf = new NudgeForm ( $this , $user );
$nf -> show ();
$this -> elementEnd ( 'li' );
}
}
// block/unblock
$blocked = $cur -> hasBlocked ( $this -> profile );
$this -> elementStart ( 'li' , 'entity_block' );
if ( $blocked ) {
$ubf = new UnblockForm ( $this , $this -> profile ,
array ( 'action' => 'showstream' ,
'nickname' => $this -> profile -> nickname ));
$ubf -> show ();
} else {
$bf = new BlockForm ( $this , $this -> profile ,
array ( 'action' => 'showstream' ,
'nickname' => $this -> profile -> nickname ));
$bf -> show ();
}
2009-10-07 10:55:54 +01:00
$this -> elementEnd ( 'li' );
}
}
2009-10-09 20:28:12 +01:00
Event :: handle ( 'EndShowLargeEntityActionsElements' , array ( & $this , & $this -> profile ));
2009-01-21 06:31:53 +00:00
}
2009-10-09 20:28:12 +01:00
$this -> elementEnd ( 'ul' );
$this -> elementEnd ( 'div' );
Event :: handle ( 'EndShowLargeEntityActionsSection' , array ( & $this , & $this -> profile ));
}
2008-12-23 19:19:07 +00:00
}
2009-01-19 16:56:41 +00:00
function showRemoteSubscribeLink ()
2008-12-23 19:33:23 +00:00
{
2008-12-23 19:19:07 +00:00
$url = common_local_url ( 'remotesubscribe' ,
2009-01-19 16:56:41 +00:00
array ( 'nickname' => $this -> profile -> nickname ));
2009-01-15 22:57:15 +00:00
$this -> element ( 'a' , array ( 'href' => $url ,
2009-01-23 05:23:28 +00:00
'class' => 'entity_remote_subscribe' ),
2008-12-23 19:19:07 +00:00
_ ( 'Subscribe' ));
}
2009-04-08 00:14:02 +01:00
function showEmptyListMessage ()
{
$message = sprintf ( _ ( 'This is the timeline for %s but %s hasn\'t posted anything yet.' ), $this -> user -> nickname , $this -> user -> nickname ) . ' ' ;
if ( common_logged_in ()) {
$current_user = common_current_user ();
if ( $this -> user -> id === $current_user -> id ) {
$message .= _ ( 'Seen anything interesting recently? You haven\'t posted any notices yet, now would be a good time to start :)' );
} else {
$message .= sprintf ( _ ( 'You can try to nudge %s or [post something to his or her attention](%%%%action.newnotice%%%%?status_textarea=%s).' ), $this -> user -> nickname , '@' . $this -> user -> nickname );
}
}
else {
2009-08-21 21:45:42 +01: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 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
{
2009-05-18 22:18:57 +01:00
$notice = empty ( $this -> tag )
2009-10-07 10:55:54 +01:00
? $this -> user -> getNotices (( $this -> page - 1 ) * NOTICES_PER_PAGE , NOTICES_PER_PAGE + 1 )
2009-06-17 23:04:57 +01:00
: $this -> user -> getTaggedNotices ( $this -> tag , ( $this -> page - 1 ) * NOTICES_PER_PAGE , NOTICES_PER_PAGE + 1 , 0 , 0 , null );
2009-01-19 16:56:41 +00:00
$pnl = new ProfileNoticeList ( $notice , $this );
$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
2009-09-16 10:07:33 +01:00
$args = array ( 'nickname' => $this -> user -> nickname );
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 ,
2009-09-16 10:07:33 +01:00
'showstream' , $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' ))) {
$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%%%%))' ),
$this -> user -> nickname , $this -> user -> nickname );
2009-03-19 21:55:03 +00:00
} else {
$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. ' ),
$this -> user -> nickname , $this -> user -> nickname );
}
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
}
2009-04-07 22:47:08 +01:00
function showSections ()
{
parent :: showSections ();
$cloud = new PersonalTagCloudSection ( $this , $this -> user );
$cloud -> show ();
}
2008-12-11 23:12:52 +00:00
}
2008-06-10 15:37:09 +01:00
2009-01-19 16:56:41 +00:00
// We don't show the author for a profile, since we already know who it is!
2008-07-30 04:39:39 +01:00
2008-12-23 19:49:23 +00:00
class ProfileNoticeList extends NoticeList
{
2008-12-23 19:33:23 +00:00
function newListItem ( $notice )
{
2009-01-19 16:56:41 +00:00
return new ProfileNoticeListItem ( $notice , $this -> out );
2008-12-11 23:12:52 +00:00
}
}
2008-12-03 03:59:47 +00:00
2008-12-23 19:49:23 +00:00
class ProfileNoticeListItem extends NoticeListItem
{
2008-12-23 19:33:23 +00:00
function showAuthor ()
{
2008-12-11 23:12:52 +00:00
return ;
}
2008-11-16 02:27:35 +00:00
}