.
*/
if (!defined('ABSPATH')) {
exit('Not allowed to access pages directly.');
}
/**
* @since 0.8
* @var string
*/
define('AFFILICIOUS_BASE_NAME', plugin_basename(__FILE__));
/**
* @since 0.8
* @var string
*/
define('AFFILICIOUS_ROOT_PATH', plugin_dir_path(__FILE__));
/**
* @since 0.8
* @var string
*/
define('AFFILICIOUS_ROOT_URL', plugin_dir_url(__FILE__));
/**
* @since 0.8
* @var string
*/
define('AFFILICIOUS_VERSION', '0.10.2');
/**
* @since 0.8
* @var string
*/
define('AFFILICIOUS_MIN_PHP_VERSION', '5.6');
/**
* @since 0.8
* @var string
*/
define('AFFILICIOUS_MIN_WORDPRESS_VERSION', '4.5');
if(!class_exists('Affilicious')) {
/**
* @since 0.3
*/
class Affilicious
{
/**
* @since 0.8
* @var string
*/
const NAME = 'affilicious';
/**
* @since 0.8
* @var string
*/
const VERSION = AFFILICIOUS_VERSION;
/**
* @since 0.8
* @var string
*/
const MIN_PHP_VERSION = AFFILICIOUS_MIN_PHP_VERSION;
/**
* @since 0.8
* @var string
*/
const MIN_WORDPRESS_VERSION = AFFILICIOUS_MIN_WORDPRESS_VERSION;
/**
* Stores the singleton instance
*
* @since 0.3
* @var Affilicious
*/
private static $instance;
/**
* Register all services and parameters for the pimple dependency injection
*
* @see http://pimple.sensiolabs.org
* @var \Pimple\Container
*/
private $container;
/**
* Get the instance of the affilicious plugin
*
* @since 0.3
* @return Affilicious
*/
public static function get_instance()
{
if (self::$instance === null) {
self::$instance = new self();
}
return self::$instance;
}
/**
* Convenient way to get the service from the dependency injection container.
*
* @since 0.8
* @param string $service_id
* @return mixed|null
*/
public static function get($service_id)
{
$container = self::get_instance()->get_container();
try {
$service = $container[$service_id];
} catch (Pimple\Exception\UnknownIdentifierException $e) {
return null;
}
return $service;
}
/**
* Get the base name of the plugin.
*
* @since 0.9.23
* @return string
*/
public static function get_base_name()
{
return AFFILICIOUS_BASE_NAME;
}
/**
* Get the root url to the plugin.
*
* @since 0.7
* @return string
*/
public static function get_root_url()
{
return AFFILICIOUS_ROOT_URL;
}
/**
* Get the root path to the plugin.
*
* @since 0.7
* @return string
*/
public static function get_root_path()
{
return AFFILICIOUS_ROOT_PATH;
}
/**
* Prepare the plugin with for usage with Wordpress and namespaces.
*
* @since 0.3
*/
private function __construct()
{
// Check the PHP version and extensions requirement.
if (!$this->check_requirements()) {
return;
}
if (file_exists(__DIR__ . '/vendor/autoload.php')) {
require(__DIR__ . '/vendor/autoload.php');
}
spl_autoload_register(array($this, 'autoload'));
$this->container = new Pimple\Container();
}
/**
* Get a reference to the dependency injection container.
*
* @see http://pimple.sensiolabs.org
* @since 0.3
* @return Pimple\Container
*/
public function get_container()
{
return $this->container;
}
/**
* Run the loader to execute all of the hooks with WordPress.
*
* @since 0.3
*/
public function run()
{
// Hook the plugin activation and deactivation.
register_activation_hook(__FILE__, array($this, 'activate'));
register_deactivation_hook(__FILE__, array($this, 'deactivate'));
// Check the PHP version and extensions requirement.
if (!$this->check_requirements()) {
return;
}
// Load the functions, includes, services, hooks and etc.
$this->load_functions();
$this->load_services();
$this->load_legacy();
$this->migrate();
$this->register_public_hooks();
$this->register_admin_hooks();
}
/**
* Make namespaces compatible with the source code of this plugin.
*
* @since 0.3
* @param string $class
*/
public function autoload($class)
{
$prefix = 'Affilicious\\';
$test_prefix = 'Affilicious_Tests\\';
if (stripos($class, $prefix) === false && stripos($class, $test_prefix) === false) {
return;
}
$file_path = str_ireplace($prefix, '', $class);
$file_path = str_ireplace($test_prefix, '', $file_path);
$file_path .= '.php';
$file_path = strtolower($file_path);
$file_path = str_replace('_', '-', $file_path);
if (stripos($class, $test_prefix) !== false) {
$file_path = __DIR__ . '/tests/' . $file_path;
} else {
$file_path = __DIR__ . '/src/' . $file_path;
}
$file_path = str_replace('\\', DIRECTORY_SEPARATOR, $file_path);
/** @noinspection PhpIncludeInspection */
include_once($file_path);
}
/**
* Check the plugin requirements.
*
* @since 0.9.12
* @return bool
*/
public function check_requirements()
{
return version_compare(phpversion(), self::MIN_PHP_VERSION, '>=') && extension_loaded('mbstring');
}
/**
* The code that runs during plugin activation.
*
* @since 0.3
* @param bool $network_wide Optional. Whether this plugin is activated network wide or not. Default: false.
*/
public function activate($network_wide = false)
{
global $wp_version;
$this->load_textdomain();
// Check the PHP version requirement
if (!version_compare(phpversion(), self::MIN_PHP_VERSION, '>=')) {
$error = sprintf(
__('Affilicious requires at least the PHP Version %s to reveal the full potential. Please switch the PHP version in your hosting provider.', 'affilicious'),
self::MIN_PHP_VERSION
);
}
// Check the Wordpress version requirement.
elseif(!version_compare($wp_version, self::MIN_WORDPRESS_VERSION, '>=')) {
$error = sprintf(
__('Affilicious requires at least the Wordpress Version %s. Please update Wordpress in the updates area.', 'affilicious'),
self::MIN_WORDPRESS_VERSION,
admin_url('update-core.php')
);
}
// Check the mbstring extension requirement.
elseif(!extension_loaded('mbstring')) {
$error = sprintf(
__('The Affilicious Plugin requires the PHP extension %s. Please install the PHP extension in your hosting provider.', 'affilicious'),
'mbstring'
);
}
// Trigger the error message.
if(isset($error)) {
deactivate_plugins(self::get_base_name());
wp_die($error . '
' . sprintf(
__('Go back to the plugins area', 'affilicious'),
admin_url('plugins.php')
));
}
// Activate the product slug rewrites.
$product_slug_rewrite_setup = $this->container['affilicious.product.setup.slug_rewrite'];
$product_slug_rewrite_setup->activate($network_wide);
// Activate the automatic license checks.
$license_timer = $this->container['affilicious.common.admin.license.timer'];
$license_timer->activate($network_wide);
// Activate the product updates.
$product_update_timer = $this->container['affilicious.product.update.timer'];
$product_update_timer->activate($network_wide);
// Activate the logs cleaner.
$logs_cleaner_timer = $this->container['affilicious.common.cleaner.logs_timer'];
$logs_cleaner_timer->activate($network_wide);
// Activate the orphaned product variants cleaner.
$orphaned_product_variants_cleaner_timer = $this->container['affilicious.product.cleaner.orphaned_product_variants_timer'];
$orphaned_product_variants_cleaner_timer->activate($network_wide);
// Install the update semaphore.
$product_update_semaphore = $this->container['affilicious.product.update.semaphore'];
$product_update_semaphore->install($network_wide);
// Install the logs table
$logs_table_setup = $this->container['affilicious.common.setup.logs_table'];
$logs_table_setup->init($network_wide);
// Reset the download recommendation
$download_recommendation_setup = $this->container['affilicious.common.admin.setup.download_recommendation'];
$download_recommendation_setup->init($network_wide);
}
/**
* The code that runs during plugin deactivation.
*
* @since 0.3
* @param bool $network_wide Optional. Whether this plugin is deactivated network wide or not. Default: false.
*/
public function deactivate($network_wide = false)
{
// Deactivate the product slug rewrites.
$product_slug_rewrite_setup = $this->container['affilicious.product.setup.slug_rewrite'];
$product_slug_rewrite_setup->deactivate($network_wide);
// Deactivate the automatic license checks.
$license_timer = $this->container['affilicious.common.admin.license.timer'];
$license_timer->deactivate($network_wide);
// Deactivate the product updates.
$product_update_timer = $this->container['affilicious.product.update.timer'];
$product_update_timer->deactivate($network_wide);
// Deactivate the logs cleaner.
$logs_cleaner_timer = $this->container['affilicious.common.cleaner.logs_timer'];
$logs_cleaner_timer->deactivate($network_wide);
// Deactivate the orphaned product variants cleaner.
$orphaned_product_variants_cleaner_timer = $this->container['affilicious.product.cleaner.orphaned_product_variants_timer'];
$orphaned_product_variants_cleaner_timer->deactivate($network_wide);
// Uninstall the update semaphore.
$product_update_semaphore = $this->container['affilicious.product.update.semaphore'];
$product_update_semaphore->uninstall($network_wide);
}
/**
* Migrate the old code to the new version.
*
* @since 0.8
*/
public function migrate()
{
add_action('admin_init', function() {
$migrated = get_option('_affilicious_migrated_to_beta');
if($migrated !== 'yes') {
$product_post_type_migration = $this->container['affilicious.product.migration.post_type'];
$product_post_type_migration->migrate();
$shop_post_type_migration = $this->container['affilicious.shop.migration.post_type'];
$shop_post_type_migration->migrate();
$currency_code_migration = $this->container['affilicious.shop.migration.currency_code'];
$currency_code_migration->migrate();
$shop_post_to_term_migration = $this->container['affilicious.shop.migration.post_to_term'];
$shop_post_to_term_migration->migrate();
$detail_post_to_term_migration = $this->container['affilicious.detail.migration.post_to_term'];
$detail_post_to_term_migration->migrate();
$attribute_post_to_term_migration = $this->container['affilicious.attribute.migration.post_to_term'];
$attribute_post_to_term_migration->migrate();
$product_details_migration = $this->container['affilicious.product.migration.details'];
$product_details_migration->migrate();
$product_shops_migration = $this->container['affilicious.product.migration.shops'];
$product_shops_migration->migrate();
$product_variants_migration = $this->container['affilicious.product.migration.variants'];
$product_variants_migration->migrate();
add_option('_affilicious_migrated_to_beta', 'yes');
}
$cleaned_variants = get_option('_affilicious_migrated_to_beta_with_cleaned_variants');
if($cleaned_variants !== 'yes') {
$clean_variants_migration = $this->container['affilicious.product.migration.clean_variants'];
$clean_variants_migration->migrate();
add_option('_affilicious_migrated_to_beta_with_cleaned_variants', 'yes');
}
$inherit_status = get_option('_affilicious_migrated_to_beta_with_variant_status_inherit');
if($inherit_status !== 'yes') {
$variant_inherit_status_migration = $this->container['affilicious.product.migration.variant_inherit_status'];
$variant_inherit_status_migration->migrate();
add_option('_affilicious_migrated_to_beta_with_variant_status_inherit', 'yes');
}
$product_slug_migration = $this->container['affilicious.product.migration.product_slug'];
$product_slug_migration->migrate();
$affiliate_product_id_to_090_migration = $this->container['affilicious.product.migration.affiliate_product_id_to_090'];
$affiliate_product_id_to_090_migration->migrate();
$tags_to_090_migration = $this->container['affilicious.product.migration.tags_to_090'];
$tags_to_090_migration->migrate();
$product_variant_terms_to_0820_migration = $this->container['affilicious.product.migration.product_variant_terms_to_0820'];
$product_variant_terms_to_0820_migration->migrate();
$product_slugs_to_0818_migration = $this->container['affilicious.product.migration.product_slugs_to_0818'];
$product_slugs_to_0818_migration->migrate();
$product_updates_to_0920_migration = $this->container['affilicious.product.migration.product_updates_to_0920'];
$product_updates_to_0920_migration->migrate();
$non_existing_logs_table_to_0920_migration = $this->container['affilicious.common.migration.non_existing_logs_table_to_0920'];
$non_existing_logs_table_to_0920_migration->migrate();
$logs_cleaner_timer_to_0922_migration = $this->container['affilicious.common.migration.logs_cleaner_timer_to_0922'];
$logs_cleaner_timer_to_0922_migration->migrate();
$orphaned_product_variants_timer_migration = $this->container['affilicious.product.migration.orphaned_product_variants_timer_to_0922'];
$orphaned_product_variants_timer_migration->migrate();
}, 9999);
}
/**
* Register the plugin textdomain for internationalization.
*
* @hook plugins_loaded
* @since 0.5.1
*/
public function load_textdomain()
{
$dir = basename(dirname(__FILE__)) . '/languages/';
load_plugin_textdomain(self::NAME, false, $dir);
}
/**
* Load some legacy code which will be removed in the future.
*
* @since 0.10
*/
public function load_legacy()
{
new Affilicious\Product\Meta_Box\Meta_Box_Manager();
}
/**
* Load the simple functions for an easier usage in templates.
*
* @since 0.5.1
*/
public function load_functions()
{
require_once(__DIR__ . '/functions.php');
}
/**
* Register the services for the dependency injection.
*
* @since 0.3
*/
public function load_services()
{
// Common services
$this->container['affilicious.common.logger'] = function () {
return new Affilicious\Common\Logger\Logger();
};
$this->container['affilicious.common.cleaner.logs'] = function ($c) {
return new Affilicious\Common\Cleaner\Logs_Cleaner(
$c['affilicious.common.logger']
);
};
$this->container['affilicious.common.cleaner.logs_timer'] = function ($c) {
return new Affilicious\Common\Cleaner\Logs_Cleaner_Timer(
$c['affilicious.common.cleaner.logs']
);
};
$this->container['affilicious.common.generator.slug'] = function () {
return new Affilicious\Common\Generator\Wordpress\Wordpress_Slug_Generator();
};
$this->container['affilicious.common.generator.key'] = function () {
return new Affilicious\Common\Generator\Carbon\Carbon_Key_Generator();
};
$this->container['affilicious.common.template.locator'] = function () {
return new Affilicious\Common\Template\Template_Locator();
};
$this->container['affilicious.common.template.renderer'] = function ($c) {
return new Affilicious\Common\Template\Template_Renderer(
$c['affilicious.common.template.locator']
);
};
$this->container['affilicious.common.filter.link_target'] = function () {
return new Affilicious\Common\Filter\Link_Target_Filter();
};
$this->container['affilicious.common.filter.taxonomy_templates'] = function () {
return new Affilicious\Common\Filter\Taxonomy_Templates_Filter();
};
$this->container['affilicious.common.setup.assets'] = function() {
return new Affilicious\Common\Setup\Assets_Setup();
};
$this->container['affilicious.common.setup.image_size'] = function() {
return new Affilicious\Common\Setup\Image_Size_Setup();
};
$this->container['affilicious.common.setup.logger_handler'] = function($c) {
return new Affilicious\Common\Setup\Logger_Handler_Setup(
$c['affilicious.common.logger']
);
};
$this->container['affilicious.common.setup.logs_table'] = function($c) {
return new Affilicious\Common\Setup\Logs_Table_Setup(
$c['affilicious.common.table_creator.logs']
);
};
$this->container['affilicious.common.table_creator.logs'] = function() {
return new Affilicious\Common\Table_Creator\Logs_Table_Creator();
};
$this->container['affilicious.common.listener.create_blog'] = function($c) {
return new Affilicious\Common\Listener\Create_Blog_Listener(
$c['affilicious.common.table_creator.logs'],
$c['affilicious.common.admin.license.timer']
);
};
$this->container['affilicious.common.listener.drop_tables'] = function() {
return new Affilicious\Common\Listener\Drop_Tables_Listener();
};
$this->container['affilicious.common.migration.non_existing_logs_table_to_0920'] = function ($c) {
return new Affilicious\Common\Migration\Non_Existing_Logs_Table_To_0920_Migration(
$c['affilicious.common.table_creator.logs']
);
};
$this->container['affilicious.common.migration.logs_cleaner_timer_to_0922'] = function ($c) {
return new Affilicious\Common\Migration\Logs_Cleaner_Timer_to_0922_Migration(
$c['affilicious.common.cleaner.logs_timer']
);
};
$this->container['affilicious.common.admin.setup.plugin_actions'] = function() {
return new Affilicious\Common\Admin\Setup\Plugin_Actions_Setup();
};
$this->container['affilicious.common.admin.filter.footer_text'] = function () {
return new Affilicious\Common\Admin\Filter\Footer_Text_Filter();
};
$this->container['affilicious.common.admin.setup.carbon'] = function () {
return new Affilicious\Common\Admin\Setup\Carbon_Setup();
};
$this->container['affilicious.common.admin.page.addons'] = function () {
return new Affilicious\Common\Admin\Page\Addons_Page();
};
$this->container['affilicious.common.admin.license.processor'] = function ($c) {
return new Affilicious\Common\Admin\License\License_Processor(
$c['affilicious.common.admin.license.manager']
);
};
$this->container['affilicious.common.admin.license.manager'] = function () {
return new Affilicious\Common\Admin\License\License_Manager();
};
$this->container['affilicious.common.admin.license.timer'] = function ($c) {
return new Affilicious\Common\Admin\License\License_Timer(
$c['affilicious.common.admin.license.manager']
);
};
$this->container['affilicious.common.admin.system.info'] = function () {
return new Affilicious\Common\Admin\System\System_Info();
};
$this->container['affilicious.common.admin.logs.logs'] = function () {
return new Affilicious\Common\Admin\Logs\logs();
};
$this->container['affilicious.common.admin.ajax_handler.dismissed_notice'] = function () {
return new Affilicious\Common\Admin\Ajax_Handler\Dismissed_Notice_Ajax_Handler();
};
$this->container['affilicious.common.admin.setup.license_handler'] = function ($c) {
return new Affilicious\Common\Admin\Setup\License_Handler_Setup(
$c['affilicious.common.admin.license.manager']
);
};
$this->container['affilicious.common.admin.options.affilicious'] = function ($c) {
return new Affilicious\Common\Admin\Options\Affilicious_Options(
$c['affilicious.common.admin.license.manager'],
$c['affilicious.common.admin.license.processor'],
$c['affilicious.common.admin.system.info'],
$c['affilicious.common.admin.logs.logs'],
$c['affilicious.common.template.renderer']
);
};
$this->container['affilicious.common.admin.action.download_system_info'] = function ($c) {
return new Affilicious\Common\Admin\Action\Download_System_Info_Action(
$c['affilicious.common.admin.system.info']
);
};
$this->container['affilicious.common.admin.action.download_logs'] = function ($c) {
return new Affilicious\Common\Admin\Action\Download_Logs_Action(
$c['affilicious.common.admin.logs.logs']
);
};
$this->container['affilicious.common.admin.setup.assets'] = function() {
return new Affilicious\Common\Admin\Setup\Assets_Setup();
};
$this->container['affilicious.common.admin.setup.download_recommendation'] = function() {
return new Affilicious\Common\Admin\Setup\Download_Recommendation_Setup();
};
$this->container['affilicious.common.admin.notice.download_recommendation'] = function() {
return new Affilicious\Common\Admin\Notice\Download_Recommendation_Notice();
};
// Provider services
$this->container['affilicious.provider.setup.provider'] = function ($c) {
return new Affilicious\Provider\Setup\Provider_Setup(
$c['affilicious.provider.repository.provider']
);
};
$this->container['affilicious.provider.repository.provider'] = function ($c) {
return new Affilicious\Provider\Repository\Carbon\Carbon_Provider_Repository(
$c['affilicious.common.generator.key']
);
};
$this->container['affilicious.provider.admin.notice.amazon_not_included_anymore'] = function () {
return new Affilicious\Provider\Admin\Notice\Amazon_Not_Included_Anymore_Notice();
};
// Shop services
$this->container['affilicious.shop.setup.shop_template'] = function () {
return new Affilicious\Shop\Setup\Shop_Template_Setup();
};
$this->container['affilicious.shop.repository.shop_template'] = function () {
return new Affilicious\Shop\Repository\Carbon\Carbon_Shop_Template_Repository();
};
$this->container['affilicious.shop.factory.shop_template'] = function ($c) {
return new Affilicious\Shop\Factory\In_Memory\In_Memory_Shop_Template_Factory(
$c['affilicious.common.generator.slug']
);
};
$this->container['affilicious.shop.migration.post_to_term'] = function ($c) {
return new Affilicious\Shop\Migration\Post_To_Term_Migration(
$c['affilicious.shop.factory.shop_template'],
$c['affilicious.shop.repository.shop_template']
);
};
$this->container['affilicious.shop.migration.post_type'] = function () {
return new Affilicious\Shop\Migration\Post_Type_Migration();
};
$this->container['affilicious.shop.migration.currency_code'] = function () {
return new Affilicious\Shop\Migration\Currency_Code_Migration();
};
$this->container['affilicious.shop.admin.meta_box.shop_template'] = function($c) {
return new Affilicious\Shop\Admin\Meta_Box\Shop_Template_Meta_Box(
$c['affilicious.provider.repository.provider']
);
};
$this->container['affilicious.shop.admin.filter.table_columns'] = function() {
return new Affilicious\Shop\Admin\Filter\Table_Columns_Filter();
};
$this->container['affilicious.shop.admin.filter.table_rows'] = function($c) {
return new Affilicious\Shop\Admin\Filter\Table_Rows_Filter(
$c['affilicious.provider.repository.provider']
);
};
// Detail services
$this->container['affilicious.detail.setup.detail_template'] = function () {
return new Affilicious\Detail\Setup\Detail_Template_Setup();
};
$this->container['affilicious.detail.factory.detail_template'] = function ($c) {
return new Affilicious\Detail\Factory\In_Memory\In_Memory_Detail_Template_Factory(
$c['affilicious.common.generator.slug']
);
};
$this->container['affilicious.detail.repository.detail_template'] = function () {
return new Affilicious\Detail\Repository\Carbon\Carbon_Detail_Template_Repository();
};
$this->container['affilicious.detail.migration.post_to_term'] = function ($c) {
return new Affilicious\Detail\Migration\Post_To_Term_Migration(
$c['affilicious.detail.factory.detail_template'],
$c['affilicious.detail.repository.detail_template']
);
};
$this->container['affilicious.detail.admin.meta_box.detail_template'] = function() {
return new Affilicious\Detail\Admin\Meta_Box\Detail_Template_Meta_Box();
};
$this->container['affilicious.detail.admin.filter.table_columns'] = function() {
return new Affilicious\Detail\Admin\Filter\Table_Columns_Filter();
};
$this->container['affilicious.detail.admin.filter.table_rows'] = function() {
return new Affilicious\Detail\Admin\Filter\Table_Rows_Filter();
};
// Attribute services
$this->container['affilicious.attribute.setup.attribute_template'] = function () {
return new Affilicious\Attribute\Setup\Attribute_Template_Setup();
};
$this->container['affilicious.attribute.repository.attribute_template'] = function () {
return new Affilicious\Attribute\Repository\Carbon\Carbon_Attribute_Template_Repository();
};
$this->container['affilicious.attribute.factory.attribute_template'] = function ($c) {
return new Affilicious\Attribute\Factory\In_Memory\In_Memory_Attribute_Template_Factory(
$c['affilicious.common.generator.slug']
);
};
$this->container['affilicious.attribute.migration.post_to_term'] = function ($c) {
return new Affilicious\Attribute\Migration\Post_To_Term_Migration(
$c['affilicious.attribute.factory.attribute_template'],
$c['affilicious.attribute.repository.attribute_template']
);
};
$this->container['affilicious.attribute.admin.meta_box.attribute_template'] = function() {
return new Affilicious\Attribute\Admin\Meta_Box\Attribute_Template_Meta_Box();
};
$this->container['affilicious.attribute.admin.filter.table_columns'] = function() {
return new Affilicious\Attribute\Admin\Filter\Table_Columns_Filter();
};
$this->container['affilicious.attribute.admin.filter.table_rows'] = function() {
return new Affilicious\Attribute\Admin\Filter\Table_Rows_Filter();
};
// Product services
$this->container['affilicious.product.setup.product'] = function () {
return new Affilicious\Product\Setup\Product_Setup();
};
$this->container['affilicious.product.repository.product'] = function ($c) {
return new Affilicious\Product\Repository\Carbon\Carbon_Product_Repository(
$c['affilicious.common.generator.slug'],
$c['affilicious.common.generator.key'],
$c['affilicious.shop.repository.shop_template'],
$c['affilicious.attribute.repository.attribute_template'],
$c['affilicious.detail.repository.detail_template']
);
};
$this->container['affilicious.product.factory.simple_product'] = function ($c) {
return new Affilicious\Product\Factory\In_Memory\In_Memory_Simple_Product_Factory(
$c['affilicious.common.generator.slug']
);
};
$this->container['affilicious.product.factory.complex_product'] = function ($c) {
return new Affilicious\Product\Factory\In_Memory\In_Memory_Complex_Product_Factory(
$c['affilicious.common.generator.slug']
);
};
$this->container['affilicious.product.factory.product_variant'] = function ($c) {
return new Affilicious\Product\Factory\In_Memory\In_Memory_Product_Variant_Factory(
$c['affilicious.common.generator.slug']
);
};
$this->container['affilicious.product.filter.universal_box'] = function () {
return new Affilicious\Product\Filter\Universal_Box_Filter();
};
$this->container['affilicious.product.filter.product_shops_meta_like_query'] = function () {
return new Affilicious\Product\Filter\Product_Shops_Meta_Like_Query_Filter();
};
$this->container['affilicious.product.listener.changed_product_status'] = function () {
return new Affilicious\Product\Listener\Changed_Product_Status_Listener();
};
$this->container['affilicious.product.listener.saved_complex_product'] = function ($c) {
return new Affilicious\Product\Listener\Saved_Complex_Product_Listener(
$c['affilicious.product.repository.product']
);
};
$this->container['affilicious.product.listener.create_blog'] = function($c) {
return new Affilicious\Product\Listener\Create_Blog_Listener(
$c['affilicious.product.update.semaphore'],
$c['affilicious.product.update.timer']
);
};
$this->container['affilicious.product.listener.deleted_complex_product'] = function ($c) {
return new Affilicious\Product\Listener\Deleted_Complex_Product_Listener(
$c['affilicious.product.repository.product']
);
};
$this->container['affilicious.product.cleaner.orphaned_product_variants'] = function ($c) {
return new Affilicious\Product\Cleaner\Orphaned_Product_Variants_Cleaner(
$c['affilicious.common.logger']
);
};
$this->container['affilicious.product.cleaner.orphaned_product_variants_timer'] = function ($c) {
return new Affilicious\Product\Cleaner\Orphaned_Product_Variants_Cleaner_Timer(
$c['affilicious.product.cleaner.orphaned_product_variants']
);
};
$this->container['affilicious.product.setup.custom_taxonomies'] = function () {
return new Affilicious\Product\Setup\Custom_Taxonomies_Setup();
};
$this->container['affilicious.product.setup.canonical'] = function () {
return new Affilicious\Product\Setup\Canonical_Setup();
};
$this->container['affilicious.product.setup.admin_bar'] = function () {
return new Affilicious\Product\Setup\Admin_Bar_Setup();
};
$this->container['affilicious.product.filter.disable_complex_products_for_query'] = function () {
return new Affilicious\Product\Filter\Disable_Complex_Products_For_Query_Filter();
};
$this->container['affilicious.product.listener.edited_shop_template'] = function ($c) {
return new Affilicious\Product\Listener\Edited_Shop_Template_Listener(
$c['affilicious.common.generator.key']
);
};
$this->container['affilicious.product.listener.edited_attribute_template'] = function ($c) {
return new Affilicious\Product\Listener\Edited_Attribute_Template_Listener(
$c['affilicious.common.generator.key']
);
};
$this->container['affilicious.product.listener.edited_detail_template'] = function ($c) {
return new Affilicious\Product\Listener\Edited_Detail_Template_Listener(
$c['affilicious.common.generator.key']
);
};
$this->container['affilicious.product.listener.deleted_shop_template'] = function ($c) {
return new Affilicious\Product\Listener\Deleted_Shop_Template_Listener(
$c['affilicious.common.generator.key']
);
};
$this->container['affilicious.product.listener.deleted_attribute_template'] = function ($c) {
return new Affilicious\Product\Listener\Deleted_Attribute_Template_Listener(
$c['affilicious.common.generator.key']
);
};
$this->container['affilicious.product.listener.deleted_detail_template'] = function ($c) {
return new Affilicious\Product\Listener\Deleted_Detail_Template_Listener(
$c['affilicious.common.generator.key']
);
};
$this->container['affilicious.product.setup.slug_rewrite'] = function ($c) {
return new Affilicious\Product\Setup\Slug_Rewrite_Setup(
$c['affilicious.product.setup.product'],
$c['affilicious.product.setup.custom_taxonomies']
);
};
$this->container['affilicious.product.update.timer'] = function ($c) {
return new Affilicious\Product\Update\Update_Timer(
$c['affilicious.product.update.manager'],
$c['affilicious.product.update.semaphore']
);
};
$this->container['affilicious.product.update.task.broker'] = function($c) {
return new Affilicious\Product\Update\Task\Broker\Update_Task_Broker(
$c['affilicious.shop.repository.shop_template'],
$c['affilicious.provider.repository.provider']
);
};
$this->container['affilicious.product.update.manager'] = function ($c) {
return new Affilicious\Product\Update\Update_Manager(
$c['affilicious.product.update.task.broker'],
$c['affilicious.product.repository.product'],
$c['affilicious.provider.repository.provider']
);
};
$this->container['affilicious.product.update.semaphore'] = function ($c) {
return new Affilicious\Product\Update\Update_Semaphore(
$c['affilicious.common.logger']
);
};
$this->container['affilicious.product.setup.update_worker'] = function ($c) {
return new Affilicious\Product\Setup\Update_Worker_Setup(
$c['affilicious.product.update.manager']
);
};
$this->container['affilicious.product.setup.update_queue'] = function ($c) {
return new Affilicious\Product\Setup\Update_Queue_Setup(
$c['affilicious.product.update.task.broker']
);
};
$this->container['affilicious.product.customizer.universal_box'] = function() {
return new Affilicious\Product\Customizer\Universal_Box_Customizer();
};
$this->container['affilicious.product.migration.post_type'] = function () {
return new Affilicious\Product\Migration\Post_Type_Migration();
};
$this->container['affilicious.product.migration.product_slugs_to_0818'] = function () {
return new Affilicious\Product\Migration\Product_Slugs_To_0818_Migration();
};
$this->container['affilicious.product.migration.product_variant_terms_to_0820'] = function ($c) {
return new Affilicious\Product\Migration\Product_Variant_Terms_To_0820_Migration(
$c['affilicious.product.repository.product']
);
};
$this->container['affilicious.product.migration.affiliate_product_id_to_090'] = function () {
return new Affilicious\Product\Migration\Affiliate_Product_Id_To_090_Migration();
};
$this->container['affilicious.product.migration.product_updates_to_0920'] = function ($c) {
return new Affilicious\Product\Migration\Product_Updates_To_0920_Migration(
$c['affilicious.product.update.semaphore']
);
};
$this->container['affilicious.product.migration.variants'] = function ($c) {
return new Affilicious\Product\Migration\Variants_Migration(
$c['affilicious.product.repository.product'],
$c['affilicious.attribute.repository.attribute_template'],
$c['affilicious.shop.repository.shop_template'],
$c['affilicious.product.factory.product_variant']
);
};
$this->container['affilicious.product.migration.shops'] = function ($c) {
return new Affilicious\Product\Migration\Shops_Migration(
$c['affilicious.product.repository.product'],
$c['affilicious.shop.repository.shop_template']
);
};
$this->container['affilicious.product.migration.clean_variants'] = function () {
return new Affilicious\Product\Migration\Clean_Variants_Migration();
};
$this->container['affilicious.product.migration.variant_inherit_status'] = function () {
return new Affilicious\Product\Migration\Variant_Inherit_Status_Migration();
};
$this->container['affilicious.product.migration.product_slug'] = function () {
return new Affilicious\Product\Migration\Product_Slug_Migration();
};
$this->container['affilicious.product.migration.details'] = function ($c) {
return new Affilicious\Product\Migration\Details_Migration(
$c['affilicious.product.repository.product'],
$c['affilicious.detail.repository.detail_template']
);
};
$this->container['affilicious.product.migration.tags_to_090'] = function($c) {
return new Affilicious\Product\Migration\Tags_To_090_Migration(
$c['affilicious.detail.repository.detail_template'],
$c['affilicious.attribute.repository.attribute_template']
);
};
$this->container['affilicious.product.migration.orphaned_product_variants_timer_to_0922'] = function($c) {
return new Affilicious\Product\Migration\Orphaned_Product_Variants_Cleaner_Timer_to_0922_Migration(
$c['affilicious.product.cleaner.orphaned_product_variants_timer']
);
};
$this->container['affilicious.product.admin.setup.import_page'] = function () {
return new Affilicious\Product\Admin\Setup\Import_Page_Setup();
};
$this->container['affilicious.product.admin.filter.table_columns'] = function () {
return new Affilicious\Product\Admin\Filter\Table_Columns_Filter();
};
$this->container['affilicious.product.admin.filter.table_rows'] = function () {
return new Affilicious\Product\Admin\Filter\Table_Rows_Filter();
};
$this->container['affilicious.product.admin.meta_box.product'] = function($c) {
return new Affilicious\Product\Admin\Meta_Box\Product_Meta_Box(
$c['affilicious.shop.repository.shop_template'],
$c['affilicious.attribute.repository.attribute_template'],
$c['affilicious.detail.repository.detail_template'],
$c['affilicious.common.generator.key']
);
};
$this->container['affilicious.product.admin.options.product'] = function () {
return new Affilicious\Product\Admin\Options\Product_Options();
};
$this->container['affilicious.product.admin.filter.table_content'] = function () {
return new Affilicious\Product\Admin\Filter\Table_Content_Filter();
};
$this->container['affilicious.product.admin.filter.table_count'] = function () {
return new Affilicious\Product\Admin\Filter\Table_Count_Filter();
};
$this->container['affilicious.product.admin.filter.menu_order'] = function() {
return new Affilicious\Product\Admin\Filter\Menu_Order_Filter();
};
}
/**
* Register all of the hooks related to the public-facing functionality.
*
* @since 0.3
*/
public function register_public_hooks()
{
// Hook the text domain for the correct translations.
add_action('plugins_loaded', array($this, 'load_textdomain'));
// Hook the products.
$product_setup = $this->container['affilicious.product.setup.product'];
add_action('init', array($product_setup, 'init'), 0);
// Hook the custom product taxonomies.
$custom_product_taxonomies_setup = $this->container['affilicious.product.setup.custom_taxonomies'];
add_action('init', array($custom_product_taxonomies_setup, 'init'), 0);
// Hook the shop templates.
$shop_template_setup = $this->container['affilicious.shop.setup.shop_template'];
add_action('init', array($shop_template_setup, 'init'), 0);
// Hook the attribute templates.
$attribute_template_setup = $this->container['affilicious.attribute.setup.attribute_template'];
add_action('init', array($attribute_template_setup, 'init'), 0);
// Hook the detail templates.
$detail_template_setup = $this->container['affilicious.detail.setup.detail_template'];
add_action('init', array($detail_template_setup, 'init'), 0);
// Hook the product slug rewrite.
$slug_rewrite_setup = $this->container['affilicious.product.setup.slug_rewrite'];
add_action('init', array($slug_rewrite_setup, 'run'), 1);
add_action('added_option', array($slug_rewrite_setup, 'prepare'), 80, 1);
add_action('updated_option', array($slug_rewrite_setup, 'prepare'), 80, 1);
// Hook the logs cleaner timer.
$logs_cleaner_timer = $this->container['affilicious.common.cleaner.logs_timer'];
add_action('aff_common_cleaner_logs_clean_up_daily', array($logs_cleaner_timer, 'clean_up_daily'));
// Hook the orphaned product variants timer.
$orphaned_product_variants_timer = $this->container['affilicious.product.cleaner.orphaned_product_variants_timer'];
add_action('aff_product_cleaner_orphaned_product_variants_clean_up_daily', array($orphaned_product_variants_timer, 'clean_up_daily'));
// Hook the providers.
$provider_setup = $this->container['affilicious.provider.setup.provider'];
add_action('init', array($provider_setup, 'init'), 5);
// Hook the logger handlers
$logger_handler_setup = $this->container['affilicious.common.setup.logger_handler'];
add_action('init', array($logger_handler_setup, 'init'), 5);
// Hook the product update queues.
$update_queue_setup = $this->container['affilicious.product.setup.update_queue'];
add_filter('aff_provider_after_init', array($update_queue_setup, 'init'));
// Hook the product update workers.
$update_worker_setup = $this->container['affilicious.product.setup.update_worker'];
add_action('init', array($update_worker_setup, 'init'), 5);
// Hook the public assets.
$assets_setup = $this->container['affilicious.common.setup.assets'];
add_action('wp_enqueue_scripts', array($assets_setup, 'add_styles'));
add_action('wp_enqueue_scripts', array($assets_setup, 'add_scripts'));
// Hook the product update timer to update the products regularly.
$update_timer = $this->container['affilicious.product.update.timer'];
add_action('aff_product_update_run_tasks_hourly', array($update_timer, 'run_tasks_hourly'));
add_action('aff_product_update_run_tasks_twice_daily', array($update_timer, 'run_tasks_twice_daily'));
add_action('aff_product_update_run_tasks_daily', array($update_timer, 'run_tasks_daily'));
// Hook the listeners.
$create_blog_listener = $this->container['affilicious.common.listener.create_blog'];
$drop_tables_listener = $this->container['affilicious.common.listener.drop_tables'];
$product_create_blog_listener = $this->container['affilicious.product.listener.create_blog'];
$saved_complex_product_listener = $this->container['affilicious.product.listener.saved_complex_product'];
$deleted_complex_product_listener = $this->container['affilicious.product.listener.deleted_complex_product'];
$changed_product_status_listener = $this->container['affilicious.product.listener.changed_product_status'];
$edited_shop_template_listener = $this->container['affilicious.product.listener.edited_shop_template'];
$edited_attribute_template_listener = $this->container['affilicious.product.listener.edited_attribute_template'];
$edited_detail_template_listener = $this->container['affilicious.product.listener.edited_detail_template'];
$deleted_shop_template_listener = $this->container['affilicious.product.listener.deleted_shop_template'];
$deleted_attribute_template_listener = $this->container['affilicious.product.listener.deleted_attribute_template'];
$deleted_detail_template_listener = $this->container['affilicious.product.listener.deleted_detail_template'];
add_action('wpmu_new_blog', array($create_blog_listener, 'listen'), 10, 1);
add_action('wpmu_drop_tables', array($drop_tables_listener, 'listen'), 10, 2);
add_action('wpmu_new_blog', array($product_create_blog_listener, 'listen'), 10, 1);
add_action('carbon_after_save_post_meta', array($saved_complex_product_listener, 'listen'), 10, 3);
add_action('delete_post', array($deleted_complex_product_listener, 'listen'));
add_action('save_post', array($changed_product_status_listener, 'listen'), 10, 3);
add_action('edit_aff_shop_tmpl', array($edited_shop_template_listener, 'before_edit'), 10, 1);
add_action('edit_aff_attribute_tmpl', array($edited_attribute_template_listener, 'before_edit'), 10, 1);
add_action('edit_aff_detail_tmpl', array($edited_detail_template_listener, 'before_edit'), 10, 1);
add_action('edited_aff_shop_tmpl', array($edited_shop_template_listener, 'after_edit'), 10, 1);
add_action('edited_aff_attribute_tmpl', array($edited_attribute_template_listener, 'after_edit'), 10, 1);
add_action('edited_aff_detail_tmpl', array($edited_detail_template_listener, 'after_edit'), 10, 1);
add_action('delete_aff_shop_tmpl', array($deleted_shop_template_listener, 'delete'), 10, 3);
add_action('delete_aff_attribute_tmpl', array($deleted_attribute_template_listener, 'delete'), 10, 3);
add_action('delete_aff_detail_tmpl', array($deleted_detail_template_listener, 'delete'), 10, 3);
// Hook the canonical tags to improve SEO with product variants.
$canonical_setup = $this->container['affilicious.product.setup.canonical'];
add_action('wp_head', array($canonical_setup, 'init'));
// Hook the image sizes
$image_size_setup = $this->container['affilicious.common.setup.image_size'];
add_action('init', array($image_size_setup, 'init'));
// Hook the universal box
$universal_box_filter = $this->container['affilicious.product.filter.universal_box'];
add_filter('the_content', array($universal_box_filter, 'filter'));
// Hook the admin bar to make it compatible with products.
$admin_bar_setup = $this->container['affilicious.product.setup.admin_bar'];
add_action('admin_bar_menu', array($admin_bar_setup, 'init'), 99);
// Filter the complex products from the front end search.
$disable_complex_products_for_query_filter = $this->container['affilicious.product.filter.disable_complex_products_for_query'];
add_action('pre_get_posts', array($disable_complex_products_for_query_filter, 'filter'));
// Hook the license handlers for the extensions and themes.
$license_handler_setup = $this->container['affilicious.common.admin.setup.license_handler'];
add_action('init', array($license_handler_setup, 'init'), 15);
// Hook the license timer for the daily license checks.
$license_timer = $this->container['affilicious.common.admin.license.timer'];
add_action('aff_common_admin_license_run_checks_daily', array($license_timer, 'run_checks_daily'));
// Hook the link targets to make affiliate links work again.
$link_target_filter = $this->container['affilicious.common.filter.link_target'];
add_filter('tiny_mce_before_init', array($link_target_filter, 'filter'));
// Hook the filters.
$product_shops_meta_like_query_filter = $this->container['affilicious.product.filter.product_shops_meta_like_query'];
add_filter('posts_where' , array($product_shops_meta_like_query_filter, 'filter'), 10, 2);
// Hook the product taxonomy templates.
$taxonomy_templates_filter = $this->container['affilicious.common.filter.taxonomy_templates'];
add_filter('taxonomy_template_hierarchy', array($taxonomy_templates_filter, 'filter'));
// Hook the customizers.
$universal_box_customizer = $this->container['affilicious.product.customizer.universal_box'];
add_action('customize_register', array($universal_box_customizer, 'register'));
add_action('wp_enqueue_scripts', array($universal_box_customizer, 'render'));
// Hook into this action if you want to create custom extensions or themes with the dependency injection container.
do_action('aff_hooks');
add_action('init', function() {
/** @deprecated 1.1 */
do_action('aff_init');
/** @deprecated 1.0 */
do_action('affilicious_init');
});
}
/**
* Register all of the hooks related to the admin area functionality.
*
* @since 0.3
*/
public function register_admin_hooks()
{
// Hook the custom Carbon Fields.
$carbon_fields_setup = $this->container['affilicious.common.admin.setup.carbon'];
add_action('after_setup_theme', array($carbon_fields_setup, 'init'), 15);
// Hook the product meta box.
$product_meta_box = $this->container['affilicious.product.admin.meta_box.product'];
add_action('init', array($product_meta_box, 'render'), 10);
// Hook the shop template meta box.
$shop_template_meta_box = $this->container['affilicious.shop.admin.meta_box.shop_template'];
add_action('init', array($shop_template_meta_box, 'render'), 10);
// Hook the attribute template meta box.
$attribute_template_meta_box = $this->container['affilicious.attribute.admin.meta_box.attribute_template'];
add_action('init', array($attribute_template_meta_box, 'render'), 10);
// Hook the detail template meta box.
$detail_template_meta_box = $this->container['affilicious.detail.admin.meta_box.detail_template'];
add_action('init', array($detail_template_meta_box, 'render'), 10);
// Hook the admin notices
$download_recommendation_notice = $this->container['affilicious.common.admin.notice.download_recommendation'];
$amazon_not_included_anymore = $this->container['affilicious.provider.admin.notice.amazon_not_included_anymore'];
add_action('admin_notices', array($download_recommendation_notice, 'render'));
add_action('admin_notices', array($amazon_not_included_anymore, 'render'));
// Hook the admin assets.
$assets_setup = $this->container['affilicious.common.admin.setup.assets'];
add_action('admin_enqueue_scripts', array($assets_setup, 'add_styles'));
add_action('admin_enqueue_scripts', array($assets_setup, 'add_scripts'));
// Hook the plugin actions
$plugin_actions_setup = $this->container['affilicious.common.admin.setup.plugin_actions'];
add_filter('plugin_action_links_' . AFFILICIOUS_BASE_NAME, array($plugin_actions_setup, 'init'));
// Hook the actions
$download_system_info_action = $this->container['affilicious.common.admin.action.download_system_info'];
$download_logs_action = $this->container['affilicious.common.admin.action.download_logs'];
add_action('admin_action_aff_download_system_info', array($download_system_info_action, 'handle'));
add_action('admin_action_aff_download_logs', array($download_logs_action, 'handle'));
// Hook the product admin table filters.
$product_admin_table_content_filter = $this->container['affilicious.product.admin.filter.table_content'];
$product_admin_table_count_filter = $this->container['affilicious.product.admin.filter.table_count'];
$product_admin_table_columns_filter = $this->container['affilicious.product.admin.filter.table_columns'];
$product_admin_table_rows_filter = $this->container['affilicious.product.admin.filter.table_rows'];
add_action('pre_get_posts', array($product_admin_table_content_filter, 'filter'));
add_filter("views_edit-aff_product", array($product_admin_table_count_filter, 'filter'), 10, 1);
add_filter('manage_aff_product_posts_columns', array($product_admin_table_columns_filter, 'filter'));
add_filter('manage_aff_product_posts_custom_column', array($product_admin_table_rows_filter, 'filter'), 10, 2);
// Hook the attribute template admin table filters.
$attribute_template_admin_table_columns_filter = $this->container['affilicious.attribute.admin.filter.table_columns'];
$attribute_template_admin_table_rows_filter = $this->container['affilicious.attribute.admin.filter.table_rows'];
add_filter('manage_edit-aff_attribute_tmpl_columns', array($attribute_template_admin_table_columns_filter, 'filter'));
add_filter('manage_aff_attribute_tmpl_custom_column', array($attribute_template_admin_table_rows_filter, 'filter'), 15, 3);
// Hook the detail template admin table filters.
$detail_template_admin_table_columns_filter = $this->container['affilicious.detail.admin.filter.table_columns'];
$detail_template_admin_table_rows_filter = $this->container['affilicious.detail.admin.filter.table_rows'];
add_filter('manage_edit-aff_detail_tmpl_columns', array($detail_template_admin_table_columns_filter, 'filter'));
add_filter('manage_aff_detail_tmpl_custom_column', array($detail_template_admin_table_rows_filter, 'filter'), 15, 3);
// Hook the shop template admin table filters.
$shop_template_admin_table_columns_filter = $this->container['affilicious.shop.admin.filter.table_columns'];
$shop_template_admin_table_rows_filter = $this->container['affilicious.shop.admin.filter.table_rows'];
add_filter('manage_edit-aff_shop_tmpl_columns', array($shop_template_admin_table_columns_filter, 'filter'));
add_filter('manage_aff_shop_tmpl_custom_column', array($shop_template_admin_table_rows_filter, 'filter'), 15, 3);
// Hook the option pages.
$affilicious_options = $this->container['affilicious.common.admin.options.affilicious'];
$product_options = $this->container['affilicious.product.admin.options.product'];
add_action('init', array($affilicious_options, 'render'), 15);
add_action('init', array($product_options, 'render'), 20);
// Hook the import pages
$import_page_setup = $this->container['affilicious.product.admin.setup.import_page'];
add_action('admin_menu', array($import_page_setup, 'init'));
add_filter('parent_file', array($import_page_setup, 'highlighted_url'));
// Hook the add-ons page.
$addons_page = $this->container['affilicious.common.admin.page.addons'];
add_action('admin_menu', array($addons_page, 'init'), 100);
// Hook the menu order filter.
$product_admin_menu_order_filter = $this->container['affilicious.product.admin.filter.menu_order'];
add_filter('custom_menu_order', array($product_admin_menu_order_filter, 'filter'));
// Hook the admin footer text.
$admin_footer_text_filter = $this->container['affilicious.common.admin.filter.footer_text'];
add_filter('admin_footer_text', array($admin_footer_text_filter, 'filter'));
// Hook the ajax handlers.
$dismissed_notice_ajax_handler = $this->container['affilicious.common.admin.ajax_handler.dismissed_notice'];
add_action('wp_ajax_aff_dismissed_notice', array($dismissed_notice_ajax_handler , 'handle'));
// Hook into this action if you want to create custom extensions or themes with the dependency injection container.
do_action('aff_admin_hooks');
// Add a custom affilicious admin init hook.
add_action('admin_init', function() {
/** @deprecated 1.1 */
do_action('aff_admin_init');
/** @deprecated 1.0 */
do_action('affilicious_admin_init');
});
}
}
}
/**
* Run the Affilicious plugin.
*
* @since 0.8.11
*/
function aff_run_plugin()
{
$affilicious = Affilicious::get_instance();
$affilicious->run();
}
aff_run_plugin();