File: /var/www/html/ielts-store/wp-content/plugins/woocommerce-zapier/src/Plugin.php
<?php
namespace OM4\WooCommerceZapier;
use OM4\WooCommerceZapier\AdminUI;
use OM4\WooCommerceZapier\API\API;
use OM4\WooCommerceZapier\Auth\AuthKeyRotator;
use OM4\WooCommerceZapier\Auth\SessionAuthenticate;
use OM4\WooCommerceZapier\ContainerService;
use OM4\WooCommerceZapier\Helper\FeatureChecker;
use OM4\WooCommerceZapier\Installer;
use OM4\WooCommerceZapier\LegacyMigration\ExistingUserUpgrade;
use OM4\WooCommerceZapier\NewUser\NewUser;
use OM4\WooCommerceZapier\Plugin\Bookings\Plugin as BookingsPlugin;
use OM4\WooCommerceZapier\Plugin\Subscriptions\Plugin as SubscriptionsPlugin;
use OM4\WooCommerceZapier\TaskHistory\Installer as TaskHistoryInstaller;
use OM4\WooCommerceZapier\TaskHistory\Listener\TriggerListener;
use OM4\WooCommerceZapier\Uninstall;
use OM4\WooCommerceZapier\Webhook\DeliveryFilter as WebhookDeliveryFilter;
use OM4\WooCommerceZapier\Webhook\Installer as WebhookInstaller;
use OM4\WooCommerceZapier\Webhook\Resources as WebhookResources;
use OM4\WooCommerceZapier\WooCommerceResource\Manager as ResourceManager;
use OM4\Zapier\Plugin as LegacyPlugin;
defined( 'ABSPATH' ) || exit;
/**
* Main WooCommerce Zapier 2.0 Plugin class.
* Bootstraps the plugin, with things starting during the `plugins_loaded` hook,
* after all WordPress plugins have loaded and WooCommerce has initialised.
*
* @since 2.0.0
*/
class Plugin {
/** The minimum WooCommerce version that this plugin supports. */
const MINIMUM_SUPPORTED_WOOCOMMERCE_VERSION = '3.7.0';
/** URL to the documentation for this plugin. */
const DOCUMENTATION_URL = 'https://docs.om4.io/woocommerce-zapier/';
/**
* ContainerService instance.
*
* @var ContainerService
*/
protected $container;
/**
* Plugin constructor.
*
* @param ContainerService $container The Container.
*/
public function __construct( ContainerService $container ) {
$this->container = $container;
}
/**
* Executed during the 'plugins_loaded' WordPress hook.
* - Checks that we're running the correct WooCommerce Version
* - Sets up various hooks
* - Load Supported Zapier Triggers
* - Loads the admin/dashboard interface if required
*
* @return void
*/
public function plugins_loaded() {
load_plugin_textdomain( 'woocommerce-zapier', false, dirname( plugin_basename( WC_ZAPIER_PLUGIN_FILE ) ) . '/languages' );
if ( ! $this->container->get( FeatureChecker::class )->class_exists( 'WooCommerce' ) ) {
// WooCommerce plugin not installed.
add_action( 'admin_notices', array( $this, 'admin_notice_missing_woocommerce' ) );
return;
}
if ( version_compare( WC_VERSION, self::MINIMUM_SUPPORTED_WOOCOMMERCE_VERSION, '<' ) ) {
// WooCommerce plugin is older than our minimum required version.
add_action( 'admin_notices', array( $this, 'admin_notice_unsupported_woocommerce_version' ) );
return;
}
// Our minimum requirements are all met, let's get started!
add_action( 'before_woocommerce_init', array( $this, 'before_woocommerce_init' ) );
add_action( 'woocommerce_init', array( $this, 'woocommerce_init' ) );
add_action( 'init', array( $this, 'initialise' ), 9 );
$this->legacy_mode_check();
add_filter( 'plugin_action_links_' . plugin_basename( WC_ZAPIER_PLUGIN_FILE ), array( $this, 'action_links' ) );
register_uninstall_hook( WC_ZAPIER_PLUGIN_FILE, array( Uninstall::class, 'run' ) );
}
/**
* Enable Legacy Zapier Feed Mode if required.
*
* @return void
*/
protected function legacy_mode_check() {
$this->container->get( ExistingUserUpgrade::class )->initialise();
if ( true === $this->container->get( Settings::class )->is_legacy_mode_enabled() ) {
// Legacy Mode is enabled, so start up the Legacy Zapier Feeds functionality.
LegacyPlugin::instance()->plugins_loaded();
}
}
/**
* Initialise our functionality that needs to be initialised before WooCommerce loads and enqueues
* its active webhooks.
* Executed during the `before_woocommerce_init` hook to ensure it loads *before* WooCommerce
* loads all active webhooks (which occurs during `init` ie before `woocommerce_init`).
*
* @return void
*/
public function before_woocommerce_init() {
$this->third_party_plugin_compatibility();
$this->container->get( ResourceManager::class )->initialise();
$this->container->get( WebhookDeliveryFilter::class )->initialise();
$this->container->get( TriggerListener::class )->initialise();
$this->container->get( WebhookResources::class )->initialise();
}
/**
* Initialise compatibility functionality for third party plugins (such as WooCommerce Subscriptions).
* Executed early during `before_woocommerce_init`.
*
* @return void
*/
protected function third_party_plugin_compatibility() {
$this->container->get( BookingsPlugin::class )->initialise();
$this->container->get( SubscriptionsPlugin::class )->initialise();
}
/**
* Initialise the plugin's functionality.
* Executed during the `woocommerce_init` hook.
*
* @return void
*/
public function woocommerce_init() {
$this->container->get( API::class )->initialise();
}
/**
* Functionality that needs to be instantiated during `init`.
* Includes SessionAuthenticate (rewrite rule additions) because they need
* to be included before rewrite rules are flushed by WordPress on the
* Settings, Permalinks screen.
* Executed during the `init` hook.
*
* @return void
*/
public function initialise() {
$this->container->get( SessionAuthenticate::class )->initialise();
$this->container->get( AuthKeyRotator::class )->initialise();
$this->container->get( NewUser::class )->initialise();
$this->container->get( Installer::class )->initialise();
$this->container->get( TaskHistoryInstaller::class )->initialise();
$this->container->get( WebhookInstaller::class )->initialise();
if ( is_admin() ) {
$this->admin();
}
}
/**
* Override the WooCommerce Zapier plugin's action links.
* Displayed beside the activate/deactivate links on WordPress' Plugins screen.
*
* @param array $links Array of plugin action links.
*
* @return array
*/
public function action_links( $links ) {
$plugin_links = array(
'<a href="' . $this->container->get( Settings::class )->get_settings_page_url() . '">' . __( 'Settings', 'woocommerce-zapier' ) . '</a>',
'<a href="' . $this->container->get( AdminUI::class )->get_url() . '">' . __( 'Task History', 'woocommerce-zapier' ) . '</a>',
'<a href="' . self::DOCUMENTATION_URL . '">' . __( 'Docs', 'woocommerce-zapier' ) . '</a>',
'<a href="' . self::DOCUMENTATION_URL . 'support/">' . __( 'Support', 'woocommerce-zapier' ) . '</a>',
);
return array_merge( $plugin_links, $links );
}
/**
* Administration/Dashboard functionality,
* executed if the user is in the Admin/Dashboard.
*
* @return void
*/
public function admin() {
$this->container->get( AdminUI::class )->initialise();
$this->container->get( Privacy::class );
}
/**
* Displays a message if WooCommerce not active.
*
* @return void
*/
public function admin_notice_missing_woocommerce() {
$class = 'notice notice-error';
$message = __( 'WooCommerce Zapier requires WooCommerce. Please install and activate WooCommerce and try again.', 'woocommerce-zapier' );
printf( '<div class="%1$s"><p>%2$s</p></div>', esc_attr( $class ), esc_html( $message ) );
}
/**
* Displays a message if the user isn't using a supported version of WooCommerce.
*
* @return void
*/
public function admin_notice_unsupported_woocommerce_version() {
?>
<div id="message" class="error">
<p>
<?php
echo esc_html(
sprintf(
// Translators: %s: WooCommerce Version.
__( 'WooCommerce Zapier requires WooCommerce version %s or later. Please update WooCommerce.', 'woocommerce-zapier' ),
self::MINIMUM_SUPPORTED_WOOCOMMERCE_VERSION
)
);
?>
</p>
</div>
<?php
}
}