ソースを参照

Merge branch 'develop' of https://forge.laclic.fr/Laclic/SovBundle into develop

develop
Fab 3年前
コミット
99aebbce19
7個のファイルの変更207行の追加49行の削除
  1. +4
    -2
      Controller/Ticket/TicketAdminController.php
  2. +2
    -0
      Factory/Reminder/ReminderFactory.php
  3. +93
    -0
      Repository/AbstractRepositoryQuery.php
  4. +7
    -47
      Repository/Reminder/ReminderRepository.php
  5. +56
    -0
      Repository/Reminder/ReminderRepositoryBack.php
  6. +14
    -0
      Repository/Reminder/ReminderRepositoryQuery.php
  7. +31
    -0
      Repository/Reminder/ReminderStore.php

+ 4
- 2
Controller/Ticket/TicketAdminController.php ファイルの表示

@@ -22,6 +22,7 @@ use Lc\SovBundle\Model\Ticket\TicketInterface;
use Lc\SovBundle\Controller\AbstractAdminController;
use Lc\SovBundle\Model\Ticket\TicketModel;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\Request;

class TicketAdminController extends AbstractAdminController
{
@@ -106,6 +107,7 @@ class TicketAdminController extends AbstractAdminController
if ($form->isSubmitted() && $form->isValid()) {
$ticket = $form->getData();

// @TODO : check si ça marche sans
foreach ($ticket->getTicketMessages() as $ticketMessage) {
$this->get('em')->persist($ticketMessage);
}
@@ -147,7 +149,7 @@ class TicketAdminController extends AbstractAdminController

$ticketMessage = $this->ticketMessageFactory->create();
$formAddTicketMessage = $this->createForm(TicketMessageFormType::class, $ticketMessage);
$formAddTicketMessage->handleRequest($this->get('request')->getMainRequest());
$formAddTicketMessage->handleRequest($this->get('request')->getMasterRequest());

if ($formAddTicketMessage->isSubmitted() && $formAddTicketMessage->isValid()) {
$ticketMessage = $formAddTicketMessage->getData();
@@ -170,7 +172,7 @@ class TicketAdminController extends AbstractAdminController

public function ticketStatusAction()
{
$request = $this->get('request')->getMainRequest();
$request = $this->get('request')->getMasterRequest();
$ticket = $request->attributes->get('easyadmin_context')->getEntity()->getInstance();

$formTicketStatusForm = $this->createForm(TicketStatusType::class, $ticket);

+ 2
- 0
Factory/Reminder/ReminderFactory.php ファイルの表示

@@ -2,6 +2,7 @@

namespace Lc\SovBundle\Factory\Reminder;

use App\Entity\Reminder\Reminder;
use Lc\SovBundle\Factory\AbstractFactory;
use Lc\SovBundle\Model\Reminder\ReminderInterface;

@@ -11,4 +12,5 @@ class ReminderFactory extends AbstractFactory implements ReminderFactoryInterfac
{
return ReminderInterface::class;
}

}

+ 93
- 0
Repository/AbstractRepositoryQuery.php ファイルの表示

@@ -0,0 +1,93 @@
<?php

namespace Lc\SovBundle\Repository;

use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository;
use Doctrine\ORM\QueryBuilder;
use Knp\Component\Pager\PaginatorInterface;

abstract class AbstractRepositoryQuery
{
protected ServiceEntityRepository $repository;
protected QueryBuilder $query;
protected PaginatorInterface $paginator;
protected string $id;

public function __construct(ServiceEntityRepository $repository, string $id, PaginatorInterface $paginator = null)
{
$this->repository = $repository;
$this->query = $repository->createQueryBuilder($id);
$this->paginator = $paginator;
$this->id = $id;
}

public function __call(string $name, $params): self
{
foreach ($params as $key => $value) {
$this->populateDqlId($params[$key]);
}

call_user_func_array([$this->query, $name], $params);

return $this;
}

public function create()
{
$class = get_called_class();

return new $class($this->repository, $this->paginator);
}

public function call(callable $fn): self
{
$fn($this->query, $this);

return $this;
}

public function findOne()
{
return $this->query->getQuery()
->setMaxResults(1)
->getOneOrNullResult()
;
}

public function find()
{
return $this->query->getQuery()->getResult();
}

public function paginate(int $page = 1, int $limit = 20)
{
return $this->paginator->paginate($this->query->getQuery(), $page, $limit);
}

public function getRepository(): ServiceEntityRepository
{
return $this->repository;
}

protected function populateDqlId(&$data)
{
if (is_string($data)) {
$words = explode(' ', $data);

foreach ($words as $k => $v) {
if (isset($v[0]) && '.' === $v[0]) {
$words[$k] = $this->id.$v;
}
}

$data = implode(' ', $words);
} elseif (is_array($data)) {
foreach ($data as $k => $v) {
$this->populateDqlId($data[$k]);
}
}

return $data;
}
}


+ 7
- 47
Repository/Reminder/ReminderRepository.php ファイルの表示

@@ -2,55 +2,15 @@

namespace Lc\SovBundle\Repository\Reminder;

use Lc\SovBundle\Repository\AbstractRepository;
use Lc\SovBundle\Model\Reminder\ReminderInterface;
use App\Entity\Reminder\Reminder;
use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository;
use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepositoryInterface;
use Doctrine\Persistence\ManagerRegistry;

/**
* @method ReminderInterface|null find($id, $lockMode = null, $lockVersion = null)
* @method ReminderInterface|null findOneBy(array $criteria, array $orderBy = null)
* @method ReminderInterface[] findAll()
* @method ReminderInterface[] findBy(array $criteria, array $orderBy = null, $limit = null, $offset = null)
*/
class ReminderRepository extends AbstractRepository
class ReminderRepository extends ServiceEntityRepository implements ServiceEntityRepositoryInterface
{
public function getInterfaceClass()
public function __construct(ManagerRegistry $registry)
{
return ReminderInterface::class;
}

public function findByUser($user)
{
$qb = $this->createQueryBuilder('e')
->leftJoin('e.users', 'u')
->having('COUNT(u.id) = 0')
->orHaving(':user MEMBER OF e.users')
->andWhere('e.done = 0')
->setParameter('user', $user)
->orderBy('e.dateReminder', 'ASC')
->groupBy('e.id');

return $qb->getQuery()->getResult();
}

public function findByEasyAdminConfigAndUser($crudAction, $crudControllerFqcn, $user, $entityId = null)
{
$qb = $this->createQueryBuilder('e');
$qb->leftJoin('e.users', 'u');
$qb->having('COUNT(u.id) = 0');
$qb->orHaving(':user MEMBER OF e.users');
$qb->andWhere('e.done = 0');
$qb->andWhere('e.crudAction LIKE :crudAction');
$qb->andWhere('e.crudControllerFqcn LIKE :entity');
$qb->setParameter('crudAction', $crudAction);
$qb->setParameter('crudControllerFqcn', $crudControllerFqcn);
$qb->setParameter('user', $user);
if ($entityId) {
$qb->andWhere('e.entityId LIKE :id');
$qb->setParameter('entityId', $entityId);
}
$qb->orderBy('e.dateReminder', 'ASC');
$qb->groupBy('e.id');

return $qb->getQuery()->getResult();
parent::__construct($registry, Reminder::class);
}
}

+ 56
- 0
Repository/Reminder/ReminderRepositoryBack.php ファイルの表示

@@ -0,0 +1,56 @@
<?php

namespace Lc\SovBundle\Repository\Reminder;

use Lc\SovBundle\Repository\AbstractRepository;
use Lc\SovBundle\Model\Reminder\ReminderInterface;

/**
* @method ReminderInterface|null find($id, $lockMode = null, $lockVersion = null)
* @method ReminderInterface|null findOneBy(array $criteria, array $orderBy = null)
* @method ReminderInterface[] findAll()
* @method ReminderInterface[] findBy(array $criteria, array $orderBy = null, $limit = null, $offset = null)
*/
class ReminderRepositoryBack extends AbstractRepository
{
public function getInterfaceClass()
{
return ReminderInterface::class;
}

public function findByUser($user)
{
$qb = $this->createQueryBuilder('e')
->leftJoin('e.users', 'u')
->having('COUNT(u.id) = 0')
->orHaving(':user MEMBER OF e.users')
->andWhere('e.done = 0')
->setParameter('user', $user)
->orderBy('e.dateReminder', 'ASC')
->groupBy('e.id');

return $qb->getQuery()->getResult();
}

public function findByEasyAdminConfigAndUser($crudAction, $crudControllerFqcn, $user, $entityId = null)
{
$qb = $this->createQueryBuilder('e');
$qb->leftJoin('e.users', 'u');
$qb->having('COUNT(u.id) = 0');
$qb->orHaving(':user MEMBER OF e.users');
$qb->andWhere('e.done = 0');
$qb->andWhere('e.crudAction LIKE :crudAction');
$qb->andWhere('e.crudControllerFqcn LIKE :entity');
$qb->setParameter('crudAction', $crudAction);
$qb->setParameter('crudControllerFqcn', $crudControllerFqcn);
$qb->setParameter('user', $user);
if ($entityId) {
$qb->andWhere('e.entityId LIKE :id');
$qb->setParameter('entityId', $entityId);
}
$qb->orderBy('e.dateReminder', 'ASC');
$qb->groupBy('e.id');

return $qb->getQuery()->getResult();
}
}

+ 14
- 0
Repository/Reminder/ReminderRepositoryQuery.php ファイルの表示

@@ -0,0 +1,14 @@
<?php

namespace Lc\SovBundle\Repository\Reminder;

use Knp\Component\Pager\PaginatorInterface;
use Lc\SovBundle\Repository\AbstractRepositoryQuery;

class ReminderRepositoryQuery extends AbstractRepositoryQuery
{
public function __construct(ReminderRepository $repository, PaginatorInterface $paginator)
{
parent::__construct($repository, 'r', $paginator);
}
}

+ 31
- 0
Repository/Reminder/ReminderStore.php ファイルの表示

@@ -0,0 +1,31 @@
<?php

namespace Lc\SovBundle\Repository\Reminder;

/**
* class ReminderStore.
*
* @author Simon Vieille <simon@deblan.fr>
*/
class ReminderStore
{
protected ReminderRepositoryQuery $query;

public function __construct(ReminderRepositoryQuery $query)
{
$this->query = $query;
}

public function getFoo($query = null)
{
if (!$query) {
$query = $this->query->create();
}

return $query
->useCustomFilters()
->andWhere('.description = :description')
->setParameter(':description', 'ahah')
->findOne();
}
}

読み込み中…
キャンセル
保存