false, 'errors' => ['auth' => 'Требуется авторизация']], 401); } $invites = ProjectInvite::getMyPending($current_user_id); $count = count($invites); RestApi::response([ 'success' => true, 'data' => $invites, 'count' => $count ]); } // POST — действия с приглашениями if ($method === 'POST') { $data = RestApi::getInput(); $action = $data['action'] ?? null; $current_user_id = RestApi::getCurrentUserId(); if (!$current_user_id) { RestApi::response(['success' => false, 'errors' => ['auth' => 'Требуется авторизация']], 401); } // Отправить приглашение (только админ проекта) if ($action === 'send') { $project_id = (int)($data['project_id'] ?? 0); $user_id = (int)($data['user_id'] ?? 0); $is_admin = (bool)($data['is_admin'] ?? false); $permissions = $data['permissions'] ?? null; if (!$project_id || !$user_id) { RestApi::response(['success' => false, 'errors' => ['data' => 'Укажите project_id и user_id']], 400); } // Только админ может приглашать ProjectAccess::requireAdmin($project_id, $current_user_id); $result = ProjectInvite::create($project_id, $user_id, $current_user_id, $is_admin, $permissions); RestApi::response($result, $result['success'] ? 200 : 400); } // Проверить, есть ли pending-приглашение для пользователя в проект if ($action === 'check_pending') { $project_id = (int)($data['project_id'] ?? 0); $user_id = (int)($data['user_id'] ?? 0); if (!$project_id || !$user_id) { RestApi::response(['success' => false, 'errors' => ['data' => 'Укажите project_id и user_id']], 400); } // Проверяем доступ к проекту ProjectAccess::requireAccess($project_id, $current_user_id); $hasPending = ProjectInvite::hasPending($project_id, $user_id); RestApi::response(['success' => true, 'has_pending' => $hasPending]); } // Получить pending-приглашения проекта (для админа) if ($action === 'get_project_pending') { $project_id = (int)($data['project_id'] ?? 0); if (!$project_id) { RestApi::response(['success' => false, 'errors' => ['data' => 'Укажите project_id']], 400); } // Только админ может видеть ProjectAccess::requireAdmin($project_id, $current_user_id); $invites = ProjectInvite::getProjectPending($project_id); RestApi::response(['success' => true, 'data' => $invites]); } // Получить количество pending-приглашений для текущего пользователя if ($action === 'get_count') { $count = ProjectInvite::getPendingCount($current_user_id); RestApi::response(['success' => true, 'count' => $count]); } // Принять приглашение if ($action === 'accept') { $invite_id = (int)($data['invite_id'] ?? 0); if (!$invite_id) { RestApi::response(['success' => false, 'errors' => ['data' => 'Укажите invite_id']], 400); } $result = ProjectInvite::accept($invite_id, $current_user_id); RestApi::response($result, $result['success'] ? 200 : 400); } // Отклонить приглашение if ($action === 'decline') { $invite_id = (int)($data['invite_id'] ?? 0); if (!$invite_id) { RestApi::response(['success' => false, 'errors' => ['data' => 'Укажите invite_id']], 400); } $result = ProjectInvite::decline($invite_id, $current_user_id); RestApi::response($result, $result['success'] ? 200 : 400); } // Отменить приглашение (только админ) if ($action === 'cancel') { $invite_id = (int)($data['invite_id'] ?? 0); $project_id = (int)($data['project_id'] ?? 0); if (!$invite_id || !$project_id) { RestApi::response(['success' => false, 'errors' => ['data' => 'Укажите invite_id и project_id']], 400); } // Только админ может отменять ProjectAccess::requireAdmin($project_id, $current_user_id); $result = ProjectInvite::cancel($invite_id, $project_id); RestApi::response($result, $result['success'] ? 200 : 400); } // Метод не указан if (!$action) { RestApi::response(['success' => false, 'error' => 'Укажите action'], 400); } } ?>