Plugin Directory

Changeset 2529022


Ignore:
Timestamp:
05/10/2021 10:47:54 AM (5 years ago)
Author:
rspective
Message:

Committing changes for 2.1.6

Location:
voucherify/trunk
Files:
8 edited

Legend:

Unmodified
Added
Removed
  • voucherify/trunk/readme.txt

    r2519600 r2529022  
    77WC tested up to: 4.3.1
    88WC requires at least: 3.0.0
    9 Stable tag: 2.1.5
     9Stable tag: 2.1.6
    1010
    1111Integrates Voucherify API with woocommerce
     
    5050== Changelog ==
    5151
     52= 2.1.6 - 2021-05-10 =
     53* Fix: adding new discount code should properly replace the previous code in the cart
     54* Fix: prevent adding multiple discount codes to the order created via admin panel
     55* Fix: discount revalidation after cart update
     56* Fix: support for woocommerce-subscriptions plugin
     57
    5258= 2.1.5 - 2021-04-22 =
    5359* Fix: missing file
  • voucherify/trunk/src/class-voucherify-order-placing-session.php

    r2519268 r2529022  
    145145         *
    146146         */
    147         public function clear() {
    148             if ( vcrf_is_rest_request() || is_admin() ) {
     147        public function clear( $coupons = null ) {
     148            if ( empty( $coupons ) ) {
     149                $coupons = [];
     150            } elseif ( ! is_array( $coupons ) ) {
     151                $coupons = [ $coupons ];
     152            }
     153
     154            if ( vcrf_is_rest_request() || is_admin() ) {
     155                $this->clear_faked_session( $coupons );
     156
     157                return;
     158            }
     159            if ( ! empty( WC()->session ) ) {
     160                $this->clear_session( $coupons );
     161            }
     162        }
     163
     164        private function clear_faked_session( $coupons = null ) {
     165            if ( empty( $coupons ) ) {
    149166                $this->fake_session_for_rest_api['voucherify_removed_coupons'] = [];
    150167                $this->fake_session_for_rest_api['voucherify_valid_vouchers']  = [];
     
    152169                return;
    153170            }
    154             if ( ! empty( WC()->session ) ) {
     171
     172            if ( ! isset( $this->fake_session_for_rest_api, $this->fake_session_for_rest_api['voucherify_removed_coupons'] ) ) {
     173                $this->fake_session_for_rest_api['voucherify_removed_coupons'] = [];
     174            }
     175
     176            if ( ! isset( $this->fake_session_for_rest_api, $this->fake_session_for_rest_api['voucherify_valid_vouchers'] ) ) {
     177                $this->fake_session_for_rest_api['voucherify_valid_vouchers'] = [];
     178            }
     179
     180            $removed_coupon_idx = array_search( $coupons, $this->fake_session_for_rest_api['voucherify_removed_coupons'] );
     181            if ( false !== $removed_coupon_idx ) {
     182                unset( $this->fake_session_for_rest_api['voucherify_removed_coupons'][ $removed_coupon_idx ] );
     183            }
     184
     185            if ( isset( $this->fake_session_for_rest_api['voucherify_valid_vouchers'][ $coupons ] ) ) {
     186                unset( $this->fake_session_for_rest_api['voucherify_valid_vouchers'][ $coupons ] );
     187            }
     188        }
     189
     190        private function clear_session( $coupons = null ) {
     191            if ( empty( $coupons ) ) {
    155192                unset( WC()->session->voucherify_removed_coupons );
    156193                unset( WC()->session->voucherify_valid_vouchers );
     194
     195                return;
     196            }
     197
     198            foreach ( $coupons as $coupon ) {
     199                $removed_coupon_idx = array_search( $coupon, WC()->session->voucherify_removed_coupons );
     200                if ( ! empty( $removed_coupon_idx ) ) {
     201                    $cached_removed_vouchers = WC()->session->voucherify_removed_coupons;
     202                    unset( $cached_removed_vouchers[ $removed_coupon_idx ] );
     203                    WC()->session->voucherify_removed_coupons = $cached_removed_vouchers;
     204                }
     205
     206                if ( isset( WC()->session->voucherify_valid_vouchers[ $coupon ] ) ) {
     207                    $cached_vouchers = WC()->session->voucherify_valid_vouchers;
     208                    unset( $cached_vouchers[ $coupon ] );
     209                    WC()->session->voucherify_valid_vouchers = $cached_vouchers;
     210                }
    157211            }
    158212        }
  • voucherify/trunk/src/class-voucherify-remove-coupon-service.php

    r2519268 r2529022  
    3232         * Release voucherify session lock.
    3333         *
    34          * @param $coupon_code string
     34         * @param $coupon_codes
    3535         * @param $is_in_admin_panel boolean
    3636         */
    37         public function remove_coupon_from_voucherify_session( $coupon_code, $is_in_admin_panel = false ) {
    38             $order = null;
     37        public function remove_coupon_from_voucherify_session( $coupon_codes, $is_in_admin_panel = false ) {
     38            if ( ! is_array( $coupon_codes ) ) {
     39                $coupon_codes = [ $coupon_codes ];
     40            }
     41
    3942            if ( $is_in_admin_panel ) {
    4043                $order       = vcrf_get_admin_order();
    4144                $session_key = empty( $order ) ? '' : $order->get_meta( '_voucherify_session_key', true );
    42             } else {
     45                $this->voucherify_client_extension->release_session_lock( current( $coupon_codes ), $session_key );
     46                $order->delete_meta_data( '_voucherify_session_key' );
     47                $order->save_meta_data();
     48
     49                return;
     50            }
     51
     52            foreach ( $coupon_codes as $coupon_code ) {
    4353                $session_key = $this->order_placing_session->get_validation_session_data( $coupon_code )['key'];
    44             }
    45             if ( ! empty( $session_key ) ) {
    46                 $result = $this->voucherify_client_extension->release_session_lock( $coupon_code, $session_key );
    47                 if ( $is_in_admin_panel ) {
    48                     $order->delete_meta_data( '_voucherify_session_key' );
    49                     $order->save_meta_data();
     54                if ( ! empty( $session_key ) ) {
     55                    $this->voucherify_client_extension->release_session_lock( $coupon_code, $session_key );
    5056                }
    5157            }
    52             $this->order_placing_session->clear($coupon_code);
     58
     59            $this->order_placing_session->clear( $coupon_codes );
    5360        }
    5461    }
  • voucherify/trunk/src/class-voucherify-save-order-listener.php

    r2519268 r2529022  
    7575
    7676            if ( in_array( $new_status, [ 'cancelled' ] ) ) {
    77                 $coupons = $this->get_applied_coupons();
     77                $coupons = $this->get_applied_coupons( $order );
    7878                if ( ! empty( $coupons ) ) {
    79                     $this->remove_coupon_service->remove_coupon_from_voucherify_session( current( $coupons ), is_admin() );
     79                    $this->remove_coupon_service->remove_coupon_from_voucherify_session( $coupons, is_admin() );
    8080                }
    8181
     
    112112                return;
    113113            }
    114             $codes = $this->get_applied_coupons();
     114
     115            $codes = $this->get_applied_coupons( $order );
    115116            if ( empty( $codes ) ) {
    116117                return;
     
    184185        }
    185186
    186         private function get_applied_coupons() {
     187        private function get_applied_coupons( WC_Order $order = null ) {
     188            if ( ! empty( $order ) ) {
     189                return $order->get_coupon_codes();
     190            }
     191
    187192            if ( ! vcrf_is_rest_request() && ! is_admin() ) {
    188193                return WC()->cart->get_applied_coupons();
     
    246251                return;
    247252            }
    248             $code = current( $order_vouchers )->get_code();
    249             if ( in_array( $code, $this->order_placing_session->get_removed_coupons(), true ) ) {
    250                 return;
    251             }
     253
     254            $codes = array_map( function ( $code ) {
     255                return $code->get_code();
     256            }, $order_vouchers );
     257            $codes = array_filter( $codes, function ( $code ) {
     258                return ! in_array( $code, $this->order_placing_session->get_removed_coupons(), true );
     259            } );
     260            $code  = current( $codes );
     261
    252262            try {
    253263                $redeemed_voucher = $this->redemption_service->redeem( $code, $order );
  • voucherify/trunk/src/class-voucherify-unlock-order-listener.php

    r2519590 r2529022  
    8383                return;
    8484            }
     85
    8586            $codes = $order->get_coupon_codes();
    8687            if ( empty( $codes ) ) {
    8788                return;
    8889            }
    89             $this->remove_coupon_service->remove_coupon_from_voucherify_session( current( $codes ), true );
     90
     91            $this->remove_coupon_service->remove_coupon_from_voucherify_session( $codes, true );
    9092        }
    9193    }
  • voucherify/trunk/src/class-voucherify-validation-service.php

    r2519268 r2529022  
    9090
    9191            try {
     92                $order = vcrf_get_admin_order();
     93                if(is_admin() && !empty($order) && count($order->get_coupon_codes()) > 0) {
     94                    return false;
     95                }
     96
    9297                return $this->get_validated_virtual_coupon( $coupon_code );
    9398            } catch ( Exception $e ) {
    9499                $logger = wc_get_logger();
    95                 $logger->error( __( 'Validation was unsuccessful', 'voucherify' ), [ 'original_message' => $e->getMessage() ] );
     100                $logger->error( 'Validation was unsuccessful' );
     101                $logger->error( 'original_message: ' . $e->getMessage() );
    96102
    97103                return false;
     
    121127                $is_promotion = true;
    122128                $actual_code  = $coupon_code_enhanced[1];
    123             }
    124 
    125             if ( ! empty( self::$vouchers_requested ) && ! array_key_exists( $actual_code, self::$vouchers_requested ) ) {
    126                 throw new Exception();
    127129            }
    128130
     
    289291            ];
    290292
     293            $validation_response = $this->order_placing_session->get_validation_response( $code );
     294            if ( isset( $validation_response, $validation_response->session, $validation_response->session->key ) ) {
     295                $session_data['session']['key'] = $validation_response->session->key;
     296            }
     297
    291298            $order = vcrf_get_admin_order();
    292299            if ( empty( $order ) ) {
     
    340347                $return = apply_filters( 'voucherify_validation_service_validation_result', $return, $response,
    341348                    $this->validations );
    342                 $this->order_placing_session->clear();
     349                $this->order_placing_session->clear( $code );
    343350
    344351                return apply_filters( 'voucherify_validation_service_promotion_validation_result', $return, $response,
     
    358365                $return = apply_filters( 'voucherify_validation_service_validation_result', $return, $response,
    359366                    $this->validations );
    360                 $this->order_placing_session->clear();
     367                $this->order_placing_session->clear( $code );
    361368
    362369                return apply_filters( 'voucherify_validation_service_promotion_validation_result', $return, $response,
  • voucherify/trunk/src/class-voucherify.php

    r2519268 r2529022  
    416416            if ( $cart_updated ) {
    417417                voucherify()->disable_coupons_validation();
    418                 $current_coupon = current( WC()->cart->get_coupons() );
     418                $current_coupons = WC()->cart->get_coupons();
    419419                voucherify()->enable_coupons_validation();
    420                 $this->remove_coupon_service->remove_coupon_from_voucherify_session(
    421                     $current_coupon ? $current_coupon->get_code() : ''
    422                 );
     420                $current_coupons = array_map( function ( $coupon ) {
     421                    return $coupon->get_code();
     422                }, $current_coupons );
     423                $this->remove_coupon_service->remove_coupon_from_voucherify_session( $current_coupons );
    423424            }
    424425
  • voucherify/trunk/voucherify.php

    r2519600 r2529022  
    88 * Plugin URI: https://wordpress.org/plugins/voucherify/
    99 * Description: Integrates Voucherify API with woocommerce replacing core coupons functionality
    10  * Version: 2.1.5
     10 * Version: 2.1.6
    1111 * Author: rspective
    1212 * Author URI: https://www.rspective.com/
Note: See TracChangeset for help on using the changeset viewer.