2011-04-11 06:21:16 +02:00
< ? php
2011-04-18 17:37:02 +02:00
/**
* Render actions localized
*/
function localize_item ( & $item ){
2011-07-08 01:56:44 +02:00
if ( $item [ 'verb' ] === ACTIVITY_LIKE || $item [ 'verb' ] === ACTIVITY_DISLIKE ){
2011-04-18 17:37:02 +02:00
2011-04-18 20:38:48 +02:00
$r = q ( " SELECT * from `item`,`contact` WHERE
`item` . `contact-id` = `contact` . `id` AND `item` . `uri` = '%s' ; " ,
dbesc ( $item [ 'parent-uri' ]));
if ( count ( $r ) == 0 ) return ;
$obj = $r [ 0 ];
2011-04-18 17:37:02 +02:00
$author = '[url=' . $item [ 'author-link' ] . ']' . $item [ 'author-name' ] . '[/url]' ;
2011-04-18 20:38:48 +02:00
$objauthor = '[url=' . $obj [ 'author-link' ] . ']' . $obj [ 'author-name' ] . '[/url]' ;
2011-04-18 17:37:02 +02:00
2011-07-07 14:02:58 +02:00
switch ( $obj [ 'verb' ]){
2011-07-08 01:56:44 +02:00
case ACTIVITY_POST :
2011-07-07 14:02:58 +02:00
switch ( $obj [ 'object-type' ]){
2011-07-08 01:56:44 +02:00
case ACTIVITY_OBJ_EVENT :
2011-07-07 14:02:58 +02:00
$post_type = t ( 'event' );
break ;
default :
$post_type = t ( 'status' );
}
break ;
default :
if ( $obj [ 'resource-id' ]){
$post_type = t ( 'photo' );
$m = array (); preg_match ( " / \ [url=([^]]*) \ ]/ " , $obj [ 'body' ], $m );
$rr [ 'plink' ] = $m [ 1 ];
} else {
$post_type = t ( 'status' );
}
}
2011-04-18 20:38:48 +02:00
$plink = '[url=' . $obj [ 'plink' ] . ']' . $post_type . '[/url]' ;
2011-04-18 17:37:02 +02:00
switch ( $item [ 'verb' ]){
2011-07-08 01:56:44 +02:00
case ACTIVITY_LIKE :
2011-04-18 17:37:02 +02:00
$bodyverb = t ( '%1$s likes %2$s\'s %3$s' );
break ;
2011-07-08 01:56:44 +02:00
case ACTIVITY_DISLIKE :
2011-04-18 17:37:02 +02:00
$bodyverb = t ( '%1$s doesn\'t like %2$s\'s %3$s' );
break ;
}
2011-04-18 20:38:48 +02:00
$item [ 'body' ] = sprintf ( $bodyverb , $author , $objauthor , $plink );
2011-04-18 17:37:02 +02:00
}
2011-07-08 01:56:44 +02:00
if ( $item [ 'verb' ] === ACTIVITY_FRIEND ){
2011-04-18 17:37:02 +02:00
2011-07-08 01:56:44 +02:00
if ( $item [ 'object-type' ] == " " || $item [ 'object-type' ] !== ACTIVITY_OBJ_PERSON ) return ;
2011-04-20 13:50:12 +02:00
$Aname = $item [ 'author-name' ];
$Alink = $item [ 'author-link' ];
$xmlhead = " < " . " ?xml version='1.0' encoding='UTF-8' ? " . " > " ;
$obj = parse_xml_string ( $xmlhead . $item [ 'object' ]);
$links = parse_xml_string ( $xmlhead . " <links> " . unxmlify ( $obj -> link ) . " </links> " );
$Bname = $obj -> title ;
$Blink = " " ; $Bphoto = " " ;
foreach ( $links -> link as $l ){
$atts = $l -> attributes ();
switch ( $atts [ 'rel' ]){
case " alternate " : $Blink = $atts [ 'href' ];
case " photo " : $Bphoto = $atts [ 'href' ];
}
}
$A = '[url=' . $Alink . ']' . $Aname . '[/url]' ;
$B = '[url=' . $Blink . ']' . $Bname . '[/url]' ;
if ( $Bphoto != " " ) $Bphoto = '[url=' . $Blink . '][img]' . $Bphoto . '[/img][/url]' ;
2011-04-20 14:00:58 +02:00
$item [ 'body' ] = sprintf ( t ( '%1$s is now friends with %2$s' ), $A , $B ) . " \n \n \n " . $Bphoto ;
2011-04-18 17:37:02 +02:00
2011-04-18 20:38:48 +02:00
}
2011-08-27 00:21:21 +02:00
2011-04-18 17:37:02 +02:00
}
2011-04-13 02:58:16 +02:00
/**
* " Render " a conversation or list of items for HTML display .
* There are two major forms of display :
* - Sequential or unthreaded ( " New Item View " or search results )
* - conversation view
* The $mode parameter decides between the various renderings and also
* figures out how to determine page owner and other contextual items
* that are based on unique features of the calling module .
*
*/
2011-04-12 00:45:19 +02:00
function conversation ( & $a , $items , $mode , $update ) {
2011-04-11 06:21:16 +02:00
require_once ( 'bbcode.php' );
2011-04-11 08:01:38 +02:00
$profile_owner = 0 ;
2011-04-12 05:11:21 +02:00
$page_writeable = false ;
2011-04-11 08:01:38 +02:00
if ( $mode === 'network' ) {
$profile_owner = local_user ();
2011-04-12 05:11:21 +02:00
$page_writeable = true ;
2011-04-11 08:01:38 +02:00
}
if ( $mode === 'profile' ) {
$profile_owner = $a -> profile [ 'profile_uid' ];
2011-04-12 05:11:21 +02:00
$page_writeable = can_write_wall ( $a , $profile_owner );
2011-04-11 08:01:38 +02:00
}
2011-05-20 10:15:02 +02:00
if ( $mode === 'notes' ) {
2011-09-12 00:09:57 +02:00
$profile_owner = local_user ();
2011-05-20 10:15:02 +02:00
$page_writeable = true ;
}
2011-04-11 10:31:04 +02:00
if ( $mode === 'display' ) {
$profile_owner = $a -> profile [ 'uid' ];
2011-04-12 05:11:21 +02:00
$page_writeable = can_write_wall ( $a , $profile_owner );
2011-04-11 10:31:04 +02:00
}
2011-07-05 06:52:21 +02:00
if ( $mode === 'community' ) {
$profile_owner = 0 ;
$page_writeable = false ;
}
2011-04-11 10:31:04 +02:00
if ( $update )
$return_url = $_SESSION [ 'return_url' ];
else
$return_url = $_SESSION [ 'return_url' ] = $a -> cmd ;
2011-04-11 08:01:38 +02:00
2011-05-06 15:30:33 +02:00
load_contact_links ( local_user ());
2011-04-11 06:21:16 +02:00
2011-05-11 13:37:13 +02:00
$cmnt_tpl = get_markup_template ( 'comment_item.tpl' );
$like_tpl = get_markup_template ( 'like.tpl' );
$noshare_tpl = get_markup_template ( 'like_noshare.tpl' );
$tpl = get_markup_template ( 'wall_item.tpl' );
$wallwall = get_markup_template ( 'wallwall_item.tpl' );
2011-06-16 05:43:39 +02:00
$droptpl = get_markup_template ( 'wall_item_drop.tpl' );
$fakedrop = get_markup_template ( 'wall_fake_drop.tpl' );
2011-04-11 06:21:16 +02:00
$alike = array ();
$dlike = array ();
2011-04-12 00:45:19 +02:00
if ( count ( $items )) {
2011-04-11 06:21:16 +02:00
2011-07-05 06:52:21 +02:00
if ( $mode === 'network-new' || $mode === 'search' || $mode === 'community' ) {
2011-04-11 06:21:16 +02:00
2011-04-11 10:31:04 +02:00
// "New Item View" on network page or search page results
// - just loop through the items and format them minimally for display
2011-04-11 06:21:16 +02:00
2011-05-11 13:37:13 +02:00
$tpl = get_markup_template ( 'search_item.tpl' );
2011-04-11 06:21:16 +02:00
2011-04-12 00:45:19 +02:00
foreach ( $items as $item ) {
2011-04-11 06:21:16 +02:00
$comment = '' ;
$owner_url = '' ;
$owner_photo = '' ;
$owner_name = '' ;
$sparkle = '' ;
2011-04-11 10:31:04 +02:00
2011-07-06 06:03:37 +02:00
if ( $mode === 'search' || $mode === 'community' ) {
2011-04-11 10:31:04 +02:00
if ((( activity_match ( $item [ 'verb' ], ACTIVITY_LIKE )) || ( activity_match ( $item [ 'verb' ], ACTIVITY_DISLIKE )))
&& ( $item [ 'id' ] != $item [ 'parent' ]))
continue ;
$nickname = $item [ 'nickname' ];
}
else
$nickname = $a -> user [ 'nickname' ];
2011-04-11 06:21:16 +02:00
$profile_name = (( strlen ( $item [ 'author-name' ])) ? $item [ 'author-name' ] : $item [ 'name' ]);
2011-05-06 15:30:33 +02:00
$sp = false ;
$profile_link = best_link_url ( $item , $sp );
if ( $sp )
$sparkle = ' sparkle' ;
2011-04-18 08:27:11 +02:00
if ( $profile_link === 'mailbox' )
$profile_link = '' ;
2011-04-11 06:21:16 +02:00
2011-05-09 10:35:24 +02:00
$normalised = normalise_link (( strlen ( $item [ 'author-link' ])) ? $item [ 'author-link' ] : $item [ 'url' ]);
if (( $normalised != 'mailbox' ) && ( x ( $a -> contacts [ $normalised ])))
$profile_avatar = $a -> contacts [ $normalised ][ 'thumb' ];
else
$profile_avatar = (( strlen ( $item [ 'author-avatar' ])) ? $item [ 'author-avatar' ] : $item [ 'thumb' ]);
2011-04-11 06:21:16 +02:00
$location = (( $item [ 'location' ]) ? '<a target="map" title="' . $item [ 'location' ] . '" href="http://maps.google.com/?q=' . urlencode ( $item [ 'location' ]) . '">' . $item [ 'location' ] . '</a>' : '' );
$coord = (( $item [ 'coord' ]) ? '<a target="map" title="' . $item [ 'coord' ] . '" 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>' ;
}
2011-04-11 08:01:38 +02:00
$drop = '' ;
2011-04-18 17:37:02 +02:00
localize_item ( $item );
2011-07-05 06:52:21 +02:00
if ( $mode === 'network-new' )
$t = $droptpl ;
else
$t = $fakedrop ;
2011-04-11 08:01:38 +02:00
2011-07-05 06:52:21 +02:00
$drop = replace_macros ( $t , array ( '$id' => $item [ 'id' ]));
2011-04-11 06:21:16 +02:00
$lock = '<div class="wall-item-lock"></div>' ;
2011-07-04 04:41:04 +02:00
$star = '' ;
2011-05-25 05:41:29 +02:00
2011-05-25 05:45:02 +02:00
$body = prepare_body ( $item , true );
2011-04-11 06:21:16 +02:00
$o .= replace_macros ( $tpl , array (
'$id' => $item [ 'item_id' ],
2011-09-17 00:40:34 +02:00
'$linktitle' => sprintf ( t ( 'View %s\'s profile @ %s' ), $profile_name , (( strlen ( $item [ 'author-link' ])) ? $item [ 'author-link' ] : $item [ 'url' ])),
2011-04-11 06:21:16 +02:00
'$profile_url' => $profile_link ,
'$item_photo_menu' => item_photo_menu ( $item ),
2011-09-20 04:51:14 +02:00
'$name' => template_escape ( $profile_name ),
2011-04-11 06:21:16 +02:00
'$sparkle' => $sparkle ,
'$lock' => $lock ,
'$thumb' => $profile_avatar ,
2011-09-20 04:51:14 +02:00
'$title' => template_escape ( $item [ 'title' ]),
'$body' => template_escape ( $body ),
2011-06-21 04:08:40 +02:00
'$ago' => (( $item [ 'app' ]) ? sprintf ( t ( '%s from %s' ), relative_date ( $item [ 'created' ]), $item [ 'app' ]) : relative_date ( $item [ 'created' ])),
2011-09-20 04:51:14 +02:00
'$location' => template_escape ( $location ),
2011-04-11 06:21:16 +02:00
'$indent' => '' ,
'$owner_url' => $owner_url ,
'$owner_photo' => $owner_photo ,
2011-09-20 04:51:14 +02:00
'$owner_name' => template_escape ( $owner_name ),
2011-07-04 04:41:04 +02:00
'$star' => $star ,
2011-04-11 06:21:16 +02:00
'$drop' => $drop ,
2011-04-11 10:31:04 +02:00
'$conv' => '<a href="' . $a -> get_baseurl () . '/display/' . $nickname . '/' . $item [ 'id' ] . '">' . t ( 'View in context' ) . '</a>'
2011-04-11 06:21:16 +02:00
));
}
return $o ;
}
// Normal View
// Figure out how many comments each parent has
// (Comments all have gravity of 6)
// Store the result in the $comments array
$comments = array ();
2011-04-12 00:45:19 +02:00
foreach ( $items as $item ) {
2011-05-04 03:05:11 +02:00
if (( intval ( $item [ 'gravity' ]) == 6 ) && ( $item [ 'id' ] != $item [ 'parent' ])) {
2011-04-12 00:45:19 +02:00
if ( ! x ( $comments , $item [ 'parent' ]))
$comments [ $item [ 'parent' ]] = 1 ;
2011-04-11 06:21:16 +02:00
else
2011-04-12 00:45:19 +02:00
$comments [ $item [ 'parent' ]] += 1 ;
2011-04-11 06:21:16 +02:00
}
}
// map all the like/dislike activities for each parent item
// Store these in the $alike and $dlike arrays
2011-04-12 00:45:19 +02:00
foreach ( $items as $item ) {
2011-04-11 06:21:16 +02:00
like_puller ( $a , $item , $alike , 'like' );
like_puller ( $a , $item , $dlike , 'dislike' );
}
$comments_collapsed = false ;
$blowhard = 0 ;
$blowhard_count = 0 ;
2011-04-12 00:45:19 +02:00
foreach ( $items as $item ) {
2011-04-11 06:21:16 +02:00
$comment = '' ;
$template = $tpl ;
$commentww = '' ;
$sparkle = '' ;
$owner_url = $owner_photo = $owner_name = '' ;
// We've already parsed out like/dislike for special treatment. We can ignore them now
if ((( activity_match ( $item [ 'verb' ], ACTIVITY_LIKE ))
|| ( activity_match ( $item [ 'verb' ], ACTIVITY_DISLIKE )))
&& ( $item [ 'id' ] != $item [ 'parent' ]))
continue ;
2011-04-12 05:11:21 +02:00
$toplevelpost = (( $item [ 'id' ] == $item [ 'parent' ]) ? true : false );
2011-08-11 10:52:31 +02:00
$toplevelprivate = false ;
2011-04-12 05:11:21 +02:00
2011-04-11 06:21:16 +02:00
// Take care of author collapsing and comment collapsing
// If a single author has more than 3 consecutive top-level posts, squash the remaining ones.
// If there are more than two comments, squash all but the last 2.
2011-08-11 10:52:31 +02:00
2011-04-12 05:11:21 +02:00
if ( $toplevelpost ) {
2011-08-11 10:52:31 +02:00
$toplevelprivate = (( $toplevelpost && $item [ 'private' ]) ? true : false );
2011-04-12 05:11:21 +02:00
$item_writeable = (( $item [ 'writable' ] || $item [ 'self' ]) ? true : false );
2011-05-20 10:15:02 +02:00
if ( $blowhard == $item [ 'cid' ] && ( ! $item [ 'self' ]) && ( $mode != 'profile' ) && ( $mode != 'notes' )) {
2011-04-11 06:21:16 +02:00
$blowhard_count ++ ;
if ( $blowhard_count == 3 ) {
2011-04-12 05:34:10 +02:00
$o .= '<div class="icollapse-wrapper fakelink" id="icollapse-wrapper-' . $item [ 'parent' ]
2011-05-17 02:57:29 +02:00
. '" onclick="openClose(' . '\'icollapse-' . $item [ 'parent' ] . '\'); $(\'#icollapse-wrapper-' . $item [ 'parent' ] . '\').hide();" >'
2011-04-12 05:34:10 +02:00
. t ( 'See more posts like this' ) . '</div>' . '<div class="icollapse" id="icollapse-'
. $item [ 'parent' ] . '" style="display: none;" >' ;
2011-04-11 06:21:16 +02:00
}
}
else {
$blowhard = $item [ 'cid' ];
if ( $blowhard_count >= 3 )
$o .= '</div>' ;
$blowhard_count = 0 ;
}
$comments_seen = 0 ;
$comments_collapsed = false ;
}
2011-08-11 10:52:31 +02:00
else {
// prevent private email from leaking into public conversation
if (( ! $toplevelpost ) && ( ! toplevelprivate ) && ( $item [ 'private' ]) && ( $profile_owner != local_user ()))
continue ;
2011-04-11 06:21:16 +02:00
$comments_seen ++ ;
2011-08-11 10:52:31 +02:00
}
2011-04-11 06:21:16 +02:00
2011-04-27 03:39:19 +02:00
$override_comment_box = ((( $page_writeable ) && ( $item_writeable )) ? true : false );
2011-04-12 05:11:21 +02:00
$show_comment_box = ((( $page_writeable ) && ( $item_writeable ) && ( $comments_seen == $comments [ $item [ 'parent' ]])) ? true : false );
2011-04-11 06:21:16 +02:00
if (( $comments [ $item [ 'parent' ]] > 2 ) && ( $comments_seen <= ( $comments [ $item [ 'parent' ]] - 2 )) && ( $item [ 'gravity' ] == 6 )) {
if ( ! $comments_collapsed ) {
2011-04-12 05:34:10 +02:00
$o .= '<div class="ccollapse-wrapper fakelink" id="ccollapse-wrapper-' . $item [ 'parent' ]
2011-05-17 02:57:29 +02:00
. '" onclick="openClose(' . '\'ccollapse-' . $item [ 'parent' ] . '\'); $(\'#ccollapse-wrapper-' . $item [ 'parent' ] . '\').hide();" >'
2011-04-12 05:34:10 +02:00
. sprintf ( t ( 'See all %d comments' ), $comments [ $item [ 'parent' ]]) . '</div>'
. '<div class="ccollapse" id="ccollapse-' . $item [ 'parent' ] . '" style="display: none;" >' ;
2011-04-11 06:21:16 +02:00
$comments_collapsed = true ;
}
}
if (( $comments [ $item [ 'parent' ]] > 2 ) && ( $comments_seen == ( $comments [ $item [ 'parent' ]] - 1 ))) {
$o .= '</div>' ;
}
$redirect_url = $a -> get_baseurl () . '/redir/' . $item [ 'cid' ] ;
$lock = ((( $item [ 'private' ]) || (( $item [ 'uid' ] == local_user ()) && ( strlen ( $item [ 'allow_cid' ]) || strlen ( $item [ 'allow_gid' ])
|| strlen ( $item [ 'deny_cid' ]) || strlen ( $item [ 'deny_gid' ]))))
? '<div class="wall-item-lock"><img src="images/lock_icon.gif" class="lockview" alt="' . t ( 'Private Message' ) . '" onclick="lockview(event,' . $item [ 'id' ] . ');" /></div>'
: '<div class="wall-item-lock"></div>' );
// Top-level wall post not written by the wall owner (wall-to-wall)
// First figure out who owns it.
$osparkle = '' ;
2011-04-12 05:34:10 +02:00
if (( $toplevelpost ) && ( ! $item [ 'self' ]) && ( $mode !== 'profile' )) {
2011-04-11 06:21:16 +02:00
2011-07-26 03:41:48 +02:00
if ( $item [ 'wall' ]) {
2011-04-12 05:34:10 +02:00
// On the network page, I am the owner. On the display page it will be the profile owner.
// This will have been stored in $a->page_contact by our calling page.
// Put this person on the left of the wall-to-wall notice.
2011-04-12 01:15:38 +02:00
$owner_url = $a -> page_contact [ 'url' ];
$owner_photo = $a -> page_contact [ 'thumb' ];
$owner_name = $a -> page_contact [ 'name' ];
2011-04-11 06:21:16 +02:00
$template = $wallwall ;
$commentww = 'ww' ;
}
2011-07-26 03:41:48 +02:00
if (( ! $item [ 'wall' ]) && ( strlen ( $item [ 'owner-link' ])) && ( $item [ 'owner-link' ] != $item [ 'author-link' ])) {
2011-04-12 05:34:10 +02:00
2011-04-11 06:21:16 +02:00
// Could be anybody.
2011-04-12 05:34:10 +02:00
2011-04-11 06:21:16 +02:00
$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
if (( link_compare ( $item [ 'owner-link' ], $item [ 'url' ]))
&& ( $item [ 'network' ] === 'dfrn' )) {
$owner_url = $redirect_url ;
$osparkle = ' sparkle' ;
}
}
}
$likebuttons = '' ;
2011-09-09 07:07:16 +02:00
$shareable = ((( $profile_owner == local_user ()) && ( $mode != 'display' ) && ( ! $item [ 'private' ])) ? true : false );
2011-04-11 06:21:16 +02:00
2011-04-12 05:11:21 +02:00
if ( $page_writeable ) {
2011-04-12 05:34:10 +02:00
if ( $toplevelpost ) {
2011-09-09 07:07:16 +02:00
$likebuttons = replace_macros (((( $shareable )) ? $like_tpl : $noshare_tpl ), array (
2011-04-11 08:01:38 +02:00
'$id' => $item [ 'id' ],
'$likethis' => t ( " I like this \x28 toggle \x29 " ),
'$nolike' => t ( " I don't like this \x28 toggle \x29 " ),
'$share' => t ( 'Share' ),
'$wait' => t ( 'Please wait' )
));
}
2011-04-27 03:36:51 +02:00
if (( $show_comment_box ) || (( $show_comment_box == false ) && ( $override_comment_box == false ) && ( $item [ 'last-child' ]))) {
2011-04-11 08:01:38 +02:00
$comment = replace_macros ( $cmnt_tpl , array (
'$return_path' => '' ,
2011-04-11 10:31:04 +02:00
'$jsreload' => (( $mode === 'display' ) ? $_SESSION [ 'return_url' ] : '' ),
'$type' => (( $mode === 'profile' ) ? 'wall-comment' : 'net-comment' ),
2011-04-11 08:01:38 +02:00
'$id' => $item [ 'item_id' ],
'$parent' => $item [ 'parent' ],
'$profile_uid' => $profile_owner ,
'$mylink' => $a -> contact [ 'url' ],
'$mytitle' => t ( 'This is you' ),
'$myphoto' => $a -> contact [ 'thumb' ],
'$comment' => t ( 'Comment' ),
'$submit' => t ( 'Submit' ),
2011-04-11 10:31:04 +02:00
'$ww' => (( $mode === 'network' ) ? $commentww : '' )
2011-04-11 08:01:38 +02:00
));
}
2011-04-11 06:21:16 +02:00
}
2011-05-20 10:15:02 +02:00
$edpost = (((( $profile_owner == local_user ()) && ( $toplevelpost ) && ( intval ( $item [ 'wall' ]) == 1 )) || ( $mode === 'notes' ))
2011-07-04 04:41:04 +02:00
? '<a class="editpost icon pencil" href="' . $a -> get_baseurl () . '/editpost/' . $item [ 'id' ]
. '" title="' . t ( 'Edit' ) . '"></a>'
2011-04-12 05:34:10 +02:00
: '' );
2011-06-16 05:43:39 +02:00
$drop = '' ;
$dropping = false ;
if (( intval ( $item [ 'contact-id' ]) && $item [ 'contact-id' ] == remote_user ()) || ( $item [ 'uid' ] == local_user ()))
$dropping = true ;
2011-06-18 08:06:42 +02:00
$drop = replace_macros ((( $dropping ) ? $droptpl : $fakedrop ), array ( '$id' => $item [ 'id' ], '$select' => t ( 'Select' ), '$delete' => t ( 'Delete' )));
2011-06-16 05:43:39 +02:00
2011-07-04 04:41:04 +02:00
$star = (( $profile_owner == local_user () && $toplevelpost ) ? '<a href="#" id="starred-' . $item [ 'id' ] . '" onclick="dostar(' . $item [ 'id' ] . '); return false;" class="star-item icon ' . (( $item [ 'starred' ]) ? 'starred' : 'unstarred' ) . '" title="' . t ( 'toggle star status' ) . '"></a>' : '' );
2011-04-11 06:21:16 +02:00
$photo = $item [ 'photo' ];
$thumb = $item [ 'thumb' ];
// Post was remotely authored.
2011-04-12 05:34:10 +02:00
$diff_author = (( link_compare ( $item [ 'url' ], $item [ 'author-link' ])) ? false : true );
2011-04-11 06:21:16 +02:00
$profile_name = ((( strlen ( $item [ 'author-name' ])) && $diff_author ) ? $item [ 'author-name' ] : $item [ 'name' ]);
2011-05-06 15:30:33 +02:00
$sp = false ;
$profile_link = best_link_url ( $item , $sp );
if ( $sp )
$sparkle = ' sparkle' ;
2011-04-11 06:21:16 +02:00
2011-04-18 08:27:11 +02:00
if ( $profile_link === 'mailbox' )
$profile_link = '' ;
2011-05-09 10:35:24 +02:00
$normalised = normalise_link (( strlen ( $item [ 'author-link' ])) ? $item [ 'author-link' ] : $item [ 'url' ]);
2011-08-01 01:35:53 +02:00
if (( $normalised != 'mailbox' ) && ( x ( $a -> contacts , $normalised )))
2011-05-09 10:35:24 +02:00
$profile_avatar = $a -> contacts [ $normalised ][ 'thumb' ];
else
$profile_avatar = ((( strlen ( $item [ 'author-avatar' ])) && $diff_author ) ? $item [ 'author-avatar' ] : $thumb );
2011-05-06 15:30:33 +02:00
2011-04-11 06:21:16 +02:00
$like = (( x ( $alike , $item [ 'id' ])) ? format_like ( $alike [ $item [ 'id' ]], $alike [ $item [ 'id' ] . '-l' ], 'like' , $item [ 'id' ]) : '' );
$dislike = (( x ( $dlike , $item [ 'id' ])) ? format_like ( $dlike [ $item [ 'id' ]], $dlike [ $item [ 'id' ] . '-l' ], 'dislike' , $item [ 'id' ]) : '' );
2011-04-12 05:34:10 +02:00
$location = (( $item [ 'location' ]) ? '<a target="map" title="' . $item [ 'location' ]
. '" href="http://maps.google.com/?q=' . urlencode ( $item [ 'location' ]) . '">' . $item [ 'location' ] . '</a>' : '' );
$coord = (( $item [ 'coord' ]) ? '<a target="map" title="' . $item [ 'coord' ]
. '" href="http://maps.google.com/?q=' . urlencode ( $item [ 'coord' ]) . '">' . $item [ 'coord' ] . '</a>' : '' );
2011-04-11 06:21:16 +02:00
if ( $coord ) {
if ( $location )
$location .= '<br /><span class="smalltext">(' . $coord . ')</span>' ;
else
$location = '<span class="smalltext">' . $coord . '</span>' ;
}
2011-04-12 05:34:10 +02:00
$indent = (( $toplevelpost ) ? '' : ' comment' );
2011-04-11 06:21:16 +02:00
if ( strcmp ( datetime_convert ( 'UTC' , 'UTC' , $item [ 'created' ]), datetime_convert ( 'UTC' , 'UTC' , 'now - 12 hours' )) > 0 )
$indent .= ' shiny' ;
2011-04-18 17:37:02 +02:00
//
localize_item ( $item );
2011-04-11 06:21:16 +02:00
// Build the HTML
2011-05-25 05:45:02 +02:00
$body = prepare_body ( $item , true );
2011-05-25 05:41:29 +02:00
2011-04-11 06:21:16 +02:00
$tmp_item = replace_macros ( $template , array (
2011-09-20 04:46:18 +02:00
'$body' => template_escape ( $body ),
2011-04-11 06:21:16 +02:00
'$id' => $item [ 'item_id' ],
2011-09-17 00:40:34 +02:00
'$linktitle' => sprintf ( t ( 'View %s\'s profile @ %s' ), $profile_name , (( strlen ( $item [ 'author-link' ])) ? $item [ 'author-link' ] : $item [ 'url' ])),
'$olinktitle' => sprintf ( t ( 'View %s\'s profile @ %s' ), $profile_name , (( strlen ( $item [ 'owner-link' ])) ? $item [ 'owner-link' ] : $item [ 'url' ])),
2011-04-11 06:21:16 +02:00
'$to' => t ( 'to' ),
'$wall' => t ( 'Wall-to-Wall' ),
'$vwall' => t ( 'via Wall-To-Wall:' ),
'$profile_url' => $profile_link ,
'$item_photo_menu' => item_photo_menu ( $item ),
2011-09-20 04:46:18 +02:00
'$name' => template_escape ( $profile_name ),
2011-04-11 06:21:16 +02:00
'$thumb' => $profile_avatar ,
'$osparkle' => $osparkle ,
'$sparkle' => $sparkle ,
2011-09-20 04:46:18 +02:00
'$title' => template_escape ( $item [ 'title' ]),
2011-06-21 09:56:24 +02:00
'$ago' => ((( $item [ 'app' ]) && ( $item [ 'id' ] == $item [ 'parent' ])) ? sprintf ( t ( '%s from %s' ), relative_date ( $item [ 'created' ]), $item [ 'app' ]) : relative_date ( $item [ 'created' ])),
2011-04-11 06:21:16 +02:00
'$lock' => $lock ,
2011-09-20 04:46:18 +02:00
'$location' => template_escape ( $location ),
2011-04-11 06:21:16 +02:00
'$indent' => $indent ,
'$owner_url' => $owner_url ,
'$owner_photo' => $owner_photo ,
2011-09-20 04:46:18 +02:00
'$owner_name' => template_escape ( $owner_name ),
2011-04-11 06:21:16 +02:00
'$plink' => get_plink ( $item ),
'$edpost' => $edpost ,
2011-07-04 04:41:04 +02:00
'$star' => $star ,
2011-04-11 06:21:16 +02:00
'$drop' => $drop ,
'$vote' => $likebuttons ,
'$like' => $like ,
'$dislike' => $dislike ,
'$comment' => $comment
2011-09-19 12:30:59 +02:00
2011-04-11 06:21:16 +02:00
));
2011-06-16 05:43:39 +02:00
2011-04-11 06:21:16 +02:00
$arr = array ( 'item' => $item , 'output' => $tmp_item );
call_hooks ( 'display_item' , $arr );
$o .= $arr [ 'output' ];
}
}
// if author collapsing is in force but didn't get closed, close it off now.
if ( $blowhard_count >= 3 )
$o .= '</div>' ;
2011-06-16 05:43:39 +02:00
if ( $dropping )
$o .= '<div id="item-delete-selected" class="fakelink" onclick="deleteCheckedItems();"><div id="item-delete-selected-icon" class="icon drophide" title="' . t ( 'Delete Selected Items' ) . '" onmouseover="imgbright(this);" onmouseout="imgdull(this);" ></div><div id="item-delete-selected-desc" >' . t ( 'Delete Selected Items' ) . '</div></div><div id="item-delete-selected-end"></div>' ;
2011-04-11 06:21:16 +02:00
return $o ;
2011-04-13 02:58:16 +02:00
}
2011-05-06 15:30:33 +02:00
function best_link_url ( $item , & $sparkle ) {
$a = get_app ();
$best_url = '' ;
$sparkle = false ;
$clean_url = normalise_link ( $item [ 'author-link' ]);
if (( local_user ()) && ( local_user () == $item [ 'uid' ])) {
if ( isset ( $a -> contacts ) && x ( $a -> contacts , $clean_url )) {
if ( $a -> contacts [ $clean_url ][ 'network' ] === NETWORK_DFRN ) {
$best_url = $a -> get_baseurl () . '/redir/' . $a -> contacts [ $clean_url ][ 'id' ];
$sparkle = true ;
2011-04-13 02:58:16 +02:00
}
2011-05-06 15:30:33 +02:00
else
$best_url = $a -> contacts [ $clean_url ][ 'url' ];
2011-04-13 02:58:16 +02:00
}
}
2011-05-06 15:30:33 +02:00
if ( ! $best_url ) {
if ( strlen ( $item [ 'author-link' ]))
$best_url = $item [ 'author-link' ];
else
$best_url = $item [ 'url' ];
}
return $best_url ;
}
2011-04-13 02:58:16 +02:00
if ( ! function_exists ( 'item_photo_menu' )){
function item_photo_menu ( $item ){
$a = get_app ();
2011-05-06 15:30:33 +02:00
if ( local_user () && ( ! count ( $a -> contacts )))
load_contact_links ( local_user ());
2011-04-13 02:58:16 +02:00
$contact_url = " " ;
$pm_url = " " ;
$status_link = " " ;
2011-04-20 05:55:20 +02:00
$photos_link = " " ;
2011-04-20 05:50:02 +02:00
$posts_link = " " ;
2011-04-13 02:58:16 +02:00
2011-05-06 15:30:33 +02:00
$sparkle = false ;
$profile_link = best_link_url ( $item , $sparkle );
2011-04-18 08:27:11 +02:00
if ( $profile_link === 'mailbox' )
$profile_link = '' ;
2011-05-06 15:30:33 +02:00
if ( $sparkle ) {
$cid = intval ( basename ( $profile_link ));
$status_link = $profile_link . " ?url=status " ;
$photos_link = $profile_link . " ?url=photos " ;
$profile_link = $profile_link . " ?url=profile " ;
$pm_url = $a -> get_baseurl () . '/message/new/' . $cid ;
}
else {
if ( local_user () && local_user () == $item [ 'uid' ] && link_compare ( $item [ 'url' ], $item [ 'author-link' ])) {
$cid = $item [ 'contact-id' ];
}
else {
$cid = 0 ;
2011-04-13 02:58:16 +02:00
}
}
2011-05-06 15:30:33 +02:00
if (( $cid ) && ( ! $item [ 'self' ])) {
$contact_url = $a -> get_baseurl () . '/contacts/' . $cid ;
$posts_link = $a -> get_baseurl () . '/network/?cid=' . $cid ;
}
2011-04-13 02:58:16 +02:00
$menu = Array (
t ( " View status " ) => $status_link ,
t ( " View profile " ) => $profile_link ,
2011-04-20 13:50:12 +02:00
t ( " View photos " ) => $photos_link ,
t ( " View recent " ) => $posts_link ,
2011-04-13 02:58:16 +02:00
t ( " Edit contact " ) => $contact_url ,
t ( " Send PM " ) => $pm_url ,
);
$args = array ( $item , & $menu );
call_hooks ( 'item_photo_menu' , $args );
$o = " " ;
foreach ( $menu as $k => $v ){
if ( $v != " " ) $o .= " <li><a href=' $v '> $k </a></li> \n " ;
}
return $o ;
}}
if ( ! function_exists ( 'like_puller' )) {
function like_puller ( $a , $item , & $arr , $mode ) {
$url = '' ;
$sparkle = '' ;
$verb = (( $mode === 'like' ) ? ACTIVITY_LIKE : ACTIVITY_DISLIKE );
if (( activity_match ( $item [ 'verb' ], $verb )) && ( $item [ 'id' ] != $item [ 'parent' ])) {
$url = $item [ 'author-link' ];
if (( local_user ()) && ( local_user () == $item [ 'uid' ]) && ( $item [ 'network' ] === 'dfrn' ) && ( ! $item [ 'self' ]) && ( link_compare ( $item [ 'author-link' ], $item [ 'url' ]))) {
$url = $a -> get_baseurl () . '/redir/' . $item [ 'contact-id' ];
$sparkle = ' class="sparkle" ' ;
}
if ( ! (( isset ( $arr [ $item [ 'parent' ] . '-l' ])) && ( is_array ( $arr [ $item [ 'parent' ] . '-l' ]))))
$arr [ $item [ 'parent' ] . '-l' ] = array ();
if ( ! isset ( $arr [ $item [ 'parent' ]]))
$arr [ $item [ 'parent' ]] = 1 ;
else
$arr [ $item [ 'parent' ]] ++ ;
$arr [ $item [ 'parent' ] . '-l' ][] = '<a href="' . $url . '"' . $sparkle . '>' . $item [ 'author-name' ] . '</a>' ;
}
return ;
}}
// Format the like/dislike text for a profile item
// $cnt = number of people who like/dislike the item
// $arr = array of pre-linked names of likers/dislikers
// $type = one of 'like, 'dislike'
// $id = item id
// returns formatted text
if ( ! function_exists ( 'format_like' )) {
function format_like ( $cnt , $arr , $type , $id ) {
$o = '' ;
if ( $cnt == 1 )
$o .= (( $type === 'like' ) ? sprintf ( t ( '%s likes this.' ), $arr [ 0 ]) : sprintf ( t ( '%s doesn\'t like this.' ), $arr [ 0 ])) . EOL ;
else {
$spanatts = 'class="fakelink" onclick="openClose(\'' . $type . 'list-' . $id . '\');"' ;
$o .= (( $type === 'like' ) ?
sprintf ( t ( '<span %1$s>%2$d people</span> like this.' ), $spanatts , $cnt )
:
sprintf ( t ( '<span %1$s>%2$d people</span> don\'t like this.' ), $spanatts , $cnt ) );
$o .= EOL ;
$total = count ( $arr );
if ( $total >= MAX_LIKERS )
$arr = array_slice ( $arr , 0 , MAX_LIKERS - 1 );
if ( $total < MAX_LIKERS )
$arr [ count ( $arr ) - 1 ] = t ( 'and' ) . ' ' . $arr [ count ( $arr ) - 1 ];
$str = implode ( ', ' , $arr );
if ( $total >= MAX_LIKERS )
$str .= sprintf ( t ( ', and %d other people' ), $total - MAX_LIKERS );
$str = (( $type === 'like' ) ? sprintf ( t ( '%s like this.' ), $str ) : sprintf ( t ( '%s don\'t like this.' ), $str ));
$o .= " \t " . '<div id="' . $type . 'list-' . $id . '" style="display: none;" >' . $str . '</div>' ;
}
return $o ;
}}
2011-04-20 14:48:12 +02:00
2011-05-20 10:15:02 +02:00
function status_editor ( $a , $x , $notes_cid = 0 ) {
2011-04-20 14:48:12 +02:00
$o = '' ;
2011-05-11 13:37:13 +02:00
$geotag = (( $x [ 'allow_location' ]) ? get_markup_template ( 'jot_geotag.tpl' ) : '' );
2011-04-20 14:48:12 +02:00
2011-05-11 13:37:13 +02:00
$tpl = get_markup_template ( 'jot-header.tpl' );
2011-04-20 14:48:12 +02:00
$a -> page [ 'htmlhead' ] .= replace_macros ( $tpl , array (
'$baseurl' => $a -> get_baseurl (),
'$geotag' => $geotag ,
'$nickname' => $x [ 'nickname' ],
2011-05-02 04:50:00 +02:00
'$ispublic' => t ( 'Visible to <strong>everybody</strong>' ),
2011-04-20 14:48:12 +02:00
'$linkurl' => t ( 'Please enter a link URL:' ),
'$utubeurl' => t ( 'Please enter a YouTube link:' ),
'$vidurl' => t ( " Please enter a video \x28 .ogg \x29 link/URL: " ),
'$audurl' => t ( " Please enter an audio \x28 .ogg \x29 link/URL: " ),
'$whereareu' => t ( 'Where are you right now?' ),
'$title' => t ( 'Enter a title for this item' )
));
2011-05-11 13:37:13 +02:00
$tpl = get_markup_template ( " jot.tpl " );
2011-04-20 14:48:12 +02:00
$jotplugins = '' ;
$jotnets = '' ;
$mail_disabled = (( function_exists ( 'imap_open' ) && ( ! get_config ( 'system' , 'imap_disabled' ))) ? 0 : 1 );
$mail_enabled = false ;
$pubmail_enabled = false ;
if (( $x [ 'is_owner' ]) && ( ! $mail_disabled )) {
$r = q ( " SELECT * FROM `mailacct` WHERE `uid` = %d AND `server` != '' LIMIT 1 " ,
intval ( local_user ())
);
if ( count ( $r )) {
$mail_enabled = true ;
if ( intval ( $r [ 0 ][ 'pubmail' ]))
$pubmail_enabled = true ;
}
}
if ( $mail_enabled ) {
$selected = (( $pubmail_enabled ) ? ' checked="checked" ' : '' );
2011-09-23 12:12:31 +02:00
$jotnets .= '<div class="profile-jot-net"><input type="checkbox" name="pubmail_enable"' . $selected . ' value="1" /> '
2011-04-20 14:48:12 +02:00
. t ( " Post to Email " ) . '</div>' ;
}
call_hooks ( 'jot_tool' , $jotplugins );
call_hooks ( 'jot_networks' , $jotnets );
2011-05-20 10:15:02 +02:00
if ( $notes_cid )
$jotnets .= '<input type="hidden" name="contact_allow[]" value="' . $notes_cid . '" />' ;
2011-04-20 14:48:12 +02:00
$tpl = replace_macros ( $tpl , array ( '$jotplugins' => $jotplugins ));
$o .= replace_macros ( $tpl , array (
'$return_path' => $a -> cmd ,
'$action' => 'item' ,
2011-05-20 10:15:02 +02:00
'$share' => (( $x [ 'button' ]) ? $x [ 'button' ] : t ( 'Share' )),
2011-04-20 14:48:12 +02:00
'$upload' => t ( 'Upload photo' ),
2011-05-25 11:08:15 +02:00
'$attach' => t ( 'Attach file' ),
2011-04-20 14:48:12 +02:00
'$weblink' => t ( 'Insert web link' ),
'$youtube' => t ( 'Insert YouTube video' ),
'$video' => t ( 'Insert Vorbis [.ogg] video' ),
'$audio' => t ( 'Insert Vorbis [.ogg] audio' ),
'$setloc' => t ( 'Set your location' ),
'$noloc' => t ( 'Clear browser location' ),
'$title' => t ( 'Set title' ),
'$wait' => t ( 'Please wait' ),
'$permset' => t ( 'Permission settings' ),
2011-05-20 10:15:02 +02:00
'$ptyp' => (( $notes_cid ) ? 'note' : 'wall' ),
2011-04-20 14:48:12 +02:00
'$content' => '' ,
'$post_id' => '' ,
'$baseurl' => $a -> get_baseurl (),
2011-04-29 05:04:02 +02:00
'$defloc' => $x [ 'default_location' ],
2011-04-20 14:48:12 +02:00
'$visitor' => $x [ 'visitor' ],
2011-05-20 10:15:02 +02:00
'$pvisit' => (( $notes_cid ) ? 'none' : $x [ 'visitor' ]),
2011-04-20 14:48:12 +02:00
'$emailcc' => t ( 'CC: email addresses' ),
2011-05-19 02:29:12 +02:00
'$public' => t ( 'Public post' ),
2011-04-20 14:48:12 +02:00
'$jotnets' => $jotnets ,
'$emtitle' => t ( 'Example: bob@example.com, mary@example.com' ),
'$lockstate' => $x [ 'lockstate' ],
'$acl' => $x [ 'acl' ],
'$bang' => $x [ 'bang' ],
'$profile_uid' => $x [ 'profile_uid' ],
));
return $o ;
2011-07-07 14:02:58 +02:00
}