can('notification','read')) return; ?>
false)) as $user) { $recipients[] = $user->login; } // envoi premiere notif Notification::emit( array( 'label' => "Nouvelle fonctionnalité de notification !", 'html' => "Une nouvelle Notification à été ajoutée à votre espace.
Vous pouvez consulter toutes vos notifications ici et configurer vos préférences la.", 'meta' => array( 'link' => ROOT_URL.'/index.php?module=notification', ), 'recipients' => $recipients ) ); } //Fonction executée lors de la désactivation du plugin function notification_uninstall($id){ if($id != 'fr.core.notification') return; Entity::uninstall(__DIR__); } //Déclaration des sections de droits du plugin //Déclaration des sections de droits du plugin Right::register('notification',array('label'=>'Gestion des droits sur le plugin notification')); //Comprends toutes les actions du plugin qui ne nécessitent pas de vue html require_once(__DIR__.SLASH.'action.php'); //Déclaration du menu de réglages function notification_menu_setting(&$settingMenu){ global $myUser; if(!$myUser->can('notification','configure')) return; $settingMenu[]= array( 'sort' =>1, 'url' => 'setting.php?section=notification', 'icon' => 'fas fa-angle-right', 'label' => 'Notifications' ); } function notification_menu_account(&$accountMenu){ global $myUser; if(!$myUser->connected() || !$myUser->can('notification', 'read')) return; $accountMenu[]= array( 'sort' => 1, 'url' => 'account.php?section=notification', 'icon' => 'fas fa-angle-right', 'label' => 'Notifications', ); } //Déclaration des pages de réglages function notification_content_setting(){ global $_; if(file_exists(__DIR__.SLASH.'setting.'.$_['section'].'.php')) require_once(__DIR__.SLASH.'setting.'.$_['section'].'.php'); } //Déclaration des pages de réglages function notification_content_account(){ global $_; if(file_exists(__DIR__.SLASH.'account.'.$_['section'].'.php')) require_once(__DIR__.SLASH.'account.'.$_['section'].'.php'); } //Émission d'une notification function notification_emit_notification($params){ require_once(__DIR__.SLASH.'Notification.class.php'); Notification::emit($params); } function notification_methods(&$sendTypes){ require_once(__DIR__.SLASH.'Notification.class.php'); require_once(__DIR__.SLASH.'UserNotification.class.php'); $sendTypes[] = array( 'slug' => 'mail', 'label' => 'Mail', 'explain' => 'Envoi par e-mail', 'icon' => 'far fa-envelope-open', 'callback' => function($recipient, $infos, $notification){ if($infos['pinned'] == 1) return; if(!isset($recipient)) throw new Exception("Aucun destinataire n'a été renseigné pour l'envoi de mail"); // ENVOI MAIL global $conf; $expeditor = $conf->get('notification_mail_from') != '' ? $conf->get('notification_mail_from'): 'Erp '; $reply = $conf->get('notification_mail_reply') != '' ? $conf->get('notification_mail_reply'): 'no-reply@core.fr'; $mail = new Mail(); $mail->expeditor = $expeditor; $mail->reply = $reply; $mail->title = $infos['label']; $mail->message = '

'.$infos['label'].'

'.$infos['html'].'

