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

Last change on this file since 622 was 622, checked in by chronos, 12 years ago
  • Modified: More translated texts.
  • Property svn:executable set to *
File size: 14.1 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', 'PageDictionary');
19 $this->System->RegisterMenuItem(array(
20 'Name' => 'Dictionary',
21 'Title' => T('Dictionary'),
22 'Hint' => 'Slovník WoW výrazů',
23 'Link' => $this->System->Link('/dictionary/'),
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 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 'TextArea' => 'Name',
52 'TextAreaPOI' => 'Name',
53 'TextCharacterClass' => 'Name',
54 'TextCharacterRace' => 'Name1',
55 'TextItemSubClass' => 'Name',
56 'TextCreatureType' => 'Name',
57 );
58
59 $buff = GetTranslatNames($Text,$mode,GetTranslatNamesArray());
60
61 // $buff[] = array($Line['ID'],GetIDbyName($Table),$Line[$Column],$Line['Tran']);
62 foreach($buff as $Line) {
63 if ($mode == 0)
64 {
65 if (strpos(strtolower($Text), strtolower($Line[2])) > 0)
66 {
67 $Output .= '<tr><td>'.$Line[2].'</td>';
68 if ($Line[3] <> '') $Output .= '<td><a target="_NEW2" href="'.$this->System->Link('/form.php?group='.$Line[1].'&amp;ID='.$Line[0]).'">'.$Line[3].'</a></td></tr>';
69 else $Output .= '<td><a target="_NEW2" href="'.$this->System->Link('/form.php?group='.$Line[1].'&amp;ID='.$Line[0]).'">Překládat</a></td></tr>';
70 }
71 } else
72 {
73 $Output .= '<tr><td>'.$Line[2].'</td>';
74 if ($Line[3] <> '') $Output .= '<td><a target="_NEW2" href="'.$this->System->Link('/form.php?group='.$Line[1].'&amp;ID='.$Line[0]).'">'.$Line[3].'</a></td></tr>';
75 else $Output .= '<td><a target="_NEW2" href="'.$this->System->Link('/form.php?group='.$Line[1].'&amp;ID='.$Line[0]).'">Překládat</a></td></tr>';
76 }
77 }
78 $Output .= '</table>';
79 return($Output);
80}
81
82function DictionaryInsert()
83{
84 $Output = '';
85 if($this->System->User->Licence(LICENCE_USER))
86 {
87 $Output .= '<form action="?action=save" method="post">'.
88 '<fieldset><legend>Vložení nového slova</legend>'.
89 '<table><tr><td>'.
90 'Původní anglické slovo:</td><td><input type="text" name="Original" /></td></tr>'.
91 '<tr><td>Přeložené:</td><td><input type="text" name="Translated" /></td></tr>'.
92 '<tr><td>Jazyk:</td><td>'.WriteLanguages($_SESSION['language']).'</td></tr>'.
93 '<tr><td>Volitelný popis:</td><td><input type="text" name="Description" /></td></tr>'.
94 '<tr><td colspan="2"><input type="submit" value="Uložit" /></td></tr>'.
95 '</td></tr></table>'.
96 '</fieldset>'.
97 '</form>';
98 } else $Output .= ShowMessage(T('Access denied'), MESSAGE_CRITICAL);
99 return($Output);
100}
101
102function DictionarySave()
103{
104 if($this->System->User->Licence(LICENCE_USER))
105 {
106 if(array_key_exists('Original', $_POST) and array_key_exists('Translated', $_POST) and array_key_exists('Description', $_POST))
107 {
108 // Check if original text exists and determine entry id
109 $DbResult = $this->Database->query('SELECT * FROM `Dictionary` WHERE '.
110 '`Text` = "'.$_POST['Original'].'" AND `Language`= '.$this->System->Config['OriginalLanguage']);
111 if($DbResult->num_rows > 0)
112 {
113 $DbRow = $DbResult->fetch_assoc();
114 $Entry = $DbRow['Entry'];
115 } else
116 {
117 $DbResult = $this->Database->query('SELECT MAX(`Entry`) FROM `Dictionary`');
118 $DbRow = $DbResult->fetch_row();
119 $Entry = $DbRow[0] + 1;
120 $this->Database->query('INSERT INTO `Dictionary` ( `Text` , `Entry` , `Description` , '.
121 '`User`, `Language` ) VALUES ("'.$_POST['Original'].'", "'.$Entry.'", "", NULL, '.$this->System->Config['OriginalLanguage'].');');
122 }
123
124 $DbResult = $this->Database->query('SELECT `Id` FROM `Dictionary` WHERE '.
125 '`Entry` = '.$Entry.' AND `Language`='.$_POST['Language'].' AND `User`='.$this->System->User->Id);
126 if($DbResult->num_rows > 0)
127 {
128 $DbRow = $DbResult->fetch_assoc();
129 $this->Database->query('UPDATE `Dictionary` SET `Text`="'.$_POST['Translated'].'", '.
130 '`Description` = "'.$_POST['Description'].'" WHERE Id='.$DbRow['Id']);
131 } else
132 $this->Database->query('INSERT INTO `Dictionary` ( `Text` , `Entry` , `Description` , '.
133 '`User`, `Language` ) VALUES ("'.$_POST['Translated'].'", "'.$Entry.'", "'.
134 $_POST['Description'].'", '.$this->System->User->Id.', '.$_POST['Language'].')');
135 $Output = ShowMessage('Záznam byl uložen!');
136 } else $Output = ShowMessage('Nebyly zaslány všechny položky formuláře.', MESSAGE_CRITICAL);
137 } else $Output = ShowMessage(T('Access denied'), MESSAGE_CRITICAL);
138 return($Output);
139}
140
141function DictionaryRemove()
142{
143 if($this->System->User->Licence(LICENCE_USER))
144 {
145 $this->Database->query('DELETE FROM `Dictionary` WHERE (`User`='.$this->System->User->Id.') AND (`Id`='.($_GET['id'] * 1).')');
146 $Output = ShowMessage(T('Record removed'));
147 } else $Output = ShowMessage(T('Access denied'), MESSAGE_CRITICAL);
148 return($Output);
149}
150
151function DictionaryModify()
152{
153 if($this->System->User->Licence(LICENCE_USER))
154 {
155 $DbResult = $this->Database->query('SELECT * FROM `Dictionary` WHERE `Id`='.($_GET['id'] * 1));
156 if($DbResult->num_rows > 0)
157 {
158 $DbRow = $DbResult->fetch_assoc();
159 $DbResult = $this->Database->query('SELECT * FROM `Dictionary` WHERE (`User` IS NULL) '.
160 'AND (`Entry`='.$DbRow['Entry'].') AND (`Language`= '.$this->System->Config['OriginalLanguage'].')');
161 $DbRow2 = $DbResult->fetch_assoc();
162 $Output = '<form action="?action=save" method="post">'.
163 '<fieldset><legend>Upravení slova</legend>'.
164 '<input type="hidden" name="id" value="'.$_GET['id'].'"/>'.
165 '<table><tr><td>'.
166 'Původní anglické slovo:</td><td><input type="text" name="Original" value="'.$DbRow2['Text'].'" /></td></tr>'.
167 '<tr><td>Přeložené:</td><td><input type="text" name="Translated" value="'.$DbRow['Text'].'" /></td></tr>'.
168 '<tr><td>Jazyk:</td><td>'.WriteLanguages($DbRow['Language']).'</td></tr>'.
169 '<tr><td>Popis:</td><td><input type="text" name="Description" value="'.$DbRow['Description'].'" /></td></tr>'.
170 '<tr><td colspan="2"><input type="submit" value="Uložit" /></td></tr>'.
171 '</td></tr></table>'.
172 '</fieldset>'.
173 '</form>';
174 } else $Output = ShowMessage('Položka nenalezena', MESSAGE_CRITICAL);
175 } else $Output = ShowMessage(T('Access denied'), MESSAGE_CRITICAL);
176 return($Output);
177}
178
179function DictionaryGroup()
180{
181 global $TranslationTree;
182
183 $Output = '';
184 $GroupId = LoadGroupIdParameter();
185 if(array_key_exists('mode', $_GET)) $mode = $_GET['mode'];
186 else $mode = 0; //0 = exact names, 1=all names, 2=nontranslated
187 $Table = $TranslationTree[$GroupId]['TablePrefix'];
188
189 if(array_key_exists('ID', $_GET))
190 {
191 $TextID = $_GET['ID'];
192 $Output .= 'Přeložené názvy vztahující se k překladu: <a target="_NEW" href="'.$this->System->Link('/form.php?group='.$GroupId.'&amp;ID='.$TextID).'">'.$TextID.'</a><br />'.
193 '<a href="?action=group&amp;mode=1&amp;group='.$GroupId.'&amp;ID='.$TextID.'" title="Zobrazit všechny podobné výsledky">Všechny</a> '.
194 '<a href="?action=group&amp;mode=0&amp;group='.$GroupId.'&amp;ID='.$TextID.'" title="Zobrazit pouze přesné výsledky">Přesné</a> '.
195 '<a href="?action=group&amp;mode=2&amp;group='.$GroupId.'&amp;ID='.$TextID.'" title="Zobrazit všechny nepřeložené">Nepřeložené</a> ';
196 $DbResult = $this->Database->query('SELECT * FROM '.$Table.' WHERE ID = '.$TextID);
197 $Line = $DbResult->fetch_assoc();
198 if(!$Line) $Output .= ShowMessage('Překlad nenalezen.', MESSAGE_CRITICAL);
199 else
200 {
201 $Text = '';
202 foreach($TranslationTree[$GroupId]['Items'] as $Index => $TextItem)
203 $Text .= ' '.$Line[$TextItem['Column']];
204 $Output .= $this->WriteTranslatNames($Text, $mode);
205 }
206 }
207 return($Output);
208}
209
210function DictionaryShow()
211{
212 global $LanguageList;
213
214 $Output = '<form action="?" method="get" style="margin: 0px; padding: 0px;">'.
215 '<table style="width: 100%; height: 100%;">';
216
217 if(array_key_exists('search', $_GET)) $Search = $_GET['search'];
218 else $Search = '';
219
220 $Output .= '<tr><td>
221 <input type="text" value="'.htmlentities($Search).'" name="search" size="30" />
222 <input type="submit" value="'.T('Search').'" />';
223 if($this->System->User->Licence(LICENCE_USER))
224 $Output .= ' <a href="?action=insert">'.T('Add word').'</a>';
225
226 $Output .= '</td></tr>'.
227 '<tr><td>'.T('Language').': ';
228 $Lang = '<a href="?language=">'.T('All').'</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` = '.$this->System->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' => T('English')),
270 array('Name' => 'Translated', 'Title' => $LanguageName),
271 );
272 if(!is_numeric($_SESSION['language'])) $TableColumns[] = array('Name' => 'LangName', 'Title' => T('Language'));
273 $TableColumns[] = array('Name' => 'Description', 'Title' => T('Description'));
274 $TableColumns[] = array('Name' => 'UserName', 'Title' => T('Translator'));
275 if($this->System->User->Licence(LICENCE_USER)) $TableColumns[] = array('Name' => '', 'Title' => T('Action'));
276 $Order = GetOrderTableHeader($TableColumns, 'Original');
277 $Output .= '<table 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="'.$this->System->Link('/user.php?user='.$Line['UserId']).'">'.$Line['UserName'].'</a></td>';
289 if($this->System->User->Licence(LICENCE_USER))
290 {
291 if($Line['UserId'] == $this->System->User->Id)
292 $Output .= '<td><a href="?action=remove&amp;id='.$Line['Id'].'" onclick="return confirmAction(\''.T('Do you really want to delete item?').'\');">'.T('Delete').'</a>'.
293 ' <a href="?action=modify&amp;id='.$Line['Id'].'">'.T('Modify').'</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;
308
309$LanguageList = GetLanguageList();
310
311if(!isset($_SESSION['language']))
312{
313 if($this->System->User->Licence(LICENCE_USER))
314 {
315 $_SESSION['language'] = $this->System->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>'.T('Dictionary').'</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(T('Unknown action'), MESSAGE_CRITICAL);
337}
338if($ShowList == true) $Output .= $this->DictionaryShow();
339 return($Output);
340 }
341}
Note: See TracBrowser for help on using the repository browser.