aboutsummaryrefslogtreecommitdiff
path: root/boca-1.5.1/src/ftask.php
diff options
context:
space:
mode:
Diffstat (limited to 'boca-1.5.1/src/ftask.php')
-rw-r--r--boca-1.5.1/src/ftask.php515
1 files changed, 0 insertions, 515 deletions
diff --git a/boca-1.5.1/src/ftask.php b/boca-1.5.1/src/ftask.php
deleted file mode 100644
index 86417b2..0000000
--- a/boca-1.5.1/src/ftask.php
+++ /dev/null
@@ -1,515 +0,0 @@
-<?php
-////////////////////////////////////////////////////////////////////////////////
-//BOCA Online Contest Administrator
-// Copyright (C) 2003-2012 by BOCA Development Team (bocasystem@gmail.com)
-//
-// This program is free software: you can redistribute it and/or modify
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation, either version 3 of the License, or
-// (at your option) any later version.
-//
-// This program is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-// You should have received a copy of the GNU General Public License
-// along with this program. If not, see <http://www.gnu.org/licenses/>.
-////////////////////////////////////////////////////////////////////////////////
-// Last modified 05/aug/2012 by cassio@ime.usp.br
-function DBDropTaskTable() {
- $c = DBConnect();
- $r = DBExec($c, "drop table \"tasktable\"", "DBDropTaskTable(drop table)");
-}
-function DBCreateTaskTable() {
- $c = DBConnect();
- $conf = globalconf();
- if($conf["dbuser"]=="") $conf["dbuser"]="bocauser";
- $r = DBExec($c, "
-CREATE TABLE \"tasktable\" (
-\"contestnumber\" int4 NOT NULL, -- (id do concurso)
-\"sitenumber\" int4 NOT NULL, -- (id do site)
-\"usernumber\" int4 NOT NULL, -- (id do usuario requisitando a tarefa)
-\"tasknumber\" int4 NOT NULL, -- (id do problema)
-\"taskstaffnumber\" int4, -- (id do usuario executando a tarefa)
-\"taskstaffsite\" int4, -- (id do usuario executando a tarefa)
-\"taskdate\" int4 NOT NULL, -- (dia/hora da submissao no local de origem)
-\"taskdatediff\" int4 NOT NULL, -- (diferenca entre inicio da competicao e dia/hora da submissao em seg)
-\"taskdatediffans\" int4 NOT NULL, -- (diferenca entre inicio da competicao e dia/hora da correcao em seg)
-\"taskdesc\" varchar(200), -- (descricao da tarefa)
-\"taskfilename\" varchar(100), -- (nome do arquivo)
-\"taskdata\" oid, -- (apontador para o arquivo)
-\"tasksystem\" bool NOT NULL, -- (tarefa de sistema?)
-\"taskstatus\" varchar(20) NOT NULL, -- (status da tarefa: opentask, processing, done)
-\"colorname\" varchar(100) DEFAULT '', -- nome da cor do problema
-\"color\" varchar(6) DEFAULT '', -- cor do problema, formato html (RGB hexadecimal)
-\"updatetime\" int4 DEFAULT EXTRACT(EPOCH FROM now()) NOT NULL, -- (indica a ultima atualizacao no registro)
--- (tabela com tarefas para os staffs. Dentre elas podemos citar baloes e impressoes)
-CONSTRAINT \"task_pkey\" PRIMARY KEY (\"contestnumber\", \"sitenumber\", \"tasknumber\"),
-CONSTRAINT \"user_fk\" FOREIGN KEY (\"contestnumber\", \"sitenumber\", \"usernumber\")
- REFERENCES \"usertable\" (\"contestnumber\", \"usersitenumber\", \"usernumber\")
- ON DELETE CASCADE ON UPDATE CASCADE NOT DEFERRABLE INITIALLY IMMEDIATE
-)", "DBCreateTaskTable(create table)");
- $r = DBExec($c, "REVOKE ALL ON \"tasktable\" FROM PUBLIC", "DBCreateTaskTable(revoke public)");
- $r = DBExec($c, "GRANT ALL ON \"tasktable\" TO \"".$conf["dbuser"]."\"", "DBCreateTaskTable(grant bocauser)");
- $r = DBExec($c, "CREATE UNIQUE INDEX \"task_index\" ON \"tasktable\" USING btree ".
- "(\"contestnumber\" int4_ops, \"sitenumber\" int4_ops, \"tasknumber\" int4_ops)",
- "DBCreateTaskTable(create index)");
-}
-
-function DBChiefUpdateTask($contest, $usersite, $usernumber, $tasksite, $tasknumber, $st) {
- return DBUpdateTaskC($contest, $usersite, $usernumber, $tasksite, $tasknumber, $st, 1);
-}
-function DBUpdateTask($contest, $usersite, $usernumber, $tasksite, $tasknumber, $st) {
- return DBUpdateTaskC($contest, $usersite, $usernumber, $tasksite, $tasknumber, $st, 0);
-}
-function DBUpdateTaskC($contest, $usersite, $usernumber, $tasksite, $tasknumber, $status, $chief) {
- $b = DBSiteInfo($contest, $tasksite);
- if ($b == null) {
- exit;
- }
-
- $c = DBConnect();
- DBExec($c, "begin work", "DBUpdateTaskC(transaction)");
- $sql = "select * from tasktable as t where t.contestnumber=$contest and " .
- "t.sitenumber=$tasksite and t.tasknumber=$tasknumber";
- if ($chief != 1) {
- $sql .= " and t.taskstatus='processing' and t.taskstaffnumber=$usernumber and t.taskstaffsite=$usersite";
- $tx = "Judge";
- } else $tx = "Chief";
- $r = DBExec ($c, $sql . " for update", "DBUpdateTaskC(get task for update)");
- $n = DBnlines($r);
- if ($n != 1) {
- DBExec($c, "rollback work", "DBUpdateTaskC(rollback)");
- LogLevel("Unable to alter the task record (maybe it was already done by a chief) " .
- "(task=$tasknumber, site=$tasksite, contest=$contest).",1);
- MSGError("Unable to alter the task record (maybe it was already done by a chief)");
- return false;
- }
- $temp = DBRow($r,0);
- $b = DBSiteInfo($contest, $tasksite, $c);
- $t = $b["currenttime"];
-
- DBExec($c, "update tasktable set taskstatus='$status', taskstaffnumber=$usernumber, taskstaffsite=$usersite, " .
- "taskdatediffans=$t, updatetime=".time()." " .
- "where contestnumber=$contest and tasknumber=$tasknumber and sitenumber=$tasksite",
- "DBUpdateTaskC(update task)");
-
- DBExec($c, "commit work", "DBUpdateTaskC(commit)");
- LOGLevel("Task updated (task=$tasknumber, site=$tasksite, contest=$contest, user=$usernumber(site=$usersite), ".
- "status=$status).", 3);
- return true;
-}
-//devolve uma task que estava sendo processada. Recebe o numero da task,
-//o numero do site da task e o numero do contest.
-//tenta alterar o status para 'opentask'. Se nao conseguir retorna false
-function DBChiefTaskGiveUp($number,$site,$contest) {
- return DBTaskGiveUp($number,$site,$contest,-1,-1);
-}
-function DBTaskGiveUp($number,$site,$contest,$usernumber,$usersite) {
- $c = DBConnect();
- DBExec($c, "begin work", "DBTaskGiveUp(transaction)");
- $sql = "select * from tasktable as t where t.contestnumber=$contest and " .
- "t.sitenumber=$site and t.tasknumber=$number";
- if ($usernumber != -1 || $usersite != -1) {
- $sql .= " and t.taskstatus='processing' and t.taskstaffnumber=$usernumber and taskstaffsite=$usersite";
- $tx = "Staff";
- } else $tx = "Chief";
- $r = DBExec ($c, $sql . " for update", "DBTaskGiveUp(get task for update)");
- $n = DBnlines($r);
- if ($n != 1) {
- DBExec($c, "rollback work", "DBTaskGiveUp(rollback)");
- LogLevel("Unable to return a task (maybe the timeout or a chief returned it first). ".
- "(task=$number, site=$site, contest=$contest)",1);
- return false;
- }
-
- DBExec($c, "update tasktable set taskstatus='opentask', taskstaffnumber=NULL, taskstaffsite=NULL, ".
- "updatetime=" .time(). " ".
- "where contestnumber=$contest and tasknumber=$number and sitenumber=$site",
- "DBTaskGiveUp(update task)");
-
- DBExec($c, "commit work", "DBTaskGiveUp(commit)");
- LOGLevel("Task returned (task=$number, site=$site, contest=$contest, user=$usernumber).", 3);
- return true;
-}
-function DBTaskDelete($number,$site,$contest,$user,$usersite) {
- $c = DBConnect();
- DBExec($c, "begin work", "DBTaskDelete(transaction)");
- $sql = "select * from tasktable as t where t.contestnumber=$contest and " .
- "t.sitenumber=$site and t.tasknumber=$number";
- $r = DBExec ($c, $sql . " for update", "DBTaskDelete(get task for update)");
- $n = DBnlines($r);
- if ($n != 1) {
- DBExec($c, "rollback work", "DBTaskDelete(rollback)");
- LogLevel("Unable to delete a task. ".
- "(task=$number, site=$site, contest=$contest)",1);
- return false;
- }
-
- DBExec($c, "update tasktable set taskstatus='deleted', taskstaffnumber=$user, taskstaffsite=$usersite, ".
- "updatetime=" . time()." ".
- "where contestnumber=$contest and tasknumber=$number and sitenumber=$site",
- "DBTaskDelete(update task)");
-
- DBExec($c, "commit work", "DBTaskDelete(commit)");
- LOGLevel("Task deleted (task=$number, site=$site, contest=$contest, user=$user($usersite)).", 3);
- return true;
-}
-
-//pega uma task para processar. Recebe o numero da task, o numero do site e o numero do contest.
-//tenta alterar o status para 'processing' e se conseguir, devolve um array com dados da task.
-//Se nao conseguir, retorna false
-function DBChiefGetTaskToAnswer($number,$site,$contest) {
- return DBGetTaskToAnswerC($number,$site,$contest,1);
-}
-function DBGetTaskToAnswer($number,$site,$contest) {
- return DBGetTaskToAnswerC($number,$site,$contest,0);
-}
-function DBGetTaskToAnswerC($number,$site,$contest,$chief) {
- $c = DBConnect();
- DBExec($c, "begin work", "DBGetTaskToAnswerC(transaction)");
- $sql = "select t.contestnumber as contestnumber, t.sitenumber as sitenumber, ".
- "t.tasknumber as number ".
- "from tasktable as t ".
- "where t.contestnumber=$contest and t.sitenumber=$site and " .
- "t.tasknumber=$number";
- if ($chief != 1) {
- $sql .= " and t.taskstatus='opentask'";
- $tx = "Staff";
- } else $tx = "Chief";
- $r = DBExec ($c, $sql . " for update", "DBGetTaskToAnswerC(get task for update)");
- $n = DBnlines($r);
- if ($n != 1) {
- DBExec($c, "rollback work", "DBGetTaskToAnswerC(rollback)");
- LogLevel("Unable to get a task (maybe other staff got it first). ".
- "(task=$number, site=$site, contest=$contest)",2);
- return false;
- }
- $a = DBRow($r,0);
- if ($chief != 1) {
- DBExec($c, "update tasktable set taskstaffnumber=" .
- $_SESSION["usertable"]["usernumber"] . ", ".
- "taskstaffsite=".$_SESSION["usertable"]["usersitenumber"].
- ", taskstatus='processing', updatetime=".time()." " .
- "where contestnumber=$contest and tasknumber=$number and ".
- "sitenumber=$site",
- "DBGetTaskToAnswerC(update task)");
- }
-
- DBExec($c, "commit work", "DBGetTaskToAnswerC(commit)");
- LOGLevel("User got a task (task=$number, site=$site, contest=$contest, user=".
- $_SESSION["usertable"]["usernumber"]."(".$_SESSION["usertable"]["usersitenumber"].")).", 3);
- return $a;
-}
-function DBAllTasks($contest) {
- return DBOpenTasksSNS($contest,"x",-1);
-}
-function DBAllTasksInSites($contest,$site,$order) {
- return DBOpenTasksSNS($contest,$site,-1,$order);
-}
-function DBOpenTasks($contest) {
- return DBOpenTasksSNS($contest,"x",1);
-}
-function DBOpenTasksInSites($contest,$site) {
- return DBOpenTasksSNS($contest,$site,1);
-}
-function DBOpenTasksSNS($contest,$site,$st,$order='task') {
- $c = DBConnect();
- $sql = "select distinct t.tasknumber as number, t.taskdatediff as timestamp, t.usernumber as user, ".
- "u.username as username, t.color as color, t.colorname as colorname, " .
- "t.taskstatus as status, t.sitenumber as site, t.taskstaffnumber as staff, " .
- "t.taskstaffsite as staffsite, t.taskdesc as description, tasksystem as system, " .
- "t.taskfilename as filename, t.taskdata as oid, uu.username as staffname " .
- "from tasktable as t left join usertable as uu on ".
- "uu.usernumber=t.taskstaffnumber and uu.usersitenumber=t.taskstaffsite and ".
- "uu.contestnumber=t.contestnumber, ".
- "usertable as u " .
- "where t.contestnumber=$contest and u.contestnumber=t.contestnumber and ".
- "u.usernumber=t.usernumber and u.usersitenumber=t.sitenumber";
- if ($site != "x") {
- $str = explode(",", $site);
- $sql .= " and (t.sitenumber=-1";
- for ($i=0;$i<count($str);$i++) {
- if (is_numeric($str[$i])) {
- $sql .= " or (t.sitenumber=".$str[$i];
- $b = DBSiteInfo($contest, $str[$i]);
- if ($b == null) {
- exit;
- }
- $t = $b["currenttime"];
- $sql .= " and (t.taskdatediffans<=$t or (t.taskstatus != 'done' and t.taskdatediff<=$t))) ";
- }
- }
- $sql .= ")";
- }
-
- if ($st == 1)
- $sql .= " and (t.taskstatus ~ 'opentask' or t.taskstatus ~ 'processing') order by ";
- else $sql .= " order by ";
-
- if($order == "description")
- $sql .= "t.taskdesc,";
- else if ($order == "status")
- $sql .= "t.taskstatus,";
- else if ($order == "user")
- $sql .= "u.username,t.sitenumber,";
- else if ($order == "staff")
- $sql .= "t.taskstaffnumber,t.taskstaffsite,";
-
- if ($st == 1)
- $sql .= "t.tasknumber";
- else
- $sql .= "t.taskdatediff desc";
-
- $r = DBExec($c, $sql, "DBOpenTasksSNS(get task)");
-
- $n = DBnlines($r);
- $a = array();
- for ($i=0;$i<$n;$i++)
- $a[$i] = DBRow($r,$i);
- return $a;
-}
-function DBNewTask_old ($contest, $site, $user, $desc, $filename, $filepath, $sys, $color='', $colorname='', $c=null) {
- $param = array('contest'=>$contest,
- 'site'=>$site,
- 'user'=>$user,
- 'desc'=>$desc,
- 'filename'=>$filename,
- 'filepath'=>$filepath,
- 'color'=>$color,
- 'colorname'=>$colorname,
- 'sys'=>$sys);
- return DBNewTask($param,$c);
-}
-
-function DBNewTask($param, $c=null) {
- if(isset($param['contestnumber']) && !isset($param['contest'])) $param['contest']=$param['contestnumber'];
- if(isset($param['sitenumber']) && !isset($param['site'])) $param['site']=$param['sitenumber'];
- if(isset($param['usernumber']) && !isset($param['user'])) $param['user']=$param['usernumber'];
- if(isset($param['number']) && !isset($param['tasknumber'])) $param['tasknumber']=$param['number'];
-
- $ac=array('contest','site','user','desc');
- $ac1=array('color','colorname','updatetime','filename','filepath','sys','tasknumber','status',
- 'taskdate','taskdatediff','taskdatediffans','taskstaffnumber','taskstaffsite');
- $type['contest']=1;
- $type['updatetime']=1;
- $type['site']=1;
- $type['user']=1;
- $type['tasknumber']=1;
- $type['taskdate']=1;
- $type['taskdatediff']=1;
- $type['taskdatediffans']=1;
- $type['taskstaffnumber']=1;
- $type['taskstaffsite']=1;
- foreach($ac as $key) {
- if(!isset($param[$key]) || $param[$key]=="") {
- MSGError("DBNewTask param error: $key not found");
- return false;
- }
- if(isset($type[$key]) && !is_numeric($param[$key])) {
- MSGError("DBNewTask param error: $key is not numeric");
- return false;
- }
- $$key = sanitizeText($param[$key]);
- }
- $taskstaffnumber=-1;
- $taskstaffsite=-1;
- $t = time();
- $taskdate=$t;
- $sys='f';
- $filename='';
- $filepath='';
- $color='';
- $colorname='';
- $tasknumber=-1;
- $taskdatediffans=999999999;
- $updatetime=-1;
- $status='opentask';
- $taskdatediff=-1;
- foreach($ac1 as $key) {
- if(isset($param[$key])) {
- $$key = sanitizeText($param[$key]);
- if(isset($type[$key]) && !is_numeric($param[$key])) {
- MSGError("DBNewTask param error: $key is not numeric");
- return false;
- }
- }
- }
- if($updatetime <= 0)
- $updatetime=$t;
- if($sys != 't') $sys='f';
-
- $cw = false;
- if($c == null) {
- $cw = true;
- $c = DBConnect();
- DBExec($c, "begin work", "DBNewTask(transaction)");
- }
- $insert=true;
- if($tasknumber < 0) {
- $sql = "select sitenexttask as nexttask, sitemaxtask as maxtask from " .
- "sitetable where sitenumber=$site and contestnumber=$contest for update";
- $r = DBExec($c, $sql, "DBNewTask(get site for update)");
- if (DBnlines($r) != 1) {
- DBExec($c, "rollback work", "DBNewTask(rollback-site)");
- LOGError("Unable to find a unique site/contest in the database. SQL=(" . $sql . ")");
- MSGError("Unable to find a unique site/contest in the database.");
- exit;
- }
- $a = DBRow($r,0);
- $b = DBSiteInfo($contest, $site, $c);
- $dif = $b["currenttime"];
- if($taskdatediff < 0)
- $taskdatediff = $dif;
- if($sys!='t' && DBCountOpenTasks($contest, $site, $user) > $a["maxtask"]) {
- DBExec($c, "rollback work", "DBNewTask(rollback-maxtask)");
- LOGError("Too many open tasks for user=$user, site=$site, contest=$contest");
- MSGError("Too many open tasks! Task not included.");
- exit;
- }
- if ($sys != 't' && $dif < 0) {
- DBExec($c, "rollback work", "DBNewTask(rollback-started)");
- LOGError("Tried to submit a task but the contest is not started. SQL=(" . $sql . ")");
- MSGError("The contest is not started yet!");
- exit;
- }
- if ($sys != 't' && !$b["siterunning"]) {
- DBExec($c, "rollback work", "DBNewTask(rollback-over)");
- LOGError("Tried to submit a task but the contest is over. SQL=(" . $sql . ")");
- MSGError("The contest is over!");
- exit;
- }
- $tasknumber = $a["nexttask"] + 1;
- } else {
- $sql = "select * from tasktable as t where t.contestnumber=$contest and " .
- "t.sitenumber=$site and t.tasknumber=$tasknumber";
- $r = DBExec ($c, $sql . " for update", "DBNewTask(get task for update)");
- $n = DBnlines($r);
- if ($n > 0) {
- $insert=false;
- $lr = DBRow($r,0);
- $t = $lr['updatetime'];
- }
- }
- DBExec($c, "update sitetable set sitenexttask=$tasknumber, updatetime=".$t.
- " where sitenumber=$site and contestnumber=$contest and sitenexttask<$tasknumber", "DBNewTask(update site)");
- $ret=1;
- if($insert) {
- if($filename!="" && $filepath!="") {
- if(substr($filepath,0,7)!="base64:") {
- if (($oid = DB_lo_import($c, $filepath)) === false) {
- DBExec($c, "rollback work", "DBNewTask(rollback-import)");
- LOGError("DBNewTask: Unable to create a large object for file $filepath.");
- MSGError("problem importing file to database. Contact an admin now!");
- exit;
- }
- } else {
- $filepath = base64_decode(substr($filepath,7));
- if (($oid = DB_lo_import_text($c, $filepath)) == null) {
- DBExec($c, "rollback work", "DBNewTask(rollback-import)");
- LOGError("DBNewTask: Unable to create a large object for file.");
- MSGError("problem importing file to database. Contact an admin now!");
- exit;
- }
- }
- } else $oid="NULL";
- DBExec($c, "INSERT INTO tasktable (contestnumber, sitenumber, tasknumber, usernumber, taskdate, " .
- "taskdatediff, taskdatediffans, taskfilename, taskdata, taskstatus, taskdesc, tasksystem, ".
- "color, colorname, updatetime) " .
- "VALUES ($contest, $site, $tasknumber, $user, $taskdate, $taskdatediff, $taskdatediffans, '$filename', $oid, '$status', " .
- "'$desc', '$sys', '$color', '$colorname', $updatetime)",
- "DBNewTask(insert task)");
- if($sys=="t") $u="System";
- else $u = "User $user";
-
- if($cw) {
- DBExec($c, "commit work", "DBNewTask(commit-insert)");
- LOGLevel("$u submitted a task (#$tasknumber) on site #$site " .
- "(filename=$filename, contest=$contest).",2);
- }
- $ret=2;
- } else {
- if($updatetime > $t) {
- $ret=2;
- $sql = "update tasktable set usernumber=$user, taskdesc='$desc', " .
- "color='$color',colorname='$colorname',taskstatus='$status',";
- if($taskstaffnumber>0)
- $sql .= "taskstaffnumber=$taskstaffnumber, ";
- if($taskstaffsite>0)
- $sql .= "taskstaffsite=$taskstaffsite, ";
- $sql .= "taskdatediffans=$taskdatediffans, updatetime=$updatetime where " .
- "contestnumber=$contest and sitenumber=$site and tasknumber=$tasknumber";
- DBExec($c,$sql,"DBNewTask(update task)");
- }
- if($cw) DBExec($c, "commit work", "DBNewTask(commit-update)");
- }
- return $ret;
-}
-//recebe o numero do contest, o numero do site e o numero do usuario
-//devolve um array, onde cada linha tem os atributos
-// number (numero da task)
-// timestamp (hora da criacao da task)
-// filename (nome do arquivo relacionado)
-// status (situacao da task)
-// desc (descricao da task)
-function DBUserTasks($contest,$site,$user) {
- $b = DBSiteInfo($contest, $site);
- if ($b == null) {
- exit;
- }
- $t = $b["currenttime"];
-
- $c = DBConnect();
- $r = DBExec($c, "select distinct t.sitenumber as site, t.tasknumber as number, ".
- "t.taskdatediff as timestamp, t.taskstatus as status, t.taskfilename as filename, " .
- "t.taskdesc as description, t.updatetime " .
- "from tasktable as t " .
- "where t.contestnumber=$contest and t.sitenumber=$site and ".
- "(t.taskdatediffans<=$t or (t.taskstatus != 'done' and t.taskdatediff<=$t)) and " .
- "t.usernumber=$user and t.taskstatus != 'deleted' and t.tasksystem='f' " .
- "order by t.updatetime",
- "DBUserTasks(get tasks)");
- $n = DBnlines($r);
-
- $a = array();
- for ($i=0;$i<$n;$i++) {
- $a[$i] = DBRow($r,$i);
- }
- return $a;
-}
-function DBCountOpenTasks($contest,$site,$user) {
- $c = DBConnect();
- $r = DBExec($c, "select t.contestnumber, t.sitenumber, t.tasknumber ".
- "from tasktable as t " .
- "where t.contestnumber=$contest and t.sitenumber=$site and ".
- "t.usernumber=$user and t.taskstatus='opentask' and t.tasksystem='f'",
- "DBCountOpenTasks(get tasks)");
- $n = DBnlines($r);
- return $n;
-}
-//recebe o numero do contest, o numero do site do juiz e o numero do juiz
-//devolve um array, onde cada linha tem os atributos
-// number (numero da task)
-// timestamp (hora da criacao da task)
-// problem (nome do problema)
-// status (situacao da task)
-// answer (texto com a resposta)
-function DBJudgedTasks($contest,$site,$user) {
- $c = DBConnect();
- $r = DBExec($c, "select distinct t.sitenumber as site, t.tasknumber as number, ".
- "t.taskdatediff as timestamp, t.taskstatus as status, t.taskfilename as filename, " .
- "t.taskdesc as description, t.updatetime " .
- "from tasktable as t " .
- "where t.contestnumber=$contest and t.taskstaffsite=$site and ".
- "t.taskstaffnumber=$user order by t.updatetime",
- "DBJudgedTasks(get tasks)");
- $n = DBnlines($r);
-
- $a = array();
- for ($i=0;$i<$n;$i++) {
- $a[$i] = DBRow($r,$i);
- }
- return $a;
-}
-// eof
-?>