PluginProbe
MakeCommerce for WooCommerce / 2.6.0
MakeCommerce for WooCommerce v2.6.0
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 +309 -2726 2.0.02.6.0 View file →
@@ -1,23 +1,41 @@
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.0.0
5 + Version: 2.6.0
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.3.1
9 11 */
10 12
11 -if ( ! defined( 'ABSPATH' ) ) {
13 +if (!defined('ABSPATH')) {
12 14 exit; // Exit if accessed directly.
13 15 }
14 16
15 -if ( in_array( 'woocommerce/woocommerce.php', apply_filters( 'active_plugins', get_option( 'active_plugins' ) ) ) ) {
17 +include_once(ABSPATH.'wp-admin/includes/plugin.php');
18 +if (is_plugin_active('woocommerce/woocommerce.php')) {
16 19
20 + define('WC_MC_VERSION', 2.0);
17 21
18 - define('WC_MC_VERSION', 2.0);
22 + $enable_experimental = get_option('mk_checkout_sco', 'no');
23 + if ($enable_experimental === 'yes') {
24 + require_once(__DIR__.'/makecommerce-simplecheckout.php');
25 + }
26 + require_once(__DIR__.'/makecommerce-transport.php');
27 + require_once(__DIR__.'/makecommerce-payment.php');
19 28
29 + if (is_admin() && !extension_loaded('curl')) {
30 + add_action('admin_notices', function(){
31 + $class = 'notice notice-error';
32 + $message = __( 'You have enabled MakeCommerce module but it seems that you don\'t have CURL enabled. This way MakeCommerce unfortunately does not work!', 'wc_makecommerce_domain');
33 + printf( '<div class="%1$s"><p>%2$s</p></div>', esc_attr( $class ), esc_html( $message ) );
34 + });
35 + }
36 +
37 +
20 38 global $mkDbTable;
21 39 $mkDbTable = 'mc_banklinks';
22 40
23 41 function mc_install() {
@@ -33,8 +51,11 @@
33 51 type varchar(10) NOT NULL,
34 52 country char(2) NOT NULL,
35 53 name varchar(25) NOT NULL,
36 54 url varchar(250) NOT NULL,
55 + logo_url varchar(250),
56 + min_amount mediumint(9),
57 + max_amount mediumint(9),
37 58 UNIQUE KEY id (id)
38 59 ) $charset;";
39 60
40 61 require_once( ABSPATH . 'wp-admin/includes/upgrade.php' );
@@ -53,2160 +74,223 @@
53 74 register_deactivation_hook(__FILE__, 'mc_uninstall');
54 75
55 76 // WP schedule callable action
56 77 add_action('mc_banklinks_update_cron', 'update_mc_banklinks');
78 + // Assign schedule if not set, update compatible no need to reactivate, format('U') php 5.2 compatible
79 + // Assigns task at 23.59.59 by local time, task runs if time has passed and somebody navigates the site
80 + if (! wp_next_scheduled ( 'mc_banklinks_update_cron' )) {
81 + $date = new DateTime();
82 + $date->setTime(rand(0,23),rand(0,59),00);
83 + $timestamp = intval($date->format('U'));
84 + //$local = 3600 * intval(get_option('gmt_offset'));
85 + //wp_schedule_event($timestamp - $local, 'twicedaily', 'mc_banklinks_update_cron');
86 + wp_schedule_event($timestamp, 'twicedaily', 'mc_banklinks_update_cron');
87 + }
57 88
58 89 if (!class_exists('wc_makecommerce_domain')) {
59 - require_once('includes/Api.php');
90 + require_once('includes/vendor/autoload.php');
91 + require_once('includes/Maksekeskus.php');
60 92 }
61 -
62 93
63 - function woocommerce_payment_makecommerce_init() {
94 + function mk_check_payment() {
64 95
65 - load_plugin_textdomain('wc_makecommerce_domain', false, dirname(plugin_basename(__FILE__)) . '/');
66 -
67 - class woocommerce_makecommerce extends WC_Payment_Gateway {
68 -
69 - const MC_CANCELLED = 'CANCELLED';
70 - const MC_COMPLETED = 'COMPLETED';
71 - const MC_DEPOSITED = 'DEPOSITED';
72 -
73 - const MC_PART_REFUNDED = 'PART_REFUNDED';
74 - const MC_REFUNDED = 'REFUNDED';
75 -
76 - const module_name = 'MakeCommerce';
77 - const api_url = 'https://api.maksekeskus.ee/v1/';
78 - const gateway_url = 'https://payment.maksekeskus.ee/pay/1/signed.html';
79 - const gateway_url_static = 'https://payment.maksekeskus.ee/checkout/dist/';
80 - const fo_url = 'https://merchant.maksekeskus.ee/';
81 - const test_api_url = 'https://api-test.maksekeskus.ee/v1/';
82 - const test_gateway_url = 'https://payment-test.maksekeskus.ee/pay/1/signed.html';
83 - const test_gateway_url_static = 'https://payment-test.maksekeskus.ee/checkout/dist/';
84 - const test_fo_url = 'https://merchant-test.maksekeskus.ee/';
85 - const billing_descriptor_dba = '';
86 - const currencies_allowed = 'EUR';
87 - const module_homepage_url = 'https://maksekeskus.ee/en/integration-modules/makecommerce-woocommerce-payment-plugin/';
88 - const testenv_homepage_url = 'http://maksekeskus.ee/en/for-developers/test-environment/';
89 -
90 - public $id = 'makecommerce';
91 - public $version = '2.0.0';
92 -
93 - public $return_url;
94 - public $return_url_cancel;
95 -
96 - public $return_url_cc;
97 -
98 - protected $_shop_id;
99 - protected $_api_key_secret;
100 - protected $_api_key_public;
101 -
102 - protected $_gateway_url_static;
103 -
104 - protected $_banklinks = array();
105 - protected $_banklinks_grouped;
106 - protected $_cards = array();
107 -
108 - protected $_api;
109 -
110 - protected $_init;
111 -
112 - public function __construct($init = false) {
113 -
114 - $this->_init = $init;
115 -
116 - $this->return_url = site_url('/?makecommerce_return=1');
117 - $this->return_url_cancel = site_url('/?makecommerce_return=1');
118 -
119 - $this->return_url_cc = site_url('/?makecommerce_return=2');
120 -
121 - // Load the form fields.
122 - $this->init_form_fields();
123 -
124 - // Load the settings.
125 - $this->init_settings();
126 -
127 - $this->initBanklinks();
128 -
129 - $this->title = $this->settings['ui_widget_title'];
130 - if (defined('ICL_LANGUAGE_CODE') && !empty($this->settings['ui_widget_title_'.ICL_LANGUAGE_CODE])) {
131 - $this->title = $this->settings['ui_widget_title_'.ICL_LANGUAGE_CODE];
132 - }
133 - $this->method_title = 'MakeCommerce';
134 - $this->description = true;
96 + global $woocommerce;
97 + $api = mk_get_api();
135 98
136 - $this->_api = mk_get_api();
137 - if (!$this->_api && $this->_init) {
138 - add_action( 'admin_notices', array(&$this, 'makecommerce_api_info_missing') );
99 + //set the correct language
100 + if (isset($_GET["lang1"])) {
101 + //set wpml language
102 + if (function_exists('icl_object_id')) {
103 + do_action('wpml_switch_language', $_GET["lang1"]);
104 + } else {
105 + //set polylang language
106 + if (function_exists('pll_current_language')) {
107 + //not implemented yet
139 108 }
140 -
141 - if(get_option('mk_api_type', false) == 'live') {
142 - $this->_gateway_url_static = self::gateway_url_static;
143 - } elseif (get_option('mk_api_type', false) == 'test') {
144 - $this->_gateway_url_static = self::test_gateway_url_static;
145 - }
146 -
147 - $this->supports = array(
148 - 'products',
149 - 'refunds',
150 - );
151 -
152 - add_filter('query_vars', array(&$this, 'makecommerce_return_trigger'));
153 - add_action('template_redirect', array(&$this, 'makecommerce_return_trigger_check'));
154 -
155 - add_action( 'wp_ajax_makecommerce_pay_token', array(&$this, 'makecommerce_pay_token') );
156 - add_action( 'wp_ajax_nopriv_makecommerce_pay_token', array(&$this, 'makecommerce_pay_token') );
157 -
158 - if($this->_init == false) {
159 - add_action('woocommerce_update_options_payment_gateways', array(&$this, 'process_admin_options'));
160 - add_action('woocommerce_update_options_payment_gateways_' . $this->id, array(&$this, 'process_admin_options'));
161 -
162 - add_action('woocommerce_receipt_' . $this->id, array(&$this, 'receipt_page'));
163 - add_action('woocommerce_admin_order_data_after_order_details', array(&$this, 'admin_order_page'), 10, 1);
164 -
165 - wp_enqueue_script('jquery');
166 - wp_enqueue_style('makecommerce', plugins_url('/css/makecommerce.css', __FILE__), array(), $this->version);
167 - }
168 - if (is_admin()) {
169 - add_action( 'wp_ajax_mc_banklinks_reload', array(&$this, 'mc_banklinks_reload') );
170 - require_once(ABSPATH.'wp-admin/includes/plugin.php');
171 - $wc_version = get_plugin_data(__DIR__.'/../woocommerce/woocommerce.php');
172 - if ((double)$wc_version['Version'] < 2.6) {
173 - function sample_admin_notice__error() {
174 - $class = 'notice notice-error';
175 - $wc_version = get_plugin_data(__DIR__.'/../woocommerce/woocommerce.php');
176 - $message = sprintf(__( 'Makecommerce plugin needs at least <strong>WooCommerce 2.6</strong> to function correctly. Please update yours (currently %s)', 'wc_makecommerce_domain' ), $wc_version['Version']);
177 - printf( '<div class="%1$s"><p>%2$s</p></div>', $class, $message );
178 - }
179 - add_action( 'admin_notices', 'sample_admin_notice__error' );
180 - }
181 - }
182 -
183 109 }
110 + }
111 +
112 + $returnUrl = home_url();
113 +
114 + $request = stripslashes_deep($_POST);
115 + if ($api->verifyMac($request)) {
116 + $data = $api->extractRequestData($request);
117 + $reference = false;
184 118
185 - public function get_title() {
186 - return $this->title;
119 + if (!empty($data['error']) ) {
120 + wc_add_notice(__('Payment failed', 'wc_makecommerce_domain'), 'error');
121 + return $returnUrl;
187 122 }
188 -
189 - public function makecommerce_api_info_missing() {
190 - ?>
191 - <div class="notice notice-error is-dismissible">
192 - <p>
193 - <?php echo __('You have not entered the Shop ID and keys for the MakeCommerce payment module. The module will not work without them.', 'wc_makecommerce_domain'); ?>
194 - <a href="<?php echo admin_url('admin.php?page=wc-settings&tab=api&section=mk_api'); ?>"><?php echo __('Click here to enter them', 'wc_makecommerce_domain'); ?></a>
195 - </p>
196 - </div>
197 - <?php
198 - }
199 -
200 - public function makecommerce_banklinks_list_empty() {
201 - ?>
202 - <div class="notice notice-error is-dismissible">
203 - <p>
204 - <?php echo __('The payment methods list for MakeCommerce payment module is empty.', 'wc_makecommerce_domain'); ?>
205 - <a href="<?php echo admin_url('admin.php?page=wc-settings&tab=checkout&section=makecommerce'); ?>"><?php echo __('Go to the settings to update them', 'wc_makecommerce_domain'); ?></a>
206 - </p>
207 - </div>
208 - <?php
209 - }
210 -
211 - public function makecommerce_banklinks_list_type_notice() {
212 - ?>
213 - <div class="notice notice-error is-dismissible">
214 - <p>
215 - <?php echo __('You have changed the environment for MakeCommerce payment module. The payment methods list has been loaded for a different environment.', 'wc_makecommerce_domain'); ?>
216 - <a href="<?php echo admin_url('admin.php?page=wc-settings&tab=checkout&section=makecommerce'); ?>"><?php echo __('Go to the settings to update them', 'wc_makecommerce_domain'); ?></a>
217 - </p>
218 - </div>
219 - <?php
220 - }
221 -
222 - /**
223 - * Initialise Gateway Settings Form Fields
224 - */
225 - public function init_form_fields() {
226 123
227 - if ( function_exists('icl_object_id') && ! defined( 'POLYLANG_VERSION' ) ) {
228 - $languages = apply_filters('wpml_active_languages', NULL, 'skip_missing=0');
229 - }
230 - else if ( defined( 'POLYLANG_VERSION' ) ) {
231 - $pl_locales = pll_languages_list( array('fields'=>'locale') );
232 - foreach ($pl_locales as $key => $locale_pl ) {
233 - $language = array( 'id' => $key,
234 - 'code' => $locale_pl) ;
235 - $languages[$locale_pl] = $language;
236 - }
237 - }
238 -
239 - $this->form_fields = array();
240 - $this->form_fields['header'] = array(
241 - 'type' => 'mc_header',
242 - );
243 - $this->form_fields['active'] = array(
244 - 'title' => __('Enable/Disable', 'wc_makecommerce_domain'),
245 - 'type' => 'checkbox',
246 - 'label' => __('Enable MakeCommerce payments', 'wc_makecommerce_domain'),
247 - 'default' => 'no'
248 - );
249 - $this->form_fields['api_title'] = array(
250 - 'title' => __('MakeCommerce API', 'wc_makecommerce_domain'),
251 - 'description' => sprintf(__('Go to <a href="%s">API settings</a> to fill in the credentials', 'wc_makecommerce_domain'), admin_url('admin.php?page=wc-settings&tab=api&section=mk_api')),
252 - 'type' => 'title',
253 - );
254 - $this->form_fields['ui_title'] = array(
255 - 'title' => '<br>'.__('User Interface', 'wc_makecommerce_domain'),
256 - 'type' => 'title',
257 - 'class' => 'ui-identifier',
258 - );
259 - $this->form_fields['ui_open_by_default'] = array(
260 - 'title' => __('Set as default selection', 'wc_makecommerce_domain'),
261 - 'label' => __('MakeCommerce payments widget will be selected by default', 'wc_makecommerce_domain'),
262 - 'type' => 'checkbox',
263 - 'default' => 'yes',
264 - 'class' => 'ui-identifier',
265 - );
266 - $this->form_fields['ui_mode'] = array(
267 - 'title' => __('Display MC payment channels as', 'wc_makecommerce_domain'),
268 - 'type' => 'mc_hidden',
269 - 'default' => 'widget',
270 - 'options' => array(
271 - 'inline' => __('List', 'wc_makecommerce_domain'),
272 - 'widget' => __('Grouped to widget', 'wc_makecommerce_domain'),
273 - ),
274 - 'class' => 'ui-identifier',
275 - );
276 -
277 -
278 - if (empty($languages)) {
279 - $this->form_fields['ui_widget_title'] = array(
280 - 'title' => __('Payments widget title', 'wc_makecommerce_domain'),
281 - 'type' => 'text',
282 - 'desc_tip' => __("Appropriate title may depend on the configuration you have made, i.e. 'pay with bank-link or credit card', 'pay with bank-links' or 'payment methods'", 'wc_makecommerce_domain'),
283 - 'default' => __('Pay with bank-links or credit card', 'wc_makecommerce_domain'),
284 - 'class' => 'ui-identifier',
285 - );
286 - } else {
287 - foreach ($languages as $language_code => $language) {
288 - $language_name = !empty($language['translated_name']) ? $language['translated_name'] : $language_code;
289 - $this->form_fields['ui_widget_title_'.$language_code] = array(
290 - 'title' => __('Payments widget title', 'wc_makecommerce_domain').sprintf(' (%s)', $language_code),
291 - 'type' => 'text',
292 - 'desc_tip' => __("Appropriate title may depend on the configuration you have made, i.e. 'pay with bank-link or credit card', 'pay with bank-links' or 'payment methods'", 'wc_makecommerce_domain'),
293 - 'default' => __('Pay with bank-links or credit card', 'wc_makecommerce_domain'),
294 - 'class' => 'ui-identifier',
295 - );
296 - }
124 + if (!empty($data['message_type']) ) {
125 + if ($data['message_type'] == 'payment_return') {
126 + $transactionId = $data['transaction'];
127 + $reference = $data['reference'];
128 + $paymentStatus = $data['status'];
297 129 }
298 - $this->form_fields['ui_inline_uselogo'] = array(
299 - 'title' => __('MC payment channels display style', 'wc_makecommerce_domain'),
300 - 'type' => 'select',
301 - 'default' => 'logo',
302 - 'options' => array(
303 - 'logo' => __('Logo', 'wc_makecommerce_domain'),
304 - 'text_logo' => __('Text & logo', 'wc_makecommerce_domain'),
305 - 'text' => __('Text', 'wc_makecommerce_domain'),
306 - ),
307 - 'class' => 'ui-identifier',
308 - );
309 - $this->form_fields['ui_widget_logosize'] = array(
310 - 'title' => __('Size of payment channel logos', 'wc_makecommerce_domain'),
311 - 'type' => 'select',
312 - 'default' => 'medium',
313 - 'options' => array(
314 - 'small' => __('Small', 'wc_makecommerce_domain'),
315 - 'medium' => __('Medium', 'wc_makecommerce_domain'),
316 - 'large' => __('Large', 'wc_makecommerce_domain')
317 - ),
318 - 'class' => 'ui-identifier',
319 - );
320 - $this->form_fields['ui_widget_groupcountries'] = array(
321 - 'title' => __('Group bank-links by countries', 'wc_makecommerce_domain'),
322 - 'type' => 'mc_hidden',
323 - 'default' => 'no',
324 - 'class' => 'ui-identifier',
325 - );
326 - $this->form_fields['ui_widget_countries_hidden'] = array(
327 - 'title' => __('Hide country selector', 'wc_makecommerce_domain'),
328 - 'label' => __('Do not display country selector (flags) at payment methods', 'wc_makecommerce_domain'),
329 - 'type' => 'checkbox',
330 - 'default' => 'no',
331 - );
332 - $this->form_fields['ui_widget_countryselector'] = array(
333 - 'title' => __('Country selector style', 'wc_makecommerce_domain'),
334 - 'type' => 'mc_hidden',
335 - 'default' => 'flag',
336 - 'options' => array(
337 - 'flag' => __('Flag', 'wc_makecommerce_domain'),
338 - 'dropdown' => __('Dropdown', 'wc_makecommerce_domain'),
339 - ),
340 - 'class' => 'ui-identifier',
341 - );
342 - $this->form_fields['ui_widget_groupcc'] = array(
343 - 'title' => __('Group credit card into separate widget', 'wc_makecommerce_domain'),
344 - 'type' => 'mc_hidden',
345 - 'default' => 'no',
346 - 'class' => 'ui-identifier',
347 - );
348 - $this->form_fields['ui_chorder'] = array(
349 - 'title' => __('Define custom order of payment channels', 'wc_makecommerce_domain'),
350 - 'type' => 'text',
351 - 'desc_tip' => __('If you want to change default order, put here comma separated list of channels. i,e, - seb,lhv,swedbank. see more on the module home page (link above)', 'wc_makecommerce_domain'),
352 - 'class' => 'ui-identifier',
353 - );
354 - $this->form_fields['ui_javascript'] = array(
355 - 'type' => 'ui_javascript',
356 - );
357 - $this->form_fields['cc_title'] = array(
358 - 'title' => '<br>'.__('Credit Card Settings', 'wc_makecommerce_domain'),
359 - 'type' => 'title',
360 - );
361 - $this->form_fields['cc_pass_cust_data'] = array(
362 - 'title' => __('Prefill Credit Card form with customer data', 'wc_makecommerce_domain'),
363 - 'type' => 'checkbox',
364 - 'default' => 'yes',
365 - 'desc_tip' => __('It will pass user Name and e-mail address to the Credit Card dialog to make the form filling easier', 'wc_makecommerce_domain'),
366 - );
367 - $this->form_fields['adv_title'] = array(
368 - 'title' => '<hr><br>'.__('Advanced Settings', 'wc_makecommerce_domain'),
369 - 'type' => 'title',
370 - );
371 - $this->form_fields['reload_links'] = array(
372 - 'type' => 'mc_banklinks_reload',
373 - 'title' => __('Update payment methods', 'wc_makecommerce_domain'),
374 - 'description' => __('Update', 'wc_makecommerce_domain'),
375 - 'desc_tip' => __('This will update shop configuration from MakeCommerce servers.', 'wc_makecommerce_domain'),
376 - );
377 - $this->form_fields['cron_info'] = array(
378 - 'type' => 'cron_link',
379 - 'title' => __('Update url', 'wc_makecommerce_domain'),
380 - 'desc_tip' => __('Update url for cron job.', 'wc_makecommerce_domain'),
381 - );
382 - }
383 -
384 - public function generate_mc_hidden_html( $key, $data ) {
385 - $field_key = $this->get_field_key($key);
386 - ob_start();
387 - ?>
388 - <tr style="display: none;">
389 - <td colspan="2">
390 - <input type="hidden" name="<?php echo $field_key; ?>" value="<?php echo $data['default']; ?>" />
391 - </td>
392 - </tr>
393 - <?php
394 - return ob_get_clean();
395 - }
396 -
397 - public function generate_cron_link_html( $key, $data ) {
398 - $field = $this->get_field_key( $key );
399 - $defaults = array(
400 - 'title' => '',
401 - 'disabled' => false,
402 - 'class' => '',
403 - 'css' => '',
404 - 'placeholder' => '',
405 - 'type' => 'text',
406 - 'desc_tip' => false,
407 - 'description' => '',
408 - 'custom_attributes' => array()
409 - );
410 -
411 - $data = wp_parse_args( $data, $defaults );
412 - $shop_id_text = get_option('mc_banklinks_api_type', false) == 'live' ? 'mk-shop-id': 'mk-test-shop-id';
413 - ob_start();
414 - ?>
415 - <tr valign="top">
416 - <th scope="row" class="titledesc">
417 - <label for="<?php echo esc_attr( $field ); ?>"><?php echo wp_kses_post( $data['title'] ); ?></label>
418 - <?php echo $this->get_tooltip_html( $data ); ?>
419 - </th>
420 - <td class="forminp">
421 - <fieldset>
422 - <legend class="screen-reader-text"><span><?php echo wp_kses_post( $data['title'] ); ?></span></legend>
423 - <p><?php echo get_site_url(null, '?mk-action=mk-update&'.$shop_id_text.'=') . get_option('mk_test_shop_id', false);?></p>
424 - </fieldset>
425 - </td>
426 - </tr>
427 - <?php
428 - return ob_get_clean();
429 - }
430 -
431 - public function generate_mc_banklinks_reload_html( $key, $data ) {
432 -
433 - $field = $this->get_field_key( $key );
434 - $defaults = array(
435 - 'title' => '',
436 - 'disabled' => false,
437 - 'class' => '',
438 - 'css' => '',
439 - 'placeholder' => '',
440 - 'type' => 'text',
441 - 'desc_tip' => false,
442 - 'description' => '',
443 - 'custom_attributes' => array()
444 - );
445 -
446 - $data = wp_parse_args( $data, $defaults );
447 -
448 - ob_start();
449 - ?>
450 - <tr valign="top">
451 - <th scope="row" class="titledesc">
452 - <label for="<?php echo esc_attr( $field ); ?>"><?php echo wp_kses_post( $data['title'] ); ?></label>
453 - <?php echo $this->get_tooltip_html( $data ); ?>
454 - </th>
455 - <td class="forminp">
456 - <fieldset>
457 - <legend class="screen-reader-text"><span><?php echo wp_kses_post( $data['title'] ); ?></span></legend>
458 - <input id="mc_banklinks_reload" class="button <?php echo esc_attr( $data['class'] ); ?>" type="button" name="<?php echo esc_attr( $field ); ?>" id="<?php echo esc_attr( $field ); ?>" style="<?php echo esc_attr( $data['css'] ); ?>" value="<?php echo esc_attr( $data['description'] ); ?>" placeholder="<?php echo esc_attr( $data['placeholder'] ); ?>" <?php disabled( $data['disabled'], true ); ?> <?php echo $this->get_custom_attribute_html( $data ); ?> />
459 - <script type="text/javascript">
460 - jQuery('input#mc_banklinks_reload').on('click', function() {
461 - init_mc_loading();
462 - jQuery.ajax({
463 - url: '<?php echo get_site_url(); ?>/wp-admin/admin-ajax.php',
464 - type: 'POST',
465 - data: 'action=mc_banklinks_reload',
466 - success: function (output) {
467 - if(output.data) {
468 - alert(output.data);
469 - } else {
470 - alert('<?php echo __('There was an error with your update. Please try again.', 'wc_makecommerce_domain'); ?>');
471 - }
472 - },
473 - complete: function() { stop_mc_loading(); }
474 - });
475 - });
476 -
477 - function init_mc_loading() {
478 - jQuery('input#mc_banklinks_reload').attr('disabled', 'disabled');
479 - }
480 -
481 - function stop_mc_loading() {
482 - jQuery('input#mc_banklinks_reload').removeAttr('disabled');
483 - }
484 - </script>
485 - </fieldset>
486 - </td>
487 - </tr>
488 - <?php
489 -
490 - return ob_get_clean();
491 - }
492 -
493 - public function generate_ui_javascript_html( $key, $data ) {
494 - ?>
495 - <script type="text/javascript">
496 - jQuery(document).ready(function($) {
497 -
498 - var api_type = $('#woocommerce_<?php echo $this->id; ?>_api_type');
499 -
500 - var ui_inline_uselogo_row = $('#woocommerce_<?php echo $this->id; ?>_ui_inline_uselogo').closest('tr');
501 - var ui_widget_title_row = $('#woocommerce_<?php echo $this->id; ?>_ui_widget_title').closest('tr');
502 - var ui_widget_logosize_row = $('#woocommerce_<?php echo $this->id; ?>_ui_widget_logosize').closest('tr');
503 - var ui_widget_countryselector_row = $('#woocommerce_<?php echo $this->id; ?>_ui_widget_countryselector').closest('tr');
504 - var ui_widget_groupcountries_row = $('#woocommerce_<?php echo $this->id; ?>_ui_widget_groupcountries').closest('tr');
505 - var ui_widget_groupcc_row = $('#woocommerce_<?php echo $this->id; ?>_ui_widget_groupcc').closest('tr');
506 - var ui_widget_groupcc_title_row = $('#woocommerce_<?php echo $this->id; ?>_ui_widget_groupcc_title').closest('tr');
507 -
508 - var ui_mode = $('#woocommerce_<?php echo $this->id; ?>_ui_mode');
509 - var ui_widget_groupcountries = $('#woocommerce_<?php echo $this->id; ?>_ui_widget_groupcountries');
510 - var ui_widget_groupcc = $('#woocommerce_<?php echo $this->id; ?>_ui_widget_groupcc');
511 -
512 - parseVisibility();
513 - function parseVisibility() {
514 - $('.ui-identifier').closest('tr').show();
515 -
516 - if(api_type.val() == 'live') {
517 - $('.mc-test-link').hide();
518 - $('.api-test').closest('tr').hide();
519 - } else {
520 - $('.mc-test-link').show();
521 - $('.api-live').closest('tr').hide();
522 - }
523 -
524 - if(ui_mode.val() == 'inline') {
525 - ui_widget_title_row.hide();
526 - ui_widget_logosize_row.hide();
527 - ui_widget_countryselector_row.hide();
528 - ui_widget_groupcountries_row.hide();
529 - ui_widget_groupcc_row.hide();
530 - ui_widget_groupcc_title_row.hide();
531 - } else {
532 - ui_inline_uselogo_row.hide();
533 -
534 - if(ui_widget_groupcountries.prop('checked')) {
535 - ui_widget_countryselector_row.hide();
536 - }
537 - if(!ui_widget_groupcc.prop('checked')) {
538 - ui_widget_groupcc_title_row.hide();
539 - }
540 - }
541 - }
542 -
543 - api_type.on('change', parseVisibility);
544 - ui_mode.on('change', parseVisibility);
545 - ui_widget_groupcountries.on('change', parseVisibility);
546 - ui_widget_groupcc.on('change', parseVisibility);
547 -
548 - });
549 - </script>
550 - <?php
551 - }
552 -
553 - public function generate_mc_header_html( $key, $data ) {
554 - ?>
555 - <div class="makecommerce-info">
556 - <div class="makecommerce-logo">
557 - <a target="_blank" href="http://makecommerce.net"><img src="<?php echo plugins_url('/images/makecommerce_logo_en.svg', __FILE__); ?>" class="makecommerce-logo"></a>
558 - </div>
559 - <div class="makecommerce-links">
560 - <div class="makecommerce-link"><a target="_blank" href="https://merchant.maksekeskus.ee">Merchant Portal</a></div>
561 - <div class="makecommerce-link"><a target="_blank" href="https://makecommerce.net/">makecommerce.net</a></div>
562 - <div class="makecommerce-link"><a target="_blank" href="http://maksekeskus.ee">maksekeskus.ee</a></div>
563 - </div>
564 - </div>
565 - <?php
566 - }
567 -
568 - public function mc_banklinks_reload($force = false) {
569 - if ($force || (defined('DOING_AJAX') && DOING_AJAX)) {
570 -
571 - global $wpdb;
572 - global $mkDbTable;
130 + if ($data['message_type'] == 'token_return') {
131 + if (!empty($data['transaction']['reference'])) {
132 + $reference = $data['transaction']['reference'];
133 + }
134 + $paymentStatus = $data['transaction']['status'];
135 + $transactionId = $data['transaction']['id'];
573 136
574 - $request_params = array(
575 - 'environment' => json_encode(array(
576 - 'platform' => 'woocommerce '.$this->_getWooCommerce()->version,
577 - 'module' => $this->id.' '.$this->version,
578 - )),
579 - );
137 + // for API backward compatibility - if we didn't find reference in the mesage, or the transaction state vas still PENDING
138 + // we'll fetch the transaction data from API, and make a payment request if needed
139 + // this all can be removed after 2017-jan
140 + if (!$reference or $paymentStatus == 'PENDING') {
141 + $transaction = $api->getTransaction($transactionId);
142 + if (!empty($transaction->reference)) {
143 + $reference = $transaction->reference;
144 + }
580 145
581 - if (!$this->_api) {
582 - return false;
583 - }
584 -
585 - try {
586 - $shopConfig = $this->_api->getShopConfig($request_params);
587 - $methods = $shopConfig->payment_methods;
588 - } catch (Exception $e) {
589 - error_log(print_r($e, 1));
590 - return false;
591 - }
592 -
593 - $tableName = $wpdb->prefix . $mkDbTable;
594 - $wpdb->query('TRUNCATE TABLE '.$tableName);
595 -
596 - if(isset($methods->banklinks)) {
597 - foreach($methods->banklinks as $method) {
598 - $wpdb->insert($tableName, array('type' => 'banklink', 'country' => $method->country, 'name' => $method->name, 'url' => $method->url));
599 - }
600 - $updated = true;
601 - }
602 -
603 - if(isset($methods->cards)) {
604 - foreach($methods->cards as $method) {
605 - $wpdb->insert($tableName, array('type' => 'card', 'name' => $method->name));
606 - }
607 - $updated = true;
608 - }
609 -
610 - if(isset($shopConfig) && strlen($shopConfig->name)) {
611 - update_option( 'mc_shop_name', $shopConfig->name );
612 - }
613 -
614 - if ($updated) {
615 - update_option( 'mc_banklinks_api_type', get_option('mk_api_type', false) );
616 - }
617 -
618 - if ($force) {
619 - $this->initBankLinks();
620 - return $updated;
621 - }
622 -
623 - if($updated) {
624 - wp_send_json(array('success' => 1, 'data' => __('Update successfully completed!', 'wc_makecommerce_domain')));
625 - exit;
626 - }
627 -
628 - wp_send_json(array('success' => 0, 'data' => __('There was an error with your update. Please try again.', 'wc_makecommerce_domain')));
629 - exit;
630 - }
631 - die();
632 - }
633 -
634 - protected function _getWooCommerce() {
635 - global $woocommerce;
636 - return $woocommerce;
637 - }
638 -
639 - public function is_valid_for_use() {
640 - return true;
641 - }
642 -
643 - public function is_available() {
644 - if ($this->settings['active'] == "yes" && mk_is_api_set()) {
645 - return true;
646 - }
647 - }
648 -
649 - public function payment_fields() {
650 -
651 - if($this->settings['ui_mode'] == 'inline') {
652 -
653 - ?>
654 - <ul class="makecommerce-picker">
655 - <?php foreach($this->_banklinks as $method): ?>
656 - <li class="makecommerce-picker-method">
657 - <input type="radio" id="makecommerce_method_picker_<?php echo $method->country.'_'.$method->name; ?>" name="PRESELECTED_METHOD_<?php echo $this->id; ?>" value="<?php echo $method->country.'_'.$method->name; ?>"/>
658 - <label for="makecommerce_method_picker_<?php echo $method->country.'_'.$method->name; ?>">
659 - <span class="makecommerce-method-title"><?php if(in_array($this->settings['ui_inline_uselogo'], array('text', 'text_logo'))) { echo ucfirst($method->name); if(count($this->_banklinks_grouped) > 1) { echo ' ('.$this->getCountryName($method->country).')'; } } ?></span>
660 - <?php if(in_array($this->settings['ui_inline_uselogo'], array('logo', 'text_logo'))) : ?>
661 - <div><img src="<?php echo $this->getImageUrl($method->name); ?>" title="<?php echo ucfirst($method->name); ?>" /></div>
662 - <?php endif; ?>
663 - </label>
664 - </li>
665 - <?php endforeach; ?>
666 - <?php foreach($this->_cards as $method): ?>
667 - <li class="makecommerce-picker-method">
668 - <input type="radio" id="makecommerce_method_picker_<?php echo 'card_'.$method->name; ?>" name="PRESELECTED_METHOD_<?php echo $this->id; ?>" value="<?php echo 'card_'.$method->name; ?>"/>
669 - <label for="makecommerce_method_picker_<?php echo 'card_'.$method->name; ?>">
670 - <span class="makecommerce-method-title"><?php if(in_array($this->settings['ui_inline_uselogo'], array('text', 'text_logo'))) { echo ucfirst($method->name); } ?></span>
671 - <?php if(in_array($this->settings['ui_inline_uselogo'], array('logo', 'text_logo'))) : ?>
672 - <div><img src="<?php echo $this->getImageUrl($method->name); ?>" title="<?php echo ucfirst($method->name); ?>" /></div>
673 - <?php endif; ?>
674 - </label>
675 - </li>
676 - <?php endforeach; ?>
677 - </ul>
678 - <?php
679 -
680 - } else {
681 - ?>
682 - <select id="<?php echo $this->id; ?>" name="PRESELECTED_METHOD_<?php echo $this->id; ?>">
683 - <option value=""></option>
684 - <?php foreach($this->_banklinks as $method): ?>
685 - <option value="<?php echo $method->country.'_'.$method->name; ?>"><?php echo strtoupper($method->country).' - '.ucfirst($method->name); ?></option>
686 - <?php endforeach; ?>
687 - <?php foreach($this->_cards as $method): ?>
688 - <option value="card_<?php echo $method->name; ?>"><?php echo ucfirst($method->name); ?></option>
689 - <?php endforeach; ?>
690 - </select>
691 - <ul class="makecommerce-picker">
692 - <?php
693 -
694 - if($this->_banklinks) {
695 - $defaultCountry = $this->getDefaultCountry();
696 - ?>
697 - <?php if( ( empty($this->settings['ui_widget_groupcountries']) || $this->settings['ui_widget_groupcountries'] == 'no' ) && (!isset($this->settings['ui_widget_countries_hidden']) || $this->settings['ui_widget_countries_hidden'] == 'no') ) : ?>
698 - <div class="makecommerce_country_picker_countries">
699 - <?php foreach(array_keys($this->_banklinks_grouped) as $country): ?>
700 - <input style="display: none;" type="radio" id="makecommerce_country_picker_<?php echo $country; ?>" name="makecommerce_country_picker" value="<?php echo $country; ?>" <?php if($defaultCountry == $country) echo 'checked="checked" '; ?>/><?php if($this->settings['ui_widget_countryselector'] == 'flag') { ?><label for="makecommerce_country_picker_<?php echo $country; ?>" class="makecommerce_country_picker_label" style="background-image: url(<?php echo plugins_url('/images/'.$country.'32.png', __FILE__); ?>);"></label><?php } ?>
701 - <?php endforeach; ?>
702 - <?php if($this->settings['ui_widget_countryselector'] == 'dropdown') : ?>
703 - <select name="makecommerce_country_picker_select">
704 - <?php foreach(array_keys($this->_banklinks_grouped) as $country): ?>
705 - <option value="<?php echo $country; ?>" <?php if($defaultCountry == $country) echo 'selected="selected" '; ?>><?php echo $this->getCountryName($country); ?></option>
706 - <?php endforeach; ?>
707 - <option value="card" style="display:none;"></option>
708 - </select>
709 - <?php endif; ?>
710 - </div>
711 - <?php endif; ?>
712 - <?php
713 - $banklinks_grouped = $this->_banklinks_grouped;
714 - if(count($banklinks_grouped) > 1) {
715 - $banklinks_grouped['other'] = array();
716 - }
717 - ?>
718 - <?php foreach($banklinks_grouped as $country => $methods): ?>
719 - <li class="makecommerce-picker-country">
720 - <?php if($this->settings['ui_widget_groupcountries'] == 'yes') : ?>
721 - <input type="radio" id="makecommerce_country_picker_<?php echo $country; ?>" name="makecommerce_country_picker" value="<?php echo $country; ?>" <?php if($defaultCountry == $country) echo 'checked="checked" '; ?>/><label for="makecommerce_country_picker_<?php echo $country; ?>"><img src="<?php echo plugins_url('/images/'.$country.'32.png', __FILE__); ?>" /></label>
722 - <?php endif; ?>
723 - <div class="makecommerce_country_picker_methods" id="makecommerce_country_picker_methods_<?php echo $country; ?>">
724 - <?php foreach($methods as $method): ?>
725 - <div class="makecommerce-banklink-picker" banklink_id="<?php echo $method->country.'_'.$method->name; ?>">
726 - <img src="<?php echo $this->getImageUrl($method->name); ?>" title="<?php echo ucfirst($method->name); ?>" />
727 - </div>
728 - <?php endforeach; ?>
729 - <?php if($this->_cards && $this->settings['ui_widget_groupcc'] == 'no') : ?>
730 - <div class="breaker"></div>
731 - <?php foreach($this->_cards as $method): ?>
732 - <div class="makecommerce-banklink-picker" banklink_id="card_<?php echo $method->name; ?>">
733 - <img src="<?php echo $this->getImageUrl($method->name); ?>" title="<?php echo ucfirst($method->name); ?>" />
734 - </div>
735 - <?php endforeach; ?>
736 - <?php elseif($country == 'other') :?>
737 - <p class="no-methods"><?php _e('No payment methods for selected country' ,'wc_makecommerce_domain');?></p>
738 - <?php endif; ?>
739 - </div>
740 - </li>
741 - <?php endforeach; ?>
742 - <?php if($this->_cards && $this->settings['ui_widget_groupcc'] == 'yes') : ?>
743 - <li class="makecommerce-picker-country">
744 - <input type="radio" id="makecommerce_country_picker_card" name="makecommerce_country_picker" value="card"/><label for="makecommerce_country_picker_card"><?php echo $this->settings['ui_widget_groupcc_title']; ?></label>
745 - <div class="makecommerce_country_picker_methods" id="makecommerce_country_picker_methods_card">
746 - <?php foreach($this->_cards as $method): ?>
747 - <div class="makecommerce-banklink-picker" banklink_id="card_<?php echo $method->name; ?>">
748 - <img src="<?php echo $this->getImageUrl($method->name); ?>" title="<?php echo ucfirst($method->name); ?>" />
749 - </div>
750 - <?php endforeach; ?>
751 - </div>
752 - </li>
753 - <?php endif; ?>
754 - <?php
755 - }
756 - ?>
757 - </ul>
758 - <div class="mc-clear-both"></div>
759 - <script type="text/javascript">
760 - var makecommerceId = '<?php echo $this->id; ?>';
761 - var selectedCountry = '<?php echo $defaultCountry; ?>';
146 + $paymentStatus = $transaction->status;
762 147
763 - var logosize = '<?php echo $this->settings['ui_widget_logosize']; ?>';
764 - jQuery('div.makecommerce_country_picker_methods').addClass('logosize-'+logosize);
765 -
766 - <?php if(count($this->_banklinks_grouped) == 1): ?>
767 - jQuery('li.makecommerce-picker-country').show();
768 - jQuery('div.makecommerce_country_picker_countries').hide();
769 - jQuery('li.makecommerce-picker-country > input, li.makecommerce-picker-country > label').hide();
770 - <?php else: ?>
771 - makecommercePick();
772 -
773 - jQuery('body').on('change', 'select[name=makecommerce_country_picker_select]', function() {
774 - selectedCountry = jQuery(this).val();
775 - jQuery('input[name=makecommerce_country_picker]').removeAttr('checked');
776 - makecommercePick();
777 - });
778 - jQuery('body').on('change', 'input[name=makecommerce_country_picker]', function() {
779 - selectedCountry = jQuery(this).val();
780 - jQuery('select[name=makecommerce_country_picker_select]').val(selectedCountry);
781 - makecommercePick();
782 - });
783 -
784 - function makecommercePick() {
785 - jQuery('select#'+makecommerceId).val('');
786 - jQuery('div.makecommerce-banklink-picker').removeClass('selected');
787 - jQuery('label.makecommerce_country_picker_label').removeClass('selected');
788 -
789 - jQuery('li.makecommerce-picker-country').hide();
790 - jQuery('div#makecommerce_country_picker_methods_' + selectedCountry).parent().show();
791 - jQuery('label[for=makecommerce_country_picker_' + selectedCountry + ']').addClass('selected');
148 + if ($paymentStatus == 'PENDING') {
149 + $paymentRequest = array(
150 + 'amount' => (string)sprintf("%.2f", $transaction->amount),
151 + 'currency' => $transaction->currency,
152 + 'token' => $data['token']['id']
153 + );
154 + $payment = $api->createPayment($transactionId, $paymentRequest);
155 + // TODO: validate
156 + $paymentStatus = $payment->transaction->status;
792 157 }
793 - <?php endif; ?>
794 -
795 - jQuery('div.makecommerce-banklink-picker').on('click', function() {
796 - var banklink_id = jQuery(this).attr('banklink_id');
797 - jQuery('select#'+makecommerceId).val(banklink_id);
798 -
799 - jQuery('div.makecommerce-banklink-picker').removeClass('selected');
800 - jQuery(this).addClass('selected');
801 - });
802 - </script>
803 - <?php
804 - }
805 -
806 - if($this->settings['ui_open_by_default'] == 'yes') {
807 - ?>
808 - <script type="text/javascript">
809 - jQuery('input#payment_method_<?php echo $this->id; ?>').trigger('click');
810 - </script>
811 - <?php
812 - }
813 - }
814 158
815 - private function getDefaultCountry() {
816 - if ($this->_getWooCommerce()->customer) {
817 - $customerCountry = strtolower($this->_getWooCommerce()->customer->get_shipping_country());
818 - if(array_key_exists($customerCountry, $this->_banklinks_grouped)) {
819 - return $customerCountry;
820 - } else {
821 - return 'other';
822 - }
823 - }
159 + }
824 160
825 - $localeToCountry = array(
826 - 'et' => 'ee',
827 - 'lv' => 'lv',
828 - 'lt' => 'lt',
829 - 'fi' => 'fi',
830 - );
831 - if(array_key_exists(get_locale(), $localeToCountry)) {
832 - return $localeToCountry[get_locale()];
161 +
833 162 }
834 163
835 - return key($this->_banklinks_grouped);
836 - }
837 -
838 - private function initBanklinks() {
839 - global $wpdb;
840 - global $mkDbTable;
841 - $this->_banklinks = array();
842 -
843 - $tableName = $wpdb->prefix . $mkDbTable;
844 - $methods = $wpdb->get_results('SELECT * FROM '.$tableName);
845 -
846 - if(count($methods)) {
847 - if(is_admin() && $this->_init == true && get_option( 'mc_banklinks_api_type' ) != get_option('mk_api_type', false)) {
848 - //add_action( 'admin_notices', array(&$this, 'makecommerce_banklinks_list_type_notice') );
849 - }
850 - $banklinks = array();
851 - $banklinks_grouped = array();
852 - $cards = array();
853 - foreach($methods as $method) {
854 - if($method->type == 'banklink') {
855 - $banklinks[] = $banklinks_grouped[$method->country][] = $method;
856 - } elseif($method->type == 'card') {
857 - $cards[] = $method;
858 - }
859 - }
860 -
861 - usort($banklinks, array($this, 'orderBanklinks'));
862 - foreach($banklinks_grouped as &$country) {
863 - usort($country, array($this, 'orderBanklinks'));
864 - }
865 -
866 - $this->_banklinks = $banklinks;
867 - $this->_banklinks_grouped = $banklinks_grouped;
868 - $this->_cards = $cards;
869 - remove_action('admin_notices', array(&$this, 'makecommerce_banklinks_list_empty'), 30);
870 - } elseif(is_admin() && $this->_init == true) {
871 - add_action('admin_notices', array(&$this, 'makecommerce_banklinks_list_empty'), 30);
872 - }
873 - }
874 -
875 - private function orderBanklinks($a, $b) {
876 - $order = array_map('trim', explode(",", $this->settings['ui_chorder']));
877 -
878 - $posA = array_search($a->name, $order);
879 - $posB = array_search($b->name, $order);
880 -
881 - if($posA === $posB) return $a->id > $b->id ? 1 : -1;
882 - if($posA === FALSE) return 1;
883 - if($posB === FALSE) return -1;
884 -
885 - return $posA > $posB ? 1 : -1;
886 - }
887 -
888 - protected function getImageUrl($methodName) {
889 - $imageUrlPath = 'https://static.maksekeskus.ee/img/channel/lnd/';
890 -
891 - return $imageUrlPath.$methodName.'.png';
892 - }
893 -
894 - public function validate_fields() {
895 - $selected = isset($_POST['PRESELECTED_METHOD_' . $this->id]) ? sanitize_text_field($_POST['PRESELECTED_METHOD_' . $this->id]) : false;
164 + }
165 + }
896 166
897 - if (!$selected) {
898 - wc_add_notice(__('Please select suitable payment option!', 'wc_makecommerce_domain'), 'error');
899 - } else {
900 - $this->_getWooCommerce()->session->makecommerce_preselected_method = $selected;
901 - }
167 + // if we didn't find reference to an Order, we send user to shop landing-page. TODO: could be improved
168 + if (!$reference) { return $returnUrl; }
902 169
903 - return true;
904 - }
905 -
906 - public function process_payment($orderId) {
170 + $order = new WC_Order($reference);
171 + // if we din't find the Order, we send user to shop landing-page. TODO: could be improved
172 + if (!$order->get_id()) { return $returnUrl; }
907 173
908 - $order = new WC_Order($orderId);
174 + $returnUrl = $order->get_checkout_order_received_url();
909 175
910 - $selected = isset($_POST['PRESELECTED_METHOD_' . $this->id]) ? sanitize_text_field($_POST['PRESELECTED_METHOD_' . $this->id]) : false;
911 -
912 - if(!empty($selected)) {
913 -
914 - update_post_meta($order->id, '_makecommerce_preselected_method', $selected);
915 -
916 - if(substr($selected, 0, 5) == 'card_') {
917 -
918 - $request_body = array(
919 - 'transaction' => array(
920 - 'amount' => round($order->order_total, 2),
921 - 'currency' => $order->get_order_currency(),
922 - 'reference' => $order->id,
923 - 'transaction_url' => array(
924 - 'return_url' => array(
925 - 'url' => $this->return_url_cc,
926 - 'method' => 'POST',
927 - ),
928 - 'cancel_url' => array(
929 - 'url' => $this->return_url_cc,
930 - 'method' => 'POST',
931 - ),
932 - 'notification_url' => array(
933 - 'url' => $this->return_url_cc,
934 - 'method' => 'POST',
935 - ),
936 - ),
937 - ),
938 - 'customer' => array(
939 - 'ip' => $_SERVER['REMOTE_ADDR'],
940 - 'country' => strtolower($order->billing_country),
941 - 'locale' => strtolower(substr(get_locale(), 0, 2)),
942 - ),
943 - );
944 - $transaction = $this->_api->createTransaction($request_body);
945 -
946 - if(isset($transaction->id)) {
947 - update_post_meta($order->id, '_makecommerce_cc_transaction_id', $transaction->id);
948 - return array(
949 - 'result' => 'success',
950 - 'redirect' => $this->_getOrderConfirmationUrl($order),
951 - );
952 - }
953 -
954 - wc_add_notice(__('An error occured when trying to process payment!', 'wc_makecommerce_domain'), 'error');
955 - return array(
956 - 'result' => 'failure',
957 - );
958 -
959 - } else {
960 -
961 - $redirectUrl = $this->_getRedirectUrl($selected);
962 -
963 - if($redirectUrl) {
964 - $request_body = array(
965 - 'transaction' => array(
966 - 'amount' => round($order->order_total, 2),
967 - 'currency' => $order->get_order_currency(),
968 - 'reference' => $order->id,
969 - 'transaction_url' => array(
970 - 'return_url' => array(
971 - 'url' => $this->return_url,
972 - 'method' => 'POST',
973 - ),
974 - 'cancel_url' => array(
975 - 'url' => $this->return_url,
976 - 'method' => 'POST',
977 - ),
978 - 'notification_url' => array(
979 - 'url' => $this->return_url,
980 - 'method' => 'POST',
981 - ),
982 - ),
983 - ),
984 - 'customer' => array(
985 - 'ip' => $_SERVER['REMOTE_ADDR'],
986 - 'country' => strtolower($order->billing_country),
987 - 'locale' => strtolower(substr(get_locale(), 0, 2)),
988 - )
989 - );
990 - $transaction = $this->_api->createTransaction($request_body);
991 -
992 - if(isset($transaction->id)) {
993 - return array(
994 - 'result' => 'success',
995 - 'redirect' => $redirectUrl.$transaction->id,
996 - );
997 - }
998 - }
999 -
1000 - wc_add_notice(__('An error occured when trying to process payment!', 'wc_makecommerce_domain'), 'error');
1001 - return array(
1002 - 'result' => 'failure',
1003 - );
1004 -
1005 - }
1006 -
1007 - }
1008 -
1009 - wc_add_notice(__('An error occured when trying to process payment!', 'wc_makecommerce_domain'), 'error');
1010 - return array(
1011 - 'result' => 'failure',
1012 - );
1013 - }
1014 -
1015 - protected function _getRedirectUrl($selected) {
1016 - foreach($this->_banklinks as $method) {
1017 - if($selected == $method->country.'_'.$method->name)
1018 - return $method->url;
1019 - }
1020 -
1021 - return false;
1022 - }
1023 -
1024 - protected function _getOrderConfirmationUrl($order) {
1025 -
1026 - global $sitepress;
1027 - if(isset($sitepress)) {
1028 - $baseUrl = $sitepress->language_url( ICL_LANGUAGE_CODE );
1029 - $lang = ICL_LANGUAGE_CODE;
1030 - } else {
1031 - $baseUrl = site_url();
1032 - $lang = strtolower(substr(get_locale(), 0, 2));
1033 - }
1034 - $url = add_query_arg( array(
1035 - 'makecommerce_card_pay' => '1',
1036 - 'order_id' => $order->id,
1037 - 'lang' => $lang,
1038 - ), $baseUrl);
176 + switch($paymentStatus) {
1039 177
1040 - // $url = site_url('?makecommerce_card_pay=1&order_id='.$order->id.'&lang='.(defined('ICL_LANGUAGE_CODE') ? ICL_LANGUAGE_CODE : strtolower(substr(get_locale(), 0, 2))));
1041 - return $url;
1042 - }
1043 -
1044 - public function receipt_page($orderId) {
1045 - echo '<p>' . __('Thank you for the order, please click on the button to start the payment.', 'wc_makecommerce_domain') . '</p>';
1046 -
1047 - $order = new WC_Order($orderId);
1048 - if(substr(get_post_meta($orderId, '_makecommerce_preselected_method', true), 0, 5) == 'card_' && $order->get_status() == 'pending') {
1049 - echo $this->generateCardForm($order);
178 + case 'CANCELLED':
179 + $order->update_status( 'cancelled' );
180 + wc_add_notice(__('Payment transaction cancelled', 'wc_makecommerce_domain'), 'error');
181 + $returnUrl = wc_get_cart_url();
182 + break;
183 +
184 + case 'COMPLETED':
185 + $orderNote = array();
186 + $orderNote[] = __('Transaction ID', 'wc_makecommerce_domain') . ': <a target=_blank href="'.$api->getEnvUrls()->merchantUrl.'/merchant/shop/deals/detail.html?id='. $transactionId .'">'.$transactionId.'</a>';
187 + $orderNote[] = __('Payment option', 'wc_makecommerce_domain') . ': ' . get_post_meta($order->get_id(), '_makecommerce_preselected_method', true);
188 + $order->add_order_note(implode("\r\n", $orderNote));
189 + if (!empty($data['token']) && !empty($data['token']['multiuse'])) {
190 + update_post_meta($order->get_id(), '_makecommerce_payment_token', $data['token']['id']);
191 + update_post_meta($order->get_id(), '_makecommerce_payment_token_valid_until', $data['token']['valid_until']);
1050 192 }
1051 - }
1052 -
1053 - public function generateCardForm($order) {
1054 - $scriptSrc = htmlspecialchars($this->_gateway_url_static.'checkout.js');
1055 - $transactionId = get_post_meta($order->id, '_makecommerce_cc_transaction_id', true);
1056 - $idReference = $order->id;
1057 - $jsParams = array(
1058 - 'key' => $this->_api->getPublishableKey(),
1059 - 'transaction' => $transactionId,
1060 - 'selector' => '#submit_banklinkmakecommerce_payment_form',
1061 - 'amount' => round($order->order_total, 2),
1062 - 'locale' => !empty($_GET['lang']) ? $_GET['lang'] : (defined('ICL_LANGUAGE_CODE') ? ICL_LANGUAGE_CODE : strtolower(substr(get_locale(), 0, 2))),
1063 - 'open-on-load' => 'true',
1064 - 'client-name' => ($this->settings['cc_pass_cust_data'] == 'yes' ? (string) ($order->billing_first_name . ' ' . $order->billing_last_name) : ''),
1065 - 'email' => ($this->settings['cc_pass_cust_data'] == 'yes' ? (string) $order->billing_email : ''),
1066 - 'name' => get_option('mc_shop_name', ''),
1067 - 'description' => __('Order', 'woocommerce') . '&nbsp;' . (string) $idReference,
1068 - 'completed' => 'makecommerce_cc_complete',
1069 - 'currency' => 'EUR',
1070 - );
1071 - ?>
1072 - <script type="text/javascript">
1073 - function makecommerce_cc_complete(data) {
1074 - if(data.paymentToken) {
1075 - jQuery('div.mc-processing-message').show();
1076 -
1077 - var submitform = jQuery('<form action="<?php echo $this->return_url_cc; ?>" method="POST" style="display: none;"><input type="submit"/><input type="hidden" name="transaction" value="<?php echo $transactionId; ?>" /></form>');
1078 - for(var key in data) {
1079 - submitform.append('<input type="hidden" name="'+key+'" value="'+data[key]+'" />');
1080 - }
1081 - jQuery('body').append(submitform);
1082 - submitform.submit();
1083 - }
1084 - }
1085 - </script>
1086 - <form id="cc_form">
1087 - <input type="submit" class="button-alt" id="submit_banklinkmakecommerce_payment_form" value="<?php echo __('Pay', 'wc_makecommerce_domain'); ?>" />
1088 - <a class="button cancel" href="<?php echo esc_url($order->get_cancel_order_url()); ?>"><?php echo __('Cancel order &amp; restore cart', 'wc_makecommerce_domain'); ?></a>
1089 - <script type="text/javascript" src="<?php echo $scriptSrc; ?>" <?php echo $this->_toHtmlAttributes($jsParams); ?>></script>
1090 - </form>
1091 - <div class="mc-processing-message"><img src="<?php echo plugins_url('/images/loading.png', __FILE__); ?>"/> <?php echo __('Please wait, processing payment...', 'wc_makecommerce_domain'); ?></div>
1092 - <?php
1093 - }
1094 -
1095 - protected function _toHtmlAttributes($input) {
1096 - $result = array();
1097 - foreach ($input as $key => $value) {
1098 - $result[] = 'data-' . htmlspecialchars($key) . '=' . '"' . htmlspecialchars($value) . '"';
1099 - }
1100 - return implode(' ', $result);
1101 - }
1102 -
1103 - public function makecommerce_return_trigger($vars) {
1104 - $vars[] = 'makecommerce_return';
1105 - $vars[] = 'makecommerce_card_pay';
1106 - return $vars;
1107 - }
1108 -
1109 - public function makecommerce_return_trigger_check() {
1110 - if(intval(get_query_var('makecommerce_return')) == 1) {
1111 -
1112 - $returnUrl = home_url();
1113 -
1114 - $request = stripslashes_deep($_POST);
1115 - if($this->_api->verifyMac($request)) {
1116 - $data = $this->_api->extractRequestData($request);
1117 - $order = new WC_Order($data['reference']);
1118 -
1119 - switch($data['status']) {
1120 - case self::MC_CANCELLED:
1121 - $order->update_status( 'cancelled' );
1122 - wc_add_notice(__('Payment transaction cancelled', 'wc_makecommerce_domain'), 'error');
1123 - $returnUrl = $this->_getWooCommerce()->cart->get_cart_url();
1124 - break;
1125 - case self::MC_COMPLETED:
1126 - if($this->validate_completed_payment($order, $data)) {
1127 - $orderNote = array();
1128 - $orderNote[] = __('Transaction ID', 'wc_makecommerce_domain') . ': ' . $data['transaction'];
1129 - $orderNote[] = __('Payment option', 'wc_makecommerce_domain') . ': ' . get_post_meta($order->id, '_makecommerce_preselected_method', true);
1130 -
1131 - $order->add_order_note(implode("\r\n", $orderNote));
1132 -
1133 - $order->payment_complete($data['transaction']);
1134 - $order->update_status( 'processing' );
1135 -
1136 - try {
1137 - @ob_start();
1138 - $this->receipt_page($order->id);
1139 - @ob_end_clean();
1140 -
1141 - $returnUrl = $this->get_return_url($order);
1142 - } catch (Exception $ex) {
1143 - @ob_end_clean();
1144 - }
1145 - } else {
1146 - $returnUrl = $this->_getWooCommerce()->cart->get_cart_url();
1147 - }
1148 - break;
1149 - }
1150 -
1151 - //exit;
1152 - }
1153 - wp_redirect($returnUrl);
1154 - exit;
1155 -
1156 - } elseif(intval(get_query_var('makecommerce_return')) == 2) {
1157 -
1158 - $returnUrl = home_url();
1159 - if(isset($_POST['paymentToken']) && isset($_POST['transaction'])) {
1160 - $token = $_POST['paymentToken'];
1161 - $transaction = $_POST['transaction'];
1162 - }
1163 -
1164 - if(isset($_POST['json']) && $this->_api->verifyMac(stripslashes_deep($_POST))) {
1165 - $data = json_decode(stripslashes($_POST['json']), true);
1166 - $token = $data['token']['id'];
1167 - $transaction = $data['transaction']['id'];
1168 - }
1169 -
1170 - if(isset($token) && isset($transaction) && !empty($token) && !empty($transaction)) {
1171 - global $wpdb;
1172 - if($order = New WC_Order($wpdb->get_var('SELECT post_id from '.$wpdb->postmeta.' where meta_key = "_makecommerce_cc_transaction_id" AND meta_value = "'.$transaction.'"'))) {
1173 - $request_body = array(
1174 - 'token' => $token,
1175 - );
1176 - $data = $this->_api->createPayment(get_post_meta($order->id, '_makecommerce_cc_transaction_id', true), $request_body);
1177 - switch($data->status) {
1178 - case self::MC_CANCELLED:
1179 - $order->update_status( 'cancelled' );
1180 - wc_add_notice(__('Payment transaction cancelled', 'wc_makecommerce_domain'), 'error');
1181 - $returnUrl = $this->_getWooCommerce()->cart->get_cart_url();
1182 - break;
1183 - case self::MC_DEPOSITED:
1184 - if($this->validate_completed_payment($order, $data)) {
1185 - $orderNote = array();
1186 - $orderNote[] = __('Transaction ID', 'wc_makecommerce_domain') . ': ' . $data->transaction->id;
1187 - $orderNote[] = __('Payment option', 'wc_makecommerce_domain') . ': ' . get_post_meta($order->id, '_makecommerce_preselected_method', true);
1188 -
1189 - $order->add_order_note(implode("\r\n", $orderNote));
1190 -
1191 - $order->payment_complete($data->transaction->id);
1192 - $order->update_status( 'processing' );
1193 -
1194 - try {
1195 - @ob_start();
1196 - $this->receipt_page($order->id);
1197 - @ob_end_clean();
1198 -
1199 - $returnUrl = $this->get_return_url($order);
1200 - } catch (Exception $ex) {
1201 - @ob_end_clean();
1202 - }
1203 - } else {
1204 - $returnUrl = $this->_getWooCommerce()->cart->get_cart_url();
1205 - }
1206 - break;
1207 - }
1208 - }
1209 - }
1210 -
1211 - wp_redirect($returnUrl);
1212 - exit;
1213 - }
1214 193
1215 - if(intval(get_query_var('makecommerce_card_pay')) == 1) {
1216 - if(isset($_GET['order_id'])) {
1217 - if($order = New WC_Order($_GET['order_id'])) {
1218 - New woocommerce_makecommerce(false);
1219 - get_header();
1220 - ?>
1221 - <div id="primary" class="content-area">
1222 - <?php $this->receipt_page($order->id); ?>
1223 - </div>
1224 - <?php
1225 - get_sidebar();
1226 - get_footer();
1227 -
1228 - exit;
1229 - }
1230 - }
1231 - }
1232 - }
1233 -
1234 - private function validate_completed_payment($order, $data) {
1235 -
1236 - if(is_object($data)) {
1237 - $data = json_decode(json_encode($data), true);
1238 - }
1239 -
1240 - if(empty($data['transaction'])) {
1241 - $order->add_order_note(__('Payment error, missing transaction id', 'wc_makecommerce_domain'));
1242 - wc_add_notice(__('Error verifying transaction', 'wc_makecommerce_domain'), 'error');
1243 - return false;
1244 - }
1245 - if($data['amount'] != round($order->order_total, 2)) {
1246 - $order->add_order_note(sprintf(__('Payment error, incorrect amount captured: %s', 'wc_makecommerce_domain'), $data['amount'].' '.$data['currency']));
1247 - wc_add_notice(__('Error verifying transaction', 'wc_makecommerce_domain').', '.__('Incorrect amount captured', 'wc_makecommerce_domain'), 'error');
1248 - return false;
1249 - }
1250 - if($data['currency'] != $order->get_order_currency()) {
1251 - $order->add_order_note(sprintf(__('Payment error, incorrect currency captured: %s', 'wc_makecommerce_domain'), $data['currency']));
1252 - wc_add_notice(__('Error verifying transaction', 'wc_makecommerce_domain').', '.__('Incorrect currency captured', 'wc_makecommerce_domain'), 'error');
1253 - return false;
1254 - }
1255 -
1256 - return true;
1257 - }
1258 -
1259 - public function admin_order_page($order) {
1260 - //
1261 - }
1262 -
1263 - public function process_refund($order_id, $amount = null, $comment = '') {
1264 - if ($this->_api) {
1265 - try {
1266 - $order = new WC_Order($order_id);
1267 - $transactionId = $order->get_transaction_id();
1268 -
1269 - if($response = $this->_api->createRefund($transactionId, array('amount' => $amount, 'comment' => ($comment ? : 'refund')))) {
1270 - if($status = (string)$response->transaction->status) {
1271 - switch($status) {
1272 - case self::MC_REFUNDED:
1273 - $order->add_order_note(sprintf(__('Refund completed for amount %s', 'wc_makecommerce_domain'), $amount));
1274 - return true;
1275 - break;
1276 - case self::MC_PART_REFUNDED:
1277 - $order->add_order_note(sprintf(__('Partial refund completed for amount %s', 'wc_makecommerce_domain'), $amount));
1278 - return true;
1279 - break;
1280 - }
1281 - }
1282 - }
1283 - return false;
1284 -
1285 - } catch (Exception $e) {
1286 - return new WP_Error('makecommerce_refund_error', $e->getMessage());
1287 - }
1288 -
1289 - return false;
1290 - }
1291 - return false;
1292 - }
1293 -
1294 - protected function getCountryName($slug) {
1295 - switch($slug) {
1296 - case 'ee': return __('Estonia', 'wc_makecommerce_domain'); break;
1297 - case 'lv': return __('Latvia', 'wc_makecommerce_domain'); break;
1298 - case 'lt': return __('Lithuania', 'wc_makecommerce_domain'); break;
1299 - case 'fi': return __('Finland', 'wc_makecommerce_domain'); break;
1300 - }
1301 - return $slug;
1302 - }
1303 -
194 + if( isset($_GET['lang1']) ) $order->update_meta_data('wpml_language', $_GET["lang1"]);
195 + $order->payment_complete( $transactionId );
196 + $woocommerce->cart->empty_cart();
197 + break;
1304 198 }
1305 -
1306 - New woocommerce_makecommerce(true);
1307 199
1308 - // Woocommerce Multilingual overrides
1309 - if ( in_array( 'woocommerce-multilingual/wpml-woocommerce.php', apply_filters( 'active_plugins', get_option( 'active_plugins' ) ) ) ) {
1310 - add_filter( 'get_post_metadata', 'mc_override_payment_method_string', 5, 4 );
1311 - }
1312 -
1313 - // Assign schedule if not set, update compatible no need to reactivate, format('U') php 5.2 compatible
1314 - // Assigns task at 23.59.59 by local time, task runs if time has passed and somebody navigates the site
1315 - if (! wp_next_scheduled ( 'mc_banklinks_update_cron' )) {
1316 - $date = new DateTime();
1317 - $date->setTime(23,59,59);
1318 - $timestamp = intval($date->format('U'));
1319 - $local = 3600 * intval(get_option('gmt_offset'));
1320 - wp_schedule_event($timestamp - $local, 'twicedaily', 'mc_banklinks_update_cron');
1321 - }
200 + return $returnUrl;
1322 201 }
1323 202
1324 - function mc_override_payment_method_string( $check, $object_id, $meta_key, $single ){
1325 - if($meta_key == '_payment_method_title') {
1326 - $payment_method = get_post_meta( $object_id, '_payment_method', true );
1327 - if( $payment_method == 'makecommerce' ){
1328 - $payment_gateways = WC()->payment_gateways->payment_gateways();
1329 - if( isset( $payment_gateways[ $payment_method ] ) ){
1330 - $title = $payment_gateways[ $payment_method ]->title;
1331 - return $title;
1332 - }
1333 - }
1334 - }
1335 - return $check;
1336 - }
1337 203
1338 - // Banklinks update wrapper for action
1339 - function update_mc_banklinks() {
1340 - $obj = new woocommerce_makecommerce(true);
1341 - $obj->mc_banklinks_reload(true);
1342 - }
1343 204
1344 - function woocommerce_payment_makecommerce_add($methods) {
1345 - $methods[] = 'woocommerce_makecommerce';
1346 - return $methods;
1347 - }
1348 205
1349 - add_action('plugins_loaded', 'woocommerce_payment_makecommerce_init');
1350 - add_action('woocommerce_payment_gateways', 'woocommerce_payment_makecommerce_add');
1351 -
1352 - function clear_wc_shipping_rates_cache(){
1353 - $packages = WC()->cart->get_shipping_packages();
1354 - foreach ($packages as $key => $value) {
1355 - $shipping_session = "shipping_for_package_$key";
1356 - unset(WC()->session->$shipping_session);
206 + $MKAPI = false;
207 + function mk_get_api() {
208 + global $MKAPI;
209 + if ($MKAPI) {
210 + //return $MKAPI;
1357 211 }
212 + $mk_api_type = get_option('mk_api_type', false);
213 + if (!$mk_api_type) {
214 + return false;
215 + }
216 + if ($mk_api_type !== 'live') {
217 + $key_prefix = $mk_api_type.'_';
218 + } else {
219 + $key_prefix = '';
220 + }
221 + $mk_shop_id = get_option('mk_'.$key_prefix.'shop_id', '');
222 + $mk_public_key = get_option('mk_'.$key_prefix.'public_key', '');
223 + $mk_private_key = get_option('mk_'.$key_prefix.'private_key', '');
224 + if (!$mk_shop_id || !$mk_public_key || !$mk_shop_id) {
225 + return false;
226 + }
227 + $MKAPI = new \Maksekeskus\Maksekeskus($mk_shop_id, $mk_public_key, $mk_private_key, $mk_api_type === 'live' ? false : true);
228 + return $MKAPI;
1358 229 }
1359 - add_filter('woocommerce_checkout_update_order_review', 'clear_wc_shipping_rates_cache');
1360 230
1361 -
1362 -
1363 -
1364 - // Parcel machine specific stuff
1365 - function transport_add_method() {
1366 -
1367 - // Delete all the wc_ship transient scum, you aren’t wanted around here, move along.
1368 - // Same as being in shipping debug mode
1369 - global $wpdb;
1370 - $transients = $wpdb->get_col("SELECT option_name FROM $wpdb->options WHERE option_name LIKE '_transient_wc_ship%'");
1371 - if (count($transients)) {
1372 - foreach ($transients as $tr) {
1373 - $hash = substr($tr, 11);
1374 - delete_transient($hash);
1375 - }
231 + function mk_is_api_set() {
232 + $mk_api_type = get_option('mk_api_type', false);
233 + if (!$mk_api_type) {
234 + return false;
1376 235 }
1377 - $transient_value = get_transient('shipping-transient-version');
1378 - WC_Cache_Helper::delete_version_transients( $transient_value );
1379 - if (WC()->session) {
1380 - WC()->session->set('shipping_for_package', '');
236 + if ($mk_api_type !== 'live') {
237 + $key_prefix = $mk_api_type.'_';
238 + } else {
239 + $key_prefix = '';
1381 240 }
1382 -
1383 -
1384 - if ( ! class_exists( 'WC_ParcelMachine_Shipping_Method' ) ) {
1385 -
1386 - class WC_ParcelMachine_Shipping_Method extends WC_Shipping_Method {
1387 -
1388 - function __construct($instance_id = 0) {
1389 - if (!$this->ext) {
1390 - throw new Exception('Do not call this class directly!');
1391 - }
1392 - $this->id = 'parcelmachine_' . mb_strtolower($this->ext);
1393 - $this->instance_id = absint($instance_id);
1394 - $this->method_title = $this->name_ext . __(' Parcel Machine (MC)', 'wc_makecommerce_domain');
1395 - // $this->method_description = sprintf(__('Parcel machine transport method for %s', 'wc_makecommerce_domain'), $this->ext);
1396 - $this->supports = array('shipping-zones', 'instance-settings', 'instance-settings-modal', 'settings');
1397 - $this->init();
1398 - }
1399 -
1400 - function init() {
1401 - $this->init_form_fields();
1402 - $this->init_settings();
1403 -
1404 - $this->enable = $this->settings['active'];
1405 - $this->title = $this->settings['method_name'];
1406 - if (defined('ICL_LANGUAGE_CODE') && !empty($this->settings['method_name_'.ICL_LANGUAGE_CODE])) {
1407 - $this->title = $this->settings['method_name_'.ICL_LANGUAGE_CODE];
1408 - }
1409 - $this->availability = 'specific';
1410 - $this->countries = $this->settings['countries'];
1411 - $this->prioritization = $this->settings['prioritization'];
1412 - $this->free_shipping_min_amount = !empty($this->settings['free_shipping_min_amount']) ? $this->settings['free_shipping_min_amount'] : 0;
1413 - $this->maximum_weight = (double)$this->settings['maximum_weight'];
1414 - $this->short_office_names = $this->settings['short_office_names'];
1415 - $this->order_country = 'unknown';
1416 - add_action('woocommerce_update_options_shipping_' . $this->id, array(&$this, 'process_admin_options'));
1417 - add_filter('woocommerce_review_order_after_shipping' , array(&$this, 'add_parcelmachine_checkout_fields'));
1418 - //add_filter('woocommerce_update_order_review_fragments' , array(&$this, 'add_parcelmachine_checkout_fields'));
1419 - add_action('woocommerce_checkout_process', array(&$this, 'check_parcelmachine_checkout_fields'));
1420 - add_action('woocommerce_after_checkout_validation', array(&$this, 'check_parcelmachine_checkout_fields'));
1421 - add_action('woocommerce_checkout_update_order_meta', array(&$this, 'add_parcelmachine_order_meta'));
1422 - add_filter('woocommerce_order_shipping_to_display_shipped_via', array(&$this, 'add_admin_parcelmachine_via_field'));
1423 -
1424 - // Woocommerce Multilingual overrides
1425 - if ( in_array( 'woocommerce-multilingual/wpml-woocommerce.php', apply_filters( 'active_plugins', get_option( 'active_plugins' ) ) ) ) {
1426 - add_filter('woocommerce_package_rates', array($this, 'override_label_translation'), 50);
1427 - add_filter('woocommerce_order_get_items', array($this, 'override_shipping_title_translation'), 50, 2);
1428 - }
1429 - }
1430 -
1431 - public function override_label_translation($rates) {
1432 - $id_instance = $this->id . ':' . $this->instance_id;
1433 - if(array_key_exists($id_instance, $rates)) {
1434 - $rates[$id_instance]->label = $this->title;
1435 - }
1436 - return $rates;
1437 - }
1438 -
1439 - public function override_shipping_title_translation($items, $order) {
1440 - foreach ($items as $key => $item) {
1441 - if($item['type'] == 'shipping') {
1442 - foreach ($item['item_meta_array'] as $meta) {
1443 - $tmp = explode(':', $meta->value);
1444 - if($meta->key == 'method_id' && $tmp[0] == $this->id) {
1445 - $items[$key]['name'] = $this->title;
1446 - }
1447 - }
1448 - }
1449 - }
1450 - return $items;
1451 - }
1452 -
1453 - public function generate_shipping_ui_javascript_html( $key, $data ) { ?>
1454 - <script type="text/javascript">
1455 - jQuery(document).ready(function($) {
1456 - var country_select = $('#woocommerce_parcelmachine_<?php echo strtolower($this->ext); ?>_countries');
1457 - var prices = [], free_shippings = [];
1458 - $.each(country_select.find('option'), function(i, option) {
1459 - prices[$(option).val()] = $('#woocommerce_parcelmachine_<?php echo strtolower($this->ext); ?>_price_' + $(option).val().toLowerCase()).closest('tr');
1460 - free_shippings[$(option).val()] = $('#woocommerce_parcelmachine_<?php echo strtolower($this->ext); ?>_free_shipping_min_amount_' + $(option).val().toLowerCase()).closest('tr');
1461 - });
1462 - country_select.on('change', function(){
1463 - var countries = $(this).val();
1464 - if(countries) {
1465 - hidePrices(countries);
1466 - }
1467 - });
1468 - hidePrices(country_select.val());
1469 - function hidePrices(countries) {
1470 - for (var key in prices) {
1471 - if(countries.indexOf(key) == -1){
1472 - prices[key].hide();
1473 - free_shippings[key].hide();
1474 - } else {
1475 - prices[key].show();
1476 - free_shippings[key].show();
1477 - }
1478 - }
1479 - }
1480 - });
1481 - </script>
1482 - <?php }
1483 -
1484 - function calculate_shipping($package = array()) {
1485 - $price = isset($this->instance_settings['price']) ? $this->instance_settings['price'] : (isset($this->settings['price_'.$package['destination']['country']]) ? $this->settings['price_'.$package['destination']['country']] : 0);
1486 -
1487 - $free_shipping_min_amount = $this->instance_settings['free_shipping_min_amount'];
1488 -
1489 - if ($free_shipping_min_amount && $package['contents_cost'] >= $free_shipping_min_amount) {
1490 - $price = 0;
1491 - }
1492 -
1493 - $free_shipping = true;
1494 - foreach ($package['contents'] as $line) {
1495 - $free_shipping = get_post_meta($line['product_id'], '_no_shipping_cost', true) === 'yes' ? $free_shipping : false;
1496 - }
1497 - if($free_shipping) {
1498 - $price = 0;
1499 - }
1500 - $rate = array(
1501 - 'id' => $this->get_rate_id(),
1502 - 'label' => $this->title,
1503 - 'cost' => $price,
1504 - 'package' => $package,
1505 - 'calc_tax' => 'per_order',
1506 - );
1507 - $this->add_rate( $rate );
1508 - }
1509 -
1510 - function calculate_weight($package) {
1511 - $weight = 0;
1512 - foreach ($package['contents'] as $line) {
1513 - $weight += $line['data']->get_weight();
1514 - }
1515 - return $weight;
1516 - }
1517 -
1518 - function fits_parcel_machine($package) {
1519 - foreach ($package['contents'] as $line) {
1520 - if (get_post_meta($line['product_id'], '_no_parcel_machine', true) === 'yes') {
1521 - return false;
1522 - }
1523 - }
1524 - return true;
1525 - }
1526 -
1527 - function is_available($package) {
1528 - if (!$this->fits_parcel_machine($package)) {
1529 - return false;
1530 - }
1531 - $package_weight = $this->calculate_weight($package);
1532 - if ($package_weight >= $this->maximum_weight) {
1533 - return false;
1534 - }
1535 - $is_available = $this->enable === 'yes';
1536 - if (!$is_available || !mk_is_api_set()) {
1537 - return false;
1538 - }
1539 - if (is_array($this->countries) && !in_array($package['destination']['country'], $this->countries)) {
1540 - $is_available = false;
1541 - }
1542 - $this->order_country = $package['destination']['country'];
1543 - return apply_filters('woocommerce_shipping_' . $this->id . '_is_available', $is_available, $package);
1544 - }
1545 -
1546 - function mk_get_machines() {
1547 - $machines = mk_get_machines($this->ext, $this->order_country);
1548 - if ($this->prioritization === 'yes') {
1549 - usort($machines, function($a, $b) {
1550 - $sortorder = array(
1551 - 'tallinn', 'tartu linn','tartu', 'narva', 'pärnu linn','pärnu', 'viljandi', 'kohtla-järve', 'rakvere', 'maardu', 'sillamäe', 'kuressaare',
1552 - 'helsinki', 'espoo', 'tampere', 'vantaa', 'oulu', 'turku', 'jüväskülä', 'lahti', 'kuopio', 'kouvola',
1553 - 'rīga','riga', 'daugavpils', 'liepāja','liepaja', 'jelgava', 'jūrmala','jurmala', 'ventspils', 'rezekne', 'valmiera', 'jekabpils',
1554 - 'vilnius', 'kaunas', 'klaipeda', 'siauliai', 'panevezys', 'alytus', 'mariampole', 'mazeikiai', 'jonava', 'utena'
1555 - );
1556 - $acity = mb_strtolower($a['city']);
1557 - $bcity = mb_strtolower($b['city']);
1558 - if (!$acity) { $acity = 'xxxxxxx'; }
1559 - if (!$bcity) { $bcity = 'xxxxxxx'; }
1560 - $aidx = array_search($acity, $sortorder);
1561 - $bidx = array_search($bcity, $sortorder);
1562 - if ($aidx !== false) {
1563 - $acity = str_pad($aidx, 4, "0", STR_PAD_LEFT) . '-' . $acity;
1564 - }
1565 - if ($bidx !== false) {
1566 - $bcity = str_pad($bidx, 4, "0", STR_PAD_LEFT) . '-' . $bcity;
1567 - }
1568 - $acity .= '-' . mb_strtolower($a['name']);
1569 - $bcity .= '-' . mb_strtolower($b['name']);
1570 - return $acity < $bcity ? -1 : 1;
1571 - });
1572 - }
1573 - return $machines;
1574 - }
1575 -
1576 - function add_parcelmachine_checkout_fields($fragments) {
1577 - $this->order_country = WC()->customer->get_shipping_country();
1578 - $res = '';
1579 - $res .= '<tr style="display: none;" class="parcel_machine_checkout parcel_machine_checkout_parcelmachine_'.mb_strtolower($this->ext).'">';
1580 - // echo '<th>' . $this->title . '</th>';
1581 - // echo '<td>';
1582 - $res .= '<td colspan="2">';
1583 - $options = array();
1584 - $machines = $this->mk_get_machines();
1585 - $res .= '<p class="form-row" id="'.esc_attr($this->id).'_field">';
1586 - $res .= '<select class="select" name="'.esc_attr($this->id).'" id="'.esc_attr($this->id).'">';
1587 - $res .= '<option value="">'.__('-- select parcel machine --', 'wc_makecommerce_domain').'</option>';
1588 - $pcity = false;
1589 - foreach ($machines as $machine) {
1590 - $city = strtolower($machine['city']);
1591 - if ($city !== $pcity) {
1592 - if ($pcity) $res .= '</optgroup>';
1593 - $res .= '<optgroup label="'.$machine['city'].'">';
1594 - }
1595 - $mname = $machine['name'];
1596 - if ($this->short_office_names !== 'yes') $mname .= ' - ' . $machine['city'] . ', ' . $machine['address'];
1597 - $res .= '<option value="'.esc_attr($machine['carrier'].'||'.$machine['id']).'">'.$mname.'</option>';
1598 - $pcity = $city;
1599 - }
1600 - if ($pcity) $res .= '</optgroup>';
1601 - $res .= '</select>';
1602 - $res .= '</p>';
1603 - $res .= '</td></tr>';
1604 - echo $res;
1605 - }
1606 -
1607 - function check_parcelmachine_checkout_fields() {
1608 - $shipping_method = !empty($_POST['shipping_method']) ? $_POST['shipping_method'] : false;
1609 - if (!empty($shipping_method[0])) { $shipping_method_ext = explode(':', $shipping_method[0]); }
1610 - if ($shipping_method_ext[0] === $this->id && empty($_POST[$shipping_method_ext[0]])) {
1611 - wc_add_notice(__('<strong>Parcel machine</strong> is a required field.'), 'error');
1612 - }
1613 - }
1614 -
1615 - function add_parcelmachine_order_meta($order_id) {
1616 - $shipping_method = !empty($_POST['shipping_method']) ? $_POST['shipping_method'] : false;
1617 - if (!empty($shipping_method[0])) { $shipping_method_ext = explode(':', $shipping_method[0]); }
1618 - if ($shipping_method_ext[0] === $this->id && !empty($_POST[$this->id])) {
1619 - update_post_meta($order_id, '_parcel_machine', sanitize_text_field($_POST[$this->id]));
1620 - }
1621 - }
1622 -
1623 - function add_admin_parcelmachine_via_field($order) {
1624 - return ' <small>(via '.$this->name_ext.')</small>';
1625 - }
1626 - }
1627 -
1628 - class WC_ParcelMachine_Shipping_Method_Omniva extends WC_ParcelMachine_Shipping_Method {
1629 - function __construct($instance_id = 0) {
1630 - $this->ext = 'Omniva';
1631 - $this->name_ext = 'Omniva';
1632 - $this->carrier = 'omniva';
1633 - $this->type = 'apt';
1634 - parent::__construct($instance_id);
1635 - }
1636 - function init_form_fields() {
1637 -
1638 - $this->instance_form_fields = array();
1639 - $this->instance_form_fields['logo'] = array('type' => 'title', 'title' => __get_logo_html());
1640 - $this->instance_form_fields['price'] = array(
1641 - 'title' => __('Shipping price', 'wc_makecommerce_domain'),
1642 - 'type' => 'text',
1643 - 'default' => '2.99'
1644 - );
1645 - $this->instance_form_fields['free_shipping_min_amount'] = array(
1646 - 'title' => __('Free shipping amount', 'wc_makecommerce_domain'),
1647 - 'type' => 'number',
1648 - 'default' => '0',
1649 - 'desc_tip' => __('(0 means no free shipping)', 'wc_makecommerce_domain'),
1650 - );
1651 -
1652 - $this->form_fields = array();
1653 - $this->form_fields['logo'] = array('type' => 'title', 'title' => __get_logo_html());
1654 - $this->form_fields['generic'] = array(
1655 - 'type' => 'title',
1656 - 'title' => __('Generic and pricing options', 'wc_makecommerce_domain'),
1657 - 'description' => __('You can always exclude a product from being available for the Parcel Machine delivery by clicking "Does not fit parcel machine" in the product\'s shipping options.', 'wc_makecommerce_domain').'<br>'.__('You can mark there also a product as "Free shipping in parcel machine."', 'wc_makecommerce_domain'),
1658 - );
1659 - $this->form_fields['active'] = array(
1660 - 'title' => __('Enable', 'wc_makecommerce_domain'),
1661 - 'type' => 'checkbox',
1662 - 'label' => __('enabled', 'wc_makecommerce_domain'),
1663 - 'default' => 'no',
1664 - );
1665 - $this->form_fields['maximum_weight'] = array(
1666 - 'title' => sprintf(__('Maximum weight allowed for shipping (%s)', 'wc_makecommerce_domain'), get_option('woocommerce_weight_unit' )),
1667 - 'type' => 'text',
1668 - 'default' => '30'
1669 - );
1670 -
1671 - $this->form_fields['look_and_feel'] = array( 'type' => 'title', 'title' => '<hr><br>'.__('Look and feel options', 'wc_makecommerce_domain'), 'description' => __('Options for presentation on check-out page', 'wc_makecommerce_domain'));
1672 -
1673 - if ( function_exists('icl_object_id') && ! defined( 'POLYLANG_VERSION' ) ) {
1674 - $languages = apply_filters('wpml_active_languages', NULL, 'skip_missing=0');
1675 - }
1676 - else if ( defined( 'POLYLANG_VERSION' ) ) {
1677 - $pl_locales = pll_languages_list( array('fields'=>'locale') );
1678 - foreach ($pl_locales as $key => $locale_pl ) {
1679 - $language = array( 'id' => $key,
1680 - 'code' => $locale_pl) ;
1681 - $languages[$locale_pl] = $language;
1682 - }
1683 - }
1684 -
1685 - if (empty($languages)) {
1686 - $this->form_fields['method_name'] = array(
1687 - 'title' => __('Shipping Method Title', 'wc_makecommerce_domain'),
1688 - 'type' => 'text',
1689 - 'default' => __('Omniva Parcel Machine', 'wc_makecommerce_domain')
1690 - );
1691 - } else {
1692 - foreach ($languages as $language_code => $language) {
1693 - $language_name = !empty($language['translated_name']) ? $language['translated_name'] : $language_code;
1694 - $this->form_fields['method_name_'.$language_code] = array(
1695 - 'title' => __('Shipping Method Title', 'wc_makecommerce_domain').sprintf(' (%s)', $language_code),
1696 - 'type' => 'text',
1697 - 'default' => __('Omniva Parcel Machine', 'wc_makecommerce_domain')
1698 - );
1699 - }
1700 - }
1701 - $this->form_fields['prioritization'] = array(
1702 - 'title' => __('Prioritize', 'wc_makecommerce_domain'),
1703 - 'type' => 'checkbox',
1704 - 'label' => __('Bigger cities will be on top of list, others sorted alphabetically', 'wc_makecommerce_domain'),
1705 - 'default' => 'yes'
1706 - );
1707 - $this->form_fields['short_office_names'] = array(
1708 - 'title' => __('Short names', 'wc_makecommerce_domain'),
1709 - 'type' => 'checkbox',
1710 - 'label' => __('Display only parcel machine names, without addresses', 'wc_makecommerce_domain'),
1711 - 'default' => 'no'
1712 - );
1713 - $this->form_fields['api_access'] = array( 'type' => 'title', 'title' => '<hr><br>'.__('API access for', 'wc_makecommerce_domain').' '.$this->ext, 'description' => sprintf(__('You can automatically create shipments into Omniva system and print the out the package labels right here, at the shop orders view. <br> Please set your Omniva web servises account credentials below here. <br>(see more on <a href="https://makecommerce.net/en/integration-modules/makecommerce-woocommerce-payment-plugin/#carriers-integration">MakeCommerce plugin page</a>. Don\'t forget to enable also <a href="%s">MC API keys</a>!)', 'wc_makecommerce_domain'), admin_url('admin.php?page=wc-settings&tab=api&section=mk_api')));
1714 - $this->form_fields['service_user'] = array(
1715 - 'title' => __('Omniva web services username', 'wc_makecommerce_domain'),
1716 - 'type' => 'text',
1717 - 'default' => ''
1718 - );
1719 - $this->form_fields['service_password'] = array(
1720 - 'title' => __('Omniva web services password', 'wc_makecommerce_domain'),
1721 - 'type' => 'text',
1722 - 'default' => ''
1723 - );
1724 - $this->form_fields['return_address'] = array( 'type' => 'title', 'title' => __('Return address', 'wc_makecommerce_domain'), 'description' => __('Please define return address for Omniva shipments', 'wc_makecommerce_domain'));
1725 - $this->form_fields['shop_name'] = array(
1726 - 'type' => 'text',
1727 - 'title' => __('Shop name', 'wc_makecommerce_domain'),
1728 - 'class' => 'input-text regular-input',
1729 - );
1730 - $this->form_fields['shop_phone'] = array(
1731 - 'type' => 'text',
1732 - 'title' => __('Shop phone', 'wc_makecommerce_domain'),
1733 - 'class' => 'input-text regular-input',
1734 - );
1735 - $this->form_fields['shop_email'] = array(
1736 - 'type' => 'text',
1737 - 'title' => __('Shop email', 'wc_makecommerce_domain'),
1738 - 'class' => 'input-text regular-input',
1739 - );
1740 - $this->form_fields['shop_address_country'] = array(
1741 - 'type' => 'text',
1742 - 'title' => __('Shop address country', 'wc_makecommerce_domain'),
1743 - 'description' => __('Put here short country code, i.e. EE, LV, FI', 'wc_makecommerce_domain'),
1744 - 'class' => 'input-text regular-input',
1745 - );
1746 - $this->form_fields['shop_address_city'] = array(
1747 - 'type' => 'text',
1748 - 'title' => __('Shop address city', 'wc_makecommerce_domain'),
1749 - 'class' => 'input-text regular-input',
1750 - );
1751 - $this->form_fields['shop_address_street'] = array(
1752 - 'type' => 'text',
1753 - 'title' => __('Shop address street', 'wc_makecommerce_domain'),
1754 - 'class' => 'input-text regular-input',
1755 - );
1756 - $this->form_fields['shop_postal_code'] = array(
1757 - 'type' => 'text',
1758 - 'title' => __('Shop postal code', 'wc_makecommerce_domain'),
1759 - 'class' => 'input-text regular-input',
1760 - );
1761 - $this->form_fields['shipping_ui_javascript'] = array(
1762 - 'type' => 'shipping_ui_javascript',
1763 - );
1764 - }
1765 - }
1766 -
1767 - class WC_ParcelMachine_Shipping_Method_Smartpost extends WC_ParcelMachine_Shipping_Method {
1768 - function __construct($instance_id = 0) {
1769 - $this->ext = 'SmartPost';
1770 - $this->name_ext = 'SmartPOST';
1771 - $this->carrier = 'smartpost';
1772 - $this->type = 'apt';
1773 - parent::__construct($instance_id);
1774 - }
1775 - function init_form_fields() {
1776 -
1777 - global $woocommerce;
1778 -
1779 - $this->instance_form_fields = array();
1780 - $this->instance_form_fields['logo'] = array('type' => 'title', 'title' => __get_logo_html());
1781 -
1782 - $this->instance_form_fields['price'] = array(
1783 - 'title' => __('Shipping price', 'wc_makecommerce_domain'),
1784 - 'type' => 'text',
1785 - 'default' => '2.99'
1786 - );
1787 - $this->instance_form_fields['free_shipping_min_amount'] = array(
1788 - 'title' => __('Free shipping amount', 'wc_makecommerce_domain'),
1789 - 'type' => 'number',
1790 - 'default' => '0',
1791 - 'desc_tip' => __('(0 means no free shipping)', 'wc_makecommerce_domain'),
1792 - );
1793 -
1794 - $this->form_fields = array();
1795 - $this->form_fields['logo'] = array('type' => 'title', 'title' => __get_logo_html());
1796 - $this->form_fields['generic'] = array(
1797 - 'type' => 'title',
1798 - 'title' => __('Generic and pricing options', 'wc_makecommerce_domain'),
1799 - 'description' => __('You can always exclude a product from being available for the Parcel Machine delivery by clicking "Does not fit parcel machine" in the product\'s shipping options.', 'wc_makecommerce_domain').'<br>'.__('You can mark there also a product as "Free shipping in parcel machine."', 'wc_makecommerce_domain'),
1800 - );
1801 -
1802 - $this->form_fields['active'] = array(
1803 - 'title' => __('Enable', 'wc_makecommerce_domain'),
1804 - 'type' => 'checkbox',
1805 - 'label' => __('enabled', 'wc_makecommerce_domain'),
1806 - 'default' => 'no',
1807 - );
1808 - $this->form_fields['maximum_weight'] = array(
1809 - 'title' => sprintf(__('Maximum weight allowed for shipping (%s)', 'wc_makecommerce_domain'), get_option('woocommerce_weight_unit' )),
1810 - 'type' => 'text',
1811 - 'default' => '30'
1812 - );
1813 -
1814 - $this->form_fields['look_and_feel'] = array( 'type' => 'title', 'title' => '<hr><br>'.__('Look and feel options', 'wc_makecommerce_domain'), 'description' => __('Options for presentation on checkout page', 'wc_makecommerce_domain'));
1815 -
1816 - if ( function_exists('icl_object_id') && ! defined( 'POLYLANG_VERSION' ) ) {
1817 - $languages = apply_filters('wpml_active_languages', NULL, 'skip_missing=0');
1818 - }
1819 - else if ( defined( 'POLYLANG_VERSION' ) ) {
1820 - $pl_locales = pll_languages_list( array('fields'=>'locale') );
1821 - foreach ($pl_locales as $key => $locale_pl ) {
1822 - $language = array( 'id' => $key,
1823 - 'code' => $locale_pl) ;
1824 - $languages[$locale_pl] = $language;
1825 - }
1826 - }
1827 -
1828 - if (empty($languages)) {
1829 - $this->form_fields['method_name'] = array(
1830 - 'title' => __('Shipping Method Title', 'wc_makecommerce_domain'),
1831 - 'type' => 'text',
1832 - 'default' => __('SmartPOST Parcel Machine', 'wc_makecommerce_domain')
1833 - );
1834 - } else {
1835 - foreach ($languages as $language_code => $language) {
1836 - $language_name = !empty($language['translated_name']) ? $language['translated_name'] : $language_code;
1837 - $this->form_fields['method_name_'.$language_code] = array(
1838 - 'title' => __('Shipping Method Title', 'wc_makecommerce_domain').sprintf(' (%s)', $language_code),
1839 - 'type' => 'text',
1840 - 'default' => __('SmartPOST Parcel Machine', 'wc_makecommerce_domain')
1841 - );
1842 - }
1843 - }
1844 - $this->form_fields['prioritization'] = array(
1845 - 'title' => __('Prioritize', 'wc_makecommerce_domain'),
1846 - 'type' => 'checkbox',
1847 - 'label' => __('Bigger cities will be on top of list, others sorted alphabetically', 'wc_makecommerce_domain'),
1848 - 'default' => 'yes'
1849 - );
1850 - $this->form_fields['short_office_names'] = array(
1851 - 'title' => __('Short names', 'wc_makecommerce_domain'),
1852 - 'type' => 'checkbox',
1853 - 'label' => __('Display only parcel machine names, without addresses', 'wc_makecommerce_domain'),
1854 - 'default' => 'no'
1855 - );
1856 - $this->form_fields['api_access'] = array( 'type' => 'title', 'title' => '<hr><br>'.__('API access for', 'wc_makecommerce_domain').' '.$this->ext, 'description' => sprintf(__('You can automatically create shipments into smartpost.ee system and print the out the package labels right here, at the shop orders view. <br> Please set your smartpost.ee account credentials below here. <br>(See more on <a href="https://makecommerce.net/en/integration-modules/makecommerce-woocommerce-payment-plugin/#carriers-integration">MakeCommerce plugin page</a>. Don\'t forget to enable also <a href="%s">MC API keys</a>!)', 'wc_makecommerce_domain'), admin_url('admin.php?page=wc-settings&tab=api&section=mk_api')));
1857 - $this->form_fields['service_user'] = array(
1858 - 'title' => __('eteenindus.smartpost.ee username', 'wc_makecommerce_domain'),
1859 - 'type' => 'text',
1860 - 'default' => ''
1861 - );
1862 - $this->form_fields['service_password'] = array(
1863 - 'title' => __('eteenindus.smartpost.ee password', 'wc_makecommerce_domain'),
1864 - 'type' => 'text',
1865 - 'default' => ''
1866 - );
1867 - $this->form_fields['return_address'] = array( 'type' => 'title', 'title' => __('Return address', 'wc_makecommerce_domain'), 'description' => __('Please define return address for SmartPOST shipments (used on parcel labels)', 'wc_makecommerce_domain'));
1868 - $this->form_fields['shop_name'] = array(
1869 - 'type' => 'text',
1870 - 'title' => __('Shop name', 'wc_makecommerce_domain'),
1871 - 'class' => 'input-text regular-input',
1872 - );
1873 - $this->form_fields['shop_phone'] = array(
1874 - 'type' => 'text',
1875 - 'title' => __('Shop phone', 'wc_makecommerce_domain'),
1876 - 'class' => 'input-text regular-input',
1877 - );
1878 - $this->form_fields['shop_email'] = array(
1879 - 'type' => 'text',
1880 - 'title' => __('Shop email', 'wc_makecommerce_domain'),
1881 - 'class' => 'input-text regular-input',
1882 - );
1883 - $this->form_fields['shipping_ui_javascript'] = array(
1884 - 'type' => 'shipping_ui_javascript',
1885 - );
1886 - }
1887 - }
1888 -
1889 - if (($cur_ver = get_site_option('wc_mc_version', 0)) < WC_MC_VERSION) {
1890 - error_log("Need to update from [{$cur_ver}] to [".WC_MC_VERSION."]");
1891 - if (WC_MC_VERSION === 2.0) {
1892 - // Check if omniva / smartpost is enabled and in which countries
1893 - // Convert to shipping zone
1894 - foreach (array('parcelmachine_omniva' => 'WC_ParcelMachine_Shipping_Method_Omniva', 'parcelmachine_smartpost' => 'WC_ParcelMachine_Shipping_Method_SmartPost') as $method_name => $method_class) {
1895 - $transport_class_omniva = new $method_class();
1896 - if ($transport_class_omniva->enable === 'yes') {
1897 - $zones = WC_Shipping_Zones::get_zones();
1898 - foreach ($transport_class_omniva->countries as $ecountry) {
1899 - $has_ecountry = false;
1900 - foreach ($zones as $zone) {
1901 - foreach ($zone['zone_locations'] as $location) {
1902 - if ($location->code === $ecountry) {
1903 - $has_ecountry = $zone['zone_id'];
1904 - foreach ($zone['shipping_methods'] as $method) {
1905 - if ($method->id === $method_name) {
1906 - continue 4;
1907 - }
1908 - }
1909 - }
1910 - }
1911 - }
1912 - if (!$has_ecountry) {
1913 - $zone = new WC_Shipping_Zone();
1914 - $zone->set_zone_name($ecountry);
1915 - $zone->add_location($ecountry, 'country');
1916 - $zone->save();
1917 - } else {
1918 - $zone = new WC_Shipping_Zone($has_ecountry);
1919 - }
1920 - $instance_id = $zone->add_shipping_method($method_name);
1921 - $transport_class = new $method_class($instance_id);
1922 - $price = !empty($transport_class->settings['price_'.strtolower($ecountry)]) ? $transport_class->settings['price_'.strtolower($ecountry)] : 0;
1923 - $free_shipping_min_amount = !empty($transport_class->settings['free_shipping_min_amount_'.strtolower($ecountry)]) ? $transport_class->settings['free_shipping_min_amount_'.strtolower($ecountry)] : 0;
1924 - $transport_class->set_post_data(array($transport_class->get_field_key('price') => $price, $transport_class->get_field_key('free_shipping_min_amount') => $free_shipping_min_amount));
1925 - $transport_class->process_admin_options();
1926 - }
1927 - }
1928 - }
1929 - }
1930 - update_site_option('wc_mc_version', WC_MC_VERSION);
1931 - }
241 + $mk_shop_id = get_option('mk_'.$key_prefix.'shop_id', '');
242 + $mk_public_key = get_option('mk_'.$key_prefix.'public_key', '');
243 + $mk_private_key = get_option('mk_'.$key_prefix.'private_key', '');
244 + if (!$mk_shop_id || !$mk_public_key || !$mk_shop_id) {
245 + return false;
1932 246 }
247 + return true;
248 + }
1933 249
1934 - if ( ! class_exists( 'WC_Courier_Shipping_Method_Omniva' ) ) {
1935 250
1936 - class WC_Courier_Shipping_Method_Omniva extends WC_Shipping_Method {
251 + function mk_admin_error() {
252 + printf( '<div class="%1$s"><p>%2$s</p></div>', 'notice notice-error', __('Please check that you have configured correctly MakeCommerce API accesses', 'wc_makecommerce_domain'));
253 + }
1937 254
1938 - public function __construct($instance_id = 0) {
1939 - $this->ext = 'Omniva';
1940 - $this->name_ext = 'Omniva';
1941 - $this->id = 'courier_omniva';
1942 - $this->carrier = 'omniva';
1943 - $this->type = 'courier';
1944 - $this->instance_id = absint($instance_id);
1945 - $this->method_title = $this->name_ext .' '.__('courier (MC)', 'wc_makecommerce_domain');
1946 - // $this->method_description = sprintf(__('Courier transport method for %s', 'wc_makecommerce_domain'), $this->ext);
1947 - $this->supports = array('shipping-zones', 'instance-settings', 'instance-settings-modal', 'settings');
1948 - $this->init();
1949 - }
1950 255
1951 - public function init() {
1952 - $this->init_form_fields();
1953 - $this->init_settings();
1954 256
1955 - $this->enable = $this->settings['active'];
1956 - if (defined('ICL_LANGUAGE_CODE') && !empty($this->settings['method_name_'.ICL_LANGUAGE_CODE])) {
1957 - $this->title = $this->settings['method_name_'.ICL_LANGUAGE_CODE];
1958 - } else {
1959 - $this->title = $this->settings['method_name'];
1960 - }
1961 - $this->availability = 'specific';
1962 - $this->free_shipping_min_amount = !empty($this->settings['free_shipping_min_amount']) ? $this->settings['free_shipping_min_amount'] : 0;
1963 - $this->maximum_weight = (double)$this->settings['maximum_weight'];
1964 - $this->order_country = 'unknown';
1965 - add_action('woocommerce_update_options_shipping_' . $this->id, array(&$this, 'process_admin_options'));
1966 - add_filter('woocommerce_order_shipping_to_display_shipped_via', array(&$this, 'add_admin_courier_via_field'));
257 + add_filter('query_vars', 'mk_cron_query_vars');
258 + add_action('parse_request', 'mk_parse_cron_update_vars');
1967 259
1968 - // Woocommerce Multilingual overrides
1969 - if ( in_array( 'woocommerce-multilingual/wpml-woocommerce.php', apply_filters( 'active_plugins', get_option( 'active_plugins' ) ) ) ) {
1970 - add_filter('woocommerce_package_rates', array($this, 'override_label_translation'), 50);
1971 - add_filter('woocommerce_order_get_items', array($this, 'override_shipping_title_translation'), 50, 2);
1972 - }
1973 - }
260 + function mk_cron_query_vars($vars) {
261 + $vars[] = 'mk-action';
262 + $vars[] = 'mk-shop-id';
263 + $vars[] = 'mk-test-shop-id';
264 + return $vars;
265 + }
1974 266
1975 - public function override_label_translation($rates) {
1976 - $id_instance = $this->id . ':' . $this->instance_id;
1977 - if(array_key_exists($id_instance, $rates)) {
1978 - $rates[$id_instance]->label = $this->title;
1979 - }
1980 - return $rates;
1981 - }
1982 -
1983 - public function override_shipping_title_translation($items, $order) {
1984 - foreach ($items as $key => $item) {
1985 - if($item['type'] == 'shipping') {
1986 - foreach ($item['item_meta_array'] as $meta) {
1987 - $tmp = explode(':', $meta->value);
1988 - if($meta->key == 'method_id' && $tmp[0] == $this->id) {
1989 - $items[$key]['name'] = $this->title;
1990 - }
1991 - }
1992 - }
1993 - }
1994 - return $items;
1995 - }
1996 -
1997 - public function init_form_fields() {
1998 -
1999 - global $woocommerce;
2000 -
2001 - $this->instance_form_fields = array();
2002 - $this->instance_form_fields['logo'] = array('type' => 'title', 'title' => __get_logo_html());
2003 - $this->instance_form_fields['price'] = array(
2004 - 'title' => __('Shipping price', 'wc_makecommerce_domain'),
2005 - 'type' => 'text',
2006 - 'default' => '4.95'
2007 - );
2008 - $this->instance_form_fields['free_shipping_min_amount'] = array(
2009 - 'title' => __('Free shipping amount', 'wc_makecommerce_domain'),
2010 - 'type' => 'number',
2011 - 'default' => '0',
2012 - 'desc_tip' => __('(0 means no free shipping)', 'wc_makecommerce_domain'),
2013 - );
2014 -
2015 - $this->form_fields = array();
2016 - $this->form_fields['logo'] = array('type' => 'title', 'title' => __get_logo_html());
2017 - $this->form_fields['generic'] = array(
2018 - 'type' => 'title',
2019 - 'title' => __('Generic and pricing options', 'wc_makecommerce_domain'),
2020 - // 'description' => __('', 'wc_makecommerce_domain'),
2021 - );
2022 - $this->form_fields['active'] = array(
2023 - 'title' => __('Enable', 'wc_makecommerce_domain'),
2024 - 'type' => 'checkbox',
2025 - 'label' => __('enabled', 'wc_makecommerce_domain'),
2026 - 'default' => 'no',
2027 - );
2028 - $this->form_fields['maximum_weight'] = array(
2029 - 'title' => sprintf(__('Maximum weight allowed for shipping (%s)', 'wc_makecommerce_domain'), get_option('woocommerce_weight_unit' )),
2030 - 'type' => 'text',
2031 - 'default' => '60'
2032 - );
2033 -
2034 - $this->form_fields['look_and_feel'] = array( 'type' => 'title', 'title' => '<hr><br>'.__('Look and feel options', 'wc_makecommerce_domain'), 'description' => __('Options for presentation on check-out page', 'wc_makecommerce_domain'));
2035 -
2036 - if ( function_exists('icl_object_id') && ! defined( 'POLYLANG_VERSION' ) ) {
2037 - $languages = apply_filters('wpml_active_languages', NULL, 'skip_missing=0');
2038 - }
2039 - else if ( defined( 'POLYLANG_VERSION' ) ) {
2040 - $pl_locales = pll_languages_list( array('fields'=>'locale') );
2041 - foreach ($pl_locales as $key => $locale_pl ) {
2042 - $language = array( 'id' => $key,
2043 - 'code' => $locale_pl) ;
2044 - $languages[$locale_pl] = $language;
2045 - }
2046 - }
2047 -
2048 - if (empty($languages)) {
2049 - $this->form_fields['method_name'] = array(
2050 - 'title' => __('Shipping Method Title', 'wc_makecommerce_domain'),
2051 - 'type' => 'text',
2052 - 'default' => __('Omniva Courier', 'wc_makecommerce_domain')
2053 - );
2054 - } else {
2055 - foreach ($languages as $language_code => $language) {
2056 - $language_name = !empty($language['translated_name']) ? $language['translated_name'] : $language_code;
2057 - $this->form_fields['method_name_'.$language_code] = array(
2058 - 'title' => __('Shipping Method Title', 'wc_makecommerce_domain').sprintf(' (%s)', $language_code),
2059 - 'type' => 'text',
2060 - 'default' => __('Omniva Courier', 'wc_makecommerce_domain')
2061 - );
2062 - }
2063 - }
2064 -
2065 -
2066 - $this->form_fields['api_access'] = array( 'type' => 'title', 'title' => '<hr><br>'.__('API access for', 'wc_makecommerce_domain').' '.$this->ext, 'description' => sprintf(__('You can automatically create shipments into Omniva system and print the out the package labels right here, at the shop orders view. <br> Please set your Omniva web servises account credentials below here. <br>(see more on <a href="https://makecommerce.net/en/integration-modules/makecommerce-woocommerce-payment-plugin/#carriers-integration">MakeCommerce plugin page</a>. Don\'t forget to enable also <a href="%s">MC API keys</a>!)', 'wc_makecommerce_domain'), admin_url('admin.php?page=wc-settings&tab=api&section=mk_api')));
2067 -
2068 - $this->form_fields['registerOnPaymentCode'] = array(
2069 - 'title' => __('Register shipments automatically as', 'wc_makecommerce_domain'),
2070 - 'type' => 'select',
2071 - 'label' => __('register on Payment', 'wc_makecommerce_domain'),
2072 - 'description' => __('Shipments will be automatically registered on payment using the selected Omniva service code', 'wc_makecommerce_domain'),
2073 - 'options' => array(
2074 - 'QP' => __('QP - handover to Omniva at Post Office', 'wc_makecommerce_domain'),
2075 - 'PK' => __('PK - handover to Omniva via Parcel Machine', 'wc_makecommerce_domain'),
2076 - '' => __('None - do not register automatically', 'wc_makecommerce_domain'),
2077 - ),
2078 - 'default' => 'QP',
2079 - );
2080 -
2081 - $this->form_fields['service_user'] = array(
2082 - 'title' => __('Omniva web services username', 'wc_makecommerce_domain'),
2083 - 'type' => 'text',
2084 - 'default' => ''
2085 - );
2086 - $this->form_fields['service_password'] = array(
2087 - 'title' => __('Omniva web services password', 'wc_makecommerce_domain'),
2088 - 'type' => 'text',
2089 - 'default' => ''
2090 - );
2091 - $this->form_fields['return_address'] = array( 'type' => 'title', 'title' => __('Return address', 'wc_makecommerce_domain'), 'description' => __('Please define return address for Omniva shipments', 'wc_makecommerce_domain'));
2092 - $this->form_fields['shop_name'] = array(
2093 - 'type' => 'text',
2094 - 'title' => __('Shop name', 'wc_makecommerce_domain'),
2095 - 'class' => 'input-text regular-input',
2096 - );
2097 - $this->form_fields['shop_phone'] = array(
2098 - 'type' => 'text',
2099 - 'title' => __('Shop phone', 'wc_makecommerce_domain'),
2100 - 'class' => 'input-text regular-input',
2101 - );
2102 - $this->form_fields['shop_email'] = array(
2103 - 'type' => 'text',
2104 - 'title' => __('Shop email', 'wc_makecommerce_domain'),
2105 - 'class' => 'input-text regular-input',
2106 - );
2107 - $this->form_fields['shop_address_country'] = array(
2108 - 'type' => 'text',
2109 - 'title' => __('Shop address country', 'wc_makecommerce_domain'),
2110 - 'description' => __('Put here short country code, i.e. EE, LV, FI', 'wc_makecommerce_domain'),
2111 - 'class' => 'input-text regular-input',
2112 - );
2113 - $this->form_fields['shop_address_city'] = array(
2114 - 'type' => 'text',
2115 - 'title' => __('Shop address city', 'wc_makecommerce_domain'),
2116 - 'class' => 'input-text regular-input',
2117 - );
2118 - $this->form_fields['shop_address_street'] = array(
2119 - 'type' => 'text',
2120 - 'title' => __('Shop address street', 'wc_makecommerce_domain'),
2121 - 'class' => 'input-text regular-input',
2122 - );
2123 - $this->form_fields['shop_postal_code'] = array(
2124 - 'type' => 'text',
2125 - 'title' => __('Shop postal code', 'wc_makecommerce_domain'),
2126 - 'class' => 'input-text regular-input',
2127 - );
2128 - }
2129 -
2130 - public function calculate_shipping($package = array()) {
2131 -
2132 - $price = $this->instance_settings['price'];
2133 -
2134 - $free_shipping_min_amount = $this->instance_settings['free_shipping_min_amount'];
2135 -
2136 - if ($free_shipping_min_amount && $package['contents_cost'] >= $free_shipping_min_amount) {
2137 - $price = 0;
2138 - }
2139 -
2140 - $rate = array(
2141 - 'id' => $this->get_rate_id(),
2142 - 'label' => $this->title,
2143 - 'cost' => $price,
2144 - 'package' => $package,
2145 - 'calc_tax' => 'per_order',
2146 - );
2147 - $this->add_rate( $rate );
2148 - }
2149 -
2150 - public function calculate_weight($package) {
2151 - $weight = 0;
2152 - foreach ($package['contents'] as $line) {
2153 - $weight += $line['data']->get_weight();
2154 - }
2155 - return $weight;
2156 - }
2157 -
2158 - public function is_available($package) {
2159 -
2160 - $package_weight = $this->calculate_weight($package);
2161 - if ($package_weight >= $this->maximum_weight) {
2162 - return false;
2163 - }
2164 - $is_available = $this->enable === 'yes';
2165 - if (!$is_available || !mk_is_api_set()) {
2166 - return false;
2167 - }
2168 -
2169 - $this->order_country = $package['destination']['country'];
2170 - return apply_filters('woocommerce_shipping_' . $this->id . '_is_available', $is_available, $package);
2171 - }
2172 -
2173 - public function add_admin_courier_via_field($order) {
2174 - return ' <small>(via ' . $this->name_ext . ' ' . __('Courier', 'wc_makecommerce_domain') . ')</small>';
2175 - }
267 + function mk_parse_cron_update_vars($wp) {
268 + if (array_key_exists('mk-action', $wp->query_vars) && $wp->query_vars['mk-action'] == 'mk-update'
269 + && (array_key_exists('mk-shop-id', $wp->query_vars) || array_key_exists('mk-test-shop-id', $wp->query_vars) ) ) {
270 + if( (strlen($wp->query_vars['mk-shop-id']) && $wp->query_vars['mk-shop-id'] == get_option('mk_shop_id', false) )
271 + || (strlen($wp->query_vars['mk-test-shop-id']) && $wp->query_vars['mk-test-shop-id'] == get_option('mk_test_shop_id', false) ) ) {
272 + update_mc_banklinks();
273 + exit();
2176 274 }
2177 275 }
2178 276 }
2179 - add_action('woocommerce_shipping_init', 'transport_add_method');
2180 277
2181 - function add_mc_shipping_method($methods) {
2182 - $methods['parcelmachine_omniva'] = 'WC_ParcelMachine_Shipping_Method_Omniva';
2183 - $methods['parcelmachine_smartpost'] = 'WC_ParcelMachine_Shipping_Method_Smartpost';
2184 - $methods['courier_omniva'] = 'WC_Courier_Shipping_Method_Omniva';
2185 - return $methods;
278 + function mk_admin_login_update($user_login, $user) {
279 + if(user_can( $user, 'administrator' )) {
280 + update_mc_banklinks();
281 + }
2186 282 }
2187 - add_filter('woocommerce_shipping_methods', 'add_mc_shipping_method');
283 + add_action('wp_login', 'mk_admin_login_update', 10, 2);
2188 284
2189 - function mk_mc_add_assets() {
2190 - wp_enqueue_style('parcelmachine-css', plugin_dir_url(__FILE__).'/css/parcelmachine.css');
2191 - wp_enqueue_script('parcelmachine-js', plugin_dir_url(__FILE__).'/scripts/parcelmachine.js', array('jquery'));
2192 - }
2193 - add_action('wp_enqueue_scripts', 'mk_mc_add_assets');
2194 285
2195 - function mk_admin_plugin_settings_link($links) {
2196 - $settings_link = '<a href="admin.php?page=wc-settings&tab=api&section=mk_api">API '.__('Settings').'</a>';
2197 - array_unshift($links, $settings_link);
2198 - return $links;
2199 - }
2200 - $plugin = plugin_basename(__FILE__);
2201 - add_filter("plugin_action_links_$plugin", 'mk_admin_plugin_settings_link' );
2202 286
2203 - function mk_admin_add_settings($sections) {
287 + function mk_admin_add_api_settings($sections) {
2204 288 $sections['mk_api'] = __('MakeCommerce API access', 'wc_makecommerce_domain');
2205 289 return $sections;
2206 290 }
2207 291
2208 - function mk_admin_all_settings($settings) {
292 + function mk_admin_api_settings($settings) {
2209 293 global $current_section;
2210 294 if ($current_section !== 'mk_api') {
2211 295 return $settings;
2212 296 }
@@ -2215,15 +299,9 @@
2215 299 array(
2216 300 'type' => 'title',
2217 301 'title' => __('MakeCommerce API access credentials', 'wc_makecommerce_domain'),
2218 302 'desc' => __('To use MakeCommerce/Maksekeskus services you need to enter API credentials below here <br/> <br/>', 'wc_makecommerce_domain').
2219 - sprintf( __('To further configure the Payment methods please go to <a href="%s">MakeCommerce Checkout Options</a><br>', 'wc_makecommerce_domain'), 'admin.php?page=wc-settings&tab=checkout&section=makecommerce').
2220 - sprintf( __('To use also Ominva or Itella SmartPOST integration please configure these API accesses: <a href="%s">Omniva Parcel Machine API access</a> | '.
2221 - '<a href="%s">SmartPOST API access</a> | <a href="%s">Omniva Courier API access</a><br/>','wc_makecommerce_domain'),
2222 - 'admin.php?page=wc-settings&tab=-shipping&section=parcelmachine_omniva',
2223 - 'admin.php?page=wc-settings&tab=shipping&section=parcelmachine_smartpost',
2224 - 'admin.php?page=wc-settings&tab=shipping&section=courier_omniva'
2225 - ),
303 + sprintf( __('To further configure the Payment methods please go to <a href=."%s">MakeCommerce Checkout Options</a>, links to settings of our Shipment methods are listed below', 'wc_makecommerce_domain'), 'admin.php?page=wc-settings&tab=checkout&section=makecommerce'),
2226 304 'id' => 'mk_api_settings'
2227 305 ),
2228 306 array(
2229 307 'type' => 'select',
@@ -2259,8 +337,9 @@
2259 337 'id' => 'mk_test_shop_id',
2260 338 'type' => 'text',
2261 339 'title' => __('Shop ID (test)', 'wc_makecommerce_domain'),
2262 340 'class' => 'input-text regular-input',
341 + 'default' => 'f64b4f20-5ef9-4b7b-a6fa-d623d87f0b9c',
2263 342 'desc' => __('Get it from <a href="https://merchant-test.maksekeskus.ee/api.html" target="_blank">Merchant Portal Test</a>','wc_makecommerce_domain'),
2264 343 ),
2265 344 array(
2266 345 'id' => 'mk_test_private_key',
@@ -2265,8 +344,9 @@
2265 344 array(
2266 345 'id' => 'mk_test_private_key',
2267 346 'type' => 'text',
2268 347 'title' => __('Secret key (test)', 'wc_makecommerce_domain'),
348 + 'default' => 'MPjcVMoRZPAucsTuGK5ZukOlV7BlzgSvXOowJUkk9IFSQPVooRwcVOxzz3mhEpgM',
2269 349 'class' => 'input-text regular-input',
2270 350 ),
2271 351 array(
2272 352 'id' => 'mk_test_public_key',
@@ -2271,11 +351,78 @@
2271 351 array(
2272 352 'id' => 'mk_test_public_key',
2273 353 'type' => 'text',
2274 354 'title' => __('Publishable key (test)', 'wc_makecommerce_domain'),
355 + 'default' => '7Hog41ci2mKkmtviMycWxpNx14pNP70m',
2275 356 'class' => 'input-text regular-input',
2276 357 ),
358 + array('type' => 'sectionend', 'id' => 'mk_api_settings'),
359 + array(
360 + 'type' => 'title',
361 + 'desc' => '<br><hr><br>',
362 + ),
363 + array(
364 + 'id' => 'mk_module_title',
365 + 'type' => 'title',
366 + 'title' => __('Makecommerce modules', 'wc_makecommerce_domain'),
367 + 'desc' => __('Our plugin adds several modules to your shop. Here you can switch off modules that are not important for you, they will disappear from Woocommerce settings menus.<br> Each active module have their own settings dialog, where they must also be Enabled before use.', 'wc_makecommerce_domain'),
368 + 'class' => '',
369 + ),
2277 370 array(
371 + 'id' => 'mk_transport_apt_omniva',
372 + 'type' => 'checkbox',
373 + 'default' => 'yes',
374 + 'title' => __('Omniva Parcel Machine', 'wc_makecommerce_domain'),
375 + 'desc' => __('enable Omniva 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_omniva')).')',
376 + 'class' => '',
377 + ),
378 + array(
379 + 'id' => 'mk_transport_apt_smartpost',
380 + 'type' => 'checkbox',
381 + 'default' => 'yes',
382 + 'title' => __('SmartPOST Parcel Machine', 'wc_makecommerce_domain'),
383 + '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')).')',
384 + 'class' => '',
385 + ),
386 + array(
387 + 'id' => 'mk_transport_apt_dpd',
388 + 'type' => 'checkbox',
389 + 'default' => 'no',
390 + 'title' => __('DPD Pickup Network', 'wc_makecommerce_domain'),
391 + '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')).')',
392 + 'class' => '',
393 + ),
394 + array(
395 + 'id' => 'mk_transport_courier_omniva',
396 + 'type' => 'checkbox',
397 + 'default' => 'yes',
398 + 'title' => __('Omniva Courier', 'wc_makecommerce_domain'),
399 + 'desc' => __('enable Omniva courier 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=courier_omniva')).')',
400 + 'class' => '',
401 + ),
402 + array(
403 + 'id' => 'mk_transport_courier_smartpost',
404 + 'type' => 'checkbox',
405 + 'default' => 'yes',
406 + 'title' => __('SmartPOST Courier', 'wc_makecommerce_domain'),
407 + 'desc' => __('enable SmartPOST courier 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=courier_smartpost')).')',
408 + 'class' => '',
409 + ),
410 + array(
411 + 'id' => 'mk_checkout_sco',
412 + 'type' => 'checkbox',
413 + 'title' => __('SimpleCheckout', 'wc_makecommerce_domain'),
414 + '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')).')',
415 + 'class' => '',
416 + ),
417 + array(
418 + 'id' => 'mk_product_slice',
419 + 'type' => 'checkbox',
420 + 'title' => __('Slice in 3 information in product view', 'wc_makecommerce_domain'),
421 + 'desc' => __('enable Slice in product view', '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')).')',
422 + 'class' => '',
423 + ),
424 + array(
2278 425 'id' => 'mk_javascript_ui',
2279 426 'type' => 'api_javascript_ui',
2280 427 ),
2281 428 array('type' => 'sectionend', 'id' => 'mk_api_settings')
@@ -2281,9 +428,18 @@
2281 428 array('type' => 'sectionend', 'id' => 'mk_api_settings')
2282 429 );
2283 430 }
2284 431
2285 - function mk_admin_save_settings() {
432 + function mk_wc_version($version) {
433 + global $woocommerce;
434 + if ( version_compare( $woocommerce->version, "3.4.0", ">=" ) ) {
435 + return true;
436 + } else {
437 + return false;
438 + }
439 + }
440 +
441 + function mk_admin_save_api_settings() {
2286 442 // reload banklinks
2287 443 global $current_section;
2288 444 if ($current_section !== 'mk_api') {
2289 445 return;
@@ -2290,8 +446,56 @@
2290 446 }
2291 447 update_mc_banklinks();
2292 448 }
2293 449
450 + function mk_admin_plugin_settings_link($links) {
451 + if (mk_wc_version("3.4.0"))
452 + $settings_link = '<a href="admin.php?page=wc-settings&tab=advanced&section=mk_api">API '.__('Settings').'</a>';
453 + else
454 + $settings_link = '<a href="admin.php?page=wc-settings&tab=api&section=mk_api">API '.__('Settings').'</a>';
455 + array_unshift($links, $settings_link);
456 + return $links;
457 + }
458 +
459 + function wc_mc_shop_slice_button() {
460 + if (get_option('mk_product_slice', 'no') == 'yes') {
461 + global $product;
462 + // $price_excl_tax = wc_get_price_excluding_tax( $product ); // price without VAT
463 + $price_incl_tax = wc_get_price_including_tax( $product ); // price with VAT
464 + global $wpdb;
465 + global $mkDbTable;
466 + $tableName = $wpdb->prefix . $mkDbTable;
467 + $methods = $wpdb->get_results('SELECT * FROM '.$tableName);
468 + $slice = false;
469 + if(count($methods)) {
470 + foreach ($methods as $method) {
471 + if ($method->name =="slice") {
472 + if ( $price_incl_tax >= $method->min_amount ) {
473 + if ( $price_incl_tax <= $method->max_amount ) {
474 + $slice = true;
475 + }
476 + }
477 + }
478 + }
479 + }
480 + if ($slice == true) {
481 + 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
482 + }
483 + }
484 + }
485 + // Slice Promo 1
486 + add_action( 'woocommerce_after_add_to_cart_button', 'wc_mc_shop_slice_button', 20 );
487 +
488 + // if (mk_wc_version("3.4.0")) {
489 + add_filter('woocommerce_get_settings_advanced', 'mk_admin_api_settings', 10, 2);
490 + add_action('woocommerce_get_sections_advanced', 'mk_admin_add_api_settings');
491 + add_filter('woocommerce_get_settings_api', 'mk_admin_api_settings', 10, 2);
492 + // } else {
493 + add_action('woocommerce_get_sections_api', 'mk_admin_add_api_settings');
494 + add_action('woocommerce_settings_saved', 'mk_admin_save_api_settings', 30, 0);
495 + add_filter("plugin_action_links_".plugin_basename(__FILE__), 'mk_admin_plugin_settings_link' );
496 + // }
497 +
2294 498 function __get_logo_html() {
2295 499 return '<div class="makecommerce-info">'.
2296 500 '<div class="makecommerce-logo">'.
2297 501 '<a target="_blank" href="http://maksekeskus.ee"><img src="'. plugins_url('/images/makecommerce_logo_en.svg', __FILE__) .'" class="makecommerce-logo"></a>'.
@@ -2302,626 +506,5 @@
2302 506 '<div class="makecommerce-link"><a target="_blank" href="http://maksekeskus.ee">maksekeskus.ee</a></div>'.
2303 507 '</div>'.
2304 508 '</div>';
2305 509 }
2306 -
2307 - add_action('woocommerce_get_sections_api', 'mk_admin_add_settings');
2308 - add_filter('woocommerce_get_settings_api', 'mk_admin_all_settings', 10, 2);
2309 - add_action('woocommerce_settings_saved', 'mk_admin_save_settings', 30, 0);
2310 - add_action('woocommerce_admin_field_api_javascript_ui', 'api_javascript_ui');
2311 - function api_javascript_ui( $data ) {
2312 - ?>
2313 - <script type="text/javascript">
2314 - jQuery(document).ready(function($) {
2315 - var env_select = $('#mk_api_type');
2316 - var test_fields = ['mk_test_shop_id', 'mk_test_private_key', 'mk_test_public_key'];
2317 - var live_fields = ['mk_shop_id', 'mk_private_key', 'mk_public_key'];
2318 -
2319 - env_select.on('change', function(){
2320 - hideFileds($(this).val());
2321 - });
2322 - hideFileds(env_select.val());
2323 - function hideFileds(type) {
2324 - var hide = type == 'live' ? test_fields : live_fields;
2325 - var show = type == 'live' ? live_fields : test_fields;
2326 - $.each(hide, function(i, elem) {
2327 - $('#'+elem).closest('tr').hide();
2328 - });
2329 - $.each(show, function(i, elem) {
2330 - $('#'+elem).closest('tr').show();
2331 - });
2332 - }
2333 - });
2334 - </script>
2335 - <?php
2336 - }
2337 -
2338 - function mk_admin_restrict_manage_posts() {
2339 - global $typenow;
2340 - if ( in_array( $typenow, wc_get_order_types( 'order-meta-boxes' ) ) ) {
2341 - $selected_method = !empty($_REQUEST['_shipping_method']) ? $_REQUEST['_shipping_method'] : false;
2342 - $methods = WC()->shipping->load_shipping_methods();
2343 - echo '<select name="_shipping_method" id="shipping_type" class="enhanced">';
2344 - echo '<option value="">'.__('-- filter by shipping method', 'wc_makecommerce_domain') . '</option>';
2345 - foreach ($methods as $method) {
2346 - echo '<option value="'.$method->id.'"'.($selected_method === $method->id ? ' selected="selected"' : '').'>'.$method->title.'</option>';
2347 - }
2348 - echo '</select>';
2349 - }
2350 - }
2351 - function mk_admin_shipping_filter($where, &$wp_query) {
2352 - global $pagenow, $wpdb;
2353 - $method = !empty($_REQUEST['_shipping_method']) ? $_REQUEST['_shipping_method'] : false;
2354 - if (is_admin() && $pagenow=='edit.php' && $wp_query->query_vars['post_type'] == 'shop_order' && !empty($method) ) {
2355 - $where .= $GLOBALS['wpdb']->prepare( ' AND ID
2356 - IN (
2357 - SELECT items.order_id
2358 - FROM '.$wpdb->prefix.'woocommerce_order_itemmeta meta, '.$wpdb->prefix.'woocommerce_order_items items
2359 - WHERE meta.order_item_id = items.order_item_id
2360 - AND meta.meta_key = "method_id"
2361 - AND meta.meta_value = %s
2362 - ) ', $method );
2363 - }
2364 - return $where;
2365 - }
2366 - add_filter('restrict_manage_posts', 'mk_admin_restrict_manage_posts');
2367 - add_filter('posts_where', 'mk_admin_shipping_filter', 10, 2);
2368 -
2369 - function mk_admin_bulk_actions() {
2370 - wp_enqueue_script('wc_mk_timepicker', plugins_url('/scripts/jquery-ui.timepicker.js', __FILE__));
2371 - wp_enqueue_style('wc_mk_timepicker-css', plugins_url('/css/jquery-ui.timepicker.css', __FILE__));
2372 - global $post_type;
2373 - if ('shop_order' === $post_type) { ?>
2374 - <script type="text/javascript">
2375 - jQuery(function() {
2376 - jQuery('<option>').val('parcel_machine_labels').text('<?php _e( 'Register parcel machine shipments', 'wc_makecommerce_domain' )?>').appendTo('select[name="action"]');
2377 - jQuery('<option>').val('parcel_machine_labels').text('<?php _e( 'Register parcel machine shipments', 'wc_makecommerce_domain' )?>').appendTo('select[name="action2"]');
2378 - jQuery('<option>').val('parcel_machine_print_labels').text('<?php _e( 'Print parcel machine labels', 'wc_makecommerce_domain' )?>').appendTo('select[name="action"]');
2379 - jQuery('<option>').val('parcel_machine_print_labels').text('<?php _e( 'Print parcel machine labels', 'wc_makecommerce_domain' )?>').appendTo('select[name="action2"]');
2380 - //jQuery('<option>').val('parcel_machine_order_courier').text('<?php _e( 'Order courier for parcel machine deliveries', 'wc_makecommerce_domain' )?>').appendTo('select[name="action"]');
2381 - //jQuery('<option>').val('parcel_machine_order_courier').text('<?php _e( 'Order courier for parcel machine deliveries', 'wc_makecommerce_domain' )?>').appendTo('select[name="action2"]');
2382 - jQuery('select[name="action"]').after('<input type="text" name="transport_time" class="hidden timepicker"/>');
2383 - jQuery('select[name="action"], select[name="action2"]').on('change', function(){
2384 - var val = jQuery(this).val();
2385 - if (val === 'parcel_machine_order_courier') {
2386 - jQuery('.timepicker').removeClass('hidden');
2387 - } else {
2388 - jQuery('.timepicker').addClass('hidden');
2389 - }
2390 - });
2391 - jQuery('.tablenav.bottom .actions.bulkactions').hide();
2392 - var now = new Date();
2393 - var mins = now.getMinutes();
2394 - var quarterHours = Math.ceil(mins/15);
2395 - if (quarterHours == 4) { now.setHours(now.getHours()+1); }
2396 - var rounded = (quarterHours*15)%60;
2397 - now.setMinutes(rounded);
2398 - jQuery('.timepicker').datetimepicker({dateFormat: 'dd/mm/yy', timeFormat: 'HH:mm', stepMinute: 15, minDateTime: now, devaultValue: jQuery.datepicker.formatTime('dd/mm/yyyy HH:mm', now)});
2399 - });
2400 - </script>
2401 - <?php if (!empty($_REQUEST['mk_pdf'])) { ?>
2402 - <script type="text/javascript">
2403 - jQuery(function(){
2404 - window.open('<?php echo $_REQUEST['mk_pdf'] ?>', 'pdf');
2405 - });
2406 - </script>
2407 - <?php }
2408 - }
2409 - }
2410 - function mk_admin_bulk_action_labels() {
2411 - $wp_list_table = _get_list_table('WP_Posts_List_Table');
2412 - $post_ids = array_map('absint', (array)$_REQUEST['post']);
2413 - mk_get_shipment_ids($post_ids);
2414 - }
2415 - function mk_admin_bulk_action_print() {
2416 - $wp_list_table = _get_list_table('WP_Posts_List_Table');
2417 - $post_ids = array_map('absint', (array)$_REQUEST['post']);
2418 - mk_get_labels($post_ids);
2419 - }
2420 - function mk_admin_bulk_action_order_courier() {
2421 - return;
2422 - $wp_list_table = _get_list_table('WP_Posts_List_Table');
2423 - $post_ids = array_map('absint', (array)$_REQUEST['post']);
2424 - $transport_time = !empty($_REQUEST['transport_time']) ? strtotime(str_replace('/', '-', $_REQUEST['transport_time'])) : false;
2425 - if ($transport_time && $transport_time > time()) {
2426 - mk_get_shipment_ids($post_ids, 'omniva');
2427 - } else {
2428 - die('Please select transport time that is in the future');
2429 - }
2430 - }
2431 - add_action('admin_footer', 'mk_admin_bulk_actions', 11);
2432 - add_action('admin_action_parcel_machine_labels', 'mk_admin_bulk_action_labels');
2433 - add_action('admin_action_parcel_machine_print_labels', 'mk_admin_bulk_action_print');
2434 - add_action('admin_action_parcel_machine_order_courier', 'mk_admin_bulk_action_order_courier');
2435 -
2436 -
2437 -
2438 - function mk_admin_parcelmachine_order_meta($order) {
2439 - $machine_id = get_post_meta($order->id, '_parcel_machine', true);
2440 - if (!empty($machine_id)) {
2441 - list($carrier, $machine) = explode('||', $machine_id);
2442 - if (!empty($machine)) {
2443 - $machine = mk_get_machine($carrier, (int)$machine);
2444 - if ($machine) {
2445 - echo '<p><strong>'.__('Parcel machine').':</strong><br/>' . $machine['name'] . '<br/><small>' . $machine['address'] . '</small></p>';
2446 - }
2447 - }
2448 - }
2449 - $shipment_id = get_post_meta($order->id, '_parcel_machine_shipment_id', true);
2450 - $shipment_id_error = get_post_meta($order->id, '_parcel_machine_error', true);
2451 - $shipment_manifest = get_post_meta($order->id, '_parcel_machine_manifest', true);
2452 - if ($shipment_id) {
2453 - echo '<p><strong>'.__('Shipment tracking code').':</strong><br/>' . $shipment_id . '</small></p>';
2454 - }
2455 - if ($shipment_manifest) {
2456 - echo '<p><strong>'.__('Parcel machine pickup manifest').':</strong><br/><a href="' . $shipment_manifest . '" target="_blank">link</a></small></p>';
2457 - }
2458 - if ($shipment_id_error) {
2459 - echo '<p><strong style="color: red;">'.__('Parcel machine shipment generation error').':</strong><br/>' . $shipment_id_error . '</small></p>';
2460 - }
2461 - }
2462 -
2463 - function mk_admin_render_shop_order_columns( $column ) {
2464 - global $post, $woocommerce, $the_order;
2465 - if (empty($the_order) || $the_order->id != $post->ID) {
2466 - $the_order = wc_get_order($post->ID);
2467 - }
2468 - if ($column === 'shipping_address') {
2469 - $machine = get_post_meta($the_order->id, '_parcel_machine', true);
2470 - $shipment_id = get_post_meta($the_order->id, '_parcel_machine_shipment_id', true);
2471 - $shipment_id_error = get_post_meta($the_order->id, '_parcel_machine_error', true);
2472 - if ($machine && !$shipment_id) {
2473 - //echo __('Shipment ID not generated for delivery', 'wc_makecommerce_domain');
2474 - }
2475 - if ($shipment_id) echo __('Shipment tracking code', 'wc_makecommerce_domain') . ': ' . $shipment_id;
2476 - else if ($shipment_id_error) echo '<span style="color: red;">'.__('Package shipment generation error:', 'wc_makecommerce_domain') . '</span><br/>' .$shipment_id_error;
2477 - }
2478 - }
2479 - function mk_add_email_customer_details_fields($fields, $sent_to_admin, $order) {
2480 - $machine_id = get_post_meta($order->id, '_parcel_machine', true);
2481 - if (empty($machine_id)) return $fields;
2482 - list($carrier, $machine) = explode('||', $machine_id);
2483 - if (empty($machine)) return $fields;
2484 - $machine = mk_get_machine($carrier, (int)$machine);
2485 - if (!$machine) return $fields;
2486 - $fields[] = array('label' => __('Parcel machine'), 'value' => $machine['name'].' - '.$machine['address']);
2487 - return $fields;
2488 - }
2489 - function mk_add_order_customer_details_fields($order) {
2490 - $machine_id = get_post_meta($order->id, '_parcel_machine', true);
2491 - if (empty($machine_id)) return;
2492 - list($carrier, $machine) = explode('||', $machine_id);
2493 - if (empty($machine)) return;
2494 - $machine = mk_get_machine($carrier, (int)$machine);
2495 - if (!$machine) return;
2496 - echo '<tr>';
2497 - echo '<th>'.__('Parcel machine').'</th>';
2498 - echo '<td>'.$machine['name'].'<br/>'.$machine['address'].'</td>';
2499 - echo '</tr>';
2500 - }
2501 - function mk_admin_product_option_fields($fields) {
2502 - echo '<div class="options_group">';
2503 - woocommerce_wp_checkbox(
2504 - array(
2505 - 'id' => '_no_parcel_machine',
2506 - 'wrapper_class' => 'show_if_simple',
2507 - 'label' => __('Does not fit parcel machine', 'wc_makecommerce_domain'),
2508 - 'description' => __('When this is checked, parcel machine shipping option is not available for a cart with this product', 'wc_makecommerce_domain')
2509 - )
2510 - );
2511 - woocommerce_wp_checkbox(
2512 - array(
2513 - 'id' => '_no_shipping_cost',
2514 - 'wrapper_class' => 'show_if_simple',
2515 - 'label' => __('Free parcel machine', 'wc_makecommerce_domain'),
2516 - 'description' => __('When this is checked, parcel machine if free for this product', 'wc_makecommerce_domain')
2517 - )
2518 - );
2519 - echo '</div>';
2520 - }
2521 - function mk_admin_product_fields_save($post_id) {
2522 - $no_parcel_machine = isset($_POST['_no_parcel_machine']) ? 'yes' : 'no';
2523 - update_post_meta($post_id, '_no_parcel_machine', $no_parcel_machine);
2524 - $no_shipping_cost = isset($_POST['_no_shipping_cost']) ? 'yes' : 'no';
2525 - update_post_meta($post_id, '_no_shipping_cost', $no_shipping_cost);
2526 - }
2527 -
2528 - add_action('woocommerce_product_options_shipping', 'mk_admin_product_option_fields');
2529 - add_action('woocommerce_process_product_meta', 'mk_admin_product_fields_save');
2530 - add_action('woocommerce_admin_order_data_after_shipping_address', 'mk_admin_parcelmachine_order_meta', 10, 1);
2531 - add_action('manage_shop_order_posts_custom_column', 'mk_admin_render_shop_order_columns', 3);
2532 - add_filter('woocommerce_email_customer_details_fields', 'mk_add_email_customer_details_fields', 10, 3 );
2533 - add_action('woocommerce_order_details_after_customer_details', 'mk_add_order_customer_details_fields');
2534 - add_action('woocommerce_order_status_processing', 'mk_get_shipment_ids');
2535 -
2536 -
2537 -
2538 - function mk_get_shipment_ids($post_ids, $select_carrier = null) {
2539 - if (!is_array($post_ids)) {
2540 - $post_ids = array($post_ids);
2541 - }
2542 - transport_add_method();
2543 - $shipping_request = array('credentials' => array(), 'orders' => array());
2544 - $shipping_classes_map = array(
2545 - 'parcelmachine_omniva' => 'WC_ParcelMachine_Shipping_Method_Omniva',
2546 - 'parcelmachine_smartpost' => 'WC_ParcelMachine_Shipping_Method_Smartpost',
2547 - 'courier_omniva' => 'WC_Courier_Shipping_Method_Omniva'
2548 - );
2549 - foreach ($post_ids as $post_id) {
2550 - $order = new WC_Order($post_id);
2551 - $shipping_methods = $order->get_shipping_methods();
2552 - if (empty($shipping_methods)) { continue; }
2553 - foreach ($shipping_methods as $shipping_method) {
2554 - $shipping_id = explode(':', $shipping_method['method_id']);
2555 - $shipping_class = $shipping_id[0];
2556 - $shipping_instance = !empty($shipping_id[1]) ? $shipping_id[1] : null;
2557 - if (empty($shipping_classes_map[$shipping_class])) {
2558 - continue;
2559 - }
2560 -
2561 - $transport_class = new $shipping_classes_map[$shipping_class]($shipping_instance);
2562 - $carrier_uc = mb_strtoupper($transport_class->carrier);
2563 -
2564 - if ($transport_class->type === 'apt') {
2565 - $parcel_machine = get_post_meta($post_id, '_parcel_machine', true);
2566 - if (!$parcel_machine) { continue; }
2567 - list($carrier, $machine_id) = explode('||', $parcel_machine);
2568 - if (!$carrier || !$machine_id) { continue; }
2569 - }
2570 -
2571 - if (empty($shipping_request['credentials'][$carrier_uc])) {
2572 - $api_user = $transport_class->settings['service_user'];
2573 - $api_password = $transport_class->settings['service_password'];
2574 - if (!$api_user || !$api_password) {
2575 - add_action('admin_notices', 'mk_admin_error');
2576 - continue;
2577 - }
2578 - $shipping_request['credentials'][$carrier_uc] = array('carrier' => $carrier_uc, 'username' => $api_user, 'password' => $api_password);
2579 - }
2580 - $sender = array(
2581 - 'name' => !empty($transport_class->settings['shop_name']) ? $transport_class->settings['shop_name'] : '',
2582 - 'phone' => !empty($transport_class->settings['shop_phone']) ? $transport_class->settings['shop_phone'] : '',
2583 - 'email' => !empty($transport_class->settings['shop_email']) ? $transport_class->settings['shop_email'] : '',
2584 - 'country' => !empty($transport_class->settings['shop_address_country']) ? $transport_class->settings['shop_address_country'] : '',
2585 - 'city' => !empty($transport_class->settings['shop_address_city']) ? $transport_class->settings['shop_address_city'] : '',
2586 - 'street' => !empty($transport_class->settings['shop_address_street']) ? $transport_class->settings['shop_address_street'] : '',
2587 - 'postalCode' => !empty($transport_class->settings['shop_postal_code']) ? $transport_class->settings['shop_postal_code'] : ''
2588 - );
2589 - $sr_order = array(
2590 - 'carrier' => $carrier_uc,
2591 - 'orderId' => $order->id,
2592 - 'recipient' => array('name' => $order->shipping_first_name . ' ' . $order->shipping_last_name, 'phone' => $order->billing_phone, 'email' => $order->billing_email),
2593 - 'sender' => $sender,
2594 - 'destination' => array(),
2595 - );
2596 - $m_service_type = null;
2597 - if ($transport_class->carrier === 'omniva' && $transport_class->type === 'atp') {
2598 - $m_service_type = 'PA';
2599 - } else if (!empty($transport_class->settings['registerOnPaymentCode'])) {
2600 - $m_service_type = $transport_class->settings['registerOnPaymentCode'];
2601 - }
2602 -
2603 - if (!empty($machine_id)) {
2604 - $sr_order['destination']['destinationId'] = $machine_id;
2605 - }
2606 - if ($transport_class->carrier === 'omniva' && $transport_class->type === 'courier') {
2607 - $sr_order['destination'] = array(
2608 - 'postalCode' => $order->shipping_postcode,
2609 - 'country' => $order->shipping_country,
2610 - 'county' => $order->shipping_state,
2611 - 'city' => $order->shipping_city,
2612 - 'street' => $order->shipping_address_1 . ' ' . $order->shipping_address_2
2613 - );
2614 - }
2615 -
2616 - if ($m_service_type) {
2617 - $sr_order['services'] = array('serviceType' => $m_service_type);
2618 - }
2619 -
2620 - $shipping_request['orders'][] = $sr_order;
2621 - }
2622 - }
2623 - $shipping_request['credentials'] = array_values($shipping_request['credentials']);
2624 - if (empty($shipping_request['orders'])) {
2625 - return;
2626 - }
2627 - $MK = mk_get_api();
2628 - if (!$MK) {
2629 - return;
2630 - }
2631 - try {
2632 - $response = $MK->createShipments($shipping_request);
2633 - } catch (Exception $e) {
2634 - echo $e->getMessage();
2635 - exit();
2636 - }
2637 - $shipments = !empty($response->shipments) ? $response->shipments : $response;
2638 - $manifest = !empty($response->manifests) ? $response->manifests[0] : false;
2639 -
2640 - foreach ($shipments as $order) {
2641 - if ($manifest) {
2642 - update_post_meta((int)$order->orderId, '_parcel_machine_manifest', sanitize_text_field($manifest));
2643 - }
2644 - if (!empty($order->orderId) && !empty($order->shipmentId)) {
2645 - update_post_meta((int)$order->orderId, '_parcel_machine_shipment_id', sanitize_text_field($order->shipmentId));
2646 - delete_post_meta((int)$order->orderId, '_parcel_machine_error');
2647 - } else if (!empty($order->orderId) && !empty($order->barCode)) {
2648 - update_post_meta((int)$order->orderId, '_parcel_machine_shipment_id', sanitize_text_field($order->barCode));
2649 - delete_post_meta((int)$order->orderId, '_parcel_machine_error');
2650 - } else if (!empty($order->orderId) && !empty($order->errorMessage)) {
2651 - update_post_meta((int)$order->orderId, '_parcel_machine_error', sanitize_text_field($order->errorMessage));
2652 - }
2653 - }
2654 - }
2655 -
2656 - function mk_get_labels($post_ids, $ajax = false) {
2657 - if (!is_array($post_ids)) {
2658 - $post_ids = array($post_ids);
2659 - }
2660 - transport_add_method();
2661 - $shipping_request = array('credentials' => array(), 'orders' => array(), 'printFormat' => 'A4');
2662 - $shipping_classes_map = array(
2663 - 'parcelmachine_omniva' => 'WC_ParcelMachine_Shipping_Method_Omniva',
2664 - 'parcelmachine_smartpost' => 'WC_ParcelMachine_Shipping_Method_Smartpost',
2665 - 'courier_omniva' => 'WC_Courier_Shipping_Method_Omniva'
2666 - );
2667 - foreach ($post_ids as $post_id) {
2668 - $shipment_id = get_post_meta($post_id, '_parcel_machine_shipment_id', true);
2669 - if (!$shipment_id) { continue; }
2670 - $order = new WC_Order($post_id);
2671 - $shipping_methods = $order->get_shipping_methods();
2672 - if (empty($shipping_methods)) { continue; }
2673 - foreach ($shipping_methods as $shipping_method) {
2674 - $shipping_id = explode(':', $shipping_method['method_id']);
2675 - $shipping_class = $shipping_id[0];
2676 - $shipping_instance = !empty($shipping_id[1]) ? $shipping_id[1] : null;
2677 - if (empty($shipping_classes_map[$shipping_class])) {
2678 - continue;
2679 - }
2680 -
2681 - $transport_class = new $shipping_classes_map[$shipping_class]($shipping_instance);
2682 - $carrier_uc = mb_strtoupper($transport_class->carrier);
2683 -
2684 - if ($transport_class->type === 'apt') {
2685 - $parcel_machine = get_post_meta($post_id, '_parcel_machine', true);
2686 - if (!$parcel_machine) { continue; }
2687 - list($carrier, $machine_id) = explode('||', $parcel_machine);
2688 - if (!$carrier || !$machine_id) { continue; }
2689 - }
2690 - if (empty($shipping_request['credentials'][$carrier_uc])) {
2691 - $api_user = $transport_class->settings['service_user'];
2692 - $api_password = $transport_class->settings['service_password'];
2693 - if (!$api_user || !$api_password) {
2694 - add_action('admin_notices', 'mk_admin_error');
2695 - continue;
2696 - }
2697 - $shipping_request['credentials'][$carrier_uc] = array('carrier' => $carrier_uc, 'username' => $api_user, 'password' => $api_password);
2698 - }
2699 - $sender = array(
2700 - 'name' => $transport_class->settings['shop_name'],
2701 - 'phone' => $transport_class->settings['shop_phone'],
2702 - 'email' => $transport_class->settings['shop_email'],
2703 - 'country' => $transport_class->settings['shop_address_country'],
2704 - 'city' => $transport_class->settings['shop_address_city'],
2705 - 'street' => $transport_class->settings['shop_address_street'],
2706 - 'postalCode' => $transport_class->settings['shop_postal_code']
2707 - );
2708 - $sr_order = array(
2709 - 'carrier' => $carrier_uc,
2710 - 'orderId' => $order->id,
2711 - 'recipient' => array('name' => $order->shipping_first_name . ' ' . $order->shipping_last_name, 'phone' => $order->billing_phone, 'email' => $order->billing_email),
2712 - 'sender' => $sender,
2713 - 'shipmentId' => $shipment_id
2714 - );
2715 - $m_service_type = null;
2716 - if ($transport_class->carrier === 'omniva' && $transport_class->type === 'atp') {
2717 - $m_service_type = 'PA';
2718 - } else if (!empty($transport_class->settings['registerOnPaymentCode'])) {
2719 - $m_service_type = $transport_class->settings['registerOnPaymentCode'];
2720 - }
2721 -
2722 - if (!empty($machine_id)) {
2723 - $sr_order['destination']['destinationId'] = $machine_id;
2724 - }
2725 - if ($transport_class->carrier === 'omniva' && $transport_class->type === 'courier') {
2726 - $sr_order['destination'] = array(
2727 - 'postalCode' => $order->shipping_postcode,
2728 - 'country' => $order->shipping_country,
2729 - 'county' => $order->shipping_state,
2730 - 'city' => $order->shipping_city,
2731 - 'street' => $order->shipping_address_1 . ' ' . $order->shipping_address_2
2732 - );
2733 - }
2734 -
2735 - if ($m_service_type) {
2736 - $sr_order['services'] = array('serviceType' => $m_service_type);
2737 - }
2738 -
2739 - $shipping_request['orders'][] = $sr_order;
2740 - }
2741 - }
2742 - $shipping_request['credentials'] = array_values($shipping_request['credentials']);
2743 - if (empty($shipping_request['orders'])) {
2744 - return;
2745 - }
2746 - $MK = mk_get_api();
2747 - if (!$MK) {
2748 - return;
2749 - }
2750 - try {
2751 - $response = $MK->createLabels($shipping_request);
2752 - } catch (Exception $e) {
2753 - echo $e->getMessage();
2754 - exit();
2755 - }
2756 - if (empty($response->labelUrl)) {
2757 - return;
2758 - }
2759 - if ($ajax) {
2760 - return $response->labelUrl;
2761 - }
2762 - $sendback = add_query_arg(array('post_type' => 'shop_order', 'mk_pdf' => urlencode($response->labelUrl)), '');
2763 - wp_redirect(esc_url_raw($sendback));
2764 - exit();
2765 - }
2766 -
2767 - $MKAPI = false;
2768 - function mk_get_api() {
2769 - global $MKAPI;
2770 - if ($MKAPI) {
2771 - //return $MKAPI;
2772 - }
2773 - $mk_api_type = get_option('mk_api_type', false);
2774 - if (!$mk_api_type) {
2775 - return false;
2776 - }
2777 - if ($mk_api_type !== 'live') {
2778 - $key_prefix = $mk_api_type.'_';
2779 - } else {
2780 - $key_prefix = '';
2781 - }
2782 - $mk_shop_id = get_option('mk_'.$key_prefix.'shop_id', '');
2783 - $mk_public_key = get_option('mk_'.$key_prefix.'public_key', '');
2784 - $mk_private_key = get_option('mk_'.$key_prefix.'private_key', '');
2785 - if (!$mk_shop_id || !$mk_public_key || !$mk_shop_id) {
2786 - return false;
2787 - }
2788 - $MKAPI = new Maksekeskus($mk_shop_id, $mk_public_key, $mk_private_key, $mk_api_type === 'live' ? false : true);
2789 - return $MKAPI;
2790 - }
2791 -
2792 - function mk_is_api_set() {
2793 - $mk_api_type = get_option('mk_api_type', false);
2794 - if (!$mk_api_type) {
2795 - return false;
2796 - }
2797 - if ($mk_api_type !== 'live') {
2798 - $key_prefix = $mk_api_type.'_';
2799 - } else {
2800 - $key_prefix = '';
2801 - }
2802 - $mk_shop_id = get_option('mk_'.$key_prefix.'shop_id', '');
2803 - $mk_public_key = get_option('mk_'.$key_prefix.'public_key', '');
2804 - $mk_private_key = get_option('mk_'.$key_prefix.'private_key', '');
2805 - if (!$mk_shop_id || !$mk_public_key || !$mk_shop_id) {
2806 - return false;
2807 - }
2808 - return true;
2809 - }
2810 -
2811 - function mk_get_machines($carrier, $country = null) {
2812 - $data = get_option('mk_machines_cache', false);
2813 - $data_expires = get_option('mk_machines_expires', false);
2814 - if (!$data || $data_expires < time()) {
2815 - $MK = mk_get_api();
2816 - if(!$MK) {
2817 - return array();
2818 - }
2819 - $data = $MK->getDestinations(array('type' => 'APT'));
2820 - update_option('mk_machines_cache', $data);
2821 - update_option('mk_machines_expires', time()+3*60*60);
2822 - }
2823 -
2824 - $machines = array();
2825 - if (!$data || empty($data)) {
2826 - return array();
2827 - }
2828 - foreach ($data as $machine) {
2829 - if ((!$country || $machine->country === $country) && $machine->type === 'APT' && ($carrier === '*' || strtolower($carrier) === strtolower($machine->carrier))) {
2830 - $machines[] = array(
2831 - 'carrier' => strtolower($machine->carrier),
2832 - 'id' => $machine->id,
2833 - 'name' => $machine->name,
2834 - 'city' => $machine->city,
2835 - 'address' => !empty($machine->address) ? $machine->address : '',
2836 - );
2837 - }
2838 - }
2839 - usort($machines, function($a, $b){
2840 - if ($a['city'] === $b['city']) {
2841 - return $a['name'] > $b['name'];
2842 - }
2843 - return $a['city'] > $b['city'];
2844 - });
2845 - return $machines;
2846 - }
2847 -
2848 - function mk_get_machine($carrier, $id) {
2849 - $machines = mk_get_machines($carrier);
2850 - foreach ($machines as $machine) {
2851 - if ($machine['carrier'] === $carrier && $machine['id'] === $id) {
2852 - return $machine;
2853 - }
2854 - }
2855 - return false;
2856 - }
2857 -
2858 - function mk_admin_error() {
2859 - printf( '<div class="%1$s"><p>%2$s</p></div>', 'notice notice-error', __('Please check that you have configured correctly MakeCommerce API accesses', 'wc_makecommerce_domain'));
2860 - }
2861 -
2862 - add_filter('query_vars', 'mk_cron_query_vars');
2863 - add_action('parse_request', 'mk_parse_cron_update_vars');
2864 -
2865 - function mk_cron_query_vars($vars) {
2866 - $vars[] = 'mk-action';
2867 - $vars[] = 'mk-shop-id';
2868 - $vars[] = 'mk-test-shop-id';
2869 - return $vars;
2870 - }
2871 -
2872 - function mk_parse_cron_update_vars($wp) {
2873 - if (array_key_exists('mk-action', $wp->query_vars) && $wp->query_vars['mk-action'] == 'mk-update'
2874 - && (array_key_exists('mk-shop-id', $wp->query_vars) || array_key_exists('mk-test-shop-id', $wp->query_vars) ) ) {
2875 - if( (strlen($wp->query_vars['mk-shop-id']) && $wp->query_vars['mk-shop-id'] == get_option('mk_shop_id', false) )
2876 - || (strlen($wp->query_vars['mk-test-shop-id']) && $wp->query_vars['mk-test-shop-id'] == get_option('mk_test_shop_id', false) ) ) {
2877 - update_mc_banklinks();
2878 - exit();
2879 - }
2880 - }
2881 - }
2882 -
2883 - function print_parcel_machine_label_action( $post_id ) {
2884 - ?>
2885 - <li class="wide">
2886 - <a id="print_parcel_machine_label" href="#" class="button"><?php _e('Print parcel label', 'wc_makecommerce_domain');?></a>
2887 - <img class="mc_loading" src="<?php echo site_url('/wp-admin/images/loading.gif');?>">
2888 - <script type="text/javascript">
2889 - jQuery(function($){
2890 - var data = {
2891 - 'action': 'print_pml',
2892 - 'id': '<?php echo $post_id; ?>'
2893 - };
2894 - var loading = $('.mc_loading');
2895 - $('#print_parcel_machine_label').click(function(e){
2896 - e.preventDefault();
2897 - var button = $(this);
2898 - button.addClass('disabled');
2899 - loading.show();
2900 - $.post(ajaxurl, data, function(response) {
2901 - button.removeClass('disabled');
2902 - loading.hide();
2903 - window.open(response, 'pdf');
2904 - });
2905 - });
2906 - });
2907 - </script>
2908 - </li>
2909 - <?php
2910 - }
2911 - add_action('woocommerce_order_actions_end', 'print_parcel_machine_label_action');
2912 -
2913 - function ajax_print_pml() {
2914 - if(!current_user_can('manage_woocommerce') ) {
2915 - die();
2916 - }
2917 - die(mk_get_labels(intval($_POST['id']), true));
2918 - }
2919 - add_action( 'wp_ajax_print_pml', 'ajax_print_pml' );
2920 -
2921 - function admin_login_update($user_login, $user) {
2922 - if(user_can( $user, 'administrator' )) {
2923 - update_mc_banklinks();
2924 - }
2925 - }
2926 - add_action('wp_login', 'admin_login_update', 10, 2);
2927 510 }