tags = new MC4WP_Integration_Tags(); } /** * Add hooks */ public function add_hooks() { add_action('after_setup_theme', array( $this, 'initialize' )); $this->tags->add_hooks(); } /** * Add hooks */ public function initialize() { /*** @var MC4WP_Integration_Fixture $integration */ $enabled_integrations = $this->get_enabled_integrations(); foreach ($enabled_integrations as $integration) { $integration->load()->initialize(); } } /** * Get an integration instance * * @return MC4WP_Integration_Fixture[] * @throws Exception */ public function get_all() { return $this->integrations; } /** * Get an integration instance * * @param string $slug * @return MC4WP_Integration * @throws Exception */ public function get($slug) { if (! isset($this->integrations[ $slug ])) { throw new Exception(sprintf('No integration with slug %s has been registered.', $slug)); } return $this->integrations[ $slug ]->load(); } /** * Register a new integration class * * @param string $slug * @param string $class * @param bool $enabled */ public function register_integration($slug, $class, $enabled = false) { $raw_options = $this->get_integration_options($slug); $this->integrations[ $slug ] = new MC4WP_Integration_Fixture($slug, $class, $enabled, $raw_options); } /** * Deregister an integration class * * @param string $slug */ public function deregister_integration($slug) { if (isset($this->integrations[ $slug ])) { unset($this->integrations[ $slug ]); } } /** * Checks whether a certain integration is enabled (in the settings) * * This is decoupled from the integration class itself as checking an array is way "cheaper" than instantiating an object * * @param MC4WP_Integration_Fixture $integration * * @return bool */ public function is_enabled(MC4WP_Integration_Fixture $integration) { return $integration->enabled; } /** * @param MC4WP_Integration $integration * @return bool */ public function is_installed($integration) { return $integration->is_installed(); } /** * Get the integrations which are enabled * * - Some integrations are always enabled because they need manual work * - Other integrations can be enabled in the settings page * - Only returns installed integrations * * @return array */ public function get_enabled_integrations() { // get all enabled integrations $enabled_integrations = array_filter($this->integrations, array( $this, 'is_enabled' )); // remove duplicate values, for whatever reason.. $enabled_integrations = array_unique($enabled_integrations); // filter out integrations which are not installed $installed_enabled_integrations = array_filter($enabled_integrations, array( $this, 'is_installed' )); return $installed_enabled_integrations; } /** * Gets all integration options in a keyed array * * @return array */ private function load_options() { $options = (array) get_option('mc4wp_integrations', array()); /** * Filters global integration options * * This array holds ALL integration settings * * @since 3.0 * @param array $options * @ignore */ return (array) apply_filters('mc4wp_integration_options', $options); } /** * Gets the raw options for an integration * * @param $slug * @return array */ public function get_integration_options($slug) { static $options; if ($options === null) { $options = $this->load_options(); } return isset($options[ $slug ]) ? $options[ $slug ] : array(); } }