117 lines
3.6 KiB
PHP
117 lines
3.6 KiB
PHP
<?php
|
|
|
|
namespace App\Dto\Input;
|
|
|
|
use ApiPlatform\Metadata\ApiProperty;
|
|
use App\Dto\Output\OrganizationalUnitOutput;
|
|
use App\Dto\Output\UserGroupOutput;
|
|
use App\Entity\OrganizationalUnit;
|
|
use App\Entity\User;
|
|
use App\Entity\UserGroup;
|
|
use Symfony\Component\Serializer\Annotation\Groups;
|
|
use Symfony\Component\Validator\Constraints as Assert;
|
|
|
|
final class UserInput
|
|
{
|
|
#[Assert\NotBlank]
|
|
#[Groups('user:write')]
|
|
public ?string $username = null;
|
|
|
|
/**
|
|
* @var OrganizationalUnitOutput[]
|
|
*/
|
|
#[Groups('user:write')]
|
|
#[ApiProperty(readableLink: false, writableLink: false)]
|
|
public array $allowedOrganizationalUnits = [];
|
|
|
|
#[Assert\NotBlank(groups: ['user:post'])]
|
|
#[Assert\Length(min: 8, groups: ['user:write', 'user:post'])]
|
|
#[Groups('user:write')]
|
|
public ?string $password = null;
|
|
|
|
#[Assert\NotNull]
|
|
#[Groups('user:write')]
|
|
public ?bool $enabled = true;
|
|
|
|
/**
|
|
* @var UserGroupOutput[]
|
|
*/
|
|
#[Groups('user:write')]
|
|
#[ApiProperty(readableLink: false, writableLink: false)]
|
|
public array $userGroups = [];
|
|
|
|
#[Assert\NotBlank(groups: ['user:reset-password'])]
|
|
#[Groups('user:reset-password')]
|
|
public ?string $currentPassword = null;
|
|
|
|
#[Assert\NotBlank(groups: ['user:reset-password'])]
|
|
#[Assert\Length(min: 8, groups: ['user:reset-password'])]
|
|
#[Groups('user:reset-password')]
|
|
public ?string $newPassword = null;
|
|
|
|
#[Assert\NotBlank(groups: ['user:reset-password'])]
|
|
#[Assert\Length(min: 8, groups: ['user:reset-password'])]
|
|
#[Assert\Expression(expression: 'this.newPassword === this.repeatNewPassword', message: 'This value should be the same as the new password', groups: ['user:reset-password'])]
|
|
#[Groups('user:reset-password')]
|
|
public ?string $repeatNewPassword = null;
|
|
|
|
public function __construct(?User $user = null)
|
|
{
|
|
if (!$user) {
|
|
return;
|
|
}
|
|
|
|
$this->username = $user->getUsername();
|
|
$this->enabled= $user->isEnabled();
|
|
|
|
if ($user->getUserGroups()) {
|
|
foreach ($user->getUserGroups() as $userGroup) {
|
|
$this->userGroups[] = new UserGroupOutput($userGroup);
|
|
}
|
|
}
|
|
|
|
if ($user->getAllowedOrganizationalUnits()) {
|
|
foreach ($user->getAllowedOrganizationalUnits() as $allowedOrganizationalUnit) {
|
|
$this->allowedOrganizationalUnits[] = new OrganizationalUnitOutput($allowedOrganizationalUnit);
|
|
}
|
|
}
|
|
}
|
|
|
|
public function createOrUpdateEntity(?User $user = null): User
|
|
{
|
|
if (!$user) {
|
|
$user = new User();
|
|
}
|
|
|
|
$user->setUsername($this->username);
|
|
$user->setEnabled($this->enabled);
|
|
|
|
foreach ($this->userGroups as $userGroup) {
|
|
$userGroupsToAdd[] = $userGroup->getEntity();
|
|
}
|
|
$user->setUserGroups( $userGroupsToAdd ?? [] );
|
|
|
|
if ($this->password !== null) {
|
|
$user->setPassword($this->password);
|
|
}
|
|
|
|
foreach ($this->allowedOrganizationalUnits as $allowedOrganizationalUnit) {
|
|
$allowedOrganizationalUnitToAdd[] = $allowedOrganizationalUnit->getEntity();
|
|
}
|
|
$user->setAllowedOrganizationalUnits( $allowedOrganizationalUnitToAdd ?? [] );
|
|
|
|
if ($this->currentPassword !== null) {
|
|
$user->setCurrentPassword($this->currentPassword);
|
|
}
|
|
|
|
if ($this->newPassword !== null) {
|
|
$user->setNewPassword($this->newPassword);
|
|
}
|
|
|
|
if ($this->repeatNewPassword !== null) {
|
|
$user->setRepeatNewPassword($this->repeatNewPassword);
|
|
}
|
|
|
|
return $user;
|
|
}
|
|
} |