sidebar.php 9.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216
  1. <?php
  2. /**
  3. * layouts/sidebar.php
  4. *
  5. * Left sidebar navigation — matches original modX Wayfinder output.
  6. * Active state is detected automatically from the current request URI.
  7. * Collapsible sections restore open state via Bootstrap accordion.
  8. *
  9. * Requires lib/auth.php to already be included (for getCurrentUser()).
  10. */
  11. $currentUser = getCurrentUser() ?? ['fullname' => ''];
  12. // Detect current path for active-link highlighting
  13. $currentPath = parse_url($_SERVER['REQUEST_URI'] ?? '', PHP_URL_PATH);
  14. /**
  15. * Return 'active' if $href matches the current path, else ''.
  16. */
  17. $isActive = fn(string $href): string =>
  18. str_starts_with($currentPath, $href) ? ' active' : '';
  19. /**
  20. * Return 'show' if any child href is active (keeps accordion open on load).
  21. */
  22. $groupActive = function (array $children) use ($currentPath): string {
  23. foreach ($children as $child) {
  24. if (str_starts_with($currentPath, $child)) return ' show';
  25. }
  26. return '';
  27. };
  28. // Child paths per collapsible group — used to keep the right group open
  29. $weatherChildren = ['/dashboard/weather/'];
  30. $cropChildren = [
  31. '/dashboard/crop-analysis/soil-test-data/',
  32. '/dashboard/crop-analysis/plant-test-data/',
  33. '/dashboard/crop-analysis/water-test-data/',
  34. '/dashboard/crop-analysis/animal-dietary-balance/',
  35. '/dashboard/crop-analysis/compost-test-data/',
  36. ];
  37. $settingsChildren = [
  38. '/dashboard/client-settings/soil-recommendations.php',
  39. '/dashboard/client-settings/product-list.php',
  40. '/dashboard/client-settings/update-details.php',
  41. ];
  42. ?>
  43. <nav id="sidenavAccordion" class="sb-sidenav accordion sb-sidenav-dark">
  44. <div class="sb-sidenav-menu">
  45. <div class="nav">
  46. <!-- Planning Calendar -->
  47. <a href="/dashboard/planning-calendar.php"
  48. class="nav-link<?= $isActive('/dashboard/planning-calendar.php') ?>">
  49. <div class="sb-nav-link-icon">
  50. <i class="fa fa-map-marker nav_icon"></i>
  51. </div>
  52. Planning Calendar
  53. </a>
  54. <!-- Report History / Inbox -->
  55. <a href="/dashboard/inbox.php"
  56. class="nav-link<?= $isActive('/dashboard/inbox.php') ?>">
  57. <div class="sb-nav-link-icon">
  58. <i class="fa fa-inbox nav_icon"></i>
  59. </div>
  60. Report History
  61. </a>
  62. <!-- Weather (collapsible) -->
  63. <a class="nav-link collapsed<?= $groupActive($weatherChildren) ?>"
  64. href="#"
  65. data-bs-toggle="collapse"
  66. data-bs-target="#collapseWeather"
  67. aria-expanded="<?= $groupActive($weatherChildren) ? 'true' : 'false' ?>"
  68. aria-controls="collapseWeather">
  69. <div class="sb-nav-link-icon">
  70. <i class="fa fa-cloud nav_icon"></i>
  71. </div>
  72. Weather
  73. <div class="sb-sidenav-collapse-arrow">
  74. <i class="fas fa-angle-down"></i>
  75. </div>
  76. </a>
  77. <div class="collapse<?= $groupActive($weatherChildren) ?>"
  78. id="collapseWeather"
  79. data-bs-parent="#sidenavAccordion">
  80. <nav class="sb-sidenav-menu-nested nav">
  81. <a class="nav-link<?= $isActive('/dashboard/weather/moisture-sensor-setup.php') ?>"
  82. href="/dashboard/weather/moisture-sensor-setup.php">
  83. <i class="fa fa-eye-dropper nav_icon"></i>&nbsp;Moisture Sensor Setup
  84. </a>
  85. <a class="nav-link<?= $isActive('/dashboard/weather/weather-monitoring.php') ?>"
  86. href="/dashboard/weather/weather-monitoring.php">
  87. <i class="fas fa-cloud-sun nav_icon"></i>&nbsp;Weather Monitoring
  88. </a>
  89. <a class="nav-link<?= $isActive('/dashboard/weather/moisture-monitoring.php') ?>"
  90. href="/dashboard/weather/moisture-monitoring.php">
  91. <i class="fas fa-tint nav_icon"></i>&nbsp;Moisture Monitoring
  92. </a>
  93. </nav>
  94. </div>
  95. <!-- Pesticide -->
  96. <a href="/dashboard/pesticide.php"
  97. class="nav-link<?= $isActive('/dashboard/pesticide.php') ?>">
  98. <div class="sb-nav-link-icon">
  99. <i class="fa fa-bug nav_icon"></i>
  100. </div>
  101. Pesticide
  102. </a>
  103. <!-- Crop Analysis (collapsible) -->
  104. <a class="nav-link collapsed<?= $groupActive($cropChildren) ?>"
  105. href="#"
  106. data-bs-toggle="collapse"
  107. data-bs-target="#collapseCropAnalysis"
  108. aria-expanded="<?= $groupActive($cropChildren) ? 'true' : 'false' ?>"
  109. aria-controls="collapseCropAnalysis">
  110. <div class="sb-nav-link-icon">
  111. <i class="fa fa-tree nav_icon"></i>
  112. </div>
  113. Crop Analysis
  114. <div class="sb-sidenav-collapse-arrow">
  115. <i class="fas fa-angle-down"></i>
  116. </div>
  117. </a>
  118. <div class="collapse<?= $groupActive($cropChildren) ?>"
  119. id="collapseCropAnalysis"
  120. data-bs-parent="#sidenavAccordion">
  121. <nav class="sb-sidenav-menu-nested nav">
  122. <a class="nav-link<?= $isActive('/dashboard/crop-analysis/soil-test-data/') ?>"
  123. href="/dashboard/crop-analysis/soil-test-data/soil-test-data.php">
  124. <i class="fas fa-globe-asia nav_icon"></i>&nbsp;Soil Test Data
  125. </a>
  126. <a class="nav-link<?= $isActive('/dashboard/crop-analysis/plant-test-data/') ?>"
  127. href="/dashboard/crop-analysis/plant-test-data/">
  128. <i class="fab fa-pagelines nav_icon"></i>&nbsp;Plant Test Data
  129. </a>
  130. <a class="nav-link<?= $isActive('/dashboard/crop-analysis/water-test-data/') ?>"
  131. href="/dashboard/crop-analysis/water-test-data/">
  132. <i class="fa fa-tint nav_icon"></i>&nbsp;Water Test Data
  133. </a>
  134. <a class="nav-link<?= $isActive('/dashboard/crop-analysis/animal-dietary-balance/') ?>"
  135. href="/dashboard/crop-analysis/animal-dietary-balance/">
  136. <i class="fas fa-dog nav_icon"></i>&nbsp;Animal Dietary Balance
  137. </a>
  138. <a class="nav-link<?= $isActive('/dashboard/crop-analysis/compost-test-data/') ?>"
  139. href="/dashboard/crop-analysis/compost-test-data/">
  140. <i class="fas fa-cloud nav_icon"></i>&nbsp;Compost Test Data
  141. </a>
  142. </nav>
  143. </div>
  144. <!-- Irrigation Controller -->
  145. <a href="/dashboard/irrigation/"
  146. class="nav-link<?= $isActive('/dashboard/irrigation/') ?>">
  147. <div class="sb-nav-link-icon">
  148. <i class="fas fa-cloud-sun-rain nav_icon"></i>
  149. </div>
  150. Irrigation Controller
  151. </a>
  152. <!-- Client Settings (collapsible) -->
  153. <a class="nav-link collapsed<?= $groupActive($settingsChildren) ?>"
  154. href="#"
  155. data-bs-toggle="collapse"
  156. data-bs-target="#collapseSettings"
  157. aria-expanded="<?= $groupActive($settingsChildren) ? 'true' : 'false' ?>"
  158. aria-controls="collapseSettings">
  159. <div class="sb-nav-link-icon">
  160. <i class="fa fa-cog nav_icon"></i>
  161. </div>
  162. Client Settings
  163. <div class="sb-sidenav-collapse-arrow">
  164. <i class="fas fa-angle-down"></i>
  165. </div>
  166. </a>
  167. <div class="collapse<?= $groupActive($settingsChildren) ?>"
  168. id="collapseSettings"
  169. data-bs-parent="#sidenavAccordion">
  170. <nav class="sb-sidenav-menu-nested nav">
  171. <a class="nav-link<?= $isActive('/dashboard/client-settings/soil-recommendations.php') ?>"
  172. href="/dashboard/client-settings/soil-recommendations.php">
  173. <i class="fa fa-cog nav_icon"></i>&nbsp;Soil Recommendations
  174. </a>
  175. <a class="nav-link<?= $isActive('/dashboard/client-settings/product-list.php') ?>"
  176. href="/dashboard/client-settings/product-list.php">
  177. <i class="fa fa-cog nav_icon"></i>&nbsp;Product List
  178. </a>
  179. <a class="nav-link<?= $isActive('/dashboard/client-settings/update-details.php') ?>"
  180. href="/dashboard/client-settings/update-details.php">
  181. <i class="fa fa-cog nav_icon"></i>&nbsp;Update Details
  182. </a>
  183. </nav>
  184. </div>
  185. <!-- Crop Cards -->
  186. <a href="/dashboard/crop-cards/"
  187. class="nav-link<?= $isActive('/dashboard/crop-cards/') ?>">
  188. <div class="sb-nav-link-icon">
  189. <i class="fa fa-tree nav_icon"></i>
  190. </div>
  191. Crop Cards
  192. </a>
  193. </div>
  194. </div>
  195. <!-- Footer: logged-in user -->
  196. <div class="sb-sidenav-footer">
  197. <div class="small">Logged in as:</div>
  198. <?= htmlspecialchars($currentUser['fullname'], ENT_QUOTES, 'UTF-8') ?>
  199. </div>
  200. </nav>