<?php

include_once(dirname(__FILE__).'/../../includes/zip.lib.php');
include_once(dirname(__FILE__).'/../../includes/dbc.php');
include_once(dirname(__FILE__).'/CreateAddon.php');

//ini_set('memory_limit', '100M');

function CreateZipFromDir(&$Zip, $Path, $ZipPath)
{
  $FileList = scandir($Path);
  foreach($FileList as $FileName)
  {
    if(file_exists($Path.$FileName) and ($FileName != '.') and ($FileName != '..'))
    {
      if(is_dir($Path.$FileName)) CreateZipFromDir($Zip, $Path.$FileName.'/', $ZipPath.$FileName.'/');
        else $Zip->addFile(file_get_contents($Path.$FileName), $ZipPath.$FileName);
    }
  }
}

function OutputAoWoWToFile($ExportId)
{
  global $System, $Config;

  $Output = '';
  $Export = new Export($System);
  $Export->Id = $ExportId;
  $Export->Init();
  if(function_exists('gzcompress'))
  {
    $SaveFilename = $Export->TempDir.'CzAoWoW_SQL.zip';
    $SQLFilename = 'CzAoWoW_SQL.sql';
    $BufferZip = $Export->ExportToAoWoWSQL();
    $ZipFile = new zipfile();
    $ZipFile->addFile($BufferZip, $SQLFilename);
    $Buffer = $ZipFile->file();
    file_put_contents($SaveFilename, $Buffer);
  } else $Output .= ShowMessage('Funkce pro tvorbu Zip souboru není podporována.', MESSAGE_CRITICAL);
  //$Output .= '<script type="text/javascript" language="JavaScript" charset="utf-8">'.
  //  'setTimeout("parent.location.href=\''.$SaveFilename.'\'", 3000)'.
  //  '</script>';

  $Output .= 'Pokud nezačalo stahování, soubor by mělo jít stáhnout pomocí tohoto odkazu: '.
    '<a href="'.$System->Link('/'.$Export->TempDirRelative.'CzAoWoW_SQL.zip').'">'.$SQLFilename.'</a><br />'.
    'Pokud se vám zdá, že filtr na export nefunguje, vymažte si vyrovnávací paměť prohlížeče a zkuste stáhnout soubor znovu.';
  return($Output);
}

function OutputAoWoWToHTML($ExportId)
{
  global $System, $Config;

  $Export = new Export($System);
  $Export->Id = $ExportId;

  $Output = 'Vygenerovaný SQL kód: <br /><pre class="SQLCode">'.
     htmlspecialchars($Export->ExportToAoWoWSQL()).
    '</pre>';
  return($Output );
}

function OutputMangosSQLToFile($ExportId)
{
  global $System, $Config;

  $Output = '';
  $Export = new Export($System);
  $Export->Id = $ExportId;
  $Export->Init();
  if(function_exists('gzcompress'))
  {
    $SaveFilename = $Export->TempDir.'CzWoW_SQL.zip';
    $SQLFilename = 'CzWoW_SQL.sql';
    $BufferZip = $Export->ExportToMangosSQL();
    $ZipFile = new zipfile();
    $ZipFile->addFile($BufferZip, $SQLFilename);
    $Buffer = $ZipFile->file();
    file_put_contents($SaveFilename, $Buffer);
  } else $Output .= ShowMessage('Funkce pro tvorbu Zip souboru není podporována.', MESSAGE_CRITICAL);
  //$Output .= '<script type="text/javascript" language="JavaScript" charset="utf-8">'.
  //  'setTimeout("parent.location.href=\''.$SaveFilename.'\'", 3000)'.
  //  '</script>';

  $Output .= 'Pokud nezačalo stahování, soubor by mělo jít stáhnout pomocí tohoto odkazu: '.
    '<a href="'.$System->Link('/'.$Export->TempDirRelative.'CzWoW_SQL.zip').'">'.$SQLFilename.'</a><br />'.
    'Pokud se vám zdá, že filtr na export nefunguje, vymažte si vyrovnávací paměť prohlížeče a zkuste stáhnout soubor znovu.';
  return($Output);
}

function OutputMangosSQLToHTML($ExportId)
{
  global $System;

  $Export = new Export($System);
  $Export->Id = $ExportId;
  $Export->Init();
  $Output = 'Vygenerovaný SQL kód: <br /><pre class="SQLCode">'.
    htmlspecialchars($Export->ExportToMangosSQL()).
    '</pre>';
  return($Output);
}

