From: Steve Sutton Date: Thu, 29 Dec 2016 18:38:52 +0000 (-0500) Subject: Update the member info contact part for new mailing fields. X-Git-Url: http://cvs2.gaslightmedia.com/gitweb/?a=commitdiff_plain;h=baa35b27d5e203f5da19675e1143eca712613f3c;p=WP-Plugins%2Fglm-member-db.git Update the member info contact part for new mailing fields. Adding the mailing address fields into the view files and adding new mailing city into javascript parts and the model. --- diff --git a/classes/data/dataMemberInfo.php b/classes/data/dataMemberInfo.php index eabfb30f..22bd0dbd 100644 --- a/classes/data/dataMemberInfo.php +++ b/classes/data/dataMemberInfo.php @@ -424,6 +424,47 @@ class GlmDataMemberInfo extends GlmDataAbstract 'use' => 'a' ), + // Mailing Address Line 1 + 'mailing_addr1' => array ( + 'field' => 'mailing_addr1', + 'type' => 'text', + 'use' => 'a' + ), + + // Mailing Address Line 2 + 'mailing_addr2' => array ( + 'field' => 'mailing_addr2', + 'type' => 'text', + 'use' => 'a' + ), + + // Mailing City + 'mailing_city' => array ( + 'field' => 'mailing_city', + 'type' => 'pointer', + 'p_table' => GLM_MEMBERS_PLUGIN_DB_PREFIX . 'cities', + 'p_field' => 'name', + 'p_orderby' => 'name', + 'use' => 'a' + ), + + // Mailing State + 'mailing_state' => array ( + 'field' => 'mailing_state', + 'type' => 'list', + 'list' => $this->config['states'], + 'default' => $this->config['settings']['default_state'], + 'use' => 'a' + ), + + // Mailing ZIP / Postal Code + 'mailing_zip' => array ( + 'field' => 'mailing_zip', + 'type' => 'text', + 'use' => 'a' + ), + + // Notes 'notes' => array ( 'field' => 'notes', diff --git a/models/admin/member/memberInfo.php b/models/admin/member/memberInfo.php index 3c4bd493..779d7b8d 100644 --- a/models/admin/member/memberInfo.php +++ b/models/admin/member/memberInfo.php @@ -532,6 +532,33 @@ class GlmMembersAdmin_member_memberInfo extends GlmDataMemberInfo } } + // If we have a member ID and this was a submission with a new mailing_city (id < 0) + if ($this->memberID && isset($_REQUEST['mailing_city']) && $_REQUEST['mailing_city'] == -1 && isset($_REQUEST['newMailingCityName']) && trim($_REQUEST['newMailingCityName']) != '') { + + // Clean up mailing_city name + $cName = trim(filter_var($_REQUEST['newMailingCityName'])); + + // Try to add the mailing_city + require_once GLM_MEMBERS_PLUGIN_CLASS_PATH.'/data/dataCities.php'; + $Cities = new GlmDataCities($this->wpdb, $this->config); + $cID = $Cities->addCity($cName); + + // If we got a mailing_city id back + if (is_int($cID) && $cID > 0) { + + // Update the mailing_city selected for this member record + $sql = " + UPDATE ".GLM_MEMBERS_PLUGIN_DB_PREFIX."member + SET mailing_city = $cID + WHERE id = ".$this->memberID." + ;"; + $this->wpdb->query($sql); + + // Update submitted mailing_city value to use the new ID + $_REQUEST['mailing_city'] = $cID; + + } + } } /* diff --git a/views/admin/member/memberInfo.html b/views/admin/member/memberInfo.html index 6617b741..cfc350d4 100644 --- a/views/admin/member/memberInfo.html +++ b/views/admin/member/memberInfo.html @@ -9,7 +9,7 @@ {if apply_filters('glm_members_permit_admin_member_info_edit', true)} - + {if $memberInfoID && $memberInfo}
Delete this {$terms.term_member_cap} Profile Version
@@ -17,12 +17,12 @@ {if $memberInfo.fieldData.status.value == 10}

Cancel

- NOTE: This {$terms.term_member} profile is the currently active version! You may not delete an active profile version. + NOTE: This {$terms.term_member} profile is the currently active version! You may not delete an active profile version. To delete this version, please select another version to be active or change the "Profile Status" on this page to something other than "Active".

