<?php class CompletionState { const All = 0; const NotTranslated = 1; const Translated = 2; const NotFinished = 3; const Original = 4; const NotFinishedNotTranslated = 5; const Missing1 = 6; const Missing2 = 7; } class PageTranslationList extends Page { function ShowFilter($GroupId = 0) { $User = ModuleUser::Cast($this->System->GetModule('User'))->User; $TranslationTree = ModuleTranslation::Cast($this->System->GetModule('Translation'))->GetTranslationTree(); $Filter = array('SQL' => ''); $Output = '<form action="?" method="post">'. '<table class="BaseTable"><tr>'. '<th>'.T('Processing').'</th>'. '<th>'.T('Group').'</th>'. '<th>'.T('Version').'</th>'. '<th>'.T('Language').'</th>'. '<th>'.T('Translator').'</th>'. '<th>'.T('Words').'</th>'. '<th>'.T('Item').'</th>'. '<th></th></tr><tr>'; // State $Filter['State'] = GetParameter('state', 0, true, true); $Output .= '<td><select name="state">'; $StateTypes = array( CompletionState::All => T('All'), CompletionState::NotTranslated => T('Not translated'), CompletionState::Translated => T('Translated'), CompletionState::NotFinished => T('Unfinished'), CompletionState::Original => T('Original'), CompletionState::NotFinishedNotTranslated => T('Unfinished - Not translated'), CompletionState::Missing1 => T('Missing $ ($N,$s..)'), CompletionState::Missing2 => T('Missing $ - Not fixed'), ); foreach ($StateTypes as $index => $StateType) { if ($Filter['State'] == $index) $Selected = ' selected="selected"'; else $Selected = ''; $Output .= '<option value="'.$index.'"'.$Selected.'>'.$StateType.'</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.'>'.T('All').'</option>'; $DbResult = $this->Database->query('SELECT `Id`,`Name` FROM `Group`'); while ($Group = $DbResult->fetch_assoc()) $Groups[T($Group['Name'])] = $Group; ksort($Groups); foreach ($Groups as $Group) { if ($Group['Id'] == $Filter['Group']) $Selected = ' selected="selected"'; else $Selected = ''; $Output .= '<option value="'.$Group['Id'].'"'.$Selected.'>'.T($Group['Name']).'</option>'; } $Output .= '</select></td>'; if ($User->Licence(LICENCE_USER)) $Filter['Version'] = GetParameter('version', $User->PreferredVersion, true, true); else $Filter['Version'] = GetParameter('version', 0, true, true); if ($Filter['Version'] != 0) { $DbResult = $this->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.'>'.T('All').'</option>'; $DbResult = $this->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.'>'.T('All').'</option>'; $DbResult = $this->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.'>'.T($Language['Name']).'</option>'; } $Output .= '</select></td>'; $LanguageFilter = ''; $LanguageFilterSub = ''; if ($Filter['Language'] != 0) { $LanguageFilter = ' AND (`T`.`Language` = '.$Filter['Language'].')'; $LanguageFilterSub = ' AND (`Sub`.`Language` = '.$Filter['Language'].')'; } // 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.'>'.T('All').'</option>'; $DbResult = $this->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="'.htmlentities($Filter['Text']).'"></td>'; if ($Filter['Text'] != '') { $Items = array('(`T`.`ID` LIKE "%'.$Filter['Text'].'%")', '(`T`.`Entry` LIKE "%'.$Filter['Text'].'%")'); if ($Filter['Group'] != 0) foreach ($TranslationTree[$Filter['Group']]['Items'] as $GroupItem) if ($GroupItem['Visible'] == 1) $Items[] = '(`T`.`'.$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="'.htmlentities($Filter['Entry']).'"></td>'; if ($Filter['Entry'] != '') { $Filter['SQL'] .= ' AND (`Entry` = "'.$Filter['Entry'].'")'; } if ($Filter['Group'] != 0) { $WithoutAlter = ' AND NOT EXISTS(SELECT 1 FROM `'.$Table.'` AS `Sub` WHERE '. '(`Sub`.`Language` <> '.Core::Cast($this->System)->Config['OriginalLanguage'].')'.$LanguageFilterSub. ' AND (`Sub`.`Entry` = `T`.`Entry`) AND (`Sub`.`ID` != `T`.`ID`) AND (`Sub`.`Complete` = 1) AND '. '(`Sub`.`VersionStart` = `T`.`VersionStart`) AND (`Sub`.`VersionEnd` = `T`.`VersionEnd`) LIMIT 1 ) '; foreach ($TranslationTree[$Filter['Group']]['Items'] as $GroupItem) if ($GroupItem['Visible'] == 1) { $ItemsVar[] = 'LENGTH(`T`.`'.$GroupItem['Column'].'`) - LENGTH( REPLACE( `T`.`'.$GroupItem['Column'].'`, \'$\', \'\' ) ) '. ' < ('. 'SELECT LENGTH(`Sub`.`'.$GroupItem['Column'].'`) - LENGTH( REPLACE( `Sub`.`'.$GroupItem['Column'].'`, \'$\', \'\' ) ) FROM `'.$Table.'` AS `Sub` WHERE '. ' `Sub`.`Entry` = `T`.`Entry` AND `Sub`.`Language` = '.Core::Cast($this->System)->Config['OriginalLanguage'].' AND '. '`Sub`.`VersionStart` = `T`.`VersionStart` AND `Sub`.`VersionEnd` = `T`.`VersionEnd` LIMIT 1 '. ')'; } if ($Filter['State'] == CompletionState::All) { $Filter['SQL'] .= $UserFilter.$VersionFilter; } else if ($Filter['State'] == CompletionState::NotTranslated) { $Filter['SQL'] .= $VersionFilter.' AND (`T`.`Language` = '.Core::Cast($this->System)->Config['OriginalLanguage'].') '. 'AND NOT EXISTS(SELECT 1 FROM `'.$Table.'` AS `Sub` WHERE '. '(`Sub`.`Language` <> '.Core::Cast($this->System)->Config['OriginalLanguage'].') '.$LanguageFilterSub.$UserFilter. ' AND (`Sub`.`Entry` = `T`.`Entry`) AND (`Sub`.`Complete` = 1) AND '. '(`Sub`.`VersionStart` = `T`.`VersionStart`) AND (`Sub`.`VersionEnd` = `T`.`VersionEnd`))'; } else if ($Filter['State'] == CompletionState::Translated) { $Filter['SQL'] .= $UserFilter.$LanguageFilter.$VersionFilter.' AND (`T`.`Complete` = 1)'; } else if ($Filter['State'] == CompletionState::NotFinished) { $Filter['SQL'] .= $UserFilter.$LanguageFilter.$VersionFilter.' AND (`T`.`Language` != '.Core::Cast($this->System)->Config['OriginalLanguage']. ') AND (`T`.`Complete` = 0)'; } else if ($Filter['State'] == CompletionState::Original) { $Filter['SQL'] .= $VersionFilter.' AND (`T`.`Language` = '.Core::Cast($this->System)->Config['OriginalLanguage'].')'; } else if ($Filter['State'] == CompletionState::NotFinishedNotTranslated) { $Filter['SQL'] .= $UserFilter.$VersionFilter.$WithoutAlter. ' AND (`T`.`Language` != '.Core::Cast($this->System)->Config['OriginalLanguage']. ') AND (`T`.`Complete` = 0)'; } else if ($Filter['State'] == CompletionState::Missing1) { $Filter['SQL'] .= $UserFilter.$VersionFilter.' AND (`T`.`Complete` = 1) AND `T`.`Language` != '.Core::Cast($this->System)->Config['OriginalLanguage']; $Filter['SQL'] .= ' AND ('.implode(' OR ', $ItemsVar).') '; } else if ($Filter['State'] == CompletionState::Missing2) { $Filter['SQL'] .= $UserFilter.$VersionFilter.' AND (`T`.`Complete` = 1) AND `T`.`Language` != '.Core::Cast($this->System)->Config['OriginalLanguage']; $Filter['SQL'] .= ' '. $WithoutAlter; $Filter['SQL'] .= ' AND ('.implode(' OR ', $ItemsVar).') '; } } /* // Ownership if (array_key_exists('owner', $_GET) and is_numeric($_GET['owner'])) $Filter['Owner'] = $_GET['owner']; else $Filter['Owner'] = 0; $Output .= ' <td><select name="owner">'; if ($Filter['Owner'] == 0) $Selected = ' selected="selected"'; else $Selected = ''; $Output .= '<option value="0"'.$Selected.'>VÅ¡ech</option>'; if ($Filter['Owner'] == 1) $Selected = ' selected="selected"'; else $Selected = ''; $Output .= '<option value="1"'.$Selected.'>PÅ™ekladatelův tým</option>'; if ($Filter['Owner'] == 2) $Selected = ' selected="selected"'; else $Selected = ''; $Output .= '<option value="2"'.$Selected.'>PÅ™ekladatele</option>'; $Output .= '</select></td>'; if (($Filter['Owner'] == 2) AND ($Filter['User'] != 0)) $Filter['SQL'] .= ' AND (`User` = '.$Filter['User'].')'; */ $Output .= '<td><input type="submit" value="'.T('Filter').'"/></td>'; $Output .= '</tr></table>'; $Output .= '</form><br/>'; $Filter['Output'] = $Output; return $Filter; } function ShowTranslationList($Filter) { $TranslationTree = $this->System->ModuleManager->Modules['Translation']->GetTranslationTree(); $Output = $Filter['Output']; $Table = $TranslationTree[$Filter['Group']]['TablePrefix']; $Query = 'SELECT `T`.`ModifyTime`, `T`.`ID`, `T`.`Entry`, `T`.`VersionStart`, `T`.`VersionEnd`, '. '`T`.`'.$TranslationTree[$Filter['Group']]['Items'][0]['Column'].'`, '. '`User`.`Name` AS `UserName`, `User`.`ID` AS `UserId`, '. '`Language`.`Name` AS `LanguageName`, `TS`.`Version` AS `VersionStartText`, `TE`.`Version` AS `VersionEndText` '. 'FROM `'.$Table.'` AS `T` '. 'LEFT JOIN `User` ON `User`.`ID` = `T`.`User` '. 'LEFT JOIN `Language` ON `Language`.`ID` = `T`.`Language` '. 'LEFT JOIN `ClientVersion` AS `TS` ON `TS`.`BuildNumber` = `T`.`VersionStart` '. 'LEFT JOIN `ClientVersion` AS `TE` ON `TE`.`BuildNumber` = `T`.`VersionEnd` '. 'WHERE 1 '.$Filter['SQL']; // Get total item count $DbResult = $this->Database->query('SELECT COUNT(*) FROM ('.$Query.') AS `TT`'); $DbRow = $DbResult->fetch_row(); $PageList = GetPageList($DbRow[0]); $Output .= $PageList['Output']; $TableColumns = array( array('Name' => 'ID', 'Title' => T('Number')), array('Name' => 'Entry', 'Title' => T('Item')), array('Name' => $TranslationTree[$Filter['Group']]['Items'][0]['Column'], 'Title' => T('Name')), array('Name' => 'VersionStart', 'Title' => T('From version')), array('Name' => 'VersionEnd', 'Title' => T('To version')), array('Name' => 'LanguageName', 'Title' => T('Language')), array('Name' => 'UserName', 'Title' => T('Translator')), array('Name' => 'ModifyTime', 'Title' => T('Date')), ); $Order = GetOrderTableHeader($TableColumns, 'VersionStart', 1); $Output .= '<table class="BaseTable">'. $Order['Output']; $DbResult = $this->Database->query($Query.' '.$Order['SQL'].' '.$PageList['SQLLimit']); while ($Line = $DbResult->fetch_assoc()) { $Text = $Line[$TranslationTree[$Filter['Group']]['Items'][0]['Column']]; if ($Text != null) $Text = htmlspecialchars($Text); $Output .= '<tr><td><a href="'.$this->System->Link('/form.php?group='.$Filter['Group'].'&ID='.$Line['ID']).'">'.$Line['ID'].'</a></td>'. '<td>'.$Line['Entry'].'</td>'. '<td>'.$Text.'</td>'. '<td><a href="'.$this->System->Link('/client-version/?action=item&id='. GetVersionWOWId($Line['VersionStart'])).'">'.GetVersionWOW($Line['VersionStart']).'</a></td>'. '<td><a href="'.$this->System->Link('/client-version/?action=item&id='. GetVersionWOWId($Line['VersionEnd'])).'">'.GetVersionWOW($Line['VersionEnd']).'</a></td>'. '<td>'.T($Line['LanguageName']).'</td>'. '<td><a href="'.$this->System->Link('/user/?user='.$Line['UserId']).'">'.$Line['UserName'].'</a></td>'. '<td>'.HumanDate($Line['ModifyTime']).'</td>'. '</tr>'; } $Output .= '</table>'. $PageList['Output']; return $Output; } function ShowGroupList($Filter) { $TranslationTree = $this->System->ModuleManager->Modules['Translation']->GetTranslationTree(); $Output = $Filter['Output']; $Output .= '<table class="BaseTable"><tr><th>'.T('Group').'</th><th>'.T('Count').'</th></tr>'; $Total = 0; foreach ($TranslationTree as $Group) { if ($Group['TablePrefix'] != '') { $Filter = $this->ShowFilter($Group['Id']); $ID = $this->Database->query('SELECT COUNT(*) FROM `'.$Group['TablePrefix'].'` AS `T` WHERE 1 '.$Filter['SQL']); $Line = $ID->fetch_row(); if ($Line[0] <> '0') $Output .= '<tr><td><a href="?group='.$Group['Id'].'">'.$Group['Name'].'</td><td>'.$Line[0].'</a></tr>'; $Total += $Line[0]; } } $Output .= '<tr><td><strong>'.T('Total').'</strong></td><td><strong>'.$Total.'</strong></td></tr>'. '</table>'; return $Output; } function ShowMenu() { $User = ModuleUser::Cast($this->System->GetModule('User'))->User; $TranslationTree = $this->System->ModuleManager->Modules['Translation']->GetTranslationTree(); $GroupId = GetParameter('group', 0, true); if ($GroupId == 0) $Output = ShowMessage('Skupina nenalezena', MESSAGE_CRITICAL); else { $Table = $TranslationTree[$GroupId]['TablePrefix']; $Output = '<h3>'.T('Basic text filtering').'</h3><br/>'. '<table class="BaseTable"><tr><th>'.T('Link').'</th><th>'.T('Description').'</th></tr>'. '<tr><td><a title="'.T('All texts available in group').'" href="?group='.$GroupId.'&state=4">'.T('All').'</a></td>'. '<td>'.T('Show all available original texts in group').'</td></tr>'. '<tr><td><a title="'.T('Translated texts, you can modify them here').'" href="?group='.$GroupId.'&state=2">'.T('Translated').'</a></td>'. '<td>'.T('Show only translated texts').'</td></tr>'. '<tr><td><a title="'.T('Untranslated texts').'" href="?group='.$GroupId.'&state=1">'.T('Untranslated').'</a></td>'. '<td>'.T('Not yet translated texts which need to be translated').'</td></tr>'. '<tr><td><a title="'.T('Unfinished texts').'" href="?group='.$GroupId.'&state=3">'.T('Unfinished').'</a></td>'. '<td>'.T('Texts marked as unfinished').'</td></tr>'; if ($User->Licence(LICENCE_USER)) { $Output .= '<tr><td><a title="'.T('Unfinished texts').'" href="?group='.$GroupId.'&state=3&user='.$User->Id.'">'.T('My unfinished').'</a></td> <td>'.T('Unfinished texts of logged-in user').'</td></tr> <tr><td><a title="'.T('Translated texts of logged-in user').'" href="?group='.$GroupId.'&state=2&user='.$User->Id.'">'.T('My translated').'</a></td> <td>'.T('Translated texts of logged-in user').'</td></tr>'; } $Output .= '<tr><td><form action="?group='.$GroupId.'&entry=" method="post"><div>'. '<input type="text" name="text" size="8" />'. '<input type="submit" value="'.T('Search').'" />'. '</div></form>'. '</td><td>'.T('Search using text').'</td></tr>'; $Output .= '<tr><td><form action="?group='.$GroupId.'&text=" method="post"><div>'. '<input type="text" name="entry" size="8" />'. '<input type="submit" value="'.T('Search').'" />'. '</div></form>'. '</td><td>'.T('Show by datbase text ID').'</td></tr>'; $Output .= '</table>'; } return $Output; } function Show(): string { $this->Title = T('Translation groups'); $Action = GetParameter('action', ''); if ($Action == 'filter') $Output = $this->ShowMenu(); else { $Filter = $this->ShowFilter(); if ($Filter['Group'] > 0) $Output = $this->ShowTranslationList($Filter); else $Output = $this->ShowGroupList($Filter); } return $Output; } } class PageTranslationGroups extends Page { function ShowList() { $User = ModuleUser::Cast($this->System->GetModule('User'))->User; $DbResult = $this->Database->query('SELECT COUNT(*) FROM `Group`'); $DbRow = $DbResult->fetch_row(); $PageList = GetPageList($DbRow[0]); $Output = '<h3>'.T('List of translation groups').'</h3>'. $PageList['Output']; $Output .= '<table class="BaseTable">'; $TableColumns = array( array('Name' => 'Name', 'Title' => T('Name')), array('Name' => 'SourceType', 'Title' => T('Source type')), array('Name' => '', 'Title' => T('Sources')), array('Name' => 'LastImport', 'Title' => T('Date of last import')), array('Name' => 'LastVersion', 'Title' => T('Version of last import')), ); if ($User->Licence(LICENCE_ADMIN)) $TableColumns[] = array('Name' => '', 'Title' => T('Actions')); $Order = GetOrderTableHeader($TableColumns, 'Name', 0); $Output .= $Order['Output']; $DbResult = $this->Database->query('SELECT * FROM `Group`'.$Order['SQL'].$PageList['SQLLimit']); while ($Group = $DbResult->fetch_assoc()) { $Output .= '<tr><td><a href="'.$this->System->Link('/TranslationList.php?group='.$Group['Id'].'&action=filter').'">'.T($Group['Name']).'</a></td>'. '<td>'.$Group['SourceType'].'</td><td>'; if ($Group['MangosTable'] != '') $Output .= $Group['MangosTable'].'.sql '; if ($Group['DBCFileName'] != '') $Output .= $Group['DBCFileName'].'.dbc '; if ($Group['LuaFileName'] != '') $Output .= $Group['LuaFileName'].'.lua '; $Output .= '</td>'; if ($User->Licence(LICENCE_ADMIN)) $Output .= '<td><a title="ZmÄ›ny po poslednÃm importu u vybrané pÅ™ekladové skupiny" href="'.$this->System->Link('/log/?group='. $Group['Id'].'&type=11').'">'.HumanDate($Group['LastImport']).'</a></td>'; else $Output .= '<td>'.HumanDate($Group['LastImport']).'</td>'; $Output .= '<td><a href="'.$this->System->Link('/client-version/?action=item&id='. GetVersionWOWId($Group['LastVersion'])).'">'.GetVersionWOW($Group['LastVersion']).'</a></td>'; if ($User->Licence(LICENCE_ADMIN)) $Output .= '<td><a href="?action=groupdelete&id='.$Group['Id'].'">'.T('Remove').'</a></td>'; $Output .= '</tr>'; } $Output .= '</table>'. '<br /><a title="'.T('Changelog of changes after import').'" href="'.$this->System->Link('/log/?type=11').'">'.T('Changelog of text modification during import').'</a><br/>'; if ($User->Licence(LICENCE_ADMIN)) $Output .= '<a href="?action=groupadd">'.T('Add translation group').'</a>'; return $Output; } function ShowGroupAdd() { $User = ModuleUser::Cast($this->System->GetModule('User'))->User; if ($User->Licence(LICENCE_ADMIN)) { $Output = '<h3>Vloženà nové pÅ™ekladové skupiny</h3>'. '<form action="?action=groupaddfinish" method="post">'. '<table>'. '<tr><td>Název:</td><td><input type="text" name="Name"/></td></tr>'. '<tr><td>Název tabulky v databázi:</td><td>Text<input type="text" name="TablePrefix"/></td></tr>'. '<tr><td colspan="2"><input type="submit" name="add" value="PÅ™idat"/></td></tr>'. '</table></form>'; } else $Output = ShowMessage(T('Access denied'), MESSAGE_CRITICAL); return $Output; } function ShowGroupAddFinish() { $User = ModuleUser::Cast($this->System->GetModule('User'))->User; if ($User->Licence(LICENCE_ADMIN)) { $TableName = 'Text'.$_POST['TablePrefix']; $DbResult = $this->System->Database->select('Group', 'Id', 'TablePrefix="'.$TableName.'"'); if ($DbResult->num_rows == 0) { $this->System->Database->query('CREATE TABLE IF NOT EXISTS `'.$TableName.'` ( `ID` int(11) NOT NULL AUTO_INCREMENT, `Entry` int(11) NOT NULL, `Name` varchar(255) NOT NULL, `Language` int(11) NOT NULL DEFAULT "0", `User` int(11) DEFAULT NULL, `Complete` int(11) NOT NULL, `CompleteParts` int(11) NOT NULL, `Take` int(11) DEFAULT NULL, `VersionStart` int(11) NOT NULL, `VersionEnd` int(11) NOT NULL, `ModifyTime` datetime NOT NULL, PRIMARY KEY (`ID`), KEY `Entry` (`Entry`), KEY `User` (`User`), KEY `Take` (`Take`), KEY `Language` (`Language`), KEY `Complete` (`Complete`), KEY `VersionStart` (`VersionStart`), KEY `VersionEnd` (`VersionEnd`), KEY `ModifyTime` (`ModifyTime`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;'); $this->System->Database->query('ALTER TABLE `'.$TableName.'` ADD CONSTRAINT `'.$TableName.'_ibfk_1` FOREIGN KEY (`Language`) REFERENCES `Language` (`Id`), ADD CONSTRAINT `'.$TableName.'_ibfk_2` FOREIGN KEY (`User`) REFERENCES `User` (`ID`), ADD CONSTRAINT `'.$TableName.'_ibfk_3` FOREIGN KEY (`Take`) REFERENCES `'.$TableName.'` (`ID`);'); $DbResult = $this->System->Database->insert('Group', array('Name' => $_POST['Name'], 'TablePrefix' => $TableName, 'PrimaryKeyItem' => 'Entry')); $Group = $this->System->Database->insert_id; $this->System->Database->insert('GroupItem', array('Group' => $Group, 'Name' => 'Jméno', 'Column' => 'Name', 'Visible' => 1)); $Output = ShowMessage('PÅ™ekladová skupina vytvoÅ™ena', MESSAGE_INFORMATION); } else $Output = ShowMessage('PÅ™ekladová skupina '.$TableName.' již existuje', MESSAGE_CRITICAL); $Output .= $this->ShowList(); } else $Output = ShowMessage(T('Access denied'), MESSAGE_CRITICAL); return $Output; } function ShowGroupDelete() { $User = ModuleUser::Cast($this->System->GetModule('User'))->User; if ($User->Licence(LICENCE_ADMIN)) { $DbResult = $this->System->Database->select('Group', '*', '`Id`='.$_GET['id']); if ($DbResult->num_rows == 1) { $Group = $DbResult->fetch_assoc(); $this->Database->query('DROP TABLE `'.$Group['TablePrefix'].'`'); $this->Database->query('DELETE FROM `GroupItem` WHERE `Group`='.$Group['Id']); $this->Database->query('DELETE FROM `Group` WHERE `Id`='.$Group['Id']); $Output = ShowMessage('PÅ™ekladová skupina '.$Group['Name'].' smazána', MESSAGE_INFORMATION); } else $Output = ShowMessage('PÅ™ekladová skupina nenalezena', MESSAGE_CRITICAL); } else $Output = ShowMessage(T('Access denied'), MESSAGE_CRITICAL); $Output .= $this->ShowList(); return $Output; } function Show(): string { $this->Title = T('Translation groups'); $Action = GetParameter('action', ''); if ($Action == 'groupadd') $Output = $this->ShowGroupAdd(); else if ($Action == 'groupdelete') $Output = $this->ShowGroupDelete(); else if ($Action == 'groupaddfinish') $Output = $this->ShowGroupAddFinish(); else $Output = $this->ShowList(); return $Output; } }