<?php

include('includes/global.php');

function ShowFilter($GroupId = 0)
{
  global $System, $TranslationTree;
  
  $Filter = array('SQL' => '');
  
  $Output = '<form action="?" method="post">'.
  '<table class="BaseTable"><tr>'.
  '<th>Zpracování</th>'.
  '<th>Skupina</th>'.
  '<th>Verze</th>'.
  '<th>Jazyk</th>'.
  '<th>Překladatel</th>'.
  '<th>Slova</th>'.
  '<th>Položka</th>'.
  '<th></th></tr><tr>';

  // State
  $Filter['State'] = GetParameter('state', 0, true, true);  
  $Output .= '<td><select name="state">';
  if($Filter['State'] == 0) $Selected = ' selected="selected"';
    else $Selected = '';
  $Output .= '<option value="0"'.$Selected.'>Všechny</option>';
  if($Filter['State'] == 1) $Selected = ' selected="selected"';
    else $Selected = '';
  $Output .= '<option value="1"'.$Selected.'>Nepřeložené</option>';
  if($Filter['State'] == 2) $Selected = ' selected="selected"';
    else $Selected = '';
  $Output .= '<option value="2"'.$Selected.'>Přeložené</option>';
  if($Filter['State'] == 3) $Selected = ' selected="selected"';
    else $Selected = '';
  $Output .= '<option value="3"'.$Selected.'>Rozpracované</option>';
  if($Filter['State'] == 4) $Selected = ' selected="selected"';
    else $Selected = '';
  $Output .= '<option value="4"'.$Selected.'>Anglické</option>';
  $Output .= '</select></td>';

  // Translation group
  if($GroupId == 0)
  {
    $Filter['Group'] = GetParameter('group', 0, true, true);  
    if($Filter['Group'] != 0)
    {
      if(isset($TranslationTree[$Filter['Group']]) == false) ErrorMessage('Překladová skupina dle zadaného Id neexistuje.'); 
      $Table = $TranslationTree[$Filter['Group']]['TablePrefix'];
    }
  } else 
  {
    $Filter['Group'] = $GroupId;
    $Table = $TranslationTree[$Filter['Group']]['TablePrefix'];
  }
    
  $Output .= '<td><select name="group" style="width: 80px">';
  if($Filter['Group'] == 0) $Selected = ' selected="selected"';
    else $Selected = '';
  $Output .= '<option value="0"'.$Selected.'>Všechny</option>';
  $DbResult = $System->Database->query('SELECT `Id`,`Name` FROM `Group` ORDER BY `Name`');
  while($Group = $DbResult->fetch_assoc())
  {
    if($Group['Id'] == $Filter['Group']) $Selected = ' selected="selected"';
      else $Selected = '';
    $Output .= '<option value="'.$Group['Id'].'"'.$Selected.'>'.$Group['Name'].'</option>';
  }
  $Output .= '</select></td>';
  
  // Version
  $Filter['Version'] = GetParameter('version', 0, true, true);  
  if($Filter['Version'] != 0)
  {
    $DbResult = $System->Database->query('SELECT `Id`, `BuildNumber`,`Version` FROM `ClientVersion` WHERE (`Imported` = 1) AND (`Id` ='.$Filter['Version'].')');
    if($DbResult->num_rows > 0)
    {
      $DbRow = $DbResult->fetch_assoc();
      $Filter['BuildNumber'] = $DbRow['BuildNumber'];
    } else ErrorMessage('Zadaná verze klienta nenalezena');
  }
  $Output .= '<td><select name="version">';
  if($Filter['Version'] == 0) $Selected = ' selected="selected"';
    else $Selected = '';
  $Output .= '<option value="0"'.$Selected.'>Všechny</option>';
  $DbResult = $System->Database->query('SELECT `Id`, `BuildNumber`,`Version` FROM `ClientVersion` WHERE `Imported` = 1 ORDER BY `BuildNumber` DESC');
  while($Version = $DbResult->fetch_assoc())
  {
    if($Version['Id'] == $Filter['Version']) $Selected = ' selected="selected"';
      else $Selected = '';
    $Output .= '<option value="'.$Version['Id'].'"'.$Selected.'>'.$Version['Version'].'</option>';
  }
  $Output .= '</select></td>';
  if($Filter['Version'] != 0) $VersionFilter = ' AND (`VersionStart` <= '.$Filter['BuildNumber'].') AND (`VersionEnd` >= '.$Filter['BuildNumber'].')';
    else $VersionFilter = '';
    //else $Filter['SQL'] .= ' AND '; DISTINCT(Entry)
  
  // Language
  $Filter['Language'] = GetParameter('lang', 0, true, true);  
  $Output .= '<td><select name="lang">';
  if($Filter['Language'] == 0) $Selected = ' selected="selected"';
    else $Selected = '';
  $Output .= '<option value="0"'.$Selected.'>Všechny</option>';
  $DbResult = $System->Database->query('SELECT `Id`, `Name` FROM `Language` WHERE `Enabled` = 1 ORDER BY `Name`');
  while($Language = $DbResult->fetch_assoc())
  {
    if($Language['Id'] == $Filter['Language']) $Selected = ' selected="selected"';
      else $Selected = '';
    $Output .= '<option value="'.$Language['Id'].'"'.$Selected.'>'.$Language['Name'].'</option>';
  }
  $Output .= '</select></td>';
  if($Filter['Language'] != 0) $LanguageFilter = ' AND (`Language` = '.$Filter['Language'].')';
    else $LanguageFilter = '';

  // User
  $Filter['User'] = GetParameter('user', 0, true, true);  
  $Output .= '<td><select name="user" style="width: 80px">';
  if($Filter['User'] == 0) $Selected = ' selected="selected"';
    else $Selected = '';
  $Output .= '<option value="0"'.$Selected.'>Všichni</option>';
  $DbResult = $System->Database->query('SELECT `Id`, `Name` FROM `User` ORDER BY `Name`');
  while($User = $DbResult->fetch_assoc())
  {
    if($User['Id'] == $Filter['User']) $Selected = ' selected="selected"';
      else $Selected = '';
    $Output .= '<option value="'.$User['Id'].'"'.$Selected.'>'.$User['Name'].'</option>';
  }
  $Output .= '</select></td>';
  if($Filter['User'] != 0) $UserFilter = ' AND (`User` = '.$Filter['User'].')';
    else $UserFilter = '';
  
  // Words
  $Filter['Text'] = GetParameter('text', '', false, true);  
  $Output .= '<td><input name="text" type="text" style="width: 60px;" value="'.$Filter['Text'].'"></td>';
  if($Filter['Text'] != '') 
  {
    $Items = array('(`ID` LIKE "%'.$Filter['Text'].'%")', '(`Entry` LIKE "%'.$Filter['Text'].'%")');
    if($Filter['Group'] != 0)
    foreach($TranslationTree[$Filter['Group']]['Items'] as $GroupItem)
    if($GroupItem['Visible'] == 1)
      $Items[] = '(`'.$GroupItem['Column'].'` LIKE "%'.$Filter['Text'].'%")';
    $Filter['SQL'] .= ' AND ('.implode(' OR ', $Items).')';
  }

  // Entry
  $Filter['Entry'] = GetParameter('entry', '', false, true);  
  $Output .= '<td><input name="entry" type="text" style="width: 60px;" value="'.$Filter['Entry'].'"></td>';
  if($Filter['Entry'] != '') 
  {
    $Filter['SQL'] .= ' AND (`Entry` = "'.$Filter['Entry'].'")';
  }

  if($Filter['Group'] != 0)
  {
    if($Filter['State'] == 0) $Filter['SQL'] .= $UserFilter.$VersionFilter.'';
    else if($Filter['State'] == 1) $Filter['SQL'] .= $VersionFilter.' AND (`Language` = 0) AND NOT EXISTS(SELECT 1 FROM `'.$Table.'` AS `Sub` WHERE (`Sub`.`Language` <> 0)'.$LanguageFilter.$UserFilter.' AND (`Sub`.`Entry` = `T`.`Entry`) AND (`Sub`.`Complete` = 1) AND (`Sub`.`VersionStart` = `T`.`VersionStart`) AND (`Sub`.`VersionEnd` = `T`.`VersionEnd`))';
    else if($Filter['State'] == 2) $Filter['SQL'] .= $UserFilter.$LanguageFilter.$VersionFilter.' AND (`Complete` = 1)';
    else if($Filter['State'] == 3) $Filter['SQL'] .= $UserFilter.$LanguageFilter.$VersionFilter.' AND (`Language` != 0) AND (`Complete` = 0)';
    else if($Filter['State'] == 4) $Filter['SQL'] .= $VersionFilter.' AND (`Language` = 0)';
  }

  /*
  // Ownership
  if(array_key_exists('owner', $_GET) and is_numeric($_GET['owner'])) $Filter['Owner'] = $_GET['owner']; 
    else $Filter['Owner'] = 0;  
  echo(' <td><select name="owner">');
  if($Filter['Owner'] == 0) $Selected = ' selected="selected"';
    else $Selected = '';
  echo('<option value="0"'.$Selected.'>Všech</option>');
  if($Filter['Owner'] == 1) $Selected = ' selected="selected"';
    else $Selected = '';
  echo('<option value="1"'.$Selected.'>Překladatelův tým</option>');
  if($Filter['Owner'] == 2) $Selected = ' selected="selected"';
    else $Selected = '';
  echo('<option value="2"'.$Selected.'>Překladatele</option>');
  echo('</select></td>');
  if(($Filter['Owner'] == 2) AND ($Filter['User'] != 0)) $Filter['SQL'] .= ' AND (`User` = '.$Filter['User'].')';
  */
  
  $Output .= '<td><input type="submit" value="Filtrovat"/></td>';
  $Output .= '</tr></table>';
  $Output .= '</form><br/>';
  $Filter['Output'] = $Output;
  return($Filter);
}

