From b3782fa1a5039d5ad6a6d2608d87dea1a350f7ea Mon Sep 17 00:00:00 2001 From: Mike Jolley Date: Tue, 18 Nov 2014 16:37:43 +0000 Subject: [PATCH] Removing Mijireh from core 2.3 --- .scrutinizer.yml | 1 - Gruntfile.js | 2 +- includes/admin/class-wc-admin-meta-boxes.php | 1 - includes/admin/class-wc-admin-notices.php | 11 - includes/admin/views/html-notice-mijireh.php | 23 -- includes/class-wc-ajax.php | 2 - includes/class-wc-payment-gateways.php | 5 - .../gateways/mijireh/assets/css/mijireh.css | 155 -------- .../mijireh/assets/images/credit_cards.png | Bin 4912 -> 0 bytes .../assets/images/mijireh-checkout-logo.png | Bin 56534 -> 0 bytes .../mijireh/assets/images/mijireh-logo.png | Bin 5793 -> 0 bytes .../mijireh/assets/images/mijireh.png | Bin 1305 -> 0 bytes .../gateways/mijireh/assets/js/page_slurp.js | 51 --- .../mijireh/class-wc-gateway-mijireh.php | 369 ------------------ .../gateways/mijireh/includes/Address.php | 54 --- includes/gateways/mijireh/includes/Item.php | 62 --- .../gateways/mijireh/includes/Mijireh.php | 120 ------ includes/gateways/mijireh/includes/Model.php | 137 ------- includes/gateways/mijireh/includes/Order.php | 355 ----------------- includes/gateways/mijireh/includes/Rest.php | 265 ------------- .../gateways/mijireh/includes/RestJSON.php | 30 -- uninstall.php | 4 - 22 files changed, 1 insertion(+), 1646 deletions(-) delete mode 100644 includes/admin/views/html-notice-mijireh.php delete mode 100644 includes/gateways/mijireh/assets/css/mijireh.css delete mode 100644 includes/gateways/mijireh/assets/images/credit_cards.png delete mode 100644 includes/gateways/mijireh/assets/images/mijireh-checkout-logo.png delete mode 100644 includes/gateways/mijireh/assets/images/mijireh-logo.png delete mode 100644 includes/gateways/mijireh/assets/images/mijireh.png delete mode 100644 includes/gateways/mijireh/assets/js/page_slurp.js delete mode 100644 includes/gateways/mijireh/class-wc-gateway-mijireh.php delete mode 100644 includes/gateways/mijireh/includes/Address.php delete mode 100644 includes/gateways/mijireh/includes/Item.php delete mode 100644 includes/gateways/mijireh/includes/Mijireh.php delete mode 100644 includes/gateways/mijireh/includes/Model.php delete mode 100644 includes/gateways/mijireh/includes/Order.php delete mode 100644 includes/gateways/mijireh/includes/Rest.php delete mode 100644 includes/gateways/mijireh/includes/RestJSON.php diff --git a/.scrutinizer.yml b/.scrutinizer.yml index 312c357c738..a1cbe163afc 100644 --- a/.scrutinizer.yml +++ b/.scrutinizer.yml @@ -5,7 +5,6 @@ filter: - includes/api/v1/* - includes/libraries/* - includes/updates/* - - includes/gateways/mijireh/includes/* - includes/gateways/simplify-commerce/includes/* checks: diff --git a/Gruntfile.js b/Gruntfile.js index b19ba3b6c07..58ee2259e0e 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -210,7 +210,7 @@ module.exports = function( grunt ) { apigen: { command: [ 'cd apigen/', - 'php apigen.php --source ../ --destination ../wc-apidocs --download yes --template-config ./templates/woodocs/config.neon --title "WooCommerce" --exclude "*/mijireh/*" --exclude "*/includes/libraries/*" --exclude "*/api/*" --exclude "*/i18n/*" --exclude "*/node_modules/*" --exclude "*/apigen/*" --exclude "*/wc-apidocs/*"' + 'php apigen.php --source ../ --destination ../wc-apidocs --download yes --template-config ./templates/woodocs/config.neon --title "WooCommerce" --exclude "*/includes/libraries/*" --exclude "*/api/*" --exclude "*/i18n/*" --exclude "*/node_modules/*" --exclude "*/apigen/*" --exclude "*/wc-apidocs/*"' ].join( '&&' ) } }, diff --git a/includes/admin/class-wc-admin-meta-boxes.php b/includes/admin/class-wc-admin-meta-boxes.php index 9b1628da2bc..e0c7c6a09e7 100644 --- a/includes/admin/class-wc-admin-meta-boxes.php +++ b/includes/admin/class-wc-admin-meta-boxes.php @@ -28,7 +28,6 @@ class WC_Admin_Meta_Boxes { add_action( 'add_meta_boxes', array( $this, 'remove_meta_boxes' ), 10 ); add_action( 'add_meta_boxes', array( $this, 'rename_meta_boxes' ), 20 ); add_action( 'add_meta_boxes', array( $this, 'add_meta_boxes' ), 30 ); - add_action( 'add_meta_boxes', array( 'WC_Gateway_Mijireh', 'add_page_slurp_meta' ) ); add_action( 'save_post', array( $this, 'save_meta_boxes' ), 1, 2 ); /** diff --git a/includes/admin/class-wc-admin-notices.php b/includes/admin/class-wc-admin-notices.php index 3b5f8b93216..a1f78474d31 100644 --- a/includes/admin/class-wc-admin-notices.php +++ b/includes/admin/class-wc-admin-notices.php @@ -74,10 +74,6 @@ class WC_Admin_Notices { wp_enqueue_style( 'woocommerce-activation', plugins_url( '/assets/css/activation.css', WC_PLUGIN_FILE ) ); add_action( 'admin_notices', array( $this, 'translation_upgrade_notice' ) ); } - - if ( ! class_exists( 'WC_Mijireh_Checkout' ) && ( $mijireh = get_option( 'woocommerce_mijireh_checkout_settings', false ) ) && ! empty( $mijireh['enabled'] ) && $mijireh['enabled'] === 'yes' && empty( $_GET['action'] ) ) { - add_action( 'admin_notices', array( $this, 'mijireh_notice' ) ); - } } /** @@ -151,13 +147,6 @@ class WC_Admin_Notices { include( 'views/html-notice-template-check.php' ); } } - - /** - * Notice to say Mijireh has been deprecated in 2.2 - */ - public function mijireh_notice() { - include( 'views/html-notice-mijireh.php' ); - } } endif; diff --git a/includes/admin/views/html-notice-mijireh.php b/includes/admin/views/html-notice-mijireh.php deleted file mode 100644 index d945c7d61be..00000000000 --- a/includes/admin/views/html-notice-mijireh.php +++ /dev/null @@ -1,23 +0,0 @@ - - -
-

