Artikelstammdaten: als ungültig markierte CVars löschen
authorMoritz Bunkus <m.bunkus@linet-services.de>
Wed, 22 Apr 2015 17:11:30 +0000 (19:11 +0200)
committerMoritz Bunkus <m.bunkus@linet-services.de>
Wed, 22 Apr 2015 17:11:30 +0000 (19:11 +0200)
Wenn man einen Artikel hat und darin eine CVar als ungültig/nicht
zutreffend markiert, so blieben bisher die Daten, die zu dieser CVar
gehörten, in der Datenbank. Das sorgt zum Einen dafür, dass die Tabellen
unnötig voller werden, zum Anderen geistern die Daten dann noch in $form
herum (und damit auch in Druckvorlagen). Also entfernen.

SL/IC.pm
sql/Pg-upgrade2/delete_invalidated_custom_variables_for_parts.sql [new file with mode: 0644]

index 2455d9e..da263be 100644 (file)
--- a/SL/IC.pm
+++ b/SL/IC.pm
@@ -526,6 +526,20 @@ sub save {
                               variables     => $form,
                               save_validity => 1);
 
+  # Delete saved custom variable values for configs that have been
+  # marked invalid for this part.
+  $query = <<SQL;
+    DELETE FROM custom_variables
+    WHERE (config_id IN (
+        SELECT val.config_id
+        FROM custom_variables_validity val
+        LEFT JOIN custom_variable_configs val_cfg ON (val.config_id = val_cfg.id)
+        WHERE (val_cfg.module = 'IC')
+          AND (val.trans_id   = ?)))
+      AND (trans_id = ?)
+SQL
+  do_query($form, $dbh, $query, ($form->{id}) x 2);
+
   # commit
   my $rc = $dbh->commit;
 
diff --git a/sql/Pg-upgrade2/delete_invalidated_custom_variables_for_parts.sql b/sql/Pg-upgrade2/delete_invalidated_custom_variables_for_parts.sql
new file mode 100644 (file)
index 0000000..a07d326
--- /dev/null
@@ -0,0 +1,13 @@
+-- @tag: delete_invalidated_custom_variables_for_parts
+-- @description: Bei Artikeln ungültig gesetzte, benutzerdefinierte Variablen löschen
+-- @depends: release_3_2_0
+DELETE FROM custom_variables
+WHERE (config_id IN (
+    SELECT id
+    FROM custom_variable_configs
+    WHERE module = 'IC'))
+  AND EXISTS (
+    SELECT val.id
+    FROM custom_variables_validity val
+    WHERE (val.config_id = custom_variables.config_id)
+      AND (val.trans_id  = custom_variables.trans_id));