VaKeR CYBER ARMY
Logo of a company Server : Apache/2.4.41 (Ubuntu)
System : Linux absol.cf 5.4.0-198-generic #218-Ubuntu SMP Fri Sep 27 20:18:53 UTC 2024 x86_64
User : www-data ( 33)
PHP Version : 7.4.33
Disable Function : pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare,
Directory :  /var/www/html/tech_preview/hr/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Current File : //var/www/html/tech_preview/hr/chats.js
hr.chats.changeNameGroup = function(host, chatid, name){
    return new Promise(function(resolve, reject){
        FormClass.api_call({
            url: "chat_change_name_group.php",
            params: [
                {name: "chatid", value: chatid},
                {name: "name", value: name}
            ],
            func: function(success, message){
                if (success){
                    if (message.substr(0, 2) == "ok"){
                        var sessionIndex = host.database.chat_sessions.getIndex(chatid);
                        host.database.chat_sessions.items[sessionIndex].name = name;
                        resolve();
                        var randomId = contentModule.generateRandom();
                        host.listMessRandomCreate[randomId] = true;
                        var membersIdList = [];
                        for (var i = 0; i < host.database.chat_sessions.items[sessionIndex].membersIdList.length; i++){
                            membersIdList.push(host.database.chat_sessions.items[sessionIndex].membersIdList[i].userid);
                        }
                        hr.sendMessageFunc({
                            messageType: "chat",
                            type: "change_group_name",
                            id: chatid,
                            name: name,
                            membersIdList: membersIdList,
                            randomId: randomId
                        });
                    }
                    else {
                        ModalElement.alert({message: message});
                    }
                }
                else {
                    ModalElement.alert({message: message});
                }
            }
        });
    });
};

hr.chats.loadOldMess = function(host, chatid){
    return new Promise(function(resolve, reject){
        var sessionIndex = host.database.chat_sessions.getIndex(chatid);
        var item;
        if (sessionIndex < 0){
            item = host.dataChatOpen;
        }
        else {
            item = host.database.chat_sessions.items[sessionIndex];
        }
        if (item.archivedIdList.length == 0){
            resolve([]);
        }
        else {
            var archivedid = item.archivedIdList[0];
            ModalElement.show_loading();
            FormClass.api_call({
                url: "database_load.php",
                params: [
                    {name: "task", value: "chat_load_old_message"},
                    {name: "archivedid", value: archivedid}
                ],
                func: function(success, message){
                    ModalElement.close(-1);
                    if (success){
                        if (message.substr(0, 2) == "ok"){
                            var content = EncodingClass.string.toVariable(message.substr(2));
                            item.content = content.concat(item.content);
                            item.archivedIdList.splice(0, 1);
                            resolve(content);
                        }
                        else {
                            ModalElement.alert({message: message});
                        }
                    }
                    else {
                        ModalElement.alert({message: message});
                    }
                }
            });
        }
    });
};

hr.chats.removeMemberGroup = function(host, chatid, userid){
    return new Promise(function(resolve, reject){
        FormClass.api_call({
            url: "chat_remove_member_group.php",
            params: [
                {name: "chatid", value: chatid},
                {name: "userRemove", value: userid},
                {name: "localid", value: (new Date()).getTime()}
            ],
            func: function(success, message){
                if (success){
                    if (message.substr(0, 2) == "ok"){
                        var st = EncodingClass.string.toVariable(message.substr(2));
                        var sessionIndex = host.database.chat_sessions.getIndex(chatid);
                        var randomId = contentModule.generateRandom();
                        host.listMessRandomCreate[randomId] = true;
                        var membersIdList = [];
                        for (var i = 0; i < host.database.chat_sessions.items[sessionIndex].membersIdList.length; i++){
                            membersIdList.push(host.database.chat_sessions.items[sessionIndex].membersIdList[i].userid);
                        }
                        hr.sendMessageFunc({
                            messageType: "chat",
                            type: "remove_member_group",
                            id: chatid,
                            membersIdList: membersIdList,
                            userRemove: userid,
                            newMess: st.newMess,
                            userid: systemconfig.userid,
                            randomId: randomId
                        });
                        for (var i = 0; i < host.database.chat_sessions.items[sessionIndex].membersIdList.length; i++){
                            if (host.database.chat_sessions.items[sessionIndex].membersIdList[i].userid == userid){
                                host.database.chat_sessions.items[sessionIndex].membersIdList.splice(i, 1);
                                break;
                            }
                        }
                        host.database.chat_sessions.items[sessionIndex].content.push(st.newMess);
                        resolve(st.newMess);
                    }
                    else {
                        ModalElement.alert({message: message});
                    }
                }
                else {
                    ModalElement.alert({message: message});
                }
            }
        });
    });
};

