{"id":39,"date":"2026-03-30T12:19:23","date_gmt":"2026-03-30T12:19:23","guid":{"rendered":"https:\/\/ph-portal.zyneventures.com\/?page_id=39"},"modified":"2026-04-06T10:51:34","modified_gmt":"2026-04-06T10:51:34","slug":"change-password","status":"publish","type":"page","link":"https:\/\/ph-portal.zyneventures.com\/index.php\/change-password\/","title":{"rendered":"Change Password"},"content":{"rendered":"<style>.kadence-column39_cae0ec-b6 > .kt-inside-inner-col{display:flex;}.kadence-column39_cae0ec-b6{max-width:100%;margin-left:auto;margin-right:auto;}.wp-block-kadence-column.kb-section-dir-horizontal:not(.kb-section-md-dir-vertical)>.kt-inside-inner-col>.kadence-column39_cae0ec-b6{-webkit-flex:0 1 100%;flex:0 1 100%;max-width:unset;margin-left:unset;margin-right:unset;}.kadence-column39_cae0ec-b6 > .kt-inside-inner-col{padding-top:0px;padding-right:0px;padding-bottom:0px;padding-left:0px;}.kadence-column39_cae0ec-b6 > .kt-inside-inner-col,.kadence-column39_cae0ec-b6 > .kt-inside-inner-col:before{border-top-left-radius:0px;border-top-right-radius:0px;border-bottom-right-radius:0px;border-bottom-left-radius:0px;}.kadence-column39_cae0ec-b6 > .kt-inside-inner-col{row-gap:var(--global-kb-gap-none, 0rem );column-gap:var(--global-kb-gap-sm, 1rem);}.kadence-column39_cae0ec-b6 > .kt-inside-inner-col{flex-direction:column;}.kadence-column39_cae0ec-b6 > .kt-inside-inner-col > .aligncenter{width:100%;}.kadence-column39_cae0ec-b6 > .kt-inside-inner-col:before{opacity:0.3;}.kadence-column39_cae0ec-b6{position:relative;}@media all and (min-width: 1025px){.wp-block-kadence-column.kb-section-dir-horizontal>.kt-inside-inner-col>.kadence-column39_cae0ec-b6{-webkit-flex:0 1 100%;flex:0 1 100%;max-width:unset;margin-left:unset;margin-right:unset;}}@media all and (max-width: 1024px){.kadence-column39_cae0ec-b6 > .kt-inside-inner-col{flex-direction:column;justify-content:center;}}@media all and (max-width: 767px){.wp-block-kadence-column.kb-section-sm-dir-vertical:not(.kb-section-sm-dir-horizontal):not(.kb-section-sm-dir-specificity)>.kt-inside-inner-col>.kadence-column39_cae0ec-b6{max-width:100%;-webkit-flex:1;flex:1;margin-left:auto;margin-right:auto;}.kadence-column39_cae0ec-b6 > .kt-inside-inner-col{flex-direction:column;justify-content:center;}}<\/style>\n<div class=\"wp-block-kadence-column kadence-column39_cae0ec-b6\"><div class=\"kt-inside-inner-col\"><style>.kb-row-layout-id39_d5a042-68 > .kt-row-column-wrap{align-content:start;}:where(.kb-row-layout-id39_d5a042-68 > .kt-row-column-wrap) > .wp-block-kadence-column{justify-content:start;}.kb-row-layout-id39_d5a042-68 > .kt-row-column-wrap{column-gap:var(--global-kb-gap-md, 2rem);row-gap:var(--global-kb-gap-none, 0rem );padding-top:0px;padding-right:0px;padding-bottom:0px;padding-left:0px;grid-template-columns:minmax(0, 1fr);}.kb-row-layout-id39_d5a042-68{background-color:rgba(0,0,0,0);}.kb-row-layout-id39_d5a042-68 > .kt-row-layout-overlay{opacity:0.30;}@media all and (max-width: 1024px){.kb-row-layout-id39_d5a042-68 > .kt-row-column-wrap{grid-template-columns:minmax(0, 1fr);}}@media all and (max-width: 767px){.kb-row-layout-id39_d5a042-68 > .kt-row-column-wrap{grid-template-columns:minmax(0, 1fr);}}<\/style><div class=\"kb-row-layout-wrap kb-row-layout-id39_d5a042-68 alignnone kt-row-has-bg wp-block-kadence-rowlayout\"><div class=\"kt-row-column-wrap kt-has-1-columns kt-row-layout-equal kt-tab-layout-inherit kt-mobile-layout-row kt-row-valign-top\">\n<style>.kadence-column39_260db8-c9 > .kt-inside-inner-col,.kadence-column39_260db8-c9 > .kt-inside-inner-col:before{border-top-left-radius:0px;border-top-right-radius:0px;border-bottom-right-radius:0px;border-bottom-left-radius:0px;}.kadence-column39_260db8-c9 > .kt-inside-inner-col{column-gap:var(--global-kb-gap-sm, 1rem);}.kadence-column39_260db8-c9 > .kt-inside-inner-col{flex-direction:column;}.kadence-column39_260db8-c9 > .kt-inside-inner-col > .aligncenter{width:100%;}.kadence-column39_260db8-c9 > .kt-inside-inner-col:before{opacity:0.3;}.kadence-column39_260db8-c9{position:relative;}@media all and (max-width: 1024px){.kadence-column39_260db8-c9 > .kt-inside-inner-col{flex-direction:column;justify-content:center;}}@media all and (max-width: 767px){.kadence-column39_260db8-c9 > .kt-inside-inner-col{flex-direction:column;justify-content:center;}}<\/style>\n<div class=\"wp-block-kadence-column kadence-column39_260db8-c9\"><div class=\"kt-inside-inner-col\">\n<style>\n    :root {\n            --primary-blue: #0180FF;\n            --hover-blue: #3499FF;\n            --text-dark: #212529;\n            --text-muted: #8D8C9C;\n            --border-color: #EFEFEF;\n            --success-green: #1E8E3E;\n            --error-red: #D93025;\n            --bg-light: #F1F3F4;\n        }\n.ph-login-container {\n    padding: 40px;\n    width: 100%;\n    font-family: 'Sora', sans-serif;\n    color: var(--text-dark);\n    box-sizing: border-box;\n}\n.ph-page-title {\n    font-family: 'Sora', sans-serif;\n    font-size: 21px;\n    font-weight: 500;\n    color: var(--text-dark);\n    margin: 0 0 22px 0;\n    letter-spacing: 0.3px;\n}\n.ph-form-wrapper {\n    width: 100%;\n}\n.ph-inline-row {\n    display: flex;\n    align-items: center;\n    gap: 18px;\n    flex-wrap: wrap;\n}\n.ph-input-group {\n    position: relative;\n    flex: 1 1 200px;\n    min-width: 160px;\n}\n.ph-input-group input {\n    width: 100%;\n    padding: 11px 40px 11px 16px;\n    border: 1px solid #ECEFEF !important;\n    border-radius: 6px;\n    background-color: #fff;\n    font-family: 'Sora', sans-serif;\n    font-size: 12px;\n    color: var(--text-muted);\n    outline: none;\n    box-sizing: border-box;\n    transition: border-color 0.2s ease;\n}\n.ph-input-group input:focus {\n    border-color: #007bff !important;\n}\n.ph-input-group input::placeholder { color: #99abb4; }\n.ph-eye-icon {\n    padding-right: 20px;\n    position: absolute;\n    right: 12px;\n    top: 50%;\n    transform: translateY(-50%);\n    cursor: pointer;\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    user-select: none;\n}\n.ph-login-button {\n    flex-shrink: 0;\n    padding: 11px 28px;\n    background-color: var(--primary-blue);\n    color: #fff;\n    border: none;\n    border-radius: 6px;\n    font-family: 'Sora', sans-serif;\n    font-size: 12px;\n    font-weight: 400;\n    cursor: pointer;\n    transition: background 0.2s ease;\n    white-space: nowrap;\n    height: 42px;\n    display: flex;\n    align-items: center;\n    justify-content: center;\n}\n.ph-login-button:hover { background-color: var(--hover-blue); }\n.ph-login-button:disabled { opacity: 0.7; cursor: not-allowed; }\n.ph-response-msg {\n    margin-top: 14px;\n    font-family: 'Sora', san2s-serif;\n    font-size: 12px;\n    min-height: 20px;\n}\n\n\/* Responsive: stack on small screens *\/\n@media (max-width: 600px) {\n    .ph-inline-row {\n        flex-direction: column;\n        align-items: stretch;\n        gap: 10px;\n    }\n    .ph-input-group {\n        width: 100%;\n        flex: unset;\n    }\n    .ph-login-button {\n        width: 100%;\n        padding: 12px;\n    }\n}\n<\/style>\n\n<div class=\"ph-login-container\">\n    <h2 class=\"ph-page-title\">CHANGE PASSWORD FORM<\/h2>\n    <div class=\"ph-form-wrapper\">\n        <form id=\"phChangePasswordForm\">\n            <div class=\"ph-inline-row\">\n                <div class=\"ph-input-group\">\n                    <input type=\"password\" id=\"oldPassword\" placeholder=\"Password\" required>\n                    <span class=\"ph-eye-icon\" data-target=\"oldPassword\">\n                        <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"#99abb4\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M1 12s4-8 11-8 11 8 11 8-4 8-11 8-11-8-11-8z\"\/><circle cx=\"12\" cy=\"12\" r=\"3\"\/><\/svg>\n                    <\/span>\n                <\/div>\n                <div class=\"ph-input-group\">\n                    <input type=\"password\" id=\"newPassword\" placeholder=\"Confirm Password\" required>\n                <\/div>\n                <button type=\"submit\" id=\"updateBtn\" class=\"ph-login-button\">Update<\/button>\n            <\/div>\n        <\/form>\n        <div id=\"apiResponse\" class=\"ph-response-msg\"><\/div>\n    <\/div>\n<\/div>\n\n<script>\n\/* Toggle eye icon for Password field *\/\ndocument.querySelector('.ph-eye-icon[data-target=\"oldPassword\"]').addEventListener('click', function() {\n    const inp = document.getElementById('oldPassword');\n    const svg = this.querySelector('svg');\n    if (inp.type === 'password') {\n        inp.type = 'text';\n        svg.setAttribute('stroke', '#007bff');\n    } else {\n        inp.type = 'password';\n        svg.setAttribute('stroke', '#99abb4');\n    }\n});\n\ndocument.getElementById('phChangePasswordForm').addEventListener('submit', async function(e) {\n    e.preventDefault();\n\n    const oldPasswordVal = document.getElementById('oldPassword').value;\n    const newPasswordVal = document.getElementById('newPassword').value;\n    const updateBtn = document.getElementById('updateBtn');\n    const responseMsg = document.getElementById('apiResponse');\n\n    const API_URL = \"https:\/\/api-ph-portal.zyneventures.com\/api\/v1\/user\/change-password\";\n\n    \/\/ Using \"TOKEN\" from localStorage to match login_form.html\n    const token = localStorage.getItem('TOKEN');\n\n    if (!token) {\n        responseMsg.style.color = \"red\";\n        responseMsg.innerText = \"Error: Session expired. Please login again.\";\n        return;\n    }\n\n    if (oldPasswordVal !== newPasswordVal) {\n        responseMsg.style.color = \"red\";\n        responseMsg.innerText = \"Passwords do not match. Please try again.\";\n        return;\n    }\n\n    updateBtn.disabled = true;\n    updateBtn.innerText = \"Updating...\";\n    responseMsg.innerText = \"\";\n\n    try {\n        const response = await fetch(API_URL, {\n            method: 'POST',\n            headers: {\n                'Content-Type': 'application\/json',\n                'Authorization': `Bearer ${token}`\n            },\n            body: JSON.stringify({\n                oldPassword: oldPasswordVal,\n                newPassword: newPasswordVal\n            })\n        });\n\n        const data = await response.json();\n\n        if (response.ok) {\n            responseMsg.style.color = \"green\";\n            responseMsg.innerText = \"Password updated successfully!\";\n\n            setTimeout(() => {\n                window.location.href = \"https:\/\/ph-portal.zyneventures.com\/\";\n            }, 2000);\n        } else {\n            responseMsg.style.color = \"red\";\n            responseMsg.innerText = data?.message || data?.error || \"Invalid old password.\";\n        }\n    } catch (error) {\n        responseMsg.style.color = \"red\";\n        responseMsg.innerText = \"Connection error. Please try again.\";\n    } finally {\n        updateBtn.disabled = false;\n        updateBtn.innerText = \"Update\";\n    }\n});\n<\/script>\n<\/div><\/div>\n\n<\/div><\/div><\/div><\/div>\n","protected":false},"excerpt":{"rendered":"<p>CHANGE PASSWORD FORM Update<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_kad_post_transparent":"","_kad_post_title":"hide","_kad_post_layout":"default","_kad_post_sidebar_id":"","_kad_post_content_style":"","_kad_post_vertical_padding":"","_kad_post_feature":"","_kad_post_feature_position":"","_kad_post_header":false,"_kad_post_footer":true,"_kad_post_classname":"","footnotes":""},"class_list":["post-39","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/ph-portal.zyneventures.com\/index.php\/wp-json\/wp\/v2\/pages\/39","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/ph-portal.zyneventures.com\/index.php\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/ph-portal.zyneventures.com\/index.php\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/ph-portal.zyneventures.com\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/ph-portal.zyneventures.com\/index.php\/wp-json\/wp\/v2\/comments?post=39"}],"version-history":[{"count":7,"href":"https:\/\/ph-portal.zyneventures.com\/index.php\/wp-json\/wp\/v2\/pages\/39\/revisions"}],"predecessor-version":[{"id":320,"href":"https:\/\/ph-portal.zyneventures.com\/index.php\/wp-json\/wp\/v2\/pages\/39\/revisions\/320"}],"wp:attachment":[{"href":"https:\/\/ph-portal.zyneventures.com\/index.php\/wp-json\/wp\/v2\/media?parent=39"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}