|
Lines 29-34
use C4::Output;
Link Here
|
| 29 |
use C4::Dates qw/format_date/; |
29 |
use C4::Dates qw/format_date/; |
| 30 |
use C4::Debug; |
30 |
use C4::Debug; |
| 31 |
use C4::Branch; # XXX subfield_is_koha_internal_p |
31 |
use C4::Branch; # XXX subfield_is_koha_internal_p |
|
|
32 |
use C4::Koha qw/IsAuthorisedValueCategory/; |
| 33 |
use Carp; |
| 34 |
use Data::Dumper; |
| 32 |
|
35 |
|
| 33 |
=head1 NAME |
36 |
=head1 NAME |
| 34 |
|
37 |
|
|
Lines 132-138
elsif ( $phase eq 'Show SQL'){
Link Here
|
| 132 |
} |
135 |
} |
| 133 |
|
136 |
|
| 134 |
elsif ( $phase eq 'Edit SQL'){ |
137 |
elsif ( $phase eq 'Edit SQL'){ |
| 135 |
|
|
|
| 136 |
my $id = $input->param('reports'); |
138 |
my $id = $input->param('reports'); |
| 137 |
my $report = get_saved_report($id); |
139 |
my $report = get_saved_report($id); |
| 138 |
my $group = $report->{report_group}; |
140 |
my $group = $report->{report_group}; |
|
Lines 160-165
elsif ( $phase eq 'Update SQL'){
Link Here
|
| 160 |
my $cache_expiry = $input->param('cache_expiry'); |
162 |
my $cache_expiry = $input->param('cache_expiry'); |
| 161 |
my $cache_expiry_units = $input->param('cache_expiry_units'); |
163 |
my $cache_expiry_units = $input->param('cache_expiry_units'); |
| 162 |
my $public = $input->param('public'); |
164 |
my $public = $input->param('public'); |
|
|
165 |
my $save_anyway = $input->param('save_anyway'); |
| 163 |
|
166 |
|
| 164 |
my @errors; |
167 |
my @errors; |
| 165 |
|
168 |
|
|
Lines 184-209
elsif ( $phase eq 'Update SQL'){
Link Here
|
| 184 |
elsif ($sql !~ /^(SELECT)/i) { |
187 |
elsif ($sql !~ /^(SELECT)/i) { |
| 185 |
push @errors, {queryerr => 1}; |
188 |
push @errors, {queryerr => 1}; |
| 186 |
} |
189 |
} |
|
|
190 |
|
| 187 |
if (@errors) { |
191 |
if (@errors) { |
| 188 |
$template->param( |
192 |
$template->param( |
| 189 |
'errors' => \@errors, |
193 |
'errors' => \@errors, |
| 190 |
'sql' => $sql, |
194 |
'sql' => $sql, |
| 191 |
); |
195 |
); |
| 192 |
} else { |
196 |
} else { |
| 193 |
update_sql( $id, { |
197 |
|
| 194 |
sql => $sql, |
198 |
# Check defined SQL parameters for authorised value validity |
| 195 |
name => $reportname, |
199 |
my $problematic_authvals = ValidateSQLParameters($sql); |
| 196 |
group => $group, |
200 |
|
| 197 |
subgroup => $subgroup, |
201 |
if ( scalar @$problematic_authvals > 0 && not $save_anyway ) { |
| 198 |
notes => $notes, |
202 |
# There's at least one problematic parameter, report to the |
| 199 |
cache_expiry => $cache_expiry, |
203 |
# GUI and provide all user input for further actions |
| 200 |
public => $public, |
204 |
$template->param( |
| 201 |
} ); |
205 |
'id' => $id, |
| 202 |
$template->param( |
206 |
'sql' => $sql, |
| 203 |
'save_successful' => 1, |
207 |
'reportname' => $reportname, |
| 204 |
'reportname' => $reportname, |
208 |
'group' => $group, |
| 205 |
'id' => $id, |
209 |
'subgroup' => $subgroup, |
| 206 |
); |
210 |
'notes' => $notes, |
|
|
211 |
'cache_expiry' => $cache_expiry, |
| 212 |
'cache_expiry_units' => $cache_expiry_units, |
| 213 |
'public' => $public, |
| 214 |
'problematic_authvals' => $problematic_authvals, |
| 215 |
'warn_authval_problem' => 1, |
| 216 |
'phase_update' => 1 |
| 217 |
); |
| 218 |
|
| 219 |
} else { |
| 220 |
# No params problem found or asked to save anyway |
| 221 |
update_sql( $id, { |
| 222 |
sql => $sql, |
| 223 |
name => $reportname, |
| 224 |
group => $group, |
| 225 |
subgroup => $subgroup, |
| 226 |
notes => $notes, |
| 227 |
cache_expiry => $cache_expiry, |
| 228 |
public => $public, |
| 229 |
} ); |
| 230 |
$template->param( |
| 231 |
'save_successful' => 1, |
| 232 |
'reportname' => $reportname, |
| 233 |
'id' => $id, |
| 234 |
); |
| 235 |
} |
| 207 |
} |
236 |
} |
| 208 |
} |
237 |
} |
| 209 |
|
238 |
|
|
Lines 466-471
elsif ( $phase eq 'Save Report' ) {
Link Here
|
| 466 |
my $cache_expiry = $input->param('cache_expiry'); |
495 |
my $cache_expiry = $input->param('cache_expiry'); |
| 467 |
my $cache_expiry_units = $input->param('cache_expiry_units'); |
496 |
my $cache_expiry_units = $input->param('cache_expiry_units'); |
| 468 |
my $public = $input->param('public'); |
497 |
my $public = $input->param('public'); |
|
|
498 |
my $save_anyway = $input->param('save_anyway'); |
| 469 |
|
499 |
|
| 470 |
|
500 |
|
| 471 |
# if we have the units, then we came from creating a report from SQL and thus need to handle converting units |
501 |
# if we have the units, then we came from creating a report from SQL and thus need to handle converting units |
|
Lines 489-494
elsif ( $phase eq 'Save Report' ) {
Link Here
|
| 489 |
elsif ($sql !~ /^(SELECT)/i) { |
519 |
elsif ($sql !~ /^(SELECT)/i) { |
| 490 |
push @errors, {queryerr => "No SELECT"}; |
520 |
push @errors, {queryerr => "No SELECT"}; |
| 491 |
} |
521 |
} |
|
|
522 |
|
| 492 |
if (@errors) { |
523 |
if (@errors) { |
| 493 |
$template->param( |
524 |
$template->param( |
| 494 |
'errors' => \@errors, |
525 |
'errors' => \@errors, |
|
Lines 499-523
elsif ( $phase eq 'Save Report' ) {
Link Here
|
| 499 |
'cache_expiry' => $cache_expiry, |
530 |
'cache_expiry' => $cache_expiry, |
| 500 |
'public' => $public, |
531 |
'public' => $public, |
| 501 |
); |
532 |
); |
| 502 |
} |
533 |
} else { |
| 503 |
else { |
534 |
# Check defined SQL parameters for authorised value validity |
| 504 |
my $id = save_report( { |
535 |
my $problematic_authvals = ValidateSQLParameters($sql); |
| 505 |
borrowernumber => $borrowernumber, |
536 |
|
| 506 |
sql => $sql, |
537 |
if ( scalar @$problematic_authvals > 0 && not $save_anyway ) { |
| 507 |
name => $name, |
538 |
# There's at least one problematic parameter, report to the |
| 508 |
area => $area, |
539 |
# GUI and provide all user input for further actions |
| 509 |
group => $group, |
540 |
$template->param( |
| 510 |
subgroup => $subgroup, |
541 |
'area' => $area, |
| 511 |
type => $type, |
542 |
'group' => $group, |
| 512 |
notes => $notes, |
543 |
'subgroup' => $subgroup, |
| 513 |
cache_expiry => $cache_expiry, |
544 |
'sql' => $sql, |
| 514 |
public => $public, |
545 |
'reportname' => $name, |
| 515 |
} ); |
546 |
'type' => $type, |
| 516 |
$template->param( |
547 |
'notes' => $notes, |
| 517 |
'save_successful' => 1, |
548 |
'cache_expiry' => $cache_expiry, |
| 518 |
'reportname' => $name, |
549 |
'cache_expiry_units' => $cache_expiry_units, |
| 519 |
'id' => $id, |
550 |
'public' => $public, |
| 520 |
); |
551 |
'problematic_authvals' => $problematic_authvals, |
|
|
552 |
'warn_authval_problem' => 1, |
| 553 |
'phase_save' => 1 |
| 554 |
); |
| 555 |
} else { |
| 556 |
# No params problem found or asked to save anyway |
| 557 |
my $id = save_report( { |
| 558 |
borrowernumber => $borrowernumber, |
| 559 |
sql => $sql, |
| 560 |
name => $name, |
| 561 |
area => $area, |
| 562 |
group => $group, |
| 563 |
subgroup => $subgroup, |
| 564 |
type => $type, |
| 565 |
notes => $notes, |
| 566 |
cache_expiry => $cache_expiry, |
| 567 |
public => $public, |
| 568 |
} ); |
| 569 |
$template->param( |
| 570 |
'save_successful' => 1, |
| 571 |
'reportname' => $name, |
| 572 |
'id' => $id, |
| 573 |
); |
| 574 |
} |
| 521 |
} |
575 |
} |
| 522 |
} |
576 |
} |
| 523 |
|
577 |
|
|
Lines 549-562
elsif ($phase eq 'Run this report'){
Link Here
|
| 549 |
# split on ??. Each odd (2,4,6,...) entry should be a parameter to fill |
603 |
# split on ??. Each odd (2,4,6,...) entry should be a parameter to fill |
| 550 |
my @split = split /<<|>>/,$sql; |
604 |
my @split = split /<<|>>/,$sql; |
| 551 |
my @tmpl_parameters; |
605 |
my @tmpl_parameters; |
|
|
606 |
my @authval_errors; |
| 552 |
for(my $i=0;$i<($#split/2);$i++) { |
607 |
for(my $i=0;$i<($#split/2);$i++) { |
| 553 |
my ($text,$authorised_value) = split /\|/,$split[$i*2+1]; |
608 |
my ($text,$authorised_value) = split /\|/,$split[$i*2+1]; |
| 554 |
my $input; |
609 |
my $input; |
| 555 |
my $labelid; |
610 |
my $labelid; |
| 556 |
if ($authorised_value eq "date") { |
611 |
if ( not defined $authorised_value ) { |
| 557 |
$input = 'date'; |
612 |
# no authorised value input, provide a text box |
| 558 |
} |
613 |
$input = "text"; |
| 559 |
elsif ($authorised_value) { |
614 |
} elsif ( $authorised_value eq "date" ) { |
|
|
615 |
# require a date, provide a date picker |
| 616 |
$input = 'date'; |
| 617 |
} else { |
| 618 |
# defined $authorised_value, and not 'date' |
| 560 |
my $dbh=C4::Context->dbh; |
619 |
my $dbh=C4::Context->dbh; |
| 561 |
my @authorised_values; |
620 |
my @authorised_values; |
| 562 |
my %authorised_lib; |
621 |
my %authorised_lib; |
|
Lines 597-611
elsif ($phase eq 'Run this report'){
Link Here
|
| 597 |
#---- "true" authorised value |
656 |
#---- "true" authorised value |
| 598 |
} |
657 |
} |
| 599 |
else { |
658 |
else { |
| 600 |
my $authorised_values_sth = $dbh->prepare("SELECT authorised_value,lib FROM authorised_values WHERE category=? ORDER BY lib"); |
659 |
if ( IsAuthorisedValueCategory($authorised_value) ) { |
| 601 |
|
660 |
my $query = ' |
| 602 |
$authorised_values_sth->execute( $authorised_value); |
661 |
SELECT authorised_value,lib |
| 603 |
|
662 |
FROM authorised_values |
| 604 |
while ( my ( $value, $lib ) = $authorised_values_sth->fetchrow_array ) { |
663 |
WHERE category=? |
| 605 |
push @authorised_values, $value; |
664 |
ORDER BY lib |
| 606 |
$authorised_lib{$value} = $lib; |
665 |
'; |
| 607 |
# For item location, we show the code and the libelle |
666 |
my $authorised_values_sth = $dbh->prepare($query); |
| 608 |
$authorised_lib{$value} = $lib; |
667 |
$authorised_values_sth->execute( $authorised_value); |
|
|
668 |
|
| 669 |
while ( my ( $value, $lib ) = $authorised_values_sth->fetchrow_array ) { |
| 670 |
push @authorised_values, $value; |
| 671 |
$authorised_lib{$value} = $lib; |
| 672 |
# For item location, we show the code and the libelle |
| 673 |
$authorised_lib{$value} = $lib; |
| 674 |
} |
| 675 |
} else { |
| 676 |
# not exists $authorised_value_categories{$authorised_value}) |
| 677 |
push @authval_errors, {'entry' => $text, |
| 678 |
'auth_val' => $authorised_value }; |
| 679 |
# tell the template there's an error |
| 680 |
$template->param( auth_val_error => 1 ); |
| 681 |
# skip scrolling list creation and params push |
| 682 |
next; |
| 609 |
} |
683 |
} |
| 610 |
} |
684 |
} |
| 611 |
$labelid = $text; |
685 |
$labelid = $text; |
|
Lines 621-634
elsif ($phase eq 'Run this report'){
Link Here
|
| 621 |
-multiple => 0, |
695 |
-multiple => 0, |
| 622 |
-tabindex => 1, |
696 |
-tabindex => 1, |
| 623 |
); |
697 |
); |
| 624 |
} else { |
|
|
| 625 |
$input = "text"; |
| 626 |
} |
698 |
} |
|
|
699 |
|
| 627 |
push @tmpl_parameters, {'entry' => $text, 'input' => $input, 'labelid' => $labelid }; |
700 |
push @tmpl_parameters, {'entry' => $text, 'input' => $input, 'labelid' => $labelid }; |
| 628 |
} |
701 |
} |
| 629 |
$template->param('sql' => $sql, |
702 |
$template->param('sql' => $sql, |
| 630 |
'name' => $name, |
703 |
'name' => $name, |
| 631 |
'sql_params' => \@tmpl_parameters, |
704 |
'sql_params' => \@tmpl_parameters, |
|
|
705 |
'auth_val_errors' => \@authval_errors, |
| 632 |
'enter_params' => 1, |
706 |
'enter_params' => 1, |
| 633 |
'reports' => $report_id, |
707 |
'reports' => $report_id, |
| 634 |
); |
708 |
); |
| 635 |
- |
|
|