Title = 'Grafy'; $this->Description = 'Časové grafy veličin'; $this->ImageWidth = 800; $this->ImageHeight = 200; $this->ParentClass = 'PagePortal'; $this->DefaultVariables = array( 'TimeSpecify' => 0, 'Period' => 'day', 'Measure' => 1, 'Differential' => 0, ); $this->GraphTimeRanges = array ( 'hour' => array( 'caption' => 'Hodina', 'period' => 3600, ), 'day' => array( 'caption' => 'Den', 'period' => 86400, // 3600 * 24, ), 'week' => array( 'caption' => 'Týden', 'period' => 604800, // 3600 * 24 * 7, ), 'month' => array( 'caption' => 'Měsíc', 'period' => 2592000, // 3600 * 24 * 30, ), 'year' => array( 'caption' => 'Rok', 'period' => 31536000, // 3600 * 24 * 365, ), 'years' => array( 'caption' => 'Desetiletí', 'period' => 315360000, // 3600 * 24 * 365 * 10, ), ); } function EditTime($Time) { global $MonthNames; $Output = '
'; $TimeParts = getdate($_SESSION[$Time]); // Day selection $Output .= '. '; // Month selection $Output .= '. '; // Day selection $Output .= '    '; // Hour selection $Output .= ' : '; // Minute selection $Output .= ' '; $Output .= ''; $Output .= '
'; $Output .= '
'; $Output .= ''; $Output .= '
'; return $Output; } function Show(): string { $Debug = 0; foreach ($this->DefaultVariables as $Index => $Variable) { if (!array_key_exists($Index, $_SESSION)) $_SESSION[$Index] = $Variable; if (array_key_exists($Index, $_GET)) $_SESSION[$Index] = $_GET[$Index]; if (array_key_exists($Index, $_POST)) $_SESSION[$Index] = $_POST[$Index]; //$$Index = $_SESSION[$Index]; } if ($_SESSION['TimeSpecify'] == 0) { $_SESSION['TimeEnd'] = time() - 60; $_SESSION['TimeStart'] = $_SESSION['TimeEnd'] - $this->GraphTimeRanges[$_SESSION['Period']]['period']; } $Output = '
'; if (!array_key_exists('Operation', $_GET)) $_GET['Operation'] = ''; switch ($_GET['Operation']) { case 'SetTime': if (array_key_exists('Time', $_GET) and array_key_exists('Month', $_POST) and array_key_exists('Day', $_POST) and array_key_exists('Year', $_POST) and array_key_exists('Hour', $_POST) and array_key_exists('Minute', $_POST)) { if (($_GET['Time'] == 'TimeStart') or ($_GET['Time'] == 'TimeEnd')) { $_SESSION[$_GET['Time']] = mktime($_POST['Hour'], $_POST['Minute'], 0, $_POST['Month'], $_POST['Day'], $_POST['Year']); $$_GET['Time'] = $_SESSION[$_GET['Time']]; } } break; case 'SetTimeNow': if (array_key_exists('Time', $_GET)) { if (($_GET['Time'] == 'TimeStart') or ($_GET['Time'] == 'TimeEnd')) { $_SESSION[$_GET['Time']] = time(); $$_GET['Time'] = $_SESSION[$_GET['Time']]; } } break; } $Output .= 'Časový úsek:
'; // Show graf time range menu if ($_SESSION['TimeSpecify'] == 0) { $Output .= 'Délka úseku: '; foreach ($this->GraphTimeRanges as $Index => $Item) $Output .= ''.$Item['caption'].' '; $Output .= '
'; $Output .= 'Přesnější nastavení...
'; } else { $Output .= ''; $Output .= ''; $Output .= ''; $Output .= '
Počátek:'.$this->EditTime('TimeStart').'
Konec:'.$this->EditTime('TimeEnd').'
'; $Output .= 'Jednoduché nastavení...
'; } $Output .= '
'.$this->Graph(); $Output .= '
'.$this->MeasureTable(); return $Output; } function Graph(): string { $Output = 'Graf:
'; $Output .= 'Graf
'; $Output .= 'Odkaz na vybraný graf
'; return $Output; } function MeasureTable(): string { $PrefixMultiplier = new PrefixMultiplier(); $DbResult = $this->Database->query('SELECT COUNT(*) FROM `Measure` WHERE `Enabled`=1'); $DbRow = $DbResult->fetch_row(); $PageList = GetPageList('Measures', $DbRow[0]); $Output = $PageList['Output']; $Output .= ''; $TableColumns = array( array('Name' => 'Name', 'Title' => 'Měřená veličina'), array('Name' => 'LastValue', 'Title' => 'Poslední hodnota'), array('Name' => 'LastValueTime', 'Title' => 'Čas posledního měření'), array('Name' => 'Continuous', 'Title' => 'Interpolace'), array('Name' => 'Description', 'Title' => 'Popis'), ); if (array_key_exists('Debug', $_GET)) { $TableColumns[] = array('Name' => 'ItemCount', 'Title' => 'Počet položek'); $TableColumns[] = array('Name' => 'MeasureDuration', 'Title' => 'Čas vykonání'); } $Order = GetOrderTableHeader('Measures', $TableColumns, 'Name', 0); $Output .= $Order['Output']; $Result = $this->Database->select('Measure', '*', '`Enabled`=1 '.$Order['SQL'].$PageList['SQLLimit']); while ($Measure = $Result->fetch_array()) { $DbResult2 = $this->Database->select('MeasureMethod', '*', '`Id`='.$Measure['Method']); $MeasureMethod = $DbResult2->fetch_assoc(); $StopWatchStart = GetMicrotime(); if (array_key_exists('Debug', $_GET)) { $DbResult = $this->Database->select($Measure['DataTable'], 'COUNT(*)', 'Measure='.$Measure['Id']); $RowCount = $DbResult->fetch_array(); $RowCount = $RowCount[0]; } $Result2 = $this->Database->select($Measure['DataTable'], 'Time, Avg', 'Measure='.$Measure['Id'].' AND Level=0 ORDER BY Time DESC LIMIT 1'); if ($Result2->num_rows > 0) { $Row = $Result2->fetch_array(); $LastMeasureTime = date('j.n.Y G:i:s', MysqlDateTimeToTime($Row['Time'])); $LastMeasureValue = $PrefixMultiplier->Add($Row['Avg'], $MeasureMethod['Unit']); } else { $LastMeasureTime = ' '; $LastMeasureValue = ' '; } if ($Measure['Continuity'] == 1) $Interpolate = 'Ano'; else $Interpolate = 'Ne'; //if ($Measure['Description'] == '') $Measure['Description'] = ' '; $GenerationTime = floor((GetMicrotime() - $StopWatchStart) * 1000 ) / 1000; $Output .= ''; if (array_key_exists('Debug', $_GET)) $Output .= ''; $Output .= ''; } $Output .= '
'.$Measure['Name'].''.$LastMeasureValue.''.$LastMeasureTime.''.$Interpolate.''.$Measure['Description'].''.$RowCount.''.$GenerationTime.'
'; $Output .= $PageList['Output']; //ShowPage($Output); $Output .= '
'; return $Output; } } class PageMeasureAddValue extends Page { function Show(): string { $this->RawPage = true; $Output = ''; if (!array_key_exists('MeasureId', $_GET)) return 'Nebylo zadáno Id měření.'; if (!array_key_exists('Value', $_GET)) return 'Nebyla zadána hodnota.'; $Measure = new Measure($this->System); $Measure->Load($_GET['MeasureId']); if (!isset($Measure->Data['Id'])) return 'Měření s Id '.$_GET['MeasureId'].' nenalezeno.'; $Measure->AddValue(array('Min' => $_GET['Value'], 'Avg' => $_GET['Value'], 'Max' => $_GET['Value'])); return $Output; } }