]> git.mxchange.org Git - friendica.git/commitdiff
Move GET /like/{id} to POST /item/{id}/activity/{verb}
authorHypolite Petovan <hypolite@mrpetovan.com>
Sat, 30 Jan 2021 22:11:54 +0000 (17:11 -0500)
committerHypolite Petovan <hypolite@mrpetovan.com>
Sun, 31 Jan 2021 13:41:04 +0000 (08:41 -0500)
src/Module/Item/Activity.php [new file with mode: 0644]
src/Module/Like.php [deleted file]
static/routes.config.php
view/js/main.js

diff --git a/src/Module/Item/Activity.php b/src/Module/Item/Activity.php
new file mode 100644 (file)
index 0000000..69f5db7
--- /dev/null
@@ -0,0 +1,116 @@
+<?php
+/**
+ * @copyright Copyright (C) 2020, Friendica
+ *
+ * @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\Item;
+
+use Friendica\BaseModule;
+use Friendica\Content\Text\BBCode;
+use Friendica\Core\Protocol;
+use Friendica\Core\System;
+use Friendica\DI;
+use Friendica\Model\Item;
+use Friendica\Core\Session;
+use Friendica\Database\DBA;
+use Friendica\Model\Post;
+use Friendica\Network\HTTPException;
+use Friendica\Util\Strings;
+
+/**
+ * Performs an activity (like, dislike, announce, attendyes, attendno, attendmaybe)
+ * and optionally redirects to a return path
+ */
+class Activity extends BaseModule
+{
+       public static function rawContent(array $parameters = [])
+       {
+               if (!Session::isAuthenticated()) {
+                       throw new HTTPException\ForbiddenException();
+               }
+
+               if (empty($parameters['id']) || empty($parameters['verb'])) {
+                       throw new HTTPException\BadRequestException();
+               }
+
+               $verb = $parameters['verb'];
+               $itemId =  $parameters['id'];
+
+               if (in_array($verb, ['announce', 'unannounce'])) {
+                       $item = Post::selectFirst(['network'], ['id' => $itemId]);
+                       if ($item['network'] == Protocol::DIASPORA) {
+                               self::performDiasporaReshare($itemId);
+                       }
+               }
+
+               if (!Item::performActivity($itemId, $verb, local_user())) {
+                       throw new HTTPException\BadRequestException();
+               }
+
+               // See if we've been passed a return path to redirect to
+               $return_path = $_REQUEST['return'] ?? '';
+               if (!empty($return_path)) {
+                       $rand = '_=' . time();
+                       if (strpos($return_path, '?')) {
+                               $rand = "&$rand";
+                       } else {
+                               $rand = "?$rand";
+                       }
+
+                       DI::baseUrl()->redirect($return_path . $rand);
+               }
+
+               $return = [
+                       'status' => 'ok',
+                       'item_id' => $itemId,
+                       'verb' => $verb,
+                       'state' => 1,
+               ];
+
+               System::jsonExit($return);
+       }
+
+       private static function performDiasporaReshare(int $itemId)
+       {
+               $fields = ['uri-id', 'body', 'title', 'author-name', 'author-link', 'author-avatar', 'guid', 'created', 'plink'];
+               $item = Post::selectFirst($fields, ['id' => $itemId, 'private' => [Item::PUBLIC, Item::UNLISTED]]);
+               if (!DBA::isResult($item) || ($item['body'] == '')) {
+                       return;
+               }
+
+               if (strpos($item['body'], '[/share]') !== false) {
+                       $pos = strpos($item['body'], '[share');
+                       $post = substr($item['body'], $pos);
+               } else {
+                       $post = BBCode::getShareOpeningTag($item['author-name'], $item['author-link'], $item['author-avatar'], $item['plink'], $item['created'], $item['guid']);
+
+                       if (!empty($item['title'])) {
+                               $post .= '[h3]' . $item['title'] . "[/h3]\n";
+                       }
+
+                       $post .= $item['body'];
+                       $post .= '[/share]';
+               }
+               $_REQUEST['body'] = $post;
+               $_REQUEST['profile_uid'] = local_user();
+
+               require_once 'mod/item.php';
+               item_post(DI::app());
+       }
+}
diff --git a/src/Module/Like.php b/src/Module/Like.php
deleted file mode 100644 (file)
index 8d699be..0000000
+++ /dev/null
@@ -1,114 +0,0 @@
-<?php
-/**
- * @copyright Copyright (C) 2020, Friendica
- *
- * @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;
-
-use Friendica\BaseModule;
-use Friendica\Content\Text\BBCode;
-use Friendica\Core\Protocol;
-use Friendica\Core\System;
-use Friendica\DI;
-use Friendica\Model\Item;
-use Friendica\Core\Session;
-use Friendica\Database\DBA;
-use Friendica\Model\Post;
-use Friendica\Network\HTTPException;
-use Friendica\Util\Strings;
-
-/**
- * Performs a like and optionally redirects to a return path
- */
-class Like extends BaseModule
-{
-       public static function rawContent(array $parameters = [])
-       {
-               if (!Session::isAuthenticated()) {
-                       throw new HTTPException\ForbiddenException();
-               }
-
-               $verb = Strings::escapeTags(trim($_GET['verb']));
-
-               if (!$verb) {
-                       $verb = 'like';
-               }
-
-               $app = DI::app();
-
-               // @TODO: Replace with parameter from router
-               $itemId = (($app->argc > 1) ? Strings::escapeTags(trim($app->argv[1])) : 0);
-
-               if (in_array($verb, ['announce', 'unannounce'])) {
-                       $item = Post::selectFirst(['network'], ['id' => $itemId]);
-                       if ($item['network'] == Protocol::DIASPORA) {
-                               self::performDiasporaReshare($itemId);
-                       }
-               }
-
-               if (!Item::performActivity($itemId, $verb, local_user())) {
-                       throw new HTTPException\BadRequestException();
-               }
-
-               // Decide how to return. If we were called with a 'return' argument,
-               // then redirect back to the calling page. If not, just quietly end
-               $returnPath = $_REQUEST['return'] ?? '';
-
-               if (!empty($returnPath)) {
-                       $rand = '_=' . time();
-                       if (strpos($returnPath, '?')) {
-                               $rand = "&$rand";
-                       } else {
-                               $rand = "?$rand";
-                       }
-
-                       DI::baseUrl()->redirect($returnPath . $rand);
-               }
-
-               System::jsonExit(['status' => 'OK']);
-       }
-
-       private static function performDiasporaReshare(int $itemId)
-       {
-               $fields = ['uri-id', 'body', 'title', 'author-name', 'author-link', 'author-avatar', 'guid', 'created', 'plink'];
-               $item = Post::selectFirst($fields, ['id' => $itemId, 'private' => [Item::PUBLIC, Item::UNLISTED]]);
-               if (!DBA::isResult($item) || ($item['body'] == '')) {
-                       return;
-               }
-
-               if (strpos($item['body'], '[/share]') !== false) {
-                       $pos = strpos($item['body'], '[share');
-                       $post = substr($item['body'], $pos);
-               } else {
-                       $post = BBCode::getShareOpeningTag($item['author-name'], $item['author-link'], $item['author-avatar'], $item['plink'], $item['created'], $item['guid']);
-
-                       if (!empty($item['title'])) {
-                               $post .= '[h3]' . $item['title'] . "[/h3]\n";
-                       }
-
-                       $post .= $item['body'];
-                       $post .= '[/share]';
-               }
-               $_REQUEST['body'] = $post;
-               $_REQUEST['profile_uid'] = local_user();
-
-               require_once 'mod/item.php';
-               item_post(DI::app());
-       }
-}
index 5a2ee2ffd1885578f5f01bc5d2b52de42be8e9e4..564b920d61e36a3c033b93b19ea4db83d01f2fc1 100644 (file)
@@ -292,10 +292,10 @@ return [
 
        '/item'            => [
                '/ignore/{id}' => [Module\Item\Ignore::class, [R::GET]],
-               '/{id:\d+}/pin' => [Module\Item\Pin::class,       [        R::POST]],
+               '/{id:\d+}/activity/{verb}' => [Module\Item\Activity::class,    [        R::POST]],
+               '/{id:\d+}/pin'             => [Module\Item\Pin::class,         [        R::POST]],
        ],
 
-       '/like/{item:\d+}'    => [Module\Like::class,            [R::GET]],
        '/localtime'          => [Module\Debug\Localtime::class, [R::GET, R::POST]],
        '/login'              => [Module\Security\Login::class,  [R::GET, R::POST]],
        '/logout'             => [Module\Security\Logout::class, [R::GET, R::POST]],
index 6a8266b7e16f86636b671a1912b184ee73dacbcd..1e051de8357660040b6ebee597bdcb0c78369ac7 100644 (file)
@@ -669,7 +669,7 @@ function doActivityItem(ident, verb, un) {
        unpause();
        $('#like-rotator-' + ident.toString()).show();
        verb = un ? 'un' + verb : verb;
-       $.get('like/' + ident.toString() + '?verb=' + verb, NavUpdate);
+       $.post('item/' + ident.toString() + '/activity/' + verb, NavUpdate);
        liking = 1;
        force_update = true;
        update_item = ident.toString();