dashboard.php 9.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193
  1. <?php
  2. require_once __DIR__ . '/../config/database.php';
  3. require_once __DIR__ . '/../lib/auth.php';
  4. if (session_status() === PHP_SESSION_NONE) {
  5. session_start();
  6. }
  7. requireLogin();
  8. $pageTitle = 'Dashboard';
  9. $siteName = 'Crop Monitor';
  10. include __DIR__ . '/../layouts/header.php';
  11. include __DIR__ . '/../layouts/navbar.php';
  12. ?>
  13. <div id="layoutSidenav">
  14. <div id="layoutSidenav_nav">
  15. <?php include __DIR__ . '/../layouts/sidebar.php'; ?>
  16. </div>
  17. <div id="layoutSidenav_content">
  18. <main>
  19. <div class="container-fluid px-4">
  20. <h1 class="mt-4"><?= htmlspecialchars($pageTitle, ENT_QUOTES, 'UTF-8') ?></h1>
  21. <ol class="breadcrumb mb-4">
  22. <li class="breadcrumb-item active">Dashboard</li>
  23. </ol>
  24. <!-- ── Summary cards ──────────────────────────────────────── -->
  25. <div class="row">
  26. <div class="col-xl-3 col-sm-6 mb-3">
  27. <div class="card text-white bg-primary o-hidden h-100">
  28. <div class="card-body">
  29. <div class="card-body-icon"><i class="fas fa-fw fa-comments"></i></div>
  30. <div class="me-5">26 New Messages!</div>
  31. </div>
  32. <a class="card-footer text-white clearfix small z-1" href="/dashboard/inbox.php">
  33. <span class="float-start">View Details</span>
  34. <span class="float-end"><i class="fas fa-angle-right"></i></span>
  35. </a>
  36. </div>
  37. </div>
  38. <div class="col-xl-3 col-sm-6 mb-3">
  39. <div class="card text-white bg-warning o-hidden h-100">
  40. <div class="card-body">
  41. <div class="card-body-icon"><i class="fas fa-fw fa-list"></i></div>
  42. <div class="me-5">11 New Tasks!</div>
  43. </div>
  44. <a class="card-footer text-white clearfix small z-1" href="#">
  45. <span class="float-start">View Details</span>
  46. <span class="float-end"><i class="fas fa-angle-right"></i></span>
  47. </a>
  48. </div>
  49. </div>
  50. <div class="col-xl-3 col-sm-6 mb-3">
  51. <div class="card text-white bg-success o-hidden h-100">
  52. <div class="card-body">
  53. <div class="card-body-icon"><i class="fas fa-fw fa-seedling"></i></div>
  54. <div class="me-5">New Soil Tests</div>
  55. </div>
  56. <a class="card-footer text-white clearfix small z-1"
  57. href="/dashboard/crop-analysis/soil-test-data/soil-test-data.php">
  58. <span class="float-start">View Details</span>
  59. <span class="float-end"><i class="fas fa-angle-right"></i></span>
  60. </a>
  61. </div>
  62. </div>
  63. <div class="col-xl-3 col-sm-6 mb-3">
  64. <div class="card text-white bg-danger o-hidden h-100">
  65. <div class="card-body">
  66. <div class="card-body-icon"><i class="fas fa-fw fa-life-ring"></i></div>
  67. <div class="me-5">13 New Tickets!</div>
  68. </div>
  69. <a class="card-footer text-white clearfix small z-1" href="#">
  70. <span class="float-start">View Details</span>
  71. <span class="float-end"><i class="fas fa-angle-right"></i></span>
  72. </a>
  73. </div>
  74. </div>
  75. </div><!-- /row: summary cards -->
  76. <!-- ── Recent Analysis heading ─────────────────────────────── -->
  77. <div class="row mb-3">
  78. <div class="col-md-12">
  79. <h5>Recent Analysis</h5>
  80. </div>
  81. </div>
  82. <!-- ── Weather widget + Calendar ──────────────────────────── -->
  83. <div class="row">
  84. <!-- Weather widget -->
  85. <div class="col-md-7">
  86. <div class="weather">
  87. <div class="weather-top">
  88. <div class="weather-top-left">
  89. <div class="degree">
  90. <figure class="icons">
  91. <canvas id="partly-cloudy-day" width="64" height="64"></canvas>
  92. </figure>
  93. <span>37°</span>
  94. <div class="clearfix"></div>
  95. </div>
  96. <p>
  97. <?= date('l') ?>
  98. <label><?= date('j') ?></label><sup><?= date('S') ?></sup>
  99. <?= date('M') ?>
  100. </p>
  101. </div>
  102. <div class="weather-top-right">
  103. <p><i class="fa fa-map-marker"></i> &mdash;</p>
  104. <label>&mdash;</label>
  105. </div>
  106. <div class="clearfix"></div>
  107. </div>
  108. <div class="weather-bottom">
  109. <?php
  110. $forecast = [
  111. ['label' => 'Cloudy', 'icon' => 'cloudy', 'temp' => '20°', 'offset' => 1],
  112. ['label' => 'Sunny', 'icon' => 'clear-day', 'temp' => '37°', 'offset' => 2],
  113. ['label' => 'Rainy', 'icon' => 'sleet', 'temp' => '7°', 'offset' => 3],
  114. ['label' => 'Windy', 'icon' => 'wind', 'temp' => '14°', 'offset' => 4],
  115. ];
  116. foreach ($forecast as $day): ?>
  117. <div class="weather-bottom1">
  118. <div class="weather-head">
  119. <h4><?= $day['label'] ?></h4>
  120. <figure class="icons">
  121. <canvas id="fc-<?= $day['icon'] ?>" width="58" height="58"></canvas>
  122. </figure>
  123. <h6><?= $day['temp'] ?></h6>
  124. <div class="bottom-head">
  125. <p><?= date('F j', strtotime('+' . $day['offset'] . ' day')) ?></p>
  126. <p><?= date('l', strtotime('+' . $day['offset'] . ' day')) ?></p>
  127. </div>
  128. </div>
  129. </div>
  130. <?php endforeach; ?>
  131. <div class="clearfix"></div>
  132. </div>
  133. </div>
  134. </div><!-- /col: weather -->
  135. <!-- Calendar widget -->
  136. <div class="col-md-5">
  137. <div class="cal1 cal_2">
  138. <div id="clndr"></div>
  139. </div>
  140. <link rel="stylesheet" href="/client-assets/css/clndr.css">
  141. <script src="/client-assets/js/underscore-min.js"></script>
  142. <script src="/client-assets/js/moment-2.2.1.js"></script>
  143. <script src="/client-assets/js/clndr.js"></script>
  144. <script src="/client-assets/js/site.js"></script>
  145. </div><!-- /col: calendar -->
  146. </div><!-- /row: weather + calendar -->
  147. <div class="content-bottom mt-4"></div>
  148. <div class="clearfix"></div>
  149. </div><!-- /container-fluid -->
  150. <?php include __DIR__ . '/../layouts/footer.php'; ?>
  151. <script>
  152. // Initialise all Skycons in a single pass after DOM is ready
  153. (function () {
  154. var hero = new Skycons({ color: '#1ABC9C' });
  155. hero.set('partly-cloudy-day', 'partly-cloudy-day');
  156. hero.play();
  157. var fc = new Skycons({ color: '#999' });
  158. [
  159. ['fc-cloudy', 'cloudy'],
  160. ['fc-clear-day', 'clear-day'],
  161. ['fc-sleet', 'sleet'],
  162. ['fc-wind', 'wind'],
  163. ].forEach(function (pair) {
  164. if (document.getElementById(pair[0])) {
  165. fc.set(pair[0], pair[1]);
  166. }
  167. });
  168. fc.play();
  169. })();
  170. </script>