mirror of
https://github.com/unraid/webgui.git
synced 2026-01-13 13:09:58 -06:00
313 lines
8.7 KiB
PHP
Executable File
313 lines
8.7 KiB
PHP
Executable File
#!/usr/bin/php -q
|
|
<?PHP
|
|
// Copyright 2005-2020, Lime Technology
|
|
// License: GPLv2 only
|
|
//
|
|
// Program updates made by Bergware International (April 2020)
|
|
$usage = <<<EOF
|
|
Process language files.
|
|
|
|
Usage: language install LANGUAGE-FILE
|
|
install a language
|
|
|
|
Usage: language [attribute name] LANGUAGE-FILE
|
|
obtain an attribute value
|
|
|
|
Usage: language check LANGUAGE
|
|
check and output the latest version of the language
|
|
|
|
Usage: language update LANGUAGE
|
|
update the language
|
|
|
|
Usage: language remove LANGUAGE
|
|
remove the language
|
|
|
|
Usage: language checkall
|
|
check the latest version of all installed languages
|
|
|
|
Usage: language updateall
|
|
update all installed languages
|
|
|
|
EOF;
|
|
|
|
function error_desc($code) {
|
|
switch($code) {
|
|
case 0: return 'No errors';
|
|
case -1: return 'Generic error';
|
|
case 1: return 'Generic error';
|
|
case 2: return 'Parse error';
|
|
case 3: return 'File I/O error';
|
|
case 4: return 'Network failure';
|
|
case 5: return 'SSL verification failure';
|
|
case 6: return 'Username/password authentication failure';
|
|
case 7: return 'Protocol errors';
|
|
case 8: return 'Invalid URL / Server error response';
|
|
default: return 'Error code '.$code;
|
|
}
|
|
}
|
|
|
|
function download($url, $name, &$error) {
|
|
if ($file = popen("wget --compression=auto --no-cache --progress=dot -O $name $url 2>&1", 'r')) {
|
|
echo "language: downloading: $url ...\r";
|
|
$level = -1;
|
|
while (!feof($file)) {
|
|
if (preg_match('/\d+%/', fgets($file), $matches)) {
|
|
$percentage = substr($matches[0],0,-1);
|
|
if ($percentage > $level) {
|
|
echo "language: downloading: $url ... $percentage%\r";
|
|
$level = $percentage;
|
|
}
|
|
}
|
|
}
|
|
if (($perror = pclose($file)) == 0) {
|
|
echo "language: downloading: $url ... done\n";
|
|
return true;
|
|
} else {
|
|
echo "language: downloading: $url ... failed (".error_desc($perror).")\n";
|
|
$error = "$url download failure (".error_desc($perror).")";
|
|
return false;
|
|
}
|
|
} else {
|
|
$error = "$url failed to open";
|
|
return false;
|
|
}
|
|
}
|
|
|
|
function language($method, $xml_file, &$error) {
|
|
global $docroot, $boot, $plugins, $tmp;
|
|
|
|
// parse language XML file
|
|
$xml = file_exists($xml_file) ? simplexml_load_file($xml_file,NULL,LIBXML_NOCDATA) : false;
|
|
if ($xml === false) {
|
|
$error = "XML file doesn't exist or xml parse error";
|
|
return false;
|
|
}
|
|
switch ($method) {
|
|
case 'install':
|
|
$url = $xml->LanguageURL;
|
|
$name = $xml->LanguagePack;
|
|
$save = "$boot/dynamix/lang-$name.zip";
|
|
if (!file_exists($save)) {
|
|
if ($url) {
|
|
if (!download($url, $save, $error)) {
|
|
@unlink($save);
|
|
return false;
|
|
}
|
|
} else {
|
|
$error = "missing URL";
|
|
return false;
|
|
}
|
|
}
|
|
$path = "$docroot/languages/$name";
|
|
exec("mkdir -p $path");
|
|
@unlink("$docroot/webGui/javascript/translate.$name.js");
|
|
foreach (glob("$path/*.dot",GLOB_NOSORT) as $dot_file) unlink($dot_file);
|
|
exec("unzip -qqLjo -d $path $save", $dummy, $err);
|
|
if ($err > 1) {
|
|
@unlink($save);
|
|
exec("rm -rf $path");
|
|
$error = "unzip failed. Error code $err";
|
|
return false;
|
|
}
|
|
return true;
|
|
case 'remove':
|
|
$name = $xml->LanguagePack;
|
|
if ($name) {
|
|
$path = "$docroot/languages/$name";
|
|
exec("rm -rf $path");
|
|
@unlink("$docroot/webGui/javascript/translate.$name.js");
|
|
@unlink("$boot/lang-$name.xml");
|
|
@unlink("$plugins/lang-$name.xml");
|
|
@unlink("$tmp/lang-$name.xml");
|
|
@unlink("$boot/dynamix/lang-$name.zip");
|
|
return true;
|
|
} else {
|
|
$error = "missing language pack";
|
|
return false;
|
|
}
|
|
case 'dump':
|
|
// dump file: debugging
|
|
echo print_r($xml);
|
|
return true;
|
|
default:
|
|
// return single attribute
|
|
$error = "$method attribute not present";
|
|
return $xml->$method ?: false;
|
|
}
|
|
}
|
|
|
|
// MAIN - single argument
|
|
if ($argc < 2) {
|
|
echo $usage;
|
|
exit(1);
|
|
}
|
|
|
|
$docroot = '/usr/local/emhttp';
|
|
$boot = '/boot/config/plugins';
|
|
$plugins = '/var/log/plugins';
|
|
$tmp = '/tmp/plugins';
|
|
$method = $argv[1];
|
|
|
|
if ($method == 'checkall') {
|
|
echo "language: checking all language packs\n";
|
|
foreach (glob("$plugins/lang-*.xml", GLOB_NOSORT) as $link) {
|
|
$lang_file = @readlink($link);
|
|
if ($lang_file === false) continue;
|
|
if (language('LanguageURL', $lang_file, $error) === false) continue;
|
|
$name = str_replace('lang-', '', basename($lang_file, '.xml'));
|
|
$lang = language('Language', $lang_file, $error) ?: $name;
|
|
echo "language: checking $lang language pack ...\n";
|
|
exec(realpath($argv[0])." check $name >/dev/null");
|
|
}
|
|
exit(0);
|
|
}
|
|
|
|
if ($method == 'updateall') {
|
|
echo "language: updating all language packs\n";
|
|
foreach (glob("$plugins/lang-*.xml", GLOB_NOSORT) as $link) {
|
|
$lang_file = @readlink($link);
|
|
if ($lang_file === false) continue;
|
|
if (language('LanguageURL', $lang_file, $error) === false) continue;
|
|
$version = language('Version', $lang_file, $error);
|
|
$name = str_replace('lang-', '', basename($lang_file, '.xml'));
|
|
$lang = language('Language', $lang_file, $error) ?: $name;
|
|
$latest = language('Version', "$tmp/lang-$name.xml", $error);
|
|
// update only when newer
|
|
if (strcmp($latest, $version) > 0) {
|
|
echo "language: updating $lang language pack ...\n";
|
|
exec(realpath($argv[0])." update $name >/dev/null");
|
|
}
|
|
}
|
|
exit(0);
|
|
}
|
|
|
|
// MAIN - two arguments
|
|
if ($argc != 3) {
|
|
echo $usage;
|
|
exit(1);
|
|
}
|
|
|
|
if ($method == 'install') {
|
|
echo "language: installing language pack\n";
|
|
if (substr($argv[2],0,7)=='http://' || substr($argv[2],0,8)=='https://') {
|
|
$langURL = $argv[2];
|
|
echo "language: downloading $langURL\n";
|
|
$name = basename($langURL);
|
|
$xml_file = "$tmp/$name";
|
|
if (!download($langURL, $xml_file, $error)) {
|
|
echo "language: $error\n";
|
|
@unlink($xml_file);
|
|
exit(1);
|
|
}
|
|
} else {
|
|
$xml_file = realpath($argv[2]);
|
|
$name = basename($xml_file);
|
|
}
|
|
$link_file = "$plugins/$name";
|
|
$lang_file = "$boot/$name";
|
|
@unlink($link_file);
|
|
if (language('install', $xml_file, $error) === false) {
|
|
echo "language: $error\n";
|
|
exit(1);
|
|
}
|
|
$lang = language('Language', $xml_file, $error) ?: substr($name,0,-4);
|
|
copy($xml_file, $lang_file);
|
|
symlink($lang_file, $link_file);
|
|
echo "language: $lang language pack installed\n";
|
|
exit(0);
|
|
}
|
|
|
|
if ($method == 'check') {
|
|
$name = $argv[2];
|
|
echo "language: checking language pack\n";
|
|
$link_file = "$plugins/lang-$name.xml";
|
|
$lang_file = @readlink($link_file);
|
|
if ($lang_file === false) {
|
|
echo "language: $name language pack not installed\n";
|
|
exit(1);
|
|
}
|
|
$templateURL = language('TemplateURL', $lang_file, $error);
|
|
if ($templateURL === false) {
|
|
echo "language: $error\n";
|
|
exit(1);
|
|
}
|
|
$xml_file = "$tmp/lang-$name.xml";
|
|
if (!download($templateURL, $xml_file, $error)) {
|
|
echo "language: $error\n";
|
|
@unlink($xml_file);
|
|
exit(1);
|
|
}
|
|
$version = language('Version', $xml_file, $error);
|
|
if ($version === false) {
|
|
echo "language: $error\n";
|
|
exit(1);
|
|
}
|
|
echo "$version\n";
|
|
exit(0);
|
|
}
|
|
|
|
if ($method == 'update') {
|
|
$name = $argv[2];
|
|
echo "language: updating language pack\n";
|
|
$link_file = "$plugins/lang-$name.xml";
|
|
$lang_file = @readlink($link_file);
|
|
if ($lang_file === false) {
|
|
echo "language: $name language pack not installed\n";
|
|
exit(1);
|
|
}
|
|
// verify previous check has been done
|
|
$xml_file = "$tmp/lang-$name.xml";
|
|
if (!file_exists($xml_file)) {
|
|
echo "language: update does not exist, perform a check first\n";
|
|
exit (1);
|
|
}
|
|
$lang = language('Language', $xml_file, $error) ?: $name;
|
|
// check for a reinstall of same version
|
|
$old_version = language('Version', $lang_file, $error);
|
|
$new_version = language('Version', $xml_file, $error);
|
|
if ($new_version == $old_version) {
|
|
echo "language: $lang language pack not reinstalling same version\n";
|
|
exit(1);
|
|
}
|
|
// install the updated plugin
|
|
@unlink("$boot/dynamix/lang-$name.zip");
|
|
@unlink($link_file);
|
|
if (language('install', $xml_file, $error) === false) {
|
|
echo "language: $error\n";
|
|
exit(1);
|
|
}
|
|
copy($xml_file, $lang_file);
|
|
symlink($lang_file, $link_file);
|
|
echo "language: $lang language pack updated\n";
|
|
exit(0);
|
|
}
|
|
|
|
if ($method == 'remove') {
|
|
$name = $argv[2];
|
|
echo "language: removing language pack\n";
|
|
$link_file = "$plugins/lang-$name.xml";
|
|
$lang_file = @readlink($link_file);
|
|
if ($lang_file === false) {
|
|
echo "language: $name language pack not installed\n";
|
|
exit(1);
|
|
}
|
|
$lang = language('Language', $lang_file, $error) ?: $name;
|
|
if (language('remove', $lang_file, $error) === false) {
|
|
echo "language: $error\n";
|
|
exit(1);
|
|
}
|
|
echo "language: $lang language pack removed\n";
|
|
exit(0);
|
|
}
|
|
|
|
// return attribute
|
|
$xml_file = $argv[2];
|
|
$value = language($method, $xml_file, $error);
|
|
if ($value === false) {
|
|
echo "language: $error\n";
|
|
exit(1);
|
|
}
|
|
echo "$value\n";
|
|
exit(0);
|
|
?>
|