X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=include%2FContact.php;h=86ef4a30fa1c015a55f435c0b1c6e080c0212445;hb=aac9caab2d39980c80ea3ae31b24b27561c4f646;hp=79a14ab581c84dd3de3ab61d9e3efe8174bf27c1;hpb=47563d34ee1d441b6dc603576ab3d2fbdb6dca23;p=friendica.git diff --git a/include/Contact.php b/include/Contact.php index 79a14ab581..86ef4a30fa 100644 --- a/include/Contact.php +++ b/include/Contact.php @@ -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);