tuhin18003/WooCommerce-AltCoin-Payment-Gateway

View on GitHub
core/admin/notices/wapgNotice.php

Summary

Maintainability
A
3 hrs
Test Coverage
<?php namespace WooGateWayCoreLib\admin\notices;

/**
 * Custom Notice
 *
 * @package Notices
 * @since 1.3.8
 * @author CoinMarketStats <support@coinmarketstats.online>
 */

if ( ! defined( 'CS_WAPG_VERSION' ) ) {
    exit;
}


class wapgNotice {

    private static $_instance;
    private $admin_notices;
    const TYPES = 'error,warning,info,success';

    private function __construct() {
        $this->admin_notices = new \stdClass();
        foreach ( explode( ',', self::TYPES ) as $type ) {
            $this->admin_notices->{$type} = array();
        }
        add_action( 'admin_init', array( $this, 'action_admin_init' ) );
        add_action( 'admin_notices', array( $this, 'action_admin_notices' ) );
        add_action( 'admin_enqueue_scripts', array( $this, 'action_admin_enqueue_scripts' ) );
    }

    public static function get_instance() {
        if ( ! ( self::$_instance instanceof self ) ) {
            self::$_instance = new self();
        }
        return self::$_instance;
    }

    public function action_admin_init() {
        $dismiss_option = filter_input( INPUT_GET, 'wapg_notice_dismiss', FILTER_SANITIZE_FULL_SPECIAL_CHARS );
        if ( is_string( $dismiss_option ) ) {
            update_option( "wapg_notice_dismissed_$dismiss_option", true );
            wp_die();
        }
    }

    public function action_admin_enqueue_scripts() {
        wp_enqueue_script( 'jquery' );
        wp_enqueue_script( 'admin-notice', CS_WAPG_PLUGIN_ASSET_URI . 'js/wapg_admin_notice.js', false );
    }

    public function action_admin_notices() {
        global $altcoin_menu;
        $screen = get_current_screen();

        if ( \in_array( $screen->id, $altcoin_menu ) ) {
            return;
        }

        foreach ( explode( ',', self::TYPES ) as $type ) {
            foreach ( $this->admin_notices->{$type} as $admin_notice ) {

                $dismiss_url = add_query_arg(
                    array(
                        'wapg_notice_dismiss' => $admin_notice->dismiss_option,
                    ),
                    admin_url()
                );

                if ( ! get_option( "wapg_notice_dismissed_{$admin_notice->dismiss_option}" ) ) {
                    ?><div class="notice wapg-notice notice-
                    <?php
                    echo $type;

                    if ( $admin_notice->dismiss_option ) {
                        echo ' is-dismissible" data-dismiss-url="' . esc_url( $dismiss_url );
                    }
                    ?>
                        ">
                        <p>
                            <strong><?php echo CS_WAPG_PLUGIN_NAME; ?></strong>
                        </p>
                        <p><?php echo $admin_notice->message; ?></p>

                    </div>
                    <?php
                }
            }
        }
    }

    public function error( $message, $dismiss_option = false ) {
        $this->notice( 'error', $message, $dismiss_option );
    }

    public function warning( $message, $dismiss_option = false ) {
        $this->notice( 'warning', $message, $dismiss_option );
    }

    public function success( $message, $dismiss_option = false ) {
        $this->notice( 'success', $message, $dismiss_option );
    }

    public function info( $message, $dismiss_option = false ) {
        $this->notice( 'info', $message, $dismiss_option );
    }

    private function notice( $type, $message, $dismiss_option ) {
        $notice                 = new \stdClass();
        $notice->message        = $message;
        $notice->dismiss_option = $dismiss_option;

        $this->admin_notices->{$type}[] = $notice;
    }

    public static function error_handler( $errno, $errstr, $errfile, $errline, $errcontext ) {
        if ( ! ( error_reporting() & $errno ) ) {
            // This error code is not included in error_reporting
            return;
        }

        $message = "errstr: $errstr, errfile: $errfile, errline: $errline, PHP: " . PHP_VERSION . ' OS: ' . PHP_OS;

        $self = self::get_instance();

        switch ( $errno ) {
            case E_USER_ERROR:
                $self->error( $message );
                break;

            case E_USER_WARNING:
                $self->warning( $message );
                break;

            case E_USER_NOTICE:
            default:
                $self->notice( $message );
                break;
        }

        // write to wp-content/debug.log if logging enabled
        error_log( $message );

        // Don't execute PHP internal error handler
        return true;
    }

}