| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142 |
- <?php
- // Αρχείο: /var/www/html/hockey-cms/login.php
- if (session_status() === PHP_SESSION_NONE) { session_start(); }
- require_once __DIR__ . '/vendor/autoload.php';
- require_once __DIR__ . '/config/database.php';
- // Αν ο χρήστης είναι ήδη συνδεδεμένος, τον στέλνουμε ανάλογα με τον ρόλο του
- if (isset($_SESSION['user_id'])) {
- if (isset($_SESSION['role_id']) && ($_SESSION['role_id'] == 1 || ($_SESSION['is_seller'] ?? 0) == 1)) {
- header("Location: admin/index.php");
- } else {
- header("Location: index.php");
- }
- exit;
- }
- // --- Μηχανισμός Αλλαγής Γλώσσας ---
- if (isset($_GET['lang']) && in_array($_GET['lang'], ['el', 'en'])) {
- $_SESSION['lang'] = $_GET['lang'];
- }
- $current_lang = $_SESSION['lang'] ?? 'el';
- // --- Εύρεση Ενεργού Theme (Χωρίς backticks για αποφυγή σφαλμάτων) ---
- $active_theme = 'default';
- try {
- $stmt = $pdo->query("SELECT * FROM settings");
- while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
- if (isset($row['key']) && $row['key'] === 'active_theme' && !empty($row['value'])) {
- $active_theme = trim($row['value']);
- }
- }
- } catch (Exception $e) {}
- $theme_dir = __DIR__ . '/themes/' . $active_theme;
- if (!is_dir($theme_dir)) {
- $active_theme = 'default';
- $theme_dir = __DIR__ . '/themes/default';
- }
- // --- Αρχικοποίηση Twig ---
- $loader = new \Twig\Loader\FilesystemLoader($theme_dir);
- $twig = new \Twig\Environment($loader, ['cache' => false]);
- $twig->addGlobal('session', $_SESSION);
- $twig->addGlobal('current_lang', $current_lang);
- // --- Φόρτωση Δυναμικών Κειμένων Site ---
- $siteTexts = [];
- try {
- $text_column = ($current_lang === 'en') ? 'text_value_en' : 'text_value_el';
- $textsStmt = $pdo->query("SELECT text_key, {$text_column} as text_value FROM site_texts");
- while ($row = $textsStmt->fetch(PDO::FETCH_ASSOC)) {
- $siteTexts[$row['text_key']] = $row['text_value'];
- }
- } catch (Exception $e) {}
- $twig->addGlobal('text', $siteTexts);
- // --- Φόρτωση Logo Site ---
- $site_logo = '';
- try {
- $stmtSettings = $pdo->query("SELECT * FROM settings");
- while ($row = $stmtSettings->fetch(PDO::FETCH_ASSOC)) {
- if (isset($row['key']) && $row['key'] === 'site_logo') {
- $site_logo = $row['value'];
- }
- }
- } catch (Exception $e) {}
- $twig->addGlobal('site_logo', $site_logo);
- // --- Μεταφράσεις για τη φόρμα σύνδεσης ---
- $translations = [
- 'el' => [
- 'page_title' => 'Σύνδεση - Hockey CMS',
- 'heading' => 'Καλώς ήρθατε',
- 'subheading' => 'Συνδεθείτε στον λογαριασμό σας',
- 'username' => 'Email ή Username',
- 'password' => 'Κωδικός Πρόσβασης',
- 'btn_login' => 'Σύνδεση',
- 'btn_google' => 'Σύνδεση με Google',
- 'register_text' => 'Δεν έχετε λογαριασμό;',
- 'register_link' => 'Εγγραφείτε εδώ',
- 'err_empty' => 'Παρακαλώ συμπληρώστε όλα τα πεδία.',
- 'err_invalid' => 'Λάθος στοιχεία σύνδεσης.'
- ],
- 'en' => [
- 'page_title' => 'Login - Hockey CMS',
- 'heading' => 'Welcome Back',
- 'subheading' => 'Sign in to your account',
- 'username' => 'Email or Username',
- 'password' => 'Password',
- 'btn_login' => 'Sign In',
- 'btn_google' => 'Sign in with Google',
- 'register_text' => "Don't have an account?",
- 'register_link' => 'Register here',
- 'err_empty' => 'Please fill in all fields.',
- 'err_invalid' => 'Invalid login credentials.'
- ]
- ];
- $t = $translations[$current_lang];
- $error = '';
- // --- Διαχείριση POST (Κλασικό Login) ---
- if ($_SERVER['REQUEST_METHOD'] === 'POST') {
- $username = trim($_POST['username'] ?? '');
- $password = $_POST['password'] ?? '';
- if (empty($username) || empty($password)) {
- $error = $t['err_empty'];
- } else {
- $stmt = $pdo->prepare("SELECT * FROM users WHERE username = ? OR email = ?");
- $stmt->execute([$username, $username]);
- $user = $stmt->fetch(PDO::FETCH_ASSOC);
- if ($user && password_verify($password, $user['password'])) {
- session_regenerate_id(true);
- $_SESSION['user_id'] = $user['id'];
- $_SESSION['username'] = $user['username'];
- $_SESSION['role_id'] = $user['role_id'];
- $_SESSION['first_name'] = $user['first_name'] ?? '';
- $_SESSION['is_seller'] = $user['is_seller'] ?? 0;
- if ($user['role_id'] == 1 || $user['is_seller'] == 1) {
- header("Location: admin/index.php");
- } else {
- header("Location: index.php");
- }
- exit;
- } else {
- $error = $t['err_invalid'];
- }
- }
- }
- // Render μέσω Twig από τον φάκελο του ενεργού theme
- echo $twig->render('login.html.twig', [
- 't' => $t,
- 'current_lang' => $current_lang,
- 'error' => $error,
- 'site_title' => 'Hockey Gear CMS'
- ]);
|