Skip to content

Commit 39e6256

Browse files
committed
Cleaned up debug module
1 parent a0917d0 commit 39e6256

9 files changed

Lines changed: 210 additions & 130 deletions

modules/os2forms_fordelingskomponent_debug/os2forms_fordelingskomponent_debug.module

Lines changed: 0 additions & 15 deletions
This file was deleted.
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
<?php
2+
3+
namespace Drupal\os2forms_fordelingskomponent_debug\Controller;
4+
5+
use Drupal\Core\Controller\ControllerBase;
6+
use Drupal\Core\Datetime\DrupalDateTime;
7+
use Symfony\Component\Yaml\Yaml;
8+
9+
/**
10+
* Abstract controller.
11+
*/
12+
abstract class AbstractController extends ControllerBase {
13+
14+
/**
15+
* Format timestamp.
16+
*/
17+
protected function formatDatetime(?int $timestamp): ?string {
18+
return $timestamp ? DrupalDateTime::createFromTimestamp($timestamp)->format(\DateTimeImmutable::ATOM) : NULL;
19+
}
20+
21+
/**
22+
* Render YAML.
23+
*/
24+
protected function renderYaml(\JsonSerializable $value): string {
25+
return '<pre><code>' . Yaml::dump(json_decode(json_encode($value), TRUE),
26+
inline: PHP_INT_MAX) . '</code></pre>';
27+
}
28+
29+
}

modules/os2forms_fordelingskomponent_debug/src/Controller/Os2formsFordelingskomponentDebugForsendelseController.php

Lines changed: 116 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -4,16 +4,18 @@
44

55
namespace Drupal\os2forms_fordelingskomponent_debug\Controller;
66

7-
use Drupal\Core\Controller\ControllerBase;
7+
use Drupal\os2forms_fordelingskomponent\Model\Fordelingskomponent\AnvenderForsendelse;
8+
use Drupal\Core\Url;
89
use Drupal\os2forms_fordelingskomponent\Repository\AnvenderForsendelseRepository;
9-
use Drupal\os2forms_fordelingskomponent_debug\Hook\ThemeHooks;
1010
use Drupal\webform\WebformInterface;
1111
use Drupal\webform\WebformSubmissionInterface;
12+
use Symfony\Component\HttpFoundation\Request;
13+
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
1214

