From 3c965aa1ec11755c3179a1679bb4b3f742b50380 Mon Sep 17 00:00:00 2001 From: Brock H Caldwell Date: Mon, 19 May 2025 16:16:54 -0500 Subject: [PATCH] fix: refactors getting user's media preferences --- .../Controller/Web/PreferencesController.php | 27 ++---------------- src/User/Framework/Entity/User.php | 12 ++++++-- templates/user/preferences.html.twig | 28 +++++++++---------- 3 files changed, 26 insertions(+), 41 deletions(-) diff --git a/src/User/Framework/Controller/Web/PreferencesController.php b/src/User/Framework/Controller/Web/PreferencesController.php index 2aca250..fd30aa3 100644 --- a/src/User/Framework/Controller/Web/PreferencesController.php +++ b/src/User/Framework/Controller/Web/PreferencesController.php @@ -31,16 +31,7 @@ class PreferencesController extends AbstractController #[Route('/user/preferences', 'app_user_preferences', methods: ['GET'])] public function mediaPreferences(): Response { - $enabledPreferences = $this->preferencesRepository->findEnabled(); - - if ($this->getUser()->getUserPreferences()->count() !== count($enabledPreferences)) { - $this->setUserPreferences($this->getUser(), $enabledPreferences); - } - - $userPreferences = $this->getUser()->getUserPreferences()->toArray(); - $userPreferences = Map::from($userPreferences) - ->rekey(fn($preference) => $preference->getPreference()->getId()); - + $mediaPreferences = $this->getUser()->getMediaPreferences(); $languages = CountryLanguages::$languages; sort($languages); @@ -50,7 +41,7 @@ class PreferencesController extends AbstractController 'preferences' => $this->preferencesRepository->findEnabled(), 'languages' => $languages, 'providers' => ProviderList::$providers, - 'userPreferences' => $userPreferences->toArray(), + 'mediaPreferences' => $mediaPreferences, ] ); } @@ -86,18 +77,4 @@ class PreferencesController extends AbstractController ] ); } - - private function setUserPreferences(User $user, array $preferences): void - { - foreach ($preferences as $preference) { - if (false === $user->hasUserPreference($preference->getId())) { - $user->addUserPreference((new UserPreference()) - ->setUser($user) - ->setPreference($preference) - ->setPreferenceValue(null) - ); - } - } - $this->preferencesRepository->getEntityManager()->flush(); - } } diff --git a/src/User/Framework/Entity/User.php b/src/User/Framework/Entity/User.php index 20c0f23..b28e1b6 100644 --- a/src/User/Framework/Entity/User.php +++ b/src/User/Framework/Entity/User.php @@ -204,7 +204,7 @@ class User implements UserInterface, PasswordAuthenticatedUserInterface return $this; } - public function getUserPreferenceValues() + public function getUserPreferenceValues(string $type = 'all'): array { return Map::from($this->userPreferences) ->rekey(fn(UserPreference $userPreference) => $userPreference->getPreference()->getId()) @@ -213,7 +213,6 @@ class User implements UserInterface, PasswordAuthenticatedUserInterface return $userPreference->getPreferenceValue(); } foreach ($userPreference->getPreference()->getPreferenceOptions() as $preferenceOption) { -// dd((int) $userPreference->getPreferenceValue(), $preferenceOption->getId(), $preferenceOption->getValue()); if ($preferenceOption->getId() === (int) $userPreference->getPreferenceValue()) { return $preferenceOption->getValue(); } @@ -273,6 +272,15 @@ class User implements UserInterface, PasswordAuthenticatedUserInterface return $this->downloads; } + public function getMediaPreferences() + { + return Map::from($this->userPreferences) + ->rekey(fn(UserPreference $userPreference) => $userPreference->getPreference()->getId()) + ->filter(fn(UserPreference $userPreference) => $userPreference->getPreference()->getType() === 'media') + ->toArray() + ; + } + /** * @return Collection */ diff --git a/templates/user/preferences.html.twig b/templates/user/preferences.html.twig index 0ce17a9..5f54617 100644 --- a/templates/user/preferences.html.twig +++ b/templates/user/preferences.html.twig @@ -8,58 +8,58 @@

Define a set of filters to apply to your media download option results.

- - {% for pref in userPreferences['resolution'].getPreference().getPreferenceOptions() %} + {% for pref in mediaPreferences['resolution'].getPreference().getPreferenceOptions() %} {% endfor %} - - {% for pref in userPreferences['codec'].getPreference().getPreferenceOptions() %} + {% for pref in mediaPreferences['codec'].getPreference().getPreferenceOptions() %} {% endfor %} - {% for provider in providers %} {% endfor %} - {% for language in languages %} {% endfor %}