hr.chats.deleteGroup = function(host, chatid){
    return new Promise(function(resolve, reject){
        FormClass.api_call({
            url: "chats_delete_group.php",
            params: [{name: "chatid", value: chatid}],
            func: function(success, message){
                if (success){
                    if (message.substr(0, 2) == "ok"){
                        var sessionIndex = host.database.chat_sessions.getIndex(chatid);
                        host.database.chat_sessions.items[sessionIndex].isdelete = true;//làm dấu chỉ xóa nội dung chat
                        resolve();
                    }
                    else {
                        ModalElement.alert({message: message});
                    }
                }
                else {
                    ModalElement.alert({message: message});
                }
            }
        });
    });
};

hr.chats.seenMess = function(host, chatid, localid){
    return new Promise(function(resolve, reject){
        var data = {
            chatid: chatid,
            mess_seen_id: localid
        };
        FormClass.api_call({
            url: "chat_seen_message.php",
            params: [
                {name: "data", value: EncodingClass.string.fromVariable(data)}
            ],
            func: function(success, message){
                if (success){
                    if (message.substr(0, 2) == "ok"){
                        var cIndex = host.database.chat_sessions.getIndex(chatid);
                        if (cIndex >= 0){
                            host.database.chat_sessions.items[cIndex].mess_seen_id = localid;
                        }
                        resolve(true);
                    }
                    else {
                        ModalElement.alert({message: message});
                    }
                }
                else {
                    ModalElement.alert({message: message});
                }
            }
        });
    });
};

hr.chats.changeAvatarGroup = function(host, chatid, src){
    return new Promise(function(resolve, reject){
        var x = src.indexOf("/");
        var y = src.indexOf(";base64");
        var suffixesFile = src.substr(x + 1, y - x - 1);
        var blob = absol.file.dataURItoBlob(src);
        var avatarFile = absol.file.blobToFile(blob, contentModule.generateRandom() + "." + suffixesFile);
        FormClass.api_call({
            url: "chat_change_avatar_group.php",
            params: [
                {name: "chatid", value: chatid},
                {name: "avatarname", value: avatarFile.name}
            ],
            func: function(success, message){
                if (success){
                    if (message.substr(0, 2) == "ok"){
                        function saveFile(){
                            var sessionIndex = host.database.chat_sessions.getIndex(chatid);
                            if (host.database.chat_sessions.items[sessionIndex].avatar != "" && host.database.chat_sessions.items[sessionIndex].file_new){
                                systemconfig.connectorFile.delete({
                                    index: 0,
                                    path: ["hr", "group_avatars"],
                                    files: [chatid + "_" + host.database.chat_sessions.items[sessionIndex].avatar],
                                    onsuccess: function (){
                                        console.log("success");
                                    },
                                    onfailed: function (content){
                                        console.log(content);
                                    }
                                });
                            }
                            systemconfig.connectorFile.upload({
                                index: 0,
                                path: ["hr", "group_avatars"],
                                filehandle: avatarFile,
                                filename: chatid + "_" + avatarFile.name,
                                onsuccess: function (content){
                                    console.log(content);
                                },
                                onfailed: function (content){
                                    ModalElement.alert({message: LanguageModule.text("war_txt_no_upload_file")});
                                    console.log(content);
                                }
                            });
                            host.database.chat_sessions.items[sessionIndex].avatar = avatarFile.name;
                            resolve();
                            var randomId = contentModule.generateRandom();
                            host.listMessRandomCreate[randomId] = true;
                            var membersIdList = [];
                            for (var i = 0; i < host.database.chat_sessions.items[sessionIndex].membersIdList.length; i++){
                                membersIdList.push(host.database.chat_sessions.items[sessionIndex].membersIdList[i].userid);
                            }
                            hr.sendMessageFunc({
                                messageType: "chat",
                                type: "change_group_avatar",
                                id: chatid,
                                avatarSrc: window.domainGroup_avatars + avatarFile.name,
                                membersIdList: membersIdList,
                                randomId: randomId
                            });
                        };
                        systemconfig.loadFolderFunc().then(function(value){
                            if (value) saveFile();
                            else {
                                systemconfig.reconnectFile().then(function(){
                                    saveFile();
                                });
                            }
                        });
                    }
                    else {
                        ModalElement.alert({message: message});
                    }
                }
                else {
                    ModalElement.alert({message: message});
                }
            }
        });
    });
};