'; $mail->message .= (isset($infos['meta']['link'])) ? 'Accéder à l\'outil' : ''; $usermail = User::byLogin($recipient); $mail->recipients['to'][] = $usermail->mail; $mail->send(); } ); $sendTypes[] = array( 'slug' => 'interface', 'label' => 'Interface', 'explain' => 'Visualisation via l\'ERP', 'icon' => 'far fa-bell', 'callback' => function($recipient, $infos, $notification){ if($infos['pinned'] == 1) return; if(!isset($recipient)) throw new Exception("Aucun destinataires n\'a été renseignés pour l\'envoi de notifications à travers l\'ERP"); $userNotification = new UserNotification(); $userNotification->notification = $notification->id; $userNotification->user = $recipient; $userNotification->read = 0; $userNotification->save(); } ); } function notification_cron($time){ global $_; if(date('H:i', $time)!= '03:00' && !isset($_['force-notification'])) return; Plugin::need('notification/Notification'); Notification::clear(); } Plugin::addHook('widget',function(&$models){ $model = new DashboardWidget(); $model->icon = 'fas fa-bell'; $model->headerBackground = '#ffbe5c'; $model->description = 'Affiche un menu sélectionné'; $model->label = 'Notification'; $model->width = 3; $model->height = 3; $model->model = 'notification'; $model->css = array(__DIR__.'/css/widget.css?v='.time()); $model->js = array(__DIR__.'/js/widget.js?v='.time()); $model->content = function(&$widget){ global $myUser; User::check_access('notification','read'); Plugin::need('dashboard/DashboardWidget'); $widget->title = 'Dernières alertes'; if(empty($widget->meta['label'])) $widget->meta['label'] = 'Bloc Menu'; if(empty($widget->meta['url'])) $widget->meta['url'] = ''; if(empty($widget->meta['color'])) $widget->meta['color'] = '#007bff'; ob_start(); require_once(__DIR__.SLASH.'Notification.class.php'); require_once(__DIR__.SLASH.'UserNotification.class.php'); $types = isset($widget->meta['types'])? explode(',',$widget->meta['types']) :array('announcement'); $max = isset($widget->meta['notification-number'])?$widget->meta['notification-number']:5; $maxlength = isset($widget->meta['notification-length'])?$widget->meta['notification-length']:250 ; $userNotifications = UserNotification::byUser($myUser,array( 'limit' => $max, 'unread' => false, 'types' => $types, )); ?>
Alertes
content = ob_get_clean(); }; $model->configure = function($widget){ global $myUser; User::check_access('notification','read'); require_once(__DIR__.SLASH.'Notification.class.php'); ob_start(); $selectedTypes = isset($widget->meta['types'])? explode(',',$widget->meta['types']) :array('announcement'); $max = isset($widget->meta['notification-number'])?$widget->meta['notification-number']:5; $maxlength = isset($widget->meta['notification-length'])?$widget->meta['notification-length']:250 ; ?> save = function($widget,$form){ global $myUser,$_; User::check_access('notification','read'); require_once(__DIR__.SLASH.'..'.SLASH.'dashboard'.SLASH.'DashboardWidget.class.php'); if(!isset($form['types'])) throw new Exception("Au moins un type de notification à afficher est requis"); if(!isset($form['notification-number'])) $form['notification-number'] = 5; if(!isset($form['notification-length'])) $form['notification-length'] = 150; $widget->meta['types'] = $form['types']; $widget->meta['notification-number'] = $form['notification-number']; $widget->meta['notification-length'] = $form['notification-length']; $widget->save(); $widget->save(); }; $models[$model->model] = $model; }); //Déclaration des settings de base //Types possibles : text,select ( + "values"=> array('1'=>'Val 1'),password,checkbox. Un simple string définit une catégorie. Configuration::setting('notification',array( "E-mail", 'notification_mail_from' => array("label"=>"Envoi de la part de","legend"=>"Format: Nom <email>, (eg: MyFirm <no-reply@kiss.fr>)","type"=>"text",'placeholder'=>'eg: MyFirm '), 'notification_mail_reply' => array("label"=>"Réponse au mail","legend"=>"Adresse e-mail unique (eg: me@domain.com)","type"=>"text", 'placeholder'=>"eg: me@domain.com"), )); //Déclation des assets Plugin::addCss("/css/main.css"); Plugin::addJs("/js/main.js"); //Mapping hook / fonctions Plugin::addHook("install", "notification_install"); Plugin::addHook("uninstall", "notification_uninstall"); Plugin::addHook("login_header", "notification_menu"); Plugin::addHook("page", "notification_page"); Plugin::addHook("menu_account", "notification_menu_account"); Plugin::addHook("content_account", "notification_content_account"); Plugin::addHook("menu_setting", "notification_menu_setting"); Plugin::addHook("content_setting", "notification_content_setting"); Plugin::addHook("emit_notification", "notification_emit_notification"); Plugin::addHook("notification_methods", "notification_methods"); Plugin::addHook("cron", "notification_cron"); ?>