From 7fbf52645cbfb5f447cd7f7408c1e940abdc92d1 Mon Sep 17 00:00:00 2001 From: Vitor FERNANDES Date: Wed, 28 Nov 2012 15:50:44 +0000 Subject: [PATCH 1/1] 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 | 25 ++++++++++++++++++- cataloguing/addbooks.pl | 16 ++++++++++++- installer/data/mysql/sysprefs.sql | 3 ++ installer/data/mysql/updatedatabase.pl | 6 ++++ .../en/modules/admin/preferences/cataloguing.pref | 18 ++++++++++++++ 5 files changed, 65 insertions(+), 3 deletions(-) diff --git a/cataloguing/addbiblio.pl b/cataloguing/addbiblio.pl index 3314f1a..d9a20c0 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; @@ -734,6 +735,16 @@ my $fa_branch = $input->param('branch'); my $fa_stickyduedate = $input->param('stickyduedate'); my $fa_duedatespec = $input->param('duedatespec'); +# 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'; @@ -753,6 +764,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->param( @@ -776,7 +791,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 ); @@ -870,6 +889,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 f643599..8d16319 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,6 +69,9 @@ my ( $template, $loggedinuser, $cookie ) = get_template_and_user( my $frameworks = getframeworks; my @frameworkcodeloop; foreach my $thisframeworkcode ( sort { uc($frameworks->{$a}->{'frameworktext'}) cmp uc($frameworks->{$b}->{'frameworktext'}) } keys %{$frameworks} ) { + # 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 df821c0..e939b69 100644 --- a/installer/data/mysql/sysprefs.sql +++ b/installer/data/mysql/sysprefs.sql @@ -419,3 +419,6 @@ INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES(' INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES('FinesIncludeGracePeriod','1','If enabled, fines calculations will include the grace period.',NULL,'YesNo'); INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES ('UNIMARCAuthorsFacetsSeparator',', ', 'UNIMARC authors facets separator', NULL, 'short'); INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES('UseKohaPlugins','1','Enable or disable the ability to use Koha Plugins.','','YesNo'); +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 222428d..c4eda19 100755 --- a/installer/data/mysql/updatedatabase.pl +++ b/installer/data/mysql/updatedatabase.pl @@ -6652,6 +6652,12 @@ if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) { "); print "Upgrade to $DBversion done (Bug 7804: Added plugin system.)\n"; +$DBversion = '3.11.00.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); } 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 96f3603..045b63f 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 @@ -176,3 +176,21 @@ Cataloging: - pref: NotesBlacklist class: multi - note fields in title notes separator (OPAC record details) and in the description separator (Staff client record details). The fields should appear separated with commas and according with the Koha MARC format (eg 3.. for UNIMARC, 5.. for MARC21) + 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.0.4