hr.chats.reactionMessage = function(host, chatid, localid, icon){
    return new Promise(function(resolve, reject){
        var data = {
            chatid: chatid,
            localid: localid
        };
        if (icon === "REMOVE"){
            data.type = "remove";
        }
        else {
            data.type = "add";
            data.emoji = icon.text;
        }
        FormClass.api_call({
            url: "chats_reaction_message.php",
            params: [{name: "data", value: EncodingClass.string.fromVariable(data)}],
            func: function(success, message){
                if (success){
                    if (message.substr(0, 2) == "ok"){
                        var extra = EncodingClass.string.toVariable(message.substr(2));
                        var sIndex = host.database.chat_sessions.getIndex(chatid);
                        for (var j = 0; j < host.database.chat_sessions.items[sIndex].content.length; j++){
                            if (host.database.chat_sessions.items[sIndex].content[j].localid == localid){
                                host.database.chat_sessions.items[sIndex].content[j].extra = extra;
                                break;
                            }
                        }
                        resolve(extra);
                        var randomId = contentModule.generateRandom();
                        host.listMessRandomCreate[randomId] = true;
                        var membersIdList = [];
                        for (var i = 0; i < host.database.chat_sessions.items[sIndex].membersIdList.length; i++){
                            membersIdList.push(host.database.chat_sessions.items[sIndex].membersIdList[i].userid);
                        }
                        hr.sendMessageFunc({
                            messageType: "chat",
                            type: "reactionmessage",
                            localid: localid,
                            id: chatid,
                            membersIdList: membersIdList,
                            randomId: randomId,
                            extra: extra
                        });
                    }
                    else {
                        console.log(message);
                    }
                }
                else {
                    console.log(message);
                }
            }
        })
    });
};

hr.chats.deleteMessage = function(host, chatid, localid){
    return new Promise(function(resolve, reject){
        var data = {
            localid: localid,
            chatid: chatid
        };
        FormClass.api_call({
            url: "chats_delete_message.php",
            params: [{name: "data", value: EncodingClass.string.fromVariable(data)}],
            func: function(success, message){
                if (success){
                    if (message.substr(0, 2) == "ok"){
                        var sIndex = host.database.chat_sessions.getIndex(chatid);
                        for (var j = 0; j < host.database.chat_sessions.items[sIndex].content.length; j++){
                            if (host.database.chat_sessions.items[sIndex].content[j].localid == localid){
                                if (host.database.chat_sessions.items[sIndex].content[j].content_type == "img" || host.database.chat_sessions.items[sIndex].content[j].content_type == "file"){
                                    var filename = localid + "_" + host.database.chat_sessions.items[sIndex].content[j].content + ".upload";
                                    var path = ["hr", "files"];
                                    function deleteFile(){
                                        systemconfig.connectorFile.delete({
                                            index: 0,
                                            path: path,
                                            files: [filename],
                                            onsuccess: function (){
                                                console.log("success");
                                            },
                                            onfailed: function (content){
                                                console.log(content);
                                            }
                                        });
                                    };
                                    systemconfig.loadFolderFunc().then(function(value){
                                        if (value) deleteFile();
                                        else {
                                            systemconfig.reconnectFile().then(function(){
                                                deleteFile();
                                            });
                                        }
                                    });
                                }
                                break;
                            }
                        }
                        resolve();
                        var randomId = contentModule.generateRandom();
                        host.listMessRandomCreate[randomId] = true;
                        var membersIdList = [];
                        for (var i = 0; i < host.database.chat_sessions.items[sIndex].membersIdList.length; i++){
                            membersIdList.push(host.database.chat_sessions.items[sIndex].membersIdList[i].userid);
                        }
                        hr.sendMessageFunc({
                            messageType: "chat",
                            type: "deletemessage",
                            localid: localid,
                            id: chatid,
                            membersIdList: membersIdList,
                            randomId: randomId
                        });
                    }
                    else {
                        // console.log(message);
                    }
                }
                else {
                    // console.log(message);;
                }
            }
        });
    });
};

hr.chats.editMessage = function(host, chatid, localid, content, quote){
    return new Promise(function(resolve, reject){
        var data = {
            localid: localid,
            chatid: chatid,
            content: content,
            quote: quote
        };
        FormClass.api_call({
            url: "chats_edit_message.php",
            params: [{name: "data", value: EncodingClass.string.fromVariable(data)}],
            func: function(success, message){
                if (success){
                    if (message.substr(0, 2) == "ok"){
                        var sIndex = host.database.chat_sessions.getIndex(chatid);
                        var userIndex;
                        for (var j = 0; j < host.database.chat_sessions.items[sIndex].content.length; j++){
                            if (host.database.chat_sessions.items[sIndex].content[j].localid == localid){
                                host.database.chat_sessions.items[sIndex].content[j].content = content;
                                host.database.chat_sessions.items[sIndex].content[j].isEdit = 1;
                                if (!host.database.chat_sessions.items[sIndex].content[j].extra){
                                    host.database.chat_sessions.items[sIndex].content[j].extra = {};
                                }
                                host.database.chat_sessions.items[sIndex].content[j].extra.quote = quote;
                            }
                        }
                        var randomId = contentModule.generateRandom();
                        host.listMessRandomCreate[randomId] = true;
                        var membersIdList = [];
                        for (var i = 0; i < host.database.chat_sessions.items[sIndex].membersIdList.length; i++){
                            membersIdList.push(host.database.chat_sessions.items[sIndex].membersIdList[i].userid);
                        }
                        var dataDraw = {
                            messageType: "chat",
                            type: "editmessage",
                            localid: localid,
                            content: content,
                            quote: quote,
                            id: chatid,
                            membersIdList: membersIdList,
                            randomId: randomId
                        };
                        resolve(dataDraw);
                        hr.sendMessageFunc(dataDraw);
                    }
                    else {
                        ModalElement.alert({message: message});
                    }
                }
                else {
                    var dataDraw = {
                        type: "editmessage",
                        localid: localid,
                        content: content,
                        chatid: chatid,
                        randomId: randomId,
                        failed: true
                    };
                    resolve(dataDraw);
                }
            }
        });
    });
};

