2010-09-09 05:14:17 +02:00
< ? php
function display_content ( & $a ) {
2010-11-03 06:21:49 +01:00
$o = '<div id="live-display"></div>' . " \r \n " ;
2010-12-12 23:33:04 +01:00
$nick = (( $a -> argc > 1 ) ? $a -> argv [ 1 ] : '' );
profile_load ( $a , $nick );
2010-09-09 05:14:17 +02:00
$item_id = (( $a -> argc > 2 ) ? intval ( $a -> argv [ 2 ]) : 0 );
if ( ! $item_id ) {
$a -> error = 404 ;
notice ( t ( 'Item not found.' ) . EOL );
return ;
}
require_once ( " include/bbcode.php " );
require_once ( 'include/security.php' );
$groups = array ();
$tab = 'posts' ;
$contact = null ;
$remote_contact = false ;
if ( remote_user ()) {
$contact_id = $_SESSION [ 'visitor_id' ];
$groups = init_groups_visitor ( $contact_id );
$r = q ( " SELECT * FROM `contact` WHERE `id` = %d AND `uid` = %d LIMIT 1 " ,
intval ( $contact_id ),
intval ( $a -> profile [ 'uid' ])
);
if ( count ( $r )) {
$contact = $r [ 0 ];
$remote_contact = true ;
}
}
if ( ! $remote_contact ) {
if ( local_user ()) {
$contact_id = $_SESSION [ 'cid' ];
$contact = $a -> contact ;
}
}
$sql_extra = "
AND `allow_cid` = ''
AND `allow_gid` = ''
AND `deny_cid` = ''
AND `deny_gid` = ''
" ;
// Profile owner - everything is visible
2010-10-18 23:34:59 +02:00
if ( local_user () && ( local_user () == $a -> profile [ 'uid' ])) {
2010-09-09 05:14:17 +02:00
$sql_extra = '' ;
}
// authenticated visitor - here lie dragons
// If $remotecontact is true, we know that not only is this a remotely authenticated
// person, but that it is *our* contact, which is important in multi-user mode.
elseif ( $remote_contact ) {
$gs = '<<>>' ; // should be impossible to match
if ( count ( $groups )) {
foreach ( $groups as $g )
$gs .= '|<' . intval ( $g ) . '>' ;
}
$sql_extra = sprintf (
" AND ( `allow_cid` = '' OR `allow_cid` REGEXP '<%d>' )
AND ( `deny_cid` = '' OR NOT `deny_cid` REGEXP '<%d>' )
AND ( `allow_gid` = '' OR `allow_gid` REGEXP '%s' )
2010-09-10 03:49:19 +02:00
AND ( `deny_gid` = '' OR NOT `deny_gid` REGEXP '%s' ) " ,
2010-09-09 05:14:17 +02:00
intval ( $_SESSION [ 'visitor_id' ]),
intval ( $_SESSION [ 'visitor_id' ]),
dbesc ( $gs ),
dbesc ( $gs )
);
}
$r = q ( " SELECT `item`.*, `item`.`id` AS `item_id`,
2010-09-29 07:12:27 +02:00
`contact` . `name` , `contact` . `photo` , `contact` . `url` , `contact` . `rel` ,
2010-10-18 09:43:49 +02:00
`contact` . `network` , `contact` . `thumb` , `contact` . `self` ,
2010-09-09 05:14:17 +02:00
`contact` . `id` AS `cid` , `contact` . `uid` AS `contact-uid`
FROM `item` LEFT JOIN `contact` ON `contact` . `id` = `item` . `contact-id`
WHERE `item` . `uid` = % d AND `item` . `visible` = 1 AND `item` . `deleted` = 0
AND `contact` . `blocked` = 0 AND `contact` . `pending` = 0
2011-01-19 23:19:40 +01:00
AND `item` . `parent` = ( SELECT `parent` FROM `item` WHERE ( `id` = '%s' OR `uri` = '%s' ))
2010-09-09 05:14:17 +02:00
$sql_extra
2010-09-17 12:10:19 +02:00
ORDER BY `parent` DESC , `gravity` ASC , `id` ASC " ,
2010-09-09 05:14:17 +02:00
intval ( $a -> profile [ 'uid' ]),
2010-09-10 03:49:19 +02:00
dbesc ( $item_id ),
dbesc ( $item_id )
2010-09-09 05:14:17 +02:00
);
2010-11-03 06:21:49 +01:00
2010-09-23 03:00:19 +02:00
$cmnt_tpl = load_view_file ( 'view/comment_item.tpl' );
$like_tpl = load_view_file ( 'view/like.tpl' );
$tpl = load_view_file ( 'view/wall_item.tpl' );
$wallwall = load_view_file ( 'view/wallwall_item.tpl' );
2010-09-09 05:14:17 +02:00
$return_url = $_SESSION [ 'return_url' ] = $a -> cmd ;
2010-09-17 12:10:19 +02:00
$alike = array ();
$dlike = array ();
2010-09-09 05:14:17 +02:00
if ( count ( $r )) {
2010-09-17 12:10:19 +02:00
2010-11-03 06:21:49 +01:00
if (( local_user ()) && ( local_user () == $a -> profile [ 'uid' ])) {
q ( " UPDATE `item` SET `unseen` = 0
WHERE `parent` = % d AND `unseen` = 1 " ,
intval ( $r [ 0 ][ 'parent' ])
);
}
2010-09-17 12:10:19 +02:00
foreach ( $r as $item ) {
2010-11-01 00:38:22 +01:00
like_puller ( $a , $item , $alike , 'like' );
like_puller ( $a , $item , $dlike , 'dislike' );
2010-09-17 12:10:19 +02:00
}
2010-09-09 05:14:17 +02:00
foreach ( $r as $item ) {
2010-11-04 03:47:07 +01:00
2010-09-09 05:14:17 +02:00
$template = $tpl ;
2010-11-04 03:47:07 +01:00
$comment = '' ;
$owner_url = '' ;
$owner_photo = '' ;
$owner_name = '' ;
2010-09-09 05:14:17 +02:00
$redirect_url = $a -> get_baseurl () . '/redir/' . $item [ 'cid' ] ;
2010-11-01 00:38:22 +01:00
if ((( activity_match ( $item [ 'verb' ], ACTIVITY_LIKE )) || ( activity_match ( $item [ 'verb' ], ACTIVITY_DISLIKE )))
&& ( $item [ 'id' ] != $item [ 'parent' ]))
2010-09-17 12:10:19 +02:00
continue ;
2010-09-09 05:14:17 +02:00
2010-12-08 05:47:53 +01:00
$lock = ((( $item [ 'private' ]) || (( $item [ 'uid' ] == local_user ()) && ( strlen ( $item [ 'allow_cid' ]) || strlen ( $item [ 'allow_gid' ])
|| strlen ( $item [ 'deny_cid' ]) || strlen ( $item [ 'deny_gid' ]))))
2010-09-30 07:11:26 +02:00
? '<div class="wall-item-lock"><img src="images/lock_icon.gif" class="lockview" alt="' . t ( 'Private Message' ) . '" onclick="lockview(event,' . $item [ 'id' ] . ');" /></div>'
2010-09-29 07:12:27 +02:00
: '<div class="wall-item-lock"></div>' );
2010-09-09 05:14:17 +02:00
if ( can_write_wall ( $a , $a -> profile [ 'uid' ])) {
2010-10-01 01:06:53 +02:00
if ( $item [ 'id' ] == $item [ 'parent' ]) {
$likebuttons = replace_macros ( $like_tpl , array ( '$id' => $item [ 'id' ]));
}
2010-09-09 05:14:17 +02:00
if ( $item [ 'last-child' ]) {
$comment = replace_macros ( $cmnt_tpl , array (
2011-02-17 06:17:49 +01:00
'$return_path' => '' ,
'$jsreload' => $_SESSION [ 'return_url' ],
2010-09-09 05:14:17 +02:00
'$type' => 'wall-comment' ,
'$id' => $item [ 'item_id' ],
'$parent' => $item [ 'parent' ],
'$profile_uid' => $a -> profile [ 'uid' ],
'$mylink' => $contact [ 'url' ],
2010-09-28 04:58:37 +02:00
'$mytitle' => t ( 'This is you' ),
2010-09-09 05:14:17 +02:00
'$myphoto' => $contact [ 'thumb' ],
'$ww' => ''
));
}
}
$profile_url = $item [ 'url' ];
2010-09-28 04:48:45 +02:00
$sparkle = '' ;
2010-09-09 05:14:17 +02:00
$redirect_url = $a -> get_baseurl () . '/redir/' . $item [ 'cid' ] ;
2011-01-24 06:26:09 +01:00
// I think this is redundant now but too chicken to remove it unless
// I've had six cups of coffee and tested it completely
2010-10-18 09:43:49 +02:00
if (( $item [ 'network' ] === 'dfrn' ) && ( ! $item [ 'self' ] )) {
2010-09-28 04:48:45 +02:00
$profile_url = $redirect_url ;
$sparkle = ' sparkle' ;
}
2010-09-09 05:14:17 +02:00
// Top-level wall post not written by the wall owner (wall-to-wall)
// First figure out who owns it.
2010-09-28 04:48:45 +02:00
$osparkle = '' ;
2010-09-09 05:14:17 +02:00
if (( $item [ 'parent' ] == $item [ 'item_id' ]) && ( ! $item [ 'self' ])) {
2010-09-27 02:24:20 +02:00
if ( $item [ 'type' ] === 'wall' ) {
2010-09-09 05:14:17 +02:00
// I do. Put me on the left of the wall-to-wall notice.
$owner_url = $a -> contact [ 'url' ];
$owner_photo = $a -> contact [ 'thumb' ];
$owner_name = $a -> contact [ 'name' ];
$template = $wallwall ;
$commentww = 'ww' ;
}
2010-09-27 02:24:20 +02:00
if ( $item [ 'type' ] === 'remote' && ( $item [ 'owner-link' ] != $item [ 'author-link' ])) {
2010-09-09 05:14:17 +02:00
// Could be anybody.
$owner_url = $item [ 'owner-link' ];
$owner_photo = $item [ 'owner-avatar' ];
$owner_name = $item [ 'owner-name' ];
$template = $wallwall ;
$commentww = 'ww' ;
// If it is our contact, use a friendly redirect link
2011-01-20 04:51:34 +01:00
if (( link_compare ( $item [ 'owner-link' ], $item [ 'url' ])) && ( $item [ 'network' ] === 'dfrn' )) {
2010-09-09 05:14:17 +02:00
$owner_url = $redirect_url ;
2010-09-28 04:48:45 +02:00
$osparkle = ' sparkle' ;
}
2010-09-09 05:14:17 +02:00
}
}
2011-01-20 04:51:34 +01:00
$diff_author = (( link_compare ( $item [ 'url' ], $item [ 'author-link' ])) ? false : true );
2010-11-22 02:44:59 +01:00
$profile_name = ((( strlen ( $item [ 'author-name' ])) && $diff_author ) ? $item [ 'author-name' ] : $item [ 'name' ]);
2010-12-01 23:01:04 +01:00
$profile_avatar = ((( strlen ( $item [ 'author-avatar' ])) && $diff_author ) ? $item [ 'author-avatar' ] : $item [ 'thumb' ]);
2010-11-22 02:44:59 +01:00
2011-01-24 06:26:09 +01:00
// Can we use our special contact URL for this author?
if ( strlen ( $item [ 'author-link' ])) {
if (( link_compare ( $item [ 'author-link' ], $item [ 'url' ])) && ( $item [ 'network' ] === 'dfrn' ) && ( ! $item [ 'self' ])) {
$profile_link = $redirect_url ;
$sparkle = ' sparkle' ;
}
else {
$profile_link = $item [ 'author-link' ];
$sparkle = '' ;
}
}
2010-09-09 05:14:17 +02:00
2010-11-09 05:15:42 +01:00
if (( $item [ 'contact-id' ] == remote_user ()) || ( $item [ 'uid' ] == local_user ()))
2011-02-24 11:46:06 +01:00
$drop = replace_macros ( load_view_file ( 'view/wall_item_drop.tpl' ), array ( '$id' => $item [ 'id' ], '$delete' => t ( 'Delete' )));
2010-10-01 01:06:53 +02:00
else
$drop = replace_macros ( load_view_file ( 'view/wall_fake_drop.tpl' ), array ( '$id' => $item [ 'id' ]));
2010-09-09 05:14:17 +02:00
2010-11-04 03:47:07 +01:00
$like = (( isset ( $alike [ $item [ 'id' ]])) ? format_like ( $alike [ $item [ 'id' ]], $alike [ $item [ 'id' ] . '-l' ], 'like' , $item [ 'id' ]) : '' );
$dislike = (( isset ( $dlike [ $item [ 'id' ]])) ? format_like ( $dlike [ $item [ 'id' ]], $dlike [ $item [ 'id' ] . '-l' ], 'dislike' , $item [ 'id' ]) : '' );
2010-10-20 05:52:05 +02:00
$location = (( $item [ 'location' ]) ? '<a target="map" href="http://maps.google.com/?q=' . urlencode ( $item [ 'location' ]) . '">' . $item [ 'location' ] . '</a>' : '' );
$coord = (( $item [ 'coord' ]) ? '<a target="map" href="http://maps.google.com/?q=' . urlencode ( $item [ 'coord' ]) . '">' . $item [ 'coord' ] . '</a>' : '' );
if ( $coord ) {
if ( $location )
$location .= '<br /><span class="smalltext">(' . $coord . ')</span>' ;
else
$location = '<span class="smalltext">' . $coord . '</span>' ;
}
2010-09-09 05:14:17 +02:00
2010-12-08 01:27:30 +01:00
$indent = (( $item [ 'parent' ] != $item [ 'item_id' ]) ? ' comment' : '' );
if ( strcmp ( datetime_convert ( 'UTC' , 'UTC' , $item [ 'created' ]), datetime_convert ( 'UTC' , 'UTC' , 'now - 12 hours' )) > 0 )
$indent .= ' shiny' ;
2010-12-26 02:46:25 +01:00
$tmp_item = replace_macros ( $template , array (
2010-09-09 05:14:17 +02:00
'$id' => $item [ 'item_id' ],
2011-02-24 11:32:46 +01:00
'$linktitle' => t ( 'View $name\'s profile' ),
'$olinktitle' => t ( 'View $owner_name\'s profile' ),
'$to' => t ( 'to' ),
'$wall' => t ( 'Wall-to-Wall' ),
'$vwall' => t ( 'via Wall-To-Wall:' ),
2010-09-09 05:14:17 +02:00
'$profile_url' => $profile_link ,
'$name' => $profile_name ,
2010-09-28 04:48:45 +02:00
'$sparkle' => $sparkle ,
'$osparkle' => $osparkle ,
2010-09-09 05:14:17 +02:00
'$thumb' => $profile_avatar ,
'$title' => $item [ 'title' ],
2010-12-09 02:05:51 +01:00
'$body' => smilies ( bbcode ( $item [ 'body' ])),
2010-09-09 05:14:17 +02:00
'$ago' => relative_date ( $item [ 'created' ]),
2010-09-29 07:12:27 +02:00
'$lock' => $lock ,
2010-10-20 05:52:05 +02:00
'$location' => $location ,
2010-12-08 01:27:30 +01:00
'$indent' => $indent ,
2010-09-10 03:49:19 +02:00
'$owner_url' => $owner_url ,
'$owner_photo' => $owner_photo ,
'$owner_name' => $owner_name ,
2011-02-16 11:07:11 +01:00
'$plink' => get_plink ( $item ),
2010-09-09 05:14:17 +02:00
'$drop' => $drop ,
2010-09-17 12:10:19 +02:00
'$vote' => $likebuttons ,
'$like' => $like ,
'$dislike' => $dislike ,
2010-09-09 05:14:17 +02:00
'$comment' => $comment
));
2010-09-10 03:49:19 +02:00
2010-12-26 02:46:25 +01:00
$arr = array ( 'item' => $item , 'output' => $tmp_item );
call_hooks ( 'display_item' , $arr );
$o .= $arr [ 'output' ];
2010-09-09 05:14:17 +02:00
}
}
2010-09-17 12:10:19 +02:00
else {
$r = q ( " SELECT `id` FROM `item` WHERE `id` = '%s' OR `uri` = '%s' LIMIT 1 " ,
dbesc ( $item_id ),
dbesc ( $item_id )
);
if ( count ( $r )) {
if ( $r [ 0 ][ 'deleted' ]) {
notice ( t ( 'Item has been removed.' ) . EOL );
}
else {
notice ( t ( 'Permission denied.' ) . EOL );
}
}
else {
notice ( t ( 'Item not found.' ) . EOL );
}
}
2011-01-23 23:56:14 +01:00
$o .= '<div class="cc-license">' . t ( 'Shared content is covered by the <a href="http://creativecommons.org/licenses/by/3.0/">Creative Commons Attribution 3.0</a> license.' ) . '</div>' ;
2010-09-09 05:14:17 +02:00
return $o ;
2010-09-17 12:10:19 +02:00
}