aboutsummaryrefslogtreecommitdiff
path: root/src/fcontest.php
diff options
context:
space:
mode:
Diffstat (limited to 'src/fcontest.php')
-rw-r--r--src/fcontest.php101
1 files changed, 61 insertions, 40 deletions
diff --git a/src/fcontest.php b/src/fcontest.php
index f8f2cff..e61631b 100644
--- a/src/fcontest.php
+++ b/src/fcontest.php
@@ -125,6 +125,10 @@ CREATE TABLE \"sitetimetable\" (
$r = DBexec($c, "CREATE INDEX \"sitetimesite_index\" ON \"sitetimetable\" USING btree ".
"(\"contestnumber\" int4_ops, \"sitenumber\" int4_ops)", "DBCreateSiteTimeTable(create site_index)");
}
+// begin; update answertable set updatetime=EXTRACT(EPOCH FROM now());
+// begin; update langtable set updatetime=EXTRACT(EPOCH FROM now()); select * from langtable;
+// begin; update problemtable set updatetime=EXTRACT(EPOCH FROM now()); select * from problemtable;
+
function DBDropUserTable() {
$c = DBConnect();
$r = DBExec($c, "drop table \"usertable\"", "DBDropUserTable(drop table)");
@@ -298,8 +302,8 @@ function cleanuserdesc($a) {
$inst = explode('[',$inst[1]);
if(isset($inst[1])) {
$inst2 = explode(',',trim($inst[1]));
- $a['userflag'] = $inst2[0];
- if(isset($inst2[1])) $a['usersitename']=trim($inst2[1]);
+ $a['userflag'] = strtolower($inst2[0]);
+ if(isset($inst2[1])) $a['usersitename']=strtoupper(trim($inst2[1]));
}
} else {
$a['userdesc']=trim($inst[1]);
@@ -315,14 +319,26 @@ function DBDeleteUser($contest, $site, $user) {
DBExec($c, "begin work");
DBExec($c, "lock table usertable");
$sql = "select * from usertable where usernumber=$user and usersitenumber=$site and " .
- "contestnumber=$contest";
- $a = DBGetRow ($sql, 0);
+ "contestnumber=$contest for update";
+ $a = DBGetRow ($sql, 0, $c);
if ($a != null) {
- $sql = "delete from usertable where usernumber=$user and usersitenumber=$site and " .
+ $sql = "update usertable set userenabled='f', userlastlogin=NULL, usersessionextra='', usersession='', updatetime=".time(). " where usernumber=$user and usersitenumber=$site and " .
"contestnumber=$contest";
+ // $sql = "delete from usertable where usernumber=$user and usersitenumber=$site and " .
+ // "contestnumber=$contest";
DBExec ($c, $sql);
+ $r = DBExec($c,"select runnumber as number, runsitenumber as site from runtable where contestnumber=$contest and usernumber=$user and runsitenumber=$site for update");
+ $n = DBnlines($r);
+ for ($i=0;$i<$n;$i++) {
+ $a = DBRow($r,$i);
+ if(DBRunDelete($a["number"],$a["site"],$contest,$_SESSION["usertable"]["usernumber"],$_SESSION["usertable"]["usersitenumber"],$c) === false) {
+ DBExec($c, "rollback work");
+ LOGLevel("User $user (site=$site,contest=$contest) could not be removed (run delete error).", 1);
+ return false;
+ }
+ }
DBExec($c, "commit work");
- LOGLevel("User $user (site=$site,contest=$contest) removed.", 1);
+ LOGLevel("User $user (site=$site,contest=$contest) marked as inactive.", 1);
return true;
} else {
DBExec($c, "rollback work");
@@ -490,11 +506,11 @@ function DBSiteDeleteAllClars ($contest, $site, $user, $usersite, $c=null) {
DBExec($c, "lock table sitetable");
DBExec($c, "lock table clartable");
DBExec($c, "select * from sitetable where contestnumber=$contest and sitenumber=$site for update");
- $r = DBExec($c, "select * from clartable as c where c.contestnumber=$contest and " .
- "c.clarsitenumber=$site for update");
- DBExec($c, "delete from clartable where contestnumber=$contest and clarsitenumber=$site");
+ $r = DBExec($c, "select * from clartable as c where c.contestnumber=$contest " .
+ " and (c.clarsitenumber=$site or $site < 0) for update");
+ DBExec($c, "delete from clartable where contestnumber=$contest and (clarsitenumber=$site or $site < 0)");
DBExec($c, "update sitetable set sitenextclar=0, updatetime=".time()." " .
- "where contestnumber=$contest and sitenumber=$site");
+ "where contestnumber=$contest and (sitenumber=$site or $site < 0)");
if($cw) {
DBExec($c, "commit work");
LOGLevel("All Clarifications deleted (site=$site, contest=$contest, user=$user(site=$usersite)).", 3);
@@ -512,10 +528,10 @@ function DBSiteDeleteAllTasks ($contest, $site, $user, $usersite,$c=null) {
DBExec($c, "lock table tasktable");
DBExec($c, "select * from sitetable where contestnumber=$contest and sitenumber=$site for update");
$r = DBExec($c, "select * from tasktable as t where t.contestnumber=$contest and " .
- "t.sitenumber=$site for update");
- DBExec($c, "delete from tasktable where contestnumber=$contest and sitenumber=$site");
+ "(t.sitenumber=$site or $site < 0) for update");
+ DBExec($c, "delete from tasktable where contestnumber=$contest and (sitenumber=$site or $site < 0)");
DBExec($c, "update sitetable set sitenexttask=0, updatetime=".time()." " .
- "where contestnumber=$contest and sitenumber=$site");
+ "where contestnumber=$contest and (sitenumber=$site or $site < 0)");
if($cw) {
DBExec($c, "commit work");
LOGLevel("All Tasks deleted (site=$site, contest=$contest, user=$user(site=$usersite)).", 3);
@@ -530,13 +546,13 @@ function DBSiteDeleteAllBkps ($contest, $site, $user, $usersite,$c=null) {
DBExec($c, "begin work");
}
DBExec($c, "lock table bkptable");
- $r = DBExec($c, "select bkpdata from bkptable where contestnumber=$contest and sitenumber=$site and bkpstatus='active'");
+ $r = DBExec($c, "select bkpdata from bkptable where contestnumber=$contest and (sitenumber=$site or $site < 0) and bkpstatus='active'");
$n = DBnlines($r);
for ($i=0;$i<$n;$i++) {
$a = DBRow($r,$i);
DB_lo_unlink($c,$a["bkpdata"]);
}
- DBExec($c, "delete from bkptable where contestnumber=$contest and sitenumber=$site");
+ DBExec($c, "delete from bkptable where contestnumber=$contest and (sitenumber=$site or $site < 0)");
if($cw) {
DBExec($c, "commit work");
LOGLevel("All Bkps deleted (site=$site, contest=$contest, user=$user(site=$usersite)).", 3);
@@ -552,13 +568,13 @@ function DBSiteDeleteAllRuns ($contest, $site, $user, $usersite,$c=null) {
}
DBExec($c, "lock table sitetable");
DBExec($c, "lock table runtable");
- DBExec($c, "select * from sitetable where contestnumber=$contest and sitenumber=$site for update");
+ DBExec($c, "select * from sitetable where contestnumber=$contest and (sitenumber=$site or $site < 0) for update");
$sql = "select * from runtable as r where r.contestnumber=$contest and " .
"r.runsitenumber=$site";
$r = DBExec ($c, $sql . " for update");
- DBExec($c, "delete from runtable where contestnumber=$contest and runsitenumber=$site");
+ DBExec($c, "delete from runtable where contestnumber=$contest and (runsitenumber=$site or $site < 0)");
DBExec($c, "update sitetable set sitenextrun=0, updatetime=".time()." " .
- "where contestnumber=$contest and sitenumber=$site");
+ "where contestnumber=$contest and (sitenumber=$site or $site < 0)");
if($cw) {
DBExec($c, "commit work");
LOGLevel("All Runs deleted (site=$site, contest=$contest, user=$user(site=$usersite)).", 3);
@@ -685,12 +701,12 @@ function DBUpdateSite ($param,$c=null) {
$ret=1;
if($updatetime > $a['updatetime']) {
$ret=2;
- if($sitenextrun==0)
- DBSiteDeleteAllRuns($contestnumber,$sitenumber,$_SESSION["usertable"]["usernumber"],$_SESSION["usertable"]["usersitenumber"],$c);
- if($sitenextclar==0)
- DBSiteDeleteAllClars($contestnumber,$sitenumber,$_SESSION["usertable"]["usernumber"],$_SESSION["usertable"]["usersitenumber"],$c);
- if($sitenexttask==0)
- DBSiteDeleteAllTasks($contestnumber,$sitenumber,$_SESSION["usertable"]["usernumber"],$_SESSION["usertable"]["usersitenumber"],$c);
+ // if($sitenextrun==0)
+ // DBSiteDeleteAllRuns($contestnumber,$sitenumber,$_SESSION["usertable"]["usernumber"],$_SESSION["usertable"]["usersitenumber"],$c);
+ //if($sitenextclar==0)
+ // DBSiteDeleteAllClars($contestnumber,$sitenumber,$_SESSION["usertable"]["usernumber"],$_SESSION["usertable"]["usersitenumber"],$c);
+ //if($sitenexttask==0)
+ // DBSiteDeleteAllTasks($contestnumber,$sitenumber,$_SESSION["usertable"]["usernumber"],$_SESSION["usertable"]["usersitenumber"],$c);
$sql = "update sitetable set sitename='$sitename', ";
if ($sitepermitlogins!="") $sql .= "sitepermitlogins='$sitepermitlogins', ";
@@ -1179,11 +1195,12 @@ function DBUserUpdate($contest, $site, $user, $username, $userfull, $userdesc, $
else $temp = $a["userpassword"];
$lentmp = strlen($temp);
$temp = bighexsub($passn, $temp);
- if($lentmp > strlen($temp))
- $newpass = '0' . $temp;
- else
- $newpass = substr($temp, strlen($temp)-$lentmp);
-
+ if($lentmp > strlen($temp)) {
+ $newpass = '0' . $temp;
+ while(strlen($newpass) < $lentmp) $newpass = '0' . $newpass;
+ } else {
+ $newpass = substr($temp, strlen($temp)-$lentmp);
+ }
$c = DBConnect();
DBExec($c, "begin work");
DBExec($c, "lock table usertable");
@@ -1291,11 +1308,12 @@ function DBNewUser($param, $c=null) {
$r = DBExec($c, "select * from sitetable where sitenumber=$site and contestnumber=$contest", "DBNewUser(get site)");
$n = DBnlines ($r);
if($n == 0) {
- DBExec ($c, "rollback work","DBNewUser(no-site)");
- MSGError("DBNewUser param error: site $site does not exist");
- return false;
+ if($cw)
+ DBExec ($c, "rollback work","DBNewUser(no-site)");
+ MSGError("DBNewUser param error: site $site does not exist");
+ return false;
}
- if($pass != myhash("") && $type != "admin" && $changepass != "t") $pass='!'.$pass;
+ if($pass != myhash("") && $type != "admin" && $changepass != "t" && substr($pass,0,1) != "!") $pass='!'.$pass;
$r = DBExec($c, "select * from usertable where username='$username' and usernumber!=$user and ".
"usersitenumber=$site and contestnumber=$contest", "DBNewUser(get user)");
$n = DBnlines ($r);
@@ -1307,11 +1325,12 @@ function DBNewUser($param, $c=null) {
if ($a == null) {
$ret=2;
$sql = "select * from sitetable where sitenumber=$site and contestnumber=$contest";
- $aa = DBGetRow ($sql, 0);
+ $aa = DBGetRow ($sql, 0, $c);
if($aa==null) {
+ if($cw)
DBExec ($c, "rollback work");
- MSGError("Site $site does not exist");
- return false;
+ MSGError("Site $site does not exist");
+ return false;
}
$sql = "insert into usertable (contestnumber, usersitenumber, usernumber, username, usericpcid, userfullname, " .
"userdesc, usertype, userenabled, usermultilogin, userpassword, userpermitip) values " .
@@ -1343,11 +1362,13 @@ function DBNewUser($param, $c=null) {
}
}
} else {
- DBExec ($c, "rollback work");
- LOGLevel ("Update problem for user $user (site=$site,contest=$contest) (maybe username already in use).",1);
- MSGError ("Update problem for user $user, site $site (maybe username already in use).");
- return false;
+ if($cw)
+ DBExec ($c, "rollback work");
+ LOGLevel ("Update problem for user $user (site=$site,contest=$contest) (maybe username already in use).",1);
+ MSGError ("Update problem for user $user, site $site (maybe username already in use).");
+ return false;
}
+ if($cw) DBExec($c, "commit work");
return $ret;
}