diff --git a/include/Contact.php b/include/Contact.php index 79a14ab581..30c86a3c7c 100644 --- a/include/Contact.php +++ b/include/Contact.php @@ -192,72 +192,58 @@ function unmark_for_death($contact) { ); }} -function get_contact_details_by_url($url, $uid = -1) { +function get_contact_details_by_url($url, $uid = -1, $default = array()) { if ($uid == -1) $uid = local_user(); - $r = q("SELECT `id` AS `gid`, `url`, `name`, `nick`, `addr`, `photo`, `location`, `about`, `keywords`, `gender`, `community`, `network` FROM `gcontact` WHERE `nurl` = '%s' LIMIT 1", - dbesc(normalise_link($url))); + // community, nurl, alias, nsfw, birthday - if ($r) { + // Fetch contact data from the contact table for the user and given network + $r = q("SELECT `id`, `id` AS `cid`, 0 AS `gid`, `uid`, `url`, `nurl`, `alias`, `network`, `name`, `nick`, `addr`, `location`, `about`, + `keywords`, `gender`, `photo`, `thumb`, `forum`, `prv`, (`forum` | `prv`) AS `community`, `bd`, `bd` AS `birthday`, `self` + FROM `contact` WHERE `nurl` = '%s' AND `uid` = %d AND `network` IN ('%s', '')", + dbesc(normalise_link($url)), intval($uid), dbesc($profile["network"])); + + // Is the contact present for the user in a different network? (Can happen with OStatus and the "Statusnet" addon) + if (!count($r) AND !isset($profile)) + $r = q("SELECT `id`, `id` AS `cid`, 0 AS `gid`, `uid`, `url`, `nurl`, `alias`, `network`, `name`, `nick`, `addr`, `location`, `about`, + `keywords`, `gender`, `photo`, `thumb`, `forum`, `prv`, (`forum` | `prv`) AS `community`, `bd`, `bd` AS `birthday`, `self` + FROM `contact` WHERE `nurl` = '%s' AND `uid` = %d", + dbesc(normalise_link($url)), intval($uid)); + + // Fetch the data from the contact table with "uid=0" (which is filled automatically) + if (!count($r) AND !isset($profile)) + $r = q("SELECT `id`, 0 AS `cid`, 0 AS `gid`, `uid`, `url`, `nurl`, `alias`, `network`, `name`, `nick`, `addr`, `location`, `about`, + `keywords`, `gender`, `photo`, `thumb`, `forum`, `prv`, (`forum` | `prv`) AS `community`, `bd`, `bd` AS `birthday`, 0 AS `self` + FROM `contact` WHERE `nurl` = '%s' AND `uid` = 0", + dbesc(normalise_link($url))); + + // Fetch the data from the gcontact table + if (!count($r) AND !isset($profile)) + $r = q("SELECT 0 AS `id`, 0 AS `cid`, `id` AS `gid`, 0 AS `uid`, `url`, `nurl`, `alias`, `network`, `name`, `nick`, `addr`, `location`, `about`, + `keywords`, `gender`, `photo`, `photo` AS `thumb`, `community` AS `forum`, 0 AS `prv`, `community`, `birthday` AS `bd`, `birthday`, 0 AS `self` + FROM `gcontact` WHERE `nurl` = '%s' LIMIT 1", + dbesc(normalise_link($url))); + + if ($r) $profile = $r[0]; - - if ((($profile["addr"] == "") OR ($profile["name"] == "")) AND - in_array($profile["network"], array(NETWORK_DFRN, NETWORK_DIASPORA, NETWORK_OSTATUS))) - proc_run('php',"include/update_gcontact.php", $profile["gid"]); + else { + $profile = $default; + if (!isset($profile["thumb"]) AND isset($profile["photo"])) + $profile["thumb"] = $profile["photo"]; } - // Fetching further contact data from the contact table - $r = q("SELECT `id`, `uid`, `url`, `network`, `name`, `nick`, `addr`, `location`, `about`, `keywords`, `gender`, `photo`, `thumb`, `addr`, `forum`, `prv`, `bd`, `self` FROM `contact` WHERE `nurl` = '%s' AND `uid` = %d AND `network` IN ('%s', '')", - dbesc(normalise_link($url)), intval($uid), dbesc($profile["network"])); - - if (!count($r) AND !isset($profile)) - $r = q("SELECT `id`, `uid`, `url`, `network`, `name`, `nick`, `addr`, `location`, `about`, `keywords`, `gender`, `photo`, `thumb`, `addr`, `forum`, `prv`, `bd`, `self` FROM `contact` WHERE `nurl` = '%s' AND `uid` = %d", - dbesc(normalise_link($url)), intval($uid)); - - if (!count($r) AND !isset($profile)) - $r = q("SELECT `id`, `uid`, `url`, `network`, `name`, `nick`, `addr`, `location`, `about`, `keywords`, `gender`, `photo`, `thumb`, `addr`, `forum`, `prv`, `bd` FROM `contact` WHERE `nurl` = '%s' AND `uid` = 0", - dbesc(normalise_link($url))); - - if ($r) { - if (!isset($profile["url"]) AND $r[0]["url"]) - $profile["url"] = $r[0]["url"]; - if (!isset($profile["name"]) AND $r[0]["name"]) - $profile["name"] = $r[0]["name"]; - if (!isset($profile["nick"]) AND $r[0]["nick"]) - $profile["nick"] = $r[0]["nick"]; - if (!isset($profile["addr"]) AND $r[0]["addr"]) - $profile["addr"] = $r[0]["addr"]; - if ((!isset($profile["photo"]) OR $r[0]["self"]) AND $r[0]["photo"]) - $profile["photo"] = $r[0]["photo"]; - if (!isset($profile["location"]) AND $r[0]["location"]) - $profile["location"] = $r[0]["location"]; - if (!isset($profile["about"]) AND $r[0]["about"]) - $profile["about"] = $r[0]["about"]; - if (!isset($profile["keywords"]) AND $r[0]["keywords"]) - $profile["keywords"] = $r[0]["keywords"]; - if (!isset($profile["gender"]) AND $r[0]["gender"]) - $profile["gender"] = $r[0]["gender"]; - if (isset($r[0]["forum"]) OR isset($r[0]["prv"])) - $profile["community"] = ($r[0]["forum"] OR $r[0]["prv"]); - if (!isset($profile["network"]) AND $r[0]["network"]) - $profile["network"] = $r[0]["network"]; - if (!isset($profile["addr"]) AND $r[0]["addr"]) - $profile["addr"] = $r[0]["addr"]; - if (!isset($profile["bd"]) AND $r[0]["bd"]) - $profile["bd"] = $r[0]["bd"]; - if (isset($r[0]["thumb"])) - $profile["thumb"] = $r[0]["thumb"]; - if ($r[0]["uid"] == 0) - $profile["cid"] = 0; - else - $profile["cid"] = $r[0]["id"]; - } else - $profile["cid"] = 0; + if ((($profile["addr"] == "") OR ($profile["name"] == "")) AND ($profile["gid"] != 0) AND + in_array($profile["network"], array(NETWORK_DFRN, NETWORK_DIASPORA, NETWORK_OSTATUS))) { + proc_run('php',"include/update_gcontact.php", $profile["gid"]); + } + // Show contact details of Diaspora contacts only if connected if (($profile["cid"] == 0) AND ($profile["network"] == NETWORK_DIASPORA)) { $profile["location"] = ""; $profile["about"] = ""; + $profile["gender"] = ""; + $profile["birthday"] = "0000-00-00"; } return($profile); diff --git a/include/conversation.php b/include/conversation.php index d889ba0020..8bbd57dbbf 100644 --- a/include/conversation.php +++ b/include/conversation.php @@ -389,6 +389,7 @@ 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); @@ -610,11 +611,19 @@ 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']; + // Don't rely on the author-avatar. It is better to use the data from the contact table + $author_contact = get_contact_details_by_url($item['author-link'], $profile_owner); + if ($author_contact["thumb"]) + $profile_avatar = $author_contact["thumb"]; else - $profile_avatar = $a->remove_baseurl(((strlen($item['author-avatar'])) ? $item['author-avatar'] : $item['thumb'])); + $profile_avatar = $item['author-avatar']; + + // This was the old method. We leave it here at the moment + //$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 = $a->remove_baseurl(((strlen($item['author-avatar'])) ? $item['author-avatar'] : $item['thumb'])); $locate = array('location' => $item['location'], 'coord' => $item['coord'], 'html' => ''); call_hooks('render_location',$locate); diff --git a/mod/allfriends.php b/mod/allfriends.php index 356a389b83..360b222b50 100644 --- a/mod/allfriends.php +++ b/mod/allfriends.php @@ -49,7 +49,7 @@ function allfriends_content(&$a) { foreach($r as $rr) { //get further details of the contact - $contact_details = get_contact_details_by_url($rr['url'], $uid); + $contact_details = get_contact_details_by_url($rr['url'], $uid, $rr); $photo_menu = ''; @@ -68,9 +68,9 @@ function allfriends_content(&$a) { $entry = array( 'url' => $rr['url'], 'itemurl' => (($contact_details['addr'] != "") ? $contact_details['addr'] : $rr['url']), - 'name' => htmlentities($rr['name']), - 'thumb' => proxy_url($rr['photo'], false, PROXY_SIZE_THUMB), - 'img_hover' => htmlentities($rr['name']), + 'name' => htmlentities($contact_details['name']), + 'thumb' => proxy_url($contact_details['thumb'], false, PROXY_SIZE_THUMB), + 'img_hover' => htmlentities($contact_details['name']), 'details' => $contact_details['location'], 'tags' => $contact_details['keywords'], 'about' => $contact_details['about'], diff --git a/mod/common.php b/mod/common.php index 62a5185fed..9b2c69f6d7 100644 --- a/mod/common.php +++ b/mod/common.php @@ -109,14 +109,14 @@ function common_content(&$a) { $rr[id] = $rr[cid]; $photo_menu = ''; - $photo_menu = contact_photo_menu ($rr); + $photo_menu = contact_photo_menu($rr); $entry = array( 'url' => $rr['url'], 'itemurl' => (($contact_details['addr'] != "") ? $contact_details['addr'] : $rr['url']), - 'name' => $rr['name'], - 'thumb' => proxy_url($rr['photo'], false, PROXY_SIZE_THUMB), - 'img_hover' => htmlentities($rr['name']), + 'name' => $contact_details['name'], + 'thumb' => proxy_url($contact_details['thumb'], false, PROXY_SIZE_THUMB), + 'img_hover' => htmlentities($contact_details['name']), 'details' => $contact_details['location'], 'tags' => $contact_details['keywords'], 'about' => $contact_details['about'], diff --git a/mod/content.php b/mod/content.php index 49cff74d2d..cecdfd0001 100644 --- a/mod/content.php +++ b/mod/content.php @@ -416,11 +416,18 @@ function render_content(&$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']; + // Don't rely on the author-avatar. It is better to use the data from the contact table + $author_contact = get_contact_details_by_url($item['author-link'], $profile_owner); + if ($author_contact["thumb"]) + $profile_avatar = $author_contact["thumb"]; else - $profile_avatar = $a->remove_baseurl(((strlen($item['author-avatar'])) ? $item['author-avatar'] : $item['thumb'])); + $profile_avatar = $item['author-avatar']; + + //$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 = $a->remove_baseurl(((strlen($item['author-avatar'])) ? $item['author-avatar'] : $item['thumb'])); $locate = array('location' => $item['location'], 'coord' => $item['coord'], 'html' => ''); call_hooks('render_location',$locate); @@ -787,11 +794,18 @@ function render_content(&$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']; + // Don't rely on the author-avatar. It is better to use the data from the contact table + $author_contact = get_contact_details_by_url($item['author-link'], $profile_owner); + if ($author_contact["thumb"]) + $profile_avatar = $author_contact["thumb"]; else - $profile_avatar = $a->remove_baseurl(((strlen($item['author-avatar']) && $diff_author) ? $item['author-avatar'] : $thumb)); + $profile_avatar = $item['author-avatar']; + + //$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 = $a->remove_baseurl(((strlen($item['author-avatar']) && $diff_author) ? $item['author-avatar'] : $thumb)); $like = ((x($alike,$item['uri'])) ? format_like($alike[$item['uri']],$alike[$item['uri'] . '-l'],'like',$item['uri']) : ''); $dislike = ((x($dlike,$item['uri'])) ? format_like($dlike[$item['uri']],$dlike[$item['uri'] . '-l'],'dislike',$item['uri']) : ''); @@ -805,9 +819,9 @@ function render_content(&$a, $items, $mode, $update, $preview = false) { $shiny = ""; if(strcmp(datetime_convert('UTC','UTC',$item['created']),datetime_convert('UTC','UTC','now - 12 hours')) > 0) - $shiny = 'shiny'; + $shiny = 'shiny'; - // + // localize_item($item); diff --git a/mod/hovercard.php b/mod/hovercard.php index f5c410e111..4a6619b788 100644 --- a/mod/hovercard.php +++ b/mod/hovercard.php @@ -48,11 +48,6 @@ function hovercard_content() { if($nurl) { // Search for contact data $contact = get_contact_details_by_url($nurl); - - // Get_contact_details_by_url() doesn't provide the nurl but we - // need it for the photo_menu, so we copy it to the contact array - if (!isset($contact["nurl"])) - $contact["nurl"] = $nurl; } if(!is_array($contact)) @@ -69,7 +64,7 @@ function hovercard_content() { 'name' => $contact["name"], 'nick' => $contact["nick"], 'addr' => (($contact["addr"] != "") ? $contact["addr"] : $contact["url"]), - 'thumb' => proxy_url($contact["photo"], false, PROXY_SIZE_THUMB), + 'thumb' => proxy_url($contact["thumb"], false, PROXY_SIZE_THUMB), 'url' => ($cid ? ("redir/".$cid) : zrl($contact["url"])), 'nurl' => $contact["nurl"], // We additionally store the nurl as identifier // 'alias' => $contact["alias"], diff --git a/mod/message.php b/mod/message.php index f0ab7d2ac9..b5c6c064dc 100644 --- a/mod/message.php +++ b/mod/message.php @@ -489,7 +489,7 @@ function message_content(&$a) { 'from_name' => $from_name_e, 'from_url' => $from_url, 'sparkle' => $sparkle, - 'from_photo' => $message['from-photo'], + 'from_photo' => proxy_url($message['from-photo'], false, PROXY_SIZE_THUMB), 'subject' => $subject_e, 'body' => $body_e, 'delete' => t('Delete message'), diff --git a/mod/nogroup.php b/mod/nogroup.php index 9f6e978433..2f0985c9db 100644 --- a/mod/nogroup.php +++ b/mod/nogroup.php @@ -35,18 +35,18 @@ function nogroup_content(&$a) { if(count($r)) { foreach($r as $rr) { - $contact_details = get_contact_details_by_url($rr['url'], local_user()); + $contact_details = get_contact_details_by_url($rr['url'], local_user(), $rr); $contacts[] = array( - 'img_hover' => sprintf( t('Visit %s\'s profile [%s]'),$rr['name'],$rr['url']), + 'img_hover' => sprintf(t('Visit %s\'s profile [%s]'), $contact_details['name'], $rr['url']), 'edit_hover' => t('Edit contact'), 'photo_menu' => contact_photo_menu($rr), 'id' => $rr['id'], 'alt_text' => $alt_text, 'dir_icon' => $dir_icon, - 'thumb' => $rr['thumb'], - 'name' => $rr['name'], - 'username' => $rr['name'], + 'thumb' => proxy_url($contact_details['thumb'], false, PROXY_SIZE_THUMB), + 'name' => $contact_details['name'], + 'username' => $contact_details['name'], 'details' => $contact_details['location'], 'tags' => $contact_details['keywords'], 'about' => $contact_details['about'], diff --git a/mod/suggest.php b/mod/suggest.php index b73c2cd1b6..bb8823d9ec 100644 --- a/mod/suggest.php +++ b/mod/suggest.php @@ -81,14 +81,14 @@ function suggest_content(&$a) { $photo_menu = array(array(t("View Profile"), zrl($rr["url"]))); $photo_menu[] = array(t("Connect/Follow"), $connlnk); $photo_menu[] = array(t('Ignore/Hide'), $ignlnk); - $contact_details = get_contact_details_by_url($rr["url"], local_user()); + $contact_details = get_contact_details_by_url($rr["url"], local_user(), $rr); $entry = array( 'url' => zrl($rr['url']), 'itemurl' => (($contact_details['addr'] != "") ? $contact_details['addr'] : $rr['url']), 'img_hover' => $rr['url'], - 'name' => $rr['name'], - 'thumb' => proxy_url($rr['photo'], false, PROXY_SIZE_THUMB), + 'name' => $contact_details['name'], + 'thumb' => proxy_url($contact_details['thumb'], false, PROXY_SIZE_THUMB), 'details' => $contact_details['location'], 'tags' => $contact_details['keywords'], 'about' => $contact_details['about'], diff --git a/mod/viewcontacts.php b/mod/viewcontacts.php index 04520e0d93..2e36a3bd7a 100644 --- a/mod/viewcontacts.php +++ b/mod/viewcontacts.php @@ -90,15 +90,15 @@ function viewcontacts_content(&$a) { else $url = zrl($url); - $contact_details = get_contact_details_by_url($rr['url'], $a->profile['uid']); + $contact_details = get_contact_details_by_url($rr['url'], $a->profile['uid'], $rr); $contacts[] = array( 'id' => $rr['id'], - 'img_hover' => sprintf( t('Visit %s\'s profile [%s]'), $rr['name'], $rr['url']), + 'img_hover' => sprintf( t('Visit %s\'s profile [%s]'), $contact_details['name'], $rr['url']), 'photo_menu' => contact_photo_menu($rr), - 'thumb' => proxy_url($rr['thumb'], false, PROXY_SIZE_THUMB), - 'name' => htmlentities(substr($rr['name'],0,20)), - 'username' => htmlentities($rr['name']), + 'thumb' => proxy_url($contact_details['thumb'], false, PROXY_SIZE_THUMB), + 'name' => htmlentities(substr($contact_details['name'],0,20)), + 'username' => htmlentities($contact_details['name']), 'details' => $contact_details['location'], 'tags' => $contact_details['keywords'], 'about' => $contact_details['about'], diff --git a/object/Item.php b/object/Item.php index 59659cdaff..a27ff32f9c 100644 --- a/object/Item.php +++ b/object/Item.php @@ -150,11 +150,19 @@ class Item extends BaseObject { 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']; + // Don't rely on the author-avatar. It is better to use the data from the contact table + $author_contact = get_contact_details_by_url($item['author-link'], $profile_owner); + if ($author_contact["thumb"]) + $profile_avatar = $author_contact["thumb"]; else - $profile_avatar = (((strlen($item['author-avatar'])) && $diff_author) ? $item['author-avatar'] : $a->remove_baseurl($this->get_data_value('thumb'))); + $profile_avatar = $item['author-avatar']; + + // This was the old method. We leave it here at the moment + //$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'])) && $diff_author) ? $item['author-avatar'] : $a->remove_baseurl($this->get_data_value('thumb'))); $locate = array('location' => $item['location'], 'coord' => $item['coord'], 'html' => ''); call_hooks('render_location',$locate);