hr.chats.sendMessage = function (host, chatid, text, files, images, quote, listIdLocal) {
    return new Promise(function (resolveMessage, rejectMessage) {
        var listFile = files.concat(images);
        var allUploadFiles = [];
        listFile.forEach(function (file, index) {
            allUploadFiles.push(new Promise(function (rs, rj) {
                function saveFile() {
                    var typeFile;
                    if (file.type.startsWith('image/')) {
                        typeFile = "img";
                    }
                    else {
                        typeFile = "file";
                    }
                    var path = ["hr", "files"];
                    systemconfig.connectorFile.upload({
                        index: 0,
                        path: path,
                        filehandle: file,
                        filename: listIdLocal[index] + "_" + file.name + ".upload",
                        onsuccess: function (content) {
                            rs({
                                type: typeFile,
                                name: file.name
                            });
                        },
                        onfailed: function (content) {
                            ModalElement.alert({ message: LanguageModule.text("war_txt_no_upload_file") });
                            console.log(message);
                        }
                    });
                };
                systemconfig.loadFolderFunc().then(function (value) {
                    if (value) saveFile();
                    else {
                        systemconfig.reconnectFile().then(function () {
                            saveFile();
                        });
                    }
                });
            }));
        });
        Promise.all(allUploadFiles).then(function (listMessageFile) {
            var membersIdList = [];
            var cIndex = host.database.chat_sessions.getIndex(chatid);
            if (cIndex >= 0){
                for (var i = 0; i < host.database.chat_sessions.items[cIndex].membersIdList.length; i++){
                    membersIdList.push(host.database.chat_sessions.items[cIndex].membersIdList[i].userid);
                }
            }
            else {
                for (var i = 0; i < host.dataChatOpen.membersIdList.length; i++){
                    membersIdList.push(host.dataChatOpen.membersIdList[i].userid);
                }
            }
            var dataDraw = [];
            dataDraw.id = chatid;
            var paramsUrl = [
                {
                    name: "chatid",
                    value: chatid
                },
                {
                    name: "fullname",
                    value: systemconfig.fullname
                },
                {
                    name: "text",
                    value: text
                },
                { name: "listIdLocal", value: EncodingClass.string.fromVariable(listIdLocal) },
                { name: "membersIdList", value: EncodingClass.string.fromVariable(membersIdList) },
                { name: "listMessageFile", value: EncodingClass.string.fromVariable(listMessageFile) },
                { name: "domainUploads", value: window.domainFilesNew}
            ];
            if (quote) {
                paramsUrl.push({
                    name: "quote",
                    value: EncodingClass.string.fromVariable(quote)
                });
            }
            FormClass.api_call({
                url: "chats_save_message.php",
                params: paramsUrl,
                func: function (success, message) {
                    var drawMessage = function (failed) {
                        for (var i = 0; i < listMessageFile.length; i++) {
                            if (listMessageFile[i].type == "img") {
                                dataDraw.push({
                                    localid: listIdLocal[i],
                                    content: listMessageFile[i].name,
                                    userid: systemconfig.userid,
                                    fullname: systemconfig.fullname,
                                    content_type: "img",
                                    m_time: new Date(),
                                    failed: failed
                                });
                            }
                            else {
                                dataDraw.push({
                                    localid: listIdLocal[i],
                                    content: listMessageFile[i].name,
                                    userid: systemconfig.userid,
                                    fullname: systemconfig.fullname,
                                    content_type: "file",
                                    m_time: new Date(),
                                    failed: failed
                                });
                            }
                        }
                        if (text != "" || quote) {
                            dataDraw.push({
                                localid: listIdLocal[listIdLocal.length - 1],
                                content: text,
                                userid: systemconfig.userid,
                                fullname: systemconfig.fullname,
                                content_type: "text",
                                m_time: new Date(),
                                failed: failed,
                                extra: {
                                    quote: quote
                                }
                            });
                        }
                        resolveMessage(dataDraw);
                        if (!failed) {
                            if (cIndex < 0){
                                hr.chats.loadSessionNew(host, chatid).then(function(value){
                                    var mItemsNew = host.chatBar.getMessItem(value);
                                    host.chatBar.listChatContent.insertBefore(mItemsNew, host.chatBar.listChatContent.firstChild);
                                    host.chatBar.listMessItemView.unshift({
                                        id: value.id,
                                        elt: mItemsNew
                                    });
                                });
                            }
                            var randomId = contentModule.generateRandom();
                            host.listMessRandomCreate[randomId] = true;
                            hr.sendMessageFunc({
                                messageType: "chat",
                                type: "add",
                                dataDraw: dataDraw,
                                id: chatid,
                                membersIdList: membersIdList,
                                randomId: randomId,
                                userid: systemconfig.userid
                            });
                        }
                    };
                    if (success) {
                        if (message.substr(0, 2) == "ok") {
                            drawMessage();
                        }
                        else {
                            ModalElement.alert({ message: message });
                        }
                    }
                    else {
                        drawMessage(true);
                    }
                }.bind(this)
            });
        }.bind(this));
    });
};

