Module tasks + knowledgecenter_update aus Kundenprojekt übernehmen (bereinigt)
Beide Module wurden aus einem anderen Kundenprojekt kopiert und bereinigt: Knowledgecenter: - Bild-Cache (1.985 Dateien) geleert, Ordnerstruktur mit .gitkeep behalten - Files-Gallery-Lizenzschlüssel entfernt (config.php) - Kundenspezifische Kategorien gelöscht: Teil I/II/III QM-Struktur, nummerierte QM-Kapitel, Gremien (Präsidium/Finanzausschuss/Landesausschuss), Sitzungsservice-Serie, Protokoll-Abteilungen, Testeinträge - 56 generische Kategorien bleiben (Downloads, Onboarding, Personalthemen …) Tasks: - Alle Betriebsdaten gelöscht (114 Tasks, 914 Submissions, 579 Assignments) - Task-Definitionen und Verlinkungen geleert - Kategoriestruktur bleibt (Allgemein, IT, Personal, Buchhaltung …) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
169
module/tasks/repo/TaskCategoryRepository.php
Normal file
169
module/tasks/repo/TaskCategoryRepository.php
Normal file
@@ -0,0 +1,169 @@
|
||||
<?php
|
||||
declare(strict_types=1);
|
||||
|
||||
class TaskCategoryRepository
|
||||
{
|
||||
public function listForAdmin(string $search = '', string $state = 'active'): array
|
||||
{
|
||||
$search = trim($search);
|
||||
$state = trim($state);
|
||||
if (!in_array($state, ['active', 'inactive', 'all'], true)) {
|
||||
$state = 'active';
|
||||
}
|
||||
|
||||
$conditions = [];
|
||||
$types = '';
|
||||
$params = [];
|
||||
|
||||
if ($state === 'active') {
|
||||
$conditions[] = 'c.active = 1';
|
||||
} elseif ($state === 'inactive') {
|
||||
$conditions[] = 'c.active = 0';
|
||||
}
|
||||
|
||||
if ($search !== '') {
|
||||
$searchLike = '%' . $search . '%';
|
||||
$conditions[] = '(
|
||||
c.name LIKE ?
|
||||
OR c.slug LIKE ?
|
||||
OR CAST(c.id AS CHAR) LIKE ?
|
||||
)';
|
||||
$types .= 'sss';
|
||||
$params[] = $searchLike;
|
||||
$params[] = $searchLike;
|
||||
$params[] = $searchLike;
|
||||
}
|
||||
|
||||
$sql = 'SELECT
|
||||
c.id,
|
||||
c.name,
|
||||
c.slug,
|
||||
c.sort_order,
|
||||
c.active,
|
||||
c.created_at,
|
||||
c.modified_at,
|
||||
COUNT(d.id) AS task_count
|
||||
FROM task_category c
|
||||
LEFT JOIN task_definition d ON d.task_category_id = c.id';
|
||||
|
||||
if ($conditions !== []) {
|
||||
$sql .= ' WHERE ' . implode(' AND ', $conditions);
|
||||
}
|
||||
|
||||
$sql .= ' GROUP BY c.id
|
||||
ORDER BY c.active DESC, c.sort_order ASC, c.name ASC';
|
||||
|
||||
return TaskCertDb::fetchAll($sql, $types, $params);
|
||||
}
|
||||
|
||||
public function findById(int $id): ?array
|
||||
{
|
||||
return TaskCertDb::fetchOne(
|
||||
'SELECT id, name, slug, sort_order, active, created_at, modified_at
|
||||
FROM task_category
|
||||
WHERE id = ?',
|
||||
'i',
|
||||
[$id]
|
||||
);
|
||||
}
|
||||
|
||||
public function findBySlug(string $slug): ?array
|
||||
{
|
||||
$slug = trim($slug);
|
||||
if ($slug === '') {
|
||||
return null;
|
||||
}
|
||||
|
||||
return TaskCertDb::fetchOne(
|
||||
'SELECT id, name, slug, sort_order, active, created_at, modified_at
|
||||
FROM task_category
|
||||
WHERE slug = ?
|
||||
LIMIT 1',
|
||||
's',
|
||||
[$slug]
|
||||
);
|
||||
}
|
||||
|
||||
public function findByNormalizedName(string $normalizedName): ?array
|
||||
{
|
||||
$normalizedName = trim($normalizedName);
|
||||
if ($normalizedName === '') {
|
||||
return null;
|
||||
}
|
||||
|
||||
return TaskCertDb::fetchOne(
|
||||
'SELECT id, name, slug, sort_order, active, created_at, modified_at
|
||||
FROM task_category
|
||||
WHERE LOWER(TRIM(name)) = ?
|
||||
LIMIT 1',
|
||||
's',
|
||||
[$normalizedName]
|
||||
);
|
||||
}
|
||||
|
||||
public function create(array $data): int
|
||||
{
|
||||
return TaskCertDb::insert(
|
||||
'INSERT INTO task_category (name, slug, sort_order, active)
|
||||
VALUES (?, ?, ?, ?)',
|
||||
'ssii',
|
||||
[
|
||||
(string) ($data['name'] ?? ''),
|
||||
(string) ($data['slug'] ?? ''),
|
||||
(int) ($data['sort_order'] ?? 0),
|
||||
(int) ($data['active'] ?? 1),
|
||||
]
|
||||
);
|
||||
}
|
||||
|
||||
public function update(int $id, array $data): void
|
||||
{
|
||||
TaskCertDb::execute(
|
||||
'UPDATE task_category
|
||||
SET name = ?, sort_order = ?, active = ?
|
||||
WHERE id = ?',
|
||||
'siii',
|
||||
[
|
||||
(string) ($data['name'] ?? ''),
|
||||
(int) ($data['sort_order'] ?? 0),
|
||||
(int) ($data['active'] ?? 1),
|
||||
$id,
|
||||
]
|
||||
);
|
||||
}
|
||||
|
||||
public function setActive(int $id, int $active): void
|
||||
{
|
||||
TaskCertDb::execute(
|
||||
'UPDATE task_category SET active = ? WHERE id = ?',
|
||||
'ii',
|
||||
[$active, $id]
|
||||
);
|
||||
}
|
||||
|
||||
public function delete(int $id): int
|
||||
{
|
||||
return TaskCertDb::execute(
|
||||
'DELETE FROM task_category WHERE id = ?',
|
||||
'i',
|
||||
[$id]
|
||||
);
|
||||
}
|
||||
|
||||
public function nextSortOrder(int $step = 10): int
|
||||
{
|
||||
$step = max(1, $step);
|
||||
$maxSortOrder = (int) TaskCertDb::scalar('SELECT COALESCE(MAX(sort_order), 0) FROM task_category');
|
||||
|
||||
return $maxSortOrder + $step;
|
||||
}
|
||||
|
||||
public function countTasks(int $id): int
|
||||
{
|
||||
return (int) TaskCertDb::scalar(
|
||||
'SELECT COUNT(*) FROM task_definition WHERE task_category_id = ?',
|
||||
'i',
|
||||
[$id]
|
||||
);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user