Code Duplication    Length = 103-105 lines in 2 locations

src/Ui/Form/Component/Button/ButtonNormalizer.php 1 location

@@ 12-114 (lines=103) @@
9
 * @author PyroCMS, Inc. <[email protected]>
10
 * @author Ryan Thompson <[email protected]>
11
 */
12
class ButtonNormalizer
13
{
14
15
    /**
16
     * Normalize button input.
17
     *
18
     * @param FormBuilder $builder
19
     */
20
    public function normalize(FormBuilder $builder)
21
    {
22
        $buttons = $builder->getButtons();
23
24
        foreach ($buttons as $key => &$button) {
25
            $button = $this->process($key, $button);
26
        }
27
28
        $builder->setButtons($buttons);
29
    }
30
31
    /**
32
     * Process a button.
33
     *
34
     * @param $key
35
     * @param $button
36
     * @return array|string
37
     */
38
    protected function process($key, $button)
39
    {
40
        /*
41
         * If the button is a string then use
42
         * it as the button parameter.
43
         */
44
        if (is_string($button)) {
45
            $button = [
46
                'button' => $button,
47
            ];
48
        }
49
50
        /*
51
         * If the key is a string and the button
52
         * is an array without a button param then
53
         * move the key into the button as that param.
54
         */
55
        if (!is_integer($key) && !isset($button['button'])) {
56
            $button['button'] = $key;
57
        }
58
59
        /**
60
         * Default to size "sm"
61
         */
62
        if (!isset($button['size'])) {
63
            $button['size'] = 'sm';
64
        }
65
66
        /*
67
         * Make sure some default parameters exist.
68
         */
69
        $button['attributes'] = array_get($button, 'attributes', []);
70
71
        /*
72
         * Move the HREF if any to the attributes.
73
         */
74
        if (isset($button['href'])) {
75
            array_set($button['attributes'], 'href', array_pull($button, 'href'));
76
        }
77
78
        /*
79
         * Move the target if any to the attributes.
80
         */
81
        if (isset($button['target'])) {
82
            array_set($button['attributes'], 'target', array_pull($button, 'target'));
83
        }
84
85
        /*
86
         * Move all data-* keys
87
         * to attributes.
88
         */
89
        foreach ($button as $attribute => $value) {
90
            if (str_is('data-*', $attribute)) {
91
                array_set($button, 'attributes.' . $attribute, array_pull($button, $attribute));
92
            }
93
        }
94
95
        /*
96
         * Make sure the HREF is absolute.
97
         */
98
        if (
99
            isset($button['attributes']['href']) &&
100
            is_string($button['attributes']['href']) &&
101
            !starts_with($button['attributes']['href'], ['http', '{'])
102
        ) {
103
            $button['attributes']['href'] = url($button['attributes']['href']);
104
        }
105
106
        if (isset($button['dropdown'])) {
107
            foreach ($button['dropdown'] as $key => &$dropdown) {
108
                $dropdown = $this->process($key, $dropdown);
109
            }
110
        }
111
112
        return $button;
113
    }
114
}
115

src/Ui/Table/Component/Button/ButtonNormalizer.php 1 location

@@ 12-116 (lines=105) @@
9
 * @author PyroCMS, Inc. <[email protected]>
10
 * @author Ryan Thompson <[email protected]>
11
 */
12
class ButtonNormalizer
13
{
14
15
    /**
16
     * Normalize button input.
17
     *
18
     * @param TableBuilder $builder
19
     */
20
    public function normalize(TableBuilder $builder)
21
    {
22
        $buttons = $builder->getButtons();
23
24
        foreach ($buttons as $key => &$button) {
25
            $button = $this->process($key, $button);
26
        }
27
28
        $builder->setButtons($buttons);
29
    }
30
31
    /**
32
     * Process the button.
33
     *
34
     * @param $key
35
     * @param $button
36
     * @return array
37
     */
38
    protected function process($key, $button)
39
    {
40
        /*
41
         * If the button is a string then use
42
         * it as the button parameter.
43
         */
44
        if (is_string($button)) {
45
            $button = [
46
                'button' => $button,
47
            ];
48
        }
49
50
        /*
51
         * If the key is a string and the button
52
         * is an array without a button param then
53
         * move the key into the button as that param.
54
         */
55
        if (!is_integer($key) && !isset($button['button'])) {
56
            $button['button'] = $key;
57
        }
58
59
        /*
60
         * If the key is a string and the button
61
         * is an array without a slug param then
62
         * move the key into the button as that param.
63
         */
64
        if (!is_integer($key) && !isset($button['slug'])) {
65
            $button['slug'] = $key;
66
        }
67
68
        /*
69
         * Move the HREF if any to the attributes.
70
         */
71
        if (isset($button['href'])) {
72
            array_set($button['attributes'], 'href', array_pull($button, 'href'));
73
        }
74
75
        /*
76
         * Move the target if any to the attributes.
77
         */
78
        if (isset($button['target'])) {
79
            array_set($button['attributes'], 'target', array_pull($button, 'target'));
80
        }
81
82
        /*
83
         * Move all data-* keys
84
         * to attributes.
85
         */
86
        foreach ($button as $attribute => $value) {
87
            if (str_is('data-*', $attribute)) {
88
                array_set($button, 'attributes.' . $attribute, array_pull($button, $attribute));
89
            }
90
        }
91
92
        /*
93
         * Make sure the HREF is absolute.
94
         */
95
        if (
96
            isset($button['attributes']['href']) &&
97
            is_string($button['attributes']['href']) &&
98
            !starts_with($button['attributes']['href'], ['http', '{'])
99
        ) {
100
            $button['attributes']['href'] = url($button['attributes']['href']);
101
        }
102
103
        /*
104
         * Use small buttons for tables.
105
         */
106
        $button['size'] = array_get($button, 'size', 'sm');
107
108
        if (isset($button['dropdown'])) {
109
            foreach ($button['dropdown'] as $key => &$dropdown) {
110
                $dropdown = $this->process($key, $dropdown);
111
            }
112
        }
113
114
        return $button;
115
    }
116
}
117