public static function form_input($i, $data_type, $field, $extras, $array_parameters = [])
 {
     $name = $field['name'];
     $type = $field['type'];
     if ($type == 'date') {
         $type = 'string';
     } else {
         if ($type == 'relation') {
             $type = 'select';
         } else {
             if ($type == 'field' && $field['multiple'] == false) {
                 $type = 'radio';
             } else {
                 if ($type == 'field' && $field['multiple'] == true) {
                     $type = 'checkbox';
                 }
             }
         }
     }
     $subinput = false;
     $fixed_name = str_replace('[]', '', $name);
     $required = false;
     if (isset($field['required'])) {
         $required = $field['required'];
     }
     $parameters = [];
     if ($type == 'select' || $type == 'checkbox' || $type == 'radio') {
         $parameters['options'] = $field['options'];
         if ($type == 'select' && !$required) {
             $parameters['options'] = ['' => ' '] + $parameters['options'];
         }
     }
     // CLASS
     $class = 'form-control input-lg" ';
     if (array_key_exists('class', $extras)) {
         $class .= $extras['class'];
     }
     // FIELD CLASS
     $field_class = 'flex-item ';
     if (array_key_exists('field_class', $extras)) {
         $field_class .= $extras['field_class'];
     }
     if ($type == 'title') {
         $field_class .= ' title';
     }
     $parameters['field_class'] = $field_class;
     // COL
     $col = 6;
     if (array_key_exists('cols', $extras)) {
         $col = $extras['cols'];
     }
     // PARAMETERS ARRAY
     $array = ['class' => $class, 'id' => $name];
     if ($array_parameters) {
         $array = $array + $array_parameters;
     }
     // LABEL
     if (array_key_exists('label', $extras)) {
         $label = $extras['label'];
     } else {
         if (isset($field['final_label'])) {
             $label = $field['final_label'];
         } else {
             $label = trans('fields.' . str_replace('_id', '', $fixed_name));
         }
     }
     if ($required == true) {
         $label .= ' (*)';
     }
     if (isset($field['tooltip']) && $field['tooltip']) {
         if ($data_type == 'view') {
             //$label .= '<div class="tooltip-mini">'.trans('tooltips.'.$fixed_name).'</div>';
         } else {
             $label .= ' <a href="#" class="help" title="' . trans('tooltips.' . $fixed_name) . '"><i class="fa fa-question-circle"></i></a>';
         }
     }
     if (isset($field['filter'])) {
         $label .= ' <a href="' . url('admin/delete-filter/' . $field['filter']) . '" onclick="return confirm(\'' . trans('admin.delete_confirmation') . '\');">( X )</a>';
     }
     if (isset($field['message']) && $field['message']) {
         $label .= '<div class="field-message">' . $field['message'] . '</div>';
     }
     // VALUE
     $value = NULL;
     if ($i && ($i->{$fixed_name} || $i->{$fixed_name} === 0)) {
         $value = $i->{$fixed_name};
     } else {
         if (request()->has($fixed_name)) {
             $value = request()->input($fixed_name);
         } else {
             if (array_key_exists('value', $extras)) {
                 $value = $extras['value'];
             }
         }
     }
     if ($type == 'password') {
         $value = NULL;
     } else {
         if (($type == 'array' || $type == 'checkbox') && $value && is_string($value)) {
             $value = json_decode($value, true);
         }
     }
     // SUBINPUT
     if (array_key_exists('subtype', $extras)) {
         $subinput = $extras['subtype'];
         $array['rel'] = $extras['subinput'] . '_' . $name;
         $fixed_name = $extras['subinput'] . '_' . $name;
         $name = $extras['subinput'] . '_' . $name . '[' . $extras['subcount'] . ']';
         if ($type == 'string' || $type == 'text') {
             $array['class'] = $array['class'] . ' text-control';
         } else {
             if ($type == 'hidden') {
                 $array['class'] = $array['class'] . ' hidden-control';
             }
         }
     }
     // FILAS
     if (array_key_exists('rows', $extras)) {
         $array['rows'] = $extras['rows'];
     }
     // IMAGENES
     if ($type == 'file' || $type == 'image') {
         $array['class'] = $array['class'] . ' fileupload';
         $array['data-type'] = $type;
         $array['data-folder'] = $extras['folder'];
         $parameters['folder'] = $extras['folder'];
         $parameters['i'] = $i;
         if (!$value) {
             $value = request()->old($fixed_name);
         }
         if ($field['multiple']) {
             $array['data-multiple'] = '1';
             $array['multiple'] = true;
         } else {
             $array['data-multiple'] = '0';
         }
     }
     // CAMPOS PREDEFINIDOS
     if (isset($field['preset']) && $field['preset'] == true || $data_type == 'view' || $extras && array_key_exists('disabled', $extras)) {
         $array['disabled'] = true;
     }
     // PLACEHOLDER
     if ($extras && isset($extras['placeholder'])) {
         $array['placeholder'] = $extras['placeholder'];
     }
     // CUSTOM FIELD CORRECTIONS
     $array = \CustomFunc::custom_field($array, $parameters, $type);
     // RESPONSE
     if ($subinput == 'multiple') {
         $response = Field::form_input_builder($name, $type, $parameters, $array, $value, $data_type);
         if (\Session::has('errors') && \Session::get('errors')->default->first($name)) {
             $response .= '<div class="error">' . \Session::get('errors')->default->first($name) . '</div>';
         }
     } else {
         if ($type == 'checkbox' || $type == 'radio' || $type == 'score') {
             $response = Field::form_checkbox_builder($name, $type, $parameters, $label, $col, $i, $value, $data_type);
         } else {
             if ($type == 'hidden') {
                 $response = Field::form_input_builder($name, $type, $parameters, $array, $value, $data_type);
             } else {
                 $response = Field::form_field_builder($name, $type, $parameters, $array, $label, $col, $i, $value, $data_type);
             }
         }
     }
     return $response;
 }