From bd2b7b5d5e18c59650dae0234382846c109cb1c2 Mon Sep 17 00:00:00 2001 From: JonatanRek Date: Wed, 9 Oct 2019 19:23:20 +0200 Subject: [PATCH] Ajax Refactor/Oprimalization --- app/views/Ajax.php | 245 +++++++++++++++++---------------------------- 1 file changed, 94 insertions(+), 151 deletions(-) diff --git a/app/views/Ajax.php b/app/views/Ajax.php index ea4ac51..52f6189 100644 --- a/app/views/Ajax.php +++ b/app/views/Ajax.php @@ -21,165 +21,108 @@ class Ajax extends Template header('Location: ./'); } - if (isset($_POST['subDevice_id'])){ + if ( + isset($_POST['automation_id']) && + $_POST['automation_id'] != '' && + isset($_POST['action']) && + $_POST['action'] != '' + ) { + $automationId = $_POST['automation_id']; + //Automation Editation of Automations from Buttons/Details + switch ($_POST['action']) { + case 'delete': + AutomationManager::remove($automationId); + die(); + break; + + case 'deactive': + AutomationManager::deactive($automationId); + die(); + break; + + default: + echo 'no action detected'; + break; + } + } else if ( + isset($_POST['subDevice_id']) && + $_POST['subDevice_id'] != '' && + isset($_POST['action']) && + $_POST['action'] != '' + ) { $subDeviceId = $_POST['subDevice_id']; - if (isset($_POST['lastRecord'])){ + switch ($_POST['action']) { + case 'chart': + $period = $_POST['period']; + $groupBy = $_POST['group']; + header('Content-Type: application/json'); + $graphData = ChartManager::generateChartData($subDeviceId, $period, $groupBy); + echo Utilities::generateGraphJson($graphData['graphType'], $graphData['graphData'], $graphData['graphRange']); + die(); + break; + + //Change On/Off Device State of Device Button + case 'change': + $subDeviceData = SubDeviceManager::getSubDevice($subDeviceId); + $deviceId = SubDeviceManager::getSubDeviceMaster($subDeviceId)['device_id']; + if ($subDeviceData['type'] == 'on/off'){ + $lastValue = RecordManager::getLastRecord($subDeviceData['subdevice_id'])['value']; + RecordManager::create($deviceId, 'on/off', !$lastValue); + echo ($lastValue ? 'ON' : 'OFF'); + } + die(); + break; + + //Waitin for execution of Changet walue for Device Button + case 'executed': echo RecordManager::getLastRecord($subDeviceId)['execuded']; die(); + break; + + default: + echo 'no action detected'; + break; } - $subDeviceData = SubDeviceManager::getSubDevice($subDeviceId); - $deviceId = SubDeviceManager::getSubDeviceMaster($subDeviceId)['device_id']; - if ($subDeviceData['type'] == 'on/off'){ - //TODO: Pridelat kontrolu změnit stav pouze pokud se poslední [executed] stav != novému - if (RecordManager::getLastRecord($subDeviceData['subdevice_id'])['value'] == 0){ - RecordManager::create($deviceId, 'on/off', 1); - echo 'ON'; - }else{ - RecordManager::create($deviceId, 'on/off', 0); - echo 'OFF'; - } - } - - } else if (isset($_POST['automation_id'])){ - $automationId = $_POST['automation_id']; - if (isset($_POST['action']) && $_POST['action'] == 'delete') { - AutomationManager::remove($automationId); - }else { - AutomationManager::deactive($automationId); - } - } else if (isset($_POST['subDevice']) && isset($_POST['action']) && $_POST['action'] == "chart") { - //TODO lepe rozstrukturovat - $subDeviceId = $_POST['subDevice']; - $period = $_POST['period']; - $groupBy = $_POST['group']; - - $subDevice = SubDeviceManager::getSubDevice($subDeviceId); - $records = RecordManager::getAllRecordForGraph($subDeviceId, $period, $groupBy); - - $array = array_column($records, 'value'); - $arrayTime = array_column($records, 'time'); - $output = []; - - foreach ($array as $key => $value) { - $output[$key]['y'] = $value; - if ($subDevice['type'] == 'light'){ - if ($value > 810){ - $output[$key]['y'] = 1; - } else { - $output[$key]['y'] = 0; - } - } - $timeStamp = new DateTime($arrayTime[$key]); - $output[$key]['t'] = $timeStamp->format("Y-m-d") . 'T' . $timeStamp->format("H:i:s") . 'Z'; - } - - $data = json_encode($output); - $data = $output; - $arrayTimeStamps = array_column($records, 'time'); - foreach ($arrayTimeStamps as $key => $value) { - $arrayTimeStamps[$key] = (new DateTime($value))->format(TIMEFORMAT); - } - - $labels = json_encode($arrayTimeStamps); - $range = RANGES[$subDevice['type']]; - $graphType = $range['graph']; - - header('Content-Type: application/json'); - - echo Utilities::generateGraphJson($range['graph'], $data, $range); - die(); - } else if (isset($_POST['action']) && $_POST['action'] == "getState") { - //State Update - $roomsData = RoomManager::getAllRooms(); - $subDevices = []; - foreach ($roomsData as $roomKey => $roomsData) { - $devicesData = DeviceManager::getAllDevicesInRoom($roomsData['room_id']); - foreach ($devicesData as $deviceKey => $deviceData) { - $subDevicesData = SubDeviceManager::getAllSubDevices($deviceData['device_id']); - foreach ($subDevicesData as $subDeviceKey => $subDeviceData) { - $lastRecord = RecordManager::getLastRecord($subDeviceData['subdevice_id']); - $parsedValue = round($lastRecord['value']); - //TODO: Předelat na switch snažší přidávání - /*Value Parsing*/ - if ($subDeviceData['type'] == "on/off") { - $parsedValue = ($parsedValue == 1 ? 'ON' : 'OFF'); - } - if ($subDeviceData['type'] == "light") { - $replacementTrue = 'Light'; - $replacementFalse = 'Dark'; - if ($parsedValue != 1){ - //Analog Reading - $parsedValue = ($parsedValue <= 810 ? $replacementTrue : $replacementFalse); - } else { - //Digital Reading - $parsedValue = ($parsedValue == 0 ? $replacementTrue : $replacementFalse); - } - } - if ($subDeviceData['type'] == "door") { - $replacementTrue = 'Closed'; - $replacementFalse = 'Opened'; - $parsedValue = ($parsedValue == 1 ? $replacementTrue : $replacementFalse); - } - $subDevices[$subDeviceData['subdevice_id']] = [ - 'value' => $parsedValue .$subDeviceData['unit'], - 'time' => $lastRecord['time'], - ]; - } - } - } - echo json_encode($subDevices); - die(); - } else if (isset($_POST['scene_id'])) { + } else if ( + isset($_POST['scene_id']) && + $_POST['scene_id'] != '' && + isset($_POST['action']) && + $_POST['action'] != '' + ) { $sceneId = $_POST['scene_id']; - if (isset($_POST['action']) && $_POST['action'] == 'delete') { + switch ($_POST['action']) { + case 'delete': SceneManager::delete($sceneId); - }else { + die(); + break; + + case 'execute': echo SceneManager::execScene($sceneId); + die(); + break; + + default: + echo 'no action detected'; + break; + } + } else if ( + isset($_POST['notification']) && + $_POST['notification'] != '' && + isset($_POST['action']) && + $_POST['action'] != '' + ) { + switch ($_POST['action']) { + //add suscription to database + case 'subscribe': + $subscriptionToken = $_POST['Token']; + NotificationManager::addSubscriber($_SESSION['user']['id'], $subscriptionToken); + die(); + break; + + default: + echo 'no action detected'; + break; } - } else if (isset($_POST['token'])) { - NotificationManager::addSubscriber($_SESSION['user']['id'], $_POST['token']); } - - die(); - } } - -/*$JSON = '{ -"type": "line", -"data": { -"labels": ' . $data . ', -"datasets": [{ -"data": ' . $data . ', -"backgroundColor": "#7522bf", -"lineTension": 0, -"radius": 5 -}] -}, -"options": { -"legend": { -"display": false -}, -"scales": { -"xAxes": [{ -"type": "time", -"time": { -"unit": "hour" -} -}], -"yAxes": [{ -"ticks": { -"min": ' . $range['min'] . ', -"max": ' . $range['max'] . ', -"steps": ' . $range['scale'] . ' -} -}] -}, -"tooltips": { -"enabled": false -}, -"hover": { -"mode": null -} -} -}';*/