Большое обновление
1. Создание личных проектов 2. Управление командой 3. Приглашение участников 4. Уведомления и многое другое...
This commit is contained in:
@@ -12,9 +12,25 @@ if ($method === 'POST') {
|
||||
|
||||
// Создание комментария
|
||||
if ($action === 'create') {
|
||||
$comment->id_task = $data['id_task'] ?? null;
|
||||
$id_task = $data['id_task'] ?? null;
|
||||
|
||||
// Проверяем доступ к проекту через задачу
|
||||
$taskData = Task::check_task($id_task);
|
||||
ProjectAccess::requireAccess($taskData['id_project'], $current_user_id);
|
||||
|
||||
// Проверяем право на создание комментариев (с учётом create_comment_own_task_only)
|
||||
if (!ProjectAccess::canCreateComment(
|
||||
$taskData['id_project'],
|
||||
$current_user_id,
|
||||
(int)($taskData['id_account'] ?? 0),
|
||||
(int)($taskData['create_id_account'] ?? 0)
|
||||
)) {
|
||||
RestApi::response(['success' => false, 'errors' => ['access' => 'Нет прав на создание комментария']], 403);
|
||||
}
|
||||
|
||||
$comment->id_task = $id_task;
|
||||
$comment->id_accounts = $current_user_id;
|
||||
$comment->id_answer = $data['id_answer'] ?? null; // Ответ на комментарий
|
||||
$comment->id_answer = $data['id_answer'] ?? null;
|
||||
$comment->text = $data['text'] ?? '';
|
||||
|
||||
$result = $comment->create();
|
||||
@@ -23,7 +39,14 @@ if ($method === 'POST') {
|
||||
|
||||
// Обновление комментария
|
||||
if ($action === 'update') {
|
||||
$comment->id = $data['id'] ?? null;
|
||||
$comment_id = $data['id'] ?? null;
|
||||
|
||||
// Проверяем доступ к проекту через комментарий -> задачу
|
||||
$commentData = Comment::checkComment($comment_id);
|
||||
$taskData = Task::check_task($commentData['id_task']);
|
||||
ProjectAccess::requireAccess($taskData['id_project'], $current_user_id);
|
||||
|
||||
$comment->id = $comment_id;
|
||||
$comment->id_accounts = $current_user_id;
|
||||
$comment->text = $data['text'] ?? '';
|
||||
|
||||
@@ -34,26 +57,80 @@ if ($method === 'POST') {
|
||||
// Удаление комментария
|
||||
if ($action === 'delete') {
|
||||
$id = $data['id'] ?? null;
|
||||
$result = Comment::delete($id, $current_user_id);
|
||||
|
||||
// Проверяем доступ к проекту через комментарий -> задачу
|
||||
$commentData = Comment::checkComment($id);
|
||||
$taskData = Task::check_task($commentData['id_task']);
|
||||
$project_id = $taskData['id_project'];
|
||||
ProjectAccess::requireAccess($project_id, $current_user_id);
|
||||
|
||||
// Проверяем права на удаление
|
||||
$isAuthor = (int)$commentData['id_accounts'] === (int)$current_user_id;
|
||||
$isAdmin = ProjectAccess::isAdmin($project_id, $current_user_id);
|
||||
$canDeleteAll = ProjectAccess::can($project_id, $current_user_id, 'delete_all_comments');
|
||||
$canDeleteOwn = ProjectAccess::can($project_id, $current_user_id, 'delete_own_comments');
|
||||
|
||||
if (!$isAdmin && !$canDeleteAll && !($isAuthor && $canDeleteOwn)) {
|
||||
RestApi::response([
|
||||
'success' => false,
|
||||
'errors' => ['access' => 'Нет прав на удаление комментария']
|
||||
], 403);
|
||||
}
|
||||
|
||||
$result = Comment::deleteWithAccess($id);
|
||||
RestApi::response($result);
|
||||
}
|
||||
|
||||
// Загрузка файла к комментарию (только автор)
|
||||
// Загрузка файла к комментарию
|
||||
if ($action === 'upload_image') {
|
||||
$comment_id = $data['comment_id'] ?? null;
|
||||
$file_base64 = $data['file_data'] ?? null;
|
||||
$file_name = $data['file_name'] ?? null;
|
||||
|
||||
// Проверяем доступ к проекту
|
||||
$commentData = Comment::checkComment($comment_id);
|
||||
$taskData = Task::check_task($commentData['id_task']);
|
||||
$project_id = $taskData['id_project'];
|
||||
ProjectAccess::requireAccess($project_id, $current_user_id);
|
||||
|
||||
// Проверяем право на загрузку картинок
|
||||
ProjectAccess::requirePermission($project_id, $current_user_id, 'upload_images');
|
||||
|
||||
// Только автор может загружать к своему комментарию
|
||||
if ((int)$commentData['id_accounts'] !== (int)$current_user_id) {
|
||||
RestApi::response([
|
||||
'success' => false,
|
||||
'errors' => ['access' => 'Вы можете загружать файлы только к своим комментариям']
|
||||
], 403);
|
||||
}
|
||||
|
||||
$result = Comment::uploadFile($comment_id, $file_base64, $file_name, $current_user_id);
|
||||
$result = Comment::uploadFileSimple($comment_id, $file_base64, $file_name);
|
||||
RestApi::response($result);
|
||||
}
|
||||
|
||||
// Удаление файлов комментария (автор или админ проекта)
|
||||
// Удаление файлов комментария
|
||||
if ($action === 'delete_image') {
|
||||
$comment_id = $data['comment_id'] ?? null;
|
||||
$file_names = $data['file_names'] ?? $data['file_name'] ?? null;
|
||||
|
||||
// Проверяем доступ к проекту
|
||||
$commentData = Comment::checkComment($comment_id);
|
||||
$taskData = Task::check_task($commentData['id_task']);
|
||||
$project_id = $taskData['id_project'];
|
||||
ProjectAccess::requireAccess($project_id, $current_user_id);
|
||||
|
||||
// Проверка прав: автор комментария ИЛИ админ проекта
|
||||
$isAuthor = (int)$commentData['id_accounts'] === (int)$current_user_id;
|
||||
$isAdmin = ProjectAccess::isAdmin($project_id, $current_user_id);
|
||||
|
||||
if (!$isAuthor && !$isAdmin) {
|
||||
RestApi::response([
|
||||
'success' => false,
|
||||
'errors' => ['access' => 'Нет прав на удаление файлов']
|
||||
], 403);
|
||||
}
|
||||
|
||||
$result = Comment::deleteFile($comment_id, $file_names, $current_user_id);
|
||||
$result = Comment::deleteFileSimple($comment_id, $file_names);
|
||||
RestApi::response($result);
|
||||
}
|
||||
|
||||
@@ -66,12 +143,17 @@ if ($method === 'POST') {
|
||||
if ($method === 'GET') {
|
||||
// Получение комментариев задачи
|
||||
// ?id_task=X (обязательный)
|
||||
$current_user_id = RestApi::getCurrentUserId();
|
||||
$id_task = $_GET['id_task'] ?? null;
|
||||
|
||||
if (!$id_task) {
|
||||
RestApi::response(['success' => false, 'errors' => ['id_task' => 'Задача не указана']], 400);
|
||||
}
|
||||
|
||||
// Проверяем доступ к проекту через задачу
|
||||
$taskData = Task::check_task($id_task);
|
||||
ProjectAccess::requireAccess($taskData['id_project'], $current_user_id);
|
||||
|
||||
$comment = new Comment();
|
||||
$comments = $comment->getByTask($id_task);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user