function ShowTranslationList($Filter)
{
  global $System, $TranslationTree;
 
  echo($Filter['Output']);
  $Table = $TranslationTree[$Filter['Group']]['TablePrefix'];
  
  $Query = 'SELECT `T`.*, (SELECT `User`.`Name` FROM `User` WHERE `User`.`ID` = `T`.`User`) AS `UserName` FROM `'.$Table.'` AS `T` WHERE 1 '.$Filter['SQL'];
  //echo($Query);
  
  // Get total item count
  $DbResult = $System->Database->query('SELECT COUNT(*) FROM ('.$Query.') AS `TT`');
  $DbRow = $DbResult->fetch_row();
  $PageList = GetPageList($DbRow[0]);    
 
  echo($PageList['Output']);
  $TableColumns = array(
    array('Name' => 'ID', 'Title' => 'Číslo'), 
    array('Name' => 'Entry', 'Title' => 'Položka'), 
    array('Name' => $TranslationTree[$Filter['Group']]['Items'][0]['Column'], 'Title' => 'Název'), 
    array('Name' => 'VersionStart', 'Title' => 'Verze'), 
    array('Name' => 'UserName', 'Title' => 'Překladatel'),
  );
    
  $Order = GetOrderTableHeader($TableColumns, 'VersionStart', 1);
  echo('<table class="BaseTable">');
  echo($Order['Output']);
   
  $DbResult = $System->Database->query($Query.' '.$Order['SQL'].' '.$PageList['SQLLimit']);
  while($Line = $DbResult->fetch_assoc()) 
  {
    echo('<tr><td><a href="form.php?group='.$Filter['Group'].'&amp;ID='.$Line['ID'].'">'.$Line['ID'].'</a></td><td>'.$Line['Entry'].'</td>'.
      '<td>'.htmlspecialchars($Line[$TranslationTree[$Filter['Group']]['Items'][0]['Column']]).'</td>'.
      '<td>'.GetVersionWOW($Line['VersionStart']).'-'.GetVersionWOW($Line['VersionEnd']).'</td>'.
      '<td>'.$Line['UserName'].'</td>');
    echo('</tr>');
  }
  echo('</table>');     
  
  echo($PageList['Output']);  
}