hr.chats.dissolveGroup = function(host, chatid){
    return new Promise(function(resolve, reject){
        FormClass.api_call({
            url: "chats_dissolve_group.php",
            params: [
                {name: "chatid", value: chatid}
            ],
            func: function(success, message){
                if (success){
                    if (message.substr(0, 2) == "ok"){
                        var st = EncodingClass.string.toVariable(message.substr(2));
                        var sIndex = host.database.chat_sessions.getIndex(chatid);
                        var membersIdList = [];
                        for (var i = 0; i < host.database.chat_sessions.items[sIndex].membersIdList.length; i++){
                            membersIdList.push(host.database.chat_sessions.items[sIndex].membersIdList[i].userid);
                        }
                        var randomId = contentModule.generateRandom();
                        host.listMessRandomCreate[randomId] = true;
                        hr.sendMessageFunc({
                            messageType: "chat",
                            type: "dissolve_group",
                            id: chatid,
                            membersIdList: membersIdList,
                            userid: systemconfig.userid,
                            randomId: randomId
                        });
                        host.database.chat_sessions.items.splice(sIndex, 1);
                        for (var i = host.database.chat_session_members.items.length -1; i >= 0; i--){
                            if (host.database.chat_session_members.items[i].chatid == chatid) host.database.chat_session_members.items.splice(i, 1);
                        }
                        resolve();
                    }
                    else {
                        ModalElement.alert({message: message});
                    }
                }
                else {
                    ModalElement.alert({message: message});
                }
            }
        });
    });
};

hr.chats.addMemberGroup = function(host, chatid, listMember){
    return new Promise(function(resolve, reject){
        FormClass.api_call({
            url: "chat_add_member_group.php",
            params: [
                {name: "chatid", value: chatid},
                {name: "listMember", value: EncodingClass.string.fromVariable(listMember)},
                {name: "localid", value: (new Date()).getTime()}
            ],
            func: function(success, message){
                if (success){
                    if (message.substr(0, 2) == "ok"){
                        var st = EncodingClass.string.toVariable(message.substr(2));
                        var sessionIndex = host.database.chat_sessions.getIndex(chatid);
                        for (var i = 0; i < listMember.length; i++){
                            host.database.chat_sessions.items[sessionIndex].membersIdList.push({
                                userid: listMember[i],
                                privilege: 0
                            });
                        }
                        st.newMess.fullname = systemconfig.fullname;
                        host.database.chat_sessions.items[sessionIndex].content.push(st.newMess);
                        resolve(st.newMess);
                        var randomId = contentModule.generateRandom();
                        host.listMessRandomCreate[randomId] = true;
                        var membersIdList = [];
                        for (var i = 0; i < host.database.chat_sessions.items[sessionIndex].membersIdList.length; i++){
                            membersIdList.push(host.database.chat_sessions.items[sessionIndex].membersIdList[i].userid);
                        }
                        hr.sendMessageFunc({
                            messageType: "chat",
                            type: "add_member_group",
                            id: chatid,
                            membersIdList: membersIdList,
                            listMemberAdd: listMember,
                            newMess: st.newMess,
                            userid: systemconfig.userid,
                            randomId: randomId
                        });
                    }
                    else {
                        ModalElement.alert({message: message});
                    }
                }
                else {
                    ModalElement.alert({message: message});
                }
            }
        });
    });
};

