PNG  IHDR pHYs   OiCCPPhotoshop ICC profilexڝSgTS=BKKoR RB&*! J!QEEȠQ, !{kּ> H3Q5 B.@ $pd!s#~<<+"x M0B\t8K@zB@F&S`cbP-`'{[! eDh;VEX0fK9-0IWfH  0Q){`##xFW<+*x<$9E[-qWW.(I+6aa@.y24x6_-"bbϫp@t~,/;m%h^ uf@Wp~<5j>{-]cK'Xto(hw?G%fIq^D$.Tʳ?D*A, `6B$BB dr`)B(Ͱ*`/@4Qhp.U=pa( Aa!ڈbX#!H$ ɈQ"K5H1RT UH=r9\F;2G1Q= C7F dt1r=6Ыhڏ>C03l0.B8, c˱" VcϱwE 6wB aAHXLXNH $4 7 Q'"K&b21XH,#/{C7$C2'ITFnR#,4H#dk9, +ȅ3![ b@qS(RjJ4e2AURݨT5ZBRQ4u9̓IKhhitݕNWGw Ljg(gwLӋT071oUX**| J&*/Tު UUT^S}FU3S ԖUPSSg;goT?~YYLOCQ_ cx,!k u5&|v*=9C3J3WRf?qtN (~))4L1e\kXHQG6EYAJ'\'GgSSݧ M=:.kDwn^Loy}/TmG X $ <5qo</QC]@Caaᄑ.ȽJtq]zۯ6iܟ4)Y3sCQ? 0k߬~OCOg#/c/Wװwa>>r><72Y_7ȷOo_C#dz%gA[z|!?:eAAA!h쐭!ΑiP~aa~ 'W?pX15wCsDDDޛg1O9-J5*>.j<74?.fYXXIlK9.*6nl {/]py.,:@LN8A*%w% yg"/6шC\*NH*Mz쑼5y$3,幄'L Lݛ:v m2=:1qB!Mggfvˬen/kY- BTZ(*geWf͉9+̳ې7ᒶKW-X潬j9(xoʿܔĹdff-[n ڴ VE/(ۻCɾUUMfeI?m]Nmq#׹=TR+Gw- 6 U#pDy  :v{vg/jBFS[b[O>zG499?rCd&ˮ/~јѡ򗓿m|x31^VwwO| (hSЧc3- cHRMz%u0`:o_F@8N ' p @8N@8}' p '#@8N@8N pQ9p!i~}|6-ӪG` VP.@*j>[ K^<֐Z]@8N'KQ<Q(`s" 'hgpKB`R@Dqj '  'P$a ( `D$Na L?u80e J,K˷NI'0eݷ(NI'؀ 2ipIIKp`:O'`ʤxB8Ѥx Ѥx $ $P6 :vRNb 'p,>NB 'P]-->P T+*^h& p '‰a ‰ (ĵt#u33;Nt̵'ޯ; [3W ~]0KH1q@8]O2]3*̧7# *p>us p _6]/}-4|t'|Smx= DoʾM×M_8!)6lq':l7!|4} '\ne t!=hnLn (~Dn\+‰_4k)0e@OhZ`F `.m1} 'vp{F`ON7Srx 'D˸nV`><;yMx!IS钦OM)Ե٥x 'DSD6bS8!" ODz#R >S8!7ّxEh0m$MIPHi$IvS8IN$I p$O8I,sk&I)$IN$Hi$I^Ah.p$MIN$IR8I·N "IF9Ah0m$MIN$IR8IN$I 3jIU;kO$ɳN$+ q.x* tEXtComment

Viewing File: /home/u456810272/domains/divorcediy.org/public_html/dashboard.php

<?php
session_start();
if (!isset($_SESSION['user_id']) || $_SESSION['role'] !== 'admin') {
    header('Location: index.html');
    exit;
}
?>
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Divorcediy - SaaS Admin Dashboard</title>
    <link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css" rel="stylesheet">
    <style>
        :root {
            --primary: #1D86D5; --secondary: #ec4899; --bg-light: #f3f4f6; --bg-dark: #111827; 
            --text-light: #1f2937; --text-dark: #f9fafb; --card-light: #ffffff; --card-dark: #1f2937;
            --grad: linear-gradient(135deg, #1D86D5, #8b5cf6);
        }
        body { font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif; margin: 0; background: var(--bg-light); color: var(--text-light); transition: background 0.3s; overflow-x: hidden; }
        body.dark-mode { background: var(--bg-dark); color: var(--text-dark); }
        .dark-mode .card, .dark-mode .sidebar { background: var(--card-dark); border-color: #374151; }
        
        .layout { display: flex; min-height: 100vh; }
        .sidebar { width: 250px; background: var(--card-light); box-shadow: 2px 0 10px rgba(0,0,0,0.05); display: flex; flex-direction: column; transition: 0.3s; z-index: 10; }
        .sidebar-header { padding: 20px; font-size: 24px; font-weight: bold; color: var(--primary); text-align: center; border-bottom: 1px solid #eee; }
        .dark-mode .sidebar-header { border-bottom: 1px solid #374151; }
        .nav-link { padding: 15px 20px; display: flex; align-items: center; cursor: pointer; color: inherit; text-decoration: none; transition: 0.2s; border-left: 4px solid transparent; }
        .nav-link:hover, .nav-link.active { background: rgba(29,134,213,0.1); border-left-color: var(--primary); color: var(--primary); }
        .nav-link i { width: 25px; }
        
        .main-content { flex: 1; padding: 20px; }
        .topbar { display: flex; justify-content: space-between; align-items: center; margin-bottom: 30px; background: var(--card-light); padding: 15px 20px; border-radius: 10px; box-shadow: 0 4px 6px rgba(0,0,0,0.05); }
        .dark-mode .topbar { background: var(--card-dark); }
        
        .view-section { display: none; animation: fadeIn 0.4s; }
        .view-section.active { display: block; }
        @keyframes fadeIn { from { opacity: 0; transform: translateY(10px); } to { opacity: 1; transform: translateY(0); } }

        /* Dashboard Cards */
        .stats-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); gap: 20px; margin-bottom: 30px; }
        .stat-card { background: var(--grad); color: white; padding: 20px; border-radius: 10px; box-shadow: 0 10px 15px rgba(0,0,0,0.1); transition: 0.3s; }
        .stat-card:hover { transform: translateY(-5px); }
        .stat-card h3 { margin: 0 0 10px 0; font-size: 16px; opacity: 0.9; }
        .stat-card .val { font-size: 32px; font-weight: bold; }

        /* Tables & Forms */
        .card { background: var(--card-light); border-radius: 10px; padding: 20px; box-shadow: 0 4px 6px rgba(0,0,0,0.05); margin-bottom: 20px; }
        table { width: 100%; border-collapse: collapse; margin-top: 15px; }
        th, td { padding: 12px 15px; text-align: left; border-bottom: 1px solid #eee; }
        .dark-mode th, .dark-mode td { border-bottom: 1px solid #374151; }
        .btn { padding: 8px 15px; border-radius: 8px; border: none; cursor: pointer; color: white; transition: 0.2s; font-weight: 600; }
        .btn-primary { background: var(--grad); }
        .btn-primary:hover { box-shadow: 0 4px 10px rgba(29,134,213,0.4); transform: translateY(-2px); }
        .btn-danger { background: #ef4444; }
        
        .form-group { margin-bottom: 15px; }
        .form-group label { display: block; margin-bottom: 5px; font-weight: 600; font-size: 14px; }
        .form-control { width: 100%; padding: 10px; border: 1px solid #ddd; border-radius: 8px; box-sizing: border-box; background: transparent; color: inherit; }
        .dark-mode .form-control { border-color: #4b5563; }
        
        #toast-box { position: fixed; bottom: 20px; right: 20px; z-index: 1000; }
        .toast { background: #333; color: #fff; padding: 12px 20px; border-radius: 8px; margin-top: 10px; box-shadow: 0 5px 15px rgba(0,0,0,0.2); }
        
        .ticker-wrap { width: 100%; overflow: hidden; background: rgba(0,0,0,0.05); padding: 8px 0; border-radius: 8px; margin-bottom: 20px; }
        .dark-mode .ticker-wrap { background: rgba(255,255,255,0.05); }
        .ticker { display: inline-block; white-space: nowrap; animation: ticker 20s linear infinite; font-size: 14px; }
        @keyframes ticker { 0% { transform: translateX(100%); } 100% { transform: translateX(-100%); } }
    </style>
</head>
<body>

<div class="layout">
    <div class="sidebar">
        <div class="sidebar-header">Divorcediy SaaS</div>
        <a class="nav-link active" onclick="switchTab('dashboard')"><i class="fa fa-home"></i> Dashboard</a>
        <a class="nav-link" href="index.html"><i class="fa fa-globe"></i> FrontEnd</a>
        <a class="nav-link" onclick="switchTab('products')"><i class="fa fa-box"></i> Products</a>
        <a class="nav-link" onclick="switchTab('members')"><i class="fa fa-users"></i> Members</a>
        <a class="nav-link" onclick="switchTab('subscriptions')"><i class="fa fa-credit-card"></i> Subscriptions</a>
        <a class="nav-link" onclick="switchTab('payment')"><i class="fa fa-wallet"></i> Payment Gateway</a>
        <a class="nav-link" onclick="switchTab('seo')"><i class="fa fa-search"></i> SEO Settings</a>
        <a class="nav-link" onclick="switchTab('language')"><i class="fa fa-language"></i> Language</a>
        <a class="nav-link" onclick="switchTab('smtp')"><i class="fa fa-envelope"></i> SMTP</a>
        <a class="nav-link" onclick="switchTab('general')"><i class="fa fa-cog"></i> General</a>
        <a class="nav-link" onclick="switchTab('security')"><i class="fa fa-shield-alt"></i> Security</a>
        <a class="nav-link" onclick="logout()"><i class="fa fa-sign-out-alt"></i> Logout</a>
    </div>

    <div class="main-content">
        <div class="topbar">
            <div>
                <button class="btn btn-primary" onclick="document.body.classList.toggle('dark-mode')"><i class="fa fa-moon"></i> Toggle Dark Mode</button>
            </div>
            <div>Admin User: <strong><?php echo htmlspecialchars($_SESSION['name']); ?></strong></div>
        </div>

        <div class="ticker-wrap"><div class="ticker">🚀 Welcome to Divorcediy Admin Panel | System running smoothly | Total members crossed expected limits | Check recent subscriptions!</div></div>

        <div id="view-dashboard" class="view-section active">
            <div class="stats-grid">
                <div class="stat-card"><h3>Total Members</h3><div class="val" id="stat-members">0</div></div>
                <div class="stat-card"><h3>Active Products</h3><div class="val" id="stat-products">0</div></div>
                <div class="stat-card"><h3>Active Subscriptions</h3><div class="val" id="stat-subs">0</div></div>
                <div class="stat-card"><h3>Total Revenue</h3><div class="val" id="stat-rev">$0</div></div>
            </div>
            <div class="card">
                <h2>Recent System Activity</h2>
                <p>Welcome to the Divorcediy master control panel. Use the sidebar to navigate through SaaS features.</p>
            </div>
        </div>

        <div id="view-members" class="view-section">
            <div class="card">
                <h2>Manage Members</h2>
                <div id="members-list"></div>
            </div>
        </div>

        <div id="view-products" class="view-section">
            <div class="card">
                <h2>Manage Products</h2>
                <form id="productForm" onsubmit="saveProduct(event)" style="display:flex; gap: 10px; align-items: flex-end; margin-bottom: 20px;">
                    <div class="form-group" style="flex:2;"><label>Name</label><input type="text" id="p_name" class="form-control" required></div>
                    <div class="form-group" style="flex:1;"><label>Price</label><input type="number" step="0.01" id="p_price" class="form-control" required></div>
                    <button type="submit" class="btn btn-primary" style="height: 40px; margin-bottom: 15px;">Add Product</button>
                </form>
                <div id="products-list"></div>
            </div>
        </div>

        <div id="view-subscriptions" class="view-section">
            <div class="card">
                <h2>Active Subscriptions</h2>
                <div id="subs-list"></div>
            </div>
        </div>

        <div id="view-payment" class="view-section">
            <div class="card">
                <h2>Payment Gateway Setup</h2>
                <div class="form-group"><label>Stripe Public Key</label><input type="text" class="form-control" placeholder="pk_test_..."></div>
                <div class="form-group"><label>Stripe Secret Key</label><input type="text" class="form-control" placeholder="sk_test_..."></div>
                <div class="form-group"><label>PayPal Client ID</label><input type="text" class="form-control" placeholder="AbCdEf..."></div>
                <button class="btn btn-primary" onclick="toast('Payment settings saved')">Save Settings</button>
            </div>
        </div>

        <div id="view-seo" class="view-section">
            <div class="card">
                <h2>SEO Optimization</h2>
                <div class="form-group"><label>Meta Title</label><input type="text" class="form-control" value="Divorcediy - Divorce Online Is Fast And Easy"></div>
                <div class="form-group"><label>Meta Description</label><textarea class="form-control">The leader in online divorce form preparation.</textarea></div>
                <button class="btn btn-primary" onclick="toast('SEO configured')">Update SEO</button>
            </div>
        </div>

        <div id="view-language" class="view-section">
            <div class="card">
                <h2>Localization</h2>
                <div class="form-group"><label>Default Language</label>
                    <select class="form-control"><option>English (US)</option><option>Spanish</option><option>French</option></select>
                </div>
                <button class="btn btn-primary" onclick="toast('Language updated')">Save</button>
            </div>
        </div>

        <div id="view-smtp" class="view-section">
            <div class="card">
                <h2>SMTP Email Configuration</h2>
                <div class="form-group"><label>SMTP Host</label><input type="text" class="form-control" placeholder="smtp.gmail.com"></div>
                <div class="form-group"><label>SMTP Port</label><input type="text" class="form-control" placeholder="587"></div>
                <div class="form-group"><label>SMTP User</label><input type="text" class="form-control"></div>
                <div class="form-group"><label>SMTP Password</label><input type="password" class="form-control"></div>
                <button class="btn btn-primary" onclick="toast('SMTP credentials verified')">Test & Save</button>
            </div>
        </div>

        <div id="view-general" class="view-section">
            <div class="card">
                <h2>General Settings</h2>
                <div class="form-group"><label>Site Name</label><input type="text" class="form-control" value="Divorcediy"></div>
                <div class="form-group"><label>Contact Email</label><input type="email" class="form-control" value="help@divorcediy.com"></div>
                <div class="form-group"><label>Support Phone</label><input type="text" class="form-control" value="1.800.555.0199"></div>
                <button class="btn btn-primary" onclick="toast('General settings saved')">Save Changes</button>
            </div>
        </div>

        <div id="view-security" class="view-section">
            <div class="card">
                <h2>Platform Security</h2>
                <div class="form-group"><label>Enable 2FA for Admins</label><input type="checkbox" style="width:20px;height:20px;"></div>
                <div class="form-group"><label>Session Timeout (minutes)</label><input type="number" class="form-control" value="60"></div>
                <button class="btn btn-primary" onclick="toast('Security rules updated')">Apply Rules</button>
            </div>
        </div>

    </div>
</div>

<div id="toast-box"></div>

<script>
    function toast(msg) {
        const t = document.createElement('div');
        t.className = 'toast'; t.innerText = msg;
        document.getElementById('toast-box').appendChild(t);
        setTimeout(() => t.remove(), 3000);
    }

    function switchTab(tab) {
        document.querySelectorAll('.view-section').forEach(el => el.classList.remove('active'));
        document.querySelectorAll('.nav-link').forEach(el => el.classList.remove('active'));
        document.getElementById('view-' + tab).classList.add('active');
        event.currentTarget.classList.add('active');
        
        if(tab === 'dashboard') loadStats();
        if(tab === 'members') loadMembers();
        if(tab === 'products') loadProducts();
        if(tab === 'subscriptions') loadSubs();
    }

    async function loadStats() {
        const res = await fetch('api.php?action=dashboard_stats');
        const data = await res.json();
        document.getElementById('stat-members').innerText = data.members;
        document.getElementById('stat-products').innerText = data.products;
        document.getElementById('stat-subs').innerText = data.subs;
        document.getElementById('stat-rev').innerText = '$' + parseFloat(data.revenue).toFixed(2);
    }

    async function loadMembers() {
        const res = await fetch('api.php?action=members');
        const data = await res.json();
        let html = '<table><tr><th>Name</th><th>Email</th><th>Phone</th><th>Status</th><th>Action</th></tr>';
        data.forEach(m => {
            html += `<tr><td>${m.name}</td><td>${m.email}</td><td>${m.phone}</td><td>${m.status}</td>
                     <td><button class="btn btn-danger" onclick="deleteMember(${m.id})">Del</button></td></tr>`;
        });
        html += '</table>';
        document.getElementById('members-list').innerHTML = html;
    }

    async function loadProducts() {
        const res = await fetch('api.php?action=products');
        const data = await res.json();
        let html = '<table><tr><th>ID</th><th>Name</th><th>Price</th><th>Status</th><th>Action</th></tr>';
        data.forEach(p => {
            html += `<tr><td>${p.id}</td><td>${p.name}</td><td>$${p.price}</td><td>${p.status}</td>
                     <td><button class="btn btn-danger" onclick="deleteProduct(${p.id})">Del</button></td></tr>`;
        });
        html += '</table>';
        document.getElementById('products-list').innerHTML = html;
    }

    async function loadSubs() {
        const res = await fetch('api.php?action=subscriptions');
        const data = await res.json();
        let html = '<table><tr><th>User ID</th><th>Plan</th><th>Amount</th><th>Status</th></tr>';
        data.forEach(s => {
            html += `<tr><td>${s.user_id}</td><td>${s.plan_name}</td><td>$${s.amount}</td><td><span style="color:green;font-weight:bold">${s.status}</span></td></tr>`;
        });
        html += '</table>';
        document.getElementById('subs-list').innerHTML = html;
    }

    async function saveProduct(e) {
        e.preventDefault();
        const fd = new FormData();
        fd.append('name', document.getElementById('p_name').value);
        fd.append('price', document.getElementById('p_price').value);
        await fetch('api.php?action=add_product', { method: 'POST', body: fd });
        toast('Product added!');
        loadProducts();
    }

    async function deleteProduct(id) {
        await fetch('api.php?action=del_product&id='+id);
        toast('Product deleted!');
        loadProducts();
    }
    
    async function deleteMember(id) {
        await fetch('api.php?action=del_member&id='+id);
        toast('Member deleted!');
        loadMembers();
    }

    async function logout() {
        await fetch('api.php?action=logout');
        window.location.href = 'index.html';
    }

    // Init
    loadStats();
</script>
</body>
</html>
Back to Directory=ceiIENDB`