if ($uid == -1)
$uid = local_user();
- // community, nurl, alias, nsfw, birthday
-
- // 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"]));
-
- // 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 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`, `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];
- else {
+ if ($r) {
+ // 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 (isset($profile["birthday"]) AND !isset($profile["bd"])){
- $bd_timestamp = strtotime($profile["birthday"]);
- $month = date("m", $bd_timestamp);
- $day = date("d", $bd_timestamp);
+ if (($profile["photo"] == "") AND isset($default["photo"]))
+ $profile["photo"] = $default["photo"];
- $current_timestamp = time();
- $current_year = date("Y", $current_timestamp);
- $current_month = date("m", $current_timestamp);
- $current_day = date("d", $current_timestamp);
+ if (($profile["name"] == "") AND isset($default["name"]))
+ $profile["name"] = $default["name"];
- $profile["bd"] = $current_year."-".$month."-".$day;
- $current = $current_year."-".$current_month."-".$current_day;
+ if (($profile["network"] == "") AND isset($default["network"]))
+ $profile["network"] = $default["network"];
- if ($profile["bd"] < $current)
- $profile["bd"] = (++$current_year)."-".$month."-".$day;
- }
+ 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)))
$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"];
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 != ""))