| 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);		}	}}?>
 |