From 30d58bfad1d6fbb33a751a8b6483aa1438cb896a Mon Sep 17 00:00:00 2001
From: Vitor FERNANDES <vfernandes@keep.pt>
Date: Wed, 28 Nov 2012 17:25:59 +0000
Subject: [PATCH 1/1] BUG 9163 - Patch2 use user permissions instead of systempreferences

New user permission added to access the validation framework, under edit catalogue section.
---
 cataloguing/addbiblio.pl                           |   16 +++++-------
 cataloguing/addbooks.pl                            |   26 +++++++++----------
 .../data/mysql/de-DE/mandatory/userpermissions.sql |    1 +
 .../data/mysql/en/mandatory/userpermissions.sql    |    1 +
 .../data/mysql/es-ES/mandatory/userpermissions.sql |    1 +
 .../mysql/fr-FR/1-Obligatoire/userpermissions.sql  |    1 +
 .../data/mysql/it-IT/necessari/userpermissions.sql |    1 +
 .../mysql/nb-NO/1-Obligatorisk/userpermissions.sql |    1 +
 .../data/mysql/pl-PL/mandatory/userpermissions.sql |    1 +
 installer/data/mysql/sysprefs.sql                  |    1 -
 installer/data/mysql/updatedatabase.pl             |    2 +-
 .../en/modules/admin/preferences/cataloguing.pref  |    5 ----
 12 files changed, 27 insertions(+), 30 deletions(-)

diff --git a/cataloguing/addbiblio.pl b/cataloguing/addbiblio.pl
index d9a20c0..6d083d6 100755
--- a/cataloguing/addbiblio.pl
+++ b/cataloguing/addbiblio.pl
@@ -22,9 +22,9 @@
 use strict;
 #use warnings; FIXME - Bug 2505
 use CGI;
-use CGI::Session;
+use C4::Members;
 use C4::Output;
-use C4::Auth qw/:DEFAULT get_session/;
+use C4::Auth;
 use C4::Biblio;
 use C4::Search;
 use C4::AuthoritiesMarc;
@@ -735,11 +735,6 @@ 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');
@@ -764,9 +759,12 @@ my ( $template, $loggedinuser, $cookie ) = get_template_and_user(
     }
 );
 
+my $uid = GetMember( borrowernumber => $loggedinuser )->{userid} if ($loggedinuser);
+my $validationpermission = haspermission($uid,  {'editcatalogue' => 'cataloging_validation_framework'});
+
 # 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}));
+$frameworkcode = '' if ($validation && ($frameworkcode eq $validationframework && !$validationpermission));
 
 if ($frameworkcode eq 'FA'){
     # We need to grab and set some variables in the template for use on the additems screen
@@ -793,7 +791,7 @@ foreach my $thisframeworkcode ( 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})))) {
+    if (!$validation || ($validation && ($thisframeworkcode ne $validationframework || ($thisframeworkcode eq $validationframework && $validationpermission)))) {
         push @frameworkcodeloop, \%row;
     }
 } 
diff --git a/cataloguing/addbooks.pl b/cataloguing/addbooks.pl
index 8d16319..40e6b98 100755
--- a/cataloguing/addbooks.pl
+++ b/cataloguing/addbooks.pl
@@ -27,8 +27,8 @@
 use strict;
 use warnings;
 use CGI;
-use CGI::Session;
-use C4::Auth qw/:DEFAULT get_session/;
+use C4::Members;
+use C4::Auth;
 use C4::Biblio;
 use C4::Breeding;
 use C4::Output;
@@ -37,15 +37,9 @@ 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');
@@ -65,17 +59,21 @@ my ( $template, $loggedinuser, $cookie ) = get_template_and_user(
     }
 );
 
+my $uid = GetMember( borrowernumber => $loggedinuser )->{userid} if ($loggedinuser);
+my $validationpermission = haspermission($uid,  {'editcatalogue' => 'cataloging_validation_framework'});
+
 # get framework list
 my $frameworks = getframeworks;
 my @frameworkcodeloop;
