15 Commits
2.2.0 ... 2.3.1

Author SHA1 Message Date
f803effbbd Beta zu Final Version gesetzt 2022-06-09 20:24:03 +02:00
fcceec8545 Footer URL angepasst 2022-06-09 20:22:48 +02:00
130dee67ea Versionsnummer angepasst 2022-06-08 21:02:14 +02:00
79c7fbc841 Update URL korrigiert
Git Link angepasst
2022-06-08 21:01:00 +02:00
Gregor Schulte
57608f3b2f Korrekturen
URLs angepasst
Statistik Einheit automatisch ändern (MB -> GB)
2022-04-16 20:56:12 +02:00
Gregor Schulte
1e60371abe 64bit Anpassungen
Name der Distro angepasst
Max Value in Statistiken angepasst
Hash Verfahren auf SHA256 umgestellt
2022-02-09 09:40:58 +01:00
Gregor Schulte
79fc07e010 ReadMe angepasst 2021-12-14 12:27:22 +01:00
Gregor Schulte
db683a5b19 Merge durchgeführt in bullseye (Pull-Request #1)
Bullseye
2021-12-14 11:22:25 +00:00
Gregor Schulte
3ebc78f14d PiControl-2.2.0.zip edited online with Bitbucket 2021-12-14 11:22:01 +00:00
Gregor Schulte
588c82f4e8 PiControl-2.2.0-full.zip edited online with Bitbucket 2021-12-14 11:21:54 +00:00
Gregor Schulte
22fa53e3a3 Pi Control.iml edited online with Bitbucket 2021-12-14 10:54:44 +00:00
Gregor Schulte
1257825709 PiControl-2.2.0.zip edited online with Bitbucket 2021-12-14 10:54:32 +00:00
Gregor Schulte
6f819ed9f5 PiControl-2.2.0-full.zip edited online with Bitbucket 2021-12-14 10:54:18 +00:00
Gregor Schulte
6adb4fe93e Korrektur bei der Download URL 2021-12-14 11:50:53 +01:00
Gregor Schulte
97d666a794 Debian 11 Support 2021-12-14 09:50:28 +01:00
20 changed files with 714 additions and 815 deletions

3
.gitignore vendored
View File

@@ -10,6 +10,7 @@
.idea/**/shelf .idea/**/shelf
.idea .idea
.vscode .vscode
pack.sh
# Generated files # Generated files
.idea/**/contentModel.xml .idea/**/contentModel.xml
@@ -99,3 +100,5 @@ data/DoctrineORMModule/cache/
demos/ demos/
extras/documentation extras/documentation
*.zip

View File

@@ -1,8 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<module type="WEB_MODULE" version="4">
<component name="NewModuleRootManager" inherit-compiler-output="true">
<exclude-output />
<content url="file://$MODULE_DIR$" />
<orderEntry type="sourceFolder" forTests="false" />
</component>
</module>

Binary file not shown.

Binary file not shown.

View File

@@ -4,4 +4,4 @@
[Pi Control Installation](https://pi-control.de/install/) [Pi Control Installation](https://pi-control.de/install/)
## Bei Fragen oder Problemen ## Bei Fragen oder Problemen
Schreibe mir eine E-Mail an [support@pi-control.de](mailto:support@pi-control.de) oder nutze das Feedback in Pi Control. Über das [Ticketsystem](https://bugs.die-schultes.eu/projects/pi-control/issues) können Fehler gemeldet werden und im [Forum](https://bugs.die-schultes.eu/projects/pi-control/boards) gibt es Hilfe zu Fragen rund um Pi Control

View File

@@ -10,13 +10,11 @@ const PICONTROL = true;
$api = new API; $api = new API;
if (isset($_POST['id'])) if (isset($_POST['id'])) {
{
$controller = new StatisticController(); $controller = new StatisticController();
$controller->loadStatistics(); $controller->loadStatistics();
if (($name = $controller->getStatisticName($_POST['id'])) !== false) if (($name = $controller->getStatisticName($_POST['id'])) !== false) {
{
if (isset($_POST['plugin']) && trim($_POST['plugin']) != '') if (isset($_POST['plugin']) && trim($_POST['plugin']) != '')
pluginLanguage(trim($_POST['plugin'])); pluginLanguage(trim($_POST['plugin']));
@@ -26,28 +24,27 @@ if (isset($_POST['id']))
$log = new LogStatistic(); $log = new LogStatistic();
$log->setFile(LOG_PATH . $statistic['raw'] . '.csv'); $log->setFile(LOG_PATH . $statistic['raw'] . '.csv');
$logData = $log->getAll();
$arr = $info = array(); $arr = $info = array();
foreach ($statistic['columns'] as $column) foreach ($statistic['columns'] as $column) {
$arr['cols'][] = array('id' => '', 'label' => _t($column['label']), 'type' => $column['type']); $arr['cols'][] = array('id' => '', 'label' => _t($column['label']), 'type' => $column['type']);
}
getRowsFromLog($arr, $info, $log->getAll(), $statistic['columns'], $statistic['cycle']); getRowsFromLog($arr, $info, $logData, $statistic['columns'], $statistic['cycle']);
if (isset($arr['rows'])) if (isset($arr['rows'])) {
{
if (isset($_POST['type']) && $_POST['type'] == 'googleChart') if (isset($_POST['type']) && $_POST['type'] == 'googleChart')
$arr['rows'] = convertForGoogleChart($arr['rows']); $arr['rows'] = convertForGoogleChart($arr['rows']);
$arr['rows'] = array_slice($arr['rows'], -2016); $arr['rows'] = array_slice($arr['rows'], -2016);
$arr['periods'] = $info['periods']; $arr['periods'] = $info['periods'];
foreach (array('min', 'max') as $type) foreach (array('min', 'max') as $type) {
{
if ($statistic['limits'][$type]['use'] == 'multiply') if ($statistic['limits'][$type]['use'] == 'multiply')
$arr[$type] = round($info[$type] * $statistic['limits'][$type]['value']); $arr[$type] = round($info[$type] * $statistic['limits'][$type]['value']);
elseif ($statistic['limits'][$type]['use'] == 'fix') elseif ($statistic['limits'][$type]['use'] == 'fix') {
{
if ($statistic['limits'][$type]['fix'] == true) if ($statistic['limits'][$type]['fix'] == true)
$arr[$type] = $statistic['limits'][$type]['value']; $arr[$type] = $statistic['limits'][$type]['value'];
else else
@@ -56,23 +53,18 @@ if (isset($_POST['id']))
} }
$api->addData('statistic', $arr); $api->addData('statistic', $arr);
} } else
else
$api->setError('error', 'Empty data.'); $api->setError('error', 'Empty data.');
} } else
else
$api->setError('error', 'Data not found.'); $api->setError('error', 'Data not found.');
} } else {
else
{
$statistics = array(); $statistics = array();
$hiddenStatistics = unserialize(htmlspecialchars_decode(getConfig('main:statistic.hidden', 'a:0:{}'))); $hiddenStatistics = unserialize(htmlspecialchars_decode(getConfig('main:statistic.hidden', 'a:0:{}')));
$controller = new StatisticController(); $controller = new StatisticController();
$controller->loadStatistics(); $controller->loadStatistics();
foreach ($controller->getStatistics() as $statistic) foreach ($controller->getStatistics() as $statistic) {
{
$builder = new StatisticBuilder(); $builder = new StatisticBuilder();
$builder->loadFromFile($statistic); $builder->loadFromFile($statistic);

View File

@@ -48,10 +48,10 @@
<td><?php _e('SSH2-Erweiterung installiert'); ?></td> <td><?php _e('SSH2-Erweiterung installiert'); ?></td>
<td class="<?php echo ($data['phpSSH']['status'] == true) ? 'green' : 'red'; ?>"><?php echo ($data['phpSSH']['status'] == true) ? '&#10004;' : '&#10006; <a style="color: inherit; text-decoration: underline" href="'.$data['configHelp'].'#phpssh'.getURLLangParam().'" target="_blank">'._t('Anleitung zur Installation').'</a>'; ?></td> <td class="<?php echo ($data['phpSSH']['status'] == true) ? 'green' : 'red'; ?>"><?php echo ($data['phpSSH']['status'] == true) ? '&#10004;' : '&#10006; <a style="color: inherit; text-decoration: underline" href="'.$data['configHelp'].'#phpssh'.getURLLangParam().'" target="_blank">'._t('Anleitung zur Installation').'</a>'; ?></td>
</tr> </tr>
<tr> <!--<tr>
<td><?php _e('Mcrypt-Erweiterung installiert'); ?></td> <td><?php _e('Mcrypt-Erweiterung installiert'); ?></td>
<td class="<?php echo ($data['phpMcrypt']['status'] == true) ? 'green' : 'red'; ?>"><?php echo ($data['phpMcrypt']['status'] == true) ? '&#10004;' : '&#10006; <a style="color: inherit; text-decoration: underline" href="'.$data['configHelp'].'?s=view&amp;i=12'.getURLLangParam().'" target="_blank">'._t('Anleitung zur Installation').'</a>'; ?></td> <td class="<?php echo ($data['phpMcrypt']['status'] == true) ? 'green' : 'red'; ?>"><?php echo ($data['phpMcrypt']['status'] == true) ? '&#10004;' : '&#10006; <a style="color: inherit; text-decoration: underline" href="'.$data['configHelp'].'?s=view&amp;i=12'.getURLLangParam().'" target="_blank">'._t('Anleitung zur Installation').'</a>'; ?></td>
</tr> </tr>-->
<tr> <tr>
<td><?php _e('CLI-Erweiterung installiert'); ?></td> <td><?php _e('CLI-Erweiterung installiert'); ?></td>
<td class="<?php echo ($data['phpCLI']['status'] == true) ? 'green' : 'red'; ?>"><?php echo ($data['phpCLI']['status'] == true) ? '&#10004;' : '&#10006; <a style="color: inherit; text-decoration: underline" href="'.$data['configHelp'].'?s=view&amp;i=13'.getURLLangParam().'" target="_blank">'._t('Anleitung zur Installation').'</a>'; ?></td> <td class="<?php echo ($data['phpCLI']['status'] == true) ? 'green' : 'red'; ?>"><?php echo ($data['phpCLI']['status'] == true) ? '&#10004;' : '&#10006; <a style="color: inherit; text-decoration: underline" href="'.$data['configHelp'].'?s=view&amp;i=13'.getURLLangParam().'" target="_blank">'._t('Anleitung zur Installation').'</a>'; ?></td>

View File

@@ -25,8 +25,8 @@ if (version_compare(PHP_VERSION, '7.0.0') >= 0)
if (extension_loaded('ssh2')) if (extension_loaded('ssh2'))
$phpSSH['status'] = true; $phpSSH['status'] = true;
//if (function_exists('mcrypt_encrypt') !== false) #if (function_exists('mcrypt_encrypt') !== false)
$phpMcrypt['status'] = true; # $phpMcrypt['status'] = true;
if (trim(exec('dpkg -s php7.3-cli | grep Status: ')) != '' || trim(exec('dpkg -s php7.4-cli | grep Status: ')) != '') if (trim(exec('dpkg -s php7.3-cli | grep Status: ')) != '' || trim(exec('dpkg -s php7.4-cli | grep Status: ')) != '')
$phpCLI['status'] = true; $phpCLI['status'] = true;
@@ -62,7 +62,7 @@ foreach ($filesFolders as $file => $info)
} }
// Sonstiges // Sonstiges
if ($otherDistribution['version'] == 'Raspbian GNU/Linux 10' || $otherDistribution['version'] == 'Raspbian GNU/Linux 11') if ($otherDistribution['version'] == 'Raspbian GNU/Linux 10' || $otherDistribution['version'] == 'Raspbian GNU/Linux 11' || $otherDistribution['version'] == 'Debian GNU/Linux 11')
$otherDistribution['status'] = true; $otherDistribution['status'] = true;
if (isset($_COOKIE['_pi-control_install_language']) && $_COOKIE['_pi-control_install_language'] != '') if (isset($_COOKIE['_pi-control_install_language']) && $_COOKIE['_pi-control_install_language'] != '')
@@ -71,7 +71,8 @@ else
setCookie('_pi-control_install_language', $globalLanguage); setCookie('_pi-control_install_language', $globalLanguage);
// Button // Button
if ($phpVersion['status'] === false || $phpSSH['status'] === false || $phpMcrypt['status'] === false || $phpCLI['status'] === false || $phpCURL['status'] === false || $phpZipArchive['status'] === false || $phpAllowUrlFopen['status'] === false || $filesFoldersExist['status'] === false || $filesFoldersPermission['status'] === false || $otherDistribution['status'] === false || $otherCookie['status'] === false) //if ($phpVersion['status'] === false || $phpSSH['status'] === false || $phpMcrypt['status'] === false || $phpCLI['status'] === false || $phpCURL['status'] === false || $phpZipArchive['status'] === false || $phpAllowUrlFopen['status'] === false || $filesFoldersExist['status'] === false || $filesFoldersPermission['status'] === false || $otherDistribution['status'] === false || $otherCookie['status'] === false)
if ($phpVersion['status'] === false || $phpSSH['status'] === false || $phpCLI['status'] === false || $phpCURL['status'] === false || $phpZipArchive['status'] === false || $phpAllowUrlFopen['status'] === false || $filesFoldersExist['status'] === false || $filesFoldersPermission['status'] === false || $otherDistribution['status'] === false || $otherCookie['status'] === false)
$error = true; $error = true;
$tpl->assign('phpVersion', $phpVersion); $tpl->assign('phpVersion', $phpVersion);

View File

@@ -368,8 +368,15 @@ function urlIsPublic($url)
$ip = gethostbyname($url); $ip = gethostbyname($url);
$long = ip2long($ip); $long = ip2long($ip);
if (($long >= 167772160 && $long <= 184549375) || ($long >= -1408237568 && $long <= -1407188993) || ($long >= -1062731776 && $long <= -1062666241) || ($long >= 2130706432 && $long <= 2147483647) || $long == -1) if (PHP_INT_SIZE == 4) {
if (($long >= 167772160 && $long <= 184549375) || ($long >= -1408237568 && $long <= -1407188993) || ($long >= -1062731776 && $long <= -1062666241) || ($long >= 2130706432 && $long <= 2147483647) || $long == -1) {
return false; return false;
}
} else {
if (($long >= 3232235520 && $long <= 3232301055) || ($long >= 2886729728 && $long <= 2887778303) || ($long >= 167772160 && $long <= 184549375) || $long == -1) {
return false;
}
}
return true; return true;
} }
@@ -614,4 +621,3 @@ function getURLLangParam($echo = false, $html = true, $first = false)
return $param; return $param;
} }
?>

View File

@@ -1,18 +1,15 @@
var dataSlider = []; var dataSlider = [];
var dataPeriods = []; var dataPeriods = [];
function statisticBuilder(builder, plugin) function statisticBuilder(builder, plugin) {
{ jQuery.ajax({
var jsonData = jQuery.ajax({
url: 'api/v1/statistic.php', url: 'api/v1/statistic.php',
method: 'POST', method: 'POST',
data: { id: builder.id, plugin: plugin, type: 'googleChart' }, data: { id: builder.id, plugin: plugin, type: 'googleChart' },
dataType: 'json', dataType: 'json',
async: true async: true
}).done(function(data) }).done(function (data) {
{ if (data.error != null) {
if (data.error != null)
{
if (data.error.message == 'Empty data.') if (data.error.message == 'Empty data.')
jQuery('#chart_log_' + builder.id).html('<br /><br /><strong class="red">' + _t('Es sind noch keine Werte verf&uuml;gbar. Werte werden alle %%s Minuten eingetragen.', builder.cycle) + '</strong>'); jQuery('#chart_log_' + builder.id).html('<br /><br /><strong class="red">' + _t('Es sind noch keine Werte verf&uuml;gbar. Werte werden alle %%s Minuten eingetragen.', builder.cycle) + '</strong>');
else else
@@ -41,8 +38,6 @@ function statisticBuilder(builder, plugin)
} }
}); });
var t = null;
var myLine = new google.visualization.ChartWrapper({ var myLine = new google.visualization.ChartWrapper({
'chartType': 'AreaChart', 'chartType': 'AreaChart',
'containerId': 'chart_log_' + builder.id, 'containerId': 'chart_log_' + builder.id,
@@ -91,26 +86,35 @@ function statisticBuilder(builder, plugin)
myDashboard.bind(dataSlider[builder.id], myLine); myDashboard.bind(dataSlider[builder.id], myLine);
myDashboard.draw(myData); myDashboard.draw(myData);
}).fail(function(xhr, textStatus)
{ setRange();
}).fail(function (xhr, textStatus) {
jQuery('#chart_log_' + builder.id).html('<br /><br /><strong class="red">' + _t('Es ist ein Fehler aufgetreten! Fehlercode: %%s', xhr.status) + '</strong>'); jQuery('#chart_log_' + builder.id).html('<br /><br /><strong class="red">' + _t('Es ist ein Fehler aufgetreten! Fehlercode: %%s', xhr.status) + '</strong>');
}); });
} }
function changeRange(dropdown) function changeRange(dropdown) {
{
var days = Array('seven', 'six', 'five', 'four', 'three', 'two', 'one');
var day = dropdown.value; var day = dropdown.value;
window.localStorage.setItem("days", day);
if (days.indexOf(day) > -1) setRange();
{ }
for (var data in dataSlider)
{ function setRange() {
if (typeof dataSlider[data] != 'undefined') var days = Array('seven', 'six', 'five', 'four', 'three', 'two', 'one');
{ var day = window.localStorage.getItem("days");
if (days.indexOf(day) > -1) {
for (var data in dataSlider) {
if (typeof dataSlider[data] != 'undefined') {
dataSlider[data].setState({ 'lowValue': new Date(dataPeriods[data][day]) }); dataSlider[data].setState({ 'lowValue': new Date(dataPeriods[data][day]) });
dataSlider[data].draw(); dataSlider[data].draw();
} }
} }
} }
} }
window.addEventListener("DOMContentLoaded", function () {
if (window.localStorage.days)
document.getElementById("range").value = window.localStorage.days;
}, false);

View File

@@ -14,15 +14,15 @@
<a href="https://willy-tech.de/kontakt/" target="_blank" data-lang="<?php echo $data['language']; ?>"><?php _e('Feedback'); ?></a><br /> <a href="https://willy-tech.de/kontakt/" target="_blank" data-lang="<?php echo $data['language']; ?>"><?php _e('Feedback'); ?></a><br />
<a href="<?php echo $data['helpLink']; ?>" target="_blank"><?php _e('Hilfe'); ?></a><br /> <a href="<?php echo $data['helpLink']; ?>" target="_blank"><?php _e('Hilfe'); ?></a><br />
<a href="https://play.google.com/store/apps/details?id=de.willytech.picontrol" target="_blank" title="<?php _e('&Ouml;ffne im Play Store'); ?>"><?php _e('App im Play Store'); ?></a><br /> <a href="https://play.google.com/store/apps/details?id=de.willytech.picontrol" target="_blank" title="<?php _e('&Ouml;ffne im Play Store'); ?>"><?php _e('App im Play Store'); ?></a><br />
<a href="https://bitbucket.org/GSchulte/pi-control/" target="_blank"><?php _e('Git Repo'); ?></a></td> <a href="https://bugs.schultes.dev/gregor/pi-control" target="_blank"><?php _e('Git Repo'); ?></a></td>
<td rowspan="2"><a href="https://www.die-schultes.eu/" target="_blank"><?php _e('Mein Blog'); ?></a><br /> <td rowspan="2"><a href="https://www.schultes.dev/" target="_blank"><?php _e('Mein Blog'); ?></a><br />
<td><?php echo $data['version']; ?></td> <td><?php echo $data['version']; ?></td>
</tr> </tr>
<tr> <tr>
<td><strong><?php _e('LIZENZ'); ?></strong><span><?php _e('Raspberry Pi ist ein Markenzeichen<br />der %s.', '<a href="https://www.raspberrypi.org/" target="_blank">Raspberry Pi Foundation</a>'); ?></span></td> <td><strong><?php _e('LIZENZ'); ?></strong><span><?php _e('Raspberry Pi ist ein Markenzeichen<br />der %s.', '<a href="https://www.raspberrypi.org/" target="_blank">Raspberry Pi Foundation</a>'); ?></span></td>
</tr> </tr>
</table> </table>
<div id="footer-copyright"><?php _e('Mit %s entwickelt von %s.', '<span style="color: #F44336;">&#10084;</span>', '<a href="https://willy-tech.de/" target="_blank">Willy Fritzsche</a>'); ?> 2013-2017 <br>Weiterentwickelt von <a href="https://www.die-schultes.eu">Gregor Schulte</a> 2021</div> <div id="footer-copyright"><?php _e('Mit %s entwickelt von %s.', '<span style="color: #F44336;">&#10084;</span>', '<a href="https://willy-tech.de/" target="_blank">Willy Fritzsche</a>'); ?> 2013-2017 <br>Weiterentwickelt von <a href="https://www.schultes.dev">Gregor Schulte</a> 2021-2022</div>
</div> </div>
</div> </div>
<script type="text/javascript">var errorHandler = '<?php echo $data['errorHandler']; ?>';</script> <script type="text/javascript">var errorHandler = '<?php echo $data['errorHandler']; ?>';</script>

View File

@@ -17,7 +17,7 @@
<span><?php _e('Zeitraum'); ?></span> <span><?php _e('Zeitraum'); ?></span>
</div> </div>
<div class="inner"> <div class="inner">
<select onchange="changeRange(this)"> <select id="range" onchange="changeRange(this)">
<option name="" value="seven"><?php _e('Alles (7 Tage)'); ?></option> <option name="" value="seven"><?php _e('Alles (7 Tage)'); ?></option>
<option name="" value="six"><?php _e('Letzten 6 Tage'); ?></option> <option name="" value="six"><?php _e('Letzten 6 Tage'); ?></option>
<option name="" value="five"><?php _e('Letzten 5 Tage'); ?></option> <option name="" value="five"><?php _e('Letzten 5 Tage'); ?></option>
@@ -62,14 +62,15 @@
</div> </div>
<?php } ?> <?php } ?>
</div> </div>
<script type="text/javascript" src="https://www.google.com/jsapi"></script> <script type="text/javascript" src="https://www.gstatic.com/charts/loader.js"></script>
<script type="text/javascript" src="public_html/js/statistic_builder.js"></script> <script type="text/javascript" src="public_html/js/statistic_builder.js"></script>
<script type="text/javascript"> <script type="text/javascript">
google.load('visualization', '1', {packages:['controls']}); google.load('visualization', '51', {
packages: ['controls']
});
google.setOnLoadCallback(createTable); google.setOnLoadCallback(createTable);
function createTable() function createTable() {
{
<?php foreach ($data['statistics'] as $statistic) { ?> <?php foreach ($data['statistics'] as $statistic) { ?>
statisticBuilder(<?php echo $statistic['json']; ?>, null); statisticBuilder(<?php echo $statistic['json']; ?>, null);
<?php } ?> <?php } ?>

View File

@@ -31,5 +31,5 @@ foreach ($fileArray as $file)
} }
} }
if (trim(exec('dpkg -s php7.0-cli | grep Status: ')) != '' || trim(exec('dpkg -s php7.3-cli | grep Status: ')) != '') if (trim(exec('dpkg -s php7.4-cli | grep Status: ')) != '' || trim(exec('dpkg -s php7.3-cli | grep Status: ')) != '')
setConfig('cron:execution.cron', time()); setConfig('cron:execution.cron', time());

