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 = '
';
$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 .= 'Počátek: | '.$this->EditTime('TimeStart').' |
';
$Output .= 'Konec: | '.$this->EditTime('TimeEnd').' |
';
$Output .= '
';
$Output .= '
Jednoduché nastavení...';
}
$Output .= '
'.$this->Graph();
$Output .= '
'.$this->MeasureTable();
return $Output;
}
function Graph(): string
{
$Output = '
Graf:';
$Output .= '
';
$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 .= ''.$Measure['Name'].' | '.$LastMeasureValue.' | '.$LastMeasureTime.' | '.$Interpolate.' | '.$Measure['Description'].' | ';
if (array_key_exists('Debug', $_GET)) $Output .= ''.$RowCount.' | '.$GenerationTime.' | ';
$Output .= '
';
}
$Output .= '
';
$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;
}
}