From 39af649d52ddb6da8f734841137412d2dcb5b7c8 Mon Sep 17 00:00:00 2001 From: Cassio de Campos Date: Tue, 24 Oct 2017 10:52:02 +0100 Subject: bf and revert update --- src/admin/misc.php | 131 +++++++++++++++++++++++++++++------------------------ src/globals.php | 30 ++++++++++-- 2 files changed, 99 insertions(+), 62 deletions(-) diff --git a/src/admin/misc.php b/src/admin/misc.php index 8000841..eb4a86f 100644 --- a/src/admin/misc.php +++ b/src/admin/misc.php @@ -42,6 +42,7 @@ require 'header.php'; + Done\n"; else echo "
Error (likely permission/ownership issues)
\n"; } -if (isset($_POST["Submit4"]) && $_POST["Submit5"] == "Full clear") { +if (isset($_POST["Submit5"]) && $_POST["Submit5"] == "Full clear") { if(fixbocadir(dirname(__DIR__),true)) echo "
Done
\n"; else echo "
Error (likely permission/ownership issues)
\n"; } -if (isset($_POST["Submit4"]) && $_POST["Submit6"] == "Update BOCA") { +if (isset($_POST["Submit6"]) && $_POST["Submit6"] == "Update BOCA") { require('..' . $ds . 'versionnum.php'); $curv = split('.',$BOCAVERSION); $dir = dirname(__DIR__); @@ -90,71 +91,85 @@ if (isset($_POST["Submit4"]) && $_POST["Submit6"] == "Update BOCA") { if($curv[0] != $newv[0] || $curv[1] != $newv[1]) echo "
Cannot updated because of major version difference
"; else { - if(updatebocafile($dir, $dir . $ds . "private" . $ds . "newboca." . $t, $t) === false) - echo "
Error updating BOCA
\n"; - else { - echo "
Updated to " . $BOCAVERSION . "\n
\n"; - } + $q = updatebocafile($dir, $dir . $ds . "private" . $ds . "newboca." . $t, $t); + echo "
" . $q . " files updated to " . $BOCAVERSION . "\n
\n"; + $str = @file_get_contents($dir . $ds . "private" . $ds . "updateboca.log"); + @file_put_contents($dir . $ds . "private" . $ds . "updateboca.log", $str . $t . "\n"); } } else { echo "
Downloaded file corrupted
"; } } else echo "
Download error
"; } -$privatedir = $_SESSION['locr'] . $ds . "private"; -$remotedir = $_SESSION['locr'] . $ds . "private" . $ds . "remotescores"; -$destination = $remotedir . $ds ."scores.zip"; -if(is_writable($remotedir)) { - if(($fp = @fopen($destination . ".lck",'x')) !== false) { - if($doscore) { - if (($s = DBSiteInfo($_SESSION["usertable"]["contestnumber"],$_SESSION["usertable"]["usersitenumber"])) == null) - ForceLoad("index.php"); - echo "
\n";
-      echo "Building scores\n";
-      $level=$s["sitescorelevel"];
-      $data0 = array();
-      if($level>0) {
-	list($score,$data0) = DBScoreSite($_SESSION["usertable"]["contestnumber"], 
-					  $_SESSION["usertable"]["usersitenumber"], 0, -1);
-      }
-      $ct=DBGetActiveContest();
-      $localsite=$ct['contestlocalsite'];
-      $fname = $privatedir . $ds . "score_localsite_" . $localsite . "_x"; // . md5($_SERVER['HTTP_HOST']);
-      @file_put_contents($fname . ".tmp",base64_encode(serialize($data0)));
-      @rename($fname . ".tmp",$fname . ".dat");
-      
-      $data0 = array();
-      if($level>0) {
-	list($score,$data0) = DBScoreSite($_SESSION["usertable"]["contestnumber"], 
-					  $_SESSION["usertable"]["usersitenumber"], 1, -1);
-      }
-      $ct=DBGetActiveContest();
-      $localsite=$ct['contestlocalsite'];
-      $fname = $remotedir . $ds . "score_site" . $localsite . "_" . $localsite . "_x"; // . md5($_SERVER['HTTP_HOST']);
-      @file_put_contents($fname . ".tmp",base64_encode(serialize($data0)));
-      @rename($fname . ".tmp",$fname . ".dat");
-      echo "Transferring scores\n";
-      scoretransfer($fname . ".dat", $localsite);
-      echo "Saving scores\n";
-      if(@create_zip($remotedir,glob($remotedir . '/*.dat'),$fname . ".tmp") != 1) {
-	LOGError("Cannot create score zip file");
-	if(@create_zip($remotedir,array(),$fname . ".tmp") == 1)
+if (isset($_POST["Submit7"]) && $_POST["Submit7"] == "Revert Update") {
+  $str = @file($dir . $ds . "private" . $ds . "updateboca.log");
+  $t = trim($str[count($str)-1]);
+  unset($str[count($str)-1]);
+  $str = implode("\n", $str);
+  $dir = dirname(__DIR__);
+  fixbocadir($dir);
+  echo "
Reverting last update\n";
+  $q = revertupdatebocafile($dir, $t);
+  echo $q . " files reverted properly\n";
+  echo "
"; + @file_put_contents($dir . $ds . "private" . $ds . "updateboca.log", $str); +} +if($dotransfer || $doscore || $dotransferall) { + $privatedir = $_SESSION['locr'] . $ds . "private"; + $remotedir = $_SESSION['locr'] . $ds . "private" . $ds . "remotescores"; + $destination = $remotedir . $ds ."scores.zip"; + if(is_writable($remotedir)) { + if(($fp = @fopen($destination . ".lck",'x')) !== false) { + if($doscore) { + if (($s = DBSiteInfo($_SESSION["usertable"]["contestnumber"],$_SESSION["usertable"]["usersitenumber"])) == null) + ForceLoad("index.php"); + echo "
\n";
+	echo "Building scores\n";
+	$level=$s["sitescorelevel"];
+	$data0 = array();
+	if($level>0) {
+	  list($score,$data0) = DBScoreSite($_SESSION["usertable"]["contestnumber"], 
+					    $_SESSION["usertable"]["usersitenumber"], 0, -1);
+	}
+	$ct=DBGetActiveContest();
+	$localsite=$ct['contestlocalsite'];
+	$fname = $privatedir . $ds . "score_localsite_" . $localsite . "_x"; // . md5($_SERVER['HTTP_HOST']);
+	@file_put_contents($fname . ".tmp",base64_encode(serialize($data0)));
+	@rename($fname . ".tmp",$fname . ".dat");
+	
+	$data0 = array();
+	if($level>0) {
+	  list($score,$data0) = DBScoreSite($_SESSION["usertable"]["contestnumber"], 
+					    $_SESSION["usertable"]["usersitenumber"], 1, -1);
+	}
+	$ct=DBGetActiveContest();
+	$localsite=$ct['contestlocalsite'];
+	$fname = $remotedir . $ds . "score_site" . $localsite . "_" . $localsite . "_x"; // . md5($_SERVER['HTTP_HOST']);
+	@file_put_contents($fname . ".tmp",base64_encode(serialize($data0)));
+	@rename($fname . ".tmp",$fname . ".dat");
+	echo "Transferring scores\n";
+	scoretransfer($fname . ".dat", $localsite);
+	echo "Saving scores\n";
+	if(@create_zip($remotedir,glob($remotedir . '/*.dat'),$fname . ".tmp") != 1) {
+	  LOGError("Cannot create score zip file");
+	  if(@create_zip($remotedir,array(),$fname . ".tmp") == 1)
+	    @rename($fname . ".tmp",$destination);
+	} else {
 	  @rename($fname . ".tmp",$destination);
-      } else {
-	@rename($fname . ".tmp",$destination);
+	}
+	@fclose($fp);
+      }
+      if($dotransfer) {
+	echo "Processing other data\n";
+	getMainXML($_SESSION["usertable"]["contestnumber"],10,$dotransferall);
+	echo "
\n"; } - @fclose($fp); - } - if($dotransfer) { - echo "Processing other data\n"; - getMainXML($_SESSION["usertable"]["contestnumber"],10,$dotransferall); - echo "
\n"; - } - @unlink($destination . ".lck"); - } else { - if(file_exists($destination . ".lck") && filemtime($destination . ".lck") < time() - 120) @unlink($destination . ".lck"); - echo "
Transfers locked by other process - try again soon
\n"; + } else { + if(file_exists($destination . ".lck") && filemtime($destination . ".lck") < time() - 120) + @unlink($destination . ".lck"); + echo "
Transfers locked by other process - try again soon
\n"; + } } } ?> diff --git a/src/globals.php b/src/globals.php index eee3b72..9caf474 100755 --- a/src/globals.php +++ b/src/globals.php @@ -82,23 +82,45 @@ function fixbocadir($dir,$full=false) { } } function updatebocafile($dirboca, $dirz, $t) { - $ok = true; + $ok = 0; if(is_dir($dirz)) { $ds = DIRECTORY_SEPARATOR; if($ds=="") $ds = "/"; $d = @opendir($dirz); while (($file = @readdir($d)) !== false) { if($file != '.' && $file != '..') - if(updatebocafile($dirboca . $ds . $file, $dirz . $ds . $file, $t) === false) $ok=false; + $ok = $ok + updatebocafile($dirboca . $ds . $file, $dirz . $ds . $file, $t); } @closedir($d); @cleardir($dirz); } else { if(is_file($dirboca)) { copy($dirboca, $dirboca . '.' . $t . '.old'); - chmod($dirboca . '.' . $t . '.old', "0400"); + } else { + file_put_contents($dirboca . '.' . $t . '.old', ""); + } + @chmod($dirboca . '.' . $t . '.old', "0000"); + if(rename($dirz, $dirboca) === false) $ok=1; + } + return $ok; +} +function revertupdatebocafile($dirboca, $t) { + $ok = 0; + if(is_dir($dirboca)) { + $ds = DIRECTORY_SEPARATOR; + if($ds=="") $ds = "/"; + $d = @opendir($dirboca); + while (($file = @readdir($d)) !== false) { + if($file != '.' && $file != '..') + $ok = $ok + revertupdatebocafile($dirboca . $ds . $file, $t); + } + @closedir($d); + } else { + if(is_file($dirboca) && substr($dirboca, strlen($dirboca)-strlen('.' . $t . '.old')) == '.' . $t . '.old') { + @chmod($dirboca, "0600"); + if(@copy($dirboca, substr($dirboca, 0, strlen($dirboca)-strlen('.' . $t . '.old'))) === true) $ok=1; + @chmod($dirboca, "0000"); } - if(rename($dirz, $dirboca) === false) $ok=false; } return $ok; } -- cgit v1.2.3