init_plugin_metadata(); define( 'AINSYS_CONNECTOR_BASENAME', plugin_basename( $this->plugin_file_name_path ) ); // not used legacy constant. define( 'AINSYS_CONNECTOR_VERSION', $this->version ); define( 'AINSYS_CONNECTOR_PLUGIN', $this->plugin_file_name_path ); define( 'AINSYS_CONNECTOR_PLUGIN_DIR', untrailingslashit( dirname( $this->plugin_file_name_path ) ) ); // not used legacy constant. define( 'AINSYS_CONNECTOR_URL', $this->plugin_dir_url ); $this->di_container = DI_Container::get_instance(); /** * Inject here all components needed for plugin. * It's good to follow same logic in child plugins if it has multiple classes which share functionality * among the plugin. */ $this->components['settings'] = $this->di_container->resolve( Settings::class ); $this->components['logger'] = $this->di_container->resolve( Logger::class ); $this->components['core'] = $this->di_container->resolve( Core::class ); $this->components['conditions'] = $this->di_container->resolve( Conditions::class ); $this->components['utm_handler'] = $this->di_container->resolve( UTM_Handler::class ); $this->components['process_users'] = $this->di_container->resolve( Process_Users::class ); $this->components['process_comments'] = $this->di_container->resolve( Process_Comments::class ); $this->components['process_attachments'] = $this->di_container->resolve( Process_Attachments::class ); $this->components['process_posts'] = $this->di_container->resolve( Process_Posts::class ); $this->components['process_pages'] = $this->di_container->resolve( Process_Pages::class ); $this->components['process_menus'] = $this->di_container->resolve( Process_Menus::class ); $this->components['webhooks'] = $this->di_container->resolve( Webhook_Listener::class ); $this->components['webhook_user'] = $this->di_container->resolve( Handle_User::class ); $this->components['webhook_comment'] = $this->di_container->resolve( Handle_Comment::class ); $this->components['webhook_post'] = $this->di_container->resolve( Handle_Post::class ); $this->components['webhook_page'] = $this->di_container->resolve( Handle_Page::class ); $this->components['webhook_menu'] = $this->di_container->resolve( Handle_Menu::class ); $this->components['settings_admin_ui'] = $this->di_container->resolve( Admin_UI::class ); $this->components['settings_admin_ui_general'] = $this->di_container->resolve( Admin_UI_General::class ); $this->components['settings_admin_ui_logs'] = $this->di_container->resolve( Admin_UI_Logs::class ); $this->components['settings_admin_ui_entities_checking'] = $this->di_container->resolve( Admin_UI_Entities_Checking::class ); $this->components['settings_admin_ui_entities_controlling'] = $this->di_container->resolve( Admin_UI_Entities_Controlling::class ); } /** * */ public function init_hooks() { register_activation_hook( $this->plugin_file_name_path, array( $this, 'activate' ) ); register_deactivation_hook( $this->plugin_file_name_path, array( $this, 'deactivate' ) ); add_action( 'init', array( $this, 'load_textdomain' ) ); add_action( 'plugins_loaded', array( $this, 'load_child_plugins' ) ); /* * Initialize hooks for all inner plugin's components. */ foreach ( $this->components as $component ) { if ( $component instanceof Hooked ) { $component->init_hooks(); } } } public function load_textdomain() { $locale = apply_filters( 'plugin_locale', get_locale(), AINSYS_CONNECTOR_TEXTDOMAIN ); unload_textdomain( AINSYS_CONNECTOR_TEXTDOMAIN ); load_textdomain( AINSYS_CONNECTOR_TEXTDOMAIN, WP_LANG_DIR . '/plugins/ainsys-connector-' . $locale . '.mo' ); load_plugin_textdomain( AINSYS_CONNECTOR_TEXTDOMAIN, false, dirname( $this->plugin_file_name_path ) . '/languages/' ); } public function load_child_plugins() { /** * After all core components are loaded, we can load child plugins. */ $this->child_plugin_classes = apply_filters( 'ainsys_child_plugins_to_be_loaded', array() ); foreach ( $this->child_plugin_classes as $child_plugin_class_name ) { if ( class_exists( $child_plugin_class_name ) ) { $this->child_plugins[ $child_plugin_class_name ] = $this->di_container->resolve( $child_plugin_class_name ); } } // now lets init their hooks as well. foreach ( $this->child_plugins as $child_plugin ) { if ( $child_plugin instanceof Hooked ) { $child_plugin->init_hooks(); } } // now our child plugins got linked to WP. } /** * Action for plugin activation. */ public function activate() { foreach ( $this->components as $component ) { if ( method_exists( $component, 'activate' ) ) { $component->activate(); } } foreach ( $this->child_plugins as $component ) { if ( method_exists( $component, 'activate' ) ) { $component->activate(); } } } /** * Action on plugin deactivation. * Cleans up everything. */ public function deactivate() { foreach ( $this->components as $component ) { if ( method_exists( $component, 'deactivate' ) ) { $component->deactivate(); } } } public static function uninstall() { $instance = static::get_instance(); foreach ( $instance->components as $component ) { if ( method_exists( $component, 'uninstall' ) ) { $component->uninstall(); } } } }