( ′∀`)σ≡σ☆))Д′)レ(゚∀゚;)ヘ=З=З=Зε≡(ノ´_ゝ`)ノ HEX
HEX
Server: Apache/2.4.58 (Ubuntu)
System: Linux mail.thebrand.ai 6.8.0-107-generic #107-Ubuntu SMP PREEMPT_DYNAMIC Fri Mar 13 19:51:50 UTC 2026 x86_64
User: www-data (33)
PHP: 8.3.6
Disabled: NONE
Upload Files
File: /var/www/html/tmpr/..//tmpr/../tmpr/../tmpr/../sso/user_sync.php
<?php
// idp/user_sync.php
require_once 'db_master.php';
require_once 'db_project.php';

// Interface for project user sync handlers
interface ProjectUserSyncInterface {
    public function findUser($masterUserId);
    public function createUser($masterUserId, $userData);
}

// Project 1 user sync handler (example schema)
class Project1UserSync implements ProjectUserSyncInterface {
    private $pdo;
    public function __construct() {
        $this->pdo = getProject1DBConnection();
    }
    public function findUser($masterUserId) {
        $stmt = $this->pdo->prepare('SELECT * FROM usertbl WHERE master_user_id = :master_user_id LIMIT 1');
        $stmt->execute(['master_user_id' => $masterUserId]);
        return $stmt->fetch(PDO::FETCH_ASSOC);
    }
    public function createUser($masterUserId, $userData) {
        // Project1 user table has columns: master_user_id, full_name, role
        $stmt = $this->pdo->prepare('INSERT INTO usertbl (master_user_id, u_name, u_email) VALUES (:master_user_id, :u_name, :u_email)');
        $stmt->execute([
            'master_user_id' => $masterUserId,
            'u_name' => $userData['user_name'] ?? $userData['user_name'],
            'u_email' => $userData['user_email'] ?? 'user',
        ]);
        return $this->findUser($masterUserId);
    }
}

// Project 2 user sync handler (different schema example)
class Project2UserSync implements ProjectUserSyncInterface {
    private $pdo;
    public function __construct() {
        $this->pdo = getProject2DBConnection();
    }
    public function findUser($masterUserId) {
        // Project2 user table has columns: id, master_ref_id, email, status
        $stmt = $this->pdo->prepare('SELECT * FROM project2_users WHERE master_ref_id = :master_ref_id LIMIT 1');
        $stmt->execute(['master_ref_id' => $masterUserId]);
        return $stmt->fetch(PDO::FETCH_ASSOC);
    }
    public function createUser($masterUserId, $userData) {
        // Insert with default status active
        $stmt = $this->pdo->prepare('INSERT INTO project2_users (master_ref_id, email, status) VALUES (:master_ref_id, :email, :status)');
        $stmt->execute([
            'master_ref_id' => $masterUserId,
            'email' => $userData['email'],
            'status' => 'active',
        ]);
        return $this->findUser($masterUserId);
    }
}

// Generic sync function
function syncUserAcrossDatabases($userData, ProjectUserSyncInterface $projectSyncHandler) {
    // Sync master user
    $masterUser = findUserInMasterDB($userData['email']);
    if (!$masterUser) {
        $masterUser = createUserInMasterDB($userData);
    }

    // Sync project user via handler
    $projectUser = $projectSyncHandler->findUser($masterUser['id']);
    if (!$projectUser) {
        $projectUser = $projectSyncHandler->createUser($masterUser['id'], $userData);
    }

    return [
        'masterUser' => $masterUser,
        'projectUser' => $projectUser
    ];
}