diff --git a/mod/share.php b/mod/share.php deleted file mode 100644 index f0a2170b5..000000000 --- a/mod/share.php +++ /dev/null @@ -1,51 +0,0 @@ -. - * - */ - -use Friendica\App; -use Friendica\Content\Text\BBCode; -use Friendica\Core\System; -use Friendica\Database\DBA; -use Friendica\DI; -use Friendica\Model\Item; -use Friendica\Model\Post; - -function share_init(App $a) { - $post_id = ((DI::args()->getArgc() > 1) ? intval(DI::args()->getArgv()[1]) : 0); - - if (!$post_id || !DI::userSession()->getLocalUserId()) { - System::exit(); - } - - $fields = ['private', 'body', 'uri']; - $item = Post::selectFirst($fields, ['id' => $post_id]); - - if (!DBA::isResult($item) || $item['private'] == Item::PRIVATE) { - System::exit(); - } - - $shared = DI::contentItem()->getSharedPost($item, ['uri']); - if (!empty($shared) && empty($shared['comment'])) { - $content = '[share]' . $shared['post']['uri'] . '[/share]'; - } else { - $content = '[share]' . $item['uri'] . '[/share]'; - } - System::httpExit($content); -} diff --git a/src/Module/Post/Share.php b/src/Module/Post/Share.php new file mode 100644 index 000000000..d2a36e32b --- /dev/null +++ b/src/Module/Post/Share.php @@ -0,0 +1,76 @@ +. + * + */ + +namespace Friendica\Module\Post; + +use Friendica\App; +use Friendica\Content; +use Friendica\Core\L10n; +use Friendica\Core\Session\Capability\IHandleUserSessions; +use Friendica\Core\System; +use Friendica\Model\Item; +use Friendica\Model\Post; +use Friendica\Module\Response; +use Friendica\Util\Profiler; +use Psr\Log\LoggerInterface; + +/** + * Generates a share BBCode block for the provided item. + * + * Only used in Ajax calls + */ +class Share extends \Friendica\BaseModule +{ + /** @var IHandleUserSessions */ + private $session; + /** @var Content\Item */ + private $contentItem; + + public function __construct(Content\Item $contentItem, IHandleUserSessions $session, L10n $l10n, App\BaseURL $baseUrl, App\Arguments $args, LoggerInterface $logger, Profiler $profiler, Response $response, array $server, array $parameters = []) + { + parent::__construct($l10n, $baseUrl, $args, $logger, $profiler, $response, $server, $parameters); + + $this->session = $session; + $this->contentItem = $contentItem; + } + + protected function rawContent(array $request = []) + { + $post_id = $this->parameters['post_id']; + if (!$post_id || !$this->session->getLocalUserId()) { + System::httpError(403); + } + + $item = Post::selectFirst(['private', 'body', 'uri'], ['id' => $post_id]); + if (!$item || $item['private'] == Item::PRIVATE) { + System::httpError(404); + } + + $shared = $this->contentItem->getSharedPost($item, ['uri']); + if ($shared && empty($shared['comment'])) { + $content = '[share]' . $shared['post']['uri'] . '[/share]'; + } else { + $content = '[share]' . $item['uri'] . '[/share]'; + } + + System::httpExit($content); + } +} diff --git a/static/routes.config.php b/static/routes.config.php index 85171d2b7..3cb1b47e2 100644 --- a/static/routes.config.php +++ b/static/routes.config.php @@ -534,6 +534,7 @@ return [ '/ping' => [Module\Notifications\Ping::class, [R::GET]], '/post' => [ + '/{post_id}/share' => [Module\Post\Share::class, [R::GET ]], '/{item_id}/tag/add' => [Module\Post\Tag\Add::class, [ R::POST]], '/{item_id}/tag/remove[/{tag_name}]' => [Module\Post\Tag\Remove::class, [R::GET, R::POST]], ], diff --git a/view/templates/jot-header.tpl b/view/templates/jot-header.tpl index 9b47ed56a..a67f9c3f0 100644 --- a/view/templates/jot-header.tpl +++ b/view/templates/jot-header.tpl @@ -141,7 +141,7 @@ function enableOnUser(){ if ($('#jot-popup').length != 0) $('#jot-popup').show(); $('#like-rotator-' + id).show(); - $.get('share/' + id, function(data) { + $.get('post/' + id + '/share', function(data) { if (!editor) $("#profile-jot-text").val(""); initEditor(function(){ addeditortext(data); diff --git a/view/theme/frio/templates/jot-header.tpl b/view/theme/frio/templates/jot-header.tpl index 23aa8663f..25a02b9b6 100644 --- a/view/theme/frio/templates/jot-header.tpl +++ b/view/theme/frio/templates/jot-header.tpl @@ -210,7 +210,7 @@ } function jotShare(id) { - $.get('share/' + id, function(data) { + $.get('post/' + id + '/share', function(data) { // remove the former content of the text input $("#profile-jot-text").val(""); initEditor(function(){ diff --git a/view/theme/smoothly/templates/jot-header.tpl b/view/theme/smoothly/templates/jot-header.tpl index a2be04302..69233b926 100644 --- a/view/theme/smoothly/templates/jot-header.tpl +++ b/view/theme/smoothly/templates/jot-header.tpl @@ -168,13 +168,13 @@ function enableOnUser(){ function jotShare(id) { $('#like-rotator-' + id).show(); - $.get('share/' + id, function(data) { - if (!editor) $("#profile-jot-text").val(""); - initEditor(function(){ - addeditortext(data); - $('#like-rotator-' + id).hide(); - $(window).scrollTop(0); - }); + $.get('post/' + id + '/share', function(data) { + if (!editor) $("#profile-jot-text").val(""); + initEditor(function(){ + addeditortext(data); + $('#like-rotator-' + id).hide(); + $(window).scrollTop(0); + }); }); }