<?php
require_once "conexionLocal.php"; 

$transaccion = $_POST["transaccion"];

function subirArchivo(){	
	$target_dir = "uploads/";
	$target_file = $target_dir . basename($_FILES["fileToUpload"]["name"]);
	$uploadOk = 1;
	$phpFileUploadErrors = array(
	    0 => 'There is no error, the file uploaded with success',
	    1 => 'The uploaded file exceeds the upload_max_filesize directive in php.ini',
	    2 => 'The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form',
	    3 => 'The uploaded file was only partially uploaded',
	    4 => 'No file was uploaded',
	    6 => 'Missing a temporary folder',
	    7 => 'Failed to write file to disk.',
	    8 => 'A PHP extension stopped the file upload.',
	);
	
	/*
	// Check if image file is a actual image or fake image
	if(isset($_POST["submit"])) {
	    $check = getimagesize($_FILES["fileToUpload"]["tmp_name"]);
	    if($check !== false) {
	        echo "File is an image - " . $check["mime"] . ".";
	        $uploadOk = 1;
	    } else {
	        echo "File is not an image.";
	        $uploadOk = 0;
	    }
	}
	// Check if file already exists
	if (file_exists($target_file)) {
	    echo "Sorry, file already exists.";
	    $uploadOk = 0;
	}*/
	// Check file size
	//echo "Su archivo pesa:".$_FILES["fileToUpload"]["size"];
	if ($_FILES["fileToUpload"]["size"] > 10000000) {
	    $uploadOk = 0;
	    printf("Lo lamento. Su archivo es demasiado grande.".$_FILES["fileToUpload"]["size"]);
	}
	// Allow certain file formats
	//printf("ruta:".$target_file);
	//printf(strpos($_FILES["fileToUpload"]["name"],'no'));
	if(strpos(basename($_FILES["fileToUpload"]["name"]),'kml') == FALSE && strpos(basename($_FILES["fileToUpload"]["name"]),'wav') == FALSE && strpos(basename($_FILES["fileToUpload"]["name"]),'html') == FALSE && strpos(basename($_FILES["fileToUpload"]["name"]),'mp3') == FALSE  && strpos(basename($_FILES["fileToUpload"]["name"]),'zip') == FALSE){
	    $uploadOk = 0;
	    printf("Lo lamento. El archivo no cumple los criterios para subirlo al servidor...");
	}
	// Check if $uploadOk is set to 0 by an error
	if ($uploadOk == 0) {
	    printf("Lo lamento. Su archivo no pudo ser cargado...");
	// if everything is ok, try to upload file
	} else {
	    if (move_uploaded_file($_FILES["fileToUpload"]["tmp_name"], $target_file)) {
	        printf("El archivo ha sido cargado.,".$target_file);
	        //if($imageFileType == "kml") leerXml($target_file);
	        //if($imageFileType == "zip") descomprimirZip($target_file);
	    } else {
	        printf("Lo lamento. Hubo un error al cargar el archivo.  Error-> ".$phpFileUploadErrors[$_FILES["fileToUpload"]["error"]]);

	    }
	}
}