- If you change this version to something other than "Active" without selecting another version as active, there will be no active + If you change this version to something other than "Active" without selecting another version as active, there will be no active profile for this {$terms.term_member}. {$terms.term_member_cap} without an active profile will not be displayed on the front-end of this Web site.

@@ -37,7 +37,7 @@

WARNING:

- Clicking the "Delete this {$terms.term_member_cap} Profile Version" button above will + Clicking the "Delete this {$terms.term_member_cap} Profile Version" button above will delete all of the data and images displayed on this page and any other information in the tabs that may show to the right of the "{$terms.term_member_cap} Profile" tab above.

@@ -47,14 +47,14 @@

This {$terms.term_member} may also have other {$terms.term_member} profile records. Click the "{$terms.term_member_cap} Dashboard" Tab above to view a list of all profile version - records for this {$terms.term_member}. + records for this {$terms.term_member}.

- Only this {$terms.term_member} profile version will be deleted. Other {$terms.term_member} profile versions listed under the "{$terms.term_member_cap} Dashboard" tab - above will not be deleted. + Only this {$terms.term_member} profile version will be deleted. Other {$terms.term_member} profile versions listed under the "{$terms.term_member_cap} Dashboard" tab + above will not be deleted.

- There may also be "Archived" versions that will not normally show up in the "{$terms.term_member_cap} Dashboard". Click the + There may also be "Archived" versions that will not normally show up in the "{$terms.term_member_cap} Dashboard". Click the "Show Archiived Profile Versions" checkbox at the top right of the versions list on that page to include archived versions.

