public static function validate($input) { $search_forms = array(array(), array(), array(), array(), array()); if (!empty($input['search_forms']) && is_array($input['search_forms'])) { $search_fields = DispletRetsIdxSearchFieldsModel::$fields; foreach ($input['search_forms'] as &$form) { if (!empty($form) && is_array($form)) { foreach ($form as &$column) { if (!empty($column) && is_array($column)) { foreach ($column as &$field) { if (!empty($field) && is_array($field)) { foreach ($field as $key => &$value) { switch ($key) { case 'options': $value = !empty($value) && is_array($value) ? array_map('addslashes', $value) : array(); break; case 'increment': case 'min': case 'max': case 'lease_max': case 'sale_min': if (DispletRetsIdxUtilities::empty_excluding_zero($value) && !DispletRetsIdxUtilities::empty_excluding_zero($search_fields[$field['field']]['range'][$key])) { $value = $search_fields[$field['field']]['range'][$key]; } else { $value = DispletRetsIdxUtilities::remove_non_numeric_characters($value); } break; case 'range': if (!empty($value)) { $value = array_filter(array_map(array('DispletRetsIdxUtilities', 'remove_non_numeric_characters'), explode("\n", $value))); } else { $value = array(); } break; default: $value = sanitize_text_field($value); break; } } if (!DispletRetsIdxUtilities::empty_excluding_zero($field['min']) && !DispletRetsIdxUtilities::empty_excluding_zero($field['max'])) { $count = 0; if ($field['field'] === 'price' || $field['field'] === 'price' || $field['field']) { $difference = intval(intval($field['max']) / 1000) - intval(intval($field['min']) / 1000); $increment = intval(intval($field['increment']) / 1000); } else { $difference = floatval($field['max']) - floatval($field['min']); $increment = floatval($field['increment']); } if (!empty($increment)) { $count = floor(($difference + 1) / $increment); } else { $count = intval($difference) + 1; } if ($count > 500) { add_settings_error('search_forms', 'search_forms', 'Too many options for ' . $field['label'] . '! Try a higher min, a lower max, or a higher increment to avoid having ' . number_format($count) . ' options.', 'error'); } } } } $column = array_values($column); } } $form = array_values($form); } } foreach ($input['search_forms'] as $key => $search_form) { if (!empty($search_form)) { $search_forms[$key] = $search_form; } } } return $search_forms; }