funchat/admin/versions.apnl.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> &raquo; <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&uuml;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&uuml;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&uuml;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&uuml;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&ouml;&szlig;e</th>
<th style=\"text-align: center;\">zuletzt Ge&auml;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);
}