Update the filter for saving billing data.
authorSteve Sutton <steve@gaslightmedia.com>
Mon, 30 Jul 2018 20:54:21 +0000 (16:54 -0400)
committerSteve Sutton <steve@gaslightmedia.com>
Mon, 30 Jul 2018 20:54:21 +0000 (16:54 -0400)
It now works for saving Contact or Company data as billing.

classes/billingSupport.php
views/admin/billing/contact.html

index 1b3ca56..6417bc5 100644 (file)
@@ -1541,9 +1541,38 @@ class GlmBillingSupport
         );
     }
 
+    /**
+     * getCityIdByName
+     *
+     * Find the name of the city with a given id.
+     *
+     * @param int $city_id The city id
+     *
+     * @return string Name of the city.
+     */
+    public function getCityIdByName( $city_id )
+    {
+        return $this->wpdb->get_var(
+            $this->wpdb->prepare(
+                "SELECT name
+                   FROM " . GLM_MEMBERS_PLUGIN_DB_PREFIX . "cities
+                  WHERE id = %d",
+                $city_id
+            )
+        );
+    }
+
+    /**
+     * saveContactBillingData
+     *
+     * @param int $ref_dest Member Id.
+     *
+     * @return mixed Boolean or Array for an error.
+     */
     public function saveContactBillingData( $ref_dest )
     {
         $required_fields = $errors = array();
+        $city_name = '';
         $billingAccount = new GlmDataAccounts( $this->wpdb, $this->config );
         $billingFields  = $billingAccount->fields;
         if ( $billingFields ) {
@@ -1553,18 +1582,70 @@ class GlmBillingSupport
                 }
             }
         }
