Add new fields to items: id_code, image, location; implement QR code generation and printing; update translations and UI
This commit is contained in:
@@ -14,6 +14,8 @@ class CategoryController
|
||||
echo $twig->render('layout.twig', ['active_page' => 'categories']);
|
||||
}
|
||||
|
||||
|
||||
|
||||
// Get single category (JSON)
|
||||
public static function getCategory($id) {
|
||||
header('Content-Type: application/json');
|
||||
@@ -24,8 +26,24 @@ class CategoryController
|
||||
echo json_encode($category);
|
||||
} else {
|
||||
http_response_code(404);
|
||||
echo json_encode(['error' => 'Category not found']);
|
||||
global $translator;
|
||||
echo json_encode(['error' => $translator->trans('Category not found')]);
|
||||
}
|
||||
} catch (Exception $e) {
|
||||
error_log('Error in getCategory: ' . $e->getMessage());
|
||||
http_response_code(500);
|
||||
global $translator;
|
||||
echo json_encode(['error' => $translator->trans('Server error')]);
|
||||
}
|
||||
}
|
||||
|
||||
// Returns JSON list of categories
|
||||
public static function listCategoriesJson() {
|
||||
header('Content-Type: application/json');
|
||||
try {
|
||||
$db = Database::getInstance();
|
||||
$categories = Category::getAll($db);
|
||||
echo json_encode($categories);
|
||||
} catch (Exception $e) {
|
||||
http_response_code(500);
|
||||
echo json_encode(['error' => $e->getMessage()]);
|
||||
@@ -63,7 +81,8 @@ class CategoryController
|
||||
|
||||
if (empty($name)) {
|
||||
http_response_code(400);
|
||||
echo json_encode(['error' => 'Category name is required']);
|
||||
global $translator;
|
||||
echo json_encode(['error' => $translator->trans('Category name is required')]);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -88,19 +107,39 @@ class CategoryController
|
||||
$existing = Category::getById($db, $id);
|
||||
if (!$existing) {
|
||||
http_response_code(404);
|
||||
echo json_encode(['error' => 'Category not found']);
|
||||
global $translator;
|
||||
echo json_encode(['error' => $translator->trans('Category not found')]);
|
||||
return;
|
||||
}
|
||||
|
||||
$name = trim($data['category_name'] ?? $existing['name']);
|
||||
$parentId = !empty($data['parent_category_id']) ? (int)$data['parent_category_id'] : null;
|
||||
|
||||
if (empty($name)) {
|
||||
http_response_code(400);
|
||||
echo json_encode(['error' => 'Category name is required']);
|
||||
global $translator;
|
||||
echo json_encode(['error' => $translator->trans('Category name is required')]);
|
||||
return;
|
||||
}
|
||||
|
||||
$category = new Category($db, $id, $name);
|
||||
// Prevent circular references
|
||||
if ($parentId !== null) {
|
||||
if ($parentId == $id) {
|
||||
http_response_code(400);
|
||||
global $translator;
|
||||
echo json_encode(['error' => $translator->trans('A category cannot be its own parent')]);
|
||||
return;
|
||||
}
|
||||
$descendants = Category::getDescendantIds($db, $id);
|
||||
if (in_array($parentId, $descendants)) {
|
||||
http_response_code(400);
|
||||
global $translator;
|
||||
echo json_encode(['error' => $translator->trans('Cannot set a descendant as parent (circular reference)')]);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
$category = new Category($db, $id, $name, $parentId);
|
||||
if ($category->save()) {
|
||||
echo json_encode(['success' => true, 'message' => 'Category updated successfully']);
|
||||
} else {
|
||||
@@ -120,7 +159,8 @@ class CategoryController
|
||||
echo json_encode(['success' => true, 'message' => 'Category deleted successfully']);
|
||||
} else {
|
||||
http_response_code(404);
|
||||
echo json_encode(['error' => 'Category not found']);
|
||||
global $translator;
|
||||
echo json_encode(['error' => $translator->trans('Category not found')]);
|
||||
}
|
||||
} catch (Exception $e) {
|
||||
http_response_code(500);
|
||||
|
||||
Reference in New Issue
Block a user