@@ -87,10 +87,10 @@ Access: {$member.access.name} - - {/if} + + {/if} - + - + - + {include file='admin/member/memberInfo/editStatus.html'} - + {include file='admin/member/memberInfo/editLocation.html'} @@ -117,36 +117,36 @@ {include file='admin/member/memberInfo/editContact.html'} - + {include file='admin/member/memberInfo/editCategory.html'} - + - + {include file='admin/member/memberInfo/editImages.html'} - + - + {include file='admin/member/memberInfo/editVideo.html'} - + - + {include file='admin/member/memberInfo/editCamera.html'} - + - + {include file='admin/member/memberInfo/editCreditCards.html'} - + {else} - + - - - + + + @@ -170,12 +170,12 @@ {if isset($memberInfo.fieldData.amenities) && $memberInfo.fieldData.amenities} {foreach from=$memberInfo.fieldData.amenities item=c} -
- {$c.name} +
+ {$c.name} -
+
{/foreach} - {/if} + {/if} @@ -183,7 +183,7 @@
{$terms.term_member_cap} Name:{$member.name}
{$terms.term_member_cap} Type:{$member.member_type.name}
Access:{$member.access.name}
Created:{$memberInfo.fieldData.create_time.datetime}
{$terms.term_member_cap} Type:{$member.member_type.name}
Access:{$member.access.name}
Created:{$memberInfo.fieldData.create_time.datetime}
Last Updated:{$memberInfo.fieldData.modify_time.datetime}
{$terms.term_member_cap} Info Status:{$memberInfo.fieldData.status.name}
Reference Name:{$memberInfo.fieldData.reference_name}
Notes:{$memberInfo.fieldData.notes}
Image Gallery
    - {if $haveImageGallery} + {if $haveImageGallery} {foreach $imageGallery as $i} {if $i.file_name}
  • @@ -204,7 +204,7 @@
    {/if} -
  • + {/foreach} {/if} @@ -225,57 +225,57 @@ // Do inital setup on load for first tab glmSetupAreaTab($('#glm-member-info-descr')); - + // Setup edit area selected function glmSetupAreaTab(t) { - + // Clear tabl highlights and hide all tables $('.glm-member-info-tab').removeClass('nav-tab-active'); $('.glm-member-info-table').addClass('glm-hidden'); - + // Highlight selected tab t.addClass('nav-tab-active'); - + // Show selected table var table = t.attr('data-show-table'); $('#' + table).removeClass('glm-hidden'); - - + + if (table == 'glm-table-address') { initMap(); } - + // Listen for changes in the lat/lon inputs $('#latLonRecenter').on('click', function() { // Get lat and lon from the input fields var glmLat = $('#glmLat').val(); var glmLng = $('#glmLng').val(); - + location = new google.maps.LatLng(glmLat, glmLng); initMap(); return false; - + }); - + // Listen for changes to video type $('#glm-video-type').change( function() { glmSetVideoTypeInput(); }); glmSetVideoTypeInput(); - + // Count remaining characters in field $('.glm-char-count').keyup( function() { glmCharsRemaining($(this)); }); - + $('.glm-char-count').each( function() { glmCharsRemaining($(this)); }); - + } - + // Display number of characters remaining in limited field function glmCharsRemaining(f) { var maxChar = f.attr('maxlength'); @@ -289,17 +289,17 @@ $('#' + msgArea).html('Characters remaining: ' + rem); } } - + // Display input field for selected video type - function glmSetVideoTypeInput() { - + function glmSetVideoTypeInput() { + var videoType = $('#glm-video-type').val(); - + // If using URL type - Ask for URL if (videoType < 20) { $('#glm-video-url').removeClass('glm-hidden'); $('#glm-video-file').addClass('glm-hidden'); - + // Otherwise it's a file type - Ask for File } else { $('#glm-video-url').addClass('glm-hidden'); @@ -307,32 +307,32 @@ } } - + /* * Action to select an Amenity */ $('#amenitySelect').change( function() { - + // Get the ID, name - var amenValue = $('#amenitySelect').val(); + var amenValue = $('#amenitySelect').val(); var amenName = $('#amenitySelect').find(':selected').text(); - + if (amenValue == '') { return; } - + // Check if the amenity has already been added - var found = false; + var found = false; $(".glm-members-amenity").each( function() { var id = $(this).attr('data-id'); if (id == amenValue) { found = true; } }); - + // If not found, Add the amenity if (!found) { - $('#activeAmenities').append('
    ' + amenName + ' X' + '
    '); @@ -346,11 +346,11 @@ // Action to de-select an Amenity $('.amenityDelete').live('click', function() { $(this).parent().remove(); - // Also set unload warning + // Also set unload warning glmPageUpdateRequired(); }); - {if $memberInfoID && $memberInfo} + {if $memberInfoID && $memberInfo} // Delete Member Info dialog $("#deleteMemberInfoDialog").dialog({ autoOpen: false, @@ -362,93 +362,93 @@ }); $('#deleteMemberInfoCancel').click( function() { $("#deleteMemberInfoDialog").dialog("close"); - }); + }); $('#deleteMemberInfoSubmit').click( function() { window.location.replace("{$thisUrl}?page={$thisPage}&glm_action=index&member={$memberID}&deleteID={$memberInfo.fieldData.id}"); }); - {/if} + {/if} /* * Category Selection */ - + // Action to select a category $('#categorySelect').change( function() { - + // Get the ID, name, and parent of the category - var catValue = $('#categorySelect').val(); + var catValue = $('#categorySelect').val(); var catName = $('#categorySelect').find(':selected').text(); var catParent = $('#categorySelect').find(':selected').attr('data-parent'); - + // Check if the category has already been added - var found = false; + var found = false; $(".glm-members-catgegory").each( function() { var id = $(this).attr('data-id'); if (id == catValue) { found = true; } }); - + // Check if there's a parent parentName = ''; if (catParent != '') { parentName = catParent + ': '; } - + // If not found, Add the category if (!found) { - $('#activeCategories').append('
    ' + $('#activeCategories').append('
    ' + parentName + catName.trim() + ' X' + '
    '); } - + // Reset picklist $('#categorySelect').val(''); - + }); - + // Action to de-select a category $('.catDelete').live('click', function() { $(this).parent().remove(); }); - + /* * New Category Dialog */ - + var newCat = 0; // Used for new category numbering (new cats are negative numbers) - + // Setup dialog box for adding a new category $("#newCategoryDialog").dialog({ autoOpen: false, minWidth: 400, dialogClass: "glm-dialog-no-close" }); - + // Ad a new category button action - pop-up dialog $('#newCategoryButton').click( function() { $("#newCategoryDialog").dialog("open"); }); - + // Submit new category $('#newCategorySubmit').click( function() { - + // Assign new cat number newCat--; - + // Get new category information var newCatName = $('#newCatName').val(); var newCatParent = $('#newCatParent').val(); var catParent = $('#newCatParent').find(':selected').attr('data-parent'); var newCatParentName = $('#newCatParentName').val(); - + // If there's no name, tell the user we need one. if (newCatName == '') { $('#newCatNameTD').addClass('glm-form-bad-input'); $('#newCatNameRequired').text('A catogory name is required!'); return false; } - + // Check if there's a parent, get the name - new parent name overrides selected parent parentName = ''; if (newCatParentName && newCatParentName != '') { @@ -456,40 +456,40 @@ } else if (catParent && catParent != '') { parentName = catParent + ': '; } - + // Add the new category to the active categories list - $('#activeCategories').append('
    ' + $('#activeCategories').append('
    ' + parentName + newCatName.trim() + ' X' + '' + '' + '' + '' + '
    '); - + // Clear the dialog input fields $('#newCatName').val(''); - $('#newCatParent').val(''); - $('#newCatParentName').val(''); - + $('#newCatParent').val(''); + $('#newCatParentName').val(''); + $("#newCategoryDialog").dialog("close"); - + }); $('#newCategoryCancel').click( function() { $("#newCategoryDialog").dialog("close"); }); - + // Setup dialog box for adding a new category $("#newCategoryDialog").dialog({ autoOpen: false, minWidth: 400, dialogClass: "glm-dialog-no-close" }); - + /* * New City Dialog */ - + // Setup dialog box for adding a new city $("#newCityDialog").dialog({ autoOpen: false, @@ -499,69 +499,131 @@ $('#newCityCancel').click( function() { $("#newCityDialog").dialog("close"); }); - + // Ad a new city button action - pop-up dialog $('#newCityButton').click( function() { $("#newCityDialog").dialog("open"); }); - + // Submit new city var newCityAdded = false; $('#newCitySubmit').click( function() { - + // Get new city name var newCityName = $('#newCityName').val(); - + // If no name is supplied, notify used it's required if (newCityName == '') { $('#newCityNameTD').addClass('glm-form-bad-input'); $('#newCityNameRequired').text('A city name is required!'); return false; } - + // Add new city name to the hidden field that will pass the new name to PHP. $('#cityName').val(newCityName); - + // Add new city name to picklist and for storing - Only one permitted per submission if (newCityAdded) { - + // New city already added, so just update the name and select that one $('#city').val(-1); $('#city option:selected').text(newCityName); - + } else { - + // Add the new city name to the city picklist $('#city').append(''); $('#city').val(-1); $('#newCityNameTD').append(''); newCityAdded = true; - + } - + // Clear new city name from form $('#newCityName').val(''); - + $("#newCityDialog").dialog("close"); - - glmGeocode(); - + + glmGeocode(); + }); - + + /* + * New Mailing City Dialog + */ + + // Setup dialog box for adding a new city + $("#newMailingCityDialog").dialog({ + autoOpen: false, + minWidth: 400, + dialogClass: "glm-dialog-no-close" + }); + $('#newMailingCityCancel').click( function() { + $("#newMailingCityDialog").dialog("close"); + }); + + // Ad a new city button action - pop-up dialog + $('#newMailingCityButton').click( function() { + $("#newMailingCityDialog").dialog("open"); + }); + + // Submit new city + var newMailingCityAdded = false; + $('#newMailingCitySubmit').click( function() { + + // Get new city name + var newMailingCityName = $('#newMailingCityName').val(); + + // If no name is supplied, notify used it's required + if (newMailingCityName == '') { + $('#newMailingCityNameTD').addClass('glm-form-bad-input'); + $('#newMailingCityNameRequired').text('A city name is required!'); + return false; + } + + // Add new city name to the hidden field that will pass the new name to PHP. + $('#mailingCityName').val(newMailingCityName); + + // Add new city name to picklist and for storing - Only one permitted per submission + if (newMailingCityAdded) { + + // New city already added, so just update the name and select that one + $('#mailing_city').val(-1); + $('#mailing_city option:selected').text(newMailingCityName); + + } else { + + // Add the new city name to the city picklist + $('#mailing_city').append(''); + $('#mailing_city').val(-1); + $('#newMailingCityNameTD').append(''); + newMailingCityAdded = true; + + } + + // Clear new city name from form + $('#newMailingCityName').val(''); + + $("#newMailingCityDialog").dialog("close"); + + glmGeocode(); + + }); + /* * Map operations */ - + //show error if location can't be found function showError() { alert("Location can't be found"); } - + /* * Google Maps * API reference: https://developers.google.com/maps/documentation/javascript/reference */ - + // Set default - Need to make this configurable var startLat = $('#glmLat').val(); var startLon = $('#glmLng').val(); @@ -571,37 +633,37 @@ var marker; function initMap() { - var map = new google.maps.Map(document.getElementById('locationMap'), { - zoom: 15, - disableDefaultUI: false, - mapTypeId: google.maps.MapTypeId.MAP, - }); + var map = new google.maps.Map(document.getElementById('locationMap'), { + zoom: 15, + disableDefaultUI: false, + mapTypeId: google.maps.MapTypeId.MAP, + }); var geocoder = new google.maps.Geocoder(); - var marker = new google.maps.Marker({ - map: map, - position: location, + var marker = new google.maps.Marker({ + map: map, + position: location, draggable: enableDraggable, - animation: google.maps.Animation.DROP, - title: "This is your location" - }); + animation: google.maps.Animation.DROP, + title: "This is your location" + }); map.setCenter(location); - - // Listen for an end of drag event for the map marker + + // Listen for an end of drag event for the map marker google.maps.event.addListener(marker,'dragend',function(event) { - + // Get the end postion glmLat = this.position.lat(); glmLng = this.position.lng(); - + // Assign it to the lat/lon fields for submission $('#glmLat').val(glmLat.toFixed(6)); $('#glmLng').val(glmLng.toFixed(6)); - + }); // When estimate location button is clicked, geocode using address $('#glm-estimate-location').on('click', function() { - + // Get all address parts var geoAddr1 = $('#addr1').val().trim(); var geoAddr2 = $('#addr2').val().trim(); @@ -609,42 +671,42 @@ var geoState = $('#state').find('option:selected').text().trim(); var geoZIP = $('#zip').val().trim(); var geoCountry = $('#country').find('option:selected').text().trim(); - - // Assemble address string for + + // Assemble address string for var geoAddress = geoAddr1 + ', ' + geoAddr2 + ', ' + geoCity + ', ' + geoState + ' ' + geoZIP + ', ' + geoCountry; - + // Send to Google Geocoder geocoder.geocode( { 'address': geoAddress }, function(results, status) { - + // If we have a geocode solution if (status == google.maps.GeocoderStatus.OK) { - + // Center the map and locate the marger to the new location map.setCenter(results[0].geometry.location); marker.setPosition( results[0].geometry.location ); - + // Assign the new position to the hidden fields for submission glmLat = results[0].geometry.location.lat(); glmLng = results[0].geometry.location.lng(); $('#glmLat').val(glmLat.toFixed(6)); $('#glmLng').val(glmLng.toFixed(6)); - + // Also display it to the user $('#mapPosition').html('Lat ' + glmLat.toFixed(4) + ', Lon ' + glmLng.toFixed(4)); - - // Otherwise tell the user. - } else { + + // Otherwise tell the user. + } else { alert('Not able to estimate position from the current address.'); } }); - + }); - + } - + // Resubmit geocoding when map location button is clicked function glmGeocode() { - + // Get all address parts var geoAddr1 = $('#addr1').val().trim(); var geoAddr2 = $('#addr2').val().trim(); @@ -652,64 +714,64 @@ var geoState = $('#state').find('option:selected').text().trim(); var geoZIP = $('#zip').val().trim(); var geoCountry = $('#country').find('option:selected').text().trim(); - - // Assemble address string for + + // Assemble address string for var geoAddress = geoAddr1 + ', ' + geoAddr2 + ', ' + geoCity + ', ' + geoState + ' ' + geoZIP + ', ' + geoCountry; - + // Send to Google Geocoder geocoder.geocode( { 'address': geoAddress }, function(results, status) { - + // If we have a geocode solution if (status == google.maps.GeocoderStatus.OK) { - + // Center the map and locate the marger to the new location map.setCenter(results[0].geometry.location); marker.setPosition( results[0].geometry.location ); - + // Assign the new position to the lat/lon fields for submission glmLat = results[0].geometry.location.lat(); glmLng = results[0].geometry.location.lng(); $('#glmLat').val(glmLat); $('#glmLng').val(glmLng); - + // Also display it to the user $('#mapPosition').html('Lat ' + glmLat.toFixed(4) + ', Lon ' + glmLng.toFixed(4)); - - // Otherwise tell the user. - } else { + + // Otherwise tell the user. + } else { alert('Not able to estimate position from the current address.'); } }); } - - // Flash certain elements for a short time after display + + // Flash certain elements for a short time after display $(".glm-flash-updated").fadeOut(500).fadeIn(500).fadeOut(500).fadeIn(500).fadeOut(500).fadeIn(500).fadeOut(500).fadeIn(500).fadeOut(500).fadeIn(500).fadeOut(500); - + /* * Check for bad input or input changes */ - + // Check for any field errors and if found change related tab to error color. $('.glm-form-bad-input').each( function(index) { tab = $(this).attr('data-tabid'); - + if (!$('#' + tab).hasClass('glm-bad-input-area')) { $('#' + tab).addClass('glm-bad-input-area'); } }); - + // Check for most input changes $('input, textarea, select').on( 'change', function() { glmPageUpdateRequired(); - }); + }); /* * Checks for leaving the page */ var glmSubmitRequired = false; - + // Flag submit button when updates are required. function glmPageUpdateRequired() { $('#updateMemberProfile').addClass('glm-bad-input-area'); @@ -720,33 +782,33 @@ glmSubmitRequired = false; return true; }); - + // If submit is required and we're laving the page, alert the user $(window).bind('beforeunload', function() { if (glmSubmitRequired) { return true; } }); - + // Set masking for phone number fields - see http://digitalbush.com/projects/masked-input-plugin/ $.mask.definitions['e'] = "[A-Za-z0-9: ]"; $(".glm-phone-input").mask("999{$settings.phone_infix}999{$settings.phone_infix}9999? eeeeeeeeeee"); - + $('#glm-live-cam-type').on("change", function() { checkLiveCamType(); }); function checkLiveCamType() { var camType = $('#glm-live-cam-type').val(); if (camType == 1) { - $('.not-with-url-type').addClass('glm-hidden'); + $('.not-with-url-type').addClass('glm-hidden'); } else { $('.not-with-url-type').removeClass('glm-hidden'); } } checkLiveCamType(); - + }); - - + + {include file='admin/footer.html'} diff --git a/views/admin/member/memberInfo/editContact.html b/views/admin/member/memberInfo/editContact.html index f23c4f11..69b0d9ef 100644 --- a/views/admin/member/memberInfo/editContact.html +++ b/views/admin/member/memberInfo/editContact.html @@ -1,36 +1,100 @@ - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + +
    Phone #: - - {if $memberInfo.fieldFail.phone}

    {$memberInfo.fieldFail.phone}

    {/if} -
    Toll Free #: - - {if $memberInfo.fieldFail.toll_free}

    {$memberInfo.fieldFail.toll_free}

    {/if} -
    E-Mail Address: - - {if $memberInfo.fieldFail.email}

    {$memberInfo.fieldFail.email}

    {/if} -
    Web Address (URL): + + + + + + + + + + + + + + + + - -
    Phone #: + + {if $memberInfo.fieldFail.phone}

    {$memberInfo.fieldFail.phone}

    {/if} +
    Toll Free #: + + {if $memberInfo.fieldFail.toll_free}

    {$memberInfo.fieldFail.toll_free}

    {/if} +
    E-Mail Address: + + {if $memberInfo.fieldFail.email}

    {$memberInfo.fieldFail.email}

    {/if} +
    Web Address (URL): {if $memberInfo.fieldData.url} - Test Link + Test Link {/if} - - {if $memberInfo.fieldFail.url}

    {$memberInfo.fieldFail.url}

    {/if} -
    + + {if $memberInfo.fieldFail.url}

    {$memberInfo.fieldFail.url}

    {/if} +
    Mailing Address 1: + + {if $memberInfo.fieldFail.mailing_addr1}

    {$memberInfo.fieldFail.mailing_addr1}

    {/if} +
    Mailing Address 2: + + {if $memberInfo.fieldFail.mailing_addr2}

    {$memberInfo.fieldFail.mailing_addr2}

    {/if} +
    Mailing City: + +
    Add a new City
    +
    + + + + + +
    City Name: + +
    +
    +

    * Required

    + Cancel + +
    + + + {if $memberInfo.fieldFail.mailing_city}

    {$memberInfo.fieldFail.mailing_city}

    {/if} +
    Mailing State: + + {if $memberInfo.fieldFail.mailing_state}

    {$memberInfo.fieldFail.mailing_state}

    {/if} +
    Mailing Zip: + + {if $memberInfo.fieldFail.mailing_zip}

    {$memberInfo.fieldFail.mailing_zip}

    {/if} +