+$DBversion = '18.12.00.074';
+if( CheckVersion( $DBversion ) ) {
+ unless ( TableExists( 'keyboard_shortcuts' ) ) {
+ $dbh->do(q|
+ CREATE TABLE keyboard_shortcuts (
+ shortcut_name varchar(80) NOT NULL,
+ shortcut_keys varchar(80) NOT NULL,
+ PRIMARY KEY (shortcut_name)
+ ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;|
+ );
+ }
+ $dbh->do(q|
+ INSERT IGNORE INTO keyboard_shortcuts (shortcut_name, shortcut_keys) VALUES
+ ("insert_copyright","Alt-C"),
+ ("insert_copyright_sound","Alt-P"),
+ ("insert_delimiter","Ctrl-D"),
+ ("subfield_help","Ctrl-H"),
+ ("link_authorities","Shift-Ctrl-L"),
+ ("delete_field","Ctrl-X"),
+ ("delete_subfield","Shift-Ctrl-X"),
+ ("new_line","Enter"),
+ ("line_break","Shift-Enter"),
+ ("next_position","Tab"),
+ ("prev_position","Shift-Tab")
+ ;|
+ );
+ $dbh->do(q|
+ INSERT IGNORE permissions (module_bit, code, description)
+ VALUES
+ (3,'manage_keyboard_shortcuts','Manage keyboard shortcuts for advanced cataloging editor')
+ ;|
+ );
+ SetVersion( $DBversion );
+ print "Upgrade to $DBversion done (Bug 21411 - Add keyboard_shortcuts table)\n";
+}
+
+$DBversion = '18.12.00.075';
+if( CheckVersion( $DBversion ) ) {
+ # you can use $dbh here like:
+ unless ( foreign_key_exists( 'tmp_holdsqueue', 'tmp_holdsqueue_ibfk_1' ) ) {
+ $dbh->do(q{
+ DELETE t FROM tmp_holdsqueue t
+ LEFT JOIN items i ON t.itemnumber=i.itemnumber
+ WHERE i.itemnumber IS NULL
+ });
+ $dbh->do(q{
+ ALTER TABLE tmp_holdsqueue
+ ADD CONSTRAINT `tmp_holdsqueue_ibfk_1` FOREIGN KEY (`itemnumber`)
+ REFERENCES `items` (`itemnumber`) ON DELETE CASCADE ON UPDATE CASCADE
+ });
+ }
+ SetVersion( $DBversion );
+ print "Upgrade to $DBversion done (Bug 22899 - Add items constraint to tmp_holdsqueue)\n";
+}
+
+$DBversion = '19.05.00.000';
+if( CheckVersion( $DBversion ) ) {
+ SetVersion( $DBversion );
+ print "Upgrade to $DBversion done (19.05.00 release)\n";
+}
+
+$DBversion = '19.06.00.000';
+if( CheckVersion( $DBversion ) ) {
+ SetVersion( $DBversion );
+ print "Upgrade to $DBversion done (Wingardium Leviosa!)\n";
+}
+
+$DBversion = '19.06.00.001';
+if( CheckVersion( $DBversion ) ) {
+ $dbh->do( q{
+ UPDATE systempreferences
+ SET explanation = 'This is a list of value pairs.\n Examples:\n PROC: FIC - causes an item in the Processing Center location to be updated into the Fiction location on check in.\n FIC: GEN - causes an item in the Fiction location to be updated into the General stacks location on check in.\n _BLANK_:FIC - causes an item that has no location to be updated into the Fiction location on check in.\nFIC: _BLANK_ - causes an item in location FIC to be updated to a blank location on check in.\n_ALL_:FIC - causes all items to be updated into the Fiction location on check in.\nPROC: _PERM_ - causes an item that is in the Processing Center to be updated to it''s permanent location.\nGeneral rule: if the location value on the left matches the item''s current location, it will be updated to match the location value on the right.\nNote: PROC and CART are special values, for these locations only can location and permanent_location differ, in all other cases an update will affect both. Items in the CART location will be returned to their permanent location on checkout.\nThe special term _BLANK_ may be used on either side of a value pair to update or remove the location from items with no location assigned. The special term _ALL_ is used on the left side of the colon (:) to affect all items.\nThe special term _PERM_ is used on the right side of the colon (:) to return items to their permanent location.'
+ WHERE variable = 'UpdateItemLocationOnCheckin'
+ });
+ SetVersion( $DBversion );
+ print "Upgrade to $DBversion done (Bug 22960: Fix typo in syspref description)\n";
+}
+
+$DBversion = '19.06.00.002';
+if ( CheckVersion($DBversion) ) {
+
+ $dbh->do(q{ALTER TABLE subscriptionhistory CHANGE opacnote opacnote LONGTEXT NULL});
+ $dbh->do(q{ALTER TABLE subscriptionhistory CHANGE librariannote librariannote LONGTEXT NULL});
+
+ $dbh->do(q{UPDATE subscriptionhistory SET opacnote = NULL WHERE opacnote = ''});
+ $dbh->do(q{UPDATE subscriptionhistory SET librariannote = NULL WHERE librariannote = ''});
+
+ SetVersion ($DBversion);
+ print "Upgrade to $DBversion done (Bug 10215: Increase the size of opacnote and librariannote for table subscriptionhistory)\n";
+}
+
+$DBversion = '19.06.00.003';
+if( CheckVersion( $DBversion ) ) {
+ $dbh->do(q{UPDATE systempreferences SET value = REPLACE( value, ' ', '|' ) WHERE variable = 'UniqueItemFields'; });
+
+ SetVersion( $DBversion );
+ print "Upgrade to $DBversion done (Bug 22867: UniqueItemFields preference value should be pipe-delimited)\n";
+}
+
+$DBversion = '19.06.00.004';
+if( CheckVersion( $DBversion ) ) {
+ $dbh->do( 'UPDATE language_descriptions SET description = "Griechisch (Modern 1453-)"
+ WHERE subtag = "el" and type = "language" and lang ="de"' );
+ SetVersion( $DBversion );
+ print "Upgrade to $DBversion done (Bug 22770: Fix typo in language description for el in German)\n";
+}
+
+$DBversion = '19.06.00.005';
+if( CheckVersion( $DBversion ) ) {
+ unless ( column_exists( 'reserves', 'item_level_hold' ) ) {
+ $dbh->do( "ALTER TABLE reserves ADD COLUMN item_level_hold BOOLEAN NOT NULL DEFAULT 0 AFTER itemtype" );
+ }
+ unless ( column_exists( 'old_reserves', 'item_level_hold' ) ) {
+ $dbh->do( "ALTER TABLE old_reserves ADD COLUMN item_level_hold BOOLEAN NOT NULL DEFAULT 0 AFTER itemtype" );
+ }
+
+ SetVersion( $DBversion );
+ print "Upgrade to $DBversion done (Bug 9834: Add the reserves.item_level_hold column)\n";
+}
+
+$DBversion = '19.06.00.006';
+if( CheckVersion( $DBversion ) ) {
+
+ unless ( TableExists('plugin_methods') ) {
+ $dbh->do(q{
+ CREATE TABLE plugin_methods (
+ plugin_class varchar(255) NOT NULL,
+ plugin_method varchar(255) NOT NULL,
+ PRIMARY KEY ( `plugin_class` (191), `plugin_method` (191) )
+ ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
+ });
+ }
+
+ require Koha::Plugins;
+ Koha::Plugins->new({ enable_plugins => 1 })->InstallPlugins;
+
+ SetVersion( $DBversion );
+ print "Upgrade to $DBversion done (Bug 21073: Improve plugin performance)\n";
+}
+
+$DBversion = '19.06.00.007';
+if( CheckVersion( $DBversion ) ) {
+ $dbh->do( "DELETE FROM systempreferences WHERE variable = 'RotationPreventTransfers'" );
+ SetVersion( $DBversion );
+ print "Upgrade to $DBversion done (Bug 22653: Remove unimplemented RotationPreventTransfers system preference)\n";
+}
+
+$DBversion = '19.06.00.008';
+if( CheckVersion( $DBversion ) ) {
+ $dbh->do( "UPDATE userflags SET flagdesc = 'Allow staff members to modify permissions and passwords for other staff members' WHERE flag = 'staffaccess'" );
+ SetVersion( $DBversion );
+ print "Upgrade to $DBversion done (Bug 23109: Improve description of staffaccess permission)\n";
+}
+
+$DBversion = '19.06.00.009';
+if( CheckVersion( $DBversion ) ) {
+ $dbh->do(q{
+ INSERT IGNORE INTO keyboard_shortcuts (shortcut_name, shortcut_keys)
+ VALUES ("toggle_keyboard", "Shift-Ctrl-K")
+ });
+
+ SetVersion( $DBversion );
+ print "Upgrade to $DBversion done (Bug 17178: add shortcut to keyboard_shortcuts)\n";
+}
+
+$DBversion = '19.06.00.010';
+if( CheckVersion( $DBversion ) ) {
+
+ if ( TableExists('default_circ_rules') ) {
+ if ( column_exists( 'default_circ_rules', 'holdallowed' ) ) {
+ $dbh->do("
+ INSERT IGNORE INTO circulation_rules ( categorycode, branchcode, itemtype, rule_name, rule_value )
+ SELECT NULL, NULL, NULL, 'holdallowed', holdallowed
+ FROM default_circ_rules
+ ");
+ $dbh->do("
+ INSERT IGNORE INTO circulation_rules ( categorycode, branchcode, itemtype, rule_name, rule_value )
+ SELECT NULL, NULL, NULL, 'hold_fulfillment_policy', hold_fulfillment_policy
+ FROM default_circ_rules
+ ");
+ $dbh->do("
+ INSERT IGNORE INTO circulation_rules ( categorycode, branchcode, itemtype, rule_name, rule_value )
+ SELECT NULL, NULL, NULL, 'returnbranch', returnbranch
+ FROM default_circ_rules
+ ");
+ $dbh->do("DROP TABLE default_circ_rules");
+ }
+ }
+
+ if ( TableExists('default_branch_circ_rules') ) {
+ if ( column_exists( 'default_branch_circ_rules', 'holdallowed' ) ) {
+ $dbh->do("
+ INSERT IGNORE INTO circulation_rules ( categorycode, branchcode, itemtype, rule_name, rule_value )
+ SELECT NULL, branchcode, NULL, 'holdallowed', holdallowed
+ FROM default_branch_circ_rules
+ ");
+ $dbh->do("
+ INSERT IGNORE INTO circulation_rules ( categorycode, branchcode, itemtype, rule_name, rule_value )
+ SELECT NULL, branchcode, NULL, 'hold_fulfillment_policy', hold_fulfillment_policy
+ FROM default_branch_circ_rules
+ ");
+ $dbh->do("
+ INSERT IGNORE INTO circulation_rules ( categorycode, branchcode, itemtype, rule_name, rule_value )
+ SELECT NULL, branchcode, NULL, 'returnbranch', returnbranch
+ FROM default_branch_circ_rules
+ ");
+ $dbh->do("DROP TABLE default_branch_circ_rules");
+ }
+ }
+
+ if ( TableExists('branch_item_rules') ) {
+ if ( column_exists( 'branch_item_rules', 'holdallowed' ) ) {
+ $dbh->do("
+ INSERT IGNORE INTO circulation_rules ( categorycode, branchcode, itemtype, rule_name, rule_value )
+ SELECT NULL, branchcode, itemtype, 'holdallowed', holdallowed
+ FROM branch_item_rules
+ ");
+ $dbh->do("
+ INSERT IGNORE INTO circulation_rules ( categorycode, branchcode, itemtype, rule_name, rule_value )
+ SELECT NULL, branchcode, itemtype, 'hold_fulfillment_policy', hold_fulfillment_policy
+ FROM branch_item_rules
+ ");
+ $dbh->do("
+ INSERT IGNORE INTO circulation_rules ( categorycode, branchcode, itemtype, rule_name, rule_value )
+ SELECT NULL, branchcode, itemtype, 'returnbranch', returnbranch
+ FROM branch_item_rules
+ ");
+ $dbh->do("DROP TABLE branch_item_rules");
+ }
+ }
+
+ if ( TableExists('default_branch_item_rules') ) {
+ if ( column_exists( 'default_branch_item_rules', 'holdallowed' ) ) {
+ $dbh->do("
+ INSERT IGNORE INTO circulation_rules ( categorycode, branchcode, itemtype, rule_name, rule_value )
+ SELECT NULL, NULL, itemtype, 'holdallowed', holdallowed
+ FROM default_branch_item_rules
+ ");
+ $dbh->do("
+ INSERT IGNORE INTO circulation_rules ( categorycode, branchcode, itemtype, rule_name, rule_value )
+ SELECT NULL, NULL, itemtype, 'hold_fulfillment_policy', hold_fulfillment_policy
+ FROM default_branch_item_rules
+ ");
+ $dbh->do("
+ INSERT IGNORE INTO circulation_rules ( categorycode, branchcode, itemtype, rule_name, rule_value )
+ SELECT NULL, NULL, itemtype, 'returnbranch', returnbranch
+ FROM default_branch_item_rules
+ ");
+ $dbh->do("DROP TABLE default_branch_item_rules");
+ }
+ }
+
+ SetVersion( $DBversion );
+ print "Upgrade to $DBversion done (Bug 18928: Move holdallowed, hold_fulfillment_policy, returnbranch to circulation_rules)\n";
+}
+
+$DBversion = '19.06.00.011';
+if( CheckVersion( $DBversion ) ) {
+
+ if ( TableExists('refund_lost_item_fee_rules') ) {
+ if ( column_exists( 'refund_lost_item_fee_rules', 'refund' ) ) {
+ $dbh->do("
+ INSERT INTO circulation_rules ( categorycode, branchcode, itemtype, rule_name, rule_value )
+ SELECT NULL, IF(branchcode='*', NULL, branchcode), NULL, 'refund', refund
+ FROM refund_lost_item_fee_rules
+ ");
+ $dbh->do("DROP TABLE refund_lost_item_fee_rules");
+ }
+ }
+
+ SetVersion( $DBversion );
+ print "Upgrade to $DBversion done (Bug 18930: Move lost item refund rules to circulation_rules table)\n";
+}
+
+$DBversion = '19.06.00.012';
+if ( CheckVersion($DBversion) ) {
+
+ # Find and correct pathological cases of LR becoming a credit
+ my $sth = $dbh->prepare( "SELECT accountlines_id, issue_id, borrowernumber, itemnumber, amount, manager_id FROM accountlines WHERE accounttype = 'LR' AND amount < 0" );
+ $sth->execute();
+ while ( my $row = $sth->fetchrow_hashref ) {
+ $dbh->do(
+ "INSERT INTO accountlines (accounttype, issue_id, borrowernumber, itemnumber, amount, manager_id, interface) VALUES ( ?, ?, ?, ?, ?, ?, ? );",
+ {},
+ (
+ 'CR', $row->{issue_id},
+ $row->{borrowernumber}, $row->{itemnumber},
+ $row->{amount}, $row->{manager_id},
+ 'upgrade'
+ )
+ );
+ my $credit_id = $dbh->last_insert_id(undef, undef, 'accountlines', undef);
+ my $amount = $row->{amount} * -1;
+ $dbh->do("INSERT INTO account_offsets (credit_id, debit_id, type, amount) VALUES (?,?,?,?);",{},($credit_id, $row->{accountlines_id}, 'Lost Item', $amount));
+ $dbh->do("UPDATE accountlines SET amount = '$amount' WHERE accountlines_id = '$row->{accountlines_id}';");
+ }
+
+ $dbh->do(qq{
+ UPDATE
+ accountlines
+ SET
+ accounttype = 'LOST',
+ status = 'RETURNED'
+ WHERE
+ accounttype = 'LR';
+ });
+
+ # Find and correct pathalogical cases of L having been converted to W
+ $sth = $dbh->prepare( "SELECT accountlines_id, issue_id, borrowernumber, itemnumber, amount, manager_id FROM accountlines WHERE accounttype = 'W' AND itemnumber IS NOT NULL" );
+ $sth->execute();
+ while ( my $row = $sth->fetchrow_hashref ) {
+ my $amount = $row->{amount} * -1;
+ $dbh->do(
+ "INSERT INTO accountlines (accounttype, issue_id, borrowernumber, itemnumber, amount, manager_id, interface) VALUES ( ?, ?, ?, ?, ?, ?, ? );",
+ {},
+ (
+ 'LOST', $row->{issue_id}, $row->{borrowernumber},
+ $row->{itemnumber}, $amount, $row->{manager_id},
+ 'upgrade'
+ )
+ );
+ my $debit_id = $dbh->last_insert_id(undef, undef, 'accountlines', undef);
+ $dbh->do(
+ "INSERT INTO account_offsets (credit_id, debit_id, type, amount) VALUES (?,?,?,?);",
+ {},
+ (
+ $row->{accountlines_id}, $debit_id,
+ 'Lost Item', $amount
+ )
+ );
+ }
+
+ $dbh->do(qq{
+ UPDATE
+ accountlines
+ SET
+ accounttype = 'LOST'
+ WHERE
+ accounttype = 'L';
+ });
+
+ $dbh->do(qq{
+ UPDATE
+ accountlines
+ SET
+ accounttype = 'LOST_RETURNED'
+ WHERE
+ accounttype = 'CR';
+ });
+
+ SetVersion($DBversion);
+ print "Upgrade to $DBversion done (Bug 22563: Fix accounttypes for 'L', 'LR' and 'CR')\n";
+}
+
+$DBversion = '19.06.00.013';
+if ( CheckVersion( $DBversion ) ) {
+ unless ( column_exists( 'borrower_modifications', 'changed_fields' ) ) {
+ $dbh->do("ALTER TABLE borrower_modifications ADD changed_fields MEDIUMTEXT AFTER verification_token;");
+ }
+ SetVersion( $DBversion );
+ print "Upgrade to $DBversion done (Bug 23151: Add borrower_modifications.changed_fields column)\n";
+}
+
+$DBversion = '19.06.00.014';
+if ( CheckVersion($DBversion) ) {
+
+ $dbh->do(qq{
+ UPDATE
+ accountlines
+ SET
+ accounttype = 'RENT_DAILY_RENEW'
+ WHERE
+ accounttype = 'Rent'
+ AND
+ description LIKE 'Renewal of Daily Rental Item%';
+ });
+
+ $dbh->do(qq{
+ UPDATE
+ accountlines
+ SET
+ accounttype = 'RENT_DAILY'
+ WHERE
+ accounttype = 'Rent'
+ AND
+ description LIKE 'Daily rental';
+ });
+
+
+ $dbh->do(qq{
+ UPDATE
+ accountlines
+ SET
+ accounttype = 'RENT_RENEW'
+ WHERE
+ accounttype = 'Rent'
+ AND
+ description LIKE 'Renewal of Rental Item%';
+ });
+
+ $dbh->do(qq{
+ UPDATE
+ accountlines
+ SET
+ accounttype = 'RENT'
+ WHERE
+ accounttype = 'Rent';
+ });
+
+ SetVersion($DBversion);
+ print "Upgrade to $DBversion done (Bug 11573: Fix accounttypes for 'Rent')\n";
+}
+
+$DBversion = '19.06.00.015';
+if( CheckVersion( $DBversion ) ) {
+ $dbh->do( "UPDATE `search_field` SET `name` = 'date-time-last-modified', `label` = 'date-time-last-modified' WHERE `name` = 'date/time-last-modified'" );
+
+ SetVersion( $DBversion );
+ print "Upgrade to $DBversion done (Bug 22524: Fix date/time-last-modified search with Elasticsearch)\n";
+}
+
+$DBversion = '19.06.00.016';
+if( CheckVersion( $DBversion ) ) {
+
+ $dbh->do(q|
+ INSERT IGNORE INTO keyboard_shortcuts (shortcut_name, shortcut_keys) VALUES
+ ("insert_copyright","Alt-C"),
+ ("insert_copyright_sound","Alt-P"),
+ ("insert_delimiter","Ctrl-D"),
+ ("subfield_help","Ctrl-H"),
+ ("link_authorities","Shift-Ctrl-L"),
+ ("delete_field","Ctrl-X"),
+ ("delete_subfield","Shift-Ctrl-X"),
+ ("new_line","Enter"),
+ ("line_break","Shift-Enter"),
+ ("next_position","Tab"),
+ ("prev_position","Shift-Tab"),
+ ("toggle_keyboard", "Shift-Ctrl-K")
+ ;|);
+
+ SetVersion( $DBversion );
+ print "Upgrade to $DBversion done (Bug 23396: Fix missing keyboard_shortcuts table)\n";
+}
+
+$DBversion = '19.06.00.017';
+if ( CheckVersion($DBversion) ) {
+
+ $dbh->do(qq{
+ INSERT INTO
+ authorised_values (category,authorised_value,lib)
+ VALUES
+ ('PAYMENT_TYPE','SIP00','Cash via SIP2'),
+ ('PAYMENT_TYPE','SIP01','VISA via SIP2'),
+ ('PAYMENT_TYPE','SIP02','Creditcard via SIP2')
+ });
+
+ $dbh->do(qq{
+ UPDATE
+ accountlines
+ SET
+ accounttype = 'Pay',
+ payment_type = 'SIP00'
+ WHERE
+ accounttype = 'Pay00';
+ });
+
+ $dbh->do(qq{
+ UPDATE
+ accountlines
+ SET
+ accounttype = 'Pay',
+ payment_type = 'SIP01'
+ WHERE
+ accounttype = 'Pay01';
+ });
+
+ $dbh->do(qq{
+ UPDATE
+ accountlines
+ SET
+ accounttype = 'Pay',
+ payment_type = 'SIP02'
+ WHERE
+ accounttype = 'Pay02';
+ });
+
+ my $sth = $dbh->prepare( q{SELECT * FROM accountlines WHERE accounttype REGEXP '^Pay[[:digit:]]{2}$' } );
+ $sth->execute();
+ my $seen = {};
+ while (my $row = $sth->fetchrow_hashref) {
+ my $type = $row->{accounttype};
+ my $sipcode = $type;
+ $sipcode =~ s/Pay/SIP/g;
+ unless ($seen->{$sipcode}) {
+ $dbh->do(qq{
+ INSERT INTO
+ authorised_values (category,authorised_value,lib)
+ VALUES
+ ('PAYMENT_TYPE',"$sipcode",'Unrecognised SIP2 payment type')
+ });
+
+ $dbh->do(qq{
+ UPDATE
+ accountlines
+ SET
+ accounttype = 'Pay',
+ payment_type = "$sipcode"
+ WHERE
+ accounttype = "$type";
+ });
+
+ $seen->{$sipcode} = 1;
+ }
+ }
+
+ SetVersion($DBversion);
+ print "Upgrade to $DBversion done (Bug 22610: Fix accounttypes for SIP2 payments)\n";
+}
+
+$DBversion = '19.06.00.018';
+if( CheckVersion( $DBversion ) ) {
+ if( !column_exists( 'biblio', 'subtitle' ) ) {
+ $dbh->do( "ALTER TABLE biblio ADD COLUMN medium LONGTEXT AFTER title" );
+ $dbh->do( "ALTER TABLE biblio ADD COLUMN subtitle LONGTEXT AFTER medium" );
+ $dbh->do( "ALTER TABLE biblio ADD COLUMN part_number LONGTEXT AFTER subtitle" );
+ $dbh->do( "ALTER TABLE biblio ADD COLUMN part_name LONGTEXT AFTER part_number" );
+
+ $dbh->do( "ALTER TABLE deletedbiblio ADD COLUMN medium LONGTEXT AFTER title" );
+ $dbh->do( "ALTER TABLE deletedbiblio ADD COLUMN subtitle LONGTEXT AFTER medium" );
+ $dbh->do( "ALTER TABLE deletedbiblio ADD COLUMN part_number LONGTEXT AFTER subtitle" );
+ $dbh->do( "ALTER TABLE deletedbiblio ADD COLUMN part_name LONGTEXT AFTER part_number" );
+ }
+
+ $dbh->do( "UPDATE marc_subfield_structure SET kohafield='biblio.subtitle' WHERE kohafield='bibliosubtitle.subtitle'" );
+
+ my $marcflavour = C4::Context->preference('marcflavour');
+
+ if ( $marcflavour eq 'UNIMARC' ) {
+ $dbh->do(qq{
+ UPDATE marc_subfield_structure SET kohafield='biblio.medium'
+ WHERE (kohafield IS NULL OR kohafield='') AND frameworkcode='' AND tagfield='200' AND tagsubfield='b'
+ });
+ $dbh->do(qq{
+ UPDATE marc_subfield_structure SET kohafield='biblio.subtitle'
+ WHERE (kohafield IS NULL OR kohafield='') AND frameworkcode='' AND tagfield='200' AND tagsubfield='e'
+ });
+ $dbh->do(qq{
+ UPDATE marc_subfield_structure SET kohafield='biblio.part_number'
+ WHERE (kohafield IS NULL OR kohafield='') AND frameworkcode='' AND tagfield='200' AND tagsubfield='h'
+ });
+ $dbh->do(qq{
+ UPDATE marc_subfield_structure SET kohafield='biblio.part_name'
+ WHERE (kohafield IS NULL OR kohafield='') AND frameworkcode='' AND tagfield='200' AND tagsubfield='i'
+ });
+ } else {
+ $dbh->do(qq{
+ UPDATE marc_subfield_structure SET kohafield='biblio.medium'
+ WHERE (kohafield IS NULL OR kohafield='') AND frameworkcode='' AND tagfield='245' AND tagsubfield='h'
+ });
+ $dbh->do(qq{
+ UPDATE marc_subfield_structure SET kohafield='biblio.subtitle'
+ WHERE (kohafield IS NULL OR kohafield='') AND frameworkcode='' AND tagfield='245' AND tagsubfield='b'
+ });
+ $dbh->do(qq{
+ UPDATE marc_subfield_structure SET kohafield='biblio.part_number'
+ WHERE (kohafield IS NULL OR kohafield='') AND frameworkcode='' AND tagfield='245' AND tagsubfield='n'
+ });
+ $dbh->do(qq{
+ UPDATE marc_subfield_structure SET kohafield='biblio.part_name'
+ WHERE (kohafield IS NULL OR kohafield='') AND frameworkcode='' AND tagfield='245' AND tagsubfield='p'
+ });
+ }
+
+ $dbh->do("UPDATE marc_subfield_structure JOIN fieldmapping ON tagfield = fieldcode AND subfieldcode=tagsubfield SET kohafield='biblio.subtitle' WHERE fieldmapping.frameworkcode=''");
+ $sth = $dbh->prepare("SELECT * FROM fieldmapping WHERE frameworkcode != '' OR field != 'subtitle'");
+ $sth->execute;
+ my @fails_11529;
+ if ( $sth->rows ) {
+ while ( my $value = $sth->fetchrow_hashref() ) {
+ my $framework =
+ $value->{frameworkcode} eq ""
+ ? "Default"
+ : $value->{frameworkcode};
+ push @fails_11529,
+ {
+ field => $value->{field},
+ fieldcode => $value->{fieldcode},
+ subfieldcode => $value->{subfieldcode},
+ framework => $framework
+ };
+ }
+ }
+
+ $dbh->do( "DROP TABLE IF EXISTS fieldmapping" );
+
+ $dbh->do( "DELETE FROM user_permissions WHERE code='manage_keywords2koha_mappings'" );
+
+ $dbh->do( "DELETE FROM permissions WHERE code='manage_keywords2koha_mappings'" );
+
+ # Always end with this (adjust the bug info)
+ SetVersion( $DBversion );
+ print "Upgrade to $DBversion done (Bug 11529: Add medium, subtitle and part information to biblio table)\n";
+ if ( @fails_11529 ) {
+ print "WARNING: Not all Keyword to MARC mappings could be preserved\n";
+ for my $fail_11529 ( @fails_11529 ) {
+ print " keyword: "
+ . $fail_11529->{field}
+ . " to field: "
+ . $fail_11529->{fieldcode} . "\$"
+ . $fail_11529->{subfieldcode} . " for "
+ . $fail_11529->{framework}
+ . " framework\n";
+ }
+ print "You will need to remap using Koha to MARC mappings in administration\n";
+ }
+ print "NOTE: misc/batchRebuildBiblioTables.pl should be run to populate the fields introduced in bug 11529. It may take some time for larger databases.\n\n"
+}
+
+$DBversion = '19.06.00.019';
+if ( CheckVersion($DBversion) ) {
+ $dbh->do(q{
+ INSERT IGNORE INTO systempreferences (variable, value, options, explanation, type)
+ VALUES
+ (
+ 'FinePaymentAutoPopup',
+ '0',
+ NULL,
+ 'If enabled, automatically display a print dialog for a payment receipt when making a payment.',
+ 'YesNo'
+ )
+ });
+
+ SetVersion($DBversion);
+ print
+"Upgrade to $DBversion done (Bug 23228: Add option to automatically display payment receipt for printing after making a payment)\n";
+}
+
+$DBversion = '19.06.00.020';
+if( CheckVersion( $DBversion ) ) {
+ $dbh->do(q|
+ INSERT IGNORE INTO systempreferences ( `variable`, `value`, `options`, `explanation`, `type` ) VALUES
+ ('PreserveSerialNotes','1','','When a new "Expected" issue is generated, should it be prefilled with last created issue notes?','YesNo');
+ |);
+
+ SetVersion( $DBversion );
+ print "Upgrade to $DBversion done (Bug 23416: Add PreserveSerialNotes syspref)\n";
+}
+
+$DBversion = '19.06.00.021';
+if( CheckVersion( $DBversion ) ) {
+
+ $dbh->do(q|
+ ALTER TABLE marc_subfield_structure CHANGE COLUMN hidden hidden TINYINT(1) DEFAULT 8 NOT NULL;
+ |);
+ # Always end with this (adjust the bug info)
+ SetVersion( $DBversion );
+ print "Upgrade to $DBversion done (Bug 23309: Can't add new subfields to bibliographic frameworks in strict mode)\n";
+}
+
+$DBversion = '19.06.00.022';
+if ( CheckVersion($DBversion) ) {
+
+ unless ( TableExists('borrower_relationships') ) {
+ $dbh->do(q{
+ CREATE TABLE `borrower_relationships` (
+ id INT(11) NOT NULL AUTO_INCREMENT,
+ guarantor_id INT(11) NOT NULL,
+ guarantee_id INT(11) NOT NULL,
+ relationship VARCHAR(100) NOT NULL,
+ PRIMARY KEY (id),
+ UNIQUE KEY `guarantor_guarantee_idx` ( `guarantor_id`, `guarantee_id` ),
+ CONSTRAINT r_guarantor FOREIGN KEY ( guarantor_id ) REFERENCES borrowers ( borrowernumber ) ON UPDATE CASCADE ON DELETE CASCADE,
+ CONSTRAINT r_guarantee FOREIGN KEY ( guarantee_id ) REFERENCES borrowers ( borrowernumber ) ON UPDATE CASCADE ON DELETE CASCADE
+ ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
+ });
+
+ $dbh->do(q{
+ UPDATE borrowers
+ LEFT JOIN borrowers guarantor ON ( borrowers.guarantorid = guarantor.borrowernumber )
+ SET borrowers.guarantorid = NULL WHERE guarantor.borrowernumber IS NULL;
+ });
+
+ # Bad data handling: guarantorid IS NOT NULL AND relationship IS NULL
+ $dbh->do(q{
+ UPDATE borrowers
+ SET relationship = '_bad_data'
+ WHERE guarantorid IS NOT NULL AND
+ relationship IS NULL
+ });
+
+ $dbh->do(q{
+ INSERT INTO borrower_relationships ( guarantor_id, guarantee_id, relationship )
+ SELECT guarantorid, borrowernumber, relationship FROM borrowers WHERE guarantorid IS NOT NULL;
+ });
+
+ # Clean migrated guarantor data
+ $dbh->do(q{
+ UPDATE borrowers
+ SET contactname=NULL,
+ contactfirstname=NULL,
+ relationship=NULL
+ WHERE guarantorid IS NOT NULL
+ });
+ }
+
+ if ( column_exists( 'borrowers', 'guarantorid' ) ) {
+ $dbh->do(q{
+ ALTER TABLE borrowers DROP guarantorid;
+ });
+ }
+
+ if ( column_exists( 'deletedborrowers', 'guarantorid' ) ) {
+ $dbh->do(q{
+ ALTER TABLE deletedborrowers DROP guarantorid;
+ });
+ }
+
+ if ( column_exists( 'borrower_modifications', 'guarantorid' ) ) {
+ $dbh->do(q{
+ ALTER TABLE borrower_modifications DROP guarantorid;
+ });
+ }
+
+ SetVersion($DBversion);
+ print "Upgrade to $DBversion done (Bug 14570: Make it possible to add multiple guarantors to a record)\n";
+}
+
+$DBversion = '19.06.00.023';
+if( CheckVersion( $DBversion ) ) {
+ $dbh->do(q{
+ INSERT IGNORE INTO `systempreferences` (`variable`,`value`,`explanation`,`options`,`type`) VALUES
+ ('ElasticsearchMARCFormat', 'ISO2709', 'ISO2709|ARRAY', 'Elasticsearch MARC format. ISO2709 format is recommended as it is faster and takes less space, whereas array is searchable.', 'Choice')
+ });
+
+ SetVersion( $DBversion );
+ print "Upgrade to $DBversion done (Bug 22258: Add ElasticsearchMARCFormat preference)\n";
+}
+
+$DBversion = '19.06.00.024';
+if( CheckVersion( $DBversion ) ) {
+ $dbh->do(q{ALTER TABLE accountlines CHANGE COLUMN accounttype accounttype varchar(80) default NULL});
+
+ SetVersion( $DBversion );
+ print "Upgrade to $DBversion done (Bug 23539: accountlines.accounttype should match authorised_values.authorised_value in size)\n";
+}
+
+$DBversion = '19.06.00.025';
+if( CheckVersion( $DBversion ) ) {
+ $dbh->do( q/INSERT IGNORE INTO systempreferences (variable,value,options,explanation,type) VALUES (?, ?, ?, ?, ?)/, undef, 'BarcodeSeparators','\s\r\n','','Splitting characters for barcodes','Free' );
+ SetVersion( $DBversion );
+ print "Upgrade to $DBversion done (Bug 22996: Add pref BarcodeSeparators)\n";
+}
+
+$DBversion = '19.06.00.026';
+if( CheckVersion( $DBversion ) ) {
+
+ unless ( column_exists( 'borrowers', 'privacy_guarantor_fines' ) ) {
+ $dbh->do(q{
+ ALTER TABLE borrowers
+ ADD privacy_guarantor_fines TINYINT(1) NOT NULL DEFAULT '0' AFTER privacy;
+ });
+ }
+
+ unless ( column_exists( 'deletedborrowers', 'privacy_guarantor_fines' ) ) {
+ $dbh->do(q{
+ ALTER TABLE deletedborrowers
+ ADD privacy_guarantor_fines TINYINT(1) NOT NULL DEFAULT '0' AFTER privacy;
+ });
+ }
+
+ $dbh->do(q{
+ INSERT IGNORE INTO systempreferences (variable, value, options, explanation, type )
+ VALUES (
+ 'AllowStaffToSetFinesVisibilityForGuarantor', '0', NULL,
+ 'If enabled, library staff can set a patron''s fines to be visible to linked patrons from the opac.', 'YesNo'
+ ), (
+ 'AllowPatronToSetFinesVisibilityForGuarantor', '0', NULL,
+ 'If enabled, the patron can set fines to be visible to his or her guarantor', 'YesNo'
+ )
+ });
+
+ SetVersion( $DBversion );
+ print "Upgrade to $DBversion done (Bug 20691: Add ability for guarantors to view guarantee's fines in OPAC)\n";
+}
+
+$DBversion = '19.06.00.027';
+if( CheckVersion( $DBversion ) ) {
+
+ if( !TableExists( 'itemtypes_branches' ) ) {
+ $dbh->do( "
+ CREATE TABLE itemtypes_branches( -- association table between authorised_values and branches
+ itemtype VARCHAR(10) NOT NULL,
+ branchcode VARCHAR(10) NOT NULL,
+ FOREIGN KEY (itemtype) REFERENCES itemtypes(itemtype) ON DELETE CASCADE,
+ FOREIGN KEY (branchcode) REFERENCES branches(branchcode) ON DELETE CASCADE
+ ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
+ ");
+ }
+
+ SetVersion( $DBversion );
+ print "Upgrade to $DBversion done (Bug 15497: Add itemtypes_branches table)\n";
+}
+
+$DBversion = '19.06.00.028';
+if ( CheckVersion($DBversion) ) {
+
+ $dbh->do(qq{
+ UPDATE
+ accountlines
+ SET
+ accounttype = 'ACCOUNT'
+ WHERE
+ accounttype = 'A';
+ });
+
+ SetVersion($DBversion);
+ print "Upgrade to $DBversion done (Bug 11573: Fix accounttypes for 'A')\n";
+}
+
+$DBversion = '19.06.00.029';
+if ( CheckVersion($DBversion) ) {
+
+ unless ( TableExists( 'cash_registers' ) ) {
+ $dbh->do(qq{
+ CREATE TABLE `cash_registers` (
+ `id` int(11) NOT NULL auto_increment, -- unique identifier for each account register
+ `name` varchar(24) NOT NULL, -- the user friendly identifier for each account register
+ `description` longtext NOT NULL, -- the user friendly description for each account register
+ `branch` varchar(10) NOT NULL, -- the foreign key the library this account register belongs
+ `branch_default` tinyint(1) NOT NULL DEFAULT 0, -- boolean flag to denote that this till is the branch default
+ `starting_float` decimal(28, 6), -- the starting float this account register should be assigned
+ `archived` tinyint(1) NOT NULL DEFAULT 0, -- boolean flag to denote if this till is archived or not
+ PRIMARY KEY (`id`),
+ UNIQUE KEY `name` (`name`,`branch`),
+ CONSTRAINT cash_registers_branch FOREIGN KEY (branch) REFERENCES branches (branchcode) ON UPDATE CASCADE ON DELETE CASCADE
+ ) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_unicode_ci;
+ });
+ }
+
+ unless ( column_exists( 'accountlines', 'register_id' ) ) {
+ $dbh->do(qq{ALTER TABLE `accountlines` ADD `register_id` int(11) NULL DEFAULT NULL AFTER `manager_id`});
+ $dbh->do(qq{
+ ALTER TABLE `accountlines`
+ ADD CONSTRAINT `accountlines_ibfk_registers` FOREIGN KEY (`register_id`)
+ REFERENCES `cash_registers` (`id`) ON DELETE SET NULL ON UPDATE CASCADE
+ });
+ }
+
+ $dbh->do(qq{
+ INSERT IGNORE INTO `userflags` (`bit`, `flag`, `flagdesc`, `defaulton`)
+ VALUES (25, 'cash_management', 'Cash management', 0)
+ });
+
+ $dbh->do(qq{
+ INSERT IGNORE permissions (module_bit, code, description)
+ VALUES
+ (25, 'manage_cash_registers', 'Add and remove cash registers')
+ });
+
+ $dbh->do(qq{
+ INSERT IGNORE INTO systempreferences (variable,value,options,explanation,type) VALUES
+ ('UseCashRegisters','0','','Use cash registers with the accounting system and assign patron transactions to them.','YesNo')
+ });
+
+ SetVersion($DBversion);
+ print "Upgrade to $DBversion done (Bug 23321: Add cash_registers table, permissions and preferences)\n";
+}
+
+$DBversion = '19.06.00.030';
+if( CheckVersion( $DBversion ) ) {
+
+ $dbh->do(q|
+ CREATE TABLE IF NOT EXISTS club_holds (
+ id INT(11) NOT NULL AUTO_INCREMENT,
+ club_id INT(11) NOT NULL, -- id for the club the hold was generated for
+ biblio_id INT(11) NOT NULL, -- id for the bibliographic record the hold has been placed against
+ item_id INT(11) NULL DEFAULT NULL, -- If item-level, the id for the item the hold has been placed agains
+ date_created TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, -- Timestamp for the placed hold
+ PRIMARY KEY (id),
+ -- KEY club_id (club_id),
+ CONSTRAINT clubs_holds_ibfk_1 FOREIGN KEY (club_id) REFERENCES clubs (id) ON DELETE CASCADE ON UPDATE CASCADE,
+ CONSTRAINT clubs_holds_ibfk_2 FOREIGN KEY (biblio_id) REFERENCES biblio (biblionumber) ON DELETE CASCADE ON UPDATE CASCADE,
+ CONSTRAINT clubs_holds_ibfk_3 FOREIGN KEY (item_id) REFERENCES items (itemnumber) ON DELETE CASCADE ON UPDATE CASCADE
+ ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
+ |);
+
+ $dbh->do(q|
+ CREATE TABLE IF NOT EXISTS club_holds_to_patron_holds (
+ id INT(11) NOT NULL AUTO_INCREMENT,
+ club_hold_id INT(11) NOT NULL,
+ patron_id INT(11) NOT NULL,
+ hold_id INT(11),
+ error_code ENUM ( 'damaged', 'ageRestricted', 'itemAlreadyOnHold',
+ 'tooManyHoldsForThisRecord', 'tooManyReservesToday',
+ 'tooManyReserves', 'notReservable', 'cannotReserveFromOtherBranches',
+ 'libraryNotFound', 'libraryNotPickupLocation', 'cannotBeTransferred'
+ ) NULL DEFAULT NULL,
+ error_message varchar(100) NULL DEFAULT NULL,
+ PRIMARY KEY (id),
+ -- KEY club_hold_id (club_hold_id),
+ CONSTRAINT clubs_holds_paton_holds_ibfk_1 FOREIGN KEY (club_hold_id) REFERENCES club_holds (id) ON DELETE CASCADE ON UPDATE CASCADE,
+ CONSTRAINT clubs_holds_paton_holds_ibfk_2 FOREIGN KEY (patron_id) REFERENCES borrowers (borrowernumber) ON DELETE CASCADE ON UPDATE CASCADE,
+ CONSTRAINT clubs_holds_paton_holds_ibfk_3 FOREIGN KEY (hold_id) REFERENCES reserves (reserve_id) ON DELETE CASCADE ON UPDATE CASCADE
+ ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
+ |);
+
+ # Always end with this (adjust the bug info)
+ SetVersion( $DBversion );
+ print "Upgrade to $DBversion done (Bug 19618: add club_holds tables)\n";
+}
+
+$DBversion = '19.06.00.031';
+if( CheckVersion( $DBversion ) ) {
+ $dbh->do(q|
+ INSERT IGNORE INTO systempreferences ( `variable`, `value`, `options`, `explanation`, `type` ) VALUES
+ ('OPACDetailQRCode','0','','Enable the display of a QR Code on the OPAC detail page','YesNo');
+ |);
+
+ SetVersion( $DBversion );
+ print "Upgrade to $DBversion done (Bug 23566: Add OPACDetailQRCode system preference)\n";
+}
+
+$DBversion = '19.06.00.032';
+if ( CheckVersion($DBversion) ) {
+ if ( !column_exists( 'search_marc_to_field', 'search' ) ) {
+ $dbh->do(q|
+ ALTER TABLE `search_marc_to_field` ADD COLUMN `search` tinyint(1) NOT NULL DEFAULT 1
+ |);
+ }
+ if ( !column_exists( 'search_field', 'staff_client' ) ) {
+ $dbh->do(q|
+ ALTER TABLE `search_field` ADD COLUMN `staff_client` tinyint(1) NOT NULL DEFAULT 1
+ |);
+ }
+ if ( !column_exists( 'search_field', 'opac' ) ) {
+ $dbh->do(q|
+ ALTER TABLE `search_field` ADD COLUMN `opac` tinyint(1) NOT NULL DEFAULT 1
+ |);
+ }
+
+ SetVersion($DBversion);
+ print
+"Upgrade to $DBversion done (Bug 20589: Add field boosting and use elastic query fields parameter instead of depricated _all)\n";
+}
+
+$DBversion = '19.06.00.033';
+if( CheckVersion( $DBversion ) ) {
+
+ $dbh->do(qq{
+ INSERT IGNORE INTO systempreferences (variable,value,options,explanation,type) VALUES
+ ('OnSiteCheckoutAutoCheck','0','','Enable/Do not enable onsite checkout by default if last checkout was an onsite checkout','YesNo')
+ });
+ SetVersion( $DBversion );
+ print "Upgrade to $DBversion done (Bug 23686: Add OnSiteCheckoutAutoCheck system preference)\n";
+}
+
+$DBversion = '19.06.00.034';
+if( CheckVersion( $DBversion ) ) {
+ $dbh->do(q{
+ INSERT IGNORE INTO systempreferences ( `variable`, `value`, `options`, `explanation`, `type` ) VALUES
+ ('TransfersBlockCirc','1',NULL,'Should the transfer modal block circulation staff from continuing scanning items','YesNo')
+ });
+ SetVersion( $DBversion );
+ print "Upgrade to $DBversion done (Bug 23007: Make transfer modals optionally block circ)\n";
+}
+
+$DBversion = '19.06.00.035';
+if( CheckVersion( $DBversion ) ) {
+
+ $dbh->do(q{
+ INSERT IGNORE INTO systempreferences (variable,value,options,explanation,type) VALUES
+ ( 'IntranetCoce','0', NULL, 'If on, enables cover retrieval from the configured Coce server in the staff client', 'YesNo')
+ });
+
+ $dbh->do(qq{
+ UPDATE systempreferences SET
+ variable = 'OpacCoce',
+ explanation = 'If on, enables cover retrieval from the configured Coce server in the OPAC'
+ WHERE
+ variable = 'Coce'
+ });
+
+ SetVersion( $DBversion );
+ print "Upgrade to $DBversion done (Bug 18421: Add Coce image cache to the Intranet)\n";
+}
+
+$DBversion = '19.06.00.036';
+if( CheckVersion( $DBversion ) ) {
+
+ $dbh->do(q{
+ INSERT IGNORE INTO systempreferences ( `variable`, `value`, `options`, `explanation`, `type`) VALUES
+ ('QueryRegexEscapeOptions', 'escape', 'dont_escape|escape|unescape_escaped', 'Escape option for regexps delimiters in Elasicsearch queries.', 'Choice')
+ });
+
+ SetVersion( $DBversion );
+ print "Upgrade to $DBversion done (Bug 20334: Add elasticsearch escape options preference)\n";
+}
+
+$DBversion = '19.06.00.037';
+if( CheckVersion( $DBversion ) ) {
+ $dbh->do(q{
+ INSERT IGNORE INTO systempreferences ( `variable`, `value`, `options`, `explanation`, `type` )
+ VALUES ('PayPalReturnURL','BaseURL','BaseURL|OPACAlias','Specify whether PayPal will return to the url specified in the OPACBaseURL option or to the OPAC\'s alias url.','Choice')
+ });
+
+ SetVersion( $DBversion );
+ print "Upgrade to $DBversion done (Bug 21701: PayPal return URL option)\n";
+}
+
+$DBversion = '19.06.00.038';
+if( CheckVersion( $DBversion ) ) {
+ $dbh->do( "UPDATE systempreferences SET variable='PatronAutoComplete' WHERE variable='CircAutocompl' LIMIT 1" );
+ SetVersion( $DBversion );
+ print "Upgrade to $DBversion done (Bug 23697: Rename CircAutocompl system preference to PatronAutoComplete)\n";
+}
+
+$DBversion = '19.06.00.039';
+if( CheckVersion( $DBversion ) ) {
+ $dbh->do(q|
+ INSERT IGNORE INTO keyboard_shortcuts (shortcut_name, shortcut_keys) VALUES
+ ("copy_line","Ctrl-C"),
+ ("copy_subfield","Shift-Ctrl-C"),
+ ("paste_line","Ctrl-P"),
+ ("insert_line","Ctrl-I")
+ ;
+ |);
+ SetVersion( $DBversion );
+ print "Upgrade to $DBversion done (Bug 17179: Add additional keyboard_shortcuts)\n";
+}
+
+$DBversion = '19.06.00.040';
+if( CheckVersion( $DBversion ) ) {
+ $dbh->do(q|
+ INSERT IGNORE INTO systempreferences
+ (variable,value,explanation,options,type)
+ VALUES
+ ('RoundFinesAtPayment','0','If enabled any fines with fractions of a cent will be rounded to the nearest cent when payments are collected. e.g. 1.004 will be paid off by a 1.00 payment','0','YesNo')
+ |);
+
+ SetVersion( $DBversion );
+ print "Upgrade to $DBversion done (Bug 17140: Add pref to allow rounding fines at payment)\n";
+}
+
+$DBversion = '19.06.00.041';
+if( CheckVersion( $DBversion ) ) {
+ my ($socialnetworks) = $dbh->selectrow_array( q|
+ SELECT value FROM systempreferences WHERE variable='socialnetworks';
+ |);
+ if( $socialnetworks ){
+ # If the socialnetworks preference is enabled, enable all social networks
+ $dbh->do("UPDATE systempreferences SET value = 'email,facebook,linkedin,twitter', explanation = 'email|facebook|linkedin|twitter', type = 'multiple' WHERE variable = 'SocialNetworks'");
+ } else {
+ $dbh->do("UPDATE systempreferences SET value = '', explanation = 'email|facebook|linkedin|twitter', type = 'multiple' WHERE variable = 'SocialNetworks'");
+ }
+ SetVersion ($DBversion);
+ print "Upgrade to $DBversion done (Bug 22880: Allow granular control of socialnetworks preference)\n";
+}
+
+$DBversion = '19.06.00.042';
+if( CheckVersion( $DBversion ) ) {
+ $dbh->do(q{
+ INSERT IGNORE INTO systempreferences
+ ( variable, value, options, explanation, type )
+ VALUES
+ ('CustomCoverImages','0',NULL,'If enabled, the custom cover images will be displayed in the staff client. CustomCoverImagesURL must be defined.','YesNo'),
+ ('OPACCustomCoverImages','0',NULL,'If enabled, the custom cover images will be displayed at the OPAC. CustomCoverImagesURL must be defined.','YesNo'),
+ ('CustomCoverImagesURL','',NULL,'Define an URL serving book cover images, using the following patterns: {issn}, {isbn}, {normalized_isbn}, {field$subfield} (use it with CustomCoverImages and/or OPACCustomCoverImages)','free')
+ });
+
+ SetVersion( $DBversion );
+ print "Upgrade to $DBversion done (Bug 22445: Add new pref *CustomCoverImages*)\n";
+}
+
+$DBversion = '19.06.00.043';
+if ( CheckVersion($DBversion) ) {
+
+ # Adding account_debit_types
+ $dbh->do(
+ qq{
+ CREATE TABLE IF NOT EXISTS account_debit_types (
+ code varchar(80) NOT NULL,
+ description varchar(200) NULL,
+ can_be_added_manually tinyint(4) NOT NULL DEFAULT 1,
+ default_amount decimal(28, 6) NULL,
+ is_system tinyint(1) NOT NULL DEFAULT 0,
+ archived tinyint(1) NOT NULL DEFAULT 0,
+ PRIMARY KEY (code)
+ ) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_unicode_ci
+ }
+ );
+
+ # Adding account_debit_types_branches
+ $dbh->do(
+ qq{
+ CREATE TABLE IF NOT EXISTS account_debit_types_branches (
+ debit_type_code VARCHAR(80),
+ branchcode VARCHAR(10),
+ FOREIGN KEY (debit_type_code) REFERENCES account_debit_types(code) ON DELETE CASCADE,
+ FOREIGN KEY (branchcode) REFERENCES branches(branchcode) ON DELETE CASCADE
+ ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci
+ }
+ );
+
+ # Populating account_debit_types
+ $dbh->do(
+ qq{
+ INSERT IGNORE INTO account_debit_types (
+ code,
+ description,
+ can_be_added_manually,
+ default_amount,
+ is_system
+ )
+ VALUES
+ ('ACCOUNT', 'Account creation fee', 0, NULL, 1),
+ ('ACCOUNT_RENEW', 'Account renewal fee', 0, NULL, 1),
+ ('RESERVE_EXPIRED', 'Hold waiting too long', 0, NULL, 1),
+ ('LOST', 'Lost item', 1, NULL, 1),
+ ('MANUAL', 'Manual fee', 1, NULL, 0),
+ ('NEW_CARD', 'New card fee', 1, NULL, 1),
+ ('OVERDUE', 'Overdue fine', 0, NULL, 1),
+ ('PROCESSING', 'Lost item processing fee', 0, NULL, 1),
+ ('RENT', 'Rental fee', 0, NULL, 1),
+ ('RENT_DAILY', 'Daily rental fee', 0, NULL, 1),
+ ('RENT_RENEW', 'Renewal of rental item', 0, NULL, 1),
+ ('RENT_DAILY_RENEW', 'Rewewal of daily rental item', 0, NULL, 1),
+ ('RESERVE', 'Hold fee', 0, NULL, 1)
+ }
+ );
+
+ # Update accountype 'Res' to 'RESERVE'
+ $dbh->do(
+ qq{
+ UPDATE accountlines SET accounttype = 'RESERVE' WHERE accounttype = 'Res'
+ }
+ );
+
+ # Update accountype 'PF' to 'PROCESSING'
+ $dbh->do(
+ qq{
+ UPDATE accountlines SET accounttype = 'PROCESSING' WHERE accounttype = 'PF'
+ }
+ );
+
+ # Update accountype 'HE' to 'RESERVE_EXPIRED'
+ $dbh->do(
+ qq{
+ UPDATE accountlines SET accounttype = 'RESERVE_EXPIRED' WHERE accounttype = 'HE'
+ }
+ );
+
+ # Update accountype 'N' to 'NEW_CARD'
+ $dbh->do(
+ qq{
+ UPDATE accountlines SET accounttype = 'NEW_CARD' WHERE accounttype = 'N'
+ }
+ );
+
+ # Update accountype 'M' to 'MANUAL'
+ $dbh->do(
+ qq{
+ UPDATE accountlines SET accounttype = 'MANUAL' WHERE accounttype = 'M'
+ }
+ );
+
+ # Catch 'F' cases introduced since bug 22521
+ $dbh->do(qq{
+ UPDATE
+ accountlines
+ SET
+ accounttype = 'OVERDUE',
+ status = 'RETURNED'
+ WHERE
+ accounttype = 'F';
+ });
+
+ # Moving MANUAL_INV to account_debit_types
+ $dbh->do(
+ qq{
+ INSERT IGNORE INTO account_debit_types (
+ code,
+ default_amount,
+ description,
+ can_be_added_manually,
+ is_system
+ )
+ SELECT
+ authorised_value,
+ lib,
+ authorised_value,
+ 1,
+ 0
+ FROM
+ authorised_values
+ WHERE
+ category = 'MANUAL_INV'
+ }
+ );
+
+ # Update uncaught partial accounttypes left behind after bugs 23539 and 22521
+ my $sth = $dbh->prepare( "SELECT code, SUBSTR(code, 1,5) AS subcode FROM account_debit_types" );
+ $sth->execute();
+ while ( my $row = $sth->fetchrow_hashref ) {
+ $dbh->do(
+ qq{
+ UPDATE accountlines SET accounttype = ? WHERE accounttype = ?
+ },
+ {},
+ (
+ $row->{code},
+ $row->{subcode}
+ )
+ );
+ }
+
+ # Add any unexpected accounttype codes to debit_types as appropriate
+ $dbh->do(
+ qq{
+ INSERT IGNORE INTO account_debit_types (
+ code,
+ description,
+ can_be_added_manually,
+ default_amount,
+ is_system
+ )
+ SELECT
+ DISTINCT(accounttype),
+ "Unexpected type found during upgrade",
+ 1,
+ NULL,
+ 0
+ FROM
+ accountlines
+ WHERE
+ amount >= 0
+ }
+ );
+
+ # Adding debit_type_code to accountlines
+ unless ( column_exists('accountlines', 'debit_type_code') ) {
+ $dbh->do(
+ qq{
+ ALTER TABLE accountlines
+ ADD
+ debit_type_code varchar(80) DEFAULT NULL
+ AFTER
+ accounttype
+ }
+ );
+ }
+
+ # Linking debit_type_code in accountlines to code in account_debit_types
+ unless ( foreign_key_exists( 'accountlines', 'accountlines_ibfk_debit_type' ) ) {
+ $dbh->do(
+ qq{
+ ALTER TABLE accountlines ADD CONSTRAINT `accountlines_ibfk_debit_type` FOREIGN KEY (`debit_type_code`) REFERENCES `account_debit_types` (`code`) ON DELETE RESTRICT ON UPDATE CASCADE
+ }
+ );
+ }
+
+ # Populating debit_type_code
+ $dbh->do(
+ qq{
+ UPDATE accountlines SET debit_type_code = accounttype, accounttype = NULL WHERE accounttype IN (SELECT code from account_debit_types)
+ }
+ );
+
+ # Remove MANUAL_INV
+ $dbh->do(
+ qq{
+ DELETE FROM authorised_values WHERE category = 'MANUAL_INV'
+ }
+ );
+ $dbh->do(
+ qq{
+ DELETE FROM authorised_value_categories WHERE category_name = 'MANUAL_INV'
+ }
+ );
+
+ # Add new permission
+ $dbh->do(
+ q{
+ INSERT IGNORE INTO permissions (module_bit, code, description)
+ VALUES
+ (
+ 3,
+ 'manage_accounts',
+ 'Manage Account Debit and Credit Types'
+ )
+ }
+ );
+
+ SetVersion($DBversion);
+ print "Upgrade to $DBversion done (Bug 23049: Add account debit_types)\n";
+}
+
+$DBversion = '19.06.00.044';
+if ( CheckVersion($DBversion) ) {
+
+ # Adding account_credit_types
+ $dbh->do(
+ qq{
+ CREATE TABLE IF NOT EXISTS account_credit_types (
+ code varchar(80) NOT NULL,
+ description varchar(200) NULL,
+ can_be_added_manually tinyint(4) NOT NULL DEFAULT 1,
+ is_system tinyint(1) NOT NULL DEFAULT 0,
+ PRIMARY KEY (code)
+ ) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_unicode_ci
+ }
+ );
+
+ # Adding account_credit_types_branches
+ $dbh->do(
+ qq{
+ CREATE TABLE IF NOT EXISTS account_credit_types_branches (
+ credit_type_code VARCHAR(80),
+ branchcode VARCHAR(10),
+ FOREIGN KEY (credit_type_code) REFERENCES account_credit_types(code) ON DELETE CASCADE,
+ FOREIGN KEY (branchcode) REFERENCES branches(branchcode) ON DELETE CASCADE
+ ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci
+ }
+ );
+
+ # Populating account_credit_types
+ $dbh->do(
+ qq{
+ INSERT IGNORE INTO account_credit_types (
+ code,
+ description,
+ can_be_added_manually,
+ is_system
+ )
+ VALUES
+ ('PAYMENT', 'Payment', 0, 1),
+ ('WRITEOFF', 'Writeoff', 0, 1),
+ ('FORGIVEN', 'Forgiven', 1, 1),
+ ('CREDIT', 'Credit', 1, 1),
+ ('LOST_RETURN', 'Lost item fee refund', 0, 1)
+ }
+ );
+
+ # Adding credit_type_code to accountlines
+ unless ( column_exists('accountlines', 'credit_type_code') ) {
+ $dbh->do(
+ qq{
+ ALTER TABLE accountlines
+ ADD
+ credit_type_code varchar(80) DEFAULT NULL
+ AFTER
+ accounttype
+ }
+ );
+ }
+
+ # Linking credit_type_code in accountlines to code in account_credit_types
+ unless ( foreign_key_exists( 'accountlines', 'accountlines_ibfk_credit_type' ) ) {
+ $dbh->do(
+ qq{
+ ALTER TABLE accountlines
+ ADD CONSTRAINT
+ `accountlines_ibfk_credit_type`
+ FOREIGN KEY (`credit_type_code`) REFERENCES `account_credit_types` (`code`)
+ ON DELETE RESTRICT
+ ON UPDATE CASCADE
+ }
+ );
+ }
+
+ # Update accountype 'C' to 'CREDIT'
+ $dbh->do(
+ qq{
+ UPDATE accountlines SET accounttype = 'CREDIT' WHERE accounttype = 'C' OR accounttype = 'CR'
+ }
+ );
+
+ # Update accountype 'FOR' to 'FORGIVEN'
+ $dbh->do(
+ qq{
+ UPDATE accountlines SET accounttype = 'FORGIVEN' WHERE accounttype = 'FOR' OR accounttype = 'FORW'
+ }
+ );
+
+ # Update accountype 'Pay' to 'PAYMENT'
+ $dbh->do(
+ qq{
+ UPDATE accountlines SET accounttype = 'PAYMENT' WHERE accounttype = 'Pay' OR accounttype = 'PAY'
+ }
+ );
+
+ # Update accountype 'W' to 'WRITEOFF'
+ $dbh->do(
+ qq{
+ UPDATE accountlines SET accounttype = 'WRITEOFF' WHERE accounttype = 'W' OR accounttype = 'WO'
+ }
+ );
+
+ # Add any unexpected accounttype codes to credit_types as appropriate
+ $dbh->do(
+ qq{
+ INSERT IGNORE INTO account_credit_types (
+ code,
+ description,
+ can_be_added_manually,
+ is_system
+ )
+ SELECT
+ DISTINCT(accounttype),
+ "Unexpected type found during upgrade",
+ 1,
+ 0
+ FROM
+ accountlines
+ WHERE
+ amount < 0
+ }
+ );
+
+ # Populating credit_type_code
+ $dbh->do(
+ qq{
+ UPDATE
+ accountlines
+ SET
+ credit_type_code = accounttype, accounttype = NULL
+ WHERE accounttype IN (SELECT code from account_credit_types)
+ }
+ );
+
+ # Drop accounttype field
+ $dbh->do(
+ qq{
+ ALTER TABLE accountlines
+ DROP COLUMN `accounttype`
+ }
+ );
+
+ SetVersion($DBversion);
+ print "Upgrade to $DBversion done (Bug 23805: Add account credit_types)\n";
+}
+
+$DBversion = '19.06.00.045';
+if( CheckVersion( $DBversion ) ) {
+ $dbh->do( "UPDATE systempreferences SET value = '2' WHERE value = '0' AND variable = 'UsageStats'" );
+
+ SetVersion( $DBversion );
+ print "Upgrade to $DBversion done (Bug 23866: Set HEA syspref to prompt for review)\n";
+}
+
+$DBversion = '19.06.00.046';
+if( CheckVersion( $DBversion ) ) {
+ $dbh->do(qq{
+ UPDATE systempreferences
+ SET
+ options = "Calendar|Days|Datedue|Dayweek",
+ explanation = "Choose the method for calculating due date: select Calendar, Datedue or Dayweek to use the holidays module, and Days to ignore the holidays module"
+ WHERE
+ variable = "useDaysMode"
+ });
+
+ # Always end with this (adjust the bug info)
+ SetVersion( $DBversion );
+ print "Upgrade to $DBversion done (Bug 15260: Option for extended loan with useDaysMode)\n";
+}
+
+$DBversion = '19.06.00.047';
+if ( CheckVersion($DBversion) ) {
+ if ( !TableExists('return_claims') ) {
+ $dbh->do(
+ q{
+ CREATE TABLE return_claims (
+ id int(11) auto_increment, -- Unique ID of the return claim
+ itemnumber int(11) NOT NULL, -- ID of the item
+ issue_id int(11) NULL DEFAULT NULL, -- ID of the checkout that triggered the claim
+ borrowernumber int(11) NOT NULL, -- ID of the patron
+ notes MEDIUMTEXT DEFAULT NULL, -- Notes about the claim
+ created_on TIMESTAMP NULL, -- Time and date the claim was created
+ created_by int(11) NULL DEFAULT NULL, -- ID of the staff member that registered the claim
+ updated_on TIMESTAMP NULL ON UPDATE CURRENT_TIMESTAMP, -- Time and date of the latest change on the claim (notes)
+ updated_by int(11) NULL DEFAULT NULL, -- ID of the staff member that updated the claim
+ resolution varchar(80) NULL DEFAULT NULL, -- Resolution code (RETURN_CLAIM_RESOLUTION AVs)
+ resolved_on TIMESTAMP NULL DEFAULT NULL, -- Time and date the claim was resolved
+ resolved_by int(11) NULL DEFAULT NULL, -- ID of the staff member that resolved the claim
+ PRIMARY KEY (`id`),
+ KEY `itemnumber` (`itemnumber`),
+ CONSTRAINT UNIQUE `issue_id` ( issue_id ),
+ CONSTRAINT `issue_id` FOREIGN KEY (`issue_id`) REFERENCES `issues` (`issue_id`) ON DELETE SET NULL ON UPDATE CASCADE,
+ CONSTRAINT `rc_items_ibfk` FOREIGN KEY (`itemnumber`) REFERENCES `items` (`itemnumber`) ON DELETE CASCADE ON UPDATE CASCADE,
+ CONSTRAINT `rc_borrowers_ibfk` FOREIGN KEY (`borrowernumber`) REFERENCES `borrowers` (`borrowernumber`) ON DELETE CASCADE ON UPDATE CASCADE,
+ CONSTRAINT `rc_created_by_ibfk` FOREIGN KEY (`created_by`) REFERENCES `borrowers` (`borrowernumber`) ON DELETE SET NULL ON UPDATE CASCADE,
+ CONSTRAINT `rc_updated_by_ibfk` FOREIGN KEY (`updated_by`) REFERENCES `borrowers` (`borrowernumber`) ON DELETE SET NULL ON UPDATE CASCADE,
+ CONSTRAINT `rc_resolved_by_ibfk` FOREIGN KEY (`resolved_by`) REFERENCES `borrowers` (`borrowernumber`) ON DELETE SET NULL ON UPDATE CASCADE
+ ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
+ }
+ );
+ }
+
+ $dbh->do(
+ q{
+ INSERT IGNORE INTO systempreferences ( `variable`, `value`, `options`, `explanation`, `type` ) VALUES
+ ('ClaimReturnedChargeFee', 'ask', 'ask|charge|no_charge', 'Controls whether or not a lost item fee is charged for return claims', 'Choice'),
+ ('ClaimReturnedLostValue', '', '', 'Sets the LOST AV value that represents "Claims returned" as a lost value', 'Free'),
+ ('ClaimReturnedWarningThreshold', '', '', 'Sets the number of return claims past which the librarian will be warned the patron has many return claims', 'Integer');
+ }
+ );
+
+ $dbh->do(
+ q{
+ INSERT IGNORE INTO authorised_value_categories ( category_name ) VALUES
+ ('RETURN_CLAIM_RESOLUTION');
+ }
+ );
+
+ $dbh->do(
+ q{
+ INSERT IGNORE INTO `authorised_values` ( category, authorised_value, lib )
+ VALUES
+ ('RETURN_CLAIM_RESOLUTION', 'RET_BY_PATRON', 'Returned by patron'),
+ ('RETURN_CLAIM_RESOLUTION', 'FOUND_IN_LIB', 'Found in library');
+ }
+ );
+
+ SetVersion($DBversion);
+ print
+"Upgrade to $DBversion done (Bug 14697: Extend and enhance 'Claims returned' lost status)\n";
+}
+
+$DBversion = '19.06.00.048';
+if( CheckVersion( $DBversion ) ) {
+ # you can use $dbh here like:
+ $dbh->do( qq{
+ INSERT IGNORE INTO systempreferences ( `variable`, `value`, `options`, `explanation`, `type` )
+ VALUES ('OPACShowMusicalInscripts','0','','Display musical inscripts on the OPAC record details page when available.','YesNo'),
+ ('OPACPlayMusicalInscripts','0','','If displayed musical inscripts, play midi conversion on the OPAC record details page.','YesNo')
+ } );
+
+ SetVersion( $DBversion );
+ print "Upgrade to $DBversion done (Bug 22581: add new OPACShowMusicalInscripts and OPACPlayMusicalInscripts system preferences)\n";
+}
+
+$DBversion = '19.06.00.049';
+if( CheckVersion( $DBversion ) ) {
+
+ $dbh->do(q{
+ INSERT IGNORE INTO systempreferences (variable,value,options,explanation,type)
+ SELECT
+ 'SuspensionsCalendar',
+ IF( value='noFinesWhenClosed', 'noSuspensionsWhenClosed', 'ignoreCalendar'),
+ 'ignoreCalendar|noSuspensionsWhenClosed',
+ 'Specify whether to use the Calendar in calculating suspensions',
+ 'Choice'
+ FROM systempreferences
+ WHERE variable='finesCalendar';
+ });
+
+ SetVersion( $DBversion );
+ print "Upgrade to $DBversion done (Bug 13958: Add a SuspensionsCalendar syspref)\n";
+}
+
+$DBversion = '19.06.00.050';
+if( CheckVersion( $DBversion ) ) {
+ $dbh->do( q{
+ INSERT IGNORE INTO systempreferences (variable,value,options,explanation,type)
+ VALUES ('OPACFineNoRenewalsIncludeCredits','1',NULL,'If enabled the value specified in OPACFineNoRenewals should include any unapplied account credits in the calculation','YesNo')
+ });
+
+ SetVersion( $DBversion );
+ print "Upgrade to $DBversion done (Bug 23293: Add 'OPACFineNoRenewalsIncludeCredits' system preference)\n";
+}
+
+$DBversion = '19.11.00.000';
+if( CheckVersion( $DBversion ) ) {
+ SetVersion( $DBversion );
+ print "Upgrade to $DBversion done (19.11.00 release)\n";
+}
+
+$DBversion = '19.12.00.000';
+if( CheckVersion( $DBversion ) ) {
+ SetVersion( $DBversion );
+ print "Upgrade to $DBversion done (Dobbie is a free elf...)\n";
+}
+
+$DBversion = '19.12.00.001';
+if( CheckVersion( $DBversion ) ) {
+ $dbh->do( "UPDATE marc_subfield_structure SET kohafield = NULL WHERE kohafield = 'bibliosubject.subject';" );
+ SetVersion( $DBversion );
+ print "Upgrade to $DBversion done (Bug 17831 - Remove non-existing bibliosubject.subject from frameworks)\n";
+}
+
+$DBversion = '19.12.00.002';
+if( CheckVersion( $DBversion ) ) {
+ $dbh->do(q{
+ UPDATE systempreferences SET
+ variable = 'AllowItemsOnHoldCheckoutSIP',
+ explanation = 'Do not generate RESERVE_WAITING and RESERVED warning when checking out items reserved to someone else via SIP. This allows self checkouts for those items.'
+ WHERE variable = 'AllowItemsOnHoldCheckout'
+ });
+
+ SetVersion( $DBversion );
+ print "Upgrade to $DBversion done (Bug 23233 - Rename AllowItemsOnHoldCheckout syspref)\n";
+}
+
+$DBversion = '19.12.00.003';
+if( CheckVersion( $DBversion ) ) {
+
+ if( !column_exists( 'library_groups', 'ft_local_hold_group' ) ) {
+ $dbh->do( "ALTER TABLE library_groups ADD COLUMN ft_local_hold_group tinyint(1) NOT NULL DEFAULT 0 AFTER ft_search_groups_staff" );
+ }
+
+ # Always end with this (adjust the bug info)
+ SetVersion( $DBversion );
+ print "Upgrade to $DBversion done (Bug 22284 - Add ft_local_hold_group column to library_groups)\n";
+}
+
+# SEE bug 13068
+# if there is anything in the atomicupdate, read and execute it.