function DBUpdateContest($param, $c = null) { if (isset($param['contestnumber']) && !isset($param['number'])) { $param['number'] = $param['contestnumber']; } $ac = array('number'); $ac1 = array('updatetime', 'atualizasites', 'scorelevel', 'mainsite', 'localsite', 'mainsiteurl', 'keys', 'unlockkey', 'name', 'active', 'lastmileanswer', 'lastmilescore', 'penalty', 'startdate', 'duration', 'maxfilesize'); $type['number'] = 1; $type['scorelevel'] = 1; $type['startdate'] = 1; $type['updatetime'] = 1; $type['duration'] = 1; $type['penalty'] = 1; $type['maxfilesize'] = 1; $type['active'] = 1; $type['lastmilescore'] = 1; $type['lastmileanswer'] = 1; $type['mainsite'] = 1; $type['localsite'] = 1; foreach ($ac as $key) { if (!isset($param[$key])) { MSGError("DBUpdateContest param error: {$key} is not set"); return false; } ${$key} = sanitizeText($param[$key]); if (isset($type[$key]) && !is_numeric($param[$key])) { MSGError("DBUpdateContest param error: {$key} is not numeric"); return false; } } $name = ''; $atualizasites = false; $mainsiteurl = ''; $keys = ''; $unlockkey = ''; $mainsite = -1; $duration = -1; $lastmilescore = -1; $lastmileanswer = -1; $penalty = -1; $maxfilesize = -1; $active = 0; $startdate = -1; $localsite = -1; $updatetime = -1; foreach ($ac1 as $key) { if (isset($param[$key])) { ${$key} = sanitizeText($param[$key]); if (isset($type[$key]) && !is_numeric($param[$key])) { MSGError("DBUpdateContest param error: {$key} is not numeric"); return false; } } } $t = time(); if ($updatetime <= 0) { $updatetime = $t; } $cw = false; if ($c == null) { $cw = true; $c = DBConnect(); DBExec($c, "begin work", "DBUpdateContest(begin)"); } $a = DBGetRow("select * from contesttable where contestnumber={$number} for update", 0, $c, "DBUpdateContest(get for update)"); if ($a == null) { MSGError("Error updating contest {$number} -- not found"); LOGError("DBUpdateContest contest {$number} not found"); return false; } $ret = 1; if ($active == 1) { $ret = 2; DBExec($c, "update contesttable set contestactive='f'", "DBUpdateContest(deactivate)"); DBExec($c, "update contesttable set contestactive='t' where contestnumber={$number}", "DBUpdateContest(active)"); LOGLevel("User " . $_SESSION["usertable"]["username"] . "/" . $_SESSION["usertable"]["usersitenumber"] . " activated contest {$number}.", 2); } $chd = false; if ($updatetime > $a['updatetime']) { $ret = 2; $sql = "update contesttable set updatetime=" . $updatetime; if ($name != '') { $sql .= ", contestname='{$name}'"; } if ($maxfilesize > 0) { $sql .= ", contestmaxfilesize={$maxfilesize}"; } if ($penalty > 0) { $sql .= ", contestpenalty={$penalty}"; } if ($lastmileanswer > 0) { $sql .= ", contestlastmileanswer={$lastmileanswer}"; } if ($lastmilescore > 0) { $sql .= ", contestlastmilescore={$lastmilescore}"; } if ($startdate > 0) { $sql .= ", conteststartdate={$startdate}"; } if ($duration > 0) { $sql .= ", contestduration={$duration}"; } if ($mainsite > 0) { $sql .= ", contestmainsite={$mainsite}"; } if ($mainsiteurl != '') { $sql .= ", contestmainsiteurl='{$mainsiteurl}'"; } if ($unlockkey != '') { $sql .= ", contestunlockkey='{$unlockkey}'"; } if ($keys != '') { $sql .= ", contestkeys='{$keys}'"; } if ($localsite > 0) { $sql .= ", contestlocalsite={$localsite}"; } $sql .= " where contestnumber={$number}"; DBExec($c, $sql, "DBUpdateContest(update contest)"); if ($localsite > 0) { $param['contestnumber'] = $number; $param['sitename'] = 'Local site'; if ($duration > 0) { $param['siteduration'] = $duration; } if (isset($param['scorelevel'])) { $param['sitescorelevel'] = $scorelevel; } if ($lastmileanswer > 0) { $param['sitelastmileanswer'] = $lastmileanswer; } if ($lastmilescore > 0) { $param['sitelastmilescore'] = $lastmilescore; } $param['number'] = $localsite; DBNewSite($number, $c, $param); } if ($mainsite > 0) { $param['contestnumber'] = $number; $param['sitename'] = 'Main site'; if ($duration > 0) { $param['siteduration'] = $duration; } if (isset($param['scorelevel'])) { $param['sitescorelevel'] = $scorelevel; } if ($lastmileanswer > 0) { $param['sitelastmileanswer'] = $lastmileanswer; } if ($lastmilescore > 0) { $param['sitelastmilescore'] = $lastmilescore; } $param['number'] = $mainsite; DBNewSite($number, $c, $param); } if ($atualizasites) { $s = DBAllSiteInfo($number, $c); for ($i = 0; $i < count($s); $i++) { $param = $s[$i]; $param['contestnumber'] = $number; if ($duration > 0) { $param['siteduration'] = $duration; } if (isset($param['scorelevel'])) { $param['sitescorelevel'] = $scorelevel; } if ($lastmileanswer > 0) { $param['sitelastmileanswer'] = $lastmileanswer; } if ($lastmilescore > 0) { $param['sitelastmilescore'] = $lastmilescore; } unset($param['updatetime']); DBUpdateSite($param, $c); if ($startdate > 0) { $p = array(); $p['contest'] = $number; $p['site'] = $s[$i]["sitenumber"]; $p['start'] = $startdate; DBRenewSiteTime($p, $c); } } } $chd = true; } if ($cw) { DBExec($c, "commit work", "DBUpdateContest(commit)"); } if ($chd) { LOGLevel("User " . $_SESSION["usertable"]["username"] . "/" . $_SESSION["usertable"]["usersitenumber"] . " changed the contest {$number} settings.", 2); } return $ret; }
function importFromXML($ar, $acr, $contest = 0, $localsite = 0) { $data = implode("", explode("\n", $ar)); $parser = xml_parser_create(); xml_parser_set_option($parser, XML_OPTION_CASE_FOLDING, 1); xml_parser_set_option($parser, XML_OPTION_SKIP_WHITE, 1); xml_parse_into_struct($parser, $data, $values, $tags); xml_parser_free($parser); // print_r($tags); // print_r($values); $orderkeys = array('CONTESTREC', 'SITETIME', 'SITEREC', 'USERREC', 'ANSWERREC', 'LANGUAGEREC', 'PROBLEMREC', 'CLARREC', 'RUNREC', 'TASKREC'); $norderkeys = 10; $nc = 0; unset($sitetime); unset($nsitetime); $conn = DBConnect(); if ($conn == null) { return false; } // DBExec($conn,"begin work","importFromXML(begin)"); // DBExec($conn,"lock","importFromXML(lock)"); if ($contest != 0) { $r = DBExec($conn, "select * from contesttable where contestnumber={$contest}"); if (DBnLines($r) == 0) { echo "Unable to find the contest {$contest} in the database.\n"; DBExec($conn, "rollback work"); return false; } $ct = DBRow($r, 0); if ($localsite == 0) { $localsite = $ct["contestlocalsite"]; } } else { if ($localsite == 0) { $localsite = 1; } } // $mainsite = $ct["contestmainsite"]; DBClose($conn); $conn = null; for ($keyindex = 0; $keyindex < $norderkeys; $keyindex++) { foreach ($tags as $key => $val) { if ($values[$val[0]]['type'] != 'open') { continue; } if ($key == "XML") { continue; } if ($key != $orderkeys[$keyindex]) { continue; } if (isset($acr[$key])) { $ac = $acr[$key]; } else { continue; } foreach ($val as $k => $v) { if ($values[$v]['type'] != 'open') { continue; } if (count($val) > $k + 1) { $param = array(); if (isset($ac['site'])) { for ($i = $v; $i < $val[$k + 1]; $i++) { $p = strtolower($values[$i]["tag"]); if ($p == 'site') { if ($values[$i]["type"] == "complete" && isset($values[$i]["value"])) { $tmp = sanitizeText(trim(implode('', explode('\\n', $values[$i]["value"])))); if (is_array($ac['site']) && in_array($tmp, $ac['site'])) { $param['site'] = $tmp; } else { if ($ac['site'] == -1 || $ac['site'] == -2 && $tmp == $localsite || $ac['site'] == -3 && $tmp != $localsite || $ac['site'] > 0 && $ac['site'] == $tmp) { $param['site'] = $tmp; } } } } } } for ($i = $v; $i < $val[$k + 1]; $i++) { $p = strtolower($values[$i]["tag"]); if (isset($ac[$p]) && $p != 'site') { if ($values[$i]["type"] == "complete" && isset($values[$i]["value"])) { if (is_string($ac[$p])) { $param[$p] = $ac[$p]; } else { $tmp = sanitizeText(trim(implode('', explode('\\n', $values[$i]["value"])))); if (is_array($ac[$p]) && in_array($tmp, $ac[$p])) { $param[$p] = $tmp; } else { if ($ac[$p] == -1 || $ac[$p] == -2 && $tmp == $localsite || $ac[$p] == -3 && $tmp != $localsite || $ac[$p] == 0 && isset($param['site']) || $ac[$p] > 0 && $ac[$p] == $tmp) { $param[$p] = $tmp; } } } } } } // echo "\nKEY KEY KEY\n"; // print_r($key); // echo "\nVAL VAL VAL\n"; // print_r($val); // echo "\n"; // print_r($param); $param['contestnumber'] = $contest; if ($key == "CONTESTREC") { $param['number'] = $contest; if ($contest == 0) { $nc = 1; $contest = DBNewContest($param, $conn); if ($contest > 0) { echo "<br><u>Contest {$contest} created</u> (not active by default)<br>"; } else { echo "<br>Error creating contest<br>"; if ($conn != null) { DBExec($conn, "rollback work"); } return false; } } $param['number'] = $contest; $param['contestnumber'] = $contest; if ($ret = DBUpdateContest($param, $conn)) { if ($ret == 2) { echo "<br>Contest {$contest} updated<br>"; } } else { if ($conn != null) { DBExec($conn, "rollback work"); } return false; } } if (!isset($param['number']) || count($param) < 2) { continue; } if ($key == "SITEREC") { if (!DBNewSite($contest, $conn, $param)) { if ($conn != null) { DBExec($conn, "rollback work"); } return false; } if ($ret = DBUpdateSite($param, $conn)) { if ($ret == 2) { echo "Site " . $param["number"] . " updated<br>"; } } else { if ($conn != null) { DBExec($conn, "rollback work"); } return false; } if (isset($nsitetime[$param["number"]])) { if ($qtd = DBRenewSiteTime($sitetime[$param["number"]], $conn)) { if ($qtd == 2) { echo "Time for site " . $param["number"] . " updated<br>"; } } else { if ($conn != null) { DBExec($conn, "rollback work"); } return false; } } } if ($key == "SITETIME") { if (isset($param['site']) && is_numeric($param['site'])) { $s = $param['site']; if (!isset($nsitetime[$s])) { $nsitetime[$s] = 0; } $sitetime[$s][$nsitetime[$s]] = $param; $nsitetime[$s]++; } } if ($key == "USERREC") { if ($ret = DBNewUser($param, $conn)) { if ($ret == 2) { echo "User " . $param["number"] . "/" . $param['site'] . " updated<br>"; } } else { if ($conn != null) { DBExec($conn, "rollback work"); } return false; } } if ($key == "ANSWERREC") { if ($ret = DBNewAnswer($contest, $param, $conn)) { if ($ret == 2) { echo "Answer " . $param["number"] . " updated<br>"; } } else { if ($conn != null) { DBExec($conn, "rollback work"); } return false; } } if ($key == "LANGUAGEREC") { if ($ret = DBNewLanguage($contest, $param, $conn)) { if ($ret == 2) { echo "Language " . $param['number'] . " updated<br>"; } } else { if ($conn != null) { DBExec($conn, "rollback work"); } return false; } } if ($key == "PROBLEMREC") { if ($ret = DBNewProblem($contest, $param, $conn)) { if ($ret == 2) { echo "Problem " . $param['number'] . " updated<br>"; } } else { if ($conn != null) { DBExec($conn, "rollback work"); } return false; } } if ($key == "TASKREC") { if ($ret = DBNewTask($param, $conn)) { if ($ret == 2) { echo "Task " . $param['number'] . "/" . $param['site'] . " updated<br>"; } } else { if ($conn != null) { DBExec($conn, "rollback work"); } return false; } } if ($key == "CLARREC") { if ($ret = DBNewClar($param, $conn)) { if ($ret == 2) { echo "Clarification " . $param['number'] . "/" . $param['site'] . " updated<br>"; } } else { if ($conn != null) { DBExec($conn, "rollback work"); } return false; } } if ($key == "RUNREC") { if ($ret = DBNewRun($param, $conn)) { if ($ret == 2) { echo "Run " . $param['number'] . "/" . $param['site'] . " updated<br>"; } } else { if ($conn != null) { DBExec($conn, "rollback work"); } return false; } } } } } } // DBExec($conn,"commit work","importFromXML(commit)"); return true; }
if (isset($_POST["autoend"])) { $param['siteautoend'] = $_POST["autoend"]; } if (isset($_POST["globalscore"])) { $param['siteglobalscore'] = $_POST["globalscore"]; } if (isset($_POST["active"])) { $param['siteactive'] = $_POST["active"]; } $param['sitescorelevel'] = $_POST["scorelevel"]; $param['sitepermitlogins'] = ''; if (isset($_POST["autojudge"])) { $param['siteautojudge'] = $_POST["autojudge"]; } $param['sitechiefname'] = $_POST["chiefname"]; DBUpdateSite($param); $st1 = DBSiteInfo($_SESSION["usertable"]["contestnumber"], $_POST["site"]); if ($t != $st1["sitestartdate"]) { $param = array('contest' => $_SESSION["usertable"]["contestnumber"], 'site' => $_POST["site"], 'start' => $t); DBRenewSiteTime($param); } } ForceLoad("site.php?site=" . $_POST["site"]); } if ($main && isset($_FILES["importfile"]) && isset($_POST["Submit"]) && $_POST["Submit"] == 'Import' && $_FILES["importfile"]["name"] != "") { if ($_POST["confirmation"] == "confirm") { $type = myhtmlspecialchars($_FILES["importfile"]["type"]); $size = myhtmlspecialchars($_FILES["importfile"]["size"]); $name = myhtmlspecialchars($_FILES["importfile"]["name"]); $temp = myhtmlspecialchars($_FILES["importfile"]["tmp_name"]); if (!is_uploaded_file($temp)) {