function descomprimirZip($ruta,$firmware){
	//echo $ruta;
	$zip = new ZipArchive;
	if ($zip->open($ruta) === TRUE) {
	    $zip->extractTo('uploads/');
	    $zip->close();
	    $r1 = explode('/',$ruta);
	    $r2 = explode('.',$r1[1]);
	    $nombreFile = $r2[0];
	       
	    $resul;
	    //echo "Nombre de archivo:".$nombreFile." firmware: ".$firmware;
	    if(strpos($nombreFile,'F6') !== FALSE){
                echo "Nombre de archivo:".$nombreFile." firmware: ".$firmware;
	    	$resul = exec('sudo chmod 777 uploads/'.$nombreFile.'/RV60.txt');
	    	$resul .= exec('sudo mv uploads/'.$nombreFile.'/RV60.txt uploads/'.$nombreFile.'/RV60.jar');
	    	$resul .= exec('sudo pkill -9 -f RV60.jar');
	    	$resul .= exec('sudo mv uploads/'.$nombreFile.'/RV60.jar /home/root/NetBeansProjects/RV60_OrangePi/dist/RV60.jar');
	    	exec('sudo java -jar /home/root/NetBeansProjects/RV60_OrangePi/dist/RV60.jar > /dev/null 2>/dev/null &');
	    	printf("Proceso de actualización exitoso...".$resul);
	    }
	    if(strpos($nombreFile,'F2') !== FALSE){
	    	/*if(strpos($firmware,'F2') === FALSE){
	    		printf("Archivo seleccionado no corresponde al firmware del equipo");
	    		return;
	    	}*/
                echo "Nombre de archivo:".$nombreFile." firmware: ".$firmware;
	    	$resul = exec('sudo chmod 777 uploads/'.$nombreFile.'/OrangeWifi.txt');
	    	$resul .= exec('sudo mv uploads/'.$nombreFile.'/OrangeWifi.txt uploads/'.$nombreFile.'/OrangeWifi.jar');
	    	$resul .= exec('sudo pkill -9 -f OrangeWifi.jar');
	    	$resul .= exec('sudo mv uploads/'.$nombreFile.'/OrangeWifi.jar /home/root/NetBeansProjects/OrangeWifi/dist/OrangeWifi.jar');
	    	exec('sudo java -jar /home/root/NetBeansProjects/OrangeWifi/dist/OrangeWifi.jar > /dev/null 2>/dev/null &');
	    	printf("Proceso de actualización exitoso...".$resul);
	    }
	    if(strpos($nombreFile,'html') !== FALSE){
	    	$resul = exec('sudo chmod 777 uploads/'.$nombreFile);
	    	$resul = exec('sudo mv uploads/'.$nombreFile .' /home/');
	    	$myfile = fopen("/var/www/html/RegislogWeb/uploads/actualizarFE.txt", "w") or die("Unable to open file!");
                $txt = "1";
                fwrite($myfile, $txt);
                fclose($myfile);

	    	/*
	    	$resul .= exec('sudo mv uploads/'.$nombreFile.'/OrangeWifi.txt uploads/'.$nombreFile.'/OrangeWifi.jar');
	    	$resul .= exec('sudo pkill -9 -f OrangeWifi.jar');
	    	$resul .= exec('sudo mv uploads/'.$nombreFile.'/OrangeWifi.jar /home/root/NetBeansProjects/OrangeWifi/dist/OrangeWifi.jar');
	    	exec('sudo java -jar /home/root/NetBeansProjects/OrangeWifi/dist/OrangeWifi.jar > /dev/null 2>/dev/null &');
	    	*/
	    	printf("Proceso de actualización FE exitoso...".$resul);
	    }
		
	} else {
	    printf("Hubo un error al descomprimir el arhivo...");
	}
}

function leerXml($ruta){
	//echo "Función leer";
	try{
		$sql = "DELETE FROM tablaRuta";
		$midb = conexionLocalSQLite3();
		$midb->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
		$results = $midb->prepare($sql);
		$results->execute();
		if($results){
			$xml = simplexml_load_file($ruta);
			$placemark = $xml->Document->Folder->Placemark;
			$size = sizeof($placemark);
			for($i=0;$i<$size;$i++){
				$cadena = $placemark[$i]->description;
				$datos = explode(",", $cadena);
				$codigo = $datos[0];
				$radio = $datos[1];
				$direccion = $datos[2];
				$tiempoBase = $datos[3];
				$distanciaBase = $datos[4];
				$coordenadas = $placemark[$i]->Point->coordinates;
				$datos = explode(",", $coordenadas);
				$latitud  = $datos[1];
				$longitud = $datos[0];
				$sql = "INSERT INTO tablaRuta (codigo, latitud, longitud, radio, direccion, tiempoBase, distanciaBase) VALUES (:codigo,:latitud,:longitud,:radio,:direccion,:tiempoBase, :distanciaBase)";
				$midb = conexionLocalSQLite3();
				$midb->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
				$results = $midb->prepare($sql);
				$results->bindParam(':codigo',$codigo, PDO::PARAM_STR);
				$results->bindParam(':latitud',$latitud, PDO::PARAM_STR);
				$results->bindParam(':longitud',$longitud, PDO::PARAM_STR);
				$results->bindParam(':radio',$radio, PDO::PARAM_STR);
				$results->bindParam(':direccion',$direccion, PDO::PARAM_STR);
				$results->bindParam(':tiempoBase',$tiempoBase, PDO::PARAM_STR);
				$results->bindParam(':distanciaBase',$distanciaBase, PDO::PARAM_STR);
				$results->execute();
			} 
			if($results){
				$respuesta = "<div class='exito' data-recargar>Se insertó con exito los puntos de control </div>";
			}else{
				$respuesta = "<div class='error' data-recargar>Ocurrio un error. No se insertó los puntos de control</div>";
			}
		}else{
			$respuesta = "<div class='error' data-recargar>Ocurrio un error. No se accedio a la tabla</div>";
		}
		$results = null;
		$midb = null;
		return printf($respuesta);
	}catch(PDOException $e) {
    	echo "Lo siento hay un error.  ". $e->getMessage() ;// Remove or modify after testing 
    	file_put_contents('PDOErrors.txt',date('[Y-m-d H:i:s]').", modelo.php, ". $e->getMessage()."\r\n", FILE_APPEND);  
 	}

	//print_r($placemark[$i]);
	
}
function ejecutarTransaccion($transaccion){
	//echo "transaccion:".$transaccion;
	
	if ($transaccion=="descomprimirZip"){
		
		descomprimirZip($_POST["ruta"],$_POST["firmware"]);
	}
	else{
		//echo "subiendo archivo";
		subirArchivo();
	}
}
ejecutarTransaccion($transaccion);
//subirArchivo();

?>