WebOrbiton
v2.0.0.1

Publisium

80 lines · 2.6 KB
  1. <?php
  2. ​
  3. declare(strict_types=1);
  4. ​
  5. require_once __DIR__ . '/../includes/slugger.php';
  6. ​
  7. if (!Auth::hasRoleAtLeast(Auth::ROLE_EDITOR_IN_CHIEF)) {
  8. return;
  9. }
  10. ​
  11. $db = Database::site();
  12. ​
  13. $categoryId = (int) ($_POST['category_id'] ?? 0) ?: null;
  14. $name = trim((string) ($_POST['name'] ?? ''));
  15. $description = trim((string) ($_POST['description'] ?? ''));
  16. $parentId = (int) ($_POST['parent_id'] ?? 0) ?: null;
  17. $showInMenu = isset($_POST['show_in_menu']) ? 1 : 0;
  18. ​
  19. if ($name === '') {
  20. return;
  21. }
  22. ​
  23. $slug = Slugger::make($name);
  24. ​
  25. if ($categoryId !== null) {
  26. try {
  27. $statement = $db->prepare(
  28. 'UPDATE categories SET name = :name, slug = :slug, description = :description, parent_id = :parent_id, show_in_menu = :show_in_menu WHERE id = :id'
  29. );
  30. $statement->execute([
  31. 'name' => $name,
  32. 'slug' => $slug,
  33. 'description' => $description,
  34. 'parent_id' => $parentId,
  35. 'show_in_menu' => $showInMenu,
  36. 'id' => $categoryId,
  37. ]);
  38. } catch (PDOException $e) {
  39. error_log('Publisium: save_category with show_in_menu failed, retrying without it: ' . $e->getMessage());
  40. $statement = $db->prepare(
  41. 'UPDATE categories SET name = :name, slug = :slug, description = :description, parent_id = :parent_id WHERE id = :id'
  42. );
  43. $statement->execute([
  44. 'name' => $name,
  45. 'slug' => $slug,
  46. 'description' => $description,
  47. 'parent_id' => $parentId,
  48. 'id' => $categoryId,
  49. ]);
  50. }
  51. } else {
  52. try {
  53. $statement = $db->prepare(
  54. 'INSERT INTO categories (name, slug, description, parent_id, show_in_menu, sort_order) VALUES (:name, :slug, :description, :parent_id, :show_in_menu, 0)'
  55. );
  56. $statement->execute([
  57. 'name' => $name,
  58. 'slug' => $slug,
  59. 'description' => $description,
  60. 'parent_id' => $parentId,
  61. 'show_in_menu' => $showInMenu,
  62. ]);
  63. } catch (PDOException $e) {
  64. error_log('Publisium: save_category with show_in_menu failed, retrying without it: ' . $e->getMessage());
  65. $statement = $db->prepare(
  66. 'INSERT INTO categories (name, slug, description, parent_id, sort_order) VALUES (:name, :slug, :description, :parent_id, 0)'
  67. );
  68. $statement->execute([
  69. 'name' => $name,
  70. 'slug' => $slug,
  71. 'description' => $description,
  72. 'parent_id' => $parentId,
  73. ]);
  74. }
  75. }
  76. ​
  77. if ($showInMenu === 1) {
  78. SiteFront::appendToCustomNav('category', $categoryId ?? (int) $db->lastInsertId());
  79. }
  80. ​