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

@ -36,7 +36,8 @@ class CronJobs
// Call possible post update functions
// see src/Database/PostUpdate.php for more details
if ($command == 'post_update') {
PostUpdate::update();
// Post updates will be reenabled (hopefully in a few days) when most item works are done
// PostUpdate::update();
return;
}

View file

@ -44,6 +44,7 @@ class Delivery extends BaseObject
return;
}
$uid = $target_item['uid'];
$items = [];
} elseif ($cmd == self::SUGGESTION) {
$target_item = dba::selectFirst('fsuggest', [], ['id' => $item_id]);
if (!DBM::is_result($target_item)) {
@ -127,6 +128,10 @@ class Delivery extends BaseObject
}
}
if (empty($items)) {
logger('No delivery data for ' . $cmd . ' - Item ID: ' .$item_id . ' - Contact ID: ' . $contact_id);
}
$owner = User::getOwnerDataById($uid);
if (!DBM::is_result($owner)) {
return;
@ -271,7 +276,7 @@ class Delivery extends BaseObject
// We don't have a relationship with contacts on a public post.
// Se we transmit with the new method and via Diaspora as a fallback
if (($items[0]['uid'] == 0) || ($contact['uid'] == 0)) {
if (!empty($items) && (($items[0]['uid'] == 0) || ($contact['uid'] == 0))) {
// Transmit in public if it's a relay post
$public_dfrn = ($contact['contact-type'] == ACCOUNT_TYPE_RELAY);

View file

@ -42,12 +42,12 @@ class Expire {
// Normally we shouldn't have orphaned data at all.
// If we do have some, then we have to check why.
logger('Deleting orphaned item activities - start', LOGGER_DEBUG);
$condition = ["NOT EXISTS (SELECT `iaid` FROM `item` WHERE `item`.`uri` = `item-activity`.`uri`)"];
$condition = ["NOT EXISTS (SELECT `iaid` FROM `item` WHERE `item`.`iaid` = `item-activity`.`id`)"];
dba::delete('item-activity', $condition);
logger('Orphaned item activities deleted: ' . dba::affected_rows(), LOGGER_DEBUG);
logger('Deleting orphaned item content - start', LOGGER_DEBUG);
$condition = ["NOT EXISTS (SELECT `icid` FROM `item` WHERE `item`.`uri` = `item-content`.`uri`)"];
$condition = ["NOT EXISTS (SELECT `icid` FROM `item` WHERE `item`.`icid` = `item-content`.`id`)"];
dba::delete('item-content', $condition);
logger('Orphaned item content deleted: ' . dba::affected_rows(), LOGGER_DEBUG);

View file

@ -378,7 +378,7 @@ class Notifier {
}
// If this is a public message and pubmail is set on the parent, include all your email contacts
if (function_exists('imap_open') && !Config::get('system','imap_disabled')) {
if (!empty($target_item) && function_exists('imap_open') && !Config::get('system','imap_disabled')) {
if (!strlen($target_item['allow_cid']) && !strlen($target_item['allow_gid'])
&& !strlen($target_item['deny_cid']) && !strlen($target_item['deny_gid'])
&& intval($target_item['pubmail'])) {
@ -412,7 +412,7 @@ class Notifier {
// delivery loop
if (DBM::is_result($r)) {
foreach ($r as $contact) {
logger("Deliver ".$target_item["guid"]." to ".$contact['url']." via network ".$contact['network'], LOGGER_DEBUG);
logger("Deliver ".$item_id." to ".$contact['url']." via network ".$contact['network'], LOGGER_DEBUG);
Worker::add(['priority' => $a->queue['priority'], 'created' => $a->queue['created'], 'dont_fork' => true],
'Delivery', $cmd, $item_id, (int)$contact['id']);

View file

@ -1,21 +0,0 @@
<?php
/**
* @file src/Worker/SetItemContentID.php
* @brief This script sets the "icid" value in the item table if it couldn't set before.
*
* This script is started from mod/item.php to fix timing problems.
*/
namespace Friendica\Worker;
use Friendica\Model\Item;
class SetItemContentID {
public static function execute($uri = '') {
if (empty($uri)) {
return;
}
Item::setICIDforURI($uri);
}
}