Completed
Push — master ( 51bc1d...ebadd9 )
by Ingo
02:40
created

FileSearchFormFactory::getRequiredContext()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 4
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
c 0
b 0
f 0
dl 0
loc 4
rs 10
cc 1
eloc 2
nc 1
nop 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->disableSecurityToken(); // not posted back, so unnecessary
46
        $form->addExtraClass('form--no-dividers');
47
        $this->invokeWithExtensions('updateForm', $form, $controller, $name, $context);
48
        return $form;
49
    }
50
51
    /**
52
     *
53
     * @param Controller $controller
54
     * @param $name
55
     * @param array $context
56
     * @return FieldList
57
     */
58
    protected function getFormFields(Controller $controller, $name, $context = [])
59
    {
60
        // Note: "Name" field is excluded as it is baked directly into the Search.js react component
61
62
        /** @skipUpgrade */
63
        // File type field
64
        $appCategories = array(
65
            'ARCHIVE' => _t(
66
                'SilverStripe\\AssetAdmin\\Controller\\AssetAdmin.AppCategoryArchive',
67
                'Archive'
68
            ),
69
            'AUDIO' => _t('SilverStripe\\AssetAdmin\\Controller\\AssetAdmin.AppCategoryAudio', 'Audio'),
70
            'DOCUMENT' => _t('SilverStripe\\AssetAdmin\\Controller\\AssetAdmin.AppCategoryDocument', 'Document'),
71
            'IMAGE' => _t('SilverStripe\\AssetAdmin\\Controller\\AssetAdmin.AppCategoryImage', 'Image'),
72
            'VIDEO' => _t('SilverStripe\\AssetAdmin\\Controller\\AssetAdmin.AppCategoryVideo', 'Video'),
73
        );
74
        $typeDropdown = DropdownField::create(
75
            'appCategory',
76
            _t('SilverStripe\\AssetAdmin\\Controller\\AssetAdmin.Filetype', 'File type'),
77
            $appCategories
78
        )->setEmptyString(_t('Enum.ANY', 'Any'));
79
80
        // Limit to current folder
81
        $limitCheckbox = CheckboxField::create('currentFolderOnly', _t(
82
            'SilverStripe\\AssetAdmin\\Controller\\AssetAdmin.CurrentFolderOnly',
83
            'Limit to current folder and its sub-folders?'
84
        ));
85
86
        // Last updated range field
87
        $dateFrom = DateField::create('createdFrom', _t('CMSSearch.FILTERDATEFROM', 'From'))
88
            ->setConfig('showcalendar', true);
89
        $dateTo = DateField::create('createdTo', _t('CMSSearch.FILTERDATETO', 'To'))
90
            ->setConfig('showcalendar', true);
91
        $dateGroup = FieldGroup::create(
92
            _t('AssetTableField.LASTEDIT', 'Last changed'),
93
            [$dateFrom, $dateTo]
94
        )->setName('LastChanged');
95
96
        // Build form with these fields
97
        $fields = FieldList::create($typeDropdown, $dateGroup, $limitCheckbox);
98
99
        $this->invokeWithExtensions('updateFormFields', $fields, $controller, $name, $context);
100
        return $fields;
101
    }
102
103
104
    /**
105
     * Return list of mandatory context keys
106
     *
107
     * @return mixed
108
     */
109
    public function getRequiredContext()
110
    {
111
        return [];
112
    }
113
}
114