Bug 16519: Replace 'our' with 'my' in [opac-]addbybiblionumbers.pl

To avoid bug like bug 16518 and to ease the readability/maintainability
of these scripts, this patch replaces the use of 'our' with 'my' to
avoid the use of global variables.

Basically the code has been moved from subroutines to the appropriate places.

Test plan:
At the intranet and OPAC sides
1/ Add items to a list
2/ Add items to a list using an existing name
3/ Add items to a list you don't have right on it (by modifying the
biblionumber in the url)
4/ At the OPAC, use the opac-addbybiblionumber.pl without being logged
in to add items to a list

Signed-off-by: Marc Véron <veron@veron.ch>

Signed-off-by: Katrin Fischer  <katrin.fischer@bsz-bw.de>

Signed-off-by: Kyle M Hall <kyle@bywatersolutions.com>
This commit is contained in:
Jonathan Druart 2016-05-13 20:57:33 +01:00 committed by Kyle M Hall
parent ae543d4758
commit f89400a8ff
2 changed files with 187 additions and 266 deletions

View File

@ -1,8 +1,7 @@
#!/usr/bin/perl
#script to provide virtualshelf management
#
# Copyright 2000-2002 Katipo Communications
# Copyright 2016 Koha Development Team
#
# This file is part of Koha.
#
@ -19,8 +18,7 @@
# You should have received a copy of the GNU General Public License
# along with Koha; if not, see <http://www.gnu.org/licenses>.
use strict;
use warnings;
use Modern::Perl;
use CGI qw ( -utf8 );
use C4::Biblio;
@ -29,180 +27,139 @@ use C4::Auth;
use Koha::Virtualshelves;
our $query = new CGI;
our @biblionumber = $query->param('biblionumber');
our $selectedshelf = $query->param('selectedshelf');
our $newshelf = $query->param('newshelf');
our $shelfnumber = $query->param('shelfnumber');
our $newvirtualshelf = $query->param('newvirtualshelf');
our $category = $query->param('category');
our $authorized = 1;
our $errcode = 0;
our @biblios = ();
my $query = new CGI;
my @biblionumbers = $query->multi_param('biblionumber');
my $selectedshelf = $query->param('selectedshelf');
my $newshelf = $query->param('newshelf');
my $shelfnumber = $query->param('shelfnumber');
my $newvirtualshelf = $query->param('newvirtualshelf');
my $category = $query->param('category');
my ( $errcode, $authorized ) = ( 0, 1 );
my @biblios;
# if virtualshelves is disabled, leave immediately
if ( ! C4::Context->preference('virtualshelves') ) {
if ( !C4::Context->preference('virtualshelves') ) {
print $query->redirect("/cgi-bin/koha/errors/404.pl");
exit;
}
if (scalar(@biblionumber) == 1) {
@biblionumber = (split /\//,$biblionumber[0]);
if ( scalar(@biblionumbers) == 1 ) {
@biblionumbers = ( split /\//, $biblionumbers[0] );
}
our ( $template, $loggedinuser, $cookie ) = get_template_and_user(
{
template_name => "opac-addbybiblionumber.tt",
my ( $template, $loggedinuser, $cookie ) = get_template_and_user(
{ template_name => "opac-addbybiblionumber.tt",
query => $query,
type => "opac",
authnotrequired => 0,
}
);
if( $newvirtualshelf) {
HandleNewVirtualShelf();
exit if $authorized;
ShowTemplate(); #error message
}
elsif($shelfnumber) {
HandleShelfNumber();
exit if $authorized;
ShowTemplate(); #error message
}
elsif($selectedshelf) {
HandleSelectedShelf();
LoadBib() if $authorized;
ShowTemplate();
}
else {
HandleSelect();
LoadBib() if $authorized;
ShowTemplate();
}
#end
sub HandleNewVirtualShelf {
if ( $loggedinuser > 0 and
(
$category == 1
or $category == 2 and $loggedinuser>0 && C4::Context->preference('OpacAllowPublicListCreation')
)
) {
my $shelf = eval {
Koha::Virtualshelf->new(
{
shelfname => $newvirtualshelf,
category => $category,
owner => $loggedinuser,
}
)->store;
};
if ($newvirtualshelf) {
if ($loggedinuser > 0
and ( $category == 1
or $category == 2 and $loggedinuser > 0 && C4::Context->preference('OpacAllowPublicListCreation') )
) {
my $shelf = eval { Koha::Virtualshelf->new( { shelfname => $newvirtualshelf, category => $category, owner => $loggedinuser, } )->store; };
if ( $@ or not $shelf ) {
$errcode = 1;
$authorized = 0;
$errcode = 1;
return;
}
} else {
for my $biblionumber (@biblionumbers) {
$shelf->add_biblio( $biblionumber, $loggedinuser );
}
for my $bib (@biblionumber) {
$shelf->add_biblio( $bib, $loggedinuser );
#Reload the page where you came from
print $query->header;
print "<html><meta http-equiv=\"refresh\" content=\"0\" /><body onload=\"window.opener.location.reload(true);self.close();\"></body></html>";
exit;
}
#Reload the page where you came from
print $query->header;
print "<html><meta http-equiv=\"refresh\" content=\"0\" /><body onload=\"window.opener.location.reload(true);self.close();\"></body></html>";
}
}
sub HandleShelfNumber {
} elsif ($shelfnumber) {
my $shelfnumber = $query->param('shelfnumber');
my $shelf = Koha::Virtualshelves->find( $shelfnumber );
if ( $shelf->can_biblios_be_added( $loggedinuser ) ) {
for my $bib (@biblionumber) {
$shelf->add_biblio( $bib, $loggedinuser );
my $shelf = Koha::Virtualshelves->find($shelfnumber);
if ( $shelf->can_biblios_be_added($loggedinuser) ) {
for my $biblionumber (@biblionumbers) {
$shelf->add_biblio( $biblionumber, $loggedinuser );
}
#Close this page and return
print $query->header;
print "<html><meta http-equiv=\"refresh\" content=\"0\" /><body onload=\"self.close();\"></body></html>";
exit;
} else {
# TODO
$authorized = 0;
}
}
sub HandleSelectedShelf {
} elsif ($selectedshelf) {
my $shelfnumber = $query->param('selectedshelf');
my $shelf = Koha::Virtualshelves->find( $shelfnumber );
if ( $shelf->can_biblios_be_added( $loggedinuser ) ) {
my $shelf = Koha::Virtualshelves->find($shelfnumber);
if ( $shelf->can_biblios_be_added($loggedinuser) ) {
$template->param(
singleshelf => 1,
shelfnumber => $shelf->shelfnumber,
shelfname => $shelf->shelfname,
singleshelf => 1,
shelfnumber => $shelf->shelfnumber,
shelfname => $shelf->shelfname,
);
} else {
# TODO
$authorized = 0;
}
} else {
if ( $loggedinuser > 0 ) {
my $private_shelves = Koha::Virtualshelves->search(
{ category => 1,
owner => $loggedinuser,
},
{ order_by => 'shelfname' }
);
my $shelves_shared_with_me = Koha::Virtualshelves->search(
{ category => 1,
'virtualshelfshares.borrowernumber' => $loggedinuser,
-or => {
allow_add => 1,
owner => $loggedinuser,
}
},
{ join => 'virtualshelfshares', }
);
my $public_shelves = Koha::Virtualshelves->search(
{ category => 2,
-or => {
allow_add => 1,
owner => $loggedinuser,
}
},
{ order_by => 'shelfname' }
);
$template->param(
private_shelves => $private_shelves,
private_shelves_shared_with_me => $shelves_shared_with_me,
public_shelves => $public_shelves,
);
} else {
$authorized = 0;
}
}
sub HandleSelect {
return unless $authorized= $loggedinuser>0;
my $private_shelves = Koha::Virtualshelves->search(
{
category => 1,
owner => $loggedinuser,
},
{ order_by => 'shelfname' }
);
my $shelves_shared_with_me = Koha::Virtualshelves->search(
{
category => 1,
'virtualshelfshares.borrowernumber' => $loggedinuser,
-or => {
allow_add => 1,
owner => $loggedinuser,
if ($authorized) {
for my $biblionumber (@biblionumbers) {
my $data = GetBiblioData($biblionumber);
push(
@biblios,
{ biblionumber => $biblionumber,
title => $data->{'title'},
author => $data->{'author'},
}
},
{
join => 'virtualshelfshares',
}
);
my $public_shelves= Koha::Virtualshelves->search(
{
category => 2,
-or => {
allow_add => 1,
owner => $loggedinuser,
}
},
{ order_by => 'shelfname' }
);
$template->param (
private_shelves => $private_shelves,
private_shelves_shared_with_me => $shelves_shared_with_me,
public_shelves => $public_shelves,
);
}
sub LoadBib {
for my $bib (@biblionumber) {
my $data = GetBiblioData( $bib );
push(@biblios,
{ biblionumber => $bib,
title => $data->{'title'},
author => $data->{'author'},
} );
);
}
$template->param(
multiple => (scalar(@biblios) > 1),
total => scalar @biblios,
biblios => \@biblios,
multiple => ( scalar(@biblios) > 1 ),
total => scalar @biblios,
biblios => \@biblios,
);
}
sub ShowTemplate {
$template->param (
newshelf => $newshelf||0,
authorized => $authorized,
errcode => $errcode,
OpacAllowPublicListCreation => C4::Context->preference('OpacAllowPublicListCreation'),
$template->param(
newshelf => $newshelf || 0,
OpacAllowPublicListCreation => C4::Context->preference('OpacAllowPublicListCreation'),
);
output_html_with_http_headers $query, $cookie, $template->output;
}
$template->param( authorized => $authorized, errcode => $errcode, );
output_html_with_http_headers $query, $cookie, $template->output;

View File

@ -1,9 +1,7 @@
#!/usr/bin/perl
#script to provide virtual shelf management
#
#
# Copyright 2000-2002 Katipo Communications
# Copyright 2016 Koha Development Team
#
# This file is part of Koha.
#
@ -58,8 +56,7 @@ addbybiblionumber.pl
=cut
use strict;
use warnings;
use Modern::Perl;
use CGI qw ( -utf8 );
use C4::Biblio;
@ -68,20 +65,25 @@ use C4::Auth;
use Koha::Virtualshelves;
our $query = new CGI;
our @biblionumber = HandleBiblioPars();
our $shelfnumber = $query->param('shelfnumber');
our $newvirtualshelf = $query->param('newvirtualshelf');
our $newshelf = $query->param('newshelf');
our $category = $query->param('category');
our $sortfield = $query->param('sortfield');
my $query = new CGI;
my $shelfnumber = $query->param('shelfnumber');
my $newvirtualshelf = $query->param('newvirtualshelf');
my $newshelf = $query->param('newshelf');
my $category = $query->param('category');
my $sortfield = $query->param('sortfield');
my $confirmed = $query->param('confirmed') || 0;
our $authorized = 1;
our $errcode = 0;
my ( $errcode, $authorized ) = ( 0, 1 );
my @biblionumbers = $query->multi_param('biblionumber');
our ( $template, $loggedinuser, $cookie ) = get_template_and_user(
{
template_name => "virtualshelves/addbybiblionumber.tt",
if ( @biblionumbers == 0 && $query->param('biblionumbers') ) {
my $str = $query->param('biblionumbers');
@biblionumbers = split '/', $str;
} elsif ( @biblionumbers == 1 && $biblionumbers[0] =~ /\// ) {
@biblionumbers = split '/', $biblionumbers[0];
}
my ( $template, $loggedinuser, $cookie ) = get_template_and_user(
{ template_name => "virtualshelves/addbybiblionumber.tt",
query => $query,
type => "intranet",
authnotrequired => 0,
@ -89,155 +91,117 @@ our ( $template, $loggedinuser, $cookie ) = get_template_and_user(
}
);
if( $newvirtualshelf) {
HandleNewVirtualShelf();
exit if $authorized;
ShowTemplate(); #error message
}
elsif($shelfnumber && $confirmed) {
HandleShelfNumber();
exit if $authorized;
ShowTemplate(); #error message
}
elsif($shelfnumber) { #still needs confirmation
HandleSelectedShelf();
LoadBib() if $authorized;
ShowTemplate();
}
else {
HandleSelect();
LoadBib();
ShowTemplate();
}
#end
sub HandleBiblioPars {
my @bib= $query->multi_param('biblionumber');
if(@bib==0 && $query->param('biblionumbers')) {
my $str= $query->param('biblionumbers');
@bib= split '/', $str;
}
elsif(@bib==1 && $bib[0]=~/\//) {
@bib= split '/', $bib[0];
}
return @bib;
}
sub HandleNewVirtualShelf {
if ($newvirtualshelf) {
my $shelf = eval {
Koha::Virtualshelf->new(
{
shelfname => $newvirtualshelf,
category => $category,
category => $category,
sortfield => $sortfield,
owner => $loggedinuser,
owner => $loggedinuser,
}
)->store;
};
if ( $@ or not $shelf ) {
$authorized = 0;
$errcode = 1;
return;
}
$authorized = 0;
} else {
for my $bib (@biblionumber){
$shelf->add_biblio( $bib, $loggedinuser );
}
#Reload the page where you came from
print $query->header;
print "<html><meta http-equiv=\"refresh\" content=\"0\" /><body onload=\"window.opener.location.reload(true);self.close();\"></body></html>";
}
sub HandleShelfNumber {
my $shelf = Koha::Virtualshelves->find( $shelfnumber );
if($authorized = $shelf->can_biblios_be_added( $loggedinuser ) ) {
for my $bib (@biblionumber){
$shelf->add_biblio( $bib, $loggedinuser );
for my $biblionumber (@biblionumbers) {
$shelf->add_biblio( $biblionumber, $loggedinuser );
}
#Reload the page where you came from
print $query->header;
print "<html><meta http-equiv=\"refresh\" content=\"0\" /><body onload=\"window.opener.location.reload(true);self.close();\"></body></html>";
exit;
}
} elsif ( $shelfnumber && $confirmed ) {
my $shelf = Koha::Virtualshelves->find($shelfnumber);
if ( $shelf->can_biblios_be_added($loggedinuser) ) {
for my $biblionumber (@biblionumbers) {
$shelf->add_biblio( $biblionumber, $loggedinuser );
}
#Close this page and return
print $query->header;
print "<html><meta http-equiv=\"refresh\" content=\"0\" /><body onload=\"self.close();\"></body></html>";
exit;
} else {
$errcode = 2; #no perm
$authorized = 0;
}
else {
$errcode=2; #no perm
}
}
sub HandleSelectedShelf {
my $shelf = Koha::Virtualshelves->find( $shelfnumber );
if($authorized = $shelf->can_biblios_be_added( $loggedinuser ) ) {
} elsif ($shelfnumber) { #still needs confirmation
my $shelf = Koha::Virtualshelves->find($shelfnumber);
if ( $shelf->can_biblios_be_added($loggedinuser) ) {
#confirm adding to specific shelf
$template->param(
singleshelf => 1,
shelfnumber => $shelf->shelfnumber,
shelfname => $shelf->shelfname,
singleshelf => 1,
shelfnumber => $shelf->shelfnumber,
shelfname => $shelf->shelfname,
);
} else {
$authorized = 0;
$errcode = 2; #no perm
}
else {
$errcode=2; #no perm
}
}
sub HandleSelect {
} else {
my $private_shelves = Koha::Virtualshelves->search(
{
category => 1,
owner => $loggedinuser,
{ category => 1,
owner => $loggedinuser,
},
{ order_by => 'shelfname' }
);
my $shelves_shared_with_me = Koha::Virtualshelves->search(
{
category => 1,
{ category => 1,
'virtualshelfshares.borrowernumber' => $loggedinuser,
-or => {
-or => {
allow_add => 1,
owner => $loggedinuser,
owner => $loggedinuser,
}
},
{
join => 'virtualshelfshares',
}
{ join => 'virtualshelfshares', }
);
my $public_shelves= Koha::Virtualshelves->search(
{
category => 2,
-or => {
my $public_shelves = Koha::Virtualshelves->search(
{ category => 2,
-or => {
allow_add => 1,
owner => $loggedinuser,
owner => $loggedinuser,
}
},
{ order_by => 'shelfname' }
);
$template->param (
private_shelves => $private_shelves,
$template->param(
private_shelves => $private_shelves,
private_shelves_shared_with_me => $shelves_shared_with_me,
public_shelves => $public_shelves,
public_shelves => $public_shelves,
);
}
sub LoadBib {
my @biblios;
for my $bib (@biblionumber) {
my $data = GetBiblioData($bib);
push(@biblios,
{ biblionumber => $bib,
title => $data->{'title'},
author => $data->{'author'},
} );
}
$template->param(
multiple => (scalar(@biblios) > 1),
my @biblios;
for my $biblionumber (@biblionumbers) {
my $data = GetBiblioData($biblionumber);
push(
@biblios,
{ biblionumber => $biblionumber,
title => $data->{'title'},
author => $data->{'author'},
}
);
}
$template->param(
multiple => ( scalar(@biblios) > 1 ),
total => scalar @biblios,
biblios => \@biblios,
);
}
);
sub ShowTemplate {
$template->param (
newshelf => $newshelf||0,
authorized => $authorized,
errcode => $errcode,
);
output_html_with_http_headers $query, $cookie, $template->output;
}
$template->param(
newshelf => $newshelf || 0,
authorized => $authorized,
errcode => $errcode,
);
output_html_with_http_headers $query, $cookie, $template->output;