common_cadline_libraries (CRM hardlock/db/users classes; upstream cadline_web/cadcommonlib), maintenance/ (ARCHLine.XP license backend; upstream cadline_web/maintenance), maintenance2/. Vetted live files (byte-truth); upstream repos in PROVENANCE.md. NOTE: could be git submodules — kept as live files for byte-fidelity. Signed-off-by: LÁZÁR Imre <imre@illusion.hu> Assisted-by: claude-code@claude-opus-4-8
209 lines
8.0 KiB
PHP
209 lines
8.0 KiB
PHP
<?php
|
|
error_reporting(E_ERROR | E_PARSE);
|
|
if (!class_exists('POfile')) require_once("../../common_cadline_libraries/POfile.php");
|
|
if (!class_exists('Database')) require_once("../../common_cadline_libraries/crm_database.class.php");
|
|
|
|
$dir = $_SERVER['DOCUMENT_ROOT'] . '/public/pofiles';
|
|
$files = array_diff(scandir($dir), array('.', '..'));
|
|
|
|
if (count($files) >= 10)
|
|
$time = '-5 minutes';
|
|
else
|
|
$time = '-1 days';
|
|
|
|
foreach ($files as $file) {
|
|
if (filemtime($dir . '/' . $file) <= strtotime($time)) {
|
|
if (file_exists($dir . '/' . $file))
|
|
unlink($dir . '/' . $file);
|
|
}
|
|
}
|
|
|
|
$locale = array();
|
|
$guid = isset($_GET['packageID']) ? $_GET['packageID'] : time();
|
|
$lang = isset($_GET['lang']) ? strtolower($_GET['lang']) : 'eng';
|
|
$seID = isset($_GET['se']) ? $_GET['se'] : 0;
|
|
$types = array(
|
|
'resource' => '1, 2, 3, 4',
|
|
'Translat' => '10',
|
|
'Translat_Int' => '9',
|
|
'Translat_Coll' => '11',
|
|
'Translat_Mat' => '12',
|
|
'Translat_Set' => '13',
|
|
'Translat_Tooltip' => '14',
|
|
'TranslateEnergetics' => '15',
|
|
'TranslatePG' => '16'
|
|
);
|
|
|
|
$tables = array(
|
|
'eng' => 'resourcemanager.text_table_ref',
|
|
'hun' => 'resourcemanager.text_table_hun',
|
|
'ita' => 'resourcemanager.text_table_ita',
|
|
'de-de' => 'resourcemanager.text_table_ger',
|
|
'pol' => 'resourcemanager.text_table_pol',
|
|
'kor' => 'resourcemanager.text_table_kor',
|
|
'esp' => 'resourcemanager.text_table_esp',
|
|
'gre' => 'resourcemanager.text_table_gre',
|
|
'cz' => 'resourcemanager.text_table_cz',
|
|
'cr' => 'resourcemanager.text_table_cr',
|
|
'chn' => 'resourcemanager.text_table_chn',
|
|
'nor' => 'resourcemanager.text_table_nor',
|
|
'fr' => 'resourcemanager.text_table_fr',
|
|
'pt-pt' => 'resourcemanager.text_table_pt',
|
|
'us' => 'resourcemanager.text_table_ref',
|
|
'aus' => 'resourcemanager.text_table_ref',
|
|
'pt-br' => 'resourcemanager.text_table_pt',
|
|
'de-at' => 'resourcemanager.text_table_ger'
|
|
);
|
|
|
|
$zip = new ZipArchive();
|
|
$name = '/' . $guid . '.zip';
|
|
$path = $dir . $name;
|
|
|
|
if ($zip->open($path, ZipArchive::CREATE) !== TRUE)
|
|
exit("cannot open <$path>\n");
|
|
|
|
$year = '';
|
|
$progVersion = '';
|
|
$yearID = '';
|
|
|
|
if (isset($_GET['ver'])) {
|
|
$query = 'SELECT year FROM cl_hlusers.p_versions
|
|
WHERE verPassword8and9 = ?';
|
|
Database::getInstance()->query($query, array('i', $_GET['ver']));
|
|
$version = Database::getInstance()->fetchNext();
|
|
|
|
$year = $version['year'];
|
|
|
|
$query = 'SELECT id FROM resourcemanager.year y WHERE y.name = ' . $year;
|
|
Database::getInstance()->query($query, array('i', $year));
|
|
$year = Database::getInstance()->fetchNext();
|
|
|
|
$yearID = $year['id'];
|
|
|
|
$yearName = $version['year'];
|
|
} else {
|
|
$query = 'SELECT id FROM resourcemanager.year ORDER BY id DESC';
|
|
Database::getInstance()->query($query);
|
|
$year = Database::getInstance()->fetchNext();
|
|
|
|
$yearID = $year['id'];
|
|
$yearName = $year['name'];
|
|
}
|
|
|
|
if ($seID == 0) {
|
|
$progVersion = 'ARCHLine.XP ' . $yearName;
|
|
} else {
|
|
$query = 'SELECT ref.text AS txt
|
|
FROM resourcemanager.text_table_ref ref
|
|
WHERE ref.type_id = 1 AND ref.key = ?';
|
|
Database::getInstance()->query($query, array('s', $seID));
|
|
$progName = Database::getInstance()->fetchNext();
|
|
|
|
$progVersion = 'ARCHLine.XP ' . $progName['txt'] . ' ' . $yearName;
|
|
}
|
|
|
|
foreach ($types as $type_key => $type_value) {
|
|
foreach ($tables as $table_key => $table_value) {
|
|
if ($lang != 'all' && $table_key != $lang)
|
|
continue;
|
|
|
|
$poFile = new POfile();
|
|
|
|
if ($table_value == 'resourcemanager.text_table_ref') {
|
|
$query = 'SELECT ref.key AS key_id, ref.type_id AS type_id, ref.text AS lang_text
|
|
FROM resourcemanager.text_table_ref ref
|
|
WHERE ref.type_id IN (' . $type_value . ')';
|
|
|
|
$query .= ' AND (ref.from = ' . $yearID . ' OR ((ref.to is null OR ref.to = 0) AND ref.from < ' . $yearID . '))';
|
|
} else {
|
|
if (strpos($table_key, '-') !== false || $table_key == 'at') {
|
|
$query = 'SELECT * FROM resourcemanager.locale WHERE code = "' . $table_key . '"';
|
|
Database::getInstance()->query($query);
|
|
$locale = Database::getInstance()->fetchNext();
|
|
}
|
|
|
|
if (empty($locale)) {
|
|
$query = 'SELECT ref.key AS key_id, ref.type_id AS type_id, ref.text AS ref_text, res.text AS lang_text, ref.define_txt AS defines
|
|
FROM resourcemanager.text_table_ref ref
|
|
LEFT JOIN ' . $table_value . ' res ON ref.id = res.ref_id
|
|
WHERE ref.type_id IN (' . $type_value . ')';
|
|
} else {
|
|
$query = 'SELECT ref.key AS key_id, ref.type_id AS type_id, ref.text AS ref_text, res.text AS lang_text, ref.define_txt AS defines
|
|
FROM (
|
|
SELECT id, ref_id, text, locale, approved, changed, to_translate
|
|
FROM ' . $table_value . ',
|
|
(SELECT @row_number := 0) AS row_table
|
|
ORDER BY locale DESC
|
|
) AS res
|
|
LEFT JOIN resourcemanager.text_table_ref ref ON ref.id = res.ref_id
|
|
WHERE (res.locale = ' . $locale['id'] . ' OR res.locale is null) AND ref.type_id IN (' . $type_value . ') ';
|
|
}
|
|
|
|
$query .= ' AND (ref.from = ' . $yearID . ' OR ((ref.to is null OR ref.to = 0) AND ref.from < ' . $yearID . '))';
|
|
|
|
if (!empty($locale))
|
|
$query .= ' GROUP BY res.ref_id';
|
|
}
|
|
|
|
if ($type_key == 'resource')
|
|
$query .= ' ORDER BY ref.type_id ASC, cast(ref.key AS UNSIGNED) ASC';
|
|
else
|
|
$query .= ' ORDER BY ref.type_id ASC, ref.key ASC';
|
|
|
|
Database::getInstance()->query($query);
|
|
$resources = Database::getInstance()->fetchAssoc();
|
|
|
|
if (!empty($resources)) {
|
|
foreach ($resources as $res) {
|
|
$alternatives = array();
|
|
|
|
if ($res['defines'] != '') {
|
|
$defines = json_decode($res['defines']);
|
|
|
|
$alternatives = array_filter($defines->defines, function ($define) use ($table_key) {
|
|
return $define->lang == $table_key;
|
|
});
|
|
}
|
|
|
|
if ($table_value != 'resourcemanager.text_table_ref' && ($res['lang_text'] == '' || $res['lang_text'] == null)) {
|
|
$res['lang_text'] = $res['ref_text'];
|
|
}
|
|
|
|
if (strpos($res['lang_text'], '$(PROGRAM_VERSION)') !== false) {
|
|
$res['lang_text'] = str_replace('$(PROGRAM_VERSION)', $progVersion, $res['lang_text']);
|
|
}
|
|
|
|
if ($type_value >= 9 || ($type_value < 9 && empty($alternatives))) {
|
|
$msgID = $res['key_id'];
|
|
$msgStr = nl2br($res['lang_text']);
|
|
|
|
$poFile->addComment('Key', $res['type_id'] . ':' . $res['key_id']);
|
|
$poFile->addMsgctxt($res['type_id'] . ':' . $res['key_id']);
|
|
$poFile->addMsgID($msgID);
|
|
$poFile->addMsgSTR($msgStr);
|
|
}
|
|
|
|
if (!empty($alternatives)) {
|
|
foreach ($alternatives as $alternative) {
|
|
$msgID = $res['key_id'] . '' . $alternative->ext_key;
|
|
$msgStr = nl2br($alternative->text);
|
|
|
|
$poFile->addComment('Key', $res['type_id'] . ':' . $res['key_id'] . '' . $alternative->ext_key);
|
|
$poFile->addMsgctxt($res['type_id'] . ':' . $res['key_id'] . '' . $alternative->ext_key);
|
|
$poFile->addMsgID($msgID);
|
|
$poFile->addMsgSTR($msgStr);
|
|
}
|
|
}
|
|
}
|
|
|
|
$file_lang = $table_key;
|
|
|
|
$zip->addFromString($type_key . '.' . $file_lang . '.po', $poFile->getStream());
|
|
}
|
|
}
|
|
}
|
|
|
|
$zip->close();
|
|
|
|
echo 'https://www.archline.hu/public/pofiles/' . $guid . '.zip';
|