Name = 'Admin';
$this->Version = '1.0';
$this->Creator = 'Chronos';
$this->License = 'GNU/GPL';
$this->Description = 'Administrator section of the web';
$this->Dependencies = array('Translation');
}
function DoStart(): void
{
Core::Cast($this->System)->RegisterMenuItem(array(
'Title' => T('Administration'),
'Hint' => T('Administration tools'),
'Link' => $this->System->Link('/admin/'),
'Permission' => LICENCE_ADMIN,
'Icon' => '',
));
$this->System->RegisterPage(['admin'], 'PageAdmin');
}
}
class PageAdmin extends Page
{
function ShowMenu()
{
$Output = '
'.T('Administration tools').'
';
$Output .= '
'.
''.T('Database management').'
'.
'Rozhraní phpMyAdmin pro přímou správu databáze
'.
''.T('Text import').'
'.
'Načtení zdrojových textů do databáze
'.
''.T('Event log').'
'.
'Procházení všech systémových záznamů akcí a událostí
'.
''.T('Testing').'
'.
'Testovací funkce
'.
''.T('Export of the web interface translation').'
'.
'Exportovat texty z PHP souborů pro překlad rozhraní
'.
'Nastavit nekompletní texty
'.
'Nastaví questy, které jsou v popisu nebo objektu stejné jako nedokončené
'.
'Opravit špatně nastavené VersionEnd
'.
'Nastaví špatné version end a Take na originální text, které vzniklo v důsledku importu a špatně indexovaného indexu Take
'.
'Připravit dbc strukturu
'.
'Otevře dbc soubory převedené do textové formy pro přípravu struktury pro import
'.
'Sjednocení textů
'.
'Sjednotí stejné originální texty v databázi
';
return $Output;
}
function TestError($P1, $P2)
{
$s = $TT[0];
}
function TestException($P1, $P2)
{
throw new Exception('Test exception');
}
function TestSQLError($Query)
{
$DbResult = $this->System->Database->query($Query);
}
function ShowPHPInfo()
{
return phpinfo();
}
function Testing()
{
$this->Title = T('Testing');
$Output = 'PHP info
'.
'PHP informace
'.
'Testovací chyba
'.
'Vyvolá testovací chybu
'.
'Testovací výjimka
'.
'Vyvolá testovací chybu
'.
'Chybný SQL dotaz
'.
'Vyvolá testovací chybu
';
return $Output;
}
function Uncomplete()
{
$DbResult = $this->System->Database->query('SELECT `gs_tran`.`ID`,`gs_tran`.`Details`,`gs_tran`.`Objectives` FROM '
.'`TextQuest` AS `gs_tran` '
.'JOIN `TextQuest` AS `gs_orig` ON `gs_orig`.`Entry` = `gs_tran`.`Entry` '
.'AND `gs_orig`.`Language` =0 '
.'WHERE `gs_tran`.`Language` !=0 '
.'AND `gs_tran`.`Complete` =1 '
.'AND ( (`gs_tran`.`Details` = `gs_orig`.`Details` AND "" != `gs_orig`.`Details` )'
.' OR ( `gs_tran`.`Objectives` != `gs_orig`.`Objectives` AND "" = `gs_tran`.`Objectives` )'
.' OR ( `gs_tran`.`Details` != `gs_orig`.`Details` AND "" = `gs_tran`.`Details` )'
.' OR (`gs_tran`.`Objectives` = `gs_orig`.`Objectives` AND "" != `gs_orig`.`Objectives` ))'
);
$Output = 'Questy:
';
while ($quest = $DbResult->fetch_assoc())
{
$Output .= $quest['ID'].', ';
$this->System->Database->query('UPDATE `TextQuest` SET `complete` = 0 WHERE ID='.$quest['ID']);
}
$Output .= '
Questy nastaveny jako nedokončené!';
return $Output;
}
function RepairVersionEnd()
{
$TranslationTree = ModuleTranslation::Cast($this->System->ModuleManager->GetModule('Translation'))->GetTranslationTree();
$Output = '';
foreach ($TranslationTree as $Group)
// $Group = $TranslationTree[1];
{
$sql = 'SELECT `T`.`ID`,`T`.`Take`,`sub1`.`ID` as `origID`,T.`VersionStart`,T.`VersionEnd`,`sub1`.`VersionStart` as OrigStart,sub1.`VersionEnd` as `OrigEnd` FROM `'.$Group['TablePrefix'] .'` as `T` '.
' JOIN `'.$Group['TablePrefix'].'` as `sub1` ON `sub1`.`Language` = 0 AND `T`.`Entry` = `sub1`.`Entry` AND `T`.`VersionStart` = `sub1`.`VersionStart` '.
' WHERE `T`.`Take` != `sub1`.`ID` AND `T`.`Language` != 0'.
// ' WHERE `T`.`Language` != 0 AND `T`.`VersionEnd` != `sub1`.`VersionEnd` AND `T`.`Take` NOT IN'.
// '(Select `ID` FROM `'.$Group['TablePrefix'].'` as `sub2` WHERE `sub2`.`Language` = 0 AND `T`.`Entry` = `sub2`.`Entry` AND `T`.`VersionStart` = `sub2`.`VersionStart`)'.
' '; //LIMIT 1000
$DbResult = $this->System->Database->query($sql);
echo ':
'.$Group['TablePrefix'].':
';
while ($line = $DbResult->fetch_assoc())
{
echo ($line['ID'].', ');
$this->System->Database->query('UPDATE `'.$Group['TablePrefix'].'` SET `VersionEnd` = '.
$line['OrigEnd'].', `Take` = '.$line['origID'].' WHERE ID='.$line['ID']);
}
echo '
Verze '.$Group['TablePrefix'].' opraveny!';
}
return 'Hotovo!';
}
function StripText($Text)
{
$Text = strtolower($Text);
$Text = str_replace(' ', '', $Text);
return $Text;
}
function MergeSameText()
{
$TranslationTree = ModuleTranslation::Cast($this->System->ModuleManager->GetModule('Translation'))->GetTranslationTree();
$Output = '';
foreach ($TranslationTree as $Group)
// $Group = $TranslationTree[1];
{
$sql = 'SELECT * FROM `'.$Group['TablePrefix'] .'` as `T` '.
// ' JOIN `'.$Group['TablePrefix'].'` as `sub1` ON `sub1`.`Language` = 0 AND `T`.`Entry` = `sub1`.`Entry` AND `T`.`VersionStart` < `sub1`.`VersionStart` '.
' WHERE `T`.`Language` = 0 '.
' ORDER BY `T`.`VersionStart`'; //LIMIT 1000
$DbResult = $this->System->Database->query($sql);
echo ':
'.$Group['TablePrefix'].': ';
while ($line = $DbResult->fetch_assoc())
{
$sql = 'SELECT * FROM `'.$Group['TablePrefix'] .'` as `T` '.
' WHERE `T`.`Language` = 0 AND `T`.`VersionStart` > '.$line['VersionEnd'].' AND `T`.`Entry` = '.$line['Entry'].
' ORDER BY `T`.`VersionStart` LIMIT 1'; //LIMIT 1000
$DbResult2 = $this->System->Database->query($sql);
if ($DbResult2->num_rows > 0)
{
$line2 = $DbResult2->fetch_assoc();
$Same = true;
foreach ($TranslationTree[$Group['Id']]['Items'] as $Column)
{
if ($this->StripText($line[$Column['Column']]) <> $this->StripText($line2[$Column['Column']]))
$Same = false;
}
if ($Same)
{
echo $line['ID'].'='.$line2['ID'].' (';
// $this->System->Database->query('UPDATE `'.$Group['TablePrefix'].'` SET `Take` = NULL WHERE ID='.$line2['ID']);
$sql = 'SELECT * FROM `'.$Group['TablePrefix'] .'` as `T` '.
' WHERE `T`.`Entry` = '.$line['Entry'].' AND (`T`.`Take` = '.$line['ID'].' OR `T`.`Take` = '.$line2['ID'].') ';
$DbResult3 = $this->System->Database->query($sql);
while ($line3 = $DbResult3->fetch_assoc())
{
echo $line3['ID'].' ';
$this->System->Database->query('UPDATE `'.$Group['TablePrefix'].'` SET `VersionEnd` = '.$line2['VersionEnd'].', `VersionStart` = '.$line['VersionStart'].', `Take` = '.$line['ID'].' WHERE ID='.$line3['ID']);
}
$this->System->Database->query('DELETE FROM`'.$Group['TablePrefix'].'` WHERE ID='.$line2['ID']);
$this->System->Database->query('UPDATE `'.$Group['TablePrefix'].'` SET `VersionEnd` = '.$line2['VersionEnd'].' WHERE ID='.$line['ID']);
echo '), ';
}
}
}
echo('Texty '.$Group['TablePrefix'].' sjednoceny!');
}
return 'Hotovo!';
}
function DbcStructure()
{
$TranslationTree = ModuleTranslation::Cast($this->System->ModuleManager->GetModule('Translation'))->GetTranslationTree();
$Output = '';
if (array_key_exists('GameVersion', $_GET))
{
$_SESSION['GameVersion'] = $_GET['GameVersion'];
}
if (!array_key_exists('GameVersion', $_SESSION))
$_SESSION['GameVersion'] = Core::Cast($this->System)->Config['Web']['GameVersion'];
$Output .= '
Nastavená verze: '.$_SESSION['GameVersion'].'
';
if (array_key_exists('GroupItem', $_GET)) {
$DbResult = $this->System->Database->query('SELECT * FROM `ClientVersion` WHERE `Version` = "'.$_SESSION['GameVersion'].'"');
$Version = $DbResult->fetch_assoc();
$this->System->Database->query('INSERT INTO `GroupItemDBC` (`Id` ,`ClientVersion` ,`GroupItem` ,`ColumnIndex`)VALUES (NULL , \''.$Version['Id'].'\', \''.$_GET['GroupItem'].'\', \''.$_GET['ColumnIndex'].'\')');
$Output .= 'vloženo
';
}
if (array_key_exists('id', $_GET))
{
$Group = $TranslationTree[$_GET['id']];
// $Output .= '';
$FileName = NormalizePath(dirname(__FILE__).'/../source/'.$_SESSION['GameVersion'].'/dbc/'.$Group['DBCFileName'].'.dbc.csv');
$File = new FileStream();
$File->OpenFile($FileName);
//while (!$File->EOF())
$Output .= '';
$Output .= '';
$Line = $File->ReadLine();
for ($i = 0; $i < substr_count($Line, ','); $i++)
{
$Output .= $i;
$Output .= ' | ';
}
$Output .= ' |
';
for ($i = 0; $i < substr_count($Line, ','); $i++)
{
foreach ($Group['Items'] as $GroupItem)
{
$Output .= ' '.
$GroupItem['Column'].' ';
}
$Output .= ' | ';
}
$Output .= ' |
';
$Output .= str_replace(',', ' | ', $Line);
$Output .= ' |
';
for ($i = 0; $i < 50; $i++)
{
$Line = $File->ReadLine();
$Output .= str_replace(',', ' | ', $Line);
$Output .= ' |
';
}
$Output .= ' |
';
$Output .= '
';
} else
{
$DbResult = $this->System->Database->query('SELECT * FROM `ClientVersion`');
while ($Version = $DbResult->fetch_assoc())
{
$Output .= ''.$Version['Version'].' ';
}
$Output .= '
';
foreach ($TranslationTree as $Group)
{
if ($Group['DBCFileName'] <> '')
$Output .= ''.$Group['DBCFileName'].'
';
}
}
return $Output;
}
function ShowLocale()
{
Core::Cast($this->System)->LocaleManager->UpdateAll(dirname(dirname(__FILE__)));
$Output = 'Překlad rozhraní přegenerován';
$Output .= 'Originál | Překlad |
';
foreach (Core::Cast($this->System)->LocaleManager->CurrentLocale->Texts->Data as $Index => $Item)
$Output .= ''.$Index.' | '.$Item.' |
';
$Output .= '
';
$Output .= 'Překladové soubory zaktualizovány';
return $Output;
}
function Show(): string
{
$User = ModuleUser::Cast($this->System->GetModule('User'))->User;
$this->Title = T('Administration');
$Output = '';
if ($User->Licence(LICENCE_ADMIN))
{
if (array_key_exists('action', $_GET))
{
if ($_GET['action'] == 'error') $Output .= $this->TestError(12, 'test');
else if ($_GET['action'] == 'exception') $Output .= $this->TestException(12, 'test');
else if ($_GET['action'] == 'sqlerror') $Output .= $this->TestSQLError('SELECT dads FROM sdas');
else if ($_GET['action'] == 'testing') $Output .= $this->Testing();
else if ($_GET['action'] == 'phpinfo') $Output .= $this->ShowPHPInfo();
else if ($_GET['action'] == 'locale') $Output .= $this->ShowLocale();
else if ($_GET['action'] == 'uncomplete') $Output .= $this->Uncomplete();
else if ($_GET['action'] == 'repairversion') $Output .= $this->RepairVersionEnd();
else if ($_GET['action'] == 'dbcstructure') $Output .= $this->DbcStructure();
else if ($_GET['action'] == 'merge') $Output .= $this->MergeSameText();
else $Output .= $this->ShowMenu();
} else $Output .= $this->ShowMenu();
} else $Output .= ShowMessage(T('Access denied'), MESSAGE_CRITICAL);
return $Output;
}
}