Your IP : 216.73.217.79


Current Path : /var/www/v3.cesa.co.za/src/UserBundle/Service/
Upload File :
Current File : /var/www/v3.cesa.co.za/src/UserBundle/Service/Echasl23UserService.php

<?php

namespace App\UserBundle\Service;

use App\UserBundle\Entity\UserOld;
use App\UserBundle\Entity\UserLevel;
use Doctrine\ORM\EntityManagerInterface;

/**
 * Business logic for echasl23 (PHPMaker) admin users.
 */
final class Echasl23UserService
{
    public function __construct(
        private readonly EntityManagerInterface $entityManager,
    ) {
    }

    public function hashPlainPassword(string $plainPassword): string
    {
        return md5($plainPassword);
    }

    public function applyPlainPassword(UserOld $user, ?string $plainPassword): void
    {
        if ($plainPassword === null || $plainPassword === '') {
            return;
        }

        $user->setPassword($this->hashPlainPassword($plainPassword));
        $user->setPwdchanged(new \DateTime());
    }

    /**
     * Symfony roles for an echasl23 user (login and authorization).
     *
     * @return list<string>
     */
    public function resolveRoles(UserOld $user): array
    {
        if (!$user->isActivated()) {
            return ['NONE'];
        }

        $roles = [
            'ROLE_LOGGED_IN',
            'ROLE_MY_DETAILS',
            'ROLE_USER',
            'ROLE_REPORTS_ONLY',
            'IS_AUTHENTICATED_FULLY',
        ];

        $level = $user->getAccessLevel() ?? 0;

        if ($level < 0) {
            $roles[] = 'ROLE_SONATA_ADMIN';
            $roles[] = 'ROLE_ADMIN';
            $roles[] = 'ROLE_SUPER_ADMINISTRATOR';
            $roles[] = 'ROLE_SUPER_ADMIN';

            return array_values(array_unique($roles));
        }

        $roles[] = 'ROLE_SONATA_ADMIN';
        $roles[] = 'ROLE_ADMIN';
        $roles[] = 'ROLE_FRONTEND_USER';

        $userLevel = $this->entityManager->getRepository(UserLevel::class)->findOneBy([
            'user_level_id' => $level,
        ]);

        if ($userLevel instanceof UserLevel && $userLevel->getRoles()) {
            foreach (explode(',', $userLevel->getRoles()) as $role) {
                $role = trim($role);
                if ($role !== '') {
                    $roles[] = 'ROLE_' . strtoupper($role);
                }
            }
        }

        return array_values(array_unique($roles));
    }
}