persistanceFile = $GLOBALS["NOTICES_FILE_PATH"];
$this->loadNotices();
}
/**
* save notices from json file
*/
public function saveNotices()
{
$notices = array(
'globalData' => array(
'uniqueCountId' => self::$uniqueCountId
),
'nextStep' => array(),
'finalReport' => array()
);
foreach ($this->nextStepNotices as $uniqueId => $notice) {
$notices['nextStep'][$uniqueId] = $notice->toArray();
}
foreach ($this->finalReporNotices as $uniqueId => $notice) {
$notices['finalReport'][$uniqueId] = $notice->toArray();
}
file_put_contents($this->persistanceFile, DupLiteSnapJsonU::wp_json_encode_pprint($notices));
}
/**
* load notice from json file
*/
private function loadNotices()
{
if (file_exists($this->persistanceFile)) {
$json = file_get_contents($this->persistanceFile);
$notices = json_decode($json, true);
$this->nextStepNotices = array();
$this->finalReporNotices = array();
if (!empty($notices['nextStep'])) {
foreach ($notices['nextStep'] as $uniqueId => $notice) {
$this->nextStepNotices[$uniqueId] = DUPX_NOTICE_ITEM::getItemFromArray($notice);
}
}
if (!empty($notices['finalReport'])) {
foreach ($notices['finalReport'] as $uniqueId => $notice) {
$this->finalReporNotices[$uniqueId] = DUPX_NOTICE_ITEM::getItemFromArray($notice);
}
}
self::$uniqueCountId = $notices['globalData']['uniqueCountId'];
} else {
$this->resetNotices();
}
}
/**
* remove all notices and save reset file
*/
public function resetNotices()
{
$this->nextStepNotices = array();
$this->finalReporNotices = array();
self::$uniqueCountId = 0;
$this->saveNotices();
}
/**
* return next step notice by id
*
* @param string $id
* @return DUPX_NOTICE_ITEM
*/
public function getNextStepNoticeById($id)
{
if (isset($this->nextStepNotices[$id])) {
return $this->nextStepNotices[$id];
} else {
return null;
}
}
/**
* return last report notice by id
*
* @param string $id
* @return DUPX_NOTICE_ITEM
*/
public function getFinalReporNoticeById($id)
{
if (isset($this->finalReporNotices[$id])) {
return $this->finalReporNotices[$id];
} else {
return null;
}
}
/**
*
* @param array|DUPX_NOTICE_ITEM $item // if string add new notice obj with item message and level param
* // if array must be [
* 'shortMsg' => text,
* 'level' => level,
* 'longMsg' => html text,
* 'sections' => sections list,
* 'faqLink' => [
* 'url' => external link
* 'label' => link text if empty get external url link
* ]
* ]
* @param int $mode // ADD_NORMAL | ADD_UNIQUE | ADD_UNIQUE_UPDATE | ADD_UNIQUE_APPEND
* @param string $uniqueId // used for ADD_UNIQUE or ADD_UNIQUE_UPDATE or ADD_UNIQUE_APPEND
*
* @return string // notice insert id
*
* @throws Exception
*/
public function addBothNextAndFinalReportNotice($item, $mode = self::ADD_NORMAL, $uniqueId = null)
{
$this->addNextStepNotice($item, $mode, $uniqueId);
$this->addFinalReportNotice($item, $mode, $uniqueId);
}
/**
*
* @param array|DUPX_NOTICE_ITEM $item // if string add new notice obj with item message and level param
* // if array must be [
* 'shortMsg' => text,
* 'level' => level,
* 'longMsg' => html text,
* 'sections' => sections list,
* 'faqLink' => [
* 'url' => external link
* 'label' => link text if empty get external url link
* ]
* ]
* @param int $mode // ADD_NORMAL | ADD_UNIQUE | ADD_UNIQUE_UPDATE | ADD_UNIQUE_APPEND
* @param string $uniqueId // used for ADD_UNIQUE or ADD_UNIQUE_UPDATE or ADD_UNIQUE_APPEND
*
* @return string // notice insert id
*
* @throws Exception
*/
public function addNextStepNotice($item, $mode = self::ADD_NORMAL, $uniqueId = null)
{
if (!is_array($item) && !($item instanceof DUPX_NOTICE_ITEM)) {
throw new Exception('Invalid item param');
}
return self::addReportNoticeToList($this->nextStepNotices, $item, $mode, $uniqueId);
}
/**
* addNextStepNotice wrapper to add simple message with error level
*
* @param string $message
* @param int $level // warning level
* @param int $mode // ADD_NORMAL | ADD_UNIQUE | ADD_UNIQUE_UPDATE | ADD_UNIQUE_APPEND
* @param string $uniqueId // used for ADD_UNIQUE or ADD_UNIQUE_UPDATE or ADD_UNIQUE_APPEND
*
* @return string // notice insert id
*
* @throws Exception
*/
public function addNextStepNoticeMessage($message, $level = DUPX_NOTICE_ITEM::INFO, $mode = self::ADD_NORMAL, $uniqueId = null)
{
return $this->addNextStepNotice(array(
'shortMsg' => $message,
'level' => $level,
), $mode, $uniqueId);
}
/**
*
* @param array|DUPX_NOTICE_ITEM $item // if string add new notice obj with item message and level param
* // if array must be [
* 'shortMsg' => text,
* 'level' => level,
* 'longMsg' => html text,
* 'sections' => sections list,
* 'faqLink' => [
* 'url' => external link
* 'label' => link text if empty get external url link
* ]
* ]
* @param int $mode // ADD_NORMAL | ADD_UNIQUE | ADD_UNIQUE_UPDATE | ADD_UNIQUE_APPEND
* @param string $uniqueId // used for ADD_UNIQUE or ADD_UNIQUE_UPDATE or ADD_UNIQUE_APPEND
*
* @return string // notice insert id
*
* @throws Exception
*/
public function addFinalReportNotice($item, $mode = self::ADD_NORMAL, $uniqueId = null)
{
if (!is_array($item) && !($item instanceof DUPX_NOTICE_ITEM)) {
throw new Exception('Invalid item param');
}
return self::addReportNoticeToList($this->finalReporNotices, $item, $mode, $uniqueId);
}
/**
* addFinalReportNotice wrapper to add simple message with error level
*
* @param string $message
* @param string|string[] $sections // message sections on final report
* @param int $level // warning level
* @param int $mode // ADD_NORMAL | ADD_UNIQUE | ADD_UNIQUE_UPDATE | ADD_UNIQUE_APPEND
* @param string $uniqueId // used for ADD_UNIQUE or ADD_UNIQUE_UPDATE or ADD_UNIQUE_APPEND
*
* @return string // notice insert id
*
* @throws Exception
*/
public function addFinalReportNoticeMessage($message, $sections, $level = DUPX_NOTICE_ITEM::INFO, $mode = self::ADD_NORMAL, $uniqueId = null)
{
return $this->addFinalReportNotice(array(
'shortMsg' => $message,
'level' => $level,
'sections' => $sections,
), $mode, $uniqueId);
}
/**
*
* @param array $list
* @param array|DUPX_NOTICE_ITEM $item // if string add new notice obj with item message and level param
* // if array must be [
* 'shortMsg' => text,
* 'level' => level,
* 'longMsg' => html text,
* 'sections' => sections list,
* 'faqLink' => [
* 'url' => external link
* 'label' => link text if empty get external url link
* ]
* ]
* @param int $mode // ADD_NORMAL | ADD_UNIQUE | ADD_UNIQUE_UPDATE | ADD_UNIQUE_APPEND
* @param string $uniqueId // used for ADD_UNIQUE or ADD_UNIQUE_UPDATE or ADD_UNIQUE_APPEND
*
* @return string // notice insert id
*
* @throws Exception
*/
private static function addReportNoticeToList(&$list, $item, $mode = self::ADD_NORMAL, $uniqueId = null)
{
switch ($mode) {
case self::ADD_UNIQUE:
if (empty($uniqueId)) {
throw new Exception('uniqueId can\'t be empty');
}
if (isset($list[$uniqueId])) {
return $uniqueId;
}
// no break -> continue on unique update
case self::ADD_UNIQUE_UPDATE:
if (empty($uniqueId)) {
throw new Exception('uniqueId can\'t be empty');
}
$insertId = $uniqueId;
break;
case self::ADD_UNIQUE_APPEND_IF_EXISTS:
if (empty($uniqueId)) {
throw new Exception('uniqueId can\'t be empty');
}
if (!isset($list[$uniqueId])) {
return false;
}
// no break
case self::ADD_UNIQUE_APPEND:
if (empty($uniqueId)) {
throw new Exception('uniqueId can\'t be empty');
}
$insertId = $uniqueId;
// if item id exist append long msg
if (isset($list[$uniqueId])) {
$tempObj = self::getObjFromParams($item);
$list[$uniqueId]->longMsg .= $tempObj->longMsg;
$item = $list[$uniqueId];
}
break;
case self::ADD_UNIQUE_PREPEND_IF_EXISTS:
if (empty($uniqueId)) {
throw new Exception('uniqueId can\'t be empty');
}
if (!isset($list[$uniqueId])) {
return false;
}
// no break
case self::ADD_UNIQUE_PREPEND:
if (empty($uniqueId)) {
throw new Exception('uniqueId can\'t be empty');
}
$insertId = $uniqueId;
// if item id exist append long msg
if (isset($list[$uniqueId])) {
$tempObj = self::getObjFromParams($item);
$list[$uniqueId]->longMsg = $tempObj->longMsg.$list[$uniqueId]->longMsg;
$item = $list[$uniqueId];
}
break;
case self::ADD_NORMAL:
default:
if (empty($uniqueId)) {
$insertId = self::getNewAutoUniqueId();
} else {
$insertId = $uniqueId;
}
}
$list[$insertId] = self::getObjFromParams($item);
return $insertId;
}
/**
*
* @param string|array|DUPX_NOTICE_ITEM $item // if string add new notice obj with item message and level param
* // if array must be [
* 'shortMsg' => text,
* 'level' => level,
* 'longMsg' => html text,
* 'sections' => sections list,
* 'faqLink' => [
* 'url' => external link
* 'label' => link text if empty get external url link
* ]
* ]
* @param int $level message level considered only in the case where $item is a string.
* @return \DUPX_NOTICE_ITEM
*
* @throws Exception
*/
private static function getObjFromParams($item, $level = DUPX_NOTICE_ITEM::INFO)
{
if ($item instanceof DUPX_NOTICE_ITEM) {
$newObj = $item;
} else if (is_array($item)) {
$newObj = DUPX_NOTICE_ITEM::getItemFromArray($item);
} else if (is_string($item)) {
$newObj = new DUPX_NOTICE_ITEM($item, $level);
} else {
throw new Exception('Notice input not valid');
}
return $newObj;
}
/**
*
* @param null|string $section if null is count global
* @param int $level error level
* @param string $operator > < >= <= = !=
*
* @return int
*/
public function countFinalReportNotices($section = null, $level = DUPX_NOTICE_ITEM::INFO, $operator = '>=')
{
$result = 0;
foreach ($this->finalReporNotices as $notice) {
if (is_null($section) || in_array($section, $notice->sections)) {
switch ($operator) {
case '>=':
$result += (int) ($notice->level >= $level);
break;
case '>':
$result += (int) ($notice->level > $level);
break;
case '=':
$result += (int) ($notice->level = $level);
break;
case '<=':
$result += (int) ($notice->level <= $level);
break;
case '<':
$result += (int) ($notice->level < $level);
break;
case '!=':
$result += (int) ($notice->level != $level);
break;
}
}
}
return $result;
}
/**
* sort final report notice from priority and notice level
*/
public function sortFinalReport()
{
uasort($this->finalReporNotices, 'DUPX_NOTICE_ITEM::sortNoticeForPriorityAndLevel');
}
/**
* display final final report notice section
*
* @param string $section
*/
public function displayFinalReport($section)
{
foreach ($this->finalReporNotices as $id => $notice) {
if (in_array($section, $notice->sections)) {
self::finalReportNotice($id, $notice);
}
}
}
/**
*
* @param string $section
* @param string $title
*/
public function displayFinalRepostSectionHtml($section, $title)
{
if ($this->haveSection($section)) {
?>
displayFinalReport($section);
?>
finalReporNotices as $notice) {
if (in_array($section, $notice->sections)) {
return true;
}
}
return false;
}
/**
*
* @param null|string $section if null is a global result
*
* @return int // returns the worst level found
*
*/
public function getSectionErrLevel($section = null)
{
$result = DUPX_NOTICE_ITEM::INFO;
foreach ($this->finalReporNotices as $notice) {
if (is_null($section) || in_array($section, $notice->sections)) {
$result = max($result, $notice->level);
}
}
return $result;
}
/**
*
* @param string $section
* @param bool $echo
* @return void|string
*/
public function getSectionErrLevelHtml($section = null, $echo = true)
{
return self::getErrorLevelHtml($this->getSectionErrLevel($section), $echo);
}
/**
* Displa next step notice message
*
* @param bool $deleteListAfterDisaply
* @return void
*/
public function displayStepMessages($deleteListAfterDisaply = true)
{
if (empty($this->nextStepNotices)) {
return;
}
?>
nextStepNotices as $notice) {
self::stepMsg($notice);
}
?>
nextStepNotices = array();
$this->saveNotices();
}
}
/**
*
* @param DUPX_NOTICE_ITEM $notice
*/
private static function stepMsg($notice)
{
$classes = array(
'notice',
'next-step',
self::getClassFromLevel($notice->level)
);
$haveContent = !empty($notice->faqLink) || !empty($notice->longMsg);
?>
level).': '.htmlentities($notice->shortMsg).''; ?>
faqLink)) {
?>
See FAQ:
faqLink['label']) ? $notice->faqLink['url'] : $notice->faqLink['label']); ?>
faqLink) && !empty($notice->longMsg)) {
echo '
';
}
if (!empty($notice->longMsg)) {
switch ($notice->longMsgMode) {
case DUPX_NOTICE_ITEM::MSG_MODE_PRE:
echo '
'.htmlentities($notice->longMsg).'
';
break;
case DUPX_NOTICE_ITEM::MSG_MODE_HTML:
echo $notice->longMsg;
break;
case DUPX_NOTICE_ITEM::MSG_MODE_DEFAULT:
default:
echo htmlentities($notice->longMsg);
}
}
$longContent = ob_get_clean();
DUPX_U_Html::getMoreContent($longContent, 'info', 200);
}
?>
level)
);
$haveContent = !empty($notice->faqLink) || !empty($notice->longMsg);
$contentId = 'notice-content-'.$id;
$iconClasses = $haveContent ? 'fa fa-caret-right' : 'fa fa-toggle-empty';
$toggleLinkData = $haveContent ? 'data-type="toggle" data-target="#'.$contentId.'"' : '';
?>
>
shortMsg); ?>
open) {
$infoClasses[] = 'no-display';
}
?>
faqLink)) {
?>
See FAQ:
faqLink['label']) ? $notice->faqLink['url'] : $notice->faqLink['label']); ?>
faqLink) && !empty($notice->longMsg)) {
echo '
';
}
if (!empty($notice->longMsg)) {
switch ($notice->longMsgMode) {
case DUPX_NOTICE_ITEM::MSG_MODE_PRE:
echo '
'.htmlentities($notice->longMsg).'
';
break;
case DUPX_NOTICE_ITEM::MSG_MODE_HTML:
echo $notice->longMsg;
break;
case DUPX_NOTICE_ITEM::MSG_MODE_DEFAULT:
default:
echo htmlentities($notice->longMsg);
}
}
?>
level, false).'] '.$notice->shortMsg;
if (!empty($notice->sections)) {
$result .= "\n\t".'SECTIONS: '.implode(',', $notice->sections);
}
if (!empty($notice->longMsg)) {
$result .= "\n\t".'LONG MSG: '.$notice->longMsg;
}
return $result."\n";
}
public function nextStepLog()
{
if (!empty($this->nextStepNotices)) {
DUPX_Log::info(
'===================================='."\n".
'NEXT STEP NOTICES'."\n".
'====================================');
foreach ($this->nextStepNotices as $notice) {
DUPX_Log::info(self::noticeToText($notice));
}
DUPX_Log::info(
'====================================');
}
}
public function finalReportLog($sections = array())
{
if (!empty($this->finalReporNotices)) {
DUPX_Log::info(
'===================================='."\n".
'FINAL REPORT NOTICES LIST'."\n".
'====================================');
foreach ($this->finalReporNotices as $notice) {
if (count(array_intersect($notice->sections, $sections)) > 0) {
DUPX_Log::info(self::noticeToText($notice));
}
}
DUPX_Log::info(
'====================================');
}
}
/**
* get html class from level
*
* @param int $level
* @return string
*/
private static function getClassFromLevel($level)
{
switch ($level) {
case DUPX_NOTICE_ITEM::INFO:
return 'l-info';
case DUPX_NOTICE_ITEM::NOTICE:
return 'l-notice';
case DUPX_NOTICE_ITEM::SOFT_WARNING:
return 'l-swarning';
case DUPX_NOTICE_ITEM::HARD_WARNING:
return 'l-hwarning';
case DUPX_NOTICE_ITEM::CRITICAL:
return 'l-critical';
case DUPX_NOTICE_ITEM::FATAL:
return 'l-fatal';
}
}
/**
* get level label from level
*
* @param int $level
* @param bool $echo
* @return type
*/
public static function getErrorLevelHtml($level, $echo = true)
{
switch ($level) {
case DUPX_NOTICE_ITEM::INFO:
$label = 'good';
break;
case DUPX_NOTICE_ITEM::NOTICE:
$label = 'good';
break;
case DUPX_NOTICE_ITEM::SOFT_WARNING:
$label = 'warning';
break;
case DUPX_NOTICE_ITEM::HARD_WARNING:
$label = 'warning';
break;
case DUPX_NOTICE_ITEM::CRITICAL:
$label = 'critical error';
break;
case DUPX_NOTICE_ITEM::FATAL:
$label = 'fatal error';
break;
default:
return;
}
$classes = self::getClassFromLevel($level);
ob_start();
?>
addNextStepNoticeMessage('Level info ('.DUPX_NOTICE_ITEM::INFO.')', DUPX_NOTICE_ITEM::INFO);
$manager->addNextStepNoticeMessage('Level notice ('.DUPX_NOTICE_ITEM::NOTICE.')', DUPX_NOTICE_ITEM::NOTICE);
$manager->addNextStepNoticeMessage('Level soft warning ('.DUPX_NOTICE_ITEM::SOFT_WARNING.')', DUPX_NOTICE_ITEM::SOFT_WARNING);
$manager->addNextStepNoticeMessage('Level hard warning ('.DUPX_NOTICE_ITEM::HARD_WARNING.')', DUPX_NOTICE_ITEM::HARD_WARNING);
$manager->addNextStepNoticeMessage('Level critical error ('.DUPX_NOTICE_ITEM::CRITICAL.')', DUPX_NOTICE_ITEM::CRITICAL);
$manager->addNextStepNoticeMessage('Level fatal error ('.DUPX_NOTICE_ITEM::FATAL.')', DUPX_NOTICE_ITEM::FATAL);
$manager->saveNotices();
}
/**
* test function
*/
public static function testNextStepFullMessageData()
{
$manager = self::getInstance();
$longMsg = <<Formattend long text
- Proin dapibus mi eu erat pulvinar, id congue nisl egestas.
- Nunc venenatis eros et sapien ornare consequat.
- Mauris tincidunt est sit amet turpis placerat, a tristique dui porttitor.
- Etiam volutpat lectus quis risus molestie faucibus.
- Integer gravida eros sit amet sem viverra, a volutpat neque rutrum.
- Aenean varius ipsum vitae lorem tempus rhoncus.
LONGMSG;
$manager->addNextStepNotice(array(
'shortMsg' => 'Full elements next step message MODE HTML',
'level' => DUPX_NOTICE_ITEM::HARD_WARNING,
'longMsg' => $longMsg,
'longMsgMode' => DUPX_NOTICE_ITEM::MSG_MODE_HTML,
'faqLink' => array(
'url' => 'http://www.google.it',
'label' => 'google link'
)
));
$longMsg = <<addNextStepNotice(array(
'shortMsg' => 'Full elements next step message MODE PRE',
'level' => DUPX_NOTICE_ITEM::HARD_WARNING,
'longMsg' => $longMsg,
'longMsgMode' => DUPX_NOTICE_ITEM::MSG_MODE_PRE,
'faqLink' => array(
'url' => 'http://www.google.it',
'label' => 'google link'
)
));
$longMsg = <<addNextStepNotice(array(
'shortMsg' => 'Full elements next step message MODE DEFAULT',
'level' => DUPX_NOTICE_ITEM::HARD_WARNING,
'longMsg' => $longMsg,
'longMsgMode' => DUPX_NOTICE_ITEM::MSG_MODE_DEFAULT,
'faqLink' => array(
'url' => 'http://www.google.it',
'label' => 'google link'
)
));
$longMsg = <<addNextStepNotice(array(
'shortMsg' => 'Full elements LONG LONG',
'level' => DUPX_NOTICE_ITEM::HARD_WARNING,
'longMsg' => $longMsg,
'longMsgMode' => DUPX_NOTICE_ITEM::MSG_MODE_DEFAULT,
'faqLink' => array(
'url' => 'http://www.google.it',
'label' => 'google link'
)
));
$manager->saveNotices();
}
/**
* test function
*/
public static function testFinalReporMessaesLevels()
{
$section = 'general';
$manager = self::getInstance();
$manager->addFinalReportNoticeMessage('Level info ('.DUPX_NOTICE_ITEM::INFO.')', $section, DUPX_NOTICE_ITEM::INFO, DUPX_NOTICE_MANAGER::ADD_UNIQUE, 'test_fr_0');
$manager->addFinalReportNoticeMessage('Level notice ('.DUPX_NOTICE_ITEM::NOTICE.')', $section, DUPX_NOTICE_ITEM::NOTICE, DUPX_NOTICE_MANAGER::ADD_UNIQUE, 'test_fr_1');
$manager->addFinalReportNoticeMessage('Level soft warning ('.DUPX_NOTICE_ITEM::SOFT_WARNING.')', $section, DUPX_NOTICE_ITEM::SOFT_WARNING, DUPX_NOTICE_MANAGER::ADD_UNIQUE, 'test_fr_2');
$manager->addFinalReportNoticeMessage('Level hard warning ('.DUPX_NOTICE_ITEM::HARD_WARNING.')', $section, DUPX_NOTICE_ITEM::HARD_WARNING, DUPX_NOTICE_MANAGER::ADD_UNIQUE, 'test_fr_3');
$manager->addFinalReportNoticeMessage('Level critical error ('.DUPX_NOTICE_ITEM::CRITICAL.')', $section, DUPX_NOTICE_ITEM::CRITICAL, DUPX_NOTICE_MANAGER::ADD_UNIQUE, 'test_fr_4');
$manager->addFinalReportNoticeMessage('Level fatal error ('.DUPX_NOTICE_ITEM::FATAL.')', $section, DUPX_NOTICE_ITEM::FATAL, DUPX_NOTICE_MANAGER::ADD_UNIQUE, 'test_fr_5');
$manager->saveNotices();
}
/**
* test function
*/
public static function testFinalReportFullMessages()
{
$section = 'general';
$manager = self::getInstance();
$longMsg = <<Formattend long text
- Proin dapibus mi eu erat pulvinar, id congue nisl egestas.
- Nunc venenatis eros et sapien ornare consequat.
- Mauris tincidunt est sit amet turpis placerat, a tristique dui porttitor.
- Etiam volutpat lectus quis risus molestie faucibus.
- Integer gravida eros sit amet sem viverra, a volutpat neque rutrum.
- Aenean varius ipsum vitae lorem tempus rhoncus.
LONGMSG;
$manager->addFinalReportNotice(array(
'shortMsg' => 'Full elements final report message',
'level' => DUPX_NOTICE_ITEM::HARD_WARNING,
'longMsg' => $longMsg,
'longMsgMode' => DUPX_NOTICE_ITEM::MSG_MODE_HTML,
'sections' => $section,
'faqLink' => array(
'url' => 'http://www.google.it',
'label' => 'google link'
)
), DUPX_NOTICE_MANAGER::ADD_UNIQUE, 'test_fr_full_1');
$manager->addFinalReportNotice(array(
'shortMsg' => 'Full elements final report message info high priority',
'level' => DUPX_NOTICE_ITEM::INFO,
'longMsg' => $longMsg,
'longMsgMode' => DUPX_NOTICE_ITEM::MSG_MODE_HTML,
'sections' => $section,
'faqLink' => array(
'url' => 'http://www.google.it',
'label' => 'google link'
),
'priority' => 5
), DUPX_NOTICE_MANAGER::ADD_UNIQUE, 'test_fr_full_2');
$manager->saveNotices();
}
//PHP 8 Requires method to be public
public function __wakeup()
{
}
private function __clone()
{
}
}
class DUPX_NOTICE_ITEM
{
const INFO = 0;
const NOTICE = 1;
const SOFT_WARNING = 2;
const HARD_WARNING = 3;
const CRITICAL = 4;
const FATAL = 5;
const MSG_MODE_DEFAULT = 'def';
const MSG_MODE_HTML = 'html';
const MSG_MODE_PRE = 'pre';
/**
*
* @var string text
*/
public $shortMsg = '';
/**
*
* @var string html text
*/
public $longMsg = '';
/**
*
* @var bool if true long msg can be html
*/
public $longMsgMode = self::MSG_MODE_DEFAULT;
/**
*
* @var null|array // null = no faq link
* array( 'label' => link text , 'url' => faq url)
*/
public $faqLink = array(
'label' => '',
'url' => ''
);
/**
*
* @var string[] notice sections for final report only
*/
public $sections = array();
/**
*
* @var int
*/
public $level = self::NOTICE;
/**
*
* @var int
*/
public $priority = 10;
/**
*
* @var bool if true notice start open. For final report only
*/
public $open = false;
/**
*
* @param string $shortMsg text
* @param int $level
* @param string $longMsg html text
* @param string|string[] $sections
* @param null|array $faqLink [
* 'url' => external link
* 'label' => link text if empty get external url link
* ]
* @param int priority
* @param bool open
* @param string longMsgMode MSG_MODE_DEFAULT | MSG_MODE_HTML | MSG_MODE_PRE
*/
public function __construct($shortMsg, $level = self::INFO, $longMsg = '', $sections = array(), $faqLink = null, $priority = 10, $open = false, $longMsgMode = self::MSG_MODE_DEFAULT)
{
$this->shortMsg = (string) $shortMsg;
$this->level = (int) $level;
$this->longMsg = (string) $longMsg;
$this->sections = is_array($sections) ? $sections : array($sections);
$this->faqLink = $faqLink;
$this->priority = $priority;
$this->open = $open;
$this->longMsgMode = $longMsgMode;
}
/**
*
* @return array [
* 'shortMsg' => text,
* 'level' => level,
* 'longMsg' => html text,
* 'sections' => string|string[],
* 'faqLink' => [
* 'url' => external link
* 'label' => link text if empty get external url link
* ]
* 'priority' => int low first
* 'open' => if true the tab is opene on final report
* 'longMsgMode'=> MSG_MODE_DEFAULT | MSG_MODE_HTML | MSG_MODE_PRE
* ]
*/
public function toArray()
{
return array(
'shortMsg' => $this->shortMsg,
'level' => $this->level,
'longMsg' => $this->longMsg,
'sections' => $this->sections,
'faqLink' => $this->faqLink,
'priority' => $this->priority,
'open' => $this->open,
'longMsgMode' => $this->longMsgMode
);
}
/**
*
* @return array [
* 'shortMsg' => text,
* 'level' => level,
* 'longMsg' => html text,
* 'sections' => string|string[],
* 'faqLink' => [
* 'url' => external link
* 'label' => link text if empty get external url link
* ],
* priority
* open
* longMsgMode
* ]
* @return DUPX_NOTICE_ITEM
*/
public static function getItemFromArray($array)
{
if (isset($array['sections']) && !is_array($array['sections'])) {
if (empty($array['sections'])) {
$array['sections'] = array();
} else {
$array['sections'] = array($array['sections']);
}
}
$params = array_merge(self::getDefaultArrayParams(), $array);
$result = new self($params['shortMsg'], $params['level'], $params['longMsg'], $params['sections'], $params['faqLink'], $params['priority'], $params['open'], $params['longMsgMode']);
return $result;
}
/**
*
* @return array [
* 'shortMsg' => text,
* 'level' => level,
* 'longMsg' => html text,
* 'sections' => string|string[],
* 'faqLink' => [
* 'url' => external link
* 'label' => link text if empty get external url link
* ],
* priority
* open
* longMsgMode
* ]
*/
public static function getDefaultArrayParams()
{
return array(
'shortMsg' => '',
'level' => self::INFO,
'longMsg' => '',
'sections' => array(),
'faqLink' => null,
'priority' => 10,
'open' => false,
'longMsgMode' => self::MSG_MODE_DEFAULT
);
}
/**
* before lower priority
* before highest level
*
* @param DUPX_NOTICE_ITEM $a
* @param DUPX_NOTICE_ITEM $b
*/
public static function sortNoticeForPriorityAndLevel($a, $b)
{
if ($a->priority == $b->priority) {
if ($a->level == $b->level) {
return 0;
} else if ($a->level < $b->level) {
return 1;
} else {
return -1;
}
} else if ($a->priority < $b->priority) {
return -1;
} else {
return 1;
}
}
}