Changeset 59 for trunk/download.php


Ignore:
Timestamp:
Feb 3, 2009, 9:48:32 PM (15 years ago)
Author:
george
Message:
  • Upraveno: Celkově přepracován systém exportu a generování SQL aktualizačních dat. Nově rozděleno do tří kroků. Uživatel vybírá, od kterých uživatelů se překlady budou načítat a mění pomocí jejich pořadí prioritu a tvoří tak svůj export. Nastavení je ukládáno do databáze.
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/download.php

    r49 r59  
    11<?php
    22
     3session_start();
     4
     5if(!array_key_exists('ExportSetting', $_SESSION))
     6  $_SESSION['ExportSetting'] = $_COOKIE['ExportSetting'];
     7 
     8setcookie('ExportSetting', $_SESSION['ExportSetting']);
    39include('includes/global.php');
    4 
    5 if(array_key_exists('Type', $_POST))
    6 {
    7   include('includes/zip.lib.php');
    8   include('export.php');   
     10include('includes/zip.lib.php');
     11include('export.php');   
     12
     13
     14function CheckBox($Name, $Checked = false)
     15{
     16  if($Checked) $Checked = ' checked="1"'; else $Checked = '';
     17  return('<input type="checkbox" value="1" name="'.$Name.'"'.$Checked.' />');
     18}
     19
     20function RadioButton($Name, $Value, $Checked = false)
     21{
     22  if($Checked) $Checked = ' checked="1"'; else $Checked = '';
     23  return('<input type="radio" name="'.$Name.'" value="'.$Value.'"'.$Checked.' />');
     24}
     25
     26function SelectOption($Name, $Text, $Selected = false)
     27{
     28  if($Selected) $Selected = ' selected="1"'; else $Selected = '';
     29  return('<option type="checkbox" value="'.$Name.'"'.$Selected.'/>'.$Text.'</option>');
     30}
     31
     32if(array_key_exists('UserID', $_SESSION) and ($_SESSION['UserID'] != ''))
     33{
     34  $DbResult = $Database->SQLCommand('SELECT ExportSetting FROM user WHERE ID='.$_SESSION['UserID']);
     35  $DbRow = mysql_fetch_assoc($DbResult);
     36  $ExportSetting = unserialize($DbRow['ExportSetting']);
     37
     38  //print_r($_POST);
    939} else
     40{
     41  $ExportSetting = unserialize($_SESSION['ExportSetting']);
     42}
     43
     44switch(@$_GET['action'])
     45{
     46  case 'result':
     47    $ExportSetting['Export'] = @$_POST['Export'];
     48        switch($ExportSetting['Export'])
     49        {
     50          case 'Zip':
     51        if(function_exists('gzcompress'))
     52        {
     53          $SaveFilename = 'tmp/SqlTranslate.zip';
     54          $SQLFilename = 'tmp/SqlTranslate.sql';       
     55          $BufferZip = Export($ExportSetting);
     56          $ZipFile = new zipfile();
     57          $ZipFile->addFile($BufferZip, $SQLFilename);
     58          $Buffer = $ZipFile->file();
     59
     60          //  echo $Buffer.'<br><br><br>';
     61          $FileHandle = fopen($SaveFilename, 'w');
     62          $WriteResult = fwrite($FileHandle, $Buffer);
     63          fclose($FileHandle);
     64          //  header("Location: ".$save_filename);
     65        } else echo('Funkce pro tvorbu Zip souboru není podporována!');
     66        echo('<script type="text/javascript" language="JavaScript" charset="utf-8">'.
     67          'setTimeout("parent.location.href=\''.$SaveFilename.'\'", 1000)'.
     68          '</script>');
     69     
     70        echo('Pokud nezačalo stahování, soubor by mělo jít stáhnout pomocí tohoto odkazu:'.
     71          '<a href="'.$SaveFilename.'">'.$SaveFilename.'</a><br />'.
     72          '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.');
     73            break;
     74          case 'Display':
     75        echo('Vygenerovaný SQL kód: <br /><pre class="SQLCode">');
     76        echo(htmlspecialchars(Export($ExportSetting)));
     77        echo('</pre>');
     78            break;
     79          case 'Server':
     80            if(Licence(LICENCE_ADMIN))
     81                {
     82                  $Buffer = Export($ExportSetting);
     83          $Database->SelectDatabase($Config['Database']['DatabaseMangos']);   
     84          $BufferArray = explode("\n", $Buffer);
     85                  echo('Přenášení dat do serveru...<br />');
     86          foreach($BufferArray as $Line)
     87          {
     88                        $Database->SQLCommand($Line);
     89                        echo('.');
     90                  }
     91          echo("<br />Hotovo<br />");
     92                } else echo('Nemáte oprávnění.');
     93            break;
     94        }
     95    WriteLog('Generování SQL výstupu: Typ exportu: <b>'.$ExportSetting['Export'].'</b>, Diakritika: <b>'.$ExportSetting['Diacritics'].'</b>', 2);
     96    break;
     97  case 'output':
     98    if(array_key_exists('groups', $_POST)) $ExportSetting['groups'] = $_POST['groups'];
     99    $ExportSetting['Diacritics'] = array_key_exists('Diacritics', $_POST);
     100    $ExportSetting['language-cz'] = array_key_exists('language-cz', $_POST);
     101    $ExportSetting['language-sk'] = array_key_exists('language-sk', $_POST);
     102    $ExportSetting['language-other'] = array_key_exists('language-other', $_POST);
     103    echo('<strong>Krok 3. - Typ výstupu</strong><br /><br />');
     104    echo('<form action="?action=result" method="post">'.
     105          '<table width="100%"><tr><td>'.
     106      '<fieldset><legend>Forma výstupu</legend>'.
     107          RadioButton('Export', 'Zip', $ExportSetting['Export'] == 'Zip').'ZIP soubor<br />'.
     108          //RadioButton('Export', 'Addon', $ExportSetting['Export'] == 'Addon').'WoW klient addon<br />'.
     109      RadioButton('Export', 'Display', $ExportSetting['Export'] == 'Display').'Přímo zobrazit<br />');
     110    if(Licence(LICENCE_ADMIN))
     111      echo(RadioButton('Export', 'Server', $ExportSetting['Export'] == 'Server').'Poslat přímo na server (pouze admin)<br />');
     112          //echo('
     113    echo('</fieldset><br /></td><td>Zvolte způsob, jakým mají být získána výstupní SQL data. V případě přímého zobrazení může být do vašeho prohlížeče přenášeno vysoké množství data což může vést k jeho přetížení.</td></tr></table>');
     114        echo('<br /><input type="submit" value="Dokončit" />');
     115        echo('</form>');
     116        break;
     117  case 'parameters':
     118    $ExportSetting['users-order'] = $_POST['users-order'];
     119    $ExportSetting['users-selection'] = array();
     120    $UsersList = explode(',', $_POST['users-order']);
     121        foreach($UsersList as $Index => $Item)
     122        {
     123          if(array_key_exists('user_'.$Item, $_POST)) $ExportSetting['users-selection'][] = $Item;
     124        }
     125        //if(array_key_exists('users', $_POST)) $ExportSetting['users'] = $_POST['users'];
     126    echo('<strong>Krok 2. - Volba parametrů</strong><br /><br />');
     127    echo('<form action="?action=output" method="post">');
     128        echo('<table width="100%"><tr><td>');
     129    echo('<fieldset><legend>Jazyk</legend>'.
     130      CheckBox('Diacritics', $ExportSetting['Diacritics'] == 1).'Včetně diakritiky<br /><br />'); 
     131    //echo('<input type="checkbox" name="Use" checked="true">Přidat výchovýběr databáze.<br />');
     132
     133    echo(CheckBox('language-cz', $ExportSetting['language-cz'] == 1).'Český překlad<br />'.
     134      CheckBox('language-sk', $ExportSetting['language-sk'] == 1).'Slovenský překlad<br />'.
     135      CheckBox('language-other', $ExportSetting['language-other'] == 1).'Jiné jazyky<br />');
     136    echo('</fieldset><br /></td><td>Vyberte jaké jazyky se mají uvažovat při exportu.</td></tr><tr><td><fieldset><legend>Skupiny textů</legend>');
     137    echo('<select name="groups[]" size="15" style="width: 400px;" multiple="1">');
     138    foreach($TranslationTree as $Group)
     139      if($Group['TablePrefix'] != '')
     140        echo(SelectOption($Group['Id'], $Group['Name'].' ('.$Group['TablePrefix'].')', in_array($Group['Id'], $ExportSetting['groups'])));
     141
     142        echo('</select></fieldset><br /></td><td>Vyberte skupiny textů, z kterých bude sestaven export. Přidržením CTRL nebo SHIFT můžete provádět výběr více položek.</td></tr></table><input type="submit" value="Pokračovat" />');
     143        echo('</form>');
     144    break;
     145  default:
     146    echo('<strong>Krok 1. - Výběr překladatelů</strong><br /><br />');
     147        echo('<script type="text/javascript" src="style/jquery.js"></script>
     148<script type="text/javascript" src="style/jquery-ui.js"></script>
     149<script type="text/javascript">
     150$(document).ready(function()
     151{
     152        $("#users-table").sortable({ items: "tr", sort: SortComplete });       
     153        $("#users-order").val($("#users-table").sortable(\'toArray\'));
     154});
     155
     156function SortComplete()
     157{
     158        $("#users-order").val($("#users-table").sortable(\'toArray\'));
     159}
     160</script>');
     161    echo('<form action="?action=parameters" method="post">');
     162        echo('<table><tr><td>'.
     163        '<table class="BaseTable" id="users-table" width="100%"><tr><th>Jméno</th><th>Překladů</th><th></th></tr>');
     164    $Query = 'SELECT T.user, T.ID, T.TranslatedCount FROM (SELECT user, ID, (';
     165    foreach($TranslationTree as $Group)
     166      if($Group['TablePrefix'] != '')
     167        $Query .= '(SELECT COUNT(*) FROM '.$Group['TablePrefix'].' WHERE (user = user.ID) AND (Complete = 1) AND (Language <> 0)) + ';
     168    $Query .= ' 0) AS TranslatedCount FROM `user` ORDER BY user) AS T WHERE T.TranslatedCount > 0 ORDER BY T.TranslatedCount DESC';
     169    //echo($Query);
     170        $ID = $Database->SQLCommand($Query);
     171       
     172        // Rebuild user order list
     173        $Users = array();
     174        while($Line = mysql_fetch_array($ID)) $Users[$Line['ID']] = $Line;
     175        $UsersOrder = explode(',', $ExportSetting['users-order']);
     176        foreach($Users as $User)
     177          if(!in_array($User['ID'], $UsersOrder)) $UsersOrder[] = $User['ID'];
     178        foreach($UsersOrder as $Index => $UserId)
     179          if(!array_key_exists($UserId, $Users)) unset($UsersOrder[$Index]);
     180        $ExportSetting['users-order'] = implode(',', $UsersOrder);
     181       
     182        //print_r($UsersOrder);   
     183        // Show ordered user list
     184    foreach($UsersOrder as $UserId)
     185          echo('<tr id="'.$UserId.'"><td>'.$Users[$UserId]['user'].'</td><td>'.$Users[$UserId]['TranslatedCount'].
     186          '</td><td>'.CheckBox('user_'.$UserId, in_array($UserId, $ExportSetting['users-selection'])).'</td></tr>');
     187    echo('</table></td><td valign="top">Zvolte ze seznamu uživatele, od kterých chcete načítat překlady a upravte jejich pořadí, takže od uživatelů výše budou brány překlady přednostně.<br />'.
     188          'Řádky v tabulce můžete přesouvat metodou uchop a táhni.'.
     189      '</td></tr></table>'.
     190          '<div><input name="users-order" id="users-order" size="100" type="hidden" /><br />');
     191        echo('<input type="submit" value="Pokračovat" /></div>');
     192        echo('</form>');
     193    break;
     194}
     195
     196/*
    10197{
    11198  echo('<div style="border: 1px dotted black;   padding: 0px 5px 5px 5px;">
     
    30217  <form action="download.php" method="POST">
    31218    <table border="1" cellpadding="1" cellspacing="0">
    32       <tr><th>Sql</th><th>Filtr</th><th>Jazyk</th><th>Texty</th></tr>
    33       <tr><td>
    34         <input type="radio" name="Export" value="Zip" checked="true"> Exportovat do zip<br />
    35         <input type="radio" name="Export" value="Display"> Export zobrazit<br />');
    36   if(Licence(LICENCE_ADMIN))
    37   {
    38     echo('<input type="radio" name="Export" value="Mangos" /> Import na server (pouze admin)<br />');
    39   }
    40   echo('<br />
    41         <input type="radio" name="Type" value="Insert" /> Insert (zatím nefunguje)<br />
    42         <input type="radio" name="Type" value="Update" checked="true" /> Update <br />
    43         <br />
    44         <input type="checkbox" name="Use" checked="true"> Přidat Use mangos <br />
    45         <br />');
    46   echo('</td><td>
    47         &nbsp; <input type="text" name="NumberVote" value="3" size="1" /> Počet nutných hlasů <br />                                                               
    48         &nbsp; <input type="text" name="Vote" value="4" size="1" /> Známka lepší nebo stejná jak  <br />                                                             
    49             <br />
    50         &nbsp; <select name="users[]" size="10" multiple>');
    51 
    52   // multiple="multiple"
    53   $Query = 'SELECT user,ID FROM `user` WHERE ';
    54   foreach($TranslationTree as $Group)
    55     if($Group['TablePrefix'] != '')
    56       $Query .= 'EXISTS(SELECT 1 FROM '.$Group['TablePrefix'].' WHERE user = user.ID) OR ';
    57   $Query .= ' 0 ORDER BY user';
    58   $ID = $Database->SQLCommand($Query);
    59   while ($Line = mysql_fetch_array($ID))
    60     echo('<option value="'.$Line['ID'].'">'.$Line['user'].'</option>');
    61 
    62   echo('</select><br /> &nbsp; Exportovat pouze od těchto uživatalů<br />
    63         &nbsp; Vybrat více uživatelů můžete pomocí CTRL+click       
    64 
    65       </td><td>
    66         <input type="checkbox" name="Diacritical" checked="true" /> Včetně diakritiky <br> 
    67         <br />                                                               
    68         <input type="checkbox" name="CZ" checked="true" /> Český překlad <br />
    69         <input type="checkbox" name="SK" checked="true" /> Slovenský překlad <br />                                                                 
    70         <input type="checkbox" name="OtherLanguage" /> Jiné jazyky <br />
    71       </td><td>');
    72   foreach($TranslationTree as $Group)
    73     if($Group['TablePrefix'] != '')
    74       echo('<input type="checkbox" name="'.$Group['TablePrefix'].'" checked="true" /> '.$Group['Name'].'<br />');
    75 
    76   echo('</td></tr>
    77     </table>
    78     <br /><input type="submit" value="Generovat SQL soubor překladu (Stažení)" />
    79   </form><br /> 
     219
    80220  <b>Český překlad MaNGOS Minimanageru:</b><br />
    81221  - Stránky projektu: <a href="http://sourceforge.net/projects/mmfpm/">http://sourceforge.net/projects/mmfpm/</a><br />
     
    86226  <br />');
    87227}
     228*/
     229
     230if(array_key_exists('UserID', $_SESSION) and ($_SESSION['UserID'] != ''))
     231  $Database->SQLCommand('UPDATE user SET ExportSetting = "'.addslashes(serialize($ExportSetting)).'" WHERE ID='.$_SESSION['UserID']);
     232  else $_SESSION['ExportSetting'] = serialize($ExportSetting);
    88233       
     234//print_r($ExportSetting);
     235
    89236ShowFooter();     
    90237?>
Note: See TracChangeset for help on using the changeset viewer.