fix: refactors getting user's media preferences
This commit is contained in:
@@ -31,16 +31,7 @@ class PreferencesController extends AbstractController
|
|||||||
#[Route('/user/preferences', 'app_user_preferences', methods: ['GET'])]
|
#[Route('/user/preferences', 'app_user_preferences', methods: ['GET'])]
|
||||||
public function mediaPreferences(): Response
|
public function mediaPreferences(): Response
|
||||||
{
|
{
|
||||||
$enabledPreferences = $this->preferencesRepository->findEnabled();
|
$mediaPreferences = $this->getUser()->getMediaPreferences();
|
||||||
|
|
||||||
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());
|
|
||||||
|
|
||||||
$languages = CountryLanguages::$languages;
|
$languages = CountryLanguages::$languages;
|
||||||
sort($languages);
|
sort($languages);
|
||||||
|
|
||||||
@@ -50,7 +41,7 @@ class PreferencesController extends AbstractController
|
|||||||
'preferences' => $this->preferencesRepository->findEnabled(),
|
'preferences' => $this->preferencesRepository->findEnabled(),
|
||||||
'languages' => $languages,
|
'languages' => $languages,
|
||||||
'providers' => ProviderList::$providers,
|
'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();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -204,7 +204,7 @@ class User implements UserInterface, PasswordAuthenticatedUserInterface
|
|||||||
return $this;
|
return $this;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getUserPreferenceValues()
|
public function getUserPreferenceValues(string $type = 'all'): array
|
||||||
{
|
{
|
||||||
return Map::from($this->userPreferences)
|
return Map::from($this->userPreferences)
|
||||||
->rekey(fn(UserPreference $userPreference) => $userPreference->getPreference()->getId())
|
->rekey(fn(UserPreference $userPreference) => $userPreference->getPreference()->getId())
|
||||||
@@ -213,7 +213,6 @@ class User implements UserInterface, PasswordAuthenticatedUserInterface
|
|||||||
return $userPreference->getPreferenceValue();
|
return $userPreference->getPreferenceValue();
|
||||||
}
|
}
|
||||||
foreach ($userPreference->getPreference()->getPreferenceOptions() as $preferenceOption) {
|
foreach ($userPreference->getPreference()->getPreferenceOptions() as $preferenceOption) {
|
||||||
// dd((int) $userPreference->getPreferenceValue(), $preferenceOption->getId(), $preferenceOption->getValue());
|
|
||||||
if ($preferenceOption->getId() === (int) $userPreference->getPreferenceValue()) {
|
if ($preferenceOption->getId() === (int) $userPreference->getPreferenceValue()) {
|
||||||
return $preferenceOption->getValue();
|
return $preferenceOption->getValue();
|
||||||
}
|
}
|
||||||
@@ -273,6 +272,15 @@ class User implements UserInterface, PasswordAuthenticatedUserInterface
|
|||||||
return $this->downloads;
|
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<int, Download>
|
* @return Collection<int, Download>
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -8,58 +8,58 @@
|
|||||||
<p class="text-gray-50 mb-2">Define a set of filters to apply to your media download option results.</p>
|
<p class="text-gray-50 mb-2">Define a set of filters to apply to your media download option results.</p>
|
||||||
<form id="media_preferences" class="flex flex-col max-w-64" name="media_preferences" method="post" action="{{ path('app_save_media_preferences') }}">
|
<form id="media_preferences" class="flex flex-col max-w-64" name="media_preferences" method="post" action="{{ path('app_save_media_preferences') }}">
|
||||||
<label class="text-gray-50" for="resolution">Resolution</label>
|
<label class="text-gray-50" for="resolution">Resolution</label>
|
||||||
<select class="p-1.5 rounded-md mb-2" name="resolution" id="resolution" value="{{ userPreferences['resolution'].getPreferenceValue() }}">
|
<select class="p-1.5 rounded-md mb-2" name="resolution" id="resolution" value="{{ mediaPreferences['resolution'].getPreferenceValue() }}">
|
||||||
<option class="text-gray-800"
|
<option class="text-gray-800"
|
||||||
value=""
|
value=""
|
||||||
{{ userPreferences['resolution'].getPreferenceValue() is null ? "selected" }}
|
{{ mediaPreferences['resolution'] is null ? "selected" }}
|
||||||
>n/a</option>
|
>n/a</option>
|
||||||
|
|
||||||
{% for pref in userPreferences['resolution'].getPreference().getPreferenceOptions() %}
|
{% for pref in mediaPreferences['resolution'].getPreference().getPreferenceOptions() %}
|
||||||
<option class="text-gray-800"
|
<option class="text-gray-800"
|
||||||
value="{{ pref.id }}"
|
value="{{ pref.id }}"
|
||||||
{{ pref.id == userPreferences['resolution'].getPreferenceValue() ? "selected" }}
|
{{ pref.id == mediaPreferences['resolution'].getPreferenceValue() ? "selected" }}
|
||||||
>{{ pref.name }}</option>
|
>{{ pref.name }}</option>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</select>
|
</select>
|
||||||
|
|
||||||
<label class="text-gray-50" for="codec">Codec</label>
|
<label class="text-gray-50" for="codec">Codec</label>
|
||||||
<select class="p-1.5 rounded-md mb-2" name="codec" id="codec" value="{{ userPreferences['codec'].getPreferenceValue() }}">
|
<select class="p-1.5 rounded-md mb-2" name="codec" id="codec" value="{{ mediaPreferences['codec'].getPreferenceValue() }}">
|
||||||
<option class="text-gray-800"
|
<option class="text-gray-800"
|
||||||
value=""
|
value=""
|
||||||
{{ userPreferences['codec'].getPreferenceValue() is null ? "selected" }}
|
{{ mediaPreferences['codec'].getPreferenceValue() is null ? "selected" }}
|
||||||
>n/a</option>
|
>n/a</option>
|
||||||
{% for pref in userPreferences['codec'].getPreference().getPreferenceOptions() %}
|
{% for pref in mediaPreferences['codec'].getPreference().getPreferenceOptions() %}
|
||||||
<option class="text-gray-800"
|
<option class="text-gray-800"
|
||||||
value="{{ pref.id }}"
|
value="{{ pref.id }}"
|
||||||
{{ pref.id == userPreferences['codec'].getPreferenceValue() ? "selected" }}
|
{{ pref.id == mediaPreferences['codec'].getPreferenceValue() ? "selected" }}
|
||||||
>{{ pref.name }}</option>
|
>{{ pref.name }}</option>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</select>
|
</select>
|
||||||
|
|
||||||
<label class="text-gray-50" for="provider">Provider</label>
|
<label class="text-gray-50" for="provider">Provider</label>
|
||||||
<select class="p-1.5 rounded-md mb-2" name="provider" id="provider" value="{{ userPreferences['provider'].getPreferenceValue() }}">
|
<select class="p-1.5 rounded-md mb-2" name="provider" id="provider" value="{{ mediaPreferences['provider'].getPreferenceValue() }}">
|
||||||
<option class="text-gray-800"
|
<option class="text-gray-800"
|
||||||
value=""
|
value=""
|
||||||
{{ "" == userPreferences['provider'].getPreferenceValue() ? "selected" }}
|
{{ "" == mediaPreferences['provider'].getPreferenceValue() ? "selected" }}
|
||||||
>n/a</option>
|
>n/a</option>
|
||||||
{% for provider in providers %}
|
{% for provider in providers %}
|
||||||
<option class="text-gray-800"
|
<option class="text-gray-800"
|
||||||
value="{{ provider }}"
|
value="{{ provider }}"
|
||||||
{{ provider == userPreferences['provider'].getPreferenceValue() ? "selected" }}
|
{{ provider == mediaPreferences['provider'].getPreferenceValue() ? "selected" }}
|
||||||
>{{ provider }}</option>
|
>{{ provider }}</option>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</select>
|
</select>
|
||||||
|
|
||||||
<label class="text-gray-50" for="language">Language</label>
|
<label class="text-gray-50" for="language">Language</label>
|
||||||
<select class="p-1.5 rounded-md mb-2" name="language" id="language" value="{{ userPreferences['language'].getPreferenceValue() }}">
|
<select class="p-1.5 rounded-md mb-2" name="language" id="language" value="{{ mediaPreferences['language'].getPreferenceValue() }}">
|
||||||
<option class="text-gray-800"
|
<option class="text-gray-800"
|
||||||
value=""
|
value=""
|
||||||
{{ userPreferences['language'].getPreferenceValue() is null ? "selected" }}
|
{{ mediaPreferences['language'].getPreferenceValue() is null ? "selected" }}
|
||||||
>n/a</option>
|
>n/a</option>
|
||||||
{% for language in languages %}
|
{% for language in languages %}
|
||||||
<option class="text-gray-800"
|
<option class="text-gray-800"
|
||||||
value="{{ language }}"
|
value="{{ language }}"
|
||||||
{{ language == userPreferences['language'].getPreferenceValue() ? "selected" }}
|
{{ language == mediaPreferences['language'].getPreferenceValue() ? "selected" }}
|
||||||
>{{ language }}</option>
|
>{{ language }}</option>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</select>
|
</select>
|
||||||
|
|||||||
Reference in New Issue
Block a user