PluginProbe
MakeCommerce for WooCommerce / 1.1.7
MakeCommerce for WooCommerce v1.1.7
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 +314 -102 1.1.11.1.7 View file →
@@ -1,9 +1,9 @@
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: 1.1.1
5 + Version: 1.1.7
6 6 Author: Maksekeskus AS
7 7 Author URI: https://MakeCommerce.net/
8 8 Text Domain: wc_makecommerce_domain
9 9 */
@@ -71,9 +71,9 @@
71 71 const module_homepage_url = 'https://maksekeskus.ee/en/integration-modules/makecommerce-woocommerce-payment-plugin/';
72 72 const testenv_homepage_url = 'http://maksekeskus.ee/en/for-developers/test-environment/';
73 73
74 74 public $id = 'makecommerce';
75 - public $version = '1.1';
75 + public $version = '1.1.7';
76 76
77 77 public $return_url;
78 78 public $return_url_cancel;
79 79
@@ -316,21 +316,10 @@
316 316 'type' => 'checkbox',
317 317 'default' => 'yes',
318 318 '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'),
319 319 );
320 - $this->form_fields['cc_shop_name'] = array(
321 - 'title' => __('Shop name on credit card payment', 'wc_makecommerce_domain'),
322 - 'type' => 'text',
323 - 'desc_tip' => __('This will appear on buyer\'s credit card transaction', 'wc_makecommerce_domain'),
324 - );
325 - $this->form_fields['cc_cart_reference_string'] = array(
326 - 'title' => __('Order reference on credit card payment', 'wc_makecommerce_domain'),
327 - 'type' => 'text',
328 - 'default' => 'Order %s',
329 - 'desc_tip' => __('This will appear on buyer\'s credit card transaction where "%s" is the order number', 'wc_makecommerce_domain'),
330 - );
331 320 $this->form_fields['adv_title'] = array(
332 - 'title' => '<br>'.__('Advanced Settings', 'wc_makecommerce_domain'),
321 + 'title' => '<hr><br>'.__('Advanced Settings', 'wc_makecommerce_domain'),
333 322 'type' => 'title',
334 323 );
335 324 $this->form_fields['reload_links'] = array(
336 325 'type' => 'mc_banklinks_reload',
@@ -337,8 +326,13 @@
337 326 'title' => __('Update payment methods', 'wc_makecommerce_domain'),
338 327 'description' => __('Update', 'wc_makecommerce_domain'),
339 328 'desc_tip' => __('This will update shop configuration from MakeCommerce servers.', 'wc_makecommerce_domain'),
340 329 );
330 + $this->form_fields['cron_info'] = array(
331 + 'type' => 'cron_link',
332 + 'title' => __('Update url', 'wc_makecommerce_domain'),
333 + 'desc_tip' => __('Update url for cron job.', 'wc_makecommerce_domain'),
334 + );
341 335 }
342 336
343 337 public function generate_mc_hidden_html( $key, $data ) {
344 338 $field_key = $this->get_field_key($key);
@@ -351,9 +345,43 @@
351 345 </tr>
352 346 <?php
353 347 return ob_get_clean();
354 348 }
349 +
350 + public function generate_cron_link_html( $key, $data ) {
351 + $field = $this->get_field_key( $key );
352 + $defaults = array(
353 + 'title' => '',
354 + 'disabled' => false,
355 + 'class' => '',
356 + 'css' => '',
357 + 'placeholder' => '',
358 + 'type' => 'text',
359 + 'desc_tip' => false,
360 + 'description' => '',
361 + 'custom_attributes' => array()
362 + );
355 363
364 + $data = wp_parse_args( $data, $defaults );
365 + $shop_id_text = get_option('mc_banklinks_api_type', false) == 'live' ? 'mk-shop-id': 'mk-test-shop-id';
366 + ob_start();
367 + ?>
368 + <tr valign="top">
369 + <th scope="row" class="titledesc">
370 + <label for="<?php echo esc_attr( $field ); ?>"><?php echo wp_kses_post( $data['title'] ); ?></label>
371 + <?php echo $this->get_tooltip_html( $data ); ?>
372 + </th>
373 + <td class="forminp">
374 + <fieldset>
375 + <legend class="screen-reader-text"><span><?php echo wp_kses_post( $data['title'] ); ?></span></legend>
376 + <p><?php echo get_site_url(null, '?mk-action=mk-update&'.$shop_id_text.'=') . get_option('mk_test_shop_id', false);?></p>
377 + </fieldset>
378 + </td>
379 + </tr>
380 + <?php
381 + return ob_get_clean();
382 + }
383 +
356 384 public function generate_mc_banklinks_reload_html( $key, $data ) {
357 385
358 386 $field = $this->get_field_key( $key );
359 387 $defaults = array(
@@ -491,9 +519,9 @@
491 519 }
492 520
493 521 public function mc_banklinks_reload($force = false) {
494 522 if ($force || (defined('DOING_AJAX') && DOING_AJAX)) {
495 -
523 +
496 524 global $wpdb;
497 525 global $mkDbTable;
498 526 global $wp_version;
499 527
@@ -511,13 +539,15 @@
511 539 return false;
512 540 }
513 541
514 542 try {
515 - $methods = $this->_api->getShopConfig($request_params)->payment_methods;
543 + $shopConfig = $this->_api->getShopConfig($request_params);
544 + $methods = $shopConfig->payment_methods;
516 545 } catch (Exception $e) {
517 546 error_log(print_r($e, 1));
518 547 return false;
519 548 }
549 +
520 550 if(isset($methods->banklinks)) {
521 551 foreach($methods->banklinks as $method) {
522 552 $wpdb->insert($tableName, array('type' => 'banklink', 'country' => $method->country, 'name' => $method->name, 'url' => $method->url));
523 553 }
@@ -529,11 +559,17 @@
529 559 $wpdb->insert($tableName, array('type' => 'card', 'name' => $method->name));
530 560 }
531 561 $updated = true;
532 562 }
563 +
564 + if(isset($shopConfig) && strlen($shopConfig->name)) {
565 + update_option( 'mc_shop_name', $shopConfig->name );
566 + }
567 +
533 568 if ($updated) {
534 569 update_option( 'mc_banklinks_api_type', get_option('mk_api_type', false) );
535 570 }
571 +
536 572 if ($force) {
537 573 $this->initBankLinks();
538 574 return $updated;
539 575 }
@@ -664,8 +700,9 @@
664 700 <?php
665 701 }
666 702 ?>
667 703 </ul>
704 + <div class="mc-clear-both"></div>
668 705 <script type="text/javascript">
669 706 var makecommerceId = '<?php echo $this->id; ?>';
670 707 var selectedCountry = jQuery('input[name=makecommerce_country_picker]:checked').val();
671 708
@@ -955,10 +992,10 @@
955 992 'locale' => !empty($_GET['lang']) ? $_GET['lang'] : (defined('ICL_LANGUAGE_CODE') ? ICL_LANGUAGE_CODE : strtolower(substr(get_locale(), 0, 2))),
956 993 'open-on-load' => 'true',
957 994 'client-name' => ($this->settings['cc_pass_cust_data'] == 'yes' ? (string) ($order->billing_first_name . ' ' . $order->billing_last_name) : ''),
958 995 'email' => ($this->settings['cc_pass_cust_data'] == 'yes' ? (string) $order->billing_email : ''),
959 - 'name' => $this->settings['cc_shop_name'],
960 - 'description' => (string)sprintf($this->settings['cc_cart_reference_string'], (string) $idReference),
996 + 'name' => get_option('mc_shop_name', ''),
997 + 'description' => __('Order', 'woocommerce') . '&nbsp;' . (string) $idReference,
961 998 'completed' => 'makecommerce_cc_complete',
962 999 'currency' => 'EUR',
963 1000 );
964 1001 ?>
@@ -1269,19 +1306,62 @@
1269 1306 $this->short_office_names = $this->settings['short_office_names'];
1270 1307 $this->order_country = 'unknown';
1271 1308 add_action('woocommerce_update_options_shipping_' . $this->id, array(&$this, 'process_admin_options'));
1272 1309 add_filter('woocommerce_review_order_after_shipping' , array(&$this, 'add_parcelmachine_checkout_fields'));
1310 + //add_filter('woocommerce_update_order_review_fragments' , array(&$this, 'add_parcelmachine_checkout_fields'));
1273 1311 add_action('woocommerce_checkout_process', array(&$this, 'check_parcelmachine_checkout_fields'));
1312 + add_action('woocommerce_after_checkout_validation', array(&$this, 'check_parcelmachine_checkout_fields'));
1274 1313 add_action('woocommerce_checkout_update_order_meta', array(&$this, 'add_parcelmachine_order_meta'));
1275 - add_filter('woocommerce_order_shipping_to_display_shipped_via', array(&$his, 'add_admin_parcelmachine_via_field'));
1314 + add_filter('woocommerce_order_shipping_to_display_shipped_via', array(&$this, 'add_admin_parcelmachine_via_field'));
1276 1315 }
1277 1316
1317 + public function generate_shipping_ui_javascript_html( $key, $data ) { ?>
1318 + <script type="text/javascript">
1319 + jQuery(document).ready(function($) {
1320 + var country_select = $('#woocommerce_parcelmachine_<?php echo strtolower($this->ext); ?>_countries');
1321 + var prices = [], free_shippings = [];
1322 + $.each(country_select.find('option'), function(i, option) {
1323 + prices[$(option).val()] = $('#woocommerce_parcelmachine_<?php echo strtolower($this->ext); ?>_price_' + $(option).val().toLowerCase()).closest('tr');
1324 + free_shippings[$(option).val()] = $('#woocommerce_parcelmachine_<?php echo strtolower($this->ext); ?>_free_shipping_min_amount_' + $(option).val().toLowerCase()).closest('tr');
1325 + });
1326 + country_select.on('change', function(){
1327 + var countries = $(this).val();
1328 + if(countries) {
1329 + hidePrices(countries);
1330 + }
1331 + });
1332 + hidePrices(country_select.val());
1333 + function hidePrices(countries) {
1334 + for (var key in prices) {
1335 + if(countries.indexOf(key) == -1){
1336 + prices[key].hide();
1337 + free_shippings[key].hide();
1338 + } else {
1339 + prices[key].show();
1340 + free_shippings[key].show();
1341 + }
1342 + }
1343 + }
1344 + });
1345 + </script>
1346 + <?php }
1347 +
1278 1348 function calculate_shipping($package = array()) {
1349 + $price = $this->settings['price_'.strtolower($package['destination']['country'])];
1279 1350
1280 - $price = $this->settings['price_'.strtolower($package['destination']['country'])];
1281 - if ($this->free_shipping_min_amount && $package['contents_cost'] >= $this->free_shipping_min_amount) {
1351 + $free_shipping_min_amount = $this->settings['free_shipping_min_amount_'.strtolower($package['destination']['country'])];
1352 +
1353 + if ($free_shipping_min_amount && $package['contents_cost'] >= $free_shipping_min_amount) {
1282 1354 $price = 0;
1283 1355 }
1356 +
1357 + $free_shipping = true;
1358 + foreach ($package['contents'] as $line) {
1359 + $free_shipping = get_post_meta($line['product_id'], '_no_shipping_cost', true) === 'yes' ? $free_shipping : false;
1360 + }
1361 + if($free_shipping) {
1362 + $price = 0;
1363 + }
1284 1364 $rate = array(
1285 1365 'id' => $this->id,
1286 1366 'label' => $this->title,
1287 1367 'cost' => $price,
@@ -1355,35 +1435,37 @@
1355 1435 }
1356 1436 return $machines;
1357 1437 }
1358 1438
1359 - function add_parcelmachine_checkout_fields($checkout) {
1439 + function add_parcelmachine_checkout_fields($fragments) {
1360 1440 $this->order_country = WC()->customer->get_shipping_country();
1361 - echo '<tr style="display: none;" class="parcel_machine_checkout" id="parcel_machine_checkout_parcelmachine_'.mb_strtolower($this->ext).'">';
1441 + $res = '';
1442 + $res .= '<tr style="display: none;" class="parcel_machine_checkout parcel_machine_checkout_parcelmachine_'.mb_strtolower($this->ext).'">';
1362 1443 // echo '<th>' . $this->title . '</th>';
1363 1444 // echo '<td>';
1364 - echo '<td colspan="2">';
1445 + $res .= '<td colspan="2">';
1365 1446 $options = array();
1366 1447 $machines = $this->mk_get_machines();
1367 - echo '<p class="form-row" id="'.esc_attr($this->id).'_field">';
1368 - echo '<select class="select" name="'.esc_attr($this->id).'" id="'.esc_attr($this->id).'">';
1369 - echo '<option value="">'.__('-- select parcel machine --', 'wc_makecommerce_domain').'</option>';
1448 + $res .= '<p class="form-row" id="'.esc_attr($this->id).'_field">';
1449 + $res .= '<select class="select" name="'.esc_attr($this->id).'" id="'.esc_attr($this->id).'">';
1450 + $res .= '<option value="">'.__('-- select parcel machine --', 'wc_makecommerce_domain').'</option>';
1370 1451 $pcity = false;
1371 1452 foreach ($machines as $machine) {
1372 1453 $city = strtolower($machine['city']);
1373 1454 if ($city !== $pcity) {
1374 - if ($pcity) echo '</optgroup>';
1375 - echo '<optgroup label="'.$machine['city'].'">';
1455 + if ($pcity) $res .= '</optgroup>';
1456 + $res .= '<optgroup label="'.$machine['city'].'">';
1376 1457 }
1377 1458 $mname = $machine['name'];
1378 1459 if ($this->short_office_names !== 'yes') $mname .= ' - ' . $machine['city'] . ', ' . $machine['address'];
1379 - echo '<option value="'.esc_attr($machine['provider'].'||'.$machine['id']).'">'.$mname.'</option>';
1460 + $res .= '<option value="'.esc_attr($machine['carrier'].'||'.$machine['id']).'">'.$mname.'</option>';
1380 1461 $pcity = $city;
1381 1462 }
1382 - if ($pcity) echo '</optgroup>';
1383 - echo '</select>';
1384 - echo '</p>';
1385 - echo '</td></tr>';
1463 + if ($pcity) $res .= '</optgroup>';
1464 + $res .= '</select>';
1465 + $res .= '</p>';
1466 + $res .= '</td></tr>';
1467 + echo $res;
1386 1468 }
1387 1469
1388 1470 function check_parcelmachine_checkout_fields() {
1389 1471 $shipping_method = !empty($_POST['shipping_method']) ? $_POST['shipping_method'] : false;
@@ -1399,10 +1481,9 @@
1399 1481 update_post_meta($order_id, '_parcel_machine', sanitize_text_field($_POST[$this->id]));
1400 1482 }
1401 1483 }
1402 1484 function add_admin_parcelmachine_via_field($order) {
1403 - error_log('Via');
1404 - error_log(print_r($order, 1));
1485 + return ' <small>(via '.$this->name_ext.')</small>';
1405 1486 }
1406 1487 }
1407 1488 class WC_ParcelMachine_Shipping_Method_Omniva extends WC_ParcelMachine_Shipping_Method {
1408 1489 function __construct($instance_id = 0) {
@@ -1413,36 +1494,60 @@
1413 1494 function init_form_fields() {
1414 1495
1415 1496 $this->form_fields = array();
1416 1497 $this->form_fields['logo'] = array('type' => 'title', 'title' => __get_logo_html());
1417 - $this->form_fields['generic'] = array('type' => 'title', 'title' => __('Generic and pricing options', 'wc_makecommerce_domain'));
1498 + $this->form_fields['generic'] = array(
1499 + 'type' => 'title',
1500 + 'title' => __('Generic and pricing options', 'wc_makecommerce_domain'),
1501 + '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'),
1502 + );
1418 1503 $this->form_fields['active'] = array(
1419 1504 'title' => __('Enable', 'wc_makecommerce_domain'),
1420 1505 'type' => 'checkbox',
1421 1506 'label' => __('enabled', 'wc_makecommerce_domain'),
1422 1507 'default' => 'no',
1423 - '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'),
1424 1508 );
1509 + $this->form_fields['countries'] = array(
1510 + 'title' => __('Enable Shipping to', 'wc_makecommerce_domain'),
1511 + 'type' => 'multiselect',
1512 + 'class' => 'wp-enhanced-select',
1513 + 'css' => 'width: 450px;',
1514 + 'default' => array('EE','LV','LT'),
1515 + 'options' => array('EE' => __('Estonia - EE'), 'LV' => __('Latvia - LV'), 'LT' => __('Lithuania - LT')),
1516 + 'description' => __('use Shift key to select multiple lines', 'wc_makecommerce_domain'),
1517 + );
1425 1518 $this->form_fields['price_ee'] = array(
1426 - 'title' => __('Price EE', 'wc_makecommerce_domain'),
1519 + 'title' => __('Shipping price', 'wc_makecommerce_domain').' EE',
1427 1520 'type' => 'text',
1428 1521 'default' => '2.99'
1429 1522 );
1523 + $this->form_fields['free_shipping_min_amount_ee'] = array(
1524 + 'title' => __('Free shipping amount', 'wc_makecommerce_domain').' EE',
1525 + 'type' => 'number',
1526 + 'default' => '0',
1527 + 'desc_tip' => __('(0 means no free shipping)', 'wc_makecommerce_domain'),
1528 + );
1430 1529 $this->form_fields['price_lv'] = array(
1431 - 'title' => __('Price LV', 'wc_makecommerce_domain'),
1530 + 'title' => __('Shipping price', 'wc_makecommerce_domain').' LV',
1432 1531 'type' => 'text',
1433 1532 'default' => '7.99'
1434 1533 );
1534 + $this->form_fields['free_shipping_min_amount_lv'] = array(
1535 + 'title' => __('Free shipping amount', 'wc_makecommerce_domain').' LV',
1536 + 'type' => 'number',
1537 + 'default' => '0',
1538 + 'desc_tip' => __('(0 means no free shipping)', 'wc_makecommerce_domain'),
1539 + );
1435 1540 $this->form_fields['price_lt'] = array(
1436 - 'title' => __('Price LT', 'wc_makecommerce_domain'),
1541 + 'title' => __('Shipping price', 'wc_makecommerce_domain').' LT',
1437 1542 'type' => 'text',
1438 1543 'default' => '8.99'
1439 1544 );
1440 - $this->form_fields['free_shipping_min_amount'] = array(
1441 - 'title' => __('Minimum amount for free shipping', 'wc_makecommerce_domain'),
1545 + $this->form_fields['free_shipping_min_amount_lt'] = array(
1546 + 'title' => __('Free shipping amount', 'wc_makecommerce_domain').' LT',
1442 1547 'type' => 'number',
1443 1548 'default' => '0',
1444 - 'description' => '(0 means no free shipping)'
1549 + 'desc_tip' => __('(0 means no free shipping)', 'wc_makecommerce_domain'),
1445 1550 );
1446 1551 $this->form_fields['maximum_weight'] = array(
1447 1552 'title' => __('Maximum weight allowed for shipping', 'wc_makecommerce_domain'),
1448 1553 'type' => 'text',
@@ -1447,17 +1552,10 @@
1447 1552 'title' => __('Maximum weight allowed for shipping', 'wc_makecommerce_domain'),
1448 1553 'type' => 'text',
1449 1554 'default' => '15'
1450 1555 );
1451 - $this->form_fields['countries'] = array(
1452 - 'title' => __('Specific Countries', 'wc_makecommerce_domain'),
1453 - 'type' => 'multiselect',
1454 - 'class' => 'wp-enhanced-select',
1455 - 'css' => 'width: 450px;',
1456 - 'default' => array('EE','LV','LT'),
1457 - 'options' => array('EE' => __('Estonia'), 'LV' => __('Latvia'), 'LT' => __('Lithuania')),
1458 - );
1459 - $this->form_fields['look_and_feel'] = array( 'type' => 'title', 'title' => __('Look and feel options', 'wc_makecommerce_domain'), 'description' => __('Options for presentation on check-out page', 'wc_makecommerce_domain'));
1556 +
1557 + $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'));
1460 1558 $languages = apply_filters('wpml_active_languages', NULL, 'skip_missing=0');
1461 1559 if (empty($languages)) {
1462 1560 $this->form_fields['method_name'] = array(
1463 1561 'title' => __('Shipping Method Title', 'wc_makecommerce_domain'),
@@ -1485,9 +1583,9 @@
1485 1583 'type' => 'checkbox',
1486 1584 'label' => __('Display only parcel machine names, without addresses', 'wc_makecommerce_domain'),
1487 1585 'default' => 'no'
1488 1586 );
1489 - $this->form_fields['api_access'] = array( 'type' => 'title', 'title' => '<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')));
1587 + $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')));
1490 1588 $this->form_fields['service_user'] = array(
1491 1589 'title' => __('Omniva web services username', 'wc_makecommerce_domain'),
1492 1590 'type' => 'text',
1493 1591 'default' => ''
@@ -1512,8 +1610,13 @@
1512 1610 'type' => 'text',
1513 1611 'title' => __('Shop email', 'wc_makecommerce_domain'),
1514 1612 'class' => 'input-text regular-input',
1515 1613 );
1614 + $this->form_fields['shop_address_city'] = array(
1615 + 'type' => 'text',
1616 + 'title' => __('Shop address city', 'wc_makecommerce_domain'),
1617 + 'class' => 'input-text regular-input',
1618 + );
1516 1619 $this->form_fields['shop_postal_code'] = array(
1517 1620 'type' => 'text',
1518 1621 'title' => __('Shop postal code', 'wc_makecommerce_domain'),
1519 1622 'class' => 'input-text regular-input',
@@ -1518,8 +1621,11 @@
1518 1621 'title' => __('Shop postal code', 'wc_makecommerce_domain'),
1519 1622 'class' => 'input-text regular-input',
1520 1623 'description' => __('Put here zip-code of the Parcel Terminal you use for returns, see: <a href="https://www.omniva.ee/era/kaart/asukohad">List of Omniva Terminals</a>', 'wc_makecommerce_domain')
1521 1624 );
1625 + $this->form_fields['shipping_ui_javascript'] = array(
1626 + 'type' => 'shipping_ui_javascript',
1627 + );
1522 1628 }
1523 1629
1524 1630 }
1525 1631 class WC_ParcelMachine_Shipping_Method_Smartpost extends WC_ParcelMachine_Shipping_Method {
@@ -1540,23 +1646,37 @@
1540 1646 'label' => __('enabled', 'wc_makecommerce_domain'),
1541 1647 'default' => 'no',
1542 1648 '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'),
1543 1649 );
1650 + $this->form_fields['countries'] = array(
1651 + 'title' => __('Specific Countries', 'wc_makecommerce_domain'),
1652 + 'type' => 'multiselect',
1653 + 'class' => 'wp-enhanced-select',
1654 + 'css' => 'width: 450px;',
1655 + 'default' => array('EE','FI'),
1656 + 'options' => array('EE' => __('Estonia - EE'), 'FI' => __('Finland - FI')),
1657 + );
1544 1658 $this->form_fields['price_ee'] = array(
1545 - 'title' => __('Price EE', 'wc_makecommerce_domain'),
1659 + 'title' => __('Shipping price', 'wc_makecommerce_domain').' EE',
1546 1660 'type' => 'text',
1547 1661 'default' => '2.99'
1548 1662 );
1663 + $this->form_fields['free_shipping_min_amount_ee'] = array(
1664 + 'title' => __('Free shipping amount', 'wc_makecommerce_domain').' EE',
1665 + 'type' => 'number',
1666 + 'default' => '0',
1667 + 'desc_tip' => __('(0 means no free shipping)', 'wc_makecommerce_domain'),
1668 + );
1549 1669 $this->form_fields['price_fi'] = array(
1550 - 'title' => __('Price FI', 'wc_makecommerce_domain'),
1670 + 'title' => __('Shipping price', 'wc_makecommerce_domain').' FI',
1551 1671 'type' => 'text',
1552 1672 'default' => '10.99'
1553 1673 );
1554 - $this->form_fields['free_shipping_min_amount'] = array(
1555 - 'title' => __('Minimum amount for free shipping', 'wc_makecommerce_domain'),
1674 + $this->form_fields['free_shipping_min_amount_fi'] = array(
1675 + 'title' => __('Free shipping amount', 'wc_makecommerce_domain'). ' FI',
1556 1676 'type' => 'number',
1557 1677 'default' => '0',
1558 - 'description' => __('(0 means no free shipping)', 'wc_makecommerce_domain'),
1678 + 'desc_tip' => __('(0 means no free shipping)', 'wc_makecommerce_domain'),
1559 1679 );
1560 1680 $this->form_fields['maximum_weight'] = array(
1561 1681 'title' => __('Maximum weight allowed for shipping', 'wc_makecommerce_domain'),
1562 1682 'type' => 'text',
@@ -1561,17 +1681,10 @@
1561 1681 'title' => __('Maximum weight allowed for shipping', 'wc_makecommerce_domain'),
1562 1682 'type' => 'text',
1563 1683 'default' => '15'
1564 1684 );
1565 - $this->form_fields['countries'] = array(
1566 - 'title' => __('Specific Countries', 'wc_makecommerce_domain'),
1567 - 'type' => 'multiselect',
1568 - 'class' => 'wp-enhanced-select',
1569 - 'css' => 'width: 450px;',
1570 - 'default' => array('EE','FI'),
1571 - 'options' => array('EE' => __('Estonia'), 'FI' => __('Finland')),
1572 - );
1573 - $this->form_fields['look_and_feel'] = array( 'type' => 'title', 'title' => __('Look and feel options', 'wc_makecommerce_domain'), 'description' => __('Options for presentation on checkout page', 'wc_makecommerce_domain'));
1685 +
1686 + $this->form_fields['look_and_feel'] = array( 'type' => 'title', 'title' => '<br>'.__('Look and feel options', 'wc_makecommerce_domain'), 'description' => __('Options for presentation on checkout page', 'wc_makecommerce_domain'));
1574 1687 $languages = apply_filters('wpml_active_languages', NULL, 'skip_missing=0');
1575 1688 if (empty($languages)) {
1576 1689 $this->form_fields['method_name'] = array(
1577 1690 'title' => __('Shipping Method Title', 'wc_makecommerce_domain'),
@@ -1626,8 +1739,11 @@
1626 1739 'type' => 'text',
1627 1740 'title' => __('Shop email', 'wc_makecommerce_domain'),
1628 1741 'class' => 'input-text regular-input',
1629 1742 );
1743 + $this->form_fields['shipping_ui_javascript'] = array(
1744 + 'type' => 'shipping_ui_javascript',
1745 + );
1630 1746 }
1631 1747
1632 1748 }
1633 1749 }
@@ -1728,12 +1844,16 @@
1728 1844 'type' => 'text',
1729 1845 'title' => __('Publishable key (test)', 'wc_makecommerce_domain'),
1730 1846 'class' => 'input-text regular-input',
1731 1847 ),
1848 + array(
1849 + 'id' => 'mk_javascript_ui',
1850 + 'type' => 'api_javascript_ui',
1851 + ),
1732 1852 array('type' => 'sectionend', 'id' => 'mk_api_settings')
1733 1853 );
1734 1854 }
1735 -
1855 +
1736 1856 function mk_admin_save_settings() {
1737 1857 // reload banklinks
1738 1858 global $current_section;
1739 1859 if ($current_section !== 'mk_api') {
@@ -1742,25 +1862,52 @@
1742 1862 $wcmc = New woocommerce_makecommerce(true);
1743 1863 $wcmc->mc_banklinks_reload(true);
1744 1864 }
1745 1865
1746 - function __get_logo_html() {
1747 - return '<div class="makecommerce-info">'.
1748 - '<div class="makecommerce-logo">'.
1749 - '<a target="_blank" href="http://maksekeskus.ee"><img src="'. plugins_url('/images/makecommerce_logo_en.svg', __FILE__) .'" class="makecommerce-logo"></a>'.
1750 - '</div>'.
1751 - '<div class="makecommerce-links">'.
1752 - '<div class="makecommerce-link"><a target="_blank" href="https://merchant.maksekeskus.ee">Merchant Portal</a></div>'.
1753 - '<div class="makecommerce-link"><a target="_blank" href="https://makecommerce.net/">makecommerce.net</a></div>'.
1754 - '<div class="makecommerce-link"><a target="_blank" href="http://maksekeskus.ee">maksekeskus.ee</a></div>'.
1755 - '</div>'.
1756 - '</div>';
1757 - }
1866 + function __get_logo_html() {
1867 + return '<div class="makecommerce-info">'.
1868 + '<div class="makecommerce-logo">'.
1869 + '<a target="_blank" href="http://maksekeskus.ee"><img src="'. plugins_url('/images/makecommerce_logo_en.svg', __FILE__) .'" class="makecommerce-logo"></a>'.
1870 + '</div>'.
1871 + '<div class="makecommerce-links">'.
1872 + '<div class="makecommerce-link"><a target="_blank" href="https://merchant.maksekeskus.ee">Merchant Portal</a></div>'.
1873 + '<div class="makecommerce-link"><a target="_blank" href="https://makecommerce.net/">makecommerce.net</a></div>'.
1874 + '<div class="makecommerce-link"><a target="_blank" href="http://maksekeskus.ee">maksekeskus.ee</a></div>'.
1875 + '</div>'.
1876 + '</div>';
1877 + }
1758 1878
1759 1879 add_action('woocommerce_get_sections_api', 'mk_admin_add_settings');
1760 1880 add_filter('woocommerce_get_settings_api', 'mk_admin_all_settings', 10, 2);
1761 1881 add_action('woocommerce_settings_saved', 'mk_admin_save_settings', 30, 0);
1882 + add_action('woocommerce_admin_field_api_javascript_ui', 'api_javascript_ui');
1883 + function api_javascript_ui( $data ) {
1884 + ?>
1885 + <script type="text/javascript">
1886 + jQuery(document).ready(function($) {
1887 + var env_select = $('#mk_api_type');
1888 + var test_fields = ['mk_test_shop_id', 'mk_test_private_key', 'mk_test_public_key'];
1889 + var live_fields = ['mk_shop_id', 'mk_private_key', 'mk_public_key'];
1762 1890
1891 + env_select.on('change', function(){
1892 + hideFileds($(this).val());
1893 + });
1894 + hideFileds(env_select.val());
1895 + function hideFileds(type) {
1896 + var hide = type == 'live' ? test_fields : live_fields;
1897 + var show = type == 'live' ? live_fields : test_fields;
1898 + $.each(hide, function(i, elem) {
1899 + $('#'+elem).closest('tr').hide();
1900 + });
1901 + $.each(show, function(i, elem) {
1902 + $('#'+elem).closest('tr').show();
1903 + });
1904 + }
1905 + });
1906 + </script>
1907 + <?php
1908 + }
1909 +
1763 1910 function mk_admin_restrict_manage_posts() {
1764 1911 global $typenow;
1765 1912 if ( in_array( $typenow, wc_get_order_types( 'order-meta-boxes' ) ) ) {
1766 1913 $selected_method = !empty($_REQUEST['_shipping_method']) ? $_REQUEST['_shipping_method'] : false;
@@ -1792,10 +1939,9 @@
1792 1939 add_filter('posts_where', 'mk_admin_shipping_filter', 10, 2);
1793 1940
1794 1941 function mk_admin_bulk_actions() {
1795 1942 global $post_type;
1796 - if ('shop_order' === $post_type) {
1797 -?>
1943 + if ('shop_order' === $post_type) { ?>
1798 1944 <script type="text/javascript">
1799 1945 jQuery(function() {
1800 1946 jQuery('<option>').val('parcel_machine_labels').text('<?php _e( 'Register parcel machine shipments', 'wc_makecommerce_domain' )?>').appendTo('select[name="action"]');
1801 1947 jQuery('<option>').val('parcel_machine_labels').text('<?php _e( 'Register parcel machine shipments', 'wc_makecommerce_domain' )?>').appendTo('select[name="action2"]');
@@ -1802,18 +1948,15 @@
1802 1948 jQuery('<option>').val('parcel_machine_print_labels').text('<?php _e( 'Print parcel machine labels', 'wc_makecommerce_domain' )?>').appendTo('select[name="action"]');
1803 1949 jQuery('<option>').val('parcel_machine_print_labels').text('<?php _e( 'Print parcel machine labels', 'wc_makecommerce_domain' )?>').appendTo('select[name="action2"]');
1804 1950 });
1805 1951 </script>
1806 -<?php
1807 - if (!empty($_REQUEST['mk_pdf'])) {
1808 -?>
1809 - <script type="text/javascript">
1810 - jQuery(function(){
1811 - window.open('<?php echo $_REQUEST['mk_pdf'] ?>', 'pdf');
1812 - });
1813 - </script>
1814 -<?php
1815 - }
1952 + <?php if (!empty($_REQUEST['mk_pdf'])) { ?>
1953 + <script type="text/javascript">
1954 + jQuery(function(){
1955 + window.open('<?php echo $_REQUEST['mk_pdf'] ?>', 'pdf');
1956 + });
1957 + </script>
1958 + <?php }
1816 1959 }
1817 1960 }
1818 1961 function mk_admin_bulk_action_labels() {
1819 1962 $wp_list_table = _get_list_table('WP_Posts_List_Table');
@@ -1898,13 +2041,23 @@
1898 2041 'label' => __('Does not fit parcel machine', 'wc_makecommerce_domain'),
1899 2042 'description' => __('When this is checked, parcel machine shipping option is not available for a cart with this product', 'wc_makecommerce_domain')
1900 2043 )
1901 2044 );
2045 + woocommerce_wp_checkbox(
2046 + array(
2047 + 'id' => '_no_shipping_cost',
2048 + 'wrapper_class' => 'show_if_simple',
2049 + 'label' => __('Free parcel machine', 'wc_makecommerce_domain'),
2050 + 'description' => __('When this is checked, parcel machine if free for this product', 'wc_makecommerce_domain')
2051 + )
2052 + );
1902 2053 echo '</div>';
1903 2054 }
1904 2055 function mk_admin_product_fields_save($post_id) {
1905 2056 $no_parcel_machine = isset($_POST['_no_parcel_machine']) ? 'yes' : 'no';
1906 2057 update_post_meta($post_id, '_no_parcel_machine', $no_parcel_machine);
2058 + $no_shipping_cost = isset($_POST['_no_shipping_cost']) ? 'yes' : 'no';
2059 + update_post_meta($post_id, '_no_shipping_cost', $no_shipping_cost);
1907 2060 }
1908 2061
1909 2062 add_action('woocommerce_product_options_shipping', 'mk_admin_product_option_fields');
1910 2063 add_action('woocommerce_process_product_meta', 'mk_admin_product_fields_save');
@@ -1986,18 +2139,12 @@
1986 2139 }
1987 2140 }
1988 2141 }
1989 2142
1990 - function mk_get_labels($post_ids) {
2143 + function mk_get_labels($post_ids, $ajax = false) {
1991 2144 if (!is_array($post_ids)) {
1992 2145 $post_ids = array($post_ids);
1993 2146 }
1994 - $sender = array(
1995 - 'name' => get_option('mk_shop_name', ''),
1996 - 'phone' => get_option('mk_shop_phone', ''),
1997 - 'email' => get_option('mk_shop_email', ''),
1998 - 'postalCode' => get_option('mk_shop_postal_code', '')
1999 - );
2000 2147 parcelmachine_add_method();
2001 2148 $shipping_request = array('credentials' => array(), 'orders' => array(), 'printFormat' => 'A4');
2002 2149 foreach ($post_ids as $post_id) {
2003 2150 $parcel_machine = get_post_meta($post_id, '_parcel_machine', true);
@@ -2026,8 +2173,14 @@
2026 2173 }
2027 2174 $order = wc_get_order($post_id);
2028 2175 $shipment_id = get_post_meta($post_id, '_parcel_machine_shipment_id', true);
2029 2176 if (!$shipment_id) { continue; }
2177 + $sender = array(
2178 + 'name' => $transport_class->settings['shop_name'],
2179 + 'phone' => $transport_class->settings['shop_phone'],
2180 + 'email' => $transport_class->settings['shop_email'],
2181 + 'postalCode' => $transport_class->settings['shop_postal_code']
2182 + );
2030 2183 $shipping_request['orders'][] = array(
2031 2184 'carrier' => $provider_uc,
2032 2185 'orderId' => $order->id,
2033 2186 'destination' => array('destinationId' => $machine_id),
@@ -2052,8 +2205,11 @@
2052 2205 }
2053 2206 if (empty($response->labelUrl)) {
2054 2207 return;
2055 2208 }
2209 + if($ajax) {
2210 + return $response->labelUrl;
2211 + }
2056 2212 $sendback = add_query_arg(array('post_type' => 'shop_order', 'mk_pdf' => urlencode($response->labelUrl)), '');
2057 2213 wp_redirect(esc_url_raw($sendback));
2058 2214 exit();
2059 2215 }
@@ -2100,9 +2256,9 @@
2100 2256 }
2101 2257 foreach ($data as $machine) {
2102 2258 if ($machine->country === $country && $machine->type === 'APT' && ($provider === '*' || strtolower($provider) === strtolower($machine->provider))) {
2103 2259 $machines[] = array(
2104 - 'provider' => strtolower($machine->provider),
2260 + 'carrier' => strtolower($machine->provider),
2105 2261 'id' => $machine->id,
2106 2262 'name' => $machine->name,
2107 2263 'city' => $machine->city,
2108 2264 'address' => !empty($machine->address) ? $machine->address : '',
@@ -2120,9 +2276,9 @@
2120 2276
2121 2277 function mk_get_machine($provider, $id) {
2122 2278 $machines = mk_get_machines($provider);
2123 2279 foreach ($machines as $machine) {
2124 - if ($machine['provider'] === $provider && $machine['id'] === $id) {
2280 + if ($machine['carrier'] === $provider && $machine['id'] === $id) {
2125 2281 return $machine;
2126 2282 }
2127 2283 }
2128 2284 return false;
@@ -2129,5 +2285,61 @@
2129 2285 }
2130 2286 function mk_admin_error() {
2131 2287 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'));
2132 2288 }
2289 +
2290 + add_filter('query_vars', 'mk_cron_query_vars');
2291 + add_action('parse_request', 'mk_parse_cron_update_vars');
2292 + function mk_cron_query_vars($vars) {
2293 + $vars[] = 'mk-action';
2294 + $vars[] = 'mk-shop-id';
2295 + $vars[] = 'mk-test-shop-id';
2296 + return $vars;
2297 + }
2298 + function mk_parse_cron_update_vars($wp) {
2299 + if (array_key_exists('mk-action', $wp->query_vars) && $wp->query_vars['mk-action'] == 'mk-update'
2300 + && (array_key_exists('mk-shop-id', $wp->query_vars) || array_key_exists('mk-test-shop-id', $wp->query_vars) ) ) {
2301 + if( (strlen($wp->query_vars['mk-shop-id']) && $wp->query_vars['mk-shop-id'] == get_option('mk_shop_id', false) )
2302 + || (strlen($wp->query_vars['mk-test-shop-id']) && $wp->query_vars['mk-test-shop-id'] == get_option('mk_test_shop_id', false) ) ) {
2303 + $obj = new woocommerce_makecommerce();
2304 + $obj->mc_banklinks_reload(true);
2305 + exit();
2306 + }
2307 + }
2308 + }
2309 + function print_parcel_machine_label_action( $post_id ) {
2310 + ?>
2311 + <li class="wide">
2312 + <a id="print_parcel_machine_label" href="#" class="button"><?php _e('Print parcel label', 'wc_makecommerce_domain');?></a>
2313 + <img class="mc_loading" src="<?php echo site_url('/wp-admin/images/loading.gif');?>">
2314 + <script type="text/javascript">
2315 + jQuery(function($){
2316 + var data = {
2317 + 'action': 'print_pml',
2318 + 'id': '<?php echo $post_id; ?>'
2319 + };
2320 + var loading = $('.mc_loading');
2321 + $('#print_parcel_machine_label').click(function(e){
2322 + e.preventDefault();
2323 + var button = $(this);
2324 + button.addClass('disabled');
2325 + loading.show();
2326 + $.post(ajaxurl, data, function(response) {
2327 + button.removeClass('disabled');
2328 + loading.hide();
2329 + window.open(response, 'pdf');
2330 + });
2331 + });
2332 + });
2333 + </script>
2334 + </li>
2335 + <?php
2336 + }
2337 + add_action('woocommerce_order_actions_end', 'print_parcel_machine_label_action');
2338 + function ajax_print_pml() {
2339 + if(!current_user_can('manage_woocommerce') ) {
2340 + die();
2341 + }
2342 + die(mk_get_labels(intval($_POST['id']), true));
2343 + }
2344 + add_action( 'wp_ajax_print_pml', 'ajax_print_pml' );
2133 2345 }