The Mijireh payment gateway is deprecated – It is recommended that you install the replacement Mijireh plugin from WordPress.org as soon as possible. Mijireh will be removed from WC core completely as part of a future update.', 'woocommerce' ); ?>

- -

-
diff --git a/includes/class-wc-ajax.php b/includes/class-wc-ajax.php index 2370ae03988..7dfc6cca3e4 100644 --- a/includes/class-wc-ajax.php +++ b/includes/class-wc-ajax.php @@ -74,8 +74,6 @@ class WC_AJAX { add_action( 'wp_ajax_nopriv_woocommerce_' . $ajax_event, array( __CLASS__, $ajax_event ) ); } } - - add_action( 'wp_ajax_page_slurp', array( 'WC_Gateway_Mijireh', 'page_slurp' ) ); } /** diff --git a/includes/class-wc-payment-gateways.php b/includes/class-wc-payment-gateways.php index 6ea0c6c734b..e3a60f70f35 100644 --- a/includes/class-wc-payment-gateways.php +++ b/includes/class-wc-payment-gateways.php @@ -79,11 +79,6 @@ class WC_Payment_Gateways { 'WC_Gateway_Paypal', ); - // Conditional loading of core gateways - if ( ! class_exists( 'WC_Mijireh_Checkout' ) && ( $mijireh = get_option( 'woocommerce_mijireh_checkout_settings', false ) ) && ! empty( $mijireh['enabled'] ) && $mijireh['enabled'] === 'yes' ) { - $load_gateways[] = 'WC_Gateway_Mijireh'; - } - if ( 'US' === WC()->countries->get_base_country() ) { if ( class_exists( 'WC_Subscriptions_Order' ) || class_exists( 'WC_Pre_Orders_Order' ) ) { $load_gateways[] = 'WC_Addons_Gateway_Simplify_Commerce'; diff --git a/includes/gateways/mijireh/assets/css/mijireh.css b/includes/gateways/mijireh/assets/css/mijireh.css deleted file mode 100644 index 185541beb15..00000000000 --- a/includes/gateways/mijireh/assets/css/mijireh.css +++ /dev/null @@ -1,155 +0,0 @@ -#mijireh_notice { - background: #5bc0de url(../images/mijireh-logo.png) no-repeat 15px 18px; - border: 1px solid #339bb9; - padding: 15px 15px 15px 152px !important; - box-shadow: inset 1px 1px 0 rgba( 255, 255, 255, 0.5 ), inset -1px -1px 0 rgba( 255, 255, 255, 0.5 ); - -moz-box-shadow: inset 1px 1px 0 rgba( 255, 255, 255, 0.5 ), inset -1px -1px 0 rgba( 255, 255, 255, 0.5 ); - -webkit-box-shadow: inset 1px 1px 0 rgba( 255, 255, 255, 0.5 ), inset -1px -1px 0 rgba( 255, 255, 255, 0.5 ); - text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); - color: #fff; - text-shadow: 0 1px 0 #4a94ac; -} -#mijireh_notice.alert-danger, #mijireh_notice.alert-error { - background-color: #e0534e; - border: 1px solid #e0534e; - text-shadow: 0 1px 0 #e0534e; -} -#mijireh_notice.success { - background-color: #62c462; - border: 1px solid #62c462; - text-shadow: 0 1px 0 #4fbd4f; -} -#slurp_meta_box .inside { - padding:0 !important; - margin:0 !important; -} -#slurp_meta_box .alert-message { - margin:0 !important; -} -#slurp_meta_box h2 { - color:#fff; - text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); - margin: 0; -} -#slurp_meta_box a { - color: #fff; -} -#slurp_meta_box a.button-primary { - margin-right: 10px; -} -#slurp_meta_box p { - line-height: 22px; - margin-bottom: 1em; - margin-top: 0; -} - -/* Progress Bar Styles */ - .progress { - overflow: hidden; - line-height:18px!important; - height: 18px!important; - margin-bottom: 18px!important; - background: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #f5f5f5), color-stop(100%, #f9f9f9)); - background: -webkit-linear-gradient(#f5f5f5, #f9f9f9); - background: -moz-linear-gradient(#f5f5f5, #f9f9f9); - background: -o-linear-gradient(#f5f5f5, #f9f9f9); - background: -ms-linear-gradient(#f5f5f5, #f9f9f9); - background: linear-gradient(#f5f5f5, #f9f9f9); - -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.4); - -moz-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.4); - box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.4); - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - -ms-border-radius: 4px; - -o-border-radius: 4px; - border-radius: 4px; - } - .progress .bar { - width: 0%; - height: 18px!important; - line-height: 18px!important; - color: white; - font-size: 12px; - text-align: center; - text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); - background: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #149bdf), color-stop(100%, #0480be)); - background: -webkit-linear-gradient(#149bdf, #0480be); - background: -moz-linear-gradient(#149bdf, #0480be); - background: -o-linear-gradient(#149bdf, #0480be); - background: -ms-linear-gradient(#149bdf, #0480be); - background: linear-gradient(#149bdf, #0480be); - -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15), inset 0 1px 2px rgba(0, 0, 0, 0.4); - -moz-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15), inset 0 1px 2px rgba(0, 0, 0, 0.4); - box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15), inset 0 1px 2px rgba(0, 0, 0, 0.4); - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; - -webkit-transition: width 0.6s ease; - -moz-transition: width 0.6s ease; - transition: width 0.6s ease; - } - .progress-striped .bar { - background-color: #62c462; - background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent)); - background-image: -webkit-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: -moz-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: -ms-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: -o-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - -webkit-background-size: 40px 40px; - -moz-background-size: 40px 40px; - -o-background-size: 40px 40px; - background-size: 40px 40px; - } - .progress.active .bar { - -webkit-animation: progress-bar-stripes 2s linear infinite; - -moz-animation: progress-bar-stripes 2s linear infinite; - animation: progress-bar-stripes 2s linear infinite; - } - .progress-danger .bar { - background: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #ee5f5b), color-stop(100%, #c43c35)); - background: -webkit-linear-gradient(#ee5f5b, #c43c35); - background: -moz-linear-gradient(#ee5f5b, #c43c35); - background: -o-linear-gradient(#ee5f5b, #c43c35); - background: -ms-linear-gradient(#ee5f5b, #c43c35); - background: linear-gradient(#ee5f5b, #c43c35); - } - .progress-danger.progress-striped .bar { - background-color: #ee5f5b; - background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent)); - background-image: -webkit-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: -moz-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: -ms-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: -o-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - } - .progress-success .bar { - background: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #62c462), color-stop(100%, #57a957)); - background: -webkit-linear-gradient(#62c462, #57a957); - background: -moz-linear-gradient(#62c462, #57a957); - background: -o-linear-gradient(#62c462, #57a957); - background: -ms-linear-gradient(#62c462, #57a957); - background: linear-gradient(#62c462, #57a957); - } - .progress-success.progress-striped .bar { - background-color: #62c462; - background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent)); - background-image: -webkit-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: -moz-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: -ms-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: -o-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - } - .progress.info .bar { - background: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #5bc0de), color-stop(100%, #339bb9)); - background: -webkit-linear-gradient(#5bc0de, #339bb9); - background: -moz-linear-gradient(#5bc0de, #339bb9); - background: -o-linear-gradient(#5bc0de, #339bb9); - background: -ms-linear-gradient(#5bc0de, #339bb9); - background: linear-gradient(#5bc0de, #339bb9); - } - .progress-info.progress-striped .bar { - background-color: #5bc0de; - background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent)); - background-image: -webkit-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: -moz-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: -ms-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: -o-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - } \ No newline at end of file diff --git a/includes/gateways/mijireh/assets/images/credit_cards.png b/includes/gateways/mijireh/assets/images/credit_cards.png deleted file mode 100644 index 13ac2c1cac5d8a7c1348084fbf2af933b2e835fa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4912 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 bIic^(@s9c^5={N|rJ*r1vNEhgd0zP!jzV!1 diff --git a/includes/gateways/mijireh/assets/images/mijireh-checkout-logo.png b/includes/gateways/mijireh/assets/images/mijireh-checkout-logo.png deleted file mode 100644 index 8b7d6b4bf5f2bcb5bf09d51d468b86533a4bc04a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 56534 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∓HvoeINe^b*J_ee&v)|ICuzO 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

Q&F(vGRA5UsU%?^S|LD)<}| zu5=XE&?+sRqF}1s!sX1J_wOVdbE7ln)5r4($<|RE+KcValUm1(hP-}JOYomh!y@ZO zT9G~dfWJT&+&?`^`*M2GylbVgaZ!uuUs;}TJEe>IC>QD-2)b`2GrdtD!e4WG;=Dz3 zx>swm`n_cy{|p2@xOF6{|KAmyx6}%CbY}Mt$MN?A4hMLgh?;k2(fjA#V@PbzUt;#R z`y{*`=Z<_|9j$UKd^oDSUND&dbMHgDpR{++e#R!oX<2AFi&JF~l#nYTw*sXI3fV54 zs6=E0HRlRLu1Ukz5QA^pjUgmr7~l#gRY@Aok5JO?{6Y^`Xwr$YtFISoXh{)!YPZ>F81z?!N9&1e2iYciwza*Qgs*{|+;Ze()sMV-cX%UCPS_RTz8s}@2 zT2SAg+I}V@&t+)HY6V~tB`J#t@zCcj=R^$YFwZv-z8X2>a}d|@7zJS(hltss)EW(E zEykhpiZ!AvBQz6vueDskc)MhxU9x-ke(rv77r_6)nB&ukw2oA^S3<}x5D%z2ZbLu? zr#i}!_KwrpOACRW_m5KTxFu$DtT4fJM;4Z)<~C~(`oS+C)*^Mh2Y3xDQ$Bg_NK5bl z@UGL8*hW?TFVV{7O?)l#a}Dt02s*Q?v!7qldE81D@Jkl87Q+cVk6PJbB_#31ZW8w% z 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 = 'mijireh_checkout'; - $this->method_title = __( 'Mijireh Checkout', 'woocommerce' ); - $this->icon = apply_filters( 'woocommerce_mijireh_checkout_icon', WC()->plugin_url() . '/includes/gateways/mijireh/assets/images/credit_cards.png' ); - $this->has_fields = false; - - // Load the settings. - $this->init_form_fields(); - $this->init_settings(); - - // Define user set variables - $this->access_key = $this->get_option( 'access_key' ); - $this->title = $this->get_option( 'title' ); - $this->description = $this->get_option( 'description' ); - - if ( $this->enabled && is_admin() ) { - $this->install_slurp_page(); - } - - // Save options - add_action( 'woocommerce_update_options_payment_gateways_' . $this->id, array( $this, 'process_admin_options' ) ); - - // Payment listener/API hook - add_action( 'woocommerce_api_wc_gateway_mijireh', array( $this, 'mijireh_notification' ) ); - } - - /** - * install_slurp_page function. - * - * @access public - */ - public function install_slurp_page() { - $slurp_page_installed = get_option( 'slurp_page_installed', false ); - if ( $slurp_page_installed != 1 ) { - if( ! get_page_by_path( 'mijireh-secure-checkout' ) ) { - $page = array( - 'post_title' => 'Mijireh Secure Checkout', - 'post_name' => 'mijireh-secure-checkout', - 'post_parent' => 0, - 'post_status' => 'private', - 'post_type' => 'page', - 'comment_status' => 'closed', - 'ping_status' => 'closed', - 'post_content' => "

Checkout

\n\n{{mj-checkout-form}}", - ); - wp_insert_post( $page ); - } - update_option( 'slurp_page_installed', 1 ); - } - } - - /** - * mijireh_notification function. - * - * @access public - * @return void - */ - public function mijireh_notification() { - if ( isset( $_GET['order_number'] ) ) { - $this->init_mijireh(); - - try { - $mj_order = new Mijireh_Order( esc_attr( $_GET['order_number'] ) ); - $wc_order_id = $mj_order->get_meta_value( 'wc_order_id' ); - $wc_order = wc_get_order( absint( $wc_order_id ) ); - - // Mark order complete - $wc_order->payment_complete(); - - // Empty cart and clear session - WC()->cart->empty_cart(); - - wp_redirect( $this->get_return_url( $wc_order ) ); - exit; - - } catch ( Mijireh_Exception $e ) { - wc_add_notice( __( 'Mijireh error:', 'woocommerce' ) . $e->getMessage(), 'error' ); - } - } - elseif ( isset( $_POST['page_id'] ) ) { - if ( isset( $_POST['access_key'] ) && $_POST['access_key'] == $this->access_key ) { - wp_update_post( array( 'ID' => $_POST['page_id'], 'post_status' => 'private' ) ); - } - } - } - - /** - * Initialise Gateway Settings Form Fields - * - * @access public - * @return void - */ - public function init_form_fields() { - $this->form_fields = array( - 'enabled' => array( - 'title' => __( 'Enable/Disable', 'woocommerce' ), - 'type' => 'checkbox', - 'label' => __( 'Enable Mijireh Checkout', 'woocommerce' ), - 'default' => 'no' - ), - 'access_key' => array( - 'title' => __( 'Access Key', 'woocommerce' ), - 'type' => 'text', - 'description' => __( 'The Mijireh access key for your store.', 'woocommerce' ), - 'default' => '', - 'desc_tip' => true, - ), - 'title' => array( - 'title' => __( 'Title', 'woocommerce' ), - 'type' => 'text', - 'description' => __( 'This controls the title which the user sees during checkout.', 'woocommerce' ), - 'default' => __( 'Credit Card', 'woocommerce' ), - 'desc_tip' => true, - ), - 'description' => array( - 'title' => __( 'Description', 'woocommerce' ), - 'type' => 'text', - 'default' => __( 'Pay securely with your credit card.', 'woocommerce' ), - 'description' => __( 'This controls the description which the user sees during checkout.', 'woocommerce' ), - 'desc_tip' => true, - ), - ); - } - - /** - * Process the payment and return the result - * - * @access public - * @param int $order_id - * @return array - */ - public function process_payment( $order_id ) { - - $this->init_mijireh(); - - $mj_order = new Mijireh_Order(); - $wc_order = wc_get_order( $order_id ); - - // Avoid rounding issues altogether by sending the order as one lump - if ( get_option( 'woocommerce_prices_include_tax' ) == 'yes' ) { - - // Don't pass items - Pass 1 item for the order items overall - $item_names = array(); - - if ( sizeof( $wc_order->get_items() ) > 0 ) { - foreach ( $wc_order->get_items() as $item ) { - if ( $item['qty'] ) { - $item_names[] = $item['name'] . ' x ' . $item['qty']; - } - } - } - - $mj_order->add_item( sprintf( __( 'Order #%s' , 'woocommerce'), $wc_order->get_order_number() ) . " - " . implode( ', ', $item_names ), number_format( $wc_order->get_total() - round( $wc_order->get_total_shipping() + $wc_order->get_shipping_tax(), 2 ) + $wc_order->get_order_discount(), 2, '.', '' ), 1 ); - - if ( ( $wc_order->get_total_shipping() + $wc_order->get_shipping_tax() ) > 0 ) { - $mj_order->shipping = number_format( $wc_order->get_total_shipping() + $wc_order->get_shipping_tax(), 2, '.', '' ); - } - $mj_order->show_tax = false; - - // No issues when prices exclude tax - } else { - // add items to order - $items = $wc_order->get_items(); - - foreach( $items as $item ) { - $product = $wc_order->get_product_from_item( $item ); - $mj_order->add_item( $item['name'], $wc_order->get_item_subtotal( $item, false, true ), $item['qty'], $product->get_sku() ); - } - - // Handle fees - $items = $wc_order->get_fees(); - - foreach( $items as $item ) { - $mj_order->add_item( $item['name'], number_format( $item['line_total'], 2, '.', ',' ), 1, '' ); - } - - $mj_order->shipping = round( $wc_order->get_total_shipping(), 2 ); - $mj_order->tax = $wc_order->get_total_tax(); - } - - // set order totals - $mj_order->total = $wc_order->get_total(); - $mj_order->discount = $wc_order->get_total_discount(); - - // add billing address to order - $billing = new Mijireh_Address(); - $billing->first_name = $wc_order->billing_first_name; - $billing->last_name = $wc_order->billing_last_name; - $billing->street = $wc_order->billing_address_1; - $billing->apt_suite = $wc_order->billing_address_2; - $billing->city = $wc_order->billing_city; - $billing->state_province = $wc_order->billing_state; - $billing->zip_code = $wc_order->billing_postcode; - $billing->country = $wc_order->billing_country; - $billing->company = $wc_order->billing_company; - $billing->phone = $wc_order->billing_phone; - - if ( $billing->validate() ) { - $mj_order->set_billing_address( $billing ); - } - - // add shipping address to order - $shipping = new Mijireh_Address(); - $shipping->first_name = $wc_order->shipping_first_name; - $shipping->last_name = $wc_order->shipping_last_name; - $shipping->street = $wc_order->shipping_address_1; - $shipping->apt_suite = $wc_order->shipping_address_2; - $shipping->city = $wc_order->shipping_city; - $shipping->state_province = $wc_order->shipping_state; - $shipping->zip_code = $wc_order->shipping_postcode; - $shipping->country = $wc_order->shipping_country; - $shipping->company = $wc_order->shipping_company; - - if ( $shipping->validate() ) { - $mj_order->set_shipping_address( $shipping ); - } - - // set order name - $mj_order->first_name = $wc_order->billing_first_name; - $mj_order->last_name = $wc_order->billing_last_name; - $mj_order->email = $wc_order->billing_email; - - // add meta data to identify woocommerce order - $mj_order->add_meta_data( 'wc_order_id', $order_id ); - - // Set URL for mijireh payment notificatoin - use WC API - $mj_order->return_url = WC()->api_request_url( 'WC_Gateway_Mijireh' ); - - // Identify woocommerce - $mj_order->partner_id = 'woo'; - - try { - $mj_order->create(); - $result = array( - 'result' => 'success', - 'redirect' => $mj_order->checkout_url - ); - return $result; - } catch ( Mijireh_Exception $e ) { - wc_add_notice( __( 'Mijireh error:', 'woocommerce' ) . $e->getMessage() . print_r( $mj_order, true ), 'error' ); - } - } - - /** - * init_mijireh function. - * - * @access public - */ - public function init_mijireh() { - if ( ! class_exists( 'Mijireh' ) ) { - require_once 'includes/Mijireh.php'; - - if ( ! isset( $this ) ) { - $settings = get_option( 'woocommerce_' . 'mijireh_checkout' . '_settings', null ); - $key = ! empty( $settings['access_key'] ) ? $settings['access_key'] : ''; - } else { - $key = $this->access_key; - } - - Mijireh::$access_key = $key; - } - } - - /** - * page_slurp function. - * - * @access public - */ - public static function page_slurp() { - self::init_mijireh(); - - $page = get_post( absint( $_POST['page_id'] ) ); - $url = get_permalink( $page->ID ); - $job_id = $url; - if ( wp_update_post( array( 'ID' => $page->ID, 'post_status' => 'publish' ) ) ) { - $job_id = Mijireh::slurp( $url, $page->ID, str_replace( 'https:', 'http:', add_query_arg( 'wc-api', 'WC_Gateway_Mijireh', home_url( '/' ) ) ) ); - } - echo $job_id; - die; - } - - /** - * add_page_slurp_meta function. - * - * @access public - */ - public static function add_page_slurp_meta() { - if ( self::is_slurp_page() ) { - wp_enqueue_style( 'mijireh_css', WC()->plugin_url() . '/includes/gateways/mijireh/assets/css/mijireh.css' ); - wp_enqueue_script( 'pusher', 'https://d3dy5gmtp8yhk7.cloudfront.net/1.11/pusher.min.js', null, false, true ); - wp_enqueue_script( 'page_slurp', WC()->plugin_url() . '/includes/gateways/mijireh/assets/js/page_slurp.js', array('jquery'), false, true ); - - add_meta_box( - 'slurp_meta_box', // $id - 'Mijireh Page Slurp', // $title - array( 'WC_Gateway_Mijireh', 'draw_page_slurp_meta_box' ), // $callback - 'page', // $page - 'normal', // $context - 'high' // $priority - ); - } - } - - /** - * is_slurp_page function. - * - * @access public - * @return bool - */ - public static function is_slurp_page() { - global $post; - $is_slurp = false; - if ( isset( $post ) && is_object( $post ) ) { - $content = $post->post_content; - if ( strpos( $content, '{{mj-checkout-form}}') !== false ) { - $is_slurp = true; - } - } - return $is_slurp; - } - - /** - * draw_page_slurp_meta_box function. - * - * @access public - * @param mixed $post - */ - public static function draw_page_slurp_meta_box( $post ) { - self::init_mijireh(); - - echo "
"; - echo "

Slurp your custom checkout page!

"; - echo "

Get the page designed just how you want and when you're ready, click the button below and slurp it right up.

"; - echo ""; - echo "

Slurp This Page! "; - echo 'Preview Checkout Page

'; - echo "
"; - } -} diff --git a/includes/gateways/mijireh/includes/Address.php b/includes/gateways/mijireh/includes/Address.php deleted file mode 100644 index bf7b18ee0df..00000000000 --- a/includes/gateways/mijireh/includes/Address.php +++ /dev/null @@ -1,54 +0,0 @@ -init(); - } - - public function init() { - $this->_data = array( - 'first_name' => '', - 'last_name' => '', - 'street' => '', - 'city' => '', - 'state_province' => '', - 'zip_code' => '', - 'country' => '', - 'company' => '', - 'apt_suite' => '', - 'phone' => '' - ); - } - - /** - * Check required fields - * @return bool - */ - public function validate() { - $is_valid = $this->_check_required_fields(); - return $is_valid; - } - - /** - * Return true if all of the required fields have a non-empty value - * - * @return boolean - */ - private function _check_required_fields() { - $pass = true; - $fields = array('street', 'city', 'zip_code', 'country'); - foreach($fields as $f) { - if(empty($this->_data[$f])) { - $pass = false; - $this->add_error("$f is required"); - } - } - return $pass; - } - -} diff --git a/includes/gateways/mijireh/includes/Item.php b/includes/gateways/mijireh/includes/Item.php deleted file mode 100644 index f90894dcbf0..00000000000 --- a/includes/gateways/mijireh/includes/Item.php +++ /dev/null @@ -1,62 +0,0 @@ -_data = array( - 'name' => null, - 'price' => null, - 'quantity' => 1, - 'sku' => null - ); - } - - private function _check_required_fields() { - if(empty($this->_data['name'])) { - $this->add_error('item name is required.'); - } - - if(!is_numeric($this->_data['price'])) { - $this->add_error('price must be a number.'); - } - } - - private function _check_quantity() { - if($this->_data['quantity'] < 1) { - $this->add_error('quantity must be greater than or equal to 1'); - } - } - - public function __construct() { - $this->_init(); - } - - public function __get($key) { - $value = false; - if($key == 'total') { - $value = $this->_data['price'] * $this->_data['quantity']; - $value = number_format($value, 2, '.', ''); - } - else { - $value = parent::__get($key); - } - return $value; - } - - public function get_data() { - $data = parent::get_data(); - $data['total'] = $this->total; - return $data; - } - - public function validate() { - $this->_check_required_fields(); - $this->_check_quantity(); - return count($this->_errors) == 0; - } - -} diff --git a/includes/gateways/mijireh/includes/Mijireh.php b/includes/gateways/mijireh/includes/Mijireh.php deleted file mode 100644 index 211363574e0..00000000000 --- a/includes/gateways/mijireh/includes/Mijireh.php +++ /dev/null @@ -1,120 +0,0 @@ - $url, - 'page_id' => $page_id, - 'return_url' => $return_url - ); - $rest = new Mijireh_RestJSON(self::$url); - $rest->setupAuth(self::$access_key, ''); - $result = $rest->post('slurps', $data); - return $result['job_id']; - } - catch(Mijireh_Rest_Unauthorized $e) { - throw new Mijireh_Unauthorized("Unauthorized. Please check your api access key"); - } - catch(Mijireh_Rest_NotFound $e) { - throw new Mijireh_NotFound("Mijireh resource not found: " . $rest->last_request['url']); - } - catch(Mijireh_Rest_ClientError $e) { - throw new Mijireh_ClientError($e->getMessage()); - } - catch(Mijireh_Rest_ServerError $e) { - throw new Mijireh_ServerError($e->getMessage()); - } - catch(Mijireh_Rest_UnknownResponse $e) { - throw new Mijireh_Exception('Unable to slurp the URL: $url'); - } - } - - /** - * Return an array of store information - */ - public static function get_store_info() { - $rest = new Mijireh_RestJSON(self::$url); - $rest->setupAuth(self::$access_key, ''); - try { - $result = $rest->get('store'); - return $result; - } - catch(Mijireh_Rest_BadRequest $e) { - throw new Mijireh_BadRequest($e->getMessage()); - } - catch(Mijireh_Rest_Unauthorized $e) { - throw new Mijireh_Unauthorized("Unauthorized. Please check your api access key"); - } - catch(Mijireh_Rest_NotFound $e) { - throw new Mijireh_NotFound("Mijireh resource not found: " . $rest->last_request['url']); - } - catch(Mijireh_Rest_ClientError $e) { - throw new Mijireh_ClientError($e->getMessage()); - } - catch(Mijireh_Rest_ServerError $e) { - throw new Mijireh_ServerError($e->getMessage()); - } - } - - public static function preview_checkout_link() { - if(empty(Mijireh::$access_key)) { - throw new Mijireh_Exception('Access key required to view checkout preview'); - } - - return self::$base_url . 'checkout/' . self::$access_key; - } - -} diff --git a/includes/gateways/mijireh/includes/Model.php b/includes/gateways/mijireh/includes/Model.php deleted file mode 100644 index 7bd3d60b762..00000000000 --- a/includes/gateways/mijireh/includes/Model.php +++ /dev/null @@ -1,137 +0,0 @@ -_data)) { - $this->_data[$key] = $value; - $success = true; - } - return $success; - } - - /** - * Get the value for the key from the private $_data array. - * - * Return false if the requested key does not exist - * - * @param string $key The key from the $_data array - * @return mixed - */ - public function __get($key) { - $value = false; - if(array_key_exists($key, $this->_data)) { - $value = $this->_data[$key]; - } - - /* - elseif(method_exists($this, $key)) { - $value = call_user_func_array(array($this, $key), func_get_args()); - } - */ - - return $value; - } - - /** - * Return true if the given $key in the private $_data array is set - * - * @param string $key - * @return boolean - */ - public function __isset($key) { - return isset($this->_data[$key]); - } - - /** - * Set the value of the $_data array to null for the given key. - * - * @param string $key - * @return void - */ - public function __unset($key) { - if(array_key_exists($key, $this->_data)) { - $this->_data[$key] = null; - } - } - - /** - * Return the private $_data array - * - * @return mixed - */ - public function get_data() { - return $this->_data; - } - - /** - * Return true if the given $key exists in the private $_data array - * - * @param string $key - * @return boolean - */ - public function field_exists($key) { - return array_key_exists($key, $this->_data); - } - - public function copy_from(array $data) { - foreach($data as $key => $value) { - if(array_key_exists($key, $this->_data)) { - $this->_data[$key] = $value; - } - } - } - - public function clear() { - foreach($this->_data as $key => $value) { - if($key == 'id') { - $this->_data[$key] = null; - } - else { - $this->_data[$key] = ''; - } - } - } - - public function add_error($error_message) { - if(!empty($error_message)) { - $this->_errors[] = $error_message; - } - } - - public function clear_errors() { - $this->_errors = array(); - } - - public function get_errors() { - return $this->_errors; - } - - public function get_error_lines($glue="\n") { - $error_lines = ''; - if(count($this->_errors)) { - $error_lines = implode($glue, $this->_errors); - } - return $error_lines; - } - - public function is_valid() { - return count($this->_errors) == 0; - } - -} diff --git a/includes/gateways/mijireh/includes/Order.php b/includes/gateways/mijireh/includes/Order.php deleted file mode 100644 index 4b34070f47d..00000000000 --- a/includes/gateways/mijireh/includes/Order.php +++ /dev/null @@ -1,355 +0,0 @@ -_data = array( - 'partner_id' => null, - 'order_number' => null, - 'mode' => null, - 'status' => null, - 'order_date' => null, - 'ip_address' => null, - 'checkout_url' => null, - 'total' => '', - 'return_url' => '', - 'items' => array(), - 'email' => '', - 'first_name' => '', - 'last_name' => '', - 'meta_data' => array(), - 'tax' => '', - 'shipping' => '', - 'discount' => '', - 'shipping_address' => array(), - 'billing_address' => array(), - 'show_tax' => true - ); - } - - public function __construct($order_number=null) { - $this->_init(); - if(isset($order_number)) { - $this->load($order_number); - } - } - - public function load($order_number) { - if(strlen(Mijireh::$access_key) < 5) { - throw new Mijireh_Exception('missing mijireh access key'); - } - - $rest = new Mijireh_RestJSON(Mijireh::$url); - $rest->setupAuth(Mijireh::$access_key, ''); - try { - $order_data = $rest->get("orders/$order_number"); - $this->copy_from($order_data); - return $this; - } - catch(Mijireh_Rest_BadRequest $e) { - throw new Mijireh_BadRequest($e->getMessage()); - } - catch(Mijireh_Rest_Unauthorized $e) { - throw new Mijireh_Unauthorized("Unauthorized. Please check your api access key"); - } - catch(Mijireh_Rest_NotFound $e) { - throw new Mijireh_NotFound("Mijireh resource not found: " . $rest->last_request['url']); - } - catch(Mijireh_Rest_ClientError $e) { - throw new Mijireh_ClientError($e->getMessage()); - } - catch(Mijireh_Rest_ServerError $e) { - throw new Mijireh_ServerError($e->getMessage()); - } - } - - public function copy_from($order_data) { - foreach($order_data as $key => $value) { - if($key == 'items') { - if(is_array($value)) { - $this->clear_items(); // Clear current items before adding new items. - foreach($value as $item_array) { - $item = new Mijireh_Item(); - $item->copy_from($item_array); - $this->add_item($item); - } - } - } - elseif($key == 'shipping_address') { - if(is_array($value)) { - $address = new Mijireh_Address(); - $address->copy_from($value); - $this->set_shipping_address($address); - } - } - elseif($key == 'billing_address') { - if(is_array($value)) { - $address = new Mijireh_Address(); - $address->copy_from($value); - $this->set_billing_address($address); - } - } - elseif($key == 'meta_data') { - if(is_array($value)) { - $this->clear_meta_data(); // Clear current meta data before adding new meta data - $this->_data['meta_data'] = $value; - } - } - else { - $this->$key = $value; - } - } - - if(!$this->validate()) { - throw new Mijireh_Exception('invalid order hydration: ' . $this->get_errors_lines()); - } - - return $this; - } - - public function create() { - if(strlen(Mijireh::$access_key) < 5) { - throw new Mijireh_Exception('missing mijireh access key'); - } - - if(!$this->validate()) { - $error_message = 'unable to create order: ' . $this->get_error_lines(); - throw new Mijireh_Exception($error_message); - } - - $rest = new Mijireh_RestJSON(Mijireh::$url); - $rest->setupAuth(Mijireh::$access_key, ''); - try { - $result = $rest->post('orders', $this->get_data()); - $this->copy_from($result); - return $this; - } - catch(Mijireh_Rest_BadRequest $e) { - throw new Mijireh_BadRequest($e->getMessage()); - } - catch(Mijireh_Rest_Unauthorized $e) { - throw new Mijireh_Unauthorized("Unauthorized. Please check your api access key"); - } - catch(Mijireh_Rest_NotFound $e) { - throw new Mijireh_NotFound("Mijireh resource not found: " . $rest->last_request['url']); - } - catch(Mijireh_Rest_ClientError $e) { - throw new Mijireh_ClientError($e->getMessage()); - } - catch(Mijireh_Rest_ServerError $e) { - throw new Mijireh_ServerError($e->getMessage()); - } - } - - /** - * If meta_data or shipping_address are empty, exclude them altogether. - */ - public function get_data() { - $data = parent::get_data(); - if(count($data['meta_data']) == 0) { unset($data['meta_data']); } - if(count($data['shipping_address']) == 0) { unset($data['shipping_address']); } - if(count($data['billing_address']) == 0) { unset($data['billing_address']); } - return $data; - } - - /** - * Add the specified item and price to the order. - * Return the total number of items in the order (including the one that was just added) - * - * @param Mijireh_Item|string $name - * @param int $price - * @param int $quantity - * @param string $sku - * @throws Mijireh_Exception - * @return int - */ - public function add_item($name, $price=0, $quantity=1, $sku='') { - $item = ''; - if(is_object($name) && get_class($name) == 'Mijireh_Item') { - $item = $name; - } - else { - $item = new Mijireh_Item(); - $item->name = $name; - $item->price = $price; - $item->quantity = $quantity; - $item->sku = $sku; - } - - if($item->validate()) { - $this->_data['items'][] = $item->get_data(); - return $this->item_count(); - } - else { - $errors = implode(' ', $item->get_errors()); - throw new Mijireh_Exception('unable to add invalid item to order :: ' . $errors); - } - } - - /** - * @param string $key - * @param integer $value - */ - public function add_meta_data($key, $value) { - if(!is_array($this->_data['meta_data'])) { - $this->_data['meta_data'] = array(); - } - $this->_data['meta_data'][$key] = $value; - } - - /** - * Return the value associated with the given key in the order's meta data. - * - * If the key does not exist, return false. - * @param string $key - */ - public function get_meta_value($key) { - $value = false; - if(isset($this->_data['meta_data'][$key])) { - $value = $this->_data['meta_data'][$key]; - } - return $value; - } - - public function item_count() { - $item_count = 0; - if(is_array($this->_data['items'])) { - $item_count = count($this->_data['items']); - } - return $item_count; - } - - public function get_items() { - $items = array(); - foreach($this->_data['items'] as $item_data) { - $item = new Mijireh_Item(); - $item->copy_from($item_data); - } - } - - public function clear_items() { - $this->_data['items'] = array(); - } - - public function clear_meta_data() { - $this->_data['meta_data'] = array(); - } - - public function validate() { - $this->_check_total(); - $this->_check_return_url(); - $this->_check_items(); - return count($this->_errors) == 0; - } - - /** - * Alias for set_shipping_address() - */ - public function set_address(Mijireh_Address $address){ - $this->set_shipping_address($address); - } - - public function set_shipping_address(Mijireh_Address $address) { - if($address->validate()) { - $this->_data['shipping_address'] = $address->get_data(); - } - else { - throw new Mijireh_Exception('invalid shipping address'); - } - } - - public function set_billing_address(Mijireh_Address $address) { - if($address->validate()) { - $this->_data['billing_address'] = $address->get_data(); - } - else { - throw new Mijireh_Exception('invalid shipping address'); - } - } - - /** - * Alias for get_shipping_address() - */ - public function get_address() { - return $this->get_shipping_address(); - } - - public function get_shipping_address() { - $address = false; - if(is_array($this->_data['shipping_address'])) { - $address = new Mijireh_Address(); - $address->copy_from($this->_data['shipping_address']); - } - return $address; - } - - public function get_billing_address() { - $address = false; - if(is_array($this->_data['billing_address'])) { - $address = new Mijireh_Address(); - $address->copy_from($this->_data['billing_address']); - } - return $address; - } - - /** - * The order total must be greater than zero. - * - * Return true if valid, otherwise false. - * - * @return boolean - */ - private function _check_total() { - $is_valid = true; - if($this->_data['total'] <= 0) { - $this->add_error('order total must be greater than zero'); - $is_valid = false; - } - return $is_valid; - } - - /** - * The return url must be provided and must start with http. - * - * Return true if valid, otherwise false - * - * @return boolean - */ - private function _check_return_url() { - $is_valid = false; - if(!empty($this->_data['return_url'])) { - $url = $this->_data['return_url']; - if('http' == strtolower(substr($url, 0, 4))) { - $is_valid = true; - } - else { - $this->add_error('return url is invalid'); - } - } - else { - $this->add_error('return url is required'); - } - return $is_valid; - } - - /** - * An order must contain at least one item - * - * Return true if the order has at least one item, otherwise false. - * - * @return boolean - */ - private function _check_items() { - $is_valid = true; - if(count($this->_data['items']) <= 0) { - $is_valid = false; - $this->add_error('the order must contain at least one item'); - } - return $is_valid; - } - -} diff --git a/includes/gateways/mijireh/includes/Rest.php b/includes/gateways/mijireh/includes/Rest.php deleted file mode 100644 index 64a34f68bd9..00000000000 --- a/includes/gateways/mijireh/includes/Rest.php +++ /dev/null @@ -1,265 +0,0 @@ - true, // return result instead of echoing - CURLOPT_SSL_VERIFYPEER => false, // stop cURL from verifying the peer's certificate - CURLOPT_MAXREDIRS => 10 // but don't redirect more than 10 times - ); - - public $base_url; - - public $last_response; - public $last_request; - - public $throw_exceptions = true; - - public function __construct($base_url, $curl_options=null) { - if (!function_exists('curl_init')) { - throw new Exception('CURL module not available! Mijireh_Rest requires CURL. See http://php.net/manual/en/book.curl.php'); - } - - if(isset($curl_options) && is_array($curl_options)) { - foreach($curl_options as $key => $value) { - - if($key == 'CURLOPT_FOLLOWLOCATION') { - // only enable CURLOPT_FOLLOWLOCATION if safe_mode and open_base_dir are not in use - if(ini_get('open_basedir') == '' && !ini_get('safe_mode')) { - $this->curl_opts['CURLOPT_FOLLOWLOCATION'] = true; - } - } - else { - $this->curl_opts[$key] = $value; - } - - } - } - - - $this->base_url = $base_url; - } - - // $auth can be 'basic' or 'digest' - - /** - * @param string $pass - */ - public function setupAuth($user, $pass, $auth = 'basic') { - $this->curl_opts[CURLOPT_HTTPAUTH] = constant('CURLAUTH_'.strtoupper($auth)); - $this->curl_opts[CURLOPT_USERPWD] = $user . ":" . $pass; - } - - public function get($url) { - $curl = $this->prepRequest($this->curl_opts, $url); - $body = $this->doRequest($curl); - - $body = $this->processBody($body); - - return $body; - } - - /** - * @param string $data - * @param string $url - */ - public function post($url, $data, $headers=array()) { - $data = (is_array($data)) ? http_build_query($data) : $data; - - $curl_opts = $this->curl_opts; - $curl_opts[CURLOPT_CUSTOMREQUEST] = 'POST'; - $headers[] = 'Content-Length: '.strlen($data); - $curl_opts[CURLOPT_HTTPHEADER] = $headers; - $curl_opts[CURLOPT_POSTFIELDS] = $data; - - $curl = $this->prepRequest($curl_opts, $url); - $body = $this->doRequest($curl); - - $body = $this->processBody($body); - - return $body; - } - - /** - * @param string $data - */ - public function put($url, $data, $headers=array()) { - $data = (is_array($data)) ? http_build_query($data) : $data; - - $curl_opts = $this->curl_opts; - $curl_opts[CURLOPT_CUSTOMREQUEST] = 'PUT'; - $headers[] = 'Content-Length: '.strlen($data); - $curl_opts[CURLOPT_HTTPHEADER] = $headers; - $curl_opts[CURLOPT_POSTFIELDS] = $data; - - $curl = $this->prepRequest($curl_opts, $url); - $body = $this->doRequest($curl); - - $body = $this->processBody($body); - - return $body; - } - - public function delete($url) { - $curl_opts = $this->curl_opts; - $curl_opts[CURLOPT_CUSTOMREQUEST] = 'DELETE'; - - $curl = $this->prepRequest($curl_opts, $url); - $body = $this->doRequest($curl); - - $body = $this->processBody($body); - - return $body; - } - - public function lastBody() { - return $this->last_response['body']; - } - - public function lastStatus() { - return $this->last_response['meta']['http_code']; - } - - protected function processBody($body) { - // Override this in classes that extend Mijireh_Rest. - // The body of every GET/POST/PUT/DELETE response goes through - // here prior to being returned. - return $body; - } - - /** - * @return string|null - */ - protected function processError($body) { - // Override this in classes that extend Mijireh_Rest. - // The body of every erroneous (non-2xx/3xx) GET/POST/PUT/DELETE - // response goes through here prior to being used as the 'message' - // of the resulting Mijireh_Rest_Exception - return $body; - } - - - protected function prepRequest($opts, $url) { - if (strncmp($url, $this->base_url, strlen($this->base_url)) != 0) { - $url = $this->base_url . $url; - } - $curl = curl_init($url); - - foreach ($opts as $opt => $val) { - @curl_setopt($curl, $opt, $val); - } - - $this->last_request = array( - 'url' => $url - ); - - if (isset($opts[CURLOPT_CUSTOMREQUEST])) - $this->last_request['method'] = $opts[CURLOPT_CUSTOMREQUEST]; - else - $this->last_request['method'] = 'GET'; - - if (isset($opts[CURLOPT_POSTFIELDS])) - $this->last_request['data'] = $opts[CURLOPT_POSTFIELDS]; - - return $curl; - } - - /** - * @param resource $curl - */ - private function doRequest($curl) { - - $body = curl_exec($curl); - $meta = curl_getinfo($curl); - - $this->last_response = array( - 'body' => $body, - 'meta' => $meta - ); - - curl_close($curl); - - $this->checkLastResponseForError(); - - return $body; - } - - protected function checkLastResponseForError() { - if ( !$this->throw_exceptions) - return; - - $meta = $this->last_response['meta']; - $body = $this->last_response['body']; - - if (!$meta) - return; - - $err = null; - switch ($meta['http_code']) { - case 400: - throw new Mijireh_Rest_BadRequest($this->processError($body)); - break; - case 401: - throw new Mijireh_Rest_Unauthorized($this->processError($body)); - break; - case 403: - throw new Mijireh_Rest_Forbidden($this->processError($body)); - break; - case 404: - throw new Mijireh_Rest_NotFound($this->processError($body)); - break; - case 405: - throw new Mijireh_Rest_MethodNotAllowed($this->processError($body)); - break; - case 409: - throw new Mijireh_Rest_Conflict($this->processError($body)); - break; - case 410: - throw new Mijireh_Rest_Gone($this->processError($body)); - break; - case 422: - // Unprocessable Entity -- see http://www.iana.org/assignments/http-status-codes - // This is now commonly used (in Rails, at least) to indicate - // a response to a request that is syntactically correct, - // but semantically invalid (for example, when trying to - // create a resource with some required fields missing) - throw new Mijireh_Rest_InvalidRecord($this->processError($body)); - break; - default: - if ($meta['http_code'] >= 400 && $meta['http_code'] <= 499) - throw new Mijireh_Rest_ClientError($this->processError($body)); - elseif ($meta['http_code'] >= 500 && $meta['http_code'] <= 599) - throw new Mijireh_Rest_ServerError($this->processError($body)); - elseif (!$meta['http_code'] || $meta['http_code'] >= 600) { - throw new Mijireh_Rest_UnknownResponse($this->processError($body)); - } - } - } -} - - -class Mijireh_Rest_Exception extends Exception { } -class Mijireh_Rest_UnknownResponse extends Mijireh_Rest_Exception { } - -/* 401-499 */ class Mijireh_Rest_ClientError extends Mijireh_Rest_Exception {} -/* 400 */ class Mijireh_Rest_BadRequest extends Mijireh_Rest_ClientError {} -/* 401 */ class Mijireh_Rest_Unauthorized extends Mijireh_Rest_ClientError {} -/* 403 */ class Mijireh_Rest_Forbidden extends Mijireh_Rest_ClientError {} -/* 404 */ class Mijireh_Rest_NotFound extends Mijireh_Rest_ClientError {} -/* 405 */ class Mijireh_Rest_MethodNotAllowed extends Mijireh_Rest_ClientError {} -/* 409 */ class Mijireh_Rest_Conflict extends Mijireh_Rest_ClientError {} -/* 410 */ class Mijireh_Rest_Gone extends Mijireh_Rest_ClientError {} -/* 422 */ class Mijireh_Rest_InvalidRecord extends Mijireh_Rest_ClientError {} - -/* 500-599 */ class Mijireh_Rest_ServerError extends Mijireh_Rest_Exception {} diff --git a/includes/gateways/mijireh/includes/RestJSON.php b/includes/gateways/mijireh/includes/RestJSON.php deleted file mode 100644 index 011f21744d5..00000000000 --- a/includes/gateways/mijireh/includes/RestJSON.php +++ /dev/null @@ -1,30 +0,0 @@ -ID ); - // Tables $wpdb->query( "DROP TABLE IF EXISTS " . $wpdb->prefix . "woocommerce_attribute_taxonomies" ); $wpdb->query( "DROP TABLE IF EXISTS " . $wpdb->prefix . "woocommerce_downloadable_product_permissions" );