/** * Adds an group admin to a contest * * @param Request $r * @return array * @throws InvalidDatabaseOperationException * @throws ForbiddenAccessException */ public static function apiAddGroupAdmin(Request $r) { if (OMEGAUP_LOCKDOWN) { throw new ForbiddenAccessException('lockdown'); } // 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 admins are allowed to modify contest 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); // Save the contest to the DB try { GroupRolesDAO::save($group_role); } catch (Exception $e) { // Operation failed in the data layer throw new InvalidDatabaseOperationException($e); } return array('status' => 'ok'); }
/** * Adds a group admin to a problem * * @param Request $r * @return array * @throws InvalidDatabaseOperationException * @throws ForbiddenAccessException */ public static function apiAddGroupAdmin(Request $r) { // Authenticate logged user self::authenticateRequest($r); // Check problem_alias 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); // Save the role try { GroupRolesDAO::save($group_role); } catch (Exception $e) { // Operation failed in the data layer self::$log->error('Failed to save user roles'); self::$log->error($e); throw new InvalidDatabaseOperationException($e); } return array('status' => 'ok'); }