318 lines
10 KiB
PHP
318 lines
10 KiB
PHP
<?php global $session;
|
|
/**
|
|
* Project: BeCast WebEngine - simple site engine
|
|
* File: /admin/versions.apnl.php
|
|
*
|
|
* This library is free software; you can redistribute it and/or
|
|
* modify it under the terms of the GNU Lesser General Public
|
|
* License as published by the Free Software Foundation; either
|
|
* version 2.1 of the License, or (at your option) any later version.
|
|
*
|
|
* This library is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
* Lesser General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU Lesser General Public
|
|
* License along with this library; if not, write to the Free Software
|
|
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
*
|
|
* @link http://www.becast.at
|
|
* @copyright 2009-2025 becast.at
|
|
* @author Bernhard Jaud <bernhard at becast dot at>
|
|
* @package BcWe core
|
|
* @license http://opensource.org/licenses/gpl-license.php GNU Public License
|
|
* @version $Id: 1eb16074139417e5c0ba8cee93003e66221035d4 $
|
|
*/
|
|
If (!defined("IN_BCWE_ADMIN")) {
|
|
die("Dieses Script kann nicht ausserhalb des Frameworks laufen!");
|
|
}
|
|
$addnav["right"]=FALSE;
|
|
$session->page_begin("Version", True);
|
|
|
|
$subnav_item="<a href=\"/management.html\">Verwaltung</a> » <a>Systemstatus</a>";
|
|
|
|
class versions_panel extends admin_module{
|
|
|
|
function output(){
|
|
global $module,$config,$db,$panel,$admin,$module,$root,$core;
|
|
$files=$this->listdir($root.'/modules');
|
|
foreach($files as $file){
|
|
$file_object = array(
|
|
'name' => substr($file,strlen($root.'/modules/')),
|
|
'size' => $this->byteConvert(filesize($file)),
|
|
'time' => date("d.m.Y, H:i:s", filemtime($file)));
|
|
$dir_objects[] = $file_object;
|
|
}
|
|
|
|
$url="https://webengine.becast.at/index.php?task=versioncheck";
|
|
$out = xml2array($url);
|
|
if(!empty($out)){
|
|
$i=0;
|
|
$max=count($out['release']["mod"]);
|
|
while($i<=$max){
|
|
$versions[$i]["name"]=$out['release']["mod"][$i]["name"];
|
|
$versions[$i]["ver"]=$out['release']["mod"][$i]["ver"];
|
|
$versions[$i]["file"]=$out['release']["mod"][$i]["file"];
|
|
$i++;
|
|
}
|
|
$vers=$core->ver_major.".".$core->ver_minor.".".$core->ver_rev;
|
|
$panel->title="Moduleversionen";
|
|
$panel->content.="<table style=\"width: 80%;\">
|
|
<tr>
|
|
<th style=\"text-align: center;\">Modul</th>
|
|
<th style=\"text-align: center;\">Version</th>
|
|
<th style=\"text-align: center;\">Update</th>
|
|
</tr>";
|
|
if($out["release"]["version"]>$vers){
|
|
$panel->content.="<tr><td colspan=\"3\">Diese Version ist nicht mehr aktuell.<br />Besuche <a href=\"https://webengine.becast.at\">die Projektseite</a> für ein Update</td></tr>";
|
|
}else{
|
|
foreach($module as $mod){
|
|
$panel->content.="<tr>
|
|
<td style=\"text-align: center;\">".$mod["name"]."</td>
|
|
<td style=\"text-align: center;\">".$mod["ver"]."</td>";
|
|
foreach($versions as $v){
|
|
if($v["name"]==$mod["name"]){
|
|
if($mod["ver"]<$v["ver"]){
|
|
$panel->content.="<td style=\"text-align: center;\"><a href=\"https://code.ehwurscht.at/genuineparts/BeCastWebEngine/src/branch/main/inc/".urlencode($v["file"])."\">Neue Version verfügbar!</a></td>";
|
|
}elseif($mod["ver"]==$v["ver"]){
|
|
$panel->content.="<td style=\"text-align: center;\">Aktuell</td>";
|
|
}else{
|
|
$panel->content.="<td style=\"text-align: center;\">Modified file?</td>";
|
|
}
|
|
}
|
|
}
|
|
$panel->content.="</tr>";
|
|
|
|
}
|
|
foreach($core->mod_ as $mod){
|
|
$panel->content.="<tr>
|
|
<td style=\"text-align: center;\"><a href=\"".$mod["url"]."\">".$mod["name"]."<a></td>
|
|
<td style=\"text-align: center;\">".$mod["version"]."</td>";
|
|
foreach($versions as $v){
|
|
if($v["name"]==$mod["name"]){
|
|
if($mod["version"]<$v["ver"]){
|
|
$panel->content.="<td style=\"text-align: center;\"><a href=\"http://projectx.becast.at/get_file.php?file=".urlencode($v["name"])."\">Neue Version verfügbar!</a></td>";
|
|
}elseif($mod["version"]==$v["ver"]){
|
|
$panel->content.="<td style=\"text-align: center;\">Aktuell</td>";
|
|
}else{
|
|
$panel->content.="<td style=\"text-align: center;\">Modified file?</td>";
|
|
}
|
|
}
|
|
}
|
|
$panel->content.="</tr>";
|
|
}
|
|
}
|
|
$panel->content.="</table><br />";
|
|
$panel->parse_page();
|
|
}else{
|
|
$panel->title="Moduleversionen";
|
|
$panel->content.="Die Versionprüfung ist fehlgeschlagen.";
|
|
$panel->content.="<table style=\"width: 80%;\">
|
|
<tr>
|
|
<th style=\"text-align: center;\">Modul</th>
|
|
<th style=\"text-align: center;\">Version</th>
|
|
</tr>";
|
|
|
|
|
|
foreach($module as $mod){
|
|
$panel->content.="<tr>
|
|
<td style=\"text-align: center;\">".$mod["name"]."</td>
|
|
<td style=\"text-align: center;\">".$mod["ver"]."</td>";
|
|
$panel->content.="</tr>";
|
|
}
|
|
$panel->content.="</table><br />";
|
|
$panel->parse_page();
|
|
}
|
|
$panel->title="Datei Infos";
|
|
$panel->content.="<table style=\"width: 80%;\">
|
|
<tr>
|
|
<th style=\"text-align: center;\">Datei</th>
|
|
<th style=\"text-align: center;\">Größe</th>
|
|
<th style=\"text-align: center;\">zuletzt Geändert</th>
|
|
</tr>";
|
|
foreach($dir_objects as $files){
|
|
$panel->content.="<tr>
|
|
<td style=\"text-align: center;\">".$files["name"]."</td>
|
|
<td style=\"text-align: center;\">".$files["size"]."</td>
|
|
<td style=\"text-align: center;\">".$files["time"]."</td>
|
|
</tr>";
|
|
}
|
|
|
|
$panel->content.="</table>";
|
|
}
|
|
|
|
function byteConvert( $bytes ) {
|
|
|
|
if ($bytes<=0)
|
|
return '0 Byte';
|
|
|
|
$convention=1000; //[1000->10^x|1024->2^x]
|
|
$s=array('B', 'kB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB');
|
|
$e=floor(log($bytes,$convention));
|
|
return round($bytes/pow($convention,$e),2).' '.$s[$e];
|
|
}
|
|
|
|
function listdir($start_dir='.') {
|
|
|
|
$files = array();
|
|
if (is_dir($start_dir)) {
|
|
$fh = opendir($start_dir);
|
|
while (($file = readdir($fh)) !== false) {
|
|
# loop through the files, skipping . and .., and recursing if necessary
|
|
if (strcmp($file, '.')==0 || strcmp($file, '..')==0) continue;
|
|
$filepath = $start_dir . '/' . $file;
|
|
if ( is_dir($filepath) )
|
|
$files = array_merge($files, $this->listdir($filepath));
|
|
else
|
|
array_push($files, $filepath);
|
|
}
|
|
closedir($fh);
|
|
} else {
|
|
# false if the function was called with an invalid non-directory argument
|
|
$files = false;
|
|
}
|
|
return $files;
|
|
}
|
|
|
|
}
|
|
|
|
function xml2array($url, $get_attributes = 1, $priority = 'tag')
|
|
{
|
|
$contents = "";
|
|
if (!function_exists('xml_parser_create'))
|
|
{
|
|
return array ();
|
|
}
|
|
$parser = xml_parser_create('');
|
|
if (!($fp = @ fopen($url, 'rb')))
|
|
{
|
|
return array ();
|
|
}
|
|
while (!feof($fp))
|
|
{
|
|
$contents .= fread($fp, 8192);
|
|
}
|
|
fclose($fp);
|
|
xml_parser_set_option($parser, XML_OPTION_TARGET_ENCODING, "UTF-8");
|
|
xml_parser_set_option($parser, XML_OPTION_CASE_FOLDING, 0);
|
|
xml_parser_set_option($parser, XML_OPTION_SKIP_WHITE, 1);
|
|
xml_parse_into_struct($parser, trim($contents), $xml_values);
|
|
xml_parser_free($parser);
|
|
if (!$xml_values)
|
|
return; //Hmm...
|
|
$xml_array = array ();
|
|
$parents = array ();
|
|
$opened_tags = array ();
|
|
$arr = array ();
|
|
$current = & $xml_array;
|
|
$repeated_tag_index = array ();
|
|
foreach ($xml_values as $data)
|
|
{
|
|
unset ($attributes, $value);
|
|
extract($data);
|
|
$result = array ();
|
|
$attributes_data = array ();
|
|
if (isset ($value))
|
|
{
|
|
if ($priority == 'tag')
|
|
$result = $value;
|
|
else
|
|
$result['value'] = $value;
|
|
}
|
|
if (isset ($attributes) and $get_attributes)
|
|
{
|
|
foreach ($attributes as $attr => $val)
|
|
{
|
|
if ($priority == 'tag')
|
|
$attributes_data[$attr] = $val;
|
|
else
|
|
$result['attr'][$attr] = $val; //Set all the attributes in a array called 'attr'
|
|
}
|
|
}
|
|
if ($type == "open")
|
|
{
|
|
$parent[$level -1] = & $current;
|
|
if (!is_array($current) or (!in_array($tag, array_keys($current))))
|
|
{
|
|
$current[$tag] = $result;
|
|
if ($attributes_data)
|
|
$current[$tag . '_attr'] = $attributes_data;
|
|
$repeated_tag_index[$tag . '_' . $level] = 1;
|
|
$current = & $current[$tag];
|
|
}
|
|
else
|
|
{
|
|
if (isset ($current[$tag][0]))
|
|
{
|
|
$current[$tag][$repeated_tag_index[$tag . '_' . $level]] = $result;
|
|
$repeated_tag_index[$tag . '_' . $level]++;
|
|
}
|
|
else
|
|
{
|
|
$current[$tag] = array (
|
|
$current[$tag],
|
|
$result
|
|
);
|
|
$repeated_tag_index[$tag . '_' . $level] = 2;
|
|
if (isset ($current[$tag . '_attr']))
|
|
{
|
|
$current[$tag]['0_attr'] = $current[$tag . '_attr'];
|
|
unset ($current[$tag . '_attr']);
|
|
}
|
|
}
|
|
$last_item_index = $repeated_tag_index[$tag . '_' . $level] - 1;
|
|
$current = & $current[$tag][$last_item_index];
|
|
}
|
|
}
|
|
elseif ($type == "complete")
|
|
{
|
|
if (!isset ($current[$tag]))
|
|
{
|
|
$current[$tag] = $result;
|
|
$repeated_tag_index[$tag . '_' . $level] = 1;
|
|
if ($priority == 'tag' and $attributes_data)
|
|
$current[$tag . '_attr'] = $attributes_data;
|
|
}
|
|
else
|
|
{
|
|
if (isset ($current[$tag][0]) and is_array($current[$tag]))
|
|
{
|
|
$current[$tag][$repeated_tag_index[$tag . '_' . $level]] = $result;
|
|
if ($priority == 'tag' and $get_attributes and $attributes_data)
|
|
{
|
|
$current[$tag][$repeated_tag_index[$tag . '_' . $level] . '_attr'] = $attributes_data;
|
|
}
|
|
$repeated_tag_index[$tag . '_' . $level]++;
|
|
}
|
|
else
|
|
{
|
|
$current[$tag] = array (
|
|
$current[$tag],
|
|
$result
|
|
);
|
|
$repeated_tag_index[$tag . '_' . $level] = 1;
|
|
if ($priority == 'tag' and $get_attributes)
|
|
{
|
|
if (isset ($current[$tag . '_attr']))
|
|
{
|
|
$current[$tag]['0_attr'] = $current[$tag . '_attr'];
|
|
unset ($current[$tag . '_attr']);
|
|
}
|
|
if ($attributes_data)
|
|
{
|
|
$current[$tag][$repeated_tag_index[$tag . '_' . $level] . '_attr'] = $attributes_data;
|
|
}
|
|
}
|
|
$repeated_tag_index[$tag . '_' . $level]++; //0 and 1 index is already taken
|
|
}
|
|
}
|
|
}
|
|
elseif ($type == 'close')
|
|
{
|
|
$current = & $parent[$level -1];
|
|
}
|
|
}
|
|
return ($xml_array);
|
|
}
|
|
|