From 6cc3ef0c99912bce3956f08693916eac063bb866 Mon Sep 17 00:00:00 2001 From: Juanjo Menent Date: Fri, 13 Jan 2017 16:08:49 +0100 Subject: [PATCH 1/5] NEW: Events notifications in browser --- htdocs/admin/agenda_other.php | 31 ++++- htdocs/comm/action/sound/notification.mp3 | Bin 0 -> 33430 bytes htdocs/core/ajax/check_events.php | 70 ++++++++++++ htdocs/core/js/agenda_notification.js.php | 133 ++++++++++++++++++++++ htdocs/core/modules/modAgenda.class.php | 4 + htdocs/langs/en_US/admin.lang | 2 + htdocs/theme/eldy/img/bell.png | Bin 0 -> 509 bytes 7 files changed, 238 insertions(+), 2 deletions(-) create mode 100644 htdocs/comm/action/sound/notification.mp3 create mode 100644 htdocs/core/ajax/check_events.php create mode 100644 htdocs/core/js/agenda_notification.js.php create mode 100644 htdocs/theme/eldy/img/bell.png diff --git a/htdocs/admin/agenda_other.php b/htdocs/admin/agenda_other.php index 9406f8ecc5d..d421b296acb 100644 --- a/htdocs/admin/agenda_other.php +++ b/htdocs/admin/agenda_other.php @@ -1,7 +1,7 @@ * Copyright (C) 2011 Regis Houssin - * Copyright (C) 2011-2013 Juanjo Menent + * Copyright (C) 2011-2017 Juanjo Menent * Copyright (C) 2015 Jean-François Ferry * Copyright (C) 2016 Charlie Benke * @@ -407,6 +407,34 @@ $tmplist=array('show_month'=>$langs->trans("ViewCal"), 'show_week'=>$langs->tran print $form->selectarray('AGENDA_DEFAULT_VIEW', $tmplist, $conf->global->AGENDA_DEFAULT_VIEW); print ''."\n"; +// AGENDA NOTIFICATION +print ''."\n"; +print ''.$langs->trans('AGENDA_NOTIFICATION').''."\n"; +print ' '."\n"; +print ''."\n"; + +if (empty($conf->global->AGENDA_NOTIFICATION)) { + print ''.img_picto($langs->trans('Disabled'),'switch_off').''; + print ''."\n"; +} else { + print ''.img_picto($langs->trans('Enabled'),'switch_on').''; + print ''."\n"; + + print ''."\n"; + print ''.$langs->trans('AGENDA_NOTIFICATION_SOUND').''."\n"; + print ' '."\n"; + print ''."\n"; + + + if (empty($conf->global->AGENDA_NOTIFICATION_SOUND)) { + print ''.img_picto($langs->trans('Disabled'),'switch_off').''; + } else { + print ''.img_picto($langs->trans('Enabled'),'switch_on').''; + } + + print ''."\n"; +} + print ''; dol_fiche_end(); @@ -415,7 +443,6 @@ print '
'; - print "
"; llxFooter(); diff --git a/htdocs/comm/action/sound/notification.mp3 b/htdocs/comm/action/sound/notification.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..c58e664fd9eadefa6d3048518e4a0ca61f4c0342 GIT binary patch literal 33430 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 literal 0 HcmV?d00001 diff --git a/htdocs/core/ajax/check_events.php b/htdocs/core/ajax/check_events.php new file mode 100644 index 00000000000..ce52413ceab --- /dev/null +++ b/htdocs/core/ajax/check_events.php @@ -0,0 +1,70 @@ + + * Copyright (C) 2017 Juanjo Menent + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + */ + +require '../../main.inc.php'; +require_once DOL_DOCUMENT_ROOT.'/comm/action/class/actioncomm.class.php'; + +global $user, $db, $langs, $conf; + +$time = GETPOST('time'); + +session_start(); + +//TODO Configure how long the upgrade will take +$time_update = 60; + +if (! empty($conf->global->AGENDA_NOTIFICATION)) { + if ($_SESSION['auto_check_events'] <= (int)$time) { + $_SESSION['auto_check_events'] = $time + $time_update; + + $eventos = array(); + + $sql = 'SELECT id'; + $sql .= ' FROM ' . MAIN_DB_PREFIX . 'actioncomm a, ' . MAIN_DB_PREFIX . 'actioncomm_resources ar'; + $sql .= ' WHERE datep BETWEEN ' . $db->idate($time + 1) . ' AND ' . $db->idate($time + $time_update); + $sql .= ' AND a.id = ar.fk_actioncomm'; + $sql .= ' AND a.code <> "AC_OTH_AUTO"'; + $sql .= ' AND ar.element_type = "user"'; + $sql .= ' AND ar.fk_element = ' . $user->id; + + $resql = $db->query($sql); + + if ($resql) { + + $actionmod = new ActionComm($db); + + while ($obj = $db->fetch_object($resql)) { + + $event = array(); + + $actionmod->fetch($obj->id); + + $event['id'] = $actionmod->id; + $event['tipo'] = $langs->transnoentities('Action' . $actionmod->code); + $event['titulo'] = $actionmod->label; + $event['location'] = $actionmod->location; + $eventos[] = $event; + $actionmod->initAsSpecimen(); + + } + } + + print json_encode($eventos); + } +} \ No newline at end of file diff --git a/htdocs/core/js/agenda_notification.js.php b/htdocs/core/js/agenda_notification.js.php new file mode 100644 index 00000000000..4e741a25092 --- /dev/null +++ b/htdocs/core/js/agenda_notification.js.php @@ -0,0 +1,133 @@ + + * Copyright (C) 2017 Juanjo Menent + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * +*/ +if (!defined('NOREQUIREUSER')) define('NOREQUIREUSER', '1'); +if (!defined('NOREQUIRESOC')) define('NOREQUIRESOC', '1'); +if (!defined('NOCSRFCHECK')) define('NOCSRFCHECK', 1); +if (!defined('NOTOKENRENEWAL')) define('NOTOKENRENEWAL', 1); +if (!defined('NOLOGIN')) define('NOLOGIN', 1); +if (!defined('NOREQUIREMENU')) define('NOREQUIREMENU', 1); +if (!defined('NOREQUIREHTML')) define('NOREQUIREHTML', 1); + +session_cache_limiter(FALSE); + +require_once '../../main.inc.php'; + +if(!($_SERVER['HTTP_REFERER'] === $dolibarr_main_url_root . '/' || $_SERVER['HTTP_REFERER'] === $dolibarr_main_url_root . '/index.php')){ + + global $langs, $conf; + + $langs->load('agenda'); + + // Define javascript type + header('Content-type: text/javascript; charset=UTF-8'); + header('Cache-Control: no-cache'); + + // Check notification permissions API HTML5 + print 'if (Notification.permission !== "granted") { + Notification.requestPermission() + }' . PHP_EOL; + + session_start(); + if (!isset($_SESSION['auto_check_events'])) { + + // Round to eliminate the second part + $_SESSION['auto_check_events'] = floor(time() / 60) * 60; + print 'var time_session = ' . $_SESSION['auto_check_events'] . ';' . PHP_EOL; + print 'var now = ' . $_SESSION['auto_check_events'] . ';' . PHP_EOL; + } else { + + print 'var time_session = ' . $_SESSION['auto_check_events'] . ';' . PHP_EOL; + print 'var now = ' . time() . ';' . PHP_EOL; + } + + //TODO provisionally set to be checked every 60 seconds, the 1000 is because it needs to be in milliseconds + print 'var time_auto_update = 60;' . "\n"; + ?> + + + if (now > (time_session + time_auto_update) || now == time_session) { + + first_execution(); //firts run auto check + } else { + + var time_first_execution = (time_auto_update - (now - time_session)) * 1000; + + setTimeout(first_execution, time_first_execution); //firts run auto check + } + + + function first_execution() { + check_events(); + setInterval(check_events, time_auto_update * 1000); //program time for run check events + } + + function check_events() { + + $.ajax("", { + type: "post", // Usually post o get + async: true, + data: {time: time_session}, + success: function (result) { + + var arr = JSON.parse(result); + + if (arr.length > 0) { + if (Notification.permission === "granted") { + + global->AGENDA_NOTIFICATION_SOUND){ + print 'var audio = new Audio(\''.dol_buildpath('/comm/action/sound/notification.mp3', 1).'\');'; + } + ?> + + $.each(arr, function (index, value) { + var body = value['tipo'] + ': ' + value['titulo']; + if (value['location'] != null) { + body += '\n transnoentities('Location')?>: ' + value['location']; + } + + + var title = "trans('Agenda') ?>"; + var extra = { + icon: "", + body: body, + tag: value['id'] + }; + + // We release the notify + var noti = new Notification(title, extra); + global->AGENDA_NOTIFICATION_SOUND){ + print 'if(index==0)audio.play();'."\n"; + } + ?> + noti.onclick = function (event) { + event.preventDefault(); // prevent the browser from focusing the Notification's tab + window.focus(); + window.open("" + value['id'], '_blank'); + noti.close(); + }; + }); + } + } + } + }); + time_session += time_auto_update; + } + diff --git a/htdocs/core/modules/modAgenda.class.php b/htdocs/core/modules/modAgenda.class.php index 2ba37ad3cbd..46c07d43194 100644 --- a/htdocs/core/modules/modAgenda.class.php +++ b/htdocs/core/modules/modAgenda.class.php @@ -7,6 +7,7 @@ * Copyright (C) 2009-2011 Regis Houssin * Copyright (C) 2013 Cedric Gross * Copyright (C) 2015 Bahfir Abbes + * Copyright (C) 2017 Juanjo Menent * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -73,6 +74,9 @@ class modAgenda extends DolibarrModules $this->requiredby = array(); $this->langfiles = array("companies"); + // Module parts + $this->module_parts = array('js' => array('/core/js/agenda_notification.js.php')); + // Constants //----------- $this->const = array(); diff --git a/htdocs/langs/en_US/admin.lang b/htdocs/langs/en_US/admin.lang index 00fb2e768ab..e906279da03 100644 --- a/htdocs/langs/en_US/admin.lang +++ b/htdocs/langs/en_US/admin.lang @@ -1475,6 +1475,8 @@ AGENDA_USE_EVENT_TYPE_DEFAULT=Set automatically this default value for type of e AGENDA_DEFAULT_FILTER_TYPE=Set automatically this type of event into search filter of agenda view AGENDA_DEFAULT_FILTER_STATUS=Set automatically this status for events into search filter of agenda view AGENDA_DEFAULT_VIEW=Which tab do you want to open by default when selecting menu Agenda +AGENDA_NOTIFICATION=Enable events notification +AGENDA_NOTIFICATION_SOUND=Enable sound on notifications ##### ClickToDial ##### ClickToDialDesc=This module allows to make phone numbers clickable. A click on this icon will call make your phone to call the phone number. This can be used to call a call center system from Dolibarr that can call the phone number on a SIP system for example. ClickToDialUseTelLink=Use just a link "tel:" on phone numbers diff --git a/htdocs/theme/eldy/img/bell.png b/htdocs/theme/eldy/img/bell.png new file mode 100644 index 0000000000000000000000000000000000000000..2397118a68a2d328e13a031a5c7c9265264e6d82 GIT binary patch literal 509 zcmV#dJPMOd$nEaE@4oqsPV1b# zzJBYhea>EGL`p;sfGjYms&Ap|Gm+2%U;-EbMq_eh0)d~G3*W=P?s=))2WG7Wz!=kS zjF|!Eft-7!-WZbso~^YvzTmP#P*p`lx`A_#e6PT;s-6`EcJMLaFz^-5sp@tyj+=nn z$j0wc)r;8XIwfAa!H!*rwg6WYr%_cs_I9kQ0E-l_)tFK*Cjj@xfO84J%|T!hsV0r; zLmk&70$2SP7!hgp0=unLOF9jCf!$W>N(h#aQcorXkB5M#5`sHJz*d+mjFClsMI6C5v9>Iu;;4!!*Oc~p#VET+m~YzIRV;% zMxQfS0^I@k6~GG65U}v!kJvj<7m(v6*rAAA1C_tRSs<&bkG^>-B1+Ye=Xdv1>e*@k zkJx7D;8q?=wbpJKV{-01^#W`FOU9V5QO8Fg%VS}qc0ifB00000NkvXXu0mjf2It;_ literal 0 HcmV?d00001 From 3a40d5a4f1d77b8493de5301601354e39c6edef9 Mon Sep 17 00:00:00 2001 From: Juanjo Menent Date: Fri, 13 Jan 2017 16:13:01 +0100 Subject: [PATCH 2/5] NEW: Events notifications in browser --- htdocs/admin/agenda_other.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/htdocs/admin/agenda_other.php b/htdocs/admin/agenda_other.php index d421b296acb..2835d17e2fe 100644 --- a/htdocs/admin/agenda_other.php +++ b/htdocs/admin/agenda_other.php @@ -408,6 +408,7 @@ print $form->selectarray('AGENDA_DEFAULT_VIEW', $tmplist, $conf->global->AGENDA_ print ''."\n"; // AGENDA NOTIFICATION +$var=!$var; print ''."\n"; print ''.$langs->trans('AGENDA_NOTIFICATION').''."\n"; print ' '."\n"; @@ -419,13 +420,12 @@ if (empty($conf->global->AGENDA_NOTIFICATION)) { } else { print ''.img_picto($langs->trans('Enabled'),'switch_on').''; print ''."\n"; - + $var=!$var; print ''."\n"; print ''.$langs->trans('AGENDA_NOTIFICATION_SOUND').''."\n"; print ' '."\n"; print ''."\n"; - if (empty($conf->global->AGENDA_NOTIFICATION_SOUND)) { print ''.img_picto($langs->trans('Disabled'),'switch_off').''; } else { From d18c8e3a1453a417bc8c58de8407b81def5bb45f Mon Sep 17 00:00:00 2001 From: Juanjo Menent Date: Sat, 14 Jan 2017 01:25:33 +0100 Subject: [PATCH 3/5] NEW: Event notifications in browser --- htdocs/core/js/agenda_notification.js.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/core/js/agenda_notification.js.php b/htdocs/core/js/agenda_notification.js.php index 4e741a25092..3d2c80a9ab9 100644 --- a/htdocs/core/js/agenda_notification.js.php +++ b/htdocs/core/js/agenda_notification.js.php @@ -130,4 +130,4 @@ if(!($_SERVER['HTTP_REFERER'] === $dolibarr_main_url_root . '/' || $_SERVER['HTT }); time_session += time_auto_update; } - + Date: Sun, 15 Jan 2017 18:48:32 +0100 Subject: [PATCH 4/5] NEW: Event notifications in browser --- htdocs/core/ajax/check_events.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/core/ajax/check_events.php b/htdocs/core/ajax/check_events.php index ce52413ceab..03787c92f52 100644 --- a/htdocs/core/ajax/check_events.php +++ b/htdocs/core/ajax/check_events.php @@ -30,7 +30,7 @@ session_start(); $time_update = 60; if (! empty($conf->global->AGENDA_NOTIFICATION)) { - if ($_SESSION['auto_check_events'] <= (int)$time) { + if ($_SESSION['auto_check_events'] <= (int) $time) { $_SESSION['auto_check_events'] = $time + $time_update; $eventos = array(); From 9674bdef54e34e330dd134ca714a11863375bbc5 Mon Sep 17 00:00:00 2001 From: Juanjo Menent Date: Mon, 16 Jan 2017 13:40:57 +0100 Subject: [PATCH 5/5] Best directory for img --- htdocs/core/js/agenda_notification.js.php | 2 +- htdocs/theme/{eldy/img => common}/bell.png | Bin 2 files changed, 1 insertion(+), 1 deletion(-) rename htdocs/theme/{eldy/img => common}/bell.png (100%) diff --git a/htdocs/core/js/agenda_notification.js.php b/htdocs/core/js/agenda_notification.js.php index 3d2c80a9ab9..ad4b8cf1bdf 100644 --- a/htdocs/core/js/agenda_notification.js.php +++ b/htdocs/core/js/agenda_notification.js.php @@ -105,7 +105,7 @@ if(!($_SERVER['HTTP_REFERER'] === $dolibarr_main_url_root . '/' || $_SERVER['HTT var title = "trans('Agenda') ?>"; var extra = { - icon: "", + icon: "", body: body, tag: value['id'] }; diff --git a/htdocs/theme/eldy/img/bell.png b/htdocs/theme/common/bell.png similarity index 100% rename from htdocs/theme/eldy/img/bell.png rename to htdocs/theme/common/bell.png