\n"; if ($state == 0) { // Remove comments $line = preg_replace('/\s*--.*$/', '', $line); if ($line == '') { continue; } // \c ? if (preg_match('/^\\\\c\s+[^\s]+\s([^\s]+)\s*$/', $line, $match)) { if ($match[1] == "legacyworlds_admin") { //echo "CONNECT AS ADMIN
"; array_push(self::$instructions, array("CADM")); } else { //echo "CONNECT AS USER
"; array_push(self::$instructions, array("CUSR")); } } // \i ? elseif (preg_match('/^\\\\i\s+([^\s]+)\s*$/', $line, $match)) { self::parseFile($match[1]); } // COPY table FROM STDIN ? elseif (preg_match('/^COPY\s+([^\s]+)\s+FROM\s+STDIN\s*;\s*$/i', $line, $match)) { //echo "COPY DATA INTO {$match[1]}: "; array_push(self::$instructions, array("COPY", $match[1])); $state = 1; $copyArray = array(); } // Other commands else { $rv = self::parseCommand($line); if ($rv[0]) { //echo "EXECUTE QUERY " . htmlentities($rv[1]) . "
\n"; array_push(self::$instructions, array("QUERY", $rv[1])); } else { $buffer = $rv[1]; $state = 2; } } } elseif ($state == 1) { if ($line == "\\.") { //echo count($copyArray) . " LINE(S) OF DATA
\n"; self::$instructions[count(self::$instructions) - 1][2] = $copyArray; $state = 0; } else { array_push($copyArray, "$line\n"); } } elseif ($state == 2) { $rv = self::parseCommand($line, $buffer); if ($rv[0]) { //echo "EXECUTE QUERY " . htmlentities($rv[1]) . "
\n"; array_push(self::$instructions, array("QUERY", $rv[1])); $state = 0; } else { $buffer = $rv[1]; } } } } private static function parseFile($fileName) { $file = fopen("../sql/$fileName", "r"); $text = ""; while (($line = fgets($file)) !== FALSE) { $text .= $line; } fclose($file); self::parse($text); } private static function parseCommand($line, $buffer = "") { $state = 0; for ($i = 0; $i < strlen($line); $i ++) { if ($state == 0) { if ($line{$i} == ';') { return array(true, $buffer); } $buffer .= $line{$i}; if ($line{$i} == "'") { $state = 1; } } else { $buffer .= $line{$i}; if ($line{$i} == "'") { $state = 0; } } } return array(false, "$buffer "); } public static function connect() { self::$uConnection = __dbConnect(false); if (!self::$uConnection) { $argh = "Error while accessing the database in user mode"; include('cg_argh.inc'); exit(1); } self::$aConnection = __dbConnect(true); if (!self::$aConnection) { $argh = "Error while accessing the database in admin mode"; include('cg_argh.inc'); exit(1); } } public static function execute($schema) { foreach (self::$instructions as $instr) { $iType = array_shift($instr); if ($iType == 'CADM') { self::setConnection(self::$aConnection); } elseif ($iType == 'CUSR') { self::setConnection(self::$aConnection); } elseif ($iType == 'QUERY') { if (!pg_query(self::$cConnection, $instr[0])) { $argh = "Could not execute query {$instr[0]}"; pg_query(self::$aConnection, "DROP SCHEMA \"$schema\" CASCADE"); include('cg_argh.inc'); exit(1); } } elseif ($iType == 'COPY') { if (!pg_copy_from(self::$cConnection, $instr[0], $instr[1])) { $argh = "Copy failed for table {$instr[0]}"; pg_query(self::$aConnection, "DROP SCHEMA \"$schema\" CASCADE"); include('cg_argh.inc'); exit(1); } } } } public static function setConnection($cnx) { self::$cConnection = $cnx; } } $gtData = array( "r" => array('round', 'r'), "m" => array('match', 'm'), "c" => array('ctf', 'm'), ); $gData = $gtData[$_SESSION['lw_new_game']['game_type']]; $substStr = "b5" . $gData[1] . "X"; // Load base match script $fileName = "../sql/beta5/beta5-" . $gData[0] . ".sql"; $baseFile = fopen($fileName, "r"); $base = ""; while (($line = fgets($baseFile)) !== FALSE) { $base .= preg_replace("/$substStr/", $_SESSION['lw_new_game']['found_id'], $line); } fclose($baseFile); dbParser::parse($base); dbParser::connect(); dbParser::execute($_SESSION['lw_new_game']['found_id']); if (__isManagerRunning()) { $op = array( "pc" => 50, "text" => "Stopping all ticks", "delay" => 1, "to" => "cg_step6.php" ); } else { $op = array( "pc" => 60, "text" => "Generating configuration", "delay" => 1, "to" => "cg_step8.php" ); } include('cg_operation.inc'); ?>