Rewrite:
- moved constants GRAVITY_* from boot.php to Friendica\Model\Item - also rewrote some array initialization: From: ```` <?php $arr = []; $arr['foo'] = "FOO"; ```` To: ```` <?php $arr['foo'] = "FOO"; ```` - added a few type-hints
This commit is contained in:
parent
e5ae5c7e67
commit
da66730e4f
77 changed files with 547 additions and 513 deletions
|
@ -25,18 +25,21 @@ use Friendica\Contact\FriendSuggest\Collection\FriendSuggests;
|
|||
use Friendica\Contact\FriendSuggest\Exception\FriendSuggestNotFoundException;
|
||||
use Friendica\Core\Logger;
|
||||
use Friendica\Core\Protocol;
|
||||
use Friendica\Core\Worker;
|
||||
use Friendica\Database\DBA;
|
||||
use Friendica\DI;
|
||||
use Friendica\Model;
|
||||
use Friendica\Model\Contact;
|
||||
use Friendica\Model\FContact;
|
||||
use Friendica\Model\GServer;
|
||||
use Friendica\Model\Item;
|
||||
use Friendica\Model\Post;
|
||||
use Friendica\Model\User;
|
||||
use Friendica\Protocol\Activity;
|
||||
use Friendica\Protocol\DFRN;
|
||||
use Friendica\Protocol\Diaspora;
|
||||
use Friendica\Protocol\Email;
|
||||
use Friendica\Protocol\Activity;
|
||||
use Friendica\Util\Network;
|
||||
use Friendica\Core\Worker;
|
||||
use Friendica\Model\FContact;
|
||||
use Friendica\Model\Item;
|
||||
use Friendica\Protocol\Relay;
|
||||
use Friendica\Util\Network;
|
||||
|
||||
class Delivery
|
||||
{
|
||||
|
@ -75,7 +78,7 @@ class Delivery
|
|||
$uid = $post_uriid;
|
||||
$target_item = [];
|
||||
} else {
|
||||
$item = Model\Post::selectFirst(['id', 'parent'], ['uri-id' => $post_uriid, 'uid' => $sender_uid]);
|
||||
$item = Post::selectFirst(['id', 'parent'], ['uri-id' => $post_uriid, 'uid' => $sender_uid]);
|
||||
if (!DBA::isResult($item) || empty($item['parent'])) {
|
||||
Logger::warning('Post not found', ['uri-id' => $post_uriid, 'uid' => $sender_uid]);
|
||||
return;
|
||||
|
@ -85,9 +88,9 @@ class Delivery
|
|||
|
||||
$condition = ['id' => [$target_id, $parent_id], 'visible' => true];
|
||||
$params = ['order' => ['id']];
|
||||
$itemdata = Model\Post::select(Item::DELIVER_FIELDLIST, $condition, $params);
|
||||
$itemdata = Post::select(Item::DELIVER_FIELDLIST, $condition, $params);
|
||||
|
||||
while ($item = Model\Post::fetch($itemdata)) {
|
||||
while ($item = Post::fetch($itemdata)) {
|
||||
if ($item['verb'] == Activity::ANNOUNCE) {
|
||||
continue;
|
||||
}
|
||||
|
@ -124,14 +127,14 @@ class Delivery
|
|||
}
|
||||
|
||||
$condition = ['uri' => $target_item['thr-parent'], 'uid' => $target_item['uid']];
|
||||
$thr_parent = Model\Post::selectFirst(['network', 'object'], $condition);
|
||||
$thr_parent = Post::selectFirst(['network', 'object'], $condition);
|
||||
if (!DBA::isResult($thr_parent)) {
|
||||
// Shouldn't happen. But when this does, we just take the parent as thread parent.
|
||||
// That's totally okay for what we use this variable here.
|
||||
$thr_parent = $parent;
|
||||
}
|
||||
|
||||
if (!empty($contact_id) && Model\Contact::isArchived($contact_id)) {
|
||||
if (!empty($contact_id) && Contact::isArchived($contact_id)) {
|
||||
Logger::info('Contact is archived', ['id' => $contact_id, 'cmd' => $cmd, 'item' => $target_item['id']]);
|
||||
self::setFailedQueue($cmd, $target_item);
|
||||
return;
|
||||
|
@ -144,7 +147,7 @@ class Delivery
|
|||
}
|
||||
}
|
||||
|
||||
$top_level = $target_item['gravity'] == GRAVITY_PARENT;
|
||||
$top_level = $target_item['gravity'] == Item::GRAVITY_PARENT;
|
||||
|
||||
// This is IMPORTANT!!!!
|
||||
|
||||
|
@ -176,7 +179,7 @@ class Delivery
|
|||
&& empty($parent['allow_gid'])
|
||||
&& empty($parent['deny_cid'])
|
||||
&& empty($parent['deny_gid'])
|
||||
&& ($parent["private"] != Model\Item::PRIVATE)) {
|
||||
&& ($parent['private'] != Item::PRIVATE)) {
|
||||
$public_message = true;
|
||||
}
|
||||
}
|
||||
|
@ -185,7 +188,7 @@ class Delivery
|
|||
Logger::warning('No delivery data', ['command' => $cmd, 'uri-id' => $post_uriid, 'cid' => $contact_id]);
|
||||
}
|
||||
|
||||
$owner = Model\User::getOwnerDataById($uid);
|
||||
$owner = User::getOwnerDataById($uid);
|
||||
if (!DBA::isResult($owner)) {
|
||||
self::setFailedQueue($cmd, $target_item);
|
||||
return;
|
||||
|
@ -205,7 +208,7 @@ class Delivery
|
|||
return;
|
||||
}
|
||||
|
||||
$protocol = Model\GServer::getProtocol($contact['gsid'] ?? 0);
|
||||
$protocol = GServer::getProtocol($contact['gsid'] ?? 0);
|
||||
|
||||
// Transmit via Diaspora if the thread had started as Diaspora post.
|
||||
// Also transmit via Diaspora if this is a direct answer to a Diaspora comment.
|
||||
|
@ -250,7 +253,7 @@ class Delivery
|
|||
return;
|
||||
}
|
||||
|
||||
Model\Post\DeliveryData::incrementQueueFailed($item['uri-id'] ?? $item['id']);
|
||||
Post\DeliveryData::incrementQueueFailed($item['uri-id'] ?? $item['id']);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -281,7 +284,7 @@ class Delivery
|
|||
|
||||
if ($cmd == self::MAIL) {
|
||||
$item = $target_item;
|
||||
$item['body'] = Model\Item::fixPrivatePhotos($item['body'], $owner['uid'], null, $item['contact-id']);
|
||||
$item['body'] = Item::fixPrivatePhotos($item['body'], $owner['uid'], null, $item['contact-id']);
|
||||
$atom = DFRN::mail($item, $owner);
|
||||
} elseif ($cmd == self::SUGGESTION) {
|
||||
$item = $target_item;
|
||||
|
@ -311,13 +314,13 @@ class Delivery
|
|||
|
||||
Logger::debug('Notifier entry: ' . $contact["url"] . ' ' . (($target_item['guid'] ?? '') ?: $target_item['id']) . ' entry: ' . $atom);
|
||||
|
||||
$protocol = Model\Post\DeliveryData::DFRN;
|
||||
$protocol = Post\DeliveryData::DFRN;
|
||||
|
||||
// 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 (!empty($items) && (($items[0]['uid'] == 0) || ($contact['uid'] == 0))) {
|
||||
// Transmit in public if it's a relay post
|
||||
$public_dfrn = ($contact['contact-type'] == Model\Contact::TYPE_RELAY);
|
||||
$public_dfrn = ($contact['contact-type'] == Contact::TYPE_RELAY);
|
||||
|
||||
$deliver_status = DFRN::transmit($owner, $contact, $atom, $public_dfrn);
|
||||
|
||||
|
@ -327,17 +330,17 @@ class Delivery
|
|||
|
||||
if ($cmd == Delivery::POST) {
|
||||
if (($deliver_status >= 200) && ($deliver_status <= 299)) {
|
||||
Model\Post\DeliveryData::incrementQueueDone($target_item['uri-id'], $protocol);
|
||||
Post\DeliveryData::incrementQueueDone($target_item['uri-id'], $protocol);
|
||||
|
||||
Model\GServer::setProtocol($contact['gsid'] ?? 0, $protocol);
|
||||
GServer::setProtocol($contact['gsid'] ?? 0, $protocol);
|
||||
} else {
|
||||
Model\Post\DeliveryData::incrementQueueFailed($target_item['uri-id']);
|
||||
Post\DeliveryData::incrementQueueFailed($target_item['uri-id']);
|
||||
}
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
if ((($deliver_status < 200) || ($deliver_status > 299)) && (empty($server_protocol) || ($server_protocol == Model\Post\DeliveryData::LEGACY_DFRN))) {
|
||||
if ((($deliver_status < 200) || ($deliver_status > 299)) && (empty($server_protocol) || ($server_protocol == Post\DeliveryData::LEGACY_DFRN))) {
|
||||
// Transmit via Diaspora if not possible via Friendica
|
||||
self::deliverDiaspora($cmd, $contact, $owner, $items, $target_item, $public_message, $top_level, $followup);
|
||||
return;
|
||||
|
@ -351,20 +354,20 @@ class Delivery
|
|||
|
||||
if (($deliver_status >= 200) && ($deliver_status <= 299)) {
|
||||
// We successfully delivered a message, the contact is alive
|
||||
Model\Contact::unmarkForArchival($contact);
|
||||
Contact::unmarkForArchival($contact);
|
||||
|
||||
Model\GServer::setProtocol($contact['gsid'] ?? 0, $protocol);
|
||||
GServer::setProtocol($contact['gsid'] ?? 0, $protocol);
|
||||
|
||||
if ($cmd == Delivery::POST) {
|
||||
Model\Post\DeliveryData::incrementQueueDone($target_item['uri-id'], $protocol);
|
||||
Post\DeliveryData::incrementQueueDone($target_item['uri-id'], $protocol);
|
||||
}
|
||||
} else {
|
||||
// The message could not be delivered. We mark the contact as "dead"
|
||||
Model\Contact::markForArchival($contact);
|
||||
Contact::markForArchival($contact);
|
||||
|
||||
Logger::info('Delivery failed: defer message', ['id' => ($target_item['guid'] ?? '') ?: $target_item['id']]);
|
||||
if (!Worker::defer() && $cmd == Delivery::POST) {
|
||||
Model\Post\DeliveryData::incrementQueueFailed($target_item['uri-id']);
|
||||
Post\DeliveryData::incrementQueueFailed($target_item['uri-id']);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -386,7 +389,7 @@ class Delivery
|
|||
private static function deliverDiaspora(string $cmd, array $contact, array $owner, array $items, array $target_item, bool $public_message, bool $top_level, bool $followup)
|
||||
{
|
||||
// We don't treat Forum posts as "wall-to-wall" to be able to post them via Diaspora
|
||||
$walltowall = $top_level && ($owner['id'] != $items[0]['contact-id']) & ($owner['account-type'] != Model\User::ACCOUNT_TYPE_COMMUNITY);
|
||||
$walltowall = $top_level && ($owner['id'] != $items[0]['contact-id']) & ($owner['account-type'] != User::ACCOUNT_TYPE_COMMUNITY);
|
||||
|
||||
if ($public_message) {
|
||||
$loc = 'public batch ' . $contact['batch'];
|
||||
|
@ -438,30 +441,30 @@ class Delivery
|
|||
|
||||
if (($deliver_status >= 200) && ($deliver_status <= 299)) {
|
||||
// We successfully delivered a message, the contact is alive
|
||||
Model\Contact::unmarkForArchival($contact);
|
||||
Contact::unmarkForArchival($contact);
|
||||
|
||||
Model\GServer::setProtocol($contact['gsid'] ?? 0, Model\Post\DeliveryData::DIASPORA);
|
||||
GServer::setProtocol($contact['gsid'] ?? 0, Post\DeliveryData::DIASPORA);
|
||||
|
||||
if ($cmd == Delivery::POST) {
|
||||
Model\Post\DeliveryData::incrementQueueDone($target_item['uri-id'], Model\Post\DeliveryData::DIASPORA);
|
||||
Post\DeliveryData::incrementQueueDone($target_item['uri-id'], Post\DeliveryData::DIASPORA);
|
||||
}
|
||||
} else {
|
||||
// The message could not be delivered. We mark the contact as "dead"
|
||||
Model\Contact::markForArchival($contact);
|
||||
Contact::markForArchival($contact);
|
||||
|
||||
// When it is delivered to the public endpoint, we do mark the relay contact for archival as well
|
||||
if ($public_message) {
|
||||
Relay::markForArchival($contact);
|
||||
}
|
||||
|
||||
if (empty($contact['contact-type']) || ($contact['contact-type'] != Model\Contact::TYPE_RELAY)) {
|
||||
if (empty($contact['contact-type']) || ($contact['contact-type'] != Contact::TYPE_RELAY)) {
|
||||
Logger::info('Delivery failed: defer message', ['id' => ($target_item['guid'] ?? '') ?: $target_item['id']]);
|
||||
// defer message for redelivery
|
||||
if (!Worker::defer() && $cmd == Delivery::POST) {
|
||||
Model\Post\DeliveryData::incrementQueueFailed($target_item['uri-id']);
|
||||
Post\DeliveryData::incrementQueueFailed($target_item['uri-id']);
|
||||
}
|
||||
} elseif ($cmd == Delivery::POST) {
|
||||
Model\Post\DeliveryData::incrementQueueFailed($target_item['uri-id']);
|
||||
Post\DeliveryData::incrementQueueFailed($target_item['uri-id']);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -525,7 +528,7 @@ class Delivery
|
|||
|
||||
// only expose our real email address to true friends
|
||||
|
||||
if (($contact['rel'] == Model\Contact::FRIEND) && !$contact['blocked']) {
|
||||
if (($contact['rel'] == Contact::FRIEND) && !$contact['blocked']) {
|
||||
if ($reply_to) {
|
||||
$headers = 'From: ' . Email::encodeHeader($local_user['username'],'UTF-8') . ' <' . $reply_to . '>' . "\n";
|
||||
$headers .= 'Sender: ' . $local_user['email'] . "\n";
|
||||
|
@ -551,13 +554,13 @@ class Delivery
|
|||
|
||||
if (empty($target_item['title'])) {
|
||||
$condition = ['uri' => $target_item['parent-uri'], 'uid' => $owner['uid']];
|
||||
$title = Model\Post::selectFirst(['title'], $condition);
|
||||
$title = Post::selectFirst(['title'], $condition);
|
||||
|
||||
if (DBA::isResult($title) && ($title['title'] != '')) {
|
||||
$subject = $title['title'];
|
||||
} else {
|
||||
$condition = ['parent-uri' => $target_item['parent-uri'], 'uid' => $owner['uid']];
|
||||
$title = Model\Post::selectFirst(['title'], $condition);
|
||||
$title = Post::selectFirst(['title'], $condition);
|
||||
|
||||
if (DBA::isResult($title) && ($title['title'] != '')) {
|
||||
$subject = $title['title'];
|
||||
|
@ -575,7 +578,7 @@ class Delivery
|
|||
|
||||
if ($success) {
|
||||
// Success
|
||||
Model\Post\DeliveryData::incrementQueueDone($target_item['uri-id'], Model\Post\DeliveryData::MAIL);
|
||||
Post\DeliveryData::incrementQueueDone($target_item['uri-id'], Post\DeliveryData::MAIL);
|
||||
Logger::info('Delivered via mail', ['guid' => $target_item['guid'], 'to' => $addr, 'subject' => $subject]);
|
||||
} else {
|
||||
// Failed
|
||||
|
|
|
@ -68,7 +68,7 @@ class ExpirePosts
|
|||
{
|
||||
Logger::notice('Delete expired posts');
|
||||
// physically remove anything that has been deleted for more than two months
|
||||
$condition = ["`gravity` = ? AND `deleted` AND `changed` < ?", GRAVITY_PARENT, DateTimeFormat::utc('now - 60 days')];
|
||||
$condition = ["`gravity` = ? AND `deleted` AND `changed` < ?", Item::GRAVITY_PARENT, DateTimeFormat::utc('now - 60 days')];
|
||||
$rows = Post::select(['guid', 'uri-id', 'uid'], $condition);
|
||||
while ($row = Post::fetch($rows)) {
|
||||
Logger::info('Delete expired item', ['uri-id' => $row['uri-id'], 'guid' => $row['guid']]);
|
||||
|
@ -134,7 +134,7 @@ class ExpirePosts
|
|||
}
|
||||
|
||||
$rows = 0;
|
||||
$userposts = DBA::select('post-user', [], ["`gravity` = ? AND `uri-id` not in (select `uri-id` from `post-thread`)", GRAVITY_PARENT]);
|
||||
$userposts = DBA::select('post-user', [], ["`gravity` = ? AND `uri-id` not in (select `uri-id` from `post-thread`)", Item::GRAVITY_PARENT]);
|
||||
while ($fields = DBA::fetch($userposts)) {
|
||||
$post_fields = DI::dbaDefinition()->truncateFieldsForTable('post-thread', $fields);
|
||||
$post_fields['commented'] = $post_fields['changed'] = $post_fields['created'];
|
||||
|
@ -149,7 +149,7 @@ class ExpirePosts
|
|||
}
|
||||
|
||||
$rows = 0;
|
||||
$userposts = DBA::select('post-user', [], ["`gravity` = ? AND `id` not in (select `post-user-id` from `post-thread-user`)", GRAVITY_PARENT]);
|
||||
$userposts = DBA::select('post-user', [], ["`gravity` = ? AND `id` not in (select `post-user-id` from `post-thread-user`)", Item::GRAVITY_PARENT]);
|
||||
while ($fields = DBA::fetch($userposts)) {
|
||||
$post_fields = DI::dbaDefinition()->truncateFieldsForTable('post-thread-user', $fields);
|
||||
$post_fields['commented'] = $post_fields['changed'] = $post_fields['created'];
|
||||
|
@ -264,7 +264,7 @@ class ExpirePosts
|
|||
AND `i`.`parent-uri-id` = `post-user`.`uri-id`)
|
||||
AND NOT `uri-id` IN (SELECT `parent-uri-id` FROM `post-user` AS `i` WHERE `i`.`uid` = ?
|
||||
AND `i`.`parent-uri-id` = `post-user`.`uri-id` AND `i`.`received` > ?))",
|
||||
GRAVITY_PARENT, 0, DateTimeFormat::utc('now - ' . (int)$expire_days_unclaimed . ' days'), 0, 0, DateTimeFormat::utc('now - ' . (int)$expire_days_unclaimed . ' days')]);
|
||||
Item::GRAVITY_PARENT, 0, DateTimeFormat::utc('now - ' . (int)$expire_days_unclaimed . ' days'), 0, 0, DateTimeFormat::utc('now - ' . (int)$expire_days_unclaimed . ' days')]);
|
||||
|
||||
Logger::notice('Start deleting unclaimed public items');
|
||||
$affected_count = 0;
|
||||
|
|
|
@ -143,7 +143,7 @@ class Notifier
|
|||
}
|
||||
}
|
||||
|
||||
$top_level = $target_item['gravity'] == GRAVITY_PARENT;
|
||||
$top_level = $target_item['gravity'] == Item::GRAVITY_PARENT;
|
||||
}
|
||||
|
||||
$owner = User::getOwnerDataById($uid);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue