name = $name; $this->surname = $surname; $this->email = $email; $this->username = $username; $this->password = $passwordHash; $this->role = self::ROLE_USER; $this->state = self::STATE_FRESH; } public function changeLoggedAt(): void { $this->lastLoggedAt = new DateTime(); } public function getEmail(): string { return $this->email; } public function getUsername(): string { return $this->username; } public function changeUsername(string $username): void { $this->username = $username; } public function getLastLoggedAt(): ?DateTime { return $this->lastLoggedAt; } public function getRole(): string { return $this->role; } public function setRole(string $role): void { $this->role = $role; } public function getPasswordHash(): string { return $this->password; } public function changePasswordHash(string $password): void { $this->password = $password; } public function block(): void { $this->state = self::STATE_BLOCKED; } public function activate(): void { $this->state = self::STATE_ACTIVATED; } public function isActivated(): bool { return $this->state === self::STATE_ACTIVATED; } public function getName(): string { return $this->name; } public function getSurname(): string { return $this->surname; } public function getFullname(): string { return $this->name . ' ' . $this->surname; } public function rename(string $name, string $surname): void { $this->name = $name; $this->surname = $surname; } public function getState(): int { return $this->state; } public function setState(int $state): void { if (!in_array($state, self::STATES)) { throw new InvalidArgumentException(sprintf('Unsupported state %s', $state)); } $this->state = $state; } public function getGravatar(): string { return 'https://www.gravatar.com/avatar/' . md5($this->email); } public function toIdentity(): Identity { return new Identity($this->getId(), [$this->role], [ 'email' => $this->email, 'name' => $this->name, 'surname' => $this->surname, 'state' => $this->state, 'gravatar' => $this->getGravatar(), ]); } }