View File

@@ -10,13 +10,13 @@ if (!isset($config))
'ssh_ip' => '127.0.0.1' 'ssh_ip' => '127.0.0.1'
), ),
'version' => array( 'version' => array(
'version' => '2.2.0', 'version' => '2.3.1',
'versioncode' => 30, 'versioncode' => 36,
'android_comp_level' => 25 'android_comp_level' => 25
), ),
'url' => array( 'url' => array(
'update' => 'https://pic.die-schultes.eu/service/v1/update/', 'update' => 'https://pic.schultes.dev/api/service/v2/update/',
'updateDownload' => 'https://www.die-schultes.eu/wp-content/uploads/', 'updateDownload' => 'https://pic.schultes.dev/api/download/',
'updateNotification' => 'https://pi-control.de/?service=update_notification', 'updateNotification' => 'https://pi-control.de/?service=update_notification',
'plugin' => 'https://pi-control.de/service/v1/plugin/', 'plugin' => 'https://pi-control.de/service/v1/plugin/',
'pluginDownload' => 'https://pi-control.de/?service=plugin', 'pluginDownload' => 'https://pi-control.de/?service=plugin',

View File

@@ -28,8 +28,7 @@ function setConfig($config, $value, $customFile = NULL)
$configFile = $configPath . $file[0] . $configFileSuffix; $configFile = $configPath . $file[0] . $configFileSuffix;
if (file_exists($configFile) !== true || is_file($configFile) !== true) if (file_exists($configFile) !== true || is_file($configFile) !== true) {
{
if (!touch($configFile)) if (!touch($configFile))
return false; return false;
} }
@@ -85,17 +84,14 @@ function getConfig($config, $default = NULL, $customFile = NULL)
if (!count($configArray) > 0) if (!count($configArray) > 0)
return $default; return $default;
if (isset($file[1])) if (isset($file[1])) {
{
$var = explode('.', $file[1]); $var = explode('.', $file[1]);
if (count($var) == 1 && isset($configArray[$var[0]])) if (count($var) == 1 && isset($configArray[$var[0]]))
return $configArray[$var[0]]; return $configArray[$var[0]];
elseif (count($var) == 2 && isset($configArray[$var[0]][$var[1]])) elseif (count($var) == 2 && isset($configArray[$var[0]][$var[1]]))
return $configArray[$var[0]][$var[1]]; return $configArray[$var[0]][$var[1]];
} } else {
else
{
if (isset($configArray)) if (isset($configArray))
return $configArray; return $configArray;
} }
@@ -152,16 +148,13 @@ function writeConfig($configArray, $configFile)
ksort($configArray); ksort($configArray);
foreach ($configArray as $key => $val) foreach ($configArray as $key => $val) {
{ if (is_array($val)) {
if (is_array($val))
{
$res[] = PHP_EOL . "[$key]"; $res[] = PHP_EOL . "[$key]";
foreach ($val as $skey => $sval) foreach ($val as $skey => $sval)
$res[] = "$skey = " . (is_numeric($sval) ? $sval : '"' . $sval . '"'); $res[] = "$skey = " . (is_numeric($sval) ? $sval : '"' . $sval . '"');
} } else
else
$res[] = PHP_EOL . "$key = " . (is_numeric($val) ? $val : '"' . $val . '"'); $res[] = PHP_EOL . "$key = " . (is_numeric($val) ? $val : '"' . $val . '"');
} }
@@ -170,11 +163,9 @@ function writeConfig($configArray, $configFile)
if (file_exists($configFile) !== true || is_file($configFile) !== true || is_writeable($configFile) !== true) if (file_exists($configFile) !== true || is_file($configFile) !== true || is_writeable($configFile) !== true)
return false; return false;
if ($fp = fopen($configFile, 'w')) if ($fp = fopen($configFile, 'w')) {
{
$startTime = microtime(); $startTime = microtime();
do do {
{
$canWrite = flock($fp, LOCK_EX); $canWrite = flock($fp, LOCK_EX);
// If lock not obtained sleep for 0 - 100 milliseconds, to avoid collision and CPU load // If lock not obtained sleep for 0 - 100 milliseconds, to avoid collision and CPU load
@@ -183,8 +174,7 @@ function writeConfig($configArray, $configFile)
} while ((!$canWrite) && ((microtime() - $startTime) < 1000)); } while ((!$canWrite) && ((microtime() - $startTime) < 1000));
// file was locked so now we can store information // file was locked so now we can store information
if ($canWrite) if ($canWrite) {
{
fwrite($fp, implode(PHP_EOL, $res)); fwrite($fp, implode(PHP_EOL, $res));
flock($fp, LOCK_UN); flock($fp, LOCK_UN);
} }
@@ -212,8 +202,7 @@ function _t()
$lang = $globalLanguage; $lang = $globalLanguage;
$langFile = LANGUAGE_PATH . $lang . '.php'; $langFile = LANGUAGE_PATH . $lang . '.php';
if (empty($globalLanguageArray) && file_exists($langFile) === true && is_file($langFile) === true) if (empty($globalLanguageArray) && file_exists($langFile) === true && is_file($langFile) === true) {
{
include $langFile; include $langFile;
$globalLanguageArray = $langArray; $globalLanguageArray = $langArray;
} }
@@ -247,8 +236,7 @@ function _e()
$lang = $globalLanguage; $lang = $globalLanguage;
$langFile = LANGUAGE_PATH . $lang . '.php'; $langFile = LANGUAGE_PATH . $lang . '.php';
if (empty($globalLanguageArray) && file_exists($langFile) === true && is_file($langFile) === true) if (empty($globalLanguageArray) && file_exists($langFile) === true && is_file($langFile) === true) {
{
include $langFile; include $langFile;
$globalLanguageArray = $langArray; $globalLanguageArray = $langArray;
} }
@@ -288,8 +276,7 @@ function return_bytes($size)
$size = trim($size); $size = trim($size);
$last = strtolower($size[strlen($size) - 1]); $last = strtolower($size[strlen($size) - 1]);
switch ($last) switch ($last) {
{
case 'g': case 'g':
$size *= 1024; $size *= 1024;
case 'm': case 'm':
@@ -309,11 +296,9 @@ function getFolderSize($folder_path, $folder_size = 0)
{ {
if (!is_dir($folder_path)) if (!is_dir($folder_path))
$folder_size += filesize($folder_path); $folder_size += filesize($folder_path);
else else {
{
$folder_dir = opendir($folder_path); $folder_dir = opendir($folder_path);
while ($folder_file = readdir($folder_dir)) while ($folder_file = readdir($folder_dir)) {
{
if (is_file($folder_path . '/' . $folder_file)) if (is_file($folder_path . '/' . $folder_file))
$folder_size += filesize($folder_path . '/' . $folder_file); $folder_size += filesize($folder_path . '/' . $folder_file);
if (is_dir($folder_path . '/' . $folder_file) && $folder_file != '.' && $folder_file != '..') if (is_dir($folder_path . '/' . $folder_file) && $folder_file != '.' && $folder_file != '..')
@@ -331,11 +316,12 @@ function formatTime($time, $type = 'd.m.Y H:i')
return date($type, $time); return date($type, $time);
} }
if (!function_exists('array_column')) if (!function_exists('array_column')) {
{
function array_column($array, $columnName) function array_column($array, $columnName)
{ {
return array_map(function($element) use($columnName) { return $element[$columnName]; }, $array); return array_map(function ($element) use ($columnName) {
return $element[$columnName];
}, $array);
} }
} }
@@ -345,8 +331,7 @@ function checkUpdate()
$lang = $globalLanguage; $lang = $globalLanguage;
if (!class_exists('cURL')) if (!class_exists('cURL')) (include LIBRARY_PATH . 'curl/curl.class.php');
(include LIBRARY_PATH.'curl/curl.class.php');
$curl = new cURL($config['url']['update']); $curl = new cURL($config['url']['update']);
$curl->execute(); $curl->execute();
@@ -360,8 +345,7 @@ function checkUpdate()
if (!isset($data['versions'], $data['latest'])) if (!isset($data['versions'], $data['latest']))
return 1; return 1;
if ($data['latest']['versioncode'] > $config['version']['versioncode']) if ($data['latest']['versioncode'] > $config['version']['versioncode']) {
{
$currentUpdateKey = array_search($config['version']['versioncode'] + 1, array_column($data['versions'], 'versioncode')); $currentUpdateKey = array_search($config['version']['versioncode'] + 1, array_column($data['versions'], 'versioncode'));
if (isset($data['versions'][$currentUpdateKey]['changelog'][$lang])) if (isset($data['versions'][$currentUpdateKey]['changelog'][$lang]))
@@ -370,8 +354,7 @@ function checkUpdate()
$data['versions'][$currentUpdateKey]['changelog'] = current($data['versions'][$currentUpdateKey]['changelog']); $data['versions'][$currentUpdateKey]['changelog'] = current($data['versions'][$currentUpdateKey]['changelog']);
return $data['versions'][$currentUpdateKey]; return $data['versions'][$currentUpdateKey];
} } else
else
return 0; return 0;
} }
@@ -420,8 +403,7 @@ function getAllNetworkConnections()
$streamInterfaces = explode('-#-', shell_exec($shell_string)); $streamInterfaces = explode('-#-', shell_exec($shell_string));
foreach ($streamInterfaces as $index => $streamInterface) foreach ($streamInterfaces as $index => $streamInterface) {
{
$wirelessOption = ''; $wirelessOption = '';
$interface = $networkInterfaces[$index]; $interface = $networkInterfaces[$index];
@@ -435,12 +417,10 @@ function getAllNetworkConnections()
$output0 = $interface; $output0 = $interface;
if (substr($output0, 0, 4) == 'wlan') if (substr($output0, 0, 4) == 'wlan') {
{
$streamWirelessInterface = shell_exec('/sbin/iwconfig ' . $output0); $streamWirelessInterface = shell_exec('/sbin/iwconfig ' . $output0);
if (0 == substr_count($streamWirelessInterface, 'Not-Associated')) if (0 == substr_count($streamWirelessInterface, 'Not-Associated')) {
{
$posConfig_start = @strpos($streamWirelessInterface, 'ESSID:"', 0) + 7; $posConfig_start = @strpos($streamWirelessInterface, 'ESSID:"', 0) + 7;
$posConfig_end = @strpos($streamWirelessInterface, '"', $posConfig_start); $posConfig_end = @strpos($streamWirelessInterface, '"', $posConfig_start);
$wirelessOption['ssid'] = trim(substr($streamWirelessInterface, $posConfig_start, ($posConfig_end - $posConfig_start))); $wirelessOption['ssid'] = trim(substr($streamWirelessInterface, $posConfig_start, ($posConfig_end - $posConfig_start)));
@@ -451,8 +431,7 @@ function getAllNetworkConnections()
$posConfig_start = @strpos($streamWirelessInterface, 'Signal level=', 0) + 13; $posConfig_start = @strpos($streamWirelessInterface, 'Signal level=', 0) + 13;
if (($posConfig_end = @strpos($streamWirelessInterface, '/100', $posConfig_start)) === false) if (($posConfig_end = @strpos($streamWirelessInterface, '/100', $posConfig_start)) === false) {
{
$posConfig_end = @strpos($streamWirelessInterface, ' dBm', $posConfig_start); $posConfig_end = @strpos($streamWirelessInterface, ' dBm', $posConfig_start);
$signal = trim(substr($streamWirelessInterface, $posConfig_start, ($posConfig_end - $posConfig_start))); $signal = trim(substr($streamWirelessInterface, $posConfig_start, ($posConfig_end - $posConfig_start)));
@@ -462,10 +441,8 @@ function getAllNetworkConnections()
$wirelessOption['signal'] = 100; $wirelessOption['signal'] = 100;
else else
$wirelessOption['signal'] = 2 * ($signal + 100); $wirelessOption['signal'] = 2 * ($signal + 100);
} } else
else
$wirelessOption['signal'] = trim(substr($streamWirelessInterface, $posConfig_start, ($posConfig_end - $posConfig_start))); $wirelessOption['signal'] = trim(substr($streamWirelessInterface, $posConfig_start, ($posConfig_end - $posConfig_start)));
} }
} }
@@ -481,8 +458,7 @@ function scanAccessPoints($networkConnections, $ssh = false)
$wlan = array(); $wlan = array();
foreach ($networkConnections as $interface) foreach ($networkConnections as $interface) {
{
if (substr($interface['interface'], 0, 4) != 'wlan') if (substr($interface['interface'], 0, 4) != 'wlan')
continue; continue;
@@ -493,8 +469,7 @@ function scanAccessPoints($networkConnections, $ssh = false)
else else
$streamWlan = shell_exec('/sbin/iwlist ' . escapeshellarg($interface['interface']) . ' scan'); $streamWlan = shell_exec('/sbin/iwlist ' . escapeshellarg($interface['interface']) . ' scan');
for ($i = 1; $i <= substr_count($streamWlan, 'ESSID:"'); $i += 1) for ($i = 1; $i <= substr_count($streamWlan, 'ESSID:"'); $i += 1) {
{
$posCell_start = @strpos($streamWlan, 'Cell ' . (($i < 10) ? '0' : '') . $i . ' - Address:', 0) + 19; $posCell_start = @strpos($streamWlan, 'Cell ' . (($i < 10) ? '0' : '') . $i . ' - Address:', 0) + 19;
$posCell_end = @strpos($streamWlan, 'Cell ' . ((($i + 1) < 10) ? '0' : '') . ($i + 1), $posCell_start); $posCell_end = @strpos($streamWlan, 'Cell ' . ((($i + 1) < 10) ? '0' : '') . ($i + 1), $posCell_start);
if ($posCell_end === false) if ($posCell_end === false)
@@ -520,8 +495,7 @@ function scanAccessPoints($networkConnections, $ssh = false)
$wirelessOption['signal'] = trim(substr($string, $posConfig_start, ($posConfig_end - $posConfig_start))); $wirelessOption['signal'] = trim(substr($string, $posConfig_start, ($posConfig_end - $posConfig_start)));
if (strpos(substr($string, $posConfig_start, 20), 'dBm')) if (strpos(substr($string, $posConfig_start, 20), 'dBm')) {
{
if ($wirelessOption['signal'] <= -100) if ($wirelessOption['signal'] <= -100)
$wirelessOption['signal'] = 0; $wirelessOption['signal'] = 0;
elseif ($wirelessOption['signal'] >= -50) elseif ($wirelessOption['signal'] >= -50)
@@ -558,9 +532,15 @@ function urlIsPublic($url)
$ip = gethostbyname($url); $ip = gethostbyname($url);
$long = ip2long($ip); $long = ip2long($ip);
if (($long >= 167772160 && $long <= 184549375) || ($long >= -1408237568 && $long <= -1407188993) || ($long >= -1062731776 && $long <= -1062666241) || ($long >= 2130706432 && $long <= 2147483647) || $long == -1) if (PHP_INT_SIZE == 4) {
if (($long >= 167772160 && $long <= 184549375) || ($long >= -1408237568 && $long <= -1407188993) || ($long >= -1062731776 && $long <= -1062666241) || ($long >= 2130706432 && $long <= 2147483647) || $long == -1) {
return false; return false;
}
} else {
if (($long >= 3232235520 && $long <= 3232301055) || ($long >= 2886729728 && $long <= 2887778303) || ($long >= 167772160 && $long <= 184549375) || $long == -1) {
return false;
}
}
return true; return true;
} }
@@ -581,12 +561,9 @@ function getDirectory($folder_)
$folder = array(); $folder = array();
$file = array(); $file = array();
foreach (@scandir($folder_) as $file_) foreach (@scandir($folder_) as $file_) {
{ if ($file_[0] != '.') {
if ($file_[0] != '.') if (is_dir($folder_ . '/' . $file_)) {
{
if (is_dir($folder_.'/'.$file_))
{
$folderArray[] = $file_; $folderArray[] = $file_;
$fileArray[] = $file_; $fileArray[] = $file_;
} }
@@ -619,10 +596,8 @@ function getAllFiles($folder_)
else else
$fileArray[] = $file_; $fileArray[] = $file_;
if (isset($folderArray)) if (isset($folderArray)) {
{ foreach ($folderArray as $row) {
foreach ($folderArray as $row)
{
list($file_return, $error_log) = getAllFiles($folder_ . '/' . $row); list($file_return, $error_log) = getAllFiles($folder_ . '/' . $row);
$file[$row] = $file_return; $file[$row] = $file_return;
@@ -633,10 +608,8 @@ function getAllFiles($folder_)
} }
} }
if (isset($fileArray)) if (isset($fileArray)) {
{ foreach ($fileArray as $row) {
foreach ($fileArray as $row)
{
$file[] = $row; $file[] = $row;
if (is_writeable($folder_ . '/' . $row) !== true) if (is_writeable($folder_ . '/' . $row) !== true)
@@ -651,8 +624,7 @@ function deleteFolder($folder)
{ {
chmod($folder, 0777); chmod($folder, 0777);
if (is_dir($folder)) if (is_dir($folder)) {
{
$handle = opendir($folder); $handle = opendir($folder);
while ($filename = readdir($handle)) while ($filename = readdir($handle))
if ($filename != '.' && $filename != '..') if ($filename != '.' && $filename != '..')
@@ -660,21 +632,18 @@ function deleteFolder($folder)
closedir($handle); closedir($handle);
rmdir($folder); rmdir($folder);
} } else
else
unlink($folder); unlink($folder);
} }
function checkInternetConnection() function checkInternetConnection()
{ {
if (function_exists('fsockopen') && ini_get('allow_url_fopen') !== false) if (function_exists('fsockopen') && ini_get('allow_url_fopen') !== false) {
{
if (!$sock = @fsockopen('www.google.com', 80, $num, $error, 5)) if (!$sock = @fsockopen('www.google.com', 80, $num, $error, 5))
return false; // Raspberry Pi is not connected to internet return false; // Raspberry Pi is not connected to internet
else else
return true; return true;
} } else
else
return false; return false;
} }
@@ -719,38 +688,28 @@ function addCronToCrontab($cronEntry, $ssh)
$hashtag = 0; $hashtag = 0;
$hashtagLine = 0; $hashtagLine = 0;
if (!in_array($cronEntry, $lines)) if (!in_array($cronEntry, $lines)) {
{ if (substr(trim($lines[$lastLine]), 0, 1) == '') {
if (substr(trim($lines[$lastLine]), 0, 1) == '') if (substr(trim($lines[$secondLastLine]), 0, 1) == '#') {
{
if (substr(trim($lines[$secondLastLine]), 0, 1) == '#')
{
$hashtag = 1; $hashtag = 1;
$hashtagLine = $secondLastLine; $hashtagLine = $secondLastLine;
} } else {
else
{
$hashtag = 0; $hashtag = 0;
$hashtagLine = $lastLine; $hashtagLine = $lastLine;
} }
} }
if (substr(trim($lines[$lastLine]), 0, 1) == '#') if (substr(trim($lines[$lastLine]), 0, 1) == '#') {
{
$hashtag = 2; $hashtag = 2;
$hashtagLine = $lastLine; $hashtagLine = $lastLine;
} }
foreach ($lines as $line) foreach ($lines as $line) {
{ if ($lineCount == $hashtagLine) {
if ($lineCount == $hashtagLine) if ($hashtag == 0) {
{
if ($hashtag == 0)
{
$newFile .= $cronEntry . "\n"; $newFile .= $cronEntry . "\n";
$newFile .= '#'; $newFile .= '#';
} } elseif ($hashtag == 1)
elseif ($hashtag == 1)
$newFile .= $cronEntry . "\n"; $newFile .= $cronEntry . "\n";
elseif ($hashtag == 2) elseif ($hashtag == 2)
$newFile .= $cronEntry . "\n"; $newFile .= $cronEntry . "\n";
@@ -763,30 +722,24 @@ function addCronToCrontab($cronEntry, $ssh)
if (file_exists(TEMP_PATH . 'crontab.tmp.php') && is_file(TEMP_PATH . 'crontab.tmp.php')) if (file_exists(TEMP_PATH . 'crontab.tmp.php') && is_file(TEMP_PATH . 'crontab.tmp.php'))
unlink(TEMP_PATH . 'crontab.tmp.php'); unlink(TEMP_PATH . 'crontab.tmp.php');
if (($file = fopen(TEMP_PATH.'crontab.tmp.php', 'w+'))) if (($file = fopen(TEMP_PATH . 'crontab.tmp.php', 'w+'))) {
{
if (!fwrite($file, $newFile)) if (!fwrite($file, $newFile))
return 4; return 4;
} } else
else
return 3; return 3;
if (($stream = ssh2_scp_send($ssh, TEMP_PATH.'crontab.tmp.php', '/etc/crontab'))) if (($stream = ssh2_scp_send($ssh, TEMP_PATH . 'crontab.tmp.php', '/etc/crontab'))) {
{
unlink(TEMP_PATH . 'crontab.tmp.php'); unlink(TEMP_PATH . 'crontab.tmp.php');
return 0; return 0;
} } else
else
return 1; return 1;
} } else
else
return 2; return 2;
} }
function getWeatherIconYahoo($icon) function getWeatherIconYahoo($icon)
{ {
switch ($icon) switch ($icon) {
{
case 32: case 32:
case 36: case 36:
return '01d'; return '01d';
@@ -852,8 +805,7 @@ function getWeatherIconYahoo($icon)
function getWeatherIconOpenWeatherMap($icon) function getWeatherIconOpenWeatherMap($icon)
{ {
switch ($icon) switch ($icon) {
{
case '01d': case '01d':
return '01d'; return '01d';
case '01n': case '01n':
@@ -891,8 +843,7 @@ function getWeatherIconOpenWeatherMap($icon)
function getWeatherIconWunderground($icon) function getWeatherIconWunderground($icon)
{ {
switch ($icon) switch ($icon) {
{
case 'clear': case 'clear':
case 'sunny': case 'sunny':
return '01d'; return '01d';
@@ -942,8 +893,7 @@ function getWeatherIconWunderground($icon)
function getWeatherIconDarksky($icon) function getWeatherIconDarksky($icon)
{ {
switch ($icon) switch ($icon) {
{
case 'clear-day': case 'clear-day':
return '01d'; return '01d';
case 'clear-night': case 'clear-night':
@@ -976,8 +926,7 @@ function getWeatherIconDarksky($icon)
function getWeatherIconYr($icon) function getWeatherIconYr($icon)
{ {
switch ($icon) switch ($icon) {
{
case '1': case '1':
case '01': case '01':
case '01d': case '01d':
@@ -1111,8 +1060,7 @@ function getWeather()
{ {
global $globalLanguage; global $globalLanguage;
if (!class_exists('cURL')) if (!class_exists('cURL')) (include LIBRARY_PATH . 'curl/curl.class.php');
(include LIBRARY_PATH.'curl/curl.class.php');
$service = getConfig('main:weather.service', 'openweathermap'); $service = getConfig('main:weather.service', 'openweathermap');
$serviceToken = getConfig('main:weather.serviceToken', ''); $serviceToken = getConfig('main:weather.serviceToken', '');
@@ -1139,8 +1087,7 @@ function getWeather()
$output = array(); $output = array();
if ($service == 'openweathermap') if ($service == 'openweathermap') {
{
$curl = new cURL('http://api.openweathermap.org/data/2.5/weather?q=' . $location . ',' . $country . '&units=metric&lang=de&appid=' . $serviceToken); $curl = new cURL('http://api.openweathermap.org/data/2.5/weather?q=' . $location . ',' . $country . '&units=metric&lang=de&appid=' . $serviceToken);
$curl->execute(); $curl->execute();
@@ -1164,8 +1111,7 @@ function getWeather()
$output['icon'] = getWeatherIconOpenWeatherMap($data['weather'][0]['icon']); $output['icon'] = getWeatherIconOpenWeatherMap($data['weather'][0]['icon']);
$output['description'] = $data['weather'][0]['description']; $output['description'] = $data['weather'][0]['description'];
if (empty($data['name'])) if (empty($data['name'])) {
{
$curl = new cURL('http://api.openweathermap.org/data/2.5/weather?q=' . $location . ',' . $country . '&appid=' . $serviceToken); $curl = new cURL('http://api.openweathermap.org/data/2.5/weather?q=' . $location . ',' . $country . '&appid=' . $serviceToken);
$curl->execute(); $curl->execute();
@@ -1181,11 +1127,8 @@ function getWeather()
$output['city'] = $data['name']; $output['city'] = $data['name'];
$output['country'] = $data['sys']['country']; $output['country'] = $data['sys']['country'];
} }
} } elseif ($service == 'yahoo') {
elseif ($service == 'yahoo') for ($i = 0; $i < 2; $i++) {
{
for ($i = 0; $i < 2; $i++)
{
$yahooApiUrl = 'https://query.yahooapis.com/v1/public/yql'; $yahooApiUrl = 'https://query.yahooapis.com/v1/public/yql';
$yqlQuery = 'select location, wind, atmosphere, item.condition, item.forecast from weather.forecast where woeid in (select woeid from geo.places(1) where text="' . $location . ', ' . $country . '") AND u=\'c\' | truncate(count=1)'; $yqlQuery = 'select location, wind, atmosphere, item.condition, item.forecast from weather.forecast where woeid in (select woeid from geo.places(1) where text="' . $location . ', ' . $country . '") AND u=\'c\' | truncate(count=1)';
$yqlQueryUrl = $yahooApiUrl . '?q=' . urlencode($yqlQuery) . '&format=json'; $yqlQueryUrl = $yahooApiUrl . '?q=' . urlencode($yqlQuery) . '&format=json';
@@ -1193,8 +1136,7 @@ function getWeather()
$curl = new cURL($yqlQueryUrl); $curl = new cURL($yqlQueryUrl);
$curl->execute(); $curl->execute();
if ($curl->getStatusCode() != '200') if ($curl->getStatusCode() != '200') {
{
if ($curl->getStatusCode() == '0') if ($curl->getStatusCode() == '0')
return 100; return 100;
@@ -1204,8 +1146,7 @@ function getWeather()
if ($curl->getResult($data) != JSON_ERROR_NONE) if ($curl->getResult($data) != JSON_ERROR_NONE)
return 1; return 1;
if (!isset($data['query']['results']['channel'])) if (!isset($data['query']['results']['channel'])) {
{
if ($i == 0) if ($i == 0)
continue; continue;
@@ -1225,11 +1166,8 @@ function getWeather()
$output['icon'] = getWeatherIconYahoo($data['item']['condition']['code']); $output['icon'] = getWeatherIconYahoo($data['item']['condition']['code']);
$output['description'] = $data['item']['condition']['text']; $output['description'] = $data['item']['condition']['text'];
} }
} } elseif ($service == 'wunderground') {
elseif ($service == 'wunderground') switch ($globalLanguage) {
{
switch ($globalLanguage)
{
case 'de': case 'de':
$lang = 'DL'; $lang = 'DL';
break; break;
@@ -1240,8 +1178,7 @@ function getWeather()
$lang = 'DL'; $lang = 'DL';
} }
switch ($country) switch ($country) {
{
case 'germany': case 'germany':
$customCountry = 'germany'; $customCountry = 'germany';
break; break;
@@ -1263,8 +1200,7 @@ function getWeather()
$iMax = 2; $iMax = 2;
do do {
{
if (($wundergroundCache = getConfig('main:weather.wundergroundCache', '')) != '') if (($wundergroundCache = getConfig('main:weather.wundergroundCache', '')) != '')
$location = 'zmw:' . $wundergroundCache; $location = 'zmw:' . $wundergroundCache;
@@ -1277,15 +1213,13 @@ function getWeather()
if ($curl->getResult($data) != JSON_ERROR_NONE) if ($curl->getResult($data) != JSON_ERROR_NONE)
return 1; return 1;
if (isset($data['response']['results']) && count($data['response']['results']) > 0 && $iMax >= 0) if (isset($data['response']['results']) && count($data['response']['results']) > 0 && $iMax >= 0) {
{
$iMax--; $iMax--;
setConfig('main:weather.wundergroundCache', $data['response']['results'][0]['zmw']); setConfig('main:weather.wundergroundCache', $data['response']['results'][0]['zmw']);
continue; continue;
} }
} } while (false);
while (false);
if (!isset($data['current_observation'])) if (!isset($data['current_observation']))
return 1; return 1;
@@ -1305,9 +1239,7 @@ function getWeather()
$output['wind'] = str_replace('.', ',', round($data['wind_kph'])); $output['wind'] = str_replace('.', ',', round($data['wind_kph']));
$output['icon'] = getWeatherIconWunderground(isset($matches[1]) ? $matches[1] : $data['icon']); $output['icon'] = getWeatherIconWunderground(isset($matches[1]) ? $matches[1] : $data['icon']);
$output['description'] = $data['weather']; $output['description'] = $data['weather'];
} } elseif ($service == 'darksky') {
elseif ($service == 'darksky')
{
$lang = $globalLanguage; $lang = $globalLanguage;
$curl = new cURL('https://api.darksky.net/forecast/' . $serviceToken . '/' . $latitude . ',' . $longitude . '?lang=' . $lang . '&units=si'); $curl = new cURL('https://api.darksky.net/forecast/' . $serviceToken . '/' . $latitude . ',' . $longitude . '?lang=' . $lang . '&units=si');
@@ -1335,15 +1267,11 @@ function getWeather()
$output['wind'] = str_replace('.', ',', round($data['windSpeed'])); $output['wind'] = str_replace('.', ',', round($data['windSpeed']));
$output['icon'] = getWeatherIconDarksky($data['icon']); $output['icon'] = getWeatherIconDarksky($data['icon']);
$output['description'] = $data['summary']; $output['description'] = $data['summary'];
} } elseif ($service == 'yr') {
elseif ($service == 'yr')
{
$yrCache = getConfig('main:weather.yrCache', ''); $yrCache = getConfig('main:weather.yrCache', '');
if ($yrCache == '') if ($yrCache == '') {
{ switch ($country) {
switch ($country)
{
case 'germany': case 'germany':
$customCountry = 'de'; $customCountry = 'de';
break; break;
@@ -1401,8 +1329,7 @@ function getWeather()
function getYrQueryFromLocation($location, $country) function getYrQueryFromLocation($location, $country)
{ {
if (!class_exists('cURL')) if (!class_exists('cURL')) (include LIBRARY_PATH . 'curl/curl.class.php');
(include LIBRARY_PATH.'curl/curl.class.php');
$curl = new cURL('http://www.geonames.org/postalcode-search.html?q=' . urlencode($location) . '&country=' . $country); $curl = new cURL('http://www.geonames.org/postalcode-search.html?q=' . urlencode($location) . '&country=' . $country);
$curl->execute(); $curl->execute();
@@ -1428,24 +1355,18 @@ function array_sort($array, $on, $order = SORT_ASC)
$new_array = array(); $new_array = array();
$sortable_array = array(); $sortable_array = array();
if (count($array) > 0) if (count($array) > 0) {
{ foreach ($array as $k => $v) {
foreach ($array as $k => $v) if (is_array($v)) {
{ foreach ($v as $k2 => $v2) {
if (is_array($v))
{
foreach ($v as $k2 => $v2)
{
if ($k2 == $on) if ($k2 == $on)
$sortable_array[$k] = $v2; $sortable_array[$k] = $v2;
} }
} } else
else
$sortable_array[$k] = $v; $sortable_array[$k] = $v;
} }
switch ($order) switch ($order) {
{
case SORT_ASC: case SORT_ASC:
asort($sortable_array); asort($sortable_array);
break; break;
@@ -1484,24 +1405,18 @@ function arraySort($array, $on, $order = SORT_ASC)
$new_array = array(); $new_array = array();
$sortable_array = array(); $sortable_array = array();
if (count($array) > 0) if (count($array) > 0) {
{ foreach ($array as $k => $v) {
foreach ($array as $k => $v) if (is_array($v)) {
{ foreach ($v as $k2 => $v2) {
if (is_array($v))
{
foreach ($v as $k2 => $v2)
{
if ($k2 == $on) if ($k2 == $on)
$sortable_array[$k] = $v2; $sortable_array[$k] = $v2;
} }
} } else
else
$sortable_array[$k] = $v; $sortable_array[$k] = $v;
} }
switch ($order) switch ($order) {
{
case SORT_ASC: case SORT_ASC:
asort($sortable_array); asort($sortable_array);
break; break;
@@ -1522,12 +1437,10 @@ function ipInRange($ip, $ranges)
if (!is_array($ranges)) if (!is_array($ranges))
$ranges[] = $ranges; $ranges[] = $ranges;
foreach ($ranges as $range) foreach ($ranges as $range) {
{
$return = false; $return = false;
if (strpos($range, '/') !== false) if (strpos($range, '/') !== false) {
{
list($range, $netmask) = explode('/', $range, 2); list($range, $netmask) = explode('/', $range, 2);
$blocks = explode('.', $range); $blocks = explode('.', $range);
@@ -1541,18 +1454,14 @@ function ipInRange($ip, $ranges)
$netmaskLong = ~$wildcardLong; $netmaskLong = ~$wildcardLong;
$return = (($ipLong & $netmaskLong) == ($rangeLong & $netmaskLong)); $return = (($ipLong & $netmaskLong) == ($rangeLong & $netmaskLong));
} } else {
else if (strpos($range, '*') !== false) {
{
if (strpos($range, '*') !== false)
{
$lower = str_replace('*', '0', $range); $lower = str_replace('*', '0', $range);
$upper = str_replace('*', '255', $range); $upper = str_replace('*', '255', $range);
$range = $lower . '-' . $upper; $range = $lower . '-' . $upper;
} }
if (strpos($range, '-') !== false) if (strpos($range, '-') !== false) {
{
list($lower, $upper) = explode('-', $range, 2); list($lower, $upper) = explode('-', $range, 2);
$lowerLong = (float) sprintf('%u', ip2long($lower)); $lowerLong = (float) sprintf('%u', ip2long($lower));
$upperLong = (float) sprintf('%u', ip2long($upper)); $upperLong = (float) sprintf('%u', ip2long($upper));
@@ -1560,8 +1469,7 @@ function ipInRange($ip, $ranges)
$return = (($ipLong >= $lowerLong) && ($ipLong <= $upperLong)); $return = (($ipLong >= $lowerLong) && ($ipLong <= $upperLong));
} }
if (filter_var($range, FILTER_VALIDATE_IP)) if (filter_var($range, FILTER_VALIDATE_IP)) {
{
$rangeLong = ip2long($range); $rangeLong = ip2long($range);
$ipLong = ip2long($ip); $ipLong = ip2long($ip);
$return = ($ipLong == $rangeLong); $return = ($ipLong == $rangeLong);
@@ -1580,10 +1488,11 @@ function getLanguageFromIso($isoCode)
if (empty($isoCode)) if (empty($isoCode))
return false; return false;
switch ($isoCode) switch ($isoCode) {
{ case 'de':
case 'de': return _t('Deutsch'); return _t('Deutsch');
case 'en': return _t('Englisch'); case 'en':
return _t('Englisch');
} }
return false; return false;
@@ -1606,15 +1515,19 @@ function getInfoForHeaderBar()
{ {
$type = getConfig('main:headerInfo.type', 'disable'); $type = getConfig('main:headerInfo.type', 'disable');
switch ($type) switch ($type) {
{ case 'label':
case 'label': return getConfig('main:main.label', 'Raspberry Pi'); return getConfig('main:main.label', 'Raspberry Pi');
case 'label-ip': return sprintf('%s (%s)', getConfig('main:main.label', 'Raspberry Pi'), $_SERVER['SERVER_ADDR']); case 'label-ip':
case 'label-hostname': return sprintf('%s (%s)', getConfig('main:main.label', 'Raspberry Pi'), trim(@shell_exec('cat /proc/sys/kernel/hostname'))); return sprintf('%s (%s)', getConfig('main:main.label', 'Raspberry Pi'), $_SERVER['SERVER_ADDR']);
case 'ip': return $_SERVER['SERVER_ADDR']; case 'label-hostname':
case 'hostname': return trim(@shell_exec('cat /proc/sys/kernel/hostname')); return sprintf('%s (%s)', getConfig('main:main.label', 'Raspberry Pi'), trim(@shell_exec('cat /proc/sys/kernel/hostname')));
case 'ip':
return $_SERVER['SERVER_ADDR'];
case 'hostname':
return trim(@shell_exec('cat /proc/sys/kernel/hostname'));
case 'disable': case 'disable':
default: return false; default:
return false;
} }
} }
?>

View File

@@ -80,7 +80,7 @@ function rpi_getCPUType()
function rpi_getCpuModel() function rpi_getCpuModel()
{ {
$model = trim(@shell_exec('cat /proc/cpuinfo | grep -m 1 "model name" | tr -d " " | cut -d ":" -f 2')); $model = trim(@shell_exec('cat /proc/cpuinfo | grep -m 1 "Model" | cut -d ":" -f 2'));
return $model; return $model;
} }
@@ -101,8 +101,7 @@ function rpi_getCPULoad($accurate = false, $mulitcore = false)
preg_match_all('/^cpu[0-9]?(.*)$/im', $file[0], $prevCPUStrings); preg_match_all('/^cpu[0-9]?(.*)$/im', $file[0], $prevCPUStrings);
preg_match_all('/^cpu[0-9]?(.*)$/im', $file[1], $curCPUStrings); preg_match_all('/^cpu[0-9]?(.*)$/im', $file[1], $curCPUStrings);
for ($i = 0; $i < count($prevCPUStrings[0]); $i++) for ($i = 0; $i < count($prevCPUStrings[0]); $i++) {
{
$prevCPU = preg_split('/\s+/', $prevCPUStrings[0][$i]); $prevCPU = preg_split('/\s+/', $prevCPUStrings[0][$i]);
$curCPU = preg_split('/\s+/', $curCPUStrings[0][$i]); $curCPU = preg_split('/\s+/', $curCPUStrings[0][$i]);
@@ -138,8 +137,7 @@ function rpi_getDistribution()
{ {
$distribution = trim(@shell_exec('cat /etc/issue | cut -d " " -f 1-3')); $distribution = trim(@shell_exec('cat /etc/issue | cut -d " " -f 1-3'));
if ($distribution == '') if ($distribution == '') {
{
$distributionString = @shell_exec('cat /etc/*-release | grep PRETTY_NAME'); $distributionString = @shell_exec('cat /etc/*-release | grep PRETTY_NAME');
preg_match('/.*="([\w\s\d\/]*).*"/i', $distributionString, $match); preg_match('/.*="([\w\s\d\/]*).*"/i', $distributionString, $match);
@@ -175,7 +173,9 @@ function rpi_getInstalledPackages()
{ {
@exec('dpkg -l | grep ^ii', $packages); @exec('dpkg -l | grep ^ii', $packages);
$packages = array_map(function($package) { return preg_split('/[\s]+/', $package, 5); }, $packages); $packages = array_map(function ($package) {
return preg_split('/[\s]+/', $package, 5);
}, $packages);
return $packages; return $packages;
} }
@@ -217,8 +217,7 @@ function rpi_getRpiRevision()
* +- Memory * +- Memory
*/ */
if (isset($match[1])) if (isset($match[1])) {
{
if ($match[1][0] == '1' || $match[1][0] == '2') if ($match[1][0] == '1' || $match[1][0] == '2')
$match[1] = substr($match[1], 1); $match[1] = substr($match[1], 1);
@@ -226,13 +225,14 @@ function rpi_getRpiRevision()
return $revision[hexdec($match[1])]; return $revision[hexdec($match[1])];
elseif (strlen($match[1]) == 6 && $match[1][0] != 'a' && $match[1][0] != '9') elseif (strlen($match[1]) == 6 && $match[1][0] != 'a' && $match[1][0] != '9')
return $revision[hexdec(substr($match[1], -4))]; return $revision[hexdec(substr($match[1], -4))];
elseif (strlen($match[1]) == 6) elseif (strlen($match[1]) == 6) {
{ return array(
return array('revision' => $match[1], 'revision' => $match[1],
'model' => $revision_model[hexdec(substr($match[1], 3, 2))], 'model' => $revision_model[hexdec(substr($match[1], 3, 2))],
'pcb' => '1.' . hexdec(substr($match[1], -1)), 'pcb' => '1.' . hexdec(substr($match[1], -1)),
'memory' => $revision_memory[bindec(substr(decbin(hexdec(substr($match[1], 0, 1))), 1))], 'memory' => $revision_memory[bindec(substr(decbin(hexdec(substr($match[1], 0, 1))), 1))],
'manufacturer' => $revision_manufacturer[hexdec(substr($match[1], 1, 1))]); 'manufacturer' => $revision_manufacturer[hexdec(substr($match[1], 1, 1))]
);
} }
} }
@@ -250,15 +250,14 @@ function rpi_getRpiSerial()
function rpi_getMemorySplit() function rpi_getMemorySplit()
{ {
$rev = $this->getRpiRevision(); $rev = $this->getRpiRevision();
if ($rev >= 7) if ($rev >= 7) {
{
// 512 MB // 512 MB
$config = @shell_exec('cat /boot/config.txt'); $config = @shell_exec('cat /boot/config.txt');
preg_match('#gpu_mem=([0-9]+)#i', $config, $match); preg_match('#gpu_mem=([0-9]+)#i', $config, $match);
$total = intval($match[1]); $total = intval($match[1]);
if ($total == 16) if ($total == 16)
return array('system' => '496 MiB', 'video' => '16 MiB'); return array('system' => '1991 MiB', 'video' => '16 MiB');
elseif ($total == 32) elseif ($total == 32)
return array('system' => '480 MiB', 'video' => '32 MiB'); return array('system' => '480 MiB', 'video' => '32 MiB');
elseif ($total == 64) elseif ($total == 64)
@@ -280,29 +279,21 @@ function rpi_getMemorySplit()
elseif ($total > 192 && $total <= 224) elseif ($total > 192 && $total <= 224)
return array('system' => '224 MiB', 'video' => '32 MiB'); return array('system' => '224 MiB', 'video' => '32 MiB');
return array('system' => '240 MiB', 'video' => '16 MiB'); return array('system' => '1991 MiB', 'video' => '16 MiB');
} }
function rpi_getMemoryUsage() function rpi_getMemoryUsage()
{ {
exec('free -bo 2>/dev/null || free -b', $data); exec('free -b', $data);
if (strpos($data[0], 'available') !== false) {
list($type, $total, $used, $free, $shared, $buffers, $available) = preg_split('#\s+#', $data[1]); list($type, $total, $used, $free, $shared, $buffers, $available) = preg_split('#\s+#', $data[1]);
$usage = (int) round(($total - $available) / $total * 100); $usage = (int) round(($total - $available) / $total * 100);
return array('percent' => $usage, 'total' => $total, 'free' => $available, 'used' => ($total - $available)); return array('percent' => $usage, 'total' => $total, 'free' => $available, 'used' => ($total - $available));
} }
list($type, $total, $used, $free, $shared, $buffers, $cached) = preg_split('#\s+#', $data[1]);
$usage = (int) round(($used - $buffers - $cached) / $total * 100);
return array('percent' => $usage, 'total' => $total, 'free' => ($free + $buffers + $cached), 'used' => ($used - $buffers - $cached));
}
function rpi_getSwapUsage() function rpi_getSwapUsage()
{ {
exec('free -bo 2>/dev/null || free -b', $data); exec('free -b', $data);
list($type, $total, $used, $free) = preg_split('#\s+#', $data[2]); list($type, $total, $used, $free) = preg_split('#\s+#', $data[2]);
$usage = (int) round($used / $total * 100); $usage = (int) round($used / $total * 100);
@@ -326,12 +317,10 @@ function rpi_getMemoryInfo()
$totalSize = 0; $totalSize = 0;
$usedSize = 0; $usedSize = 0;
foreach ($data as $row) foreach ($data as $row) {
{
list($device, $type, $blocks, $use, $available, $used, $mountpoint) = preg_split('#[\s%]+#i', $row); list($device, $type, $blocks, $use, $available, $used, $mountpoint) = preg_split('#[\s%]+#i', $row);
if (multiArraySearch($devices, 'device', $device) === false) if (multiArraySearch($devices, 'device', $device) === false) {
{
$totalSize += $blocks * 1024; $totalSize += $blocks * 1024;
$usedSize += $use * 1024; $usedSize += $use * 1024;
} }
@@ -347,8 +336,7 @@ function rpi_getMemoryInfo()
); );
} }
usort($devices, function($a, $b) usort($devices, function ($a, $b) {
{
return strcasecmp($a['device'], $b['device']); return strcasecmp($a['device'], $b['device']);
}); });
@@ -362,8 +350,7 @@ function rpi_getUsbDevices()
exec('lsusb', $data); exec('lsusb', $data);
$devices = array(); $devices = array();
foreach ($data as $row) foreach ($data as $row) {
{
preg_match('#[0-9a-f]{4}:[0-9a-f]{4}\s+(.+)#i', $row, $match); preg_match('#[0-9a-f]{4}:[0-9a-f]{4}\s+(.+)#i', $row, $match);
if (count($match) == 2) if (count($match) == 2)
@@ -400,44 +387,43 @@ function rpi_getAllUsers()
$usersLoggedIn = array(); $usersLoggedIn = array();
$usersAll = array(); $usersAll = array();
foreach ($dataLoggedIn as $row) foreach ($dataLoggedIn as $row) {
{
$split = preg_split('/\s+/i', $row); $split = preg_split('/\s+/i', $row);
if (count($split) == 6) if (count($split) == 6)
$usersLoggedIn[$split[0]][] = array('port' => $split[1], 'lastLogin' => strtotime($split[2] . ' ' . $split[3] . ' ' . $split[4]), 'lastLoginAddress' => $split[5]); $usersLoggedIn[$split[0]][] = array('port' => $split[1], 'lastLogin' => strtotime($split[2] . ' ' . $split[3] . ' ' . $split[4]), 'lastLoginAddress' => $split[5]);
} }
foreach ($dataAllUsers as $row) foreach ($dataAllUsers as $row) {
{
$userLastLoginInformation = ''; $userLastLoginInformation = '';
$userLastLoginInformation = shell_exec('/usr/bin/last -i -f /var/log/wtmp | grep -m 1 "^' . $row . ' "'); $userLastLoginInformation = shell_exec('/usr/bin/last -i -f /var/log/wtmp | grep -m 1 "^' . $row . ' "');
if ($userLastLoginInformation == '') if ($userLastLoginInformation == '')
$userLastLoginInformation = shell_exec('/usr/bin/last -i -f /var/log/wtmp.1 | grep -m 1 "^' . $row . ' "'); $userLastLoginInformation = shell_exec('/usr/bin/last -i -f /var/log/wtmp.1 | grep -m 1 "^' . $row . ' "');
if ($userLastLoginInformation != '') if ($userLastLoginInformation != '') {
{
$split = preg_split('/\s+/i', $userLastLoginInformation); $split = preg_split('/\s+/i', $userLastLoginInformation);
$usersAll[] = array('username' => $row, $usersAll[] = array(
'username' => $row,
'userId' => exec('id -u ' . escapeshellarg($row)), 'userId' => exec('id -u ' . escapeshellarg($row)),
'groupId' => exec('id -g ' . escapeshellarg($row)), 'groupId' => exec('id -g ' . escapeshellarg($row)),
'port' => $split[1], 'port' => $split[1],
'lastLoginAddress' => $split[2], 'lastLoginAddress' => $split[2],
'lastLogin' => strtotime($split[4] . ' ' . $split[5] . ' ' . $split[6]), 'lastLogin' => strtotime($split[4] . ' ' . $split[5] . ' ' . $split[6]),
'isLoggedIn' => isset($usersLoggedIn[$row]) ? true : false, 'isLoggedIn' => isset($usersLoggedIn[$row]) ? true : false,
'loggedIn' => isset($usersLoggedIn[$row]) ? $usersLoggedIn[$row] : array()); 'loggedIn' => isset($usersLoggedIn[$row]) ? $usersLoggedIn[$row] : array()
} );
else } else {
{ $usersAll[] = array(
$usersAll[] = array('username' => $row, 'username' => $row,
'userId' => exec('id -u ' . escapeshellarg($row)), 'userId' => exec('id -u ' . escapeshellarg($row)),
'groupId' => exec('id -g ' . escapeshellarg($row)), 'groupId' => exec('id -g ' . escapeshellarg($row)),
'port' => '', 'port' => '',
'lastLoginAddress' => '', 'lastLoginAddress' => '',
'lastLogin' => 0, 'lastLogin' => 0,
'isLoggedIn' => isset($usersLoggedIn[$row]) ? true : false); 'isLoggedIn' => isset($usersLoggedIn[$row]) ? true : false
);
} }
} }
@@ -445,4 +431,3 @@ function rpi_getAllUsers()
return $usersAll; return $usersAll;
} }
?>

View File

@@ -282,6 +282,17 @@ class StatisticBuilder
$this->suffix = isset($suffix) ? $suffix : NULL; $this->suffix = isset($suffix) ? $suffix : NULL;
$this->label = _t($statistic['label']); $this->label = _t($statistic['label']);
$this->unit = $statistic['unit']; $this->unit = $statistic['unit'];
if ($statistic['unit'] == 'MB') {
$log = new LogStatistic();
$log->setFile(LOG_PATH . $this->raw . '.csv');
$lastValue = $log->getLast();
$log->close();
if ($lastValue && $lastValue[1] > 999999999) {
$this->unit = 'GB';
$this->label = 'GB';
}
}
$this->cycle = $statistic['cycle']; $this->cycle = $statistic['cycle'];
$this->limits = $statistic['limits']; $this->limits = $statistic['limits'];

View File

@@ -84,7 +84,7 @@ $statisticConfig = array(
'fix' => true 'fix' => true
), ),
'max' => array( 'max' => array(
'value' => 1200, 'value' => 2100,
'use' => 'fix', 'use' => 'fix',
'fix' => true 'fix' => true
) )

View File

@@ -25,10 +25,8 @@ function calculateEmptyRows(&$arr, $columns, $firstTime, $lastTime, $cycle)
{ {
$buffer = array(); $buffer = array();
if ($lastTime < (time() - ($cycle * 60))) if ($lastTime < (time() - ($cycle * 60))) {
{ for ($i = 0; $i < ceil(((time() - ($cycle * 60)) - $lastTime) / ($cycle * 60)); $i++) {
for ($i = 0; $i < ceil(((time() - ($cycle * 60)) - $lastTime) / ($cycle * 60)); $i++)
{
$dummy = array($lastTime + (($i + 1) * ($cycle * 60))); $dummy = array($lastTime + (($i + 1) * ($cycle * 60)));
for ($j = 1; $j < count($columns); $j++) for ($j = 1; $j < count($columns); $j++)
@@ -41,10 +39,8 @@ function calculateEmptyRows(&$arr, $columns, $firstTime, $lastTime, $cycle)
$buffer = array(); $buffer = array();
if (isset($arr['rows']) && count($arr['rows']) < (604800 / ($cycle * 60))) if (isset($arr['rows']) && count($arr['rows']) < (604800 / ($cycle * 60))) {
{ for ($i = 0; $i < ((604800 / ($cycle * 60)) - count($arr['rows'])); $i++) {
for ($i = 0; $i < ((604800 / ($cycle * 60)) - count($arr['rows'])); $i++)
{
$dummy = array($firstTime - (($i + 1) * ($cycle * 60))); $dummy = array($firstTime - (($i + 1) * ($cycle * 60)));
for ($j = 1; $j < count($columns); $j++) for ($j = 1; $j < count($columns); $j++)
@@ -63,19 +59,16 @@ function getRowsFromLog(&$arr, &$info, $log, $columns, $cycle)
$leapyear = -1; $leapyear = -1;
$leapyearSkip = 0; $leapyearSkip = 0;
foreach ($log as $row) foreach ($log as $row) {
{
foreach ($row as &$data) foreach ($row as &$data)
$data = trim($data); $data = trim($data);
if ($leapyearSkip != 0) if ($leapyearSkip != 0) {
{
$leapyearSkip--; $leapyearSkip--;
continue; continue;
} }
if ($leapyear != -1 && $leapyear > date('I', $row[0])) if ($leapyear != -1 && $leapyear > date('I', $row[0])) {
{
$leapyear = 0; $leapyear = 0;
$leapyearSkip = (60 / $cycle) - 1; $leapyearSkip = (60 / $cycle) - 1;
continue; continue;
@@ -83,11 +76,9 @@ function getRowsFromLog(&$arr, &$info, $log, $columns, $cycle)
$leapyear = date('I', $row[0]); $leapyear = date('I', $row[0]);
if ($lastTime !== NULL && ($lastTime + ($cycle * 60) + 100) < $row[0]) if ($lastTime !== NULL && ($lastTime + ($cycle * 60) + 100) < $row[0]) {
{
$skipped = round(($row[0] - ($lastTime + ($cycle * 60))) / ($cycle * 60)); $skipped = round(($row[0] - ($lastTime + ($cycle * 60))) / ($cycle * 60));
for ($i = 0; $i < $skipped; $i++) for ($i = 0; $i < $skipped; $i++) {
{
$dummy = array($lastTime + (($i + 1) * ($cycle * 60))); $dummy = array($lastTime + (($i + 1) * ($cycle * 60)));
for ($j = 1; $j < count($columns); $j++) for ($j = 1; $j < count($columns); $j++)
@@ -99,13 +90,15 @@ function getRowsFromLog(&$arr, &$info, $log, $columns, $cycle)
$dummy = array((int) $row[0]); $dummy = array((int) $row[0]);
for ($i = 1; $i < count($columns); $i++) for ($i = 1; $i < count($columns); $i++) {
{
$rowFloat = 0; $rowFloat = 0;
if (isset($columns[$i]['division'])) if (isset($columns[$i]['division'])) {
if ((float)$log[count($log) - 1][1] > 999999999)
$rowFloat = (float) round(str_replace(array("\n", ','), array('', '.'), $row[$i]) / $columns[$i]['division'] / 1024, 2);
else
$rowFloat = (float) round(str_replace(array("\n", ','), array('', '.'), $row[$i]) / $columns[$i]['division'], 2); $rowFloat = (float) round(str_replace(array("\n", ','), array('', '.'), $row[$i]) / $columns[$i]['division'], 2);
elseif (isset($columns[$i]['multiplication'])) } elseif (isset($columns[$i]['multiplication']))
$rowFloat = (float) round(str_replace(array("\n", ','), array('', '.'), $row[$i]) * $columns[$i]['multiplication'], 2); $rowFloat = (float) round(str_replace(array("\n", ','), array('', '.'), $row[$i]) * $columns[$i]['multiplication'], 2);
else else
$rowFloat = (float) $row[$i]; $rowFloat = (float) $row[$i];
@@ -133,8 +126,7 @@ function getRowsFromLog(&$arr, &$info, $log, $columns, $cycle)
function convertForGoogleChart($rows) function convertForGoogleChart($rows)
{ {
foreach ($rows as $index => $row) foreach ($rows as $index => $row) {
{
$dummy = array('c' => array(array('v' => 'Date(' . date('Y,' . (date('m', $row[0]) - 1) . ',d,H,i', $row[0]) . ')'))); $dummy = array('c' => array(array('v' => 'Date(' . date('Y,' . (date('m', $row[0]) - 1) . ',d,H,i', $row[0]) . ')')));
unset($row[0]); unset($row[0]);
@@ -147,4 +139,3 @@ function convertForGoogleChart($rows)
return $rows; return $rows;
} }
?>

View File

@@ -253,7 +253,8 @@ class UpdateController
if (!class_exists('cURL')) if (!class_exists('cURL'))
(include LIBRARY_PATH.'curl/curl.class.php'); (include LIBRARY_PATH.'curl/curl.class.php');
$curl = new cURL($this->updateDownloadURL.'&'.http_build_query(array('file' => $version->getFilename())));
$curl = new cURL($this->updateDownloadURL . $version->getFilename());
$curlStatus = $curl->downloadFile(UPDATE_PATH.'update.zip'); $curlStatus = $curl->downloadFile(UPDATE_PATH.'update.zip');
if (!is_bool($curlStatus)) if (!is_bool($curlStatus))
@@ -268,7 +269,7 @@ class UpdateController
return $curl->getStatusCode(); return $curl->getStatusCode();
} }
if (md5_file(UPDATE_PATH.'update.zip') !== $version->getChecksum()) if (hash_file('sha256', UPDATE_PATH.'update.zip') !== $version->getChecksum())
{ {
unlink(UPDATE_PATH.'update.zip'); unlink(UPDATE_PATH.'update.zip');
return 1; return 1;
@@ -439,4 +440,3 @@ class Update
} }
} }
?>