improve email notfication migration (#602)

* improve email notfication migration

* Fix lint

* Added dry run

---------

Co-authored-by: Julien Nahum <julien@nahum.net>
This commit is contained in:
Chirag Chhatrala 2024-10-24 19:18:04 +05:30 committed by GitHub
parent 46359fb127
commit 6bdce23967
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
1 changed files with 24 additions and 10 deletions

View File

@ -13,7 +13,7 @@ class EmailNotificationMigration extends Command
* *
* @var string * @var string
*/ */
protected $signature = 'forms:email-notification-migration'; protected $signature = 'forms:email-notification-migration {--dry : Log changes without applying them}';
/** /**
* The console command description. * The console command description.
@ -41,10 +41,12 @@ class EmailNotificationMigration extends Command
$progressBar = $this->output->createProgressBar($totalCount); $progressBar = $this->output->createProgressBar($totalCount);
$progressBar->start(); $progressBar->start();
$query->with('form')->chunk(100, function ($integrations) use ($progressBar) { $isDryRun = $this->option('dry');
$query->with('form')->chunk(100, function ($integrations) use ($progressBar, $isDryRun) {
foreach ($integrations as $integration) { foreach ($integrations as $integration) {
try { try {
$this->updateIntegration($integration); $this->updateIntegration($integration, $isDryRun);
} catch (\Exception $e) { } catch (\Exception $e) {
$this->error('Error updating integration ' . $integration->id . '. Error: ' . $e->getMessage()); $this->error('Error updating integration ' . $integration->id . '. Error: ' . $e->getMessage());
ray($e); ray($e);
@ -59,14 +61,14 @@ class EmailNotificationMigration extends Command
$this->line('Migration Done'); $this->line('Migration Done');
} }
public function updateIntegration(FormIntegration $integration) public function updateIntegration(FormIntegration $integration, $isDryRun = false)
{ {
if (!$integration->form) { if (!$integration->form) {
return; return;
} }
$existingData = $integration->data; $existingData = $integration->data;
if ($integration->integration_id === 'email') { if ($integration->integration_id === 'email' && isset($existingData->notification_emails)) {
$integration->data = [ $newData = [
'send_to' => $existingData->notification_emails ?? null, 'send_to' => $existingData->notification_emails ?? null,
'sender_name' => 'OpnForm', 'sender_name' => 'OpnForm',
'subject' => 'New form submission', 'subject' => 'New form submission',
@ -75,9 +77,14 @@ class EmailNotificationMigration extends Command
'include_hidden_fields_submission_data' => false, 'include_hidden_fields_submission_data' => false,
'reply_to' => $existingData->notification_reply_to ?? null 'reply_to' => $existingData->notification_reply_to ?? null
]; ];
} elseif ($integration->integration_id === 'submission_confirmation') { if ($isDryRun) {
$integration->integration_id = 'email'; $this->info('Dry run: Would update integration ' . $integration->id . ' with data: ' . json_encode($newData));
$integration->data = [ } else {
$integration->data = $newData;
return $integration->save();
}
} elseif ($integration->integration_id === 'submission_confirmation' && isset($existingData->notification_subject)) {
$newData = [
'send_to' => $this->getMentionHtml($integration->form), 'send_to' => $this->getMentionHtml($integration->form),
'sender_name' => $existingData->notification_sender, 'sender_name' => $existingData->notification_sender,
'subject' => $existingData->notification_subject, 'subject' => $existingData->notification_subject,
@ -86,9 +93,16 @@ class EmailNotificationMigration extends Command
'include_hidden_fields_submission_data' => false, 'include_hidden_fields_submission_data' => false,
'reply_to' => $existingData->confirmation_reply_to ?? null 'reply_to' => $existingData->confirmation_reply_to ?? null
]; ];
} if ($isDryRun) {
$this->info('Dry run: Would update integration ' . $integration->id . ' with data: ' . json_encode($newData));
} else {
$integration->integration_id = 'email';
$integration->data = $newData;
return $integration->save(); return $integration->save();
} }
}
return;
}
private function getMentionHtml(Form $form) private function getMentionHtml(Form $form)
{ {