Completed
Pull Request — master (#330)
by Damian
01:56
created

FileSearchFormFactory::getForm()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 9
Code Lines 7

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 7
nc 1
nop 3
dl 0
loc 9
rs 9.6666
c 0
b 0
f 0
1
<?php
2
3
4
namespace SilverStripe\AssetAdmin\Forms;
5
6
use SilverStripe\Control\Controller;
7
use SilverStripe\Core\Extensible;
8
use SilverStripe\Core\Injector\Injectable;
9
use SilverStripe\Forms\CheckboxField;
10
use SilverStripe\Forms\DateField;
11
use SilverStripe\Forms\DropdownField;
12
use SilverStripe\Forms\FieldGroup;
13
use SilverStripe\Forms\FieldList;
14
use SilverStripe\Forms\Form;
15
use SilverStripe\Forms\FormFactory;
16
17
/**
18
 * Scaffolds a form for searching files
19
 */
20
class FileSearchFormFactory implements FormFactory
21
{
22
    use Extensible;
23
    use Injectable;
24
25
    public function __construct()
26
    {
27
        $this->constructExtensions();
28
    }
29
30
    /**
31
     * Generates the form
32
     *
33
     * @param Controller $controller Parent controller
34
     * @param string $name
35
     * @param array $context List of properties which may influence form scaffolding.
36
     * E.g. 'Record' if building a form for a record.
37
     * Custom factories may support more advanced parameters.
38
     * @return Form
39
     */
40
    public function getForm(Controller $controller, $name = FormFactory::DEFAULT_NAME, $context = [])
41
    {
42
        $fields = $this->getFormFields($controller, $name, $context);
43
        $actions = FieldList::create();
44
        $form = Form::create($controller, $name, $fields, $actions);
45
        $form->addExtraClass('form--no-dividers');
46
        $this->invokeWithExtensions('updateForm', $form, $controller, $name, $context);
47
        return $form;
48
    }
49
50
    /**
51
     *
52
     * @param Controller $controller
53
     * @param $name
54
     * @param array $context
55
     * @return FieldList
56
     */
57
    protected function getFormFields(Controller $controller, $name, $context = [])
58
    {
59
        // Note: "Name" field is excluded as it is baked directly into the Search.js react component
60
61
        /** @skipUpgrade */
62
        // File type field
63
        $appCategories = array(
64
            'archive' => _t(
65
                'SilverStripe\\AssetAdmin\\Controller\\AssetAdmin.AppCategoryArchive',
66
                'Archive'
67
            ),
68
            'audio' => _t('SilverStripe\\AssetAdmin\\Controller\\AssetAdmin.AppCategoryAudio', 'Audio'),
69
            'document' => _t('SilverStripe\\AssetAdmin\\Controller\\AssetAdmin.AppCategoryDocument', 'Document'),
70
            'image' => _t('SilverStripe\\AssetAdmin\\Controller\\AssetAdmin.AppCategoryImage', 'Image'),
71
            'video' => _t('SilverStripe\\AssetAdmin\\Controller\\AssetAdmin.AppCategoryVideo', 'Video'),
72
        );
73
        $typeDropdown = DropdownField::create(
74
            'AppCategory',
75
            _t('SilverStripe\\AssetAdmin\\Controller\\AssetAdmin.Filetype', 'File type'),
76
            $appCategories
77
        )->setEmptyString(_t('Enum.ANY', 'Any'));
78
79
        // Limit to current folder
80
        $limitCheckbox = CheckboxField::create('CurrentFolderOnly', _t(
81
            'SilverStripe\\AssetAdmin\\Controller\\AssetAdmin.CurrentFolderOnly',
82
            'Limit to current folder and its sub-folders?'
83
        ));
84
85
        // Last updated range field
86
        $dateFrom = DateField::create('CreatedFrom', _t('CMSSearch.FILTERDATEFROM', 'From'))
87
            ->setConfig('showcalendar', true);
88
        $dateTo = DateField::create('CreatedTo', _t('CMSSearch.FILTERDATETO', 'To'))
89
            ->setConfig('showcalendar', true);
90
        $dateGroup = FieldGroup::create(
91
            _t('AssetTableField.LASTEDIT', 'Last changed'),
92
            [$dateFrom, $dateTo]
93
        )->setName('LastChanged');
94
95
        // Build form with these fields
96
        $fields = FieldList::create($typeDropdown, $dateGroup, $limitCheckbox);
97
98
        $this->invokeWithExtensions('updateFormFields', $fields, $controller, $name, $context);
99
        return $fields;
100
    }
101
102
103
    /**
104
     * Return list of mandatory context keys
105
     *
106
     * @return mixed
107
     */
108
    public function getRequiredContext()
109
    {
110
        return [];
111
    }
112
}
113