Add device menu

This commit is contained in:
Haitem
2020-08-31 21:23:23 +02:00
parent 0efbda0583
commit 6b0ab2d0ba
14 changed files with 4984 additions and 398 deletions

View File

@@ -18,6 +18,7 @@ $router->any('/login', 'Login');
$router->any('/logout', 'Logout');
$router->any('/automation', 'Automation');
$router->any('/setting', 'Setting');
$router->any('/device', 'Device');
$router->any('/ajax', 'Ajax');
$router->any('/oauth', 'Oauth');
@@ -35,7 +36,7 @@ $router->get('/api/widgets/{widgetId}/detail', 'WidgetApi@detail');
//cron
$router->post('/cron/clean', 'CronApi@clean');
#$router->post('/cron/fetch', 'CronApi@fetch');
$router->post('/cron/fetch', 'CronApi@fetch');
//Google Home - API
$router->any('/api/HA/auth', 'Oauth');

View File

@@ -9,13 +9,23 @@ class UpdatesApi {
readfile($path);
}
private function validateHeader($headers){
if (
isset($_SERVER['HTTP_X_ESP8266_STA_MAC']) &&
isset($_SERVER['HTTP_X_ESP8266_SKETCH_MD5'])
) {
return true;
}
return false;
}
public function default(){
header('Content-type: text/plain; charset=utf8', true);
$logManager = new LogManager('../logs/ota/'. date("Y-m-d").'.log');
$logManager->setLevel(LOGLEVEL);
$logManager->write("[Updater] Client Connected", LogRecordTypes::INFO);
header('Content-type: text/plain; charset=utf8', true);
//Filtrování IP adress
if (DEBUGMOD != 1) {
if (!in_array($_SERVER['REMOTE_ADDR'], HOMEIP)) {

View File

@@ -0,0 +1,21 @@
<?php
if (!empty ($_POST)){
if (!empty ($_FILES['deviceFirmware']) && !empty ($_FILES['deviceFirmware']['tmp_name']) && !empty ($_POST['deviceId'])) {
$deviceManager = new DeviceManager ();
$file = $_FILES['deviceFirmware'];
$deviceMac = $deviceManager->getDeviceById ($_POST['deviceId'])['mac'];
$fileName = (!empty ($deviceMac) ? str_replace (":", "", $deviceMac) . ".bin" : "");
if ($fileName != "" && file_exists ("../app/updater/" . $fileName)) {
unlink("../app/updater/" . $fileName);
}
if ($fileName != "") {
copy ($file['tmp_name'], "../app/updater/" . $fileName);
} else {
}
}
if (isset ($_POST['deviceCommand']) && !empty ($_POST['deviceId'])) {
$deviceManager = new DeviceManager ();
$deviceManager->edit ($_POST['deviceId'], array ('command' => $_POST['deviceCommand']));
}
}

42
app/views/Device.php Normal file
View File

@@ -0,0 +1,42 @@
<?php
class Device extends Template
{
function __construct () {
$userManager = new UserManager ();
$deviceManager = new DeviceManager ();
$langMng = new LanguageManager ('en');
if (!$userManager->isLogin ()) {
header ('Location: ' . BASEURL . 'device');
}
$template = new Template ('device');
$template->prepare ('title', $langMng->get ("m_devices"));
$devices = $deviceManager->getAllDevices ();
foreach ($devices as $key => $device) {
$localBinary = "../updater/" . str_replace (':', '', $device['mac']) . ".bin";
if (file_exists ($localBinary)) {
$hash = md5_file ($localBinary);
if ($hash == $device['firmware_hash']) {
$devices[$key]['firmware_hash'] = "true";
} else {
$devices[$key]['firmware_hash'] = "need";
}
} else {
$devices[$key]['firmware_hash'] = "false";
}
}
$template->prepare ('baseDir', BASEDIR);
$template->prepare ('debugMod', DEBUGMOD);
$template->prepare ('logToLiveTime', LOGTIMOUT);
$template->prepare ('devices', $devices);
$template->prepare ('langMng', $langMng);
$template->render ();
}
}

View File

@@ -0,0 +1,79 @@
<!DOCTYPE html>
<html lang="en">
<head>
<?php
$partial = new Partial('head');
$partial->prepare('baseDir', $BASEDIR);
$partial->render();
?>
<title><?php echo $TITLE ?></title>
</head>
<body class="no-transitions">
<div class="row no-gutters main">
<div class="col-md-3 d-sm-none"></div>
<div class="col-md-3 nav-container">
<?php
$partial = new Partial('menu');
$partial->prepare('item', 'device');
$partial->prepare('langMng',$LANGMNG);
$partial->prepare('debugMod',$DEBUGMOD);
$partial->render();
?>
</div>
<div class="col-md-9 main-body">
<table>
<thead>
<tr>
<th>Icon</th>
<th>Name</th>
<th>Firmware</th>
<th>Mac</th>
<th>IP Address</th>
<th>Action</th>
</tr>
</thead>
<tbody>
<?php if (!empty ($DEVICES)): ?>
<?php foreach ($DEVICES as $device): ?>
<tr>
<td><i class="fa">&#x<?php echo (!empty ($device['icon']) ? $device['icon'] : ""); ?></i></td>
<td><?php echo (!empty ($device['name']) ? $device['name'] : ""); ?></td>
<td>
<?php if (!empty ($device['mac'])): ?>
<i
class="fa <?php echo (!empty ($device['firmware_hash']) ? ($device['firmware_hash'] != "need" ? "fa-check-circle" : "fa-circle") : "fa-times-circle"); ?>"
style="float: center; <?php echo (!empty ($device['firmware_hash']) ? ($device['firmware_hash'] != "need" ? "color: green;" : "color: yellow;") : "color: red;"); ?>"
></i>
<button class="fa custom-file-input" type="button" onclick="document.getElementById('deviceFirmware').click();" >&#xf0ee;</button>
<form style="display: none;" method="post" action="" enctype="multipart/form-data">
<input type="hidden" name="deviceId" value="<?php echo (!empty ($device['device_id']) ? $device['device_id'] : ""); ?>">
<input type="file" onchange="this.form.submit();" name="deviceFirmware" id="deviceFirmware" value="">
</form>
<?php endif; ?>
<div type="float: clear;"></div>
</td>
<td><?php echo (!empty ($device['mac']) ? $device['mac'] : ""); ?></td>
<td><?php echo (!empty ($device['ip_address']) ? $device['ip_address'] : ""); ?></td>
<td>
<form method="post" action="">
<input type="hidden" name="deviceId" value="<?php echo (!empty ($device['device_id']) ? $device['device_id'] : ""); ?>">
<button class="fa custom-file-input" type="submit" name="deviceCommand" value="reset" title="Reset">&#xf01e;</button>
<button class="fa custom-file-input" type="submit" name="deviceCommand" value="config" title="Config">&#xf013;</button>
<div style="float: clear;"></div>
</form>
</td>
</tr>
<?php endforeach; ?>
<?php endif; ?>
<tbody>
</table>
</div>
<?php
$partial = new Partial('footer');
$partial->prepare('baseDir', BASEDIR);
$partial->render();
//TODO js do main.js
?>
</body>
</html>

View File

@@ -1,6 +1,11 @@
<div class="nav">
<?php
$menuItems = [
'fa-podcast' => [
'slug' => 'device',
'lngKey' => 'devices',
'path' => 'device',
],
'fa-wrench' => [
'slug' => 'setting',
'lngKey' => 'settings',