Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
2.43.4 Added csv and txt export for Remote Logs and included Operator…
… in logs export for Listener if Multi-Operator facility
  • Loading branch information
classaxe committed Jul 17, 2022
1 parent 98c593b commit b2edb4b
Show file tree
Hide file tree
Showing 11 changed files with 224 additions and 31 deletions.
3 changes: 2 additions & 1 deletion src/Controller/Web/Listeners/Export/Logs.php
Expand Up @@ -104,10 +104,11 @@ private function export(
case 'txt':
$response = $this->render("listener/export/logs.txt.twig", $parameters);
break;
default:
die("Invalid mode");
}
$response->headers->set('Content-Type', 'text/plain');
$response->headers->set('Content-Disposition',"attachment;filename=listener_{$id}_logs.{$mode}");
return $response;
}

}
114 changes: 114 additions & 0 deletions src/Controller/Web/Listeners/Export/RemoteLogs.php
@@ -0,0 +1,114 @@
<?php
namespace App\Controller\Web\Listeners\Export;

use App\Controller\Web\Listeners\Base;

use Symfony\Component\HttpFoundation\RedirectResponse;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route; // Required for annotations

/**
* Class Listeners
* @package App\Controller\Web\Listener\Export
*/
class RemoteLogs extends Base
{
/**
* @Route(
* "/{_locale}/{system}/listeners/{id}/remotelogs/export/csv",
* requirements={
* "_locale": "de|en|es|fr",
* "system": "reu|rna|rww"
* },
* defaults={"id"=""},
* name="listener_remotelogs_export_csv"
* )
* @param $_locale
* @param $system
* @param $id
* @return RedirectResponse|Response
*/
public function csv(
$_locale,
$system,
$id
) {
return $this->export($_locale, $system, $id, 'csv');
}

/**
* @Route(
* "/{_locale}/{system}/listeners/{id}/remotelogs/export/txt",
* requirements={
* "_locale": "de|en|es|fr",
* "system": "reu|rna|rww"
* },
* defaults={"id"=""},
* name="listener_remotelogs_export_txt"
* )
* @param $_locale
* @param $system
* @param $id
* @return RedirectResponse|Response
*/
public function txt(
$_locale,
$system,
$id
) {
return $this->export($_locale, $system, $id, 'txt');
}

/**
* @param $_locale
* @param $system
* @param $id
* @param $mode
* @return RedirectResponse|Response
*/
private function export(
$_locale,
$system,
$id,
$mode
) {
if (!$listener = $this->getValidReportingListener($id)) {
return $this->redirectToRoute(
'listeners',
['system' => $system]
);
}

$sortableColumns = $this->listenerRepository->getColumns('logs');
$args = [
'operatorId' => $id,
'sort' => 'logDate',
'order' => 'a',
];
$logs = $this->logRepository->getLogs($args, $sortableColumns);

$parameters = [
'_locale' => $_locale,
'title' => strToUpper($system) . ' remote logs for '.$listener->getName() . " on " . date('Y-m-d'),
'subtitle' => '(' . count($logs) . ' records sorted by Date and Time)',
'system' => $system,
'listener' => $listener,
'logs' => $logs,
'typeRepository' => $this->typeRepository
];
$parameters = array_merge($parameters, $this->parameters);
switch ($mode) {
case 'csv':
$response = $this->render("listener/export/remotelogs.csv.twig", $parameters);
break;
case 'txt':
$response = $this->render("listener/export/remotelogs.txt.twig", $parameters);
break;
default:
die("Invalid mode");
}
$response->headers->set('Content-Type', 'text/plain');
$response->headers->set('Content-Disposition',"attachment;filename=listener_{$id}_remotelogs.{$mode}");
return $response;
}
}
2 changes: 1 addition & 1 deletion src/Controller/Web/Logs/Log.php
Expand Up @@ -92,7 +92,7 @@ public function controller(
->setListenerId($data['listenerId'])
->setLsb($data['lsb']!=='' ? (int)$data['lsb'] : null)
->setLsbApprox(!empty($request->request->get('form')['lsbApprox']))
->setOperatorId($data['operatorId'])
->setOperatorId($data['operatorId'] ? (int)$data['operatorId'] : null)
->setHeardIn($heardIn)
->setRegion($region)
->setSec($data['sec'])
Expand Down
2 changes: 1 addition & 1 deletion src/Form/Listeners/LogUpload.php
Expand Up @@ -91,7 +91,7 @@ public function buildForm(FormBuilderInterface $formBuilder, array $options)
[
'choices' => $this->listenerRepository->getOperators(
$options['system'],
$this->translator->trans('(None specified)'),
$this->translator->trans('(None specified)')
),
'choice_translation_domain' => false,
'data' => $options['operatorID'],
Expand Down
1 change: 1 addition & 0 deletions src/Form/Logs/Log.php
Expand Up @@ -72,6 +72,7 @@ public function buildForm(FormBuilderInterface $formBuilder, array $options)
'choices' => $this->listenerRepository->getOperators(
'',
$this->translator->trans('(None specified)'),

),
'choice_translation_domain' => false,
'data' => $options['operatorId'],
Expand Down
17 changes: 8 additions & 9 deletions src/Repository/ListenerRepository.php
Expand Up @@ -812,22 +812,21 @@ public function getOperators(
$system = 0,
$placeholder = false
) {
$qb =
$this
->createQueryBuilder('l')
->select('l.id, l.name, l.qth, l.sp, l.itu, l.gsq, l.primaryQth, l.callsign')
->andWhere('l.multiOperator = \'N\'')
->andWhere('l.primaryQth = \'Y\'')
->addOrderBy('l.name', 'ASC')
;
$qb = $this
->createQueryBuilder('l')
->select('l.id, l.name, l.qth, l.sp, l.itu, l.gsq, l.primaryQth, l.callsign')
->andWhere('l.multiOperator = \'N\'')
->addOrderBy('l.name', 'ASC')
->addOrderBy('l.primaryQth', 'DESC');
$this->addFilterSystem($qb, $system);
$result = $qb->getQuery()->execute();
if ($placeholder) {
$out = [ $placeholder => '' ];
}
foreach ($result as $row) {
$out[
html_entity_decode($row['name'])
($row['primaryQth'] === 'Y' ? '' : '    ')
. html_entity_decode($row['name'])
. ' [' . $row['id'] . '] '
. html_entity_decode($row['qth'])
. ($row['sp'] ? ' ' . $row['sp'] : '')
Expand Down
10 changes: 5 additions & 5 deletions templates/listener/export/logs.csv.twig
@@ -1,6 +1,6 @@
"{%
trans %}YYYYMMDD{% endtrans %}","{%
trans %}UTC{% endtrans %}","{%
"{% if listener.multiOperator == 'Y' %}{% trans %}Operator{% endtrans %}","{% endif %}{%
trans %}YYYY-MM-DD{% endtrans %}","{%
trans %}hh:mm{% endtrans %}","{%
trans %}KHz{% endtrans %}","{%
trans %}ID{% endtrans %}","{%
trans %}Type{% endtrans %}","{%
Expand All @@ -20,9 +20,9 @@
trans %}KM{% endtrans %}","{%
trans %}Miles{% endtrans %}","{%
trans %}Daytime{% endtrans%}"
{% for l in logs %}"{{
{% for l in logs %}{% if listener.multiOperator == 'Y' %}"{{ l.operator }}",{% endif %}"{{
l.logDate }}","{{
l.logTime }}","{{
l.logTime|slice(0,2) }}:{{ l.logTime|slice(2,2) }}","{{
l.khz }}","{{
l.call }}","{{
typeRepository.typeForCode(l.type)['label']|trans }}","{{
Expand Down
12 changes: 6 additions & 6 deletions templates/listener/export/logs.txt.twig
Expand Up @@ -4,13 +4,13 @@ A - {% trans %}Active{% endtrans %}

D - {% trans %}Logged between 10am and 2pm local time{% endtrans %}

---------------------------------------------------------------------------------------------------------------------------------------------------------------
YYYYMMDD UTC KHz ID Type A LSB USB Sec Format PWR KM Miles GSQ Lat Lon D SP ITU Location
---------------------------------------------------------------------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------------------------------------------------------------------------
{% if listener.multiOperator == 'Y' %}Operator {% endif %}YYYY-MM-DD hh:mm KHZ ID Type A LSB USB sec fmt PWR KM Miles GSQ Lat Lon D SP ITU QTH
-------------------------------------------------------------------------------------------------------------------------------------------------------------------
{% for l in logs %}
{{
l.logDate | date('Ymd') }} {{
"% 4s" | format(l.logTime) }} {{
{% if listener.multiOperator == 'Y' %}{{ l.operator|length > 15 ? l.operator|slice(0, 12) ~ '...' :"% -15s" | format(l.operator ? l.operator : '') }} {% endif %}{{
l.logDate | date('Y-m-d') }} {{
l.logTime|slice(0,2) }}:{{ l.logTime|slice(2,2) }} {{
"% -8s" | format(l.khz) }} {{
"% -10s" | format(l.call) }} {{
"% -6s" | format( typeRepository.typeForCode(l.type)['label']|trans) }} {{
Expand Down
45 changes: 45 additions & 0 deletions templates/listener/export/remotelogs.csv.twig
@@ -0,0 +1,45 @@
"{% trans %}Remote Receiver{% endtrans %}","{%
trans %}YYYY-MM-DD{% endtrans %}","{%
trans %}hh:mm{% endtrans %}","{%
trans %}KHZ{% endtrans %}","{%
trans %}ID{% endtrans %}","{%
trans %}Type{% endtrans %}","{%
trans %}Active{% endtrans %}","{%
trans %}'Name' and Location{% endtrans %}","{%
trans %}S/P{% endtrans %}","{%
trans %}ITU{% endtrans %}","{%
trans %}Region{% endtrans %}","{%
trans %}GSQ{% endtrans %}","{%
trans %}Lat{% endtrans %}","{%
trans %}Lon{% endtrans %}","{%
trans %}LSB{% endtrans %}","{%
trans %}USB{% endtrans %}","{%
trans %}Sec{% endtrans %}","{%
trans %}Fmt.{% endtrans %}","{%
trans %}PWR{% endtrans %}","{%
trans %}KM{% endtrans %}","{%
trans %}Miles{% endtrans %}","{%
trans %}Daytime{% endtrans%}"
{% for l in logs %}"{{ l.receiver }}","{{
l.logDate }}","{{
l.logTime|slice(0,2) }}:{{ l.logTime|slice(2,2) }}","{{
l.khz }}","{{
l.call }}","{{
typeRepository.typeForCode(l.type)['label']|trans }}","{{
l.active ? 'Y' : 'N' }}","{{
l.qth|raw }}","{{
l.sp }}","{{
l.itu }}","{{
l.region }}","{{
l.gsq }}","{{
l.lat }}","{{
l.lon }}","{{
l.lsb }}","{{
l.usb }}","{{
l.sec }}","{{
l.format }}","{{
l.pwr ? l.pwr : '' }}","{{
l.dxKm }}","{{
l.dxMiles }}","{{
(l.daytime ? 'Y' : 'N') }}"
{% endfor %}
33 changes: 33 additions & 0 deletions templates/listener/export/remotelogs.txt.twig
@@ -0,0 +1,33 @@
{{ title }}
{{ subtitle }}
A - {% trans %}Active{% endtrans %}

D - {% trans %}Logged between 10am and 2pm local time{% endtrans %}

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Remote Receiver YYYY-MM-DD hh:mm KHZ ID Type A LSB USB sec fmt PWR KM Miles GSQ Lat Lon D SP ITU QTH
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
{% for l in logs %}
{{ l.receiver|length > 40 ? l.receiver|slice(0, 37) ~ '...' : "% -40s" | format(l.receiver ? l.receiver : '') }} {{
l.logDate | date('Y-m-d') }} {{ l.logTime|slice(0,2) }}:{{ l.logTime|slice(2,2) }} {{
"% -8s" | format(l.khz) }} {{
"% -10s" | format(l.call) }} {{
"% -6s" | format( typeRepository.typeForCode(l.type)['label']|trans) }} {{
"% -1s" | format(l.active ? 'Y' : 'N') }} {{
"% 5s" | format(l.lsb ? l.lsb : '') }} {{
"% 5s" | format(l.usb ? l.usb : '') }} {{
"% 6s" | format(l.sec ? l.sec : '') }} {{
"% 10s" | format(l.format ? l.format : '') }} {{
"% 4s" | format(l.pwr ? l.pwr : '') }} {{
"% 6s" | format(l.dxKm) }} {{
"% 6s" | format(l.dxMiles) }} {{
"% 6s" | format(l.gsq) }} {{
"% 8s" | format(l.lat) }} {{
"% 8s" | format(l.lon) }} {{
"% 1s" | format(l.daytime ? 'Y' : 'N') }} {{
"% 2s" | format(l.sp) }} {{
"% 3s" | format(l.itu) }} {{
l.qth|raw|replace({' ': ' '})
}}
{% endfor %}
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
16 changes: 8 additions & 8 deletions templates/listener/remotelogs.html.twig
Expand Up @@ -5,14 +5,14 @@
{% include 'listener/tabs.html.twig' %}
<div class="controlPanel {{ form_class }}">
<div class="header">{{ mode|raw }}
{# <div class="export">{% trans %}Export{% endtrans %}#}
{# <a href="{{ url('listener_logs_export_csv', { 'system' : system, 'id': id }) }}">#}
{# <span class='ui-icon ui-icon-document'></span>.csv#}
{# </a>#}
{# <a href="{{ url('listener_logs_export_txt', { 'system' : system, 'id': id }) }}">#}
{# <span class='ui-icon ui-icon-document'></span>.txt#}
{# </a>#}
{# </div>#}
<div class="export">{% trans %}Export{% endtrans %}
<a href="{{ url('listener_remotelogs_export_csv', { 'system' : system, 'id': id }) }}">
<span class='ui-icon ui-icon-document'></span>.csv
</a>
<a href="{{ url('listener_remotelogs_export_txt', { 'system' : system, 'id': id }) }}">
<span class='ui-icon ui-icon-document'></span>.txt
</a>
</div>
</div>
<div class="content scroll" id="list">
{% include 'status.html.twig' %}
Expand Down

0 comments on commit b2edb4b

Please sign in to comment.