use Doctrine\ORM\Mapping as ORM; | use Doctrine\ORM\Mapping as ORM; | ||||
use Gedmo\Mapping\Annotation as Gedmo; | use Gedmo\Mapping\Annotation as Gedmo; | ||||
use Lc\SovBundle\Doctrine\Pattern\AbstractFullEntity; | use Lc\SovBundle\Doctrine\Pattern\AbstractFullEntity; | ||||
use Lc\SovBundle\Model\File\FileInterface; | |||||
use Lc\SovBundle\Model\Newsletter\NewsletterInterface; | |||||
/** | /** | ||||
* @ORM\MappedSuperclass() | * @ORM\MappedSuperclass() | ||||
*/ | */ | ||||
protected $date; | protected $date; | ||||
/** | |||||
* @ORM\Column(type="boolean", nullable=true) | |||||
*/ | |||||
protected $isSent; | |||||
/** | |||||
* @ORM\ManyToOne(targetEntity="Lc\SovBundle\Newsletter\NewsletterInsterface", inversedBy="news") | |||||
*/ | |||||
protected $newsletter; | |||||
/** | |||||
* @ORM\ManyToOne(targetEntity="Lc\SovBundle\File\FileInsterface", cascade={"persist", "remove"}) | |||||
*/ | |||||
protected $image; | |||||
public function __toString() | public function __toString() | ||||
{ | { | ||||
return $this->getTitle(); | return $this->getTitle(); | ||||
return $this; | return $this; | ||||
} | } | ||||
public function getIsSent(): ?bool | |||||
{ | |||||
return $this->isSent; | |||||
} | |||||
public function setIsSent(?bool $isSent): self | |||||
{ | |||||
$this->isSent = $isSent; | |||||
return $this; | |||||
} | |||||
public function getImage(): ?FileInterface | |||||
{ | |||||
return $this->image; | |||||
} | |||||
public function setImage(?FileInterface $image): self | |||||
{ | |||||
$this->image = $image; | |||||
return $this; | |||||
} | |||||
public function getNewsletter(): ?NewsletterInterface | |||||
{ | |||||
return $this->newsletter; | |||||
} | |||||
public function setNewsletter(?NewsletterInterface $newsletter): self | |||||
{ | |||||
$this->newsletter = $newsletter; | |||||
return $this; | |||||
} | |||||
} | } |
use Doctrine\Common\Collections\Collection; | use Doctrine\Common\Collections\Collection; | ||||
use Doctrine\ORM\Mapping as ORM; | use Doctrine\ORM\Mapping as ORM; | ||||
use Lc\SovBundle\Doctrine\EntityInterface; | use Lc\SovBundle\Doctrine\EntityInterface; | ||||
use Lc\SovBundle\Doctrine\Extension\DevAliasInterface; | |||||
use Lc\SovBundle\Doctrine\Extension\DevAliasTrait; | |||||
use Lc\SovBundle\Model\Newsletter\NewsletterInterface; | use Lc\SovBundle\Model\Newsletter\NewsletterInterface; | ||||
use Lc\SovBundle\Model\Ticket\TicketInterface; | use Lc\SovBundle\Model\Ticket\TicketInterface; | ||||
use Symfony\Component\Security\Core\User\UserInterface; | use Symfony\Component\Security\Core\User\UserInterface; | ||||
/** | /** | ||||
* @ORM\MappedSuperclass() | * @ORM\MappedSuperclass() | ||||
*/ | */ | ||||
abstract class UserModel implements EntityInterface, UserInterface | |||||
abstract class UserModel implements EntityInterface, UserInterface, DevAliasInterface | |||||
{ | { | ||||
use DevAliasTrait; | |||||
/** | /** | ||||
* @ORM\Column(type="string", length=180, unique=true) | * @ORM\Column(type="string", length=180, unique=true) | ||||
*/ | */ | ||||
*/ | */ | ||||
protected $gender; | protected $gender; | ||||
/** | |||||
* @ORM\Column(type="date", nullable=true) | |||||
*/ | |||||
protected $birthdate; | |||||
/** | /** | ||||
* @ORM\Column(type="boolean") | * @ORM\Column(type="boolean") | ||||
*/ | */ | ||||
return $this; | return $this; | ||||
} | } | ||||
public function getBirthdate(): ?\DateTimeInterface | |||||
{ | |||||
return $this->birthdate; | |||||
} | |||||
public function setBirthdate(\DateTimeInterface $birthdate): self | |||||
{ | |||||
$this->birthdate = $birthdate; | |||||
return $this; | |||||
} | |||||
/** | /** | ||||
* @see UserInterface | * @see UserInterface | ||||
*/ | */ | ||||
} | } | ||||
//TODO vérifier si on peut déplacer da Solver | |||||
public function generatePassword($length = 8): string | public function generatePassword($length = 8): string | ||||
{ | { | ||||
$chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'; | $chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'; | ||||
return $this; | return $this; | ||||
} | } | ||||
public function getName(): ?string | |||||
public function getPhone(): ?string | |||||
{ | |||||
return $this->phone; | |||||
} | |||||
public function setPhone(?string $phone): self | |||||
{ | { | ||||
return $this->getFirstname().' '.strtoupper($this->getLastname()); | |||||
$this->phone = $phone; | |||||
return $this; | |||||
} | } | ||||
public function isVerified(): bool | public function isVerified(): bool |
$this->defaultLocale = $locale; | $this->defaultLocale = $locale; | ||||
} | } | ||||
public function findOneByOldUrl($url) | |||||
{ | |||||
$qb = $this->createQueryBuilder('entity') | |||||
->where('entity.oldUrls LIKE :oldUrl') | |||||
->andWhere('entity.status = 1') | |||||
->setParameter(':oldUrl', '%' . $url . '%'); | |||||
return $qb->getQuery()->getOneOrNullResult(); | |||||
} | |||||
public function getOneOrNullResult(QueryBuilder $qb, $locale = null, $hydrationMode = null) | public function getOneOrNullResult(QueryBuilder $qb, $locale = null, $hydrationMode = null) | ||||
{ | { | ||||
return $this->getTranslatedQuery($qb, $locale)->getOneOrNullResult($hydrationMode); | return $this->getTranslatedQuery($qb, $locale)->getOneOrNullResult($hydrationMode); | ||||
return $query; | return $query; | ||||
} | } | ||||
public function findBySimilarSlug($slug) | |||||
{ | |||||
$qb = $this->createQueryBuilder('entity') | |||||
->select('COUNT(entity.slug) as totalSimilar') | |||||
->andWhere('entity.status>=0') | |||||
->andWhere('entity.slug LIKE :slug') | |||||
->setParameter('slug', $slug) | |||||
->groupBy('entity.slug') | |||||
->having('COUNT(entity.slug) >=1'); | |||||
return $qb->getQuery()->getOneOrNullResult(); | |||||
} | |||||
public function findAll() | |||||
// @TODO : à vérifier si on peut les virer | |||||
/*public function findAll() | |||||
{ | { | ||||
return $this->findBy(array()); | return $this->findBy(array()); | ||||
} | } | ||||
protected function setCriteria(array $criteria): array | protected function setCriteria(array $criteria): array | ||||
{ | { | ||||
/*$className = $this->getClassMetadata()->getName(); | |||||
$className = $this->getClassMetadata()->getName(); | |||||
$entity = new $className; | $entity = new $className; | ||||
if ($entity instanceof StatusInterface) { | if ($entity instanceof StatusInterface) { | ||||
if ($criteria['status'] === false) { | if ($criteria['status'] === false) { | ||||
unset($criteria['status']); | unset($criteria['status']); | ||||
} | } | ||||
}*/ | |||||
} | |||||
return $criteria; | return $criteria; | ||||
}*/ | |||||
// @TODO : à réécrire dans un Store | |||||
/* | |||||
public function findBySimilarSlug($slug) | |||||
{ | |||||
$qb = $this->createQueryBuilder('entity') | |||||
->select('COUNT(entity.slug) as totalSimilar') | |||||
->andWhere('entity.status>=0') | |||||
->andWhere('entity.slug LIKE :slug') | |||||
->setParameter('slug', $slug) | |||||
->groupBy('entity.slug') | |||||
->having('COUNT(entity.slug) >=1'); | |||||
return $qb->getQuery()->getOneOrNullResult(); | |||||
} | } | ||||
public function findOneByOldUrl($url) | |||||
{ | |||||
$qb = $this->createQueryBuilder('entity') | |||||
->where('entity.oldUrls LIKE :oldUrl') | |||||
->andWhere('entity.status = 1') | |||||
->setParameter(':oldUrl', '%' . $url . '%'); | |||||
return $qb->getQuery()->getOneOrNullResult(); | |||||
}*/ | |||||
} | } |
abstract class AbstractRepositoryQuery | abstract class AbstractRepositoryQuery | ||||
{ | { | ||||
use StatusRepositoryQueryTrait; | |||||
use TreeRepositoryQueryTrait; | |||||
protected ServiceEntityRepository $repository; | protected ServiceEntityRepository $repository; | ||||
protected QueryBuilder $query; | protected QueryBuilder $query; | ||||
protected PaginatorInterface $paginator; | protected PaginatorInterface $paginator; | ||||
->andWhere('.devAlias = :devAlias') | ->andWhere('.devAlias = :devAlias') | ||||
->setParameter('devAlias', $devAlias); | ->setParameter('devAlias', $devAlias); | ||||
} | } | ||||
public function filterBySlug(string $slug) | |||||
{ | |||||
return $this | |||||
->andWhere('.slug = :slug') | |||||
->setParameter('slug', $slug); | |||||
} | |||||
} | } | ||||
namespace Lc\SovBundle\Repository; | namespace Lc\SovBundle\Repository; | ||||
use Lc\SovBundle\Model\Site\PageInterface; | |||||
abstract class AbstractStore | abstract class AbstractStore | ||||
{ | { | ||||
public function createQuery() | |||||
{ | |||||
return $this->query->create(); | |||||
} | |||||
public function getRepositoryQuery() | public function getRepositoryQuery() | ||||
{ | { | ||||
return $this->query; | return $this->query; | ||||
return $query->findOne(); | return $query->findOne(); | ||||
} | } | ||||
//findPageBySlug | |||||
public function getOneBySlug(string $slug): ?PageInterface | |||||
{ | |||||
$query = $this->query->create(); | |||||
$query->filterBySlug($slug); | |||||
return $query->findOne(); | |||||
} | |||||
} | } |
parent::__construct($repository, 'r', $paginator); | parent::__construct($repository, 'r', $paginator); | ||||
} | } | ||||
public function filterBySlug(string $slug) | |||||
{ | |||||
return $this | |||||
->andWhere('.slug = :slug') | |||||
->setParameter('slug', $slug); | |||||
} | |||||
} | } |
{ | { | ||||
$this->query = $query; | $this->query = $query; | ||||
} | } | ||||
//findPageBySlug | |||||
public function getBySlug(string $slug): ?PageInterface | |||||
{ | |||||
$query = $this->query->create(); | |||||
$query | |||||
->filterBySlug($slug); | |||||
return $query->findOne(); | |||||
} | |||||
} | } |
<?php | |||||
namespace Lc\SovBundle\Repository; | |||||
trait StatusRepositoryQueryTrait | |||||
{ | |||||
public function filterByStatus(int $status):self | |||||
{ | |||||
return $this->andWhere('.status = :status')->setParameter(':status', $status); | |||||
} | |||||
public function filterIsOffline():self | |||||
{ | |||||
return $this->andWhere('.status = :status')->setParameter(':status', 0); | |||||
} | |||||
public function filterIsOnline():self | |||||
{ | |||||
return $this->andWhere('.status = :status')->setParameter(':status', 1); | |||||
} | |||||
public function filterIsOnlineAndOffline():self | |||||
{ | |||||
return $this->andWhere('.status >= 0'); | |||||
} | |||||
} |
public function filterByStatus($statusArray): self | public function filterByStatus($statusArray): self | ||||
{ | { | ||||
return $this | return $this | ||||
->andWhere('.status IN (:status)') | |||||
->setParameter('status', $statusArray); | |||||
->andWhere('.status IN (:status)') | |||||
->setParameter('status', $statusArray); | |||||
} | } | ||||
public function selectCount(): self | public function selectCount(): self |
<?php | |||||
namespace Lc\SovBundle\Repository; | |||||
use Lc\SovBundle\Doctrine\EntityInterface; | |||||
trait TreeRepositoryQueryTrait | |||||
{ | |||||
public function filterIsParent() | |||||
{ | |||||
return $this->andWhere('.parent is NULL'); | |||||
} | |||||
public function filterIsChildren() | |||||
{ | |||||
return $this->andWhere('.parent is NOT NULL'); | |||||
} | |||||
public function filterByParent(EntityInterface $parent) | |||||
{ | |||||
return $this->andWhere('.parent = :parent')->setParameter('parent', $parent); | |||||
} | |||||
} |
public function filterByNewsletter(Newsletter $newsletter): self | public function filterByNewsletter(Newsletter $newsletter): self | ||||
{ | { | ||||
return $this | return $this | ||||
->andWhere(':newsletter MEMBER OF .newsletters') | |||||
->setParameter('newsletter', $newsletter->getId()); | |||||
->andWhere(':newsletter MEMBER OF .newsletters') | |||||
->setParameter('newsletter', $newsletter->getId()); | |||||
} | } | ||||
public function filterByRole(string $role): self | public function filterByRole(string $role): self | ||||
{ | { | ||||
return $this | return $this | ||||
->andWhere('.roles LIKE :roles') | |||||
->setParameter('roles', '%"' . $role . '"%'); | |||||
->andWhere('.roles LIKE :roles') | |||||
->setParameter('roles', '%"' . $role . '"%'); | |||||
} | } | ||||
public function filterByTicketTypeNotification(string $ticketType): self | public function filterByTicketTypeNotification(string $ticketType): self | ||||
{ | { | ||||
return $this | return $this | ||||
->andWhere('.ticketTypesNotification LIKE :ticketType') | |||||
->setParameter('ticketType', '%"' . $ticketType . '"%'); | |||||
->andWhere('.ticketTypesNotification LIKE :ticketType') | |||||
->setParameter('ticketType', '%"' . $ticketType . '"%'); | |||||
} | } | ||||
public function filterByEmail(string $email): self | public function filterByEmail(string $email): self | ||||
->setParameter('email', $email); | ->setParameter('email', $email); | ||||
} | } | ||||
} | |||||
} |
$this->query = $query; | $this->query = $query; | ||||
} | } | ||||
//findAllByNewsletter | |||||
//findAllByNewsletter | |||||
public function getByNewsletter(Newsletter $newsletter, $query = null): array | public function getByNewsletter(Newsletter $newsletter, $query = null): array | ||||
{ | { | ||||
if (is_null($query)) { | if (is_null($query)) { | ||||
return $query->find(); | return $query->find(); | ||||
} | } | ||||
//findByRole | |||||
//findByRole | |||||
public function getByRole(string $role): array | public function getByRole(string $role): array | ||||
{ | { | ||||
$query = $this->query->create(); | $query = $this->query->create(); |