Seditio Source
Root |
./othercms/dotclear-2.22/inc/admin/lib.dc.notices.php
<?php
/**
 * @package Dotclear
 * @subpackage Backend
 *
 * @copyright Olivier Meunier & Association Dotclear
 * @copyright GPL-2.0-only
 */
if (!defined('DC_RC_PATH')) {
    return;
}

/**
 * dcNotices -- Backend notices handling facilities
 */
class dcAdminNotices
{
   
/** @var dcCore dcCore instance */
   
public static $core;

    private static
$N_TYPES = [
       
// id → CSS class
       
'success' => 'success',
       
'warning' => 'warning-msg',
       
'error'   => 'error',
       
'message' => 'message',
       
'static'  => 'static-msg', ];

    private static
$error_displayed = false;

   
/**
     * Gets the HTML code of notices.
     *
     * @return     string  The notices.
     */
   
public static function getNotices()
    {
       
$res = '';

       
// return error messages if any
       
if (self::$core->error->flag() && !self::$error_displayed) {

           
# --BEHAVIOR-- adminPageNotificationError
           
$notice_error = self::$core->callBehavior('adminPageNotificationError', self::$core, self::$core->error);

            if (isset(
$notice_error) && !empty($notice_error)) {
               
$res .= $notice_error;
            } else {
               
$res .= '<div class="error" role="alert"><p>' .
               
'<strong>' . (count(self::$core->error->getErrors()) > 1 ? __('Errors:') : __('Error:')) . '</strong>' .
               
'</p>' . self::$core->error->toHTML() . '</div>';
            }
           
self::$error_displayed = true;
        } else {
           
self::$error_displayed = false;
        }

       
// return notices if any

        // Should retrieve static notices first, then others
       
$step = 2;
        do {
            if (
$step == 2) {
               
// Static notifications
               
$params = [
                   
'notice_type' => 'static',
                ];
            } else {
               
// Normal notifications
               
$params = [
                   
'sql' => "AND notice_type != 'static'",
                ];
            }
           
$counter = self::$core->notices->getNotices($params, true);
            if (
$counter) {
               
$lines = self::$core->notices->getNotices($params);
                while (
$lines->fetch()) {
                    if (isset(
self::$N_TYPES[$lines->notice_type])) {
                       
$class = self::$N_TYPES[$lines->notice_type];
                    } else {
                       
$class = $lines->notice_type;
                    }
                   
$notification = [
                       
'type'   => $lines->notice_type,
                       
'class'  => $class,
                       
'ts'     => $lines->notice_ts,
                       
'text'   => $lines->notice_msg,
                       
'format' => $lines->notice_format,
                    ];
                    if (
$lines->notice_options !== null) {
                       
$notifications = array_merge($notification, @json_decode($lines->notice_options, true));
                    }
                   
# --BEHAVIOR-- adminPageNotification
                   
$notice = self::$core->callBehavior('adminPageNotification', self::$core, $notification);

                   
$res .= (isset($notice) && !empty($notice) ? $notice : self::getNotification($notification));
                }
            }
        } while (--
$step);

       
// Delete returned notices
       
self::$core->notices->delNotices(null, true);

        return
$res;
    }

   
/**
     * Adds a notice.
     *
     * @param      string  $type     The type
     * @param      string  $message  The message
     * @param      array   $options  The options
     */
   
public static function addNotice($type, $message, $options = [])
    {
       
$cur = self::$core->con->openCursor(self::$core->prefix . self::$core->notices->getTable());

       
$now = function ($core) {
           
dt::setTZ($core->auth->getInfo('user_tz')); // Set user TZ
           
$dt = date('Y-m-d H:i:s');
           
dt::setTZ('UTC');                           // Back to default TZ

           
return $dt;
        };

       
$cur->notice_type    = $type;
       
$cur->notice_ts      = isset($options['ts']) && $options['ts'] ? $options['ts'] : $now(self::$core);
       
$cur->notice_msg     = $message;
       
$cur->notice_options = json_encode($options);

        if (isset(
$options['divtag']) && $options['divtag']) {
           
$cur->notice_format = 'html';
        }
        if (isset(
$options['format']) && $options['format']) {
           
$cur->notice_format = $options['format'];
        }

       
self::$core->notices->addNotice($cur);
    }

   
/**
     * Adds a success notice.
     *
     * @param      string  $message  The message
     * @param      array   $options  The options
     */
   
public static function addSuccessNotice($message, $options = [])
    {
       
self::addNotice('success', $message, $options);
    }

   
/**
     * Adds a warning notice.
     *
     * @param      string  $message  The message
     * @param      array   $options  The options
     */
   
public static function addWarningNotice($message, $options = [])
    {
       
self::addNotice('warning', $message, $options);
    }

   
/**
     * Adds an error notice.
     *
     * @param      string  $message  The message
     * @param      array   $options  The options
     */
   
public static function addErrorNotice($message, $options = [])
    {
       
self::addNotice('error', $message, $options);
    }

   
/**
     * Gets the notification.
     *
     * @param      array  $n      The notification
     *
     * @return     string  The notification.
     */
   
private static function getNotification($n)
    {
       
$tag = (isset($n['format']) && $n['format'] === 'html') ? 'div' : 'p';
       
$ts  = '';
        if (!isset(
$n['with_ts']) || ($n['with_ts'] == true)) {
           
$ts = '<span class="notice-ts">' .
               
'<time datetime="' . dt::iso8601(strtotime($n['ts']), self::$core->auth->getInfo('user_tz')) . '">' .
               
dt::dt2str(__('%H:%M:%S'), $n['ts'], self::$core->auth->getInfo('user_tz')) .
               
'</time>' .
               
'</span> ';
        }
       
$res = '<' . $tag . ' class="' . $n['class'] . '" role="alert">' . $ts . $n['text'] . '</' . $tag . '>';

        return
$res;
    }

   
/*  */

