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
2
3
declare(strict_types=1);
4
5
namespace XoopsModules\Suico\Form;
6
7
use XoopsThemeForm;
8
use XoopsFormButton;
9
use XoopsFormText;
10
use XoopsFormTextArea;
11
use XoopsFormHidden;
12
use XoopsFormSelect;
13
use XoopsFormLabel;
14
use XoopsFormTextDateSelect;
15
use XoopsModules\Suico\{
16
    Helper
17
};
18
/** @var Helper $helper */
19
20
/**
21
 * Class FieldForm
22
 * @package XoopsModules\Suico\Form
23
 */
24
class FieldForm extends XoopsThemeForm
25
{
26
    /**
27
     * @param Suico\Field $field  {@link Suico\Field} object to get edit form for
28
     * @param mixed       $action URL to submit to - or false for $_SERVER['REQUEST_URI']
29
     */
30
    public function __construct(Suico\Field $field, $action = false)
0 ignored issues
show
Bug introduced by
The type XoopsModules\Suico\Form\Suico\Field was not found. Maybe you did not declare it correctly or list all dependencies?

The issue could also be caused by a filter entry in the build configuration. If the path has been excluded in your configuration, e.g. excluded_paths: ["lib/*"], you can move it to the dependency path list as follows:

filter:
    dependency_paths: ["lib/*"]

For further information see https://scrutinizer-ci.com/docs/tools/php/php-scrutinizer/#list-dependency-paths

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