| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226 |
- <?php
- /**
- * layouts/sidebar.php
- *
- * Left sidebar navigation — matches original modX Wayfinder output.
- * Active state is detected automatically from the current request URI.
- * Collapsible sections restore open state via Bootstrap accordion.
- *
- * Requires lib/auth.php to already be included (for getCurrentUser()).
- */
- $currentUser = getCurrentUser() ?? ['fullname' => ''];
- // Detect current path for active-link highlighting
- $currentPath = parse_url($_SERVER['REQUEST_URI'] ?? '', PHP_URL_PATH);
- /**
- * Return 'active' if $href matches the current path, else ''.
- */
- $isActive = fn(string $href): string =>
- str_starts_with($currentPath, $href) ? ' active' : '';
- /**
- * Return true if any child href matches the current path.
- */
- $groupActive = function (array $children) use ($currentPath): bool {
- foreach ($children as $child) {
- if (str_starts_with($currentPath, $child)) return true;
- }
- return false;
- };
- // Child paths per collapsible group — used to keep the right group open
- $consultantChildren = ['/dashboard/consultant/'];
- $weatherChildren = ['/dashboard/weather/'];
- $cropChildren = [
- '/dashboard/crop-analysis/soil-test-data/',
- '/dashboard/crop-analysis/plant-test-data/',
- '/dashboard/crop-analysis/water-test-data/',
- '/dashboard/crop-analysis/animal-dietary-balance/',
- '/dashboard/crop-analysis/compost-test-data/',
- ];
- $settingsChildren = [
- '/dashboard/client-settings/soil-recommendations.php',
- '/dashboard/client-settings/product-list.php',
- '/dashboard/client-settings/update-details.php',
- ];
- ?>
- <nav id="sidenavAccordion" class="sb-sidenav accordion sb-sidenav-dark">
- <div class="sb-sidenav-menu">
- <div class="nav">
- <!-- Consultant Dashboard -->
- <a href="/dashboard/consultant/index.php"
- class="nav-link<?= $isActive('/dashboard/consultant/') ?>">
- <div class="sb-nav-link-icon">
- <i class="fas fa-chart-line nav_icon"></i>
- </div>
- Consultant Dashboard
- </a>
- <!-- Planning Calendar -->
- <a href="/dashboard/planning-calendar.php"
- class="nav-link<?= $isActive('/dashboard/planning-calendar.php') ?>">
- <div class="sb-nav-link-icon">
- <i class="fa fa-map-marker nav_icon"></i>
- </div>
- Planning Calendar
- </a>
- <!-- Report History / Inbox -->
- <a href="/dashboard/inbox.php"
- class="nav-link<?= $isActive('/dashboard/inbox.php') ?>">
- <div class="sb-nav-link-icon">
- <i class="fa fa-inbox nav_icon"></i>
- </div>
- Report History
- </a>
- <!-- Weather (collapsible) -->
- <a class="nav-link<?= $groupActive($weatherChildren) ? '' : ' collapsed' ?>"
- href="#"
- data-bs-toggle="collapse"
- data-bs-target="#collapseWeather"
- aria-expanded="<?= $groupActive($weatherChildren) ? 'true' : 'false' ?>"
- aria-controls="collapseWeather">
- <div class="sb-nav-link-icon">
- <i class="fa fa-cloud nav_icon"></i>
- </div>
- Weather
- <div class="sb-sidenav-collapse-arrow">
- <i class="fas fa-angle-down"></i>
- </div>
- </a>
- <div class="collapse<?= $groupActive($weatherChildren) ? ' show' : '' ?>"
- id="collapseWeather"
- data-bs-parent="#sidenavAccordion">
- <nav class="sb-sidenav-menu-nested nav">
- <a class="nav-link<?= $isActive('/dashboard/weather/moisture-sensor-setup.php') ?>"
- href="/dashboard/weather/moisture-sensor-setup.php">
- <i class="fa fa-eye-dropper nav_icon"></i> Moisture Sensor Setup
- </a>
- <a class="nav-link<?= $isActive('/dashboard/weather/weather-monitoring.php') ?>"
- href="/dashboard/weather/weather-monitoring.php">
- <i class="fas fa-cloud-sun nav_icon"></i> Weather Monitoring
- </a>
- <a class="nav-link<?= $isActive('/dashboard/weather/moisture-monitoring.php') ?>"
- href="/dashboard/weather/moisture-monitoring.php">
- <i class="fas fa-tint nav_icon"></i> Moisture Monitoring
- </a>
- </nav>
- </div>
- <!-- Pesticide -->
- <a href="/dashboard/pesticide.php"
- class="nav-link<?= $isActive('/dashboard/pesticide.php') ?>">
- <div class="sb-nav-link-icon">
- <i class="fa fa-bug nav_icon"></i>
- </div>
- Pesticide
- </a>
- <!-- Crop Analysis (collapsible) -->
- <a class="nav-link<?= $groupActive($cropChildren) ? '' : ' collapsed' ?>"
- href="#"
- data-bs-toggle="collapse"
- data-bs-target="#collapseCropAnalysis"
- aria-expanded="<?= $groupActive($cropChildren) ? 'true' : 'false' ?>"
- aria-controls="collapseCropAnalysis">
- <div class="sb-nav-link-icon">
- <i class="fa fa-tree nav_icon"></i>
- </div>
- Crop Analysis
- <div class="sb-sidenav-collapse-arrow">
- <i class="fas fa-angle-down"></i>
- </div>
- </a>
- <div class="collapse<?= $groupActive($cropChildren) ? ' show' : '' ?>"
- id="collapseCropAnalysis"
- data-bs-parent="#sidenavAccordion">
- <nav class="sb-sidenav-menu-nested nav">
- <a class="nav-link<?= $isActive('/dashboard/crop-analysis/soil-test-data/') ?>"
- href="/dashboard/crop-analysis/soil-test-data/index.php">
- <i class="fas fa-globe-asia nav_icon"></i> Soil Test Data
- </a>
- <a class="nav-link<?= $isActive('/dashboard/crop-analysis/plant-test-data/') ?>"
- href="/dashboard/crop-analysis/plant-test-data/index.php">
- <i class="fab fa-pagelines nav_icon"></i> Plant Test Data
- </a>
- <a class="nav-link<?= $isActive('/dashboard/crop-analysis/water-test-data/') ?>"
- href="/dashboard/crop-analysis/water-test-data/index.php">
- <i class="fa fa-tint nav_icon"></i> Water Test Data
- </a>
- <a class="nav-link<?= $isActive('/dashboard/crop-analysis/animal-dietary-balance/') ?>"
- href="/dashboard/crop-analysis/animal-dietary-balance/index.php">
- <i class="fas fa-dog nav_icon"></i> Animal Dietary Balance
- </a>
- <a class="nav-link<?= $isActive('/dashboard/crop-analysis/compost-test-data/') ?>"
- href="/dashboard/crop-analysis/compost-test-data/index.php">
- <i class="fas fa-cloud nav_icon"></i> Compost Test Data
- </a>
- </nav>s
- </div>
- <!-- Irrigation Controller -->
- <a href="/dashboard/irrigation/"
- class="nav-link<?= $isActive('/dashboard/irrigation/') ?>">
- <div class="sb-nav-link-icon">
- <i class="fas fa-cloud-sun-rain nav_icon"></i>
- </div>
- Irrigation Controller
- </a>
- <!-- Client Settings (collapsible) -->
- <a class="nav-link<?= $groupActive($settingsChildren) ? '' : ' collapsed' ?>"
- href="#"
- data-bs-toggle="collapse"
- data-bs-target="#collapseSettings"
- aria-expanded="<?= $groupActive($settingsChildren) ? 'true' : 'false' ?>"
- aria-controls="collapseSettings">
- <div class="sb-nav-link-icon">
- <i class="fa fa-cog nav_icon"></i>
- </div>
- Client Settings
- <div class="sb-sidenav-collapse-arrow">
- <i class="fas fa-angle-down"></i>
- </div>
- </a>
- <div class="collapse<?= $groupActive($settingsChildren) ? ' show' : '' ?>"
- id="collapseSettings"
- data-bs-parent="#sidenavAccordion">
- <nav class="sb-sidenav-menu-nested nav">
- <a class="nav-link<?= $isActive('/dashboard/client-settings/soil-recommendations.php') ?>"
- href="/dashboard/client-settings/soil-recommendations.php">
- <i class="fa fa-cog nav_icon"></i> Soil Recommendations
- </a>
- <a class="nav-link<?= $isActive('/dashboard/client-settings/product-list.php') ?>"
- href="/dashboard/client-settings/product-list.php">
- <i class="fa fa-cog nav_icon"></i> Product List
- </a>
- <a class="nav-link<?= $isActive('/dashboard/client-settings/update-details.php') ?>"
- href="/dashboard/client-settings/update-details.php">
- <i class="fa fa-cog nav_icon"></i> Update Details
- </a>
- </nav>
- </div>
- <!-- Crop Cards -->
- <a href="/dashboard/crop-cards/"
- class="nav-link<?= $isActive('/dashboard/crop-cards/') ?>">
- <div class="sb-nav-link-icon">
- <i class="fa fa-tree nav_icon"></i>
- </div>
- Crop Cards
- </a>
- </div>
- </div>
- <!-- Footer: logged-in user -->
- <div class="sb-sidenav-footer">
- <div class="small">Logged in as:</div>
- <?= htmlspecialchars($currentUser['fullname'], ENT_QUOTES, 'UTF-8') ?>
- </div>
- </nav>
|