function ShowGroupList($Filter)
{
  global $System, $TranslationTree;
  
  echo($Filter['Output']);

  echo('<table class="BaseTable"><tr><th>Skupina</th><th>Počet</th></tr>');
  $Total = 0;
  foreach($TranslationTree as $Group)
    if($Group['TablePrefix'] != '')
    {
      $Filter = ShowFilter($Group['Id']);
      $ID = $System->Database->query('SELECT COUNT(*) FROM `'.$Group['TablePrefix'].'` AS `T` WHERE 1 '.$Filter['SQL']);
      $Line = $ID->fetch_row();
      echo('<tr><td><a href="?group='.$Group['Id'].'">'.$Group['Name'].'</td><td>'.$Line[0].'</a></tr>');
      $Total += $Line[0];
    }
  echo('<tr><td><strong>Celkem</strong></td><td><strong>'.$Total.'</strong></td></tr>');
  echo('</table>');
}

function ShowGroupTypeList()
{
  global $Database, $User;
  
  $DbResult = $Database->SQLCommand('SELECT COUNT(*) FROM `Group`');
  $DbRow = mysql_fetch_row($DbResult);
  $PageList = GetPageList($DbRow[0]);  
  echo('<h3>Seznam překladových skupin</h3>');
  echo($PageList['Output']);
  
  echo('<table class="BaseTable">');
  $TableColumns = array(
    array('Name' => 'Name', 'Title' => 'Jméno'), 
    array('Name' => 'SourceType', 'Title' => 'Typ zdroje'), 
    array('Name' => '', 'Title' => 'Zdroje'), 
    array('Name' => 'LastImport', 'Title' => 'Datum posledního importu'), 
    array('Name' => 'LastVersion', 'Title' => 'Verze posledního importu'),
  );

  $Order = GetOrderTableHeader($TableColumns, 'Name', 0);
  echo($Order['Output']);

  $ID = $Database->SQLCommand('SELECT * FROM `Group`'.$Order['SQL'].$PageList['SQLLimit']);
  while($Group = mysql_fetch_assoc($ID)) 
  {
    echo('<tr><td><a href="?group='.$Group['Id'].'&amp;action=filter">'.$Group['Name'].'</a></td><td>'.$Group['SourceType'].'</td><td>');
    if($Group['MangosTable'] != '') echo($Group['MangosTable'].'.sql ');
    if($Group['DBCFileName'] != '') echo($Group['DBCFileName'].'.dbc ');
    if($Group['LuaFileName'] != '') echo($Group['LuaFileName'].'.lua ');
    echo('</td><td><a title="Změny po posledním importu u vybrané překladové skupiny" href="log.php?group='.$Group['Id'].'&amp;type=11">'.HumanDate($Group['LastImport']).'</a></td><td>'.GetVersionWOW($Group['LastVersion']).'</td></tr>');
  }
  echo('</table>');
  echo('<br /><a title="Záznam změn po importu" href="log.php?type=11">Záznam změn v textech při importu</a><br/>');
  //if($User->Licence(LICENCE_ADMIN)) echo('<a href="?action=groupadd">Přidat překladovou skupinu</a>');
}