hr.chats.leaveGroup = function(host, chatid){
    return new Promise(function(resolve, reject){
        FormClass.api_call({
            url: "chats_leave_group.php",
            params: [
                {name: "chatid", value: chatid},
                {name: "localid", value: (new Date()).getTime()}
            ],
            func: function(success, message){
                if (success){
                    if (message.substr(0, 2) == "ok"){
                        var st = EncodingClass.string.toVariable(message.substr(2));
                        var sIndex = host.database.chat_sessions.getIndex(chatid);
                        var randomId = contentModule.generateRandom();
                        host.listMessRandomCreate[randomId] = true;
                        var membersIdList = [];
                        for (var i = 0; i < host.database.chat_sessions.items[sIndex].membersIdList.length; i++){
                            membersIdList.push(host.database.chat_sessions.items[sIndex].membersIdList[i].userid);
                        }
                        hr.sendMessageFunc({
                            messageType: "chat",
                            type: "leave_group",
                            id: chatid,
                            membersIdList: membersIdList,
                            userLeave: systemconfig.userid,
                            newMess: st.newMess,
                            userid: systemconfig.userid,
                            randomId: randomId
                        });
                        host.database.chat_sessions.items.splice(sIndex, 1);
                        for (var i = host.database.chat_session_members.items.length -1; i >= 0; i--){
                            if (host.database.chat_session_members.items[i].chatid == chatid) host.database.chat_session_members.items.splice(i, 1);
                        }
                        resolve();
                    }
                    else {
                        ModalElement.alert({message: message});
                    }
                }
                else {
                    ModalElement.alert({message: message});
                }
            }
        });
    });
};

hr.chats.addGroupChatFuncSubmit = function(host, data){
    return new Promise(function(resolve, reject){
        data.listMember.unshift(systemconfig.userid);
        if (data.name == ""){
            var userIndex;
            if (data.listMember.length > 2){
                for (var i = 0; i < data.listMember.length; i++){
                    userIndex = host.database.users.getByhomeid(data.listMember[i]);
                    if (i > 0) data.name += ", ";
                    data.name += host.database.users.items[userIndex].fullname;
                }
            }
        }
        ModalElement.show_loading();
        var localid = (new Date()).getTime();
        FormClass.api_call({
            url: "chats_add_session.php",
            params: [
                {name: "data", value: EncodingClass.string.fromVariable(data)},
                {name: "localid", value: localid}
            ],
            func: function(success, message){
                ModalElement.close(-1);
                if (success){
                    if (message.substr(0, 2) == "ok"){
                        var st = EncodingClass.string.toVariable(message.substr(2));
                        var chatid = st.dataSession.id;
                        var tempIndex = host.database.chat_sessions.getIndex(chatid);
                        if (tempIndex >= 0){
                            if (host.database.chat_sessions.items[tempIndex].isdelete !== undefined && host.database.chat_sessions.items[tempIndex].isdelete) host.database.chat_sessions.items.splice(tempIndex, 1);
                            for (var i = host.database.chat_session_members.items.length - 1; i >= 0; i--){
                                if (host.database.chat_session_members.items[i].chatid == chatid) host.database.chat_session_members.items.splice(i, 1);
                            }
                        }
                        var chatIndex = host.database.chat_sessions.getIndex(chatid);
                        if (chatIndex < 0){
                            host.database.chat_sessions.items.push(st.dataSession);
                            for (var i = 0; i < st.members.length; i++){
                                host.database.chat_session_members.items.push(st.members[i]);
                            }
                            contentModule.makeChat_session_membersIndex(host);
                            chatIndex = host.database.chat_sessions.getIndex(chatid);
                            host.database.chat_sessions.items[chatIndex].content = EncodingClass.string.toVariable(host.database.chat_sessions.items[chatIndex].content);
                            host.database.chat_sessions.items[chatIndex].archivedIdList = [];
                            var k, archcontent;
                            for (var i = 0; i < st.dataArchived.length; i++){
                                st.dataArchived[i].chatIndex = k = host.database.chat_sessions.getIndex(st.dataArchived[i].chatid);
                                if (st.dataArchived[i].content !== undefined){
                                    st.dataArchived[i].content = EncodingClass.string.toVariable(st.dataArchived[i].content);
                                    host.database.chat_sessions.items[k].content = st.dataArchived[i].content.concat(host.database.chat_sessions.items[k].content);
                                }
                                else {
                                    host.database.chat_sessions.items[k].archivedIdList.push(host.database.archived_chats.items.length);
                                }
                                host.database.archived_chats.items.push(st.dataArchived[i]);
                            }
                            host.database.chat_sessions.items[chatIndex].membersIdList = [];
                            var privilege = 0;
                            if (data.listMember.length > 2) host.database.chat_sessions.items[chatIndex].privilege = 2;
                            for (var i = 0; i < data.listMember.length; i++){
                                if (data.listMember.length > 2){
                                    privilege = (systemconfig.userid == data.listMember[i])? 2 : 0;
                                }
                                host.database.chat_sessions.items[chatIndex].membersIdList.push({
                                    userid: data.listMember[i],
                                    privilege: privilege
                                });
                            }
                            if (host.database.chat_sessions.items[chatIndex].start_mess_id) {
                                var content = [];
                                for (var j = host.database.chat_sessions.items[chatIndex].content.length - 1; j >= 0; j--){
                                    if (host.database.chat_sessions.items[chatIndex].content[j].localid > host.database.chat_sessions.items[chatIndex].start_mess_id) {
                                        content.unshift(host.database.chat_sessions.items[chatIndex].content[j]);
                                    }
                                    else if (host.database.chat_sessions.items[chatIndex].content[j].localid <= host.database.chat_sessions.items[chatIndex].start_mess_id) {
                                        host.database.chat_sessions.items[chatIndex].archivedIdList = [];
                                        break;
                                    }
                                }
                                host.database.chat_sessions.items[chatIndex].content = content;
                            }
                            contentModule.makeArchivedChat(host, host.database.chat_sessions.items[chatIndex]);
                            contentModule.generateDataChat(host, host.database.chat_sessions.items[chatIndex]);
                        }
                        resolve(host.database.chat_sessions.items[chatIndex]);
                        if (st.isAdd){
                            var randomId = contentModule.generateRandom();
                            host.listMessRandomCreate[randomId] = true;
                            var membersIdList = [];
                            for (var i = 0; i < host.database.chat_sessions.items[chatIndex].membersIdList.length; i++){
                                membersIdList.push(host.database.chat_sessions.items[chatIndex].membersIdList[i].userid);
                            }
                            hr.sendMessageFunc({
                                messageType: "chat",
                                type: "add_session",
                                dataSession: {
                                    id: host.database.chat_sessions.items[chatIndex].id,
                                    name: host.database.chat_sessions.items[chatIndex].name,
                                    lasttime: new Date(),
                                    content: st.dataSession.content,
                                    archivedIdList: []
                                },
                                id: host.database.chat_sessions.items[chatIndex].id,
                                membersIdList: membersIdList,
                                randomId: randomId,
                                userid: systemconfig.userid
                            });
                        }
                    }
                    else {
                        ModalElement.alert({message: message});
                    }
                }
                else {
                    ModalElement.alert({message: message});
                }
            }
        });
    });
};

