<?php
/**
* Magic Method Support
* @property array notifType
* @property array cacheNotifIcon
* @method void comment_post(array $args = ['id_user' => -1, 'id_last' => -1, 'id_obj' => -1])
* @method void add_comment_photo(array $args = ['id_user' => -1, 'id_last' => -1, 'id_obj' => -1])
* @method void comment_photo(array $args = ['id_user' => -1, 'id_last' => -1, 'id_obj' => -1])
* @method void comment_tracker(array $args = ['id_user' => -1, 'id_last' => -1, 'id_obj' => -1, 'notices_text' => ''])
* @method void add_friend(array $args = ['id_user' => -1, 'id_last' => -1, 'id_obj' => -1])
* @method void friend(array $args = ['id_user' => -1, 'id_last' => -1, 'id_obj' => -1])
* @method void gift(array $args = ['id_user' => -1, 'id_last' => -1, 'id_obj' => -1])
*/
class notif
{
private $notifType = [];
private $cacheNotifIcon = [];
/**
* @var notif
*/
private static $objectClassNotif;
/**
* notif constructor.
*/
private function __construct()
{
/**
* Добавляем список типов уведомлений
* а так-же иконку типа уведомления.
* Ключем массива является название типа уведомления,
* а значение этого название селектора иконки.
* Пример использования:
* notif::init()->comment_tracker(['id_user' => 'кому посылаем', 'id_last' => 'от кого посылаем', 'id_obj' => 'id записи', 'notices_text' => 'текст сообщения']);
* notif::init()->comment_post(['id_user' => 'кому посылаем', 'id_last' => 'от кого посылаем', 'id_obj' => 'id записи']);
*/
$this->notifType ['comment_post'] = 'icon_notify_mini_comment'; // комментирование записи
$this->notifType ['add_comment_photo'] = 'icon_notify_mini_photo_tag';// оставил коммент к фото
$this->notifType ['comment_photo'] = 'icon_notify_mini_repost'; // ответил на коммент к фото
$this->notifType ['comment_tracker'] = 'icon_notify_mini_interesting'; // ответ баг трекере
$this->notifType ['add_friend'] = 'icon_notify_mini_friend_accepted'; // добавили в друзья
$this->notifType ['no_friend'] = 'icon_notify_mini_error'; // отменили заявку в друзья
$this->notifType ['friend'] = 'icon_notify_mini_follow'; // заявка в друзья
$this->notifType ['gift'] = 'icon_notify_mini_gift'; // сделали подарок
$this->notifType ['blog'] = 'icon_notify_mini_wall'; // комментарии к блогу
$this->notifType ['blog_otvet'] = 'icon_notify_mini_repost'; // ответ на комментраий к блогу
}
/**
* @return notif
*/
public static function init() {
if((self::$objectClassNotif instanceof self) === false) {
self::$objectClassNotif = new static();
}
return self::$objectClassNotif;
}
/**
* @param string $name
* @param array $arguments
*/
public function __call($name, array $arguments)
{
// TODO: Implement __call() method.
$arguments = array_shift($arguments);
if (array_key_exists('id_user', $arguments) === false || array_key_exists('id_last', $arguments) === false || array_key_exists('id_obj', $arguments) === false) {
return;
}
if (array_key_exists($name, $this->notifType) === false) {
return;
}
DB:: $pdo->query("INSERT INTO `notices` (`id_user`, `id_last`, `time`, `type`, `id_obj`, `count`, `notices_text`) VALUES (?, ?, ?, ?, ?, '1', ?);", array($arguments['id_user'], $arguments['id_last'], time(), $name, $arguments['id_obj'], (array_key_exists('id_obj', $arguments) === false ? '' : $arguments['notices_text'])));
}
/**
* <p>Определяем иконку уведомления в
* зависимости от типа уведомления</p>
* @param $notifType
* @return string
*/
public function getTypeIcon($notifType)
{
if (array_key_exists($notifType, $this->cacheNotifIcon) === false)
{
if($notifType === 'error_post') {
$this->cacheNotifIcon[$notifType] = 'icon_notify_mini_error';
} else {
if (array_key_exists($notifType, $this->notifType) === true) {
$this->cacheNotifIcon[$notifType] = $this->notifType[$notifType];
} else {
$this->cacheNotifIcon[$notifType] = 'icon_notify_mini_private_post';
}
}
}
return $this->cacheNotifIcon[$notifType];
}
}