<?
////////////////////////////////////////////////////
// Conciliación: gestión de conciliación de activos
// Version: 1.0
//
// Copyright (C) 2014  Eustotem Multimedia, S.L.
//
// License: MIT, see LICENSE
////////////////////////////////////////////////////


include("../conf/preferences.php");
session_name(SYS_APP_SESSNAME);
session_start();
include("../conf/langs/".$langs[$_SESSION['userlang']][0]."/backup.php");
include("../conf/connections.php");
include("../phplib/auth.php");
require_once("../phplib/utils.php");
require_once("../phplib/phpmailer/class.phpmailer.php");
require_once("../core/plugins.php");
$mail = new phpmailer();
$mail->SetLanguage("es","../phplib/phpmailer/language/");
$mail->PluginDir="../phplib/phpmailer/";
$sql="SELECT *, (SELECT CONCAT(nombre,' ',apellidos) FROM " . SYS_USERS_TABLE . " WHERE id=l.idUser) AS usuario FROM " . SYS_LOG_TABLE . " l WHERE tipo=2 ORDER BY fecha DESC";
$qb=mysql_query($sql) or die("2: ".$sql);
$sql="SELECT *, (SELECT CONCAT(nombre,' ',apellidos) FROM " . SYS_USERS_TABLE . " WHERE id=l.idUser) AS usuario FROM " . SYS_LOG_TABLE . " l WHERE tipo=3 ORDER BY fecha DESC";
$qr=mysql_query($sql) or die("3: ".$sql);
$resultado=false;
$mostrar_html=true;
if($_SERVER['REQUEST_METHOD']=="POST"){
	if($_REQUEST['action']=='b'){
		$db = new DBBackup(array('driver' => 'mysql','host' => DB_CONN_HOST,'user' => DB_CONN_USER,'password' => DB_CONN_PASS,'database' => DB_CONN_DDBB));
		$backup = $db->backup();
		if(!$backup['error']){
			$uuid=uuid();
			$sql="INSERT INTO " . SYS_LOG_TABLE . "(fecha, idUser, tipo, extra) VALUES(NOW(), ".$_SESSION[session_id()]['id'].",2,'$uuid')";
			$q=mysql_query($sql) or die(mysql_error());
			$final="-- mercadolocal DATABASE BACKUP;\n-- BACKUP DATE: ".date("Y-m-d H:i:s").";\n-- BACKUP TOKEN: ".$uuid.";\n\n\n";
			$final.=$backup['msg'];
			$metodo=3;
			if($metodo==1){
				$contenido=Content::cutf($final);
			}else if($metodo==2){
				$fp = fopen('file.sql', 'a+');fwrite($fp, $final);fclose($fp);
			}else if($metodo==3){
				$filename="backup_".date("Y_m_d",time()).".sql";
				$fp = fopen('../../assets/dbbackups/'.$filename, 'a+');fwrite($fp, $final);fclose($fp);
				ob_get_contents();
				header("Pragma: public");
				header("Expires: 0"); 
				header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
				header("Content-Type: text/html; charset=utf-8");
				header("Content-Type: application/force-download");
				header("Content-Type: application/octet-stream");
				header("Content-Type: application/download");
				header("Content-Disposition: attachment; filename=$filename;");
				ob_end_clean();
				echo $final;
			}
			$resultado=true; $mostrar_html=false;
		} else {
			$errores="- Error desconocido en el volcado. Ponte en contacto con el departamento técnico.";
		}
	}else if($_REQUEST['action']=='r'){
		$errores='';
		$uploaddir = '../../assets/tempfiles/';
		$uploadfile = $uploaddir . basename($_FILES['sqlfile']['name']);
		if (move_uploaded_file($_FILES['sqlfile']['tmp_name'], $uploadfile)) {
			$contenido=file_get_contents($uploadfile);
			preg_match("/-- BACKUP TOKEN: (.*?);\n/",$contenido,$matches);
			if(count($matches)==0){
				$errores.="El archivo de backup no es válido. Posiblemente se trate de un archivo falso.";
			}else{
				$token=$matches[1]; $tabla=SYS_LOG_TABLE;
				$sql="SELECT l.*, (SELECT COUNT(id) FROM $tabla WHERE fecha>l.fecha) AS posteriores FROM $tabla l WHERE l.extra='$token'";
				$q=mysql_query($sql);
				if(mysql_num_rows($q)>0){
					$f=mysql_fetch_assoc($q);
					$sql="INSERT INTO $tabla(fecha, idUser, tipo, extra) VALUES(NOW(), ".$_SESSION[session_id()]['id'].",3,'$token')";
					mysql_query($sql);
					$mysqli = new mysqli(DB_CONN_HOST, DB_CONN_USER, DB_CONN_PASS, DB_CONN_DDBB);
					$myresult=$mysqli->multi_query($contenido);
					if(!$myresult){
						$errores.="- Error de SQL en el archivo de volcado. ¿Ha sido modificado manualmente?";
					}else{
						mysql_query("TRUNCATE TABLE ".SYS_SESSION_TABLE);
						$resultado=true;
					}
					$mysqli->close();
					unlink($uploadfile);
				}else{
					$errores.="- El backup que intentas restaurar no pertenece a esta web.";
				}
			}
		} else {
			$errores.="- Posible ataque de upload de archivos<br />";
		}
	}
}
if($mostrar_html==true){
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
	<title><? echo $_SESSION['application']['title'] ?></title>
	<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
	<link href="../resources/themes/default/common.css" rel="stylesheet" type="text/css" />
	<link href="../resources/themes/default/main.css" rel="stylesheet" type="text/css" />
	<link href="../resources/themes/default/form_screen.css" rel="stylesheet" type="text/css" />
	<link type="text/css" href="../jslib/jq/ui/css/<? echo UI_THEME ?>/jquery-ui.custom.css" rel="stylesheet" />
	<link type="text/css" href="../jslib/jq/ui/css/<? echo UI_THEME ?>/jquery-ui.ekain.css" rel="stylesheet" />
	<script type="text/javascript" src = "../jslib/jq/jquery-1.7.2.min.js" ></script>
	<script type="text/javascript" src = "../jslib/jq/jquery.blockUI.js" ></script>
	<script type="text/javascript" src = "../jslib/jq/ui/js/jquery-ui-1.8.21.custom.min.js" ></script>
	<script type="text/javascript" src = "../jslib/jq/ui/jquery.ui.selectmenu.js" ></script>
	<link type="text/css" href="../jslib/jq/ui/css/<? echo UI_THEME ?>/jquery.ui.selectmenu.css" rel="stylesheet" />
	<script type="text/javascript" src = "../jslib/jq/fancybox/jquery.fancybox-1.3.4.pack.js" ></script>
	<link rel="stylesheet" href="../jslib/jq/fancybox/jquery.fancybox-1.3.4.css" type="text/css" media="screen" />
	
	<script type="text/javascript" src="../jslib/utils.js"></script>
	<script type="text/javascript">
	$(document).ready(function(){
		$('#tabla').tabs();
		$('#tipo').focus();
		$('select').selectmenu();
		$('button, input:submit, input:button, input:reset, .button, .link_button').button();
	});
	</script>
</head>

<body bgcolor="#FFFFFF" class="bkg-detail-1">
<div id="pageBar">
	<h1><? echo ADDON_HTML_TITLE ?></h1>
	<div style="position:absolute; right:5px; top:3px;">
	<? include("../jslib/layoutBtns.htm") ?>
	</div>
</div>
<table width="100%" cellpadding="0" cellspacing="0" style="">
<tr>
<td id="panel_central" valign="top">
	<? if($_SERVER['REQUEST_METHOD']=='POST'){ ?>
		<?
		if($_REQUEST['action']=='b'){
			if($resultado==true){
				$mensaje="El volcado de la base de datos se ha realizado correctamente.";
			}else if($resultado==false){
				$mensaje="<strong>Atención:</strong> han ocurrido los siguientes errores:<br /><br />";
				if($errores!='') $mensaje.=$errores;
			}
		}else if($_REQUEST['action']=='r'){
			if($resultado==true){
				$mensaje="La restauración de la base de datos se ha realizado con éxito.<br />Las sesiones de los usuarios han caducado, hay que volver a entrar de nuevo.";
			}else if($resultado==false){
				$mensaje="<strong>Atención:</strong> han ocurrido los siguientes errores:<br /><br />";
				if($errores!='') $mensaje.=$errores;
			}
		}
		?>
		<div class='introbox sombra roundcorners bkg_icon_info'>
			<? echo $mensaje ?><br /><br />
			<input type="button" name="volver" id="volver" value="Volver" class="but_default" onclick="location.href='backup.php'" />
		</div>
	<? }else{ ?>
		<div class="introbox sombra roundcorners bkg-yellow">
			<h2 style="font-size:14px; line-height:22px; margin-left:10px;">Copia de seguridad</h2>
			<form name="dataform" id="dataform" class="dataform" method="post" enctype="application/x-www-form-urlencoded" action="backup.php?action=b">
				<p><? echo ADDON_HTML_INTRO ?></p>
				<input type="submit" name="ya" id="ya" value="<? echo ADDON_HTML_DOWNLOAD ?>" class="but_default" />
				<?
				if(mysql_num_rows($qb)>0){
					$fb=mysql_fetch_assoc($qb);
				?>
				<p>Ultima copia de seguridad: <strong><? echo $fb['fecha'] ?></strong>, por <strong><? echo $fb['usuario'] ?></strong></p>
				<? } ?>
			</form>
		</div>
		<p>&nbsp;</p>
		<div class="introbox sombra roundcorners bkg-red">
			<h2 style="font-size:14px; line-height:22px; margin-left:10px;">Restaurar copia de seguridad</h2>
			<form name="rdata" id="rdata" class="dataform" method="post" enctype="multipart/form-data" action="backup.php?action=r">
				<p><strong>Atención:</strong> Esta operación sobreescribirá toda la información de la base de datos. La información que se haya ido añadiendo desde que hiciste el último backup hasta este momento se perderá.<br />
				Los archivos asociados a registros de la base de datos, como imágenes o documentos, no se restauran con esta operación, por lo que tendrás que hacerlo mediante un programa de FTP</p>
				<input type="file" name="sqlfile" id="sqlfile" class="but_default" />
				<input type="submit" name="ya2" id="ya2" value="Enviar" class="but_default" />
				<?
				if(mysql_num_rows($qr)>0){
					$fr=mysql_fetch_assoc($qr);
				?>
				<p>Ultima restauración de la bbdd: <strong><? echo $fr['fecha'] ?></strong>, por <strong><? echo $fr['usuario'] ?></strong></p>
				<? } ?>
			</form>
		</div>
	<? } ?>
</td>
</tr>
</table>
</body>
</html>
<? } ?>