declareCompatibilityWithHPOS();
register_activation_hook(A2WL_PLUGIN_FILE, array($this, 'install'));
register_deactivation_hook(A2WL_PLUGIN_FILE, array($this, 'uninstall'));
require_once ABSPATH . 'wp-admin/includes/plugin.php';
$plugin_data = get_plugin_data(A2WL_PLUGIN_FILE, true, false);
$this->version = $plugin_data['Version'];
$this->plugin_name = plugin_basename(A2WL_PLUGIN_FILE);
list ($t1, $t2) = explode('/', $this->plugin_name);
$this->plugin_slug = $t1;
require_once $this->plugin_path() . "/includes/libs/ae-php-sdk/IopSdk.php";
require_once $this->plugin_path() . '/includes/libs/wp-background-processing/wp-background-processing.php';
include_once $this->plugin_path() . '/includes/settings.php';
include_once $this->plugin_path() . '/includes/functions.php';
if (!$this->checkIsWoocommerceInstalled()) {
$this->setWoocommerceInstalledNotice();
return;
};
try {
$this->initDIContainer();
} catch (Throwable $e) {
error_log(
sprintf('%s DI init failed: ' . $e->getMessage(), $this->plugin_name)
);
add_action('admin_notices', function () use ($e) {
$errorMessage = sprintf(
esc_html__('%s plugin initialization error:', 'ali2woo'),
$this->plugin_name
);
echo "
" .
$errorMessage . "
" . esc_html($e->getMessage()) .
"
";
});
return;
}
include_once $this->plugin_path() . '/includes/loader.php';
Loader::classes(
$this->plugin_path() . '/includes/interfaces',
'a2wl_init',
$this->getDI()
);
Loader::classes(
$this->plugin_path() . '/includes/classes',
'a2wl_init',
$this->getDI()
);
Loader::addons($this->plugin_path() . '/addons');
include_once $this->plugin_path() . "/includes/libs/json_api/json_api.php";
Json_Api_Configurator::init('a2wl_dashboard');
add_action('admin_menu', array($this, 'admin_menu'));
add_action('admin_enqueue_scripts', array($this, 'admin_assets'));
add_action('wp_enqueue_scripts', array($this, 'assets'));
add_action('plugins_loaded', [$this, 'registerJobs']);
}
public function registerJobs(): void
{
$this->getDI()->get('register_jobs');
//todo: move jobs to container
new ImportProcess();
new ApplyPricingRulesProcess();
}
/**
* Path to Ali2Woo plugin root url
* @return string
*/
public function plugin_url(): string
{
return untrailingslashit(plugins_url('/', A2WL_PLUGIN_FILE));
}
/**
* Path to Ali2Woo plugin root dir
* @return string
*/
public function plugin_path(): string
{
return untrailingslashit(plugin_dir_path(A2WL_PLUGIN_FILE));
}
public function install(): void
{
if (!$this->checkIsWoocommerceInstalled()) {
$activationError = $this->getWoocommerceNoInstalledErrorText();
wp_die($activationError);
};
a2wl_gen_pk();
do_action('a2wl_install');
add_option(WizardPageController::WIZARD_ACTIVATION_KEY, true);
update_option(Settings::SETTING_PLUGIN_ACTIVATION_DATE, time());
}
public function uninstall(): void
{
do_action('a2wl_uninstall');
}
public function assets($page): void
{
do_action('a2wl_assets', $page);
}
public function admin_assets($page): void
{
do_action('a2wl_admin_assets', $page);
}
public function admin_menu(): void
{
do_action('a2wl_before_admin_menu');
add_menu_page(
esc_html_x('AliNext (Lite version)', 'plugin name', 'ali2woo'),
esc_html_x('AliNext (Lite version)', 'plugin name', 'ali2woo'),
Capability::pluginAccess(),
Pages::DASHBOARD,
'',
plugins_url('assets/img/icon.png', A2WL_PLUGIN_FILE)
);
do_action('a2wl_init_admin_menu', Pages::DASHBOARD);
}
public function getDI(): ?Container
{
return $this->DI;
}
public function woocommerceNoInstalledNotice(): void
{
$activationError = $this->getWoocommerceNoInstalledErrorText();
echo "";
}
public function isAnPlugin(): bool
{
return str_contains($this->plugin_name, 'alinext-lite');
}
public function isFreePlugin(): bool
{
return str_contains($this->plugin_name, '-lite');
}
/**
* @throws Exception
*/
private function initDIContainer(): void
{
require_once $this->plugin_path() . '/vendor/autoload_packages.php';
$containerBuilder = new ContainerBuilder();
$containerBuilder->addDefinitions($this->plugin_path() . '/di-config.php');
$this->DI = $containerBuilder->build();
}
private function declareCompatibilityWithHPOS(): void
{
add_action('before_woocommerce_init', function () {
if (class_exists(\Automattic\WooCommerce\Utilities\FeaturesUtil::class)) {
\Automattic\WooCommerce\Utilities\FeaturesUtil::declare_compatibility(
'custom_order_tables',
__FILE__,
true
);
}
});
}
private function setWoocommerceInstalledNotice(): void
{
add_action('admin_notices', [$this, 'woocommerceNoInstalledNotice']);
}
private function checkIsWoocommerceInstalled(): bool
{
$active_plugins = (array)get_option('active_plugins', array());
if (is_multisite()) {
$active_plugins = array_merge($active_plugins, get_site_option('active_sitewide_plugins', array()));
}
return in_array('woocommerce/woocommerce.php', $active_plugins) ||
array_key_exists('woocommerce/woocommerce.php', $active_plugins);
}
private function getWoocommerceNoInstalledErrorText(): string
{
$activationError = _x('Please install Woocommerce', 'Activation error', 'ali2woo');
return sprintf(
/* translators: %s is replaced with "string" */
esc_html__("Plugin NOT activated: %s", 'ali2woo'),
$activationError
);
}
}
}
/**
* Returns the main instance of A2WL_Main to prevent the need to use globals.
*
* @return A2WL_Main
*/
if (!function_exists('A2WL')) {
function A2WL(): A2WL_Main
{
return A2WL_Main::instance();
}
}
$alinext_lite = A2WL();
/**
* Ali2Woo global init action
*/
do_action('a2wl_init');
if (is_admin()) {
add_action(
'init',
function () {
do_action('a2wl_admin_init');
}
);
} else {
do_action('a2wl_frontend_init');
}