From ac3723b6e54be2e2a72d10f3fc34e402dabce865 Mon Sep 17 00:00:00 2001 From: Kyle M Hall Date: Thu, 5 Dec 2013 07:35:00 -0500 Subject: [PATCH] Bug 6254 - can't set patron privacy by default There is currently no way to set the privacy setting for newly created patrons. This patch adds a new field "default privacy" to the patron categories such that each patron category may have a different default privacy setting. Test Plan: 1) Apply this patch 2) Edit a patron category, change the default privacy to "forever" 3) Create a new patron of that category 4) Log into the catalog as that patron, verify the privacy setting is set to "forever" 5) Repeat steps 2-4 with the settings "never" and "default" Signed-off-by: Joel Sasse Signed-off-by: Jonathan Druart --- C4/Members.pm | 10 ++++ Koha/Schema/Result/Category.pm | 44 +++++++++--------- admin/categorie.pl | 49 +++++++++++--------- installer/data/mysql/kohastructure.sql | 1 + installer/data/mysql/updatedatabase.pl | 7 +++ .../prog/en/modules/admin/categorie.tt | 20 ++++++++ 6 files changed, 85 insertions(+), 46 deletions(-) diff --git a/C4/Members.pm b/C4/Members.pm index 29eda68..3623fe8 100644 --- a/C4/Members.pm +++ b/C4/Members.pm @@ -41,6 +41,7 @@ use Koha::DateUtils; use Koha::Borrower::Debarments qw(IsDebarred); use Text::Unaccent qw( unac_string ); use Koha::AuthUtils qw(hash_password); +use Koha::Database; our ($VERSION,@ISA,@EXPORT,@EXPORT_OK,$debug); @@ -807,6 +808,15 @@ sub AddMember { $data{'dateenrolled'} = C4::Dates->new()->output("iso"); } + my $patron_category = + Koha::Database->new()->schema()->resultset('Category') + ->find( $data{'categorycode'} ); + $data{'privacy'} = + $patron_category->default_privacy() eq 'default' ? 1 + : $patron_category->default_privacy() eq 'never' ? 2 + : $patron_category->default_privacy() eq 'forever' ? 0 + : undef; + # create a disabled account if no password provided $data{'password'} = ($data{'password'})? hash_password($data{'password'}) : '!'; $data{'borrowernumber'}=InsertInTable("borrowers",\%data); diff --git a/Koha/Schema/Result/Category.pm b/Koha/Schema/Result/Category.pm index 12ac12f..b6de4b9 100644 --- a/Koha/Schema/Result/Category.pm +++ b/Koha/Schema/Result/Category.pm @@ -1,21 +1,17 @@ -use utf8; package Koha::Schema::Result::Category; # Created by DBIx::Class::Schema::Loader # DO NOT MODIFY THE FIRST PART OF THIS FILE -=head1 NAME - -Koha::Schema::Result::Category - -=cut - use strict; use warnings; use base 'DBIx::Class::Core'; -=head1 TABLE: C + +=head1 NAME + +Koha::Schema::Result::Category =cut @@ -43,7 +39,6 @@ __PACKAGE__->table("categories"); =head2 enrolmentperioddate data_type: 'date' - datetime_undef_if_invalid: 1 is_nullable: 1 =head2 upperagelimit @@ -102,6 +97,13 @@ __PACKAGE__->table("categories"); is_nullable: 0 size: 1 +=head2 default_privacy + + data_type: 'enum' + default_value: 'default' + extra: {list => ["default","never","forever"]} + is_nullable: 0 + =cut __PACKAGE__->add_columns( @@ -112,7 +114,7 @@ __PACKAGE__->add_columns( "enrolmentperiod", { data_type => "smallint", is_nullable => 1 }, "enrolmentperioddate", - { data_type => "date", datetime_undef_if_invalid => 1, is_nullable => 1 }, + { data_type => "date", is_nullable => 1 }, "upperagelimit", { data_type => "smallint", is_nullable => 1 }, "dateofbirthrequired", @@ -133,18 +135,14 @@ __PACKAGE__->add_columns( { data_type => "tinyint", default_value => 0, is_nullable => 0 }, "category_type", { data_type => "varchar", default_value => "A", is_nullable => 0, size => 1 }, + "default_privacy", + { + data_type => "enum", + default_value => "default", + extra => { list => ["default", "never", "forever"] }, + is_nullable => 0, + }, ); - -=head1 PRIMARY KEY - -=over 4 - -=item * L - -=back - -=cut - __PACKAGE__->set_primary_key("categorycode"); =head1 RELATIONS @@ -225,8 +223,8 @@ __PACKAGE__->might_have( ); -# Created by DBIx::Class::Schema::Loader v0.07025 @ 2013-10-14 20:56:21 -# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:lert5/PnaztNZ9rmoGc2Gg +# Created by DBIx::Class::Schema::Loader v0.07000 @ 2013-12-05 08:14:03 +# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:fQEm4xRLHEY1L2/KqCzi0Q # You can replace this text with custom content, and it will be preserved on regeneration diff --git a/admin/categorie.pl b/admin/categorie.pl index 952ef7a..abd73f8 100755 --- a/admin/categorie.pl +++ b/admin/categorie.pl @@ -94,7 +94,7 @@ if ($op eq 'add_form') { my @selected_branches; if ($categorycode) { my $dbh = C4::Context->dbh; - my $sth=$dbh->prepare("select categorycode,description,enrolmentperiod,enrolmentperioddate,upperagelimit,dateofbirthrequired,enrolmentfee,issuelimit,reservefee,hidelostitems,overduenoticerequired,category_type from categories where categorycode=?"); + my $sth=$dbh->prepare("SELECT * FROM categories WHERE categorycode = ?"); $sth->execute($categorycode); $data=$sth->fetchrow_hashref; @@ -119,22 +119,27 @@ if ($op eq 'add_form') { }; } - $template->param(description => $data->{'description'}, - enrolmentperiod => $data->{'enrolmentperiod'}, - enrolmentperioddate => C4::Dates::format_date($data->{'enrolmentperioddate'}), - upperagelimit => $data->{'upperagelimit'}, - dateofbirthrequired => $data->{'dateofbirthrequired'}, - enrolmentfee => sprintf("%.2f",$data->{'enrolmentfee'}), - overduenoticerequired => $data->{'overduenoticerequired'}, - issuelimit => $data->{'issuelimit'}, - reservefee => sprintf("%.2f",$data->{'reservefee'}), - hidelostitems => $data->{'hidelostitems'}, - category_type => $data->{'category_type'}, - SMSSendDriver => C4::Context->preference("SMSSendDriver"), - TalkingTechItivaPhone => C4::Context->preference("TalkingTechItivaPhoneNotification"), - "type_".$data->{'category_type'} => 1, - branches_loop => \@branches_loop, - ); + $template->param( + description => $data->{'description'}, + upperagelimit => $data->{'upperagelimit'}, + dateofbirthrequired => $data->{'dateofbirthrequired'}, + enrolmentfee => sprintf( "%.2f", $data->{'enrolmentfee'} ), + overduenoticerequired => $data->{'overduenoticerequired'}, + issuelimit => $data->{'issuelimit'}, + reservefee => sprintf( "%.2f", $data->{'reservefee'} ), + hidelostitems => $data->{'hidelostitems'}, + category_type => $data->{'category_type'}, + SMSSendDriver => C4::Context->preference("SMSSendDriver"), + branches_loop => \@branches_loop, + default_privacy => $data->{'default_privacy'}, + enrolmentperiod => $data->{'enrolmentperiod'}, + enrolmentperioddate => + C4::Dates::format_date( $data->{'enrolmentperioddate'} ), + TalkingTechItivaPhone => + C4::Context->preference("TalkingTechItivaPhoneNotification"), + "type_" . $data->{'category_type'} => 1, + ); + if (C4::Context->preference('EnhancedMessagingPreferences')) { C4::Form::MessagingPreferences::set_form_values({ categorycode => $categorycode } , $template); } @@ -150,8 +155,8 @@ if ($op eq 'add_form') { } if ($is_a_modif) { - my $sth=$dbh->prepare("UPDATE categories SET description=?,enrolmentperiod=?, enrolmentperioddate=?,upperagelimit=?,dateofbirthrequired=?,enrolmentfee=?,reservefee=?,hidelostitems=?,overduenoticerequired=?,category_type=? WHERE categorycode=?"); - $sth->execute(map { $input->param($_) } ('description','enrolmentperiod','enrolmentperioddate','upperagelimit','dateofbirthrequired','enrolmentfee','reservefee','hidelostitems','overduenoticerequired','category_type','categorycode')); + my $sth=$dbh->prepare("UPDATE categories SET description=?,enrolmentperiod=?, enrolmentperioddate=?,upperagelimit=?,dateofbirthrequired=?,enrolmentfee=?,reservefee=?,hidelostitems=?,overduenoticerequired=?,category_type=?, default_privacy=? WHERE categorycode=?"); + $sth->execute(map { $input->param($_) } ('description','enrolmentperiod','enrolmentperioddate','upperagelimit','dateofbirthrequired','enrolmentfee','reservefee','hidelostitems','overduenoticerequired','category_type','default_privacy','categorycode')); my @branches = $input->param("branches"); if ( @branches ) { $sth = $dbh->prepare("DELETE FROM categories_branches WHERE categorycode = ?"); @@ -168,11 +173,9 @@ if ($op eq 'add_form') { $sth->execute; } } - $sth->finish; } else { - my $sth=$dbh->prepare("INSERT INTO categories (categorycode,description,enrolmentperiod,enrolmentperioddate,upperagelimit,dateofbirthrequired,enrolmentfee,reservefee,hidelostitems,overduenoticerequired,category_type) values (?,?,?,?,?,?,?,?,?,?,?)"); - $sth->execute(map { $input->param($_) } ('categorycode','description','enrolmentperiod','enrolmentperioddate','upperagelimit','dateofbirthrequired','enrolmentfee','reservefee','hidelostitems','overduenoticerequired','category_type')); - $sth->finish; + my $sth=$dbh->prepare("INSERT INTO categories (categorycode,description,enrolmentperiod,enrolmentperioddate,upperagelimit,dateofbirthrequired,enrolmentfee,reservefee,hidelostitems,overduenoticerequired,category_type,default_privacy) values (?,?,?,?,?,?,?,?,?,?,?,?)"); + $sth->execute(map { $input->param($_) } ('categorycode','description','enrolmentperiod','enrolmentperioddate','upperagelimit','dateofbirthrequired','enrolmentfee','reservefee','hidelostitems','overduenoticerequired','category_type', 'default_privacy')); } if (C4::Context->preference('EnhancedMessagingPreferences')) { C4::Form::MessagingPreferences::handle_form_action($input, diff --git a/installer/data/mysql/kohastructure.sql b/installer/data/mysql/kohastructure.sql index 136104f..31f27f9 100644 --- a/installer/data/mysql/kohastructure.sql +++ b/installer/data/mysql/kohastructure.sql @@ -466,6 +466,7 @@ CREATE TABLE `categories` ( -- this table shows information related to Koha patr `reservefee` decimal(28,6) default NULL, -- cost to place holds `hidelostitems` tinyint(1) NOT NULL default '0', -- are lost items shown to this category (1 for yes, 0 for no) `category_type` varchar(1) NOT NULL default 'A', -- type of Koha patron (Adult, Child, Professional, Organizational, Statistical, Staff) + `default_privacy` ENUM( 'default', 'never', 'forever' ) NOT NULL DEFAULT 'default', -- Default privacy setting for this patron category PRIMARY KEY (`categorycode`), UNIQUE KEY `categorycode` (`categorycode`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; diff --git a/installer/data/mysql/updatedatabase.pl b/installer/data/mysql/updatedatabase.pl index f98daa7..71310fe 100755 --- a/installer/data/mysql/updatedatabase.pl +++ b/installer/data/mysql/updatedatabase.pl @@ -7945,6 +7945,13 @@ if (CheckVersion($DBversion)) { SetVersion($DBversion); } +$DBversion = "3.15.00.XXX"; +if(CheckVersion($DBversion)) { + $dbh->do("ALTER TABLE categories ADD default_privacy ENUM( 'default', 'never', 'forever' ) NOT NULL DEFAULT 'default'"); + print "Upgrade to $DBversion done (Bug 6254 - can't set patron privacy by default)\n"; + SetVersion($DBversion); +} + =head1 FUNCTIONS =head2 TableExists($table) diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/categorie.tt b/koha-tmpl/intranet-tmpl/prog/en/modules/admin/categorie.tt index d1c2e4c..56b667a 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/categorie.tt +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/admin/categorie.tt @@ -203,6 +203,26 @@ Select All if this category type must to be displayed all the time. Otherwise select librairies you want to associate with this value. +
  • + + + Controls how long a patrons checkout history is kept for new patrons of this category. "Default" lets the library decide, "Never" anonymizes checkouts on return, and "Forever" keeps a patron's checkout history indefinitely. +
  • -- 1.7.10.4