function OutputAddon($ExportId)
{
  global $System;

  if(function_exists('gzcompress'))
  {
    $Addon = new ExportAddon($System);
    $Addon->Id = $ExportId;
    $Addon->Init();
    $Output = $Addon->MakeAddon();

    $Output .= 'Generování addonu...<br />';
    $SaveFilename = $Addon->TempDir.'CzWoW_Addon-'.$Addon->ClientVersion['Version'].'.zip';
    $Zip = new zipfile();
    CreateZipFromDir($Zip, $Addon->TempDir.'CzWoW/', 'CzWoW/');
    $Zip->addFile(file_get_contents(dirname(__FILE__).'/files/'.$Addon->ClientVersion['Version'].'/CzWoW/OptionsFrame.xml'), 'CzWoW/OptionsFrame.xml');
    $Zip->addFile(file_get_contents(dirname(__FILE__).'/files/'.$Addon->ClientVersion['Version'].'/CzWoW/CzWoW.xml'), 'CzWoW/CzWoW.xml');
    $Zip->addFile(file_get_contents(dirname(__FILE__).'/files/'.$Addon->ClientVersion['Version'].'/CzWoW/CzWoW.toc'), 'CzWoW/CzWoW.toc');
    $Zip->addFile(file_get_contents(dirname(__FILE__).'/files/'.$Addon->ClientVersion['Version'].'/CzWoW/CzWoW.lua'), 'CzWoW/CzWoW.lua');
    $Zip->addFile(file_get_contents(dirname(__FILE__).'/files/'.$Addon->ClientVersion['Version'].'/CzWoW/GameMenuFrame.xml'), 'CzWoW/GameMenuFrame.xml');
    $Zip->addFile(file_get_contents(dirname(__FILE__).'/files/'.$Addon->ClientVersion['Version'].'/CzWoW/Localization.lua'), 'CzWoW/Localization.lua');
    $Buffer = $Zip->file();
    file_put_contents($SaveFilename, $Buffer);
    $Output .= 'Hotovo<br /><br />';
  } else $Output = ShowMessage('Funkce pro tvorbu Zip souboru není podporována.', MESSAGE_CRITICAL);
  //$Output .= '<script type="text/javascript" language="JavaScript" charset="utf-8">'.
  //  'setTimeout("parent.location.href=\''.$SaveFilename.'\'", 3000)'.
  //  '</script>';

  $Output .= 'Soubor ke stažení: '.
    '<a href="'.$System->Link('/'.$Addon->TempDirRelative.'CzWoW_Addon-'.$Addon->ClientVersion['Version'].'.zip').'">CzWoW_Addon-'.$Addon->ClientVersion['Version'].'.zip</a><br />'.
    'Pokud se vám zdá, že filtr na export nefunguje, vymažte si vyrovnávací paměť prohlížeče a zkuste stáhnout soubor znovu.';
  $Output .= '<br /><strong>Použití ve hře</strong><br />Menu addonu ve hře vyvoláte povelem /czwow.';
  return($Output);
}

function OutputXMLToFile($ExportId)
{
  global $Config, $System;

  $Output = '';
  $Export = new Export($System);
  $Export->Id = $ExportId;
  $Export->Init();
  if(function_exists('gzcompress'))
  {
    $SaveFilename = $Export->TempDir.'CzWoW_XML.zip';
    $SQLFilename = 'CzWoW_XML.sql';
    $BufferZip = $Export->ExportToXML();
    $ZipFile = new zipfile();
    $ZipFile->addFile($BufferZip, $SQLFilename);
    $Buffer = $ZipFile->file();
    file_put_contents($SaveFilename, $Buffer);
  } else $Output .= ShowMessage('Funkce pro tvorbu Zip souboru není podporována.', MESSAGE_CRITICAL);
  //$Output .= '<script type="text/javascript" language="JavaScript" charset="utf-8">'.
  // 'setTimeout("parent.location.href=\''.$SaveFilename.'\'", 3000)'.
  // '</script>';

  $Output .= 'Pokud nezačalo stahování, soubor by mělo jít stáhnout pomocí tohoto odkazu: '.
    '<a href="'.$System->Link('/'.$Export->TempDirRelative.'CzWoW_XML.zip').'">CzWoW_SQL.zip</a><br />'.
    'Pokud se vám zdá, že filtr na export nefunguje, vymažte si vyrovnávací paměť prohlížeče a zkuste stáhnout soubor znovu.';
  return($Output);
}

function OutputXMLToHTML($ExportId)
{
  global $System;

  $Export = new Export($System);
  $Export->Id = $ExportId;
  $Export->Init();
  $Output = 'Vygenerované XML: <br /><pre class="SQLCode">'.
    htmlspecialchars($Export->ExportToXML()).
    '</pre>';
  return($Output);
}

