diff options
Diffstat (limited to 'src/fcontest.php')
| -rw-r--r-- | src/fcontest.php | 101 |
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; } |