/** * Given an entry and a form field id, calculate the entry value for that field. * * @access public * @param array $entry * @param array $field * @return null|string */ public static function field_value($entry, $field_settings, $format = 'html') { if (empty($entry['form_id']) || empty($field_settings['id'])) { return NULL; } $gravityview_view = GravityView_View::getInstance(); $field_id = $field_settings['id']; $form = $gravityview_view->getForm(); $field = gravityview_get_field($form, $field_id); if ($field && is_numeric($field_id)) { // Used as file name of field template in GV. // Don't use RGFormsModel::get_input_type( $field ); we don't care if it's a radio input; we want to know it's a 'quiz' field $field_type = $field->type; $value = RGFormsModel::get_lead_field_value($entry, $field); } else { $field = GravityView_Fields::get_associated_field($field_id); $field_type = $field_id; // Used as file name of field template in GV } // If a Gravity Forms Field is found, get the field display if ($field) { // Prevent any PHP warnings that may be generated ob_start(); $display_value = GFCommon::get_lead_field_display($field, $value, $entry["currency"], false, $format); if ($errors = ob_get_clean()) { do_action('gravityview_log_error', 'GravityView_API[field_value] Errors when calling GFCommon::get_lead_field_display()', $errors); } $display_value = apply_filters("gform_entry_field_value", $display_value, $field, $entry, $form); // prevent the use of merge_tags for non-admin fields if (!empty($field->adminOnly)) { $display_value = self::replace_variables($display_value, $form, $entry); } } else { $value = $display_value = rgar($entry, $field_id); $display_value = $value; } // Check whether the field exists in /includes/fields/{$field_type}.php // This can be overridden by user template files. $field_path = $gravityview_view->locate_template("fields/{$field_type}.php"); // Set the field data to be available in the templates $gravityview_view->setCurrentField(array('form' => $form, 'field_id' => $field_id, 'field' => $field, 'field_settings' => $field_settings, 'value' => $value, 'display_value' => $display_value, 'format' => $format, 'entry' => $entry, 'field_type' => $field_type, 'field_path' => $field_path)); if (!empty($field_path)) { do_action('gravityview_log_debug', sprintf('[field_value] Rendering %s', $field_path)); ob_start(); load_template($field_path, false); $output = ob_get_clean(); } else { // Backup; the field template doesn't exist. $output = $display_value; } // Get the field settings again so that the field template can override the settings $field_settings = $gravityview_view->getCurrentField('field_settings'); /** * @filter `gravityview_field_entry_value_{$field_type}_pre_link` Modify the field value output for a field type before Show As Link setting is applied. Example: `gravityview_field_entry_value_number_pre_link` * @since 1.16 * @param string $output HTML value output * @param array $entry The GF entry array * @param array $field_settings Settings for the particular GV field * @param array $field Field array, as fetched from GravityView_View::getCurrentField() */ $output = apply_filters('gravityview_field_entry_value_' . $field_type . '_pre_link', $output, $entry, $field_settings, $gravityview_view->getCurrentField()); /** * Link to the single entry by wrapping the output in an anchor tag * * Fields can override this by modifying the field data variable inside the field. See /templates/fields/post_image.php for an example. * */ if (!empty($field_settings['show_as_link']) && !gv_empty($output, false, false)) { $link_atts = empty($field_settings['new_window']) ? array() : array('target' => '_blank'); $output = self::entry_link_html($entry, $output, $link_atts, $field_settings); } /** * @filter `gravityview_field_entry_value_{$field_type}` Modify the field value output for a field type. Example: `gravityview_field_entry_value_number` * @since 1.6 * @param string $output HTML value output * @param array $entry The GF entry array * @param array $field_settings Settings for the particular GV field * @param array $field Current field being displayed */ $output = apply_filters('gravityview_field_entry_value_' . $field_type, $output, $entry, $field_settings, $gravityview_view->getCurrentField()); /** * @filter `gravityview_field_entry_value` Modify the field value output for all field types * @param string $output HTML value output * @param array $entry The GF entry array * @param array $field_settings Settings for the particular GV field * @param array $field_data {@since 1.6} */ $output = apply_filters('gravityview_field_entry_value', $output, $entry, $field_settings, $gravityview_view->getCurrentField()); return $output; }
/** * * Fill-in the saved values into the form inputs * * @param string $field_content Always empty. Returning not-empty overrides the input. * @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) { $gv_field = GravityView_Fields::get_associated_field($field); // If the form has been submitted, then we don't need to pre-fill the values, // Except for fileupload type and when a field input is overridden- run always!! if ($this->is_edit_entry_submission() && !in_array($field->type, array('fileupload', 'post_image')) && false === ($gv_field && is_callable(array($gv_field, 'get_field_input'))) || !empty($field_content) || in_array($field->type, array('honeypot')) || 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); } $field_value = $this->get_field_value($field); /** * @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); /** * @filter `gravityview/edit_entry/field_value_{field_type}` Change the value of an Edit Entry field for a specific field type * @since 1.17 * @param mixed $field_value field value used to populate the input * @param GF_Field $field Gravity Forms field object */ $field_value = apply_filters('gravityview/edit_entry/field_value_' . $field->type, $field_value, $field); // Prevent any PHP warnings, like undefined index ob_start(); if ($gv_field && is_callable(array($gv_field, 'get_field_input'))) { /** @var GF_Field $gv_field */ $return = $gv_field->get_field_input($this->form, $field_value, $this->entry, $field); } else { $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; }