<?php header('Content-Type: text/html; charset=utf-8'); session_start(); include 'db.php'; $id = $_GET['id'] ?? 0; // Fetch company (now also fetch description) $stmt = $pdo->prepare(" SELECT c.*, cat.name AS category FROM companies c LEFT JOIN categories cat ON c.category_id = cat.id WHERE c.id=? "); $stmt->execute([$id]); $company = $stmt->fetch(); if (!$company) { die("Company not found. <a href='index.php'>Back to home</a>"); } // Add new review if ($_SERVER['REQUEST_METHOD'] == 'POST' && isset($_SESSION['user_id'])) { $rating = $_POST['rating']; $comment = $_POST['review_text']; $pdo->prepare('INSERT INTO reviews (user_id, company_id, rating, comment) VALUES (?,?,?,?)') ->execute([$_SESSION['user_id'], $id, $rating, $comment]); header("Location: review.php?id=$id"); exit; } // Fetch reviews $stmt = $pdo->prepare(" SELECT r.*, u.username, u.profile_image AS user_image FROM reviews r LEFT JOIN users u ON r.user_id = u.id WHERE r.company_id=? ORDER BY r.id DESC "); $stmt->execute([$id]); $reviews = $stmt->fetchAll(); // Stats $stmt = $pdo->prepare("SELECT ROUND(AVG(rating),1) AS avg_rating, MAX(rating) AS highest_rating, COUNT(*) AS total_reviews FROM reviews WHERE company_id=?"); $stmt->execute([$id]); $stats = $stmt->fetch(); // Latest reviews $latestReviews = $pdo->query(" SELECT r.comment, r.rating, u.username, c.name AS company_name FROM reviews r JOIN users u ON r.user_id = u.id JOIN companies c ON r.company_id = c.id ORDER BY r.id DESC LIMIT 5 ")->fetchAll(); // Top rated companies $topCompanies = $pdo->query(" SELECT c.id, c.name, c.image, ROUND(AVG(r.rating),1) AS avg_rating FROM companies c JOIN reviews r ON c.id = r.company_id GROUP BY c.id HAVING COUNT(r.id) >= 1 ORDER BY avg_rating DESC LIMIT 5 ")->fetchAll(); ?> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title><?= htmlspecialchars($company['name']) ?> - Review Stream</title> <link rel="stylesheet" href="style.css"> <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css"> <!-- Sans-serif fonts --> <link href="https://fonts.googleapis.com/css2?family=Roboto&display=swap" rel="stylesheet"> <link href="https://fonts.googleapis.com/css2?family=Open+Sans&display=swap" rel="stylesheet"> <link href="https://fonts.googleapis.com/css2?family=Poppins&display=swap" rel="stylesheet"> <link href="https://fonts.googleapis.com/css2?family=Raleway&display=swap" rel="stylesheet"> <link href="https://fonts.googleapis.com/css2?family=Roboto+Slab&display=swap" rel="stylesheet"> <link href="https://fonts.googleapis.com/css2?family=Noto+Serif&display=swap" rel="stylesheet"> <!-- Favicon --> <link rel="icon" href="/favicon.png" type="image/png" /> <style> body { margin: 0; padding: 0; /* removed huge padding */ font-family: Arial, sans-serif; background: #f5f5f5; padding-bottom: 200px !important; } .container { max-width: 1200px; margin: auto; padding: 20px; } .content-layout { display: flex; gap: 20px; flex-wrap: wrap; } .main-content { flex: 3; min-width: 250px; background: #fff; padding: 20px; border-radius: 10px; box-shadow: 0 2px 6px rgba(0,0,0,0.1); } .sidebar { flex: 1; min-width: 200px; display: flex; flex-direction: column; gap: 15px; } .sidebar-card { background: #fff; padding: 12px; border-radius: 8px; box-shadow: 0 1px 4px rgba(0,0,0,0.08); } .star-box { display: inline-block; width: 22px; height: 22px; margin-right: 2px; background-color: #d3d3d3; color: white; text-align: center; line-height: 22px; font-size: 14px; border-radius: 3px; } .star-box.filled { background-color: #00b67a; } .about-company { background: #fafafa; margin-top: 25px; padding: 15px; border-left: 4px solid #00b67a; border-radius: 6px; } .about-company h3 { margin-top: 0; color: #333; } .topbar { background: #007BFF; color: white; padding: 10px 20px; display: flex; justify-content: space-between; align-items: center; } .topbar .menu a { color: white; margin-left: 10px; text-decoration: none; } footer { text-align: center; margin-top: 40px; padding: 15px; font-size: 14px; color: #666; } .footer-menu a { margin: 0 8px; color: #666; text-decoration: none; } .review-box { background: #f9f9f9; padding: 10px; margin-bottom: 10px; border-radius: 6px; } .review-box1 p{ font-family: 'Poppins', sans-serif; line-height: 8px !important; font-size: 13px !important; } .review-avatar { width: 40px; height: 40px; border-radius: 50%; object-fit: cover; border: 2px solid #ccc; } .review-user-img { width: 40px; height: 40px; border-radius: 50%; object-fit: cover; margin-right: 10px; } .fixed-footer { position: fixed; left: 0; bottom: 0; width: 100%; background: #222; text-align: center; padding: 10px 0; color: #fff; z-index: 1000; } .fixed-footer p{ font-family: 'Poppins', sans-serif !important; font-size: 13px !important; } .footer-menu a { margin: 0 10px; text-decoration: none; color: #fff; font-family: 'Poppins', sans-serif !important; font-size: 13px !important; } .footer-menu a:hover { text-decoration: underline; } /* Collapsible menu */ .menu { display: none; flex-direction: column; } .menu.active { display: flex; } .menu a { padding: 8px 0; text-decoration: none; color: #333; } .menu-toggle { font-size: 1.5em; cursor: pointer; } @media(min-width: 768px){ .menu { display: flex !important; flex-direction: row; } .menu a { margin-left: 15px; } .menu-toggle { display: none; } } .topbar { display:flex; justify-content:space-between; align-items:center; padding:10px 20px; background:#007BFF; color:white; } .logo { font-size: 20px; font-weight: bold; display: flex; align-items: center; gap: 10px; } .logo-icon { display: inline-flex; align-items: center; justify-content: center; background: linear-gradient(135deg, #a2d4f5, #fefb72); /* light blue to lemon */ border-radius: 50%; width: 36px; height: 36px; box-shadow: 0 2px 6px rgba(0, 0, 0, 0.15); margin-right: 8px; } </style> </head> <body> <div class="topbar"> <div class="logo"><div class="logo-icon"><i class="fas fa-shield-alt" style="color: skyblue; font-size: 25px; margin-left: 6px !important; text-shadow: 0 1px 2px rgba(0, 0, 0, 0.3);"></i> </div> REVIEW STREAM </div> <div class="menu-toggle" onclick="document.querySelector('.menu').classList.toggle('active')"> <i class="fas fa-bars"></i> </div> <div class="menu"> <a href="index.php">Home</a> <a href="companies.php">Companies</a> <a href="blog.php">Newsroom</a> <?php if(isset($_SESSION['user_id'])): ?> <a href="logout.php">Logout</a> <?php else: ?> <a href="login.php">Login</a> <?php endif; ?> <button class="dark-mode-toggle" onclick="document.body.classList.toggle('dark-mode')">🌓</button> </div> </div> <div class="container"> <div class="content-layout"> <div class="main-content"> <div class="card"> <h2><?= htmlspecialchars($company['name']) ?></h2> <div class="review-box1" style="display:flex;gap:10px;align-items:center;"> <img src="images/companies/<?= htmlspecialchars($company['image']) ?>" alt="<?= htmlspecialchars($company['name']) ?>" style="width:100px;height:100px;object-fit:contain;"> <div> <p><a href="<?= htmlspecialchars($company['website']) ?>" target="_blank"><?= htmlspecialchars($company['website']) ?></a></p> <p><?= htmlspecialchars($company['category']) ?></p> <p><?= $stats['total_reviews'] ?> Reviews • AVG: <?= $stats['avg_rating'] ?: 0 ?>/5</p> <p> <?php for($i=1;$i<=5;$i++): ?> <span class="star-box <?= $i<=$stats['highest_rating'] ? 'filled' : '' ?>">★</span> <?php endfor; ?> (<?= $stats['highest_rating'] ?: 0 ?>/5) </p> </div> </div> <?php if(isset($_SESSION['user_id'])): ?> <h3>Add Your Review</h3> <form method="post"> <label>Rating:</label> <select name="rating" required> <option value="">Select...</option> <?php for($i=1;$i<=5;$i++): ?> <option value="<?= $i ?>"><?= $i ?></option> <?php endfor; ?> </select> <label>Review Text:</label> <textarea name="review_text" required></textarea> <button type="submit">Submit Review</button> </form> <?php else: ?> <p><a href="login.php">Login</a> to add your review.</p> <?php endif; ?> <h3>User Reviews</h3> <?php if($reviews): ?> <?php foreach($reviews as $r): ?> <div class="review-box" style="display:flex;gap:10px;align-items:flex-start;"> <img src="<?= $r['user_image'] ? 'images/user/' . htmlspecialchars($r['user_image']) : 'images/user/default-avatar.png' ?>" alt="User Image" class="review-user-img"/> <div> <p><strong><?= htmlspecialchars($r['username']) ?></strong> rated <?php for($i=1;$i<=5;$i++): ?> <span class="star-box <?= $i<=$r['rating'] ? 'filled' : 'empty' ?>">★</span> <?php endfor; ?> (<?= $r['rating'] ?>/5) </p> <p><?= nl2br(htmlspecialchars($r['comment'])) ?></p> </div> </div> <?php endforeach; ?> <?php else: ?> <p>No reviews yet.</p> <?php endif; ?> <?php if(!empty($company['description'])): ?> <div class="about-company"> <h3>About <?= htmlspecialchars($company['name']) ?></h3> <p><?= nl2br(htmlspecialchars($company['description'])) ?></p> </div> <?php endif; ?> </div> </div> <div class="sidebar"> <div class="sidebar-card"> <h4>Latest Reviews</h4> <?php foreach($latestReviews as $rev): ?> <p><strong><?= htmlspecialchars($rev['username']) ?></strong> on <em><?= htmlspecialchars($rev['company_name']) ?></em>:</p> <div> <?php for($i=1;$i<=5;$i++): ?> <span class="star-box <?= $i<=$rev['rating'] ? 'filled' : 'empty' ?>">★</span> <?php endfor; ?> (<?= $rev['rating'] ?>/5) </div> <p style="margin-top:2px;"><?= htmlspecialchars(substr($rev['comment'],0,50)) ?>...</p> <hr> <?php endforeach; ?> </div> <div class="sidebar-card"> <h4>Top Rated Companies</h4> <?php foreach($topCompanies as $top): ?> <div style="display:flex;align-items:center;gap:8px;margin-bottom:5px;"> <img src="images/companies/<?= htmlspecialchars($top['image']) ?>" alt="<?= htmlspecialchars($top['name']) ?>" style="width:30px;height:30px;object-fit:contain;"> <span><?= htmlspecialchars($top['name']) ?> (<?= $top['avg_rating'] ?>/5)</span> </div> <?php endforeach; ?> </div> </div> </div> </div> <?php include 'footer.php'; ?> </body> </html>