CSV-Import-Bericht: beim Löschen nur verwaiste Profile löschen
authorMoritz Bunkus <m.bunkus@linet-services.de>
Tue, 24 Sep 2019 09:39:00 +0000 (11:39 +0200)
committerMoritz Bunkus <m.bunkus@linet-services.de>
Tue, 24 Sep 2019 10:08:30 +0000 (12:08 +0200)
Unter gewissen Umständen kann es passieren, dass es mehrere
`csv_import_reports` mit derselben `profile_id` gibt. In so einem Fall
darf nur dann versucht werden, die Einträge aus `csv_import_profiles`
zu löschen, wenn der letzte `csv_import_reports`-Eintrag gelöscht
wird, der auf auf dieses Profil verlinkt.

SL/DB/CsvImportReport.pm

index b9c34eb..5249410 100644 (file)
@@ -65,8 +65,17 @@ sub destroy {
     do_query($::form, $dbh, 'DELETE FROM csv_import_reports WHERE id = ?', $self->id);
 
     if ($self->profile_id) {
-      do_query($::form, $dbh, 'DELETE FROM csv_import_profile_settings WHERE csv_import_profile_id = ?', $self->profile_id);
-      do_query($::form, $dbh, 'DELETE FROM csv_import_profiles WHERE id = ?', $self->profile_id);
+      my ($is_profile_used_elsewhere) = selectfirst_array_query($::form, $dbh, <<SQL, $self->profile_id);
+        SELECT id
+        FROM csv_import_reports
+        WHERE profile_id = ?
+        LIMIT 1
+SQL
+
+      if (!$is_profile_used_elsewhere) {
+        do_query($::form, $dbh, 'DELETE FROM csv_import_profile_settings WHERE csv_import_profile_id = ?', $self->profile_id);
+        do_query($::form, $dbh, 'DELETE FROM csv_import_profiles WHERE id = ?', $self->profile_id);
+      }
     }
     1;
   }) or do { die SL::DB->client->error };