LessonAdmin   A
last analyzed

Complexity

Total Complexity 7

Size/Duplication

Total Lines 74
Duplicated Lines 0 %

Importance

Changes 2
Bugs 0 Features 0
Metric Value
wmc 7
eloc 41
c 2
b 0
f 0
dl 0
loc 74
rs 10

5 Methods

Rating   Name   Duplication   Size   Complexity  
A setUploaderHelper() 0 3 1
A configureListFields() 0 13 1
A configureFormFields() 0 29 3
A configureDatagridFilters() 0 5 1
A configureRoutes() 0 3 1
1
<?php
2
3
namespace App\Admin;
4
5
use App\Model\LessonInterface;
6
use Sonata\AdminBundle\Admin\AbstractAdmin;
7
use Sonata\AdminBundle\Datagrid\ListMapper;
8
use Sonata\AdminBundle\Datagrid\DatagridMapper;
9
use Sonata\AdminBundle\Form\FormMapper;
10
use Sonata\FormatterBundle\Form\Type\SimpleFormatterType;
11
use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
12
use Symfony\Component\Form\Extension\Core\Type\FileType;
13
use Symfony\Component\Form\Extension\Core\Type\TextType;
14
use Sonata\AdminBundle\Route\RouteCollection;
15
use Vich\UploaderBundle\Templating\Helper\UploaderHelper;
16
17
final class LessonAdmin extends AbstractAdmin
18
{
19
    protected $datagridValues = [
20
        '_page' => 1,
21
        '_sort_order' => 'ASC',
22
        '_sort_by' => 'position',
23
    ];
24
25
    private UploaderHelper $uploaderHelper;
26
27
    public function setUploaderHelper(UploaderHelper $uploaderHelper)
28
    {
29
        $this->uploaderHelper = $uploaderHelper;
30
    }
31
32
    protected function configureFormFields(FormMapper $formMapper)
33
    {
34
        $formMapper->add('title', TextType::class);
35
        $formMapper->add('description', SimpleFormatterType::class, [
36
            'format' => 'richhtml',
37
            'attr' => ['class' => 'ckeditor'],
38
        ]);
39
        $formMapper->add('durationInMinutes');
40
        $formMapper->add('embedType', ChoiceType::class, [
41
                'choices' => [
42
                    'code' => LessonInterface::EMBED_TYPE_CODE,
43
                    'Vimeo' => LessonInterface::EMBED_TYPE_VIMEO,
44
                ],
45
                'required' => true,
46
            ]
47
        );
48
        $formMapper->add('embedCode');
49
        $formMapper->add('module');
50
51
        $fileFieldOptions = ['required' => false];
52
        if (
53
            null !== $this->getSubject() &&
54
            null !== $this->getSubject()->getCoverImageName()
55
        ) {
56
            $imagePath = $this->uploaderHelper->asset($this->getSubject(), 'coverImageFile');
57
58
            $fileFieldOptions['help'] = '<img src="'.$imagePath.'" class="admin-preview" />';
59
        }
60
        $formMapper->add('coverImageFile', FileType::class, $fileFieldOptions);
61
    }
62
63
    protected function configureDatagridFilters(DatagridMapper $datagridMapper)
64
    {
65
        $datagridMapper->add('title');
66
        $datagridMapper->add('module');
67
        $datagridMapper->add('module.course');
68
    }
69
70
    protected function configureListFields(ListMapper $listMapper)
71
    {
72
        $listMapper->addIdentifier('title');
73
        $listMapper->add('description');
74
        $listMapper->add('durationInMinutes');
75
        $listMapper->add('module.course');
76
        $listMapper->add('position');
77
        $listMapper->add('coverImageName');
78
        $listMapper->add('_action', null, [
79
            'actions' => [
80
                'move' => [
81
                    'template' => '@PixSortableBehavior/Default/_sort_drag_drop.html.twig',
82
                    'enable_top_bottom_buttons' => true,
83
                ],
84
            ],
85
        ]);
86
    }
87
88
    protected function configureRoutes(RouteCollection $collection)
89
    {
90
        $collection->add('move', $this->getRouterIdParameter().'/move/{position}');
91
    }
92
}
93