Issue 11853/11867: Fix reshare of public posts

This commit is contained in:
Michael 2022-08-27 21:22:49 +00:00
parent 1e4e7d5b58
commit 2173fb38e0
5 changed files with 24 additions and 27 deletions

View File

@ -68,7 +68,7 @@ class Database
protected $connection; protected $connection;
protected $driver = ''; protected $driver = '';
protected $pdo_emulate_prepares = false; protected $pdo_emulate_prepares = false;
private $error = false; private $error = '';
private $errorno = 0; private $errorno = 0;
private $affected_rows = 0; private $affected_rows = 0;
protected $in_transaction = false; protected $in_transaction = false;
@ -558,7 +558,7 @@ class Database
if (count($args) == 0) { if (count($args) == 0) {
if (!$retval = $this->connection->query($this->replaceParameters($sql, $args))) { if (!$retval = $this->connection->query($this->replaceParameters($sql, $args))) {
$errorInfo = $this->connection->errorInfo(); $errorInfo = $this->connection->errorInfo();
$this->error = $errorInfo[2]; $this->error = (string)$errorInfo[2];
$this->errorno = (int)$errorInfo[1]; $this->errorno = (int)$errorInfo[1];
$retval = false; $retval = false;
$is_error = true; $is_error = true;
@ -571,7 +571,7 @@ class Database
/** @var $stmt mysqli_stmt|PDOStatement */ /** @var $stmt mysqli_stmt|PDOStatement */
if (!$stmt = $this->connection->prepare($sql)) { if (!$stmt = $this->connection->prepare($sql)) {
$errorInfo = $this->connection->errorInfo(); $errorInfo = $this->connection->errorInfo();
$this->error = $errorInfo[2]; $this->error = (string)$errorInfo[2];
$this->errorno = (int)$errorInfo[1]; $this->errorno = (int)$errorInfo[1];
$retval = false; $retval = false;
$is_error = true; $is_error = true;
@ -591,7 +591,7 @@ class Database
if (!$stmt->execute()) { if (!$stmt->execute()) {
$errorInfo = $stmt->errorInfo(); $errorInfo = $stmt->errorInfo();
$this->error = $errorInfo[2]; $this->error = (string)$errorInfo[2];
$this->errorno = (int)$errorInfo[1]; $this->errorno = (int)$errorInfo[1];
$retval = false; $retval = false;
$is_error = true; $is_error = true;
@ -610,8 +610,8 @@ class Database
if (!$can_be_prepared || (count($args) == 0)) { if (!$can_be_prepared || (count($args) == 0)) {
$retval = $this->connection->query($this->replaceParameters($sql, $args)); $retval = $this->connection->query($this->replaceParameters($sql, $args));
if ($this->connection->errno) { if ($this->connection->errno) {
$this->error = $this->connection->error; $this->error = (string)$this->connection->error;
$this->errorno = $this->connection->errno; $this->errorno = (int)$this->connection->errno;
$retval = false; $retval = false;
$is_error = true; $is_error = true;
} else { } else {
@ -627,8 +627,8 @@ class Database
$stmt = $this->connection->stmt_init(); $stmt = $this->connection->stmt_init();
if (!$stmt->prepare($sql)) { if (!$stmt->prepare($sql)) {
$this->error = $stmt->error; $this->error = (string)$stmt->error;
$this->errorno = $stmt->errno; $this->errorno = (int)$stmt->errno;
$retval = false; $retval = false;
$is_error = true; $is_error = true;
break; break;
@ -658,8 +658,8 @@ class Database
} }
if (!$stmt->execute()) { if (!$stmt->execute()) {
$this->error = $this->connection->error; $this->error = (string)$this->connection->error;
$this->errorno = $this->connection->errno; $this->errorno = (int)$this->connection->errno;
$retval = false; $retval = false;
$is_error = true; $is_error = true;
} else { } else {
@ -726,7 +726,7 @@ class Database
} }
} }
$this->error = $error; $this->error = (string)$error;
$this->errorno = (int)$errorno; $this->errorno = (int)$errorno;
} }

View File

@ -24,6 +24,7 @@ namespace Friendica\Model;
use Friendica\Core\Logger; use Friendica\Core\Logger;
use Friendica\Core\Protocol; use Friendica\Core\Protocol;
use Friendica\Database\DBA; use Friendica\Database\DBA;
use Friendica\DI;
use Friendica\Network\Probe; use Friendica\Network\Probe;
use Friendica\Util\DateTimeFormat; use Friendica\Util\DateTimeFormat;
use Friendica\Util\Strings; use Friendica\Util\Strings;
@ -125,6 +126,7 @@ class FContact
$condition = ['url' => $arr['url'], 'network' => $arr['network']]; $condition = ['url' => $arr['url'], 'network' => $arr['network']];
$fields = DI::dbaDefinition()->truncateFieldsForTable('fcontact', $fields);
DBA::update('fcontact', $fields, $condition, true); DBA::update('fcontact', $fields, $condition, true);
} }

View File

@ -33,7 +33,6 @@ use Friendica\Model\Tag;
use Friendica\Core\Worker; use Friendica\Core\Worker;
use Friendica\Database\DBA; use Friendica\Database\DBA;
use Friendica\DI; use Friendica\DI;
use Friendica\Model\Post;
use Friendica\Protocol\Activity; use Friendica\Protocol\Activity;
use Friendica\Protocol\ActivityPub; use Friendica\Protocol\ActivityPub;
use Friendica\Protocol\Diaspora; use Friendica\Protocol\Diaspora;
@ -2545,7 +2544,7 @@ class Item
} }
// Retrieve the current logged in user's public contact // Retrieve the current logged in user's public contact
$author_id = Contact::getIdForURL($owner['url']); $author_id = Contact::getPublicIdByUserId($uid);
if (empty($author_id)) { if (empty($author_id)) {
Logger::info('Empty public contact'); Logger::info('Empty public contact');
return false; return false;
@ -2652,7 +2651,7 @@ class Item
$new_item = [ $new_item = [
'guid' => System::createUUID(), 'guid' => System::createUUID(),
'uri' => self::newURI(), 'uri' => self::newURI(),
'uid' => $item['uid'], 'uid' => $uid,
'contact-id' => $owner['id'], 'contact-id' => $owner['id'],
'wall' => $item['wall'], 'wall' => $item['wall'],
'origin' => 1, 'origin' => 1,
@ -2680,17 +2679,13 @@ class Item
$new_item['diaspora_signed_text'] = json_encode($signed); $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 // If the parent item isn't visible then set it to visible
// @todo Check if this is still needed
if (!$item['visible']) { if (!$item['visible']) {
self::update(['visible' => true], ['id' => $item['id']]); self::update(['visible' => true], ['id' => $item['id']]);
} }
$new_item['id'] = $new_item_id;
Hook::callAll('post_local_end', $new_item);
return true; return true;
} }

View File

@ -51,9 +51,9 @@ class Activity extends BaseModule
$itemId = $this->parameters['id']; $itemId = $this->parameters['id'];
if (in_array($verb, ['announce', 'unannounce'])) { 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) { if ($item['network'] == Protocol::DIASPORA) {
Diaspora::performReshare($item['uri-id'], $item['uid']); Diaspora::performReshare($item['uri-id'], local_user());
} }
} }

View File

@ -228,7 +228,7 @@ class Processor
{ {
$item = Post::selectFirst(['uri', 'uri-id', 'thr-parent', 'gravity', 'post-type', 'private'], ['uri' => $activity['id']]); $item = Post::selectFirst(['uri', 'uri-id', 'thr-parent', 'gravity', 'post-type', 'private'], ['uri' => $activity['id']]);
if (!DBA::isResult($item)) { 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); $item = self::createItem($activity, false);
if (empty($item)) { if (empty($item)) {
Queue::remove($activity); Queue::remove($activity);