diff options
Diffstat (limited to 'web/pmod/pmod_test/pmod_test.php')
-rw-r--r-- | web/pmod/pmod_test/pmod_test.php | 110 |
1 files changed, 92 insertions, 18 deletions
diff --git a/web/pmod/pmod_test/pmod_test.php b/web/pmod/pmod_test/pmod_test.php index 27eecf2..a472630 100644 --- a/web/pmod/pmod_test/pmod_test.php +++ b/web/pmod/pmod_test/pmod_test.php @@ -1,9 +1,32 @@ <?php -require_once('../../php/problem.inc.php'); +require_once('problem.inc.php'); +require_once('user.inc.php'); const PMODNAME = 'pmod_test'; -$proid = json_decode($_POST['proid']); +function get_setting($prodir) +{ + $fd = fopen($prodir.'setting','r'); + $prestr = array(); + while($line = fgets($fd)){ + if($line[0] == '='){ + break; + } + array_push($prestr, $line); + } + $set = ''; + while(($line = fgets($fd))){ + $set = $set.$line; + } + fclose($fd); + + return array($prestr, json_decode($set)); +} + +$action = $_POST['action']; +$data = json_decode($_POST['data']); + +$proid = intval($data->proid); if(gettype($proid) != 'integer' || $proid < 1){ exit('Eproid'); } @@ -17,26 +40,77 @@ $pro = problem::get($sqlc, $proid); if($pro->pmodname != PMODNAME) exit('Ewrong_pmod'); -db_close($sqlc); - $prodir = '/srv/http/toj/center/pro/'.$proid.'/'; -$fd = fopen($prodir.'setting','r'); -while($line = fgets($fd)){ - if($line[0] == '='){ - break; - } +if($action=='get_pro_data') +{ + $content = file_get_contents($prodir.'public/content'); + + echo(json_encode(array( + 'set' => get_setting($prodir)[1], + 'content' => $content + ))); } -$set = ''; -while(($line = fgets($fd))){ - $set = $set.$line; +if($action=='set_pro_data') +{ + if(!sec_check_level($sqlc, USER_LEVEL_SUPERADMIN)) + die('Epermission_denied'); + + $obj = get_setting($prodir); + $prestr = $obj[0]; + $set = $obj[1]; + $set->timelimit = $data->timelimit; + $set->memlimit = $data->memlimit; + file_put_contents($prodir.'public/content', $data->content); + + $newstr = ''; + foreach($prestr as $s) + { + $newstr = $newstr.$s; + } + $newstr = $newstr."=====\n\n"; + $newstr = $newstr.json_encode($set); + file_put_contents($prodir.'setting', $newstr); } -fclose($fd); +if($action=='update_pro_testdata') +{ + if(!sec_check_level($sqlc, USER_LEVEL_SUPERADMIN)) + die('Epermission_denied'); + + $count = $data->count; + $score = $data->score; + + $obj = get_setting($prodir); + $prestr = $obj[0]; + $set = $obj[1]; + $set->count = $count; + $set->score = $score; + + $newstr = ''; + foreach($prestr as $s) + { + $newstr = $newstr.$s; + } + $newstr = $newstr."=====\n\n"; + $newstr = $newstr.json_encode($set); + file_put_contents($prodir.'setting', $newstr); -$content = file_get_contents($prodir.'public/content'); + $tddir = $prodir.'/private/'; + for($idx = 0;$idx < $count;$idx++){ + $dst = $tddir.strval($idx + 1); + mkdir($dst); -echo(json_encode(array( - 'set' => json_decode($set), - 'content' => $content -))); + $key = 'infile_'.strval($idx); + if(array_key_exists($key,$_FILES)){ + move_uploaded_file($_FILES[$key]["tmp_name"],$dst.'/in'); + } + + $key = 'ansfile_'.strval($idx); + if(array_key_exists($key,$_FILES)){ + move_uploaded_file($_FILES[$key]["tmp_name"],$dst.'/ans'); + } + } +} + +db_close($sqlc); ?> |