function OutputDBCToFile($ExportId)
{
  global $System;

  $Export = new Export($System);
  $Export->Id = $ExportId;
  $Export->Init();

  $Output = '';
  if(array_key_exists('Regenerate', $_POST))
  {
    $System->Database->query('UPDATE ExportTask SET TimeStart = NOW(),  `Progress`=0 , TimeFinish = NULL WHERE Export = '.$ExportId);
    $Output .= ShowMessage('Soubor zařazen znovu ke zpracování do fronty.');
    $System->ModuleManager->Modules['Log']->WriteLog('Zadání úlohy pro vygenerování dbc souboru', LOG_TYPE_DOWNLOAD);
  }

  $Output .= '<form action="?Action=View&amp;Tab=7&amp;ExportId='.$ExportId.'" method="post"><input type="submit" name="Regenerate" value="Přegenerovat"/></form><br />';
  $Output .= 'U DBC souborů export textů funguje jinak, protože generování je náročné, jsou požadavky zařazovány do fronty a postupně zpracovávány.<br />DBC soubory je nutné zabalit do souboru patch-enGB-5.MPQ uvnitř složky "DBFilesClient" a hru spouštět přes upravený spouštěcí soubor. Zabalit je můžete pomocí programu <a href="../download/mpqediten32.zip">Ladik\'s MPQ Editor</a>. Stav vygenerování můžete sledovat na této stránce.<br /><br />';

  $DbResult = $System->Database->query('SELECT * FROM ExportTask WHERE Export = '.$ExportId);
  if($DbResult->num_rows == 0)
  {
    $System->Database->query('INSERT INTO ExportTask (`Export` ,`TimeStart` ) VALUES ('.$ExportId.', NOW())');
    $System->ModuleManager->Modules['Log']->WriteLog('Zadání úlohy pro vygenerování dbc souboru', LOG_TYPE_DOWNLOAD);
    $System->Database->query('UPDATE `ExportTask` SET `Progress`=0 WHERE `Export`='.$Export->Id);
  }

  $DbResult = $System->Database->query('SELECT * FROM `ExportTask` WHERE `Export` = '.$ExportId);
  $ExportTask = $DbResult->fetch_assoc();
  if($ExportTask['TimeFinish'] > $ExportTask['TimeStart'])
  {
    $Output .= '<strong>Souhrný balík: <a href="'.$System->Link('/'.$Export->TempDirRelative.'CzWoW_DBC.zip').'">CzWoW_DBC.zip</a></strong><br/>';
    $DbResult = $System->Database->query('SELECT `Group`.* FROM `ExportGroup` JOIN `Group` ON `Group`.`Id` = `ExportGroup`.`Group` WHERE `ExportGroup`.`Export`='.$Export->Id.' AND `Group`.`DBCFileName` != ""');
    while($Group = $DbResult->fetch_assoc())
    {
      if(file_exists($Export->TempDir.'dbc/'.$Group['DBCFileName'].'.dbc'))
        $Output .= '<a href="'.$System->Link('/'.$Export->TempDirRelative.'dbc/'.$Group['DBCFileName'].'.dbc').'">'.$Group['DBCFileName'].'.dbc</a><br/>';
    }
  } else {
    $Output .= ShowProgress($Export);

  }
  return($Output);
}

function ShowProgress($Export)
{
  global $System;

  $Output = '';
  $Output .= 'Fronta zpracování exportů. Zobrazuje procenta dokončení: <br /><br />';

  $Output .= '<script src="'.$System->Link('/style/jquery.js').'"></script>'.
    '<script>'.
    '$(document).ready(function() {'.
    'var refreshId = setInterval(function() {'.
    '$("#progress").load("'.$System->Link('/Modules/Export/Progress.php?RedirectId='.$_GET['ExportId']).'"); '.
    '}, 1000);'.
    '});'.
    '</script>';

  $Output .= ' <strong><div id="progress"></div></strong><br />';

  $DbResult = $System->Database->query('SELECT * FROM `ExportTask` '.
    'LEFT JOIN `Export` ON `Export`.`Id` = `ExportTask`.`Export` '.
    'WHERE ((`Export`.`OutputType` = 9) OR (`Export`.`OutputType` = 10)) AND (`TimeFinish` IS NULL) AND (`TimeStart` < (NOW() - 10000))');
  if($DbResult->num_rows > 0)
  {
    $System->ModuleManager->Modules['Log']->WriteLog('ProcesTask nepracuje přes 2 hodiny, pravděpodobně nepracuje!', LOG_TYPE_ERROR);
  }
  return ($Output);
}

