if ($exists[0]["last_contact"] < $exists[0]["last_failure"])
continue;
- $last_updated = poco_last_updated($jj->url);
- $last_contact = datetime_convert();
-
- if ($last_updated) {
- logger("Mark profile ".$jj->url." as accessible (".$search.")", LOGGER_DEBUG);
- q("UPDATE `gcontact` SET `updated` = '%s', `last_contact` = '%s' WHERE `nurl` = '%s'",
- dbesc($last_updated), dbesc($last_contact), dbesc(normalise_link($jj->url)));
- } else {
- logger("Mark profile ".$jj->url." as unaccessible (".$search.")", LOGGER_DEBUG);
- q("UPDATE `gcontact` SET `last_failure` = '%s' WHERE `nurl` = '%s'",
- dbesc($last_contact), dbesc(normalise_link($jj->url)));
- }
+ // Update the contact
+ poco_last_updated($jj->url);
continue;
}
+ // Harcoded paths aren't so good. But in this case it is okay.
+ // First: We only will get Friendica contacts (which always are using this url schema)
+ // Second: There will be no further problems if we are doing a mistake
+ $server_url = preg_replace("=(https?://)(.*)/profile/(.*)=ism", "$1$2", $jj->url);
+ if ($server_url != $jj->url)
+ if (!poco_check_server($server_url)) {
+ logger("Friendica server ".$server_url." doesn't answer.", LOGGER_DEBUG);
+ continue;
+ }
+ logger("Friendica server ".$server_url." seems to be okay.", LOGGER_DEBUG);
+
logger("Check if profile ".$jj->url." is reachable (".$search.")", LOGGER_DEBUG);
$data = probe_url($jj->url);
if ($data["network"] == NETWORK_DFRN) {
logger("profile-check generation: ".$generation." Network: ".$network." URL: ".$profile_url." name: ".$name." avatar: ".$profile_photo, LOGGER_DEBUG);
+ poco_check_server($server_url, $network);
+
// Only fetch last update manually if it wasn't provided and enabled in the system
if (get_config('system','poco_completion') AND ($orig_updated == "0000-00-00 00:00:00") AND poco_do_update($updated, $last_contact, $last_failure)) {
$last_updated = poco_last_updated($profile_url);
$updated = $last_updated;
$last_contact = datetime_convert();
logger("Last updated for profile ".$profile_url.": ".$updated, LOGGER_DEBUG);
-
- if (count($x))
- q("UPDATE `gcontact` SET `last_contact` = '%s' WHERE `nurl` = '%s'", dbesc($last_contact), dbesc(normalise_link($profile_url)));
- } else {
+ } else
$last_failure = datetime_convert();
-
- if (count($x))
- q("UPDATE `gcontact` SET `last_failure` = '%s' WHERE `nurl` = '%s'", dbesc($last_failure), dbesc(normalise_link($profile_url)));
- }
}
- poco_check_server($server_url, $network);
-
- // Test - remove before flight
- //if ($last_contact > $last_failure)
- // q("UPDATE `gserver` SET `last_contact` = '%s' WHERE `nurl` = '%s'", dbesc($last_contact), dbesc(normalise_link($server_url)));
- //else
- // q("UPDATE `gserver` SET `last_failure` = '%s' WHERE `nurl` = '%s'", dbesc($last_failure), dbesc(normalise_link($server_url)));
-
if(count($x)) {
$gcid = $x[0]['id'];
}
function poco_last_updated($profile) {
+
+ $gcontacts = q("SELECT * FROM `gcontact` WHERE `nurl` = '%s'",
+ dbesc(normalise_link($profile)));
+
+ if ($gcontacts[0]["server_url"] != "") {
+ $servers = q("SELECT * FROM `gserver` WHERE `nurl` = '%s' AND `last_contact` < `last_failure`", dbesc(normalise_link($gcontacts[0]["server_url"])));
+
+ if ($servers)
+ return false;
+ }
+
$data = probe_url($profile);
- if (($data["poll"] == "") OR ($data["network"] == NETWORK_FEED))
+ if (($data["poll"] == "") OR ($data["network"] == NETWORK_FEED)) {
+ q("UPDATE `gcontact` SET `last_failure` = '%s' WHERE `nurl` = '%s'",
+ dbesc(datetime_convert()), dbesc(normalise_link($profile)));
return false;
+ }
+
+ if (($data["name"] != "") AND ($data["name"] != $gcontacts[0]["name"]))
+ q("UPDATE `gcontact` SET `name` = '%s' WHERE `nurl` = '%s'",
+ dbesc($data["name"]), dbesc(normalise_link($profile)));
+
+ if (($data["addr"] != "") AND ($data["addr"] != $gcontacts[0]["connect"]))
+ q("UPDATE `gcontact` SET `connect` = '%s' WHERE `nurl` = '%s'",
+ dbesc($data["addr"]), dbesc(normalise_link($profile)));
+
+ if (($data["photo"] != "") AND ($data["photo"] != $gcontacts[0]["photo"]))
+ q("UPDATE `gcontact` SET `photo` = '%s' WHERE `nurl` = '%s'",
+ dbesc($data["photo"]), dbesc(normalise_link($profile)));
+
+ if (($data["baseurl"] != "") AND ($data["baseurl"] != $gcontacts[0]["server_url"]))
+ q("UPDATE `gcontact` SET `server_url` = '%s' WHERE `nurl` = '%s'",
+ dbesc($data["baseurl"]), dbesc(normalise_link($profile)));
+
+ if ($data["baseurl"] != "")
+ poco_check_server($data["baseurl"], $data["network"]);
// To-Do: Use noscrape
$feedret = z_fetch_url($data["poll"]);
- if (!$feedret["success"])
+ if (!$feedret["success"]) {
+ q("UPDATE `gcontact` SET `last_failure` = '%s' WHERE `nurl` = '%s'",
+ dbesc(datetime_convert()), dbesc(normalise_link($profile)));
return false;
+ }
$doc = new DOMDocument();
@$doc->loadXML($feedret["body"]);
if ($xpath->query('/atom:feed')->length > 0)
$last_updated = "0000-00-00 00:00:00";
+ q("UPDATE `gcontact` SET `updated` = '%s', `last_contact` = '%s' WHERE `nurl` = '%s'",
+ dbesc($last_updated), dbesc(datetime_convert()), dbesc(normalise_link($profile)));
+
return($last_updated);
}
return false;
// If the last contact time was more than a week ago, then only try once a week
- if (($now - $contact_time) > (60 * 60 * 24 * 7) AND ($now - $failure_time) < (60 * 60 * 24 * 7))
+ if ((($now - $contact_time) > (60 * 60 * 24 * 7)) AND (($now - $failure_time) < (60 * 60 * 24 * 7)))
return false;
- // If the last contact time was more than a month ago, then only try once a month
- if (($now - $contact_time) > (60 * 60 * 24 * 30) AND ($now - $failure_time) < (60 * 60 * 24 * 30))
+ // If the last contact time was more than a month ago, then only try once a month - but only if there ever was a contact time
+ if (($contact_time > 0) AND (($now - $contact_time) > (60 * 60 * 24 * 30)) AND (($now - $failure_time) < (60 * 60 * 24 * 30)))
return false;
return true;
function poco_check_server($server_url, $network = "") {
if ($server_url == "")
- return;
+ return false;
$servers = q("SELECT * FROM `gserver` WHERE `nurl` = '%s'", dbesc(normalise_link($server_url)));
if ($servers) {
$info = $servers[0]["info"];
$register_policy = $servers[0]["register_policy"];
- // Only check the server once a week
- if (strtotime(datetime_convert()) < (strtotime($last_contact) + (60 * 60 * 24 * 7)))
- return;
-
- if (strtotime(datetime_convert()) < (strtotime($last_failure) + (60 * 60 * 24 * 7)))
- return;
+ if (!poco_do_update("", $last_contact, $last_failure))
+ return ($last_contact >= $last_failure);
} else {
$poco = "";
$noscrape = "";
dbesc($platform),
dbesc(datetime_convert())
);
+ return $failure;
}
function poco_contact_from_body($body, $created, $cid, $uid) {