X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=src%2FWorker%2FDelivery.php;h=c6d24657e5aad2fe6c54f17434c5429b41d5f22d;hb=e2427eb9da8d32c35488b609f79e167786168ecc;hp=f2951cce1ff2bf13deb7aec6e112f16bfcb655f8;hpb=a97b540ebb3f1d5bb5c18b4c0fb631443d03b5a7;p=friendica.git diff --git a/src/Worker/Delivery.php b/src/Worker/Delivery.php index f2951cce1f..c6d24657e5 100644 --- a/src/Worker/Delivery.php +++ b/src/Worker/Delivery.php @@ -7,6 +7,7 @@ namespace Friendica\Worker; use Friendica\BaseObject; use Friendica\Core\Config; use Friendica\Core\L10n; +use Friendica\Core\Logger; use Friendica\Core\Protocol; use Friendica\Core\System; use Friendica\Database\DBA; @@ -17,8 +18,8 @@ use Friendica\Model\User; use Friendica\Protocol\DFRN; use Friendica\Protocol\Diaspora; use Friendica\Protocol\Email; - -require_once 'include/items.php'; +use Friendica\Util\Strings; +use Friendica\Util\Network; class Delivery extends BaseObject { @@ -33,19 +34,19 @@ class Delivery extends BaseObject public static function execute($cmd, $item_id, $contact_id) { - logger('Invoked: ' . $cmd . ': ' . $item_id . ' to ' . $contact_id, LOGGER_DEBUG); + Logger::log('Invoked: ' . $cmd . ': ' . $item_id . ' to ' . $contact_id, Logger::DEBUG); $top_level = false; $followup = false; $public_message = false; + $items = []; if ($cmd == self::MAIL) { $target_item = DBA::selectFirst('mail', [], ['id' => $item_id]); if (!DBA::isResult($target_item)) { return; } $uid = $target_item['uid']; - $items = []; } elseif ($cmd == self::SUGGESTION) { $target_item = DBA::selectFirst('fsuggest', [], ['id' => $item_id]); if (!DBA::isResult($target_item)) { @@ -54,6 +55,7 @@ class Delivery extends BaseObject $uid = $target_item['uid']; } elseif ($cmd == self::RELOCATION) { $uid = $item_id; + $target_item = []; } else { $item = Item::selectFirst(['parent'], ['id' => $item_id]); if (!DBA::isResult($item) || empty($item['parent'])) { @@ -65,7 +67,6 @@ class Delivery extends BaseObject $params = ['order' => ['id']]; $itemdata = Item::select([], $condition, $params); - $items = []; while ($item = Item::fetch($itemdata)) { if ($item['id'] == $parent_id) { $parent = $item; @@ -78,16 +79,23 @@ class Delivery extends BaseObject DBA::close($itemdata); if (empty($target_item)) { - logger('Item ' . $item_id . "wasn't found. Quitting here."); + Logger::log('Item ' . $item_id . "wasn't found. Quitting here."); return; } if (empty($parent)) { - logger('Parent ' . $parent_id . ' for item ' . $item_id . "wasn't found. Quitting here."); + Logger::log('Parent ' . $parent_id . ' for item ' . $item_id . "wasn't found. Quitting here."); return; } - $uid = $target_item['contact-uid']; + if (!empty($target_item['contact-uid'])) { + $uid = $target_item['contact-uid']; + } elseif (!empty($target_item['uid'])) { + $uid = $target_item['uid']; + } else { + Logger::log('Only public users for item ' . $item_id, Logger::DEBUG); + return; + } // avoid race condition with deleting entries if ($items[0]['deleted']) { @@ -100,7 +108,7 @@ class Delivery extends BaseObject // The count then showed more than one entry. The additional check should help. // The check for the "count" should be superfluous, but I'm not totally sure by now, so we keep it. if ((($parent['id'] == $item_id) || (count($items) == 1)) && ($parent['uri'] === $parent['parent-uri'])) { - logger('Top level post'); + Logger::log('Top level post'); $top_level = true; } @@ -125,7 +133,7 @@ class Delivery extends BaseObject */ if (!$top_level && ($parent['wall'] == 0) && stristr($target_item['uri'], $localhost)) { - logger('Followup ' . $target_item["guid"], LOGGER_DEBUG); + Logger::log('Followup ' . $target_item["guid"], Logger::DEBUG); // local followup to remote post $followup = true; } @@ -140,7 +148,7 @@ class Delivery extends BaseObject } if (empty($items)) { - logger('No delivery data for ' . $cmd . ' - Item ID: ' .$item_id . ' - Contact ID: ' . $contact_id); + Logger::log('No delivery data for ' . $cmd . ' - Item ID: ' .$item_id . ' - Contact ID: ' . $contact_id); } $owner = User::getOwnerDataById($uid); @@ -156,13 +164,17 @@ class Delivery extends BaseObject return; } + if (Network::isUrlBlocked($contact['url'])) { + return; + } + // Transmit via Diaspora if the thread had started as Diaspora post // This is done since the uri wouldn't match (Diaspora doesn't transmit it) if (isset($parent) && ($parent['network'] == Protocol::DIASPORA) && ($contact['network'] == Protocol::DFRN)) { $contact['network'] = Protocol::DIASPORA; } - logger("Delivering " . $cmd . " followup=$followup - via network " . $contact['network']); + Logger::log("Delivering " . $cmd . " followup=$followup - via network " . $contact['network']); switch ($contact['network']) { @@ -212,7 +224,7 @@ class Delivery extends BaseObject */ private static function deliverDFRN($cmd, $contact, $owner, $items, $target_item, $public_message, $top_level, $followup) { - logger('Deliver ' . $target_item["guid"] . ' via DFRN to ' . (empty($contact['addr']) ? $contact['url'] : $contact['addr'])); + Logger::log('Deliver ' . defaults($target_item, 'guid', $target_item['id']) . ' via DFRN to ' . (empty($contact['addr']) ? $contact['url'] : $contact['addr'])); if ($cmd == self::MAIL) { $item = $target_item; @@ -240,14 +252,14 @@ class Delivery extends BaseObject $atom = DFRN::entries($msgitems, $owner); } - logger('Notifier entry: ' . $contact["url"] . ' ' . $target_item["guid"] . ' entry: ' . $atom, LOGGER_DATA); + Logger::log('Notifier entry: ' . $contact["url"] . ' ' . defaults($target_item, 'guid', $target_item['id']) . ' entry: ' . $atom, Logger::DATA); $basepath = implode('/', array_slice(explode('/', $contact['url']), 0, 3)); // perform local delivery if we are on the same site - if (link_compare($basepath, System::baseUrl())) { - $condition = ['nurl' => normalise_link($contact['url']), 'self' => true]; + if (Strings::compareLink($basepath, System::baseUrl())) { + $condition = ['nurl' => Strings::normaliseLink($contact['url']), 'self' => true]; $target_self = DBA::selectFirst('contact', ['uid'], $condition); if (!DBA::isResult($target_self)) { return; @@ -284,7 +296,7 @@ class Delivery extends BaseObject // We never spool failed relay deliveries if ($public_dfrn) { - logger('Relay delivery to ' . $contact["url"] . ' with guid ' . $target_item["guid"] . ' returns ' . $deliver_status); + Logger::log('Relay delivery to ' . $contact["url"] . ' with guid ' . $target_item["guid"] . ' returns ' . $deliver_status); return; } @@ -299,10 +311,10 @@ class Delivery extends BaseObject $deliver_status = DFRN::deliver($owner, $contact, $atom, false, true); } - logger('Delivery to ' . $contact["url"] . ' with guid ' . $target_item["guid"] . ' returns ' . $deliver_status); + Logger::log('Delivery to ' . $contact['url'] . ' with guid ' . defaults($target_item, 'guid', $target_item['id']) . ' returns ' . $deliver_status); if ($deliver_status < 0) { - logger('Delivery failed: queuing message ' . $target_item["guid"] ); + Logger::log('Delivery failed: queuing message ' . defaults($target_item, 'guid', $target_item['id'])); Queue::add($contact['id'], Protocol::DFRN, $atom, false, $target_item['guid']); } @@ -342,7 +354,7 @@ class Delivery extends BaseObject $loc = $contact['addr']; } - logger('Deliver ' . $target_item["guid"] . ' via Diaspora to ' . $loc); + Logger::log('Deliver ' . defaults($target_item, 'guid', $target_item['id']) . ' via Diaspora to ' . $loc); if (Config::get('system', 'dfrn_only') || !Config::get('system', 'diaspora_enabled')) { return; @@ -358,32 +370,32 @@ class Delivery extends BaseObject if (!$contact['pubkey'] && !$public_message) { return; } - if (($target_item['deleted']) && (($target_item['uri'] === $target_item['parent-uri']) || $followup)) { + if ($cmd == self::RELOCATION) { + Diaspora::sendAccountMigration($owner, $contact, $owner['uid']); + return; + } elseif ($target_item['deleted'] && (($target_item['uri'] === $target_item['parent-uri']) || $followup)) { // top-level retraction - logger('diaspora retract: ' . $loc); + Logger::log('diaspora retract: ' . $loc); Diaspora::sendRetraction($target_item, $owner, $contact, $public_message); return; - } elseif ($cmd == self::RELOCATION) { - Diaspora::sendAccountMigration($owner, $contact, $owner['uid']); - return; } elseif ($followup) { // send comments and likes to owner to relay - logger('diaspora followup: ' . $loc); + Logger::log('diaspora followup: ' . $loc); Diaspora::sendFollowup($target_item, $owner, $contact, $public_message); return; } elseif ($target_item['uri'] !== $target_item['parent-uri']) { // we are the relay - send comments, likes and relayable_retractions to our conversants - logger('diaspora relay: ' . $loc); + Logger::log('diaspora relay: ' . $loc); Diaspora::sendRelay($target_item, $owner, $contact, $public_message); return; } elseif ($top_level && !$walltowall) { // currently no workable solution for sending walltowall - logger('diaspora status: ' . $loc); + Logger::log('diaspora status: ' . $loc); Diaspora::sendStatus($target_item, $owner, $contact, $public_message); return; } - logger('Unknown mode ' . $cmd . ' for ' . $loc); + Logger::log('Unknown mode ' . $cmd . ' for ' . $loc); } /** @@ -415,7 +427,7 @@ class Delivery extends BaseObject return; } - logger('Deliver ' . $target_item["guid"] . ' via mail to ' . $contact['addr']); + Logger::log('Deliver ' . $target_item["guid"] . ' via mail to ' . $contact['addr']); $reply_to = ''; $mailacct = DBA::selectFirst('mailacct', ['reply_to'], ['uid' => $owner['uid']]);