-
Reinhold Kainhofer authoredReinhold Kainhofer authored
woocommerce-advanced-shipping-by-rules.php 9.31 KiB
<?php
/**
* Plugin Name: WooCommerce Advanced Shipping By Rules
* Plugin URI: http://open-tools.net/woocommerce/advanced-shipping-by-rules-for-woocommerce.html
* Description: Define Shipping cost by very general and flexible (text-based) rules. The advanced version also provides mathematical expressions and functions
* Version: 1.2.5
* Author: Open Tools, Reinhold Kainhofer
* Author URI: http://open-tools.net
* Text Domain: woocommerce-advanced-shipping-by-rules
* Domain Path: woocommerce-shipping-by-rules
* License: GPL2+
* WC requires at least: 2.2
* WC tested up to: 2.6
* Copyright (C) 2015 Reinhold Kainhofer
*
* This file is part of WooCommerce Shipping By Rules,
* a plugin for WordPress and WooCommerce.
*
* WooCommerce Shipping By Rules is free software:
* You can redistribute it and/or modify it under the terms of the
* GNU General Public License as published by the Free Software
* Foundation, either version 3 of the License, or (at your option)
* any later version.
*
* This software is distributed in the hope that
* it will be useful, but WITHOUT ANY WARRANTY; without even the
* implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
* PURPOSE. See the GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with WordPress. If not, see <http://www.gnu.org/licenses/>.
*/
// Define a global flag so the basic plugin can deactivate itself if this plugin is loaded
if ( !defined('OPENTOOLS_ADVANCED_SHIPPINGRULES') ) {
define ('OPENTOOLS_ADVANCED_SHIPPINGRULES', true);
}
// *****************************************************************
// * PLUGIN UPDATES
// *****************************************************************
require 'opentools-update-checker.php';
$myUpdateChecker = new OpenToolsPluginUpdateChecker(
'http://www.open-tools.net/UpdateServer/index.php?package=WooCommerce&extension=AdvancedShippingByRules',
__FILE__,
'woocommerce-advanced-shipping-by-rules'
);
$myUpdateChecker->declareCredentials(array(
'order_number' => __('Order Number:'),
'order_pass' => __('Order Password:'),
));
$myUpdateChecker->addAccessCheckQueryArgFilter('otsr_addAccessCheckArg');
function otsr_addAccessCheckArg($downloadurl) {
return $downloadurl . (parse_url($downloadurl, PHP_URL_QUERY) ? '&' : '?') . 'check_access=1';
}
// $myUpdateChecker->checkForUpdates();
// *****************************************************************
/**
* Class WooCommerce_Shipping_By_Rules_Advanced.
*
* Main Shipping by Rules class, add filters and handling all other files.
*
* @class WooCommerce_Shipping_By_Rules_Advanced
* @author Reinhold Kainhofer
*/
class WooCommerce_Shipping_By_Rules_Advanced {
/**
* Version.
*
* @since 1.0.0
* @var string $version Plugin version number.
*/
public $version = '1.2.5';
/**
* Instance of WooCommerce_Shipping_By_Rules.
*
* @since 1.0.0
* @access private
* @var object $instance The instance of WooCommerce_Shipping_By_Rules.
*/
private static $instance;
/**
* Constructor.
*
* @since 1.0.0
*/
public function __construct() {
if ( ! function_exists( 'is_plugin_active_for_network' ) )
require_once( ABSPATH . '/wp-admin/includes/plugin.php' );
// Check if WooCommerce is active
if ( ! in_array( 'woocommerce/woocommerce.php', apply_filters( 'active_plugins', get_option( 'active_plugins' ) ) ) ) :
if ( ! is_plugin_active_for_network( 'woocommerce/woocommerce.php' ) ) :
return;
endif;
endif;
$this->init();
}
/**
* Instance.
*
* An global instance of the class. Used to retrieve the instance
* to use on other files/plugins/themes.
*
* @since 1.0.0
*
* @return object Instance of the class.
*/
public static function instance() {
if ( is_null( self::$instance ) ) {
self::$instance = new self();
}
return self::$instance;
}
/**
* Init.
*
* Initialize plugin parts.
*
* @since 1.0.0
*/
public function init() {
$this->hooks();
$this->load_textdomain();
$this->update();
if (!class_exists("RulesShippingFrameworkWooCommerceAdvanced")) {
require_once( plugin_dir_path( __FILE__ ) . 'includes/rules_shipping_framework_woocommerce_advanced.php');
}
$this->helper = RulesShippingFrameworkWooCommerceAdvanced::getHelper();
// Shipping method post type definition:
if (!class_exists("Shipping_Rules_post_type")) {
require_once plugin_dir_path( __FILE__ ) . 'includes/rules-shipping-post-type.php';
}
$this->post_type = new Shipping_Rules_post_type($this->helper);
// Links to docs and config in the plugin page
add_filter( 'plugin_row_meta', array( &$this, 'shippingbyrules_row_meta' ), 30, 2 );
add_filter( 'plugin_action_links_'.plugin_basename(__FILE__), array( &$this, 'shippingbyrules_add_settings_link' ) );
}
public function shippingbyrules_row_meta($links, $file ) {
if ($file==plugin_basename(__FILE__)) {
$links['docs'] = '<a href="' . esc_url( 'http://open-tools.net/documentation/advanced-shipping-by-rules-for-woocommerce.html' ) . '" title="' . esc_attr( $this->helper->__( 'Plugin Documentation' ) ) . '">' . $this->helper->__( 'Plugin Documentation' ) . '</a>';
$links['support'] = '<a href="' . esc_url( 'http://open-tools.net/support-forum/shiping-by-rules-for-woocommerce.html' ) . '" title="' . esc_attr( $this->helper->__( 'Support Forum' ) ) . '">' . $this->helper->__( 'Support Forum' ) . '</a>';
}
return (array)$links;
}
/**
* Add settings link to plugins page
*/
public function shippingbyrules_add_settings_link( $links ) {
$link = '<a href="admin.php?page=wc-settings&tab=shipping§ion=shipping_by_rules">'. $this->helper->__( 'Settings' ) . '</a>';
array_unshift( $links, $link );
return $links;
}
/**
* Update.
*
* Runs when the plugin is updated and checks if there should be
* any data updated to be compatible for the new version.
*
* @since 1.0.0
*/
public function update() {
$db_version = get_option( 'shipping_by_rules_plugin_version', $this->version );
// Stop current version is up to date
if ( $db_version >= $this->version ) :
return;
endif;
// Update functions come here:
// From version 1.x.x to 1.x.y
// From version 1.x.y to 1.x.z
update_option( 'shipping_by_rules_plugin_version', $this->version );
}
/**
* Hooks.
*
* Initialize all class hooks.
*
* @since 1.0.0
*/
public function hooks() {
// Initialize shipping method class
add_action( 'woocommerce_shipping_init', array( $this, 'shipping_by_rules_init' ) );
// Add shipping method
add_action( 'woocommerce_shipping_methods', array( $this, 'shipping_by_rules_add_shipping_method' ) );
// Enqueue scripts
add_action( 'admin_enqueue_scripts', array( $this, 'shipping_by_rules_admin_enqueue_scripts' ) );
}
/**
* Textdomain.
*
* Load the textdomain based on WP language.
*
* @since 1.0.0
*/
public function load_textdomain() {
// Load textdomain
load_plugin_textdomain('opentools-shippingrules', false, basename( dirname( __FILE__ ) ) . '/languages' );
}
/**
* Shipping method.
*
* Include the WooCommerce shipping method class.
*
* @since 1.0.0
*/
public function shipping_by_rules_init() {
if (!class_exists('Shipping_by_Rules')) {
require_once plugin_dir_path( __FILE__ ) . 'includes/rules-shipping-method.php';
}
$this->rule_shipping_method = new Shipping_by_Rules();
$this->rule_shipping_method->setHelper($this->helper);
}
/**
* Add shipping method.
*
* Add shipping method to WooCommerce.
*
* @since 1.0.0
*/
public function shipping_by_rules_add_shipping_method( $methods ) {
if ( class_exists( 'Shipping_by_Rules' ) ) :
$methods['shipping_by_rules'] = 'Shipping_by_Rules';
endif;
// TODO: Figure out a way to add each shipping by rules method as a
// separate WooCommerce shipping method (ie. their order can be
// defined in the WC configuration and not only in the Shipping by
// Rules Method configuration screen.
return $methods;
}
/**
* Enqueue scripts.
*
* Enqueue javascript and stylesheets to the admin area.
*
* @since 1.0.0
*/
public function shipping_by_rules_admin_enqueue_scripts() {
// For some strange reason, WC does not define the select2.css style...
$assets_path = str_replace( array( 'http:', 'https:' ), '', WC()->plugin_url() ) . '/assets/';
wp_enqueue_style( 'select2', $assets_path . 'css/select2.css' );
wp_enqueue_style( 'shipping_by_rules-style', plugins_url( 'assets/css/admin-styles.css', __FILE__ ), array('select2'), $this->version );
wp_enqueue_script( 'shipping-by-rules-config', plugins_url( 'assets/js/shipping-by-rules-config.js', __FILE__ ), array( 'jquery', 'jquery-ui-sortable', 'select2', 'wc-enhanced-select' ), $this->version, true );
}
}
/**
* The main function responsible for returning the WooCommerce_Shipping_By_Rules_Advanced object.
*
* Use this function like you would a global variable, except without needing to declare the global.
*
* Example: <?php OpenTools_ShippingByRules()->method_name(); ?>
*
* @since 1.0.0
*
* @return object WooCommerce_Shipping_By_Rules_Advanced class object.
*/
if ( ! function_exists( 'OpenTools_ShippingByRules_Advanced' ) ) :
function OpenTools_ShippingByRules_Advanced() {
return WooCommerce_Shipping_By_Rules_Advanced::instance();
}
endif;
OpenTools_ShippingByRules_Advanced();