Automator_Load

Class Automator_Load


Source Source

File: src/class-automator-load.php

class Automator_Load {
	/**
	 * The instance of the class
	 *
	 * @since    1.0.0
	 * @access   public
	 * @var      Object
	 */
	public static $instance = null;
	/**
	 * @var array
	 */
	public static $core_class_inits = array();
	/**
	 * @var array
	 */
	public static $integrations = array();
	/**
	 * @var array
	 */
	public static $active_integrations = array();
	/**
	 * class constructor
	 */
	public function __construct() {
		if ( strpos( $_SERVER['REQUEST_URI'], 'favicon' ) ) {
			// bail out if it's favicon.ico
			return;
		}
		// Show upgrade notice from readme.txt.
		add_action(
			'in_plugin_update_message-' . plugin_basename( AUTOMATOR_BASE_FILE ),
			array( $this, 'in_plugin_update_message' ),
			10,
			2
		);
		// Load Admin only files.
		add_filter( 'automator_core_files', array( $this, 'admin_only_classes' ) );
		// Load Custom Post Types only files.
		add_filter( 'automator_core_files', array( $this, 'custom_post_types_classes' ) );
		// Load non-admin files.
		add_filter( 'automator_core_files', array( $this, 'front_only_classes' ) );
		// Load both admin & non-admin files.
		add_filter( 'automator_core_files', array( $this, 'global_classes' ) );
		// Add the pro links utm_r attributes.
		add_action( 'admin_footer', array( $this, 'global_utm_r_links' ) );
		// Show 'Upgrade to Pro' on plugins page.
		add_filter(
			'plugin_action_links_' . plugin_basename( AUTOMATOR_BASE_FILE ),
			array(
				$this,
				'uo_automator_upgrade_to_pro_link',
			),
			99
		);
		$this->load_automator();
	}
	/**
	 * Callback function to `plugin_action_links_{$path}` to add our 'Upgrade to Pro' link.
	 *
	 * @param array $links The accepted argument.
	 *
	 * @return array The links.
	 */
	public function uo_automator_upgrade_to_pro_link( $links ) {
		// Check if Automator Pro is not active.
		if ( ! defined( 'AUTOMATOR_PRO_FILE' ) ) {
			$link = 'https://automatorplugin.com/pricing/?utm_source=uncanny_automator&utm_medium=plugins_page&utm_content=update_to_pro';
			$settings_link = sprintf( '<a href="%s" target="_blank" style="font-weight: bold;">%s</a>', $link, __( 'Upgrade to Pro', 'uncanny-learndash-toolkit' ) );
			array_unshift( $links, $settings_link );
		}
		return $links;
	}
	/**
	 *
	 */
	public function load_automator() {
		// If it's not required to load automator, bail
		if ( false === LOAD_AUTOMATOR ) {
			return;
		}
		// Load text domain
		add_action( 'plugins_loaded', array( $this, 'automator_load_textdomain' ) );
		do_action( 'automator_before_configure' );
		// Load Assets
		$this->initialize_assets();
		// Load Utilities
		$this->initialize_utilities();
		// Load Configuration
		$this->initialize_automator_db();
		// Load the core files
		$this->initialize_core_automator();
		do_action( 'automator_configuration_complete' );
	}
	/**
	 *
	 */
	public function initialize_assets() {
		// Load same script for free and pro
		add_action( 'admin_enqueue_scripts', array( $this, 'automator_license_style' ) );
		// Load script front-end
		add_action( 'wp_enqueue_scripts', array( $this, 'automator_closure_scripts' ) );
	}
	/**
	 * Initialize static singleton class that has shared functions and variables
	 *
	 * @since 1.0.0
	 */
	public function initialize_utilities() {
		require UA_ABSPATH . 'src/core/class-utilities.php';
		Utilities::get_instance();
	}
	/**
	 * Initialize static singleton class that configures all constants, utilities variables and handles
	 * activation/deactivation
	 *
	 * @since 1.0.0
	 */
	public function initialize_automator_db() {
		include_once dirname( AUTOMATOR_BASE_FILE ) . '/src/core/class-automator-db.php';
		$config_instance = Automator_DB::get_instance();
		register_activation_hook(
			AUTOMATOR_BASE_FILE,
			array(
				Automator_DB::class,
				'activation',
			)
		);
		$db_version = get_option( 'uap_database_version', null );
		if ( null === $db_version || (string) AUTOMATOR_DATABASE_VERSION !== (string) $db_version ) {
			$config_instance->activation();
			$config_instance->mysql_8_auto_increment_fix();
		}
		if ( (string) AUTOMATOR_DATABASE_VIEWS_VERSION !== (string) get_option( 'uap_database_views_version', 0 ) ) {
			$config_instance->automator_generate_views();
		}
	}
	/**
	 *
	 */
	public function initialize_core_automator() {
		do_action( 'automator_before_init' );
		$classes = apply_filters( 'automator_core_files', array() );
		if ( empty( $classes ) ) {
			return;
		}
		$this->load_traits();
		foreach ( $classes as $class_name => $file ) {
			if ( ! file_exists( $file ) ) {
				continue;
			}
			require $file;
			$class                                 = __NAMESPACE__ . '\\' . $class_name;
			self::$core_class_inits[ $class_name ] = new $class();
		}
		do_action( 'automator_after_init' );
	}
	/**
	 * Creates singleton instance of class
	 *
	 * @return Automator_Load $instance The Automator_Load Class
	 * @since 1.0.0
	 *
	 */
	public static function get_instance() {
		if ( null === self::$instance ) {
			self::$instance = new self();
		}
		return self::$instance;
	}
	/**
	 *
	 */
	public static function maybe_load_automator() {
		$run_automator = true;
		$run_automator = apply_filters_deprecated( 'uap_run_automator_actions', array( $run_automator ), '3.0', 'automator_run_automator_actions' );
		return apply_filters( 'automator_run_automator_actions', $run_automator );
	}
	/**
	 * Load plugin textdomain.
	 *
	 * @since 1.0.0
	 */
	public function automator_load_textdomain() {
		load_plugin_textdomain( 'uncanny-automator', false, basename( dirname( AUTOMATOR_BASE_FILE ) ) . '/languages/' );
	}
	/**
	 * @param $args
	 * @param $response
	 */
	public function in_plugin_update_message( $args, $response ) {
		$upgrade_notice = '';
		if ( isset( $response->upgrade_notice ) && ! empty( $response->upgrade_notice ) ) {
			$upgrade_notice .= '<div class="ua_plugin_upgrade_notice">';
			$upgrade_notice .= sprintf( '<strong>%s</strong>', __( 'Heads up!', 'uncanny-automator' ) );
			$upgrade_notice .= preg_replace( '~\[([^\]]*)\]\(([^\)]*)\)~', '<a href="${2}">${1}</a>', $response->upgrade_notice );
			$upgrade_notice .= '</div>';
		}
		echo apply_filters( 'uap_in_plugin_update_message', $upgrade_notice ? '</p>' . wp_kses_post( $upgrade_notice ) . '<p class="dummy">' : '', $args ); // phpcs:ignore WordPress.XSS.EscapeOutput.OutputNotEscaped
	}
	/**
	 * Licensing page styles
	 *
	 * @param $hook
	 */
	public function automator_license_style( $hook ) {
		if ( strpos( $hook, 'uncanny-automator-license-activation' ) ) {
			wp_enqueue_style( 'uap-admin-license', Utilities::automator_get_css( 'admin/license.css' ), array(), Utilities::automator_get_version() );
		}
	}
	/**
	 * Enqueue script
	 *
	 */
	public function automator_closure_scripts() {
		if ( ! is_user_logged_in() ) {
			return;
		}
		// check if there is a recipe and closure with publish status
		$check_closure = Automator()->db->closure->get_all();
		if ( empty( $check_closure ) ) {
			return;
		}
		$user_id   = wp_get_current_user()->ID;
		$api_setup = array(
			'root'              => esc_url_raw( rest_url() . AUTOMATOR_REST_API_END_POINT . '/uoa_redirect/' ),
			'nonce'             => wp_create_nonce( 'wp_rest' ),
			'user_id'           => $user_id,
			'client_secret_key' => md5( 'l6fsX3vAAiJbSXticLBd' . $user_id ),
		);
		wp_register_script( 'uoapp-client', Utilities::automator_get_js( 'uo-sseclient.js' ), array(), '2.1.0' ); //phpcs:ignore WordPress.WP.EnqueuedResourceParameters.NotInFooter
		wp_localize_script( 'uoapp-client', 'uoAppRestApiSetup', $api_setup );
		wp_enqueue_script( 'uoapp-client' );
	}
	/**
	 * @return mixed|void
	 */
	public function include_core_files() {
		/**
		 * Abstracts.
		 */
		do_action( 'automator_before_abstract_init' );
		do_action( 'automator_after_abstract_init' );
	}
	/**
	 * @param array $classes
	 *
	 * @return array|mixed
	 */
	public function admin_only_classes( $classes = array() ) {
		/**
		 * Admin.
		 */
		if ( ! is_admin() ) {
			return $classes;
		}
		do_action( 'automator_before_admin_init' );
		$classes['Admin_Menu']        = UA_ABSPATH . 'src/core/admin/class-admin-menu.php';
		$classes['Automator_Review']  = UA_ABSPATH . 'src/core/admin/class-automator-review.php';
		$classes['Copy_Recipe_Parts'] = UA_ABSPATH . 'src/core/admin/class-copy-recipe-parts.php';
		$classes['Add_User_Recipe_Type'] = UA_ABSPATH . 'src/core/classes/class-add-user-recipe-type.php';
		do_action( 'automator_after_admin_init' );
		/**
		 * Automator Custom Post Types.
		 */
		//$classes = $this->custom_post_types_classes( $classes );
		/**
		 * Activity Stream / Logs.
		 */
		$classes = $this->activity_stream_classes( $classes );
		/**
		 * Classes.
		 */
		do_action( 'automator_before_classes_init' );
		$classes['Populate_From_Query'] = UA_ABSPATH . 'src/core/classes/class-populate-from-query.php';
		do_action( 'automator_after_classes_init' );
		return $classes;
	}
	/**
	 * @param array $classes
	 *
	 * @return array|mixed
	 */
	public function custom_post_types_classes( $classes = array() ) {
		do_action( 'automator_before_automator_post_types_init' );
		$classes['Recipe_Post_Type']      = UA_ABSPATH . 'src/core/automator-post-types/uo-recipe/class-recipe-post-type.php';
		$classes['Recipe_Post_Metabox']   = UA_ABSPATH . 'src/core/automator-post-types/uo-recipe/class-recipe-post-metabox.php';
		$classes['Recipe_Post_Utilities'] = UA_ABSPATH . 'src/core/automator-post-types/uo-recipe/class-recipe-post-utilities.php';
		$classes['Recipe_Post_Rest_Api']  = UA_ABSPATH . 'src/core/automator-post-types/uo-recipe/class-recipe-post-rest-api.php';
		$classes['Triggers_Post_Type']    = UA_ABSPATH . 'src/core/automator-post-types/uo-trigger/class-triggers-post-type.php';
		$classes['Actions_Post_Type']     = UA_ABSPATH . 'src/core/automator-post-types/uo-action/class-actions-post-type.php';
		$classes['Closures_Post_Type']    = UA_ABSPATH . 'src/core/automator-post-types/uo-closure/class-closures-post-type.php';
		$classes['Automator_Taxonomies']  = UA_ABSPATH . 'src/core/automator-post-types/uo-taxonomies/class-automator-taxonomies.php';
		do_action( 'automator_after_automator_post_types_init' );
		return $classes;
	}
	/**
	 * @param array $classes
	 *
	 * @return array|mixed
	 */
	public function activity_stream_classes( $classes = array() ) {
		do_action( 'automator_before_activity_stream_init' );
		$classes['Activity_Log'] = UA_ABSPATH . 'src/core/admin/class-activity-log.php';
		do_action( 'automator_after_activity_stream_init' );
		return $classes;
	}
	/**
	 * @param array $classes
	 *
	 * @return array|mixed
	 */
	public function front_only_classes( $classes = array() ) {
//		if ( is_admin() && ! DOING_AJAX ) {
//			return $classes;
//		}
		$classes['Actionify_Triggers'] = UA_ABSPATH . 'src/core/classes/class-actionify-triggers.php';
		return $classes;
	}
	/**
	 * @param array $classes
	 *
	 * @return array|mixed
	 */
	public function global_classes( $classes = array() ) {
		/**
		 * Class autoloader.
		 */
		do_action( 'automator_before_autoloader' );
		$classes['Automator_Autoloader'] = UA_ABSPATH . 'src/core/lib/autoload/class-ua-autoloader.php';
		// $classes['A_Cron_Exceptions']    = UA_ABSPATH . 'src/core/classes/class-a-cron-exceptions.php';
		$classes['Set_Up_Automator'] = UA_ABSPATH . 'src/core/classes/class-set-up-automator.php';
		do_action( 'automator_after_autoloader' );
		return $classes;
	}

