From 9fcd11c73ec12aae4e1bc44450be22e4920ec8fb Mon Sep 17 00:00:00 2001 From: "Matthew Wire (MJW Consulting)" <mjw@mjwconsult.co.uk> Date: Mon, 4 Nov 2019 23:33:56 +0000 Subject: [PATCH] Release 6.2.2 --- docs/release/release_notes.md | 5 +++++ info.xml | 4 ++-- js/civicrm_stripe.min.js | 2 +- 3 files changed, 8 insertions(+), 3 deletions(-) diff --git a/docs/release/release_notes.md b/docs/release/release_notes.md index cae49376..4c8ea941 100644 --- a/docs/release/release_notes.md +++ b/docs/release/release_notes.md @@ -1,3 +1,8 @@ +## Release 6.2.2 + +* Make sure we detect memberships as auto-renew when they are "forced". +* Make sure we always load the recurring contribution ID properly. + ## Release 6.2.1 * [#121](https://lab.civicrm.org/extensions/stripe/issues/121) Fix auto-recurring membership payments. diff --git a/info.xml b/info.xml index 77fa1c3a..277ac293 100644 --- a/info.xml +++ b/info.xml @@ -13,8 +13,8 @@ <author>Matthew Wire (MJW Consulting)</author> <email>mjw@mjwconsult.co.uk</email> </maintainer> - <releaseDate>2019-10-31</releaseDate> - <version>6.2.1</version> + <releaseDate>2019-11-04</releaseDate> + <version>6.2.2</version> <develStage>stable</develStage> <compatibility> <ver>5.13</ver> diff --git a/js/civicrm_stripe.min.js b/js/civicrm_stripe.min.js index 1c469830..4a4ad86b 100644 --- a/js/civicrm_stripe.min.js +++ b/js/civicrm_stripe.min.js @@ -1 +1 @@ -CRM.$(function(d){f("civicrm_stripe loaded, dom-ready function firing.");if(window.civicrmStripeHandleReload){f("calling existing civicrmStripeHandleReload.");window.civicrmStripeHandleReload();return}var q;var b;var c;var a;var o=false;window.onbeforeunload=null;window.civicrmStripeHandleReload=function(){f("civicrmStripeHandleReload");var A=document.getElementById("card-element");if((typeof A!=="undefined")&&(A)){if(!A.children.length){f("checkAndLoad from document.ready");m()}}};window.civicrmStripeHandleReload();function v(C,A){f(C+": success - submitting form");var B=document.createElement("input");B.setAttribute("type","hidden");B.setAttribute("name",C);B.setAttribute("value",A.id);c.appendChild(B);c.submit()}function p(){a.setAttribute("disabled",true);return c.submit()}function h(A){f("error: "+A.error.message);var B=document.getElementById("card-errors");B.style.display="block";B.textContent=A.error.message;document.querySelector("#billing-payment-block").scrollIntoView();window.scrollBy(0,-50);c.dataset.submitted=false;a.removeAttribute("disabled")}function y(){;f("handle card payment");q.createPaymentMethod("card",b).then(function(A){if(A.error){h(A)}else{if(g()===true){v("paymentMethodID",A.paymentMethod)}else{var B=CRM.url("civicrm/stripe/confirm-payment");d.post(B,{payment_method_id:A.paymentMethod.id,amount:r(),currency:CRM.vars.stripe.currency,id:CRM.vars.stripe.id,description:document.title}).then(function(C){w(C)})}}})}function w(A){f("handleServerResponse");if(A.error){h(A)}else{if(A.requires_action){s(A)}else{v("paymentIntentID",A.paymentIntent)}}}function s(A){q.handleCardAction(A.payment_intent_client_secret).then(function(B){if(B.error){h(B)}else{v("paymentIntentID",B.paymentIntent)}})}d(document).ajaxComplete(function(C,D,B){if((B.url.match("civicrm(/|%2F)payment(/|%2F)form")!==null)||(B.url.match("civicrm(/|%2F)contact(/|%2F)view(/|%2F)participant")!==null)){if(typeof CRM.vars.stripe==="undefined"){return}var A=k();if(A!==null){if(A!==parseInt(CRM.vars.stripe.id)){f("payment processor changed to id: "+A);if(A===0){return l()}CRM.api3("PaymentProcessor","getvalue",{"return":"user_name",id:A,payment_processor_type_id:CRM.vars.stripe.paymentProcessorTypeID}).done(function(E){var F=E.result;if(F){f("Setting new stripe key to: "+F);CRM.vars.stripe.publishableKey=F}else{return l()}f("checkAndLoad from ajaxComplete");m()})}}}});function l(){f("New payment processor is not Stripe, clearing CRM.vars.stripe");if((typeof b!=="undefined")&&(b)){f("destroying card element");b.destroy();b=undefined}delete (CRM.vars.stripe)}function m(){if(typeof CRM.vars.stripe==="undefined"){f("CRM.vars.stripe not defined! Not a Stripe processor?");return}if(typeof Stripe==="undefined"){if(o){return}o=true;f("Stripe.js is not loaded!");d.getScript("https://js.stripe.com/v3",function(){f("Script loaded and executed.");o=false;e()})}else{e()}}function e(){f("loadStripeBillingBlock");if(typeof q==="undefined"){q=Stripe(CRM.vars.stripe.publishableKey)}var G=q.elements();var D={base:{fontSize:"20px"}};b=G.create("card",{style:D});b.mount("#card-element");f("created new card element",b);document.getElementsByClassName("billing_postal_code-"+CRM.vars.stripe.billingAddressID+"-section")[0].setAttribute("hidden",true);b.addEventListener("change",function(H){u(H)});c=j();if(typeof c.length==="undefined"||c.length===0){f("No billing form!");return}a=z();c.dataset.submitdontprocess=false;var A=c.querySelectorAll('[type="submit"][formnovalidate="1"], [type="submit"][formnovalidate="formnovalidate"], [type="submit"].cancel, [type="submit"].webform-previous'),C;for(C=0;C<A.length;++C){A[C].addEventListener("click",F())}function F(){f("adding submitdontprocess");c.dataset.submitdontprocess=true}a.addEventListener("click",B);function B(H){if(c.dataset.submitted===true){return}c.dataset.submitted=true;if(typeof CRM.vars.stripe==="undefined"){return p()}f("clearing submitdontprocess");c.dataset.submitdontprocess=false;return E(H)}a.removeAttribute("onclick");n();if(x()){d("[type=submit]").click(function(){t(this.value)});c.addEventListener("keydown",function(H){if(H.keyCode===13){t(this.value);E(event)}});d("#billingcheckbox:input").hide();d('label[for="billingcheckbox"]').hide()}function E(J){J.preventDefault();f("submit handler");if(d(c).valid()===false){f("Form not valid");return false}if(typeof CRM.vars.stripe==="undefined"){f("Submitting - not a stripe processor");return true}if(c.dataset.submitted===true){f("form already submitted");return false}var L=parseInt(CRM.vars.stripe.id);var I=null;if(x()){if(!d('input[name="submitted[civicrm_1_contribution_1_contribution_payment_processor_id]"]').length){I=L}else{I=parseInt(c.querySelector('input[name="submitted[civicrm_1_contribution_1_contribution_payment_processor_id]"]:checked').value)}}else{if((c.querySelector(".crm-section.payment_processor-section")!==null)||(c.querySelector(".crm-section.credit_card_info-section")!==null)){L=CRM.vars.stripe.id;if(c.querySelector('input[name="payment_processor_id"]:checked')!==null){I=parseInt(c.querySelector('input[name="payment_processor_id"]:checked').value)}}}if((I===0)||(L===null)||((I===null)&&(L===null))){f("Not a Stripe transaction, or pay-later");return p()}else{f("Stripe is the selected payprocessor")}if(typeof CRM.vars.stripe.publishableKey==="undefined"){f("submit missing stripe-pub-key element or value");return true}if(c.dataset.submitdontprocess===true){f("non-payment submit detected - not submitting payment");return true}if(x()){if(d("#billing-payment-block").is(":hidden")){f("no payment processor on webform");return true}var K=d('[name="submitted[civicrm_1_contribution_1_contribution_payment_processor_id]"]');if(K.length){if(K.filter(":checked").val()==="0"||K.filter(":checked").val()===0){f("no payment processor selected");return true}}}var H=r();if(H=="0"){f("Total amount is 0");return p()}if(c.dataset.submitted===true){alert("Form already submitted. Please wait.");return false}else{c.dataset.submitted=true}a.setAttribute("disabled",true);y();return true}}function x(){if(c!==null){return c.classList.contains("webform-client-form")||c.classList.contains("webform-submission-form")}return false}function j(){var A=d("div#card-element").closest("form").prop("id");if((typeof A==="undefined")||(!A.length)){A=d("input[name=hidden_processor]").closest("form").prop("id")}return document.getElementById(A)}function z(){var A=null;if(x()){A=c.querySelector('[type="submit"].webform-submit');if(!A){A=c.querySelector('[type="submit"].webform-button--submit')}}else{A=c.querySelector('[type="submit"].validate')}return A}function r(){var A=null;if((document.getElementById("additional_participants")!==null)&&(document.getElementById("additional_participants").value.length!==0)){f("Cannot setup paymentIntent because we don't know the final price");return A}if(typeof calculateTotalFee=="function"){A=calculateTotalFee()}else{if(x()){d(".line-item:visible","#wf-crm-billing-items").each(function(){A+=parseFloat(d(this).data("amount"))})}else{if(document.getElementById("total_amount")){A=document.getElementById("total_amount").value}}}return A}function g(){var A=false;if(document.getElementById("is_recur")!==null){if(document.getElementById("is_recur").type=="hidden"){A=(document.getElementById("is_recur").value==1)}else{A=Boolean(document.getElementById("is_recur").checked)}}else{if(d('input[name="auto_renew"]').length!==0){if(d('input[name="auto_renew"]').prop("checked")){A=true}else{if(document.getElementById("auto_renew").type=="hidden"){A=(document.getElementById("auto_renew").value==1)}else{A=Boolean(document.getElementById("auto_renew").checked)}}}}f("isRecur is "+A);return A}function u(A){if(!A.complete){return}document.getElementById("billing_postal_code-"+CRM.vars.stripe.billingAddressID).value=A.value.postalCode}function n(){cividiscountElements=c.querySelectorAll("input#discountcode");var A=function(B){if(B.keyCode===13){B.preventDefault();f("adding submitdontprocess");c.dataset.submitdontprocess=true}};for(i=0;i<cividiscountElements.length;++i){cividiscountElements[i].addEventListener("keydown",A)}}function f(A){if((typeof(CRM.vars.stripe)==="undefined")||(Boolean(CRM.vars.stripe.jsDebug)===true)){console.log(new Date().toISOString()+" civicrm_stripe.js: "+A)}}function t(B){var A=null;if(document.getElementById("action")!==null){A=document.getElementById("action")}else{A=document.createElement("input")}A.setAttribute("type","hidden");A.setAttribute("name","op");A.setAttribute("id","action");A.setAttribute("value",B);c.appendChild(A)}function k(){if((typeof c==="undefined")||(!c)){c=j();if(!c){return null}}var A=c.querySelector('input[name="payment_processor_id"]:checked');if(A!==null){return parseInt(A.value)}return null}}); \ No newline at end of file +CRM.$(function(d){f("civicrm_stripe loaded, dom-ready function firing.");if(window.civicrmStripeHandleReload){f("calling existing civicrmStripeHandleReload.");window.civicrmStripeHandleReload();return}var q;var b;var c;var a;var o=false;window.onbeforeunload=null;window.civicrmStripeHandleReload=function(){f("civicrmStripeHandleReload");var A=document.getElementById("card-element");if((typeof A!=="undefined")&&(A)){if(!A.children.length){f("checkAndLoad from document.ready");m()}}};window.civicrmStripeHandleReload();function v(C,A){f(C+": success - submitting form");var B=document.createElement("input");B.setAttribute("type","hidden");B.setAttribute("name",C);B.setAttribute("value",A.id);c.appendChild(B);c.submit()}function p(){a.setAttribute("disabled",true);return c.submit()}function h(A){f("error: "+A.error.message);var B=document.getElementById("card-errors");B.style.display="block";B.textContent=A.error.message;document.querySelector("#billing-payment-block").scrollIntoView();window.scrollBy(0,-50);c.dataset.submitted=false;a.removeAttribute("disabled")}function y(){f("handle card payment");q.createPaymentMethod("card",b).then(function(A){if(A.error){h(A)}else{if(g()===true){v("paymentMethodID",A.paymentMethod)}else{var B=CRM.url("civicrm/stripe/confirm-payment");d.post(B,{payment_method_id:A.paymentMethod.id,amount:r(),currency:CRM.vars.stripe.currency,id:CRM.vars.stripe.id,description:document.title}).then(function(C){w(C)})}}})}function w(A){f("handleServerResponse");if(A.error){h(A)}else{if(A.requires_action){s(A)}else{v("paymentIntentID",A.paymentIntent)}}}function s(A){q.handleCardAction(A.payment_intent_client_secret).then(function(B){if(B.error){h(B)}else{v("paymentIntentID",B.paymentIntent)}})}d(document).ajaxComplete(function(C,D,B){if((B.url.match("civicrm(/|%2F)payment(/|%2F)form")!==null)||(B.url.match("civicrm(/|%2F)contact(/|%2F)view(/|%2F)participant")!==null)){if(typeof CRM.vars.stripe==="undefined"){return}var A=k();if(A!==null){if(A!==parseInt(CRM.vars.stripe.id)){f("payment processor changed to id: "+A);if(A===0){return l()}CRM.api3("PaymentProcessor","getvalue",{"return":"user_name",id:A,payment_processor_type_id:CRM.vars.stripe.paymentProcessorTypeID}).done(function(E){var F=E.result;if(F){f("Setting new stripe key to: "+F);CRM.vars.stripe.publishableKey=F}else{return l()}f("checkAndLoad from ajaxComplete");m()})}}}});function l(){f("New payment processor is not Stripe, clearing CRM.vars.stripe");if((typeof b!=="undefined")&&(b)){f("destroying card element");b.destroy();b=undefined}delete (CRM.vars.stripe)}function m(){if(typeof CRM.vars.stripe==="undefined"){f("CRM.vars.stripe not defined! Not a Stripe processor?");return}if(typeof Stripe==="undefined"){if(o){return}o=true;f("Stripe.js is not loaded!");d.getScript("https://js.stripe.com/v3",function(){f("Script loaded and executed.");o=false;e()})}else{e()}}function e(){f("loadStripeBillingBlock");if(typeof q==="undefined"){q=Stripe(CRM.vars.stripe.publishableKey)}var G=q.elements();var D={base:{fontSize:"20px"}};b=G.create("card",{style:D});b.mount("#card-element");f("created new card element",b);document.getElementsByClassName("billing_postal_code-"+CRM.vars.stripe.billingAddressID+"-section")[0].setAttribute("hidden",true);b.addEventListener("change",function(H){u(H)});c=j();if(typeof c.length==="undefined"||c.length===0){f("No billing form!");return}a=z();c.dataset.submitdontprocess=false;var A=c.querySelectorAll('[type="submit"][formnovalidate="1"], [type="submit"][formnovalidate="formnovalidate"], [type="submit"].cancel, [type="submit"].webform-previous'),C;for(C=0;C<A.length;++C){A[C].addEventListener("click",F())}function F(){f("adding submitdontprocess");c.dataset.submitdontprocess=true}a.addEventListener("click",B);function B(H){if(c.dataset.submitted===true){return}c.dataset.submitted=true;if(typeof CRM.vars.stripe==="undefined"){return p()}f("clearing submitdontprocess");c.dataset.submitdontprocess=false;return E(H)}a.removeAttribute("onclick");n();if(x()){d("[type=submit]").click(function(){t(this.value)});c.addEventListener("keydown",function(H){if(H.keyCode===13){t(this.value);E(event)}});d("#billingcheckbox:input").hide();d('label[for="billingcheckbox"]').hide()}function E(J){J.preventDefault();f("submit handler");if(d(c).valid()===false){f("Form not valid");return false}if(typeof CRM.vars.stripe==="undefined"){f("Submitting - not a stripe processor");return true}if(c.dataset.submitted===true){f("form already submitted");return false}var L=parseInt(CRM.vars.stripe.id);var I=null;if(x()){if(!d('input[name="submitted[civicrm_1_contribution_1_contribution_payment_processor_id]"]').length){I=L}else{I=parseInt(c.querySelector('input[name="submitted[civicrm_1_contribution_1_contribution_payment_processor_id]"]:checked').value)}}else{if((c.querySelector(".crm-section.payment_processor-section")!==null)||(c.querySelector(".crm-section.credit_card_info-section")!==null)){L=CRM.vars.stripe.id;if(c.querySelector('input[name="payment_processor_id"]:checked')!==null){I=parseInt(c.querySelector('input[name="payment_processor_id"]:checked').value)}}}if((I===0)||(L===null)||((I===null)&&(L===null))){f("Not a Stripe transaction, or pay-later");return p()}else{f("Stripe is the selected payprocessor")}if(typeof CRM.vars.stripe.publishableKey==="undefined"){f("submit missing stripe-pub-key element or value");return true}if(c.dataset.submitdontprocess===true){f("non-payment submit detected - not submitting payment");return true}if(x()){if(d("#billing-payment-block").is(":hidden")){f("no payment processor on webform");return true}var K=d('[name="submitted[civicrm_1_contribution_1_contribution_payment_processor_id]"]');if(K.length){if(K.filter(":checked").val()==="0"||K.filter(":checked").val()===0){f("no payment processor selected");return true}}}var H=r();if(H=="0"){f("Total amount is 0");return p()}if(c.dataset.submitted===true){alert("Form already submitted. Please wait.");return false}else{c.dataset.submitted=true}a.setAttribute("disabled",true);y();return true}}function x(){if(c!==null){return c.classList.contains("webform-client-form")||c.classList.contains("webform-submission-form")}return false}function j(){var A=d("div#card-element").closest("form").prop("id");if((typeof A==="undefined")||(!A.length)){A=d("input[name=hidden_processor]").closest("form").prop("id")}return document.getElementById(A)}function z(){var A=null;if(x()){A=c.querySelector('[type="submit"].webform-submit');if(!A){A=c.querySelector('[type="submit"].webform-button--submit')}}else{A=c.querySelector('[type="submit"].validate')}return A}function r(){var A=null;if((document.getElementById("additional_participants")!==null)&&(document.getElementById("additional_participants").value.length!==0)){f("Cannot setup paymentIntent because we don't know the final price");return A}if(typeof calculateTotalFee=="function"){A=calculateTotalFee()}else{if(x()){d(".line-item:visible","#wf-crm-billing-items").each(function(){A+=parseFloat(d(this).data("amount"))})}else{if(document.getElementById("total_amount")){A=document.getElementById("total_amount").value}}}return A}function g(){var A=false;if(document.getElementById("is_recur")!==null){if(document.getElementById("is_recur").type=="hidden"){A=(document.getElementById("is_recur").value==1)}else{A=Boolean(document.getElementById("is_recur").checked)}}else{if(d('input[name="auto_renew"]').length!==0){if(d('input[name="auto_renew"]').prop("checked")){A=true}else{if(document.getElementById("auto_renew").type=="hidden"){A=(document.getElementById("auto_renew").value==1)}else{A=Boolean(document.getElementById("auto_renew").checked)}}}}f("isRecur is "+A);return A}function u(A){if(!A.complete){return}document.getElementById("billing_postal_code-"+CRM.vars.stripe.billingAddressID).value=A.value.postalCode}function n(){cividiscountElements=c.querySelectorAll("input#discountcode");var A=function(B){if(B.keyCode===13){B.preventDefault();f("adding submitdontprocess");c.dataset.submitdontprocess=true}};for(i=0;i<cividiscountElements.length;++i){cividiscountElements[i].addEventListener("keydown",A)}}function f(A){if((typeof(CRM.vars.stripe)==="undefined")||(Boolean(CRM.vars.stripe.jsDebug)===true)){console.log(new Date().toISOString()+" civicrm_stripe.js: "+A)}}function t(B){var A=null;if(document.getElementById("action")!==null){A=document.getElementById("action")}else{A=document.createElement("input")}A.setAttribute("type","hidden");A.setAttribute("name","op");A.setAttribute("id","action");A.setAttribute("value",B);c.appendChild(A)}function k(){if((typeof c==="undefined")||(!c)){c=j();if(!c){return null}}var A=c.querySelector('input[name="payment_processor_id"]:checked');if(A!==null){return parseInt(A.value)}return null}}); \ No newline at end of file -- GitLab