source: trunk/Modules/Translation/Save.php@ 630

Last change on this file since 630 was 584, checked in by chronos, 12 years ago
  • Modified: Page statistic moved to module Translation and renamed to progress.
File size: 11.6 KB
Line 
1<?php
2
3class PageTranslationSave extends Page
4{
5 function Show()
6 {
7 global $TranslationTree;
8
9 $Output = '';
10 $CompleteText = array('nedokončený', 'dokončený');
11
12 unset($Message);
13 $this->System->ModuleManager->Modules['FrontPage']->HandleLoginForm();
14 if(isset($Message)) $Output .= ShowMessage($Message, $MessageType);
15
16 $GroupId = LoadGroupIdParameter();
17 $Group = $TranslationTree[$GroupId];
18 $Table = $Group['TablePrefix'];
19 if($this->System->User->Licence(LICENCE_USER))
20 {
21 if(array_key_exists('ID', $_POST) and is_numeric($_POST['ID']))
22 {
23 $Entry = $_POST['entry'] * 1;
24 $TextID = $_POST['ID'] * 1;
25 $Language = $_POST['Language'] * 1;
26 if(array_key_exists('End', $_POST)) $Complete = 1;
27 else $Complete = 0;
28
29 // Get source text record from database by ID
30 $DbResult = $this->Database->query('SELECT * FROM `'.$Table.'` WHERE `ID`='.$TextID);
31 if($DbResult->num_rows > 0)
32 {
33 $SourceText = $DbResult->fetch_assoc();
34
35 // Get data for english original
36 $DbResult = $this->Database->query('SELECT * FROM `'.$Table.'` WHERE (`Entry`='.$SourceText['Entry'].
37 ') AND (`Language` = '.$this->System->Config['OriginalLanguage'].') AND (`VersionStart` = '.$SourceText['VersionStart'].
38 ') AND (`VersionEnd` = '.$SourceText['VersionEnd'].')');
39 if($DbResult->num_rows > 0)
40 {
41 $EnglishText = $DbResult->fetch_assoc();
42
43 // Get all similar english texts
44 $Filter = '';
45 foreach($Group['Items'] as $GroupItem)
46 if(($GroupItem['Visible'] == 1) and ($EnglishText[$GroupItem['Column']] != ''))
47 $Filter .= ' OR (`'.$GroupItem['Column'].'` = "'.addslashes($EnglishText[$GroupItem['Column']]).'")';
48 if(substr($Filter, 0, 3) == ' OR') $Filter = ' AND ('.substr($Filter, 3).')';
49
50 $DbResult = $this->Database->query('SELECT * FROM `'.$Table.'` WHERE (`Language` = '.$this->System->Config['OriginalLanguage'].')'.$Filter);
51 while($EnglishFound = $DbResult->fetch_assoc())
52 {
53 // Get user translation paired to found english item entry
54 $DbResult2 = $this->Database->query('SELECT * FROM `'.$Table.'` WHERE (`User` = '.$this->System->User->Id.
55 ') AND (`Entry` = '.$EnglishFound['Entry'].') AND (`VersionStart` = '.$EnglishFound['VersionStart'].
56 ') AND (`VersionEnd` = '.$EnglishFound['VersionEnd'].')');
57 if($DbResult2->num_rows > 0)
58 {
59 // Update existed user translation
60 $ExistedText = $DbResult2->fetch_assoc();
61 $Values = '`Language` = '.$Language;
62
63 $UpdateModifyTime = false;
64 $Completable = true;
65 $CompleteParts = $ExistedText['CompleteParts'];
66 foreach($Group['Items'] as $GroupItem)
67 {
68 if($GroupItem['Visible'] == 1)
69 {
70 if($SourceText[$GroupItem['Column']] != $ExistedText[$GroupItem['Column']])
71 $UpdateModifyTime = true;
72
73 if($EnglishFound[$GroupItem['Column']] == $EnglishText[$GroupItem['Column']])
74 {
75 if(array_key_exists($GroupItem['Column'], $_POST))
76 {
77 $Values .= ', `'.$GroupItem['Column'].'` = "'.$_POST[$GroupItem['Column']].'"';
78 $CompleteParts |= (1 << ($GroupItem['Sequence'] - 1));
79 }
80 }
81 if((($CompleteParts & (1 << ($GroupItem['Sequence'] - 1))) == 0) and
82 ($EnglishFound[$GroupItem['Column']] != '')) $Completable = false;
83 }
84 }
85 if($Completable) $NewComplete = 1; // All parts of text are completed. Make entire text as completed
86 else $NewComplete = 0;
87 if($SourceText['ID'] == $ExistedText['ID'])
88 {
89 $NewComplete = $Complete; // Our original user text, set complete according user choice
90 if($Complete == 1)
91 {
92 foreach($Group['Items'] as $GroupItem)
93 if($GroupItem['Visible'] == 1) $CompleteParts |= (1 << ($GroupItem['Sequence'] - 1));
94 }
95 }
96 $Values .= ', `Complete`='.$NewComplete.', `CompleteParts` = '.$CompleteParts;
97
98 if($UpdateModifyTime) $Values .= ', `ModifyTime` = NOW()';
99
100 // Update user translation
101 $this->Database->query('UPDATE `'.$Table.'` SET '.$Values.' WHERE `ID` = '.$ExistedText['ID']);
102
103 $Output .= 'Změny v překladu <a href="'.$this->System->Link('/form.php?group='.
104 $GroupId.'&amp;ID='.$ExistedText['ID']).'">'.$ExistedText['ID'].'</a> ('.
105 $ExistedText['Entry'].') uloženy jako '.$CompleteText[$NewComplete].'.<br />';
106 $this->System->ModuleManager->Modules['Log']->WriteLog('Změny v překladu <a href="'.
107 $this->System->Link('/form.php?group='.$GroupId.'&amp;ID='.$ExistedText['ID']).'">'.
108 $ExistedText['ID'].'</a> ('.$ExistedText['Entry'].') uloženy jako '.$CompleteText[$NewComplete].'.', LOG_TYPE_TRANSLATION);
109 } else
110 {
111 // Insert new user translation
112 $Columns = '`Entry`, `VersionStart`, `VersionEnd`, `Language`, `User`, `Take`, `ModifyTime`';
113 $Values = $EnglishFound['Entry'].', '.$EnglishFound['VersionStart'].', '.
114 $EnglishFound['VersionEnd'].', '.$Language.', '.$this->System->User->Id.', '.$SourceText['ID'].', NOW()';
115
116 $CompleteParts = 0;
117 $Completable = true;
118 foreach($Group['Items'] as $GroupItem)
119 {
120 $Columns .= ', `'.$GroupItem['Column'].'`';
121 if($GroupItem['Visible'] == 1)
122 {
123 if($EnglishFound[$GroupItem['Column']] == $EnglishText[$GroupItem['Column']])
124 {
125 // Read form user data
126 if(array_key_exists($GroupItem['Column'], $_POST))
127 {
128 $Values .= ', "'.$_POST[$GroupItem['Column']].'"';
129 $CompleteParts |= (1 << ($GroupItem['Sequence'] - 1));
130 } else $Values .= ', "'.addslashes($EnglishFound[$GroupItem['Column']]).'"';
131 } else $Values .= ', "'.addslashes($EnglishFound[$GroupItem['Column']]).'"';
132 if((($CompleteParts & (1 << ($GroupItem['Sequence'] - 1))) == 0) and ($EnglishFound[$GroupItem['Column']] != '')) $Completable = false;
133 } else
134 {
135 // Read from english text
136 $Values .= ', "'.$EnglishFound[$GroupItem['Column']].'"';
137 }
138 }
139 if($Completable) $NewComplete = 1; // All parts of text are completed. Make entire text as completed
140 else $NewComplete = 0;
141 if($SourceText['ID'] == $EnglishFound['ID'])
142 {
143 $NewComplete = $Complete; // Our original user text, set complete according user choice
144 if($Complete == 1)
145 {
146 foreach($Group['Items'] as $GroupItem)
147 if($GroupItem['Visible'] == 1) $CompleteParts |= (1 << ($GroupItem['Sequence'] - 1));
148 }
149 }
150 $Columns .= ', `Complete`, `CompleteParts`';
151 $Values .= ', '.$NewComplete.', '.$CompleteParts;
152
153 $this->Database->query('INSERT INTO `'.$Table.'` ('.$Columns.') VALUES ('.$Values.')');
154 $LastID = $this->Database->insert_id;
155
156 $Output .= 'Text <a href="'.$this->System->Link('/form.php?group='.
157 $GroupId.'&amp;ID='.$LastID).'">'.$LastID.'</a> ze skupiny <a href="TranslationList.php?group='.
158 $GroupId.'&amp;user=0&amp;action=filter">'.$TranslationTree[$GroupId]['Name'].'</a> uložen jako '.
159 $CompleteText[$NewComplete].'. Převzat z <a href="form.php?group='.$GroupId.'&amp;ID='.$TextID.'">'.$TextID.'</a>.<br/>';
160 $this->System->ModuleManager->Modules['Log']->WriteLog('Text <a href="'.
161 $this->System->Link('/form.php?group='.$GroupId.'&amp;ID='.$LastID).'">'.
162 $LastID.'</a> ze skupiny <a href="TranslationList.php?group='.
163 $GroupId.'&amp;user=0&amp;text=&amp;entry=&amp;action=filter">'.
164 $TranslationTree[$GroupId]['Name'].'</a> uložen jako '.$CompleteText[$NewComplete].
165 '. Převzat z <a href="form.php?group='.$GroupId.'&amp;ID='.$TextID.'">'.$TextID.'</a>.', LOG_TYPE_TRANSLATION);
166 }
167 }
168 } else $Output .= ShowMessage('Anglický originál k překladu nenalezen.', MESSAGE_CRITICAL);
169 } else $Output .= ShowMessage('Zadaná položka nenalezena.', MESSAGE_CRITICAL);
170
171
172 // Address and redirecting
173 $Output .= '<br />Překládat: <a href="TranslationList.php?group='.$GroupId.'&amp;state=1&amp;user=0&entry=">Nepřeložené</a> ';
174
175 $prev = FollowingTran($TextID, $Table, $GroupId, True);
176 $next = FollowingTran($TextID, $Table, $GroupId);
177 $Output .= '<br /><br />';
178 $DbResult = $this->Database->query('SELECT `Redirecting` FROM `User` WHERE `ID`='.$this->System->User->Id);
179 $redirecting = $DbResult->fetch_assoc();
180
181 switch($redirecting['Redirecting'])
182 {
183 case 1:
184 $Output .= '<script type="text/javascript" language="JavaScript" charset="utf-8">'.
185 'setTimeout("parent.location.href=\''.htmlspecialchars_decode('TranslationList.php?group='.$GroupId.'&amp;state=1&amp;user=0').'\'", 1500)'.
186 '</script>';
187 break;
188 case 2:
189 if($next <> '')
190 $Output .= '<script type="text/javascript" language="JavaScript" charset="utf-8">'.
191 'setTimeout("parent.location.href=\''.htmlspecialchars_decode($next).'\'", 1500)'.
192 '</script>';
193 break;
194 case 3:
195 if($prev <> '')
196 $Output .= '<script type="text/javascript" language="JavaScript" charset="utf-8">'.
197 'setTimeout("parent.location.href=\''.htmlspecialchars_decode($prev).'\'", 1500)'.
198 '</script>';
199 break;
200 }
201
202 $Output .= 'Z této stránky můžete být automaticky přesměrování. Nastavit kam chcete být přesměrování si můžete v <a href="'.
203 $this->System->Link('/Options.php').'" title="Nastavení uživatele">Nastavení</a>';
204
205 // Update flag for experience info load
206 $this->Database->query('UPDATE `User` SET `NeedUpdate` = 1 WHERE `ID` = '.$this->System->User->Id);
207 } else $Output .= ShowMessage('Položka nenalezena', MESSAGE_CRITICAL);
208 } else
209 {
210 if(array_key_exists('ID', $_POST) and array_key_exists('entry', $_POST) and array_key_exists('Language', $_POST) and array_key_exists('user', $_POST))
211 {
212 $Output .= 'Byli jste automaticky odhlášeni. Pro <strong>Uložení překladu</strong> se musíte přihlásit zde:<br /><br />'.
213 '<form action="save.php?action=login&amp;group='.$GroupId.'" method="post"><div>'.
214 '<input type="hidden" name="entry" value="'.$_POST['entry'].'" />'.
215 '<input type="hidden" name="user" value="'.$_POST['user'].'" />'.
216 '<input type="hidden" name="ID" value="'.$_POST['ID'].'" />'.
217 '<input type="hidden" name="Language" value="'.$_POST['Language'].'" />';
218
219 foreach($TranslationTree[$GroupId]['Items'] as $Index => $TextItem)
220 {
221 if(array_key_exists($TextItem['Column'], $_POST)) $Value = $_POST[$TextItem['Column']]; else $Value = '';
222 $Output .= '<input id="'.$TextItem['Column'].'" name="'.$TextItem['Column'].'" type="hidden" value="'.htmlspecialchars($Value).'" />';
223 }
224 $Output .= '<table>'.
225 '<tr>'.
226 '<td>Jméno: <input type="text" name="LoginUser" size="13" /></td>'.
227 '</tr><tr>'.
228 '<td>Heslo: <input type="password" name="LoginPass" size="13" /></td>'.
229 '</tr><tr>'.
230 '<th><input type="submit" value="Přihlásit a uložit překlad" /></th>'.
231 '</tr>'.
232 '</table>';
233 } else $Output = ShowMessage('Nezadány požadované údaje.', MESSAGE_CRITICAL);
234 }
235 return($Output);
236 }
237}
Note: See TracBrowser for help on using the repository browser.