PluginProbe
MakeCommerce for WooCommerce / 3.0.12
MakeCommerce for WooCommerce v3.0.12
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 +160 -336 2.1.43.0.12 View file →
@@ -1,379 +1,203 @@
1 1 <?php
2 -/*
3 - Plugin Name: MakeCommerce for WooCommerce
4 - Description: Adds MakeCommerce payment gateway and Itella/Omniva parcel machine shipping methods to Woocommerce checkout
5 - Version: 2.1.4
6 - Author: Maksekeskus AS
7 - Author URI: https://MakeCommerce.net/
8 - Text Domain: wc_makecommerce_domain
9 -*/
10 2
11 -if ( ! defined( 'ABSPATH' ) ) {
12 - exit; // Exit if accessed directly.
3 +/**
4 + * @link https://makecommerce.net/
5 + * @since 3.0.0
6 + * @package Makecommerce
7 + *
8 + * @wordpress-plugin
9 + * Plugin Name: MakeCommerce
10 + * Plugin URI: https://makecommerce.net/
11 + * Description: Adds MakeCommerce/Simplecheckout payment gateway and Itella/Omniva/DPD parcel machine shipping methods to WooCommerce checkout
12 + * Version: 3.0.12
13 + * Author: Maksekeskus AS
14 + * Author URI: https://makecommerce.net/
15 + * License: GPL-2.0+
16 + * License URI: http://www.gnu.org/licenses/gpl-2.0.txt
17 + * Text Domain: makecommerce
18 + * Domain Path: /languages
19 + * Requires at least: 5.6.1
20 + * Requires PHP: 7.4
21 + * WC requires at least: 5.0.0
22 + * WC tested up to: 6.1.1
23 + */
24 +
25 +// If this file is called directly, abort.
26 +if ( ! defined( 'WPINC' ) ) {
27 + die;
13 28 }
14 29
15 -if ( in_array( 'woocommerce/woocommerce.php', apply_filters( 'active_plugins', get_option( 'active_plugins' ) ) ) ) {
30 +/**
31 + * Currently plugin version.
32 + * Start at version 3.0.0 and use SemVer - https://semver.org
33 + */
34 +define( 'MAKECOMMERCE_VERSION', '3.0.12' );
35 +define( 'MAKECOMMERCE_PLUGIN_ID', 'makecommerce' );
16 36
37 +//table name for banklinks
38 +define( 'MAKECOMMERCE_TABLENAME', 'mc_banklinks' );
39 +define( 'MAKECOMMERCE_SCO_TABLENAME', 'woocommerce_makecommerce_sc' );
17 40
18 - define('WC_MC_VERSION', 2.0);
41 +//WC makecommerce version
42 +define( 'WC_MC_VERSION', 2.0 );
19 43
20 - $enable_experimental = get_option('mk_experimental_features', false);
21 - if ($enable_experimental && $enable_experimental !== 'no') {
22 - require_once(__DIR__.'/makecommerce-simplecheckout.php');
23 - }
24 - require_once(__DIR__.'/makecommerce-transport.php');
25 - require_once(__DIR__.'/makecommerce-payment.php');
44 +register_activation_hook( __FILE__, 'activate_makecommerce' );
45 +register_deactivation_hook( __FILE__, 'deactivate_makecommerce' );
26 46
27 - global $mkDbTable;
28 - $mkDbTable = 'mc_banklinks';
47 +/**
48 + * Check if we are ok to continue (if namesoace and class doesn't already exist)
49 + */
50 +if ( class_exists( 'MakeCommerce' ) || namespaceExists( 'MakeCommerce' ) ) {
29 51
30 - function mc_install() {
31 - global $wpdb;
32 - global $mkDbTable;
33 -
34 - $tableName = $wpdb->prefix . $mkDbTable;
35 -
36 - $charset = $wpdb->get_charset_collate();
37 -
38 - $sql = "CREATE TABLE $tableName (
39 - id mediumint(9) NOT NULL AUTO_INCREMENT,
40 - type varchar(10) NOT NULL,
41 - country char(2) NOT NULL,
42 - name varchar(25) NOT NULL,
43 - url varchar(250) NOT NULL,
44 - UNIQUE KEY id (id)
45 - ) $charset;";
46 -
47 - require_once( ABSPATH . 'wp-admin/includes/upgrade.php' );
48 - dbDelta( $sql );
49 - }
52 + add_action( 'admin_notices', 'namespace_or_class_already_in_use' );
50 53
51 - register_activation_hook( __FILE__, 'mc_install' );
54 + deactivate_plugins( plugin_dir_path( __FILE__ ) . '/makecommerce.php' );
52 55
53 - // On uninstall remove scheduled hook
54 - function mc_uninstall() {
55 - if (wp_next_scheduled ( 'mc_banklinks_update_cron' )) {
56 - wp_clear_scheduled_hook('mc_banklinks_update_cron');
57 - }
58 - }
56 + return false;
57 +}
59 58
60 - register_deactivation_hook(__FILE__, 'mc_uninstall');
59 +/**
60 + * Check if a namespace already exists
61 + *
62 + * @since 3.0.0
63 + */
64 +function namespaceExists( $namespace ) {
61 65
62 - // WP schedule callable action
63 - add_action('mc_banklinks_update_cron', 'update_mc_banklinks');
64 - // Assign schedule if not set, update compatible no need to reactivate, format('U') php 5.2 compatible
65 - // Assigns task at 23.59.59 by local time, task runs if time has passed and somebody navigates the site
66 - if (! wp_next_scheduled ( 'mc_banklinks_update_cron' )) {
67 - $date = new DateTime();
68 - $date->setTime(04,10,00);
69 - $timestamp = intval($date->format('U'));
70 - //$local = 3600 * intval(get_option('gmt_offset'));
71 - //wp_schedule_event($timestamp - $local, 'twicedaily', 'mc_banklinks_update_cron');
72 - wp_schedule_event($timestamp, 'twicedaily', 'mc_banklinks_update_cron');
73 - }
74 -
75 - if (!class_exists('wc_makecommerce_domain')) {
76 - require_once('includes/vendor/autoload.php');
77 - require_once('includes/Maksekeskus.php');
66 + $namespace .= "\\";
67 +
68 + foreach ( get_declared_classes() as $name ) {
69 +
70 + if ( strpos( $name, $namespace ) === 0 ) {
71 + return true;
72 + }
78 73 }
79 74
80 - function mk_check_payment() {
75 + return false;
76 +}
81 77
82 - global $woocommerce;
83 - $api = mk_get_api();
78 +/**
79 + * Shows error in admin that we cannot continue
80 + *
81 + * @since 3.0.0
82 + */
83 +function namespace_or_class_already_in_use() {
84 +
85 + ?>
86 + <div class="error notice">
87 + <p><?php _e( 'Cannot initiate MakeCommerce, a class and/or namespace called "MakeCommerce" is already in use somewhere else...', 'wc_makecommerce_domain' ); ?></p>
88 + </div>
89 + <?php
90 +}
84 91
85 - $returnUrl = home_url();
86 -
87 - $request = stripslashes_deep($_POST);
88 - if ($api->verifyMac($request)) {
89 - $data = $api->extractRequestData($request);
90 - $reference = false;
92 +/**
93 + * Check if WooCommerce exists and is active. Can't do much without it
94 + */
95 +if ( !in_array( 'woocommerce/woocommerce.php', apply_filters( 'active_plugins', get_option( 'active_plugins' ) ) ) ) {
91 96
92 - if (!empty($data['error']) ) {
93 - wc_add_notice(__('Payment failed', 'wc_makecommerce_domain'), 'error');
94 - return $returnUrl;
95 - }
97 + if ( is_multisite() ) {
96 98
97 - if (!empty($data['message_type']) ) {
98 - if ($data['message_type'] == 'payment_return') {
99 - $transactionId = $data['transaction'];
100 - $reference = $data['reference'];
101 - $paymentStatus = $data['status'];
102 - }
103 - if ($data['message_type'] == 'token_return') {
104 - if (!empty($data['transaction']['reference'])) {
105 - $reference = $data['transaction']['reference'];
106 - }
107 - $paymentStatus = $data['transaction']['status'];
108 - $transactionId = $data['transaction']['id'];
109 -
110 - // for API backward compatibility - if we didn't find reference in the mesage, or the transaction state vas still PENDING
111 - // we'll fetch the transaction data from API, and make a payment request if needed
112 - // this all can be removed after 2017-jan
113 - if (!$reference or $paymentStatus == 'PENDING') {
114 - $transaction = $api->getTransaction($transactionId);
115 - if (!empty($transaction->reference)) {
116 - $reference = $transaction->reference;
117 - }
99 + include_once( ABSPATH . "wp-admin/includes/plugin.php" );
100 + if ( !is_plugin_active_for_network( "woocommerce/woocommerce.php" ) ) {
101 + woocommerce_not_found_or_active();
118 102
119 - $paymentStatus = $transaction->status;
120 -
121 - if ($paymentStatus == 'PENDING') {
122 - $paymentRequest = array(
123 - 'amount' => $transaction->amount,
124 - 'currency' => $transaction->currency,
125 - 'token' => $data['token']['id']
126 - );
127 - $payment = $api->createPayment($transactionId, $paymentRequest);
128 - // TODO: validate
129 - $paymentStatus = $payment->transaction->status;
130 - }
131 -
132 - }
133 -
103 + deactivate_plugins( plugin_dir_path( __FILE__ ) . '/makecommerce.php' );
134 104
135 - }
136 -
137 - }
105 + return false;
138 106 }
107 + } else {
108 + woocommerce_not_found_or_active();
139 109
140 - // if we didn't find reference to an Order, we send user to shop landing-page. TODO: could be improved
141 - if (!$reference) { return $returnUrl; }
110 + deactivate_plugins( plugin_dir_path( __FILE__ ) . '/makecommerce.php' );
142 111
143 - $order = new WC_Order($reference);
144 - // if we din't find the Order, we send user to shop landing-page. TODO: could be improved
145 - if (!$order->id) { return $returnUrl; }
112 + return false;
113 + }
114 +}
146 115
147 - $returnUrl = $order->get_checkout_order_received_url();
116 +/**
117 + * If no WooCommerce is found
118 + *
119 + * @since 3.0.3
120 + */
121 +function woocommerce_not_found_or_active() {
148 122
149 - switch($paymentStatus) {
123 + add_action( 'admin_notices', 'no_woocommerce_found' );
150 124
151 - case 'CANCELLED':
152 - $order->update_status( 'cancelled' );
153 - wc_add_notice(__('Payment transaction cancelled', 'wc_makecommerce_domain'), 'error');
154 - $returnUrl = $woocommerce->cart->get_cart_url();
155 - break;
125 + deactivate_makecommerce();
126 +}
156 127
157 - case 'COMPLETED':
158 - $orderNote = array();
159 - $orderNote[] = __('Transaction ID', 'wc_makecommerce_domain') . ': <a target=_blank href="'.$api->getEnvUrls()->merchantUrl.'/merchant/shop/deals/detail.html?id='. $transactionId .'">'.$transactionId.'</a>';
160 - $orderNote[] = __('Payment option', 'wc_makecommerce_domain') . ': ' . get_post_meta($order->id, '_makecommerce_preselected_method', true);
161 - $order->add_order_note(implode("\r\n", $orderNote));
162 -
163 - $order->payment_complete();
164 - $order->update_status( 'processing' );
165 - $woocommerce->cart->empty_cart();
166 - break;
128 +/**
129 + * Shows error in admin that we cannot continue
130 + *
131 + * @since 3.0.0
132 + */
133 +function no_woocommerce_found() {
134 +
135 + ?>
136 + <div class="error notice">
137 + <p><?php _e( 'Cannot initiate MakeCommerce, there seems to be no WooCommerce present or active...', 'wc_makecommerce_domain' ); ?></p>
138 + </div>
139 + <?php
140 +}
167 141
168 - }
142 +/**
143 + * Disable automatic updates for MakeCommerce plugin
144 + *
145 + * @since 3.0.1
146 + */
147 +function disable_makecommerce_automatic_updates( $should_update, $plugin ) {
169 148
170 - return $returnUrl;
149 + if ( ! isset( $plugin->plugin, $plugin->new_version ) ) {
150 + return $should_update;
171 151 }
172 152
173 -
174 -
175 -
176 - $MKAPI = false;
177 - function mk_get_api() {
178 - global $MKAPI;
179 - if ($MKAPI) {
180 - //return $MKAPI;
181 - }
182 - $mk_api_type = get_option('mk_api_type', false);
183 - if (!$mk_api_type) {
184 - return false;
185 - }
186 - if ($mk_api_type !== 'live') {
187 - $key_prefix = $mk_api_type.'_';
188 - } else {
189 - $key_prefix = '';
190 - }
191 - $mk_shop_id = get_option('mk_'.$key_prefix.'shop_id', '');
192 - $mk_public_key = get_option('mk_'.$key_prefix.'public_key', '');
193 - $mk_private_key = get_option('mk_'.$key_prefix.'private_key', '');
194 - if (!$mk_shop_id || !$mk_public_key || !$mk_shop_id) {
195 - return false;
196 - }
197 - $MKAPI = new \Maksekeskus\Maksekeskus($mk_shop_id, $mk_public_key, $mk_private_key, $mk_api_type === 'live' ? false : true);
198 - return $MKAPI;
153 + if ( 'makecommerce/makecommerce.php' !== $plugin->plugin ) {
154 + return $should_update;
199 155 }
200 156
201 - function mk_is_api_set() {
202 - $mk_api_type = get_option('mk_api_type', false);
203 - if (!$mk_api_type) {
204 - return false;
205 - }
206 - if ($mk_api_type !== 'live') {
207 - $key_prefix = $mk_api_type.'_';
208 - } else {
209 - $key_prefix = '';
210 - }
211 - $mk_shop_id = get_option('mk_'.$key_prefix.'shop_id', '');
212 - $mk_public_key = get_option('mk_'.$key_prefix.'public_key', '');
213 - $mk_private_key = get_option('mk_'.$key_prefix.'private_key', '');
214 - if (!$mk_shop_id || !$mk_public_key || !$mk_shop_id) {
215 - return false;
216 - }
217 - return true;
218 - }
157 + return false;
158 +}
219 159
160 +add_filter( 'auto_update_plugin', 'disable_makecommerce_automatic_updates', 99, 2 );
220 161
221 - function mk_admin_error() {
222 - 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'));
223 - }
162 +/**
163 + * The code that runs during plugin activation.
164 + * This action is documented in includes/class-makecommerce-activator.php
165 + *
166 + * @since 3.0.1
167 + */
168 +function activate_makecommerce() {
224 169
170 + require_once plugin_dir_path( __FILE__ ) . 'includes/activator.php';
171 + MakeCommerce\Activator::activate();
172 +}
225 173
174 +/**
175 + * The code that runs during plugin deactivation.
176 + * This action is documented in includes/class-makecommerce-deactivator.php
177 + *
178 + * @since 3.0.1
179 + */
180 +function deactivate_makecommerce() {
226 181
227 - add_filter('query_vars', 'mk_cron_query_vars');
228 - add_action('parse_request', 'mk_parse_cron_update_vars');
182 + require_once plugin_dir_path( __FILE__ ) . 'includes/deactivator.php';
183 + MakeCommerce\Deactivator::deactivate();
184 +}
229 185
230 - function mk_cron_query_vars($vars) {
231 - $vars[] = 'mk-action';
232 - $vars[] = 'mk-shop-id';
233 - $vars[] = 'mk-test-shop-id';
234 - return $vars;
235 - }
186 +/**
187 + * The core plugin class that is used to define internationalization,
188 + * payment-specific hooks, and shipping-specific site hooks.
189 + */
190 +require plugin_dir_path( __FILE__ ) . 'includes/makecommerce.php';
236 191
237 - function mk_parse_cron_update_vars($wp) {
238 - if (array_key_exists('mk-action', $wp->query_vars) && $wp->query_vars['mk-action'] == 'mk-update'
239 - && (array_key_exists('mk-shop-id', $wp->query_vars) || array_key_exists('mk-test-shop-id', $wp->query_vars) ) ) {
240 - if( (strlen($wp->query_vars['mk-shop-id']) && $wp->query_vars['mk-shop-id'] == get_option('mk_shop_id', false) )
241 - || (strlen($wp->query_vars['mk-test-shop-id']) && $wp->query_vars['mk-test-shop-id'] == get_option('mk_test_shop_id', false) ) ) {
242 - update_mc_banklinks();
243 - exit();
244 - }
245 - }
246 - }
192 +/**
193 + * Begins execution of the plugin.
194 + *
195 + * @since 3.0.0
196 + */
197 +function run_makecommerce() {
247 198
248 - function mk_admin_login_update($user_login, $user) {
249 - if(user_can( $user, 'administrator' )) {
250 - update_mc_banklinks();
251 - }
252 - }
253 - add_action('wp_login', 'mk_admin_login_update', 10, 2);
199 + $makeCommerce = new MakeCommerce();
200 + $makeCommerce->run();
201 +}
254 202
255 -
256 -
257 - function mk_admin_add_api_settings($sections) {
258 - $sections['mk_api'] = __('MakeCommerce API access', 'wc_makecommerce_domain');
259 - return $sections;
260 - }
261 -
262 - function mk_admin_api_settings($settings) {
263 - global $current_section;
264 - if ($current_section !== 'mk_api') {
265 - return $settings;
266 - }
267 - return array(
268 - array('type' => 'title', 'desc' => __get_logo_html()),
269 - array(
270 - 'type' => 'title',
271 - 'title' => __('MakeCommerce API access credentials', 'wc_makecommerce_domain'),
272 - 'desc' => __('To use MakeCommerce/Maksekeskus services you need to enter API credentials below here <br/> <br/>', 'wc_makecommerce_domain').
273 - 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').
274 - sprintf( __('To use also Ominva or Itella SmartPOST integration please configure these API accesses: <a href="%s">Omniva Parcel Machine API access</a> | '.
275 - '<a href="%s">SmartPOST API access</a> | <a href="%s">Omniva Courier API access</a><br/>','wc_makecommerce_domain'),
276 - 'admin.php?page=wc-settings&tab=-shipping&section=parcelmachine_omniva',
277 - 'admin.php?page=wc-settings&tab=shipping&section=parcelmachine_smartpost',
278 - 'admin.php?page=wc-settings&tab=shipping&section=courier_omniva'
279 - ),
280 - 'id' => 'mk_api_settings'
281 - ),
282 - array(
283 - 'type' => 'select',
284 - 'title' => __('Current environment', 'wc_makecommerce_domain'),
285 - 'desc' => __('See more about <a href="https://maksekeskus.ee/en/for-developers/test-environment/">MakeCommerce Test environment</a>', 'wc_makecommerce_domain'),
286 - 'default' => 'live',
287 - 'options' => array(
288 - 'live' => __('Live', 'wc_makecommerce_domain'),
289 - 'test' => __('Test', 'wc_makecommerce_domain'),
290 - ),
291 - 'id' => 'mk_api_type'
292 - ),
293 - array(
294 - 'id' => 'mk_shop_id',
295 - 'type' => 'text',
296 - 'title' => __('Shop ID (live)', 'wc_makecommerce_domain'),
297 - 'desc' => __('Get it from <a href="https://merchant.maksekeskus.ee/api.html" target="_blank">Merchant Portal</a>','wc_makecommerce_domain'),
298 - 'class' => 'input-text regular-input',
299 - ),
300 - array(
301 - 'id' => 'mk_private_key',
302 - 'type' => 'text',
303 - 'title' => __('Secret key (live)', 'wc_makecommerce_domain'),
304 - 'class' => 'input-text regular-input',
305 - ),
306 - array(
307 - 'id' => 'mk_public_key',
308 - 'type' => 'text',
309 - 'title' => __('Publishable key (live)', 'wc_makecommerce_domain'),
310 - 'class' => 'input-text regular-input',
311 - ),
312 - array(
313 - 'id' => 'mk_test_shop_id',
314 - 'type' => 'text',
315 - 'title' => __('Shop ID (test)', 'wc_makecommerce_domain'),
316 - 'class' => 'input-text regular-input',
317 - 'default' => 'f64b4f20-5ef9-4b7b-a6fa-d623d87f0b9c',
318 - 'desc' => __('Get it from <a href="https://merchant-test.maksekeskus.ee/api.html" target="_blank">Merchant Portal Test</a>','wc_makecommerce_domain'),
319 - ),
320 - array(
321 - 'id' => 'mk_test_private_key',
322 - 'type' => 'text',
323 - 'title' => __('Secret key (test)', 'wc_makecommerce_domain'),
324 - 'default' => 'MPjcVMoRZPAucsTuGK5ZukOlV7BlzgSvXOowJUkk9IFSQPVooRwcVOxzz3mhEpgM',
325 - 'class' => 'input-text regular-input',
326 - ),
327 - array(
328 - 'id' => 'mk_test_public_key',
329 - 'type' => 'text',
330 - 'title' => __('Publishable key (test)', 'wc_makecommerce_domain'),
331 - 'default' => '7Hog41ci2mKkmtviMycWxpNx14pNP70m',
332 - 'class' => 'input-text regular-input',
333 - ),
334 - array(
335 - 'id' => 'mk_experimental_features',
336 - 'type' => 'checkbox',
337 - 'title' => __('Enable experimental features', 'wc_makecommerce_domain'),
338 - 'class' => '',
339 - ),
340 - array(
341 - 'id' => 'mk_javascript_ui',
342 - 'type' => 'api_javascript_ui',
343 - ),
344 - array('type' => 'sectionend', 'id' => 'mk_api_settings')
345 - );
346 - }
347 -
348 - function mk_admin_save_api_settings() {
349 - // reload banklinks
350 - global $current_section;
351 - if ($current_section !== 'mk_api') {
352 - return;
353 - }
354 - update_mc_banklinks();
355 - }
356 -
357 - function mk_admin_plugin_settings_link($links) {
358 - $settings_link = '<a href="admin.php?page=wc-settings&tab=api&section=mk_api">API '.__('Settings').'</a>';
359 - array_unshift($links, $settings_link);
360 - return $links;
361 - }
362 - add_filter('woocommerce_get_settings_api', 'mk_admin_api_settings', 10, 2);
363 - add_action('woocommerce_get_sections_api', 'mk_admin_add_api_settings');
364 - add_action('woocommerce_settings_saved', 'mk_admin_save_api_settings', 30, 0);
365 - add_filter("plugin_action_links_".plugin_basename(__FILE__), 'mk_admin_plugin_settings_link' );
366 -
367 - function __get_logo_html() {
368 - return '<div class="makecommerce-info">'.
369 - '<div class="makecommerce-logo">'.
370 - '<a target="_blank" href="http://maksekeskus.ee"><img src="'. plugins_url('/images/makecommerce_logo_en.svg', __FILE__) .'" class="makecommerce-logo"></a>'.
371 - '</div>'.
372 - '<div class="makecommerce-links">'.
373 - '<div class="makecommerce-link"><a target="_blank" href="https://merchant.maksekeskus.ee">Merchant Portal</a></div>'.
374 - '<div class="makecommerce-link"><a target="_blank" href="https://makecommerce.net/">makecommerce.net</a></div>'.
375 - '<div class="makecommerce-link"><a target="_blank" href="http://maksekeskus.ee">maksekeskus.ee</a></div>'.
376 - '</div>'.
377 - '</div>';
378 - }
379 -}
203 +run_makecommerce();