MediaType   A
last analyzed

Complexity

Total Complexity 7

Size/Duplication

Total Lines 86
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 7

Test Coverage

Coverage 0%

Importance

Changes 0
Metric Value
wmc 7
lcom 1
cbo 7
dl 0
loc 86
ccs 0
cts 44
cp 0
rs 10
c 0
b 0
f 0

4 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 5 1
B buildForm() 0 31 4
A configureOptions() 0 8 1
A getParent() 0 4 1
1
<?php
2
3
namespace MediaBundle\Form\Type;
4
5
use Doctrine\ORM\EntityManager;
6
use MediaBundle\Manager\MediaManager;
7
use Symfony\Component\Form\FormEvent;
8
use Symfony\Component\Form\FormEvents;
9
use Symfony\Component\Form\AbstractType;
10
use Symfony\Component\Form\FormBuilderInterface;
11
use Symfony\Component\OptionsResolver\OptionsResolver;
12
use Symfony\Component\Form\Extension\Core\Type\FormType;
13
use Symfony\Component\Form\Extension\Core\Type\FileType;
14
use MediaBundle\Form\DataTransformer\MediaDataTransformer;
15
use Symfony\Component\Form\Extension\Core\Type\CheckboxType;
16
17
class MediaType extends AbstractType
18
{
19
20
    /**
21
     *
22
     * @var MediaManager
23
     */
24
    private $manager;
25
26
    /**
27
     *
28
     * @var EntityManager
29
     */
30
    private $entityManager;
31
32
    /**
33
     * 
34
     * @param MediaManager $manager
35
     * @param EntityManager $entityManager
36
     */
37
    public function __construct(MediaManager $manager, EntityManager $entityManager)
38
    {
39
        $this->manager = $manager;
40
        $this->entityManager = $entityManager;
41
    }
42
43
    /**
44
     * 
45
     * @param FormBuilderInterface $builder
46
     * @param array $options
47
     */
48
    public function buildForm(FormBuilderInterface $builder, array $options)
49
    {
50
        $builder
51
                ->add('file', FileType::class, [
52
                    'label' => false,
53
                    'required' => false,
54
                    'attr' => [
55
                        'class' => 'file',
56
                        'data-show-upload' => 'false',
57
                        'data-show-preview' => 'false'
58
        ]]);
59
60
        $builder->addModelTransformer(new MediaDataTransformer($this->manager, $this->entityManager, $options));
61
62
        $builder->addEventListener(FormEvents::PRE_SET_DATA, function(FormEvent $event) {
63
            if ($event->getData()) {
64
                $event->getForm()->add('fileRemove', CheckboxType::class, [
65
                    'mapped' => false,
66
                    'required' => false,
67
                    'label' => 'media.form.label.remove',
68
                ]);
69
            }
70
        });
71
72
        $builder->addEventListener(FormEvents::SUBMIT, function(FormEvent $event) use ($options) {
73
            if ($event->getForm()->has('fileRemove') && $event->getForm()->get('fileRemove')->getData()) {
74
                $this->manager->delete($event->getData(), $options);
75
                $event->setData(null);
76
            }
77
        });
78
    }
79
80
    /**
81
     * 
82
     * @param OptionsResolver $resolver
83
     */
84
    public function configureOptions(OptionsResolver $resolver)
85
    {
86
        $resolver->setDefaults([
87
            'keep_existing' => false,
88
            'translation_domain' => 'MediaBundle'
89
        ]);
90
        $resolver->setRequired(['format', 'data_class']);
91
    }
92
93
    /**
94
     * 
95
     * @return string
96
     */
97
    public function getParent()
98
    {
99
        return FormType::class;
100
    }
101
102
}
103