nineskeletor/src/Form/PagewidgetType.php

248 lines
11 KiB
PHP

<?php
namespace App\Form;
use Ivory\CKEditorBundle\Form\Type\CKEditorType;
use Symfony\Component\DependencyInjection\ContainerInterface;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
use Symfony\Component\Form\Extension\Core\Type\HiddenType;
use Symfony\Component\Form\Extension\Core\Type\IntegerType;
use Symfony\Component\Form\Extension\Core\Type\SubmitType;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;
class PagewidgetType extends AbstractType
{
public $container;
public function __construct(ContainerInterface $container)
{
$this->container = $container;
}
public function buildForm(FormBuilderInterface $builder, array $options)
{
// Ajout des champs commun à tout les widgets
$builder
->add('submit', SubmitType::class, [
'label' => ('delete' == $options['mode'] ? 'Confirmer la Suppression' : 'Valider'),
'attr' => ('delete' == $options['mode'] ? ['class' => 'btn btn-danger'] : ['class' => 'btn btn-success']),
])
->add('name', TextType::class, [
'label' => 'Nom',
])
->add('height', IntegerType::class, [
'label' => 'Hauteur du Widget',
])
->add('border', ChoiceType::class, [
'label' => 'Afficher les Bords',
'choices' => ['oui' => '1', 'non' => '0'],
])
->add('autoajust', ChoiceType::class, [
'label' => 'Ajuster la Hauteur au Contenu',
'choices' => ['oui' => '1', 'non' => '0'],
])
->add('opened', ChoiceType::class, [
'label' => "Afficher le corps du widget à l'ouverture",
'choices' => ['oui' => '1', 'non' => '0'],
])
->add('viewheader', ChoiceType::class, [
'label' => "Afficher l'Entête",
'choices' => ['oui' => '1', 'non' => '0'],
])
->add('colorheaderback', TextType::class, [
'label' => "Couleur de Fond de l'Entête",
'required' => false,
'attr' => ['class' => 'pick-a-color'],
])
->add('colorheaderfont', TextType::class, [
'label' => "Couleur du Texte de l'Entête",
'required' => false,
'attr' => ['class' => 'pick-a-color'],
])
->add('colorbodyback', TextType::class, [
'label' => 'Couleur de Fond du Corps',
'required' => false,
'attr' => ['class' => 'pick-a-color'],
])
->add('colorbodyfont', TextType::class, [
'label' => 'Couleur du Texte du Corps',
'required' => false,
'attr' => ['class' => 'pick-a-color'],
])
->add('idicon', HiddenType::class, ['mapped' => false, 'data' => $options['idicon']]);
foreach ($options['param']['fields'] as $field) {
if ('string' == $field['type']) {
$builder
->add($field['id'], TextType::class, [
'label' => $field['label'],
'mapped' => false,
'label_attr' => ['loc' => $field['loc']],
'data' => $field['value'],
'required' => ('true' == $field['mandatory']),
]);
} elseif ('integer' == $field['type']) {
$builder
->add($field['id'], IntegerType::class, [
'label' => $field['label'],
'mapped' => false,
'label_attr' => ['loc' => $field['loc']],
'data' => $field['value'],
'required' => ('true' == $field['mandatory']),
]);
} elseif ('boolean' == $field['type']) {
$builder
->add($field['id'], ChoiceType::class, [
'label' => $field['label'],
'mapped' => false,
'label_attr' => ['loc' => $field['loc']],
'data' => $field['value'],
'required' => ('true' == $field['mandatory']),
'choices' => ['Non' => 0, 'Oui' => 1],
]);
} elseif ('desktopmode' == $field['type']) {
$builder
->add($field['id'], ChoiceType::class, [
'label' => $field['label'],
'mapped' => false,
'label_attr' => ['loc' => $field['loc']],
'data' => $field['value'],
'required' => ('true' == $field['mandatory']),
'choices' => ['Très Petit' => '0', 'Petit' => '1', 'Moyen' => '2', 'Grand' => '3', 'Liste' => '4'],
]);
} elseif ('modelist' == $field['type']) {
$builder
->add($field['id'], ChoiceType::class, [
'label' => $field['label'],
'mapped' => false,
'label_attr' => ['loc' => $field['loc']],
'data' => $field['value'],
'required' => ('true' == $field['mandatory']),
'choices' => ['Pavet' => '0', 'Liste' => '1'],
]);
} elseif ('withbookmark' == $field['type']) {
$builder
->add($field['id'], ChoiceType::class, [
'label' => $field['label'],
'mapped' => false,
'label_attr' => ['loc' => $field['loc']],
'data' => $field['value'],
'required' => ('true' == $field['mandatory']),
'choices' => ['Favoris + Items' => '0', 'Items uniquement' => '1', 'Favoris uniquement' => '2'],
]);
} elseif ('itemcategory' == $field['type']) {
$id = $field['value'];
$categorys = $this->container->get('doctrine.orm.entity_manager')->getRepository("App\Entity\Itemcategory")->findAll();
$choices = [];
foreach ($categorys as $category) {
$choices[$category->getLabel()] = $category->getId();
}
$builder
->add($field['id'], ChoiceType::class, [
'label' => $field['label'],
'mapped' => false,
'label_attr' => ['loc' => $field['loc']],
'data' => $id,
'required' => ('true' == $field['mandatory']),
'choices' => $choices,
'placeholder' => '-- Sélectionnez une catégorie --',
]);
} elseif ('alertcategory' == $field['type']) {
$id = $field['value'];
$categorys = $this->container->get('doctrine.orm.entity_manager')->getRepository("App\Entity\Alertcategory")->findAll();
$choices = [];
foreach ($categorys as $category) {
$choices[$category->getLabel()] = $category->getId();
}
$builder
->add($field['id'], ChoiceType::class, [
'label' => $field['label'],
'mapped' => false,
'label_attr' => ['loc' => $field['loc']],
'data' => $id,
'required' => ('true' == $field['mandatory']),
'choices' => $choices,
'placeholder' => '-- Sélectionnez une catégorie --',
]);
} elseif ('appexternal' == $field['type']) {
$id = $field['value'];
$appexternals = $this->container->get('doctrine.orm.entity_manager')->getRepository("App\Entity\Appexternal")->findAll();
$choices = [];
foreach ($appexternals as $appexternal) {
$choices[$appexternal->getName()] = $appexternal->getId();
}
$builder
->add($field['id'], ChoiceType::class, [
'label' => $field['label'],
'mapped' => false,
'label_attr' => ['loc' => $field['loc']],
'data' => $id,
'required' => ('true' == $field['mandatory']),
'choices' => $choices,
'placeholder' => '-- Sélectionnez une application --',
]);
} elseif ('apponly' == $field['type']) {
$builder
->add($field['id'], ChoiceType::class, [
'label' => $field['label'],
'mapped' => false,
'label_attr' => ['loc' => $field['loc']],
'data' => $field['value'],
'required' => ('true' == $field['mandatory']),
'choices' => ['Documents + Tâches' => '0', 'Documents uniquement' => '1', 'Tâches uniquement' => '2'],
]);
} elseif ('target' == $field['type']) {
$builder
->add($field['id'], ChoiceType::class, [
'label' => $field['label'],
'mapped' => false,
'label_attr' => ['loc' => $field['loc']],
'data' => $field['value'],
'required' => ('true' == $field['mandatory']),
'choices' => ['Nouvel onglet/fenêtre' => '_blank', 'iFrame' => 'frame', 'Onglet courant' => '_self'],
]);
} elseif ('ckeditor' == $field['type']) {
$builder
->add($field['id'], CKEditorType::class, [
'config_name' => 'full_config',
'label' => $field['label'],
'mapped' => false,
'label_attr' => ['loc' => $field['loc']],
'data' => $field['value'],
'required' => ('true' == $field['mandatory']),
'config' => ['filebrowserUploadRoute' => 'app_'.$options['access'].'_pagewidget_upload'],
]);
} elseif ('clock' == $field['type']) {
$builder
->add($field['id'], ChoiceType::class, [
'label' => $field['label'],
'mapped' => false,
'label_attr' => ['loc' => $field['loc']],
'data' => $field['value'],
'required' => ('true' == $field['mandatory']),
'choices' => ['Analogique' => '0', 'Numérique' => '1'],
]);
}
}
}
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults([
'data_class' => 'App\Entity\Pagewidget',
'param' => [],
'mode' => 'string',
'access' => 'string',
'idicon' => 'string',
]);
}
}