diff --git a/app/controllers/deviceController.php b/app/controllers/deviceController.php index cb47edf..0958618 100644 --- a/app/controllers/deviceController.php +++ b/app/controllers/deviceController.php @@ -15,12 +15,18 @@ if (!empty ($_POST)){ } if (isset ($_POST['deviceCommand']) && !empty ($_POST['deviceId'])) { $deviceManager->edit ($_POST['deviceId'], array ('command' => $_POST['deviceCommand'])); - }else if (!empty ($_POST['deviceCommand'])) { + } else if (!empty ($_POST['deviceCommand'])) { $devices = $deviceManager->getAllDevices(); foreach ($devices as $key => $device) { $deviceManager->edit ($device['device_id'], array ('command' => $_POST['deviceCommand'])); } } + if (!empty ($_POST['deviceRoomId']) && !empty ($_POST['deviceId'])) { + $deviceManager->edit ($_POST['deviceId'], array ('room_id' => $_POST['deviceRoomId'])); + } + if (!empty ($_POST['deviceName']) && !empty ($_POST['deviceId'])) { + $deviceManager->edit ($_POST['deviceId'], array ('name' => $_POST['deviceName'])); + } header('Location: ./device'); die(); } 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 0c5a6a8..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,11 +84,20 @@ class Device extends Template } else { $devices[$key]['firmware_hash'] = "false"; } + if (empty ($device['mac'])) { + $devices[$key]['firmware_hash'] = ""; + } + } - $wifi = SubDeviceManager::getSubDeviceByMaster($device['device_id'], 'wifi'); - if ($wifi) { - $signalStrenght = RecordManager::getLastRecordNotNull($wifi['subdevice_id']); - $devices[$key]['signal'] = (!$signalStrenght ? 0 : $signalStrenght['value']); + 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']; + }); } } @@ -44,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 910bc68..c22553a 100644 --- a/app/views/templates/device.phtml +++ b/app/views/templates/device.phtml @@ -22,41 +22,53 @@
- - - - - - - - - + + + + + + + + + + + + + + + + - - - - - - - - - - + - - - - - - + ?> + + + + + + "> + + + +
+ + + + + +
#NameSignalRoomFirmwareIP Address
(Mac)
Token
Action +
#NameRoomSignalFirmware + IP Address
+ (Mac)
+ Token +
Action +
+ +
+
+
&#x +
+ "> + "> +
+
- -
-
- -
&#x - "> + - - - + + + - - - - -
- "> - -
- -
-

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

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