+ # Make sure we duplicate the $params variable to avoid
+ # breaking calls in a loop (Koha::Objects->to_api)
+ $params = defined $params ? {%$params} : {};
+
+ # children should be able to handle without
+ my $embeds = delete $params->{embed};
+ my $strings = delete $params->{strings};
+
+ # coded values handling
+ my $avs = {};
+ if ( $strings and $self->can('api_strings_mapping') ) {
+ $avs = $self->api_strings_mapping($params);
+ }
+
+ # Remove forbidden attributes if required (including their coded values)
+ if ( $params->{public} ) {
+ for my $field ( keys %{$json_object} ) {
+ delete $json_object->{$field}
+ unless any { $_ eq $field } @{ $self->public_read_list };
+ }
+
+ if ($strings) {
+ foreach my $field ( keys %{$avs} ) {
+ delete $avs->{$field}
+ unless any { $_ eq $field } @{ $self->public_read_list };
+ }
+ }
+ }
+