%s | %s.
Currently the first IPv4 DNS server address is set to '%s'"), $pingServer, gettext("System"), gettext("General Setup"), gettext("DNS"), $config['system']['dnsserver'][0]);
$log = 0;
$loginfo = array(
array(
"visible" => TRUE,
"desc" => gettext("Extensions"),
"logfile" => "{$configuration['rootfolder']}/extensions.txt",
"filename" => "extensions.txt",
"type" => "plain",
"pattern" => "/^(.*)###(.*)###(.*)###(.*)###(.*)###(.*)###(.*)$/",
"columns" => array(
array("title" => gettext("Extension"), "class" => "listlr", "param" => "align=\"left\" valign=\"middle\" style=\"font-weight:bold\" nowrap", "pmid" => 0),
array("title" => gettext("Version"), "class" => "listr", "param" => "align=\"center\" valign=\"middle\"", "pmid" => 1),
array("title" => gettext("Description"), "class" => "listr", "param" => "align=\"left\" valign=\"middle\"", "pmid" => 5),
array("title" => gettext("Install"), "class" => "listr", "param" => "align=\"center\" valign=\"middle\"", "pmid" => 4)
))
);
// create FreeBSD $current_release for min_release check
$product_version = explode(".", get_product_version());
$current_release = $product_version[0].".".$product_version[1].$product_version[2].$product_version[3].get_product_revision();
function check_min_release($min_release) {
global $current_release;
if (is_float(floatval($min_release))) {
if ($current_release < floatval($min_release)) return false; // release not supported
else return true; // release supported
}
else return true; // not a float, no release
}
//$sup="10.3032898"; // CHECK
//if (check_min_release($sup)) $savemsg .= "{$sup} = SUPPORTED";
//else $savemsg .= "{$sup} = NOT SUPPORTED";
function log_get_contents($logfile) {
$content = array();
if (is_file($logfile)) exec("cat {$logfile}", $extensions);
else return;
$content = $extensions;
return $content;
}
function log_get_status($cmd_entry) {
global $config;
$rc_cmd_entry_found = false;
if (is_array($config['rc']) && is_array($config['rc']['postinit']) && is_array( $config['rc']['postinit']['cmd'])) { // old rc format
$rc_param_count = count($config['rc']['postinit']['cmd']);
for ($i = 0; $i < $rc_param_count; $i++) {
if (preg_match("/{$cmd_entry}/", $config['rc']['postinit']['cmd'][$i])) {
$rc_cmd_entry_found = true;
break;
}
}
}
if (is_array($config['rc']) && is_array($config['rc']['param'])) { // new rc format 11.x
$rc_param_count = count($config['rc']['param']);
for ($i = 0; $i < $rc_param_count; $i++) {
if (preg_match("/{$cmd_entry}/", $config['rc']['param'][$i]['value'])) {
$rc_cmd_entry_found = true;
break;
}
}
}
if ($rc_cmd_entry_found) return 1; // 0 = no entry, extension is not installed
else return 0; // 1 = entry found, extension is already installed
}
function log_display($loginfo) {
global $g, $config, $configuration, $savemsg, $image_path;
if (!is_array($loginfo)) return;
// Create table header
echo "
";
foreach ($loginfo['columns'] as $columnk => $columnv) {
echo "
".htmlspecialchars($columnv['title'])."
\n";
}
echo "
";
// Get file content
$content = log_get_contents($loginfo['logfile']);
if (empty($content)) return;
sort($content);
$j = 0;
/*
* EXTENSIONS.TXT format description: PARAMETER DELIMITER -> ###
* PMID COMMENT
* name: 0 extension name
* version: 1 extension version (base for config entry - could change for newer versions), check for beta releases
* xmlstring: 2 config.xml or installation directory
* command(list)1: 3 execution of SHELL commands / scripts (e.g. download installer, untar, chmod, ...)
* command(list)2: 4 empty ("-") or PHP script name (file MUST exist)
* description: 5 plain text which can include HTML tags
* unsupported 6 unsupported architecture, plattform, release
* architectures: x86, x64, rpi, rpi2, bananapi
* platforms: embedded, full, livecd, liveusb
* releases: 9.3, 10.2, 10.3032853, 10.3032898, 11.0, ...
*/
// Create table data
foreach ($content as $contentv) { // handle each line => one extension
unset($result);
$result = explode("###", $contentv); // retrieve extension content (pmid based)
if ((FALSE === $result) || (0 == $result)) continue;
echo "
\n";
for ($i = 0; $i < count($loginfo['columns']); $i++) { // handle pmids (columns)
if (!$configuration['show_beta'] && (strpos($result[1], "RELEASE") === false)) continue; //check for beta state
else {
if ($i == count($loginfo['columns']) - 1) {
if (!empty($result[6])) { // something unsupported exist
$unsupported = explode(",", str_replace(" ", "", $result[6]));
for ($k = 0; $k < count($unsupported); $k++) { // check for unsupported release / architecture / platforms
if (!check_min_release($unsupported[$k]) || ($unsupported[$k] == $g['arch']) || ($unsupported[$k] == $g['platform'])) {
echo "
\n";
continue 2; // unsupported, therefore we leave and proceed to the next extension in the list
}
}
}
// check if extension is already installed (existing config.xml or postinit cmd entry)
$already_installed = false;
echo "
";
}
echo "
\n";
} // EOcount
else echo "
" . $result[$loginfo['columns'][$i]['pmid']] . "
\n";
} //EObeta-check
} // EOcolumns
echo "
\n";
$j++;
}
}
if (isset($_POST['cleanup'], $_POST['name'])) {
foreach($_POST['name'] as $line) {
if (isset($line['extension'])) {
ext_remove_rc_commands($line['extension']); // remove entry from command scripts
unset($config[$line['extension']]); // remove entry from config.xml
if ($line['extension'] == "plexinit") $line['extension'] = "plex-gui"; // special treatment for plex gui
if (file_exists("/usr/local/www/ext/{$line['extension']}/menu.inc"))
unlink("/usr/local/www/ext/{$line['extension']}/menu.inc"); // remove entry from extensions menu
write_config();
$savemsg .= gettext("Cleanup").": {$line['truename']} ({$line['extension']})"." ";
}
}
}
if (isset($_POST['install'], $_POST['name'])) {
foreach($_POST['name'] as $line) {
if (isset($line['extension'])) {
ext_remove_rc_commands($line['extension']); // to force correct command script entries in case of recovered/changed config/directories for extensions
unset($config[$line['extension']]);
write_config();
$savemsg .= gettext("Installation").": {$line['truename']}"." ";
unset($result);
exec("cd {$configurationStoragePath} && {$line['command1']}", $result, $return_val);
if ($return_val == 0) {
foreach ($result as $msg) $savemsg .= $msg." "; // output on success
unset($result);
if ("{$line['command2']}" != "-") { // check if a PHP script must be executed
if (file_exists("{$configurationStoragePath}/{$line['command2']}")) {
$savemsg_old = $savemsg; // save messages for use after output buffering ends
ob_start(); // start output buffering
include("{$configurationStoragePath}/{$line['command2']}");
$ausgabe = ob_get_contents(); // get outputs from include command
ob_end_clean(); // close output buffering
$savemsg = $savemsg_old; // recover saved messages ...
$savemsg .= str_replace("\n", " ", $ausgabe)." "; // ... and append messages from include command
}
else $errormsg .= sprintf(gettext("PHP script %s not found!"), "{$configurationStoragePath}/{$line['command2']}")." ";
}
} // EOcommand1 OK
else { // throw error message for command1
$errormsg .= gettext("Installation error").": {$line['truename']}"." ";
foreach ($result as $msg) $errormsg .= $msg." ";
} // EOcommand1 NOK
} // EOisset line
} // EOforeach
} // EOinstall
$configuration = ext_load_config("ext/onebuttoninstaller/onebuttoninstaller.conf"); // to prevent collisions with installed extension definitions
// extensions list file handling for => manual update | auto update | missing file | file older than 24 hours
if (isset($_POST['update']) || ($configuration['auto_update'] && !isset($_POST['install'])) || !is_file("{$configuration['rootfolder']}/extensions.txt") || filemtime("{$configuration['rootfolder']}/extensions.txt") < time() - 86400) {
$return_val = mwexec("fetch -o {$configuration['rootfolder']}/extensions.txt https://raw.github.com/crestAT/nas4free-onebuttoninstaller/master/onebuttoninstaller/extensions.txt", false);
if ($return_val == 0) $savemsg .= gettext("New extensions list successfully downloaded!")." ";
else $errormsg .= gettext("Unable to retrieve extensions list from server!")." ";
} // EOupdate
if (($message = ext_check_version("{$configuration['rootfolder']}/version_server.txt", "onebuttoninstaller", $configuration['version'], gettext("Maintenance"))) !== false) $savemsg .= $message;
if (!is_file("{$configuration['rootfolder']}/extensions.txt")) $errormsg .= sprintf(gettext("File %s not found!"), "{$configuration['rootfolder']}/extensions.txt")." ";
bindtextdomain($domain, $localeOSDirectory);
include("fbegin.inc");
bindtextdomain($domain, $localeExtDirectory);
?>