]> git.mxchange.org Git - friendica.git/blobdiff - include/Contact.php
Priority for native networks when searching by contact url
[friendica.git] / include / Contact.php
index 79a14ab581c84dd3de3ab61d9e3efe8174bf27c1..86ef4a30fa1c015a55f435c0b1c6e080c0212445 100644 (file)
@@ -192,72 +192,85 @@ 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)));
-
-       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"]);
-       }
-
-       // 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",
+       // 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`, `forum`, `prv`, (`forum` | `prv`) AS `community`, `bd` AS `birthday`, `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)));
+       // Fetch the data from the contact table with "uid=0" (which is filled automatically)
+       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`, `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 (!$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`, `community` AS `forum`, 0 AS `prv`, `community`, `birthday`, 0 AS `self`
+                       FROM `gcontact` WHERE `nurl` = '%s'",
+                               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 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.
+               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"];
+       }
+
+       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);