/** * Returns the field input. * * @param array $form * @param string $value * @param null|array $entry * * @return string */ public function get_field_input($form, $value = '', $entry = null) { if (is_array($value)) { $value = ''; } $is_entry_detail = $this->is_entry_detail(); $is_form_editor = $this->is_form_editor(); $form_id = $form['id']; $id = intval($this->id); $field_id = $is_entry_detail || $is_form_editor || $form_id == 0 ? "input_{$id}" : 'input_' . $form_id . "_{$id}"; $size = $this->size; $disabled_text = $is_form_editor ? "disabled='disabled'" : ''; $class_suffix = $is_entry_detail ? '_admin' : ''; $class = $size . $class_suffix; $instruction_div = ''; if ($this->failed_validation) { $phone_format = $this->get_phone_format(); if (rgar($phone_format, 'instruction')) { $instruction_div = sprintf("<div class='instruction validation_message'>%s %s</div>", esc_html__('Phone format:', 'gravityforms'), $phone_format['instruction']); } } $html_input_type = RGFormsModel::is_html5_enabled() ? 'tel' : 'text'; $logic_event = $this->get_conditional_logic_event('keyup'); $placeholder_attribute = $this->get_field_placeholder_attribute(); $required_attribute = $this->isRequired ? 'aria-required="true"' : ''; $invalid_attribute = $this->failed_validation ? 'aria-invalid="true"' : 'aria-invalid="false"'; $tabindex = $this->get_tabindex(); return sprintf("<div class='ginput_container ginput_container_phone'><input name='input_%d' id='%s' type='{$html_input_type}' value='%s' class='%s' {$tabindex} {$logic_event} {$placeholder_attribute} {$required_attribute} {$invalid_attribute} %s/>{$instruction_div}</div>", $id, $field_id, esc_attr($value), esc_attr($class), $disabled_text); }
public function get_field_input($form, $value = '', $entry = null) { $is_entry_detail = $this->is_entry_detail(); $is_form_editor = $this->is_form_editor(); if (is_array($value)) { $value = array_values($value); } $form_id = $form['id']; $id = intval($this->id); $field_id = $is_entry_detail || $is_form_editor || $form_id == 0 ? "input_{$id}" : 'input_' . $form_id . "_{$id}"; $form_id = ($is_entry_detail || $is_form_editor) && empty($form_id) ? rgget('id') : $form_id; $size = $this->size; $disabled_text = $is_form_editor ? "disabled='disabled'" : ''; $class_suffix = $is_entry_detail ? '_admin' : ''; $class = $this->emailConfirmEnabled ? '' : $size . $class_suffix; //Size only applies when confirmation is disabled $form_sub_label_placement = rgar($form, 'subLabelPlacement'); $field_sub_label_placement = $this->subLabelPlacement; $is_sub_label_above = $field_sub_label_placement == 'above' || empty($field_sub_label_placement) && $form_sub_label_placement == 'above'; $sub_label_class_attribute = $field_sub_label_placement == 'hidden_label' ? "class='hidden_sub_label'" : ''; $html_input_type = RGFormsModel::is_html5_enabled() ? 'email' : 'text'; $enter_email_field_input = GFFormsModel::get_input($this, $this->id . ''); $confirm_field_input = GFFormsModel::get_input($this, $this->id . '.2'); $enter_email_label = rgar($enter_email_field_input, 'customLabel') != '' ? $enter_email_field_input['customLabel'] : __('Enter Email', 'gravityforms'); $enter_email_label = apply_filters("gform_email_{$form_id}", apply_filters('gform_email', $enter_email_label, $form_id), $form_id); $confirm_email_label = rgar($confirm_field_input, 'customLabel') != '' ? $confirm_field_input['customLabel'] : __('Confirm Email', 'gravityforms'); $confirm_email_label = apply_filters("gform_email_confirm_{$form_id}", apply_filters('gform_email_confirm', $confirm_email_label, $form_id), $form_id); $single_placeholder_attribute = $this->get_field_placeholder_attribute(); $enter_email_placeholder_attribute = $this->get_input_placeholder_attribute($enter_email_field_input); $confirm_email_placeholder_attribute = $this->get_input_placeholder_attribute($confirm_field_input); if ($is_form_editor) { $single_style = $this->emailConfirmEnabled ? "style='display:none;'" : ''; $confirm_style = $this->emailConfirmEnabled ? '' : "style='display:none;'"; if ($is_sub_label_above) { return "<div class='ginput_container ginput_single_email' {$single_style}>\n <input name='input_{$id}' type='{$html_input_type}' class='" . esc_attr($class) . "' disabled='disabled' {$single_placeholder_attribute} />\n <div class='gf_clear gf_clear_complex'></div>\n </div>\n <div class='ginput_complex ginput_container ginput_confirm_email' {$confirm_style} id='{$field_id}_container'>\n <span id='{$field_id}_container' class='ginput_left'>\n <label for='{$field_id}' {$sub_label_class_attribute}>{$enter_email_label}</label>\n <input class='{$class}' type='text' name='input_{$id}' id='{$field_id}' disabled='disabled' {$enter_email_placeholder_attribute}/>\n </span>\n <span id='{$field_id}_2_container' class='ginput_right'>\n <label for='{$field_id}_2' {$sub_label_class_attribute}>{$confirm_email_label}</label>\n <input class='{$class}' type='text' name='input_{$id}_2' id='{$field_id}_2' disabled='disabled' {$confirm_email_placeholder_attribute}/>\n </span>\n <div class='gf_clear gf_clear_complex'></div>\n </div>"; } else { return "<div class='ginput_container ginput_single_email' {$single_style}>\n <input class='{$class}' name='input_{$id}' type='{$html_input_type}' class='" . esc_attr($class) . "' disabled='disabled' {$single_placeholder_attribute}/>\n <div class='gf_clear gf_clear_complex'></div>\n </div>\n <div class='ginput_complex ginput_container ginput_confirm_email' {$confirm_style} id='{$field_id}_container'>\n <span id='{$field_id}_container' class='ginput_left'>\n <input class='{$class}' type='text' name='input_{$id}' id='{$field_id}' disabled='disabled' {$enter_email_placeholder_attribute}/>\n <label for='{$field_id}' {$sub_label_class_attribute}>{$enter_email_label}</label>\n </span>\n <span id='{$field_id}_2_container' class='ginput_right'>\n <input class='{$class}' type='text' name='input_{$id}_2' id='{$field_id}_2' disabled='disabled' {$confirm_email_placeholder_attribute}/>\n <label for='{$field_id}_2' {$sub_label_class_attribute}>{$confirm_email_label}</label>\n </span>\n <div class='gf_clear gf_clear_complex'></div>\n </div>"; } } else { $logic_event = $this->get_conditional_logic_event('keyup'); if ($this->emailConfirmEnabled && !$is_entry_detail) { $first_tabindex = $this->get_tabindex(); $last_tabindex = $this->get_tabindex(); $email_value = is_array($value) ? esc_attr($value[0]) : $value; $confirmation_value = is_array($value) ? esc_attr($value[1]) : rgpost('input_' . $this->id . '_2'); $confirmation_disabled = $is_entry_detail ? "disabled='disabled'" : $disabled_text; if ($is_sub_label_above) { return "<div class='ginput_complex ginput_container' id='{$field_id}_container'>\n <span id='{$field_id}_container' class='ginput_left'>\n <label for='{$field_id}'>" . $enter_email_label . "</label>\n <input class='{$class}' type='{$html_input_type}' name='input_{$id}' id='{$field_id}' value='" . $email_value . "' {$first_tabindex} {$logic_event} {$disabled_text} {$enter_email_placeholder_attribute}/>\n </span>\n <span id='{$field_id}_2_container' class='ginput_right'>\n <label for='{$field_id}_2' {$sub_label_class_attribute}>{$confirm_email_label}</label>\n <input class='{$class}' type='{$html_input_type}' name='input_{$id}_2' id='{$field_id}_2' value='" . $confirmation_value . "' {$last_tabindex} {$confirmation_disabled} {$confirm_email_placeholder_attribute}/>\n </span>\n <div class='gf_clear gf_clear_complex'></div>\n </div>"; } else { return "<div class='ginput_complex ginput_container' id='{$field_id}_container'>\n <span id='{$field_id}_container' class='ginput_left'>\n <input class='{$class}' type='{$html_input_type}' name='input_{$id}' id='{$field_id}' value='" . $email_value . "' {$first_tabindex} {$logic_event} {$disabled_text} {$enter_email_placeholder_attribute}/>\n <label for='{$field_id}' {$sub_label_class_attribute}>{$enter_email_label}</label>\n </span>\n <span id='{$field_id}_2_container' class='ginput_right'>\n <input class='{$class}' type='{$html_input_type}' name='input_{$id}_2' id='{$field_id}_2' value='" . $confirmation_value . "' {$last_tabindex} {$confirmation_disabled} {$confirm_email_placeholder_attribute}/>\n <label for='{$field_id}_2' {$sub_label_class_attribute}>{$confirm_email_label}</label>\n </span>\n <div class='gf_clear gf_clear_complex'></div>\n </div>"; } } else { $tabindex = $this->get_tabindex(); $value = esc_attr($value); $class = esc_attr($class); return "<div class='ginput_container'>\n <input name='input_{$id}' id='{$field_id}' type='{$html_input_type}' value='{$value}' class='{$class}' {$tabindex} {$logic_event} {$disabled_text} {$single_placeholder_attribute}/>\n </div>"; } } }
public function get_field_input($form, $value = '', $entry = null) { $is_entry_detail = $this->is_entry_detail(); $is_form_editor = $this->is_form_editor(); $form_id = $form['id']; $id = intval($this->id); $field_id = $is_entry_detail || $is_form_editor || $form_id == 0 ? "input_{$id}" : 'input_' . $form_id . "_{$id}"; $form_sub_label_placement = rgar($form, 'subLabelPlacement'); $field_sub_label_placement = rgar($this, 'subLabelPlacement'); $is_sub_label_above = $field_sub_label_placement == 'above' || empty($field_sub_label_placement) && $form_sub_label_placement == 'above'; $sub_label_class_attribute = $field_sub_label_placement == 'hidden_label' ? "class='hidden_sub_label'" : ''; $disabled_text = $is_form_editor ? "disabled='disabled'" : ''; $hour = $minute = $am_selected = $pm_selected = ''; if (!is_array($value) && !empty($value)) { preg_match('/^(\\d*):(\\d*) ?(.*)$/', $value, $matches); $hour = esc_attr($matches[1]); $minute = esc_attr($matches[2]); $the_rest = strtolower(rgar($matches, 3)); $am_selected = strpos($the_rest, 'am') > -1 ? "selected='selected'" : ''; $pm_selected = strpos($the_rest, 'pm') > -1 ? "selected='selected'" : ''; } else { if (is_array($value)) { $value = array_values($value); $hour = esc_attr($value[0]); $minute = esc_attr($value[1]); $am_selected = strtolower(rgar($value, 2)) == 'am' ? "selected='selected'" : ''; $pm_selected = strtolower(rgar($value, 2)) == 'pm' ? "selected='selected'" : ''; } } $hour_input = GFFormsModel::get_input($this, $this->id . '.1'); $minute_input = GFFormsModel::get_input($this, $this->id . '.2'); $hour_placeholder_attribute = $this->get_input_placeholder_attribute($hour_input); $minute_placeholder_attribute = $this->get_input_placeholder_attribute($minute_input); $hour_tabindex = $this->get_tabindex(); $minute_tabindex = $this->get_tabindex(); $ampm_tabindex = $this->get_tabindex(); $is_html5 = RGFormsModel::is_html5_enabled(); $input_type = $is_html5 ? 'number' : 'text'; $max_hour = $this->timeFormat == '24' ? 23 : 12; $hour_html5_attributes = $is_html5 ? "min='0' max='{$max_hour}' step='1'" : ''; $minute_html5_attributes = $is_html5 ? "min='0' max='59' step='1'" : ''; $ampm_field_style = $is_form_editor && $this->timeFormat == '24' ? "style='display:none;'" : ''; if ($is_form_editor || $this->timeFormat != '24') { $am_text = __('AM', 'gravityforms'); $pm_text = __('PM', 'gravityforms'); $ampm_field = $is_sub_label_above ? "<div class='gfield_time_ampm ginput_container' {$ampm_field_style}>\n <label for='{$field_id}_3'> </label>\n <select name='input_{$id}[]' id='{$field_id}_3' {$ampm_tabindex} {$disabled_text}>\n <option value='am' {$am_selected}>{$am_text}</option>\n <option value='pm' {$pm_selected}>{$pm_text}</option>\n </select>\n </div>" : "<div class='gfield_time_ampm ginput_container' {$ampm_field_style}>\n <select name='input_{$id}[]' id='{$field_id}_3' {$ampm_tabindex} {$disabled_text}>\n <option value='am' {$am_selected}>{$am_text}</option>\n <option value='pm' {$pm_selected}>{$pm_text}</option>\n </select>\n </div>"; } else { $ampm_field = ''; } $hour_label = rgar($hour_input, 'customLabel') != '' ? $hour_input['customLabel'] : __('HH', 'gravityforms'); $minute_label = rgar($minute_input, 'customLabel') != '' ? $minute_input['customLabel'] : _x('MM', 'Abbreviation: Minutes', 'gravityforms'); if ($is_sub_label_above) { return "<div class='clear-multi'>\n <div class='gfield_time_hour ginput_container' id='{$field_id}'>\n <label for='{$field_id}_1' {$sub_label_class_attribute}>{$hour_label}</label>\n <input type='{$input_type}' maxlength='2' name='input_{$id}[]' id='{$field_id}_1' value='{$hour}' {$hour_tabindex} {$hour_html5_attributes} {$disabled_text} {$hour_placeholder_attribute}/> <i>:</i>\n </div>\n <div class='gfield_time_minute ginput_container'>\n <label for='{$field_id}_2' {$sub_label_class_attribute}>{$minute_label}</label>\n <input type='{$input_type}' maxlength='2' name='input_{$id}[]' id='{$field_id}_2' value='{$minute}' {$minute_tabindex} {$minute_html5_attributes} {$disabled_text} {$minute_placeholder_attribute}/>\n </div>\n {$ampm_field}\n </div>"; } else { return "<div class='clear-multi'>\n <div class='gfield_time_hour ginput_container' id='{$field_id}'>\n <input type='{$input_type}' maxlength='2' name='input_{$id}[]' id='{$field_id}_1' value='{$hour}' {$hour_tabindex} {$hour_html5_attributes} {$disabled_text} {$hour_placeholder_attribute}/> <i>:</i>\n <label for='{$field_id}_1' {$sub_label_class_attribute}>{$hour_label}</label>\n </div>\n <div class='gfield_time_minute ginput_container'>\n <input type='{$input_type}' maxlength='2' name='input_{$id}[]' id='{$field_id}_2' value='{$minute}' {$minute_tabindex} {$minute_html5_attributes} {$disabled_text} {$minute_placeholder_attribute}/>\n <label for='{$field_id}_2' {$sub_label_class_attribute}>{$minute_label}</label>\n </div>\n {$ampm_field}\n </div>"; } }
public function get_field_input($form, $value = '', $entry = null) { $is_entry_detail = $this->is_entry_detail(); $is_form_editor = $this->is_form_editor(); $form_id = $form['id']; $id = intval($this->id); $field_id = $is_entry_detail || $is_form_editor || $form_id == 0 ? "input_{$id}" : 'input_' . $form_id . "_{$id}"; $size = $this->size; $disabled_text = $is_form_editor ? "disabled='disabled'" : ''; $class_suffix = $is_entry_detail ? '_admin' : ''; $class = $size . $class_suffix; $instruction = $this->phoneFormat == 'standard' ? esc_html__('Phone format:', 'gravityforms') . ' (###) ###-####' : ''; $instruction_div = $this->failed_validation && !empty($instruction) ? "<div class='instruction validation_message'>{$instruction}</div>" : ''; $html_input_type = RGFormsModel::is_html5_enabled() ? 'tel' : 'text'; $logic_event = $this->get_conditional_logic_event('keyup'); $placeholder_attribute = $this->get_field_placeholder_attribute(); $tabindex = $this->get_tabindex(); return sprintf("<div class='ginput_container'><input name='input_%d' id='%s' type='{$html_input_type}' value='%s' class='%s' {$tabindex} {$logic_event} {$placeholder_attribute} %s/>{$instruction_div}</div>", $id, $field_id, esc_attr($value), esc_attr($class), $disabled_text); }
public function get_field_input($form, $value = '', $entry = null) { $is_entry_detail = $this->is_entry_detail(); $is_form_editor = $this->is_form_editor(); $form_id = $form['id']; $id = intval($this->id); $field_id = $is_entry_detail || $is_form_editor || $form_id == 0 ? "input_{$id}" : 'input_' . $form_id . "_{$id}"; $size = $this->size; $disabled_text = $is_form_editor ? "disabled='disabled'" : ''; $class_suffix = $is_entry_detail ? '_admin' : ''; $class = $size . $class_suffix; $is_html5 = RGFormsModel::is_html5_enabled(); $html_input_type = $is_html5 ? 'url' : 'text'; $max_length = is_numeric($this->maxLength) ? "maxlength='{$this->maxLength}'" : ''; $logic_event = $this->get_conditional_logic_event('keyup'); $placeholder_attribute = $this->get_field_placeholder_attribute(); $tabindex = $this->get_tabindex(); $value = esc_attr($value); $class = esc_attr($class); return "<div class='ginput_container'>\n <input name='input_{$id}' id='{$field_id}' type='{$html_input_type}' value='{$value}' class='{$class}' {$max_length} {$tabindex} {$logic_event} {$disabled_text} {$placeholder_attribute}/>\n </div>"; }
public static function replace_save_variables($text, $form, $resume_token, $email = null) { $resume_token = sanitize_key($resume_token); $form_id = intval($form['id']); $resume_url = apply_filters('gform_save_and_continue_resume_url', add_query_arg(array('gf_token' => $resume_token), GFFormsModel::get_current_page_url()), $form, $resume_token, $email); $resume_url = esc_url($resume_url); $resume_link = "<a href=\"{$resume_url}\" class='resume_form_link'>{$resume_url}</a>"; $text = str_replace('{save_link}', $resume_link, $text); $text = str_replace('{save_token}', $resume_token, $text); $text = str_replace('{save_url}', $resume_url, $text); $email_esc = esc_attr($email); $text = str_replace('{save_email}', $email_esc, $text); $resume_submit_button_text = esc_html__('Send Email', 'gravityforms'); $resume_email_validation_message = esc_html__('Please enter a valid email address.', 'gravityforms'); // The {save_email_input} accepts shortcode-style options button_text and validation_message. E.g., // {save_email_input: button_text="Send the link to my email address" validation_message="The link couldn't be sent because the email address is not valid."} preg_match_all('/\\{save_email_input:(.*?)\\}/', $text, $matches, PREG_SET_ORDER); if (is_array($matches) && isset($matches[0]) && isset($matches[0][1])) { $options_string = isset($matches[0][1]) ? $matches[0][1] : ''; $options = shortcode_parse_atts($options_string); if (isset($options['button_text'])) { $resume_submit_button_text = $options['button_text']; } if (isset($options['validation_message'])) { $resume_email_validation_message = $options['validation_message']; } $full_tag = $matches[0][0]; $text = str_replace($full_tag, '{save_email_input}', $text); } $action = esc_url(remove_query_arg('gf_token')); $ajax = isset($_POST['gform_ajax']); $has_pages = self::has_pages($form); $default_anchor = $has_pages || $ajax ? true : false; $use_anchor = gf_apply_filters(array('gform_confirmation_anchor', $form_id), $default_anchor); if ($use_anchor !== false) { $action .= "#gf_{$form_id}"; } $html_input_type = RGFormsModel::is_html5_enabled() ? 'email' : 'text'; $resume_token = esc_attr($resume_token); $validation_message = !is_null($email) && !GFCommon::is_valid_email($email) ? sprintf('<div class="validation_message">%s</div>', $resume_email_validation_message) : ''; $nonce_input = ''; if (rgar($form, 'requireLogin')) { $nonce_input = wp_nonce_field('gform_send_resume_link', '_gform_send_resume_link_nonce', true, false); } $target = $ajax ? "target='gform_ajax_frame_{$form_id}'" : ''; $ajax_fields = ''; if ($ajax) { $ajax_fields = "<input type='hidden' name='gform_ajax' value='" . esc_attr("form_id={$form_id}&title=1&description=1&tabindex=1") . "' />"; $ajax_fields .= "<input type='hidden' name='gform_field_values' value='' />"; } $resume_form = "<div class='form_saved_message_emailform'>\n\t\t\t\t\t\t\t<form action='{$action}' method='POST' id='gform_{$form_id}' {$target}>\n\t\t\t\t\t\t\t\t{$ajax_fields}\n\t\t\t\t\t\t\t\t<input type='{$html_input_type}' name='gform_resume_email' value='{$email_esc}'/>\n\t\t\t\t\t\t\t\t<input type='hidden' name='gform_resume_token' value='{$resume_token}' />\n\t\t\t\t\t\t\t\t<input type='hidden' name='gform_send_resume_link' value='{$form_id}' />\n\t <input type='submit' name='gform_send_resume_link_button' id='gform_send_resume_link_button_{$form_id}' value='{$resume_submit_button_text}' />\n\t {$validation_message}\n\t {$nonce_input}\n\t\t\t\t\t\t\t</form>\n\t </div>"; $text = str_replace('{save_email_input}', $resume_form, $text); return $text; }
public function get_field_input($form, $value = '', $entry = null) { $picker_value = ''; if (is_array($value)) { // GFCommon::parse_date() takes a numeric array. $value = array_values($value); } else { $picker_value = $value; } $format = empty($this->dateFormat) ? 'mdy' : esc_attr($this->dateFormat); $date_info = GFCommon::parse_date($value, $format); $day_value = esc_attr(rgget('day', $date_info)); $month_value = esc_attr(rgget('month', $date_info)); $year_value = esc_attr(rgget('year', $date_info)); $is_entry_detail = $this->is_entry_detail(); $is_form_editor = $this->is_form_editor(); $form_id = $form['id']; $id = intval($this->id); $field_id = $is_entry_detail || $is_form_editor || $form_id == 0 ? "input_{$id}" : 'input_' . $form_id . "_{$id}"; $size = $this->size; $disabled_text = $is_form_editor ? "disabled='disabled'" : ''; $class_suffix = $is_entry_detail ? '_admin' : ''; $class = $size . $class_suffix; $form_sub_label_placement = rgar($form, 'subLabelPlacement'); $field_sub_label_placement = rgar($this, 'subLabelPlacement'); $is_sub_label_above = $field_sub_label_placement == 'above' || empty($field_sub_label_placement) && $form_sub_label_placement == 'above'; $sub_label_class_attribute = $field_sub_label_placement == 'hidden_label' ? "class='hidden_sub_label screen-reader-text'" : ''; $month_input = GFFormsModel::get_input($this, $this->id . '.1'); $day_input = GFFormsModel::get_input($this, $this->id . '.2'); $year_input = GFFormsModel::get_input($this, $this->id . '.3'); $month_sub_label = rgar($month_input, 'customLabel') != '' ? $month_input['customLabel'] : esc_html(_x('MM', 'Abbreviation: Month', 'gravityforms')); $day_sub_label = rgar($day_input, 'customLabel') != '' ? $day_input['customLabel'] : esc_html__('DD', 'gravityforms'); $year_sub_label = rgar($year_input, 'customLabel') != '' ? $year_input['customLabel'] : esc_html__('YYYY', 'gravityforms'); $month_placeholder_attribute = GFCommon::get_input_placeholder_attribute($month_input); $day_placeholder_attribute = GFCommon::get_input_placeholder_attribute($day_input); $year_placeholder_attribute = GFCommon::get_input_placeholder_attribute($year_input); $month_placeholder_value = GFCommon::get_input_placeholder_value($month_input); $day_placeholder_value = GFCommon::get_input_placeholder_value($day_input); $year_placeholder_value = GFCommon::get_input_placeholder_value($year_input); $date_picker_placeholder = $this->get_field_placeholder_attribute(); $is_html5 = RGFormsModel::is_html5_enabled(); $date_input_type = $is_html5 ? 'number' : 'text'; $month_html5_attributes = $is_html5 ? "min='1' max='12' step='1'" : ''; $day_html5_attributes = $is_html5 ? "min='1' max='31' step='1'" : ''; $year_min = apply_filters('gform_date_min_year', '1920', $form, $this); $year_max = apply_filters('gform_date_max_year', date('Y') + 1, $form, $this); $year_min_attribute = $is_html5 && is_numeric($year_min) ? "min='{$year_min}'" : ''; $year_max_attribute = $is_html5 && is_numeric($year_max) ? "max='{$year_max}'" : ''; $year_step_attribute = $is_html5 ? "step='1'" : ''; $field_position = substr($format, 0, 3); if ($is_form_editor) { $datepicker_display = in_array($this->dateType, array('datefield', 'datedropdown')) ? 'none' : 'inline'; $datefield_display = $this->dateType == 'datefield' ? 'inline' : 'none'; $dropdown_display = $this->dateType == 'datedropdown' ? 'inline' : 'none'; $icon_display = $this->calendarIconType == 'calendar' ? 'inline' : 'none'; if ($is_sub_label_above) { $month_field = "<div class='gfield_date_month ginput_date' id='gfield_input_date_month' style='display:{$datefield_display}'>\n <label for='{$field_id}_1' {$sub_label_class_attribute}>{$month_sub_label}</label>\n <input id='{$field_id}_1' name='ginput_month' type='text' {$month_placeholder_attribute} {$disabled_text} value='{$month_value}'/>\n </div>"; $day_field = "<div class='gfield_date_day ginput_date' id='gfield_input_date_day' style='display:{$datefield_display}'>\n <label for='{$field_id}_2' {$sub_label_class_attribute}>{$day_sub_label}</label>\n <input id='{$field_id}_2' name='ginput_day' type='text' {$day_placeholder_attribute} {$disabled_text} value='{$day_value}'/>\n </div>"; $year_field = "<div class='gfield_date_year ginput_date' id='gfield_input_date_year' style='display:{$datefield_display}'>\n <label {$sub_label_class_attribute}>{$year_sub_label}</label>\n <input id='{$field_id}_3' type='text' name='text' {$year_placeholder_attribute} {$disabled_text} value='{$year_value}'/>\n </div>"; } else { $month_field = "<div class='gfield_date_month ginput_date' id='gfield_input_date_month' style='display:{$datefield_display}'>\n <input id='{$field_id}_1' name='ginput_month' type='text' {$month_placeholder_attribute} {$disabled_text} value='{$month_value}'/>\n <label for='{$field_id}_1' {$sub_label_class_attribute}>{$month_sub_label}</label>\n </div>"; $day_field = "<div class='gfield_date_day ginput_date' id='gfield_input_date_day' style='display:{$datefield_display}'>\n <input id='{$field_id}_2' name='ginput_day' type='text' {$day_placeholder_attribute} {$disabled_text} value='{$day_value}'/>\n <label for='{$field_id}_2' {$sub_label_class_attribute}>{$day_sub_label}</label>\n </div>"; $year_field = "<div class='gfield_date_year ginput_date' id='gfield_input_date_year' style='display:{$datefield_display}'>\n <input type='text' id='{$field_id}_3' name='ginput_year' {$year_placeholder_attribute} {$disabled_text} value='{$year_value}'/>\n <label for='{$field_id}_3' {$sub_label_class_attribute}>{$year_sub_label}</label>\n </div>"; } $month_dropdown = "<div class='gfield_date_dropdown_month ginput_date_dropdown' id='gfield_dropdown_date_month' style='display:{$dropdown_display}'>" . $this->get_month_dropdown('', "{$field_id}_1", rgar($date_info, 'month'), '', $disabled_text, $month_placeholder_value) . '</div>'; $day_dropdown = "<div class='gfield_date_dropdown_day ginput_date_dropdown' id='gfield_dropdown_date_day' style='display:{$dropdown_display}'>" . $this->get_day_dropdown('', "{$field_id}_2", rgar($date_info, 'day'), '', $disabled_text, $day_placeholder_value) . '</div>'; $year_dropdown = "<div class='gfield_date_dropdown_year ginput_date_dropdown' id='gfield_dropdown_date_year' style='display:{$dropdown_display}'>" . $this->get_year_dropdown('', "{$field_id}_3", rgar($date_info, 'year'), '', $disabled_text, $year_placeholder_value, $form) . '</div>'; $field_string = "<div class='ginput_container ginput_container_date' id='gfield_input_datepicker' style='display:{$datepicker_display}'><input name='ginput_datepicker' type='text' {$date_picker_placeholder} {$disabled_text} value = '{$picker_value}'/><img src='" . GFCommon::get_base_url() . "/images/calendar.png' id='gfield_input_datepicker_icon' style='display:{$icon_display}'/></div>"; switch ($field_position) { case 'dmy': $date_inputs = $day_field . $month_field . $year_field . $day_dropdown . $month_dropdown . $year_dropdown; break; case 'ymd': $date_inputs = $year_field . $month_field . $day_field . $year_dropdown . $month_dropdown . $day_dropdown; break; default: $date_inputs = $month_field . $day_field . $year_field . $month_dropdown . $day_dropdown . $year_dropdown; break; } $field_string .= "<div id='{$field_id}' class='ginput_container ginput_container_date'>{$date_inputs}</div>"; return $field_string; } else { $date_type = $this->dateType; if (in_array($date_type, array('datefield', 'datedropdown'))) { switch ($field_position) { case 'dmy': $tabindex = $this->get_tabindex(); if ($date_type == 'datedropdown') { $field_str = "<div class='clear-multi'><div class='gfield_date_dropdown_day ginput_container ginput_container_date' id='{$field_id}_2_container'>" . $this->get_day_dropdown("input_{$id}[]", "{$field_id}_2", rgar($date_info, 'day'), $tabindex, $disabled_text, $day_placeholder_value) . '</div>'; $tabindex = $this->get_tabindex(); $field_str .= "<div class='gfield_date_dropdown_month ginput_container ginput_container_date' id='{$field_id}_1_container'>" . $this->get_month_dropdown("input_{$id}[]", "{$field_id}_1", rgar($date_info, 'month'), $tabindex, $disabled_text, $month_placeholder_value) . '</div>'; $tabindex = $this->get_tabindex(); $field_str .= "<div class='gfield_date_dropdown_year ginput_container ginput_container_date' id='{$field_id}_3_container'>" . $this->get_year_dropdown("input_{$id}[]", "{$field_id}_3", rgar($date_info, 'year'), $tabindex, $disabled_text, $year_placeholder_value, $form) . '</div></div>'; } else { $field_str = $is_sub_label_above ? "<div class='clear-multi'>\n <div class='gfield_date_day ginput_container ginput_container_date' id='{$field_id}_2_container'>\n <label for='{$field_id}_2' {$sub_label_class_attribute}>{$day_sub_label}</label>\n <input type='{$date_input_type}' maxlength='2' name='input_{$id}[]' id='{$field_id}_2' value='{$day_value}' {$tabindex} {$disabled_text} {$day_placeholder_attribute} {$day_html5_attributes}/>\n </div>" : "<div class='clear-multi'>\n <div class='gfield_date_day ginput_container ginput_container_date' id='{$field_id}_2_container'>\n <input type='{$date_input_type}' maxlength='2' name='input_{$id}[]' id='{$field_id}_2' value='{$day_value}' {$tabindex} {$disabled_text} {$day_placeholder_attribute} {$day_html5_attributes}/>\n <label for='{$field_id}_2' {$sub_label_class_attribute}>{$day_sub_label}</label>\n </div>"; $tabindex = $this->get_tabindex(); $field_str .= $is_sub_label_above ? "<div class='gfield_date_month ginput_container ginput_container_date' id='{$field_id}_1_container'>\n <label for='{$field_id}_1' {$sub_label_class_attribute}>{$month_sub_label}</label>\n <input type='{$date_input_type}' maxlength='2' name='input_{$id}[]' id='{$field_id}_1' value='{$month_value}' {$tabindex} {$disabled_text} {$month_placeholder_attribute} {$month_html5_attributes}/>\n </div>" : "<div class='gfield_date_month ginput_container ginput_container_date' id='{$field_id}_1_container'>\n <input type='{$date_input_type}' maxlength='2' name='input_{$id}[]' id='{$field_id}_1' value='{$month_value}' {$tabindex} {$disabled_text} {$month_placeholder_attribute} {$month_html5_attributes}/>\n <label for='{$field_id}_1' {$sub_label_class_attribute}>{$month_sub_label}</label>\n </div>"; $tabindex = $this->get_tabindex(); $field_str .= $is_sub_label_above ? "<div class='gfield_date_year ginput_container ginput_container_date' id='{$field_id}_3_container'>\n <label for='{$field_id}_3' {$sub_label_class_attribute}>{$year_sub_label}</label>\n <input type='{$date_input_type}' maxlength='4' name='input_{$id}[]' id='{$field_id}_3' value='{$year_value}' {$tabindex} {$disabled_text} {$year_placeholder_attribute} {$year_min_attribute} {$year_max_attribute} {$year_step_attribute}/>\n </div>\n </div>" : "<div class='gfield_date_year ginput_container ginput_container_date' id='{$field_id}_3_container'>\n <input type='{$date_input_type}' maxlength='4' name='input_{$id}[]' id='{$field_id}_3' value='{$year_value}' {$tabindex} {$disabled_text} {$year_placeholder_attribute} {$year_min_attribute} {$year_max_attribute} {$year_step_attribute}/>\n <label for='{$field_id}_3' {$sub_label_class_attribute}>{$year_sub_label}</label>\n </div>\n </div>"; } break; case 'ymd': $tabindex = $this->get_tabindex(); if ($date_type == 'datedropdown') { $field_str = "<div class='clear-multi'><div class='gfield_date_dropdown_year ginput_container ginput_container_date' id='{$field_id}_3_container'>" . $this->get_year_dropdown("input_{$id}[]", "{$field_id}_3", rgar($date_info, 'year'), $tabindex, $disabled_text, $year_placeholder_value, $form) . '</div>'; $tabindex = $this->get_tabindex(); $field_str .= "<div class='gfield_date_dropdown_month ginput_container ginput_container_date' id='{$field_id}_1_container'>" . $this->get_month_dropdown("input_{$id}[]", "{$field_id}_1", rgar($date_info, 'month'), $tabindex, $disabled_text, $month_placeholder_value) . '</div>'; $tabindex = $this->get_tabindex(); $field_str .= "<div class='gfield_date_dropdown_day ginput_container ginput_container_date' id='{$field_id}_2_container'>" . $this->get_day_dropdown("input_{$id}[]", "{$field_id}_2", rgar($date_info, 'day'), $tabindex, $disabled_text, $day_placeholder_value) . '</div></div>'; } else { $field_str = $is_sub_label_above ? "<div class='clear-multi'>\n <div class='gfield_date_year ginput_container ginput_container_date' id='{$field_id}_3_container'>\n <label for='{$field_id}_3' {$sub_label_class_attribute}>{$year_sub_label}</label>\n <input type='{$date_input_type}' maxlength='4' name='input_{$id}[]' id='{$field_id}_3' value='{$year_value}' {$tabindex} {$disabled_text} {$year_placeholder_attribute} {$year_min_attribute} {$year_max_attribute} {$year_step_attribute}/>\n </div>" : "<div class='clear-multi'>\n <div class='gfield_date_year ginput_container ginput_container_date' id='{$field_id}_3_container'>\n <input type='{$date_input_type}' maxlength='4' name='input_{$id}[]' id='{$field_id}_3' value='{$year_value}' {$tabindex} {$disabled_text} {$year_placeholder_attribute} {$year_min_attribute} {$year_max_attribute} {$year_step_attribute}/>\n <label for='{$field_id}_3' {$sub_label_class_attribute}>{$year_sub_label}</label>\n </div>"; $tabindex = $this->get_tabindex(); $field_str .= $is_sub_label_above ? "<div class='gfield_date_month ginput_container ginput_container_date' id='{$field_id}_1_container'>\n <label for='{$field_id}_1' {$sub_label_class_attribute}>{$month_sub_label}</label>\n <input type='{$date_input_type}' maxlength='2' name='input_{$id}[]' id='{$field_id}_1' value='{$month_value}' {$tabindex} {$disabled_text} {$month_placeholder_attribute} {$month_html5_attributes}/>\n </div>" : "<div class='gfield_date_month ginput_container ginput_container_date' id='{$field_id}_1_container'>\n <input type='{$date_input_type}' maxlength='2' name='input_{$id}[]' id='{$field_id}_1' value='{$month_value}' {$tabindex} {$disabled_text} {$month_placeholder_attribute} {$month_html5_attributes}/>\n <label for='{$field_id}_1' {$sub_label_class_attribute}>{$month_sub_label}</label>\n </div>"; $tabindex = $this->get_tabindex(); $field_str .= $is_sub_label_above ? "<div class='gfield_date_day ginput_container ginput_container_date' id='{$field_id}_2_container'>\n <label for='{$field_id}_2' {$sub_label_class_attribute}>{$day_sub_label}</label>\n <input type='{$date_input_type}' maxlength='2' name='input_{$id}[]' id='{$field_id}_2' value='{$day_value}' {$tabindex} {$disabled_text} {$day_placeholder_attribute} {$day_html5_attributes}/>\n </div>\n </div>" : "<div class='gfield_date_day ginput_container ginput_container_date' id='{$field_id}_2_container'>\n <input type='{$date_input_type}' maxlength='2' name='input_{$id}[]' id='{$field_id}_2' value='{$day_value}' {$tabindex} {$disabled_text} {$day_placeholder_attribute} {$day_html5_attributes}/>\n <label for='{$field_id}_2' {$sub_label_class_attribute}>{$day_sub_label}</label>\n </div>\n </div>"; } break; default: $tabindex = $this->get_tabindex(); if ($date_type == 'datedropdown') { $field_str = "<div class='clear-multi'><div class='gfield_date_dropdown_month ginput_container ginput_container_date' id='{$field_id}_1_container'>" . $this->get_month_dropdown("input_{$id}[]", "{$field_id}_1", rgar($date_info, 'month'), $tabindex, $disabled_text, $month_placeholder_value) . '</div>'; $tabindex = $this->get_tabindex(); $field_str .= "<div class='gfield_date_dropdown_day ginput_container ginput_container_date' id='{$field_id}_2_container'>" . $this->get_day_dropdown("input_{$id}[]", "{$field_id}_2", rgar($date_info, 'day'), $tabindex, $disabled_text, $day_placeholder_value) . '</div>'; $tabindex = $this->get_tabindex(); $field_str .= "<div class='gfield_date_dropdown_year ginput_container ginput_container_date' id='{$field_id}_3_container'>" . $this->get_year_dropdown("input_{$id}[]", "{$field_id}_3", rgar($date_info, 'year'), $tabindex, $disabled_text, $year_placeholder_value, $form) . '</div></div>'; } else { $field_str = $is_sub_label_above ? "<div class='clear-multi'><div class='gfield_date_month ginput_container ginput_container_date' id='{$field_id}_1_container'>\n <label for='{$field_id}_1' {$sub_label_class_attribute}>{$month_sub_label}</label>\n <input type='{$date_input_type}' maxlength='2' name='input_{$id}[]' id='{$field_id}_1' value='{$month_value}' {$tabindex} {$disabled_text} {$month_placeholder_attribute} {$month_html5_attributes}/>\n </div>" : "<div class='clear-multi'><div class='gfield_date_month ginput_container ginput_container_date' id='{$field_id}_1_container'>\n <input type='{$date_input_type}' maxlength='2' name='input_{$id}[]' id='{$field_id}_1' value='{$month_value}' {$tabindex} {$disabled_text} {$month_placeholder_attribute} {$month_html5_attributes}/>\n <label for='{$field_id}_1' {$sub_label_class_attribute}>{$month_sub_label}</label>\n </div>"; $tabindex = $this->get_tabindex(); $field_str .= $is_sub_label_above ? "<div class='gfield_date_day ginput_container ginput_container_date' id='{$field_id}_2_container'>\n <label for='{$field_id}_2' {$sub_label_class_attribute}>{$day_sub_label}</label>\n <input type='{$date_input_type}' maxlength='2' name='input_{$id}[]' id='{$field_id}_2' value='{$day_value}' {$tabindex} {$disabled_text} {$day_placeholder_attribute} {$day_html5_attributes}/>\n </div>" : "<div class='gfield_date_day ginput_container ginput_container_date' id='{$field_id}_2_container'>\n <input type='{$date_input_type}' maxlength='2' name='input_{$id}[]' id='{$field_id}_2' value='{$day_value}' {$tabindex} {$disabled_text} {$day_placeholder_attribute} {$day_html5_attributes}/>\n <label for='{$field_id}_2' {$sub_label_class_attribute}>{$day_sub_label}</label>\n </div>"; $tabindex = $this->get_tabindex(); $field_str .= $is_sub_label_above ? "<div class='gfield_date_year ginput_container ginput_container_date' id='{$field_id}_3_container'>\n <label for='{$field_id}_3' {$sub_label_class_attribute}>{$year_sub_label}</label>\n <input type='{$date_input_type}' maxlength='4' name='input_{$id}[]' id='{$field_id}_3' value='{$year_value}' {$tabindex} {$disabled_text} {$year_placeholder_attribute} {$year_min_attribute} {$year_max_attribute} {$year_step_attribute}/>\n </div>\n </div>" : "<div class='gfield_date_year ginput_container ginput_container_date' id='{$field_id}_3_container'>\n <input type='{$date_input_type}' maxlength='4' name='input_{$id}[]' id='{$field_id}_3' value='{$year_value}' {$tabindex} {$disabled_text} {$year_placeholder_attribute} {$year_min_attribute} {$year_max_attribute} {$year_step_attribute}/>\n <label for='{$field_id}_3' {$sub_label_class_attribute}>{$year_sub_label}</label>\n </div>\n </div>"; } break; } return "<div id='{$field_id}' class='ginput_container ginput_container_date'>{$field_str}</div>"; } else { $picker_value = esc_attr(GFCommon::date_display($picker_value, $format)); $icon_class = $this->calendarIconType == 'none' ? 'datepicker_no_icon' : 'datepicker_with_icon'; $icon_url = empty($this->calendarIconUrl) ? GFCommon::get_base_url() . '/images/calendar.png' : $this->calendarIconUrl; $icon_url = esc_url($icon_url); $tabindex = $this->get_tabindex(); $class = esc_attr($class); return "<div class='ginput_container ginput_container_date'>\n <input name='input_{$id}' id='{$field_id}' type='text' value='{$picker_value}' class='datepicker {$class} {$format} {$icon_class}' {$tabindex} {$disabled_text} {$date_picker_placeholder}/>\n </div>\n <input type='hidden' id='gforms_calendar_icon_{$field_id}' class='gform_hidden' value='{$icon_url}'/>"; } } }
public function get_field_input($form, $value = '', $entry = null) { $is_entry_detail = $this->is_entry_detail(); $is_form_editor = $this->is_form_editor(); $form_id = $form['id']; $id = intval($this->id); $field_id = $is_entry_detail || $is_form_editor || $form_id == 0 ? "input_{$id}" : 'input_' . $form_id . "_{$id}"; $form_id = ($is_entry_detail || $is_form_editor) && empty($form_id) ? rgget('id') : $form_id; $disabled_text = $is_form_editor ? "disabled='disabled'" : ''; $class_suffix = $is_entry_detail ? '_admin' : ''; $form_sub_label_placement = rgar($form, 'subLabelPlacement'); $field_sub_label_placement = $this->subLabelPlacement; $is_sub_label_above = $field_sub_label_placement == 'above' || empty($field_sub_label_placement) && $form_sub_label_placement == 'above'; $sub_label_class_attribute = $field_sub_label_placement == 'hidden_label' ? "class='hidden_sub_label screen-reader-text'" : ''; $card_number = ''; $card_name = ''; $expiration_month = ''; $expiration_year = ''; $security_code = ''; $autocomplete = RGFormsModel::is_html5_enabled() ? "autocomplete='off'" : ''; if (is_array($value)) { $card_number = esc_attr(rgget($this->id . '.1', $value)); $card_name = esc_attr(rgget($this->id . '.5', $value)); $expiration_date = rgget($this->id . '.2', $value); if (!is_array($expiration_date) && !empty($expiration_date)) { $expiration_date = explode('/', $expiration_date); } if (is_array($expiration_date) && count($expiration_date) == 2) { $expiration_month = $expiration_date[0]; $expiration_year = $expiration_date[1]; } $security_code = esc_attr(rgget($this->id . '.3', $value)); } $action = !($is_entry_detail || $is_form_editor) ? "gformMatchCard(\"{$field_id}_1\");" : ''; $onchange = "onchange='{$action}'"; $onkeyup = "onkeyup='{$action}'"; $card_icons = ''; $cards = GFCommon::get_card_types(); $card_style = $this->creditCardStyle ? $this->creditCardStyle : 'style1'; foreach ($cards as $card) { $style = ''; if ($this->is_card_supported($card['slug'])) { $print_card = true; } elseif ($is_form_editor || $is_entry_detail) { $print_card = true; $style = "style='display:none;'"; } else { $print_card = false; } if ($print_card) { $card_icons .= "<div class='gform_card_icon gform_card_icon_{$card['slug']}' {$style}>{$card['name']}</div>"; } } $payment_methods = apply_filters('gform_payment_methods', array(), $this, $form_id); $payment_options = ''; if (is_array($payment_methods)) { foreach ($payment_methods as $payment_method) { $checked = rgpost('gform_payment_method') == $payment_method['key'] ? "checked='checked'" : ''; $payment_options .= "<div class='gform_payment_option gform_payment_{$payment_method['key']}'><input type='radio' name='gform_payment_method' value='{$payment_method['key']}' id='gform_payment_method_{$payment_method['key']}' onclick='gformToggleCreditCard();' onkeypress='gformToggleCreditCard();' {$checked}/> {$payment_method['label']}</div>"; } } $checked = rgpost('gform_payment_method') == 'creditcard' || rgempty('gform_payment_method') ? "checked='checked'" : ''; $card_radio_button = empty($payment_options) ? '' : "<input type='radio' name='gform_payment_method' id='gform_payment_method_creditcard' value='creditcard' onclick='gformToggleCreditCard();' onkeypress='gformToggleCreditCard();' {$checked}/>"; $card_icons = "{$payment_options}<div class='gform_card_icon_container gform_card_icon_{$card_style}'>{$card_radio_button}{$card_icons}</div>"; //card number fields $tabindex = $this->get_tabindex(); $card_number_field_input = GFFormsModel::get_input($this, $this->id . '.1'); $html5_output = !is_admin() && GFFormsModel::is_html5_enabled() ? "pattern='[0-9]*' title='" . esc_attr__('Only digits are allowed', 'gravityforms') . "'" : ''; $card_number_label = rgar($card_number_field_input, 'customLabel') != '' ? $card_number_field_input['customLabel'] : esc_html__('Card Number', 'gravityforms'); $card_number_label = gf_apply_filters(array('gform_card_number', $form_id), $card_number_label, $form_id); $card_number_placeholder = $this->get_input_placeholder_attribute($card_number_field_input); if ($is_sub_label_above) { $card_field = "<span class='ginput_full{$class_suffix}' id='{$field_id}_1_container' >\n {$card_icons}\n <label for='{$field_id}_1' id='{$field_id}_1_label' {$sub_label_class_attribute}>{$card_number_label}</label>\n <input type='text' name='input_{$id}.1' id='{$field_id}_1' value='{$card_number}' {$tabindex} {$disabled_text} {$onchange} {$onkeyup} {$autocomplete} {$html5_output} {$card_number_placeholder}/>\n </span>"; } else { $card_field = "<span class='ginput_full{$class_suffix}' id='{$field_id}_1_container' >\n {$card_icons}\n <input type='text' name='input_{$id}.1' id='{$field_id}_1' value='{$card_number}' {$tabindex} {$disabled_text} {$onchange} {$onkeyup} {$autocomplete} {$html5_output} {$card_number_placeholder}/>\n <label for='{$field_id}_1' id='{$field_id}_1_label' {$sub_label_class_attribute}>{$card_number_label}</label>\n </span>"; } //expiration date field $expiration_month_tab_index = $this->get_tabindex(); $expiration_year_tab_index = $this->get_tabindex(); $expiration_month_input = GFFormsModel::get_input($this, $this->id . '.2_month'); $expiration_month_placeholder = $this->get_input_placeholder_value($expiration_month_input); $expiration_year_input = GFFormsModel::get_input($this, $this->id . '.2_year'); $expiration_year_placeholder = $this->get_input_placeholder_value($expiration_year_input); $expiration_months = $this->get_expiration_months($expiration_month, $expiration_month_placeholder); $expiration_years = $this->get_expiration_years($expiration_year, $expiration_year_placeholder); $expiration_label = rgar($expiration_month_input, 'customLabel') != '' ? $expiration_month_input['customLabel'] : esc_html__('Expiration Date', 'gravityforms'); $expiration_label = gf_apply_filters(array('gform_card_expiration', $form_id), $expiration_label, $form_id); if ($is_sub_label_above) { $expiration_field = "<span class='ginput_full{$class_suffix} ginput_cardextras' id='{$field_id}_2_container'>\n <span class='ginput_cardinfo_left{$class_suffix}' id='{$field_id}_2_cardinfo_left'>\n <span class='ginput_card_expiration_container ginput_card_field'>\n <label for='{$field_id}_2_month' {$sub_label_class_attribute}>{$expiration_label}</label>\n <select name='input_{$id}.2[]' id='{$field_id}_2_month' {$expiration_month_tab_index} {$disabled_text} class='ginput_card_expiration ginput_card_expiration_month'>\n {$expiration_months}\n </select>\n <select name='input_{$id}.2[]' id='{$field_id}_2_year' {$expiration_year_tab_index} {$disabled_text} class='ginput_card_expiration ginput_card_expiration_year'>\n {$expiration_years}\n </select>\n </span>\n </span>"; } else { $expiration_field = "<span class='ginput_full{$class_suffix} ginput_cardextras' id='{$field_id}_2_container'>\n <span class='ginput_cardinfo_left{$class_suffix}' id='{$field_id}_2_cardinfo_left'>\n <span class='ginput_card_expiration_container ginput_card_field'>\n <select name='input_{$id}.2[]' id='{$field_id}_2_month' {$expiration_month_tab_index} {$disabled_text} class='ginput_card_expiration ginput_card_expiration_month'>\n {$expiration_months}\n </select>\n <select name='input_{$id}.2[]' id='{$field_id}_2_year' {$expiration_year_tab_index} {$disabled_text} class='ginput_card_expiration ginput_card_expiration_year'>\n {$expiration_years}\n </select>\n <label for='{$field_id}_2_month' {$sub_label_class_attribute}>{$expiration_label}</label>\n </span>\n </span>"; } //security code field $tabindex = $this->get_tabindex(); $security_code_field_input = GFFormsModel::get_input($this, $this->id . '.3'); $security_code_label = rgar($security_code_field_input, 'customLabel') != '' ? $security_code_field_input['customLabel'] : esc_html__('Security Code', 'gravityforms'); $security_code_label = gf_apply_filters(array('gform_card_security_code', $form_id), $security_code_label, $form_id); $html5_output = GFFormsModel::is_html5_enabled() ? "pattern='[0-9]*' title='" . esc_attr__('Only digits are allowed', 'gravityforms') . "'" : ''; $security_code_placeholder = $this->get_input_placeholder_attribute($security_code_field_input); if ($is_sub_label_above) { $security_field = "<span class='ginput_cardinfo_right{$class_suffix}' id='{$field_id}_2_cardinfo_right'>\n <label for='{$field_id}_3' {$sub_label_class_attribute}>{$security_code_label}</label>\n <input type='text' name='input_{$id}.3' id='{$field_id}_3' {$tabindex} {$disabled_text} class='ginput_card_security_code' value='{$security_code}' {$autocomplete} {$html5_output} {$security_code_placeholder} />\n <span class='ginput_card_security_code_icon'> </span>\n </span>\n </span>"; } else { $security_field = "<span class='ginput_cardinfo_right{$class_suffix}' id='{$field_id}_2_cardinfo_right'>\n <input type='text' name='input_{$id}.3' id='{$field_id}_3' {$tabindex} {$disabled_text} class='ginput_card_security_code' value='{$security_code}' {$autocomplete} {$html5_output} {$security_code_placeholder}/>\n <span class='ginput_card_security_code_icon'> </span>\n <label for='{$field_id}_3' {$sub_label_class_attribute}>{$security_code_label}</label>\n </span>\n </span>"; } $tabindex = $this->get_tabindex(); $card_name_field_input = GFFormsModel::get_input($this, $this->id . '.5'); $card_name_label = rgar($card_name_field_input, 'customLabel') != '' ? $card_name_field_input['customLabel'] : esc_html__('Cardholder Name', 'gravityforms'); $card_name_label = gf_apply_filters(array('gform_card_name', $form_id), $card_name_label, $form_id); $card_name_placeholder = $this->get_input_placeholder_attribute($card_name_field_input); if ($is_sub_label_above) { $card_name_field = "<span class='ginput_full{$class_suffix}' id='{$field_id}_5_container'>\n <label for='{$field_id}_5' id='{$field_id}_5_label' {$sub_label_class_attribute}>{$card_name_label}</label>\n <input type='text' name='input_{$id}.5' id='{$field_id}_5' value='{$card_name}' {$tabindex} {$disabled_text} {$card_name_placeholder}/>\n </span>"; } else { $card_name_field = "<span class='ginput_full{$class_suffix}' id='{$field_id}_5_container'>\n <input type='text' name='input_{$id}.5' id='{$field_id}_5' value='{$card_name}' {$tabindex} {$disabled_text} {$card_name_placeholder}/>\n <label for='{$field_id}_5' id='{$field_id}_5_label' {$sub_label_class_attribute}>{$card_name_label}</label>\n </span>"; } return "<div class='ginput_complex{$class_suffix} ginput_container ginput_container_creditcard' id='{$field_id}'>" . $card_field . $expiration_field . $security_field . $card_name_field . ' </div>'; }
public static function get_field_input($field, $value = "", $lead_id = 0, $form_id = 0) { $id = $field["id"]; $field_id = IS_ADMIN || $form_id == 0 ? "input_{$id}" : "input_" . $form_id . "_{$id}"; $form_id = IS_ADMIN && empty($form_id) ? rgget("id") : $form_id; $size = rgar($field, "size"); $disabled_text = IS_ADMIN && RG_CURRENT_VIEW != "entry" ? "disabled='disabled'" : ""; $class_suffix = RG_CURRENT_VIEW == "entry" ? "_admin" : ""; $class = $size . $class_suffix; $currency = ""; if (RG_CURRENT_VIEW == "entry") { $lead = RGFormsModel::get_lead($lead_id); $post_id = $lead["post_id"]; $post_link = ""; if (is_numeric($post_id) && self::is_post_field($field)) { $post_link = "You can <a href='post.php?action=edit&post={$post_id}'>edit this post</a> from the post page."; } $currency = $lead["currency"]; } $field_input = apply_filters("gform_field_input", "", $field, $value, $lead_id, $form_id); if ($field_input) { return $field_input; } //product fields are not editable if (RG_CURRENT_VIEW == "entry" && self::is_product_field($field["type"])) { return "<div class='ginput_container'>" . __("Product fields are not editable", "gravityforms") . "</div>"; } else { if (RG_CURRENT_VIEW == "entry" && $field["type"] == "donation") { return "<div class='ginput_container'>" . __("Donations are not editable", "gravityforms") . "</div>"; } } // add categories as choices for Post Category field if ($field['type'] == 'post_category') { $field = self::add_categories_as_choices($field, $value); } $max_length = ""; $html5_attributes = ""; switch (RGFormsModel::get_input_type($field)) { case "total": if (RG_CURRENT_VIEW == "entry") { return "<div class='ginput_container'><input type='text' name='input_{$id}' value='{$value}' /></div>"; } else { return "<div class='ginput_container'><span class='ginput_total ginput_total_{$form_id}'>" . self::to_money("0") . "</span><input type='hidden' name='input_{$id}' id='{$field_id}' class='gform_hidden'/></div>"; } break; case "calculation": case "singleproduct": $product_name = !is_array($value) || empty($value[$field["id"] . ".1"]) ? esc_attr($field["label"]) : esc_attr($value[$field["id"] . ".1"]); $price = !is_array($value) || empty($value[$field["id"] . ".2"]) ? rgget("basePrice", $field) : esc_attr($value[$field["id"] . ".2"]); $quantity = is_array($value) ? esc_attr($value[$field["id"] . ".3"]) : ""; if (empty($price)) { $price = 0; } $form = RGFormsModel::get_form_meta($form_id); $has_quantity = sizeof(GFCommon::get_product_fields_by_type($form, array("quantity"), $field["id"])) > 0; if ($has_quantity) { $field["disableQuantity"] = true; } $quantity_field = ""; if (IS_ADMIN) { $style = rgget("disableQuantity", $field) ? "style='display:none;'" : ""; $quantity_field = " <span class='ginput_quantity_label' {$style}>" . apply_filters("gform_product_quantity_{$form_id}", apply_filters("gform_product_quantity", __("Quantity:", "gravityforms"), $form_id), $form_id) . "</span> <input type='text' name='input_{$id}.3' value='{$quantity}' id='ginput_quantity_{$form_id}_{$field["id"]}' class='ginput_quantity' size='10' />"; } else { if (!rgget("disableQuantity", $field)) { $tabindex = self::get_tabindex(); $quantity_field .= " <span class='ginput_quantity_label'>" . apply_filters("gform_product_quantity_{$form_id}", apply_filters("gform_product_quantity", __("Quantity:", "gravityforms"), $form_id), $form_id) . "</span> <input type='text' name='input_{$id}.3' value='{$quantity}' id='ginput_quantity_{$form_id}_{$field["id"]}' class='ginput_quantity' size='10' {$tabindex}/>"; } else { if (!is_numeric($quantity)) { $quantity = 1; } if (!$has_quantity) { $quantity_field .= "<input type='hidden' name='input_{$id}.3' value='{$quantity}' class='ginput_quantity_{$form_id}_{$field["id"]} gform_hidden' />"; } } } return "<div class='ginput_container'><input type='hidden' name='input_{$id}.1' value='{$product_name}' class='gform_hidden' /><span class='ginput_product_price_label'>" . apply_filters("gform_product_price_{$form_id}", apply_filters("gform_product_price", __("Price", "gravityforms"), $form_id), $form_id) . ":</span> <span class='ginput_product_price' id='{$field_id}'>" . esc_html(GFCommon::to_money($price, $currency)) . "</span><input type='hidden' name='input_{$id}.2' id='ginput_base_price_{$form_id}_{$field["id"]}' class='gform_hidden' value='" . esc_attr($price) . "'/>{$quantity_field}</div>"; break; case "hiddenproduct": $form = RGFormsModel::get_form_meta($form_id); $has_quantity_field = sizeof(GFCommon::get_product_fields_by_type($form, array("quantity"), $field["id"])) > 0; $product_name = !is_array($value) || empty($value[$field["id"] . ".1"]) ? esc_attr($field["label"]) : esc_attr($value[$field["id"] . ".1"]); $quantity = is_array($value) ? esc_attr($value[$field["id"] . ".3"]) : "1"; $price = !is_array($value) || empty($value[$field["id"] . ".2"]) ? rgget("basePrice", $field) : esc_attr($value[$field["id"] . ".2"]); if (empty($price)) { $price = 0; } $quantity_field = $has_quantity_field ? "" : "<input type='hidden' name='input_{$id}.3' value='" . esc_attr($quantity) . "' id='ginput_quantity_{$form_id}_{$field["id"]}' class='gform_hidden' />"; $product_name_field = "<input type='hidden' name='input_{$id}.1' value='{$product_name}' class='gform_hidden' />"; $field_type = IS_ADMIN ? "text" : "hidden"; return $quantity_field . $product_name_field . sprintf("<input name='input_%d.2' id='ginput_base_price_{$form_id}_{$field["id"]}' type='{$field_type}' value='%s' class='gform_hidden ginput_amount' %s/>", $id, esc_attr($price), $disabled_text); break; case "singleshipping": $price = !empty($value) ? $value : rgget("basePrice", $field); if (empty($price)) { $price = 0; } return "<div class='ginput_container'><input type='hidden' name='input_{$id}' value='{$price}' class='gform_hidden'/><span class='ginput_shipping_price' id='{$field_id}'>" . GFCommon::to_money($price, $currency) . "</span></div>"; break; case "website": $is_html5 = RGFormsModel::is_html5_enabled(); $value = empty($value) && !$is_html5 ? "http://" : $value; $html_input_type = $is_html5 ? "url" : "text"; $html5_attributes = $is_html5 ? "placeholder='http://'" : ""; case "text": if (empty($html_input_type)) { $html_input_type = "text"; } if (rgget("enablePasswordInput", $field) && RG_CURRENT_VIEW != "entry") { $html_input_type = "password"; } if (is_numeric(rgget("maxLength", $field))) { $max_length = "maxlength='{$field["maxLength"]}'"; } if (!empty($post_link)) { return $post_link; } $logic_event = self::get_logic_event($field, "keyup"); $tabindex = self::get_tabindex(); return sprintf("<div class='ginput_container'><input name='input_%d' id='%s' type='%s' value='%s' class='%s' {$max_length} {$tabindex} {$logic_event} {$html5_attributes} %s/></div>", $id, $field_id, $html_input_type, esc_attr($value), esc_attr($class), $disabled_text); break; case "email": if (!empty($post_link)) { return $post_link; } $html_input_type = RGFormsModel::is_html5_enabled() ? "email" : "text"; if (IS_ADMIN && RG_CURRENT_VIEW != "entry") { $single_style = rgget("emailConfirmEnabled", $field) ? "style='display:none;'" : ""; $confirm_style = rgget("emailConfirmEnabled", $field) ? "" : "style='display:none;'"; return "<div class='ginput_container ginput_single_email' {$single_style}><input name='input_{$id}' type='{$html_input_type}' class='" . esc_attr($class) . "' disabled='disabled' /></div><div class='ginput_complex ginput_container ginput_confirm_email' {$confirm_style} id='{$field_id}_container'><span id='{$field_id}_1_container' class='ginput_left'><input type='text' name='input_{$id}' id='{$field_id}' disabled='disabled' /><label for='{$field_id}'>" . apply_filters("gform_email_{$form_id}", apply_filters("gform_email", __("Enter Email", "gravityforms"), $form_id), $form_id) . "</label></span><span id='{$field_id}_2_container' class='ginput_right'><input type='text' name='input_{$id}_2' id='{$field_id}_2' disabled='disabled' /><label for='{$field_id}_2'>" . apply_filters("gform_email_confirm_{$form_id}", apply_filters("gform_email_confirm", __("Confirm Email", "gravityforms"), $form_id), $form_id) . "</label></span></div>"; } else { $logic_event = self::get_logic_event($field, "keyup"); if (rgget("emailConfirmEnabled", $field) && RG_CURRENT_VIEW != "entry") { $first_tabindex = self::get_tabindex(); $last_tabindex = self::get_tabindex(); return "<div class='ginput_complex ginput_container' id='{$field_id}_container'><span id='{$field_id}_1_container' class='ginput_left'><input type='{$html_input_type}' name='input_{$id}' id='{$field_id}' value='" . esc_attr($value) . "' {$first_tabindex} {$logic_event} {$disabled_text}/><label for='{$field_id}'>" . apply_filters("gform_email_{$form_id}", apply_filters("gform_email", __("Enter Email", "gravityforms"), $form_id), $form_id) . "</label></span><span id='{$field_id}_2_container' class='ginput_right'><input type='{$html_input_type}' name='input_{$id}_2' id='{$field_id}_2' value='" . esc_attr(rgpost("input_" . $id . "_2")) . "' {$last_tabindex} {$disabled_text}/><label for='{$field_id}_2'>" . apply_filters("gform_email_confirm_{$form_id}", apply_filters("gform_email_confirm", __("Confirm Email", "gravityforms"), $form_id), $form_id) . "</label></span></div>"; } else { $tabindex = self::get_tabindex(); return sprintf("<div class='ginput_container'><input name='input_%d' id='%s' type='%s' value='%s' class='%s' {$max_length} {$tabindex} {$html5_attributes} {$logic_event} %s/></div>", $id, $field_id, $html_input_type, esc_attr($value), esc_attr($class), $disabled_text); } } break; case "honeypot": $autocomplete = RGFormsModel::is_html5_enabled() ? "autocomplete='off'" : ""; return "<div class='ginput_container'><input name='input_{$id}' id='{$field_id}' type='text' value='' {$autocomplete}/></div>"; break; case "hidden": if (!empty($post_link)) { return $post_link; } $field_type = IS_ADMIN ? "text" : "hidden"; $class_attribute = IS_ADMIN ? "" : "class='gform_hidden'"; return sprintf("<input name='input_%d' id='%s' type='{$field_type}' {$class_attribute} value='%s' %s/>", $id, $field_id, esc_attr($value), $disabled_text); break; case "html": $content = IS_ADMIN ? "<img class='gfield_html_block' src='" . self::get_base_url() . "/images/gf_html_admin_placeholder.jpg' alt='HTML Block'/>" : $field["content"]; $content = GFCommon::replace_variables_prepopulate($content); //adding support for merge tags $content = do_shortcode($content); //adding support for shortcodes return $content; break; case "adminonly_hidden": if (!is_array($field["inputs"])) { return sprintf("<input name='input_%d' id='%s' class='gform_hidden' type='hidden' value='%s'/>", $id, $field_id, esc_attr($value)); } $fields = ""; foreach ($field["inputs"] as $input) { $fields .= sprintf("<input name='input_%s' class='gform_hidden' type='hidden' value='%s'/>", $input["id"], esc_attr(rgar($value, $input["id"]))); } return $fields; break; case "number": if (!empty($post_link)) { return $post_link; } $instruction = ""; $read_only = ""; if (!IS_ADMIN) { if (GFCommon::has_field_calculation($field)) { // calculation-enabled fields should be read only $read_only = 'readonly="readonly"'; } else { $message = self::get_range_message($field); $validation_class = $field["failed_validation"] ? "validation_message" : ""; if (!$field["failed_validation"] && !empty($message) && empty($field["errorMessage"])) { $instruction = "<div class='instruction {$validation_class}'>" . $message . "</div>"; } } } $is_html5 = RGFormsModel::is_html5_enabled(); $html_input_type = $is_html5 && !GFCommon::has_field_calculation($field) ? "number" : "text"; // chrome does not allow number fields to have commas, calculations display numbers with commas $step_attr = $is_html5 ? "step='any'" : ""; $logic_event = self::get_logic_event($field, "keyup"); $tabindex = self::get_tabindex(); return sprintf("<div class='ginput_container'><input name='input_%d' id='%s' type='{$html_input_type}' {$step_attr} value='%s' class='%s' {$tabindex} {$logic_event} {$read_only} %s/>%s</div>", $id, $field_id, esc_attr($value), esc_attr($class), $disabled_text, $instruction); case "donation": $tabindex = self::get_tabindex(); return sprintf("<div class='ginput_container'><input name='input_%d' id='%s' type='text' value='%s' class='%s ginput_donation_amount' {$tabindex} %s/></div>", $id, $field_id, esc_attr($value), esc_attr($class), $disabled_text); case "price": $logic_event = self::get_logic_event($field, "keyup"); $tabindex = self::get_tabindex(); return sprintf("<div class='ginput_container'><input name='input_%d' id='%s' type='text' value='%s' class='%s ginput_amount' {$tabindex} {$logic_event} %s/></div>", $id, $field_id, esc_attr($value), esc_attr($class), $disabled_text); case "phone": if (!empty($post_link)) { return $post_link; } $instruction = $field["phoneFormat"] == "standard" ? __("Phone format:", "gravityforms") . " (###)###-####" : ""; $instruction_div = rgget("failed_validation", $field) ? "<div class='instruction validation_message'>{$instruction}</div>" : ""; $html_input_type = RGFormsModel::is_html5_enabled() ? "tel" : "text"; $logic_event = self::get_logic_event($field, "keyup"); $tabindex = self::get_tabindex(); return sprintf("<div class='ginput_container'><input name='input_%d' id='%s' type='{$html_input_type}' value='%s' class='%s' {$tabindex} {$logic_event} %s/>{$instruction_div}</div>", $id, $field_id, esc_attr($value), esc_attr($class), $disabled_text); case "textarea": $max_chars = ""; $logic_event = self::get_logic_event($field, "keyup"); $tabindex = self::get_tabindex(); return sprintf("<div class='ginput_container'><textarea name='input_%d' id='%s' class='textarea %s' {$tabindex} {$logic_event} %s rows='10' cols='50'>%s</textarea></div>{$max_chars}", $id, $field_id, esc_attr($class), $disabled_text, esc_html($value)); case "post_title": case "post_tags": case "post_custom_field": $tabindex = self::get_tabindex(); $logic_event = self::get_logic_event($field, "keyup"); return !empty($post_link) ? $post_link : sprintf("<div class='ginput_container'><input name='input_%d' id='%s' type='text' value='%s' class='%s' {$tabindex} {$logic_event} %s/></div>", $id, $field_id, esc_attr($value), esc_attr($class), $disabled_text); break; case "post_content": case "post_excerpt": $max_chars = ""; $logic_event = self::get_logic_event($field, "keyup"); $tabindex = self::get_tabindex(); return !empty($post_link) ? $post_link : sprintf("<div class='ginput_container'><textarea name='input_%d' id='%s' class='textarea %s' {$tabindex} {$logic_event} %s rows='10' cols='50'>%s</textarea></div>{$max_chars}", $id, $field_id, esc_attr($class), $disabled_text, esc_html($value)); break; case "post_category": if (!empty($post_link)) { return $post_link; } if (rgget("displayAllCategories", $field) && !IS_ADMIN) { $default_category = rgget("categoryInitialItemEnabled", $field) ? "-1" : get_option('default_category'); $selected = empty($value) ? $default_category : $value; $args = array('echo' => 0, 'selected' => $selected, "class" => esc_attr($class) . " gfield_select", 'hide_empty' => 0, 'name' => "input_{$id}", 'orderby' => 'name', 'hierarchical' => true); if (self::$tab_index > 0) { $args["tab_index"] = self::$tab_index++; } if (rgget("categoryInitialItemEnabled", $field)) { $args["show_option_none"] = empty($field["categoryInitialItem"]) ? " " : $field["categoryInitialItem"]; } return "<div class='ginput_container'>" . wp_dropdown_categories($args) . "</div>"; } else { $tabindex = self::get_tabindex(); if (is_array(rgar($field, "choices"))) { usort($field["choices"], create_function('$a,$b', 'return strcmp($a["text"], $b["text"]);')); } $choices = self::get_select_choices($field, $value); //Adding first option if (rgget("categoryInitialItemEnabled", $field)) { $selected = empty($value) ? "selected='selected'" : ""; $choices = "<option value='-1' {$selected}>{$field["categoryInitialItem"]}</option>" . $choices; } return sprintf("<div class='ginput_container'><select name='input_%d' id='%s' class='%s gfield_select' {$tabindex} %s>%s</select></div>", $id, $field_id, esc_attr($class), $disabled_text, $choices); } break; case "post_image": if (!empty($post_link)) { return $post_link; } $title = esc_attr(rgget($field["id"] . ".1", $value)); $caption = esc_attr(rgget($field["id"] . ".4", $value)); $description = esc_attr(rgget($field["id"] . ".7", $value)); //hidding meta fields for admin $hidden_style = "style='display:none;'"; $title_style = !rgget("displayTitle", $field) && IS_ADMIN ? $hidden_style : ""; $caption_style = !rgget("displayCaption", $field) && IS_ADMIN ? $hidden_style : ""; $description_style = !rgget("displayDescription", $field) && IS_ADMIN ? $hidden_style : ""; $file_label_style = IS_ADMIN && !(rgget("displayTitle", $field) || rgget("displayCaption", $field) || rgget("displayDescription", $field)) ? $hidden_style : ""; $hidden_class = $preview = ""; $file_info = RGFormsModel::get_temp_filename($form_id, "input_{$id}"); if ($file_info) { $hidden_class = " gform_hidden"; $file_label_style = $hidden_style; $preview = "<span class='ginput_preview'><strong>" . esc_html($file_info["uploaded_filename"]) . "</strong> | <a href='javascript:;' onclick='gformDeleteUploadedFile({$form_id}, {$id});'>" . __("delete", "gravityforms") . "</a></span>"; } //in admin, render all meta fields to allow for immediate feedback, but hide the ones not selected $file_label = IS_ADMIN || rgget("displayTitle", $field) || rgget("displayCaption", $field) || rgget("displayDescription", $field) ? "<label for='{$field_id}' class='ginput_post_image_file' {$file_label_style}>" . apply_filters("gform_postimage_file_{$form_id}", apply_filters("gform_postimage_file", __("File", "gravityforms"), $form_id), $form_id) . "</label>" : ""; $tabindex = self::get_tabindex(); $upload = sprintf("<span class='ginput_full{$class_suffix}'>{$preview}<input name='input_%d' id='%s' type='file' value='%s' class='%s' {$tabindex} %s/>{$file_label}</span>", $id, $field_id, esc_attr($value), esc_attr($class . $hidden_class), $disabled_text); $tabindex = self::get_tabindex(); $title_field = rgget("displayTitle", $field) || IS_ADMIN ? sprintf("<span class='ginput_full{$class_suffix} ginput_post_image_title' {$title_style}><input type='text' name='input_%d.1' id='%s_1' value='%s' {$tabindex} %s/><label for='%s_1'>" . apply_filters("gform_postimage_title_{$form_id}", apply_filters("gform_postimage_title", __("Title", "gravityforms"), $form_id), $form_id) . "</label></span>", $id, $field_id, $title, $disabled_text, $field_id) : ""; $tabindex = self::get_tabindex(); $caption_field = rgget("displayCaption", $field) || IS_ADMIN ? sprintf("<span class='ginput_full{$class_suffix} ginput_post_image_caption' {$caption_style}><input type='text' name='input_%d.4' id='%s_4' value='%s' {$tabindex} %s/><label for='%s_4'>" . apply_filters("gform_postimage_caption_{$form_id}", apply_filters("gform_postimage_caption", __("Caption", "gravityforms"), $form_id), $form_id) . "</label></span>", $id, $field_id, $caption, $disabled_text, $field_id) : ""; $tabindex = self::get_tabindex(); $description_field = rgget("displayDescription", $field) || IS_ADMIN ? sprintf("<span class='ginput_full{$class_suffix} ginput_post_image_description' {$description_style}><input type='text' name='input_%d.7' id='%s_7' value='%s' {$tabindex} %s/><label for='%s_7'>" . apply_filters("gform_postimage_description_{$form_id}", apply_filters("gform_postimage_description", __("Description", "gravityforms"), $form_id), $form_id) . "</label></span>", $id, $field_id, $description, $disabled_text, $field_id) : ""; return "<div class='ginput_complex{$class_suffix} ginput_container'>" . $upload . $title_field . $caption_field . $description_field . "</div>"; break; case "multiselect": if (!empty($post_link)) { return $post_link; } $placeholder = rgar($field, "enableEnhancedUI") ? "data-placeholder='" . esc_attr(apply_filters("gform_multiselect_placeholder_{$form_id}", apply_filters("gform_multiselect_placeholder", __("Click to select...", "gravityforms"), $form_id), $form_id)) . "'" : ""; $logic_event = self::get_logic_event($field, "keyup"); $css_class = trim(esc_attr($class) . " gfield_select"); $size = rgar($field, "multiSelectSize"); if (empty($size)) { $size = 7; } $tabindex = self::get_tabindex(); return sprintf("<div class='ginput_container'><select multiple='multiple' {$placeholder} size='{$size}' name='input_%d[]' id='%s' {$logic_event} class='%s' {$tabindex} %s>%s</select></div>", $id, $field_id, $css_class, $disabled_text, self::get_select_choices($field, $value)); break; case "select": if (!empty($post_link)) { return $post_link; } $logic_event = self::get_logic_event($field, "change"); $css_class = trim(esc_attr($class) . " gfield_select"); $tabindex = self::get_tabindex(); return sprintf("<div class='ginput_container'><select name='input_%d' id='%s' {$logic_event} class='%s' {$tabindex} %s>%s</select></div>", $id, $field_id, $css_class, $disabled_text, self::get_select_choices($field, $value)); case "checkbox": if (!empty($post_link)) { return $post_link; } return sprintf("<div class='ginput_container'><ul class='gfield_checkbox' id='%s'>%s</ul></div>", $field_id, self::get_checkbox_choices($field, $value, $disabled_text)); case "radio": if (!empty($post_link)) { return $post_link; } return sprintf("<div class='ginput_container'><ul class='gfield_radio' id='%s'>%s</ul></div>", $field_id, self::get_radio_choices($field, $value, $disabled_text)); case "password": $first_tabindex = self::get_tabindex(); $last_tabindex = self::get_tabindex(); $strength_style = !rgar($field, "passwordStrengthEnabled") ? "style='display:none;'" : ""; $strength = rgar($field, "passwordStrengthEnabled") || IS_ADMIN ? "<div id='{$field_id}_strength_indicator' class='gfield_password_strength' {$strength_style}>" . __("Strength indicator", "gravityforms") . "</div><input type='hidden' class='gform_hidden' id='{$field_id}_strength' name='input_{$id}_strength' />" : ""; $action = !IS_ADMIN ? "gformShowPasswordStrength(\"{$field_id}\");" : ""; $onchange = rgar($field, "passwordStrengthEnabled") ? "onchange='{$action}'" : ""; $onkeyup = rgar($field, "passwordStrengthEnabled") ? "onkeyup='{$action}'" : ""; $pass = RGForms::post("input_" . $id . "_2"); return sprintf("<div class='ginput_complex{$class_suffix} ginput_container' id='{$field_id}_container'><span id='" . $field_id . "_1_container' class='ginput_left'><input type='password' name='input_%d' id='%s' {$onkeyup} {$onchange} value='%s' {$first_tabindex} %s/><label for='%s'>" . apply_filters("gform_password_{$form_id}", apply_filters("gform_password", __("Enter Password", "gravityforms"), $form_id), $form_id) . "</label></span><span id='" . $field_id . "_2_container' class='ginput_right'><input type='password' name='input_%d_2' id='%s_2' {$onkeyup} {$onchange} value='%s' {$last_tabindex} %s/><label for='%s_2'>" . apply_filters("gform_password_confirm_{$form_id}", apply_filters("gform_password_confirm", __("Confirm Password", "gravityforms"), $form_id), $form_id) . "</label></span></div>{$strength}", $id, $field_id, esc_attr($value), $disabled_text, $field_id, $id, $field_id, esc_attr($pass), $disabled_text, $field_id); case "name": $prefix = ""; $first = ""; $last = ""; $suffix = ""; if (is_array($value)) { $prefix = esc_attr(RGForms::get($field["id"] . ".2", $value)); $first = esc_attr(RGForms::get($field["id"] . ".3", $value)); $last = esc_attr(RGForms::get($field["id"] . ".6", $value)); $suffix = esc_attr(RGForms::get($field["id"] . ".8", $value)); } switch (rgget("nameFormat", $field)) { case "extended": $prefix_tabindex = self::get_tabindex(); $first_tabindex = self::get_tabindex(); $last_tabindex = self::get_tabindex(); $suffix_tabindex = self::get_tabindex(); return sprintf("<div class='ginput_complex{$class_suffix} ginput_container' id='{$field_id}'><span id='" . $field_id . "_2_container' class='name_prefix'><input type='text' name='input_%d.2' id='%s_2' value='%s' {$prefix_tabindex} %s/><label for='%s_2'>" . apply_filters("gform_name_prefix_{$form_id}", apply_filters("gform_name_prefix", __("Prefix", "gravityforms"), $form_id), $form_id) . "</label></span><span id='" . $field_id . "_3_container' class='name_first'><input type='text' name='input_%d.3' id='%s_3' value='%s' {$first_tabindex} %s/><label for='%s_3'>" . apply_filters("gform_name_first_{$form_id}", apply_filters("gform_name_first", __("First", "gravityforms"), $form_id), $form_id) . "</label></span><span id='" . $field_id . "_6_container' class='name_last'><input type='text' name='input_%d.6' id='%s_6' value='%s' {$last_tabindex} %s/><label for='%s_6'>" . apply_filters("gform_name_last_{$form_id}", apply_filters("gform_name_last", __("Last", "gravityforms"), $form_id), $form_id) . "</label></span><span id='" . $field_id . "_8_container' class='name_suffix'><input type='text' name='input_%d.8' id='%s_8' value='%s' {$suffix_tabindex} %s/><label for='%s_8'>" . apply_filters("gform_name_suffix_{$form_id}", apply_filters("gform_name_suffix", __("Suffix", "gravityforms"), $form_id), $form_id) . "</label></span></div>", $id, $field_id, $prefix, $disabled_text, $field_id, $id, $field_id, $first, $disabled_text, $field_id, $id, $field_id, $last, $disabled_text, $field_id, $id, $field_id, $suffix, $disabled_text, $field_id); case "simple": $tabindex = self::get_tabindex(); return sprintf("<div class='ginput_container'><input name='input_%d' id='%s' type='text' value='%s' class='%s' {$tabindex} %s/></div>", $id, $field_id, esc_attr($value), esc_attr($class), $disabled_text); default: $first_tabindex = self::get_tabindex(); $last_tabindex = self::get_tabindex(); return sprintf("<div class='ginput_complex{$class_suffix} ginput_container' id='{$field_id}'><span id='" . $field_id . "_3_container' class='ginput_left'><input type='text' name='input_%d.3' id='%s_3' value='%s' {$first_tabindex} %s/><label for='%s_3'>" . apply_filters("gform_name_first_{$form_id}", apply_filters("gform_name_first", __("First", "gravityforms"), $form_id), $form_id) . "</label></span><span id='" . $field_id . "_6_container' class='ginput_right'><input type='text' name='input_%d.6' id='%s_6' value='%s' {$last_tabindex} %s/><label for='%s_6'>" . apply_filters("gform_name_last_{$form_id}", apply_filters("gform_name_last", __("Last", "gravityforms"), $form_id), $form_id) . "</label></span></div>", $id, $field_id, $first, $disabled_text, $field_id, $id, $field_id, $last, $disabled_text, $field_id); } case "address": $street_value = ""; $street2_value = ""; $city_value = ""; $state_value = ""; $zip_value = ""; $country_value = ""; if (is_array($value)) { $street_value = esc_attr(rgget($field["id"] . ".1", $value)); $street2_value = esc_attr(rgget($field["id"] . ".2", $value)); $city_value = esc_attr(rgget($field["id"] . ".3", $value)); $state_value = esc_attr(rgget($field["id"] . ".4", $value)); $zip_value = esc_attr(rgget($field["id"] . ".5", $value)); $country_value = esc_attr(rgget($field["id"] . ".6", $value)); } $address_types = self::get_address_types($form_id); $addr_type = empty($field["addressType"]) ? "international" : $field["addressType"]; $address_type = $address_types[$addr_type]; $state_label = empty($address_type["state_label"]) ? __("State", "gravityforms") : $address_type["state_label"]; $zip_label = empty($address_type["zip_label"]) ? __("Zip Code", "gravityforms") : $address_type["zip_label"]; $hide_country = !empty($address_type["country"]) || rgget("hideCountry", $field); if (empty($country_value)) { $country_value = rgget("defaultCountry", $field); } if (empty($state_value)) { $state_value = rgget("defaultState", $field); } $country_list = self::get_country_dropdown($country_value); //changing css classes based on field format to ensure proper display $address_display_format = apply_filters("gform_address_display_format", "default"); $city_location = $address_display_format == "zip_before_city" ? "right" : "left"; $zip_location = $address_display_format != "zip_before_city" && rgar($field, "hideState") ? "right" : "left"; $state_location = $address_display_format == "zip_before_city" ? "left" : "right"; $country_location = rgar($field, "hideState") ? "left" : "right"; //address field $tabindex = self::get_tabindex(); $street_address = sprintf("<span class='ginput_full{$class_suffix}' id='" . $field_id . "_1_container'><input type='text' name='input_%d.1' id='%s_1' value='%s' {$tabindex} %s/><label for='%s_1' id='" . $field_id . "_1_label'>" . apply_filters("gform_address_street_{$form_id}", apply_filters("gform_address_street", __("Street Address", "gravityforms"), $form_id), $form_id) . "</label></span>", $id, $field_id, $street_value, $disabled_text, $field_id); //address line 2 field $street_address2 = ""; $style = IS_ADMIN && rgget("hideAddress2", $field) ? "style='display:none;'" : ""; if (IS_ADMIN || !rgget("hideAddress2", $field)) { $tabindex = self::get_tabindex(); $street_address2 = sprintf("<span class='ginput_full{$class_suffix}' id='" . $field_id . "_2_container' {$style}><input type='text' name='input_%d.2' id='%s_2' value='%s' {$tabindex} %s/><label for='%s_2' id='" . $field_id . "_2_label'>" . apply_filters("gform_address_street2_{$form_id}", apply_filters("gform_address_street2", __("Address Line 2", "gravityforms"), $form_id), $form_id) . "</label></span>", $id, $field_id, $street2_value, $disabled_text, $field_id); } if ($address_display_format == "zip_before_city") { //zip field $tabindex = self::get_tabindex(); $zip = sprintf("<span class='ginput_{$zip_location}{$class_suffix}' id='" . $field_id . "_5_container'><input type='text' name='input_%d.5' id='%s_5' value='%s' {$tabindex} %s/><label for='%s_5' id='" . $field_id . "_5_label'>" . apply_filters("gform_address_zip_{$form_id}", apply_filters("gform_address_zip", $zip_label, $form_id), $form_id) . "</label></span>", $id, $field_id, $zip_value, $disabled_text, $field_id); //city field $tabindex = self::get_tabindex(); $city = sprintf("<span class='ginput_{$city_location}{$class_suffix}' id='" . $field_id . "_3_container'><input type='text' name='input_%d.3' id='%s_3' value='%s' {$tabindex} %s/><label for='%s_3' id='{$field_id}.3_label'>" . apply_filters("gform_address_city_{$form_id}", apply_filters("gform_address_city", __("City", "gravityforms"), $form_id), $form_id) . "</label></span>", $id, $field_id, $city_value, $disabled_text, $field_id); //state field $style = IS_ADMIN && rgget("hideState", $field) ? "style='display:none;'" : ""; if (IS_ADMIN || !rgget("hideState", $field)) { $state_field = self::get_state_field($field, $id, $field_id, $state_value, $disabled_text, $form_id); $state = sprintf("<span class='ginput_{$state_location}{$class_suffix}' id='" . $field_id . "_4_container' {$style}>{$state_field}<label for='%s_4' id='" . $field_id . "_4_label'>" . apply_filters("gform_address_state_{$form_id}", apply_filters("gform_address_state", $state_label, $form_id), $form_id) . "</label></span>", $field_id); } else { $state = sprintf("<input type='hidden' class='gform_hidden' name='input_%d.4' id='%s_4' value='%s'/>", $id, $field_id, $state_value); } } else { //city field $tabindex = self::get_tabindex(); $city = sprintf("<span class='ginput_{$city_location}{$class_suffix}' id='" . $field_id . "_3_container'><input type='text' name='input_%d.3' id='%s_3' value='%s' {$tabindex} %s/><label for='%s_3' id='{$field_id}.3_label'>" . apply_filters("gform_address_city_{$form_id}", apply_filters("gform_address_city", __("City", "gravityforms"), $form_id), $form_id) . "</label></span>", $id, $field_id, $city_value, $disabled_text, $field_id); //state field $style = IS_ADMIN && rgget("hideState", $field) ? "style='display:none;'" : ""; if (IS_ADMIN || !rgget("hideState", $field)) { $state_field = self::get_state_field($field, $id, $field_id, $state_value, $disabled_text, $form_id); $state = sprintf("<span class='ginput_{$state_location}{$class_suffix}' id='" . $field_id . "_4_container' {$style}>{$state_field}<label for='%s_4' id='" . $field_id . "_4_label'>" . apply_filters("gform_address_state_{$form_id}", apply_filters("gform_address_state", $state_label, $form_id), $form_id) . "</label></span>", $field_id); } else { $state = sprintf("<input type='hidden' class='gform_hidden' name='input_%d.4' id='%s_4' value='%s'/>", $id, $field_id, $state_value); } //zip field $tabindex = self::get_tabindex(); $zip = sprintf("<span class='ginput_{$zip_location}{$class_suffix}' id='" . $field_id . "_5_container'><input type='text' name='input_%d.5' id='%s_5' value='%s' {$tabindex} %s/><label for='%s_5' id='" . $field_id . "_5_label'>" . apply_filters("gform_address_zip_{$form_id}", apply_filters("gform_address_zip", $zip_label, $form_id), $form_id) . "</label></span>", $id, $field_id, $zip_value, $disabled_text, $field_id); } if (IS_ADMIN || !$hide_country) { $style = $hide_country ? "style='display:none;'" : ""; $tabindex = self::get_tabindex(); $country = sprintf("<span class='ginput_{$country_location}{$class_suffix}' id='" . $field_id . "_6_container' {$style}><select name='input_%d.6' id='%s_6' {$tabindex} %s>%s</select><label for='%s_6' id='" . $field_id . "_6_label'>" . apply_filters("gform_address_country_{$form_id}", apply_filters("gform_address_country", __("Country", "gravityforms"), $form_id), $form_id) . "</label></span>", $id, $field_id, $disabled_text, $country_list, $field_id); } else { $country = sprintf("<input type='hidden' class='gform_hidden' name='input_%d.6' id='%s_6' value='%s'/>", $id, $field_id, $country_value); } $inputs = $address_display_format == "zip_before_city" ? $street_address . $street_address2 . $zip . $city . $state . $country : $street_address . $street_address2 . $city . $state . $zip . $country; return "<div class='ginput_complex{$class_suffix} ginput_container' id='{$field_id}'>" . $inputs . "</div>"; case "date": if (!empty($post_link)) { return $post_link; } $format = empty($field["dateFormat"]) ? "mdy" : esc_attr($field["dateFormat"]); $field_position = substr($format, 0, 3); if (IS_ADMIN && RG_CURRENT_VIEW != "entry") { $datepicker_display = in_array(rgget("dateType", $field), array("datefield", "datedropdown")) ? "none" : "inline"; $datefield_display = rgget("dateType", $field) == "datefield" ? "inline" : "none"; $dropdown_display = rgget("dateType", $field) == "datedropdown" ? "inline" : "none"; $icon_display = rgget("calendarIconType", $field) == "calendar" ? "inline" : "none"; $month_field = "<div class='gfield_date_month ginput_date' id='gfield_input_date_month' style='display:{$datefield_display}'><input name='ginput_month' type='text' disabled='disabled'/><label>" . __("MM", "gravityforms") . "</label></div>"; $day_field = "<div class='gfield_date_day ginput_date' id='gfield_input_date_day' style='display:{$datefield_display}'><input name='ginput_day' type='text' disabled='disabled'/><label>" . __("DD", "gravityforms") . "</label></div>"; $year_field = "<div class='gfield_date_year ginput_date' id='gfield_input_date_year' style='display:{$datefield_display}'><input type='text' name='ginput_year' disabled='disabled'/><label>" . __("YYYY", "gravityforms") . "</label></div>"; $month_dropdown = "<div class='gfield_date_dropdown_month ginput_date_dropdown' id='gfield_dropdown_date_month' style='display:{$dropdown_display}'>" . self::get_month_dropdown("", "", "", "", "disabled='disabled'") . "</div>"; $day_dropdown = "<div class='gfield_date_dropdown_day ginput_date_dropdown' id='gfield_dropdown_date_day' style='display:{$dropdown_display}'>" . self::get_day_dropdown("", "", "", "", "disabled='disabled'") . "</div>"; $year_dropdown = "<div class='gfield_date_dropdown_year ginput_date_dropdown' id='gfield_dropdown_date_year' style='display:{$dropdown_display}'>" . self::get_year_dropdown("", "", "", "", "disabled='disabled'") . "</div>"; $field_string = "<div class='ginput_container' id='gfield_input_datepicker' style='display:{$datepicker_display}'><input name='ginput_datepicker' type='text' /><img src='" . GFCommon::get_base_url() . "/images/calendar.png' id='gfield_input_datepicker_icon' style='display:{$icon_display}'/></div>"; switch ($field_position) { case "dmy": $field_string .= $day_field . $month_field . $year_field . $day_dropdown . $month_dropdown . $year_dropdown; break; case "ymd": $field_string .= $year_field . $month_field . $day_field . $year_dropdown . $month_dropdown . $day_dropdown; break; default: $field_string .= $month_field . $day_field . $year_field . $month_dropdown . $day_dropdown . $year_dropdown; break; } return $field_string; } else { $date_info = self::parse_date($value, $format); $date_type = rgget("dateType", $field); if (in_array($date_type, array("datefield", "datedropdown"))) { switch ($field_position) { case "dmy": $tabindex = self::get_tabindex(); $field_str = $date_type == "datedropdown" ? "<div class='clear-multi'><div class='gfield_date_dropdown_day ginput_container' id='{$field_id}'>" . self::get_day_dropdown("input_{$id}[]", "{$field_id}_1", rgar($date_info, "day"), $tabindex, $disabled_text) . "</div>" : sprintf("<div class='clear-multi'><div class='gfield_date_day ginput_container' id='%s'><input type='text' maxlength='2' name='input_%d[]' id='%s_2' value='%s' {$tabindex} %s/><label for='%s_2'>" . __("DD", "gravityforms") . "</label></div>", $field_id, $id, $field_id, rgget("day", $date_info), $disabled_text, $field_id); $tabindex = self::get_tabindex(); $field_str .= $date_type == "datedropdown" ? "<div class='gfield_date_dropdown_month ginput_container' id='{$field_id}'>" . self::get_month_dropdown("input_{$id}[]", "{$field_id}_1", rgar($date_info, "month"), $tabindex, $disabled_text) . "</div>" : sprintf("<div class='gfield_date_month ginput_container' id='%s'><input type='text' maxlength='2' name='input_%d[]' id='%s_1' value='%s' {$tabindex} %s/><label for='%s_1'>" . __("MM", "gravityforms") . "</label></div>", $field_id, $id, $field_id, rgget("month", $date_info), $disabled_text, $field_id); $tabindex = self::get_tabindex(); $field_str .= $date_type == "datedropdown" ? "<div class='gfield_date_dropdown_year ginput_container' id='{$field_id}'>" . self::get_year_dropdown("input_{$id}[]", "{$field_id}_1", rgar($date_info, "year"), $tabindex, $disabled_text) . "</div></div>" : sprintf("<div class='gfield_date_year ginput_container' id='%s'><input type='text' maxlength='4' name='input_%d[]' id='%s_3' value='%s' {$tabindex} %s/><label for='%s_3'>" . __("YYYY", "gravityforms") . "</label></div></div>", $field_id, $id, $field_id, rgget("year", $date_info), $disabled_text, $field_id); break; case "ymd": $tabindex = self::get_tabindex(); $field_str = $date_type == "datedropdown" ? "<div class='clear-multi'><div class='gfield_date_dropdown_year ginput_container' id='{$field_id}'>" . self::get_year_dropdown("input_{$id}[]", "{$field_id}_1", rgar($date_info, "year"), $tabindex, $disabled_text) . "</div>" : sprintf("<div class='clear-multi'><div class='gfield_date_year ginput_container' id='%s'><input type='text' maxlength='4' name='input_%d[]' id='%s_3' value='%s' {$tabindex} %s/><label for='%s_3'>" . __("YYYY", "gravityforms") . "</label></div>", $field_id, $id, $field_id, rgget("year", $date_info), $disabled_text, $field_id); $field_str .= $date_type == "datedropdown" ? "<div class='gfield_date_dropdown_month ginput_container' id='{$field_id}'>" . self::get_month_dropdown("input_{$id}[]", "{$field_id}_1", rgar($date_info, "month"), $tabindex, $disabled_text) . "</div>" : sprintf("<div class='gfield_date_month ginput_container' id='%s'><input type='text' maxlength='2' name='input_%d[]' id='%s_1' value='%s' {$tabindex} %s/><label for='%s_1'>" . __("MM", "gravityforms") . "</label></div>", $field_id, $id, $field_id, rgar($date_info, "month"), $disabled_text, $field_id); $tabindex = self::get_tabindex(); $field_str .= $date_type == "datedropdown" ? "<div class='gfield_date_dropdown_day ginput_container' id='{$field_id}'>" . self::get_day_dropdown("input_{$id}[]", "{$field_id}_1", rgar($date_info, "day"), $tabindex, $disabled_text) . "</div></div>" : sprintf("<div class='gfield_date_day ginput_container' id='%s'><input type='text' maxlength='2' name='input_%d[]' id='%s_2' value='%s' {$tabindex} %s/><label for='%s_2'>" . __("DD", "gravityforms") . "</label></div></div>", $field_id, $id, $field_id, rgar($date_info, "day"), $disabled_text, $field_id); break; default: $tabindex = self::get_tabindex(); $field_str = $date_type == "datedropdown" ? "<div class='clear-multi'><div class='gfield_date_dropdown_month ginput_container' id='{$field_id}'>" . self::get_month_dropdown("input_{$id}[]", "{$field_id}_1", rgar($date_info, "month"), $tabindex, $disabled_text) . "</div>" : sprintf("<div class='clear-multi'><div class='gfield_date_month ginput_container' id='%s'><input type='text' maxlength='2' name='input_%d[]' id='%s_1' value='%s' {$tabindex} %s/><label for='%s_1'>" . __("MM", "gravityforms") . "</label></div>", $field_id, $id, $field_id, rgar($date_info, "month"), $disabled_text, $field_id); $tabindex = self::get_tabindex(); $field_str .= $date_type == "datedropdown" ? "<div class='gfield_date_dropdown_day ginput_container' id='{$field_id}'>" . self::get_day_dropdown("input_{$id}[]", "{$field_id}_1", rgar($date_info, "day"), $tabindex, $disabled_text) . "</div>" : sprintf("<div class='gfield_date_day ginput_container' id='%s'><input type='text' maxlength='2' name='input_%d[]' id='%s_2' value='%s' {$tabindex} %s/><label for='%s_2'>" . __("DD", "gravityforms") . "</label></div>", $field_id, $id, $field_id, rgar($date_info, "day"), $disabled_text, $field_id); $tabindex = self::get_tabindex(); $field_str .= $date_type == "datedropdown" ? "<div class='gfield_date_dropdown_year ginput_container' id='{$field_id}'>" . self::get_year_dropdown("input_{$id}[]", "{$field_id}_1", rgar($date_info, "year"), $tabindex, $disabled_text) . "</div></div>" : sprintf("<div class='gfield_date_year ginput_container' id='%s'><input type='text' maxlength='4' name='input_%d[]' id='%s_3' value='%s' {$tabindex} %s/><label for='%s_3'>" . __("YYYY", "gravityforms") . "</label></div></div>", $field_id, $id, $field_id, rgget("year", $date_info), $disabled_text, $field_id); break; } return $field_str; } else { $value = GFCommon::date_display($value, $format); $icon_class = $field["calendarIconType"] == "none" ? "datepicker_no_icon" : "datepicker_with_icon"; $icon_url = empty($field["calendarIconUrl"]) ? GFCommon::get_base_url() . "/images/calendar.png" : $field["calendarIconUrl"]; $tabindex = self::get_tabindex(); return sprintf("<div class='ginput_container'><input name='input_%d' id='%s' type='text' value='%s' class='datepicker %s %s %s' {$tabindex} %s/> </div><input type='hidden' id='gforms_calendar_icon_{$field_id}' class='gform_hidden' value='{$icon_url}'/>", $id, $field_id, esc_attr($value), esc_attr($class), $format, $icon_class, $disabled_text); } } case "time": if (!empty($post_link)) { return $post_link; } $hour = $minute = $am_selected = $pm_selected = ""; if (!is_array($value) && !empty($value)) { preg_match('/^(\\d*):(\\d*) ?(.*)$/', $value, $matches); $hour = esc_attr($matches[1]); $minute = esc_attr($matches[2]); $am_selected = rgar($matches, 3) == "am" ? "selected='selected'" : ""; $pm_selected = rgar($matches, 3) == "pm" ? "selected='selected'" : ""; } else { if (is_array($value)) { $hour = esc_attr($value[0]); $minute = esc_attr($value[1]); $am_selected = rgar($value, 2) == "am" ? "selected='selected'" : ""; $pm_selected = rgar($value, 2) == "pm" ? "selected='selected'" : ""; } } $hour_tabindex = self::get_tabindex(); $minute_tabindex = self::get_tabindex(); $ampm_tabindex = self::get_tabindex(); $ampm_field_style = is_admin() && rgar($field, "timeFormat") == "24" ? "style='display:none;'" : ""; $ampm_field = is_admin() || rgar($field, "timeFormat") != "24" ? "<div class='gfield_time_ampm ginput_container' {$ampm_field_style}><select name='input_{$id}[]' id='{$field_id}_3' {$ampm_tabindex} {$disabled_text}><option value='am' {$am_selected}>" . __("AM", "gravityforms") . "</option><option value='pm' {$pm_selected}>" . __("PM", "gravityforms") . "</option></select></div>" : ""; return sprintf("<div class='clear-multi'><div class='gfield_time_hour ginput_container' id='%s'><input type='text' maxlength='2' name='input_%d[]' id='%s_1' value='%s' {$hour_tabindex} %s/> : <label for='%s_1'>" . __("HH", "gravityforms") . "</label></div><div class='gfield_time_minute ginput_container'><input type='text' maxlength='2' name='input_%d[]' id='%s_2' value='%s' {$minute_tabindex} %s/><label for='%s_2'>" . __("MM", "gravityforms") . "</label></div>{$ampm_field}</div>", $field_id, $id, $field_id, $hour, $disabled_text, $field_id, $id, $field_id, $minute, $disabled_text, $field_id); case "fileupload": $tabindex = self::get_tabindex(); $upload = sprintf("<input name='input_%d' id='%s' type='file' value='%s' size='20' class='%s' {$tabindex} %s/>", $id, $field_id, esc_attr($value), esc_attr($class), $disabled_text); if (IS_ADMIN && !empty($value)) { $value = esc_attr($value); $preview = sprintf("<div id='preview_%d'><a href='%s' target='_blank' alt='%s' title='%s'>%s</a><a href='%s' target='_blank' alt='" . __("Download file", "gravityforms") . "' title='" . __("Download file", "gravityforms") . "'><img src='%s' style='margin-left:10px;'/></a><a href='javascript:void(0);' alt='" . __("Delete file", "gravityforms") . "' title='" . __("Delete file", "gravityforms") . "' onclick='DeleteFile(%d,%d);' ><img src='%s' style='margin-left:10px;'/></a></div>", $id, $value, $value, $value, GFCommon::truncate_url($value), $value, GFCommon::get_base_url() . "/images/download.png", $lead_id, $id, GFCommon::get_base_url() . "/images/delete.png"); return $preview . "<div id='upload_{$id}' style='display:none;'>{$upload}</div>"; } else { $file_info = RGFormsModel::get_temp_filename($form_id, "input_{$id}"); if ($file_info && !$field["failed_validation"]) { $preview = "<span class='ginput_preview'><strong>" . esc_html($file_info["uploaded_filename"]) . "</strong> | <a href='javascript:;' onclick='gformDeleteUploadedFile({$form_id}, {$id});'>" . __("delete", "gravityforms") . "</a></span>"; return "<div class='ginput_container'>" . str_replace(" class='", " class='gform_hidden ", $upload) . " {$preview}</div>"; } else { return "<div class='ginput_container'>{$upload}</div>"; } } case "captcha": switch (rgget("captchaType", $field)) { case "simple_captcha": $size = rgempty("simpleCaptchaSize", $field) ? "medium" : $field["simpleCaptchaSize"]; $captcha = self::get_captcha($field); $tabindex = self::get_tabindex(); $dimensions = IS_ADMIN ? "" : "width='" . rgar($captcha, "width") . "' height='" . rgar($captcha, "height") . "'"; return "<div class='gfield_captcha_container'><img class='gfield_captcha' src='" . rgar($captcha, "url") . "' alt='' {$dimensions} /><div class='gfield_captcha_input_container simple_captcha_{$size}'><input type='text' name='input_{$id}' id='{$field_id}' {$tabindex}/><input type='hidden' name='input_captcha_prefix_{$id}' value='" . rgar($captcha, "prefix") . "' /></div></div>"; break; case "math": $size = empty($field["simpleCaptchaSize"]) ? "medium" : $field["simpleCaptchaSize"]; $captcha_1 = self::get_math_captcha($field, 1); $captcha_2 = self::get_math_captcha($field, 2); $captcha_3 = self::get_math_captcha($field, 3); $tabindex = self::get_tabindex(); $dimensions = IS_ADMIN ? "" : "width='{$captcha_1["width"]}' height='{$captcha_1["height"]}'"; return "<div class='gfield_captcha_container'><img class='gfield_captcha' src='{$captcha_1["url"]}' alt='' {$dimensions} /><img class='gfield_captcha' src='{$captcha_2["url"]}' alt='' {$dimensions} /><img class='gfield_captcha' src='{$captcha_3["url"]}' alt='' {$dimensions} /><div class='gfield_captcha_input_container math_{$size}'><input type='text' name='input_{$id}' id='input_{$field_id}' {$tabindex}/><input type='hidden' name='input_captcha_prefix_{$id}' value='{$captcha_1["prefix"]},{$captcha_2["prefix"]},{$captcha_3["prefix"]}' /></div></div>"; break; default: if (!function_exists("recaptcha_get_html")) { require_once GFCommon::get_base_path() . '/recaptchalib.php'; } $theme = empty($field["captchaTheme"]) ? "red" : esc_attr($field["captchaTheme"]); $publickey = get_option("rg_gforms_captcha_public_key"); $privatekey = get_option("rg_gforms_captcha_private_key"); if (IS_ADMIN) { if (empty($publickey) || empty($privatekey)) { return "<div class='captcha_message'>" . __("To use the reCaptcha field you must first do the following:", "gravityforms") . "</div><div class='captcha_message'>1 - <a href='http://www.google.com/recaptcha/whyrecaptcha' target='_blank'>" . sprintf(__("Sign up%s for a free reCAPTCHA account", "gravityforms"), "</a>") . "</div><div class='captcha_message'>2 - " . sprintf(__("Enter your reCAPTCHA keys in the %ssettings page%s", "gravityforms"), "<a href='?page=gf_settings'>", "</a>") . "</div>"; } else { return "<div class='ginput_container'><img class='gfield_captcha' src='" . GFCommon::get_base_url() . "/images/captcha_{$theme}.jpg' alt='reCAPTCHA' title='reCAPTCHA'/></div>"; } } else { $language = empty($field["captchaLanguage"]) ? "en" : esc_attr($field["captchaLanguage"]); $options = "<script type='text/javascript'>" . apply_filters("gform_cdata_open", "") . " var RecaptchaOptions = {theme : '{$theme}'}; if(parseInt('" . self::$tab_index . "') > 0) {RecaptchaOptions.tabindex = " . self::$tab_index++ . ";}" . apply_filters("gform_recaptcha_init_script", "", $form_id, $field) . apply_filters("gform_cdata_close", "") . "</script>"; $is_ssl = !empty($_SERVER['HTTPS']); return $options . "<div class='ginput_container' id='{$field_id}'>" . recaptcha_get_html($publickey, null, $is_ssl, $language) . "</div>"; } } break; case "creditcard": $card_number = ""; $card_name = ""; $expiration_date = ""; $expiration_month = ""; $expiration_year = ""; $security_code = ""; if (is_array($value)) { $card_number = esc_attr(rgget($field["id"] . ".1", $value)); $card_name = esc_attr(rgget($field["id"] . ".5", $value)); $expiration_date = rgget($field["id"] . ".2", $value); if (!is_array($expiration_date) && !empty($expiration_date)) { $expiration_date = explode("/", $expiration_date); } if (is_array($expiration_date) && count($expiration_date) == 2) { $expiration_month = $expiration_date[0]; $expiration_year = $expiration_date[1]; } $security_code = esc_attr(rgget($field["id"] . ".3", $value)); } $action = !IS_ADMIN ? "gformMatchCard(\"{$field_id}_1\");" : ""; $onchange = "onchange='{$action}'"; $onkeyup = "onkeyup='{$action}'"; $card_icons = ''; $cards = GFCommon::get_card_types(); $card_style = rgar($field, 'creditCardStyle') ? rgar($field, 'creditCardStyle') : 'style1'; foreach ($cards as $card) { $style = ""; if (self::is_card_supported($field, $card["slug"])) { $print_card = true; } else { if (IS_ADMIN) { $print_card = true; $style = "style='display:none;'"; } else { $print_card = false; } } if ($print_card) { $card_icons .= "<div class='gform_card_icon gform_card_icon_{$card['slug']}' {$style}>{$card['name']}</div>"; } } $card_icons = "<div class='gform_card_icon_container gform_card_icon_{$card_style}'>{$card_icons}</div>"; //card number fields $tabindex = self::get_tabindex(); $card_field = sprintf("<span class='ginput_full{$class_suffix}' id='{$field_id}_1_container'>{$card_icons}<input type='text' name='input_%d.1' id='%s_1' value='%s' {$tabindex} %s {$onchange} {$onkeyup} /><label for='%s_1' id='{$field_id}_1_label'>" . apply_filters("gform_card_number_{$form_id}", apply_filters("gform_card_number", __("Card Number", "gravityforms"), $form_id), $form_id) . "</label></span>", $id, $field_id, $card_number, $disabled_text, $field_id); //expiration date field $expiration_field = "<span class='ginput_full{$class_suffix} ginput_cardextras' id='{$field_id}_2_container'>" . "<span class='ginput_cardinfo_left{$class_suffix}' id='{$field_id}_2_container'>" . "<span class='ginput_card_expiration_container'>" . "<select name='input_{$id}.2[]' id='{$field_id}_2_month' " . self::get_tabindex() . " {$disabled_text} class='ginput_card_expiration ginput_card_expiration_month'>" . self::get_expiration_months($expiration_month) . "</select>" . "<select name='input_{$id}.2[]' id='{$field_id}_2_year' " . self::get_tabindex() . " {$disabled_text} class='ginput_card_expiration ginput_card_expiration_year'>" . self::get_expiration_years($expiration_year) . "</select>" . "<label for='{$field_id}_2_month' >" . apply_filters("gform_card_expiration_{$form_id}", apply_filters("gform_card_expiration", __("Expiration Date", "gravityforms"), $form_id), $form_id) . "</label>" . "</span>" . "</span>"; //security code field $tabindex = self::get_tabindex(); $security_field = "<span class='ginput_cardinfo_right{$class_suffix}' id='{$field_id}_2_container'>" . "<input type='text' name='input_{$id}.3' id='{$field_id}_3' {$tabindex} {$disabled_text} class='ginput_card_security_code' value='{$security_code}' />" . "<span class='ginput_card_security_code_icon'> </span>" . "<label for='{$field_id}_3' >" . apply_filters("gform_card_security_code_{$form_id}", apply_filters("gform_card_security_code", __("Security Code", "gravityforms"), $form_id), $form_id) . "</label>" . "</span>" . "</span>"; $tabindex = self::get_tabindex(); $card_name_field = sprintf("<span class='ginput_full{$class_suffix}' id='{$field_id}_5_container'><input type='text' name='input_%d.5' id='%s_5' value='%s' {$tabindex} %s /><label for='%s_5' id='{$field_id}_5_label'>" . apply_filters("gform_card_name_{$form_id}", apply_filters("gform_card_name", __("Cardholder Name", "gravityforms"), $form_id), $form_id) . "</label></span>", $id, $field_id, $card_name, $disabled_text, $field_id); return "<div class='ginput_complex{$class_suffix} ginput_container' id='{$field_id}'>" . $card_field . $expiration_field . $security_field . $card_name_field . " </div>"; break; case "list": if (!empty($value)) { $value = maybe_unserialize($value); } if (!is_array($value)) { $value = array(array()); } $has_columns = is_array(rgar($field, "choices")); $columns = $has_columns ? rgar($field, "choices") : array(array()); $list = "<div class='ginput_container ginput_list'>" . "<table class='gfield_list'>"; $class_attr = ""; if ($has_columns) { $list .= "<colgroup>"; $colnum = 1; foreach ($columns as $column) { $odd_even = $colnum % 2 == 0 ? "even" : "odd"; $list .= "<col id='gfield_list_{$field["id"]}_col{$colnum}' class='gfield_list_col_{$odd_even}'></col>"; $colnum++; } $list .= "</colgroup>"; $list .= "<thead><tr>"; foreach ($columns as $column) { $list .= "<th>" . esc_html($column["text"]) . "</th>"; } $list .= "<th> </th></tr></thead>"; } else { $list .= "<colgroup><col id='gfield_list_{$field["id"]}_col1' class='gfield_list_col_odd'></col></colgroup>"; } $delete_display = count($value) == 1 ? "visibility:hidden;" : ""; $maxRow = intval(rgar($field, "maxRows")); $disabled_icon_class = !empty($maxRow) && count($value) >= $maxRow ? "gfield_icon_disabled" : ""; $list .= "<tbody>"; $rownum = 1; foreach ($value as $item) { $odd_even = $rownum % 2 == 0 ? "even" : "odd"; $list .= "<tr class='gfield_list_row_{$odd_even}'>"; $colnum = 1; foreach ($columns as $column) { //getting value. taking into account columns being added/removed from form meta if (is_array($item)) { if ($has_columns) { $val = rgar($item, $column["text"]); } else { $vals = array_values($item); $val = rgar($vals, 0); } } else { $val = $colnum == 1 ? $item : ""; } $list .= "<td class='gfield_list_cell gfield_list_{$field["id"]}_cell{$colnum}'>" . self::get_list_input($field, $has_columns, $column, $val, $form_id) . "</td>"; $colnum++; } $add_icon = !rgempty("addIconUrl", $field) ? $field["addIconUrl"] : GFCommon::get_base_url() . "/images/add.png"; $delete_icon = !rgempty("deleteIconUrl", $field) ? $field["deleteIconUrl"] : GFCommon::get_base_url() . "/images/remove.png"; $on_click = IS_ADMIN && RG_CURRENT_VIEW != "entry" ? "" : "onclick='gformAddListItem(this, {$maxRow})'"; if (rgar($field, "maxRows") != 1) { $list .= "<td class='gfield_list_icons'>"; $list .= " <img src='{$add_icon}' class='add_list_item {$disabled_icon_class}' {$disabled_text} title='" . __("Add a row", "gravityforms") . "' alt='" . __("Add a row", "gravityforms") . "' {$on_click} style='cursor:pointer; margin:0 3px;' />" . " <img src='{$delete_icon}' {$disabled_text} title='" . __("Remove this row", "gravityforms") . "' alt='" . __("Remove this row", "gravityforms") . "' class='delete_list_item' style='cursor:pointer; {$delete_display}' onclick='gformDeleteListItem(this, {$maxRow})' />"; $list .= "</td>"; } $list .= "</tr>"; if (!empty($maxRow) && $rownum >= $maxRow) { break; } $rownum++; } $list .= "</tbody></table></div>"; return $list; break; } }
public static function get_field_input($field, $value = "", $lead_id = 0, $form_id = 0) { $id = $field["id"]; $field_id = IS_ADMIN || $form_id == 0 ? "input_{$id}" : "input_" . $form_id . "_{$id}"; $form_id = IS_ADMIN && empty($form_id) ? $_GET["id"] : $form_id; $size = $field["size"]; $disabled_text = IS_ADMIN && RG_CURRENT_VIEW != "entry" ? "disabled='disabled'" : ""; $class_suffix = RG_CURRENT_VIEW == "entry" ? "_admin" : ""; $class = $size . $class_suffix; $currency = ""; if (RG_CURRENT_VIEW == "entry") { $lead = RGFormsModel::get_lead($lead_id); $post_id = $lead["post_id"]; $post_link = ""; if (is_numeric($post_id) && self::is_post_field($field)) { $post_link = "You can <a href='post.php?action=edit&post={$post_id}'>edit this post</a> from the post page."; } $currency = $lead["currency"]; } $field_input = apply_filters("gform_field_input", "", $field, $value, $lead_id, $form_id); if ($field_input) { return $field_input; } //product fields are not editable if (RG_CURRENT_VIEW == "entry" && self::is_product_field($field["type"])) { return "<div class='ginput_container'>" . _e("Product fields are not editable", "gravityforms") . "</div>"; } else { if (RG_CURRENT_VIEW == "entry" && $field["type"] == "donation") { return "<div class='ginput_container'>" . _e("Donations are not editable", "gravityforms") . "</div>"; } } $max_length = ""; $html5_attributes = ""; switch (RGFormsModel::get_input_type($field)) { case "total": if (RG_CURRENT_VIEW == "entry") { return "<div class='ginput_container'><input type='text' name='input_{$id}' value='{$value}' /></div>"; } else { return "<div class='ginput_container'><span class='ginput_total ginput_total_{$form_id}'>" . self::to_money("0") . "</span><input type='hidden' name='input_{$id}' id='{$field_id}' class='gform_hidden'/></div>"; } break; case "singleproduct": $product_name = !is_array($value) || empty($value[$field["id"] . ".1"]) ? esc_attr($field["label"]) : esc_attr($value[$field["id"] . ".1"]); $price = !is_array($value) || empty($value[$field["id"] . ".2"]) ? $field["basePrice"] : esc_attr($value[$field["id"] . ".2"]); $quantity = is_array($value) ? esc_attr($value[$field["id"] . ".3"]) : ""; if (empty($price)) { $price = 0; } $form = RGFormsModel::get_form_meta($form_id); $has_quantity = sizeof(GFCommon::get_product_fields_by_type($form, array("quantity"), $field["id"])) > 0; if ($has_quantity) { $field["disableQuantity"] = true; } $quantity_field = ""; if (IS_ADMIN) { $style = $field["disableQuantity"] ? "style='display:none;'" : ""; $quantity_field = " <span class='ginput_quantity_label' {$style}>" . __("Quantity:", "gravityformspaypal") . "</span> <input type='text' name='input_{$id}.3' value='{$quantity}' id='ginput_quantity_{$form_id}_{$field["id"]}' class='ginput_quantity' size='10' />"; } else { if (!$field["disableQuantity"]) { $tabindex = self::get_tabindex(); $quantity_field .= " <span class='ginput_quantity_label'>" . __("Quantity:", "gravityformspaypal") . "</span> <input type='text' name='input_{$id}.3' value='{$quantity}' id='ginput_quantity_{$form_id}_{$field["id"]}' class='ginput_quantity' size='10' {$tabindex}/>"; } else { if (!is_numeric($quantity)) { $quantity = 1; } if (!$has_quantity) { $quantity_field .= "<input type='hidden' name='input_{$id}.3' value='{$quantity}' class='ginput_quantity_{$form_id}_{$field["id"]} gform_hidden' />"; } } } return "<div class='ginput_container'><input type='hidden' name='input_{$id}.1' value='{$product_name}' class='gform_hidden' /><span class='ginput_product_price_label'>" . __("Price:", "gravityformspaypal") . "</span> <span class='ginput_product_price' id='{$field_id}'>" . GFCommon::to_money($price, $currency) . "</span><input type='hidden' name='input_{$id}.2' id='ginput_base_price_{$form_id}_{$field["id"]}' class='gform_hidden' value='{$price}'/>{$quantity_field}</div>"; break; case "singleshipping": $price = !empty($value) ? $value : $field["basePrice"]; if (empty($price)) { $price = 0; } return "<div class='ginput_container'><input type='hidden' name='input_{$id}' value='{$price}' class='gform_hidden'/><span class='ginput_shipping_price' id='{$field_id}'>" . GFCommon::to_money($price, $currency) . "</span></div>"; break; case "website": $is_html5 = RGFormsModel::is_html5_enabled(); $value = empty($value) && !$is_html5 ? "http://" : $value; $html_input_type = $is_html5 ? "url" : "text"; $html5_attributes = $is_html5 ? "placeholder='http://'" : ""; case "text": if (empty($html_input_type)) { $html_input_type = "text"; } if ($field["enablePasswordInput"] && RG_CURRENT_VIEW != "entry") { $html_input_type = "password"; } if (is_numeric($field["maxLength"])) { $max_length = "maxlength='{$field["maxLength"]}'"; } if (!empty($post_link)) { return $post_link; } $tabindex = self::get_tabindex(); return sprintf("<div class='ginput_container'><input name='input_%d' id='%s' type='%s' value='%s' class='%s' {$max_length} {$tabindex} {$html5_attributes} %s/></div>", $id, $field_id, $html_input_type, esc_attr($value), esc_attr($class), $disabled_text); break; case "email": if (!empty($post_link)) { return $post_link; } $html_input_type = RGFormsModel::is_html5_enabled() ? "email" : "text"; if (IS_ADMIN && RG_CURRENT_VIEW != "entry") { $single_style = $field["emailConfirmEnabled"] ? "style='display:none;'" : ""; $confirm_style = $field["emailConfirmEnabled"] ? "" : "style='display:none;'"; return "<div class='ginput_container ginput_single_email' {$single_style}><input name='input_{$id}' type='{$html_input_type}' class='" . esc_attr($class) . "' disabled='disabled' /></div><div class='ginput_complex ginput_container ginput_confirm_email' {$confirm_style} id='{$field_id}_container'><span id='{$field_id}_1_container' class='ginput_left'><input type='text' name='input_{$id}' id='{$field_id}' disabled='disabled' /><label for='{$field_id}'>" . apply_filters("gform_email_{$form_id}", apply_filters("gform_email", __("Enter Email", "gravityforms"), $form_id), $form_id) . "</label></span><span id='{$field_id}_2_container' class='ginput_right'><input type='text' name='input_{$id}_2' id='{$field_id}_2' disabled='disabled' /><label for='{$field_id}_2'>" . apply_filters("gform_email_confirm_{$form_id}", apply_filters("gform_email_confirm", __("Confirm Email", "gravityforms"), $form_id), $form_id) . "</label></span></div>"; } else { if ($field["emailConfirmEnabled"] && RG_CURRENT_VIEW != "entry") { $first_tabindex = self::get_tabindex(); $last_tabindex = self::get_tabindex(); return "<div class='ginput_complex ginput_container' id='{$field_id}_container'><span id='{$field_id}_1_container' class='ginput_left'><input type='{$html_input_type}' name='input_{$id}' id='{$field_id}' value='" . esc_attr($value) . "' {$first_tabindex} {$disabled_text}/><label for='{$field_id}'>" . apply_filters("gform_email_{$form_id}", apply_filters("gform_email", __("Enter Email", "gravityforms"), $form_id), $form_id) . "</label></span><span id='{$field_id}_2_container' class='ginput_right'><input type='{$html_input_type}' name='input_{$id}_2' id='{$field_id}_2' value='{$_POST["input_" . $id . "_2"]}' {$last_tabindex} {$disabled_text}/><label for='{$field_id}_2'>" . apply_filters("gform_email_confirm_{$form_id}", apply_filters("gform_email_confirm", __("Confirm Email", "gravityforms"), $form_id), $form_id) . "</label></span></div>"; } else { $tabindex = self::get_tabindex(); return sprintf("<div class='ginput_container'><input name='input_%d' id='%s' type='%s' value='%s' class='%s' {$max_length} {$tabindex} {$html5_attributes} %s/></div>", $id, $field_id, $html_input_type, esc_attr($value), esc_attr($class), $disabled_text); } } break; case "honeypot": return "<div class='ginput_container'><input name='input_{$id}' id='{$field_id}' type='text' value=''/></div>"; break; case "hidden": if (!empty($post_link)) { return $post_link; } $field_type = IS_ADMIN ? "text" : "hidden"; $class_attribute = IS_ADMIN ? "" : "class='gform_hidden'"; return sprintf("<input name='input_%d' id='%s' type='{$field_type}' {$class_attribute} value='%s' %s/>", $id, $field_id, esc_attr($value), $disabled_text); break; case "html": $content = IS_ADMIN ? "<img class='gfield_html_block' src='" . self::get_base_url() . "/images/gf_html_admin_placeholder.jpg' alt='HTML Block'/>" : $field["content"]; return do_shortcode($content); break; case "adminonly_hidden": if (!is_array($field["inputs"])) { return sprintf("<input name='input_%d' id='%s' class='gform_hidden' type='hidden' value='%s'/>", $id, $field_id, esc_attr($value)); } $fields = ""; foreach ($field["inputs"] as $input) { $fields .= sprintf("<input name='input_%s' class='gform_hidden' type='hidden' value='%s'/>", $input["id"], esc_attr($value[$input["id"]])); } return $fields; break; case "number": if (!empty($post_link)) { return $post_link; } $instruction = ""; if (!IS_ADMIN) { $min = $field["rangeMin"]; $max = $field["rangeMax"]; $validation_class = $field["failed_validation"] ? "validation_message" : ""; $message = self::get_range_message($field); if (!$field["failed_validation"] && !empty($message) && empty($field["errorMessage"])) { $instruction = "<div class='instruction {$validation_class}'>" . $message . "</div>"; } } $html_input_type = RGFormsModel::is_html5_enabled() ? "number" : "text"; $tabindex = self::get_tabindex(); return sprintf("<div class='ginput_container'><input name='input_%d' id='%s' type='{$html_input_type}' value='%s' class='%s' {$tabindex} %s/>%s</div>", $id, $field_id, esc_attr($value), esc_attr($class), $disabled_text, $instruction); case "donation": $tabindex = self::get_tabindex(); return sprintf("<div class='ginput_container'><input name='input_%d' id='%s' type='text' value='%s' class='%s' {$tabindex} %s/></div>", $id, $field_id, esc_attr($value), esc_attr($class), $disabled_text); case "price": $tabindex = self::get_tabindex(); return sprintf("<div class='ginput_container'><input name='input_%d' id='%s' type='text' value='%s' class='%s ginput_amount' {$tabindex} %s/></div>", $id, $field_id, esc_attr($value), esc_attr($class), $disabled_text); case "phone": if (!empty($post_link)) { return $post_link; } $instruction = $field["phoneFormat"] == "standard" ? __("Phone format:", "gravityforms") . " (###)###-####" : ""; $instruction_div = $field["failed_validation"] ? "<div class='instruction validation_message'>{$instruction}</div>" : ""; $html_input_type = RGFormsModel::is_html5_enabled() ? "tel" : "text"; $tabindex = self::get_tabindex(); return sprintf("<div class='ginput_container'><input name='input_%d' id='%s' type='{$html_input_type}' value='%s' class='%s' {$tabindex} %s/>{$instruction_div}</div>", $id, $field_id, esc_attr($value), esc_attr($class), $disabled_text); case "textarea": if (!IS_ADMIN && !empty($field["maxLength"]) && is_numeric($field["maxLength"])) { $max_chars = self::get_counter_script($form_id, $field_id, $field["maxLength"]); } $tabindex = self::get_tabindex(); return sprintf("<div class='ginput_container'><textarea name='input_%d' id='%s' class='textarea %s' {$tabindex} %s rows='10' cols='50'>%s</textarea></div>{$max_chars}", $id, $field_id, esc_attr($class), $disabled_text, esc_html($value)); case "post_title": case "post_tags": case "post_custom_field": $tabindex = self::get_tabindex(); return !empty($post_link) ? $post_link : sprintf("<div class='ginput_container'><input name='input_%d' id='%s' type='text' value='%s' class='%s' {$tabindex} %s/></div>", $id, $field_id, esc_attr($value), esc_attr($class), $disabled_text); break; case "post_content": case "post_excerpt": if (!IS_ADMIN && !empty($field["maxLength"]) && is_numeric($field["maxLength"])) { $max_chars = self::get_counter_script($form_id, $field_id, $field["maxLength"]); } $tabindex = self::get_tabindex(); return !empty($post_link) ? $post_link : sprintf("<div class='ginput_container'><textarea name='input_%d' id='%s' class='textarea %s' {$tabindex} %s rows='10' cols='50'>%s</textarea></div>{$max_chars}", $id, $field_id, esc_attr($class), $disabled_text, esc_html($value)); break; case "post_category": if (!empty($post_link)) { return $post_link; } if ($field["displayAllCategories"] && !IS_ADMIN) { $default_category = $field["categoryInitialItemEnabled"] ? "-1" : get_option('default_category'); $selected = empty($value) ? $default_category : $value; $args = array('echo' => 0, 'selected' => $selected, "class" => esc_attr($class) . " gfield_select", 'hide_empty' => 0, 'name' => "input_{$id}", 'orderby' => 'name', 'hierarchical' => true); if (self::$tab_index > 0) { $args["tab_index"] = self::$tab_index++; } if ($field["categoryInitialItemEnabled"]) { $args["show_option_none"] = empty($field["categoryInitialItem"]) ? " " : $field["categoryInitialItem"]; } return "<div class='ginput_container'>" . wp_dropdown_categories($args) . "</div>"; } else { $tabindex = self::get_tabindex(); $choices = self::get_select_choices($field, $value); //Adding first option if ($field["categoryInitialItemEnabled"]) { $selected = empty($value) ? "selected='selected'" : ""; $choices = "<option value='-1' {$selected}>{$field["categoryInitialItem"]}</option>" . $choices; } return sprintf("<div class='ginput_container'><select name='input_%d' id='%s' class='%s gfield_select' {$tabindex} %s>%s</select></div>", $id, $field_id, esc_attr($class), $disabled_text, $choices); } break; case "post_image": if (!empty($post_link)) { return $post_link; } $title = esc_attr($value[$field["id"] . ".1"]); $caption = esc_attr($value[$field["id"] . ".4"]); $description = esc_attr($value[$field["id"] . ".7"]); //hidding meta fields for admin $hidden_style = "style='display:none;'"; $title_style = !$field["displayTitle"] && IS_ADMIN ? $hidden_style : ""; $caption_style = !$field["displayCaption"] && IS_ADMIN ? $hidden_style : ""; $description_style = !$field["displayDescription"] && IS_ADMIN ? $hidden_style : ""; $file_label_style = IS_ADMIN && !($field["displayTitle"] || $field["displayCaption"] || $field["displayDescription"]) ? $hidden_style : ""; $hidden_class = ""; $file_info = RGFormsModel::get_temp_filename($form_id, "input_{$id}"); if ($file_info) { $hidden_class = " gform_hidden"; $file_label_style = $hidden_style; $preview = "<span class='ginput_preview'><strong>{$file_info["uploaded_filename"]}</strong> | <a href='javascript:;' onclick='gformDeleteUploadedFile({$form_id}, {$id});'>" . __("delete", "gravityforms") . "</a></span>"; } //in admin, render all meta fields to allow for immediate feedback, but hide the ones not selected $file_label = IS_ADMIN || $field["displayTitle"] || $field["displayCaption"] || $field["displayDescription"] ? "<label for='{$field_id}' class='ginput_post_image_file' {$file_label_style}>" . apply_filters("gform_postimage_file_{$form_id}", apply_filters("gform_postimage_file", __("File", "gravityforms"), $form_id), $form_id) . "</label>" : ""; $tabindex = self::get_tabindex(); $upload = sprintf("<span class='ginput_full{$class_suffix}'>{$preview}<input name='input_%d' id='%s' type='file' value='%s' class='%s' {$tabindex} %s/>{$file_label}</span>", $id, $field_id, esc_attr($value), esc_attr($class . $hidden_class), $disabled_text); $tabindex = self::get_tabindex(); $title_field = $field["displayTitle"] || IS_ADMIN ? sprintf("<span class='ginput_full{$class_suffix} ginput_post_image_title' {$title_style}><input type='text' name='input_%d.1' id='%s.1' value='%s' {$tabindex} %s/><label for='%s.1'>" . apply_filters("gform_postimage_title_{$form_id}", apply_filters("gform_postimage_title", __("Title", "gravityforms"), $form_id), $form_id) . "</label></span>", $id, $field_id, $title, $disabled_text, $field_id) : ""; $tabindex = self::get_tabindex(); $caption_field = $field["displayCaption"] || IS_ADMIN ? sprintf("<span class='ginput_full{$class_suffix} ginput_post_image_caption' {$caption_style}><input type='text' name='input_%d.4' id='%s.4' value='%s' {$tabindex} %s/><label for='%s.4'>" . apply_filters("gform_postimage_caption_{$form_id}", apply_filters("gform_postimage_caption", __("Caption", "gravityforms"), $form_id), $form_id) . "</label></span>", $id, $field_id, $caption, $disabled_text, $field_id) : ""; $tabindex = self::get_tabindex(); $description_field = $field["displayDescription"] || IS_ADMIN ? sprintf("<span class='ginput_full{$class_suffix} ginput_post_image_description' {$description_style}><input type='text' name='input_%d.7' id='%s.7' value='%s' {$tabindex} %s/><label for='%s.7'>" . apply_filters("gform_postimage_description_{$form_id}", apply_filters("gform_postimage_description", __("Description", "gravityforms"), $form_id), $form_id) . "</label></span>", $id, $field_id, $description, $disabled_text, $field_id) : ""; return "<div class='ginput_complex{$class_suffix} ginput_container'>" . $upload . $title_field . $caption_field . $description_field . "</div>"; break; case "select": if (!empty($post_link)) { return $post_link; } $logic_event = empty($field["conditionalLogicFields"]) || IS_ADMIN ? "" : "onchange='gf_apply_rules(" . $field["formId"] . "," . GFCommon::json_encode($field["conditionalLogicFields"]) . ");'"; $css_class = trim(esc_attr($class) . " gfield_select"); $tabindex = self::get_tabindex(); return sprintf("<div class='ginput_container'><select name='input_%d' id='%s' {$logic_event} class='%s' {$tabindex} %s>%s</select></div>", $id, $field_id, $css_class, $disabled_text, self::get_select_choices($field, $value)); case "checkbox": return sprintf("<div class='ginput_container'><ul class='gfield_checkbox' id='%s'>%s</ul></div>", $field_id, self::get_checkbox_choices($field, $value, $disabled_text)); case "radio": if (!empty($post_link)) { return $post_link; } return sprintf("<div class='ginput_container'><ul class='gfield_radio' id='%s'>%s</ul></div>", $field_id, self::get_radio_choices($field, $value, $disabled_text)); case "password": $first_tabindex = self::get_tabindex(); $last_tabindex = self::get_tabindex(); $strength_style = !$field["passwordStrengthEnabled"] ? "style='display:none;'" : ""; $strength = $field["passwordStrengthEnabled"] || IS_ADMIN ? "<div id='{$field_id}_strength_indicator' class='gfield_password_strength' {$strength_style}>" . __("Strength indicator", "gravityforms") . "</div><input type='hidden' class='gform_hidden' id='{$field_id}_strength' name='input_{$id}_strength' />" : ""; $action = "gformShowPasswordStrength(\"{$field_id}\");"; $onchange = $field["passwordStrengthEnabled"] ? "onchange='{$action}'" : ""; $onkeyup = $field["passwordStrengthEnabled"] ? "onkeyup='{$action}'" : ""; $script = $field["passwordStrengthEnabled"] && !IS_ADMIN ? "<script type=\"text/javascript\">if(window[\"gformShowPasswordStrength\"]) jQuery(document).ready(function(){{$action}});</script>" : ""; $pass = RGForms::post("input_" . $id . "_2"); return sprintf("<div class='ginput_complex{$class_suffix} ginput_container' id='{$field_id}_container'><span id='" . $field_id . "_1_container' class='ginput_left'><input type='password' name='input_%d' id='%s' {$onkeyup} {$onchange} value='%s' {$first_tabindex} %s/><label for='%s'>" . apply_filters("gform_password_{$form_id}", apply_filters("gform_password", __("Enter Password", "gravityforms"), $form_id), $form_id) . "</label></span><span id='" . $field_id . "_2_container' class='ginput_right'><input type='password' name='input_%d_2' id='%s_2' {$onkeyup} {$onchange} value='%s' {$last_tabindex} %s/><label for='%s_2'>" . apply_filters("gform_password_confirm_{$form_id}", apply_filters("gform_password_confirm", __("Confirm Password", "gravityforms"), $form_id), $form_id) . "</label></span>{$script}</div>{$strength}", $id, $field_id, $value, $disabled_text, $field_id, $id, $field_id, $pass, $disabled_text, $field_id); case "name": $prefix = ""; $first = ""; $last = ""; $suffix = ""; if (is_array($value)) { $prefix = esc_attr(RGForms::get($field["id"] . ".2", $value)); $first = esc_attr(RGForms::get($field["id"] . ".3", $value)); $last = esc_attr(RGForms::get($field["id"] . ".6", $value)); $suffix = esc_attr(RGForms::get($field["id"] . ".8", $value)); } switch ($field["nameFormat"]) { case "extended": $prefix_tabindex = self::get_tabindex(); $first_tabindex = self::get_tabindex(); $last_tabindex = self::get_tabindex(); $suffix_tabindex = self::get_tabindex(); return sprintf("<div class='ginput_complex{$class_suffix} ginput_container' id='{$field_id}'><span id='" . $field_id . "_2_container' class='name_prefix'><input type='text' name='input_%d.2' id='%s.2' value='%s' {$prefix_tabindex} %s/><label for='%s.2'>" . apply_filters("gform_name_prefix_{$form_id}", apply_filters("gform_name_prefix", __("Prefix", "gravityforms"), $form_id), $form_id) . "</label></span><span id='" . $field_id . "_3_container' class='name_first'><input type='text' name='input_%d.3' id='%s.3' value='%s' {$first_tabindex} %s/><label for='%s.3'>" . apply_filters("gform_name_first_{$form_id}", apply_filters("gform_name_first", __("First", "gravityforms"), $form_id), $form_id) . "</label></span><span id='" . $field_id . "_6_container' class='name_last'><input type='text' name='input_%d.6' id='%s.6' value='%s' {$last_tabindex} %s/><label for='%s.6'>" . apply_filters("gform_name_last_{$form_id}", apply_filters("gform_name_last", __("Last", "gravityforms"), $form_id), $form_id) . "</label></span><span id='" . $field_id . "_8_container' class='name_suffix'><input type='text' name='input_%d.8' id='%s.8' value='%s' {$suffix_tabindex} %s/><label for='%s.8'>" . apply_filters("gform_name_suffix_{$form_id}", apply_filters("gform_name_suffix", __("Suffix", "gravityforms"), $form_id), $form_id) . "</label></span></div>", $id, $field_id, $prefix, $disabled_text, $field_id, $id, $field_id, $first, $disabled_text, $field_id, $id, $field_id, $last, $disabled_text, $field_id, $id, $field_id, $suffix, $disabled_text, $field_id); case "simple": $tabindex = self::get_tabindex(); return sprintf("<div class='ginput_container'><input name='input_%d' id='%s' type='text' value='%s' class='%s' {$tabindex} %s/></div>", $id, $field_id, esc_attr($value), esc_attr($class), $disabled_text); default: $first_tabindex = self::get_tabindex(); $last_tabindex = self::get_tabindex(); return sprintf("<div class='ginput_complex{$class_suffix} ginput_container' id='{$field_id}'><span id='" . $field_id . "_3_container' class='ginput_left'><input type='text' name='input_%d.3' id='%s.3' value='%s' {$first_tabindex} %s/><label for='%s.3'>" . apply_filters("gform_name_first_{$form_id}", apply_filters("gform_name_first", __("First", "gravityforms"), $form_id), $form_id) . "</label></span><span id='" . $field_id . "_6_container' class='ginput_right'><input type='text' name='input_%d.6' id='%s.6' value='%s' {$last_tabindex} %s/><label for='%s.6'>" . apply_filters("gform_name_last_{$form_id}", apply_filters("gform_name_last", __("Last", "gravityforms"), $form_id), $form_id) . "</label></span></div>", $id, $field_id, $first, $disabled_text, $field_id, $id, $field_id, $last, $disabled_text, $field_id); } case "address": $street_value = ""; $street2_value = ""; $city_value = ""; $state_value = ""; $zip_value = ""; $country_value = ""; if (is_array($value)) { $street_value = esc_attr($value[$field["id"] . ".1"]); $street2_value = esc_attr($value[$field["id"] . ".2"]); $city_value = esc_attr($value[$field["id"] . ".3"]); $state_value = esc_attr($value[$field["id"] . ".4"]); $zip_value = esc_attr($value[$field["id"] . ".5"]); $country_value = esc_attr($value[$field["id"] . ".6"]); } $address_types = self::get_address_types($form_id); $addr_type = empty($field["addressType"]) ? "international" : $field["addressType"]; $address_type = $address_types[$addr_type]; $state_label = empty($address_type["state_label"]) ? __("State", "gravityforms") : $address_type["state_label"]; $zip_label = empty($address_type["zip_label"]) ? __("Zip Code", "gravityforms") : $address_type["zip_label"]; $hide_country = !empty($address_type["country"]) || $field["hideCountry"]; if (empty($country_value)) { $country_value = $field["defaultCountry"]; } if (empty($state_value)) { $state_value = $field["defaultState"]; } $country_list = self::get_country_dropdown($country_value); //address field $tabindex = self::get_tabindex(); $street_address = sprintf("<span class='ginput_full{$class_suffix}' id='" . $field_id . "_1_container'><input type='text' name='input_%d.1' id='%s_1' value='%s' {$tabindex} %s/><label for='%s_1' id='" . $field_id . "_1_label'>" . apply_filters("gform_address_street_{$form_id}", apply_filters("gform_address_street", __("Street Address", "gravityforms"), $form_id), $form_id) . "</label></span>", $id, $field_id, $street_value, $disabled_text, $field_id); //address line 2 field $style = IS_ADMIN && $field["hideAddress2"] ? "style='display:none;'" : ""; if (IS_ADMIN || !$field["hideAddress2"]) { $tabindex = self::get_tabindex(); $street_address2 = sprintf("<span class='ginput_full{$class_suffix}' id='" . $field_id . "_2_container' {$style}><input type='text' name='input_%d.2' id='%s_2' value='%s' {$tabindex} %s/><label for='%s_2' id='" . $field_id . "_2_label'>" . apply_filters("gform_address_street2_{$form_id}", apply_filters("gform_address_street2", __("Address Line 2", "gravityforms"), $form_id), $form_id) . "</label></span>", $id, $field_id, $street2_value, $disabled_text, $field_id); } //city field $tabindex = self::get_tabindex(); $city = sprintf("<span class='ginput_left{$class_suffix}' id='" . $field_id . "_3_container'><input type='text' name='input_%d.3' id='%s_3' value='%s' {$tabindex} %s/><label for='%s_3' id='{$field_id}.3_label'>" . apply_filters("gform_address_city_{$form_id}", apply_filters("gform_address_city", __("City", "gravityforms"), $form_id), $form_id) . "</label></span>", $id, $field_id, $city_value, $disabled_text, $field_id); //state field $style = IS_ADMIN && $field["hideState"] ? "style='display:none;'" : ""; if (IS_ADMIN || !$field["hideState"]) { $state_field = self::get_state_field($field, $id, $field_id, $state_value, $disabled_text, $form_id); $state = sprintf("<span class='ginput_right{$class_suffix}' id='" . $field_id . "_4_container' {$style}>{$state_field}<label for='%s.4' id='" . $field_id . "_4_label'>" . apply_filters("gform_address_state_{$form_id}", apply_filters("gform_address_state", $state_label, $form_id), $form_id) . "</label></span>", $field_id); } else { $state = sprintf("<input type='hidden' class='gform_hidden' name='input_%d.4' id='%s_4' value='%s'/>", $id, $field_id, $state_value); } //zip field $tabindex = self::get_tabindex(); $zip = sprintf("<span class='ginput_left{$class_suffix}' id='" . $field_id . "_5_container'><input type='text' name='input_%d.5' id='%s_5' value='%s' {$tabindex} %s/><label for='%s_5' id='" . $field_id . "_5_label'>" . apply_filters("gform_address_zip_{$form_id}", apply_filters("gform_address_zip", $zip_label, $form_id), $form_id) . "</label></span>", $id, $field_id, $zip_value, $disabled_text, $field_id); if (IS_ADMIN || !$hide_country) { $style = $hide_country ? "style='display:none;'" : ""; $tabindex = self::get_tabindex(); $country = sprintf("<span class='ginput_right{$class_suffix}' id='" . $field_id . "_6_container' {$style}><select name='input_%d.6' id='%s_6' {$tabindex} %s>%s</select><label for='%s_6' id='" . $field_id . "_6_label'>" . apply_filters("gform_address_country_{$form_id}", apply_filters("gform_address_country", __("Country", "gravityforms"), $form_id), $form_id) . "</label></span>", $id, $field_id, $disabled_text, $country_list, $field_id); } else { $country = sprintf("<input type='hidden' class='gform_hidden' name='input_%d.6' id='%s_6' value='%s'/>", $id, $field_id, $country_value); } return "<div class='ginput_complex{$class_suffix} ginput_container' id='{$field_id}'>" . $street_address . $street_address2 . $city . $state . $zip . $country . "</div>"; case "date": if (!empty($post_link)) { return $post_link; } $format = empty($field["dateFormat"]) ? "mdy" : esc_attr($field["dateFormat"]); if (IS_ADMIN && RG_CURRENT_VIEW != "entry") { $datepicker_display = $field["dateType"] == "datefield" ? "none" : "inline"; $dropdown_display = $field["dateType"] == "datefield" ? "inline" : "none"; $icon_display = $field["calendarIconType"] == "calendar" ? "inline" : "none"; $month_field = "<div class='gfield_date_month ginput_date' id='gfield_input_date_month' style='display:{$dropdown_display}'><input name='ginput_month' type='text' disabled='disabled'/><label>" . __("MM", "gravityforms") . "</label></div>"; $day_field = "<div class='gfield_date_day ginput_date' id='gfield_input_date_day' style='display:{$dropdown_display}'><input name='ginput_day' type='text' disabled='disabled'/><label>" . __("DD", "gravityforms") . "</label></div>"; $year_field = "<div class='gfield_date_year ginput_date' id='gfield_input_date_year' style='display:{$dropdown_display}'><input type='text' name='ginput_year' disabled='disabled'/><label>" . __("YYYY", "gravityforms") . "</label></div>"; $field_string = "<div class='ginput_container' id='gfield_input_datepicker' style='display:{$datepicker_display}'><input name='ginput_datepicker' type='text' /><img src='" . GFCommon::get_base_url() . "/images/calendar.png' id='gfield_input_datepicker_icon' style='display:{$icon_display}'/></div>"; $field_string .= $field["dateFormat"] == "dmy" ? $day_field . $month_field . $year_field : $month_field . $day_field . $year_field; return $field_string; } else { $date_info = GFCommon::parse_date($value, $format); if ($field["dateType"] == "datefield") { if ($format == "mdy") { $tabindex = self::get_tabindex(); $field_str = sprintf("<div class='clear-multi'><div class='gfield_date_month ginput_container' id='%s'><input type='text' maxlength='2' name='input_%d[]' id='%s.1' value='%s' {$tabindex} %s/><label for='%s.1'>" . __("MM", "gravityforms") . "</label></div>", $field_id, $id, $field_id, $date_info["month"], $disabled_text, $field_id); $tabindex = self::get_tabindex(); $field_str .= sprintf("<div class='gfield_date_day ginput_container' id='%s'><input type='text' maxlength='2' name='input_%d[]' id='%s.2' value='%s' {$tabindex} %s/><label for='%s.2'>" . __("DD", "gravityforms") . "</label></div>", $field_id, $id, $field_id, $date_info["day"], $disabled_text, $field_id); } else { $tabindex = self::get_tabindex(); $field_str = sprintf("<div class='clear-multi'><div class='gfield_date_day ginput_container' id='%s'><input type='text' maxlength='2' name='input_%d[]' id='%s.2' value='%s' {$tabindex} %s/><label for='%s.2'>" . __("DD", "gravityforms") . "</label></div>", $field_id, $id, $field_id, $date_info["day"], $disabled_text, $field_id); $tabindex = self::get_tabindex(); $field_str .= sprintf("<div class='gfield_date_month ginput_container' id='%s'><input type='text' maxlength='2' name='input_%d[]' id='%s.1' value='%s' {$tabindex} %s/><label for='%s.1'>" . __("MM", "gravityforms") . "</label></div>", $field_id, $id, $field_id, $date_info["month"], $disabled_text, $field_id); } $tabindex = self::get_tabindex(); $field_str .= sprintf("<div class='gfield_date_year ginput_container' id='%s'><input type='text' maxlength='4' name='input_%d[]' id='%s.3' value='%s' {$tabindex} %s/><label for='%s.3'>" . __("YYYY", "gravityforms") . "</label></div></div>", $field_id, $id, $field_id, $date_info["year"], $disabled_text, $field_id); return $field_str; } else { $value = GFCommon::date_display($value, $format); $icon_class = $field["calendarIconType"] == "none" ? "datepicker_no_icon" : "datepicker_with_icon"; $icon_url = empty($field["calendarIconUrl"]) ? GFCommon::get_base_url() . "/images/calendar.png" : $field["calendarIconUrl"]; $tabindex = self::get_tabindex(); return sprintf("<div class='ginput_container'><input name='input_%d' id='%s' type='text' value='%s' class='datepicker %s %s %s' {$tabindex} %s/> </div><input type='hidden' id='gforms_calendar_icon_{$field_id}' class='gform_hidden' value='{$icon_url}'/>", $id, $field_id, esc_attr($value), esc_attr($class), $format, $icon_class, $disabled_text); } } case "time": if (!empty($post_link)) { return $post_link; } if (!is_array($value) && !empty($value)) { preg_match('/^(\\d*):(\\d*) (.*)$/', $value, $matches); $hour = esc_attr($matches[1]); $minute = esc_attr($matches[2]); $am_selected = $matches[3] == "am" ? "selected='selected'" : ""; $pm_selected = $matches[3] == "pm" ? "selected='selected'" : ""; } else { $hour = esc_attr($value[0]); $minute = esc_attr($value[1]); $am_selected = $value[2] == "am" ? "selected='selected'" : ""; $pm_selected = $value[2] == "pm" ? "selected='selected'" : ""; } $hour_tabindex = self::get_tabindex(); $minute_tabindex = self::get_tabindex(); $ampm_tabindex = self::get_tabindex(); return sprintf("<div class='clear-multi'><div class='gfield_time_hour ginput_container' id='%s'><input type='text' maxlength='2' name='input_%d[]' id='%s.1' value='%s' {$hour_tabindex} %s/> : <label for='%s.1'>" . __("HH", "gravityforms") . "</label></div><div class='gfield_time_minute ginput_container'><input type='text' maxlength='2' name='input_%d[]' id='%s.2' value='%s' {$minute_tabindex} %s/><label for='%s.2'>" . __("MM", "gravityforms") . "</label></div><div class='gfield_time_ampm ginput_container'><select name='input_%d[]' id='%s.3' {$ampm_tabindex} %s><option value='am' %s>" . __("AM", "gravityforms") . "</option><option value='pm' %s>" . __("PM", "gravityforms") . "</option></select></div></div>", $field_id, $id, $field_id, $hour, $disabled_text, $field_id, $id, $field_id, $minute, $disabled_text, $field_id, $id, $field_id, $disabled_text, $am_selected, $pm_selected); case "fileupload": $tabindex = self::get_tabindex(); $upload = sprintf("<input name='input_%d' id='%s' type='file' value='%s' size='20' class='%s' {$tabindex} %s/>", $id, $field_id, esc_attr($value), esc_attr($class), $disabled_text); if (IS_ADMIN && !empty($value)) { $value = esc_attr($value); $preview = sprintf("<div id='preview_%d'><a href='%s' target='_blank' alt='%s' title='%s'>%s</a><a href='%s' target='_blank' alt='" . __("Download file", "gravityforms") . "' title='" . __("Download file", "gravityforms") . "'><img src='%s' style='margin-left:10px;'/></a><a href='javascript:void(0);' alt='" . __("Delete file", "gravityforms") . "' title='" . __("Delete file", "gravityforms") . "' onclick='DeleteFile(%d,%d);' ><img src='%s' style='margin-left:10px;'/></a></div>", $id, $value, $value, $value, GFCommon::truncate_url($value), $value, GFCommon::get_base_url() . "/images/download.png", $lead_id, $id, GFCommon::get_base_url() . "/images/delete.png"); return $preview . "<div id='upload_{$id}' style='display:none;'>{$upload}</div>"; } else { $file_info = RGFormsModel::get_temp_filename($form_id, "input_{$id}"); if ($file_info && !$field["failed_validation"]) { $preview = "<span class='ginput_preview'><strong>{$file_info["uploaded_filename"]}</strong> | <a href='javascript:;' onclick='gformDeleteUploadedFile({$form_id}, {$id});'>" . __("delete", "gravityforms") . "</a></span>"; return "<div class='ginput_container'>" . str_replace(" class='", " class='gform_hidden ", $upload) . " {$preview}</div>"; } else { return "<div class='ginput_container'>{$upload}</div>"; } } case "captcha": switch ($field["captchaType"]) { case "simple_captcha": $size = empty($field["simpleCaptchaSize"]) ? "medium" : $field["simpleCaptchaSize"]; $captcha = self::get_captcha($field); $tagindex = self::get_tabindex(); $dimensions = IS_ADMIN ? "" : "width='{$captcha["width"]}' height='{$captcha["height"]}'"; return "<div class='gfield_captcha_container'><img class='gfield_captcha' src='{$captcha["url"]}' alt='' {$dimensions} /><div class='gfield_captcha_input_container simple_captcha_{$size}'><input type='text' name='input_{$id}' id='input_{$field_id}' /><input type='hidden' name='input_captcha_prefix_{$id}' value='{$captcha["prefix"]}' /></div></div>"; break; case "math": $size = empty($field["simpleCaptchaSize"]) ? "medium" : $field["simpleCaptchaSize"]; $captcha_1 = self::get_math_captcha($field, 1); $captcha_2 = self::get_math_captcha($field, 2); $captcha_3 = self::get_math_captcha($field, 3); $tagindex = self::get_tabindex(); $dimensions = IS_ADMIN ? "" : "width='{$captcha_1["width"]}' height='{$captcha_1["height"]}'"; return "<div class='gfield_captcha_container'><img class='gfield_captcha' src='{$captcha_1["url"]}' alt='' {$dimensions} /><img class='gfield_captcha' src='{$captcha_2["url"]}' alt='' {$dimensions} /><img class='gfield_captcha' src='{$captcha_3["url"]}' alt='' {$dimensions} /><div class='gfield_captcha_input_container math_{$size}'><input type='text' name='input_{$id}' id='input_{$field_id}' /><input type='hidden' name='input_captcha_prefix_{$id}' value='{$captcha_1["prefix"]},{$captcha_2["prefix"]},{$captcha_3["prefix"]}' /></div></div>"; break; default: if (!function_exists("recaptcha_get_html")) { require_once GFCommon::get_base_path() . '/recaptchalib.php'; } $theme = empty($field["captchaTheme"]) ? "red" : esc_attr($field["captchaTheme"]); $publickey = get_option("rg_gforms_captcha_public_key"); $privatekey = get_option("rg_gforms_captcha_private_key"); if (IS_ADMIN) { if (empty($publickey) || empty($privatekey)) { return "<div class='captcha_message'>" . __("To use the reCaptcha field you must first do the following:", "gravityforms") . "</div><div class='captcha_message'>1 - <a href='https://admin.recaptcha.net/recaptcha/createsite/?app=php' target='_blank'>" . __(sprintf("Sign up%s for a free reCAPTCHA account", "</a>"), "gravityforms") . "</div><div class='captcha_message'>2 - " . __(sprintf("Enter your reCAPTCHA keys in the %ssettings page%s", "<a href='?page=gf_settings'>", "</a>"), "gravityforms") . "</div>"; } else { return "<div class='ginput_container'><img class='gfield_captcha' src='" . GFCommon::get_base_url() . "/images/captcha_{$theme}.jpg' alt='reCAPTCHA' title='reCAPTCHA'/></div>"; } } else { $language = empty($field["captchaLanguage"]) ? "en" : esc_attr($field["captchaLanguage"]); $options = "<script type='text/javascript'>var RecaptchaOptions = {theme : '{$theme}', lang : '{$language}'}; if(parseInt('" . self::$tab_index . "') > 0) {RecaptchaOptions.tabindex = " . self::$tab_index++ . ";}</script>"; $is_ssl = !empty($_SERVER['HTTPS']); return $options . "<div class='ginput_container' id='{$field_id}'>" . recaptcha_get_html($publickey, null, $is_ssl) . "</div>"; } } break; } }
public function get_field_input($form, $value = '', $entry = null) { $is_entry_detail = $this->is_entry_detail(); $is_form_editor = $this->is_form_editor(); $form_id = $form['id']; $id = intval($this->id); $field_id = $is_entry_detail || $is_form_editor || $form_id == 0 ? "input_{$id}" : 'input_' . $form_id . "_{$id}"; $size = $this->size; $disabled_text = $is_form_editor ? "disabled='disabled'" : ''; $class_suffix = $is_entry_detail ? '_admin' : ''; $class = $size . $class_suffix; $instruction = ''; $read_only = ''; if (!$is_entry_detail && !$is_form_editor) { if ($this->has_calculation()) { // calculation-enabled fields should be read only $read_only = 'readonly="readonly"'; } else { $message = $this->get_range_message(); $validation_class = $this->failed_validation ? 'validation_message' : ''; if (!$this->failed_validation && !empty($message) && empty($this->errorMessage)) { $instruction = "<div class='instruction {$validation_class}'>" . $message . '</div>'; } } } elseif (RG_CURRENT_VIEW == 'entry') { $value = GFCommon::format_number($value, $this->numberFormat, rgar($entry, 'currency')); } $is_html5 = RGFormsModel::is_html5_enabled(); $html_input_type = $is_html5 && !$this->has_calculation() && ($this->numberFormat != 'currency' && $this->numberFormat != 'decimal_comma') ? 'number' : 'text'; // chrome does not allow number fields to have commas, calculations and currency values display numbers with commas $step_attr = $is_html5 ? "step='any'" : ''; $min = $this->rangeMin; $max = $this->rangeMax; $min_attr = $is_html5 && is_numeric($min) ? "min='{$min}'" : ''; $max_attr = $is_html5 && is_numeric($max) ? "max='{$max}'" : ''; $logic_event = $this->get_conditional_logic_event('keyup'); $include_thousands_sep = apply_filters('gform_include_thousands_sep_pre_format_number', $html_input_type == 'text', $this); $value = GFCommon::format_number($value, $this->numberFormat, rgar($entry, 'currency'), $include_thousands_sep); $placeholder_attribute = $this->get_field_placeholder_attribute(); $tabindex = $this->get_tabindex(); $input = sprintf("<div class='ginput_container'><input name='input_%d' id='%s' type='{$html_input_type}' {$step_attr} {$min_attr} {$max_attr} value='%s' class='%s' {$tabindex} {$logic_event} {$read_only} %s %s/>%s</div>", $id, $field_id, esc_attr($value), esc_attr($class), $disabled_text, $placeholder_attribute, $instruction); return $input; }
/** * @param GF_Field $field * @param string $value * @param int $lead_id * @param int $form_id * @param null $form * * @return mixed|string|void */ public static function get_field_input($field, $value = '', $lead_id = 0, $form_id = 0, $form = null) { if (!$field instanceof GF_Field) { $field = GF_Fields::create($field); } $is_form_editor = GFCommon::is_form_editor(); $is_entry_detail = GFCommon::is_entry_detail(); $is_admin = $is_form_editor || $is_entry_detail; $id = intval($field->id); $field_id = $is_admin || $form_id == 0 ? "input_{$id}" : 'input_' . $form_id . "_{$id}"; $form_id = $is_admin && empty($form_id) ? rgget('id') : $form_id; if (RG_CURRENT_VIEW == 'entry') { $lead = RGFormsModel::get_lead($lead_id); $post_id = $lead['post_id']; $post_link = ''; if (is_numeric($post_id) && self::is_post_field($field)) { $post_link = "<div>You can <a href='post.php?action=edit&post={$post_id}'>edit this post</a> from the post page.</div>"; } } $field_input = apply_filters('gform_field_input', '', $field, $value, $lead_id, $form_id); if ($field_input) { return $field_input; } //product fields are not editable if (RG_CURRENT_VIEW == 'entry' && self::is_product_field($field->type)) { return "<div class='ginput_container'>" . esc_html__('Product fields are not editable', 'gravityforms') . '</div>'; } else { if (RG_CURRENT_VIEW == 'entry' && $field->type == 'donation') { return "<div class='ginput_container'>" . esc_html__('Donations are not editable', 'gravityforms') . '</div>'; } } // add categories as choices for Post Category field if ($field->type == 'post_category') { $field = self::add_categories_as_choices($field, $value); } $type = RGFormsModel::get_input_type($field); switch ($type) { case 'honeypot': $autocomplete = RGFormsModel::is_html5_enabled() ? "autocomplete='off'" : ''; return "<div class='ginput_container'><input name='input_{$id}' id='{$field_id}' type='text' value='' {$autocomplete}/></div>"; break; case 'adminonly_hidden': if (!is_array($field->inputs)) { if (is_array($value)) { $value = json_encode($value); } return sprintf("<input name='input_%d' id='%s' class='gform_hidden' type='hidden' value='%s'/>", $id, esc_attr($field_id), esc_attr($value)); } $fields = ''; foreach ($field->inputs as $input) { $fields .= sprintf("<input name='input_%s' class='gform_hidden' type='hidden' value='%s'/>", $input['id'], esc_attr(rgar($value, strval($input['id'])))); } return $fields; break; default: if (!empty($post_link)) { return $post_link; } if (!isset($lead)) { $lead = null; } return $field->get_field_input($form, $value, $lead); break; } }
/** * Checks whether the Gravity Forms html5 output is enabled. * * @return bool */ public function is_gravityforms_html5_enabled() { return class_exists("RGFormsModel") && RGFormsModel::is_html5_enabled(); }
public static function get_field_input($field, $value="", $lead_id=0, $form_id=0){ $id = $field["id"]; $field_id = IS_ADMIN || $form_id == 0 ? "input_$id" : "input_" . $form_id . "_$id"; $form_id = IS_ADMIN && empty($form_id) ? rgget("id") : $form_id; $size = rgar($field, "size"); $disabled_text = (IS_ADMIN && RG_CURRENT_VIEW != "entry") ? "disabled='disabled'" : ""; $class_suffix = RG_CURRENT_VIEW == "entry" ? "_admin" : ""; $class = $size . $class_suffix; $currency = ""; if(RG_CURRENT_VIEW == "entry"){ $lead = RGFormsModel::get_lead($lead_id); $post_id = $lead["post_id"]; $post_link = ""; if(is_numeric($post_id) && self::is_post_field($field)){ $post_link = "You can <a href='post.php?action=edit&post=$post_id'>edit this post</a> from the post page."; } $currency = $lead["currency"]; } $field_input = apply_filters("gform_field_input", "", $field, $value, $lead_id, $form_id); if($field_input) return $field_input; //product fields are not editable if(RG_CURRENT_VIEW == "entry" && self::is_product_field($field["type"])) return "<div class='ginput_container'>" . __("Product fields are not editable", "gravityforms") . "</div>"; else if(RG_CURRENT_VIEW == "entry" && $field["type"] == "donation") return "<div class='ginput_container'>" . __("Donations are not editable", "gravityforms") . "</div>"; // add categories as choices for Post Category field if($field['type'] == 'post_category'){ $field = self::add_categories_as_choices($field, $value); } $max_length = ""; $html5_attributes = ""; switch(RGFormsModel::get_input_type($field)){ case "total" : if(RG_CURRENT_VIEW == "entry") return "<div class='ginput_container'><input type='text' name='input_{$id}' value='{$value}' /></div>"; else return "<div class='ginput_container'><span class='ginput_total ginput_total_{$form_id}'>" . self::to_money("0") . "</span><input type='hidden' name='input_{$id}' id='{$field_id}' class='gform_hidden'/></div>"; break; case "calculation" : case "singleproduct" : $product_name = !is_array($value) || empty($value[$field["id"] . ".1"]) ? esc_attr($field["label"]) : esc_attr($value[$field["id"] . ".1"]); $price = !is_array($value) || empty($value[$field["id"] . ".2"]) ? rgget("basePrice", $field) : esc_attr($value[$field["id"] . ".2"]); $quantity = is_array($value) ? esc_attr($value[$field["id"] . ".3"]) : ""; if(empty($price)) $price = 0; $form = RGFormsModel::get_form_meta($form_id); $has_quantity = sizeof(GFCommon::get_product_fields_by_type($form, array("quantity"), $field["id"])) > 0; if($has_quantity) $field["disableQuantity"] = true; $quantity_field = ""; $qty_input_type = GFFormsModel::is_html5_enabled() ? "number" : "text"; if(IS_ADMIN){ $style = rgget("disableQuantity", $field) ? "style='display:none;'" : ""; $quantity_field = " <span class='ginput_quantity_label' {$style}>" . apply_filters("gform_product_quantity_{$form_id}",apply_filters("gform_product_quantity",__("Quantity:", "gravityforms"), $form_id), $form_id) . "</span> <input type='{$qty_input_type}' name='input_{$id}.3' value='{$quantity}' id='ginput_quantity_{$form_id}_{$field["id"]}' class='ginput_quantity' size='10' />"; } else if(!rgget("disableQuantity", $field)){ $tabindex = self::get_tabindex(); $quantity_field .= " <span class='ginput_quantity_label'>" . apply_filters("gform_product_quantity_{$form_id}",apply_filters("gform_product_quantity",__("Quantity:", "gravityforms"), $form_id), $form_id) . "</span> <input type='{$qty_input_type}' name='input_{$id}.3' value='{$quantity}' id='ginput_quantity_{$form_id}_{$field["id"]}' class='ginput_quantity' size='10' {$tabindex}/>"; } else{ if(!is_numeric($quantity)) $quantity = 1; if(!$has_quantity){ $quantity_field .= "<input type='hidden' name='input_{$id}.3' value='{$quantity}' class='ginput_quantity_{$form_id}_{$field["id"]} gform_hidden' />"; } } return "<div class='ginput_container'><input type='hidden' name='input_{$id}.1' value='{$product_name}' class='gform_hidden' /><span class='ginput_product_price_label'>" . apply_filters("gform_product_price_{$form_id}", apply_filters("gform_product_price",__("Price", "gravityforms"), $form_id), $form_id) . ":</span> <span class='ginput_product_price' id='{$field_id}'>" . esc_html(GFCommon::to_money($price, $currency)) ."</span><input type='hidden' name='input_{$id}.2' id='ginput_base_price_{$form_id}_{$field["id"]}' class='gform_hidden' value='" . esc_attr($price) . "'/>{$quantity_field}</div>"; break; case "hiddenproduct" : $form = RGFormsModel::get_form_meta($form_id); $has_quantity_field = sizeof(GFCommon::get_product_fields_by_type($form, array("quantity"), $field["id"])) > 0; $product_name = !is_array($value) || empty($value[$field["id"] . ".1"]) ? esc_attr($field["label"]) : esc_attr($value[$field["id"] . ".1"]); $quantity = is_array($value) ? esc_attr($value[$field["id"] . ".3"]) : "1"; $price = !is_array($value) || empty($value[$field["id"] . ".2"]) ? rgget("basePrice", $field) : esc_attr($value[$field["id"] . ".2"]); if(empty($price)) $price = 0; $quantity_field = $has_quantity_field ? "" : "<input type='hidden' name='input_{$id}.3' value='" . esc_attr($quantity) . "' id='ginput_quantity_{$form_id}_{$field["id"]}' class='gform_hidden' />"; $product_name_field = "<input type='hidden' name='input_{$id}.1' value='{$product_name}' class='gform_hidden' />"; $field_type = IS_ADMIN ? "text" : "hidden"; return $quantity_field . $product_name_field . sprintf("<input name='input_%d.2' id='ginput_base_price_{$form_id}_{$field["id"]}' type='{$field_type}' value='%s' class='gform_hidden ginput_amount' %s/>", $id, esc_attr($price), $disabled_text); break; case "singleshipping" : $price = !empty($value) ? $value : rgget("basePrice", $field); if(empty($price)) $price = 0; return "<div class='ginput_container'><input type='hidden' name='input_{$id}' value='{$price}' class='gform_hidden'/><span class='ginput_shipping_price' id='{$field_id}'>" . GFCommon::to_money($price, $currency) ."</span></div>"; break; case "website": $is_html5 = RGFormsModel::is_html5_enabled(); $value = empty($value) && !$is_html5 ? "http://" : $value; $html_input_type = $is_html5 ? "url" : "text"; $html5_attributes = $is_html5 ? "placeholder='http://'" : ""; case "text": if(empty($html_input_type)) $html_input_type = "text"; if(rgget("enablePasswordInput", $field) && RG_CURRENT_VIEW != "entry") $html_input_type = "password"; if(is_numeric(rgget("maxLength", $field))) $max_length = "maxlength='{$field["maxLength"]}'"; if(!empty($post_link)) return $post_link; $logic_event = self::get_logic_event($field, "keyup"); $tabindex = self::get_tabindex(); return sprintf("<div class='ginput_container'><input name='input_%d' id='%s' type='%s' value='%s' class='%s' $max_length $tabindex $logic_event $html5_attributes %s/></div>", $id, $field_id, $html_input_type, esc_attr($value), esc_attr($class), $disabled_text); break; case "email": if(!empty($post_link)) return $post_link; $html_input_type = RGFormsModel::is_html5_enabled() ? "email" : "text"; if(IS_ADMIN && RG_CURRENT_VIEW != "entry"){ $single_style = rgget("emailConfirmEnabled", $field) ? "style='display:none;'" : ""; $confirm_style = rgget("emailConfirmEnabled", $field) ? "" : "style='display:none;'"; return "<div class='ginput_container ginput_single_email' {$single_style}><input name='input_{$id}' type='{$html_input_type}' class='" . esc_attr($class) . "' disabled='disabled' /><div class='gf_clear gf_clear_complex'></div></div><div class='ginput_complex ginput_container ginput_confirm_email' {$confirm_style} id='{$field_id}_container'><span id='{$field_id}_1_container' class='ginput_left'><input type='text' name='input_{$id}' id='{$field_id}' disabled='disabled' /><label for='{$field_id}'>" . apply_filters("gform_email_{$form_id}", apply_filters("gform_email",__("Enter Email", "gravityforms"), $form_id), $form_id) . "</label></span><span id='{$field_id}_2_container' class='ginput_right'><input type='text' name='input_{$id}_2' id='{$field_id}_2' disabled='disabled' /><label for='{$field_id}_2'>" . apply_filters("gform_email_confirm_{$form_id}", apply_filters("gform_email_confirm",__("Confirm Email", "gravityforms"), $form_id), $form_id) . "</label></span><div class='gf_clear gf_clear_complex'></div></div>"; } else{ $logic_event = self::get_logic_event($field, "keyup"); if(rgget("emailConfirmEnabled", $field) && RG_CURRENT_VIEW != "entry"){ $first_tabindex = self::get_tabindex(); $last_tabindex = self::get_tabindex(); return "<div class='ginput_complex ginput_container' id='{$field_id}_container'><span id='{$field_id}_1_container' class='ginput_left'><input type='{$html_input_type}' name='input_{$id}' id='{$field_id}' value='" . esc_attr($value) . "' {$first_tabindex} {$logic_event} {$disabled_text}/><label for='{$field_id}'>" . apply_filters("gform_email_{$form_id}", apply_filters("gform_email",__("Enter Email", "gravityforms"), $form_id), $form_id) . "</label></span><span id='{$field_id}_2_container' class='ginput_right'><input type='{$html_input_type}' name='input_{$id}_2' id='{$field_id}_2' value='" . esc_attr(rgpost("input_" . $id ."_2")) . "' {$last_tabindex} {$disabled_text}/><label for='{$field_id}_2'>" . apply_filters("gform_email_confirm_{$form_id}", apply_filters("gform_email_confirm",__("Confirm Email", "gravityforms"), $form_id), $form_id) . "</label></span><div class='gf_clear gf_clear_complex'></div></div>"; } else{ $tabindex = self::get_tabindex(); return sprintf("<div class='ginput_container'><input name='input_%d' id='%s' type='%s' value='%s' class='%s' {$max_length} {$tabindex} {$html5_attributes} {$logic_event} %s/></div>", $id, $field_id, $html_input_type, esc_attr($value), esc_attr($class), $disabled_text); } } break; case "honeypot": $autocomplete = RGFormsModel::is_html5_enabled() ? "autocomplete='off'" : ""; return "<div class='ginput_container'><input name='input_{$id}' id='{$field_id}' type='text' value='' {$autocomplete}/></div>"; break; case "hidden" : if(!empty($post_link)) return $post_link; $field_type = IS_ADMIN ? "text" : "hidden"; $class_attribute = IS_ADMIN ? "" : "class='gform_hidden'"; return sprintf("<input name='input_%d' id='%s' type='$field_type' $class_attribute value='%s' %s/>", $id, $field_id, esc_attr($value), $disabled_text); break; case "html" : $content = IS_ADMIN ? "<div class='gf-html-container'><span class='gf_blockheader'><i class='fa fa-code fa-lg'></i> " . __("HTML Content", "gravityforms") . "</span><span>" . __("This is a content placeholder. HTML content is not displayed in the form admin. Preview this form to view the content.", "gravityforms") . "</span></div>" : $field["content"]; $content = GFCommon::replace_variables_prepopulate($content); //adding support for merge tags $content = do_shortcode($content); //adding support for shortcodes return $content; break; case "adminonly_hidden" : if(!is_array($field["inputs"])){ if(is_array($value)) $value = json_encode($value); return sprintf("<input name='input_%d' id='%s' class='gform_hidden' type='hidden' value='%s'/>", $id, $field_id, esc_attr($value)); } $fields = ""; foreach($field["inputs"] as $input){ $fields .= sprintf("<input name='input_%s' class='gform_hidden' type='hidden' value='%s'/>", $input["id"], esc_attr(rgar($value, strval($input["id"])))); } return $fields; break; case "number" : if(!empty($post_link)) return $post_link; $instruction = ""; $read_only = ""; if(!IS_ADMIN){ if(GFCommon::has_field_calculation($field)) { // calculation-enabled fields should be read only $read_only = 'readonly="readonly"'; } else { $message = self::get_range_message($field); $validation_class = $field["failed_validation"] ? "validation_message" : ""; if(!$field["failed_validation"] && !empty($message) && empty($field["errorMessage"])) $instruction = "<div class='instruction $validation_class'>" . $message . "</div>"; } } else if( RG_CURRENT_VIEW == "entry" ){ $value = GFCommon::format_number($value, rgar($field, "numberFormat")); } $is_html5 = RGFormsModel::is_html5_enabled(); $html_input_type = $is_html5 && !GFCommon::has_field_calculation($field) && ($field["numberFormat"] != "currency" && $field["numberFormat"] != "decimal_comma" ) ? "number" : "text"; // chrome does not allow number fields to have commas, calculations and currency values display numbers with commas $step_attr = $is_html5 ? "step='any'" : ""; $logic_event = self::get_logic_event($field, "keyup"); $value = GFCommon::format_number($value, $field["numberFormat"]); $tabindex = self::get_tabindex(); return sprintf("<div class='ginput_container'><input name='input_%d' id='%s' type='{$html_input_type}' {$step_attr} value='%s' class='%s' {$tabindex} {$logic_event} {$read_only} %s/>%s</div>", $id, $field_id, esc_attr($value), esc_attr($class), $disabled_text, $instruction); case "donation" : $tabindex = self::get_tabindex(); return sprintf("<div class='ginput_container'><input name='input_%d' id='%s' type='text' value='%s' class='%s ginput_donation_amount' $tabindex %s/></div>", $id, $field_id, esc_attr($value), esc_attr($class), $disabled_text); case "price" : $logic_event = self::get_logic_event($field, "keyup"); $tabindex = self::get_tabindex(); return sprintf("<div class='ginput_container'><input name='input_%d' id='%s' type='text' value='%s' class='%s ginput_amount' {$tabindex} {$logic_event} %s/></div>", $id, $field_id, esc_attr($value), esc_attr($class), $disabled_text); case "phone" : if(!empty($post_link)) return $post_link; $instruction = $field["phoneFormat"] == "standard" ? __("Phone format:", "gravityforms") . " (###)###-####" : ""; $instruction_div = rgget("failed_validation", $field) && !empty($instruction) ? "<div class='instruction validation_message'>$instruction</div>" : ""; $html_input_type = RGFormsModel::is_html5_enabled() ? "tel" : "text"; $logic_event = self::get_logic_event($field, "keyup"); $tabindex = self::get_tabindex(); return sprintf("<div class='ginput_container'><input name='input_%d' id='%s' type='{$html_input_type}' value='%s' class='%s' {$tabindex} {$logic_event} %s/>{$instruction_div}</div>", $id, $field_id, esc_attr($value), esc_attr($class), $disabled_text); case "textarea": $max_chars = ""; $logic_event = self::get_logic_event($field, "keyup"); $tabindex = self::get_tabindex(); return sprintf("<div class='ginput_container'><textarea name='input_%d' id='%s' class='textarea %s' {$tabindex} {$logic_event} %s rows='10' cols='50'>%s</textarea></div>{$max_chars}", $id, $field_id, esc_attr($class), $disabled_text, esc_html($value)); case "post_title": case "post_tags": case "post_custom_field": $tabindex = self::get_tabindex(); $logic_event = self::get_logic_event($field, "keyup"); return !empty($post_link) ? $post_link : sprintf("<div class='ginput_container'><input name='input_%d' id='%s' type='text' value='%s' class='%s' {$tabindex} {$logic_event} %s/></div>", $id, $field_id, esc_attr($value), esc_attr($class), $disabled_text); break; case "post_content": case "post_excerpt": $max_chars = ""; $logic_event = self::get_logic_event($field, "keyup"); $tabindex = self::get_tabindex(); return !empty($post_link) ? $post_link : sprintf("<div class='ginput_container'><textarea name='input_%d' id='%s' class='textarea %s' {$tabindex} {$logic_event} %s rows='10' cols='50'>%s</textarea></div>{$max_chars}", $id, $field_id, esc_attr($class), $disabled_text, esc_html($value)); break; case "post_category" : if(!empty($post_link)) return $post_link; if(rgget("displayAllCategories", $field) && !IS_ADMIN){ $default_category = rgget("categoryInitialItemEnabled", $field) ? "-1" : get_option('default_category'); $selected = empty($value) ? $default_category : $value; $args = array('echo' => 0, 'selected' => $selected, "class" => esc_attr($class) . " gfield_select", 'hide_empty' => 0, 'name' => "input_$id", 'orderby' => 'name', 'hierarchical' => true ); if(self::$tab_index > 0) $args["tab_index"] = self::$tab_index++; if(rgget("categoryInitialItemEnabled", $field)){ $args["show_option_none"] = empty($field["categoryInitialItem"]) ? " " : $field["categoryInitialItem"]; } $args = apply_filters("gform_post_category_args_{$field["id"]}", apply_filters("gform_post_category_args", $args, $field), $field); return "<div class='ginput_container'>" . wp_dropdown_categories($args) . "</div>"; } else{ $tabindex = self::get_tabindex(); if(is_array(rgar($field, "choices"))) usort($field["choices"], create_function('$a,$b', 'return strcmp($a["text"], $b["text"]);')); $choices = self::get_select_choices($field, $value); //Adding first option if(rgget("categoryInitialItemEnabled", $field)){ $selected = empty($value) ? "selected='selected'" : ""; $choices = "<option value='-1' {$selected}>{$field["categoryInitialItem"]}</option>" . $choices; } return sprintf("<div class='ginput_container'><select name='input_%d' id='%s' class='%s gfield_select' {$tabindex} %s>%s</select></div>", $id, $field_id, esc_attr($class), $disabled_text, $choices); } break; case "post_image" : if(!empty($post_link)) return $post_link; $title = esc_attr(rgget($field["id"] . ".1", $value)); $caption = esc_attr(rgget($field["id"] . ".4", $value)); $description = esc_attr(rgget($field["id"] . ".7", $value)); //hidding meta fields for admin $hidden_style = "style='display:none;'"; $title_style = !rgget("displayTitle", $field) && IS_ADMIN ? $hidden_style : ""; $caption_style = !rgget("displayCaption", $field) && IS_ADMIN ? $hidden_style : ""; $description_style = !rgget("displayDescription", $field) && IS_ADMIN ? $hidden_style : ""; $file_label_style = IS_ADMIN && !(rgget("displayTitle", $field) || rgget("displayCaption", $field) || rgget("displayDescription", $field)) ? $hidden_style : ""; $hidden_class = $preview = ""; $file_info = RGFormsModel::get_temp_filename($form_id, "input_{$id}"); if($file_info){ $hidden_class = " gform_hidden"; $file_label_style = $hidden_style; $preview = "<span class='ginput_preview'><strong>" . esc_html($file_info["uploaded_filename"]) . "</strong> | <a href='javascript:;' onclick='gformDeleteUploadedFile({$form_id}, {$id});'>" . __("delete", "gravityforms") . "</a></span>"; } //in admin, render all meta fields to allow for immediate feedback, but hide the ones not selected $file_label = (IS_ADMIN || rgget("displayTitle", $field) || rgget("displayCaption", $field) || rgget("displayDescription", $field)) ? "<label for='$field_id' class='ginput_post_image_file' $file_label_style>" . apply_filters("gform_postimage_file_{$form_id}",apply_filters("gform_postimage_file",__("File", "gravityforms"), $form_id), $form_id) . "</label>" : ""; $tabindex = self::get_tabindex(); $upload = sprintf("<span class='ginput_full$class_suffix'>{$preview}<input name='input_%d' id='%s' type='file' value='%s' class='%s' $tabindex %s/>$file_label</span>", $id, $field_id, esc_attr($value), esc_attr($class . $hidden_class), $disabled_text); $tabindex = self::get_tabindex(); $title_field = rgget("displayTitle", $field) || IS_ADMIN ? sprintf("<span class='ginput_full$class_suffix ginput_post_image_title' $title_style><input type='text' name='input_%d.1' id='%s_1' value='%s' $tabindex %s/><label for='%s_1'>" . apply_filters("gform_postimage_title_{$form_id}",apply_filters("gform_postimage_title",__("Title", "gravityforms"), $form_id), $form_id) . "</label></span>", $id, $field_id, $title, $disabled_text, $field_id) : ""; $tabindex = self::get_tabindex(); $caption_field = rgget("displayCaption", $field) || IS_ADMIN ? sprintf("<span class='ginput_full$class_suffix ginput_post_image_caption' $caption_style><input type='text' name='input_%d.4' id='%s_4' value='%s' $tabindex %s/><label for='%s_4'>" . apply_filters("gform_postimage_caption_{$form_id}",apply_filters("gform_postimage_caption",__("Caption", "gravityforms"), $form_id), $form_id) . "</label></span>", $id, $field_id, $caption, $disabled_text, $field_id) : ""; $tabindex = self::get_tabindex(); $description_field = rgget("displayDescription", $field) || IS_ADMIN? sprintf("<span class='ginput_full$class_suffix ginput_post_image_description' $description_style><input type='text' name='input_%d.7' id='%s_7' value='%s' $tabindex %s/><label for='%s_7'>" . apply_filters("gform_postimage_description_{$form_id}",apply_filters("gform_postimage_description",__("Description", "gravityforms"), $form_id), $form_id) . "</label></span>", $id, $field_id, $description, $disabled_text, $field_id) : ""; return "<div class='ginput_complex$class_suffix ginput_container'>" . $upload . $title_field . $caption_field . $description_field . "</div>"; break; case "multiselect" : if(!empty($post_link)) return $post_link; $placeholder = rgar($field, "enableEnhancedUI") ? "data-placeholder='" . esc_attr(apply_filters("gform_multiselect_placeholder_{$form_id}", apply_filters("gform_multiselect_placeholder", __("Click to select...", "gravityforms"), $form_id), $form_id)) . "'" : ""; $logic_event = self::get_logic_event($field, "keyup"); $css_class = trim(esc_attr($class) . " gfield_select"); $size = rgar($field, "multiSelectSize"); if(empty($size)) $size = 7; $tabindex = self::get_tabindex(); return sprintf("<div class='ginput_container'><select multiple='multiple' {$placeholder} size='{$size}' name='input_%d[]' id='%s' {$logic_event} class='%s' $tabindex %s>%s</select></div>", $id, $field_id, $css_class, $disabled_text, self::get_select_choices($field, $value)); break; case "select" : if(!empty($post_link)) return $post_link; $logic_event = self::get_logic_event($field, "change"); $css_class = trim(esc_attr($class) . " gfield_select"); $tabindex = self::get_tabindex(); return sprintf("<div class='ginput_container'><select name='input_%d' id='%s' $logic_event class='%s' $tabindex %s>%s</select></div>", $id, $field_id, $css_class, $disabled_text, self::get_select_choices($field, $value)); case "checkbox" : if(!empty($post_link)) return $post_link; return sprintf("<div class='ginput_container'><ul class='gfield_checkbox' id='%s'>%s</ul></div>", $field_id, self::get_checkbox_choices($field, $value, $disabled_text)); case "radio" : if(!empty($post_link)) return $post_link; return sprintf("<div class='ginput_container'><ul class='gfield_radio' id='%s'>%s</ul></div>", $field_id, self::get_radio_choices($field, $value, $disabled_text)); case "password" : $first_tabindex = self::get_tabindex(); $last_tabindex = self::get_tabindex(); $strength_style = !rgar($field,"passwordStrengthEnabled") ? "style='display:none;'" : ""; $strength = rgar($field,"passwordStrengthEnabled") || IS_ADMIN ? "<div id='{$field_id}_strength_indicator' class='gfield_password_strength' {$strength_style}>" . __("Strength indicator", "gravityforms") . "</div><input type='hidden' class='gform_hidden' id='{$field_id}_strength' name='input_{$id}_strength' />" : ""; $action = !IS_ADMIN ? "gformShowPasswordStrength(\"$field_id\");" : ""; $onchange= rgar($field,"passwordStrengthEnabled") ? "onchange='{$action}'" : ""; $onkeyup = rgar($field,"passwordStrengthEnabled") ? "onkeyup='{$action}'" : ""; $pass = RGForms::post("input_" . $id ."_2"); return sprintf("<div class='ginput_complex$class_suffix ginput_container' id='{$field_id}_container'><span id='" . $field_id . "_1_container' class='ginput_left'><input type='password' name='input_%d' id='%s' {$onkeyup} {$onchange} value='%s' $first_tabindex %s/><label for='%s'>" . apply_filters("gform_password_{$form_id}", apply_filters("gform_password",__("Enter Password", "gravityforms"), $form_id), $form_id) . "</label></span><span id='" . $field_id . "_2_container' class='ginput_right'><input type='password' name='input_%d_2' id='%s_2' {$onkeyup} {$onchange} value='%s' $last_tabindex %s/><label for='%s_2'>" . apply_filters("gform_password_confirm_{$form_id}", apply_filters("gform_password_confirm",__("Confirm Password", "gravityforms"), $form_id), $form_id) . "</label></span><div class='gf_clear gf_clear_complex'></div></div>{$strength}", $id, $field_id, esc_attr($value), $disabled_text, $field_id, $id, $field_id, esc_attr($pass), $disabled_text, $field_id); case "name" : $prefix = ""; $first = ""; $last = ""; $suffix = ""; if(is_array($value)){ $prefix = esc_attr(RGForms::get($field["id"] . ".2", $value)); $first = esc_attr(RGForms::get($field["id"] . ".3", $value)); $last = esc_attr(RGForms::get($field["id"] . ".6", $value)); $suffix = esc_attr(RGForms::get($field["id"] . ".8", $value)); } switch(rgget("nameFormat", $field)){ case "extended" : $prefix_tabindex = self::get_tabindex(); $first_tabindex = self::get_tabindex(); $last_tabindex = self::get_tabindex(); $suffix_tabindex = self::get_tabindex(); return sprintf("<div class='ginput_complex$class_suffix ginput_container' id='$field_id'><span id='" . $field_id . "_2_container' class='name_prefix'><input type='text' name='input_%d.2' id='%s_2' value='%s' $prefix_tabindex %s/><label for='%s_2'>" . apply_filters("gform_name_prefix_{$form_id}",apply_filters("gform_name_prefix",__("Prefix", "gravityforms"), $form_id), $form_id) . "</label></span><span id='" . $field_id . "_3_container' class='name_first'><input type='text' name='input_%d.3' id='%s_3' value='%s' $first_tabindex %s/><label for='%s_3'>" . apply_filters("gform_name_first_{$form_id}",apply_filters("gform_name_first",__("First", "gravityforms"), $form_id), $form_id) . "</label></span><span id='" . $field_id . "_6_container' class='name_last'><input type='text' name='input_%d.6' id='%s_6' value='%s' $last_tabindex %s/><label for='%s_6'>" . apply_filters("gform_name_last_{$form_id}", apply_filters("gform_name_last", __("Last", "gravityforms"), $form_id), $form_id) . "</label></span><span id='" . $field_id . "_8_container' class='name_suffix'><input type='text' name='input_%d.8' id='%s_8' value='%s' $suffix_tabindex %s/><label for='%s_8'>" . apply_filters("gform_name_suffix_{$form_id}", apply_filters("gform_name_suffix", __("Suffix", "gravityforms"), $form_id), $form_id) . "</label></span></div>", $id, $field_id, $prefix, $disabled_text, $field_id, $id, $field_id, $first, $disabled_text, $field_id, $id, $field_id, $last, $disabled_text, $field_id, $id, $field_id, $suffix, $disabled_text, $field_id); case "simple" : $tabindex = self::get_tabindex(); return sprintf("<div class='ginput_container'><input name='input_%d' id='%s' type='text' value='%s' class='%s' $tabindex %s/></div>", $id, $field_id, esc_attr($value), esc_attr($class), $disabled_text); default : $first_tabindex = self::get_tabindex(); $last_tabindex = self::get_tabindex(); return sprintf("<div class='ginput_complex$class_suffix ginput_container' id='$field_id'><span id='" . $field_id . "_3_container' class='ginput_left'><input type='text' name='input_%d.3' id='%s_3' value='%s' $first_tabindex %s/><label for='%s_3'>" . apply_filters("gform_name_first_{$form_id}", apply_filters("gform_name_first",__("First", "gravityforms"), $form_id), $form_id) . "</label></span><span id='" . $field_id . "_6_container' class='ginput_right'><input type='text' name='input_%d.6' id='%s_6' value='%s' $last_tabindex %s/><label for='%s_6'>" . apply_filters("gform_name_last_{$form_id}", apply_filters("gform_name_last",__("Last", "gravityforms"), $form_id), $form_id) . "</label></span><div class='gf_clear gf_clear_complex'></div></div>", $id, $field_id, $first, $disabled_text, $field_id, $id, $field_id, $last, $disabled_text, $field_id); } case "address" : $street_value =""; $street2_value =""; $city_value =""; $state_value =""; $zip_value =""; $country_value =""; if(is_array($value)){ $street_value = esc_attr(rgget($field["id"] . ".1",$value)); $street2_value = esc_attr(rgget($field["id"] . ".2",$value)); $city_value = esc_attr(rgget($field["id"] . ".3",$value)); $state_value = esc_attr(rgget($field["id"] . ".4",$value)); $zip_value = esc_attr(rgget($field["id"] . ".5",$value)); $country_value = esc_attr(rgget($field["id"] . ".6",$value)); } $address_types = self::get_address_types($form_id); $addr_type = empty($field["addressType"]) ? "international" : $field["addressType"]; $address_type = $address_types[$addr_type]; $state_label = empty($address_type["state_label"]) ? __("State", "gravityforms") : $address_type["state_label"]; $zip_label = empty($address_type["zip_label"]) ? __("Zip Code", "gravityforms") : $address_type["zip_label"]; $hide_country = !empty($address_type["country"]) || rgget("hideCountry", $field); if(empty($country_value)) $country_value = rgget("defaultCountry", $field); if(empty($state_value)) $state_value = rgget("defaultState", $field); $country_list = self::get_country_dropdown($country_value); //changing css classes based on field format to ensure proper display $address_display_format = apply_filters("gform_address_display_format", "default"); $city_location = $address_display_format == "zip_before_city" ? "right" : "left"; $zip_location = $address_display_format != "zip_before_city" && rgar($field,"hideState") ? "right" : "left"; $state_location = $address_display_format == "zip_before_city" ? "left" : "right"; $country_location = rgar($field,"hideState") ? "left" : "right"; //address field $tabindex = self::get_tabindex(); $street_address = sprintf("<span class='ginput_full$class_suffix' id='" . $field_id . "_1_container'><input type='text' name='input_%d.1' id='%s_1' value='%s' $tabindex %s/><label for='%s_1' id='" . $field_id . "_1_label'>" . apply_filters("gform_address_street_{$form_id}", apply_filters("gform_address_street",__("Street Address", "gravityforms"), $form_id), $form_id) . "</label></span>", $id, $field_id, $street_value, $disabled_text, $field_id); //address line 2 field $street_address2 = ""; $style = (IS_ADMIN && rgget("hideAddress2", $field)) ? "style='display:none;'" : ""; if(IS_ADMIN || !rgget("hideAddress2", $field)){ $tabindex = self::get_tabindex(); $street_address2 = sprintf("<span class='ginput_full$class_suffix' id='" . $field_id . "_2_container' $style><input type='text' name='input_%d.2' id='%s_2' value='%s' $tabindex %s/><label for='%s_2' id='" . $field_id . "_2_label'>" . apply_filters("gform_address_street2_{$form_id}",apply_filters("gform_address_street2",__("Address Line 2", "gravityforms"), $form_id), $form_id) . "</label></span>", $id, $field_id, $street2_value, $disabled_text, $field_id); } if($address_display_format == "zip_before_city"){ //zip field $tabindex = self::get_tabindex(); $zip = sprintf("<span class='ginput_{$zip_location}$class_suffix' id='" . $field_id . "_5_container'><input type='text' name='input_%d.5' id='%s_5' value='%s' $tabindex %s/><label for='%s_5' id='" . $field_id . "_5_label'>" . apply_filters("gform_address_zip_{$form_id}", apply_filters("gform_address_zip", $zip_label, $form_id), $form_id) . "</label></span>", $id, $field_id, $zip_value, $disabled_text, $field_id); //city field $tabindex = self::get_tabindex(); $city = sprintf("<span class='ginput_{$city_location}$class_suffix' id='" . $field_id . "_3_container'><input type='text' name='input_%d.3' id='%s_3' value='%s' $tabindex %s/><label for='%s_3' id='{$field_id}_3_label'>" . apply_filters("gform_address_city_{$form_id}", apply_filters("gform_address_city",__("City", "gravityforms"), $form_id), $form_id) . "</label></span>", $id, $field_id, $city_value, $disabled_text, $field_id); //state field $style = (IS_ADMIN && rgget("hideState", $field)) ? "style='display:none;'" : ""; if(IS_ADMIN || !rgget("hideState", $field)){ $state_field = self::get_state_field($field, $id, $field_id, $state_value, $disabled_text, $form_id); $state = sprintf("<span class='ginput_{$state_location}$class_suffix' id='" . $field_id . "_4_container' $style>$state_field<label for='%s_4' id='" . $field_id . "_4_label'>" . apply_filters("gform_address_state_{$form_id}", apply_filters("gform_address_state", $state_label, $form_id), $form_id) . "</label></span>", $field_id); } else{ $state = sprintf("<input type='hidden' class='gform_hidden' name='input_%d.4' id='%s_4' value='%s'/>", $id, $field_id, $state_value); } } else{ //city field $tabindex = self::get_tabindex(); $city = sprintf("<span class='ginput_{$city_location}$class_suffix' id='" . $field_id . "_3_container'><input type='text' name='input_%d.3' id='%s_3' value='%s' $tabindex %s/><label for='%s_3' id='$field_id.3_label'>" . apply_filters("gform_address_city_{$form_id}", apply_filters("gform_address_city",__("City", "gravityforms"), $form_id), $form_id) . "</label></span>", $id, $field_id, $city_value, $disabled_text, $field_id); //state field $style = (IS_ADMIN && rgget("hideState", $field)) ? "style='display:none;'" : ""; if(IS_ADMIN || !rgget("hideState", $field)){ $state_field = self::get_state_field($field, $id, $field_id, $state_value, $disabled_text, $form_id); $state = sprintf("<span class='ginput_{$state_location}$class_suffix' id='" . $field_id . "_4_container' $style>$state_field<label for='%s_4' id='" . $field_id . "_4_label'>" . apply_filters("gform_address_state_{$form_id}", apply_filters("gform_address_state", $state_label, $form_id), $form_id) . "</label></span>", $field_id); } else{ $state = sprintf("<input type='hidden' class='gform_hidden' name='input_%d.4' id='%s_4' value='%s'/>", $id, $field_id, $state_value); } //zip field $tabindex = self::get_tabindex(); $zip = sprintf("<span class='ginput_{$zip_location}$class_suffix' id='" . $field_id . "_5_container'><input type='text' name='input_%d.5' id='%s_5' value='%s' $tabindex %s/><label for='%s_5' id='" . $field_id . "_5_label'>" . apply_filters("gform_address_zip_{$form_id}", apply_filters("gform_address_zip", $zip_label, $form_id), $form_id) . "</label></span>", $id, $field_id, $zip_value, $disabled_text, $field_id); } if(IS_ADMIN || !$hide_country){ $style = $hide_country ? "style='display:none;'" : ""; $tabindex = self::get_tabindex(); $country = sprintf("<span class='ginput_{$country_location}$class_suffix' id='" . $field_id . "_6_container' $style><select name='input_%d.6' id='%s_6' $tabindex %s>%s</select><label for='%s_6' id='" . $field_id . "_6_label'>" . apply_filters("gform_address_country_{$form_id}", apply_filters("gform_address_country",__("Country", "gravityforms"), $form_id), $form_id) . "</label></span>", $id, $field_id, $disabled_text, $country_list, $field_id); } else{ $country = sprintf("<input type='hidden' class='gform_hidden' name='input_%d.6' id='%s_6' value='%s'/>", $id, $field_id, $country_value); } $inputs = $address_display_format == "zip_before_city" ? $street_address . $street_address2 . $zip . $city . $state . $country : $street_address . $street_address2 . $city . $state . $zip . $country; return "<div class='ginput_complex$class_suffix ginput_container' id='$field_id'>" . $inputs . "<div class='gf_clear gf_clear_complex'></div></div>"; case "date" : if(!empty($post_link)) return $post_link; $format = empty($field["dateFormat"]) ? "mdy" : esc_attr($field["dateFormat"]); $field_position = substr($format, 0, 3); if(IS_ADMIN && RG_CURRENT_VIEW != "entry"){ $datepicker_display = in_array(rgget("dateType", $field), array("datefield", "datedropdown")) ? "none" : "inline"; $datefield_display = rgget("dateType", $field) == "datefield" ? "inline" : "none"; $dropdown_display = rgget("dateType", $field) == "datedropdown" ? "inline" : "none"; $icon_display = rgget("calendarIconType", $field) == "calendar" ? "inline" : "none"; $month_field = "<div class='gfield_date_month ginput_date' id='gfield_input_date_month' style='display:$datefield_display'><input name='ginput_month' type='text' disabled='disabled'/><label>" . __("MM", "gravityforms") . "</label></div>"; $day_field = "<div class='gfield_date_day ginput_date' id='gfield_input_date_day' style='display:$datefield_display'><input name='ginput_day' type='text' disabled='disabled'/><label>" . __("DD", "gravityforms") . "</label></div>"; $year_field = "<div class='gfield_date_year ginput_date' id='gfield_input_date_year' style='display:$datefield_display'><input type='text' name='ginput_year' disabled='disabled'/><label>" . __("YYYY", "gravityforms") . "</label></div>"; $month_dropdown = "<div class='gfield_date_dropdown_month ginput_date_dropdown' id='gfield_dropdown_date_month' style='display:$dropdown_display'>" . self::get_month_dropdown("","","","","disabled='disabled'") . "</div>"; $day_dropdown = "<div class='gfield_date_dropdown_day ginput_date_dropdown' id='gfield_dropdown_date_day' style='display:$dropdown_display'>" . self::get_day_dropdown("","","","","disabled='disabled'") . "</div>"; $year_dropdown = "<div class='gfield_date_dropdown_year ginput_date_dropdown' id='gfield_dropdown_date_year' style='display:$dropdown_display'>" . self::get_year_dropdown("","","","","disabled='disabled'") . "</div>"; $field_string ="<div class='ginput_container' id='gfield_input_datepicker' style='display:$datepicker_display'><input name='ginput_datepicker' type='text' /><img src='" . GFCommon::get_base_url() . "/images/calendar.png' id='gfield_input_datepicker_icon' style='display:$icon_display'/></div>"; switch($field_position){ case "dmy" : $field_string .= $day_field . $month_field . $year_field . $day_dropdown . $month_dropdown . $year_dropdown; break; case "ymd" : $field_string .= $year_field . $month_field . $day_field . $year_dropdown . $month_dropdown . $day_dropdown; break; default : $field_string .= $month_field . $day_field . $year_field . $month_dropdown . $day_dropdown . $year_dropdown; break; } return $field_string; } else{ $date_info = self::parse_date($value, $format); $date_type = rgget("dateType", $field); if(in_array($date_type, array("datefield", "datedropdown"))) { switch($field_position){ case "dmy" : $tabindex = self::get_tabindex(); $field_str = $date_type == "datedropdown" ? "<div class='clear-multi'><div class='gfield_date_dropdown_day ginput_container' id='{$field_id}_2_container'>" . self::get_day_dropdown("input_{$id}[]", "{$field_id}_2", rgar($date_info,"day"), $tabindex, $disabled_text) . "</div>" : sprintf("<div class='clear-multi'><div class='gfield_date_day ginput_container' id='%s_2_container'><input type='text' maxlength='2' name='input_%d[]' id='%s_2' value='%s' $tabindex %s/><label for='%s_2'>" . __("DD", "gravityforms") . "</label></div>", $field_id, $id, $field_id, esc_attr(rgget("day", $date_info)), $disabled_text, $field_id); $tabindex = self::get_tabindex(); $field_str .= $date_type == "datedropdown" ? "<div class='gfield_date_dropdown_month ginput_container' id='{$field_id}_1_container'>" . self::get_month_dropdown("input_{$id}[]", "{$field_id}_1", rgar($date_info,"month"), $tabindex, $disabled_text) . "</div>" : sprintf("<div class='gfield_date_month ginput_container' id='%s_1_container'><input type='text' maxlength='2' name='input_%d[]' id='%s_1' value='%s' $tabindex %s/><label for='%s_1'>" . __("MM", "gravityforms") . "</label></div>", $field_id, $id, $field_id, esc_attr(rgget("month", $date_info)), $disabled_text, $field_id); $tabindex = self::get_tabindex(); $field_str .= $date_type == "datedropdown" ? "<div class='gfield_date_dropdown_year ginput_container' id='{$field_id}_3_container'>" . self::get_year_dropdown("input_{$id}[]", "{$field_id}_3", rgar($date_info,"year"), $tabindex, $disabled_text) . "</div></div>" : sprintf("<div class='gfield_date_year ginput_container' id='%s_3_container'><input type='text' maxlength='4' name='input_%d[]' id='%s_3' value='%s' $tabindex %s/><label for='%s_3'>" . __("YYYY", "gravityforms") . "</label></div></div>", $field_id, $id, $field_id, esc_attr(rgget("year", $date_info)), $disabled_text, $field_id); break; case "ymd" : $tabindex = self::get_tabindex(); $field_str = $date_type == "datedropdown" ? "<div class='clear-multi'><div class='gfield_date_dropdown_year ginput_container' id='{$field_id}_3_container'>" . self::get_year_dropdown("input_{$id}[]", "{$field_id}_3", rgar($date_info,"year"), $tabindex, $disabled_text) . "</div>" : sprintf("<div class='clear-multi'><div class='gfield_date_year ginput_container' id='%s_3_container'><input type='text' maxlength='4' name='input_%d[]' id='%s_3' value='%s' $tabindex %s/><label for='%s_3'>" . __("YYYY", "gravityforms") . "</label></div>", $field_id, $id, $field_id, esc_attr(rgget("year", $date_info)), $disabled_text, $field_id); $field_str .= $date_type == "datedropdown" ? "<div class='gfield_date_dropdown_month ginput_container' id='{$field_id}_1_container'>" . self::get_month_dropdown("input_{$id}[]", "{$field_id}_1", rgar($date_info,"month"), $tabindex, $disabled_text) . "</div>" : sprintf("<div class='gfield_date_month ginput_container' id='%s_1_container'><input type='text' maxlength='2' name='input_%d[]' id='%s_1' value='%s' $tabindex %s/><label for='%s_1'>" . __("MM", "gravityforms") . "</label></div>", $field_id, $id, $field_id, esc_attr(rgar($date_info,"month")), $disabled_text, $field_id); $tabindex = self::get_tabindex(); $field_str .= $date_type == "datedropdown" ? "<div class='gfield_date_dropdown_day ginput_container' id='{$field_id}_2_container'>" . self::get_day_dropdown("input_{$id}[]", "{$field_id}_2", rgar($date_info,"day"), $tabindex, $disabled_text) . "</div></div>" : sprintf("<div class='gfield_date_day ginput_container' id='%s_2_container'><input type='text' maxlength='2' name='input_%d[]' id='%s_2' value='%s' $tabindex %s/><label for='%s_2'>" . __("DD", "gravityforms") . "</label></div></div>", $field_id, $id, $field_id, esc_attr(rgar($date_info,"day")), $disabled_text, $field_id); break; default : $tabindex = self::get_tabindex(); $field_str = $date_type == "datedropdown" ? "<div class='clear-multi'><div class='gfield_date_dropdown_month ginput_container' id='{$field_id}_1_container'>" . self::get_month_dropdown("input_{$id}[]", "{$field_id}_1", rgar($date_info,"month"), $tabindex, $disabled_text) . "</div>" : sprintf("<div class='clear-multi'><div class='gfield_date_month ginput_container' id='%s_1_container'><input type='text' maxlength='2' name='input_%d[]' id='%s_1' value='%s' $tabindex %s/><label for='%s_1'>" . __("MM", "gravityforms") . "</label></div>", $field_id, $id, $field_id, esc_attr(rgar($date_info,"month")), $disabled_text, $field_id); $tabindex = self::get_tabindex(); $field_str .= $date_type == "datedropdown" ? "<div class='gfield_date_dropdown_day ginput_container' id='{$field_id}_2_container'>" . self::get_day_dropdown("input_{$id}[]", "{$field_id}_2", rgar($date_info,"day"), $tabindex, $disabled_text) . "</div>" : sprintf("<div class='gfield_date_day ginput_container' id='%s_2_container'><input type='text' maxlength='2' name='input_%d[]' id='%s_2' value='%s' $tabindex %s/><label for='%s_2'>" . __("DD", "gravityforms") . "</label></div>", $field_id, $id, $field_id, esc_attr(rgar($date_info,"day")), $disabled_text, $field_id); $tabindex = self::get_tabindex(); $field_str .= $date_type == "datedropdown" ? "<div class='gfield_date_dropdown_year ginput_container' id='{$field_id}_3_container'>" . self::get_year_dropdown("input_{$id}[]", "{$field_id}_3", rgar($date_info,"year"), $tabindex, $disabled_text) . "</div></div>" : sprintf("<div class='gfield_date_year ginput_container' id='%s_3_container'><input type='text' maxlength='4' name='input_%d[]' id='%s_3' value='%s' $tabindex %s/><label for='%s_3'>" . __("YYYY", "gravityforms") . "</label></div></div>", $field_id, $id, $field_id, esc_attr(rgget("year", $date_info)), $disabled_text, $field_id); break; } return $field_str; } else { $value = GFCommon::date_display($value, $format); $icon_class = $field["calendarIconType"] == "none" ? "datepicker_no_icon" : "datepicker_with_icon"; $icon_url = empty($field["calendarIconUrl"]) ? GFCommon::get_base_url() . "/images/calendar.png" : $field["calendarIconUrl"]; $tabindex = self::get_tabindex(); return sprintf("<div class='ginput_container'><input name='input_%d' id='%s' type='text' value='%s' class='datepicker %s %s %s' $tabindex %s/> </div><input type='hidden' id='gforms_calendar_icon_$field_id' class='gform_hidden' value='$icon_url'/>", $id, $field_id, esc_attr($value), esc_attr($class), $format, $icon_class, $disabled_text); } } case "time" : if(!empty($post_link)) return $post_link; $hour = $minute = $am_selected = $pm_selected = ""; if(!is_array($value) && !empty($value)){ preg_match('/^(\d*):(\d*) ?(.*)$/', $value, $matches); $hour = esc_attr($matches[1]); $minute = esc_attr($matches[2]); $am_selected = rgar($matches,3) == "am" ? "selected='selected'" : ""; $pm_selected = rgar($matches,3) == "pm" ? "selected='selected'" : ""; } else if(is_array($value)){ $hour = esc_attr($value[0]); $minute = esc_attr($value[1]); $am_selected = rgar($value,2) == "am" ? "selected='selected'" : ""; $pm_selected = rgar($value,2) == "pm" ? "selected='selected'" : ""; } $hour_tabindex = self::get_tabindex(); $minute_tabindex = self::get_tabindex(); $ampm_tabindex = self::get_tabindex(); $ampm_field_style = is_admin() && rgar($field, "timeFormat") == "24" ? "style='display:none;'" : ""; $ampm_field = is_admin() || rgar($field, "timeFormat") != "24" ? "<div class='gfield_time_ampm ginput_container' {$ampm_field_style}><select name='input_{$id}[]' id='{$field_id}_3' $ampm_tabindex {$disabled_text}><option value='am' {$am_selected}>" . __("AM", "gravityforms") . "</option><option value='pm' {$pm_selected}>" . __("PM", "gravityforms") . "</option></select></div>" : ""; return sprintf("<div class='clear-multi'><div class='gfield_time_hour ginput_container' id='%s'><input type='text' maxlength='2' name='input_%d[]' id='%s_1' value='%s' $hour_tabindex %s/> : <label for='%s_1'>" . __("HH", "gravityforms") . "</label></div><div class='gfield_time_minute ginput_container'><input type='text' maxlength='2' name='input_%d[]' id='%s_2' value='%s' $minute_tabindex %s/><label for='%s_2'>" . __("MM", "gravityforms") . "</label></div>{$ampm_field}</div>", $field_id, $id, $field_id, $hour, $disabled_text, $field_id, $id, $field_id, $minute, $disabled_text, $field_id); case "fileupload" : $tabindex = self::get_tabindex(); $multiple_files = rgar($field, "multipleFiles"); $file_list_id = "gform_preview_" . $form_id . "_". $id; $max_upload_size = ! IS_ADMIN && isset($field["maxFileSize"]) && $field["maxFileSize"] > 0 ? $field["maxFileSize"] * 1048576: wp_max_upload_size(); if($multiple_files){ $upload_action_url = trailingslashit(site_url()) . "?gf_page=upload"; $max_files = isset($field["maxFiles"]) && $field["maxFiles"] > 0 ? $field["maxFiles"]: 0; $browse_button_id = 'gform_browse_button_' . $form_id . "_" . $id; $container_id = 'gform_multifile_upload_' . $form_id . "_" . $id; $drag_drop_id = 'gform_drag_drop_area_' . $form_id . "_" . $id; $messages_id = "gform_multifile_messages_{$form_id}_{$id}"; $allowed_extensions = isset($field["allowedExtensions"]) && !empty($field["allowedExtensions"]) ? join(",", GFCommon::clean_extensions(explode(",", strtolower($field["allowedExtensions"])))) : array(); if(empty($allowed_extensions)) $allowed_extensions="*"; $disallowed_extensions = GFCommon::get_disallowed_file_extensions(); if( defined('DOING_AJAX') && DOING_AJAX && "rg_change_input_type" === rgpost('action')){ $plupload_init = array(); } else { $plupload_init = array( 'runtimes' => 'html5,flash,html4', 'browse_button' => $browse_button_id, 'container' => $container_id, 'drop_element' => $drag_drop_id, 'filelist' => $file_list_id, 'unique_names' => true, 'file_data_name' => 'file', /*'chunk_size' => '10mb',*/ // chunking doesn't currently have very good cross-browser support 'url' => $upload_action_url, 'flash_swf_url' => includes_url('js/plupload/plupload.flash.swf'), 'silverlight_xap_url' => includes_url('js/plupload/plupload.silverlight.xap'), 'filters' => array( 'mime_types' => array(array('title' => __( 'Allowed Files', 'gravityforms' ), 'extensions' => $allowed_extensions)), 'max_file_size' => $max_upload_size . 'b' ), 'multipart' => true, 'urlstream_upload' => false, 'multipart_params' => array( "form_id" => $form_id, "field_id" => $id ), 'gf_vars' => array( 'max_files' => $max_files, 'message_id' => $messages_id, 'disallowed_extensions' => $disallowed_extensions ) ); // plupload 2 was introduced in WordPress 3.9. Plupload 1 accepts a slightly different init array. if (version_compare(get_bloginfo('version'), "3.9-RC1", "<")) { $plupload_init['max_file_size'] = $max_upload_size . 'b'; $plupload_init['filters'] = array(array('title' => __('Allowed Files', 'gravityforms'), 'extensions' => $allowed_extensions)); } } $plupload_init = apply_filters("gform_plupload_settings_{$form_id}", apply_filters('gform_plupload_settings', $plupload_init, $form_id, $field), $form_id, $field); // Multi-file uploading doesn't currently work in iOS Safari, // single-file allows the built-in camera to be used as source for images if ( wp_is_mobile() ) $plupload_init['multi_selection'] = false; $plupload_init_json = htmlspecialchars(json_encode($plupload_init), ENT_QUOTES, 'UTF-8'); $upload = sprintf("<div id='%s' data-settings='%s' class='gform_fileupload_multifile'><div id='%s' class='gform_drop_area'><span class='gform_drop_instructions'>%s </span><input id='%s' type='button' value='%s' class='button gform_button_select_files'/></div></div>",$container_id, $plupload_init_json, $drag_drop_id, __("Drop files here or" ,"gravityforms"), $browse_button_id, __("Select files", "gravityforms") ) ; if(!IS_ADMIN) $upload .= "<div class='validation_message'><ul id='{$messages_id}'></ul></div>"; if(IS_ADMIN && RG_CURRENT_VIEW === "entry") $upload .= sprintf('<input type="hidden" name="input_%d" value=\'%s\' />', $id, esc_attr($value)); } else { $upload = sprintf("<input type='hidden' name='MAX_FILE_SIZE' value='%d' />", $max_upload_size); $upload .= sprintf("<input name='input_%d' id='%s' type='file' class='%s' $tabindex %s/>", $id, $field_id, esc_attr($class), $disabled_text); } if(IS_ADMIN && RG_CURRENT_VIEW === "entry" && !empty($value)){ // edit entry $file_urls = $multiple_files ? json_decode($value) : array($value); $upload_display = $multiple_files ? "" : "style='display:none'"; $preview = "<div id='upload_$id' {$upload_display}>$upload</div>"; $preview .= sprintf("<div id='%s'></div>", $file_list_id); $preview .= sprintf("<div id='preview_existing_files_%d'>", $id); foreach($file_urls as $file_index => $file_url){ if(self::is_ssl() && strpos($file_url, "http:") !== false ){ $file_url = str_replace("http:", "https:", $file_url); } $file_url = esc_attr($file_url); $preview .= sprintf("<div id='preview_file_%d' class='ginput_preview'><a href='%s' target='_blank' alt='%s' title='%s'>%s</a><a href='%s' target='_blank' alt='" . __("Download file", "gravityforms") . "' title='" . __("Download file", "gravityforms") . "'><img src='%s' style='margin-left:10px;'/></a><a href='javascript:void(0);' alt='" . __("Delete file", "gravityforms") . "' title='" . __("Delete file", "gravityforms") . "' onclick='DeleteFile(%d,%d,this);' ><img src='%s' style='margin-left:10px;'/></a></div>", $file_index, $file_url, $file_url, $file_url, GFCommon::truncate_url($file_url), $file_url, GFCommon::get_base_url() . "/images/download.png", $lead_id, $id, GFCommon::get_base_url() . "/images/delete.png"); } $preview .="</div>"; return $preview; } else { $input_name = "input_{$id}"; $uploaded_files = isset(GFFormsModel::$uploaded_files[$form_id][$input_name]) ? GFFormsModel::$uploaded_files[$form_id][$input_name] : array(); $file_infos = $multiple_files ? $uploaded_files : RGFormsModel::get_temp_filename($form_id, $input_name); if(!empty($file_infos)){ $preview = sprintf("<div id='%s'>", $file_list_id); $file_infos = $multiple_files ? $uploaded_files : array($file_infos); foreach($file_infos as $file_info){ $preview .= "<div class='ginput_preview'><img class='gform_delete' src='" . GFCommon::get_base_url() . "/images/delete.png' onclick='gformDeleteUploadedFile({$form_id}, {$id}, this);' /> <strong>" . esc_html($file_info["uploaded_filename"]) . "</strong></div>"; } $preview .= "</div>"; if(!$multiple_files) $upload = str_replace(" class='", " class='gform_hidden ", $upload); return "<div class='ginput_container'>" . $upload . " {$preview}</div>"; } else{ $preview = $multiple_files ? sprintf("<div id='%s'></div>", $file_list_id) : ""; return "<div class='ginput_container'>$upload</div>" . $preview; } } case "captcha" : switch(rgget("captchaType", $field)){ case "simple_captcha" : $size = rgempty("simpleCaptchaSize", $field) ? "medium" : $field["simpleCaptchaSize"]; $captcha = self::get_captcha($field); $tabindex = self::get_tabindex(); $dimensions = IS_ADMIN ? "" : "width='" . rgar($captcha,"width") . "' height='" . rgar($captcha,"height") . "'"; return "<div class='gfield_captcha_container'><img class='gfield_captcha' src='" . rgar($captcha,"url") . "' alt='' {$dimensions} /><div class='gfield_captcha_input_container simple_captcha_{$size}'><input type='text' name='input_{$id}' id='{$field_id}' {$tabindex}/><input type='hidden' name='input_captcha_prefix_{$id}' value='" . rgar($captcha,"prefix") . "' /></div></div>"; break; case "math" : $size = empty($field["simpleCaptchaSize"]) ? "medium" : $field["simpleCaptchaSize"]; $captcha_1 = self::get_math_captcha($field, 1); $captcha_2 = self::get_math_captcha($field, 2); $captcha_3 = self::get_math_captcha($field, 3); $tabindex = self::get_tabindex(); $dimensions = IS_ADMIN ? "" : "width='{$captcha_1["width"]}' height='{$captcha_1["height"]}'"; return "<div class='gfield_captcha_container'><img class='gfield_captcha' src='{$captcha_1["url"]}' alt='' {$dimensions} /><img class='gfield_captcha' src='{$captcha_2["url"]}' alt='' {$dimensions} /><img class='gfield_captcha' src='{$captcha_3["url"]}' alt='' {$dimensions} /><div class='gfield_captcha_input_container math_{$size}'><input type='text' name='input_{$id}' id='{$field_id}' {$tabindex}/><input type='hidden' name='input_captcha_prefix_{$id}' value='{$captcha_1["prefix"]},{$captcha_2["prefix"]},{$captcha_3["prefix"]}' /></div></div>"; break; default: if(!function_exists("recaptcha_get_html")){ require_once(GFCommon::get_base_path() . '/recaptchalib.php'); } $theme = empty($field["captchaTheme"]) ? "red" : esc_attr($field["captchaTheme"]); $publickey = get_option("rg_gforms_captcha_public_key"); $privatekey = get_option("rg_gforms_captcha_private_key"); if(IS_ADMIN){ if(empty($publickey) || empty($privatekey)){ return "<div class='captcha_message'>" . __("To use the reCaptcha field you must first do the following:", "gravityforms") . "</div><div class='captcha_message'>1 - <a href='http://www.google.com/recaptcha' target='_blank'>" . sprintf(__("Sign up%s for a free reCAPTCHA account", "gravityforms"), "</a>") . "</div><div class='captcha_message'>2 - " . sprintf(__("Enter your reCAPTCHA keys in the %ssettings page%s", "gravityforms"), "<a href='?page=gf_settings'>", "</a>") . "</div>"; } else{ return "<div class='ginput_container'><img class='gfield_captcha' src='" . GFCommon::get_base_url() . "/images/captcha_$theme.jpg' alt='reCAPTCHA' title='reCAPTCHA'/></div>"; } } else{ $language = empty($field["captchaLanguage"]) ? "en" : esc_attr($field["captchaLanguage"]); if(empty(self::$tab_index)) self::$tab_index = 1; $options = "<script type='text/javascript'>" . apply_filters("gform_cdata_open", "") . " var RecaptchaOptions = {theme : '$theme'}; if(parseInt('" . self::$tab_index . "') > 0) {RecaptchaOptions.tabindex = " . self::$tab_index++ . ";}" . apply_filters("gform_recaptcha_init_script", "", $form_id, $field) . apply_filters("gform_cdata_close", "") . "</script>"; $is_ssl = !empty($_SERVER['HTTPS']); return $options . "<div class='ginput_container' id='$field_id'>" . recaptcha_get_html($publickey, null, $is_ssl, $language) . "</div>"; } } break; case "creditcard" : $card_number = ""; $card_name = ""; $expiration_date = ""; $expiration_month = ""; $expiration_year = ""; $security_code = ""; $autocomplete = RGFormsModel::is_html5_enabled() ? "autocomplete='off'" : ""; if(is_array($value)){ $card_number = esc_attr(rgget($field["id"] . ".1",$value)); $card_name = esc_attr(rgget($field["id"] . ".5",$value)); $expiration_date = rgget($field["id"] . ".2",$value); if(!is_array($expiration_date) && !empty($expiration_date)) $expiration_date = explode("/", $expiration_date); if(is_array($expiration_date) && count($expiration_date) == 2){ $expiration_month = $expiration_date[0]; $expiration_year = $expiration_date[1]; } $security_code = esc_attr(rgget($field["id"] . ".3",$value)); } $action = !IS_ADMIN ? "gformMatchCard(\"{$field_id}_1\");" : ""; $onchange= "onchange='{$action}'"; $onkeyup = "onkeyup='{$action}'"; $card_icons = ''; $cards = GFCommon::get_card_types(); $card_style = rgar($field, 'creditCardStyle') ? rgar($field, 'creditCardStyle') : 'style1'; foreach($cards as $card) { $style = ""; if(self::is_card_supported($field, $card["slug"])){ $print_card = true; } else if (IS_ADMIN){ $print_card = true; $style = "style='display:none;'"; } else{ $print_card = false; } if($print_card){ $card_icons .= "<div class='gform_card_icon gform_card_icon_{$card['slug']}' {$style}>{$card['name']}</div>"; } } $payment_methods = apply_filters("gform_payment_methods", array(), $field, $form_id); $payment_options = ""; if(is_array($payment_methods)){ foreach($payment_methods as $payment_method){ $checked = rgpost("gform_payment_method") == $payment_method["key"] ? "checked='checked'" : ""; $payment_options .="<div class='gform_payment_option gform_payment_{$payment_method["key"]}'><input type='radio' name='gform_payment_method' value='{$payment_method["key"]}' id='gform_payment_method_{$payment_method["key"]}' onclick='gformToggleCreditCard();' {$checked}/> {$payment_method["label"]}</div>"; } } $checked = rgpost("gform_payment_method") == "creditcard" || rgempty("gform_payment_method") ? "checked='checked'" : ""; $card_radio_button = empty($payment_options) ? "" : "<input type='radio' name='gform_payment_method' id='gform_payment_method_creditcard' value='creditcard' onclick='gformToggleCreditCard();' {$checked}/>"; $card_icons = "{$payment_options}<div class='gform_card_icon_container gform_card_icon_{$card_style}'>{$card_radio_button}{$card_icons}</div>"; //card number fields $tabindex = self::get_tabindex(); $html5_output = ! is_admin() && GFFormsModel::is_html5_enabled() ? "pattern='[0-9]*' title='" . __("Only digits are allowed", "gravityforms") . "'" : ""; $card_field = sprintf("<span class='ginput_full{$class_suffix}' id='{$field_id}_1_container' >{$card_icons}<input type='text' name='input_%d.1' id='%s_1' value='%s' {$tabindex} %s {$onchange} {$onkeyup} {$autocomplete} {$html5_output}/><label for='%s_1' id='{$field_id}_1_label'>" . apply_filters("gform_card_number_{$form_id}", apply_filters("gform_card_number",__("Card Number", "gravityforms"), $form_id), $form_id) . "</label></span>", $id, $field_id, $card_number, $disabled_text, $field_id); //expiration date field $expiration_field = "<span class='ginput_full{$class_suffix} ginput_cardextras' id='{$field_id}_2_container'>". "<span class='ginput_cardinfo_left{$class_suffix}' id='{$field_id}_2_cardinfo_left'>". "<span class='ginput_card_expiration_container ginput_card_field'>". // month selector "<select name='input_{$id}.2[]' id='{$field_id}_2_month' " . self::get_tabindex() . " {$disabled_text} class='ginput_card_expiration ginput_card_expiration_month'>" . self::get_expiration_months($expiration_month) . "</select>". // year selector "<select name='input_{$id}.2[]' id='{$field_id}_2_year' " . self::get_tabindex() . " {$disabled_text} class='ginput_card_expiration ginput_card_expiration_year'>" . self::get_expiration_years($expiration_year) . "</select>". // label for the expiration fields "<label for='{$field_id}_2_month' >" . apply_filters("gform_card_expiration_{$form_id}", apply_filters("gform_card_expiration",__("Expiration Date", "gravityforms"), $form_id), $form_id) . "</label>". "</span>". "</span>"; //security code field $tabindex = self::get_tabindex(); $html5_output = GFFormsModel::is_html5_enabled() ? "pattern='[0-9]*' title='" . __("Only digits are allowed", "gravityforms") . "'" : ""; $security_field = "<span class='ginput_cardinfo_right{$class_suffix}' id='{$field_id}_2_cardinfo_right'>". "<input type='text' name='input_{$id}.3' id='{$field_id}_3' {$tabindex} {$disabled_text} class='ginput_card_security_code' value='{$security_code}' {$autocomplete} {$html5_output} />". "<span class='ginput_card_security_code_icon'> </span>". "<label for='{$field_id}_3' >" . apply_filters("gform_card_security_code_{$form_id}", apply_filters("gform_card_security_code",__("Security Code", "gravityforms"), $form_id), $form_id) . "</label>". "</span>". "</span>"; $tabindex = self::get_tabindex(); $card_name_field = sprintf("<span class='ginput_full{$class_suffix}' id='{$field_id}_5_container'><input type='text' name='input_%d.5' id='%s_5' value='%s' {$tabindex} %s /><label for='%s_5' id='{$field_id}_5_label'>" . apply_filters("gform_card_name_{$form_id}", apply_filters("gform_card_name",__("Cardholder Name", "gravityforms"), $form_id), $form_id) . "</label></span>", $id, $field_id, $card_name, $disabled_text, $field_id); return "<div class='ginput_complex{$class_suffix} ginput_container' id='{$field_id}'>" . $card_field . $expiration_field . $security_field . $card_name_field . " </div>"; break; case "list" : if(!empty($value)) $value = maybe_unserialize($value); if(!is_array($value)) $value = array(array()); $has_columns = is_array(rgar($field, "choices")); $columns = $has_columns ? rgar($field, "choices") : array(array()); $list = "<div class='ginput_container ginput_list'>" . "<table class='gfield_list'>"; $class_attr = ""; if($has_columns){ $list .= "<colgroup>"; $colnum = 1; foreach($columns as $column){ $odd_even = ($colnum % 2) == 0 ? "even" : "odd"; $list .= "<col id='gfield_list_{$field["id"]}_col{$colnum}' class='gfield_list_col_{$odd_even}'></col>"; $colnum++; } $list .= "</colgroup>"; $list .= "<thead><tr>"; foreach($columns as $column){ $list .= "<th>" . esc_html($column["text"]) . "</th>"; } $list .= "<th> </th></tr></thead>"; } else{ $list .= "<colgroup><col id='gfield_list_{$field["id"]}_col1' class='gfield_list_col_odd'></col></colgroup>"; } $delete_display = count($value) == 1 ? "visibility:hidden;" : ""; $maxRow = intval(rgar($field, "maxRows")); $disabled_icon_class = !empty($maxRow) && count($value) >= $maxRow ? "gfield_icon_disabled" : ""; $list .= "<tbody>"; $rownum = 1; foreach($value as $item){ $odd_even = ($rownum % 2) == 0 ? "even" : "odd"; $list .= "<tr class='gfield_list_row_{$odd_even}'>"; $colnum = 1; foreach($columns as $column){ //getting value. taking into account columns being added/removed from form meta if(is_array($item)){ if($has_columns){ $val = rgar($item, $column["text"]); } else{ $vals = array_values($item); $val = rgar($vals, 0); } } else{ $val = $colnum == 1 ? $item : ""; } $list .= "<td class='gfield_list_cell gfield_list_{$field["id"]}_cell{$colnum}'>" . self::get_list_input($field, $has_columns, $column, $val, $form_id) . "</td>"; $colnum++; } $add_icon = !rgempty("addIconUrl", $field) ? $field["addIconUrl"] : GFCommon::get_base_url() . "/images/add.png"; $delete_icon = !rgempty("deleteIconUrl", $field) ? $field["deleteIconUrl"] : GFCommon::get_base_url() . "/images/remove.png"; $on_click = IS_ADMIN && RG_CURRENT_VIEW != "entry" ? "" : "onclick='gformAddListItem(this, {$maxRow})'"; if(rgar($field, "maxRows") != 1){ // can't replace these icons with the webfont versions since they appear on the front end. $list .="<td class='gfield_list_icons'>"; $list .=" <img src='{$add_icon}' class='add_list_item {$disabled_icon_class}' {$disabled_text} title='" . __("Add another row", "gravityforms") . "' alt='" . __("Add a row", "gravityforms") . "' {$on_click} style='cursor:pointer; margin:0 3px;' />" . " <img src='{$delete_icon}' {$disabled_text} title='" . __("Remove this row", "gravityforms") . "' alt='" . __("Remove this row", "gravityforms") . "' class='delete_list_item' style='cursor:pointer; {$delete_display}' onclick='gformDeleteListItem(this, {$maxRow})' />"; $list .="</td>"; } $list .= "</tr>"; if(!empty($maxRow) && $rownum >= $maxRow) break; $rownum++; } $list .="</tbody></table></div>"; return $list; break; } }
/** * @param GF_Field $field * @param string $value * @param int $lead_id * @param int $form_id * @param null $form * * @return mixed|string|void */ public static function get_field_input($field, $value = '', $lead_id = 0, $form_id = 0, $form = null) { if (!$field instanceof GF_Field) { $field = GF_Fields::create($field); } $field->adminOnly = false; $id = intval($field->id); $field_id = 'input_' . $form_id . "_{$id}"; $entry = RGFormsModel::get_lead($lead_id); $post_id = $entry['post_id']; $post_link = ''; if (is_numeric($post_id) && GFCommon::is_post_field($field)) { $post_link = "<div>You can <a href='post.php?action=edit&post={$post_id}'>edit this post</a> from the post page.</div>"; } $field_input = apply_filters('gform_field_input', '', $field, $value, $lead_id, $form_id); if ($field_input) { return $field_input; } // add categories as choices for Post Category field if ($field->type == 'post_category') { $field = GFCommon::add_categories_as_choices($field, $value); } $type = RGFormsModel::get_input_type($field); switch ($type) { case 'honeypot': $autocomplete = RGFormsModel::is_html5_enabled() ? "autocomplete='off'" : ''; return "<div class='ginput_container'><input name='input_{$id}' id='{$field_id}' type='text' value='' {$autocomplete}/></div>"; break; case 'adminonly_hidden': if (!is_array($field->inputs)) { if (is_array($value)) { $value = json_encode($value); } return sprintf("<input name='input_%d' id='%s' class='gform_hidden' type='hidden' value='%s'/>", $id, $field_id, esc_attr($value)); } $fields = ''; foreach ($field->inputs as $input) { $fields .= sprintf("<input name='input_%s' class='gform_hidden' type='hidden' value='%s'/>", $input['id'], esc_attr(rgar($value, strval($input['id'])))); } return $fields; break; default: if (!empty($post_link)) { return $post_link; } if (!isset($entry)) { $entry = null; } return $field->get_field_input($form, $value, $entry); break; } }