]> git.mxchange.org Git - friendica.git/blobdiff - include/Contact.php
Merge pull request #2666 from annando/1607-more-logging
[friendica.git] / include / Contact.php
index 6297cdbe746d2183aa398aebaeed96c9f379fa5e..10005d3e3caad6cd4c662601a8dc044f057980c3 100644 (file)
@@ -207,35 +207,34 @@ function get_contact_details_by_url($url, $uid = -1, $default = array()) {
        if ($uid == -1)
                $uid = local_user();
 
-       // 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 contact data from the contact table for the given user
+       $r = q("SELECT `id`, `id` AS `cid`, 0 AS `gid`, 0 AS `zid`, `uid`, `url`, `nurl`, `alias`, `network`, `name`, `nick`, `addr`, `location`, `about`,
+                       `keywords`, `gender`, `photo`, `thumb`, `micro`, `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`
+       if (!$r)
+               $r = q("SELECT `id`, 0 AS `cid`, `id` AS `zid`, 0 AS `gid`, `uid`, `url`, `nurl`, `alias`, `network`, `name`, `nick`, `addr`, `location`, `about`,
+                               `keywords`, `gender`, `photo`, `thumb`, `micro`, `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",
+       if (!$r)
+               $r = q("SELECT 0 AS `id`, 0 AS `cid`, `id` AS `gid`, 0 AS `zid`, 0 AS `uid`, `url`, `nurl`, `alias`, `network`, `name`, `nick`, `addr`, `location`, `about`,
+                               `keywords`, `gender`, `photo`, `photo` AS `thumb`, `photo` AS `micro`, `community` AS `forum`, 0 AS `prv`, `community`, `birthday`, 0 AS `self`
+                       FROM `gcontact` WHERE `nurl` = '%s'",
                                dbesc(normalise_link($url)));
 
        if ($r) {
-               $profile = $r[0];
+               // If there is more than one entry we filter out the connector networks
+               if (count($r) > 1)
+                       foreach ($r AS $id => $result)
+                               if ($result["network"] == NETWORK_STATUSNET)
+                                       unset($r[$id]);
+
+               $profile = array_shift($r);
 
                // "bd" always contains the upcoming birthday of a contact.
                // "birthday" might contain the birthday including the year of birth.
@@ -256,11 +255,23 @@ function get_contact_details_by_url($url, $uid = -1, $default = array()) {
                                $profile["bd"] = (++$current_year)."-".$month."-".$day;
                } else
                        $profile["bd"] = "0000-00-00";
-       } else {
+       } else
                $profile = $default;
-               if (!isset($profile["thumb"]) AND isset($profile["photo"]))
-                       $profile["thumb"] = $profile["photo"];
-       }
+
+       if (($profile["photo"] == "") AND isset($default["photo"]))
+               $profile["photo"] = $default["photo"];
+
+       if (($profile["name"] == "") AND isset($default["name"]))
+               $profile["name"] = $default["name"];
+
+       if (($profile["network"] == "") AND isset($default["network"]))
+               $profile["network"] = $default["network"];
+
+       if (($profile["thumb"] == "") AND isset($profile["photo"]))
+               $profile["thumb"] = $profile["photo"];
+
+       if (($profile["micro"] == "") AND isset($profile["thumb"]))
+               $profile["micro"] = $profile["thumb"];
 
        if ((($profile["addr"] == "") OR ($profile["name"] == "")) AND ($profile["gid"] != 0) AND
                in_array($profile["network"], array(NETWORK_DFRN, NETWORK_DIASPORA, NETWORK_OSTATUS)))
@@ -452,8 +463,18 @@ function get_contact($url, $uid = 0) {
                $data = probe_url($url);
 
        // Does this address belongs to a valid network?
-       if (!in_array($data["network"], array(NETWORK_DFRN, NETWORK_OSTATUS, NETWORK_DIASPORA)))
-               return 0;
+       if (!in_array($data["network"], array(NETWORK_DFRN, NETWORK_OSTATUS, NETWORK_DIASPORA))) {
+               if ($uid != 0)
+                       return 0;
+
+               // Get data from the gcontact table
+               $r = q("SELECT `name`, `nick`, `url`, `photo`, `addr`, `alias`, `network` FROM `gcontact` WHERE `nurl` = '%s'",
+                        dbesc(normalise_link($url)));
+               if (!$r)
+                       return 0;
+
+               $data = $r[0];
+       }
 
        $url = $data["url"];
 
@@ -491,6 +512,16 @@ function get_contact($url, $uid = 0) {
                        return 0;
 
                $contactid = $contact[0]["id"];
+
+               // Update the newly created contact from data in the gcontact table
+               $r = q("SELECT `location`, `about`, `keywords`, `gender` FROM `gcontact` WHERE `nurl` = '%s'",
+                        dbesc(normalise_link($data["url"])));
+               if ($r) {
+                       logger("Update contact ".$data["url"]);
+                       q("UPDATE `contact` SET `location` = '%s', `about` = '%s', `keywords` = '%s', `gender` = '%s' WHERE `id` = %d",
+                               dbesc($r["location"]), dbesc($r["about"]), dbesc($r["keywords"]),
+                               dbesc($r["gender"]), intval($contactid));
+               }
        }
 
        if ((count($contact) > 1) AND ($uid == 0) AND ($contactid != 0) AND ($url != ""))