$r[0]['nickname']
);
+ /// @todo Should be done in a background job since this likely will run into a time out
// don't delete yet, will be done later when contacts have deleted my stuff
// q("DELETE FROM `contact` WHERE `uid` = %d", intval($uid));
q("DELETE FROM `gcign` WHERE `uid` = %d", intval($uid));
return;
}
- q("DELETE FROM `contact` WHERE `id` = %d",
- intval($id)
- );
- q("DELETE FROM `item` WHERE `contact-id` = %d ",
- intval($id)
- );
- q("DELETE FROM `photo` WHERE `contact-id` = %d ",
- intval($id)
- );
- q("DELETE FROM `mail` WHERE `contact-id` = %d ",
- intval($id)
- );
- q("DELETE FROM `event` WHERE `cid` = %d ",
- intval($id)
- );
- q("DELETE FROM `queue` WHERE `cid` = %d ",
- intval($id)
- );
+ q("DELETE FROM `contact` WHERE `id` = %d", intval($id));
+ // Delete the rest in the background
+ proc_run(PRIORITY_LOW, 'include/remove_contact.php', $id);
}
// This provides for the possibility that their database is temporarily messed
// up or some other transient event and that there's a possibility we could recover from it.
-if(! function_exists('mark_for_death')) {
function mark_for_death($contact) {
if($contact['archive'])
dbesc(datetime_convert()),
intval($contact['id'])
);
- }
- else {
+
+ if ($contact['url'] != '') {
+ q("UPDATE `contact` SET `term-date` = '%s'
+ WHERE `nurl` = '%s' AND `term-date` <= '1000-00-00'",
+ dbesc(datetime_convert()),
+ dbesc(normalise_link($contact['url']))
+ );
+ }
+ } else {
/// @todo
/// We really should send a notification to the owner after 2-3 weeks
/// so they won't be surprised when the contact vanishes and can take
/// remedial action if this was a serious mistake or glitch
+ /// @todo
+ /// Check for contact vitality via probing
+
$expiry = $contact['term-date'] . ' + 32 days ';
if(datetime_convert() > datetime_convert('UTC','UTC',$expiry)) {
// archive them rather than delete
// though if the owner tries to unarchive them we'll start the whole process over again
- q("update contact set `archive` = 1 where id = %d",
+ q("UPDATE `contact` SET `archive` = 1 WHERE `id` = %d",
intval($contact['id'])
);
- q("UPDATE `item` SET `private` = 2 WHERE `contact-id` = %d AND `uid` = %d", intval($contact['id']), intval($contact['uid']));
-
- //contact_remove($contact['id']);
+ if ($contact['url'] != '') {
+ q("UPDATE `contact` SET `archive` = 1 WHERE `nurl` = '%s'",
+ dbesc(normalise_link($contact['url']))
+ );
+ }
}
}
-}}
+}
-if(! function_exists('unmark_for_death')) {
function unmark_for_death($contact) {
+
+ $r = q("SELECT `term-date` FROM `contact` WHERE `id` = %d AND `term-date` > '%s'",
+ intval($contact['id']),
+ dbesc('1000-00-00 00:00:00')
+ );
+
+ // We don't need to update, we never marked this contact as dead
+ if (!dbm::is_result($r)) {
+ return;
+ }
+
// It's a miracle. Our dead contact has inexplicably come back to life.
q("UPDATE `contact` SET `term-date` = '%s' WHERE `id` = %d",
dbesc('0000-00-00 00:00:00'),
intval($contact['id'])
);
-}}
+
+ if ($contact['url'] != '') {
+ q("UPDATE `contact` SET `term-date` = '%s' WHERE `nurl` = '%s'",
+ dbesc('0000-00-00 00:00:00'),
+ dbesc(normalise_link($contact['url']))
+ );
+ }
+}
/**
* @brief Get contact data for a given profile link
*
* The function looks at several places (contact table and gcontact table) for the contact
+ * It caches its result for the same script execution to prevent duplicate calls
*
* @param string $url The profile link
* @param int $uid User id
* @return array Contact data
*/
function get_contact_details_by_url($url, $uid = -1, $default = array()) {
- if ($uid == -1)
+ static $cache = array();
+
+ if ($uid == -1) {
$uid = local_user();
+ }
+
+ if (isset($cache[$url][$uid])) {
+ return $cache[$url][$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`, `xmpp`,
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)
+ if (count($r) > 1) {
+ foreach ($r AS $id => $result) {
+ if ($result["network"] == NETWORK_STATUSNET) {
unset($r[$id]);
+ }
+ }
+ }
$profile = array_shift($r);
$profile["bd"] = $current_year."-".$month."-".$day;
$current = $current_year."-".$current_month."-".$current_day;
- if ($profile["bd"] < $current)
+ if ($profile["bd"] < $current) {
$profile["bd"] = (++$current_year)."-".$month."-".$day;
- } else
+ }
+ } else {
$profile["bd"] = "0000-00-00";
- } else
+ }
+ } else {
$profile = $default;
+ }
- if (($profile["photo"] == "") AND isset($default["photo"]))
+ if (($profile["photo"] == "") AND isset($default["photo"])) {
$profile["photo"] = $default["photo"];
+ }
- if (($profile["name"] == "") AND isset($default["name"]))
+ if (($profile["name"] == "") AND isset($default["name"])) {
$profile["name"] = $default["name"];
+ }
- if (($profile["network"] == "") AND isset($default["network"]))
+ if (($profile["network"] == "") AND isset($default["network"])) {
$profile["network"] = $default["network"];
+ }
- if (($profile["thumb"] == "") AND isset($profile["photo"]))
+ if (($profile["thumb"] == "") AND isset($profile["photo"])) {
$profile["thumb"] = $profile["photo"];
+ }
- if (($profile["micro"] == "") AND isset($profile["thumb"]))
+ 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)))
+ in_array($profile["network"], array(NETWORK_DFRN, NETWORK_DIASPORA, NETWORK_OSTATUS))) {
proc_run(PRIORITY_LOW, "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["birthday"] = "0000-00-00";
}
- return($profile);
+ $cache[$url][$uid] = $profile;
+
+ return $profile;
}
if (! function_exists('contact_photo_menu')) {