mirror of
https://gitlab.com/Chill-Projet/chill-bundles.git
synced 2025-06-07 18:44:08 +00:00
Add an option "suggest_myself" on PickUserDynamicType and PickUserGroupOrUserDynamicType, and use this option in WorkflowStepType
This will suggest the current user in PickUserDynamicType
This commit is contained in:
parent
d283d62049
commit
d8ded80582
@ -18,6 +18,7 @@ use Symfony\Component\Form\FormBuilderInterface;
|
|||||||
use Symfony\Component\Form\FormInterface;
|
use Symfony\Component\Form\FormInterface;
|
||||||
use Symfony\Component\Form\FormView;
|
use Symfony\Component\Form\FormView;
|
||||||
use Symfony\Component\OptionsResolver\OptionsResolver;
|
use Symfony\Component\OptionsResolver\OptionsResolver;
|
||||||
|
use Symfony\Component\Security\Core\Security;
|
||||||
use Symfony\Component\Serializer\Normalizer\DenormalizerInterface;
|
use Symfony\Component\Serializer\Normalizer\DenormalizerInterface;
|
||||||
use Symfony\Component\Serializer\Normalizer\NormalizerInterface;
|
use Symfony\Component\Serializer\Normalizer\NormalizerInterface;
|
||||||
use Symfony\Component\Serializer\SerializerInterface;
|
use Symfony\Component\Serializer\SerializerInterface;
|
||||||
@ -29,12 +30,18 @@ use Symfony\Component\Serializer\SerializerInterface;
|
|||||||
*
|
*
|
||||||
* - `multiple`: pick one or more users
|
* - `multiple`: pick one or more users
|
||||||
* - `suggested`: a list of suggested users
|
* - `suggested`: a list of suggested users
|
||||||
|
* - `suggest_myself`: append the current user to the list of suggested
|
||||||
* - `as_id`: only the id will be set in the returned data
|
* - `as_id`: only the id will be set in the returned data
|
||||||
* - `submit_on_adding_new_entity`: the browser will immediately submit the form when new users are checked
|
* - `submit_on_adding_new_entity`: the browser will immediately submit the form when new users are checked
|
||||||
*/
|
*/
|
||||||
class PickUserDynamicType extends AbstractType
|
class PickUserDynamicType extends AbstractType
|
||||||
{
|
{
|
||||||
public function __construct(private readonly DenormalizerInterface $denormalizer, private readonly SerializerInterface $serializer, private readonly NormalizerInterface $normalizer) {}
|
public function __construct(
|
||||||
|
private readonly DenormalizerInterface $denormalizer,
|
||||||
|
private readonly SerializerInterface $serializer,
|
||||||
|
private readonly NormalizerInterface $normalizer,
|
||||||
|
private readonly Security $security,
|
||||||
|
) {}
|
||||||
|
|
||||||
public function buildForm(FormBuilderInterface $builder, array $options)
|
public function buildForm(FormBuilderInterface $builder, array $options)
|
||||||
{
|
{
|
||||||
@ -53,6 +60,12 @@ class PickUserDynamicType extends AbstractType
|
|||||||
foreach ($options['suggested'] as $user) {
|
foreach ($options['suggested'] as $user) {
|
||||||
$view->vars['suggested'][] = $this->normalizer->normalize($user, 'json', ['groups' => 'read']);
|
$view->vars['suggested'][] = $this->normalizer->normalize($user, 'json', ['groups' => 'read']);
|
||||||
}
|
}
|
||||||
|
$user = $this->security->getUser();
|
||||||
|
if ($user instanceof User) {
|
||||||
|
if (true === $options['suggest_myself'] && !in_array($user, $options['suggested'], true)) {
|
||||||
|
$view->vars['suggested'][] = $this->normalizer->normalize($user, 'json', ['groups' => 'read']);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public function configureOptions(OptionsResolver $resolver)
|
public function configureOptions(OptionsResolver $resolver)
|
||||||
@ -61,6 +74,8 @@ class PickUserDynamicType extends AbstractType
|
|||||||
->setDefault('multiple', false)
|
->setDefault('multiple', false)
|
||||||
->setAllowedTypes('multiple', ['bool'])
|
->setAllowedTypes('multiple', ['bool'])
|
||||||
->setDefault('compound', false)
|
->setDefault('compound', false)
|
||||||
|
->setDefault('suggest_myself', false)
|
||||||
|
->setAllowedTypes('suggest_myself', ['bool'])
|
||||||
->setDefault('suggested', [])
|
->setDefault('suggested', [])
|
||||||
// if set to true, only the id will be set inside the content. The denormalization will not work.
|
// if set to true, only the id will be set inside the content. The denormalization will not work.
|
||||||
->setDefault('as_id', false)
|
->setDefault('as_id', false)
|
||||||
|
@ -11,12 +11,14 @@ declare(strict_types=1);
|
|||||||
|
|
||||||
namespace Chill\MainBundle\Form\Type;
|
namespace Chill\MainBundle\Form\Type;
|
||||||
|
|
||||||
|
use Chill\MainBundle\Entity\User;
|
||||||
use Chill\MainBundle\Form\Type\DataTransformer\EntityToJsonTransformer;
|
use Chill\MainBundle\Form\Type\DataTransformer\EntityToJsonTransformer;
|
||||||
use Symfony\Component\Form\AbstractType;
|
use Symfony\Component\Form\AbstractType;
|
||||||
use Symfony\Component\Form\FormBuilderInterface;
|
use Symfony\Component\Form\FormBuilderInterface;
|
||||||
use Symfony\Component\Form\FormInterface;
|
use Symfony\Component\Form\FormInterface;
|
||||||
use Symfony\Component\Form\FormView;
|
use Symfony\Component\Form\FormView;
|
||||||
use Symfony\Component\OptionsResolver\OptionsResolver;
|
use Symfony\Component\OptionsResolver\OptionsResolver;
|
||||||
|
use Symfony\Component\Security\Core\Security;
|
||||||
use Symfony\Component\Serializer\Normalizer\DenormalizerInterface;
|
use Symfony\Component\Serializer\Normalizer\DenormalizerInterface;
|
||||||
use Symfony\Component\Serializer\Normalizer\NormalizerInterface;
|
use Symfony\Component\Serializer\Normalizer\NormalizerInterface;
|
||||||
use Symfony\Component\Serializer\SerializerInterface;
|
use Symfony\Component\Serializer\SerializerInterface;
|
||||||
@ -26,7 +28,12 @@ use Symfony\Component\Serializer\SerializerInterface;
|
|||||||
*/
|
*/
|
||||||
final class PickUserGroupOrUserDynamicType extends AbstractType
|
final class PickUserGroupOrUserDynamicType extends AbstractType
|
||||||
{
|
{
|
||||||
public function __construct(private readonly DenormalizerInterface $denormalizer, private readonly SerializerInterface $serializer, private readonly NormalizerInterface $normalizer) {}
|
public function __construct(
|
||||||
|
private readonly DenormalizerInterface $denormalizer,
|
||||||
|
private readonly SerializerInterface $serializer,
|
||||||
|
private readonly NormalizerInterface $normalizer,
|
||||||
|
private readonly Security $security,
|
||||||
|
) {}
|
||||||
|
|
||||||
public function buildForm(FormBuilderInterface $builder, array $options)
|
public function buildForm(FormBuilderInterface $builder, array $options)
|
||||||
{
|
{
|
||||||
@ -45,6 +52,12 @@ final class PickUserGroupOrUserDynamicType extends AbstractType
|
|||||||
foreach ($options['suggested'] as $userGroup) {
|
foreach ($options['suggested'] as $userGroup) {
|
||||||
$view->vars['suggested'][] = $this->normalizer->normalize($userGroup, 'json', ['groups' => 'read']);
|
$view->vars['suggested'][] = $this->normalizer->normalize($userGroup, 'json', ['groups' => 'read']);
|
||||||
}
|
}
|
||||||
|
$user = $this->security->getUser();
|
||||||
|
if ($user instanceof User) {
|
||||||
|
if (true === $options['suggest_myself'] && !in_array($user, $options['suggested'], true)) {
|
||||||
|
$view->vars['suggested'][] = $this->normalizer->normalize($user, 'json', ['groups' => 'read']);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public function configureOptions(OptionsResolver $resolver)
|
public function configureOptions(OptionsResolver $resolver)
|
||||||
@ -54,6 +67,8 @@ final class PickUserGroupOrUserDynamicType extends AbstractType
|
|||||||
->setAllowedTypes('multiple', ['bool'])
|
->setAllowedTypes('multiple', ['bool'])
|
||||||
->setDefault('compound', false)
|
->setDefault('compound', false)
|
||||||
->setDefault('suggested', [])
|
->setDefault('suggested', [])
|
||||||
|
->setDefault('suggest_myself', false)
|
||||||
|
->setAllowedTypes('suggest_myself', ['bool'])
|
||||||
// if set to true, only the id will be set inside the content. The denormalization will not work.
|
// if set to true, only the id will be set inside the content. The denormalization will not work.
|
||||||
->setDefault('as_id', false)
|
->setDefault('as_id', false)
|
||||||
->setAllowedTypes('as_id', ['bool'])
|
->setAllowedTypes('as_id', ['bool'])
|
||||||
|
@ -156,12 +156,14 @@ class WorkflowStepType extends AbstractType
|
|||||||
->add('futureUserSignature', PickUserDynamicType::class, [
|
->add('futureUserSignature', PickUserDynamicType::class, [
|
||||||
'label' => 'workflow.signature_zone.user signature',
|
'label' => 'workflow.signature_zone.user signature',
|
||||||
'multiple' => false,
|
'multiple' => false,
|
||||||
|
'suggest_myself' => true,
|
||||||
])
|
])
|
||||||
->add('futureDestUsers', PickUserGroupOrUserDynamicType::class, [
|
->add('futureDestUsers', PickUserGroupOrUserDynamicType::class, [
|
||||||
'label' => 'workflow.dest for next steps',
|
'label' => 'workflow.dest for next steps',
|
||||||
'multiple' => true,
|
'multiple' => true,
|
||||||
'empty_data' => '[]',
|
'empty_data' => '[]',
|
||||||
'suggested' => $options['suggested_users'],
|
'suggested' => $options['suggested_users'],
|
||||||
|
'suggest_myself' => true,
|
||||||
])
|
])
|
||||||
->add('futureCcUsers', PickUserDynamicType::class, [
|
->add('futureCcUsers', PickUserDynamicType::class, [
|
||||||
'label' => 'workflow.cc for next steps',
|
'label' => 'workflow.cc for next steps',
|
||||||
@ -170,6 +172,7 @@ class WorkflowStepType extends AbstractType
|
|||||||
'suggested' => $options['suggested_users'],
|
'suggested' => $options['suggested_users'],
|
||||||
'empty_data' => '[]',
|
'empty_data' => '[]',
|
||||||
'attr' => ['class' => 'future-cc-users'],
|
'attr' => ['class' => 'future-cc-users'],
|
||||||
|
'suggest_myself' => true,
|
||||||
])
|
])
|
||||||
->add('futureDestineeEmails', ChillCollectionType::class, [
|
->add('futureDestineeEmails', ChillCollectionType::class, [
|
||||||
'entry_type' => EmailType::class,
|
'entry_type' => EmailType::class,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user