hr.chats.addGroupChatFunc = function(host){
    return new Promise(function(resolve, reject){
        var res = contentModule.getAddGroupChatView(host);
        ModalElement.showWindow({
            title: LanguageModule.text("txt_add_group"),
            bodycontent: res,
            buttonlist: [
                {
                    text: LanguageModule.text("txt_ok"),
                    onclick: function(){
                        var data = res.getValue();
                        if (!data) return;
                        hr.chats.addGroupChatFuncSubmit(host, data).then(function(value){
                            ModalElement.close();
                            resolve(value);
                        });
                    }
                },
                {
                    text: LanguageModule.text("txt_cancel"),
                    onclick: function(){
                        ModalElement.close();
                    }
                }
            ]
        });
    });
};

hr.chats.loadChat_sessionsOld = function(host){
    return new Promise(function(resolve, reject){
        var startIndex = host.database.chat_sessions.items.length;
        ModalElement.show_loading();
        FormClass.api_call({
            url: "database_load.php",
            params: [
                {name: "task", value: "chat_load_old_session"},
                {name: "startIndex", value: startIndex}
            ],
            func: function(success, message){
                ModalElement.close(-1);
                if (success){
                    if (message.substr(0, 2) == "ok"){
                        var st = EncodingClass.string.toVariable(message.substr(2));
                        var x = {
                            database: {}
                        };
                        contentModule.makeDatabaseContent(x, st);
                        contentModule.makeChat_session_membersIndex(x);
                        for (var i = 0; i < x.database.chat_sessions.items.length; i++){
                            contentModule.makeArchivedChat(x, x.database.chat_sessions.items[i]);
                            contentModule.generateDataChat(host, x.database.chat_sessions.items[i]);
                        }
                        host.database.chat_sessions.items = x.database.chat_sessions.items.concat(host.database.chat_sessions.items);
                        resolve(x.database.chat_sessions.items);
                    }
                    else {
                        ModalElement.alert({message: message});
                    }
                }
                else {
                    ModalElement.alert({message: message})
                }
            }
        })
    });
};

hr.chats.loadSessionNew = function(host, id){
    return new Promise(function(resolve, reject){
        FormClass.api_call({
            url: "database_load.php",
            params: [
                {name: "task", value: "chat_load_session"},
                {name: "id", value: id}
            ],
            func: function(success, message){
                if (success){
                    if (message.substr(0, 2) == "ok"){
                        var st = EncodingClass.string.toVariable(message.substr(2));
                        console.log(st);
                        var x = {database: {}};
                        contentModule.makeDatabaseContent(x, st);
                        contentModule.makeChat_session_membersIndex(x);
                        x.database.users = host.database.users;
                        for (var i = 0; i < x.database.chat_sessions.items.length; i++){
                            contentModule.makeArchivedChat(x, x.database.chat_sessions.items[i]);
                            contentModule.generateDataChat(host, x.database.chat_sessions.items[i]);
                        }
                        host.database.chat_sessions.items = x.database.chat_sessions.items.concat(host.database.chat_sessions.items);
                        resolve(x.database.chat_sessions.items[0]);
                        console.log(x.database.chat_sessions.items[0]);
                    }
                    else {
                        ModalElement.alert({message: message});
                    }
                }
                else {
                    ModalElement.alert({message: message});
                }
            }
        });
    });
};

