From 2173fb38e0d69074e5d1c4cb989f5834badc6019 Mon Sep 17 00:00:00 2001 From: Michael Date: Sat, 27 Aug 2022 21:22:49 +0000 Subject: [PATCH] Issue 11853/11867: Fix reshare of public posts --- src/Database/Database.php | 30 +++++++++++++------------- src/Model/FContact.php | 2 ++ src/Model/Item.php | 13 ++++------- src/Module/Item/Activity.php | 4 ++-- src/Protocol/ActivityPub/Processor.php | 2 +- 5 files changed, 24 insertions(+), 27 deletions(-) diff --git a/src/Database/Database.php b/src/Database/Database.php index cd2803c0fc..fde5bd9f10 100644 --- a/src/Database/Database.php +++ b/src/Database/Database.php @@ -68,7 +68,7 @@ class Database protected $connection; protected $driver = ''; protected $pdo_emulate_prepares = false; - private $error = false; + private $error = ''; private $errorno = 0; private $affected_rows = 0; protected $in_transaction = false; @@ -558,8 +558,8 @@ class Database if (count($args) == 0) { if (!$retval = $this->connection->query($this->replaceParameters($sql, $args))) { $errorInfo = $this->connection->errorInfo(); - $this->error = $errorInfo[2]; - $this->errorno = (int) $errorInfo[1]; + $this->error = (string)$errorInfo[2]; + $this->errorno = (int)$errorInfo[1]; $retval = false; $is_error = true; break; @@ -571,8 +571,8 @@ class Database /** @var $stmt mysqli_stmt|PDOStatement */ if (!$stmt = $this->connection->prepare($sql)) { $errorInfo = $this->connection->errorInfo(); - $this->error = $errorInfo[2]; - $this->errorno = (int) $errorInfo[1]; + $this->error = (string)$errorInfo[2]; + $this->errorno = (int)$errorInfo[1]; $retval = false; $is_error = true; break; @@ -591,8 +591,8 @@ class Database if (!$stmt->execute()) { $errorInfo = $stmt->errorInfo(); - $this->error = $errorInfo[2]; - $this->errorno = (int) $errorInfo[1]; + $this->error = (string)$errorInfo[2]; + $this->errorno = (int)$errorInfo[1]; $retval = false; $is_error = true; } else { @@ -610,8 +610,8 @@ class Database if (!$can_be_prepared || (count($args) == 0)) { $retval = $this->connection->query($this->replaceParameters($sql, $args)); if ($this->connection->errno) { - $this->error = $this->connection->error; - $this->errorno = $this->connection->errno; + $this->error = (string)$this->connection->error; + $this->errorno = (int)$this->connection->errno; $retval = false; $is_error = true; } else { @@ -627,8 +627,8 @@ class Database $stmt = $this->connection->stmt_init(); if (!$stmt->prepare($sql)) { - $this->error = $stmt->error; - $this->errorno = $stmt->errno; + $this->error = (string)$stmt->error; + $this->errorno = (int)$stmt->errno; $retval = false; $is_error = true; break; @@ -658,8 +658,8 @@ class Database } if (!$stmt->execute()) { - $this->error = $this->connection->error; - $this->errorno = $this->connection->errno; + $this->error = (string)$this->connection->error; + $this->errorno = (int)$this->connection->errno; $retval = false; $is_error = true; } else { @@ -726,8 +726,8 @@ class Database } } - $this->error = $error; - $this->errorno = (int) $errorno; + $this->error = (string)$error; + $this->errorno = (int)$errorno; } $this->profiler->stopRecording(); diff --git a/src/Model/FContact.php b/src/Model/FContact.php index 62e609fbee..8bc696a466 100644 --- a/src/Model/FContact.php +++ b/src/Model/FContact.php @@ -24,6 +24,7 @@ namespace Friendica\Model; use Friendica\Core\Logger; use Friendica\Core\Protocol; use Friendica\Database\DBA; +use Friendica\DI; use Friendica\Network\Probe; use Friendica\Util\DateTimeFormat; use Friendica\Util\Strings; @@ -125,6 +126,7 @@ class FContact $condition = ['url' => $arr['url'], 'network' => $arr['network']]; + $fields = DI::dbaDefinition()->truncateFieldsForTable('fcontact', $fields); DBA::update('fcontact', $fields, $condition, true); } diff --git a/src/Model/Item.php b/src/Model/Item.php index 741594f228..598fca8407 100644 --- a/src/Model/Item.php +++ b/src/Model/Item.php @@ -33,7 +33,6 @@ use Friendica\Model\Tag; use Friendica\Core\Worker; use Friendica\Database\DBA; use Friendica\DI; -use Friendica\Model\Post; use Friendica\Protocol\Activity; use Friendica\Protocol\ActivityPub; use Friendica\Protocol\Diaspora; @@ -2545,7 +2544,7 @@ class Item } // Retrieve the current logged in user's public contact - $author_id = Contact::getIdForURL($owner['url']); + $author_id = Contact::getPublicIdByUserId($uid); if (empty($author_id)) { Logger::info('Empty public contact'); return false; @@ -2652,7 +2651,7 @@ class Item $new_item = [ 'guid' => System::createUUID(), 'uri' => self::newURI(), - 'uid' => $item['uid'], + 'uid' => $uid, 'contact-id' => $owner['id'], 'wall' => $item['wall'], 'origin' => 1, @@ -2680,17 +2679,13 @@ class Item $new_item['diaspora_signed_text'] = json_encode($signed); } - $new_item_id = self::insert($new_item); + self::insert($new_item, true); // If the parent item isn't visible then set it to visible + // @todo Check if this is still needed if (!$item['visible']) { self::update(['visible' => true], ['id' => $item['id']]); } - - $new_item['id'] = $new_item_id; - - Hook::callAll('post_local_end', $new_item); - return true; } diff --git a/src/Module/Item/Activity.php b/src/Module/Item/Activity.php index 648ebfa08c..9f0b917869 100644 --- a/src/Module/Item/Activity.php +++ b/src/Module/Item/Activity.php @@ -51,9 +51,9 @@ class Activity extends BaseModule $itemId = $this->parameters['id']; if (in_array($verb, ['announce', 'unannounce'])) { - $item = Post::selectFirst(['network', 'uri-id', 'uid'], ['id' => $itemId]); + $item = Post::selectFirst(['network', 'uri-id'], ['id' => $itemId, 'uid' => [local_user(), 0]]); if ($item['network'] == Protocol::DIASPORA) { - Diaspora::performReshare($item['uri-id'], $item['uid']); + Diaspora::performReshare($item['uri-id'], local_user()); } } diff --git a/src/Protocol/ActivityPub/Processor.php b/src/Protocol/ActivityPub/Processor.php index 61f625f597..668b8a5b89 100644 --- a/src/Protocol/ActivityPub/Processor.php +++ b/src/Protocol/ActivityPub/Processor.php @@ -228,7 +228,7 @@ class Processor { $item = Post::selectFirst(['uri', 'uri-id', 'thr-parent', 'gravity', 'post-type', 'private'], ['uri' => $activity['id']]); if (!DBA::isResult($item)) { - Logger::warning('No existing item, item will be created', ['uri' => $activity['id']]); + Logger::notice('No existing item, item will be created', ['uri' => $activity['id']]); $item = self::createItem($activity, false); if (empty($item)) { Queue::remove($activity); -- 2.39.5