aspireupdate/includes/class-debug.php
Alex Sirota 6845ffaa75
Continue to sync playground-ready with newest PRs on main (#129)
* Prevent Recursion on certain Host name patterns (#69)

---------

Signed-off-by: Namith Jawahar <48271037+namithj@users.noreply.github.com>

* Playground ready updating into main (#71)

* Update blueprint.json

Switching to default theme of 2022 to support minimum WP Playground support for WordPress version as 5.9.9

Signed-off-by: Namith Jawahar <48271037+namithj@users.noreply.github.com>

* Switching blueprint.json to 2022 theme

Signed-off-by: Alex Sirota <alex@newpathconsulting.com>

---------

Signed-off-by: Alex Sirota <alex@newpathconsulting.com>
Signed-off-by: Namith Jawahar <48271037+namithj@users.noreply.github.com>

* `Add New Plugin`: Remove 'Featured' and 'Favorites' tabs when API rewrite is enabled. (#80)

* Add class for overriding plugins screens.

* Remove unused tabs when API rewrite is enabled.

* `Add New Theme`: Remove 'Favorites' filter tab when API rewrite is enabled. (#82)

* Add class for overriding themes screens.

* Hide unsupported filters.

* Redirect unsupported filters to `theme-install.php`.

---------

Signed-off-by: Alex Sirota <alex@newpathconsulting.com>
Co-authored-by: Alex Sirota <alex@newpathconsulting.com>

* Add PHPUnit. (#87)

* Add PHPUnit scaffolding.

* Add Composer files for dependencies and test script.

* Add `.gitignore`.

* Add sample test for `Admin_Settings::get_setting()`.

* Add PHP 8.3 to the test matrix.

* Add `.cache/*` to `.gitignore`.

* Limit testing to PHP 7.4 (minimum) and 8.3 (latest).

* `Plugins Screens`: Initialize in `Controller::__construct()`. (#89)

* `Workflows`: Fix PHP version and add more workflow triggers. (#92)

* Fix PHP version.

* Add `push` and `workflow_dispatch` workflow triggers.

* `Tests`: Ensure options are not set when tests run. (#95)

* Introduce a test constant.

* Don't initialize when the tests are running.

* Use a new object for testing `Admin_Settings::get_setting()`.

* Warning when debug-aspire-update.log doesnt exist (#109)

* `Tests`: Add default coverage settings. (#97)

* Improve I18N Issues Based on version 0.5 (#104)

* Fixes Settings not getting saved when rewrites were turned off (#108)

* Add French Translation (#105)

* I18n fr fr (#113)

* Translations loading fix112 (#114)

* Add French translations. 

* load any available translations with code in the plugin

* #110 (#116)

Fixes #110

* Add nonce verification and sanitize `$_REQUEST/$_GET` values. (#115)

Signed-off-by: Colin Stewart <79332690+costdev@users.noreply.github.com>

* Added German Translation (#111)

* added German translation

* added gitignore for .DS_Store


Signed-off-by: Harikrishnan R <harikrishnanr994@gmail.com>

* Voltron has landed. (#117)

The Voltron has landed. See if you can find where.

* `Admin Settings`: Delete all settings when the plugin is uninstalled. (#118)

* `Admin Settings`: Add multisite-safe deletion of all settings.

* Delete all settings when the plugin is uninstalled.

* add multisite support (#102)

* accidentally deleted (#124)

Fixed typo in code deleted when addressing #102

* Add `.editorconfig`. (#123)

* create zip with each new tagged release (#121)

* create zip with each new tagged release

* update .gitattributes

* Cleanup after `.editorconfig` was added to the repository. (#126)

* Add coding standard. (#127)

* Add Coding Standard.

* Add PHPCS cache directory.

* Coding Standards: Apply PHPCBF to codebase.

* Coding Standards: Add GitHub workflow.

---------

Signed-off-by: Alex Sirota <alex@newpathconsulting.com>
Co-authored-by: Alex Sirota <alex@newpathconsulting.com>

---------

Signed-off-by: Namith Jawahar <48271037+namithj@users.noreply.github.com>
Signed-off-by: Alex Sirota <alex@newpathconsulting.com>
Signed-off-by: Colin Stewart <79332690+costdev@users.noreply.github.com>
Signed-off-by: Harikrishnan R <harikrishnanr994@gmail.com>
Co-authored-by: Namith Jawahar <48271037+namithj@users.noreply.github.com>
Co-authored-by: Colin Stewart <79332690+costdev@users.noreply.github.com>
Co-authored-by: Alex Lion <learnwithalex@gmail.com>
Co-authored-by: Sébastien SERRE <sebastien@thivinfo.com>
Co-authored-by: Harikrishnan R <harikrishnanr994@gmail.com>
Co-authored-by: Andy Fragen <andy@thefragens.com>
2024-11-05 04:57:50 -05:00

145 lines
3.8 KiB
PHP

<?php
/**
* The Class for Debug Functions.
*
* @package aspire-update
*/
namespace AspireUpdate;
/**
* The Class for Debug Functions.
*/
class Debug {
/**
* Name of the debug log file.
*
* @var string
*/
private static $log_file = 'debug-aspire-update.log';
/**
* Initializes the WordPress Filesystem.
*
* @return WP_Filesystem_Base|false The filesystem object or false on failure.
*/
private static function init_filesystem() {
global $wp_filesystem;
if ( ! $wp_filesystem ) {
require_once ABSPATH . 'wp-admin/includes/file.php';
WP_Filesystem();
}
return $wp_filesystem;
}
/**
* Logs a message to the debug log file.
*
* @param mixed $message The message to log.
* @param string $type The log level ('string', 'request', 'response').
*/
public static function log( $message, $type = 'string' ) {
$wp_filesystem = self::init_filesystem();
if ( ! $wp_filesystem ) {
if (
defined( 'WP_DEBUG' ) &&
( true === WP_DEBUG ) &&
defined( 'WP_DEBUG_LOG' ) &&
( true === WP_DEBUG_LOG )
) {
// phpcs:disable WordPress.PHP.DevelopmentFunctions
/**
* Log error in file write fails only if debug is set to true. This is a valid use case.
*/
error_log( 'AspireUpdate - Could not open or write to the file system. Check file system permissions to debug log directory.' );
// phpcs:enable
}
return;
}
$timestamp = gmdate( 'Y-m-d H:i:s' );
$formatted_message = sprintf(
"[%s] [%s]: %s\n" . PHP_EOL,
$timestamp,
strtoupper( $type ),
self::format_message( $message )
);
$file_path = WP_CONTENT_DIR . '/' . self::$log_file;
$content = '';
if ( $wp_filesystem->exists( $file_path ) ) {
$content = $wp_filesystem->get_contents( $file_path );
}
$wp_filesystem->put_contents(
$file_path,
$content . $formatted_message,
FS_CHMOD_FILE
);
}
/**
* Formats the message to be logged.
*
* @param mixed $message The message to format (string, array, object, etc.).
* @return string The formatted message.
*/
private static function format_message( $message ) {
if ( is_array( $message ) || is_object( $message ) ) {
// phpcs:disable WordPress.PHP.DevelopmentFunctions
/**
* Priting an array or object to log file. This is a valid use case.
*/
return print_r( $message, true );
// phpcs:enable
}
return (string) $message;
}
/**
* Log an info message.
*
* @param mixed $message The message to log.
*/
public static function log_string( $message ) {
$admin_settings = Admin_Settings::get_instance();
$debug_mode = $admin_settings->get_setting( 'enable_debug', false );
$debug_types = $admin_settings->get_setting( 'enable_debug_type', [] );
if ( $debug_mode && is_array( $debug_types ) && in_array( 'string', $debug_types, true ) ) {
self::log( $message, 'string' );
}
}
/**
* Log a warning message.
*
* @param mixed $message The message to log.
*/
public static function log_request( $message ) {
$admin_settings = Admin_Settings::get_instance();
$debug_mode = $admin_settings->get_setting( 'enable_debug', false );
$debug_types = $admin_settings->get_setting( 'enable_debug_type', [] );
if ( $debug_mode && is_array( $debug_types ) && in_array( 'request', $debug_types, true ) ) {
self::log( $message, 'request' );
}
}
/**
* Log an error message.
*
* @param mixed $message The message to log.
*/
public static function log_response( $message ) {
$admin_settings = Admin_Settings::get_instance();
$debug_mode = $admin_settings->get_setting( 'enable_debug', false );
$debug_types = $admin_settings->get_setting( 'enable_debug_type', [] );
if ( $debug_mode && is_array( $debug_types ) && in_array( 'response', $debug_types, true ) ) {
self::log( $message, 'response' );
}
}
}