/** * Removes a group admin from a contest * * @param Request $r * @return array * @throws InvalidDatabaseOperationException * @throws ForbiddenAccessException */ public static function apiRemoveGroupAdmin(Request $r) { // Authenticate logged user self::authenticateRequest($r); // Check contest_alias Validators::isStringNonEmpty($r['contest_alias'], 'contest_alias'); $group = GroupsDAO::FindByAlias($r['group']); if ($group == null) { throw new InvalidParameterException('invalidParameters'); } try { $r['contest'] = ContestsDAO::getByAlias($r['contest_alias']); } catch (Exception $e) { // Operation failed in the data layer throw new InvalidDatabaseOperationException($e); } // Only admin is alowed to make modifications if (!Authorization::IsContestAdmin($r['current_user_id'], $r['contest'])) { throw new ForbiddenAccessException(); } $group_role = new GroupRoles(); $group_role->setContestId($r['contest']->getContestId()); $group_role->setGroupId($group->group_id); $group_role->setRoleId(CONTEST_ADMIN_ROLE); // Delete the role try { GroupRolesDAO::delete($group_role); } catch (Exception $e) { // Operation failed in the data layer throw new InvalidDatabaseOperationException($e); } return array('status' => 'ok'); }
/** * Removes a group admin from a problem * * @param Request $r * @return array * @throws InvalidDatabaseOperationException * @throws ForbiddenAccessException */ public static function apiRemoveGroupAdmin(Request $r) { // Authenticate logged user self::authenticateRequest($r); // Check whether problem exists Validators::isStringNonEmpty($r['problem_alias'], 'problem_alias'); $group = GroupsDAO::FindByAlias($r['group']); if ($group == null) { throw new InvalidParameterException('invalidParameters'); } try { $r['problem'] = ProblemsDAO::getByAlias($r['problem_alias']); } catch (Exception $e) { // Operation failed in the data layer throw new InvalidDatabaseOperationException($e); } if (!Authorization::IsProblemAdmin($r['current_user_id'], $r['problem'])) { throw new ForbiddenAccessException(); } $group_role = new GroupRoles(); $group_role->setContestId($r['problem']->problem_id); $group_role->setGroupId($group->group_id); $group_role->setRoleId(PROBLEM_ADMIN_ROLE); // Delete the role try { GroupRolesDAO::delete($group_role); } catch (Exception $e) { // Operation failed in the data layer throw new InvalidDatabaseOperationException($e); } return array('status' => 'ok'); }