- Система комментариев к задачам с вложенными ответами - Редактирование и удаление комментариев - Прикрепление файлов к задачам и комментариям (картинки, архивы до 10 МБ) - Система прав проекта: админ проекта может удалять чужие комментарии и файлы - Универсальный класс FileUpload для загрузки файлов - Защита загрузки: только автор комментария может добавлять файлы - Каскадное удаление: задача → комментарии → файлы - Автообновление комментариев в реальном времени
119 lines
3.9 KiB
PHP
119 lines
3.9 KiB
PHP
<?php
|
|
|
|
$method = $_SERVER['REQUEST_METHOD'];
|
|
|
|
if ($method === 'POST') {
|
|
$data = RestApi::getInput();
|
|
$action = $data['action'] ?? null;
|
|
$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;
|
|
|
|
$result = Task::uploadFile($task_id, $file_base64, $file_name);
|
|
RestApi::response($result);
|
|
}
|
|
|
|
// Удаление изображений (принимает file_names массив или file_name строку)
|
|
if ($action === 'delete_image') {
|
|
$task_id = $data['task_id'] ?? null;
|
|
$file_names = $data['file_names'] ?? $data['file_name'] ?? null;
|
|
|
|
$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;
|
|
|
|
$result = Task::updateOrder($id, $column_id, $to_index);
|
|
RestApi::response($result);
|
|
}
|
|
|
|
// Обновление задачи
|
|
if ($action === 'update') {
|
|
$task->id = $data['id'] ?? null;
|
|
$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') {
|
|
$task->id_project = $data['id_project'] ?? null;
|
|
$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'] ?? 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;
|
|
$result = Task::delete($id);
|
|
RestApi::response($result);
|
|
}
|
|
|
|
// Установка статуса архивации задачи
|
|
if ($action === 'set_archive') {
|
|
$id = $data['id'] ?? null;
|
|
$archive = $data['archive'] ?? 1;
|
|
$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 (все)
|
|
$id_project = $_GET['id_project'] ?? null;
|
|
|
|
if (!$id_project) {
|
|
RestApi::response(['success' => false, 'errors' => ['id_project' => 'Проект не указан']], 400);
|
|
}
|
|
|
|
$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]);
|
|
}
|
|
|
|
?>
|