diff --git a/include/Contact.php b/include/Contact.php index 30bd8b6074..59c40599bc 100644 --- a/include/Contact.php +++ b/include/Contact.php @@ -15,7 +15,7 @@ function user_remove($uid) { call_hooks('remove_user',$r[0]); - // save username (actually the nickname as it is guaranteed + // save username (actually the nickname as it is guaranteed // unique), so it cannot be re-registered in the future. q("insert into userd ( username ) values ( '%s' )", @@ -191,7 +191,7 @@ if(! function_exists('contact_photo_menu')){ function contact_photo_menu($contact) { $a = get_app(); - + $contact_url=""; $pm_url=""; $status_link=""; @@ -222,24 +222,24 @@ function contact_photo_menu($contact) { $contact_url = $a->get_baseurl() . '/contacts/' . $contact['id']; $posts_link = $a->get_baseurl() . '/network/0?nets=all&cid=' . $contact['id']; $contact_drop_link = $a->get_baseurl() . "/contacts/" . $contact['id'] . '/drop?confirm=1'; - + $menu = Array( 'poke' => array(t("Poke"), $poke_link), 'status' => array(t("View Status"), $status_link), 'profile' => array(t("View Profile"), $profile_link), - 'photos' => array(t("View Photos"), $photos_link), - 'network' => array(t("Network Posts"), $posts_link), + 'photos' => array(t("View Photos"), $photos_link), + 'network' => array(t("Network Posts"), $posts_link), 'edit' => array(t("Edit Contact"), $contact_url), 'drop' => array(t("Drop Contact"), $contact_drop_link), 'pm' => array(t("Send PM"), $pm_url), ); - - + + $args = array('contact' => $contact, 'menu' => &$menu); - + call_hooks('contact_photo_menu', $args); - + /* $o = ""; foreach($menu as $k=>$v){ if ($v!="") { @@ -297,6 +297,7 @@ function get_contact($url, $uid = 0) { require_once("include/Scrape.php"); $data = array(); + $contactid = 0; // is it an address in the format user@server.tld? if (!strstr($url, "http") OR strstr($url, "@")) { @@ -306,11 +307,24 @@ function get_contact($url, $uid = 0) { return 0; } - $contact = q("SELECT `id` FROM `contact` WHERE `nurl` = '%s' AND `uid` = %d", + $contact = q("SELECT `id`, `avatar-date` FROM `contact` WHERE `nurl` = '%s' AND `uid` = %d", dbesc(normalise_link($url)), intval($uid)); - if ($contact) - return($contact[0]["id"]); + + if (!$contact) + $contact = q("SELECT `id`, `avatar-date` FROM `contact` WHERE `alias` = '%s' AND `uid` = %d", + dbesc(normalise_link($url)), + intval($uid)); + + if ($contact) { + $contactid = $contact[0]["id"]; + + //$update_photo = ($contact[0]['avatar-date'] < datetime_convert('','','now -2 days')); + $update_photo = ($contact[0]['avatar-date'] < datetime_convert('','','now -12 hours')); + + if (!$update_photo) + return($contactid); + } if (!count($data)) $data = probe_url($url); @@ -319,51 +333,65 @@ function get_contact($url, $uid = 0) { if (!in_array($data["network"], array(NETWORK_DFRN, NETWORK_OSTATUS, NETWORK_DIASPORA))) return 0; - q("INSERT INTO `contact` (`uid`, `created`, `url`, `nurl`, `addr`, `alias`, `notify`, `poll`, - `name`, `nick`, `photo`, `network`, `pubkey`, `rel`, `priority`, - `batch`, `request`, `confirm`, `poco`, - `writable`, `blocked`, `readonly`, `pending`) - VALUES (%d, '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', %d, %d, '%s', '%s', '%s', '%s', 1, 0, 0, 0)", - intval($uid), - dbesc(datetime_convert()), - dbesc($data["url"]), - dbesc(normalise_link($data["url"])), - dbesc($data["addr"]), - dbesc($data["alias"]), - dbesc($data["notify"]), - dbesc($data["poll"]), - dbesc($data["name"]), - dbesc($data["nick"]), - dbesc($data["photo"]), - dbesc($data["network"]), - dbesc($data["pubkey"]), - intval(CONTACT_IS_SHARING), - intval($data["priority"]), - dbesc($data["batch"]), - dbesc($data["request"]), - dbesc($data["confirm"]), - dbesc($data["poco"]) - ); + // tempory programming. Can be deleted after 2015-02-07 + if (($data["alias"] == "") AND (normalise_link($data["url"]) != normalise_link($url))) + $data["alias"] = normalise_link($url); - $contact = q("SELECT `id` FROM `contact` WHERE `nurl` = '%s' AND `uid` = %d", - dbesc(normalise_link($url)), - intval($uid)); - if (!$contact) - return 0; + if ($contactid == 0) { + q("INSERT INTO `contact` (`uid`, `created`, `url`, `nurl`, `addr`, `alias`, `notify`, `poll`, + `name`, `nick`, `photo`, `network`, `pubkey`, `rel`, `priority`, + `batch`, `request`, `confirm`, `poco`, + `writable`, `blocked`, `readonly`, `pending`) + VALUES (%d, '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', %d, %d, '%s', '%s', '%s', '%s', 1, 0, 0, 0)", + intval($uid), + dbesc(datetime_convert()), + dbesc($data["url"]), + dbesc(normalise_link($data["url"])), + dbesc($data["addr"]), + dbesc($data["alias"]), + dbesc($data["notify"]), + dbesc($data["poll"]), + dbesc($data["name"]), + dbesc($data["nick"]), + dbesc($data["photo"]), + dbesc($data["network"]), + dbesc($data["pubkey"]), + intval(CONTACT_IS_SHARING), + intval($data["priority"]), + dbesc($data["batch"]), + dbesc($data["request"]), + dbesc($data["confirm"]), + dbesc($data["poco"]) + ); + + $contact = q("SELECT `id` FROM `contact` WHERE `nurl` = '%s' AND `uid` = %d", + dbesc(normalise_link($data["url"])), + intval($uid)); + if (!$contact) + return 0; + + $contactid = $contact[0]["id"]; + } require_once("Photo.php"); - $photos = import_profile_photo($data["photo"],$uid,$contact[0]["id"]); + $photos = import_profile_photo($data["photo"],$uid,$contactid); - q("UPDATE `contact` SET `photo` = '%s', `thumb` = '%s', `micro` = '%s', `name-date` = '%s', `uri-date` = '%s', `avatar-date` = '%s' WHERE `id` = %d", + q("UPDATE `contact` SET `photo` = '%s', `thumb` = '%s', `micro` = '%s', + `addr` = '%s', `alias` = '%s', `name` = '%s', `nick` = '%s', + `name-date` = '%s', `uri-date` = '%s', `avatar-date` = '%s' WHERE `id` = %d", dbesc($photos[0]), dbesc($photos[1]), dbesc($photos[2]), + dbesc($data["addr"]), + dbesc($data["alias"]), + dbesc($data["name"]), + dbesc($data["nick"]), dbesc(datetime_convert()), dbesc(datetime_convert()), dbesc(datetime_convert()), - intval($contact[0]["id"]) + intval($contactid) ); - return $contact[0]["id"]; + return $contactid; } diff --git a/include/Scrape.php b/include/Scrape.php index 7df86d9f2d..c74fd879c2 100644 --- a/include/Scrape.php +++ b/include/Scrape.php @@ -433,7 +433,7 @@ function probe_url($url, $mode = PROBE_NORMAL) { // to a contact on incoming messages to prevent spam, and we won't know which one // to match. So in case of two, one of them is stored as an alias. Only store URL's // and not webfinger user@host aliases. If they've got more than two non-email style - // aliases, let's hope we're lucky and get one that matches the feed author-uri because + // aliases, let's hope we're lucky and get one that matches the feed author-uri because // otherwise we're screwed. foreach($links as $link) { @@ -448,6 +448,10 @@ function probe_url($url, $mode = PROBE_NORMAL) { } } } + + // If the profile is different from the url then the url is abviously an alias + if (($alias == "") AND ($profile != "") AND !$at_addr AND (normalise_link($profile) != normalise_link($url))) + $alias = $url; } elseif($mode == PROBE_NORMAL) { diff --git a/include/threads.php b/include/threads.php index e9a0d7f1f2..bd0cb04899 100644 --- a/include/threads.php +++ b/include/threads.php @@ -66,9 +66,11 @@ function add_thread($itemid, $onlyshadow = false) { if (!$r) { // Preparing public shadow (removing user specific data) require_once("include/items.php"); + require_once("include/Contact.php"); + unset($item[0]['id']); $item[0]['uid'] = 0; - $item[0]['contact-id'] = 0; + $item[0]['contact-id'] = get_contact($item[0]['author-link'], 0); $public_shadow = item_store($item[0], false, false, true); logger("add_thread: Stored public shadow for post ".$itemid." under id ".$public_shadow, LOGGER_DEBUG);