get( Logging_Service_Provider::DEBUG_LOG_MODEL );
$search_term = filter_input( INPUT_GET, 'search_term' );
$search_type = filter_input( INPUT_GET, 'search_type' );
if ( ! empty( $search_term ) ) {
$search_term = htmlspecialchars( $search_term );
}
if ( ! empty( $search_type ) ) {
$search_type = htmlspecialchars( $search_type );
}
$count = $debug_model->count( $search_term, $search_type );
$opts = $container->get( Connector_Service_Provider::DATA_STORE_ROUTER );
$per_page = $opts->get_plugin_setting( Save_Plugin_Settings_Endpoint::PARAM_PER_PAGE, 20 );
return array(
'components' => array(
'tools' => array(
'data' => array(
'version' => GF_GRAVITY_SMTP_VERSION,
'route_path' => admin_url( 'admin.php' ),
'nav_item_param_key' => 'tab',
'nav_items' => array(
array(
'param' => 'send-a-test',
'label' => esc_html__( 'Send a Test', 'gravitysmtp' ),
'icon' => 'beaker',
),
array(
'param' => 'scheduled-events',
'label' => esc_html__( 'Scheduled Events', 'gravitysmtp' ),
'icon' => 'clock',
),
array(
'param' => 'import-export',
'label' => esc_html__( 'Import/Export', 'gravitysmtp' ),
'icon' => 'switch-horizontal',
),
array(
'param' => 'debug-log',
'label' => esc_html__( 'Debug Log', 'gravitysmtp' ),
'icon' => 'debug',
),
array(
'param' => 'system-report',
'label' => esc_html__( 'System Report', 'gravitysmtp' ),
'icon' => 'report',
),
array(
'param' => 'permissions',
'label' => esc_html__( 'Permissions', 'gravitysmtp' ),
'icon' => 'closed-lock',
),
),
'send_a_test' => array(
'send_with_options' => array(),
),
'system_report' => $this->get_system_report(),
'system_report_clipboard' => $this->get_clipboard_string(),
'debug_log_settings' => $this->get_debug_log_settings(),
'debug_log' => array(
'ajax_grid_pagination_url' => trailingslashit( GF_GRAVITY_SMTP_PLUGIN_URL ) . 'includes/logging/endpoints/get-paginated-debug-log-items.php',
'data_grid' => array(
'columns' => $this->get_debug_log_columns(),
'column_style_props' => $this->get_debug_log_column_style_props(),
'data' => array(
'value' => $this->get_debug_log_data_rows(),
'default' => $this->get_debug_log_demo_data_rows(),
),
),
'initial_row_count' => isset( $count ) ? intval( $count ) : 0,
'initial_load_timestamp' => current_time( 'mysql', true ),
'rows_per_page' => $per_page,
),
'caps' => array(
Roles::VIEW_TOOLS => current_user_can( Roles::VIEW_TOOLS ),
Roles::VIEW_TOOLS_SENDATEST => current_user_can( Roles::VIEW_TOOLS_SENDATEST ),
Roles::VIEW_TOOLS_SYSTEMREPORT => current_user_can( Roles::VIEW_TOOLS_SYSTEMREPORT ),
Roles::VIEW_DEBUG_LOG => current_user_can( Roles::VIEW_DEBUG_LOG ),
),
),
'i18n' => array(
'error_alert_title' => esc_html__( 'Error Saving', 'gravitysmtp' ),
'error_alert_generic_message' => esc_html__( 'Could not save, please check your logs.', 'gravitysmtp' ),
'error_alert_close_text' => esc_html__( 'Close', 'gravitysmtp' ),
'debug_log' => array(
'top_heading' => esc_html__( 'Debug Log', 'gravitysmtp' ),
'data_grid' => array(
'top_heading' => esc_html__( 'Debug Results', 'gravitysmtp' ),
'clear_search_aria_label' => esc_html__( 'Clear search', 'gravitysmtp' ),
'empty_title' => esc_html__( 'No debug logs', 'gravitysmtp' ),
'empty_message' => esc_html__( 'You will see debug log details when they occur on your site.', 'gravitysmtp' ),
'grid_controls_search_button_label' => esc_html__( 'Search', 'gravitysmtp' ),
'grid_controls_search_placeholder' => esc_html__( 'Search', 'gravitysmtp' ),
'pagination_next' => esc_html__( 'Next', 'gravitysmtp' ),
'pagination_prev' => esc_html__( 'Previous', 'gravitysmtp' ),
'pagination_next_aria_label' => esc_html__( 'Next Page', 'gravitysmtp' ),
'pagination_prev_aria_label' => esc_html__( 'Previous Page', 'gravitysmtp' ),
'search_no_results_title' => esc_html__( 'No results found', 'gravitysmtp' ),
'search_no_results_message' => esc_html__( 'No results found for your search', 'gravitysmtp' ),
),
'details_dialog_heading' => esc_html__( 'Debug Log Details', 'gravitysmtp' ),
'details_dialog_event' => esc_html__( 'Event', 'gravitysmtp' ),
'details_dialog_date' => esc_html__( 'Date', 'gravitysmtp' ),
'details_dialog_log' => esc_html__( 'Log', 'gravitysmtp' ),
'snackbar_debug_log_error' => esc_html__( 'Error getting debug log for requested page', 'gravitysmtp' ),
),
'debug_messages' => array(
/* translators: %1$s is the body of the ajax request. */
'fetching_debug_log_page' => esc_html__( 'Fetching debug log page: %1$s', 'gravitysmtp' ),
/* translators: %1$s is the error message. */
'fetching_debug_log_page_error' => esc_html__( 'Error fetching debug log page: %1$s', 'gravitysmtp' ),
/* translators: %1$s is the body of the ajax request. */
'sending_test_email' => esc_html__( 'Sending test email: %1$s', 'gravitysmtp' ),
/* translators: %1$s is the error message. */
'sending_test_email_error' => esc_html__( 'Error sending test email: %1$s', 'gravitysmtp' ),
),
'send_a_test' => array(
'top_heading' => esc_html__( 'Send a Test', 'gravitysmtp' ),
'top_content' => esc_html__( 'Verify your SMTP setup to ensure reliable email delivery.', 'gravitysmtp' ),
'send_test_box_heading' => esc_html__( 'Send a Test Email', 'gravitysmtp' ),
'send_test_box_input_label' => esc_html__( 'Send To', 'gravitysmtp' ),
'send_test_box_input_placeholder' => esc_html__( 'Enter an email address', 'gravitysmtp' ),
'send_test_box_input_description' => esc_html__( 'Enter the email address you want to send the test email to.', 'gravitysmtp' ),
'send_test_box_from_label' => esc_html__( 'Send From', 'gravitysmtp' ),
'send_test_box_from_placeholder' => esc_html__( 'Enter an email address', 'gravitysmtp' ),
'send_test_box_from_description' => esc_html__( 'Enter the email address you want to send the test email from.', 'gravitysmtp' ),
'send_test_box_send_with_label' => esc_html__( 'Send With', 'gravitysmtp' ),
'send_test_box_send_with_description' => esc_html__( 'Choose which integration to send the test with.', 'gravitysmtp' ),
'send_test_box_send_as_html_label' => esc_html__( 'HTML', 'gravitysmtp' ),
'send_test_box_send_as_html_description' => esc_html__( 'Send the test email as HTML.', 'gravitysmtp' ),
'send_test_box_alerts_button_label' => esc_html__( 'Send Test', 'gravitysmtp' ),
'send_test_box_try_again_button_label' => esc_html__( 'Try Again', 'gravitysmtp' ),
'send_test_box_error_issue_heading' => esc_html__( 'Issue Detected:', 'gravitysmtp' ),
'send_test_box_error_possible_reasons_heading' => esc_html__( 'Possible Reasons for Error:', 'gravitysmtp' ),
'send_test_box_error_recommended_steps_heading' => esc_html__( 'Recommended Steps:', 'gravitysmtp' ),
'send_test_box_view_log_button_label' => esc_html__( 'View Full Error Log', 'gravitysmtp' ),
'send_test_box_copy_log_button_label' => esc_html__( 'Copy Error Log', 'gravitysmtp' ),
'send_test_box_copy_log_success_message' => esc_html__( 'Error log copied', 'gravitysmtp' ),
),
'system_report' => array(
'top_heading' => esc_html__( 'System Report', 'gravitysmtp' ),
'top_content' => esc_html__( 'The system report contains useful technical information to help troubleshooting issues.', 'gravitysmtp' ),
'copy_system_report' => esc_html__( 'Copy System Report', 'gravitysmtp' ),
'system_report_copied' => esc_html__( 'System report copied to clipboard', 'gravitysmtp' ),
),
),
'endpoints' => array(),
),
)
);
}
protected function get_debug_log_settings() {
$container = Gravity_SMTP::container();
/**
* @var Data_Store_Router $plugin_data_store
*/
$plugin_data_store = $container->get( Connector_Service_Provider::DATA_STORE_ROUTER );
return array(
self::SETTING_DEBUG_LOG_ENABLED => $plugin_data_store->get_plugin_setting( self::SETTING_DEBUG_LOG_ENABLED, false ),
self::SETTING_DEBUG_LOG_RETENTION => $plugin_data_store->get_plugin_setting( self::SETTING_DEBUG_LOG_RETENTION, '7' ),
);
}
protected function get_system_report() {
$gravity_smtp_data = $this->get_gravity_smtp_data();
$wordpress_environment_data = $this->get_wordpress_environment_data();
$active_theme_data = $this->get_active_theme_data();
$active_plugins_data = $this->get_active_plugins_data();
$web_server_data = $this->get_web_server_data();
$php_data = $this->get_php_data();
$database_server_data = $this->get_database_server_data();
$database_table_data = $this->get_database_table_data();
$date_and_time_data = $this->get_date_and_time_data();
$debug_data = $this->get_debug_data();
$constants_data = $this->get_defined_constants();
$integrations_data = $this->get_integrations_data();
$translations = $this->get_translations_data();
$system_report = array(
array(
'title' => esc_html__( 'Gravity SMTP', 'gravitysmtp' ),
'groups' => $this->get_groups( $gravity_smtp_data ),
'key' => 'gravitysmtp',
),
array(
'title' => esc_html__( 'WordPress Environment', 'gravitysmtp' ),
'groups' => $this->get_groups( $wordpress_environment_data ),
'key' => 'wordpress-environment',
),
);
if ( ! empty( $active_theme_data ) ) {
$system_report[] = array(
'title' => esc_html__( 'Active Theme', 'gravitysmtp' ),
'groups' => $this->get_groups( $active_theme_data, true ),
'key' => 'active-theme',
);
}
if ( ! empty( $active_plugins_data ) ) {
$system_report[] = array(
'title' => esc_html__( 'Active Plugins', 'gravitysmtp' ),
'groups' => $this->get_groups( $active_plugins_data, true ),
'key' => 'active-plugins',
);
}
$system_report = array_merge(
$system_report,
array(
array(
'title' => esc_html__( 'Web Server', 'gravitysmtp' ),
'groups' => $this->get_groups( $web_server_data ),
'key' => 'web-server',
),
array(
'title' => esc_html__( 'PHP', 'gravitysmtp' ),
'groups' => $this->get_groups( $php_data ),
'key' => 'php',
),
array(
'title' => esc_html__( 'Database Server', 'gravitysmtp' ),
'groups' => $this->get_groups( $database_server_data ),
'key' => 'database-server',
),
array(
'title' => esc_html__( 'Database Tables', 'gravitysmtp' ),
'groups' => $this->get_groups( $database_table_data ),
'key' => 'database-tables',
),
array(
'title' => esc_html__( 'Date and Time', 'gravitysmtp' ),
'groups' => $this->get_groups( $date_and_time_data ),
'key' => 'date-and-time',
),
array(
'title' => esc_html__( 'Debug Log', 'gravitysmtp' ),
'groups' => $this->get_groups( $debug_data ),
'key' => 'debug-log',
),
array(
'title' => esc_html__( 'Integration Settings', 'gravitysmtp' ),
'groups' => $this->get_groups( $integrations_data ),
'key' => 'integrations-settings',
),
array(
'title' => esc_html__( 'Translations', 'gravitysmtp' ),
'groups' => $this->get_groups( $translations ),
'key' => 'translations',
),
)
);
if ( ! empty( $constants_data ) ) {
$system_report[] = array(
'title' => esc_html__( 'Defined Constants', 'gravitysmtp' ),
'groups' => $this->get_groups( $constants_data ),
'key' => 'defined-constants',
);
}
return $system_report;
}
protected function get_groups( $data, $as_html = false ) {
return array_map( function( $data_item ) {
return array(
'terms' => array(
'component' => 'Text',
'props' => array(
'content' => $data_item['label'],
'size' => 'text-sm',
'weight' => 'semibold',
'tagName' => 'span',
'asHtml' => isset( $data_item['label_as_html'] ) ? $data_item['label_as_html'] : false,
),
),
'descriptions' => array(
'component' => 'Text',
'props' => array(
'content' => $data_item['value'],
'size' => 'text-sm',
'tagName' => 'span',
'asHtml' => isset( $data_item['value_as_html'] ) ? $data_item['value_as_html'] : false,
),
),
);
}, $data );
}
protected function get_translations_data() {
$items = array(
array(
'label' => esc_html__( 'Site Locale', 'gravitysmtp' ),
'label_export' => 'Site Locale',
'value' => get_locale(),
),
);
if ( function_exists( 'get_user_locale' ) ) {
$items[] = array(
// translators: %d: The ID of the currently logged in user.
'label' => sprintf( esc_html__( 'User (ID: %d) Locale', 'gravitysmtp' ), get_current_user_id() ),
'label_export' => sprintf( 'User (ID: %d) Locale', get_current_user_id() ),
'value' => get_user_locale(),
);
}
$translations = $this->get_installed_translations();
$items[] = array(
'label' => esc_html__( 'Installed Translations', 'gravitysmtp' ),
'label_export' => 'Installed Translations',
'value' => empty( $translations ) ? esc_html__( 'No translations installed', 'gravitysmtp' ) : implode( ', ', $translations ),
);
return $items;
}
protected function get_installed_translations() {
$domain = 'gravitysmtp';
$files = glob( WP_LANG_DIR . '/plugins/' . 'gravitysmtp-*.mo' );
if ( ! is_array( $files ) ) {
return array();
}
$translations = array();
foreach ( $files as $file ) {
$translations[ str_replace( $domain . '-', '', basename( $file, '.mo' ) ) ] = $file;
}
return array_keys( $translations );
}
protected function get_clipboard_string() {
$data = array(
array(
'title' => 'Gravity SMTP',
'data' => $this->get_gravity_smtp_data(),
),
array(
'title' => 'WordPress Environment',
'data' => $this->get_wordpress_environment_data(),
),
);
$active_theme_data = $this->get_active_theme_data();
if ( ! empty( $active_theme_data ) ) {
$data[] = array(
'title' => 'Active Theme',
'data' => $active_theme_data,
);
}
$active_plugins_data = $this->get_active_plugins_data();
if ( ! empty( $active_plugins_data ) ) {
$data[] = array(
'title' => 'Active Plugins',
'data' => $active_plugins_data,
);
}
$data = array_merge(
$data,
array(
array(
'title' => 'Web Server',
'data' => $this->get_web_server_data(),
),
array(
'title' => 'PHP',
'data' => $this->get_php_data(),
),
array(
'title' => 'Database Server',
'data' => $this->get_database_server_data(),
),
array(
'title' => 'Database Tables',
'data' => $this->get_database_table_data(),
),
array(
'title' => 'Date and Time',
'data' => $this->get_date_and_time_data(),
),
array(
'title' => 'Debug Log',
'data' => $this->get_debug_data( false ),
),
array(
'title' => 'Integration Settings',
'data' => $this->get_integrations_data(),
),
array(
'title' => 'Translations',
'data' => $this->get_translations_data(),
),
array(
'title' => 'Defined Constants',
'data' => $this->get_defined_constants(),
),
)
);
return array_reduce( $data, function( $carry, $item ) {
$carry .= $item['title'] . "\n";
if ( ! empty( $item['data'] ) ) {
foreach ( $item['data'] as $data_item ) {
if ( isset( $data_item['value_export'] ) ) {
$carry .= $data_item['label_export'] . ': ' . $data_item['value_export'] . "\n";
continue;
}
$carry .= $data_item['label_export'] . ': ' . $data_item['value'] . "\n";
}
}
$carry .= "\n";
return $carry;
}, '' );
}
protected function get_gravity_smtp_data() {
return array(
array(
'label' => esc_html__( 'Version', 'gravitysmtp' ),
'label_export' => 'Version',
'value' => GF_GRAVITY_SMTP_VERSION,
),
);
}
protected function get_wordpress_environment_data() {
$wp_cron_disabled = defined( 'DISABLE_WP_CRON' ) && DISABLE_WP_CRON;
$alternate_wp_cron = defined( 'ALTERNATE_WP_CRON' ) && ALTERNATE_WP_CRON;
$args = array(
'timeout' => 2,
'body' => 'test',
'cookies' => $_COOKIE,
'sslverify' => apply_filters( 'https_local_ssl_verify', false ),
);
$query_args = array(
'action' => Check_Background_Tasks_Endpoint::ACTION_NAME,
'security' => wp_create_nonce( Check_Background_Tasks_Endpoint::ACTION_NAME ),
);
$url = add_query_arg( $query_args, admin_url( 'admin-ajax.php' ) );
$response = wp_remote_post( $url, $args );
// Trims the background tasks response to prevent extraneous characters causing unexpected content in the response.
$background_tasks = trim( wp_remote_retrieve_body( $response ) ) == 'ok';
$filters_to_check = array(
'pre_wp_mail' => has_filter( 'pre_wp_mail' ),
);
$registered_filters = array_keys( array_filter( $filters_to_check ) );
return array(
array(
'label' => esc_html__( 'Home URL', 'gravitysmtp' ),
'label_export' => 'Home URL',
'value' => get_home_url(),
),
array(
'label' => esc_html__( 'Site URL', 'gravitysmtp' ),
'label_export' => 'Site URL',
'value' => get_site_url(),
),
array(
'label' => esc_html__( 'REST API Base URL', 'gravitysmtp' ),
'label_export' => 'REST API Base URL',
'value' => rest_url(),
),
array(
'label' => esc_html__( 'WordPress Version', 'gravitysmtp' ),
'label_export' => 'WordPress Version',
'value' => get_bloginfo( 'version' ),
),
array(
'label' => esc_html__( 'WordPress Multisite', 'gravitysmtp' ),
'label_export' => 'WordPress Multisite',
'value' => is_multisite() ? esc_html__( 'Yes', 'gravitysmtp' ) : esc_html__( 'No', 'gravitysmtp' ),
'value_export' => is_multisite() ? 'Yes' : 'No',
),
array(
'label' => esc_html__( 'WordPress Memory Limit', 'gravitysmtp' ),
'label_export' => 'WordPress Memory Limit',
'value' => WP_MEMORY_LIMIT,
),
array(
'label' => esc_html__( 'WordPress Debug Mode', 'gravitysmtp' ),
'label_export' => 'WordPress Debug Mode',
'value' => WP_DEBUG ? esc_html__( 'Yes', 'gravitysmtp' ) : esc_html__( 'No', 'gravitysmtp' ),
'value_export' => WP_DEBUG ? 'Yes' : 'No',
),
array(
'label' => esc_html__( 'WordPress Debug Log', 'gravitysmtp' ),
'label_export' => 'WordPress Debug Log',
'value' => WP_DEBUG_LOG ? esc_html__( 'Yes', 'gravitysmtp' ) : esc_html__( 'No', 'gravitysmtp' ),
'value_export' => WP_DEBUG_LOG ? 'Yes' : 'No',
),
array(
'label' => esc_html__( 'WordPress Script Debug Mode', 'gravitysmtp' ),
'label_export' => 'WordPress Script Debug Mode',
'value' => SCRIPT_DEBUG ? __( 'Yes', 'gravitysmtp' ) : __( 'No', 'gravitysmtp' ),
'value_export' => SCRIPT_DEBUG ? 'Yes' : 'No',
),
array(
'label' => esc_html__( 'WordPress Cron', 'gravitysmtp' ),
'label_export' => 'WordPress Cron',
'value' => ! $wp_cron_disabled ? __( 'Yes', 'gravitysmtp' ) : __( 'No', 'gravitysmtp' ),
'value_export' => ! $wp_cron_disabled ? 'Yes' : 'No',
),
array(
'label' => esc_html__( 'WordPress Alternate Cron', 'gravitysmtp' ),
'label_export' => 'WordPress Alternate Cron',
'value' => $alternate_wp_cron ? __( 'Yes', 'gravitysmtp' ) : __( 'No', 'gravitysmtp' ),
'value_export' => $alternate_wp_cron ? 'Yes' : 'No',
),
array(
'label' => esc_html__( 'Background Tasks', 'gravitysmtp' ),
'label_export' => 'Background tasks',
'value' => $background_tasks ? __( 'Yes', 'gravitysmtp' ) : __( 'No', 'gravitysmtp' ),
'value_export' => $background_tasks ? 'Yes' : 'No',
),
array(
'label' => esc_html__( 'Registered Filters', 'gravitysmtp' ),
'label_export' => 'Registered filters',
'value' => empty( $registered_filters ) ? esc_html__( 'N/A', 'gravitysmtp' ) : join( ', ', $registered_filters ),
'value_export' => empty( $registered_filters ) ? 'N/A' : join( ', ', $registered_filters ),
),
);
}
protected function get_active_theme_data() {
$themes = array();
$active_theme = wp_get_theme();
$parent_theme = $active_theme->parent();
// Add active theme data
$label = ! empty( $active_theme->get( 'ThemeURI' ) )
? '' . esc_html( $active_theme->get( 'Name' ) ) . ''
: esc_html( $active_theme->get( 'Name' ) );
if ( ! empty( $active_theme->get( 'AuthorURI' ) ) ) {
$author = '' . esc_html( $active_theme->get( 'Author' ) ) . '';
} else {
$author = preg_replace_callback( '/(]*>)/', function( $matches ) {
preg_match( '/class="[^"]*"/', $matches[1], $class_matches );
if ( empty( $class_matches ) ) {
return str_replace( 'get( 'Author' ) );
}
$value = wp_kses_post(
sprintf(
/* translators: 1: Theme author and URL. 2: Theme version. */
__( 'by %1$s - %2$s', 'gravitysmtp' ),
$author,
$active_theme->get( 'Version' )
)
);
$value_export = esc_html(
sprintf(
/* translators: 1: Theme author and URL. 2: Theme version. */
__( 'by %1$s - %2$s', 'gravitysmtp' ),
strip_tags( $active_theme->get( 'Author' ) ),
$active_theme->get( 'Version' )
)
);
$themes[] = array(
'label' => $label,
'label_export' => strip_tags( $active_theme->get( 'Name' ) ),
'label_as_html' => true,
'value' => $value,
'value_export' => $value_export,
'value_as_html' => true,
);
// Add parent theme data if it exists
if ( $parent_theme instanceof \WP_Theme ) {
$parent_label = ! empty( $parent_theme->get( 'ThemeURI' ) )
? '' . esc_html( $parent_theme->get( 'Name' ) ) . ' (Parent)'
: esc_html( $parent_theme->get( 'Name' ) . ' (Parent)' );
$parent_author_uri = $parent_theme->get( 'AuthorURI' );
if ( ! empty( $parent_theme->get( 'AuthorURI' ) ) ) {
$parent_author = '' . esc_html( $parent_theme->get( 'Author' ) ) . '';
} else {
$parent_author = preg_replace_callback( '/(]*>)/', function( $matches ) {
preg_match( '/class="[^"]*"/', $matches[1], $class_matches );
if ( empty( $class_matches ) ) {
return str_replace( 'get( 'Author' ) );
}
$parent_value = wp_kses_post(
sprintf(
/* translators: 1: Theme author and URL. 2: Theme version. */
__( 'by %1$s - %2$s', 'gravitysmtp' ),
$parent_author,
$parent_theme->get( 'Version' )
)
);
$parent_value_export = esc_html(
sprintf(
/* translators: 1: Theme author and URL. 2: Theme version. */
__( 'by %1$s - %2$s', 'gravitysmtp' ),
strip_tags( $parent_theme->get( 'Author' ) ),
$parent_theme->get( 'Version' )
)
);
$themes[] = array(
'label' => $parent_label,
'label_export' => strip_tags( $parent_theme->get( 'Name' ) . ' (Parent)' ),
'label_as_html' => true,
'value' => $parent_value,
'value_export' => $parent_value_export,
'value_as_html' => true,
);
}
return $themes;
}
protected function get_active_plugins_data() {
$plugins = array();
foreach ( get_plugins() as $plugin_path => $plugin ) {
// If plugin is not active, skip it.
if ( ! is_plugin_active( $plugin_path ) ) {
continue;
}
// If this plugin is Gravity SMTP, skip it.
if ( 'gravitysmtp/gravitysmtp.php' === $plugin_path ) {
continue;
}
$label = isset( $plugin['PluginURI'] ) && ! empty( $plugin['PluginURI'] )
? '' . esc_html( $plugin['Name'] ) . ''
: esc_html( $plugin['Name'] );
$author = $plugin['Author'];
if ( isset( $plugin['AuthorURI'] ) && ! empty( $plugin['AuthorURI'] ) ) {
$author = '' . esc_html( $plugin['Author'] ) . '';
} else {
$author = preg_replace_callback( '/(]*>)/', function( $matches ) {
preg_match( '/class="[^"]*"/', $matches[1], $class_matches );
if ( empty( $class_matches ) ) {
return str_replace( ' $label,
'label_export' => strip_tags( $plugin['Name'] ),
'label_as_html' => true,
'value' => $value,
'value_export' => $value_export,
'value_as_html' => true,
);
}
return $plugins;
}
protected function get_web_server_data() {
return array(
array(
'label' => esc_html__( 'Software', 'gravitysmtp' ),
'label_export' => 'Software',
'value' => esc_html( $_SERVER['SERVER_SOFTWARE'] ),
),
array(
'label' => esc_html__( 'Port', 'gravitysmtp' ),
'label_export' => 'Port',
'value' => esc_html( $_SERVER['SERVER_PORT'] ),
),
array(
'label' => esc_html__( 'Document Root', 'gravitysmtp' ),
'label_export' => 'Document Root',
'value' => esc_html( $_SERVER['DOCUMENT_ROOT'] ),
),
);
}
protected function get_php_data() {
$curl_version = null;
if ( function_exists('curl_version') ) {
$curl_version_info = curl_version();
if ( is_array( $curl_version_info ) && isset( $curl_version_info['version'] ) ) {
$curl_version = $curl_version_info['version'];
}
}
return array(
array(
'label' => esc_html__( 'Version', 'gravitysmtp' ),
'label_export' => 'Version',
'value' => esc_html( phpversion() ),
),
array(
'label' => esc_html__( 'Memory Limit', 'gravitysmtp' ) . ' (memory_limit)',
'label_export' => 'Memory Limit',
'value' => esc_html( ini_get( 'memory_limit' ) ),
),
array(
'label' => esc_html__( 'Maximum Execution Time', 'gravitysmtp' ) . ' (max_execution_time)',
'label_export' => 'Maximum Execution Time',
'value' => esc_html( ini_get( 'max_execution_time' ) ),
),
array(
'label' => esc_html__( 'Maximum File Upload Size', 'gravitysmtp' ) . ' (upload_max_filesize)',
'label_export' => 'Maximum File Upload Size',
'value' => esc_html( ini_get( 'upload_max_filesize' ) ),
),
array(
'label' => esc_html__( 'Maximum File Uploads', 'gravitysmtp' ) . ' (max_file_uploads)',
'label_export' => 'Maximum File Uploads',
'value' => esc_html( ini_get( 'max_file_uploads' ) ),
),
array(
'label' => esc_html__( 'Maximum Post Size', 'gravitysmtp' ) . ' (post_max_size)',
'label_export' => 'Maximum Post Size',
'value' => esc_html( ini_get( 'post_max_size' ) ),
),
array(
'label' => esc_html__( 'Maximum Input Variables', 'gravitysmtp' ) . ' (max_input_vars)',
'label_export' => 'Maximum Input Variables',
'value' => esc_html( ini_get( 'max_input_vars' ) ),
),
array(
'label' => esc_html__( 'cURL Enabled', 'gravitysmtp' ),
'label_export' => 'cURL Enabled',
'value' => function_exists( 'curl_init' )
? esc_html(
sprintf(
/* translators: %s: cURL version. */
__( 'Yes (version %s)', 'gravitysmtp' ),
$curl_version
)
)
: esc_html__( 'No', 'gravitysmtp' ),
'value_export' => function_exists( 'curl_init' ) ? sprintf( 'Yes (version %s)', $curl_version ) : 'No',
),
array(
'label' => esc_html__( 'OpenSSL', 'gravitysmtp' ),
'label_export' => 'OpenSSL',
'value' => defined( 'OPENSSL_VERSION_TEXT' ) ? OPENSSL_VERSION_TEXT . ' (' . OPENSSL_VERSION_NUMBER . ')' : __( 'No', 'gravitysmtp' ),
'value_export' => defined( 'OPENSSL_VERSION_TEXT' ) ? OPENSSL_VERSION_TEXT . ' (' . OPENSSL_VERSION_NUMBER . ')' : 'No',
),
array(
'label' => esc_html__( 'Mcrypt Enabled', 'gravitysmtp' ),
'label_export' => 'Mcrypt Enabled',
'value' => function_exists( 'mcrypt_encrypt' ) ? esc_html__( 'Yes', 'gravitysmtp' ) : esc_html__( 'No', 'gravitysmtp' ),
'value_export' => function_exists( 'mcrypt_encrypt' ) ? 'Yes' : 'No',
),
array(
'label' => esc_html__( 'Mbstring Enabled', 'gravitysmtp' ),
'label_export' => 'Mbstring Enabled',
'value' => function_exists( 'mb_strlen' ) ? esc_html__( 'Yes', 'gravitysmtp' ) : esc_html__( 'No', 'gravitysmtp' ),
'value_export' => function_exists( 'mb_strlen' ) ? 'Yes' : 'No',
),
array(
'label' => esc_html__( 'Loaded Extensions', 'gravitysmtp' ),
'label_export' => 'Loaded Extensions',
'value' => join( ', ', get_loaded_extensions() ),
),
);
}
protected function get_debug_data( $as_html = true ) {
$container = Gravity_SMTP::container();
/**
* @var Data_Store_Router $plugin_data_store
*/
$plugin_data_store = $container->get( Connector_Service_Provider::DATA_STORE_ROUTER );
$enabled = $plugin_data_store->get_plugin_setting( Tools_Config::SETTING_DEBUG_LOG_ENABLED, false );
$retention = $plugin_data_store->get_plugin_setting( Tools_Config::SETTING_DEBUG_LOG_RETENTION, '7' );
$link = 'N/A';
$enabled = ! ( $enabled === false || $enabled === 0 || $enabled === '0' || $enabled === 'false' );
if ( $enabled ) {
$key = get_option( View_Log_Endpoint::OPTION_VERIFICATION_KEY );
$path = sprintf( 'admin-ajax.php?action=%s&key=%s', View_Log_Endpoint::ACTION_NAME, $key );
if ( $as_html ) {
$link = '' . admin_url( $path ) . '';
} else {
$link = admin_url( $path );
}
}
return array(
array(
'label' => esc_html__( 'Debug Log Enabled', 'gravitysmtp' ),
'label_export' => 'Debug Log Enabled',
'value' => $enabled ? 'Yes' : 'No',
),
array(
'label' => esc_html__( 'Debug Retention Period', 'gravitysmtp' ),
'label_export' => 'Debug Retention Period',
'value' => $retention,
),
array(
'label' => esc_html__( 'Debug Log Link', 'gravitysmtp' ),
'label_as_html' => false,
'value_as_html' => true,
'label_export' => 'Debug Log Link',
'value' => $link,
),
);
}
protected function get_defined_constants() {
$defined_constants = array_filter( get_defined_constants(), function ( $constant ) {
return strpos( $constant, 'GRAVITYSMTP_' ) !== false;
}, ARRAY_FILTER_USE_KEY );
$connector_factory = Gravity_SMTP::$container->get( Connector_Service_Provider::CONNECTOR_FACTORY );
$connector_types = Gravity_SMTP::$container->get( Connector_Service_Provider::REGISTERED_CONNECTORS );
$sensitive_fields_by_connector = [];
foreach ( $connector_types as $name => $class ) {
$sensitive_fields_by_connector[ $name ] = array_fill_keys( $connector_factory->create( $name )->get_sensitive_fields(), true );
}
$sensitive_lookup = array_fill_keys( $this->sensitive_keys, true );
return array_map( function ( $key ) use ( $defined_constants, $sensitive_fields_by_connector, $sensitive_lookup ) {
$value = $defined_constants[ $key ];
$value_string = is_bool( $value ) ? ( $value ? 'true' : 'false' ) : (string) $value;
$setting_key = strtolower( str_replace( 'GRAVITYSMTP_', '', $key ) );
$should_obfuscate = isset( $sensitive_lookup[ $setting_key ] ) || $this->is_sensitive_connector_key( $setting_key, $sensitive_fields_by_connector );
return [
'label' => $key,
'label_export' => $key,
'value' => $should_obfuscate && ! empty( $value_string ) ? str_repeat( '*', strlen( $value_string ) ) : $value_string,
];
}, array_keys( $defined_constants ) );
}
protected function is_sensitive_connector_key( $setting_key, $sensitive_fields_by_connector ) {
foreach ( $sensitive_fields_by_connector as $connector_name => $sensitive_fields ) {
$connector_prefix_length = strlen( $connector_name ) + 1;
if ( strncmp( $setting_key, strtolower( $connector_name ) . '_', $connector_prefix_length ) === 0 ) {
return isset( $sensitive_fields[ substr( $setting_key, $connector_prefix_length ) ] );
}
if ( isset( $sensitive_fields[ $setting_key ] ) ) {
return true;
}
}
return false;
}
protected function get_integrations_data() {
$container = Gravity_SMTP::container();
$values = array();
/**
* @var Data_Store_Router $data
*/
$data = $container->get( Connector_Service_Provider::DATA_STORE_ROUTER );
$connector_statuses = $data->get_plugin_setting( Save_Connector_Settings_Endpoint::SETTING_ENABLED_CONNECTOR, array() );
$connector_names = $container->get( Connector_Service_Provider::NAME_MAP );
$enabled_connectors = array();
foreach ( $connector_names as $slug => $label ) {
if ( array_key_exists( $slug, $connector_statuses ) && $connector_statuses[ $slug ] === 'true' ) {
$enabled_connectors[] = $label;
}
}
if ( empty( $enabled_connectors ) ) {
$enabled_connectors[] = esc_html__( 'No Integrations Enabled', 'gravitysmtp' );
}
$values[] = array(
'label' => esc_html__( 'Enabled Integrations', 'gravitysmtp' ),
'label_export' => 'Enabled Integrations',
'value' => implode( ', ', $enabled_connectors ),
);
$primary_connector = $data->get_connector_status_of_type( Connector_Status_Enum::PRIMARY, __( 'No Primary Integration Enabled', 'gravitysmtp' ) );
$backup_connector = $data->get_connector_status_of_type( Connector_Status_Enum::BACKUP, __( 'No Backup Integration Enabled', 'gravitysmtp' ) );
$values[] = array(
'label' => esc_html__( 'Primary Integration', 'gravitysmtp' ),
'label_export' => 'Primary Integration',
'value' => isset( $connector_names[ $primary_connector ] ) ? $connector_names[ $primary_connector ] : $primary_connector,
);
$values[] = array(
'label' => esc_html__( 'Backup Integration', 'gravitysmtp' ),
'label_export' => 'Backup Integration',
'value' => isset( $connector_names[ $backup_connector ] ) ? $connector_names[ $backup_connector ] : $backup_connector,
);
return $values;
}
protected function get_database_server_data() {
global $wpdb;
$db_version = Common::get_db_version();
$db_type = Common::get_dbms_type();
return array(
array(
'label' => esc_html__( 'Database Management System', 'gravitysmtp' ),
'label_export' => 'Database Management System',
'value' => esc_html( $db_type ),
),
array(
'label' => esc_html__( 'Version', 'gravitysmtp' ),
'label_export' => 'Version',
'value' => esc_html( $db_version ),
),
array(
'label' => esc_html__( 'Database Character Set', 'gravitysmtp' ),
'label_export' => 'Database Character Set',
'value' => esc_html( ( Common::get_dbms_type() === 'SQLite' ) ? $wpdb->charset : $wpdb->get_var( 'SELECT @@character_set_database' ) ),
),
array(
'label' => esc_html__( 'Database Collation', 'gravitysmtp' ),
'label_export' => 'Database Collation',
'value' => esc_html( ( Common::get_dbms_type() === 'SQLite' ) ? ( empty( $wpdb->collate ) ? 'N/A' : $wpdb->collate ) : $wpdb->get_var( 'SELECT @@collation_database' ) ),
),
);
}
protected function get_database_table_data() {
global $wpdb;
$tables = Gravity_SMTP::get_table_names();
$data = array();
foreach ( $tables as $table ) {
$full_table_name = $wpdb->prefix . $table;
$table_exists = $wpdb->get_var( "SHOW TABLES LIKE '{$full_table_name}'" ) === $full_table_name;
$data[] = array(
'label' => $table,
'label_export' => $table,
'value' => $table_exists ? esc_html__( 'Exists', 'gravitysmtp' ) : esc_html__( 'Missing', 'gravitysmtp' ),
'value_export' => $table_exists ? 'Exists' : 'Missing',
);
}
return $data;
}
protected function get_date_and_time_data() {
global $wpdb;
$db_date = $wpdb->get_var( 'SELECT utc_timestamp()' );
$php_date = date( 'Y-m-d H:i:s' );
$date_option = trim( get_option( 'date_format' ) );
$time_option = trim( get_option( 'time_format' ) );
$date_format = $date_option ? $date_option : 'Y-m-d';
$time_format = $time_option ? $time_option : 'H:i';
$gmt_db_date = mysql2date( 'G', $db_date );
$local_db_date = strtotime( get_date_from_gmt( gmdate( 'Y-m-d H:i:s', $gmt_db_date ) ) );
$formatted_local_db_date = sprintf(
/* translators: 1: date, 2: time */
__( '%1$s at %2$s', 'gravitysmtp' ),
date_i18n( $date_format, $local_db_date, true ),
date_i18n( $time_format, $local_db_date, true )
);
$gmt_php_date = mysql2date( 'G', $php_date );
$local_php_date = strtotime( get_date_from_gmt( gmdate( 'Y-m-d H:i:s', $gmt_php_date ) ) );
$formatted_local_php_date = sprintf(
/* translators: 1: date, 2: time */
__( '%1$s at %2$s', 'gravitysmtp' ),
date_i18n( $date_format, $local_php_date, true ),
date_i18n( $time_format, $local_php_date, true )
);
return array(
array(
'label' => esc_html__( 'WordPress (Local) Timezone', 'gravitysmtp' ),
'label_export' => 'WordPress (Local) Timezone',
'value' => $this->get_timezone(),
),
array(
'label' => esc_html__( 'MySQL - Universal time (UTC)', 'gravitysmtp' ),
'label_export' => 'MySQL (UTC)',
'value' => esc_html( $db_date ),
),
array(
'label' => esc_html__( 'MySQL - Local time', 'gravitysmtp' ),
'label_export' => 'MySQL (Local)',
'value' => esc_html( $formatted_local_db_date ),
),
array(
'label' => esc_html__( 'PHP - Universal time (UTC)', 'gravitysmtp' ),
'label_export' => 'PHP (UTC)',
'value' => esc_html( $php_date ),
),
array(
'label' => esc_html__( 'PHP - Local time', 'gravitysmtp' ),
'label_export' => 'PHP (Local)',
'value' => esc_html( $formatted_local_php_date ),
),
);
}
protected function get_timezone() {
$tzstring = get_option( 'timezone_string' );
// Remove old Etc mappings. Fallback to gmt_offset.
if ( false !== strpos( $tzstring, 'Etc/GMT' ) ) {
$tzstring = '';
}
if ( empty( $tzstring ) ) { // Create a UTC+- zone if no timezone string exists
$current_offset = get_option( 'gmt_offset' );
if ( 0 == $current_offset ) {
$tzstring = 'UTC+0';
} elseif ( $current_offset < 0 ) {
$tzstring = 'UTC' . $current_offset;
} else {
$tzstring = 'UTC+' . $current_offset;
}
}
return $tzstring;
}
protected function get_debug_log_columns() {
$columns = array(
array(
'component' => 'Text',
'hideWhenLoading' => true,
'key' => 'id',
'props' => array(
'content' => esc_html__( 'ID', 'gravitysmtp' ),
'size' => 'text-sm',
'weight' => 'medium',
),
'sortable' => true,
'variableLoader' => true,
),
array(
'component' => 'Text',
'hideWhenLoading' => true,
'key' => 'status',
'props' => array(
'content' => esc_html__( 'Status', 'gravitysmtp' ),
'size' => 'text-sm',
'weight' => 'medium',
),
'sortable' => true,
'variableLoader' => true,
),
array(
'component' => 'Text',
'hideWhenLoading' => true,
'key' => 'date',
'props' => array(
'content' => __( 'Date & Time', 'gravitysmtp' ),
'size' => 'text-sm',
'weight' => 'medium',
),
'sortable' => true,
'variableLoader' => true,
),
array(
'component' => 'Text',
'hideWhenLoading' => true,
'key' => 'log',
'props' => array(
'content' => esc_html__( 'Log', 'gravitysmtp' ),
'size' => 'text-sm',
'weight' => 'medium',
),
'sortable' => true,
'variableLoader' => true,
),
array(
'component' => 'Text',
'hideWhenLoading' => true,
'key' => 'actions',
'props' => array(
'content' => esc_html__( 'Actions', 'gravitysmtp' ),
'size' => 'text-sm',
'weight' => 'medium',
),
'sortable' => true,
'variableLoader' => true,
),
);
return apply_filters( 'gravitysmtp_debug_log_columns', $columns );
}
protected function get_debug_log_column_style_props() {
$props = array(
'id' => array( 'flex' => '0 0 60px' ),
'status' => array( 'flex' => '0 0 92px' ),
'date' => array( 'flex' => '0 0 188px' ),
'log' => array( 'flexBasis' => 'auto' ),
'actions' => array( 'flex' => '0 0 84px' ),
);
return apply_filters( 'gravitysmtp_debug_log_column_style_props', $props );
}
protected function get_debug_log_data_rows() {
$container = Gravity_SMTP::container();
/**
* @var Debug_Log_Model $debug_model
*/
$debug_model = $container->get( Logging_Service_Provider::DEBUG_LOG_MODEL );
$opts = Gravity_SMTP::container()->get( Connector_Service_Provider::DATA_STORE_ROUTER );
$current_page = filter_input( INPUT_GET, 'log_page', FILTER_SANITIZE_NUMBER_INT );
if ( empty( $current_page ) ) {
$current_page = 1;
}
$search_term = filter_input( INPUT_GET, 'search_term' );
$search_type = filter_input( INPUT_GET, 'search_type' );
if ( ! empty( $search_term ) ) {
$search_term = htmlspecialchars( $search_term );
}
if ( ! empty( $search_type ) ) {
$search_type = htmlspecialchars( $search_type );
}
$per_page = $opts->get_plugin_setting( Save_Plugin_Settings_Endpoint::PARAM_PER_PAGE, 20 );
$lines = $debug_model->paginate( $current_page, $per_page, false, $search_term, $search_type );
return $debug_model->lines_as_data_grid( $lines );
}
protected function get_debug_log_demo_data_rows() {
return array(
array(
'id' => array(
'component' => 'Text',
'props' => array(
'content' => '1',
'size' => 'text-xs',
'weight' => 'medium',
)
),
'status' => array(
'component' => 'StatusIndicator',
'props' => array(
'hasDot' => false,
'label' => 'Debug',
'status' => 'active',
),
),
'date' => array(
'component' => 'Text',
'props' => array(
'content' => '2021-07-01 at 12:00 am',
'size' => 'text-sm',
),
),
'log' => array(
'component' => 'Button',
'props' => array(
'action' => 'view',
'customClasses' => array( 'gravitysmtp-tools-app__debug-log-table-subject' ),
'data' => array( 'id' => 1 ),
'disabled' => false,
'label' => 'Gravity\\GravitySMTP\\Internal\\DataStores\\System\\DataSynchronizer::get_current_orders()',
'type' => 'unstyled',
),
),
'actions' => array(
'component' => 'Box',
'components' => array(
array(
'component' => 'Button',
'props' => array(
'action' => 'view',
'customClasses' => array( 'gravitysmtp-tools-app__debug-log-table-action' ),
'data' => array( 'id' => 1 ),
'disabled' => false,
'icon' => 'information-circle',
'iconPrefix' => 'gravity-component-icon',
'label' => 'View',
'size' => 'size-height-s',
'type' => 'icon-white',
),
),
),
),
),
array(
'id' => array(
'component' => 'Text',
'props' => array(
'content' => '2',
'size' => 'text-xs',
'weight' => 'medium',
)
),
'status' => array(
'component' => 'StatusIndicator',
'props' => array(
'hasDot' => false,
'label' => 'Fatal',
'status' => 'error',
),
),
'date' => array(
'component' => 'Text',
'props' => array(
'content' => '2022-09-25 at 7:33 am',
'size' => 'text-sm',
),
),
'log' => array(
'component' => 'Button',
'props' => array(
'action' => 'view',
'customClasses' => array( 'gravitysmtp-tools-app__debug-log-table-subject' ),
'data' => array( 'id' => 2 ),
'disabled' => false,
'label' => 'Gravity\\GravitySMTP\\Internal\\DataStores\\System\\DataSynchronizer::get_current_orders()',
'type' => 'unstyled',
),
),
'actions' => array(
'component' => 'Box',
'components' => array(
array(
'component' => 'Button',
'props' => array(
'action' => 'view',
'customClasses' => array( 'gravitysmtp-tools-app__debug-log-table-action' ),
'data' => array( 'id' => 2 ),
'disabled' => false,
'icon' => 'information-circle',
'iconPrefix' => 'gravity-component-icon',
'label' => 'View',
'size' => 'size-height-s',
'type' => 'icon-white',
),
),
),
),
),
array(
'id' => array(
'component' => 'Text',
'props' => array(
'content' => '3',
'size' => 'text-xs',
'weight' => 'medium',
)
),
'status' => array(
'component' => 'StatusIndicator',
'props' => array(
'hasDot' => false,
'label' => 'Error',
'status' => 'error',
),
),
'date' => array(
'component' => 'Text',
'props' => array(
'content' => '2022-11-04 at 4:56 pm',
'size' => 'text-sm',
),
),
'log' => array(
'component' => 'Button',
'props' => array(
'action' => 'view',
'customClasses' => array( 'gravitysmtp-tools-app__debug-log-table-subject' ),
'data' => array( 'id' => 3 ),
'disabled' => false,
'label' => 'Gravity\\GravitySMTP\\Internal\\DataStores\\System\\DataSynchronizer::get_current_orders()',
'type' => 'unstyled',
),
),
'actions' => array(
'component' => 'Box',
'components' => array(
array(
'component' => 'Button',
'props' => array(
'action' => 'view',
'customClasses' => array( 'gravitysmtp-tools-app__debug-log-table-action' ),
'data' => array( 'id' => 3 ),
'disabled' => false,
'icon' => 'information-circle',
'iconPrefix' => 'gravity-component-icon',
'label' => 'View',
'size' => 'size-height-s',
'type' => 'icon-white',
),
),
),
),
),
array(
'id' => array(
'component' => 'Text',
'props' => array(
'content' => '4',
'size' => 'text-xs',
'weight' => 'medium',
)
),
'status' => array(
'component' => 'StatusIndicator',
'props' => array(
'hasDot' => false,
'label' => 'Info',
'status' => 'gray',
),
),
'date' => array(
'component' => 'Text',
'props' => array(
'content' => '2023-01-03 at 1:12 pm',
'size' => 'text-sm',
),
),
'log' => array(
'component' => 'Button',
'props' => array(
'action' => 'view',
'customClasses' => array( 'gravitysmtp-tools-app__debug-log-table-subject' ),
'data' => array( 'id' => 4 ),
'disabled' => false,
'label' => 'Gravity\\GravitySMTP\\Internal\\DataStores\\System\\DataSynchronizer::get_current_orders()',
'type' => 'unstyled',
),
),
'actions' => array(
'component' => 'Box',
'components' => array(
array(
'component' => 'Button',
'props' => array(
'action' => 'view',
'customClasses' => array( 'gravitysmtp-tools-app__debug-log-table-action' ),
'data' => array( 'id' => 4 ),
'disabled' => false,
'icon' => 'information-circle',
'iconPrefix' => 'gravity-component-icon',
'label' => 'View',
'size' => 'size-height-s',
'type' => 'icon-white',
),
),
),
),
),
array(
'id' => array(
'component' => 'Text',
'props' => array(
'content' => '5',
'size' => 'text-xs',
'weight' => 'medium',
)
),
'status' => array(
'component' => 'StatusIndicator',
'props' => array(
'hasDot' => false,
'label' => 'Warning',
'status' => 'warning',
),
),
'date' => array(
'component' => 'Text',
'props' => array(
'content' => '2023-02-03 at 6:01 am',
'size' => 'text-sm',
),
),
'log' => array(
'component' => 'Button',
'props' => array(
'action' => 'view',
'customClasses' => array( 'gravitysmtp-tools-app__debug-log-table-subject' ),
'data' => array( 'id' => 5 ),
'disabled' => false,
'label' => 'Gravity\\GravitySMTP\\Internal\\DataStores\\System\\DataSynchronizer::get_current_orders()',
'type' => 'unstyled',
),
),
'actions' => array(
'component' => 'Box',
'components' => array(
array(
'component' => 'Button',
'props' => array(
'action' => 'view',
'customClasses' => array( 'gravitysmtp-tools-app__debug-log-table-action' ),
'data' => array( 'id' => 5 ),
'disabled' => false,
'icon' => 'information-circle',
'iconPrefix' => 'gravity-component-icon',
'label' => 'View',
'size' => 'size-height-s',
'type' => 'icon-white',
),
),
),
),
),
);
}
}