Access Denied

Invalid security key. Add ?key=YOUR_KEY to the URL.

'); } echo " Partner Data Sync Utility "; echo "

🔄 Partner Data Sync Utility

"; echo "

Synchronizing affiliate/partner data between databases...

"; echo "
"; try { $shopPdo = getPartnerDBConnection(); $panelPdo = getPartnerPanelDBConnection(); $shopPdo->beginTransaction(); // ======================================== // STEP 1: Check and Update Table Structure // ======================================== echo "

Step 1: Checking Database Structure

"; // Check affiliate_signups table $stmt = $shopPdo->query("DESCRIBE affiliate_signups"); $columns = $stmt->fetchAll(PDO::FETCH_COLUMN); $hasCommissionColumn = in_array('commission_earned', $columns); $hasCommissionPaid = in_array('commission_paid', $columns); $hasVerifiedAt = in_array('verified_at', $columns); if (!$hasCommissionColumn) { echo "
⚠ Adding commission_earned column...
"; $shopPdo->exec("ALTER TABLE affiliate_signups ADD COLUMN commission_earned DECIMAL(10,2) DEFAULT 0.00"); } else { echo "
✓ commission_earned column exists
"; } if (!$hasCommissionPaid) { echo "
⚠ Adding commission_paid column...
"; $shopPdo->exec("ALTER TABLE affiliate_signups ADD COLUMN commission_paid TINYINT(1) DEFAULT 0"); } else { echo "
✓ commission_paid column exists
"; } if (!$hasVerifiedAt) { echo "
⚠ Adding verified_at timestamp column...
"; $shopPdo->exec("ALTER TABLE affiliate_signups ADD COLUMN verified_at TIMESTAMP NULL DEFAULT NULL"); } else { echo "
✓ verified_at column exists
"; } // ======================================== // STEP 2: Set Commission Rates // ======================================== echo "

Step 2: Commission Rate Configuration

"; $signupCommission = 5.00; // ₹5 per completed signup $verifiedCommission = 10.00; // ₹10 per verified signup (total, not additional) echo "
"; echo "Commission Rates:
"; echo "• Per completed signup: ₹" . number_format($signupCommission, 2) . "
"; echo "• Per verified signup: ₹" . number_format($verifiedCommission, 2) . ""; echo "
"; // ======================================== // STEP 3: Update Commission for All Signups // ======================================== echo "

Step 3: Calculating Commissions

"; $stmt = $shopPdo->prepare(" UPDATE affiliate_signups SET commission_earned = CASE WHEN email_verified = 1 THEN ? WHEN signup_completed = 1 THEN ? ELSE 0 END WHERE commission_earned = 0 OR commission_earned IS NULL OR commission_earned != CASE WHEN email_verified = 1 THEN ? WHEN signup_completed = 1 THEN ? ELSE 0 END "); $stmt->execute([$verifiedCommission, $signupCommission, $verifiedCommission, $signupCommission]); $updated = $stmt->rowCount(); echo "
✓ Updated commission for $updated signups
"; // ======================================== // STEP 4: Sync Verified Timestamps // ======================================== echo "

Step 4: Syncing Verification Timestamps

"; // Get all verified signups that don't have verified_at timestamp $stmt = $shopPdo->query(" SELECT asig.id, asig.panel_user_id, asig.email FROM affiliate_signups asig WHERE asig.email_verified = 1 AND asig.verified_at IS NULL AND asig.panel_user_id IS NOT NULL "); $toSync = $stmt->fetchAll(); $syncedCount = 0; foreach ($toSync as $signup) { try { // Get actual verification time from panel database $stmt = $panelPdo->prepare(" SELECT ev.created_at as verified_time FROM email_verifications ev JOIN users u ON ev.user_id = u.id WHERE u.id = ? AND u.email_verified = 1 ORDER BY ev.created_at DESC LIMIT 1 "); $stmt->execute([$signup['panel_user_id']]); $verificationData = $stmt->fetch(); if ($verificationData) { $stmt = $shopPdo->prepare(" UPDATE affiliate_signups SET verified_at = ? WHERE id = ? "); $stmt->execute([$verificationData['verified_time'], $signup['id']]); $syncedCount++; } } catch (Exception $e) { // Skip individual errors continue; } } echo "
✓ Synced verification timestamps for $syncedCount members
"; // ======================================== // STEP 5: Calculate Total Commission Per Affiliate // ======================================== echo "

Step 5: Calculating Affiliate Totals

