File "blog_details-20260506181750.php"

Full Path: /home/alphpwcp/previewstream.online/old/blog_details-20260506181750.php
File size: 11.17 KB
MIME-type: text/x-php
Charset: utf-8

<?php
header('Content-Type: text/html; charset=UTF-8');
session_start();
require_once 'db.php'; // Use centralized, secure DB connection

$id = isset($_GET['id']) ? (int)$_GET['id'] : 0;

// Fetch selected blog post with category name
$stmt = $pdo->prepare("
    SELECT blogs.*, categories.name AS category 
    FROM blogs 
    LEFT JOIN categories ON blogs.category_id = categories.id 
    WHERE blogs.id = ? 
    LIMIT 1
");
$stmt->execute([$id]);
$row = $stmt->fetch(PDO::FETCH_ASSOC);






// Fetch other blog recommendations
// Step 1: Always include blog ID 8 if it's not the current blog
$related = [];

if ($id != 8) {
    $stmt = $pdo->prepare("SELECT id, title FROM blogs WHERE id = ?");
    $stmt->execute([8]);
    $fixedBlog = $stmt->fetch(PDO::FETCH_ASSOC);
    if ($fixedBlog) {
        $related[] = $fixedBlog;
    }
}

// Step 2: Fetch 3 more blogs excluding the current blog and blog ID 8
$excludeIds = [$id, 8];
$placeholders = implode(',', array_fill(0, count($excludeIds), '?'));

$stmt = $pdo->prepare("
    SELECT id, title 
    FROM blogs 
    WHERE id NOT IN ($placeholders)
    ORDER BY created_at DESC 
    LIMIT 3
");
$stmt->execute($excludeIds);
$moreBlogs = $stmt->fetchAll(PDO::FETCH_ASSOC);

// Step 3: Merge all into final related list
$recommendedBlogs = array_merge($related, $moreBlogs);











// Fetch latest blog posts for sidebar
$latestBlogsStmt = $pdo->query("
    SELECT id, title 
    FROM blogs 
    ORDER BY created_at DESC 
    LIMIT 5
");
$latestBlogs = $latestBlogsStmt->fetchAll(PDO::FETCH_ASSOC);

// Fetch latest user reviews
$latestReviewsStmt = $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
");
$latestReviews = $latestReviewsStmt->fetchAll(PDO::FETCH_ASSOC);

// Fetch top-rated companies
$topCompaniesStmt = $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
");
$topCompanies = $topCompaniesStmt->fetchAll(PDO::FETCH_ASSOC);
?>

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title><?= $row ? htmlspecialchars($row['title']) : 'Post Not Found' ?> - Review Stream</title>
    <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; font-family:Arial,sans-serif; background:#f9f9f9; padding-bottom: 140px}
.topbar { display:flex; justify-content:space-between; align-items:center; padding:10px 20px; background:#007BFF; color:white; }
.logo { font-weight:bold; font-size:20px; }
.menu a { color:white; margin:0 8px; text-decoration:none; }
.menu a:hover { text-decoration:underline; }
.container { max-width:1200px; margin:20px auto; padding:0 10px; }
.content-layout { display: flex; gap: 20px; flex-wrap: wrap; }
.main-content { 
  flex: 3; 
  min-width: 250px; 
}
.sidebar { flex: 1; min-width: 200px; display: flex; flex-direction: column; gap: 20px; }
.sidebar-card {
  background: white;
  padding: 20px;
  border-radius: 12px;
  box-shadow: 0 4px 10px rgba(0,0,0,0.07);
  transition: box-shadow 0.3s ease;
}
.sidebar-card:hover { box-shadow: 0 6px 14px rgba(0,0,0,0.12); }

.review-box {
  background: white;
  padding: 10px;
  border-radius: 8px;
  margin-bottom: 15px;
}
.hero {
  background: linear-gradient(90deg, #007BFF, #00b67a);
  color: white;
  text-align: center;
  padding: 40px 20px;
  border-radius: 12px;
  margin-bottom: 30px;
  box-shadow: 0 6px 14px rgba(0,0,0,0.15);
}
.hero h2 { margin: 0; font-size: 28px; }
.star-box { display: inline-block; width: 20px; height: 20px; margin-right: 2px; text-align: center; line-height: 20px; border-radius: 3px; }
.star-box.filled { background: #00b67a; color: white; }
.star-box.empty { background: #d3d3d3; color: white; }
.blog-post { background:white; padding:20px; border-radius:12px; box-shadow:0 4px 10px rgba(0,0,0,0.07); margin-bottom:20px; }
.blog-post img { width: 100%; border-radius: 8px; height: auto; object-fit: cover; margin-bottom: 15px; }
.category { font-size: 0.9em; color: #999; margin-bottom: 10px; }
@media (max-width: 768px) {
  .topbar { flex-direction: column; gap: 10px; }
  .menu { display: flex; flex-wrap: wrap; justify-content: center; }
}

.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;
    }
	
	
	
.topbar {
  background-color: #007BFF; /* Blue */
  color: #fff;
  display: flex;
  align-items: center;
  justify-content: space-between;
  padding: 10px 15px;
  position: relative;
}

.logo {
  display: flex;
  align-items: center;
  font-weight: bold;
  font-size: 18px;
}

.logo-icon {
  background: linear-gradient(135deg, #a2d4f5, #fefb72);
  border-radius: 50%;
  width: 36px;
  height: 36px;
  display: flex;
  align-items: center;
  justify-content: center;
  margin-right: 8px;
}

.menu-toggle {
  font-size: 1.5em;
  color: #fff;
  cursor: pointer;
  display: none;
}

.menu {
  display: flex;
  gap: 15px;
}

.menu a, .menu button {
  color: #fff;
  text-decoration: none;
  background: none;
  border: none;
  cursor: pointer;
}

/* Mobile styles */
@media (max-width: 768px) {
  .menu-toggle {
    display: block;
  }

  .menu {
    flex-direction: column;
    background-color: #007BFF;
    position: absolute;
    top: 60px;
    left: 0;
    right: 0;
    display: none;
    padding: 10px 0;
    z-index: 1000;
  }

  .menu.active {
    display: flex;
  }

  .menu a, .menu button {
    padding: 10px 15px;
  }
}



/*Related News*/
.related-news {
  margin-top: 40px;
  padding: 20px;
  border-top: 1px solid #ddd;
  background-color: #f9f9f9;
  font-family: 'Poppins', sans-serif;
}

.related-news h3 {
  font-size: 20px;
  margin-bottom: 15px;
  color: #333;
}

.related-news ul {
  list-style-type: disc;
  padding-left: 20px;
  margin-top: 10px;
}

.related-news li {
  margin-bottom: 10px;
}

.related-news a {
  text-decoration: none;
  color: #007BFF;
  font-weight: 500;
}

.related-news a:hover {
  text-decoration: underline;
  color: #0056b3;
}

</style>
</head>
<body>
<div class="topbar">
  <div class="logo">
    <div class="logo-icon">
      <i class="fas fa-shield-alt" style="color:#4A90E2; font-size: 25px; box-shadow: 0 1px 3px rgba(0,0,0,0.2); margin-left: 1px"></i>
    </div>
    REVIEW STREAM
  </div>

  <div class="menu-toggle" onclick="toggleMenu()">
    <i class="fas fa-bars"></i>
  </div>

  <div class="menu" id="topMenu">
    <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="user-settings.php">My Settings</a>
      <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="hero">
    <h2>📰 News Details</h2>
  </div>
  <div class="content-layout">
    <div class="main-content">
      <?php if ($row): ?>
        <div class="blog-post">
            <?php if ($row['image']): ?>
        <img src="uploads/<?= htmlspecialchars($row['image']) ?>" alt="<?= htmlspecialchars($row['title']) ?>" style="width:100%; border-radius:8px; margin-bottom:15px;">
    <?php endif; ?>
    <h2><?= htmlspecialchars($row['title']) ?></h2>
    <?php if ($row['category']): ?>
        <div class="category">Category: <?= htmlspecialchars($row['category']) ?></div>
    <?php endif; ?>
    <div><?= nl2br(htmlspecialchars($row['content'])) ?></div>
        </div>
      <?php else: ?>
        <p>Post not found.</p>
      <?php endif; ?>
    </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 class="sidebar-card">
        <h4>Latest Blog Posts</h4>
        <?php foreach($latestBlogs as $b): ?>
          <p><a href="blog_details.php?id=<?= $b['id'] ?>"><?= htmlspecialchars($b['title']) ?></a></p>
        <?php endforeach; ?>
      </div>
    </div>
	

  </div>
  
  <?php if (!empty($recommendedBlogs)): ?>
  <div class="related-news">
    <h3>Related News</h3>
    <ul>
      <?php foreach($recommendedBlogs as $blog): ?>
        <li>
          <a href="blog_details.php?id=<?= $blog['id'] ?>">
            <?= htmlspecialchars($blog['title']) ?>
          </a>
        </li>
      <?php endforeach; ?>
    </ul>
  </div>
<?php endif; ?>


</div>



<?php include 'footer.php'; ?>


<script>
  function toggleMenu() {
    document.getElementById('topMenu').classList.toggle('active');
  }
</script>
</body>
</html>