function WT_GetProblem() { global $lid; if (!WT_IPC_CheckLogin()) { return; } if ($lid == '') { return; } $q = db_select('tester_problems', array('*'), '(`uploaded`=FALSE) AND (`lid`=' . $lid . ')', 'ORDER BY `id` LIMIT 1'); if (db_affected() <= 0) { return; } $r = db_row($q); $s = unserialize($r['settings']); $arr = array(); $arr['ID'] = $r['id']; if (isset($s['filename'])) { $arr['FILENAME'] = $s['filename']; } if (preg_match('/[0-9]+/', $s['checker'])) { $arr['CHECKER'] = $s['checker']; } print db_pack($arr); }
function WT_GetChecker() { if (!WT_IPC_CheckLogin()) { return; } $r = db_row(db_select('tester_checkers', array('*'), '`uploaded`=FALSE', 'LIMIT 1')); if ($r) { $s = unserialize($r['settings']); $arr = array('ID' => $r['id'], 'SRC' => $s['src'], 'COMPILERID' => $s['compiler_id']); print db_pack($arr); } }
function WT_PutSolution() { global $id, $lid, $ERRORS, $POINTS, $XPFS; $optional_params = array('REPORT'); $update_params = array('COMPILER_MESSAGES', 'TESTS'); if (!WT_IPC_CheckLogin()) { return; } if (!isset($id) || !isset($lid)) { print 'Void filename for WT_PutSOlution'; return; } $r = db_row_value('tester_solutions', "`id`={$id} AND `lid`={$lid}"); $p = unserialize($r['parameters']); for ($i = 0; $i < count($update_params); $i++) { if (isset($_POST[$update_params[$i]])) { $p[$update_params[$i]] = stripslashes($_POST[$update_params[$i]]); } } if ($POINTS == '') { $POINTS = 0; } $n = count($optional_params); for ($i = 0; $i < $n; $i++) { $p[$optional_params[$i]] = stripslashes($GLOBALS[$optional_params[$i]]); } unset($p['force_status']); $data = array(); if (isset($_POST['SOLUTION_OUTPUT'])) { $data['outputs'] = stripslashes($_POST['SOLUTION_OUTPUT']); } if (isset($_POST['CHECKER_OUTPUT'])) { $data['checker_outputs'] = stripslashes($_POST['CHECKER_OUTPUT']); } if (count($data) > 0) { $path = '/tester/testing/'; $XPFS->CreateDirWithParents($path); $XPFS->removeItem($path . '/' . $id); $XPFS->createFile($path, $id, 0, db_pack($data)); } db_update('tester_solutions', array('status' => 2, 'points' => $POINTS, 'errors' => db_string($ERRORS), 'parameters' => db_string(serialize($p))), "`id`={$id} AND `lid`={$lid}"); }
function CreateSettings() { global $XPFS; $cfg = db_unpack($XPFS->readFile('/tester/wt.cfg')); if ($cfg['initialized']) { return; } manage_settings_create('Имя хоста основного сервера WebTester', 'WebTester', 'WT_server_host', 'CSCText'); manage_settings_create('IPC-порт основного сервера WebTester', 'WebTester', 'WT_server_port', 'CSCNumber'); manage_settings_create('Логин на основной сервер WebTester', 'WebTester', 'WT_server_login', 'CSCText'); manage_settings_create('Пароль на основной сервер WebTester', 'WebTester', 'WT_server_pass', 'CSCPassword'); manage_setting_use('WT_server_host'); manage_setting_use('WT_server_port'); manage_setting_use('WT_server_login'); manage_setting_use('WT_server_pass'); $cfg['initialized'] = 1; $XPFS->createDirectory('/', 'tester'); $XPFS->createFile('/tester', 'wt.cfg'); $XPFS->writeBlock('/tester/wt.cfg', db_pack($cfg)); }
function WT_GetTask() { global $id, $lid; if (!WT_IPC_CheckLogin()) { return; } if (!isset($id) || !isset($lid)) { print 'Void filename for WT_GetTask()'; return; } $solution = db_row(db_select('tester_solutions', array('*'), "`id`={$id}")); if ($solution['id'] == '') { return; } $contest = db_row(db_select('tester_contests', array('*'), '`id`=' . $solution['contest_id'] . ' AND `lid`=' . $lid)); $problem = db_row(db_select('tester_problems', array('*'), '`id`=' . $solution['problem_id'] . ' AND `lid`=' . $lid)); $contest['settings'] = unserialize($contest['settings']); $solution['parameters'] = unserialize($solution['parameters']); $arr = array(); // Solution's based settings $arr['PROBLEMID'] = $solution['problem_id']; $arr['COMPILERID'] = $solution['parameters']['compiler_id']; $arr['SOURCE'] = $solution['parameters']['src']; if ($contest['settings']['rules'] == 0) { $arr['ACM'] = 'TRUE'; } else { $arr['ACM'] = 'FALSE'; } // Problem's passed settings $prpars = unserialize($problem['settings']); $arr['TIMELIMIT'] = $prpars['timelimit']; $arr['MEMORYLIMIT'] = $prpars['memorylimit']; $arr['INPUTFILE'] = $prpars['input']; $arr['OUTPUTFILE'] = $prpars['output']; $arr['TESTS'] = $prpars['tests']; $arr['BONUS'] = $prpars['bonus']; print db_pack($arr); }