|
Lines 159-164
Generates the DBIC prefetch attribute based on embedded relations, and merges in
Link Here
|
| 159 |
} |
159 |
} |
| 160 |
); |
160 |
); |
| 161 |
|
161 |
|
|
|
162 |
=head3 dbic_extended_attributes_join |
| 163 |
|
| 164 |
$attributes = $c->dbic_extended_attributes_join({ attributes => $attributes, result_set => $result_set }); |
| 165 |
|
| 166 |
Generates the DBIC join attribute based on extended_attributes query entires, and merges into I<$attributes>. |
| 167 |
|
| 168 |
=cut |
| 169 |
|
| 170 |
$app->helper( |
| 171 |
'dbic_extended_attributes_join' => sub { |
| 172 |
my ( $c, $args ) = @_; |
| 173 |
|
| 174 |
my $attributes = $args->{attributes}; |
| 175 |
my $filtered_params = $args->{filtered_params}; |
| 176 |
|
| 177 |
if ( reftype( $attributes->{prefetch} ) |
| 178 |
&& reftype( $attributes->{prefetch} ) eq 'ARRAY' |
| 179 |
&& grep ( /extended_attributes/, @{ $attributes->{prefetch} } ) ) |
| 180 |
{ |
| 181 |
my $ea_entries = $self->_get_extended_attributes_entries( $filtered_params, 0 ); |
| 182 |
while ( $ea_entries > 0 ) { |
| 183 |
push( @{ $attributes->{join} }, 'extended_attributes' ); |
| 184 |
$ea_entries--; |
| 185 |
} |
| 186 |
} |
| 187 |
} |
| 188 |
); |
| 189 |
|
| 162 |
=head3 _build_query_params_from_api |
190 |
=head3 _build_query_params_from_api |
| 163 |
|
191 |
|
| 164 |
my $params = _build_query_params_from_api( $filtered_params, $reserved_params ); |
192 |
my $params = _build_query_params_from_api( $filtered_params, $reserved_params ); |
|
Lines 486-492
sub _parse_dbic_query {
Link Here
|
| 486 |
} else { |
514 |
} else { |
| 487 |
return $q_params; |
515 |
return $q_params; |
| 488 |
} |
516 |
} |
|
|
517 |
} |
| 518 |
|
| 519 |
=head3 _get_extended_attributes_entries |
| 520 |
|
| 521 |
$self->_get_extended_attributes_entries( $filtered_params, 0 ) |
| 522 |
|
| 523 |
Recursive function that returns the number of extended_attributes entries present in a query. |
| 524 |
Example: Returns 2 if given a $filtered_params containing the below: |
| 525 |
|
| 526 |
{ |
| 527 |
"-and":[ |
| 528 |
[ |
| 529 |
{ |
| 530 |
"extended_attributes.value":{ |
| 531 |
"like":"abc%" |
| 532 |
}, |
| 533 |
"extended_attributes.code":[ |
| 534 |
[ |
| 535 |
"arbitrary_attr_code", |
| 536 |
"another_attr_code" |
| 537 |
] |
| 538 |
] |
| 539 |
} |
| 540 |
], |
| 541 |
[ |
| 542 |
{ |
| 543 |
"extended_attributes.value":{ |
| 544 |
"like":"123%" |
| 545 |
}, |
| 546 |
"extended_attributes.code":[ |
| 547 |
[ |
| 548 |
"arbitrary_attr_code", |
| 549 |
"another_attr_code" |
| 550 |
] |
| 551 |
] |
| 552 |
} |
| 553 |
] |
| 554 |
] |
| 555 |
} |
| 556 |
|
| 557 |
=cut |
| 558 |
|
| 559 |
sub _get_extended_attributes_entries { |
| 560 |
my ( $self, $params, $extended_attributes_entries ) = @_; |
| 561 |
|
| 562 |
if ( reftype($params) && reftype($params) eq 'HASH' ) { |
| 563 |
|
| 564 |
# rewrite additional_field_values table query params |
| 565 |
$extended_attributes_entries = |
| 566 |
_rewrite_related_metadata_query( $params, $extended_attributes_entries, 'field_id', 'value' ) |
| 567 |
if $params->{'extended_attributes.field_id'}; |
| 568 |
|
| 569 |
# rewrite borrower_attributes table query params |
| 570 |
$extended_attributes_entries = |
| 571 |
_rewrite_related_metadata_query( $params, $extended_attributes_entries, 'code', 'attribute' ) |
| 572 |
if $params->{'extended_attributes.code'}; |
| 573 |
|
| 574 |
# rewrite illrequestattributes table query params |
| 575 |
$extended_attributes_entries = |
| 576 |
_rewrite_related_metadata_query( $params, $extended_attributes_entries, 'type', 'value' ) |
| 577 |
if $params->{'extended_attributes.type'}; |
| 578 |
|
| 579 |
foreach my $key ( keys %{$params} ) { |
| 580 |
return $self->_get_extended_attributes_entries( $params->{$key}, $extended_attributes_entries ); |
| 581 |
} |
| 582 |
} elsif ( reftype($params) && reftype($params) eq 'ARRAY' ) { |
| 583 |
foreach my $ea_instance (@$params) { |
| 584 |
$extended_attributes_entries = |
| 585 |
+$self->_get_extended_attributes_entries( $ea_instance, $extended_attributes_entries ); |
| 586 |
} |
| 587 |
return $extended_attributes_entries; |
| 588 |
} else { |
| 589 |
return $extended_attributes_entries; |
| 590 |
} |
| 591 |
} |
| 592 |
|
| 593 |
=head3 _rewrite_related_metadata_query |
| 594 |
|
| 595 |
$extended_attributes_entries = |
| 596 |
_rewrite_related_metadata_query( $params, $extended_attributes_entries, 'field_id', 'value' ) |
| 597 |
|
| 598 |
Helper function that rewrites all subsequent extended_attributes queries to match the alias generated by the dbic self left join |
| 599 |
Take the below example (patrons), assuming it is the third instance of an extended_attributes query: |
| 600 |
{ |
| 601 |
"extended_attributes.value":{ |
| 602 |
"like":"123%" |
| 603 |
}, |
| 604 |
"extended_attributes.code":[ |
| 605 |
[ |
| 606 |
"arbitrary_attr_code", |
| 607 |
"another_attr_code" |
| 608 |
] |
| 609 |
] |
| 610 |
} |
| 611 |
|
| 612 |
It'll be rewritten as: |
| 613 |
{ |
| 614 |
"extended_attributes_3.value":{ |
| 615 |
"like":"123%" |
| 616 |
}, |
| 617 |
"extended_attributes_3.code":[ |
| 618 |
[ |
| 619 |
"arbitrary_attr_code", |
| 620 |
"another_attr_code" |
| 621 |
] |
| 622 |
] |
| 623 |
} |
| 624 |
|
| 625 |
=cut |
| 626 |
|
| 627 |
sub _rewrite_related_metadata_query { |
| 628 |
my ( $params, $extended_attributes_entries, $key, $value ) = @_; |
| 629 |
|
| 630 |
$extended_attributes_entries++; |
| 631 |
if ( $extended_attributes_entries > 1 ) { |
| 632 |
my $old_key_value = delete $params->{ 'extended_attributes.' . $key }; |
| 633 |
my $new_key_value = "extended_attributes_$extended_attributes_entries" . "." . $key; |
| 634 |
$params->{$new_key_value} = $old_key_value; |
| 635 |
|
| 636 |
my $old_value_value = delete $params->{ 'extended_attributes.' . $value }; |
| 637 |
my $new_value_value = "extended_attributes_$extended_attributes_entries" . "." . $value; |
| 638 |
$params->{$new_value_value} = $old_value_value; |
| 639 |
} |
| 489 |
|
640 |
|
|
|
641 |
return $extended_attributes_entries; |
| 490 |
} |
642 |
} |
| 491 |
|
643 |
|
| 492 |
1; |
644 |
1; |
| 493 |
- |
|
|