Files
GEOVizor_PHP/monitoring/jscripts/messages.js
2023-11-07 19:51:49 +06:00

333 lines
12 KiB
JavaScript
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

//Класс для отображения и обработки сообщения пользователя
class TUserMessage
{
constructor(parent){
this.id=null;
this.parent = parent;
this.win = null;
}
//Отметить сообщение как обработанное
MarkAsProcessed(id)
{
var description=document.getElementById("msg_desc").value;
var data = {
id: id,
description: description
};
$.ajax({
url: '/monitoring/pscripts/messages.php?fn=5',
data: JSON.stringify(data),
contentType: 'application/json; charset=utf-8',
type: "POST",
dataType: "json",
success: function(thiz){return function(data,status){
if(status=='success')
{
if(data.errorCode=='0')
{
//alert(trt('Saved')+'!');
thiz.win.Close();
//Обновляю список
thiz.parent.Filtering();
}else
{
alert(trt('Error')+': "'+data.errorMessage);
thiz.win.hideProgressBar();
}
}else
{
alert(status);
thiz.win.hideProgressBar();
}
}}(this)
});
this.win.showProgressBar();
}
//Загрузить сообщение в окно
ShowMessage(id)
{
if(this.win!=null) this.win.Close();
this.win = new TWin();
this.win.setParent(this.parent.win);
this.win.BuildGUI(10,10);
this.win.setCaption(trt('Message'));
this.win.setSize("600px","400px");
this.win.setCenter();
this.win.hide(false);
this.win.showProgressBar();
//Запрашиваю данные для отображения в окне
var data = {
id: id
};
var req=createRequestObject();
req.onreadystatechange = function(thiz)
{
return function(){
if(req.readyState === 4){
thiz.win.hideProgressBar(); //Всё "OK" скрываю "Progress bar"
var data=null;
try {
data = JSON.parse(req.responseText);
} catch (e) {
alert(e.message);
}
if(data!=null)
{
//Отображаю окошко с необработанными сообщениями
var html='<table class="SShow" style="width:100%;height:100%; background-color: #3a3a3a;">';
html+='<thead><tr><th style="width:30%;">'+trt('Name')+'</th><th style="width:70%;">'+trt('Value')+'</th></tr></thead>';
html+='<tr><td style="padding:2px;font-weight:bold;vertical-align:top;">'+trt('Theme')+'</td><td style="padding: 2px;vertical-align:top;">'+trt(data.subject)+'</td>';
html+='<tr style="height:100%;"><td style="font-weight:bold;padding:2px;vertical-align:top;">'+trt('Content')+'</td><td style="padding: 2px;vertical-align:top;">'+data.text+'</td></tr>';
if(data.action_name!='' && data.action_name!=null)
{
html+='<tr"><td style="padding:2px;vertical-align:top;">'+trt('Action')+'</td><td style="padding: 2px;vertical-align:top;"><button type="button" class="button-secondary" id="create_msg_a" style="width:100%;">'+trt(data.action_name)+'</button></td></tr>';
}
html+='<tr style="height:100%;"><td style="padding:2px;vertical-align:top;">'+trt('Additional_Information')+' ('+trt('Action_taken')+')'+'</td><td style="padding: 2px;vertical-align:top;"><textarea id="msg_desc" style="width:100%;height:100px;"></textarea></td></tr>';
html+='<tr><td style="padding: 2px;text-align:right;" colspan="2"><button class="button-secondary" onclick="g_UserMessage.MarkAsProcessed('+data.id+');">'+trt('Mark_as_processed')+'</button></td></tr>';
html+='</table>';
thiz.win.setContent(html);
//Обработчик события нажатия на кнопку действия
var btn = document.getElementById('create_msg_a');
if(btn!=null)
{
btn.onclick=function(name,settings){ return function(){
if(name=='Create_trip')
g_trips.createTrip(settings);
else if(name=='Edit_trip')
g_trips.editTrip(settings);
else
alert('Unknown action "'+name+'"!');
}; }(data.action_name,data.action_settings);
}
}
}
};
}(this);
req.open("POST", '/monitoring/pscripts/messages.php?fn=4', true);
req.setRequestHeader("Content-type", "text/plain");
req.send(JSON.stringify(data));
}
}
class TUserMessages
{
consctuctor(){
this.win = null;
}
//this.win.addResizeListener(function(obj){return function(){obj.updateSize();}}(this));
//Update dimensions of the elements (the main table in absolute coordinates).
updateSize()
{
var dv1=document.getElementById("tblMsgContainer");
var dv2=document.getElementById("tblMsgSContainer");
if(dv1!=null && dv2!=null)
{
dv1.style.width = dv2.offsetWidth+"px";
dv1.style.height = dv2.offsetHeight+"px";
}
}
//Отобразить окно с сообщениями пользователя
ShowMessages()
{
if(this.win!=null) this.win.Close();
this.win=new TWin();
this.win.BuildGUI(10,10);
this.win.setCaption(trt('User_messages'));
this.win.setSize("1000px","500px");
this.win.hide(false);
var content = '';
content+='<table style="width:100%; height:100%;"><tr><td>';
content+='<table style="width:100%; border: 1px solid rgb(99, 99, 99); table-layout: auto; margin-bottom: 10px;">';
content+='<caption></caption>';
content+='<thead></thead>';
content+='<tbody>';
content+=' <tr><td style="padding: 1px; white-space: nowrap;">'+trt('Company')+'</td><td style="padding: 1px; width: 100%;"><select id="sCompany_3" style="width: 100%;"></select></td></tr>';
content+=' <tr><td style="padding: 1px; white-space: nowrap;">'+trt('Status')+'</td><td style="padding: 1px; width: 100%;"><select id="sEvents_3" style="width: 100%;"><option value="1">'+trt('Processed')+'</option><option selected="selected" value="0">'+trt('Unprocessed')+'</option></select></td></tr>';
content+=' <tr><td style="padding: 1px;"></td><td style="padding: 1px; text-align:right;"><input class="button-secondary" type="button" value="Фильтровать" id="btnfilter_3"></td></tr>';
content+='</tbody>';
content+='</table>';
//Контент
content+='</td></tr><tr><td style="width:100%; height:100%;">';
content+='<div id="tblMsgSContainer" style="width:100%; height:100%;" bgcolor="green">';
content+='<div id="tblMsgContainer" style="position: absolute; overflow: scroll; width: 400px; height: 300px;">';
content+='</div>';
content+='</div>';
content+='</td></tr></table>';
this.win.setContent(content);
this.win.setCenter();
this.win.addResizeListener(function(thiz){return function(){thiz.updateSize();}}(this));
//Кнопочка фильтровать
var obj = document.getElementById("btnfilter_3");
obj.onclick = function(thiz){ return function(){ thiz.Filtering(); };}(this);
//Запрашиваю данные для заполнения выпадающего списка компаний
this.Filtering();
//Запрашиваю данные для заполнения компании
$.ajax({
url: "/monitoring/pscripts/user.php?fn=10",
type: "POST",
success: function(response) {
let b = document.getElementById("sCompany_3");
b.innerHTML += response;
}
});
}
//Запросить данные для отображения в фильтре
Filtering()
{
var data = {
state: ''
};
var req=createRequestObject();
req.onreadystatechange = function(thiz)
{
return function(){
if(req.readyState === 4){
var data=null;
try {
data = JSON.parse(req.responseText);
} catch (e) {
alert(e.message);
}
if(data!=null)
{
if(data.errorMessage !== undefined && data.errorMessage!='')
{
alert(data.errorMessage);
thiz.win.hideProgressBar();
return;
}
//Отображаю окошко с необработанными сообщениями
var html='<table class="SShow">';
html+='<thead><tr style="background-color: rgb(218, 218, 218);"><th>Тема</th><th>Содержание</th></tr></thead>';
for(i=0;i<data.length;i++)
{
let bgColor='';
if (i%2==0) bgColor='var(--row-color-1)'; else bgColor='var(--row-color-2)';
html+='<tr onclick="g_UserMessage.ShowMessage('+data[i].id+');" onmouseover="this.style.backgroundColor=\'var(--btn-color2)\';" onmouseout="this.style.backgroundColor=\''+bgColor+'\';" style="cursor: pointer; background-color:'+bgColor+';">';
//html+='<td>'+data[i].id+'</td>';
html+='<td>'+data[i].subject+'</td>';
html+='<td>'+data[i].text+'</td>';
html+='</tr>';
/*var userMessage = new TUserMessage();
userMessage.id=data[i].id;
thiz.messages.push(userMessage);*/
}
html+='</table>';
var cont=document.getElementById("tblMsgContainer");
cont.innerHTML = html;
}
thiz.win.hideProgressBar();
}
};
}(this);
req.open( "GET", '/monitoring/pscripts/messages.php?fn=3&status='+document.getElementById("sEvents_3").value, true );
req.send( null );
this.win.showProgressBar();
}
}
var g_UserMessages = new TUserMessages();
var g_UserMessage = new TUserMessage(g_UserMessages);
//Функция для переодическогой проверки количество сообщений требующих обработки а также кол-во сообщений для текущего пользователя
function getAllMessagesCount()
{
var data = {
test: ''
};
$.ajax({
url: '/monitoring/pscripts/messages.php?fn=1',
data: JSON.stringify(data),
contentType: 'application/json; charset=utf-8',
type: "POST",
dataType: "json",
success: function(thiz){return function(data,status){
if(status=='success')
{
//Отображаю окошко с количеством необработанных сообщений
if(g_winCntMsg==null || g_winCntMsg.closed==true)
{
g_winCntMsg=new TWin();
g_winCntMsg.BuildGUI(20,60);
g_winCntMsg.setCaption(trt('Messages'));
//this.win.setContent(str);
g_winCntMsg.setSize("130px","120px");
//g_winCntMsg.setCenter();
//g_winCntMsg.shadow=true;
g_winCntMsg.hide(false);
}
//g_winCntMsg.setLeftTop(20,60);
g_winCntMsg.hide(false);
if(g_count!=parseInt(data.count))
{
beep();
g_count = parseInt(data.count);
}
var mCNTUser = parseInt(data.user);
var content = '';
content+=trt("Unassigned")+":<br>";
if(g_count>0){
content+="<button class=\"button-secondary\" id=\"takeMessage\" style=\"width:100%;height:50px;font-size:24pt;font-weight:bold;color:red;\" onclick=\"takeMessage();\"><blink class=\"blink\">"+g_count+"</blink></button>";
}else{
content+="<button class=\"button-secondary\" id=\"takeMessage\" style=\"width:100%;height:50px;font-size:24pt;font-weight:bold;\" onclick=\"takeMessage();\">"+g_count+"</button>";
}
content+=trt("Designated")+":<br>";
if(mCNTUser>0){
content+="<button class=\"button-secondary\" style=\"width:100%;height:50px;font-size:24pt;font-weight:bold;color:red;\" onclick=\"g_UserMessages.ShowMessages();\"><blink class=\"blink\">"+mCNTUser+"</blink></button>";
}else{
content+="<button class=\"button-secondary\" style=\"width:100%;height:50px;font-size:24pt;font-weight:bold;\" onclick=\"g_UserMessages.ShowMessages();\">0</button>";
}
g_winCntMsg.setContent(content);
}else
{
alert(status);
}
}}(this)
});
}
//Запрашиваем каждые 5 секунд
var timerId = setInterval(function() {
getAllMessagesCount();
}, 5000);