chg: [command:summary] Added data about the modified entity

refacto/CRUDComponent
Sami Mokaddem 2023-09-07 15:01:13 +02:00
parent 01356824a2
commit d46143a37f
No known key found for this signature in database
GPG Key ID: 164C473F627A06FA
1 changed files with 51 additions and 11 deletions

View File

@ -65,7 +65,8 @@ class SummaryCommand extends Command
$folderPath = rtrim($folderPath, '/'); $folderPath = rtrim($folderPath, '/');
$filename = sprintf('%s/%s.txt', $folderPath, $nationality); $filename = sprintf('%s/%s.txt', $folderPath, $nationality);
$file_input = fopen($filename, 'w'); $file_input = fopen($filename, 'w');
$organisationIDsForNationality = $this->_fetchOrganisationsForNationality($nationality); $organisationForNationality = $this->_fetchOrganisationsForNationality($nationality);
$organisationIDsForNationality = array_keys($organisationForNationality);
if (empty($organisationIDsForNationality)) { if (empty($organisationIDsForNationality)) {
$message = sprintf('No changes for organisations with nationality `%s`', $nationality); $message = sprintf('No changes for organisations with nationality `%s`', $nationality);
fwrite($file_input, $message); fwrite($file_input, $message);
@ -73,6 +74,7 @@ class SummaryCommand extends Command
return; return;
} }
$userForOrg = $this->_fetchUserForOrg($organisationIDsForNationality); $userForOrg = $this->_fetchUserForOrg($organisationIDsForNationality);
$userEmailByID = Hash::combine($userForOrg, '{n}.id', '{n}.individual.email');
$userID = Hash::extract($userForOrg, '{n}.id'); $userID = Hash::extract($userForOrg, '{n}.id');
$individualID = Hash::extract($userForOrg, '{n}.individual_id'); $individualID = Hash::extract($userForOrg, '{n}.individual_id');
@ -80,9 +82,16 @@ class SummaryCommand extends Command
fwrite($file_input, $message); fwrite($file_input, $message);
$this->io->out($message); $this->io->out($message);
$logsUsers = $this->_fetchLogsForUsers($userID, $days); $logsUsers = $this->_fetchLogsForUsers($userID, $days);
$logsUsers = array_map(function($log) use ($userEmailByID) {
$userID = $log['model_id'];
$log['element_id'] = $userID;
$log['element_display_field'] = $userEmailByID[$userID];
return $log;
}, $logsUsers);
$userByIDs = Hash::combine($userForOrg, '{n}.id', '{n}'); $userByIDs = Hash::combine($userForOrg, '{n}.id', '{n}');
$logsUserMetaFields = $this->_fetchLogsForUserMetaFields($userID, $days); $logsUserMetaFields = $this->_fetchLogsForUserMetaFields($userID, $days);
$logsUserMetaFields = $this->_formatUserMetafieldLogs($logsUserMetaFields, $userByIDs); $logsUserMetaFields = $this->_formatUserMetafieldLogs($logsUserMetaFields, $userEmailByID);
$logsUsersCombined = array_merge($logsUsers, $logsUserMetaFields); $logsUsersCombined = array_merge($logsUsers, $logsUserMetaFields);
usort($logsUsersCombined, function($a, $b) { usort($logsUsersCombined, function($a, $b) {
return $a['created'] < $b['created'] ? -1 : 1; return $a['created'] < $b['created'] ? -1 : 1;
@ -97,6 +106,12 @@ class SummaryCommand extends Command
fwrite($file_input, $message); fwrite($file_input, $message);
$this->io->out($message); $this->io->out($message);
$logsOrgs = $this->_fetchLogsForOrgs($organisationIDsForNationality, $days); $logsOrgs = $this->_fetchLogsForOrgs($organisationIDsForNationality, $days);
$logsOrgs = array_map(function ($log) use ($organisationIDsForNationality) {
$orgID = $log['model_id'];
$log['element_id'] = $orgID;
$log['element_display_field'] = $organisationIDsForNationality[$orgID];
return $log;
}, $logsOrgs);
$modifiedOrgs = $this->_formatLogsForTable($logsOrgs); $modifiedOrgs = $this->_formatLogsForTable($logsOrgs);
foreach ($modifiedOrgs as $row) { foreach ($modifiedOrgs as $row) {
fputcsv($file_input, $row); fputcsv($file_input, $row);
@ -107,6 +122,12 @@ class SummaryCommand extends Command
fwrite($file_input, $message); fwrite($file_input, $message);
$this->io->out($message); $this->io->out($message);
$logsIndividuals = $this->_fetchLogsForIndividuals($individualID, $days); $logsIndividuals = $this->_fetchLogsForIndividuals($individualID, $days);
$logsIndividuals = array_map(function ($log) use ($userEmailByID) {
$individualID = $log['model_id'];
$log['element_id'] = $individualID;
$log['element_display_field'] = $userEmailByID[$individualID];
return $log;
}, $logsIndividuals);
$modifiedIndividuals = $this->_formatLogsForTable($logsIndividuals); $modifiedIndividuals = $this->_formatLogsForTable($logsIndividuals);
foreach ($modifiedIndividuals as $row) { foreach ($modifiedIndividuals as $row) {
fputcsv($file_input, $row); fputcsv($file_input, $row);
@ -125,12 +146,18 @@ class SummaryCommand extends Command
protected function _fetchOrganisationsForNationality(string $nationality): array protected function _fetchOrganisationsForNationality(string $nationality): array
{ {
return array_keys($this->Organisations->find('list') return $this->Organisations->find('list')
->where([ ->where([
'nationality' => $nationality, 'nationality' => $nationality,
]) ])
->all() ->all()
->toArray()); ->toArray();
// return array_keys($this->Organisations->find('list')
// ->where([
// 'nationality' => $nationality,
// ])
// ->all()
// ->toArray());
} }
protected function _fetchOrgNationalities(): array protected function _fetchOrgNationalities(): array
@ -139,6 +166,7 @@ class SummaryCommand extends Command
->where([ ->where([
'nationality !=' => '', 'nationality !=' => '',
]) ])
->group('nationality')
->all() ->all()
->extract('nationality') ->extract('nationality')
->toList(); ->toList();
@ -190,9 +218,14 @@ class SummaryCommand extends Command
$metaFieldLogs = array_filter($logs, function ($log) use ($userIDs) { $metaFieldLogs = array_filter($logs, function ($log) use ($userIDs) {
return !empty($log['changed']['scope']) && $log['changed']['scope'] === 'user' && in_array($log['changed']['parent_id'], $userIDs); return !empty($log['changed']['scope']) && $log['changed']['scope'] === 'user' && in_array($log['changed']['parent_id'], $userIDs);
}); });
$metaFieldDeletionLogs = array_filter($logs, function ($log) use ($userIDs) { $metaFieldLogs = array_map(function ($log) {
$log['modified_user_id'] = $log['changed']['parent_id'];
return $log;
}, $metaFieldLogs);
$metaFieldDeletionLogs = array_filter($logs, function ($log) {
return $log['request_action'] === 'delete'; return $log['request_action'] === 'delete';
}); });
$allLogs = $metaFieldLogs;
foreach ($metaFieldDeletionLogs as $i => $log) { foreach ($metaFieldDeletionLogs as $i => $log) {
$latestAssociatedLog = $this->_fetchLogs([ $latestAssociatedLog = $this->_fetchLogs([
'contain' => ['Users'], 'contain' => ['Users'],
@ -205,11 +238,14 @@ class SummaryCommand extends Command
'limit' => 1, 'limit' => 1,
]); ]);
if (!empty($latestAssociatedLog)) { if (!empty($latestAssociatedLog)) {
$metaFieldDeletionLogs[$i]['changed']['orig_value'] = $latestAssociatedLog[0]['changed']['value']; if (in_array($latestAssociatedLog[0]['changed']['parent_id'], $userIDs)) {
$metaFieldDeletionLogs[$i]['changed']['value'] = ''; $log['changed']['orig_value'] = $latestAssociatedLog[0]['changed']['value'];
$log['changed']['value'] = '';
$log['modified_user_id'] = $latestAssociatedLog[0]['changed']['parent_id'];
$allLogs[] = $log;
}
} }
} }
$allLogs = array_merge($metaFieldLogs, $metaFieldDeletionLogs);
return $allLogs; return $allLogs;
} }
@ -268,9 +304,9 @@ class SummaryCommand extends Command
}, $logs); }, $logs);
} }
protected function _formatUserMetafieldLogs($logEntries, $userByIDs): array protected function _formatUserMetafieldLogs($logEntries, $userEmailByID): array
{ {
return array_map(function($log) use ($userByIDs) { return array_map(function($log) use ($userEmailByID) {
$log['model'] = 'Users'; $log['model'] = 'Users';
$log['request_action'] = 'edit'; $log['request_action'] = 'edit';
$log['changed'] = [ $log['changed'] = [
@ -279,13 +315,15 @@ class SummaryCommand extends Command
$log['changed']['value'] $log['changed']['value']
] ]
]; ];
$log['element_id'] = $log['modified_user_id'];
$log['element_display_field'] = $userEmailByID[$log['modified_user_id']];
return $log; return $log;
}, $logEntries); }, $logEntries);
} }
protected function _formatLogsForTable($logEntries): array protected function _formatLogsForTable($logEntries): array
{ {
$header = ['Model', 'Action', 'Editor user', 'Log ID', 'Datetime', 'Change']; $header = ['Model', 'Action', 'Editor user', 'Log ID', 'Datetime', 'Modified element ID', 'Modified element', 'Change'];
$data = [$header]; $data = [$header];
foreach ($logEntries as $logEntry) { foreach ($logEntries as $logEntry) {
$formatted = [ $formatted = [
@ -294,6 +332,8 @@ class SummaryCommand extends Command
sprintf('%s (%s)', $logEntry['user']['username'], $logEntry['user_id']), sprintf('%s (%s)', $logEntry['user']['username'], $logEntry['user_id']),
$logEntry['id'], $logEntry['id'],
$logEntry['created']->i18nFormat('yyyy-MM-dd HH:mm:ss'), $logEntry['created']->i18nFormat('yyyy-MM-dd HH:mm:ss'),
$logEntry['element_id'] ?? '-',
$logEntry['element_display_field'] ?? '-',
]; ];
if ($logEntry['request_action'] == 'edit') { if ($logEntry['request_action'] == 'edit') {
$formatted[] = json_encode($logEntry['changed'], JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES); $formatted[] = json_encode($logEntry['changed'], JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES);