From 74dd0d905e725abbb7958093d513e204c4440c13 Mon Sep 17 00:00:00 2001 From: Coleman Watts Date: Sun, 20 Jul 2014 14:45:44 +0100 Subject: [PATCH] CRM-15017 - Fix existing member check & remove unnecessary checkemail callback --- CRM/Member/Form/Membership.php | 35 ++------ templates/CRM/Member/Form/Membership.js | 17 ---- templates/CRM/Member/Form/Membership.tpl | 90 ++++++++++++------- .../CRM/Member/Form/MembershipStandalone.js | 50 +++++++---- 4 files changed, 99 insertions(+), 93 deletions(-) delete mode 100644 templates/CRM/Member/Form/Membership.js diff --git a/CRM/Member/Form/Membership.php b/CRM/Member/Form/Membership.php index ef3acfb08e..ab978a8563 100644 --- a/CRM/Member/Form/Membership.php +++ b/CRM/Member/Form/Membership.php @@ -227,43 +227,26 @@ class CRM_Member_Form_Membership extends CRM_Member_Form { $mem['status_id'], 'label', 'id' ); - if ($this->_mode) { - $mem['renewUrl'] = CRM_Utils_System::url('civicrm/contact/view/membership', - "reset=1&action=renew&cid={$this->_contactID}&id={$mem['id']}&context=membership&selectedChild=member&mode=live" - ); - } - else { - $mem['renewUrl'] = CRM_Utils_System::url('civicrm/contact/view/membership', - "reset=1&action=renew&cid={$this->_contactID}&id={$mem['id']}&context=membership&selectedChild=member" - ); - } + $mem['renewUrl'] = CRM_Utils_System::url('civicrm/contact/view/membership', + "reset=1&action=renew&cid={$this->_contactID}&id={$mem['id']}&context=membership&selectedChild=member" + . ($this->_mode ? '&mode=live' : '') + ); $mem['membershipTab'] = CRM_Utils_System::url('civicrm/contact/view', "reset=1&force=1&cid={$this->_contactID}&selectedChild=member" ); $mems_by_org[$mem['member_of_contact_id']] = $mem; } - $resources = CRM_Core_Resources::singleton(); - $resources->addSetting(array('existingMems' => array('memberorgs' => $mems_by_org))); - $resources->addScriptFile('civicrm', 'templates/CRM/Member/Form/Membership.js'); + $this->assign('existingContactMemberships', $mems_by_org); } } else { + // In standalone mode we don't have a contact id yet so lookup will be done client-side with this script: $resources = CRM_Core_Resources::singleton(); $resources->addScriptFile('civicrm', 'templates/CRM/Member/Form/MembershipStandalone.js'); - $statuses = array(); - $membershipStatus = new CRM_Member_DAO_MembershipStatus(); - $membershipStatus->is_current_member = 1; - $membershipStatus->find(); - $membershipStatus->selectAdd(); - $membershipStatus->selectAdd('id'); - while ($membershipStatus->fetch()) { - $statuses[$membershipStatus->id] = $membershipStatus->label; - } - $membershipStatus->free(); $passthru = array( 'typeorgs' => CRM_Member_BAO_MembershipType::getMembershipTypeOrganization(), - 'memtypes' => CRM_Member_BAO_MembershipType::getMembershipTypes(FALSE), - 'statuses' => $statuses, + 'memtypes' => CRM_Core_PseudoConstant::get('CRM_Member_BAO_Membership', 'membership_type_id'), + 'statuses' => CRM_Core_PseudoConstant::get('CRM_Member_BAO_Membership', 'status_id'), ); $resources->addSetting(array('existingMems' => $passthru)); } @@ -550,7 +533,7 @@ class CRM_Member_Form_Membership extends CRM_Member_Form { } if ($this->_context == 'standalone') { - $this->addEntityRef('contact_id', ts('Contact'), array('create' => TRUE), TRUE); + $this->addEntityRef('contact_id', ts('Contact'), array('create' => TRUE, 'api' => array('extra' => array('email'))), TRUE); } $selOrgMemType[0][0] = $selMemTypeOrg[0] = ts('- select -'); diff --git a/templates/CRM/Member/Form/Membership.js b/templates/CRM/Member/Form/Membership.js deleted file mode 100644 index 042393167e..0000000000 --- a/templates/CRM/Member/Form/Membership.js +++ /dev/null @@ -1,17 +0,0 @@ -CRM.$(function($) { - checkExistingMemOrg(); - - $("select[name='membership_type_id[0]']").change( checkExistingMemOrg ); - - function checkExistingMemOrg () { - var selectedorg = $("select[name='membership_type_id[0]']").val(); - if (selectedorg in CRM.existingMems.memberorgs) { - var andEndDate = ''; - var endDate = CRM.existingMems.memberorgs[selectedorg].membership_end_date; - if (endDate) { - andEndDate = ' ' + ts("and end date of %1", {1:endDate}); - } - CRM.alert(ts('This contact has an existing %1 membership record with %2 status%3.', {1:CRM.existingMems.memberorgs[selectedorg].membership_type, 2:CRM.existingMems.memberorgs[selectedorg].membership_status, 3:andEndDate, 4:CRM.existingMems.memberorgs[selectedorg].renewUrl, 5:CRM.existingMems.memberorgs[selectedorg].membershipTab}), ts('Duplicate Membership?'), 'alert'); - } - } -}); diff --git a/templates/CRM/Member/Form/Membership.tpl b/templates/CRM/Member/Form/Membership.tpl index 328ffa70ef..56af3df465 100644 --- a/templates/CRM/Member/Form/Membership.tpl +++ b/templates/CRM/Member/Form/Membership.tpl @@ -470,56 +470,80 @@ {if $context eq 'standalone' and $outBound_option != 2 } {literal} CRM.$(function($) { - cj("#contact_id").change( function( ) { - checkEmail( ); - } ); + var $form = $("#{/literal}{$form.formName}{literal}"); + $("#contact_id", $form).change(checkEmail); checkEmail( ); - }); - function checkEmail( ) { - var contactID = cj("#contact_id").val(); - if ( contactID ) { - var postUrl = "{/literal}{crmURL p='civicrm/ajax/checkemail' h=0}{literal}"; - cj.post( postUrl, {contact_id: contactID}, - function ( response ) { - if ( response ) { - cj("#email-receipt").show( ); - if ( cj("#send_receipt").is(':checked') ) { - cj("#notice").show( ); - } - cj("#email-address").html( response ); - } - else { - cj("#email-receipt").hide( ); - cj("#notice").hide( ); - } + function checkEmail( ) { + var data = $("#contact_id", $form).select2('data'); + if (data && data.extra && data.extra.email && data.extra.email.length) { + $("#email-receipt", $form).show(); + if ($("#send_receipt", $form).is(':checked')) { + $("#notice", $form).show(); } - ); - } - else { - cj("#email-receipt").hide( ); - cj("#notice").hide( ); + $("#email-address", $form).html(data.extra.email); + } + else { + $("#email-receipt, #notice", $form).hide(); + } } - } + }); - function profileCreateCallback( blockNo ) { - checkEmail( ); - } {/literal} {/if} {literal} //keep read only always checked. CRM.$(function($) { + var $form = $("#{/literal}{$form.formName}{literal}"); var allowAutoRenew = {/literal}'{$allowAutoRenew}'{literal}; var alreadyAutoRenew = {/literal}'{$alreadyAutoRenew}'{literal}; if ( allowAutoRenew || alreadyAutoRenew ) { - cj( "#auto_renew" ).click(function( ) { - if ( cj(this).attr( 'readonly' ) ) { - cj(this).prop('checked', true ); + $( "#auto_renew" ).click(function( ) { + if ( $(this).attr( 'readonly' ) ) { + $(this).prop('checked', true ); } }); } + + {/literal} + {if !empty($existingContactMemberships)} + + var alert, memberorgs = {$existingContactMemberships|@json_encode}; + + {literal} + $("select[name='membership_type_id[0]']").change(checkExistingMemOrg); + + + + function checkExistingMemOrg () { + alert && alert.close && alert.close(); + var selectedorg = $("select[name='membership_type_id[0]']").val(); + if (selectedorg in memberorgs) { + var andEndDate = '', + endDate = memberorgs[selectedorg].membership_end_date, + org = $('option:selected', "select[name='membership_type_id[0]']").text(); + if (endDate) { + andEndDate = ' ' + ts("and end date of %1", {1:endDate}); + } + + alert = CRM.alert( + // Mixing client-side variables with a translated string in smarty is awkward! + ts({/literal}'{ts escape='js' 1='%1' 2='%2' 3='%3' 4='%4'}This contact has an existing %1 membership at %2 with %3 status%4.{/ts}'{literal}, {1:memberorgs[selectedorg].membership_type, 2: org, 3: memberorgs[selectedorg].membership_status, 4: andEndDate}) + + '', + ts('Duplicate Membership?'), 'alert'); + } + } + checkExistingMemOrg(); + {/literal} + {/if} + + {literal} + }); {/literal} diff --git a/templates/CRM/Member/Form/MembershipStandalone.js b/templates/CRM/Member/Form/MembershipStandalone.js index 82ad107e75..ec61fdf26f 100644 --- a/templates/CRM/Member/Form/MembershipStandalone.js +++ b/templates/CRM/Member/Form/MembershipStandalone.js @@ -1,30 +1,36 @@ CRM.$(function($) { - memberResults = new Array; - var contact_id = cj("#contact_id").val(); - CRM.api('Membership', 'get', {'sequential': 1, 'contact_id': contact_id}, - {success: function(data) { - if (data['values']) { - memberResults = data['values']; + var alert, memberResults = []; + + function fetchMemberships() { + var cid = $("#contact_id").val(); + if (cid) { + CRM.api3('Membership', 'get', {'sequential': 1, 'contact_id': cid}) + .done(function (data) { + memberResults = data['values'] || []; checkExistingMemOrg(); - } - }); - - checkExistingMemOrg(); + }); + } else { + memberResults = []; + } + } + + fetchMemberships(); - $("select[name='membership_type_id[0]']").change( checkExistingMemOrg ); + $("#contact_id").change(fetchMemberships); + $("select[name='membership_type_id[0]']").change(checkExistingMemOrg); function checkExistingMemOrg () { - if (memberResults) { - var selectedorg = $("select[name='membership_type_id[0]']").val(); + alert && alert.close && alert.close(); + var selectedorg = $("select[name='membership_type_id[0]']").val(); + if (memberResults.length && selectedorg) { $.each(memberResults, function() { if (this['membership_type_id'] in CRM.existingMems.typeorgs) { if (CRM.existingMems.typeorgs[this['membership_type_id']] == selectedorg) { if(this['status_id'] in CRM.existingMems.statuses) { var membership_status = CRM.existingMems.statuses[this['status_id']]; var andEndDate = ''; - var endDate = this.membership_end_date; - if (endDate) { - andEndDate = ' ' + ts("and end date of %1", {1:endDate}); + if (this.end_date) { + andEndDate = ' ' + ts("and end date of %1", {1:this.end_date}); } var renewUrl = CRM.url('civicrm/contact/view/membership', @@ -34,8 +40,18 @@ CRM.$(function($) { var membershipTab = CRM.url('civicrm/contact/view', "reset=1&force=1&cid="+this.contact_id+"&selectedChild=member" ); + + var org = $('option:selected', "select[name='membership_type_id[0]']").text(); - CRM.alert(ts('This contact has an existing %1 membership record with %2 status%3.', {1:CRM.existingMems.memtypes[this.membership_type_id], 2:membership_status, 3:andEndDate, 4:renewUrl, 5:membershipTab}), ts('Duplicate Membership?'), 'alert'); + alert = CRM.alert( + ts('This contact has an existing %1 membership at %2 with %3 status%4.', {1: CRM.existingMems.memtypes[this.membership_type_id], 2: org, 3: membership_status, 4: andEndDate}) + + '', + ts('Duplicate Membership?'), 'alert'); + return false; } } } -- 2.25.1