184 lines
4.8 KiB
PHP
184 lines
4.8 KiB
PHP
|
<?php
|
||
|
|
||
|
namespace Nextend\Framework\Notification;
|
||
|
|
||
|
use Nextend\Framework\Asset\Js\Js;
|
||
|
use Nextend\Framework\Platform\Platform;
|
||
|
use Nextend\Framework\Plugin;
|
||
|
use Nextend\Framework\Session\Session;
|
||
|
|
||
|
class Notification {
|
||
|
|
||
|
/**
|
||
|
* @var array
|
||
|
*/
|
||
|
private static $error;
|
||
|
/**
|
||
|
* @var array
|
||
|
*/
|
||
|
private static $success;
|
||
|
/**
|
||
|
* @var array
|
||
|
*/
|
||
|
private static $notice;
|
||
|
|
||
|
private static $flushed = false;
|
||
|
|
||
|
public function __construct() {
|
||
|
|
||
|
Plugin::addAction('beforeSessionSave', array(
|
||
|
'\\Nextend\\Framework\\Notification\\Notification',
|
||
|
'storeInSession'
|
||
|
));
|
||
|
}
|
||
|
|
||
|
|
||
|
private static function loadSessionError() {
|
||
|
if (self::$error === null && Platform::isAdmin()) {
|
||
|
self::$error = Session::get('error', array());
|
||
|
}
|
||
|
}
|
||
|
|
||
|
private static function loadSessionSuccess() {
|
||
|
if (self::$success === null && Platform::isAdmin()) {
|
||
|
self::$success = Session::get('success', array());
|
||
|
}
|
||
|
}
|
||
|
|
||
|
private static function loadSessionNotice() {
|
||
|
if (self::$notice === null && Platform::isAdmin()) {
|
||
|
self::$notice = Session::get('notice', array());
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public static function hasErrors() {
|
||
|
|
||
|
self::loadSessionError();
|
||
|
|
||
|
return !empty(self::$error);
|
||
|
}
|
||
|
|
||
|
public static function error($message = '', $parameters = array()) {
|
||
|
self::loadSessionError();
|
||
|
self::$error[] = array(
|
||
|
$message,
|
||
|
$parameters
|
||
|
);
|
||
|
}
|
||
|
|
||
|
public static function displayPlainErrors() {
|
||
|
|
||
|
if (Platform::isAdmin() && is_array(self::$error) && count(self::$error)) {
|
||
|
foreach (self::$error as $error) {
|
||
|
echo '<div style="border: 1px solid #e90909; margin-bottom: 20px; padding: 10px 20px; max-width: 400px;">' . esc_html($error[0]) . '</div>';
|
||
|
}
|
||
|
self::$error = array();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public static function success($message = '', $parameters = array()) {
|
||
|
self::loadSessionSuccess();
|
||
|
self::$success[] = array(
|
||
|
$message,
|
||
|
$parameters
|
||
|
);
|
||
|
}
|
||
|
|
||
|
public static function notice($message = '', $parameters = array()) {
|
||
|
self::loadSessionNotice();
|
||
|
self::$notice[] = array(
|
||
|
$message,
|
||
|
$parameters
|
||
|
);
|
||
|
}
|
||
|
|
||
|
public static function show() {
|
||
|
|
||
|
self::loadSessionError();
|
||
|
|
||
|
if (is_array(self::$error) && count(self::$error)) {
|
||
|
foreach (self::$error as $error) {
|
||
|
Js::addInline("_N2.Notification.error(" . json_encode($error[0]) . ", " . json_encode($error[1]) . ");");
|
||
|
}
|
||
|
self::$error = array();
|
||
|
}
|
||
|
|
||
|
self::loadSessionSuccess();
|
||
|
|
||
|
if (is_array(self::$success) && count(self::$success)) {
|
||
|
foreach (self::$success as $success) {
|
||
|
|
||
|
Js::addInline("_N2.Notification.success(" . json_encode($success[0]) . ", " . json_encode($success[1]) . ");");
|
||
|
}
|
||
|
self::$success = array();
|
||
|
}
|
||
|
|
||
|
self::loadSessionNotice();
|
||
|
|
||
|
if (is_array(self::$notice) && count(self::$notice)) {
|
||
|
foreach (self::$notice as $notice) {
|
||
|
|
||
|
Js::addInline("_N2.Notification.notice(" . json_encode($notice[0]) . ", " . json_encode($notice[1]) . ");");
|
||
|
}
|
||
|
self::$notice = array();
|
||
|
}
|
||
|
|
||
|
self::$flushed = true;
|
||
|
|
||
|
}
|
||
|
|
||
|
public static function showAjax() {
|
||
|
|
||
|
self::loadSessionError();
|
||
|
$messages = array();
|
||
|
|
||
|
if (is_array(self::$error) && count(self::$error)) {
|
||
|
$messages['error'] = array();
|
||
|
foreach (self::$error as $error) {
|
||
|
$messages['error'][] = $error;
|
||
|
}
|
||
|
self::$error = array();
|
||
|
}
|
||
|
|
||
|
self::loadSessionSuccess();
|
||
|
|
||
|
if (is_array(self::$success) && count(self::$success)) {
|
||
|
$messages['success'] = array();
|
||
|
foreach (self::$success as $success) {
|
||
|
$messages['success'][] = $success;
|
||
|
}
|
||
|
self::$success = array();
|
||
|
}
|
||
|
|
||
|
self::loadSessionNotice();
|
||
|
|
||
|
if (is_array(self::$notice) && count(self::$notice)) {
|
||
|
$messages['notice'] = array();
|
||
|
foreach (self::$notice as $notice) {
|
||
|
$messages['notice'][] = $notice;
|
||
|
}
|
||
|
self::$notice = array();
|
||
|
}
|
||
|
|
||
|
self::$flushed = true;
|
||
|
if (count($messages)) {
|
||
|
return $messages;
|
||
|
}
|
||
|
|
||
|
return false;
|
||
|
}
|
||
|
|
||
|
public static function storeInSession() {
|
||
|
if (self::$flushed) {
|
||
|
Session::delete('error');
|
||
|
Session::delete('success');
|
||
|
Session::delete('notice');
|
||
|
} else {
|
||
|
Session::set('error', self::$error);
|
||
|
Session::set('success', self::$success);
|
||
|
Session::set('notice', self::$notice);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
new Notification();
|