From 516273c8b4e57ef08016055fb928356c864d2e3d Mon Sep 17 00:00:00 2001 From: Flatlogic Bot Date: Sun, 15 Feb 2026 21:32:26 +0000 Subject: [PATCH] Autosave: 20260215-213226 --- assets/pasted-20260215-205745-40292c52.png | Bin 0 -> 85096 bytes ballot.php | 318 ++++++++++++++++----- db/config.php | 35 ++- find_region.php | 29 ++ index.php | 36 ++- supabase_migration.php | 163 +++++++++++ 6 files changed, 506 insertions(+), 75 deletions(-) create mode 100644 assets/pasted-20260215-205745-40292c52.png create mode 100644 find_region.php create mode 100644 supabase_migration.php diff --git a/assets/pasted-20260215-205745-40292c52.png b/assets/pasted-20260215-205745-40292c52.png new file mode 100644 index 0000000000000000000000000000000000000000..7cca604701f9067de4219b9c320440ae5e210dfd GIT binary patch literal 85096 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 IrOX2V1qoC4761SM literal 0 HcmV?d00001 diff --git a/ballot.php b/ballot.php index d29b0dd..9a4e50c 100644 --- a/ballot.php +++ b/ballot.php @@ -30,121 +30,273 @@ if ($check->fetchColumn() > 0) { $positions = $pdo->prepare("SELECT * FROM positions WHERE election_id = ? ORDER BY sort_order ASC"); $positions->execute([$id]); $positions = $positions->fetchAll(); + +$endTime = strtotime($election['end_date_and_time']) * 1000; ?> - Vote: <?= htmlspecialchars($election['title']) ?> - - + + Ballot: <?= htmlspecialchars($election['title']) ?> +
-
-
- OFFICIAL BALLOT +
+
+ + TIME REMAINING: + 00:00:00
-

-

Your vote is secure and anonymous. Choose your representatives below.

-
+
+

+

Your choice matters. Review the candidates carefully and cast your secure vote below.

+
+ + $pos): ?> -
+
- +
@@ -163,8 +315,8 @@ $positions = $positions->fetchAll(); ?> -
-

No candidates for this position.

+
+

No candidates available for your track.

@@ -180,7 +332,7 @@ $positions = $positions->fetchAll();

- +
@@ -190,21 +342,51 @@ $positions = $positions->fetchAll();
-
-

Ready to submit?

-

Please review your selections before casting your vote.

+
+
+

READY TO SUBMIT?

+

Review your selections

