From 7d05fc53553c4fe369f01768aef420961e57fda3 Mon Sep 17 00:00:00 2001 From: Daniel Wilkowski Date: Tue, 26 Sep 2023 17:20:25 +0200 Subject: [PATCH] Clean --- app/Http/Controllers/HomeController.php | 154 ++++-------------- app/Http/Resources/MicroblogCollection.php | 3 +- app/Models/Reputation.php | 12 +- .../Criteria/Forum/SkipHiddenCategories.php | 11 +- .../Eloquent/ReputationRepository.php | 4 +- resources/views/home.twig | 13 +- 6 files changed, 52 insertions(+), 145 deletions(-) diff --git a/app/Http/Controllers/HomeController.php b/app/Http/Controllers/HomeController.php index 109721baf1..2889fd8dc0 100644 --- a/app/Http/Controllers/HomeController.php +++ b/app/Http/Controllers/HomeController.php @@ -8,175 +8,83 @@ use Coyote\Http\Resources\MicroblogCollection; use Coyote\Microblog; use Coyote\Repositories\Contracts\ActivityRepositoryInterface as ActivityRepository; -use Coyote\Repositories\Contracts\MicroblogRepositoryInterface as MicroblogRepository; use Coyote\Repositories\Contracts\ReputationRepositoryInterface as ReputationRepository; use Coyote\Repositories\Contracts\TopicRepositoryInterface as TopicRepository; -use Coyote\Repositories\Contracts\WikiRepositoryInterface as WikiRepository; +use Coyote\Repositories\Criteria\Forum\OnlyThoseWithAccess as OnlyThoseForumsWithAccess; use Coyote\Repositories\Criteria\Forum\SkipHiddenCategories; use Coyote\Repositories\Criteria\Topic\OnlyThoseWithAccess as OnlyThoseTopicsWithAccess; -use Coyote\Repositories\Criteria\Forum\OnlyThoseWithAccess as OnlyThoseForumsWithAccess; use Coyote\Services\Flags; use Coyote\Services\Microblogs\Builder; use Coyote\Services\Session\Renderer; use Coyote\Services\Widgets\Patronage; use Coyote\Services\Widgets\WhatsNew; +use Illuminate\Contracts\Cache; +use Illuminate\View\View; class HomeController extends Controller { - /** - * @var MicroblogRepository - */ - protected $microblog; - - /** - * @var ReputationRepository - */ - protected $reputation; - - /** - * @var ActivityRepository - */ - protected $activity; - - /** - * @var TopicRepository - */ - protected $topic; - - /** - * @var WikiRepository - */ - protected $wiki; - - /** - * @param MicroblogRepository $microblog - * @param ReputationRepository $reputation - * @param ActivityRepository $activity - * @param TopicRepository $topic - * @param WikiRepository $wiki - */ public function __construct( - MicroblogRepository $microblog, - ReputationRepository $reputation, - ActivityRepository $activity, - TopicRepository $topic, - WikiRepository $wiki - ) { + private ReputationRepository $reputation, + private ActivityRepository $activity, + private TopicRepository $topic, + ) + { parent::__construct(); - - $this->microblog = $microblog; - $this->reputation = $reputation; - $this->activity = $activity; - $this->topic = $topic; - $this->wiki = $wiki; } - /** - * @return \Illuminate\View\View - */ - public function index() + public function index(): View { - $result = []; - $reflection = new \ReflectionClass($this); - - $cache = $this->getCacheFactory(); - + $cache = app(Cache\Repository::class); $this->topic->pushCriteria(new OnlyThoseTopicsWithAccess()); $this->topic->pushCriteria(new SkipHiddenCategories($this->userId)); - - foreach ($reflection->getMethods(\ReflectionMethod::IS_PRIVATE) as $method) { - $method = $method->name; - $snake = snake_case($method); - - if (substr($snake, 0, 3) === 'get') { - $name = substr($snake, 4); - - if (in_array($name, ['reputation'])) { - $result[$name] = $cache->remember('homepage:' . $name, 30 * 60, function () use ($method) { - return $this->$method(); - }); - } else { - $result[$name] = $this->$method(); - } - } - } - - return $this->view('home', $result) + return $this->view('home', [ + 'flags' => $this->flags(), + 'microblogs' => $this->getMicroblogs(), + 'interesting' => $this->topic->interesting(), + 'newest' => $this->topic->newest(), + 'viewers' => $this->getViewers(), + 'activities' => $this->getActivities(), + 'reputation' => $cache->remember('homepage:reputation', 30 * 60, fn() => [ + 'month' => $this->reputation->monthly(), + 'year' => $this->reputation->yearly(), + 'total' => $this->reputation->total() + ]) + ]) ->with('settings', $this->getSettings()) - ->with('flags', $this->flags()) ->with('whats_new', resolve(WhatsNew::class)->render()) ->with('patronage', resolve(Patronage::class)->render()); } - /** - * @return array - */ - private function getReputation() - { - return [ - 'month' => $this->reputation->monthly(), - 'year' => $this->reputation->yearly(), - 'total' => $this->reputation->total() - ]; - } - - /** - * @return array - */ - private function getMicroblogs() + private function getMicroblogs(): array { /** @var Builder $builder */ $builder = app(Builder::class); - $microblogs = $builder->orderByScore()->popular(); - MicroblogResource::withoutWrapping(); - return (new MicroblogCollection($microblogs))->resolve($this->request); } - /** - * @return mixed - */ - private function getNewest() - { - return $this->topic->newest(); - } - - /** - * @return mixed - */ - private function getInteresting() - { - return $this->topic->interesting(); - } - - /** - * @return array - */ - private function getActivities() + private function getActivities(): array { $this->activity->pushCriteria(new OnlyThoseForumsWithAccess($this->auth)); $this->activity->pushCriteria(new SkipHiddenCategories($this->userId)); - $result = $this->activity->latest(20); - return ActivityResource::collection($result)->toArray($this->request); } - /** - * @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View - */ - private function getViewers() + private function getViewers(): View { /** @var Renderer $viewers */ $viewers = app(Renderer::class); return $viewers->render(); } - private function flags() + private function flags(): array { - $flags = $flags = resolve(Flags::class)->fromModels([Microblog::class])->permission('microblog-delete')->get(); + $flags = app(Flags::class) + ->fromModels([Microblog::class]) + ->permission('microblog-delete') + ->get(); return FlagResource::collection($flags)->toArray($this->request); } diff --git a/app/Http/Resources/MicroblogCollection.php b/app/Http/Resources/MicroblogCollection.php index 6c0b12a819..ed6c29fa67 100644 --- a/app/Http/Resources/MicroblogCollection.php +++ b/app/Http/Resources/MicroblogCollection.php @@ -2,14 +2,13 @@ namespace Coyote\Http\Resources; -use Coyote\Microblog; use Illuminate\Http\Resources\Json\ResourceCollection; use Illuminate\Pagination\AbstractPaginator; class MicroblogCollection extends ResourceCollection { /** - * DO NOT REMOVE! This will preserver keys from being filtered in data + * DO NOT REMOVE! This will preserve keys from being filtered in data * * @var bool */ diff --git a/app/Models/Reputation.php b/app/Models/Reputation.php index fd30c7b444..383f39bfe7 100644 --- a/app/Models/Reputation.php +++ b/app/Models/Reputation.php @@ -16,15 +16,15 @@ class Reputation extends Model const WIKI_RATE = 8; const GUIDE = 9; - const CHINESE = 1; + const CHINESE = 1; const USER_MENTION = 10; const VOTE = 50; const PROFILE_LINK = 50; - const SIG_LINK = 50; - const CREATE_TAGS = 300; - const SHORT_TITLE = 1000; - const NO_ADS = 10000; - const EDIT_POST = 10000; + const SIG_LINK = 50; + const CREATE_TAGS = 300; + const SHORT_TITLE = 1000; + const NO_ADS = 10000; + const EDIT_POST = 10000; /** * The attributes that are mass assignable. diff --git a/app/Repositories/Criteria/Forum/SkipHiddenCategories.php b/app/Repositories/Criteria/Forum/SkipHiddenCategories.php index 4b7fea326b..2be6c9e363 100644 --- a/app/Repositories/Criteria/Forum/SkipHiddenCategories.php +++ b/app/Repositories/Criteria/Forum/SkipHiddenCategories.php @@ -8,17 +8,8 @@ class SkipHiddenCategories extends Criteria { - /** - * @var int|null - */ - protected $userId; - - /** - * @param int|null $userId - */ - public function __construct(?int $userId) + public function __construct(private ?int $userId) { - $this->userId = $userId; } /** diff --git a/app/Repositories/Eloquent/ReputationRepository.php b/app/Repositories/Eloquent/ReputationRepository.php index 5288fbd85f..474826534c 100644 --- a/app/Repositories/Eloquent/ReputationRepository.php +++ b/app/Repositories/Eloquent/ReputationRepository.php @@ -3,9 +3,9 @@ namespace Coyote\Repositories\Eloquent; use Carbon\Carbon; -use Coyote\User; use Coyote\Repositories\Contracts\ReputationRepositoryInterface; use Coyote\Reputation\Type; +use Coyote\User; class ReputationRepository extends Repository implements ReputationRepositoryInterface { @@ -14,7 +14,7 @@ class ReputationRepository extends Repository implements ReputationRepositoryInt */ public function model() { - return 'Coyote\Reputation'; + return \Coyote\Reputation::class; } /** diff --git a/resources/views/home.twig b/resources/views/home.twig index 6a9316489c..b361b74656 100644 --- a/resources/views/home.twig +++ b/resources/views/home.twig @@ -141,12 +141,21 @@
- {{ item.name }} + + + {{ item.name }} + +
- {{ item.reputation|number_format(0, '', ' ') }} {{ declination(user.reputation, ['punkt', 'punkty', 'punktów'], true) }} + + {{ item.reputation|number_format(0, '', ' ') }} + + {{ declination(user.reputation, ['punkt', 'punkty', 'punktów'], true) }} + +