{"id":4063,"date":"2026-01-10T19:40:05","date_gmt":"2026-01-10T19:40:05","guid":{"rendered":"https:\/\/www.dgtaware.com\/dgtinstantchat\/?page_id=4063"},"modified":"2026-01-24T11:29:30","modified_gmt":"2026-01-24T11:29:30","slug":"settings","status":"publish","type":"page","link":"https:\/\/www.dgtaware.com\/dgtinstantchat\/settings\/","title":{"rendered":"Settings"},"content":{"rendered":"<div data-spectra-id=\"b7540f6c\"\tstyle=\"overflow: visible; --spectra-background-gradient: linear-gradient(140deg, #00000000 0%, var(--ast-global-color-4) 100%);\" class=\"spectra-background-overlay has-container-overlay spectra-is-root-container alignfull spectra-overlay-color spectra-overflow spectra-background-gradient wp-block-spectra-container\" data-orientation=\"vertical\"\t>\n\t\n<div data-spectra-id=\"spectra-mh0imqpd-qaowlf\" style=\"overflow: visible\" class=\"spectra-overlay-color spectra-overflow wp-block-spectra-container\" data-orientation=\"vertical\">\n\t\n\t<h1 data-spectra-id=\"spectra-a8b25d73-heading\" style=\"--spectra-text-color: var(--ast-global-color-2)\" class=\"has-text-color spectra-text-color wp-block-spectra-content has-text-color has-var-ast-global-color-2-color\">\n\t\tSettings\t<\/h1>\n\n\n\t<p data-spectra-id=\"spectra-a8b25d73-desc\" class=\"wp-block-spectra-content\">\n\t\tHere, you can update your profile or delete it to start fresh with DGT Instant Chat.\t<\/p>\n\n<\/div>\n\n<\/div>\n\n\n<div data-spectra-id=\"spectra-mh0ejkag-51ipjv\"\tstyle=\"overflow: visible;\" class=\"spectra-is-root-container alignfull spectra-overlay-color spectra-overflow wp-block-spectra-container\" data-orientation=\"horizontal\"\t>\n\t\n\n    <div class=\"dgt-profile-wrapper\">\n        <h2 style=\"color:#3A3A3A\">\n            Update Profile        <\/h2>\n\n        <label style=\"color:#3A3A3A\" for=\"avatar\">Avatar Photo<\/label>\n        <input id=\"avatar\" type=\"file\" accept=\"image\/*\">\n\n        <div class=\"dgt-avatar-center\">\n            <img decoding=\"async\" id=\"avatarPreview\"\n                 src=\"\"\n                 style=\"width:120px;height:120px;border-radius:50%;object-fit:cover;\">\n        <\/div>\n\n        <label style=\"color:#3A3A3A\" for=\"nickname\">Nickname<\/label>\n        <input id=\"nickname\" type=\"text\">\n\n        <label style=\"color:#3A3A3A\" for=\"gender\">Gender<\/label>\n        <select id=\"gender\">\n            <option value=\"\">Select gender<\/option>\n            <option value=\"male\">Male<\/option>\n            <option value=\"female\">Female<\/option>\n            <option value=\"other\">Other<\/option>\n        <\/select>\n\t\t\n\t\t<label style=\"color:#3A3A3A\" for=\"keywords\">Some Keywords<\/label>\n        <input id=\"keywords\" maxlength=\"100\" type=\"text\" placeholder=\"Use ; to separate keywords\">\n\t\t\n\n        <label style=\"color:#3A3A3A\" for=\"bio\">Bio<\/label>\n        <textarea id=\"bio\" rows=\"6\"><\/textarea>\n\n        <button id=\"dgt-save-profile\">\n            Update Profile        <\/button>\n    <\/div>\n\n    <style>\n        .dgt-profile-wrapper {\n            background: #fff;\n            border: 1px solid #ccc;\n            padding: 20px;\n            max-width: 500px;\n            margin: 20px auto;\n            border-radius: 8px;\n        }\n        .dgt-profile-wrapper label {\n            display: block;\n            margin-top: 15px;\n            font-weight: 600;\n        }\n        .dgt-profile-wrapper input,\n        .dgt-profile-wrapper textarea,\n        .dgt-profile-wrapper select {\n            width: 100%;\n            padding: 10px;\n            margin-top: 5px;\n            border: 1px solid #bbb;\n            border-radius: 5px;\n            font-size: 16px;\n        }\n        .dgt-profile-wrapper button {\n            margin-top: 20px;\n            width: 100%;\n            padding: 12px;\n            background: #DD183B;\n            color: white;\n            border: none;\n            border-radius: 5px;\n            font-size: 18px;\n            cursor: pointer;\n        }\n        .dgt-profile-wrapper button:hover {\n            background: #b81432;\n        }\n        .dgt-avatar-center {\n            display: flex;\n            justify-content: center;\n            margin-top: 10px;\n            margin-bottom: 20px;\n        }\n    <\/style>\n\n\n\t\n\t<script type=\"module\">\n\t\t\/\/CONNECT WEBSOCKET CLIENT TO LISTEN TO NOTIFICATIONS\n\t  \timport WSClient from \"\/dgtinstantchat\/wp-content\/themes\/astra-child\/js\/wsclient.js\";\n\t  \tconst ws = new WSClient(\"wss:\/\/dgtaware.com:3000\", {autoReconnect: true,reconnectInterval: 3000});\n\t<\/script>\n\n\n\n\n\n    <script>\n    const DGT_PROFILE_MODE = \"update\";\n\t\t\n\tconst jsLang = \"en\"; \n\t\t\n\t\t \n\t\t \n\t\t \n\n    document.addEventListener(\"DOMContentLoaded\", function() \n\t{\n        const nicknameField = document.getElementById('nickname');\n        const genderField   = document.getElementById('gender');\n        const bioField      = document.getElementById('bio');\n\t\tconst keywordsField      = document.getElementById('keywords');\n        const avatarField   = document.getElementById('avatar');\n        const avatarPreview = document.getElementById('avatarPreview');\n        const saveBtn       = document.getElementById('dgt-save-profile');\n\t\t\n\t\tlet lang = \"http:\/\/en\"; \n\n        \/\/ Load existing values if updating\n        if (DGT_PROFILE_MODE === \"update\") \n\t\t{\n\t\t\tnicknameField.disabled = true; \n            nicknameField.value = localStorage.getItem('nickname') || '';\n            genderField.value   = localStorage.getItem('gender') || '';\n            bioField.value      = localStorage.getItem('bio') || '';\n\t\t\tkeywordsField.value      = localStorage.getItem('keywords') || '';\n            const storedPhoto = localStorage.getItem('profilePhoto');\n            avatarPreview.src = storedPhoto ? storedPhoto : \"https:\/\/cdn.pixabay.com\/photo\/2023\/02\/18\/11\/00\/icon-7797704_640.png\";\n        } \n\t\telse \n\t\t{\n            \/\/ Create mode \u2192 empty fields\n            nicknameField.value = \"\";\n            genderField.value = \"\";\n            bioField.value = \"\";\n\t\t\tkeywordsField.value=\"\";\n            avatarPreview.src = \"https:\/\/cdn.pixabay.com\/photo\/2023\/02\/18\/11\/00\/icon-7797704_640.png\";\n        }\n\n        \/\/ Avatar preview\n        avatarField.addEventListener('change', function () \n\t\t{\n            const file = avatarField.files[0];\n            if (file) \n\t\t\t{\n                avatarPreview.src = URL.createObjectURL(file);\n            }\n        });\n\n        saveBtn.addEventListener('click', async function() \n\t\t{\n            const nickname = nicknameField.value.trim();\n            const gender   = genderField.value.trim();\n            const bio      = bioField.value.trim();\n\t\t\tconst keywords = keywordsField.value.trim();\n\t\t\t\n            if (!nickname) \n\t\t\t{\n                alert(\"Nickname is required\");    \n                return;\n            }\n\n            let avatarUrl = \"\";\n\n            \/\/ Upload avatar if selected\n            if (avatarField.files.length > 0) \n\t\t\t{\n                const formData = new FormData();\n                formData.append(\"avatar\", avatarField.files[0]);\n\n                const uploadResponse = await fetch(\"\/dgtinstantchat\/wp-json\/dgt\/v1\/upload-avatar\", \n\t\t\t\t{\n                    method: \"POST\",\n                    body: formData\n                });\n\n                const uploadResult = await uploadResponse.json();\n\n                if (!uploadResult.success) \n\t\t\t\t{  \n                    alert(uploadResult.error || \"Avatar upload failed\");    \n                    return;\n                }\n                avatarUrl = uploadResult.url;\n            } \n\t\t\telse \n\t\t\t{\n                avatarUrl = avatarPreview.src || \"\";\n            }\n\n            const payload = {\n                nickname: nickname,\n                gender: gender,\n                bio: bio,\n\t\t\t\tkeywords:keywords,\n                profilePhoto: avatarUrl\n            };\n\n            \/\/ Choose endpoint + method\n            let endpoint = \"\/dgtinstantchat\/wp-json\/dgt\/v1\/profile\";\n            let method = \"POST\";\n\n            if (DGT_PROFILE_MODE === \"update\") \n\t\t\t{\n                const userId = localStorage.getItem(\"userID\");\n\t\t\t\t\n                if (!userId) \n\t\t\t\t{\n                    alert(\"No user ID found. Cannot update profile.\");   \n                    return;\n                }\n\t\t\t\t\n\t\t\t\tconst secret = localStorage.getItem(\"secret\");\n\t\t\t\tpayload[\"secret\"] = secret;\n\t\t\t\t\n                endpoint = `\/dgtinstantchat\/wp-json\/dgt\/v1\/profile\/${userId}`;\n                method = \"PUT\";\n            }\n\n            try \n\t\t\t{\n                const response = await fetch(endpoint, \n\t\t\t\t{\n                    method: method,\n                    headers: { \"Content-Type\": \"application\/json\" },\n                    body: JSON.stringify(payload)\n                });\n\n                const result = await response.json();\n\n                if (!result.success) \n\t\t\t\t{\n                    alert(result.error || \"Unknown error\");   \n                    return;\n                }\n\t\t\t\t\n\t\t\t\t\/\/alert(JSON.stringify(result));\t\t\t\t\n\t\t\t\t\t\n\t\t\t\tif (DGT_PROFILE_MODE !== \"update\") \/\/INSERT\n\t\t\t\t{\n\t\t\t\t\t\/\/ Save to localStorage\n\t\t\t\t\tlocalStorage.setItem('userID', result.id);\n\t\t\t\t\tlocalStorage.setItem('secret', result.secret);\n\t\t\t\t\tlocalStorage.setItem('nickname', nickname);\n\t\t\t\t\tlocalStorage.setItem('gender', gender);\n\t\t\t\t\tlocalStorage.setItem('bio', bio);\n\t\t\t\t\tlocalStorage.setItem('keywords', keywords);\n\t\t\t\t\tlocalStorage.setItem('profilePhoto', avatarUrl);\t\n\t\t\t\t\t\n\t\t\t\t\tlocalStorage.setItem('lang', lang);\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\tlocalStorage.setItem('ws_company', result.ws_company);\n\t\t\t\t\tlocalStorage.setItem('ws_session_key', result.ws_session_key);\n\t\t\t\t\t\n\t\t\t\t\tif(jsLang == \"fr\")\n\t\t\t\t\t{\n\t\t\t\t\t\twindow.location.href = `\/dgtinstantchat\/people-fr\/`;\n\t\t\t\t\t}\n\t\t\t\t\telse if(jsLang == \"pt\")\n\t\t\t\t\t{\n\t\t\t\t\t\twindow.location.href = `\/dgtinstantchat\/people-pt\/`;\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t{\n\t\t\t\t\t\twindow.location.href = `\/dgtinstantchat\/people\/`;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse \/\/UPDATE\n\t\t\t\t{\n\t\t\t\t\tlocalStorage.setItem('nickname', nickname);\n\t\t\t\t\tlocalStorage.setItem('gender', gender);\n\t\t\t\t\tlocalStorage.setItem('bio', bio);\n\t\t\t\t\tlocalStorage.setItem('keywords', keywords);\n\t\t\t\t\tlocalStorage.setItem('profilePhoto', avatarUrl);\n\t\t\t\t\tlocalStorage.setItem('lang', lang);\t\n\t\t\t\t\t\/\/alert(\"Saved!\");\n\t\t\t\t\talert(\"Saved\");   \n\t\t\t\t}\n\n            } \n\t\t\tcatch (err) \n\t\t\t{\n                console.error(err);\n                alert(\"Network error. Please try again.\");   \n            }\n        });\n    });\n\n\t\t\/\/To trap wp button and execute (delete profile button has ad advanced html acnhor with an id!)\n\t\n\t\t\tdocument.addEventListener(\"DOMContentLoaded\", function () {\n\n    \/\/ Find the wrapper by class\n    const wrapper = document.querySelector(\".dgt-delete-profile\");\n    if (!wrapper) return;\n\n    \/\/ Find the actual clickable element inside (button or link)\n    const deleteBtn = wrapper.querySelector(\"button, a\");\n    if (!deleteBtn) return;\n\n    deleteBtn.addEventListener(\"click\", async function (e) \n\t{\n        e.preventDefault();\n\n        if (!confirm(\"Are you sure you want to DELETE your profile? This action cannot be undone.\")) {\n            return;\n        }\n\n        const userId = localStorage.getItem(\"userID\");\n        if (!userId) {\n            alert(\"No user ID found. Cannot delete profile.\");\n            return;\n        }\n\n        const response = await fetch(`\/dgtinstantchat\/wp-json\/dgt\/v1\/profile\/${userId}`, {\n            method: \"DELETE\"\n        });\n\n        const result = await response.json();\n\n        if (!result.success) \n\t\t{\n            alert(result.error || \"Failed to delete profile\");\n            return;\n        }\n\n        \/\/ Clear all local data\n        localStorage.clear();\n\n        \/\/ Redirect to home\n        window.location.href = \"\/dgtinstantchat\/\";\n    });\n});\n    <\/script>\n\n    \n\n<\/div>\n\n\n\n<div style=\"height:40px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<div class=\"wp-block-buttons is-content-justification-center is-layout-flex wp-container-core-buttons-is-layout-a89b3969 wp-block-buttons-is-layout-flex\">\n<div class=\"wp-block-button dgt-delete-profile\"><a class=\"wp-block-button__link wp-element-button\">Delete My PROFILE<\/a><\/div>\n<\/div>\n\n\n\n<div style=\"height:100px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n","protected":false},"excerpt":{"rendered":"","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_uag_custom_page_level_css":"","site-sidebar-layout":"no-sidebar","site-content-layout":"","ast-site-content-layout":"full-width-container","site-content-style":"unboxed","site-sidebar-style":"unboxed","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"disabled","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","ast-disable-related-posts":"","theme-transparent-header-meta":"enabled","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"set","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"footnotes":""},"class_list":["post-4063","page","type-page","status-publish","hentry"],"uagb_featured_image_src":{"full":false,"thumbnail":false,"medium":false,"medium_large":false,"large":false,"1536x1536":false,"2048x2048":false},"uagb_author_info":{"display_name":"root","author_link":"https:\/\/www.dgtaware.com\/dgtinstantchat\/author\/root\/"},"uagb_comment_info":0,"uagb_excerpt":null,"_links":{"self":[{"href":"https:\/\/www.dgtaware.com\/dgtinstantchat\/wp-json\/wp\/v2\/pages\/4063","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.dgtaware.com\/dgtinstantchat\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/www.dgtaware.com\/dgtinstantchat\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/www.dgtaware.com\/dgtinstantchat\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.dgtaware.com\/dgtinstantchat\/wp-json\/wp\/v2\/comments?post=4063"}],"version-history":[{"count":14,"href":"https:\/\/www.dgtaware.com\/dgtinstantchat\/wp-json\/wp\/v2\/pages\/4063\/revisions"}],"predecessor-version":[{"id":4252,"href":"https:\/\/www.dgtaware.com\/dgtinstantchat\/wp-json\/wp\/v2\/pages\/4063\/revisions\/4252"}],"wp:attachment":[{"href":"https:\/\/www.dgtaware.com\/dgtinstantchat\/wp-json\/wp\/v2\/media?parent=4063"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}