mirror of
https://gitlab.com/Chill-Projet/chill-bundles.git
synced 2025-08-28 02:23:51 +00:00
add logic to filter tasks
This commit is contained in:
@@ -27,8 +27,14 @@ use Chill\MainBundle\Form\Type\ScopePickerType;
|
||||
use Symfony\Component\Form\Extension\Core\Type\TextType;
|
||||
use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
|
||||
use Chill\TaskBundle\Repository\SingleTaskRepository;
|
||||
|
||||
use Symfony\Component\OptionsResolver\OptionsResolver;
|
||||
use Doctrine\ORM\EntityManagerInterface;
|
||||
use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
|
||||
use Chill\MainBundle\Security\Authorization\AuthorizationHelper;
|
||||
use Chill\TaskBundle\Security\Authorization\TaskVoter;
|
||||
use Symfony\Component\Security\Core\Role\Role;
|
||||
use Chill\TaskBundle\Entity\SingleTask;
|
||||
use Chill\PersonBundle\Form\Type\PickPersonType;
|
||||
|
||||
/**
|
||||
*
|
||||
@@ -37,20 +43,106 @@ use Symfony\Component\OptionsResolver\OptionsResolver;
|
||||
*/
|
||||
class SingleTaskListType extends AbstractType
|
||||
{
|
||||
/**
|
||||
*
|
||||
* @var EntityManagerInterface
|
||||
*/
|
||||
protected $em;
|
||||
|
||||
/**
|
||||
*
|
||||
* @var SingleTaskRepository
|
||||
*/
|
||||
protected $singleTaskRepository;
|
||||
|
||||
/**
|
||||
*
|
||||
* @var TokenStorageInterface
|
||||
*/
|
||||
protected $tokenStorage;
|
||||
|
||||
/**
|
||||
*
|
||||
* @var AuthorizationHelper
|
||||
*/
|
||||
protected $authorizationHelper;
|
||||
|
||||
public function __construct(
|
||||
EntityManagerInterface $em,
|
||||
TokenStorageInterface $tokenStorage,
|
||||
AuthorizationHelper $authorizationHelper
|
||||
) {
|
||||
$this->em = $em;
|
||||
$this->tokenStorage = $tokenStorage;
|
||||
$this->authorizationHelper = $authorizationHelper;
|
||||
}
|
||||
|
||||
|
||||
public function buildForm(FormBuilderInterface $builder, array $options)
|
||||
{
|
||||
$statuses = \array_merge(SingleTaskRepository::DATE_STATUSES, [ 'closed' ]);
|
||||
|
||||
$builder
|
||||
->add('user', EntityType::class, [
|
||||
'class' => 'Chill\MainBundle\Entity\User'
|
||||
->add('user_id', EntityType::class, [
|
||||
'class' => User::class,
|
||||
'choices' => $this->getUsersAssigneedToTask(),
|
||||
'placeholder' => 'Choose a user',
|
||||
'required' => false
|
||||
])
|
||||
->add('status', ChoiceType::class, [
|
||||
'choices' => array_flip(\array_merge(SingleTaskRepository::DATE_STATUSES, [ 'closed' ])),
|
||||
'expanded' => false,
|
||||
'multiple' => false
|
||||
'choices' => array_combine($statuses, $statuses),
|
||||
'expanded' => true,
|
||||
'multiple' => true
|
||||
])
|
||||
|
||||
->add('person_id', PickPersonType::class, [
|
||||
'centers' => $this->authorizationHelper
|
||||
->getReachableCenters(
|
||||
$this->tokenStorage->getToken()->getUser(),
|
||||
new Role(TaskVoter::SHOW)
|
||||
),
|
||||
'required' => false
|
||||
])
|
||||
;
|
||||
}
|
||||
|
||||
/**
|
||||
* Return a list of user having a task assigned.
|
||||
*
|
||||
* @return User[]
|
||||
*/
|
||||
protected function getUsersAssigneedToTask()
|
||||
{
|
||||
$qb = $this->em->createQueryBuilder();
|
||||
$user = $this->tokenStorage->getToken()->getUser();
|
||||
$role = new Role(TaskVoter::SHOW);
|
||||
$centers = $this->authorizationHelper->getReachableCenters($user, $role);
|
||||
|
||||
$qb->select('DISTINCT user')
|
||||
->from(User::class, 'user')
|
||||
->join(SingleTask::class, 'task', \Doctrine\ORM\Query\Expr\Join::WITH, 'task.assignee = user')
|
||||
->join('task.person', 'person')
|
||||
->where("user.enabled = 'TRUE'")
|
||||
;
|
||||
|
||||
$i = 0;
|
||||
foreach ($centers as $center) {
|
||||
$circles = $this->authorizationHelper->getReachableCircles($user, $role, $center);
|
||||
// add condition about person and circle
|
||||
$qb->andWhere(
|
||||
$qb->expr()->andX()
|
||||
->add($qb->expr()->eq('person.center', ':center_'.$i))
|
||||
->add($qb->expr()->in('task.circle', ':circles_'.$i))
|
||||
);
|
||||
|
||||
$qb->setParameter('center_'.$i, $center)
|
||||
->setParameter('circles_'.$i, $circles)
|
||||
;
|
||||
// increase counter
|
||||
$i++;
|
||||
}
|
||||
|
||||
return $qb->getQuery()->getResult();
|
||||
}
|
||||
|
||||
public function configureOptions(OptionsResolver $resolver)
|
||||
{
|
||||
|
Reference in New Issue
Block a user