"; $stmt = $shopPdo->query(" SELECT a.id, a.affiliate_code, a.company_name, COALESCE(SUM(asig.commission_earned), 0) as total_earned, COUNT(asig.id) as total_signups, SUM(CASE WHEN asig.signup_completed = 1 THEN 1 ELSE 0 END) as completed_signups, SUM(CASE WHEN asig.email_verified = 1 THEN 1 ELSE 0 END) as verified_signups, SUM(CASE WHEN asig.reward_paid = 1 THEN 1 ELSE 0 END) as rewards_paid FROM affiliates a LEFT JOIN affiliate_signups asig ON a.id = asig.affiliate_id GROUP BY a.id "); $affiliates = $stmt->fetchAll(); echo ""; echo ""; echo ""; echo ""; echo ""; echo ""; echo ""; echo ""; echo ""; foreach ($affiliates as $affiliate) { echo ""; echo ""; echo ""; echo ""; echo ""; echo ""; echo ""; echo ""; // Update affiliate totals $updateStmt = $shopPdo->prepare(" UPDATE affiliates SET total_commission_earned = ?, commission_balance = ? - COALESCE(total_commission_redeemed, 0), total_signups = ?, total_verified_signups = ? WHERE id = ? "); $updateStmt->execute([ $affiliate['total_earned'], $affiliate['total_earned'], $affiliate['total_signups'], $affiliate['verified_signups'], $affiliate['id'] ]); } echo "
Affiliate CodeCompanyTotal ClicksCompletedVerifiedCommission Earned
{$affiliate['affiliate_code']}{$affiliate['company_name']}{$affiliate['total_signups']}{$affiliate['completed_signups']}{$affiliate['verified_signups']}₹" . number_format($affiliate['total_earned'], 2) . "
"; // ======================================== // STEP 6: Verify Affiliate Table Structure // ======================================== echo "

Step 6: Verifying Affiliates Table

"; $stmt = $shopPdo->query("DESCRIBE affiliates"); $columns = $stmt->fetchAll(PDO::FETCH_COLUMN); $requiredColumns = ['total_commission_earned', 'total_commission_redeemed', 'commission_balance', 'total_signups', 'total_verified_signups']; $missingColumns = []; foreach ($requiredColumns as $col) { if (in_array($col, $columns)) { echo "
✓ Column '$col' exists
"; } else { echo "
✗ Column '$col' missing!
"; $missingColumns[] = $col; } } if (!empty($missingColumns)) { echo "
"; echo "ERROR: Missing columns in affiliates table!
"; echo "Please add these columns manually or run the database setup SQL."; echo "
"; $shopPdo->rollBack(); exit; } // ======================================== // STEP 7: Summary Statistics // ======================================== echo "

Step 7: Summary Statistics

"; // Get overall stats $stmt = $shopPdo->query(" SELECT COUNT(DISTINCT affiliate_id) as total_affiliates, COUNT(*) as total_clicks, SUM(CASE WHEN signup_completed = 1 THEN 1 ELSE 0 END) as total_signups, SUM(CASE WHEN email_verified = 1 THEN 1 ELSE 0 END) as total_verified, SUM(commission_earned) as total_commission_earned FROM affiliate_signups "); $overallStats = $stmt->fetch(); echo "
"; echo "

Overall Statistics:

"; echo ""; echo "
"; // Conversion rates $clickToSignup = $overallStats['total_clicks'] > 0 ? ($overallStats['total_signups'] / $overallStats['total_clicks'] * 100) : 0; $signupToVerified = $overallStats['total_signups'] > 0 ? ($overallStats['total_verified'] / $overallStats['total_signups'] * 100) : 0; echo "
"; echo "

Conversion Rates:

"; echo ""; echo "
"; $shopPdo->commit(); // ======================================== // SUCCESS MESSAGE // ======================================== echo "
"; echo "
"; echo "

✅ Data Sync Complete!

"; echo "

What was done:

"; echo ""; echo "
"; echo "

Next Steps:

"; echo "
    "; echo "
  1. Verify partner dashboards - Check that all numbers are displaying correctly
  2. "; echo "
  3. DELETE THIS FILE (data-sync.php) for security
  4. "; echo "
  5. Run this sync periodically (e.g., weekly) to ensure data consistency
  6. "; echo "
"; echo "
"; echo "⚠️ SECURITY WARNING: Please delete this file (data-sync.php) after use!"; echo "
"; echo "
"; echo "

Go to Partner Dashboard

"; } catch (Exception $e) { if (isset($shopPdo) && $shopPdo->inTransaction()) { $shopPdo->rollBack(); } echo "
ERROR: " . htmlspecialchars($e->getMessage()) . "
"; echo "

Check your database connection and table structure.

"; } echo ""; ?>