return 0;
}
+ // Store the unescaped version
+ $unescaped = $arr;
+
dbesc_array($arr);
logger('item_store: ' . print_r($arr,true), LOGGER_DATA);
. implode("', '", array_values($arr))
. "')" );
- // find the item we just created
+ // And restore it
+ $arr = $unescaped;
+ // find the item we just created
$r = q("SELECT `id` FROM `item` WHERE `uri` = '%s' AND `uid` = %d ORDER BY `id` ASC ",
- $arr['uri'], // already dbesc'd
+ dbesc($arr['uri']),
intval($arr['uid'])
);
// Add every contact to the global contact table
// Contacts from the statusnet connector are also added since you could add them in OStatus as well.
if (!$arr['private'] AND in_array($arr["network"],
- array(NETWORK_DFRN, NETWORK_DIASPORA, NETWORK_OSTATUS, NETWORK_STATUSNET, "")))
- poco_check($arr["author-link"], $arr["author-name"], $arr["network"], $arr["author-avatar"], "", $arr["received"], $arr['contact-id'], $arr['uid']);
+ array(NETWORK_DFRN, NETWORK_DIASPORA, NETWORK_OSTATUS, NETWORK_STATUSNET, ""))) {
+ poco_check($arr["author-link"], $arr["author-name"], $arr["network"], $arr["author-avatar"], "", "", "", $arr["received"], $arr["contact-id"], $arr["uid"]);
+
+ // Maybe its a body with a shared item? Then extract a global contact from it.
+ poco_contact_from_body($arr["body"], $arr["received"], $arr["contact-id"], $arr["uid"]);
+ }
// Set "success_update" to the date of the last time we heard from this contact
// This can be used to filter for inactive contacts and poco.
if(count($r) > 1) {
logger('item_store: duplicated post occurred. Removing duplicates.');
q("DELETE FROM `item` WHERE `uri` = '%s' AND `uid` = %d AND `id` != %d ",
- $arr['uri'],
+ dbesc($arr['uri']),
intval($arr['uid']),
intval($current_post)
);
if(! $url)
return;
- $url = $url . (($uid) ? '/@me/@all?fields=displayName,urls,photos,updated,network' : '?fields=displayName,urls,photos,updated,network') ;
+ $url = $url . (($uid) ? '/@me/@all?fields=displayName,urls,photos,updated,network,aboutMe,currentLocation' : '?fields=displayName,urls,photos,updated,network,aboutMe,currentLocation') ;
logger('poco_load: ' . $url, LOGGER_DEBUG);
$name = '';
$network = '';
$updated = '0000-00-00 00:00:00';
+ $location = '';
+ $about = '';
$name = $entry->displayName;
if(isset($entry->network))
$network = $entry->network;
- poco_check($profile_url, $name, $network, $profile_photo, $connect_url, $updated, $cid, $uid, $zcid);
+ if(isset($entry->currentLocation))
+ $location = $entry->currentLocation;
+
+ if(isset($entry->aboutMe))
+ $about = $entry->aboutMe;
+
+ poco_check($profile_url, $name, $network, $profile_photo, $about, $location, $connect_url, $updated, $cid, $uid, $zcid);
+
+ if (($location != "") OR ($about != ""))
+ q("UPDATE `contact` SET `location` = '%s', `about` = '%s' WHERE `nurl` = '%s' AND NOT `self`",
+ dbesc($location),
+ dbesc($about),
+ dbesc(normalise_link($profile_url)));
}
logger("poco_load: loaded $total entries",LOGGER_DEBUG);
}
-function poco_check($profile_url, $name, $network, $profile_photo, $connect_url, $updated, $cid = 0, $uid = 0, $zcid = 0) {
+function poco_check($profile_url, $name, $network, $profile_photo, $about, $location, $connect_url, $updated, $cid = 0, $uid = 0, $zcid = 0) {
$gcid = "";
- if (($profile_url == "") OR ($name == "") OR ($profile_photo == ""))
+ if ($profile_url == "")
+ return $gcid;
+
+ if (($network == "") OR ($name == "") OR ($profile_photo == "")) {
+ require_once("include/Scrape.php");
+
+ $data = probe_url($profile_url, PROBE_DIASPORA);
+ $network = $data["network"];
+ $name = $data["name"];
+ $profile_photo = $data["photo"];
+ }
+
+ if (!in_array($network, array(NETWORK_DFRN, NETWORK_OSTATUS, NETWORK_DIASPORA, NETWORK_STATUSNET)))
+ return $gcid;
+
+ if (($name == "") OR ($profile_photo == ""))
return $gcid;
logger("profile-check URL: ".$profile_url." name: ".$name." avatar: ".$profile_photo, LOGGER_DEBUG);
if(count($x)) {
$gcid = $x[0]['id'];
+ if (($location == "") AND ($x[0]['location'] != ""))
+ $location = $x[0]['location'];
+
+ if (($about == "") AND ($x[0]['about'] != ""))
+ $about = $x[0]['about'];
+
if($x[0]['name'] != $name || $x[0]['photo'] != $profile_photo || $x[0]['updated'] < $updated) {
- q("update gcontact set `name` = '%s', `network` = '%s', `photo` = '%s', `connect` = '%s', `url` = '%s', `updated` = '%s'
+ q("update gcontact set `name` = '%s', `network` = '%s', `photo` = '%s', `connect` = '%s', `url` = '%s', `updated` = '%s', `location` = '%s', `about` = '%s'
where `nurl` = '%s'",
dbesc($name),
dbesc($network),
dbesc($connect_url),
dbesc($profile_url),
dbesc($updated),
+ dbesc($location),
+ dbesc($about),
dbesc(normalise_link($profile_url))
);
}
} else {
- q("insert into `gcontact` (`name`,`network`, `url`,`nurl`,`photo`,`connect`, `updated`)
+ q("insert into `gcontact` (`name`,`network`, `url`,`nurl`,`photo`,`connect`, `updated`, `location`, `about`)
values ('%s', '%s', '%s', '%s', '%s','%s', '%s')",
dbesc($name),
dbesc($network),
dbesc(normalise_link($profile_url)),
dbesc($profile_photo),
dbesc($connect_url),
- dbesc($updated)
+ dbesc($updated),
+ dbesc($location),
+ dbesc($about)
);
$x = q("SELECT * FROM `gcontact` WHERE `nurl` = '%s' LIMIT 1",
dbesc(normalise_link($profile_url))
return $gcid;
}
+function poco_contact_from_body($body, $created, $cid, $uid) {
+ preg_replace_callback("/\[share(.*?)\].*?\[\/share\]/ism",
+ function ($match) use ($created, $cid, $uid){
+ return(sub_poco_from_share($match, $created, $cid, $uid));
+ }, $body);
+}
+
+function sub_poco_from_share($share, $created, $cid, $uid) {
+ $profile = "";
+ preg_match("/profile='(.*?)'/ism", $share[1], $matches);
+ if ($matches[1] != "")
+ $profile = $matches[1];
+
+ preg_match('/profile="(.*?)"/ism', $share[1], $matches);
+ if ($matches[1] != "")
+ $profile = $matches[1];
+
+ if ($profile == "")
+ return;
+
+ logger("prepare poco_check for profile ".$profile, LOGGER_DEBUG);
+ poco_check($profile, "", "", "", "", "", "", $created, $cid, $uid);
+}
+
function count_common_friends($uid,$cid) {
$r = q("SELECT count(*) as `total`