source: trunk/Modules/Dictionary/Dictionary.php@ 552

Last change on this file since 552 was 552, checked in by chronos, 12 years ago
  • Opraveno: Nezobrazovat překládaný text v formuláři pro nepřihlášené uživatele.
  • Property svn:executable set to *
File size: 13.6 KB
Line 
1<?php
2
3class ModuleDictionary extends AppModule
4{
5 function __construct($System)
6 {
7 parent::__construct($System);
8 $this->Name = 'Dictionary';
9 $this->Version = '1.0';
10 $this->Creator = 'Chronos';
11 $this->License = 'GNU/GPL';
12 $this->Description = 'Custom dictionary for better translation coordination';
13 $this->Dependencies = array();
14 }
15
16 function Start()
17 {
18 $this->System->RegisterPage('dictionary.php', 'PageDictionary');
19 $this->System->RegisterMenuItem(array(
20 'Name' => 'Dictionary',
21 'Title' => 'Slovníček',
22 'Hint' => 'Slovník WoW výrazů',
23 'Link' => $this->System->Link('/dictionary.php'),
24 'Permission' => LICENCE_ANONYMOUS,
25 'Icon' => '',
26 ), 1);
27 }
28}
29
30class PageDictionary extends Page
31{
32
33function WriteTranslatNames($Text,$mode)
34{
35 $Output = '';
36 if ($mode == 0) $Output .= '..Nalezené názvy jmen věcí, míst, postav';
37 if ($mode == 1) $Output .= '..Všechny přeložené';
38 if ($mode == 2) $Output .= '..Nepřeložené';
39 $Output .= '<table width="98%" class="BaseTable">';
40 $Output .= '<tr><th>Originál</th>'.'<th>Překlad</th></tr>';
41
42 $TablesColumn = array
43 (
44 'TextGameObject' => 'Name',
45 'TextCreature' => 'name',
46 'TextItem' => 'Name',
47 'TextTransport' => 'Name',
48 'TextAreaTriggerTeleport' => 'Name',
49 'TextAreaTriggerTavern' => 'Name',
50 'Dictionary' => 'Text',
51 );
52
53 $buff = GetTranslatNames($Text,$mode,$TablesColumn);
54
55 // $buff[] = array($Line['ID'],GetIDbyName($Table),$Line[$Column],$Line['Tran']);
56 foreach($buff as $Line) {
57 if ($mode == 0)
58 {
59 if (strpos(strtolower($Text), strtolower($Line[2])) > 0)
60 {
61 $Output .= '<tr><td>'.$Line[2].'</td>';
62 if ($Line[3] <> '') $Output .= '<td><a target="_NEW2" href="form.php?group='.$Line[1].'&amp;ID='.$Line[0].'">'.$Line[3].'</a></td></tr>';
63 else $Output .= '<td><a target="_NEW2" href="form.php?group='.$Line[1].'&amp;ID='.$Line[0].'">Překládat</a></td></tr>';
64 }
65 } else
66 {
67 $Output .= '<tr><td>'.$Line[2].'</td>';
68 if ($Line[3] <> '') $Output .= '<td><a target="_NEW2" href="form.php?group='.$Line[1].'&amp;ID='.$Line[0].'">'.$Line[3].'</a></td></tr>';
69 else $Output .= '<td><a target="_NEW2" href="form.php?group='.$Line[1].'&amp;ID='.$Line[0].'">Překládat</a></td></tr>';
70 }
71 }
72 $Output .= '</table>';
73 return($Output);
74}
75
76function DictionaryInsert()
77{
78 global $User;
79
80 $Output = '';
81 if($User->Licence(LICENCE_USER))
82 {
83 $Output .= '<form action="dictionary.php?action=save" method="post">'.
84 '<fieldset><legend>Vložení nového slova</legend>'.
85 '<table><tr><td>'.
86 'Původní anglické slovo:</td><td><input type="text" name="Original" /></td></tr>'.
87 '<tr><td>Přeložené:</td><td><input type="text" name="Translated" /></td></tr>'.
88 '<tr><td>Jazyk:</td><td>'.WriteLanguages($_SESSION['language']).'</td></tr>'.
89 '<tr><td>Volitelný popis:</td><td><input type="text" name="Description" /></td></tr>'.
90 '<tr><td colspan="2"><input type="submit" value="Uložit" /></td></tr>'.
91 '</td></tr></table>'.
92 '</fieldset>'.
93 '</form>';
94 } else $Output .= ShowMessage('Nemáte oprávnění', MESSAGE_CRITICAL);
95 return($Output);
96}
97
98function DictionarySave()
99{
100 global $User, $Config;
101
102 if($User->Licence(LICENCE_USER))
103 {
104 if(array_key_exists('Original', $_POST) and array_key_exists('Translated', $_POST) and array_key_exists('Description', $_POST))
105 {
106 // Check if original text exists and determine entry id
107 $DbResult = $this->Database->query('SELECT * FROM `Dictionary` WHERE '.
108 '`Text` = "'.$_POST['Original'].'" AND `Language`= '.$Config['OriginalLanguage']);
109 if($DbResult->num_rows > 0)
110 {
111 $DbRow = $DbResult->fetch_assoc();
112 $Entry = $DbRow['Entry'];
113 } else
114 {
115 $DbResult = $this->Database->query('SELECT MAX(`Entry`) FROM `Dictionary`');
116 $DbRow = $DbResult->fetch_row();
117 $Entry = $DbRow[0] + 1;
118 $this->Database->query('INSERT INTO `Dictionary` ( `Text` , `Entry` , `Description` , '.
119 '`User`, `Language` ) VALUES ("'.$_POST['Original'].'", "'.$Entry.'", "", NULL, '.$Config['OriginalLanguage'].');');
120 }
121
122 $DbResult = $this->Database->query('SELECT `Id` FROM `Dictionary` WHERE '.
123 '`Entry` = '.$Entry.' AND `Language`='.$_POST['Language'].' AND `User`='.$User->Id);
124 if($DbResult->num_rows > 0)
125 {
126 $DbRow = $DbResult->fetch_assoc();
127 $this->Database->query('UPDATE `Dictionary` SET `Text`="'.$_POST['Translated'].'", '.
128 '`Description` = "'.$_POST['Description'].'" WHERE Id='.$DbRow['Id']);
129 } else
130 $this->Database->query('INSERT INTO `Dictionary` ( `Text` , `Entry` , `Description` , '.
131 '`User`, `Language` ) VALUES ("'.$_POST['Translated'].'", "'.$Entry.'", "'.$_POST['Description'].'", '.$User->Id.', '.$_POST['Language'].')');
132 $Output = ShowMessage('Záznam byl uložen!');
133 } else $Output = ShowMessage('Nebyly zaslány všechny položky formuláře.', MESSAGE_CRITICAL);
134 } else $Output = ShowMessage('Nemáte oprávnění', MESSAGE_CRITICAL);
135 return($Output);
136}
137
138function DictionaryRemove()
139{
140 global $User;
141
142 if($User->Licence(LICENCE_USER))
143 {
144 $this->Database->query('DELETE FROM `Dictionary` WHERE (`User`='.$User->Id.') AND (`Id`='.($_GET['id'] * 1).')');
145 $Output = ShowMessage('Záznam odstraněn.');
146 } else $Output = ShowMessage('Nemáte oprávnění', MESSAGE_CRITICAL);
147 return($Output);
148}
149
150function DictionaryModify()
151{
152 global $User, $Config;
153
154 if($User->Licence(LICENCE_USER))
155 {
156 $DbResult = $this->Database->query('SELECT * FROM `Dictionary` WHERE `Id`='.($_GET['id'] * 1));
157 if($DbResult->num_rows > 0)
158 {
159 $DbRow = $DbResult->fetch_assoc();
160 $DbResult = $this->Database->query('SELECT * FROM `Dictionary` WHERE (`User` IS NULL) '.
161 'AND (`Entry`='.$DbRow['Entry'].') AND (`Language`= '.$Config['OriginalLanguage'].')');
162 $DbRow2 = $DbResult->fetch_assoc();
163 $Output = '<form action="dictionary.php?action=save" method="post">'.
164 '<fieldset><legend>Upravení slova</legend>'.
165 '<input type="hidden" name="id" value="'.$_GET['id'].'"/>'.
166 '<table><tr><td>'.
167 'Původní anglické slovo:</td><td><input type="text" name="Original" value="'.$DbRow2['Text'].'" /></td></tr>'.
168 '<tr><td>Přeložené:</td><td><input type="text" name="Translated" value="'.$DbRow['Text'].'" /></td></tr>'.
169 '<tr><td>Jazyk:</td><td>'.WriteLanguages($DbRow['Language']).'</td></tr>'.
170 '<tr><td>Popis:</td><td><input type="text" name="Description" value="'.$DbRow['Description'].'" /></td></tr>'.
171 '<tr><td colspan="2"><input type="submit" value="Uložit" /></td></tr>'.
172 '</td></tr></table>'.
173 '</fieldset>'.
174 '</form>';
175 } else $Output = ShowMessage('Položka nenalezena', MESSAGE_CRITICAL);
176 } else $Output = ShowMessage('Nemáte oprávnění', MESSAGE_CRITICAL);
177 return($Output);
178}
179
180function DictionaryGroup()
181{
182 global $User, $TranslationTree;
183
184 $Output = '';
185 $GroupId = LoadGroupIdParameter();
186 if(array_key_exists('mode', $_GET)) $mode = $_GET['mode'];
187 else $mode = 0; //0 = exact names, 1=all names, 2=nontranslated
188 $Table = $TranslationTree[$GroupId]['TablePrefix'];
189
190 if(array_key_exists('ID', $_GET))
191 {
192 $TextID = $_GET['ID'];
193 $Output .= 'Přeložené názvy vztahující se k překladu: <a target="_NEW" href="form.php?group='.$GroupId.'&amp;ID='.$TextID.'">'.$TextID.'</a><br />'.
194 '<a href="?action=group&amp;mode=1&amp;group='.$GroupId.'&amp;ID='.$TextID.'" title="Zobrazit všechny podobné výsledky">Všechny</a> '.
195 '<a href="?action=group&amp;mode=0&amp;group='.$GroupId.'&amp;ID='.$TextID.'" title="Zobrazit pouze přesné výsledky">Přesné</a> '.
196 '<a href="?action=group&amp;mode=2&amp;group='.$GroupId.'&amp;ID='.$TextID.'" title="Zobrazit všechny nepřeložené">Nepřeložené</a> ';
197 $DbResult = $this->Database->query('SELECT * FROM '.$Table.' WHERE ID = '.$TextID);
198 $Line = $DbResult->fetch_assoc();
199 if(!$Line) $Output .= ShowMessage('Překlad nenalezen.', MESSAGE_CRITICAL);
200 else
201 {
202 $Text = '';
203 foreach($TranslationTree[$GroupId]['Items'] as $Index => $TextItem)
204 $Text .= ' '.$Line[$TextItem['Column']];
205 $Output .= $this->WriteTranslatNames($Text, $mode);
206 }
207 }
208 return($Output);
209}
210
211function DictionaryShow()
212{
213 global $User, $LanguageList, $Config;
214
215 $Output = '<form action="dictionary.php" method="get" style="margin: 0px; padding: 0px;">'.
216 '<table style="width: 100%; height: 100%;">';
217
218 if(array_key_exists('search', $_GET)) $Search = $_GET['search'];
219 else $Search = '';
220
221 $Output .= '<tr><td>
222 <input type="text" value="'.$Search.'" name="search" size="30" />
223 <input type="submit" value="Vyhledat" />';
224 if($User->Licence(LICENCE_USER)) $Output .= ' <a href="dictionary.php?action=insert">Vložit slovo</a>';
225
226 $Output .= '</td></tr>'.
227 '<tr><td>Jazyk: ';
228 $Lang = '<a href="?language=">Všechny</a>';
229 if($_SESSION['language'] == '') $Output .= '<strong>'.$Lang.'</strong> ';
230 else $Output .= $Lang;
231 foreach($LanguageList as $Language)
232 if($Language['Enabled'] == 1)
233 {
234 $Lang = ' <a href="?language='.$Language['Id'].'">'.$Language['Name'].'</a>';
235 if($Language['Id'] == $_SESSION['language']) $Output .= '<strong>'.$Lang.'</strong> ';
236 else $Output .= $Lang;
237 }
238 $Output .= '</td></tr>'.
239 '<tr><td>';
240 //<div style="overflow: auto; width: 100%; height: 100%;">');
241
242 if(!is_numeric($_SESSION['language'])) $LanguageFilter = '';
243 else $LanguageFilter = ' AND (`T1`.`Language` = '.$_SESSION['language'].')';
244
245 if($Search <> '')
246 {
247 $Condition = ' AND (LOWER(`T1`.`Text`) LIKE LOWER("%'.$Search.'%")) OR '.
248 '(LOWER(`T1`.`Description`) LIKE LOWER("%'.$Search.'%"))';
249 } else $Condition = '';
250 $sql = 'SELECT `User`.`Name` AS `UserName`, `User`.`Id` AS `UserId`, '.
251 '`Language`.`Name` AS `LangName`, `T1`.`Id` AS `Id`, '.
252 '`T1`.`Entry`, `T2`.`Text` AS `Original`, `T1`.`Text` AS `Translated`, `T1`.`Description` '.
253 'FROM `Dictionary` AS `T1` JOIN `Dictionary` AS `T2` '.
254 'ON (`T2`.`Entry` = `T1`.`Entry`) AND (`T2`.`Language` = '.$Config['OriginalLanguage'].') '.
255 'JOIN `Language` ON `Language`.`Id` = `T1`.`Language` '.
256 'JOIN `User` ON `User`.`ID` = `T1`.`User` '.
257 'WHERE 1'.
258 $LanguageFilter.$Condition;
259
260 $DbResult = $this->Database->query('SELECT COUNT(*) FROM ('.$sql.') AS `T1`');
261 $DbRow = $DbResult->fetch_row();
262 $PageList = GetPageList($DbRow[0]);
263
264 $Output .= $PageList['Output'];
265
266 if(is_numeric($_SESSION['language'])) $LanguageName = $LanguageList[$_SESSION['language']]['Name'];
267 else $LanguageName = 'Překlad';
268 $TableColumns = array(
269 array('Name' => 'Original', 'Title' => 'Angličtina'),
270 array('Name' => 'Translated', 'Title' => $LanguageName),
271 );
272 if(!is_numeric($_SESSION['language'])) $TableColumns[] = array('Name' => 'LangName', 'Title' => 'Jazyk');
273 $TableColumns[] = array('Name' => 'Description', 'Title' => 'Popis');
274 $TableColumns[] = array('Name' => 'UserName', 'Title' => 'Překladatel');
275 if($User->Licence(LICENCE_USER)) $TableColumns[] = array('Name' => '', 'Title' => 'Akce');
276 $Order = GetOrderTableHeader($TableColumns, 'Original');
277 $Output .= '<table width="98%" class="BaseTable">'.$Order['Output'];
278
279 $sql_page = $sql.$Order['SQL'].$PageList['SQLLimit'];
280 $DbResult = $this->Database->query($sql_page);
281 while($Line = $DbResult->fetch_assoc())
282 {
283 $Output .= '<tr>'.
284 '<td>'.$Line['Original'].'</td>'.
285 '<td><strong>'.$Line['Translated'].'</strong></td>';
286 if(!is_numeric($_SESSION['language'])) $Output .= '<td>'.$Line['LangName'].'</td>';
287 $Output .= '<td>'.$Line['Description'].'</td>'.
288 '<td><a href="user.php?user='.$Line['UserId'].'">'.$Line['UserName'].'</a></td>';
289 if($User->Licence(LICENCE_USER))
290 {
291 if($Line['UserId'] == $User->Id)
292 $Output .= '<td><a href="?action=remove&amp;id='.$Line['Id'].'" onclick="return confirmAction(\'Opravdu smazat položku?\');">Smazat</a>'.
293 ' <a href="?action=modify&amp;id='.$Line['Id'].'">Upravit</a></td>';
294 else $Output .= '<td></td>';
295 }
296 $Output .= '</tr>';
297 }
298 $Output .= '</table>'.
299 $PageList['Output'].
300 '</td></tr>'.
301 '</table></form>';
302 return($Output);
303}
304
305function Show()
306{
307 global $LanguageList, $User;
308
309$LanguageList = GetLanguageList();
310
311if(!isset($_SESSION['language']))
312{
313 if($User->Licence(LICENCE_USER))
314 {
315 $_SESSION['language'] = $User->Language;
316 } else $_SESSION['language'] = '';
317}
318if(array_key_exists('language', $_GET)) {
319 if($_GET['language'] == '') $_SESSION['language'] = '';
320 else $_SESSION['language'] = $_GET['language'] * 1;
321}
322
323$Output = '<h3>Slovníček</h3>';
324
325$ShowList = true;
326if(array_key_exists('action', $_GET))
327{
328 if($_GET['action'] == 'group') {
329 $Output .= $this->DictionaryGroup();
330 $ShowList = false;
331 }
332 else if($_GET['action'] == 'insert') $Output .= $this->DictionaryInsert();
333 else if($_GET['action'] == 'save') $Output .= $this->DictionarySave();
334 else if($_GET['action'] == 'remove') $Output .= $this->DictionaryRemove();
335 else if($_GET['action'] == 'modify') $Output .= $this->DictionaryModify();
336 else $Output .= ShowMessage('Neznámá akce', MESSAGE_CRITICAL);
337}
338if($ShowList == true) $Output .= $this->DictionaryShow();
339 return($Output);
340 }
341}
Note: See TracBrowser for help on using the repository browser.