X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=include%2Fconversation.php;h=0340ad3e4a8c8e74f3cde7f8cbcd843fef63c052;hb=75be187216255c7c45421cb5f9596118a954f878;hp=2e336efab0bb5b4f5ff43d21c35caf06efdf8aad;hpb=03c489150c9b56695bd8233a7aba2c6a29b15a67;p=friendica.git diff --git a/include/conversation.php b/include/conversation.php index 2e336efab0..0340ad3e4a 100644 --- a/include/conversation.php +++ b/include/conversation.php @@ -100,7 +100,11 @@ function localize_item(&$item){ $item['body'] = item_redir_and_replace_images($extracted['body'], $extracted['images'], $item['contact-id']); $xmlhead="<"."?xml version='1.0' encoding='UTF-8' ?".">"; - if (activity_match($item['verb'],ACTIVITY_LIKE) || activity_match($item['verb'],ACTIVITY_DISLIKE)){ + if (activity_match($item['verb'],ACTIVITY_LIKE) + || activity_match($item['verb'],ACTIVITY_DISLIKE) + || activity_match($item['verb'],ACTIVITY_ATTEND) + || activity_match($item['verb'],ACTIVITY_ATTENDNO) + || activity_match($item['verb'],ACTIVITY_ATTENDMAYBE)){ $r = q("SELECT * from `item`,`contact` WHERE `item`.`contact-id`=`contact`.`id` AND `item`.`uri`='%s';", @@ -139,6 +143,15 @@ function localize_item(&$item){ elseif(activity_match($item['verb'],ACTIVITY_DISLIKE)) { $bodyverb = t('%1$s doesn\'t like %2$s\'s %3$s'); } + elseif(activity_match($item['verb'],ACTIVITY_ATTEND)) { + $bodyverb = t('%1$s attends %2$s\'s %3$s'); + } + elseif(activity_match($item['verb'],ACTIVITY_ATTENDNO)) { + $bodyverb = t('%1$s doesn\'t attend %2$s\'s %3$s'); + } + elseif(activity_match($item['verb'],ACTIVITY_ATTENDMAYBE)) { + $bodyverb = t('%1$s attends maybe %2$s\'s %3$s'); + } $item['body'] = sprintf($bodyverb, $author, $objauthor, $plink); } @@ -203,12 +216,11 @@ function localize_item(&$item){ // we can't have a translation string with three positions but no distinguishable text // So here is the translate string. - $txt = t('%1$s poked %2$s'); // now translate the verb - - $txt = str_replace( t('poked'), t($verb), $txt); + $poked_t = trim(sprintf($txt, "","")); + $txt = str_replace( $poked_t, t($verb), $txt); // then do the sprintf on the translation string @@ -342,8 +354,15 @@ function count_descendants($item) { function visible_activity($item) { - if(activity_match($item['verb'],ACTIVITY_LIKE) || activity_match($item['verb'],ACTIVITY_DISLIKE)) - return false; + // likes (etc.) can apply to other things besides posts. Check if they are post children, + // in which case we handle them specially + + $hidden_activities = array(ACTIVITY_LIKE, ACTIVITY_DISLIKE, ACTIVITY_ATTEND, ACTIVITY_ATTENDNO, ACTIVITY_ATTENDMAYBE); + foreach($hidden_activities as $act) { + if(activity_match($item['verb'],$act)) { + return false; + } + } if(activity_match($item['verb'],ACTIVITY_FOLLOW) && $item['object-type'] === ACTIVITY_OBJ_NOTE) { if(! (($item['self']) && ($item['uid'] == local_user()))) { @@ -354,6 +373,86 @@ function visible_activity($item) { return true; } +/** + * @brief SQL query for items + */ +function item_query() { + + return "SELECT ".item_fieldlists()." FROM `item` ". + item_joins()." WHERE ".item_condition(); +} + +/** + * @brief List of all data fields that are needed for displaying items + */ +function item_fieldlists() { + +/* +These Fields are not added below (yet). They are here to for bug search. +`item`.`type`, +`item`.`object`, +`item`.`extid`, +`item`.`received`, +`item`.`changed`, +`item`.`moderated`, +`item`.`target-type`, +`item`.`target`, +`item`.`resource-id`, +`item`.`tag`, +`item`.`attach`, +`item`.`inform`, +`item`.`pubmail`, +`item`.`visible`, +`item`.`spam`, +`item`.`bookmark`, +`item`.`unseen`, +`item`.`deleted`, +`item`.`origin`, +`item`.`forum_mode`, +`item`.`last-child`, +`item`.`mention`, +`item`.`global`, +`item`.`gcontact-id`, +`item`.`shadow`, +*/ + + return "`item`.`author-link`, `item`.`author-name`, `item`.`author-avatar`, + `item`.`owner-link`, `item`.`owner-name`, `item`.`owner-avatar`, + `item`.`contact-id`, `item`.`uid`, `item`.`id`, `item`.`parent`, + `item`.`uri`, `item`.`thr-parent`, `item`.`parent-uri`, + `item`.`commented`, `item`.`created`, `item`.`edited`, + `item`.`verb`, `item`.`object-type`, `item`.`postopts`, `item`.`plink`, + `item`.`guid`, `item`.`wall`, `item`.`private`, `item`.`starred`, + `item`.`title`, `item`.`body`, `item`.`file`, `item`.`event-id`, + `item`.`location`, `item`.`coord`, `item`.`app`, + `item`.`rendered-hash`, `item`.`rendered-html`, + `item`.`allow_cid`, `item`.`allow_gid`, `item`.`deny_cid`, `item`.`deny_gid`, + `item`.`id` AS `item_id`, `item`.`network` AS `item_network`, + + `author`.`thumb` AS `author-thumb`, `owner`.`thumb` AS `owner-thumb`, + + `contact`.`network`, `contact`.`url`, `contact`.`name`, `contact`.`writable`, + `contact`.`self`, `contact`.`id` AS `cid`, `contact`.`alias`"; +} + +/** + * @brief SQL join for contacts that are needed for displaying items + */ +function item_joins() { + + return "STRAIGHT_JOIN `contact` ON `contact`.`id` = `item`.`contact-id` AND + NOT `contact`.`blocked` AND NOT `contact`.`pending` + LEFT JOIN `contact` AS `author` ON `author`.`id`=`item`.`author-id` + LEFT JOIN `contact` AS `owner` ON `owner`.`id`=`item`.`owner-id`"; +} + +/** + * @brief SQL condition for items that are needed for displaying items + */ +function item_condition() { + + return "`item`.`visible` AND NOT `item`.`deleted` AND NOT `item`.`moderated`"; +} /** * "Render" a conversation or list of items for HTML display. @@ -370,6 +469,8 @@ if(!function_exists('conversation')) { function conversation(&$a, $items, $mode, $update, $preview = false) { require_once('include/bbcode.php'); + require_once('include/Contact.php'); + require_once('mod/proxy.php'); $ssl_state = ((local_user()) ? true : false); @@ -396,25 +497,25 @@ function conversation(&$a, $items, $mode, $update, $preview = false) { $page_writeable = true; if(!$update) { // The special div is needed for liveUpdate to kick in for this page. - // We only launch liveUpdate if you aren't filtering in some incompatible + // We only launch liveUpdate if you aren't filtering in some incompatible // way and also you aren't writing a comment (discovered in javascript). $live_update_div = '
' . "\r\n" - . "\r\n"; } @@ -431,7 +532,7 @@ function conversation(&$a, $items, $mode, $update, $preview = false) { // because browser prefetching might change it on us. We have to deliver it with the page. $live_update_div = '
' . "\r\n" - . "\r\n"; } } @@ -441,7 +542,7 @@ function conversation(&$a, $items, $mode, $update, $preview = false) { $page_writeable = true; if(!$update) { $live_update_div = '
' . "\r\n" - . "\r\n"; } } @@ -474,8 +575,6 @@ function conversation(&$a, $items, $mode, $update, $preview = false) { else $return_url = $_SESSION['return_url'] = $a->query_string; - load_contact_links(local_user()); - $cb = array('items' => $items, 'mode' => $mode, 'update' => $update, 'preview' => $preview); call_hooks('conversation_start',$cb); @@ -484,9 +583,10 @@ function conversation(&$a, $items, $mode, $update, $preview = false) { $cmnt_tpl = get_markup_template('comment_item.tpl'); $hide_comments_tpl = get_markup_template('hide_comments.tpl'); - $alike = array(); - $dlike = array(); - + $conv_responses = array( + 'like' => array('title' => t('Likes','title')), 'dislike' => array('title' => t('Dislikes','title')), + 'attendyes' => array('title' => t('Attending','title')), 'attendno' => array('title' => t('Not attending','title')), 'attendmaybe' => array('title' => t('Might attend','title')) + ); // array with html for each thread (parent+comments) $threads = array(); @@ -505,6 +605,7 @@ function conversation(&$a, $items, $mode, $update, $preview = false) { $tpl = 'search_item.tpl'; foreach($items as $item) { + if($arr_blocked) { $blocked = false; foreach($arr_blocked as $b) { @@ -516,13 +617,12 @@ function conversation(&$a, $items, $mode, $update, $preview = false) { if($blocked) continue; } - + $threadsid++; $comment = ''; $owner_url = ''; - $owner_photo = ''; $owner_name = ''; $sparkle = ''; @@ -558,27 +658,15 @@ function conversation(&$a, $items, $mode, $update, $preview = false) { $tag["url"] = $searchpath.strtolower($tag["term"]); if ($tag["type"] == TERM_HASHTAG) { - $hashtags[] = "#".$tag["term"].""; + $hashtags[] = "#".$tag["term"].""; $prefix = "#"; } elseif ($tag["type"] == TERM_MENTION) { - $mentions[] = "@".$tag["term"].""; + $mentions[] = "@".$tag["term"].""; $prefix = "@"; } - $tags[] = $prefix."".$tag["term"].""; + $tags[] = $prefix."".$tag["term"].""; } - /*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); if($profile_link === 'mailbox') @@ -588,16 +676,26 @@ function conversation(&$a, $items, $mode, $update, $preview = false) { else $profile_link = zrl($profile_link); - $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'])) ? $a->get_cached_avatar_image($item['author-avatar']) : $item['thumb']); + if (!isset($item['author-thumb']) OR ($item['author-thumb'] == "")) { + $author_contact = get_contact_details_by_url($item['author-link'], $profile_owner); + if ($author_contact["thumb"]) + $item['author-thumb'] = $author_contact["thumb"]; + else + $item['author-thumb'] = $item['author-avatar']; + } + + if (!isset($item['owner-thumb']) OR ($item['owner-thumb'] == "")) { + $owner_contact = get_contact_details_by_url($item['owner-link'], $profile_owner); + if ($owner_contact["thumb"]) + $item['owner-thumb'] = $owner_contact["thumb"]; + else + $item['owner-thumb'] = $item['owner-avatar']; + } $locate = array('location' => $item['location'], 'coord' => $item['coord'], 'html' => ''); call_hooks('render_location',$locate); - $location = ((strlen($locate['html'])) ? $locate['html'] : render_location_google($locate)); + $location = ((strlen($locate['html'])) ? $locate['html'] : render_location_dummy($locate)); localize_item($item); if($mode === 'network-new') @@ -620,7 +718,7 @@ function conversation(&$a, $items, $mode, $update, $preview = false) { $likebuttons = false; $shareable = false; - $body = prepare_body($item,true); + $body = prepare_body($item,true, $preview); list($categories, $folders) = get_cats_and_terms($item); @@ -646,16 +744,21 @@ function conversation(&$a, $items, $mode, $update, $preview = false) { $owner_name_e = $owner_name; } + if ($item['item_network'] == "") + $item['item_network'] = $item['network']; + $tmp_item = array( 'template' => $tpl, 'id' => (($preview) ? 'P0' : $item['item_id']), + 'network' => $item['item_network'], + 'network_name' => network_to_name($item['item_network'], $profile_link), 'linktitle' => sprintf( t('View %s\'s profile @ %s'), $profile_name, ((strlen($item['author-link'])) ? $item['author-link'] : $item['url'])), 'profile_url' => $profile_link, 'item_photo_menu' => item_photo_menu($item), 'name' => $profile_name_e, 'sparkle' => $sparkle, 'lock' => $lock, - 'thumb' => $profile_avatar, + 'thumb' => App::remove_baseurl(proxy_url($item['author-thumb'], false, PROXY_SIZE_THUMB)), 'title' => $item['title_e'], 'body' => $body_e, 'tags' => $tags_e, @@ -674,7 +777,7 @@ function conversation(&$a, $items, $mode, $update, $preview = false) { 'indent' => '', 'owner_name' => $owner_name_e, 'owner_url' => $owner_url, - 'owner_photo' => $owner_photo, + 'owner_photo' => App::remove_baseurl(proxy_url($item['owner-thumb'], false, PROXY_SIZE_THUMB)), 'plink' => get_plink($item), 'edpost' => false, 'isstarred' => $isstarred, @@ -684,7 +787,8 @@ function conversation(&$a, $items, $mode, $update, $preview = false) { 'like' => '', 'dislike' => '', 'comment' => '', - 'conv' => (($preview) ? '' : array('href'=> $a->get_baseurl($ssl_state) . '/display/' . $nickname . '/' . $item['id'], 'title'=> t('View in context'))), + //'conv' => (($preview) ? '' : array('href'=> 'display/' . $nickname . '/' . $item['id'], 'title'=> t('View in context'))), + 'conv' => (($preview) ? '' : array('href'=> 'display/'.$item['guid'], 'title'=> t('View in context'))), 'previewing' => $previewing, 'wait' => t('Please wait'), 'thread_level' => 1, @@ -694,10 +798,10 @@ function conversation(&$a, $items, $mode, $update, $preview = false) { call_hooks('display_item', $arr); $threads[$threadsid]['id'] = $item['item_id']; + $threads[$threadsid]['network'] = $item['item_network']; $threads[$threadsid]['items'] = array($arr['output']); } - } else { @@ -719,7 +823,7 @@ function conversation(&$a, $items, $mode, $update, $preview = false) { if($arr_blocked) { $blocked = false; foreach($arr_blocked as $b) { - + if($b && link_compare($item['author-link'],$b)) { $blocked = true; break; @@ -728,12 +832,11 @@ function conversation(&$a, $items, $mode, $update, $preview = false) { if($blocked) continue; } - + // Can we put this after the visibility check? - like_puller($a,$item,$alike,'like'); - like_puller($a,$item,$dlike,'dislike'); + builtin_activity_puller($item, $conv_responses); // Only add what is visible if($item['network'] === NETWORK_MAIL && local_user() != $item['uid']) { @@ -753,7 +856,8 @@ function conversation(&$a, $items, $mode, $update, $preview = false) { } } - $threads = $conv->get_template_data($alike, $dlike); + $threads = $conv->get_template_data($conv_responses); + if(!$threads) { logger('[ERROR] conversation : Failed to get template data.', LOGGER_DEBUG); $threads = array(); @@ -777,21 +881,17 @@ function conversation(&$a, $items, $mode, $update, $preview = false) { function best_link_url($item,&$sparkle,$ssl_state = false) { - $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($ssl_state) . '/redir/' . $a->contacts[$clean_url]['id']; - $sparkle = true; - } - else - $best_url = $a->contacts[$clean_url]['url']; + if (local_user()) { + $r = q("SELECT `id` FROM `contact` WHERE `network` = '%s' AND `uid` = %d AND `nurl` = '%s' LIMIT 1", + dbesc(NETWORK_DFRN), intval(local_user()), dbesc(normalise_link($clean_url))); + if ($r) { + $best_url = 'redir/'.$r[0]['id']; + $sparkle = true; } } if(! $best_url) { @@ -807,15 +907,12 @@ function best_link_url($item,&$sparkle,$ssl_state = false) { if(! function_exists('item_photo_menu')){ function item_photo_menu($item){ - $a = get_app(); $ssl_state = false; - if(local_user()) { + if(local_user()) $ssl_state = true; - if(! count($a->contacts)) - load_contact_links(local_user()); - } + $sub_link=""; $poke_link=""; $contact_url=""; @@ -823,6 +920,7 @@ function item_photo_menu($item){ $status_link=""; $photos_link=""; $posts_link=""; + $network = ""; if((local_user()) && local_user() == $item['uid'] && $item['parent'] == $item['id'] && (! $item['self'])) { $sub_link = 'javascript:dosubthread(' . $item['id'] . '); return false;'; @@ -833,51 +931,53 @@ function item_photo_menu($item){ if($profile_link === 'mailbox') $profile_link = ''; + $cid = 0; + $network = ""; + $rel = 0; + $r = q("SELECT `id`, `network`, `rel` FROM `contact` WHERE `uid` = %d AND `nurl` = '%s' LIMIT 1", + intval(local_user()), dbesc(normalise_link($item['author-link']))); + if ($r) { + $cid = $r[0]["id"]; + $network = $r[0]["network"]; + $rel = $r[0]["rel"]; + } + 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($ssl_state) . '/message/new/' . $cid; + $status_link = $profile_link."?url=status"; + $photos_link = $profile_link."?url=photos"; + $profile_link = $profile_link."?url=profile"; $zurl = ''; - } - else { + } else $profile_link = zrl($profile_link); - if(local_user() && local_user() == $item['uid'] && link_compare($item['url'],$item['author-link'])) { - $cid = $item['contact-id']; - } - else { - $cid = 0; - } - } - if(($cid) && (! $item['self'])) { - $poke_link = $a->get_baseurl($ssl_state) . '/poke/?f=&c=' . $cid; - $contact_url = $a->get_baseurl($ssl_state) . '/contacts/' . $cid; - $posts_link = $a->get_baseurl($ssl_state) . '/network/0?nets=all&cid=' . $cid; - - $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_DIASPORA) { - $pm_url = $a->get_baseurl($ssl_state) . '/message/new/' . $cid; - } - } - } + if($cid && !$item['self']) { + $poke_link = 'poke/?f=&c='.$cid; + $contact_url = 'contacts/'.$cid; + $posts_link = 'contacts/'.$cid.'/posts'; + if (in_array($network, array(NETWORK_DFRN, NETWORK_DIASPORA))) + $pm_url = 'message/new/'.$cid; } - $menu = Array( - t("Follow Thread") => $sub_link, - t("View Status") => $status_link, - t("View Profile") => $profile_link, - t("View Photos") => $photos_link, - t("Network Posts") => $posts_link, - t("Edit Contact") => $contact_url, - t("Send PM") => $pm_url, - t("Poke") => $poke_link - ); + if (local_user()) { + $menu = Array( + t("Follow Thread") => $sub_link, + t("View Status") => $status_link, + t("View Profile") => $profile_link, + t("View Photos") => $photos_link, + t("Network Posts") => $posts_link, + t("Edit Contact") => $contact_url, + t("Send PM") => $pm_url + ); + + if ($network == NETWORK_DFRN) + $menu[t("Poke")] = $poke_link; + if ((($cid == 0) OR ($rel == CONTACT_IS_FOLLOWER)) AND + in_array($item['network'], array(NETWORK_DFRN, NETWORK_OSTATUS, NETWORK_DIASPORA))) + $menu[t("Connect/Follow")] = "follow?url=".urlencode($item['author-link']); + } else + $menu = array(t("View Profile") => $item['author-link']); $args = array('item' => $item, 'menu' => $menu); @@ -889,72 +989,120 @@ function item_photo_menu($item){ foreach($menu as $k=>$v){ if(strpos($v,'javascript:') === 0) { $v = substr($v,11); - $o .= "
  • $k
  • \n"; + $o .= "
  • $k
  • \n"; } - elseif ($v!="") $o .= "
  • $k
  • \n"; + elseif ($v!="") $o .= "
  • $k
  • \n"; } return $o; }} -if(! function_exists('like_puller')) { -function like_puller($a,$item,&$arr,$mode) { - - $url = ''; - $sparkle = ''; - $verb = (($mode === 'like') ? ACTIVITY_LIKE : ACTIVITY_DISLIKE); +/** + * @brief Checks item to see if it is one of the builtin activities (like/dislike, event attendance, consensus items, etc.) + * Increments the count of each matching activity and adds a link to the author as needed. + * + * @param array $item + * @param array &$conv_responses (already created with builtin activity structure) + * @return void + */ +if(! function_exists('builtin_activity_puller')) { +function builtin_activity_puller($item, &$conv_responses) { + foreach($conv_responses as $mode => $v) { + $url = ''; + $sparkle = ''; - 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(true) . '/redir/' . $item['contact-id']; - $sparkle = ' class="sparkle" '; + switch($mode) { + case 'like': + $verb = ACTIVITY_LIKE; + break; + case 'dislike': + $verb = ACTIVITY_DISLIKE; + break; + case 'attendyes': + $verb = ACTIVITY_ATTEND; + break; + case 'attendno': + $verb = ACTIVITY_ATTENDNO; + break; + case 'attendmaybe': + $verb = ACTIVITY_ATTENDMAYBE; + break; + default: + return; + break; } - else - $url = zrl($url); - if(! $item['thr-parent']) - $item['thr-parent'] = $item['parent-uri']; + if((activity_match($item['verb'], $verb)) && ($item['id'] != $item['parent'])) { + $url = $item['author-link']; + if((local_user()) && (local_user() == $item['uid']) && ($item['network'] === NETWORK_DFRN) && (! $item['self']) && (link_compare($item['author-link'],$item['url']))) { + $url = 'redir/' . $item['contact-id']; + $sparkle = ' class="sparkle" '; + } + else + $url = zrl($url); + + $url = '' . htmlentities($item['author-name']) . ''; - if(! ((isset($arr[$item['thr-parent'] . '-l'])) && (is_array($arr[$item['thr-parent'] . '-l'])))) - $arr[$item['thr-parent'] . '-l'] = array(); - if(! isset($arr[$item['thr-parent']])) - $arr[$item['thr-parent']] = 1; - else - $arr[$item['thr-parent']] ++; - $arr[$item['thr-parent'] . '-l'][] = '' . $item['author-name'] . ''; + if(! $item['thr-parent']) + $item['thr-parent'] = $item['parent-uri']; + + if(! ((isset($conv_responses[$mode][$item['thr-parent'] . '-l'])) + && (is_array($conv_responses[$mode][$item['thr-parent'] . '-l'])))) + $conv_responses[$mode][$item['thr-parent'] . '-l'] = array(); + + // only list each unique author once + if(in_array($url,$conv_responses[$mode][$item['thr-parent'] . '-l'])) + continue; + + if(! isset($conv_responses[$mode][$item['thr-parent']])) + $conv_responses[$mode][$item['thr-parent']] = 1; + else + $conv_responses[$mode][$item['thr-parent']] ++; + + $conv_responses[$mode][$item['thr-parent'] . '-l'][] = $url; + + // there can only be one activity verb per item so if we found anything, we can stop looking + return; + } } - return; }} -// Format the like/dislike text for a profile item -// $cnt = number of people who like/dislike the item +// Format the vote text for a profile item +// $cnt = number of people who vote the item // $arr = array of pre-linked names of likers/dislikers -// $type = one of 'like, 'dislike' +// $type = one of 'like, 'dislike', 'attendyes', 'attendno', 'attendmaybe' // $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');\""; + $expanded = ''; + + if($cnt == 1) { + $likers = $arr[0]; + + // Phrase if there is only one liker. In other cases it will be uses for the expanded + // list which show all likers switch($type) { - case 'like': - $phrase = sprintf( t('%2$d people like this'), $spanatts, $cnt); + case 'like' : + $phrase = sprintf( t('%s likes this.'), $likers); break; - case 'dislike': - $phrase = sprintf( t('%2$d people don\'t like this'), $spanatts, $cnt); + case 'dislike' : + $phrase = sprintf( t('%s doesn\'t like this.'), $likers); + break; + case 'attendyes' : + $phrase = sprintf( t('%s attends.'), $likers); + break; + case 'attendno' : + $phrase = sprintf( t('%s doesn\'t attend.'), $likers); + break; + case 'attendmaybe' : + $phrase = sprintf( t('%s attends maybe.'), $likers); break; } - $phrase .= EOL ; - $o .= replace_macros(get_markup_template('voting_fakelink.tpl'), array( - '$phrase' => $phrase, - '$type' => $type, - '$id' => $id - )); + } + if($cnt > 1) { $total = count($arr); if($total >= MAX_LIKERS) $arr = array_slice($arr, 0, MAX_LIKERS - 1); @@ -967,9 +1115,45 @@ function format_like($cnt,$arr,$type,$id) { $str = implode(', ', $arr); $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" . ''; + + $likers = $str; + + $spanatts = "class=\"fakelink\" onclick=\"openClose('{$type}list-$id');\""; + + switch($type) { + case 'like': + $phrase = sprintf( t('%2$d people like this'), $spanatts, $cnt); + $explikers = sprintf( t('%s like this.'), $likers); + break; + case 'dislike': + $phrase = sprintf( t('%2$d people don\'t like this'), $spanatts, $cnt); + $explikers = sprintf( t('%s don\'t like this.'), $likers); + break; + case 'attendyes': + $phrase = sprintf( t('%2$d people attend'), $spanatts, $cnt); + $explikers = sprintf( t('%s attend.'), $likers); + break; + case 'attendno': + $phrase = sprintf( t('%2$d people don\'t attend'), $spanatts, $cnt); + $explikers = sprintf( t('%s don\'t attend.'), $likers); + break; + case 'attendmaybe': + $phrase = sprintf( t('%2$d people anttend maybe'), $spanatts, $cnt); + $explikers = sprintf( t('%s anttend maybe.'), $likers); + break; + } + + $expanded .= "\t" . ''; } + + $phrase .= EOL ; + $o .= replace_macros(get_markup_template('voting_fakelink.tpl'), array( + '$phrase' => $phrase, + '$type' => $type, + '$id' => $id + )); + $o .= $expanded; + return $o; }} @@ -1021,37 +1205,8 @@ function status_editor($a,$x, $notes_cid = 0, $popup=false) { '$whereareu' => t('Where are you right now?') )); - $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" ' : ''); - $jotnets .= '
    ' . t("Post to Email") . '
    '; - } - call_hooks('jot_tool', $jotplugins); - call_hooks('jot_networks', $jotnets); - - if($notes_cid) - $jotnets .= ''; - // Private/public post links for the non-JS ACL form $private_post = 1; @@ -1077,7 +1232,7 @@ function status_editor($a,$x, $notes_cid = 0, $popup=false) { $o .= replace_macros($tpl,array( '$return_path' => $query_str, - '$action' => $a->get_baseurl(true) . '/item', + '$action' => 'item', '$share' => (x($x,'button') ? $x['button'] : t('Share')), '$upload' => t('Upload photo'), '$shortupload' => t('upload photo'), @@ -1093,29 +1248,28 @@ function status_editor($a,$x, $notes_cid = 0, $popup=false) { '$shortsetloc' => t('set location'), '$noloc' => t('Clear browser location'), '$shortnoloc' => t('clear location'), - '$title' => "", + '$title' => $x['title'], '$placeholdertitle' => t('Set title'), - '$category' => "", + '$category' => $x['category'], '$placeholdercategory' => (feature_enabled(local_user(),'categories') ? t('Categories (comma-separated list)') : ''), '$wait' => t('Please wait'), '$permset' => t('Permission settings'), '$shortpermset' => t('permissions'), '$ptyp' => (($notes_cid) ? 'note' : 'wall'), - '$content' => '', - '$post_id' => '', + '$content' => $x['content'], + '$post_id' => $x['post_id'], '$baseurl' => $a->get_baseurl(true), '$defloc' => $x['default_location'], '$visitor' => $x['visitor'], '$pvisit' => (($notes_cid) ? 'none' : $x['visitor']), - '$emailcc' => t('CC: email addresses'), '$public' => t('Public post'), '$jotnets' => $jotnets, - '$emtitle' => t('Example: bob@example.com, mary@example.com'), '$lockstate' => $x['lockstate'], '$bang' => $x['bang'], '$profile_uid' => $x['profile_uid'], '$preview' => ((feature_enabled($x['profile_uid'],'preview')) ? t('Preview') : ''), '$jotplugins' => $jotplugins, + '$notes_cid' => $notes_cid, '$sourceapp' => t($a->sourcename), '$cancel' => t('Cancel'), '$rand_num' => random_digits(12), @@ -1128,6 +1282,10 @@ function status_editor($a,$x, $notes_cid = 0, $popup=false) { '$private' => t('Private post'), '$is_private' => $private_post, '$public_link' => $public_post_link, + + //jot nav tab (used in some themes) + '$message' => t('Message'), + '$browser' => t('Browser'), )); @@ -1190,6 +1348,15 @@ function conv_sort($arr,$order) { $parents = array(); $children = array(); + $newarr = array(); + + // This is a preparation for having two different items with the same uri in one thread + // This will otherwise lead to an endless loop. + foreach($arr as $x) + if (!isset($newarr[$x['uri']])) + $newarr[$x['uri']] = $x; + + $arr = $newarr; foreach($arr as $x) if($x['id'] == $x['parent']) @@ -1256,14 +1423,58 @@ function find_thread_parent_index($arr,$x) { return false; } -function render_location_google($item) { - $location = (($item['location']) ? '' . $item['location'] . '' : ''); - $coord = (($item['coord']) ? '' . $item['coord'] . '' : ''); - if($coord) { - if($location) - $location .= '
    (' . $coord . ')'; - else - $location = '' . $coord . ''; +function render_location_dummy($item) { + if ($item['location'] != "") + return $item['location']; + + if ($item['coord'] != "") + return $item['coord']; +} + +function get_responses($conv_responses,$response_verbs,$ob,$item) { + $ret = array(); + foreach($response_verbs as $v) { + $ret[$v] = array(); + $ret[$v]['count'] = ((x($conv_responses[$v],$item['uri'])) ? $conv_responses[$v][$item['uri']] : ''); + $ret[$v]['list'] = ((x($conv_responses[$v],$item['uri'])) ? $conv_responses[$v][$item['uri'] . '-l'] : ''); + if(count($ret[$v]['list']) > MAX_LIKERS) { + $ret[$v]['list_part'] = array_slice($ret[$v]['list'], 0, MAX_LIKERS); + array_push($ret[$v]['list_part'], '' . t('View all') . ''); + } + else { + $ret[$v]['list_part'] = ''; + } + $ret[$v]['button'] = get_response_button_text($v,$ret[$v]['count']); + $ret[$v]['title'] = $conv_responses[$v]['title']; + } + + $count = 0; + foreach($ret as $key) { + if ($key['count'] == true) + $count++; + } + $ret['count'] = $count; + + return $ret; +} + +function get_response_button_text($v,$count) { + switch($v) { + case 'like': + return tt('Like','Likes',$count,'noun'); + break; + case 'dislike': + return tt('Dislike','Dislikes',$count,'noun'); + break; + case 'attendyes': + return tt('Attending','Attending',$count,'noun'); + break; + case 'attendno': + return tt('Not Attending','Not Attending',$count,'noun'); + break; + case 'attendmaybe': + return tt('Undecided','Undecided',$count,'noun'); + break; } - return $location; }