X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=src%2FWorker%2FDelivery.php;h=dc6caab3db9c95fe0cdece3100077ed633c7ac4c;hb=27d94023eef0263a3ce9750f79a73ac941a25304;hp=b394b0ed30d8e24579d3fca7f085bfbface38416;hpb=6b44fbbda03af125035c185c964f10ce78f97610;p=friendica.git diff --git a/src/Worker/Delivery.php b/src/Worker/Delivery.php index b394b0ed30..dc6caab3db 100644 --- a/src/Worker/Delivery.php +++ b/src/Worker/Delivery.php @@ -4,23 +4,20 @@ */ namespace Friendica\Worker; -use Friendica\App; -use Friendica\Core\System; use Friendica\Core\Config; use Friendica\Core\L10n; +use Friendica\Core\System; use Friendica\Database\DBM; use Friendica\Model\Contact; +use Friendica\Model\Item; use Friendica\Model\Queue; use Friendica\Model\User; -use Friendica\Protocol\Diaspora; use Friendica\Protocol\DFRN; +use Friendica\Protocol\Diaspora; use Friendica\Protocol\Email; use dba; -require_once 'include/html2plain.php'; -require_once 'include/datetime.php'; require_once 'include/items.php'; -require_once 'include/bbcode.php'; /// @todo This is some ugly code that needs to be split into several methods @@ -35,11 +32,12 @@ class Delivery { $relocate = false; $top_level = false; $recipients = []; - $url_recipients = []; $followup = false; $normal_mode = true; + $item = null; + $recipients[] = $contact_id; if ($cmd === 'mail') { @@ -133,7 +131,8 @@ class Delivery { return; } - $walltowall = (($top_level && ($owner['id'] != $items[0]['contact-id'])) ? true : false); + // 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'] != ACCOUNT_TYPE_COMMUNITY); $public_message = true; @@ -182,16 +181,14 @@ class Delivery { } - $r = q("SELECT * FROM `contact` WHERE `id` = %d AND `blocked` = 0 AND `pending` = 0", - intval($contact_id) + // We don't deliver our items to blocked or pending contacts, and not to ourselves either + $contact = dba::selectFirst('contact', [], + ['id' => $contact_id, 'blocked' => false, 'pending' => false, 'self' => false] ); - - if (DBM::is_result($r)) { - $contact = $r[0]; - } - if ($contact['self']) { + if (!DBM::is_result($contact)) { return; } + $deliver_status = 0; // Transmit via Diaspora if not possible via Friendica @@ -207,7 +204,7 @@ class Delivery { logger('notifier: '.$target_item["guid"].' dfrndelivery: '.$contact['name']); if ($mail) { - $item['body'] = fix_private_photos($item['body'],$owner['uid'],null,$message[0]['contact-id']); + $item['body'] = Item::fixPrivatePhotos($item['body'], $owner['uid'], null, $item['contact-id']); $atom = DFRN::mail($item, $owner); } elseif ($fsuggest) { $atom = DFRN::fsuggest($item, $owner); @@ -238,13 +235,14 @@ class Delivery { return; } - $item_contact = get_item_contact($item,$icontacts); + $item_contact = self::getItemContact($item,$icontacts); if (!$item_contact) { return; } if ($normal_mode) { - if ($item_id == $item['id'] || $item['id'] == $item['parent']) { + // Only add the parent when we don't delete other items. + if ($item_id == $item['id'] || (($item['id'] == $item['parent']) && ($cmd != 'drop'))) { $item["entry:comment-allow"] = true; $item["entry:cid"] = (($top_level) ? $contact['id'] : 0); $msgitems[] = $item; @@ -299,7 +297,7 @@ class Delivery { } $ssl_policy = Config::get('system','ssl_policy'); - fix_contact_ssl_policy($x[0],$ssl_policy); + $x[0] = Contact::updateSslPolicy($x[0], $ssl_policy); // If we are setup as a soapbox we aren't accepting top level posts from this person @@ -322,7 +320,7 @@ class Delivery { if ($deliver_status < 0) { logger('notifier: delivery failed: queuing message'); - Queue::add($contact['id'], NETWORK_DFRN, $atom); + Queue::add($contact['id'], NETWORK_DFRN, $atom, false, $target_item['guid']); // The message could not be delivered. We mark the contact as "dead" Contact::markForArchival($contact); @@ -505,4 +503,17 @@ class Delivery { return; } + + private static function getItemContact($item, $contacts) + { + if (!count($contacts) || !is_array($item)) { + return false; + } + foreach ($contacts as $contact) { + if ($contact['id'] == $item['contact-id']) { + return $contact; + } + } + return false; + } }