login.php 8.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150
  1. <?php
  2. // Αρχείο: /var/www/html/hockey-cms/admin/login.php
  3. session_start();
  4. require_once '../config/database.php';
  5. // --- Μηχανισμός Αλλαγής Γλώσσας ---
  6. if (isset($_GET['lang']) && in_array($_GET['lang'], ['el', 'en'])) {
  7. $_SESSION['lang'] = $_GET['lang'];
  8. }
  9. $current_lang = $_SESSION['lang'] ?? 'el';
  10. $translations = [
  11. 'el' => [
  12. 'login_title' => 'Σύνδεση Διαχειριστή - Hockey CMS',
  13. 'app_name' => 'Hockey CMS - Admin',
  14. 'username' => 'Όνομα Χρήστη',
  15. 'password' => 'Κωδικός Πρόσβασης',
  16. 'btn_login' => 'Σύνδεση',
  17. 'or' => 'Ή',
  18. 'btn_google' => 'Σύνδεση Διαχειριστή με Google',
  19. 'err_empty' => 'Παρακαλώ συμπληρώστε όλα τα πεδία.',
  20. 'err_invalid' => 'Λάθος όνομα χρήστη ή κωδικός.'
  21. ],
  22. 'en' => [
  23. 'login_title' => 'Admin Login - Hockey CMS',
  24. 'app_name' => 'Hockey CMS - Admin',
  25. 'username' => 'Username',
  26. 'password' => 'Password',
  27. 'btn_login' => 'Login',
  28. 'or' => 'OR',
  29. 'btn_google' => 'Admin Sign in with Google',
  30. 'err_empty' => 'Please fill in all fields.',
  31. 'err_invalid' => 'Invalid username or password.'
  32. ]
  33. ];
  34. $t = $translations[$current_lang];
  35. // Αν ο χρήστης είναι ήδη συνδεδεμένος ως Admin
  36. if (isset($_SESSION['user_id']) && isset($_SESSION['role_id']) && $_SESSION['role_id'] == 1) {
  37. header("Location: index.php");
  38. exit;
  39. }
  40. $error = '';
  41. if (isset($_SESSION['login_error'])) {
  42. $error = $_SESSION['login_error'];
  43. unset($_SESSION['login_error']);
  44. }
  45. if ($_SERVER['REQUEST_METHOD'] === 'POST') {
  46. $username = trim($_POST['username']);
  47. $password = $_POST['password'];
  48. if (empty($username) || empty($password)) {
  49. $error = $t['err_empty'];
  50. } else {
  51. $stmt = $pdo->prepare("SELECT id, role_id, password, first_name, username, is_seller FROM users WHERE username = ?");
  52. $stmt->execute([$username]);
  53. $user = $stmt->fetch();
  54. // Έλεγχος ότι είναι όντως Admin (role_id == 1)
  55. if ($user && password_verify($password, $user['password']) && $user['role_id'] == 1) {
  56. session_regenerate_id(true);
  57. $_SESSION['user_id'] = $user['id'];
  58. $_SESSION['role_id'] = $user['role_id'];
  59. $_SESSION['first_name'] = $user['first_name'] ?? '';
  60. $_SESSION['username'] = $user['username'];
  61. $_SESSION['is_seller'] = $user['is_seller'] ?? 0;
  62. header("Location: index.php");
  63. exit;
  64. } else {
  65. $error = $t['err_invalid'];
  66. }
  67. }
  68. }
  69. ?>
  70. <!DOCTYPE html>
  71. <html lang="<?php echo $current_lang; ?>">
  72. <head>
  73. <meta charset="UTF-8">
  74. <title><?php echo $t['login_title']; ?></title>
  75. <link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700;800&display=swap" rel="stylesheet">
  76. <style>
  77. :root {
  78. --primary: #f97316;
  79. --primary-hover: #ea580c;
  80. --bg-color: #0b1120;
  81. --panel-bg: #1e293b;
  82. --border-color: #334155;
  83. --text-main: #f8fafc;
  84. --text-muted: #94a3b8;
  85. }
  86. body { font-family: 'Inter', sans-serif; background-color: var(--bg-color); display: flex; justify-content: center; align-items: center; height: 100vh; margin: 0; flex-direction: column; }
  87. .login-box { background: var(--panel-bg); padding: 40px; border-radius: 8px; box-shadow: 0 10px 25px rgba(0,0,0,0.5); width: 100%; max-width: 350px; border: 1px solid var(--border-color); }
  88. .login-box h2 { text-align: center; margin-top: 0; margin-bottom: 25px; color: var(--primary); font-weight: 800; letter-spacing: 0.5px; text-transform: uppercase; }
  89. .form-group { margin-bottom: 20px; }
  90. .form-group label { display: block; margin-bottom: 8px; color: var(--text-muted); font-size: 13px; font-weight: 600; text-transform: uppercase; letter-spacing: 0.5px; }
  91. .form-group input { width: 100%; padding: 12px; background: #0f172a; border: 1px solid var(--border-color); color: var(--text-main); border-radius: 6px; box-sizing: border-box; font-family: 'Inter', sans-serif; outline: none; transition: 0.2s; }
  92. .form-group input:focus { border-color: var(--primary); box-shadow: 0 0 0 2px rgba(249, 115, 22, 0.2); }
  93. .btn { width: 100%; padding: 14px; background: var(--primary); color: white; border: none; border-radius: 6px; cursor: pointer; font-size: 15px; font-weight: 800; text-transform: uppercase; letter-spacing: 1px; margin-top: 10px; transition: 0.2s; }
  94. .btn:hover { background: var(--primary-hover); transform: translateY(-1px); }
  95. .btn-google { display: flex; align-items: center; justify-content: center; gap: 10px; width: 100%; padding: 12px; background: #ffffff; color: #1e293b; border: none; border-radius: 6px; cursor: pointer; font-size: 14px; font-weight: 700; text-decoration: none; margin-top: 15px; transition: 0.2s; box-sizing: border-box; }
  96. .btn-google:hover { background: #f1f5f9; }
  97. .divider { text-align: center; border-bottom: 1px solid var(--border-color); line-height: 0.1em; margin: 25px 0 20px 0; }
  98. .divider span { background: var(--panel-bg); padding: 0 10px; color: var(--text-muted); font-size: 12px; font-weight: 600; text-transform: uppercase; }
  99. .error { background: rgba(239, 68, 68, 0.1); border: 1px solid rgba(239, 68, 68, 0.2); color: #fca5a5; padding: 10px; border-radius: 6px; margin-bottom: 20px; text-align: center; font-size: 14px; font-weight: 600; }
  100. .lang-switch { margin-bottom: 20px; display: flex; gap: 10px; justify-content: center; }
  101. .lang-switch a { color: var(--text-muted); text-decoration: none; font-size: 13px; font-weight: 700; padding: 4px 10px; border-radius: 12px; transition: 0.2s; }
  102. .lang-switch a.active { background: var(--border-color); color: var(--text-main); }
  103. .lang-switch a:hover { color: var(--text-main); }
  104. </style>
  105. </head>
  106. <body>
  107. <div class="lang-switch">
  108. <a href="?lang=el" class="<?php echo $current_lang == 'el' ? 'active' : ''; ?>">GR</a>
  109. <a href="?lang=en" class="<?php echo $current_lang == 'en' ? 'active' : ''; ?>">EN</a>
  110. </div>
  111. <div class="login-box">
  112. <h2><?php echo $t['app_name']; ?></h2>
  113. <?php if ($error): ?>
  114. <div class="error"><?php echo htmlspecialchars($error); ?></div>
  115. <?php endif; ?>
  116. <form method="POST" action="login.php">
  117. <div class="form-group">
  118. <label><?php echo $t['username']; ?></label>
  119. <input type="text" name="username" required>
  120. </div>
  121. <div class="form-group">
  122. <label><?php echo $t['password']; ?></label>
  123. <input type="password" name="password" required>
  124. </div>
  125. <button type="submit" class="btn"><?php echo $t['btn_login']; ?></button>
  126. </form>
  127. <div class="divider"><span><?php echo $t['or']; ?></span></div>
  128. <!-- Κουμπί Google Login για Admin -->
  129. <a href="google_login.php" class="btn-google">
  130. <svg width="18" height="18" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 48"><path fill="#EA4335" d="M24 9.5c3.54 0 6.7 1.22 9.21 3.6l6.85-6.85C35.9 2.38 30.47 0 24 0 14.62 0 6.51 5.38 2.56 13.22l7.98 6.19C12.43 13.72 17.74 9.5 24 9.5z"/><path fill="#4285F4" d="M46.98 24.55c0-1.57-.15-3.09-.38-4.55H24v9.02h12.94c-.58 2.96-2.26 5.48-4.78 7.18l7.73 6c4.51-4.18 7.09-10.36 7.09-17.65z"/><path fill="#FBBC05" d="M10.53 28.59c-.48-1.45-.76-2.99-.76-4.59s.27-3.14.76-4.59l-7.98-6.19C.92 16.46 0 20.12 0 24c0 3.88.92 7.54 2.56 10.78l7.97-6.19z"/><path fill="#34A853" d="M24 48c6.48 0 11.93-2.13 15.89-5.81l-7.73-6c-2.15 1.45-4.92 2.3-8.16 2.3-6.26 0-11.57-4.22-13.46-9.91l-7.98 6.19C6.51 42.62 14.62 48 24 48z"/><path fill="none" d="M0 0h48v48H0z"/></svg>
  131. <?php echo $t['btn_google']; ?>
  132. </a>
  133. </div>
  134. </body>
  135. </html>