File: /var/www/html/ielts-store/wp-content/plugins/woocommerce-zapier/legacy/Trigger/TriggerFactory.php
<?php
namespace OM4\Zapier\Trigger;
use Exception;
use OM4\Zapier\Plugin;
use OM4\Zapier\Plugin\Subscriptions;
use OM4\Zapier\Trigger\Base;
use ReflectionClass;
use ReflectionException;
defined( 'ABSPATH' ) || exit;
/**
 * This class is responsible for instantiating and storing OM4\Zapier\Trigger\Base objects.
 *
 * @deprecated 2.0.0
 */
class TriggerFactory {
	/**
	 * List of supported Zapier Triggers
	 *
	 * @var array
	 */
	public static $triggers = array();
	/**
	 * Load available Trigger definitions.
	 *
	 * @throws ReflectionException If a trigger class does not exist.
	 */
	public static function load_triggers() {
		if ( empty( self::$triggers ) ) {
			// Initialise our triggers.
			$directories = array(
				'OM4\\Zapier\\Trigger\\Customer\\' => Plugin::$plugin_dir . 'legacy/Trigger/Customer',
				'OM4\\Zapier\\Trigger\\Order\\'    => Plugin::$plugin_dir . 'legacy/Trigger/Order',
			);
			if ( Subscriptions::is_available() ) {
				$directories['OM4\\Zapier\\Trigger\\Subscription\\'] = Plugin::$plugin_dir . 'legacy/Trigger/Subscription';
			}
			/**
			 * Override the directories where WC Zapier Triggers PHP files are loaded from.
			 *
			 * @since 1.6.0
			 * @deprecated 2.0.0 Legacy Zapier Feed Triggers should be replaced with WooCommerce REST API Webhook Topics.
			 *
			 * @param array $directories The array of directories to scan for PHP files.
			 */
			$directories = apply_filters_deprecated( 'wc_zapier_trigger_directories', array( $directories ), '2.0.0', false, 'Legacy Zapier Feed Triggers should be replaced with WooCommerce REST API Webhook Topics.' );
			foreach ( $directories as $prefix => $directory ) {
				foreach ( scandir( $directory ) as $trigger_file ) {
					// Only take into account PHP files (and not directories).
					if ( strpos( $trigger_file, '.php' ) !== false ) {
						$prefix = ! is_string( $prefix ) ? '' : $prefix;
						// Empty the prefix for backward compatibility.
						$class_name = $prefix . str_replace( '.php', '', $trigger_file );
						// Don't instantiate/initialise classes that are abstract.
						$reflector = new ReflectionClass( $class_name );
						if ( ! $reflector->IsInstantiable() ) {
							continue;
						}
						$trigger                                       = new $class_name();
						self::$triggers[ $trigger->get_trigger_key() ] = $trigger;
					}
				}
			}
		}
	}
	/**
	 * Obtain the OM4\Zapier\Trigger\Base class that corresponds to the specified trigger key
	 *
	 * @param string $trigger_key The key of the Trigger.
	 *
	 * @throws Exception In case trigger not found.
	 * @return Base
	 */
	public static function get_trigger_with_key( $trigger_key ) {
		if ( isset( self::$triggers[ $trigger_key ] ) ) {
			return self::$triggers[ $trigger_key ];
		} else {
			throw new Exception( "Trigger not found with key: $trigger_key" );
		}
	}
	/**
	 * Whether or not a trigger exists with the specified key.
	 *
	 * @param string $trigger_key The key of the Trigger.
	 *
	 * @return bool
	 */
	public static function trigger_exists( $trigger_key ) {
		try {
			$trigger_key = trim( (string) $trigger_key );
			if ( empty( $trigger_key ) ) {
				return false;
			}
			self::get_trigger_with_key( $trigger_key );
			return true;
		} catch ( Exception $ex ) {
			return false;
		}
		return false;
	}
	/**
	 * Return an array of supported triggers and title/description.
	 * Sorted in the correct sort order.
	 *
	 * @return array
	 */
	public static function get_triggers_for_display() {
		$triggers = array();
		foreach ( self::get_triggers_sorted() as $trigger ) {
			$triggers[ $trigger->get_trigger_key() ] = $trigger->get_trigger_title();
		}
		return $triggers;
	}
	/**
	 * Obtain a list of registered Triggers, sorted by the Base::sort_order property.
	 *
	 * @return Base[] array of OM4\Zapier\Trigger\Base objects.
	 */
	public static function get_triggers_sorted() {
		$triggers = array();
		foreach ( self::$triggers as $trigger ) {
			$triggers[ $trigger->sort_order ] = $trigger;
		}
		ksort( $triggers, SORT_NUMERIC );
		return $triggers;
	}
	/**
	 * Obtain a list of trigger keys for all triggers.
	 *
	 * @return array
	 */
	public static function get_trigger_keys() {
		$triggers = array();
		foreach ( self::get_triggers_sorted() as $trigger ) {
			$triggers[] = $trigger->get_trigger_key();
		}
		return $triggers;
	}
	/**
	 * Obtain the name/title of a trigger based on it's internal key/slug.
	 *
	 * @param string $trigger_key The key of the Trigger.
	 *
	 * @return string
	 */
	public static function get_trigger_name( $trigger_key ) {
		return isset( self::$triggers[ $trigger_key ] ) ? self::$triggers[ $trigger_key ]->get_trigger_title() : '';
	}
}