public function get_value_submission($field_values, $get_from_post_global_var = true) { $parameter_values = GFFormsModel::get_parameter_value($this->inputName, $field_values, $this); if (!empty($parameter_values) && !is_array($parameter_values)) { $parameter_values = explode(',', $parameter_values); } if (!is_array($this->inputs)) { return ''; } $choice_index = 0; $value = array(); foreach ($this->inputs as $input) { if (!empty($_POST['is_submit_' . $this->formId]) && $get_from_post_global_var) { $input_value = rgpost('input_' . str_replace('.', '_', strval($input['id']))); if (is_array($input_value)) { $input_value = ''; } $value[strval($input['id'])] = $input_value; } else { if (is_array($parameter_values)) { foreach ($parameter_values as $item) { $item = trim($item); if (GFFormsModel::choice_value_match($this, $this->choices[$choice_index], $item)) { $value[$input['id'] . ''] = $item; break; } } } } $choice_index++; } return $value; }
/** * Retrieve the input value on submission. * * @param string $standard_name The input name used when accessing the $_POST. * @param string $custom_name The dynamic population parameter name. * @param array $field_values The dynamic population parameter names with their corresponding values to be populated. * @param bool|true $get_from_post_global_var Whether to get the value from the $_POST array as opposed to $field_values. * * @return array|string */ public function get_input_value_submission($standard_name, $custom_name = '', $field_values = array(), $get_from_post_global_var = true) { $form_id = $this->formId; if (!empty($_POST['is_submit_' . $form_id]) && $get_from_post_global_var) { $value = rgpost($standard_name); $value = GFFormsModel::maybe_trim_input($value, $form_id, $this); return $value; } elseif ($this->allowsPrepopulate) { return GFFormsModel::get_parameter_value($custom_name, $field_values, $this); } }
/** * * Fill-in the saved values into the form inputs * * @param string $field_content Always empty. * @param GF_Field $field * @param string|array $value If array, it's a field with multiple inputs. If string, single input. * @param int $lead_id Lead ID. Always 0 for the `gform_field_input` filter. * @param int $form_id Form ID * * @return mixed */ function modify_edit_field_input($field_content = '', $field, $value, $lead_id = 0, $form_id) { // If the form has been submitted, then we don't need to pre-fill the values, // Except for fileupload type - run always!! if ($this->is_edit_entry_submission() && 'fileupload' !== $field->type || GFCommon::is_product_field($field->type)) { return $field_content; } // Turn on Admin-style display for file upload fields only if ('fileupload' === $field->type) { $_GET['page'] = 'gf_entries'; } // SET SOME FIELD DEFAULTS TO PREVENT ISSUES $field->adminOnly = false; /** @see GFFormDisplay::get_counter_init_script() need to prevent adminOnly */ // add categories as choices for Post Category field if ('post_category' === $field->type) { $field = GFCommon::add_categories_as_choices($field, $value); } /** * @filter `gravityview/edit_entry/pre_populate/override` Allow the pre-populated value to override saved value in Edit Entry form. By default, pre-populate mechanism only kicks on empty fields. * @param boolean True: override saved values; False: don't override (default) * @param $field GF_Field object Gravity Forms field object * @since 1.13 */ $override_saved_value = apply_filters('gravityview/edit_entry/pre_populate/override', false, $field); // We're dealing with multiple inputs (e.g. checkbox) but not time or date (as it doesn't store data in input IDs) if (isset($field->inputs) && is_array($field->inputs) && !in_array($field->type, array('time', 'date'))) { $field_value = array(); // only accept pre-populated values if the field doesn't have any choice selected. $allow_pre_populated = $field->allowsPrepopulate; foreach ((array) $field->inputs as $input) { $input_id = strval($input['id']); if (!empty($this->entry[$input_id])) { $field_value[$input_id] = 'post_category' === $field->type ? GFCommon::format_post_category($this->entry[$input_id], true) : $this->entry[$input_id]; $allow_pre_populated = false; } } $pre_value = $field->get_value_submission(array(), false); $field_value = !$allow_pre_populated && !($override_saved_value && !empty($pre_value)) ? $field_value : $pre_value; } else { $id = intval($field->id); // get pre-populated value if exists $pre_value = $field->allowsPrepopulate ? GFFormsModel::get_parameter_value($field->inputName, array(), $field) : ''; // saved field entry value (if empty, fallback to the pre-populated value, if exists) // or pre-populated value if not empty and set to override saved value $field_value = !empty($this->entry[$id]) && !($override_saved_value && !empty($pre_value)) ? $this->entry[$id] : $pre_value; // in case field is post_category but inputType is select, multi-select or radio, convert value into array of category IDs. if ('post_category' === $field->type && !empty($field_value)) { $categories = array(); foreach (explode(',', $field_value) as $cat_string) { $categories[] = GFCommon::format_post_category($cat_string, true); } $field_value = 'multiselect' === $field->get_input_type() ? $categories : implode('', $categories); } } // if value is empty get the default value if defined $field_value = $field->get_value_default_if_empty($field_value); /** * @filter `gravityview/edit_entry/field_value` Change the value of an Edit Entry field, if needed * @since 1.11 * @param mixed $field_value field value used to populate the input * @param object $field Gravity Forms field object ( Class GF_Field ) */ $field_value = apply_filters('gravityview/edit_entry/field_value', $field_value, $field); // Prevent any PHP warnings, like undefined index ob_start(); $return = $field->get_field_input($this->form, $field_value, $this->entry); // If there was output, it's an error $warnings = ob_get_clean(); if (!empty($warnings)) { do_action('gravityview_log_error', __METHOD__ . $warnings, $field_value); } /** * Unset hack $_GET['page'] = 'gf_entries' * We need the fileupload html field to render with the proper id * ( <li id="field_80_16" ... > ) */ unset($_GET['page']); return $return; }
public function get_field_input($form, $value = '', $entry = null) { if (is_admin()) { return ''; } else { $form_id = $form['id']; $is_entry_detail = $this->is_entry_detail(); $is_form_editor = $this->is_form_editor(); $id = (int) $this->id; $field_id = $is_entry_detail || $is_form_editor || $form_id == 0 ? "input_{$id}" : 'input_' . $form_id . "_{$id}"; $tabindex = $this->get_tabindex(); $repeater_id = $this->repeaterId; $repeater_parem = $this->inputName; $repeater_required = $this->repeaterRequiredChildren; $repeater_children = $this->repeaterChildren; $repeater_start = apply_filters('gf_repeater_start', $this->start, $form, $this); $repeater_min = apply_filters('gf_repeater_min', $this->min, $form, $this); $repeater_max = apply_filters('gf_repeater_max', $this->max, $form, $this); $repeater_animations = apply_filters('gf_repeater_animations', $this->animations, $form, $this); if (!empty($repeater_parem)) { $repeater_parem_value = GFFormsModel::get_parameter_value($repeater_parem, $value, $this); if (!empty($repeater_parem_value)) { $repeater_start = $repeater_parem_value; } } if (!empty($repeater_children)) { $repeater_children_info = array(); $repeater_parems = GF_Field_Repeater::get_children_parem_values($form, $repeater_children); foreach ($repeater_children as $repeater_child) { $repeater_children_info[$repeater_child] = array(); $repeater_child_field_index = GF_Field_Repeater::get_field_index($form, 'id', $repeater_child); if (!empty($repeater_required)) { if (in_array($repeater_child, $repeater_required)) { $repeater_children_info[$repeater_child]['required'] = true; } } if (!empty($repeater_parems)) { if (array_key_exists($repeater_child, $repeater_parems)) { $repeater_children_info[$repeater_child]['prePopulate'] = $repeater_parems[$repeater_child]; } } if ($repeater_child_field_index !== false) { $repeater_child_field = $form['fields'][$repeater_child_field_index]; if ($repeater_child_field['inputMask']) { $repeater_children_info[$repeater_child]['inputMask'] = $repeater_child_field['inputMaskValue']; } elseif ($repeater_child_field['type'] == 'phone' && ($repeater_child_field['phoneFormat'] = 'standard')) { $repeater_children_info[$repeater_child]['inputMask'] = "(999) 999-9999"; } if ($repeater_child_field['conditionalLogic']) { $repeater_children_info[$repeater_child]['conditionalLogic'] = $repeater_child_field['conditionalLogic']; } if ($repeater_child_field['maxLength']) { $repeater_children_info[$repeater_child]['maxLength'] = $repeater_child_field['maxLength']; } if ($repeater_child_field['enableEnhancedUI']) { $repeater_children_info[$repeater_child]['enableEnhancedUI'] = $repeater_child_field['enableEnhancedUI']; } } } $repeater_children = $repeater_children_info; } $value = array(); $value['formId'] = $form_id; if (!empty($repeater_start)) { $value['start'] = $repeater_start; } if (!empty($repeater_min)) { $value['min'] = $repeater_min; } if (!empty($repeater_max)) { $value['max'] = $repeater_max; } if (!empty($repeater_children)) { $value['children'] = $repeater_children; } $value = json_encode($value); if (!empty($repeater_animations)) { $animation_script = "var animations={" . $repeater_animations . "};jQuery.extend(true,gfRepeater_repeaters[" . $form_id . "][" . $repeater_id . "].settings.animations,animations);"; GFFormDisplay::add_init_script($form_id, 'repeater_animations', GFFormDisplay::ON_PAGE_RENDER, $animation_script); } return sprintf("<input name='input_%d' id='%s' type='hidden' class='gform_repeater' value='%s' %s />", $id, $field_id, $value, $tabindex); } }
public function get_field_input($form, $value = '', $entry = null) { if (is_admin()) { return ''; } else { $form_id = $form['id']; $is_entry_detail = $this->is_entry_detail(); $is_form_editor = $this->is_form_editor(); $id = (int) $this->id; $field_id = $is_entry_detail || $is_form_editor || $form_id == 0 ? "input_{$id}" : 'input_' . $form_id . "_{$id}"; $tabindex = $this->get_tabindex(); $repeater_parem = $this->inputName; $repeater_start = $this->start; $repeater_min = $this->min; $repeater_max = $this->max; $repeater_required = $this->repeaterRequiredChildren; $repeater_children = $this->repeaterChildren; if (!empty($repeater_parem)) { $repeater_parem_value = GFFormsModel::get_parameter_value($repeater_parem, $value, $this); if (!empty($repeater_parem_value)) { $repeater_start = $repeater_parem_value; } } if (!empty($repeater_children)) { $repeater_children_info = array(); $repeater_parems = GF_Field_Repeater::get_children_parem_values($form, $repeater_children); foreach ($repeater_children as $repeater_child) { $repeater_children_info[$repeater_child] = array(); $repeater_child_field_index = GF_Field_Repeater::get_field_index($form, 'id', $repeater_child); if (!empty($repeater_required)) { if (in_array($repeater_child, $repeater_required)) { $repeater_children_info[$repeater_child]['required'] = true; } } if (!empty($repeater_parems)) { if (array_key_exists($repeater_child, $repeater_parems)) { $repeater_children_info[$repeater_child]['prePopulate'] = $repeater_parems[$repeater_child]; } } if ($repeater_child_field_index !== false) { if ($form['fields'][$repeater_child_field_index]['inputMask']) { $repeater_children_info[$repeater_child]['inputMask'] = $form['fields'][$repeater_child_field_index]['inputMaskValue']; } elseif ($form['fields'][$repeater_child_field_index]['type'] == 'phone' && ($form['fields'][$repeater_child_field_index]['phoneFormat'] = 'standard')) { $repeater_children_info[$repeater_child]['inputMask'] = "(999) 999-9999"; } if ($form['fields'][$repeater_child_field_index]['conditionalLogic']) { $repeater_children_info[$repeater_child]['conditionalLogic'] = $form['fields'][$repeater_child_field_index]['conditionalLogic']; } } } $repeater_children = $repeater_children_info; } if (empty($value)) { $value['formId'] = $form_id; if (!empty($repeater_start)) { $value['start'] = $repeater_start; } if (!empty($repeater_min)) { $value['min'] = $repeater_min; } if (!empty($repeater_max)) { $value['max'] = $repeater_max; } if (!empty($repeater_children)) { $value['children'] = $repeater_children; } $value = json_encode($value); } return sprintf("<input name='input_%d' id='%s' type='hidden' class='gform_repeater' value='%s' %s />", $id, $field_id, $value, $tabindex); } }
/** * * Fill-in the saved values into the form inputs * * @param string $field_content Always empty. * @param GF_Field $field * @param string|array $value If array, it's a field with multiple inputs. If string, single input. * @param int $lead_id Lead ID. Always 0 for the `gform_field_input` filter. * @param int $form_id Form ID * * @return mixed */ function modify_edit_field_input($field_content = '', $field, $value, $lead_id = 0, $form_id) { // If the form has been submitted, then we don't need to pre-fill the values, // Except for fileupload type - run always!! if ($this->is_edit_entry_submission() && 'fileupload' !== $field->type || GFCommon::is_product_field($field->type)) { return $field_content; } // Turn on Admin-style display for file upload fields only if ('fileupload' === $field->type) { $_GET['page'] = 'gf_entries'; } // SET SOME FIELD DEFAULTS TO PREVENT ISSUES $field->adminOnly = false; /** @see GFFormDisplay::get_counter_init_script() need to prevent adminOnly */ // add categories as choices for Post Category field if ('post_category' === $field->type) { $field = GFCommon::add_categories_as_choices($field, $value); } // We're dealing with multiple inputs (e.g. checkbox) if (isset($field->inputs) && is_array($field->inputs)) { $field_value = array(); // only accept pre-populated values if the field doesn't have any choice selected. $allow_pre_populated = true; foreach ((array) $field->inputs as $input) { $input_id = strval($input['id']); if (!empty($this->entry[$input_id])) { $allow_pre_populated = false; $field_value[$input_id] = 'post_category' === $field->type ? GFCommon::format_post_category($this->entry[$input_id], true) : $this->entry[$input_id]; } } if ($allow_pre_populated) { $field_value = $field->get_value_submission(array(), false); } } else { $id = intval($field->id); // get pre-populated value if exists $pre_value = $field->allowsPrepopulate ? GFFormsModel::get_parameter_value($field->inputName, array(), $field) : ''; // saved field entry value (if empty, fallback to the pre-populated value, if exists) $field_value = !empty($this->entry[$id]) ? $this->entry[$id] : $pre_value; // in case field is post_category but inputType is select, multi-select or radio, convert value into array of category IDs. if ('post_category' === $field->type && !empty($field_value)) { $categories = array(); foreach (explode(',', $field_value) as $cat_string) { $categories[] = GFCommon::format_post_category($cat_string, true); } $field_value = 'multiselect' === $field->get_input_type() ? $categories : implode('', $categories); } } // if value is empty get the default value if defined $field_value = $field->get_value_default_if_empty($field_value); // Prevent any PHP warnings, like undefined index ob_start(); $return = $field->get_field_input($this->form, $field_value, $this->entry); // If there was output, it's an error $warnings = ob_get_clean(); if (!empty($warnings)) { do_action('gravityview_log_error', __METHOD__ . $warnings); } /** * Unset hack $_GET['page'] = 'gf_entries' * We need the fileupload html field to render with the proper id * ( <li id="field_80_16" ... > ) */ unset($_GET['page']); return $return; }
/** * Modify the value for the current field input * * @param GF_Field $field * * @return array|mixed|string|void */ private function get_field_value($field) { /** * @filter `gravityview/edit_entry/pre_populate/override` Allow the pre-populated value to override saved value in Edit Entry form. By default, pre-populate mechanism only kicks on empty fields. * @param boolean True: override saved values; False: don't override (default) * @param $field GF_Field object Gravity Forms field object * @since 1.13 */ $override_saved_value = apply_filters('gravityview/edit_entry/pre_populate/override', false, $field); // We're dealing with multiple inputs (e.g. checkbox) but not time or date (as it doesn't store data in input IDs) if (isset($field->inputs) && is_array($field->inputs) && !in_array($field->type, array('time', 'date'))) { $field_value = array(); // only accept pre-populated values if the field doesn't have any choice selected. $allow_pre_populated = $field->allowsPrepopulate; foreach ((array) $field->inputs as $input) { $input_id = strval($input['id']); if (isset($this->entry[$input_id]) && !gv_empty($this->entry[$input_id], false, false)) { $field_value[$input_id] = 'post_category' === $field->type ? GFCommon::format_post_category($this->entry[$input_id], true) : $this->entry[$input_id]; $allow_pre_populated = false; } } $pre_value = $field->get_value_submission(array(), false); $field_value = !$allow_pre_populated && !($override_saved_value && !gv_empty($pre_value, false, false)) ? $field_value : $pre_value; } else { $id = intval($field->id); // get pre-populated value if exists $pre_value = $field->allowsPrepopulate ? GFFormsModel::get_parameter_value($field->inputName, array(), $field) : ''; // saved field entry value (if empty, fallback to the pre-populated value, if exists) // or pre-populated value if not empty and set to override saved value $field_value = !gv_empty($this->entry[$id], false, false) && !($override_saved_value && !gv_empty($pre_value, false, false)) ? $this->entry[$id] : $pre_value; // in case field is post_category but inputType is select, multi-select or radio, convert value into array of category IDs. if ('post_category' === $field->type && !gv_empty($field_value, false, false)) { $categories = array(); foreach (explode(',', $field_value) as $cat_string) { $categories[] = GFCommon::format_post_category($cat_string, true); } $field_value = 'multiselect' === $field->get_input_type() ? $categories : implode('', $categories); } } // if value is empty get the default value if defined $field_value = $field->get_value_default_if_empty($field_value); return $field_value; }