hr.chats.openNewChatFromId = function(host, chatid){
    var index = host.database.chat_sessions.getIndex(chatid);
    if (index >= 0){
        host.chatBar.func.openChatBoxFunc(host.database.chat_sessions.items[index]);
    }
    else {
        ModalElement.show_loading();
        FormClass.api_call({
            url: "database_load.php",
            params: [
                {name: "task", value: "chat_load_session"},
                {name: "id", value: chatid}
            ],
            func: function(success, message){
                ModalElement.close(-1);
                if (success){
                    if (message.substr(0, 2) == "ok"){
                        var st = EncodingClass.string.toVariable(message.substr(2));
                        var x = {database: {}};
                        contentModule.makeDatabaseContent(x, st);
                        contentModule.makeChat_session_membersIndex(x);
                        x.database.users = host.database.users;
                        for (var i = 0; i < x.database.chat_sessions.items.length; i++){
                            contentModule.makeArchivedChat(x, x.database.chat_sessions.items[i]);
                            contentModule.generateDataChat(host, x.database.chat_sessions.items[i]);
                        }
                        host.chatBar.func.openChatBoxFunc(x.database.chat_sessions.items[0]);
                        host.dataChatOpen = x.database.chat_sessions.items[0];
                    }
                    else {
                        ModalElement.alert({message: message});
                    }
                }
                else {
                    ModalElement.alert({message: message});
                }
            }
        });
    }
};

hr.chats.init = function(host){
    return new Promise(function(resolve, reject){
        host.listMessRandomCreate = {};
        ModalElement.show_loading();
        Promise.all([data_module.loadChatList(), data_module.loadEmployeeItemsPrivView()]).then(function(values){
            for (x in values[1]){
                host[x] = values[1][x];
            }
            contentModule.newMessFunc(host);
            ModalElement.close(-1);
            contentModule.makeDatabaseContent(host, values[0]);
            contentModule.makeChat_session_membersIndex(host);
            contentModule.makeUserEmployeeName(host);
            for (var i = 0; i < host.database.chat_sessions.items.length; i++){
                contentModule.makeArchivedChat(host, host.database.chat_sessions.items[i]);
                contentModule.generateDataChat(host, host.database.chat_sessions.items[i]);
            }
            host.dropChatActive = function(){
                DOMElement.removeAllChildren(rightCtn);
            };
            host.historyOpenChat = {};
            host.chatBar = new ChatBar({
                database: host.database,
                orgViewDic: host.orgViewDic,
                orgEditDic: host.orgEditDic,
                employeeEditDic: host.employeeEditDic,
                data: host.database.chat_sessions.items,
                func: {
                    addgroupFunc: function(){
                        return hr.chats.addGroupChatFunc(host);
                    },
                    loadChat_sessionsOldFunc: function(){
                        return hr.chats.loadChat_sessionsOld(host);
                    },
                    openChatBoxFunc: function(data){
                        if (host.chatActive){
                            if (host.chatActive.id == data.id) return;
                        }
                        var chatBox = new ChatBox({
                            database: host.database,
                            viewNameChat: true,
                            data: data
                        });
                        var chatBoxView = chatBox.getView();
                        setTimeout(function () {
                            chatBox.vMediaInput.focus();
                            if (host.historyOpenChat[data.id]){
                                chatBox.vMediaInput.mode = host.historyOpenChat[data.id].vMediaInput.mode;
                                chatBox.vMediaInput.text = host.historyOpenChat[data.id].vMediaInput.text;
                                chatBox.vMediaInput.files = host.historyOpenChat[data.id].vMediaInput.files;
                                chatBox.vMediaInput.images = host.historyOpenChat[data.id].vMediaInput.images;
                                chatBox.localidEdit = host.historyOpenChat[data.id].localidEdit;
                            }
                        }, 100);
                        DOMElement.removeAllChildren(rightCtn);
                        rightCtn.appendChild(chatBoxView);
                        host.chatActive = {
                            id: data.id,
                            chatBox: chatBox
                        };
                    }
                }
            });
            var rightCtn = DOMElement.div({
                attrs: {style: {display: "inline-block", verticalAlign: "top", height: "100%", width: "calc(100% - 400px)"}}
            });
            var singlePage = DOMElement.div({
                attrs: {style: {height: "100%"}},
                children: [
                    DOMElement.div({
                        attrs: {style: {display: "inline-block", verticalAlign: "top", height: "100%", width: "400px"}},
                        children: [host.chatBar.getView()]
                    }),
                    rightCtn
                ]
            });
            host.holder.appendChild(singlePage);
            resolve(host)
        });
    });
};

VaKeR 2022