<?php
	
	OnlyShowIf(CheckAdmin());
			
	ob_start();
	$td = $sitefolder.'/';
	if (!file_exists($td))
	{
		mkdir($td);
	}
	
	if (!file_exists($td.'/backup'))
	{
		mkdir($td.'/backup');
	}
	
	$pth = $td.'/backup';
		
	$dbbackupcmd = "";
	if ($dbtype == "mysql")
	{
		$dbbackupcmd = "mysqldump --opt -h %HOST% -u %USER% -p\"%PASSWORD%\" %DBNAME%";
	}
	if ($dbtype == "pgsql")
	{
		$dbbackupcmd = "pg_dump --column-inserts -h %HOST% -U %USER% -w %DBNAME%";
	}
	
	$cmd = str_replace("%HOST%","localhost",$dbbackupcmd);
	$cmd = str_replace("%USER%",$dbuser,$cmd);
	$cmd = str_replace("%PASSWORD%",$dbpass,$cmd);
	$cmd = str_replace("%DBNAME%",$dbname,$cmd);
		
	//echo "Dumping MySQL Database...";
	ob_get_clean();
	
	if ($dbname != "") {
		ob_start();
		system($cmd);
		$result = ob_get_clean();
	}
		
		
	$zip = new ZipArchive();
	$filename = $pth.'/backup.zip';
	
	if (file_exists($filename))
	{
		unlink($filename);
	}
	
	/*if (isset($_REQUEST['local']))
	{
		$filename = $_SERVER['DOCUMENT_ROOT'].'/cache/backup.zip';
		if (file_exists($filename))
		{
			unlink($filename);
		}
	}*/
	
	//echo 'Opened '.$filename;
	if ($zip->open($filename, ZipArchive::CREATE) !== TRUE)
	{
		echo 'Unable to Compress Backup!';
		exit();
	}
		
	$source = $sitefolder.DIRECTORY_SEPARATOR;
	
	if (file_exists($source))
	{
	$files = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($source), RecursiveIteratorIterator::SELF_FIRST);

	foreach ($files as $file)
	{
		$plain = str_replace($source,'',$file);
		//echo 'Backing up '.$plain.' based on '.$file;
		
		$file = str_replace('\\', '/', $file);
		$plain = str_replace('\\', '/', $plain);

		// Ignore "." and ".." folders
		if( in_array(substr($file, strrpos($file, '/')+1), array('.', '..')) )
			continue;

		$file = realpath($file);		
		
		//if ((strlen($plain) >= 13) && (substr($plain,0,13) == 'media/artags/')) continue;
		//if ((strlen($plain) >= 13) && (substr($plain,0,13) == 'media/models/')) continue;
		
		$path_parts = pathinfo($file);
		if (isset($path_parts['extension'])) {
			if ($path_parts['extension'] == 'php') 
			{
				if (strpos($plain,"daq") === FALSE)
				{
					continue;
				}
			}	
		}

		if (is_dir($file) === true)
		{
			//echo 'Creating Folder: '.$plain.'/'."<br/>";
			$zip->addEmptyDir($plain . '/');
		}
		else if (is_file($file) === true)
		{
			$zip->addFromString($plain, file_get_contents($file));
			//echo '  Adding File: '.$plain."<br/>";
		}
	}
	}
	
	/*
	
		
	//Backup Media Files...
	$source = $sitefolder.'/media/layouts';
	
	if (file_exists($source))
	{
	$files = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($source), RecursiveIteratorIterator::SELF_FIRST);

	foreach ($files as $file)
	{
		$plain = str_replace($source,'layouts',$file);
		
		$file = str_replace('\\', '/', $file);
		$plain = str_replace('\\', '/', $plain);

		// Ignore "." and ".." folders
		if( in_array(substr($file, strrpos($file, '/')+1), array('.', '..')) )
			continue;

		$file = realpath($file);		
		
		//if ((strlen($plain) >= 13) && (substr($plain,0,13) == 'media/artags/')) continue;
		//if ((strlen($plain) >= 13) && (substr($plain,0,13) == 'media/models/')) continue;
		
		$path_parts = pathinfo($file);
		if (isset($path_parts['extension'])) {
			if ($path_parts['extension'] == 'php') continue;
		}

		if (is_dir($file) === true)
		{
			//echo 'Creating Folder: '.$plain.'/'."<br/>";
			$zip->addEmptyDir($plain . '/');
		}
		else if (is_file($file) === true)
		{
			$zip->addFromString($plain, file_get_contents($file));
			//echo '  Adding File: '.$plain."<br/>";
		}
	}
	}
	
	$source = $sitefolder.'/media/models';
	if (file_exists($source))
	{
	
	$files = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($source), RecursiveIteratorIterator::SELF_FIRST);

	foreach ($files as $file)
	{
		$plain = str_replace($source,'custom',$file);
		
		$file = str_replace('\\', '/', $file);
		$plain = str_replace('\\', '/', $plain);

		// Ignore "." and ".." folders
		if( in_array(substr($file, strrpos($file, '/')+1), array('.', '..')) )
			continue;

		$file = realpath($file);		
		
		//if ((strlen($plain) >= 13) && (substr($plain,0,13) == 'media/artags/')) continue;
		//if ((strlen($plain) >= 13) && (substr($plain,0,13) == 'media/models/')) continue;
		
		$path_parts = pathinfo($file);
		if (isset($path_parts['extension'])) {
			if ($path_parts['extension'] == 'php') continue;
		}

		if (is_dir($file) === true)
		{
			//echo 'Creating Folder: '.$plain.'/'."<br/>";
			$zip->addEmptyDir($plain . '/');
		}
		else if (is_file($file) === true)
		{
			$zip->addFromString($plain, file_get_contents($file));
			//echo '  Adding File: '.$plain."<br/>";
		}
	}
	}
	
	
	$source = $sitefolder.'/cache/bindings';
	if (file_exists($source))
	{
	
	$files = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($source), RecursiveIteratorIterator::SELF_FIRST);

	foreach ($files as $file)
	{
		$plain = str_replace($source,'bindings',$file);
		
		$file = str_replace('\\', '/', $file);
		$plain = str_replace('\\', '/', $plain);

		// Ignore "." and ".." folders
		if( in_array(substr($file, strrpos($file, '/')+1), array('.', '..')) )
			continue;

		$file = realpath($file);		
		
		//if ((strlen($plain) >= 13) && (substr($plain,0,13) == 'media/artags/')) continue;
		//if ((strlen($plain) >= 13) && (substr($plain,0,13) == 'media/models/')) continue;
		
		$path_parts = pathinfo($file);
		if (isset($path_parts['extension'])) {
			if ($path_parts['extension'] == 'php') continue;
		}

		if (is_dir($file) === true)
		{
			//echo 'Creating Folder: '.$plain.'/'."<br/>";
			$zip->addEmptyDir($plain . '/');
		}
		else if (is_file($file) === true)
		{
			$zip->addFromString($plain, file_get_contents($file));
			//echo '  Adding File: '.$plain."<br/>";
		}
	}
	}*/
	
	//If there IS any, backup the database SQL
	if ($result != "")
	{
		$zip->addFromString("db.sql",$result);
	}
	
	$zip->close();
	
	if (isset($_REQUEST['local']))
	{		
		//echo 'OK!';
		//exit;
	}
	//echo $filename;
	
	//exit;
	
    header("Content-Type: application/zip");
    header("Content-Disposition: attachment; filename=".$companyname." Backup.zip");
    header("Content-Length: " . filesize($filename));

    readfile($filename);
	
	unlink($filename);
	
?>