From 7c6f5ed09b901149a0c4b263dd6d45155b843dde Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jakub=20Skowro=C5=84ski?= Date: Mon, 14 Aug 2023 15:21:29 +0200 Subject: [PATCH] Refactor entities --- config/doctrine/Mod/AbstractMod.orm.xml | 2 - config/doctrine/Mod/SteamWorkshopMod.orm.xml | 1 + migrations/Version20230814124403.php | 33 ++++ src/Api/Controller/GetModListByNameAction.php | 4 +- .../AttendanceInputDataTransformer.php | 3 +- .../AttendanceOutputDataTransformer.php | 6 +- .../Dlc/DlcOutputDataTransformer.php | 6 +- .../Mod/ModOutputDataTransformer.php | 11 +- .../ModListDetailsOutputDataTransformer.php | 7 +- src/DataFixtures/Dlc/CslaIronCurtain.php | 1 + .../Dlc/GlobalMobilizationFixture.php | 1 + .../Dlc/SogPrairieFireFixture.php | 1 + src/DataFixtures/Dlc/WesternSaharaFixture.php | 1 + .../AceInteractionMenuExpansionModFixture.php | 2 + .../Mod/Required/ArmaForcesModsModFixture.php | 2 + .../Broken/ArmaForcesAceMedicalModFixture.php | 4 +- .../LegacyArmaForcesModsModFixture.php | 4 +- .../ArmaForcesJbadBuildingFixModFixture.php | 4 +- .../ModGroup/RhsModGroupFixture.php | 4 +- .../ModList/DefaultModListFixture.php | 21 +- src/DataFixtures/User/AdminUserFixture.php | 5 +- src/DataFixtures/User/RegularUserFixture.php | 5 +- src/Entity/AbstractBlamableEntity.php | 32 ++-- src/Entity/AbstractEntity.php | 2 +- src/Entity/Attendance/Attendance.php | 12 +- src/Entity/Attendance/AttendanceInterface.php | 14 -- src/Entity/BlamableEntityInterface.php | 22 --- src/Entity/Dlc/Dlc.php | 50 +++-- src/Entity/Dlc/DlcInterface.php | 20 -- src/Entity/EntityInterface.php | 16 -- src/Entity/Mod/AbstractMod.php | 84 ++------ src/Entity/Mod/DirectoryMod.php | 32 +++- src/Entity/Mod/DirectoryModInterface.php | 12 -- src/Entity/Mod/ModInterface.php | 40 ---- src/Entity/Mod/SteamWorkshopMod.php | 38 +++- src/Entity/Mod/SteamWorkshopModInterface.php | 12 -- src/Entity/ModGroup/ModGroup.php | 60 +++--- src/Entity/ModGroup/ModGroupInterface.php | 27 --- src/Entity/ModList/ModList.php | 181 +++++++++--------- src/Entity/ModList/ModListInterface.php | 70 ------- src/Entity/Traits/DescribedInterface.php | 12 -- src/Entity/Traits/DescribedTrait.php | 20 -- src/Entity/Traits/NamedInterface.php | 12 -- src/Entity/Traits/NamedTrait.php | 18 -- src/Entity/User/User.php | 128 ++++++------- src/Entity/User/UserInterface.php | 52 ----- src/Entity/UserGroup/UserGroup.php | 71 ++++--- src/Entity/UserGroup/UserGroupInterface.php | 29 --- .../Doctrine/EntityBlamableSubscriber.php | 13 +- .../Doctrine/ModGroupUpdatedSubscriber.php | 9 +- src/Form/DataTransformerInterface.php | 6 +- src/Form/DataTransformerRegistry.php | 8 +- .../DlcFormDtoDataTransformer.php | 44 +++-- .../ModFormDtoDataTransformer.php | 80 +++++--- src/Form/Mod/ModFormType.php | 4 +- .../ModGroupFormDtoDataTransformer.php | 42 ++-- src/Form/ModGroup/Dto/ModGroupFormDto.php | 12 +- .../ModListFormDtoDataTransformer.php | 65 ++++--- src/Form/ModList/Dto/ModListFormDto.php | 44 ++--- src/Form/ModList/ModListFormType.php | 7 +- .../RegisteredDataTransformerInterface.php | 6 +- .../UserFormDtoDataTransformer.php | 41 ++-- src/Form/User/Dto/UserFormDto.php | 6 +- .../UserGroupFormDtoDataTransformer.php | 45 +++-- src/Form/UserGroup/Dto/UserGroupFormDto.php | 10 +- .../Attendance/AttendanceRepository.php | 9 +- src/Repository/Dlc/DlcRepository.php | 9 +- src/Repository/Mod/ModRepository.php | 29 ++- .../ModGroup/ModGroupRepository.php | 9 +- src/Repository/ModList/ModListRepository.php | 15 +- src/Repository/User/UserRepository.php | 11 +- .../Authenticator/DiscordAuthenticator.php | 28 ++- src/Security/Voter/Dlc/CreateDlcVoter.php | 5 +- src/Security/Voter/Dlc/DeleteDlcVoter.php | 9 +- src/Security/Voter/Dlc/ListDlcsVoter.php | 5 +- src/Security/Voter/Dlc/UpdateDlcVoter.php | 9 +- src/Security/Voter/Mod/CreateModVoter.php | 5 +- src/Security/Voter/Mod/DeleteModVoter.php | 9 +- src/Security/Voter/Mod/ListModsVoter.php | 5 +- src/Security/Voter/Mod/UpdateModVoter.php | 9 +- .../Voter/ModGroup/CreateModGroupVoter.php | 5 +- .../Voter/ModGroup/DeleteModGroupVoter.php | 9 +- .../Voter/ModGroup/ListModGroupsVoter.php | 5 +- .../Voter/ModGroup/UpdateModGroupVoter.php | 9 +- .../Voter/ModList/ApproveModListVoter.php | 5 +- .../Voter/ModList/CopyModListVoter.php | 9 +- .../Voter/ModList/CreateModListVoter.php | 5 +- .../Voter/ModList/DeleteModListVoter.php | 8 +- .../Voter/ModList/DownloadModListVoter.php | 5 +- .../Voter/ModList/ListModListsVoter.php | 5 +- .../Voter/ModList/UpdateModListVoter.php | 8 +- src/Security/Voter/User/DeleteUserVoter.php | 9 +- src/Security/Voter/User/ListUsersVoter.php | 5 +- src/Security/Voter/User/UpdateUserVoter.php | 7 +- .../Voter/UserGroup/CreateUserGroupVoter.php | 5 +- .../Voter/UserGroup/DeleteUserGroupVoter.php | 9 +- .../Voter/UserGroup/ListUserGroupsVoter.php | 5 +- .../Voter/UserGroup/UpdateUserGroupVoter.php | 9 +- .../DtoToEntityConverter.php | 8 +- .../LegacyModListImport/ModListImport.php | 17 +- src/Test/Traits/AssertsTrait.php | 4 +- templates/_macro/table_macro.html.twig | 39 +++- .../mod_tabs/_mod_tabs_content.html.twig | 8 +- .../mod_tabs/_mod_tabs_table.html.twig | 19 +- templates/mod/list.html.twig | 10 +- .../_partial/_users_table.html.twig | 2 +- .../Doctrine/EntityBlamableSubscriberTest.php | 34 ++-- 107 files changed, 920 insertions(+), 1145 deletions(-) create mode 100644 migrations/Version20230814124403.php delete mode 100644 src/Entity/Attendance/AttendanceInterface.php delete mode 100644 src/Entity/BlamableEntityInterface.php delete mode 100644 src/Entity/Dlc/DlcInterface.php delete mode 100644 src/Entity/EntityInterface.php delete mode 100644 src/Entity/Mod/DirectoryModInterface.php delete mode 100644 src/Entity/Mod/ModInterface.php delete mode 100644 src/Entity/Mod/SteamWorkshopModInterface.php delete mode 100644 src/Entity/ModGroup/ModGroupInterface.php delete mode 100644 src/Entity/ModList/ModListInterface.php delete mode 100644 src/Entity/Traits/DescribedInterface.php delete mode 100644 src/Entity/Traits/DescribedTrait.php delete mode 100644 src/Entity/Traits/NamedInterface.php delete mode 100644 src/Entity/Traits/NamedTrait.php delete mode 100644 src/Entity/User/UserInterface.php delete mode 100644 src/Entity/UserGroup/UserGroupInterface.php diff --git a/config/doctrine/Mod/AbstractMod.orm.xml b/config/doctrine/Mod/AbstractMod.orm.xml index 5ce53961..a9cc17a8 100644 --- a/config/doctrine/Mod/AbstractMod.orm.xml +++ b/config/doctrine/Mod/AbstractMod.orm.xml @@ -7,8 +7,6 @@ - - diff --git a/config/doctrine/Mod/SteamWorkshopMod.orm.xml b/config/doctrine/Mod/SteamWorkshopMod.orm.xml index fd1fe39e..a6a55e8e 100644 --- a/config/doctrine/Mod/SteamWorkshopMod.orm.xml +++ b/config/doctrine/Mod/SteamWorkshopMod.orm.xml @@ -5,6 +5,7 @@ https://www.doctrine-project.org/schemas/orm/doctrine-mapping.xsd"> + diff --git a/migrations/Version20230814124403.php b/migrations/Version20230814124403.php new file mode 100644 index 00000000..941b2721 --- /dev/null +++ b/migrations/Version20230814124403.php @@ -0,0 +1,33 @@ +addSql('ALTER TABLE mods CHANGE type type VARCHAR(255) DEFAULT NULL COMMENT \'(DC2Type:mod_type_enum)\''); + $this->addSql("UPDATE mods SET type = NULL WHERE source = 'directory'"); + } + + public function down(Schema $schema): void + { + // this down() migration is auto-generated, please modify it to your needs + $this->addSql("UPDATE mods SET type = 'server_side' WHERE source = 'directory'"); + $this->addSql('ALTER TABLE mods CHANGE type type VARCHAR(255) CHARACTER SET utf8mb4 NOT NULL COLLATE `utf8mb4_unicode_ci` COMMENT \'(DC2Type:mod_type_enum)\''); + } +} diff --git a/src/Api/Controller/GetModListByNameAction.php b/src/Api/Controller/GetModListByNameAction.php index 3c3f3513..bd98cd12 100644 --- a/src/Api/Controller/GetModListByNameAction.php +++ b/src/Api/Controller/GetModListByNameAction.php @@ -4,7 +4,7 @@ namespace App\Api\Controller; -use App\Entity\ModList\ModListInterface; +use App\Entity\ModList\ModList; use App\Repository\ModList\ModListRepository; use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; @@ -15,7 +15,7 @@ public function __construct( ) { } - public function __invoke(string $name): ?ModListInterface + public function __invoke(string $name): ?ModList { $modList = $this->modListRepository->findOneBy([ 'name' => $name, diff --git a/src/Api/DataTransformer/Attendance/AttendanceInputDataTransformer.php b/src/Api/DataTransformer/Attendance/AttendanceInputDataTransformer.php index b8b5aa8f..3fe57c61 100644 --- a/src/Api/DataTransformer/Attendance/AttendanceInputDataTransformer.php +++ b/src/Api/DataTransformer/Attendance/AttendanceInputDataTransformer.php @@ -8,7 +8,6 @@ use ApiPlatform\Core\Validator\ValidatorInterface; use App\Api\Input\Attendance\AttendanceInput; use App\Entity\Attendance\Attendance; -use App\Entity\Attendance\AttendanceInterface; use Ramsey\Uuid\Uuid; class AttendanceInputDataTransformer implements DataTransformerInterface @@ -28,7 +27,7 @@ public function transform($object, string $to, array $context = []): Attendance public function supportsTransformation($data, string $to, array $context = []): bool { - if ($data instanceof AttendanceInterface) { + if ($data instanceof Attendance) { return false; } diff --git a/src/Api/DataTransformer/Attendance/AttendanceOutputDataTransformer.php b/src/Api/DataTransformer/Attendance/AttendanceOutputDataTransformer.php index 04ce86d7..3cd7082e 100644 --- a/src/Api/DataTransformer/Attendance/AttendanceOutputDataTransformer.php +++ b/src/Api/DataTransformer/Attendance/AttendanceOutputDataTransformer.php @@ -6,13 +6,13 @@ use ApiPlatform\Core\DataTransformer\DataTransformerInterface; use App\Api\Output\Attendance\AttendanceOutput; -use App\Entity\Attendance\AttendanceInterface; +use App\Entity\Attendance\Attendance; class AttendanceOutputDataTransformer implements DataTransformerInterface { public function transform($object, string $to, array $context = []): AttendanceOutput { - /** @var AttendanceInterface $object */ + /** @var Attendance $object */ $output = new AttendanceOutput(); $output->setId($object->getId()->toString()); @@ -25,6 +25,6 @@ public function transform($object, string $to, array $context = []): AttendanceO public function supportsTransformation($data, string $to, array $context = []): bool { - return AttendanceOutput::class === $to && $data instanceof AttendanceInterface; + return AttendanceOutput::class === $to && $data instanceof Attendance; } } diff --git a/src/Api/DataTransformer/Dlc/DlcOutputDataTransformer.php b/src/Api/DataTransformer/Dlc/DlcOutputDataTransformer.php index 658f0d21..6bf3dc5e 100644 --- a/src/Api/DataTransformer/Dlc/DlcOutputDataTransformer.php +++ b/src/Api/DataTransformer/Dlc/DlcOutputDataTransformer.php @@ -6,13 +6,13 @@ use ApiPlatform\Core\DataTransformer\DataTransformerInterface; use App\Api\Output\Dlc\DlcOutput; -use App\Entity\Dlc\DlcInterface; +use App\Entity\Dlc\Dlc; class DlcOutputDataTransformer implements DataTransformerInterface { public function transform($object, string $to, array $context = []): DlcOutput { - /** @var DlcInterface $object */ + /** @var Dlc $object */ $output = new DlcOutput(); $output->setId($object->getId()->toString()); @@ -27,6 +27,6 @@ public function transform($object, string $to, array $context = []): DlcOutput public function supportsTransformation($data, string $to, array $context = []): bool { - return DlcOutput::class === $to && $data instanceof DlcInterface; + return DlcOutput::class === $to && $data instanceof Dlc; } } diff --git a/src/Api/DataTransformer/Mod/ModOutputDataTransformer.php b/src/Api/DataTransformer/Mod/ModOutputDataTransformer.php index 9bd25cca..4bcfb9ba 100644 --- a/src/Api/DataTransformer/Mod/ModOutputDataTransformer.php +++ b/src/Api/DataTransformer/Mod/ModOutputDataTransformer.php @@ -6,16 +6,17 @@ use ApiPlatform\Core\DataTransformer\DataTransformerInterface; use App\Api\Output\Mod\ModOutput; +use App\Entity\Mod\AbstractMod; use App\Entity\Mod\DirectoryMod; use App\Entity\Mod\Enum\ModSourceEnum; -use App\Entity\Mod\ModInterface; +use App\Entity\Mod\Enum\ModTypeEnum; use App\Entity\Mod\SteamWorkshopMod; class ModOutputDataTransformer implements DataTransformerInterface { public function transform($object, string $to, array $context = []): ModOutput { - /** @var ModInterface $object */ + /** @var AbstractMod $object */ $output = new ModOutput(); $output->setId($object->getId()->toString()); @@ -23,16 +24,16 @@ public function transform($object, string $to, array $context = []): ModOutput $output->setCreatedAt($object->getCreatedAt()); $output->setLastUpdatedAt($object->getLastUpdatedAt()); - $output->setType($object->getType()->getValue()); - /** @var null|string $status */ $status = $object->getStatus() ? $object->getStatus()->getValue() : null; $output->setStatus($status); if ($object instanceof SteamWorkshopMod) { + $output->setType($object->getType()->getValue()); $output->setSource(ModSourceEnum::STEAM_WORKSHOP); $output->setItemId($object->getItemId()); } elseif ($object instanceof DirectoryMod) { + $output->setType(ModTypeEnum::SERVER_SIDE); $output->setSource(ModSourceEnum::DIRECTORY); $output->setDirectory($object->getDirectory()); } @@ -42,6 +43,6 @@ public function transform($object, string $to, array $context = []): ModOutput public function supportsTransformation($data, string $to, array $context = []): bool { - return ModOutput::class === $to && $data instanceof ModInterface; + return ModOutput::class === $to && $data instanceof AbstractMod; } } diff --git a/src/Api/DataTransformer/ModList/ModListDetailsOutputDataTransformer.php b/src/Api/DataTransformer/ModList/ModListDetailsOutputDataTransformer.php index 13c13031..cb47cc58 100644 --- a/src/Api/DataTransformer/ModList/ModListDetailsOutputDataTransformer.php +++ b/src/Api/DataTransformer/ModList/ModListDetailsOutputDataTransformer.php @@ -11,9 +11,8 @@ use App\Api\Output\Mod\ModOutput; use App\Api\Output\ModList\ModListDetailsOutput; use App\Api\Output\ModList\ModListOutput; -use App\Entity\Dlc\DlcInterface; +use App\Entity\Dlc\Dlc; use App\Entity\ModList\ModList; -use App\Entity\ModList\ModListInterface; use App\Repository\Mod\ModRepository; class ModListDetailsOutputDataTransformer implements DataTransformerInterface @@ -27,7 +26,7 @@ public function __construct( public function transform($object, string $to, array $context = []): ModListOutput { - /** @var ModListInterface $object */ + /** @var ModList $object */ $output = new ModListDetailsOutput(); $output->setId($object->getId()->toString()); @@ -44,7 +43,7 @@ public function transform($object, string $to, array $context = []): ModListOutp $output->setMods($mods); $dlcs = array_map( - fn (DlcInterface $dlc) => $this->dlcOutputDataTransformer->transform($dlc, DlcOutput::class, $context), + fn (Dlc $dlc) => $this->dlcOutputDataTransformer->transform($dlc, DlcOutput::class, $context), $object->getDlcs() ); $output->setDlcs($dlcs); diff --git a/src/DataFixtures/Dlc/CslaIronCurtain.php b/src/DataFixtures/Dlc/CslaIronCurtain.php index da0c2631..f581af86 100644 --- a/src/DataFixtures/Dlc/CslaIronCurtain.php +++ b/src/DataFixtures/Dlc/CslaIronCurtain.php @@ -18,6 +18,7 @@ public function load(ObjectManager $manager): void $dlc = new Dlc( Uuid::fromString(self::ID), 'Arma 3 Creator DLC: CSLA Iron Curtain', + null, 1294440, 'csla' ); diff --git a/src/DataFixtures/Dlc/GlobalMobilizationFixture.php b/src/DataFixtures/Dlc/GlobalMobilizationFixture.php index 7803ad24..7da4ee62 100644 --- a/src/DataFixtures/Dlc/GlobalMobilizationFixture.php +++ b/src/DataFixtures/Dlc/GlobalMobilizationFixture.php @@ -18,6 +18,7 @@ public function load(ObjectManager $manager): void $dlc = new Dlc( Uuid::fromString(self::ID), 'Arma 3 Creator DLC: Global Mobilization - Cold War Germany', + null, 1042220, 'gm' ); diff --git a/src/DataFixtures/Dlc/SogPrairieFireFixture.php b/src/DataFixtures/Dlc/SogPrairieFireFixture.php index baaa968f..be7a9d9f 100644 --- a/src/DataFixtures/Dlc/SogPrairieFireFixture.php +++ b/src/DataFixtures/Dlc/SogPrairieFireFixture.php @@ -18,6 +18,7 @@ public function load(ObjectManager $manager): void $dlc = new Dlc( Uuid::fromString(self::ID), 'Arma 3 Creator DLC: S.O.G. Prairie Fire', + null, 1227700, 'vn' ); diff --git a/src/DataFixtures/Dlc/WesternSaharaFixture.php b/src/DataFixtures/Dlc/WesternSaharaFixture.php index 1f5c4424..20b69c31 100644 --- a/src/DataFixtures/Dlc/WesternSaharaFixture.php +++ b/src/DataFixtures/Dlc/WesternSaharaFixture.php @@ -18,6 +18,7 @@ public function load(ObjectManager $manager): void $dlc = new Dlc( Uuid::fromString(self::ID), 'Arma 3 Creator DLC: Western Sahara', + null, 1681170, 'ws' ); diff --git a/src/DataFixtures/Mod/Optional/AceInteractionMenuExpansionModFixture.php b/src/DataFixtures/Mod/Optional/AceInteractionMenuExpansionModFixture.php index 26272c4d..83289c25 100644 --- a/src/DataFixtures/Mod/Optional/AceInteractionMenuExpansionModFixture.php +++ b/src/DataFixtures/Mod/Optional/AceInteractionMenuExpansionModFixture.php @@ -19,6 +19,8 @@ public function load(ObjectManager $manager): void $mod = new SteamWorkshopMod( Uuid::fromString(self::ID), 'ACE Interaction Menu Expansion', + null, + null, ModTypeEnum::get(ModTypeEnum::OPTIONAL), 1376867375 ); diff --git a/src/DataFixtures/Mod/Required/ArmaForcesModsModFixture.php b/src/DataFixtures/Mod/Required/ArmaForcesModsModFixture.php index cccd7f7c..722d7415 100644 --- a/src/DataFixtures/Mod/Required/ArmaForcesModsModFixture.php +++ b/src/DataFixtures/Mod/Required/ArmaForcesModsModFixture.php @@ -19,6 +19,8 @@ public function load(ObjectManager $manager): void $mod = new SteamWorkshopMod( Uuid::fromString(self::ID), 'ArmaForces - Mods', + null, + null, ModTypeEnum::get(ModTypeEnum::REQUIRED), 1934142795 ); diff --git a/src/DataFixtures/Mod/Required/Broken/ArmaForcesAceMedicalModFixture.php b/src/DataFixtures/Mod/Required/Broken/ArmaForcesAceMedicalModFixture.php index 428c643c..a9615320 100644 --- a/src/DataFixtures/Mod/Required/Broken/ArmaForcesAceMedicalModFixture.php +++ b/src/DataFixtures/Mod/Required/Broken/ArmaForcesAceMedicalModFixture.php @@ -20,11 +20,11 @@ public function load(ObjectManager $manager): void $mod = new SteamWorkshopMod( Uuid::fromString(self::ID), 'ArmaForces - ACE Medical [OBSOLETE]', + null, + ModStatusEnum::get(ModStatusEnum::BROKEN), ModTypeEnum::get(ModTypeEnum::REQUIRED), 1704054308 ); - $mod->setStatus(ModStatusEnum::get(ModStatusEnum::BROKEN)); - $mod->setCreatedAt(\DateTimeImmutable::createFromFormat('Y-m-d H:i:s', '2020-01-01 00:00:00')); $manager->persist($mod); $manager->flush(); diff --git a/src/DataFixtures/Mod/Required/Deprecated/LegacyArmaForcesModsModFixture.php b/src/DataFixtures/Mod/Required/Deprecated/LegacyArmaForcesModsModFixture.php index 6390d892..d7c91023 100644 --- a/src/DataFixtures/Mod/Required/Deprecated/LegacyArmaForcesModsModFixture.php +++ b/src/DataFixtures/Mod/Required/Deprecated/LegacyArmaForcesModsModFixture.php @@ -20,11 +20,11 @@ public function load(ObjectManager $manager): void $mod = new SteamWorkshopMod( Uuid::fromString(self::ID), '[legacy] ArmaForces - Mods', + null, + ModStatusEnum::get(ModStatusEnum::DEPRECATED), ModTypeEnum::get(ModTypeEnum::REQUIRED), 1639399387 ); - $mod->setStatus(ModStatusEnum::get(ModStatusEnum::DEPRECATED)); - $mod->setCreatedAt(\DateTimeImmutable::createFromFormat('Y-m-d H:i:s', '2020-01-01 00:00:00')); $manager->persist($mod); $manager->flush(); diff --git a/src/DataFixtures/Mod/Required/Disabled/ArmaForcesJbadBuildingFixModFixture.php b/src/DataFixtures/Mod/Required/Disabled/ArmaForcesJbadBuildingFixModFixture.php index 8e39181a..3ebb004d 100644 --- a/src/DataFixtures/Mod/Required/Disabled/ArmaForcesJbadBuildingFixModFixture.php +++ b/src/DataFixtures/Mod/Required/Disabled/ArmaForcesJbadBuildingFixModFixture.php @@ -20,11 +20,11 @@ public function load(ObjectManager $manager): void $mod = new SteamWorkshopMod( Uuid::fromString(self::ID), '[OBSOLETE] ArmaForces - JBAD Building Fix', + null, + ModStatusEnum::get(ModStatusEnum::DISABLED), ModTypeEnum::get(ModTypeEnum::REQUIRED), 1781106281 ); - $mod->setStatus(ModStatusEnum::get(ModStatusEnum::DISABLED)); - $mod->setCreatedAt(\DateTimeImmutable::createFromFormat('Y-m-d H:i:s', '2020-01-01 00:00:00')); $manager->persist($mod); $manager->flush(); diff --git a/src/DataFixtures/ModGroup/RhsModGroupFixture.php b/src/DataFixtures/ModGroup/RhsModGroupFixture.php index acc22e4c..d26473d8 100644 --- a/src/DataFixtures/ModGroup/RhsModGroupFixture.php +++ b/src/DataFixtures/ModGroup/RhsModGroupFixture.php @@ -17,7 +17,9 @@ public function load(ObjectManager $manager): void { $modGroup = new ModGroup( Uuid::fromString(self::ID), - 'RHS' + 'RHS', + null, + [] ); $modGroup->setCreatedAt(\DateTimeImmutable::createFromFormat('Y-m-d H:i:s', '2020-01-01 00:00:00')); diff --git a/src/DataFixtures/ModList/DefaultModListFixture.php b/src/DataFixtures/ModList/DefaultModListFixture.php index e40864d7..21877e34 100644 --- a/src/DataFixtures/ModList/DefaultModListFixture.php +++ b/src/DataFixtures/ModList/DefaultModListFixture.php @@ -17,12 +17,6 @@ class DefaultModListFixture extends Fixture public function load(ObjectManager $manager): void { - $modList = new ModList( - Uuid::fromString(self::ID), - 'Default' - ); - $modList->setCreatedAt(\DateTimeImmutable::createFromFormat('Y-m-d H:i:s', '2020-01-01 00:00:00')); - $mods = [ $this->getReference(Optional\AceInteractionMenuExpansionModFixture::ID), $this->getReference(Required\ArmaForcesModsModFixture::ID), @@ -31,9 +25,18 @@ public function load(ObjectManager $manager): void $this->getReference(Required\Disabled\ArmaForcesJbadBuildingFixModFixture::ID), ]; - foreach ($mods as $mod) { - $modList->addMod($mod); - } + $modList = new ModList( + Uuid::fromString(self::ID), + 'Default', + null, + $mods, + [], + [], + null, + false, + false, + ); + $modList->setCreatedAt(\DateTimeImmutable::createFromFormat('Y-m-d H:i:s', '2020-01-01 00:00:00')); $manager->persist($modList); $manager->flush(); diff --git a/src/DataFixtures/User/AdminUserFixture.php b/src/DataFixtures/User/AdminUserFixture.php index d6913729..688b3b16 100644 --- a/src/DataFixtures/User/AdminUserFixture.php +++ b/src/DataFixtures/User/AdminUserFixture.php @@ -24,7 +24,10 @@ public function load(ObjectManager $manager): void 'admin#1111', 'admin@example.com', self::ID, - $permissions + $permissions, + [], + null, + null ); $manager->persist($permissions); diff --git a/src/DataFixtures/User/RegularUserFixture.php b/src/DataFixtures/User/RegularUserFixture.php index 3ef2af37..0b45ed64 100644 --- a/src/DataFixtures/User/RegularUserFixture.php +++ b/src/DataFixtures/User/RegularUserFixture.php @@ -23,7 +23,10 @@ public function load(ObjectManager $manager): void 'regular#2222', 'regular@example.com', self::ID, - $permissions + $permissions, + [], + null, + null ); $manager->persist($permissions); diff --git a/src/Entity/AbstractBlamableEntity.php b/src/Entity/AbstractBlamableEntity.php index b84d11cb..8413234c 100644 --- a/src/Entity/AbstractBlamableEntity.php +++ b/src/Entity/AbstractBlamableEntity.php @@ -4,41 +4,37 @@ namespace App\Entity; -use App\Entity\User\UserInterface; +use App\Entity\User\User; -abstract class AbstractBlamableEntity extends AbstractEntity implements BlamableEntityInterface +abstract class AbstractBlamableEntity extends AbstractEntity { - protected ?UserInterface $createdBy = null; + protected ?User $createdBy = null; protected ?\DateTimeInterface $lastUpdatedAt = null; - protected ?UserInterface $lastUpdatedBy = null; + protected ?User $lastUpdatedBy = null; - public function getCreatedBy(): ?UserInterface + public function created(User $user): void { - return $this->createdBy; + $this->createdBy = $user; } - public function setCreatedBy(?UserInterface $createdBy): void + public function updated(User $user): void { - $this->createdBy = $createdBy; + $this->lastUpdatedAt = new \DateTimeImmutable(); + $this->lastUpdatedBy = $user; } - public function getLastUpdatedAt(): ?\DateTimeInterface + public function getCreatedBy(): ?User { - return $this->lastUpdatedAt; + return $this->createdBy; } - public function setLastUpdatedAt(?\DateTimeInterface $lastUpdatedAt): void + public function getLastUpdatedAt(): ?\DateTimeInterface { - $this->lastUpdatedAt = $lastUpdatedAt; + return $this->lastUpdatedAt; } - public function getLastUpdatedBy(): ?UserInterface + public function getLastUpdatedBy(): ?User { return $this->lastUpdatedBy; } - - public function setLastUpdatedBy(?UserInterface $lastUpdatedBy): void - { - $this->lastUpdatedBy = $lastUpdatedBy; - } } diff --git a/src/Entity/AbstractEntity.php b/src/Entity/AbstractEntity.php index bda69ce3..3f315868 100644 --- a/src/Entity/AbstractEntity.php +++ b/src/Entity/AbstractEntity.php @@ -6,7 +6,7 @@ use Ramsey\Uuid\UuidInterface; -abstract class AbstractEntity implements EntityInterface +abstract class AbstractEntity { protected \DateTimeInterface $createdAt; diff --git a/src/Entity/Attendance/Attendance.php b/src/Entity/Attendance/Attendance.php index 942f2f9a..395a0fe0 100644 --- a/src/Entity/Attendance/Attendance.php +++ b/src/Entity/Attendance/Attendance.php @@ -7,14 +7,20 @@ use App\Entity\AbstractEntity; use Ramsey\Uuid\UuidInterface; -class Attendance extends AbstractEntity implements AttendanceInterface +class Attendance extends AbstractEntity { + private string $missionId; + private int $playerId; + public function __construct( UuidInterface $id, - private string $missionId, - private int $playerId + string $missionId, + int $playerId ) { parent::__construct($id); + + $this->missionId = $missionId; + $this->playerId = $playerId; } public function getMissionId(): string diff --git a/src/Entity/Attendance/AttendanceInterface.php b/src/Entity/Attendance/AttendanceInterface.php deleted file mode 100644 index 6d04c65b..00000000 --- a/src/Entity/Attendance/AttendanceInterface.php +++ /dev/null @@ -1,14 +0,0 @@ -name = $name; + $this->description = $description; + $this->appId = $appId; + $this->directory = $directory; } - public function getAppId(): int + public function update( + string $name, + ?string $description, + int $appId, + string $directory + ): void { + $this->name = $name; + $this->description = $description; + $this->appId = $appId; + $this->directory = $directory; + } + + public function getName(): string { - return $this->appId; + return $this->name; } - public function setAppId(int $appId): void + public function getDescription(): ?string { - $this->appId = $appId; + return $this->description; } - public function getDirectory(): string + public function getAppId(): int { - return $this->directory; + return $this->appId; } - public function setDirectory(string $directory): void + public function getDirectory(): string { - $this->directory = $directory; + return $this->directory; } } diff --git a/src/Entity/Dlc/DlcInterface.php b/src/Entity/Dlc/DlcInterface.php deleted file mode 100644 index c9596a0e..00000000 --- a/src/Entity/Dlc/DlcInterface.php +++ /dev/null @@ -1,20 +0,0 @@ -type; - } - - public function setType(ModTypeEnum $type): void - { - $this->type = $type; - } - - public function isTypeServerSide(): bool - { - return $this->getType()->is(ModTypeEnum::SERVER_SIDE); - } - public function isTypeRequired(): bool - { - return $this->getType()->is(ModTypeEnum::REQUIRED); + $this->name = $name; + $this->description = $description; + $this->status = $status; } - public function isTypeOptional(): bool + public function isUserSelectable(): bool { - return $this->getType()->is(ModTypeEnum::OPTIONAL); + return false; } - public function isTypeClientSide(): bool + public function getName(): string { - return $this->getType()->is(ModTypeEnum::CLIENT_SIDE); + return $this->name; } - public function isUserSelectable(): bool + public function getDescription(): ?string { - return $this->isSteamWorkshopMod() && \in_array($this->getType()->getValue(), [ - ModTypeEnum::CLIENT_SIDE, - ModTypeEnum::OPTIONAL, - ], true); + return $this->description; } public function getStatus(): ?ModStatusEnum { return $this->status; } - - public function setStatus(?ModStatusEnum $status): void - { - $this->status = $status; - } - - public function isStatusDeprecated(): bool - { - return $this->getStatus() instanceof ModStatusEnum && $this->getStatus()->is(ModStatusEnum::DEPRECATED); - } - - public function isStatusBroken(): bool - { - return $this->getStatus() instanceof ModStatusEnum && $this->getStatus()->is(ModStatusEnum::BROKEN); - } - - public function isStatusDisabled(): bool - { - return $this->getStatus() instanceof ModStatusEnum && $this->getStatus()->is(ModStatusEnum::DISABLED); - } } diff --git a/src/Entity/Mod/DirectoryMod.php b/src/Entity/Mod/DirectoryMod.php index 2d4a7316..c2023eec 100644 --- a/src/Entity/Mod/DirectoryMod.php +++ b/src/Entity/Mod/DirectoryMod.php @@ -4,27 +4,39 @@ namespace App\Entity\Mod; -use App\Entity\Mod\Enum\ModTypeEnum; +use App\Entity\Mod\Enum\ModStatusEnum; use Ramsey\Uuid\UuidInterface; -class DirectoryMod extends AbstractMod implements DirectoryModInterface +class DirectoryMod extends AbstractMod { + private string $directory; + public function __construct( UuidInterface $id, string $name, - ModTypeEnum $type, - private string $directory + ?string $description, + ?ModStatusEnum $status, + string $directory ) { - parent::__construct($id, $name, $type); + parent::__construct($id, $name, $description, $status); + + $this->directory = $directory; } - public function getDirectory(): string - { - return $this->directory; + public function update( + string $name, + ?string $description, + ?ModStatusEnum $status, + string $directory + ): void { + $this->name = $name; + $this->description = $description; + $this->status = $status; + $this->directory = $directory; } - public function setDirectory(string $directory): void + public function getDirectory(): string { - $this->directory = $directory; + return $this->directory; } } diff --git a/src/Entity/Mod/DirectoryModInterface.php b/src/Entity/Mod/DirectoryModInterface.php deleted file mode 100644 index 1452dc01..00000000 --- a/src/Entity/Mod/DirectoryModInterface.php +++ /dev/null @@ -1,12 +0,0 @@ -type = $type; + $this->itemId = $itemId; + } + + public function update( + string $name, + ?string $description, + ?ModStatusEnum $status, + ModTypeEnum $type, + int $itemId + ): void { + $this->name = $name; + $this->description = $description; + $this->status = $status; + $this->type = $type; + $this->itemId = $itemId; + } + + public function isUserSelectable(): bool + { + return \in_array($this->getType()->getValue(), [ModTypeEnum::CLIENT_SIDE, ModTypeEnum::OPTIONAL], true); } public function getItemId(): int @@ -23,8 +51,8 @@ public function getItemId(): int return $this->itemId; } - public function setItemId(int $itemId): void + public function getType(): ModTypeEnum { - $this->itemId = $itemId; + return $this->type; } } diff --git a/src/Entity/Mod/SteamWorkshopModInterface.php b/src/Entity/Mod/SteamWorkshopModInterface.php deleted file mode 100644 index 861baf43..00000000 --- a/src/Entity/Mod/SteamWorkshopModInterface.php +++ /dev/null @@ -1,12 +0,0 @@ -mods = new ArrayCollection(); - } - public function addMod(ModInterface $mod): void - { - if ($this->mods->contains($mod)) { - return; - } + $this->name = $name; + $this->description = $description; + $this->setMods($mods); + } - $this->mods->add($mod); + public function update( + string $name, + ?string $description, + array $mods + ): void { + $this->name = $name; + $this->description = $description; + $this->setMods($mods); } - public function removeMod(ModInterface $mod): void + public function getName(): string { - if (!$this->mods->contains($mod)) { - return; - } + return $this->name; + } - $this->mods->removeElement($mod); + public function getDescription(): ?string + { + return $this->description; } + /** + * @return AbstractMod[] + */ public function getMods(): array { return $this->mods->toArray(); } - public function setMods(array $mods): void + private function setMods(array $mods): void { $this->mods->clear(); foreach ($mods as $mod) { $this->addMod($mod); } } + + private function addMod(AbstractMod $mod): void + { + if ($this->mods->contains($mod)) { + return; + } + + $this->mods->add($mod); + } } diff --git a/src/Entity/ModGroup/ModGroupInterface.php b/src/Entity/ModGroup/ModGroupInterface.php deleted file mode 100644 index fd4d0190..00000000 --- a/src/Entity/ModGroup/ModGroupInterface.php +++ /dev/null @@ -1,27 +0,0 @@ -mods = new ArrayCollection(); $this->modGroups = new ArrayCollection(); $this->dlcs = new ArrayCollection(); - } - public function addMod(ModInterface $mod): void - { - if ($this->mods->contains($mod)) { - return; - } + $this->name = $name; + $this->description = $description; + $this->setMods($mods); + $this->setModGroups($modGroups); + $this->setDlcs($dlcs); + $this->owner = $owner; + $this->active = $active; + $this->approved = $approved; + } - $this->mods->add($mod); + public function update( + string $name, + ?string $description, + array $mods, + array $modGroups, + array $dlcs, + ?User $owner, + bool $active, + bool $approved, + ): void { + $this->name = $name; + $this->description = $description; + $this->setMods($mods); + $this->setModGroups($modGroups); + $this->setDlcs($dlcs); + $this->owner = $owner; + $this->active = $active; + $this->approved = $approved; } - public function removeMod(ModInterface $mod): void + public function getName(): string { - if (!$this->mods->contains($mod)) { - return; - } + return $this->name; + } - $this->mods->removeElement($mod); + public function getDescription(): ?string + { + return $this->description; } + /** + * @return AbstractMod[] + */ public function getMods(): array { return $this->mods->toArray(); } - public function setMods(array $mods): void + /** + * @return ModGroup[] + */ + public function getModGroups(): array { - $this->mods->clear(); - foreach ($mods as $mod) { - $this->addMod($mod); - } + return $this->modGroups->toArray(); } - public function addModGroup(ModGroupInterface $modGroup): void + public function getOwner(): ?User { - if ($this->modGroups->contains($modGroup)) { - return; - } - - $this->modGroups->add($modGroup); + return $this->owner; } - public function removeModGroup(ModGroupInterface $modGroup): void + public function isActive(): bool { - if (!$this->modGroups->contains($modGroup)) { - return; - } + return $this->active; + } - $this->modGroups->removeElement($modGroup); + public function isApproved(): bool + { + return $this->approved; } - public function getModGroups(): array + /** + * @return Dlc[] + */ + public function getDlcs(): array { - return $this->modGroups->toArray(); + return $this->dlcs->toArray(); } - public function setModGroups(array $modGroups): void + private function setMods(array $mods): void { - $this->modGroups->clear(); - foreach ($modGroups as $modGroup) { - $this->addModGroup($modGroup); + $this->mods->clear(); + foreach ($mods as $mod) { + $this->addMod($mod); } } - public function addDlc(DlcInterface $dlc): void + private function addMod(AbstractMod $mod): void { - if ($this->dlcs->contains($dlc)) { + if ($this->mods->contains($mod)) { return; } - $this->dlcs->add($dlc); + $this->mods->add($mod); } - public function removeDlc(DlcInterface $dlc): void + private function setModGroups(array $modGroups): void { - if (!$this->dlcs->contains($dlc)) { - return; + $this->modGroups->clear(); + foreach ($modGroups as $modGroup) { + $this->addModGroup($modGroup); } - - $this->dlcs->removeElement($dlc); } - public function getDlcs(): array + private function addModGroup(ModGroup $modGroup): void { - return $this->dlcs->toArray(); + if ($this->modGroups->contains($modGroup)) { + return; + } + + $this->modGroups->add($modGroup); } - public function setDlcs(array $dlcs): void + private function setDlcs(array $dlcs): void { $this->dlcs->clear(); foreach ($dlcs as $dlc) { @@ -131,33 +161,12 @@ public function setDlcs(array $dlcs): void } } - public function getOwner(): ?UserInterface - { - return $this->owner; - } - - public function setOwner(?UserInterface $owner): void + private function addDlc(Dlc $dlc): void { - $this->owner = $owner; - } - - public function isActive(): bool - { - return $this->active; - } - - public function setActive(bool $active): void - { - $this->active = $active; - } - - public function isApproved(): bool - { - return $this->approved; - } + if ($this->dlcs->contains($dlc)) { + return; + } - public function setApproved(bool $approved): void - { - $this->approved = $approved; + $this->dlcs->add($dlc); } } diff --git a/src/Entity/ModList/ModListInterface.php b/src/Entity/ModList/ModListInterface.php deleted file mode 100644 index 98d291a4..00000000 --- a/src/Entity/ModList/ModListInterface.php +++ /dev/null @@ -1,70 +0,0 @@ -description; - } - - public function setDescription(?string $description): void - { - $this->description = $description; - } -} diff --git a/src/Entity/Traits/NamedInterface.php b/src/Entity/Traits/NamedInterface.php deleted file mode 100644 index 82dc01e1..00000000 --- a/src/Entity/Traits/NamedInterface.php +++ /dev/null @@ -1,12 +0,0 @@ -name; - } - - public function setName(string $name): void - { - $this->name = $name; - } -} diff --git a/src/Entity/User/User.php b/src/Entity/User/User.php index f557d83b..6531a3c3 100644 --- a/src/Entity/User/User.php +++ b/src/Entity/User/User.php @@ -6,35 +6,63 @@ use App\Entity\AbstractBlamableEntity; use App\Entity\Permissions\UserPermissions; -use App\Entity\UserGroup\UserGroupInterface; +use App\Entity\UserGroup\UserGroup; use App\Security\Traits\UserInterfaceTrait; use Doctrine\Common\Collections\ArrayCollection; use Doctrine\Common\Collections\Collection; use Ramsey\Uuid\UuidInterface; +use Symfony\Component\Security\Core\User\UserInterface; class User extends AbstractBlamableEntity implements UserInterface { use UserInterfaceTrait; + private string $username; + private string $email; + private string $externalId; + private UserPermissions $permissions; private Collection $userGroups; - private ?string $avatarHash = null; - private ?int $steamId = null; + private ?string $avatarHash; + private ?int $steamId; public function __construct( UuidInterface $id, - private string $username, - private string $email, - private string $externalId, - private UserPermissions $permissions, + string $username, + string $email, + string $externalId, + UserPermissions $permissions, + array $userGroups, + ?string $avatarHash, + ?int $steamId, ) { parent::__construct($id); - $this->userGroups = new ArrayCollection(); + + $this->username = $username; + $this->email = $email; + $this->externalId = $externalId; + $this->permissions = $permissions; + $this->setUserGroups($userGroups); + $this->avatarHash = $avatarHash; + $this->steamId = $steamId; } - public function getUserIdentifier(): string - { - return $this->getUsername(); + public function update( + string $username, + string $email, + string $externalId, + UserPermissions $permissions, + array $userGroups, + ?string $avatarHash, + ?int $steamId, + ): void { + $this->username = $username; + $this->email = $email; + $this->externalId = $externalId; + $this->permissions = $permissions; + $this->setUserGroups($userGroups); + $this->avatarHash = $avatarHash; + $this->steamId = $steamId; } public function getUsername(): string @@ -42,97 +70,61 @@ public function getUsername(): string return $this->username; } - public function setUsername(string $username): void - { - $this->username = $username; - } - public function getEmail(): string { return $this->email; } - public function setEmail(string $email): void - { - $this->email = $email; - } - public function getExternalId(): string { return $this->externalId; } - public function setExternalId(string $externalId): void - { - $this->externalId = $externalId; - } - public function getPermissions(): UserPermissions { return $this->permissions; } - public function setPermissions(UserPermissions $permissions): void - { - $this->permissions = $permissions; - } - - public function addUserGroup(UserGroupInterface $userGroup): void - { - if ($this->userGroups->contains($userGroup)) { - return; - } - - $this->userGroups->add($userGroup); - } - - public function removeUserGroup(UserGroupInterface $userGroup): void - { - if (!$this->userGroups->contains($userGroup)) { - return; - } - - $this->userGroups->removeElement($userGroup); - } - + /** + * @return UserGroup[] + */ public function getUserGroups(): array { return $this->userGroups->toArray(); } - public function setUserGroups(array $userGroups): void - { - $this->userGroups->clear(); - foreach ($userGroups as $userGroup) { - $this->addUserGroup($userGroup); - } - } - public function getAvatarHash(): ?string { return $this->avatarHash; } - public function setAvatarHash(?string $avatarHash): void + public function getSteamId(): ?int { - $this->avatarHash = $avatarHash; + return $this->steamId; } - public function getSteamId(): ?int + public function hasPermissions(callable $permissionsCheck): bool { - return $this->steamId; + return $permissionsCheck($this->getPermissions()) + || $this->userGroups->exists( + static fn (int $index, UserGroup $userGroup) => $permissionsCheck($userGroup->getPermissions()) + ); } - public function setSteamId(?int $steamId): void + private function addUserGroup(UserGroup $userGroup): void { - $this->steamId = $steamId; + if ($this->userGroups->contains($userGroup)) { + return; + } + + $this->userGroups->add($userGroup); } - public function hasPermissions(callable $permissionsCheck): bool + private function setUserGroups(array $userGroups): void { - return $permissionsCheck($this->getPermissions()) - || (new ArrayCollection($this->getUserGroups()))->exists( - static fn (int $index, UserGroupInterface $userGroup) => $permissionsCheck($userGroup->getPermissions()) - ); + $this->userGroups->clear(); + foreach ($userGroups as $userGroup) { + $this->addUserGroup($userGroup); + } } } diff --git a/src/Entity/User/UserInterface.php b/src/Entity/User/UserInterface.php deleted file mode 100644 index 38b2eb20..00000000 --- a/src/Entity/User/UserInterface.php +++ /dev/null @@ -1,52 +0,0 @@ -users = new ArrayCollection(); - } - public function getPermissions(): UserGroupPermissions - { - return $this->permissions; + $this->name = $name; + $this->description = $description; + $this->permissions = $permissions; + $this->setUsers($users); } - public function setPermissions(UserGroupPermissions $permissions): void - { + public function update( + string $name, + ?string $description, + UserGroupPermissions $permissions, + array $users + ): void { + $this->name = $name; + $this->description = $description; $this->permissions = $permissions; + $this->setUsers($users); } - public function addUser(UserInterface $user): void + public function getName(): string { - if ($this->users->contains($user)) { - return; - } - - $this->users->add($user); + return $this->name; } - public function removeUser(UserInterface $user): void + public function getDescription(): ?string { - if (!$this->users->contains($user)) { - return; - } + return $this->description; + } - $this->users->removeElement($user); + public function getPermissions(): UserGroupPermissions + { + return $this->permissions; } + /** + * @return User[] + */ public function getUsers(): array { return $this->users->toArray(); } - public function setUsers(array $users): void + private function setUsers(array $users): void { $this->users->clear(); foreach ($users as $user) { $this->addUser($user); } } + + private function addUser(User $user): void + { + if ($this->users->contains($user)) { + return; + } + + $this->users->add($user); + } } diff --git a/src/Entity/UserGroup/UserGroupInterface.php b/src/Entity/UserGroup/UserGroupInterface.php deleted file mode 100644 index 225ebcb8..00000000 --- a/src/Entity/UserGroup/UserGroupInterface.php +++ /dev/null @@ -1,29 +0,0 @@ -security->getUser(); $entity = $args->getObject(); - if ($currentUser instanceof UserInterface && $entity instanceof BlamableEntityInterface) { - $entity->setCreatedBy($currentUser); + if ($currentUser instanceof User && $entity instanceof AbstractBlamableEntity) { + $entity->created($currentUser); } } @@ -41,9 +41,8 @@ public function preUpdate(LifecycleEventArgs $args): void $currentUser = $this->security->getUser(); $entity = $args->getObject(); - if ($currentUser instanceof UserInterface && $entity instanceof BlamableEntityInterface) { - $entity->setLastUpdatedAt(new \DateTimeImmutable()); - $entity->setLastUpdatedBy($currentUser); + if ($currentUser instanceof User && $entity instanceof AbstractBlamableEntity) { + $entity->updated($currentUser); } } } diff --git a/src/EventSubscriber/Doctrine/ModGroupUpdatedSubscriber.php b/src/EventSubscriber/Doctrine/ModGroupUpdatedSubscriber.php index 04f6f2d4..ef62fcf0 100644 --- a/src/EventSubscriber/Doctrine/ModGroupUpdatedSubscriber.php +++ b/src/EventSubscriber/Doctrine/ModGroupUpdatedSubscriber.php @@ -4,7 +4,7 @@ namespace App\EventSubscriber\Doctrine; -use App\Entity\ModGroup\ModGroupInterface; +use App\Entity\ModGroup\ModGroup; use App\Entity\ModList\ModList; use App\Entity\User\User; use App\Repository\ModList\ModListRepository; @@ -16,7 +16,7 @@ class ModGroupUpdatedSubscriber implements EventSubscriber { - private ?ModGroupInterface $updatedModGroup = null; + private ?ModGroup $updatedModGroup = null; public function __construct( private Security $security @@ -37,7 +37,7 @@ public function preUpdate(LifecycleEventArgs $args): void $modGroup = $args->getObject(); // Do nothing if updated entity is not a Mod Group or no changes were made to the entity - if (!$modGroup instanceof ModGroupInterface || !$entityManager->getUnitOfWork()->getEntityChangeSet($modGroup)) { + if (!$modGroup instanceof ModGroup || !$entityManager->getUnitOfWork()->getEntityChangeSet($modGroup)) { return; } @@ -63,8 +63,7 @@ public function postFlush(PostFlushEventArgs $args): void // Get Mod Lists that use this Mod Group and update their "last changed by/at" properties $modLists = $modListRepository->findModListsContainingModGroup($this->updatedModGroup); foreach ($modLists as $modList) { - $modList->setLastUpdatedAt(new \DateTimeImmutable()); - $modList->setLastUpdatedBy($currentUser); + $modList->updated($currentUser); } // Clear updated Mod Group. This prevents executing this method after next flush diff --git a/src/Form/DataTransformerInterface.php b/src/Form/DataTransformerInterface.php index 93e320d5..e16ef796 100644 --- a/src/Form/DataTransformerInterface.php +++ b/src/Form/DataTransformerInterface.php @@ -4,17 +4,17 @@ namespace App\Form; -use App\Entity\EntityInterface; +use App\Entity\AbstractEntity; interface DataTransformerInterface { /** * Transform form DTO to existing entity or create new entity from given form DTO. */ - public function transformToEntity(FormDtoInterface $formDto, EntityInterface $entity = null): EntityInterface; + public function transformToEntity(FormDtoInterface $formDto, AbstractEntity $entity = null): AbstractEntity; /** * Transform existing form DTO to given entity or create new form DTO. */ - public function transformFromEntity(FormDtoInterface $formDto, EntityInterface $entity = null): FormDtoInterface; + public function transformFromEntity(FormDtoInterface $formDto, AbstractEntity $entity = null): FormDtoInterface; } diff --git a/src/Form/DataTransformerRegistry.php b/src/Form/DataTransformerRegistry.php index 875e0d37..0786577e 100644 --- a/src/Form/DataTransformerRegistry.php +++ b/src/Form/DataTransformerRegistry.php @@ -4,7 +4,7 @@ namespace App\Form; -use App\Entity\EntityInterface; +use App\Entity\AbstractEntity; class DataTransformerRegistry implements DataTransformerInterface { @@ -16,7 +16,7 @@ public function __construct( ) { } - public function transformToEntity(FormDtoInterface $formDto, EntityInterface $entity = null): EntityInterface + public function transformToEntity(FormDtoInterface $formDto, AbstractEntity $entity = null): AbstractEntity { foreach ($this->registeredDataTransformers as $registeredDataTransformer) { if ($registeredDataTransformer->supportsTransformationToEntity($formDto, $entity)) { @@ -27,7 +27,7 @@ public function transformToEntity(FormDtoInterface $formDto, EntityInterface $en throw $this->createException($formDto, $entity); } - public function transformFromEntity(FormDtoInterface $formDto, EntityInterface $entity = null): FormDtoInterface + public function transformFromEntity(FormDtoInterface $formDto, AbstractEntity $entity = null): FormDtoInterface { foreach ($this->registeredDataTransformers as $registeredDataTransformer) { if ($registeredDataTransformer->supportsTransformationFromEntity($formDto, $entity)) { @@ -38,7 +38,7 @@ public function transformFromEntity(FormDtoInterface $formDto, EntityInterface $ throw $this->createException($formDto, $entity); } - private function createException(FormDtoInterface $formDto, EntityInterface $entity = null): \Throwable + private function createException(FormDtoInterface $formDto, AbstractEntity $entity = null): \Throwable { return new \InvalidArgumentException( sprintf( diff --git a/src/Form/Dlc/DataTransformer/DlcFormDtoDataTransformer.php b/src/Form/Dlc/DataTransformer/DlcFormDtoDataTransformer.php index 23e76529..c5b2ae5d 100644 --- a/src/Form/Dlc/DataTransformer/DlcFormDtoDataTransformer.php +++ b/src/Form/Dlc/DataTransformer/DlcFormDtoDataTransformer.php @@ -4,9 +4,8 @@ namespace App\Form\Dlc\DataTransformer; +use App\Entity\AbstractEntity; use App\Entity\Dlc\Dlc; -use App\Entity\Dlc\DlcInterface; -use App\Entity\EntityInterface; use App\Form\Dlc\Dto\DlcFormDto; use App\Form\FormDtoInterface; use App\Form\RegisteredDataTransformerInterface; @@ -22,39 +21,46 @@ public function __construct( } /** - * @param DlcFormDto $formDto - * @param null|DlcInterface $entity + * @param DlcFormDto $formDto + * @param null|Dlc $entity * - * @return DlcInterface + * @return Dlc */ - public function transformToEntity(FormDtoInterface $formDto, EntityInterface $entity = null): EntityInterface + public function transformToEntity(FormDtoInterface $formDto, AbstractEntity $entity = null): AbstractEntity { $appId = SteamHelper::appUrlToAppId($formDto->getUrl()); $directory = $formDto->getDirectory(); $name = $formDto->getName() ?? substr($this->steamApiClient->getAppInfo($appId)->getName(), 0, 255); - if (!$entity instanceof DlcInterface) { - $entity = new Dlc(Uuid::uuid4(), $name, $appId, $directory); + if (!$entity instanceof Dlc) { + return new Dlc( + Uuid::uuid4(), + $name, + $formDto->getDescription(), + $appId, + $directory + ); } - $entity->setName($name); - $entity->setDescription($formDto->getDescription()); - $entity->setAppId($appId); - $entity->setDirectory($directory); + $entity->update( + $name, + $formDto->getDescription(), + $appId, + $directory + ); return $entity; } /** - * @param DlcFormDto $formDto - * @param null|DlcInterface $entity + * @param DlcFormDto $formDto + * @param null|Dlc $entity * * @return DlcFormDto */ - public function transformFromEntity(FormDtoInterface $formDto, EntityInterface $entity = null): FormDtoInterface + public function transformFromEntity(FormDtoInterface $formDto, AbstractEntity $entity = null): FormDtoInterface { - /** @var DlcInterface $entity */ - if (!$entity instanceof DlcInterface) { + if (!$entity instanceof Dlc) { return $formDto; } @@ -68,12 +74,12 @@ public function transformFromEntity(FormDtoInterface $formDto, EntityInterface $ return $formDto; } - public function supportsTransformationToEntity(FormDtoInterface $formDto, EntityInterface $entity = null): bool + public function supportsTransformationToEntity(FormDtoInterface $formDto, AbstractEntity $entity = null): bool { return $formDto instanceof DlcFormDto; } - public function supportsTransformationFromEntity(FormDtoInterface $formDto, EntityInterface $entity = null): bool + public function supportsTransformationFromEntity(FormDtoInterface $formDto, AbstractEntity $entity = null): bool { return $formDto instanceof DlcFormDto; } diff --git a/src/Form/Mod/DataTransformer/ModFormDtoDataTransformer.php b/src/Form/Mod/DataTransformer/ModFormDtoDataTransformer.php index e0da3580..902706ed 100644 --- a/src/Form/Mod/DataTransformer/ModFormDtoDataTransformer.php +++ b/src/Form/Mod/DataTransformer/ModFormDtoDataTransformer.php @@ -4,12 +4,12 @@ namespace App\Form\Mod\DataTransformer; -use App\Entity\EntityInterface; +use App\Entity\AbstractEntity; +use App\Entity\Mod\AbstractMod; use App\Entity\Mod\DirectoryMod; use App\Entity\Mod\Enum\ModSourceEnum; use App\Entity\Mod\Enum\ModStatusEnum; use App\Entity\Mod\Enum\ModTypeEnum; -use App\Entity\Mod\ModInterface; use App\Entity\Mod\SteamWorkshopMod; use App\Form\FormDtoInterface; use App\Form\Mod\Dto\ModFormDto; @@ -26,12 +26,12 @@ public function __construct( } /** - * @param ModFormDto $formDto - * @param null|ModInterface $entity + * @param ModFormDto $formDto + * @param null|AbstractMod $entity * - * @return ModInterface + * @return AbstractMod */ - public function transformToEntity(FormDtoInterface $formDto, EntityInterface $entity = null): EntityInterface + public function transformToEntity(FormDtoInterface $formDto, AbstractEntity $entity = null): AbstractEntity { /** @var ModSourceEnum $source */ $source = ModSourceEnum::get($formDto->getSource()); @@ -47,55 +47,75 @@ public function transformToEntity(FormDtoInterface $formDto, EntityInterface $en $name = $formDto->getName() ?? substr($this->steamApiClient->getWorkshopItemInfo($itemId)->getName(), 0, 255); if (!$entity instanceof SteamWorkshopMod) { - $entity = new SteamWorkshopMod(Uuid::uuid4(), $name, $type, $itemId); - } else { - $entity->setName($name); - $entity->setItemId($itemId); + return new SteamWorkshopMod( + Uuid::uuid4(), + $name, + $formDto->getDescription(), + $status, + $type, + $itemId + ); } - } elseif ($source->is(ModSourceEnum::DIRECTORY)) { + + $entity->update( + $name, + $formDto->getDescription(), + $status, + $type, + $itemId + ); + } + + if ($source->is(ModSourceEnum::DIRECTORY)) { if (!$entity instanceof DirectoryMod) { - $entity = new DirectoryMod(Uuid::uuid4(), $formDto->getName(), $type, $formDto->getDirectory()); - } else { - $entity->setName($formDto->getName()); - $entity->setDirectory($formDto->getDirectory()); + return new DirectoryMod( + Uuid::uuid4(), + $formDto->getName(), + $formDto->getDescription(), + $status, + $formDto->getDirectory(), + ); } - } - $entity->setDescription($formDto->getDescription()); - $entity->setType($type); - $entity->setStatus($status); + $entity->update( + $formDto->getName(), + $formDto->getDescription(), + $status, + $formDto->getDirectory() + ); + } return $entity; } /** - * @param ModFormDto $formDto - * @param null|ModInterface $entity + * @param ModFormDto $formDto + * @param null|AbstractMod $entity * * @return ModFormDto */ - public function transformFromEntity(FormDtoInterface $formDto, EntityInterface $entity = null): FormDtoInterface + public function transformFromEntity(FormDtoInterface $formDto, AbstractEntity $entity = null): FormDtoInterface { - /** @var ModInterface $entity */ - if (!$entity instanceof ModInterface) { + if (!$entity instanceof AbstractMod) { return $formDto; } - /** @var null|string $status */ - $status = $entity->getStatus() ? $entity->getStatus()->getValue() : null; - $formDto->setId($entity->getId()); $formDto->setName($entity->getName()); $formDto->setDescription($entity->getDescription()); - $formDto->setType($entity->getType()->getValue()); + + /** @var null|string $status */ + $status = $entity->getStatus() ? $entity->getStatus()->getValue() : null; $formDto->setStatus($status); if ($entity instanceof SteamWorkshopMod) { + $formDto->setType($entity->getType()->getValue()); $formDto->setSource(ModSourceEnum::STEAM_WORKSHOP); $itemId = $entity->getItemId(); $url = SteamHelper::itemIdToItemUrl($itemId); $formDto->setUrl($url); } elseif ($entity instanceof DirectoryMod) { + $formDto->setType(ModTypeEnum::SERVER_SIDE); $formDto->setSource(ModSourceEnum::DIRECTORY); $formDto->setDirectory($entity->getDirectory()); } @@ -103,12 +123,12 @@ public function transformFromEntity(FormDtoInterface $formDto, EntityInterface $ return $formDto; } - public function supportsTransformationToEntity(FormDtoInterface $formDto, EntityInterface $entity = null): bool + public function supportsTransformationToEntity(FormDtoInterface $formDto, AbstractEntity $entity = null): bool { return $formDto instanceof ModFormDto; } - public function supportsTransformationFromEntity(FormDtoInterface $formDto, EntityInterface $entity = null): bool + public function supportsTransformationFromEntity(FormDtoInterface $formDto, AbstractEntity $entity = null): bool { return $formDto instanceof ModFormDto; } diff --git a/src/Form/Mod/ModFormType.php b/src/Form/Mod/ModFormType.php index 25d8113c..3076fed7 100644 --- a/src/Form/Mod/ModFormType.php +++ b/src/Form/Mod/ModFormType.php @@ -8,7 +8,7 @@ use App\Entity\Mod\Enum\ModStatusEnum; use App\Entity\Mod\Enum\ModTypeEnum; use App\Entity\Permissions\AbstractPermissions; -use App\Entity\User\UserInterface; +use App\Entity\User\User; use App\Form\Mod\Dto\ModFormDto; use Symfony\Component\Form\AbstractType; use Symfony\Component\Form\Extension\Core\Type\ChoiceType; @@ -92,7 +92,7 @@ public function configureOptions(OptionsResolver $resolver): void protected function addChangeStatusType(FormBuilderInterface $builder): void { - /** @var UserInterface $currentUser */ + /** @var User $currentUser */ $currentUser = $this->security->getUser(); $canChangeStatus = $currentUser->hasPermissions( diff --git a/src/Form/ModGroup/DataTransformer/ModGroupFormDtoDataTransformer.php b/src/Form/ModGroup/DataTransformer/ModGroupFormDtoDataTransformer.php index ef09a0da..cb1bb942 100644 --- a/src/Form/ModGroup/DataTransformer/ModGroupFormDtoDataTransformer.php +++ b/src/Form/ModGroup/DataTransformer/ModGroupFormDtoDataTransformer.php @@ -4,10 +4,8 @@ namespace App\Form\ModGroup\DataTransformer; -use App\Entity\EntityInterface; -use App\Entity\Mod\ModInterface; +use App\Entity\AbstractEntity; use App\Entity\ModGroup\ModGroup; -use App\Entity\ModGroup\ModGroupInterface; use App\Form\FormDtoInterface; use App\Form\ModGroup\Dto\ModGroupFormDto; use App\Form\RegisteredDataTransformerInterface; @@ -16,34 +14,40 @@ class ModGroupFormDtoDataTransformer implements RegisteredDataTransformerInterface { /** - * @param ModGroupFormDto $formDto - * @param null|ModGroupInterface $entity + * @param ModGroupFormDto $formDto + * @param null|ModGroup $entity * - * @return ModGroupInterface + * @return ModGroup */ - public function transformToEntity(FormDtoInterface $formDto, EntityInterface $entity = null): EntityInterface + public function transformToEntity(FormDtoInterface $formDto, AbstractEntity $entity = null): AbstractEntity { - if (!$entity instanceof ModGroupInterface) { - $entity = new ModGroup(Uuid::uuid4(), $formDto->getName()); + if (!$entity instanceof ModGroup) { + return new ModGroup( + Uuid::uuid4(), + $formDto->getName(), + $formDto->getDescription(), + $formDto->getMods() + ); } - $entity->setName($formDto->getName()); - $entity->setDescription($formDto->getDescription()); - $entity->setMods($formDto->getMods()); + $entity->update( + $formDto->getName(), + $formDto->getDescription(), + $formDto->getMods() + ); return $entity; } /** - * @param ModGroupFormDto $formDto - * @param null|ModGroupInterface $entity + * @param ModGroupFormDto $formDto + * @param null|ModGroup $entity * * @return ModGroupFormDto */ - public function transformFromEntity(FormDtoInterface $formDto, EntityInterface $entity = null): FormDtoInterface + public function transformFromEntity(FormDtoInterface $formDto, AbstractEntity $entity = null): FormDtoInterface { - /** @var ModInterface $entity */ - if (!$entity instanceof ModGroupInterface) { + if (!$entity instanceof ModGroup) { return $formDto; } @@ -55,12 +59,12 @@ public function transformFromEntity(FormDtoInterface $formDto, EntityInterface $ return $formDto; } - public function supportsTransformationToEntity(FormDtoInterface $formDto, EntityInterface $entity = null): bool + public function supportsTransformationToEntity(FormDtoInterface $formDto, AbstractEntity $entity = null): bool { return $formDto instanceof ModGroupFormDto; } - public function supportsTransformationFromEntity(FormDtoInterface $formDto, EntityInterface $entity = null): bool + public function supportsTransformationFromEntity(FormDtoInterface $formDto, AbstractEntity $entity = null): bool { return $formDto instanceof ModGroupFormDto; } diff --git a/src/Form/ModGroup/Dto/ModGroupFormDto.php b/src/Form/ModGroup/Dto/ModGroupFormDto.php index ca05495a..0879b6ed 100644 --- a/src/Form/ModGroup/Dto/ModGroupFormDto.php +++ b/src/Form/ModGroup/Dto/ModGroupFormDto.php @@ -4,7 +4,7 @@ namespace App\Form\ModGroup\Dto; -use App\Entity\Mod\ModInterface; +use App\Entity\Mod\AbstractMod; use App\Form\AbstractFormDto; use App\Validator\ModGroup\UniqueModGroupName; use Doctrine\Common\Collections\ArrayCollection; @@ -31,7 +31,7 @@ class ModGroupFormDto extends AbstractFormDto protected ?string $description = null; /** - * @var Collection + * @var Collection */ protected Collection $mods; @@ -70,7 +70,7 @@ public function setDescription(?string $description): void $this->description = $description; } - public function addMod(ModInterface $mod): void + public function addMod(AbstractMod $mod): void { if ($this->mods->contains($mod)) { return; @@ -79,7 +79,7 @@ public function addMod(ModInterface $mod): void $this->mods->add($mod); } - public function removeMod(ModInterface $mod): void + public function removeMod(AbstractMod $mod): void { if (!$this->mods->contains($mod)) { return; @@ -89,7 +89,7 @@ public function removeMod(ModInterface $mod): void } /** - * @return ModInterface[] + * @return AbstractMod[] */ public function getMods(): array { @@ -97,7 +97,7 @@ public function getMods(): array } /** - * @param ModInterface[] $mods + * @param AbstractMod[] $mods */ public function setMods(array $mods): void { diff --git a/src/Form/ModList/DataTransformer/ModListFormDtoDataTransformer.php b/src/Form/ModList/DataTransformer/ModListFormDtoDataTransformer.php index 5295a16c..307f00c2 100644 --- a/src/Form/ModList/DataTransformer/ModListFormDtoDataTransformer.php +++ b/src/Form/ModList/DataTransformer/ModListFormDtoDataTransformer.php @@ -4,12 +4,10 @@ namespace App\Form\ModList\DataTransformer; -use App\Entity\EntityInterface; -use App\Entity\Mod\ModInterface; +use App\Entity\AbstractEntity; use App\Entity\ModList\ModList; -use App\Entity\ModList\ModListInterface; use App\Entity\Permissions\AbstractPermissions; -use App\Entity\User\UserInterface; +use App\Entity\User\User; use App\Form\FormDtoInterface; use App\Form\ModList\Dto\ModListFormDto; use App\Form\RegisteredDataTransformerInterface; @@ -24,18 +22,14 @@ public function __construct( } /** - * @param ModListFormDto $formDto - * @param null|ModListInterface $entity + * @param ModListFormDto $formDto + * @param null|ModList $entity * - * @return ModListInterface + * @return ModList */ - public function transformToEntity(FormDtoInterface $formDto, EntityInterface $entity = null): EntityInterface + public function transformToEntity(FormDtoInterface $formDto, AbstractEntity $entity = null): AbstractEntity { - if (!$entity instanceof ModListInterface) { - $entity = new ModList(Uuid::uuid4(), $formDto->getName()); - } - - /** @var UserInterface $currentUser */ + /** @var User $currentUser */ $currentUser = $this->security->getUser(); $canUpdate = $currentUser->hasPermissions( @@ -45,28 +39,43 @@ public function transformToEntity(FormDtoInterface $formDto, EntityInterface $en // If user has permissions set selected user as owner. Otherwise assign current user. $owner = $canUpdate ? $formDto->getOwner() : $currentUser; - $entity->setName($formDto->getName()); - $entity->setDescription($formDto->getDescription()); - $entity->setMods($formDto->getMods()); - $entity->setModGroups($formDto->getModGroups()); - $entity->setDlcs($formDto->getDlcs()); - $entity->setOwner($owner); - $entity->setActive($formDto->isActive()); - $entity->setApproved($formDto->isApproved()); + if (!$entity instanceof ModList) { + return new ModList( + Uuid::uuid4(), + $formDto->getName(), + $formDto->getDescription(), + $formDto->getMods(), + $formDto->getModGroups(), + $formDto->getDlcs(), + $owner, + $formDto->isActive(), + $formDto->isApproved(), + ); + } + + $entity->update( + $formDto->getName(), + $formDto->getDescription(), + $formDto->getMods(), + $formDto->getModGroups(), + $formDto->getDlcs(), + $owner, + $formDto->isActive(), + $formDto->isApproved(), + ); return $entity; } /** - * @param ModListFormDto $formDto - * @param null|ModListInterface $entity + * @param ModListFormDto $formDto + * @param null|ModList $entity * * @return ModListFormDto */ - public function transformFromEntity(FormDtoInterface $formDto, EntityInterface $entity = null): FormDtoInterface + public function transformFromEntity(FormDtoInterface $formDto, AbstractEntity $entity = null): FormDtoInterface { - /** @var ModInterface $entity */ - if (!$entity instanceof ModListInterface) { + if (!$entity instanceof ModList) { return $formDto; } @@ -83,12 +92,12 @@ public function transformFromEntity(FormDtoInterface $formDto, EntityInterface $ return $formDto; } - public function supportsTransformationToEntity(FormDtoInterface $formDto, EntityInterface $entity = null): bool + public function supportsTransformationToEntity(FormDtoInterface $formDto, AbstractEntity $entity = null): bool { return $formDto instanceof ModListFormDto; } - public function supportsTransformationFromEntity(FormDtoInterface $formDto, EntityInterface $entity = null): bool + public function supportsTransformationFromEntity(FormDtoInterface $formDto, AbstractEntity $entity = null): bool { return $formDto instanceof ModListFormDto; } diff --git a/src/Form/ModList/Dto/ModListFormDto.php b/src/Form/ModList/Dto/ModListFormDto.php index 01f565d4..5bc89967 100644 --- a/src/Form/ModList/Dto/ModListFormDto.php +++ b/src/Form/ModList/Dto/ModListFormDto.php @@ -4,10 +4,10 @@ namespace App\Form\ModList\Dto; -use App\Entity\Dlc\DlcInterface; -use App\Entity\Mod\ModInterface; -use App\Entity\ModGroup\ModGroupInterface; -use App\Entity\User\UserInterface; +use App\Entity\Dlc\Dlc; +use App\Entity\Mod\AbstractMod; +use App\Entity\ModGroup\ModGroup; +use App\Entity\User\User; use App\Form\AbstractFormDto; use App\Validator\ModList\UniqueModListName; use Doctrine\Common\Collections\ArrayCollection; @@ -34,21 +34,21 @@ class ModListFormDto extends AbstractFormDto protected ?string $description = null; /** - * @var Collection + * @var Collection */ protected Collection $mods; /** - * @var Collection + * @var Collection */ protected Collection $modGroups; /** - * @var Collection + * @var Collection */ protected Collection $dlcs; - protected ?UserInterface $owner = null; + protected ?User $owner = null; protected bool $active = true; @@ -91,7 +91,7 @@ public function setDescription(?string $description): void $this->description = $description; } - public function addMod(ModInterface $mod): void + public function addMod(AbstractMod $mod): void { if ($this->mods->contains($mod)) { return; @@ -100,7 +100,7 @@ public function addMod(ModInterface $mod): void $this->mods->add($mod); } - public function removeMod(ModInterface $mod): void + public function removeMod(AbstractMod $mod): void { if (!$this->mods->contains($mod)) { return; @@ -110,7 +110,7 @@ public function removeMod(ModInterface $mod): void } /** - * @return ModInterface[] + * @return AbstractMod[] */ public function getMods(): array { @@ -118,7 +118,7 @@ public function getMods(): array } /** - * @param ModInterface[] $mods + * @param AbstractMod[] $mods */ public function setMods(array $mods): void { @@ -128,7 +128,7 @@ public function setMods(array $mods): void } } - public function addModGroup(ModGroupInterface $modGroup): void + public function addModGroup(ModGroup $modGroup): void { if ($this->modGroups->contains($modGroup)) { return; @@ -137,7 +137,7 @@ public function addModGroup(ModGroupInterface $modGroup): void $this->modGroups->add($modGroup); } - public function removeModGroup(ModGroupInterface $modGroup): void + public function removeModGroup(ModGroup $modGroup): void { if (!$this->modGroups->contains($modGroup)) { return; @@ -147,7 +147,7 @@ public function removeModGroup(ModGroupInterface $modGroup): void } /** - * @return ModGroupInterface[] + * @return ModGroup[] */ public function getModGroups(): array { @@ -155,7 +155,7 @@ public function getModGroups(): array } /** - * @param ModGroupInterface[] $modGroups + * @param ModGroup[] $modGroups */ public function setModGroups(array $modGroups): void { @@ -165,7 +165,7 @@ public function setModGroups(array $modGroups): void } } - public function addDlc(DlcInterface $dlc): void + public function addDlc(Dlc $dlc): void { if ($this->dlcs->contains($dlc)) { return; @@ -174,7 +174,7 @@ public function addDlc(DlcInterface $dlc): void $this->dlcs->add($dlc); } - public function removeDlc(DlcInterface $dlc): void + public function removeDlc(Dlc $dlc): void { if (!$this->dlcs->contains($dlc)) { return; @@ -184,7 +184,7 @@ public function removeDlc(DlcInterface $dlc): void } /** - * @return DlcInterface[] + * @return Dlc[] */ public function getDlcs(): array { @@ -192,7 +192,7 @@ public function getDlcs(): array } /** - * @param DlcInterface[] $dlcs + * @param Dlc[] $dlcs */ public function setDlcs(array $dlcs): void { @@ -202,12 +202,12 @@ public function setDlcs(array $dlcs): void } } - public function getOwner(): ?UserInterface + public function getOwner(): ?User { return $this->owner; } - public function setOwner(?UserInterface $owner): void + public function setOwner(?User $owner): void { $this->owner = $owner; } diff --git a/src/Form/ModList/ModListFormType.php b/src/Form/ModList/ModListFormType.php index a178a959..59719778 100644 --- a/src/Form/ModList/ModListFormType.php +++ b/src/Form/ModList/ModListFormType.php @@ -9,7 +9,6 @@ use App\Entity\ModGroup\ModGroup; use App\Entity\Permissions\AbstractPermissions; use App\Entity\User\User; -use App\Entity\User\UserInterface; use App\Form\ModList\Dto\ModListFormDto; use Doctrine\ORM\EntityRepository; use Symfony\Bridge\Doctrine\Form\Type\EntityType; @@ -102,7 +101,7 @@ public function configureOptions(OptionsResolver $resolver): void protected function addOwnerType(FormBuilderInterface $builder): void { - /** @var UserInterface $currentUser */ + /** @var User $currentUser */ $currentUser = $this->security->getUser(); $canUpdate = $currentUser->hasPermissions( @@ -128,7 +127,7 @@ protected function addOwnerType(FormBuilderInterface $builder): void ->orderBy('u.username', 'ASC') ; }, - 'choice_label' => static fn (UserInterface $user) => $user->getUsername(), + 'choice_label' => static fn (User $user) => $user->getUsername(), ]; if (!$modListExists) { @@ -141,7 +140,7 @@ protected function addOwnerType(FormBuilderInterface $builder): void protected function addApprovedType(FormBuilderInterface $builder): void { - /** @var UserInterface $currentUser */ + /** @var User $currentUser */ $currentUser = $this->security->getUser(); $canApprove = $currentUser->hasPermissions( diff --git a/src/Form/RegisteredDataTransformerInterface.php b/src/Form/RegisteredDataTransformerInterface.php index b5e66f56..22e17d62 100644 --- a/src/Form/RegisteredDataTransformerInterface.php +++ b/src/Form/RegisteredDataTransformerInterface.php @@ -4,11 +4,11 @@ namespace App\Form; -use App\Entity\EntityInterface; +use App\Entity\AbstractEntity; interface RegisteredDataTransformerInterface extends DataTransformerInterface { - public function supportsTransformationToEntity(FormDtoInterface $formDto, EntityInterface $entity = null): bool; + public function supportsTransformationToEntity(FormDtoInterface $formDto, AbstractEntity $entity = null): bool; - public function supportsTransformationFromEntity(FormDtoInterface $formDto, EntityInterface $entity = null): bool; + public function supportsTransformationFromEntity(FormDtoInterface $formDto, AbstractEntity $entity = null): bool; } diff --git a/src/Form/User/DataTransformer/UserFormDtoDataTransformer.php b/src/Form/User/DataTransformer/UserFormDtoDataTransformer.php index 600692cf..9f432d0c 100644 --- a/src/Form/User/DataTransformer/UserFormDtoDataTransformer.php +++ b/src/Form/User/DataTransformer/UserFormDtoDataTransformer.php @@ -4,8 +4,8 @@ namespace App\Form\User\DataTransformer; -use App\Entity\EntityInterface; -use App\Entity\User\UserInterface; +use App\Entity\AbstractEntity; +use App\Entity\User\User; use App\Form\FormDtoInterface; use App\Form\RegisteredDataTransformerInterface; use App\Form\User\Dto\UserFormDto; @@ -13,43 +13,48 @@ class UserFormDtoDataTransformer implements RegisteredDataTransformerInterface { /** - * @param UserFormDto $formDto - * @param null|UserInterface $entity + * @param UserFormDto $formDto + * @param null|User $entity * - * @return UserInterface + * @return User */ - public function transformToEntity(FormDtoInterface $formDto, EntityInterface $entity = null): EntityInterface + public function transformToEntity(FormDtoInterface $formDto, AbstractEntity $entity = null): AbstractEntity { - $entity?->setSteamId((int) $formDto->getSteamId()); - $entity?->setPermissions($formDto->getPermissions()); + $entity->update( + $entity->getUsername(), + $entity->getEmail(), + $entity->getExternalId(), + $formDto->getPermissions(), + $entity->getUserGroups(), + $entity->getAvatarHash(), + $formDto->getSteamId(), + ); return $entity; } /** - * @param UserFormDto $formDto - * @param null|UserInterface $entity + * @param UserFormDto $formDto + * @param null|User $entity * * @return UserFormDto */ - public function transformFromEntity(FormDtoInterface $formDto, EntityInterface $entity = null): FormDtoInterface + public function transformFromEntity(FormDtoInterface $formDto, AbstractEntity $entity = null): FormDtoInterface { $formDto->setId($entity?->getId()); - $steamId = $entity?->getSteamId(); - $steamId = $steamId ? (string) $steamId : null; - $formDto->setSteamId($steamId); + $formDto->setSteamId($entity?->getSteamId()); $formDto->setPermissions($entity?->getPermissions()); return $formDto; } - public function supportsTransformationToEntity(FormDtoInterface $formDto, EntityInterface $entity = null): bool + public function supportsTransformationToEntity(FormDtoInterface $formDto, AbstractEntity $entity = null): bool { - return $formDto instanceof UserFormDto && $entity instanceof UserInterface; + return $formDto instanceof UserFormDto && $entity instanceof User; } - public function supportsTransformationFromEntity(FormDtoInterface $formDto, EntityInterface $entity = null): bool + public function supportsTransformationFromEntity(FormDtoInterface $formDto, AbstractEntity $entity = null): bool { - return $formDto instanceof UserFormDto && $entity instanceof UserInterface; + return $formDto instanceof UserFormDto && $entity instanceof User; } } diff --git a/src/Form/User/Dto/UserFormDto.php b/src/Form/User/Dto/UserFormDto.php index 3f003f57..c1b7a187 100644 --- a/src/Form/User/Dto/UserFormDto.php +++ b/src/Form/User/Dto/UserFormDto.php @@ -20,7 +20,7 @@ class UserFormDto extends AbstractFormDto /** * @SteamProfileId */ - protected ?string $steamId = null; + protected ?int $steamId = null; protected ?UserPermissions $permissions = null; @@ -34,12 +34,12 @@ public function setId(?UuidInterface $id): void $this->id = $id; } - public function getSteamId(): ?string + public function getSteamId(): ?int { return $this->steamId; } - public function setSteamId(?string $steamId): void + public function setSteamId(?int $steamId): void { $this->steamId = $steamId; } diff --git a/src/Form/UserGroup/DataTransformer/UserGroupFormDtoDataTransformer.php b/src/Form/UserGroup/DataTransformer/UserGroupFormDtoDataTransformer.php index ddc51dda..626bfecd 100644 --- a/src/Form/UserGroup/DataTransformer/UserGroupFormDtoDataTransformer.php +++ b/src/Form/UserGroup/DataTransformer/UserGroupFormDtoDataTransformer.php @@ -4,9 +4,8 @@ namespace App\Form\UserGroup\DataTransformer; -use App\Entity\EntityInterface; +use App\Entity\AbstractEntity; use App\Entity\UserGroup\UserGroup; -use App\Entity\UserGroup\UserGroupInterface; use App\Form\FormDtoInterface; use App\Form\RegisteredDataTransformerInterface; use App\Form\UserGroup\Dto\UserGroupFormDto; @@ -15,35 +14,43 @@ class UserGroupFormDtoDataTransformer implements RegisteredDataTransformerInterface { /** - * @param UserGroupFormDto $formDto - * @param null|UserGroupInterface $entity + * @param UserGroupFormDto $formDto + * @param null|UserGroup $entity * - * @return UserGroupInterface + * @return UserGroup */ - public function transformToEntity(FormDtoInterface $formDto, EntityInterface $entity = null): EntityInterface + public function transformToEntity(FormDtoInterface $formDto, AbstractEntity $entity = null): AbstractEntity { - if (!$entity instanceof UserGroupInterface) { - $entity = new UserGroup(Uuid::uuid4(), $formDto->getName(), $formDto->getPermissions()); + if (!$entity instanceof UserGroup) { + return new UserGroup( + Uuid::uuid4(), + $formDto->getName(), + $formDto->getDescription(), + $formDto->getPermissions(), + $formDto->getUsers() + ); } - $entity->setName($formDto->getName()); - $entity->setDescription($formDto->getDescription()); - $entity->setPermissions($formDto->getPermissions()); - $entity->setUsers($formDto->getUsers()); + $entity->update( + $formDto->getName(), + $formDto->getDescription(), + $formDto->getPermissions(), + $formDto->getUsers() + ); return $entity; } /** - * @param UserGroupFormDto $formDto - * @param null|UserGroupInterface $entity + * @param UserGroupFormDto $formDto + * @param null|UserGroup $entity * * @return UserGroupFormDto */ - public function transformFromEntity(FormDtoInterface $formDto, EntityInterface $entity = null): FormDtoInterface + public function transformFromEntity(FormDtoInterface $formDto, AbstractEntity $entity = null): FormDtoInterface { - /** @var UserGroupInterface $entity */ - if (!$entity instanceof UserGroupInterface) { + /** @var UserGroup $entity */ + if (!$entity instanceof UserGroup) { return $formDto; } @@ -56,12 +63,12 @@ public function transformFromEntity(FormDtoInterface $formDto, EntityInterface $ return $formDto; } - public function supportsTransformationToEntity(FormDtoInterface $formDto, EntityInterface $entity = null): bool + public function supportsTransformationToEntity(FormDtoInterface $formDto, AbstractEntity $entity = null): bool { return $formDto instanceof UserGroupFormDto; } - public function supportsTransformationFromEntity(FormDtoInterface $formDto, EntityInterface $entity = null): bool + public function supportsTransformationFromEntity(FormDtoInterface $formDto, AbstractEntity $entity = null): bool { return $formDto instanceof UserGroupFormDto; } diff --git a/src/Form/UserGroup/Dto/UserGroupFormDto.php b/src/Form/UserGroup/Dto/UserGroupFormDto.php index 33a904c3..ee412c93 100644 --- a/src/Form/UserGroup/Dto/UserGroupFormDto.php +++ b/src/Form/UserGroup/Dto/UserGroupFormDto.php @@ -5,7 +5,7 @@ namespace App\Form\UserGroup\Dto; use App\Entity\Permissions\UserGroupPermissions; -use App\Entity\User\UserInterface; +use App\Entity\User\User; use App\Form\AbstractFormDto; use App\Validator\UserGroup\UniqueUserGroupName; use Doctrine\Common\Collections\ArrayCollection; @@ -82,7 +82,7 @@ public function setPermissions(?UserGroupPermissions $permissions): void $this->permissions = $permissions; } - public function addUser(UserInterface $user): void + public function addUser(User $user): void { if ($this->users->contains($user)) { return; @@ -91,7 +91,7 @@ public function addUser(UserInterface $user): void $this->users->add($user); } - public function removeUser(UserInterface $user): void + public function removeUser(User $user): void { if (!$this->users->contains($user)) { return; @@ -101,7 +101,7 @@ public function removeUser(UserInterface $user): void } /** - * @return UserInterface[] + * @return User[] */ public function getUsers(): array { @@ -109,7 +109,7 @@ public function getUsers(): array } /** - * @param UserInterface[] $users + * @param User[] $users */ public function setUsers(array $users): void { diff --git a/src/Repository/Attendance/AttendanceRepository.php b/src/Repository/Attendance/AttendanceRepository.php index 9800539c..48654262 100644 --- a/src/Repository/Attendance/AttendanceRepository.php +++ b/src/Repository/Attendance/AttendanceRepository.php @@ -5,15 +5,14 @@ namespace App\Repository\Attendance; use App\Entity\Attendance\Attendance; -use App\Entity\Attendance\AttendanceInterface; use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository; use Doctrine\Persistence\ManagerRegistry; /** - * @method null|AttendanceInterface find($id, $lockMode = null, $lockVersion = null) - * @method null|AttendanceInterface findOneBy(array $criteria, array $orderBy = null) - * @method AttendanceInterface[] findAll() - * @method AttendanceInterface[] findBy(array $criteria, array $orderBy = null, $limit = null, $offset = null) + * @method null|Attendance find($id, $lockMode = null, $lockVersion = null) + * @method null|Attendance findOneBy(array $criteria, array $orderBy = null) + * @method Attendance[] findAll() + * @method Attendance[] findBy(array $criteria, array $orderBy = null, $limit = null, $offset = null) */ class AttendanceRepository extends ServiceEntityRepository { diff --git a/src/Repository/Dlc/DlcRepository.php b/src/Repository/Dlc/DlcRepository.php index 95431479..ac9f8512 100644 --- a/src/Repository/Dlc/DlcRepository.php +++ b/src/Repository/Dlc/DlcRepository.php @@ -5,15 +5,14 @@ namespace App\Repository\Dlc; use App\Entity\Dlc\Dlc; -use App\Entity\Dlc\DlcInterface; use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository; use Doctrine\Persistence\ManagerRegistry; /** - * @method null|DlcInterface find($id, $lockMode = null, $lockVersion = null) - * @method null|DlcInterface findOneBy(array $criteria, array $orderBy = null) - * @method DlcInterface[] findAll() - * @method DlcInterface[] findBy(array $criteria, array $orderBy = null, $limit = null, $offset = null) + * @method null|Dlc find($id, $lockMode = null, $lockVersion = null) + * @method null|Dlc findOneBy(array $criteria, array $orderBy = null) + * @method Dlc[] findAll() + * @method Dlc[] findBy(array $criteria, array $orderBy = null, $limit = null, $offset = null) */ class DlcRepository extends ServiceEntityRepository { diff --git a/src/Repository/Mod/ModRepository.php b/src/Repository/Mod/ModRepository.php index aeb5f07f..6615003c 100644 --- a/src/Repository/Mod/ModRepository.php +++ b/src/Repository/Mod/ModRepository.php @@ -6,22 +6,19 @@ use App\Entity\Mod\AbstractMod; use App\Entity\Mod\Enum\ModTypeEnum; -use App\Entity\Mod\ModInterface; use App\Entity\Mod\SteamWorkshopMod; -use App\Entity\Mod\SteamWorkshopModInterface; use App\Entity\ModGroup\ModGroup; use App\Entity\ModList\ModList; -use App\Entity\ModList\ModListInterface; use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository; use Doctrine\ORM\Query\Expr\Join; use Doctrine\ORM\QueryBuilder; use Doctrine\Persistence\ManagerRegistry; /** - * @method null|ModInterface find($id, $lockMode = null, $lockVersion = null) - * @method null|ModInterface findOneBy(array $criteria, array $orderBy = null) - * @method ModInterface[] findAll() - * @method ModInterface[] findBy(array $criteria, array $orderBy = null, $limit = null, $offset = null) + * @method null|AbstractMod find($id, $lockMode = null, $lockVersion = null) + * @method null|AbstractMod findOneBy(array $criteria, array $orderBy = null) + * @method AbstractMod[] findAll() + * @method AbstractMod[] findBy(array $criteria, array $orderBy = null, $limit = null, $offset = null) */ class ModRepository extends ServiceEntityRepository { @@ -31,9 +28,9 @@ public function __construct(ManagerRegistry $registry) } /** - * @return ModInterface[] + * @return AbstractMod[] */ - public function findIncludedMods(ModListInterface $modList): array + public function findIncludedMods(ModList $modList): array { $qb = $this->getEntityManager()->createQueryBuilder(); @@ -48,9 +45,9 @@ public function findIncludedMods(ModListInterface $modList): array } /** - * @return SteamWorkshopModInterface[] + * @return SteamWorkshopMod[] */ - public function findIncludedSteamWorkshopMods(ModListInterface $modList): array + public function findIncludedSteamWorkshopMods(ModList $modList): array { $qb = $this->getEntityManager()->createQueryBuilder(); $expr = $qb->expr(); @@ -71,9 +68,9 @@ public function findIncludedSteamWorkshopMods(ModListInterface $modList): array } /** - * @return SteamWorkshopModInterface[] + * @return SteamWorkshopMod[] */ - public function findIncludedOptionalSteamWorkshopMods(ModListInterface $modList): array + public function findIncludedOptionalSteamWorkshopMods(ModList $modList): array { $qb = $this->getEntityManager()->createQueryBuilder(); $expr = $qb->expr(); @@ -93,9 +90,9 @@ public function findIncludedOptionalSteamWorkshopMods(ModListInterface $modList) } /** - * @return SteamWorkshopModInterface[] + * @return SteamWorkshopMod[] */ - public function findIncludedRequiredSteamWorkshopMods(ModListInterface $modList): array + public function findIncludedRequiredSteamWorkshopMods(ModList $modList): array { $qb = $this->getEntityManager()->createQueryBuilder(); $expr = $qb->expr(); @@ -111,7 +108,7 @@ public function findIncludedRequiredSteamWorkshopMods(ModListInterface $modList) return $qb->getQuery()->getResult(); } - protected function applyIncludedModsFilter(QueryBuilder $queryBuilder, ModListInterface $modList): void + protected function applyIncludedModsFilter(QueryBuilder $queryBuilder, ModList $modList): void { $expr = $queryBuilder->expr(); diff --git a/src/Repository/ModGroup/ModGroupRepository.php b/src/Repository/ModGroup/ModGroupRepository.php index b033c3c7..2e48eb59 100644 --- a/src/Repository/ModGroup/ModGroupRepository.php +++ b/src/Repository/ModGroup/ModGroupRepository.php @@ -5,15 +5,14 @@ namespace App\Repository\ModGroup; use App\Entity\ModGroup\ModGroup; -use App\Entity\ModGroup\ModGroupInterface; use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository; use Doctrine\Persistence\ManagerRegistry; /** - * @method null|ModGroupInterface find($id, $lockMode = null, $lockVersion = null) - * @method null|ModGroupInterface findOneBy(array $criteria, array $orderBy = null) - * @method ModGroupInterface[] findAll() - * @method ModGroupInterface[] findBy(array $criteria, array $orderBy = null, $limit = null, $offset = null) + * @method null|ModGroup find($id, $lockMode = null, $lockVersion = null) + * @method null|ModGroup findOneBy(array $criteria, array $orderBy = null) + * @method ModGroup[] findAll() + * @method ModGroup[] findBy(array $criteria, array $orderBy = null, $limit = null, $offset = null) */ class ModGroupRepository extends ServiceEntityRepository { diff --git a/src/Repository/ModList/ModListRepository.php b/src/Repository/ModList/ModListRepository.php index 1ca700a9..99cdd443 100644 --- a/src/Repository/ModList/ModListRepository.php +++ b/src/Repository/ModList/ModListRepository.php @@ -4,17 +4,16 @@ namespace App\Repository\ModList; -use App\Entity\ModGroup\ModGroupInterface; +use App\Entity\ModGroup\ModGroup; use App\Entity\ModList\ModList; -use App\Entity\ModList\ModListInterface; use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository; use Doctrine\Persistence\ManagerRegistry; /** - * @method null|ModListInterface find($id, $lockMode = null, $lockVersion = null) - * @method null|ModListInterface findOneBy(array $criteria, array $orderBy = null) - * @method ModListInterface[] findAll() - * @method ModListInterface[] findBy(array $criteria, array $orderBy = null, $limit = null, $offset = null) + * @method null|ModList find($id, $lockMode = null, $lockVersion = null) + * @method null|ModList findOneBy(array $criteria, array $orderBy = null) + * @method ModList[] findAll() + * @method ModList[] findBy(array $criteria, array $orderBy = null, $limit = null, $offset = null) */ class ModListRepository extends ServiceEntityRepository { @@ -24,9 +23,9 @@ public function __construct(ManagerRegistry $registry) } /** - * @return ModListInterface[] + * @return ModList[] */ - public function findModListsContainingModGroup(ModGroupInterface $modGroup): array + public function findModListsContainingModGroup(ModGroup $modGroup): array { $qb = $this->getEntityManager()->createQueryBuilder(); $expr = $qb->expr(); diff --git a/src/Repository/User/UserRepository.php b/src/Repository/User/UserRepository.php index 96f0ad87..a2c6060b 100644 --- a/src/Repository/User/UserRepository.php +++ b/src/Repository/User/UserRepository.php @@ -5,15 +5,14 @@ namespace App\Repository\User; use App\Entity\User\User; -use App\Entity\User\UserInterface; use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository; use Doctrine\Persistence\ManagerRegistry; /** - * @method null|UserInterface find($id, $lockMode = null, $lockVersion = null) - * @method null|UserInterface findOneBy(array $criteria, array $orderBy = null) - * @method UserInterface[] findAll() - * @method UserInterface[] findBy(array $criteria, array $orderBy = null, $limit = null, $offset = null) + * @method null|User find($id, $lockMode = null, $lockVersion = null) + * @method null|User findOneBy(array $criteria, array $orderBy = null) + * @method User[] findAll() + * @method User[] findBy(array $criteria, array $orderBy = null, $limit = null, $offset = null) */ class UserRepository extends ServiceEntityRepository { @@ -22,7 +21,7 @@ public function __construct(ManagerRegistry $registry) parent::__construct($registry, User::class); } - public function findOneByExternalId(int $externalId): ?UserInterface + public function findOneByExternalId(int $externalId): ?User { return $this->findOneBy([ 'externalId' => $externalId, diff --git a/src/Security/Authenticator/DiscordAuthenticator.php b/src/Security/Authenticator/DiscordAuthenticator.php index 94b247ff..10a2b355 100644 --- a/src/Security/Authenticator/DiscordAuthenticator.php +++ b/src/Security/Authenticator/DiscordAuthenticator.php @@ -6,7 +6,6 @@ use App\Entity\Permissions\UserPermissions; use App\Entity\User\User; -use App\Entity\User\UserInterface; use App\Security\Enum\ConnectionsEnum; use App\Security\Exception\MultipleRolesFound; use App\Security\Exception\RequiredRolesNotAssignedException; @@ -75,7 +74,7 @@ public function getCredentials(Request $request): AccessToken /** * @param AccessToken $credentials */ - public function getUser($credentials, UserProviderInterface $userProvider): UserInterface + public function getUser($credentials, UserProviderInterface $userProvider): User { /** @var DiscordResourceOwner $discordResourceOwner */ $discordResourceOwner = $this->getDiscordClient()->fetchUserFromToken($credentials); @@ -128,19 +127,32 @@ public function getUser($credentials, UserProviderInterface $userProvider): User try { /** @var User $user */ $user = $userProvider->loadUserByIdentifier($externalId); - $user->setUsername($fullUsername); - $user->setEmail($email); + $user->update( + $fullUsername, + $email, + $externalId, + $user->getPermissions(), + [], + $discordResourceOwner->getAvatarHash(), + $steamId + ); } catch (UserNotFoundException $ex) { $permissions = new UserPermissions(Uuid::uuid4()); - $user = new User(Uuid::uuid4(), $fullUsername, $email, $externalId, $permissions); + $user = new User( + Uuid::uuid4(), + $fullUsername, + $email, + $externalId, + $permissions, + [], + $discordResourceOwner->getAvatarHash(), + $steamId + ); $this->em->persist($permissions); $this->em->persist($user); } - $user->setAvatarHash($discordResourceOwner->getAvatarHash()); - $user->setSteamId($steamId); - $this->em->flush(); return $user; diff --git a/src/Security/Voter/Dlc/CreateDlcVoter.php b/src/Security/Voter/Dlc/CreateDlcVoter.php index 80e68f94..b77298f4 100644 --- a/src/Security/Voter/Dlc/CreateDlcVoter.php +++ b/src/Security/Voter/Dlc/CreateDlcVoter.php @@ -5,7 +5,7 @@ namespace App\Security\Voter\Dlc; use App\Entity\Permissions\AbstractPermissions; -use App\Entity\User\UserInterface; +use App\Entity\User\User; use App\Security\Enum\PermissionsEnum; use Symfony\Component\Security\Core\Authentication\Token\TokenInterface; use Symfony\Component\Security\Core\Authorization\Voter\Voter; @@ -19,9 +19,8 @@ protected function supports(string $attribute, $subject): bool protected function voteOnAttribute(string $attribute, $subject, TokenInterface $token): bool { - /** @var null|UserInterface $currentUser */ $currentUser = $token->getUser(); - if (!$currentUser instanceof UserInterface) { + if (!$currentUser instanceof User) { return false; } diff --git a/src/Security/Voter/Dlc/DeleteDlcVoter.php b/src/Security/Voter/Dlc/DeleteDlcVoter.php index 8353bf90..5cba7cca 100644 --- a/src/Security/Voter/Dlc/DeleteDlcVoter.php +++ b/src/Security/Voter/Dlc/DeleteDlcVoter.php @@ -4,9 +4,9 @@ namespace App\Security\Voter\Dlc; -use App\Entity\Dlc\DlcInterface; +use App\Entity\Dlc\Dlc; use App\Entity\Permissions\AbstractPermissions; -use App\Entity\User\UserInterface; +use App\Entity\User\User; use App\Security\Enum\PermissionsEnum; use Symfony\Component\Security\Core\Authentication\Token\TokenInterface; use Symfony\Component\Security\Core\Authorization\Voter\Voter; @@ -15,14 +15,13 @@ class DeleteDlcVoter extends Voter { protected function supports(string $attribute, $subject): bool { - return PermissionsEnum::DLC_DELETE === $attribute && $subject instanceof DlcInterface; + return PermissionsEnum::DLC_DELETE === $attribute && $subject instanceof Dlc; } protected function voteOnAttribute(string $attribute, $subject, TokenInterface $token): bool { - /** @var null|UserInterface $currentUser */ $currentUser = $token->getUser(); - if (!$currentUser instanceof UserInterface) { + if (!$currentUser instanceof User) { return false; } diff --git a/src/Security/Voter/Dlc/ListDlcsVoter.php b/src/Security/Voter/Dlc/ListDlcsVoter.php index 5d340632..001ab019 100644 --- a/src/Security/Voter/Dlc/ListDlcsVoter.php +++ b/src/Security/Voter/Dlc/ListDlcsVoter.php @@ -5,7 +5,7 @@ namespace App\Security\Voter\Dlc; use App\Entity\Permissions\AbstractPermissions; -use App\Entity\User\UserInterface; +use App\Entity\User\User; use App\Security\Enum\PermissionsEnum; use Symfony\Component\Security\Core\Authentication\Token\TokenInterface; use Symfony\Component\Security\Core\Authorization\Voter\Voter; @@ -19,9 +19,8 @@ protected function supports(string $attribute, $subject): bool protected function voteOnAttribute(string $attribute, $subject, TokenInterface $token): bool { - /** @var null|UserInterface $currentUser */ $currentUser = $token->getUser(); - if (!$currentUser instanceof UserInterface) { + if (!$currentUser instanceof User) { return false; } diff --git a/src/Security/Voter/Dlc/UpdateDlcVoter.php b/src/Security/Voter/Dlc/UpdateDlcVoter.php index 31d34295..aaaaf5cd 100644 --- a/src/Security/Voter/Dlc/UpdateDlcVoter.php +++ b/src/Security/Voter/Dlc/UpdateDlcVoter.php @@ -4,9 +4,9 @@ namespace App\Security\Voter\Dlc; -use App\Entity\Dlc\DlcInterface; +use App\Entity\Dlc\Dlc; use App\Entity\Permissions\AbstractPermissions; -use App\Entity\User\UserInterface; +use App\Entity\User\User; use App\Security\Enum\PermissionsEnum; use Symfony\Component\Security\Core\Authentication\Token\TokenInterface; use Symfony\Component\Security\Core\Authorization\Voter\Voter; @@ -15,14 +15,13 @@ class UpdateDlcVoter extends Voter { protected function supports(string $attribute, $subject): bool { - return PermissionsEnum::DLC_UPDATE === $attribute && $subject instanceof DlcInterface; + return PermissionsEnum::DLC_UPDATE === $attribute && $subject instanceof Dlc; } protected function voteOnAttribute(string $attribute, $subject, TokenInterface $token): bool { - /** @var null|UserInterface $currentUser */ $currentUser = $token->getUser(); - if (!$currentUser instanceof UserInterface) { + if (!$currentUser instanceof User) { return false; } diff --git a/src/Security/Voter/Mod/CreateModVoter.php b/src/Security/Voter/Mod/CreateModVoter.php index b0abd1ba..fff0eab4 100644 --- a/src/Security/Voter/Mod/CreateModVoter.php +++ b/src/Security/Voter/Mod/CreateModVoter.php @@ -5,7 +5,7 @@ namespace App\Security\Voter\Mod; use App\Entity\Permissions\AbstractPermissions; -use App\Entity\User\UserInterface; +use App\Entity\User\User; use App\Security\Enum\PermissionsEnum; use Symfony\Component\Security\Core\Authentication\Token\TokenInterface; use Symfony\Component\Security\Core\Authorization\Voter\Voter; @@ -19,9 +19,8 @@ protected function supports(string $attribute, $subject): bool protected function voteOnAttribute(string $attribute, $subject, TokenInterface $token): bool { - /** @var null|UserInterface $currentUser */ $currentUser = $token->getUser(); - if (!$currentUser instanceof UserInterface) { + if (!$currentUser instanceof User) { return false; } diff --git a/src/Security/Voter/Mod/DeleteModVoter.php b/src/Security/Voter/Mod/DeleteModVoter.php index 2bb70f03..fdf84426 100644 --- a/src/Security/Voter/Mod/DeleteModVoter.php +++ b/src/Security/Voter/Mod/DeleteModVoter.php @@ -4,9 +4,9 @@ namespace App\Security\Voter\Mod; -use App\Entity\Mod\ModInterface; +use App\Entity\Mod\AbstractMod; use App\Entity\Permissions\AbstractPermissions; -use App\Entity\User\UserInterface; +use App\Entity\User\User; use App\Security\Enum\PermissionsEnum; use Symfony\Component\Security\Core\Authentication\Token\TokenInterface; use Symfony\Component\Security\Core\Authorization\Voter\Voter; @@ -15,14 +15,13 @@ class DeleteModVoter extends Voter { protected function supports(string $attribute, $subject): bool { - return PermissionsEnum::MOD_DELETE === $attribute && $subject instanceof ModInterface; + return PermissionsEnum::MOD_DELETE === $attribute && $subject instanceof AbstractMod; } protected function voteOnAttribute(string $attribute, $subject, TokenInterface $token): bool { - /** @var null|UserInterface $currentUser */ $currentUser = $token->getUser(); - if (!$currentUser instanceof UserInterface) { + if (!$currentUser instanceof User) { return false; } diff --git a/src/Security/Voter/Mod/ListModsVoter.php b/src/Security/Voter/Mod/ListModsVoter.php index 28928b0f..53cd01dd 100644 --- a/src/Security/Voter/Mod/ListModsVoter.php +++ b/src/Security/Voter/Mod/ListModsVoter.php @@ -5,7 +5,7 @@ namespace App\Security\Voter\Mod; use App\Entity\Permissions\AbstractPermissions; -use App\Entity\User\UserInterface; +use App\Entity\User\User; use App\Security\Enum\PermissionsEnum; use Symfony\Component\Security\Core\Authentication\Token\TokenInterface; use Symfony\Component\Security\Core\Authorization\Voter\Voter; @@ -19,9 +19,8 @@ protected function supports(string $attribute, $subject): bool protected function voteOnAttribute(string $attribute, $subject, TokenInterface $token): bool { - /** @var null|UserInterface $currentUser */ $currentUser = $token->getUser(); - if (!$currentUser instanceof UserInterface) { + if (!$currentUser instanceof User) { return false; } diff --git a/src/Security/Voter/Mod/UpdateModVoter.php b/src/Security/Voter/Mod/UpdateModVoter.php index 789d29c7..e776f7b3 100644 --- a/src/Security/Voter/Mod/UpdateModVoter.php +++ b/src/Security/Voter/Mod/UpdateModVoter.php @@ -4,9 +4,9 @@ namespace App\Security\Voter\Mod; -use App\Entity\Mod\ModInterface; +use App\Entity\Mod\AbstractMod; use App\Entity\Permissions\AbstractPermissions; -use App\Entity\User\UserInterface; +use App\Entity\User\User; use App\Security\Enum\PermissionsEnum; use Symfony\Component\Security\Core\Authentication\Token\TokenInterface; use Symfony\Component\Security\Core\Authorization\Voter\Voter; @@ -15,14 +15,13 @@ class UpdateModVoter extends Voter { protected function supports(string $attribute, $subject): bool { - return PermissionsEnum::MOD_UPDATE === $attribute && $subject instanceof ModInterface; + return PermissionsEnum::MOD_UPDATE === $attribute && $subject instanceof AbstractMod; } protected function voteOnAttribute(string $attribute, $subject, TokenInterface $token): bool { - /** @var null|UserInterface $currentUser */ $currentUser = $token->getUser(); - if (!$currentUser instanceof UserInterface) { + if (!$currentUser instanceof User) { return false; } diff --git a/src/Security/Voter/ModGroup/CreateModGroupVoter.php b/src/Security/Voter/ModGroup/CreateModGroupVoter.php index 2229d04a..a4abf6bf 100644 --- a/src/Security/Voter/ModGroup/CreateModGroupVoter.php +++ b/src/Security/Voter/ModGroup/CreateModGroupVoter.php @@ -5,7 +5,7 @@ namespace App\Security\Voter\ModGroup; use App\Entity\Permissions\AbstractPermissions; -use App\Entity\User\UserInterface; +use App\Entity\User\User; use App\Security\Enum\PermissionsEnum; use Symfony\Component\Security\Core\Authentication\Token\TokenInterface; use Symfony\Component\Security\Core\Authorization\Voter\Voter; @@ -19,9 +19,8 @@ protected function supports(string $attribute, $subject): bool protected function voteOnAttribute(string $attribute, $subject, TokenInterface $token): bool { - /** @var null|UserInterface $currentUser */ $currentUser = $token->getUser(); - if (!$currentUser instanceof UserInterface) { + if (!$currentUser instanceof User) { return false; } diff --git a/src/Security/Voter/ModGroup/DeleteModGroupVoter.php b/src/Security/Voter/ModGroup/DeleteModGroupVoter.php index 55c4b7d1..deb85484 100644 --- a/src/Security/Voter/ModGroup/DeleteModGroupVoter.php +++ b/src/Security/Voter/ModGroup/DeleteModGroupVoter.php @@ -4,9 +4,9 @@ namespace App\Security\Voter\ModGroup; -use App\Entity\ModGroup\ModGroupInterface; +use App\Entity\ModGroup\ModGroup; use App\Entity\Permissions\AbstractPermissions; -use App\Entity\User\UserInterface; +use App\Entity\User\User; use App\Security\Enum\PermissionsEnum; use Symfony\Component\Security\Core\Authentication\Token\TokenInterface; use Symfony\Component\Security\Core\Authorization\Voter\Voter; @@ -15,14 +15,13 @@ class DeleteModGroupVoter extends Voter { protected function supports(string $attribute, $subject): bool { - return PermissionsEnum::MOD_GROUP_DELETE === $attribute && $subject instanceof ModGroupInterface; + return PermissionsEnum::MOD_GROUP_DELETE === $attribute && $subject instanceof ModGroup; } protected function voteOnAttribute(string $attribute, $subject, TokenInterface $token): bool { - /** @var null|UserInterface $currentUser */ $currentUser = $token->getUser(); - if (!$currentUser instanceof UserInterface) { + if (!$currentUser instanceof User) { return false; } diff --git a/src/Security/Voter/ModGroup/ListModGroupsVoter.php b/src/Security/Voter/ModGroup/ListModGroupsVoter.php index 6d097e0a..3c64a77f 100644 --- a/src/Security/Voter/ModGroup/ListModGroupsVoter.php +++ b/src/Security/Voter/ModGroup/ListModGroupsVoter.php @@ -5,7 +5,7 @@ namespace App\Security\Voter\ModGroup; use App\Entity\Permissions\AbstractPermissions; -use App\Entity\User\UserInterface; +use App\Entity\User\User; use App\Security\Enum\PermissionsEnum; use Symfony\Component\Security\Core\Authentication\Token\TokenInterface; use Symfony\Component\Security\Core\Authorization\Voter\Voter; @@ -19,9 +19,8 @@ protected function supports(string $attribute, $subject): bool protected function voteOnAttribute(string $attribute, $subject, TokenInterface $token): bool { - /** @var null|UserInterface $currentUser */ $currentUser = $token->getUser(); - if (!$currentUser instanceof UserInterface) { + if (!$currentUser instanceof User) { return false; } diff --git a/src/Security/Voter/ModGroup/UpdateModGroupVoter.php b/src/Security/Voter/ModGroup/UpdateModGroupVoter.php index 8f16395c..fc907bc1 100644 --- a/src/Security/Voter/ModGroup/UpdateModGroupVoter.php +++ b/src/Security/Voter/ModGroup/UpdateModGroupVoter.php @@ -4,9 +4,9 @@ namespace App\Security\Voter\ModGroup; -use App\Entity\ModGroup\ModGroupInterface; +use App\Entity\ModGroup\ModGroup; use App\Entity\Permissions\AbstractPermissions; -use App\Entity\User\UserInterface; +use App\Entity\User\User; use App\Security\Enum\PermissionsEnum; use Symfony\Component\Security\Core\Authentication\Token\TokenInterface; use Symfony\Component\Security\Core\Authorization\Voter\Voter; @@ -15,14 +15,13 @@ class UpdateModGroupVoter extends Voter { protected function supports(string $attribute, $subject): bool { - return PermissionsEnum::MOD_GROUP_UPDATE === $attribute && $subject instanceof ModGroupInterface; + return PermissionsEnum::MOD_GROUP_UPDATE === $attribute && $subject instanceof ModGroup; } protected function voteOnAttribute(string $attribute, $subject, TokenInterface $token): bool { - /** @var null|UserInterface $currentUser */ $currentUser = $token->getUser(); - if (!$currentUser instanceof UserInterface) { + if (!$currentUser instanceof User) { return false; } diff --git a/src/Security/Voter/ModList/ApproveModListVoter.php b/src/Security/Voter/ModList/ApproveModListVoter.php index 56b5b313..ead19f27 100644 --- a/src/Security/Voter/ModList/ApproveModListVoter.php +++ b/src/Security/Voter/ModList/ApproveModListVoter.php @@ -5,7 +5,7 @@ namespace App\Security\Voter\ModList; use App\Entity\Permissions\AbstractPermissions; -use App\Entity\User\UserInterface; +use App\Entity\User\User; use App\Security\Enum\PermissionsEnum; use Symfony\Component\Security\Core\Authentication\Token\TokenInterface; use Symfony\Component\Security\Core\Authorization\Voter\Voter; @@ -19,9 +19,8 @@ protected function supports(string $attribute, $subject): bool protected function voteOnAttribute(string $attribute, $subject, TokenInterface $token): bool { - /** @var null|UserInterface $currentUser */ $currentUser = $token->getUser(); - if (!$currentUser instanceof UserInterface) { + if (!$currentUser instanceof User) { return false; } diff --git a/src/Security/Voter/ModList/CopyModListVoter.php b/src/Security/Voter/ModList/CopyModListVoter.php index 1eca7a11..ce90a1f3 100644 --- a/src/Security/Voter/ModList/CopyModListVoter.php +++ b/src/Security/Voter/ModList/CopyModListVoter.php @@ -4,9 +4,9 @@ namespace App\Security\Voter\ModList; -use App\Entity\ModList\ModListInterface; +use App\Entity\ModList\ModList; use App\Entity\Permissions\AbstractPermissions; -use App\Entity\User\UserInterface; +use App\Entity\User\User; use App\Security\Enum\PermissionsEnum; use Symfony\Component\Security\Core\Authentication\Token\TokenInterface; use Symfony\Component\Security\Core\Authorization\Voter\Voter; @@ -15,14 +15,13 @@ class CopyModListVoter extends Voter { protected function supports(string $attribute, $subject): bool { - return PermissionsEnum::MOD_LIST_COPY === $attribute && $subject instanceof ModListInterface; + return PermissionsEnum::MOD_LIST_COPY === $attribute && $subject instanceof ModList; } protected function voteOnAttribute(string $attribute, $subject, TokenInterface $token): bool { - /** @var null|UserInterface $currentUser */ $currentUser = $token->getUser(); - if (!$currentUser instanceof UserInterface) { + if (!$currentUser instanceof User) { return false; } diff --git a/src/Security/Voter/ModList/CreateModListVoter.php b/src/Security/Voter/ModList/CreateModListVoter.php index a685695f..0ba920de 100644 --- a/src/Security/Voter/ModList/CreateModListVoter.php +++ b/src/Security/Voter/ModList/CreateModListVoter.php @@ -5,7 +5,7 @@ namespace App\Security\Voter\ModList; use App\Entity\Permissions\AbstractPermissions; -use App\Entity\User\UserInterface; +use App\Entity\User\User; use App\Security\Enum\PermissionsEnum; use Symfony\Component\Security\Core\Authentication\Token\TokenInterface; use Symfony\Component\Security\Core\Authorization\Voter\Voter; @@ -19,9 +19,8 @@ protected function supports(string $attribute, $subject): bool protected function voteOnAttribute(string $attribute, $subject, TokenInterface $token): bool { - /** @var null|UserInterface $currentUser */ $currentUser = $token->getUser(); - if (!$currentUser instanceof UserInterface) { + if (!$currentUser instanceof User) { return false; } diff --git a/src/Security/Voter/ModList/DeleteModListVoter.php b/src/Security/Voter/ModList/DeleteModListVoter.php index 6f6996d0..e5e76b7c 100644 --- a/src/Security/Voter/ModList/DeleteModListVoter.php +++ b/src/Security/Voter/ModList/DeleteModListVoter.php @@ -5,9 +5,8 @@ namespace App\Security\Voter\ModList; use App\Entity\ModList\ModList; -use App\Entity\ModList\ModListInterface; use App\Entity\Permissions\AbstractPermissions; -use App\Entity\User\UserInterface; +use App\Entity\User\User; use App\Security\Enum\PermissionsEnum; use Symfony\Component\Security\Core\Authentication\Token\TokenInterface; use Symfony\Component\Security\Core\Authorization\Voter\Voter; @@ -16,14 +15,13 @@ class DeleteModListVoter extends Voter { protected function supports(string $attribute, $subject): bool { - return PermissionsEnum::MOD_LIST_DELETE === $attribute && $subject instanceof ModListInterface; + return PermissionsEnum::MOD_LIST_DELETE === $attribute && $subject instanceof ModList; } protected function voteOnAttribute(string $attribute, $subject, TokenInterface $token): bool { - /** @var null|UserInterface $currentUser */ $currentUser = $token->getUser(); - if (!$currentUser instanceof UserInterface) { + if (!$currentUser instanceof User) { return false; } diff --git a/src/Security/Voter/ModList/DownloadModListVoter.php b/src/Security/Voter/ModList/DownloadModListVoter.php index e1b962a9..533689fc 100644 --- a/src/Security/Voter/ModList/DownloadModListVoter.php +++ b/src/Security/Voter/ModList/DownloadModListVoter.php @@ -5,10 +5,8 @@ namespace App\Security\Voter\ModList; use App\Entity\ModList\ModList; -use App\Entity\ModList\ModListInterface; use App\Entity\Permissions\AbstractPermissions; use App\Entity\User\User; -use App\Entity\User\UserInterface; use App\Security\Enum\PermissionsEnum; use Symfony\Component\Security\Core\Authentication\Token\TokenInterface; use Symfony\Component\Security\Core\Authorization\Voter\Voter; @@ -17,12 +15,11 @@ class DownloadModListVoter extends Voter { protected function supports(string $attribute, $subject): bool { - return PermissionsEnum::MOD_LIST_DOWNLOAD === $attribute && $subject instanceof ModListInterface; + return PermissionsEnum::MOD_LIST_DOWNLOAD === $attribute && $subject instanceof ModList; } protected function voteOnAttribute(string $attribute, $subject, TokenInterface $token): bool { - /** @var null|UserInterface $currentUser */ $currentUser = $token->getUser(); /** @var ModList $modList */ diff --git a/src/Security/Voter/ModList/ListModListsVoter.php b/src/Security/Voter/ModList/ListModListsVoter.php index 5bcb35f5..c3e923f1 100644 --- a/src/Security/Voter/ModList/ListModListsVoter.php +++ b/src/Security/Voter/ModList/ListModListsVoter.php @@ -5,7 +5,7 @@ namespace App\Security\Voter\ModList; use App\Entity\Permissions\AbstractPermissions; -use App\Entity\User\UserInterface; +use App\Entity\User\User; use App\Security\Enum\PermissionsEnum; use Symfony\Component\Security\Core\Authentication\Token\TokenInterface; use Symfony\Component\Security\Core\Authorization\Voter\Voter; @@ -19,9 +19,8 @@ protected function supports(string $attribute, $subject): bool protected function voteOnAttribute(string $attribute, $subject, TokenInterface $token): bool { - /** @var null|UserInterface $currentUser */ $currentUser = $token->getUser(); - if (!$currentUser instanceof UserInterface) { + if (!$currentUser instanceof User) { return false; } diff --git a/src/Security/Voter/ModList/UpdateModListVoter.php b/src/Security/Voter/ModList/UpdateModListVoter.php index e382b2a8..2488b4fa 100644 --- a/src/Security/Voter/ModList/UpdateModListVoter.php +++ b/src/Security/Voter/ModList/UpdateModListVoter.php @@ -5,9 +5,8 @@ namespace App\Security\Voter\ModList; use App\Entity\ModList\ModList; -use App\Entity\ModList\ModListInterface; use App\Entity\Permissions\AbstractPermissions; -use App\Entity\User\UserInterface; +use App\Entity\User\User; use App\Security\Enum\PermissionsEnum; use Symfony\Component\Security\Core\Authentication\Token\TokenInterface; use Symfony\Component\Security\Core\Authorization\Voter\Voter; @@ -16,14 +15,13 @@ class UpdateModListVoter extends Voter { protected function supports(string $attribute, $subject): bool { - return PermissionsEnum::MOD_LIST_UPDATE === $attribute && $subject instanceof ModListInterface; + return PermissionsEnum::MOD_LIST_UPDATE === $attribute && $subject instanceof ModList; } protected function voteOnAttribute(string $attribute, $subject, TokenInterface $token): bool { - /** @var null|UserInterface $currentUser */ $currentUser = $token->getUser(); - if (!$currentUser instanceof UserInterface) { + if (!$currentUser instanceof User) { return false; } diff --git a/src/Security/Voter/User/DeleteUserVoter.php b/src/Security/Voter/User/DeleteUserVoter.php index 0c08a6bf..1296b87a 100644 --- a/src/Security/Voter/User/DeleteUserVoter.php +++ b/src/Security/Voter/User/DeleteUserVoter.php @@ -5,7 +5,7 @@ namespace App\Security\Voter\User; use App\Entity\Permissions\AbstractPermissions; -use App\Entity\User\UserInterface; +use App\Entity\User\User; use App\Security\Enum\PermissionsEnum; use Symfony\Component\Security\Core\Authentication\Token\TokenInterface; use Symfony\Component\Security\Core\Authorization\Voter\Voter; @@ -14,18 +14,17 @@ class DeleteUserVoter extends Voter { protected function supports(string $attribute, $subject): bool { - return PermissionsEnum::USER_DELETE === $attribute && $subject instanceof UserInterface; + return PermissionsEnum::USER_DELETE === $attribute && $subject instanceof User; } protected function voteOnAttribute(string $attribute, $subject, TokenInterface $token): bool { - /** @var null|UserInterface $currentUser */ $currentUser = $token->getUser(); - if (!$currentUser instanceof UserInterface) { + if (!$currentUser instanceof User) { return false; } - /** @var UserInterface $user */ + /** @var User $user */ $user = $subject; return $currentUser !== $user diff --git a/src/Security/Voter/User/ListUsersVoter.php b/src/Security/Voter/User/ListUsersVoter.php index 254d83c0..c922c575 100644 --- a/src/Security/Voter/User/ListUsersVoter.php +++ b/src/Security/Voter/User/ListUsersVoter.php @@ -5,7 +5,7 @@ namespace App\Security\Voter\User; use App\Entity\Permissions\AbstractPermissions; -use App\Entity\User\UserInterface; +use App\Entity\User\User; use App\Security\Enum\PermissionsEnum; use Symfony\Component\Security\Core\Authentication\Token\TokenInterface; use Symfony\Component\Security\Core\Authorization\Voter\Voter; @@ -19,9 +19,8 @@ protected function supports(string $attribute, $subject): bool protected function voteOnAttribute(string $attribute, $subject, TokenInterface $token): bool { - /** @var null|UserInterface $currentUser */ $currentUser = $token->getUser(); - if (!$currentUser instanceof UserInterface) { + if (!$currentUser instanceof User) { return false; } diff --git a/src/Security/Voter/User/UpdateUserVoter.php b/src/Security/Voter/User/UpdateUserVoter.php index 0e95a942..88be8440 100644 --- a/src/Security/Voter/User/UpdateUserVoter.php +++ b/src/Security/Voter/User/UpdateUserVoter.php @@ -5,7 +5,7 @@ namespace App\Security\Voter\User; use App\Entity\Permissions\AbstractPermissions; -use App\Entity\User\UserInterface; +use App\Entity\User\User; use App\Security\Enum\PermissionsEnum; use Symfony\Component\Security\Core\Authentication\Token\TokenInterface; use Symfony\Component\Security\Core\Authorization\Voter\Voter; @@ -14,14 +14,13 @@ class UpdateUserVoter extends Voter { protected function supports(string $attribute, $subject): bool { - return PermissionsEnum::USER_UPDATE === $attribute && $subject instanceof UserInterface; + return PermissionsEnum::USER_UPDATE === $attribute && $subject instanceof User; } protected function voteOnAttribute(string $attribute, $subject, TokenInterface $token): bool { - /** @var null|UserInterface $currentUser */ $currentUser = $token->getUser(); - if (!$currentUser instanceof UserInterface) { + if (!$currentUser instanceof User) { return false; } diff --git a/src/Security/Voter/UserGroup/CreateUserGroupVoter.php b/src/Security/Voter/UserGroup/CreateUserGroupVoter.php index 24b96383..6212b9d0 100644 --- a/src/Security/Voter/UserGroup/CreateUserGroupVoter.php +++ b/src/Security/Voter/UserGroup/CreateUserGroupVoter.php @@ -5,7 +5,7 @@ namespace App\Security\Voter\UserGroup; use App\Entity\Permissions\AbstractPermissions; -use App\Entity\User\UserInterface; +use App\Entity\User\User; use App\Security\Enum\PermissionsEnum; use Symfony\Component\Security\Core\Authentication\Token\TokenInterface; use Symfony\Component\Security\Core\Authorization\Voter\Voter; @@ -19,9 +19,8 @@ protected function supports(string $attribute, $subject): bool protected function voteOnAttribute(string $attribute, $subject, TokenInterface $token): bool { - /** @var null|UserInterface $currentUser */ $currentUser = $token->getUser(); - if (!$currentUser instanceof UserInterface) { + if (!$currentUser instanceof User) { return false; } diff --git a/src/Security/Voter/UserGroup/DeleteUserGroupVoter.php b/src/Security/Voter/UserGroup/DeleteUserGroupVoter.php index 4435e75c..dd54447b 100644 --- a/src/Security/Voter/UserGroup/DeleteUserGroupVoter.php +++ b/src/Security/Voter/UserGroup/DeleteUserGroupVoter.php @@ -5,8 +5,8 @@ namespace App\Security\Voter\UserGroup; use App\Entity\Permissions\AbstractPermissions; -use App\Entity\User\UserInterface; -use App\Entity\UserGroup\UserGroupInterface; +use App\Entity\User\User; +use App\Entity\UserGroup\UserGroup; use App\Security\Enum\PermissionsEnum; use Symfony\Component\Security\Core\Authentication\Token\TokenInterface; use Symfony\Component\Security\Core\Authorization\Voter\Voter; @@ -15,14 +15,13 @@ class DeleteUserGroupVoter extends Voter { protected function supports(string $attribute, $subject): bool { - return PermissionsEnum::USER_GROUP_DELETE === $attribute && $subject instanceof UserGroupInterface; + return PermissionsEnum::USER_GROUP_DELETE === $attribute && $subject instanceof UserGroup; } protected function voteOnAttribute(string $attribute, $subject, TokenInterface $token): bool { - /** @var null|UserInterface $currentUser */ $currentUser = $token->getUser(); - if (!$currentUser instanceof UserInterface) { + if (!$currentUser instanceof User) { return false; } diff --git a/src/Security/Voter/UserGroup/ListUserGroupsVoter.php b/src/Security/Voter/UserGroup/ListUserGroupsVoter.php index 9696b935..65d65674 100644 --- a/src/Security/Voter/UserGroup/ListUserGroupsVoter.php +++ b/src/Security/Voter/UserGroup/ListUserGroupsVoter.php @@ -5,7 +5,7 @@ namespace App\Security\Voter\UserGroup; use App\Entity\Permissions\AbstractPermissions; -use App\Entity\User\UserInterface; +use App\Entity\User\User; use App\Security\Enum\PermissionsEnum; use Symfony\Component\Security\Core\Authentication\Token\TokenInterface; use Symfony\Component\Security\Core\Authorization\Voter\Voter; @@ -19,9 +19,8 @@ protected function supports(string $attribute, $subject): bool protected function voteOnAttribute(string $attribute, $subject, TokenInterface $token): bool { - /** @var null|UserInterface $currentUser */ $currentUser = $token->getUser(); - if (!$currentUser instanceof UserInterface) { + if (!$currentUser instanceof User) { return false; } diff --git a/src/Security/Voter/UserGroup/UpdateUserGroupVoter.php b/src/Security/Voter/UserGroup/UpdateUserGroupVoter.php index 514d01cf..d346c4ef 100644 --- a/src/Security/Voter/UserGroup/UpdateUserGroupVoter.php +++ b/src/Security/Voter/UserGroup/UpdateUserGroupVoter.php @@ -5,8 +5,8 @@ namespace App\Security\Voter\UserGroup; use App\Entity\Permissions\AbstractPermissions; -use App\Entity\User\UserInterface; -use App\Entity\UserGroup\UserGroupInterface; +use App\Entity\User\User; +use App\Entity\UserGroup\UserGroup; use App\Security\Enum\PermissionsEnum; use Symfony\Component\Security\Core\Authentication\Token\TokenInterface; use Symfony\Component\Security\Core\Authorization\Voter\Voter; @@ -15,14 +15,13 @@ class UpdateUserGroupVoter extends Voter { protected function supports(string $attribute, $subject): bool { - return PermissionsEnum::USER_GROUP_UPDATE === $attribute && $subject instanceof UserGroupInterface; + return PermissionsEnum::USER_GROUP_UPDATE === $attribute && $subject instanceof UserGroup; } protected function voteOnAttribute(string $attribute, $subject, TokenInterface $token): bool { - /** @var null|UserInterface $currentUser */ $currentUser = $token->getUser(); - if (!$currentUser instanceof UserInterface) { + if (!$currentUser instanceof User) { return false; } diff --git a/src/Service/LegacyModListImport/DtoToEntityConverter.php b/src/Service/LegacyModListImport/DtoToEntityConverter.php index db57bbe9..cc3f7f1b 100644 --- a/src/Service/LegacyModListImport/DtoToEntityConverter.php +++ b/src/Service/LegacyModListImport/DtoToEntityConverter.php @@ -4,9 +4,9 @@ namespace App\Service\LegacyModListImport; +use App\Entity\Mod\AbstractMod; use App\Entity\Mod\DirectoryMod; use App\Entity\Mod\Enum\ModTypeEnum; -use App\Entity\Mod\ModInterface; use App\Entity\Mod\SteamWorkshopMod; use App\Service\LegacyModListImport\Dto\ModCsvEntryDto; use Ramsey\Uuid\Uuid; @@ -16,7 +16,7 @@ */ class DtoToEntityConverter { - public function convert(ModCsvEntryDto $modCsvEntryDto): ModInterface + public function convert(ModCsvEntryDto $modCsvEntryDto): AbstractMod { $id = $modCsvEntryDto->getId(); $isSteamWorkshopMod = 'local' !== strtolower($id); @@ -38,9 +38,9 @@ public function convert(ModCsvEntryDto $modCsvEntryDto): ModInterface $modTypeEnum = ModTypeEnum::get($modType); if ($isSteamWorkshopMod) { - return new SteamWorkshopMod(Uuid::uuid4(), $name, $modTypeEnum, (int) $id); + return new SteamWorkshopMod(Uuid::uuid4(), $name, null, null, $modTypeEnum, (int) $id); } - return new DirectoryMod(Uuid::uuid4(), $name, $modTypeEnum, $name); + return new DirectoryMod(Uuid::uuid4(), $name, null, null, $name); } } diff --git a/src/Service/LegacyModListImport/ModListImport.php b/src/Service/LegacyModListImport/ModListImport.php index abdd7010..e6886762 100644 --- a/src/Service/LegacyModListImport/ModListImport.php +++ b/src/Service/LegacyModListImport/ModListImport.php @@ -31,8 +31,7 @@ public function importFromDirectory(string $path, string $extension = '.csv'): v $filePath = $file->getPathname(); $baseName = $file->getBasename($extension); - $modList = new ModList(Uuid::uuid4(), $baseName); - + $mods = []; foreach ($this->modListCsvReader->readCsvRow($filePath) as $modCsvEntryDto) { $modEntity = $this->dtoToEntityConverter->convert($modCsvEntryDto); @@ -43,9 +42,21 @@ public function importFromDirectory(string $path, string $extension = '.csv'): v $existingMod = $this->directoryModRepository->findOneByDirectory($modEntity->getDirectory()); } - $modList->addMod($existingMod ?? $modEntity); + $mods[] = $existingMod ?? $modEntity; } + $modList = new ModList( + Uuid::uuid4(), + $baseName, + null, + $mods, + [], + [], + null, + true, + false + ); + if (\count($modList->getMods()) > 0) { $this->entityManager->persist($modList); } diff --git a/src/Test/Traits/AssertsTrait.php b/src/Test/Traits/AssertsTrait.php index b749f8e6..1009544e 100644 --- a/src/Test/Traits/AssertsTrait.php +++ b/src/Test/Traits/AssertsTrait.php @@ -5,7 +5,7 @@ namespace App\Test\Traits; use App\Entity\Mod\SteamWorkshopMod; -use App\Entity\ModList\ModListInterface; +use App\Entity\ModList\ModList; use Symfony\Component\DomCrawler\Crawler; use Symfony\Component\HttpFoundation\Response; @@ -19,7 +19,7 @@ public static function assertTeamSpeakUrlVisible(Crawler $crawler, bool $visible self::assertSame($expectedUrl, $url); } - public static function assertResponseContainsModListAttachmentHeader(Response $response, ModListInterface $modList): void + public static function assertResponseContainsModListAttachmentHeader(Response $response, ModList $modList): void { $contentDispositionHeader = $response->headers->get('Content-Disposition'); $pattern = "/^attachment; filename=\"ArmaForces {$modList->getName()} \\d{4}_\\d{2}_\\d{2} \\d{2}_\\d{2}.html\"$/"; diff --git a/templates/_macro/table_macro.html.twig b/templates/_macro/table_macro.html.twig index b42d7344..5860741f 100644 --- a/templates/_macro/table_macro.html.twig +++ b/templates/_macro/table_macro.html.twig @@ -45,7 +45,40 @@ {% endmacro %} {% macro row_mod_status_icon(mod) %} - {% if mod.isStatusDeprecated() %}{{ _self.icon('fas fa-skull text-warning', 'Deprecated'|trans) }}{% endif %} - {% if mod.isStatusBroken() %}{{ _self.icon('fas fa-exclamation-triangle text-warning', 'Broken'|trans) }}{% endif %} - {% if mod.isStatusDisabled() %}{{ _self.icon('fas fa-times-circle text-danger', 'Disabled'|trans) }}{% endif %} + {% if mod.status is null %} + {% elseif mod.status.is(constant('App\\Entity\\Mod\\Enum\\ModStatusEnum::DEPRECATED')) %} + {{ _self.icon('fas fa-skull text-warning', 'Deprecated'|trans) }} + {% elseif mod.status.is(constant('App\\Entity\\Mod\\Enum\\ModStatusEnum::BROKEN')) %} + {{ _self.icon('fas fa-exclamation-triangle text-warning', 'Broken'|trans) }} + {% elseif mod.status.is(constant('App\\Entity\\Mod\\Enum\\ModStatusEnum::DISABLED')) %} + {{ _self.icon('fas fa-times-circle text-danger', 'Disabled'|trans) }} + {% endif %} +{% endmacro %} + +{% macro row_mod_type_translation(mod) %} + {% if mod is instance_of('\\App\\Entity\\Mod\\SteamWorkshopMod') %} + {# @var mod \App\Entity\Mod\SteamWorkshopMod #} + {% if mod.type.is(constant('App\\Entity\\Mod\\Enum\\ModTypeEnum::SERVER_SIDE')) %} + {{ 'Server side mod'|trans }} + {% elseif mod.type.is(constant('App\\Entity\\Mod\\Enum\\ModTypeEnum::REQUIRED')) %} + {{ 'Required mod'|trans }} + {% elseif mod.type.is(constant('App\\Entity\\Mod\\Enum\\ModTypeEnum::OPTIONAL')) %} + {{ 'Optional mod'|trans }} + {% elseif mod.type.is(constant('App\\Entity\\Mod\\Enum\\ModTypeEnum::CLIENT_SIDE')) %} + {{ 'Client side mod'|trans }} + {% endif %} + {% elseif mod is instance_of('\\App\\Entity\\Mod\\DirectoryMod') %} + {# @var mod \App\Entity\Mod\DirectoryMod #} + {{ 'Server side mod'|trans }} + {% endif %} +{% endmacro %} + +{% macro row_mod_source_url(mod) %} + {% if mod is instance_of('\\App\\Entity\\Mod\\SteamWorkshopMod') %} + {# @var mod \App\Entity\Mod\SteamWorkshopMod #} + {{ 'Steam Workshop'|trans }} + {% elseif mod is instance_of('\\App\\Entity\\Mod\\DirectoryMod') %} + {# @var mod \App\Entity\Mod\DirectoryMod #} + {{ 'Directory'|trans }} + {% endif %} {% endmacro %} diff --git a/templates/_partial/mod_tabs/_mod_tabs_content.html.twig b/templates/_partial/mod_tabs/_mod_tabs_content.html.twig index 57193233..da07bcf3 100644 --- a/templates/_partial/mod_tabs/_mod_tabs_content.html.twig +++ b/templates/_partial/mod_tabs/_mod_tabs_content.html.twig @@ -3,14 +3,14 @@ {% set active = active|default('') %}
- {% include '_partial/mod_tabs/_mod_tabs_table.html.twig' with { form: form, modType: constant('\\App\\Entity\\Mod\\Enum\\ModTypeEnum::SERVER_SIDE') } %} + {% include '_partial/mod_tabs/_mod_tabs_table.html.twig' with { form: form, modTypeFilter: constant('\\App\\Entity\\Mod\\Enum\\ModTypeEnum::SERVER_SIDE') } %}
- {% include '_partial/mod_tabs/_mod_tabs_table.html.twig' with { form: form, modType: constant('\\App\\Entity\\Mod\\Enum\\ModTypeEnum::REQUIRED') } %} + {% include '_partial/mod_tabs/_mod_tabs_table.html.twig' with { form: form, modTypeFilter: constant('\\App\\Entity\\Mod\\Enum\\ModTypeEnum::REQUIRED') } %}
- {% include '_partial/mod_tabs/_mod_tabs_table.html.twig' with { form: form, modType: constant('\\App\\Entity\\Mod\\Enum\\ModTypeEnum::OPTIONAL') } %} + {% include '_partial/mod_tabs/_mod_tabs_table.html.twig' with { form: form, modTypeFilter: constant('\\App\\Entity\\Mod\\Enum\\ModTypeEnum::OPTIONAL') } %}
- {% include '_partial/mod_tabs/_mod_tabs_table.html.twig' with { form: form, modType: constant('\\App\\Entity\\Mod\\Enum\\ModTypeEnum::CLIENT_SIDE') } %} + {% include '_partial/mod_tabs/_mod_tabs_table.html.twig' with { form: form, modTypeFilter: constant('\\App\\Entity\\Mod\\Enum\\ModTypeEnum::CLIENT_SIDE') } %}
diff --git a/templates/_partial/mod_tabs/_mod_tabs_table.html.twig b/templates/_partial/mod_tabs/_mod_tabs_table.html.twig index 13c68fff..f5fe915b 100644 --- a/templates/_partial/mod_tabs/_mod_tabs_table.html.twig +++ b/templates/_partial/mod_tabs/_mod_tabs_table.html.twig @@ -13,10 +13,19 @@ {% block table_body %} {% set rowNo = 1 %} - {# @var mod \App\Entity\Mod\ModInterface #} + {# @var mod \App\Entity\Mod\AbstractMod #} {% for child in form.children %} {% set mod = form.vars.choices[loop.index0].data %} - {% if mod.type.value == modType %} + {% if mod is instance_of('\\App\\Entity\\Mod\\SteamWorkshopMod') %} + {# @var mod \App\Entity\Mod\SteamWorkshopMod #} + {% set modType = mod.type.value %} + {% elseif mod is instance_of('\\App\\Entity\\Mod\\DirectoryMod') %} + {# @var mod \App\Entity\Mod\DirectoryMod #} + {# Treat Directory mods as Server side mods for BC #} + {% set modType = constant('App\\Entity\\Mod\\Enum\\ModTypeEnum::SERVER_SIDE') %} + {% endif %} + + {% if modType == modTypeFilter %} {{ rowNo }} @@ -26,11 +35,7 @@ {{ tableMacro.row_name_with_description(mod.name, mod.description) }} - {% if mod.isSteamWorkshopMod() %} - {{ 'Steam Workshop'|trans }} - {% elseif mod.isDirectoryMod() %} - {{ 'Directory'|trans }} - {% endif %} + {{ tableMacro.row_mod_source_url(mod) }} {{- form_widget(child, { diff --git a/templates/mod/list.html.twig b/templates/mod/list.html.twig index ad3a143d..79d8b3a3 100644 --- a/templates/mod/list.html.twig +++ b/templates/mod/list.html.twig @@ -27,21 +27,17 @@ {% endblock %} {% block table_body %} - {# @var mod \App\Entity\Mod\ModInterface #} + {# @var mod \App\Entity\Mod\AbstractMod #} {% for mod in mods %} {{ loop.index }} {{ tableMacro.row_mod_status_icon(mod) }} {{ tableMacro.row_name_with_description(mod.name, mod.description) }} - {% if mod.isTypeServerSide() %}{{ 'Server side mod'|trans }}{% endif %} - {% if mod.isTypeRequired() %}{{ 'Required mod'|trans }}{% endif %} - {% if mod.isTypeOptional() %}{{ 'Optional mod'|trans }}{% endif %} - {% if mod.isTypeClientSide() %}{{ 'Client side mod'|trans }}{% endif %} + {{ tableMacro.row_mod_type_translation(mod) }} - {% if mod.isSteamWorkshopMod() %}{{ 'Steam Workshop'|trans }}{% endif %} - {% if mod.isDirectoryMod() %}{{ 'Directory'|trans }}{% endif %} + {{ tableMacro.row_name_with_description(mod.name, mod.description) }} {{ tableMacro.row_blamable(mod.lastUpdatedAt, mod.lastUpdatedBy) }} diff --git a/templates/user_group/_partial/_users_table.html.twig b/templates/user_group/_partial/_users_table.html.twig index 88773c1a..7492f96c 100644 --- a/templates/user_group/_partial/_users_table.html.twig +++ b/templates/user_group/_partial/_users_table.html.twig @@ -15,7 +15,7 @@ {% block table_body %} {% set rowNo = 1 %} - {# @var user \App\Entity\User\UserInterface #} + {# @var user \App\Entity\User\User #} {% for child in form.children %} {% set user = form.vars.choices[loop.index0].data %} diff --git a/tests/unit/EventSubscriber/Doctrine/EntityBlamableSubscriberTest.php b/tests/unit/EventSubscriber/Doctrine/EntityBlamableSubscriberTest.php index 7c945bae..858f0743 100644 --- a/tests/unit/EventSubscriber/Doctrine/EntityBlamableSubscriberTest.php +++ b/tests/unit/EventSubscriber/Doctrine/EntityBlamableSubscriberTest.php @@ -4,8 +4,8 @@ namespace App\Tests\Unit\EventSubscriber\Doctrine; -use App\Entity\BlamableEntityInterface; -use App\Entity\User\UserInterface; +use App\Entity\AbstractBlamableEntity; +use App\Entity\User\User; use App\EventSubscriber\Doctrine\EntityBlamableSubscriber; use Doctrine\ORM\Event\LifecycleEventArgs; use Doctrine\ORM\Events; @@ -40,13 +40,13 @@ public function getSubscribedEvents(): void */ public function prePersist_validEventArgs_entityUpdated(): void { - $user = $this->createMock(UserInterface::class); + $user = $this->createMock(User::class); - $entity = $this->createMock(BlamableEntityInterface::class); + $entity = $this->createMock(AbstractBlamableEntity::class); $entity ->expects(static::once()) - ->method('setCreatedBy') - ->with(static::isInstanceOf(UserInterface::class)) + ->method('created') + ->with(static::isInstanceOf(User::class)) ; $security = $this->createMock(Security::class); @@ -80,18 +80,13 @@ public function prePersist_invalidEventArgs_entityNotUpdated(mixed $user, mixed */ public function preUpdate_validEventArgs_entityUpdated(): void { - $user = $this->createMock(UserInterface::class); + $user = $this->createMock(User::class); - $entity = $this->createMock(BlamableEntityInterface::class); + $entity = $this->createMock(AbstractBlamableEntity::class); $entity ->expects(static::once()) - ->method('setLastUpdatedBy') - ->with(static::isInstanceOf(UserInterface::class)) - ; - $entity - ->expects(static::once()) - ->method('setLastUpdatedAt') - ->with(static::isInstanceOf(\DateTimeInterface::class)) + ->method('updated') + ->with(static::isInstanceOf(User::class)) ; $security = $this->createMock(Security::class); @@ -122,13 +117,12 @@ public function preUpdate_invalidEventArgs_entityNotUpdated(mixed $user, mixed $ public function invalidEventArgs(): array { - $validUser = $this->createMock(UserInterface::class); + $validUser = $this->createMock(User::class); $invalidUser = null; - $validEntity = $this->createMock(BlamableEntityInterface::class); - $validEntity->expects(static::never())->method('setCreatedBy'); - $validEntity->expects(static::never())->method('setLastUpdatedBy'); - $validEntity->expects(static::never())->method('setLastUpdatedAt'); + $validEntity = $this->createMock(AbstractBlamableEntity::class); + $validEntity->expects(static::never())->method('created'); + $validEntity->expects(static::never())->method('updated'); $invalidEntity = $this->getMockBuilder(\stdClass::class)->getMock(); $invalidEntity->expects(static::never())->method(static::anything());