1315
/**
1416
* Returns responses for os2forms_fordelingskomponent_debug routes.
1517
*/
16-
final class Os2formsFordelingskomponentDebugForsendelseController extends ControllerBase {
18+
final class Os2formsFordelingskomponentDebugForsendelseController extends AbstractController {
1719

1820
public function __construct(
1921
private readonly AnvenderForsendelseRepository $repository,
@@ -23,14 +25,120 @@ public function __construct(
2325
/**
2426
* Builds the response.
2527
*/
26-
public function __invoke(WebformInterface $webform, WebformSubmissionInterface $webform_submission): array {
28+
public function __invoke(Request $request, WebformInterface $webform, WebformSubmissionInterface $webform_submission): array {
29+
if ($anvenderTransaktionsId = $request->query->get('anvenderTransaktionsId')) {
30+
if ($item = $this->repository->loadByAnvenderTransaktionsId($anvenderTransaktionsId)) {
31+
return $this->itemDetails($item);
32+
}
33+
34+
throw new NotFoundHttpException();
35+
}
2736
$items = $this->repository->loadBySubmission($webform_submission);
2837

38+
// https://api.drupal.org/api/drupal/core%21lib%21Drupal%21Core%21Render%21Element%21Table.php/class/Table/10
39+
$header = [
40+
'anvenderTransaktionsId' => $this->t('anvenderTransaktionsId'),
41+
'distributionTransaktionsId' => $this->t('distributionTransaktionsId'),
42+
'receipts' => $this->t('Receipts'),
43+
'webform handlers' => $this->t('Webform handlers'),
44+
'createdAt' => $this->t('Created at'),
45+
'updatedAt' => $this->t('Updated at'),
46+
'deliveredAt' => $this->t('Delivered at'),
47+
];
48+
$rows = [];
49+
foreach ($items as $item) {
50+
$rows[] = [
51+
'anvenderTransaktionsId' => [
52+
'data' => [
53+
// https://api.drupal.org/api/drupal/core%21lib%21Drupal%21Core%21Render%21Element%21Link.php/class/Link/10
54+
'#title' => $item->anvenderTransaktionsId,
55+
'#type' => 'link',
56+
'#url' => Url::fromRoute('<current>', [
57+
'anvenderTransaktionsId' => $item->anvenderTransaktionsId,
58+
]),
59+
],
60+
],
61+
'distributionTransaktionsId' => [
62+
'data' => [
63+
'#markup' => $item->distributionTransaktionsId,
64+
],
65+
],
66+
'receipts' => [
67+
'data' => [
68+
'#title' => $this->t('Receipts'),
69+
'#type' => 'link',
70+
'#url' => Url::fromRoute('os2forms_fordelingskomponent_debug.os2forms_fordelingskomponent_debug_kvittering', [
71+
'webform' => $item->webformId,
72+
'webform_submission' => $item->webformSubmissionId,
73+
'anvender_transaktions_id' => $item->anvenderTransaktionsId,
74+
]),
75+
],
76+
],
77+
'webform handlers' => [
78+
'data' => [
79+
'#title' => $this->t('Webform handlers'),
80+
'#type' => 'link',
81+
'#url' => Url::fromRoute('entity.webform.handlers', [
82+
'webform' => $item->webformId,
83+
]),
84+
],
85+
],
86+
'createdAt' => [
87+
'data' => [
88+
'#markup' => $this->formatDatetime($item->createdAt),
89+
],
90+
],
91+
'updatedAt' => [
92+
'data' => [
93+
'#markup' => $this->formatDatetime($item->updatedAt),
94+
],
95+
],
96+
'deliveredAt' => [
97+
'data' => [
98+
'#markup' => $this->formatDatetime($item->deliveredAt),
99+
],
100+
],
101+
];
102+
}
103+
104+
return [
105+
'#type' => 'table',
106+
'#header' => $header,
107+
'#rows' => $rows,
108+
'#empty' => $this->t('No entries available.'),
109+
];
110+
}
111+
112+
/**
113+
* Build item details.
114+
*/
115+
private function itemDetails(AnvenderForsendelse $item) {
29116
return [
30-
'#theme' => ThemeHooks::FORSENDELSER,
31-
'#items' => $items,
32-
'#webform' => $webform,
33-
'#webform_submission' => $webform_submission,
117+
[
118+
'#type' => 'item',
119+
'#title' => $this->t('anvenderTransaktionsId'),
120+
'#markup' => $item->anvenderTransaktionsId,
121+
],
122+
[
123+
'#type' => 'item',
124+
'#title' => $this->t('distributionTransaktionsId'),
125+
'#markup' => $item->distributionTransaktionsId,
126+
],
127+
[
128+
'#type' => 'item',
129+
'#title' => $this->t('Created at'),
130+
'#markup' => $this->formatDatetime($item->createdAt),
131+
],
132+
[
133+
'#type' => 'item',
134+
'#title' => $this->t('Updated at'),
135+
'#markup' => $this->formatDatetime($item->updatedAt),
136+
],
137+
[
138+
'#type' => 'item',
139+
'#title' => $this->t('Request'),
140+
'#markup' => $this->renderYaml($item->request),
141+
],
34142
];
35143
}
36144

modules/os2forms_fordelingskomponent_debug/src/Controller/Os2formsFordelingskomponentDebugKvitteringController.php

Lines changed: 27 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,16 +4,14 @@
44

55
namespace Drupal\os2forms_fordelingskomponent_debug\Controller;
66

7-
use Drupal\Core\Controller\ControllerBase;
87
use Drupal\os2forms_fordelingskomponent\Repository\AnvenderKvitteringRepository;
9-
use Drupal\os2forms_fordelingskomponent_debug\Hook\ThemeHooks;
108
use Drupal\webform\WebformInterface;
119
use Drupal\webform\WebformSubmissionInterface;
1210

1311
/**
1412
* Returns responses for os2forms_fordelingskomponent_debug routes.
1513
*/
16-
final class Os2formsFordelingskomponentDebugKvitteringController extends ControllerBase {
14+
final class Os2formsFordelingskomponentDebugKvitteringController extends AbstractController {
1715

1816
public function __construct(
1917
private readonly AnvenderKvitteringRepository $repository,
@@ -24,11 +22,34 @@ public function __construct(
2422
* Builds the response.
2523
*/
2624
public function __invoke(WebformInterface $webform, WebformSubmissionInterface $webform_submission, string $anvender_transaktions_id): array {
27-
$items = $this->repository->loadByAnvenderTransaktionsId($anvender_transaktions_id);
25+
$item = $this->repository->loadByAnvenderTransaktionsId($anvender_transaktions_id);
2826

2927
return [
30-
'#theme' => ThemeHooks::KVITTERINGER,
31-
'#items' => $items,
28+
[
29+
'#type' => 'item',
30+
'#title' => $this->t('anvenderTransaktionsId'),
31+
'#markup' => $item->anvenderTransaktionsId,
32+
],
33+
[
34+
'#type' => 'item',
35+
'#title' => $this->t('distributionTransaktionsId'),
36+
'#markup' => $item->distributionTransaktionsId,
37+
],
38+
[
39+
'#type' => 'item',
40+
'#title' => $this->t('Created at'),
41+
'#markup' => $this->formatDatetime($item->createdAt),
42+
],
43+
[
44+
'#type' => 'item',
45+
'#title' => $this->t('Updated at'),
46+
'#markup' => $this->formatDatetime($item->updatedAt),
47+
],
48+
[
49+
'#type' => 'item',
50+
'#title' => $this->t('Request'),
51+
'#markup' => $this->renderYaml($item->request),
52+
],
3253
];
3354
}
3455

modules/os2forms_fordelingskomponent_debug/src/Controller/Os2formsFordelingskomponentDebugSftpController.php

Lines changed: 38 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -4,17 +4,16 @@
44

55
namespace Drupal\os2forms_fordelingskomponent_debug\Controller;
66

7-
use Drupal\Core\Controller\ControllerBase;
7+
use Drupal\Core\Url;
88
use Drupal\os2forms_fordelingskomponent\Helper\FordelingskomponentHelper;
9-
use Drupal\os2forms_fordelingskomponent_debug\Hook\ThemeHooks;
109
use Symfony\Component\DependencyInjection\Attribute\Autowire;
1110
use Symfony\Component\HttpFoundation\Response;
1211
use Symfony\Component\Mime\MimeTypeGuesserInterface;
1312

1413
/**
1514
* Returns responses for os2forms_fordelingskomponent_debug routes.
1615
*/
17-
final class Os2formsFordelingskomponentDebugSftpController extends ControllerBase {
16+
final class Os2formsFordelingskomponentDebugSftpController extends AbstractController {
1817

1918
public function __construct(
2019
private readonly FordelingskomponentHelper $helper,
@@ -27,34 +26,59 @@ public function __construct(
2726
* Builds the response.
2827
*/
2928
public function __invoke(string $dir = '/', ?string $filename = NULL): array|Response {
30-
$path = $this->normalizePath(implode('/', array_filter([$dir, $filename])));
31-
3229
$sftp = $this->helper->sf2900()->sftp();
3330

34-
if (preg_match('/\.[^.]+$/', $path)) {
31+
if (NULL !== $filename && preg_match('/\.[^.]+$/', $filename)) {
3532
$content = $sftp->getContents($filename, $dir);
3633

37-
$contentType = match(pathinfo($path, PATHINFO_EXTENSION)) {
34+
$contentType = match(pathinfo($filename, PATHINFO_EXTENSION)) {
3835
'sftpreceipt', 'trigger' => $this->mimeTypeGuesser->guessMimeType('name.xml'),
39-
default => $this->mimeTypeGuesser->guessMimeType($path)
36+
default => $this->mimeTypeGuesser->guessMimeType($filename)
4037
};
4138

4239
return new Response($content, Response::HTTP_OK, [
4340
'Content-Type' => $contentType,
4441
]);
4542
}
4643
else {
47-
$files = $sftp->getFiles($path);
44+
$files = $sftp->getFiles($dir, recursive: TRUE, raw: TRUE);
4845

4946
// Filter out . and ..
50-
$files = array_filter($files, static fn (string $name) => !preg_match('/^\.+$/', $name));
47+
$files = array_filter($files, static fn (string $name) => !preg_match('/^\.+$/', $name), ARRAY_FILTER_USE_KEY);
5148

52-
$files = array_map(fn (string $name) => $this->normalizePath($path . '/' . $name), $files);
49+
$header = [
50+
'filepath' => $this->t('Path'),
51+
'atime' => $this->t('Last accessed at'),
52+
'mtime' => $this->t('Last modified at'),
53+
];
54+
$rows = [];
55+
foreach ($files as $stat) {
56+
$path = $dir ? $dir . '/' . $stat->filename : $stat->filename;
57+
$rows[] = [
58+
'filepath' => [
59+
'data' => [
60+
'#title' => $path,
61+
'#type' => 'link',
62+
'#url' => $dir
63+
? Url::fromRoute('os2forms_fordelingskomponent_debug.os2forms_fordelingskomponent_debug_sftp_filename', [
64+
'dir' => $dir,
65+
'filename' => $stat->filename,
66+
])
67+
: Url::fromRoute('os2forms_fordelingskomponent_debug.os2forms_fordelingskomponent_debug_sftp', [
68+
'dir' => $stat->filename,
69+
]),
70+
],
71+
],
72+
'atime' => $this->formatDatetime($stat->atime ?? NULL),
73+
'mtime' => $this->formatDatetime($stat->mtime ?? NULL),
74+
];
75+
}
5376

5477
return [
55-
'#theme' => ThemeHooks::SFTP_FILES,
56-
'#files' => $files,
57-
'#parent_dir' => dirname($path),
78+
'#type' => 'table',
79+
'#header' => $header,
80+
'#rows' => $rows,
81+
'#empty' => $this->t('No entries available.'),
5882
];
5983
}
6084
}

modules/os2forms_fordelingskomponent_debug/src/Hook/ThemeHooks.php

Lines changed: 0 additions & 43 deletions
This file was deleted.

0 commit comments

Comments
 (0)