2021-05-15 10:08:47 +00:00
< ? php
/**
2023-01-01 14:36:24 +00:00
* @ copyright Copyright ( C ) 2010 - 2023 , the Friendica project
2021-05-15 10:08:47 +00:00
*
* @ license GNU AGPL version 3 or any later version
*
* This program is free software : you can redistribute it and / or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation , either version 3 of the
* License , or ( at your option ) any later version .
*
* This program is distributed in the hope that it will be useful ,
* but WITHOUT ANY WARRANTY ; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE . See the
* GNU Affero General Public License for more details .
*
* You should have received a copy of the GNU Affero General Public License
* along with this program . If not , see < https :// www . gnu . org / licenses />.
*
*/
namespace Friendica\Module\Api\Mastodon\Statuses ;
use Friendica\Content\ContactSelector ;
use Friendica\Core\Protocol ;
use Friendica\Core\System ;
use Friendica\Database\DBA ;
use Friendica\DI ;
use Friendica\Model\Item ;
use Friendica\Model\Post ;
use Friendica\Module\BaseApi ;
/**
* @ see https :// docs . joinmastodon . org / methods / statuses /
*/
class Unreblog extends BaseApi
{
2021-11-28 12:44:42 +00:00
protected function post ( array $request = [])
2021-05-15 10:08:47 +00:00
{
2021-06-08 12:00:22 +00:00
self :: checkAllowedScope ( self :: SCOPE_WRITE );
2021-05-15 10:08:47 +00:00
$uid = self :: getCurrentUserID ();
2021-11-14 22:19:25 +00:00
if ( empty ( $this -> parameters [ 'id' ])) {
2021-05-15 10:08:47 +00:00
DI :: mstdnError () -> UnprocessableEntity ();
}
2023-06-16 19:31:39 +00:00
$item = Post :: selectOriginalForUser ( $uid , [ 'id' , 'uri-id' , 'network' ], [ 'uri-id' => $this -> parameters [ 'id' ], 'uid' => [ $uid , 0 ]]);
2021-05-15 10:08:47 +00:00
if ( ! DBA :: isResult ( $item )) {
DI :: mstdnError () -> RecordNotFound ();
}
2022-12-13 23:19:19 +00:00
if ( $item [ 'network' ] == Protocol :: DIASPORA ) {
2022-12-13 23:26:58 +00:00
$item = Post :: selectFirstForUser ( $uid , [ 'id' ], [ 'quote-uri-id' => $this -> parameters [ 'id' ], 'body' => '' , 'origin' => true , 'uid' => $uid ]);
2022-12-13 23:19:19 +00:00
if ( empty ( $item [ 'id' ])) {
DI :: mstdnError () -> RecordNotFound ();
}
2023-01-01 14:36:24 +00:00
2022-12-13 23:19:19 +00:00
if ( ! Item :: markForDeletionById ( $item [ 'id' ])) {
DI :: mstdnError () -> RecordNotFound ();
}
} elseif ( ! in_array ( $item [ 'network' ], [ Protocol :: DFRN , Protocol :: ACTIVITYPUB , Protocol :: TWITTER ])) {
2021-05-15 10:08:47 +00:00
DI :: mstdnError () -> UnprocessableEntity ( DI :: l10n () -> t ( " Posts from %s can't be unshared " , ContactSelector :: networkToName ( $item [ 'network' ])));
2022-12-13 23:19:19 +00:00
} else {
Item :: performActivity ( $item [ 'id' ], 'unannounce' , $uid );
2021-05-15 10:08:47 +00:00
}
2023-08-15 19:23:31 +00:00
// @TODO Remove once mstdnStatus()->createFromUriId is fixed so that it returns posts not reshared posts if given an ID to an original post that has been reshared
// Introduced in this PR: https://github.com/friendica/friendica/pull/13175
// Issue tracking the behavior of createFromUriId: https://github.com/friendica/friendica/issues/13350
2023-06-16 19:31:39 +00:00
$isReblog = $item [ 'uri-id' ] != $this -> parameters [ 'id' ];
System :: jsonExit ( DI :: mstdnStatus () -> createFromUriId ( $this -> parameters [ 'id' ], $uid , self :: appSupportsQuotes (), $isReblog ) -> toArray ());
2021-05-15 10:08:47 +00:00
}
}