182 lines
		
	
	
		
			5.4 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			182 lines
		
	
	
		
			5.4 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
<?php
 | 
						|
 | 
						|
 | 
						|
class Home extends Template
 | 
						|
{
 | 
						|
	function __construct()
 | 
						|
	{
 | 
						|
		global $userManager;
 | 
						|
		global $lang;
 | 
						|
 | 
						|
		if (!$userManager->isLogin()){
 | 
						|
			header('Location: ./login');
 | 
						|
		}
 | 
						|
 | 
						|
		$template = new Template('home');
 | 
						|
 | 
						|
		//users instantialize
 | 
						|
		$users = UserManager::getUsers();
 | 
						|
		$template->prepare('users', $users);
 | 
						|
 | 
						|
		//Users at home Info
 | 
						|
		$usersAtHome = '';
 | 
						|
		$i = 0;
 | 
						|
		foreach ($users as $user) {
 | 
						|
			$i++;
 | 
						|
			if ($user['at_home'] == 'true') {
 | 
						|
				$usersAtHome .= $user['username'];
 | 
						|
				if ($usersAtHome != "" && isset($users[$i + 1])){
 | 
						|
					$usersAtHome .= ', ';
 | 
						|
				}
 | 
						|
			}
 | 
						|
		}
 | 
						|
		$template->prepare('usersAtHome', $usersAtHome);
 | 
						|
 | 
						|
		$roomsItems = [];
 | 
						|
		$roomsData = RoomManager::getAllRooms();
 | 
						|
		foreach ($roomsData as $roomKey => $roomsData) {
 | 
						|
			$devices = [];
 | 
						|
			$devicesData = DeviceManager::getAllDevicesInRoom($roomsData['room_id']);
 | 
						|
			foreach ($devicesData as $deviceKey => $deviceData) {
 | 
						|
				$subDevices = [];
 | 
						|
				$subDevicesData = SubDeviceManager::getAllSubDevices($deviceData['device_id']);
 | 
						|
				foreach ($subDevicesData as $subDeviceKey => $subDeviceData) {
 | 
						|
 | 
						|
					$events = RecordManager::getLastRecord($subDeviceData['subdevice_id'], 5);
 | 
						|
 | 
						|
					$connectionError = false;
 | 
						|
					$parsedValue = "";
 | 
						|
					$niceTime = "";
 | 
						|
 | 
						|
 | 
						|
					if (sizeof($events) > 1) {
 | 
						|
 | 
						|
						//TODO: skontrolovat zdali se jedná o poslední (opravdu nejaktuálnější) záznam
 | 
						|
						$lastRecord = $events[0];
 | 
						|
 | 
						|
						$parsedValue = round($lastRecord['value']);
 | 
						|
 | 
						|
						/*Value Parsing*/
 | 
						|
						if ($subDeviceData['type'] == "on/off") {
 | 
						|
							$parsedValue = ($parsedValue == 1 ? 'ON' : 'OFF');
 | 
						|
						}
 | 
						|
 | 
						|
						if ($subDeviceData['type'] == "door") {
 | 
						|
							$replacementTrue = 'Closed';
 | 
						|
							$replacementFalse = 'Opened';
 | 
						|
							foreach ($events as $key => $value) {
 | 
						|
								$events[$key]['value'] = ($value['value'] == 1 ? $replacementTrue : $replacementFalse);
 | 
						|
							}
 | 
						|
							$parsedValue = ($parsedValue == 1 ? $replacementTrue : $replacementFalse);
 | 
						|
						}
 | 
						|
 | 
						|
						if ($subDeviceData['type'] == "light") {
 | 
						|
							$replacementTrue = 'Light';
 | 
						|
							$replacementFalse = 'Dark';
 | 
						|
							foreach ($events as $key => $value) {
 | 
						|
								if ($parsedValue != 1){
 | 
						|
									//Analog Reading
 | 
						|
									$events[$key]['value'] = ($value['value'] <= 810 ? $replacementTrue : $replacementFalse);
 | 
						|
								} else {
 | 
						|
									//Digital Reading
 | 
						|
									$events[$key]['value'] = ($value['value'] == 0 ? $replacementTrue : $replacementFalse);
 | 
						|
								}
 | 
						|
							}
 | 
						|
							if ($parsedValue != 1){
 | 
						|
								//Analog Reading
 | 
						|
								$parsedValue = ($parsedValue <= 810 ? $replacementTrue : $replacementFalse);
 | 
						|
							} else {
 | 
						|
								//Digital Reading
 | 
						|
								$parsedValue = ($parsedValue == 0 ? $replacementTrue : $replacementFalse);
 | 
						|
							}
 | 
						|
						}
 | 
						|
 | 
						|
						$date2 = new DateTime($lastRecord['time']);
 | 
						|
 | 
						|
						$niceTime = $this->ago($date2);
 | 
						|
 | 
						|
 | 
						|
						$startDate = date_create($lastRecord['time']);
 | 
						|
						$interval = $startDate->diff(new DateTime());
 | 
						|
						$hours   = $interval->format('%h');
 | 
						|
						$minutes = $interval->format('%i');
 | 
						|
						$lastSeen = ($hours * 60 + $minutes);
 | 
						|
 | 
						|
						if ($lastSeen > $deviceData['sleep_time'] && $subDeviceData['type'] != "on/off") {
 | 
						|
							$connectionError = true;
 | 
						|
						}
 | 
						|
					} else {
 | 
						|
						$connectionError = true;
 | 
						|
					}
 | 
						|
 | 
						|
					$subDevices[$subDeviceData['subdevice_id']] = [
 | 
						|
						'events'=> $events,
 | 
						|
						'type' => $subDeviceData['type'],
 | 
						|
						'unit' => $subDeviceData['unit'],
 | 
						|
						'comError' => $connectionError,
 | 
						|
						'lastRecort' =>  [
 | 
						|
							'value' => (empty($parsedValue) ? 0 : $parsedValue),
 | 
						|
							'time' => (empty($lastRecord['time']) ? "00:00" : $lastRecord['time']),
 | 
						|
							'niceTime' => (empty($niceTime) ? "00:00" : $niceTime),
 | 
						|
						],
 | 
						|
					];
 | 
						|
				}
 | 
						|
 | 
						|
				$permissionArray = json_decode($deviceData['permission']);
 | 
						|
 | 
						|
				$userIsDeviceAdmin = false;
 | 
						|
				if($permissionArray[1] == 3) {
 | 
						|
					$userIsDeviceAdmin = true;
 | 
						|
				} else if ($permissionArray[0] == 3) {
 | 
						|
					if ( $deviceData['owner'] == $userManager->getUserData('user_id')) {
 | 
						|
						$userIsDeviceAdmin = true;
 | 
						|
					}
 | 
						|
				}
 | 
						|
 | 
						|
				$devices[$deviceData['device_id']] = [
 | 
						|
					'name' => $deviceData['name'],
 | 
						|
					'icon' => $deviceData['icon'],
 | 
						|
					'room' => $deviceData['room_id'],
 | 
						|
					'token' => $deviceData['token'],
 | 
						|
					'sleepTime' => $deviceData['sleep_time'],
 | 
						|
					'approved' => $deviceData['approved'],
 | 
						|
					'permission' => $permissionArray,
 | 
						|
					'owner' => $deviceData['owner'],
 | 
						|
					'userIsAdmin' => $userIsDeviceAdmin,
 | 
						|
					'subDevices' => $subDevices,
 | 
						|
				];
 | 
						|
			}
 | 
						|
			$roomsItems[$roomsData['room_id']] = [
 | 
						|
				'name' => $roomsData['name'],
 | 
						|
				'deviceCount' => $roomsData['device_count'],
 | 
						|
				'devices' => $devices,
 | 
						|
			];
 | 
						|
		}
 | 
						|
 | 
						|
		$rooms = RoomManager::getAllRooms();
 | 
						|
		$template->prepare('rooms', $rooms);
 | 
						|
		$template->prepare('title', 'Home');
 | 
						|
		$template->prepare('lang', $lang);
 | 
						|
		$template->prepare('data', $roomsItems);
 | 
						|
 | 
						|
		$template->render();
 | 
						|
 | 
						|
	}
 | 
						|
 | 
						|
	function ago( $datetime )
 | 
						|
	{
 | 
						|
		$interval = date_create('now')->diff( $datetime );
 | 
						|
		$suffix = ( $interval->invert ? ' ago' : '' );
 | 
						|
		if ( $v = $interval->y >= 1 ) return $this->pluralize( $interval->m, 'month' ) . $suffix;
 | 
						|
		if ( $v = $interval->d >= 1 ) return $this->pluralize( $interval->d, 'day' ) . $suffix;
 | 
						|
		if ( $v = $interval->h >= 1 ) return $this->pluralize( $interval->h, 'hour' ) . $suffix;
 | 
						|
		if ( $v = $interval->i >= 1 ) return $this->pluralize( $interval->i, 'minute' ) . $suffix;
 | 
						|
		return $this->pluralize( $interval->s, 'second' ) . $suffix;
 | 
						|
	}
 | 
						|
 | 
						|
	function pluralize( $count, $text )
 | 
						|
	{
 | 
						|
		return $count . ( ( $count == 1 ) ? ( " $text" ) : ( " ${text}s" ) );
 | 
						|
	}
 | 
						|
}
 |