/** * @copyright 2021 Double Bastion LLC * * @author Double Bastion LLC * * @license GNU AGPL version 3 or any later version * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE * License as published by the Free Software Foundation; either * version 3 of the License, or 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 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 . * */ $(document).ready(function() { var userid = ""; var parseddata = null; var sentparseddata = null; var groupedparsed = null; var messagesperpage = 100; var newMsgInterval = 5000; var archivedConvNmbr = null; var newMsgRcd = 0; var intervalRfrSent = 0; var intervalNmfr = null; var ctappdir = 'apps'; // Get the app's directory var getappdirurl = OC.generateUrl('/apps/sms_relentless/user/getappdirectory'); $.ajax({ method: 'GET', url: getappdirurl + '/' + userid, contentType: 'application/json', success: function(appdirfdb) { ctappdir = appdirfdb; }, error: function() { alert("An error occurred while getting the app's directory. You can check the Nextcloud log to find more details about this issue."); } }); // Get the number of messages per page and the time interval for checking for new received messages, from the database var getNoPerPageUrl = OC.generateUrl("/apps/sms_relentless/user/getmsgsperpgnewmsgarchnb"); $.ajax({ url: getNoPerPageUrl + '/' + userid, method: 'GET', success: function(mesperpagedb) { if (mesperpagedb.msgsperpage) { messagesperpage = mesperpagedb.msgsperpage; } if (mesperpagedb.newmsgcheck) { newMsgInterval = mesperpagedb.newmsgcheck * 1000; } if (mesperpagedb.archconvnb == 0 || mesperpagedb.archconvnb) { archivedConvNmbr = mesperpagedb.archconvnb; } }, error: function() { showAlert("Error while getting the number of messages per page. You can check the Nextcloud log to find more details about this issue!"); } }); // Get the 'new received message' indicator from the database function checkIfNewMessage() { var getNewMsgInd = OC.generateUrl("/apps/sms_relentless/user/getnewmsgindicator"); $.ajax({ url: getNewMsgInd + '/' + userid, method: 'GET', success: function(newmsgdb) { newMsgRcd = newmsgdb; if (newMsgRcd == 1) { if ($("#listAllMsgsFromTo").is(":visible")) { $('#smstables').empty(); setTimeout(function() { $("#refreshMsgsConvtf").click(); }, 500); } if ($("#listAllMsgsConv").is(":visible")) { $('#smstables').empty(); setTimeout(function() { $("#refreshMsgsConv").click(); }, 500); } if ($("#conversationsTable").is(":visible")) { var archCvId = ''; var actCvId = ''; $(".convsListArch").each(function() { if ($(this).css('background-color') === "rgb(241, 224, 239)") { archCvId = $(this).attr("id"); } }); $(".convsListAct").each(function() { if ($(this).css('background-color') === "rgb(215, 239, 239)") { actCvId = $(this).attr("id"); } }); $('#smstables').empty(); $("#conversationsshow").click(); setTimeout(function() { if (actCvId != '') { document.getElementById(actCvId).click(); } else if (archCvId != '') { document.getElementById(actCvId).click(); } }, 800); } else { $('#smstables').empty(); $("#receivedsmstableshow").click(); } } }, error: function() { // showAlert("Error while getting the 'new received message' indicator. You can check the Nextcloud log to find more details about this issue!"); } }); } // List received messages $("#receivedsmstableshow").on("click", function(event) { $('#smstables').empty(); clearInterval(intervalNmfr); var getReceivedUrl = OC.generateUrl("/apps/sms_relentless/user/getreceivedtable"); $('#smstables').addClass('icon-loading'); $.ajax({ url: getReceivedUrl + '/' + userid, method: 'GET', contentType: 'application/json', success: function(datafdb) { var parseddata = datafdb.datarows; $('#smstables').append("
Pages
"); $('#smstables').append("
"); $('#recSmsTable').append(""); $('#recSmsTable').append("IDUser IDMessage IDDateFromToReceived Message"); $('#recfiltersrow').hide(); if (datafdb.showdispnm == 1) { for (var i = 0; i < parseddata.length; i++) { if (parseddata[i].author_displayname) { var procrcmessage = ""+ parseddata[i].author_displayname + ":" + parseddata[i].message +"
"; } else { var procrcmessage = parseddata[i].message +"
"; } if (parseddata[i].internal_sender == 0) { var procrecFrom = "
"+ parseddata[i].from +"
"; } else { var procrecFrom = "
"+ parseddata[i].from +"
"; } var procrecTo = "
"+ parseddata[i].to +"
"; $("#recSmsTable").append(""+ parseddata[i].id +""+ parseddata[i].user_id +""+ parseddata[i].message_id +""+ parseddata[i].date +""+ procrecFrom +""+ procrecTo +""+ procrcmessage +""); } } else { for (var i = 0; i < parseddata.length; i++) { var procrcmessage = parseddata[i].message +"
"; if (parseddata[i].internal_sender == 0) { var procrecFrom = "
"+ parseddata[i].from +"
"; } else { var procrecFrom = "
"+ parseddata[i].from +"
"; } var procrecTo = "
"+ parseddata[i].to +"
"; $("#recSmsTable").append(""+ parseddata[i].id +""+ parseddata[i].user_id +""+ parseddata[i].message_id +""+ parseddata[i].date +""+ procrecFrom +""+ procrecTo +""+ procrcmessage +""); } } $('#smstables').append("
Total displayed messages: " + parseddata.length + "
"); $('#smstables').removeClass('icon-loading'); $('#recarrow').removeClass('arrowUpCl'); $('#recarrow').addClass('arrowDownCl'); // Show the pop-up window that lists all the messages exchanged between the current 2 phone numbers function showRecMsgPerConv(phNumberFrom, phNumberTo) { let allfrmtomsg = "
"; allfrmtomsg += "
"; allfrmtomsg += ""; allfrmtomsg += "
Messages exchanged between "+ phNumberFrom +" and "+ phNumberTo +"
"; allfrmtomsg += "
"; allfrmtomsg += ""; allfrmtomsg += ""; allfrmtomsg += "
Load more messages
Load more messages
"; allfrmtomsg += "
"; allfrmtomsg += "
From:
To: "+ phNumberFrom +"
"; allfrmtomsg += "
Send SMS
"; allfrmtomsg += "
"; allfrmtomsg += "
"; allfrmtomsg += "
"; $("#content").append("
"); $("#content").append(allfrmtomsg); let topDist = parseInt((window.innerHeight / 2).toFixed(2) - 340) +"px"; let leftDist = parseInt((window.innerWidth / 2).toFixed(2) - 300) +"px"; $("#listAllMsgsConv").css({ "top" : topDist, "left" : leftDist }); $("#closeFrmMsgWindow").click(function() { $("#listAllMsgsConv").remove(); $("#recTblOverlay").remove(); }); $("#recTblOverlay").click(function() { $("#listAllMsgsConv").remove(); $("#recTblOverlay").remove(); }); // Expand the window when clicking on the arrow, to be able to send a reply message $("#expandWindowRpl").unbind("click"); $("#expandWindowRpl").click(function() { if ($(this).attr('src') == '/' + ctappdir + '/sms_relentless/img/arrowDown.svg') { $("#sendMsgReply").css("display", "block"); if ($(window).width() > 600) { $("#listAllMsgsConv").css("height", "618px"); } else { $("#listAllMsgsConv").css("height", parseInt($(window).height() - 32) + "px"); $("#frmMsgLstWrap").css("height", parseInt($(window).height() - 304) + "px"); } $(this).attr('src', '/' + ctappdir + '/sms_relentless/img/arrowUp.svg'); $(this).attr('title', 'Collapse'); } else { $("#sendMsgReply").css("display", "none"); if ($(window).width() > 600) { $("#listAllMsgsConv").css("height", "490px"); } else { $("#listAllMsgsConv").css("height", parseInt($(window).height() - 120) + "px"); $("#frmMsgLstWrap").css("height", parseInt($(window).height() - 232) + "px"); } $(this).attr('src', '/' + ctappdir + '/sms_relentless/img/arrowDown.svg'); $(this).attr('title', 'Expand to send a reply'); } }); // Send a message from the 'conversation' window $("#sendMsgConvBtn").click(function() { $("#sendMsgConv,#sendMsgConvBtn").addClass('icon-loading'); var msgToSend = $("#sendMsgConvText").val(); var selectedid = $("#selectFromNbConv").val(); var toNumber = $("#toNmbrConv").text(); var receiversNumbers = [toNumber]; if (selectedid != '') { var sendersplit = selectedid.split(":"); var providercap = sendersplit[0]; var provsec = sendersplit[1]; if (/[a-zA-Z]/.test(provsec)) { var alphanumcheck = true; } else { var alphanumcheck = false; } if (providercap == 'Tx' && alphanumcheck == false) { var senderproc = selectedid.replace(/[^0-9]/g, ""); var selectedsender = "+" + senderproc; var providerUsed = "telnyx"; var relbaseUrl = OC.generateUrl("/apps/sms_relentless/user/sendsmstel"); } else if (providercap == 'Pl' && alphanumcheck == false) { var selectedsender = selectedid.replace(/[^0-9]/g, ""); var providerUsed = "plivo"; var relbaseUrl = OC.generateUrl("/apps/sms_relentless/user/sendsmsnex"); } else if (providercap == 'Tw' && alphanumcheck == false) { var senderproc = selectedid.replace(/[^0-9]/g, ""); var selectedsender = "+" + senderproc; var providerUsed = "twilio"; var relbaseUrl = OC.generateUrl("/apps/sms_relentless/user/sendsmstwil"); } else if (providercap == 'Fl' && alphanumcheck == false) { var senderproc = selectedid.replace(/[^0-9]/g, ""); var selectedsender = "+" + senderproc; var providerUsed = "flowroute"; var relbaseUrl = OC.generateUrl("/apps/sms_relentless/user/sendsmsflow"); } else if (providercap == 'Tx' && alphanumcheck == true) { var selectedsender = provsec; var providerUsed = "telnyx"; var relbaseUrl = OC.generateUrl("/apps/sms_relentless/user/sendsmstel"); } else if (providercap == 'Pl' && alphanumcheck == true) { var selectedsender = provsec; var providerUsed = "plivo"; var relbaseUrl = OC.generateUrl("/apps/sms_relentless/user/sendsmsnex"); } else if (providercap == 'Tw' && alphanumcheck == true) { var selectedsender = provsec; var providerUsed = "twilio"; var relbaseUrl = OC.generateUrl("/apps/sms_relentless/user/sendsmstwil"); } else if (providercap == 'Fl' && alphanumcheck == true) { var selectedsender = provsec; var providerUsed = "flowroute"; var relbaseUrl = OC.generateUrl("/apps/sms_relentless/user/sendsmsflow"); } var uploadedtomms = []; if (msgToSend != '') { $.ajax({ url: relbaseUrl + '/' + userid, type: "POST", data: { receiversPhoneNbs: receiversNumbers, fromsender: selectedsender, waitinterval: 1000, sentsmstext: msgToSend, ismms: 0, mmsfiles: uploadedtomms }, success: function(displayname) { var tzdate = new Date(); var presDatest = new Date(tzdate.getTime() - (tzdate.getTimezoneOffset() * 60000)).toJSON(); var presDatedb = presDatest.split(".")[0]; var presDatesc = presDatedb.split("T"); var presDate = presDatesc[0] +" "+ presDatesc[1]; var sentMessageStatus = ''; if (displayname) { var msgToSendproc = ""+ displayname + ":" + msgToSend; } else { var msgToSendproc = msgToSend; } $("#msgListRowCell").append("
From: "+ selectedsender +"
To: "+ receiversNumbers[0] +"
"+ msgToSendproc +"
"+ presDate +"
"+ sentMessageStatus +"
"); // Scroll down to the bottom of the window $("#frmMsgLstWrap").animate({scrollTop:$("#frmMsgLstTbl").prop("scrollHeight")},200); $("#sendMsgConv,#sendMsgConvBtn").removeClass('icon-loading'); }, error: function() { showAlert("Error while sending the message. You can check your Nextcloud log to find out more about this issue."); $("#sendMsgConv,#sendMsgConvBtn").removeClass('icon-loading'); } }); } else { showAlert("Please enter a message in the text box!"); $("#sendMsgConv,#sendMsgConvBtn").removeClass('icon-loading'); } } else { showAlert("Please choose a Sender ID from the 'From' drop-down list!"); $("#sendMsgConv,#sendMsgConvBtn").removeClass('icon-loading'); } }); // Make the window draggable function makeMgrWndDraggable(e) { window.pmdragging = {}; pmdragging.pageX0 = e.pageX; pmdragging.pageY0 = e.pageY; pmdragging.elem = $("#listAllMsgsConv"); pmdragging.offset0 = $("#listAllMsgsConv").offset(); function handle_dragging(e) { let left = pmdragging.offset0.left + (e.pageX - pmdragging.pageX0); let top = pmdragging.offset0.top + (e.pageY - pmdragging.pageY0); $(pmdragging.elem).offset({top: top, left: left}); } function handle_mouseup(e) { $('body').off('mousemove', handle_dragging).off('mouseup', handle_mouseup); } $('body').on('mouseup', handle_mouseup).on('mousemove', handle_dragging); } $("#draglstMsgmWindow").mousedown(makeMgrWndDraggable); $("#draglstMsgmWindowsc").mousedown(makeMgrWndDraggable); // Append the available phone numbers to the From drop-down list var availPhoneNmbrs = []; $("#currentsmsnmbrs .optselectsmsnb").each(function() { var crtphnmbr = $(this).attr("value"); if (crtphnmbr != "") { availPhoneNmbrs.push(crtphnmbr); } }); if (availPhoneNmbrs.length > 0) { var avphopt = ""; for (let d = 0; d < availPhoneNmbrs.length; d++) { if (availPhoneNmbrs[d].indexOf(phNumberTo) === -1) { avphopt += ""; } else { avphopt += ""; } } $("#selectFromNbConv").append(avphopt); } else { $("#selectFromNbConv").append(""); } // Get the messages exchanged between the current 2 phone numbers, from the database function getMsgsForNumbers(phNumberFrom, phNumberTo) { let getGrpConvUrl = OC.generateUrl("/apps/sms_relentless/user/getgroupedforreply"); $('#listAllMsgsConv').addClass('icon-loading'); let totalPhNmbrs = 0; $.ajax({ method: 'POST', url: getGrpConvUrl + '/' + userid, contentType: 'application/json', data: JSON.stringify({ "phoneNmbrFrom": phNumberFrom, "phoneNmbrTo": phNumberTo }), success: function(groupedperconv) { $('#listAllMsgsConv').removeClass('icon-loading'); let fromtoNmbrsData = []; for (let i = 0; i < groupedperconv.length; i++) { if (groupedperconv[i].author_displayname) { var authordnm = groupedperconv[i].author_displayname; } else { var authordnm = ''; } var sentfromnmbrarr = groupedperconv[i].from.split(": "); if (sentfromnmbrarr[1]) { var groupednbfrom = sentfromnmbrarr[1]; } else { var groupednbfrom = sentfromnmbrarr[0]; } var modmessagerec = ''; if (groupedperconv[i].author_displayname) { modmessagerec = ""+ groupedperconv[i].author_displayname + ":" + groupedperconv[i].message; } else { modmessagerec = groupedperconv[i].message; } if (groupedperconv[i].to.indexOf(": ") > -1) { var groupednmbrtopre = groupedperconv[i].to.split(": "); var groupednmbrto = groupednmbrtopre[1]; } else { var groupednmbrto = groupedperconv[i].to; } fromtoNmbrsData.push({ 'author_displayname': authordnm, 'from': groupednbfrom, 'to': groupednmbrto, 'message': modmessagerec, 'date': groupedperconv[i].date, 'status': groupedperconv[i].deliveryreceipt, 'table': groupedperconv[i].table }); } // Remove the duplicates let noDupMsgData = []; $.each(fromtoNmbrsData, function(i, e) { let matchingData = $.grep(noDupMsgData, function(item) { return item.from == e.from && item.to == e.to && item.message == e.message && item.table == 'received' && e.table == 'sent'; }); if (matchingData.length === 0) { noDupMsgData.push(e); } }); let messagesPerNmbr = {}; let msgsNamesPerNmbr = {}; let msgsNmbrsNames = {}; let displayNamesarr = []; let convData = []; for (let n = 0; n < noDupMsgData.length; n++) { if (noDupMsgData[n]['from'] == phNumberFrom && noDupMsgData[n]['table'] == 'sent') { convData.push({ 'author_displayname': noDupMsgData[n]['author_displayname'], 'message': noDupMsgData[n]['message'], 'from': noDupMsgData[n]['from'], 'to': noDupMsgData[n]['to'], 'date': noDupMsgData[n]['date'], 'direction': 'sent_from', 'status': (noDupMsgData[n]['status'] == null)? "" : noDupMsgData[n]['status'], 'table': noDupMsgData[n]['table'] }); } else if (noDupMsgData[n]['to'] == phNumberFrom && noDupMsgData[n]['table'] == 'sent') { convData.push({ 'author_displayname': noDupMsgData[n]['author_displayname'], 'message': noDupMsgData[n]['message'], 'from': noDupMsgData[n]['from'], 'to': noDupMsgData[n]['to'], 'date': noDupMsgData[n]['date'], 'direction': 'sent_to', 'status': (noDupMsgData[n]['status'] == null)? "" : noDupMsgData[n]['status'], 'table': noDupMsgData[n]['table'] }); } else if (noDupMsgData[n]['from'] == phNumberFrom && noDupMsgData[n]['table'] == 'received') { convData.push({ 'author_displayname': noDupMsgData[n]['author_displayname'], 'message': noDupMsgData[n]['message'], 'from': noDupMsgData[n]['from'], 'to': noDupMsgData[n]['to'], 'date': noDupMsgData[n]['date'], 'direction': 'received_from', 'status': (noDupMsgData[n]['status'] == null)? "" : noDupMsgData[n]['status'], 'table': noDupMsgData[n]['table'] }); } else if (noDupMsgData[n]['to'] == phNumberFrom && noDupMsgData[n]['table'] == 'received') { convData.push({ 'author_displayname': noDupMsgData[n]['author_displayname'], 'message': noDupMsgData[n]['message'], 'from': noDupMsgData[n]['from'], 'to': noDupMsgData[n]['to'], 'date': noDupMsgData[n]['date'], 'direction': 'received_on', 'status': (noDupMsgData[n]['status'] == null)? "" : noDupMsgData[n]['status'], 'table': noDupMsgData[n]['table'] }); } } // Sort messages by date convData.sort(function(a, b) { return new Date(b.date) - new Date(a.date); }); // Collect the display names of the users that sent messages from the current numbers let selectedNames = []; let displayNames = ''; for (let v = 0; v < convData.length; v++) { if (selectedNames.indexOf(convData[v]['author_displayname']) == -1) { selectedNames.push(convData[v]['author_displayname']); displayNames += "
"+ convData[v]['author_displayname'] +"
"; } } displayNames += "
All messages
"; // Store the display names for the current numbers, to be able to see them later let ctPhNumber = phNumberFrom; msgsNamesPerNmbr[ctPhNumber] = displayNames; // Store the messages sent by each user, to be able to see them later when clicking on the user's name for (let h = 0; h < selectedNames.length; h++) { let rowMessageArrpn = []; for (let b = 0; b < convData.length; b++) { if (selectedNames[h] == convData[b]['author_displayname']) { if (convData[b]['direction'] == 'sent_from') { if (convData[b]['status']) { if (convData[b]['status'].indexOf("delivered") > -1 || convData[b]['status'].indexOf("delivery success") > -1 || convData[b]['status'].indexOf("Retrieved") > -1) { if (convData[b]['status'].indexOf("undelivered") > -1) { var sentMsgStatus = ""; } else { var sentMsgStatus = ""; } } else { var sentMsgStatus = ""; } } else { var sentMsgStatus = ""; } rowMessageArrpn.push("
From: "+ convData[b]['from'] +"
To: "+ convData[b]['to'] +"
"+ convData[b]['message'] +"
"+ convData[b]['date'] +"
"+ sentMsgStatus +"
"); } else if (convData[b]['direction'] == 'sent_to') { if (convData[b]['status']) { if (convData[b]['status'].indexOf("delivered") > -1 || convData[b]['status'].indexOf("delivery success") > -1 || convData[b]['status'].indexOf("Retrieved") > -1) { if (convData[b]['status'].indexOf("undelivered") > -1) { var sentMsgStatus = ""; } else { var sentMsgStatus = ""; } } else { var sentMsgStatus = ""; } } else { var sentMsgStatus = ""; } rowMessageArrpn.push("
From: "+ convData[b]['from'] +"
To: "+ convData[b]['to'] +"
"+ convData[b]['message'] +"
"+ convData[b]['date'] +"
"+ sentMsgStatus +"
"); } else if (convData[b]['direction'] == 'received_from') { rowMessageArrpn.push("
From: "+ convData[b]['from'] +"
To: "+ convData[b]['to'] +"
"+ convData[b]['message'] +"
"+ convData[b]['date'] +"
"); } else if (convData[b]['direction'] == 'received_on') { rowMessageArrpn.push("
From: "+ convData[b]['from'] +"
To: "+ convData[b]['to'] +"
"+ convData[b]['message'] +"
"+ convData[b]['date'] +"
"); } } } let crtNmber = phNumberFrom; let crtName = selectedNames[h]; msgsNmbrsNames[crtNmber] = msgsNmbrsNames[crtNmber] || {}; msgsNmbrsNames[crtNmber][crtName] = rowMessageArrpn; } // The number of messages to be loaded by default let nmbTblDefault = 50; // If the total number of messages is greater than the default number of messages to display, show the 'Load more messages' button if (convData.length > nmbTblDefault) { $("#loadMoreMsgs").css("display", "block"); var nmbToBeLoaded = nmbTblDefault; } else { var nmbToBeLoaded = convData.length; } let rowMessageArr = []; for (var m = nmbToBeLoaded - 1; m >= 0; m--) { if (convData[m]['direction'] == 'sent_from') { if (convData[m]['status']) { if (convData[m]['status'].indexOf("delivered") > -1 || convData[m]['status'].indexOf("delivery success") > -1 || convData[m]['status'].indexOf("Retrieved") > -1) { if (convData[m]['status'].indexOf("undelivered") > -1) { var sentMsgStatus = ""; } else { var sentMsgStatus = ""; } } else { var sentMsgStatus = ""; } } else { var sentMsgStatus = ""; } rowMessageArr.push("
From: "+ convData[m]['from'] +"
To: "+ convData[m]['to'] +"
"+ convData[m]['message'] +"
"+ convData[m]['date'] +"
"+ sentMsgStatus +"
"); } else if (convData[m]['direction'] == 'sent_to') { if (convData[m]['status']) { if (convData[m]['status'].indexOf("delivered") > -1 || convData[m]['status'].indexOf("delivery success") > -1 || convData[m]['status'].indexOf("Retrieved") > -1) { if (convData[m]['status'].indexOf("undelivered") > -1) { var sentMsgStatus = ""; } else { var sentMsgStatus = ""; } } else { var sentMsgStatus = ""; } } else { var sentMsgStatus = ""; } rowMessageArr.push("
From: "+ convData[m]['from'] +"
To: "+ convData[m]['to'] +"
"+ convData[m]['message'] +"
"+ convData[m]['date'] +"
"+ sentMsgStatus +"
"); } else if (convData[m]['direction'] == 'received_from') { rowMessageArr.push("
From: "+ convData[m]['from'] +"
To: "+ convData[m]['to'] +"
"+ convData[m]['message'] +"
"+ convData[m]['date'] +"
"); } else if (convData[m]['direction'] == 'received_on') { rowMessageArr.push("
From: "+ convData[m]['from'] +"
To: "+ convData[m]['to'] +"
"+ convData[m]['message'] +"
"+ convData[m]['date'] +"
"); } } let convDataPerNmbr = rowMessageArr.join(""); $("#grpdbynamelst").empty(); $("#grpdbynamelst").append(displayNames); $("#msgListRowCell").empty(); $("#msgListRowCell").append(convDataPerNmbr); // Store the messages for the current From number, to be able to see them later let rowMessageArrcpt = []; for (let m = 0; m < convData.length; m++) { if (convData[m]['direction'] == 'sent_from') { if (convData[m]['status']) { if (convData[m]['status'].indexOf("delivered") > -1 || convData[m]['status'].indexOf("delivery success") > -1 || convData[m]['status'].indexOf("Retrieved") > -1) { if (convData[m]['status'].indexOf("undelivered") > -1) { var sentMsgStatus = ""; } else { var sentMsgStatus = ""; } } else { var sentMsgStatus = ""; } } else { var sentMsgStatus = ""; } rowMessageArrcpt.push("
From: "+ convData[m]['from'] +"
To: "+ convData[m]['to'] +"
"+ convData[m]['message'] +"
"+ convData[m]['date'] +"
"+ sentMsgStatus +"
"); } else if (convData[m]['direction'] == 'sent_to') { if (convData[m]['status']) { if (convData[m]['status'].indexOf("delivered") > -1 || convData[m]['status'].indexOf("delivery success") > -1 || convData[m]['status'].indexOf("Retrieved") > -1) { if (convData[m]['status'].indexOf("undelivered") > -1) { var sentMsgStatus = ""; } else { var sentMsgStatus = ""; } } else { var sentMsgStatus = ""; } } else { var sentMsgStatus = ""; } rowMessageArrcpt.push("
From: "+ convData[m]['from'] +"
To: "+ convData[m]['to'] +"
"+ convData[m]['message'] +"
"+ convData[m]['date'] +"
"+ sentMsgStatus +"
"); } else if (convData[m]['direction'] == 'received_from') { rowMessageArrcpt.push("
From: "+ convData[m]['from'] +"
To: "+ convData[m]['to'] +"
"+ convData[m]['message'] +"
"+ convData[m]['date'] +"
"); } else if (convData[m]['direction'] == 'received_on') { rowMessageArrcpt.push("
From: "+ convData[m]['from'] +"
To: "+ convData[m]['to'] +"
"+ convData[m]['message'] +"
"+ convData[m]['date'] +"
"); } } messagesPerNmbr[phNumberFrom] = rowMessageArrcpt; // Scroll down to the bottom of the window $("#frmMsgLstWrap").animate({scrollTop:$("#frmMsgLstTbl").prop("scrollHeight")},200); // Load more messages let clickNmb = 0; $("#loadMoreMsgs").click(function() { clickNmb++; var crefnb = (clickNmb + 1) * nmbToBeLoaded; if (crefnb > convData.length) { var nmbmsg = convData.length - 1; $("#loadMoreMsgs").css("display", "none"); } else { var nmbmsg = crefnb - 1; } let rowMessageArrAdd = []; for (let m = nmbmsg; m >= clickNmb * nmbToBeLoaded; m--) { if (convData[m]['direction'] == 'sent_from') { if (convData[m]['status']) { if (convData[m]['status'].indexOf("delivered") > -1 || convData[m]['status'].indexOf("delivery success") > -1 || convData[m]['status'].indexOf("Retrieved") > -1) { if (convData[m]['status'].indexOf("undelivered") > -1) { var sentMsgStatus = ""; } else { var sentMsgStatus = ""; } } else { var sentMsgStatus = ""; } } else { var sentMsgStatus = ""; } rowMessageArrAdd.push("
From: "+ convData[m]['from'] +"
To: "+ convData[m]['to'] +"
"+ convData[m]['message'] +"
"+ convData[m]['date'] +"
"+ sentMsgStatus +"
"); } else if (convData[m]['direction'] == 'sent_to') { if (convData[m]['status']) { if (convData[m]['status'].indexOf("delivered") > -1 || convData[m]['status'].indexOf("delivery success") > -1 || convData[m]['status'].indexOf("Retrieved") > -1) { if (convData[m]['status'].indexOf("undelivered") > -1) { var sentMsgStatus = ""; } else { var sentMsgStatus = ""; } } else { var sentMsgStatus = ""; } } else { var sentMsgStatus = ""; } rowMessageArrAdd.push("
From: "+ convData[m]['from'] +"
To: "+ convData[m]['to'] +"
"+ convData[m]['message'] +"
"+ convData[m]['date'] +"
"+ sentMsgStatus +"
"); } else if (convData[m]['direction'] == 'received_from') { rowMessageArrAdd.push("
From: "+ convData[m]['from'] +"
To: "+ convData[m]['to'] +"
"+ convData[m]['message'] +"
"+ convData[m]['date'] +"
"); } else if (convData[m]['direction'] == 'received_on') { rowMessageArrAdd.push("
From: "+ convData[m]['from'] +"
To: "+ convData[m]['to'] +"
"+ convData[m]['message'] +"
"+ convData[m]['date'] +"
"); } } let convDataPerNmbrad = rowMessageArrAdd.join(""); let scrlheight = $("#msgListRowCell").height(); $("#msgListRowCell").prepend(convDataPerNmbrad); $("#frmMsgLstWrap").animate({scrollTop: $("#msgListRowCell").height() - scrlheight}, 0); }); // Show the messages sent by each user whose name is clicked $('[id*="diplNm_"]').click(function() { let crntNmbr = $(this).attr("id").split("_")[1]; let crntDisName = $(this).attr("name"); $("#loadMoreMsgs").css("display", "none"); let convDataprn = []; $.each(msgsNmbrsNames[crntNmbr][crntDisName], function(index, item) { convDataprn.push(item); }); // If the total number of messages is greater than the default number of messages to display, show the 'Load more messages' button if (convDataprn.length > nmbTblDefault) { $("#loadMoreMsgsusr").css("display", "block"); let nmbToBeLoaded = nmbTblDefault; } else { $("#loadMoreMsgsusr").css("display", "none"); let nmbToBeLoaded = convDataprn.length; } let rowMessageArrprnst = []; for (let n = nmbToBeLoaded - 1; n >= 0; n--) { rowMessageArrprnst.push(convDataprn[n]); } let convDataPerNmbrprnst = rowMessageArrprnst.join(""); $("#msgListRowCell").empty(); $("#msgListRowCell").append(convDataPerNmbrprnst); // Scroll down to the bottom of the window $("#frmMsgLstWrap").animate({scrollTop:$("#frmMsgLstTbl").prop("scrollHeight")},200); // Load more messages let clckNb = 0; $("#loadMoreMsgsusr").unbind("click"); $("#loadMoreMsgsusr").click(function() { clckNb++; var crefnb = (clckNb + 1) * nmbToBeLoaded; $("#loadMoreMsgs").css("display", "none"); if (crefnb > convDataprn.length) { var nmbmsg = convDataprn.length - 1; $("#loadMoreMsgsusr").css("display", "none"); } else { var nmbmsg = crefnb - 1; $("#loadMoreMsgsusr").css("display", "block"); } var rowMessageArrAddst = []; for (var q = nmbmsg; q >= clckNb * nmbToBeLoaded; q--) { rowMessageArrAddst.push(convDataprn[q]); } var convDataPerNmbradst = rowMessageArrAddst.join(""); var scrlheight = $("#msgListRowCell").height(); $("#msgListRowCell").prepend(convDataPerNmbradst); $("#frmMsgLstWrap").animate({scrollTop: $("#msgListRowCell").height() - scrlheight}, 0); }); $(".dispNameList").each(function() { $(this).css("color", "#0a559e"); }); $("#diplNmAllMsgcv").css("color", "#04957b"); $(this).css("color", "#1b8efe"); }); // Show again all the messages exchanged between the current two phone numbers $("#diplNmAllMsgcv").click(function() { $("#loadMoreMsgsusr").css("display", "none"); let convDataprn = []; $.each(messagesPerNmbr[phNumberFrom], function(index, item) { convDataprn.push(item); }); // If the total number of messages is greater than the default number of messages to display, show the 'Load more messages' button if (convDataprn.length > nmbTblDefault) { $("#loadMoreMsgs").css("display", "block"); let nmbToBeLoaded = nmbTblDefault; } else { $("#loadMoreMsgs").css("display", "none"); let nmbToBeLoaded = convDataprn.length; } let rowMessageArrprnst = []; for (let n = nmbToBeLoaded - 1; n >= 0; n--) { rowMessageArrprnst.push(convDataprn[n]); } let convDataPerNmbrprnst = rowMessageArrprnst.join(""); $("#msgListRowCell").empty(); $("#msgListRowCell").append(convDataPerNmbrprnst); // Scroll down to the bottom of the window $("#frmMsgLstWrap").animate({scrollTop:$("#frmMsgLstTbl").prop("scrollHeight")},200); // Load more messages let clckNb = 0; $("#loadMoreMsgs").unbind("click"); $("#loadMoreMsgs").click(function() { clckNb++; var crefnb = (clckNb + 1) * nmbToBeLoaded; $("#loadMoreMsgsusr").css("display", "none"); if (crefnb > convDataprn.length) { var nmbmsg = convDataprn.length - 1; $("#loadMoreMsgs").css("display", "none"); } else { var nmbmsg = crefnb - 1; $("#loadMoreMsgs").css("display", "block"); } let rowMessageArrAddst = []; for (var q = nmbmsg; q >= clckNb * nmbToBeLoaded; q--) { rowMessageArrAddst.push(convDataprn[q]); } let convDataPerNmbradst = rowMessageArrAddst.join(""); let scrlheight = $("#msgListRowCell").height(); $("#msgListRowCell").prepend(convDataPerNmbradst); $("#frmMsgLstWrap").animate({scrollTop: $("#msgListRowCell").height() - scrlheight}, 0); }); $(".dispNameList").each(function() { $(this).css("color", "#0a559e"); }); $("#diplNmAllMsgcv").css("color", "#04957b"); $(this).css("color", "#04c6a4"); }); // Show the scroll-up arrow $("#frmMsgLstWrap").scroll(function() { if ($(this).scrollTop() > 900) { $('#upArrowSmall').fadeIn(); } else { $('#upArrowSmall').fadeOut(); } }); $("#upArrowSmall").unbind("click"); $("#upArrowSmall").click(function() { $("#frmMsgLstWrap").animate({scrollTop : 0},400); }); // Download MMS files when clicking on their URLs $('[id^="mmsTblUrl-"]').on('click', function(evt) { var clckedUrl = $(this).text(); var flNamearr = clckedUrl.split("/"); var flName = flNamearr.reverse()[0]; confirmAlert("Download this file only if you trust the sender and the domain of the URL."); $("#confirmOk").click(function() { $("#alertMsgOverlay").remove(); $("#alertConfMessage").remove(); var mmsLink = document.createElement("a"); mmsLink.setAttribute('href', clckedUrl); mmsLink.setAttribute('download', flName); mmsLink.setAttribute('target', '_blank'); document.body.appendChild(mmsLink); mmsLink.click(); mmsLink.remove(); }); $("#confirmCancel").click(function() { $("#alertMsgOverlay").remove(); $("#alertConfMessage").remove(); }); }); }, error: function() { showAlert("Error while attempting to get message data from the database!"); $('#listAllMsgsConv').removeClass('icon-loading'); } }); } getMsgsForNumbers(phNumberFrom, phNumberTo); $("#refreshMsgsConv").click(function() { getMsgsForNumbers(phNumberFrom, phNumberTo); setTimeout(function() { $("#diplNmAllMsgcv").click(); }, 1000); }); } $('[id^="showMsgConv-"]').click(function() { let ctrwnmbr = $(this).attr("id").replace("showMsgConv-", ""); let phNumberFrom = $("#frmNmbr-"+ ctrwnmbr).text(); let phNumberTo = $("#toNmbr-"+ ctrwnmbr).text().split(": ")[1]; showRecMsgPerConv(phNumberFrom, phNumberTo); }); // Show the pop-up window that lists all the messages sent/received to/from a phone number function showMsgPerNmbr(clckPhNumber) { var allfrmtomsg = "
"; allfrmtomsg += "
"; allfrmtomsg += ""; allfrmtomsg += "
Messages sent/received to/from "+ clckPhNumber +"
"; allfrmtomsg += "
"; allfrmtomsg += ""; allfrmtomsg += ""; allfrmtomsg += "
Load more messages
Load more messages
"; allfrmtomsg += "
"; allfrmtomsg += "
From:
To: "+ clckPhNumber +"
"; allfrmtomsg += "
Send SMS
"; allfrmtomsg += "
"; allfrmtomsg += "
"; allfrmtomsg += "
"; $("#content").append("
"); $("#content").append(allfrmtomsg); var topDist = parseInt((window.innerHeight / 2).toFixed(2) - 340) +"px"; var leftDist = parseInt((window.innerWidth / 2).toFixed(2) - 300) +"px"; $("#listAllMsgsFromTo").css({ "top" : topDist, "left" : leftDist }); $("#closeFrmMsgWindow").click(function() { $("#listAllMsgsFromTo").remove(); $("#recTblOverlay").remove(); }); $("#recTblOverlay").click(function() { $("#listAllMsgsFromTo").remove(); $("#recTblOverlay").remove(); }); // Expand the window when clicking on the arrow, to be able to send a reply message $("#expandWindowRpl").unbind("click"); $("#expandWindowRpl").click(function() { if ($(this).attr('src') == '/' + ctappdir + '/sms_relentless/img/arrowDown.svg') { $("#sendMsgReply").css("display", "block"); if ($(window).width() > 600) { $("#listAllMsgsFromTo").css("height", "618px"); } else { $("#listAllMsgsFromTo").css("height", parseInt($(window).height() - 32) + "px"); $("#frmMsgLstWrap").css("height", parseInt($(window).height() - 304) + "px"); } $(this).attr('src', '/' + ctappdir + '/sms_relentless/img/arrowUp.svg'); $(this).attr('title', 'Collapse'); } else { $("#sendMsgReply").css("display", "none"); if ($(window).width() > 600) { $("#listAllMsgsFromTo").css("height", "490px"); } else { $("#listAllMsgsFromTo").css("height", parseInt($(window).height() - 120) + "px"); $("#frmMsgLstWrap").css("height", parseInt($(window).height() - 232) + "px"); } $(this).attr('src', '/' + ctappdir + '/sms_relentless/img/arrowDown.svg'); $(this).attr('title', 'Expand to send a reply'); } }); // Send a message from the 'conversation' window $("#sendMsgConvBtn").click(function() { $("#sendMsgConv,#sendMsgConvBtn").addClass('icon-loading'); var msgToSend = $("#sendMsgConvText").val(); var selectedid = $("#selectFromNbConv").val(); var toNumber = $("#toNmbrConv").text(); var receiversNumbers = [toNumber]; if (selectedid != '') { var sendersplit = selectedid.split(":"); var providercap = sendersplit[0]; var provsec = sendersplit[1]; if (/[a-zA-Z]/.test(provsec)) { var alphanumcheck = true; } else { var alphanumcheck = false; } if (providercap == 'Tx' && alphanumcheck == false) { var senderproc = selectedid.replace(/[^0-9]/g, ""); var selectedsender = "+" + senderproc; var providerUsed = "telnyx"; var relbaseUrl = OC.generateUrl("/apps/sms_relentless/user/sendsmstel"); } else if (providercap == 'Pl' && alphanumcheck == false) { var selectedsender = selectedid.replace(/[^0-9]/g, ""); var providerUsed = "plivo"; var relbaseUrl = OC.generateUrl("/apps/sms_relentless/user/sendsmsnex"); } else if (providercap == 'Tw' && alphanumcheck == false) { var senderproc = selectedid.replace(/[^0-9]/g, ""); var selectedsender = "+" + senderproc; var providerUsed = "twilio"; var relbaseUrl = OC.generateUrl("/apps/sms_relentless/user/sendsmstwil"); } else if (providercap == 'Fl' && alphanumcheck == false) { var senderproc = selectedid.replace(/[^0-9]/g, ""); var selectedsender = "+" + senderproc; var providerUsed = "flowroute"; var relbaseUrl = OC.generateUrl("/apps/sms_relentless/user/sendsmsflow"); } else if (providercap == 'Tx' && alphanumcheck == true) { var selectedsender = provsec; var providerUsed = "telnyx"; var relbaseUrl = OC.generateUrl("/apps/sms_relentless/user/sendsmstel"); } else if (providercap == 'Pl' && alphanumcheck == true) { var selectedsender = provsec; var providerUsed = "plivo"; var relbaseUrl = OC.generateUrl("/apps/sms_relentless/user/sendsmsnex"); } else if (providercap == 'Tw' && alphanumcheck == true) { var selectedsender = provsec; var providerUsed = "twilio"; var relbaseUrl = OC.generateUrl("/apps/sms_relentless/user/sendsmstwil"); } else if (providercap == 'Fl' && alphanumcheck == true) { var selectedsender = provsec; var providerUsed = "flowroute"; var relbaseUrl = OC.generateUrl("/apps/sms_relentless/user/sendsmsflow"); } var uploadedtomms = []; if (msgToSend != '') { $.ajax({ url: relbaseUrl + '/' + userid, type: "POST", data: { receiversPhoneNbs: receiversNumbers, fromsender: selectedsender, waitinterval: 1000, sentsmstext: msgToSend, ismms: 0, mmsfiles: uploadedtomms }, success: function(displayname) { var tzdate = new Date(); var presDatest = new Date(tzdate.getTime() - (tzdate.getTimezoneOffset() * 60000)).toJSON(); var presDatedb = presDatest.split(".")[0]; var presDatesc = presDatedb.split("T"); var presDate = presDatesc[0] +" "+ presDatesc[1]; var sentMessageStatus = ''; if (displayname) { var msgToSendproc = ""+ displayname + ":" + msgToSend; } else { var msgToSendproc = msgToSend; } $("#msgListRowCell").append("
From: "+ selectedsender +"
To: "+ receiversNumbers[0] +"
"+ msgToSendproc +"
"+ presDate +"
"+ sentMessageStatus +"
"); // Scroll down to the bottom of the window $("#frmMsgLstWrap").animate({scrollTop:$("#frmMsgLstTbl").prop("scrollHeight")},200); $("#sendMsgConv,#sendMsgConvBtn").removeClass('icon-loading'); }, error: function() { showAlert("Error while sending the message. You can check your Nextcloud log to find out more about this issue."); $("#sendMsgConv,#sendMsgConvBtn").removeClass('icon-loading'); } }); } else { showAlert("Please enter a message in the text box!"); $("#sendMsgConv,#sendMsgConvBtn").removeClass('icon-loading'); } } else { showAlert("Please choose a Sender ID from the 'From' drop-down list!"); $("#sendMsgConv,#sendMsgConvBtn").removeClass('icon-loading'); } }); // Make the window draggable function makeMgrWndDraggable(e) { window.pmdragging = {}; pmdragging.pageX0 = e.pageX; pmdragging.pageY0 = e.pageY; pmdragging.elem = $("#listAllMsgsFromTo"); pmdragging.offset0 = $("#listAllMsgsFromTo").offset(); function handle_dragging(e) { var left = pmdragging.offset0.left + (e.pageX - pmdragging.pageX0); var top = pmdragging.offset0.top + (e.pageY - pmdragging.pageY0); $(pmdragging.elem).offset({top: top, left: left}); } function handle_mouseup(e) { $('body').off('mousemove', handle_dragging).off('mouseup', handle_mouseup); } $('body').on('mouseup', handle_mouseup).on('mousemove', handle_dragging); } $("#draglstMsgmWindow").mousedown(makeMgrWndDraggable); $("#draglstMsgmWindowsc").mousedown(makeMgrWndDraggable); // Append the available phone numbers to the From drop-down list var availPhoneNmbrs = []; $("#currentsmsnmbrs .optselectsmsnb").each(function() { var crtphnmbr = $(this).attr("value"); if (crtphnmbr != "") { availPhoneNmbrs.push(crtphnmbr); } }); if (availPhoneNmbrs.length > 0) { var avphopt = ""; for (let d = 0; d < availPhoneNmbrs.length; d++) { avphopt += ""; } $("#selectFromNbConv").append(avphopt); } else { $("#selectFromNbConv").append(""); } // Get the sent/received messages for the current phone number, from the database function getMsgsPerNmbr(clckPhNumber) { var getGroupedPnUrl = OC.generateUrl("/apps/sms_relentless/user/getgroupedpernumber"); $('#listAllMsgsFromTo').addClass('icon-loading'); var totalPhNmbrs = 0; $.ajax({ method: 'POST', url: getGroupedPnUrl + '/' + userid, contentType: 'application/json', data: JSON.stringify({ "phoneNumber": clckPhNumber }), success: function(groupedpernb) { $('#listAllMsgsFromTo').removeClass('icon-loading'); var fromtoNmbrsData = []; for (var i = 0; i < groupedpernb.length; i++) { if (groupedpernb[i].author_displayname) { var authordnm = groupedpernb[i].author_displayname; } else { var authordnm = ''; } var sentfromnmbrarr = groupedpernb[i].from.split(": "); if (sentfromnmbrarr[1]) { var groupednbfrom = sentfromnmbrarr[1]; } else { var groupednbfrom = sentfromnmbrarr[0]; } var modmessagerec = ''; if (groupedpernb[i].author_displayname) { modmessagerec = ""+ groupedpernb[i].author_displayname + ":" + groupedpernb[i].message; } else { modmessagerec = groupedpernb[i].message; } if (groupedpernb[i].to.indexOf(": ") > -1) { var groupednmbrtopre = groupedpernb[i].to.split(": "); var groupednmbrto = groupednmbrtopre[1]; } else { var groupednmbrto = groupedpernb[i].to; } fromtoNmbrsData.push({ 'author_displayname': authordnm, 'from': groupednbfrom, 'to': groupednmbrto, 'message': modmessagerec, 'date': groupedpernb[i].date, 'status': groupedpernb[i].deliveryreceipt, 'table': groupedpernb[i].table }); } // Remove the duplicates var noDupMsgData = []; $.each(fromtoNmbrsData, function(i, e) { var matchingData = $.grep(noDupMsgData, function(item) { return item.from == e.from && item.to == e.to && item.message == e.message && item.table == 'received' && e.table == 'sent'; }); if (matchingData.length === 0) { noDupMsgData.push(e); } }); var messagesPerNmbr = {}; var msgsNamesPerNmbr = {}; var msgsNmbrsNames = {}; var displayNamesarr = []; var convData = []; for (var n = 0; n < noDupMsgData.length; n++) { if (noDupMsgData[n]['from'] == clckPhNumber && noDupMsgData[n]['table'] == 'sent') { convData.push({ 'author_displayname': noDupMsgData[n]['author_displayname'], 'message': noDupMsgData[n]['message'], 'from': noDupMsgData[n]['from'], 'to': noDupMsgData[n]['to'], 'date': noDupMsgData[n]['date'], 'direction': 'sent_from', 'status': (noDupMsgData[n]['status'] == null)? "" : noDupMsgData[n]['status'], 'table': noDupMsgData[n]['table'] }); } else if (noDupMsgData[n]['to'] == clckPhNumber && noDupMsgData[n]['table'] == 'sent') { convData.push({ 'author_displayname': noDupMsgData[n]['author_displayname'], 'message': noDupMsgData[n]['message'], 'from': noDupMsgData[n]['from'], 'to': noDupMsgData[n]['to'], 'date': noDupMsgData[n]['date'], 'direction': 'sent_to', 'status': (noDupMsgData[n]['status'] == null)? "" : noDupMsgData[n]['status'], 'table': noDupMsgData[n]['table'] }); } else if (noDupMsgData[n]['from'] == clckPhNumber && noDupMsgData[n]['table'] == 'received') { convData.push({ 'author_displayname': noDupMsgData[n]['author_displayname'], 'message': noDupMsgData[n]['message'], 'from': noDupMsgData[n]['from'], 'to': noDupMsgData[n]['to'], 'date': noDupMsgData[n]['date'], 'direction': 'received_from', 'status': (noDupMsgData[n]['status'] == null)? "" : noDupMsgData[n]['status'], 'table': noDupMsgData[n]['table'] }); } else if (noDupMsgData[n]['to'] == clckPhNumber && noDupMsgData[n]['table'] == 'received') { convData.push({ 'author_displayname': noDupMsgData[n]['author_displayname'], 'message': noDupMsgData[n]['message'], 'from': noDupMsgData[n]['from'], 'to': noDupMsgData[n]['to'], 'date': noDupMsgData[n]['date'], 'direction': 'received_on', 'status': (noDupMsgData[n]['status'] == null)? "" : noDupMsgData[n]['status'], 'table': noDupMsgData[n]['table'] }); } } // Sort messages by date convData.sort(function(a, b) { return new Date(b.date) - new Date(a.date); }); // Collect the display names of the users that sent messages from the current number var selectedNames = []; var displayNames = ''; for (var v = 0; v < convData.length; v++) { if (selectedNames.indexOf(convData[v]['author_displayname']) == -1) { selectedNames.push(convData[v]['author_displayname']); displayNames += "
"+ convData[v]['author_displayname'] +"
"; } } displayNames += "
"+ clckPhNumber +"
"; // Store the display names for the current number, to be able to see them later var ctPhNumber = clckPhNumber; msgsNamesPerNmbr[ctPhNumber] = displayNames; // Store the messages sent by each user, to be able to see them later when clicking on the user's name for (var h = 0; h < selectedNames.length; h++) { var rowMessageArrpn = []; for (var b = 0; b < convData.length; b++) { if (selectedNames[h] == convData[b]['author_displayname']) { if (convData[b]['direction'] == 'sent_from') { if (convData[b]['status']) { if (convData[b]['status'].indexOf("delivered") > -1 || convData[b]['status'].indexOf("delivery success") > -1 || convData[b]['status'].indexOf("Retrieved") > -1) { if (convData[b]['status'].indexOf("undelivered") > -1) { var sentMsgStatus = ""; } else { var sentMsgStatus = ""; } } else { var sentMsgStatus = ""; } } else { var sentMsgStatus = ""; } rowMessageArrpn.push("
From: "+ convData[b]['from'] +"
To: "+ convData[b]['to'] +"
"+ convData[b]['message'] +"
"+ convData[b]['date'] +"
"+ sentMsgStatus +"
"); } else if (convData[b]['direction'] == 'sent_to') { if (convData[b]['status']) { if (convData[b]['status'].indexOf("delivered") > -1 || convData[b]['status'].indexOf("delivery success") > -1 || convData[b]['status'].indexOf("Retrieved") > -1) { if (convData[b]['status'].indexOf("undelivered") > -1) { var sentMsgStatus = ""; } else { var sentMsgStatus = ""; } } else { var sentMsgStatus = ""; } } else { var sentMsgStatus = ""; } rowMessageArrpn.push("
From: "+ convData[b]['from'] +"
To: "+ convData[b]['to'] +"
"+ convData[b]['message'] +"
"+ convData[b]['date'] +"
"+ sentMsgStatus +"
"); } else if (convData[b]['direction'] == 'received_from') { rowMessageArrpn.push("
From: "+ convData[b]['from'] +"
To: "+ convData[b]['to'] +"
"+ convData[b]['message'] +"
"+ convData[b]['date'] +"
"); } else if (convData[b]['direction'] == 'received_on') { rowMessageArrpn.push("
From: "+ convData[b]['from'] +"
To: "+ convData[b]['to'] +"
"+ convData[b]['message'] +"
"+ convData[b]['date'] +"
"); } } } var crtNmber = clckPhNumber; var crtName = selectedNames[h]; msgsNmbrsNames[crtNmber] = msgsNmbrsNames[crtNmber] || {}; msgsNmbrsNames[crtNmber][crtName] = rowMessageArrpn; } // The number of messages to be loaded by default var nmbTblDefault = 50; // If the total number of messages is greater than the default number of messages to display, show the 'Load more messages' button if (convData.length > nmbTblDefault) { $("#loadMoreMsgs").css("display", "block"); var nmbToBeLoaded = nmbTblDefault; } else { var nmbToBeLoaded = convData.length; } var rowMessageArr = []; for (var m = nmbToBeLoaded - 1; m >= 0; m--) { if (convData[m]['direction'] == 'sent_from') { if (convData[m]['status']) { if (convData[m]['status'].indexOf("delivered") > -1 || convData[m]['status'].indexOf("delivery success") > -1 || convData[m]['status'].indexOf("Retrieved") > -1) { if (convData[m]['status'].indexOf("undelivered") > -1) { var sentMsgStatus = ""; } else { var sentMsgStatus = ""; } } else { var sentMsgStatus = ""; } } else { var sentMsgStatus = ""; } rowMessageArr.push("
From: "+ convData[m]['from'] +"
To: "+ convData[m]['to'] +"
"+ convData[m]['message'] +"
"+ convData[m]['date'] +"
"+ sentMsgStatus +"
"); } else if (convData[m]['direction'] == 'sent_to') { if (convData[m]['status']) { if (convData[m]['status'].indexOf("delivered") > -1 || convData[m]['status'].indexOf("delivery success") > -1 || convData[m]['status'].indexOf("Retrieved") > -1) { if (convData[m]['status'].indexOf("undelivered") > -1) { var sentMsgStatus = ""; } else { var sentMsgStatus = ""; } } else { var sentMsgStatus = ""; } } else { var sentMsgStatus = ""; } rowMessageArr.push("
From: "+ convData[m]['from'] +"
To: "+ convData[m]['to'] +"
"+ convData[m]['message'] +"
"+ convData[m]['date'] +"
"+ sentMsgStatus +"
"); } else if (convData[m]['direction'] == 'received_from') { rowMessageArr.push("
From: "+ convData[m]['from'] +"
To: "+ convData[m]['to'] +"
"+ convData[m]['message'] +"
"+ convData[m]['date'] +"
"); } else if (convData[m]['direction'] == 'received_on') { rowMessageArr.push("
From: "+ convData[m]['from'] +"
To: "+ convData[m]['to'] +"
"+ convData[m]['message'] +"
"+ convData[m]['date'] +"
"); } } var convDataPerNmbr = rowMessageArr.join(""); $("#grpdbynamelst").empty(); $("#grpdbynamelst").append(displayNames); $("#msgListRowCell").empty(); $("#msgListRowCell").append(convDataPerNmbr); // Store the messages for the current number, to be able to see them later, when clicking on the number var rowMessageArrcpt = []; for (var m = 0; m < convData.length; m++) { if (convData[m]['direction'] == 'sent_from') { if (convData[m]['status']) { if (convData[m]['status'].indexOf("delivered") > -1 || convData[m]['status'].indexOf("delivery success") > -1 || convData[m]['status'].indexOf("Retrieved") > -1) { if (convData[m]['status'].indexOf("undelivered") > -1) { var sentMsgStatus = ""; } else { var sentMsgStatus = ""; } } else { var sentMsgStatus = ""; } } else { var sentMsgStatus = ""; } rowMessageArrcpt.push("
From: "+ convData[m]['from'] +"
To: "+ convData[m]['to'] +"
"+ convData[m]['message'] +"
"+ convData[m]['date'] +"
"+ sentMsgStatus +"
"); } else if (convData[m]['direction'] == 'sent_to') { if (convData[m]['status']) { if (convData[m]['status'].indexOf("delivered") > -1 || convData[m]['status'].indexOf("delivery success") > -1 || convData[m]['status'].indexOf("Retrieved") > -1) { if (convData[m]['status'].indexOf("undelivered") > -1) { var sentMsgStatus = ""; } else { var sentMsgStatus = ""; } } else { var sentMsgStatus = ""; } } else { var sentMsgStatus = ""; } rowMessageArrcpt.push("
From: "+ convData[m]['from'] +"
To: "+ convData[m]['to'] +"
"+ convData[m]['message'] +"
"+ convData[m]['date'] +"
"+ sentMsgStatus +"
"); } else if (convData[m]['direction'] == 'received_from') { rowMessageArrcpt.push("
From: "+ convData[m]['from'] +"
To: "+ convData[m]['to'] +"
"+ convData[m]['message'] +"
"+ convData[m]['date'] +"
"); } else if (convData[m]['direction'] == 'received_on') { rowMessageArrcpt.push("
From: "+ convData[m]['from'] +"
To: "+ convData[m]['to'] +"
"+ convData[m]['message'] +"
"+ convData[m]['date'] +"
"); } } messagesPerNmbr[clckPhNumber] = rowMessageArrcpt; // Scroll down to the bottom of the window $("#frmMsgLstWrap").animate({scrollTop:$("#frmMsgLstTbl").prop("scrollHeight")},200); // Load more messages var clickNmb = 0; $("#loadMoreMsgs").click(function() { clickNmb++; var crefnb = (clickNmb + 1) * nmbToBeLoaded; if (crefnb > convData.length) { var nmbmsg = convData.length - 1; $("#loadMoreMsgs").css("display", "none"); } else { var nmbmsg = crefnb - 1; } var rowMessageArrAdd = []; for (var m = nmbmsg; m >= clickNmb * nmbToBeLoaded; m--) { if (convData[m]['direction'] == 'sent_from') { if (convData[m]['status']) { if (convData[m]['status'].indexOf("delivered") > -1 || convData[m]['status'].indexOf("delivery success") > -1 || convData[m]['status'].indexOf("Retrieved") > -1) { if (convData[m]['status'].indexOf("undelivered") > -1) { var sentMsgStatus = ""; } else { var sentMsgStatus = ""; } } else { var sentMsgStatus = ""; } } else { var sentMsgStatus = ""; } rowMessageArrAdd.push("
From: "+ convData[m]['from'] +"
To: "+ convData[m]['to'] +"
"+ convData[m]['message'] +"
"+ convData[m]['date'] +"
"+ sentMsgStatus +"
"); } else if (convData[m]['direction'] == 'sent_to') { if (convData[m]['status']) { if (convData[m]['status'].indexOf("delivered") > -1 || convData[m]['status'].indexOf("delivery success") > -1 || convData[m]['status'].indexOf("Retrieved") > -1) { if (convData[m]['status'].indexOf("undelivered") > -1) { var sentMsgStatus = ""; } else { var sentMsgStatus = ""; } } else { var sentMsgStatus = ""; } } else { var sentMsgStatus = ""; } rowMessageArrAdd.push("
From: "+ convData[m]['from'] +"
To: "+ convData[m]['to'] +"
"+ convData[m]['message'] +"
"+ convData[m]['date'] +"
"+ sentMsgStatus +"
"); } else if (convData[m]['direction'] == 'received_from') { rowMessageArrAdd.push("
From: "+ convData[m]['from'] +"
To: "+ convData[m]['to'] +"
"+ convData[m]['message'] +"
"+ convData[m]['date'] +"
"); } else if (convData[m]['direction'] == 'received_on') { rowMessageArrAdd.push("
From: "+ convData[m]['from'] +"
To: "+ convData[m]['to'] +"
"+ convData[m]['message'] +"
"+ convData[m]['date'] +"
"); } } var convDataPerNmbrad = rowMessageArrAdd.join(""); var scrlheight = $("#msgListRowCell").height(); $("#msgListRowCell").prepend(convDataPerNmbrad); $("#frmMsgLstWrap").animate({scrollTop: $("#msgListRowCell").height() - scrlheight}, 0); }); // Show the messages sent by each user whose name is clicked $('[id*="diplNm_"]').click(function() { var crntNmbr = $(this).attr("id").split("_")[1]; var crntDisName = $(this).attr("name"); $("#loadMoreMsgs").css("display", "none"); var convDataprn = []; $.each(msgsNmbrsNames[crntNmbr][crntDisName], function(index, item) { convDataprn.push(item); }); // If the total number of messages is greater than the default number of messages to display, show the 'Load more messages' button if (convDataprn.length > nmbTblDefault) { $("#loadMoreMsgsusr").css("display", "block"); var nmbToBeLoaded = nmbTblDefault; } else { $("#loadMoreMsgsusr").css("display", "none"); var nmbToBeLoaded = convDataprn.length; } var rowMessageArrprnst = []; for (var n = nmbToBeLoaded - 1; n >= 0; n--) { rowMessageArrprnst.push(convDataprn[n]); } var convDataPerNmbrprnst = rowMessageArrprnst.join(""); $("#msgListRowCell").empty(); $("#msgListRowCell").append(convDataPerNmbrprnst); // Scroll down to the bottom of the window $("#frmMsgLstWrap").animate({scrollTop:$("#frmMsgLstTbl").prop("scrollHeight")},200); // Load more messages var clckNb = 0; $("#loadMoreMsgsusr").unbind("click"); $("#loadMoreMsgsusr").click(function() { clckNb++; var crefnb = (clckNb + 1) * nmbToBeLoaded; $("#loadMoreMsgs").css("display", "none"); if (crefnb > convDataprn.length) { var nmbmsg = convDataprn.length - 1; $("#loadMoreMsgsusr").css("display", "none"); } else { var nmbmsg = crefnb - 1; $("#loadMoreMsgsusr").css("display", "block"); } var rowMessageArrAddst = []; for (var q = nmbmsg; q >= clckNb * nmbToBeLoaded; q--) { rowMessageArrAddst.push(convDataprn[q]); } var convDataPerNmbradst = rowMessageArrAddst.join(""); var scrlheight = $("#msgListRowCell").height(); $("#msgListRowCell").prepend(convDataPerNmbradst); $("#frmMsgLstWrap").animate({scrollTop: $("#msgListRowCell").height() - scrlheight}, 0); }); $(".dispNameList").each(function() { $(this).css("color", "#0a559e"); }); $("#diplNmAllMsg").css("color", "#04957b"); $(this).css("color", "#1b8efe"); }); // Show again all the messages sent/received to/from the clicked number $("#diplNmAllMsg").click(function() { $("#loadMoreMsgsusr").css("display", "none"); var convDataprn = []; $.each(messagesPerNmbr[clckPhNumber], function(index, item) { convDataprn.push(item); }); // If the total number of messages is greater than the default number of messages to display, show the 'Load more messages' button if (convDataprn.length > nmbTblDefault) { $("#loadMoreMsgs").css("display", "block"); var nmbToBeLoaded = nmbTblDefault; } else { $("#loadMoreMsgs").css("display", "none"); var nmbToBeLoaded = convDataprn.length; } var rowMessageArrprnst = []; for (var n = nmbToBeLoaded - 1; n >= 0; n--) { rowMessageArrprnst.push(convDataprn[n]); } var convDataPerNmbrprnst = rowMessageArrprnst.join(""); $("#msgListRowCell").empty(); $("#msgListRowCell").append(convDataPerNmbrprnst); // Scroll down to the bottom of the window $("#frmMsgLstWrap").animate({scrollTop:$("#frmMsgLstTbl").prop("scrollHeight")},200); // Load more messages var clckNb = 0; $("#loadMoreMsgs").unbind("click"); $("#loadMoreMsgs").click(function() { clckNb++; var crefnb = (clckNb + 1) * nmbToBeLoaded; $("#loadMoreMsgsusr").css("display", "none"); if (crefnb > convDataprn.length) { var nmbmsg = convDataprn.length - 1; $("#loadMoreMsgs").css("display", "none"); } else { var nmbmsg = crefnb - 1; $("#loadMoreMsgs").css("display", "block"); } var rowMessageArrAddst = []; for (var q = nmbmsg; q >= clckNb * nmbToBeLoaded; q--) { rowMessageArrAddst.push(convDataprn[q]); } var convDataPerNmbradst = rowMessageArrAddst.join(""); var scrlheight = $("#msgListRowCell").height(); $("#msgListRowCell").prepend(convDataPerNmbradst); $("#frmMsgLstWrap").animate({scrollTop: $("#msgListRowCell").height() - scrlheight}, 0); }); $(".dispNameList").each(function() { $(this).css("color", "#0a559e"); }); $("#diplNmAllMsg").css("color", "#04957b"); $(this).css("color", "#04c6a4"); }); // Show the scroll-up arrow $("#frmMsgLstWrap").scroll(function() { if ($(this).scrollTop() > 900) { $('#upArrowSmall').fadeIn(); } else { $('#upArrowSmall').fadeOut(); } }); $("#upArrowSmall").unbind("click"); $("#upArrowSmall").click(function() { $("#frmMsgLstWrap").animate({scrollTop : 0},400); }); // Download MMS files when clicking on their URLs $('[id^="mmsTblUrl-"]').on('click', function(evt) { var clckedUrl = $(this).text(); var flNamearr = clckedUrl.split("/"); var flName = flNamearr.reverse()[0]; confirmAlert("Download this file only if you trust the sender and the domain of the URL."); $("#confirmOk").click(function() { $("#alertMsgOverlay").remove(); $("#alertConfMessage").remove(); var mmsLink = document.createElement("a"); mmsLink.setAttribute('href', clckedUrl); mmsLink.setAttribute('download', flName); mmsLink.setAttribute('target', '_blank'); document.body.appendChild(mmsLink); mmsLink.click(); mmsLink.remove(); }); $("#confirmCancel").click(function() { $("#alertMsgOverlay").remove(); $("#alertConfMessage").remove(); }); }); }, error: function() { showAlert("Error while attempting to get message data from the database!"); $('#listAllMsgsFromTo').removeClass('icon-loading'); } }); } getMsgsPerNmbr(clckPhNumber); $("#refreshMsgsConvtf").click(function() { getMsgsPerNmbr(clckPhNumber); setTimeout(function() { $("#diplNmAllMsg").click(); }, 1000); }); } $('[id^="showMsgFrom-"]').click(function() { var ctrwnb = $(this).attr("id").replace("showMsgFrom-", ""); var clckPhNumber = $("#frmNmbr-"+ ctrwnb).text(); showMsgPerNmbr(clckPhNumber); }) $('[id^="showMsgTo-"]').click(function() { var ctrwnbTo = $(this).attr("id").replace("showMsgTo-", ""); if ($("#toNmbr-"+ ctrwnbTo).text().indexOf(":") > -1) { var clckPhNbTo = $("#toNmbr-"+ ctrwnbTo).text().split(": ")[1]; } else { var clckPhNbTo = $("#toNmbr-"+ ctrwnbTo).text(); }; showMsgPerNmbr(clckPhNbTo); }) // Show the pop-up window for adding a Display Name to the 'From' numbers of unknown senders $('[id^="addDispName-"]').click(function() { var crrownb = $(this).attr("id").replace("addDispName-", ""); var slctPhoneNb = $("#frmNmbr-"+ crrownb).text(); var addDNameWindow = "
"; addDNameWindow += "
"; addDNameWindow += ""; addDNameWindow += "
If this is an external phone number (the number of a person that doesn't have a Nextcloud account), you can save a Display Name for this number, so that all the messages coming from it will be preceded by the specified Display Name:
"; addDNameWindow += "
"+ slctPhoneNb +"
"; addDNameWindow += ""; addDNameWindow += ""; addDNameWindow += "
"; $("#content").append("
"); $("#content").append(addDNameWindow); var topNmDist = parseInt((window.innerHeight / 2).toFixed(2) - 180) +"px"; var leftNmDist = parseInt((window.innerWidth / 2).toFixed(2) - 150) +"px"; $("#disNameWindow").css({ "top" : topNmDist, "left" : leftNmDist }); $("#closeDisNmWindow").click(function() { $("#disNameWindow").remove(); $("#recTblOverlay").remove(); }); $("#recTblOverlay").click(function() { $("#disNameWindow").remove(); $("#recTblOverlay").remove(); }); // Make the window draggable function makeMgrWndDraggable(e) { window.pmdragging = {}; pmdragging.pageX0 = e.pageX; pmdragging.pageY0 = e.pageY; pmdragging.elem = $("#disNameWindow"); pmdragging.offset0 = $("#disNameWindow").offset(); function handle_dragging(e) { var left = pmdragging.offset0.left + (e.pageX - pmdragging.pageX0); var top = pmdragging.offset0.top + (e.pageY - pmdragging.pageY0); $(pmdragging.elem).offset({top: top, left: left}); } function handle_mouseup(e) { $('body').off('mousemove', handle_dragging).off('mouseup', handle_mouseup); } $('body').on('mouseup', handle_mouseup).on('mousemove', handle_dragging); } $("#dragDispNmWindow").mousedown(makeMgrWndDraggable); // Save the Display Name $("#saveDispName").click(function() { var dispNmText = $("#saveDispNmText").val(); if (/^[a-zA-Z0-9\s\-\/\.\)\(\']+$/.test(dispNmText) && dispNmText.length < 256) { var saveDispNameUrl = OC.generateUrl("/apps/sms_relentless/user/savedisplayname"); $.ajax({ url: saveDispNameUrl + '/' + userid, method: 'POST', dataType:'text', data: { authorDisplayname: dispNmText, from: slctPhoneNb }, success: function(respupdname) { showAlert(respupdname); $("#disNameWindow").remove(); $("#recTblOverlay").remove(); }, error: function() { showAlert("Error while attempting to save the new Display Name to the database."); $("#disNameWindow").remove(); $("#recTblOverlay").remove(); } }); } else { showAlert("The Display Name should contain only letters, numbers, spaces, hyphens (-), slashes (/), periods (.), round brackets (()) and single quotation marks ('), it should not be empty and should have less than 256 characters."); } }); }); // Add pagination var rowsShown = messagesperpage; var rowsTotal = $("#recSmsTable tr").length; var numPages = (rowsTotal - 2) / rowsShown; for (i = 0; i < numPages; i++) { var pageNum = i + 1; $('#paginationrec').append('' + pageNum + ' '); } $('#paginationrec').children(":first").addClass('active'); $('#paginationrec a:first').addClass('active'); // Show table page when clicking a page number $('.recpages a').bind('click', function() { $('#paginationrec').children().removeClass('active'); $(this).addClass('active'); var currentPageNo = $(this).text(); $('#paginationrec a').each(function() { if ($(this).text() == currentPageNo) { $(this).addClass('active'); } }); // Sort table rows var rows = $('#recSmsTable tr').get(); rows.sort(function(a, b) { var A = parseInt($('td.dbidcolumnrec', a).text()); var B = parseInt($('td.dbidcolumnrec', b).text()); if (A < B) { return -1; } if (A > B) { return 1; } return 0; }); $.each(rows, function(index, row) { $('#recSmsTable').append(row); }); var currPage = $(this).attr('rel'); var startItem = currPage * rowsShown; var endItem = startItem + rowsShown; $(".receivedrowsbody").hide().slice(startItem, endItem).css('display', 'table-row'); $('#totalrecmessages').remove(); $('#smstables').append("
Total displayed messages: " + parseddata.length + "
"); }); $('#paginationrec').children(":last").trigger('click'); // Select all records $('#selectAllChckbx').change(function() { if ($(this).is(':checked')) { $(".indivchckbx").prop("checked", true); } else { $(".indivchckbx").prop("checked", false); } }); function reorderRecRows() { var currenttext = $(".filterbuttonsrec").closest('[class="filterbuttonsrec"]').find('[class="indivfilterrec"]').text(); if (currenttext == '') { $('tr').sort(function (a, b) { return parseInt($('td.dbidcolumnrec', b).text()) < parseInt($('td.dbidcolumnrec', a).text()); }).appendTo("#recSmsTable"); } } // Filter rows $("#databaseidfilter").on("click", function(event) { var databaseId = $("#dbidtextrec").val(); var msgrowsNo = 0; $(".receivedrowsbody").each(function() { var checkrecEmpty1 = 0; $(".indivfilterrec").not("#dbidtextrec").each(function() { if ($(this).val() != '') { checkrecEmpty1 = 1; } }); if (checkrecEmpty1 == 0) { $(this).show(); } if (databaseId != '') { if ($(this).find('[class="dbidcolumnrec"]').text() == databaseId) { $("#recSmsTable").append(this); if ($(this).is(":visible")) { msgrowsNo++; } } else { $(this).hide(); } } else { $(this).show(); msgrowsNo++; } }); reorderRecRows(); $('#totalrecmessages').remove(); $('#smstables').append("
Total filtered messages: " + msgrowsNo + "
"); }); $("#useridfilter").on("click", function(event) { var useridtxt = $("#useridtextrec").val().toLowerCase(); var msgrowsNo = 0; $(".receivedrowsbody").each(function() { var checkrecEmpty2 = 0; $(".indivfilterrec").not("#useridtextrec").each(function() { if ($(this).val() != '') { checkrecEmpty2 = 1; } }); if (checkrecEmpty2 == 0) { $(this).show(); } if (useridtxt != '') { var useridfound = $(this).find('[class="useridcolrec"]').text().toLowerCase(); if(useridfound.indexOf(useridtxt) != -1) { $("#recSmsTable").append(this); if ($(this).is(":visible")) { msgrowsNo++; } } else { $(this).hide(); } } else { $(this).show(); msgrowsNo++; } }); reorderRecRows(); $('#totalrecmessages').remove(); $('#smstables').append("
Total filtered messages: " + msgrowsNo + "
"); }); $("#messageidfilter").on("click", function(event) { var messageidtxt = $("#messageidtextrec").val().toLowerCase(); var msgrowsNo = 0; $(".receivedrowsbody").each(function() { var checkrecEmpty3 = 0; $(".indivfilterrec").not("#messageidtextrec").each(function() { if ($(this).val() != '') { checkrecEmpty3 = 1; } }); if (checkrecEmpty3 == 0) { $(this).show(); } if (messageidtxt != '') { var foundtdmssgid = $(this).find('[class="messageidcolrec"]').text().toLowerCase(); if (foundtdmssgid.indexOf(messageidtxt) != -1) { $("#recSmsTable").append(this); if ($(this).is(":visible")) { msgrowsNo++; } } else { $(this).hide(); } } else { $(this).show(); msgrowsNo++; } }); reorderRecRows(); $('#totalrecmessages').remove(); $('#smstables').append("
Total filtered messages: " + msgrowsNo + "
"); }); $("#datefilter").on("click", function(event) { var datetxtvr = $("#datetextrec").val().toLowerCase(); var msgrowsNo = 0; $(".receivedrowsbody").each(function() { var checkrecEmpty4 = 0; $(".indivfilterrec").not("#datetextrec").each(function() { if ($(this).val() != '') { checkrecEmpty4 = 1; } }); if (checkrecEmpty4 == 0) { $(this).show(); } if (datetxtvr != '') { var founddate = $(this).find('[class="datecolrec"]').text().toLowerCase(); if (founddate.indexOf(datetxtvr) != -1) { $("#recSmsTable").append(this); if ($(this).is(":visible")) { msgrowsNo++; } } else { $(this).hide(); } } else { $(this).show(); msgrowsNo++; } }); reorderRecRows(); $('#totalrecmessages').remove(); $('#smstables').append("
Total filtered messages: " + msgrowsNo + "
"); }); $("#fromfilter").on("click", function(event) { var fromtxtvr = $("#fromtextrec").val().toLowerCase(); var msgrowsNo = 0; $(".receivedrowsbody").each(function() { var checkrecEmpty5 = 0; $(".indivfilterrec").not("#fromtextrec").each(function() { if ($(this).val() != '') { checkrecEmpty5 = 1; } }); if (checkrecEmpty5 == 0) { $(this).show(); } if (fromtxtvr != '') { var foundfrom = $(this).find('[class="fromcolumnrec"]').text().toLowerCase(); if (foundfrom.indexOf(fromtxtvr) != -1) { $("#recSmsTable").append(this); if ($(this).is(":visible")) { msgrowsNo++; } } else { $(this).hide(); } } else { $(this).show(); msgrowsNo++; } }); reorderRecRows(); $('#totalrecmessages').remove(); $('#smstables').append("
Total filtered messages: " + msgrowsNo + "
"); }); $("#tofilter").on("click", function(event) { var totxtvr = $("#totextrec").val().toLowerCase(); var msgrowsNo = 0; $(".receivedrowsbody").each(function() { var checkrecEmpty6 = 0; $(".indivfilterrec").not("#totextrec").each(function() { if ($(this).val() != '') { checkrecEmpty6 = 1; } }); if (checkrecEmpty6 == 0) { $(this).show(); } if (totxtvr != '') { var foundto = $(this).find('[class="tocolrec"]').text().toLowerCase(); if (foundto.indexOf(totxtvr) != -1) { $("#recSmsTable").append(this); if ($(this).is(":visible")) { msgrowsNo++; } } else { $(this).hide(); } } else { $(this).show(); msgrowsNo++; } }); reorderRecRows(); $('#totalrecmessages').remove(); $('#smstables').append("
Total filtered messages: " + msgrowsNo + "
"); }); $("#messagefilter").on("click", function(event) { var messagetxtvr = $("#messagetextrec").val().toLowerCase(); var msgrowsNo = 0; $(".receivedrowsbody").each(function() { var checkrecEmpty7 = 0; $(".indivfilterrec").not("#messagetextrec").each(function() { if ($(this).val() != '') { checkrecEmpty7 = 1; } }); if (checkrecEmpty7 == 0) { $(this).show(); } if (messagetxtvr != '') { var foundmessage = $(this).find('[class="messagecolumnrec"]').text().toLowerCase(); if (foundmessage.indexOf(messagetxtvr) != -1) { $("#recSmsTable").append(this); if ($(this).is(":visible")) { msgrowsNo++; } } else { $(this).hide(); } } else { $(this).show(); msgrowsNo++; } }); reorderRecRows(); $('#totalrecmessages').remove(); $('#smstables').append("
Total filtered messages: " + msgrowsNo + "
"); }); // Clear all filters $("#clearrecfilters").on("click", function(event) { $(".receivedrowsbody").each(function() { $(this).show(); }); $(".indivfilterrec").val(""); $('#totalrecmessages').remove(); $('#smstables').append("
Total displayed messages: " + parseddata.length + "
"); }); // Delete selected rows from the database $("#deleterecrows").on("click", function() { var checkcheckbx = $("#recSmsTable input[type=checkbox]:checked").length; if (checkcheckbx == 0) { showAlert("Please select the row(s) to permanently delete from the database !"); } else { var checkboxIds = []; $(".receivedrowsbody").each(function() { var rowcheckbx = $(this).find('input[type="checkbox"]'); if (rowcheckbx.is(":checked")) { var dbrowid = $(this).find('[class="dbidcolumnrec"]').text() + "|" + $(this).find('[class="messageidcolrec"]').text(); checkboxIds.push(dbrowid); } }); confirmAlert("Please note that the row(s) you selected will be permanently deleted from the database, without being saved before removal. This action cannot be undone ! If you really want to permanently delete the selected row(s) press 'OK'."); $("#confirmCancel").click(function() { $("#alertMsgOverlay").remove(); $("#alertConfMessage").remove(); }); $("#confirmOk").click(function() { $("#alertMsgOverlay").remove(); $("#alertConfMessage").remove(); var deleterecRowsUrl = OC.generateUrl("/apps/sms_relentless/user/removerecrows"); $('#smstables').addClass('icon-loading'); $.ajax({ url: deleterecRowsUrl + '/' + userid, type: "POST", data: { "recmessagedbIDs": checkboxIds }, success: function(delmsgrec) { $('#smstables').removeClass('icon-loading'); if (delmsgrec == "success") { showAlert("The row(s) have been deleted successfully !"); $('#receivedsmstableshow').click(); } else if (delmsgrec == "not allowed") { showAlert("At least one message couldn't be deleted because of permission issues. Non-admin users can delete the messages sent/received from/on the numbers shared with them only if they are allowed by an admin."); } else { showAlert("There was an error while deleting the selected row(s) !"); } }, error: function() { $('#smstables').removeClass('icon-loading'); showAlert("There was an error while attempting to delete the selected row(s) !"); } }); }); } }); // Show/Hide filter row $('#recarrow').on('click', function() { if ($('#recfiltersrow').is(':visible')) { $('#recfiltersrow').hide(); $('#recheaderrow').css('top', '0px'); $(this).removeClass('arrowUpCl'); $(this).addClass('arrowDownCl'); } else { $('#recfiltersrow').show(); $('#recheaderrow').css('top', '158px'); $(this).removeClass('arrowDownCl'); $(this).addClass('arrowUpCl'); } }); $("#app-content").animate({scrollTop:$("#recSmsTable").prop("scrollHeight")},200); // Download MMS files when clicking on their URLs $('[id^="mmsTblUrl-"]').on('click', function(evt) { var clckedUrl = $(this).text(); var flNamearr = clckedUrl.split("/"); var flName = flNamearr.reverse()[0]; confirmAlert("Download this file only if you trust the sender and the domain of the URL."); $("#confirmOk").click(function() { $("#alertMsgOverlay").remove(); $("#alertConfMessage").remove(); var mmsLink = document.createElement("a"); mmsLink.setAttribute('href', clckedUrl); mmsLink.setAttribute('download', flName); mmsLink.setAttribute('target', '_blank'); document.body.appendChild(mmsLink); mmsLink.click(); mmsLink.remove(); }); $("#confirmCancel").click(function() { $("#alertMsgOverlay").remove(); $("#alertConfMessage").remove(); }); }); }, error: function() { showAlert("Error. You can check the Nextcloud log to find more details about this issue."); $('#smstables').removeClass('icon-loading'); } }); // Look for the 'new received message' indicator in the database, to know if the received messages list needs to be refreshed intervalNmfr = setInterval(function() { checkIfNewMessage(); }, newMsgInterval); $("#stopAutoRefreshSent").css("display", "none"); }); // List sent messages $("#sentsmstableshow").on("click", function(event) { $('#smstables').empty(); clearInterval(intervalNmfr); var getSentUrl = OC.generateUrl("/apps/sms_relentless/user/getsenttable"); $('#smstables').addClass('icon-loading'); $.ajax({ url: getSentUrl + '/' + userid, method: "GET", contentType: 'application/json', success: function(sentdatafdb) { var sentparseddata = sentdatafdb.datarows; $('#smstables').append("
Pages
"); $('#smstables').append("
"); $('#sentSmsTable').append(""); $('#sentSmsTable').append("IDUser IDMessage IDDateFromToNetworkPriceStatusDelivery
ReceitSent Message"); $('#sentfiltersrow').hide(); if (sentdatafdb.showdispnm == 1) { for (var i = 0; i < sentparseddata.length; i++) { if (sentparseddata[i].author_displayname) { var procmessage = ""+ sentparseddata[i].author_displayname + ":" + sentparseddata[i].message +"
"; } else { var procmessage = sentparseddata[i].message +"
"; } var procsentFrom = "
"+ sentparseddata[i].from +"
"; var procsentTo = "
"+ sentparseddata[i].to +"
"; $('#sentSmsTable').append(""+ sentparseddata[i].id +""+ sentparseddata[i].user_id +""+ sentparseddata[i].message_id +""+ sentparseddata[i].date +""+ procsentFrom +""+ procsentTo +"
"+ sentparseddata[i].network +"
"+ sentparseddata[i].price +""+ sentparseddata[i].status +""+ sentparseddata[i].deliveryreceipt +""+ procmessage +""); } } else { for (var i = 0; i < sentparseddata.length; i++) { var procmessage = sentparseddata[i].message +"
"; var procsentFrom = "
"+ sentparseddata[i].from +"
"; var procsentTo = "
"+ sentparseddata[i].to +"
"; $('#sentSmsTable').append(""+ sentparseddata[i].id +""+ sentparseddata[i].user_id +""+ sentparseddata[i].message_id +""+ sentparseddata[i].date +""+ procsentFrom +""+ procsentTo +"
"+ sentparseddata[i].network +"
"+ sentparseddata[i].price +""+ sentparseddata[i].status +""+ sentparseddata[i].deliveryreceipt +""+ procmessage +""); } } $('#smstables').append("
Total displayed messages: " + sentparseddata.length + "
"); $('#smstables').removeClass('icon-loading'); $('#sentarrow').removeClass('arrowUpCl'); $('#sentarrow').addClass('arrowDownCl'); // Show the name of the carrier's network $('[id^="phNetwork-"]').click(function(){ var ntwrkText = $(this).closest(".networkcolumnsent").find('[class="networkNmContent"]').text(); if (ntwrkText) { if (/^[0-9\s]*$/.test(ntwrkText)) { showAlert("The code of the receiver's carrier is:"+ ntwrkText +"You can look up the name of the carrier on this Wikipedia page, taking into account that the first 3 digits specify the mobile country code, while the last 2 or 3 digits specify the mobile network code."); } else { showAlert("The name of the receiver's carrier is:
"+ ntwrkText); } } else { showAlert("The name of the receiver's carrier is not known."); } }); // Show the pop-up window that lists all the messages exchanged between the current 2 phone numbers function showSentMsgPerConv(phNumberFrom, phNumberTo) { let allfrmtomsg = "
"; allfrmtomsg += "
"; allfrmtomsg += ""; allfrmtomsg += "
Messages exchanged between "+ phNumberFrom +" and "+ phNumberTo +"
"; allfrmtomsg += "
"; allfrmtomsg += ""; allfrmtomsg += ""; allfrmtomsg += "
Load more messages
Load more messages
"; allfrmtomsg += "
"; allfrmtomsg += "
From:
To: "+ phNumberTo +"
"; allfrmtomsg += "
Send SMS
"; allfrmtomsg += "
"; allfrmtomsg += "
"; allfrmtomsg += "
"; $("#content").append("
"); $("#content").append(allfrmtomsg); let topDist = parseInt((window.innerHeight / 2).toFixed(2) - 340) +"px"; let leftDist = parseInt((window.innerWidth / 2).toFixed(2) - 300) +"px"; $("#listAllMsgsConv").css({ "top" : topDist, "left" : leftDist }); $("#closeFrmMsgWindow").click(function() { $("#listAllMsgsConv").remove(); $("#recTblOverlay").remove(); }); $("#recTblOverlay").click(function() { $("#listAllMsgsConv").remove(); $("#recTblOverlay").remove(); }); // Expand the window when clicking on the arrow, to be able to send a reply message $("#expandWindowRpl").unbind("click"); $("#expandWindowRpl").click(function() { if ($(this).attr('src') == '/' + ctappdir + '/sms_relentless/img/arrowDown.svg') { $("#sendMsgReply").css("display", "block"); if ($(window).width() > 600) { $("#listAllMsgsConv").css("height", "618px"); } else { $("#listAllMsgsConv").css("height", parseInt($(window).height() - 32) + "px"); $("#frmMsgLstWrap").css("height", parseInt($(window).height() - 304) + "px"); } $(this).attr('src', '/' + ctappdir + '/sms_relentless/img/arrowUp.svg'); $(this).attr('title', 'Collapse'); } else { $("#sendMsgReply").css("display", "none"); if ($(window).width() > 600) { $("#listAllMsgsConv").css("height", "490px"); } else { $("#listAllMsgsConv").css("height", parseInt($(window).height() - 120) + "px"); $("#frmMsgLstWrap").css("height", parseInt($(window).height() - 232) + "px"); } $(this).attr('src', '/' + ctappdir + '/sms_relentless/img/arrowDown.svg'); $(this).attr('title', 'Expand to send a reply'); } }); // Send a message from the 'conversation' window $("#sendMsgConvBtn").click(function() { $("#sendMsgConv,#sendMsgConvBtn").addClass('icon-loading'); var msgToSend = $("#sendMsgConvText").val(); var selectedid = $("#selectFromNbConv").val(); var toNumber = $("#toNmbrConv").text(); var receiversNumbers = [toNumber]; if (selectedid != '') { var sendersplit = selectedid.split(":"); var providercap = sendersplit[0]; var provsec = sendersplit[1]; if (/[a-zA-Z]/.test(provsec)) { var alphanumcheck = true; } else { var alphanumcheck = false; } if (providercap == 'Tx' && alphanumcheck == false) { var senderproc = selectedid.replace(/[^0-9]/g, ""); var selectedsender = "+" + senderproc; var providerUsed = "telnyx"; var relbaseUrl = OC.generateUrl("/apps/sms_relentless/user/sendsmstel"); } else if (providercap == 'Pl' && alphanumcheck == false) { var selectedsender = selectedid.replace(/[^0-9]/g, ""); var providerUsed = "plivo"; var relbaseUrl = OC.generateUrl("/apps/sms_relentless/user/sendsmsnex"); } else if (providercap == 'Tw' && alphanumcheck == false) { var senderproc = selectedid.replace(/[^0-9]/g, ""); var selectedsender = "+" + senderproc; var providerUsed = "twilio"; var relbaseUrl = OC.generateUrl("/apps/sms_relentless/user/sendsmstwil"); } else if (providercap == 'Fl' && alphanumcheck == false) { var senderproc = selectedid.replace(/[^0-9]/g, ""); var selectedsender = "+" + senderproc; var providerUsed = "flowroute"; var relbaseUrl = OC.generateUrl("/apps/sms_relentless/user/sendsmsflow"); } else if (providercap == 'Tx' && alphanumcheck == true) { var selectedsender = provsec; var providerUsed = "telnyx"; var relbaseUrl = OC.generateUrl("/apps/sms_relentless/user/sendsmstel"); } else if (providercap == 'Pl' && alphanumcheck == true) { var selectedsender = provsec; var providerUsed = "plivo"; var relbaseUrl = OC.generateUrl("/apps/sms_relentless/user/sendsmsnex"); } else if (providercap == 'Tw' && alphanumcheck == true) { var selectedsender = provsec; var providerUsed = "twilio"; var relbaseUrl = OC.generateUrl("/apps/sms_relentless/user/sendsmstwil"); } else if (providercap == 'Fl' && alphanumcheck == true) { var selectedsender = provsec; var providerUsed = "flowroute"; var relbaseUrl = OC.generateUrl("/apps/sms_relentless/user/sendsmsflow"); } var uploadedtomms = []; if (msgToSend != '') { $.ajax({ url: relbaseUrl + '/' + userid, type: "POST", data: { receiversPhoneNbs: receiversNumbers, fromsender: selectedsender, waitinterval: 1000, sentsmstext: msgToSend, ismms: 0, mmsfiles: uploadedtomms }, success: function(displayname) { var tzdate = new Date(); var presDatest = new Date(tzdate.getTime() - (tzdate.getTimezoneOffset() * 60000)).toJSON(); var presDatedb = presDatest.split(".")[0]; var presDatesc = presDatedb.split("T"); var presDate = presDatesc[0] +" "+ presDatesc[1]; var sentMessageStatus = ''; if (displayname) { var msgToSendproc = ""+ displayname + ":" + msgToSend; } else { var msgToSendproc = msgToSend; } $("#msgListRowCell").append("
From: "+ selectedsender +"
To: "+ receiversNumbers[0] +"
"+ msgToSendproc +"
"+ presDate +"
"+ sentMessageStatus +"
"); // Scroll down to the bottom of the window $("#frmMsgLstWrap").animate({scrollTop:$("#frmMsgLstTbl").prop("scrollHeight")},200); $("#sendMsgConv,#sendMsgConvBtn").removeClass('icon-loading'); }, error: function() { showAlert("Error while sending the message. You can check your Nextcloud log to find out more about this issue."); $("#sendMsgConv,#sendMsgConvBtn").removeClass('icon-loading'); } }); } else { showAlert("Please enter a message in the text box!"); $("#sendMsgConv,#sendMsgConvBtn").removeClass('icon-loading'); } } else { showAlert("Please choose a Sender ID from the 'From' drop-down list!"); $("#sendMsgConv,#sendMsgConvBtn").removeClass('icon-loading'); } }); // Make the window draggable function makeMgrWndDraggable(e) { window.pmdragging = {}; pmdragging.pageX0 = e.pageX; pmdragging.pageY0 = e.pageY; pmdragging.elem = $("#listAllMsgsConv"); pmdragging.offset0 = $("#listAllMsgsConv").offset(); function handle_dragging(e) { let left = pmdragging.offset0.left + (e.pageX - pmdragging.pageX0); let top = pmdragging.offset0.top + (e.pageY - pmdragging.pageY0); $(pmdragging.elem).offset({top: top, left: left}); } function handle_mouseup(e) { $('body').off('mousemove', handle_dragging).off('mouseup', handle_mouseup); } $('body').on('mouseup', handle_mouseup).on('mousemove', handle_dragging); } $("#draglstMsgmWindow").mousedown(makeMgrWndDraggable); $("#draglstMsgmWindowsc").mousedown(makeMgrWndDraggable); // Append the available phone numbers to the From drop-down list var availPhoneNmbrs = []; $("#currentsmsnmbrs .optselectsmsnb").each(function() { var crtphnmbr = $(this).attr("value"); if (crtphnmbr != "") { availPhoneNmbrs.push(crtphnmbr); } }); if (availPhoneNmbrs.length > 0) { var avphopt = ""; for (let d = 0; d < availPhoneNmbrs.length; d++) { if (availPhoneNmbrs[d].indexOf(phNumberFrom) === -1) { avphopt += ""; } else { avphopt += ""; } } $("#selectFromNbConv").append(avphopt); } else { $("#selectFromNbConv").append(""); } // Get the messages exchanged between the current 2 phone numbers, from the database function getMsgsForNumbersSec(phNumberFrom, phNumberTo) { let getGrpConvUrl = OC.generateUrl("/apps/sms_relentless/user/getgroupedforreply"); $('#listAllMsgsConv').addClass('icon-loading'); let totalPhNmbrs = 0; $.ajax({ method: 'POST', url: getGrpConvUrl + '/' + userid, contentType: 'application/json', data: JSON.stringify({ "phoneNmbrFrom": phNumberFrom, "phoneNmbrTo": phNumberTo }), success: function(groupedperconv) { $('#listAllMsgsConv').removeClass('icon-loading'); let fromtoNmbrsData = []; for (let i = 0; i < groupedperconv.length; i++) { if (groupedperconv[i].author_displayname) { var authordnm = groupedperconv[i].author_displayname; } else { var authordnm = ''; } var sentfromnmbrarr = groupedperconv[i].from.split(": "); if (sentfromnmbrarr[1]) { var groupednbfrom = sentfromnmbrarr[1]; } else { var groupednbfrom = sentfromnmbrarr[0]; } var modmessagerec = ''; if (groupedperconv[i].author_displayname) { modmessagerec = ""+ groupedperconv[i].author_displayname + ":" + groupedperconv[i].message; } else { modmessagerec = groupedperconv[i].message; } if (groupedperconv[i].to.indexOf(": ") > -1) { var groupednmbrtopre = groupedperconv[i].to.split(": "); var groupednmbrto = groupednmbrtopre[1]; } else { var groupednmbrto = groupedperconv[i].to; } fromtoNmbrsData.push({ 'author_displayname': authordnm, 'from': groupednbfrom, 'to': groupednmbrto, 'message': modmessagerec, 'date': groupedperconv[i].date, 'status': groupedperconv[i].deliveryreceipt, 'table': groupedperconv[i].table }); } // Remove the duplicates let noDupMsgData = []; $.each(fromtoNmbrsData, function(i, e) { let matchingData = $.grep(noDupMsgData, function(item) { return item.from == e.from && item.to == e.to && item.message == e.message && item.table == 'received' && e.table == 'sent'; }); if (matchingData.length === 0) { noDupMsgData.push(e); } }); let messagesPerNmbr = {}; let msgsNamesPerNmbr = {}; let msgsNmbrsNames = {}; let displayNamesarr = []; let convData = []; for (let n = 0; n < noDupMsgData.length; n++) { if (noDupMsgData[n]['from'] == phNumberTo && noDupMsgData[n]['table'] == 'sent') { convData.push({ 'author_displayname': noDupMsgData[n]['author_displayname'], 'message': noDupMsgData[n]['message'], 'from': noDupMsgData[n]['from'], 'to': noDupMsgData[n]['to'], 'date': noDupMsgData[n]['date'], 'direction': 'sent_from', 'status': (noDupMsgData[n]['status'] == null)? "" : noDupMsgData[n]['status'], 'table': noDupMsgData[n]['table'] }); } else if (noDupMsgData[n]['to'] == phNumberTo && noDupMsgData[n]['table'] == 'sent') { convData.push({ 'author_displayname': noDupMsgData[n]['author_displayname'], 'message': noDupMsgData[n]['message'], 'from': noDupMsgData[n]['from'], 'to': noDupMsgData[n]['to'], 'date': noDupMsgData[n]['date'], 'direction': 'sent_to', 'status': (noDupMsgData[n]['status'] == null)? "" : noDupMsgData[n]['status'], 'table': noDupMsgData[n]['table'] }); } else if (noDupMsgData[n]['from'] == phNumberTo && noDupMsgData[n]['table'] == 'received') { convData.push({ 'author_displayname': noDupMsgData[n]['author_displayname'], 'message': noDupMsgData[n]['message'], 'from': noDupMsgData[n]['from'], 'to': noDupMsgData[n]['to'], 'date': noDupMsgData[n]['date'], 'direction': 'received_from', 'status': (noDupMsgData[n]['status'] == null)? "" : noDupMsgData[n]['status'], 'table': noDupMsgData[n]['table'] }); } else if (noDupMsgData[n]['to'] == phNumberTo && noDupMsgData[n]['table'] == 'received') { convData.push({ 'author_displayname': noDupMsgData[n]['author_displayname'], 'message': noDupMsgData[n]['message'], 'from': noDupMsgData[n]['from'], 'to': noDupMsgData[n]['to'], 'date': noDupMsgData[n]['date'], 'direction': 'received_on', 'status': (noDupMsgData[n]['status'] == null)? "" : noDupMsgData[n]['status'], 'table': noDupMsgData[n]['table'] }); } } // Sort messages by date convData.sort(function(a, b) { return new Date(b.date) - new Date(a.date); }); // Collect the display names of the users that sent messages from the current numbers let selectedNames = []; let displayNames = ''; for (let v = 0; v < convData.length; v++) { if (selectedNames.indexOf(convData[v]['author_displayname']) == -1) { selectedNames.push(convData[v]['author_displayname']); displayNames += "
"+ convData[v]['author_displayname'] +"
"; } } displayNames += "
All messages
"; // Store the display names for the current numbers, to be able to see them later let ctPhNumber = phNumberTo; msgsNamesPerNmbr[ctPhNumber] = displayNames; // Store the messages sent by each user, to be able to see them later when clicking on the user's name for (let h = 0; h < selectedNames.length; h++) { let rowMessageArrpn = []; for (let b = 0; b < convData.length; b++) { if (selectedNames[h] == convData[b]['author_displayname']) { if (convData[b]['direction'] == 'sent_from') { if (convData[b]['status']) { if (convData[b]['status'].indexOf("delivered") > -1 || convData[b]['status'].indexOf("delivery success") > -1 || convData[b]['status'].indexOf("Retrieved") > -1) { if (convData[b]['status'].indexOf("undelivered") > -1) { var sentMsgStatus = ""; } else { var sentMsgStatus = ""; } } else { var sentMsgStatus = ""; } } else { var sentMsgStatus = ""; } rowMessageArrpn.push("
From: "+ convData[b]['from'] +"
To: "+ convData[b]['to'] +"
"+ convData[b]['message'] +"
"+ convData[b]['date'] +"
"+ sentMsgStatus +"
"); } else if (convData[b]['direction'] == 'sent_to') { if (convData[b]['status']) { if (convData[b]['status'].indexOf("delivered") > -1 || convData[b]['status'].indexOf("delivery success") > -1 || convData[b]['status'].indexOf("Retrieved") > -1) { if (convData[b]['status'].indexOf("undelivered") > -1) { var sentMsgStatus = ""; } else { var sentMsgStatus = ""; } } else { var sentMsgStatus = ""; } } else { var sentMsgStatus = ""; } rowMessageArrpn.push("
From: "+ convData[b]['from'] +"
To: "+ convData[b]['to'] +"
"+ convData[b]['message'] +"
"+ convData[b]['date'] +"
"+ sentMsgStatus +"
"); } else if (convData[b]['direction'] == 'received_from') { rowMessageArrpn.push("
From: "+ convData[b]['from'] +"
To: "+ convData[b]['to'] +"
"+ convData[b]['message'] +"
"+ convData[b]['date'] +"
"); } else if (convData[b]['direction'] == 'received_on') { rowMessageArrpn.push("
From: "+ convData[b]['from'] +"
To: "+ convData[b]['to'] +"
"+ convData[b]['message'] +"
"+ convData[b]['date'] +"
"); } } } let crtNmber = phNumberTo; let crtName = selectedNames[h]; msgsNmbrsNames[crtNmber] = msgsNmbrsNames[crtNmber] || {}; msgsNmbrsNames[crtNmber][crtName] = rowMessageArrpn; } // The number of messages to be loaded by default let nmbTblDefault = 50; // If the total number of messages is greater than the default number of messages to display, show the 'Load more messages' button if (convData.length > nmbTblDefault) { $("#loadMoreMsgs").css("display", "block"); var nmbToBeLoaded = nmbTblDefault; } else { var nmbToBeLoaded = convData.length; } let rowMessageArr = []; for (var m = nmbToBeLoaded - 1; m >= 0; m--) { if (convData[m]['direction'] == 'sent_from') { if (convData[m]['status']) { if (convData[m]['status'].indexOf("delivered") > -1 || convData[m]['status'].indexOf("delivery success") > -1 || convData[m]['status'].indexOf("Retrieved") > -1) { if (convData[m]['status'].indexOf("undelivered") > -1) { var sentMsgStatus = ""; } else { var sentMsgStatus = ""; } } else { var sentMsgStatus = ""; } } else { var sentMsgStatus = ""; } rowMessageArr.push("
From: "+ convData[m]['from'] +"
To: "+ convData[m]['to'] +"
"+ convData[m]['message'] +"
"+ convData[m]['date'] +"
"+ sentMsgStatus +"
"); } else if (convData[m]['direction'] == 'sent_to') { if (convData[m]['status']) { if (convData[m]['status'].indexOf("delivered") > -1 || convData[m]['status'].indexOf("delivery success") > -1 || convData[m]['status'].indexOf("Retrieved") > -1) { if (convData[m]['status'].indexOf("undelivered") > -1) { var sentMsgStatus = ""; } else { var sentMsgStatus = ""; } } else { var sentMsgStatus = ""; } } else { var sentMsgStatus = ""; } rowMessageArr.push("
From: "+ convData[m]['from'] +"
To: "+ convData[m]['to'] +"
"+ convData[m]['message'] +"
"+ convData[m]['date'] +"
"+ sentMsgStatus +"
"); } else if (convData[m]['direction'] == 'received_from') { rowMessageArr.push("
From: "+ convData[m]['from'] +"
To: "+ convData[m]['to'] +"
"+ convData[m]['message'] +"
"+ convData[m]['date'] +"
"); } else if (convData[m]['direction'] == 'received_on') { rowMessageArr.push("
From: "+ convData[m]['from'] +"
To: "+ convData[m]['to'] +"
"+ convData[m]['message'] +"
"+ convData[m]['date'] +"
"); } } let convDataPerNmbr = rowMessageArr.join(""); $("#grpdbynamelst").empty(); $("#grpdbynamelst").append(displayNames); $("#msgListRowCell").empty(); $("#msgListRowCell").append(convDataPerNmbr); // Store the messages for the current To number, to be able to see them later let rowMessageArrcpt = []; for (let m = 0; m < convData.length; m++) { if (convData[m]['direction'] == 'sent_from') { if (convData[m]['status']) { if (convData[m]['status'].indexOf("delivered") > -1 || convData[m]['status'].indexOf("delivery success") > -1 || convData[m]['status'].indexOf("Retrieved") > -1) { if (convData[m]['status'].indexOf("undelivered") > -1) { var sentMsgStatus = ""; } else { var sentMsgStatus = ""; } } else { var sentMsgStatus = ""; } } else { var sentMsgStatus = ""; } rowMessageArrcpt.push("
From: "+ convData[m]['from'] +"
To: "+ convData[m]['to'] +"
"+ convData[m]['message'] +"
"+ convData[m]['date'] +"
"+ sentMsgStatus +"
"); } else if (convData[m]['direction'] == 'sent_to') { if (convData[m]['status']) { if (convData[m]['status'].indexOf("delivered") > -1 || convData[m]['status'].indexOf("delivery success") > -1 || convData[m]['status'].indexOf("Retrieved") > -1) { if (convData[m]['status'].indexOf("undelivered") > -1) { var sentMsgStatus = ""; } else { var sentMsgStatus = ""; } } else { var sentMsgStatus = ""; } } else { var sentMsgStatus = ""; } rowMessageArrcpt.push("
From: "+ convData[m]['from'] +"
To: "+ convData[m]['to'] +"
"+ convData[m]['message'] +"
"+ convData[m]['date'] +"
"+ sentMsgStatus +"
"); } else if (convData[m]['direction'] == 'received_from') { rowMessageArrcpt.push("
From: "+ convData[m]['from'] +"
To: "+ convData[m]['to'] +"
"+ convData[m]['message'] +"
"+ convData[m]['date'] +"
"); } else if (convData[m]['direction'] == 'received_on') { rowMessageArrcpt.push("
From: "+ convData[m]['from'] +"
To: "+ convData[m]['to'] +"
"+ convData[m]['message'] +"
"+ convData[m]['date'] +"
"); } } messagesPerNmbr[phNumberTo] = rowMessageArrcpt; // Scroll down to the bottom of the window $("#frmMsgLstWrap").animate({scrollTop:$("#frmMsgLstTbl").prop("scrollHeight")},200); // Load more messages let clickNmb = 0; $("#loadMoreMsgs").click(function() { clickNmb++; var crefnb = (clickNmb + 1) * nmbToBeLoaded; if (crefnb > convData.length) { var nmbmsg = convData.length - 1; $("#loadMoreMsgs").css("display", "none"); } else { var nmbmsg = crefnb - 1; } var rowMessageArrAdd = []; for (let m = nmbmsg; m >= clickNmb * nmbToBeLoaded; m--) { if (convData[m]['direction'] == 'sent_from') { if (convData[m]['status']) { if (convData[m]['status'].indexOf("delivered") > -1 || convData[m]['status'].indexOf("delivery success") > -1 || convData[m]['status'].indexOf("Retrieved") > -1) { if (convData[m]['status'].indexOf("undelivered") > -1) { var sentMsgStatus = ""; } else { var sentMsgStatus = ""; } } else { var sentMsgStatus = ""; } } else { var sentMsgStatus = ""; } rowMessageArrAdd.push("
From: "+ convData[m]['from'] +"
To: "+ convData[m]['to'] +"
"+ convData[m]['message'] +"
"+ convData[m]['date'] +"
"+ sentMsgStatus +"
"); } else if (convData[m]['direction'] == 'sent_to') { if (convData[m]['status']) { if (convData[m]['status'].indexOf("delivered") > -1 || convData[m]['status'].indexOf("delivery success") > -1 || convData[m]['status'].indexOf("Retrieved") > -1) { if (convData[m]['status'].indexOf("undelivered") > -1) { var sentMsgStatus = ""; } else { var sentMsgStatus = ""; } } else { var sentMsgStatus = ""; } } else { var sentMsgStatus = ""; } rowMessageArrAdd.push("
From: "+ convData[m]['from'] +"
To: "+ convData[m]['to'] +"
"+ convData[m]['message'] +"
"+ convData[m]['date'] +"
"+ sentMsgStatus +"
"); } else if (convData[m]['direction'] == 'received_from') { rowMessageArrAdd.push("
From: "+ convData[m]['from'] +"
To: "+ convData[m]['to'] +"
"+ convData[m]['message'] +"
"+ convData[m]['date'] +"
"); } else if (convData[m]['direction'] == 'received_on') { rowMessageArrAdd.push("
From: "+ convData[m]['from'] +"
To: "+ convData[m]['to'] +"
"+ convData[m]['message'] +"
"+ convData[m]['date'] +"
"); } } let convDataPerNmbrad = rowMessageArrAdd.join(""); let scrlheight = $("#msgListRowCell").height(); $("#msgListRowCell").prepend(convDataPerNmbrad); $("#frmMsgLstWrap").animate({scrollTop: $("#msgListRowCell").height() - scrlheight}, 0); }); // Show the messages sent by each user whose name is clicked $('[id*="diplNm_"]').click(function() { let crntNmbr = $(this).attr("id").split("_")[1]; let crntDisName = $(this).attr("name"); $("#loadMoreMsgs").css("display", "none"); let convDataprn = []; $.each(msgsNmbrsNames[crntNmbr][crntDisName], function(index, item) { convDataprn.push(item); }); // If the total number of messages is greater than the default number of messages to display, show the 'Load more messages' button if (convDataprn.length > nmbTblDefault) { $("#loadMoreMsgsusr").css("display", "block"); let nmbToBeLoaded = nmbTblDefault; } else { $("#loadMoreMsgsusr").css("display", "none"); let nmbToBeLoaded = convDataprn.length; } let rowMessageArrprnst = []; for (let n = nmbToBeLoaded - 1; n >= 0; n--) { rowMessageArrprnst.push(convDataprn[n]); } let convDataPerNmbrprnst = rowMessageArrprnst.join(""); $("#msgListRowCell").empty(); $("#msgListRowCell").append(convDataPerNmbrprnst); // Scroll down to the bottom of the window $("#frmMsgLstWrap").animate({scrollTop:$("#frmMsgLstTbl").prop("scrollHeight")},200); // Load more messages let clckNb = 0; $("#loadMoreMsgsusr").unbind("click"); $("#loadMoreMsgsusr").click(function() { clckNb++; var crefnb = (clckNb + 1) * nmbToBeLoaded; $("#loadMoreMsgs").css("display", "none"); if (crefnb > convDataprn.length) { var nmbmsg = convDataprn.length - 1; $("#loadMoreMsgsusr").css("display", "none"); } else { var nmbmsg = crefnb - 1; $("#loadMoreMsgsusr").css("display", "block"); } var rowMessageArrAddst = []; for (var q = nmbmsg; q >= clckNb * nmbToBeLoaded; q--) { rowMessageArrAddst.push(convDataprn[q]); } var convDataPerNmbradst = rowMessageArrAddst.join(""); var scrlheight = $("#msgListRowCell").height(); $("#msgListRowCell").prepend(convDataPerNmbradst); $("#frmMsgLstWrap").animate({scrollTop: $("#msgListRowCell").height() - scrlheight}, 0); }); $(".dispNameList").each(function() { $(this).css("color", "#0a559e"); }); $("#diplNmAllMsgcv").css("color", "#04957b"); $(this).css("color", "#1b8efe"); }); // Show again all the messages sent/received to/from the clicked number $("#diplNmAllMsgcv").click(function() { $("#loadMoreMsgsusr").css("display", "none"); let convDataprn = []; $.each(messagesPerNmbr[phNumberTo], function(index, item) { convDataprn.push(item); }); // If the total number of messages is greater than the default number of messages to display, show the 'Load more messages' button if (convDataprn.length > nmbTblDefault) { $("#loadMoreMsgs").css("display", "block"); let nmbToBeLoaded = nmbTblDefault; } else { $("#loadMoreMsgs").css("display", "none"); let nmbToBeLoaded = convDataprn.length; } let rowMessageArrprnst = []; for (let n = nmbToBeLoaded - 1; n >= 0; n--) { rowMessageArrprnst.push(convDataprn[n]); } let convDataPerNmbrprnst = rowMessageArrprnst.join(""); $("#msgListRowCell").empty(); $("#msgListRowCell").append(convDataPerNmbrprnst); // Scroll down to the bottom of the window $("#frmMsgLstWrap").animate({scrollTop:$("#frmMsgLstTbl").prop("scrollHeight")},200); // Load more messages let clckNb = 0; $("#loadMoreMsgs").unbind("click"); $("#loadMoreMsgs").click(function() { clckNb++; var crefnb = (clckNb + 1) * nmbToBeLoaded; $("#loadMoreMsgsusr").css("display", "none"); if (crefnb > convDataprn.length) { var nmbmsg = convDataprn.length - 1; $("#loadMoreMsgs").css("display", "none"); } else { var nmbmsg = crefnb - 1; $("#loadMoreMsgs").css("display", "block"); } var rowMessageArrAddst = []; for (var q = nmbmsg; q >= clckNb * nmbToBeLoaded; q--) { rowMessageArrAddst.push(convDataprn[q]); } var convDataPerNmbradst = rowMessageArrAddst.join(""); var scrlheight = $("#msgListRowCell").height(); $("#msgListRowCell").prepend(convDataPerNmbradst); $("#frmMsgLstWrap").animate({scrollTop: $("#msgListRowCell").height() - scrlheight}, 0); }); $(".dispNameList").each(function() { $(this).css("color", "#0a559e"); }); $("#diplNmAllMsgcv").css("color", "#04957b"); $(this).css("color", "#04c6a4"); }); // Show the scroll-up arrow $("#frmMsgLstWrap").scroll(function() { if ($(this).scrollTop() > 900) { $('#upArrowSmall').fadeIn(); } else { $('#upArrowSmall').fadeOut(); } }); $("#upArrowSmall").unbind("click"); $("#upArrowSmall").click(function() { $("#frmMsgLstWrap").animate({scrollTop : 0},400); }); // Download MMS files when clicking on their URLs $('[id^="mmsTblUrl-"]').on('click', function(evt) { var clckedUrl = $(this).text(); var flNamearr = clckedUrl.split("/"); var flName = flNamearr.reverse()[0]; confirmAlert("Download this file only if you trust the sender and the domain of the URL."); $("#confirmOk").click(function() { $("#alertMsgOverlay").remove(); $("#alertConfMessage").remove(); var mmsLink = document.createElement("a"); mmsLink.setAttribute('href', clckedUrl); mmsLink.setAttribute('download', flName); mmsLink.setAttribute('target', '_blank'); document.body.appendChild(mmsLink); mmsLink.click(); mmsLink.remove(); }); $("#confirmCancel").click(function() { $("#alertMsgOverlay").remove(); $("#alertConfMessage").remove(); }); }); }, error: function() { showAlert("Error while attempting to get message data from the database!"); $('#listAllMsgsConv').removeClass('icon-loading'); } }); } getMsgsForNumbersSec(phNumberFrom, phNumberTo); $("#refreshMsgsConv").click(function() { getMsgsForNumbersSec(phNumberFrom, phNumberTo); setTimeout(function() { $("#diplNmAllMsgcv").click(); }, 1000); }); } $('[id^="showMsgConv-"]').click(function() { let ctrwnmbr = $(this).attr("id").replace("showMsgConv-", ""); let phNumberFrom = $("#frmNmbr-"+ ctrwnmbr).text().split(": ")[1]; let phNumberTo = $("#toNmbr-"+ ctrwnmbr).text(); showSentMsgPerConv(phNumberFrom, phNumberTo); }); // Show the pop-up window that lists all the messages sent/received to/from a phone number function showMsgPerNmbr(clckPhNumber) { var allfrmtomsg = "
"; allfrmtomsg += "
"; allfrmtomsg += ""; allfrmtomsg += "
Messages sent/received to/from "+ clckPhNumber +"
"; allfrmtomsg += "
"; allfrmtomsg += ""; allfrmtomsg += ""; allfrmtomsg += "
Load more messages
Load more messages
"; allfrmtomsg += "
"; allfrmtomsg += "
From:
To: "+ clckPhNumber +"
"; allfrmtomsg += "
Send SMS
"; allfrmtomsg += "
"; allfrmtomsg += "
"; allfrmtomsg += "
"; $("#content").append("
"); $("#content").append(allfrmtomsg); var topDist = parseInt((window.innerHeight / 2).toFixed(2) - 340) +"px"; var leftDist = parseInt((window.innerWidth / 2).toFixed(2) - 300) +"px"; $("#listAllMsgsFromTo").css({ "top" : topDist, "left" : leftDist }); $("#closeFrmMsgWindow").click(function() { $("#listAllMsgsFromTo").remove(); $("#recTblOverlay").remove(); }); $("#recTblOverlay").click(function() { $("#listAllMsgsFromTo").remove(); $("#recTblOverlay").remove(); }); // Expand the window when clicking on the arrow, to be able to send a reply message $("#expandWindowRpl").unbind("click"); $("#expandWindowRpl").click(function() { if ($(this).attr('src') == '/' + ctappdir + '/sms_relentless/img/arrowDown.svg') { $("#sendMsgReply").css("display", "block"); if ($(window).width() > 600) { $("#listAllMsgsFromTo").css("height", "618px"); } else { $("#listAllMsgsFromTo").css("height", parseInt($(window).height() - 32) + "px"); $("#frmMsgLstWrap").css("height", parseInt($(window).height() - 304) + "px"); } $(this).attr('src', '/' + ctappdir + '/sms_relentless/img/arrowUp.svg'); $(this).attr('title', 'Collapse'); } else { $("#sendMsgReply").css("display", "none"); if ($(window).width() > 600) { $("#listAllMsgsFromTo").css("height", "490px"); } else { $("#listAllMsgsFromTo").css("height", parseInt($(window).height() - 120) + "px"); $("#frmMsgLstWrap").css("height", parseInt($(window).height() - 232) + "px"); } $(this).attr('src', '/' + ctappdir + '/sms_relentless/img/arrowDown.svg'); $(this).attr('title', 'Expand to send a reply'); } }); // Send a message from the 'conversation' window $("#sendMsgConvBtn").click(function() { $("#sendMsgConv,#sendMsgConvBtn").addClass('icon-loading'); var msgToSend = $("#sendMsgConvText").val(); var selectedid = $("#selectFromNbConv").val(); var toNumber = $("#toNmbrConv").text(); var receiversNumbers = [toNumber]; if (selectedid != '') { var sendersplit = selectedid.split(":"); var providercap = sendersplit[0]; var provsec = sendersplit[1]; if (/[a-zA-Z]/.test(provsec)) { var alphanumcheck = true; } else { var alphanumcheck = false; } if (providercap == 'Tx' && alphanumcheck == false) { var senderproc = selectedid.replace(/[^0-9]/g, ""); var selectedsender = "+" + senderproc; var providerUsed = "telnyx"; var relbaseUrl = OC.generateUrl("/apps/sms_relentless/user/sendsmstel"); } else if (providercap == 'Pl' && alphanumcheck == false) { var selectedsender = selectedid.replace(/[^0-9]/g, ""); var providerUsed = "plivo"; var relbaseUrl = OC.generateUrl("/apps/sms_relentless/user/sendsmsnex"); } else if (providercap == 'Tw' && alphanumcheck == false) { var senderproc = selectedid.replace(/[^0-9]/g, ""); var selectedsender = "+" + senderproc; var providerUsed = "twilio"; var relbaseUrl = OC.generateUrl("/apps/sms_relentless/user/sendsmstwil"); } else if (providercap == 'Fl' && alphanumcheck == false) { var senderproc = selectedid.replace(/[^0-9]/g, ""); var selectedsender = "+" + senderproc; var providerUsed = "flowroute"; var relbaseUrl = OC.generateUrl("/apps/sms_relentless/user/sendsmsflow"); } else if (providercap == 'Tx' && alphanumcheck == true) { var selectedsender = provsec; var providerUsed = "telnyx"; var relbaseUrl = OC.generateUrl("/apps/sms_relentless/user/sendsmstel"); } else if (providercap == 'Pl' && alphanumcheck == true) { var selectedsender = provsec; var providerUsed = "plivo"; var relbaseUrl = OC.generateUrl("/apps/sms_relentless/user/sendsmsnex"); } else if (providercap == 'Tw' && alphanumcheck == true) { var selectedsender = provsec; var providerUsed = "twilio"; var relbaseUrl = OC.generateUrl("/apps/sms_relentless/user/sendsmstwil"); } else if (providercap == 'Fl' && alphanumcheck == true) { var selectedsender = provsec; var providerUsed = "flowroute"; var relbaseUrl = OC.generateUrl("/apps/sms_relentless/user/sendsmsflow"); } var uploadedtomms = []; if (msgToSend != '') { $.ajax({ url: relbaseUrl + '/' + userid, type: "POST", data: { receiversPhoneNbs: receiversNumbers, fromsender: selectedsender, waitinterval: 1000, sentsmstext: msgToSend, ismms: 0, mmsfiles: uploadedtomms }, success: function(displayname) { var tzdate = new Date(); var presDatest = new Date(tzdate.getTime() - (tzdate.getTimezoneOffset() * 60000)).toJSON(); var presDatedb = presDatest.split(".")[0]; var presDatesc = presDatedb.split("T"); var presDate = presDatesc[0] +" "+ presDatesc[1]; var sentMessageStatus = ''; if (displayname) { var msgToSendproc = ""+ displayname + ":" + msgToSend; } else { var msgToSendproc = msgToSend; } $("#msgListRowCell").append("
From: "+ selectedsender +"
To: "+ receiversNumbers[0] +"
"+ msgToSendproc +"
"+ presDate +"
"+ sentMessageStatus +"
"); // Scroll down to the bottom of the window $("#frmMsgLstWrap").animate({scrollTop:$("#frmMsgLstTbl").prop("scrollHeight")},200); $("#sendMsgConv,#sendMsgConvBtn").removeClass('icon-loading'); }, error: function() { showAlert("Error while sending the message. You can check your Nextcloud log to find out more about this issue."); $("#sendMsgConv,#sendMsgConvBtn").removeClass('icon-loading'); } }); } else { showAlert("Please enter a message in the text box!"); $("#sendMsgConv,#sendMsgConvBtn").removeClass('icon-loading'); } } else { showAlert("Please choose a Sender ID from the 'From' drop-down list!"); $("#sendMsgConv,#sendMsgConvBtn").removeClass('icon-loading'); } }); // Make the window draggable function makeMgrWndDraggable(e) { window.pmdragging = {}; pmdragging.pageX0 = e.pageX; pmdragging.pageY0 = e.pageY; pmdragging.elem = $("#listAllMsgsFromTo"); pmdragging.offset0 = $("#listAllMsgsFromTo").offset(); function handle_dragging(e) { var left = pmdragging.offset0.left + (e.pageX - pmdragging.pageX0); var top = pmdragging.offset0.top + (e.pageY - pmdragging.pageY0); $(pmdragging.elem).offset({top: top, left: left}); } function handle_mouseup(e) { $('body').off('mousemove', handle_dragging).off('mouseup', handle_mouseup); } $('body').on('mouseup', handle_mouseup).on('mousemove', handle_dragging); } $("#draglstMsgmWindow").mousedown(makeMgrWndDraggable); $("#draglstMsgmWindowsc").mousedown(makeMgrWndDraggable); // Append the available phone numbers to the From drop-down list var availPhoneNmbrs = []; $("#currentsmsnmbrs .optselectsmsnb").each(function() { var crtphnmbr = $(this).attr("value"); if (crtphnmbr != "") { availPhoneNmbrs.push(crtphnmbr); } }); if (availPhoneNmbrs.length > 0) { var avphopt = ""; for (let d = 0; d < availPhoneNmbrs.length; d++) { avphopt += ""; } $("#selectFromNbConv").append(avphopt); } else { $("#selectFromNbConv").append(""); } // Get the sent/received messages for the current phone number, from the database function getMsgsPerNmbrSec(clckPhNumber) { var getGroupedPnUrl = OC.generateUrl("/apps/sms_relentless/user/getgroupedpernumber"); $('#listAllMsgsFromTo').addClass('icon-loading'); var totalPhNmbrs = 0; $.ajax({ method: 'POST', url: getGroupedPnUrl + '/' + userid, contentType: 'application/json', data: JSON.stringify({ "phoneNumber": clckPhNumber }), success: function(groupedpernb) { $('#listAllMsgsFromTo').removeClass('icon-loading'); var fromtoNmbrsData = []; for (var i = 0; i < groupedpernb.length; i++) { if (groupedpernb[i].author_displayname) { var authordnm = groupedpernb[i].author_displayname; } else { var authordnm = ''; } var sentfromnmbrarr = groupedpernb[i].from.split(": "); if (sentfromnmbrarr[1]) { var groupednbfrom = sentfromnmbrarr[1]; } else { var groupednbfrom = sentfromnmbrarr[0]; } var modmessagesent = ''; if (groupedpernb[i].author_displayname) { modmessagesent = ""+ groupedpernb[i].author_displayname + ":" + groupedpernb[i].message; } else { modmessagesent = groupedpernb[i].message; } if (groupedpernb[i].to.indexOf(": ") > -1) { var groupednmbrtopre = groupedpernb[i].to.split(": "); var groupednmbrto = groupednmbrtopre[1]; } else { var groupednmbrto = groupedpernb[i].to; } fromtoNmbrsData.push({ 'author_displayname': authordnm, 'from': groupednbfrom, 'to': groupednmbrto, 'message': modmessagesent, 'date': groupedpernb[i].date, 'status': groupedpernb[i].deliveryreceipt, 'table': groupedpernb[i].table }); } // Remove the duplicates var noDupMsgData = []; $.each(fromtoNmbrsData, function(i, e) { var matchingData = $.grep(noDupMsgData, function(item) { return item.from == e.from && item.to == e.to && item.message == e.message && item.table == 'received' && e.table == 'sent'; }); if (matchingData.length === 0) { noDupMsgData.push(e); } }); var messagesPerNmbr = {}; var msgsNamesPerNmbr = {}; var msgsNmbrsNames = {}; var displayNamesarr = []; var convData = []; for (var n = 0; n < noDupMsgData.length; n++) { if (noDupMsgData[n]['from'] == clckPhNumber && noDupMsgData[n]['table'] == 'sent') { convData.push({ 'author_displayname': noDupMsgData[n]['author_displayname'], 'message': noDupMsgData[n]['message'], 'from': noDupMsgData[n]['from'], 'to': noDupMsgData[n]['to'], 'date': noDupMsgData[n]['date'], 'direction': 'sent_from', 'status': (noDupMsgData[n]['status'] == null)? "" : noDupMsgData[n]['status'], 'table': noDupMsgData[n]['table'] }); } else if (noDupMsgData[n]['to'] == clckPhNumber && noDupMsgData[n]['table'] == 'sent') { convData.push({ 'author_displayname': noDupMsgData[n]['author_displayname'], 'message': noDupMsgData[n]['message'], 'from': noDupMsgData[n]['from'], 'to': noDupMsgData[n]['to'], 'date': noDupMsgData[n]['date'], 'direction': 'sent_to', 'status': (noDupMsgData[n]['status'] == null)? "" : noDupMsgData[n]['status'], 'table': noDupMsgData[n]['table'] }); } else if (noDupMsgData[n]['from'] == clckPhNumber && noDupMsgData[n]['table'] == 'received') { convData.push({ 'author_displayname': noDupMsgData[n]['author_displayname'], 'message': noDupMsgData[n]['message'], 'from': noDupMsgData[n]['from'], 'to': noDupMsgData[n]['to'], 'date': noDupMsgData[n]['date'], 'direction': 'received_from', 'status': (noDupMsgData[n]['status'] == null)? "" : noDupMsgData[n]['status'], 'table': noDupMsgData[n]['table'] }); } else if (noDupMsgData[n]['to'] == clckPhNumber && noDupMsgData[n]['table'] == 'received') { convData.push({ 'author_displayname': noDupMsgData[n]['author_displayname'], 'message': noDupMsgData[n]['message'], 'from': noDupMsgData[n]['from'], 'to': noDupMsgData[n]['to'], 'date': noDupMsgData[n]['date'], 'direction': 'received_on', 'status': (noDupMsgData[n]['status'] == null)? "" : noDupMsgData[n]['status'], 'table': noDupMsgData[n]['table'] }); } } // Sort messages by date convData.sort(function(a, b) { return new Date(b.date) - new Date(a.date); }); // Collect the display names of the users that sent messages from the current number var selectedNames = []; var displayNames = ''; for (var v = 0; v < convData.length; v++) { if (selectedNames.indexOf(convData[v]['author_displayname']) == -1) { selectedNames.push(convData[v]['author_displayname']); displayNames += "
"+ convData[v]['author_displayname'] +"
"; } } displayNames += "
"+ clckPhNumber +"
"; // Store the display names for the current number, to be able to see them later var ctPhNumber = clckPhNumber; msgsNamesPerNmbr[ctPhNumber] = displayNames; // Store the messages sent by each user, to be able to see them later when clicking on the user's name for (var h = 0; h < selectedNames.length; h++) { var rowMessageArrpn = []; for (var b = 0; b < convData.length; b++) { if (selectedNames[h] == convData[b]['author_displayname']) { if (convData[b]['direction'] == 'sent_from') { if (convData[b]['status']) { if (convData[b]['status'].indexOf("delivered") > -1 || convData[b]['status'].indexOf("delivery success") > -1 || convData[b]['status'].indexOf("Retrieved") > -1) { if (convData[b]['status'].indexOf("undelivered") > -1) { var sentMsgStatus = ""; } else { var sentMsgStatus = ""; } } else { var sentMsgStatus = ""; } } else { var sentMsgStatus = ""; } rowMessageArrpn.push("
From: "+ convData[b]['from'] +"
To: "+ convData[b]['to'] +"
"+ convData[b]['message'] +"
"+ convData[b]['date'] +"
"+ sentMsgStatus +"
"); } else if (convData[b]['direction'] == 'sent_to') { if (convData[b]['status']) { if (convData[b]['status'].indexOf("delivered") > -1 || convData[b]['status'].indexOf("delivery success") > -1 || convData[b]['status'].indexOf("Retrieved") > -1) { if (convData[b]['status'].indexOf("undelivered") > -1) { var sentMsgStatus = ""; } else { var sentMsgStatus = ""; } } else { var sentMsgStatus = ""; } } else { var sentMsgStatus = ""; } rowMessageArrpn.push("
From: "+ convData[b]['from'] +"
To: "+ convData[b]['to'] +"
"+ convData[b]['message'] +"
"+ convData[b]['date'] +"
"+ sentMsgStatus +"
"); } else if (convData[b]['direction'] == 'received_from') { rowMessageArrpn.push("
From: "+ convData[b]['from'] +"
To: "+ convData[b]['to'] +"
"+ convData[b]['message'] +"
"+ convData[b]['date'] +"
"); } else if (convData[b]['direction'] == 'received_on') { rowMessageArrpn.push("
From: "+ convData[b]['from'] +"
To: "+ convData[b]['to'] +"
"+ convData[b]['message'] +"
"+ convData[b]['date'] +"
"); } } } var crtNmber = clckPhNumber; var crtName = selectedNames[h]; msgsNmbrsNames[crtNmber] = msgsNmbrsNames[crtNmber] || {}; msgsNmbrsNames[crtNmber][crtName] = rowMessageArrpn; } // The number of messages to be loaded by default var nmbTblDefault = 50; // If the total number of messages is greater than the default number of messages to display, show the 'Load more messages' button if (convData.length > nmbTblDefault) { $("#loadMoreMsgs").css("display", "block"); var nmbToBeLoaded = nmbTblDefault; } else { var nmbToBeLoaded = convData.length; } var rowMessageArr = []; for (var m = nmbToBeLoaded - 1; m >= 0; m--) { if (convData[m]['direction'] == 'sent_from') { if (convData[m]['status']) { if (convData[m]['status'].indexOf("delivered") > -1 || convData[m]['status'].indexOf("delivery success") > -1 || convData[m]['status'].indexOf("Retrieved") > -1) { if (convData[m]['status'].indexOf("undelivered") > -1) { var sentMsgStatus = ""; } else { var sentMsgStatus = ""; } } else { var sentMsgStatus = ""; } } else { var sentMsgStatus = ""; } rowMessageArr.push("
From: "+ convData[m]['from'] +"
To: "+ convData[m]['to'] +"
"+ convData[m]['message'] +"
"+ convData[m]['date'] +"
"+ sentMsgStatus +"
"); } else if (convData[m]['direction'] == 'sent_to') { if (convData[m]['status']) { if (convData[m]['status'].indexOf("delivered") > -1 || convData[m]['status'].indexOf("delivery success") > -1 || convData[m]['status'].indexOf("Retrieved") > -1) { if (convData[m]['status'].indexOf("undelivered") > -1) { var sentMsgStatus = ""; } else { var sentMsgStatus = ""; } } else { var sentMsgStatus = ""; } } else { var sentMsgStatus = ""; } rowMessageArr.push("
From: "+ convData[m]['from'] +"
To: "+ convData[m]['to'] +"
"+ convData[m]['message'] +"
"+ convData[m]['date'] +"
"+ sentMsgStatus +"
"); } else if (convData[m]['direction'] == 'received_from') { rowMessageArr.push("
From: "+ convData[m]['from'] +"
To: "+ convData[m]['to'] +"
"+ convData[m]['message'] +"
"+ convData[m]['date'] +"
"); } else if (convData[m]['direction'] == 'received_on') { rowMessageArr.push("
From: "+ convData[m]['from'] +"
To: "+ convData[m]['to'] +"
"+ convData[m]['message'] +"
"+ convData[m]['date'] +"
"); } } var convDataPerNmbr = rowMessageArr.join(""); $("#grpdbynamelst").empty(); $("#grpdbynamelst").append(displayNames); $("#msgListRowCell").empty(); $("#msgListRowCell").append(convDataPerNmbr); // Store the messages for the current number, to be able to see them later, when clicking on the number var rowMessageArrcpt = []; for (var m = 0; m < convData.length; m++) { if (convData[m]['direction'] == 'sent_from') { if (convData[m]['status']) { if (convData[m]['status'].indexOf("delivered") > -1 || convData[m]['status'].indexOf("delivery success") > -1 || convData[m]['status'].indexOf("Retrieved") > -1) { if (convData[m]['status'].indexOf("undelivered") > -1) { var sentMsgStatus = ""; } else { var sentMsgStatus = ""; } } else { var sentMsgStatus = ""; } } else { var sentMsgStatus = ""; } rowMessageArrcpt.push("
From: "+ convData[m]['from'] +"
To: "+ convData[m]['to'] +"
"+ convData[m]['message'] +"
"+ convData[m]['date'] +"
"+ sentMsgStatus +"
"); } else if (convData[m]['direction'] == 'sent_to') { if (convData[m]['status']) { if (convData[m]['status'].indexOf("delivered") > -1 || convData[m]['status'].indexOf("delivery success") > -1 || convData[m]['status'].indexOf("Retrieved") > -1) { if (convData[m]['status'].indexOf("undelivered") > -1) { var sentMsgStatus = ""; } else { var sentMsgStatus = ""; } } else { var sentMsgStatus = ""; } } else { var sentMsgStatus = ""; } rowMessageArrcpt.push("
From: "+ convData[m]['from'] +"
To: "+ convData[m]['to'] +"
"+ convData[m]['message'] +"
"+ convData[m]['date'] +"
"+ sentMsgStatus +"
"); } else if (convData[m]['direction'] == 'received_from') { rowMessageArrcpt.push("
From: "+ convData[m]['from'] +"
To: "+ convData[m]['to'] +"
"+ convData[m]['message'] +"
"+ convData[m]['date'] +"
"); } else if (convData[m]['direction'] == 'received_on') { rowMessageArrcpt.push("
From: "+ convData[m]['from'] +"
To: "+ convData[m]['to'] +"
"+ convData[m]['message'] +"
"+ convData[m]['date'] +"
"); } } messagesPerNmbr[clckPhNumber] = rowMessageArrcpt; // Scroll down to the bottom of the window $("#frmMsgLstWrap").animate({scrollTop:$("#frmMsgLstTbl").prop("scrollHeight")},200); // Load more messages var clickNmb = 0; $("#loadMoreMsgs").click(function() { clickNmb++; var crefnb = (clickNmb + 1) * nmbToBeLoaded; if (crefnb > convData.length) { var nmbmsg = convData.length - 1; $("#loadMoreMsgs").css("display", "none"); } else { var nmbmsg = crefnb - 1; } var rowMessageArrAdd = []; for (var m = nmbmsg; m >= clickNmb * nmbToBeLoaded; m--) { if (convData[m]['direction'] == 'sent_from') { if (convData[m]['status']) { if (convData[m]['status'].indexOf("delivered") > -1 || convData[m]['status'].indexOf("delivery success") > -1 || convData[m]['status'].indexOf("Retrieved") > -1) { if (convData[m]['status'].indexOf("undelivered") > -1) { var sentMsgStatus = ""; } else { var sentMsgStatus = ""; } } else { var sentMsgStatus = ""; } } else { var sentMsgStatus = ""; } rowMessageArrAdd.push("
From: "+ convData[m]['from'] +"
To: "+ convData[m]['to'] +"
"+ convData[m]['message'] +"
"+ convData[m]['date'] +"
"+ sentMsgStatus +"
"); } else if (convData[m]['direction'] == 'sent_to') { if (convData[m]['status']) { if (convData[m]['status'].indexOf("delivered") > -1 || convData[m]['status'].indexOf("delivery success") > -1 || convData[m]['status'].indexOf("Retrieved") > -1) { if (convData[m]['status'].indexOf("undelivered") > -1) { var sentMsgStatus = ""; } else { var sentMsgStatus = ""; } } else { var sentMsgStatus = ""; } } else { var sentMsgStatus = ""; } rowMessageArrAdd.push("
From: "+ convData[m]['from'] +"
To: "+ convData[m]['to'] +"
"+ convData[m]['message'] +"
"+ convData[m]['date'] +"
"+ sentMsgStatus +"
"); } else if (convData[m]['direction'] == 'received_from') { rowMessageArrAdd.push("
From: "+ convData[m]['from'] +"
To: "+ convData[m]['to'] +"
"+ convData[m]['message'] +"
"+ convData[m]['date'] +"
"); } else if (convData[m]['direction'] == 'received_on') { rowMessageArrAdd.push("
From: "+ convData[m]['from'] +"
To: "+ convData[m]['to'] +"
"+ convData[m]['message'] +"
"+ convData[m]['date'] +"
"); } } var convDataPerNmbrad = rowMessageArrAdd.join(""); var scrlheight = $("#msgListRowCell").height(); $("#msgListRowCell").prepend(convDataPerNmbrad); $("#frmMsgLstWrap").animate({scrollTop: $("#msgListRowCell").height() - scrlheight}, 0); }); // Show the messages sent by each user whose name is clicked $('[id*="diplNm_"]').click(function() { var crntNmbr = $(this).attr("id").split("_")[1]; var crntDisName = $(this).attr("name"); $("#loadMoreMsgs").css("display", "none"); var convDataprn = []; $.each(msgsNmbrsNames[crntNmbr][crntDisName], function(index, item) { convDataprn.push(item); }); // If the total number of messages is greater than the default number of messages to display, show the 'Load more messages' button if (convDataprn.length > nmbTblDefault) { $("#loadMoreMsgsusr").css("display", "block"); var nmbToBeLoaded = nmbTblDefault; } else { $("#loadMoreMsgsusr").css("display", "none"); var nmbToBeLoaded = convDataprn.length; } var rowMessageArrprnst = []; for (var n = nmbToBeLoaded - 1; n >= 0; n--) { rowMessageArrprnst.push(convDataprn[n]); } var convDataPerNmbrprnst = rowMessageArrprnst.join(""); $("#msgListRowCell").empty(); $("#msgListRowCell").append(convDataPerNmbrprnst); // Scroll down to the bottom of the window $("#frmMsgLstWrap").animate({scrollTop:$("#frmMsgLstTbl").prop("scrollHeight")},200); // Load more messages var clckNb = 0; $("#loadMoreMsgsusr").unbind("click"); $("#loadMoreMsgsusr").click(function() { clckNb++; var crefnb = (clckNb + 1) * nmbToBeLoaded; $("#loadMoreMsgs").css("display", "none"); if (crefnb > convDataprn.length) { var nmbmsg = convDataprn.length - 1; $("#loadMoreMsgsusr").css("display", "none"); } else { var nmbmsg = crefnb - 1; $("#loadMoreMsgsusr").css("display", "block"); } var rowMessageArrAddst = []; for (var q = nmbmsg; q >= clckNb * nmbToBeLoaded; q--) { rowMessageArrAddst.push(convDataprn[q]); } var convDataPerNmbradst = rowMessageArrAddst.join(""); var scrlheight = $("#msgListRowCell").height(); $("#msgListRowCell").prepend(convDataPerNmbradst); $("#frmMsgLstWrap").animate({scrollTop: $("#msgListRowCell").height() - scrlheight}, 0); }); $(".dispNameList").each(function() { $(this).css("color", "#0a559e"); }); $("#diplNmAllMsg").css("color", "#04957b"); $(this).css("color", "#1b8efe"); }); // Show again all the messages sent/received to/from the clicked number $("#diplNmAllMsg").click(function() { $("#loadMoreMsgsusr").css("display", "none"); var convDataprn = []; $.each(messagesPerNmbr[clckPhNumber], function(index, item) { convDataprn.push(item); }); // If the total number of messages is greater than the default number of messages to display, show the 'Load more messages' button if (convDataprn.length > nmbTblDefault) { $("#loadMoreMsgs").css("display", "block"); var nmbToBeLoaded = nmbTblDefault; } else { $("#loadMoreMsgs").css("display", "none"); var nmbToBeLoaded = convDataprn.length; } var rowMessageArrprnst = []; for (var n = nmbToBeLoaded - 1; n >= 0; n--) { rowMessageArrprnst.push(convDataprn[n]); } var convDataPerNmbrprnst = rowMessageArrprnst.join(""); $("#msgListRowCell").empty(); $("#msgListRowCell").append(convDataPerNmbrprnst); // Scroll down to the bottom of the window $("#frmMsgLstWrap").animate({scrollTop:$("#frmMsgLstTbl").prop("scrollHeight")},200); // Load more messages var clckNb = 0; $("#loadMoreMsgs").unbind("click"); $("#loadMoreMsgs").click(function() { clckNb++; var crefnb = (clckNb + 1) * nmbToBeLoaded; $("#loadMoreMsgsusr").css("display", "none"); if (crefnb > convDataprn.length) { var nmbmsg = convDataprn.length - 1; $("#loadMoreMsgs").css("display", "none"); } else { var nmbmsg = crefnb - 1; $("#loadMoreMsgs").css("display", "block"); } var rowMessageArrAddst = []; for (var q = nmbmsg; q >= clckNb * nmbToBeLoaded; q--) { rowMessageArrAddst.push(convDataprn[q]); } var convDataPerNmbradst = rowMessageArrAddst.join(""); var scrlheight = $("#msgListRowCell").height(); $("#msgListRowCell").prepend(convDataPerNmbradst); $("#frmMsgLstWrap").animate({scrollTop: $("#msgListRowCell").height() - scrlheight}, 0); }); $(".dispNameList").each(function() { $(this).css("color", "#0a559e"); }); $("#diplNmAllMsg").css("color", "#04957b"); $(this).css("color", "#04c6a4"); }); // Show the scroll-up arrow $("#frmMsgLstWrap").scroll(function() { if ($(this).scrollTop() > 900) { $('#upArrowSmall').fadeIn(); } else { $('#upArrowSmall').fadeOut(); } }); $("#upArrowSmall").unbind("click"); $("#upArrowSmall").click(function() { $("#frmMsgLstWrap").animate({scrollTop : 0},400); }); // Download MMS files when clicking on their URLs $('[id^="mmsTblUrl-"]').on('click', function(evt) { var clckedUrl = $(this).text(); var flNamearr = clckedUrl.split("/"); var flName = flNamearr.reverse()[0]; confirmAlert("Download this file only if you trust the sender and the domain of the URL."); $("#confirmOk").click(function() { $("#alertMsgOverlay").remove(); $("#alertConfMessage").remove(); var mmsLink = document.createElement("a"); mmsLink.setAttribute('href', clckedUrl); mmsLink.setAttribute('download', flName); mmsLink.setAttribute('target', '_blank'); document.body.appendChild(mmsLink); mmsLink.click(); mmsLink.remove(); }); $("#confirmCancel").click(function() { $("#alertMsgOverlay").remove(); $("#alertConfMessage").remove(); }); }); }, error: function() { showAlert("Error while attempting to get message data from the database!"); $('#listAllMsgsFromTo').removeClass('icon-loading'); } }); } getMsgsPerNmbrSec(clckPhNumber); $("#refreshMsgsConvtf").click(function() { getMsgsPerNmbrSec(clckPhNumber); setTimeout(function() { $("#diplNmAllMsg").click(); }, 1000); }); } $('[id^="showMsgFrom-"]').click(function() { var ctrwnb = $(this).attr("id").replace("showMsgFrom-", ""); if ($("#frmNmbr-"+ ctrwnb).text().indexOf(":") > -1) { var clckPhNumber = $("#frmNmbr-"+ ctrwnb).text().split(": ")[1]; } else { var clckPhNumber = $("#frmNmbr-"+ ctrwnb).text(); } showMsgPerNmbr(clckPhNumber); }) $('[id^="showMsgTo-"]').click(function() { var ctrwnbTo = $(this).attr("id").replace("showMsgTo-", ""); var clckPhNbTo = $("#toNmbr-"+ ctrwnbTo).text(); showMsgPerNmbr(clckPhNbTo); }) // Add pagination var rowsShown = messagesperpage; var rowsTotal = $("#sentSmsTable tr").length; var numPages = (rowsTotal - 2) / rowsShown; for (i = 0; i < numPages; i++) { var pageNum = i + 1; $('#paginationsent').append('' + pageNum + ' '); } $('#paginationsent').children(":first").addClass('active'); $('#paginationsent a:first').addClass('active'); // Show table page when clicking on page number $('.pages a').bind('click', function () { $('#paginationsent').children().removeClass('active'); $(this).addClass('active'); var currentsentPgNo = $(this).text(); $('#paginationsent a').each(function() { if ($(this).text() == currentsentPgNo) { $(this).addClass('active'); } }); // Sort table rows var rows = $('#sentSmsTable tr').get(); rows.sort(function(a, b) { var A = parseInt($('td.sentdbidcolumn', a).text()); var B = parseInt($('td.sentdbidcolumn', b).text()); if (A < B) { return -1; } if (A > B) { return 1; } return 0; }); $.each(rows, function(index, row) { $('#sentSmsTable').append(row); }); var currPage = $(this).attr('rel'); var startItem = currPage * rowsShown; var endItem = startItem + rowsShown; $('.sentrowsbody').hide().slice(startItem, endItem).css('display', 'table-row'); $('#totalsentmessages').remove(); $('#smstables').append("
Total displayed messages: " + sentparseddata.length + "
"); }); $('#paginationsent').children(":last").trigger('click'); // Select all records $('#selectAllChckbx').change(function() { if ($(this).is(':checked')) { $(".indivchckbx").prop("checked", true); } else { $(".indivchckbx").prop("checked", false); } }); function reorderSentRows() { var currenttext = $(".filterbuttonsent").closest('[class="filterbuttonsent"]').find('[class="indivfiltersent"]').text(); if (currenttext == '') { $('tr').sort(function (a, b) { return parseInt($('td.sentdbidcolumn', b).text()) < parseInt($('td.sentdbidcolumn', a).text()); }).appendTo("#sentSmsTable"); } } // Filter rows $("#databaseidfilter").on("click", function(event) { var databaseId = $("#dbidtextsent").val(); var msgrowsNo = 0; $(".sentrowsbody").each(function() { var checkEmpty = 0; $(".indivfiltersent").not("#dbidtextsent").each(function() { if ($(this).val() != '') { checkEmpty = 1; } }); if (checkEmpty == 0) { $(this).show(); } if (databaseId != '') { if ($(this).find('[class="sentdbidcolumn"]').text() == databaseId) { $("#sentSmsTable").append(this); if ($(this).is(":visible")) { msgrowsNo++; } } else { $(this).hide(); } } else { $(this).show(); msgrowsNo++; } }); reorderSentRows(); $('#totalsentmessages').remove(); $('#smstables').append("
Total filtered messages: " + msgrowsNo + "
"); }); $("#useridfilter").on("click", function(event) { var useridtxt = $("#useridtext").val().toLowerCase(); var msgrowsNo = 0; $(".sentrowsbody").each(function() { var checkEmpty1 = 0; $(".indivfiltersent").not("#useridtext").each(function() { if ($(this).val() != '') { checkEmpty1 = 1; } }); if (checkEmpty1 == 0) { $(this).show(); } if (useridtxt != '') { var founduserid = $(this).find('[class="useridcolsent"]').text().toLowerCase(); if (founduserid.indexOf(useridtxt) != -1) { $("#sentSmsTable").append(this); if ($(this).is(":visible")) { msgrowsNo++; } } else { $(this).hide(); } } else { $(this).show(); msgrowsNo++; } }); reorderSentRows(); $('#totalsentmessages').remove(); $('#smstables').append("
Total filtered messages: " + msgrowsNo + "
"); }); $("#messageidfilter").on("click", function(event) { var messageidtxt = $("#messageidtext").val().toLowerCase(); var msgrowsNo = 0; $(".sentrowsbody").each(function() { var checkEmpty2 = 0; $(".indivfiltersent").not("#messageidtext").each(function() { if ($(this).val() != '') { checkEmpty2 = 1; } }); if (checkEmpty2 == 0) { $(this).show(); } if (messageidtxt != '') { var foundtdmssgid = $(this).find('[class="messageidcolsent"]').text().toLowerCase(); if (foundtdmssgid.indexOf(messageidtxt) != -1) { $("#sentSmsTable").append(this); if ($(this).is(":visible")) { msgrowsNo++; } } else { $(this).hide(); } } else { $(this).show(); msgrowsNo++; } }); reorderSentRows(); $('#totalsentmessages').remove(); $('#smstables').append("
Total filtered messages: " + msgrowsNo + "
"); }); $("#datefilter").on("click", function(event) { var datetxtvr = $("#datetext").val().toLowerCase(); var msgrowsNo = 0; $(".sentrowsbody").each(function() { var checkEmpty3 = 0; $(".indivfiltersent").not("#datetext").each(function() { if ($(this).val() != '') { checkEmpty3 = 1; } }); if (checkEmpty3 == 0) { $(this).show(); } if (datetxtvr != '') { var founddate = $(this).find('[class="datecolsent"]').text().toLowerCase(); if (founddate.indexOf(datetxtvr) != -1) { $("#sentSmsTable").append(this); if ($(this).is(":visible")) { msgrowsNo++; } } else { $(this).hide(); } } else { $(this).show(); msgrowsNo++; } }); reorderSentRows(); $('#totalsentmessages').remove(); $('#smstables').append("
Total filtered messages: " + msgrowsNo + "
"); }); $("#fromfilter").on("click", function(event) { var fromtxtvr = $("#fromtext").val().toLowerCase(); var msgrowsNo = 0; $(".sentrowsbody").each(function() { var checkEmpty4 = 0; $(".indivfiltersent").not("#fromtext").each(function() { if ($(this).val() != '') { checkEmpty4 = 1; } }); if (checkEmpty4 == 0) { $(this).show(); } if (fromtxtvr != '') { var foundfrom = $(this).find('[class="fromcolumnsent"]').text().toLowerCase(); if (foundfrom.indexOf(fromtxtvr) != -1) { $("#sentSmsTable").append(this); if ($(this).is(":visible")) { msgrowsNo++; } } else { $(this).hide(); } } else { $(this).show(); msgrowsNo++; } }); reorderSentRows(); $('#totalsentmessages').remove(); $('#smstables').append("
Total filtered messages: " + msgrowsNo + "
"); }); $("#tofilter").on("click", function(event) { var totxtvr = $("#totext").val().toLowerCase(); var msgrowsNo = 0; $(".sentrowsbody").each(function() { var checkEmpty5 = 0; $(".indivfiltersent").not("#totext").each(function() { if ($(this).val() != '') { checkEmpty5 = 1; } }); if (checkEmpty5 == 0) { $(this).show(); } if (totxtvr != '') { var foundto = $(this).find('[class="tocolumnsent"]').text().toLowerCase(); if (foundto.indexOf(totxtvr) != -1) { $("#sentSmsTable").append(this); if ($(this).is(":visible")) { msgrowsNo++; } } else { $(this).hide(); } } else { $(this).show(); msgrowsNo++; } }); reorderSentRows(); $('#totalsentmessages').remove(); $('#smstables').append("
Total filtered messages: " + msgrowsNo + "
"); }); $("#networkfilter").on("click", function(event) { var networktxtvr = $("#networktext").val().toLowerCase(); var msgrowsNo = 0; $(".sentrowsbody").each(function() { var checkEmpty6 = 0; $(".indivfiltersent").not("#networktext").each(function() { if ($(this).val() != '') { checkEmpty6 = 1; } }); if (checkEmpty6 == 0) { $(this).show(); } if (networktxtvr != '') { var foundnetwork = $(this).find('[class="networkNmContent"]').text().toLowerCase(); if (foundnetwork.indexOf(networktxtvr) != -1) { $("#sentSmsTable").append(this); if ($(this).is(":visible")) { msgrowsNo++; } } else { $(this).hide(); } } else { $(this).show(); msgrowsNo++; } }); reorderSentRows(); $('#totalsentmessages').remove(); $('#smstables').append("
Total filtered messages: " + msgrowsNo + "
"); }); $("#pricefilter").on("click", function(event) { var pricetxtvr = $("#pricetext").val().toLowerCase(); var msgrowsNo = 0; $(".sentrowsbody").each(function() { var checkEmpty7 = 0; $(".indivfiltersent").not("#pricetext").each(function() { if ($(this).val() != '') { checkEmpty7 = 1; } }); if (checkEmpty7 == 0) { $(this).show(); } if (pricetxtvr != '') { var foundprice = $(this).find('[class="pricecolumnsent"]').text().toLowerCase(); if (foundprice.indexOf(pricetxtvr) != -1) { $("#sentSmsTable").append(this); if ($(this).is(":visible")) { msgrowsNo++; } } else { $(this).hide(); } } else { $(this).show(); msgrowsNo++; } }); reorderSentRows(); $('#totalsentmessages').remove(); $('#smstables').append("
Total filtered messages: " + msgrowsNo + "
"); }); $("#statusfilter").on("click", function(event) { var statustxtvr = $("#statustext").val().toLowerCase(); var msgrowsNo = 0; $(".sentrowsbody").each(function() { var checkEmpty8 = 0; $(".indivfiltersent").not("#statustext").each(function() { if ($(this).val() != '') { checkEmpty8 = 1; } }); if (checkEmpty8 == 0) { $(this).show(); } if (statustxtvr != '') { var foundstatus = $(this).find('[class="statuscolumnsent"]').text().toLowerCase(); if (foundstatus.indexOf(statustxtvr) != -1) { $("#sentSmsTable").append(this); if ($(this).is(":visible")) { msgrowsNo++; } } else { $(this).hide(); } } else { $(this).show(); msgrowsNo++; } }); reorderSentRows(); $('#totalsentmessages').remove(); $('#smstables').append("
Total filtered messages: " + msgrowsNo + "
"); }); $("#deliveryrecfilter").on("click", function(event) { var deliverytxtvr = $("#deliveryrcpttext").val().toLowerCase(); var msgrowsNo = 0; $(".sentrowsbody").each(function() { var checkEmpty9 = 0; $(".indivfiltersent").not("#deliveryrcpttext").each(function() { if ($(this).val() != '') { checkEmpty9 = 1; } }); if (checkEmpty9 == 0) { $(this).show(); } if (deliverytxtvr != '') { var founddeliveryrcpt = $(this).find('[class="deliveryrcptcolsent"]').text().toLowerCase(); if (founddeliveryrcpt.indexOf(deliverytxtvr) != -1) { $("#sentSmsTable").append(this); if ($(this).is(":visible")) { msgrowsNo++; } } else { $(this).hide(); } } else { $(this).show(); msgrowsNo++; } }); reorderSentRows(); $('#totalsentmessages').remove(); $('#smstables').append("
Total filtered messages: " + msgrowsNo + "
"); }); $("#messagefilter").on("click", function(event) { var messagetxtvr = $("#messagetext").val().toLowerCase(); var msgrowsNo = 0; $(".sentrowsbody").each(function() { var checkEmpty10 = 0; $(".indivfiltersent").not("#messagetext").each(function() { if ($(this).val() != '') { checkEmpty10 = 1; } }); if (checkEmpty10 == 0) { $(this).show(); } if (messagetxtvr != '') { var foundmessage = $(this).find('[class="messagecolumnsent"]').text().toLowerCase(); if (foundmessage.indexOf(messagetxtvr) != -1) { $("#sentSmsTable").append(this); if ($(this).is(":visible")) { msgrowsNo++; } } else { $(this).hide(); } } else { $(this).show(); msgrowsNo++; } }); reorderSentRows(); $('#totalsentmessages').remove(); $('#smstables').append("
Total filtered messages: " + msgrowsNo + "
"); }); // Clear all filters $("#clearsentfilters").on("click", function(event) { $(".sentrowsbody").each(function() { $(this).show(); }); $(".indivfiltersent").val(""); $('#totalsentmessages').remove(); $('#smstables').append("
Total displayed messages: " + sentparseddata.length + "
"); }); // Delete selected rows from the database $("#deletesentrows").on("click", function() { var checkcheckbx = $("#sentSmsTable input[type=checkbox]:checked").length; if (checkcheckbx == 0) { showAlert("Please select the row(s) to permanently delete from the database !"); } else { var sentcheckboxIds = []; $(".sentrowsbody").each(function() { var sentrowcheckbx = $(this).find('input[type="checkbox"]'); if (sentrowcheckbx.is(":checked")) { var dbrowid = $(this).find('[class="sentdbidcolumn"]').text() + "|" + $(this).find('[class="messageidcolsent"]').text(); sentcheckboxIds.push(dbrowid); } }); confirmAlert("Please note that the row(s) you selected will be permanently deleted from the database, without being saved before removal. This action cannot be undone ! If you really want to permanently delete the selected row(s) press 'OK'."); $("#confirmCancel").click(function() { $("#alertMsgOverlay").remove(); $("#alertConfMessage").remove(); }); $("#confirmOk").click(function() { $("#alertMsgOverlay").remove(); $("#alertConfMessage").remove(); var deletesentRowsUrl = OC.generateUrl("/apps/sms_relentless/user/removesentrows"); $('#smstables').addClass('icon-loading'); $.ajax({ url: deletesentRowsUrl + '/' + userid, type: "POST", data: { "sentmessagedbIDs": sentcheckboxIds }, success: function(delmsgsent) { $('#smstables').removeClass('icon-loading'); if (delmsgsent == "success") { showAlert("The row(s) have been deleted successfully !"); $('#sentsmstableshow').click(); } else if (delmsgsent == "not allowed") { showAlert("At least one message couldn't be deleted because of permission issues. Non-admin users can delete the messages sent/received from/on the numbers shared with them only if they are allowed by an admin."); } else { showAlert("There was an error while deleting the selected row(s) !"); } }, error: function() { $('#smstables').removeClass('icon-loading'); showAlert("There was an error while attempting to delete the selected row(s) !"); } }); }); } }); // Show/Hide filter row $('#sentarrow').on('click', function() { if ($('#sentfiltersrow').is(':visible')) { $('#sentfiltersrow').hide(); $('#sentheaderrow').css('top', '0px'); $(this).removeClass('arrowUpCl'); $(this).addClass('arrowDownCl'); } else { $('#sentfiltersrow').show(); $('#sentheaderrow').css('top', '158px'); $(this).removeClass('arrowDownCl'); $(this).addClass('arrowUpCl'); } }); $("#app-content").animate({scrollTop:$("#sentSmsTable").prop("scrollHeight")},200); // Download MMS files when clicking on their URLs $('[id^="mmsTblUrl-"]').on('click', function(evt) { var clckedUrl = $(this).text(); var flNamearr = clckedUrl.split("/"); var flName = flNamearr.reverse()[0]; confirmAlert("Download this file only if you trust the sender and the domain of the URL."); $("#confirmOk").click(function() { $("#alertMsgOverlay").remove(); $("#alertConfMessage").remove(); var mmsLink = document.createElement("a"); mmsLink.setAttribute('href', clckedUrl); mmsLink.setAttribute('download', flName); mmsLink.setAttribute('target', '_blank'); document.body.appendChild(mmsLink); mmsLink.click(); mmsLink.remove(); }); $("#confirmCancel").click(function() { $("#alertMsgOverlay").remove(); $("#alertConfMessage").remove(); }); }); }, error: function() { showAlert("Error! You can check the Nextcloud log to find more details about this issue."); $('#smstables').removeClass('icon-loading'); } }); // Look for the 'new received message' indicator in the database, to know if the received messages list needs to be refreshed intervalNmfr = setInterval(function() { checkIfNewMessage(); }, newMsgInterval); // Show the auto-refresh button $("#stopAutoRefreshSent").css("display", "inline-block"); }); // List conversations $("#conversationsshow").on("click", function(event) { $('#smstables').empty(); $("#stopAutoRefreshSent").css("display", "none"); clearInterval(intervalNmfr); $('#smstables').append("
"); $("#conversationsTable").css({ "width" : $("#smstables").width(), "height" : $("#smstables").height() - 10 }); $("#convArchAndActive").css({ "width" : $("#conversationsTable").width() * 0.25, "height" : $("#conversationsTable").height() }); $("#conversationsText").css({ "width" : $("#conversationsTable").width() * 0.74, "height" : $("#conversationsTable").height() }); $("#conversationsText").append("
"); $("#convImgGrey").css({ "top" : $("#conversationsTable").height() * 0.5 - 109, "left" : $("#conversationsTable").width() * 0.63 - 144 }); $("#convTextHeader").css("width", $("#conversationsTable").width() * 0.74); var getConvUrl = OC.generateUrl("/apps/sms_relentless/user/getconversations"); $('#smstables').addClass('icon-loading'); $.ajax({ url: getConvUrl + '/' + userid, method: 'GET', contentType: 'application/json', success: function(convdatafdb) { $('#smstables').removeClass('icon-loading'); if (convdatafdb.length == 0) { showAlert("The conversations list is empty. It will be populated after you'll send messages."); } let convArchived = []; let convActive = []; for (let c = 0; c < convdatafdb.length; c++) { if (convdatafdb[c]['archived'] == 1) { convArchived.push({ 'conversation_id': convdatafdb[c]['conversation_id'], 'archived': convdatafdb[c]['archived'], 'last_archived': convdatafdb[c]['last_archived'], 'last_unarchived': convdatafdb[c]['last_unarchived'], 'archived_by': convdatafdb[c]['archived_by'], 'unarchived_by': convdatafdb[c]['unarchived_by'], 'last_msg_date': convdatafdb[c]['last_msg_date'], 'last_msg_from': convdatafdb[c]['last_msg_from'], 'last_msg_to': convdatafdb[c]['last_msg_to'], 'last_message': convdatafdb[c]['last_message'], 'lastmsgdisplayname': convdatafdb[c]['lastmsgdisplayname'], 'flagged': convdatafdb[c]['flagged'], 'flagunflagby': convdatafdb[c]['flagunflagby'], 'flagunflagdate': convdatafdb[c]['flagunflagdate'], 'tag': (convdatafdb[c]['tag'] != null)? convdatafdb[c]['tag'] : "", 'taguntagby': convdatafdb[c]['taguntagby'], 'taguntagdate': convdatafdb[c]['taguntagdate'], 'description': (convdatafdb[c]['description'] != null)? convdatafdb[c]['description'] : "", 'descriptionby': convdatafdb[c]['descriptionby'], 'descriptiondate': convdatafdb[c]['descriptiondate'] }); } else { convActive.push({ 'conversation_id': convdatafdb[c]['conversation_id'], 'archived': convdatafdb[c]['archived'], 'last_archived': convdatafdb[c]['last_archived'], 'last_unarchived': convdatafdb[c]['last_unarchived'], 'archived_by': convdatafdb[c]['archived_by'], 'unarchived_by': convdatafdb[c]['unarchived_by'], 'last_msg_date': convdatafdb[c]['last_msg_date'], 'last_msg_from': convdatafdb[c]['last_msg_from'], 'last_msg_to': convdatafdb[c]['last_msg_to'], 'last_message': convdatafdb[c]['last_message'], 'lastmsgdisplayname': convdatafdb[c]['lastmsgdisplayname'], 'flagged': convdatafdb[c]['flagged'], 'flagunflagby': convdatafdb[c]['flagunflagby'], 'flagunflagdate': convdatafdb[c]['flagunflagdate'], 'tag': (convdatafdb[c]['tag'] != null)? convdatafdb[c]['tag'] : "", 'taguntagby': convdatafdb[c]['taguntagby'], 'taguntagdate': convdatafdb[c]['taguntagdate'], 'description': (convdatafdb[c]['description'] != null)? convdatafdb[c]['description'] : "", 'descriptionby': convdatafdb[c]['descriptionby'], 'descriptiondate': convdatafdb[c]['descriptiondate'] }); } } // Order the array of archived conversations by date convArchived.sort(function(a, b) { let c = new Date(a.last_msg_date); let d = new Date(b.last_msg_date); return c-d; }); // Order the array of active conversations by date convActive.sort(function(a, b) { let c = new Date(a.last_msg_date); let d = new Date(b.last_msg_date); return c-d; }); // List the conversations var taggsArrin = []; if (archivedConvNmbr == 0) { // Don't list any archived conversations var archivedCvNb = 0; } else if (archivedConvNmbr != 0 && archivedConvNmbr != null) { var archCount = 0; let fcnv = (archivedConvNmbr <= convArchived.length)? convArchived.length - archivedConvNmbr : 0; for (let s = fcnv; s < convArchived.length; s++) { var emptyRedFlags = (convArchived[s]['flagged'] == 1)? "cvFlagRed" : "cvFlagEmpty"; if (convArchived[s]['tag'] != "") { var cvTagTxts = convArchived[s]['tag']; var cvTagAdds = "convTagAdded"; taggsArrin.push(convArchived[s]['tag']); } else { var cvTagTxts = ""; var cvTagAdds = "convTag"; } var cvDescAdds = (convArchived[s]['description'] != "")? "convDescAdded" : "convDesc"; $("#convArchAndActive").append("
From: "+ convArchived[s]['last_msg_from'] +"
To: "+ convArchived[s]['last_msg_to'] +"
"+ convArchived[s]['lastmsgdisplayname'] +":"+ convArchived[s]['last_message'] +"
"+ convArchived[s]['last_msg_date'] +"
"+ cvTagTxts +"
"); archCount++; } var archivedCvNb = archCount; } else { for (let a = 0; a < convArchived.length; a++) { var emptyRedFlaga = (convArchived[a]['flagged'] == 1)? "cvFlagRed" : "cvFlagEmpty"; if (convArchived[a]['tag'] != "") { var cvTagTxta = convArchived[a]['tag']; var cvTagAdda = "convTagAdded"; taggsArrin.push(convArchived[a]['tag']); } else { var cvTagTxta = ""; var cvTagAdda = "convTag"; } var cvDescAdda = (convArchived[a]['description'] != "")? "convDescAdded" : "convDesc"; $("#convArchAndActive").append("
From: "+ convArchived[a]['last_msg_from'] +"
To: "+ convArchived[a]['last_msg_to'] +"
"+ convArchived[a]['lastmsgdisplayname'] +":"+ convArchived[a]['last_message'] +"
"+ convArchived[a]['last_msg_date'] +"
"+ cvTagTxta +"
"); } var archivedCvNb = convArchived.length; } for (let t = 0; t < convActive.length; t++) { var emptyRedFlagt = (convActive[t]['flagged'] == 1)? "cvFlagRed" : "cvFlagEmpty"; if (convActive[t]['tag'] != "") { var cvTagTxtt = convActive[t]['tag']; var cvTagAddt = "convTagAdded"; taggsArrin.push(convActive[t]['tag']); } else { var cvTagTxtt = ""; var cvTagAddt = "convTag"; } var cvDescAddt = (convActive[t]['description'] != "")? "convDescAdded" : "convDesc"; $("#convArchAndActive").append("
From: "+ convActive[t]['last_msg_from'] +"
To: "+ convActive[t]['last_msg_to'] +"
"+ convActive[t]['lastmsgdisplayname'] +":"+ convActive[t]['last_message'] +"
"+ convActive[t]['last_msg_date'] +"
"+ cvTagTxtt +"
"); } // Remove the duplicates from the tags array function uniqueElem(value, index, array) { return array.indexOf(value) === index; } var taggsArr = taggsArrin.filter(uniqueElem); // Add the row that specifies the number of conversations displayed var totalConvNb = archivedCvNb + convActive.length; $("#convArchAndActive").append("
"+ totalConvNb +" conversations displayed ("+ archivedCvNb +""+ convActive.length +" )
"); // Remove the empty display names, if any $(".msgAuthorNameConv").each(function() { if ($(this).text() == ":") { $(this).remove(); } }); function convListContent() { // Scroll to the bottom of the conversations list $("#convArchAndActive").animate({scrollTop: $("#convArchAndActive").prop("scrollHeight")}, 200); // Show all the content of the truncated messages when hovering over them $(".convLastMsg").each(function() { $(this).on("mouseenter", function() { $(this).css("-webkit-line-clamp", "none"); }); $(this).on("mouseleave", function() { $(this).css("-webkit-line-clamp", "3"); }); }); // Show the pop-up window for adding or modifying the conversation description $('[id^="addArchDesc-"],[id^="addActDesc-"]').click(function(evt) { evt.stopPropagation(); var conversationId = $(this).closest(".convsLst").find(".archactImg").data("conversationid"); var cvDesc = $(this).closest(".convsLst").find(".archactImg").data("convdescription"); var cvDescChangeBy = $(this).closest(".convsLst").find(".archactImg").data("convdescchangeby"); var cvDescChangeDate = $(this).closest(".convsLst").find(".archactImg").data("convdescchangedate"); var lstmsgFrom = $(this).closest(".convsLst").find(".convLastMsgFrom").text().replace("From: ", ""); var lstmsgTo = $(this).closest(".convsLst").find(".convLastMsgTo").text().replace("To: ", "");; if (cvDescChangeBy) { var convDescTitle = "Description last saved by "+ cvDescChangeBy +" at "+ cvDescChangeDate +":"; } else { var convDescTitle = "Add a description for this conversation:"; } if (cvDesc) { var convTextContent = cvDesc; } else { var convTextContent = ""; } var addDescWindow = "
"; addDescWindow += "
"; addDescWindow += ""; addDescWindow += "
"+ lstmsgFrom +"
"+ lstmsgTo +"
"; addDescWindow += "
"+ convDescTitle +"
"; addDescWindow += ""; addDescWindow += ""; addDescWindow += "
"; $("#content").append("
"); $("#content").append(addDescWindow); var topNmDist = parseInt((window.innerHeight / 2).toFixed(2) - 180) +"px"; var leftNmDist = parseInt((window.innerWidth / 2).toFixed(2) - 150) +"px"; $("#convDescWindow").css({ "top" : topNmDist, "left" : leftNmDist }); $("#closeDescWindow").click(function() { $("#convDescWindow").remove(); $("#recTblOverlay").remove(); }); $("#recTblOverlay").click(function() { $("#convDescWindow").remove(); $("#recTblOverlay").remove(); }); // Make the window draggable function makeMgrWndDraggable(e) { window.pmdragging = {}; pmdragging.pageX0 = e.pageX; pmdragging.pageY0 = e.pageY; pmdragging.elem = $("#convDescWindow"); pmdragging.offset0 = $("#convDescWindow").offset(); function handle_dragging(e) { var left = pmdragging.offset0.left + (e.pageX - pmdragging.pageX0); var top = pmdragging.offset0.top + (e.pageY - pmdragging.pageY0); $(pmdragging.elem).offset({top: top, left: left}); } function handle_mouseup(e) { $('body').off('mousemove', handle_dragging).off('mouseup', handle_mouseup); } $('body').on('mouseup', handle_mouseup).on('mousemove', handle_dragging); } $("#dragDescWindow").mousedown(makeMgrWndDraggable); // Save the description $("#saveConvDesc").click(function() { if ($(this).val() == "Save") { $("#descriptionText").prop("disabled", false); $("#descriptionText").css("background-color", "#ffffff"); var descText = $("#descriptionText").val(); if (/^[a-zA-Z0-9\'\.\,\)\(\/\-\s\r\n]*$/.test(descText)) { var saveConvDescUrl = OC.generateUrl("/apps/sms_relentless/user/saveconvdescription"); $.ajax({ url: saveConvDescUrl + '/' + userid, type: 'POST', data: { convDescription: descText, convId: conversationId }, success: function(respupdesc) { showAlert(respupdesc); $("#convDescWindow").remove(); $("#recTblOverlay").remove(); // Refresh the conversations list var archCvIdsc = ''; var actCvIdsc = ''; $(".convsListArch").each(function() { if ($(this).css('background-color') === "rgb(241, 224, 239)") { archCvIdsc = $(this).attr("id"); } }); $(".convsListAct").each(function() { if ($(this).css('background-color') === "rgb(215, 239, 239)") { actCvIdsc = $(this).attr("id"); } }); $('#smstables').empty(); $("#conversationsshow").click(); setTimeout(function() { if (actCvIdsc != '') { document.getElementById(actCvIdsc).click(); } else if (archCvIdsc != '') { document.getElementById(actCvIdsc).click(); } }, 800); }, error: function() { showAlert("Error while attempting to save the conversation description to the database."); $("#convDescWindow").remove(); $("#recTblOverlay").remove(); } }); } else { showAlert("The conversation description must contain only letters, numbers, spaces, commas (,), hyphens (-), slashes (/), periods (.), round brackets (()), single quotation marks ('), new lines, or an empty string."); } } else { $(this).attr("value", "Save"); $("#descriptionText").prop("disabled", false); $("#descriptionText").css("background-color", "#ffffff"); } }); }); // Show the pop-up window for adding or modifying the conversation tag $('[id^="addArchTag-"],[id^="addActTag-"]').click(function(ev) { ev.stopPropagation(); var conversationIdt = $(this).closest(".convsLst").find(".archactImg").data("conversationid"); var cvTag = $(this).closest(".convsLst").find(".archactImg").data("tag"); var cvTagChangeBy = $(this).closest(".convsLst").find(".archactImg").data("taguntagby"); var cvTagChangeDate = $(this).closest(".convsLst").find(".archactImg").data("taguntagdate"); var lstmsgFromt = $(this).closest(".convsLst").find(".convLastMsgFrom").text().replace("From: ", ""); var lstmsgTot = $(this).closest(".convsLst").find(".convLastMsgTo").text().replace("To: ", "");; if (cvTagChangeBy) { var convTagTitle = "Tag last saved by "+ cvTagChangeBy +" at "+ cvTagChangeDate +":"; } else { var convTagTitle = "Add a tag to this conversation:"; } if (cvTag) { var tagTextContent = cvTag; } else { var tagTextContent = ""; } var addTagWindow = "
"; addTagWindow += "
"; addTagWindow += ""; addTagWindow += "
"+ lstmsgFromt +"
"+ lstmsgTot +"
"; addTagWindow += "
"+ convTagTitle +"
"; addTagWindow += ""; addTagWindow += ""; addTagWindow += "
"; $("#content").append("
"); $("#content").append(addTagWindow); var topNmDistt = parseInt((window.innerHeight / 2).toFixed(2) - 180) +"px"; var leftNmDistt = parseInt((window.innerWidth / 2).toFixed(2) - 150) +"px"; $("#convTagWindow").css({ "top" : topNmDistt, "left" : leftNmDistt }); $("#closeTagWindow").click(function() { $("#convTagWindow").remove(); $("#recTblOverlay").remove(); }); $("#recTblOverlay").click(function() { $("#convTagWindow").remove(); $("#recTblOverlay").remove(); }); // Make the window draggable function makeMgrWndDraggable(e) { window.pmdragging = {}; pmdragging.pageX0 = e.pageX; pmdragging.pageY0 = e.pageY; pmdragging.elem = $("#convTagWindow"); pmdragging.offset0 = $("#convTagWindow").offset(); function handle_dragging(e) { var left = pmdragging.offset0.left + (e.pageX - pmdragging.pageX0); var top = pmdragging.offset0.top + (e.pageY - pmdragging.pageY0); $(pmdragging.elem).offset({top: top, left: left}); } function handle_mouseup(e) { $('body').off('mousemove', handle_dragging).off('mouseup', handle_mouseup); } $('body').on('mouseup', handle_mouseup).on('mousemove', handle_dragging); } $("#dragTagWindow").mousedown(makeMgrWndDraggable); // Save the tag $("#saveConvTag").click(function() { if ($(this).val() == "Save") { $("#tagText").prop("disabled", false); $("#tagText").css("background-color", "#ffffff"); var tagTextCt = $("#tagText").val(); if (tagTextCt.length <= 100) { if (/^[a-zA-Z0-9\'\.\,\)\(\/\-\s\r\n]*$/.test(tagTextCt)) { var saveConvTagUrl = OC.generateUrl("/apps/sms_relentless/user/saveconvtag"); $.ajax({ url: saveConvTagUrl + '/' + userid, type: 'POST', data: { convTag: tagTextCt, convId: conversationIdt }, success: function(respuptag) { showAlert(respuptag); $("#convTagWindow").remove(); $("#recTblOverlay").remove(); // Refresh the conversations list var archCvIdsc = ''; var actCvIdsc = ''; $(".convsListArch").each(function() { if ($(this).css('background-color') === "rgb(241, 224, 239)") { archCvIdsc = $(this).attr("id"); } }); $(".convsListAct").each(function() { if ($(this).css('background-color') === "rgb(215, 239, 239)") { actCvIdsc = $(this).attr("id"); } }); $('#smstables').empty(); $("#conversationsshow").click(); setTimeout(function() { if (actCvIdsc != '') { document.getElementById(actCvIdsc).click(); } else if (archCvIdsc != '') { document.getElementById(actCvIdsc).click(); } }, 800); }, error: function() { showAlert("Error while attempting to save the conversation tag to the database."); $("#convTagWindow").remove(); $("#recTblOverlay").remove(); } }); } else { showAlert("The conversation tag must contain only letters, numbers, spaces, commas (,), hyphens (-), slashes (/), periods (.), round brackets (()), single quotation marks ('), new lines, or an empty string."); } } else { showAlert("The conversation tag cannot exceed 100 characters in length."); } } else { $(this).attr("value", "Save"); $("#tagText").prop("disabled", false); $("#tagText").css("background-color", "#ffffff"); } }); }); // Show the pop-up window for adding or modifying the conversation flag $('[id^="addArchFlag-"],[id^="addActFlag-"]').click(function(ev) { ev.stopPropagation(); var conversationIdf = $(this).closest(".convsLst").find(".archactImg").data("conversationid"); var cvFlag = $(this).closest(".convsLst").find(".archactImg").data("flagged"); var cvFlagChangeBy = $(this).closest(".convsLst").find(".archactImg").data("flagunflagby"); var cvFlagChangeDate = $(this).closest(".convsLst").find(".archactImg").data("flagunflagdate"); var lstmsgFromf = $(this).closest(".convsLst").find(".convLastMsgFrom").text().replace("From: ", ""); var lstmsgTof = $(this).closest(".convsLst").find(".convLastMsgTo").text().replace("To: ", "");; if (cvFlag == 1) { var flgSetRem = "set"; } else if (cvFlag == 0) { var flgSetRem = "removed"; } else { var flgSetRem = "modified"; } if (cvFlagChangeBy) { var convFlagTitle = "Flag last "+ flgSetRem +" by "+ cvFlagChangeBy +" at "+ cvFlagChangeDate +":"; } else { var convFlagTitle = "Set a flag for this conversation:"; } var addFlagWindow = "
"; addFlagWindow += "
"; addFlagWindow += ""; addFlagWindow += "
"+ lstmsgFromf +"
"+ lstmsgTof +"
"; addFlagWindow += "
"+ convFlagTitle +"
"; addFlagWindow += ""; addFlagWindow += "
"; $("#content").append("
"); $("#content").append(addFlagWindow); if (cvFlag == 1) { $("#setConvFlag").prop("value", "Remove flag"); } else { $("#setConvFlag").prop("value", "Set flag"); } var topNmDistf = parseInt((window.innerHeight / 2).toFixed(2) - 180) +"px"; var leftNmDistf = parseInt((window.innerWidth / 2).toFixed(2) - 150) +"px"; $("#convFlagWindow").css({ "top" : topNmDistf, "left" : leftNmDistf }); $("#closeFlagWindow").click(function() { $("#convFlagWindow").remove(); $("#recTblOverlay").remove(); }); $("#recTblOverlay").click(function() { $("#convFlagWindow").remove(); $("#recTblOverlay").remove(); }); // Make the window draggable function makeMgrWndDraggable(e) { window.pmdragging = {}; pmdragging.pageX0 = e.pageX; pmdragging.pageY0 = e.pageY; pmdragging.elem = $("#convFlagWindow"); pmdragging.offset0 = $("#convFlagWindow").offset(); function handle_dragging(e) { var left = pmdragging.offset0.left + (e.pageX - pmdragging.pageX0); var top = pmdragging.offset0.top + (e.pageY - pmdragging.pageY0); $(pmdragging.elem).offset({top: top, left: left}); } function handle_mouseup(e) { $('body').off('mousemove', handle_dragging).off('mouseup', handle_mouseup); } $('body').on('mouseup', handle_mouseup).on('mousemove', handle_dragging); } $("#dragFlagWindow").mousedown(makeMgrWndDraggable); // Save the flag $("#setConvFlag").click(function() { if ($(this).val() == "Set flag") { var convFlag = 1; } else { var convFlag = 0; } var saveConvFlagUrl = OC.generateUrl("/apps/sms_relentless/user/saveconvflag"); $.ajax({ url: saveConvFlagUrl + '/' + userid, type: 'POST', data: { convFlag: convFlag, convId: conversationIdf }, success: function(respupflag) { if (respupflag != "success") { showAlert("Error while trying to save the conversation flag to the database."); } $("#convFlagWindow").remove(); $("#recTblOverlay").remove(); // Refresh the conversations list var archCvIdsc = ''; var actCvIdsc = ''; $(".convsListArch").each(function() { if ($(this).css('background-color') === "rgb(241, 224, 239)") { archCvIdsc = $(this).attr("id"); } }); $(".convsListAct").each(function() { if ($(this).css('background-color') === "rgb(215, 239, 239)") { actCvIdsc = $(this).attr("id"); } }); $('#smstables').empty(); $("#conversationsshow").click(); setTimeout(function() { if (actCvIdsc != '') { document.getElementById(actCvIdsc).click(); } else if (archCvIdsc != '') { document.getElementById(actCvIdsc).click(); } }, 800); }, error: function() { showAlert("Error while attempting to save the conversation flag to the database."); $("#convFlagWindow").remove(); $("#recTblOverlay").remove(); } }); }); }); // Get the messages exchanged between the current 2 phone numbers, from the database function getMsgsForNmbrs(phNumberFrom, phNumberTo, conversationId, archivedConv, archivedBy, unarchivedBy, lastArchived, lastUnarchived, flagged, flagunflagby, flagunflagdate, tag, taguntagby, taguntagdate, convdescription, convdescchangeby, convdescchangedate) { let getGrpConvUrl = OC.generateUrl("/apps/sms_relentless/user/getgroupedforreply"); $('#conversationsText').addClass('icon-loading'); let totalPhNmbrs = 0; $.ajax({ method: 'POST', url: getGrpConvUrl + '/' + userid, contentType: 'application/json', data: JSON.stringify({ "phoneNmbrFrom": phNumberFrom, "phoneNmbrTo": phNumberTo }), success: function(groupedperconv) { $('#conversationsText').removeClass('icon-loading'); let fromtoNmbrsData = []; for (let i = 0; i < groupedperconv.length; i++) { if (groupedperconv[i].author_displayname) { var authordnm = groupedperconv[i].author_displayname; } else { var authordnm = ''; } var sentfromnmbrarr = groupedperconv[i].from.split(": "); if (sentfromnmbrarr[1]) { var groupednbfrom = sentfromnmbrarr[1]; } else { var groupednbfrom = sentfromnmbrarr[0]; } var modmessagerec = ''; if (groupedperconv[i].author_displayname) { modmessagerec = ""+ groupedperconv[i].author_displayname + ":" + groupedperconv[i].message; } else { modmessagerec = groupedperconv[i].message; } if (groupedperconv[i].to.indexOf(": ") > -1) { var groupednmbrtopre = groupedperconv[i].to.split(": "); var groupednmbrto = groupednmbrtopre[1]; } else { var groupednmbrto = groupedperconv[i].to; } fromtoNmbrsData.push({ 'author_displayname': authordnm, 'from': groupednbfrom, 'to': groupednmbrto, 'message': modmessagerec, 'date': groupedperconv[i].date, 'status': groupedperconv[i].deliveryreceipt, 'table': groupedperconv[i].table }); } // Remove the duplicates let noDupMsgData = []; $.each(fromtoNmbrsData, function(i, e) { let matchingData = $.grep(noDupMsgData, function(item) { return item.from == e.from && item.to == e.to && item.message == e.message && item.table == 'received' && e.table == 'sent'; }); if (matchingData.length === 0) { noDupMsgData.push(e); } }); let messagesPerNmbr = {}; let msgsNamesPerNmbr = {}; let msgsNmbrsNames = {}; let displayNamesarr = []; let convData = []; for (let n = 0; n < noDupMsgData.length; n++) { if (noDupMsgData[n]['from'] == phNumberFrom && noDupMsgData[n]['table'] == 'sent') { convData.push({ 'author_displayname': noDupMsgData[n]['author_displayname'], 'message': noDupMsgData[n]['message'], 'from': noDupMsgData[n]['from'], 'to': noDupMsgData[n]['to'], 'date': noDupMsgData[n]['date'], 'direction': 'sent_from', 'status': (noDupMsgData[n]['status'] == null)? "" : noDupMsgData[n]['status'], 'table': noDupMsgData[n]['table'] }); } else if (noDupMsgData[n]['to'] == phNumberFrom && noDupMsgData[n]['table'] == 'sent') { convData.push({ 'author_displayname': noDupMsgData[n]['author_displayname'], 'message': noDupMsgData[n]['message'], 'from': noDupMsgData[n]['from'], 'to': noDupMsgData[n]['to'], 'date': noDupMsgData[n]['date'], 'direction': 'sent_to', 'status': (noDupMsgData[n]['status'] == null)? "" : noDupMsgData[n]['status'], 'table': noDupMsgData[n]['table'] }); } else if (noDupMsgData[n]['from'] == phNumberFrom && noDupMsgData[n]['table'] == 'received') { convData.push({ 'author_displayname': noDupMsgData[n]['author_displayname'], 'message': noDupMsgData[n]['message'], 'from': noDupMsgData[n]['from'], 'to': noDupMsgData[n]['to'], 'date': noDupMsgData[n]['date'], 'direction': 'received_from', 'status': (noDupMsgData[n]['status'] == null)? "" : noDupMsgData[n]['status'], 'table': noDupMsgData[n]['table'] }); } else if (noDupMsgData[n]['to'] == phNumberFrom && noDupMsgData[n]['table'] == 'received') { convData.push({ 'author_displayname': noDupMsgData[n]['author_displayname'], 'message': noDupMsgData[n]['message'], 'from': noDupMsgData[n]['from'], 'to': noDupMsgData[n]['to'], 'date': noDupMsgData[n]['date'], 'direction': 'received_on', 'status': (noDupMsgData[n]['status'] == null)? "" : noDupMsgData[n]['status'], 'table': noDupMsgData[n]['table'] }); } } // Sort messages by date convData.sort(function(a, b) { return new Date(b.date) - new Date(a.date); }); // Collect the display names of the users that sent messages from the current numbers let selectedNames = []; let displayNames = ''; for (let v = 0; v < convData.length; v++) { if (selectedNames.indexOf(convData[v]['author_displayname']) == -1) { selectedNames.push(convData[v]['author_displayname']); displayNames += "
"+ convData[v]['author_displayname'] +"
"; } } displayNames += "
All messages
"; // Store the display names for the current numbers, to be able to see them later let ctPhNumber = phNumberFrom; msgsNamesPerNmbr[ctPhNumber] = displayNames; // Store the messages sent by each user, to be able to see them later when clicking on the user's name for (let h = 0; h < selectedNames.length; h++) { let rowMessageArrpn = []; for (let b = 0; b < convData.length; b++) { if (selectedNames[h] == convData[b]['author_displayname']) { if (convData[b]['direction'] == 'sent_from') { if (convData[b]['status']) { if (convData[b]['status'].indexOf("delivered") > -1 || convData[b]['status'].indexOf("delivery success") > -1 || convData[b]['status'].indexOf("Retrieved") > -1) { if (convData[b]['status'].indexOf("undelivered") > -1) { var sentMsgStatus = ""; } else { var sentMsgStatus = ""; } } else { var sentMsgStatus = ""; } } else { var sentMsgStatus = ""; } rowMessageArrpn.push("
From: "+ convData[b]['from'] +"
To: "+ convData[b]['to'] +"
"+ convData[b]['message'] +"
"+ convData[b]['date'] +"
"+ sentMsgStatus +"
"); } else if (convData[b]['direction'] == 'sent_to') { if (convData[b]['status']) { if (convData[b]['status'].indexOf("delivered") > -1 || convData[b]['status'].indexOf("delivery success") > -1 || convData[b]['status'].indexOf("Retrieved") > -1) { if (convData[b]['status'].indexOf("undelivered") > -1) { var sentMsgStatus = ""; } else { var sentMsgStatus = ""; } } else { var sentMsgStatus = ""; } } else { var sentMsgStatus = ""; } rowMessageArrpn.push("
From: "+ convData[b]['from'] +"
To: "+ convData[b]['to'] +"
"+ convData[b]['message'] +"
"+ convData[b]['date'] +"
"+ sentMsgStatus +"
"); } else if (convData[b]['direction'] == 'received_from') { rowMessageArrpn.push("
From: "+ convData[b]['from'] +"
To: "+ convData[b]['to'] +"
"+ convData[b]['message'] +"
"+ convData[b]['date'] +"
"); } else if (convData[b]['direction'] == 'received_on') { rowMessageArrpn.push("
From: "+ convData[b]['from'] +"
To: "+ convData[b]['to'] +"
"+ convData[b]['message'] +"
"+ convData[b]['date'] +"
"); } } } let crtNmber = phNumberFrom; let crtName = selectedNames[h]; msgsNmbrsNames[crtNmber] = msgsNmbrsNames[crtNmber] || {}; msgsNmbrsNames[crtNmber][crtName] = rowMessageArrpn; } // The number of messages to be loaded by default var nmbTblDefault = 50; // If the total number of messages is greater than the default number of messages to display, show the 'Load more messages' button if (convData.length > nmbTblDefault) { $("#loadMoreMsgs").css("display", "block"); var nmbToBeLoaded = nmbTblDefault; } else { var nmbToBeLoaded = convData.length; } let rowMessageArr = []; for (var m = nmbToBeLoaded - 1; m >= 0; m--) { if (convData[m]['direction'] == 'sent_from') { if (convData[m]['status']) { if (convData[m]['status'].indexOf("delivered") > -1 || convData[m]['status'].indexOf("delivery success") > -1 || convData[m]['status'].indexOf("Retrieved") > -1) { if (convData[m]['status'].indexOf("undelivered") > -1) { var sentMsgStatus = ""; } else { var sentMsgStatus = ""; } } else { var sentMsgStatus = ""; } } else { var sentMsgStatus = ""; } rowMessageArr.push("
From: "+ convData[m]['from'] +"
To: "+ convData[m]['to'] +"
"+ convData[m]['message'] +"
"+ convData[m]['date'] +"
"+ sentMsgStatus +"
"); } else if (convData[m]['direction'] == 'sent_to') { if (convData[m]['status']) { if (convData[m]['status'].indexOf("delivered") > -1 || convData[m]['status'].indexOf("delivery success") > -1 || convData[m]['status'].indexOf("Retrieved") > -1) { if (convData[m]['status'].indexOf("undelivered") > -1) { var sentMsgStatus = ""; } else { var sentMsgStatus = ""; } } else { var sentMsgStatus = ""; } } else { var sentMsgStatus = ""; } rowMessageArr.push("
From: "+ convData[m]['from'] +"
To: "+ convData[m]['to'] +"
"+ convData[m]['message'] +"
"+ convData[m]['date'] +"
"+ sentMsgStatus +"
"); } else if (convData[m]['direction'] == 'received_from') { rowMessageArr.push("
From: "+ convData[m]['from'] +"
To: "+ convData[m]['to'] +"
"+ convData[m]['message'] +"
"+ convData[m]['date'] +"
"); } else if (convData[m]['direction'] == 'received_on') { rowMessageArr.push("
From: "+ convData[m]['from'] +"
To: "+ convData[m]['to'] +"
"+ convData[m]['message'] +"
"+ convData[m]['date'] +"
"); } } let convDataPerNmbr = rowMessageArr.join(""); if (archivedConv == 1) { var archiveImg = "unarchiveConv"; var archTitle = "Unarchive this conversation."; var removeConvImg = "removeConv"; var removeConvTitle = "Permanently delete all the messages in this conversation."; var archornottitle = "Archived Conversation"; } else { var archiveImg = "archiveConv"; var archTitle = "Archive this conversation."; var removeConvImg = "removeConvGrey"; var removeConvTitle = "Only archived conversations can be deleted."; var archornottitle = "Active Conversation"; } if (archivedBy == null || archivedBy == '') { var lastArchUnarch = "Active Conversation | "+ phNumberFrom +"
"+ phNumberTo +""; } else if (archivedConv == 1 && archivedBy && lastArchived) { var lastArchUnarch = "Archived Conversation | "+ phNumberFrom +"
"+ phNumberTo +" | Last archived by "+ archivedBy + " on "+ lastArchived; } else if (archivedConv == 0 && unarchivedBy && lastUnarchived) { var lastArchUnarch = "Active Conversation | "+ phNumberFrom +"
"+ phNumberTo +" | Last unarchived by "+ unarchivedBy + " on "+ lastUnarchived; } if (convdescription) { var cvDescAdded = "convDescAddedCvt"; var cvDescText = convdescription + " (Description last saved by "+ convdescchangeby +" at "+ convdescchangedate +".)"; } else { var cvDescAdded = "convDescCvt"; var cvDescText = ""; } if (tag) { var cvTagAdded = "convTagAddedCvt"; var cvTagText = ""+ tag + " (Tag last saved by "+ taguntagby +" at "+ taguntagdate +".)"; } else { var cvTagAdded = "convTagCvt"; var cvTagText = ""; } if (flagged == 1) { var cvFlagAdded = "cvFlagRedCvt"; var cvFlagText = "(Flag last set by "+ flagunflagby +" at "+ flagunflagdate +".)"; } else if (flagged == 0) { var cvFlagAdded = "cvFlagEmptyCvt"; var cvFlagText = "(Flag last removed by "+ flagunflagby +" at "+ flagunflagdate +".)"; } else { var cvFlagAdded = "cvFlagEmptyCvt"; var cvFlagText = ""; } $("#conversationsText").empty(); $("#conversationsText").append("
"+ lastArchUnarch +"
"+ cvDescText +"
"+ cvTagText +"
"+ cvFlagText +"
Permanently delete from the database all the messages included in this conversation.
Load more messages
Load more messages
"); $("#conversationsText").append("
Load more messages
Load more messages
"); var allmsgconv = "
"; allmsgconv += "
From:
To:
"; allmsgconv += "
Send SMS
"; allmsgconv += "
"; $("#conversationsText").append(allmsgconv); $("#convListRowCell").append(convDataPerNmbr); if (convData.length > nmbTblDefault) { $("#loadMoreMsgs").css("display", "block"); } $("#sendMsgConvSec").css("width", $("#conversationsText").width() - 20); $("#sendMsgConvTextSec").css("width", $("#conversationsText").width() - 20); // Expand the conversation title bar to see the conversation details $("#expandTitleImg").click(function() { if ($("#titleSecRow").is(":visible")) { $("#titleSecRow").css("display", "none"); $("#expandTitleImg").css("background-image", "url('/" + ctappdir + "/sms_relentless/img/arrowDown_small.svg')"); $("#expandTitleImg").prop("title", "Expand to see conversation details"); } else { $("#titleSecRow").css("display", "block"); $("#expandTitleImg").css("background-image", "url('/" + ctappdir + "/sms_relentless/img/arrowUp_small.svg')"); $("#expandTitleImg").prop("title", "Collapse"); } }); // Delete all the messages in a conversation $("#deleteAllMsgConv").click(function() { confirmAlert("Are you sure that you want to permanently delete from the database all the messages included in this conversation ? This action cannot be undone."); $("#confirmCancel").click(function() { $("#alertMsgOverlay").remove(); $("#alertConfMessage").remove(); return; }); $("#confirmOk").click(function() { confirmAlert("Confirm that you want to permanently delete from the database all the messages included in this conversation !"); $("#confirmCancel").click(function() { $("#alertMsgOverlay").remove(); $("#alertConfMessage").remove(); return; }); $("#confirmOk").click(function() { $("#alertMsgOverlay").remove(); $("#alertConfMessage").remove(); var deleteConvUrl = OC.generateUrl("/apps/sms_relentless/user/removeconvmsgs"); $('#smstables').addClass('icon-loading'); $.ajax({ url: deleteConvUrl + '/' + userid, type: "POST", data: { "conversationId": conversationId }, success: function(delcvmsgres) { $('#smstables').removeClass('icon-loading'); if (delcvmsgres == "success") { showAlert("The messages included in this conversation have been deleted successfully !"); $('#conversationsshow').click(); } else if (delcvmsgres == "not allowed") { showAlert("Only admins can delete messages !"); } else { showAlert("There was an error while deleting the messages included in this conversation !"); } }, error: function() { $('#smstables').removeClass('icon-loading'); showAlert("There was an error while attempting to delete the messages included in this conversation !"); } }); }); }); }); // Expand the reply section when clicking on the arrow, to be able to send replies $("#expToSendReply").unbind("click"); $("#expToSendReply").click(function() { if ($("#expandWindowRplSec").attr('src') == '/' + ctappdir + '/sms_relentless/img/arrowDown.svg') { $("#sendMsgReplySec").css("display", "block"); $("#conversationsText").animate({scrollTop: $("#conversationsText").prop("scrollHeight")}, 100); $("#expandWindowRplSec").attr('src', '/' + ctappdir + '/sms_relentless/img/arrowUp.svg'); $(this).attr('title', 'Collapse'); } else { $("#sendMsgReplySec").css("display", "none"); $("#expandWindowRplSec").attr('src', '/' + ctappdir + '/sms_relentless/img/arrowDown.svg'); $(this).attr('title', 'Expand to send a reply'); } }); // Append the available phone numbers to the From drop-down list var availPhoneNmbrs = []; $("#currentsmsnmbrs .optselectsmsnb").each(function() { var crtphnmbr = $(this).attr("value"); if (crtphnmbr != "") { availPhoneNmbrs.push(crtphnmbr); } }); if (availPhoneNmbrs.length > 0) { var extcheck = true; var avphopt = ""; var avphoptto = ""; for (let d = 0; d < availPhoneNmbrs.length; d++) { if (availPhoneNmbrs[d].indexOf(phNumberTo) === -1) { avphopt += ""; } else { avphopt += ""; extcheck = false; } if (availPhoneNmbrs[d].indexOf("+") > -1) { avphoptto += ""; } } $("#selectFromNbConv").append(avphopt); if (extcheck) { avphoptto += ""; } else { avphoptto += ""; } $("#selectToNbConv").append(avphoptto); // Warn of beginning/continuing a different conversation if sending the message from/to a number different from the numbers that participate in the conversation $("#selectFromNbConv").change(function() { var selNmbr = $(this).val().split(": ")[1]; if (selNmbr != phNumberTo && selNmbr != phNumberFrom) { showAlert("You have selected a phone number that is different from the numbers that participate in this conversation. If you send a message from/to a different number than the 2 numbers that participate in the current conversation, you will begin or continue a different conversation. Thus, your message won't appear in the current conversation, but in a different one."); } }); $("#selectToNbConv").change(function() { if ($(this).val().indexOf(": ") > -1) { var selNmbrto = $(this).val().split(": ")[1]; } else { var selNmbrto = $(this).val(); } if (selNmbrto != phNumberFrom && selNmbrto != phNumberTo) { showAlert("You have selected a phone number that is different from the numbers that participate in this conversation. If you send a message from/to a different number than the 2 numbers that participate in the current conversation, you will begin or continue a different conversation. Thus, your message won't appear in the current conversation, but in a different one."); } }); } else { $("#selectFromNbConv").append(""); $("#selectToNbConv").append(""); } // Send a message from the reply section $("#sendMsgBtnConv").click(function() { $("#sendMsgConvSec,#sendMsgBtnConv").addClass('icon-loading'); var msgToSend = $("#sendMsgConvTextSec").val(); var selectedid = $("#selectFromNbConv").val(); var toNumberinit = $("#selectToNbConv").val().split("+"); var toNumber = "+" + toNumberinit[1]; var receiversNumbers = [toNumber]; if (selectedid != '') { var sendersplit = selectedid.split(":"); var providercap = sendersplit[0]; var provsec = sendersplit[1]; if (/[a-zA-Z]/.test(provsec)) { var alphanumcheck = true; } else { var alphanumcheck = false; } if (providercap == 'Tx' && alphanumcheck == false) { var senderproc = selectedid.replace(/[^0-9]/g, ""); var selectedsender = "+" + senderproc; var providerUsed = "telnyx"; var relbaseUrl = OC.generateUrl("/apps/sms_relentless/user/sendsmstel"); } else if (providercap == 'Pl' && alphanumcheck == false) { var selectedsender = selectedid.replace(/[^0-9]/g, ""); var providerUsed = "plivo"; var relbaseUrl = OC.generateUrl("/apps/sms_relentless/user/sendsmsnex"); } else if (providercap == 'Tw' && alphanumcheck == false) { var senderproc = selectedid.replace(/[^0-9]/g, ""); var selectedsender = "+" + senderproc; var providerUsed = "twilio"; var relbaseUrl = OC.generateUrl("/apps/sms_relentless/user/sendsmstwil"); } else if (providercap == 'Fl' && alphanumcheck == false) { var senderproc = selectedid.replace(/[^0-9]/g, ""); var selectedsender = "+" + senderproc; var providerUsed = "flowroute"; var relbaseUrl = OC.generateUrl("/apps/sms_relentless/user/sendsmsflow"); } else if (providercap == 'Tx' && alphanumcheck == true) { var selectedsender = provsec; var providerUsed = "telnyx"; var relbaseUrl = OC.generateUrl("/apps/sms_relentless/user/sendsmstel"); } else if (providercap == 'Pl' && alphanumcheck == true) { var selectedsender = provsec; var providerUsed = "plivo"; var relbaseUrl = OC.generateUrl("/apps/sms_relentless/user/sendsmsnex"); } else if (providercap == 'Tw' && alphanumcheck == true) { var selectedsender = provsec; var providerUsed = "twilio"; var relbaseUrl = OC.generateUrl("/apps/sms_relentless/user/sendsmstwil"); } else if (providercap == 'Fl' && alphanumcheck == true) { var selectedsender = provsec; var providerUsed = "flowroute"; var relbaseUrl = OC.generateUrl("/apps/sms_relentless/user/sendsmsflow"); } var uploadedtomms = []; if (msgToSend != '') { $.ajax({ url: relbaseUrl + '/' + userid, type: "POST", data: { receiversPhoneNbs: receiversNumbers, fromsender: selectedsender, waitinterval: 1000, sentsmstext: msgToSend, ismms: 0, mmsfiles: uploadedtomms }, success: function(displayname) { var tzdate = new Date(); var presDatest = new Date(tzdate.getTime() - (tzdate.getTimezoneOffset() * 60000)).toJSON(); var presDatedb = presDatest.split(".")[0]; var presDatesc = presDatedb.split("T"); var presDate = presDatesc[0] +" "+ presDatesc[1]; var sentMessageStatus = ''; if (displayname) { var msgToSendproc = ""+ displayname + ":" + msgToSend; } else { var msgToSendproc = msgToSend; } $("#convListRowCell").append("
From: "+ selectedsender +"
To: "+ receiversNumbers[0] +"
"+ msgToSendproc +"
"+ presDate +"
"+ sentMessageStatus +"
"); // Scroll down to the bottom of the window $("#conversationsText").animate({scrollTop:$("#conversationsText").prop("scrollHeight")},200); $("#sendMsgConvSec,#sendMsgBtnConv").removeClass('icon-loading'); }, error: function() { showAlert("Error while sending the message. You can check your Nextcloud log to find out more about this issue."); $("#sendMsgConvSec,#sendMsgBtnConv").removeClass('icon-loading'); } }); } else { showAlert("Please enter a message in the text box!"); $("#sendMsgConvSec,#sendMsgBtnConv").removeClass('icon-loading'); } } else { showAlert("Please choose a Sender ID from the 'From' drop-down list!"); $("#sendMsgConvSec,#sendMsgBtnConv").removeClass('icon-loading'); } }); // Show the list with conversation participants $("#grpdbynamelstcv").empty(); $("#grpdbynamelstcv").append("
"); $("#grpdbynamelstcv").append(displayNames); $("#convParticipants").click(function() { if ($("#grpdbynamelstcv").is(":visible")) { $("#grpdbynamelstcv").css("display", "none"); $("#convParticipants").removeClass("convPartRed"); $("#convParticipants").addClass("convPart"); $("#convParticipants").prop("title", "Show the list with conversation participants."); } else { $("#grpdbynamelstcv").css("display", "block"); $("#convParticipants").removeClass("convPart"); $("#convParticipants").addClass("convPartRed"); $("#convParticipants").prop("title", "Close the list with conversation participants."); $("#closeConvPart").click(function() { $("#grpdbynamelstcv").css("display", "none"); $("#convParticipants").removeClass("convPartRed"); $("#convParticipants").addClass("convPart"); $("#convParticipants").prop("title", "Show the list with conversation participants."); }); } }); // Store the messages for the current From number, to be able to see them later let rowMessageArrcpt = []; for (let m = 0; m < convData.length; m++) { if (convData[m]['direction'] == 'sent_from') { if (convData[m]['status']) { if (convData[m]['status'].indexOf("delivered") > -1 || convData[m]['status'].indexOf("delivery success") > -1 || convData[m]['status'].indexOf("Retrieved") > -1) { if (convData[m]['status'].indexOf("undelivered") > -1) { var sentMsgStatus = ""; } else { var sentMsgStatus = ""; } } else { var sentMsgStatus = ""; } } else { var sentMsgStatus = ""; } rowMessageArrcpt.push("
From: "+ convData[m]['from'] +"
To: "+ convData[m]['to'] +"
"+ convData[m]['message'] +"
"+ convData[m]['date'] +"
"+ sentMsgStatus +"
"); } else if (convData[m]['direction'] == 'sent_to') { if (convData[m]['status']) { if (convData[m]['status'].indexOf("delivered") > -1 || convData[m]['status'].indexOf("delivery success") > -1 || convData[m]['status'].indexOf("Retrieved") > -1) { if (convData[m]['status'].indexOf("undelivered") > -1) { var sentMsgStatus = ""; } else { var sentMsgStatus = ""; } } else { var sentMsgStatus = ""; } } else { var sentMsgStatus = ""; } rowMessageArrcpt.push("
From: "+ convData[m]['from'] +"
To: "+ convData[m]['to'] +"
"+ convData[m]['message'] +"
"+ convData[m]['date'] +"
"+ sentMsgStatus +"
"); } else if (convData[m]['direction'] == 'received_from') { rowMessageArrcpt.push("
From: "+ convData[m]['from'] +"
To: "+ convData[m]['to'] +"
"+ convData[m]['message'] +"
"+ convData[m]['date'] +"
"); } else if (convData[m]['direction'] == 'received_on') { rowMessageArrcpt.push("
From: "+ convData[m]['from'] +"
To: "+ convData[m]['to'] +"
"+ convData[m]['message'] +"
"+ convData[m]['date'] +"
"); } } messagesPerNmbr[phNumberFrom] = rowMessageArrcpt; // Scroll down to the bottom of the window $("#conversationsText").animate({scrollTop: $("#conversationsText").prop("scrollHeight")},200); // Load more messages var clickNmb = 0; $("#loadMoreMsgs").unbind("click"); $("#loadMoreMsgs").click(function() { clickNmb++; var crefnb = (clickNmb + 1) * nmbToBeLoaded; if (crefnb > convData.length) { var nmbmsg = convData.length - 1; $("#loadMoreMsgs").css("display", "none"); } else { var nmbmsg = crefnb - 1; } let rowMessageArrAdd = []; for (let m = nmbmsg; m >= clickNmb * nmbToBeLoaded; m--) { if (convData[m]['direction'] == 'sent_from') { if (convData[m]['status']) { if (convData[m]['status'].indexOf("delivered") > -1 || convData[m]['status'].indexOf("delivery success") > -1 || convData[m]['status'].indexOf("Retrieved") > -1) { if (convData[m]['status'].indexOf("undelivered") > -1) { var sentMsgStatus = ""; } else { var sentMsgStatus = ""; } } else { var sentMsgStatus = ""; } } else { var sentMsgStatus = ""; } rowMessageArrAdd.push("
From: "+ convData[m]['from'] +"
To: "+ convData[m]['to'] +"
"+ convData[m]['message'] +"
"+ convData[m]['date'] +"
"+ sentMsgStatus +"
"); } else if (convData[m]['direction'] == 'sent_to') { if (convData[m]['status']) { if (convData[m]['status'].indexOf("delivered") > -1 || convData[m]['status'].indexOf("delivery success") > -1 || convData[m]['status'].indexOf("Retrieved") > -1) { if (convData[m]['status'].indexOf("undelivered") > -1) { var sentMsgStatus = ""; } else { var sentMsgStatus = ""; } } else { var sentMsgStatus = ""; } } else { var sentMsgStatus = ""; } rowMessageArrAdd.push("
From: "+ convData[m]['from'] +"
To: "+ convData[m]['to'] +"
"+ convData[m]['message'] +"
"+ convData[m]['date'] +"
"+ sentMsgStatus +"
"); } else if (convData[m]['direction'] == 'received_from') { rowMessageArrAdd.push("
From: "+ convData[m]['from'] +"
To: "+ convData[m]['to'] +"
"+ convData[m]['message'] +"
"+ convData[m]['date'] +"
"); } else if (convData[m]['direction'] == 'received_on') { rowMessageArrAdd.push("
From: "+ convData[m]['from'] +"
To: "+ convData[m]['to'] +"
"+ convData[m]['message'] +"
"+ convData[m]['date'] +"
"); } } let convDataPerNmbrad = rowMessageArrAdd.join(""); let scrlheight = $("#convListRowCell").height(); $("#convListRowCell").prepend(convDataPerNmbrad); $("#conversationsText").animate({scrollTop: $("#convListRowCell").height() - scrlheight}, 0); }); // Show the messages sent by each user whose name is clicked $('[id*="diplNm_"]').click(function() { let crntNmbr = $(this).attr("id").split("_")[1]; let crntDisName = $(this).attr("name"); $("#loadMoreMsgs").css("display", "none"); let convDataprn = []; $.each(msgsNmbrsNames[crntNmbr][crntDisName], function(index, item) { convDataprn.push(item); }); // If the total number of messages is greater than the default number of messages to display, show the 'Load more messages' button if (convDataprn.length > nmbTblDefault) { $("#loadMoreMsgsusr").css("display", "block"); let nmbToBeLoaded = nmbTblDefault; } else { $("#loadMoreMsgsusr").css("display", "none"); let nmbToBeLoaded = convDataprn.length; } let rowMessageArrprnst = []; for (let n = nmbToBeLoaded - 1; n >= 0; n--) { rowMessageArrprnst.push(convDataprn[n]); } let convDataPerNmbrprnst = rowMessageArrprnst.join(""); $("#convListRowCell").empty(); $("#convListRowCell").append(convDataPerNmbrprnst); // Scroll down to the bottom of the window $("#conversationsText").animate({scrollTop: $("#conversationsText").prop("scrollHeight")}, 200); // Load more messages var clckNb = 0; $("#loadMoreMsgsusr").unbind("click"); $("#loadMoreMsgsusr").click(function() { clckNb++; var crefnb = (clckNb + 1) * nmbToBeLoaded; $("#loadMoreMsgs").css("display", "none"); if (crefnb > convDataprn.length) { var nmbmsg = convDataprn.length - 1; $("#loadMoreMsgsusr").css("display", "none"); } else { var nmbmsg = crefnb - 1; $("#loadMoreMsgsusr").css("display", "block"); } var rowMessageArrAddst = []; for (var q = nmbmsg; q >= clckNb * nmbToBeLoaded; q--) { rowMessageArrAddst.push(convDataprn[q]); } var convDataPerNmbradst = rowMessageArrAddst.join(""); let scrlheight = $("#convListRowCell").height(); $("#convListRowCell").prepend(convDataPerNmbradst); $("#conversationsText").animate({scrollTop: $("#convListRowCell").height() - scrlheight }, 0); }); $(".dispNameList").each(function() { $(this).css("color", "#0a559e"); }); $("#diplNmAllMsgcv").css("color", "#04957b"); $(this).css("color", "#1b8efe"); }); // Show again all the messages exchanged between the current 2 phone numbers $("#diplNmAllMsgcv").click(function() { $("#loadMoreMsgsusr").css("display", "none"); let convDataprn = []; $.each(messagesPerNmbr[phNumberFrom], function(index, item) { convDataprn.push(item); }); // If the total number of messages is greater than the default number of messages to display, show the 'Load more messages' button if (convDataprn.length > nmbTblDefault) { $("#loadMoreMsgs").css("display", "block"); let nmbToBeLoaded = nmbTblDefault; } else { $("#loadMoreMsgs").css("display", "none"); let nmbToBeLoaded = convDataprn.length; } let rowMessageArrprnst = []; for (let n = nmbToBeLoaded - 1; n >= 0; n--) { rowMessageArrprnst.push(convDataprn[n]); } let convDataPerNmbrprnst = rowMessageArrprnst.join(""); $("#convListRowCell").empty(); $("#convListRowCell").append(convDataPerNmbrprnst); // Scroll down to the bottom of the window $("#conversationsText").animate({scrollTop: $("#conversationsText").prop("scrollHeight")}, 200); // Load more messages let clckNb = 0; $("#loadMoreMsgs").unbind("click"); $("#loadMoreMsgs").click(function() { clckNb++; var crefnb = (clckNb + 1) * nmbToBeLoaded; $("#loadMoreMsgsusr").css("display", "none"); if (crefnb > convDataprn.length) { var nmbmsg = convDataprn.length - 1; $("#loadMoreMsgs").css("display", "none"); } else { var nmbmsg = crefnb - 1; $("#loadMoreMsgs").css("display", "block"); } let rowMessageArrAddst = []; for (var q = nmbmsg; q >= clckNb * nmbToBeLoaded; q--) { rowMessageArrAddst.push(convDataprn[q]); } let convDataPerNmbradst = rowMessageArrAddst.join(""); let scrlheight = $("#convListRowCell").height(); $("#convListRowCell").prepend(convDataPerNmbradst); $("#conversationsText").animate({scrollTop: $("#convListRowCell").height() - scrlheight }, 0); }); $(".dispNameList").each(function() { $(this).css("color", "#0a559e"); }); $("#diplNmAllMsgcv").css("color", "#04957b"); $(this).css("color", "#04c6a4"); }); // Show the scroll-up arrow $("#conversationsText").scroll(function() { if ($(this).scrollTop() > 900) { $('#upArrow').fadeIn(); } else { $('#upArrow').fadeOut(); } }); $("#upArrow").click(function(e) { $("#conversationsText").animate({scrollTop: 0}, 400); }); // Download MMS files when clicking on their URLs $('[id^="mmsTblUrl-"]').on('click', function(evt) { var clckedUrl = $(this).text(); var flNamearr = clckedUrl.split("/"); var flName = flNamearr.reverse()[0]; confirmAlert("Download this file only if you trust the sender and the domain of the URL."); $("#confirmOk").click(function() { $("#alertMsgOverlay").remove(); $("#alertConfMessage").remove(); var mmsLink = document.createElement("a"); mmsLink.setAttribute('href', clckedUrl); mmsLink.setAttribute('download', flName); mmsLink.setAttribute('target', '_blank'); document.body.appendChild(mmsLink); mmsLink.click(); mmsLink.remove(); }); $("#confirmCancel").click(function() { $("#alertMsgOverlay").remove(); $("#alertConfMessage").remove(); }); }); // Archive/Unarchive the current conversation $("#archUnarchAct").click(function() { if (archivedConv == 1) { confirmAlert("Do you really want to unarchive this conversation ?"); $("#confirmCancel").click(function() { $("#alertMsgOverlay").remove(); $("#alertConfMessage").remove(); }); $("#confirmOk").click(function() { $("#alertMsgOverlay").remove(); $("#alertConfMessage").remove(); var unarchiveUrl = OC.generateUrl("/apps/sms_relentless/user/unarchiveconv"); $('#smstables').addClass('icon-loading'); $.ajax({ url: unarchiveUrl + '/' + userid, type: "POST", data: { "conversationId": conversationId }, success: function(respunarch) { if (respunarch == "success") { $('#smstables').removeClass('icon-loading'); // Refresh the conversations list and the current conversation $('#smstables').empty(); $("#conversationsshow").click(); setTimeout(function() { $(".convsListAct").each(function() { if ($(this).find('[id^="activeImg-"]').data("conversationid") == conversationId) { let actCvIda = $(this).attr("id"); document.getElementById(actCvIda).click(); } }); }, 800); } else { showAlert("There was an error while unarchiving the conversation !"); } }, error: function() { showAlert("Error while attempting to unarchive the conversation."); $('#smstables').removeClass('icon-loading'); } }); }); } else { confirmAlert("Do you really want to archive this conversation ?"); $("#confirmCancel").click(function() { $("#alertMsgOverlay").remove(); $("#alertConfMessage").remove(); }); $("#confirmOk").click(function() { $("#alertMsgOverlay").remove(); $("#alertConfMessage").remove(); var archiveUrl = OC.generateUrl("/apps/sms_relentless/user/archiveconv"); $('#smstables').addClass('icon-loading'); $.ajax({ url: archiveUrl + '/' + userid, type: "POST", data: { "conversationId": conversationId }, success: function(resparch) { if (resparch == "success") { $('#smstables').removeClass('icon-loading'); // Refresh the conversations list and the current conversation $('#smstables').empty(); $("#conversationsshow").click(); setTimeout(function() { $(".convsListArch").each(function() { if ($(this).find('[id^="archivedImg-"]').data("conversationid") == conversationId) { let actCvIdb = $(this).attr("id"); document.getElementById(actCvIdb).click(); } }); }, 800); } else { showAlert("There was an error while archiving the conversation !"); } }, error: function() { showAlert("Error while attempting to archive the conversation."); $('#smstables').removeClass('icon-loading'); } }); }); } }); }, error: function() { showAlert("Error while attempting to get conversation messages from the database!"); $('#listAllMsgsConv').removeClass('icon-loading'); } }); } $('[id^="indArchConv-"]').click(function() { $(".convsListArch").each(function(){ $(this).css("background-color", "rgb(252, 245, 251)"); }); $(".convsListAct").each(function(){ $(this).css("background-color", "rgb(239, 252, 252)"); }); $(this).css("background-color", "rgb(241, 224, 239)"); let crtordnmbr = $(this).attr("id").replace("indArchConv-", ""); let phnNmbrFrom = $("#indArchCvFrom-"+ crtordnmbr).text().split(": ")[1]; let phnNmbrTo = $("#indArchCvTo-"+ crtordnmbr).text().split(": ")[1]; let conversationId = $(this).find('[id^="archivedImg-"]').data("conversationid"); let archivedConv = $(this).find('[id^="archivedImg-"]').data("archivedyesno"); let archivedBy = $(this).find('[id^="archivedImg-"]').data("archdispname"); let unarchivedBy = $(this).find('[id^="archivedImg-"]').data("unarchdispname"); let lastArchived = $(this).find('[id^="archivedImg-"]').data("lastarchived"); let lastUnarchived = $(this).find('[id^="archivedImg-"]').data("lastunarchived"); let flagged = $(this).find('[id^="archivedImg-"]').data("flagged"); let flagunflagby = $(this).find('[id^="archivedImg-"]').data("flagunflagby"); let flagunflagdate = $(this).find('[id^="archivedImg-"]').data("flagunflagdate"); let tag = $(this).find('[id^="archivedImg-"]').data("tag"); let taguntagby = $(this).find('[id^="archivedImg-"]').data("taguntagby"); let taguntagdate = $(this).find('[id^="archivedImg-"]').data("taguntagdate"); let convdescription = $(this).find('[id^="archivedImg-"]').data("convdescription"); let convdescchangeby = $(this).find('[id^="archivedImg-"]').data("convdescchangeby"); let convdescchangedate = $(this).find('[id^="archivedImg-"]').data("convdescchangedate"); $("#conversationsText").empty(); getMsgsForNmbrs(phnNmbrFrom, phnNmbrTo, conversationId, archivedConv, archivedBy, unarchivedBy, lastArchived, lastUnarchived, flagged, flagunflagby, flagunflagdate, tag, taguntagby, taguntagdate, convdescription, convdescchangeby, convdescchangedate); }); $('[id^="indActConv-"]').click(function() { $(".convsListArch").each(function(){ $(this).css("background-color", "rgb(252, 245, 251)"); }); $(".convsListAct").each(function(){ $(this).css("background-color", "rgb(239, 252, 252)"); }); $(this).css("background-color", "rgb(215, 239, 239)"); let crtordnmbr = $(this).attr("id").replace("indActConv-", ""); let phnNmbrFrom = $("#indActCvFrom-"+ crtordnmbr).text().split(": ")[1]; let phnNmbrTo = $("#indActCvTo-"+ crtordnmbr).text().split(": ")[1]; let conversationId = $(this).find('[id^="activeImg-"]').data("conversationid"); let archivedConv = $(this).find('[id^="activeImg-"]').data("archivedyesno"); let archivedBy = $(this).find('[id^="activeImg-"]').data("archdispname"); let unarchivedBy = $(this).find('[id^="activeImg-"]').data("unarchdispname"); let lastArchived = $(this).find('[id^="activeImg-"]').data("lastarchived"); let lastUnarchived = $(this).find('[id^="activeImg-"]').data("lastunarchived"); let flagged = $(this).find('[id^="activeImg-"]').data("flagged"); let flagunflagby = $(this).find('[id^="activeImg-"]').data("flagunflagby"); let flagunflagdate = $(this).find('[id^="activeImg-"]').data("flagunflagdate"); let tag = $(this).find('[id^="activeImg-"]').data("tag"); let taguntagby = $(this).find('[id^="activeImg-"]').data("taguntagby"); let taguntagdate = $(this).find('[id^="activeImg-"]').data("taguntagdate"); let convdescription = $(this).find('[id^="activeImg-"]').data("convdescription"); let convdescchangeby = $(this).find('[id^="activeImg-"]').data("convdescchangeby"); let convdescchangedate = $(this).find('[id^="activeImg-"]').data("convdescchangedate"); $("#conversationsText").empty(); getMsgsForNmbrs(phnNmbrFrom, phnNmbrTo, conversationId, archivedConv, archivedBy, unarchivedBy, lastArchived, lastUnarchived, flagged, flagunflagby, flagunflagdate, tag, taguntagby, taguntagdate, convdescription, convdescchangeby, convdescchangedate); }); } convListContent(); // Add the filter section $("#convArchAndActive").prepend("
"); // Add the 'Filter by flag' filter $("#convArchAndActive").prepend("
"); $("#flagFilter").change(function() { var flagSel = $(this).val(); $(".convsLst").each(function() { $(this).remove(); }); $("#totalConvNmbr").remove(); $('#tagFilter option[value="filterbytag"]').prop("selected", true); $("#flagFilter").css("background-color", "#f5f0ff"); $("#tagFilter").css("background-color", "#f0fbff"); if (flagSel == "flagged") { if (archivedConvNmbr == 0) { // Don't list any archived conversations var archivedCvNbf = 0; } else if (archivedConvNmbr != 0 && archivedConvNmbr != null) { var archInd = 0; let fcnv = (archivedConvNmbr <= convArchived.length)? convArchived.length - archivedConvNmbr : 0; for (let s = fcnv; s < convArchived.length; s++) { if (convArchived[s]['flagged'] == 1) { var emptyRedFlags = "cvFlagRed"; if (convArchived[s]['tag'] != "") { var cvTagTxts = convArchived[s]['tag']; var cvTagAdds = "convTagAdded"; } else { var cvTagTxts = ""; var cvTagAdds = "convTag"; } var cvDescAdds = (convArchived[s]['description'] != "")? "convDescAdded" : "convDesc"; $("#convArchAndActive").append("
From: "+ convArchived[s]['last_msg_from'] +"
To: "+ convArchived[s]['last_msg_to'] +"
"+ convArchived[s]['lastmsgdisplayname'] +":"+ convArchived[s]['last_message'] +"
"+ convArchived[s]['last_msg_date'] +"
"+ cvTagTxts +"
"); archInd++; } } var archivedCvNbf = archInd; } else { var archInd = 0; for (let a = 0; a < convArchived.length; a++) { if (convArchived[a]['flagged'] == 1) { var emptyRedFlaga = "cvFlagRed"; if (convArchived[a]['tag'] != "") { var cvTagTxta = convArchived[a]['tag']; var cvTagAdda = "convTagAdded"; } else { var cvTagTxta = ""; var cvTagAdda = "convTag"; } var cvDescAdda = (convArchived[a]['description'] != "")? "convDescAdded" : "convDesc"; $("#convArchAndActive").append("
From: "+ convArchived[a]['last_msg_from'] +"
To: "+ convArchived[a]['last_msg_to'] +"
"+ convArchived[a]['lastmsgdisplayname'] +":"+ convArchived[a]['last_message'] +"
"+ convArchived[a]['last_msg_date'] +"
"+ cvTagTxta +"
"); archInd++; } } var archivedCvNbf = archInd; } var actInd = 0; for (let t = 0; t < convActive.length; t++) { if (convActive[t]['flagged'] == 1) { var emptyRedFlagt = "cvFlagRed"; if (convActive[t]['tag'] != "") { var cvTagTxtt = convActive[t]['tag']; var cvTagAddt = "convTagAdded"; } else { var cvTagTxtt = ""; var cvTagAddt = "convTag"; } var cvDescAddt = (convActive[t]['description'] != "")? "convDescAdded" : "convDesc"; $("#convArchAndActive").append("
From: "+ convActive[t]['last_msg_from'] +"
To: "+ convActive[t]['last_msg_to'] +"
"+ convActive[t]['lastmsgdisplayname'] +":"+ convActive[t]['last_message'] +"
"+ convActive[t]['last_msg_date'] +"
"+ cvTagTxtt +"
"); actInd++; } } var totalConvNbf = archivedCvNbf + actInd; } else if (flagSel == "unflagged") { if (archivedConvNmbr == 0) { // Don't list any archived conversations var archivedCvNbf = 0; } else if (archivedConvNmbr != 0 && archivedConvNmbr != null) { var archInd = 0; let fcnv = (archivedConvNmbr <= convArchived.length)? convArchived.length - archivedConvNmbr : 0; for (let s = fcnv; s < convArchived.length; s++) { if (convArchived[s]['flagged'] != 1) { var emptyRedFlags = "cvFlagEmpty"; if (convArchived[s]['tag'] != "") { var cvTagTxts = convArchived[s]['tag']; var cvTagAdds = "convTagAdded"; } else { var cvTagTxts = ""; var cvTagAdds = "convTag"; } var cvDescAdds = (convArchived[s]['description'] != "")? "convDescAdded" : "convDesc"; $("#convArchAndActive").append("
From: "+ convArchived[s]['last_msg_from'] +"
To: "+ convArchived[s]['last_msg_to'] +"
"+ convArchived[s]['lastmsgdisplayname'] +":"+ convArchived[s]['last_message'] +"
"+ convArchived[s]['last_msg_date'] +"
"+ cvTagTxts +"
"); archInd++; } } var archivedCvNbf = archInd; } else { var archInd = 0; for (let a = 0; a < convArchived.length; a++) { if (convArchived[a]['flagged'] != 1) { var emptyRedFlaga = "cvFlagEmpty"; if (convArchived[a]['tag'] != "") { var cvTagTxta = convArchived[a]['tag']; var cvTagAdda = "convTagAdded"; } else { var cvTagTxta = ''; var cvTagAdda = "convTag"; } var cvDescAdda = (convArchived[a]['description'] != "")? "convDescAdded" : "convDesc"; $("#convArchAndActive").append("
From: "+ convArchived[a]['last_msg_from'] +"
To: "+ convArchived[a]['last_msg_to'] +"
"+ convArchived[a]['lastmsgdisplayname'] +":"+ convArchived[a]['last_message'] +"
"+ convArchived[a]['last_msg_date'] +"
"+ cvTagTxta +"
"); archInd++; } } var archivedCvNbf = archInd; } var actInd = 0; for (let t = 0; t < convActive.length; t++) { if (convActive[t]['flagged'] != 1) { var emptyRedFlagt = "cvFlagEmpty"; if (convActive[t]['tag'] != "") { var cvTagTxtt = convActive[t]['tag']; var cvTagAddt = "convTagAdded"; } else { var cvTagTxtt = ""; var cvTagAddt = "convTag"; } var cvDescAddt = (convActive[t]['description'] != "")? "convDescAdded" : "convDesc"; $("#convArchAndActive").append("
From: "+ convActive[t]['last_msg_from'] +"
To: "+ convActive[t]['last_msg_to'] +"
"+ convActive[t]['lastmsgdisplayname'] +":"+ convActive[t]['last_message'] +"
"+ convActive[t]['last_msg_date'] +"
"+ cvTagTxtt +"
"); actInd++; } } var totalConvNbf = archivedCvNbf + actInd; } // Add the row that specifies the number of conversations displayed $("#convArchAndActive").append("
"+ totalConvNbf +" conversations displayed ("+ archivedCvNbf +""+ actInd +" )
"); // Remove the empty display names, if any $(".msgAuthorNameConv").each(function() { if ($(this).text() == ":") { $(this).remove(); } }); convListContent(); }); // Clear the flag filter $("#clearFlagFilter").click(function() { $("#conversationsshow").click(); }); // Add the 'Filter by tag' filter var selectTagOpt = ""; for (let v = 0; v < taggsArr.length; v++) { selectTagOpt += ""; } selectTagOpt += ""; $("#convArchAndActive").prepend("
"); $("#tagFilter").change(function() { var tagSel = $(this).val(); $(".convsLst").each(function() { $(this).remove(); }); $("#totalConvNmbr").remove(); $('#flagFilter option[value="filterbyflag"]').prop("selected", true); $("#tagFilter").css("background-color", "#f5f0ff"); $("#flagFilter").css("background-color", "#f0fbff"); if (archivedConvNmbr == 0) { // Don't list any archived conversations var archivedCvNbt = 0; } else if (archivedConvNmbr != 0 && archivedConvNmbr != null) { var archIndt = 0; let fcnv = (archivedConvNmbr <= convArchived.length)? convArchived.length - archivedConvNmbr : 0; for (let s = fcnv; s < convArchived.length; s++) { if (String(convArchived[s]['tag']) == tagSel) { var emptyRedFlags = (convArchived[s]['flagged'] == 1)? "cvFlagRed" : "cvFlagEmpty"; if (convArchived[s]['tag'] != "") { var cvTagTxts = convArchived[s]['tag']; var cvTagAdds = "convTagAdded"; } else { var cvTagTxts = ""; var cvTagAdds = "convTag"; } var cvDescAdds = (convArchived[s]['description'] != "")? "convDescAdded" : "convDesc"; $("#convArchAndActive").append("
From: "+ convArchived[s]['last_msg_from'] +"
To: "+ convArchived[s]['last_msg_to'] +"
"+ convArchived[s]['lastmsgdisplayname'] +":"+ convArchived[s]['last_message'] +"
"+ convArchived[s]['last_msg_date'] +"
"+ cvTagTxts +"
"); archIndt++; } } var archivedCvNbt = archIndt; } else { var archIndt = 0; for (let a = 0; a < convArchived.length; a++) { if (String(convArchived[a]['tag']) == tagSel) { var emptyRedFlaga = (convArchived[a]['flagged'] == 1)? "cvFlagRed" : "cvFlagEmpty"; if (convArchived[a]['tag'] != "") { var cvTagTxta = convArchived[a]['tag']; var cvTagAdda = "convTagAdded"; } else { var cvTagTxta = ""; var cvTagAdda = "convTag"; } var cvDescAdda = (convArchived[a]['description'] != "")? "convDescAdded" : "convDesc"; $("#convArchAndActive").append("
From: "+ convArchived[a]['last_msg_from'] +"
To: "+ convArchived[a]['last_msg_to'] +"
"+ convArchived[a]['lastmsgdisplayname'] +":"+ convArchived[a]['last_message'] +"
"+ convArchived[a]['last_msg_date'] +"
"+ cvTagTxta +"
"); archIndt++; } } var archivedCvNbt = archIndt; } var actIndt = 0; for (let t = 0; t < convActive.length; t++) { if (String(convActive[t]['tag']) == tagSel) { var emptyRedFlagt = (convActive[t]['flagged'] == 1)? "cvFlagRed" : "cvFlagEmpty"; if (convActive[t]['tag'] != "") { var cvTagTxtt = convActive[t]['tag']; var cvTagAddt = "convTagAdded"; } else { var cvTagTxtt = ""; var cvTagAddt = "convTag"; } var cvDescAddt = (convActive[t]['description'] != "")? "convDescAdded" : "convDesc"; $("#convArchAndActive").append("
From: "+ convActive[t]['last_msg_from'] +"
To: "+ convActive[t]['last_msg_to'] +"
"+ convActive[t]['lastmsgdisplayname'] +":"+ convActive[t]['last_message'] +"
"+ convActive[t]['last_msg_date'] +"
"+ cvTagTxtt +"
"); actIndt++; } } var totalConvNbt = archivedCvNbt + actIndt; // Add the row that specifies the number of conversations displayed $("#convArchAndActive").append("
"+ totalConvNbt +" conversations displayed ("+ archivedCvNbt +""+ actIndt +" )
"); // Remove the empty display names, if any $(".msgAuthorNameConv").each(function() { if ($(this).text() == ":") { $(this).remove(); } }); convListContent(); }); // Clear the tag filter $("#clearTagFilter").click(function() { $("#conversationsshow").click(); }); // Show/Hide the filters $("#filterSection").click(function() { if ($("#filterByTag").is(":visible")) { $("#filterByTag,#filterByFlag").css("display", "none"); $("#filterSection").css("background-color", "#f0fbff"); $("#filterSection").prop("title", "Click to show filters"); } else { $("#filterByTag,#filterByFlag").css("display", "block"); $("#filterSection").css("background-color", "#f0f5ff"); $("#filterSection").prop("title", "Click to hide filters"); } }); }, error: function() { showAlert("Error! You can check the Nextcloud log to find more details about this issue."); $('#smstables').removeClass('icon-loading'); } }); // Look for the 'new received message' indicator in the database, to know if the received messages list needs to be refreshed intervalNmfr = setInterval(function() { checkIfNewMessage(); }, newMsgInterval); }); // List grouped messages $("#groupedtableshow").on("click", function(event) { $('#smstables').empty(); $("#stopAutoRefreshSent").css("display", "none"); clearInterval(intervalNmfr); var getGroupedUrl = OC.generateUrl("/apps/sms_relentless/user/getgroupedtable"); $('#smstables').addClass('icon-loading'); var totalPhNmbrs = 0; $.ajax({ method: 'GET', url: getGroupedUrl + '/' + userid, contentType: 'application/json', success: function(groupedparsed) { $('#smstables').append("
Pages
"); $('#smstables').append("
"); $('#groupedSmsTable').append("
"); $('#groupedSmsTable').append("Phone NumberSenders / ReceiversMessages"); $('#grpfiltersrow').hide(); var fromtoNmbrsData = []; var fromtoNumberArr = []; for (var i = 0; i < groupedparsed.length; i++) { if (groupedparsed[i].author_displayname) { var authordnm = groupedparsed[i].author_displayname; } else { var authordnm = ''; } var sentfromnmbrarr = groupedparsed[i].from.split(": "); if (sentfromnmbrarr[1]) { var groupednbfrom = sentfromnmbrarr[1]; } else { var groupednbfrom = sentfromnmbrarr[0]; } var modmessage = ''; if (groupedparsed[i].author_displayname) { modmessage = ""+ groupedparsed[i].author_displayname + ":" + groupedparsed[i].message; } else { modmessage = groupedparsed[i].message; } if (groupedparsed[i].to.indexOf(": ") > -1) { var groupednmbrtopre = groupedparsed[i].to.split(": "); var groupednmbrto = groupednmbrtopre[1]; } else { var groupednmbrto = groupedparsed[i].to; } fromtoNmbrsData.push({ 'author_displayname': authordnm, 'from': groupednbfrom, 'to': groupednmbrto, 'message': modmessage, 'date': groupedparsed[i].date, 'status': groupedparsed[i].deliveryreceipt, 'table': groupedparsed[i].table }); if (fromtoNumberArr.indexOf(groupednbfrom) == -1) { fromtoNumberArr.push(groupednbfrom); } if (fromtoNumberArr.indexOf(groupednmbrto) == -1) { fromtoNumberArr.push(groupednmbrto); } } totalPhNmbrs = fromtoNumberArr.length; // Remove the duplicates var noDupMsgData = []; $.each(fromtoNmbrsData, function(i, e) { var matchingData = $.grep(noDupMsgData, function(item) { return item.from == e.from && item.to == e.to && item.message == e.message && item.table == 'received' && e.table == 'sent' }); if (matchingData.length === 0) { noDupMsgData.push(e); } }); var messagesPerNmbr = {}; var msgsNamesPerNmbr = {}; var msgsNmbrsNames = {}; for (var k = 0; k < fromtoNumberArr.length; k++) { var displayNamesarr = []; var convData = []; for (var n = 0; n < noDupMsgData.length; n++) { if (noDupMsgData[n]['from'] == fromtoNumberArr[k] && noDupMsgData[n]['table'] == 'sent') { convData.push({ 'author_displayname': noDupMsgData[n]['author_displayname'], 'message': noDupMsgData[n]['message'], 'from': noDupMsgData[n]['from'], 'to': noDupMsgData[n]['to'], 'date': noDupMsgData[n]['date'], 'direction': 'sent_from', 'status': (noDupMsgData[n]['status'] == null)? "" : noDupMsgData[n]['status'], 'table': noDupMsgData[n]['table'] }); } else if (noDupMsgData[n]['to'] == fromtoNumberArr[k] && noDupMsgData[n]['table'] == 'sent') { convData.push({ 'author_displayname': noDupMsgData[n]['author_displayname'], 'message': noDupMsgData[n]['message'], 'from': noDupMsgData[n]['from'], 'to': noDupMsgData[n]['to'], 'date': noDupMsgData[n]['date'], 'direction': 'sent_to', 'status': (noDupMsgData[n]['status'] == null)? "" : noDupMsgData[n]['status'], 'table': noDupMsgData[n]['table'] }); } else if (noDupMsgData[n]['from'] == fromtoNumberArr[k] && noDupMsgData[n]['table'] == 'received') { convData.push({ 'author_displayname': noDupMsgData[n]['author_displayname'], 'message': noDupMsgData[n]['message'], 'from': noDupMsgData[n]['from'], 'to': noDupMsgData[n]['to'], 'date': noDupMsgData[n]['date'], 'direction': 'received_from', 'status': (noDupMsgData[n]['status'] == null)? "" : noDupMsgData[n]['status'], 'table': noDupMsgData[n]['table'] }); } else if (noDupMsgData[n]['to'] == fromtoNumberArr[k] && noDupMsgData[n]['table'] == 'received') { convData.push({ 'author_displayname': noDupMsgData[n]['author_displayname'], 'message': noDupMsgData[n]['message'], 'from': noDupMsgData[n]['from'], 'to': noDupMsgData[n]['to'], 'date': noDupMsgData[n]['date'], 'direction': 'received_on', 'status': (noDupMsgData[n]['status'] == null)? "" : noDupMsgData[n]['status'], 'table': noDupMsgData[n]['table'] }); } } // Sort messages by date convData.sort(function(a, b) { return new Date(a.date) - new Date(b.date); }); // Collect the display names of the users that sent messages from the current number var selectedNames = []; var displayNames = ''; for (var v = 0; v < convData.length; v++) { if (selectedNames.indexOf(convData[v]['author_displayname']) == -1) { selectedNames.push(convData[v]['author_displayname']); displayNames += "
"+ convData[v]['author_displayname'] +"
"; } } // Store the display names for the current number, to be able to see them later when selecting the number from the drop-down list var ctPhNumber = fromtoNumberArr[k]; msgsNamesPerNmbr[ctPhNumber] = displayNames; // Store the messages sent by each user, to be able to see them later when clicking on the user's name for (var h = 0; h < selectedNames.length; h++) { var rowMessageArrpn = []; for (var b = 0; b < convData.length; b++) { if (selectedNames[h] == convData[b]['author_displayname']) { if (convData[b]['direction'] == 'sent_from') { if (convData[b]['status']) { if (convData[b]['status'].indexOf("delivered") > -1 || convData[b]['status'].indexOf("delivery success") > -1 || convData[b]['status'].indexOf("Retrieved") > -1) { if (convData[b]['status'].indexOf("undelivered") > -1) { var sentMsgStatus = ""; } else { var sentMsgStatus = ""; } } else { var sentMsgStatus = ""; } } else { var sentMsgStatus = ""; } rowMessageArrpn.push("
From: "+ convData[b]['from'] +"
To: "+ convData[b]['to'] +"
"+ convData[b]['message'] +"
"+ convData[b]['date'] +"
"+ sentMsgStatus +"
"); } else if (convData[b]['direction'] == 'sent_to') { if (convData[b]['status']) { if (convData[b]['status'].indexOf("delivered") > -1 || convData[b]['status'].indexOf("delivery success") > -1 || convData[b]['status'].indexOf("Retrieved") > -1) { if (convData[b]['status'].indexOf("undelivered") > -1) { var sentMsgStatus = ""; } else { var sentMsgStatus = ""; } } else { var sentMsgStatus = ""; } } else { var sentMsgStatus = ""; } rowMessageArrpn.push("
From: "+ convData[b]['from'] +"
To: "+ convData[b]['to'] +"
"+ convData[b]['message'] +"
"+ convData[b]['date'] +"
"+ sentMsgStatus +"
"); } else if (convData[b]['direction'] == 'received_from') { rowMessageArrpn.push("
From: "+ convData[b]['from'] +"
To: "+ convData[b]['to'] +"
"+ convData[b]['message'] +"
"+ convData[b]['date'] +"
"); } else if (convData[b]['direction'] == 'received_on') { rowMessageArrpn.push("
From: "+ convData[b]['from'] +"
To: "+ convData[b]['to'] +"
"+ convData[b]['message'] +"
"+ convData[b]['date'] +"
"); } } } var convDataPerNmbrpn = rowMessageArrpn.join("
"); var crtNmber = fromtoNumberArr[k]; var crtName = selectedNames[h]; msgsNmbrsNames[crtNmber] = msgsNmbrsNames[crtNmber] || {}; msgsNmbrsNames[crtNmber][crtName] = convDataPerNmbrpn; } var rowMessageArr = []; for (var m = 0; m < convData.length; m++) { if (convData[m]['direction'] == 'sent_from') { if (convData[m]['status']) { if (convData[m]['status'].indexOf("delivered") > -1 || convData[m]['status'].indexOf("delivery success") > -1 || convData[m]['status'].indexOf("Retrieved") > -1) { if (convData[m]['status'].indexOf("undelivered") > -1) { var sentMsgStatus = ""; } else { var sentMsgStatus = ""; } } else { var sentMsgStatus = ""; } } else { var sentMsgStatus = ""; } rowMessageArr.push("
From: "+ convData[m]['from'] +"
To: "+ convData[m]['to'] +"
"+ convData[m]['message'] +"
"+ convData[m]['date'] +"
"+ sentMsgStatus +"
"); } else if (convData[m]['direction'] == 'sent_to') { if (convData[m]['status']) { if (convData[m]['status'].indexOf("delivered") > -1 || convData[m]['status'].indexOf("delivery success") > -1 || convData[m]['status'].indexOf("Retrieved") > -1) { if (convData[m]['status'].indexOf("undelivered") > -1) { var sentMsgStatus = ""; } else { var sentMsgStatus = ""; } } else { var sentMsgStatus = ""; } } else { var sentMsgStatus = ""; } rowMessageArr.push("
From: "+ convData[m]['from'] +"
To: "+ convData[m]['to'] +"
"+ convData[m]['message'] +"
"+ convData[m]['date'] +"
"+ sentMsgStatus +"
"); } else if (convData[m]['direction'] == 'received_from') { rowMessageArr.push("
From: "+ convData[m]['from'] +"
To: "+ convData[m]['to'] +"
"+ convData[m]['message'] +"
"+ convData[m]['date'] +"
"); } else if (convData[m]['direction'] == 'received_on') { rowMessageArr.push("
From: "+ convData[m]['from'] +"
To: "+ convData[m]['to'] +"
"+ convData[m]['message'] +"
"+ convData[m]['date'] +"
"); } } var convDataPerNmbr = rowMessageArr.join(""); var rowPhoneNumber = "
"+ fromtoNumberArr[k] +"
"; $("#groupedSmsTable").append("
"+ rowPhoneNumber +"
"+ displayNames +"
"+ convDataPerNmbr +"
"); $("#groupedSmsTable").append("
"); // Store the messages for the current number, to be able to see them later, when clicking on the number var ctNmbr = fromtoNumberArr[k]; messagesPerNmbr[ctNmbr] = convDataPerNmbr; } // Add the 'filter by number' drop-down list var nmbrslst = ""; for (var p = 0; p < fromtoNumberArr.length; p++) { nmbrslst += ""; } $("#filterByNumber").append(""); $("#selectListedNmbrs").change(function() { var selectedNmbr = $(this).val(); if (selectedNmbr != "title") { $(".groupedrowsbody,.groupedrowsexp").each(function() { $(this).hide(); }); $("#groupedSmsTable").append("
"+ selectedNmbr +"
"+ msgsNamesPerNmbr[selectedNmbr] +"
"+ messagesPerNmbr[selectedNmbr] +"
"); $("#groupedSmsTable").append("
"); // Show the messages sent by each user whose name is listed for the phone number of the current row $('[id*="diplNm_"]').click(function() { var crntNmbr = $(this).attr("id").split("_")[1]; var crntDisName = $(this).attr("name"); var clsmsgcell = $(this).closest(".groupedrowsbody").find(".groupedLstMsgs"); clsmsgcell.empty(); clsmsgcell.html(msgsNmbrsNames[crntNmbr][crntDisName]); $(".dispNameList").each(function() { $(this).css("color", "#0a559e"); }); $(this).css("color", "#1483f0"); $("#nmbrow_"+ selectedNmbr).css("color", "#06866f"); $(".groupedLstNmbr").each(function () { $(this).css("color", "#06866f"); }); }); // Show all the messages sent to/from the clicked number $('[id*="nmbrow_"]').click(function() { var rwNmbr = $(this).attr("id").replace("nmbrow_", ""); var rowmsgcell = $(this).closest(".groupedrowsbody").find(".groupedLstMsgs"); rowmsgcell.empty(); rowmsgcell.html(messagesPerNmbr[rwNmbr]); $(".phoneNmbrRow").each(function() { $(this).css("color", "#06866f"); }); $(".dispNameList").each(function() { $(this).css("color", "#0a559e"); }); $(this).css("color", "#08b899"); }); // Expand the rows to see all the messages $('[id^="expandRowfl_"]').click(function() { var idnumbrfl = $(this).attr("id").replace("expandRowfl_", ""); var crntExpandfl = $(this).find(".expandGrpRow"); if (crntExpandfl.attr('src') == '/' + ctappdir + '/sms_relentless/img/arrowDown.svg') { $("#singlerowfl_"+ idnumbrfl).find(".fixedRowHeight").removeClass("fixedRowHeight"); crntExpandfl.attr('src', '/' + ctappdir + '/sms_relentless/img/arrowUp.svg'); } else { $("#singlerowfl_"+ idnumbrfl).find(".groupedLstNmbr,.groupedLstNames,.groupedLstMsgs").addClass("fixedRowHeight"); crntExpandfl.attr('src', '/' + ctappdir + '/sms_relentless/img/arrowDown.svg'); } }); $('#totalgrpmessages').remove(); $('#smstables').append("
Total displayed phone numbers: 1
"); } }); // Clear the 'filter by number' filter $("#cleargrpfilter").click(function() { $('[id^="singlerowfl_"]').remove(); $('[id^="expandRowfl_"]').remove(); $(".groupedrowsbody,.groupedrowsexp").each(function() { $(this).show(); }); $("#selectListedNmbrs").val("title"); $('#totalgrpmessages').remove(); $('#smstables').append("
Total displayed phone numbers: "+ totalPhNmbrs +"
"); }); // Show the messages sent by each user whose name is listed for the phone number on the current row $('[id*="diplNm_"]').click(function() { var crntNmbr = $(this).attr("id").split("_")[1]; var crntDisName = $(this).attr("name"); var clsmsgcell = $(this).closest(".groupedrowsbody").find(".groupedLstMsgs"); clsmsgcell.empty(); clsmsgcell.html(msgsNmbrsNames[crntNmbr][crntDisName]); $(".dispNameList").each(function() { $(this).css("color", "#0a559e"); }); $(this).css("color", "#1483f0"); }); // Show all the messages sent to/from the clicked number $('[id*="nmbrow_"]').click(function() { var rwNmbr = $(this).attr("id").replace("nmbrow_", ""); var rowmsgcell = $(this).closest(".groupedrowsbody").find(".groupedLstMsgs"); rowmsgcell.empty(); rowmsgcell.html(messagesPerNmbr[rwNmbr]); $(".phoneNmbrRow").each(function() { $(this).css("color", "#06866f"); }); $(".dispNameList").each(function() { $(this).css("color", "#0a559e"); }); $(this).css("color", "#08b899"); }); $('#smstables').removeClass('icon-loading'); $('#recarrow').removeClass('arrowUpCl'); $('#recarrow').addClass('arrowDownCl'); // Expand the rows to see all the messages $('[id^="expandRow_"]').click(function() { var idnumbr = $(this).attr("id").replace("expandRow_", ""); var crntExpand = $(this).find(".expandGrpRow"); if (crntExpand.attr('src') == '/' + ctappdir + '/sms_relentless/img/arrowDown.svg') { $("#singlerow_"+ idnumbr).find(".fixedRowHeight").removeClass("fixedRowHeight"); crntExpand.attr('src', '/' + ctappdir + '/sms_relentless/img/arrowUp.svg'); } else { $("#singlerow_"+ idnumbr).find(".groupedLstNmbr,.groupedLstNames,.groupedLstMsgs").addClass("fixedRowHeight"); crntExpand.attr('src', '/' + ctappdir + '/sms_relentless/img/arrowDown.svg'); } }); // Add pagination var rowsShowngrp = messagesperpage; var rowsTotalgrp = $("#groupedSmsTable tr").length; var numPagesgrp = ((rowsTotalgrp - 2) / rowsShowngrp) / 2; for (i = 0; i < numPagesgrp; i++) { var pageNumgrp = i + 1; $('#paginationgrp').append('' + pageNumgrp + ' '); } $('#paginationgrp').children(":first").addClass('active'); $(".groupedrowsbody,.groupedrowsexp").hide(); $('#paginationgrp a:first').addClass('active'); // Show table page when clicking a page number $('.grppages a').bind('click', function() { $('#paginationgrp').children().removeClass('active'); $(this).addClass('active'); var currentPageNogrp = $(this).text(); $('#paginationgrp a').each(function() { if ($(this).text() == currentPageNogrp) { $(this).addClass('active'); } }); var currPagegrp = $(this).attr('rel'); var startItemgrp = currPagegrp * rowsShowngrp; var endItemgrp = startItemgrp + rowsShowngrp; $(".groupedrowsbody").hide().slice(startItemgrp, endItemgrp).css('display', 'table-row'); $(".groupedrowsexp").hide().slice(startItemgrp, endItemgrp).css('display', 'table-row'); $('#totalgrpmessages').remove(); $('#smstables').append("
Total displayed phone numbers: " + totalPhNmbrs + "
"); }); $('#paginationgrp').children(":last").trigger('click'); // Show/Hide filter row $('#recarrow').on('click', function() { if ($('#grpfiltersrow').is(':visible')) { $('#grpfiltersrow').hide(); $('#grpheaderrow').css('top', '0px'); $(this).removeClass('arrowUpCl'); $(this).addClass('arrowDownCl'); } else { $('#grpfiltersrow').show(); $('#grpheaderrow').css('top', '158px'); $(this).removeClass('arrowDownCl'); $(this).addClass('arrowUpCl'); } }); // Download MMS files when clicking on their URLs $('[id^="mmsTblUrl-"]').on('click', function(evt) { var clckedUrl = $(this).text(); var flNamearr = clckedUrl.split("/"); var flName = flNamearr.reverse()[0]; confirmAlert("Download this file only if you trust the sender and the domain of the URL."); $("#confirmOk").click(function() { $("#alertMsgOverlay").remove(); $("#alertConfMessage").remove(); var mmsLink = document.createElement("a"); mmsLink.setAttribute('href', clckedUrl); mmsLink.setAttribute('download', flName); mmsLink.setAttribute('target', '_blank'); document.body.appendChild(mmsLink); mmsLink.click(); mmsLink.remove(); }); $("#confirmCancel").click(function() { $("#alertMsgOverlay").remove(); $("#alertConfMessage").remove(); }); }); }, error: function() { showAlert("Error while attempting to get the messages from the database."); $('#smstables').removeClass('icon-loading'); } }); }); function showAlert(alertText) { let alertwnd = "
"; alertwnd += ""; alertwnd += "
"+ alertText +"
"; alertwnd += ""; alertwnd += "
"; $("#content").append("
"); $("#content").append(alertwnd); let topDist = parseInt((window.innerHeight / 2).toFixed(2) - 152) +"px"; let leftDist = parseInt((window.innerWidth / 2).toFixed(2) - 150) +"px"; $("#alertMessage").css({ "top" : topDist, "left" : leftDist }); $("#closeAlertWnd").click(function() { $("#alertMsgOverlay").remove(); $("#alertMessage").remove(); }); $("#alertMsgOverlay").click(function() { $("#alertMsgOverlay").remove(); $("#alertMessage").remove(); }); $("#alertOk").click(function() { $("#alertMsgOverlay").remove(); $("#alertMessage").remove(); }); } function confirmAlert(alertText) { $("#alertMsgOverlay").remove(); $("#alertConfMessage").remove(); let alertwndcf = "
"; alertwndcf += ""; alertwndcf += "
"+ alertText +"
"; alertwndcf += "
"; alertwndcf += "
"; alertwndcf += "
"; $("#content").append("
"); $("#content").append(alertwndcf); let topDist = parseInt((window.innerHeight / 2).toFixed(2) - 152) +"px"; let leftDist = parseInt((window.innerWidth / 2).toFixed(2) - 150) +"px"; $("#alertConfMessage").css({ "top" : topDist, "left" : leftDist }); $("#closeAlertWndcf").click(function() { $("#alertMsgOverlay").remove(); $("#alertConfMessage").remove(); }); $("#alertMsgOverlay").click(function() { $("#alertMsgOverlay").remove(); $("#alertConfMessage").remove(); }); } // Append the auto-refresh button that refreshes the 'Sent SMS Messages' page $("#app-content").append("
Start auto refresh
"); $("#stopAutoRefreshSentBtn").click(function() { if ($("#stopAutoRefreshSentBtn").text() == "Stop auto refresh") { clearInterval(intervalRfrSent); $("#stopAutoRefreshSentBtn").text("Start auto refresh"); $("#stopAutoRefreshSentBtn").css("color", "#0a559e"); $("#refreshTimerSent").css("display", "none"); } else { clearInterval(intervalRfrSent); intervalRfrSent = setInterval(function() { $("#sentsmstableshow").click(); }, 15000); $("#stopAutoRefreshSentBtn").text("Stop auto refresh"); $("#stopAutoRefreshSentBtn").css("color", "#04957b"); $("#refreshTimerSent").css("display", "inline-block"); } }); });