From d712c818ac131caf357363ffc52517d6f56fe754 Mon Sep 17 00:00:00 2001 From: Gatuno Date: Wed, 31 Jan 2024 16:04:48 -0600 Subject: New autojudge setting on interface per problem. (#41) * First obey the global 'autojudge' setting per site. * Next, check the setting per problem per answer type. * By default autoanswer is enabled on all problems. --- src/fanswer.php | 24 +++++++++++++++++++----- 1 file changed, 19 insertions(+), 5 deletions(-) (limited to 'src/fanswer.php') diff --git a/src/fanswer.php b/src/fanswer.php index 8f2c95b..17f42a0 100644 --- a/src/fanswer.php +++ b/src/fanswer.php @@ -30,6 +30,7 @@ CREATE TABLE \"answertable\" ( \"contestnumber\" int4 NOT NULL, -- (id do concurso) \"answernumber\" int4 NOT NULL, -- (id da reposta) \"runanswer\" varchar(50) NOT NULL, -- (reposta dada no julgamento) +\"shortname\" varchar(50) DEFAULT '' NOT NULL, -- () \"yes\" bool DEFAULT 'f' NOT NULL, -- (flag para indicar se conta ponto) \"fake\" bool DEFAULT 'f' NOT NULL, -- (flag para indicar se eh resposta valida) \"updatetime\" int4 DEFAULT EXTRACT(EPOCH FROM now()) NOT NULL, -- (indica a ultima atualizacao no registro) @@ -49,7 +50,7 @@ CONSTRAINT \"contest_fk\" FOREIGN KEY (\"contestnumber\") REFERENCES \"contestta //devolve um array, onde cada linha tem os atributos number (numero da resposta) e desc (descricao da resposta) function DBGetAnswers($contest) { $c = DBConnect(); - $r = DBExec($c, "select distinct a.answernumber as number, a.runanswer as desc, a.yes as yes, a.fake as fake ". + $r = DBExec($c, "select distinct a.answernumber as number, a.runanswer as desc, a.shortname as short, a.yes as yes, a.fake as fake ". "from answertable as a where a.contestnumber=$contest and a.runanswer !~ '(DEL)' order by a.answernumber", "DBGetAnswers(get answers)"); $n = DBnlines($r); $a = array(); @@ -58,6 +59,18 @@ function DBGetAnswers($contest) { return $a; } +function DBGetAnswer($contest, $number) { + $c = DBConnect(); + $r = DBExec($c, "select distinct a.answernumber as number, a.runanswer as desc, a.shortname as short, a.yes as yes, a.fake as fake ". + "from answertable as a where a.contestnumber=$contest and a.runanswer !~ '(DEL)' order by a.answernumber", "DBGetAnswer(only 1 answer)"); + $n = DBnlines($r); + if ($n != 1) { + return null; + } + $a = DBRow($r,0); + return $a; +} + //recebe o numero do contest e o numero da resposta e remove-a caso seu tipo nao seja fake function DBDeleteAnswer($contest,$param,$c=null) { $ac=array('number'); @@ -98,8 +111,9 @@ function DBNewAnswer($contest, $param, $c=null) { } if(isset($param['answernumber']) && !isset($param['number'])) $param['number']=$param['answernumber']; if(isset($param['runanswer']) && !isset($param['name'])) $param['name']=$param['runanswer']; + if(isset($param['shortname']) && !isset($param['short'])) $param['short']=$param['shortname']; - $ac=array('number','name','yes'); + $ac=array('number','name','yes', 'short'); $type['number']=1; foreach($ac as $key) { if(!isset($param[$key])) { @@ -131,15 +145,15 @@ function DBNewAnswer($contest, $param, $c=null) { $ret=1; if ($n == 0) { $ret=2; - DBExec($c, "insert into answertable (contestnumber, answernumber, runanswer, yes, updatetime) values " . - "($contest, $number, '$name', '$y', $t)", "DBNewAnswer(insert answer)"); + DBExec($c, "insert into answertable (contestnumber, answernumber, runanswer, shortname, yes, updatetime) values " . + "($contest, $number, '$name', '$short', '$y', $t)", "DBNewAnswer(insert answer)"); if($cw) DBExec($c, "commit work", "DBNewAnswer(commit)"); LOGLevel("Answer $number inserted (contest=$contest,user=".$_SESSION["usertable"]["username"]."/".$_SESSION["usertable"]["usersitenumber"].")", 2); } else { $lr = DBRow($r,0); if($updatetime > $lr['updatetime']) { $ret=2; - DBExec($c, "update answertable set runanswer='$name', yes='$y', updatetime=". $updatetime . " where ". + DBExec($c, "update answertable set runanswer='$name', yes='$y', shortname='$short', updatetime=". $updatetime . " where ". "contestnumber=$contest and answernumber=$number and fake='f'", "DBNewAnswer(update answer)"); if($cw) DBExec($c, "commit work", "DBNewAnswer(commit)"); LOGLevel("Answer $number updated (contest=$contest,user=".$_SESSION["usertable"]["username"]."/".$_SESSION["usertable"]["usersitenumber"].")", 2); -- cgit v1.2.3