function ShowMenu()
{
  global $Database, $User, $TranslationTree;
  
  $GroupId = GetParameter('group', 0, true);
  if($GroupId == 0) ErrorMessage('Skupina nenalezena');
  $Table = $TranslationTree[$GroupId]['TablePrefix'];
  
  echo('<h3>Základní filtrování textů</h3><br/>'.
    '<table class="BaseTable"><tr><th>Odkaz</th><th>Popis</th></tr>'.
    '<tr><td><a title="Všechny dostupné texty ve skupině" href="?group='.$GroupId.'&amp;state=4">Všechny</a></td>'.
    '<td>Zobrazit všechny dostupné anglické texty ve skupině.</td></tr>'.
    '<tr><td><a title="Přeložené texty, můžete zde hlasovat, nebo text opravovat" href="?group='.$GroupId.'&amp;state=2">Přeložené</a></td>'.
    '<td>Zobrazit pouze již přeložené texty.</td></tr>'.
    '<tr><td><a title="Nepřeložené texty" href="?group='.$GroupId.'&amp;state=1">Nepřeložené</a></td>'.
    '<td>Dosud nepřeložené texty, které je potřeba přeložit.</td></tr>'.
    '<tr><td><a title="Nedokončené texty" href="?group='.$GroupId.'&amp;state=3">Nedokončené</a></td>'.
    '<td>Texty označené jako rozpracované.</td></tr>');

  if($User->Licence(LICENCE_USER)) 
  {
    echo('<tr><td><a title="Nedokončené texty" href="?group='.$GroupId.'&amp;state=3&amp;user='.$User->Id.'">Moje nedokončené</a></td>
    <td>Nedokončené texty přihlášeného uživatele</td></tr>
    <tr><td><a title="Přeložené texty přihlášeného uživatele" href="?group='.$GroupId.'&amp;state=2&amp;user='.$User->Id.'">Moje přeložené</a></td>
    <td>Přeložené texty přihlášeného uživatele</td></tr>');
  }       

  echo('<tr><td><form action="?group='.$GroupId.'&amp;entry=" method="post"><div>'.
    '<input type="text" name="text" size="8" />'.
    '<input type="submit" value="Hledat" />'.
    '</div></form>'.
    '</td><td>Vyhledat pomocí textu</td></tr>');
          
  echo('<tr><td><form action="?group='.$GroupId.'&amp;text=" method="post"><div>'.
    '<input type="text" name="entry" size="8" />'.
    '<input type="submit" value="Hledat" />'.
    '</div></form>'.
    '</td><td>Zobrazit podle ID textu v databázi MaNGOSu</td></tr>');
                                                
  echo('</table>');
}

function ShowGroupAdd()
{
  global $User;
  
  if($User->Licence(LICENCE_ADMIN)) 
  {
    echo('<h3>Vložení nové skupiny</h3>');
    echo('<form action="?action=groupadd" method="post">'.
    'Jméno: <input type="text" name="Name"/><br/>'.
    'Název tabulky: <input type="text" name="TablePrefix"/><br/>'.
    '</form>');
  } else echo('Nemáte oprávnění');
}

ShowPage();

$Action = GetParameter('action', '');
if($Action == 'filter') ShowMenu();
else if($Action == 'grouplist') ShowGroupTypeList();
else if($Action == 'groupadd') ShowGroupAdd();
else 
{
  $Filter = ShowFilter();
  //print_r($Filter);
  if($Filter['Group'] > 0) ShowTranslationList($Filter);
    else ShowGroupList($Filter);
}   

ShowFooter();

?>
  
