From 3b8a3e953dbf52b7f355de2e487f8c3cb17492dd Mon Sep 17 00:00:00 2001 From: Hugo Sales Date: Wed, 8 Dec 2021 10:20:37 +0000 Subject: [PATCH] [CONTROLLER][FeedController] Make post processing happen more automatically, reducing noise in individual controllers. Now it's enough to simply extends App\Core\Controller\FeedController, to implement a feed --- components/Search/Controller/Search.php | 4 ++-- plugins/Directory/Controller/Directory.php | 8 ++++---- plugins/Favourite/Controller/Favourite.php | 8 ++++---- src/Controller/Feeds.php | 12 ++++++------ src/Core/Controller.php | 10 ++++++++++ src/Core/Controller/FeedController.php | 2 +- 6 files changed, 27 insertions(+), 17 deletions(-) diff --git a/components/Search/Controller/Search.php b/components/Search/Controller/Search.php index 89312f6b63..ec99d2015c 100644 --- a/components/Search/Controller/Search.php +++ b/components/Search/Controller/Search.php @@ -56,12 +56,12 @@ class Search extends FeedController $actors = $actor_qb->getQuery()->execute(); } - return $this->process_feed([ + return [ '_template' => 'search/show.html.twig', 'query' => $q, 'notes' => $notes, 'actors' => $actors, 'page' => 1, // TODO paginate - ]); + ]; } } diff --git a/plugins/Directory/Controller/Directory.php b/plugins/Directory/Controller/Directory.php index ded8c58ed0..6edead9d59 100644 --- a/plugins/Directory/Controller/Directory.php +++ b/plugins/Directory/Controller/Directory.php @@ -36,10 +36,10 @@ class Directory extends FeedController */ public function actors(Request $request): array { - return $this->process_feed([ + return [ '_template' => 'directory/actors.html.twig', 'actors' => DB::dql('select a from actor a order by a.nickname ASC'), - ]); + ]; } /** @@ -49,9 +49,9 @@ class Directory extends FeedController */ public function groups(Request $request): array { - return $this->process_feed([ + return [ '_template' => 'directory/groups.html.twig', 'groups' => DB::dql('select g from group g order by g.nickname ASC'), - ]); + ]; } } diff --git a/plugins/Favourite/Controller/Favourite.php b/plugins/Favourite/Controller/Favourite.php index 0ea6eb4042..13f537fb2e 100644 --- a/plugins/Favourite/Controller/Favourite.php +++ b/plugins/Favourite/Controller/Favourite.php @@ -175,11 +175,11 @@ class Favourite extends FeedController ['id' => $id], ); - return $this->process_feed([ + return [ '_template' => 'feeds/feed.html.twig', 'page_title' => 'Favourites feed.', 'notes' => $notes, - ]); + ]; } public function favouritesByActorNickname(Request $request, string $nickname) @@ -208,11 +208,11 @@ class Favourite extends FeedController ['id' => $id], ); - return $this->process_feed([ + return [ '_template' => 'feeds/feed.html.twig', 'page_title' => 'Reverse favourites feed.', 'notes' => $notes, - ]); + ]; } public function reverseFavouritesByActorNickname(Request $request, string $nickname) diff --git a/src/Controller/Feeds.php b/src/Controller/Feeds.php index c2d97f97dc..d57e48e014 100644 --- a/src/Controller/Feeds.php +++ b/src/Controller/Feeds.php @@ -55,11 +55,11 @@ class Feeds extends FeedController public function public(Request $request) { $notes = Note::getAllNotes($this->instance_scope); - return $this->process_feed([ + return [ '_template' => 'feeds/feed.html.twig', 'page_title' => 'Public feed', 'notes' => $notes, - ]); + ]; } public function home(Request $request, string $nickname) @@ -97,20 +97,20 @@ class Feeds extends FeedController END; $notes = DB::sql($query, ['target_actor_id' => $target->getId()]); - return $this->process_feed([ + return [ '_template' => 'feeds/feed.html.twig', 'page_title' => 'Home feed', 'notes' => $notes, - ]); + ]; } public function network(Request $request) { $notes = Note::getAllNotes($this->public_scope); - return $this->process_feed([ + return [ '_template' => 'feeds/feed.html.twig', 'page_title' => 'Network feed', 'notes' => $notes, - ]); + ]; } } diff --git a/src/Core/Controller.php b/src/Core/Controller.php index bb793043ad..fa80cef88b 100644 --- a/src/Core/Controller.php +++ b/src/Core/Controller.php @@ -33,6 +33,7 @@ declare(strict_types = 1); namespace App\Core; +use App\Core\Controller\FeedController; use function App\Core\I18n\_m; use App\Util\Common; use App\Util\Exception\ClientException; @@ -130,6 +131,15 @@ abstract class Controller extends AbstractController implements EventSubscriberI Event::handle('OverrideTemplate', [$this->vars, &$template]); // Allow plugins to replace the template used for anything unset($this->vars['_template'], $response['_template']); + $controller = $request->get('_controller'); + if (\is_array($controller)) { + $controller = $controller[0]; + } + + if (is_subclass_of($controller, FeedController::class)) { + $this->vars = FeedController::post_process($this->vars); + } + // Respond in the most preferred acceptable content type $route = $request->get('_route'); $accept = $request->getAcceptableContentTypes() ?: ['text/html']; diff --git a/src/Core/Controller/FeedController.php b/src/Core/Controller/FeedController.php index 0bfbcabbfd..eab0ca6029 100644 --- a/src/Core/Controller/FeedController.php +++ b/src/Core/Controller/FeedController.php @@ -38,7 +38,7 @@ use App\Util\Common; abstract class FeedController extends Controller { - protected function process_feed(array $result) + public static function post_process(array $result) { $actor = Common::actor();