227 lines
11 KiB
PHP
227 lines
11 KiB
PHP
<?php
|
|
|
|
namespace Gravity_Forms\Gravity_SMTP\Logging;
|
|
|
|
use Gravity_Forms\Gravity_SMTP\Apps\App_Service_Provider;
|
|
use Gravity_Forms\Gravity_SMTP\Apps\Config\Tools_Config;
|
|
use Gravity_Forms\Gravity_SMTP\Connectors\Connector_Service_Provider;
|
|
use Gravity_Forms\Gravity_SMTP\Data_Store\Const_Data_Store;
|
|
use Gravity_Forms\Gravity_SMTP\Data_Store\Data_Store_Router;
|
|
use Gravity_Forms\Gravity_SMTP\Data_Store\Opts_Data_Store;
|
|
use Gravity_Forms\Gravity_SMTP\Data_Store\Plugin_Opts_Data_Store;
|
|
use Gravity_Forms\Gravity_SMTP\Handler\Mail_Handler;
|
|
use Gravity_Forms\Gravity_SMTP\Logging\Config\Logging_Endpoints_Config;
|
|
use Gravity_Forms\Gravity_SMTP\Logging\Debug\Debug_Log_Event_Handler;
|
|
use Gravity_Forms\Gravity_SMTP\Logging\Debug\Debug_Logger;
|
|
use Gravity_Forms\Gravity_SMTP\Logging\Endpoints\Delete_Debug_Logs_Endpoint;
|
|
use Gravity_Forms\Gravity_SMTP\Logging\Endpoints\Delete_Email_Endpoint;
|
|
use Gravity_Forms\Gravity_SMTP\Logging\Endpoints\Delete_Events_Endpoint;
|
|
use Gravity_Forms\Gravity_SMTP\Logging\Endpoints\Get_Email_Message_Endpoint;
|
|
use Gravity_Forms\Gravity_SMTP\Logging\Endpoints\Get_Paginated_Debug_Log_Items_Endpoint;
|
|
use Gravity_Forms\Gravity_SMTP\Logging\Endpoints\Get_Paginated_Items_Endpoint;
|
|
use Gravity_Forms\Gravity_SMTP\Logging\Endpoints\Log_Item_Endpoint;
|
|
use Gravity_Forms\Gravity_SMTP\Logging\Endpoints\View_Log_Endpoint;
|
|
use Gravity_Forms\Gravity_SMTP\Logging\Log\Logger;
|
|
use Gravity_Forms\Gravity_SMTP\Logging\Log\WP_Mail_Logger;
|
|
use Gravity_Forms\Gravity_SMTP\Logging\Scheduling\Handler;
|
|
use Gravity_Forms\Gravity_SMTP\Utils\Attachments_Saver;
|
|
use Gravity_Forms\Gravity_Tools\Providers\Config_Service_Provider;
|
|
use Gravity_Forms\Gravity_Tools\Service_Container;
|
|
use Gravity_Forms\Gravity_Tools\Service_Provider;
|
|
use Gravity_Forms\Gravity_Tools\Utils\Utils_Service_Provider;
|
|
use Gravity_Forms\Gravity_SMTP\Models\Debug_Log_Model;
|
|
use Gravity_Forms\Gravity_Tools\Logging\DB_Logging_Provider;
|
|
use Gravity_Forms\Gravity_Tools\Logging\Parsers\File_Log_Parser;
|
|
|
|
class Logging_Service_Provider extends Config_Service_Provider {
|
|
|
|
const LOGGER = 'logger';
|
|
const WP_MAIL_LOGGER = 'wp_mail_logger';
|
|
const GET_PAGINATED_ITEMS_ENDPOINT = 'get_paginated_items_endpoint';
|
|
const GET_PAGINATED_DEBUG_LOG_ITEMS_ENDPOINT = 'get_paginated_debug_log_items_endpoint';
|
|
const DELETE_DEBUG_LOGS_ENDPOINT = 'delete_debug_logs_endpoint';
|
|
const DELETE_EMAIL_ENDPOINT = 'delete_email_endpoint';
|
|
const DELETE_EVENTS_ENDPOINT = 'delete_events_endpoint';
|
|
const GET_EMAIL_MESSAGE_ENDPOINT = 'get_email_message_endpoint';
|
|
const SCHEDULING_HANDLER = 'scheduling_handler';
|
|
const LOG_ITEM_ENDPOINT = 'log_item_endpoint';
|
|
const DEBUG_LOGGER = 'debug_logger_util';
|
|
const VIEW_DEBUG_LOG_ENDPOINT = 'view_debug_log_endpoint';
|
|
const DEBUG_LOG_DIR = 'debug_log_dir';
|
|
const DEBUG_LOG_FILEPATH = 'debug_log_filepath';
|
|
const DEBUG_LOG_MODEL = 'debug_log_model';
|
|
const DB_LOGGING_PROVIDER = 'db_logging_provider';
|
|
const DEBUG_LOG_EVENT_HANDLER = 'debug_log_event_handler';
|
|
|
|
const LOGGING_ENDPOINTS_CONFIG = 'logging_endpoints_config';
|
|
|
|
const RETENTION_ACTION_NAME = 'gravitysmtp_scheduler_handle_log_retention';
|
|
|
|
const DEBUG_LOG_RETENTION_CRON_HOOK = 'gravitysmtp_scheduler_handle_debug_retention';
|
|
|
|
protected $configs = array(
|
|
self::LOGGING_ENDPOINTS_CONFIG => Logging_Endpoints_Config::class,
|
|
);
|
|
|
|
public function register( Service_Container $container ) {
|
|
parent::register( $container );
|
|
|
|
$this->container->add( Connector_Service_Provider::DATA_STORE_CONST, function () {
|
|
return new Const_Data_Store();
|
|
} );
|
|
|
|
$this->container->add( Connector_Service_Provider::DATA_STORE_OPTS, function () {
|
|
return new Opts_Data_Store();
|
|
} );
|
|
|
|
$this->container->add( Connector_Service_Provider::DATA_STORE_PLUGIN_OPTS, function () {
|
|
return new Plugin_Opts_Data_Store();
|
|
} );
|
|
|
|
$this->container->add( Connector_Service_Provider::DATA_STORE_ROUTER, function () use ( $container ) {
|
|
return new Data_Store_Router( $container->get( Connector_Service_Provider::DATA_STORE_CONST ), $container->get( Connector_Service_Provider::DATA_STORE_OPTS ), $container->get( Connector_Service_Provider::DATA_STORE_PLUGIN_OPTS ) );
|
|
} );
|
|
|
|
$this->container->add( self::LOGGER, function () use ( $container ) {
|
|
return new Logger( $container->get( Connector_Service_Provider::LOG_DETAILS_MODEL ) );
|
|
} );
|
|
|
|
$this->container->add( self::WP_MAIL_LOGGER, function () use ( $container ) {
|
|
return new WP_Mail_Logger( $container->get( self::LOGGER ), $container->get( Connector_Service_Provider::EVENT_MODEL ), $container->get( Utils_Service_Provider::SOURCE_PARSER ), $container->get( Utils_Service_Provider::HEADER_PARSER ) );
|
|
} );
|
|
|
|
$this->container->add( self::DEBUG_LOG_MODEL, function () use ( $container ) {
|
|
return new Debug_Log_Model();
|
|
} );
|
|
|
|
$this->container->add( self::GET_PAGINATED_ITEMS_ENDPOINT, function () use ( $container ) {
|
|
return new Get_Paginated_Items_Endpoint( $container->get( Connector_Service_Provider::EVENT_MODEL ), $container->get( Utils_Service_Provider::RECIPIENT_PARSER ) );
|
|
} );
|
|
|
|
$this->container->add( self::GET_PAGINATED_DEBUG_LOG_ITEMS_ENDPOINT, function () use ( $container ) {
|
|
return new Get_Paginated_Debug_Log_Items_Endpoint( $container->get( self::DEBUG_LOG_MODEL ) );
|
|
} );
|
|
|
|
$this->container->add( self::DELETE_DEBUG_LOGS_ENDPOINT, function () use ( $container ) {
|
|
return new Delete_Debug_Logs_Endpoint( $container->get( self::DEBUG_LOG_MODEL ) );
|
|
} );
|
|
|
|
$this->container->add( self::DELETE_EMAIL_ENDPOINT, function () use ( $container ) {
|
|
return new Delete_Email_Endpoint( $container->get( Connector_Service_Provider::EVENT_MODEL ) );
|
|
} );
|
|
|
|
$this->container->add( self::DELETE_EVENTS_ENDPOINT, function () use ( $container ) {
|
|
return new Delete_Events_Endpoint( $container->get( Connector_Service_Provider::EVENT_MODEL ) );
|
|
} );
|
|
|
|
$this->container->add( self::GET_EMAIL_MESSAGE_ENDPOINT, function () use ( $container ) {
|
|
return new Get_Email_Message_Endpoint( $container->get( Connector_Service_Provider::EVENT_MODEL ) );
|
|
} );
|
|
|
|
$this->container->add( self::SCHEDULING_HANDLER, function () use ( $container ) {
|
|
return new Handler( $container->get( Connector_Service_Provider::DATA_STORE_ROUTER ), $container->get( Connector_Service_Provider::EVENT_MODEL ), $container->get( Connector_Service_Provider::LOG_DETAILS_MODEL ) );
|
|
} );
|
|
|
|
$this->container->add( self::DB_LOGGING_PROVIDER, function () use ( $container ) {
|
|
return new DB_Logging_Provider( $container->get( self::DEBUG_LOG_MODEL ) );
|
|
} );
|
|
|
|
$this->container->add( self::DEBUG_LOGGER, function () use ( $container ) {
|
|
$data = $container->get( Connector_Service_Provider::DATA_STORE_ROUTER );
|
|
$log_level = $data->get_plugin_setting( Tools_Config::SETTING_DEBUG_LOG_LEVEL, DB_Logging_Provider::DEBUG );
|
|
|
|
return new Debug_Logger( $container->get( self::DB_LOGGING_PROVIDER ), $log_level );
|
|
} );
|
|
|
|
$this->container->add( self::LOG_ITEM_ENDPOINT, function () use ( $container ) {
|
|
return new Log_Item_Endpoint( $container->get( self::DEBUG_LOGGER ) );
|
|
} );
|
|
|
|
$this->container->add( self::VIEW_DEBUG_LOG_ENDPOINT, function () use ( $container ) {
|
|
$debug_logger = $container->get( self::DEBUG_LOGGER );
|
|
$debug_model = $container->get( self::DEBUG_LOG_MODEL );
|
|
|
|
return new View_Log_Endpoint( $container->get( Connector_Service_Provider::DATA_STORE_ROUTER ), $debug_logger, $debug_model );
|
|
} );
|
|
|
|
$this->container->add( self::DEBUG_LOG_EVENT_HANDLER, function () use ( $container ) {
|
|
return new Debug_Log_Event_Handler( $container->get( self::DEBUG_LOGGER ), $container->get( Connector_Service_Provider::DATA_STORE_ROUTER ) );
|
|
} );
|
|
|
|
$this->container->add( Utils_Service_Provider::ATTACHMENTS_SAVER, function () use ( $container ) {
|
|
return new Attachments_Saver( $container->get( Logging_Service_Provider::DEBUG_LOGGER ) );
|
|
} );
|
|
}
|
|
|
|
public function init( Service_Container $container ) {
|
|
add_action( 'wp_ajax_' . Get_Paginated_Items_Endpoint::ACTION_NAME, function () use ( $container ) {
|
|
$container->get( self::GET_PAGINATED_ITEMS_ENDPOINT )->handle();
|
|
} );
|
|
|
|
add_action( 'wp_ajax_' . Get_Paginated_Debug_Log_Items_Endpoint::ACTION_NAME, function () use ( $container ) {
|
|
$container->get( self::GET_PAGINATED_DEBUG_LOG_ITEMS_ENDPOINT )->handle();
|
|
} );
|
|
|
|
add_action( 'wp_ajax_' . Delete_Debug_Logs_Endpoint::ACTION_NAME, function () use ( $container ) {
|
|
$container->get( self::DELETE_DEBUG_LOGS_ENDPOINT )->handle();
|
|
} );
|
|
|
|
add_action( 'wp_ajax_' . Delete_Email_Endpoint::ACTION_NAME, function () use ( $container ) {
|
|
$container->get( self::DELETE_EMAIL_ENDPOINT )->handle();
|
|
} );
|
|
|
|
add_action( 'wp_ajax_' . Delete_Events_Endpoint::ACTION_NAME, function () use ( $container ) {
|
|
$container->get( self::DELETE_EVENTS_ENDPOINT )->handle();
|
|
} );
|
|
|
|
add_action( 'wp_ajax_' . Get_Email_Message_Endpoint::ACTION_NAME, function () use ( $container ) {
|
|
$container->get( self::GET_EMAIL_MESSAGE_ENDPOINT )->handle();
|
|
} );
|
|
|
|
add_action( 'wp_ajax_' . Log_Item_Endpoint::ACTION_NAME, function () use ( $container ) {
|
|
$container->get( self::LOG_ITEM_ENDPOINT )->handle();
|
|
} );
|
|
|
|
add_action( 'wp_ajax_' . View_Log_Endpoint::ACTION_NAME, function () use ( $container ) {
|
|
$container->get( self::VIEW_DEBUG_LOG_ENDPOINT )->handle();
|
|
} );
|
|
|
|
add_action( 'wp_ajax_nopriv_' . View_Log_Endpoint::ACTION_NAME, function () use ( $container ) {
|
|
$container->get( self::VIEW_DEBUG_LOG_ENDPOINT )->handle();
|
|
} );
|
|
|
|
add_action( self::RETENTION_ACTION_NAME, function () use ( $container ) {
|
|
return $container->get( self::SCHEDULING_HANDLER )->run_log_retention();
|
|
} );
|
|
|
|
if ( ! Mail_Handler::is_minimally_configured() ) {
|
|
add_filter( 'wp_mail', function ( $mail_info ) use ( $container ) {
|
|
$container->get( self::WP_MAIL_LOGGER )->create_log( $mail_info );
|
|
|
|
return $mail_info;
|
|
} );
|
|
|
|
add_action( 'wp_mail_failed', function ( $wp_error ) use ( $container ) {
|
|
$container->get( self::WP_MAIL_LOGGER )->handle_failed( $wp_error );
|
|
} );
|
|
}
|
|
|
|
if ( ! wp_next_scheduled( self::RETENTION_ACTION_NAME ) ) {
|
|
wp_schedule_event( time(), 'daily', self::RETENTION_ACTION_NAME );
|
|
}
|
|
|
|
add_action( 'gravitysmtp_save_plugin_setting', function ( $setting, $value ) use ( $container ) {
|
|
$container->get( self::DEBUG_LOG_EVENT_HANDLER )->on_setting_update( $setting, $value );
|
|
}, 10, 2 );
|
|
|
|
if ( ! wp_next_scheduled( self::DEBUG_LOG_RETENTION_CRON_HOOK ) ) {
|
|
wp_schedule_event( time(), 'daily', self::DEBUG_LOG_RETENTION_CRON_HOOK );
|
|
}
|
|
|
|
add_action( self::DEBUG_LOG_RETENTION_CRON_HOOK, function () use ( $container ) {
|
|
$container->get( self::DEBUG_LOG_EVENT_HANDLER )->on_retention_cron();
|
|
} );
|
|
}
|
|
|
|
}
|