    /**
     * Direct messages, usually immediately displayed
     *
     * @param      string  $msg        The message
     * @param      bool    $timestamp  With the timestamp
     * @param      bool    $div        Inside a div (else in a p)
     * @param      bool    $echo       Display the message?
     * @param      string  $class      The class of block (div/p)
     *
     * @return     string
     */
   
public static function message($msg, $timestamp = true, $div = false, $echo = true, $class = 'message')
    {
       
$res = '';
        if (
$msg != '') {
           
$ts = '';
            if (
$timestamp) {
               
$ts = '<span class="notice-ts">' .
                   
'<time datetime="' . dt::iso8601(time(), self::$core->auth->getInfo('user_tz')) . '">' .
                   
dt::str(__('%H:%M:%S'), null, self::$core->auth->getInfo('user_tz')) .
                   
'</time>' .
                   
'</span> ';
            }
           
$res = ($div ? '<div class="' . $class . '">' : '') . '<p' . ($div ? '' : ' class="' . $class . '"') . '>' .
               
$ts . $msg .
               
'</p>' . ($div ? '</div>' : '');
            if (
$echo) {
                echo
$res;
            }
        }

        return
$res;
    }

   
/**
     * Display a success message
     *
     * @param      string  $msg        The message
     * @param      bool    $timestamp  With the timestamp
     * @param      bool    $div        Inside a div (else in a p)
     * @param      bool    $echo       Display the message?
     *
     * @return     string
     */
   
public static function success($msg, $timestamp = true, $div = false, $echo = true)
    {
        return
self::message($msg, $timestamp, $div, $echo, 'success');
    }

   
/**
     * Display a warning message
     *
     * @param      string  $msg        The message
     * @param      bool    $timestamp  With the timestamp
     * @param      bool    $div        Inside a div (else in a p)
     * @param      bool    $echo       Display the message?
     *
     * @return     string
     */
   
public static function warning($msg, $timestamp = true, $div = false, $echo = true)
    {
        return
self::message($msg, $timestamp, $div, $echo, 'warning-msg');
    }
}
/*
 * Store current dcCore instance
 */
dcAdminNotices::$core = $GLOBALS['core'];