/** * prso_theme_gform_get_address_field * * Called by 'prso_theme_gform_get_address_field' function in this document * Essentially a copy and past of core code from Gravity Forms, allowing us * to alter how each address field is rendered and laid out. * * NOTES: This functions uses almost the same code as Gravity Forms to create * the field content. This approach was required as Gravity Forms does not yet * have sufficient filters to allow changes to how fields and their labels are * rendered. To ensure that the fields meet Zurb Foundation layout we needed to * tweak the specific order of elements in the DOM. * * Although this avoids having to edit the Gravity Forms code base directly * this still may break in the future if gforms change how their fields are rendered. * * Hooks: * Filter:: 'prso_theme_gforms_address_city_class' - change class for div around city field * Filter:: 'prso_theme_gforms_address_state_class' - change class for div around state field * Filter:: 'prso_theme_gforms_address_zip_class' - change class for div around zip field * * @param array field * @param string value * @param lead_id int * @param form_id int * @return string address fields html * @access public * @author Ben Moody */ function prso_theme_gform_get_address_field($field, $value, $lead_id, $form_id) { //Cache foudantion div to start a row $div_row = "<div class='row'>"; $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"]; } $street_value = ""; $street2_value = ""; $city_value = ""; $state_value = ""; $zip_value = ""; $country_value = ""; $class_suffix = ''; 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)); } if (version_compare(GFForms::$version, '1.9.0', '>')) { $gf_address = new GF_Field_Address(); $address_types = $gf_address->get_address_types($form_id); } else { $address_types = GFCommon::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); } if (version_compare(GFForms::$version, '1.9.0', '>')) { $gf_country = new GF_Field_Address(); $country_list = $gf_country->get_country_dropdown($country_value); } else { $country_list = GFCommon::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 = GFCommon::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 placeholder='" . apply_filters("gform_address_street_{$form_id}", apply_filters("gform_address_street", __("Street Address", "gravityforms"), $form_id), $form_id) . "'/></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 = GFCommon::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 placeholder='" . apply_filters("gform_address_street2_{$form_id}", apply_filters("gform_address_street2", __("Address Line 2", "gravityforms"), $form_id), $form_id) . "'/></span>", $id, $field_id, $street2_value, $disabled_text, $field_id); } if ($address_display_format == "zip_before_city") { //zip field $tabindex = GFCommon::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 placeholder='" . apply_filters("gform_address_zip_{$form_id}", apply_filters("gform_address_zip", $zip_label, $form_id), $form_id) . "'/></span>", $id, $field_id, $zip_value, $disabled_text, $field_id); //city field $tabindex = GFCommon::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 placeholder='" . apply_filters("gform_address_city_{$form_id}", apply_filters("gform_address_city", __("City", "gravityforms"), $form_id), $form_id) . "'/></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 = GFCommon::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 = GFCommon::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 placeholder='" . apply_filters("gform_address_city_{$form_id}", apply_filters("gform_address_city", __("City", "gravityforms"), $form_id), $form_id) . "'/></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 = prso_theme_gform_get_state_field($field, $id, $field_id, $state_value, $disabled_text, $form_id, $state_label); $state = sprintf("<span class='ginput_{$state_location}{$class_suffix}' id='" . $field_id . "_4_container' {$style}>{$state_field}</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 = GFCommon::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 placeholder='" . apply_filters("gform_address_zip_{$form_id}", apply_filters("gform_address_zip", $zip_label, $form_id), $form_id) . "'/></span>", $id, $field_id, $zip_value, $disabled_text, $field_id); } if (IS_ADMIN || !$hide_country) { $style = $hide_country ? "style='display:none;'" : ""; $tabindex = GFCommon::get_tabindex(); $country = sprintf("<span class='ginput_{$country_location}{$class_suffix}' id='" . $field_id . "_6_container' {$style}><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><select name='input_%d.6' id='%s_6' {$tabindex} %s>%s</select></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); } //Wrap city in foundation divs $city = "<div class='" . apply_filters('prso_theme_gforms_address_city_class', 'large-5 columns', $field, $form_id) . "'>{$city}</div>"; //Wrap state in foundation divs $state = "<div class='" . apply_filters('prso_theme_gforms_address_state_class', 'large-4 columns', $field, $form_id) . "'>{$state}</div>"; //Wrap ZIP in foundation divs $zip = "<div class='" . apply_filters('prso_theme_gforms_address_zip_class', 'large-3 columns', $field, $form_id) . "'>{$zip}</div>"; $inputs = $address_display_format == "zip_before_city" ? $street_address . $street_address2 . $div_row . $zip . $city . $state . "</div>" . $country : $street_address . $street_address2 . $div_row . $city . $state . $zip . "</div>" . $country; return "<div class='ginput_complex{$class_suffix} ginput_container' id='{$field_id}'>" . $inputs . "</div>"; }