From 3d1797ff87b1f584b868a90eab8d9282d511054d Mon Sep 17 00:00:00 2001 From: Vitor FERNANDES Date: Wed, 28 Nov 2012 15:50:44 +0000 Subject: [PATCH] BUG 9163 - Cataloguing validation workflow Added 3 systems preferences instead of one: - 1 to use/not use the validation workflow - 1 to set the validation framework code - 1 to set the users with access to the validation framework addbook.pl and addbiblio.pl show the frameworkcodes in the drop list according to settings: - if validation off shows all - if validation on and framework code is different than validation framework code, shows the framework code - if validation on and framework code equal to validation framework code and the user have permissions, shows the framework code - if validation on and framework code equal to validation framework code and the user doesn't have permissions, don't shows the framework code addbiblio.pl also changed to: - prevent any user to use the validation framework (if validation on) when putting the code in the browser URL - if validation on always set suppress = 1 in framework different than the validating one --- cataloguing/addbiblio.pl | 26 +++++++++++++++++--- cataloguing/addbooks.pl | 25 +++++++++++++++---- installer/data/mysql/sysprefs.sql | 3 +++ installer/data/mysql/updatedatabase.pl | 9 +++++++ .../en/modules/admin/preferences/cataloguing.pref | 19 +++++++++++++- 5 files changed, 73 insertions(+), 9 deletions(-) diff --git a/cataloguing/addbiblio.pl b/cataloguing/addbiblio.pl index 2d591c6..03f9f87 100755 --- a/cataloguing/addbiblio.pl +++ b/cataloguing/addbiblio.pl @@ -22,8 +22,9 @@ use strict; #use warnings; FIXME - Bug 2505 use CGI; +use CGI::Session; use C4::Output; -use C4::Auth; +use C4::Auth qw/:DEFAULT get_session/; use C4::Biblio; use C4::Search; use C4::AuthoritiesMarc; @@ -718,7 +719,16 @@ my $dbh = C4::Context->dbh; my $hostbiblionumber = $input->param('hostbiblionumber'); my $hostitemnumber = $input->param('hostitemnumber'); - +# getting userID +my $sessionID = $input->cookie("CGISESSID") ; +my $session = get_session($sessionID); +my $userid = $session->param('id'); + +# getting validation variables +my $validation = C4::Context->preference('CatalogingValidation'); +my $validationframework = C4::Context->preference('CatalogingValidationFramework'); +my %validationusers = map { $_ => 1 } split(/,/,C4::Context->preference('CatalogingValidationUsers')); + my $userflags = 'edit_catalogue'; if ($frameworkcode eq 'FA'){ $userflags = 'fast_cataloging'; @@ -738,6 +748,10 @@ my ( $template, $loggedinuser, $cookie ) = get_template_and_user( } ); +# Clear the framework code if validation is on and the framework code is equal to validation framework but the user is not authorized to use it +# Avoid users to user validation framework adding the code to the URL +$frameworkcode = '' if ($validation && ($frameworkcode eq $validationframework && !$validationusers{$userid})); + if ($frameworkcode eq 'FA'){ # We need to grab and set some variables in the template for use on the additems screen $template->{VARS}->{'circborrowernumber'} = $input->param('borrowernumber'); @@ -759,7 +773,11 @@ foreach my $thisframeworkcode ( keys %$frameworks ) { if ($frameworkcode eq $thisframeworkcode){ $row{'selected'} = 1; } - push @frameworkcodeloop, \%row; + # Add the framework code if validation is off. + # Add the framework code if validation is on, the framework code is equal to validation framework and the user is not authorized to use it + if (!$validation || ($validation && ($thisframeworkcode ne $validationframework || ($thisframeworkcode eq $validationframework && $validationusers{$userid})))) { + push @frameworkcodeloop, \%row; + } } $template->param( frameworkcodeloop => \@frameworkcodeloop, breedingid => $breedingid ); @@ -853,6 +871,8 @@ if ( $op eq "addbiblio" ) { ModBiblio( $record, $biblionumber, $frameworkcode ); } else { + # force 942$n = 1 when validation is on and isn't validation framework + $record->field('942')->update('n' => '1') if ($validation && ($frameworkcode ne $validationframework)); ( $biblionumber, $oldbibitemnum ) = AddBiblio( $record, $frameworkcode ); } if ($redirect eq "items" || ($mode ne "popup" && !$is_a_modif && $redirect ne "view")){ diff --git a/cataloguing/addbooks.pl b/cataloguing/addbooks.pl index 7bca2f3..efc57f7 100755 --- a/cataloguing/addbooks.pl +++ b/cataloguing/addbooks.pl @@ -27,7 +27,8 @@ use strict; use warnings; use CGI; -use C4::Auth; +use CGI::Session; +use C4::Auth qw/:DEFAULT get_session/; use C4::Biblio; use C4::Breeding; use C4::Output; @@ -36,6 +37,16 @@ use C4::Search; my $input = new CGI; +# getting userID +my $sessionID = $input->cookie("CGISESSID"); +my $session = get_session($sessionID); +my $userid = $session->param('id'); + +# getting validation variables +my $validation = C4::Context->preference('CatalogingValidation'); +my $validationframework = C4::Context->preference('CatalogingValidationFramework'); +my %validationusers = map { $_ => 1 } split(/,/,C4::Context->preference('CatalogingValidationUsers')); + my $success = $input->param('biblioitem'); my $query = $input->param('q'); my @value = $input->param('value'); @@ -58,10 +69,14 @@ my ( $template, $loggedinuser, $cookie ) = get_template_and_user( my $frameworks = getframeworks; my @frameworkcodeloop; foreach my $thisframeworkcode ( sort {$frameworks->{$a} cmp $frameworks->{$b}}keys %{$frameworks} ) { - push @frameworkcodeloop, { - value => $thisframeworkcode, - frameworktext => $frameworks->{$thisframeworkcode}->{'frameworktext'}, - }; + # Add the framework code if validation is off. + # Add the framework code if validation is on, the framework code is equal to validation framework and the user is not authorized to use it + if (!$validation || ($validation && ($thisframeworkcode ne $validationframework || ($thisframeworkcode eq $validationframework && $validationusers{$userid})))) { + push @frameworkcodeloop, { + value => $thisframeworkcode, + frameworktext => $frameworks->{$thisframeworkcode}->{'frameworktext'}, + }; + } } diff --git a/installer/data/mysql/sysprefs.sql b/installer/data/mysql/sysprefs.sql index 44f9eb3..8a84c46 100644 --- a/installer/data/mysql/sysprefs.sql +++ b/installer/data/mysql/sysprefs.sql @@ -387,3 +387,6 @@ INSERT INTO systempreferences (variable,value,explanation,type) VALUES('INTRAdid INSERT INTO systempreferences (variable, value, options, explanation, type) VALUES ('BlockReturnOfWithdrawnItems', '1', '0', 'If enabled, items that are marked as withdrawn cannot be returned.', 'YesNo'); INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES('HoldsToPullStartDate','2','Set the default start date for the Holds to pull list to this many days ago',NULL,'Integer'); INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES('alphabet','A B C D E F G H I J K L M N O P Q R S T U V W X Y Z','Alphabet than can be expanded into browse links, e.g. on Home > Patrons',NULL,'free'); +INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES('CatalogingValidation', '0','Active cataloging validation',NULL,'YesNo'); +INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES('CatalogingValidationFramework','','Cataloging validation framework',NULL,'long'); +INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES('CatalogingValidationUsers', '','Cataloging validation users',NULL,'long'); diff --git a/installer/data/mysql/updatedatabase.pl b/installer/data/mysql/updatedatabase.pl index 966ec9b..11fe365 100755 --- a/installer/data/mysql/updatedatabase.pl +++ b/installer/data/mysql/updatedatabase.pl @@ -6083,6 +6083,15 @@ if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) { SetVersion($DBversion); } +$DBversion = "XXX"; +if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) { + $dbh->do("INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES('CatalogingValidation', '0','Active cataloging validation',NULL,'YesNo');"); + $dbh->do("INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES('CatalogingValidationFramework','','Cataloging validation framework',NULL,'long');"); + $dbh->do("INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES('CatalogingValidationUsers', '','Cataloging validation users',NULL,'long');"); + print "Upgrade to $DBversion done (Bug 9163 - Cataloguing validation workflow)\n"; + SetVersion($DBversion); +} + =head1 FUNCTIONS =head2 TableExists($table) diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/cataloguing.pref b/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/cataloguing.pref index 91f15c3..bf98eb7 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/cataloguing.pref +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/cataloguing.pref @@ -156,4 +156,21 @@ Cataloging: - pref: OpacSuppressionByIPRange class: short - (Leave blank if not used. Define a range like 192.168..) - + Validation: + - + - pref: CatalogingValidation + choices: + yes: Use + no: "Don't use" + - "cataloging validation. This allows some users to use a special MARC framework (only visible to them) to validate and put the record online in OPAC.
" + - "NOTE:
- All MARC frameworks except the validation framework (set in CatalogingValidationFramework) needs to have the suppress subfield hidden.
- The validation framework needs to have suppress subfield visible.
- The system preference OPACSuppresion needs to be on.
- The users with access to the validation framework are set in CatalogingValidationUsers." + - + - "Code of the validation framework:" + - pref: CatalogingValidationFramework + class: long + - "
NOTE:
- CatalogingValidation needs to be on.
- The framework needs to be created in the MARC frameworks administration panel.
- The framework needs to have suppress subfield visible." + - + - "The following users (list comma separated) will have access to validation framework:" + - pref: CatalogingValidationUsers + class: long + - "
NOTE:
- CatalogingValidation needs to be on." -- 1.7.9.5