FixBooleanSearchAsExtension   A
last analyzed

Complexity

Total Complexity 7

Size/Duplication

Total Lines 36
Duplicated Lines 0 %

Importance

Changes 5
Bugs 0 Features 0
Metric Value
wmc 7
eloc 20
c 5
b 0
f 0
dl 0
loc 36
rs 10

2 Methods

Rating   Name   Duplication   Size   Complexity  
A dropdown_source_for_boolean_fields() 0 6 1
A updateSearchableFields() 0 25 6
1
<?php
2
3
namespace Sunnysideup\YesNoAnyFilter;
4
5
use SilverStripe\Forms\DropdownField;
6
use SilverStripe\Core\Extension;
7
use SilverStripe\ORM\DataObject;
8
9
/**
10
 * Class \Sunnysideup\YesNoAnyFilter\FixBooleanSearchAsExtension.
11
 *
12
 * @property DataObject|FixBooleanSearchAsExtension $owner
13
 */
14
class FixBooleanSearchAsExtension extends Extension
15
{
16
    public static function dropdown_source_for_boolean_fields()
17
    {
18
        return [
19
            null => _t('SilverStripe\\ORM\\FieldType\\DBBoolean.ANYANSWER', '(Any)'),
20
            1 => _t('SilverStripe\\ORM\\FieldType\\DBBoolean.YESANSWER', 'Yes'),
21
            0 => _t('SilverStripe\\ORM\\FieldType\\DBBoolean.NOANSWER', 'No'),
22
        ];
23
    }
24
25
    public function updateSearchableFields(&$fields)
26
    {
27
        $matches = [];
28
        $owner = $this->getOwner();
29
        $candidates = $owner->config()->get('db');
30
        if (count($candidates) > 0) {
31
            foreach ($candidates as $fieldName => $type) {
32
                if (0 === stripos($type, 'Boolean')) {
33
                    $matches[$fieldName] = $fieldName;
34
                }
35
            }
36
37
            $labels = $owner->fieldLabels(false);
38
            foreach (array_keys($fields) as $fieldName) {
39
                if (isset($matches[$fieldName])) {
40
                    $fields[$fieldName]['field'] = DropdownField::create(
41
                        $fieldName,
42
                        $labels[$fieldName],
43
                        self::dropdown_source_for_boolean_fields()
44
                    );
45
                }
46
            }
47
        }
48
49
        return $fields;
50
    }
51
}
52