DocsController.php

Code Hygiene Score: 95

Keine Issues gefunden.

Dependencies 14

Klassen 1

Funktionen 8

Versionen 14

Code

<?php

declare(strict_types=1);

namespace Controller;

// @responsibility: HTTP-Endpunkte für Dokumentation und Task-Ansichten

use Domain\Repository\DokumentationRepositoryInterface;
use Domain\Repository\KiProtokollRepositoryInterface;
use Domain\Repository\TaskAssignmentRepositoryInterface;
use Domain\Repository\TaskCommentRepositoryInterface;
use Domain\Repository\TaskRepositoryInterface;
use Domain\Repository\TaskResultRepositoryInterface;
use Framework\Controller;

class DocsController extends Controller
{
    private DokumentationRepositoryInterface $docsRepo;
    private KiProtokollRepositoryInterface $protokollRepo;
    private TaskRepositoryInterface $taskRepo;
    private TaskAssignmentRepositoryInterface $assignmentRepo;
    private TaskResultRepositoryInterface $resultRepo;
    private TaskCommentRepositoryInterface $commentRepo;

    public function __construct(
        DokumentationRepositoryInterface $docsRepo,
        KiProtokollRepositoryInterface $protokollRepo,
        TaskRepositoryInterface $taskRepo,
        TaskAssignmentRepositoryInterface $assignmentRepo,
        TaskResultRepositoryInterface $resultRepo,
        TaskCommentRepositoryInterface $commentRepo
    ) {
        $this->docsRepo = $docsRepo;
        $this->protokollRepo = $protokollRepo;
        $this->taskRepo = $taskRepo;
        $this->assignmentRepo = $assignmentRepo;
        $this->resultRepo = $resultRepo;
        $this->commentRepo = $commentRepo;
    }

    public function index(): void
    {
        $this->view('docs.index', [
            'title' => 'Dokumentation',
            'hierarchy' => $this->docsRepo->getHierarchy(),
        ]);
    }

    public function redirectBySlug(string $slug): void
    {
        $doc = $this->docsRepo->findDocBySlug($slug);

        if ($doc === null) {
            $this->notFound('Dokumentation nicht gefunden: ' . $slug);
        }

        header('Location: /docs' . $doc['path'], true, 301);
        exit;
    }

    public function show(string $path): void
    {
        $path = '/' . ltrim($path, '/');
        $doc = $this->docsRepo->findByPath($path);

        if ($doc === null) {
            $this->notFound('Dokumentation nicht gefunden: ' . $path);
        }

        $data = [
            'title' => $doc['title'],
            'doc' => $doc,
            'breadcrumb' => $this->docsRepo->getBreadcrumb((int) $doc['id']),
            'children' => $this->docsRepo->findChildren((int) $doc['id']),
            'siblings' => $this->docsRepo->getSiblings((int) $doc['id']),
        ];

        // Modul-spezifische Daten laden
        if ($doc['slug'] === 'ki-protokoll') {
            $data['entries'] = $this->protokollRepo->findLatest(20);
        }

        $this->view('docs.show', $data);
    }

    public function tasksIndex(): void
    {
        $this->view('tasks.index', [
            'title' => 'Tasks',
            'stats' => $this->taskRepo->getStatistics(),
            'tasks' => array_map(fn ($t) => $t->toArray(), $this->taskRepo->findAll([], 50, 0)),
        ]);
    }

    public function tasksNew(): void
    {
        $this->view('tasks.new', [
            'title' => 'Neuer Task',
        ]);
    }

    public function tasksEdit(string $id): void
    {
        $task = $this->taskRepo->findById((int) $id);

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

        $this->view('tasks.edit', [
            'title' => 'Task bearbeiten',
            'task' => $task->toArray(),
        ]);
    }

    public function taskShow(string $id): void
    {
        $task = $this->taskRepo->findById((int) $id);

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

        $this->view('tasks.show', [
            'title' => 'Task #' . $id,
            'task' => $task->toArray(),
            'assignments' => array_map(fn ($a) => $a->toArray(), $this->assignmentRepo->findByTaskId((int) $id)),
            'results' => array_map(fn ($r) => $r->toArray(), $this->resultRepo->findByTaskId((int) $id)),
            'comments' => array_map(fn ($c) => $c->toArray(), $this->commentRepo->findByTaskId((int) $id)),
        ]);
    }
}
← Übersicht Graph