log_repository = new LogRepository(); $this->module_manager = new ModuleManager( $this->log_repository ); } /** * Boot the plugin. * * @return void */ public function boot() { $mailer = new Mailer( $this->module_manager, $this->log_repository ); $mailer->register(); /** * Discover extensions (built-in add-ons + marketplace plugins like * NoorSMTP Pro) once every plugin has had a chance to hook * `plugins_loaded`, then boot whichever modules are active and wire * up the admin UI/AJAX against the now-complete module list. */ add_action( 'init', array( $this, 'finish_boot' ), 5 ); } /** * Runs on `init`, after all plugins' `plugins_loaded` callbacks have had * a chance to register extensions via `noorsmtp_register_extension`. * * @return void */ public function finish_boot() { $this->module_manager->discover_extensions(); $this->module_manager->boot_active_modules(); if ( is_admin() ) { $settings_page = new SettingsPage( $this->module_manager ); $settings_page->register(); $ajax = new Ajax( $this->module_manager, $this->log_repository, $settings_page ); $ajax->register(); ( new Upsell() )->register(); } } /** * Get the module manager. * * @return ModuleManager */ public function modules() { return $this->module_manager; } /** * Get the log repository. * * @return LogRepository */ public function logs() { return $this->log_repository; } }