From fe667d4886088d3deab8a4253e8f83033121d049 Mon Sep 17 00:00:00 2001 From: Jonathan Druart Date: Mon, 2 Mar 2026 14:59:41 +0100 Subject: [PATCH] Bug 41834: Set systempreferences's options, explanation and type to NULL We currently have to set options, explanation and type in sysprefs.sql and the atomic/dbrev files. However we (almost) never use them, we rely on the values in the yml files. We could remove them and don't require them when when add new sysprefs. It will avoid the mess we currently have (mismatch between new and updated installations, see bug 41682 and bug 41800). Instead of fixing the discrepancies (again, see bug 41800) we should NULL the 3 columns in sysprefs.sql and so at the DB level to rely only on the yaml files. This patch does several things: 1. Remove the 3 columns from sysprefs.sql to use the default NULL 2. Atomic update: * Set to NULL for existing installations as well * Rename UseICUStyleQUotes => UseICUStyleQuotes * Delete OpacMoreSearches and OPACMySummaryNote, old prefs that have been moved to additional contents 3. Fix some errors in yaml files (mostly empty entries) 4. Move parsing of yaml files to a dedicated Koha::Devel::Syspref module 5. Retrieve all yaml content using new methods added to Koha::Config::SysPrefs (that will be reused in follow-up bugs) Test plan: 1. Run updatedatabase and confirm that now all systempreferences rows in DB have options, explanation and type set to NULL (except local-use prefs) 2. `prove t/db_dependent/check_sysprefs.t` should return green 3. Confirm that the UI is still working correctly --- C4/Installer.pm | 6 +- Koha/Config/SysPrefs.pm | 160 +- Koha/Devel/Sysprefs.pm | 108 + .../data/mysql/atomicupdate/bug_41834.pl | 71 + installer/data/mysql/mandatory/sysprefs.sql | 1802 ++++++++--------- .../admin/preferences/cataloguing.pref | 2 +- .../admin/preferences/circulation.pref | 7 +- t/db_dependent/check_sysprefs.t | 204 +- 8 files changed, 1307 insertions(+), 1053 deletions(-) create mode 100644 Koha/Devel/Sysprefs.pm create mode 100755 installer/data/mysql/atomicupdate/bug_41834.pl diff --git a/C4/Installer.pm b/C4/Installer.pm index 7dd124fba53..1391ed791d4 100644 --- a/C4/Installer.pm +++ b/C4/Installer.pm @@ -460,10 +460,8 @@ sub set_marcflavour_syspref { # marc_cleaned finds the marcflavour, without the variant. my $marc_cleaned = 'MARC21'; $marc_cleaned = 'UNIMARC' if $marcflavour =~ /unimarc/i; - my $request = - $self->{'dbh'}->prepare( - "INSERT IGNORE INTO `systempreferences` (variable,value,explanation,options,type) VALUES('marcflavour','$marc_cleaned','Define global MARC flavor (MARC21 or UNIMARC) used for character encoding','MARC21|UNIMARC','Choice');" - ); + my $request = $self->{'dbh'} + ->prepare("INSERT IGNORE INTO `systempreferences` (variable, value) VALUES('marcflavour', '$marc_cleaned')"); $request->execute; } diff --git a/Koha/Config/SysPrefs.pm b/Koha/Config/SysPrefs.pm index ec92745e009..1c87e2ce034 100644 --- a/Koha/Config/SysPrefs.pm +++ b/Koha/Config/SysPrefs.pm @@ -18,11 +18,14 @@ package Koha::Config::SysPrefs; # along with Koha; if not, see . use Modern::Perl; - -use Koha::Database; +use YAML::XS qw(LoadFile); use Koha::Config::SysPref; +use Koha::Config; + +use C4::Templates qw(themelanguage); + use base qw(Koha::Objects); =head1 NAME @@ -31,11 +34,160 @@ Koha::Config::SysPrefs - Koha System Preference object set class =head1 API -=head2 Class Methods +=head2 Instance methods + +=head3 get_pref_files + +my $files = Koha::config::SysPrefs->get_pref_files(); + +Return a hashref containing the list of the yml/pref files in admin/preferences + +=cut + +sub get_pref_files { + my ( $self, $lang ) = @_; + + my $htdocs = Koha::Config->get_instance->get('intrahtdocs'); + my ($theme) = C4::Templates::themelanguage( $htdocs, 'admin/preferences/admin.pref', 'intranet', undef, $lang ); + + my $pref_files = {}; + foreach my $file ( glob("$htdocs/$theme/$lang/modules/admin/preferences/*.pref") ) { + my ($tab) = ( $file =~ /([a-z0-9_-]+)\.pref$/ ); + + # There is a local_use.pref file but it should not be needed + next if $tab eq 'local_use'; + $pref_files->{$tab} = $file; + } + + return $pref_files; +} + +=head3 get_all_from_yml + +my $all_sysprefs = Koha::Config::SysPrefs->get_all_from_yml; + +Return the system preferences information contained in the yml/pref files +The result is cached! + +eg. for AcqCreateItem +{ + category_name "Policy", + choices { + cataloguing "cataloging the record.", + ordering "placing an order.", + receiving "receiving an order." + }, + chunks [ + [0] "Create an item when", + [1] { + choices var{choices}, + pref "AcqCreateItem" + }, + [2] "This is only the default behavior, and can be changed per-basket." + ], + default undef, + description [ + [0] "Create an item when", + [1] "This is only the default behavior, and can be changed per-basket." + ], + name "AcqCreateItem", + tab_id "acquisitions", + tab_name "Acquisitions", + type "select" +} + +=cut + +sub get_all_from_yml { + my ( $self, $lang ) = @_; + + $lang //= "en"; + + my $cache = Koha::Caches->get_instance("sysprefs"); + my $cache_key = "all:${lang}"; + my $all_prefs = $cache->get_from_cache($cache_key); + + unless ($all_prefs) { + + my $pref_files = Koha::Config::SysPrefs->new->get_pref_files($lang); + + $all_prefs = {}; + + while ( my ( $tab, $filepath ) = each %$pref_files ) { + my $yml = LoadFile($filepath); + + if ( scalar keys %$yml != 1 ) { + + # FIXME Move this to an xt test + die "malformed pref file ($filepath), only one top level key expected"; + } + + for my $tab_name ( sort keys %$yml ) { + for my $category_name ( sort keys %{ $yml->{$tab_name} } ) { + for my $pref_entry ( @{ $yml->{$tab_name}->{$category_name} } ) { + my $pref = { + tab_id => $tab, + tab_name => $tab_name, + category_name => $category_name, + }; + for my $entry (@$pref_entry) { + push @{ $pref->{chunks} }, $entry; + if ( ref $entry ) { + + # get class if type is not defined + # e.g. for OPACHoldsIfAvailableAtPickupExceptions + my $type = $entry->{type} || $entry->{class}; + if ( exists $entry->{choices} ) { + $type = "select"; + } + $type ||= "input"; + if ( $pref->{name} ) { + push @{ $pref->{grouped_prefs} }, { + name => $entry->{pref}, + choices => $entry->{choices}, + default => $entry->{default}, + type => $type, + }; + push @{ $pref->{description} }, $entry->{pref}; + } else { + $pref->{name} = $entry->{pref}; + $pref->{choices} = $entry->{choices}; + $pref->{default} = $entry->{default}; + $pref->{type} = $type; + } + } else { + unless ( defined $entry ) { + die sprintf "Invalid description for pref %s", $pref->{name}; + } + push @{ $pref->{description} }, $entry; + } + } + unless ( $pref->{name} ) { + + # At least one "NOTE:" is expected here + next; + } + $all_prefs->{ $pref->{name} } = $pref; + if ( $pref->{grouped_prefs} ) { + for my $grouped_pref ( @{ $pref->{grouped_prefs} } ) { + $all_prefs->{ $grouped_pref->{name} } = { %$pref, %$grouped_pref }; + } + } + } + } + } + } + + $cache->set_in_cache( $cache_key, $all_prefs ); + } + return $all_prefs; +} + +=head2 Class methods =cut -=head3 type +=head3 _type =cut diff --git a/Koha/Devel/Sysprefs.pm b/Koha/Devel/Sysprefs.pm new file mode 100644 index 00000000000..056bfafa014 --- /dev/null +++ b/Koha/Devel/Sysprefs.pm @@ -0,0 +1,108 @@ +package Koha::Devel::Sysprefs; + +use Modern::Perl; +use File::Slurp qw(read_file write_file); + +use C4::Context; + +=head1 NAME + +Koha::Devel::Sysprefs + +=head1 DESCRIPTION + +Handle system preferences operations for developers. + +=cut + +=head1 API + +=cut + +=head2 new + +my $syspref_handler = Koha::Devel::Sysprefs->new(); + +Constructor + +=cut + +sub new { + my ( $class, $args ) = @_; + $args ||= {}; + + unless ( $args->{filepath} ) { + $args->{filepath} = sprintf "%s/installer/data/mysql/mandatory/sysprefs.sql", + C4::Context->config('intranetdir'); + } + my $self = bless $args, $class; + return $self; +} + +=head2 extract_syspref_from_line + +my $pref = $syspref_handler->extract_syspref_from_line($line); + +Parse a line from sysprefs.sql and return a hashref containing the different syspref's values + +=cut + +sub extract_syspref_from_line { + my ( $self, $line ) = @_; + + if ( + $line =~ /^INSERT INTO / # first line + || $line =~ /^;$/ # last line + || $line =~ /^--/ # Comment line + ) + { + return; + } + + if ( + $line =~ m/ + '(?[^'\\]*(?:\\.[^'\\]*)*)',\s* + '(?[^'\\]*(?:\\.[^'\\]*)*)' + /xms + ) + { + my $variable = $+{variable}; + my $value = $+{value}; + + return { + variable => $variable, + value => $value, + }; + } else { + warn "Invalid line: $line"; + } + return {}; +} + +=head2 get_sysprefs_from_file + +my @sysprefs = $syspref_handler->get_sysprefs_from_file(); + +Return an array of sysprefs from the SQL file used to populate the system preferences DB table. + +=cut + +sub get_sysprefs_from_file { + my ($self) = @_; + my @sysprefs; + my @lines = read_file( $self->{filepath} ) or die "Can't open $self->{filepath}: $!"; + for my $line (@lines) { + chomp $line; + + # FIXME Explode if already exists? + my $syspref = $self->extract_syspref_from_line($line); + if ( $syspref && exists $syspref->{variable} ) { + push @sysprefs, $syspref; + } elsif ( defined $syspref ) { + die "$line does not match"; + } + } + return @sysprefs; +} + +1; diff --git a/installer/data/mysql/atomicupdate/bug_41834.pl b/installer/data/mysql/atomicupdate/bug_41834.pl new file mode 100755 index 00000000000..7464b178186 --- /dev/null +++ b/installer/data/mysql/atomicupdate/bug_41834.pl @@ -0,0 +1,71 @@ +use Modern::Perl; +use Koha::Installer::Output qw(say_warning say_success say_info); +use File::Slurp qw(read_file); + +return { + bug_number => "41834", + description => "NULL systempreferences's options, explanation and type", + up => sub { + my ($args) = @_; + my ( $dbh, $out ) = @$args{qw(dbh out)}; + + # First fix some discrepancies + + # from updatedatabase.pl 20.12.00.009 + # UseICUStyleQUotes vs UseICUStyleQuotes + $dbh->do( + q{ + UPDATE systempreferences + SET variable="UseICUStyleQuotes" + WHERE BINARY variable="UseICUStyleQUotes" + } + ); + + # from db_revs/211200012.pl + # Syspref was not deleted if no value set + $dbh->do( + q{ + DELETE FROM systempreferences WHERE variable='OpacMoreSearches' + } + ); + + # from db_revs/211200020.pl + # Syspref was not deleted if no value set + $dbh->do( + q{ + DELETE FROM systempreferences WHERE variable='OPACMySummaryNote' + } + ); + + # Then remove NULL the 3 columns for sysprefs listed in sysprefs.sql + my $sysprefs_filepath = sprintf "%s/installer/data/mysql/mandatory/sysprefs.sql", + C4::Context->config('intranetdir'); + my @lines = read_file($sysprefs_filepath) or die "Can't open $sysprefs_filepath: $!"; + my @sysprefs; + for my $line (@lines) { + chomp $line; + next if $line =~ /^INSERT INTO /; # first line + next if $line =~ /^;$/; # last line + next if $line =~ /^--/; # Comment line + if ( + $line =~ m/ + '(?[^'\\]*(?:\\.[^'\\]*)*)',\s* + /xms + ) + { + push @sysprefs, $+{variable}; + } else { + die "$line does not match"; + } + } + + my $updated = $dbh->do( + q{ + UPDATE systempreferences + SET options=NULL, explanation=NULL, type=NULL + WHERE variable IN (} . join( q{,}, map { q{?} } @sysprefs ) . q{)}, undef, @sysprefs + ); + + say $out sprintf "Updated %s system preferences", $updated; + }, +}; diff --git a/installer/data/mysql/mandatory/sysprefs.sql b/installer/data/mysql/mandatory/sysprefs.sql index 585d7a5d8d8..376003d79d2 100644 --- a/installer/data/mysql/mandatory/sysprefs.sql +++ b/installer/data/mysql/mandatory/sysprefs.sql @@ -1,902 +1,902 @@ -INSERT INTO systempreferences ( `variable`, `value`, `options`, `explanation`, `type` ) VALUES -('1PageOrderPDFText', 'Order number must appear on all related correspondence, shipping papers and invoices. Notify us immediately if \n you are unable to supply item(s).', NULL, 'Text to be used above the order table in the 1-page order PDF file', 'textarea'), -('AccessControlAllowOrigin', '', NULL, 'Set the Access-Control-Allow-Origin header to the specified value', 'Free'), -('AccountAutoReconcile','0',NULL,'If enabled, patron balances will get reconciled automatically on each transaction.','YesNo'), -('AcqCreateItem','ordering','ordering|receiving|cataloguing','Define when the item is created : when ordering, when receiving, or in cataloguing module','Choice'), -('AcqEnableFiles','0',NULL,'If enabled, allows librarians to upload and attach arbitrary files to invoice records.','YesNo'), -('AcqItemSetSubfieldsWhenReceiptIsCancelled','', NULL,'Upon cancelling a receipt, update the items subfields if they were created when placing an order (e.g. o=5|a="bar foo")', 'Free'), -('AcqItemSetSubfieldsWhenReceived','',NULL,'Upon receiving items, update their subfields if they were created when placing an order (e.g. o=5|a="foo bar")','Free'), -('AcquisitionDetails', '1', NULL, 'Hide/Show acquisition details on the biblio detail page.', 'YesNo'), -('AcquisitionLog','0',NULL,'If ON, log acquisitions activity','YesNo'), -('AcquisitionsDefaultEmailAddress', '', NULL, 'Default email address that acquisition notices are sent from', 'Free'), -('AcquisitionsDefaultReplyTo', '', NULL, 'Default email address used as reply-to for notices sent by the acquisitions module.', 'Free'), -('AcqViewBaskets','user','user|branch|all','Define which baskets a user is allowed to view: their own only, any within their branch, or all','Choice'), -('AcqWarnOnDuplicateInvoice','0',NULL,'Warn librarians when they try to create a duplicate invoice','YesNo'), -('ActionLogsTraceDepth', '0', NULL, 'Sets the maximum depth of the action logs stack trace', 'Integer'), -('AdditionalContentLog','0',NULL,'If ON, log OPAC news changes','YesNo'), -('AdditionalContentsEditor','tinymce','tinymce|codemirror','Choose tool for editing News.', 'Choice'), -('AdditionalFieldsInZ3950ResultAuthSearch', '', NULL, 'Determines which MARC field/subfields are displayed in -Additional field- column in the result of an authority Z39.50 search', 'Free'), -('AdditionalFieldsInZ3950ResultSearch', '', NULL, 'Determines which MARC field/subfields are displayed in -Additional field- column in the result of a search Z3950', 'Free'), -('AddressForFailedOverdueNotices', '', NULL, 'Destination email for failed overdue notices. If left empty then it will fallback to the first defined address in the following list: Library ReplyTo, Library Email, ReplytoDefault and KohaAdminEmailAddress', 'Free'), -('AddressFormat','us','us|de|fr','Choose format to display postal addresses', 'Choice'), -('advancedMARCeditor','0',NULL,'If ON, the MARC editor won\'t display field/subfield descriptions','YesNo'), -('AdvancedSearchLanguages','',NULL,'ISO 639-2 codes of languages you wish to see appear as an Advanced search option. Example: eng|fre|ita','Textarea'), -('AdvancedSearchTypes','itemtypes','itemtypes|ccode','Select which set of fields comprise the Type limit in the advanced search','Choice'), -('AgeRestrictionMarker','',NULL,'Markers for age restriction indication, e.g. FSK|PEGI|Age|','Free'), -('AgeRestrictionOverride','0',NULL,'Allow staff to check out an item with age restriction.','YesNo'), -('AggressiveMatchOnISBN','0', NULL,'If enabled, attempt to match aggressively by trying all variations of the ISBNs in the imported record as a phrase in the ISBN fields of already cataloged records when matching on ISBN with the record import tool','YesNo'), -('AggressiveMatchOnISSN','0', NULL,'If enabled, attempt to match aggressively by trying all variations of the ISSNs in the imported record as a phrase in the ISSN fields of already cataloged records when matching on ISSN with the record import tool','YesNo'), -('AllFinesNeedOverride','1',NULL,'If on, staff will be asked to override every fine, even if it is below noissuescharge.','YesNo'), -('AllowAllMessageDeletion','0',NULL,'Allow any Library to delete any message','YesNo'), -('AllowCheckoutNotes', '0', NULL, 'Allow patrons to submit notes about checked out items.','YesNo'), -('AllowFineOverride','0',NULL,'If on, staff will be able to issue books to patrons with fines greater than noissuescharge.','YesNo'), -('AllowHoldDateInFuture','0',NULL,'If set a date field is displayed on the Hold screen of the Staff Interface, allowing the hold date to be set in the future.','YesNo'), -('AllowHoldItemTypeSelection','0',NULL,'If enabled, patrons and staff will be able to select the itemtype when placing a hold','YesNo'), -('AllowHoldPolicyOverride','0',NULL,'Allow staff to override hold policies when placing holds','YesNo'), -('AllowHoldsOnDamagedItems','1',NULL,'Allow hold requests to be placed on damaged items','YesNo'), -('AllowHoldsOnPatronsPossessions','1',NULL,'Allow holds on records that patron have items of it','YesNo'), -('AllowItemsOnHoldCheckoutSCO','0',NULL,'Do not generate RESERVE_WAITING and RESERVED warning in the SCO module when checking out items reserved to someone else. This allows self checkouts for those items.','YesNo'), -('AllowItemsOnHoldCheckoutSIP','0',NULL,'Do not generate RESERVED warning when checking out items reserved to someone else via SIP. This allows self checkouts for those items.','YesNo'), -('AllowItemsOnLoanCheckoutSIP','0',NULL,'Do not generate ISSUED_TO_ANOTHER warning when checking out items already checked out to someone else via SIP. This allows self checkouts for those items.','YesNo'), -('AllowMultipleCovers','0',NULL,'Allow multiple cover images to be attached to each bibliographic record.','YesNo'), -('AllowMultipleIssuesOnABiblio','1',NULL,'Allow/Don\'t allow patrons to check out multiple items from one biblio','YesNo'), -('AllowNotForLoanOverride','0',NULL,'If ON, Koha will allow the librarian to loan a not for loan item.','YesNo'), -('AllowPatronToControlAutorenewal','0',NULL,'If enabled, patrons will have a field in their account to choose whether their checkouts are auto renewed or not','YesNo'), -('AllowPatronToSetCheckoutsVisibilityForGuarantor', '0', NULL, 'If enabled, the patron can set checkouts to be visible to their guarantor', 'YesNo'), -('AllowPatronToSetFinesVisibilityForGuarantor', '0', NULL, 'If enabled, the patron can set fines to be visible to their guarantor', 'YesNo'), -('AllowPKIAuth','None','None|Common Name|emailAddress','Use the field from a client-side SSL certificate to look a user in the Koha database','Choice'), -('AllowRenewalIfOtherItemsAvailable','0',NULL,'If enabled, allow a patron to renew an item with unfilled holds if other available items can fill that hold.','YesNo'), -('AllowRenewalLimitOverride','0',NULL,'if ON, allows renewal limits to be overridden on the circulation screen','YesNo'), -('AllowRenewalOnHoldOverride','0',NULL,'If ON, allow items on hold to be renewed with a specified due date','YesNo'), -('AllowReturnToBranch','anywhere','anywhere|homebranch|holdingbranch|homeorholdingbranch','Where an item may be returned','Choice'), -('AllowSetAutomaticRenewal','1',NULL,'If ON, allows staff to flag items for automatic renewal on the check out page','YesNo'), -('AllowStaffToSetCheckoutsVisibilityForGuarantor','0',NULL,'If enabled, library staff can set a patron\'s checkouts to be visible to linked patrons from the opac.','YesNo'), -('AllowStaffToSetFinesVisibilityForGuarantor','0',NULL,'If enabled, library staff can set a patron\'s fines to be visible to linked patrons from the opac.', 'YesNo'), -('AllowTooManyOverride','1',NULL,'If on, allow staff to override and check out items when the patron has reached the maximum number of allowed checkouts','YesNo'), -('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',NULL,'Alphabet than can be expanded into browse links, e.g. on Home > Patrons','Free'), -('AlternateHoldingsField','',NULL,'The MARC field/subfield that contains alternate holdings information for bibs taht do not have items attached (e.g. 852abchi for libraries converting from MARC Magician).','Free'), -('AlternateHoldingsSeparator','',NULL,'The string to use to separate subfields in alternate holdings displays.','Free'), -('AlwaysLoadCheckoutsTable','0',NULL,'Option to always load the checkout table','YesNo'), -('AlwaysShowHoldingsTableFilters','0',NULL,'Option to always show filters when loading the holdings table','YesNo'), -('AmazonAssocTag','',NULL,'See: http://aws.amazon.com','Free'), -('AmazonCoverImages','0',NULL,'Display Cover Images in staff interface from Amazon Web Services','YesNo'), -('AmazonLocale','US','US|CA|DE|FR|IN|JP|UK','Use to set the Locale of your Amazon.com Web Services','Choice'), -('AnonSuggestions','0',NULL,'Set to enable Anonymous suggestions to AnonymousPatron borrowernumber','YesNo'), -('AnonymousPatron','0',NULL,'Set the identifier (borrowernumber) of the anonymous patron. Used for suggestion and checkout history privacy',''), -('ApiKeyLog', '0', NULL, 'If enabled, log API key actions (create, revoke, activate, delete)', 'YesNo'), -('ApplyFrameworkDefaults', 'new', 'new|duplicate|changed|imported', 'Configure when to apply framework default values - when cataloguing a new record, or when editing a record as new (duplicating), or when changing framework, or when importing a record', 'multiple'), -('ArticleRequests', '0', NULL, 'Enables the article request feature', 'YesNo'), -('ArticleRequestsLinkControl', 'calc', 'always|calc', 'Control display of article request link on search results', 'Choice'), -('ArticleRequestsMandatoryFields', '', NULL, 'Comma delimited list of required fields for bibs where article requests rule = \'yes\'', 'multiple'), -('ArticleRequestsMandatoryFieldsItemOnly', '', NULL, 'Comma delimited list of required fields for bibs where article requests rule = \'item_only\'', 'multiple'), -('ArticleRequestsMandatoryFieldsRecordOnly', '', NULL, 'Comma delimited list of required fields for bibs where article requests rule = \'bib_only\'', 'multiple'), -('ArticleRequestsOpacHostRedirection', '0', NULL, 'Enables redirection from child to host when requesting articles on the Opac', 'YesNo'), -('ArticleRequestsSupportedFormats', 'PHOTOCOPY', 'PHOTOCOPY|SCAN', 'List supported formats between vertical bars', 'Choice'), -('AudioAlerts','0',NULL,'Enable circulation sounds during checkin and checkout in the staff interface. Not supported by all web browsers yet.','YesNo'), -('AuthDisplayHierarchy','0',NULL,'Display authority hierarchies','YesNo'), -('AuthFailureLog','0',NULL,'If enabled, log authentication failures','YesNo'), -('AuthoritiesLog','1',NULL,'If ON, log edit/create/delete actions on authorities.','YesNo'), -('AuthorityControlledIndicators','# PERSO_NAME 100 600 696 700 796 800 896\nmarc21, 100, ind1:auth1\nmarc21, 600, ind1:auth1, ind2:thesaurus\nmarc21, 696, ind1:auth1\nmarc21, 700, ind1:auth1\nmarc21, 796, ind1:auth1\nmarc21, 800, ind1:auth1\nmarc21, 896, ind1:auth1\n# CORPO_NAME 110 610 697 710 797 810 897\nmarc21, 110, ind1:auth1\nmarc21, 610, ind1:auth1, ind2:thesaurus\nmarc21, 697, ind1:auth1\nmarc21, 710, ind1:auth1\nmarc21, 797, ind1:auth1\nmarc21, 810, ind1:auth1\nmarc21, 897, ind1:auth1\n# MEETI_NAME 111 611 698 711 798 811 898\nmarc21, 111, ind1:auth1\nmarc21, 611, ind1:auth1, ind2:thesaurus\nmarc21, 698, ind1:auth1\nmarc21, 711, ind1:auth1\nmarc21, 798, ind1:auth1\nmarc21, 811, ind1:auth1\nmarc21, 898, ind1:auth1\n# UNIF_TITLE 130 440 630 699 730 799 830 899\nmarc21, 130, ind1:auth2\nmarc21, 240, , ind2:auth2\nmarc21, 440, , ind2:auth2\nmarc21, 630, ind1:auth2, ind2:thesaurus\nmarc21, 699, ind1:auth2\nmarc21, 730, ind1:auth2\nmarc21, 799, ind1:auth2\nmarc21, 830, , ind2:auth2\nmarc21, 899, ind1:auth2\n# CHRON_TERM 648 \nmarc21, 648, , ind2:thesaurus\n# TOPIC_TERM 650 654 656 657 658 690\nmarc21, 650, , ind2:thesaurus\n# GEOGR_NAME 651 662 691\nmarc21, 651, , ind2:thesaurus\n# GENRE/FORM 655 \nmarc21, 655, , ind2:thesaurus\n\n# UNIMARC: Always copy the indicators from the authority\nunimarc, *, ind1:auth1, ind2:auth2',NULL,'Authority controlled indicators per biblio field','Free'), -('AuthorityMergeLimit','50',NULL,'Maximum number of biblio records updated immediately when an authority record has been modified.','Integer'), -('AuthorityMergeMode','loose','loose|strict','Authority merge mode','Choice'), -('AuthoritySeparator','--',NULL,'Used to separate a list of authorities in a display. Usually --','Free'), -('AuthorityXSLTDetailsDisplay','',NULL,'Enable XSL stylesheet control over authority details page display on intranet','Free'), -('AuthorityXSLTOpacDetailsDisplay','',NULL,'Enable XSL stylesheet control over authority details page in the OPAC','Free'), -('AuthorityXSLTOpacResultsDisplay','',NULL,'Enable XSL stylesheet control over authority results page in the OPAC','Free'), -('AuthorityXSLTResultsDisplay','',NULL,'Enable XSL stylesheet control over authority results page display on intranet','Free'), -('AuthorLinkSortBy','default','call_number|pubdate|acqdate|title','Specify the default field used for sorting when click author links','Choice'), -('AuthorLinkSortOrder','asc','asc|dsc|az|za','Specify the default sort order for author links','Choice'), -('AuthSuccessLog','0',NULL,'If enabled, log successful authentications','YesNo'), -('AutoApprovePatronProfileSettings', '0', NULL, 'Automatically approve patron profile changes from the OPAC.', 'YesNo'), -('autoBarcode','OFF','incremental|annual|hbyymmincr|EAN13|OFF','Used to autogenerate a barcode: incremental will be of the form 1, 2, 3; annual of the form 2007-0001, 2007-0002; hbyymmincr of the form HB08010001 where HB=Home Branch','Choice'), -('AutoClaimReturnStatusOnCheckin','',NULL,'When in use this system preference will automatically resolve the claim return and will update the lost authorized value upon check in.','Free'), -('AutoClaimReturnStatusOnCheckout','',NULL,'When in use this system preference will automatically resolve the claim return and will update the lost authorized value upon check out.','Free'), -('autoControlNumber','OFF','biblionumber|OFF','Used to autogenerate a Control Number: biblionumber will be as biblionumber, OFF will leave the field as it is;','Choice'), -('AutoCreateAuthorities','0',NULL,'Automatically create authorities that do not exist when cataloging records.','YesNo'), -('AutoCreditNumber', '', NULL, 'Automatically generate a number for account credits', 'Choice'), -('AutoEmailNewUser','0',NULL,'Send an email to newly created patrons.','YesNo'), -('AutoILLBackendPriority','',NULL,'Set the automatic backend selection priority','ill-backends'), -('AutoLinkBiblios','0',NULL,'If enabled, link biblio to authorities on creation and edit','YesNo'), -('AutomaticCheckinAutoFill','0',NULL,'Automatically fill the next hold with an automatic check in.','YesNo'), -('AutomaticConfirmTransfer','0',NULL,'Defines whether transfers should be automatically confirmed at checkin if modal dismissed','YesNo'), -('AutomaticEmailReceipts','0',NULL,'Send email receipts for payments and write-offs','YesNo'), -('AutomaticItemReturn','1',NULL,'If ON, Koha will automatically set up a transfer of this item to its homebranch','YesNo'), -('AutomaticRenewalPeriodBase','date_due','date_due|now','Set whether the renewal date should be counted from the date_due or from the moment the Patron asks for renewal, for automatic renewals ','Choice'), -('autoMemberNum','0',NULL,'If ON, patron number is auto-calculated','YesNo'), -('AutoRemoveOverduesRestrictions','no','no|when_no_overdue|when_no_overdue_causing_debarment', 'Defines if and on what conditions OVERDUES debarments should automatically be lifted when overdue items are returned by the patron.','Choice'), -('AutoRenewalNotices','preferences','cron|preferences|never','How should Koha determine whether to end autorenewal notices','Choice'), -('AutoResumeSuspendedHolds','1',NULL,'Allow suspended holds to be automatically resumed by a set date.','YesNo'), -('AutoReturnCheckedOutItems', '0', NULL, 'If disabled, librarian must confirm return of checked out item when checking out to another.', 'YesNo'), -('AutoSelfCheckAllowed','0',NULL,'For corporate and special libraries which want web-based self-check available from any PC without the need for a manual staff login. Most libraries will want to leave this turned off. If on, requires self-check ID and password to be entered in AutoSelfCheckID and AutoSelfCheckPass sysprefs.','YesNo'), -('AutoSelfCheckID','',NULL,'Staff ID with circulation rights to be used for automatic web-based self-check. Only applies if AutoSelfCheckAllowed syspref is turned on.','Free'), -('AutoSelfCheckPass','',NULL,'Password to be used for automatic web-based self-check. Only applies if AutoSelfCheckAllowed syspref is turned on.','Free'), -('AutoShareWithMana','subscription',NULL,'defines datas automatically shared with mana','multiple'), -('AutoSwitchPatron', '0', NULL, 'Auto switch to patron', 'YesNo'), -('Babeltheque','0',NULL,'Turn ON Babeltheque content - See babeltheque.com to subscribe to this service','YesNo'), -('Babeltheque_url_js','',NULL,'Url for Babeltheque javascript (e.g. http://www.babeltheque.com/bw_XX.js)','Free'), -('Babeltheque_url_update','',NULL,'Url for Babeltheque update (E.G. http://www.babeltheque.com/.../file.csv.bz2)','Free'), -('BakerTaylorBookstoreURL','',NULL,'URL template for "My Libary Bookstore" links, to which the "key" value is appended, and "https://" is prepended. It should include your hostname and "Parent Number". Make this variable empty to turn MLB links off. Example: ocls.mylibrarybookstore.com/MLB/actions/searchHandler.do?nextPage=bookDetails&parentNum=10923&key=',''), -('BakerTaylorEnabled','0',NULL,'Enable or disable all Baker & Taylor features.','YesNo'), -('BakerTaylorPassword','',NULL,'Baker & Taylor Password for Content Cafe (external content)','Free'), -('BakerTaylorUsername','',NULL,'Baker & Taylor Username for Content Cafe (external content)','Free'), -('BarcodeSeparators','\\s\\r\\n',NULL,'Splitting characters for barcodes','Free'), -('BasketConfirmations','1','always ask for confirmation.|do not ask for confirmation.','When closing or reopening a basket,','Choice'), -('BatchCheckouts','0',NULL,'Enable or disable batch checkouts','YesNo'), -('BatchCheckoutsValidCategories','',NULL,'Patron categories allowed to checkout in a batch','Free'), -('BiblioDefaultView','normal','normal|marc|isbd','Choose the default detail view in the catalog; choose between normal, marc or isbd','Choice'), -('BiblioItemtypeInfo','0',NULL,'Control which itemtype info displays for biblio level itemtypes','YesNo'), -('BibtexExportAdditionalFields','',NULL,'Define additional BibTex tags to export from MARC records in YAML format as an associative array with either a marc tag/subfield combination as the value, or a list of tag/subfield combinations.','textarea'), -('BlockExpiredPatronOpacActions','','hold,renew,ill_request','Specific actions expired patrons of this category are blocked from performing. OPAC actions blocked based on the patron category take priority over this preference.','multiple'), -('BlockReturnOfLostItems','0',NULL,'If enabled, items that are marked as lost cannot be returned.','YesNo'), -('BlockReturnOfWithdrawnItems','1',NULL,'If enabled, items that are marked as withdrawn cannot be returned.','YesNo'), -('BorrowerMandatoryField','surname|cardnumber',NULL,'Choose the mandatory fields for a patron\'s account','Free'), -('borrowerRelationship','father|mother',NULL,'Define valid relationships between a guarantor & a guarantee (separated by | or ,)','Free'), -('BorrowerRenewalPeriodBase','now','dateexpiry|now|combination','Set whether the borrower renewal date should be counted from the dateexpiry, from the current date or by combination: if the dateexpiry is in future use dateexpiry, else use current date ','Choice'), -('BorrowersLog','1',NULL,'If ON, log edit/create/delete actions on patron data','YesNo'), -('BorrowersTitles','Mr|Mrs|Miss|Ms',NULL,'Define appropriate Titles for patrons','Free'), -('BorrowerUnwantedField','',NULL,'Name the fields you don\'t need to store for a patron\'s account','Free'), -('BranchTransferLimitsType','ccode','itemtype|ccode','When using branch transfer limits, choose whether to limit by itemtype or collection code.','Choice'), -('BrowseResultSelection','0',NULL,'Enable/Disable browsing search results fromt the bibliographic record detail page in staff interface','YesNo'), -('BundleLostValue','5',NULL,'Sets the LOST AV value that represents "Missing from bundle" as a lost value','Free'), -('BundleNotLoanValue','3',NULL,'Sets the NOT_LOAN AV value that represents "Added to bundle" as a not for loan value','Free'), -('CalculateFinesOnBackdate','1',NULL,'Switch to control if overdue fines are calculated on return when backdating','YesNo'), -('CalculateFinesOnReturn','1',NULL,'Switch to control if overdue fines are calculated on return or not','YesNo'), -('CalculateFundValuesIncludingTax', '1', NULL, 'Include tax in the calculated fund values (spent, ordered) for all supplier configurations', 'YesNo'), -('CalendarFirstDayOfWeek','0','0|1|2|3|4|5|6','Select the first day of week to use in the calendar.','Choice'), -('CancelOrdersInClosedBaskets', '0', NULL, 'Allow/Do not allow cancelling order lines in closed baskets.', 'YesNo'), -('CanMarkHoldsToPullAsLost','do_not_allow','do_not_allow|allow|allow_and_notify','Add a button to the "Holds to pull" screen to mark an item as lost and notify the patron.','Choice'), -('canreservefromotherbranches','1',NULL,'With Independent branches on, can a user from one library place a hold on an item from another library','YesNo'), -('CardnumberLength', '', NULL, 'Set a length for card numbers with a maximum of 32 characters.', 'Free'), -('CardnumberLog','1',NULL,'If ON, log edit actions on patron cardnumbers','YesNo'), -('casAuthentication','0',NULL,'Enable or disable CAS authentication','YesNo'), -('casLogout','0',NULL,'Does a logout from Koha should also log the user out of CAS?','YesNo'), -('casServerUrl','https://localhost:8443/cas',NULL,'URL of the cas server','Free'), -('casServerVersion','2', '2|3','Version of the CAS server Koha will connect to.','Choice'), -('CatalogConcerns', '0', NULL, 'Allow users to report catalog concerns', 'YesNo'), -('CatalogerEmails', '', NULL, 'Notify these catalogers by email when a catalog concern is submitted', 'Free'), -('CatalogModuleRelink','0',NULL,'If OFF the linker will never replace the authids that are set in the cataloging module.','YesNo'), -('CataloguingLog','1',NULL,'If ON, log edit/create/delete actions on bibliographic data. WARNING: this feature is very resource consuming.','YesNo'), -('ChargeFinesOnClosedDays','0',NULL,'Charge fines on days the library is closed.','YesNo'), -('CheckPrevCheckout','hardno','hardyes|softyes|softno|hardno','By default, for every item checked out, should we warn if the patron has borrowed that item in the past?','Choice'), -('CheckPrevCheckoutDelay','0', NULL,'Maximum number of days that will trigger a warning if the patron has borrowed that item in the past when CheckPrevCheckout is enabled.','Free'), -('ChildNeedsGuarantor','0',NULL,'If ON, a child patron must have a guarantor when adding the patron.','YesNo'), -('CircAutoPrintQuickSlip','qslip',NULL,'Choose what should happen when an empty barcode field is submitted in circulation: Display a print quick slip window, Display a print slip window, Do nothing, or Clear the screen.','Choice'), -('CircConfirmItemParts', '0', NULL, 'Require staff to confirm that all parts of an item are present at checkin/checkout.', 'YesNo'), -('CircControl','ItemHomeLibrary','PickupLibrary|PatronLibrary|ItemHomeLibrary','Specify the agency that controls the circulation and fines policy','Choice'), -('CircControlReturnsBranch','ItemHomeLibrary','ItemHomeLibrary|ItemHoldingLibrary|CheckInLibrary','Specify the agency that controls the return policy','Choice'), -('CircSidebar','1',NULL,'Activate or deactivate the navigation sidebar on all Circulation pages','YesNo'), -('CirculateILL','0',NULL,'If enabled, it is possible to circulate ILL items from within ILL','YesNo'), -('ClaimReturnedChargeFee', 'ask', 'ask|charge|no_charge', 'Controls whether or not a lost item fee is charged for return claims', 'Choice'), -('ClaimReturnedLostValue', '', NULL, 'Sets the LOST AV value that represents "Claims returned" as a lost value', 'Free'), -('ClaimReturnedWarningThreshold', '', NULL, 'Sets the number of return claims past which the librarian will be warned the patron has many return claims', 'Integer'), -('ClaimsBccCopy','0',NULL,'Bcc the ClaimAcquisition and ClaimIssues alerts','YesNo'), -('ClaimsLog','1',NULL,'If ON, log all notices sent','YesNo'), -('CleanUpDatabaseReturnClaims', '', NULL, 'Sets the age of resolved return claims to delete from the database for cleanup_database.pl', 'Integer'), -('CoceHost', '', NULL, 'Coce server URL', 'Free'), -('CoceProviders', '', 'aws,gb,ol', 'Coce providers', 'multiple'), -('COinSinOPACResults','1',NULL,'If ON, use COinS in OPAC search results page. NOTE: this can slow down search response time significantly','YesNo'), -('CollapseFieldsPatronAddForm','',NULL,'Collapse these fields by default when adding a new patron. These fields can still be expanded.','Multiple'), -('ComponentSortField','title','call_number|pubdate|acqdate|title|author','Specify the default field used for sorting','Choice'), -('ComponentSortOrder','asc','asc|dsc|az|za','Specify the default sort order','Choice'), -('ConfirmFutureHolds','0',NULL,'Number of days for confirming future holds','Integer'), -('ConsiderHeadingUse', '0', NULL, 'Consider MARC21 authority heading use (main/added entry, or subject, or series title) in cataloging and linking', 'YesNo'), -('ConsiderLibraryHoursInCirculation', 'close', 'close|open|ignore', 'Take library opening hours into consideration to calculate due date when circulating.', 'Choice'), -('ConsiderOnSiteCheckoutsAsNormalCheckouts','1',NULL,'Consider on-site checkouts as normal checkouts','YesNo'), -('ContentWarningField', '', NULL, 'MARC field to use for content warnings', 'Free'), -('CookieConsent', '0', NULL, 'Require cookie consent to be displayed', 'YesNo'), -('CookieConsentedJS', '', NULL, 'Add Javascript code that will run if cookie consent is provided (e.g. tracking code).', 'Free'), -('CreateAVFromCataloguing', '1', NULL, 'Ability to create authorized values from the cataloguing module', 'YesNo'), -('CronjobLog','0',NULL,'If ON, log information from cron jobs.','YesNo'), -('CSVDelimiter',',',';|tabulation|,|/|\\|#||','Define the default separator character for exporting reports','Choice'), -('CumulativeRestrictionPeriods','0',NULL,'Cumulate the restriction periods instead of keeping the highest','YesNo'), -('CurbsidePickup', '0', NULL, 'Enable curbside pickup', 'YesNo'), -('CurrencyFormat','US','US|FR|CH','Determines the display format of currencies. eg: \'36000\' is displayed as \'360 000,00\' in \'FR\' or \'360,000.00\' in \'US\'.','Choice'), -('CustomCoverImages','0',NULL,'If enabled, the custom cover images will be displayed in the staff interface. CustomCoverImagesURL must be defined.','YesNo'), -('CustomCoverImagesURL','',NULL,'Define an URL serving book cover images, using the following patterns: %issn%, %isbn%, FIXME ADD MORE (use it with CustomCoverImages and/or OPACCustomCoverImages)','Free'), -('dateformat','us','metric|us|iso|dmydot','Define global date format (us mm/dd/yyyy, metric dd/mm/yyy, ISO yyyy-mm-dd, dmydot dd.mm.yyyy)','Choice'), -('DebugLevel','2','0|1|2','Define the level of debugging information sent to the browser when errors are encountered (set to 0 in production). 0=none, 1=some, 2=most','Choice'), -('decreaseLoanHighHolds','0',NULL,'Decreases the loan period for items with number of holds above the threshold specified in decreaseLoanHighHoldsValue','YesNo'), -('decreaseLoanHighHoldsControl', 'static', 'static|dynamic', 'Chooses between static and dynamic high holds checking', 'Choice'), -('decreaseLoanHighHoldsDuration','',NULL,'Specifies a number of days that a loan is reduced to when used in conjunction with decreaseLoanHighHolds','Integer'), -('decreaseLoanHighHoldsIgnoreStatuses', '', 'damaged|itemlost|notforloan|withdrawn', 'Ignore items with these statuses for dynamic high holds checking', 'Choice'), -('decreaseLoanHighHoldsValue','',NULL,'Specifies a threshold for the minimum number of holds needed to trigger a reduction in loan duration (used with decreaseLoanHighHolds)','Integer'), -('DefaultAuthorityTab','0','0|1|2|3|4|5|6|7|8|9','Default tab to shwo when displaying authorities','Choice'), -('DefaultClassificationSource','ddc',NULL,'Default classification scheme used by the collection. E.g., Dewey, LCC, etc.','ClassSources'), -('DefaultCountryField008','',NULL,'Fill in the default country code for field 008 Range 15-17 of MARC21 - Place of publication, production, or execution. See MARC Code List for Countries','Free'), -('DefaultHoldExpirationdate','0',NULL,'Automatically set expiration date for holds','YesNo'), -('DefaultHoldExpirationdatePeriod','0',NULL,'How long into the future default expiration date is set to be.','Integer'), -('DefaultHoldExpirationdateUnitOfTime','days','days|months|years','Which unit of time is used when setting the default expiration date. ','choice'), -('DefaultHoldPickupLocation','loggedinlibrary','loggedinlibrary|homebranch|holdingbranch','Which branch should a hold pickup location default to. ','choice'), -('DefaultLanguageField008','',NULL,'Fill in the default language for field 008 Range 35-37 of MARC21 records (e.g. eng, nor, ger, see MARC Code List for Languages)','Free'), -('DefaultLongOverdueChargeValue', '', NULL, 'Charge a lost item to the borrower\'s account when the LOST value of the item changes to n.', 'Integer'), -('DefaultLongOverdueDays', '', NULL, 'Set the LOST value of an item when the item has been overdue for more than n days.', 'Integer'), -('DefaultLongOverdueLostValue', '', NULL, 'Set the LOST value of an item to n when the item has been overdue for more than defaultlongoverduedays days.', 'Integer'), -('DefaultLongOverduePatronCategories', '', NULL, 'Set the patron categories that will be listed when longoverdue cronjob is executed', 'choice'), -('DefaultLongOverdueSkipLostStatuses', '', NULL, 'Skip these lost statuses by default in longoverdue.pl', 'Free'), -('DefaultLongOverdueSkipPatronCategories', '', NULL, 'Set the patron categories that will not be listed when longoverdue cronjob is executed', 'choice'), -('DefaultPatronSearchFields','firstname|preferred_name|middle_name|surname|othernames|cardnumber|userid',NULL,'Pipe separated list defining the default fields to be used during a patron search using the "standard" option. If empty Koha will default to "firstname|surname|othernames|cardnumber|userid". Additional fields added to this preference will be added as search options in the dropdown menu on the patron search page.','Free'), -('DefaultPatronSearchMethod','starts_with','starts_with|contains','Choose which search method to use by default when searching with PatronAutoComplete','Choice'), -('DefaultSaveRecordFileID','biblionumber','biblionumber|controlnumber','Defines whether the advanced cataloging editor will use the bibliographic record number or control number field to populate the name of the save file','Choice'), -('defaultSortField','relevance','relevance|popularity|call_number|pubdate|acqdate|title|author','Specify the default field used for sorting','Choice'), -('defaultSortOrder','dsc','asc|dsc|az|za','Specify the default sort order','Choice'), -('DefaultToLoggedInLibraryCircRules', '0', NULL, 'If enabled, circ rules editor will default to the logged in library\'s rules, rather than the \'all libraries\' rules.', 'YesNo'), -('DefaultToLoggedInLibraryNoticesSlips','0', NULL, 'If enabled,slips and notices editor will default to the logged in library\'s rules, rather than the \'all libraries\' rules.', 'YesNo'), -('DefaultToLoggedInLibraryOverdueTriggers', '0', NULL, 'If enabled, overdue status triggers editor will default to the logged in library\'s rules, rather than the \'default\' rules.', 'YesNo'), -('Display856uAsImage','OFF','OFF|Details|Results|Both','Display the URI in the 856u field as an image, the corresponding staff interface XSLT option must be on','Choice'), -('DisplayAddHoldGroups','0',NULL,'Display the ability to create hold groups which are fulfilled by one item','YesNo'), -('DisplayClearScreenButton','no','no|issueslip|issueqslip','If set to ON, a clear screen button will appear on the circulation page.','Choice'), -('displayFacetCount','0',NULL,'If enabled, display the number of facet counts','YesNo'), -('DisplayIconsXSLT','1',NULL,'If ON, displays the format, audience, and material type icons in XSLT MARC21 results and detail pages.','YesNo'), -('DisplayLibraryFacets', 'holding', 'home|holding|both', 'Defines which library facets to display.', 'Choice'), -('DisplayMultiItemHolds','0',NULL,'Display the ability to place holds on different items at the same time in staff interface and OPAC','YesNo'), -('DisplayMultiPlaceHold','1',NULL,'Display the ability to place multiple holds or not','YesNo'), -('DisplayOPACiconsXSLT','1',NULL,'If ON, displays the format, audience, and material type icons in XSLT MARC21 results and detail pages in the OPAC.','YesNo'), -('DisplayPublishedDate', '1', NULL, 'Display serial publisheddate on detail pages', 'YesNo'), -('DumpSearchQueryTemplate','0',NULL,'Add the search query being passed to the search engine into the template for debugging','YesNo'), -('DumpTemplateVarsIntranet', '0', NULL, 'If enabled, dump all Template Toolkit variable to a comment in the html source for the staff intranet.', 'YesNo'), -('DumpTemplateVarsOpac', '0', NULL, 'If enabled, dump all Template Toolkit variable to a comment in the html source for the opac.', 'YesNo'), -('EasyAnalyticalRecords','0',NULL,'If on, display in the catalogue screens tools to easily setup analytical record relationships','YesNo'), -('EDIFACT','0',NULL,'Enables EDIFACT acquisitions functions','YesNo'), -('EdifactInvoiceImport', 'automatic', 'automatic|manual', 'If on, don\'t auto-import EDI invoices, just keep them in the database with the status \'new\'', 'Choice'), -('EdifactLSL', 'ccode', 'location|ccode|', 'Map EDI sub-location code (GIR+LSL) to Koha Item field, empty to ignore', 'Choice'), -('EdifactLSQ', 'location', 'location|ccode|', 'Map EDI sequence code (GIR+LSQ) to Koha Item field, empty to ignore', 'Choice'), -('ElasticsearchBoostFieldMatch', '0', NULL, 'Add a "match" query to es when searching, will follow indexes chosen in advanced search, or use title-cover for generic keyword or title index search', 'YesNo'), -('ElasticsearchCrossFields', '1', NULL, 'Enable "cross_fields" option for searches using Elastic search.', 'YesNo'), -('ElasticsearchIndexStatus_authorities', '0', 'Authorities index status', NULL, NULL), -('ElasticsearchIndexStatus_biblios', '0', 'Biblios index status', NULL, NULL), -('ElasticsearchMARCFormat', 'base64ISO2709', 'base64ISO2709|ARRAY', 'Elasticsearch MARC format. ISO2709 format is recommended as it is faster and takes less space, whereas array is searchable.', 'Choice'), -('ElasticsearchPreventAutoTruncate', 'barcode|control-number|control-number-identifier|date-of-acquisition|date-of-publication|date-time-last-modified|identifier-standard|isbn|issn|itype|lc-card-number|number-local-acquisition|other-control-number|record-control-number', NULL, 'List of searchfields (separated by | or ,) that should not be autotruncated by Elasticsearch even if QueryAutoTruncate is set to Yes', 'Free'), -('EmailAddressForPatronRegistrations', '', NULL, ' If you choose EmailAddressForPatronRegistrations you have to enter a valid email address: ', 'Free'), -('EmailAddressForSuggestions','',NULL,' If you choose EmailAddressForSuggestions you have to enter a valid email address: ','Free'), -('EmailFieldPrecedence','email|emailpro|B_email',NULL,'Ordered list of patron email fields to use when AutoEmailPrimaryAddress is set to first valid','multiple'), -('EmailFieldPrimary','','|email|emailpro|B_email|cardnumber|MULTI','Defines the default email address field where patron email notices are sent.','Choice'), -('EmailFieldSelection','','email|emailpro|B_email','Selection list of patron email fields to use whern AutoEmailPrimaryAddress is set to selected addresses','multiple'), -('emailLibrarianWhenHoldIsPlaced','0',NULL,'If ON, emails the librarian whenever a hold is placed','YesNo'), -('EmailOverduesNoEmail','1',NULL,'Send send overdues of patrons without email address to staff','YesNo'), -('EmailPatronRegistrations', '0', '0|EmailAddressForPatronRegistrations|BranchEmailAddress|KohaAdminEmailAddress', 'Choose email address that new patron registrations will be sent to: ', 'Choice'), -('EmailPatronWhenHoldIsPlaced', '0', NULL, 'Email patron when a hold has been placed for them', 'YesNo'), -('EmailPurchaseSuggestions','0','0|EmailAddressForSuggestions|BranchEmailAddress|KohaAdminEmailAddress','Choose email address that new purchase suggestions will be sent to: ','Choice'), -('EmailSMSSendDriverFromAddress', '', NULL, 'Email SMS send driver from address override', 'Free'), -('EnableAdvancedCatalogingEditor','0',NULL,'Enable the Rancor advanced cataloging editor','YesNo'), -('EnableBooking','1',NULL,'If enabled, activate every functionalities related with Bookings module','YesNo'), -('EnableBorrowerFiles','0',NULL,'If enabled, allows librarians to upload and attach arbitrary files to a borrower record.','YesNo'), -('EnableExpiredPasswordReset', '0', NULL, 'Enable ability for patrons with expired password to reset their password directly', 'YesNo'), -('EnableItemGroupHolds','0',NULL,'Enable item groups holds feature','YesNo'), -('EnableItemGroups','0',NULL,'Enable the item groups feature','YesNo'), -('EnableOpacSearchHistory','1','YesNo','Enable or disable opac search history',''), -('EnablePointOfSale','0',NULL,'Enable the point of sale feature to allow anonymous transactions with the accounting system. (Requires UseCashRegisters)','YesNo'), -('EnableSearchHistory','0',NULL,'Enable or disable search history','YesNo'), -('EnhancedMessagingPreferences','1',NULL,'If ON, allows patrons to select to receive additional messages about items due or nearly due.','YesNo'), -('EnhancedMessagingPreferencesOPAC', '1', NULL, 'If ON, show patrons messaging setting on the OPAC.', 'YesNo'), -('ERMModule', '0', NULL, 'Enable the e-resource management module', 'YesNo'), -('ERMProviderEbscoApiKey', '', NULL, 'API key for EBSCO', 'Free'), -('ERMProviderEbscoCustomerID', '', NULL, 'Customer ID for EBSCO', 'Free'), -('ERMProviders', 'local', 'local|ebsco', 'Set the providers for the ERM module', 'Choice'), -('ExcludeHolidaysFromMaxPickUpDelay', '0', NULL, 'If ON, reserves max pickup delay takes into accountthe closed days.', 'YesNo'), -('expandedSearchOption','0',NULL,'If ON, set advanced search to be expanded by default','YesNo'), -('ExpireReservesAutoFill','0',NULL,'Automatically fill the next hold with a automatically canceled expired waiting hold.','YesNo'), -('ExpireReservesAutoFillEmail','', NULL,'Send email notification of hold filled from automatically expired/cancelled hold to this address. If not defined, Koha will fallback to the library reply-to address','Free'), -('ExpireReservesMaxPickUpDelay','0',NULL,'Enabling this allows holds to expire automatically if they have not been picked by within the time period specified in ReservesMaxPickUpDelay','YesNo'), -('ExpireReservesMaxPickUpDelayCharge','0',NULL,'If ExpireReservesMaxPickUpDelay is enabled, and this field has a non-zero value, than a borrower whose waiting hold has expired will be charged this amount.','Free'), -('ExpireReservesOnHolidays', '1', NULL, 'If false, reserves at a library will not be canceled on days the library is not open.', 'YesNo'), -('ExportCircHistory', '0', NULL, 'Display the export circulation options', 'YesNo'), -('ExportRemoveFields','',NULL,'List of fields for non export in circulation.pl (separated by a space)','Free'), -('ExtendedPatronAttributes','1',NULL,'Use extended patron IDs and attributes','YesNo'), -('FacetLabelTruncationLength','20',NULL,'Specify the facet max length in OPAC','Integer'), -('FacetMaxCount','20',NULL,'Specify the max facet count for each category','Integer'), -('FacetOrder','Alphabetical','Alphabetical|Usage|Stringwise','Specify the order of facets within each category','Choice'), -('FacetSortingLocale','default',NULL,'Choose the locale for sorting facet names when FacetOrder is set to Alphabetical. This enables proper Unicode-aware sorting of accented characters and locale-specific alphabetical ordering.','Choice'), -('FailedLoginAttempts','',NULL,'Number of login attempts before lockout the patron account','Integer'), -('FallbackToSMSIfNoEmail', '0', NULL, 'Send messages by SMS if no patron email is defined', 'YesNo'), -('FeeOnChangePatronCategory','1',NULL,'If set, when a patron changes to a category with enrolment fee, a fee is charged','YesNo'), -('FilterBeforeOverdueReport','0',NULL,'Do not run overdue report until filter selected','YesNo'), -('FilterSearchResultsByLoggedInBranch','0',NULL,'Option to filter location column on staff search results by logged in branch','YesNo'), -('FineNotifyAtCheckin','0',NULL,'If ON notify librarians of overdue fines on the items they are checking in.','YesNo'), -('FinePaymentAutoPopup','0',NULL,'If enabled, automatically display a print dialog for a payment receipt when making a payment.','YesNo'), -('finesCalendar','noFinesWhenClosed','ignoreCalendar|noFinesWhenClosed','Specify whether to use the Calendar in calculating duedates and fines','Choice'), -('FinesIncludeGracePeriod','1',NULL,'If enabled, fines calculations will include the grace period.','YesNo'), -('FinesLog','1',NULL,'If ON, log fines','YesNo'), -('finesMode','off','off|production','Choose the fines mode, \'off\' (no charges), \'production\' (accrue overdue fines). Requires accruefines cronjob.','Choice'), -('ForceLibrarySelection','0',NULL,'Force staff to select a library when logging into the staff interface.','YesNo'), -('ForcePasswordResetWhenSetByStaff','0',NULL,'Force a staff created patron account to reset its password after its first OPAC login.','YesNo'), -('FRBRizeEditions','0',NULL,'If ON, Koha will query one or more ISBN web services for associated ISBNs and display an Editions tab on the details pages','YesNo'), -('FutureHoldsBlockRenewals', '0', NULL, 'Allow future holds to block renewals', 'YesNo' ), -('GenerateAuthorityField667', 'Machine generated authority record', NULL, 'When BiblioAddsAuthorities and AutoCreateAuthorities are enabled, use this as a default value for the 667$a field of MARC21 records', 'Free'), -('GenerateAuthorityField670', 'Work cat.', NULL, 'When BiblioAddsAuthorities and AutoCreateAuthorities are enabled, use this as a default value for the 670$a field of MARC21 records', 'Free'), -('GoogleJackets','0',NULL,'if ON, displays jacket covers from Google Books API','YesNo'), -('GoogleOAuth2ClientID', '', NULL, 'Client ID for the web app registered with Google', 'Free'), -('GoogleOAuth2ClientSecret', '', NULL, 'Client Secret for the web app registered with Google', 'Free'), -('GoogleOpenIDConnect', '0', NULL, 'if ON, allows the use of Google OpenID Connect for login', 'YesNo'), -('GoogleOpenIDConnectAutoRegister', '0',NULL,' Google OpenID Connect logins to auto-register patrons.','YesNo'), -('GoogleOpenIDConnectDefaultBranch', '',NULL,'This branch code will be used to create Google OpenID Connect patrons.','Textarea'), -('GoogleOpenIDConnectDefaultCategory','',NULL,'This category code will be used to create Google OpenID Connect patrons.','Textarea'), -('GoogleOpenIDConnectDomain', '', NULL, 'Restrict Google OpenID Connect to this domain (or subdomains of this domain). Leave blank for all Google domains', 'Free'), -('hidelostitems','0',NULL,'If ON, disables display of"lost" items in OPAC.','YesNo'), -('HidePatronName','0',NULL,'If this is switched on, patron\'s cardnumber will be shown instead of their name on the holds and catalog screens','YesNo'), -('HidePersonalPatronDetailOnCirculation', '0', NULL, 'Hide patrons phone number, email address, street address and city in the circulation page','YesNo'), -('hide_marc','0',NULL,'If ON, disables display of MARC fields, subfield codes & indicators (still shows data)','YesNo'), -('HoldCancellationRequestSIP','0',NULL,'Option to set holds cancelled via SIP as cancellation requests','YesNo'), -('HoldFeeMode','not_always','any_time_is_placed|not_always|any_time_is_collected','Set the hold fee mode','Choice'), -('HoldRatioDefault','3',NULL,'Default value for the hold ratio report','Integer'), -('HoldsAutoFill','0',NULL,'If on, librarian will not be asked if hold should be filled, it will be filled automatically','YesNo'), -('HoldsAutoFillPrintSlip','0',NULL,'If on, hold slip print dialog will be displayed automatically','YesNo'), -('HoldsLog','0',NULL,'If ON, log create/cancel/suspend/resume actions on holds.','YesNo'), -('HoldsNeedProcessingSIP', '0', NULL, 'Require staff to check-in before hold is set to waiting state', 'YesNo'), -('HoldsQueueParallelLoopsCount', '1', NULL, 'Number of parallel loops to use when running the holds queue builder', 'Integer'), -('HoldsQueuePrioritizeBranch','homebranch','holdingbranch|homebranch','Decides if holds queue builder patron home library match to home or holding branch','Choice'), -('HoldsQueueSkipClosed', '0', NULL, 'If enabled, any libraries that are closed when the holds queue is built will be ignored for the purpose of filling holds.', 'YesNo'), -('HoldsSplitQueue','nothing','nothing|branch|itemtype|branch_itemtype','In the staff interface, split the holds view by the given criteria','Choice'), -('HoldsSplitQueueNumbering', 'actual', 'actual|virtual', 'If the holds queue is split, decide if the actual priorities should be displayed', 'Choice'), -('HoldsToPullStartDate','2',NULL,'Set the default start date for the Holds to pull list to this many days ago','Integer'), -('HomeOrHoldingBranch','holdingbranch','holdingbranch|homebranch','Used by Circulation to determine which branch of an item to check with independent branches on, and by search to determine which branch to choose for availability ','Choice'), -('HouseboundModule','0',NULL,'If ON, enable housebound module functionality.','YesNo'), -('HTML5MediaEnabled','not','not|opac|staff|both','Show a tab with a HTML5 media player for files catalogued in field 856','Choice'), -('HTML5MediaExtensions','webm|ogg|ogv|oga|vtt',NULL,'Media file extensions','Free'), -('HTML5MediaYouTube','0',NULL,'YouTube links as videos','YesNo'), -('IdRef','0',NULL,'Disable/enable the IdRef webservice from the OPAC detail page.','YesNo'), -('ILLCheckAvailability', '0', NULL, 'If ON, during the ILL request process third party sources will be checked for current availability', 'YesNo'), -('ILLDefaultStaffEmail', '', NULL, 'Fallback email address for staff ILL notices to be sent to in the absence of a branch address', 'Free'), -('ILLHiddenRequestStatuses', '', NULL, 'ILL statuses that are considered finished and should not be displayed in the ILL module', 'multiple'), -('ILLHistoryCheck', '0', NULL, 'If ON, a verification is performed to check if the ILL request has previously been placed by the same patron. Verification is done using one of the following identifier fields: DOI, Pubmed ID or ISBN', 'YesNo'), -('IllLog', '0', NULL, 'If ON, log information about ILL requests', 'YesNo'), -('ILLModule','0',NULL,'If ON, enables the interlibrary loans module.','YesNo'), -('ILLModuleDisclaimerByType','',NULL,'YAML defining disclaimer settings for each ILL request type','Textarea'), -('ILLModuleUnmediated','0',NULL,'If enabled, try to immediately progress newly placed ILL requests.','YesNo'), -('ILLOpacbackends','',NULL,'ILL backends to enabled for OPAC initiated requests','multiple'), -('ILLOpacUnauthenticatedRequest','0',NULL,'Can OPAC users place ILL requests without having to be logged in','YesNo'), -('ILLPartnerCode','IL',NULL,'Patrons from this patron category will be used as partners to place ILL requests with','Free'), -('ILLRequestsTabs','',NULL,'Add customizable tabs to interlibrary loan requests list','Textarea'), -('ILLSendStaffNotices', '', NULL, 'Send these ILL notices to staff', 'multiple'), -('ILS-DI','0',NULL,'Enables ILS-DI services at OPAC.','YesNo'), -('ILS-DI:AuthorizedIPs','',NULL,'Restricts usage of ILS-DI to some IPs','Free'), -('ImageLimit','5',NULL,'Limit images stored in the database by the Patron Card image manager to this number.','Integer'), -('IncludeSeeAlsoFromInSearches','0',NULL,'Include see-also-from references in searches.','YesNo'), -('IncludeSeeFromInSearches','0',NULL,'Include see-from references in searches.','YesNo'), -('IndependentBranches','0',NULL,'If ON, increases security between libraries','YesNo'), -('IndependentBranchesPatronModifications','0', NULL, 'Show only modification request for the logged in branch','YesNo'), -('IndependentBranchesTransfers','0', NULL, 'Allow non-superlibrarians to transfer items between libraries','YesNo'), -('IntranetAddMastheadLibraryPulldown','0', NULL, 'Add a library select pulldown menu on the staff header search','YesNo'), -('IntranetBiblioDefaultView','normal','normal|marc|isbd|labeled_marc','Choose the default detail view in the staff interface; choose between normal, labeled_marc, marc or isbd','Choice'), -('intranetbookbag','1',NULL,'If ON, enables display of Cart feature in the intranet','YesNo'), -('IntranetCatalogSearchPulldown','0', NULL, 'Show a search field pulldown for "Search the catalog" boxes','YesNo'), -('IntranetCirculationHomeHTML', '', NULL, 'Show the following HTML in a div on the bottom of the reports home page', 'Free'), -('IntranetCoce','0', NULL, 'If on, enables cover retrieval from the configured Coce server in the staff interface', 'YesNo'), -('intranetcolorstylesheet','',NULL,'Define the color stylesheet to use in the staff interface','Free'), -('IntranetFavicon','',NULL,'Enter a complete URL to an image to replace the default Koha favicon on the staff interface','Free'), -('IntranetNav','','70|10','Use HTML tabs to add navigational links to the top-hand navigational bar in the staff interface','Textarea'), -('IntranetNumbersPreferPhrase','0',NULL,'Control the use of phr operator in callnumber and standard number staff interface searches','YesNo'), -('intranetreadinghistory','1',NULL,'If ON, Checkout history is enabled for all patrons','YesNo'), -('IntranetReadingHistoryHolds', '1', NULL, 'If ON, Holds history is enabled for all patrons','YesNo'), -('IntranetSlipPrinterJS','',NULL,'Use this JavaScript for printing slips. Define at least function printThenClose(). For use e.g. with Firefox PlugIn jsPrintSetup, see http://jsprintsetup.mozdev.org/','Free'), -('intranetstylesheet','',NULL,'Enter a complete URL to use an alternate layout stylesheet in Intranet','Free'), -('IntranetUserCSS','',NULL,'Add CSS to be included in the intranet in an embedded