mirror of
https://github.com/salesagility/SuiteCRM.git
synced 2024-11-24 08:36:48 +00:00
34eb8562c6
Copyright notice update for hotfix branch Changes: - Year - Double spaces - Brand fix for SalesAgility Ltd. (was Salesagility Ltd) Created from latest hotfix branch.
296 lines
9.4 KiB
JavaScript
Executable File
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);
|
|
});
|