diff --git a/composer.json b/composer.json index c39543af..6a10c612 100644 --- a/composer.json +++ b/composer.json @@ -72,7 +72,8 @@ "psr-4": { "Admin\\App\\": "src/App/src/", "Admin\\Admin\\": "src/Admin/src/", - "Admin\\Setting\\": "src/Setting/src/" + "Admin\\Setting\\": "src/Setting/src/", + "Admin\\Fixtures\\": "data/doctrine/fixtures" } }, "autoload-dev": { diff --git a/config/autoload/authentication.global.php b/config/autoload/authentication.global.php index bd0d546b..f8f71cf0 100644 --- a/config/autoload/authentication.global.php +++ b/config/autoload/authentication.global.php @@ -8,7 +8,7 @@ 'doctrine' => [ 'authentication' => [ 'orm_default' => [ - 'object_manager' => 'doctrine.entitymanager.orm_default', + 'object_manager' => 'doctrine.entity_manager.orm_default', 'identity_class' => Admin::class, 'identity_property' => 'identity', 'credential_property' => 'password', diff --git a/config/autoload/doctrine.global.php b/config/autoload/doctrine.global.php index 3b89f8bd..82eb7f08 100644 --- a/config/autoload/doctrine.global.php +++ b/config/autoload/doctrine.global.php @@ -2,6 +2,9 @@ declare(strict_types=1); +use Admin\Admin\DBAL\Types\AdminStatusEnumType; +use Admin\App\DBAL\Types\SuccessFailureEnumType; +use Admin\App\DBAL\Types\YesNoEnumType; use Admin\App\Resolver\EntityListenerResolver; use Doctrine\Persistence\Mapping\Driver\MappingDriverChain; use Dot\Cache\Adapter\ArrayAdapter; @@ -11,7 +14,17 @@ use Ramsey\Uuid\Doctrine\UuidType; return [ - 'doctrine' => [ + 'doctrine' => [ + 'cache' => [ + 'array' => [ + 'class' => ArrayAdapter::class, + ], + 'filesystem' => [ + 'class' => FilesystemAdapter::class, + 'directory' => getcwd() . '/data/cache', + 'namespace' => 'doctrine', + ], + ], 'configuration' => [ 'orm_default' => [ 'entity_listener_resolver' => EntityListenerResolver::class, @@ -49,17 +62,11 @@ UuidType::NAME => UuidType::class, UuidBinaryType::NAME => UuidBinaryType::class, UuidBinaryOrderedTimeType::NAME => UuidBinaryOrderedTimeType::class, - ], - 'cache' => [ - 'array' => [ - 'class' => ArrayAdapter::class, - ], - 'filesystem' => [ - 'class' => FilesystemAdapter::class, - 'directory' => getcwd() . '/data/cache', - 'namespace' => 'doctrine', - ], + AdminStatusEnumType::NAME => AdminStatusEnumType::class, + SuccessFailureEnumType::NAME => SuccessFailureEnumType::class, + YesNoEnumType::NAME => YesNoEnumType::class, ], 'fixtures' => getcwd() . '/data/doctrine/fixtures', ], + 'resultCacheLifetime' => 600, ]; diff --git a/config/cli-config.php b/config/cli-config.php index c39570bd..7385bed1 100644 --- a/config/cli-config.php +++ b/config/cli-config.php @@ -13,7 +13,4 @@ $entityManager = $container->get(EntityManager::class); -// register enum type for doctrine -$entityManager->getConnection()->getDatabasePlatform()->registerDoctrineTypeMapping('enum', 'string'); - return DependencyFactory::fromEntityManager($config, new ExistingEntityManager($entityManager)); diff --git a/data/doctrine/fixtures/AdminLoader.php b/data/doctrine/fixtures/AdminLoader.php index 8dd78b91..bbf3e79b 100644 --- a/data/doctrine/fixtures/AdminLoader.php +++ b/data/doctrine/fixtures/AdminLoader.php @@ -10,6 +10,7 @@ use Doctrine\Common\DataFixtures\FixtureInterface; use Doctrine\Persistence\ObjectManager; +use function assert; use function password_hash; use const PASSWORD_DEFAULT; @@ -18,14 +19,15 @@ class AdminLoader implements FixtureInterface, DependentFixtureInterface { public function load(ObjectManager $manager): void { + $role = $manager->getRepository(AdminRole::class)->findOneBy(['name' => AdminRole::ROLE_SUPERUSER]); + assert($role instanceof AdminRole); + $admin = (new Admin()) ->setIdentity('admin') ->setPassword(password_hash('dotadmin', PASSWORD_DEFAULT)) ->setFirstName('DotKernel') ->setLastName('Admin') - ->addRole( - $manager->getRepository(AdminRole::class)->findOneBy(['name' => AdminRole::ROLE_SUPERUSER]) - ); + ->addRole($role); $manager->persist($admin); $manager->flush(); diff --git a/data/doctrine/migrations/Version20240627134952.php b/data/doctrine/migrations/Version20241120150458.php similarity index 56% rename from data/doctrine/migrations/Version20240627134952.php rename to data/doctrine/migrations/Version20241120150458.php index 243eed9d..c00cd8f2 100644 --- a/data/doctrine/migrations/Version20240627134952.php +++ b/data/doctrine/migrations/Version20241120150458.php @@ -10,7 +10,7 @@ /** * Auto-generated Migration: Please modify to your needs! */ -final class Version20240627134952 extends AbstractMigration +final class Version20241120150458 extends AbstractMigration { public function getDescription(): string { @@ -20,11 +20,11 @@ public function getDescription(): string public function up(Schema $schema): void { // this up() migration is auto-generated, please modify it to your needs - $this->addSql('CREATE TABLE admin (uuid BINARY(16) NOT NULL, identity VARCHAR(100) NOT NULL, firstName VARCHAR(255) DEFAULT NULL, lastName VARCHAR(255) DEFAULT NULL, password VARCHAR(100) NOT NULL, status ENUM(\'pending\', \'active\'), created DATETIME NOT NULL, updated DATETIME DEFAULT NULL, UNIQUE INDEX UNIQ_880E0D766A95E9C4 (identity), PRIMARY KEY(uuid)) DEFAULT CHARACTER SET utf8mb4'); + $this->addSql('CREATE TABLE admin (identity VARCHAR(100) NOT NULL, firstName VARCHAR(255) DEFAULT NULL, lastName VARCHAR(255) DEFAULT NULL, password VARCHAR(100) NOT NULL, status ENUM(\'active\', \'inactive\') DEFAULT \'active\' NOT NULL, uuid BINARY(16) NOT NULL, created DATETIME NOT NULL, updated DATETIME DEFAULT NULL, UNIQUE INDEX UNIQ_880E0D766A95E9C4 (identity), PRIMARY KEY(uuid)) DEFAULT CHARACTER SET utf8mb4'); $this->addSql('CREATE TABLE admin_roles (userUuid BINARY(16) NOT NULL, roleUuid BINARY(16) NOT NULL, INDEX IDX_1614D53DD73087E9 (userUuid), INDEX IDX_1614D53D88446210 (roleUuid), PRIMARY KEY(userUuid, roleUuid)) DEFAULT CHARACTER SET utf8mb4'); - $this->addSql('CREATE TABLE admin_login (uuid BINARY(16) NOT NULL, adminIp VARCHAR(50) DEFAULT NULL, country VARCHAR(50) DEFAULT NULL, continent VARCHAR(50) DEFAULT NULL, organization VARCHAR(50) DEFAULT NULL, deviceType VARCHAR(20) DEFAULT NULL, deviceBrand VARCHAR(20) DEFAULT NULL, deviceModel VARCHAR(40) DEFAULT NULL, isMobile ENUM(\'yes\', \'no\'), osName VARCHAR(20) DEFAULT NULL, osVersion VARCHAR(20) DEFAULT NULL, osPlatform VARCHAR(20) DEFAULT NULL, clientType VARCHAR(20) DEFAULT NULL, clientName VARCHAR(40) DEFAULT NULL, clientEngine VARCHAR(20) DEFAULT NULL, clientVersion VARCHAR(20) DEFAULT NULL, loginStatus ENUM(\'success\', \'fail\'), identity VARCHAR(100) DEFAULT NULL, created DATETIME NOT NULL, updated DATETIME DEFAULT NULL, PRIMARY KEY(uuid)) DEFAULT CHARACTER SET utf8mb4'); - $this->addSql('CREATE TABLE admin_role (uuid BINARY(16) NOT NULL, name VARCHAR(30) NOT NULL, created DATETIME NOT NULL, updated DATETIME DEFAULT NULL, UNIQUE INDEX UNIQ_7770088A5E237E06 (name), PRIMARY KEY(uuid)) DEFAULT CHARACTER SET utf8mb4'); - $this->addSql('CREATE TABLE settings (uuid BINARY(16) NOT NULL, identifier VARCHAR(50) NOT NULL, value LONGTEXT NOT NULL, created DATETIME NOT NULL, updated DATETIME DEFAULT NULL, admin_uuid BINARY(16) DEFAULT NULL, INDEX IDX_E545A0C5F166D246 (admin_uuid), PRIMARY KEY(uuid)) DEFAULT CHARACTER SET utf8mb4'); + $this->addSql('CREATE TABLE admin_login (adminIp VARCHAR(50) DEFAULT NULL, country VARCHAR(50) DEFAULT NULL, continent VARCHAR(50) DEFAULT NULL, organization VARCHAR(50) DEFAULT NULL, deviceType VARCHAR(20) DEFAULT NULL, deviceBrand VARCHAR(20) DEFAULT NULL, deviceModel VARCHAR(40) DEFAULT NULL, isMobile ENUM(\'yes\', \'no\') NOT NULL, osName VARCHAR(20) DEFAULT NULL, osVersion VARCHAR(20) DEFAULT NULL, osPlatform VARCHAR(20) DEFAULT NULL, clientType VARCHAR(20) DEFAULT NULL, clientName VARCHAR(40) DEFAULT NULL, clientEngine VARCHAR(20) DEFAULT NULL, clientVersion VARCHAR(20) DEFAULT NULL, loginStatus ENUM(\'success\', \'failure\') NOT NULL, identity VARCHAR(100) DEFAULT NULL, uuid BINARY(16) NOT NULL, created DATETIME NOT NULL, updated DATETIME DEFAULT NULL, PRIMARY KEY(uuid)) DEFAULT CHARACTER SET utf8mb4'); + $this->addSql('CREATE TABLE admin_role (name VARCHAR(30) NOT NULL, uuid BINARY(16) NOT NULL, created DATETIME NOT NULL, updated DATETIME DEFAULT NULL, UNIQUE INDEX UNIQ_7770088A5E237E06 (name), PRIMARY KEY(uuid)) DEFAULT CHARACTER SET utf8mb4'); + $this->addSql('CREATE TABLE settings (identifier VARCHAR(50) NOT NULL, value LONGTEXT NOT NULL, uuid BINARY(16) NOT NULL, created DATETIME NOT NULL, updated DATETIME DEFAULT NULL, admin_uuid BINARY(16) DEFAULT NULL, INDEX IDX_E545A0C5F166D246 (admin_uuid), PRIMARY KEY(uuid)) DEFAULT CHARACTER SET utf8mb4'); $this->addSql('ALTER TABLE admin_roles ADD CONSTRAINT FK_1614D53DD73087E9 FOREIGN KEY (userUuid) REFERENCES admin (uuid)'); $this->addSql('ALTER TABLE admin_roles ADD CONSTRAINT FK_1614D53D88446210 FOREIGN KEY (roleUuid) REFERENCES admin_role (uuid)'); $this->addSql('ALTER TABLE settings ADD CONSTRAINT FK_E545A0C5F166D246 FOREIGN KEY (admin_uuid) REFERENCES admin (uuid)'); diff --git a/src/Admin/src/Controller/AdminController.php b/src/Admin/src/Controller/AdminController.php index 094e8149..205340cc 100644 --- a/src/Admin/src/Controller/AdminController.php +++ b/src/Admin/src/Controller/AdminController.php @@ -7,7 +7,7 @@ use Admin\Admin\Adapter\AuthenticationAdapter; use Admin\Admin\Entity\Admin; use Admin\Admin\Entity\AdminIdentity; -use Admin\Admin\Entity\AdminLogin; +use Admin\Admin\Enum\AdminStatusEnum; use Admin\Admin\Form\AccountForm; use Admin\Admin\Form\AdminDeleteForm; use Admin\Admin\Form\AdminForm; @@ -17,6 +17,7 @@ use Admin\Admin\InputFilter\EditAdminInputFilter; use Admin\Admin\Service\AdminServiceInterface; use Admin\App\Common\ServerRequestAwareTrait; +use Admin\App\Enum\SuccessFailureEnum; use Admin\App\Exception\IdentityException; use Admin\App\Message; use Admin\App\Pagination; @@ -269,9 +270,9 @@ public function loginAction(): ResponseInterface $this->adminService->logAdminVisit( $this->getServerParams(), $data['username'], - AdminLogin::LOGIN_SUCCESS + SuccessFailureEnum::Success ); - if ($identity->getStatus() === Admin::STATUS_INACTIVE) { + if ($identity->getStatus() === AdminStatusEnum::Inactive) { $this->authenticationService->clearIdentity(); $this->messenger->addError('Admin is inactive', 'user-login'); $this->messenger->addData('shouldRebind', true); @@ -285,7 +286,7 @@ public function loginAction(): ResponseInterface $this->adminService->logAdminVisit( $this->getServerParams(), $data['username'], - AdminLogin::LOGIN_FAIL + SuccessFailureEnum::Failure ); $this->messenger->addData('shouldRebind', true); $this->forms->saveState($form); @@ -449,7 +450,7 @@ public function simpleLoginsAction(): ResponseInterface 'params' => $params, 'logins' => $logins['rows'], 'settings' => $settings?->getValue() ?? [], - 'statuses' => [AdminLogin::LOGIN_FAIL, AdminLogin::LOGIN_SUCCESS], + 'statuses' => SuccessFailureEnum::cases(), 'identities' => $this->adminService->getAdminLoginIdentities(), 'identifier' => Setting::IDENTIFIER_TABLE_ADMIN_LIST_LOGINS_SELECTED_COLUMNS, 'pagination' => new Pagination($logins['total'], $params['offset'], $params['limit']), diff --git a/src/Admin/src/DBAL/Types/AdminStatusEnumType.php b/src/Admin/src/DBAL/Types/AdminStatusEnumType.php new file mode 100644 index 00000000..67a48d3b --- /dev/null +++ b/src/Admin/src/DBAL/Types/AdminStatusEnumType.php @@ -0,0 +1,23 @@ + AdminStatusEnum::Active])] + protected AdminStatusEnum $status = AdminStatusEnum::Active; #[ORM\ManyToMany(targetEntity: AdminRole::class, fetch: "EAGER")] #[ORM\JoinTable(name: "admin_roles")] @@ -57,7 +45,7 @@ class Admin extends AbstractEntity implements AdminInterface #[ORM\InverseJoinColumn(name: "roleUuid", referencedColumnName: "uuid")] protected Collection $roles; - #[ORM\OneToMany(mappedBy: 'admin', targetEntity: Setting::class)] + #[ORM\OneToMany(targetEntity: Setting::class, mappedBy: 'admin')] protected Collection $settings; public function __construct() @@ -137,12 +125,12 @@ public function verifyPassword(string $password): bool return password_verify($password, $this->getPassword()); } - public function getStatus(): string + public function getStatus(): AdminStatusEnum { return $this->status; } - public function setStatus(string $status): self + public function setStatus(AdminStatusEnum $status): self { $this->status = $status; diff --git a/src/Admin/src/Entity/AdminIdentity.php b/src/Admin/src/Entity/AdminIdentity.php index c4344e7a..1b35e836 100644 --- a/src/Admin/src/Entity/AdminIdentity.php +++ b/src/Admin/src/Entity/AdminIdentity.php @@ -4,6 +4,7 @@ namespace Admin\Admin\Entity; +use Admin\Admin\Enum\AdminStatusEnum; use Mezzio\Authentication\UserInterface; class AdminIdentity implements UserInterface @@ -11,7 +12,7 @@ class AdminIdentity implements UserInterface public function __construct( protected string $uuid, protected string $identity, - protected string $status, + protected AdminStatusEnum $status, protected array $roles = [], protected array $details = [] ) { @@ -27,7 +28,7 @@ public function getIdentity(): string return $this->identity; } - public function getStatus(): string + public function getStatus(): AdminStatusEnum { return $this->status; } diff --git a/src/Admin/src/Entity/AdminInterface.php b/src/Admin/src/Entity/AdminInterface.php index a6f17451..7b7dc914 100644 --- a/src/Admin/src/Entity/AdminInterface.php +++ b/src/Admin/src/Entity/AdminInterface.php @@ -4,6 +4,7 @@ namespace Admin\Admin\Entity; +use Admin\Admin\Enum\AdminStatusEnum; use Doctrine\Common\Collections\ArrayCollection; interface AdminInterface @@ -26,9 +27,9 @@ public function getPassword(): ?string; public function setPassword(string $password): self; - public function getStatus(): string; + public function getStatus(): AdminStatusEnum; - public function setStatus(string $status): self; + public function setStatus(AdminStatusEnum $status): self; public function getRoles(): array; diff --git a/src/Admin/src/Entity/AdminLogin.php b/src/Admin/src/Entity/AdminLogin.php index 4203634d..4eead57c 100644 --- a/src/Admin/src/Entity/AdminLogin.php +++ b/src/Admin/src/Entity/AdminLogin.php @@ -7,6 +7,8 @@ use Admin\Admin\Repository\AdminLoginRepository; use Admin\App\Entity\AbstractEntity; use Admin\App\Entity\TimestampsTrait; +use Admin\App\Enum\SuccessFailureEnum; +use Admin\App\Enum\YesNoEnum; use Doctrine\ORM\Mapping as ORM; #[ORM\Entity(repositoryClass: AdminLoginRepository::class)] @@ -17,11 +19,6 @@ class AdminLogin extends AbstractEntity { use TimestampsTrait; - public const IS_MOBILE_YES = 'yes'; - public const IS_MOBILE_NO = 'no'; - public const LOGIN_SUCCESS = 'success'; - public const LOGIN_FAIL = 'fail'; - #[ORM\Column(name: "adminIp", type: "string", length: 50, nullable: true)] protected ?string $adminIp = null; @@ -43,13 +40,8 @@ class AdminLogin extends AbstractEntity #[ORM\Column(name: "deviceModel", type: "string", length: 40, nullable: true)] protected ?string $deviceModel = null; - #[ORM\Column( - name: "isMobile", - type: "string", - nullable: true, - columnDefinition: "ENUM('yes', 'no')" - )] - protected ?string $isMobile = null; + #[ORM\Column(type: "yes_no_enum")] + protected ?YesNoEnum $isMobile = null; #[ORM\Column(name: "osName", type: "string", length: 20, nullable: true)] protected ?string $osName = null; @@ -72,8 +64,8 @@ class AdminLogin extends AbstractEntity #[ORM\Column(name: "clientVersion", type: "string", length: 20, nullable: true)] protected ?string $clientVersion = null; - #[ORM\Column(name: "loginStatus", type: "string", nullable: true, columnDefinition: "ENUM('success', 'fail')")] - protected ?string $loginStatus = null; + #[ORM\Column(type: "success_failure_enum")] + protected ?SuccessFailureEnum $loginStatus = null; #[ORM\Column(name: "identity", type: "string", length: 100, nullable: true)] protected ?string $identity = null; @@ -162,12 +154,12 @@ public function setDeviceModel(?string $deviceModel): self return $this; } - public function getIsMobile(): ?string + public function getIsMobile(): ?YesNoEnum { return $this->isMobile; } - public function setIsMobile(?string $isMobile): self + public function setIsMobile(?YesNoEnum $isMobile): self { $this->isMobile = $isMobile; @@ -258,12 +250,12 @@ public function setClientVersion(?string $clientVersion): self return $this; } - public function getLoginStatus(): ?string + public function getLoginStatus(): ?SuccessFailureEnum { return $this->loginStatus; } - public function setLoginStatus(?string $loginStatus): self + public function setLoginStatus(?SuccessFailureEnum $loginStatus): self { $this->loginStatus = $loginStatus; diff --git a/src/Admin/src/Enum/AdminStatusEnum.php b/src/Admin/src/Enum/AdminStatusEnum.php new file mode 100644 index 00000000..2f640b21 --- /dev/null +++ b/src/Admin/src/Enum/AdminStatusEnum.php @@ -0,0 +1,18 @@ + [ 'label' => 'Account Status', 'value_options' => [ - ['value' => Admin::STATUS_ACTIVE, 'label' => Admin::STATUS_ACTIVE], - ['value' => Admin::STATUS_INACTIVE, 'label' => Admin::STATUS_INACTIVE], + ['value' => AdminStatusEnum::Active->value, 'label' => AdminStatusEnum::Active->name], + ['value' => AdminStatusEnum::Inactive->value, 'label' => AdminStatusEnum::Inactive->name], ], ], ], ['priority' => -30]); diff --git a/src/Admin/src/FormData/AdminFormData.php b/src/Admin/src/FormData/AdminFormData.php index aef382a6..400a66ae 100644 --- a/src/Admin/src/FormData/AdminFormData.php +++ b/src/Admin/src/FormData/AdminFormData.php @@ -27,7 +27,7 @@ public function fromEntity(Admin $admin): self $this->identity = $admin->getIdentity(); $this->firstName = $admin->getFirstName(); $this->lastName = $admin->getLastName(); - $this->status = $admin->getStatus(); + $this->status = $admin->getStatus()->value; return $this; } diff --git a/src/Admin/src/InputFilter/AdminInputFilter.php b/src/Admin/src/InputFilter/AdminInputFilter.php index 5029c22d..b7279420 100644 --- a/src/Admin/src/InputFilter/AdminInputFilter.php +++ b/src/Admin/src/InputFilter/AdminInputFilter.php @@ -4,7 +4,7 @@ namespace Admin\Admin\InputFilter; -use Admin\Admin\Entity\Admin; +use Admin\Admin\Enum\AdminStatusEnum; use Admin\App\InputFilter\Input\CsrfInput; use Laminas\Filter\StringTrim; use Laminas\InputFilter\Input; @@ -96,10 +96,7 @@ public function init(): void $status->setRequired(true); $status->getFilterChain()->attachByName(StringTrim::class); $status->getValidatorChain()->attachByName(InArray::class, [ - 'haystack' => [ - Admin::STATUS_ACTIVE, - Admin::STATUS_INACTIVE, - ], + 'haystack' => AdminStatusEnum::values(), ]); $this->add($status); diff --git a/src/Admin/src/InputFilter/EditAdminInputFilter.php b/src/Admin/src/InputFilter/EditAdminInputFilter.php index 60e3f66b..6a9c9af4 100644 --- a/src/Admin/src/InputFilter/EditAdminInputFilter.php +++ b/src/Admin/src/InputFilter/EditAdminInputFilter.php @@ -4,7 +4,7 @@ namespace Admin\Admin\InputFilter; -use Admin\Admin\Entity\Admin; +use Admin\Admin\Enum\AdminStatusEnum; use Admin\App\InputFilter\Input\CsrfInput; use Laminas\Filter\StringTrim; use Laminas\InputFilter\Input; @@ -96,10 +96,7 @@ public function init(): void $status->setRequired(true); $status->getFilterChain()->attachByName(StringTrim::class); $status->getValidatorChain()->attachByName(InArray::class, [ - 'haystack' => [ - Admin::STATUS_ACTIVE, - Admin::STATUS_INACTIVE, - ], + 'haystack' => AdminStatusEnum::values(), ]); $this->add($status); diff --git a/src/Admin/src/Service/AdminService.php b/src/Admin/src/Service/AdminService.php index e63f537b..05d90bef 100644 --- a/src/Admin/src/Service/AdminService.php +++ b/src/Admin/src/Service/AdminService.php @@ -7,9 +7,12 @@ use Admin\Admin\Entity\Admin; use Admin\Admin\Entity\AdminLogin; use Admin\Admin\Entity\AdminRole; +use Admin\Admin\Enum\AdminStatusEnum; use Admin\Admin\Repository\AdminLoginRepository; use Admin\Admin\Repository\AdminRepository; use Admin\Admin\Repository\AdminRoleRepository; +use Admin\App\Enum\SuccessFailureEnum; +use Admin\App\Enum\YesNoEnum; use Admin\App\Exception\IdentityException; use Admin\App\Service\IpService; use Doctrine\Common\Collections\ArrayCollection; @@ -17,6 +20,7 @@ use Dot\DependencyInjection\Attribute\Inject; use Dot\GeoIP\Service\LocationServiceInterface; +use function assert; use function implode; use function is_string; use function password_hash; @@ -80,7 +84,7 @@ public function getAdmins( 'lastName' => $admin->getLastname(), 'roles' => implode(", ", $roles), 'status' => $admin->getStatus(), - 'created' => $admin->getCreated()->format("Y-m-d"), + 'created' => $admin->getCreated()?->format("Y-m-d"), ]; } @@ -141,16 +145,20 @@ public function createAdmin(array $data): Admin throw IdentityException::duplicate(); } + $status = AdminStatusEnum::tryFrom($data['status']); + assert($status instanceof AdminStatusEnum); + $admin = (new Admin()) ->setIdentity($data['identity']) ->setPassword(password_hash($data['password'], PASSWORD_DEFAULT)) ->setFirstname($data['firstName']) ->setLastname($data['lastName']) - ->setStatus($data['status']); + ->setStatus($status); foreach ($data['roles'] as $roleUuid) { - $admin->addRole( - $this->adminRoleRepository->getRole($roleUuid) - ); + $role = $this->adminRoleRepository->getRole($roleUuid); + if ($role instanceof AdminRole) { + $admin->addRole($role); + } } return $this->getAdminRepository()->saveAdmin($admin); @@ -175,13 +183,17 @@ public function updateAdmin(Admin $admin, array $data): Admin $admin->setLastname($data['lastName']); } if (! empty($data['status'])) { - $admin->setStatus($data['status']); + $status = AdminStatusEnum::tryFrom($data['status']); + assert($status instanceof AdminStatusEnum); + $admin->setStatus($status); } if (! empty($data['roles'])) { $admin->setRoles(new ArrayCollection()); foreach ($data['roles'] as $roleUuid) { $role = $this->adminRoleRepository->getRole($roleUuid); - $admin->addRole($role); + if ($role instanceof AdminRole) { + $admin->addRole($role); + } } } @@ -190,7 +202,7 @@ public function updateAdmin(Admin $admin, array $data): Admin return $admin; } - public function logAdminVisit(array $serverParams, string $name, string $status): AdminLogin + public function logAdminVisit(array $serverParams, string $name, SuccessFailureEnum $status): AdminLogin { /** * For device information @@ -212,7 +224,7 @@ public function logAdminVisit(array $serverParams, string $name, string $status) ->setDeviceType(null) ->setDeviceBrand(null) ->setDeviceModel(null) - ->setIsMobile(AdminLogin::IS_MOBILE_NO) + ->setIsMobile(YesNoEnum::No) ->setOsName(null) ->setOsVersion(null) ->setOsPlatform(null) diff --git a/src/Admin/src/Service/AdminServiceInterface.php b/src/Admin/src/Service/AdminServiceInterface.php index 4062b93c..13f60d22 100644 --- a/src/Admin/src/Service/AdminServiceInterface.php +++ b/src/Admin/src/Service/AdminServiceInterface.php @@ -7,6 +7,7 @@ use Admin\Admin\Entity\Admin; use Admin\Admin\Entity\AdminLogin; use Admin\Admin\Repository\AdminRepository; +use Admin\App\Enum\SuccessFailureEnum; use Doctrine\ORM\Exception\ORMException; use Doctrine\ORM\NonUniqueResultException; @@ -52,7 +53,7 @@ public function createAdmin(array $data): Admin; */ public function updateAdmin(Admin $admin, array $data): Admin; - public function logAdminVisit(array $serverParams, string $name, string $status): AdminLogin; + public function logAdminVisit(array $serverParams, string $name, SuccessFailureEnum $status): AdminLogin; public function getAdminFormProcessedRoles(): array; } diff --git a/src/Admin/templates/admin/simple-logins.html.twig b/src/Admin/templates/admin/simple-logins.html.twig index 4365ac63..a4971d3e 100644 --- a/src/Admin/templates/admin/simple-logins.html.twig +++ b/src/Admin/templates/admin/simple-logins.html.twig @@ -41,7 +41,7 @@ data-bs-title="Filter by login status"> {% for status in statuses %} - + {% endfor %} @@ -136,7 +136,7 @@ {{ login.identity }} {{ login.adminIp }} - {% if login.loginStatus == 'success' %} + {% if login.loginStatus.value == 'success' %} Success {% else %} Failed @@ -149,7 +149,7 @@ {{ login.deviceBrand }} {{ login.deviceModel }} - {% if login.isMobile == 'yes' %} + {% if login.isMobile.value == 'yes' %} Yes {% else %} No diff --git a/src/App/src/DBAL/Types/AbstractEnumType.php b/src/App/src/DBAL/Types/AbstractEnumType.php new file mode 100644 index 00000000..d8bbb039 --- /dev/null +++ b/src/App/src/DBAL/Types/AbstractEnumType.php @@ -0,0 +1,72 @@ + "'{$case->value}'", $this->getEnumValues()); + + return sprintf('ENUM(%s)', implode(', ', $values)); + } + + public function convertToPHPValue(mixed $value, AbstractPlatform $platform): mixed + { + if ($value === null) { + return null; + } + + return $this->getEnumClass()::from($value); + } + + public function convertToDatabaseValue(mixed $value, AbstractPlatform $platform): mixed + { + if ($value === null) { + return null; + } + + if (! $value instanceof BackedEnum) { + throw new InvalidArgumentException(sprintf( + 'Expected instance of %s, got %s', + $this->getEnumClass(), + is_object($value) ? $value::class : gettype($value) + )); + } + + return $value->value; + } + + public function requiresSQLCommentHint(AbstractPlatform $platform): bool + { + return true; + } + + /** + * @return class-string + */ + abstract protected function getEnumClass(): string; + + private function getEnumValues(): array + { + return $this->getEnumClass()::cases(); + } +} diff --git a/src/App/src/DBAL/Types/SuccessFailureEnumType.php b/src/App/src/DBAL/Types/SuccessFailureEnumType.php new file mode 100644 index 00000000..7b09b5bd --- /dev/null +++ b/src/App/src/DBAL/Types/SuccessFailureEnumType.php @@ -0,0 +1,22 @@ +setLastName('test') ->setIdentity('test@example.com') ->setPassword(password_hash('password', PASSWORD_DEFAULT)) - ->setStatus(Admin::STATUS_ACTIVE) + ->setStatus(AdminStatusEnum::Active) ); $entityManager = $this->createMock(EntityManager::class); @@ -290,7 +291,7 @@ public function testWillNotAuthenticateWhenInvalidMethodSpecifiedInOptionsConfig ], 'options' => [ 'test' => [ - 'value' => Admin::STATUS_ACTIVE, + 'value' => AdminStatusEnum::Active, 'message' => 'Unable to sign in because the account is not active.', ], ], @@ -320,7 +321,7 @@ public function testWillNotAuthenticateWhenMissingValueInOptionsConfig(): void ->setLastName('test') ->setIdentity('test@example.com') ->setPassword(password_hash('password', PASSWORD_DEFAULT)) - ->setStatus(Admin::STATUS_ACTIVE) + ->setStatus(AdminStatusEnum::Active) ); $entityManager = $this->createMock(EntityManager::class); @@ -365,7 +366,7 @@ public function testWillNotAuthenticateWhenMissingMessageInOptionsConfig(): void ->setLastName('test') ->setIdentity('test@example.com') ->setPassword(password_hash('password', PASSWORD_DEFAULT)) - ->setStatus(Admin::STATUS_ACTIVE) + ->setStatus(AdminStatusEnum::Active) ); $entityManager = $this->createMock(EntityManager::class); @@ -383,7 +384,7 @@ public function testWillNotAuthenticateWhenMissingMessageInOptionsConfig(): void ], 'options' => [ 'status' => [ - 'value' => Admin::STATUS_ACTIVE, + 'value' => AdminStatusEnum::Active, ], ], ], @@ -410,7 +411,7 @@ public function testWillAuthenticateWithOptionsConfig(): void ->setLastName('test') ->setIdentity('test@example.com') ->setPassword(password_hash('password', PASSWORD_DEFAULT)) - ->setStatus(Admin::STATUS_ACTIVE) + ->setStatus(AdminStatusEnum::Active) ); $entityManager = $this->createMock(EntityManager::class); @@ -429,7 +430,7 @@ public function testWillAuthenticateWithOptionsConfig(): void ], 'options' => [ 'status' => [ - 'value' => Admin::STATUS_ACTIVE, + 'value' => AdminStatusEnum::Active, 'message' => 'Unable to sign in because the account is not active.', ], ], diff --git a/test/Unit/Admin/Entity/AdminIdentityTest.php b/test/Unit/Admin/Entity/AdminIdentityTest.php index 1938757e..7e70f9e3 100644 --- a/test/Unit/Admin/Entity/AdminIdentityTest.php +++ b/test/Unit/Admin/Entity/AdminIdentityTest.php @@ -4,9 +4,9 @@ namespace AdminTest\Unit\Admin\Entity; -use Admin\Admin\Entity\Admin; use Admin\Admin\Entity\AdminIdentity; use Admin\Admin\Entity\AdminRole; +use Admin\Admin\Enum\AdminStatusEnum; use AdminTest\Unit\UnitTest; class AdminIdentityTest extends UnitTest @@ -20,7 +20,7 @@ protected function setUp(): void $this->default = [ 'uuid' => '00000000-0000-0000-0000-000000000000', 'identity' => 'test@example.com', - 'status' => Admin::STATUS_INACTIVE, + 'status' => AdminStatusEnum::Inactive, 'roles' => [ (new AdminRole())->setName(AdminRole::ROLE_ADMIN), ], diff --git a/test/Unit/Admin/Entity/AdminInterfaceTest.php b/test/Unit/Admin/Entity/AdminInterfaceTest.php index 8ff8c4b9..e1d21714 100644 --- a/test/Unit/Admin/Entity/AdminInterfaceTest.php +++ b/test/Unit/Admin/Entity/AdminInterfaceTest.php @@ -6,6 +6,7 @@ use Admin\Admin\Entity\AdminInterface; use Admin\Admin\Entity\AdminRole; +use Admin\Admin\Enum\AdminStatusEnum; use AdminTest\Unit\UnitTest; use Doctrine\Common\Collections\ArrayCollection; @@ -59,12 +60,12 @@ public function setPassword(string $password): AdminInterface return $this; } - public function getStatus(): string + public function getStatus(): AdminStatusEnum { - return 'test'; + return AdminStatusEnum::Active; } - public function setStatus(string $status): AdminInterface + public function setStatus(AdminStatusEnum $status): AdminInterface { return $this; } diff --git a/test/Unit/Admin/Entity/AdminLoginTest.php b/test/Unit/Admin/Entity/AdminLoginTest.php index a8aaeabf..f325a970 100644 --- a/test/Unit/Admin/Entity/AdminLoginTest.php +++ b/test/Unit/Admin/Entity/AdminLoginTest.php @@ -6,6 +6,8 @@ use Admin\Admin\Entity\AdminLogin; use Admin\Admin\Repository\AdminLoginRepository; +use Admin\App\Enum\SuccessFailureEnum; +use Admin\App\Enum\YesNoEnum; use AdminTest\Unit\UnitTest; use Doctrine\ORM\Mapping\Entity; use Doctrine\ORM\Mapping\Table; @@ -80,9 +82,9 @@ public function testAccessors(): void $this->assertSame('test', $adminLogin->getDeviceModel()); $this->assertNull($adminLogin->getIsMobile()); - $adminLogin = $adminLogin->setIsMobile('yes'); + $adminLogin = $adminLogin->setIsMobile(YesNoEnum::Yes); $this->assertInstanceOf(AdminLogin::class, $adminLogin); - $this->assertSame('yes', $adminLogin->getIsMobile()); + $this->assertSame(YesNoEnum::Yes, $adminLogin->getIsMobile()); $this->assertNull($adminLogin->getOsName()); $adminLogin = $adminLogin->setOsName('test'); @@ -120,9 +122,9 @@ public function testAccessors(): void $this->assertSame('test', $adminLogin->getClientVersion()); $this->assertNull($adminLogin->getLoginStatus()); - $adminLogin = $adminLogin->setLoginStatus('success'); + $adminLogin = $adminLogin->setLoginStatus(SuccessFailureEnum::Success); $this->assertInstanceOf(AdminLogin::class, $adminLogin); - $this->assertSame('success', $adminLogin->getLoginStatus()); + $this->assertSame(SuccessFailureEnum::Success, $adminLogin->getLoginStatus()); $this->assertNull($adminLogin->getIdentity()); $adminLogin = $adminLogin->setIdentity('test'); diff --git a/test/Unit/Admin/Entity/AdminTest.php b/test/Unit/Admin/Entity/AdminTest.php index 0b267305..c83354ea 100644 --- a/test/Unit/Admin/Entity/AdminTest.php +++ b/test/Unit/Admin/Entity/AdminTest.php @@ -6,6 +6,7 @@ use Admin\Admin\Entity\Admin; use Admin\Admin\Entity\AdminRole; +use Admin\Admin\Enum\AdminStatusEnum; use Admin\Admin\Repository\AdminRepository; use AdminTest\Unit\UnitTest; use Doctrine\Common\Collections\ArrayCollection; @@ -28,7 +29,7 @@ protected function setUp(): void 'firstName' => 'firstName', 'lastName' => 'lastName', 'password' => 'password', - 'status' => Admin::STATUS_INACTIVE, + 'status' => AdminStatusEnum::Inactive, 'roles' => [ (new AdminRole())->setName(AdminRole::ROLE_ADMIN), ], @@ -82,7 +83,7 @@ public function testAccessors(): void $this->assertInstanceOf(Admin::class, $admin); $this->assertSame($this->default['password'], $admin->getPassword()); - $this->assertSame(Admin::STATUS_ACTIVE, $admin->getStatus()); + $this->assertSame(AdminStatusEnum::Active, $admin->getStatus()); $admin = $admin->setStatus($this->default['status']); $this->assertInstanceOf(Admin::class, $admin); $this->assertSame($this->default['status'], $admin->getStatus()); diff --git a/test/Unit/Admin/FormData/AdminFormDataTest.php b/test/Unit/Admin/FormData/AdminFormDataTest.php index b67668d4..97da9454 100644 --- a/test/Unit/Admin/FormData/AdminFormDataTest.php +++ b/test/Unit/Admin/FormData/AdminFormDataTest.php @@ -6,6 +6,7 @@ use Admin\Admin\Entity\Admin; use Admin\Admin\Entity\AdminRole; +use Admin\Admin\Enum\AdminStatusEnum; use Admin\Admin\FormData\AdminFormData; use AdminTest\Unit\UnitTest; @@ -23,11 +24,12 @@ public function testWillPopulateFromEntity(): void $admin = $this->getAdmin(); $formData = new AdminFormData(); + $this->assertInstanceOf(AdminFormData::class, $formData->fromEntity($admin)); $this->assertSame($admin->getIdentity(), $formData->identity); $this->assertSame($admin->getFirstName(), $formData->firstName); $this->assertSame($admin->getLastName(), $formData->lastName); - $this->assertSame($admin->getStatus(), $formData->status); + $this->assertSame($admin->getStatus()->value, $formData->status); $this->assertIsArray($formData->roles); $this->assertCount(1, $formData->roles); $this->assertSame($admin->getRoles()[0]->getUuid()->toString(), $formData->roles[0]); @@ -51,7 +53,7 @@ public function testWillGetArrayCopy(): void $this->assertSame($admin->getLastName(), $copy['lastName']); $this->assertArrayHasKey('status', $copy); - $this->assertSame($admin->getStatus(), $copy['status']); + $this->assertSame($admin->getStatus()->value, $copy['status']); $this->assertArrayHasKey('roles', $copy); $this->assertIsArray($copy['roles']); @@ -77,7 +79,7 @@ private function getAdmin(): Admin ->setIdentity('test') ->setFirstName('firstname') ->setLastName('lastname') - ->setStatus(Admin::STATUS_ACTIVE) + ->setStatus(AdminStatusEnum::Active) ->addRole( (new AdminRole())->setName(AdminRole::ROLE_ADMIN) ); diff --git a/test/Unit/Admin/InputFilter/AdminInputFilterTest.php b/test/Unit/Admin/InputFilter/AdminInputFilterTest.php index 49c4e9cb..d7e202c9 100644 --- a/test/Unit/Admin/InputFilter/AdminInputFilterTest.php +++ b/test/Unit/Admin/InputFilter/AdminInputFilterTest.php @@ -4,8 +4,8 @@ namespace AdminTest\Unit\Admin\InputFilter; -use Admin\Admin\Entity\Admin; use Admin\Admin\Entity\AdminRole; +use Admin\Admin\Enum\AdminStatusEnum; use Admin\Admin\InputFilter\AdminInputFilter; use AdminTest\Unit\UnitTest; use Laminas\Session\Container; @@ -316,7 +316,7 @@ public function testWillValidateFirstName(): void 'identity' => 'test', 'password' => 'password', 'passwordConfirm' => 'password', - 'status' => Admin::STATUS_ACTIVE, + 'status' => AdminStatusEnum::Active->value, 'roles' => [ AdminRole::ROLE_ADMIN, ], @@ -329,7 +329,7 @@ public function testWillValidateFirstName(): void 'password' => 'password', 'passwordConfirm' => 'password', 'firstName' => null, - 'status' => Admin::STATUS_ACTIVE, + 'status' => AdminStatusEnum::Active->value, 'roles' => [ AdminRole::ROLE_ADMIN, ], @@ -342,7 +342,7 @@ public function testWillValidateFirstName(): void 'password' => 'password', 'passwordConfirm' => 'password', 'firstName' => '', - 'status' => Admin::STATUS_ACTIVE, + 'status' => AdminStatusEnum::Active->value, 'roles' => [ AdminRole::ROLE_ADMIN, ], @@ -355,7 +355,7 @@ public function testWillValidateFirstName(): void 'password' => 'password', 'passwordConfirm' => 'password', 'firstName' => str_repeat('a', 151), - 'status' => Admin::STATUS_ACTIVE, + 'status' => AdminStatusEnum::Active->value, 'roles' => [ AdminRole::ROLE_ADMIN, ], @@ -385,7 +385,7 @@ public function testWillValidateLastName(): void 'password' => 'password', 'passwordConfirm' => 'password', 'firstName' => 'firstName', - 'status' => Admin::STATUS_ACTIVE, + 'status' => AdminStatusEnum::Active->value, 'roles' => [ AdminRole::ROLE_ADMIN, ], @@ -399,7 +399,7 @@ public function testWillValidateLastName(): void 'passwordConfirm' => 'password', 'firstName' => 'firstName', 'lastName' => null, - 'status' => Admin::STATUS_ACTIVE, + 'status' => AdminStatusEnum::Active->value, 'roles' => [ AdminRole::ROLE_ADMIN, ], @@ -413,7 +413,7 @@ public function testWillValidateLastName(): void 'passwordConfirm' => 'password', 'firstName' => 'firstName', 'lastName' => '', - 'status' => Admin::STATUS_ACTIVE, + 'status' => AdminStatusEnum::Active->value, 'roles' => [ AdminRole::ROLE_ADMIN, ], @@ -427,7 +427,7 @@ public function testWillValidateLastName(): void 'passwordConfirm' => 'password', 'firstName' => 'firstName', 'lastName' => str_repeat('a', 151), - 'status' => Admin::STATUS_ACTIVE, + 'status' => AdminStatusEnum::Active->value, 'roles' => [ AdminRole::ROLE_ADMIN, ], @@ -505,7 +505,7 @@ public function testWillValidateRoles(): void 'passwordConfirm' => 'password', 'firstName' => 'firstName', 'lastName' => 'lastName', - 'status' => Admin::STATUS_ACTIVE, + 'status' => AdminStatusEnum::Active, ]); $this->assertFalse($inputFilter->isValid()); $messages = $inputFilter->getMessages(); @@ -524,7 +524,7 @@ public function testWillValidateRoles(): void 'passwordConfirm' => 'password', 'firstName' => 'firstName', 'lastName' => 'lastName', - 'status' => Admin::STATUS_ACTIVE, + 'status' => AdminStatusEnum::Active, 'roles' => [], ]); $this->assertFalse($inputFilter->isValid()); @@ -551,7 +551,7 @@ public function testWillAcceptValidData(): void 'passwordConfirm' => 'password', 'firstName' => 'firstName', 'lastName' => 'lastName', - 'status' => Admin::STATUS_ACTIVE, + 'status' => AdminStatusEnum::Active->value, 'roles' => [ AdminRole::ROLE_ADMIN, ], diff --git a/test/Unit/Admin/InputFilter/EditAdminInputFilterTest.php b/test/Unit/Admin/InputFilter/EditAdminInputFilterTest.php index f13e38fc..ab607a30 100644 --- a/test/Unit/Admin/InputFilter/EditAdminInputFilterTest.php +++ b/test/Unit/Admin/InputFilter/EditAdminInputFilterTest.php @@ -4,8 +4,8 @@ namespace AdminTest\Unit\Admin\InputFilter; -use Admin\Admin\Entity\Admin; use Admin\Admin\Entity\AdminRole; +use Admin\Admin\Enum\AdminStatusEnum; use Admin\Admin\InputFilter\EditAdminInputFilter; use AdminTest\Unit\UnitTest; use Laminas\Session\Container; @@ -28,7 +28,7 @@ public function testWillValidateIdentity(): void 'passwordConfirm' => 'password', 'firstName' => 'firstName', 'lastName' => 'lastName', - 'status' => Admin::STATUS_ACTIVE, + 'status' => AdminStatusEnum::Active->value, 'roles' => [ AdminRole::ROLE_ADMIN, ], @@ -42,7 +42,7 @@ public function testWillValidateIdentity(): void 'passwordConfirm' => 'password', 'firstName' => 'firstName', 'lastName' => 'lastName', - 'status' => Admin::STATUS_ACTIVE, + 'status' => AdminStatusEnum::Active->value, 'roles' => [ AdminRole::ROLE_ADMIN, ], @@ -55,7 +55,7 @@ public function testWillValidateIdentity(): void 'passwordConfirm' => 'password', 'firstName' => 'firstName', 'lastName' => 'lastName', - 'status' => Admin::STATUS_ACTIVE, + 'status' => AdminStatusEnum::Active->value, 'roles' => [ AdminRole::ROLE_ADMIN, ], @@ -68,7 +68,7 @@ public function testWillValidateIdentity(): void 'passwordConfirm' => 'password', 'firstName' => 'firstName', 'lastName' => 'lastName', - 'status' => Admin::STATUS_ACTIVE, + 'status' => AdminStatusEnum::Active->value, 'roles' => [ AdminRole::ROLE_ADMIN, ], @@ -130,7 +130,7 @@ public function testWillValidatePassword(): void 'passwordConfirm' => 'password', 'firstName' => 'firstName', 'lastName' => 'lastName', - 'status' => Admin::STATUS_ACTIVE, + 'status' => AdminStatusEnum::Active->value, 'roles' => [ AdminRole::ROLE_ADMIN, ], @@ -144,7 +144,7 @@ public function testWillValidatePassword(): void 'passwordConfirm' => '', 'firstName' => 'firstName', 'lastName' => 'lastName', - 'status' => Admin::STATUS_ACTIVE, + 'status' => AdminStatusEnum::Active->value, 'roles' => [ AdminRole::ROLE_ADMIN, ], @@ -158,7 +158,7 @@ public function testWillValidatePassword(): void 'passwordConfirm' => null, 'firstName' => 'firstName', 'lastName' => 'lastName', - 'status' => Admin::STATUS_ACTIVE, + 'status' => AdminStatusEnum::Active->value, 'roles' => [ AdminRole::ROLE_ADMIN, ], @@ -172,7 +172,7 @@ public function testWillValidatePassword(): void 'passwordConfirm' => ' ', 'firstName' => 'firstName', 'lastName' => 'lastName', - 'status' => Admin::STATUS_ACTIVE, + 'status' => AdminStatusEnum::Active->value, 'roles' => [ AdminRole::ROLE_ADMIN, ], @@ -186,7 +186,7 @@ public function testWillValidatePassword(): void 'passwordConfirm' => str_repeat('a', 7), 'firstName' => 'firstName', 'lastName' => 'lastName', - 'status' => Admin::STATUS_ACTIVE, + 'status' => AdminStatusEnum::Active->value, 'roles' => [ AdminRole::ROLE_ADMIN, ], @@ -208,7 +208,7 @@ public function testWillValidatePassword(): void 'passwordConfirm' => str_repeat('a', 151), 'firstName' => 'firstName', 'lastName' => 'lastName', - 'status' => Admin::STATUS_ACTIVE, + 'status' => AdminStatusEnum::Active->value, 'roles' => [ AdminRole::ROLE_ADMIN, ], @@ -237,7 +237,7 @@ public function testWillValidatePasswordConfirm(): void 'password' => 'password', 'firstName' => 'firstName', 'lastName' => 'lastName', - 'status' => Admin::STATUS_ACTIVE, + 'status' => AdminStatusEnum::Active->value, 'roles' => [ AdminRole::ROLE_ADMIN, ], @@ -251,7 +251,7 @@ public function testWillValidatePasswordConfirm(): void 'passwordConfirm' => '', 'firstName' => 'firstName', 'lastName' => 'lastName', - 'status' => Admin::STATUS_ACTIVE, + 'status' => AdminStatusEnum::Active->value, 'roles' => [ AdminRole::ROLE_ADMIN, ], @@ -265,7 +265,7 @@ public function testWillValidatePasswordConfirm(): void 'passwordConfirm' => null, 'firstName' => 'firstName', 'lastName' => 'lastName', - 'status' => Admin::STATUS_ACTIVE, + 'status' => AdminStatusEnum::Active->value, 'roles' => [ AdminRole::ROLE_ADMIN, ], @@ -279,7 +279,7 @@ public function testWillValidatePasswordConfirm(): void 'passwordConfirm' => '', 'firstName' => 'firstName', 'lastName' => 'lastName', - 'status' => Admin::STATUS_ACTIVE, + 'status' => AdminStatusEnum::Active->value, 'roles' => [ AdminRole::ROLE_ADMIN, ], @@ -293,7 +293,7 @@ public function testWillValidatePasswordConfirm(): void 'passwordConfirm' => str_repeat('a', 7), 'firstName' => 'firstName', 'lastName' => 'lastName', - 'status' => Admin::STATUS_ACTIVE, + 'status' => AdminStatusEnum::Active->value, 'roles' => [ AdminRole::ROLE_ADMIN, ], @@ -315,7 +315,7 @@ public function testWillValidatePasswordConfirm(): void 'passwordConfirm' => str_repeat('a', 151), 'firstName' => 'firstName', 'lastName' => 'lastName', - 'status' => Admin::STATUS_ACTIVE, + 'status' => AdminStatusEnum::Active->value, 'roles' => [ AdminRole::ROLE_ADMIN, ], @@ -337,7 +337,7 @@ public function testWillValidatePasswordConfirm(): void 'passwordConfirm' => 'passwords', 'firstName' => 'firstName', 'lastName' => 'lastName', - 'status' => Admin::STATUS_ACTIVE, + 'status' => AdminStatusEnum::Active->value, 'roles' => [ AdminRole::ROLE_ADMIN, ], @@ -366,7 +366,7 @@ public function testWillValidateFirstName(): void 'password' => 'password', 'passwordConfirm' => 'password', 'lastName' => 'lastName', - 'status' => Admin::STATUS_ACTIVE, + 'status' => AdminStatusEnum::Active->value, 'roles' => [ AdminRole::ROLE_ADMIN, ], @@ -380,7 +380,7 @@ public function testWillValidateFirstName(): void 'passwordConfirm' => 'password', 'firstName' => null, 'lastName' => 'lastName', - 'status' => Admin::STATUS_ACTIVE, + 'status' => AdminStatusEnum::Active->value, 'roles' => [ AdminRole::ROLE_ADMIN, ], @@ -394,7 +394,7 @@ public function testWillValidateFirstName(): void 'passwordConfirm' => 'password', 'firstName' => '', 'lastName' => 'lastName', - 'status' => Admin::STATUS_ACTIVE, + 'status' => AdminStatusEnum::Active->value, 'roles' => [ AdminRole::ROLE_ADMIN, ], @@ -408,7 +408,7 @@ public function testWillValidateFirstName(): void 'passwordConfirm' => 'password', 'firstName' => str_repeat('a', 151), 'lastName' => 'lastName', - 'status' => Admin::STATUS_ACTIVE, + 'status' => AdminStatusEnum::Active->value, 'roles' => [ AdminRole::ROLE_ADMIN, ], @@ -437,7 +437,7 @@ public function testWillValidateLastName(): void 'password' => 'password', 'passwordConfirm' => 'password', 'firstName' => 'firstName', - 'status' => Admin::STATUS_ACTIVE, + 'status' => AdminStatusEnum::Active->value, 'roles' => [ AdminRole::ROLE_ADMIN, ], @@ -451,7 +451,7 @@ public function testWillValidateLastName(): void 'passwordConfirm' => 'password', 'firstName' => 'firstName', 'lastName' => null, - 'status' => Admin::STATUS_ACTIVE, + 'status' => AdminStatusEnum::Active->value, 'roles' => [ AdminRole::ROLE_ADMIN, ], @@ -465,7 +465,7 @@ public function testWillValidateLastName(): void 'passwordConfirm' => 'password', 'firstName' => 'firstName', 'lastName' => '', - 'status' => Admin::STATUS_ACTIVE, + 'status' => AdminStatusEnum::Active->value, 'roles' => [ AdminRole::ROLE_ADMIN, ], @@ -479,7 +479,7 @@ public function testWillValidateLastName(): void 'passwordConfirm' => 'password', 'firstName' => 'firstName', 'lastName' => str_repeat('a', 151), - 'status' => Admin::STATUS_ACTIVE, + 'status' => AdminStatusEnum::Active->value, 'roles' => [ AdminRole::ROLE_ADMIN, ], @@ -556,7 +556,7 @@ public function testWillValidateRoles(): void 'passwordConfirm' => 'password', 'firstName' => 'firstName', 'lastName' => 'lastName', - 'status' => Admin::STATUS_ACTIVE, + 'status' => AdminStatusEnum::Active->value, ]); $this->assertFalse($inputFilter->isValid()); $messages = $inputFilter->getMessages(); @@ -575,7 +575,7 @@ public function testWillValidateRoles(): void 'passwordConfirm' => 'password', 'firstName' => 'firstName', 'lastName' => 'lastName', - 'status' => Admin::STATUS_ACTIVE, + 'status' => AdminStatusEnum::Active->value, 'roles' => [], ]); $this->assertFalse($inputFilter->isValid()); @@ -602,7 +602,7 @@ public function testWillAcceptValidData(): void 'passwordConfirm' => 'password', 'firstName' => 'firstName', 'lastName' => 'lastName', - 'status' => Admin::STATUS_ACTIVE, + 'status' => AdminStatusEnum::Active->value, 'roles' => [ AdminRole::ROLE_ADMIN, ],