'Information', self::LEVEL_WARNING => 'Warning', self::LEVEL_CRITICAL => 'Critical', ]; public function __construct($_id=null) { parent::__construct(self::COLLECTION); if($_id) $this->_loadById((int) $_id); } public function setUniqueId($id) { $this->set(self::UNIQUE_ID, $id); } public function getUniqueId():string { return $this->get(self::UNIQUE_ID); } public function setCreated($value):void { $this->set(self::CREATED, $value); } public function getCreated() { return $this->get(self::CREATED); } public function setTitle($value):void { $this->set(self::TITLE, $value); } public function getTitle() { return $this->get(self::TITLE); } public function setMessage($value):void { $this->set(self::MESSAGE, $value); } public function getMessage() { return $this->get(self::MESSAGE); } public function setEmailSent(bool $bool):void { $this->set(self::EMAIL_SENT, $bool);} public function isEmailSent() : bool { return $this->get(self::EMAIL_SENT, false); } public function setLevel(int $value):void { $this->set(self::LEVEL, $value); } public function getLevel():int { return (int) $this->get(self::LEVEL); } public function save():void { if(!$this->getUniqueId()) $this->setUniqueId(Util::generateUniqueId()); parent::save(); } public static function db():SleekStore { return new SleekStore(self::COLLECTION); } public static function query():QueryBuilder { return self::db()->createQueryBuilder(); } public static function getAlertNotificationFrequency(int $level) : int { $levels = Factory::getSettingsNotifications()->getAlertLevelFrequency(); return $levels[$level] ?? 0; } /** * @return int * @throws IOException * @throws InvalidArgumentException */ public static function getTotalAlerts():int { return count(self::query() ->select([JetBackup::ID_FIELD]) ->getQuery() ->fetch()); } /** * @return int * @throws IOException * @throws InvalidArgumentException */ public static function getTotalCriticalAlerts():int { return count(self::query() ->select([JetBackup::ID_FIELD]) ->where([self::LEVEL, '=', self::LEVEL_CRITICAL]) ->getQuery() ->fetch()); } /** * @throws IOException * @throws DBException * @throws InvalidArgumentException|NotificationException * @throws Exception */ public static function processDailyAlerts() { if (!Factory::getSettingsNotifications()->isEmailsEnabled()) return; $levels = Factory::getSettingsNotifications()->getAlertLevelFrequency(); $alerts = []; foreach ($levels as $level => $frequency) { if($frequency != Notifications::NOTIFICATION_FREQUENCY_DAILY) continue; $results = self::query() ->select([JetBackup::ID_FIELD]) ->where([self::EMAIL_SENT, '=', false]) ->where([self::LEVEL, '=', $level]) ->getQuery() ->fetch(); if (empty($results)) continue; foreach ($results as $alert_id) { $alert = new Alert($alert_id[JetBackup::ID_FIELD]); if(!$alert->getId()) continue; $alerts[] = [ 'title' => $alert->getTitle(), 'message' => $alert->getMessage(), 'level' => self::LEVEL_NAMES[$alert->getLevel()], 'date' => Util::date( Wordpress::getDateFormat() . ' ' . Wordpress::getTimeFormat(), (int) $alert->getCreated() ), ]; $alert->setEmailSent(true); $alert->save(); } } if (empty($alerts)) return; Notification::message() ->addParam('backup_domain', Wordpress::getSiteDomain()) ->addParam('notification_frequency', Notifications::NOTIFICATION_FREQUENCY_NAMES[Notifications::NOTIFICATION_FREQUENCY_DAILY]) ->addParam('alerts', $alerts) ->send('JetBackup WordPress Notification', 'alert'); } /** * @throws InvalidArgumentException * @throws IOException */ public static function clearAlerts():void { self::query()->getQuery()->delete(); } /** * @param string $title * @param string $message * @param int $level * * @return void * @throws IOException * @throws InvalidArgumentException * @throws NotificationException * @throws Exception */ public static function add(string $title, string $message, int $level):void { $alert = new Alert(); $alert->setEmailSent(false); if(self::getAlertNotificationFrequency($level) == Notifications::NOTIFICATION_FREQUENCY_REAL_TIME) { Notification::message() ->addParam('backup_domain', Wordpress::getSiteDomain()) ->addParam('notification_frequency', Notifications::NOTIFICATION_FREQUENCY_NAMES[Notifications::NOTIFICATION_FREQUENCY_REAL_TIME]) ->addParam('alerts', [[ 'title' => $title, 'message' => $message, 'level' => self::LEVEL_NAMES[$level], 'date' => Util::date( Wordpress::getDateFormat() . ' ' . Wordpress::getTimeFormat(), (int) $alert->getCreated() ) ]]) ->send('JetBackup WordPress Notification', 'alert'); $alert->setEmailSent(true); } $alert->setCreated(time()); $alert->setTitle($title); $alert->setMessage($message); $alert->setLevel($level); $alert->setEngine(Engine::ENGINE_WP); $alert->save(); } /** * @throws Exception */ public function getDisplay(): array { return [ JetBackup::ID_FIELD => $this->getId(), self::UNIQUE_ID => $this->getUniqueId(), self::CREATED => $this->getCreated(), self::TITLE => $this->getTitle(), self::MESSAGE => $this->getMessage(), Engine::ENGINE => $this->getEngine(), 'engine_name' => $this->getEngineName(), self::LEVEL => $this->getLevel(), self::EMAIL_SENT => $this->isEmailSent() ]; } /** * @throws Exception */ public function getDisplayCLI(): array { return [ 'ID' => $this->getId(), 'Created' => CLI::date($this->getCreated()), 'Title' => $this->getTitle(), 'Message' => $this->getMessage(), 'Engine' => $this->getEngineName(), 'Level' => self::LEVEL_NAMES[$this->getLevel()], 'Email Sent' => $this->isEmailSent() ? 'Yes' : 'No' ]; } }