<?php
/**
* Handle all the errors in the plugin
*
* @file The Errors Handle file
* @package HMWP/Error
* @since 4.0.0
*
*/
defined( 'ABSPATH' ) || die( 'Cheatin\' uh?' );
class HMWP_Classes_Error {
/**
*
* Array of errors generated by the plugin
*
* @var array
*/
private static $errors = array();
public function __construct() {
add_action( 'admin_notices', array( $this, 'hookNotices' ) );
}
/**
* Set the notification in WordPress
*
* @param string $error
* @param string $type
* @param bool $ignore
*
* @return void
* @deprecated changed with setNotification for multiple usage
*/
public static function setError( $error = '', $type = 'notice', $ignore = true ) {
self::setNotification( $error, $type, $ignore );
}
/**
* Set the notification in WordPress
*
* @param string $error Error message to show in plugin
* @param string $type Define the notification class 'notice', 'warning', 'dander'. Default 'notice'
* @param bool $ignore Let user ignore this notification
*
* @return void
*/
public static function setNotification( $error = '', $type = 'notice', $ignore = true ) {
if ( $type == 'notice' && $ignore && $ignore_errors = (array) HMWP_Classes_Tools::getOption( 'ignore_errors' ) ) {
if ( ! empty( $ignore_errors ) && in_array( strlen( $error ), $ignore_errors ) ) {
return;
}
}
self::$errors[ md5( $error ) ] = array(
'type' => $type,
'ignore' => $ignore,
'text' => $error
);
}
/**
* Return if error
*
* @return bool
*/
public static function isError() {
return ! empty( self::$errors );
}
/**
* This hook will show the error in WP header
*/
public function hookNotices() {
if ( is_array( self::$errors ) && ( ( is_string( HMWP_Classes_Tools::getValue( 'page', '' ) ) && stripos( HMWP_Classes_Tools::getValue( 'page', '' ), _HMWP_NAMESPACE_ ) !== false ) || ( is_string( HMWP_Classes_Tools::getValue( 'plugin', '' ) ) && stripos( HMWP_Classes_Tools::getValue( 'plugin', '' ), dirname( HMWP_BASENAME ) ) !== false ) ) ) {
foreach ( self::$errors as $error ) {
self::showError( $error['text'], $error['type'], $error['ignore'] );
}
}
self::$errors = array();
}
/**
* Show the notices to WP
*
* @param string $message Error message to show in plugin
* @param string $type Define the notification class 'notice', 'warning', 'dander'. Default 'notice'
* @param bool $ignore Let user ignore this notification
*/
public static function showError( $message, $type = 'notice', $ignore = true ) {
//Initialize WordPress Filesystem
$wp_filesystem = HMWP_Classes_ObjController::initFilesystem();
if ( $wp_filesystem->exists( _HMWP_THEME_DIR_ . 'Notices.php' ) ) {
include _HMWP_THEME_DIR_ . 'Notices.php';
} else {
echo wp_kses_post( $message );
}
}
/**
* Run the actions on submit
*
* @throws Exception
*/
public function action() {
if ( ! HMWP_Classes_Tools::userCan( HMWP_CAPABILITY ) ) {
return;
}
switch ( HMWP_Classes_Tools::getValue( 'action' ) ) {
case 'hmwp_ignoreerror':
$hash = HMWP_Classes_Tools::getValue( 'hash' );
$ignore_errors = (array) HMWP_Classes_Tools::getOption( 'ignore_errors' );
array_push( $ignore_errors, $hash );
$ignore_errors = array_unique( $ignore_errors );
$ignore_errors = array_filter( $ignore_errors );
HMWP_Classes_Tools::saveOptions( 'ignore_errors', $ignore_errors );
wp_redirect( remove_query_arg( array( 'hmwp_nonce', 'action', 'hash' ) ) );
break;
}
}
}