Загрузил(а) файлы в 'htdocs/public/views'
This commit is contained in:
parent
3fc325d733
commit
48e5127b90
|
|
@ -0,0 +1,6 @@
|
|||
<?php require dirname(__DIR__) . "../../includes/bootstrap.php"; ?>
|
||||
|
||||
<title>Подробнее</title>
|
||||
<div class="modal-inner-content modal-inner-content-about" style="padding-bottom: 30px;">
|
||||
<p>Привет. Карта поднята на базе открытого проекта Aprs Track Direct. Сетевой хомяк.</p>
|
||||
</div>
|
||||
|
|
@ -0,0 +1,103 @@
|
|||
<?php require dirname(__DIR__) . "../../includes/bootstrap.php"; ?>
|
||||
|
||||
<?php
|
||||
$stations = [];
|
||||
$seconds = 60*60*72;
|
||||
$page = $_GET['page'] ?? 1;
|
||||
$rows = 50;
|
||||
$offset = ($page - 1) * $rows;
|
||||
|
||||
$stations = StationRepository::getInstance()->getObjectList($seconds, $rows, $offset);
|
||||
$count = StationRepository::getInstance()->getNumberOfStations($seconds);
|
||||
|
||||
$pages = ceil($count / $rows);
|
||||
?>
|
||||
|
||||
<title>Последние принятые пакеты</title>
|
||||
<div class="modal-inner-content" style="padding-bottom: 30px;">
|
||||
<?php if (count($stations) > 0) : ?>
|
||||
<p>
|
||||
<?php echo $count; ?> станций было принято за последние 24 часа.
|
||||
</p>
|
||||
|
||||
<?php if ($pages > 1): ?>
|
||||
<div class="pagination">
|
||||
<a class="tdlink" href="/views/latest.php?q=<?php echo ($_GET['q'] ?? "") ?>&seconds=<?php echo $seconds ?>&page=1"><<</a>
|
||||
<?php for($i = max(1, $page - 3); $i <= min($pages, $page + 3); $i++) : ?>
|
||||
<a href="/views/latest.php?q=<?php echo ($_GET['q'] ?? "") ?>&seconds=<?php echo $seconds ?>&page=<?php echo $i; ?>" <?php echo ($i == $page ? 'class="tdlink active"': 'class="tdlink"')?>><?php echo $i ?></a>
|
||||
<?php endfor; ?>
|
||||
<a class="tdlink" href="/views/latest.php?q=<?php echo ($_GET['q'] ?? "") ?>&seconds=<?php echo $seconds ?>&page=<?php echo $pages; ?>">>></a>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
|
||||
<div class="datagrid datagrid-search" style="max-width:1000px;">
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th> </th>
|
||||
<th>Позывной</th>
|
||||
<th>Последний пакет</th>
|
||||
<th>Комментарий/инфо</th>
|
||||
<th>На карте</th>
|
||||
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<?php foreach ($stations as $foundStation) : ?>
|
||||
<tr>
|
||||
<td>
|
||||
<img src="<?php echo $foundStation->getIconFilePath(22, 22); ?>" alt="Symbol"/>
|
||||
</td>
|
||||
<td>
|
||||
<a class="tdlink" href="/views/overview.php?id=<?php echo $foundStation->id; ?>&imperialUnits=<?php echo $_GET['imperialUnits'] ?? 0; ?>"><?php echo htmlentities($foundStation->name) ?></a>
|
||||
</td>
|
||||
<td class="station-latest-heard-timestamp" style="white-space: nowrap;">
|
||||
<?php echo $foundStation->latestConfirmedPacketTimestamp; ?>
|
||||
</td>
|
||||
<td>
|
||||
<?php if ($foundStation->sourceId == 5 && $foundStation->getOgnDevice() !== null) : ?>
|
||||
<div style="width: 100px; display: inline-block;">Регистрация:</div><?php echo htmlspecialchars($foundStation->getOgnDevice()->registration); ?> <?php echo $foundStation->getOgnDevice()->cn ? '[' .htmlspecialchars($foundStation->getOgnDevice()->cn) . ']' : ''; ?><br/>
|
||||
<div style="width: 100px; display: inline-block;">Модель самолёта:</div><?php echo htmlspecialchars($foundStation->getOgnDevice()->aircraftModel); ?>
|
||||
<?php else : ?>
|
||||
<?php $latestPacket = PacketRepository::getInstance()->getObjectById($foundStation->latestPacketId, $foundStation->latestPacketTimestamp); ?>
|
||||
<?php echo htmlspecialchars($latestPacket->comment); ?>
|
||||
<?php endif; ?>
|
||||
</td>
|
||||
<td>
|
||||
<?php if ($foundStation->latestConfirmedPacketTimestamp > (time() - 60*60*72)) : ?>
|
||||
<a href="?sid=<?php echo $foundStation->id; ?>" onclick="
|
||||
if (window.parent && window.parent.trackdirect) {
|
||||
$('.modal', parent.document).hide();
|
||||
window.parent.trackdirect.filterOnStationId([]);
|
||||
window.parent.trackdirect.filterOnStationId([<?php echo $foundStation->id; ?>]);
|
||||
return false;
|
||||
}">Показать</a>
|
||||
<?php else : ?>
|
||||
|
||||
<?php endif; ?>
|
||||
</td>
|
||||
</tr>
|
||||
<?php endforeach; ?>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
|
||||
<?php if (count($stations) == 0) : ?>
|
||||
<p>
|
||||
<b><i>За последние 24 часа не было принято ни одной станции.</i></b>
|
||||
</p>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
<script>
|
||||
$(document).ready(function() {
|
||||
var locale = window.navigator.userLanguage || window.navigator.language;
|
||||
moment.locale(locale);
|
||||
|
||||
$('.station-latest-heard-timestamp').each(function() {
|
||||
if ($(this).html().trim() != '' && !isNaN($(this).html().trim())) {
|
||||
$(this).html(moment(new Date(1000 * $(this).html())).format('L LTSZ'));
|
||||
}
|
||||
});
|
||||
});
|
||||
</script>
|
||||
|
|
@ -0,0 +1,509 @@
|
|||
<?php require dirname(__DIR__) . "../../includes/bootstrap.php"; ?>
|
||||
|
||||
<?php $station = StationRepository::getInstance()->getObjectById($_GET['id'] ?? null); ?>
|
||||
<?php if ($station->isExistingObject()) : ?>
|
||||
<title><?php echo $station->name; ?>, подробнее</title>
|
||||
<div class="modal-inner-content">
|
||||
<div class="modal-inner-content-menu">
|
||||
<span>Подробнее</span>
|
||||
<a class="tdlink" title="Statistics" href="/views/statistics.php?id=<?php echo $station->id ?>&imperialUnits=<?php echo $_GET['imperialUnits'] ?? 0; ?>">Статистика</a>
|
||||
<a class="tdlink" title="Trail Chart" href="/views/trail.php?id=<?php echo $station->id ?>&imperialUnits=<?php echo $_GET['imperialUnits'] ?? 0; ?>">Графики</a>
|
||||
<a class="tdlink" title="Weather" href="/views/weather.php?id=<?php echo $station->id ?>&imperialUnits=<?php echo $_GET['imperialUnits'] ?? 0; ?>">Погода</a>
|
||||
<a class="tdlink" title="Telemetry" href="/views/telemetry.php?id=<?php echo $station->id ?>&imperialUnits=<?php echo $_GET['imperialUnits'] ?? 0; ?>">Телеметрия</a>
|
||||
<a class="tdlink" title="Raw packets" href="/views/raw.php?id=<?php echo $station->id ?>&imperialUnits=<?php echo $_GET['imperialUnits'] ?? 0; ?>">Сырые данные</a>
|
||||
</div>
|
||||
|
||||
<div class="horizontal-line"> </div>
|
||||
|
||||
<div class="overview-content-summary">
|
||||
<div>
|
||||
<div class="overview-content-summary-hr">
|
||||
<?php if ($station->sourceId == 5) : ?>
|
||||
ID:
|
||||
<?php else: ?>
|
||||
Позывной:
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
<div class="overview-content-station" title="Name of the station/object">
|
||||
<?php echo htmlentities($station->name); ?>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<div class="overview-content-summary-hr">
|
||||
Идентификатор:
|
||||
</div>
|
||||
<div class="overview-content-station" title="Website station id">
|
||||
<?php echo $station->id; ?>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<?php if ($station->sourceId != null) : ?>
|
||||
<div>
|
||||
<div class="overview-content-summary-hr">Источник:</div>
|
||||
<div class="overview-content-station" title="Source of this station">
|
||||
<?php echo $station->getSourceDescription(); ?>
|
||||
</div>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
|
||||
<?php if ($station->getOgnDevice() !== null) : ?>
|
||||
<br/>
|
||||
<?php if ($station->getOgnDevice()->registration != null) : ?>
|
||||
<div>
|
||||
<div class="overview-content-summary-hr">Регистрация самолёта:</div>
|
||||
<div class="overview-content-station" title="Aircraft Registration">
|
||||
<b><?php echo htmlspecialchars($station->getOgnDevice()->registration); ?></b>
|
||||
</div>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
|
||||
<?php if ($station->getOgnDevice()->cn != null) : ?>
|
||||
<div>
|
||||
<div class="overview-content-summary-hr">Aircraft CN:</div>
|
||||
<div class="overview-content-station" title="Aircraft CN">
|
||||
<b><?php echo htmlspecialchars($station->getOgnDevice()->cn); ?></b>
|
||||
</div>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
<?php endif; ?>
|
||||
|
||||
<?php if ($station->getOgnDdbAircraftTypeName() !== null) : ?>
|
||||
<div>
|
||||
<div class="overview-content-summary-hr">Тип самолёта:</div>
|
||||
<div class="overview-content-station" title="Type of aircraft">
|
||||
<?php echo htmlspecialchars($station->getOgnDdbAircraftTypeName()); ?>
|
||||
</div>
|
||||
</div>
|
||||
<?php if ($station->getOgnDevice()->aircraftModel != null) : ?>
|
||||
<div>
|
||||
<div class="overview-content-summary-hr">Модель самолёта:</div>
|
||||
<div class="overview-content-station" title="Aircraft Model">
|
||||
<?php echo htmlspecialchars($station->getOgnDevice()->aircraftModel); ?>
|
||||
</div>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
<?php elseif ($station->getOgnAircraftTypeName() != null) : ?>
|
||||
<div>
|
||||
<div class="overview-content-summary-hr">Тип самолёта:</div>
|
||||
<div class="overview-content-station" title="Type of aircraft">
|
||||
<?php echo htmlspecialchars($station->getOgnAircraftTypeName()); ?>
|
||||
</div>
|
||||
</div>
|
||||
<?php else : ?>
|
||||
<div>
|
||||
<div class="overview-content-summary-hr">Символ:</div>
|
||||
<div class="overview-content-station" title="Symbol type">
|
||||
<img src="<?php echo $station->getIconFilePath(24, 24); ?>" alt="Latest symbol" />
|
||||
<span> <?php echo htmlentities($station->getLatestSymbolDescription()); ?></span>
|
||||
</div>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
|
||||
<!-- Latest Packet -->
|
||||
<?php if ($station->latestPacketId !== null) : ?>
|
||||
<?php $latestPacket = PacketRepository::getInstance()->getObjectById($station->latestPacketId, $station->latestPacketTimestamp); ?>
|
||||
<div class="overview-content-divider"></div>
|
||||
|
||||
<div>
|
||||
<div class="overview-content-summary-hr">Последний пакет:</div>
|
||||
<div class="overview-content-summary-cell-type overview-content-summary-indent"><?php echo $latestPacket->getPacketTypeName(); ?> </div>
|
||||
</div>
|
||||
|
||||
<?php $latestPacketSender = SenderRepository::getInstance()->getObjectById($latestPacket->senderId); ?>
|
||||
<?php if ($latestPacketSender->name != $station->name) : ?>
|
||||
<div>
|
||||
<div class="overview-content-summary-hr-indent">Отправитель:</div>
|
||||
<div class="overview-content-summary-indent" title="Sender of current packet">
|
||||
<?php $latestPacketSenderStation = StationRepository::getInstance()->getObjectByNameAndSenderId($latestPacketSender->name, $latestPacketSender->id); ?>
|
||||
<?php if ($latestPacketSenderStation->isExistingObject()) : ?>
|
||||
<a class="tdlink" title="Sender of the object" href="/views/overview.php?id=<?php echo $latestPacketSenderStation->id; ?>&imperialUnits=<?php echo $_GET['imperialUnits'] ?? 0; ?>">
|
||||
<?php echo htmlentities($latestPacketSenderStation->name); ?>
|
||||
</a>
|
||||
<?php else : ?>
|
||||
<?php echo $latestPacketSender->name; ?>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
|
||||
<div>
|
||||
<div class="overview-content-summary-hr-indent">Время получения:</div>
|
||||
<div title="Timestamp of the latest packet" id="latest-timestamp" class="overview-content-summary-cell-time overview-content-summary-indent">
|
||||
<?php echo $station->latestPacketTimestamp; ?>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<div>
|
||||
<div class="overview-content-summary-hr-indent"></div>
|
||||
<div title="Age of the latest packet" id="latest-timestamp-age" class="overview-content-summary-cell-time overview-content-summary-indent">
|
||||
<?php echo $station->latestPacketTimestamp; ?>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<div>
|
||||
<div class="overview-content-summary-hr-indent">Путь:</div>
|
||||
<div class="overview-content-summary-cell-path overview-content-summary-indent" title="Latest path"><?php echo $latestPacket->rawPath; ?></div>
|
||||
</div>
|
||||
|
||||
<?php if ($latestPacket->comment != '') : ?>
|
||||
<div>
|
||||
<div class="overview-content-summary-hr-indent">Комментарий:</div>
|
||||
<div title="Comment found in thelatest packet" id="latest-packet-comment" class="overview-content-summary-indent">
|
||||
<?php echo htmlentities($latestPacket->comment); ?>
|
||||
</div>
|
||||
</div>
|
||||
<?php endif;?>
|
||||
|
||||
<?php if ($latestPacket->getPacketOgn()->isExistingObject()) : ?>
|
||||
<div style="line-height: 8px"> </div>
|
||||
<?php if ($latestPacket->getPacketOgn()->ognSignalToNoiseRatio !== null) : ?>
|
||||
<div>
|
||||
<div class="overview-content-summary-hr-indent">Сигнал/шум:</div>
|
||||
<div class="overview-content-summary-indent" title="Signal to Noise Ratio measured upon reception"><?php echo $latestPacket->getPacketOgn()->ognSignalToNoiseRatio; ?> дБ</div>
|
||||
</div>
|
||||
<?php endif;?>
|
||||
|
||||
<?php if ($latestPacket->getPacketOgn()->ognBitErrorsCorrected !== null) : ?>
|
||||
<div>
|
||||
<div class="overview-content-summary-hr-indent">Исправленные биты:</div>
|
||||
<div class="overview-content-summary-indent" title="The number of bit errors corrected in the packet upon reception"><?php echo $latestPacket->getPacketOgn()->ognBitErrorsCorrected; ?></div>
|
||||
</div>
|
||||
<?php endif;?>
|
||||
|
||||
<?php if ($latestPacket->getPacketOgn()->ognFrequencyOffset !== null) : ?>
|
||||
<div>
|
||||
<div class="overview-content-summary-hr-indent">Разнос по частоте:</div>
|
||||
<div class="overview-content-summary-indent" title="The frequency offset measured upon reception"><?php echo $latestPacket->getPacketOgn()->ognFrequencyOffset; ?> кГц</div>
|
||||
</div>
|
||||
<?php endif;?>
|
||||
<?php endif;?>
|
||||
|
||||
<?php endif;?>
|
||||
|
||||
|
||||
<!-- Latest Weather -->
|
||||
<?php if ($station->latestWeatherPacketTimestamp !== null) : ?>
|
||||
<div class="overview-content-divider"></div>
|
||||
|
||||
<div>
|
||||
<div class="overview-content-summary-hr">Последняя погода:</div>
|
||||
<div id="weather-timestamp" class="overview-content-summary-cell-weather-time" title="Latest received weather">
|
||||
<?php echo $station->latestWeatherPacketTimestamp; ?>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<?php if ($station->latestWeatherPacketComment != '') : ?>
|
||||
<div>
|
||||
<div class="overview-content-summary-hr-indent">Комментарий/ПО:</div>
|
||||
<div class="overview-content-summary-cell-time overview-content-summary-indent" title="Weather packet comment/software">
|
||||
<?php echo htmlentities($station->latestWeatherPacketComment); ?><br/>
|
||||
</div>
|
||||
</div>
|
||||
<?php endif;?>
|
||||
<?php endif;?>
|
||||
|
||||
<!-- Latest Telemetry -->
|
||||
<?php if ($station->latestTelemetryPacketTimestamp !== null) : ?>
|
||||
<div class="overview-content-divider"></div>
|
||||
|
||||
<div>
|
||||
<div class="overview-content-summary-hr">Последняя телеметрия:</div>
|
||||
<div id="telemetry-timestamp" class="overview-content-summary-cell-telemetry-time" title="Latest received telemetry">
|
||||
<?php echo $station->latestTelemetryPacketTimestamp; ?>
|
||||
</div>
|
||||
</div>
|
||||
<?php endif;?>
|
||||
|
||||
<!-- Latest Position -->
|
||||
<?php if ($station->latestConfirmedPacketId !== null) : ?>
|
||||
|
||||
<div class="overview-content-divider"></div>
|
||||
|
||||
<div>
|
||||
<div class="overview-content-summary-hr">Последняя позиция:</div>
|
||||
<div id="overview-content-latest-position" class="overview-content-summary-cell-position" title="Latest position (that is approved by our filters)">
|
||||
<?php echo round($station->latestConfirmedLatitude, 5); ?>, <?php echo round($station->latestConfirmedLongitude, 5); ?>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<div class="overview-content-summary-hr-indent">Время получения:</div>
|
||||
<div id="position-timestamp" class="overview-content-summary-cell-time overview-content-summary-indent" title="Latest position receive time">
|
||||
<?php if ($station->latestPacketId == $station->latestConfirmedPacketId && $station->latestPacketTimestamp == $station->latestConfirmedPacketTimestamp) : ?>
|
||||
(получено в последнем пакете)
|
||||
<?php else : ?>
|
||||
<?php echo $station->latestConfirmedPacketTimestamp; ?>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
</div>
|
||||
<div>
|
||||
<div class="overview-content-summary-hr"> </div>
|
||||
<div class="overview-content-summary-cell-position">
|
||||
<a href="?sid=<?php echo $station->id; ?>" onclick="
|
||||
if (window.parent && window.parent.trackdirect) {
|
||||
$('.modal', parent.document).hide();
|
||||
window.parent.trackdirect.filterOnStationId([]);
|
||||
window.parent.trackdirect.filterOnStationId([<?php echo $station->id; ?>]);
|
||||
return false;
|
||||
}">Показать на карте</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<?php $latestConfirmedPacket = PacketRepository::getInstance()->getObjectById($station->latestConfirmedPacketId, $station->latestConfirmedPacketTimestamp); ?>
|
||||
<?php if ($latestConfirmedPacket->isExistingObject() && $latestConfirmedPacket->posambiguity > 0) : ?>
|
||||
<div>
|
||||
<div class="overview-content-summary-hr-indent">Неоднозначное положение:</div>
|
||||
<div class="overview-content-summary-cell-posambiguity overview-content-summary-indent" title="If posambiguity is active the gps position is inaccurate">Да</div>
|
||||
</div>
|
||||
<?php endif;?>
|
||||
|
||||
<?php if ($latestConfirmedPacket->isExistingObject()) : ?>
|
||||
<?php if ($latestConfirmedPacket->speed != '' || $latestConfirmedPacket->course != '' || $latestConfirmedPacket->altitude != '') : ?>
|
||||
<?php if (round($latestConfirmedPacket->speed) != 0 || round($latestConfirmedPacket->course) != 0 || round($latestConfirmedPacket->altitude) != 0) : ?>
|
||||
|
||||
<?php if ($latestConfirmedPacket->speed != '') : ?>
|
||||
<div>
|
||||
<div class="overview-content-summary-hr-indent">Скорость:</div>
|
||||
<div title="Latest speed" class="overview-content-summary-indent">
|
||||
<?php if (isImperialUnitUser()) : ?>
|
||||
<?php echo round(convertKilometerToMile($latestConfirmedPacket->speed), 2); ?> миль/ч
|
||||
<?php else : ?>
|
||||
<?php echo round($latestConfirmedPacket->speed, 2); ?> км/ч
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
</div>
|
||||
<?php endif;?>
|
||||
|
||||
<?php if ($latestConfirmedPacket->course != '') : ?>
|
||||
<div>
|
||||
<div class="overview-content-summary-hr-indent">Курс:</div>
|
||||
<div title="Latest course" class="overview-content-summary-indent"><?php echo $latestConfirmedPacket->course; ?>°</div>
|
||||
</div>
|
||||
<?php endif;?>
|
||||
|
||||
<?php if ($latestConfirmedPacket->altitude != '') : ?>
|
||||
<div>
|
||||
<div class="overview-content-summary-hr-indent">Высота:</div>
|
||||
<div title="Latest altitude" class="overview-content-summary-indent">
|
||||
<?php if (isImperialUnitUser()) : ?>
|
||||
<?php echo round(convertMeterToFeet($latestConfirmedPacket->altitude), 2); ?> ф
|
||||
<?php else : ?>
|
||||
<?php echo round($latestConfirmedPacket->altitude, 2); ?> м
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
</div>
|
||||
<?php endif;?>
|
||||
|
||||
<?php endif;?>
|
||||
<?php endif;?>
|
||||
|
||||
<?php if ($latestConfirmedPacket->getPacketOgn()->isExistingObject()) : ?>
|
||||
<?php if ($latestConfirmedPacket->getPacketOgn()->ognClimbRate !== null) : ?>
|
||||
<div>
|
||||
<div class="overview-content-summary-hr-indent">Набор высоты:</div>
|
||||
<div class="overview-content-summary-indent" title="The climb rate in feet-per-minute"><?php echo $latestConfirmedPacket->getPacketOgn()->ognClimbRate; ?> ф/мин</div>
|
||||
</div>
|
||||
<?php endif;?>
|
||||
|
||||
<?php if ($latestConfirmedPacket->getPacketOgn()->ognTurnRate !== null) : ?>
|
||||
<div>
|
||||
<?php $turnRateNote = true; ?>
|
||||
<div class="overview-content-summary-hr-indent">Скорость поворота:</div>
|
||||
<div class="overview-content-summary-indent" title="Current turn rate."><?php echo $latestConfirmedPacket->getPacketOgn()->ognTurnRate; ?> rot</div>
|
||||
</div>
|
||||
<?php endif;?>
|
||||
<?php endif;?>
|
||||
<?php endif;?>
|
||||
<?php endif;?>
|
||||
|
||||
<!-- Latest PHG and RNG -->
|
||||
<?php if ($latestConfirmedPacket && $latestConfirmedPacket->isExistingObject()) : ?>
|
||||
<?php if ($latestConfirmedPacket->phg != null || $latestConfirmedPacket->latestPhgTimestamp != null) : ?>
|
||||
<div class="overview-content-divider"></div>
|
||||
<div>
|
||||
<div class="overview-content-summary-hr">Последний PHG:</div>
|
||||
<div class="overview-content-summary-cell-phg" title="Power-Height-Gain (and directivity)">
|
||||
<?php echo $latestConfirmedPacket->getPHGDescription(true); ?><br/>
|
||||
(расчётный диапазон:
|
||||
<?php if (isImperialUnitUser()) : ?>
|
||||
<?php echo round(convertKilometerToMile($latestConfirmedPacket->getPHGRange(true)/1000),2); ?> миль)
|
||||
<?php else : ?>
|
||||
<?php echo round($latestConfirmedPacket->getPHGRange(true)/1000,2); ?> км)
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
</div>
|
||||
<?php endif;?>
|
||||
|
||||
<?php if ($latestConfirmedPacket->rng != null || $latestConfirmedPacket->latestRngTimestamp != null) : ?>
|
||||
<div class="overview-content-divider"></div>
|
||||
<div>
|
||||
<div class="overview-content-summary-hr">Последний RNG:</div>
|
||||
<div class="overview-content-summary-cell-phg" title="The pre-calculated radio range">
|
||||
<?php if (isImperialUnitUser()) : ?>
|
||||
<?php echo round(convertKilometerToMile($latestConfirmedPacket->getRng(true)), 2); ?> миль
|
||||
<?php else : ?>
|
||||
<?php echo round($latestConfirmedPacket->getRng(true), 2); ?> км
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
</div>
|
||||
<?php endif;?>
|
||||
<?php endif;?>
|
||||
|
||||
|
||||
<!-- Latest Symbols -->
|
||||
<?php $stationLatestSymbols = $station->getLatestIconFilePaths(22, 22); ?>
|
||||
<?php if ($stationLatestSymbols !== null && count($stationLatestSymbols) > 1) : ?>
|
||||
<div class="overview-content-divider"></div>
|
||||
<div>
|
||||
<div class="overview-content-summary-hr">Последние символы:</div>
|
||||
<div title="Latest symbols that this station has used">
|
||||
<?php foreach ($stationLatestSymbols as $symbolPath) : ?>
|
||||
<img src="<?php echo $symbolPath; ?>" alt="Symbol"/>
|
||||
<?php endforeach; ?>
|
||||
</div>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
|
||||
|
||||
<!-- Packet Frequency -->
|
||||
<?php $packetFrequencyNumberOfPackets = null; ?>
|
||||
<?php $stationPacketFrequency = $station->getPacketFrequency(null, $packetFrequencyNumberOfPackets); ?>
|
||||
<?php if ($stationPacketFrequency != null) : ?>
|
||||
<div class="overview-content-divider"></div>
|
||||
<div>
|
||||
<div class="overview-content-summary-hr">Частота следования пакетов:</div>
|
||||
<div class="overview-content-packet-frequency" title="Calculated packet frequency"><span><?php echo $stationPacketFrequency; ?> сек</span> <span>(последние <?php echo $packetFrequencyNumberOfPackets; ?> пакета(ов))</span></div>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
|
||||
|
||||
<div class="overview-content-divider"></div>
|
||||
</div>
|
||||
|
||||
<div class="overview-content-symbol" id ="overview-content-symbol-<?php echo $station->id; ?>">
|
||||
<img src="<?php echo $station->getIconFilePath(150, 150); ?>" alt="Latest symbol" title="<?php echo $station->getLatestSymbolDescription(); ?>"/>
|
||||
<?php if ($station->latestPacketId !== null) : ?>
|
||||
<br/>
|
||||
<div style="text-align: center; padding-top: 30px;">
|
||||
<?php if ($station->getOgnDevice() !== null && $station->getOgnDevice()->registration != null) : ?>
|
||||
<div>
|
||||
Искать <a href="https://www.jetphotos.com/registration/<?php echo $station->getOgnDevice()->registration; ?>" target="_blank"><?php echo htmlspecialchars($station->getOgnDevice()->registration); ?></a> фото!
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
|
||||
<?php if ($station->sourceId == 1) : ?>
|
||||
<?php if ($station->getLiklyHamRadioCallsign() !== null) : ?>
|
||||
<div>Искать <a href="https://www.qrz.com/db/<?php echo $station->getLiklyHamRadioCallsign(); ?>" target="_blank"><?php echo htmlspecialchars($station->getLiklyHamRadioCallsign()); ?></a> на QRZ</div>
|
||||
<?php endif; ?>
|
||||
<?php endif; ?>
|
||||
|
||||
<div>Экспорт <a href="/data/kml.php?id=<?php echo $station->id; ?>"><?php echo htmlspecialchars($station->name); ?></a> данных в KML</div>
|
||||
</div>
|
||||
<div style="clear: both;"></div>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
|
||||
<div class="horizontal-line"> </div>
|
||||
|
||||
<div class="overview-content-summary">
|
||||
|
||||
<!-- Related stations -->
|
||||
<?php $relatedStations = StationRepository::getInstance()->getRelatedObjectListByStationId($station->id, 15); ?>
|
||||
<?php if (count($relatedStations) > 1) : ?>
|
||||
<div>
|
||||
<?php $relatedStattionNote = true; ?>
|
||||
<div class="overview-content-summary-hr">Связанные станции/объекты:</div>
|
||||
<div class="overview-content-station-list" title="Stations with same call except SSID or objects with related sender">
|
||||
<?php foreach ($relatedStations as $relatedStation) : ?>
|
||||
<?php if ($relatedStation->id != $station->id) : ?>
|
||||
<img src="<?php echo $relatedStation->getIconFilePath(22, 22); ?>" alt="Symbol"/>
|
||||
<span><a class="tdlink" href="/views/overview.php?id=<?php echo $relatedStation->id; ?>&imperialUnits=<?php echo $_GET['imperialUnits'] ?? 0; ?>"><?php echo htmlentities($relatedStation->name) ?></a></span>
|
||||
<br/>
|
||||
<?php endif; ?>
|
||||
<?php endforeach; ?>
|
||||
</div>
|
||||
</div>
|
||||
<div class="overview-content-divider"></div>
|
||||
<?php endif; ?>
|
||||
|
||||
|
||||
<!-- Close by stations -->
|
||||
<?php $closeByStations = StationRepository::getInstance()->getCloseByObjectListByStationId($station->id, 15); ?>
|
||||
<?php if (count($closeByStations) > 1) : ?>
|
||||
<div>
|
||||
<div class="overview-content-summary-hr">Ближайшие станции/объекты:</div>
|
||||
<div class="overview-content-station-list" title="The closest stations/objects at the current position">
|
||||
<?php foreach ($closeByStations as $closeByStation) : ?>
|
||||
<?php if ($closeByStation->id != $station->id) : ?>
|
||||
|
||||
<img src="<?php echo $closeByStation->getIconFilePath(22, 22); ?>" alt="Symbol"/>
|
||||
<span>
|
||||
<a class="tdlink" href="/views/overview.php?id=<?php echo $closeByStation->id; ?>&imperialUnits=<?php echo $_GET['imperialUnits'] ?? 0; ?>"><?php echo htmlentities($closeByStation->name) ?></a>
|
||||
<span>
|
||||
<?php if (isImperialUnitUser()) : ?>
|
||||
<?php if (convertMeterToYard($closeByStation->getDistance($station->latestConfirmedLatitude, $station->latestConfirmedLongitude)) < 1000) : ?>
|
||||
<?php echo round(convertMeterToYard($closeByStation->getDistance($station->latestConfirmedLatitude, $station->latestConfirmedLongitude)), 0); ?> ярд
|
||||
<?php else : ?>
|
||||
<?php echo round(convertKilometerToMile($closeByStation->getDistance($station->latestConfirmedLatitude, $station->latestConfirmedLongitude) / 1000), 2); ?> миль
|
||||
<?php endif; ?>
|
||||
<?php else : ?>
|
||||
<?php if ($closeByStation->getDistance($station->latestConfirmedLatitude, $station->latestConfirmedLongitude) < 1000) : ?>
|
||||
<?php echo round($closeByStation->getDistance($station->latestConfirmedLatitude, $station->latestConfirmedLongitude), 0); ?> м
|
||||
<?php else : ?>
|
||||
<?php echo round($closeByStation->getDistance($station->latestConfirmedLatitude, $station->latestConfirmedLongitude) / 1000, 2); ?> км
|
||||
<?php endif; ?>
|
||||
<?php endif; ?>
|
||||
</span>
|
||||
|
||||
</span>
|
||||
<br/>
|
||||
<?php endif; ?>
|
||||
<?php endforeach; ?>
|
||||
</div>
|
||||
</div>
|
||||
<div class="overview-content-divider"></div>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
|
||||
<?php if (count($relatedStations) > 1 || count($closeByStations) > 1) : ?>
|
||||
<div class="horizontal-line"> </div>
|
||||
<?php endif; ?>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
$(document).ready(function() {
|
||||
var locale = window.navigator.userLanguage || window.navigator.language;
|
||||
moment.locale(locale);
|
||||
|
||||
$('#overview-content-comment, #overview-content-beacon, #overview-content-status').each(function() {
|
||||
if ($(this).html().trim() != '') {
|
||||
$(this).html(Autolinker.link($(this).html()));
|
||||
}
|
||||
});
|
||||
|
||||
$('#latest-timestamp, #comment-timestamp, #status-timestamp, #beacon-timestamp, #position-timestamp, #weather-timestamp, #telemetry-timestamp').each(function() {
|
||||
if ($(this).html().trim() != '' && !isNaN($(this).html().trim())) {
|
||||
$(this).html(moment(new Date(1000 * $(this).html())).format('L LTSZ'));
|
||||
}
|
||||
});
|
||||
|
||||
if ($('#latest-timestamp-age').length && $('#latest-timestamp-age').html().trim() != '' && !isNaN($('#latest-timestamp-age').html().trim())) {
|
||||
$('#latest-timestamp-age').html(moment(new Date(1000 * $('#latest-timestamp-age').html())).locale('ru').fromNow());
|
||||
}
|
||||
|
||||
if (window.parent && window.parent.trackdirect) {
|
||||
<?php if ($station->latestConfirmedLatitude != null && $station->latestConfirmedLongitude != null) : ?>
|
||||
window.parent.trackdirect.addListener("map-created", function() {
|
||||
window.parent.trackdirect.focusOnStation(<?php echo $station->id ?>, true);
|
||||
});
|
||||
<?php endif; ?>
|
||||
}
|
||||
});
|
||||
</script>
|
||||
<?php endif; ?>
|
||||
|
|
@ -0,0 +1,508 @@
|
|||
<?php require dirname(__DIR__) . "../../includes/bootstrap.php"; ?>
|
||||
|
||||
<?php $station = StationRepository::getInstance()->getObjectById($_GET['id'] ?? null); ?>
|
||||
<?php if ($station->isExistingObject()) : ?>
|
||||
|
||||
<?php
|
||||
$page = $_GET['page'] ?? 1;
|
||||
$rows = $_GET['rows'] ?? 25;
|
||||
$offset = ($page - 1) * $rows;
|
||||
|
||||
if (($_GET['category'] ?? 1) == 2) {
|
||||
$packets = PacketRepository::getInstance()->getObjectListWithRawBySenderStationId($station->id, $rows, $offset);
|
||||
$count = PacketRepository::getInstance()->getNumberOfPacketsWithRawBySenderStationId($station->id);
|
||||
} else {
|
||||
$packets = PacketRepository::getInstance()->getObjectListWithRawByStationId($station->id, $rows, $offset);
|
||||
$count = PacketRepository::getInstance()->getNumberOfPacketsWithRawByStationId($station->id);
|
||||
}
|
||||
|
||||
$pages = ceil($count / $rows);
|
||||
?>
|
||||
|
||||
<title><?php echo $station->name; ?>, сырые данные</title>
|
||||
<div class="modal-inner-content">
|
||||
<div class="modal-inner-content-menu">
|
||||
<a class="tdlink" title="Overview" href="/views/overview.php?id=<?php echo $station->id ?>&imperialUnits=<?php echo $_GET['imperialUnits'] ?? 0; ?>">Подробнее</a>
|
||||
<a class="tdlink" title="Statistics" href="/views/statistics.php?id=<?php echo $station->id ?>&imperialUnits=<?php echo $_GET['imperialUnits'] ?? 0; ?>">Статистика</a>
|
||||
<a class="tdlink" title="Trail Chart" href="/views/trail.php?id=<?php echo $station->id ?>&imperialUnits=<?php echo $_GET['imperialUnits'] ?? 0; ?>">Графики</a>
|
||||
<a class="tdlink" title="Weather" href="/views/weather.php?id=<?php echo $station->id ?>&imperialUnits=<?php echo $_GET['imperialUnits'] ?? 0; ?>">Погода</a>
|
||||
<a class="tdlink" title="Telemetry" href="/views/telemetry.php?id=<?php echo $station->id ?>&imperialUnits=<?php echo $_GET['imperialUnits'] ?? 0; ?>">Телеметрия</a>
|
||||
<span>Сырые данные</span>
|
||||
</div>
|
||||
|
||||
<div class="horizontal-line"> </div>
|
||||
|
||||
<p>
|
||||
Это последние полученные пакеты, хранящиеся в базе данных для станции/объекта <?php echo $station->name; ?>. Если пакеты не отображаются, значит отправитель не отправлял никаких пакетов за последние 30 дней. Или сервер не смог их принять.
|
||||
</p>
|
||||
|
||||
<?php if ($station->sourceId == 5) : ?>
|
||||
<p>
|
||||
<a target="_blank" href="http://wiki.glidernet.org/ddb">База данных устройств OGN</a>
|
||||
</p>
|
||||
<?php else : ?>
|
||||
<p>
|
||||
Если сравнивать сырые данные с аналогичными данными с других сайтов, они могут отличаться (особенно путь), причина в том, что пакеты могут быть получены с разных серверов APRS-IS. Каждый APRS-IS сервер выполняет фильтрацию дубликатов, и пакет, который считается дубликатом, может по разному отбрасываться на разных серверах. Это влияет на то, какой из множества пакетов в итоге отобразится здесь.
|
||||
</p>
|
||||
<?php endif; ?>
|
||||
|
||||
<div class="form-container">
|
||||
<?php if ($station->stationTypeId == 1) : ?>
|
||||
<select id="raw-category" style="float:left; margin-right: 5px;">
|
||||
<option <?php echo (($_GET['category'] ?? 1) == 1 ? 'selected' : ''); ?> value="1">Пакеты рядом с <?php echo $station->name; ?></option>
|
||||
<option <?php echo (($_GET['category'] ?? 1) == 2 ? 'selected' : ''); ?> value="2">Пакеты, отправленные <?php echo $station->name; ?></option>
|
||||
</select>
|
||||
<?php endif; ?>
|
||||
|
||||
<select id="raw-type" style="float:left; margin-right: 5px;">
|
||||
<option <?php echo (($_GET['type'] ?? 1) == 1 ? 'selected' : ''); ?> value="1">Сырые данные</option>
|
||||
<option <?php echo (($_GET['type'] ?? 1) == 2 ? 'selected' : ''); ?> value="2">Декодированные данные</option>
|
||||
</select>
|
||||
|
||||
<select id="raw-rows" style="float:left; margin-right: 5px;" class="pagination-rows">
|
||||
<option <?php echo ($rows == 25 ? 'selected' : ''); ?> value="25">25 строк</option>
|
||||
<option <?php echo ($rows == 50 ? 'selected' : ''); ?> value="50">50 строк</option>
|
||||
<option <?php echo ($rows == 100 ? 'selected' : ''); ?> value="100">100 строк</option>
|
||||
<option <?php echo ($rows == 200 ? 'selected' : ''); ?> value="200">200 строк</option>
|
||||
<option <?php echo ($rows == 300 ? 'selected' : ''); ?> value="300">300 строк</option>
|
||||
</select>
|
||||
</div>
|
||||
|
||||
<?php if ($pages > 1): ?>
|
||||
<div class="pagination">
|
||||
<a class="tdlink" href="/views/raw.php?id=<?php echo $station->id; ?>&category=<?php echo ($_GET['category'] ?? 1) ?>&type=<?php echo ($_GET['type'] ?? 1); ?>&rows=<?php echo $rows; ?>&page=1"><<</a>
|
||||
<?php for($i = max(1, $page - 3); $i <= min($pages, $page + 3); $i++) : ?>
|
||||
<a href="/views/raw.php?id=<?php echo $station->id; ?>&category=<?php echo ($_GET['category'] ?? 1) ?>&type=<?php echo ($_GET['type'] ?? 1); ?>&rows=<?php echo $rows; ?>&page=<?php echo $i; ?>" <?php echo ($i == $page ? 'class="tdlink active"': 'class="tdlink"')?>><?php echo $i ?></a>
|
||||
<?php endfor; ?>
|
||||
<a class="tdlink" href="/views/raw.php?id=<?php echo $station->id; ?>&category=<?php echo ($_GET['category'] ?? 1) ?>&type=<?php echo ($_GET['type'] ?? 1); ?>&rows=<?php echo $rows; ?>&page=<?php echo $pages; ?>">>></a>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
|
||||
<div id="raw-content-output">
|
||||
<?php foreach (array_slice($packets, 0, $rows) as $packet) : ?>
|
||||
<?php if (($_GET['type'] ?? 1) == 1) : ?>
|
||||
<p>
|
||||
<span class="raw-packet-timestamp"><?php echo $packet->timestamp; ?></span>:
|
||||
|
||||
<?php if (in_array($packet->mapId, Array(3, 6))) : ?>
|
||||
<span class="raw-packet-error">
|
||||
<?php else : ?>
|
||||
<span>
|
||||
<?php endif; ?>
|
||||
|
||||
<?php echo str_replace_first(htmlspecialchars($station->name . '>'), '<b>' . htmlspecialchars($station->name) . '</b>>', htmlspecialchars($packet->raw)); ?>
|
||||
|
||||
<?php if ($packet->mapId == 3) : ?>
|
||||
<b>[Дубликат]</b>
|
||||
<?php elseif ($packet->mapId == 6) : ?>
|
||||
<b>[Получено в неправильном порядке]</b>
|
||||
<?php endif; ?>
|
||||
|
||||
</span>
|
||||
</p>
|
||||
<?php elseif (($_GET['type'] ?? 1) == 2) : ?>
|
||||
<div class="decoded">
|
||||
<div class="datagrid">
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th colspan="2">
|
||||
<?php if (in_array($packet->mapId, Array(3, 6))) : ?>
|
||||
<span class="raw-packet-error">
|
||||
<?php else : ?>
|
||||
<span>
|
||||
<?php endif; ?>
|
||||
<span class="raw-packet-timestamp"><?php echo $packet->timestamp; ?></span>
|
||||
|
||||
<?php if ($packet->mapId == 3) : ?>
|
||||
<b>[Дубликат]</b>
|
||||
<?php elseif ($packet->mapId == 6) : ?>
|
||||
<b>[Получено в неправильном порядке]</b>
|
||||
<?php endif; ?>
|
||||
</span>
|
||||
</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>Необработанные</td>
|
||||
<td>
|
||||
<?php echo str_replace_first(htmlspecialchars($station->name . '>'), '<b>' . htmlspecialchars($station->name) . '</b>>', htmlspecialchars($packet->raw)); ?>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<tr><td>Тип пакета</td><td><?php echo $packet->getPacketTypeName(); ?></td></tr>
|
||||
|
||||
<?php if ($packet->getStationObject()->stationTypeId == 2) : ?>
|
||||
<tr><td>Название объекта</td><td><?php echo htmlspecialchars($packet->getStationObject()->name); ?></td></tr>
|
||||
<?php else : ?>
|
||||
<tr><td>Позывной</td><td><?php echo htmlspecialchars($packet->getStationObject()->name); ?></td></tr>
|
||||
<?php endif; ?>
|
||||
|
||||
<?php if ($packet->getStationObject()->name != $packet->getSenderObject()->name) : ?>
|
||||
<tr><td>Отправитель</td><td><?php echo htmlspecialchars($packet->getSenderObject()->name); ?></td></tr>
|
||||
<?php endif; ?>
|
||||
|
||||
<tr><td>Путь</td><td><?php echo htmlspecialchars($packet->rawPath); ?></td></tr>
|
||||
|
||||
<?php if ($packet->reportedTimestamp != null) : ?>
|
||||
<tr><td>Переданное время</td><td><?php echo $packet->reportedTimestamp; ?> - <span class="raw-packet-timestamp"><?php echo $packet->reportedTimestamp; ?></span></td></tr>
|
||||
<?php endif; ?>
|
||||
|
||||
<?php if ($packet->latitude != null && $packet->longitude != null) : ?>
|
||||
<tr><td>Latitude</td><td><?php echo round($packet->latitude, 5); ?></td></tr>
|
||||
<tr><td>Longitude</td><td><?php echo round($packet->longitude, 5); ?></td></tr>
|
||||
<?php endif; ?>
|
||||
|
||||
<?php if ($packet->symbol != null && $packet->symbolTable != null) : ?>
|
||||
<tr><td>Символ</td><td><?php echo htmlspecialchars($packet->symbol); ?></td></tr>
|
||||
<tr><td>Таблица символов</td><td><?php echo htmlspecialchars($packet->symbolTable); ?></td></tr>
|
||||
<?php endif; ?>
|
||||
|
||||
<?php if ($packet->speed != null) : ?>
|
||||
<?php if (isImperialUnitUser()) : ?>
|
||||
<tr><td>Скорость</td><td><?php echo convertKilometerToMile($packet->speed); ?> миль/ч</td></tr>
|
||||
<?php else : ?>
|
||||
<tr><td>Скорость</td><td><?php echo $packet->speed; ?> км/ч</td></tr>
|
||||
<?php endif; ?>
|
||||
<?php endif; ?>
|
||||
|
||||
<?php if ($packet->course != null) : ?>
|
||||
<tr><td>Курс</td><td><?php echo $packet->course; ?>°</td></tr>
|
||||
<?php endif; ?>
|
||||
|
||||
<?php if ($packet->altitude != null) : ?>
|
||||
<?php if (isImperialUnitUser()) : ?>
|
||||
<tr><td>Высота</td><td><?php echo convertMeterToFeet($packet->altitude); ?> ф</td></tr>
|
||||
<?php else : ?>
|
||||
<tr><td>Высота</td><td><?php echo $packet->altitude; ?> м</td></tr>
|
||||
<?php endif; ?>
|
||||
<?php endif; ?>
|
||||
|
||||
<?php if ($packet->comment != null) : ?>
|
||||
<?php if ($packet->packetTypeId == 10) : ?>
|
||||
<tr><td>Статус</td><td><?php echo htmlspecialchars($packet->comment); ?></td></tr>
|
||||
<?php elseif ($packet->packetTypeId == 7) : ?>
|
||||
<tr><td>Маяк</td><td><?php echo htmlspecialchars($packet->comment); ?></td></tr>
|
||||
<?php else : ?>
|
||||
<tr><td>Комментарий</td><td><?php echo htmlspecialchars($packet->comment); ?></td></tr>
|
||||
<?php endif; ?>
|
||||
<?php endif; ?>
|
||||
|
||||
<?php if ($packet->posambiguity == 1) : ?>
|
||||
<tr><td>Неоднозначность положения</td><td>Да</td></tr>
|
||||
<?php endif; ?>
|
||||
|
||||
<?php if ($packet->phg != null) : ?>
|
||||
<?php if (isImperialUnitUser()) : ?>
|
||||
<tr><td>PHG</td><td><?php echo $packet->phg; ?> (Расчётный диапазон: <?php echo round(convertKilometerToMile($packet->getPHGRange()/1000),2); ?> миль)</td></tr>
|
||||
<?php else : ?>
|
||||
<tr><td>PHG</td><td><?php echo $packet->phg; ?> (Расчётный диапазон: <?php echo round($packet->getPHGRange()/1000,2); ?> км)</td></tr>
|
||||
<?php endif; ?>
|
||||
<?php endif; ?>
|
||||
|
||||
<?php if ($packet->rng != null) : ?>
|
||||
<tr><td>RNG</td><td><?php echo $packet->rng; ?></td></tr>
|
||||
<?php endif; ?>
|
||||
|
||||
<?php if ($station->latestWeatherPacketTimestamp !== null) : ?>
|
||||
<?php $weather = $packet->getPacketWeather(); ?>
|
||||
<?php if ($weather->isExistingObject()) : ?>
|
||||
<tr>
|
||||
<td>Погода</td>
|
||||
<td>
|
||||
<table>
|
||||
<tbody>
|
||||
<?php if ($weather->wxRawTimestamp !== null) : ?>
|
||||
<tr>
|
||||
<td>Время:</td><td><span class="raw-packet-timestamp"><?php echo $weather->wxRawTimestamp; ?></span></td>
|
||||
</tr>
|
||||
<?php endif; ?>
|
||||
|
||||
<?php if ($weather->temperature !== null) : ?>
|
||||
<tr>
|
||||
<td>Температура:</td>
|
||||
<?php if (isImperialUnitUser()) : ?>
|
||||
<td><?php echo round(convertCelciusToFahrenheit($weather->temperature), 2); ?>° F</td>
|
||||
<?php else : ?>
|
||||
<td><?php echo round($weather->temperature, 2); ?>° C</td>
|
||||
<?php endif; ?>
|
||||
</tr>
|
||||
<?php endif; ?>
|
||||
|
||||
<?php if ($weather->humidity !== null) : ?>
|
||||
<tr>
|
||||
<td>Влажность:</td>
|
||||
<td><?php echo $weather->humidity; ?>%</td>
|
||||
</tr>
|
||||
<?php endif; ?>
|
||||
|
||||
<?php if ($weather->pressure !== null) : ?>
|
||||
<tr>
|
||||
<td>Давление:</td>
|
||||
<?php if (isImperialUnitUser()) : ?>
|
||||
<td><?php echo round(convertMbarToMmhg($weather->pressure),1); ?> мм.рт.ст.</td>
|
||||
<?php else : ?>
|
||||
<td><?php echo round($weather->pressure,1); ?> гПа</td>
|
||||
<?php endif; ?>
|
||||
</tr>
|
||||
<?php endif; ?>
|
||||
|
||||
<?php if ($weather->rain_1h !== null) : ?>
|
||||
<tr>
|
||||
<td>Осадки за последний час:</td>
|
||||
<?php if (isImperialUnitUser()) : ?>
|
||||
<td><?php echo round(convertMmToInch($weather->rain_1h),2); ?> in</td>
|
||||
<?php else : ?>
|
||||
<td><?php echo round($weather->rain_1h,2); ?> мм</td>
|
||||
<?php endif; ?>
|
||||
</tr>
|
||||
<?php endif; ?>
|
||||
|
||||
<?php if ($weather->rain_24h !== null) : ?>
|
||||
<tr>
|
||||
<td>Осадки за последние 24 ч:</td>
|
||||
<?php if (isImperialUnitUser()) : ?>
|
||||
<td><?php echo round(convertMmToInch($weather->rain_24h),2); ?> in</td>
|
||||
<?php else : ?>
|
||||
<td><?php echo round($weather->rain_24h,2); ?> мм</td>
|
||||
<?php endif; ?>
|
||||
</tr>
|
||||
<?php endif; ?>
|
||||
|
||||
<?php if ($weather->rain_since_midnight !== null) : ?>
|
||||
<tr>
|
||||
<td>Осадки с полуночи:</td>
|
||||
<?php if (isImperialUnitUser()) : ?>
|
||||
<td><?php echo round(convertMmToInch($weather->rain_since_midnight),2); ?> in</td>
|
||||
<?php else : ?>
|
||||
<td><?php echo round($weather->rain_since_midnight,2); ?> мм</td>
|
||||
<?php endif; ?>
|
||||
</tr>
|
||||
<?php endif; ?>
|
||||
|
||||
<?php if (isImperialUnitUser()) : ?>
|
||||
<?php if ($weather->wind_speed !== null && $weather->wind_speed > 0) : ?>
|
||||
<tr>
|
||||
<td>Скорость ветра:</td>
|
||||
<td><?php echo round(convertMpsToMph($weather->wind_speed), 2); ?> миль/ч, <?php echo $weather->wind_direction; ?>°</td>
|
||||
</tr>
|
||||
<?php elseif($weather->wind_speed !== null) : ?>
|
||||
<tr>
|
||||
<td>Скорость ветра:</td>
|
||||
<td><?php echo round(convertMpsToMph($weather->wind_speed), 2); ?> миль/ч</td>
|
||||
</tr>
|
||||
<?php endif; ?>
|
||||
|
||||
<?php else : ?>
|
||||
<?php if ($weather->wind_speed !== null && $weather->wind_speed > 0) : ?>
|
||||
<tr>
|
||||
<td>Скорость ветра:</td>
|
||||
<td><?php echo round($weather->wind_speed, 2); ?> м/с, <?php echo $weather->wind_direction; ?>°</td>
|
||||
</tr>
|
||||
<?php elseif($weather->wind_speed !== null) : ?>
|
||||
<tr>
|
||||
<td>Скорость ветра:</td>
|
||||
<td><?php echo round($weather->wind_speed, 2); ?> м/с</td>
|
||||
</tr>
|
||||
<?php endif; ?>
|
||||
<?php endif; ?>
|
||||
|
||||
<?php if ($weather->luminosity !== null) : ?>
|
||||
<tr>
|
||||
<td>Освещённость:</td><td><?php echo round($weather->luminosity,0); ?> Вт/м²</td>
|
||||
</tr>
|
||||
<?php endif; ?>
|
||||
|
||||
<?php if ($weather->snow !== null) : ?>
|
||||
<tr>
|
||||
<?php if (isImperialUnitUser()) : ?>
|
||||
<td>Снег:</td><td><?php echo round(convertMmToInch($weather->snow), 0); ?> in</td>
|
||||
<?php else : ?>
|
||||
<td>Снег:</td><td><?php echo round($weather->snow, 0); ?> мм</td>
|
||||
<?php endif; ?>
|
||||
</tr>
|
||||
<?php endif; ?>
|
||||
</tbody>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<?php endif; ?>
|
||||
<?php endif; ?>
|
||||
|
||||
<?php if ($station->latestTelemetryPacketTimestamp !== null) : ?>
|
||||
<?php $telemetry = $packet->getPacketTelemetry(); ?>
|
||||
<?php if ($telemetry->isExistingObject()) : ?>
|
||||
<tr>
|
||||
<td>Аналоговые значения телеметрии</td>
|
||||
<td>
|
||||
<table>
|
||||
<tbody>
|
||||
<?php for ($i = 1; $i<=5; $i++) : ?>
|
||||
<?php if ($telemetry->isValueSet($i)) : ?>
|
||||
<tr>
|
||||
<td><?php echo htmlspecialchars($telemetry->getValueParameterName($i)); ?>:</td>
|
||||
<td><?php echo round($telemetry->getValue($i), 2); ?> <?php echo htmlspecialchars($telemetry->getValueUnit($i)); ?></td>
|
||||
</tr>
|
||||
<?php endif; ?>
|
||||
<?php endfor; ?>
|
||||
</tbody>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
<?php if ($telemetry->bits !== null) : ?>
|
||||
<tr>
|
||||
<td>Значения битов телеметрии</td>
|
||||
<td>
|
||||
<table>
|
||||
<tbody>
|
||||
<?php for ($i = 1; $i<=8; $i++) : ?>
|
||||
<tr>
|
||||
<td><?php echo htmlspecialchars($telemetry->getBitParameterName($i)); ?>:</td>
|
||||
<td><?php echo $telemetry->getBit($i); ?></td>
|
||||
</tr>
|
||||
<?php endfor; ?>
|
||||
</tbody>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
<?php endif; ?>
|
||||
<?php endif; ?>
|
||||
|
||||
|
||||
<?php if ($packet->packetTypeId == 7 && strstr($packet->raw, ':UNIT.')) : ?>
|
||||
<?php $pos = strpos($packet->raw, ':UNIT.'); ?>
|
||||
<tr>
|
||||
<td>Телеметрия: единицы</td>
|
||||
<td>
|
||||
<?php echo htmlspecialchars(substr($packet->raw, $pos + 6)); ?>
|
||||
</td>
|
||||
</tr>
|
||||
<?php endif; ?>
|
||||
|
||||
<?php if ($packet->packetTypeId == 7 && strstr($packet->raw, ':BITS.')) : ?>
|
||||
<?php $pos = strpos($packet->raw, ':BITS.'); ?>
|
||||
<tr>
|
||||
<td>Телеметрия: биты</td>
|
||||
<td>
|
||||
<?php echo htmlspecialchars(substr($packet->raw, $pos + 6)); ?>
|
||||
</td>
|
||||
</tr>
|
||||
<?php endif; ?>
|
||||
|
||||
<?php if ($packet->packetTypeId == 7 && strstr($packet->raw, ':EQNS.')) : ?>
|
||||
<?php $pos = strpos($packet->raw, ':EQNS.'); ?>
|
||||
<tr>
|
||||
<td>Телеметрия: EQNS</td>
|
||||
<td>
|
||||
<?php echo htmlspecialchars(substr($packet->raw, $pos + 6)); ?>
|
||||
</td>
|
||||
</tr>
|
||||
<?php endif; ?>
|
||||
|
||||
<?php if ($packet->packetTypeId == 7 && strstr($packet->raw, ':PARM.')) : ?>
|
||||
<?php $pos = strpos($packet->raw, ':PARM.'); ?>
|
||||
<tr>
|
||||
<td>Телеметрия: PARM</td>
|
||||
<td>
|
||||
<?php echo htmlspecialchars(substr($packet->raw, $pos + 6)); ?>
|
||||
</td>
|
||||
</tr>
|
||||
<?php endif; ?>
|
||||
<?php endif; ?>
|
||||
|
||||
<?php if ($packet->getPacketOgn()->isExistingObject()) : ?>
|
||||
<?php if ($packet->getPacketOgn()->ognSignalToNoiseRatio !== null) : ?>
|
||||
<tr>
|
||||
<td>Отношение сигнал/шум</td>
|
||||
<td>
|
||||
<?php echo $packet->getPacketOgn()->ognSignalToNoiseRatio; ?> dB
|
||||
</td>
|
||||
</tr>
|
||||
<?php endif;?>
|
||||
|
||||
<?php if ($packet->getPacketOgn()->ognBitErrorsCorrected !== null) : ?>
|
||||
<tr>
|
||||
<td>Bits corrected</td>
|
||||
<td>
|
||||
<?php echo $packet->getPacketOgn()->ognBitErrorsCorrected; ?>
|
||||
</td>
|
||||
</tr>
|
||||
<?php endif;?>
|
||||
|
||||
<?php if ($packet->getPacketOgn()->ognFrequencyOffset !== null) : ?>
|
||||
<tr>
|
||||
<td>Разнос частоты</td>
|
||||
<td>
|
||||
<?php echo $packet->getPacketOgn()->ognFrequencyOffset; ?> кГц
|
||||
</td>
|
||||
</tr>
|
||||
<?php endif;?>
|
||||
|
||||
<?php if ($packet->getPacketOgn()->ognClimbRate !== null) : ?>
|
||||
<tr>
|
||||
<td>Скорость набора высоты</td>
|
||||
<td>
|
||||
<?php echo $packet->getPacketOgn()->ognClimbRate; ?> ф/м
|
||||
</td>
|
||||
</tr>
|
||||
<?php endif;?>
|
||||
|
||||
<?php if ($packet->getPacketOgn()->ognTurnRate !== null) : ?>
|
||||
<tr>
|
||||
<td>Скорость поворота</td>
|
||||
<td>
|
||||
<?php echo $packet->getPacketOgn()->ognTurnRate; ?> ф/м
|
||||
</td>
|
||||
</tr>
|
||||
<?php endif;?>
|
||||
<?php endif;?>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
<?php endforeach; ?>
|
||||
</div>
|
||||
|
||||
<?php if (count($packets) == 0) : ?>
|
||||
<p>
|
||||
<b><i>Не найдено сырых данных.</i></b>
|
||||
</p>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
$(document).ready(function() {
|
||||
var locale = window.navigator.userLanguage || window.navigator.language;
|
||||
moment.locale(locale);
|
||||
|
||||
$('.raw-packet-timestamp').each(function() {
|
||||
if ($(this).html().trim() != '' && !isNaN($(this).html().trim())) {
|
||||
$(this).html(moment(new Date(1000 * $(this).html())).format('L LTSZ'));
|
||||
}
|
||||
});
|
||||
|
||||
$('#raw-category').change(function () {
|
||||
loadView("/views/raw.php?id=<?php echo $station->id ?>&type=" + $('#raw-type').val() + "&category=" + $('#raw-category').val() + "&rows=" + $('#raw-rows').val() + "&page=1");
|
||||
});
|
||||
|
||||
$('#raw-type').change(function () {
|
||||
loadView("/views/raw.php?id=<?php echo $station->id ?>&type=" + $('#raw-type').val() + "&category=" + $('#raw-category').val() + "&rows=" + $('#raw-rows').val() + "&page=1");
|
||||
});
|
||||
|
||||
$('#raw-rows').change(function () {
|
||||
loadView("/views/raw.php?id=<?php echo $station->id ?>&type=" + $('#raw-type').val() + "&category=" + $('#raw-category').val() + "&rows=" + $('#raw-rows').val() + "&page=1");
|
||||
});
|
||||
|
||||
if (window.parent && window.parent.trackdirect) {
|
||||
<?php if ($station->latestConfirmedLatitude != null && $station->latestConfirmedLongitude != null) : ?>
|
||||
window.parent.trackdirect.addListener("map-created", function() {
|
||||
window.parent.trackdirect.focusOnStation(<?php echo $station->id ?>, true);
|
||||
});
|
||||
<?php endif; ?>
|
||||
}
|
||||
});
|
||||
</script>
|
||||
<?php endif; ?>
|
||||
|
|
@ -0,0 +1,132 @@
|
|||
<?php require dirname(__DIR__) . "../../includes/bootstrap.php"; ?>
|
||||
|
||||
<?php
|
||||
$stations = [];
|
||||
$seconds = $_GET['seconds'] ?? 0;
|
||||
$page = $_GET['page'] ?? 1;
|
||||
$rows = $_GET['rows'] ?? 50;
|
||||
$offset = ($page - 1) * $rows;
|
||||
$count = 0;
|
||||
if (isset($_GET['q'])) {
|
||||
$stations = StationRepository::getInstance()->getObjectListByQueryString($_GET['q'], $seconds, $rows, $offset);
|
||||
$count = StationRepository::getInstance()->getNumberOfStationsByQueryString($_GET['q'], $seconds);
|
||||
}
|
||||
$pages = ceil($count / $rows);
|
||||
?>
|
||||
|
||||
<title>Поиск объектов</title>
|
||||
<div class="modal-inner-content" style="padding-bottom: 30px;">
|
||||
<p>
|
||||
Введите начало позывного/идентификатора станции (или просто нажмите «Ок», чтобы просмотреть все).
|
||||
</p>
|
||||
|
||||
<form id="station-search-form" method="get" action="">
|
||||
<div style="margin-bottom: 5px;">
|
||||
<select name ="seconds" style="width: 280px;" id="station-search-form-seconds">
|
||||
<option <?php echo ($seconds == 0 ? 'selected' : ''); ?> value="0">Включить в поиск все известные станции</option>
|
||||
<option <?php echo ($seconds == 60 ? 'selected' : ''); ?> value="60">Только станции, активные в последний час</option>
|
||||
<option <?php echo ($seconds == 360 ? 'selected' : ''); ?> value="360">Только станции, активные в последние 6 часов</option>
|
||||
<option <?php echo ($seconds == 720 ? 'selected' : ''); ?> value="720">Только станции, активные в последние 12 часов</option>
|
||||
</select>
|
||||
</div>
|
||||
<div>
|
||||
<input type="text" style="width: 280px; margin-bottom: 5px;" id="station-search-form-q" name="q" placeholder="Поиск" title="Search for a station/vehicle here!" value="<?php echo ($_GET['q'] ?? '') ?>">
|
||||
<input type="submit" value="Ок">
|
||||
</div>
|
||||
</form>
|
||||
|
||||
<div style="clear: both;"></div>
|
||||
|
||||
<?php if (count($stations) > 0) : ?>
|
||||
<p>
|
||||
<?php echo $count; ?> найдено:
|
||||
</p>
|
||||
|
||||
<?php if ($pages > 1): ?>
|
||||
<div class="pagination">
|
||||
<a class="tdlink" href="/search.php?q=<?php echo ($_GET['q'] ?? "") ?>&seconds=<?php echo $seconds ?>&page=1"><<</a>
|
||||
<?php for($i = max(1, $page - 3); $i <= min($pages, $page + 3); $i++) : ?>
|
||||
<a href="/search.php?q=<?php echo ($_GET['q'] ?? "") ?>&seconds=<?php echo $seconds ?>&page=<?php echo $i; ?>" <?php echo ($i == $page ? 'class="tdlink active"': 'class="tdlink"')?>><?php echo $i ?></a>
|
||||
<?php endfor; ?>
|
||||
<a class="tdlink" href="/search.php?q=<?php echo ($_GET['q'] ?? "") ?>&seconds=<?php echo $seconds ?>&page=<?php echo $pages; ?>">>></a>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
|
||||
<div class="datagrid datagrid-search" style="max-width:1000px;">
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th> </th>
|
||||
<th>Позывной</th>
|
||||
<th>Последний пакет</th>
|
||||
<th>Комментарий/инфо</th>
|
||||
<th>На карте</th>
|
||||
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<?php foreach ($stations as $foundStation) : ?>
|
||||
<tr>
|
||||
<td>
|
||||
<img src="<?php echo $foundStation->getIconFilePath(22, 22); ?>" alt="Symbol"/>
|
||||
</td>
|
||||
<td>
|
||||
<a class="tdlink" href="/views/overview.php?id=<?php echo $foundStation->id; ?>&imperialUnits=<?php echo $_GET['imperialUnits'] ?? 0; ?>"><?php echo htmlentities($foundStation->name) ?></a>
|
||||
</td>
|
||||
<td class="station-latest-heard-timestamp" style="white-space: nowrap;">
|
||||
<?php echo $foundStation->latestConfirmedPacketTimestamp; ?>
|
||||
</td>
|
||||
<td>
|
||||
<?php if ($foundStation->sourceId == 5 && $foundStation->getOgnDevice() !== null) : ?>
|
||||
<div style="width: 100px; display: inline-block;">Регистрация:</div><?php echo htmlspecialchars($foundStation->getOgnDevice()->registration); ?> <?php echo $foundStation->getOgnDevice()->cn ? '[' .htmlspecialchars($foundStation->getOgnDevice()->cn) . ']' : ''; ?><br/>
|
||||
<div style="width: 100px; display: inline-block;">Модель самолёта:</div><?php echo htmlspecialchars($foundStation->getOgnDevice()->aircraftModel); ?>
|
||||
<?php else : ?>
|
||||
<?php $latestPacket = PacketRepository::getInstance()->getObjectById($foundStation->latestPacketId, $foundStation->latestPacketTimestamp); ?>
|
||||
<?php echo htmlspecialchars($latestPacket->comment); ?>
|
||||
<?php endif; ?>
|
||||
</td>
|
||||
<td>
|
||||
<?php if ($foundStation->latestConfirmedPacketTimestamp > (time() - 60*60*72)) : ?>
|
||||
<a href="?sid=<?php echo $foundStation->id; ?>" onclick="
|
||||
if (window.parent && window.parent.trackdirect) {
|
||||
$('.modal', parent.document).hide();
|
||||
window.parent.trackdirect.filterOnStationId([]);
|
||||
window.parent.trackdirect.filterOnStationId([<?php echo $foundStation->id; ?>]);
|
||||
return false;
|
||||
}">Показать</a>
|
||||
<?php else : ?>
|
||||
|
||||
<?php endif; ?>
|
||||
</td>
|
||||
</tr>
|
||||
<?php endforeach; ?>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
|
||||
<?php if (isset($_GET['q']) && count($stations) == 0) : ?>
|
||||
<p>
|
||||
<b><i>Пакеты не найдены</i></b>
|
||||
</p>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
<script>
|
||||
$(document).ready(function() {
|
||||
var locale = window.navigator.userLanguage || window.navigator.language;
|
||||
moment.locale(locale);
|
||||
|
||||
$('.station-latest-heard-timestamp').each(function() {
|
||||
if ($(this).html().trim() != '' && !isNaN($(this).html().trim())) {
|
||||
$(this).html(moment(new Date(1000 * $(this).html())).format('L LTSZ'));
|
||||
}
|
||||
});
|
||||
|
||||
$('#station-search-form').bind('submit',function(e) {
|
||||
var q = $('#station-search-form-q').val();
|
||||
var seconds = $('#station-search-form-seconds').val();
|
||||
loadView('/views/search.php?q=' + q + '&seconds=' + seconds);
|
||||
e.preventDefault();
|
||||
});
|
||||
});
|
||||
</script>
|
||||
|
|
@ -0,0 +1,145 @@
|
|||
<?php require dirname(__DIR__) . "../../includes/bootstrap.php"; ?>
|
||||
|
||||
<?php $station = StationRepository::getInstance()->getObjectById($_GET['id'] ?? null); ?>
|
||||
<?php if ($station->isExistingObject()) : ?>
|
||||
<?php
|
||||
$days = 10;
|
||||
if (!isAllowedToShowOlderData()) {
|
||||
$days = 1;
|
||||
}
|
||||
?>
|
||||
<?php $senderStats = PacketPathRepository::getInstance()->getSenderPacketPathSatistics($station->id, time() - (60*60*24*$days)); ?>
|
||||
<?php $receiverStats = PacketPathRepository::getInstance()->getReceiverPacketPathSatistics($station->id, time() - (60*60*24*$days)); ?>
|
||||
|
||||
<title><?php echo $station->name; ?>, статистика</title>
|
||||
<div class="modal-inner-content">
|
||||
<div class="modal-inner-content-menu">
|
||||
<a class="tdlink" title="Overview" href="/views/overview.php?id=<?php echo $station->id ?>&imperialUnits=<?php echo $_GET['imperialUnits'] ?? 0; ?>">Подробнее</a>
|
||||
<span>Статистика</span>
|
||||
<a class="tdlink" title="Trail Chart" href="/views/trail.php?id=<?php echo $station->id ?>&imperialUnits=<?php echo $_GET['imperialUnits'] ?? 0; ?>">Графики</a>
|
||||
<a class="tdlink" title="Weather" href="/views/weather.php?id=<?php echo $station->id ?>&imperialUnits=<?php echo $_GET['imperialUnits'] ?? 0; ?>">Погода</a>
|
||||
<a class="tdlink" title="Telemetry" href="/views/telemetry.php?id=<?php echo $station->id ?>&imperialUnits=<?php echo $_GET['imperialUnits'] ?? 0; ?>">Телеметрия</a>
|
||||
<a class="tdlink" title="Raw packets" href="/views/raw.php?id=<?php echo $station->id ?>&imperialUnits=<?php echo $_GET['imperialUnits'] ?? 0; ?>">Сырые данные</a>
|
||||
</div>
|
||||
|
||||
<div class="horizontal-line"> </div>
|
||||
|
||||
<?php if (count($senderStats) > 0) : ?>
|
||||
<p>Принятые станции <?php echo htmlspecialchars($station->name) ?> <b>напрямую</b> в течение последних <?php echo $days; ?> дней.</p>
|
||||
<div class="datagrid datagrid-statistics" style="max-width:700px;">
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Станция</th>
|
||||
<th>Количество пакетов</th>
|
||||
<th>Последний пакет</th>
|
||||
<th>Максимальное расстояние</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<?php foreach ($senderStats as $stats) : ?>
|
||||
<?php $otherStation = StationRepository::getInstance()->getObjectById($stats["station_id"]) ?>
|
||||
<tr>
|
||||
<td>
|
||||
<img alt="Symbol" src="<?php echo $otherStation->getIconFilePath(22, 22); ?>" style="vertical-align: middle;"/>
|
||||
<a class="tdlink" href="/views/overview.php?id=<?php echo $otherStation->id; ?>&imperialUnits=<?php echo $_GET['imperialUnits'] ?? 0; ?>"><?php echo htmlentities($otherStation->name) ?></a>
|
||||
</td>
|
||||
<td>
|
||||
<?php echo $stats["number_of_packets"]; ?>
|
||||
</td>
|
||||
<td class="latest-heard">
|
||||
<?php echo $stats["latest_timestamp"];?>
|
||||
</td>
|
||||
|
||||
<td class="longest-distance">
|
||||
<?php if ($stats["longest_distance"] !== null) : ?>
|
||||
<?php if (isImperialUnitUser()) : ?>
|
||||
<?php echo round(convertKilometerToMile($stats["longest_distance"] / 1000), 2); ?> миль
|
||||
<?php else : ?>
|
||||
<?php echo round($stats["longest_distance"] / 1000, 2); ?> км
|
||||
<?php endif; ?>
|
||||
<?php else : ?>
|
||||
|
||||
<?php endif; ?>
|
||||
</td>
|
||||
</tr>
|
||||
<?php endforeach; ?>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<br/>
|
||||
<?php endif; ?>
|
||||
|
||||
|
||||
<?php if (count($receiverStats) > 0) : ?>
|
||||
<p>Станции, <b>напрямую</b> принятые <?php echo htmlspecialchars($station->name); ?> в течение последних <?php echo $days; ?> дней.</p>
|
||||
<div class="datagrid datagrid-statistics" style="max-width:700px;">
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Станция</th>
|
||||
<th>Количество пакетов</th>
|
||||
<th>Последний пакет</th>
|
||||
<th>Максимальное расстояние</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<?php foreach ($receiverStats as $stats) : ?>
|
||||
<?php $otherStation = StationRepository::getInstance()->getObjectById($stats["station_id"]) ?>
|
||||
<tr>
|
||||
<td>
|
||||
<img alt="Symbol" src="<?php echo $otherStation->getIconFilePath(22, 22); ?>" style="vertical-align: middle;"/>
|
||||
<a class="tdlink" href="/views/overview.php?id=<?php echo $otherStation->id; ?>&imperialUnits=<?php echo $_GET['imperialUnits'] ?? 0; ?>"><?php echo htmlentities($otherStation->name) ?></a>
|
||||
|
||||
</td>
|
||||
<td>
|
||||
<?php echo $stats["number_of_packets"]; ?>
|
||||
</td>
|
||||
<td class="latest-heard">
|
||||
<?php echo $stats["latest_timestamp"];?>
|
||||
</td>
|
||||
<td class="longest-distance">
|
||||
<?php if ($stats["longest_distance"] !== null) : ?>
|
||||
<?php if (isImperialUnitUser()) : ?>
|
||||
<?php echo round(convertKilometerToMile($stats["longest_distance"] / 1000), 2); ?> миль
|
||||
<?php else : ?>
|
||||
<?php echo round($stats["longest_distance"] / 1000, 2); ?> км
|
||||
<?php endif; ?>
|
||||
<?php else : ?>
|
||||
|
||||
<?php endif; ?>
|
||||
</td>
|
||||
</tr>
|
||||
<?php endforeach; ?>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<br/>
|
||||
<?php endif; ?>
|
||||
|
||||
|
||||
<?php if (count($senderStats) == 0 && count($receiverStats) == 0): ?>
|
||||
<p><i><b>Нет статистики за последние <?php echo $days; ?> дней.</b></i></p>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
<script>
|
||||
$(document).ready(function() {
|
||||
var locale = window.navigator.userLanguage || window.navigator.language;
|
||||
moment.locale(locale);
|
||||
|
||||
$('.latest-heard').each(function() {
|
||||
if ($(this).html().trim() != '' && !isNaN($(this).html().trim())) {
|
||||
$(this).html(moment(new Date(1000 * $(this).html())).format('L LTSZ'));
|
||||
}
|
||||
});
|
||||
|
||||
if (window.parent && window.parent.trackdirect) {
|
||||
<?php if ($station->latestConfirmedLatitude != null && $station->latestConfirmedLongitude != null) : ?>
|
||||
window.parent.trackdirect.addListener("map-created", function() {
|
||||
window.parent.trackdirect.focusOnStation(<?php echo $station->id ?>, true);
|
||||
});
|
||||
<?php endif; ?>
|
||||
}
|
||||
});
|
||||
</script>
|
||||
<?php endif; ?>
|
||||
|
|
@ -0,0 +1,285 @@
|
|||
<?php require dirname(__DIR__) . "../../includes/bootstrap.php"; ?>
|
||||
|
||||
<?php $station = StationRepository::getInstance()->getObjectById($_GET['id'] ?? null); ?>
|
||||
<?php if ($station->isExistingObject()) : ?>
|
||||
<?php
|
||||
$maxDays = 10;
|
||||
if (!isAllowedToShowOlderData()) {
|
||||
$maxDays = 1;
|
||||
}
|
||||
$page = $_GET['page'] ?? 1;
|
||||
$rows = $_GET['rows'] ?? 25;
|
||||
$offset = ($page - 1) * $rows;
|
||||
$telemetryPackets = PacketTelemetryRepository::getInstance()->getLatestObjectListByStationId($station->id, $rows, $offset, $maxDays);
|
||||
$latestPacketTelemetry = (count($telemetryPackets) > 0 ? $telemetryPackets[0] : new PacketTelemetry(null));
|
||||
$count = PacketTelemetryRepository::getInstance()->getLatestNumberOfPacketsByStationId($station->id, $maxDays);
|
||||
$pages = ceil($count / $rows);
|
||||
?>
|
||||
|
||||
<title><?php echo $station->name; ?>, телеметрия</title>
|
||||
<div class="modal-inner-content">
|
||||
<div class="modal-inner-content-menu">
|
||||
<a class="tdlink" title="Overview" href="/views/overview.php?id=<?php echo $station->id ?>&imperialUnits=<?php echo $_GET['imperialUnits'] ?? 0; ?>">Подробнее</a>
|
||||
<a class="tdlink" title="Statistics" href="/views/statistics.php?id=<?php echo $station->id ?>&imperialUnits=<?php echo $_GET['imperialUnits'] ?? 0; ?>">Статистика</a>
|
||||
<a class="tdlink" title="Trail Chart" href="/views/trail.php?id=<?php echo $station->id ?>&imperialUnits=<?php echo $_GET['imperialUnits'] ?? 0; ?>">Графики</a>
|
||||
<a class="tdlink" title="Weather" href="/views/weather.php?id=<?php echo $station->id ?>&imperialUnits=<?php echo $_GET['imperialUnits'] ?? 0; ?>">Погода</a>
|
||||
<span>Телеметрия</span>
|
||||
<a class="tdlink" title="Raw packets" href="/views/raw.php?id=<?php echo $station->id ?>&imperialUnits=<?php echo $_GET['imperialUnits'] ?? 0; ?>">Сырые данные</a>
|
||||
</div>
|
||||
|
||||
<div class="horizontal-line"> </div>
|
||||
|
||||
<?php if (count($telemetryPackets) > 0) : ?>
|
||||
|
||||
<p>Это последние полученные пакеты телеметрии, хранящиеся в базе данных для станции/объекта <?php echo $station->name; ?>. Если пакеты не отображаются, значит отправитель не передавал никакой телеметрии в последние <?php echo $maxDays; ?> дня/дней. Или сервер не смог их принять.</p>
|
||||
<p>Пакеты телеметрии используются для обмена измерениями, такими как параметры ретранслятора, напряжение батареи, показания радиации (или любые другие измерения).</p>
|
||||
|
||||
<div class="form-container">
|
||||
<select id="telemetry-category" style="float:left; margin-right: 5px;">
|
||||
<option <?php echo (($_GET['category'] ?? 1) == 1 ? 'selected' : ''); ?> value="1">Значения телеметрии</option>
|
||||
<option <?php echo (($_GET['category'] ?? 1) == 2 ? 'selected' : ''); ?> value="2">Биты телеметрии</option>
|
||||
</select>
|
||||
|
||||
<select id="telemetry-rows" style="float:left; margin-right: 5px;" class="pagination-rows">
|
||||
<option <?php echo ($rows == 25 ? 'selected' : ''); ?> value="25">25 строк</option>
|
||||
<option <?php echo ($rows == 50 ? 'selected' : ''); ?> value="50">50 строк</option>
|
||||
<option <?php echo ($rows == 100 ? 'selected' : ''); ?> value="100">100 строк</option>
|
||||
<option <?php echo ($rows == 200 ? 'selected' : ''); ?> value="200">200 строк</option>
|
||||
<option <?php echo ($rows == 300 ? 'selected' : ''); ?> value="300">300 строк</option>
|
||||
</select>
|
||||
</div>
|
||||
|
||||
<?php if ($pages > 1): ?>
|
||||
<div class="pagination">
|
||||
<a class="tdlink" href="/views/telemetry.php?id=<?php echo $station->id; ?>&category=<?php echo ($_GET['category'] ?? 1); ?>&rows=<?php echo $rows; ?>&page=1"><<</a>
|
||||
<?php for($i = max(1, $page - 3); $i <= min($pages, $page + 3); $i++) : ?>
|
||||
<a href="/views/telemetry.php?id=<?php echo $station->id; ?>&category=<?php echo ($_GET['category'] ?? 1); ?>&rows=<?php echo $rows; ?>&page=<?php echo $i; ?>" <?php echo ($i == $page ? 'class="tdlink active"': 'class="tdlink"')?>><?php echo $i ?></a>
|
||||
<?php endfor; ?>
|
||||
<a class="tdlink" href="/views/telemetry.php?id=<?php echo $station->id; ?>&category=<?php echo ($_GET['category'] ?? 1); ?>&rows=<?php echo $rows; ?>&page=<?php echo $pages; ?>">>></a>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
|
||||
<?php if (($_GET['category'] ?? 1) == 1) : ?>
|
||||
<div class="datagrid datagrid-telemetry1" style="max-width:1000px;">
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Время</th>
|
||||
<th><?php echo htmlspecialchars($latestPacketTelemetry->getValueParameterName(1)); ?>*</th>
|
||||
<th><?php echo htmlspecialchars($latestPacketTelemetry->getValueParameterName(2)); ?>*</th>
|
||||
<th><?php echo htmlspecialchars($latestPacketTelemetry->getValueParameterName(3)); ?>*</th>
|
||||
<th><?php echo htmlspecialchars($latestPacketTelemetry->getValueParameterName(4)); ?>*</th>
|
||||
<th><?php echo htmlspecialchars($latestPacketTelemetry->getValueParameterName(5)); ?>*</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<?php foreach ($telemetryPackets as $packetTelemetry) : ?>
|
||||
|
||||
<tr>
|
||||
<td class="telemetrytime">
|
||||
<?php echo ($packetTelemetry->wxRawTimestamp != null?$packetTelemetry->wxRawTimestamp:$packetTelemetry->timestamp); ?>
|
||||
</td>
|
||||
<td>
|
||||
<?php if ($packetTelemetry->val1 !== null) : ?>
|
||||
<?php echo round($packetTelemetry->getValue(1), 2); ?> <?php echo htmlspecialchars($packetTelemetry->getValueUnit(1)); ?>
|
||||
<?php else : ?>
|
||||
-
|
||||
<?php endif; ?>
|
||||
</td>
|
||||
<td>
|
||||
<?php if ($packetTelemetry->val1 !== null) : ?>
|
||||
<?php echo round($packetTelemetry->getValue(2), 2); ?> <?php echo htmlspecialchars($packetTelemetry->getValueUnit(2)); ?>
|
||||
<?php else : ?>
|
||||
-
|
||||
<?php endif; ?>
|
||||
</td>
|
||||
<td>
|
||||
<?php if ($packetTelemetry->val1 !== null) : ?>
|
||||
<?php echo round($packetTelemetry->getValue(3), 2); ?> <?php echo htmlspecialchars($packetTelemetry->getValueUnit(3)); ?>
|
||||
<?php else : ?>
|
||||
-
|
||||
<?php endif; ?>
|
||||
</td>
|
||||
<td>
|
||||
<?php if ($packetTelemetry->val1 !== null) : ?>
|
||||
<?php echo round($packetTelemetry->getValue(4), 2); ?> <?php echo htmlspecialchars($packetTelemetry->getValueUnit(4)); ?>
|
||||
<?php else : ?>
|
||||
-
|
||||
<?php endif; ?>
|
||||
</td>
|
||||
<td>
|
||||
<?php if ($packetTelemetry->val1 !== null) : ?>
|
||||
<?php echo round($packetTelemetry->getValue(5), 2); ?> <?php echo htmlspecialchars($packetTelemetry->getValueUnit(5)); ?>
|
||||
<?php else : ?>
|
||||
-
|
||||
<?php endif; ?>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<?php endforeach; ?>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
|
||||
<div class="telemetry-subtable">
|
||||
<div>
|
||||
<div>
|
||||
*Используемые коэффициенты уравнения:
|
||||
</div>
|
||||
<div>
|
||||
<?php echo htmlspecialchars($latestPacketTelemetry->getValueParameterName(1)); ?>: <?php echo implode(', ', $latestPacketTelemetry->getEqnsValue(1)); ?>
|
||||
</div>
|
||||
<div>
|
||||
<?php echo htmlspecialchars($latestPacketTelemetry->getValueParameterName(2)); ?>: <?php echo implode(', ', $latestPacketTelemetry->getEqnsValue(2)); ?>
|
||||
</div>
|
||||
<div>
|
||||
<?php echo htmlspecialchars($latestPacketTelemetry->getValueParameterName(3)); ?>: <?php echo implode(', ', $latestPacketTelemetry->getEqnsValue(3)); ?>
|
||||
</div>
|
||||
<div>
|
||||
<?php echo htmlspecialchars($latestPacketTelemetry->getValueParameterName(4)); ?>: <?php echo implode(', ', $latestPacketTelemetry->getEqnsValue(4)); ?>
|
||||
</div>
|
||||
<div>
|
||||
<?php echo htmlspecialchars($latestPacketTelemetry->getValueParameterName(5)); ?>: <?php echo implode(', ', $latestPacketTelemetry->getEqnsValue(5)); ?>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
|
||||
<?php if (($_GET['category'] ?? 1) == 2) : ?>
|
||||
<div class="datagrid datagrid-telemetry2" style="max-width:1000px;">
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Время</th>
|
||||
<th><?php echo htmlspecialchars($latestPacketTelemetry->getBitParameterName(1)); ?>*</th>
|
||||
<th><?php echo htmlspecialchars($latestPacketTelemetry->getBitParameterName(2)); ?>*</th>
|
||||
<th><?php echo htmlspecialchars($latestPacketTelemetry->getBitParameterName(3)); ?>*</th>
|
||||
<th><?php echo htmlspecialchars($latestPacketTelemetry->getBitParameterName(4)); ?>*</th>
|
||||
<th><?php echo htmlspecialchars($latestPacketTelemetry->getBitParameterName(5)); ?>*</th>
|
||||
<th><?php echo htmlspecialchars($latestPacketTelemetry->getBitParameterName(6)); ?>*</th>
|
||||
<th><?php echo htmlspecialchars($latestPacketTelemetry->getBitParameterName(7)); ?>*</th>
|
||||
<th><?php echo htmlspecialchars($latestPacketTelemetry->getBitParameterName(8)); ?>*</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<?php foreach ($telemetryPackets as $i => $packetTelemetry) : ?>
|
||||
<?php if ($packetTelemetry->bits !== null && $i >= 2 ) : ?>
|
||||
<tr>
|
||||
<td class="telemetrytime">
|
||||
<?php echo $packetTelemetry->timestamp; ?>
|
||||
</td>
|
||||
<td>
|
||||
<div class="<?php echo ($packetTelemetry->getBit(1) == 1?'telemetry-biton':'telemetry-bitoff'); ?>">
|
||||
<?php echo htmlspecialchars($packetTelemetry->getBitLabel(1)); ?>
|
||||
</div>
|
||||
</td>
|
||||
<td>
|
||||
<div class="<?php echo ($packetTelemetry->getBit(2) == 1?'telemetry-biton':'telemetry-bitoff'); ?>">
|
||||
<?php echo htmlspecialchars($packetTelemetry->getBitLabel(2)); ?>
|
||||
</div>
|
||||
</td>
|
||||
<td>
|
||||
<div class="<?php echo ($packetTelemetry->getBit(3) == 1?'telemetry-biton':'telemetry-bitoff'); ?>">
|
||||
<?php echo htmlspecialchars($packetTelemetry->getBitLabel(3)); ?>
|
||||
</div>
|
||||
</td>
|
||||
<td>
|
||||
<div class="<?php echo ($packetTelemetry->getBit(4) == 1?'telemetry-biton':'telemetry-bitoff'); ?>">
|
||||
<?php echo htmlspecialchars($packetTelemetry->getBitLabel(4)); ?>
|
||||
</div>
|
||||
</td>
|
||||
<td>
|
||||
<div class="<?php echo ($packetTelemetry->getBit(5) == 1?'telemetry-biton':'telemetry-bitoff'); ?>">
|
||||
<?php echo htmlspecialchars($packetTelemetry->getBitLabel(5)); ?>
|
||||
</div>
|
||||
</td>
|
||||
<td>
|
||||
<div class="<?php echo ($packetTelemetry->getBit(6) == 1?'telemetry-biton':'telemetry-bitoff'); ?>">
|
||||
<?php echo htmlspecialchars($packetTelemetry->getBitLabel(6)); ?>
|
||||
</div>
|
||||
</td>
|
||||
<td>
|
||||
<div class="<?php echo ($packetTelemetry->getBit(7) == 1?'telemetry-biton':'telemetry-bitoff'); ?>">
|
||||
<?php echo htmlspecialchars($packetTelemetry->getBitLabel(7)); ?>
|
||||
</div>
|
||||
</td>
|
||||
<td>
|
||||
<div class="<?php echo ($packetTelemetry->getBit(8) == 1?'telemetry-biton':'telemetry-bitoff'); ?>">
|
||||
<?php echo htmlspecialchars($packetTelemetry->getBitLabel(8)); ?>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
<?php endif; ?>
|
||||
<?php endforeach; ?>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
|
||||
<div class="telemetry-subtable">
|
||||
<div>
|
||||
<div>
|
||||
*Используемое битовое значение:
|
||||
</div>
|
||||
<div>
|
||||
<?php echo $latestPacketTelemetry->getBitSense(1); ?>
|
||||
<?php echo $latestPacketTelemetry->getBitSense(2); ?>
|
||||
<?php echo $latestPacketTelemetry->getBitSense(3); ?>
|
||||
<?php echo $latestPacketTelemetry->getBitSense(4); ?>
|
||||
<?php echo $latestPacketTelemetry->getBitSense(5); ?>
|
||||
<?php echo $latestPacketTelemetry->getBitSense(6); ?>
|
||||
<?php echo $latestPacketTelemetry->getBitSense(7); ?>
|
||||
<?php echo $latestPacketTelemetry->getBitSense(8); ?>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
<?php endif; ?>
|
||||
|
||||
|
||||
<?php if (count($telemetryPackets) > 0) : ?>
|
||||
<br/>
|
||||
<ul>
|
||||
<li>Имена параметров для аналоговых каналов будут Value1 (значение1), Value2 (значение2), Value3 (значение3 и т. д.) до Value5, если станция не отправила пакет PARAM, в котором указаны имена параметров для каждого аналогового канала.</li>
|
||||
<li>Каждое аналоговое значение представляет собой десятичное число от 000 до 255 (в соответствии со спецификациями APRS). Приемник использует коэффициенты уравнения телеметрии, чтобы восстановить исходные значения датчика. Если EQNS-пакет с коэффициентами уравнения не отправлен, будет показано значение как есть (это соответствует коэффициентам уравнения a=0, b=1 и c=0).<br/>Отправленные коэффициенты уравнения используются в уравнении: a * значение<sup>2</sup> + b * значение + c.</li>
|
||||
<li>Единицы для аналоговых значений не будут показаны, если станция не отправила UNIT-пакет, указывающий, какие единицы использовать.</li>
|
||||
<li>Имена параметров для цифровых битов будут такими: Bit1, Bit2, Bit3 (до Bit8), если станция не отправила пакет PARAM, определяющий имена параметров для каждого цифрового бита.</li>
|
||||
<li>Все битовые метки будут называться "On" (включено), если станция не отправила UNIT-пакет, в котором указана метка каждого бита.</li>
|
||||
<li>Бит считается <b>On</b> (включенным), когда он равен 1, если станция не отправила пакет BITS, который указывает другой «смысл бита» (пакет BITS показывает состояние битов, которые соответствуют биту метки)</li>
|
||||
</ul>
|
||||
<?php endif; ?>
|
||||
|
||||
<?php if (count($telemetryPackets) == 0) : ?>
|
||||
<p><i><b>Нет последних значений телеметрии.</b></i></p>
|
||||
<?php endif; ?>
|
||||
|
||||
</div>
|
||||
|
||||
<script>
|
||||
$(document).ready(function() {
|
||||
var locale = window.navigator.userLanguage || window.navigator.language;
|
||||
moment.locale(locale);
|
||||
|
||||
$('.telemetrytime').each(function() {
|
||||
if ($(this).html().trim() != '' && !isNaN($(this).html().trim())) {
|
||||
$(this).html(moment(new Date(1000 * $(this).html())).format('L LTSZ'));
|
||||
}
|
||||
});
|
||||
|
||||
$('#telemetry-category').change(function () {
|
||||
loadView("/views/telemetry.php?id=<?php echo $station->id ?>&category=" + $('#telemetry-category').val() + "&rows=" + $('#telemetry-rows').val() + "&page=1");
|
||||
});
|
||||
|
||||
$('#telemetry-rows').change(function () {
|
||||
loadView("/views/telemetry.php?id=<?php echo $station->id ?>&category=" + $('#telemetry-category').val() + "&rows=" + $('#telemetry-rows').val() + "&page=1");
|
||||
});
|
||||
|
||||
if (window.parent && window.parent.trackdirect) {
|
||||
<?php if ($station->latestConfirmedLatitude != null && $station->latestConfirmedLongitude != null) : ?>
|
||||
window.parent.trackdirect.addListener("map-created", function() {
|
||||
window.parent.trackdirect.focusOnStation(<?php echo $station->id ?>, true);
|
||||
});
|
||||
<?php endif; ?>
|
||||
}
|
||||
});
|
||||
</script>
|
||||
<?php endif; ?>
|
||||
|
|
@ -0,0 +1,192 @@
|
|||
<?php require dirname(__DIR__) . "../../includes/bootstrap.php"; ?>
|
||||
|
||||
<?php $station = StationRepository::getInstance()->getObjectById($_GET['id'] ?? null); ?>
|
||||
<?php if ($station->isExistingObject()) : ?>
|
||||
<title><?php echo $station->name; ?>, графики</title>
|
||||
<div class="modal-inner-content">
|
||||
<div class="modal-inner-content-menu">
|
||||
<a class="tdlink" title="Overview" href="/views/overview.php?id=<?php echo $station->id ?>&imperialUnits=<?php echo $_GET['imperialUnits'] ?? 0; ?>">Подробнее</a>
|
||||
<a class="tdlink" title="Statistics" href="/views/statistics.php?id=<?php echo $station->id ?>&imperialUnits=<?php echo $_GET['imperialUnits'] ?? 0; ?>">Статистика</a>
|
||||
<span>Графики</span>
|
||||
<a class="tdlink" title="Weather" href="/views/weather.php?id=<?php echo $station->id ?>&imperialUnits=<?php echo $_GET['imperialUnits'] ?? 0; ?>">Погода</a>
|
||||
<a class="tdlink" title="Telemetry" href="/views/telemetry.php?id=<?php echo $station->id ?>&imperialUnits=<?php echo $_GET['imperialUnits'] ?? 0; ?>">Телеметрия</a>
|
||||
<a class="tdlink" title="Raw packets" href="/views/raw.php?id=<?php echo $station->id ?>&imperialUnits=<?php echo $_GET['imperialUnits'] ?? 0; ?>">Сырые данные</a>
|
||||
</div>
|
||||
|
||||
<div class="horizontal-line"> </div>
|
||||
|
||||
<p>
|
||||
Показать диаграмму для:
|
||||
</p>
|
||||
|
||||
|
||||
<div class="form-container">
|
||||
<select id="trail-type" style="float:left; margin-right: 5px;">
|
||||
<option <?php echo (($_GET['type'] ?? 'speed') == 'speed' ? 'selected' : ''); ?> value="speed">Скорость</option>
|
||||
<option <?php echo (($_GET['type'] ?? 'speed') == 'altitude' ? 'selected' : ''); ?> value="altitude">Высота</option>
|
||||
</select>
|
||||
|
||||
<select id="trail-hours" style="float:left; margin-right: 5px;">
|
||||
<option <?php echo (($_GET['hours'] ?? 1) == 1 ? 'selected' : ''); ?> value="1">Последний час</option>
|
||||
<option <?php echo (($_GET['hours'] ?? 1) == 3 ? 'selected' : ''); ?> value="3">Последние 3 часа</option>
|
||||
<option <?php echo (($_GET['hours'] ?? 1) == 24 ? 'selected' : ''); ?> value="24">Последние 24 часа</option>
|
||||
</select>
|
||||
</div>
|
||||
|
||||
<div style="clear: both;"></div>
|
||||
|
||||
<div id="trail-curve-chart" style="width:850px; height: 350px;"></div>
|
||||
|
||||
<p>
|
||||
*ось x диаграммы основана на вашем часовом поясе (а не на часовом поясе станции).
|
||||
</p>
|
||||
</div>
|
||||
<script>
|
||||
$(document).ready(function() {
|
||||
var locale = window.navigator.userLanguage || window.navigator.language;
|
||||
moment.locale(locale);
|
||||
|
||||
$('.raw-packet-timestamp').each(function() {
|
||||
if ($(this).html().trim() != '' && !isNaN($(this).html().trim())) {
|
||||
$(this).html(moment(new Date(1000 * $(this).html())).format('L LTSZ'));
|
||||
}
|
||||
});
|
||||
|
||||
if (window.parent && window.parent.trackdirect) {
|
||||
<?php if ($station->latestConfirmedLatitude != null && $station->latestConfirmedLongitude != null) : ?>
|
||||
window.parent.trackdirect.addListener("map-created", function() {
|
||||
window.parent.trackdirect.focusOnStation(<?php echo $station->id ?>, true);
|
||||
});
|
||||
<?php endif; ?>
|
||||
}
|
||||
|
||||
function loadTrailChart(stationId, hours, type, imperialUnits) {
|
||||
$('#trail-curve-chart').html('Загрузка');
|
||||
|
||||
$.ajax({
|
||||
type: 'GET',
|
||||
url: '/data/trail.php?id=' + stationId + '&hours=' + hours + '&type=' + type + '&imperialUnits=' + imperialUnits,
|
||||
dataType: 'json'
|
||||
}).done(function( result ) {
|
||||
var onlyZeroValues = true;
|
||||
for(i=1; i < result.length; i++) {
|
||||
if (result[i][0] === parseInt(result[i][0], 10)) {
|
||||
result[i][0] = new Date(result[i][0] * 1000);
|
||||
}
|
||||
|
||||
if (result[i][1] != 0 && result[i][1] != null) {
|
||||
onlyZeroValues = false;
|
||||
}
|
||||
}
|
||||
|
||||
var endTimestamp = new Date();
|
||||
var startTimestamp = new Date(endTimestamp.getTime() - 1000*60*60*hours);
|
||||
|
||||
if (result != null && result.length > 1) {
|
||||
google.charts.setOnLoadCallback(
|
||||
function () {
|
||||
var data = google.visualization.arrayToDataTable(result);
|
||||
|
||||
var pointSize = 0; // default
|
||||
var dataOpacity = 1;
|
||||
var trigger = 'selection';
|
||||
var series = {
|
||||
0: { lineWidth: 2},
|
||||
1: { lineWidth: 1, color: 'darkgreen'},
|
||||
};
|
||||
var legend = {position: 'none'};
|
||||
var title = result[0][1];
|
||||
var curveType = 'none'; // can be 'function' or 'none'
|
||||
var vAxis = {};
|
||||
var hAxis = {
|
||||
minValue: startTimestamp,
|
||||
maxValue: endTimestamp
|
||||
};
|
||||
var explorer = {
|
||||
axis: 'horizontal',
|
||||
keepInBounds:true,
|
||||
maxZoomIn: 50,
|
||||
maxZoomOut: 1,
|
||||
actions: ['dragToPan', 'rightClickToReset']
|
||||
};
|
||||
explorer = null;
|
||||
|
||||
if (result[0].length > 2) {
|
||||
// We need to show legend if we plot more than one thing
|
||||
legend = {position: 'top'};
|
||||
title = null;
|
||||
}
|
||||
|
||||
if (onlyZeroValues) {
|
||||
// dot chart with big dots
|
||||
var series = {
|
||||
0: { lineWidth: 0, pointsVisible: true, pointSize: 4 },
|
||||
}
|
||||
} else if (hours < 24) {
|
||||
// line chart
|
||||
var series = {
|
||||
0: { lineWidth: 2, pointsVisible: false},
|
||||
}
|
||||
} else {
|
||||
// dot chart
|
||||
var series = {
|
||||
0: { lineWidth: 0, pointsVisible: true, pointSize: 1 },
|
||||
}
|
||||
}
|
||||
|
||||
if (type == 'speed') {
|
||||
// I'm pretty sure we won't have negative speed
|
||||
var vAxis = {
|
||||
viewWindow : {
|
||||
min: 0
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
var chartArea = {'width': '90%', 'height': '80%', 'left': '8%'};
|
||||
var options = {
|
||||
title: title,
|
||||
curveType: curveType,
|
||||
tooltip : {
|
||||
trigger: trigger
|
||||
},
|
||||
pointsVisible : false,
|
||||
pointSize: pointSize,
|
||||
dataOpacity: dataOpacity,
|
||||
series: series,
|
||||
chartArea: chartArea,
|
||||
legend: legend,
|
||||
hAxis: hAxis,
|
||||
vAxis: vAxis,
|
||||
interpolateNulls: false,
|
||||
crosshair: {
|
||||
trigger: 'focus',
|
||||
opacity: 0.5
|
||||
},
|
||||
explorer: explorer
|
||||
};
|
||||
|
||||
var chart = new google.visualization.LineChart(document.getElementById('trail-curve-chart'));
|
||||
|
||||
chart.draw(data, options);
|
||||
});
|
||||
|
||||
} else {
|
||||
$('#trail-curve-chart').html('<br/><p><i><b>Нет данных для создания диаграммы.</b></i></p>');
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
$('#trail-hours').change(function() {
|
||||
loadTrailChart(<?php echo $station->id; ?>, $('#trail-hours').val(), $('#trail-type').val(), <?php echo $_GET['imperialUnits'] ?? 0; ?>);
|
||||
});
|
||||
|
||||
$('#trail-type').change(function() {
|
||||
loadTrailChart(<?php echo $station->id; ?>, $('#trail-hours').val(), $('#trail-type').val(), <?php echo $_GET['imperialUnits'] ?? 0; ?>);
|
||||
});
|
||||
|
||||
loadTrailChart(<?php echo $station->id; ?>, $('#trail-hours').val(), $('#trail-type').val(), <?php echo $_GET['imperialUnits'] ?? 0; ?>);
|
||||
|
||||
});
|
||||
</script>
|
||||
<?php endif; ?>
|
||||
|
|
@ -0,0 +1,237 @@
|
|||
<?php require dirname(__DIR__) . "../../includes/bootstrap.php"; ?>
|
||||
|
||||
<?php $station = StationRepository::getInstance()->getObjectById($_GET['id'] ?? null); ?>
|
||||
<?php if ($station->isExistingObject()) : ?>
|
||||
<?php
|
||||
$maxDays = 10;
|
||||
if (!isAllowedToShowOlderData()) {
|
||||
$maxDays = 1;
|
||||
}
|
||||
$page = $_GET['page'] ?? 1;
|
||||
$rows = $_GET['rows'] ?? 25;
|
||||
$offset = ($page - 1) * $rows;
|
||||
$weatherPackets = PacketWeatherRepository::getInstance()->getLatestObjectListByStationIdAndLimit($station->id, $rows, $offset, $maxDays);
|
||||
$count = PacketWeatherRepository::getInstance()->getLatestNumberOfPacketsByStationIdAndLimit($station->id, $maxDays);
|
||||
$pages = ceil($count / $rows);
|
||||
?>
|
||||
|
||||
<title><?php echo $station->name; ?>, погода</title>
|
||||
<div class="modal-inner-content">
|
||||
<div class="modal-inner-content-menu">
|
||||
<a class="tdlink" title="Overview" href="/views/overview.php?id=<?php echo $station->id ?>&imperialUnits=<?php echo $_GET['imperialUnits'] ?? 0; ?>">Подробнее</a>
|
||||
<a class="tdlink" title="Statistics" href="/views/statistics.php?id=<?php echo $station->id ?>&imperialUnits=<?php echo $_GET['imperialUnits'] ?? 0; ?>">Статистика</a>
|
||||
<a class="tdlink" title="Trail Chart" href="/views/trail.php?id=<?php echo $station->id ?>&imperialUnits=<?php echo $_GET['imperialUnits'] ?? 0; ?>">Графики</a>
|
||||
<span>Погода</span>
|
||||
<a class="tdlink" title="Telemetry" href="/views/telemetry.php?id=<?php echo $station->id ?>&imperialUnits=<?php echo $_GET['imperialUnits'] ?? 0; ?>">Телеметрия</a>
|
||||
<a class="tdlink" title="Raw packets" href="/views/raw.php?id=<?php echo $station->id ?>&imperialUnits=<?php echo $_GET['imperialUnits'] ?? 0; ?>">Сырые данные</a>
|
||||
</div>
|
||||
|
||||
<div class="horizontal-line"> </div>
|
||||
|
||||
<?php if (count($weatherPackets) > 0) : ?>
|
||||
|
||||
<p>Это последние полученные погодные пакеты, хранящиеся в базе данных для станции/объекта <?php echo $station->name; ?>. Если пакеты не отображаются, отправитель не передавал никаких погодных пакетов в последние <?php echo $maxDays; ?> дня/дней.</p>
|
||||
|
||||
<div class="form-container">
|
||||
<select id="weather-rows" style="float:left; margin-right: 5px;" class="pagination-rows">
|
||||
<option <?php echo ($rows == 25 ? 'selected' : ''); ?> value="25">25 строк</option>
|
||||
<option <?php echo ($rows == 50 ? 'selected' : ''); ?> value="50">50 строк</option>
|
||||
<option <?php echo ($rows == 100 ? 'selected' : ''); ?> value="100">100 строк</option>
|
||||
<option <?php echo ($rows == 200 ? 'selected' : ''); ?> value="200">200 строк</option>
|
||||
<option <?php echo ($rows == 300 ? 'selected' : ''); ?> value="300">300 строк</option>
|
||||
</select>
|
||||
</div>
|
||||
|
||||
<?php if ($pages > 1): ?>
|
||||
<div class="pagination">
|
||||
<a class="tdlink" href="/views/weather.php?id=<?php echo $station->id; ?>&rows=<?php echo $rows; ?>&page=1"><<</a>
|
||||
<?php for($i = max(1, $page - 3); $i <= min($pages, $page + 3); $i++) : ?>
|
||||
<a href="/views/weather.php?id=<?php echo $station->id; ?>&rows=<?php echo $rows; ?>&page=<?php echo $i; ?>" <?php echo ($i == $page ? 'class="tdlink active"': 'class="tdlink"')?>><?php echo $i ?></a>
|
||||
<?php endfor; ?>
|
||||
<a class="tdlink" href="/views/weather.php?id=<?php echo $station->id; ?>&rows=<?php echo $rows; ?>&page=<?php echo $pages; ?>">>></a>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
|
||||
|
||||
<div class="datagrid datagrid-weather" style="max-width:1000px;">
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Время</th>
|
||||
<th>Температура</th>
|
||||
<th>Влажность</th>
|
||||
<th>Давление</th>
|
||||
<th>Осадки*</th>
|
||||
<th>Ветер**</th>
|
||||
<th>Освещённость</th>
|
||||
<th>Снег</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<?php foreach ($weatherPackets as $packetWeather) : ?>
|
||||
|
||||
<tr>
|
||||
<td class="weathertime">
|
||||
<?php echo ($packetWeather->wxRawTimestamp != null?$packetWeather->wxRawTimestamp:$packetWeather->timestamp); ?>
|
||||
</td>
|
||||
<td>
|
||||
<?php if ($packetWeather->temperature !== null) : ?>
|
||||
<?php if (isImperialUnitUser()) : ?>
|
||||
<?php echo round(convertCelciusToFahrenheit($packetWeather->temperature), 2); ?>° F
|
||||
<?php else : ?>
|
||||
<?php echo round($packetWeather->temperature, 2); ?>° C
|
||||
<?php endif; ?>
|
||||
<?php else : ?>
|
||||
-
|
||||
<?php endif; ?>
|
||||
</td>
|
||||
<td>
|
||||
<?php if ($packetWeather->humidity !== null) : ?>
|
||||
<?php echo $packetWeather->humidity; ?>%
|
||||
<?php else : ?>
|
||||
-
|
||||
<?php endif; ?>
|
||||
</td>
|
||||
<td>
|
||||
<?php if ($packetWeather->pressure !== null) : ?>
|
||||
<?php if (isImperialUnitUser()) : ?>
|
||||
<?php echo round(convertMbarToMmhg($packetWeather->pressure),1); ?> мм.рт.ст.
|
||||
<?php else : ?>
|
||||
<?php echo round($packetWeather->pressure,1); ?> гПа
|
||||
<?php endif; ?>
|
||||
|
||||
<?php else : ?>
|
||||
-
|
||||
<?php endif; ?>
|
||||
</td>
|
||||
|
||||
<?php if ($weatherPackets[0]->rain_1h !== null) : ?>
|
||||
<td title="<?php echo $packetWeather->getRainSummary(false, true, true); ?>">
|
||||
<?php if ($packetWeather->rain_1h !== null) : ?>
|
||||
<?php if (isImperialUnitUser()) : ?>
|
||||
<?php echo round(convertMmToInch($packetWeather->rain_1h), 2); ?> in
|
||||
<?php else : ?>
|
||||
<?php echo round($packetWeather->rain_1h, 2); ?> мм
|
||||
<?php endif; ?>
|
||||
<?php else : ?>
|
||||
-
|
||||
<?php endif; ?>
|
||||
</td>
|
||||
<?php elseif ($weatherPackets[0]->rain_24h !== null) : ?>
|
||||
<td title="<?php echo $packetWeather->getRainSummary(true, false, true); ?>">
|
||||
<?php if ($packetWeather->rain_24h !== null) : ?>
|
||||
<?php if (isImperialUnitUser()) : ?>
|
||||
<?php echo round(convertMmToInch($packetWeather->rain_24h), 2); ?> in
|
||||
<?php else : ?>
|
||||
<?php echo round($packetWeather->rain_24h, 2); ?> мм
|
||||
<?php endif; ?>
|
||||
<?php else : ?>
|
||||
-
|
||||
<?php endif; ?>
|
||||
</td>
|
||||
<?php else : ?>
|
||||
<td title="<?php echo $packetWeather->getRainSummary(true, true, false); ?>">
|
||||
<?php if ($packetWeather->rain_since_midnight !== null) : ?>
|
||||
<?php if (isImperialUnitUser()) : ?>
|
||||
<?php echo round(convertMmToInch($packetWeather->rain_since_midnight), 2); ?> in
|
||||
<?php else : ?>
|
||||
<?php echo round($packetWeather->rain_since_midnight, 2); ?> мм
|
||||
<?php endif; ?>
|
||||
<?php else : ?>
|
||||
-
|
||||
<?php endif; ?>
|
||||
</td>
|
||||
<?php endif; ?>
|
||||
|
||||
<td title="Wind gust: <?php echo ($packetWeather->wind_gust !== null?round($packetWeather->wind_gust,2):'-'); ?> м/с">
|
||||
|
||||
<?php if (isImperialUnitUser()) : ?>
|
||||
<?php if ($packetWeather->wind_speed !== null && $packetWeather->wind_speed > 0) : ?>
|
||||
<?php echo round(convertMpsToMph($packetWeather->wind_speed), 2); ?> миль/ч, <?php echo $packetWeather->wind_direction; ?>°
|
||||
<?php elseif($packetWeather->wind_speed !== null) : ?>
|
||||
<?php echo round(convertMpsToMph($packetWeather->wind_speed), 2); ?> миль/ч
|
||||
<?php else : ?>
|
||||
-
|
||||
<?php endif; ?>
|
||||
|
||||
<?php else : ?>
|
||||
<?php if ($packetWeather->wind_speed !== null && $packetWeather->wind_speed > 0) : ?>
|
||||
<?php echo round($packetWeather->wind_speed, 2); ?> м/с, <?php echo $packetWeather->wind_direction; ?>°
|
||||
<?php elseif($packetWeather->wind_speed !== null) : ?>
|
||||
<?php echo round($packetWeather->wind_speed, 2); ?> м/с
|
||||
<?php else : ?>
|
||||
-
|
||||
<?php endif; ?>
|
||||
<?php endif; ?>
|
||||
</td>
|
||||
|
||||
<td>
|
||||
<?php if ($packetWeather->luminosity !== null) : ?>
|
||||
<?php echo round($packetWeather->luminosity,0); ?> Вт/м²
|
||||
<?php else : ?>
|
||||
-
|
||||
<?php endif; ?>
|
||||
</td>
|
||||
|
||||
<td>
|
||||
<?php if ($packetWeather->snow !== null) : ?>
|
||||
<?php if (isImperialUnitUser()) : ?>
|
||||
<?php echo round(convertMmToInch($packetWeather->snow), 0); ?> in
|
||||
<?php else : ?>
|
||||
<?php echo round($packetWeather->snow, 0); ?> мм
|
||||
<?php endif; ?>
|
||||
<?php else : ?>
|
||||
-
|
||||
<?php endif; ?>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<?php endforeach; ?>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<p>
|
||||
<?php if ($weatherPackets[0]->rain_1h !== null) : ?>
|
||||
* Осадки за последний час (наведите курсор, чтобы увидеть другие измерения)<br/>
|
||||
<?php elseif ($weatherPackets[0]->rain_24h !== null) : ?>
|
||||
* Осадки за последние 24 часа (наведите курсор, чтобы увидеть другие измерения)<br/>
|
||||
<?php else : ?>
|
||||
* Осадки с полуночи (наведите курсор, чтобы увидеть другие измерения)<br/>
|
||||
<?php endif; ?>
|
||||
** Текущая скорость ветра в м/с (наведите курсор, чтобы увидеть текущую скорость порывов ветра)
|
||||
</p>
|
||||
|
||||
<?php endif; ?>
|
||||
|
||||
<?php if (count($weatherPackets) == 0) : ?>
|
||||
<p><i><b>Нет последних погодных отчётов.</b></i></p>
|
||||
<?php endif; ?>
|
||||
|
||||
</div>
|
||||
|
||||
<script>
|
||||
$(document).ready(function() {
|
||||
var locale = window.navigator.userLanguage || window.navigator.language;
|
||||
moment.locale(locale);
|
||||
|
||||
$('.weathertime').each(function() {
|
||||
if ($(this).html().trim() != '' && !isNaN($(this).html().trim())) {
|
||||
$(this).html(moment(new Date(1000 * $(this).html())).format('L LTSZ'));
|
||||
}
|
||||
});
|
||||
|
||||
$('#weather-rows').change(function () {
|
||||
loadView("/views/weather.php?id=<?php echo $station->id ?>&rows=" + $('#weather-rows').val() + "&page=1");
|
||||
});
|
||||
|
||||
|
||||
if (window.parent && window.parent.trackdirect) {
|
||||
<?php if ($station->latestConfirmedLatitude != null && $station->latestConfirmedLongitude != null) : ?>
|
||||
window.parent.trackdirect.addListener("map-created", function() {
|
||||
window.parent.trackdirect.focusOnStation(<?php echo $station->id ?>, true);
|
||||
});
|
||||
<?php endif; ?>
|
||||
}
|
||||
});
|
||||
</script>
|
||||
<?php endif; ?>
|
||||
Loading…
Reference in New Issue