preferenceRepository = $preferenceRepository; $this->preferenceOptionRepository = $preferenceOptionRepository; $this->userRepository = $userRepository; } protected function execute(InputInterface $input, OutputInterface $output): int { $io = new SymfonyStyle($input, $output); $this->seedPreferences($io); $this->seedPreferenceOptions($io); $this->updateUserPreferences($io); return Command::SUCCESS; } private function seedPreferences(SymfonyStyle $io) { $io->info('[SeedDatabaseCommand] > Seeding preferences...'); $preferences = $this->getPreferences(); foreach ($preferences as $preference) { $isNewRecord = false; $preferenceRecord = $this->preferenceRepository->findOneBy(['id' => $preference['id']]); if (null === $preferenceRecord) { $isNewRecord = true; $preferenceRecord = new Preference(); } $preferenceRecord ->setId($preference['id']) ->setName($preference['name']) ->setDescription($preference['description']) ->setEnabled($preference['enabled']) ->setType($preference['type']); if (true === $isNewRecord) { $this->preferenceRepository->getEntityManager()->persist($preferenceRecord); } } $this->preferenceRepository->getEntityManager()->flush(); } private function updateUserPreferences(SymfonyStyle $io) { $io->info('[SeedDatabaseCommand] > Updating user preferences...'); $users = $this->userRepository->findAll(); $preferences = $this->preferenceRepository->findAll(); foreach ($users as $user) { foreach ($preferences as $preference) { if (false === $user->hasUserPreference($preference->getId())) { $user->addUserPreference( new UserPreference() ->setPreference($preference) ->setUser($user) ->setPreferenceValue(null) ); } } } $this->userRepository->getEntityManager()->flush(); } private function getPreferences(): array { return [ [ 'id' => 'codec', 'name' => 'Codec', 'description' => null, 'enabled' => true, 'type' => 'media', ], [ 'id' => 'resolution', 'name' => 'Resolution', 'description' => null, 'enabled' => true, 'type' => 'media', ], [ 'id' => 'language', 'name' => 'Language', 'description' => null, 'enabled' => true, 'type' => 'media', ], [ 'id' => 'provider', 'name' => 'Provider', 'description' => null, 'enabled' => true, 'type' => 'media', ], [ 'id' => 'quality', 'name' => 'Quality', 'description' => null, 'enabled' => true, 'type' => 'media', ], [ 'id' => 'movie_folder', 'name' => 'Create new folder for Movies', 'description' => 'When downloading a movie, store it in a new folder in your base \'movies\' folder. (e.g.: .../movies/Inception/Inception.2160p.h265.mkv)', 'enabled' => true, 'type' => 'download' ], ]; } private function seedPreferenceOptions(SymfonyStyle $io) { $io->info('[SeedDatabaseCommand] > Seeding preference options...'); $options = $this->getPreferenceOptions(); foreach ($options as $option) { if ($this->preferenceOptionRepository->findBy([ 'preference' => $option['preference_id'], 'name' => $option['name'], 'value' => $option['value'], 'enabled' => $option['enabled'], ])) { continue; } $this->preferenceOptionRepository->getEntityManager()->persist( (new \App\User\Framework\Entity\PreferenceOption()) ->setPreference($this->preferenceRepository->find($option['preference_id'])) ->setName($option['name']) ->setValue($option['value']) ->setEnabled($option['enabled']) ); } $this->preferenceOptionRepository->getEntityManager()->flush(); } private function getPreferenceOptions(): array { return [ [ 'preference_id' => 'resolution', 'name' => '720p', 'value' => '720p', 'enabled' => true ], [ 'preference_id' => 'resolution', 'name' => '1080p', 'value' => '1080p', 'enabled' => true ], [ 'preference_id' => 'resolution', 'name' => '2160p', 'value' => '2160p', 'enabled' => true ], [ 'preference_id' => 'codec', 'name' => '-', 'value' => '-', 'enabled' => true ], [ 'preference_id' => 'codec', 'name' => 'h264', 'value' => 'h264', 'enabled' => true ], [ 'preference_id' => 'codec', 'name' => 'h265/HEVC', 'value' => 'h265', 'enabled' => true ] ]; } }