From 0e3f571a0df5033e2d112d489e0c57fa53c70ff2 Mon Sep 17 00:00:00 2001 From: GamerClassN7 Date: Wed, 18 Nov 2020 21:40:13 +0100 Subject: [PATCH] Device Sorting Fix --- app/Routes.php | 1 + app/models/managers/DeviceManager.php | 4 +- app/views/Device.php | 159 ++++++++++---------------- app/views/templates/device.phtml | 21 ++-- 4 files changed, 77 insertions(+), 108 deletions(-) diff --git a/app/Routes.php b/app/Routes.php index 5256e35..ed7ef79 100644 --- a/app/Routes.php +++ b/app/Routes.php @@ -19,6 +19,7 @@ $router->any('/logout', 'Logout'); $router->any('/automation', 'Automation'); $router->any('/setting', 'Setting'); $router->any('/device', 'Device'); +$router->get('/device/{sortBy}/{sortType}', 'Device'); $router->any('/plugins', 'Plugins'); $router->any('/ajax', 'Ajax'); $router->any('/oauth', 'Oauth'); diff --git a/app/models/managers/DeviceManager.php b/app/models/managers/DeviceManager.php index ed976d1..f8c5ce5 100644 --- a/app/models/managers/DeviceManager.php +++ b/app/models/managers/DeviceManager.php @@ -3,10 +3,12 @@ class DeviceManager{ public static $devices; static function getAllDevices () { - return Db::loadAll ("SELECT devices.* FROM devices + return Db::loadAll ("SELECT * FROM devices WHERE approved != ?", Array(2)); } + + static function getAllDevicesInRoom ($roomId = "") { return Db::loadAll ("SELECT * FROM devices WHERE room_id = ? AND approved != ?", Array($roomId, 2)); } diff --git a/app/views/Device.php b/app/views/Device.php index 502613c..4d0bba8 100644 --- a/app/views/Device.php +++ b/app/views/Device.php @@ -3,91 +3,69 @@ class Device extends Template { - function __construct () { - $userManager = new UserManager (); - $deviceManager = new DeviceManager (); - $subDeviceManager = new SubDeviceManager (); - $recordManager = new RecordManager (); - $roomManager = new RoomManager (); - $langMng = new LanguageManager ('en'); + function __construct($sortBy = null, $sortType = null) + { + $userManager = new UserManager(); + $deviceManager = new DeviceManager(); + $subDeviceManager = new SubDeviceManager(); + $recordManager = new RecordManager(); + $roomManager = new RoomManager(); + $langMng = new LanguageManager('en'); - if (!$userManager->isLogin()){ + if (!$userManager->isLogin()) { header('Location: ' . BASEURL . 'login'); } - $template = new Template ('device'); - $template->prepare ('title', $langMng->get ("m_devices")); + $template = new Template('device'); + $template->prepare('title', $langMng->get("m_devices")); - if (!empty ($_GET['sort']) && !empty ($_SESSION['sort']) && $_SESSION['sort'] != $_GET['sort']) { - unset($_SESSION['sort']); - header('Location: device?sort=' . $_GET["sort"] . "&sortType=ASC"); - die(); + $sortWordBook = [ + "id" => "device_id", + "name" => "name", + "room" => "room_id", + "ip" => "ip_address", + "mac" => "mac", + "token" => "token", + "signal" => "signal", + "firmware" => "firmware_hash", + "icon" => "icon" + ]; + + $sortIcons = [ + "ASC" => "", + "DESC" => "", + ]; + + $nextSort = [ + "ASC" => "DESC", + "DESC" => "ASC", + ]; + + $devices = $deviceManager->getAllDevices(); + + if (empty($sortBy) && empty($sortType)) { + $sortBy = "id"; + $sortType = "DESC"; } - if (isset ($_GET['sortType'])) { - switch ($_GET['sortType']) { - case "DESC": - $sortType = ""; - $sortIcon = ""; - break; - case "ASC": - $sortType = "DESC"; - $sortIcon = ""; - break; - case "": - unset($_GET["sort"]); - unset($_GET["sortType"]); - header('Location: device'); - die(); - break; - } - } else { - $sortType = "ASC"; - } - - if (!empty ($_GET['sort']) && !empty ($_GET['sortType'])) { - $template->prepare ('sortIcon', array ($_GET['sort'] => $sortIcon)); - $actualSort = "devices.device_id"; - switch ($_GET['sort']) { - case "name": - $actualSort = "devices.name"; - break; - case "room": - $actualSort = "rooms.name"; - break; - case "ip": - $actualSort = "devices.ip_address"; - break; - case "mac": - $actualSort = "devices.mac"; - break; - case "token": - $actualSort = "devices.token"; - break; - } - $devices = $deviceManager->getAllDevicesSorted ($actualSort, $_GET['sortType']); - } else { - $devices = $deviceManager->getAllDevices (); - } - - if (!empty ($_GET['sort'])) { - $_SESSION['sort'] = $_GET['sort']; - } + $template->prepare('sortIcon', [$sortBy => $sortIcons[$sortType]]); foreach ($devices as $key => $device) { - $subdevice = $subDeviceManager->getSubDeviceByMasterAndType ($device['device_id'], "wifi"); - if (!empty ($subdevice['subdevice_id'])) { + //Signal Stenght + $subdevice = $subDeviceManager->getSubDeviceByMasterAndType($device['device_id'], "wifi"); + $devices[$key]['signal'] = ""; + if (!empty($subdevice['subdevice_id'])) { $record = $recordManager->getLastRecord($subdevice['subdevice_id']); - if (!empty ($record)) { + if (!empty($record)) { $devices[$key]['signal'] = $record['value'] . " " . $subdevice['unit']; - } + } } - if (empty ($devices[$key]['signal'])) { - $devices[$key]['signal'] = ""; - } - $localBinary = "../updater/" . str_replace (':', '', $device['mac']) . ".bin"; - if (file_exists ($localBinary)) { - $hash = md5_file ($localBinary); + + //Firmware Status + $localBinary = "../updater/" . str_replace(':', '', $device['mac']) . ".bin"; + $devices[$key]['firmware_hash'] = ""; + if (file_exists($localBinary)) { + $hash = md5_file($localBinary); if ($hash == $device['firmware_hash']) { $devices[$key]['firmware_hash'] = "true"; } else { @@ -96,35 +74,22 @@ class Device extends Template } else { $devices[$key]['firmware_hash'] = "false"; } - if (empty ($device['mac'])) { - $devices[$key]['firmware_hash'] = ""; - } } - if (!empty ($_GET['sort']) && !empty ($_GET['sortType']) && $_GET['sort'] == "firmware") { - if ($_GET['sortType'] == "DESC") { - return Utilities::sortArrayByKey($devices, 'firmware_hash', "desc"); - } else if ($_GET['sortType'] == "ASC") { - return Utilities::sortArrayByKey($devices, 'firmware_hash', "asc"); - } - } else if (!empty ($_GET['sort']) && !empty ($_GET['sortType']) && $_GET['sort'] == "signal") { - if ($_GET['sortType'] == "DESC") { - return Utilities::sortArrayByKey($devices, 'signal', "desc"); - } else if ($_GET['sortType'] == "ASC") { - return Utilities::sortArrayByKey($devices, 'signal', "asc"); - } - } + $devices = Utilities::sortArrayByKey($devices, $sortWordBook[$sortBy], strtolower($sortType)); $rooms = $roomManager->getAllRooms(); - $template->prepare ('baseDir', BASEDIR); - $template->prepare ('debugMod', DEBUGMOD); - $template->prepare ('logToLiveTime', LOGTIMOUT); - $template->prepare ('rooms', $rooms); - $template->prepare ('sortType', $sortType); - $template->prepare ('devices', $devices); - $template->prepare ('langMng', $langMng); + $template->prepare('baseUrl', BASEURL); + $template->prepare('baseDir', BASEDIR); - $template->render (); + $template->prepare('debugMod', DEBUGMOD); + $template->prepare('logToLiveTime', LOGTIMOUT); + $template->prepare('rooms', $rooms); + $template->prepare('sortType', $nextSort[$sortType]); + $template->prepare('devices', $devices); + $template->prepare('langMng', $langMng); + + $template->render(); } } diff --git a/app/views/templates/device.phtml b/app/views/templates/device.phtml index 789b7c4..5499fe5 100644 --- a/app/views/templates/device.phtml +++ b/app/views/templates/device.phtml @@ -5,6 +5,7 @@ prepare('baseDir', $BASEDIR); + $partial->prepare('baseUrl', $BASEURL); $partial->render(); ?> <?php echo $TITLE ?> @@ -25,15 +26,15 @@
- - - - - + + + + + - +
#NameRoomSignalFirmware#NameRoomSignalFirmware - IP Address
- (Mac)
- Token + IP Address
+ (Mac)
+ Token
Action
@@ -45,7 +46,7 @@
&#x"> "> @@ -87,12 +88,12 @@ ?> - "> +