{"id":2902,"date":"2025-12-27T07:36:45","date_gmt":"2025-12-27T07:36:45","guid":{"rendered":"https:\/\/www.cconnectgh.org\/?page_id=2902"},"modified":"2025-12-27T09:05:50","modified_gmt":"2025-12-27T09:05:50","slug":"edit-profile","status":"publish","type":"page","link":"https:\/\/www.cconnectgh.org\/?page_id=2902","title":{"rendered":"Edit Profile"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"2902\" class=\"elementor elementor-2902\">\n\t\t\t\t<div class=\"elementor-element elementor-element-6742048 e-grid e-con-boxed e-con e-parent\" data-id=\"6742048\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-c78cbdd elementor-widget elementor-widget-google_maps\" data-id=\"c78cbdd\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"google_maps.default\">\n\t\t\t\t\t\t\t<div class=\"elementor-custom-embed\">\n\t\t\t<iframe loading=\"lazy\"\n\t\t\t\t\tsrc=\"https:\/\/maps.google.com\/maps?q=bibiani%2C%20ghana&#038;t=m&#038;z=10&#038;output=embed&#038;iwloc=near\"\n\t\t\t\t\ttitle=\"bibiani, ghana\"\n\t\t\t\t\taria-label=\"bibiani, ghana\"\n\t\t\t><\/iframe>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-6873ae4 e-grid e-con-boxed e-con e-parent\" data-id=\"6873ae4\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-7b62f55 elementor-widget elementor-widget-shortcode\" data-id=\"7b62f55\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"shortcode.default\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\">        <style>\r\n            .cc-ui-wrap{max-width:520px;margin:18px auto;padding:0 14px 22px;color:#fff;font-family:system-ui,-apple-system,Segoe UI,Roboto,Arial,sans-serif;}\r\n            .cc-ui-surface{background:#0b0b0b;border-radius:14px;border:1px solid #1f1f1f;overflow:hidden;box-shadow:0 10px 24px rgba(0,0,0,.35);}\r\n            .cc-ui-head{padding:14px 14px 10px;border-bottom:1px solid #1b1b1b;background:#0e0e0e;}\r\n            .cc-ui-title{margin:0;font-size:18px;font-weight:900;letter-spacing:.2px;}\r\n            .cc-ui-sub{margin:6px 0 0;font-size:13px;color:rgba(255,255,255,.7);line-height:1.45;}\r\n            .cc-ui-body{padding:14px;}\r\n            .cc-msg{margin:0 0 12px;padding:10px 12px;border-radius:12px;font-size:14px;border:1px solid transparent;}\r\n            .cc-msg-success{background:rgba(34,197,94,.12);border-color:rgba(34,197,94,.25);color:#d1fae5;}\r\n            .cc-msg-error{background:rgba(220,38,38,.12);border-color:rgba(220,38,38,.25);color:#fecaca;}\r\n            .cc-field{margin-bottom:12px;}\r\n            .cc-label{display:block;font-size:13px;font-weight:800;margin-bottom:6px;color:rgba(255,255,255,.92);}\r\n            .cc-input{width:100%;padding:12px 12px;border-radius:12px;border:1px solid #2a2a2a;background:#111;color:#fff;font-size:15px;outline:none;}\r\n            .cc-input:focus{border-color:#3b82f6;box-shadow:0 0 0 3px rgba(59,130,246,.15);}\r\n            .cc-btn{width:100%;padding:12px 14px;border-radius:14px;border:none;background:#2563eb;color:#fff;font-weight:900;font-size:15px;cursor:pointer;}\r\n            .cc-btn:hover{background:#1d4ed8;}\r\n            .cc-btn-ghost{background:transparent;border:1px solid #2a2a2a;}\r\n            .cc-btn-ghost:hover{background:#141414;}\r\n            .cc-rowlink{display:flex;gap:10px;align-items:center;justify-content:center;margin-top:10px;font-size:13px;color:rgba(255,255,255,.75);flex-wrap:wrap}\r\n            .cc-rowlink a{color:#93c5fd;text-decoration:none;font-weight:800;}\r\n            .cc-rowlink a:hover{text-decoration:underline;}\r\n            .cc-help{font-size:12px;color:rgba(255,255,255,.62);margin-top:8px;line-height:1.45;}\r\n        <\/style>\r\n\r\n        <div class=\"cc-ui-wrap\">\r\n            <div class=\"cc-ui-surface\">\r\n                <div class=\"cc-ui-head\">\r\n                    <h3 class=\"cc-ui-title\">Edit profile<\/h3>\r\n                    <p class=\"cc-ui-sub\">Update your name and phone number.<\/p>\r\n                <\/div>\r\n\r\n                <div class=\"cc-ui-body\">\r\n                    <div id=\"cc-edit-msg\"><\/div>\r\n\r\n                    <!-- Logged-out view -->\r\n                    <div id=\"cc-edit-logged-out\" style=\"display:none;\">\r\n                        <div class=\"cc-msg cc-msg-error\">\r\n                            You must be logged in to edit your profile.\r\n                        <\/div>\r\n                        <button class=\"cc-btn\" type=\"button\" id=\"cc-go-login\">Go to Login<\/button>\r\n                        <div class=\"cc-rowlink\">\r\n                            <a href=\"https:\/\/www.cconnectgh.org\/?page_id=2911\">Back to Account<\/a>\r\n                        <\/div>\r\n                    <\/div>\r\n\r\n                    <!-- Logged-in view -->\r\n                    <div id=\"cc-edit-logged-in\" style=\"display:none;\">\r\n                        <form id=\"cc-edit-form\">\r\n                            <div class=\"cc-field\">\r\n                                <label class=\"cc-label\">Full name<\/label>\r\n                                <input class=\"cc-input\" type=\"text\" name=\"full_name\" placeholder=\"Your name\">\r\n                            <\/div>\r\n\r\n                            <div class=\"cc-field\">\r\n                                <label class=\"cc-label\">Phone<\/label>\r\n                                <input class=\"cc-input\" type=\"text\" name=\"phone\" placeholder=\"024... or +233...\">\r\n                            <\/div>\r\n\r\n                            <button class=\"cc-btn\" type=\"submit\">Save changes<\/button>\r\n                            <button class=\"cc-btn cc-btn-ghost\" type=\"button\" id=\"cc-cancel\">Cancel<\/button>\r\n\r\n                            <p class=\"cc-help\">Your phone helps with WhatsApp\/SMS alerts.<\/p>\r\n                        <\/form>\r\n                    <\/div>\r\n                <\/div>\r\n            <\/div>\r\n        <\/div>\r\n\r\n        <script>\r\n        (function(){\r\n            const apiBase = \"https:\/\/api.cconnectgh.org\/\";\r\n            const loginUrl = \"https:\/\/www.cconnectgh.org\/?page_id=2897\";\r\n            const accountUrl = \"https:\/\/www.cconnectgh.org\/?page_id=2911\";\r\n\r\n            function setMsg(text, isError){\r\n                const box = document.getElementById('cc-edit-msg');\r\n                if(!box) return;\r\n                if(!text){ box.innerHTML=''; box.className=''; return; }\r\n                box.className = 'cc-msg ' + (isError ? 'cc-msg-error' : 'cc-msg-success');\r\n                box.textContent = text;\r\n            }\r\n\r\n            function show(elId, yes){\r\n                const el = document.getElementById(elId);\r\n                if(el) el.style.display = yes ? 'block' : 'none';\r\n            }\r\n\r\n            async function loadMe(token){\r\n                try{\r\n                    setMsg('Loading your profile...', false);\r\n\r\n                    const resp = await fetch(apiBase + 'auth\/me', {\r\n                        method: 'GET',\r\n                        headers: { 'Authorization': 'Bearer ' + token }\r\n                    });\r\n\r\n                    const data = await resp.json().catch(()=>({}));\r\n\r\n                    if(!resp.ok){\r\n                        setMsg('Could not load profile. Please login again.', true);\r\n                        \/\/ If token is invalid, clear it\r\n                        window.localStorage.removeItem('cconnect_token');\r\n                        window.localStorage.removeItem('cconnect_user_email');\r\n                        show('cc-edit-logged-in', false);\r\n                        show('cc-edit-logged-out', true);\r\n                        return;\r\n                    }\r\n\r\n                    const form = document.getElementById('cc-edit-form');\r\n                    if(form){\r\n                        form.full_name.value = data.full_name || '';\r\n                        form.phone.value = data.phone || '';\r\n                    }\r\n\r\n                    setMsg('', false);\r\n                }catch(err){\r\n                    console.error(err);\r\n                    setMsg('Unexpected error loading profile.', true);\r\n                }\r\n            }\r\n\r\n            async function saveProfile(e){\r\n                e.preventDefault();\r\n                const token = window.localStorage.getItem('cconnect_token');\r\n                if(!token){\r\n                    show('cc-edit-logged-in', false);\r\n                    show('cc-edit-logged-out', true);\r\n                    return;\r\n                }\r\n\r\n                const form = document.getElementById('cc-edit-form');\r\n                const fullName = (form.full_name.value || '').trim();\r\n                const phone = (form.phone.value || '').trim();\r\n\r\n                const payload = { full_name: fullName || null, phone: phone || null };\r\n\r\n                try{\r\n                    setMsg('Saving changes...', false);\r\n\r\n                    \/\/ \u2705 Change method to PUT if your backend uses PUT\r\n                    const resp = await fetch(apiBase + 'auth\/me', {\r\n                        method: 'PATCH',\r\n                        headers: {\r\n                            'Content-Type': 'application\/json',\r\n                            'Authorization': 'Bearer ' + token\r\n                        },\r\n                        body: JSON.stringify(payload)\r\n                    });\r\n\r\n                    const data = await resp.json().catch(()=>({}));\r\n\r\n                    if(!resp.ok){\r\n                        setMsg((data && data.detail) ? data.detail : 'Failed to update profile.', true);\r\n                        return;\r\n                    }\r\n\r\n                    setMsg('Profile updated successfully.', false);\r\n                }catch(err){\r\n                    console.error(err);\r\n                    setMsg('Unexpected error while saving.', true);\r\n                }\r\n            }\r\n\r\n            document.addEventListener('DOMContentLoaded', function(){\r\n                const token = window.localStorage.getItem('cconnect_token');\r\n\r\n                \/\/ Wire buttons\r\n                const goLogin = document.getElementById('cc-go-login');\r\n                if(goLogin) goLogin.addEventListener('click', function(){ window.location.href = loginUrl; });\r\n\r\n                const cancel = document.getElementById('cc-cancel');\r\n                if(cancel) cancel.addEventListener('click', function(){ window.location.href = accountUrl; });\r\n\r\n                const form = document.getElementById('cc-edit-form');\r\n                if(form) form.addEventListener('submit', saveProfile);\r\n\r\n                \/\/ Show correct view\r\n                if(!token){\r\n                    show('cc-edit-logged-in', false);\r\n                    show('cc-edit-logged-out', true);\r\n                    setMsg('', false);\r\n                    return;\r\n                }\r\n\r\n                show('cc-edit-logged-out', false);\r\n                show('cc-edit-logged-in', true);\r\n                loadMe(token);\r\n            });\r\n        })();\r\n        <\/script>\r\n        <\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"elementor_theme","meta":{"footnotes":""},"class_list":["post-2902","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/www.cconnectgh.org\/index.php?rest_route=\/wp\/v2\/pages\/2902","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.cconnectgh.org\/index.php?rest_route=\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/www.cconnectgh.org\/index.php?rest_route=\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/www.cconnectgh.org\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.cconnectgh.org\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=2902"}],"version-history":[{"count":16,"href":"https:\/\/www.cconnectgh.org\/index.php?rest_route=\/wp\/v2\/pages\/2902\/revisions"}],"predecessor-version":[{"id":2964,"href":"https:\/\/www.cconnectgh.org\/index.php?rest_route=\/wp\/v2\/pages\/2902\/revisions\/2964"}],"wp:attachment":[{"href":"https:\/\/www.cconnectgh.org\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=2902"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}