Backup #303

ID303
Dateipfad/var/www/dev.campus.systemische-tools.de/src/Controller/TaxonomyController.php
Version1
Typ modified
Größe4.1 KB
Hash823e0cc00bdc600e86c979b509ab262f1e8002d11e288e3ae0aa746a022f103c
Datum2025-12-22 08:04:59
Geändert vonclaude-code-hook
GrundClaude Code Pre-Hook Backup vor Edit-Operation
Datei existiert Ja

Dateiinhalt

<?php

namespace Controller;

use Framework\Controller;
use Infrastructure\SemanticExplorerRepository;

/**
 * TaxonomyController - CRUD for Semantic Explorer Taxonomy
 *
 * Extracted from SemanticExplorerController for SRP compliance.
 */
class TaxonomyController extends Controller
{
    private SemanticExplorerRepository $repository;

    public function __construct()
    {
        $this->repository = new SemanticExplorerRepository();
    }

    /**
     * GET /semantic-explorer/taxonomie
     * Hierarchische Kategorisierung
     */
    public function index(): void
    {
        $terms = $this->repository->getTaxonomyTerms();
        $hierarchy = $this->buildTaxonomyTree($terms);
        $stats = $this->repository->getTaxonomyStats();

        $this->view('semantic-explorer.taxonomie', [
            'title' => 'Taxonomie',
            'terms' => $terms,
            'hierarchy' => $hierarchy,
            'stats' => $stats,
        ]);
    }

    /**
     * GET /semantic-explorer/taxonomie/new
     */
    public function create(): void
    {
        $this->view('semantic-explorer.taxonomie.new', [
            'title' => 'Neuer Taxonomie-Begriff',
            'terms' => $this->repository->getTaxonomyTermsForSelect(),
        ]);
    }

    /**
     * POST /semantic-explorer/taxonomie
     */
    public function store(): void
    {
        $input = json_decode(file_get_contents('php://input'), true);

        $name = trim($input['name'] ?? '');
        $parentId = isset($input['parent_id']) && $input['parent_id'] !== '' ? (int) $input['parent_id'] : null;

        if ($name === '') {
            $this->json(['success' => false, 'error' => 'Name ist erforderlich'], 400);

            return;
        }

        try {
            $id = $this->repository->createTaxonomyTerm($name, $parentId);
            $this->json(['success' => true, 'id' => $id]);
        } catch (\Exception $e) {
            $this->json(['success' => false, 'error' => $e->getMessage()], 500);
        }
    }

    /**
     * GET /semantic-explorer/taxonomie/{id}/edit
     */
    public function edit(int $id): void
    {
        $term = $this->repository->getTaxonomyTerm($id);

        if ($term === null) {
            $this->notFound('Begriff nicht gefunden');
        }

        $this->view('semantic-explorer.taxonomie.edit', [
            'title' => 'Begriff bearbeiten',
            'term' => $term,
            'terms' => $this->repository->getTaxonomyTermsForSelect(),
        ]);
    }

    /**
     * POST /semantic-explorer/taxonomie/{id}
     */
    public function update(int $id): void
    {
        $input = json_decode(file_get_contents('php://input'), true);

        $name = trim($input['name'] ?? '');
        $parentId = isset($input['parent_id']) && $input['parent_id'] !== '' ? (int) $input['parent_id'] : null;

        if ($name === '') {
            $this->json(['success' => false, 'error' => 'Name ist erforderlich'], 400);

            return;
        }

        try {
            $this->repository->updateTaxonomyTerm($id, $name, $parentId);
            $this->json(['success' => true]);
        } catch (\Exception $e) {
            $this->json(['success' => false, 'error' => $e->getMessage()], 500);
        }
    }

    /**
     * POST /semantic-explorer/taxonomie/{id}/delete
     */
    public function delete(int $id): void
    {
        try {
            $success = $this->repository->deleteTaxonomyTerm($id);
            if ($success) {
                $this->json(['success' => true]);
            } else {
                $this->json(['success' => false, 'error' => 'Begriff hat noch Unterbegriffe'], 400);
            }
        } catch (\Exception $e) {
            $this->json(['success' => false, 'error' => $e->getMessage()], 500);
        }
    }

    /**
     * Baut Baum aus flacher Liste
     */
    private function buildTaxonomyTree(array $items, ?int $parentId = null): array
    {
        $tree = [];
        foreach ($items as $item) {
            if ($item['parent_id'] == $parentId) {
                $item['children'] = $this->buildTaxonomyTree($items, $item['id']);
                $tree[] = $item;
            }
        }

        return $tree;
    }
}

Vollständig herunterladen

Aktionen

Herunterladen

Andere Versionen dieser Datei

ID Version Typ Größe Datum
1720 14 modified 4.9 KB 2025-12-27 12:31
1719 13 modified 4.4 KB 2025-12-27 12:30
1047 12 modified 4.4 KB 2025-12-25 02:20
1046 11 modified 4.4 KB 2025-12-25 02:19
1045 10 modified 4.4 KB 2025-12-25 02:19
1044 9 modified 4.4 KB 2025-12-25 02:19
1043 8 modified 4.4 KB 2025-12-25 02:19
1042 7 modified 4.4 KB 2025-12-25 02:19
692 6 modified 4.5 KB 2025-12-23 07:52
614 5 modified 4.6 KB 2025-12-23 04:42
518 4 modified 4.4 KB 2025-12-22 15:49
517 3 modified 4.3 KB 2025-12-22 15:49
516 2 modified 4.1 KB 2025-12-22 15:49
303 1 modified 4.1 KB 2025-12-22 08:04

← Zurück zur Übersicht