Projekt

Allgemein

Profil

« Zurück | Weiter » 

Revision 5a14cd3d

Von Moritz Bunkus vor fast 5 Jahren hinzugefügt

  • ID 5a14cd3d08800753e92dd24208a6573eeaee2acc
  • Vorgänger 85743ebe
  • Nachfolger d83769ec

CVars: bei Gültigkeitswechsel aktuellen Wert nicht speichern

Wenn man in den Artikelstammdaten eine CVar von ungültig auf gültig
umschaltet, so ist in dem Moment die CVar-Input im Formular nicht
enthalten, sondern nur die Gültigkeits-Checkbox. Wenn dann im Backend
der aktuelle Wert der CVar in die DB gespeichert wird, weil die CVar
ja ab dem Moment gültig ist, so ist der Wert dementsprechend leer
bzw. 0 für numerische Typen.

Der Effekt ist, dass beim nächsten Laden der CVar ein Wert in der DB
steht (leer/0), und dass dieser Wert vorausgewählt ist und nicht der
Standardwert aus der Konfiguration.

Daher sorgt diese Änderung dafür, dass in so einem Fall der aktuelle
CVar-Wert schlicht gar nicht in die DB geschrieben wird. Genauer:

Wenn das Speichern der Gültigkeit gewünscht wird, so wird der Wert nur
dann geschrieben, wenn die CVar sowohl vor dem Speichern als auch nach
dem Speichern gültig ist, sie also weder gerade aktiviert noch gerade
deaktiviert wird. Andernfalls wird die CVar in der DB nicht vorhanden
sein.

Unterschiede anzeigen:

SL/CVar.pm
244 244
  my $sth = prepare_query($form, $dbh, $query);
245 245

  
246 246
  foreach my $config (@configs) {
247
    if ($params{save_validity}) {
248
      my $valid_index = "$params{name_prefix}cvar_$config->{name}$params{name_postfix}_valid";
249
      my $new_valid   = $params{variables}{$valid_index} || $params{always_valid} ? 1 : 0;
250
      my $old_valid   = $self->get_custom_variables_validity(trans_id => $params{trans_id}, config_id => $config->{id});
251

  
252
      $self->save_custom_variables_validity(trans_id  => $params{trans_id},
253
                                            config_id => $config->{id},
254
                                            validity  => $new_valid,
255
                                           );
256

  
257
      if (!$new_valid || !$old_valid) {
258
        # When activating a cvar (old_valid == 0 && new_valid == 1)
259
        # the input to hold the variable's value wasn't actually
260
        # rendered, meaning saving the value now would only save an
261
        # empty value/the value 0. This means that the next time the
262
        # form is rendered, an existing value is found and used
263
        # instead of the variable's default value from the
264
        # configuration. Therefore don't save the values in such
265
        # cases.
266
        next;
267
      }
268
    }
269

  
247 270
    my @values = (conv_i($config->{id}), "$params{sub_module}", conv_i($params{trans_id}));
248 271

  
249 272
    my $value  = $params{variables}->{"$params{name_prefix}cvar_$config->{name}$params{name_postfix}"};
......
264 287
    }
265 288

  
266 289
    do_statement($form, $sth, $query, @values);
267

  
268
    if ($params{save_validity}) {
269
      my $valid_index = "$params{name_prefix}cvar_$config->{name}$params{name_postfix}_valid";
270
      $self->save_custom_variables_validity(trans_id  => $params{trans_id},
271
                                            config_id => $config->{id},
272
                                            validity  => ($params{variables}{$valid_index} || $params{always_valid} ? 1 : 0)
273
                                           );
274
    }
275 290
  }
276 291

  
277 292
  $sth->finish();

Auch abrufbar als: Unified diff