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'
]);