diff --git a/boot.php b/boot.php index 8434d34c70..adfeeb415f 100644 --- a/boot.php +++ b/boot.php @@ -1896,31 +1896,6 @@ function is_site_admin() { return false; } - -function load_contact_links($uid) { - - $a = get_app(); - - $ret = array(); - - if(! $uid || x($a->contacts,'empty')) - return; - - $r = q("SELECT `id`,`network`,`url`,`thumb`, `rel` FROM `contact` WHERE `uid` = %d AND `self` = 0 AND `blocked` = 0 AND `thumb` != ''", - intval($uid) - ); - if(count($r)) { - foreach($r as $rr){ - $url = normalise_link($rr['url']); - $ret[$url] = $rr; - } - } else - $ret['empty'] = true; - - $a->contacts = $ret; - return; -} - /** * @brief Returns querystring as string from a mapped array. * diff --git a/include/Contact.php b/include/Contact.php index 79a14ab581..6297cdbe74 100644 --- a/include/Contact.php +++ b/include/Contact.php @@ -192,72 +192,86 @@ function unmark_for_death($contact) { ); }} -function get_contact_details_by_url($url, $uid = -1) { +/** + * @brief Get contact data for a given profile link + * + * The function looks at several places (contact table and gcontact table) for the contact + * + * @param string $url The profile link + * @param int $uid User id + * @param array $default If not data was found take this data as default value + * + * @return array Contact data + */ +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))); + // 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` 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` 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` 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`, 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"]); + // "bd" always contains the upcoming birthday of a contact. + // "birthday" might contain the birthday including the year of birth. + if ($profile["birthday"] != "0000-00-00") { + $bd_timestamp = strtotime($profile["birthday"]); + $month = date("m", $bd_timestamp); + $day = date("d", $bd_timestamp); + + $current_timestamp = time(); + $current_year = date("Y", $current_timestamp); + $current_month = date("m", $current_timestamp); + $current_day = date("d", $current_timestamp); + + $profile["bd"] = $current_year."-".$month."-".$day; + $current = $current_year."-".$current_month."-".$current_day; + + if ($profile["bd"] < $current) + $profile["bd"] = (++$current_year)."-".$month."-".$day; + } else + $profile["bd"] = "0000-00-00"; + } 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/api.php b/include/api.php index 488e858445..f32dc97c6c 100644 --- a/include/api.php +++ b/include/api.php @@ -270,8 +270,6 @@ api_login($a); } - load_contact_links(api_user()); - logger('API call for ' . $a->user['username'] . ': ' . $a->query_string); logger('API parameters: ' . print_r($_REQUEST,true)); diff --git a/include/conversation.php b/include/conversation.php index d889ba0020..38f6e76862 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); @@ -494,8 +495,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); @@ -610,11 +609,12 @@ 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']; $locate = array('location' => $item['location'], 'coord' => $item['coord'], 'html' => ''); call_hooks('render_location',$locate); @@ -682,7 +682,7 @@ function conversation(&$a, $items, $mode, $update, $preview = false) { 'name' => $profile_name_e, 'sparkle' => $sparkle, 'lock' => $lock, - 'thumb' => proxy_url($profile_avatar, false, PROXY_SIZE_THUMB), + 'thumb' => App::remove_baseurl(proxy_url($profile_avatar, false, PROXY_SIZE_THUMB)), 'title' => $item['title_e'], 'body' => $body_e, 'tags' => $tags_e, @@ -812,15 +812,7 @@ function best_link_url($item,&$sparkle,$ssl_state = 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 = 'redir/'.$a->contacts[$clean_url]['id']; - $sparkle = true; - } else - $best_url = $a->contacts[$clean_url]['url']; - } - } elseif (local_user()) { + 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) { @@ -845,11 +837,9 @@ function item_photo_menu($item){ $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=""; @@ -857,6 +847,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;'; @@ -867,46 +858,32 @@ 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 = '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 { - $r = q("SELECT `id`, `network` 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"]; - if ($r[0]["network"] == NETWORK_DIASPORA) - $pm_url = 'message/new/' . $cid; - - } else - $cid = 0; - } - } - if(($cid) && (! $item['self'])) { - $poke_link = 'poke/?f=&c=' . $cid; - $contact_url = 'contacts/' . $cid; - $posts_link = 'contacts/' . $cid . '/posts'; - - $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 = '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; } if (local_user()) { @@ -920,10 +897,10 @@ function item_photo_menu($item){ t("Send PM") => $pm_url ); - if ($a->contacts[$clean_url]['network'] === NETWORK_DFRN) + if ($network == NETWORK_DFRN) $menu[t("Poke")] = $poke_link; - if ((($cid == 0) OR ($a->contacts[$clean_url]['rel'] == CONTACT_IS_FOLLOWER)) AND + 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 diff --git a/include/identity.php b/include/identity.php index 580539c071..48a6c5bbf7 100644 --- a/include/identity.php +++ b/include/identity.php @@ -345,18 +345,21 @@ function profile_sidebar($profile, $block = 0) { ? trim(substr($profile['name'],0,strpos($profile['name'],' '))) : $profile['name']); $lastname = (($firstname === $profile['name']) ? '' : trim(substr($profile['name'],strlen($firstname)))); - $diaspora = array( - 'guid' => $profile['guid'], - 'podloc' => $a->get_baseurl(), - 'searchable' => (($profile['publish'] && $profile['net-publish']) ? 'true' : 'false' ), - 'nickname' => $profile['nickname'], - 'fullname' => $profile['name'], - 'firstname' => $firstname, - 'lastname' => $lastname, - 'photo300' => $a->get_baseurl() . '/photo/custom/300/' . $profile['uid'] . '.jpg', - 'photo100' => $a->get_baseurl() . '/photo/custom/100/' . $profile['uid'] . '.jpg', - 'photo50' => $a->get_baseurl() . '/photo/custom/50/' . $profile['uid'] . '.jpg', - ); + if ($profile['guid'] != "") + $diaspora = array( + 'guid' => $profile['guid'], + 'podloc' => $a->get_baseurl(), + 'searchable' => (($profile['publish'] && $profile['net-publish']) ? 'true' : 'false' ), + 'nickname' => $profile['nickname'], + 'fullname' => $profile['name'], + 'firstname' => $firstname, + 'lastname' => $lastname, + 'photo300' => $a->get_baseurl() . '/photo/custom/300/' . $profile['uid'] . '.jpg', + 'photo100' => $a->get_baseurl() . '/photo/custom/100/' . $profile['uid'] . '.jpg', + 'photo50' => $a->get_baseurl() . '/photo/custom/50/' . $profile['uid'] . '.jpg', + ); + else + $diaspora = false; if (!$block){ $contact_block = contact_block(); 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..71ed927636 100644 --- a/mod/content.php +++ b/mod/content.php @@ -416,11 +416,12 @@ 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']; $locate = array('location' => $item['location'], 'coord' => $item['coord'], 'html' => ''); call_hooks('render_location',$locate); @@ -787,11 +788,12 @@ 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']; $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 +807,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/dirfind.php b/mod/dirfind.php index 106c4c76a6..0d89f56f82 100644 --- a/mod/dirfind.php +++ b/mod/dirfind.php @@ -133,6 +133,8 @@ function dirfind_content(&$a, $prefix = "") { if (poco_alternate_ostatus_url($result["url"])) continue; + $result = get_contact_details_by_url($result["url"], local_user(), $result); + if ($result["name"] == "") { $urlparts = parse_url($result["url"]); $result["name"] = end(explode("/", $urlparts["path"])); diff --git a/mod/display.php b/mod/display.php index 21fff7866c..949ba5ab46 100644 --- a/mod/display.php +++ b/mod/display.php @@ -112,6 +112,8 @@ function display_init(&$a) { function display_fetchauthor($a, $item) { + require_once("include/Contact.php"); + $profiledata = array(); $profiledata["uid"] = -1; $profiledata["nickname"] = $item["author-name"]; @@ -176,61 +178,9 @@ function display_fetchauthor($a, $item) { $profiledata["about"] = ""; } - // Don't show details from Diaspora contacts if you don't follow the contact - $showdetails = ($profiledata["network"] != NETWORK_DIASPORA); + $profiledata = get_contact_details_by_url($profiledata["url"], local_user(), $profiledata); - // Fetching further contact data from the contact table - $r = q("SELECT `uid`, `network`, `name`, `photo`, `nick`, `addr`, `location`, `about`, `gender`, `keywords` - FROM `contact` WHERE `nurl` = '%s' AND `uid` = %d AND `network` = '%s' AND `rel` IN (%d, %d)", - dbesc(normalise_link($profiledata["url"])), intval(local_user()), dbesc($item["network"]), - intval(CONTACT_IS_SHARING), intval(CONTACT_IS_FRIEND)); - if (!count($r)) - $r = q("SELECT `uid`, `network`, `name`, `photo`, `nick`, `addr`, `location`, `about`, `gender`, `keywords` - FROM `contact` WHERE `nurl` = '%s' AND `uid` = %d AND `rel` IN (%d, %d)", - dbesc(normalise_link($profiledata["url"])), intval(local_user()), - intval(CONTACT_IS_SHARING), intval(CONTACT_IS_FRIEND)); - - if (count($r)) { - $profiledata["name"] = $r[0]["name"]; - $profiledata["photo"] = $r[0]["photo"]; - $profiledata["nickname"] = $r[0]["nick"]; - $profiledata["addr"] = $r[0]["addr"]; - $profiledata["keywords"] = $r[0]["keywords"]; - $profiledata["network"] = $r[0]["network"]; - - if (local_user() OR $showdetails) { - $showdetails = true; - $profiledata["address"] = $r[0]["location"]; - $profiledata["about"] = $r[0]["about"]; - $profiledata["gender"] = $r[0]["gender"]; - } - } - - // Fetching profile data from global contacts - if ($profiledata["network"] != NETWORK_FEED) { - $r = q("SELECT `name`, `photo`, `nick`, `addr`, `location`, `about`, `gender`, `keywords`, `network` FROM `gcontact` WHERE `nurl` = '%s'", dbesc(normalise_link($profiledata["url"]))); - if (count($r)) { - $profiledata["name"] = $r[0]["name"]; - $profiledata["photo"] = $r[0]["photo"]; - $profiledata["nickname"] = $r[0]["nick"]; - $profiledata["addr"] = $r[0]["addr"]; - $profiledata["network"] = $r[0]["network"]; - - if ($r[0]["keywords"]) - $profiledata["keywords"] = $r[0]["keywords"]; - - if ($showdetails) { - if ($r[0]["location"]) - $profiledata["address"] = $r[0]["location"]; - - if ($r[0]["about"]) - $profiledata["about"] = $r[0]["about"]; - - if ($r[0]["gender"]) - $profiledata["gender"] = $r[0]["gender"]; - } - } - } + $profiledata["photo"] = App::remove_baseurl($profiledata["photo"]); if (local_user()) { if (in_array($profiledata["network"], array(NETWORK_DFRN, NETWORK_DIASPORA, NETWORK_OSTATUS))) @@ -482,9 +432,7 @@ function display_content(&$a, $update = 0) { $title = trim(html2plain(bbcode($r[0]["title"], false, false), 0, true)); $author_name = $r[0]["author-name"]; - $image = ""; - if ($image == "") - $image = $r[0]["thumb"]; + $image = $a->remove_baseurl($r[0]["thumb"]); if ($title == "") $title = $author_name; 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..a907ff228a 100644 --- a/object/Item.php +++ b/object/Item.php @@ -150,11 +150,12 @@ 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']; $locate = array('location' => $item['location'], 'coord' => $item['coord'], 'html' => ''); call_hooks('render_location',$locate); @@ -363,7 +364,7 @@ class Item extends BaseObject { 'profile_url' => $profile_link, 'item_photo_menu' => item_photo_menu($item), 'name' => $name_e, - 'thumb' => proxy_url($profile_avatar, false, PROXY_SIZE_THUMB), + 'thumb' => $a->remove_baseurl(proxy_url($profile_avatar, false, PROXY_SIZE_THUMB)), 'osparkle' => $osparkle, 'sparkle' => $sparkle, 'title' => $title_e, diff --git a/view/templates/diaspora_vcard.tpl b/view/templates/diaspora_vcard.tpl index 58419bd13d..45b9fa4ff7 100644 --- a/view/templates/diaspora_vcard.tpl +++ b/view/templates/diaspora_vcard.tpl @@ -1,4 +1,4 @@ - +{{if $diaspora}}
Uid
@@ -61,3 +61,4 @@
+{{/if}}