Files

587 lines
23 KiB
PHP
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?php
/**
* View: Help
*
* WSAL help page.
*
* @since 1.0.0
* @package wsal
* @subpackage views
*/
use WSAL\Helpers\WP_Helper;
use WSAL\Controllers\Connection;
use WSAL\Helpers\Settings_Helper;
use WSAL\Entities\Metadata_Entity;
use WSAL\Entities\Occurrences_Entity;
use WSAL\Helpers\Plugin_Settings_Helper;
// Exit if accessed directly.
if ( ! defined( 'ABSPATH' ) ) {
exit;
}
/**
* Help Page.
*
* - Plugin Support
* - Plugin Documentation
*
* @package wsal
* @subpackage views
*/
class WSAL_Views_Help extends WSAL_AbstractView {
/**
* WSAL Help Tabs.
*
* @var array
*/
private $wsal_help_tabs = array();
/**
* Current Help Tab.
*
* @var string
*/
private $current_tab = '';
/**
* Constructor.
*
* @param WpSecurityAuditLog $plugin Plugin instance.
*/
public function __construct( $plugin ) {
global $wsal_class;
parent::__construct( $wsal_class );
\add_action( 'admin_init', array( $this, 'setup_help_tabs' ) );
}
/**
* Setup help page tabs.
*/
public function setup_help_tabs() {
$page = isset( $_GET['page'] ) ? sanitize_text_field( wp_unslash( $_GET['page'] ) ) : false;
// Verify that the current page is WSAL settings page.
if ( empty( $page ) || $this->get_safe_view_name() !== $page ) {
return;
}
// Tab links.
$wsal_help_tabs = array(
'help' => array(
'name' => esc_html__( 'Help', 'wp-security-audit-log' ),
'link' => $this->get_url(),
'render' => array( $this, 'tab_help' ),
'priority' => 10,
),
);
if ( Settings_Helper::current_user_can( 'edit' ) ) {
$wsal_help_tabs['contact'] = array(
'name' => esc_html__( 'Contact Us', 'wp-security-audit-log' ),
'link' => add_query_arg( 'tab', 'contact', $this->get_url() ),
'render' => array( $this, 'tab_contact_us' ),
'priority' => 15,
);
$wsal_help_tabs['system-info'] = array(
'name' => esc_html__( 'System Info', 'wp-security-audit-log' ),
'link' => add_query_arg( 'tab', 'system-info', $this->get_url() ),
'render' => array( $this, 'tab_system_info' ),
'priority' => 20,
);
}
/**
* Filter: `wsal_help_tabs`
*
* Help tabs structure:
* $wsal_help_tabs['unique-tab-id'] = array(
* 'name' => Name of the tab,
* 'link' => Link of the tab,
* 'render' => This function is used to render HTML elements in the tab,
* 'priority' => Priority of the tab,
* );
*
* @param array $wsal_help_tabs Array of WSAL Help Tabs.
*/
$wsal_help_tabs = apply_filters( 'wsal_help_tabs', $wsal_help_tabs );
// Sort by priority.
array_multisort( array_column( $wsal_help_tabs, 'priority' ), SORT_ASC, $wsal_help_tabs );
$this->wsal_help_tabs = $wsal_help_tabs;
// Get the current tab.
$current_tab = ( isset( $_GET['tab'] ) ) ? \sanitize_text_field( \wp_unslash( $_GET['tab'] ) ) : null;
$this->current_tab = empty( $current_tab ) ? 'help' : $current_tab;
}
/**
* {@inheritDoc}
*/
public function get_title() {
return esc_html__( 'Help', 'wp-security-audit-log' );
}
/**
* {@inheritDoc}
*/
public function get_icon() {
return 'dashicons-sos';
}
/**
* {@inheritDoc}
*/
public function get_name() {
return esc_html__( 'Help & Contact Us', 'wp-security-audit-log' );
}
/**
* {@inheritDoc}
*/
public function get_weight() {
return 9;
}
/**
* {@inheritDoc}
*/
public function header() {
wp_enqueue_style(
'extensions',
WSAL_BASE_URL . 'css/extensions.css',
array(),
WSAL_VERSION
);
}
/**
* {@inheritDoc}
*/
public function render() {
$can_current_user_edit = Settings_Helper::current_user_can( 'edit' );
?>
<nav id="wsal-tabs" class="nav-tab-wrapper">
<?php
foreach ( $this->wsal_help_tabs as $tab_id => $tab ) :
if ( 'system-info' !== $this->current_tab || ( 'system-info' === $this->current_tab && $can_current_user_edit ) ) :
?>
<a href="<?php echo esc_url( $tab['link'] ); ?>" class="nav-tab <?php echo ( $tab_id === $this->current_tab ) ? 'nav-tab-active' : false; ?>"><?php echo esc_html( $tab['name'] ); ?></a>
<?php
endif;
endforeach;
?>
</nav>
<div class="nav-tabs">
<div class="wsal-help-sidebar our-wordpress-plugins side-bar"><?php $this->sidebar(); ?></div>
<div class="wsal-help-main">
<?php
if ( ! empty( $this->current_tab ) && ! empty( $this->wsal_help_tabs[ $this->current_tab ]['render'] ) ) {
if ( 'system-info' !== $this->current_tab || ( 'system-info' === $this->current_tab && $can_current_user_edit ) ) {
call_user_func( $this->wsal_help_tabs[ $this->current_tab ]['render'] );
}
}
?>
</div>
</div>
<?php
}
/**
* Tab: Help.
*/
public function tab_help() {
?>
<div class="wsal-help-section">
<h2 class="wsal-tab__heading"><?php esc_html_e( 'Getting Started', 'wp-security-audit-log' ); ?></h2>
<p><?php esc_html_e( 'Getting started with WP Activity Log is really easy; once the plugin is installed it will automatically keep a log of everything that is happening on your website and you do not need to do anything. Watch the video below for a quick overview of the plugin.', 'wp-security-audit-log' ); ?></p>
<p><iframe class="wsal-youtube-embed" width="100%" height="315" src="https://www.youtube.com/embed/pgFEMIvKFTA?rel=0" frameborder="0" allowfullscreen></iframe></p>
</div>
<div class="wsal-help-section">
<h2 class="wsal-tab__heading"><?php \esc_html_e( 'Do you need help or want to report an issue?', 'wp-security-audit-log' ); ?></h2>
<?php if ( wsal_freemius()->is_premium() ) : ?>
<p>
<?php \esc_html_e( "If you've encountered a problem or would like to report an issue while using WP Activity Log, click the button below to open a support ticket. As a Premium user, you receive dedicated 1-to-1 email support.", 'wp-security-audit-log' ); ?>
</p>
<p>
<a class="button" rel="noopener noreferrer" href="<?php echo \esc_url( 'https://melapress.com/wordpress-activity-log/pricing/?utm_source=plugin&utm_medium=wsal&utm_campaign=about-us-premium-support' ); ?>" target="_blank"><?php \esc_html_e( 'Open a support ticket', 'wp-security-audit-log' ); ?></a>
</p>
<?php else : ?>
<p>
<?php \esc_html_e( "If you've encountered a problem or have something to report while using WP Activity Log, support for the free plugin users is provided via the plugin support forums. Dedicated 1-to-1 email support is available for premium users.", 'wp-security-audit-log' ); ?>
</p>
<p>
<a class="button" rel="noopener noreferrer" href="<?php echo \esc_url( 'https://wordpress.org/support/plugin/wp-security-audit-log' ); ?>" target="_blank"><?php \esc_html_e( 'Free Support Forums', 'wp-security-audit-log' ); ?></a>
&nbsp;
<a class="button" rel="noopener noreferrer" href="<?php echo \esc_url( 'https://melapress.com/wordpress-activity-log/pricing/?utm_source=plugin&utm_medium=wsal&utm_campaign=about-us-premium-support-free-user' ); ?>" target="_blank"><?php \esc_html_e( 'Upgrade to Get 1-to-1 Email Support', 'wp-security-audit-log' ); ?></a>
</p>
<?php endif; ?>
</div>
<div class="wsal-help-section">
<h2 class="wsal-tab__heading"><?php esc_html_e( 'Plugin Documentation', 'wp-security-audit-log' ); ?></h2>
<p>
<?php esc_html_e( 'For more technical information about the WP Activity Log plugin please visit the plugins knowledge base.', 'wp-security-audit-log' ); ?>
<?php esc_html_e( 'Refer to the list of WordPress security events for a complete list of Events and IDs that the plugin uses to keep a log of all the changes in the WordPress activity log.', 'wp-security-audit-log' ); ?>
</p><p>
<a class="button" rel="noopener noreferrer" href="https://melapress.com/wordpress-activity-log/?utm_source=plugin&utm_medium=wsal&utm_campaign=about-us-website-link" target="_blank"><?php esc_html_e( 'Plugin Website', 'wp-security-audit-log' ); ?></a>
<a class="button" rel="noopener noreferrer" href="https://melapress.com/support/kb/?utm_source=plugin&utm_medium=wsal&utm_campaign=about-us-kb-link" target="_blank"><?php esc_html_e( 'Knowledge Base', 'wp-security-audit-log' ); ?></a>
<a class="button" rel="noopener noreferrer" href="https://melapress.com/support/kb/wp-activity-log-list-event-ids/?utm_source=plugin&utm_medium=wsal&utm_campaign=about-us-events-ids-link" target="_blank"><?php esc_html_e( 'List of activity logs event IDs', 'wp-security-audit-log' ); ?></a>
</p>
</div>
<div class="wsal-help-section">
<h2 class="wsal-tab__heading"><?php esc_html_e( 'Rate WP Activity Log', 'wp-security-audit-log' ); ?></h2>
<p>
<?php esc_html_e( 'We work really hard to deliver a plugin that enables you to keep a record of all the changes that are happening on your WordPress.', 'wp-security-audit-log' ); ?>
<?php esc_html_e( 'It takes thousands of man-hours every year and endless amount of dedication to research, develop and maintain the free edition of WP Activity Log.', 'wp-security-audit-log' ); ?>
<?php esc_html_e( 'Therefore if you like what you see, and find WP Activity Log useful we ask you nothing more than to please rate our plugin.', 'wp-security-audit-log' ); ?>
<?php esc_html_e( 'We appreciate every star!', 'wp-security-audit-log' ); ?>
</p>
<p>
<a class="rating-link" rel="noopener noreferrer" href="https://en-gb.wordpress.org/plugins/wp-security-audit-log/#reviews" target="_blank">
<span class="dashicons dashicons-star-filled"></span>
<span class="dashicons dashicons-star-filled"></span>
<span class="dashicons dashicons-star-filled"></span>
<span class="dashicons dashicons-star-filled"></span>
<span class="dashicons dashicons-star-filled"></span>
</a>
<a class="button" rel="noopener noreferrer" href="https://en-gb.wordpress.org/plugins/wp-security-audit-log/#reviews" target="_blank"><?php esc_html_e( 'Rate Plugin', 'wp-security-audit-log' ); ?></a>
</p>
</div>
<?php
}
/**
* Tab: Contact us.
*/
public function tab_contact_us() {
?>
<h3 class="wsal-tab__heading"><?php esc_html_e( 'Contact Us', 'wp-security-audit-log' ); ?></h3>
<style type="text/css">
.fs-secure-notice {
position: relative !important;
top: 0 !important;
left: 0 !important;
}
.fs-full-size-wrapper {
margin: 10px 20px 0 2px !important;
}
</style>
<?php
if ( $freemius_id = wsal_freemius()->get_id() ) { // phpcs:ignore Squiz.PHP.DisallowMultipleAssignments.FoundInControlStructure
$vars = array( 'id' => $freemius_id );
echo fs_get_template( 'contact.php', $vars ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
} else {
echo '<p>';
printf(
/* translators: Link to our contact form */
esc_html__( 'Please refer to the Help tab for links and information on how to open a support ticket, or access the database. If you have any other queries, please use our %1$scontact form %2$s', 'wp-security-audit-log' ),
'<a style="text-decoration:underline" href="https://melapress.com/contact/?utm_source=plugin&utm_medium=link&utm_campaign=wsal" target="_blank">',
'</a>'
);
echo '</p>';
}
}
/**
* Tab: System info.
*/
public function tab_system_info() {
?>
<h3 class="wsal-tab__heading"><?php esc_html_e( 'System Info', 'wp-security-audit-log' ); ?></h3>
<form method="post" dir="ltr">
<textarea readonly="readonly" onclick="this.focus(); this.select()" id="system-info-textarea" name="wsal-sysinfo"><?php echo esc_html( $this->get_sysinfo() ); ?></textarea>
<p class="submit">
<input type="hidden" name="wsal-action" value="download_sysinfo" />
<?php submit_button( 'Download System Info File', 'primary', 'wsal-download-sysinfo', false ); ?>
</p>
</form>
<?php
}
/**
* Sidebar.
*/
private function sidebar() {
$plugins_data = array(
array(
'img' => trailingslashit( WSAL_BASE_URL ) . 'img/help/wp-2fa-img.jpg',
'desc' => esc_html__( 'Add an extra layer of security to your login pages with 2FA & require your users to use it.', 'wp-security-audit-log' ),
'alt' => 'WP 2FA',
'link' => 'https://melapress.com/wordpress-2fa/?utm_source=plugin&utm_medium=wsal&utm_campaign=about-us-wp2fa-ad',
),
array(
'img' => trailingslashit( WSAL_BASE_URL ) . 'img/help/mlr.jpg',
'desc' => esc_html__( 'Create, edit, and delete and easily manage WordPress user roles like a pro', 'wp-security-audit-log' ),
'alt' => 'Mellapress Role Editor',
'link' => 'https://melapress.com/wordpress-user-roles-editor/?utm_source=plugin&utm_medium=wsal&utm_campaign=about-us-mre-ad',
),
array(
'img' => trailingslashit( WSAL_BASE_URL ) . 'img/help/password-policy-manager.jpeg',
'desc' => esc_html__( 'Boost WordPress security with login & password policies.', 'wp-security-audit-log' ),
'alt' => 'WPassword',
'link' => 'https://melapress.com/wordpress-login-security/?utm_source=plugin&utm_medium=wsal&utm_campaign=about-us-mls-ad',
),
);
?>
<h3><?php esc_html_e( 'Our other WordPress plugins', 'wp-security-audit-log' ); ?></h3>
<ul>
<?php foreach ( $plugins_data as $data ) : ?>
<li>
<div class="plugin-box">
<div class="plugin-img">
<img src="<?php echo esc_url( $data['img'] ); ?>" alt="<?php echo esc_attr( $data['alt'] ); ?>">
</div>
<div class="plugin-desc">
<p><?php echo esc_html( $data['desc'] ); ?></p>
<div class="cta-btn">
<a href="<?php echo esc_url( $data['link'] ); ?>" target="_blank"><?php esc_html_e( 'LEARN MORE', 'wp-security-audit-log' ); ?></a>
</div>
</div>
</div>
</li>
<?php endforeach; ?>
</ul>
<?php
}
/**
* Method: Get system information.
*
* @return string - System information.
*/
public function get_sysinfo() {
// System info.
global $wpdb;
$sysinfo = '### System Info → Begin ###' . "\n\n";
// Start with the basics...
$sysinfo .= '-- Site Info --' . "\n\n";
$sysinfo .= 'Site URL (WP Address): ' . site_url() . "\n";
$sysinfo .= 'Home URL (Site Address): ' . home_url() . "\n";
$sysinfo .= 'Multisite: ' . ( WP_Helper::is_multisite() ? 'Yes' : 'No' ) . "\n";
// Browser information.
if ( ! class_exists( 'WSAL_Browser' ) && file_exists( WSAL_BASE_DIR . 'sdk/class-wsal-browser.php' ) ) {
require_once WSAL_BASE_DIR . 'sdk/class-wsal-browser.php';
$browser = new WSAL_Browser();
$sysinfo .= "\n" . '-- User Browser --' . "\n\n";
$sysinfo .= $browser;
}
// Get theme info.
$theme_data = wp_get_theme();
$theme = $theme_data->Name . ' ' . $theme_data->Version; // phpcs:ignore
$parent_theme = $theme_data->Template; // phpcs:ignore
if ( ! empty( $parent_theme ) ) {
$parent_theme_data = wp_get_theme( $parent_theme );
$parent_theme = $parent_theme_data->Name . ' ' . $parent_theme_data->Version; // phpcs:ignore
}
// Language information.
$locale = get_locale();
// WordPress configuration.
$sysinfo .= "\n" . '-- WordPress Configuration --' . "\n\n";
$sysinfo .= 'Version: ' . get_bloginfo( 'version' ) . "\n";
$sysinfo .= 'Language: ' . ( ! empty( $locale ) ? $locale : 'en_US' ) . "\n";
$sysinfo .= 'Permalink Structure: ' . ( get_option( 'permalink_structure' ) ? get_option( 'permalink_structure' ) : 'Default' ) . "\n";
$sysinfo .= 'Active Theme: ' . $theme . "\n";
if ( $parent_theme !== $theme ) {
$sysinfo .= 'Parent Theme: ' . $parent_theme . "\n";
}
$sysinfo .= 'Show On Front: ' . get_option( 'show_on_front' ) . "\n";
// Only show page specs if frontpage is set to 'page'.
if ( 'page' === get_option( 'show_on_front' ) ) {
$front_page_id = (int) get_option( 'page_on_front' );
$blog_page_id = (int) get_option( 'page_for_posts' );
$sysinfo .= 'Page On Front: ' . ( 0 !== $front_page_id ? get_the_title( $front_page_id ) . ' (#' . $front_page_id . ')' : 'Unset' ) . "\n";
$sysinfo .= 'Page For Posts: ' . ( 0 !== $blog_page_id ? get_the_title( $blog_page_id ) . ' (#' . $blog_page_id . ')' : 'Unset' ) . "\n";
}
$sysinfo .= 'ABSPATH: ' . ABSPATH . "\n";
$sysinfo .= 'WP_DEBUG: ' . ( defined( 'WP_DEBUG' ) ? WP_DEBUG ? 'Enabled' : 'Disabled' : 'Not set' ) . "\n";
$sysinfo .= 'WP Memory Limit: ' . WP_MEMORY_LIMIT . "\n";
// Get plugins that have an update.
$updates = get_plugin_updates();
// Must-use plugins.
// NOTE: MU plugins can't show updates!
$muplugins = get_mu_plugins();
if ( count( $muplugins ) > 0 ) {
$sysinfo .= "\n" . '-- Must-Use Plugins --' . "\n\n";
foreach ( $muplugins as $plugin => $plugin_data ) {
$sysinfo .= $plugin_data['Name'] . ': ' . $plugin_data['Version'] . "\n";
}
}
// WordPress active plugins.
$sysinfo .= "\n" . '-- WordPress Active Plugins --' . "\n\n";
$plugins = get_plugins();
$active_plugins = get_option( 'active_plugins', array() );
$can_use_freemius_premium_code = wsal_freemius()->can_use_premium_code();
foreach ( $plugins as $plugin_path => $plugin ) {
if ( ! in_array( $plugin_path, $active_plugins ) ) { // phpcs:ignore
continue;
}
if ( 'WP Activity Log' === $plugin['Name'] && $can_use_freemius_premium_code ) {
$update = ( array_key_exists( $plugin_path, $updates ) ) ? ' (needs update - ' . $updates[ $plugin_path ]->update->new_version . ')' : '';
$sysinfo .= $plugin['Name'] . ' Premium: ' . $plugin['Version'] . $update . "\n";
} else {
$update = ( array_key_exists( $plugin_path, $updates ) ) ? ' (needs update - ' . $updates[ $plugin_path ]->update->new_version . ')' : '';
$sysinfo .= $plugin['Name'] . ': ' . $plugin['Version'] . $update . "\n";
}
}
// WordPress inactive plugins.
$sysinfo .= "\n" . '-- WordPress Inactive Plugins --' . "\n\n";
foreach ( $plugins as $plugin_path => $plugin ) {
if ( in_array( $plugin_path, $active_plugins ) ) { // phpcs:ignore
continue;
}
$update = ( array_key_exists( $plugin_path, $updates ) ) ? ' (needs update - ' . $updates[ $plugin_path ]->update->new_version . ')' : '';
$sysinfo .= $plugin['Name'] . ': ' . $plugin['Version'] . $update . "\n";
}
if ( WP_Helper::is_multisite() ) {
// WordPress Multisite active plugins.
$sysinfo .= "\n" . '-- Network Active Plugins --' . "\n\n";
$plugins = wp_get_active_network_plugins();
$active_plugins = get_site_option( 'active_sitewide_plugins', array() );
foreach ( $plugins as $plugin_path ) {
$plugin_base = plugin_basename( $plugin_path );
if ( ! array_key_exists( $plugin_base, $active_plugins ) ) {
continue;
}
if ( 'WP Activity Log' === $plugin['Name'] && $can_use_freemius_premium_code ) {
$update = ( array_key_exists( $plugin_path, $updates ) ) ? ' (needs update - ' . $updates[ $plugin_path ]->update->new_version . ')' : '';
$plugin = get_plugin_data( $plugin_path );
$sysinfo .= $plugin['Name'] . ' Premium: ' . $plugin['Version'] . $update . "\n";
} else {
$update = ( array_key_exists( $plugin_path, $updates ) ) ? ' (needs update - ' . $updates[ $plugin_path ]->update->new_version . ')' : '';
$plugin = get_plugin_data( $plugin_path );
$sysinfo .= $plugin['Name'] . ': ' . $plugin['Version'] . $update . "\n";
}
}
}
// Server configuration.
$server_software = \sanitize_text_field( \wp_unslash( $_SERVER['SERVER_SOFTWARE'] ) );
$sysinfo .= "\n" . '-- Webserver Configuration --' . "\n\n";
$sysinfo .= 'PHP Version: ' . PHP_VERSION . "\n";
$sysinfo .= 'MySQL Version: ' . $wpdb->db_version() . "\n";
if ( isset( $server_software ) ) {
$sysinfo .= 'Webserver Info: ' . $server_software . "\n";
} else {
$sysinfo .= 'Webserver Info: Global $_SERVER array is not set.' . "\n";
}
// PHP configs.
$sysinfo .= "\n" . '-- PHP Configuration --' . "\n\n";
$sysinfo .= 'Memory Limit: ' . ini_get( 'memory_limit' ) . "\n";
$sysinfo .= 'Upload Max Size: ' . ini_get( 'upload_max_filesize' ) . "\n";
$sysinfo .= 'Post Max Size: ' . ini_get( 'post_max_size' ) . "\n";
$sysinfo .= 'Upload Max Filesize: ' . ini_get( 'upload_max_filesize' ) . "\n";
$sysinfo .= 'Time Limit: ' . ini_get( 'max_execution_time' ) . "\n";
$sysinfo .= 'Max Input Vars: ' . ini_get( 'max_input_vars' ) . "\n";
$sysinfo .= 'Display Errors: ' . ( ini_get( 'display_errors' ) ? 'On (' . ini_get( 'display_errors' ) . ')' : 'N/A' ) . "\n";
// WSAL options.
$sysinfo .= "\n" . '-- WSAL Options --' . "\n\n";
$options = Plugin_Settings_Helper::get_plugin_settings();
if ( ! empty( $options ) && is_array( $options ) ) {
foreach ( $options as $option ) {
$sysinfo .= 'Option: ' . $option->option_name . "\n";
$sysinfo .= 'Value: ' . $option->option_value . "\n\n";
}
}
$sysinfo .= 'Occurrences table rows: ' . Occurrences_Entity::count() . "\n";
$sysinfo .= 'Occurrences table size: ' . Occurrences_Entity::get_table_size() . "Mb\n";
$sysinfo .= 'Meta table rows: ' . Metadata_Entity::count() . "\n";
$sysinfo .= 'Meta table size: ' . Metadata_Entity::get_table_size() . "Mb\n\n";
if ( Settings_Helper::is_archiving_enabled() ) {
$connection_name = Settings_Helper::get_option_value( 'archive-connection' );
$wsal_db = Connection::get_connection( $connection_name );
if ( null !== $wsal_db && isset( $wsal_db::$error_string ) && null !== $wsal_db::$error_string ) {
$sysinfo .= $wsal_db::$error_string . "\n";
} else {
$sysinfo .= 'Archive Occurrences table rows: ' . Occurrences_Entity::count( '%d', array( 1 ), $wsal_db ) . "\n";
$sysinfo .= 'Archive Occurrences table size: ' . Occurrences_Entity::get_table_size( $wsal_db ) . "Mb\n";
$sysinfo .= 'Archive Meta table rows: ' . Metadata_Entity::count( '%d', array( 1 ), $wsal_db ) . "\n";
$sysinfo .= 'Archive Meta table size: ' . Metadata_Entity::get_table_size( $wsal_db ) . "Mb\n\n";
}
}
$sysinfo .= "\n" . '### System Info → End ###' . "\n\n";
return $sysinfo;
}
/**
* {@inheritDoc}
*/
public function footer() {
if ( 'system-info' === $this->current_tab && Settings_Helper::current_user_can( 'edit' ) ) :
?>
<script>
/**
* Create and download a temporary file.
*
* @param {string} filename - File name.
* @param {string} text - File content.
*/
function download(filename, text) {
// Create temporary element.
var element = document.createElement('a');
element.setAttribute('href', 'data:text/plain;charset=utf-8,' + encodeURIComponent(text));
element.setAttribute('download', filename);
// Set the element to not display.
element.style.display = 'none';
document.body.appendChild(element);
// Simulate click on the element.
element.click();
// Remove temporary element.
document.body.removeChild(element);
}
jQuery( document ).ready( function() {
var download_btn = jQuery( '#wsal-download-sysinfo' );
download_btn.click( function( event ) {
event.preventDefault();
download( 'wsal-system-info.txt', jQuery( '#system-info-textarea' ).val() );
} );
} );
</script>
<?php
endif;
}
}