+
-
- Verified Secure Election -
+ - diff --git a/db/config.php b/db/config.php index d13f431..2c44b7b 100644 --- a/db/config.php +++ b/db/config.php @@ -6,16 +6,39 @@ define('DB_USER', 'app_38458'); define('DB_PASS', 'c217529c-a428-4a97-8f31-773c420377a7'); // Supabase Configuration - Provide your project URL and Service Role Key -define('SUPABASE_URL', getenv('SUPABASE_URL') ?: 'https://your-project.supabase.co'); -define('SUPABASE_SERVICE_ROLE_KEY', getenv('SUPABASE_SERVICE_ROLE_KEY') ?: 'your-service-role-key'); +define('SUPABASE_URL', getenv('SUPABASE_URL') ?: 'https://siqeqnizegizxemrfgkf.supabase.co'); +define('SUPABASE_SERVICE_ROLE_KEY', getenv('SUPABASE_SERVICE_ROLE_KEY') ?: 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZSIsInJlZiI6InNpcWVxbml6ZWdpenhlbXJmZ2tmIiwicm9sZSI6InNlcnZpY2Vfcm9sZSIsImlhdCI6MTc3MDEyMjgzMywiZXhwIjoyMDg1Njk4ODMzfQ.8K66Y3hSfSq5mRDeU8YT6pH9tqPVngxA9dEwCgQUCl0'); +define('SUPABASE_DB_PASS', getenv('SUPABASE_DB_PASS') ?: 'gA82h8K80T5QUAwi'); // Set your DB password here for PostgreSQL migration function db() { static $pdo; if (!$pdo) { - $pdo = new PDO('mysql:host='.DB_HOST.';dbname='.DB_NAME.';charset=utf8mb4', DB_USER, DB_PASS, [ - PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, - PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, - ]); + if (defined('SUPABASE_DB_PASS') && !empty(SUPABASE_DB_PASS)) { + // Use Supabase PostgreSQL + $host = 'aws-1-ap-southeast-1.pooler.supabase.com'; + $port = '6543'; + $dbname = 'postgres'; + $user = 'postgres.siqeqnizegizxemrfgkf'; + $pass = SUPABASE_DB_PASS; + try { + $pdo = new PDO("pgsql:host=$host;port=$port;dbname=$dbname", $user, $pass, [ + PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, + PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, + ]); + } catch (PDOException $e) { + // Fallback to local MariaDB if PostgreSQL fails + $pdo = new PDO('mysql:host='.DB_HOST.';dbname='.DB_NAME.';charset=utf8mb4', DB_USER, DB_PASS, [ + PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, + PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, + ]); + } + } else { + // Use local MariaDB + $pdo = new PDO('mysql:host='.DB_HOST.';dbname='.DB_NAME.';charset=utf8mb4', DB_USER, DB_PASS, [ + PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, + PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, + ]); + } } return $pdo; } diff --git a/find_region.php b/find_region.php new file mode 100644 index 0000000..dd56123 --- /dev/null +++ b/find_region.php @@ -0,0 +1,29 @@ +getMessage(), 'Tenant or user not found') !== false) { + echo "Not here.\n"; + } else { + echo "Error: " . $e->getMessage() . "\n"; + } + } +} diff --git a/index.php b/index.php index b509f02..413acf1 100644 --- a/index.php +++ b/index.php @@ -13,7 +13,41 @@ if (in_array($user['role'], ['Admin', 'Adviser', 'Officer'])) { } $pdo = db(); -$elections = $pdo->query("SELECT * FROM elections WHERE archived = FALSE ORDER BY created_at DESC")->fetchAll(); + +// Voter redirection logic +if ($user['role'] === 'Voter') { + // Find ongoing elections that this voter is assigned to + $stmt = $pdo->prepare(" + SELECT e.* FROM elections e + JOIN election_assignments ea ON e.id = ea.election_id + WHERE ea.user_id = ? + AND e.status = 'Ongoing' + AND e.archived = FALSE + AND e.end_date_and_time > CURRENT_TIMESTAMP + "); + $stmt->execute([$user['id']]); + $activeElections = $stmt->fetchAll(); + + // Filter out elections where the user has already voted + $votedElectionsStmt = $pdo->prepare("SELECT election_id FROM votes WHERE voter_id = ?"); + $votedElectionsStmt->execute([$user['id']]); + $votedIds = $votedElectionsStmt->fetchAll(PDO::FETCH_COLUMN); + + $eligibleElections = array_filter($activeElections, function($e) use ($votedIds) { + return !in_array($e['id'], $votedIds); + }); + + if (count($eligibleElections) === 1) { + $singleElection = reset($eligibleElections); + header("Location: ballot.php?id=" . $singleElection['id']); + exit; + } + + // For voters, only show their assigned elections in the list + $elections = $activeElections; +} else { + $elections = $pdo->query("SELECT * FROM elections WHERE archived = FALSE ORDER BY created_at DESC")->fetchAll(); +} $projectDescription = $_SERVER['PROJECT_DESCRIPTION'] ?? 'Online Election System for Senior High School'; ?> diff --git a/supabase_migration.php b/supabase_migration.php new file mode 100644 index 0000000..aa8350e --- /dev/null +++ b/supabase_migration.php @@ -0,0 +1,163 @@ + PDO::ERRMODE_EXCEPTION, + PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, + ]); + + echo "Connecting to Supabase PostgreSQL...\n"; + $dsn = "pgsql:host=$supabaseHost;port=$supabasePort;dbname=$supabaseDb"; + $supabasePdo = new PDO($dsn, $supabaseUser, $dbPassword, [ + PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION + ]); + + echo "Converting and creating tables in Supabase...\n"; + + // Define tables and their PostgreSQL schemas + $schemas = [ + "users" => "CREATE TABLE IF NOT EXISTS users ( + id VARCHAR(255) PRIMARY KEY, + supabase_uid VARCHAR(255), + student_id VARCHAR(10) UNIQUE NOT NULL, + name VARCHAR(255) NOT NULL, + email VARCHAR(255) UNIQUE NOT NULL, + password_hash VARCHAR(255), + grade_level INTEGER, + track VARCHAR(100), + section VARCHAR(100), + role VARCHAR(50) DEFAULT 'Voter', + access_level INTEGER DEFAULT 0, + created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + deleted_at TIMESTAMP + )", + "elections" => "CREATE TABLE IF NOT EXISTS elections ( + id VARCHAR(255) PRIMARY KEY, + title VARCHAR(255) NOT NULL, + description TEXT, + status VARCHAR(50) DEFAULT 'Preparing', + start_date_and_time TIMESTAMP NOT NULL, + end_date_and_time TIMESTAMP NOT NULL, + created_by VARCHAR(255) REFERENCES users(id), + archived BOOLEAN DEFAULT FALSE, + created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP + )", + "positions" => "CREATE TABLE IF NOT EXISTS positions ( + id VARCHAR(255) PRIMARY KEY, + election_id VARCHAR(255) REFERENCES elections(id) ON DELETE CASCADE, + name VARCHAR(255) NOT NULL, + type VARCHAR(50) DEFAULT 'Uniform', + max_votes INTEGER DEFAULT 1, + sort_order INTEGER DEFAULT 0 + )", + "candidates" => "CREATE TABLE IF NOT EXISTS candidates ( + id VARCHAR(255) PRIMARY KEY, + election_id VARCHAR(255) REFERENCES elections(id) ON DELETE CASCADE, + position_id VARCHAR(255) REFERENCES positions(id) ON DELETE CASCADE, + user_id VARCHAR(255) REFERENCES users(id) ON DELETE CASCADE, + party_name VARCHAR(255), + manifesto TEXT, + approved BOOLEAN DEFAULT FALSE, + created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP + )", + "votes" => "CREATE TABLE IF NOT EXISTS votes ( + id VARCHAR(255) PRIMARY KEY, + election_id VARCHAR(255) REFERENCES elections(id), + position_id VARCHAR(255) REFERENCES positions(id), + candidate_id VARCHAR(255) REFERENCES candidates(id), + voter_id VARCHAR(255) REFERENCES users(id), + casted_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + ip_address VARCHAR(45), + user_agent TEXT, + UNIQUE (election_id, position_id, voter_id) + )", + "election_assignments" => "CREATE TABLE IF NOT EXISTS election_assignments ( + id VARCHAR(255) PRIMARY KEY, + election_id VARCHAR(255) REFERENCES elections(id) ON DELETE CASCADE, + user_id VARCHAR(255) REFERENCES users(id) ON DELETE CASCADE, + role_in_election VARCHAR(50) DEFAULT 'Voter', + assigned_by VARCHAR(255) REFERENCES users(id), + assigned_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP + )", + "parties" => "CREATE TABLE IF NOT EXISTS parties ( + id VARCHAR(255) PRIMARY KEY, + election_id VARCHAR(255) REFERENCES elections(id) ON DELETE CASCADE, + name VARCHAR(255) NOT NULL, + description TEXT, + logo_url TEXT, + created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP + )", + "audit_logs" => "CREATE TABLE IF NOT EXISTS audit_logs ( + id VARCHAR(255) PRIMARY KEY, + user_id VARCHAR(255) REFERENCES users(id), + action VARCHAR(255) NOT NULL, + details TEXT, + table_name VARCHAR(100), + record_id VARCHAR(255), + old_values TEXT, + new_values TEXT, + created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + election_id VARCHAR(255) REFERENCES elections(id) ON DELETE CASCADE + )" + ]; + + foreach ($schemas as $tableName => $sql) { + echo "Creating table: $tableName...\n"; + $supabasePdo->exec($sql); + } + + echo "Migrating data...\n"; + + $tables = array_keys($schemas); + // Order matters for foreign keys: users, elections, positions, candidates, assignments, votes, audit_logs + $orderedTables = ["users", "elections", "positions", "election_assignments", "parties", "candidates", "votes", "audit_logs"]; + + foreach ($orderedTables as $table) { + echo "Migrating data for $table...\n"; + $stmt = $localPdo->query("SELECT * FROM $table"); + $rows = $stmt->fetchAll(PDO::FETCH_ASSOC); + + if (empty($rows)) { + echo "No data for $table.\n"; + continue; + } + + $columns = array_keys($rows[0]); + $placeholders = implode(',', array_fill(0, count($columns), '?')); + $insertSql = "INSERT INTO $table (" . implode(',', $columns) . ") VALUES ($placeholders) ON CONFLICT (id) DO NOTHING"; + + $insertStmt = $supabasePdo->prepare($insertSql); + $count = 0; + foreach ($rows as $row) { + $insertStmt->execute(array_values($row)); + $count++; + } + echo "Migrated $count rows for $table.\n"; + } + + echo "Migration completed successfully!\n"; + +} catch (Exception $e) { + echo "Error: " . $e->getMessage() . "\n"; + exit(1); +}