-        // echo '<pre>$billingFields: ' . print_r( $billingFields, true ) . '</pre>';
-        // echo '<pre>$required_fields: ' . print_r( $required_fields, true ) . '</pre>';
-        // echo '<pre>$ref_dest: ' . print_r( $ref_dest, true ) . '</pre>';
-        // echo '<pre>$_REQUEST: ' . print_r( $_REQUEST, true ) . '</pre>';
-        // Check the given $ref_dest
-        $member_id = filter_var( $ref_dest, FILTER_VALIDATE_INT );
-        if ( $member_id ) {
-            // Get the members account
-            $account = $this->getAccountByRefDest( $member_id );
-            // echo '<pre>$account: ' . print_r( $account, true ) . '</pre>';
-
-            // New Billing Data If using Billing Fields
+        // Check to see if using contact or business address for billing
+        $contact_use_billing = filter_var( $_REQUEST['contact_use_billing'], FILTER_VALIDATE_BOOLEAN );
+        $business_use_billing = filter_var( $_REQUEST['business_use_billing'], FILTER_VALIDATE_BOOLEAN );
+        if ( $contact_use_billing ) {
+            // Need to convert city to String
+            $city_id = filter_var( $_REQUEST['city'], FILTER_VALIDATE_INT );
+            if ( $city_id ) {
+                $city_name = $this->getCityIdByName( $city_id );
+            }
+            $billing_updated = array(
+                'email'            => filter_var( $_REQUEST['alt_email'] ),
+                'billing_fname'    => filter_var( $_REQUEST['fname'] ),
+                'billing_lname'    => filter_var( $_REQUEST['lname'] ),
+                'billing_addr1'    => filter_var( $_REQUEST['addr1'] ),
+                'billing_addr2'    => filter_var( $_REQUEST['addr2'] ),
+                'billing_city'     => $city_name,
+                'billing_state'    => filter_var( $_REQUEST['state'] ),
+                'billing_country'  => filter_var( $_REQUEST['country'] ),
+                'billing_zip'      => filter_var( $_REQUEST['zip'] ),
+            );
+            $billing_updated_format = array(
+                '%s', // email
+                '%s', // fname
+                '%s', // lname
+                '%s', // addr1
+                '%s', // addr2
+                '%s', // city
+                '%s', // state
+                '%s', // country
+                '%s', // zip
+            );
+        } else if ( $business_use_billing ) {
+            // Need to convert city to String
+            $city_id = filter_var( $_REQUEST['business_city'], FILTER_VALIDATE_INT );
+            if ( $city_id ) {
+                $city_name = $this->getCityIdByName( $city_id );
+            }
+            $billing_updated = array(
+                'email'            => filter_var( $_REQUEST['business_email'] ),
+                'billing_company'  => filter_var( $_REQUEST['org'] ),
+                'billing_position' => filter_var( $_REQUEST['title'] ),
+                'billing_fname'    => filter_var( $_REQUEST['business_fname'] ),
+                'billing_lname'    => filter_var( $_REQUEST['business_lname'] ),
+                'billing_addr1'    => filter_var( $_REQUEST['business_addr1'] ),
+                'billing_addr2'    => filter_var( $_REQUEST['business_addr2'] ),
+                'billing_city'     => $city_name,
+                'billing_state'    => filter_var( $_REQUEST['business_state'] ),
+                'billing_country'  => filter_var( $_REQUEST['business_country'] ),
+                'billing_zip'      => filter_var( $_REQUEST['business_zip'] ),
+            );
+            $billing_updated_format = array(
+                '%s', // email
+                '%s', // company
+                '%s', // position
+                '%s', // fname
+                '%s', // lname
+                '%s', // addr1
+                '%s', // addr2
+                '%s', // city
+                '%s', // state
+                '%s', // country
+                '%s', // zip
+            );
+        } else if ( !$contact_use_billing && !$business_use_billing ) {
             $billing_updated = array(
                 'email'            => filter_var( $_REQUEST['billing_email'] ),
                 'billing_company'  => filter_var( $_REQUEST['billing_company'] ),
@@ -1595,6 +1676,14 @@ class GlmBillingSupport
                 '%s', // phone
                 '%s', // fax
             );
+        }
+        // Check the given $ref_dest
+        $member_id = filter_var( $ref_dest, FILTER_VALIDATE_INT );
+        if ( $member_id && $billing_updated && $billing_updated_format ) {
+            // Get the members account
+            $account = $this->getAccountByRefDest( $member_id );
+
+            // New Billing Data If using Billing Fields
             // echo '<pre>$billing_updated: ' . print_r( $billing_updated, true ) . '</pre>';
             // Check for required fields
             foreach ( $billing_updated as $field_name => $field_value ) {
index 5f10978..0a914d5 100644 (file)
@@ -1,4 +1,4 @@
-<table class="glm-admin-table glm-admin-table-inner">
+<table id="billing-contact-data" class="glm-admin-table glm-admin-table-inner">
     <tbody>
         <tr>
             <th class="{if $account.fieldRequired.email} glm-required{/if}">Billing Email</th>
     </tbody>
 </table>
 
+<script>
+jQuery(document).ready(function($){
+
+    // If the Contact Use for Billing is checked then require address
+    function checkContactRequired()
+    {
+        var contact_use_billing = $('input[name=contact_use_billing]');
+        if ( contact_use_billing.attr('checked') ) {
+            // Require the address fields for Contact Info
+            $('input[name=alt_email]').attr('required', true);
+            $('input[name=alt_email]').parent('td').prev().addClass('glm-required');
+            $('#addr1').attr('required', true);
+            $('#addr1').parent('td').prev().addClass('glm-required');
+            $('#city').attr('required', true);
+            $('#city').parent('td').prev().addClass('glm-required');
+            $('#state').attr('required', true);
+            $('#state').parent('td').prev().addClass('glm-required');
+            $('#zip').attr('required', true);
+            $('#zip').parent('td').prev().addClass('glm-required');
+            // Turn off the business_use_billing
+            var business_use_billing = $('input[name=business_use_billing]');
+            business_use_billing.prop('checked', false);
+            checkBusinessRequired();
+            disableBillingForm();
+        } else {
+            // Un Require the address fields for Contact Info
+            $('input[name=alt_email]').attr('required', false);
+            $('input[name=alt_email]').parent('td').prev().removeClass('glm-required');
+            $('#addr1').attr('required', false);
+            $('#addr1').parent('td').prev().removeClass('glm-required');
+            $('#city').attr('required', false);
+            $('#city').parent('td').prev().removeClass('glm-required');
+            $('#state').attr('required', false)
+            $('#state').parent('td').prev().removeClass('glm-required');
+            $('#zip').attr('required', false);
+            $('#zip').parent('td').prev().removeClass('glm-required');
+            enableBillingForm();
+        }
+    }
+    $('input[name=contact_use_billing]').click( function(){
+        checkContactRequired();
+    });
+    checkContactRequired();
+
+    // If the Company Use for Billing is checked then require address
+    function checkBusinessRequired() {
+        var business_use_billing = $('input[name=business_use_billing]');
+        if ( business_use_billing.attr('checked') ) {
+            // Require the address fields for Contact
+            $('input[name=business_email]').attr('required', true);
+            $('input[name=business_email]').parent('td').prev().addClass('glm-required');
+            $('input[name=business_fname]').attr('required', true);
+            $('input[name=business_fname]').parent('td').prev().addClass('glm-required');
+            $('input[name=business_lname]').attr('required', true);
+            $('input[name=business_lname]').parent('td').prev().addClass('glm-required');
+            $('#business_addr1').attr('required', true);
+            $('#business_addr1').parent('td').prev().addClass('glm-required');
+            $('#businessCity').attr('required', true);
+            $('#businessCity').parent('td').prev().addClass('glm-required');
+            $('#business_state').attr('required', true);
+            $('#business_state').parent('td').prev().addClass('glm-required');
+            $('#business_zip').attr('required', true);
+            $('#business_zip').parent('td').prev().addClass('glm-required');
+            // Turn off the contact_use_billing
+            var contact_use_billing = $('input[name=contact_use_billing]');
+            contact_use_billing.prop('checked', false);
+            checkContactRequired();
+            disableBillingForm();
+        } else {
+            $('input[name=business_email]').attr('required', false);
+            $('input[name=business_email]').parent('td').prev().removeClass('glm-required');
+            $('input[name=business_fname]').attr('required', false);
+            $('input[name=business_fname]').parent('td').prev().removeClass('glm-required');
+            $('input[name=business_lname]').attr('required', false);
+            $('input[name=business_lname]').parent('td').prev().removeClass('glm-required');
+            $('#business_addr1').attr('required', false);
+            $('#business_addr1').parent('td').prev().removeClass('glm-required');
+            $('#businessCity').attr('required', false);
+            $('#businessCity').parent('td').prev().removeClass('glm-required');
+            $('#business_state').attr('required', false)
+            $('#business_state').parent('td').prev().removeClass('glm-required');
+            $('#business_zip').attr('required', false);
+            $('#business_zip').parent('td').prev().removeClass('glm-required');
+            enableBillingForm();
+        }
+    }
+    $('input[name=business_use_billing]').click( function(){
+        checkBusinessRequired();
+    });
+    checkBusinessRequired();
+
+    // Disable the billing form
+    function disableBillingForm()
+    {
+        $('input[name=billing_email]').prop('disabled', true);
+        $('input[name=billing_company]').prop('disabled', true);
+        $('input[name=billing_position]').prop('disabled', true);
+        $('input[name=billing_fname]').prop('disabled', true);
+        $('input[name=billing_lname]').prop('disabled', true);
+        $('input[name=billing_addr1]').prop('disabled', true);
+        $('input[name=billing_addr2]').prop('disabled', true);
+        $('input[name=billing_city]').prop('disabled', true);
+        $('select[name=billing_state]').prop('disabled', true);
+        $('input[name=billing_zip]').prop('disabled', true);
+        $('input[name=billing_country]').prop('disabled', true);
+        $('input[name=billing_phone]').prop('disabled', true);
+        $('input[name=billing_fax]').prop('disabled', true);
+        console.log( 'billing form disabled' );
+    }
+    // Enable the billing form
+    function enableBillingForm()
+    {
+        $('input[name=billing_email]').prop('disabled', false);
+        $('input[name=billing_company]').prop('disabled', false);
+        $('input[name=billing_position]').prop('disabled', false);
+        $('input[name=billing_fname]').prop('disabled', false);
+        $('input[name=billing_lname]').prop('disabled', false);
+        $('input[name=billing_addr1]').prop('disabled', false);
+        $('input[name=billing_addr2]').prop('disabled', false);
+        $('input[name=billing_city]').prop('disabled', false);
+        $('select[name=billing_state]').prop('disabled', false);
+        $('input[name=billing_zip]').prop('disabled', false);
+        $('input[name=billing_country]').prop('disabled', false);
+        $('input[name=billing_phone]').prop('disabled', false);
+        $('input[name=billing_fax]').prop('disabled', false);
+    }
+});
+</script>