wp_back/wp-content/plugins/shortpixel-image-optimiser/class/Model/AdminNoticeModel.php
2024-05-20 15:37:46 +03:00

156 lines
3.0 KiB
PHP

<?php
namespace ShortPixel\Model;
if ( ! defined( 'ABSPATH' ) ) {
exit; // Exit if accessed directly.
}
use ShortPixel\ShortPixelLogger\ShortPixelLogger as Log;
use ShortPixel\Notices\NoticeController as Notice;
use ShortPixel\Notices\NoticeController as Notices;
abstract class AdminNoticeModel
{
protected $key; // abstract
protected $notice;
protected $errorLevel = 'normal';
protected $suppress_delay = YEAR_IN_SECONDS;
protected $callback;
protected $include_screens = array();
protected $exclude_screens = array();
protected $data;
// No stuff loading here, low init
public function __construct()
{
}
// The main init, ty.
public function load()
{
$noticeController = Notices::getInstance();
$notice = $noticeController->getNoticeByID($this->key);
if (is_object($notice))
{
$this->notice = $notice;
}
if (is_object($notice) && $notice->isDismissed())
{
return false;
}
if (is_null($this->notice) && $this->checkTrigger() === true)
{
$this->add();
}
elseif ( is_object($this->notice) && $this->checkReset() === true)
{
$this->reset();
}
}
public function getKey()
{
return $this->key;
}
public function reset($key = null)
{
$key = (is_null($key)) ? $this->key : $key;
Notices::removeNoticeByID($key);
}
protected function checkReset()
{
return false;
}
// For when trigger condition is not applicable.
public function addManual($args = array())
{
foreach($args as $key => $val)
{
$this->addData($key, $val);
}
$this->add();
}
public function getNoticeObj()
{
return $this->notice; // can be null!
}
// Proxy for noticeModel dismissed
public function isDismissed()
{
$notice = $this->getNoticeObj();
if (is_null($notice) || $notice->isDismissed() === false)
return false;
return true;
}
protected function add()
{
switch ($this->errorLevel)
{
case 'warning':
$notice = Notices::addWarning($this->getMessage());
break;
case 'normal';
default:
$notice = Notices::addNormal($this->getMessage());
break;
}
/// Todo implement include / exclude screens here.
if (count($this->exclude_screens) > 0)
{
$notice->limitScreens('exclude', $this->exclude_screens);
}
if (count($this->include_screens) > 0)
{
$notice->limitScreens('include', $this->include_screens);
}
if (! is_null($this->callback))
Notices::makePersistent($notice, $this->key, $this->suppress_delay, $this->callback);
else
Notices::makePersistent($notice, $this->key, $this->suppress_delay);
$this->notice = $notice;
}
protected function addData($name, $value)
{
$this->data[$name] = $value;
}
protected function getData($name)
{
if (isset($this->data[$name]))
{
return $this->data[$name];
}
return false;
}
// ?? abstract proteced removeCondition();
abstract protected function checkTrigger();
abstract protected function getMessage();
}