From: Mischa POSLAWSKY Date: Sun, 22 May 2022 18:28:20 +0000 (+0200) Subject: word/edit: preserve unknown json values X-Git-Tag: v1.13~6 X-Git-Url: http://git.shiar.nl/sheet.git/commitdiff_plain/1c05401638473dda6f220b1a2111a439a7b9108e word/edit: preserve unknown json values Replace only submitted input, keep existing experimental properties. --- diff --git a/word/edit.plp b/word/edit.plp index e442851..4a6daaa 100644 --- a/word/edit.plp +++ b/word/edit.plp @@ -152,7 +152,6 @@ elsif (defined $post{form}) {{ my @val = map { parseinput($_) } $post{'@'.$col}->@*; my $val = $colinfo->{-multiple} && @val ? \@val : $val[-1]; if (my $jsoncol = $colinfo->{-json}) { - defined $val and $row->{$jsoncol}->{$col} = $val; # hash will be encoded } else { @@ -160,7 +159,13 @@ elsif (defined $post{form}) {{ } } my $imagecol = $row->{image}; # backup image subcolumns - ref $_ eq 'HASH' and $_ = encode_json($_) for values %{$row}; + while (my ($col, $val) = each %{$row}) { + # convert json subcolumns to database string + ref $val eq 'HASH' or next; + $val = { %{decode_json($_)}, %{$val} } for $replace->{$col} // (); # preserve unknown + defined $val->{$_} or delete $val->{$_} for keys %{$val}; # delete emptied + $row->{$col} = encode_json($val); + } if (!$row->{form} and $row->{lang}) { if ($row->{ref} ne 'delete') {