diff --git a/app/models/managers/DeviceManager.php b/app/models/managers/DeviceManager.php index 53255f8..048dc94 100644 --- a/app/models/managers/DeviceManager.php +++ b/app/models/managers/DeviceManager.php @@ -26,6 +26,10 @@ class DeviceManager{ return Db::loadOne("SELECT * FROM devices WHERE device_id = ?", array($deviceId)); } + static function getAllDevicesSorted ($sort, $sortType = "ASC") { + return Db::loadAll ("SELECT devices.* FROM devices LEFT JOIN rooms ON devices.room_id = rooms.room_id WHERE devices.approved != ? ORDER BY $sort $sortType", Array(2)); + } + public static function create ($name, $token) { $defaultRoom = RoomManager::getDefaultRoomId(); $device = array ( diff --git a/app/views/Device.php b/app/views/Device.php index 203e7c7..0a88aa7 100644 --- a/app/views/Device.php +++ b/app/views/Device.php @@ -16,7 +16,61 @@ class Device extends Template $template = new Template ('device'); $template->prepare ('title', $langMng->get ("m_devices")); - $devices = $deviceManager->getAllDevices (); + if (!empty ($_GET['sort']) && !empty ($_SESSION['sort']) && $_SESSION['sort'] != $_GET['sort']) { + unset($_SESSION['sort']); + header('Location: device?sort=' . $_GET["sort"] . "&sortType=ASC"); + die(); + } + + 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']; + } foreach ($devices as $key => $device) { $localBinary = "../updater/" . str_replace (':', '', $device['mac']) . ".bin"; @@ -30,6 +84,21 @@ 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") { + usort($devices, function($a, $b) { + return $a['firmware_hash'] <=> $b['firmware_hash']; + }); + } else if ($_GET['sortType'] == "ASC") { + usort($devices, function($a, $b) { + return $b['firmware_hash'] <=> $a['firmware_hash']; + }); + } } $rooms = $roomManager->getAllRooms(); @@ -38,6 +107,7 @@ class Device extends Template $template->prepare ('debugMod', DEBUGMOD); $template->prepare ('logToLiveTime', LOGTIMOUT); $template->prepare ('rooms', $rooms); + $template->prepare ('sortType', $sortType); $template->prepare ('devices', $devices); $template->prepare ('langMng', $langMng); diff --git a/app/views/templates/device.phtml b/app/views/templates/device.phtml index db37436..078826d 100644 --- a/app/views/templates/device.phtml +++ b/app/views/templates/device.phtml @@ -22,92 +22,92 @@
- - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + - - - - - - - + + + + + "> + + + +
+ + + + + +
#NameRoomFirmwareIP Address
(Mac)
Token
Action -
- -
-
-
&#x -
- "> - "> -
-
+
#NameRoomFirmware + IP Address
+ (Mac)
+ Token +
Action +
+ +
+
+
&#x
"> - "> +
+
+
+ "> + +
+
+ $room) { - echo ''; + $icon = "fa-circle"; + $color = "yellow"; + if (!empty($device['firmware_hash'])) { + if ($device['firmware_hash'] == "true") { + $icon = "fa-check-circle"; + $color = "green"; + } else if ($device['firmware_hash'] == "need") { + $icon = "fa-arrow-circle-up"; + $color = "#6495ED"; + } else { + $icon = "fa-times-circle"; + $color = "red"; } } ?> - - - - - - - - -
- "> - -
- -
-

-
-
- -
- "> - - -
-
- -

+
+
+ +
+ "> + + +
+
+ +
@@ -117,6 +117,12 @@ $partial->render(); //TODO js do main.js ?> +