function OutputEXEToFile($ExportId)
{
  global $System;

  $Export = new Export($System);
  $Export->Id = $ExportId;
  $Export->Init();
  $Export->LoadFilters();

  $Output = '';
  if(array_key_exists('Regenerate', $_POST))
  {
    $System->Database->query('UPDATE ExportTask SET TimeStart = NOW(),  `Progress`=0,  TimeFinish = NULL WHERE Export = '.$ExportId);
    $Output .= ShowMessage('Soubor zařazen znovu ke zpracování do fronty.');
    $System->ModuleManager->Modules['Log']->WriteLog('Zadání úlohy pro vygenerování exe souboru', LOG_TYPE_DOWNLOAD);
  }

  $Output .= '<form action="?Action=View&amp;Tab=7&amp;ExportId='.$ExportId.'" method="post"><input type="submit" name="Regenerate" value="Přegenerovat"/></form><br />';
  $Output .= 'U souhrné instalace češtiny funguje export textů jinak, protože generování je náročné, jsou požadavky zařazovány do fronty a postupně zpracovávány.<br /><br />';

  $DbResult = $System->Database->query('SELECT * FROM ExportTask WHERE Export = '.$ExportId);
  if($DbResult->num_rows == 0)
  {
    $System->Database->query('INSERT INTO ExportTask (`Export` ,`TimeStart` ) VALUES ('.$ExportId.', NOW())');
    $System->ModuleManager->Modules['Log']->WriteLog('Zadání úlohy pro vygenerování dbc souboru', LOG_TYPE_DOWNLOAD);
  }

  $DbResult = $System->Database->query('SELECT * FROM `ExportTask` WHERE `Export` = '.$ExportId);
  $ExportTask = $DbResult->fetch_assoc();
  if($ExportTask['TimeFinish'] > $ExportTask['TimeStart'])
  {
    $Output .= '<strong>Souhrný EXE balík: <a href="'.$System->Link('/'.$Export->TempDirRelative.'Instalace_CzechWoW_'.$Export->ClientVersion['Version'].'.exe').'">Instalace_CzechWoW_'.$Export->ClientVersion['Version'].'.exe</a></strong><br/>';
  } else {
    $Output .= ShowProgress($Export);
  }
  return($Output);
}

function OutputLua($ExportId)
{
  global $System, $Config;

  $Export = new Export($System);
  $Export->Id = $ExportId;
  $Export->Init();

  if(function_exists('gzcompress'))
  {
    $Output = 'Generování lua souborů...<br />';
    $Export->ExportToLua();
    $SaveFilename = $Export->TempDir.'CzWoW_Lua.zip';
    $ZipFile = new zipfile();
    CreateZipFromDir($ZipFile, $Export->TempDir.'lua/', '');
    $Buffer = $ZipFile->file();
    file_put_contents($SaveFilename, $Buffer);
    $Output .= 'Hotovo<br /><br />';
  } else $Output = ShowMessage('Funkce pro tvorbu Zip souboru není podporována.', MESSAGE_CRITICAL);
  //$Output .= '<script type="text/javascript" language="JavaScript" charset="utf-8">'.
  //  'setTimeout("parent.location.href=\''.$SaveFilename.'\'", 3000)'.
  //  '</script>';

  $Output .= '<strong>Soubory:</strong><br/>'.
    'Souhrný archív <a href="'.$System->Link('/'.$Export->TempDirRelative.'CzWoW_Lua.zip').'">CzWoW_Lua.zip</a><br />';
  $DbResult = $System->Database->query('SELECT `Group`.* FROM `ExportGroup` JOIN `Group` ON `Group`.`Id` = `ExportGroup`.`Group` WHERE `ExportGroup`.`Export`='.$Export->Id.' AND `Group`.`LuaFileName` != ""');
  while($Group = $DbResult->fetch_assoc())
  {
    $Output .= '<a href="'.$System->Link('/'.$Export->TempDirRelative.'lua/'.$Group['LuaFileName'].'.lua').'">'.$Group['LuaFileName'].'.lua</a><br/>';
  }
  $Output .= '<br /><br /><strong>Použití ve hře</strong><br />Ze souborů vytvořte MPQ archív a nahrajte ho do hry do podsložky jako Data/enUS/patch-enUS-5.MPQ nebo Data/enUS/patch-enGB-5.MPQ. Pro starší verze hry než 3.2.0 je nutné spouštět hru pomocí programu WoWMe.exe (WoW Model Editor Fix).';
  return($Output);
}

function ExportOutput($ExportId, $Type)
{
  if($Type == 1) $Output = OutputMangosSQLToHTML($ExportId);
  else if($Type == 2) $Output = OutputMangosSQLToFile($ExportId);
  else if($Type == 3) $Output = OutputAoWoWToHTML($ExportId);
  else if($Type == 4) $Output = OutputAoWoWToFile($ExportId);
  else if($Type == 5) $Output = OutputXMLToHTML($ExportId);
  else if($Type == 6) $Output = OutputXMLToFile($ExportId);
  else if($Type == 7) $Output = OutputAddon($ExportId);
  else if($Type == 8) $Output = OutputLua($ExportId);
  else if($Type == 9) $Output = OutputDBCToFile($ExportId);
  else if($Type == 10) $Output = OutputEXEToFile($ExportId);
  else $Output = ShowMessage('Nebyl vybrán žádný formát výstupu.', MESSAGE_CRITICAL);
  return($Output);
}
