Beispiel #1
0
function processConnectToContestRequest($request)
{
    $prfx = DB_PREFIX;
    //find user in table
    $row = Data::getRow(sprintf("SELECT {$prfx}user.*, {$prfx}contest.settings\r\n                             FROM {$prfx}user\r\n                             LEFT JOIN {$prfx}contest\r\n                             ON {$prfx}user.contest_id = {$prfx}contest.id\r\n                             WHERE login=%s AND contest_id=%s", Data::quote_smart($request->login), Data::quote_smart($request->contestID)));
    //test if there is at least one user
    if (!$row) {
        throwBusinessLogicError(12);
    }
    //test password
    if ($row['password'] !== $request->password) {
        throwBusinessLogicError(12);
    }
    //get contest settings and contest time
    $settings = Data::_unserialize($row['settings'], null);
    if (is_null($row['contest_start'])) {
        $now = getdate();
        $now = $now[0];
        $q = Data::composeUpdateQuery('user', array('contest_start' => DatePHPToMySQL($now)), "id={$row['id']}");
        Data::submitModificationQuery($q);
        $row['contest_start'] = $now;
    }
    $contest_time = getCurrentContestTime($settings, DateMySQLToPHP($row['contest_start']), DateMySQLToPHP($row['contest_finish']));
    if ($contest_time['interval'] === 'before' && $row['user_type'] === 'Participant') {
        throwBusinessLogicError(19);
    }
    //start new session
    $session_id = RequestUtils::createSession($row['id']);
    //get finish time
    if (is_null($settings)) {
        $finish_time = 0;
    } elseif ($settings->contestTiming->selfContestStart) {
        $finish_time = $row['contest_start'] + 60 * $settings->contestTiming->maxContestDuration;
    } else {
        $finish_time = $settings->finish;
    }
    if (is_null($finish_time)) {
        $finish_time = 0;
    }
    $res = new ConnectToContestResponse();
    $res->sessionID = $session_id;
    $res->finishTime = $finish_time;
    $res->user = new UserDescription();
    $res->user->userID = (int) $row['id'];
    $res->user->login = $request->login;
    $res->user->dataValue = Data::_unserialize($row['user_data'], array());
    $res->user->userType = $row['user_type'];
    return $res;
}