Merge pull request #2564 from annando/1606-contact-handling

Fix for mismatching avatars
This commit is contained in:
Tobias Diekershoff 2016-06-06 06:06:21 +02:00
commit 8932bec614
17 changed files with 166 additions and 250 deletions

View File

@ -1896,31 +1896,6 @@ function is_site_admin() {
return false; 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. * @brief Returns querystring as string from a mapped array.
* *

View File

@ -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) if ($uid == -1)
$uid = local_user(); $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", // Fetch contact data from the contact table for the user and given network
dbesc(normalise_link($url))); $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) { if ($r) {
$profile = $r[0]; $profile = $r[0];
if ((($profile["addr"] == "") OR ($profile["name"] == "")) AND // "bd" always contains the upcoming birthday of a contact.
in_array($profile["network"], array(NETWORK_DFRN, NETWORK_DIASPORA, NETWORK_OSTATUS))) // "birthday" might contain the birthday including the year of birth.
proc_run('php',"include/update_gcontact.php", $profile["gid"]); 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 if ((($profile["addr"] == "") OR ($profile["name"] == "")) AND ($profile["gid"] != 0) AND
$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', '')", in_array($profile["network"], array(NETWORK_DFRN, NETWORK_DIASPORA, NETWORK_OSTATUS)))
dbesc(normalise_link($url)), intval($uid), dbesc($profile["network"])); proc_run('php',"include/update_gcontact.php", $profile["gid"]);
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;
// Show contact details of Diaspora contacts only if connected
if (($profile["cid"] == 0) AND ($profile["network"] == NETWORK_DIASPORA)) { if (($profile["cid"] == 0) AND ($profile["network"] == NETWORK_DIASPORA)) {
$profile["location"] = ""; $profile["location"] = "";
$profile["about"] = ""; $profile["about"] = "";
$profile["gender"] = "";
$profile["birthday"] = "0000-00-00";
} }
return($profile); return($profile);

View File

@ -270,8 +270,6 @@
api_login($a); api_login($a);
} }
load_contact_links(api_user());
logger('API call for ' . $a->user['username'] . ': ' . $a->query_string); logger('API call for ' . $a->user['username'] . ': ' . $a->query_string);
logger('API parameters: ' . print_r($_REQUEST,true)); logger('API parameters: ' . print_r($_REQUEST,true));

View File

