index.php 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137
  1. <?php
  2. require_once __DIR__ . '/../config.php';
  3. require_once __DIR__ . '/../includes/functions.php';
  4. if (empty($_SESSION['admin_logged_in'])) {
  5. header('Location: login.php');
  6. exit;
  7. }
  8. expirePendingOrders();
  9. $pageTitle = 'Admin Dashboard';
  10. $orders = getOrders();
  11. $products = getProducts();
  12. $organizations = getOrganizations(false);
  13. $stats = [
  14. 'products' => count($products),
  15. 'organizations' => count($organizations),
  16. 'unconfirmed' => 0,
  17. 'open' => 0,
  18. 'partial' => 0,
  19. 'processed' => 0,
  20. 'cancelled' => 0,
  21. ];
  22. foreach ($orders as $order) {
  23. if ($order['confirmation_status'] === 'pending') {
  24. $stats['unconfirmed']++;
  25. } elseif ($order['status'] === 'cancelled') {
  26. $stats['cancelled']++;
  27. } elseif ($order['status'] === 'processed') {
  28. $stats['processed']++;
  29. } elseif ($order['status'] === 'partial') {
  30. $stats['partial']++;
  31. } else {
  32. $stats['open']++;
  33. }
  34. }
  35. $recentOrders = $orders;
  36. usort($recentOrders, function ($left, $right) {
  37. return strcmp($right['created_at'], $left['created_at']);
  38. });
  39. $recentOrders = array_slice($recentOrders, 0, 8);
  40. $bodyClass = 'admin-page';
  41. include __DIR__ . '/../includes/header.php';
  42. ?>
  43. <div class="admin-header">
  44. <h2>Admin Dashboard</h2>
  45. <div class="admin-dashboard-actions">
  46. <a href="orders.php" class="btn">Bestellungen</a>
  47. <details class="admin-actions-dropdown">
  48. <summary class="btn btn-secondary">Verwaltung</summary>
  49. <div class="admin-actions-menu">
  50. <a href="products.php">Produkte verwalten</a>
  51. <a href="categories.php">Kategorien verwalten</a>
  52. <a href="organizations.php">Organisationen verwalten</a>
  53. <a href="settings.php">Einstellungen</a>
  54. <a href="faq.php">FAQ bearbeiten</a>
  55. <a href="admins.php">Admins verwalten</a>
  56. <form method="POST" action="login.php" class="inline-form">
  57. <?php echo csrfField(); ?>
  58. <button type="submit" name="logout" class="btn btn-secondary btn-small">Abmelden</button>
  59. </form>
  60. </div>
  61. </details>
  62. </div>
  63. </div>
  64. <div class="admin-stats">
  65. <div class="stat-card">
  66. <h3>Produkte</h3>
  67. <div class="stat-value"><?php echo $stats['products']; ?></div>
  68. </div>
  69. <div class="stat-card">
  70. <h3>Organisationen</h3>
  71. <div class="stat-value"><?php echo $stats['organizations']; ?></div>
  72. </div>
  73. <div class="stat-card">
  74. <h3>Unbestätigt</h3>
  75. <div class="stat-value"><?php echo $stats['unconfirmed']; ?></div>
  76. </div>
  77. <div class="stat-card">
  78. <h3>Offen</h3>
  79. <div class="stat-value"><?php echo $stats['open']; ?></div>
  80. </div>
  81. <div class="stat-card">
  82. <h3>Teilweise bearbeitet</h3>
  83. <div class="stat-value"><?php echo $stats['partial']; ?></div>
  84. </div>
  85. <div class="stat-card">
  86. <h3>Bearbeitet</h3>
  87. <div class="stat-value"><?php echo $stats['processed']; ?></div>
  88. </div>
  89. <div class="stat-card">
  90. <h3>Storniert</h3>
  91. <div class="stat-value"><?php echo $stats['cancelled']; ?></div>
  92. </div>
  93. </div>
  94. <h3 class="section-title mt-4">Letzte Bestellungen</h3>
  95. <?php if (empty($recentOrders)): ?>
  96. <p>Keine Bestellungen vorhanden.</p>
  97. <?php else: ?>
  98. <div class="table-responsive">
  99. <table class="responsive-table">
  100. <thead>
  101. <tr>
  102. <th>Bestellnummer</th>
  103. <th>Name</th>
  104. <th>Organisation</th>
  105. <th>Erstellt</th>
  106. <th>Status</th>
  107. <th>Aktionen</th>
  108. </tr>
  109. </thead>
  110. <tbody>
  111. <?php foreach ($recentOrders as $order): ?>
  112. <tr>
  113. <td data-label="Bestellnummer"><strong><?php echo escape($order['id']); ?></strong></td>
  114. <td data-label="Name"><?php echo escape($order['customer_name']); ?></td>
  115. <td data-label="Organisation"><?php echo escape($order['organization_label']); ?></td>
  116. <td data-label="Erstellt"><?php echo escape(formatDate($order['created_at'])); ?></td>
  117. <td data-label="Status"><span class="status <?php echo escape(getOrderStatusClass($order)); ?>"><?php echo escape(getOrderStatusLabel($order)); ?></span></td>
  118. <td data-label="Aktionen"><a href="orders.php?order_id=<?php echo urlencode($order['id']); ?>" class="btn btn-small">Details</a></td>
  119. </tr>
  120. <?php endforeach; ?>
  121. </tbody>
  122. </table>
  123. </div>
  124. <?php endif; ?>
  125. <?php include __DIR__ . '/../includes/footer.php'; ?>