FieldForm::__construct()   F
last analyzed

Complexity

Conditions 43
Paths > 20000

Size

Total Lines 215
Code Lines 185

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
eloc 185
c 1
b 0
f 0
dl 0
loc 215
rs 0
cc 43
nc 37200
nop 2

How to fix   Long Method    Complexity   

Long Method

Small methods make your code easier to understand, in particular if combined with a good name. Besides, if your method is small, finding a good name is usually much easier.

For example, if you find yourself adding comments to a method's body, this is usually a good sign to extract the commented part to a new method, and use the comment as a starting point when coming up with a good name for this new method.

Commonly applied refactorings include:

1
<?php declare(strict_types=1);
2
3
namespace XoopsModules\Suico\Form;
4
5
use XoopsFormButton;
6
use XoopsFormHidden;
7
use XoopsFormLabel;
8
use XoopsFormSelect;
9
use XoopsFormText;
10
use XoopsFormTextArea;
11
use XoopsFormTextDateSelect;
12
use XoopsModules\Suico\{
13
    Field,
14
    Helper
15
};
16
17
use XoopsThemeForm;
18
19
/** @var Helper $helper */
20
/** @var Field $field */
21
22
/**
23
 * Class FieldForm
24
 */
25
class FieldForm extends XoopsThemeForm
26
{
27
    /**
28
     * @param Field $field  {@link Field} object to get edit form for
29
     * @param mixed       $action URL to submit to - or false for $_SERVER['REQUEST_URI']
30
     */
31
    public function __construct(Field $field, $action = false)
32
    {
33
        if (!$action) {
34
            $action = $_SERVER['REQUEST_URI'];
35
        }
36
        $title = $field->isNew() ? \sprintf(\_AM_SUICO_ADD, \_AM_SUICO_FIELD) : \sprintf(\_AM_SUICO_EDIT, \_AM_SUICO_FIELD);
37
        require_once $GLOBALS['xoops']->path('class/xoopsformloader.php');
38
        parent::__construct($title, 'form', $action, 'post', true);
39
        $this->addElement(new XoopsFormText(\_AM_SUICO_TITLE, 'field_title', 35, 255, $field->getVar('field_title', 'e')));
40
        $this->addElement(new XoopsFormTextArea(\_AM_SUICO_DESCRIPTION, 'field_description', $field->getVar('field_description', 'e')));
41
        $fieldcat_id = 0;
42
        if (!$field->isNew()) {
43
            $fieldcat_id = $field->getVar('cat_id');
44
        }
45
        $categoryHandler = Helper::getInstance()->getHandler('Category');
46
        $cat_select      = new XoopsFormSelect(\_AM_SUICO_CATEGORY, 'field_category', $fieldcat_id);
47
        $cat_select->addOption(0, \_AM_SUICO_DEFAULT);
48
        $cat_select->addOptionArray($categoryHandler->getList());
49
        $this->addElement($cat_select);
50
        $this->addElement(new XoopsFormText(\_AM_SUICO_WEIGHT, 'field_weight', 10, 10, $field->getVar('field_weight', 'e')));
51
        if ($field->getVar('field_config') || $field->isNew()) {
52
            if ($field->isNew()) {
53
                $this->addElement(new XoopsFormText(\_AM_SUICO_NAME, 'field_name', 35, 255, $field->getVar('field_name', 'e')));
54
            } else {
55
                $this->addElement(new XoopsFormLabel(\_AM_SUICO_NAME, $field->getVar('field_name')));
56
                $this->addElement(new XoopsFormHidden('id', $field->getVar('field_id')));
57
            }
58
            //autotext and theme left out of this one as fields of that type should never be changed (valid assumption, I think)
59
            $fieldtypes     = [
60
                'checkbox'     => \_AM_SUICO_CHECKBOX,
61
                'date'         => \_AM_SUICO_DATE,
62
                'datetime'     => \_AM_SUICO_DATETIME,
63
                'longdate'     => \_AM_SUICO_LONGDATE,
64
                'group'        => \_AM_SUICO_GROUP,
65
                'group_multi'  => \_AM_SUICO_GROUPMULTI,
66
                'language'     => \_AM_SUICO_LANGUAGE,
67
                'radio'        => \_AM_SUICO_RADIO,
68
                'select'       => \_AM_SUICO_SELECT,
69
                'select_multi' => \_AM_SUICO_SELECTMULTI,
70
                'textarea'     => \_AM_SUICO_TEXTAREA,
71
                'dhtml'        => \_AM_SUICO_DHTMLTEXTAREA,
72
                'textbox'      => \_AM_SUICO_TEXTBOX,
73
                'timezone'     => \_AM_SUICO_TIMEZONE,
74
                'yesno'        => \_AM_SUICO_YESNO,
75
            ];
76
            $element_select = new XoopsFormSelect(\_AM_SUICO_TYPE, 'field_type', $field->getVar('field_type', 'e'));
77
            $element_select->addOptionArray($fieldtypes);
78
            $this->addElement($element_select);
79
            switch ($field->getVar('field_type')) {
80
                case 'textbox':
81
                    $valuetypes  = [
82
                        \XOBJ_DTYPE_TXTBOX          => \_AM_SUICO_TXTBOX,
83
                        \XOBJ_DTYPE_EMAIL           => \_AM_SUICO_EMAIL,
84
                        \XOBJ_DTYPE_INT             => \_AM_SUICO_INT,
85
                        \XOBJ_DTYPE_FLOAT           => \_AM_SUICO_FLOAT,
86
                        \XOBJ_DTYPE_DECIMAL         => \_AM_SUICO_DECIMAL,
87
                        \XOBJ_DTYPE_TXTAREA         => \_AM_SUICO_TXTAREA,
88
                        \XOBJ_DTYPE_URL             => \_AM_SUICO_URL,
89
                        \XOBJ_DTYPE_OTHER           => \_AM_SUICO_OTHER,
90
                        \XOBJ_DTYPE_ARRAY           => \_AM_SUICO_ARRAY,
91
                        \XOBJ_DTYPE_UNICODE_ARRAY   => \_AM_SUICO_UNICODE_ARRAY,
92
                        \XOBJ_DTYPE_UNICODE_TXTBOX  => \_AM_SUICO_UNICODE_TXTBOX,
93
                        \XOBJ_DTYPE_UNICODE_TXTAREA => \_AM_SUICO_UNICODE_TXTAREA,
94
                        \XOBJ_DTYPE_UNICODE_EMAIL   => \_AM_SUICO_UNICODE_EMAIL,
95
                        \XOBJ_DTYPE_UNICODE_URL     => \_AM_SUICO_UNICODE_URL,
96
                    ];
97
                    $type_select = new XoopsFormSelect(\_AM_SUICO_VALUETYPE, 'field_valuetype', $field->getVar('field_valuetype', 'e'));
98
                    $type_select->addOptionArray($valuetypes);
99
                    $this->addElement($type_select);
100
                    break;
101
                case 'select':
102
                case 'radio':
103
                    $valuetypes  = [
104
                        \XOBJ_DTYPE_TXTBOX          => \_AM_SUICO_TXTBOX,
105
                        \XOBJ_DTYPE_EMAIL           => \_AM_SUICO_EMAIL,
106
                        \XOBJ_DTYPE_INT             => \_AM_SUICO_INT,
107
                        \XOBJ_DTYPE_FLOAT           => \_AM_SUICO_FLOAT,
108
                        \XOBJ_DTYPE_DECIMAL         => \_AM_SUICO_DECIMAL,
109
                        \XOBJ_DTYPE_TXTAREA         => \_AM_SUICO_TXTAREA,
110
                        \XOBJ_DTYPE_URL             => \_AM_SUICO_URL,
111
                        \XOBJ_DTYPE_OTHER           => \_AM_SUICO_OTHER,
112
                        \XOBJ_DTYPE_ARRAY           => \_AM_SUICO_ARRAY,
113
                        \XOBJ_DTYPE_UNICODE_ARRAY   => \_AM_SUICO_UNICODE_ARRAY,
114
                        \XOBJ_DTYPE_UNICODE_TXTBOX  => \_AM_SUICO_UNICODE_TXTBOX,
115
                        \XOBJ_DTYPE_UNICODE_TXTAREA => \_AM_SUICO_UNICODE_TXTAREA,
116
                        \XOBJ_DTYPE_UNICODE_EMAIL   => \_AM_SUICO_UNICODE_EMAIL,
117
                        \XOBJ_DTYPE_UNICODE_URL     => \_AM_SUICO_UNICODE_URL,
118
                    ];
119
                    $type_select = new XoopsFormSelect(\_AM_SUICO_VALUETYPE, 'field_valuetype', $field->getVar('field_valuetype', 'e'));
120
                    $type_select->addOptionArray($valuetypes);
121
                    $this->addElement($type_select);
122
                    break;
123
            }
124
            //$this->addElement(new XoopsFormRadioYN(_AM_SUICO_NOTNULL, 'field_notnull', $field->getVar('field_notnull', 'e') ));
125
            if ('select' === $field->getVar('field_type') || 'select_multi' === $field->getVar('field_type') || 'radio' === $field->getVar('field_type') || 'checkbox' === $field->getVar('field_type')) {
126
                $options = $field->getVar('field_options');
127
                if (\count($options) > 0) {
128
                    $remove_options          = new \XoopsFormCheckBox(\_AM_SUICO_REMOVEOPTIONS, 'removeOptions');
129
                    $remove_options->columns = 3;
130
                    \asort($options);
131
                    foreach (\array_keys($options) as $key) {
132
                        $options[$key] .= "[{$key}]";
133
                    }
134
                    $remove_options->addOptionArray($options);
135
                    $this->addElement($remove_options);
136
                }
137
                $option_text = "<table  cellspacing='1'><tr><td class='width20'>" . \_AM_SUICO_KEY . '</td><td>' . \_AM_SUICO_VALUE . '</td></tr>';
138
                for ($i = 0; $i < 3; ++$i) {
139
                    $option_text .= "<tr><td><input type='text' name='addOption[{$i}][key]' id='addOption[{$i}][key]' size='15'></td><td><input type='text' name='addOption[{$i}][value]' id='addOption[{$i}][value]' size='35'></td></tr>";
140
                    $option_text .= "<tr height='3px'><td colspan='2'> </td></tr>";
141
                }
142
                $option_text .= '</table>';
143
                $this->addElement(new XoopsFormLabel(\_AM_SUICO_ADDOPTION, $option_text));
144
            }
145
        }
146
        if ($field->getVar('field_edit')) {
147
            switch ($field->getVar('field_type')) {
148
                case 'textbox':
149
                case 'textarea':
150
                case 'dhtml':
151
                    $this->addElement(new XoopsFormText(\_AM_SUICO_MAXLENGTH, 'field_maxlength', 35, 35, $field->getVar('field_maxlength', 'e')));
152
                    $this->addElement(new XoopsFormTextArea(\_AM_SUICO_DEFAULT, 'field_default', $field->getVar('field_default', 'e')));
153
                    break;
154
                case 'checkbox':
155
                case 'select_multi':
156
                    $def_value = null != $field->getVar('field_default', 'e') ? \unserialize($field->getVar('field_default', 'n')) : null;
157
                    $element   = new XoopsFormSelect(\_AM_SUICO_DEFAULT, 'field_default', $def_value, 8, true);
158
                    $options   = $field->getVar('field_options');
159
                    \asort($options);
160
                    // If options do not include an empty element, then add a blank option to prevent any default selection
161
                    //                if (!in_array('', array_keys($options))) {
162
                    if (!\array_key_exists('', $options)) {
163
                        $element->addOption('', \_NONE);
164
                    }
165
                    $element->addOptionArray($options);
166
                    $this->addElement($element);
167
                    break;
168
                case 'select':
169
                case 'radio':
170
                    $def_value = null != $field->getVar('field_default', 'e') ? $field->getVar('field_default') : null;
171
                    $element   = new XoopsFormSelect(\_AM_SUICO_DEFAULT, 'field_default', $def_value);
172
                    $options   = $field->getVar('field_options');
173
                    \asort($options);
174
                    // If options do not include an empty element, then add a blank option to prevent any default selection
175
                    //                if (!in_array('', array_keys($options))) {
176
                    if (!\array_key_exists('', $options)) {
177
                        $element->addOption('', \_NONE);
178
                    }
179
                    $element->addOptionArray($options);
180
                    $this->addElement($element);
181
                    break;
182
                case 'date':
183
                    $this->addElement(new XoopsFormTextDateSelect(\_AM_SUICO_DEFAULT, 'field_default', 15, $field->getVar('field_default', 'e')));
184
                    break;
185
                case 'longdate':
186
                    $this->addElement(new XoopsFormTextDateSelect(\_AM_SUICO_DEFAULT, 'field_default', 15, \strtotime($field->getVar('field_default', 'e'))));
187
                    break;
188
                case 'datetime':
189
                    $this->addElement(new \XoopsFormDateTime(\_AM_SUICO_DEFAULT, 'field_default', 15, $field->getVar('field_default', 'e')));
190
                    break;
191
                case 'yesno':
192
                    $this->addElement(new \XoopsFormRadioYN(\_AM_SUICO_DEFAULT, 'field_default', $field->getVar('field_default', 'e')));
193
                    break;
194
                case 'timezone':
195
                    $this->addElement(new \XoopsFormSelectTimezone(\_AM_SUICO_DEFAULT, 'field_default', $field->getVar('field_default', 'e')));
196
                    break;
197
                case 'language':
198
                    $this->addElement(new \XoopsFormSelectLang(\_AM_SUICO_DEFAULT, 'field_default', $field->getVar('field_default', 'e')));
199
                    break;
200
                case 'group':
201
                    $this->addElement(new \XoopsFormSelectGroup(\_AM_SUICO_DEFAULT, 'field_default', true, $field->getVar('field_default', 'e')));
202
                    break;
203
                case 'group_multi':
204
                    $this->addElement(new \XoopsFormSelectGroup(\_AM_SUICO_DEFAULT, 'field_default', true, \unserialize($field->getVar('field_default', 'n')), 5, true));
205
                    break;
206
                case 'theme':
207
                    $this->addElement(new \XoopsFormSelectTheme(\_AM_SUICO_DEFAULT, 'field_default', $field->getVar('field_default', 'e')));
208
                    break;
209
                case 'autotext':
210
                    $this->addElement(new XoopsFormTextArea(\_AM_SUICO_DEFAULT, 'field_default', $field->getVar('field_default', 'e')));
211
                    break;
212
            }
213
        }
214
        /** @var \XoopsGroupPermHandler $grouppermHandler */
215
        $grouppermHandler = \xoops_getHandler('groupperm');
216
        $searchable_types = [
217
            'textbox',
218
            'select',
219
            'radio',
220
            'yesno',
221
            'date',
222
            'datetime',
223
            'timezone',
224
            'language',
225
        ];
226
        if (\in_array($field->getVar('field_type'), $searchable_types, true)) {
227
            $search_groups = $grouppermHandler->getGroupIds('profile_search', $field->getVar('field_id'), $GLOBALS['xoopsModule']->getVar('mid'));
228
            $this->addElement(new \XoopsFormSelectGroup(\_AM_SUICO_PROF_SEARCH, 'profile_search', true, $search_groups, 5, true));
229
        }
230
        if ($field->getVar('field_edit') || $field->isNew()) {
231
            $editable_groups = [];
232
            if (!$field->isNew()) {
233
                //Load groups
234
                $editable_groups = $grouppermHandler->getGroupIds('profile_edit', $field->getVar('field_id'), $GLOBALS['xoopsModule']->getVar('mid'));
235
            }
236
            $this->addElement(new \XoopsFormSelectGroup(\_AM_SUICO_PROF_EDITABLE, 'profile_edit', false, $editable_groups, 5, true));
237
            $this->addElement(new \XoopsFormRadioYN(\_AM_SUICO_REQUIRED, 'field_required', $field->getVar('field_required', 'e')));
238
            $regstep_select = new XoopsFormSelect(\_AM_SUICO_PROF_REGISTER, 'step_id', $field->getVar('step_id', 'e'));
239
            $regstep_select->addOption(0, \_NO);
240
            $regstepHandler = Helper::getInstance()->getHandler('Regstep');
241
            $regstep_select->addOptionArray($regstepHandler->getList());
242
            $this->addElement($regstep_select);
243
        }
244
        $this->addElement(new XoopsFormHidden('op', 'save'));
245
        $this->addElement(new XoopsFormButton('', 'submit', \_SUBMIT, 'submit'));
246
    }
247
}
248