File manager - Edit - /home/webapp69.cm.in.th/u69319090039/Shop39/database/app/Controllers/Seller/DashboardController.php
Back
<?php class DashboardController extends Controller { public function sellerDashboard(): void { $seller = Auth::sellerProfile(); $db = Database::getInstance(); // Calculate Stats $prodStmt = $db->prepare("SELECT COUNT(*) FROM products WHERE seller_id = :sid"); $prodStmt->execute(['sid' => $seller['id']]); $totalProducts = $prodStmt->fetchColumn(); $orderStmt = $db->prepare("SELECT COUNT(*), COALESCE(SUM(total_amount), 0) FROM orders WHERE seller_id = :sid"); $orderStmt->execute(['sid' => $seller['id']]); [$totalOrders, $totalSales] = $orderStmt->fetch(PDO::FETCH_NUM); // Count New / Unprocessed Orders for this seller (pending, waiting_payment, paid) AND unread $newOrderStmt = $db->prepare(" SELECT COUNT(*), COALESCE(MAX(id), 0) FROM orders WHERE seller_id = :sid AND status IN ('pending', 'waiting_payment', 'paid') AND is_read = 0 "); $newOrderStmt->execute(['sid' => $seller['id']]); [$newOrdersCount, $latestOrderId] = $newOrderStmt->fetch(PDO::FETCH_NUM); // Get recent new orders for banner $recentNewOrdersStmt = $db->prepare(" SELECT o.id, o.order_number, o.total_amount, o.status, o.created_at, u.full_name as customer_name FROM orders o JOIN users u ON o.user_id = u.id WHERE o.seller_id = :sid AND o.status IN ('pending', 'waiting_payment', 'paid') ORDER BY o.id DESC LIMIT 3 "); $recentNewOrdersStmt->execute(['sid' => $seller['id']]); $recentNewOrders = $recentNewOrdersStmt->fetchAll(); $this->render('seller/dashboard', [ 'title' => 'Seller Dashboard', 'seller' => $seller, 'totalProducts' => $totalProducts, 'totalOrders' => $totalOrders, 'totalSales' => $totalSales, 'newOrdersCount' => (int)$newOrdersCount, 'latestOrderId' => (int)$latestOrderId, 'recentNewOrders' => $recentNewOrders ], 'seller'); } /** * AJAX endpoint: Polling for new orders for the currently logged-in seller * GET /seller/api/check-new-orders */ public function checkNewOrders(): void { header('Content-Type: application/json; charset=utf-8'); $seller = Auth::sellerProfile(); if (!$seller || $seller['status'] !== 'approved' || !empty($seller['deleted_at'])) { echo json_encode(['success' => false, 'count' => 0, 'latest_order_id' => 0]); return; } $db = Database::getInstance(); $stmt = $db->prepare(" SELECT COUNT(*) as new_count, COALESCE(MAX(id), 0) as latest_id FROM orders WHERE seller_id = :sid AND status IN ('pending', 'waiting_payment', 'paid') AND is_read = 0 "); $stmt->execute(['sid' => $seller['id']]); $row = $stmt->fetch(); $newCount = (int)($row['new_count'] ?? 0); $latestId = (int)($row['latest_id'] ?? 0); // Fetch latest order details if new count > 0 $latestOrder = null; if ($newCount > 0) { $latestStmt = $db->prepare(" SELECT o.id, o.order_number, o.total_amount, o.status, o.created_at, u.full_name as customer_name FROM orders o JOIN users u ON o.user_id = u.id WHERE o.seller_id = :sid AND o.status IN ('pending', 'waiting_payment', 'paid') ORDER BY o.id DESC LIMIT 1 "); $latestStmt->execute(['sid' => $seller['id']]); $latestOrder = $latestStmt->fetch(); } echo json_encode([ 'success' => true, 'count' => $newCount, 'latest_order_id' => $latestId, 'latest_order' => $latestOrder ]); } public function settings(): void { $seller = Auth::sellerProfile(); $this->render('seller/settings', [ 'title' => 'จัดการข้อมูลร้านค้า', 'seller' => $seller ], 'seller'); } public function updateSettings(): void { $this->validateCsrf(); $seller = Auth::sellerProfile(); $shopName = Security::sanitizeString($_POST['shop_name'] ?? ''); $description = Security::sanitizeString($_POST['description'] ?? ''); $phone = Security::sanitizeString($_POST['phone'] ?? ''); $address = Security::sanitizeString($_POST['address'] ?? ''); $promptpay = Security::sanitizeString($_POST['promptpay_number'] ?? ''); $bankAccount = Security::sanitizeString($_POST['bank_account'] ?? ''); $latitude = isset($_POST['latitude']) && $_POST['latitude'] !== '' ? (float)$_POST['latitude'] : null; $longitude = isset($_POST['longitude']) && $_POST['longitude'] !== '' ? (float)$_POST['longitude'] : null; if (empty($shopName) || empty($phone) || empty($address)) { Session::setFlash('danger', 'กรุณากรอกชื่อร้าน เบอร์โทร และที่อยู่ให้ครบถ้วน'); $this->redirect('seller/settings'); } $updateData = [ 'shop_name' => $shopName, 'slug' => Security::slugify($shopName), 'description' => $description, 'phone' => $phone, 'address' => $address, 'latitude' => $latitude, 'longitude' => $longitude, 'promptpay_number' => $promptpay, 'bank_account' => $bankAccount ]; // Handle Logo Upload if (!empty($_FILES['logo']['name']) && $_FILES['logo']['error'] === UPLOAD_ERR_OK) { $ext = pathinfo($_FILES['logo']['name'], PATHINFO_EXTENSION); $logoName = 'logo_' . $seller['id'] . '_' . time() . '.' . strtolower($ext); $targetDir = SITE_ROOT . '/public/uploads/shops/'; if (!file_exists($targetDir)) { mkdir($targetDir, 0777, true); } if (move_uploaded_file($_FILES['logo']['tmp_name'], $targetDir . $logoName)) { $updateData['logo'] = 'uploads/shops/' . $logoName; } } // Handle Banner Upload if (!empty($_FILES['banner']['name']) && $_FILES['banner']['error'] === UPLOAD_ERR_OK) { $ext = pathinfo($_FILES['banner']['name'], PATHINFO_EXTENSION); $bannerName = 'banner_' . $seller['id'] . '_' . time() . '.' . strtolower($ext); $targetDir = SITE_ROOT . '/public/uploads/shops/'; if (!file_exists($targetDir)) { mkdir($targetDir, 0777, true); } if (move_uploaded_file($_FILES['banner']['tmp_name'], $targetDir . $bannerName)) { $updateData['banner'] = 'uploads/shops/' . $bannerName; } } $sellerModel = new SellerProfile(); $sellerModel->update($seller['id'], $updateData); Session::setFlash('success', 'อัปเดตข้อมูลร้านค้าเรียบร้อยแล้ว'); $this->redirect('seller/settings'); } }
| ver. 1.4 |
Github
|
.
| PHP 7.4.33 | Generation time: 0.24 |
proxy
|
phpinfo
|
Settings