From 9e5fafdc8cf29b292e498d58165f317b9fa0c19e Mon Sep 17 00:00:00 2001 From: Vitor FERNANDES Date: Wed, 28 Nov 2012 15:50:44 +0000 Subject: [PATCH 1/2] 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 | 9 +++++++ .../en/modules/admin/preferences/cataloguing.pref | 18 ++++++++++++++ 5 files changed, 68 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 e3966ce..29c9c7a 100644 --- a/installer/data/mysql/sysprefs.sql +++ b/installer/data/mysql/sysprefs.sql @@ -421,3 +421,6 @@ INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES( INSERT IGNORE INTO systempreferences (variable,value,explanation,options,type) VALUES('PatronSelfRegistrationAdditionalInstructions','','A free text field to display additional instructions to newly self registered patrons.','','free'); INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES('UseQueryParser', '0', 'If enabled, try to use QueryParser for queries.', NULL, 'YesNo'); 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('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 f0a9269..0821c8b 100755 --- a/installer/data/mysql/updatedatabase.pl +++ b/installer/data/mysql/updatedatabase.pl @@ -6532,6 +6532,15 @@ if (C4::Context->preference("Version") < TransformToNum($DBversion)) { SetVersion ($DBversion); } +$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); +} + =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 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.10.4