aboutsummaryrefslogtreecommitdiffstats
path: root/include/conversation.php
diff options
context:
space:
mode:
Diffstat (limited to 'include/conversation.php')
-rw-r--r--include/conversation.php239
1 files changed, 153 insertions, 86 deletions
diff --git a/include/conversation.php b/include/conversation.php
index 368a0b0df..d80ff2cc7 100644
--- a/include/conversation.php
+++ b/include/conversation.php
@@ -1,4 +1,4 @@
-<?php
+<?php /** @file */
require_once('include/items.php');
@@ -6,7 +6,7 @@ require_once('include/items.php');
// is identical to the code in mod/message.php for 'item_extract_images' and
// 'item_redir_and_replace_images'
-if(! function_exists('item_extract_images')) {
+
function item_extract_images($body) {
$saved_image = array();
@@ -46,9 +46,9 @@ function item_extract_images($body) {
$new_body = $new_body . $orig_body;
return array('body' => $new_body, 'images' => $saved_image);
-}}
+}
+
-if(! function_exists('item_redir_and_replace_images')) {
function item_redir_and_replace_images($body, $images, $cid) {
$origbody = $body;
@@ -81,7 +81,7 @@ function item_redir_and_replace_images($body, $images, $cid) {
}
return $newbody;
-}}
+}
@@ -91,13 +91,9 @@ function item_redir_and_replace_images($body, $images, $cid) {
function localize_item(&$item){
- $extracted = item_extract_images($item['body']);
- if($extracted['images'])
- $item['body'] = item_redir_and_replace_images($extracted['body'], $extracted['images'], $item['contact-id']);
-
if (activity_match($item['verb'],ACTIVITY_LIKE) || activity_match($item['verb'],ACTIVITY_DISLIKE)){
-
- $obj= json_decode($item['object'],true);
+
+ $obj = json_decode_plus($item['object']);
if($obj['author'] && $obj['author']['link'])
$author_link = get_rel_link($obj['author']['link'],'alternate');
@@ -108,32 +104,52 @@ function localize_item(&$item){
$item_url = get_rel_link($obj['link'],'alternate');
+ $Bphoto = '';
+
+ switch($obj['type']) {
+ case ACTIVITY_OBJ_PHOTO:
+ $post_type = t('photo');
+ break;
+ case ACTIVITY_OBJ_EVENT:
+ $post_type = t('event');
+ break;
+ case ACTIVITY_OBJ_PERSON:
+ $post_type = t('channel');
+ $author_name = $obj['title'];
+ if($obj['link']) {
+ $author_link = get_rel_link($obj['link'],'alternate');
+ $Bphoto = get_rel_link($obj['link'],'photo');
+ }
+ break;
+ case ACTIVITY_OBJ_THING:
+ $post_type = $obj['title'];
+ if($obj['owner']) {
+ if(array_key_exists('name',$obj['owner']))
+ $obj['owner']['name'];
+ if(array_key_exists('link',$obj['owner']))
+ $author_link = get_rel_link($obj['owner']['link'],'alternate');
+ }
+ if($obj['link']) {
+ $Bphoto = get_rel_link($obj['link'],'photo');
+ }
+ break;
+
+ case ACTIVITY_OBJ_NOTE:
+ default:
+ $post_type = t('status');
+ if($obj->id != $item['mid'])
+ $post_type = t('comment');
+ break;
+ }
// If we couldn't parse something useful, don't bother translating.
// We need something better than zid here, probably magic_link(), but it needs writing
if($author_link && $author_name && $item_url) {
-
- $author = '[url=' . chanlink_url($item['author']['xchan_url']) . ']' . $item['author']['xchan_name'] . '[/url]';
- $objauthor = '[url=' . chanlink_url($author_link) . ']' . $author_name . '[/url]';
+ $author = '[zrl=' . chanlink_url($item['author']['xchan_url']) . ']' . $item['author']['xchan_name'] . '[/zrl]';
+ $objauthor = '[zrl=' . chanlink_url($author_link) . ']' . $author_name . '[/zrl]';
- switch($obj->type) {
- case ACTIVITY_OBJ_PHOTO:
- $post_type = t('photo');
- break;
- case ACTIVITY_OBJ_EVENT:
- $post_type = t('event');
- break;
- case ACTIVITY_OBJ_NOTE:
- default:
- if(! ($item_flags & ITEM_THREAD_TOP))
- $post_type = t('comment');
- else
- $post_type = t('status');
- break;
- }
-
- $plink = '[url=' . zid($item_url) . ']' . $post_type . '[/url]';
+ $plink = '[zrl=' . zid($item_url) . ']' . $post_type . '[/zrl]';
if(activity_match($item['verb'],ACTIVITY_LIKE)) {
$bodyverb = t('%1$s likes %2$s\'s %3$s');
@@ -142,6 +158,8 @@ function localize_item(&$item){
$bodyverb = t('%1$s doesn\'t like %2$s\'s %3$s');
}
$item['body'] = $item['localize'] = sprintf($bodyverb, $author, $objauthor, $plink);
+ if($Bphoto != "")
+ $item['body'] .= "\n\n\n" . '[zrl=' . chanlink_url($author_link) . '][zmg=80x80]' . $Bphoto . '[/zmg][/zrl]';
}
@@ -149,13 +167,14 @@ function localize_item(&$item){
if (activity_match($item['verb'],ACTIVITY_FRIEND)) {
- if ($item['obj_type']=="" || $item['obj_type']!== ACTIVITY_OBJ_PERSON) return;
+
+// if ($item['obj_type']=="" || $item['obj_type']!== ACTIVITY_OBJ_PERSON) return;
$Aname = $item['author']['xchan_name'];
$Alink = $item['author']['xchan_url'];
- $obj= json_decode($item['object'],true);
+ $obj= json_decode_plus($item['object']);
$Blink = $Bphoto = '';
@@ -166,9 +185,9 @@ function localize_item(&$item){
$Bname = $obj['title'];
- $A = '[url=' . chanlink_url($Alink) . ']' . $Aname . '[/url]';
- $B = '[url=' . chanlink_url($Blink) . ']' . $Bname . '[/url]';
- if ($Bphoto!="") $Bphoto = '[url=' . chanlink_url($Blink) . '][img=80x80]' . $Bphoto . '[/img][/url]';
+ $A = '[zrl=' . chanlink_url($Alink) . ']' . $Aname . '[/zrl]';
+ $B = '[zrl=' . chanlink_url($Blink) . ']' . $Bname . '[/zrl]';
+ if ($Bphoto!="") $Bphoto = '[zrl=' . chanlink_url($Blink) . '][zmg=80x80]' . $Bphoto . '[/zmg][/zrl]';
$item['body'] = $item['localize'] = sprintf( t('%1$s is now connected with %2$s'), $A, $B);
$item['body'] .= "\n\n\n" . $Bphoto;
@@ -184,7 +203,7 @@ function localize_item(&$item){
$Alink = $item['author']['xchan_url'];
- $obj= json_decode($item['object'],true);
+ $obj= json_decode_plus($item['object']);
$Blink = $Bphoto = '';
@@ -194,9 +213,9 @@ function localize_item(&$item){
}
$Bname = $obj['title'];
- $A = '[url=' . chanlink_url($Alink) . ']' . $Aname . '[/url]';
- $B = '[url=' . chanlink_url($Blink) . ']' . $Bname . '[/url]';
- if ($Bphoto!="") $Bphoto = '[url=' . chanlink_url($Blink) . '][img=80x80]' . $Bphoto . '[/img][/url]';
+ $A = '[zrl=' . chanlink_url($Alink) . ']' . $Aname . '[/zrl]';
+ $B = '[zrl=' . chanlink_url($Blink) . ']' . $Bname . '[/zrl]';
+ if ($Bphoto!="") $Bphoto = '[zrl=' . chanlink_url($Blink) . '][zmg=80x80]' . $Bphoto . '[/zmg][/zrl]';
// we can't have a translation string with three positions but no distinguishable text
// So here is the translate string.
@@ -221,7 +240,7 @@ function localize_item(&$item){
$Aname = $item['author']['xchan_name'];
$Alink = $item['author']['xchan_url'];
- $A = '[url=' . chanlink_url($Alink) . ']' . $Aname . '[/url]';
+ $A = '[zrl=' . chanlink_url($Alink) . ']' . $Aname . '[/zrl]';
$txt = t('%1$s is currently %2$s');
@@ -233,13 +252,13 @@ function localize_item(&$item){
if (activity_match($item['verb'],ACTIVITY_TAG)) {
$r = q("SELECT * from `item`,`contact` WHERE
- `item`.`contact-id`=`contact`.`id` AND `item`.`uri`='%s';",
- dbesc($item['parent_uri']));
+ `item`.`contact-id`=`contact`.`id` AND `item`.`mid`='%s';",
+ dbesc($item['parent_mid']));
if(count($r)==0) return;
$obj=$r[0];
- $author = '[url=' . zid($item['author-link']) . ']' . $item['author-name'] . '[/url]';
- $objauthor = '[url=' . zid($obj['author-link']) . ']' . $obj['author-name'] . '[/url]';
+ $author = '[zrl=' . zid($item['author-link']) . ']' . $item['author-name'] . '[/zrl]';
+ $objauthor = '[zrl=' . zid($obj['author-link']) . ']' . $obj['author-name'] . '[/zrl]';
switch($obj['verb']){
case ACTIVITY_POST:
@@ -254,17 +273,17 @@ function localize_item(&$item){
default:
if($obj['resource_id']){
$post_type = t('photo');
- $m=array(); preg_match("/\[url=([^]]*)\]/", $obj['body'], $m);
+ $m=array(); preg_match("/\[[zu]rl=([^]]*)\]/", $obj['body'], $m);
$rr['plink'] = $m[1];
} else {
$post_type = t('status');
}
}
- $plink = '[url=' . $obj['plink'] . ']' . $post_type . '[/url]';
+ $plink = '[zrl=' . $obj['plink'] . ']' . $post_type . '[/zrl]';
$parsedobj = parse_xml_string($xmlhead.$item['object']);
- $tag = sprintf('#[url=%s]%s[/url]', $parsedobj->id, $parsedobj->content);
+ $tag = sprintf('#[zrl=%s]%s[/zrl]', $parsedobj->id, $parsedobj->content);
$item['body'] = sprintf( t('%1$s tagged %2$s\'s %3$s with %4$s'), $author, $objauthor, $plink, $tag );
}
@@ -281,7 +300,7 @@ function localize_item(&$item){
$obj = parse_xml_string($xmlhead.$item['object']);
if(strlen($obj->id)) {
- $r = q("select * from item where uri = '%s' and uid = %d limit 1",
+ $r = q("select * from item where mid = '%s' and uid = %d limit 1",
dbesc($obj->id),
intval($item['uid'])
);
@@ -289,9 +308,9 @@ function localize_item(&$item){
$target = $r[0];
$Bname = $target['author-name'];
$Blink = $target['author-link'];
- $A = '[url=' . zid($Alink) . ']' . $Aname . '[/url]';
- $B = '[url=' . zid($Blink) . ']' . $Bname . '[/url]';
- $P = '[url=' . $target['plink'] . ']' . t('post/item') . '[/url]';
+ $A = '[zrl=' . zid($Alink) . ']' . $Aname . '[/zrl]';
+ $B = '[zrl=' . zid($Blink) . ']' . $Bname . '[/zrl]';
+ $P = '[zrl=' . $target['plink'] . ']' . t('post/item') . '[/zrl]';
$item['body'] = sprintf( t('%1$s marked %2$s\'s %3$s as favorite'), $A, $B, $P)."\n";
}
@@ -299,25 +318,26 @@ function localize_item(&$item){
}
*/
+/*
$matches = null;
- if(strpos($item['body'],'[url') !== false) {
- if(preg_match_all('/@\[url=(.*?)\]/is',$item['body'],$matches,PREG_SET_ORDER)) {
+ if(strpos($item['body'],'[zrl') !== false) {
+ if(preg_match_all('/@\[zrl=(.*?)\]/is',$item['body'],$matches,PREG_SET_ORDER)) {
foreach($matches as $mtch) {
if(! strpos($mtch[1],'zid='))
- $item['body'] = str_replace($mtch[0],'@[url=' . zid($mtch[1]). ']',$item['body']);
+ $item['body'] = str_replace($mtch[0],'@[zrl=' . zid($mtch[1]). ']',$item['body']);
}
}
}
- if(strpos($item['body'],'[img') !== false) {
+ if(strpos($item['body'],'[zmg') !== false) {
// add zid's to public images
- if(preg_match_all('/\[url=(.*?)\/photos\/(.*?)\/image\/(.*?)\]\[img(.*?)\]h(.*?)\[\/img\]\[\/url\]/is',$item['body'],$matches,PREG_SET_ORDER)) {
+ if(preg_match_all('/\[zrl=(.*?)\/photos\/(.*?)\/image\/(.*?)\]\[zmg(.*?)\]h(.*?)\[\/zmg\]\[\/zrl\]/is',$item['body'],$matches,PREG_SET_ORDER)) {
foreach($matches as $mtch) {
- $item['body'] = str_replace($mtch[0],'[url=' . zid( $mtch[1] . '/photos/' . $mtch[2] . '/image/' . $mtch[3]) . '][img' . $mtch[4] . ']h' . $mtch[5] . '[/img][/url]',$item['body']);
+ $item['body'] = str_replace($mtch[0],'[zrl=' . zid( $mtch[1] . '/photos/' . $mtch[2] . '/image/' . $mtch[3]) . '][zmg' . $mtch[4] . ']h' . $mtch[5] . '[/zmg][/zrl]',$item['body']);
}
}
}
-
+*/
// add sparkle links to appropriate permalinks
// $x = stristr($item['plink'],'/display/');
@@ -349,7 +369,9 @@ function count_descendants($item) {
function visible_activity($item) {
- if(activity_match($item['verb'],ACTIVITY_LIKE) || activity_match($item['verb'],ACTIVITY_DISLIKE))
+ // likes can apply to other things besides posts. Check if they are post children, in which case we handle them specially
+
+ if((activity_match($item['verb'],ACTIVITY_LIKE) || activity_match($item['verb'],ACTIVITY_DISLIKE)) && ($item['mid'] != $item['parent_mid']))
return false;
return true;
}
@@ -365,7 +387,7 @@ function visible_activity($item) {
*
*/
-if(!function_exists('conversation')) {
+
function conversation(&$a, $items, $mode, $update, $page_mode = 'traditional') {
$tstart = dba_timer();
@@ -374,6 +396,22 @@ function conversation(&$a, $items, $mode, $update, $page_mode = 'traditional') {
$ssl_state = ((local_user()) ? true : false);
+ if(local_user())
+ load_pconfig(local_user(),'');
+
+ $arr_blocked = null;
+
+ if(local_user()) {
+ $str_blocked = get_pconfig(local_user(),'system','blocked');
+ if($str_blocked) {
+ $arr_blocked = explode(',',$str_blocked);
+ for($x = 0; $x < count($arr_blocked); $x ++)
+ $arr_blocked[$x] = trim($arr_blocked[$x]);
+ }
+
+ }
+
+
$profile_owner = 0;
$page_writeable = false;
$live_update_div = '';
@@ -496,10 +534,24 @@ function conversation(&$a, $items, $mode, $update, $page_mode = 'traditional') {
// "New Item View" on network page or search page results
// - just loop through the items and format them minimally for display
+
//$tpl = get_markup_template('search_item.tpl');
$tpl = 'search_item.tpl';
foreach($items as $item) {
+
+ if($arr_blocked) {
+ $blocked = false;
+ foreach($arr_blocked as $b) {
+ if(($b) && ($item['author_xchan'] == $b)) {
+ $blocked = true;
+ break;
+ }
+ }
+ if($blocked)
+ continue;
+ }
+
$threadsid++;
$comment = '';
@@ -526,17 +578,6 @@ function conversation(&$a, $items, $mode, $update, $page_mode = 'traditional') {
$tags=array();
$hashtags = array();
$mentions = array();
- foreach(explode(',',$item['tag']) as $tag){
- $tag = trim($tag);
- if ($tag!="") {
- $t = bbcode($tag);
- $tags[] = $t;
- if($t[0] == '#')
- $hashtags[] = $t;
- elseif($t[0] == '@')
- $mentions[] = $t;
- }
- }
$sp = false;
$profile_link = best_link_url($item,$sp);
@@ -592,7 +633,6 @@ function conversation(&$a, $items, $mode, $update, $page_mode = 'traditional') {
$tmp_item = array(
'template' => $tpl,
'toplevel' => 'toplevel_item',
- 'tags' => $tags,
'id' => (($preview) ? 'P0' : $item['item_id']),
'linktitle' => sprintf( t('View %s\'s profile @ %s'), $profile_name, $profile_url),
'profile_url' => $profile_link,
@@ -617,7 +657,8 @@ function conversation(&$a, $items, $mode, $update, $page_mode = 'traditional') {
'ago' => relative_date($item['created']),
'app' => $item['app'],
'str_app' => sprintf( t(' from %s'), $item['app']),
- 'localtime' => datetime_convert('UTC', date_default_timezone_get(), $item['created'], 'c'),
+ 'isotime' => datetime_convert('UTC', date_default_timezone_get(), $item['created'], 'c'),
+ 'localtime' => datetime_convert('UTC', date_default_timezone_get(), $item['created'], 'r'),
'location' => $location,
'indent' => '',
'owner_name' => $owner_name,
@@ -632,7 +673,7 @@ function conversation(&$a, $items, $mode, $update, $page_mode = 'traditional') {
'like' => '',
'dislike' => '',
'comment' => '',
- 'conv' => (($preview) ? '' : array('href'=> z_root() . '/display/' . $item['uri'], 'title'=> t('View in context'))),
+ 'conv' => (($preview) ? '' : array('href'=> z_root() . '/display/' . $item['mid'], 'title'=> t('View in context'))),
'previewing' => $previewing,
'wait' => t('Please wait'),
'thread_level' => 1,
@@ -649,13 +690,21 @@ function conversation(&$a, $items, $mode, $update, $page_mode = 'traditional') {
}
else
{
+
// Normal View
+// logger('conv: items: ' . print_r($items,true));
require_once('include/ConversationObject.php');
require_once('include/ItemObject.php');
$conv = new Conversation($mode, $preview);
+ // In the display mode we don't have a profile owner.
+
+ if($mode === 'display' && $items)
+ $conv->set_profile_owner($items[0]['uid']);
+
+
// get all the topmost parents
// this shouldn't be needed, as we should have only them in our array
// But for now, this array respects the old style, just in case
@@ -663,6 +712,18 @@ function conversation(&$a, $items, $mode, $update, $page_mode = 'traditional') {
$threads = array();
foreach($items as $item) {
+ if($arr_blocked) {
+ $blocked = false;
+ foreach($arr_blocked as $b) {
+ if(($b) && ($item['author_xchan'] == $b)) {
+ $blocked = true;
+ break;
+ }
+ }
+ if($blocked)
+ continue;
+ }
+
// Can we put this after the visibility check?
like_puller($a,$item,$alike,'like');
@@ -742,7 +803,7 @@ function conversation(&$a, $items, $mode, $update, $page_mode = 'traditional') {
return $o;
-}}
+}
function best_link_url($item) {
@@ -775,7 +836,7 @@ function best_link_url($item) {
}
-if(! function_exists('item_photo_menu')){
+
function item_photo_menu($item){
$a = get_app();
$contact = null;
@@ -842,9 +903,9 @@ function item_photo_menu($item){
elseif ($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 = '';
@@ -861,7 +922,7 @@ function like_puller($a,$item,&$arr,$mode) {
$url = zid($url);
if(! $item['thr_parent'])
- $item['thr_parent'] = $item['parent_uri'];
+ $item['thr_parent'] = $item['parent_mid'];
if(! ((isset($arr[$item['thr_parent'] . '-l'])) && (is_array($arr[$item['thr_parent'] . '-l']))))
$arr[$item['thr_parent'] . '-l'] = array();
@@ -872,7 +933,7 @@ function like_puller($a,$item,&$arr,$mode) {
$arr[$item['thr_parent'] . '-l'][] = '<a href="'. $url . '"'. $sparkle .'>' . $item['author']['xchan_name'] . '</a>';
}
return;
-}}
+}
// Format the like/dislike text for a profile item
// $cnt = number of people who like/dislike the item
@@ -881,7 +942,7 @@ function like_puller($a,$item,&$arr,$mode) {
// $id = item id
// returns formatted text
-if(! function_exists('format_like')) {
+
function format_like($cnt,$arr,$type,$id) {
$o = '';
if($cnt == 1)
@@ -905,7 +966,7 @@ function format_like($cnt,$arr,$type,$id) {
$o .= "\t" . '<div id="' . $type . 'list-' . $id . '" style="display: none;" >' . $str . '</div>';
}
return $o;
-}}
+}
function status_editor($a,$x,$popup=false) {
@@ -948,6 +1009,9 @@ function status_editor($a,$x,$popup=false) {
'$return_path' => $a->query_string,
'$action' => $a->get_baseurl(true) . '/item',
'$share' => (x($x,'button') ? $x['button'] : t('Share')),
+ '$webpage' => (x($x,'webpage') ? '1' : ''),
+ '$placeholdpagetitle' => t('Page link title'),
+ '$pagetitle' => (x($x,'pagetitle') ? $x['pagetitle'] : ''),
'$upload' => t('Upload photo'),
'$shortupload' => t('upload photo'),
'$attach' => t('Attach file'),
@@ -982,6 +1046,7 @@ function status_editor($a,$x,$popup=false) {
'$emtitle' => t('Example: bob@example.com, mary@example.com'),
'$lockstate' => $x['lockstate'],
'$acl' => $x['acl'],
+ '$showacl' => ((array_key_exists('showacl',$x)) ? $x['showacl'] : 'yes'),
'$bang' => $x['bang'],
'$profile_uid' => $x['profile_uid'],
'$preview' => ((feature_enabled($x['profile_uid'],'preview')) ? t('Preview') : ''),
@@ -1004,12 +1069,12 @@ function get_item_children($arr, $parent) {
foreach($arr as $item) {
if($item['id'] != $item['parent']) {
if(get_config('system','thread_allow')) {
- // Fallback to parent_uri if thr_parent is not set
+ // Fallback to parent_mid if thr_parent is not set
$thr_parent = $item['thr_parent'];
if($thr_parent == '')
- $thr_parent = $item['parent_uri'];
+ $thr_parent = $item['parent_mid'];
- if($thr_parent == $parent['uri']) {
+ if($thr_parent == $parent['mid']) {
$item['children'] = get_item_children($arr, $item);
$children[] = $item;
}
@@ -1057,6 +1122,8 @@ function conv_sort($arr,$order) {
usort($parents,'sort_thr_created');
elseif(stristr($order,'commented'))
usort($parents,'sort_thr_commented');
+ elseif(stristr($order,'ascending'))
+ usort($parents,'sort_thr_created_rev');
if(count($parents))
foreach($parents as $i=>$_x)