-foreach my $thisframeworkcode ( sort { uc($frameworks->{$a}->{'frameworktext'}) cmp uc($frameworks->{$b}->{'frameworktext'}) } keys %{$frameworks} ) {
+foreach my $thisframeworkcode ( sort {$frameworks->{$a} cmp $frameworks->{$b}}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'},
-    };
+    if (!$validation || ($validation && ($thisframeworkcode ne $validationframework || ($thisframeworkcode eq $validationframework && $validationpermission)))) {
+        push @frameworkcodeloop, {
+            value         => $thisframeworkcode,
+            frameworktext => $frameworks->{$thisframeworkcode}->{'frameworktext'},
+        };
+    }
 }
 
 
diff --git a/installer/data/mysql/de-DE/mandatory/userpermissions.sql b/installer/data/mysql/de-DE/mandatory/userpermissions.sql
index dc281a9..e32a9b9 100644
--- a/installer/data/mysql/de-DE/mandatory/userpermissions.sql
+++ b/installer/data/mysql/de-DE/mandatory/userpermissions.sql
@@ -9,6 +9,7 @@ INSERT INTO permissions (module_bit, code, description) VALUES
    ( 9, 'edit_catalogue', 'Katalogdaten bearbeiten (Titel- und Exemplardaten ändern)'),
    ( 9, 'fast_cataloging', 'Schnellaufnahmen anlegen'),
    ( 9, 'edit_items', 'Exemplare bearbeiten'),
+   ( 9, 'cataloging_validation_framework', 'Access to the cataloguing validation framework'),
    (11, 'vendors_manage', 'Lieferanten verwalten'),
    (11, 'contracts_manage', 'Vereinbarungen verwalten'),
    (11, 'period_manage', 'Etats verwalten'),
diff --git a/installer/data/mysql/en/mandatory/userpermissions.sql b/installer/data/mysql/en/mandatory/userpermissions.sql
index 124e030..452a4b8 100644
--- a/installer/data/mysql/en/mandatory/userpermissions.sql
+++ b/installer/data/mysql/en/mandatory/userpermissions.sql
@@ -9,6 +9,7 @@ INSERT INTO permissions (module_bit, code, description) VALUES
    ( 9, 'edit_catalogue', 'Edit catalog (Modify bibliographic/holdings data)'),
    ( 9, 'fast_cataloging', 'Fast cataloging'),
    ( 9, 'edit_items', 'Edit Items'),
+   ( 9, 'cataloging_validation_framework', 'Access to the cataloguing validation framework'),
    (11, 'vendors_manage', 'Manage vendors'),
    (11, 'contracts_manage', 'Manage contracts'),
    (11, 'period_manage', 'Manage periods'),
diff --git a/installer/data/mysql/es-ES/mandatory/userpermissions.sql b/installer/data/mysql/es-ES/mandatory/userpermissions.sql
index f731eab..416d638 100644
--- a/installer/data/mysql/es-ES/mandatory/userpermissions.sql
+++ b/installer/data/mysql/es-ES/mandatory/userpermissions.sql
@@ -9,6 +9,7 @@ INSERT INTO permissions (module_bit, code, description) VALUES
    ( 9, 'edit_catalogue', 'Edit catalog (Modify bibliographic/holdings data)'),
    ( 9, 'fast_cataloging', 'Fast cataloging'),
    ( 9, 'edit_items', 'Edit Items'),
+   ( 9, 'cataloging_validation_framework', 'Access to the cataloguing validation framework'),
    (11, 'vendors_manage', 'Manage vendors'),
    (11, 'contracts_manage', 'Manage contracts'),
    (11, 'period_manage', 'Manage periods'),
diff --git a/installer/data/mysql/fr-FR/1-Obligatoire/userpermissions.sql b/installer/data/mysql/fr-FR/1-Obligatoire/userpermissions.sql
index 8edc356..15be0cd 100644
--- a/installer/data/mysql/fr-FR/1-Obligatoire/userpermissions.sql
+++ b/installer/data/mysql/fr-FR/1-Obligatoire/userpermissions.sql
@@ -9,6 +9,7 @@ INSERT INTO permissions (module_bit, code, description) VALUES
    ( 9, 'edit_catalogue', 'Ajouter et modifier des notices au catalogue'),
    ( 9, 'fast_cataloging', 'Catalogage rapide'),
    ( 9, 'edit_items', 'Modifier des exemplaires'),
