]> git.mxchange.org Git - friendica.git/commitdiff
Unified contact data handling
authorMichael Vogel <icarus@dabo.de>
Sun, 5 Jun 2016 11:57:11 +0000 (13:57 +0200)
committerMichael Vogel <icarus@dabo.de>
Sun, 5 Jun 2016 11:57:11 +0000 (13:57 +0200)
include/Contact.php
include/conversation.php
mod/allfriends.php
mod/common.php
mod/content.php
mod/hovercard.php
mod/message.php
mod/nogroup.php
mod/suggest.php
mod/viewcontacts.php
object/Item.php

index 79a14ab581c84dd3de3ab61d9e3efe8174bf27c1..30c86a3c7c8d32ca4233432713f8c810cfc6db96 100644 (file)
@@ -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) {
-               $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"]);
-       }
+       // 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"]));
 
-       // 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"]));
+       // 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`, `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));
+               $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 `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;
+               $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];
+       else {
+               $profile = $default;
+               if (!isset($profile["thumb"]) AND isset($profile["photo"]))
+                       $profile["thumb"] = $profile["photo"];
+       }
+
+       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);
index d889ba002021f3e27919bac2a4afa8a49befed4a..8bbd57dbbffa36c920fcf27d3ddbf88763237ecf 100644 (file)
@@ -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);
index 356a389b83693ce291ae4b4afce726dcad7e0105..360b222b50dd647ad56d0febaff70c75129bffda 100644 (file)
@@ -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'],
index 62a5185fed84c4a00256bab9447fc56c64b530b2..9b2c69f6d70c4955b12daaa6cca20ddf9e49f7de 100644 (file)
@@ -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'],
index 49cff74d2d9f4e4eac2ffcce3529f87fafcabc55..cecdfd00017edb1147b65f8460d0aa91d2789d8d 100644 (file)
@@ -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);
 
 
index f5c410e11169875152cde20eae67bba0799a9935..4a6619b78866e913cd3cc26be33eaeac85e66b7c 100644 (file)
@@ -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"],
index f0ab7d2ac907683519cfa1bd1a7bb1d12a8089bf..b5c6c064dc652a8ed37d7714f1e2729860e70e58 100644 (file)
@@ -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'),
index 9f6e9784331851b702434245f24256313612d6e4..2f0985c9dbba0db74ae2be74bfc4d31a110c0f6d 100644 (file)
@@ -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'],
index b73c2cd1b61eef34a248ff9e507d92b4182f419b..bb8823d9ec8c8a1767ac9e4047c3d1c2ecab5d37 100644 (file)
@@ -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'],
index 04520e0d9309cc163ffe86c165625ef0e96233cd..2e36a3bd7a2224998389b7c451bb449b75ea9ee9 100644 (file)
@@ -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'],
index 59659cdaff2e4816df0f42bcdfc4447ef10d51a3..a27ff32f9c82a971584b0752bd773ac3c2a728ac 100644 (file)
@@ -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);