{"id":1072,"date":"2023-08-12T06:18:41","date_gmt":"2023-08-12T06:18:41","guid":{"rendered":"https:\/\/validthemes.net\/themeforest\/wp\/consua\/?page_id=1072"},"modified":"2025-12-09T15:27:38","modified_gmt":"2025-12-09T15:27:38","slug":"register","status":"publish","type":"page","link":"https:\/\/www.cconnectgh.org\/?page_id=1072","title":{"rendered":"register"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"1072\" class=\"elementor elementor-1072\">\n\t\t\t\t<div class=\"elementor-element elementor-element-6f32dd4 e-grid e-con-full e-con e-parent\" data-id=\"6f32dd4\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-5b4f2c9 elementor-widget-divider--separator-type-pattern elementor-widget-divider--view-line elementor-widget elementor-widget-divider\" data-id=\"5b4f2c9\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"divider.default\">\n\t\t\t\t\t\t\t<div class=\"elementor-divider\" style=\"--divider-pattern-url: url(&quot;data:image\/svg+xml,%3Csvg xmlns=&#039;http:\/\/www.w3.org\/2000\/svg&#039; preserveAspectRatio=&#039;none&#039; overflow=&#039;visible&#039; height=&#039;100%&#039; viewBox=&#039;0 0 24 24&#039; fill=&#039;none&#039; stroke=&#039;black&#039; stroke-width=&#039;1&#039; stroke-linecap=&#039;square&#039; stroke-miterlimit=&#039;10&#039;%3E%3Cpath d=&#039;M0,6c6,0,0.9,11.1,6.9,11.1S18,6,24,6&#039;\/%3E%3C\/svg%3E&quot;);\">\n\t\t\t<span class=\"elementor-divider-separator\">\n\t\t\t\t\t\t<\/span>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-36a3df9 e-grid e-con-boxed e-con e-parent\" data-id=\"36a3df9\" 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-d8ae678 elementor-widget elementor-widget-shortcode\" data-id=\"d8ae678\" 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            .cconnect-dark-form {\r\n                max-width: 600px;\r\n                margin: 20px auto;\r\n                padding: 20px;\r\n                background: #000;\r\n                color: #fff;\r\n                border-radius: 10px;\r\n            }\r\n            .cconnect-dark-form h3 {\r\n                margin-top: 0;\r\n                margin-bottom: 12px;\r\n            }\r\n            .cconnect-dark-form label {\r\n                font-weight: 600;\r\n            }\r\n            .cconnect-dark-form input[type=\"text\"],\r\n            .cconnect-dark-form input[type=\"email\"],\r\n            .cconnect-dark-form input[type=\"password\"] {\r\n                width: 100%;\r\n                max-width: 100%;\r\n                padding: 12px 10px;\r\n                margin-top: 5px;\r\n                margin-bottom: 12px;\r\n                border-radius: 6px;\r\n                border: 1px solid #444;\r\n                background: #111;\r\n                color: #fff;\r\n                font-size: 16px;\r\n            }\r\n            .cconnect-dark-form button {\r\n                background: #2563eb;\r\n                color: #fff;\r\n                border: none;\r\n                padding: 12px 20px;\r\n                margin-top: 12px;\r\n                border-radius: 6px;\r\n                font-size: 16px;\r\n                cursor: pointer;\r\n            }\r\n            .cconnect-dark-form button:hover {\r\n                background: #1d4ed8;\r\n            }\r\n            .cconnect-msg {\r\n                margin-bottom: 10px;\r\n                padding: 8px 10px;\r\n                border-radius: 6px;\r\n                font-size: 14px;\r\n            }\r\n            .cconnect-msg-success {\r\n                background: #16a34a;\r\n                color: #fff;\r\n            }\r\n            .cconnect-msg-error {\r\n                background: #dc2626;\r\n                color: #fff;\r\n            }\r\n        <\/style>\r\n\r\n        <form id=\"cconnect-register-form\" class=\"cconnect-dark-form\">\r\n            <h3>Create Your CConnectGH Account<\/h3>\r\n\r\n            <div id=\"cconnect-register-message\"><\/div>\r\n\r\n            <p>\r\n                <label>Email *<\/label><br>\r\n                <input type=\"email\" name=\"email\" required>\r\n            <\/p>\r\n\r\n            <p>\r\n                <label>Full Name (optional)<\/label><br>\r\n                <input type=\"text\" name=\"full_name\">\r\n            <\/p>\r\n\r\n            <p>\r\n                <label>Phone (WhatsApp \/ SMS) *<\/label><br>\r\n                <input type=\"text\" name=\"phone\" required>\r\n            <\/p>\r\n\r\n            <p>\r\n                <label>Password *<\/label><br>\r\n                <input type=\"password\" name=\"password\" required>\r\n            <\/p>\r\n\r\n            <p>\r\n                <label>Confirm Password *<\/label><br>\r\n                <input type=\"password\" name=\"password_confirm\" required>\r\n            <\/p>\r\n\r\n            <button type=\"submit\">Register<\/button>\r\n        <\/form>\r\n\r\n        <script>\r\n        (function(){\r\n            const apiBase = \"https:\/\/api.cconnectgh.org\/\";\r\n\r\n            function showRegisterMessage(text, isError) {\r\n                const box = document.getElementById('cconnect-register-message');\r\n                if (!box) return;\r\n                box.innerHTML = '';\r\n                box.className = 'cconnect-msg ' + (isError ? 'cconnect-msg-error' : 'cconnect-msg-success');\r\n                box.textContent = text;\r\n            }\r\n\r\n            document.addEventListener('DOMContentLoaded', function() {\r\n                const form = document.getElementById('cconnect-register-form');\r\n                if (!form) return;\r\n\r\n                form.addEventListener('submit', async function(e) {\r\n                    e.preventDefault();\r\n\r\n                    const email = form.querySelector('input[name=\"email\"]').value.trim();\r\n                    const fullName = form.querySelector('input[name=\"full_name\"]').value.trim();\r\n                    const phone = form.querySelector('input[name=\"phone\"]').value.trim();\r\n                    const password = form.querySelector('input[name=\"password\"]').value;\r\n                    const passwordConfirm = form.querySelector('input[name=\"password_confirm\"]').value;\r\n\r\n                    if (!email || !phone || !password || !passwordConfirm) {\r\n                        showRegisterMessage('Please fill in all required fields.', true);\r\n                        return;\r\n                    }\r\n                    if (password !== passwordConfirm) {\r\n                        showRegisterMessage('Passwords do not match.', true);\r\n                        return;\r\n                    }\r\n                    if (password.length < 6) {\r\n                        showRegisterMessage('Password should be at least 6 characters.', true);\r\n                        return;\r\n                    }\r\n\r\n                    \/\/ 1) Call \/auth\/register-user\r\n                    try {\r\n                        showRegisterMessage('Creating your account...', false);\r\n\r\n                        const payload = {\r\n                            email: email,\r\n                            full_name: fullName || null,\r\n                            phone: phone,\r\n                            password: password\r\n                        };\r\n\r\n                        const resp = await fetch(apiBase + 'auth\/register-user', {\r\n                            method: 'POST',\r\n                            headers: {\r\n                                'Content-Type': 'application\/json'\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                            const detail = (data && data.detail) ? data.detail : 'Registration failed.';\r\n                            showRegisterMessage(detail, true);\r\n                            return;\r\n                        }\r\n\r\n                        \/\/ 2) Auto-login by calling \/auth\/login\r\n                        try {\r\n                            const loginData = new URLSearchParams();\r\n                            loginData.append('username', email);\r\n                            loginData.append('password', password);\r\n\r\n                            const loginResp = await fetch(apiBase + 'auth\/login', {\r\n                                method: 'POST',\r\n                                headers: {\r\n                                    'Content-Type': 'application\/x-www-form-urlencoded'\r\n                                },\r\n                                body: loginData\r\n                            });\r\n\r\n                            const loginJson = await loginResp.json().catch(() => ({}));\r\n\r\n                            if (loginResp.ok && loginJson && loginJson.access_token) {\r\n                                \/\/ Store token in localStorage for dashboard & future calls\r\n                                window.localStorage.setItem('cconnect_token', loginJson.access_token);\r\n                                window.localStorage.setItem('cconnect_user_email', email);\r\n                                showRegisterMessage('Account created and you are now logged in.', false);\r\n                                window.location.href = \"https:\/\/www.cconnectgh.org\/?page_id=2911\"\r\n                                \r\n                            } else {\r\n                                showRegisterMessage('Account created, but auto-login failed. Please login manually.', true);\r\n                            }\r\n                        } catch (e) {\r\n                            console.error(e);\r\n                            showRegisterMessage('Account created, but login failed. Please login manually.', true);\r\n                        }\r\n\r\n                    } catch (err) {\r\n                        console.error(err);\r\n                        showRegisterMessage('Unexpected error during registration.', true);\r\n                    }\r\n                });\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_header_footer","meta":{"footnotes":""},"class_list":["post-1072","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/www.cconnectgh.org\/index.php?rest_route=\/wp\/v2\/pages\/1072","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=1072"}],"version-history":[{"count":8,"href":"https:\/\/www.cconnectgh.org\/index.php?rest_route=\/wp\/v2\/pages\/1072\/revisions"}],"predecessor-version":[{"id":2752,"href":"https:\/\/www.cconnectgh.org\/index.php?rest_route=\/wp\/v2\/pages\/1072\/revisions\/2752"}],"wp:attachment":[{"href":"https:\/\/www.cconnectgh.org\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1072"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}