Apps_Config::class, self::EMAIL_LOG_CONFIG => Email_Log_Config::class, self::EMAIL_LOG_SINGLE_CONFIG => Email_Log_Single_Config::class, self::SETTINGS_CONFIG => Settings_Config::class, self::TOOLS_CONFIG => Tools_Config::class, self::DASHBOARD_CONFIG => Dashboard_Config::class, ); protected $plugin_url; public function __construct( $plugin_url ) { $this->plugin_url = $plugin_url; } public function register( Service_Container $container ) { parent::register( $container ); $this->container->add( self::SHOULD_ENQUEUE_SETUP_WIZARD, function () use ( $container ) { return function () { $page = filter_input( INPUT_GET, 'page' ); if ( ! is_string( $page ) ) { return false; } $setup_wizard_page = filter_input( INPUT_GET, 'setup-wizard-page' ); $page = htmlspecialchars( $page ); $container = Gravity_SMTP::container(); $should_display = Booliesh::get( $container->get( Connector_Service_Provider::DATA_STORE_ROUTER )->get_plugin_setting( Save_Plugin_Settings_Endpoint::PARAM_SETUP_WIZARD_SHOULD_DISPLAY, 'true' ) ); return $should_display ? strpos( $page, 'gravitysmtp-' ) !== false : is_string( $setup_wizard_page ); }; }, true ); $min = $this->container->get( Assets_Service_Provider::ENVIRONMENT_DETAILS )->get_min(); $ver = $this->container->get( Assets_Service_Provider::ENVIRONMENT_DETAILS )->get_version(); $this->register_setup_wizard_app( $min, $ver ); $this->register_settings_app( $min, $ver ); $this->register_activity_log_app( $min, $ver ); $this->register_tools_app( $min, $ver ); $this->register_dashboard_app( $min, $ver ); $this->register_suppression_app( $min, $ver ); $this->container->add( self::GET_DASHBOARD_DATA_ENDPOINT, function() use ( $container ) { $dashboard_config = $container->get( self::DASHBOARD_CONFIG ); return new Get_Dashboard_Data_Endpoint( $dashboard_config ); }); } public function init( \Gravity_Forms\Gravity_Tools\Service_Container $container ) { add_action( 'wp_ajax_' . Get_Dashboard_Data_Endpoint::ACTION_NAME, function () use ( $container ) { $container->get( self::GET_DASHBOARD_DATA_ENDPOINT )->handle(); } ); } protected function register_setup_wizard_app( $min, $ver ) { $args = array( 'app_name' => 'setup-wizard', 'script_name' => 'gravitysmtp_scripts_admin', 'object_name' => 'gravitysmtp_admin_config', 'chunk' => './setup-wizard', 'enqueue' => $this->container->get( self::SHOULD_ENQUEUE_SETUP_WIZARD ), 'css' => array( 'handle' => 'setup_wizard_styles', 'src' => $this->plugin_url . "/assets/css/dist/setup-wizard{$min}.css", 'deps' => array( 'gravitysmtp_styles_base' ), 'ver' => $ver, ), 'root_element' => 'gravitysmtp-setup-wizard-root', ); $this->register_app( $args ); } protected function register_activity_log_app( $min, $ver ) { $args = array( 'app_name' => 'activity-log', 'script_name' => 'gravitysmtp_scripts_admin', 'object_name' => 'gravitysmtp_admin_config', 'chunk' => './activity-log', 'enqueue' => array( $this, 'should_enqueue_activity_log' ), 'css' => array( 'handle' => 'activity_log_styles', 'src' => $this->plugin_url . "/assets/css/dist/activity-log{$min}.css", 'deps' => array( 'gravitysmtp_styles_base' ), 'ver' => $ver, ), 'root_element' => 'gravitysmtp-activity-log-app-root', ); $this->register_app( $args ); } protected function register_settings_app( $min, $ver ) { $args = array( 'app_name' => 'settings', 'script_name' => 'gravitysmtp_scripts_admin', 'object_name' => 'gravitysmtp_admin_config', 'chunk' => './settings', 'enqueue' => array( $this, 'should_enqueue_settings' ), 'css' => array( 'handle' => 'settings_styles', 'src' => $this->plugin_url . "/assets/css/dist/settings{$min}.css", 'deps' => array( 'gravitysmtp_styles_base' ), 'ver' => $ver, ), 'root_element' => 'gravitysmtp-settings-app-root', ); $this->register_app( $args ); } protected function register_tools_app( $min, $ver ) { $args = array( 'app_name' => 'tools', 'script_name' => 'gravitysmtp_scripts_admin', 'object_name' => 'gravitysmtp_admin_config', 'chunk' => './tools', 'enqueue' => array( $this, 'should_enqueue_tools' ), 'css' => array( 'handle' => 'tools_styles', 'src' => $this->plugin_url . "/assets/css/dist/tools{$min}.css", 'deps' => array( 'gravitysmtp_styles_base' ), 'ver' => $ver, ), 'root_element' => 'gravitysmtp-tools-app-root', ); $this->register_app( $args ); } protected function register_dashboard_app( $min, $ver ) { $args = array( 'app_name' => 'dashboard', 'script_name' => 'gravitysmtp_scripts_admin', 'object_name' => 'gravitysmtp_admin_config', 'chunk' => './dashboard', 'enqueue' => array( $this, 'should_enqueue_dashboard' ), 'css' => array( 'handle' => 'dashboard_styles', 'src' => $this->plugin_url . "/assets/css/dist/dashboard{$min}.css", 'deps' => array( 'gravitysmtp_styles_base' ), 'ver' => $ver, ), 'root_element' => 'gravitysmtp-dashboard-app-root', ); $this->register_app( $args ); } protected function register_suppression_app( $min, $ver ) { $args = array( 'app_name' => 'suppression', 'script_name' => 'gravitysmtp_scripts_admin', 'object_name' => 'gravitysmtp_admin_config', 'chunk' => './suppression', 'enqueue' => array( $this, 'should_enqueue_suppression' ), 'css' => array( 'handle' => 'suppression_styles', 'src' => $this->plugin_url . "/assets/css/dist/suppression{$min}.css", 'deps' => array( 'gravitysmtp_styles_base' ), 'ver' => $ver, ), 'root_element' => 'gravitysmtp-suppression-app-root', ); $this->register_app( $args ); } public function should_enqueue_dashboard() { $enabled = Feature_Flag_Manager::is_enabled( self::FEATURE_FLAG_DASHBOARD ); if ( ! $enabled ) { return false; } $page = filter_input( INPUT_GET, 'page' ); if ( ! is_string( $page ) ) { return false; } $page = htmlspecialchars( $page ); return $page === 'gravitysmtp-dashboard'; } public function should_enqueue_activity_log() { $page = filter_input( INPUT_GET, 'page' ); if ( ! is_string( $page ) ) { return false; } $page = htmlspecialchars( $page ); return $page === 'gravitysmtp-activity-log'; } public function should_enqueue_settings() { $page = filter_input( INPUT_GET, 'page' ); if ( ! is_string( $page ) ) { return false; } $page = htmlspecialchars( $page ); return $page === 'gravitysmtp-settings'; } public function should_enqueue_tools() { $page = filter_input( INPUT_GET, 'page' ); if ( ! is_string( $page ) ) { return false; } $page = htmlspecialchars( $page ); return $page === 'gravitysmtp-tools'; } public function should_enqueue_suppression() { $page = filter_input( INPUT_GET, 'page' ); if ( ! is_string( $page ) ) { return false; } $page = htmlspecialchars( $page ); return $page === 'gravitysmtp-suppression'; } protected function get_root_markup( $root ) { return '
'; } /** * Use our custom action name to inject the app. * * @return string */ protected function get_inject_action() { return 'gravitysmtp_app_body'; } }