/
Francuz
/
DailyPort
Обзор
Документация
Войти
/
Francuz
/
DailyPort
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
src/TaskRow.php
98 строк
4 KB
Francuz
feat: модуль Проекты
16 июн 2026, 00:51
16 июн 2026, 00:51
bf96e40
Код
Авторство
О чём код?
<?php /** * Класс TaskRow — модель строки на канбан-доске. * * Строки группируют статусы визуально: * - строка 1: "Активные" (Новые, В процессе, Тест) * - строка 2: "Завершающие" (Завершённые, Отменённые) * * Строка существует независимо от статусов — можно создать пустую строку. */ class TaskRow { private Database $db; public function __construct(Database $db) { $this->db = $db; } /** Получить строки проекта */ public function getByProject(int $projectId): array { $projectId = $this->db->escape((string)$projectId); $result = $this->db->query("SELECT * FROM task_rows WHERE project_id = $projectId ORDER BY sort_order ASC, row_num ASC"); return $result->fetch_all(MYSQLI_ASSOC); } /** Получить все строки страницы (без привязки к проекту) */ public function getByPage(int $pageId): array { $pageId = $this->db->escape((string)$pageId); $result = $this->db->query("SELECT * FROM task_rows WHERE page_id = $pageId ORDER BY sort_order ASC, row_num ASC"); return $result->fetch_all(MYSQLI_ASSOC); } /** Найти строку по ID */ public function find(int $id): ?array { $id = $this->db->escape((string)$id); $result = $this->db->query("SELECT * FROM task_rows WHERE id = $id"); return $result->fetch_assoc() ?: null; } /** Создать новую строку */ public function create(int $pageId, string $title = '', int $rowNum = 0, ?int $projectId = null): int { $pageId = $this->db->escape((string)$pageId); $title = $this->db->escape($title); $projectId = $projectId !== null ? $this->db->escape((string)$projectId) : 'NULL'; if ($rowNum <= 0) { $maxRow = $this->db->query("SELECT COALESCE(MAX(row_num), 0) + 1 AS next FROM task_rows WHERE page_id = $pageId")->fetch_assoc(); $rowNum = $maxRow['next']; } else { $rowNum = $this->db->escape((string)$rowNum); } $order = $rowNum; $this->db->query("INSERT INTO task_rows (page_id, title, row_num, sort_order, project_id) VALUES ($pageId, '$title', $rowNum, $order, $projectId)"); return (int)$this->db->query("SELECT LAST_INSERT_ID() AS id")->fetch_assoc()['id']; } /** Обновить название строки */ public function update(int $id, string $title): bool { $id = $this->db->escape((string)$id); $title = $this->db->escape($title); $this->db->query("UPDATE task_rows SET title = '$title' WHERE id = $id"); return true; } /** Удалить строку */ public function delete(int $id): bool { $id = $this->db->escape((string)$id); $this->db->query("DELETE FROM task_rows WHERE id = $id"); return true; } /** Обновить порядок строк */ public function updateSortOrder(array $orderedIds): bool { foreach ($orderedIds as $position => $id) { $id = $this->db->escape((string)$id); $this->db->query("UPDATE task_rows SET sort_order = $position WHERE id = $id"); } return true; } /** Получить максимальный row_num для страницы */ public function getMaxRowNum(int $pageId): int { $pageId = $this->db->escape((string)$pageId); $result = $this->db->query("SELECT COALESCE(MAX(row_num), 0) AS max_row FROM task_rows WHERE page_id = $pageId"); return (int)$result->fetch_assoc()['max_row']; } }