| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175 |
- <?php
- // Αρχείο: /var/www/html/hockey-cms/seller_orders.php
- session_start();
- if (!isset($_SESSION['user_id']) or empty($_SESSION['is_seller'])) {
- header("Location: index.php");
- exit;
- }
- require_once __DIR__ . '/vendor/autoload.php';
- require_once __DIR__ . '/config/database.php';
- // --- Μηχανισμός Αλλαγής Γλώσσας ---
- if (isset($_GET['lang']) and in_array($_GET['lang'], ['el', 'en'])) {
- $_SESSION['lang'] =$_GET['lang'];
- }
- $current_lang =$_SESSION['lang'] ?? 'el';
- // --- Λεξικό Μεταφράσεων ---
- $translations = [
- 'el' => [
- 'seller_panel' => 'Πίνακας Πωλητή',
- 'my_listings' => 'Οι Αγγελίες Μου',
- 'customer_orders' => 'Παραγγελίες Πελατών',
- 'order_id' => 'Κωδ. Παραγγελίας',
- 'customer' => 'Πελάτης',
- 'contact' => 'Επικοινωνία / Αποστολή',
- 'date' => 'Ημερομηνία',
- 'my_products' => 'Τα Προϊόντα μου στην παραγγελία',
- 'status' => 'Κατάσταση',
- 'no_orders' => 'Δεν υπάρχουν ακόμα παραγγελίες για τα προϊόντα σου.',
- 'status_pending' => 'Εκκρεμεί',
- 'status_completed' => 'Ολοκληρώθηκε',
- 'status_cancelled' => 'Ακυρώθηκε',
- 'btn_update' => 'Ενημέρωση',
- 'btn_delete' => 'Διαγραφή',
- 'confirm_delete' => 'Σίγουρα θέλετε να διαγράψετε αυτή την παραγγελία;',
- 'msg_status_ok' => 'Η κατάσταση της παραγγελίας ενημερώθηκε!',
- 'msg_delete_ok' => 'Η παραγγελία διαγράφηκε επιτυχώς!',
- 'error' => 'Σφάλμα:'
- ],
- 'en' => [
- 'seller_panel' => 'Seller Dashboard',
- 'my_listings' => 'My Listings',
- 'customer_orders' => 'Customer Orders',
- 'order_id' => 'Order ID',
- 'customer' => 'Customer',
- 'contact' => 'Contact / Shipping',
- 'date' => 'Date',
- 'my_products' => 'My Products in this order',
- 'status' => 'Status',
- 'no_orders' => 'No orders found for your products yet.',
- 'status_pending' => 'Pending',
- 'status_completed' => 'Completed',
- 'status_cancelled' => 'Cancelled',
- 'btn_update' => 'Update',
- 'btn_delete' => 'Delete',
- 'confirm_delete' => 'Are you sure you want to delete this order?',
- 'msg_status_ok' => 'Order status updated successfully!',
- 'msg_delete_ok' => 'Order deleted successfully!',
- 'error' => 'Error:'
- ]
- ];
- $t =$translations[$current_lang];$seller_id = $_SESSION['user_id'];$message = '';
- // --- Χειρισμός Φόρμας (Αλλαγή Status ή Διαγραφή) ---
- if ($_SERVER['REQUEST_METHOD'] === 'POST') {
- if (isset($_POST['action']) &&$_POST['action'] === 'update_status') {
- $order_id = (int)$_POST['order_id'];
- $new_status =$_POST['status'];
-
- try {
- $stmt =$pdo->prepare("UPDATE orders SET status = ? WHERE id = ?");
- $stmt->execute([$new_status, $order_id]);$message = "<div class='alert success'>{$t['msg_status_ok']}</div>";
- } catch (Exception $e) {$message = "<div class='alert error'>{$t['error']} " . $e->getMessage() . "</div>";
- }
- }
- elseif (isset($_POST['action']) &&$_POST['action'] === 'delete_order') {
- $order_id = (int)$_POST['order_id'];
-
- try {
- // Διαγράφουμε πρώτα τα είδη από το order_items και μετά την παραγγελία
- $pdo->beginTransaction();
- $pdo->prepare("DELETE FROM order_items WHERE order_id = ?")->execute([$order_id]);
- $pdo->prepare("DELETE FROM orders WHERE id = ?")->execute([$order_id]);
- $pdo->commit();$message = "<div class='alert success'>{$t['msg_delete_ok']}</div>";
- } catch (Exception $e) {
- $pdo->rollBack();$message = "<div class='alert error'>{$t['error']} " . $e->getMessage() . "</div>";
- }
- }
- }
- // --- Ανάκτηση Κατηγοριών (ΓΙΑ ΤΟ ΜΕΝΟΥ / SIDEBAR) ---
- try {
- $categoriesRaw =$pdo->query("SELECT * FROM categories ORDER BY sort_order ASC, name_el ASC")->fetchAll(PDO::FETCH_ASSOC);
- $categories = [];
- foreach ($categoriesRaw as $cat) {$cat['display_name'] = ($current_lang === 'en' && !empty($cat['name_en'])) ? $cat['name_en'] :$cat['name_el'];
- $categories[] =$cat;
- }
- } catch (Exception $e) {$categories = [];
- }
- // Ανάκτηση Παραγγελιών που περιέχουν προϊόντα αυτού του Πωλητή
- $stmtOrders =$pdo->prepare("
- SELECT o.id as order_id, o.customer_name, o.customer_email, o.customer_phone, o.shipping_address, o.status as order_status, o.created_at,
- oi.quantity, oi.price, p.title as product_title, p.id as product_id
- FROM orders o
- JOIN order_items oi ON o.id = oi.order_id
- JOIN products p ON oi.product_id = p.id
- WHERE p.seller_id = ?
- ORDER BY o.created_at DESC
- ");
- $stmtOrders->execute([$seller_id]);
- $raw_orders =$stmtOrders->fetchAll(PDO::FETCH_ASSOC);
- // Ομαδοποίηση παραγγελιών ανά order_id
- $orders = [];
- foreach ($raw_orders as$row) {
- $oid =$row['order_id'];
- if (!isset($orders[$oid])) {
- $orders[$oid] = [
- 'id' => $oid,
- 'customer_name' => $row['customer_name'],
- 'customer_email' => $row['customer_email'],
- 'customer_phone' => $row['customer_phone'],
- 'shipping_address' => $row['shipping_address'],
- 'status' => $row['order_status'],
- 'created_at' => $row['created_at'],
- 'items' => []
- ];
- }
- $orders[$oid]['items'][] = [
- 'product_id' => $row['product_id'],
- 'title' => $row['product_title'],
- 'quantity' => $row['quantity'],
- 'price' => $row['price']
- ];
- }
- // --- ΦΟΡΤΩΣΗ TWIG THEME ---
- // --- ΦΟΡΤΩΣΗ SETTINGS (Theme, Logo, Title) ---
- $active_theme = 'default';
- $site_logo = '';$site_title = 'Hockey CMS';
- try {
- $stmtSettings =$pdo->query("SELECT `key`, value FROM settings WHERE `key` IN ('active_theme', 'site_logo', 'site_title')");
- while ($row =$stmtSettings->fetch(PDO::FETCH_ASSOC)) {
- if ($row['key'] === 'active_theme' && !empty($row['value'])) {
- $active_theme =$row['value'];
- } elseif ($row['key'] === 'site_logo') {
- $site_logo =$row['value'];
- } elseif ($row['key'] === 'site_title' && !empty($row['value'])) {
- $site_title =$row['value'];
- }
- }
- } catch (Exception $e) {}
- $theme_dir = __DIR__ . '/themes/' .$active_theme;
- if (!is_dir($theme_dir)) {
- $active_theme = 'default';$theme_dir = __DIR__ . '/themes/default';
- }
- $loader = new \Twig\Loader\FilesystemLoader($theme_dir);
- $twig = new \Twig\Environment($loader, ['cache' => false]);
- $twig->addGlobal('session',$_SESSION);
- $twig->addGlobal('current_lang',$current_lang);
- $twig->addGlobal('site_logo',$site_logo); // Ορισμός global για να εμφανίζεται σωστά το λογότυπο
- echo $twig->render('seller_orders.html.twig', [
- 'site_title' => $site_title,
- 't' => $t,
- 'message' => $message,
- 'orders' => $orders,
- 'categories' => $categories
- ]);
|