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 
<code>192.168.</code>.)
-
+    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.<br />"
+            - "NOTE:<br /> - All MARC frameworks except the validation 
framework (set in CatalogingValidationFramework) needs to have the suppress 
subfield hidden.<br /> - The validation framework needs to have suppress 
subfield visible.<br />- The system preference OPACSuppresion needs to be 
on.<br /> - The users with access to the validation framework are set in 
CatalogingValidationUsers."
+        -
+            - "Code of the validation framework:"
+            - pref: CatalogingValidationFramework
+              class: long
+            - "<br />NOTE:<br /> - CatalogingValidation needs to be on.<br /> 
- The framework needs to be created in the MARC frameworks administration 
panel.<br /> - The framework needs to have suppress subfield visible."
+        -
+            - "The following users (list comma separated) will have access to 
validation framework:"
+            - pref: CatalogingValidationUsers
+              class: long
+            - "<br />NOTE:<br /> - CatalogingValidation needs to be on."
-- 
1.7.9.5

_______________________________________________
Koha-patches mailing list
[email protected]
http://lists.koha-community.org/cgi-bin/mailman/listinfo/koha-patches
website : http://www.koha-community.org/
git : http://git.koha-community.org/
bugs : http://bugs.koha-community.org/

Reply via email to