+   ( 9, 'cataloging_validation_framework', 'Access to the cataloguing validation framework'),
    (13, 'edit_news', 'Ecrire des nouvelles pour l''OPAC et l''interface professionnelle'),
    (13, 'label_creator', 'Créer des étiquettes à partir des données du catalogues et des adhérents'),
    (13, 'edit_calendar', 'Définir les jours de fermeture de la bibliothèque'),
diff --git a/installer/data/mysql/it-IT/necessari/userpermissions.sql b/installer/data/mysql/it-IT/necessari/userpermissions.sql
index 96746cc..78696d4 100644
--- a/installer/data/mysql/it-IT/necessari/userpermissions.sql
+++ b/installer/data/mysql/it-IT/necessari/userpermissions.sql
@@ -11,6 +11,7 @@ INSERT INTO permissions (module_bit, code, description) VALUES
    ( 9, 'edit_catalogue', 'Cataloga (crea/modifica dati bibliografici e di copia)'),
    ( 9, 'fast_cataloging', 'Catalogazione veloce'),
    ( 9, 'edit_items', 'Crea/modifica copie'),
+   ( 9, 'cataloging_validation_framework', 'Access to the cataloguing validation framework'),
    (11, 'vendors_manage', 'Crea/modifica fornitori'),
    (11, 'contracts_manage', 'Crea/modifica contratti'),
    (11, 'period_manage', 'Gestisci scadenze budgets'),
diff --git a/installer/data/mysql/nb-NO/1-Obligatorisk/userpermissions.sql b/installer/data/mysql/nb-NO/1-Obligatorisk/userpermissions.sql
index ba56e3a..80f83cc 100644
--- a/installer/data/mysql/nb-NO/1-Obligatorisk/userpermissions.sql
+++ b/installer/data/mysql/nb-NO/1-Obligatorisk/userpermissions.sql
@@ -29,6 +29,7 @@ INSERT INTO permissions (module_bit, code, description) VALUES
    ( 9, 'edit_catalogue', 'Endre katalogen (Endre bibliografiske poster og eksemplaropplysninger)'),
    ( 9, 'fast_cataloging', 'Hurtigkatalogisering'),
    ( 9, 'edit_items', 'Endre eksmeplarer'),
+   ( 9, 'cataloging_validation_framework', 'Access to the cataloguing validation framework'),
    (11, 'vendors_manage', 'Administrere leverandører'),
    (11, 'contracts_manage', 'Administrere kontrakter'),
    (11, 'period_manage', 'Administrere perioder'),
diff --git a/installer/data/mysql/pl-PL/mandatory/userpermissions.sql b/installer/data/mysql/pl-PL/mandatory/userpermissions.sql
index 5659aba..81699c0 100644
--- a/installer/data/mysql/pl-PL/mandatory/userpermissions.sql
+++ b/installer/data/mysql/pl-PL/mandatory/userpermissions.sql
@@ -9,6 +9,7 @@ INSERT INTO permissions (module_bit, code, description) VALUES
    ( 9, 'edit_catalogue', 'Edit catalogue'),
    ( 9, 'fast_cataloging', 'Szybkie katalogowanie'),
    ( 9, 'edit_items', 'Edit Items'),
+   ( 9, 'cataloging_validation_framework', 'Access to the cataloguing validation framework'),
    (11, 'vendors_manage', 'Zarządzanei dostawcami'),
    (11, 'contracts_manage', 'Zarządzanie kontraktami'),
    (11, 'period_manage', 'Manage periods'),
diff --git a/installer/data/mysql/sysprefs.sql b/installer/data/mysql/sysprefs.sql
index e939b69..cb32e8e 100644
--- a/installer/data/mysql/sysprefs.sql
+++ b/installer/data/mysql/sysprefs.sql
@@ -421,4 +421,3 @@ INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES (
 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 c4eda19..747345e 100755
--- a/installer/data/mysql/updatedatabase.pl
+++ b/installer/data/mysql/updatedatabase.pl
@@ -6656,7 +6656,7 @@ $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');");
+    $dbh->do("INSERT INTO permissions (module_bit, code, description) VALUES ( 9, 'cataloging_validation_framework', 'Access to the cataloguing validation framework');");
     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 045b63f..9bbccfe 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
@@ -189,8 +189,3 @@ Cataloging:
             - 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.0.4