first commit
This commit is contained in:
@@ -0,0 +1,130 @@
|
||||
<?php
|
||||
|
||||
namespace Analyst\Notices;
|
||||
|
||||
use Analyst\Core\AbstractFactory;
|
||||
|
||||
class NoticeFactory extends AbstractFactory
|
||||
{
|
||||
private static $instance;
|
||||
|
||||
CONST OPTIONS_KEY = 'analyst_notices';
|
||||
|
||||
/**
|
||||
* Application notifications
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
protected $notices = [];
|
||||
|
||||
/**
|
||||
* Read factory from options or make fresh instance
|
||||
*
|
||||
* @return NoticeFactory
|
||||
*/
|
||||
public static function instance()
|
||||
{
|
||||
if (!static::$instance) {
|
||||
$raw = get_option(self::OPTIONS_KEY);
|
||||
|
||||
// In case object is already unserialized
|
||||
// and instance of AccountDataFactory we
|
||||
// return it, in other case deal with
|
||||
// serialized string data
|
||||
if ($raw instanceof self) {
|
||||
static::$instance = $raw;
|
||||
} else {
|
||||
static::$instance = is_string($raw) ? static::unserialize($raw) : new self();
|
||||
}
|
||||
}
|
||||
|
||||
return static::$instance;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sync this object data with cache
|
||||
*/
|
||||
public function sync()
|
||||
{
|
||||
update_option(self::OPTIONS_KEY, serialize($this));
|
||||
}
|
||||
|
||||
/**
|
||||
* Sync this instance data with cache
|
||||
*/
|
||||
public static function syncData()
|
||||
{
|
||||
static::instance()->sync();
|
||||
}
|
||||
|
||||
/**
|
||||
* @return array
|
||||
*/
|
||||
public function getNotices()
|
||||
{
|
||||
return $this->notices;
|
||||
}
|
||||
|
||||
/**
|
||||
* Filter out notices for certain account
|
||||
*
|
||||
* @param $accountId
|
||||
* @return array
|
||||
*/
|
||||
public function getNoticesForAccount($accountId)
|
||||
{
|
||||
return array_filter($this->notices, function (Notice $notice) use ($accountId) {
|
||||
return $notice->getAccountId() === $accountId;
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Add new notice
|
||||
*
|
||||
* @param $notice
|
||||
*
|
||||
* @return $this
|
||||
*/
|
||||
public function addNotice($notice)
|
||||
{
|
||||
array_push($this->notices, $notice);
|
||||
|
||||
$this->sync();
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Find notice by id
|
||||
*
|
||||
* @param $id
|
||||
* @return Notice|null
|
||||
*/
|
||||
public function find($id)
|
||||
{
|
||||
$notices = array_filter($this->notices, function (Notice $notice) use ($id) {
|
||||
return $notice->getId() === $id;
|
||||
});
|
||||
|
||||
return array_pop($notices);
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove notice by it's id
|
||||
*
|
||||
* @param $id
|
||||
*/
|
||||
public function remove($id)
|
||||
{
|
||||
// Get key of notice to remove
|
||||
$key = array_search(
|
||||
$this->find($id),
|
||||
$this->notices
|
||||
);
|
||||
|
||||
// Unset notice with key
|
||||
unset($this->notices[$key]);
|
||||
|
||||
$this->sync();
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user