-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathReportImporter.php
More file actions
128 lines (102 loc) · 6.06 KB
/
ReportImporter.php
File metadata and controls
128 lines (102 loc) · 6.06 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
<?php
namespace App\Service;
use App\Entity\Report;
use Symfony\Component\Console\Helper\ProgressBar;
class ReportImporter extends BaseImporter
{
public function import(string $src, ?ProgressBar $progressBar = null): void
{
$systemURL = getenv('SYSTEM_URL');
$json = file_get_contents($src);
$entries = json_decode($json);
// Don't do anything if the feed is empty.
if (0 === \count($entries)) {
return;
}
$progressBar?->setMaxSteps(\count($entries));
// List of ids from Anmeldelsesportalen.
$sysInternalIds = [];
foreach ($entries as $entry) {
$sysInternalId = (int) $this->sanitizeText($entry->{'Id'});
$sysInternalIds[] = $sysInternalId;
$report = $this->reportRepository->findOneBy(['sysInternalId' => $sysInternalId]);
if (!$report) {
$report = new Report();
$report->setSysId($entry->{'Id'});
$report->setName($this->sanitizeText($entry->{'Titel'}));
$this->entityManager->persist($report);
}
// Un-archive the report.
$report->setArchivedAt(null);
$report->setSysId($entry->{'Id'});
$report->setSysInternalId($sysInternalId);
$report->setSysUpdated($this->convertDate($entry->{'Ændret'}));
$report->setSysTitle($this->sanitizeText($entry->{'Titel'}));
$report->setSysLink($systemURL.'/'.$entry->{'Sti'}.'/DispForm.aspx?ID='.$entry->{'Id'});
$report->setSysConfidentialInformation($this->convertBoolean($entry->{'Følsomme personoplysninger'}));
$report->setSysAlternativeTitle($this->sanitizeText($entry->{'Systemnavn'} ?? ''));
$report->setSysOwner($this->sanitizeText($entry->{'Systemejerskab'}));
$report->setSysPurpose($this->sanitizeText($entry->{'Formål'}));
$report->setSysClassification($this->sanitizeText($entry->{'Systemets klassifikation'}));
// @TODO: $report->setSysDateForRevision($this->convertDate($entry->{'Dato for revision'}));
$report->setSysPersons($this->sanitizeText($entry->{'Personkreds'}));
$report->setSysInformationTypes($this->sanitizeText($entry->{'Oplysningstyper'}));
$report->setSysDataSentTo($this->sanitizeText($entry->{'Hvor overføres data til?'} ?? ''));
$report->setSysDataComeFrom($this->sanitizeText($entry->{'Hvor kommer data fra?'}));
$report->setSysDataLocation($this->sanitizeText($entry->{'Placering af data'}));
$report->setSysLatestDeletionDate($this->sanitizeText($entry->{'Sletning'}));
$report->setSysDataProcessors($this->sanitizeText($entry->{'Databehandler'}));
$report->setSysDataProcessingAgreement($this->sanitizeText($entry->{'Databehandleraftale/fortrolighedsaftale'} ?? ''));
$report->setSysDataProcessingAgreementLink($this->sanitizeText($entry->{'Link til databehandleraftale/fortrolighedsaftale'} ?? ''));
$report->setSysAuditorStatement($this->sanitizeText($entry->{'Revisorerklæring/tilsyn'}));
$report->setSysAuditorStatementLink($this->sanitizeText($entry->{'Link til revisorerklæring'} ?? ''));
$report->setSysUsage($this->sanitizeText($entry->{'Systembrug'}));
// @TODO: $report->setSysRequestForInsight($this->sanitizeText($entry->{'Anmodning om indsigt'}));
$report->setSysDateUse($this->convertDate($entry->{'Ibrugtagning'}));
$report->setSysStatus($this->sanitizeText($entry->{'Status'}));
$report->setSysRemarks($this->sanitizeText($entry->{'Bemærkninger'}));
$report->setSysObligationToInform($this->sanitizeText($entry->{'Oplysningspligten'}));
$report->setSysLegalBasis($this->sanitizeText($entry->{'Retligt grundlag'}));
$report->setSysConsent($this->sanitizeText($entry->{'Samtykke'}));
$report->setSysImpactAnalysis($this->sanitizeText($entry->{'Konsekvensanalyse'}));
// @TODO: $report->setSysImpactAnalysisLink($this->sanitizeText($entry->{'Link til konsekvensanalyse'}));
$report->setSysAuthorizationProcedure($this->sanitizeText($entry->{'Autorisationsprocedure'}));
$report->setSysInternalInformation($this->sanitizeText($entry->{'Indsigt - interne oplysninger'} ?? ''));
$report->setSysDataWorthSaving($this->sanitizeText($entry->{'Indeholder systemet bevaringsværdige data?'}));
$report->setSysDataToScience($this->sanitizeText($entry->{'Videregivelse af oplysninger til forskning'}));
$report->setSysSystemOwner($this->sanitizeText($entry->{'Systemejer/projektejer'} ?? ''));
// Set group and subGroup.
if (!is_null($report->getSysOwner())) {
$e = $report->getSysOwner();
$e = str_replace('–', '-', $e);
$extract = explode('-', $e, 2);
$groupName = trim($extract[0]);
$subGroupName = trim($extract[1]);
$findGroup = $this->groupRepository->findOneBy(
['name' => $groupName]
);
if ($findGroup && !$report->getGroups()->contains($findGroup)) {
$report->addGroup($findGroup);
}
if ($subGroupName) {
$report->setSysOwnerSub($subGroupName);
}
}
$progressBar?->advance();
}
$progressBar?->setMessage('Starting archiving ...');
// Archive reports that no longer exist in anmeldelsesportalen.
$this->reportRepository->createQueryBuilder('e')
->update()
->set('e.archivedAt', ':now')
->setParameter('now', new \DateTime())
->where('e.sysInternalId NOT IN (:sysInternalIds)')
->setParameter('sysInternalIds', $sysInternalIds)
->getQuery()
->execute()
;
$progressBar?->setMessage('Flushing ...');
$this->entityManager->flush();
$progressBar?->finish();
}
}