	/**
	 *
	 */
	public function load_traits() {
		do_action( 'automator_before_traits' );
		$classes['Integrations'] = UA_ABSPATH . 'src/core/lib/recipe-parts/trait-integrations.php';
		$classes['Trait_Closure_Setup'] = UA_ABSPATH . 'src/core/lib/recipe-parts/closures/trait-closure-setup.php';
		$classes['Closures']            = UA_ABSPATH . 'src/core/lib/recipe-parts/trait-closures.php';
		$classes['Trait_Trigger_Setup']      = UA_ABSPATH . 'src/core/lib/recipe-parts/triggers/trait-trigger-setup.php';
		$classes['Trait_Trigger_Filters']    = UA_ABSPATH . 'src/core/lib/recipe-parts/triggers/trait-trigger-filters.php';
		$classes['Trait_Trigger_Conditions'] = UA_ABSPATH . 'src/core/lib/recipe-parts/triggers/trait-trigger-conditions.php';
		$classes['Trait_Trigger_Process']    = UA_ABSPATH . 'src/core/lib/recipe-parts/triggers/trait-trigger-process.php';
		$classes['Triggers']                 = UA_ABSPATH . 'src/core/lib/recipe-parts/triggers/trait-triggers.php';
		$classes['Trait_Action_Setup']         = UA_ABSPATH . 'src/core/lib/recipe-parts/actions/trait-action-setup.php';
		$classes['Trait_Action_Conditions']    = UA_ABSPATH . 'src/core/lib/recipe-parts/actions/trait-action-conditions.php';
		$classes['Trait_Action_Parser']        = UA_ABSPATH . 'src/core/lib/recipe-parts/actions/trait-action-parser.php';
		$classes['Trait_Action_Process']       = UA_ABSPATH . 'src/core/lib/recipe-parts/actions/trait-action-process.php';
		$classes['Trait_Action_Helpers_Email'] = UA_ABSPATH . 'src/core/lib/recipe-parts/actions/trait-action-helpers-email.php';
		$classes['Trait_Action_Helpers']       = UA_ABSPATH . 'src/core/lib/recipe-parts/actions/trait-action-helpers.php';
		$classes['Actions']                    = UA_ABSPATH . 'src/core/lib/recipe-parts/trait-actions.php';
		if ( empty( $classes ) ) {
			return;
		}
		// TODO: Generate Class names by filenames
		foreach ( $classes as $file ) {
			if ( ! file_exists( $file ) ) {
				continue;
			}
			require $file;
		}
		do_action( 'automator_after_traits' );
	}
	/**
	 * Adds `utm_r` parameters to all Automator Pro Links.
	 *
	 * @return void.
	 */
	public function global_utm_r_links() {
		$uncanny_automator_enabled_global_utm = apply_filters( 'uncanny_automator_enabled_global_utm', true );
		$uncannyautomator_source = get_option( 'uncannyautomator_source' );
		if ( false === $uncannyautomator_source || empty( $uncannyautomator_source ) ) {
			return;
		}
		if ( ! $uncanny_automator_enabled_global_utm ) {
			return;
		}
		?>
		<script>
			jQuery(document).ready(function ($) {
				"use strict";
				var automator_pro_links = 'a[href^="https://automatorplugin.com"]';
				var _update_url_parameter = function (uri, key, value) {
					// remove the hash part before operating on the uri
					var i = uri.indexOf('#');
					var hash = i === -1 ? '' : uri.substr(i);
					uri = i === -1 ? uri : uri.substr(0, i);
					var re = new RegExp("([?&])" + key + "=.*?(&|$)", "i");
					var separator = uri.indexOf('?') !== -1 ? "&" : "?";
					if (uri.match(re)) {
						uri = uri.replace(re, '$1' + key + "=" + value + '$2');
					} else {
						uri = uri + separator + key + "=" + value;
					}
					return uri + hash;  // finally append the hash as well
				}
				var source = "<?php echo esc_js( $uncannyautomator_source ); ?>";
				// Add utmr to all automator upgrade links.
				$.each($(automator_pro_links), function () {
					var link_with_utmr = _update_url_parameter($(this).attr('href'), 'utm_r', '<?php echo esc_js( $uncannyautomator_source ); ?>');
					$(this).attr('href', link_with_utmr);
				});
				// Add utmr to all automator upgrade links which are not accessible on document ready.
				$(document).on('mouseover', automator_pro_links, function (e) {
					var link_with_utmr = _update_url_parameter($(this).attr('href'), 'utm_r', '<?php echo esc_js( $uncannyautomator_source ); ?>');
					$(this).attr('href', link_with_utmr);
				});
			});
		</script>
		<?php
	}
}

Methods Methods