PluginProbe
MakeCommerce for WooCommerce / 2.6.2
MakeCommerce for WooCommerce v2.6.2
4.1.0 4.0.8 trunk 1.0 1.0.1 1.0.2 1.0.3 1.1.0 1.1.1 1.1.2 1.1.3 1.1.4 1.1.5 1.1.6 1.1.7 2.0.0 2.1.0 2.1.1 2.1.2 2.1.3 2.1.4 2.1.5 2.2.0 2.2.1 2.2.2 All 96 releases
← All changes | makecommerce.php +158 -21 2.2.12.6.2 View file →
@@ -1,12 +1,14 @@
1 1 <?php
2 2 /*
3 3 Plugin Name: MakeCommerce for WooCommerce
4 4 Description: Adds MakeCommerce payment gateway and Itella/Omniva parcel machine shipping methods to Woocommerce checkout
5 - Version: 2.2.1
5 + Version: 2.6.2
6 6 Author: Maksekeskus AS
7 7 Author URI: https://MakeCommerce.net/
8 8 Text Domain: wc_makecommerce_domain
9 + WC requires at least: 3.0
10 + WC tested up to: 4.5.1
9 11 */
10 12
11 13 if (!defined('ABSPATH')) {
12 14 exit; // Exit if accessed directly.
@@ -49,8 +51,11 @@
49 51 type varchar(10) NOT NULL,
50 52 country char(2) NOT NULL,
51 53 name varchar(25) NOT NULL,
52 54 url varchar(250) NOT NULL,
55 + logo_url varchar(250),
56 + min_amount mediumint(9),
57 + max_amount mediumint(9),
53 58 UNIQUE KEY id (id)
54 59 ) $charset;";
55 60
56 61 require_once( ABSPATH . 'wp-admin/includes/upgrade.php' );
@@ -73,9 +78,9 @@
73 78 // Assign schedule if not set, update compatible no need to reactivate, format('U') php 5.2 compatible
74 79 // Assigns task at 23.59.59 by local time, task runs if time has passed and somebody navigates the site
75 80 if (! wp_next_scheduled ( 'mc_banklinks_update_cron' )) {
76 81 $date = new DateTime();
77 - $date->setTime(04,10,00);
82 + $date->setTime(rand(0,23),rand(0,59),00);
78 83 $timestamp = intval($date->format('U'));
79 84 //$local = 3600 * intval(get_option('gmt_offset'));
80 85 //wp_schedule_event($timestamp - $local, 'twicedaily', 'mc_banklinks_update_cron');
81 86 wp_schedule_event($timestamp, 'twicedaily', 'mc_banklinks_update_cron');
@@ -85,13 +90,36 @@
85 90 require_once('includes/vendor/autoload.php');
86 91 require_once('includes/Maksekeskus.php');
87 92 }
88 93
89 - function mk_check_payment() {
94 + function mk_check_payment() {
90 95
91 96 global $woocommerce;
92 97 $api = mk_get_api();
93 98
99 + //set the correct language
100 + if (isset($_GET["lang1"])) {
101 + //set polylang language
102 + if (function_exists('pll_current_language')) {
103 + //get the correct locale name from polylang
104 + $polylangLangs = pll_the_languages(array('raw' => 1));
105 + if (isset($polylangLangs[$_GET["lang1"]])) {
106 + $locale = str_replace("-", "_", $polylangLangs[$_GET["lang1"]]["locale"]);
107 + }
108 +
109 + //first change WP language, this triggers some polylang hooks
110 + switch_to_locale($locale);
111 +
112 + //second, change WPML language?!?! this ensures the correct landingpage (works with polylang)
113 + do_action('wpml_switch_language', $_GET["lang1"]);
114 + } else {
115 + if (function_exists('icl_object_id')) { //weirdly enough icl_object ID exists in this point of the request. It doesn't in other locations...
116 + //set wpml language
117 + do_action('wpml_switch_language', $_GET["lang1"]);
118 + }
119 + }
120 + }
121 +
94 122 $returnUrl = home_url();
95 123
96 124 $request = stripslashes_deep($_POST);
97 125 if ($api->verifyMac($request)) {
@@ -128,9 +156,9 @@
128 156 $paymentStatus = $transaction->status;
129 157
130 158 if ($paymentStatus == 'PENDING') {
131 159 $paymentRequest = array(
132 - 'amount' => $transaction->amount,
160 + 'amount' => (string)sprintf("%.2f", $transaction->amount),
133 161 'currency' => $transaction->currency,
134 162 'token' => $data['token']['id']
135 163 );
136 164 $payment = $api->createPayment($transactionId, $paymentRequest);
@@ -150,31 +178,57 @@
150 178 if (!$reference) { return $returnUrl; }
151 179
152 180 $order = new WC_Order($reference);
153 181 // if we din't find the Order, we send user to shop landing-page. TODO: could be improved
154 - if (!$order->id) { return $returnUrl; }
182 + if (!$order->get_id()) { return $returnUrl; }
155 183
156 184 $returnUrl = $order->get_checkout_order_received_url();
157 185
186 + if ($paymentStatus == 'CANCELLED' || $paymentStatus == 'COMPLETED') {
187 + //get transaction to update the payment method.
188 + $transaction = $api->getTransaction($transactionId);
189 +
190 + //make sure the payment method is the same for simplecheckout and normal version.
191 + $paymentMethod = "";
192 + if (isset($transaction->type) && isset($transaction->method)) {
193 + if ($transaction->type == "card") {
194 + $paymentMethod = "card_".$transaction->method;
195 + } else {
196 + if (isset($transaction->country)) {
197 + $paymentMethod = $transaction->country."_".$transaction->method;
198 + }
199 + }
200 + }
201 +
202 + //update _makecommerce_preselected_method
203 + update_post_meta($order->get_id(), '_makecommerce_preselected_method', $paymentMethod);
204 + }
205 +
158 206 switch($paymentStatus) {
159 207
160 208 case 'CANCELLED':
161 209 $order->update_status( 'cancelled' );
162 210 wc_add_notice(__('Payment transaction cancelled', 'wc_makecommerce_domain'), 'error');
163 - $returnUrl = $woocommerce->cart->get_cart_url();
211 + $returnUrl = wc_get_cart_url();
164 212 break;
165 213
166 214 case 'COMPLETED':
167 215 $orderNote = array();
168 216 $orderNote[] = __('Transaction ID', 'wc_makecommerce_domain') . ': <a target=_blank href="'.$api->getEnvUrls()->merchantUrl.'/merchant/shop/deals/detail.html?id='. $transactionId .'">'.$transactionId.'</a>';
169 - $orderNote[] = __('Payment option', 'wc_makecommerce_domain') . ': ' . get_post_meta($order->id, '_makecommerce_preselected_method', true);
217 + $orderNote[] = __('Payment option', 'wc_makecommerce_domain') . ': ' . get_post_meta($order->get_id(), '_makecommerce_preselected_method', true);
170 218 $order->add_order_note(implode("\r\n", $orderNote));
219 + if (!empty($data['token']) && !empty($data['token']['multiuse'])) {
220 + update_post_meta($order->get_id(), '_makecommerce_payment_token', $data['token']['id']);
221 + update_post_meta($order->get_id(), '_makecommerce_payment_token_valid_until', $data['token']['valid_until']);
222 + }
171 223
224 + if (isset($_GET['lang1'])) {
225 + $order->update_meta_data('wpml_language', $_GET["lang1"]);
226 + }
227 +
172 228 $order->payment_complete( $transactionId );
173 - $order->update_status( 'processing' );
174 229 $woocommerce->cart->empty_cart();
175 230 break;
176 -
177 231 }
178 232
179 233 return $returnUrl;
180 234 }
@@ -361,17 +415,17 @@
361 415 'title' => __('SmartPOST Parcel Machine', 'wc_makecommerce_domain'),
362 416 'desc' => __('enable SmartPOST parcel machines shipping method', 'wc_makecommerce_domain').' ('. sprintf(__('<a href="%s">module settings</a>', 'wc_makecommerce_domain'), admin_url('admin.php?page=wc-settings&tab=shipping&section=parcelmachine_smartpost')).')',
363 417 'class' => '',
364 418 ),
365 - // array(
366 - // 'id' => 'mk_transport_apt_dpd',
367 - // 'type' => 'checkbox',
368 - // 'default' => 'no',
369 - // 'title' => __('DPD Pickup Network', 'wc_makecommerce_domain'),
370 - // 'desc' => __('enable DPD Pickup network shipping method', 'wc_makecommerce_domain').' ('. sprintf(__('<a href="%s">module settings</a>', 'wc_makecommerce_domain'), admin_url('admin.php?page=wc-settings&tab=shipping&section=parcelmachine_dpd')).')',
371 - // 'class' => '',
372 - // ),
373 419 array(
420 + 'id' => 'mk_transport_apt_dpd',
421 + 'type' => 'checkbox',
422 + 'default' => 'no',
423 + 'title' => __('DPD', 'wc_makecommerce_domain') . ' ' . __('parcel machine', 'wc_makecommerce_domain'),
424 + 'desc' => __('enable DPD parcel machine shipping method', 'wc_makecommerce_domain').' ('. sprintf(__('<a href="%s">module settings</a>', 'wc_makecommerce_domain'), admin_url('admin.php?page=wc-settings&tab=shipping&section=parcelmachine_dpd')).')',
425 + 'class' => '',
426 + ),
427 + array(
374 428 'id' => 'mk_transport_courier_omniva',
375 429 'type' => 'checkbox',
376 430 'default' => 'yes',
377 431 'title' => __('Omniva Courier', 'wc_makecommerce_domain'),
@@ -393,8 +447,15 @@
393 447 'desc' => __('enable SimpleCheckout&trade; Checkout method', 'wc_makecommerce_domain').' ('. sprintf(__('<a href="%s">module settings</a>', 'wc_makecommerce_domain'), admin_url('admin.php?page=wc-settings&tab=checkout&section=makecommerce_sc')).')',
394 448 'class' => '',
395 449 ),
396 450 array(
451 + 'id' => 'mk_product_slice',
452 + 'type' => 'checkbox',
453 + 'title' => __('Indivy Slice 3 information in product view', 'wc_makecommerce_domain'),
454 + 'desc' => __('enable Indivy Slice 3 in product view', 'wc_makecommerce_domain'),
455 + 'class' => '',
456 + ),
457 + array(
397 458 'id' => 'mk_javascript_ui',
398 459 'type' => 'api_javascript_ui',
399 460 ),
400 461 array('type' => 'sectionend', 'id' => 'mk_api_settings')
@@ -400,8 +461,17 @@
400 461 array('type' => 'sectionend', 'id' => 'mk_api_settings')
401 462 );
402 463 }
403 464
465 + function mk_wc_version($version) {
466 + global $woocommerce;
467 + if ( version_compare( $woocommerce->version, "3.4.0", ">=" ) ) {
468 + return true;
469 + } else {
470 + return false;
471 + }
472 + }
473 +
404 474 function mk_admin_save_api_settings() {
405 475 // reload banklinks
406 476 global $current_section;
407 477 if ($current_section !== 'mk_api') {
@@ -409,17 +479,55 @@
409 479 }
410 480 update_mc_banklinks();
411 481 }
412 482
413 - function mk_admin_plugin_settings_link($links) {
414 - $settings_link = '<a href="admin.php?page=wc-settings&tab=api&section=mk_api">API '.__('Settings').'</a>';
415 - array_unshift($links, $settings_link);
416 - return $links;
483 + function mk_admin_plugin_settings_link($links) {
484 + if (mk_wc_version("3.4.0"))
485 + $settings_link = '<a href="admin.php?page=wc-settings&tab=advanced&section=mk_api">API '.__('Settings').'</a>';
486 + else
487 + $settings_link = '<a href="admin.php?page=wc-settings&tab=api&section=mk_api">API '.__('Settings').'</a>';
488 + array_unshift($links, $settings_link);
489 + return $links;
417 490 }
491 +
492 + function wc_mc_shop_slice_button() {
493 + if (get_option('mk_product_slice', 'no') == 'yes') {
494 + global $product;
495 + // $price_excl_tax = wc_get_price_excluding_tax( $product ); // price without VAT
496 + $price_incl_tax = wc_get_price_including_tax( $product ); // price with VAT
497 + global $wpdb;
498 + global $mkDbTable;
499 + $tableName = $wpdb->prefix . $mkDbTable;
500 + $methods = $wpdb->get_results('SELECT * FROM '.$tableName);
501 + $slice = false;
502 + if(count($methods)) {
503 + foreach ($methods as $method) {
504 + if ($method->name =="slice") {
505 + if ( $price_incl_tax >= $method->min_amount ) {
506 + if ( $price_incl_tax <= $method->max_amount ) {
507 + $slice = true;
508 + }
509 + }
510 + }
511 + }
512 + }
513 + if ($slice == true) {
514 + echo '<div style="width:100%; margin-top: 20px; margin-bottom: auto;"><img src="'.plugins_url('/images/slice_logo_dark_176x62.svg', __FILE__).'" width="88" weight="31"/>&nbsp;&nbsp;Osta kohe, maksa hiljem. Kolmes võrdses osas 3 x '.sprintf("%.2f",$price_incl_tax/3).' €</div>'; // sprintf("%.2f",$price_incl_tax/3).' in month
515 + }
516 + }
517 + }
518 + // Slice Promo 1
519 + add_action( 'woocommerce_after_add_to_cart_button', 'wc_mc_shop_slice_button', 20 );
520 +
521 + // if (mk_wc_version("3.4.0")) {
522 + add_filter('woocommerce_get_settings_advanced', 'mk_admin_api_settings', 10, 2);
523 + add_action('woocommerce_get_sections_advanced', 'mk_admin_add_api_settings');
418 524 add_filter('woocommerce_get_settings_api', 'mk_admin_api_settings', 10, 2);
525 + // } else {
419 526 add_action('woocommerce_get_sections_api', 'mk_admin_add_api_settings');
420 527 add_action('woocommerce_settings_saved', 'mk_admin_save_api_settings', 30, 0);
421 528 add_filter("plugin_action_links_".plugin_basename(__FILE__), 'mk_admin_plugin_settings_link' );
529 + // }
422 530
423 531 function __get_logo_html() {
424 532 return '<div class="makecommerce-info">'.
425 533 '<div class="makecommerce-logo">'.
@@ -431,5 +539,34 @@
431 539 '<div class="makecommerce-link"><a target="_blank" href="http://maksekeskus.ee">maksekeskus.ee</a></div>'.
432 540 '</div>'.
433 541 '</div>';
434 542 }
543 +
544 + /* add new column (makecommerce_payment_method) to orders list */
545 + function wc_makecommerce_payment_method_order_column($columns)
546 + {
547 + $columns['makecommerce_payment_method'] = __('Payment method (MC)');
548 + return $columns;
549 + }
550 +
551 + add_filter('manage_edit-shop_order_columns', 'wc_makecommerce_payment_method_order_column');
552 +
553 + // Make custom column sortable
554 + add_filter( "manage_edit-shop_order_sortable_columns", 'makecommerce_payment_method_sortable' );
555 + function makecommerce_payment_method_sortable($columns)
556 + {
557 + $meta_key = 'makecommerce_payment_method';
558 + return wp_parse_args(array('makecommerce_payment_method' => $meta_key), $columns);
559 + }
560 +
561 + /* fill content for makecommerce_payment_method */
562 + function wc_makecommerce_payment_method_order_column_content($column)
563 + {
564 + global $post;
565 +
566 + if ('makecommerce_payment_method' === $column) {
567 + echo get_post_meta($post->ID, '_makecommerce_preselected_method', true);
568 + }
569 + }
570 +
571 + add_action('manage_shop_order_posts_custom_column', 'wc_makecommerce_payment_method_order_column_content');
435 572 }