Next item structure works (#5380)

* Use "LEFT JOIN" to always fetch the item. Needed for update routines.

* New conversion routine that now covers every item

* Post update is now activated

* We now use a hash based upon RIPEMD-320 for content and activity

* The hash doesn't contain the plink anymore

* Legacy item fields are now "null"able

* New hash function for a server unique item hash

* Introduction of the legacy mode (usage of old item fields)

* Code simplification

* We don't need the "uri" fields anymore in item-activity and item-content

* Use the "created" and not the "received" date for the hash

* Avoiding several notices

* Some more warnings removed

* Improved uri-hash / Likes on Diaspora are now getting a creation date

* Corrected the post update version

* Ensure an unique uri-hash

* Don't delete orhaned item data at the moment

* Partly reworked, due to strange behaviour

* Some more parts reworked

* Using the uri currently seems to be more reliable

* Using the uri here as well

* Use the hash values again

* Grouped item fields in different categories

* Notices again

* use the gravity (we always should)

* Added hint for disabled post updates

* Notices ...

* Issue #5337: Personal notes are displayed again

* Use the gravity again
This commit is contained in:
Michael Vogel 2018-07-15 20:36:20 +02:00 committed by Hypolite Petovan
parent 8ad6b65aeb
commit d3a2ed85fe
21 changed files with 315 additions and 297 deletions

View file

@ -2005,6 +2005,9 @@ class Diaspora
$datarray["body"] = $verb;
// Diaspora doesn't provide a date for likes
$datarray["changed"] = $datarray["created"] = $datarray["edited"] = DateTimeFormat::utcNow();
// like on comments have the comment as parent. So we need to fetch the toplevel parent
if ($parent_item["id"] != $parent_item["parent"]) {
$toplevel = Item::selectFirst(['origin'], ['id' => $parent_item["parent"]]);

View file

@ -19,6 +19,7 @@ use Friendica\Network\Probe;
use Friendica\Util\DateTimeFormat;
use Friendica\Util\Network;
use Friendica\Protocol\Diaspora;
use Friendica\Util\XML;
use dba;
use DOMDocument;
use DOMXPath;
@ -916,7 +917,7 @@ class PortableContact
return false;
}
$server["site_name"] = $xpath->evaluate("//head/title/text()")->item(0)->nodeValue;
$server["site_name"] = XML::getFirstNodeValue($xpath, '//head/title/text()');
return $server;
}
@ -1003,7 +1004,7 @@ class PortableContact
// Quit if there is a timeout.
// But we want to make sure to only quit if we are mostly sure that this server url fits.
if (DBM::is_result($gserver) && ($orig_server_url == $server_url) &&
($serverret['errno'] == CURLE_OPERATION_TIMEDOUT)) {
(!$serverret["success"] && ($serverret['errno'] == CURLE_OPERATION_TIMEDOUT))) {
logger("Connection to server ".$server_url." timed out.", LOGGER_DEBUG);
dba::update('gserver', ['last_failure' => DateTimeFormat::utcNow()], ['nurl' => normalise_link($server_url)]);
return false;
@ -1018,7 +1019,7 @@ class PortableContact
$serverret = Network::curl($server_url."/.well-known/host-meta", false, $redirects, ['timeout' => 20]);
// Quit if there is a timeout
if ($serverret['errno'] == CURLE_OPERATION_TIMEDOUT) {
if (!$serverret["success"] && ($serverret['errno'] == CURLE_OPERATION_TIMEDOUT)) {
logger("Connection to server ".$server_url." timed out.", LOGGER_DEBUG);
dba::update('gserver', ['last_failure' => DateTimeFormat::utcNow()], ['nurl' => normalise_link($server_url)]);
return false;
@ -1230,8 +1231,14 @@ class PortableContact
$site_name = $data->site->name;
$data->site->closed = self::toBoolean($data->site->closed);
$data->site->private = self::toBoolean($data->site->private);
$data->site->inviteonly = self::toBoolean($data->site->inviteonly);
if (!empty($data->site->private)) {
$data->site->private = self::toBoolean($data->site->private);
}
if (!empty($data->site->inviteonly)) {
$data->site->inviteonly = self::toBoolean($data->site->inviteonly);
}
if (!$data->site->closed && !$data->site->private and $data->site->inviteonly) {
$register_policy = REGISTER_APPROVE;
@ -1325,7 +1332,9 @@ class PortableContact
$noscrape = $data->no_scrape_url;
}
$version = $data->version;
$site_name = $data->site_name;
if (!empty($data->site_name)) {
$site_name = $data->site_name;
}
$info = $data->info;
$register_policy = constant($data->register_policy);
$platform = $data->platform;
@ -1714,7 +1723,9 @@ class PortableContact
$contact_type = -1;
$generation = $default_generation;
$name = $entry->displayName;
if (!empty($entry->displayName)) {
$name = $entry->displayName;
}
if (isset($entry->urls)) {
foreach ($entry->urls as $url) {