Viewing File: /usr/local/cpanel/whostmgr/docroot/cgi/ncssl/source/src/Repository/CertificateRepository.php

<?php

namespace App\Repository;

use App\Entity\Certificate;
use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository;
use Doctrine\Persistence\ManagerRegistry;
use Symfony\Component\Security\Core\User\UserInterface;

/**
 * @extends ServiceEntityRepository<Certificate>
 *
 * @method Certificate|null find($id, $lockMode = null, $lockVersion = null)
 * @method Certificate|null findOneBy(array $criteria, array $orderBy = null)
 * @method Certificate[]    findAll()
 * @method Certificate[]    findBy(array $criteria, array $orderBy = null, $limit = null, $offset = null)
 */
class CertificateRepository extends ServiceEntityRepository
{
    public function __construct(ManagerRegistry $registry)
    {
        parent::__construct($registry, Certificate::class);
    }

    public function getAllPendingInstallation(UserInterface $user, int $maxCertificateInstallationAttempts): array
    {
        $qb = $this->createQueryBuilder('c');

        $query = $qb->select()
            ->leftJoin('c.user', 'u')
            ->add('where',
                $qb->expr()->andX(
                    $qb->expr()->orX(
                        $qb->expr()->eq('c.status', ':inProgressStatus'),
                        $qb->expr()->andX(
                            $qb->expr()->eq('c.status', ':activeStatus'),
                            $qb->expr()->isNull('c.cpanelId')
                        )
                    ),
                    $qb->expr()->eq('u.id', ':userId'),
                    $qb->expr()->lt('c.failedInstallationAttempts', ':maxCertificateInstallationAttempts')
                )
            )
            ->setParameters([
                'inProgressStatus' => Certificate::STATUS_INPROGRESS,
                'activeStatus' => Certificate::STATUS_ACTIVE,
                'userId' => $user->getId(),
                'maxCertificateInstallationAttempts' => $maxCertificateInstallationAttempts
            ])
            ->getQuery()
        ;

        return $query->getResult();
    }

    public function removePreviousCertificate(Certificate $certificate): void
    {
        $qb = $this->createQueryBuilder('c');

        $query = $qb->delete()
            ->add('where',
                $qb->expr()->andX(
                    $qb->expr()->eq('c.host', ':host'),
                    $qb->expr()->eq('c.user', ':userId'),
                    $qb->expr()->neq('c.id', ':currentId')
                )
            )
            ->setParameters([
                'host' => $certificate->getHost(),
                'userId' => $certificate->getUser()->getId(),
                'currentId' => $certificate->getId(),
            ])
            ->getQuery();

        $query->execute();
    }

    /**
     * @param int $userId
     * @param bool $isArrayResult
     *
     * @return array
     */
    public function getCertificatesByUserId(int $userId): array
    {
        $qb = $this->createQueryBuilder('c');

        $query = $qb->select()
            ->leftJoin('c.user', 'u')
            ->add('where',
                $qb->expr()->eq('u.id', ':userId')
            )
            ->setParameters([
                'userId' => $userId
            ])
            ->getQuery()
        ;

        return $query->getResult();
    }

    /**
     * @param string $userName
     *
     * @return array
     */
    public function getCertificatesByUserName(string $userName): array
    {
        $qb = $this->createQueryBuilder('c');

        $query = $qb->select()
            ->leftJoin('c.user', 'u')
            ->add('where',
                $qb->expr()->eq('u.name', ':userName')
            )
            ->addOrderBy('c.ncId', 'ASC')
            ->setParameters([
                'userName' => $userName
            ])
            ->getQuery()
        ;

        return $query->getArrayResult();
    }

    /**
     * @param int $userId
     * @param string $userNcLogin
     *
     * @return array
     */
    public function getCertificatesForLocalDbUpdate(int $userId, string $userNcLogin): array
    {
        $qb = $this->createQueryBuilder('c');

        $query = $qb->select()
            ->leftJoin('c.user', 'u')
            ->add('where',
                $qb->expr()->andX(
                    $qb->expr()->eq('u.id', ':userId'),
                    $qb->expr()->eq('u.ncLogin', ':userNcLogin')
                )
            )
            ->setParameters([
                'userId' => $userId,
                'userNcLogin' => $userNcLogin
            ])
            ->getQuery()
        ;

        return $query->getArrayResult();
    }

    /**
     * @param int $id
     * @param int $userId
     *
     * @return void
     */
    public function deleteById(int $id, int $userId): void
    {
        $qb = $this->createQueryBuilder('c');

        $query = $qb->delete()
            ->add('where',
                $qb->expr()->andX(
                    $qb->expr()->eq('c.id', ':id'),
                    $qb->expr()->eq('c.user', ':userId')
                )
            )
            ->setParameters([
                'id' => $id,
                'userId' => $userId,
            ])
            ->getQuery();

        $query->execute();
    }

    public function updateToggle(int $certificateId, bool $status): void
    {
        if ($certificateId === 0) {
            throw new \InvalidArgumentException('Certificate Id is empty');
        }

        $qb = $this->createQueryBuilder('c');
        $qb->update()
            ->set('c.autoRedirect', ':status')
            ->where('c.ncId = :certificateId')
            ->setParameter('status', $status)
            ->setParameter('certificateId', $certificateId)
            ->getQuery()
            ->execute();
    }
}
Back to Directory File Manager