1
0
Files
TaskBoard/backend/api/task.php
2026-01-19 15:10:37 +07:00

163 lines
6.2 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?php
$method = $_SERVER['REQUEST_METHOD'];
if ($method === 'POST') {
$data = RestApi::getInput();
$action = $data['action'] ?? null;
$user_id = RestApi::getCurrentUserId();
$task = new Task();
// Загрузка изображения
if ($action === 'upload_image') {
$task_id = $data['task_id'] ?? null;
$file_base64 = $data['file_data'] ?? null;
$file_name = $data['file_name'] ?? null;
// Проверяем право на редактирование задачи
$taskData = Task::check_task($task_id);
ProjectAccess::requireEditTask($taskData['id_project'], $user_id, (int)($taskData['id_account'] ?? 0), (int)($taskData['create_id_account'] ?? 0));
$result = Task::uploadFile($task_id, $file_base64, $file_name);
RestApi::response($result);
}
// Удаление изображений
if ($action === 'delete_image') {
$task_id = $data['task_id'] ?? null;
$file_names = $data['file_names'] ?? $data['file_name'] ?? null;
// Проверяем право на редактирование задачи
$taskData = Task::check_task($task_id);
ProjectAccess::requireEditTask($taskData['id_project'], $user_id, (int)($taskData['id_account'] ?? 0), (int)($taskData['create_id_account'] ?? 0));
$result = Task::deleteFile($task_id, $file_names);
RestApi::response($result);
}
// Изменение порядка и колонки задачи
if ($action === 'update_order') {
$id = $data['id'] ?? null;
$column_id = $data['column_id'] ?? null;
$to_index = $data['to_index'] ?? 0;
// Проверяем право на перемещение (с учётом move_own_task_only)
$taskData = Task::check_task($id);
ProjectAccess::requireMoveTask($taskData['id_project'], $user_id, (int)($taskData['id_account'] ?? 0), (int)($taskData['create_id_account'] ?? 0));
$result = Task::updateOrder($id, $column_id, $to_index);
RestApi::response($result);
}
// Обновление задачи
if ($action === 'update') {
$task->id = $data['id'] ?? null;
// Проверяем право на редактирование
$taskData = Task::check_task($task->id);
ProjectAccess::requireEditTask($taskData['id_project'], $user_id, (int)($taskData['id_account'] ?? 0), (int)($taskData['create_id_account'] ?? 0));
$task->id_department = $data['id_department'] ?? null;
$task->id_label = $data['id_label'] ?? null;
$task->id_account = $data['id_account'] ?? null;
$task->column_id = $data['column_id'] ?? null;
$task->order = $data['order'] ?? null;
$task->date = $data['date'] ?? null;
$task->title = $data['title'] ?? '';
$task->descript = $data['descript'] ?? '';
$task->descript_full = $data['descript_full'] ?? '';
$result = $task->update();
RestApi::response($result);
}
// Создание задачи
if ($action === 'create') {
$project_id = $data['id_project'] ?? null;
// Проверяем право на создание задач
ProjectAccess::requirePermission($project_id, $user_id, 'create_task');
// Проверяем что у проекта есть колонки
$columns = Project::getColumns($project_id);
if (empty($columns)) {
RestApi::response(['success' => false, 'errors' => ['project' => 'У проекта нет колонок. Создайте хотя бы одну колонку.']], 400);
}
$task->id_project = $project_id;
$task->id_department = $data['id_department'] ?? null;
$task->id_label = $data['id_label'] ?? null;
$task->id_account = $data['id_account'] ?? null;
$task->create_id_account = $user_id; // Создатель задачи
$task->column_id = $data['column_id'] ?? null;
$task->order = $data['order'] ?? 0;
$task->date = $data['date'] ?? null;
$task->title = $data['title'] ?? '';
$task->descript = $data['descript'] ?? '';
$task->descript_full = $data['descript_full'] ?? '';
$files = $data['files'] ?? [];
$result = $task->create($files);
RestApi::response($result);
}
// Удаление задачи
if ($action === 'delete') {
$id = $data['id'] ?? null;
// Проверяем право на удаление
$taskData = Task::check_task($id);
ProjectAccess::requirePermission($taskData['id_project'], $user_id, 'delete_task');
$result = Task::delete($id);
RestApi::response($result);
}
// Установка статуса архивации задачи
if ($action === 'set_archive') {
$id = $data['id'] ?? null;
$archive = $data['archive'] ?? 1;
// Проверяем право на архивирование
$taskData = Task::check_task($id);
ProjectAccess::requirePermission($taskData['id_project'], $user_id, 'archive_task');
$result = Task::setArchive($id, $archive);
RestApi::response($result);
}
// Метод не указан
if (!$action) {
RestApi::response(['success' => false, 'error' => 'Укажите метод'], 400);
}
}
if ($method === 'GET') {
// Получение задач проекта
// ?id_project=1 (обязательный)
// ?archive=0 (неархивные, по умолчанию), ?archive=1 (архивные), ?archive=all (все)
$user_id = RestApi::getCurrentUserId();
$id_project = $_GET['id_project'] ?? null;
if (!$id_project) {
RestApi::response(['success' => false, 'errors' => ['id_project' => 'Проект не указан']], 400);
}
// Проверяем доступ к проекту
ProjectAccess::requireAccess((int)$id_project, $user_id);
$archive = $_GET['archive'] ?? 0;
if ($archive === 'all') {
$archive = null;
} else {
$archive = (int)$archive;
}
$task = new Task();
$tasks = $task->getAll($id_project, $archive);
RestApi::response(['success' => true, 'data' => $tasks]);
}
?>