0
0
mirror of https://github.com/salesagility/SuiteCRM.git synced 2024-11-24 08:36:48 +00:00
salesagility_SuiteCRM/jssource/src_files/include/javascript/alerts.js
Horus68 34eb8562c6 Copyright notice update - Hotfix
Copyright notice update for hotfix branch
Changes: 
- Year 
- Double spaces
- Brand fix for SalesAgility Ltd. (was Salesagility Ltd)

Created from latest hotfix branch.
2018-08-01 20:14:25 +01:00

296 lines
9.4 KiB
JavaScript
Executable File

/**
*
* SugarCRM Community Edition is a customer relationship management program developed by
* SugarCRM, Inc. Copyright (C) 2004-2013 SugarCRM Inc.
*
* SuiteCRM is an extension to SugarCRM Community Edition developed by SalesAgility Ltd.
* Copyright (C) 2011 - 2018 SalesAgility Ltd.
*
* This program is free software; you can redistribute it and/or modify it under
* the terms of the GNU Affero General Public License version 3 as published by the
* Free Software Foundation with the addition of the following permission added
* to Section 15 as permitted in Section 7(a): FOR ANY PART OF THE COVERED WORK
* IN WHICH THE COPYRIGHT IS OWNED BY SUGARCRM, SUGARCRM DISCLAIMS THE WARRANTY
* OF NON INFRINGEMENT OF THIRD PARTY RIGHTS.
*
* 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 Affero General Public License for more
* details.
*
* You should have received a copy of the GNU Affero General Public License along with
* this program; if not, see http://www.gnu.org/licenses or write to the Free
* Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
* 02110-1301 USA.
*
* You can contact SugarCRM, Inc. headquarters at 10050 North Wolfe Road,
* SW2-130, Cupertino, CA 95014, USA. or at email address contact@sugarcrm.com.
*
* The interactive user interfaces in modified source and object code versions
* of this program must display Appropriate Legal Notices, as required under
* Section 5 of the GNU Affero General Public License version 3.
*
* In accordance with Section 7(b) of the GNU Affero General Public License version 3,
* these Appropriate Legal Notices must retain the display of the "Powered by
* SugarCRM" logo and "Supercharged by SuiteCRM" logo. If the display of the logos is not
* reasonably feasible for technical reasons, the Appropriate Legal Notices must
* display the words "Powered by SugarCRM" and "Supercharged by SuiteCRM".
*/
/**
*
* @class
* @member {string} title
* @member {object} options
* @member {string} options.body
* @member {string} options.url_redirect
* @member {string} options.target_module
* @member {string} options.type warning danger info primary success
* @see https://getbootstrap.com/docs/3.3/css/#helper-classes
*/
var AlertObj = function() {
this.title = 'Alert';
this.options = {};
this.options.body = ' ';
this.options.url_redirect = '';
this.options.target_module = '';
this.options.type= 'info';
};
/**
*
* @namespace
*/
var Alerts = function () {
};
/**
*
* @type {Array}
*/
Alerts.prototype.replaceMessages = [];
/**
* Enable Notifications API
*/
Alerts.prototype.enable = function () {
var alert = new AlertObj();
if (!("Notification" in window)) {
alert.title = SUGAR.language.translate('app_strings', 'MSG_BROWSER_NOTIFICATIONS_UNSUPPORTED');
Alerts.prototype.show(alert);
return;
}
Notification.requestPermission(function (permission) {
if (permission === "granted") {
alert.title = SUGAR.language.translate('app_strings', 'MSG_BROWSER_NOTIFICATIONS_ENABLED');
}
else {
alert.title = SUGAR.language.translate('app_strings', 'MSG_BROWSER_NOTIFICATIONS_DISABLED');
}
Alerts.prototype.show(alert);
});
};
/**
* Request permission to use Notification API
*/
Alerts.prototype.requestPermission = function () {
if (!("Notification" in window)) {
return;
}
Notification.requestPermission();
};
/**
* Show an alert to the user
* @param {AlertObj} AlertObj
*/
Alerts.prototype.show = function (AlertObj) {
Alerts.prototype.requestPermission();
if (("Notification" in window)) {
if (Notification.permission === "granted") {
if (typeof AlertObj.options !== "undefined") {
if (typeof AlertObj.options.target_module !== "undefined") {
SUGAR.themes.theme_name = undefined;
AlertObj.options.icon = 'index.php?entryPoint=getImage&themeName=' +
SUGAR.themes.theme_name + '&imageName=' +
AlertObj.options.target_module + 's.gif';
}
if (typeof AlertObj.options.type === "undefined") {
AlertObj.options.type = 'info';
}
}
var notification = new Notification(AlertObj.title, AlertObj.options);
if (typeof AlertObj.options !== "undefined") {
if (typeof AlertObj.options.url_redirect !== "undefined") {
notification.onclick = function () {
window.open(AlertObj.options.url_redirect);
}
}
}
}
else {
var message = AlertObj.title;
if (typeof AlertObj.options !== "undefined") {
if (typeof AlertObj.options.body !== "undefined") {
message += '\n' + AlertObj.options.body;
}
message += SUGAR.language.translate('app_strings', 'MSG_JS_ALERT_MTG_REMINDER_CALL_MSG') + "\n\n";
if (confirm(message)) {
if (typeof AlertObj.options !== "undefined") {
if (typeof AlertObj.options.url_redirect !== "undefined") {
window.location = AlertObj.options.url_redirect;
}
}
}
}
}
}
};
/**
* Add alert to manager instead of showing it to the user
* @param {AlertObj} AlertObj
*/
Alerts.prototype.addToManager = function (AlertObj) {
var url = 'index.php', name = AlertObj.title, description, url_redirect, is_read = 0, target_module, type = 'info';
if (typeof AlertObj.options !== "undefined") {
if (typeof AlertObj.options.url_redirect !== "undefined") {
url_redirect = AlertObj.options.url_redirect
}
if (typeof AlertObj.options.body !== "undefined") {
description = AlertObj.options.body
}
if (typeof AlertObj.options.target_module !== "undefined") {
target_module = AlertObj.options.target_module
}
if (typeof AlertObj.options.type !== "undefined") {
type = AlertObj.options.type
}
if (typeof AlertObj.options.reminder_id !== "undefined") {
reminder_id = AlertObj.options.reminder_id
}
}
$.post(url, {
module: 'Alerts',
action: 'add',
name: name,
description: description,
url_redirect: url_redirect,
is_read: is_read,
target_module: target_module,
reminder_id: reminder_id,
type: type
}).done(function (jsonData) {
data = JSON.parse(jsonData);
if (typeof data !== 'undefined' && typeof data.result !== 'undefined' && data.result === 1) {
Alerts.prototype.show(AlertObj);
}
}).fail(function (data) {
console.error(data);
}).always(function () {
Alerts.prototype.updateManager();
});
};
/**
* Redirect to login page
* @return {boolean}
*/
Alerts.prototype.redirectToLogin = function () {
var getQueryParams = function (qs) {
qs = qs.split('+').join(' ');
var params = {},
tokens,
re = /[?&]?([^=]+)=([^&]*)/g;
while (tokens = re.exec(qs)) {
params[decodeURIComponent(tokens[1])] = decodeURIComponent(tokens[2]);
}
return params;
};
var params = getQueryParams(document.location.search);
params.entryPoint = undefined;
if (params.entryPoint !== 'Changenewpassword' && params.module !== 'Users' && params.action !== 'Login') {
document.location.href = 'index.php?module=Users&action=Login&loginErrorMessage=LBL_SESSION_EXPIRED';
return true;
}
return false;
};
/**
* Update Alert Manager (Navigation bar element)
*/
Alerts.prototype.updateManager = function () {
var url = 'index.php?module=Alerts&action=get&to_pdf=1';
$.ajax(url).done(function (data) {
if (data === 'lost session') {
Alerts.prototype.redirectToLogin();
return false;
}
// remove the jsAlert message
for (var replaceMessage in Alerts.prototype.replaceMessages) {
data = data.replace(
Alerts.prototype.replaceMessages[replaceMessage].search,
Alerts.prototype.replaceMessages[replaceMessage].replace
);
}
var alertsDiv = $('.desktop_notifications #alerts');
alertsDiv.html(data);
var alerts = $('<div></div>');
$(data).appendTo(alerts);
var alertCount = $(alerts).children('.alert').length;
var alertCountDiv = $('.alert_count');
var desktopNotificationsDiv = $('.desktop_notifications');
var alertButtonDiv = $('.alertsButton');
alertCountDiv.html(alertCount);
if (alertCount > 0) {
alertsDiv.addClass('has-alerts');
desktopNotificationsDiv.addClass('has-alerts');
alertButtonDiv.removeClass('btn-').addClass('btn-danger');
alertCountDiv.removeClass('hidden');
}
else {
desktopNotificationsDiv.removeClass('has-alerts');
alertsDiv.removeClass('has-alerts');
alertButtonDiv.removeClass('btn-danger').addClass('btn-success');
alertCountDiv.addClass('hidden');
}
});
};
/**
* Mark alert as read
* @param {string} id
*/
Alerts.prototype.markAsRead = function (id) {
var url = 'index.php?module=Alerts&action=markAsRead&record=' + id + '&to_pdf=1';
$.ajax(url).done(function () {
Alerts.prototype.updateManager();
});
};
/**
* Runs timer to update alerts
*/
$(document).ready(function () {
Alerts.prototype.replaceMessages = [
{search: SUGAR.language.translate("app", "MSG_JS_ALERT_MTG_REMINDER_CALL_MSG"), replace: ""},
{search: SUGAR.language.translate("app", "MSG_JS_ALERT_MTG_REMINDER_MEETING_MSG"), replace: ""}
];
var updateMissed = function () {
Alerts.prototype.updateManager();
setTimeout(updateMissed, 60000);
};
setTimeout(updateMissed, 2000);
});