123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110 |
- <?php
- /**
- * Define a notification.
- * @author Valentin CARRUESCO
- * @category Plugin
- * @license copyright
- */
- class Notification extends Entity{
- public $id,$label,$html,$type,$meta,$end,$start;
- protected $TABLE_NAME = 'notification';
- public $fields =
- array(
- 'id' => 'key',
- 'label' => 'string',
- 'html' => 'longstring',
- 'type' => 'string',
- 'meta' => 'longstring',
- 'start' => 'date',
- 'end' => 'date'
- );
- public static function types($key = null){
- $types = array(
- 'notice' => array(
- 'label' =>'Information',
- 'color' =>'#007fdc',
- 'icon' =>'far fa-flag',
- 'description' =>"Notifications d'informations mineures",
- ),
- 'alert' => array(
- 'label' =>'Alerte',
- 'color' =>'#ff3100',
- 'icon' =>'fas fa-fire',
- 'description' =>"Notifications importantes ou critiques",
- )
- );
- Plugin::callHook('notification_type',array(&$types));
-
- return $key ? $types[$key] : $types;
- }
- public static function emit($infos,$recipients = array()){
- require_once(__DIR__.SLASH.'UserNotification.class.php');
- //Nettoyage des notifications périmées
- self::clear();
- $default = array(
- 'label' => "Notification sans titre",
- 'html' => "",
- 'type' => "notice",
- 'meta' => array(),
- 'start' => time(),
- 'end' => strtotime('+3month')
- );
- $infos = array_merge($default,$infos);
- $notification = new Notification();
- $notification->label = $infos['label'];
- $notification->html = $infos['html'];
- $notification->type = $infos['type'];
- $notification->meta = json_encode($infos['meta']);
- $notification->end = $infos['end'];
- $notification->start = $infos['start'];
- $notification->save();
-
- foreach($recipients as $recipient) {
- $userNotification = new UserNotification();
- $userNotification->notification = $notification->id;
- $userNotification->user = $recipient;
- $userNotification->read = 0;
- $userNotification->save();
- }
- $preferences = array();
- foreach(UserPreference::staticQuery("SELECT * FROM {{table}} up WHERE user IN ('".implode("','",$recipients)."') AND up.key IN('notification_send_mail','notification_categories')",array(),true) as $row){
- if(!isset($preferences[$row->user])) $preferences[$row->user] = array();
- $preferences[$row->user][$row->key] = $row->value;
- }
- foreach($preferences as $user => $preference){
-
- if(trim($preference['notification_send_mail']) == '') continue;
- if(trim($preference['notification_categories']) == '') continue;
-
- $categories = json_decode($preference['notification_categories'],true);
-
- if(!is_array($categories) || !in_array($notification->type, $categories)) continue;
- $mail = new Mail();
- $mail->expeditor = 'IdleCorp <no-reply@idleman.fr>';
- $mail->title = $notification->label;
- $mail->recipients['to'][] = $preference['notification_send_mail'];
- $mail->message = $notification->html;
- $mail->message .= '<br><a href="'.ROOT_URL.'/index.php?module=notification#'.$userNotification->id.'">Voir la notification</a>';
- $mail->send();
- }
-
- }
- public static function clear(){
- foreach (Notification::loadAll(array('end:<'=>time())) as $notification) {
- UserNotification::delete(array('notification'=>$notification->id));
- Notification::deleteById($notification->id);
- }
- }
- }
- ?>
|