initial commit

This commit is contained in:
2026-06-25 21:29:21 +00:00
commit 0d0a7456de
2738 changed files with 542622 additions and 0 deletions
+226
View File
@@ -0,0 +1,226 @@
<?php
$dataFile = __DIR__ . '/data/plants.json';
$months = [1=>'Jan',2=>'Feb',3=>'Mar',4=>'Apr',5=>'May',6=>'Jun',
7=>'Jul',8=>'Aug',9=>'Sep',10=>'Oct',11=>'Nov',12=>'Dec'];
$fullMonths = [1=>'January',2=>'February',3=>'March',4=>'April',
5=>'May',6=>'June',7=>'July',8=>'August',
9=>'September',10=>'October',11=>'November',12=>'December'];
$slug = isset($_GET['p']) ? preg_replace('/[^a-z0-9_]/','',strtolower($_GET['p'])) : '';
$refMonth = isset($_GET['m']) ? (int)$_GET['m'] : 0;
$plant = null;
if ($slug && file_exists($dataFile)) {
$json = json_decode(file_get_contents($dataFile), true);
if ($json && isset($json['plants'][$slug])) {
$plant = $json['plants'][$slug];
}
}
if (!$plant) {
http_response_code(404);
echo '<h1 style="font-family:sans-serif;padding:2rem">Plant not found</h1>';
echo '<a href="index.php" style="font-family:sans-serif;padding:2rem">← Home</a>';
exit;
}
function actionBadge($action) {
$a = strtolower($action);
if (strpos($a,'sow seed') !== false) return ['type'=>'sow', 'label'=>'Sow Seed', 'icon'=>'🌱'];
if (strpos($a,'seed tray') !== false ||
strpos($a,'start in') !== false) return ['type'=>'tray', 'label'=>'Start in Trays','icon'=>'🪴'];
if (strpos($a,'transplant') !== false ||
strpos($a,'plant out') !== false) return ['type'=>'transplant','label'=>'Transplant', 'icon'=>'🌿'];
if (strpos($a,'tuber') !== false) return ['type'=>'tuber', 'label'=>'Plant Tubers', 'icon'=>'🥔'];
if (strpos($a,'crown') !== false) return ['type'=>'crown', 'label'=>'Plant Crowns', 'icon'=>'👑'];
if (strpos($a,'clove') !== false) return ['type'=>'clove', 'label'=>'Plant Cloves', 'icon'=>'🧄'];
return ['type'=>'general','label'=>'Plant','icon'=>'🌱'];
}
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title><?= htmlspecialchars($plant['name']) ?> - Zone 8b</title>
<link rel="stylesheet" href="assets/style.css">
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700&display=swap" rel="stylesheet">
</head>
<body>
<header class="site-header">
<div class="header-inner">
<div class="logo">
<span class="logo-icon">🌱</span>
<div>
<h1>Zone 8b Planting Calendar</h1>
<p class="logo-sub">Your year-round garden guide</p>
</div>
</div>
<nav class="top-nav">
<a href="index.php" class="nav-link">Calendar</a>
<a href="plants.php" class="nav-link">All Plants</a>
</nav>
</div>
</header>
<main class="content">
<div class="breadcrumb">
<a href="index.php">🏠 Home</a>
<?php if ($refMonth > 0): ?>
<span class="sep"></span>
<a href="month.php?m=<?= $refMonth ?>"><?= $fullMonths[$refMonth] ?></a>
<?php endif; ?>
<span class="sep"></span>
<span><?= htmlspecialchars($plant['name']) ?></span>
</div>
<div class="plant-hero">
<?php if (!empty($plant['image']) && file_exists(__DIR__ . '/' . $plant['image'])): ?>
<img src="/<?= htmlspecialchars($plant['image']) ?>"
alt="<?= htmlspecialchars($plant['name']) ?>"
class="plant-hero-img">
<?php endif; ?>
<div class="plant-hero-info">
<h2 class="plant-hero-name"><?= htmlspecialchars($plant['name']) ?></h2>
<?php if (!empty($plant['aliases'])): ?>
<p class="plant-hero-aliases">Also known as:
<em><?= htmlspecialchars(implode(', ', $plant['aliases'])) ?></em>
</p>
<?php endif; ?>
<div class="plant-hero-badges">
<?php if (!empty($plant['pot_friendly'])): ?>
<span class="hero-badge badge-pot">🪴 Pot Friendly</span>
<?php endif; ?>
<span class="hero-badge badge-zone">📍 Zone 8b</span>
</div>
</div>
</div>
<?php if (!empty($plant['description'])): ?>
<section class="plant-section">
<h3 class="section-title">📖 About</h3>
<p class="plant-description"><?= htmlspecialchars($plant['description']) ?></p>
</section>
<?php endif; ?>
<section class="plant-section">
<h3 class="section-title">📐 Growing Information</h3>
<div class="stats-grid">
<?php if (!empty($plant['spacing'])): ?>
<div class="stat-card">
<div class="stat-icon">↔️</div>
<div class="stat-label">Plant Spacing</div>
<div class="stat-value"><?= htmlspecialchars($plant['spacing']) ?></div>
</div>
<?php endif; ?>
<?php if (!empty($plant['row_spacing'])): ?>
<div class="stat-card">
<div class="stat-icon">↕️</div>
<div class="stat-label">Row Spacing</div>
<div class="stat-value"><?= htmlspecialchars($plant['row_spacing']) ?></div>
</div>
<?php endif; ?>
<?php if (!empty($plant['height'])): ?>
<div class="stat-card">
<div class="stat-icon">📏</div>
<div class="stat-label">Plant Height</div>
<div class="stat-value"><?= htmlspecialchars($plant['height']) ?></div>
</div>
<?php endif; ?>
<?php if (!empty($plant['harvest_time'])): ?>
<div class="stat-card">
<div class="stat-icon">🥕</div>
<div class="stat-label">Harvest Time</div>
<div class="stat-value"><?= htmlspecialchars($plant['harvest_time']) ?></div>
</div>
<?php endif; ?>
<?php if (empty($plant['spacing']) && empty($plant['height']) && empty($plant['harvest_time'])): ?>
<p class="no-data-msg">No growing stats yet. Re-run the scraper for more detail.</p>
<?php endif; ?>
</div>
</section>
<section class="plant-section">
<h3 class="section-title">📅 Planting Calendar (Zone 8b)</h3>
<div class="month-bar-container">
<?php foreach ($months as $num => $name):
$hasMonth = isset($plant['months'][strval($num)]);
$badge = $hasMonth ? actionBadge($plant['months'][strval($num)]) : null;
$title = $hasMonth ? htmlspecialchars($plant['months'][strval($num)]) : 'Not a planting month';
?>
<div class="month-bar-cell <?= $hasMonth ? 'active badge-'.$badge['type'] : 'inactive' ?>"
title="<?= $title ?>">
<div class="mbc-name"><?= $name ?></div>
<div class="mbc-icon"><?= $hasMonth ? $badge['icon'] : '' ?></div>
</div>
<?php endforeach; ?>
</div>
<div class="calendar-legend">
<span class="legend-item"><span class="legend-dot active-dot"></span> Active month</span>
<span class="legend-item"><span class="legend-dot inactive-dot"></span> Not recommended</span>
</div>
</section>
<?php if (!empty($plant['months'])): ?>
<section class="plant-section">
<h3 class="section-title">🗓️ Monthly Actions</h3>
<div class="action-list">
<?php foreach ($plant['months'] as $mnum => $action):
$badge = actionBadge($action);
?>
<div class="action-item">
<span class="action-month"><?= $fullMonths[(int)$mnum] ?></span>
<span class="action-badge badge-<?= $badge['type'] ?>"><?= $badge['icon'] ?> <?= $badge['label'] ?></span>
<span class="action-desc"><?= htmlspecialchars($action) ?></span>
</div>
<?php endforeach; ?>
</div>
</section>
<?php endif; ?>
<?php if (!empty($plant['notes'])): ?>
<section class="plant-section">
<h3 class="section-title">📝 Notes & Tips</h3>
<div class="notes-box"><?= nl2br(htmlspecialchars($plant['notes'])) ?></div>
</section>
<?php endif; ?>
<?php if (!empty($plant['compatible']) || !empty($plant['avoid'])): ?>
<section class="plant-section">
<h3 class="section-title">🤝 Companion Planting</h3>
<div class="companion-grid">
<?php if (!empty($plant['compatible'])): ?>
<div class="companion-card good">
<h4>✅ Grows Well With</h4>
<ul><?php foreach ($plant['compatible'] as $c): ?>
<li><?= htmlspecialchars($c) ?></li>
<?php endforeach; ?></ul>
</div>
<?php endif; ?>
<?php if (!empty($plant['avoid'])): ?>
<div class="companion-card bad">
<h4>❌ Avoid Growing With</h4>
<ul><?php foreach ($plant['avoid'] as $c): ?>
<li><?= htmlspecialchars($c) ?></li>
<?php endforeach; ?></ul>
</div>
<?php endif; ?>
</div>
</section>
<?php endif; ?>
<div class="back-btn-wrap">
<?php if ($refMonth > 0): ?>
<a href="month.php?m=<?= $refMonth ?>" class="btn-back">← Back to <?= $fullMonths[$refMonth] ?></a>
<?php else: ?>
<a href="index.php" class="btn-back">← Back to Calendar</a>
<?php endif; ?>
</div>
</main>
<footer class="site-footer">
<p>Zone 8b Garden Planting Guide &mdash; Data sourced from
<a href="https://gardenate.com" target="_blank">Gardenate.com</a></p>
</footer>
</body>
</html>