From d8e07e8f59e7f1609ab7c9a947694097c82c656c Mon Sep 17 00:00:00 2001 From: Flatlogic Bot Date: Sun, 12 Oct 2025 11:32:49 +0000 Subject: [PATCH] V1.0 --- assets/css/custom.css | 195 ++++++++++++++++++++ assets/pasted-20251012-111458-24ba26de.png | Bin 0 -> 29353 bytes db/config.php | 30 +++- db/migrate.php | 43 +++++ db/migrations/001_create_users_table.sql | 12 ++ hubs.php | 50 ++++++ index.php | 197 ++++++--------------- login.php | 82 +++++++++ logout.php | 6 + orders.php | 50 ++++++ reports.php | 50 ++++++ riders.php | 50 ++++++ staff.php | 50 ++++++ 13 files changed, 674 insertions(+), 141 deletions(-) create mode 100644 assets/css/custom.css create mode 100644 assets/pasted-20251012-111458-24ba26de.png create mode 100644 db/migrate.php create mode 100644 db/migrations/001_create_users_table.sql create mode 100644 hubs.php create mode 100644 login.php create mode 100644 logout.php create mode 100644 orders.php create mode 100644 reports.php create mode 100644 riders.php create mode 100644 staff.php diff --git a/assets/css/custom.css b/assets/css/custom.css new file mode 100644 index 0000000..8d9585b --- /dev/null +++ b/assets/css/custom.css @@ -0,0 +1,195 @@ + +/* General Body Styles */ +body { + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif; + background-color: #f8f9fa; + margin: 0; + display: flex; + height: 100vh; + color: #333; +} + +/* Sidebar Styles */ +.sidebar { + width: 260px; + background-color: #800020; /* Burgundy */ + color: #fff; + display: flex; + flex-direction: column; + padding: 20px; +} + +.sidebar h2 { + margin: 0 0 30px 0; + font-size: 24px; + text-align: center; +} + +.sidebar nav ul { + list-style: none; + padding: 0; + margin: 0; +} + +.sidebar nav li { + margin-bottom: 10px; +} + +.sidebar nav a { + color: #fff; + text-decoration: none; + display: block; + padding: 12px 15px; + border-radius: 4px; + transition: background-color 0.3s; +} + +.sidebar nav li.active a, +.sidebar nav a:hover { + background-color: #a00028; /* Darker Burgundy */ +} + +.logout-area { + margin-top: auto; +} + +.logout-area a { + display: block; + padding: 12px 15px; + background-color: #600018; + color: #fff; + text-align: center; + text-decoration: none; + border-radius: 4px; + transition: background-color 0.3s; +} + +.logout-area a:hover { + background-color: #500014; +} + +/* Main Content Styles */ +.main-content { + flex-grow: 1; + display: flex; + flex-direction: column; + overflow-y: auto; +} + +.main-content header { + padding: 20px 40px; + background-color: #fff; + border-bottom: 1px solid #e9ecef; +} + +.main-content header h1 { + margin: 0; + font-size: 28px; + font-weight: 600; +} + +.main-content main { + padding: 40px; + flex-grow: 1; +} + +/* Dashboard Cards */ +.cards-container { + display: grid; + grid-template-columns: repeat(auto-fill, minmax(250px, 1fr)); + gap: 30px; +} + +.card { + background-color: #fff; + padding: 25px; + border-radius: 8px; + box-shadow: 0 4px 12px rgba(0,0,0,0.05); + transition: transform 0.2s, box-shadow 0.2s; +} + +.card:hover { + transform: translateY(-5px); + box-shadow: 0 8px 20px rgba(0,0,0,0.08); +} + +.card h3 { + margin: 0 0 10px 0; + font-size: 18px; + color: #555; +} + +.card p { + margin: 0; + font-size: 36px; + font-weight: 600; + color: #800020; /* Burgundy */ +} + +/* Login Page Specific Styles */ +.login-body { + background-color: #f5f5f5; + display: flex; + justify-content: center; + align-items: center; + height: 100vh; +} + +.login-container { + background-color: #fff; + padding: 40px; + border-radius: 8px; + box-shadow: 0 4px 10px rgba(0,0,0,0.1); + text-align: center; + max-width: 400px; + width: 100%; +} + +.login-container h2 { + margin-top: 0; + font-size: 24px; + color: #333; +} + +.login-container p { + color: #666; + margin-bottom: 30px; +} + +.login-container .form-group { + margin-bottom: 20px; + text-align: left; +} + +.login-container label { + display: block; + margin-bottom: 5px; + font-weight: 600; + color: #333; +} + +.login-container input[type="text"], +.login-container input[type="password"] { + width: 100%; + padding: 10px; + border: 1px solid #ddd; + border-radius: 4px; + box-sizing: border-box; +} + +.login-container button { + width: 100%; + padding: 12px; + background-color: #800020; /* Burgundy */ + color: #fff; + border: none; + border-radius: 4px; + cursor: pointer; + font-size: 16px; + font-weight: 600; + transition: background-color 0.3s; +} + +.login-container button:hover { + background-color: #a00028; /* Darker Burgundy */ +} diff --git a/assets/pasted-20251012-111458-24ba26de.png b/assets/pasted-20251012-111458-24ba26de.png new file mode 100644 index 0000000000000000000000000000000000000000..e84cee0d02b393f522741387f9224668afdeaf78 GIT binary patch literal 29353 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 T0o}oY1J=J@{iXWnTaW(_S7K)= literal 0 HcmV?d00001 diff --git a/db/config.php b/db/config.php index bb98f7d..ea122f8 100644 --- a/db/config.php +++ b/db/config.php @@ -7,11 +7,39 @@ define('DB_PASS', 'e45f2778-db1f-450c-99c6-29efb4601472'); function db() { static $pdo; - if (!$pdo) { + if ($pdo) { + return $pdo; + } + + try { + // Connect with DB name $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, ]); + } catch (PDOException $e) { + // If database doesn't exist, create it + if ($e->getCode() === 1049) { // SQLSTATE[HY000] [1049] Unknown database + try { + $tempPdo = new PDO('mysql:host='.DB_HOST, DB_USER, DB_PASS, [ + PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, + ]); + $tempPdo->exec('CREATE DATABASE IF NOT EXISTS `'.DB_NAME.'` CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;'); + + // Reconnect with the new database + $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, + ]); + } catch (PDOException $ce) { + // If creation fails, die + die('Failed to create database: ' . $ce->getMessage()); + } + } else { + // For other errors, die + die('DB Connection failed: ' . $e->getMessage()); + } } + return $pdo; } diff --git a/db/migrate.php b/db/migrate.php new file mode 100644 index 0000000..68b9ef3 --- /dev/null +++ b/db/migrate.php @@ -0,0 +1,43 @@ +exec($sql); + echo "Table 'users' created successfully.\n"; + + // New users + $users = [ + ['Admin', 'admin', 'password123', 'Admin'], + ['Rumaiz', 'rumaiz', 'Rumaiz4556', 'Manager'], + ['Nadeeni', 'nadeeni', 'Nadz1234', 'Manager'], + ['Kaveesh', 'kaveesh', 'Kaveesh123', 'Staff'], + ['Sarani', 'sarani', 'Sarani789', 'Staff'], + ['Nazeeha', 'nazeeha', 'Nazeeha1234', 'Staff'], + ['Thiwanka', 'thiwanka', 'Thiwanka567', 'Staff'], + ['Customer Service', 'customerservice', 'Coho2646', 'Staff'], + ['Siranjeewan', 'siranjeewan', 'Siranjeewan123', 'Rider'], + ['Rozan', 'rozan', 'Rozan123', 'Rider'], + ['Coho Rider', 'cohorider', 'Coho123456', 'Rider'], + ]; + + $stmt = $pdo->prepare( + 'INSERT INTO users (full_name, username, password, role) VALUES (?, ?, ?, ?)' + ); + + foreach ($users as $user) { + $fullName = $user[0]; + $username = $user[1]; + $password = password_hash($user[2], PASSWORD_DEFAULT); + $role = $user[3]; + $stmt->execute([$fullName, $username, $password, $role]); + } + + echo "Users inserted successfully.\n"; + echo "Migration completed successfully.\n"; + +} catch (PDOException $e) { + die("Migration failed: " . $e->getMessage() . "\n"); +} \ No newline at end of file diff --git a/db/migrations/001_create_users_table.sql b/db/migrations/001_create_users_table.sql new file mode 100644 index 0000000..9986d12 --- /dev/null +++ b/db/migrations/001_create_users_table.sql @@ -0,0 +1,12 @@ +DROP TABLE IF EXISTS users; + +CREATE TABLE IF NOT EXISTS users ( + id INT AUTO_INCREMENT PRIMARY KEY, + full_name VARCHAR(255) NOT NULL, + username VARCHAR(255) NOT NULL UNIQUE, + password VARCHAR(255) NOT NULL, + role ENUM('Admin', 'Manager', 'Staff', 'Dispatcher', 'Rider', 'Viewer') NOT NULL, + is_active BOOLEAN DEFAULT TRUE, + created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + last_login TIMESTAMP NULL +); \ No newline at end of file diff --git a/hubs.php b/hubs.php new file mode 100644 index 0000000..fc75317 --- /dev/null +++ b/hubs.php @@ -0,0 +1,50 @@ + + + + + + + Hubs - Coho Connect + + + +

+
+
+

Hubs

+
+
+

Hub management will be implemented here.

+
+
+ + diff --git a/index.php b/index.php index 7205f3d..2c04c74 100644 --- a/index.php +++ b/index.php @@ -1,150 +1,67 @@ - + - - - New Style - - - - - - - - - - - - - - - - - - - + + + Dashboard - Coho Connect + -
-
-

Analyzing your requirements and generating your website…

-
- Loading… -
-

AI is collecting your requirements and applying the first changes.

-

This page will update automatically as the plan is implemented.

-

Runtime: PHP — UTC

+ +
+
+

Dashboard

+
+
+
+
+

Total Orders

+

0

+
+
+

Completed

+

0

+
+
+

Pending

+

0

+
+
+

Riders Online

+

0

+
+
+
-
-
- Page updated: (UTC) -
diff --git a/login.php b/login.php new file mode 100644 index 0000000..b3f4727 --- /dev/null +++ b/login.php @@ -0,0 +1,82 @@ +prepare('SELECT * FROM users WHERE username = ?'); + $stmt->execute([$username]); + $user = $stmt->fetch(); + + if ($user && password_verify($password, $user['password'])) { + // Password is correct, start session + $_SESSION['user_id'] = $user['id']; + $_SESSION['user_username'] = $user['username']; + $_SESSION['user_role'] = $user['role']; + $_SESSION['user_fullName'] = $user['full_name']; + + // Update last login timestamp + $updateStmt = $pdo->prepare('UPDATE users SET last_login = CURRENT_TIMESTAMP WHERE id = ?'); + $updateStmt->execute([$user['id']]); + + header('Location: index.php'); + exit; + } else { + $error_message = 'Invalid username or password.'; + } + } catch (PDOException $e) { + $error_message = 'Database error. Please try again later.'; + // In a real app, you would log this error instead of showing a generic message. + // error_log($e->getMessage()); + } + } +} +?> + + + + + + Login - Coho Connect + + + + + + \ No newline at end of file diff --git a/logout.php b/logout.php new file mode 100644 index 0000000..95db42c --- /dev/null +++ b/logout.php @@ -0,0 +1,6 @@ + + + + + + + Orders - Coho Connect + + + + +
+
+

Orders

+
+
+

Order management will be implemented here.

+
+
+ + diff --git a/reports.php b/reports.php new file mode 100644 index 0000000..d5cf8a6 --- /dev/null +++ b/reports.php @@ -0,0 +1,50 @@ + + + + + + + Reports - Coho Connect + + + + +
+
+

Reports

+
+
+

Report generation will be implemented here.

+
+
+ + diff --git a/riders.php b/riders.php new file mode 100644 index 0000000..e7e7a44 --- /dev/null +++ b/riders.php @@ -0,0 +1,50 @@ + + + + + + + Riders - Coho Connect + + + + +
+
+

Riders

+
+
+

Rider management will be implemented here.

+
+
+ + diff --git a/staff.php b/staff.php new file mode 100644 index 0000000..da607e7 --- /dev/null +++ b/staff.php @@ -0,0 +1,50 @@ + + + + + + + Staff - Coho Connect + + + + +
+
+

Staff

+
+
+

Staff management will be implemented here.

+
+
+ +