@ -389,6 +389,7 @@ if(!function_exists('conversation')) {
function conversation(&$a, $items, $mode, $update, $preview = false) { function conversation(&$a, $items, $mode, $update, $preview = false) {
require_once('include/bbcode.php'); require_once('include/bbcode.php');
require_once('include/Contact.php');
require_once('mod/proxy.php'); require_once('mod/proxy.php');
$ssl_state = ((local_user()) ? true : false); $ssl_state = ((local_user()) ? true : false);
@ -494,8 +495,6 @@ function conversation(&$a, $items, $mode, $update, $preview = false) {
else else
$return_url = $_SESSION['return_url'] = $a->query_string; $return_url = $_SESSION['return_url'] = $a->query_string;
load_contact_links(local_user());
$cb = array('items' => $items, 'mode' => $mode, 'update' => $update, 'preview' => $preview); $cb = array('items' => $items, 'mode' => $mode, 'update' => $update, 'preview' => $preview);
call_hooks('conversation_start',$cb); call_hooks('conversation_start',$cb);
@ -610,11 +609,12 @@ function conversation(&$a, $items, $mode, $update, $preview = false) {
else else
$profile_link = zrl($profile_link); $profile_link = zrl($profile_link);
$normalised = normalise_link((strlen($item['author-link'])) ? $item['author-link'] : $item['url']); // Don't rely on the author-avatar. It is better to use the data from the contact table
if(($normalised != 'mailbox') && (x($a->contacts[$normalised]))) $author_contact = get_contact_details_by_url($item['author-link'], $profile_owner);
$profile_avatar = $a->contacts[$normalised]['thumb']; if ($author_contact["thumb"])
$profile_avatar = $author_contact["thumb"];
else 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' => ''); $locate = array('location' => $item['location'], 'coord' => $item['coord'], 'html' => '');
call_hooks('render_location',$locate); call_hooks('render_location',$locate);
@ -682,7 +682,7 @@ function conversation(&$a, $items, $mode, $update, $preview = false) {
'name' => $profile_name_e, 'name' => $profile_name_e,
'sparkle' => $sparkle, 'sparkle' => $sparkle,
'lock' => $lock, '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'], 'title' => $item['title_e'],
'body' => $body_e, 'body' => $body_e,
'tags' => $tags_e, 'tags' => $tags_e,
@ -812,15 +812,7 @@ function best_link_url($item,&$sparkle,$ssl_state = false) {
$clean_url = normalise_link($item['author-link']); $clean_url = normalise_link($item['author-link']);
if((local_user()) && (local_user() == $item['uid'])) { if (local_user()) {
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()) {
$r = q("SELECT `id` FROM `contact` WHERE `network` = '%s' AND `uid` = %d AND `nurl` = '%s' LIMIT 1", $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))); dbesc(NETWORK_DFRN), intval(local_user()), dbesc(normalise_link($clean_url)));
if ($r) { if ($r) {
@ -845,11 +837,9 @@ function item_photo_menu($item){
$ssl_state = false; $ssl_state = false;
if(local_user()) { if(local_user())
$ssl_state = true; $ssl_state = true;
if(! count($a->contacts))
load_contact_links(local_user());
}
$sub_link=""; $sub_link="";
$poke_link=""; $poke_link="";
$contact_url=""; $contact_url="";
@ -857,6 +847,7 @@ function item_photo_menu($item){
$status_link=""; $status_link="";
$photos_link=""; $photos_link="";
$posts_link=""; $posts_link="";
$network = "";
if((local_user()) && local_user() == $item['uid'] && $item['parent'] == $item['id'] && (! $item['self'])) { if((local_user()) && local_user() == $item['uid'] && $item['parent'] == $item['id'] && (! $item['self'])) {
$sub_link = 'javascript:dosubthread(' . $item['id'] . '); return false;'; $sub_link = 'javascript:dosubthread(' . $item['id'] . '); return false;';
@ -867,46 +858,32 @@ function item_photo_menu($item){
if($profile_link === 'mailbox') if($profile_link === 'mailbox')
$profile_link = ''; $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) { if($sparkle) {
$cid = intval(basename($profile_link)); $status_link = $profile_link."?url=status";
$status_link = $profile_link . "?url=status"; $photos_link = $profile_link."?url=photos";
$photos_link = $profile_link . "?url=photos"; $profile_link = $profile_link."?url=profile";
$profile_link = $profile_link . "?url=profile";
$pm_url = 'message/new/' . $cid;
$zurl = ''; $zurl = '';
} } else
else {
$profile_link = zrl($profile_link); $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) if($cid && !$item['self']) {
$pm_url = 'message/new/' . $cid; $poke_link = 'poke/?f=&c='.$cid;
$contact_url = 'contacts/'.$cid;
} else $posts_link = 'contacts/'.$cid.'/posts';
$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 (in_array($network, array(NETWORK_DFRN, NETWORK_DIASPORA)))
$pm_url = 'message/new/'.$cid;
} }
if (local_user()) { if (local_user()) {
@ -920,10 +897,10 @@ function item_photo_menu($item){
t("Send PM") => $pm_url t("Send PM") => $pm_url
); );
if ($a->contacts[$clean_url]['network'] === NETWORK_DFRN) if ($network == NETWORK_DFRN)
$menu[t("Poke")] = $poke_link; $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))) in_array($item['network'], array(NETWORK_DFRN, NETWORK_OSTATUS, NETWORK_DIASPORA)))
$menu[t("Connect/Follow")] = "follow?url=".urlencode($item['author-link']); $menu[t("Connect/Follow")] = "follow?url=".urlencode($item['author-link']);
} else } else

View File

@ -345,18 +345,21 @@ function profile_sidebar($profile, $block = 0) {
? trim(substr($profile['name'],0,strpos($profile['name'],' '))) : $profile['name']); ? trim(substr($profile['name'],0,strpos($profile['name'],' '))) : $profile['name']);
$lastname = (($firstname === $profile['name']) ? '' : trim(substr($profile['name'],strlen($firstname)))); $lastname = (($firstname === $profile['name']) ? '' : trim(substr($profile['name'],strlen($firstname))));
$diaspora = array( if ($profile['guid'] != "")
'guid' => $profile['guid'], $diaspora = array(
'podloc' => $a->get_baseurl(), 'guid' => $profile['guid'],
'searchable' => (($profile['publish'] && $profile['net-publish']) ? 'true' : 'false' ), 'podloc' => $a->get_baseurl(),
'nickname' => $profile['nickname'], 'searchable' => (($profile['publish'] && $profile['net-publish']) ? 'true' : 'false' ),
'fullname' => $profile['name'], 'nickname' => $profile['nickname'],
'firstname' => $firstname, 'fullname' => $profile['name'],
'lastname' => $lastname, 'firstname' => $firstname,
'photo300' => $a->get_baseurl() . '/photo/custom/300/' . $profile['uid'] . '.jpg', 'lastname' => $lastname,
'photo100' => $a->get_baseurl() . '/photo/custom/100/' . $profile['uid'] . '.jpg', 'photo300' => $a->get_baseurl() . '/photo/custom/300/' . $profile['uid'] . '.jpg',
'photo50' => $a->get_baseurl() . '/photo/custom/50/' . $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){ if (!$block){
$contact_block = contact_block(); $contact_block = contact_block();

View File

@ -49,7 +49,7 @@ function allfriends_content(&$a) {
foreach($r as $rr) { foreach($r as $rr) {
//get further details of the contact //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 = ''; $photo_menu = '';
@ -68,9 +68,9 @@ function allfriends_content(&$a) {
$entry = array( $entry = array(
'url' => $rr['url'], 'url' => $rr['url'],
'itemurl' => (($contact_details['addr'] != "") ? $contact_details['addr'] : $rr['url']), 'itemurl' => (($contact_details['addr'] != "") ? $contact_details['addr'] : $rr['url']),
'name' => htmlentities($rr['name']), 'name' => htmlentities($contact_details['name']),
'thumb' => proxy_url($rr['photo'], false, PROXY_SIZE_THUMB), 'thumb' => proxy_url($contact_details['thumb'], false, PROXY_SIZE_THUMB),
'img_hover' => htmlentities($rr['name']), 'img_hover' => htmlentities($contact_details['name']),
'details' => $contact_details['location'], 'details' => $contact_details['location'],
'tags' => $contact_details['keywords'], 'tags' => $contact_details['keywords'],
'about' => $contact_details['about'], 'about' => $contact_details['about'],

View File

@ -109,14 +109,14 @@ function common_content(&$a) {
$rr[id] = $rr[cid]; $rr[id] = $rr[cid];
$photo_menu = ''; $photo_menu = '';
$photo_menu = contact_photo_menu ($rr); $photo_menu = contact_photo_menu($rr);
$entry = array( $entry = array(
'url' => $rr['url'], 'url' => $rr['url'],
'itemurl' => (($contact_details['addr'] != "") ? $contact_details['addr'] : $rr['url']), 'itemurl' => (($contact_details['addr'] != "") ? $contact_details['addr'] : $rr['url']),
'name' => $rr['name'], 'name' => $contact_details['name'],
'thumb' => proxy_url($rr['photo'], false, PROXY_SIZE_THUMB), 'thumb' => proxy_url($contact_details['thumb'], false, PROXY_SIZE_THUMB),
'img_hover' => htmlentities($rr['name']), 'img_hover' => htmlentities($contact_details['name']),
'details' => $contact_details['location'], 'details' => $contact_details['location'],
'tags' => $contact_details['keywords'], 'tags' => $contact_details['keywords'],
'about' => $contact_details['about'], 'about' => $contact_details['about'],

View File

@ -416,11 +416,12 @@ function render_content(&$a, $items, $mode, $update, $preview = false) {
else else
$profile_link = zrl($profile_link); $profile_link = zrl($profile_link);
$normalised = normalise_link((strlen($item['author-link'])) ? $item['author-link'] : $item['url']); // Don't rely on the author-avatar. It is better to use the data from the contact table
if(($normalised != 'mailbox') && (x($a->contacts[$normalised]))) $author_contact = get_contact_details_by_url($item['author-link'], $profile_owner);
$profile_avatar = $a->contacts[$normalised]['thumb']; if ($author_contact["thumb"])
$profile_avatar = $author_contact["thumb"];
else 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' => ''); $locate = array('location' => $item['location'], 'coord' => $item['coord'], 'html' => '');
call_hooks('render_location',$locate); call_hooks('render_location',$locate);
@ -787,11 +788,12 @@ function render_content(&$a, $items, $mode, $update, $preview = false) {
else else
$profile_link = zrl($profile_link); $profile_link = zrl($profile_link);
$normalised = normalise_link((strlen($item['author-link'])) ? $item['author-link'] : $item['url']); // Don't rely on the author-avatar. It is better to use the data from the contact table
if(($normalised != 'mailbox') && (x($a->contacts,$normalised))) $author_contact = get_contact_details_by_url($item['author-link'], $profile_owner);
$profile_avatar = $a->contacts[$normalised]['thumb']; if ($author_contact["thumb"])
$profile_avatar = $author_contact["thumb"];
else 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']) : ''); $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']) : ''); $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 = ""; $shiny = "";
if(strcmp(datetime_convert('UTC','UTC',$item['created']),datetime_convert('UTC','UTC','now - 12 hours')) > 0) if(strcmp(datetime_convert('UTC','UTC',$item['created']),datetime_convert('UTC','UTC','now - 12 hours')) > 0)
$shiny = 'shiny'; $shiny = 'shiny';
// //
localize_item($item); localize_item($item);

View File

@ -133,6 +133,8 @@ function dirfind_content(&$a, $prefix = "") {
if (poco_alternate_ostatus_url($result["url"])) if (poco_alternate_ostatus_url($result["url"]))
continue; continue;
$result = get_contact_details_by_url($result["url"], local_user(), $result);
if ($result["name"] == "") { if ($result["name"] == "") {
$urlparts = parse_url($result["url"]); $urlparts = parse_url($result["url"]);
$result["name"] = end(explode("/", $urlparts["path"])); $result["name"] = end(explode("/", $urlparts["path"]));

View File

@ -112,6 +112,8 @@ function display_init(&$a) {
function display_fetchauthor($a, $item) { function display_fetchauthor($a, $item) {
require_once("include/Contact.php");
$profiledata = array(); $profiledata = array();
$profiledata["uid"] = -1; $profiledata["uid"] = -1;
$profiledata["nickname"] = $item["author-name"]; $profiledata["nickname"] = $item["author-name"];
@ -176,61 +178,9 @@ function display_fetchauthor($a, $item) {
$profiledata["about"] = ""; $profiledata["about"] = "";
} }
// Don't show details from Diaspora contacts if you don't follow the contact $profiledata = get_contact_details_by_url($profiledata["url"], local_user(), $profiledata);
$showdetails = ($profiledata["network"] != NETWORK_DIASPORA);
// Fetching further contact data from the contact table $profiledata["photo"] = App::remove_baseurl($profiledata["photo"]);
$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"];
}
}
}
if (local_user()) { if (local_user()) {
if (in_array($profiledata["network"], array(NETWORK_DFRN, NETWORK_DIASPORA, NETWORK_OSTATUS))) 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)); $title = trim(html2plain(bbcode($r[0]["title"], false, false), 0, true));
$author_name = $r[0]["author-name"]; $author_name = $r[0]["author-name"];
$image = ""; $image = $a->remove_baseurl($r[0]["thumb"]);
if ($image == "")
$image = $r[0]["thumb"];
if ($title == "") if ($title == "")
$title = $author_name; $title = $author_name;

View File

@ -48,11 +48,6 @@ function hovercard_content() {
if($nurl) { if($nurl) {
// Search for contact data // Search for contact data
$contact = get_contact_details_by_url($nurl); $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)) if(!is_array($contact))
@ -69,7 +64,7 @@ function hovercard_content() {
'name' => $contact["name"], 'name' => $contact["name"],
'nick' => $contact["nick"], 'nick' => $contact["nick"],
'addr' => (($contact["addr"] != "") ? $contact["addr"] : $contact["url"]), '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"])), 'url' => ($cid ? ("redir/".$cid) : zrl($contact["url"])),
'nurl' => $contact["nurl"], // We additionally store the nurl as identifier 'nurl' => $contact["nurl"], // We additionally store the nurl as identifier
// 'alias' => $contact["alias"], // 'alias' => $contact["alias"],

View File

@ -489,7 +489,7 @@ function message_content(&$a) {
'from_name' => $from_name_e, 'from_name' => $from_name_e,
'from_url' => $from_url, 'from_url' => $from_url,
'sparkle' => $sparkle, 'sparkle' => $sparkle,
'from_photo' => $message['from-photo'], 'from_photo' => proxy_url($message['from-photo'], false, PROXY_SIZE_THUMB),
'subject' => $subject_e, 'subject' => $subject_e,
'body' => $body_e, 'body' => $body_e,
'delete' => t('Delete message'), 'delete' => t('Delete message'),

View File

@ -35,18 +35,18 @@ function nogroup_content(&$a) {
if(count($r)) { if(count($r)) {
foreach($r as $rr) { 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( $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'), 'edit_hover' => t('Edit contact'),
'photo_menu' => contact_photo_menu($rr), 'photo_menu' => contact_photo_menu($rr),
'id' => $rr['id'], 'id' => $rr['id'],
'alt_text' => $alt_text, 'alt_text' => $alt_text,
'dir_icon' => $dir_icon, 'dir_icon' => $dir_icon,
'thumb' => $rr['thumb'], 'thumb' => proxy_url($contact_details['thumb'], false, PROXY_SIZE_THUMB),
'name' => $rr['name'], 'name' => $contact_details['name'],
'username' => $rr['name'], 'username' => $contact_details['name'],
'details' => $contact_details['location'], 'details' => $contact_details['location'],
'tags' => $contact_details['keywords'], 'tags' => $contact_details['keywords'],
'about' => $contact_details['about'], 'about' => $contact_details['about'],

View File

@ -81,14 +81,14 @@ function suggest_content(&$a) {
$photo_menu = array(array(t("View Profile"), zrl($rr["url"]))); $photo_menu = array(array(t("View Profile"), zrl($rr["url"])));
$photo_menu[] = array(t("Connect/Follow"), $connlnk); $photo_menu[] = array(t("Connect/Follow"), $connlnk);
$photo_menu[] = array(t('Ignore/Hide'), $ignlnk); $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( $entry = array(
'url' => zrl($rr['url']), 'url' => zrl($rr['url']),
'itemurl' => (($contact_details['addr'] != "") ? $contact_details['addr'] : $rr['url']), 'itemurl' => (($contact_details['addr'] != "") ? $contact_details['addr'] : $rr['url']),
'img_hover' => $rr['url'], 'img_hover' => $rr['url'],
'name' => $rr['name'], 'name' => $contact_details['name'],
'thumb' => proxy_url($rr['photo'], false, PROXY_SIZE_THUMB), 'thumb' => proxy_url($contact_details['thumb'], false, PROXY_SIZE_THUMB),
'details' => $contact_details['location'], 'details' => $contact_details['location'],
'tags' => $contact_details['keywords'], 'tags' => $contact_details['keywords'],
'about' => $contact_details['about'], 'about' => $contact_details['about'],

View File

@ -90,15 +90,15 @@ function viewcontacts_content(&$a) {
else else
$url = zrl($url); $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( $contacts[] = array(
'id' => $rr['id'], '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), 'photo_menu' => contact_photo_menu($rr),
'thumb' => proxy_url($rr['thumb'], false, PROXY_SIZE_THUMB), 'thumb' => proxy_url($contact_details['thumb'], false, PROXY_SIZE_THUMB),
'name' => htmlentities(substr($rr['name'],0,20)), 'name' => htmlentities(substr($contact_details['name'],0,20)),
'username' => htmlentities($rr['name']), 'username' => htmlentities($contact_details['name']),
'details' => $contact_details['location'], 'details' => $contact_details['location'],
'tags' => $contact_details['keywords'], 'tags' => $contact_details['keywords'],
'about' => $contact_details['about'], 'about' => $contact_details['about'],

View File

@ -150,11 +150,12 @@ class Item extends BaseObject {
else else
$profile_link = zrl($profile_link); $profile_link = zrl($profile_link);
$normalised = normalise_link((strlen($item['author-link'])) ? $item['author-link'] : $item['url']); // Don't rely on the author-avatar. It is better to use the data from the contact table
if(($normalised != 'mailbox') && (x($a->contacts,$normalised))) $author_contact = get_contact_details_by_url($item['author-link'], $profile_owner);
$profile_avatar = $a->contacts[$normalised]['thumb']; if ($author_contact["thumb"])
$profile_avatar = $author_contact["thumb"];
else 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' => ''); $locate = array('location' => $item['location'], 'coord' => $item['coord'], 'html' => '');
call_hooks('render_location',$locate); call_hooks('render_location',$locate);
@ -363,7 +364,7 @@ class Item extends BaseObject {
'profile_url' => $profile_link, 'profile_url' => $profile_link,
'item_photo_menu' => item_photo_menu($item), 'item_photo_menu' => item_photo_menu($item),
'name' => $name_e, '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, 'osparkle' => $osparkle,
'sparkle' => $sparkle, 'sparkle' => $sparkle,
'title' => $title_e, 'title' => $title_e,

View File

@ -1,4 +1,4 @@
{{if $diaspora}}
<div style="display:none;"> <div style="display:none;">
<dl class="entity_uid"> <dl class="entity_uid">
<dt>Uid</dt> <dt>Uid</dt>
@ -61,3 +61,4 @@
</dd> </dd>
</dl> </dl>
</div> </div>
{{/if}}