adaptations for acl with tasks

This commit is contained in:
2021-10-26 18:05:06 +02:00
parent bae06fcc9c
commit 965ea528e3
22 changed files with 371 additions and 298 deletions

View File

@@ -17,6 +17,9 @@
*/
namespace Chill\TaskBundle\Form;
use Chill\MainBundle\Security\Resolver\CenterResolverDispatcher;
use Chill\MainBundle\Security\Resolver\ScopeResolverDispatcher;
use Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Chill\MainBundle\Form\Type\ChillDateType;
@@ -29,15 +32,26 @@ use Symfony\Component\Security\Core\Role\Role;
use Chill\MainBundle\Form\Type\DateIntervalType;
use Chill\MainBundle\Form\Type\ChillTextareaType;
/**
*
*
* @author Julien Fastré <julien.fastre@champs-libres.coop>
*/
class SingleTaskType extends AbstractType
{
private ParameterBagInterface $parameterBag;
private CenterResolverDispatcher $centerResolverDispatcher;
private ScopeResolverDispatcher $scopeResolverDispatcher;
public function __construct(ParameterBagInterface $parameterBag, CenterResolverDispatcher $centerResolverDispatcher, ScopeResolverDispatcher $scopeResolverDispatcher)
{
$this->parameterBag = $parameterBag;
$this->centerResolverDispatcher = $centerResolverDispatcher;
$this->scopeResolverDispatcher = $scopeResolverDispatcher;
}
public function buildForm(FormBuilderInterface $builder, array $options)
{
if (NULL !== $task = $options['data']) {
$center = $this->centerResolverDispatcher->resolveCenter($task);
$isScopeConcerned = $this->scopeResolverDispatcher->isConcerned($task);
}
$builder
->add('title', TextType::class)
->add('description', ChillTextareaType::class, [
@@ -45,15 +59,10 @@ class SingleTaskType extends AbstractType
])
->add('assignee', UserPickerType::class, [
'required' => false,
'center' => $options['center'],
'center' => $center,
'role' => $options['role'],
'placeholder' => 'Not assigned'
])
->add('circle', ScopePickerType::class, [
'center' => $options['center'],
'role' => $options['role'],
'required' => false
])
->add('startDate', ChillDateType::class, [
'required' => false
])
@@ -62,16 +71,26 @@ class SingleTaskType extends AbstractType
])
->add('warningInterval', DateIntervalType::class, [
'required' => false
]);
]);
if ($this->parameterBag->get('chill_main')['acl']['form_show_scopes']
&& $isScopeConcerned) {
$builder
->add('circle', ScopePickerType::class, [
'center' => $center,
'role' => $options['role'],
'required' => false
]);
}
}
public function configureOptions(OptionsResolver $resolver)
{
$resolver
->setRequired('center')
->setAllowedTypes('center', [ Center::class ])
->setAllowedTypes('center', [ Center::class, 'array', 'null' ])
->setRequired('role')
->setAllowedTypes('role', [ Role::class ])
->setAllowedTypes('role', [ Role::class, 'string' ])
;
}
}