244 lines
7 KiB
PHP
244 lines
7 KiB
PHP
<?php
|
|
/**
|
|
* Plugin Name: AutomateWoo
|
|
* Plugin URI: https://automatewoo.com
|
|
* Description: Powerful marketing automation for your WooCommerce store.
|
|
* Version: 6.2.3
|
|
* Author: WooCommerce
|
|
* Author URI: https://woocommerce.com
|
|
* License: GPLv3
|
|
* License URI: http://www.gnu.org/licenses/gpl-3.0
|
|
* Text Domain: automatewoo
|
|
* Domain Path: /languages
|
|
* Requires at least: 6.8
|
|
* Tested up to: 6.9
|
|
* Requires Plugins: woocommerce
|
|
* WC requires at least: 10.4
|
|
* WC tested up to: 10.5
|
|
* Woo: 4652610:f6f1f8a56a16a3715b30b21fb557e78f
|
|
*
|
|
* This program 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 program 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 this program. If not, see <http://www.gnu.org/licenses/>.
|
|
*
|
|
* @package AutomateWoo
|
|
*/
|
|
|
|
use Automattic\WooCommerce\Utilities\FeaturesUtil;
|
|
|
|
defined( 'ABSPATH' ) || exit;
|
|
|
|
define( 'AUTOMATEWOO_SLUG', 'automatewoo' );
|
|
define( 'AUTOMATEWOO_VERSION', '6.2.3' ); // WRCS: DEFINED_VERSION.
|
|
define( 'AUTOMATEWOO_FILE', __FILE__ );
|
|
define( 'AUTOMATEWOO_PATH', __DIR__ );
|
|
define( 'AUTOMATEWOO_MIN_PHP_VER', '7.4.0' );
|
|
define( 'AUTOMATEWOO_MIN_WP_VER', '6.8' );
|
|
define( 'AUTOMATEWOO_MIN_WC_VER', '10.4' );
|
|
|
|
/**
|
|
* AutomateWoo loader.
|
|
*
|
|
* @since 2.9
|
|
*/
|
|
class AutomateWoo_Loader {
|
|
|
|
/**
|
|
* Contains load errors.
|
|
*
|
|
* @var array
|
|
*/
|
|
public static $errors = array();
|
|
|
|
/**
|
|
* Init loader.
|
|
*/
|
|
public static function init() {
|
|
add_action( 'admin_notices', array( __CLASS__, 'admin_notices' ), 8 );
|
|
|
|
// Ensure core before AutomateWoo add-ons.
|
|
add_action( 'plugins_loaded', array( __CLASS__, 'load' ), 8 );
|
|
|
|
add_action( 'activate_plugin', array( __CLASS__, 'load_by_cli' ), 8 );
|
|
// Load translations even if plugin requirements aren't met
|
|
add_action( 'init', array( __CLASS__, 'load_textdomain' ) );
|
|
|
|
// Subscribe to automated translations.
|
|
add_action( 'woocommerce_translations_updates_for_automatewoo', '__return_true' );
|
|
|
|
// Declare compatibility for WooCommerce features.
|
|
add_action( 'before_woocommerce_init', [ __CLASS__, 'declare_feature_compatibility' ] );
|
|
|
|
/**
|
|
* Trigger "automatewoo_activated" action after activation using option workaround.
|
|
*
|
|
* @see https://developer.wordpress.org/reference/functions/register_activation_hook/#process-flow
|
|
*/
|
|
register_activation_hook( __FILE__, [ __CLASS__, 'activation' ] );
|
|
}
|
|
|
|
/**
|
|
* Loads plugin.
|
|
*/
|
|
public static function load() {
|
|
if ( self::check() ) {
|
|
add_action( 'admin_init', [ __CLASS__, 'do_activation_action' ], 20 );
|
|
|
|
require_once __DIR__ . '/vendor/autoload.php';
|
|
AutomateWoo::instance();
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Loads plugin when using WP CLI.
|
|
*
|
|
* @param string $plugin Plugin file.
|
|
*/
|
|
public static function load_by_cli( $plugin ): void {
|
|
if ( self::check() && ( defined( 'WP_CLI' ) && WP_CLI ) && $plugin === 'automatewoo/automatewoo.php' ) {
|
|
require_once __DIR__ . '/vendor/autoload.php';
|
|
( AutomateWoo::instance() )->init();
|
|
AutomateWoo\Installer::admin_init();
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Loads plugin textdomain.
|
|
*/
|
|
public static function load_textdomain() {
|
|
load_plugin_textdomain( 'automatewoo', false, 'automatewoo/languages' );
|
|
}
|
|
|
|
/**
|
|
* Checks if the plugin should load.
|
|
*
|
|
* @return bool
|
|
*/
|
|
public static function check() {
|
|
$passed = true;
|
|
|
|
if ( version_compare( phpversion(), AUTOMATEWOO_MIN_PHP_VER, '<' ) ) {
|
|
$passed = false;
|
|
self::$errors[] = function () {
|
|
/* translators: Plugin name. */
|
|
$inactive_text = '<strong>' . sprintf( __( '%s is inactive.', 'automatewoo' ), __( 'AutomateWoo', 'automatewoo' ) ) . '</strong>';
|
|
/* translators: %1$s inactive plugin text, %2$s minimum PHP version */
|
|
return sprintf( __( '%1$s The plugin requires PHP version %2$s or newer.', 'automatewoo' ), $inactive_text, AUTOMATEWOO_MIN_PHP_VER );
|
|
};
|
|
}
|
|
|
|
if ( ! self::is_woocommerce_version_ok() ) {
|
|
$passed = false;
|
|
self::$errors[] = function () {
|
|
/* translators: Plugin name. */
|
|
$inactive_text = '<strong>' . sprintf( __( '%s is inactive.', 'automatewoo' ), __( 'AutomateWoo', 'automatewoo' ) ) . '</strong>';
|
|
/* translators: %1$s inactive plugin text, %2$s minimum WooCommerce version */
|
|
return sprintf( __( '%1$s The plugin requires WooCommerce version %2$s or newer.', 'automatewoo' ), $inactive_text, AUTOMATEWOO_MIN_WC_VER );
|
|
};
|
|
}
|
|
|
|
if ( ! self::is_wp_version_ok() ) {
|
|
$passed = false;
|
|
self::$errors[] = function () {
|
|
/* translators: Plugin name. */
|
|
$inactive_text = '<strong>' . sprintf( __( '%s is inactive.', 'automatewoo' ), __( 'AutomateWoo', 'automatewoo' ) ) . '</strong>';
|
|
/* translators: %1$s inactive plugin text, %2$s minimum WordPress version */
|
|
return sprintf( __( '%1$s The plugin requires WordPress version %2$s or newer.', 'automatewoo' ), $inactive_text, AUTOMATEWOO_MIN_WP_VER );
|
|
};
|
|
}
|
|
|
|
return $passed;
|
|
}
|
|
|
|
/**
|
|
* Checks if the installed WooCommerce version is ok.
|
|
*
|
|
* @return bool
|
|
*/
|
|
public static function is_woocommerce_version_ok() {
|
|
if ( ! function_exists( 'WC' ) ) {
|
|
return false;
|
|
}
|
|
if ( ! AUTOMATEWOO_MIN_WC_VER ) {
|
|
return true;
|
|
}
|
|
return version_compare( WC()->version, AUTOMATEWOO_MIN_WC_VER, '>=' );
|
|
}
|
|
|
|
/**
|
|
* Checks if the installed WordPress version is ok.
|
|
*
|
|
* @return bool
|
|
*/
|
|
public static function is_wp_version_ok() {
|
|
global $wp_version;
|
|
if ( ! AUTOMATEWOO_MIN_WP_VER ) {
|
|
return true;
|
|
}
|
|
return version_compare( $wp_version, AUTOMATEWOO_MIN_WP_VER, '>=' );
|
|
}
|
|
|
|
/**
|
|
* Displays any errors as admin notices.
|
|
*/
|
|
public static function admin_notices() {
|
|
if ( empty( self::$errors ) ) {
|
|
return;
|
|
}
|
|
|
|
foreach ( self::$errors as $error ) {
|
|
echo '<div class="notice notice-error"><p>';
|
|
echo wp_kses_post( $error() );
|
|
echo '</p></div>';
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Declare compatibility for WooCommerce features.
|
|
*
|
|
* @since 5.5.23
|
|
*/
|
|
public static function declare_feature_compatibility() {
|
|
if ( class_exists( FeaturesUtil::class ) ) {
|
|
FeaturesUtil::declare_compatibility( 'custom_order_tables', __FILE__ );
|
|
FeaturesUtil::declare_compatibility( 'cart_checkout_blocks', __FILE__ );
|
|
FeaturesUtil::declare_compatibility( 'product_block_editor', __FILE__ );
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Set an option stating that AutomateWoo was activated.
|
|
*
|
|
* @since 5.8.5
|
|
*
|
|
* @return void
|
|
*/
|
|
public static function activation(): void {
|
|
add_option( 'automatewoo_activated', true );
|
|
}
|
|
|
|
/**
|
|
* Trigger "activation" hook if "automatewoo_activated" option exists
|
|
*
|
|
* @since 5.8.5
|
|
*
|
|
* @return void
|
|
*/
|
|
public static function do_activation_action(): void {
|
|
if ( get_option( 'automatewoo_activated' ) ) {
|
|
do_action( 'automatewoo_activated' );
|
|
delete_option( 'automatewoo_activated' );
|
|
}
|
|
}
|
|
}
|
|
|
|
AutomateWoo_Loader::init();
|