v1.0.0.1
StocketBase
- <?php
-
- declare(strict_types=1);
-
- if (count(get_included_files()) === 1) {
- http_response_code(403);
- exit;
- }
-
- require_once __DIR__ . '/../includes/slugger.php';
-
- if (!Auth::hasRoleAtLeast(Auth::ROLE_STORE_OWNER)) {
- return;
- }
-
- $db = Database::site();
-
- $categoryId = (int) ($_POST['category_id'] ?? 0) ?: null;
- $name = trim((string) ($_POST['name'] ?? ''));
- $description = trim((string) ($_POST['description'] ?? ''));
- $parentId = (int) ($_POST['parent_id'] ?? 0) ?: null;
- $showInMenu = isset($_POST['show_in_menu']) ? 1 : 0;
-
- if ($name === '') {
- return;
- }
-
- $slug = Slugger::make($name);
-
- if ($categoryId !== null) {
- $previousMenu = $db->prepare('SELECT show_in_menu FROM categories WHERE id = :id LIMIT 1');
- try {
- $previousMenu->execute(['id' => $categoryId]);
- $wasInMenu = (int) $previousMenu->fetchColumn() === 1;
- } catch (PDOException $e) {
- $wasInMenu = true;
- }
-
- try {
- $statement = $db->prepare(
- 'UPDATE categories SET name = :name, slug = :slug, description = :description, parent_id = :parent_id, show_in_menu = :show_in_menu WHERE id = :id'
- );
- $statement->execute([
- 'name' => $name,
- 'slug' => $slug,
- 'description' => $description,
- 'parent_id' => $parentId,
- 'show_in_menu' => $showInMenu,
- 'id' => $categoryId,
- ]);
-
- if ($showInMenu === 1 && !$wasInMenu) {
- SiteFront::appendToCustomMenu('category', $categoryId);
- }
- } catch (PDOException $e) {
- error_log('StocketBase: save_category with show_in_menu failed, retrying without it: ' . $e->getMessage());
- $statement = $db->prepare(
- 'UPDATE categories SET name = :name, slug = :slug, description = :description, parent_id = :parent_id WHERE id = :id'
- );
- $statement->execute([
- 'name' => $name,
- 'slug' => $slug,
- 'description' => $description,
- 'parent_id' => $parentId,
- 'id' => $categoryId,
- ]);
- }
- } else {
- try {
- $statement = $db->prepare(
- 'INSERT INTO categories (name, slug, description, parent_id, show_in_menu, sort_order) VALUES (:name, :slug, :description, :parent_id, :show_in_menu, 0)'
- );
- $statement->execute([
- 'name' => $name,
- 'slug' => $slug,
- 'description' => $description,
- 'parent_id' => $parentId,
- 'show_in_menu' => $showInMenu,
- ]);
-
- if ($showInMenu === 1) {
- SiteFront::appendToCustomMenu('category', (int) $db->lastInsertId());
- }
- } catch (PDOException $e) {
- error_log('StocketBase: save_category with show_in_menu failed, retrying without it: ' . $e->getMessage());
- $statement = $db->prepare(
- 'INSERT INTO categories (name, slug, description, parent_id, sort_order) VALUES (:name, :slug, :description, :parent_id, 0)'
- );
- $statement->execute([
- 'name' => $name,
- 'slug' => $slug,
- 'description' => $description,
- 'parent_id' => $parentId,
- ]);
- }
- }
-