From e05f5cec4b7443a59caa3ef6ff665b144ed3627b Mon Sep 17 00:00:00 2001 From: Martin Francis Date: Tue, 31 Mar 2020 09:43:10 -0400 Subject: [PATCH] 2.4.0 Added Signals Listeners Count, Log Delete now heals signal specs --- composer.json | 1 + src/Columns/ListenerLogs.php | 2 +- src/Columns/Listeners.php | 46 ++--- src/Columns/SignalLogs.php | 2 +- src/Columns/Signals.php | 19 +- src/Entity/Signal.php | 23 ++- src/Repository/SignalRepository.php | 264 +++++++++++++++++-------- templates/i18n.html.twig | 26 +-- templates/listener/logs.grid.html.twig | 7 +- templates/listeners/grid.html.twig | 2 +- templates/signal/grid.html.twig | 8 +- templates/signals/list.html.twig | 4 +- translations/messages.de.xlf | 24 +++ translations/messages.en.xlf | 24 +++ translations/messages.es.xlf | 24 +++ translations/messages.fr.xlf | 24 +++ 16 files changed, 371 insertions(+), 129 deletions(-) diff --git a/composer.json b/composer.json index 75d75b53..b4a0782a 100755 --- a/composer.json +++ b/composer.json @@ -6,6 +6,7 @@ "ext-dom": "*", "ext-gd": "*", "ext-iconv": "*", + "ext-pdo": "*", "ext-posix": "*", "beberlei/doctrineextensions": "^1.2.0", "doctrine/doctrine-bundle": "^1.9", diff --git a/src/Columns/ListenerLogs.php b/src/Columns/ListenerLogs.php index 3cb01b1e..26f616af 100644 --- a/src/Columns/ListenerLogs.php +++ b/src/Columns/ListenerLogs.php @@ -197,7 +197,7 @@ public function getColumns() 'admin' => true, 'arg' => '', 'field' => 'delete', - 'label' => '
Admin
', + 'label' => 'Admin', 'order' => '', 'sort' => '', 'td_class' => '', diff --git a/src/Columns/Listeners.php b/src/Columns/Listeners.php index 244c83b5..940c0912 100644 --- a/src/Columns/Listeners.php +++ b/src/Columns/Listeners.php @@ -83,7 +83,7 @@ public function getColumns() 'admin' => false, 'arg' => '', 'field' => 'region', - 'label' => '
Region
', + 'label' => 'Region', 'order' => 'a', 'sort' => 'l.region', 'td_class' => 'text-uppercase', @@ -105,24 +105,13 @@ public function getColumns() 'admin' => false, 'arg' => '', 'field' => 'timezone', - 'label' => '
Timezone
', + 'label' => 'Timezone', 'order' => 'a', 'sort' => 'l.timezone', 'td_class' => 'txt_r', 'th_class' => 'txt_vertical', 'tooltip' => 'Timezone (relative to UTC)', ], - 'countLogs' => [ - 'admin' => false, - 'arg' => '', - 'field' => 'countLogs', - 'label' => '
Total Logs
', - 'order' => 'd', - 'sort' => 'l.countLogs', - 'td_class' => 'txt_r', - 'th_class' => 'txt_vertical', - 'tooltip' => 'Total number of logs for all signals', - ], 'logEarliest' => [ 'admin' => false, 'arg' => '', @@ -145,11 +134,22 @@ public function getColumns() 'th_class' => '', 'tooltip' => '', ], + 'countLogs' => [ + 'admin' => false, + 'arg' => '', + 'field' => 'countLogs', + 'label' => 'Total Logs', + 'order' => 'd', + 'sort' => 'l.countLogs', + 'td_class' => 'txt_r', + 'th_class' => 'txt_vertical', + 'tooltip' => 'Total number of logs for all signals', + ], 'countDgps' => [ 'admin' => false, 'arg' => 'DGPS', 'field' => 'countDgps', - 'label' => '
DGPS
', + 'label' => 'DGPS', 'order' => 'd', 'sort' => 'l.countDgps', 'td_class' => 'txt_r type_dgps', @@ -160,7 +160,7 @@ public function getColumns() 'admin' => false, 'arg' => 'DSC', 'field' => 'countDsc', - 'label' => '
DSC
', + 'label' => 'DSC', 'order' => 'd', 'sort' => 'l.countDsc', 'td_class' => 'txt_r type_dsc', @@ -171,7 +171,7 @@ public function getColumns() 'admin' => false, 'arg' => 'HAMBCN', 'field' => 'countHambcn', - 'label' => '
HAMBCN
', + 'label' => 'HAMBCN', 'order' => 'd', 'sort' => 'l.countHambcn', 'td_class' => 'txt_r type_hambcn', @@ -182,7 +182,7 @@ public function getColumns() 'admin' => false, 'arg' => 'NAVTEX', 'field' => 'countNavtex', - 'label' => '
NAVTEX
', + 'label' => 'NAVTEX', 'order' => 'd', 'sort' => 'l.countNavtex', 'td_class' => 'txt_r type_navtex', @@ -193,7 +193,7 @@ public function getColumns() 'admin' => false, 'arg' => 'NDB', 'field' => 'countNdb', - 'label' => '
NDB
', + 'label' => 'NDB', 'order' => 'd', 'sort' => 'l.countNdb', 'td_class' => 'txt_r type_ndb', @@ -204,7 +204,7 @@ public function getColumns() 'admin' => false, 'arg' => 'TIME', 'field' => 'countTime', - 'label' => '
TIME
', + 'label' => 'TIME', 'order' => 'd', 'sort' => 'l.countTime', 'td_class' => 'txt_r type_time', @@ -215,7 +215,7 @@ public function getColumns() 'admin' => false, 'arg' => 'OTHER', 'field' => 'countOther', - 'label' => '
OTHER
', + 'label' => 'OTHER', 'order' => 'd', 'sort' => 'l.countOther', 'td_class' => 'txt_r type_other', @@ -226,7 +226,7 @@ public function getColumns() 'admin' => false, 'arg' => '', 'field' => 'countSignals', - 'label' => '
All Signals
', + 'label' => 'All Signals', 'order' => 'd', 'sort' => 'l.countSignals', 'td_class' => 'txt_r', @@ -282,7 +282,7 @@ public function getColumns() 'admin' => true, 'arg' => '', 'field' => 'formattedMapPos', - 'label' => '
Map Pos
', + 'label' => 'Map Pos', 'order' => 'a', 'sort' => 'l.mapX', 'td_class' => '', @@ -293,7 +293,7 @@ public function getColumns() 'admin' => true, 'arg' => '', 'field' => 'delete', - 'label' => '
Admin
', + 'label' => 'Admin', 'order' => '', 'sort' => '', 'td_class' => '', diff --git a/src/Columns/SignalLogs.php b/src/Columns/SignalLogs.php index 69d80d3a..6c714bf0 100644 --- a/src/Columns/SignalLogs.php +++ b/src/Columns/SignalLogs.php @@ -162,7 +162,7 @@ public function getColumns() 'admin' => true, 'arg' => '', 'field' => 'delete', - 'label' => '
Admin
', + 'label' => 'Admin', 'order' => '', 'sort' => '', 'td_class' => '', diff --git a/src/Columns/Signals.php b/src/Columns/Signals.php index 4c513f43..1df18c75 100644 --- a/src/Columns/Signals.php +++ b/src/Columns/Signals.php @@ -136,7 +136,7 @@ public function getColumns() 'arg' => '', 'field' => 'region', 'highlight' => false, - 'label' => '
Region
', + 'label' => 'Region', 'labelSort' => 'Region', 'order' => 'a', 'sort' => 's.region', @@ -196,6 +196,19 @@ public function getColumns() 'th_class' => '', 'tooltip' => 'Places signal has been reported', ], + 'listeners' => [ + 'admin' => false, + 'arg' => '', + 'field' => 'listeners', + 'highlight' => false, + 'label' => 'Listeners', + 'labelSort' => '', + 'order' => 'd', + 'sort' => 's.logs', + 'td_class' => 'txt_r', + 'th_class' => 'txt_vertical', + 'tooltip' => 'Number of times logged', + ], 'logs' => [ 'admin' => false, 'arg' => '', @@ -206,7 +219,7 @@ public function getColumns() 'order' => 'd', 'sort' => 's.logs', 'td_class' => 'txt_r', - 'th_class' => '', + 'th_class' => 'txt_vertical', 'tooltip' => 'Number of times logged', ], 'first_heard' => [ @@ -279,7 +292,7 @@ public function getColumns() 'arg' => '', 'field' => 'actions', 'highlight' => false, - 'label' => '
Admin
', + 'label' => 'Admin', 'order' => '', 'sort' => '', 'td_class' => '', diff --git a/src/Entity/Signal.php b/src/Entity/Signal.php index 087d0b67..a1577427 100644 --- a/src/Entity/Signal.php +++ b/src/Entity/Signal.php @@ -196,6 +196,13 @@ class Signal */ private $qth; + /** + * @var int|null + * + * @ORM\Column(name="listeners", type="integer", nullable=true, options={"unsigned"=true}) + */ + private $listeners; + /** * @var int|null * @@ -547,6 +554,18 @@ public function setQth(?string $qth): self return $this; } + public function getListeners(): ?int + { + return $this->listeners; + } + + public function setListeners(?int $listeners): self + { + $this->listeners = $listeners; + + return $this; + } + public function getLogs(): ?int { return $this->logs; @@ -723,7 +742,7 @@ public function getFormattedLsbAbs(): ?string { if (!$this->lsb) { return ''; } - return $this->lsbApprox . ($this->khz - number_format($this->lsb / 1000, 3, '.')); + return $this->lsbApprox . ((float)$this->khz - number_format($this->lsb / 1000, 3, '.')); } public function getFormattedLsbRel(): ?string { @@ -737,7 +756,7 @@ public function getFormattedUsbAbs(): ?string { if (!$this->usb) { return ''; } - return $this->usbApprox . ($this->khz + number_format($this->usb / 1000, 3, '.')); + return $this->usbApprox . ((float)$this->khz + number_format($this->usb / 1000, 3, '.')); } public function getFormattedUsbRel(): ?string { diff --git a/src/Repository/SignalRepository.php b/src/Repository/SignalRepository.php index 48a9f4d3..96b4d1c7 100644 --- a/src/Repository/SignalRepository.php +++ b/src/Repository/SignalRepository.php @@ -10,6 +10,7 @@ use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository; use Doctrine\DBAL\Driver\Connection; use Doctrine\Persistence\ManagerRegistry; +use PDO; class SignalRepository extends ServiceEntityRepository { @@ -1145,96 +1146,197 @@ public function getListenersCount($signalid) return $qb->getQuery()->getSingleScalarResult(); } + public function array_group_by($key, $data) { + $result = []; + foreach ($data as $val) { + if (array_key_exists($key, $val)) { + $result[$val[$key]][] = $val; + } else { + $result[''][] = $val; + } + } + return $result; + } + + private function getLogsLatestSpec($signalId = false) + { + $sql = <<connection->prepare($sql); + $stmt->execute(); + $results = $stmt->fetchAll(PDO::FETCH_ASSOC); + + $out = []; + foreach ($results as $r) { + $out[$r['signalID']] = [ + 'LSB' => $r['LSB'], + 'USB' => $r['USB'], + 'format' => $r['format'], + 'sec' => $r['sec'] + ]; + } + return $out; + } + + private function getLogsHeardIn($signalId = false) + { + $WHERE = ($signalId ? "WHERE\n signalID = $signalId" : ''); + $sql = <<connection->prepare($sql); + $stmt->execute(); + + $results = $stmt->fetchAll(PDO::FETCH_ASSOC); + return $this->array_group_by('signalID', $results); + } + + private function getLogsStats($signalId = false) + { + $WHERE = ($signalId ? "WHERE\n signalID = $signalId" : ''); + $sql = <<connection->prepare($sql); + $stmt->execute(); + $results = $stmt->fetchAll(PDO::FETCH_ASSOC); + + $out = []; + foreach ($results as $r) { + $out[$r['signalID']] = [ + 'first_heard' => $r['first_heard'], + 'last_heard' => $r['last_heard'], + 'logs' => $r['count_logs'], + 'listeners' => $r['count_listeners'] + ]; + } + return $out; + } + public function updateSignalStats($signalId = false) { - return; -// Old code for Signal->updateHeardInList() in RXX1 - /* - $sql = - "SELECT DISTINCT\n" - ." `heard_in`,\n" - ." MAX(`daytime`) as `daytime`,\n" - ." `region`\n" - ."FROM\n" - ." `logs`\n" - ."WHERE\n" - ." `signalID` = ".$this->getID()."\n" - ."GROUP BY\n" - ." `heard_in`\n" - ."ORDER BY\n" - ." (`region`='na' OR `region`='ca' OR (`region`='oc' AND `heard_in`='HI')),\n" - ." `region`,\n" - ." `heard_in`"; - $rows = $this->getRecordsForSql($sql); - $arr = array(); - $html_arr = array(); - $region = ""; - $old_link = false; - $link = false; - $eu_link = ""; - $na_link = ""; - foreach ($rows as $row) { - $heard_in = $row["heard_in"]; - $daytime = $row["daytime"]; - $region = $row["region"]; - $link = false; - switch ($region) { - case "ca": - case "na": - $link = $na_link; - break; - case "oc": - if ($heard_in=='HI') { - $link = $na_link; - } - break; - case "eu": - $link = $eu_link; - break; + $logsHeardIn = $this->getLogsHeardIn($signalId); + $logsStats = $this->getLogsStats($signalId); + $logsLatestSpec = $this->getLogsLatestSpec($signalId); + + $data = []; + foreach ($logsHeardIn as $signalID => $result) { + $heardIn = []; + $old_link = false; + $link = false; + foreach ($result as $row) { + switch ($row["region"]) { + case "ca": + case "na": + $link = ""; + break; + case "oc": + if ('HI' === $row["heard_in"]) { + $link = ""; + } + break; + case "eu": + $link = ""; + break; + default: + $link = false; + } + $heardIn[] = + ($old_link && ($link !== $old_link) ? '' : ' ') + . ($link && ($link !== $old_link) ? sprintf($link, $row['signalID']) : '') + . ($row["daytime"] ? sprintf("%s", $row["heard_in"]) : $row["heard_in"]); + $old_link = $link; + } + if ($link !== false) { + $heardIn[] = ""; } - $html_arr[] = - ($old_link !==false && $link !== $old_link ? " " : " ") - .($link !==false && $link !== $old_link ? $link : "") - .($daytime ? "".$heard_in."" : $heard_in); - $arr[] = htmlentities($heard_in); - $old_link = $link; + $data[$row['signalID']] = [ + 'id' => $row['signalID'], + 'heard_in' => trim(strip_tags(implode('', $heardIn))), + 'heard_in_html' => trim(implode('', $heardIn)) + ]; } - if ($link !== false) { - $html_arr[] = ""; + foreach ($logsStats as $signalID => $stats) { + $data[$signalID] = array_merge($data[$signalID], $stats); } - $data = array( - 'heard_in' => implode(" ", $arr), - 'heard_in_html' => implode("", $html_arr) - ); - $this->update($data); - return $this->getAffectedRows(); -*/ - -// Code from ListenerRepository->updateListenerStats() -/* - $sql = <<< EOT -UPDATE - signals s -SET - count_logs = (SELECT COUNT(*) FROM logs WHERE logs.listenerId = l.id), - count_signals = (SELECT COUNT(DISTINCT signalId) FROM logs WHERE logs.listenerId = l.id), - count_NDB = (SELECT COUNT(*) FROM logs INNER JOIN signals s ON logs.signalId = s.id AND s.type = 0 WHERE logs.listenerId = l.id), - count_DGPS = (SELECT COUNT(*) FROM logs INNER JOIN signals s ON logs.signalId = s.id AND s.type = 1 WHERE logs.listenerId = l.id), - count_TIME = (SELECT COUNT(*) FROM logs INNER JOIN signals s ON logs.signalId = s.id AND s.type = 2 WHERE logs.listenerId = l.id), - count_NAVTEX = (SELECT COUNT(*) FROM logs INNER JOIN signals s ON logs.signalId = s.id AND s.type = 3 WHERE logs.listenerId = l.id), - count_HAMBCN = (SELECT COUNT(*) FROM logs INNER JOIN signals s ON logs.signalId = s.id AND s.type = 4 WHERE logs.listenerId = l.id), - count_OTHER = (SELECT COUNT(*) FROM logs INNER JOIN signals s ON logs.signalId = s.id AND s.type = 5 WHERE logs.listenerId = l.id), - count_DSC = (SELECT COUNT(*) FROM logs INNER JOIN signals s ON logs.signalId = s.id AND s.type = 6 WHERE logs.listenerId = l.id), - log_latest = (SELECT MAX(date) FROM logs WHERE logs.listenerId = l.id) -EOT; - if ($signalId) { - $sql .= "\nWHERE\n s.id = $signalId"; + foreach ($logsLatestSpec as $signalID => $spec) { + $data[$signalID] = array_merge($data[$signalID], $spec); + } + foreach ($data as $signalID => $s) { + $sql = << $signalID, + ':first_heard' => $s['first_heard'], + ':format' => $s['format'], + ':heard_in' => $s['heard_in'], + ':heard_in_html' => $s['heard_in_html'], + ':last_heard' => $s['last_heard'], + ':logs' => $s['logs'], + ':listeners' => $s['listeners'], + ':LSB' => $s['LSB'], + ':sec' => $s['sec'], + ':USB' => $s['USB'] + ]; } $stmt = $this->connection->prepare($sql); - $stmt->execute(); + $stmt->execute($params); return $stmt->rowCount(); -*/ } } diff --git a/templates/i18n.html.twig b/templates/i18n.html.twig index c50a13cb..42981a9e 100644 --- a/templates/i18n.html.twig +++ b/templates/i18n.html.twig @@ -592,7 +592,7 @@ {% trans %}State / Province{% endtrans %} {% trans %}ITU{% endtrans %} {% trans %}ITU Country Code{% endtrans %} - {% trans %}
Region
{% endtrans %} + {% trans %}Region{% endtrans %} {% trans %}Continent or Zone{% endtrans %} {% trans %}Signal Grid Square{% endtrans %} {% trans %}GSQ{% endtrans %} @@ -610,7 +610,7 @@ {% trans %}Miles from GSQ{% endtrans %} {% trans %}Bearing relative to GSQ{% endtrans %} {% trans %}Deg{% endtrans %} - {% trans %}
Admin
{% endtrans %} + {% trans %}Admin{% endtrans %} {% trans %}Delete{% endtrans %} {% trans %}Signal %s has %d logs and so cannot be deleted at this time.{% endtrans %} {% trans %}Signal %s has been deleted.{% endtrans %} @@ -679,33 +679,33 @@ {% trans %}QTH{% endtrans %} {% trans %}Listener Grid Square{% endtrans %} {% trans %}Timezone (relative to UTC){% endtrans %} - {% trans %}
Timezone
{% endtrans %} + {% trans %}Timezone{% endtrans %} {% trans %}Total number of logs for all signals{% endtrans %} - {% trans %}
Total Logs
{% endtrans %} + {% trans %}Total Logs{% endtrans %} {% trans %}Earliest Log{% endtrans %} {% trans %}Latest Log{% endtrans %} {% trans %}Number of NDBs received{% endtrans %} - {% trans %}
NDB
{% endtrans %} + {% trans %}NDB{% endtrans %} {% trans %}Number of DGPS stations received{% endtrans %} - {% trans %}
DGPS
{% endtrans %} + {% trans %}DGPS{% endtrans %} {% trans %}Number of DSC stations received{% endtrans %} - {% trans %}
DSC
{% endtrans %} + {% trans %}DSC{% endtrans %} {% trans %}Number of Ham Beacons received{% endtrans %} - {% trans %}
HAMBCN
{% endtrans %} + {% trans %}HAMBCN{% endtrans %} {% trans %}Number of NAVTEX stations received{% endtrans %} - {% trans %}
NAVTEX
{% endtrans %} + {% trans %}NAVTEX{% endtrans %} {% trans %}Number of Time stations received{% endtrans %} - {% trans %}
TIME
{% endtrans %} + {% trans %}TIME{% endtrans %} {% trans %}Number of Other signals received{% endtrans %} - {% trans %}
OTHER
{% endtrans %} + {% trans %}OTHER{% endtrans %} {% trans %}Total number of signals of all types{% endtrans %} - {% trans %}
All Signals
{% endtrans %} + {% trans %}All Signals{% endtrans %} {% trans %}WWW{% endtrans %} {% trans %}NDB Weblog for Listener{% endtrans %} {% trans %}NWL{% endtrans %} {% trans %}Map showing Signals for Listener{% endtrans %} {% trans %}Map{% endtrans %} - {% trans %}
Map Pos
{% endtrans %} + {% trans %}Map Pos{% endtrans %} {% trans %}Admin{% endtrans %} {% trans %}Delete this Listener? Are you sure?{% endtrans %} {% trans %}Listener %s has %d logs and so cannot be deleted at this time.{% endtrans %} diff --git a/templates/listener/logs.grid.html.twig b/templates/listener/logs.grid.html.twig index cb2dba79..2f0cdd28 100644 --- a/templates/listener/logs.grid.html.twig +++ b/templates/listener/logs.grid.html.twig @@ -12,7 +12,12 @@ if column.tooltip %} title="{{ column.tooltip }}"{% endif - %}>{{ column.label|raw }}{% + %}>{% + if column.th_class == 'txt_vertical' + %}
{{ column.label | trans | raw }}
{% + else + %}{{ column.label | trans | raw }}{% + endif %}{% endif %} {% endfor %} diff --git a/templates/listeners/grid.html.twig b/templates/listeners/grid.html.twig index bd36e7b2..05f54f76 100644 --- a/templates/listeners/grid.html.twig +++ b/templates/listeners/grid.html.twig @@ -21,7 +21,7 @@ if column.tooltip %} title="{{ column.tooltip | trans }}"{% endif - %}>{{ column.label | trans | raw }} + %}>{% if column.th_class == 'txt_vertical' %}
{{ column.label | trans | raw }}
{% else %}{{ column.label | trans | raw }}{% endif %} {% endif %} {% endfor %} diff --git a/templates/signal/grid.html.twig b/templates/signal/grid.html.twig index 34400031..54508fb6 100644 --- a/templates/signal/grid.html.twig +++ b/templates/signal/grid.html.twig @@ -6,8 +6,12 @@ {% if ((not column.admin or isAdmin) and (not column.arg or (column.arg and column.arg in args.types))) %} {{ column.label|trans|raw }} + {% if column.tooltip %} title="{{ column.tooltip|trans }}"{% endif %}>{% + if column.th_class == 'txt_vertical' + %}
{{ column.label | trans | raw }}
{% + else + %}{{ column.label | trans | raw }}{% + endif %} {% endif %} {% endfor %} diff --git a/templates/signals/list.html.twig b/templates/signals/list.html.twig index 4cc66abd..877a55a1 100644 --- a/templates/signals/list.html.twig +++ b/templates/signals/list.html.twig @@ -28,7 +28,7 @@ {{ column.label | trans | raw }} +>{% if column.th_class == 'txt_vertical' %}
{{ column.label | trans | raw }}
{% else %}{{ column.label | trans | raw }}{% endif %} {% endif %} {% endfor %} @@ -61,6 +61,8 @@ %}{% if signal.itu %}{{ value | raw }}{% endif %}{% elseif (column.field == 'khz') %}{{ value | raw }}{% + elseif (column.field == 'listeners') + %}{% if signal.listeners %}{{ signal.listeners }}{% endif %}{% elseif (column.field == 'logs') %}{% if signal.logs %}{{ signal.logs }}{% endif %}{% elseif (column.field == 'LSB' or column.field == 'USB') diff --git a/translations/messages.de.xlf b/translations/messages.de.xlf index 71860b04..2e9aa3f4 100644 --- a/translations/messages.de.xlf +++ b/translations/messages.de.xlf @@ -4055,6 +4055,30 @@ Log entry has been deleted. Stats for %s have been updated. __Log entry has been deleted. Stats for %s have been updated. + + HAMBCN + __HAMBCN + + + NAVTEX + __NAVTEX + + + TIME + __TIME + + + OTHER + __OTHER + + + All Signals + __All Signals + + + Map Pos + __Map Pos + diff --git a/translations/messages.en.xlf b/translations/messages.en.xlf index 57ed8567..6e8ed5f8 100644 --- a/translations/messages.en.xlf +++ b/translations/messages.en.xlf @@ -4055,6 +4055,30 @@ Log entry has been deleted. Stats for %s have been updated. Log entry has been deleted. Stats for %s have been updated. + + HAMBCN + HAMBCN + + + NAVTEX + NAVTEX + + + TIME + TIME + + + OTHER + OTHER + + + All Signals + All Signals + + + Map Pos + Map Pos + diff --git a/translations/messages.es.xlf b/translations/messages.es.xlf index 92e949b0..1df501a4 100644 --- a/translations/messages.es.xlf +++ b/translations/messages.es.xlf @@ -4055,6 +4055,30 @@ Log entry has been deleted. Stats for %s have been updated. __Log entry has been deleted. Stats for %s have been updated. + + HAMBCN + __HAMBCN + + + NAVTEX + __NAVTEX + + + TIME + __TIME + + + OTHER + __OTHER + + + All Signals + __All Signals + + + Map Pos + __Map Pos + diff --git a/translations/messages.fr.xlf b/translations/messages.fr.xlf index 44605f63..4a94fdc6 100644 --- a/translations/messages.fr.xlf +++ b/translations/messages.fr.xlf @@ -4055,6 +4055,30 @@ Log entry has been deleted. Stats for %s have been updated. __Log entry has been deleted. Stats for %s have been updated. + + HAMBCN + __HAMBCN + + + NAVTEX + __NAVTEX + + + TIME + __TIME + + + OTHER + __OTHER + + + All Signals + __All Signals + + + Map Pos + __Map Pos +