From 87aa9360a313f21700c07a7d4ce866fe581d661b Mon Sep 17 00:00:00 2001 From: Hugo Sales Date: Tue, 21 Dec 2021 12:10:08 +0000 Subject: [PATCH] [CORE][ActorController] Refactor actor related controllers (Actor, Subscribers, Subscriptions) to remove duplicated code --- src/Controller/Actor.php | 48 ++++++++--------- src/Controller/Subscribers.php | 58 ++++++++------------- src/Controller/Subscriptions.php | 58 ++++++++------------- src/Core/Controller/ActorController.php | 68 +++++++++++++++++++++++++ 4 files changed, 132 insertions(+), 100 deletions(-) create mode 100644 src/Core/Controller/ActorController.php diff --git a/src/Controller/Actor.php b/src/Controller/Actor.php index 2bc0c658ff..07ac511f2a 100644 --- a/src/Controller/Actor.php +++ b/src/Controller/Actor.php @@ -23,7 +23,8 @@ declare(strict_types = 1); namespace App\Controller; -use App\Core\Controller; +use App\Core\Cache; +use App\Core\Controller\ActorController; use App\Core\DB\DB; use App\Core\Router\Router; use Symfony\Component\HttpFoundation\RedirectResponse; @@ -31,35 +32,30 @@ use function App\Core\I18n\_m; use App\Util\Exception\ClientException; use Symfony\Component\HttpFoundation\Request; -class Actor extends Controller +class Actor extends ActorController { - /** - * Generic function that handles getting a representation for an actor from id - */ - private function ActorById(int $id, callable $handle) + + public function actorViewId(Request $request, int $id) { - $actor = DB::findOneBy('actor', ['id' => $id]); - if ($actor->getIsLocal()) { - return new RedirectResponse(Router::url('actor_view_nickname', ['nickname' => $actor->getNickname()])); - } - if (empty($actor)) { - throw new ClientException(_m('No such actor.'), 404); - } else { - return $handle($actor); - } + return $this->handleActorById( + $id, + fn ($actor) => [ + '_template' => 'actor/view.html.twig', + 'actor' => $actor + ] + ); } - /** - * Generic function that handles getting a representation for an actor from nickname - */ - private function ActorByNickname(string $nickname, callable $handle) + + public function actorViewNickname(Request $request, string $nickname) { - $user = DB::findOneBy('local_user', ['nickname' => $nickname]); - $actor = DB::findOneBy('actor', ['id' => $user->getId()]); - if (empty($actor)) { - throw new ClientException(_m('No such actor.'), 404); - } else { - return $handle($actor); - } + return $this->handleActorByNickname( + $nickname, + fn ($actor) => [ + '_template' => 'actor/view.html.twig', + 'actor' => $actor, + 'notes' => \App\Entity\Note::getAllNotesByActor($actor) + ] + ); } /** diff --git a/src/Controller/Subscribers.php b/src/Controller/Subscribers.php index 65e892c570..fe97589f10 100644 --- a/src/Controller/Subscribers.php +++ b/src/Controller/Subscribers.php @@ -23,49 +23,33 @@ declare(strict_types = 1); namespace App\Controller; -use App\Core\Controller; -use App\Core\DB\DB; -use function App\Core\I18n\_m; -use App\Util\Exception\ClientException; +use App\Core\Controller\ActorController; use Symfony\Component\HttpFoundation\Request; -class Subscribers extends Controller +/** + * Collection of an actor's subscribers + */ +class Subscribers extends ActorController { - /** - * Generic function that handles getting a representation for an actor from id - */ - private function ActorById(int $id, callable $handle) + public function subscribersByActorId(Request $request, int $id) { - $actor = DB::findOneBy('actor', ['id' => $id]); - if (empty($actor)) { - throw new ClientException(_m('No such actor.'), 404); - } else { - return $handle($actor); - } - } - /** - * Generic function that handles getting a representation for an actor from nickname - */ - private function ActorByNickname(string $nickname, callable $handle) - { - $user = DB::findOneBy('local_user', ['nickname' => $nickname]); - $actor = DB::findOneBy('actor', ['id' => $user->getId()]); - if (empty($actor)) { - throw new ClientException(_m('No such actor.'), 404); - } else { - return $handle($actor); - } + return $this->handleActorById( + $id, + fn ($actor) => [ + '_template' => 'subscribers/view.html.twig', + 'actor' => $actor, + ], + ); } - /** - * Collection of an actor's subscribers - */ - public function ActorShowId(Request $request, int $id) + public function subscribersByActorNickname(Request $request, string $nickname) { - return $this->ActorById($id, fn ($actor) => ['_template' => 'subscribers/view.html.twig', 'actor' => $actor]); - } - public function ActorShowNickname(Request $request, string $nickname) - { - return $this->ActorByNickname($nickname, fn ($actor) => ['_template' => 'subscribers/view.html.twig', 'actor' => $actor]); + return $this->handleActorByNickname( + $nickname, + fn ($actor) => [ + '_template' => 'subscribers/view.html.twig', + 'actor' => $actor, + ], + ); } } diff --git a/src/Controller/Subscriptions.php b/src/Controller/Subscriptions.php index ea4388bba1..ed9f1cc93a 100644 --- a/src/Controller/Subscriptions.php +++ b/src/Controller/Subscriptions.php @@ -23,49 +23,33 @@ declare(strict_types = 1); namespace App\Controller; -use App\Core\Controller; -use App\Core\DB\DB; -use function App\Core\I18n\_m; -use App\Util\Exception\ClientException; +use App\Core\Controller\ActorController; use Symfony\Component\HttpFoundation\Request; -class Subscriptions extends Controller +/** + * Collection of an actor's subscriptions + */ +class Subscriptions extends ActorController { - /** - * Generic function that handles getting a representation for an actor from id - */ - private function ActorById(int $id, callable $handle) + public function subscriptionsByActorId(Request $request, int $id) { - $actor = DB::findOneBy('actor', ['id' => $id]); - if (empty($actor)) { - throw new ClientException(_m('No such actor.'), 404); - } else { - return $handle($actor); - } - } - /** - * Generic function that handles getting a representation for an actor from nickname - */ - private function ActorByNickname(string $nickname, callable $handle) - { - $user = DB::findOneBy('local_user', ['nickname' => $nickname]); - $actor = DB::findOneBy('actor', ['id' => $user->getId()]); - if (empty($actor)) { - throw new ClientException(_m('No such actor.'), 404); - } else { - return $handle($actor); - } + return $this->handleActorById( + $id, + fn ($actor) => [ + '_template' => 'subscriptions/view.html.twig', + 'actor' => $actor, + ], + ); } - /** - * Collection of an actor's subscriptions - */ - public function ActorShowId(Request $request, int $id) + public function subscriptionsByActorNickname(Request $request, string $nickname) { - return $this->ActorById($id, fn ($actor) => ['_template' => 'subscriptions/view.html.twig', 'actor' => $actor]); - } - public function ActorShowNickname(Request $request, string $nickname) - { - return $this->ActorByNickname($nickname, fn ($actor) => ['_template' => 'subscriptions/view.html.twig', 'actor' => $actor]); + return $this->handleActorByNickname( + $nickname, + fn ($actor) => [ + '_template' => 'subscriptions/view.html.twig', + 'actor' => $actor, + ], + ); } } diff --git a/src/Core/Controller/ActorController.php b/src/Core/Controller/ActorController.php new file mode 100644 index 0000000000..fb3356264c --- /dev/null +++ b/src/Core/Controller/ActorController.php @@ -0,0 +1,68 @@ +. +// }}} + +/** + * Base class for feed controllers + * + * @package GNUsocial + * @category Controller + * + * @author Hugo Sales + * @copyright 2021 Free Software Foundation, Inc http://www.fsf.org + * @license https://www.gnu.org/licenses/agpl.html GNU AGPL v3 or later + */ + +namespace App\Core\Controller; + +use App\Core\Controller; + +abstract class ActorController extends Controller +{ + /** + * Generic function that handles getting a representation for an actor from id + */ + protected function handleActorById(int $id, callable $handle) + { + $actor = DB::findOneBy('actor', ['id' => $id]); + if ($actor->getIsLocal()) { + return new RedirectResponse($actor->getUrl()); + } + if (empty($actor)) { + throw new ClientException(_m('No such actor.'), 404); + } else { + return $handle($actor); + } + } + + /** + * Generic function that handles getting a representation for an actor from nickname + */ + protected function handleActorByNickname(string $nickname, callable $handle) + { + $user = DB::findOneBy('local_user', ['nickname' => $nickname]); + $actor = DB::findOneBy('actor', ['id' => $user->getId()]); + if (empty($actor)) { + throw new ClientException(_m('No such actor.'), 404); + } else { + return $handle($actor); + } + } +}