4 # This script checks for required updates to the database.
6 # Parts copyright Catalyst IT 2011
8 # Part of the Koha Library Software www.koha-community.org
9 # Koha is free software; you can redistribute it and/or modify it
10 # under the terms of the GNU General Public License as published by
11 # the Free Software Foundation; either version 3 of the License, or
12 # (at your option) any later version.
14 # Koha is distributed in the hope that it will be useful, but
15 # WITHOUT ANY WARRANTY; without even the implied warranty of
16 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 # GNU General Public License for more details.
19 # You should have received a copy of the GNU General Public License
20 # along with Koha; if not, see <http://www.gnu.org/licenses>.
24 # - Would also be a good idea to offer to do a backup at this time...
26 # NOTE: If you do something more than once in here, make it table driven.
28 # NOTE: Please keep the version in kohaversion.pl up-to-date!
37 use Encode qw( encode_utf8 );
43 use Koha::DateUtils qw( dt_from_string output_pref );
46 use MARC::File::XML ( BinaryEncoding => 'utf8' );
48 use File::Path qw[remove_tree]; # perl core module
50 # FIXME - The user might be installing a new database, so can't rely
51 # on /etc/koha.conf anyway.
60 my $schema = Koha::Database->new()->schema();
62 my ( $silent, $force );
67 my $dbh = C4::Context->dbh;
68 $|=1; # flushes output
70 local $dbh->{RaiseError} = 0;
72 # Record the version we are coming from
74 my $original_version = C4::Context->preference("Version");
76 # Deal with virtualshelves
77 my $DBversion = "3.00.00.001";
78 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
79 # update virtualshelves table to
81 $dbh->do("ALTER TABLE `bookshelf` RENAME `virtualshelves`");
82 $dbh->do("ALTER TABLE `shelfcontents` RENAME `virtualshelfcontents`");
83 $dbh->do("ALTER TABLE `virtualshelfcontents` ADD `biblionumber` INT( 11 ) NOT NULL default '0' AFTER shelfnumber");
84 $dbh->do("UPDATE `virtualshelfcontents` SET biblionumber=(SELECT biblionumber FROM items WHERE items.itemnumber=virtualshelfcontents.itemnumber)");
85 # drop all foreign keys : otherwise, we can't drop itemnumber field.
86 DropAllForeignKeys('virtualshelfcontents');
87 $dbh->do("ALTER TABLE `virtualshelfcontents` ADD KEY biblionumber (biblionumber)");
88 # create the new foreign keys (on biblionumber)
89 $dbh->do("ALTER TABLE `virtualshelfcontents` ADD CONSTRAINT `virtualshelfcontents_ibfk_1` FOREIGN KEY (`shelfnumber`) REFERENCES `virtualshelves` (`shelfnumber`) ON DELETE CASCADE ON UPDATE CASCADE");
90 # re-create the foreign key on virtualshelf
91 $dbh->do("ALTER TABLE `virtualshelfcontents` ADD CONSTRAINT `shelfcontents_ibfk_2` FOREIGN KEY (`biblionumber`) REFERENCES `biblio` (`biblionumber`) ON DELETE CASCADE ON UPDATE CASCADE");
92 $dbh->do("ALTER TABLE `virtualshelfcontents` DROP `itemnumber`");
93 print "Upgrade to $DBversion done (virtualshelves)\n";
94 SetVersion ($DBversion);
98 $DBversion = "3.00.00.002";
99 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
100 $dbh->do("DROP TABLE sessions");
101 $dbh->do("CREATE TABLE `sessions` (
102 `id` varchar(32) NOT NULL,
103 `a_session` text NOT NULL,
104 UNIQUE KEY `id` (`id`)
105 ) ENGINE=InnoDB DEFAULT CHARSET=utf8;");
106 print "Upgrade to $DBversion done (sessions uses CGI::session, new table structure for sessions)\n";
107 SetVersion ($DBversion);
111 $DBversion = "3.00.00.003";
112 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
113 if (C4::Context->preference("opaclanguages") eq "fr") {
114 $dbh->do("INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('ReservesNeedReturns','0','Si ce paramètre est mis à 1, une réservation posée sur un exemplaire présent sur le site devra être passée en retour pour être disponible. Sinon, elle sera automatiquement disponible, Koha considère que le bibliothécaire place la réservation en ayant le document en mains','','YesNo')");
116 $dbh->do("INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('ReservesNeedReturns','0','If set, a reserve done on an item available in this branch need a check-in, otherwise, a reserve on a specific item, that is on the branch & available is considered as available','','YesNo')");
118 print "Upgrade to $DBversion done (adding ReservesNeedReturns systempref, in circulation)\n";
119 SetVersion ($DBversion);
123 $DBversion = "3.00.00.004";
124 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
125 $dbh->do("INSERT INTO `systempreferences` VALUES ('DebugLevel','2','set the level of error info sent to the browser. 0=none, 1=some, 2=most','0|1|2','Choice')");
126 print "Upgrade to $DBversion done (adding DebugLevel systempref, in 'Admin' tab)\n";
127 SetVersion ($DBversion);
130 $DBversion = "3.00.00.005";
131 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
132 $dbh->do("CREATE TABLE `tags` (
133 `entry` varchar(255) NOT NULL default '',
134 `weight` bigint(20) NOT NULL default 0,
135 PRIMARY KEY (`entry`)
136 ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
138 $dbh->do("CREATE TABLE `nozebra` (
139 `server` varchar(20) NOT NULL,
140 `indexname` varchar(40) NOT NULL,
141 `value` varchar(250) NOT NULL,
142 `biblionumbers` longtext NOT NULL,
143 KEY `indexname` (`server`,`indexname`),
144 KEY `value` (`server`,`value`))
145 ENGINE=InnoDB DEFAULT CHARSET=utf8;
147 print "Upgrade to $DBversion done (adding tags and nozebra tables )\n";
148 SetVersion ($DBversion);
151 $DBversion = "3.00.00.006";
152 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
153 sanitize_zero_date('issues', 'issuedate');
154 print "Upgrade to $DBversion done (filled issues.issuedate with timestamp)\n";
155 SetVersion ($DBversion);
158 $DBversion = "3.00.00.007";
159 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
160 $dbh->do("INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES ('SessionStorage','mysql','Use mysql or a temporary file for storing session data','mysql|tmp','Choice')");
161 print "Upgrade to $DBversion done (set SessionStorage variable)\n";
162 SetVersion ($DBversion);
165 $DBversion = "3.00.00.008";
166 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
167 $dbh->do("ALTER TABLE `biblio` ADD `datecreated` DATE NOT NULL AFTER `timestamp` ;");
168 $dbh->do("UPDATE biblio SET datecreated=timestamp");
169 print "Upgrade to $DBversion done (biblio creation date)\n";
170 SetVersion ($DBversion);
173 $DBversion = "3.00.00.009";
174 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
176 # Create backups of call number columns
177 # in case default migration needs to be customized
179 # UPGRADE NOTE: temp_upg_biblioitems_call_num should be dropped
180 # after call numbers have been transformed to the new structure
182 # Not bothering to do the same with deletedbiblioitems -- assume
183 # default is good enough.
184 $dbh->do("CREATE TABLE `temp_upg_biblioitems_call_num` AS
185 SELECT `biblioitemnumber`, `biblionumber`,
186 `classification`, `dewey`, `subclass`,
188 FROM `biblioitems`");
190 # biblioitems changes
191 $dbh->do("ALTER TABLE `biblioitems` CHANGE COLUMN `volumeddesc` `volumedesc` TEXT,
192 ADD `cn_source` VARCHAR(10) DEFAULT NULL AFTER `ccode`,
193 ADD `cn_class` VARCHAR(30) DEFAULT NULL AFTER `cn_source`,
194 ADD `cn_item` VARCHAR(10) DEFAULT NULL AFTER `cn_class`,
195 ADD `cn_suffix` VARCHAR(10) DEFAULT NULL AFTER `cn_item`,
196 ADD `cn_sort` VARCHAR(30) DEFAULT NULL AFTER `cn_suffix`,
197 ADD `totalissues` INT(10) AFTER `cn_sort`");
199 # default mapping of call number columns:
200 # cn_class = concatentation of classification + dewey,
201 # trimmed to fit -- assumes that most users do not
202 # populate both classification and dewey in a single record
204 # cn_source = left null
207 # After upgrade, cn_sort will have to be set based on whatever
208 # default call number scheme user sets as a preference. Misc
209 # script will be added at some point to do that.
211 $dbh->do("UPDATE `biblioitems`
212 SET cn_class = SUBSTR(TRIM(CONCAT_WS(' ', `classification`, `dewey`)), 1, 30),
217 # Now drop the old call number columns
218 $dbh->do("ALTER TABLE `biblioitems` DROP COLUMN `classification`,
220 DROP COLUMN `subclass`,
221 DROP COLUMN `lcsort`,
222 DROP COLUMN `ccode`");
224 # deletedbiblio changes
225 $dbh->do("ALTER TABLE `deletedbiblio` ALTER COLUMN `frameworkcode` SET DEFAULT '',
227 ADD `datecreated` DATE NOT NULL AFTER `timestamp`");
228 $dbh->do("UPDATE deletedbiblio SET datecreated = timestamp");
230 # deletedbiblioitems changes
231 $dbh->do("ALTER TABLE `deletedbiblioitems`
232 MODIFY `publicationyear` TEXT,
233 CHANGE `volumeddesc` `volumedesc` TEXT,
234 MODIFY `collectiontitle` MEDIUMTEXT DEFAULT NULL AFTER `volumedesc`,
235 MODIFY `collectionissn` TEXT DEFAULT NULL AFTER `collectiontitle`,
236 MODIFY `collectionvolume` MEDIUMTEXT DEFAULT NULL AFTER `collectionissn`,
237 MODIFY `editionstatement` TEXT DEFAULT NULL AFTER `collectionvolume`,
238 MODIFY `editionresponsibility` TEXT DEFAULT NULL AFTER `editionstatement`,
239 MODIFY `place` VARCHAR(255) DEFAULT NULL AFTER `size`,
240 MODIFY `marc` LONGBLOB,
241 ADD `cn_source` VARCHAR(10) DEFAULT NULL AFTER `url`,
242 ADD `cn_class` VARCHAR(30) DEFAULT NULL AFTER `cn_source`,
243 ADD `cn_item` VARCHAR(10) DEFAULT NULL AFTER `cn_class`,
244 ADD `cn_suffix` VARCHAR(10) DEFAULT NULL AFTER `cn_item`,
245 ADD `cn_sort` VARCHAR(30) DEFAULT NULL AFTER `cn_suffix`,
246 ADD `totalissues` INT(10) AFTER `cn_sort`,
247 ADD `marcxml` LONGTEXT NOT NULL AFTER `totalissues`,
248 ADD KEY `isbn` (`isbn`),
249 ADD KEY `publishercode` (`publishercode`)
252 $dbh->do("UPDATE `deletedbiblioitems`
253 SET `cn_class` = SUBSTR(TRIM(CONCAT_WS(' ', `classification`, `dewey`)), 1, 30),
254 `cn_item` = `subclass`,
257 $dbh->do("ALTER TABLE `deletedbiblioitems`
258 DROP COLUMN `classification`,
260 DROP COLUMN `subclass`,
261 DROP COLUMN `lcsort`,
265 # deleteditems changes
266 $dbh->do("ALTER TABLE `deleteditems`
267 MODIFY `barcode` VARCHAR(20) DEFAULT NULL,
268 MODIFY `price` DECIMAL(8,2) DEFAULT NULL,
269 MODIFY `replacementprice` DECIMAL(8,2) DEFAULT NULL,
271 MODIFY `itemcallnumber` VARCHAR(30) DEFAULT NULL AFTER `wthdrawn`,
272 MODIFY `holdingbranch` VARCHAR(10) DEFAULT NULL,
274 MODIFY `timestamp` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP AFTER `paidfor`,
276 ADD `cn_source` VARCHAR(10) DEFAULT NULL AFTER `onloan`,
277 ADD `cn_sort` VARCHAR(30) DEFAULT NULL AFTER `cn_source`,
278 ADD `ccode` VARCHAR(10) DEFAULT NULL AFTER `cn_sort`,
279 ADD `materials` VARCHAR(10) DEFAULT NULL AFTER `ccode`,
280 ADD `uri` VARCHAR(255) DEFAULT NULL AFTER `materials`,
281 MODIFY `marc` LONGBLOB AFTER `uri`,
283 DROP KEY `itembarcodeidx`,
284 DROP KEY `itembinoidx`,
285 DROP KEY `itembibnoidx`,
286 ADD UNIQUE KEY `delitembarcodeidx` (`barcode`),
287 ADD KEY `delitembinoidx` (`biblioitemnumber`),
288 ADD KEY `delitembibnoidx` (`biblionumber`),
289 ADD KEY `delhomebranch` (`homebranch`),
290 ADD KEY `delholdingbranch` (`holdingbranch`)");
291 $dbh->do("UPDATE deleteditems SET `ccode` = `itype`");
292 $dbh->do("ALTER TABLE deleteditems DROP `itype`");
293 $dbh->do("UPDATE `deleteditems` SET `cn_sort` = `itemcallnumber`");
296 $dbh->do("ALTER TABLE `items` ADD `cn_source` VARCHAR(10) DEFAULT NULL AFTER `onloan`,
297 ADD `cn_sort` VARCHAR(30) DEFAULT NULL AFTER `cn_source`,
298 ADD `ccode` VARCHAR(10) DEFAULT NULL AFTER `cn_sort`,
299 ADD `materials` VARCHAR(10) DEFAULT NULL AFTER `ccode`,
300 ADD `uri` VARCHAR(255) DEFAULT NULL AFTER `materials`
302 $dbh->do("ALTER TABLE `items`
303 DROP KEY `itembarcodeidx`,
304 ADD UNIQUE KEY `itembarcodeidx` (`barcode`)");
306 # map items.itype to items.ccode and
307 # set cn_sort to itemcallnumber -- as with biblioitems.cn_sort,
308 # will have to be subsequently updated per user's default
309 # classification scheme
310 $dbh->do("UPDATE `items` SET `cn_sort` = `itemcallnumber`,
313 $dbh->do("ALTER TABLE `items` DROP `cutterextra`,
316 print "Upgrade to $DBversion done (major changes to biblio, biblioitems, items, and deleted* versions of same\n";
317 SetVersion ($DBversion);
320 $DBversion = "3.00.00.010";
321 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
322 $dbh->do("CREATE INDEX `userid` ON borrowers (`userid`) ");
323 print "Upgrade to $DBversion done (userid index added)\n";
324 SetVersion ($DBversion);
327 $DBversion = "3.00.00.011";
328 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
329 $dbh->do("ALTER TABLE `branchcategories` CHANGE `categorycode` `categorycode` varchar(10) ");
330 $dbh->do("ALTER TABLE `branchcategories` CHANGE `categoryname` `categoryname` varchar(32) ");
331 $dbh->do("ALTER TABLE `branchcategories` ADD COLUMN `categorytype` varchar(16) ");
332 $dbh->do("UPDATE `branchcategories` SET `categorytype` = 'properties'");
333 $dbh->do("ALTER TABLE `branchrelations` CHANGE `categorycode` `categorycode` varchar(10) ");
334 print "Upgrade to $DBversion done (added branchcategory type)\n";
335 SetVersion ($DBversion);
338 $DBversion = "3.00.00.012";
339 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
340 $dbh->do("CREATE TABLE `class_sort_rules` (
341 `class_sort_rule` varchar(10) NOT NULL default '',
342 `description` mediumtext,
343 `sort_routine` varchar(30) NOT NULL default '',
344 PRIMARY KEY (`class_sort_rule`),
345 UNIQUE KEY `class_sort_rule_idx` (`class_sort_rule`)
346 ) ENGINE=InnoDB DEFAULT CHARSET=utf8");
347 $dbh->do("CREATE TABLE `class_sources` (
348 `cn_source` varchar(10) NOT NULL default '',
349 `description` mediumtext,
350 `used` tinyint(4) NOT NULL default 0,
351 `class_sort_rule` varchar(10) NOT NULL default '',
352 PRIMARY KEY (`cn_source`),
353 UNIQUE KEY `cn_source_idx` (`cn_source`),
354 KEY `used_idx` (`used`),
355 CONSTRAINT `class_source_ibfk_1` FOREIGN KEY (`class_sort_rule`)
356 REFERENCES `class_sort_rules` (`class_sort_rule`)
357 ) ENGINE=InnoDB DEFAULT CHARSET=utf8");
358 $dbh->do("INSERT INTO `systempreferences` (variable,value,explanation,options,type)
359 VALUES('DefaultClassificationSource','ddc',
360 'Default classification scheme used by the collection. E.g., Dewey, LCC, etc.', NULL,'free')");
361 $dbh->do("INSERT INTO `class_sort_rules` (`class_sort_rule`, `description`, `sort_routine`) VALUES
362 ('dewey', 'Default filing rules for DDC', 'Dewey'),
363 ('lcc', 'Default filing rules for LCC', 'LCC'),
364 ('generic', 'Generic call number filing rules', 'Generic')");
365 $dbh->do("INSERT INTO `class_sources` (`cn_source`, `description`, `used`, `class_sort_rule`) VALUES
366 ('ddc', 'Dewey Decimal Classification', 1, 'dewey'),
367 ('lcc', 'Library of Congress Classification', 1, 'lcc'),
368 ('udc', 'Universal Decimal Classification', 0, 'generic'),
369 ('sudocs', 'SuDoc Classification (U.S. GPO)', 0, 'generic'),
370 ('z', 'Other/Generic Classification Scheme', 0, 'generic')");
371 print "Upgrade to $DBversion done (classification sources added)\n";
372 SetVersion ($DBversion);
375 $DBversion = "3.00.00.013";
376 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
377 $dbh->do("CREATE TABLE `import_batches` (
378 `import_batch_id` int(11) NOT NULL auto_increment,
379 `template_id` int(11) default NULL,
380 `branchcode` varchar(10) default NULL,
381 `num_biblios` int(11) NOT NULL default 0,
382 `num_items` int(11) NOT NULL default 0,
383 `upload_timestamp` timestamp NOT NULL default CURRENT_TIMESTAMP,
384 `overlay_action` enum('replace', 'create_new', 'use_template') NOT NULL default 'create_new',
385 `import_status` enum('staging', 'staged', 'importing', 'imported', 'reverting', 'reverted', 'cleaned') NOT NULL default 'staging',
386 `batch_type` enum('batch', 'z3950') NOT NULL default 'batch',
387 `file_name` varchar(100),
388 `comments` mediumtext,
389 PRIMARY KEY (`import_batch_id`),
390 KEY `branchcode` (`branchcode`)
391 ) ENGINE=InnoDB DEFAULT CHARSET=utf8");
392 $dbh->do("CREATE TABLE `import_records` (
393 `import_record_id` int(11) NOT NULL auto_increment,
394 `import_batch_id` int(11) NOT NULL,
395 `branchcode` varchar(10) default NULL,
396 `record_sequence` int(11) NOT NULL default 0,
397 `upload_timestamp` timestamp NOT NULL default CURRENT_TIMESTAMP,
398 `import_date` DATE default NULL,
399 `marc` longblob NOT NULL,
400 `marcxml` longtext NOT NULL,
401 `marcxml_old` longtext NOT NULL,
402 `record_type` enum('biblio', 'auth', 'holdings') NOT NULL default 'biblio',
403 `overlay_status` enum('no_match', 'auto_match', 'manual_match', 'match_applied') NOT NULL default 'no_match',
404 `status` enum('error', 'staged', 'imported', 'reverted', 'items_reverted') NOT NULL default 'staged',
405 `import_error` mediumtext,
406 `encoding` varchar(40) NOT NULL default '',
407 `z3950random` varchar(40) default NULL,
408 PRIMARY KEY (`import_record_id`),
409 CONSTRAINT `import_records_ifbk_1` FOREIGN KEY (`import_batch_id`)
410 REFERENCES `import_batches` (`import_batch_id`) ON DELETE CASCADE ON UPDATE CASCADE,
411 KEY `branchcode` (`branchcode`),
412 KEY `batch_sequence` (`import_batch_id`, `record_sequence`)
413 ) ENGINE=InnoDB DEFAULT CHARSET=utf8");
414 $dbh->do("CREATE TABLE `import_record_matches` (
415 `import_record_id` int(11) NOT NULL,
416 `candidate_match_id` int(11) NOT NULL,
417 `score` int(11) NOT NULL default 0,
418 CONSTRAINT `import_record_matches_ibfk_1` FOREIGN KEY (`import_record_id`)
419 REFERENCES `import_records` (`import_record_id`) ON DELETE CASCADE ON UPDATE CASCADE,
420 KEY `record_score` (`import_record_id`, `score`)
421 ) ENGINE=InnoDB DEFAULT CHARSET=utf8");
422 $dbh->do("CREATE TABLE `import_biblios` (
423 `import_record_id` int(11) NOT NULL,
424 `matched_biblionumber` int(11) default NULL,
425 `control_number` varchar(25) default NULL,
426 `original_source` varchar(25) default NULL,
427 `title` varchar(128) default NULL,
428 `author` varchar(80) default NULL,
429 `isbn` varchar(14) default NULL,
430 `issn` varchar(9) default NULL,
431 `has_items` tinyint(1) NOT NULL default 0,
432 CONSTRAINT `import_biblios_ibfk_1` FOREIGN KEY (`import_record_id`)
433 REFERENCES `import_records` (`import_record_id`) ON DELETE CASCADE ON UPDATE CASCADE,
434 KEY `matched_biblionumber` (`matched_biblionumber`),
435 KEY `title` (`title`),
437 ) ENGINE=InnoDB DEFAULT CHARSET=utf8");
438 $dbh->do("CREATE TABLE `import_items` (
439 `import_items_id` int(11) NOT NULL auto_increment,
440 `import_record_id` int(11) NOT NULL,
441 `itemnumber` int(11) default NULL,
442 `branchcode` varchar(10) default NULL,
443 `status` enum('error', 'staged', 'imported', 'reverted') NOT NULL default 'staged',
444 `marcxml` longtext NOT NULL,
445 `import_error` mediumtext,
446 PRIMARY KEY (`import_items_id`),
447 CONSTRAINT `import_items_ibfk_1` FOREIGN KEY (`import_record_id`)
448 REFERENCES `import_records` (`import_record_id`) ON DELETE CASCADE ON UPDATE CASCADE,
449 KEY `itemnumber` (`itemnumber`),
450 KEY `branchcode` (`branchcode`)
451 ) ENGINE=InnoDB DEFAULT CHARSET=utf8");
453 $dbh->do("INSERT INTO `import_batches`
454 (`overlay_action`, `import_status`, `batch_type`, `file_name`)
455 SELECT distinct 'create_new', 'staged', 'z3950', `file`
456 FROM `marc_breeding`");
458 $dbh->do("INSERT INTO `import_records`
459 (`import_batch_id`, `import_record_id`, `record_sequence`, `marc`, `record_type`, `status`,
460 `encoding`, `z3950random`, `marcxml`, `marcxml_old`)
461 SELECT `import_batch_id`, `id`, 1, `marc`, 'biblio', 'staged', `encoding`, `z3950random`, '', ''
463 JOIN `import_batches` ON (`file_name` = `file`)");
465 $dbh->do("INSERT INTO `import_biblios`
466 (`import_record_id`, `title`, `author`, `isbn`)
467 SELECT `import_record_id`, `title`, `author`, `isbn`
469 JOIN `import_records` ON (`import_record_id` = `id`)");
471 $dbh->do("UPDATE `import_batches`
472 SET `num_biblios` = (
474 FROM `import_records`
475 WHERE `import_batch_id` = `import_batches`.`import_batch_id`
478 $dbh->do("DROP TABLE `marc_breeding`");
480 print "Upgrade to $DBversion done (import_batches et al. added)\n";
481 SetVersion ($DBversion);
484 $DBversion = "3.00.00.014";
485 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
486 $dbh->do("ALTER TABLE subscription ADD lastbranch VARCHAR(4)");
487 print "Upgrade to $DBversion done (userid index added)\n";
488 SetVersion ($DBversion);
491 $DBversion = "3.00.00.015";
492 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
493 $dbh->do("CREATE TABLE `saved_sql` (
494 `id` int(11) NOT NULL auto_increment,
495 `borrowernumber` int(11) default NULL,
496 `date_created` datetime default NULL,
497 `last_modified` datetime default NULL,
499 `last_run` datetime default NULL,
500 `report_name` varchar(255) default NULL,
501 `type` varchar(255) default NULL,
504 KEY boridx (`borrowernumber`)
505 ) ENGINE=InnoDB DEFAULT CHARSET=utf8;");
506 $dbh->do("CREATE TABLE `saved_reports` (
507 `id` int(11) NOT NULL auto_increment,
508 `report_id` int(11) default NULL,
510 `date_run` datetime default NULL,
512 ) ENGINE=InnoDB DEFAULT CHARSET=utf8;");
513 print "Upgrade to $DBversion done (saved_sql and saved_reports added)\n";
514 SetVersion ($DBversion);
517 $DBversion = "3.00.00.016";
518 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
519 $dbh->do(" CREATE TABLE reports_dictionary (
520 id int(11) NOT NULL auto_increment,
521 name varchar(255) default NULL,
523 date_created datetime default NULL,
524 date_modified datetime default NULL,
526 area int(11) default NULL,
528 ) ENGINE=InnoDB DEFAULT CHARSET=utf8 ");
529 print "Upgrade to $DBversion done (reports_dictionary) added)\n";
530 SetVersion ($DBversion);
533 $DBversion = "3.00.00.017";
534 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
535 $dbh->do("ALTER TABLE action_logs DROP PRIMARY KEY");
536 $dbh->do("ALTER TABLE action_logs ADD KEY timestamp (timestamp,user)");
537 $dbh->do("ALTER TABLE action_logs ADD action_id INT(11) NOT NULL FIRST");
538 $dbh->do("UPDATE action_logs SET action_id = if (\@a, \@a:=\@a+1, \@a:=1)");
539 $dbh->do("ALTER TABLE action_logs MODIFY action_id INT(11) NOT NULL AUTO_INCREMENT PRIMARY KEY");
540 print "Upgrade to $DBversion done (added column to action_logs)\n";
541 SetVersion ($DBversion);
544 $DBversion = "3.00.00.018";
545 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
546 $dbh->do("ALTER TABLE `zebraqueue`
547 ADD `done` INT NOT NULL DEFAULT '0',
548 ADD `time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ;
550 print "Upgrade to $DBversion done (adding timestamp and done columns to zebraque table to improve problem tracking) added)\n";
551 SetVersion ($DBversion);
554 $DBversion = "3.00.00.019";
555 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
556 $dbh->do("ALTER TABLE biblio MODIFY biblionumber INT(11) NOT NULL AUTO_INCREMENT");
557 $dbh->do("ALTER TABLE biblioitems MODIFY biblioitemnumber INT(11) NOT NULL AUTO_INCREMENT");
558 $dbh->do("ALTER TABLE items MODIFY itemnumber INT(11) NOT NULL AUTO_INCREMENT");
559 print "Upgrade to $DBversion done (made bib/item PKs auto_increment)\n";
560 SetVersion ($DBversion);
563 $DBversion = "3.00.00.020";
564 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
565 $dbh->do("ALTER TABLE deleteditems
566 DROP KEY `delitembarcodeidx`,
567 ADD KEY `delitembarcodeidx` (`barcode`)");
568 print "Upgrade to $DBversion done (dropped uniqueness of key on deleteditems.barcode)\n";
569 SetVersion ($DBversion);
572 $DBversion = "3.00.00.021";
573 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
574 $dbh->do("ALTER TABLE items CHANGE homebranch homebranch VARCHAR(10)");
575 $dbh->do("ALTER TABLE deleteditems CHANGE homebranch homebranch VARCHAR(10)");
576 $dbh->do("ALTER TABLE statistics CHANGE branch branch VARCHAR(10)");
577 $dbh->do("ALTER TABLE subscription CHANGE lastbranch lastbranch VARCHAR(10)");
578 print "Upgrade to $DBversion done (extended missed branchcode columns to 10 chars)\n";
579 SetVersion ($DBversion);
582 $DBversion = "3.00.00.022";
583 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
584 $dbh->do("ALTER TABLE items
585 ADD `damaged` tinyint(1) default NULL AFTER notforloan");
586 $dbh->do("ALTER TABLE deleteditems
587 ADD `damaged` tinyint(1) default NULL AFTER notforloan");
588 print "Upgrade to $DBversion done (adding damaged column to items table)\n";
589 SetVersion ($DBversion);
592 $DBversion = "3.00.00.023";
593 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
594 $dbh->do("INSERT INTO `systempreferences` (variable,value,options,explanation,type)
595 VALUES ('yuipath','http://yui.yahooapis.com/2.3.1/build','Insert the path to YUI libraries','','free')");
596 print "Upgrade to $DBversion done (adding new system preference for controlling YUI path)\n";
597 SetVersion ($DBversion);
599 $DBversion = "3.00.00.024";
600 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
601 $dbh->do("ALTER TABLE biblioitems CHANGE itemtype itemtype VARCHAR(10)");
602 print "Upgrade to $DBversion done (changing itemtype to (10))\n";
603 SetVersion ($DBversion);
606 $DBversion = "3.00.00.025";
607 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
608 $dbh->do("ALTER TABLE items ADD COLUMN itype VARCHAR(10)");
609 $dbh->do("ALTER TABLE deleteditems ADD COLUMN itype VARCHAR(10) AFTER uri");
610 if(C4::Context->preference('item-level_itypes')){
611 $dbh->do('update items,biblioitems set items.itype=biblioitems.itemtype where items.biblionumber=biblioitems.biblionumber and itype is null');
613 print "Upgrade to $DBversion done (reintroduce items.itype - fill from itemtype)\n ";
614 SetVersion ($DBversion);
617 $DBversion = "3.00.00.026";
618 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
619 $dbh->do("INSERT INTO `systempreferences` (variable,value,options,explanation,type)
620 VALUES ('HomeOrHoldingBranch','homebranch','homebranch|holdingbranch','With independent branches turned on this decides whether to check the items holdingbranch or homebranch at circulatilon','choice')");
621 print "Upgrade to $DBversion done (adding new system preference for choosing whether homebranch or holdingbranch is checked in circulation)\n";
622 SetVersion ($DBversion);
625 $DBversion = "3.00.00.027";
626 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
627 $dbh->do("CREATE TABLE `marc_matchers` (
628 `matcher_id` int(11) NOT NULL auto_increment,
629 `code` varchar(10) NOT NULL default '',
630 `description` varchar(255) NOT NULL default '',
631 `record_type` varchar(10) NOT NULL default 'biblio',
632 `threshold` int(11) NOT NULL default 0,
633 PRIMARY KEY (`matcher_id`),
635 KEY `record_type` (`record_type`)
636 ) ENGINE=InnoDB DEFAULT CHARSET=utf8");
637 $dbh->do("CREATE TABLE `matchpoints` (
638 `matcher_id` int(11) NOT NULL,
639 `matchpoint_id` int(11) NOT NULL auto_increment,
640 `search_index` varchar(30) NOT NULL default '',
641 `score` int(11) NOT NULL default 0,
642 PRIMARY KEY (`matchpoint_id`),
643 CONSTRAINT `matchpoints_ifbk_1` FOREIGN KEY (`matcher_id`)
644 REFERENCES `marc_matchers` (`matcher_id`) ON DELETE CASCADE ON UPDATE CASCADE
645 ) ENGINE=InnoDB DEFAULT CHARSET=utf8");
646 $dbh->do("CREATE TABLE `matchpoint_components` (
647 `matchpoint_id` int(11) NOT NULL,
648 `matchpoint_component_id` int(11) NOT NULL auto_increment,
649 sequence int(11) NOT NULL default 0,
650 tag varchar(3) NOT NULL default '',
651 subfields varchar(40) NOT NULL default '',
652 offset int(4) NOT NULL default 0,
653 length int(4) NOT NULL default 0,
654 PRIMARY KEY (`matchpoint_component_id`),
655 KEY `by_sequence` (`matchpoint_id`, `sequence`),
656 CONSTRAINT `matchpoint_components_ifbk_1` FOREIGN KEY (`matchpoint_id`)
657 REFERENCES `matchpoints` (`matchpoint_id`) ON DELETE CASCADE ON UPDATE CASCADE
658 ) ENGINE=InnoDB DEFAULT CHARSET=utf8");
659 $dbh->do("CREATE TABLE `matchpoint_component_norms` (
660 `matchpoint_component_id` int(11) NOT NULL,
661 `sequence` int(11) NOT NULL default 0,
662 `norm_routine` varchar(50) NOT NULL default '',
663 KEY `matchpoint_component_norms` (`matchpoint_component_id`, `sequence`),
664 CONSTRAINT `matchpoint_component_norms_ifbk_1` FOREIGN KEY (`matchpoint_component_id`)
665 REFERENCES `matchpoint_components` (`matchpoint_component_id`) ON DELETE CASCADE ON UPDATE CASCADE
666 ) ENGINE=InnoDB DEFAULT CHARSET=utf8");
667 $dbh->do("CREATE TABLE `matcher_matchpoints` (
668 `matcher_id` int(11) NOT NULL,
669 `matchpoint_id` int(11) NOT NULL,
670 CONSTRAINT `matcher_matchpoints_ifbk_1` FOREIGN KEY (`matcher_id`)
671 REFERENCES `marc_matchers` (`matcher_id`) ON DELETE CASCADE ON UPDATE CASCADE,
672 CONSTRAINT `matcher_matchpoints_ifbk_2` FOREIGN KEY (`matchpoint_id`)
673 REFERENCES `matchpoints` (`matchpoint_id`) ON DELETE CASCADE ON UPDATE CASCADE
674 ) ENGINE=InnoDB DEFAULT CHARSET=utf8");
675 $dbh->do("CREATE TABLE `matchchecks` (
676 `matcher_id` int(11) NOT NULL,
677 `matchcheck_id` int(11) NOT NULL auto_increment,
678 `source_matchpoint_id` int(11) NOT NULL,
679 `target_matchpoint_id` int(11) NOT NULL,
680 PRIMARY KEY (`matchcheck_id`),
681 CONSTRAINT `matcher_matchchecks_ifbk_1` FOREIGN KEY (`matcher_id`)
682 REFERENCES `marc_matchers` (`matcher_id`) ON DELETE CASCADE ON UPDATE CASCADE,
683 CONSTRAINT `matcher_matchchecks_ifbk_2` FOREIGN KEY (`source_matchpoint_id`)
684 REFERENCES `matchpoints` (`matchpoint_id`) ON DELETE CASCADE ON UPDATE CASCADE,
685 CONSTRAINT `matcher_matchchecks_ifbk_3` FOREIGN KEY (`target_matchpoint_id`)
686 REFERENCES `matchpoints` (`matchpoint_id`) ON DELETE CASCADE ON UPDATE CASCADE
687 ) ENGINE=InnoDB DEFAULT CHARSET=utf8");
688 print "Upgrade to $DBversion done (added C4::Matcher serialization tables)\n ";
689 SetVersion ($DBversion);
692 $DBversion = "3.00.00.028";
693 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
694 $dbh->do("INSERT INTO `systempreferences` (variable,value,options,explanation,type)
695 VALUES ('canreservefromotherbranches','1','','With Independent branches on, can a user from one library reserve an item from another library','YesNo')");
696 print "Upgrade to $DBversion done (adding new system preference for changing reserve/holds behaviour with independent branches)\n";
697 SetVersion ($DBversion);
701 $DBversion = "3.00.00.029";
702 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
703 $dbh->do("ALTER TABLE `import_batches` ADD `matcher_id` int(11) NULL AFTER `import_batch_id`");
704 print "Upgrade to $DBversion done (adding matcher_id to import_batches)\n";
705 SetVersion ($DBversion);
708 $DBversion = "3.00.00.030";
709 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
711 CREATE TABLE services_throttle (
712 service_type varchar(10) NOT NULL default '',
713 service_count varchar(45) default NULL,
714 PRIMARY KEY (service_type)
715 ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
717 $dbh->do("INSERT INTO `systempreferences` (variable,value,options,explanation,type)
718 VALUES ('FRBRizeEditions',0,'','If ON, Koha will query one or more ISBN web services for associated ISBNs and display an Editions tab on the details pages','YesNo')");
719 $dbh->do("INSERT INTO `systempreferences` (variable,value,options,explanation,type)
720 VALUES ('XISBN',0,'','Use with FRBRizeEditions. If ON, Koha will use the OCLC xISBN web service in the Editions tab on the detail pages. See: http://www.worldcat.org/affiliate/webservices/xisbn/app.jsp','YesNo')");
721 $dbh->do("INSERT INTO `systempreferences` (variable,value,options,explanation,type)
722 VALUES ('OCLCAffiliateID','','','Use with FRBRizeEditions and XISBN. You can sign up for an AffiliateID here: http://www.worldcat.org/wcpa/do/AffiliateUserServices?method=initSelfRegister','free')");
723 $dbh->do("INSERT INTO `systempreferences` (variable,value,options,explanation,type)
724 VALUES ('XISBNDailyLimit',499,'','The xISBN Web service is free for non-commercial use when usage does not exceed 500 requests per day','free')");
725 $dbh->do("INSERT INTO `systempreferences` (variable,value,options,explanation,type)
726 VALUES ('PINESISBN',0,'','Use with FRBRizeEditions. If ON, Koha will use PINES OISBN web service in the Editions tab on the detail pages.','YesNo')");
727 $dbh->do("INSERT INTO `systempreferences` (variable,value,options,explanation,type)
728 VALUES ('ThingISBN',0,'','Use with FRBRizeEditions. If ON, Koha will use the ThingISBN web service in the Editions tab on the detail pages.','YesNo')");
729 print "Upgrade to $DBversion done (adding services throttle table and sysprefs for xISBN)\n";
730 SetVersion ($DBversion);
733 $DBversion = "3.00.00.031";
734 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
736 $dbh->do("INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('QueryStemming',1,'If ON, enables query stemming',NULL,'YesNo')");
737 $dbh->do("INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('QueryFuzzy',1,'If ON, enables fuzzy option for searches',NULL,'YesNo')");
738 $dbh->do("INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('QueryWeightFields',1,'If ON, enables field weighting',NULL,'YesNo')");
739 $dbh->do("INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('WebBasedSelfCheck',0,'If ON, enables the web-based self-check system',NULL,'YesNo')");
740 $dbh->do("INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('numSearchResults',20,'Specify the maximum number of results to display on a page of results',NULL,'free')");
741 $dbh->do("INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('OPACnumSearchResults',20,'Specify the maximum number of results to display on a page of results',NULL,'free')");
742 $dbh->do("INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('maxItemsInSearchResults',20,'Specify the maximum number of items to display for each result on a page of results',NULL,'free')");
743 $dbh->do("INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('defaultSortField',NULL,'Specify the default field used for sorting','relevance|popularity|call_number|pubdate|acqdate|title|author','Choice')");
744 $dbh->do("INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('defaultSortOrder',NULL,'Specify the default sort order','asc|dsc|az|za','Choice')");
745 $dbh->do("INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('OPACdefaultSortField',NULL,'Specify the default field used for sorting','relevance|popularity|call_number|pubdate|acqdate|title|author','Choice')");
746 $dbh->do("INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('OPACdefaultSortOrder',NULL,'Specify the default sort order','asc|dsc|za|az','Choice')");
747 $dbh->do("INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('staffClientBaseURL','','Specify the base URL of the staff client',NULL,'free')");
748 $dbh->do("INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('minPasswordLength',3,'Specify the minimum length of a patron/staff password',NULL,'free')");
749 $dbh->do("INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('noItemTypeImages',0,'If ON, disables item-type images',NULL,'YesNo')");
750 $dbh->do("INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('emailLibrarianWhenHoldIsPlaced',0,'If ON, emails the librarian whenever a hold is placed',NULL,'YesNo')");
751 $dbh->do("INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('holdCancelLength','','Specify how many days before a hold is canceled',NULL,'free')");
752 $dbh->do("INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('libraryAddress','','The address to use for printing receipts, overdues, etc. if different than physical address',NULL,'free')");
753 $dbh->do("INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('finesMode','test','Choose the fines mode, test or production','test|production','Choice')");
754 $dbh->do("INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('globalDueDate','','If set, allows a global static due date for all checkouts',NULL,'free')");
755 $dbh->do("INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('itemBarcodeInputFilter','','If set, allows specification of a item barcode input filter','cuecat','Choice')");
756 $dbh->do("INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('singleBranchMode',0,'Operate in Single-branch mode, hide branch selection in the OPAC',NULL,'YesNo')");
757 $dbh->do("INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('URLLinkText','','Text to display as the link anchor in the OPAC',NULL,'free')");
758 $dbh->do("INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('OPACSubscriptionDisplay','economical','Specify how to display subscription information in the OPAC','economical|off|full','Choice')");
759 $dbh->do("INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('OPACDisplayExtendedSubInfo',1,'If ON, extended subscription information is displayed in the OPAC',NULL,'YesNo')");
760 $dbh->do("INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('OPACViewOthersSuggestions',0,'If ON, allows all suggestions to be displayed in the OPAC',NULL,'YesNo')");
761 $dbh->do("INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('OPACURLOpenInNewWindow',0,'If ON, URLs in the OPAC open in a new window',NULL,'YesNo')");
762 $dbh->do("INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('OPACUserCSS',0,'Add CSS to be included in the OPAC',NULL,'free')");
764 print "Upgrade to $DBversion done (adding additional system preference)\n";
765 SetVersion ($DBversion);
768 $DBversion = "3.00.00.032";
769 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
770 $dbh->do("UPDATE `marc_subfield_structure` SET `kohafield` = 'items.wthdrawn' WHERE `kohafield` = 'items.withdrawn'");
771 print "Upgrade to $DBversion done (fixed MARC framework references to items.withdrawn)\n";
772 SetVersion ($DBversion);
775 $DBversion = "3.00.00.033";
776 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
777 $dbh->do("INSERT INTO `userflags` VALUES(17,'staffaccess','Modify login / permissions for staff users',0)");
778 print "Upgrade to $DBversion done (Adding permissions flag for staff member access modification. )\n";
779 SetVersion ($DBversion);
782 $DBversion = "3.00.00.034";
783 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
784 $dbh->do("ALTER TABLE `virtualshelves` ADD COLUMN `sortfield` VARCHAR(16) ");
785 print "Upgrade to $DBversion done (Adding sortfield for Virtual Shelves. )\n";
786 SetVersion ($DBversion);
789 $DBversion = "3.00.00.035";
790 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
791 $dbh->do("UPDATE marc_subfield_structure
792 SET authorised_value = 'cn_source'
793 WHERE kohafield IN ('items.cn_source', 'biblioitems.cn_source')
794 AND (authorised_value is NULL OR authorised_value = '')");
795 print "Upgrade to $DBversion done (MARC frameworks: make classification source a drop-down)\n";
796 SetVersion ($DBversion);
799 $DBversion = "3.00.00.036";
800 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
801 $dbh->do("INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('OPACItemsResultsDisplay','statuses','statuses : show only the status of items in result list. itemdisplay : show full location of items (branch+location+callnumber) as in staff interface','statuses|itemdetails','Choice');");
802 print "Upgrade to $DBversion done (OPACItemsResultsDisplay systempreference added)\n";
803 SetVersion ($DBversion);
806 $DBversion = "3.00.00.037";
807 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
808 $dbh->do("ALTER TABLE `borrowers` ADD COLUMN `altcontactfirstname` varchar(255)");
809 $dbh->do("ALTER TABLE `borrowers` ADD COLUMN `altcontactsurname` varchar(255)");
810 $dbh->do("ALTER TABLE `borrowers` ADD COLUMN `altcontactaddress1` varchar(255)");
811 $dbh->do("ALTER TABLE `borrowers` ADD COLUMN `altcontactaddress2` varchar(255)");
812 $dbh->do("ALTER TABLE `borrowers` ADD COLUMN `altcontactaddress3` varchar(255)");
813 $dbh->do("ALTER TABLE `borrowers` ADD COLUMN `altcontactzipcode` varchar(50)");
814 $dbh->do("ALTER TABLE `borrowers` ADD COLUMN `altcontactphone` varchar(50)");
815 print "Upgrade to $DBversion done (Adding Alternative Contact Person information to borrowers table)\n";
816 SetVersion ($DBversion);
819 $DBversion = "3.00.00.038";
820 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
821 $dbh->do("UPDATE `systempreferences` set explanation='Choose the fines mode, off, test (emails admin report) or production (accrue overdue fines). Requires fines cron script' , options='off|test|production' where variable='finesMode'");
822 $dbh->do("DELETE FROM `systempreferences` WHERE variable='hideBiblioNumber'");
823 print "Upgrade to $DBversion done ('alter finesMode systempreference, remove superfluous syspref.')\n";
824 SetVersion ($DBversion);
827 $DBversion = "3.00.00.039";
828 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
829 $dbh->do("INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('uppercasesurnames',0,'If ON, surnames are converted to upper case in patron entry form',NULL,'YesNo')");
830 $dbh->do("INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('CircControl','ItemHomeLibrary','Specify the agency that controls the circulation and fines policy','PickupLibrary|PatronLibrary|ItemHomeLibrary','Choice')");
831 $dbh->do("INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('finesCalendar','noFinesWhenClosed','Specify whether to use the Calendar in calculating duedates and fines','ignoreCalendar|noFinesWhenClosed','Choice')");
832 # $dbh->do("DELETE FROM `systempreferences` WHERE variable='HomeOrHoldingBranch'"); # Bug #2752
833 print "Upgrade to $DBversion done ('add circ sysprefs CircControl, finesCalendar, and uppercasesurnames, and delete HomeOrHoldingBranch.')\n";
834 SetVersion ($DBversion);
837 $DBversion = "3.00.00.040";
838 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
839 $dbh->do("INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('previousIssuesDefaultSortOrder','asc','Specify the sort order of Previous Issues on the circulation page','asc|desc','Choice')");
840 $dbh->do("INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES('todaysIssuesDefaultSortOrder','desc','Specify the sort order of Todays Issues on the circulation page','asc|desc','Choice')");
841 print "Upgrade to $DBversion done ('add circ sysprefs todaysIssuesDefaultSortOrder and previousIssuesDefaultSortOrder.')\n";
842 SetVersion ($DBversion);
846 $DBversion = "3.00.00.041";
847 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
848 # Strictly speaking it is not necessary to explicitly change
849 # NULL values to 0, because the ALTER TABLE statement will do that.
850 # However, setting them first avoids a warning.
851 $dbh->do("UPDATE items SET notforloan = 0 WHERE notforloan IS NULL");
852 $dbh->do("UPDATE items SET damaged = 0 WHERE damaged IS NULL");
853 $dbh->do("UPDATE items SET itemlost = 0 WHERE itemlost IS NULL");
854 $dbh->do("UPDATE items SET wthdrawn = 0 WHERE wthdrawn IS NULL");
855 $dbh->do("ALTER TABLE items
856 MODIFY notforloan tinyint(1) NOT NULL default 0,
857 MODIFY damaged tinyint(1) NOT NULL default 0,
858 MODIFY itemlost tinyint(1) NOT NULL default 0,
859 MODIFY wthdrawn tinyint(1) NOT NULL default 0");
860 $dbh->do("UPDATE deleteditems SET notforloan = 0 WHERE notforloan IS NULL");
861 $dbh->do("UPDATE deleteditems SET damaged = 0 WHERE damaged IS NULL");
862 $dbh->do("UPDATE deleteditems SET itemlost = 0 WHERE itemlost IS NULL");
863 $dbh->do("UPDATE deleteditems SET wthdrawn = 0 WHERE wthdrawn IS NULL");
864 $dbh->do("ALTER TABLE deleteditems
865 MODIFY notforloan tinyint(1) NOT NULL default 0,
866 MODIFY damaged tinyint(1) NOT NULL default 0,
867 MODIFY itemlost tinyint(1) NOT NULL default 0,
868 MODIFY wthdrawn tinyint(1) NOT NULL default 0");
869 print "Upgrade to $DBversion done (disallow NULL in several item status columns)\n";
870 SetVersion ($DBversion);
873 $DBversion = "3.00.00.04";
874 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
875 $dbh->do("ALTER TABLE aqbooksellers CHANGE name name mediumtext NOT NULL");
876 print "Upgrade to $DBversion done (disallow NULL in aqbooksellers.name; part of fix for bug 1251)\n";
877 SetVersion ($DBversion);
880 $DBversion = "3.00.00.043";
881 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
882 $dbh->do("ALTER TABLE `currency` ADD `symbol` varchar(5) default NULL AFTER currency, ADD `timestamp` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP AFTER symbol");
883 print "Upgrade to $DBversion done (currency table: add symbol and timestamp columns)\n";
884 SetVersion ($DBversion);
887 $DBversion = "3.00.00.044";
888 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
889 $dbh->do("ALTER TABLE deletedborrowers
890 ADD `altcontactfirstname` varchar(255) default NULL,
891 ADD `altcontactsurname` varchar(255) default NULL,
892 ADD `altcontactaddress1` varchar(255) default NULL,
893 ADD `altcontactaddress2` varchar(255) default NULL,
894 ADD `altcontactaddress3` varchar(255) default NULL,
895 ADD `altcontactzipcode` varchar(50) default NULL,
896 ADD `altcontactphone` varchar(50) default NULL
898 $dbh->do("INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES
899 ('OPACBaseURL',NULL,'Specify the Base URL of the OPAC, e.g., opac.mylibrary.com, the http:// will be added automatically by Koha.',NULL,'Free'),
900 ('language','en','Set the default language in the staff client.',NULL,'Languages'),
901 ('QueryAutoTruncate',1,'If ON, query truncation is enabled by default',NULL,'YesNo'),
902 ('QueryRemoveStopwords',0,'If ON, stopwords listed in the Administration area will be removed from queries',NULL,'YesNo')
904 print "Upgrade to $DBversion done (syncing deletedborrowers table with borrowers table)\n";
905 SetVersion ($DBversion);
908 #-- http://www.w3.org/International/articles/language-tags/
911 $DBversion = "3.00.00.045";
912 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
914 CREATE TABLE language_subtag_registry (
916 type varchar(25), -- language-script-region-variant-extension-privateuse
917 description varchar(25), -- only one of the possible descriptions for ease of reference, see language_descriptions for the complete list
919 KEY `subtag` (`subtag`)
920 ) ENGINE=InnoDB DEFAULT CHARSET=utf8");
922 #-- TODO: add suppress_scripts
923 #-- this maps three letter codes defined in iso639.2 back to their
924 #-- two letter equivilents in rfc4646 (LOC maintains iso639+)
925 $dbh->do("CREATE TABLE language_rfc4646_to_iso639 (
926 rfc4646_subtag varchar(25),
927 iso639_2_code varchar(25),
928 KEY `rfc4646_subtag` (`rfc4646_subtag`)
929 ) ENGINE=InnoDB DEFAULT CHARSET=utf8");
931 $dbh->do("CREATE TABLE language_descriptions (
935 description varchar(255),
937 ) ENGINE=InnoDB DEFAULT CHARSET=utf8");
939 #-- bi-directional support, keyed by script subcode
940 $dbh->do("CREATE TABLE language_script_bidi (
941 rfc4646_subtag varchar(25), -- script subtag, Arab, Hebr, etc.
942 bidi varchar(3), -- rtl ltr
943 KEY `rfc4646_subtag` (`rfc4646_subtag`)
944 ) ENGINE=InnoDB DEFAULT CHARSET=utf8");
946 #-- BIDI Stuff, Arabic and Hebrew
947 $dbh->do("INSERT INTO language_script_bidi(rfc4646_subtag,bidi)
948 VALUES( 'Arab', 'rtl')");
949 $dbh->do("INSERT INTO language_script_bidi(rfc4646_subtag,bidi)
950 VALUES( 'Hebr', 'rtl')");
952 #-- TODO: need to map language subtags to script subtags for detection
953 #-- of bidi when script is not specified (like ar, he)
954 $dbh->do("CREATE TABLE language_script_mapping (
955 language_subtag varchar(25),
956 script_subtag varchar(25),
957 KEY `language_subtag` (`language_subtag`)
958 ) ENGINE=InnoDB DEFAULT CHARSET=utf8");
960 #-- Default mappings between script and language subcodes
961 $dbh->do("INSERT INTO language_script_mapping(language_subtag,script_subtag)
962 VALUES( 'ar', 'Arab')");
963 $dbh->do("INSERT INTO language_script_mapping(language_subtag,script_subtag)
964 VALUES( 'he', 'Hebr')");
966 print "Upgrade to $DBversion done (adding language subtag registry and basic BiDi support NOTE: You should import the subtag registry SQL)\n";
967 SetVersion ($DBversion);
970 $DBversion = "3.00.00.046";
971 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
972 $dbh->do("ALTER TABLE `subscription` CHANGE `numberlength` `numberlength` int(11) default '0' ,
973 CHANGE `weeklength` `weeklength` int(11) default '0'");
974 $dbh->do("CREATE TABLE `serialitems` (`serialid` int(11) NOT NULL, `itemnumber` int(11) NOT NULL, UNIQUE KEY `serialididx` (`serialid`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8");
975 $dbh->do("INSERT INTO `serialitems` SELECT `serialid`,`itemnumber` from serial where NOT ISNULL(itemnumber) && itemnumber <> '' && itemnumber NOT LIKE '%,%'");
976 print "Upgrade to $DBversion done (Add serialitems table to link serial issues to items. )\n";
977 SetVersion ($DBversion);
980 $DBversion = "3.00.00.047";
981 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
982 $dbh->do("INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('OpacRenewalAllowed',0,'If ON, users can renew their issues directly from their OPAC account',NULL,'YesNo');");
983 print "Upgrade to $DBversion done ( Added OpacRenewalAllowed syspref )\n";
984 SetVersion ($DBversion);
987 $DBversion = "3.00.00.048";
988 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
989 $dbh->do("ALTER TABLE `items` ADD `more_subfields_xml` longtext default NULL AFTER `itype`");
990 print "Upgrade to $DBversion done (added items.more_subfields_xml)\n";
991 SetVersion ($DBversion);
994 $DBversion = "3.00.00.049";
995 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
996 $dbh->do("ALTER TABLE `z3950servers` ADD `encoding` text default NULL AFTER type ");
997 print "Upgrade to $DBversion done ( Added encoding field to z3950servers table )\n";
998 SetVersion ($DBversion);
1001 $DBversion = "3.00.00.050";
1002 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
1003 $dbh->do("INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('OpacHighlightedWords','0','If Set, query matched terms are highlighted in OPAC',NULL,'YesNo');");
1004 print "Upgrade to $DBversion done ( Added OpacHighlightedWords syspref )\n";
1005 SetVersion ($DBversion);
1008 $DBversion = "3.00.00.051";
1009 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
1010 $dbh->do("UPDATE systempreferences SET explanation = 'Define the current theme for the OPAC interface.' WHERE variable = 'opacthemes';");
1011 print "Upgrade to $DBversion done ( Corrected opacthemes explanation. )\n";
1012 SetVersion ($DBversion);
1015 $DBversion = "3.00.00.052";
1016 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
1017 $dbh->do("ALTER TABLE `deleteditems` ADD `more_subfields_xml` LONGTEXT DEFAULT NULL AFTER `itype`");
1018 print "Upgrade to $DBversion done ( Adding missing column to deleteditems table. )\n";
1019 SetVersion ($DBversion);
1022 $DBversion = "3.00.00.053";
1023 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
1024 $dbh->do("CREATE TABLE `printers_profile` (
1025 `prof_id` int(4) NOT NULL auto_increment,
1026 `printername` varchar(40) NOT NULL,
1027 `tmpl_id` int(4) NOT NULL,
1028 `paper_bin` varchar(20) NOT NULL,
1029 `offset_horz` float default NULL,
1030 `offset_vert` float default NULL,
1031 `creep_horz` float default NULL,
1032 `creep_vert` float default NULL,
1033 `unit` char(20) NOT NULL default 'POINT',
1034 PRIMARY KEY (`prof_id`),
1035 UNIQUE KEY `printername` (`printername`,`tmpl_id`,`paper_bin`),
1036 CONSTRAINT `printers_profile_pnfk_1` FOREIGN KEY (`tmpl_id`) REFERENCES `labels_templates` (`tmpl_id`) ON DELETE CASCADE ON UPDATE CASCADE
1037 ) ENGINE=InnoDB DEFAULT CHARSET=utf8 ");
1038 $dbh->do("CREATE TABLE `labels_profile` (
1039 `tmpl_id` int(4) NOT NULL,
1040 `prof_id` int(4) NOT NULL,
1041 UNIQUE KEY `tmpl_id` (`tmpl_id`),
1042 UNIQUE KEY `prof_id` (`prof_id`)
1043 ) ENGINE=InnoDB DEFAULT CHARSET=utf8 ");
1044 print "Upgrade to $DBversion done ( Printer Profile tables added )\n";
1045 SetVersion ($DBversion);
1048 $DBversion = "3.00.00.054";
1049 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
1050 $dbh->do("UPDATE systempreferences SET options = 'incremental|annual|hbyymmincr|OFF', explanation = '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' WHERE variable = 'autoBarcode';");
1051 print "Upgrade to $DBversion done ( Added another barcode autogeneration sequence to barcode.pl. )\n";
1052 SetVersion ($DBversion);
1055 $DBversion = "3.00.00.055";
1056 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
1057 $dbh->do("ALTER TABLE `zebraqueue` ADD KEY `zebraqueue_lookup` (`server`, `biblio_auth_number`, `operation`, `done`)");
1058 print "Upgrade to $DBversion done ( Added index on zebraqueue. )\n";
1059 SetVersion ($DBversion);
1061 $DBversion = "3.00.00.056";
1062 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
1063 if (C4::Context->preference("marcflavour") eq 'UNIMARC') {
1064 $dbh->do("INSERT INTO `marc_subfield_structure` (`tagfield`, `tagsubfield`, `liblibrarian`, `libopac`, `repeatable`, `mandatory`, `kohafield`, `tab`, `authorised_value` , `authtypecode`, `value_builder`, `isurl`, `hidden`, `frameworkcode`, `seealso`, `link`, `defaultvalue`) VALUES ('995', 'v', 'Note sur le N° de périodique','Note sur le N° de périodique', 0, 0, 'items.enumchron', 10, '', '', '', 0, 0, '', '', '', NULL) ");
1066 $dbh->do("INSERT INTO `marc_subfield_structure` (`tagfield`, `tagsubfield`, `liblibrarian`, `libopac`, `repeatable`, `mandatory`, `kohafield`, `tab`, `authorised_value` , `authtypecode`, `value_builder`, `isurl`, `hidden`, `frameworkcode`, `seealso`, `link`, `defaultvalue`) VALUES ('952', 'h', 'Serial Enumeration / chronology','Serial Enumeration / chronology', 0, 0, 'items.enumchron', 10, '', '', '', 0, 0, '', '', '', NULL) ");
1068 $dbh->do("ALTER TABLE `items` ADD `enumchron` VARCHAR(80) DEFAULT NULL;");
1069 print "Upgrade to $DBversion done ( Added item.enumchron column, and framework map to 952h )\n";
1070 SetVersion ($DBversion);
1073 $DBversion = "3.00.00.057";
1074 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
1075 $dbh->do("INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('OAI-PMH','0','if ON, OAI-PMH server is enabled',NULL,'YesNo');");
1076 $dbh->do("INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('OAI-PMH:archiveID','KOHA-OAI-TEST','OAI-PMH archive identification',NULL,'Free');");
1077 $dbh->do("INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('OAI-PMH:MaxCount','50','OAI-PMH maximum number of records by answer to ListRecords and ListIdentifiers queries',NULL,'Integer');");
1078 $dbh->do("INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('OAI-PMH:Set','SET,Experimental set\r\nSET:SUBSET,Experimental subset','OAI-PMH exported set, the set name is followed by a comma and a short description, one set by line',NULL,'Free');");
1079 $dbh->do("INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('OAI-PMH:Subset',\"itemtype='BOOK'\",'Restrict answer to matching raws of the biblioitems table (experimental)',NULL,'Free');");
1080 SetVersion ($DBversion);
1083 $DBversion = "3.00.00.058";
1084 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
1085 $dbh->do("ALTER TABLE `opac_news`
1086 CHANGE `lang` `lang` VARCHAR( 25 )
1088 COLLATE utf8_general_ci
1089 NOT NULL default ''");
1090 print "Upgrade to $DBversion done ( lang field in opac_news made longer )\n";
1091 SetVersion ($DBversion);
1094 $DBversion = "3.00.00.059";
1095 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
1097 $dbh->do("CREATE TABLE IF NOT EXISTS `labels_templates` (
1098 `tmpl_id` int(4) NOT NULL auto_increment,
1099 `tmpl_code` char(100) default '',
1100 `tmpl_desc` char(100) default '',
1101 `page_width` float default '0',
1102 `page_height` float default '0',
1103 `label_width` float default '0',
1104 `label_height` float default '0',
1105 `topmargin` float default '0',
1106 `leftmargin` float default '0',
1107 `cols` int(2) default '0',
1108 `rows` int(2) default '0',
1109 `colgap` float default '0',
1110 `rowgap` float default '0',
1111 `active` int(1) default NULL,
1112 `units` char(20) default 'PX',
1113 `fontsize` int(4) NOT NULL default '3',
1114 PRIMARY KEY (`tmpl_id`)
1115 ) ENGINE=InnoDB DEFAULT CHARSET=utf8;");
1116 $dbh->do("CREATE TABLE IF NOT EXISTS `printers_profile` (
1117 `prof_id` int(4) NOT NULL auto_increment,
1118 `printername` varchar(40) NOT NULL,
1119 `tmpl_id` int(4) NOT NULL,
1120 `paper_bin` varchar(20) NOT NULL,
1121 `offset_horz` float default NULL,
1122 `offset_vert` float default NULL,
1123 `creep_horz` float default NULL,
1124 `creep_vert` float default NULL,
1125 `unit` char(20) NOT NULL default 'POINT',
1126 PRIMARY KEY (`prof_id`),
1127 UNIQUE KEY `printername` (`printername`,`tmpl_id`,`paper_bin`),
1128 CONSTRAINT `printers_profile_pnfk_1` FOREIGN KEY (`tmpl_id`) REFERENCES `labels_templates` (`tmpl_id`) ON DELETE CASCADE ON UPDATE CASCADE
1129 ) ENGINE=InnoDB DEFAULT CHARSET=utf8 ");
1130 print "Upgrade to $DBversion done ( Added labels_templates table if it did not exist. )\n";
1131 SetVersion ($DBversion);
1134 $DBversion = "3.00.00.060";
1135 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
1136 $dbh->do("CREATE TABLE IF NOT EXISTS `patronimage` (
1137 `cardnumber` varchar(16) NOT NULL,
1138 `mimetype` varchar(15) NOT NULL,
1139 `imagefile` mediumblob NOT NULL,
1140 PRIMARY KEY (`cardnumber`),
1141 CONSTRAINT `patronimage_fk1` FOREIGN KEY (`cardnumber`) REFERENCES `borrowers` (`cardnumber`) ON DELETE CASCADE ON UPDATE CASCADE
1142 ) ENGINE=InnoDB DEFAULT CHARSET=utf8;");
1143 print "Upgrade to $DBversion done ( Added patronimage table. )\n";
1144 SetVersion ($DBversion);
1147 $DBversion = "3.00.00.061";
1148 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
1149 $dbh->do("ALTER TABLE labels_templates ADD COLUMN font char(10) NOT NULL DEFAULT 'TR';");
1150 print "Upgrade to $DBversion done ( Added font column to labels_templates )\n";
1151 SetVersion ($DBversion);
1154 $DBversion = "3.00.00.062";
1155 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
1156 $dbh->do("CREATE TABLE `old_issues` (
1157 `borrowernumber` int(11) default NULL,
1158 `itemnumber` int(11) default NULL,
1159 `date_due` date default NULL,
1160 `branchcode` varchar(10) default NULL,
1161 `issuingbranch` varchar(18) default NULL,
1162 `returndate` date default NULL,
1163 `lastreneweddate` date default NULL,
1164 `return` varchar(4) default NULL,
1165 `renewals` tinyint(4) default NULL,
1166 `timestamp` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
1167 `issuedate` date default NULL,
1168 KEY `old_issuesborridx` (`borrowernumber`),
1169 KEY `old_issuesitemidx` (`itemnumber`),
1170 KEY `old_bordate` (`borrowernumber`,`timestamp`),
1171 CONSTRAINT `old_issues_ibfk_1` FOREIGN KEY (`borrowernumber`) REFERENCES `borrowers` (`borrowernumber`)
1172 ON DELETE SET NULL ON UPDATE SET NULL,
1173 CONSTRAINT `old_issues_ibfk_2` FOREIGN KEY (`itemnumber`) REFERENCES `items` (`itemnumber`)
1174 ON DELETE SET NULL ON UPDATE SET NULL
1175 ) ENGINE=InnoDB DEFAULT CHARSET=utf8");
1176 $dbh->do("CREATE TABLE `old_reserves` (
1177 `borrowernumber` int(11) default NULL,
1178 `reservedate` date default NULL,
1179 `biblionumber` int(11) default NULL,
1180 `constrainttype` varchar(1) default NULL,
1181 `branchcode` varchar(10) default NULL,
1182 `notificationdate` date default NULL,
1183 `reminderdate` date default NULL,
1184 `cancellationdate` date default NULL,
1185 `reservenotes` mediumtext,
1186 `priority` smallint(6) default NULL,
1187 `found` varchar(1) default NULL,
1188 `timestamp` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
1189 `itemnumber` int(11) default NULL,
1190 `waitingdate` date default NULL,
1191 KEY `old_reserves_borrowernumber` (`borrowernumber`),
1192 KEY `old_reserves_biblionumber` (`biblionumber`),
1193 KEY `old_reserves_itemnumber` (`itemnumber`),
1194 KEY `old_reserves_branchcode` (`branchcode`),
1195 CONSTRAINT `old_reserves_ibfk_1` FOREIGN KEY (`borrowernumber`) REFERENCES `borrowers` (`borrowernumber`)
1196 ON DELETE SET NULL ON UPDATE SET NULL,
1197 CONSTRAINT `old_reserves_ibfk_2` FOREIGN KEY (`biblionumber`) REFERENCES `biblio` (`biblionumber`)
1198 ON DELETE SET NULL ON UPDATE SET NULL,
1199 CONSTRAINT `old_reserves_ibfk_3` FOREIGN KEY (`itemnumber`) REFERENCES `items` (`itemnumber`)
1200 ON DELETE SET NULL ON UPDATE SET NULL
1201 ) ENGINE=InnoDB DEFAULT CHARSET=utf8");
1203 # move closed transactions to old_* tables
1204 $dbh->do("INSERT INTO old_issues SELECT * FROM issues WHERE returndate IS NOT NULL");
1205 $dbh->do("DELETE FROM issues WHERE returndate IS NOT NULL");
1206 $dbh->do("INSERT INTO old_reserves SELECT * FROM reserves WHERE cancellationdate IS NOT NULL OR found = 'F'");
1207 $dbh->do("DELETE FROM reserves WHERE cancellationdate IS NOT NULL OR found = 'F'");
1209 print "Upgrade to $DBversion done ( Added old_issues and old_reserves tables )\n";
1210 SetVersion ($DBversion);
1213 $DBversion = "3.00.00.063";
1214 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
1215 $dbh->do("ALTER TABLE deleteditems
1216 CHANGE COLUMN booksellerid booksellerid MEDIUMTEXT DEFAULT NULL,
1217 ADD COLUMN enumchron VARCHAR(80) DEFAULT NULL AFTER more_subfields_xml,
1218 ADD COLUMN copynumber SMALLINT(6) DEFAULT NULL AFTER enumchron;");
1219 $dbh->do("ALTER TABLE items
1220 CHANGE COLUMN booksellerid booksellerid MEDIUMTEXT,
1221 ADD COLUMN copynumber SMALLINT(6) DEFAULT NULL AFTER enumchron;");
1222 print "Upgrade to $DBversion done ( Changed items.booksellerid and deleteditems.booksellerid to MEDIUMTEXT and added missing items.copynumber and deleteditems.copynumber to fix Bug 1927)\n";
1223 SetVersion ($DBversion);
1226 $DBversion = "3.00.00.064";
1227 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
1228 $dbh->do("INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('AmazonLocale','US','Use to set the Locale of your Amazon.com Web Services','US|CA|DE|FR|JP|UK','Choice');");
1229 $dbh->do("INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('AWSAccessKeyID','','See: http://aws.amazon.com','','free');");
1230 $dbh->do("DELETE FROM `systempreferences` WHERE variable='AmazonDevKey';");
1231 $dbh->do("DELETE FROM `systempreferences` WHERE variable='XISBNAmazonSimilarItems';");
1232 $dbh->do("DELETE FROM `systempreferences` WHERE variable='OPACXISBNAmazonSimilarItems';");
1233 print "Upgrade to $DBversion done (IMPORTANT: Upgrading to Amazon.com Associates Web Service 4.0 ) \n";
1234 SetVersion ($DBversion);
1237 $DBversion = "3.00.00.065";
1238 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
1239 $dbh->do("CREATE TABLE `patroncards` (
1240 `cardid` int(11) NOT NULL auto_increment,
1241 `batch_id` varchar(10) NOT NULL default '1',
1242 `borrowernumber` int(11) NOT NULL,
1243 `timestamp` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
1244 PRIMARY KEY (`cardid`),
1245 KEY `patroncards_ibfk_1` (`borrowernumber`),
1246 CONSTRAINT `patroncards_ibfk_1` FOREIGN KEY (`borrowernumber`) REFERENCES `borrowers` (`borrowernumber`) ON DELETE CASCADE ON UPDATE CASCADE
1247 ) ENGINE=InnoDB DEFAULT CHARSET=utf8;");
1248 print "Upgrade to $DBversion done (Adding patroncards table for patroncards generation feature. ) \n";
1249 SetVersion ($DBversion);
1252 $DBversion = "3.00.00.066";
1253 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
1254 $dbh->do("ALTER TABLE `virtualshelfcontents` MODIFY `dateadded` timestamp NOT NULL
1255 DEFAULT CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP;
1257 print "Upgrade to $DBversion done (fix for bug 1873: virtualshelfcontents dateadded column empty. ) \n";
1258 SetVersion ($DBversion);
1261 $DBversion = "3.00.00.067";
1262 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
1263 $dbh->do("UPDATE systempreferences SET explanation = 'Enable patron images for the Staff Client', type = 'YesNo' WHERE variable = 'patronimages'");
1264 print "Upgrade to $DBversion done (Updating patronimages syspref to reflect current kohastructure.sql. ) \n";
1265 SetVersion ($DBversion);
1268 $DBversion = "3.00.00.068";
1269 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
1270 $dbh->do("CREATE TABLE `permissions` (
1271 `module_bit` int(11) NOT NULL DEFAULT 0,
1272 `code` varchar(30) DEFAULT NULL,
1273 `description` varchar(255) DEFAULT NULL,
1274 PRIMARY KEY (`module_bit`, `code`),
1275 CONSTRAINT `permissions_ibfk_1` FOREIGN KEY (`module_bit`) REFERENCES `userflags` (`bit`)
1276 ON DELETE CASCADE ON UPDATE CASCADE
1277 ) ENGINE=InnoDB DEFAULT CHARSET=utf8");
1278 $dbh->do("CREATE TABLE `user_permissions` (
1279 `borrowernumber` int(11) NOT NULL DEFAULT 0,
1280 `module_bit` int(11) NOT NULL DEFAULT 0,
1281 `code` varchar(30) DEFAULT NULL,
1282 CONSTRAINT `user_permissions_ibfk_1` FOREIGN KEY (`borrowernumber`) REFERENCES `borrowers` (`borrowernumber`)
1283 ON DELETE CASCADE ON UPDATE CASCADE,
1284 CONSTRAINT `user_permissions_ibfk_2` FOREIGN KEY (`module_bit`, `code`)
1285 REFERENCES `permissions` (`module_bit`, `code`)
1286 ON DELETE CASCADE ON UPDATE CASCADE
1287 ) ENGINE=InnoDB DEFAULT CHARSET=utf8");
1289 $dbh->do("INSERT INTO permissions (module_bit, code, description) VALUES
1290 (13, 'edit_news', 'Write news for the OPAC and staff interfaces'),
1291 (13, 'label_creator', 'Create printable labels and barcodes from catalog and patron data'),
1292 (13, 'edit_calendar', 'Define days when the library is closed'),
1293 (13, 'moderate_comments', 'Moderate patron comments'),
1294 (13, 'edit_notices', 'Define notices'),
1295 (13, 'edit_notice_status_triggers', 'Set notice/status triggers for overdue items'),
1296 (13, 'view_system_logs', 'Browse the system logs'),
1297 (13, 'inventory', 'Perform inventory (stocktaking) of your catalogue'),
1298 (13, 'stage_marc_import', 'Stage MARC records into the reservoir'),
1299 (13, 'manage_staged_marc', 'Managed staged MARC records, including completing and reversing imports'),
1300 (13, 'export_catalog', 'Export bibliographic and holdings data'),
1301 (13, 'import_patrons', 'Import patron data'),
1302 (13, 'delete_anonymize_patrons', 'Delete old borrowers and anonymize circulation history (deletes borrower reading history)'),
1303 (13, 'batch_upload_patron_images', 'Upload patron images in batch or one at a time'),
1304 (13, 'schedule_tasks', 'Schedule tasks to run')");
1306 $dbh->do("INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('GranularPermissions','0','Use detailed staff user permissions',NULL,'YesNo')");
1308 print "Upgrade to $DBversion done (adding permissions and user_permissions tables and GranularPermissions syspref) \n";
1309 SetVersion ($DBversion);
1311 $DBversion = "3.00.00.069";
1312 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
1313 $dbh->do("ALTER TABLE labels_conf CHANGE COLUMN class classification int(1) DEFAULT NULL;");
1314 print "Upgrade to $DBversion done ( Correcting columname in labels_conf )\n";
1315 SetVersion ($DBversion);
1318 $DBversion = "3.00.00.070";
1319 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
1320 $sth = $dbh->prepare("SELECT value FROM systempreferences WHERE variable='yuipath'");
1322 my ($value) = $sth->fetchrow;
1323 $value =~ s/2.3.1/2.5.1/;
1324 $dbh->do("UPDATE systempreferences SET value='$value' WHERE variable='yuipath';");
1325 print "Update yuipath syspref to 2.5.1 if necessary\n";
1326 SetVersion ($DBversion);
1329 $DBversion = "3.00.00.071";
1330 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
1331 $dbh->do(" ALTER TABLE `subscription` ADD `serialsadditems` TINYINT( 1 ) NOT NULL DEFAULT '0';");
1332 # fill the new field with the previous systempreference value, then drop the syspref
1333 my $sth = $dbh->prepare("SELECT value FROM systempreferences WHERE variable='serialsadditems'");
1335 my ($serialsadditems) = $sth->fetchrow();
1336 $dbh->do("UPDATE subscription SET serialsadditems=$serialsadditems");
1337 $dbh->do("DELETE FROM systempreferences WHERE variable='serialsadditems'");
1338 print "Upgrade to $DBversion done ( moving serialsadditems from syspref to subscription )\n";
1339 SetVersion ($DBversion);
1342 $DBversion = "3.00.00.072";
1343 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
1344 $dbh->do("ALTER TABLE labels_conf ADD COLUMN formatstring mediumtext DEFAULT NULL AFTER printingtype");
1345 print "Upgrade to $DBversion done ( Adding format string to labels generator. )\n";
1346 SetVersion ($DBversion);
1349 $DBversion = "3.00.00.073";
1350 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
1351 $dbh->do("DROP TABLE IF EXISTS `tags_all`;");
1353 CREATE TABLE `tags_all` (
1354 `tag_id` int(11) NOT NULL auto_increment,
1355 `borrowernumber` int(11) NOT NULL,
1356 `biblionumber` int(11) NOT NULL,
1357 `term` varchar(255) NOT NULL,
1358 `language` int(4) default NULL,
1359 `date_created` datetime NOT NULL,
1360 PRIMARY KEY (`tag_id`),
1361 KEY `tags_borrowers_fk_1` (`borrowernumber`),
1362 KEY `tags_biblionumber_fk_1` (`biblionumber`),
1363 CONSTRAINT `tags_borrowers_fk_1` FOREIGN KEY (`borrowernumber`)
1364 REFERENCES `borrowers` (`borrowernumber`) ON DELETE CASCADE ON UPDATE CASCADE,
1365 CONSTRAINT `tags_biblionumber_fk_1` FOREIGN KEY (`biblionumber`)
1366 REFERENCES `biblio` (`biblionumber`) ON DELETE CASCADE ON UPDATE CASCADE
1367 ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
1369 $dbh->do("DROP TABLE IF EXISTS `tags_approval`;");
1371 CREATE TABLE `tags_approval` (
1372 `term` varchar(255) NOT NULL,
1373 `approved` int(1) NOT NULL default '0',
1374 `date_approved` datetime default NULL,
1375 `approved_by` int(11) default NULL,
1376 `weight_total` int(9) NOT NULL default '1',
1377 PRIMARY KEY (`term`),
1378 KEY `tags_approval_borrowers_fk_1` (`approved_by`),
1379 CONSTRAINT `tags_approval_borrowers_fk_1` FOREIGN KEY (`approved_by`)
1380 REFERENCES `borrowers` (`borrowernumber`) ON DELETE CASCADE ON UPDATE CASCADE
1381 ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
1383 $dbh->do("DROP TABLE IF EXISTS `tags_index`;");
1385 CREATE TABLE `tags_index` (
1386 `term` varchar(255) NOT NULL,
1387 `biblionumber` int(11) NOT NULL,
1388 `weight` int(9) NOT NULL default '1',
1389 PRIMARY KEY (`term`,`biblionumber`),
1390 KEY `tags_index_biblionumber_fk_1` (`biblionumber`),
1391 CONSTRAINT `tags_index_term_fk_1` FOREIGN KEY (`term`)
1392 REFERENCES `tags_approval` (`term`) ON DELETE CASCADE ON UPDATE CASCADE,
1393 CONSTRAINT `tags_index_biblionumber_fk_1` FOREIGN KEY (`biblionumber`)
1394 REFERENCES `biblio` (`biblionumber`) ON DELETE CASCADE ON UPDATE CASCADE
1395 ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
1398 INSERT INTO `systempreferences` VALUES
1399 ('BakerTaylorBookstoreURL','','','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=',''),
1400 ('BakerTaylorEnabled','0','','Enable or disable all Baker & Taylor features.','YesNo'),
1401 ('BakerTaylorPassword','','','Baker & Taylor Password for Content Cafe (external content)','Textarea'),
1402 ('BakerTaylorUsername','','','Baker & Taylor Username for Content Cafe (external content)','Textarea'),
1403 ('TagsEnabled','1','','Enables or disables all tagging features. This is the main switch for tags.','YesNo'),
1404 ('TagsExternalDictionary',NULL,'','Path on server to local ispell executable, used to set $Lingua::Ispell::path This dictionary is used as a \"whitelist\" of pre-allowed tags.',''),
1405 ('TagsInputOnDetail','1','','Allow users to input tags from the detail page.', 'YesNo'),
1406 ('TagsInputOnList', '0','','Allow users to input tags from the search results list.', 'YesNo'),
1407 ('TagsModeration', NULL,'','Require tags from patrons to be approved before becoming visible.','YesNo'),
1408 ('TagsShowOnDetail','10','','Number of tags to display on detail page. 0 is off.', 'Integer'),
1409 ('TagsShowOnList', '6','','Number of tags to display on search results list. 0 is off.','Integer')
1411 print "Upgrade to $DBversion done (Baker/Taylor,Tags: sysprefs and tables (tags_all, tags_index, tags_approval)) \n";
1412 SetVersion ($DBversion);
1415 $DBversion = "3.00.00.074";
1416 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
1417 $dbh->do( q(update itemtypes set imageurl = concat( 'npl/', imageurl )
1418 where imageurl not like 'http%'
1419 and imageurl is not NULL
1420 and imageurl != '') );
1421 print "Upgrade to $DBversion done (updating imagetype.imageurls to reflect new icon locations.)\n";
1422 SetVersion ($DBversion);
1425 $DBversion = "3.00.00.075";
1426 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
1427 $dbh->do( q(alter table authorised_values add imageurl varchar(200) default NULL) );
1428 print "Upgrade to $DBversion done (adding imageurl field to authorised_values table)\n";
1429 SetVersion ($DBversion);
1432 $DBversion = "3.00.00.076";
1433 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
1434 $dbh->do("ALTER TABLE import_batches
1435 ADD COLUMN nomatch_action enum('create_new', 'ignore') NOT NULL default 'create_new' AFTER overlay_action");
1436 $dbh->do("ALTER TABLE import_batches
1437 ADD COLUMN item_action enum('always_add', 'add_only_for_matches', 'add_only_for_new', 'ignore')
1438 NOT NULL default 'always_add' AFTER nomatch_action");
1439 $dbh->do("ALTER TABLE import_batches
1440 MODIFY overlay_action enum('replace', 'create_new', 'use_template', 'ignore')
1441 NOT NULL default 'create_new'");
1442 $dbh->do("ALTER TABLE import_records
1443 MODIFY status enum('error', 'staged', 'imported', 'reverted', 'items_reverted',
1444 'ignored') NOT NULL default 'staged'");
1445 $dbh->do("ALTER TABLE import_items
1446 MODIFY status enum('error', 'staged', 'imported', 'reverted', 'ignored') NOT NULL default 'staged'");
1448 print "Upgrade to $DBversion done (changes to import_batches and import_records)\n";
1449 SetVersion ($DBversion);
1452 $DBversion = "3.00.00.077";
1453 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
1454 # drop these tables only if they exist and none of them are empty
1455 # these tables are not defined in the packaged 2.2.9, but since it is believed
1456 # that at least one library may be using them in a post-2.2.9 but pre-3.0 Koha,
1457 # some care is taken.
1458 my ($print_error) = $dbh->{PrintError};
1459 $dbh->{PrintError} = 0;
1460 my ($raise_error) = $dbh->{RaiseError};
1461 $dbh->{RaiseError} = 1;
1465 eval { $count = $dbh->do("SELECT 1 FROM categorytable"); };
1469 eval { $count = $dbh->do("SELECT 1 FROM mediatypetable"); };
1473 eval { $count = $dbh->do("SELECT 1 FROM subcategorytable"); };
1479 $dbh->do("DROP TABLE IF EXISTS `categorytable`");
1480 $dbh->do("DROP TABLE IF EXISTS `mediatypetable`");
1481 $dbh->do("DROP TABLE IF EXISTS `subcategorytable`");
1484 $dbh->{PrintError} = $print_error;
1485 $dbh->{RaiseError} = $raise_error;
1486 print "Upgrade to $DBversion done (drop categorytable, subcategorytable, and mediatypetable)\n";
1487 SetVersion ($DBversion);
1490 $DBversion = "3.00.00.078";
1491 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
1492 my ($print_error) = $dbh->{PrintError};
1493 $dbh->{PrintError} = 0;
1495 unless ($dbh->do("SELECT 1 FROM browser")) {
1496 $dbh->{PrintError} = $print_error;
1497 $dbh->do("CREATE TABLE `browser` (
1498 `level` int(11) NOT NULL,
1499 `classification` varchar(20) NOT NULL,
1500 `description` varchar(255) NOT NULL,
1501 `number` bigint(20) NOT NULL,
1502 `endnode` tinyint(4) NOT NULL
1503 ) ENGINE=InnoDB DEFAULT CHARSET=utf8");
1505 $dbh->{PrintError} = $print_error;
1506 print "Upgrade to $DBversion done (add browser table if not already present)\n";
1507 SetVersion ($DBversion);
1510 $DBversion = "3.00.00.079";
1511 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
1512 my ($print_error) = $dbh->{PrintError};
1513 $dbh->{PrintError} = 0;
1515 $dbh->do("INSERT INTO `systempreferences` (variable, value,options,type, explanation)VALUES
1516 ('AddPatronLists','categorycode','categorycode|category_type','Choice','Allow user to choose what list to pick up from when adding patrons')");
1517 print "Upgrade to $DBversion done (add browser table if not already present)\n";
1518 SetVersion ($DBversion);
1521 $DBversion = "3.00.00.080";
1522 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
1523 $dbh->do("ALTER TABLE subscription CHANGE monthlength monthlength int(11) default '0'");
1524 $dbh->do("ALTER TABLE deleteditems MODIFY marc LONGBLOB AFTER copynumber");
1525 $dbh->do("ALTER TABLE aqbooksellers CHANGE name name mediumtext NOT NULL");
1526 print "Upgrade to $DBversion done (catch up on DB schema changes since alpha and beta)\n";
1527 SetVersion ($DBversion);
1530 $DBversion = "3.00.00.081";
1531 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
1532 $dbh->do("CREATE TABLE `borrower_attribute_types` (
1533 `code` varchar(10) NOT NULL,
1534 `description` varchar(255) NOT NULL,
1535 `repeatable` tinyint(1) NOT NULL default 0,
1536 `unique_id` tinyint(1) NOT NULL default 0,
1537 `opac_display` tinyint(1) NOT NULL default 0,
1538 `password_allowed` tinyint(1) NOT NULL default 0,
1539 `staff_searchable` tinyint(1) NOT NULL default 0,
1540 `authorised_value_category` varchar(10) default NULL,
1541 PRIMARY KEY (`code`)
1542 ) ENGINE=InnoDB DEFAULT CHARSET=utf8");
1543 $dbh->do("CREATE TABLE `borrower_attributes` (
1544 `borrowernumber` int(11) NOT NULL,
1545 `code` varchar(10) NOT NULL,
1546 `attribute` varchar(30) default NULL,
1547 `password` varchar(30) default NULL,
1548 KEY `borrowernumber` (`borrowernumber`),
1549 KEY `code_attribute` (`code`, `attribute`),
1550 CONSTRAINT `borrower_attributes_ibfk_1` FOREIGN KEY (`borrowernumber`) REFERENCES `borrowers` (`borrowernumber`)
1551 ON DELETE CASCADE ON UPDATE CASCADE,
1552 CONSTRAINT `borrower_attributes_ibfk_2` FOREIGN KEY (`code`) REFERENCES `borrower_attribute_types` (`code`)
1553 ON DELETE CASCADE ON UPDATE CASCADE
1554 ) ENGINE=InnoDB DEFAULT CHARSET=utf8");
1555 $dbh->do("INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('ExtendedPatronAttributes','0','Use extended patron IDs and attributes',NULL,'YesNo')");
1556 print "Upgrade to $DBversion done (added borrower_attributes and borrower_attribute_types)\n";
1557 SetVersion ($DBversion);
1560 $DBversion = "3.00.00.082";
1561 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
1562 $dbh->do( q(alter table accountlines add column lastincrement decimal(28,6) default NULL) );
1563 print "Upgrade to $DBversion done (adding lastincrement column to accountlines table)\n";
1564 SetVersion ($DBversion);
1567 $DBversion = "3.00.00.083";
1568 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
1569 $dbh->do( qq(UPDATE systempreferences SET value='local' where variable='yuipath' and value like "%/intranet-tmpl/prog/%"));
1570 print "Upgrade to $DBversion done (Changing yuipath behaviour in managing a local value)\n";
1571 SetVersion ($DBversion);
1573 $DBversion = "3.00.00.084";
1574 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
1575 $dbh->do("INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES('RenewSerialAddsSuggestion','0','if ON, adds a new suggestion at serial subscription renewal',NULL,'YesNo')");
1576 $dbh->do("INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES('GoogleJackets','0','if ON, displays jacket covers from Google Books API',NULL,'YesNo')");
1577 print "Upgrade to $DBversion done (add new sysprefs)\n";
1578 SetVersion ($DBversion);
1581 $DBversion = "3.00.00.085";
1582 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
1583 if (C4::Context->preference("marcflavour") eq 'MARC21') {
1584 $dbh->do("UPDATE marc_subfield_structure SET tab = 0 WHERE tab = 9 AND tagfield = '037'");
1585 $dbh->do("UPDATE marc_subfield_structure SET tab = 1 WHERE tab = 6 AND tagfield in ('100', '110', '111', '130')");
1586 $dbh->do("UPDATE marc_subfield_structure SET tab = 2 WHERE tab = 6 AND tagfield in ('240', '243')");
1587 $dbh->do("UPDATE marc_subfield_structure SET tab = 4 WHERE tab = 6 AND tagfield in ('400', '410', '411', '440')");
1588 $dbh->do("UPDATE marc_subfield_structure SET tab = 5 WHERE tab = 9 AND tagfield = '584'");
1589 $dbh->do("UPDATE marc_subfield_structure SET tab = 7 WHERE tab = -6 AND tagfield = '760'");
1591 print "Upgrade to $DBversion done (move editing tab of various MARC21 subfields)\n";
1592 SetVersion ($DBversion);
1595 $DBversion = "3.00.00.086";
1596 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
1598 "CREATE TABLE `tmp_holdsqueue` (
1599 `biblionumber` int(11) default NULL,
1600 `itemnumber` int(11) default NULL,
1601 `barcode` varchar(20) default NULL,
1602 `surname` mediumtext NOT NULL,
1605 `borrowernumber` int(11) NOT NULL,
1606 `cardnumber` varchar(16) default NULL,
1607 `reservedate` date default NULL,
1609 `itemcallnumber` varchar(30) default NULL,
1610 `holdingbranch` varchar(10) default NULL,
1611 `pickbranch` varchar(10) default NULL,
1613 ) ENGINE=InnoDB DEFAULT CHARSET=utf8");
1615 $dbh->do("INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES('RandomizeHoldsQueueWeight','0','if ON, the holds queue in circulation will be randomized, either based on all location codes, or by the location codes specified in StaticHoldsQueueWeight',NULL,'YesNo')");
1616 $dbh->do("INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES('StaticHoldsQueueWeight','0','Specify a list of library location codes separated by commas -- the list of codes will be traversed and weighted with first values given higher weight for holds fulfillment -- alternatively, if RandomizeHoldsQueueWeight is set, the list will be randomly selective',NULL,'TextArea')");
1618 print "Upgrade to $DBversion done (Table structure for table `tmp_holdsqueue`)\n";
1619 SetVersion ($DBversion);
1622 $DBversion = "3.00.00.087";
1623 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
1624 $dbh->do("INSERT INTO `systempreferences` VALUES ('AutoEmailOpacUser','0','','Sends notification emails containing new account details to patrons - when account is created.','YesNo')" );
1625 $dbh->do("INSERT INTO `systempreferences` VALUES ('AutoEmailPrimaryAddress','OFF','email|emailpro|B_email|cardnumber|OFF','Defines the default email address where Account Details emails are sent.','Choice')");
1626 print "Upgrade to $DBversion done (added 2 new 'AutoEmailOpacUser' sysprefs)\n";
1627 SetVersion ($DBversion);
1630 $DBversion = "3.00.00.088";
1631 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
1632 $dbh->do("INSERT INTO `systempreferences` (variable,value,options,explanation,type) VALUES ('OPACShelfBrowser','1','','Enable/disable Shelf Browser on item details page','YesNo')");
1633 $dbh->do("INSERT INTO `systempreferences` (variable,value,options,explanation,type) VALUES ('OPACItemHolds','1','Allow OPAC users to place hold on specific items. If OFF, users can only request next available copy.','','YesNo')");
1634 $dbh->do("INSERT INTO `systempreferences` (variable,value,options,explanation,type) VALUES ('XSLTDetailsDisplay','0','','Enable XSL stylesheet control over details page display on OPAC WARNING: MARC21 Only','YesNo')");
1635 $dbh->do("INSERT INTO `systempreferences` (variable,value,options,explanation,type) VALUES ('XSLTResultsDisplay','0','','Enable XSL stylesheet control over results page display on OPAC WARNING: MARC21 Only','YesNo')");
1636 print "Upgrade to $DBversion done (added 2 new 'AutoEmailOpacUser' sysprefs)\n";
1637 SetVersion ($DBversion);
1640 $DBversion = "3.00.00.089";
1641 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
1642 $dbh->do("INSERT INTO `systempreferences` (variable,value,options,explanation,type) VALUES('AdvancedSearchTypes','itemtypes','itemtypes|ccode','Select which set of fields comprise the Type limit in the advanced search','Choice')");
1643 print "Upgrade to $DBversion done (added new AdvancedSearchTypes syspref)\n";
1644 SetVersion ($DBversion);
1647 $DBversion = "3.00.00.090";
1648 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
1650 CREATE TABLE `branch_borrower_circ_rules` (
1651 `branchcode` VARCHAR(10) NOT NULL,
1652 `categorycode` VARCHAR(10) NOT NULL,
1653 `maxissueqty` int(4) default NULL,
1654 PRIMARY KEY (`categorycode`, `branchcode`),
1655 CONSTRAINT `branch_borrower_circ_rules_ibfk_1` FOREIGN KEY (`categorycode`) REFERENCES `categories` (`categorycode`)
1656 ON DELETE CASCADE ON UPDATE CASCADE,
1657 CONSTRAINT `branch_borrower_circ_rules_ibfk_2` FOREIGN KEY (`branchcode`) REFERENCES `branches` (`branchcode`)
1658 ON DELETE CASCADE ON UPDATE CASCADE
1659 ) ENGINE=InnoDB DEFAULT CHARSET=utf8
1662 CREATE TABLE `default_borrower_circ_rules` (
1663 `categorycode` VARCHAR(10) NOT NULL,
1664 `maxissueqty` int(4) default NULL,
1665 PRIMARY KEY (`categorycode`),
1666 CONSTRAINT `borrower_borrower_circ_rules_ibfk_1` FOREIGN KEY (`categorycode`) REFERENCES `categories` (`categorycode`)
1667 ON DELETE CASCADE ON UPDATE CASCADE
1668 ) ENGINE=InnoDB DEFAULT CHARSET=utf8
1671 CREATE TABLE `default_branch_circ_rules` (
1672 `branchcode` VARCHAR(10) NOT NULL,
1673 `maxissueqty` int(4) default NULL,
1674 PRIMARY KEY (`branchcode`),
1675 CONSTRAINT `default_branch_circ_rules_ibfk_1` FOREIGN KEY (`branchcode`) REFERENCES `branches` (`branchcode`)
1676 ON DELETE CASCADE ON UPDATE CASCADE
1677 ) ENGINE=InnoDB DEFAULT CHARSET=utf8
1680 CREATE TABLE `default_circ_rules` (
1681 `singleton` enum('singleton') NOT NULL default 'singleton',
1682 `maxissueqty` int(4) default NULL,
1683 PRIMARY KEY (`singleton`)
1684 ) ENGINE=InnoDB DEFAULT CHARSET=utf8
1686 print "Upgrade to $DBversion done (added several circ rules tables)\n";
1687 SetVersion ($DBversion);
1691 $DBversion = "3.00.00.091";
1692 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
1693 $dbh->do(<<'END_SQL');
1694 ALTER TABLE borrowers
1695 ADD `smsalertnumber` varchar(50) default NULL
1698 $dbh->do(<<'END_SQL');
1699 CREATE TABLE `message_attributes` (
1700 `message_attribute_id` int(11) NOT NULL auto_increment,
1701 `message_name` varchar(20) NOT NULL default '',
1702 `takes_days` tinyint(1) NOT NULL default '0',
1703 PRIMARY KEY (`message_attribute_id`),
1704 UNIQUE KEY `message_name` (`message_name`)
1705 ) ENGINE=InnoDB DEFAULT CHARSET=utf8
1708 $dbh->do(<<'END_SQL');
1709 CREATE TABLE `message_transport_types` (
1710 `message_transport_type` varchar(20) NOT NULL,
1711 PRIMARY KEY (`message_transport_type`)
1712 ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
1715 $dbh->do(<<'END_SQL');
1716 CREATE TABLE `message_transports` (
1717 `message_attribute_id` int(11) NOT NULL,
1718 `message_transport_type` varchar(20) NOT NULL,
1719 `is_digest` tinyint(1) NOT NULL default '0',
1720 `letter_module` varchar(20) NOT NULL default '',
1721 `letter_code` varchar(20) NOT NULL default '',
1722 PRIMARY KEY (`message_attribute_id`,`message_transport_type`,`is_digest`),
1723 KEY `message_transport_type` (`message_transport_type`),
1724 KEY `letter_module` (`letter_module`,`letter_code`),
1725 CONSTRAINT `message_transports_ibfk_1` FOREIGN KEY (`message_attribute_id`) REFERENCES `message_attributes` (`message_attribute_id`) ON DELETE CASCADE ON UPDATE CASCADE,
1726 CONSTRAINT `message_transports_ibfk_2` FOREIGN KEY (`message_transport_type`) REFERENCES `message_transport_types` (`message_transport_type`) ON DELETE CASCADE ON UPDATE CASCADE,
1727 CONSTRAINT `message_transports_ibfk_3` FOREIGN KEY (`letter_module`, `letter_code`) REFERENCES `letter` (`module`, `code`) ON DELETE CASCADE ON UPDATE CASCADE
1728 ) ENGINE=InnoDB DEFAULT CHARSET=utf8
1731 $dbh->do(<<'END_SQL');
1732 CREATE TABLE `borrower_message_preferences` (
1733 `borrower_message_preference_id` int(11) NOT NULL auto_increment,
1734 `borrowernumber` int(11) NOT NULL default '0',
1735 `message_attribute_id` int(11) default '0',
1736 `days_in_advance` int(11) default '0',
1737 `wants_digets` tinyint(1) NOT NULL default '0',
1738 PRIMARY KEY (`borrower_message_preference_id`),
1739 KEY `borrowernumber` (`borrowernumber`),
1740 KEY `message_attribute_id` (`message_attribute_id`),
1741 CONSTRAINT `borrower_message_preferences_ibfk_1` FOREIGN KEY (`borrowernumber`) REFERENCES `borrowers` (`borrowernumber`) ON DELETE CASCADE ON UPDATE CASCADE,
1742 CONSTRAINT `borrower_message_preferences_ibfk_2` FOREIGN KEY (`message_attribute_id`) REFERENCES `message_attributes` (`message_attribute_id`) ON DELETE CASCADE ON UPDATE CASCADE
1743 ) ENGINE=InnoDB DEFAULT CHARSET=utf8
1746 $dbh->do(<<'END_SQL');
1747 CREATE TABLE `borrower_message_transport_preferences` (
1748 `borrower_message_preference_id` int(11) NOT NULL default '0',
1749 `message_transport_type` varchar(20) NOT NULL default '0',
1750 PRIMARY KEY (`borrower_message_preference_id`,`message_transport_type`),
1751 KEY `message_transport_type` (`message_transport_type`),
1752 CONSTRAINT `borrower_message_transport_preferences_ibfk_1` FOREIGN KEY (`borrower_message_preference_id`) REFERENCES `borrower_message_preferences` (`borrower_message_preference_id`) ON DELETE CASCADE ON UPDATE CASCADE,
1753 CONSTRAINT `borrower_message_transport_preferences_ibfk_2` FOREIGN KEY (`message_transport_type`) REFERENCES `message_transport_types` (`message_transport_type`) ON DELETE CASCADE ON UPDATE CASCADE
1754 ) ENGINE=InnoDB DEFAULT CHARSET=utf8
1757 $dbh->do(<<'END_SQL');
1758 CREATE TABLE `message_queue` (
1759 `message_id` int(11) NOT NULL auto_increment,
1760 `borrowernumber` int(11) NOT NULL,
1763 `message_transport_type` varchar(20) NOT NULL,
1764 `status` enum('sent','pending','failed','deleted') NOT NULL default 'pending',
1765 `time_queued` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
1766 KEY `message_id` (`message_id`),
1767 KEY `borrowernumber` (`borrowernumber`),
1768 KEY `message_transport_type` (`message_transport_type`),
1769 CONSTRAINT `messageq_ibfk_1` FOREIGN KEY (`borrowernumber`) REFERENCES `borrowers` (`borrowernumber`) ON DELETE CASCADE ON UPDATE CASCADE,
1770 CONSTRAINT `messageq_ibfk_2` FOREIGN KEY (`message_transport_type`) REFERENCES `message_transport_types` (`message_transport_type`) ON DELETE RESTRICT ON UPDATE CASCADE
1771 ) ENGINE=InnoDB DEFAULT CHARSET=utf8
1774 $dbh->do(<<'END_SQL');
1775 INSERT INTO `systempreferences`
1776 (variable,value,explanation,options,type)
1778 ('EnhancedMessagingPreferences',0,'If ON, allows patrons to select to receive additional messages about items due or nearly due.','','YesNo')
1781 $dbh->do( <<'END_SQL');
1782 INSERT INTO `letter`
1783 (module, code, name, title, content)
1785 ('circulation','DUE','Item Due Reminder','Item Due Reminder','Dear <<borrowers.firstname>> <<borrowers.surname>>,\r\n\r\nThe following item is now due:\r\n\r\n<<biblio.title>> by <<biblio.author>>'),
1786 ('circulation','DUEDGST','Item Due Reminder (Digest)','Item Due Reminder','You have <<count>> items due'),
1787 ('circulation','PREDUE','Advance Notice of Item Due','Advance Notice of Item Due','Dear <<borrowers.firstname>> <<borrowers.surname>>,\r\n\r\nThe following item will be due soon:\r\n\r\n<<biblio.title>> by <<biblio.author>>'),
1788 ('circulation','PREDUEDGST','Advance Notice of Item Due (Digest)','Advance Notice of Item Due','You have <<count>> items due soon'),
1789 ('circulation','EVENT','Upcoming Library Event','Upcoming Library Event','Dear <<borrowers.firstname>> <<borrowers.surname>>,\r\n\r\nThis is a reminder of an upcoming library event in which you have expressed interest.');
1793 'installer/data/mysql/en/mandatory/message_transport_types.sql',
1794 'installer/data/mysql/en/optional/sample_notices_message_attributes.sql',
1795 'installer/data/mysql/en/optional/sample_notices_message_transports.sql',
1798 my $installer = C4::Installer->new();
1799 foreach my $script ( @sql_scripts ) {
1800 my $full_path = $installer->get_file_path_from_name($script);
1801 my $error = $installer->load_sql($full_path);
1802 warn $error if $error;
1805 print "Upgrade to $DBversion done (Table structure for table `message_queue`, `message_transport_types`, `message_attributes`, `message_transports`, `borrower_message_preferences`, and `borrower_message_transport_preferences`. Alter `borrowers` table,\n";
1806 SetVersion ($DBversion);
1809 $DBversion = "3.00.00.092";
1810 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
1811 $dbh->do("INSERT INTO `systempreferences` (variable,value,options,explanation,type) VALUES('AllowOnShelfHolds', '0', '', 'Allow hold requests to be placed on items that are not on loan', 'YesNo')");
1812 $dbh->do("INSERT INTO `systempreferences` (variable,value,options,explanation,type) VALUES('AllowHoldsOnDamagedItems', '1', '', 'Allow hold requests to be placed on damaged items', 'YesNo')");
1813 print "Upgrade to $DBversion done (added new AllowOnShelfHolds syspref)\n";
1814 SetVersion ($DBversion);
1817 $DBversion = "3.00.00.093";
1818 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
1819 $dbh->do("ALTER TABLE `items` MODIFY COLUMN `copynumber` VARCHAR(32) DEFAULT NULL");
1820 $dbh->do("ALTER TABLE `deleteditems` MODIFY COLUMN `copynumber` VARCHAR(32) DEFAULT NULL");
1821 print "Upgrade to $DBversion done (Change data type of items.copynumber to allow free text)\n";
1822 SetVersion ($DBversion);
1825 $DBversion = "3.00.00.094";
1826 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
1827 $dbh->do("ALTER TABLE `marc_subfield_structure` MODIFY `tagsubfield` VARCHAR(1) NOT NULL DEFAULT '' COLLATE utf8_bin");
1828 print "Upgrade to $DBversion done (Change Collation of marc_subfield_structure to allow mixed case in subfield labels.)\n";
1829 SetVersion ($DBversion);
1832 $DBversion = "3.00.00.095";
1833 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
1834 if (C4::Context->preference("marcflavour") eq 'MARC21') {
1835 $dbh->do("UPDATE marc_subfield_structure SET authtypecode = 'MEETI_NAME' WHERE authtypecode = 'Meeting Name'");
1836 $dbh->do("UPDATE marc_subfield_structure SET authtypecode = 'CORPO_NAME' WHERE authtypecode = 'CORP0_NAME'");
1838 print "Upgrade to $DBversion done (fix invalid authority types in MARC21 frameworks [bug 2254])\n";
1839 SetVersion ($DBversion);
1842 $DBversion = "3.00.00.096";
1843 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
1844 $sth = $dbh->prepare("SHOW COLUMNS FROM borrower_message_preferences LIKE 'wants_digets'");
1846 if (my $row = $sth->fetchrow_hashref) {
1847 $dbh->do("ALTER TABLE borrower_message_preferences CHANGE wants_digets wants_digest tinyint(1) NOT NULL default 0");
1849 print "Upgrade to $DBversion done (fix name borrower_message_preferences.wants_digest)\n";
1850 SetVersion ($DBversion);
1853 $DBversion = '3.00.00.097';
1854 if ( C4::Context->preference('Version') < TransformToNum($DBversion) ) {
1856 $dbh->do('ALTER TABLE message_queue ADD to_address mediumtext default NULL');
1857 $dbh->do('ALTER TABLE message_queue ADD from_address mediumtext default NULL');
1858 $dbh->do('ALTER TABLE message_queue ADD content_type text');
1859 $dbh->do('ALTER TABLE message_queue CHANGE borrowernumber borrowernumber int(11) default NULL');
1861 print "Upgrade to $DBversion done (updating 4 fields in message_queue table)\n";
1862 SetVersion($DBversion);
1865 $DBversion = '3.00.00.098';
1866 if ( C4::Context->preference('Version') < TransformToNum($DBversion) ) {
1868 $dbh->do(q(DELETE FROM message_transport_types WHERE message_transport_type = 'rss'));
1869 $dbh->do(q(DELETE FROM message_transports WHERE message_transport_type = 'rss'));
1871 print "Upgrade to $DBversion done (removing unused RSS message_transport_type)\n";
1872 SetVersion($DBversion);
1875 $DBversion = '3.00.00.099';
1876 if ( C4::Context->preference('Version') < TransformToNum($DBversion) ) {
1877 $dbh->do("INSERT INTO systempreferences (variable,value,options,explanation,type) VALUES('OpacSuppression', '0', '', 'Turn ON the OPAC Suppression feature, requires further setup, ask your system administrator for details', 'YesNo')");
1878 print "Upgrade to $DBversion done (Adding OpacSuppression syspref)\n";
1879 SetVersion($DBversion);
1882 $DBversion = '3.00.00.100';
1883 if ( C4::Context->preference('Version') < TransformToNum($DBversion) ) {
1884 $dbh->do('ALTER TABLE virtualshelves ADD COLUMN lastmodified timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP');
1885 print "Upgrade to $DBversion done (Adding lastmodified column to virtualshelves)\n";
1886 SetVersion($DBversion);
1889 $DBversion = '3.00.00.101';
1890 if ( C4::Context->preference('Version') < TransformToNum($DBversion) ) {
1891 $dbh->do('ALTER TABLE `overduerules` CHANGE `categorycode` `categorycode` VARCHAR(10) NOT NULL');
1892 $dbh->do('ALTER TABLE `deletedborrowers` CHANGE `categorycode` `categorycode` VARCHAR(10) NOT NULL');
1893 print "Upgrade to $DBversion done (Updating columnd definitions for patron category codes in notice/statsu triggers and deletedborrowers tables.)\n";
1894 SetVersion($DBversion);
1897 $DBversion = '3.00.00.102';
1898 if ( C4::Context->preference('Version') < TransformToNum($DBversion) ) {
1899 $dbh->do('ALTER TABLE serialitems MODIFY `serialid` int(11) NOT NULL AFTER itemnumber' );
1900 $dbh->do('ALTER TABLE serialitems DROP KEY serialididx' );
1901 $dbh->do('ALTER TABLE serialitems ADD CONSTRAINT UNIQUE KEY serialitemsidx (itemnumber)' );
1902 # before setting constraint, delete any unvalid data
1903 $dbh->do('DELETE from serialitems WHERE serialid not in (SELECT serial.serialid FROM serial)');
1904 $dbh->do('ALTER TABLE serialitems ADD CONSTRAINT serialitems_sfk_1 FOREIGN KEY (serialid) REFERENCES serial (serialid) ON DELETE CASCADE ON UPDATE CASCADE' );
1905 print "Upgrade to $DBversion done (Updating serialitems table to allow for multiple items per serial fixing kohabug 2380)\n";
1906 SetVersion($DBversion);
1909 $DBversion = "3.00.00.103";
1910 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
1911 $dbh->do("DELETE FROM systempreferences WHERE variable='serialsadditems'");
1912 print "Upgrade to $DBversion done ( Verifying the removal of serialsadditems from syspref fixing kohabug 2219)\n";
1913 SetVersion ($DBversion);
1916 $DBversion = "3.00.00.104";
1917 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
1918 $dbh->do("DELETE FROM systempreferences WHERE variable='noOPACHolds'");
1919 print "Upgrade to $DBversion done (remove superseded 'noOPACHolds' system preference per bug 2413)\n";
1920 SetVersion ($DBversion);
1923 $DBversion = '3.00.00.105';
1924 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
1926 # it is possible that this syspref is already defined since the feature was added some time ago.
1927 unless ( $dbh->do(q(SELECT variable FROM systempreferences WHERE variable = 'SMSSendDriver')) ) {
1928 $dbh->do(<<'END_SQL');
1929 INSERT INTO `systempreferences`
1930 (variable,value,explanation,options,type)
1932 ('SMSSendDriver','','Sets which SMS::Send driver is used to send SMS messages.','','free')
1935 print "Upgrade to $DBversion done (added SMSSendDriver system preference)\n";
1936 SetVersion($DBversion);
1939 $DBversion = "3.00.00.106";
1940 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
1941 $dbh->do("DELETE FROM systempreferences WHERE variable='noOPACHolds'");
1943 # db revision 105 didn't apply correctly, so we're rolling this into 106
1944 $dbh->do("INSERT INTO `systempreferences`
1945 (variable,value,explanation,options,type)
1947 ('SMSSendDriver','','Sets which SMS::Send driver is used to send SMS messages.','','free')");
1949 print "Upgrade to $DBversion done (remove default '0000-00-00' in subscriptionhistory.enddate field)\n";
1950 $dbh->do("ALTER TABLE `subscriptionhistory` CHANGE `enddate` `enddate` DATE NULL DEFAULT NULL ");
1952 sanitize_zero_date('subscriptionhistory', 'enddate');
1954 SetVersion ($DBversion);
1957 $DBversion = '3.00.00.107';
1958 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
1959 $dbh->do(<<'END_SQL');
1960 UPDATE systempreferences
1961 SET explanation = CONCAT( explanation, '. WARNING: this feature is very resource consuming on collections with large numbers of items.' )
1962 WHERE variable = 'OPACShelfBrowser'
1963 AND explanation NOT LIKE '%WARNING%'
1965 $dbh->do(<<'END_SQL');
1966 UPDATE systempreferences
1967 SET explanation = CONCAT( explanation, '. WARNING: this feature is very resource consuming.' )
1968 WHERE variable = 'CataloguingLog'
1969 AND explanation NOT LIKE '%WARNING%'
1971 $dbh->do(<<'END_SQL');
1972 UPDATE systempreferences
1973 SET explanation = CONCAT( explanation, '. WARNING: using NoZebra on even modest sized collections is very slow.' )
1974 WHERE variable = 'NoZebra'
1975 AND explanation NOT LIKE '%WARNING%'
1977 print "Upgrade to $DBversion done (warning added to OPACShelfBrowser system preference)\n";
1978 SetVersion ($DBversion);
1981 $DBversion = '3.01.00.000';
1982 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
1983 print "Upgrade to $DBversion done (start of 3.1)\n";
1984 SetVersion ($DBversion);
1987 $DBversion = '3.01.00.001';
1988 if ( C4::Context->preference('Version') < TransformToNum($DBversion) ) {
1990 CREATE TABLE hold_fill_targets (
1991 `borrowernumber` int(11) NOT NULL,
1992 `biblionumber` int(11) NOT NULL,
1993 `itemnumber` int(11) NOT NULL,
1994 `source_branchcode` varchar(10) default NULL,
1995 `item_level_request` tinyint(4) NOT NULL default 0,
1996 PRIMARY KEY `itemnumber` (`itemnumber`),
1997 KEY `bib_branch` (`biblionumber`, `source_branchcode`),
1998 CONSTRAINT `hold_fill_targets_ibfk_1` FOREIGN KEY (`borrowernumber`)
1999 REFERENCES `borrowers` (`borrowernumber`) ON DELETE CASCADE ON UPDATE CASCADE,
2000 CONSTRAINT `hold_fill_targets_ibfk_2` FOREIGN KEY (`biblionumber`)
2001 REFERENCES `biblio` (`biblionumber`) ON DELETE CASCADE ON UPDATE CASCADE,
2002 CONSTRAINT `hold_fill_targets_ibfk_3` FOREIGN KEY (`itemnumber`)
2003 REFERENCES `items` (`itemnumber`) ON DELETE CASCADE ON UPDATE CASCADE,
2004 CONSTRAINT `hold_fill_targets_ibfk_4` FOREIGN KEY (`source_branchcode`)
2005 REFERENCES `branches` (`branchcode`) ON DELETE CASCADE ON UPDATE CASCADE
2006 ) ENGINE=InnoDB DEFAULT CHARSET=utf8
2009 ALTER TABLE tmp_holdsqueue
2010 ADD item_level_request tinyint(4) NOT NULL default 0
2013 print "Upgrade to $DBversion done (add hold_fill_targets table and a column to tmp_holdsqueue)\n";
2014 SetVersion($DBversion);
2017 $DBversion = '3.01.00.002';
2018 if ( C4::Context->preference('Version') < TransformToNum($DBversion) ) {
2019 # use statistics where available
2021 ALTER TABLE statistics ADD KEY tmp_stats (type, itemnumber, borrowernumber)
2026 SELECT max(datetime)
2028 WHERE type = 'issue'
2029 AND itemnumber = iss.itemnumber
2030 AND borrowernumber = iss.borrowernumber
2032 WHERE issuedate IS NULL;
2034 $dbh->do("ALTER TABLE statistics DROP KEY tmp_stats");
2036 # default to last renewal date
2039 SET issuedate = lastreneweddate
2040 WHERE issuedate IS NULL
2041 and lastreneweddate IS NOT NULL
2044 my $num_bad_issuedates = $dbh->selectrow_array("SELECT COUNT(*) FROM issues WHERE issuedate IS NULL");
2045 if ($num_bad_issuedates > 0) {
2046 print STDERR "After the upgrade to $DBversion, there are still $num_bad_issuedates loan(s) with a NULL (blank) loan date. ",
2047 "Please check the issues table in your database.";
2049 print "Upgrade to $DBversion done (bug 2582: set null issues.issuedate to lastreneweddate)\n";
2050 SetVersion($DBversion);
2053 $DBversion = "3.01.00.003";
2054 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
2055 $dbh->do("INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES('AllowRenewalLimitOverride', '0', 'if ON, allows renewal limits to be overridden on the circulation screen',NULL,'YesNo')");
2056 print "Upgrade to $DBversion done (add new syspref)\n";
2057 SetVersion ($DBversion);
2060 $DBversion = '3.01.00.004';
2061 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
2062 $dbh->do("INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES ('OPACDisplayRequestPriority','0','Show patrons the priority level on holds in the OPAC','','YesNo')");
2063 print "Upgrade to $DBversion done (added OPACDisplayRequestPriority system preference)\n";
2064 SetVersion ($DBversion);
2067 $DBversion = '3.01.00.005';
2068 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
2070 INSERT INTO `letter` (module, code, name, title, content)
2071 VALUES('reserves', 'HOLD', 'Hold Available for Pickup', 'Hold Available for Pickup at <<branches.branchname>>', 'Dear <<borrowers.firstname>> <<borrowers.surname>>,\r\n\r\nYou have a hold available for pickup as of <<reserves.waitingdate>>:\r\n\r\nTitle: <<biblio.title>>\r\nAuthor: <<biblio.author>>\r\nCopy: <<items.copynumber>>\r\nLocation: <<branches.branchname>>\r\n<<branches.branchaddress1>>\r\n<<branches.branchaddress2>>\r\n<<branches.branchaddress3>>')
2073 $dbh->do("INSERT INTO `message_attributes` (message_attribute_id, message_name, takes_days) values(4, 'Hold Filled', 0)");
2074 $dbh->do("INSERT INTO `message_transports` (message_attribute_id, message_transport_type, is_digest, letter_module, letter_code) values(4, 'sms', 0, 'reserves', 'HOLD')");
2075 $dbh->do("INSERT INTO `message_transports` (message_attribute_id, message_transport_type, is_digest, letter_module, letter_code) values(4, 'email', 0, 'reserves', 'HOLD')");
2076 print "Upgrade to $DBversion done (Add letter for holds notifications)\n";
2077 SetVersion ($DBversion);
2080 $DBversion = '3.01.00.006';
2081 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
2082 $dbh->do("ALTER TABLE `biblioitems` ADD KEY issn (issn)");
2083 print "Upgrade to $DBversion done (add index on biblioitems.issn)\n";
2084 SetVersion ($DBversion);
2087 $DBversion = "3.01.00.007";
2088 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
2089 $dbh->do("UPDATE `systempreferences` SET options='70|10' WHERE variable='intranetmainUserblock'");
2090 $dbh->do("UPDATE `systempreferences` SET options='70|10' WHERE variable='intranetuserjs'");
2091 $dbh->do("UPDATE `systempreferences` SET options='70|10' WHERE variable='opacheader'");
2092 $dbh->do("UPDATE `systempreferences` SET options='70|10' WHERE variable='OpacMainUserBlock'");
2093 $dbh->do("UPDATE `systempreferences` SET options='70|10' WHERE variable='OpacNav'");
2094 $dbh->do("UPDATE `systempreferences` SET options='70|10' WHERE variable='opacuserjs'");
2095 $dbh->do("UPDATE `systempreferences` SET options='30|10', type='Textarea' WHERE variable='OAI-PMH:Set'");
2096 $dbh->do("UPDATE `systempreferences` SET options='50' WHERE variable='intranetstylesheet'");
2097 $dbh->do("UPDATE `systempreferences` SET options='50' WHERE variable='intranetcolorstylesheet'");
2098 $dbh->do("UPDATE `systempreferences` SET options='10' WHERE variable='globalDueDate'");
2099 $dbh->do("UPDATE `systempreferences` SET type='Integer' WHERE variable='numSearchResults'");
2100 $dbh->do("UPDATE `systempreferences` SET type='Integer' WHERE variable='OPACnumSearchResults'");
2101 $dbh->do("UPDATE `systempreferences` SET type='Integer' WHERE variable='ReservesMaxPickupDelay'");
2102 $dbh->do("UPDATE `systempreferences` SET type='Integer' WHERE variable='TransfersMaxDaysWarning'");
2103 $dbh->do("UPDATE `systempreferences` SET type='Integer' WHERE variable='StaticHoldsQueueWeight'");
2104 $dbh->do("UPDATE `systempreferences` SET type='Integer' WHERE variable='holdCancelLength'");
2105 $dbh->do("UPDATE `systempreferences` SET type='Integer' WHERE variable='XISBNDailyLimit'");
2106 $dbh->do("UPDATE `systempreferences` SET type='Float' WHERE variable='gist'");
2107 $dbh->do("UPDATE `systempreferences` SET type='Free' WHERE variable='BakerTaylorUsername'");
2108 $dbh->do("UPDATE `systempreferences` SET type='Free' WHERE variable='BakerTaylorPassword'");
2109 $dbh->do("UPDATE `systempreferences` SET type='Textarea', options='70|10' WHERE variable='ISBD'");
2110 $dbh->do("UPDATE `systempreferences` SET type='Textarea', options='70|10', explanation='Enter a specific hash for NoZebra indexes. Enter : \\\'indexname\\\' => \\\'100a,245a,500*\\\',\\\'index2\\\' => \\\'...\\\'' WHERE variable='NoZebraIndexes'");
2111 print "Upgrade to $DBversion done (fix display of many sysprefs)\n";
2112 SetVersion ($DBversion);
2115 $DBversion = '3.01.00.008';
2116 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
2118 $dbh->do("CREATE TABLE branch_transfer_limits (
2119 limitId int(8) NOT NULL auto_increment,
2120 toBranch varchar(4) NOT NULL,
2121 fromBranch varchar(4) NOT NULL,
2122 itemtype varchar(4) NOT NULL,
2123 PRIMARY KEY (limitId)
2124 ) ENGINE=InnoDB DEFAULT CHARSET=utf8"
2127 $dbh->do("INSERT INTO `systempreferences` ( `variable` , `value` , `options` , `explanation` , `type` ) VALUES ( 'UseBranchTransferLimits', '0', '', 'If ON, Koha will will use the rules defined in branch_transfer_limits to decide if an item transfer should be allowed.', 'YesNo')");
2129 print "Upgrade to $DBversion done (added branch_transfer_limits table and UseBranchTransferLimits system preference)\n";
2130 SetVersion ($DBversion);
2133 $DBversion = "3.01.00.009";
2134 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
2135 $dbh->do("ALTER TABLE permissions MODIFY `code` varchar(64) DEFAULT NULL");
2136 $dbh->do("ALTER TABLE user_permissions MODIFY `code` varchar(64) DEFAULT NULL");
2137 $dbh->do("INSERT INTO permissions (module_bit, code, description) VALUES ( 1, 'circulate_remaining_permissions', 'Remaining circulation permissions')");
2138 $dbh->do("INSERT INTO permissions (module_bit, code, description) VALUES ( 1, 'override_renewals', 'Override blocked renewals')");
2139 print "Upgrade to $DBversion done (added subpermissions for circulate permission)\n";
2142 $DBversion = '3.01.00.010';
2143 if ( C4::Context->preference('Version') < TransformToNum($DBversion) ) {
2144 $dbh->do("ALTER TABLE `borrower_attributes` MODIFY COLUMN `attribute` VARCHAR(64) DEFAULT NULL");
2145 $dbh->do("ALTER TABLE `borrower_attributes` MODIFY COLUMN `password` VARCHAR(64) DEFAULT NULL");
2146 print "Upgrade to $DBversion done (bug 2687: increase length of borrower attribute fields)\n";
2147 SetVersion ($DBversion);
2150 $DBversion = '3.01.00.011';
2151 if ( C4::Context->preference('Version') < TransformToNum($DBversion) ) {
2153 # Yes, the old value was ^M terminated.
2154 my $bad_value = "function prepareEmailPopup(){\r\n if (!document.getElementById) return false;\r\n if (!document.getElementById('reserveemail')) return false;\r\n rsvlink = document.getElementById('reserveemail');\r\n rsvlink.onclick = function() {\r\n doReservePopup();\r\n return false;\r\n }\r\n}\r\n\r\nfunction doReservePopup(){\r\n}\r\n\r\nfunction prepareReserveList(){\r\n}\r\n\r\naddLoadEvent(prepareEmailPopup);\r\naddLoadEvent(prepareReserveList);";
2156 my $intranetuserjs = C4::Context->preference('intranetuserjs');
2157 if ($intranetuserjs and $intranetuserjs eq $bad_value) {
2158 my $sql = <<'END_SQL';
2159 UPDATE systempreferences
2161 WHERE variable = 'intranetuserjs'
2165 print "Upgrade to $DBversion done (removed bogus intranetuserjs syspref)\n";
2166 SetVersion($DBversion);
2169 $DBversion = "3.01.00.012";
2170 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
2171 $dbh->do("INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES('AllowHoldPolicyOverride', '0', 'Allow staff to override hold policies when placing holds',NULL,'YesNo')");
2173 CREATE TABLE `branch_item_rules` (
2174 `branchcode` varchar(10) NOT NULL,
2175 `itemtype` varchar(10) NOT NULL,
2176 `holdallowed` tinyint(1) default NULL,
2177 PRIMARY KEY (`itemtype`,`branchcode`),
2178 KEY `branch_item_rules_ibfk_2` (`branchcode`),
2179 CONSTRAINT `branch_item_rules_ibfk_1` FOREIGN KEY (`itemtype`) REFERENCES `itemtypes` (`itemtype`) ON DELETE CASCADE ON UPDATE CASCADE,
2180 CONSTRAINT `branch_item_rules_ibfk_2` FOREIGN KEY (`branchcode`) REFERENCES `branches` (`branchcode`) ON DELETE CASCADE ON UPDATE CASCADE
2181 ) ENGINE=InnoDB DEFAULT CHARSET=utf8
2184 CREATE TABLE `default_branch_item_rules` (
2185 `itemtype` varchar(10) NOT NULL,
2186 `holdallowed` tinyint(1) default NULL,
2187 PRIMARY KEY (`itemtype`),
2188 CONSTRAINT `default_branch_item_rules_ibfk_1` FOREIGN KEY (`itemtype`) REFERENCES `itemtypes` (`itemtype`) ON DELETE CASCADE ON UPDATE CASCADE
2189 ) ENGINE=InnoDB DEFAULT CHARSET=utf8
2192 ALTER TABLE default_branch_circ_rules
2193 ADD COLUMN holdallowed tinyint(1) NULL
2196 ALTER TABLE default_circ_rules
2197 ADD COLUMN holdallowed tinyint(1) NULL
2199 print "Upgrade to $DBversion done (Add tables and system preferences for holds policies)\n";
2200 SetVersion ($DBversion);
2203 $DBversion = '3.01.00.013';
2204 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
2206 CREATE TABLE item_circulation_alert_preferences (
2207 id int(11) AUTO_INCREMENT,
2208 branchcode varchar(10) NOT NULL,
2209 categorycode varchar(10) NOT NULL,
2210 item_type varchar(10) NOT NULL,
2211 notification varchar(16) NOT NULL,
2213 KEY (branchcode, categorycode, item_type, notification)
2214 ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
2217 $dbh->do(q{ ALTER TABLE `message_queue` ADD metadata text DEFAULT NULL AFTER content; });
2218 $dbh->do(q{ ALTER TABLE `message_queue` ADD letter_code varchar(64) DEFAULT NULL AFTER metadata; });
2221 INSERT INTO `letter` (`module`, `code`, `name`, `title`, `content`) VALUES
2222 ('circulation','CHECKIN','Item Check-in','Check-ins','The following items have been checked in:\r\n----\r\n<<biblio.title>>\r\n----\r\nThank you.');
2225 INSERT INTO `letter` (`module`, `code`, `name`, `title`, `content`) VALUES
2226 ('circulation','CHECKOUT','Item Checkout','Checkouts','The following items have been checked out:\r\n----\r\n<<biblio.title>>\r\n----\r\nThank you for visiting <<branches.branchname>>.');
2229 $dbh->do(q{INSERT INTO message_attributes (message_attribute_id, message_name, takes_days) VALUES (5, 'Item Check-in', 0);});
2230 $dbh->do(q{INSERT INTO message_attributes (message_attribute_id, message_name, takes_days) VALUES (6, 'Item Checkout', 0);});
2232 $dbh->do(q{INSERT INTO message_transports (message_attribute_id, message_transport_type, is_digest, letter_module, letter_code) VALUES (5, 'email', 0, 'circulation', 'CHECKIN');});
2233 $dbh->do(q{INSERT INTO message_transports (message_attribute_id, message_transport_type, is_digest, letter_module, letter_code) VALUES (5, 'sms', 0, 'circulation', 'CHECKIN');});
2234 $dbh->do(q{INSERT INTO message_transports (message_attribute_id, message_transport_type, is_digest, letter_module, letter_code) VALUES (6, 'email', 0, 'circulation', 'CHECKOUT');});
2235 $dbh->do(q{INSERT INTO message_transports (message_attribute_id, message_transport_type, is_digest, letter_module, letter_code) VALUES (6, 'sms', 0, 'circulation', 'CHECKOUT');});
2237 print "Upgrade to $DBversion done (data for Email Checkout Slips project)\n";
2238 SetVersion ($DBversion);
2241 $DBversion = "3.01.00.014";
2242 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
2243 $dbh->do("ALTER TABLE `branch_transfer_limits` CHANGE `itemtype` `itemtype` VARCHAR( 4 ) CHARACTER SET utf8 COLLATE utf8_general_ci NULL");
2244 $dbh->do("ALTER TABLE `branch_transfer_limits` ADD `ccode` VARCHAR( 10 ) NULL ;");
2245 $dbh->do("INSERT INTO `systempreferences` ( `variable` , `value` , `options` , `explanation` , `type` )
2247 'BranchTransferLimitsType', 'ccode', 'itemtype|ccode', 'When using branch transfer limits, choose whether to limit by itemtype or collection code.', 'Choice'
2250 print "Upgrade to $DBversion done ( Updated table for Branch Transfer Limits)\n";
2251 SetVersion ($DBversion);
2254 $DBversion = '3.01.00.015';
2255 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
2256 $dbh->do("INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES ('SyndeticsClientCode', '0', 'Client Code for using Syndetics Solutions content','','free')");
2258 $dbh->do("INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES ('SyndeticsEnabled', '0', 'Turn on Syndetics Enhanced Content','','YesNo')");
2260 $dbh->do("INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES ('SyndeticsCoverImages', '0', 'Display Cover Images from Syndetics','','YesNo')");
2262 $dbh->do("INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES ('SyndeticsTOC', '0', 'Display Table of Content information from Syndetics','','YesNo')");
2264 $dbh->do("INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES ('SyndeticsSummary', '0', 'Display Summary Information from Syndetics','','YesNo')");
2266 $dbh->do("INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES ('SyndeticsEditions', '0', 'Display Editions from Syndetics','','YesNo')");
2268 $dbh->do("INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES ('SyndeticsExcerpt', '0', 'Display Excerpts and first chapters on OPAC from Syndetics','','YesNo')");
2270 $dbh->do("INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES ('SyndeticsReviews', '0', 'Display Reviews on OPAC from Syndetics','','YesNo')");
2272 $dbh->do("INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES ('SyndeticsAuthorNotes', '0', 'Display Notes about the Author on OPAC from Syndetics','','YesNo')");
2274 $dbh->do("INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES ('SyndeticsAwards', '0', 'Display Awards on OPAC from Syndetics','','YesNo')");
2276 $dbh->do("INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES ('SyndeticsSeries', '0', 'Display Series information on OPAC from Syndetics','','YesNo')");
2278 $dbh->do("INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES ('SyndeticsCoverImageSize', 'MC', 'Choose the size of the Syndetics Cover Image to display on the OPAC detail page, MC is Medium, LC is Large','MC|LC','Choice')");
2280 $dbh->do("INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES ('OPACAmazonCoverImages', '0', 'Display cover images on OPAC from Amazon Web Services','','YesNo')");
2282 $dbh->do("INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES ('AmazonCoverImages', '0', 'Display Cover Images in Staff Client from Amazon Web Services','','YesNo')");
2284 $dbh->do("UPDATE systempreferences SET variable='AmazonEnabled' WHERE variable = 'AmazonContent'");
2286 $dbh->do("UPDATE systempreferences SET variable='OPACAmazonEnabled' WHERE variable = 'OPACAmazonContent'");
2288 print "Upgrade to $DBversion done (added Syndetics Enhanced Content system preferences)\n";
2289 SetVersion ($DBversion);
2292 $DBversion = "3.01.00.016";
2293 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
2294 $dbh->do("INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('Babeltheque',0,'Turn ON Babeltheque content - See babeltheque.com to subscribe to this service','','YesNo')");
2295 print "Upgrade to $DBversion done (Added Babeltheque syspref)\n";
2296 SetVersion ($DBversion);
2299 $DBversion = "3.01.00.017";
2300 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
2301 $dbh->do("ALTER TABLE `subscription` ADD `staffdisplaycount` VARCHAR(10) NULL;");
2302 $dbh->do("ALTER TABLE `subscription` ADD `opacdisplaycount` VARCHAR(10) NULL;");
2303 $dbh->do("INSERT INTO `systempreferences` ( `variable` , `value` , `options` , `explanation` , `type` )
2305 'StaffSerialIssueDisplayCount', '3', '', 'Number of serial issues to display per subscription in the Staff client', 'Integer'
2307 $dbh->do("INSERT INTO `systempreferences` ( `variable` , `value` , `options` , `explanation` , `type` )
2309 'OPACSerialIssueDisplayCount', '3', '', 'Number of serial issues to display per subscription in the OPAC', 'Integer'
2312 print "Upgrade to $DBversion done ( Updated table for Serials Display)\n";
2313 SetVersion ($DBversion);
2316 $DBversion = "3.01.00.018";
2317 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
2318 $dbh->do("ALTER TABLE deletedborrowers ADD `smsalertnumber` varchar(50) default NULL");
2319 print "Upgrade to $DBversion done (added deletedborrowers.smsalertnumber, missed in 3.00.00.091)\n";
2320 SetVersion ($DBversion);
2323 $DBversion = "3.01.00.019";
2324 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
2325 $dbh->do("INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('OPACShowCheckoutName','0','Displays in the OPAC the name of patron who has checked out the material. WARNING: Most sites should leave this off. It is intended for corporate or special sites which need to track who has the item.','','YesNo')");
2326 print "Upgrade to $DBversion done (adding OPACShowCheckoutName systempref)\n";
2327 SetVersion ($DBversion);
2330 $DBversion = "3.01.00.020";
2331 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
2332 $dbh->do("INSERT INTO systempreferences (variable,value,explanation,options,type)VALUES('LibraryThingForLibrariesID','','See:http://librarything.com/forlibraries/','','free')");
2333 $dbh->do("INSERT INTO systempreferences (variable,value,explanation,options,type)VALUES('LibraryThingForLibrariesEnabled','0','Enable or Disable Library Thing for Libraries Features','','YesNo')");
2334 $dbh->do("INSERT INTO systempreferences (variable,value,explanation,options,type)VALUES('LibraryThingForLibrariesTabbedView','0','Put LibraryThingForLibraries Content in Tabs.','','YesNo')");
2335 print "Upgrade to $DBversion done (adding LibraryThing for Libraries sysprefs)\n";
2336 SetVersion ($DBversion);
2339 $DBversion = "3.01.00.021";
2340 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
2341 my $enable_reviews = C4::Context->preference('OPACAmazonEnabled') ? '1' : '0';
2342 $dbh->do("INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES ('OPACAmazonReviews', '$enable_reviews', 'Display Amazon readers reviews on OPAC','','YesNo')");
2343 print "Upgrade to $DBversion done (adding OPACAmazonReviews syspref)\n";
2344 SetVersion ($DBversion);
2347 $DBversion = '3.01.00.022';
2348 if ( C4::Context->preference('Version') < TransformToNum($DBversion) ) {
2349 $dbh->do("ALTER TABLE `labels_conf` MODIFY COLUMN `formatstring` mediumtext DEFAULT NULL");
2350 print "Upgrade to $DBversion done (bug 2945: increase size of labels_conf.formatstring)\n";
2351 SetVersion ($DBversion);
2354 $DBversion = '3.01.00.023';
2355 if ( C4::Context->preference('Version') < TransformToNum($DBversion) ) {
2356 $dbh->do("ALTER TABLE biblioitems MODIFY COLUMN isbn VARCHAR(30) DEFAULT NULL");
2357 $dbh->do("ALTER TABLE deletedbiblioitems MODIFY COLUMN isbn VARCHAR(30) DEFAULT NULL");
2358 $dbh->do("ALTER TABLE import_biblios MODIFY COLUMN isbn VARCHAR(30) DEFAULT NULL");
2359 $dbh->do("ALTER TABLE suggestions MODIFY COLUMN isbn VARCHAR(30) DEFAULT NULL");
2360 print "Upgrade to $DBversion done (bug 2765: increase width of isbn column in several tables)\n";
2361 SetVersion ($DBversion);
2364 $DBversion = "3.01.00.024";
2365 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
2366 $dbh->do("ALTER TABLE labels MODIFY COLUMN batch_id int(10) NOT NULL default 1;");
2367 print "Upgrade to $DBversion done (change labels.batch_id from varchar to int)\n";
2368 SetVersion ($DBversion);
2371 $DBversion = '3.01.00.025';
2372 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
2373 $dbh->do("INSERT INTO `systempreferences` ( `variable` , `value` , `options` , `explanation` , `type` ) VALUES ( 'ceilingDueDate', '', '', 'If set, date due will not be past this date. Enter date according to the dateformat System Preference', 'free')");
2375 print "Upgrade to $DBversion done (added ceilingDueDate system preference)\n";
2376 SetVersion ($DBversion);
2379 $DBversion = '3.01.00.026';
2380 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
2381 $dbh->do("INSERT INTO `systempreferences` ( `variable` , `value` , `options` , `explanation` , `type` ) VALUES ( 'numReturnedItemsToShow', '20', '', 'Number of returned items to show on the check-in page', 'Integer')");
2383 print "Upgrade to $DBversion done (added numReturnedItemsToShow system preference)\n";
2384 SetVersion ($DBversion);
2387 $DBversion = '3.01.00.027';
2388 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
2389 $dbh->do("ALTER TABLE zebraqueue CHANGE `biblio_auth_number` `biblio_auth_number` bigint(20) unsigned NOT NULL default 0");
2390 print "Upgrade to $DBversion done (Increased size of zebraqueue biblio_auth_number to address bug 3148.)\n";
2391 SetVersion ($DBversion);
2394 $DBversion = '3.01.00.028';
2395 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
2396 my $enable_reviews = C4::Context->preference('AmazonEnabled') ? '1' : '0';
2397 $dbh->do("INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES ('AmazonReviews', '$enable_reviews', 'Display Amazon reviews on staff interface','','YesNo')");
2398 print "Upgrade to $DBversion done (added AmazonReviews)\n";
2399 SetVersion ($DBversion);
2402 $DBversion = '3.01.00.029';
2403 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
2404 $dbh->do(q( UPDATE language_rfc4646_to_iso639
2405 SET iso639_2_code = 'spa'
2406 WHERE rfc4646_subtag = 'es'
2407 AND iso639_2_code = 'rus' )
2409 print "Upgrade to $DBversion done (fixed bug 2599: using Spanish search limit retrieves Russian results)\n";
2410 SetVersion ($DBversion);
2413 $DBversion = "3.01.00.030";
2414 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
2415 $dbh->do("INSERT INTO `systempreferences` ( `variable` , `value` , `options` , `explanation` , `type` ) VALUES ( 'AllowNotForLoanOverride', '0', '', 'If ON, Koha will allow the librarian to loan a not for loan item.', 'YesNo')");
2416 print "Upgrade to $DBversion done (added AllowNotForLoanOverride system preference)\n";
2417 SetVersion ($DBversion);
2420 $DBversion = "3.01.00.031";
2421 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
2422 $dbh->do("ALTER TABLE branch_transfer_limits
2423 MODIFY toBranch varchar(10) NOT NULL,
2424 MODIFY fromBranch varchar(10) NOT NULL,
2425 MODIFY itemtype varchar(10) NULL");
2426 print "Upgrade to $DBversion done (fix column widths in branch_transfer_limits)\n";
2427 SetVersion ($DBversion);
2430 $DBversion = "3.01.00.032";
2431 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
2432 $dbh->do(<<ENDOFRENEWAL);
2433 INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES('RenewalPeriodBase', 'now', 'Set whether the renewal date should be counted from the date_due or from the moment the Patron asks for renewal ','date_due|now','Choice');
2435 print "Upgrade to $DBversion done (Change the field)\n";
2436 SetVersion ($DBversion);
2439 $DBversion = "3.01.00.033";
2440 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
2442 ALTER TABLE borrower_message_preferences
2443 MODIFY borrowernumber int(11) default NULL,
2444 ADD categorycode varchar(10) default NULL AFTER borrowernumber,
2445 ADD KEY `categorycode` (`categorycode`),
2446 ADD CONSTRAINT `borrower_message_preferences_ibfk_3`
2447 FOREIGN KEY (`categorycode`) REFERENCES `categories` (`categorycode`)
2448 ON DELETE CASCADE ON UPDATE CASCADE
2450 print "Upgrade to $DBversion done (DB changes to allow patron category defaults for messaging preferences)\n";
2451 SetVersion ($DBversion);
2454 $DBversion = "3.01.00.034";
2455 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
2456 $dbh->do("ALTER TABLE `subscription` ADD COLUMN `graceperiod` INT(11) NOT NULL default '0';");
2457 print "Upgrade to $DBversion done (Adding graceperiod column to subscription table)\n";
2458 SetVersion ($DBversion);
2461 $DBversion = '3.01.00.035';
2462 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
2463 $dbh->do(q{ ALTER TABLE `subscription` ADD location varchar(80) NULL DEFAULT '' AFTER callnumber; });
2464 print "Upgrade to $DBversion done (Adding location to subscription table)\n";
2465 SetVersion ($DBversion);
2468 $DBversion = '3.01.00.036';
2469 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
2470 $dbh->do("UPDATE systempreferences SET explanation = 'Choose the default detail view in the staff interface; choose between normal, labeled_marc, marc or isbd'
2471 WHERE variable = 'IntranetBiblioDefaultView'
2472 AND explanation = 'IntranetBiblioDefaultView'");
2473 $dbh->do("UPDATE systempreferences SET type = 'Choice', options = 'normal|marc|isbd|labeled_marc'
2474 WHERE variable = 'IntranetBiblioDefaultView'");
2475 $dbh->do("INSERT INTO systempreferences (variable,value,explanation,options,type)VALUES('viewISBD','1','Allow display of ISBD view of bibiographic records','','YesNo')");
2476 $dbh->do("INSERT INTO systempreferences (variable,value,explanation,options,type)VALUES('viewLabeledMARC','0','Allow display of labeled MARC view of bibiographic records','','YesNo')");
2477 $dbh->do("INSERT INTO systempreferences (variable,value,explanation,options,type)VALUES('viewMARC','1','Allow display of MARC view of bibiographic records','','YesNo')");
2478 print "Upgrade to $DBversion done (new viewISBD, viewLabeledMARC, viewMARC sysprefs and tweak IntranetBiblioDefaultView)\n";
2479 SetVersion ($DBversion);
2482 $DBversion = '3.01.00.037';
2483 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
2484 $dbh->do('ALTER TABLE authorised_values ADD KEY `lib` (`lib`)');
2485 $dbh->do("INSERT INTO systempreferences (variable,value,explanation,options,type)VALUES('FilterBeforeOverdueReport','0','Do not run overdue report until filter selected','','YesNo')");
2486 SetVersion ($DBversion);
2487 print "Upgrade to $DBversion done (added FilterBeforeOverdueReport syspref and new index on authorised_values)\n";
2490 $DBversion = "3.01.00.038";
2491 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
2492 # update branches table
2494 $dbh->do("ALTER TABLE branches ADD `branchzip` varchar(25) default NULL AFTER `branchaddress3`");
2495 $dbh->do("ALTER TABLE branches ADD `branchcity` mediumtext AFTER `branchzip`");
2496 $dbh->do("ALTER TABLE branches ADD `branchcountry` text AFTER `branchcity`");
2497 $dbh->do("ALTER TABLE branches ADD `branchurl` mediumtext AFTER `branchemail`");
2498 $dbh->do("ALTER TABLE branches ADD `branchnotes` mediumtext AFTER `branchprinter`");
2499 print "Upgrade to $DBversion done (add ZIP, city, country, URL, and notes column to branches)\n";
2500 SetVersion ($DBversion);
2503 $DBversion = '3.01.00.039';
2504 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
2505 $dbh->do("INSERT INTO systempreferences (variable,value,options,explanation,type)VALUES('SpineLabelFormat', '<itemcallnumber><copynumber>', '30|10', 'This preference defines the format for the quick spine label printer. Just list the fields you would like to see in the order you would like to see them, surrounded by <>, for example <itemcallnumber>.', 'Textarea')");
2506 $dbh->do("INSERT INTO systempreferences (variable,value,options,explanation,type)VALUES('SpineLabelAutoPrint', '0', '', 'If this setting is turned on, a print dialog will automatically pop up for the quick spine label printer.', 'YesNo')");
2507 SetVersion ($DBversion);
2508 print "Upgrade to $DBversion done (added SpineLabelFormat and SpineLabelAutoPrint sysprefs)\n";
2511 $DBversion = '3.01.00.040';
2512 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
2513 $dbh->do("INSERT INTO systempreferences (variable,value,explanation,options,type)VALUES('AllowHoldDateInFuture','0','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')");
2514 $dbh->do("INSERT INTO systempreferences (variable,value,explanation,options,type)VALUES('OPACAllowHoldDateInFuture','0','If set, along with the AllowHoldDateInFuture system preference, OPAC users can set the date of a hold to be in the future.','','YesNo')");
2515 SetVersion ($DBversion);
2516 print "Upgrade to $DBversion done (AllowHoldDateInFuture and OPACAllowHoldDateInFuture sysprefs)\n";
2519 $DBversion = '3.01.00.041';
2520 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
2521 $dbh->do("INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('AWSPrivateKey','','See: http://aws.amazon.com. Note that this is required after 2009/08/15 in order to retrieve any enhanced content other than book covers from Amazon.','','free')");
2522 SetVersion ($DBversion);
2523 print "Upgrade to $DBversion done (added AWSPrivateKey syspref - note that if you use enhanced content from Amazon, this should be set right away.)\n";
2526 $DBversion = '3.01.00.042';
2527 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
2528 $dbh->do("INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('OPACFineNoRenewals','99999','Fine Limit above which user canmot renew books via OPAC','','Integer')");
2529 SetVersion ($DBversion);
2530 print "Upgrade to $DBversion done (added OPACFineNoRenewals syspref)\n";
2533 $DBversion = '3.01.00.043';
2534 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
2535 $dbh->do('ALTER TABLE items ADD COLUMN permanent_location VARCHAR(80) DEFAULT NULL AFTER location');
2536 $dbh->do('UPDATE items SET permanent_location = location');
2537 $dbh->do("INSERT INTO `systempreferences` ( `variable` , `value` , `options` , `explanation` , `type` ) VALUES ( 'NewItemsDefaultLocation', '', '', 'If set, all new items will have a location of the given Location Code ( Authorized Value type LOC )', '')");
2538 $dbh->do("INSERT INTO `systempreferences` ( `variable` , `value` , `options` , `explanation` , `type` ) VALUES ( 'InProcessingToShelvingCart', '0', '', 'If set, when any item with a location code of PROC is ''checked in'', it''s location code will be changed to CART.', 'YesNo')");
2539 $dbh->do("INSERT INTO `systempreferences` ( `variable` , `value` , `options` , `explanation` , `type` ) VALUES ( 'ReturnToShelvingCart', '0', '', 'If set, when any item is ''checked in'', it''s location code will be changed to CART.', 'YesNo')");
2540 SetVersion ($DBversion);
2541 print "Upgrade to $DBversion done (amended Item added NewItemsDefaultLocation, InProcessingToShelvingCart, ReturnToShelvingCart sysprefs)\n";
2544 $DBversion = '3.01.00.044';
2545 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
2546 $dbh->do("INSERT INTO systempreferences (variable,value,explanation,options,type)VALUES( 'DisplayClearScreenButton', '0', 'If set to yes, a clear screen button will appear on the circulation page.', 'If set to yes, a clear screen button will appear on the circulation page.', 'YesNo')");
2547 SetVersion ($DBversion);
2548 print "Upgrade to $DBversion done (added DisplayClearScreenButton system preference)\n";
2551 $DBversion = '3.01.00.045';
2552 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
2553 $dbh->do("INSERT INTO systempreferences (variable,value,options,explanation,type)VALUES('HidePatronName', '0', '', 'If this is switched on, patron''s cardnumber will be shown instead of their name on the holds and catalog screens', 'YesNo')");
2554 SetVersion ($DBversion);
2555 print "Upgrade to $DBversion done (added a preference to hide the patrons name in the staff catalog)\n";
2558 $DBversion = "3.01.00.046";
2559 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
2560 # update borrowers table
2562 $dbh->do("ALTER TABLE borrowers ADD `country` text AFTER zipcode");
2563 $dbh->do("ALTER TABLE borrowers ADD `B_country` text AFTER B_zipcode");
2564 $dbh->do("ALTER TABLE deletedborrowers ADD `country` text AFTER zipcode");
2565 $dbh->do("ALTER TABLE deletedborrowers ADD `B_country` text AFTER B_zipcode");
2566 print "Upgrade to $DBversion done (add country and B_country to borrowers)\n";
2567 SetVersion ($DBversion);
2570 $DBversion = '3.01.00.047';
2571 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
2572 $dbh->do("ALTER TABLE items MODIFY itemcallnumber varchar(255);");
2573 $dbh->do("ALTER TABLE deleteditems MODIFY itemcallnumber varchar(255);");
2574 $dbh->do("ALTER TABLE tmp_holdsqueue MODIFY itemcallnumber varchar(255);");
2575 SetVersion ($DBversion);
2576 print " Upgrade to $DBversion done (bug 2761: change max length of itemcallnumber to 255 from 30)\n";
2579 $DBversion = '3.01.00.048';
2580 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
2581 $dbh->do("UPDATE userflags SET flagdesc='View Catalog (Librarian Interface)' WHERE bit=2;");
2582 $dbh->do("UPDATE userflags SET flagdesc='Edit Catalog (Modify bibliographic/holdings data)' WHERE bit=9;");
2583 $dbh->do("UPDATE userflags SET flagdesc='Allow to edit authorities' WHERE bit=14;");
2584 $dbh->do("UPDATE userflags SET flagdesc='Allow to access to the reports module' WHERE bit=16;");
2585 $dbh->do("UPDATE userflags SET flagdesc='Allow to manage serials subscriptions' WHERE bit=15;");
2586 SetVersion ($DBversion);
2587 print " Upgrade to $DBversion done (bug 2611: fix spelling/capitalization in permission flag descriptions)\n";
2590 $DBversion = '3.01.00.049';
2591 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
2592 $dbh->do("UPDATE permissions SET description = 'Perform inventory (stocktaking) of your catalog' WHERE code = 'inventory';");
2593 SetVersion ($DBversion);
2594 print "Upgrade to $DBversion done (bug 2611: changed catalogue to catalog per the standard)\n";
2597 $DBversion = '3.01.00.050';
2598 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
2599 $dbh->do("INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES ('OPACSearchForTitleIn','<li class=\"yuimenuitem\">\n<a target=\"_blank\" class=\"yuimenuitemlabel\" href=\"http://worldcat.org/search?q=TITLE\">Other Libraries (WorldCat)</a></li>\n<li class=\"yuimenuitem\">\n<a class=\"yuimenuitemlabel\" href=\"http://www.scholar.google.com/scholar?q=TITLE\" target=\"_blank\">Other Databases (Google Scholar)</a></li>\n<li class=\"yuimenuitem\">\n<a class=\"yuimenuitemlabel\" href=\"http://www.bookfinder.com/search/?author=AUTHOR&title=TITLE&st=xl&ac=qr\" target=\"_blank\">Online Stores (Bookfinder.com)</a></li>','Enter the HTML that will appear in the ''Search for this title in'' box on the detail page in the OPAC. Enter TITLE, AUTHOR, or ISBN in place of their respective variables in the URL. Leave blank to disable ''More Searches'' menu.','70|10','Textarea');");
2600 SetVersion ($DBversion);
2601 print "Upgrade to $DBversion done (bug 1934: Add OPACSearchForTitleIn syspref)\n";
2604 $DBversion = '3.01.00.051';
2605 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
2606 $dbh->do("UPDATE systempreferences SET explanation='Fine limit above which user cannot renew books via OPAC' WHERE variable='OPACFineNoRenewals';");
2607 $dbh->do("UPDATE systempreferences SET explanation='If set to ON, a clear screen button will appear on the circulation page.' WHERE variable='DisplayClearScreenButton';");
2608 SetVersion ($DBversion);
2609 print "Upgrade to $DBversion done (fixed typos in new sysprefs)\n";
2612 $DBversion = '3.01.00.052';
2613 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
2614 $dbh->do('ALTER TABLE deleteditems ADD COLUMN permanent_location VARCHAR(80) DEFAULT NULL AFTER location');
2615 SetVersion ($DBversion);
2616 print "Upgrade to $DBversion done (bug 3481: add permanent_location column to deleteditems)\n";
2619 $DBversion = '3.01.00.053';
2620 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
2621 my $upgrade_script = C4::Context->config("intranetdir") . "/installer/data/mysql/labels_upgrade.pl";
2622 system("perl $upgrade_script");
2623 print "Upgrade to $DBversion done (Migrated labels tables and data to new schema.) NOTE: All existing label batches have been assigned to the first branch in the list of branches. This is ONLY true of migrated label batches.\n";
2624 SetVersion ($DBversion);
2627 $DBversion = '3.01.00.054';
2628 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
2629 $dbh->do("ALTER TABLE borrowers ADD `B_address2` text AFTER B_address");
2630 $dbh->do("ALTER TABLE borrowers ADD `altcontactcountry` text AFTER altcontactzipcode");
2631 $dbh->do("ALTER TABLE deletedborrowers ADD `B_address2` text AFTER B_address");
2632 $dbh->do("ALTER TABLE deletedborrowers ADD `altcontactcountry` text AFTER altcontactzipcode");
2633 SetVersion ($DBversion);
2634 print "Upgrade to $DBversion done (bug 1600, bug 3454: add altcontactcountry and B_address2 to borrowers and deletedborrowers)\n";
2637 $DBversion = '3.01.00.055';
2638 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
2639 $dbh->do(qq|UPDATE systempreferences set explanation='Enter the HTML that will appear in the ''Search for this title in'' box on the detail page in the OPAC. Enter {TITLE}, {AUTHOR}, or {ISBN} in place of their respective variables in the URL. Leave blank to disable ''More Searches'' menu.', value='<li><a href="http://worldcat.org/search?q={TITLE}" target="_blank">Other Libraries (WorldCat)</a></li>\n<li><a href="http://www.scholar.google.com/scholar?q={TITLE}" target="_blank">Other Databases (Google Scholar)</a></li>\n<li><a href="http://www.bookfinder.com/search/?author={AUTHOR}&title={TITLE}&st=xl&ac=qr" target="_blank">Online Stores (Bookfinder.com)</a></li>' WHERE variable='OPACSearchForTitleIn'|);
2640 SetVersion ($DBversion);
2641 print "Upgrade to $DBversion done (changed OPACSearchForTitleIn per requests in bug 1934)\n";
2644 $DBversion = '3.01.00.056';
2645 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
2646 $dbh->do("INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES ('OPACPatronDetails','1','If OFF the patron details tab in the OPAC is disabled.','','YesNo');");
2647 SetVersion ($DBversion);
2648 print "Upgrade to $DBversion done (Bug 1172 : Add OPACPatronDetails syspref)\n";
2651 $DBversion = '3.01.00.057';
2652 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
2653 $dbh->do("INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES ('OPACFinesTab','1','If OFF the patron fines tab in the OPAC is disabled.','','YesNo');");
2654 SetVersion ($DBversion);
2655 print "Upgrade to $DBversion done (Bug 2576 : Add OPACFinesTab syspref)\n";
2658 $DBversion = '3.01.00.058';
2659 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
2660 $dbh->do("ALTER TABLE `language_subtag_registry` ADD `id` INT( 11 ) NOT NULL AUTO_INCREMENT PRIMARY KEY;");
2661 $dbh->do("ALTER TABLE `language_rfc4646_to_iso639` ADD `id` INT( 11 ) NOT NULL AUTO_INCREMENT PRIMARY KEY;");
2662 $dbh->do("ALTER TABLE `language_descriptions` ADD `id` INT( 11 ) NOT NULL AUTO_INCREMENT PRIMARY KEY;");
2663 SetVersion ($DBversion);
2664 print "Upgrade to $DBversion done (Added primary keys to language tables)\n";
2667 $DBversion = '3.01.00.059';
2668 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
2669 $dbh->do("INSERT INTO systempreferences (variable,value,options,explanation,type)VALUES('DisplayOPACiconsXSLT', '1', '', 'If ON, displays the format, audience, type icons in XSLT MARC21 results and display pages.', 'YesNo')");
2670 SetVersion ($DBversion);
2671 print "Upgrade to $DBversion done (added DisplayOPACiconsXSLT sysprefs)\n";
2674 $DBversion = '3.01.00.060';
2675 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
2676 $dbh->do("INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES('AllowAllMessageDeletion','0','Allow any Library to delete any message','','YesNo');");
2677 $dbh->do('DROP TABLE IF EXISTS messages');
2678 $dbh->do("CREATE TABLE messages ( `message_id` int(11) NOT NULL auto_increment,
2679 `borrowernumber` int(11) NOT NULL,
2680 `branchcode` varchar(4) default NULL,
2681 `message_type` varchar(1) NOT NULL,
2682 `message` text NOT NULL,
2683 `message_date` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
2684 PRIMARY KEY (`message_id`)
2685 ) ENGINE=InnoDB DEFAULT CHARSET=utf8");
2687 print "Upgrade to $DBversion done ( Added AllowAllMessageDeletion syspref and messages table )\n";
2688 SetVersion ($DBversion);
2691 $DBversion = '3.01.00.061';
2692 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
2693 $dbh->do("INSERT INTO systempreferences (variable,value,explanation,options,type)VALUES('ShowPatronImageInWebBasedSelfCheck', '0', 'If ON, displays patron image when a patron uses web-based self-checkout', '', 'YesNo')");
2694 print "Upgrade to $DBversion done ( Added ShowPatronImageInWebBasedSelfCheck system preference )\n";
2695 SetVersion ($DBversion);
2698 $DBversion = "3.01.00.062";
2699 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
2700 $dbh->do("INSERT INTO permissions (module_bit, code, description) VALUES ( 13, 'manage_csv_profiles', 'Manage CSV export profiles')");
2702 CREATE TABLE `export_format` (
2703 `export_format_id` int(11) NOT NULL auto_increment,
2704 `profile` varchar(255) NOT NULL,
2705 `description` mediumtext NOT NULL,
2706 `marcfields` mediumtext NOT NULL,
2707 PRIMARY KEY (`export_format_id`)
2708 ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='Used for CSV export';
2710 print "Upgrade to $DBversion done (added csv export profiles)\n";
2713 $DBversion = "3.01.00.063";
2714 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
2716 CREATE TABLE `fieldmapping` (
2717 `id` int(11) NOT NULL auto_increment,
2718 `field` varchar(255) NOT NULL,
2719 `frameworkcode` char(4) NOT NULL default '',
2720 `fieldcode` char(3) NOT NULL,
2721 `subfieldcode` char(1) NOT NULL,
2723 ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
2725 SetVersion ($DBversion);print "Upgrade to $DBversion done (Created table fieldmapping)\n";print "Upgrade to 3.01.00.064 done (Version number skipped: nothing done)\n";
2728 $DBversion = '3.01.00.065';
2729 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
2730 $dbh->do('ALTER TABLE issuingrules ADD COLUMN `renewalsallowed` smallint(6) NOT NULL default "0" AFTER `issuelength`;');
2731 $sth = $dbh->prepare("SELECT itemtype, renewalsallowed FROM itemtypes");
2734 my $sthupd = $dbh->prepare("UPDATE issuingrules SET renewalsallowed = ? WHERE itemtype = ?");
2736 while(my $row = $sth->fetchrow_hashref){
2737 $sthupd->execute($row->{renewalsallowed}, $row->{itemtype});
2740 $dbh->do('ALTER TABLE itemtypes DROP COLUMN `renewalsallowed`;');
2742 SetVersion ($DBversion);
2743 print "Upgrade to $DBversion done (Moving allowed renewals from itemtypes to issuingrule)\n";
2746 $DBversion = '3.01.00.066';
2747 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
2748 $dbh->do('ALTER TABLE issuingrules ADD COLUMN `reservesallowed` smallint(6) NOT NULL default "0" AFTER `renewalsallowed`;');
2750 my $maxreserves = C4::Context->preference('maxreserves');
2751 $sth = $dbh->prepare('UPDATE issuingrules SET reservesallowed = ?;');
2752 $sth->execute($maxreserves);
2754 $dbh->do('DELETE FROM systempreferences WHERE variable = "maxreserves";');
2756 $dbh->do("INSERT INTO systempreferences (variable,value, options, explanation, type) VALUES('ReservesControlBranch','PatronLibrary','ItemHomeLibrary|PatronLibrary','Branch checked for members reservations rights','Choice')");
2758 SetVersion ($DBversion);
2759 print "Upgrade to $DBversion done (Moving max allowed reserves from system preference to issuingrule)\n";
2762 $DBversion = "3.01.00.067";
2763 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
2764 $dbh->do("INSERT INTO permissions (module_bit, code, description) VALUES ( 13, 'batchmod', 'Perform batch modification of items')");
2765 $dbh->do("INSERT INTO permissions (module_bit, code, description) VALUES ( 13, 'batchdel', 'Perform batch deletion of items')");
2766 print "Upgrade to $DBversion done (added permissions for batch modification and deletion)\n";
2767 SetVersion ($DBversion);
2770 $DBversion = "3.01.00.068";
2771 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
2772 $dbh->do("ALTER TABLE issuingrules ADD COLUMN `finedays` int(11) default NULL AFTER `fine` ");
2773 print "Upgrade to $DBversion done (Adding finedays in issuingrules table)\n";
2774 SetVersion ($DBversion);
2778 $DBversion = "3.01.00.069";
2779 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
2780 $dbh->do("INSERT INTO `systempreferences` (`variable`, `value`, `options`, `explanation`, `type`) VALUES ('EnableOpacSearchHistory', '1', '', 'Enable or disable opac search history', 'YesNo')");
2782 my $create = <<SEARCHHIST;
2783 CREATE TABLE IF NOT EXISTS `search_history` (
2784 `userid` int(11) NOT NULL,
2785 `sessionid` varchar(32) NOT NULL,
2786 `query_desc` varchar(255) NOT NULL,
2787 `query_cgi` varchar(255) NOT NULL,
2788 `total` int(11) NOT NULL,
2789 `time` timestamp NOT NULL default CURRENT_TIMESTAMP,
2790 KEY `userid` (`userid`),
2791 KEY `sessionid` (`sessionid`)
2792 ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='Opac search history results';
2796 print "Upgrade to $DBversion done (added OPAC search history preference and table)\n";
2799 $DBversion = "3.01.00.070";
2800 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
2801 $dbh->do("ALTER TABLE authorised_values ADD COLUMN `lib_opac` VARCHAR(80) default NULL AFTER `lib`");
2802 print "Upgrade to $DBversion done (Added a lib_opac field in authorised_values table)\n";
2805 $DBversion = "3.01.00.071";
2806 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
2807 $dbh->do("ALTER TABLE `subscription` ADD `enddate` date default NULL");
2808 $dbh->do("ALTER TABLE subscriptionhistory CHANGE enddate histenddate DATE default NULL");
2809 print "Upgrade to $DBversion done ( Adding enddate to subscription)\n";
2812 # Acquisitions update
2814 $DBversion = "3.01.00.072";
2815 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
2816 $dbh->do("INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES('OpacPrivacy', '0', 'if ON, allows patrons to define their privacy rules (reading history)',NULL,'YesNo')");
2817 # create a new syspref for the 'Mr anonymous' patron
2818 $dbh->do("INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES('AnonymousPatron', '0', \"Set the identifier (borrowernumber) of the 'Mister anonymous' patron. Used for Suggestion and reading history privacy\",NULL,'')");
2819 # fill AnonymousPatron with AnonymousSuggestion value (copy)
2820 my $sth=$dbh->prepare("SELECT value FROM systempreferences WHERE variable='AnonSuggestions'");
2822 my ($value) = $sth->fetchrow() || 0;
2823 $dbh->do("UPDATE systempreferences SET value='$value' WHERE variable='AnonymousPatron'");
2824 # set AnonymousSuggestion do YesNo
2825 # 1st, set the value (1/True if it had a borrowernumber)
2826 $dbh->do("UPDATE systempreferences SET value=1 WHERE variable='AnonSuggestions' AND value>0");
2827 # 2nd, change the type to Choice
2828 $dbh->do("UPDATE systempreferences SET type='YesNo' WHERE variable='AnonSuggestions'");
2829 # borrower reading record privacy : 0 : forever, 1 : laws, 2 : don't keep at all
2830 $dbh->do("ALTER TABLE `borrowers` ADD `privacy` INTEGER NOT NULL DEFAULT 1;");
2831 print "Upgrade to $DBversion done (add new syspref and column in borrowers)\n";
2832 SetVersion ($DBversion);
2835 $DBversion = '3.01.00.073';
2836 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
2837 $dbh->do('SET FOREIGN_KEY_CHECKS=0 ');
2838 $dbh->do(<<'END_SQL');
2839 CREATE TABLE IF NOT EXISTS `aqcontract` (
2840 `contractnumber` int(11) NOT NULL auto_increment,
2841 `contractstartdate` date default NULL,
2842 `contractenddate` date default NULL,
2843 `contractname` varchar(50) default NULL,
2844 `contractdescription` mediumtext,
2845 `booksellerid` int(11) not NULL,
2846 PRIMARY KEY (`contractnumber`),
2847 CONSTRAINT `booksellerid_fk1` FOREIGN KEY (`booksellerid`)
2848 REFERENCES `aqbooksellers` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
2849 ) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
2851 $dbh->do('SET FOREIGN_KEY_CHECKS=1 ');
2852 print "Upgrade to $DBversion done (adding aqcontract table)\n";
2853 SetVersion ($DBversion);
2856 $DBversion = '3.01.00.074';
2857 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
2858 $dbh->do("ALTER TABLE `aqbasket` ADD COLUMN `basketname` varchar(50) default NULL AFTER `basketno`");
2859 $dbh->do("ALTER TABLE `aqbasket` ADD COLUMN `note` mediumtext AFTER `basketname`");
2860 $dbh->do("ALTER TABLE `aqbasket` ADD COLUMN `booksellernote` mediumtext AFTER `note`");
2861 $dbh->do("ALTER TABLE `aqbasket` ADD COLUMN `contractnumber` int(11) AFTER `booksellernote`");
2862 $dbh->do("ALTER TABLE `aqbasket` ADD FOREIGN KEY (`contractnumber`) REFERENCES `aqcontract` (`contractnumber`)");
2863 print "Upgrade to $DBversion done (edit aqbasket table done)\n";
2864 SetVersion ($DBversion);
2867 $DBversion = '3.01.00.075';
2868 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
2869 $dbh->do("ALTER TABLE `aqorders` ADD COLUMN `uncertainprice` tinyint(1)");
2871 print "Upgrade to $DBversion done (adding uncertainprices)\n";
2872 SetVersion ($DBversion);
2875 $DBversion = '3.01.00.076';
2876 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
2877 $dbh->do('SET FOREIGN_KEY_CHECKS=0 ');
2878 $dbh->do("CREATE TABLE IF NOT EXISTS `aqbasketgroups` (
2879 `id` int(11) NOT NULL auto_increment,
2880 `name` varchar(50) default NULL,
2881 `closed` tinyint(1) default NULL,
2882 `booksellerid` int(11) NOT NULL,
2884 KEY `booksellerid` (`booksellerid`),
2885 CONSTRAINT `aqbasketgroups_ibfk_1` FOREIGN KEY (`booksellerid`) REFERENCES `aqbooksellers` (`id`) ON UPDATE CASCADE ON DELETE CASCADE
2886 ) ENGINE=InnoDB DEFAULT CHARSET=utf8;");
2887 $dbh->do("ALTER TABLE aqbasket ADD COLUMN `basketgroupid` int(11)");
2888 $dbh->do("ALTER TABLE aqbasket ADD FOREIGN KEY (`basketgroupid`) REFERENCES `aqbasketgroups` (`id`) ON UPDATE CASCADE ON DELETE SET NULL");
2889 $dbh->do("INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES ('pdfformat','pdfformat::layout2pages','Controls what script is used for printing (basketgroups)','','free')");
2890 $dbh->do('SET FOREIGN_KEY_CHECKS=1 ');
2891 print "Upgrade to $DBversion done (adding basketgroups)\n";
2892 SetVersion ($DBversion);
2894 $DBversion = '3.01.00.077';
2895 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
2897 $dbh->do("SET FOREIGN_KEY_CHECKS=0 ");
2898 # create a mapping table holding the info we need to match orders to budgets
2899 $dbh->do('DROP TABLE IF EXISTS fundmapping');
2901 q|CREATE TABLE fundmapping AS
2902 SELECT aqorderbreakdown.ordernumber, branchcode, bookfundid, budgetdate, entrydate
2903 FROM aqorderbreakdown JOIN aqorders ON aqorderbreakdown.ordernumber = aqorders.ordernumber|);
2904 # match the new type of the corresponding field
2905 $dbh->do('ALTER TABLE fundmapping modify column bookfundid varchar(30)');
2906 # System did not ensure budgetdate was valid historically
2907 sanitize_zero_date('fundmapping', 'budgetdate');
2908 $dbh->do(q|UPDATE fundmapping SET budgetdate = entrydate WHERE budgetdate IS NULL|);
2909 # We save the map in fundmapping in case you need later processing
2910 $dbh->do(q|ALTER TABLE fundmapping add column aqbudgetid integer|);
2911 # these can speed processing up
2912 $dbh->do(q|CREATE INDEX fundmaporder ON fundmapping (ordernumber)|);
2913 $dbh->do(q|CREATE INDEX fundmapid ON fundmapping (bookfundid)|);
2915 $dbh->do("DROP TABLE IF EXISTS `aqbudgetperiods` ");
2918 CREATE TABLE `aqbudgetperiods` (
2919 `budget_period_id` int(11) NOT NULL auto_increment,
2920 `budget_period_startdate` date NOT NULL,
2921 `budget_period_enddate` date NOT NULL,
2922 `budget_period_active` tinyint(1) default '0',
2923 `budget_period_description` mediumtext,
2924 `budget_period_locked` tinyint(1) default NULL,
2925 `sort1_authcat` varchar(10) default NULL,
2926 `sort2_authcat` varchar(10) default NULL,
2927 PRIMARY KEY (`budget_period_id`)
2928 ) ENGINE=InnoDB DEFAULT CHARSET=utf8 |);
2930 $dbh->do(<<ADDPERIODS);
2931 INSERT INTO aqbudgetperiods (budget_period_startdate,budget_period_enddate,budget_period_active,budget_period_description,budget_period_locked)
2932 SELECT DISTINCT startdate, enddate, NOW() BETWEEN startdate and enddate, concat(startdate," ",enddate),NOT NOW() BETWEEN startdate AND enddate from aqbudget
2934 # SORRY , NO AQBUDGET/AQBOOKFUND -> AQBUDGETS IMPORT JUST YET,
2935 # BUT A NEW CLEAN AQBUDGETS TABLE CREATE FOR NOW..
2936 # DROP TABLE IF EXISTS `aqbudget`;
2937 #CREATE TABLE `aqbudget` (
2938 # `bookfundid` varchar(10) NOT NULL default ',
2939 # `startdate` date NOT NULL default 0,
2940 # `enddate` date default NULL,
2941 # `budgetamount` decimal(13,2) default NULL,
2942 # `aqbudgetid` tinyint(4) NOT NULL auto_increment,
2943 # `branchcode` varchar(10) default NULL,
2944 DropAllForeignKeys('aqbudget');
2945 #$dbh->do("drop table aqbudget;");
2948 my $maxbudgetid = $dbh->selectcol_arrayref(<<IDsBUDGET);
2949 SELECT MAX(aqbudgetid) from aqbudget
2952 $$maxbudgetid[0] = 0 if !$$maxbudgetid[0];
2954 $dbh->do(<<BUDGETAUTOINCREMENT);
2955 ALTER TABLE aqbudget AUTO_INCREMENT=$$maxbudgetid[0]
2958 $dbh->do(<<BUDGETNAME);
2959 ALTER TABLE aqbudget RENAME `aqbudgets`
2962 $dbh->do(<<BUDGETS);
2963 ALTER TABLE `aqbudgets`
2964 CHANGE COLUMN aqbudgetid `budget_id` int(11) NOT NULL AUTO_INCREMENT,
2965 CHANGE COLUMN branchcode `budget_branchcode` varchar(10) default NULL,
2966 CHANGE COLUMN budgetamount `budget_amount` decimal(28,6) NOT NULL default '0.00',
2967 CHANGE COLUMN bookfundid `budget_code` varchar(30) default NULL,
2968 ADD COLUMN `budget_parent_id` int(11) default NULL,
2969 ADD COLUMN `budget_name` varchar(80) default NULL,
2970 ADD COLUMN `budget_encumb` decimal(28,6) default '0.00',
2971 ADD COLUMN `budget_expend` decimal(28,6) default '0.00',
2972 ADD COLUMN `budget_notes` mediumtext,
2973 ADD COLUMN `budget_description` mediumtext,
2974 ADD COLUMN `timestamp` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
2975 ADD COLUMN `budget_amount_sublevel` decimal(28,6) AFTER `budget_amount`,
2976 ADD COLUMN `budget_period_id` int(11) default NULL,
2977 ADD COLUMN `sort1_authcat` varchar(80) default NULL,
2978 ADD COLUMN `sort2_authcat` varchar(80) default NULL,
2979 ADD COLUMN `budget_owner_id` int(11) default NULL,
2980 ADD COLUMN `budget_permission` int(1) default '0';
2983 $dbh->do(<<BUDGETCONSTRAINTS);
2984 ALTER TABLE `aqbudgets`
2985 ADD CONSTRAINT `aqbudgets_ifbk_1` FOREIGN KEY (`budget_period_id`) REFERENCES `aqbudgetperiods` (`budget_period_id`) ON DELETE CASCADE ON UPDATE CASCADE
2987 # $dbh->do(<<BUDGETPKDROP);
2988 #ALTER TABLE `aqbudgets`
2991 # $dbh->do(<<BUDGETPKADD);
2992 #ALTER TABLE `aqbudgets`
2993 # ADD PRIMARY KEY budget_id
2997 my $query_period= $dbh->prepare(qq|SELECT budget_period_id from aqbudgetperiods where budget_period_startdate=? and budget_period_enddate=?|);
2998 my $query_bookfund= $dbh->prepare(qq|SELECT * from aqbookfund where bookfundid=?|);
2999 my $selectbudgets=$dbh->prepare(qq|SELECT * from aqbudgets|);
3000 my $updatebudgets=$dbh->prepare(qq|UPDATE aqbudgets SET budget_period_id= ? , budget_name=?, budget_branchcode=? where budget_id=?|);
3001 $selectbudgets->execute;
3002 while (my $databudget=$selectbudgets->fetchrow_hashref){
3003 $query_period->execute ($$databudget{startdate},$$databudget{enddate});
3004 my ($budgetperiodid)=$query_period->fetchrow;
3005 $query_bookfund->execute ($$databudget{budget_code});
3006 my $databf=$query_bookfund->fetchrow_hashref;
3007 my $branchcode=$$databudget{budget_branchcode}||$$databf{branchcode};
3008 $updatebudgets->execute($budgetperiodid,$$databf{bookfundname},$branchcode,$$databudget{budget_id});
3010 $dbh->do(<<BUDGETDROPDATES);
3011 ALTER TABLE `aqbudgets`
3017 $dbh->do("DROP TABLE IF EXISTS `aqbudgets_planning` ");
3018 $dbh->do("CREATE TABLE `aqbudgets_planning` (
3019 `plan_id` int(11) NOT NULL auto_increment,
3020 `budget_id` int(11) NOT NULL,
3021 `budget_period_id` int(11) NOT NULL,
3022 `estimated_amount` decimal(28,6) default NULL,
3023 `authcat` varchar(30) NOT NULL,
3024 `authvalue` varchar(30) NOT NULL,
3025 `display` tinyint(1) DEFAULT 1,
3026 PRIMARY KEY (`plan_id`),
3027 CONSTRAINT `aqbudgets_planning_ifbk_1` FOREIGN KEY (`budget_id`) REFERENCES `aqbudgets` (`budget_id`) ON DELETE CASCADE ON UPDATE CASCADE
3028 ) ENGINE=InnoDB DEFAULT CHARSET=utf8;");
3030 $dbh->do("ALTER TABLE `aqorders`
3031 ADD COLUMN `budget_id` tinyint(4) NOT NULL,
3032 ADD COLUMN `budgetgroup_id` int(11) NOT NULL,
3033 ADD COLUMN `sort1_authcat` varchar(10) default NULL,
3034 ADD COLUMN `sort2_authcat` varchar(10) default NULL" );
3035 # We need to map the orders to the budgets
3036 # For Historic reasons this is more complex than it should be on occasions
3037 my $budg_arr = $dbh->selectall_arrayref(
3038 q|SELECT aqbudgets.budget_id, aqbudgets.budget_code, aqbudgetperiods.budget_period_startdate,
3039 aqbudgetperiods.budget_period_enddate
3040 FROM aqbudgets JOIN aqbudgetperiods ON aqbudgets.budget_period_id = aqbudgetperiods.budget_period_id
3041 ORDER BY budget_code, budget_period_startdate|, { Slice => {} });
3042 # We arbitarily order on start date, this means if you have overlapping periods the order will be
3043 # linked to the latest matching budget YMMV
3044 my $b_sth = $dbh->prepare(
3045 'UPDATE fundmapping set aqbudgetid = ? where bookfundid =? AND budgetdate >= ? AND budgetdate <= ?');
3046 for my $b ( @{$budg_arr}) {
3047 $b_sth->execute($b->{budget_id}, $b->{budget_code}, $b->{budget_period_startdate}, $b->{budget_period_enddate});
3049 # move the budgetids to aqorders
3050 $dbh->do(q|UPDATE aqorders, fundmapping SET aqorders.budget_id = fundmapping.aqbudgetid
3051 WHERE aqorders.ordernumber = fundmapping.ordernumber AND fundmapping.aqbudgetid IS NOT NULL|);
3052 # NB fundmapping is left as an accontants trail also if you have budgetids that werent set
3053 # you can decide what to do with them
3056 q|UPDATE aqorders, aqbudgets SET aqorders.budgetgroup_id = aqbudgets.budget_period_id
3057 WHERE aqorders.budget_id = aqbudgets.budget_id|);
3058 # cannot do until aqorderbreakdown removed
3059 # $dbh->do("DROP TABLE aqbookfund ");
3060 # $dbh->do("ALTER TABLE aqorders ADD FOREIGN KEY (`budget_id`) REFERENCES `aqbudgets` (`budget_id`) ON UPDATE CASCADE " ); ????
3061 $dbh->do("SET FOREIGN_KEY_CHECKS=1 ");
3063 print "Upgrade to $DBversion done (Adding new aqbudgetperiods, aqbudgets and aqbudget_planning tables )\n";
3064 SetVersion ($DBversion);
3069 $DBversion = '3.01.00.078';
3070 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
3071 $dbh->do("ALTER TABLE aqbudgetperiods ADD COLUMN budget_period_total decimal(28,6)");
3072 print "Upgrade to $DBversion done (adds 'budget_period_total' column to aqbudgetperiods table)\n";
3073 SetVersion($DBversion);
3077 $DBversion = '3.01.00.079';
3078 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
3079 $dbh->do("ALTER TABLE currency ADD COLUMN active tinyint(1)");
3081 print "Upgrade to $DBversion done (adds 'active' column to currencies table)\n";
3082 SetVersion($DBversion);
3085 $DBversion = '3.01.00.080';
3086 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
3087 $dbh->do(<<BUDG_PERM );
3088 INSERT INTO permissions (module_bit, code, description) VALUES
3089 (11, 'vendors_manage', 'Manage vendors'),
3090 (11, 'contracts_manage', 'Manage contracts'),
3091 (11, 'period_manage', 'Manage periods'),
3092 (11, 'budget_manage', 'Manage budgets'),
3093 (11, 'budget_modify', "Modify budget (can't create lines but can modify existing ones)"),
3094 (11, 'planning_manage', 'Manage budget plannings'),
3095 (11, 'order_manage', 'Manage orders & basket'),
3096 (11, 'group_manage', 'Manage orders & basketgroups'),
3097 (11, 'order_receive', 'Manage orders & basket'),
3098 (11, 'budget_add_del', "Add and delete budgets (but can't modify budgets)");
3101 print "Upgrade to $DBversion done (adds permissions for the acquisitions module)\n";
3102 SetVersion($DBversion);
3106 $DBversion = '3.01.00.081';
3107 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
3108 $dbh->do("ALTER TABLE aqbooksellers ADD COLUMN `gstrate` decimal(6,4) default NULL");
3109 if (my $gist=C4::Context->preference("gist")){
3110 my $sql=$dbh->prepare("UPDATE aqbooksellers set `gstrate`=? ");
3111 $sql->execute($gist) ;
3113 print "Upgrade to $DBversion done (added per-supplier gstrate setting)\n";
3114 SetVersion($DBversion);
3117 $DBversion = "3.01.00.082";
3118 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
3119 if (C4::Context->preference("opaclanguages") eq "fr") {
3120 $dbh->do(qq#INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('AcqCreateItem','ordering',"Définit quand l'exemplaire est créé : à la commande, à la livraison, au catalogage",'ordering|receiving|cataloguing','Choice')#);
3122 $dbh->do("INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('AcqCreateItem','ordering','Define when the item is created : when ordering, when receiving, or in cataloguing module','ordering|receiving|cataloguing','Choice')");
3124 print "Upgrade to $DBversion done (adding ReservesNeedReturns systempref, in circulation)\n";
3125 SetVersion ($DBversion);
3128 $DBversion = "3.01.00.083";
3129 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
3131 CREATE TABLE `aqorders_items` (
3132 `ordernumber` int(11) NOT NULL,
3133 `itemnumber` int(11) NOT NULL,
3134 `timestamp` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
3135 PRIMARY KEY (`itemnumber`),
3136 KEY `ordernumber` (`ordernumber`)
3137 ) ENGINE=InnoDB DEFAULT CHARSET=utf8 |
3140 $dbh->do(qq| DROP TABLE aqorderbreakdown |);
3141 $dbh->do('DROP TABLE aqbookfund');
3142 print "Upgrade to $DBversion done (New aqorders_items table for acqui)\n";
3143 SetVersion ($DBversion);
3146 $DBversion = "3.01.00.084";
3147 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
3148 $dbh->do( qq# INSERT INTO `systempreferences` VALUES ('CurrencyFormat','US','US|FR','Determines the display format of currencies. eg: ''36000'' is displayed as ''360 000,00'' in ''FR'' or 360,000.00'' in ''US''.','Choice') #);
3150 print "Upgrade to $DBversion done (CurrencyFormat syspref added)\n";
3151 SetVersion ($DBversion);
3154 $DBversion = "3.01.00.085";
3155 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
3156 $dbh->do("ALTER table aqorders drop column title");
3157 $dbh->do("ALTER TABLE `aqorders` CHANGE `budget_id` `budget_id` INT( 11 ) NOT NULL");
3158 print "Upgrade to $DBversion done update budget_id size that should not be a tinyint\n";
3159 SetVersion ($DBversion);
3162 $DBversion = "3.01.00.086";
3163 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
3164 $dbh->do(<<SUGGESTIONS);
3165 ALTER table suggestions
3166 ADD budgetid INT(11),
3167 ADD branchcode VARCHAR(10) default NULL,
3168 ADD acceptedby INT(11) default NULL,
3169 ADD accepteddate date default NULL,
3170 ADD suggesteddate date default NULL,
3171 ADD manageddate date default NULL,
3172 ADD rejectedby INT(11) default NULL,
3173 ADD rejecteddate date default NULL,
3174 ADD collectiontitle text default NULL,
3175 ADD itemtype VARCHAR(30) default NULL
3178 print "Upgrade to $DBversion done (Suggestions)\n";
3179 SetVersion ($DBversion);
3182 $DBversion = "3.01.00.087";
3183 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
3184 $dbh->do("ALTER table aqbudgets drop column budget_amount_sublevel;");
3185 print "Upgrade to $DBversion done (Drop column budget_amount_sublevel from aqbudgets)\n";
3186 SetVersion ($DBversion);
3189 $DBversion = "3.01.00.088";
3190 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
3191 $dbh->do( qq# INSERT INTO `systempreferences` VALUES ('intranetbookbag','1','','If ON, enables display of Cart feature in the intranet','YesNo') #);
3193 print "Upgrade to $DBversion done (intranetbookbag syspref added)\n";
3194 SetVersion ($DBversion);
3197 $DBversion = "3.01.00.090";
3198 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
3200 INSERT INTO `permissions` (`module_bit`, `code`, `description`) VALUES
3201 (16, 'execute_reports', 'Execute SQL reports'),
3202 (16, 'create_reports', 'Create SQL Reports')
3205 print "Upgrade to $DBversion done (granular permissions for guided reports added)\n";
3206 SetVersion ($DBversion);
3209 $DBversion = "3.01.00.091";
3210 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
3212 UPDATE `systempreferences` SET `options` = 'holdings|serialcollection|subscriptions'
3213 WHERE `systempreferences`.`variable` = 'opacSerialDefaultTab' LIMIT 1
3216 print "Upgrade to $DBversion done (opac-detail default tag updated)\n";
3217 SetVersion ($DBversion);
3220 $DBversion = "3.01.00.092";
3221 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
3222 if (C4::Context->preference("opaclanguages") =~ /fr/) {
3224 INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES ('RoutingListAddReserves','1','Si activé, des reservations sont automatiquement créées pour chaque lecteur de la liste de circulation d''un numéro de périodique','','YesNo');
3228 INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES ('RoutingListAddReserves','1','If ON the patrons on routing lists are automatically added to holds on the issue.','','YesNo');
3231 print "Upgrade to $DBversion done (Added RoutingListAddReserves syspref)\n";
3232 SetVersion ($DBversion);
3235 $DBversion = "3.01.00.093";
3236 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
3238 ALTER TABLE biblioitems ADD INDEX issn_idx (issn);
3240 print "Upgrade to $DBversion done (added index to ISSN)\n";
3241 SetVersion ($DBversion);
3244 $DBversion = "3.01.00.094";
3245 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
3247 ALTER TABLE aqbasketgroups ADD deliveryplace VARCHAR(10) default NULL, ADD deliverycomment VARCHAR(255) default NULL;
3250 print "Upgrade to $DBversion done (adding deliveryplace deliverycomment to basketgroups)\n";
3251 SetVersion ($DBversion);
3254 $DBversion = "3.01.00.095";
3255 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
3257 ALTER TABLE items ADD stocknumber VARCHAR(32) DEFAULT NULL COMMENT "stores the inventory number";
3260 ALTER TABLE items ADD UNIQUE INDEX itemsstocknumberidx (stocknumber);
3263 ALTER TABLE deleteditems ADD stocknumber VARCHAR(32) DEFAULT NULL COMMENT "stores the inventory number of deleted items";
3266 ALTER TABLE deleteditems ADD UNIQUE INDEX deleteditemsstocknumberidx (stocknumber);
3268 if (C4::Context->preference('marcflavour') eq 'UNIMARC'){
3270 INSERT IGNORE INTO marc_subfield_structure (frameworkcode,tagfield, tagsubfield, tab, repeatable, mandatory,kohafield)
3271 SELECT DISTINCT (frameworkcode),995,"j",10,0,0,"items.stocknumber" from biblio_framework ;
3273 #Previously, copynumber was used as stocknumber
3275 UPDATE items set stocknumber=copynumber;
3278 UPDATE items set copynumber=NULL;
3281 print "Upgrade to $DBversion done (stocknumber field added)\n";
3282 SetVersion ($DBversion);
3285 $DBversion = "3.01.00.096";
3286 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
3287 $dbh->do("INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES ('OrderPdfTemplate','','Uploads a PDF template to use for printing baskets','NULL','Upload')");
3288 $dbh->do("UPDATE systempreferences SET variable='OrderPdfFormat' WHERE variable='pdfformat'");
3289 print "Upgrade to $DBversion done (PDF orders system preferences added and updated)\n";
3290 SetVersion ($DBversion);
3293 $DBversion = "3.01.00.097";
3294 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
3296 ALTER TABLE aqbasketgroups ADD billingplace VARCHAR(10) NOT NULL AFTER deliverycomment;
3299 print "Upgrade to $DBversion done (Adding billingplace to aqbasketgroups)\n";
3300 SetVersion ($DBversion);
3303 $DBversion = "3.01.00.098";
3304 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
3306 ALTER TABLE auth_subfield_structure MODIFY frameworkcode VARCHAR(10) NULL;
3309 print "Upgrade to $DBversion done (changing frameworkcode length in auth_subfield_structure)\n";
3310 SetVersion ($DBversion);
3313 $DBversion = "3.01.00.099";
3314 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
3316 INSERT INTO `permissions` (`module_bit`, `code`, `description`) VALUES
3317 (9, 'edit_catalogue', 'Edit catalogue'),
3318 (9, 'fast_cataloging', 'Fast cataloging')
3321 print "Upgrade to $DBversion done (granular permissions for cataloging added)\n";
3322 SetVersion ($DBversion);
3325 $DBversion = "3.01.00.100";
3326 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
3327 $dbh->do("INSERT INTO `systempreferences` (`variable`, `value`, `options`, `explanation`, `type`) VALUES ('casAuthentication', '0', '', 'Enable or disable CAS authentication', 'YesNo'), ('casLogout', '1', '', 'Does a logout from Koha should also log out of CAS ?', 'YesNo'), ('casServerUrl', 'https://localhost:8443/cas', '', 'URL of the cas server', 'Free')");
3328 print "Upgrade to $DBversion done (added CAS authentication system preferences)\n";
3329 SetVersion ($DBversion);
3332 $DBversion = "3.01.00.101";
3333 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
3335 "INSERT INTO systempreferences
3336 (variable, value, options, explanation, type)
3338 'OverdueNoticeBcc', '', '',
3339 'Email address to Bcc outgoing notices sent by email',
3342 print "Upgrade to $DBversion done (added OverdueNoticeBcc system preferences)\n";
3343 SetVersion ($DBversion);
3345 $DBversion = "3.01.00.102";
3346 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
3348 "UPDATE permissions set description = 'Edit catalog (Modify bibliographic/holdings data)' where module_bit = 9 and code = 'edit_catalogue'"
3350 print "Upgrade to $DBversion done (fixed spelling error in edit_catalogue permission)\n";
3351 SetVersion ($DBversion);
3354 $DBversion = "3.01.00.103";
3355 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
3356 $dbh->do("INSERT INTO permissions (module_bit, code, description) VALUES (13, 'moderate_tags', 'Moderate patron tags')");
3357 print "Upgrade to $DBversion done (adding patron permissions for tags tool)\n";
3358 SetVersion ($DBversion);
3361 $DBversion = "3.01.00.104";
3362 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
3364 my ($maninv_count, $borrnotes_count);
3365 eval { $maninv_count = $dbh->do("SELECT 1 FROM authorised_values WHERE category='MANUAL_INV'"); };
3366 if ($maninv_count == 0) {
3367 $dbh->do("INSERT INTO authorised_values (category,authorised_value,lib) VALUES ('MANUAL_INV','Copier Fees','.25')");
3369 eval { $borrnotes_count = $dbh->do("SELECT 1 FROM authorised_values WHERE category='BOR_NOTES'"); };
3370 if ($borrnotes_count == 0) {
3371 $dbh->do("INSERT INTO authorised_values (category,authorised_value,lib) VALUES ('BOR_NOTES','ADDR','Address Notes')");
3374 $dbh->do("INSERT INTO authorised_values (category,authorised_value,lib) VALUES ('LOC','CART','Book Cart')");
3375 $dbh->do("INSERT INTO authorised_values (category,authorised_value,lib) VALUES ('LOC','PROC','Processing Center')");
3377 print "Upgrade to $DBversion done ( add defaults to authorized values for MANUAL_INV and BOR_NOTES and add new default LOC authorized values for shelf to cart processing )\n";
3378 SetVersion ($DBversion);
3382 $DBversion = "3.01.00.105";
3383 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
3385 CREATE TABLE `collections` (
3386 `colId` int(11) NOT NULL auto_increment,
3387 `colTitle` varchar(100) NOT NULL default '',
3388 `colDesc` text NOT NULL,
3389 `colBranchcode` varchar(4) default NULL COMMENT 'branchcode for branch where item should be held.',
3390 PRIMARY KEY (`colId`)
3391 ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
3395 CREATE TABLE `collections_tracking` (
3396 `ctId` int(11) NOT NULL auto_increment,
3397 `colId` int(11) NOT NULL default '0' COMMENT 'collections.colId',
3398 `itemnumber` int(11) NOT NULL default '0' COMMENT 'items.itemnumber',
3399 PRIMARY KEY (`ctId`)
3400 ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
3403 INSERT INTO permissions (module_bit, code, description)
3404 VALUES ( 13, 'rotating_collections', 'Manage Rotating collections')" );
3405 print "Upgrade to $DBversion done (added collection and collection_tracking tables for rotating collections functionality)\n";
3406 SetVersion ($DBversion);
3408 $DBversion = "3.01.00.106";
3409 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
3410 $dbh->do("INSERT INTO `systempreferences` (variable,value,options,explanation,type) VALUES ( 'OpacAddMastheadLibraryPulldown', '0', '', 'Adds a pulldown menu to select the library to search on the opac masthead.', 'YesNo' )");
3411 print "Upgrade to $DBversion done (added OpacAddMastheadLibraryPulldown system preferences)\n";
3412 SetVersion ($DBversion);
3415 $DBversion = '3.01.00.107';
3416 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
3417 my $upgrade_script = C4::Context->config("intranetdir") . "/installer/data/mysql/patroncards_upgrade.pl";
3418 system("perl $upgrade_script");
3419 print "Upgrade to $DBversion done (Migrated labels and patroncards tables and data to new schema.)\n";
3420 SetVersion ($DBversion);
3423 $DBversion = '3.01.00.108';
3424 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
3426 ALTER TABLE `export_format` ADD `csv_separator` VARCHAR( 2 ) NOT NULL AFTER `marcfields` ,
3427 ADD `field_separator` VARCHAR( 2 ) NOT NULL AFTER `csv_separator` ,
3428 ADD `subfield_separator` VARCHAR( 2 ) NOT NULL AFTER `field_separator`
3430 print "Upgrade to $DBversion done (added separators for csv export)\n";
3431 SetVersion ($DBversion);
3434 $DBversion = "3.01.00.109";
3435 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
3437 ALTER TABLE `export_format` ADD `encoding` VARCHAR(255) NOT NULL AFTER `subfield_separator`
3439 print "Upgrade to $DBversion done (added encoding for csv export)\n";
3440 SetVersion ($DBversion);
3443 $DBversion = '3.01.00.110';
3444 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
3445 $dbh->do('ALTER TABLE `categories` ADD COLUMN `enrolmentperioddate` DATE NULL DEFAULT NULL AFTER `enrolmentperiod`');
3446 print "Upgrade to $DBversion done (Add enrolment period date support)\n";
3447 SetVersion ($DBversion);
3450 $DBversion = '3.01.00.111';
3451 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
3452 print "Upgrade to $DBversion done (mark DBrev for 3.2-alpha release)\n";
3453 SetVersion ($DBversion);
3456 $DBversion = '3.01.00.112';
3457 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
3458 $dbh->do("INSERT INTO `systempreferences` (variable,value,options,explanation,type) VALUES ('SpineLabelShowPrintOnBibDetails', '0', '', 'If turned on, a \"Print Label\" link will appear for each item on the bib details page in the staff interface.', 'YesNo');");
3459 print "Upgrade to $DBversion done ( added Show Spine Label Printer on Bib Items Details preferences )\n";
3460 SetVersion ($DBversion);
3463 $DBversion = '3.01.00.113';
3464 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
3465 my $value = C4::Context->preference("XSLTResultsDisplay");
3467 "INSERT INTO systempreferences (variable,value,type)
3468 VALUES('OPACXSLTResultsDisplay',?,'YesNo')", {}, $value ? 1 : 0);
3469 $value = C4::Context->preference("XSLTDetailsDisplay");
3471 "INSERT INTO systempreferences (variable,value,type)
3472 VALUES('OPACXSLTDetailsDisplay',?,'YesNo')", {}, $value ? 1 : 0);
3473 print "Upgrade to $DBversion done (added two new syspref: OPACXSLTResultsDisplay and OPACXSLTDetailDisplay). You may have to go in Admin > System preference to tweak XSLT related syspref both in OPAC and Search tabs.\n";
3474 SetVersion ($DBversion);
3477 $DBversion = '3.01.00.114';
3478 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
3479 $dbh->do("INSERT INTO systempreferences (variable,value,explanation,options,type)VALUES('AutoSelfCheckAllowed', '0', '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')");
3480 $dbh->do("INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('AutoSelfCheckID','','Staff ID with circulation rights to be used for automatic web-based self-check. Only applies if AutoSelfCheckAllowed syspref is turned on.','','free')");
3481 $dbh->do("INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('AutoSelfCheckPass','','Password to be used for automatic web-based self-check. Only applies if AutoSelfCheckAllowed syspref is turned on.','','free')");
3482 print "Upgrade to $DBversion done ( Added AutoSelfCheckAllowed, AutoSelfCheckID, and AutoShelfCheckPass system preference )\n";
3483 SetVersion ($DBversion);
3486 $DBversion = '3.01.00.115';
3487 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
3488 $dbh->do('UPDATE aqorders SET quantityreceived = 0 WHERE quantityreceived IS NULL');
3489 $dbh->do('ALTER TABLE aqorders MODIFY COLUMN quantityreceived smallint(6) NOT NULL DEFAULT 0');
3490 print "Upgrade to $DBversion done ( Default aqorders.quantityreceived to 0 )\n";
3491 SetVersion ($DBversion);
3494 $DBversion = '3.01.00.116';
3495 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
3496 if (C4::Context->preference('OrderPdfFormat') eq 'pdfformat::example'){
3497 $dbh->do("UPDATE `systempreferences` set value='pdfformat::layout2pages' WHERE variable='OrderPdfFormat'");
3499 print "Upgrade to $DBversion done (corrected default OrderPdfFormat value if still set wrong )\n";
3500 SetVersion ($DBversion);
3503 $DBversion = '3.01.00.117';
3504 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
3505 $dbh->do("UPDATE language_rfc4646_to_iso639 SET iso639_2_code = 'por' WHERE rfc4646_subtag='pt' ");
3506 print "Upgrade to $DBversion done (corrected ISO 639-2 language code for Portuguese)\n";
3507 SetVersion ($DBversion);
3510 $DBversion = '3.01.00.118';
3511 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
3512 my ($count) = $dbh->selectrow_array("SELECT count(*) FROM information_schema.columns
3513 WHERE table_name = 'aqbudgets_planning'
3514 AND column_name = 'display'");
3516 $dbh->do("ALTER TABLE aqbudgets_planning ADD COLUMN display tinyint(1) DEFAULT 1");
3518 print "Upgrade to $DBversion done (bug 4203: add display column to aqbudgets_planning if missing)\n";
3519 SetVersion ($DBversion);
3522 $DBversion = '3.01.00.119';
3523 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
3524 eval{require Locale::Currency::Format};
3526 print "Upgrade to $DBversion done (Locale::Currency::Format installed.)\n";
3527 SetVersion ($DBversion);
3530 print "Upgrade to $DBversion done.\n";
3531 print "NOTICE: The Locale::Currency::Format package is not installed on your system or not found in \@INC.\nThis dependency is required in order to include fine information in overdue notices.\nPlease ask your system administrator to install this package.\n";
3532 SetVersion ($DBversion);
3536 $DBversion = '3.01.00.120';
3537 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
3539 INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('soundon','0','Enable circulation sounds during checkin and checkout in the staff interface. Not supported by all web browsers yet.','','YesNo');
3541 print "Upgrade to $DBversion done (bug 1080: add soundon system preference for circulation sounds)\n";
3542 SetVersion ($DBversion);
3545 $DBversion = '3.01.00.121';
3546 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
3547 $dbh->do("ALTER TABLE `reserves` ADD `expirationdate` DATE DEFAULT NULL");
3548 $dbh->do("ALTER TABLE `reserves` ADD `lowestPriority` tinyint(1) NOT NULL");
3549 $dbh->do("ALTER TABLE `old_reserves` ADD `expirationdate` DATE DEFAULT NULL");
3550 $dbh->do("ALTER TABLE `old_reserves` ADD `lowestPriority` tinyint(1) NOT NULL");
3551 print "Upgrade to $DBversion done ( Added Additional Fields to Reserves tables )\n";
3552 SetVersion ($DBversion);
3555 $DBversion = '3.01.00.122';
3556 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
3558 INSERT INTO systempreferences (variable,value,explanation,options,type)
3559 VALUES ('OAI-PMH:ConfFile', '', 'If empty, Koha OAI Server operates in normal mode, otherwise it operates in extended mode.','','File');
3561 print "Upgrade to $DBversion done. — Add a new system preference OAI-PMF:ConfFile\n";
3562 SetVersion ($DBversion);
3565 $DBversion = "3.01.00.123";
3566 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
3567 $dbh->do("INSERT INTO `permissions` (`module_bit`, `code`, `description`) VALUES
3568 (6, 'place_holds', 'Place holds for patrons')");
3569 $dbh->do("INSERT INTO `permissions` (`module_bit`, `code`, `description`) VALUES
3570 (6, 'modify_holds_priority', 'Modify holds priority')");
3571 $dbh->do("UPDATE `userflags` SET `flagdesc` = 'Place and modify holds for patrons' WHERE `flag` = 'reserveforothers'");
3572 print "Upgrade to $DBversion done (Add granular permission for holds modification and update description of reserveforothers permission)\n";
3573 SetVersion ($DBversion);
3576 $DBversion = '3.01.00.124';
3577 if (C4::Context->preference('Version') < TransformToNum($DBversion)){
3579 INSERT INTO `letter` (module, code, name, title, content) VALUES('reserves', 'HOLDPLACED', 'Hold Placed on Item', 'Hold Placed on Item','A hold has been placed on the following item : <<title>> (<<biblionumber>>) by the user <<firstname>> <<surname>> (<<cardnumber>>).');
3581 print "Upgrade to $DBversion done (bug 3242: add HOLDPLACED letter template, which is used when emailLibrarianWhenHoldIsPlaced is enabled)\n";
3582 SetVersion ($DBversion);
3585 $DBversion = '3.01.00.125';
3586 if (C4::Context->preference('Version') < TransformToNum($DBversion)){
3588 INSERT INTO `systempreferences` ( `variable` , `value` , `options` , `explanation` , `type` ) VALUES ( 'PrintNoticesMaxLines', '0', '', 'If greater than 0, sets the maximum number of lines an overdue notice will print. If the number of items is greater than this number, the notice will end with a warning asking the borrower to check their online account for a full list of overdue items.', 'Integer' );
3591 INSERT INTO message_transport_types (message_transport_type) values ('print');
3593 print "Upgrade to $DBversion done (bug 3482: Printable hold and overdue notices)\n";
3594 SetVersion ($DBversion);
3597 $DBversion = "3.01.00.126";
3598 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
3599 $dbh->do("INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES ('ILS-DI','0','Enable ILS-DI services. See http://your.opac.name/cgi-bin/koha/ilsdi.pl for online documentation.','','YesNo')");
3600 $dbh->do("INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES ('ILS-DI:AuthorizedIPs','127.0.0.1','A comma separated list of IP addresses authorized to access the web services.','','free')");
3602 print "Upgrade to $DBversion done (Adding ILS-DI updates and ILS-DI:AuthorizedIPs)\n";
3603 SetVersion ($DBversion);
3606 $DBversion = '3.01.00.127';
3607 if (C4::Context->preference('Version') < TransformToNum($DBversion)){
3608 $dbh->do("ALTER TABLE messages CHANGE branchcode branchcode varchar(10);");
3609 print "Upgrade to $DBversion done (bug 4190: messages in patron account did not work with branchcodes > 4)\n";
3610 SetVersion ($DBversion);
3613 $DBversion = '3.01.00.128';
3614 if (C4::Context->preference('Version') < TransformToNum($DBversion)){
3615 $dbh->do('CREATE INDEX budget_id ON aqorders (budget_id );');
3616 print "Upgrade to $DBversion done (bug 4331: index orders by budget_id)\n";
3617 SetVersion ($DBversion);
3620 $DBversion = "3.01.00.129";
3621 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
3622 $dbh->do("UPDATE `permissions` SET `code` = 'items_batchdel' WHERE `permissions`.`module_bit` =13 AND `permissions`.`code` = 'batchdel' LIMIT 1 ;");
3623 $dbh->do("UPDATE `permissions` SET `code` = 'items_batchmod' WHERE `permissions`.`module_bit` =13 AND `permissions`.`code` = 'batchmod' LIMIT 1 ;");
3624 print "Upgrade to $DBversion done (Change permissions names for item batch modification / deletion)\n";
3626 SetVersion ($DBversion);
3629 $DBversion = "3.01.00.130";
3630 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
3631 sanitize_zero_date('reserves', 'expirationdate');
3632 print "Upgrade to $DBversion done (change reserves.expirationdate values of 0000-00-00 to NULL (bug 1532)\n";
3633 SetVersion ($DBversion);
3636 $DBversion = "3.01.00.131";
3637 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
3639 INSERT IGNORE INTO message_transport_types (message_transport_type) VALUES ('print'),('feed');
3641 print "Upgrade to $DBversion done (adding print and feed message transport types)\n";
3642 SetVersion ($DBversion);
3645 $DBversion = "3.01.00.132";
3646 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
3648 ALTER TABLE language_descriptions ADD INDEX subtag_type_lang (subtag, type, lang);
3650 print "Upgrade to $DBversion done (Adding index to language_descriptions table)\n";
3651 SetVersion ($DBversion);
3654 $DBversion = '3.01.00.133';
3655 if (C4::Context->preference('Version') < TransformToNum($DBversion)){
3656 $dbh->do("INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES ('OverduesBlockCirc','noblock','When checking out an item should overdues block checkout, generate a confirmation dialogue, or allow checkout','noblock|confirmation|block','Choice')");
3657 print "Upgrade to $DBversion done (bug 4405: added OverduesBlockCirc syspref to control whether circulation is blocked if a borrower has overdues)\n";
3658 SetVersion ($DBversion);
3661 $DBversion = '3.01.00.134';
3662 if (C4::Context->preference('Version') < TransformToNum($DBversion)){
3663 $dbh->do("INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES ('DisplayMultiPlaceHold','1','Display the ability to place multiple holds or not','','YesNo')");
3664 print "Upgrade to $DBversion done (adding syspref DisplayMultiPlaceHold to control whether multiple holds can be placed from the search results page)\n";
3665 SetVersion ($DBversion);
3668 $DBversion = '3.01.00.135';
3669 if (C4::Context->preference('Version') < TransformToNum($DBversion)){
3671 INSERT INTO `letter` (module, code, name, title, content) VALUES
3672 ('reserves', 'HOLD_PRINT', 'Hold Available for Pickup (print notice)', 'Hold Available for Pickup (print notice)', '<<branches.branchname>>\r\n<<branches.branchaddress1>>\r\n<<branches.branchaddress2>>\r\n\r\n\r\nChange Service Requested\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n<<borrowers.firstname>> <<borrowers.surname>>\r\n<<borrowers.address>>\r\n<<borrowers.city>> <<borrowers.zipcode>>\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n<<borrowers.firstname>> <<borrowers.surname>> <<borrowers.cardnumber>>\r\n\r\nYou have a hold available for pickup as of <<reserves.waitingdate>>:\r\n\r\nTitle: <<biblio.title>>\r\nAuthor: <<biblio.author>>\r\nCopy: <<items.copynumber>>\r\n')
3674 print "Upgrade to $DBversion done (bug 4377: added HOLD_PRINT message template)\n";
3675 SetVersion ($DBversion);
3678 $DBversion = '3.01.00.136';
3679 if (C4::Context->preference('Version') < TransformToNum($DBversion)){
3681 INSERT INTO permissions (module_bit, code, description) VALUES
3682 ( 9, 'edit_items', 'Edit Items');});
3683 print "Upgrade to $DBversion done (Adding a new permission to edit items)\n";
3684 SetVersion ($DBversion);
3687 $DBversion = "3.01.00.137";
3688 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
3690 INSERT INTO permissions (module_bit, code, description) VALUES
3691 (15, 'check_expiration', 'Check the expiration of a serial'),
3692 (15, 'claim_serials', 'Claim missing serials'),
3693 (15, 'create_subscription', 'Create a new subscription'),
3694 (15, 'delete_subscription', 'Delete an existing subscription'),
3695 (15, 'edit_subscription', 'Edit an existing subscription'),
3696 (15, 'receive_serials', 'Serials receiving'),
3697 (15, 'renew_subscription', 'Renew a subscription'),
3698 (15, 'routing', 'Routing');
3700 print "Upgrade to $DBversion done (adding granular permissions for serials)\n";
3701 SetVersion ($DBversion);
3704 $DBversion = "3.01.00.138";
3705 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
3706 $dbh->do("DELETE FROM systempreferences WHERE variable = 'GranularPermissions'");
3707 print "Upgrade to $DBversion done (bug 4896: removing GranularPermissions syspref; use of granular permissions is now the default)\n";
3708 SetVersion ($DBversion);
3711 $DBversion = '3.01.00.139';
3712 if (C4::Context->preference('Version') < TransformToNum($DBversion)){
3713 $dbh->do("ALTER TABLE message_attributes CHANGE message_name message_name varchar(40);");
3714 print "Upgrade to $DBversion done (bug 3682: change message_name from varchar(20) to varchar(40))\n";
3715 SetVersion ($DBversion);
3718 $DBversion = '3.01.00.140';
3719 if (C4::Context->preference('Version') < TransformToNum($DBversion)){
3720 $dbh->do("UPDATE systempreferences SET value = '0' WHERE variable = 'TagsModeration' AND value is NULL");
3721 print "Upgrade to $DBversion done (bug 4312 TagsModeration changed from NULL to 0)\n";
3722 SetVersion ($DBversion);
3725 $DBversion = '3.01.00.141';
3726 if (C4::Context->preference('Version') < TransformToNum($DBversion)){
3727 $dbh->do(qq{DELETE FROM message_attributes WHERE message_attribute_id=3;});
3728 $dbh->do(qq{DELETE FROM letter WHERE code='EVENT' AND title='Upcoming Library Event';});
3729 print "Upgrade to $DBversion done Remove upcoming events messaging option (bug 2434)\n";
3730 SetVersion ($DBversion);
3733 $DBversion = '3.01.00.142';
3734 if (C4::Context->preference('Version') < TransformToNum($DBversion)){
3735 $dbh->do(qq{DELETE FROM message_transports WHERE message_attribute_id=3;});
3736 print "Upgrade to $DBversion done (Remove upcoming events messaging option part 2 (bug 2434))\n";
3737 SetVersion ($DBversion);
3740 $DBversion = '3.01.00.143';
3741 if (C4::Context->preference('Version') < TransformToNum($DBversion)){
3742 $dbh->do(qq{CREATE INDEX auth_value_idx ON authorised_values (authorised_value)});
3743 $dbh->do(qq{CREATE INDEX auth_val_cat_idx ON borrower_attribute_types (authorised_value_category)});
3744 print "Upgrade to $DBversion done (Create index on authorised_values and borrower_attribute_types (bug 4139))\n";
3745 SetVersion ($DBversion);
3748 $DBversion = '3.01.00.144';
3749 if (C4::Context->preference('Version') < TransformToNum($DBversion)){
3750 $dbh->do(qq{UPDATE systempreferences SET value='normal' where value='default' and variable='IntranetBiblioDefaultView'});
3751 print "Upgrade to $DBversion done (Update the 'default' to 'normal' for the IntranetBiblioDefaultView syspref (bug 5007))\n";
3752 SetVersion ($DBversion);
3755 $DBversion = "3.01.00.145";
3756 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
3757 $dbh->do("ALTER TABLE borrowers ADD KEY `guarantorid` (guarantorid);");
3758 print "Upgrade to $DBversion done (Add index on guarantorid)\n";
3759 SetVersion ($DBversion);
3762 $DBversion = '3.01.00.999';
3763 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
3764 print "Upgrade to $DBversion done (3.2.0 release candidate)\n";
3765 SetVersion ($DBversion);
3768 $DBversion = "3.02.00.000";
3769 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
3770 my $value = $dbh->selectrow_array("SELECT value FROM systempreferences WHERE variable = 'HomeOrHoldingBranch'");
3771 $dbh->do("INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('HomeOrHoldingBranchReturn','$value','Used by Circulation to determine which branch of an item to check checking-in items','holdingbranch|homebranch','Choice');");
3772 print "Upgrade to $DBversion done (Add HomeOrHoldingBranchReturn system preference)\n";
3773 SetVersion ($DBversion);
3776 $DBversion = "3.02.00.001";
3777 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
3778 $dbh->do(q{DELETE FROM systempreferences WHERE variable IN (
3783 'OPACSubscriptionDisplay',
3784 'OPACDisplayExtendedSubInfo',
3795 print "Upgrade to $DBversion done (bug 3756: remove disused system preferences)\n";
3796 SetVersion ($DBversion);
3799 $DBversion = "3.02.00.002";
3800 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
3801 $dbh->do(q{DELETE FROM systempreferences WHERE variable = 'OpacPrivacy'});
3802 print "Upgrade to $DBversion done (bug 3881: remove unused OpacPrivacy system preference)\n";
3803 SetVersion ($DBversion);
3806 $DBversion = "3.02.00.003";
3807 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
3808 $dbh->do(q{UPDATE systempreferences SET variable = 'ILS-DI:AuthorizedIPs' WHERE variable = 'ILS-DI:Authorized_IPs'});
3809 print "Upgrade to $DBversion done (correct ILS-DI:AuthorizedIPs)\n";
3810 SetVersion ($DBversion);
3813 $DBversion = "3.02.00.004";
3814 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
3815 print "Upgrade to $DBversion done (3.2.0 general release)\n";
3816 SetVersion ($DBversion);
3818 # This is the point where 3.2.x and master diverged, we can use $original_version to make sure we don't
3820 # apply updates that have already been done
3822 $DBversion = "3.03.00.001";
3823 if (C4::Context->preference("Version") < TransformToNum($DBversion) && $original_version < TransformToNum("3.02.00.005")) {
3824 $dbh->do("DELETE FROM subscriptionroutinglist WHERE borrowernumber IS NULL;");
3825 $dbh->do("ALTER TABLE subscriptionroutinglist MODIFY COLUMN `borrowernumber` int(11) NOT NULL;");
3826 $dbh->do("DELETE FROM subscriptionroutinglist WHERE subscriptionid IS NULL;");
3827 $dbh->do("ALTER TABLE subscriptionroutinglist MODIFY COLUMN `subscriptionid` int(11) NOT NULL;");
3828 $dbh->do("CREATE TEMPORARY TABLE del_subscriptionroutinglist
3829 SELECT s1.routingid FROM subscriptionroutinglist s1
3830 WHERE EXISTS (SELECT * FROM subscriptionroutinglist s2
3831 WHERE s2.borrowernumber = s1.borrowernumber
3832 AND s2.subscriptionid = s1.subscriptionid
3833 AND s2.routingid < s1.routingid);");
3834 $dbh->do("DELETE FROM subscriptionroutinglist
3835 WHERE routingid IN (SELECT routingid FROM del_subscriptionroutinglist);");
3836 $dbh->do("ALTER TABLE subscriptionroutinglist ADD UNIQUE (subscriptionid, borrowernumber);");
3837 $dbh->do("ALTER TABLE subscriptionroutinglist
3838 ADD CONSTRAINT `subscriptionroutinglist_ibfk_1` FOREIGN KEY (`borrowernumber`)
3839 REFERENCES `borrowers` (`borrowernumber`)
3840 ON DELETE CASCADE ON UPDATE CASCADE");
3841 $dbh->do("ALTER TABLE subscriptionroutinglist
3842 ADD CONSTRAINT `subscriptionroutinglist_ibfk_2` FOREIGN KEY (`subscriptionid`)
3843 REFERENCES `subscription` (`subscriptionid`)
3844 ON DELETE CASCADE ON UPDATE CASCADE");
3845 print "Upgrade to $DBversion done (Make subscriptionroutinglist more strict)\n";
3846 SetVersion ($DBversion);
3849 $DBversion = '3.03.00.002';
3850 if (C4::Context->preference("Version") < TransformToNum($DBversion) && $original_version < TransformToNum("3.02.00.006")) {
3851 $dbh->do("UPDATE language_rfc4646_to_iso639 SET iso639_2_code='arm' WHERE rfc4646_subtag='hy';");
3852 $dbh->do("UPDATE language_rfc4646_to_iso639 SET iso639_2_code='eng' WHERE rfc4646_subtag='en';");
3853 $dbh->do("INSERT INTO language_rfc4646_to_iso639(rfc4646_subtag,iso639_2_code) VALUES( 'fi','fin');");
3854 $dbh->do("UPDATE language_rfc4646_to_iso639 SET iso639_2_code='fre' WHERE rfc4646_subtag='fr';");
3855 $dbh->do("INSERT INTO language_rfc4646_to_iso639(rfc4646_subtag,iso639_2_code) VALUES( 'lo','lao');");
3856 $dbh->do("UPDATE language_rfc4646_to_iso639 SET iso639_2_code='ita' WHERE rfc4646_subtag='it';");
3857 $dbh->do("INSERT INTO language_rfc4646_to_iso639(rfc4646_subtag,iso639_2_code) VALUES( 'sr','srp');");
3858 $dbh->do("INSERT INTO language_rfc4646_to_iso639(rfc4646_subtag,iso639_2_code) VALUES( 'tet','tet');");
3859 $dbh->do("INSERT INTO language_rfc4646_to_iso639(rfc4646_subtag,iso639_2_code) VALUES( 'ur','urd');");
3861 print "Upgrade to $DBversion done (Correct language mappings)\n";
3862 SetVersion ($DBversion);
3865 $DBversion = '3.03.00.003';
3866 if (C4::Context->preference("Version") < TransformToNum($DBversion) && $original_version < TransformToNum("3.02.00.007")) {
3867 $dbh->do("INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('UseTablesortForCirc','0','If on, use the JQuery tablesort function on the list of current borrower checkouts on the circulation page. Note that the use of this function may slow down circ for patrons with may checkouts.','','YesNo');");
3868 print "Upgrade to $DBversion done (Add UseTablesortForCirc syspref)\n";
3869 SetVersion ($DBversion);
3872 $DBversion = '3.03.00.004';
3873 if (C4::Context->preference("Version") < TransformToNum($DBversion) && $original_version < TransformToNum("3.02.01.001")) {
3874 my $count = $dbh->selectrow_array('SELECT COUNT(*) FROM letter WHERE module = ? AND code = ?', {}, 'suggestions', 'ACCEPTED');
3876 INSERT INTO `letter`
3877 (module, code, name, title, content)
3879 ('suggestions','ACCEPTED','Suggestion accepted', 'Purchase suggestion accepted','Dear <<borrowers.firstname>> <<borrowers.surname>>,\n\nYou have suggested that the library acquire <<suggestions.title>> by <<suggestions.author>>.\n\nThe library has reviewed your suggestion today. The item will be ordered as soon as possible. You will be notified by mail when the order is completed, and again when the item arrives at the library.\n\nIf you have any questions, please email us at <<branches.branchemail>>.\n\nThank you,\n\n<<branches.branchname>>')
3880 /) unless $count > 0;
3881 $count = $dbh->selectrow_array('SELECT COUNT(*) FROM letter WHERE module = ? AND code = ?', {}, 'suggestions', 'AVAILABLE');
3883 INSERT INTO `letter`
3884 (module, code, name, title, content)
3886 ('suggestions','AVAILABLE','Suggestion available', 'Suggested purchase available','Dear <<borrowers.firstname>> <<borrowers.surname>>,\n\nYou have suggested that the library acquire <<suggestions.title>> by <<suggestions.author>>.\n\nWe are pleased to inform you that the item you requested is now part of the collection.\n\nIf you have any questions, please email us at <<branches.branchemail>>.\n\nThank you,\n\n<<branches.branchname>>')
3887 /) unless $count > 0;
3888 $count = $dbh->selectrow_array('SELECT COUNT(*) FROM letter WHERE module = ? AND code = ?', {}, 'suggestions', 'ORDERED');
3890 INSERT INTO `letter`
3891 (module, code, name, title, content)
3893 ('suggestions','ORDERED','Suggestion ordered', 'Suggested item ordered','Dear <<borrowers.firstname>> <<borrowers.surname>>,\n\nYou have suggested that the library acquire <<suggestions.title>> by <<suggestions.author>>.\n\nWe are pleased to inform you that the item you requested has now been ordered. It should arrive soon, at which time it will be processed for addition into the collection.\n\nYou will be notified again when the book is available.\n\nIf you have any questions, please email us at <<branches.branchemail>>\n\nThank you,\n\n<<branches.branchname>>')
3894 /) unless $count > 0;
3895 $count = $dbh->selectrow_array('SELECT COUNT(*) FROM letter WHERE module = ? AND code = ?', {}, 'suggestions', 'REJECTED');
3897 INSERT INTO `letter`
3898 (module, code, name, title, content)
3900 ('suggestions','REJECTED','Suggestion rejected', 'Purchase suggestion declined','Dear <<borrowers.firstname>> <<borrowers.surname>>,\n\nYou have suggested that the library acquire <<suggestions.title>> by <<suggestions.author>>.\n\nThe library has reviewed your request today, and has decided not to accept the suggestion at this time.\n\nThe reason given is: <<suggestions.reason>>\n\nIf you have any questions, please email us at <<branches.branchemail>>.\n\nThank you,\n\n<<branches.branchname>>')
3901 /) unless $count > 0;
3902 print "Upgrade to $DBversion done (bug 5127: add default templates for suggestion status change notifications)\n";
3903 SetVersion ($DBversion);
3906 $DBversion = '3.03.00.005';
3907 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
3908 $dbh->do("update `systempreferences` set options='whitespace|T-prefix|cuecat|libsuite8' where variable='itemBarcodeInputFilter'");
3909 print "Upgrade to $DBversion done (Add itemBarcodeInputFilter choice libsuite8)\n";
3912 $DBversion = '3.03.00.006';
3913 if (C4::Context->preference("Version") < TransformToNum($DBversion) && $original_version < TransformToNum("3.02.01.002")) {
3914 $dbh->do("ALTER TABLE deletedborrowers ADD `privacy` int(11) AFTER smsalertnumber;");
3915 $dbh->do("ALTER TABLE deletedborrowers CHANGE `cardnumber` `cardnumber` varchar(16);");
3916 print "Upgrade to $DBversion done (Fix differences between borrowers and deletedborrowers)\n";
3917 SetVersion ($DBversion);
3920 $DBversion = '3.03.00.007';
3921 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
3922 $dbh->do("ALTER table suggestions ADD quantity SMALLINT(6) default NULL,
3923 ADD currency VARCHAR(3) default NULL,
3924 ADD price DECIMAL(28,6) default NULL,
3925 ADD total DECIMAL(28,6) default NULL;
3927 print "Upgrade to $DBversion done (Added acq related columns to suggestions)\n";
3928 SetVersion ($DBversion);
3931 $DBversion = '3.03.00.008';
3932 if (C4::Context->preference('Version') < TransformToNum($DBversion)){
3933 $dbh->do("INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES ('OPACNoResultsFound','','Display this HTML when no results are found for a search in the OPAC','70|10','Textarea')");
3934 print "Upgrade to $DBversion done (adding syspref OPACNoResultsFound to control what displays when no results are found for a search in the OPAC.)\n";
3935 SetVersion ($DBversion);
3938 $DBversion = '3.03.00.009';
3939 if (C4::Context->preference("Version") < TransformToNum($DBversion) && $original_version < TransformToNum("3.02.01.003")) {
3940 $dbh->do("INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('IntranetUserCSS','','Add CSS to be included in the Intranet',NULL,'free')");
3941 print "Upgrade to $DBversion done (Add IntranetUserCSS syspref)\n";
3942 SetVersion ($DBversion);
3945 $DBversion = "3.03.00.010";
3946 if (C4::Context->preference("Version") < TransformToNum($DBversion) && $original_version < TransformToNum("3.02.02.001")) {
3947 $dbh->do("UPDATE `marc_subfield_structure` SET liblibrarian = 'Distance from earth' WHERE liblibrarian = 'Distrance from earth' AND tagfield = '034' AND tagsubfield = 'r';");
3948 $dbh->do("UPDATE `marc_subfield_structure` SET libopac = 'Distance from earth' WHERE libopac = 'Distrance from earth' AND tagfield = '034' AND tagsubfield = 'r';");
3949 print "Upgrade to $DBversion done (Fix misspelled 034r subfield in MARC21 Frameworks)\n";
3950 SetVersion ($DBversion);
3953 $DBversion = "3.03.00.011";
3954 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
3955 $dbh->do("UPDATE aqbooksellers SET gstrate=NULL WHERE gstrate=0.0");
3956 print "Upgrade to $DBversion done (Bug 5186: allow GST rate to be set to 0)\n";
3957 SetVersion ($DBversion);
3960 $DBversion = "3.03.00.012";
3961 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
3962 $dbh->do("INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('maxItemsInSearchResults',20,'Specify the maximum number of items to display for each result on a page of results',NULL,'free')");
3963 print "Upgrade to $DBversion done (Bug 2142: maxItemsInSearchResults syspref resurrected)\n";
3964 SetVersion ($DBversion);
3967 $DBversion = "3.03.00.013";
3968 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
3969 $dbh->do("INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES ('OpacPublic','1','If set to OFF and user is not logged in, all OPAC pages require authentication, and OPAC searchbar is removed)','','YesNo')");
3970 print "Upgrade to $DBversion done (added 'OpacPublic' syspref)\n";
3971 SetVersion ($DBversion);
3974 $DBversion = "3.03.00.014";
3975 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
3976 $dbh->do("INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES ('ShelfBrowserUsesLocation','1','Use the item location when finding items for the shelf browser.','1','YesNo')");
3977 $dbh->do("INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES ('ShelfBrowserUsesHomeBranch','1','Use the item home branch when finding items for the shelf browser.','1','YesNo')");
3978 $dbh->do("INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES ('ShelfBrowserUsesCcode','0','Use the item collection code when finding items for the shelf browser.','1','YesNo')");
3979 print "Upgrade to $DBversion done (Add flexible shelf browser constraints)\n";
3980 SetVersion ($DBversion);
3983 $DBversion = "3.03.00.015";
3984 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
3985 if ( C4::Context->preference("marcflavour") eq "MARC21" ) {
3986 my $sth = $dbh->prepare(
3987 "INSERT INTO `marc_subfield_structure` (`tagfield`, `tagsubfield`, `liblibrarian`, `libopac`, `repeatable`, `mandatory`, `kohafield`,
3988 `tab`, `authorised_value`, `authtypecode`, `value_builder`, `isurl`, `hidden`, `frameworkcode`, `seealso`, `link`, `defaultvalue`)
3989 VALUES ( ?, '9', '9 (RLIN)', '9 (RLIN)', 0, 0, '', 6, '', '', '', 0, -5, '', '', '', NULL)"
3991 $sth->execute('648');
3992 $sth->execute('654');
3993 $sth->execute('655');
3994 $sth->execute('656');
3995 $sth->execute('657');
3996 $sth->execute('658');
3997 $sth->execute('662');
4000 "Upgrade to $DBversion done (Bug 5619: Add subfield 9 to marc21 648,654,655,656,657,658,662)\n";
4002 SetVersion($DBversion);
4005 $DBversion = '3.03.00.016';
4006 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
4007 # reimplement OpacPrivacy system preference
4008 $dbh->do("INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES('OpacPrivacy', '0', 'if ON, allows patrons to define their privacy rules (reading history)',NULL,'YesNo')");
4009 $dbh->do("ALTER TABLE `borrowers` ADD `privacy` INTEGER NOT NULL DEFAULT 1;");
4010 $dbh->do("ALTER TABLE `deletedborrowers` ADD `privacy` INTEGER NOT NULL DEFAULT 1;");
4011 print "Upgrade to $DBversion done (OpacPrivacy reimplementation)\n";
4012 SetVersion($DBversion);
4015 $DBversion = '3.03.00.017';
4016 if (C4::Context->preference("Version") < TransformToNum($DBversion) && $original_version < TransformToNum("3.02.03.001")) {
4017 $dbh->do("ALTER TABLE `currency` CHANGE `rate` `rate` FLOAT( 15, 5 ) NULL DEFAULT NULL;");
4018 print "Upgrade to $DBversion done (Enable currency rates >= 100)\n";
4019 SetVersion ($DBversion);
4022 $DBversion = '3.03.00.018';
4023 if (C4::Context->preference("Version") < TransformToNum($DBversion) && $original_version < TransformToNum("3.02.03.002")) {
4024 $dbh->do( q|update language_descriptions set description = 'Nederlands' where lang = 'nl' and subtag = 'nl'|);
4025 $dbh->do( q|update language_descriptions set description = 'Dansk' where lang = 'da' and subtag = 'da'|);
4026 print "Upgrade to $DBversion done (Correct language descriptions)\n";
4027 SetVersion ($DBversion);
4030 $DBversion = '3.03.00.019';
4031 if (C4::Context->preference("Version") < TransformToNum($DBversion) && $original_version < TransformToNum("3.02.03.003")) {
4033 $dbh->do("UPDATE language_subtag_registry SET description = 'Norwegian bokmål' WHERE subtag = 'nb';");
4034 $dbh->do("INSERT INTO language_rfc4646_to_iso639(rfc4646_subtag,iso639_2_code) VALUES( 'nb','nob');");
4035 $dbh->do("UPDATE language_descriptions SET description = 'Norsk bokmål' WHERE subtag = 'nb' AND lang = 'nb';");
4036 $dbh->do("UPDATE language_descriptions SET description = 'Norwegian bokmål' WHERE subtag = 'nb' AND lang = 'en';");
4037 $dbh->do("UPDATE language_descriptions SET description = 'Norvégien bokmål' WHERE subtag = 'nb' AND lang = 'fr';");
4039 $dbh->do("INSERT INTO language_subtag_registry( subtag, type, description, added) VALUES ( 'nn', 'language', 'Norwegian nynorsk','2011-02-14' )");
4040 $dbh->do("INSERT INTO language_rfc4646_to_iso639(rfc4646_subtag,iso639_2_code) VALUES( 'nn','nno')");
4041 $dbh->do("INSERT INTO language_descriptions(subtag, type, lang, description) VALUES( 'nn', 'language', 'nb', 'Norsk nynorsk')");
4042 $dbh->do("INSERT INTO language_descriptions(subtag, type, lang, description) VALUES( 'nn', 'language', 'nn', 'Norsk nynorsk')");
4043 $dbh->do("INSERT INTO language_descriptions(subtag, type, lang, description) VALUES( 'nn', 'language', 'en', 'Norwegian nynorsk')");
4044 $dbh->do("INSERT INTO language_descriptions(subtag, type, lang, description) VALUES( 'nn', 'language', 'fr', 'Norvégien nynorsk')");
4045 print "Upgrade to $DBversion done (Correct language descriptions for Norwegian)\n";
4046 SetVersion ($DBversion);
4049 $DBversion = '3.03.00.020';
4050 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
4051 $dbh->do("INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES ('AllowFineOverride','0','If on, staff will be able to issue books to patrons with fines greater than noissuescharge.','0','YesNo')");
4052 $dbh->do("INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES ('AllFinesNeedOverride','1','If on, staff will be asked to override every fine, even if it is below noissuescharge.','0','YesNo')");
4053 print "Upgrade to $DBversion done (Bug 5811: Add sysprefs controlling overriding fines)\n";
4054 SetVersion($DBversion);
4057 $DBversion = '3.03.00.021';
4058 if (C4::Context->preference("Version") < TransformToNum($DBversion) && $original_version < TransformToNum("3.02.05.001")) {
4059 $dbh->do("ALTER TABLE items MODIFY enumchron TEXT");
4060 $dbh->do("ALTER TABLE deleteditems MODIFY enumchron TEXT");
4061 print "Upgrade to $DBversion done (bug 5642: longer serial enumeration)\n";
4062 SetVersion ($DBversion);
4065 $DBversion = '3.03.00.022';
4066 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
4067 $dbh->do("INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES ('AuthoritiesLog','0','If ON, log edit/create/delete actions on authorities.','','YesNo');");
4068 print "Upgrade to $DBversion done (Add AuthoritiesLog syspref)\n";
4069 SetVersion ($DBversion);
4072 # due to a mismatch in kohastructure.sql some koha will have missing columns in aqbasketgroup
4073 # this attempts to fix that
4074 $DBversion = '3.03.00.023';
4075 if (C4::Context->preference("Version") < TransformToNum($DBversion) && $original_version < TransformToNum("3.02.05.002")) {
4076 my $sth = $dbh->prepare("SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'aqbasketgroups' AND COLUMN_NAME = 'billingplace'");
4078 $dbh->do("ALTER TABLE aqbasketgroups ADD billingplace VARCHAR(10)") if ! $sth->fetchrow_hashref;
4079 $sth = $dbh->prepare("SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'aqbasketgroups' AND COLUMN_NAME = 'deliveryplace'");
4081 $dbh->do("ALTER TABLE aqbasketgroups ADD deliveryplace VARCHAR(10)") if ! $sth->fetchrow_hashref;
4082 $sth = $dbh->prepare("SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'aqbasketgroups' AND COLUMN_NAME = 'deliverycomment'");
4084 $dbh->do("ALTER TABLE aqbasketgroups ADD deliverycomment VARCHAR(255)") if ! $sth->fetchrow_hashref;
4085 print "Upgrade to $DBversion done (Reconcile aqbasketgroups)\n";
4086 SetVersion ($DBversion);
4089 $DBversion = '3.03.00.024';
4090 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
4091 $dbh->do("INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES ('TraceCompleteSubfields','0','Force subject tracings to only match complete subfields.','0','YesNo')");
4092 $dbh->do("INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES ('UseAuthoritiesForTracings','1','Use authority record numbers for subject tracings instead of heading strings.','0','YesNo')");
4093 print "Upgrade to $DBversion done (Add syspref to force whole-subfield matching on subject tracings)\n";
4094 SetVersion($DBversion);
4097 $DBversion = "3.03.00.025";
4098 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
4099 $dbh->do("INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES ('OPACAllowUserToChooseBranch', 1, 'Allow the user to choose the branch they want to pickup their hold from','1','YesNo')");
4100 print "Upgrade to $DBversion done (Add syspref to control if user can choose pickup branch for holds)\n";
4101 SetVersion ($DBversion);
4104 $DBversion = '3.03.00.026';
4105 if (C4::Context->preference("Version") < TransformToNum($DBversion) && $original_version < TransformToNum("3.02.05.003")) {
4106 $dbh->do("UPDATE `message_attributes` SET message_name='Item Due' WHERE message_attribute_id=1 AND message_name LIKE 'Item DUE'");
4107 print "Upgrade to $DBversion done ( fix capitalization in message type )\n";
4108 SetVersion ($DBversion);
4111 $DBversion = '3.03.00.027';
4112 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
4113 $dbh->do("INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES('displayFacetCount', '0', NULL, NULL, 'YesNo')");
4114 $dbh->do("INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES('maxRecordsForFacets', '20', NULL, NULL, 'Integer')");
4115 print "Upgrade to $DBversion done (Preferences for facet count)\n";
4116 SetVersion ($DBversion);
4119 $DBversion = "3.03.00.028";
4120 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
4121 $dbh->do("INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES ('FacetLabelTruncationLength', 20, 'Truncate facets length to','','free')");
4122 print "Upgrade to $DBversion done (Add FacetLabelTruncationLength syspref to control facets displayed length)\n";
4123 SetVersion ($DBversion);
4126 $DBversion = "3.03.00.029";
4127 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
4128 $dbh->do("INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES ('AllowPurchaseSuggestionBranchChoice', 0, 'Allow user to choose branch when making a purchase suggestion','1','YesNo')");
4129 print "Upgrade to $DBversion done (Add syspref to control if user can choose branch when making purchase suggestion)\n";
4130 SetVersion ($DBversion);
4133 $DBversion = "3.03.00.030";
4134 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
4135 $dbh->do("INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('OpacFavicon','','Enter a complete URL to an image to replace the default Koha favicon on the OPAC','','free')");
4136 $dbh->do("INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('IntranetFavicon','','Enter a complete URL to an image to replace the default Koha favicon on the Staff client','','free')");
4137 print "Upgrade to $DBversion done (Add sysprefs to control custom favicons)\n";
4138 SetVersion ($DBversion);
4141 $DBversion = "3.03.00.031";
4142 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
4143 $dbh->do("INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('FineNotifyAtCheckin',0,'If ON notify librarians of overdue fines on the items they are checking in.',NULL,'YesNo');");
4144 print "Upgrade to $DBversion done (Add syspref FineNotifyAtCheckin)\n";
4145 SetVersion ($DBversion);
4148 $DBversion = '3.03.00.032';
4149 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
4150 $dbh->do("INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES ('TraceSubjectSubdivisions', 1, 'Create searches on all subdivisions for subject tracings.','1','YesNo')");
4151 print "Upgrade to $DBversion done ( include subdivisions when generating subject tracing searches )\n";
4155 $DBversion = '3.03.00.033';
4156 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
4157 $dbh->do("INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES('StaffAuthorisedValueImages', '1', '', NULL, 'YesNo')");
4158 print "Upgrade to $DBversion done (System pref StaffAuthorisedValueImages)\n";
4159 SetVersion ($DBversion);
4162 $DBversion = '3.03.00.034';
4163 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
4164 $dbh->do("ALTER TABLE `categories` ADD `hidelostitems` tinyint(1) NOT NULL default '0' AFTER `reservefee`");
4165 print "Upgrade to $DBversion done (Add hidelostitems preference to borrower categories)\n";
4166 SetVersion ($DBversion);
4169 $DBversion = '3.03.00.035';
4170 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
4171 $dbh->do("ALTER TABLE `issuingrules` ADD hardduedate date default NULL AFTER issuelength");
4172 $dbh->do("ALTER TABLE `issuingrules` ADD hardduedatecompare tinyint NOT NULL default 0 AFTER hardduedate");
4174 if (C4::Context->preference("globalDueDate")) {
4175 $duedate = eval { output_pref( { dt => dt_from_string( C4::Context->preference("globalDueDate") ), dateonly => 1, dateformat => 'iso' } ); };
4176 $dbh->do("UPDATE `issuingrules` SET hardduedate = '$duedate', hardduedatecompare = 0");
4177 } elsif (C4::Context->preference("ceilingDueDate")) {
4178 $duedate = eval { output_pref( { dt => dt_from_string( C4::Context->preference("ceilingDueDate") ), dateonly => 1, dateformat => 'iso' } ); };
4179 $dbh->do("UPDATE `issuingrules` SET hardduedate = '$duedate', hardduedatecompare = -1");
4181 $dbh->do("DELETE FROM `systempreferences` WHERE variable = 'globalDueDate' OR variable = 'ceilingDueDate'");
4182 print "Upgrade to $DBversion done (Move global and ceiling due dates to Circ Rules level)\n";
4183 SetVersion ($DBversion);
4186 $DBversion = '3.03.00.036';
4187 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
4188 $dbh->do("INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES ('COinSinOPACResults', 1, 'If ON, use COinS in OPAC search results page. NOTE: this can slow down search response time significantly','','YesNo')");
4189 print "Upgrade to $DBversion done ( Make COinS optional in OPAC search results )\n";
4190 SetVersion ($DBversion);
4193 $DBversion = '3.03.00.037';
4194 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
4195 $dbh->do("INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('OPACDisplay856uAsImage','OFF','Display the URI in the 856u field as an image, the corresponding OPACXSLT option must be on','OFF|Details|Results|Both','Choice')");
4196 $dbh->do("INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('Display856uAsImage','OFF','Display the URI in the 856u field as an image, the corresponding Staff Client XSLT option must be on','OFF|Details|Results|Both','Choice')");
4197 print "Upgrade to $DBversion done (Add 'Display856uAsImage' and 'OPACDisplay856uAsImage' syspref)\n";
4198 SetVersion ($DBversion);
4201 $DBversion = '3.03.00.038';
4202 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
4203 $dbh->do("INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES ('SelfCheckTimeout',120,'Define the number of seconds before the Web-based Self Checkout times out a patron','','Integer')");
4204 $dbh->do("INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES ('AllowSelfCheckReturns',0,'If enabled, patrons may return items through the Web-based Self Checkout','','YesNo')");
4205 $dbh->do("INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES ('SelfCheckHelpMessage','','Enter HTML to include under the basic Web-based Self Checkout instructions on the Help page','70|10','Textarea')");
4206 print "Upgrade to $DBversion done ( Add Self-checkout by Login system preferences )\n";
4209 $DBversion = "3.03.00.039";
4210 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
4211 $dbh->do("INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('ShowReviewer',1,'If ON, name of reviewer will be shown above comments in OPAC',NULL,'YesNo');");
4212 print "Upgrade to $DBversion done (Add syspref ShowReviewer)\n";
4215 $DBversion = "3.03.00.040";
4216 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
4217 $dbh->do("INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('UseControlNumber',0,'If ON, record control number (w subfields) and control number (001) are used for linking of bibliographic records.','','YesNo');");
4218 print "Upgrade to $DBversion done (Add syspref UseControlNumber)\n";
4221 $DBversion = "3.03.00.041";
4222 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
4223 $dbh->do("INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('AlternateHoldingsField','','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).',NULL,'free')");
4224 $dbh->do("INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('AlternateHoldingsSeparator','','The string to use to separate subfields in alternate holdings displays.',NULL,'free')");
4225 print "Upgrade to $DBversion done (Add sysprefs to control alternate holdings information display)\n";
4226 SetVersion ($DBversion);
4229 $DBversion = '3.03.00.042';
4230 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
4231 stocknumber_checker();
4232 print "Upgrade to $DBversion done (5860 Index itemstocknumber)\n";
4233 SetVersion ($DBversion);
4236 sub stocknumber_checker { #code reused later on
4238 #drop the obsolete itemSStocknumber idx if it exists
4239 @row = $dbh->selectrow_array("SHOW INDEXES FROM items WHERE key_name='itemsstocknumberidx'");
4240 $dbh->do("ALTER TABLE `items` DROP INDEX `itemsstocknumberidx`;") if @row;
4242 #check itemstocknumber idx; remove it if it is unique
4243 @row = $dbh->selectrow_array("SHOW INDEXES FROM items WHERE key_name='itemstocknumberidx' AND non_unique=0");
4244 $dbh->do("ALTER TABLE `items` DROP INDEX `itemstocknumberidx`;") if @row;
4246 #add itemstocknumber index non-unique IF it still not exists
4247 @row = $dbh->selectrow_array("SHOW INDEXES FROM items WHERE key_name='itemstocknumberidx'");
4248 $dbh->do("ALTER TABLE items ADD INDEX itemstocknumberidx (stocknumber);") unless @row;
4251 $DBversion = "3.03.00.043";
4252 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
4254 $dbh->do("INSERT INTO authorised_values (category,authorised_value,lib,lib_opac) VALUES ('YES_NO','0','No','No')");
4255 $dbh->do("INSERT INTO authorised_values (category,authorised_value,lib,lib_opac) VALUES ('YES_NO','1','Yes','Yes')");
4257 print "Upgrade to $DBversion done ( add generic boolean YES_NO authorised_values pair )\n";
4258 SetVersion ($DBversion);
4261 $DBversion = '3.03.00.044';
4262 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
4263 $dbh->do("ALTER TABLE `aqbasketgroups` ADD `freedeliveryplace` TEXT NULL AFTER `deliveryplace`;");
4264 print "Upgrade to $DBversion done (adding freedeliveryplace to basketgroups)\n";
4267 $DBversion = '3.03.00.045';
4268 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
4269 #Remove obsolete columns from aqbooksellers if needed
4270 my $a = $dbh->selectall_hashref('SHOW columns from aqbooksellers','Field');
4271 my $sqldrop="ALTER TABLE aqbooksellers DROP COLUMN ";
4272 foreach(qw/deliverydays followupdays followupscancel invoicedisc nocalc specialty/) {
4273 $dbh->do($sqldrop.$_) if exists $a->{$_};
4275 #Remove obsolete column from aqbudgets if needed
4276 #The correct column is budget_notes
4277 $a = $dbh->selectall_hashref('SHOW columns from aqbudgets','Field');
4278 if(exists $a->{budget_description}) {
4279 $dbh->do("ALTER TABLE aqbudgets DROP COLUMN budget_description");
4281 print "Upgrade to $DBversion done (Remove obsolete columns from aqbooksellers and aqbudgets if needed)\n";
4282 SetVersion ($DBversion);
4285 $DBversion = "3.03.00.046";
4286 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
4287 $dbh->do("ALTER TABLE overduerules ALTER delay1 SET DEFAULT NULL, ALTER delay2 SET DEFAULT NULL, ALTER delay3 SET DEFAULT NULL");
4288 print "Upgrade to $DBversion done (Setting NULL default value for delayn columns in table overduerules)\n";
4289 SetVersion($DBversion);
4292 $DBversion = '3.03.00.047';
4293 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
4294 $dbh->do("ALTER TABLE borrowers ADD `state` mediumtext AFTER city;");
4295 $dbh->do("ALTER TABLE borrowers ADD `B_state` mediumtext AFTER B_city;");
4296 $dbh->do("ALTER TABLE borrowers ADD `altcontactstate` mediumtext AFTER altcontactaddress3;");
4297 $dbh->do("ALTER TABLE deletedborrowers ADD `state` mediumtext AFTER city;");
4298 $dbh->do("ALTER TABLE deletedborrowers ADD `B_state` mediumtext AFTER B_city;");
4299 $dbh->do("ALTER TABLE deletedborrowers ADD `altcontactstate` mediumtext AFTER altcontactaddress3;");
4300 print "Upgrade to $DBversion done (Add state field to patron's addresses)\n";
4303 $DBversion = '3.03.00.048';
4304 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
4305 $dbh->do("ALTER TABLE branches ADD `branchstate` mediumtext AFTER `branchcity`;");
4306 print "Upgrade to $DBversion done (Add state to branch address)\n";
4307 SetVersion ($DBversion);
4310 $DBversion = '3.03.00.049';
4311 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
4312 $dbh->do("ALTER TABLE `accountlines` ADD `note` text NULL default NULL");
4313 $dbh->do("ALTER TABLE `accountlines` ADD `manager_id` int( 11 ) NULL ");
4314 print "Upgrade to $DBversion done (adding note and manager_id fields in accountlines table)\n";
4315 SetVersion($DBversion);
4318 $DBversion = "3.03.00.050";
4319 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
4321 INSERT IGNORE INTO `systempreferences` (variable,value,explanation,options,type) VALUES('OpacHiddenItems','','This syspref allows to define custom rules for hiding specific items at opac. See docs/opac/OpacHiddenItems.txt for more informations.','','Textarea');
4323 print "Upgrade to $DBversion done (Adding OpacHiddenItems syspref)\n";
4324 SetVersion($DBversion);
4327 $DBversion = "3.03.00.051";
4328 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
4329 print "Upgrade to $DBversion done (Remove spaces and dashes from message_attribute names)\n";
4330 $dbh->do("UPDATE message_attributes SET message_name = 'Item_Due' WHERE message_name='Item Due'");
4331 $dbh->do("UPDATE message_attributes SET message_name = 'Advance_Notice' WHERE message_name='Advance Notice'");
4332 $dbh->do("UPDATE message_attributes SET message_name = 'Hold_Filled' WHERE message_name='Hold Filled'");
4333 $dbh->do("UPDATE message_attributes SET message_name = 'Item_Check_in' WHERE message_name='Item Check-in'");
4334 $dbh->do("UPDATE message_attributes SET message_name = 'Item_Checkout' WHERE message_name='Item Checkout'");
4335 SetVersion ($DBversion);
4338 $DBversion = "3.03.00.052";
4339 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
4340 $dbh->do("INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('WaitingNotifyAtCheckin',0,'If ON, notify librarians of waiting holds for the patron whose items they are checking in.',NULL,'YesNo');");
4341 print "Upgrade to $DBversion done (Add syspref WaitingNotifyAtCheckin)\n";
4342 SetVersion ($DBversion);
4345 $DBversion = "3.04.00.000";
4346 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
4347 print "Upgrade to $DBversion done Koha 3.4.0 release \n";
4348 SetVersion ($DBversion);
4351 $DBversion = "3.05.00.001";
4352 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
4354 INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('numSearchRSSResults',50,'Specify the maximum number of results to display on a RSS page of results',NULL,'Integer');
4356 print "Upgrade to $DBversion done (Adds New System preference numSearchRSSResults)\n";
4357 SetVersion($DBversion);
4360 $DBversion = '3.05.00.002';
4361 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
4362 #follow up fix 5860: some installs already past 3.3.0.42
4363 stocknumber_checker();
4364 print "Upgrade to $DBversion done (Fix for stocknumber index)\n";
4365 SetVersion ($DBversion);
4368 $DBversion = "3.05.00.003";
4369 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
4371 INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('OpacRenewalBranch','checkoutbranch','Choose how the branch for an OPAC renewal is recorded in statistics','itemhomebranch|patronhomebranch|checkoutbranch|null','Choice');
4373 print "Upgrade to $DBversion done (Adds New System preference OpacRenewalBranch)\n";
4374 SetVersion($DBversion);
4377 $DBversion = "3.05.00.004";
4378 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
4379 $dbh->do("INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('ShowReviewerPhoto',1,'If ON, photo of reviewer will be shown beside comments in OPAC',NULL,'YesNo');");
4380 print "Upgrade to $DBversion done (Add syspref ShowReviewerPhoto)\n";
4381 SetVersion($DBversion);
4384 $DBversion = "3.05.00.005";
4385 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
4386 $dbh->do("INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES ('BasketConfirmations', '1', 'When closing or reopening a basket,', 'always ask for confirmation.|do not ask for confirmation.', 'Choice');");
4387 print "Upgrade to $DBversion done (Adds pref BasketConfirmations)\n";
4388 SetVersion($DBversion);
4391 $DBversion = "3.05.00.006";
4392 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
4393 $dbh->do("INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES ('MARCAuthorityControlField008', '|| aca||aabn | a|a d', NULL, NULL, 'Textarea')");
4394 print "Upgrade to $DBversion done (Add syspref MARCAuthorityControlField008)\n";
4395 SetVersion ($DBversion);
4398 $DBversion = "3.05.00.007";
4399 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
4400 $dbh->do("INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES('OpenLibraryCovers',0,'If ON Openlibrary book covers will be show',NULL,'YesNo');");
4401 print "Upgrade to $DBversion done (Add syspref OpenLibraryCovers)\n";
4402 SetVersion($DBversion);
4405 $DBversion = "3.05.00.008";
4406 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
4407 $dbh->do("ALTER TABLE `cities` ADD `city_state` VARCHAR( 100 ) NULL DEFAULT NULL AFTER `city_name`;");
4408 $dbh->do("ALTER TABLE `cities` ADD `city_country` VARCHAR( 100 ) NULL DEFAULT NULL AFTER `city_zipcode`;");
4409 print "Add state and country to cities table corresponding to new columns in borrowers\n";
4410 SetVersion($DBversion);
4413 $DBversion = "3.05.00.009";
4414 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
4415 $dbh->do("INSERT INTO old_issues (borrowernumber, itemnumber, date_due, branchcode, issuingbranch, returndate, lastreneweddate, `return`, renewals, timestamp, issuedate)
4416 SELECT borrowernumber, itemnumber, date_due, branchcode, issuingbranch, returndate, lastreneweddate, `return`, renewals, timestamp, issuedate FROM issues WHERE borrowernumber IS NULL");
4417 $dbh->do("DELETE FROM issues WHERE borrowernumber IS NULL");
4419 $dbh->do("INSERT INTO old_issues (borrowernumber, itemnumber, date_due, branchcode, issuingbranch, returndate, lastreneweddate, `return`, renewals, timestamp, issuedate)
4420 SELECT borrowernumber, itemnumber, date_due, branchcode, issuingbranch, returndate, lastreneweddate, `return`, renewals, timestamp, issuedate FROM issues WHERE itemnumber IS NULL");
4421 $dbh->do("DELETE FROM issues WHERE itemnumber IS NULL");
4423 $dbh->do("INSERT INTO old_issues (borrowernumber, itemnumber, date_due, branchcode, issuingbranch, returndate, lastreneweddate, `return`, renewals, timestamp, issuedate)
4424 SELECT borrowernumber, itemnumber, date_due, branchcode, issuingbranch, returndate, lastreneweddate, `return`, renewals, timestamp, issuedate FROM issues WHERE NOT EXISTS (SELECT * FROM borrowers WHERE borrowernumber = issues.borrowernumber)");
4425 $dbh->do("DELETE FROM issues WHERE NOT EXISTS (SELECT * FROM borrowers WHERE borrowernumber = issues.borrowernumber)");
4427 $dbh->do("INSERT INTO old_issues (borrowernumber, itemnumber, date_due, branchcode, issuingbranch, returndate, lastreneweddate, `return`, renewals, timestamp, issuedate)
4428 SELECT borrowernumber, itemnumber, date_due, branchcode, issuingbranch, returndate, lastreneweddate, `return`, renewals, timestamp, issuedate FROM issues WHERE NOT EXISTS (SELECT * FROM items WHERE itemnumber = issues.itemnumber)");
4429 $dbh->do("DELETE FROM issues WHERE NOT EXISTS (SELECT * FROM items WHERE itemnumber = issues.itemnumber)");
4431 $dbh->do("ALTER TABLE issues DROP FOREIGN KEY `issues_ibfk_1`");
4432 $dbh->do("ALTER TABLE issues DROP FOREIGN KEY `issues_ibfk_2`");
4433 $dbh->do("ALTER TABLE issues ALTER COLUMN borrowernumber DROP DEFAULT");
4434 $dbh->do("ALTER TABLE issues ALTER COLUMN itemnumber DROP DEFAULT");
4435 $dbh->do("ALTER TABLE issues MODIFY COLUMN borrowernumber int(11) NOT NULL");
4436 $dbh->do("ALTER TABLE issues MODIFY COLUMN itemnumber int(11) NOT NULL");
4437 $dbh->do("ALTER TABLE issues DROP KEY `issuesitemidx`");
4438 $dbh->do("ALTER TABLE issues ADD PRIMARY KEY (`itemnumber`)");
4439 $dbh->do("ALTER TABLE issues ADD CONSTRAINT `issues_ibfk_1` FOREIGN KEY (`borrowernumber`) REFERENCES `borrowers` (`borrowernumber`) ON DELETE RESTRICT ON UPDATE CASCADE");
4440 $dbh->do("ALTER TABLE issues ADD CONSTRAINT `issues_ibfk_2` FOREIGN KEY (`itemnumber`) REFERENCES `items` (`itemnumber`) ON DELETE RESTRICT ON UPDATE CASCADE");
4442 print "Upgrade to $DBversion done (issues referential integrity)\n";
4443 SetVersion ($DBversion);
4446 $DBversion = "3.05.00.010";
4447 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
4448 $dbh->do("CREATE INDEX priorityfoundidx ON reserves (priority,found)");
4449 print "Create an index on reserves to speed up holds awaiting pickup report bug 5866\n";
4450 SetVersion($DBversion);
4454 $DBversion = "3.05.00.011";
4455 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
4456 $dbh->do("INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('OPACResultsSidebar','','Define HTML to be included on the search results page, underneath the facets sidebar','70|10','Textarea')");
4457 print "Upgrade to $DBversion done (add OPACResultsSidebar syspref (enh 6165))\n";
4458 SetVersion($DBversion);
4461 $DBversion = "3.05.00.012";
4462 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
4463 $dbh->do("INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('RecordLocalUseOnReturn',0,'If ON, statistically record returns of unissued items as local use, instead of return',NULL,'YesNo')");
4464 print "Upgrade to $DBversion done (add RecordLocalUseOnReturn syspref (enh 6403))\n";
4465 SetVersion($DBversion);
4468 $DBversion = "3.05.00.013";
4469 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
4470 $dbh->do(qq|INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES ('OpacKohaUrl','0',"Show 'Powered by Koha' text on OPAC footer.",NULL,NULL)|);
4471 print "Upgrade to $DBversion done (Add syspref 'OpacKohaUrl')\n";
4472 SetVersion($DBversion);
4475 $DBversion = "3.05.00.014";
4476 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
4477 $dbh->do("ALTER TABLE `borrowers` MODIFY `userid` VARCHAR(75)");
4478 print "Modified userid column length into 75 in borrowers\n";
4479 SetVersion($DBversion);
4482 $DBversion = "3.05.00.015";
4483 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
4484 $dbh->do("INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES ('NovelistSelectEnabled',0,'Enable Novelist Select content. Requires Novelist Profile and Password',NULL,'YesNo')");
4485 $dbh->do("INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES ('NovelistSelectProfile',NULL,'Novelist Select user Password',NULL,'free')");
4486 $dbh->do("INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES ('NovelistSelectPassword',NULL,'Enable Novelist user Profile',NULL,'free')");
4487 $dbh->do("INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES ('NovelistSelectView','tab','Where to display Novelist Select content','tab|above|below|right','Choice')");
4488 print "Upgrade to $DBversion done (Add support for EBSCO's NoveList Select (enh 6902))\n";
4489 SetVersion($DBversion);
4492 $DBversion = '3.05.00.016';
4493 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
4494 $dbh->do("INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('EasyAnalyticalRecords','0','If on, display in the catalogue screens tools to easily setup analytical record relationships','','YesNo');");
4495 print "Upgrade to $DBversion done (Add EasyAnalyticalRecords syspref)\n";
4496 SetVersion ($DBversion);
4499 $DBversion = '3.05.00.017';
4500 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
4501 if (C4::Context->preference("marcflavour") eq 'MARC21' ||
4502 C4::Context->preference("marcflavour") eq 'NORMARC'){
4503 $dbh->do("INSERT INTO `marc_subfield_structure` (`tagfield`, `tagsubfield`, `liblibrarian`, `libopac`, `repeatable`, `mandatory`, `kohafield`, `tab`, `authorised_value` , `authtypecode`, `value_builder`, `isurl`, `hidden`, `frameworkcode`, `seealso`, `link`, `defaultvalue`) VALUES ('773', '0', 'Host Biblionumber', 'Host Biblionumber', 0, 0, NULL, 7, NULL, NULL, '', NULL, -6, '', '', '', NULL)");
4504 $dbh->do("INSERT INTO `marc_subfield_structure` (`tagfield`, `tagsubfield`, `liblibrarian`, `libopac`, `repeatable`, `mandatory`, `kohafield`, `tab`, `authorised_value` , `authtypecode`, `value_builder`, `isurl`, `hidden`, `frameworkcode`, `seealso`, `link`, `defaultvalue`) VALUES ('773', '9', 'Host Itemnumber', 'Host Itemnumber', 0, 0, NULL, 7, NULL, NULL, '', NULL, -6, '', '', '', NULL)");
4505 print "Upgrade to $DBversion done (Add 773 subfield 9 and 0 to default framework)\n";
4506 SetVersion ($DBversion);
4507 } elsif (C4::Context->preference("marcflavour") eq 'UNIMARC'){
4508 $dbh->do("INSERT INTO `marc_subfield_structure` (`tagfield`, `tagsubfield`, `liblibrarian`, `libopac`, `repeatable`, `mandatory`, `kohafield`, `tab`, `authorised_value` , `authtypecode`, `value_builder`, `isurl`, `hidden`, `frameworkcode`, `seealso`, `link`, `defaultvalue`) VALUES ('461', '9', 'Host Itemnumber', 'Host Itemnumber', 0, 0, NULL, 7, NULL, NULL, '', NULL, -6, '', '', '', NULL)");
4509 print "Upgrade to $DBversion done (Add 461 subfield 9 to default framework)\n";
4510 SetVersion ($DBversion);
4514 $DBversion = "3.05.00.018";
4515 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
4516 $dbh->do("INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('OpacNavBottom','','Links after OpacNav links','70|10','Textarea')");
4517 print "Upgrade to $DBversion done (add OpacNavBottom syspref (enh 6825): if appropriate, you can split OpacNav into OpacNav and OpacNavBottom)\n";
4518 SetVersion($DBversion);
4521 $DBversion = "3.05.00.019";
4522 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
4523 $dbh->do("UPDATE itemtypes SET imageurl = 'vokal/Book.png' WHERE imageurl = 'vokal/BOOK.png'");
4524 $dbh->do("UPDATE itemtypes SET imageurl = 'vokal/Book-32px.png' WHERE imageurl = 'vokal/BOOK-32px.png'");
4525 $dbh->do("UPDATE authorised_values SET imageurl = 'vokal/Book.png' WHERE imageurl = 'vokal/BOOK.png'");
4526 $dbh->do("UPDATE authorised_values SET imageurl = 'vokal/Book-32px.png' WHERE imageurl = 'vokal/BOOK-32px.png'");
4527 print "Upgrade to $DBversion done (remove duplicate VOKAL Book icons, bug 6862)\n";
4528 SetVersion($DBversion);
4531 $DBversion = "3.05.00.020";
4532 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
4533 $dbh->do("INSERT INTO `systempreferences` (variable,value,options,explanation,type) VALUES ('AcqViewBaskets','user','user|branch|all','Define which baskets a user is allowed to view: his own only, any within his branch or all','Choice')");
4534 print "Upgrade to $DBversion done (Add syspref AcqViewBaskets)\n";
4535 SetVersion($DBversion);
4538 $DBversion = "3.05.00.021";
4539 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
4540 $dbh->do("ALTER TABLE borrower_attribute_types ADD COLUMN display_checkout TINYINT(1) NOT NULL DEFAULT '0';");
4541 print "Upgrade to $DBversion done (Added a display_checkout field in borrower_attribute_types table)\n";
4542 SetVersion($DBversion);
4545 $DBversion = "3.05.00.022";
4546 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
4547 $dbh->do("CREATE TABLE need_merge_authorities (id int NOT NULL auto_increment PRIMARY KEY, authid bigint NOT NULL, done tinyint DEFAULT 0) ENGINE=InnoDB DEFAULT CHARSET=utf8");
4548 print "Upgrade to $DBversion done (6094: Fixing ModAuthority problems, add a need_merge_authorities table)\n";
4549 SetVersion($DBversion);
4552 $DBversion = "3.05.00.023";
4553 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
4554 $dbh->do("INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES('OpacShowRecentComments',0,'If ON a link to recent comments will appear in the OPAC masthead',NULL,'YesNo');");
4555 print "Upgrade to $DBversion done (Add syspref OpacShowRecentComments. When the preference is turned on a link to recent comments will appear in the OPAC masthead. )\n";
4556 SetVersion($DBversion);
4559 $DBversion = "3.06.00.000";
4560 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
4561 print "Upgrade to $DBversion done Koha 3.6.0 release \n";
4562 SetVersion ($DBversion);
4565 $DBversion = "3.07.00.001";
4566 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
4567 my $borrowers = $dbh->selectcol_arrayref( "SELECT borrowernumber from borrowers where debarred =1;", { Columns => [1] } );
4568 $dbh->do("ALTER TABLE borrowers MODIFY debarred DATE DEFAULT NULL;");
4569 $dbh->do( "UPDATE borrowers set debarred='9999-12-31' where borrowernumber IN (" . join( ",", @$borrowers ) . ");" ) if ($borrowers and scalar(@$borrowers)>0);
4570 $dbh->do("ALTER TABLE borrowers ADD COLUMN debarredcomment VARCHAR(255) DEFAULT NULL AFTER debarred;");
4571 $dbh->do("ALTER TABLE deletedborrowers MODIFY debarred DATE DEFAULT NULL;");
4572 $dbh->do("ALTER TABLE deletedborrowers ADD COLUMN debarredcomment VARCHAR(255) DEFAULT NULL AFTER debarred;");
4573 print "Upgrade done (Change borrowers.debarred into Date )\n";
4574 SetVersion($DBversion);
4577 $DBversion = "3.07.00.002";
4578 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
4579 sanitize_zero_date('borrowers', 'debarred');
4580 print "Setting NULL to debarred where 0000-00-00 is stored (bug 7272)\n";
4581 SetVersion($DBversion);
4584 $DBversion = "3.07.00.003";
4585 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
4586 $dbh->do(" UPDATE `message_attributes` SET message_name='Item_Due' WHERE message_name='Item_DUE'");
4587 print "Updating message_name in message_attributes\n";
4588 SetVersion($DBversion);
4591 $DBversion = "3.07.00.004";
4592 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
4593 $dbh->do("ALTER TABLE `suggestions` ADD `patronreason` TEXT NULL AFTER `reason`");
4594 print "Upgrade to $DBversion done (Add column to suggestions table to store patrons' reasons for submitting a suggestion. )\n";
4595 SetVersion($DBversion);
4598 $DBversion = "3.07.00.005";
4599 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
4600 $dbh->do("INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES ('BorrowerUnwantedField','','Name the fields you don''t need to store for a patron''s account',NULL,'free')");
4601 print "Upgrade to $DBversion done (BorrowerUnwantedField syspref)\n";
4602 SetVersion ($DBversion);
4605 $DBversion = "3.07.00.006";
4606 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
4607 $dbh->do("INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES ('CircAutoPrintQuickSlip', '1', 'Choose what should happen when an empty barcode field is submitted in circulation: Display a print quick slip window or Clear the screen.',NULL,'YesNo');");
4608 print "Upgrade to $DBversion done (Add syspref CircAutoPrintQuickSlip to control what should happen when an empty barcode field is submitted in circulation: Display a print quick slip window (default value, 3.6 behaviour) or clear the screen (previous 3.6 behaviour). )\n";
4609 SetVersion($DBversion);
4612 $DBversion = "3.07.00.007";
4613 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
4614 $dbh->do("ALTER TABLE items MODIFY materials text;");
4615 print "Upgrade to $DBversion done alter items.material from varchar(10) to text \n";
4616 SetVersion($DBversion);
4619 $DBversion = '3.07.00.008';
4620 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
4621 if (C4::Context->preference("marcflavour") eq 'MARC21') {
4622 if (C4::Context->preference("opaclanguages") eq "de") {
4623 $dbh->do("INSERT INTO `marc_tag_structure` (`tagfield`, `liblibrarian`, `libopac`, `repeatable`, `mandatory`, `authorised_value`, `frameworkcode`) VALUES ('545', 'Fußnote zu biografischen oder historischen Daten', 'Fußnote zu biografischen oder historischen Daten', 1, 0, NULL, '');");
4625 $dbh->do("INSERT INTO `marc_tag_structure` (`tagfield`, `liblibrarian`, `libopac`, `repeatable`, `mandatory`, `authorised_value`, `frameworkcode`) VALUES ('545', 'BIOGRAPHICAL OR HISTORICAL DATA', 'BIOGRAPHICAL OR HISTORICAL DATA', 1, 0, NULL, '');");
4628 print "Upgrade to $DBversion done (add MARC21 field 545 to framework)\n";
4629 SetVersion ($DBversion);
4632 $DBversion = "3.07.00.009";
4633 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
4634 $dbh->do("ALTER TABLE `aqorders` ADD COLUMN `claims_count` INT(11) DEFAULT 0, ADD COLUMN `claimed_date` DATE DEFAULT NULL AFTER `claims_count`");
4635 print "Upgrade to $DBversion done (Add claims_count and claimed_date fields in aqorders table)\n";
4636 SetVersion($DBversion);
4639 $DBversion = "3.07.00.010";
4640 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
4642 q|CREATE TABLE `biblioimages` (
4643 `imagenumber` int(11) NOT NULL AUTO_INCREMENT,
4644 `biblionumber` int(11) NOT NULL,
4645 `mimetype` varchar(15) NOT NULL,
4646 `imagefile` mediumblob NOT NULL,
4647 `thumbnail` mediumblob NOT NULL,
4648 PRIMARY KEY (`imagenumber`),
4649 CONSTRAINT `bibliocoverimage_fk1` FOREIGN KEY (`biblionumber`) REFERENCES `biblio` (`biblionumber`) ON DELETE CASCADE ON UPDATE CASCADE
4650 ) ENGINE=InnoDB DEFAULT CHARSET=utf8|
4653 q|INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES ('OPACLocalCoverImages','0','Display local cover images on OPAC search and details pages.','1','YesNo')|
4656 q|INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES ('LocalCoverImages','0','Display local cover images on intranet search and details pages.','1','YesNo')|
4659 q|INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES ('AllowMultipleCovers','0','Allow multiple cover images to be attached to each bibliographic record.','1','YesNo')|
4662 q|INSERT INTO permissions (module_bit, code, description) VALUES (13, 'upload_local_cover_images', 'Upload local cover images')|
4664 print "Upgrade to $DBversion done (Added support for local cover images)\n";
4665 SetVersion($DBversion);
4668 $DBversion = "3.07.00.011";
4669 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
4670 $dbh->do(<<ENDOFRENEWAL);
4671 INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES('BorrowerRenewalPeriodBase', 'now', 'Set whether the borrower renewal date should be counted from the dateexpiry or from the current date ','dateexpiry|now','Choice');
4673 print "Upgrade to $DBversion done (Added a system preference to allow renewal of Patron account either from todays date or from existing expiry date in the patrons account.)\n";
4674 SetVersion($DBversion);
4677 $DBversion = "3.07.00.012";
4678 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
4679 $dbh->do("INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES ('AllowItemsOnHoldCheckout',0,'Do not generate RESERVE_WAITING and RESERVED warning when checking out items reserved to someone else. This allows self checkouts for those items.','','YesNo')");
4680 print "Upgrade to $DBversion add 'AllowItemsOnHoldCheckout' syspref \n";
4681 SetVersion ($DBversion);
4684 $DBversion = "3.07.00.013";
4685 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
4686 $dbh->do("INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES('OpacExportOptions','bibtex|dc|marcxml|marc8|utf8|marcstd|mods|ris','Define available export options on OPAC detail page.','','free');");
4687 print "Upgrade to $DBversion done (Bug 7345: Add system preference OpacExportOptions.)\n";
4688 SetVersion ($DBversion);
4691 $DBversion = "3.07.00.014";
4692 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
4693 print "RELTERMS category available for English-, French-, and Spanish-language relator terms. They are not loaded during upgrade but can be easily inserted using the provided marc21_relatorterms.sql SQL script (MARC21 only, and currently available for en, es, and fr only).\n";
4694 SetVersion($DBversion);
4697 $DBversion = "3.07.00.015";
4698 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
4699 my $sth = $dbh->prepare(q|
4700 SELECT COUNT(*) FROM marc_subfield_structure where kohafield="biblioitems.editionstatement"
4703 my $already_exists = $sth->fetchrow;
4704 if ( not $already_exists ) {
4705 my $field = C4::Context->preference("marcflavour") eq "UNIMARC" ? "205" : "250";
4707 my $sth = $dbh->prepare( q|
4708 UPDATE marc_subfield_structure SET kohafield = "biblioitems.editionstatement"
4709 WHERE tagfield = ? AND tagsubfield = ?
4711 $sth->execute( $field, $subfield );
4712 print "Upgrade to $DBversion done (Added a mapping for biblioitems.editionstatement.)\n";
4714 print "Upgrade to $DBversion done (Added a mapping for biblioitems.editionstatement (already exists, nothing to do).)\n";
4716 SetVersion($DBversion);
4719 $DBversion = "3.07.00.016";
4720 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
4721 $dbh->do("ALTER TABLE items ADD KEY `itemcallnumber` (itemcallnumber)");
4722 print "Upgrade to $DBversion done (Added index on items.itemcallnumber)\n";
4723 SetVersion($DBversion);
4726 $DBversion = "3.07.00.017";
4727 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
4728 $dbh->do("INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('TransferWhenCancelAllWaitingHolds','0','Transfer items when cancelling all waiting holds',NULL,'YesNo')");
4729 print "Upgrade to $DBversion done (Add sysprefs to control transfer when cancel all waiting holds)\n";
4730 SetVersion ($DBversion);
4733 $DBversion = "3.07.00.018";
4734 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
4735 $dbh->do("CREATE TABLE pending_offline_operations ( operationid int(11) NOT NULL AUTO_INCREMENT, userid varchar(30) NOT NULL, branchcode varchar(10) NOT NULL, timestamp timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, action varchar(10) NOT NULL, barcode varchar(20) NOT NULL, cardnumber varchar(16) DEFAULT NULL, PRIMARY KEY (operationid) ) ENGINE=MyISAM DEFAULT CHARSET=utf8;");
4736 print "Upgrade to $DBversion done ( adding offline operations table )\n";
4737 SetVersion($DBversion);
4740 $DBversion = "3.07.00.019";
4741 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
4742 $dbh->do(" UPDATE `systempreferences` SET `value` = 'none', `options` = 'none|full|first|surname|firstandinitial|username', `explanation` = 'Choose how a commenter''s identity is presented alongside comments in the OPAC', `type` = 'Choice' WHERE `systempreferences`.`variable` = 'ShowReviewer' AND `systempreferences`.`variable` = 0");
4743 $dbh->do(" UPDATE `systempreferences` SET `value` = 'full', `options` = 'none|full|first|surname|firstandinitial|username', `explanation` = 'Choose how a commenter''s identity is presented alongside comments in the OPAC', `type` = 'Choice' WHERE `systempreferences`.`variable` = 'ShowReviewer' AND `systempreferences`.`variable` = 1");
4744 print "Upgrade to $DBversion done ( Adding additional options for the display of commenter's identity in the OPAC: Full name, first name, last name, first name and last name first initial, username, or no information)\n";
4745 SetVersion($DBversion);
4748 $DBversion = "3.07.00.020";
4749 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
4750 $dbh->do("INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES('OPACpatronimages',0,'Enable patron images in the OPAC',NULL,'YesNo');");
4751 print "Upgrade to $DBversion done (Bug 3516: Add the option to show patron images in the OPAC.)\n";
4752 SetVersion($DBversion);
4755 $DBversion = "3.07.00.021";
4756 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
4758 "INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES('LinkerModule','Default','Chooses which linker module to use (see documentation).','Default|FirstMatchLastMatch','Choice');"
4761 "INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES('LinkerOptions','','A pipe-separated list of options for the linker.','','free');"
4764 "INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES('LinkerRelink',1,'If ON the authority linker will relink headings that have previously been linked every time it runs.',NULL,'YesNo');"
4767 "INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES('LinkerKeepStale',0,'If ON the authority linker will keep existing authority links for headings where it is unable to find a match.',NULL,'YesNo');"
4770 "INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES('AutoCreateAuthorities',0,'Automatically create authorities that do not exist when cataloging records.',NULL,'YesNo');"
4773 "INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES('CatalogModuleRelink',0,'If OFF the linker will never replace the authids that are set in the cataloging module.',NULL,'YesNo');"
4775 print "Upgrade to $DBversion done (Enhancement 7284, improved authority matching, see http://wiki.koha-community.org/wiki/Bug7284_authority_matching_improvement wiki page for configuration update needed)\n";
4776 SetVersion($DBversion);
4779 $DBversion = "3.07.00.022";
4780 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
4781 $dbh->do("DELETE FROM reviews WHERE biblionumber NOT IN (SELECT biblionumber from biblio)");
4782 $dbh->do("UPDATE reviews SET borrowernumber = NULL WHERE borrowernumber NOT IN (SELECT borrowernumber FROM borrowers)");
4783 $dbh->do("ALTER TABLE reviews ADD CONSTRAINT reviews_ibfk_2 FOREIGN KEY (`biblionumber`) REFERENCES `biblio` (`biblionumber`) ON DELETE CASCADE ON UPDATE CASCADE");
4784 $dbh->do("ALTER TABLE reviews ADD CONSTRAINT reviews_ibfk_1 FOREIGN KEY (borrowernumber) REFERENCES borrowers (borrowernumber ) ON UPDATE CASCADE ON DELETE SET NULL");
4785 print "Upgrade to $DBversion done (Bug 7493 - Add constraint linking OPAC comment biblionumber to biblio, OPAC comment borrowernumber to borrowers.)\n";
4786 SetVersion($DBversion);
4789 $DBversion = "3.07.00.023";
4790 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
4791 $dbh->do("ALTER TABLE `message_transports` DROP FOREIGN KEY `message_transports_ibfk_3`");
4792 $dbh->do("ALTER TABLE `letter` DROP PRIMARY KEY");
4793 $dbh->do("ALTER TABLE `letter` ADD `branchcode` varchar(10) default NULL AFTER `code`");
4794 $dbh->do("ALTER TABLE `letter` ADD PRIMARY KEY (`module`,`code`, `branchcode`)");
4795 $dbh->do("ALTER TABLE `message_transports` ADD `branchcode` varchar(10) NOT NULL default ''");
4796 $dbh->do("ALTER TABLE `message_transports` ADD CONSTRAINT `message_transports_ibfk_3` FOREIGN KEY (`letter_module`, `letter_code`, `branchcode`) REFERENCES `letter` (`module`, `code`, `branchcode`) ON DELETE CASCADE ON UPDATE CASCADE");
4797 $dbh->do("ALTER TABLE `letter` ADD `is_html` tinyint(1) default 0 AFTER `name`");
4799 $dbh->do("INSERT INTO `letter` (module, code, name, title, content, is_html)
4800 VALUES ('circulation','ISSUESLIP','Issue Slip','Issue Slip', '<h3><<branches.branchname>></h3>
4801 Checked out to <<borrowers.title>> <<borrowers.firstname>> <<borrowers.initials>> <<borrowers.surname>> <br />
4802 (<<borrowers.cardnumber>>) <br />
4806 <h4>Checked Out</h4>
4809 <<biblio.title>> <br />
4810 Barcode: <<items.barcode>><br />
4811 Date due: <<issues.date_due>><br />
4818 <<biblio.title>> <br />
4819 Barcode: <<items.barcode>><br />
4820 Date due: <<issues.date_due>><br />
4826 <h4 style=\"text-align: center; font-style:italic;\">News</h4>
4828 <div class=\"newsitem\">
4829 <h5 style=\"margin-bottom: 1px; margin-top: 1px\"><b><<opac_news.title>></b></h5>
4830 <p style=\"margin-bottom: 1px; margin-top: 1px\"><<opac_news.new>></p>
4831 <p class=\"newsfooter\" style=\"font-size: 8pt; font-style:italic; margin-bottom: 1px; margin-top: 1px\">Posted on <<opac_news.timestamp>></p>
4835 $dbh->do("INSERT INTO `letter` (module, code, name, title, content, is_html)
4836 VALUES ('circulation','ISSUEQSLIP','Issue Quick Slip','Issue Quick Slip', '<h3><<branches.branchname>></h3>
4837 Checked out to <<borrowers.title>> <<borrowers.firstname>> <<borrowers.initials>> <<borrowers.surname>> <br />
4838 (<<borrowers.cardnumber>>) <br />
4842 <h4>Checked Out Today</h4>
4845 <<biblio.title>> <br />
4846 Barcode: <<items.barcode>><br />
4847 Date due: <<issues.date_due>><br />
4849 </checkedout>', 1)");
4850 $dbh->do("INSERT INTO `letter` (module, code, name, title, content, is_html)
4851 VALUES ('circulation','RESERVESLIP','Reserve Slip','Reserve Slip', '<h5>Date: <<today>></h5>
4853 <h3> Transfer to/Hold in <<branches.branchname>></h3>
4855 <h3><<borrowers.surname>>, <<borrowers.firstname>></h3>
4858 <li><<borrowers.cardnumber>></li>
4859 <li><<borrowers.phone>></li>
4860 <li> <<borrowers.address>><br />
4861 <<borrowers.address2>><br />
4862 <<borrowers.city >> <<borrowers.zipcode>>
4864 <li><<borrowers.email>></li>
4867 <h3>ITEM ON HOLD</h3>
4868 <h4><<biblio.title>></h4>
4869 <h5><<biblio.author>></h5>
4871 <li><<items.barcode>></li>
4872 <li><<items.itemcallnumber>></li>
4873 <li><<reserves.waitingdate>></li>
4876 <pre><<reserves.reservenotes>></pre>
4878 $dbh->do("INSERT INTO `letter` (module, code, name, title, content, is_html)
4879 VALUES ('circulation','TRANSFERSLIP','Transfer Slip','Transfer Slip', '<h5>Date: <<today>></h5>
4880 <h3>Transfer to <<branches.branchname>></h3>
4883 <h4><<biblio.title>></h4>
4884 <h5><<biblio.author>></h5>
4886 <li><<items.barcode>></li>
4887 <li><<items.itemcallnumber>></li>
4890 $dbh->do("INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('NoticeCSS','','Notices CSS url.',NULL,'free')");
4891 $dbh->do("INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('SlipCSS','','Slips CSS url.',NULL,'free')");
4893 $dbh->do("UPDATE `letter` SET content = replace(content, '<<title>>', '<<biblio.title>>') WHERE code = 'HOLDPLACED'");
4895 print "Upgrade to $DBversion done (Add branchcode and is_html to letter table; Default ISSUESLIP, RESERVESLIP and TRANSFERSLIP letters; Add NoticeCSS and SlipCSS sysprefs)\n";
4896 SetVersion($DBversion);
4899 $DBversion = "3.07.00.024";
4900 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
4901 $dbh->do("INSERT INTO systempreferences (variable,value,options,explanation,type) VALUES ('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')");
4902 $dbh->do("INSERT INTO systempreferences (variable,value,options,explanation,type) VALUES ('ExpireReservesMaxPickUpDelay', '0', '', 'Enabling this allows holds to expire automatically if they have not been picked by within the time period specified in ReservesMaxPickUpDelay', 'YesNo')");
4903 print "Upgrade to $DBversion done (Added system preference ExpireReservesMaxPickUpDelay, system preference ExpireReservesMaxPickUpDelayCharge, add reseves.charge_if_expired)\n";
4906 $DBversion = "3.07.00.025";
4907 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
4908 if (TableExists('bibliocoverimage')) {
4909 $dbh->do( q|DROP TABLE bibliocoverimage;| );
4911 q|CREATE TABLE biblioimages (
4912 imagenumber int(11) NOT NULL AUTO_INCREMENT,
4913 biblionumber int(11) NOT NULL,
4914 mimetype varchar(15) NOT NULL,
4915 imagefile mediumblob NOT NULL,
4916 thumbnail mediumblob NOT NULL,
4917 PRIMARY KEY (imagenumber),
4918 CONSTRAINT bibliocoverimage_fk1 FOREIGN KEY (biblionumber) REFERENCES biblio (biblionumber) ON DELETE CASCADE ON UPDATE CASCADE
4919 ) ENGINE=InnoDB DEFAULT CHARSET=utf8;|
4922 print "Upgrade to $DBversion done (Correct table name for local cover images if needed. )\n";
4923 SetVersion($DBversion);
4926 $DBversion = "3.07.00.026";
4927 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
4928 $dbh->do("INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES('CalendarFirstDayOfWeek','Sunday','Select the first day of week to use in the calendar.','Sunday|Monday','Choice');");
4929 print "Upgrade to $DBversion done (Add syspref CalendarFirstDayOfWeek used to select the first day of week to use in the calendar. )\n";
4930 SetVersion($DBversion);
4933 $DBversion = "3.07.00.027";
4934 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
4935 $dbh->do(q{INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES('RoutingListNote','','Define a note to be shown on all routing lists','70|10','Textarea');});
4936 print "Upgrade to $DBversion done (Added system preference RoutingListNote for adding a general note to all routing lists.)\n";
4937 SetVersion($DBversion);
4940 $DBversion = "3.07.00.028";
4941 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
4943 INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES ('AllowPKIAuth','None','Use the field from a client-side SSL certificate to look a user in the Koha database','None|Common Name|emailAddress','Choice');
4945 print "Upgrade to $DBversion done (Bug 6296 New System preference AllowPKIAuth)\n";
4948 $DBversion = "3.07.00.029";
4949 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
4950 $dbh->do(q{DROP TABLE IF EXISTS `oai_sets_descriptions`;});
4951 $dbh->do(q{DROP TABLE IF EXISTS `oai_sets_mappings`;});
4952 $dbh->do(q{DROP TABLE IF EXISTS `oai_sets_biblios`;});
4953 $dbh->do(q{DROP TABLE IF EXISTS `oai_sets`;});
4956 CREATE TABLE `oai_sets` (
4957 `id` int(11) NOT NULL auto_increment,
4958 `spec` varchar(80) NOT NULL UNIQUE,
4959 `name` varchar(80) NOT NULL,
4961 ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
4965 CREATE TABLE `oai_sets_descriptions` (
4966 `set_id` int(11) NOT NULL,
4967 `description` varchar(255) NOT NULL,
4968 CONSTRAINT `oai_sets_descriptions_ibfk_1` FOREIGN KEY (`set_id`) REFERENCES `oai_sets` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
4969 ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
4973 CREATE TABLE `oai_sets_mappings` (
4974 `set_id` int(11) NOT NULL,
4975 `marcfield` char(3) NOT NULL,
4976 `marcsubfield` char(1) NOT NULL,
4977 `marcvalue` varchar(80) NOT NULL,
4978 CONSTRAINT `oai_sets_mappings_ibfk_1` FOREIGN KEY (`set_id`) REFERENCES `oai_sets` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
4979 ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
4983 CREATE TABLE `oai_sets_biblios` (
4984 `biblionumber` int(11) NOT NULL,
4985 `set_id` int(11) NOT NULL,
4986 PRIMARY KEY (`biblionumber`, `set_id`),
4987 CONSTRAINT `oai_sets_biblios_ibfk_1` FOREIGN KEY (`biblionumber`) REFERENCES `biblio` (`biblionumber`) ON DELETE CASCADE ON UPDATE CASCADE,
4988 CONSTRAINT `oai_sets_biblios_ibfk_2` FOREIGN KEY (`set_id`) REFERENCES `oai_sets` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
4989 ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
4993 INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES('OAI-PMH:AutoUpdateSets','0','Automatically update OAI sets when a bibliographic record is created or updated','','YesNo');
4996 print "Upgrade to $DBversion done (Atomic update for OAI-PMH sets management)\n";
4997 SetVersion($DBversion);
5000 $DBversion = "3.07.00.030";
5001 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
5002 $dbh->do("ALTER TABLE default_circ_rules ADD
5003 COLUMN `returnbranch` varchar(15) default NULL AFTER `holdallowed`");
5004 $dbh->do("ALTER TABLE branch_item_rules ADD
5005 COLUMN `returnbranch` varchar(15) default NULL AFTER `holdallowed`");
5006 $dbh->do("ALTER TABLE default_branch_circ_rules ADD
5007 COLUMN `returnbranch` varchar(15) default NULL AFTER `holdallowed`");
5008 $dbh->do("ALTER TABLE default_branch_item_rules ADD
5009 COLUMN `returnbranch` varchar(15) default NULL AFTER `holdallowed`");
5010 # set the default rule to the current value of HomeOrHoldingBranchReturn (default to 'homebranch' if need be)
5011 my $homeorholdingbranchreturn = C4::Context->preference('HomeOrHoldingBranchReturn') || 'homebranch';
5012 $dbh->do("UPDATE default_circ_rules SET returnbranch = '$homeorholdingbranchreturn'");
5013 print "Upgrade to $DBversion done (Atomic update for OAI-PMH sets management)\n";
5014 SetVersion($DBversion);
5017 $DBversion = "3.07.00.031";
5018 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
5019 $dbh->do("INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES ('UseICU', '1', 'Tell Koha if ICU indexing is in use for Zebra or not.','1','YesNo')");
5020 print "Upgrade to $DBversion done (Add syspref to tell Koha if ICU indexing is in use for Zebra or not.)\n";
5021 SetVersion ($DBversion);
5024 $DBversion = "3.07.00.032";
5025 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
5026 $dbh->do("ALTER TABLE virtualshelves MODIFY COLUMN owner int"); #should have been int already (fk to borrowers)
5027 $dbh->do("UPDATE virtualshelves vi LEFT JOIN borrowers bo ON bo.borrowernumber=vi.owner SET vi.owner=NULL where bo.borrowernumber IS NULL"); #before adding the constraint on borrowernumber, we need to get rid of deleted owners
5028 $dbh->do("DELETE FROM virtualshelves WHERE owner IS NULL and category=1"); #delete private lists without owner (cascades to shelfcontents)
5029 $dbh->do("ALTER TABLE virtualshelves ADD COLUMN allow_add tinyint(1) DEFAULT 0, ADD COLUMN allow_delete_own tinyint(1) DEFAULT 1, ADD COLUMN allow_delete_other tinyint(1) DEFAULT 0, ADD CONSTRAINT `virtualshelves_ibfk_1` FOREIGN KEY (`owner`) REFERENCES `borrowers` (`borrowernumber`) ON DELETE SET NULL ON UPDATE SET NULL");
5030 $dbh->do("UPDATE virtualshelves SET allow_add=0, allow_delete_own=1, allow_delete_other=0 WHERE category=1");
5031 $dbh->do("UPDATE virtualshelves SET allow_add=0, allow_delete_own=1, allow_delete_other=0 WHERE category=2");
5032 $dbh->do("UPDATE virtualshelves SET allow_add=1, allow_delete_own=1, allow_delete_other=1 WHERE category=3");
5033 $dbh->do("UPDATE virtualshelves SET category=2 WHERE category=3");
5035 $dbh->do("ALTER TABLE virtualshelfcontents ADD COLUMN borrowernumber int, ADD CONSTRAINT `shelfcontents_ibfk_3` FOREIGN KEY (`borrowernumber`) REFERENCES `borrowers` (`borrowernumber`) ON DELETE SET NULL ON UPDATE SET NULL");
5036 $dbh->do("UPDATE virtualshelfcontents co LEFT JOIN virtualshelves sh USING (shelfnumber) SET co.borrowernumber=sh.owner");
5038 $dbh->do("CREATE TABLE virtualshelfshares
5039 (id int AUTO_INCREMENT PRIMARY KEY, shelfnumber int NOT NULL,
5040 borrowernumber int, invitekey varchar(10), sharedate datetime,
5041 CONSTRAINT `virtualshelfshares_ibfk_1` FOREIGN KEY (`shelfnumber`) REFERENCES `virtualshelves` (`shelfnumber`) ON DELETE CASCADE ON UPDATE CASCADE,
5042 CONSTRAINT `virtualshelfshares_ibfk_2` FOREIGN KEY (`borrowernumber`) REFERENCES `borrowers` (`borrowernumber`) ON DELETE SET NULL ON UPDATE SET NULL) ENGINE=InnoDB DEFAULT CHARSET=utf8");
5044 $dbh->do("INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES('OpacAllowPublicListCreation',1,'If set, allows opac users to create public lists',NULL,'YesNo');");
5045 $dbh->do("INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES('OpacAllowSharingPrivateLists',0,'If set, allows opac users to share private lists with other patrons',NULL,'YesNo');");
5047 print "Upgrade to $DBversion done (BZ7310: Improving list permissions)\n";
5048 SetVersion($DBversion);
5051 $DBversion = "3.07.00.033";
5052 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
5053 $dbh->do("ALTER TABLE branches ADD opac_info text;");
5054 print "Upgrade to $DBversion done add opac_info to branches \n";
5055 SetVersion($DBversion);
5058 $DBversion = "3.07.00.034";
5059 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
5060 $dbh->do("ALTER TABLE borrower_attribute_types ADD COLUMN category_code VARCHAR(10) NULL DEFAULT NULL AFTER `display_checkout`");
5061 $dbh->do("ALTER TABLE borrower_attribute_types ADD COLUMN class VARCHAR(255) NOT NULL DEFAULT '' AFTER `category_code`");
5062 $dbh->do("ALTER TABLE borrower_attribute_types ADD CONSTRAINT category_code_fk FOREIGN KEY (category_code) REFERENCES categories(categorycode)");
5063 print "Upgrade to $DBversion done (New fields category_code and class in borrower_attribute_types table)\n";
5064 SetVersion($DBversion);
5067 $DBversion = "3.07.00.035";
5068 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
5069 $dbh->do("ALTER TABLE issues CHANGE date_due date_due datetime");
5070 $dbh->do("UPDATE issues SET date_due = CONCAT(SUBSTR(date_due,1,11),'23:59:00')");
5071 $dbh->do("ALTER TABLE issues CHANGE returndate returndate datetime");
5072 $dbh->do("ALTER TABLE issues CHANGE lastreneweddate lastreneweddate datetime");
5073 $dbh->do("ALTER TABLE issues CHANGE issuedate issuedate datetime");
5074 $dbh->do("ALTER TABLE old_issues CHANGE date_due date_due datetime");
5075 $dbh->do("ALTER TABLE old_issues CHANGE returndate returndate datetime");
5076 $dbh->do("ALTER TABLE old_issues CHANGE lastreneweddate lastreneweddate datetime");
5077 $dbh->do("ALTER TABLE old_issues CHANGE issuedate issuedate datetime");
5078 $dbh->do("UPDATE accountlines SET description = CONCAT(description,' 23:59') WHERE accounttype='F' OR accounttype='FU'"); #BUG-8253
5079 print "Upgrade to $DBversion done (Setting up issues and accountlines tables for hourly loans)\n";
5080 SetVersion($DBversion);
5083 $DBversion = "3.07.00.036";
5084 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
5086 ALTER TABLE z3950servers ADD timeout INT( 11 ) NOT NULL DEFAULT '0' AFTER syntax;
5088 print "Upgrade to $DBversion done (New timeout field in z3950servers)\n";
5091 $DBversion = "3.07.00.037";
5092 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
5094 ALTER TABLE `marc_subfield_structure` ADD `maxlength` INT( 4 ) NOT NULL DEFAULT '9999';
5097 UPDATE `marc_subfield_structure` SET maxlength=24 WHERE tagfield='000';
5100 UPDATE marc_subfield_structure SET maxlength = IF ((SELECT value FROM systempreferences WHERE variable = 'marcflavour')='MARC21','40','9999') WHERE tagfield='008';
5103 UPDATE marc_subfield_structure SET maxlength = IF ((SELECT value FROM systempreferences WHERE variable = 'marcflavour')='NORMARC','40','9999') WHERE tagfield='008';
5106 UPDATE marc_subfield_structure SET maxlength = IF ((SELECT value FROM systempreferences WHERE variable = 'marcflavour')='UNIMARC','36','9999') WHERE tagfield='100';
5108 print "Upgrade to $DBversion done (Add new field maxlength to marc_subfield_structure)\n";
5109 SetVersion($DBversion);
5112 $DBversion = "3.07.00.038";
5113 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
5115 INSERT INTO systempreferences(variable,value,explanation,options,type)
5116 VALUES('UniqueItemFields', 'barcode', 'Space-separated list of fields that should be unique (used in acquisition module for item creation). Fields must be valid SQL column names of items table', '', 'Free')
5118 print "Upgrade to $DBversion done (Added system preference 'UniqueItemFields')\n";
5119 SetVersion($DBversion);
5122 $DBversion = "3.07.00.039";
5123 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
5124 $dbh->do( qq{INSERT IGNORE INTO systempreferences (variable,value,explanation,options,type) VALUES('Babeltheque_url_js','','Url for Babeltheque javascript (e.g. http://www.babeltheque.com/bw_XX.js','','Free')} );
5125 $dbh->do( qq{CREATE TABLE IF NOT EXISTS social_data
5128 num_critics_pro INT,
5131 score_avg DECIMAL(5,2),
5134 ) ENGINE=InnoDB DEFAULT CHARSET=utf8
5136 $dbh->do( qq{INSERT IGNORE INTO systempreferences (variable,value,explanation,options,type) VALUES ('Babeltheque_url_update', '', 'Url for Babeltheque update (E.G. http://www.babeltheque.com/.../file.csv.bz2)', '', 'Free')} );
5137 print "Upgrade to $DBversion done (added syspref and table for babeltheque (Babeltheque_url_js, babeltheque))\n";
5138 SetVersion($DBversion);
5141 $DBversion = "3.07.00.040";
5142 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
5143 $dbh->do( qq{INSERT IGNORE INTO systempreferences (variable,value,explanation,options,type) VALUES('SocialNetworks','0','Enable/Disable social networks links in opac detail','','YesNo')} );
5144 print "Upgrade to $DBversion done (added syspref SocialNetworks, to display facebook/ggl+ and other buttons)\n";
5145 SetVersion($DBversion);
5150 $DBversion = "3.07.00.041";
5151 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
5152 $dbh->do("INSERT INTO systempreferences (variable,value,options,explanation,type) VALUES('SubscriptionDuplicateDroppedInput','','','List of fields which must not be rewritten when a subscription is duplicated (Separated by pipe |)','Free')");
5153 print "Upgrade to $DBversion done (Add system preference SubscriptionDuplicateDroppedInput)\n";
5154 SetVersion($DBversion);
5157 $DBversion = "3.07.00.042";
5158 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
5159 $dbh->do("ALTER TABLE reserves ADD suspend BOOLEAN NOT NULL DEFAULT 0");
5160 $dbh->do("ALTER TABLE old_reserves ADD suspend BOOLEAN NOT NULL DEFAULT 0");
5162 $dbh->do("ALTER TABLE reserves ADD suspend_until DATETIME NULL DEFAULT NULL");
5163 $dbh->do("ALTER TABLE old_reserves ADD suspend_until DATETIME NULL DEFAULT NULL");
5165 $dbh->do("INSERT INTO systempreferences (variable,value,options,explanation,type) VALUES ('AutoResumeSuspendedHolds', '1', NULL , 'Allow suspended holds to be automatically resumed by a set date.', 'YesNo')");
5167 print "Upgrade to $DBversion done (Add suspend fields to reserves table, add syspref AutoResumeSuspendedHolds)\n";
5168 SetVersion ($DBversion);
5171 $DBversion = "3.07.00.043";
5172 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
5173 my $countXSLTDetailsDisplay = 0;
5174 my $valueXSLTDetailsDisplay = "";
5175 my $valueXSLTResultsDisplay = "";
5176 my $valueOPACXSLTDetailsDisplay = "";
5177 my $valueOPACXSLTResultsDisplay = "";
5178 #the line below test if database comes from a BibLibre's branch
5179 $countXSLTDetailsDisplay = $dbh->do('SELECT 1 FROM systempreferences WHERE variable="IntranetXSLTDetailsDisplay"');
5180 if ($countXSLTDetailsDisplay > 0)
5182 #the two lines below will only be used to update the databases from the BibLibre's branch. They will not affect the others
5183 $dbh->do(q|UPDATE systempreferences SET variable="XSLTDetailsDisplay" WHERE variable="IntranetXSLTDetailsDisplay"|);
5184 $dbh->do(q|UPDATE systempreferences SET variable="XSLTResultsDisplay" WHERE variable="IntranetXSLTResultsDisplay"|);
5188 $valueXSLTDetailsDisplay = "default" if (C4::Context->preference("XSLTDetailsDisplay"));
5189 $valueXSLTResultsDisplay = "default" if (C4::Context->preference("XSLTResultsDisplay"));
5190 $valueOPACXSLTDetailsDisplay = "default" if (C4::Context->preference("OPACXSLTDetailsDisplay"));
5191 $valueOPACXSLTResultsDisplay = "default" if (C4::Context->preference("OPACXSLTResultsDisplay"));
5192 $dbh->do("UPDATE systempreferences SET type='Free', value=\"$valueXSLTDetailsDisplay\" WHERE variable='XSLTDetailsDisplay'");
5193 $dbh->do("UPDATE systempreferences SET type='Free', value=\"$valueXSLTResultsDisplay\" WHERE variable='XSLTResultsDisplay'");
5194 $dbh->do("UPDATE systempreferences SET type='Free', value=\"$valueOPACXSLTDetailsDisplay\" WHERE variable='OPACXSLTDetailsDisplay'");
5195 $dbh->do("UPDATE systempreferences SET type='Free', value=\"$valueOPACXSLTResultsDisplay\" WHERE variable='OPACXSLTResultsDisplay'");
5197 print "Upgrade to $DBversion done (XSLT systempreference takes a path to file rather than YesNo)\n";
5198 SetVersion($DBversion);
5201 $DBversion = "3.07.00.044";
5202 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
5203 $dbh->do("ALTER TABLE aqbooksellers ADD deliverytime INT DEFAULT NULL");
5204 print "Upgrade to $DBversion done (Add deliverytime field in aqbooksellers table)";
5205 SetVersion($DBversion);
5208 $DBversion = "3.07.00.045";
5209 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
5210 $dbh->do("ALTER TABLE import_batches MODIFY COLUMN batch_type ENUM('batch','z3950','webservice') NOT NULL default 'batch'");
5211 print "Upgrade to $DBversion done (Add 'webservice' to batch_type enum)\n";
5212 SetVersion ($DBversion);
5215 $DBversion = "3.07.00.046";
5216 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
5217 $dbh->do("ALTER TABLE issuingrules ADD COLUMN lengthunit varchar(10) DEFAULT 'days' AFTER issuelength");
5218 print "Upgrade to $DBversion done (Setting up issues tables for hourly loans (lengthunit fix))\n";
5219 SetVersion($DBversion);
5222 $DBversion = "3.07.00.047";
5223 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
5224 $dbh->do("CREATE INDEX items_location ON items(location)");
5225 $dbh->do("CREATE INDEX items_ccode ON items(ccode)");
5226 print "Upgrade to $DBversion done (items_location and items_ccode indexes added for ShelfBrowser)\n";
5227 SetVersion($DBversion);
5230 $DBversion = "3.07.00.048";
5231 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
5233 q | CREATE TABLE ratings (
5234 borrowernumber int(11) NOT NULL,
5235 biblionumber int(11) NOT NULL,
5236 rating_value tinyint(1) NOT NULL,
5237 timestamp timestamp NOT NULL default CURRENT_TIMESTAMP,
5238 PRIMARY KEY (borrowernumber,biblionumber),
5239 CONSTRAINT ratings_ibfk_1 FOREIGN KEY (borrowernumber) REFERENCES borrowers (borrowernumber) ON DELETE CASCADE ON UPDATE CASCADE,
5240 CONSTRAINT ratings_ibfk_2 FOREIGN KEY (biblionumber) REFERENCES biblio (biblionumber) ON DELETE CASCADE ON UPDATE CASCADE
5241 ) ENGINE=InnoDB DEFAULT CHARSET=utf8 |
5245 q /INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES ('OpacStarRatings','disable',NULL,'disable|all|details','Choice') /
5249 "Upgrade to $DBversion done (Add 'ratings' table and 'OpacStarRatings' syspref)\n";
5250 SetVersion($DBversion);
5253 $DBversion = "3.07.00.049";
5254 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
5255 $dbh->do("INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES('OpacBrowseResults','1','Disable/enable browsing and paging search results from the OPAC detail page.',NULL,'YesNo')");
5256 print "Upgrade to $DBversion done (Add system preference OpacBrowseResults ))\n";
5257 SetVersion($DBversion);
5260 $DBversion = "3.08.00.000";
5261 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
5262 print "Upgrade to $DBversion done\n";
5263 SetVersion($DBversion);
5266 $DBversion = "3.09.00.001";
5267 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
5268 $dbh->do("ALTER TABLE borrower_attribute_types MODIFY category_code VARCHAR( 1 ) NULL DEFAULT NULL");
5269 print "Upgrade to $DBversion done. (Bug 8002: Update patron attribute types table to allow NULL category_code)\n";
5270 SetVersion($DBversion);
5273 $DBversion = "3.09.00.002";
5274 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
5275 $dbh->do("ALTER TABLE saved_sql
5277 cache_expiry INT NOT NULL DEFAULT 300,
5278 public BOOLEAN NOT NULL DEFAULT FALSE
5281 print "Upgrade to $DBversion done (Added cache_expiry and public fields in
5282 saved_reports table.)\n";
5283 SetVersion($DBversion);
5286 $DBversion = "3.09.00.003";
5287 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
5288 $dbh->do("INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES('SvcMaxReportRows','10','Maximum number of rows to return via the report web service.',NULL,'Integer');");
5289 print "Upgrade to $DBversion done (Added SvcMaxReportRows syspref)\n";
5290 SetVersion($DBversion);
5293 $DBversion = "3.09.00.004";
5294 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
5295 $dbh->do("INSERT IGNORE INTO permissions (module_bit, code, description) VALUES('13', 'edit_patrons', 'Perform batch modifivation of patrons')");
5296 print "Upgrade to $DBversion done (Adds permissions flag for access to the patron modifications tool)\n";
5297 SetVersion($DBversion);
5300 $DBversion = "3.09.00.005";
5301 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
5302 unless (TableExists('quotes')) {
5304 CREATE TABLE `quotes` (
5305 `id` int(11) NOT NULL AUTO_INCREMENT,
5306 `source` text DEFAULT NULL,
5307 `text` mediumtext NOT NULL,
5308 `timestamp` datetime NOT NULL,
5310 ) ENGINE=InnoDB DEFAULT CHARSET=utf8
5314 INSERT IGNORE INTO permissions VALUES (13, "edit_quotes","Edit quotes for quote-of-the-day feature");
5317 INSERT IGNORE INTO `systempreferences` (variable,value,explanation,options,type) VALUES('QuoteOfTheDay',0,'Enable or disable display of Quote of the Day on the OPAC home page',NULL,'YesNo');
5319 print "Upgrade to $DBversion done (Adding Quote of the Day Option.)\n";
5320 SetVersion($DBversion);
5323 $DBversion = "3.09.00.006";
5324 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
5325 $dbh->do("UPDATE systempreferences SET
5326 variable = 'OPACShowHoldQueueDetails',
5327 value = CASE value WHEN '1' THEN 'priority' ELSE 'none' END,
5328 options = 'none|priority|holds|holds_priority',
5329 explanation = 'Show holds details in OPAC',
5331 WHERE variable = 'OPACDisplayRequestPriority'");
5332 print "Upgrade to $DBversion done (Changed system preference OPACDisplayRequestPriority -> OPACShowHoldQueueDetails)\n";
5333 SetVersion($DBversion);
5336 $DBversion = "3.09.00.007";
5337 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
5338 unless(C4::Context->preference('ReservesControlBranch')){
5339 $dbh->do("INSERT INTO `systempreferences` (variable,value,options,explanation,type) VALUES ('ReservesControlBranch','PatronLibrary','ItemHomeLibrary|PatronLibrary','Branch checked for members reservations rights.','Choice')");
5341 print "Upgrade to $DBversion done (Insert ReservesControlBranch systempreference into systempreferences table )\n";
5342 SetVersion($DBversion);
5345 $DBversion = "3.09.00.008";
5346 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
5347 $dbh->do("ALTER TABLE sessions ADD PRIMARY KEY (id);");
5348 $dbh->do("ALTER TABLE sessions DROP INDEX `id`;");
5349 print "Upgrade to $DBversion done (redefine the field id as PRIMARY KEY of sessions)\n";
5350 SetVersion($DBversion);
5353 $DBversion = "3.09.00.009";
5354 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
5355 $dbh->do("ALTER TABLE branches ADD PRIMARY KEY (branchcode);");
5356 $dbh->do("ALTER TABLE branches DROP INDEX branchcode;");
5357 print "Upgrade to $DBversion done (redefine the field branchcode as PRIMARY KEY of branches)\n";
5358 SetVersion ($DBversion);
5361 $DBversion = "3.09.00.010";
5362 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
5363 $dbh->do("INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES('IssueLostItem', 'alert', 'alert|confirm|nothing', 'Defines what should be done when an attempt is made to issue an item that has been marked as lost.', 'Choice')");
5364 print "Upgrade to $DBversion done (Add system preference issuelostitem ))\n";
5365 SetVersion($DBversion);
5368 $DBversion = "3.09.00.011";
5369 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
5370 $dbh->do("ALTER TABLE `biblioitems` ADD `ean` VARCHAR( 13 ) NULL AFTER issn");
5371 $dbh->do("CREATE INDEX `ean` ON biblioitems (`ean`) ");
5372 $dbh->do("ALTER TABLE `deletedbiblioitems` ADD `ean` VARCHAR( 13 ) NULL AFTER issn");
5373 if (C4::Context->preference("marcflavour") eq 'UNIMARC') {
5374 $dbh->do("UPDATE marc_subfield_structure SET kohafield='biblioitems.ean' WHERE tagfield='073' and tagsubfield='a'");
5376 print "Upgrade to $DBversion done (Adding ean in biblioitems and deletedbiblioitems)\n";
5377 print "If you have records with ean, please run misc/batchRebuildBiblioTables.pl to populate bibliotems.ean\n" if (C4::Context->preference("marcflavour") eq 'UNIMARC');
5378 SetVersion($DBversion);
5381 $DBversion = "3.09.00.012";
5382 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
5383 $dbh->do("INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES('SuspendHoldsIntranet', '1', NULL , 'Allow holds to be suspended from the intranet.', 'YesNo')");
5384 $dbh->do("INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES('SuspendHoldsOpac', '1', NULL , 'Allow holds to be suspended from the OPAC.', 'YesNo')");
5385 print "Upgrade to $DBversion done (Add system preference OpacBrowseResults ))\n";
5386 SetVersion($DBversion);
5389 $DBversion ="3.09.00.013";
5390 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
5391 $dbh->do("INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES('DefaultLanguageField008','','Fill in the default language for field 008 Range 35-37 (e.g. eng, nor, ger, see www.loc.gov/marc/languages/language_code.html)','','Free');");
5392 print "Upgrade to $DBversion done (Add system preference DefaultLanguageField008))\n";
5393 SetVersion($DBversion);
5396 $DBversion ="3.09.00.014";
5397 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
5398 # add phone message transport type
5399 $dbh->do("INSERT INTO message_transport_types (message_transport_type) VALUES ('phone')");
5401 # adds HOLD_PHONE and PREDUE_PHONE letters (as placeholders)
5402 $dbh->do("INSERT INTO letter (module, code, name, title, content) VALUES
5403 ('reserves', 'HOLD_PHONE', 'Item Available for Pick-up (phone notice)', 'Item Available for Pick-up (phone notice)', 'Your item is available for pickup'),
5404 ('circulation', 'PREDUE_PHONE', 'Advance Notice of Item Due (phone notice)', 'Advance Notice of Item Due (phone notice)', 'Your item is due soon'),
5405 ('circulation', 'OVERDUE_PHONE', 'Overdue Notice (phone notice)', 'Overdue Notice (phone notice)', 'Your item is overdue')
5408 # add phone notifications to patron message preferences options
5409 $dbh->do("INSERT INTO message_transports
5410 (message_attribute_id, message_transport_type, is_digest, letter_module, letter_code) VALUES
5411 (4, 'phone', 0, 'reserves', 'HOLD_PHONE'),
5412 (2, 'phone', 0, 'circulation', 'PREDUE_PHONE')
5415 # add TalkingTechItivaPhoneNotification syspref
5416 $dbh->do("INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES('TalkingTechItivaPhoneNotification',0,'If ON, enables Talking Tech I-tiva phone notifications',NULL,'YesNo');");
5418 print "Upgrade done (Support for Talking Tech i-tiva phone notification system)\n";
5419 SetVersion($DBversion);
5422 $DBversion = "3.09.00.015";
5423 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
5425 INSERT IGNORE INTO systempreferences (variable,value,explanation,options,type) VALUES('StatisticsFields','location|itype|ccode','Define Fields (from the items table) used for statistics members','location|itype|ccode','free')
5427 print "Upgrade to $DBversion done (Add System preference StatisticsFields)\n";
5428 SetVersion($DBversion);
5431 $DBversion = "3.09.00.016";
5432 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
5433 $dbh->do("INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('OPACShowBarcode','0','Show items barcode in holding tab','','YesNo')");
5434 print "Upgrade to $DBversion done (Add syspref OPACShowBarcode)\n";
5435 SetVersion ($DBversion);
5438 $DBversion = "3.09.00.017";
5439 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
5440 $dbh->do("INSERT INTO systempreferences (variable,value,options,explanation,type) VALUES ('OpacNavRight', '', '70|10', 'Show the following HTML in the right hand column of the main page under the main login form', 'Textarea');");
5441 print "Upgrade to $DBversion done (Add customizable OpacNavRight region to the OPAC main page)\n";
5442 SetVersion ($DBversion);
5445 $DBversion = "3.09.00.018";
5446 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
5447 $dbh->do("DROP TABLE IF EXISTS aqbudgetborrowers");
5449 CREATE TABLE aqbudgetborrowers (
5450 budget_id int(11) NOT NULL,
5451 borrowernumber int(11) NOT NULL,
5452 PRIMARY KEY (budget_id, borrowernumber),
5453 CONSTRAINT aqbudgetborrowers_ibfk_1 FOREIGN KEY (budget_id)
5454 REFERENCES aqbudgets (budget_id)
5455 ON DELETE CASCADE ON UPDATE CASCADE,
5456 CONSTRAINT aqbudgetborrowers_ibfk_2 FOREIGN KEY (borrowernumber)
5457 REFERENCES borrowers (borrowernumber)
5458 ON DELETE CASCADE ON UPDATE CASCADE
5459 ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
5462 INSERT INTO permissions (module_bit, code, description)
5463 VALUES (11, 'budget_manage_all', 'Manage all budgets')
5465 print "Upgrade to $DBversion done (Add aqbudgetborrowers table)\n";
5466 SetVersion($DBversion);
5469 $DBversion = "3.09.00.019";
5470 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
5471 $dbh->do("INSERT INTO systempreferences (variable,value,options,explanation,type) VALUES ('OPACShowUnusedAuthorities','1','','Show authorities that are not being used in the OPAC.','YesNo')");
5472 print "Upgrade to $DBversion done (Add OPACShowUnusedAuthorities system preference)\n";
5473 SetVersion ($DBversion);
5476 $DBversion = "3.09.00.020";
5477 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
5478 $dbh->do("INSERT INTO systempreferences (variable,value,explanation,type) VALUES('EnableBorrowerFiles','0','If enabled, allows librarians to upload and attach arbitrary files to a borrower record.','YesNo')");
5480 CREATE TABLE IF NOT EXISTS borrower_files (
5481 file_id int(11) NOT NULL AUTO_INCREMENT,
5482 borrowernumber int(11) NOT NULL,
5483 file_name varchar(255) NOT NULL,
5484 file_type varchar(255) NOT NULL,
5485 file_description varchar(255) DEFAULT NULL,
5486 file_content longblob NOT NULL,
5487 date_uploaded timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
5488 PRIMARY KEY (file_id),
5489 KEY borrowernumber (borrowernumber)
5490 ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
5492 $dbh->do("ALTER TABLE borrower_files ADD CONSTRAINT borrower_files_ibfk_1 FOREIGN KEY (borrowernumber) REFERENCES borrowers (borrowernumber) ON DELETE CASCADE ON UPDATE CASCADE");
5494 print "Upgrade to $DBversion done (Added borrow_files table, EnableBorrowerFiles syspref)\n";
5495 SetVersion($DBversion);
5498 $DBversion = "3.09.00.021";
5499 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
5500 $dbh->do("INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES('UpdateTotalIssuesOnCirc','0','Whether to update the totalissues field in the biblio on each circ.',NULL,'YesNo');");
5501 print "Upgrade to $DBversion done (Add syspref UpdateTotalIssuesOnCirc)\n";
5502 SetVersion($DBversion);
5505 $DBversion = "3.09.00.022";
5506 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
5507 $dbh->do("ALTER TABLE search_history MODIFY COLUMN query_cgi text NOT NULL");
5508 print "Upgrade to $DBversion done (Change search_history.query_cgi type to text. bug 5981)\n";
5509 SetVersion($DBversion);
5512 $DBversion = "3.09.00.023";
5513 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
5514 $dbh->do("INSERT IGNORE INTO systempreferences (variable,value,options,explanation,type) VALUES('SearchEngine','Zebra','Solr|Zebra','Search Engine','Choice')");
5515 print "Upgrade to $DBversion done (Add system preference SearchEngine )\n";
5516 SetVersion($DBversion);
5519 $DBversion ="3.09.00.024";
5520 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
5521 $dbh->do("INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES('IntranetSlipPrinterJS','','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')");
5522 print "Upgrade to $DBversion done (Add system preference IntranetSlipPrinterJS))\n";
5523 SetVersion($DBversion);
5526 $DBversion = "3.09.00.025";
5527 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
5528 $dbh->do('START TRANSACTION');
5529 $dbh->do('CREATE TABLE tmp_reserves AS SELECT * FROM old_reserves LIMIT 0');
5530 $dbh->do('ALTER TABLE tmp_reserves ADD reserve_id INT( 11 ) NOT NULL AUTO_INCREMENT PRIMARY KEY FIRST');
5532 INSERT INTO tmp_reserves (
5533 borrowernumber, reservedate, biblionumber,
5534 constrainttype, branchcode, notificationdate,
5535 reminderdate, cancellationdate, reservenotes,
5536 priority, found, timestamp, itemnumber,
5537 waitingdate, expirationdate, lowestPriority,
5538 suspend, suspend_until
5540 borrowernumber, reservedate, biblionumber,
5541 constrainttype, branchcode, notificationdate,
5542 reminderdate, cancellationdate, reservenotes,
5543 priority, found, timestamp, itemnumber,
5544 waitingdate, expirationdate, lowestPriority,
5545 suspend, suspend_until
5546 FROM old_reserves ORDER BY reservedate
5548 $dbh->do('SET @ai = ( SELECT MAX( reserve_id ) FROM tmp_reserves )');
5549 $dbh->do('TRUNCATE old_reserves');
5550 $dbh->do('ALTER TABLE old_reserves ADD reserve_id INT( 11 ) NOT NULL PRIMARY KEY FIRST');
5551 $dbh->do('INSERT INTO old_reserves SELECT * FROM tmp_reserves WHERE reserve_id <= @ai');
5553 INSERT INTO tmp_reserves (
5554 borrowernumber, reservedate, biblionumber,
5555 constrainttype, branchcode, notificationdate,
5556 reminderdate, cancellationdate, reservenotes,
5557 priority, found, timestamp, itemnumber,
5558 waitingdate, expirationdate, lowestPriority,
5559 suspend, suspend_until
5561 borrowernumber, reservedate, biblionumber,
5562 constrainttype, branchcode, notificationdate,
5563 reminderdate, cancellationdate, reservenotes,
5564 priority, found, timestamp, itemnumber,
5565 waitingdate, expirationdate, lowestPriority,
5566 suspend, suspend_until
5567 FROM reserves ORDER BY reservedate
5569 $dbh->do('TRUNCATE reserves');
5570 $dbh->do('ALTER TABLE reserves ADD reserve_id INT( 11 ) NOT NULL AUTO_INCREMENT PRIMARY KEY FIRST');
5571 $dbh->do('INSERT INTO reserves SELECT * FROM tmp_reserves WHERE reserve_id > COALESCE(@ai, 0)');
5572 $dbh->do('DROP TABLE tmp_reserves');
5575 my $sth = $dbh->prepare("
5576 SELECT COUNT( * ) AS count
5577 FROM information_schema.COLUMNS
5578 WHERE COLUMN_NAME = 'reserve_id'
5580 TABLE_NAME LIKE 'reserves'
5582 TABLE_NAME LIKE 'old_reserves'
5586 my $row = $sth->fetchrow_hashref();
5587 die("Failed to add reserve_id to reserves tables, please refresh the page to try again.") unless ( $row->{'count'} );
5589 print "Upgrade to $DBversion done (add reserve_id to reserves & old_reserves tables)\n";
5590 SetVersion($DBversion);
5593 $DBversion = "3.09.00.026";
5594 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
5595 $dbh->do("INSERT INTO permissions (module_bit, code, description) VALUES
5596 ( 3, 'parameters_remaining_permissions', 'Remaining system parameters permissions'),
5597 ( 3, 'manage_circ_rules', 'manage circulation rules')");
5598 $dbh->do("INSERT INTO user_permissions (borrowernumber, module_bit, code)
5599 SELECT borrowernumber, 3, 'parameters_remaining_permissions'
5600 FROM borrowers WHERE flags & (1 << 3)");
5601 # Give new subpermissions to all users that have 'parameters' permission flag (bit 3) set
5602 # see userflags table
5603 $dbh->do("INSERT INTO user_permissions (borrowernumber, module_bit, code)
5604 SELECT borrowernumber, 3, 'manage_circ_rules'
5605 FROM borrowers WHERE flags & (1 << 3)");
5606 print "Upgrade to $DBversion done (Added parameters subpermissions)\n";
5607 SetVersion($DBversion);
5610 $DBversion = '3.09.00.027';
5611 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
5612 $dbh->do("ALTER TABLE issuingrules ADD overduefinescap decimal(28,6) DEFAULT NULL");
5613 my $maxfine = C4::Context->preference('MaxFine');
5614 if ($maxfine && $maxfine < 900) { # an arbitrary value that tells us it's not "some huge value"
5615 $dbh->do("UPDATE issuingrules SET overduefinescap=?",undef,$maxfine);
5616 $dbh->do("UPDATE systempreferences SET value = NULL WHERE variable = 'MaxFine'");
5618 $dbh->do("UPDATE systempreferences SET explanation = 'Maximum fine a patron can have for all late returns at one moment. Single item caps are specified in the circulation rules matrix.' WHERE variable = 'MaxFine'");
5619 print "Upgrade to $DBversion done (Bug 7420 add overduefinescap to circulation matrix)\n";
5620 SetVersion ($DBversion);
5623 $DBversion = "3.09.00.028";
5624 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
5625 unless ( C4::Context->preference('marcflavour') eq 'UNIMARC' ) {
5626 my %referencetypes = ( '00' => 'PERSO_NAME',
5627 '10' => 'CORPO_NAME',
5628 '11' => 'MEETI_NAME',
5629 '30' => 'UNIF_TITLE',
5630 '48' => 'CHRON_TERM',
5631 '50' => 'TOPIC_TERM',
5632 '51' => 'GEOGR_NAME',
5633 '55' => 'GENRE/FORM'
5635 my $query = q{SELECT DISTINCT authtypecode, tagfield
5636 FROM auth_subfield_structure
5637 WHERE (tagfield BETWEEN '400' AND '455' OR
5638 tagfield BETWEEN '500' and '555') AND tagsubfield='a' AND
5639 frameworkcode = '' AND ROW(authtypecode, tagfield) NOT IN
5640 (SELECT authtypecode, tagfield FROM auth_subfield_structure
5641 WHERE tagsubfield ='9' )};
5642 $sth = $dbh->prepare($query);
5644 my $sth2 = $dbh->prepare(q{INSERT INTO auth_subfield_structure
5645 (authtypecode, tagfield, tagsubfield, liblibrarian, libopac,
5646 repeatable, mandatory, tab, authorised_value, value_builder,
5647 seealso, isurl, hidden, linkid, kohafield, frameworkcode)
5648 VALUES (?, ?, '9', '9 (RLIN)', '9 (RLIN)', 0, 0, ?, NULL, NULL,
5649 NULL, 0, 1, '', '', '')});
5650 my $sth3 = $dbh->prepare(q{UPDATE auth_subfield_structure SET
5651 frameworkcode = ? WHERE authtypecode = ? AND
5652 tagfield = ? AND tagsubfield = 'a'});
5653 while (my $row = $sth->fetchrow_arrayref()) {
5654 my ($authtypecode, $field) = @$row;
5655 $sth2->execute($authtypecode, $field, substr($field, 0, 1));
5656 my $authtypemarker = substr $field, 1, 2;
5657 if ($authtypemarker && $referencetypes{$authtypemarker}) {
5658 $sth3->execute($referencetypes{$authtypemarker}, $authtypecode, $field);
5663 print "Upgrade to $DBversion done (Add thesaurus links for MARC21/NORMARC)\n";
5664 SetVersion($DBversion);
5667 $DBversion = "3.09.00.029"; # FIXME
5668 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
5669 $dbh->do("UPDATE systempreferences SET options=concat(options,'|EAN13') WHERE variable='itemBarcodeInputFilter' AND options NOT LIKE '%EAN13%'");
5670 print "Upgrade to $DBversion done (Add itemBarcodeInputFilter choice EAN13)\n";
5672 $dbh->do("UPDATE systempreferences SET options = concat(options,'|EAN13'), explanation = concat(explanation,'; EAN13 - incremental') WHERE variable = 'autoBarcode' AND options NOT LIKE '%EAN13%'");
5673 print "Upgrade to $DBversion done ( Added EAN13 barcode autogeneration sequence )\n";
5674 SetVersion($DBversion);
5677 $DBversion ="3.09.00.030";
5678 if(C4::Context->preference("Version") < TransformToNum($DBversion) ) {
5679 my $query = "SELECT value FROM systempreferences WHERE variable='opacstylesheet'";
5680 my $remote= $dbh->selectrow_arrayref($query);
5681 $dbh->do("DELETE from systempreferences WHERE variable='opacstylesheet'");
5682 if($remote && $remote->[0]) {
5683 $query="UPDATE systempreferences SET value=? WHERE variable='opaclayoutstylesheet'";
5684 $dbh->do($query,undef,$remote->[0]);
5685 print "NOTE: The URL of your remote opac css file has been moved to preference opaclayoutstylesheet.\n";
5687 print "Upgrade to $DBversion done (BZ 8263: Make OPAC stylesheet preferences more consistent)\n";
5688 SetVersion($DBversion);
5691 $DBversion = "3.09.00.031";
5692 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
5693 $dbh->do("DELETE FROM systempreferences WHERE variable='AmazonReviews'");
5694 $dbh->do("DELETE FROM systempreferences WHERE variable='AmazonSimilarItems'");
5695 $dbh->do("DELETE FROM systempreferences WHERE variable='AWSAccessKeyID'");
5696 $dbh->do("DELETE FROM systempreferences WHERE variable='AWSPrivateKey'");
5697 $dbh->do("DELETE FROM systempreferences WHERE variable='OPACAmazonReviews'");
5698 $dbh->do("DELETE FROM systempreferences WHERE variable='OPACAmazonSimilarItems'");
5699 $dbh->do("DELETE FROM systempreferences WHERE variable='AmazonEnabled'");
5700 $dbh->do("DELETE FROM systempreferences WHERE variable='OPACAmazonEnabled'");
5701 print "Upgrade to $DBversion done ('Remove preferences controlling broken Amazon features (Bug 8679')\n";
5702 SetVersion ($DBversion);
5705 $DBversion = "3.09.00.032";
5706 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
5707 $dbh->do("UPDATE systempreferences SET value = 'call_number' WHERE variable = 'defaultSortField' AND value = 'callnumber'");
5708 $dbh->do("UPDATE systempreferences SET value = 'call_number' WHERE variable = 'OPACdefaultSortField' AND value = 'callnumber'");
5709 print "Upgrade to $DBversion done (Bug 8657 - Default sort by call number does not work. Correcting system preference value.)\n";
5710 SetVersion ($DBversion);
5714 $DBversion = '3.09.00.033';
5715 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
5716 $dbh->do("INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES('OpacSuppressionByIPRange','','Restrict the suppression to IP adresses outside of the IP range','','free');");
5717 print "Upgrade to $DBversion done (Add OpacSuppressionByIPRange syspref)\n";
5718 SetVersion ($DBversion);
5721 $DBversion ="3.09.00.034";
5722 if(C4::Context->preference("Version") < TransformToNum($DBversion) ) {
5723 $dbh->do("UPDATE auth_subfield_structure SET frameworkcode = 'PERSO_NAME' WHERE frameworkcode = 'PERSO_CODE'");
5724 $dbh->do("UPDATE auth_subfield_structure SET frameworkcode = 'CORPO_NAME' WHERE frameworkcode = 'ORGO_CODE'");
5725 print "Upgrade to $DBversion done (Bug 8207: correct typo in authority types)\n";
5726 SetVersion ($DBversion);
5729 $DBversion = "3.09.00.035";
5730 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
5732 INSERT IGNORE INTO systempreferences (variable,value,explanation,options,type) VALUES('PrefillItem','0','When a new item is added, should it be prefilled with last created item values?','','YesNo');
5735 "INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES ('SubfieldsToUseWhenPrefill','','Define a list of subfields to use when prefilling items (separated by space)','','Free');
5737 print "Upgrade to $DBversion done (Adding PrefillItem and SubfieldsToUseWhenPrefill sysprefs)\n";
5738 SetVersion ($DBversion);
5741 $DBversion = "3.09.00.036";
5742 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
5743 # biblioitems changes
5744 $dbh->do("ALTER TABLE biblioitems ADD COLUMN agerestriction VARCHAR(255) DEFAULT NULL AFTER cn_sort");
5745 $dbh->do("ALTER TABLE deletedbiblioitems ADD COLUMN agerestriction VARCHAR(255) DEFAULT NULL AFTER cn_sort");
5746 # preferences changes
5747 $dbh->do("INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES('AgeRestrictionMarker','','Markers for age restriction indication, e.g. FSK|PEGI|Age|. See: http://wiki.koha-community.org/wiki/Age_restriction',NULL,'free')");
5748 $dbh->do("INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES('AgeRestrictionOverride',0,'Allow staff to check out an item with age restriction.',NULL,'YesNo')");
5750 print "Upgrade to $DBversion done (Add colum agerestriction to biblioitems and deletedbiblioitems, add system preferences AgeRestrictionMarker and AgeRestrictionOverride)\n";
5751 SetVersion ($DBversion);
5754 $DBversion = "3.09.00.037";
5755 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
5756 $dbh->do("INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('UseTransportCostMatrix',0,'Use Transport Cost Matrix when filling holds','','YesNo')");
5758 $dbh->do("CREATE TABLE `transport_cost` (
5759 `frombranch` varchar(10) NOT NULL,
5760 `tobranch` varchar(10) NOT NULL,
5761 `cost` decimal(6,2) NOT NULL,
5762 `disable_transfer` tinyint(1) NOT NULL DEFAULT 0,
5763 CHECK ( `frombranch` <> `tobranch` ), -- a dud check, mysql does not support that
5764 PRIMARY KEY (`frombranch`, `tobranch`),
5765 CONSTRAINT `transport_cost_ibfk_1` FOREIGN KEY (`frombranch`) REFERENCES `branches` (`branchcode`) ON DELETE CASCADE ON UPDATE CASCADE,
5766 CONSTRAINT `transport_cost_ibfk_2` FOREIGN KEY (`tobranch`) REFERENCES `branches` (`branchcode`) ON DELETE CASCADE ON UPDATE CASCADE
5767 ) ENGINE=InnoDB DEFAULT CHARSET=utf8");
5769 print "Upgrade to $DBversion done (creating `transport_cost` table; adding UseTransportCostMatrix systempref, in circulation)\n";
5770 SetVersion($DBversion);
5773 $DBversion ="3.09.00.038";
5774 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
5775 $dbh->do("ALTER TABLE borrower_attributes CHANGE attribute attribute VARCHAR( 255 ) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL");
5776 print "Upgrade to $DBversion done (Increase the maximum size of a borrower attribute value)\n";
5777 SetVersion($DBversion);
5780 $DBversion ="3.09.00.039";
5781 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
5782 $dbh->do("INSERT INTO systempreferences (variable,value,explanation,type) VALUES('DidYouMeanFromAuthorities','0','Suggest searches based on authority file.','YesNo');");
5783 print "Upgrade to $DBversion done (Add system preference DidYouMeanFromAuthorities)\n";
5784 SetVersion($DBversion);
5787 $DBversion = "3.09.00.040";
5788 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
5789 $dbh->do("INSERT INTO systempreferences (variable,value,options,explanation,type) VALUES ('IncludeSeeFromInSearches','0','','Include see-from references in searches.','YesNo');");
5790 print "Upgrade to $DBversion done (Add IncludeSeeFromInSearches system preference)\n";
5791 SetVersion ($DBversion);
5794 $DBversion = "3.09.00.041";
5795 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
5797 INSERT IGNORE INTO systempreferences (variable,value,explanation,options,type) VALUES('ExportRemoveFields','','List of fields for non export in circulation.pl (separated by a space)','','');
5799 print "Upgrade to $DBversion done (Add system preference ExportRemoveFields)\n";
5800 SetVersion($DBversion);
5803 $DBversion = "3.09.00.042";
5804 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
5806 INSERT IGNORE INTO systempreferences (variable,value,explanation,options,type) VALUES('ExportWithCsvProfile','','Set a profile name for CSV export','','');
5808 print "Upgrade to $DBversion done (Adds New System preference ExportWithCsvProfile)\n";
5809 SetVersion($DBversion)
5812 $DBversion = "3.09.00.043";
5813 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
5815 ALTER TABLE aqorders
5816 ADD parent_ordernumber int(11) DEFAULT NULL
5820 SET parent_ordernumber = ordernumber;
5822 print "Upgrade to $DBversion done (Adding parent_ordernumber in aqorders)\n";
5823 SetVersion($DBversion);
5826 $DBversion = '3.09.00.044';
5827 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
5828 $dbh->do("ALTER TABLE statistics ADD COLUMN ccode VARCHAR ( 10 ) NULL AFTER associatedborrower");
5829 $dbh->do("UPDATE statistics SET statistics.ccode = ( SELECT items.ccode FROM items WHERE statistics.itemnumber = items.itemnumber )");
5830 $dbh->do("UPDATE statistics SET statistics.ccode = (
5831 SELECT deleteditems.ccode FROM deleteditems
5832 WHERE statistics.itemnumber = deleteditems.itemnumber
5833 ) WHERE statistics.ccode IS NULL");
5834 print "Upgrade done ( Added Collection Code to Statistics table. )\n";
5835 SetVersion ($DBversion);
5838 $DBversion = "3.09.00.045";
5839 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
5840 $dbh->do("ALTER TABLE borrower_attribute_types MODIFY category_code VARCHAR( 10 ) NULL DEFAULT NULL");
5841 print "Upgrade to $DBversion done. (Bug 8002: Update patron attribute types table from varchar(1) to varchar(10) category_code)\nWarning to Koha System Administrators: If you use borrower attributes defined by borrower categories, you have to check your configuration. A bug may have removed your attribute links to borrower categories.\nPlease check, and fix it if necessary.";
5842 SetVersion($DBversion);
5845 $DBversion = "3.09.00.046";
5846 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
5847 $dbh->do("ALTER TABLE `accountlines` ADD `accountlines_id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY FIRST;");
5848 print "Upgrade to $DBversion done (adding accountlines_id field in accountlines table)\n";
5849 SetVersion($DBversion);
5852 $DBversion = "3.09.00.047";
5853 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
5854 # to preserve default behaviour as best as possible, set this new preference differently depending on whether IndependantBranches is set or not
5855 my $prefvalue = 'anywhere';
5856 if (C4::Context->preference("IndependantBranches")) { $prefvalue = 'homeorholdingbranch';}
5857 $dbh->do("INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES('AllowReturnToBranch', '$prefvalue', 'Where an item may be returned', 'anywhere|homebranch|holdingbranch|homeorholdingbranch', 'Choice');");
5859 print "Upgrade to $DBversion done: adding AllowReturnToBranch syspref (bug 6151)";
5860 SetVersion($DBversion);
5863 $DBversion = "3.09.00.048";
5864 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
5865 $dbh->do("ALTER TABLE authorised_values MODIFY lib varchar(200)");
5866 $dbh->do("ALTER TABLE authorised_values MODIFY lib_opac varchar(200)");
5868 print "Upgrade to $DBversion done (Raise the length of Authorised Values descriptions)\n";
5869 SetVersion($DBversion);
5872 $DBversion ="3.09.00.049";
5873 if(C4::Context->preference("Version") < TransformToNum($DBversion) ) {
5874 $dbh->do("INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES('OPACMobileUserCSS','','Include the following CSS for the mobile view on all pages in the OPAC:',NULL,'free');");
5875 $dbh->do("INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES('OpacMainUserBlockMobile','','Show the following HTML in its own column on the main page of the OPAC (mobile version):',NULL,'free');");
5876 $dbh->do("INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES('OpacShowLibrariesPulldownMobile','1','Show the libraries pulldown on the mobile version of the OPAC.',NULL,'YesNo');");
5877 $dbh->do("INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES('OpacShowFiltersPulldownMobile','1','Show the search filters pulldown on the mobile version of the OPAC.',NULL,'YesNo');");
5878 print "Upgrade to $DBversion done (Add OPACMobileUserCSS, OpacMainUserBlockMobile, OpacShowLibrariesPulldownMobile and OpacShowFiltersPulldownMobile sysprefs)\n";
5879 SetVersion($DBversion);
5882 $DBversion = "3.09.00.050";
5883 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
5884 $dbh->do("ALTER TABLE authorised_values MODIFY category varchar(16) NOT NULL DEFAULT '';");
5885 $dbh->do("INSERT INTO authorised_values (category, authorised_value, lib) VALUES
5886 ('REPORT_GROUP', 'CIRC', 'Circulation'),
5887 ('REPORT_GROUP', 'CAT', 'Catalog'),
5888 ('REPORT_GROUP', 'PAT', 'Patrons'),
5889 ('REPORT_GROUP', 'ACQ', 'Acquisitions'),
5890 ('REPORT_GROUP', 'ACC', 'Accounts');");
5892 $dbh->do("ALTER TABLE reports_dictionary ADD report_area varchar(6) DEFAULT NULL;");
5893 $dbh->do("UPDATE reports_dictionary SET report_area = CASE area
5900 $dbh->do("ALTER TABLE reports_dictionary DROP area;");
5901 $dbh->do("ALTER TABLE reports_dictionary ADD KEY dictionary_area_idx (report_area);");
5903 $dbh->do("ALTER TABLE saved_sql ADD report_area varchar(6) DEFAULT NULL;");
5904 $dbh->do("ALTER TABLE saved_sql ADD report_group varchar(80) DEFAULT NULL;");
5905 $dbh->do("ALTER TABLE saved_sql ADD report_subgroup varchar(80) DEFAULT NULL;");
5906 $dbh->do("ALTER TABLE saved_sql ADD KEY sql_area_group_idx (report_group, report_subgroup);");
5908 print "Upgrade to $DBversion done saved_sql new fields report_group and report_area; authorised_values.category 16 char \n";
5909 SetVersion($DBversion);
5912 $DBversion = "3.09.00.051";
5913 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
5915 CREATE TABLE aqinvoices (
5916 invoiceid int(11) NOT NULL AUTO_INCREMENT,
5917 invoicenumber mediumtext NOT NULL,
5918 booksellerid int(11) NOT NULL,
5919 shipmentdate date default NULL,
5920 billingdate date default NULL,
5921 closedate date default NULL,
5922 shipmentcost decimal(28,6) default NULL,
5923 shipmentcost_budgetid int(11) default NULL,
5924 PRIMARY KEY (invoiceid),
5925 CONSTRAINT aqinvoices_fk_aqbooksellerid FOREIGN KEY (booksellerid) REFERENCES aqbooksellers (id) ON DELETE CASCADE ON UPDATE CASCADE,
5926 CONSTRAINT aqinvoices_fk_shipmentcost_budgetid FOREIGN KEY (shipmentcost_budgetid) REFERENCES aqbudgets (budget_id) ON DELETE SET NULL ON UPDATE CASCADE
5927 ) ENGINE=InnoDB DEFAULT CHARSET=utf8
5930 # Fill this new table with existing invoices
5931 my $sth = $dbh->prepare("
5932 SELECT aqorders.booksellerinvoicenumber AS invoicenumber, aqbasket.booksellerid, aqorders.datereceived
5934 LEFT JOIN aqbasket ON aqorders.basketno = aqbasket.basketno
5935 WHERE aqorders.booksellerinvoicenumber IS NOT NULL
5936 AND aqorders.booksellerinvoicenumber != ''
5937 GROUP BY aqorders.booksellerinvoicenumber
5940 my $results = $sth->fetchall_arrayref({});
5941 $sth = $dbh->prepare("
5942 INSERT INTO aqinvoices (invoicenumber, booksellerid, shipmentdate) VALUES (?,?,?)
5944 foreach(@$results) {
5945 $sth->execute($_->{invoicenumber}, $_->{booksellerid}, $_->{datereceived});
5948 # Add the column in aqorders, fill it with correct value
5949 # and then drop booksellerinvoicenumber column
5951 ALTER TABLE aqorders
5952 ADD COLUMN invoiceid int(11) default NULL AFTER booksellerinvoicenumber,
5953 ADD CONSTRAINT aqorders_ibfk_3 FOREIGN KEY (invoiceid) REFERENCES aqinvoices (invoiceid) ON DELETE SET NULL ON UPDATE CASCADE
5957 UPDATE aqorders, aqinvoices
5958 SET aqorders.invoiceid = aqinvoices.invoiceid
5959 WHERE aqorders.booksellerinvoicenumber = aqinvoices.invoicenumber
5963 ALTER TABLE aqorders
5964 DROP COLUMN booksellerinvoicenumber
5967 print "Upgrade to $DBversion done (Add aqinvoices table) \n";
5968 SetVersion ($DBversion);
5971 $DBversion = "3.09.00.052";
5972 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
5973 $dbh->do("INSERT INTO systempreferences (variable,value,options,explanation,type) VALUES ('decreaseLoanHighHolds', NULL, '', 'Decreases the loan period for items with number of holds above the threshold specified in decreaseLoanHighHoldsValue', 'YesNo');");
5974 $dbh->do("INSERT INTO systempreferences (variable,value,options,explanation,type) VALUES ('decreaseLoanHighHoldsValue', NULL, '', 'Specifies a threshold for the minimum number of holds needed to trigger a reduction in loan duration (used with decreaseLoanHighHolds)', 'Integer');");
5975 $dbh->do("INSERT INTO systempreferences (variable,value,options,explanation,type) VALUES ('decreaseLoanHighHoldsDuration', NULL, '', 'Specifies a number of days that a loan is reduced to when used in conjunction with decreaseLoanHighHolds', 'Integer');");
5976 print "Upgrade to $DBversion done (Add systempreferences to decrease loan length on high demand items decreaseLoanHighHolds, decreaseLoanHighHoldsValue and decreaseLoanHighHoldsDuration) \n";
5977 SetVersion ($DBversion);
5980 $DBversion = "3.09.00.053";
5981 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
5983 q|CREATE TABLE `import_auths` (
5984 import_record_id int(11) NOT NULL,
5985 matched_authid int(11) default NULL,
5986 control_number varchar(25) default NULL,
5987 authorized_heading varchar(128) default NULL,
5988 original_source varchar(25) default NULL,
5989 CONSTRAINT import_auths_ibfk_1 FOREIGN KEY (import_record_id)
5990 REFERENCES import_records (import_record_id) ON DELETE CASCADE ON UPDATE CASCADE,
5991 KEY matched_authid (matched_authid)
5992 ) ENGINE=InnoDB DEFAULT CHARSET=utf8;|
5994 $dbh->do("ALTER TABLE import_batches
5995 CHANGE COLUMN num_biblios num_records int(11) NOT NULL default 0,
5996 ADD COLUMN record_type enum('biblio', 'auth', 'holdings') NOT NULL default 'biblio'");
5997 $dbh->do("UPDATE import_batches SET record_type='auth' WHERE import_batch_id IN
5998 (SELECT import_batch_id FROM import_records WHERE record_type='auth')");
6000 print "Upgrade to $DBversion done (Added support for staging authorities)\n";
6001 SetVersion ($DBversion);
6004 $DBversion = "3.09.00.054";
6005 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
6006 $dbh->do("ALTER TABLE aqorders CHANGE COLUMN gst gstrate DECIMAL(6,4) DEFAULT NULL");
6007 print "Upgrade to $DBversion done (Change column name in aqorders gst --> gstrate)\n";
6008 SetVersion($DBversion);
6011 $DBversion = "3.09.00.055";
6012 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
6013 $dbh->do("ALTER TABLE aqorders ADD discount float(6,4) DEFAULT NULL AFTER gstrate");
6014 print "Upgrade to $DBversion done (Add discount field in aqorders table)\n";
6015 SetVersion($DBversion);
6018 $DBversion ="3.09.00.056";
6019 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
6020 $dbh->do("INSERT IGNORE INTO systempreferences (variable,value,explanation,options,type) VALUES('AuthDisplayHierarchy','0','Display authority hierarchies','','YesNo')");
6021 print "Upgrade to $DBversion done (Add system preference AuthDisplayHierarchy)\n";
6022 SetVersion($DBversion);
6025 $DBversion = "3.09.00.057";
6026 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
6027 $dbh->do("ALTER TABLE aqbasket ADD deliveryplace VARCHAR(10) default NULL AFTER basketgroupid;");
6028 $dbh->do("ALTER TABLE aqbasket ADD billingplace VARCHAR(10) default NULL AFTER deliveryplace;");
6029 print "Upgrade to $DBversion done (Bug 5356: Added billingplace, deliveryplace to the aqbasket table)\n";
6030 SetVersion($DBversion);
6033 $DBversion ="3.09.00.058";
6034 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
6035 $dbh->do("INSERT INTO systempreferences (variable,value,explanation,type) VALUES('OPACdidyoumean',NULL,'Did you mean? configuration for the OPAC. Do not change, as this is controlled by /cgi-bin/koha/admin/didyoumean.pl.','Free');");
6036 $dbh->do("INSERT INTO systempreferences (variable,value,explanation,type) VALUES('INTRAdidyoumean',NULL,'Did you mean? configuration for the Intranet. Do not change, as this is controlled by /cgi-bin/koha/admin/didyoumean.pl.','Free');");
6037 print "Upgrade to $DBversion done (Add Did You Mean? configuration)\n";
6038 SetVersion($DBversion);
6041 $DBversion ="3.09.00.059";
6042 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
6043 $dbh->do("INSERT INTO systempreferences (variable, value, options, explanation, type) VALUES ('BlockReturnOfWithdrawnItems', '1', '0', 'If enabled, items that are marked as withdrawn cannot be returned.', 'YesNo');");
6044 print "Upgrade to $DBversion done (Add system preference BlockReturnOfWithdrawnItems)\n";
6045 SetVersion($DBversion);
6048 $DBversion = "3.09.00.060";
6049 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
6050 $dbh->do("INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES('HoldsToPullStartDate','2','Set the default start date for the Holds to pull list to this many days ago',NULL,'Integer')");
6051 print "Upgrade to $DBversion done (Added HoldsToPullStartDate syspref)\n";
6052 SetVersion($DBversion);
6055 $DBversion = "3.09.00.061";
6056 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
6057 $dbh->do("UPDATE systempreferences set value=0 WHERE variable='OPACItemsResultsDisplay' AND value='statuses'");
6058 $dbh->do("UPDATE systempreferences set value=1 WHERE variable='OPACItemsResultsDisplay' AND value='itemdetails'");
6059 $dbh->do("UPDATE systempreferences SET explanation='If No, show only the status of items in result list. If Yes, show full location of items (branchlocation+callnumber) as in staff interface',options=NULL,type='YesNo' WHERE variable='OPACItemsResultsDisplay'");
6060 print "Upgrade to $DBversion done (Fixes Bug 5409, Set the syspref value to 1 if it is itemdetails and 0 if it is statuses, leaving it alone if it is already 1 or 0 and change the type of the syspref to YesNo.)\n";
6061 SetVersion ($DBversion);
6064 $DBversion = "3.09.00.062";
6065 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
6066 $dbh->do("UPDATE systempreferences SET value=0 WHERE variable='NoZebra'");
6067 $dbh->do("UPDATE systempreferences SET value=0 WHERE variable='QueryRemoveStopwords'");
6068 print "Upgrade to $DBversion done (Disable obsolete NoZebra and QueryRemoveStopwords sysprefs)\n";
6069 SetVersion ($DBversion);
6072 $DBversion = "3.09.00.063";
6073 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
6074 my $gst_booksellers = $dbh->selectcol_arrayref("SELECT DISTINCT(gstrate) FROM aqbooksellers");
6075 my $gist_syspref = C4::Context->preference("gist");
6076 # remove the undef values and construct and array with the syspref and the supplier values
6077 my @gstrates = map { defined $_ ? $_ : () } @$gst_booksellers;
6078 push @gstrates, split ('\|', $gist_syspref);
6079 # we want to compare integer (or float)
6080 $_ = $_ + 0 for @gstrates;
6081 use List::MoreUtils qw/uniq/;
6082 # remove duplicate values
6083 @gstrates = uniq sort @gstrates;
6084 my $new_syspref_value = join '|', @gstrates;
6085 # update the syspref with the new values
6086 my $sth = $dbh->prepare("UPDATE systempreferences set value=? WHERE variable='gist'");
6087 $sth->execute( $new_syspref_value );
6089 print "Upgrade to $DBversion done (Bug 8832, Set the syspref gist with the existing values)\n";
6090 SetVersion ($DBversion);
6093 $DBversion = "3.09.00.064";
6094 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
6095 $dbh->do('ALTER TABLE items ADD coded_location_qualifier varchar(10) default NULL AFTER itemcallnumber');
6096 print "Upgrade to $DBversion done (Bug 6428: Added coded_location_qualifier to the items table)\n";
6097 SetVersion ($DBversion);
6100 $DBversion = "3.09.00.065";
6101 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
6102 $dbh->do('ALTER TABLE deleteditems ADD coded_location_qualifier varchar(10) default NULL AFTER itemcallnumber');
6103 print "Upgrade to $DBversion done (Bug 6428: Added coded_location_qualifier to the deleteditems table)\n";
6104 SetVersion ($DBversion);
6107 $DBversion = "3.09.00.066";
6108 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
6109 $dbh->do("DELETE FROM systempreferences WHERE variable='DidYouMeanFromAuthorities'");
6110 print "Upgrade to $DBversion done (Bug 9107: remove DidYouMeanFromAuthorities syspref)\n";
6111 SetVersion ($DBversion);
6114 $DBversion = "3.09.00.067";
6115 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
6116 $dbh->do("ALTER TABLE statistics CHANGE COLUMN ccode ccode varchar(10) NULL");
6117 print "Upgrade to $DBversion done (Bug 9064: statistics.ccode potentially wrongly defined)\n";
6118 SetVersion ($DBversion);
6121 $DBversion = "3.10.00.00";
6122 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
6123 print "Upgrade to $DBversion done (release tag)\n";
6124 SetVersion ($DBversion);
6127 $DBversion = "3.11.00.001";
6128 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
6129 $dbh->do("INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES('alphabet','A B C D E F G H I J K L M N O P Q R S T U V W X Y Z','Alphabet that can be expanded into browse links, e.g. on Home > Patrons',NULL,'free')");
6130 print "Upgrade to $DBversion done (Bug 2832 - Add alphabet syspref)\n";
6133 $DBversion = "3.11.00.002";
6134 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
6136 DELETE from aqorders_items where ordernumber NOT IN (SELECT ordernumber FROM aqorders);
6139 ALTER TABLE aqorders_items
6140 ADD CONSTRAINT aqorders_items_ibfk_1 FOREIGN KEY (ordernumber) REFERENCES aqorders (ordernumber)
6141 ON DELETE CASCADE ON UPDATE CASCADE;
6143 print "Upgrade to $DBversion done (Bug 9030: Add constraint on aqorders_items.ordernumber)\n";
6144 SetVersion ($DBversion);
6147 $DBversion = "3.11.00.003";
6148 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
6149 $dbh->do("INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES('RefundLostItemFeeOnReturn', '1', 'If enabled, the lost item fee charged to a borrower will be refunded when the lost item is returned.', NULL, 'YesNo')");
6150 print "Upgrade to $DBversion done (Bug 7189: Add system preference RefundLostItemFeeOnReturn)\n";
6151 SetVersion($DBversion);
6154 $DBversion = "3.11.00.004";
6155 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
6157 ALTER TABLE subscription ADD COLUMN closed INT(1) NOT NULL DEFAULT 0 AFTER enddate;
6160 print "Upgrade to $DBversion done (Bug 8782: Add field subscription.closed)\n";
6161 SetVersion($DBversion);
6164 $DBversion = "3.11.00.005";
6165 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
6166 $dbh->do(qq{CREATE TABLE borrower_attribute_types_branches(bat_code VARCHAR(10), b_branchcode VARCHAR(10),FOREIGN KEY (bat_code) REFERENCES borrower_attribute_types(code) ON DELETE CASCADE,FOREIGN KEY (b_branchcode) REFERENCES branches(branchcode) ON DELETE CASCADE ) ENGINE=INNODB DEFAULT CHARSET=utf8;});
6168 $dbh->do(qq{CREATE TABLE categories_branches(categorycode VARCHAR(10), branchcode VARCHAR(10), FOREIGN KEY (categorycode) REFERENCES categories(categorycode) ON DELETE CASCADE, FOREIGN KEY (branchcode) REFERENCES branches(branchcode) ON DELETE CASCADE ) ENGINE=INNODB DEFAULT CHARSET=utf8;});
6170 $dbh->do(qq{CREATE TABLE authorised_values_branches(av_id INTEGER, branchcode VARCHAR(10), FOREIGN KEY (av_id) REFERENCES authorised_values(id) ON DELETE CASCADE, FOREIGN KEY (branchcode) REFERENCES branches(branchcode) ON DELETE CASCADE ) ENGINE=INNODB DEFAULT CHARSET=utf8;});
6172 print "Upgrade to $DBversion done (Bug 7919: Display of values depending on the connexion library)\n";
6173 SetVersion($DBversion);
6176 $DBversion = "3.11.00.006";
6177 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
6179 UPDATE virtualshelves SET sortfield="copyrightdate" where sortfield="year";
6181 print "Upgrade to $DBversion done (Bug 9167: Update the virtualshelves.sortfield column with 'copyrightdate' if needed)\n";
6182 SetVersion($DBversion);
6185 $DBversion = "3.11.00.007";
6186 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
6187 $dbh->do("INSERT INTO language_descriptions (subtag, type, lang, description) VALUES( 'ar', 'language', 'de', 'Arabisch')");
6188 $dbh->do("INSERT INTO language_descriptions (subtag, type, lang, description) VALUES( 'hy', 'language', 'de', 'Armenisch')");
6189 $dbh->do("INSERT INTO language_descriptions (subtag, type, lang, description) VALUES( 'bg', 'language', 'de', 'Bulgarisch')");
6190 $dbh->do("INSERT INTO language_descriptions (subtag, type, lang, description) VALUES( 'zh', 'language', 'de', 'Chinesisch')");
6191 $dbh->do("INSERT INTO language_descriptions (subtag, type, lang, description) VALUES( 'cs', 'language', 'de', 'Tschechisch')");
6192 $dbh->do("INSERT INTO language_descriptions (subtag, type, lang, description) VALUES( 'da', 'language', 'de', 'Dänisch')");
6193 $dbh->do("INSERT INTO language_descriptions (subtag, type, lang, description) VALUES( 'nl', 'language', 'de', 'Niederländisch')");
6194 $dbh->do("INSERT INTO language_descriptions (subtag, type, lang, description) VALUES( 'en', 'language', 'de', 'Englisch')");
6195 $dbh->do("INSERT INTO language_descriptions (subtag, type, lang, description) VALUES( 'fi', 'language', 'de', 'Finnisch')");
6196 $dbh->do("INSERT INTO language_descriptions (subtag, type, lang, description) VALUES( 'fr', 'language', 'de', 'Französisch')");
6197 $dbh->do("INSERT INTO language_descriptions (subtag, type, lang, description) VALUES( 'lo', 'language', 'fr', 'Laotien')");
6198 $dbh->do("INSERT INTO language_descriptions (subtag, type, lang, description) VALUES( 'lo', 'language', 'de', 'Laotisch')");
6199 $dbh->do("INSERT INTO language_descriptions (subtag, type, lang, description) VALUES( 'el', 'language', 'de', 'Griechisch (Nach 1453)')");
6200 $dbh->do("INSERT INTO language_descriptions (subtag, type, lang, description) VALUES( 'he', 'language', 'de', 'Hebräisch')");
6201 $dbh->do("INSERT INTO language_descriptions (subtag, type, lang, description) VALUES( 'hi', 'language', 'de', 'Hindi')");
6202 $dbh->do("INSERT INTO language_descriptions (subtag, type, lang, description) VALUES( 'hu', 'language', 'de', 'Ungarisch')");
6203 $dbh->do("INSERT INTO language_descriptions (subtag, type, lang, description) VALUES( 'id', 'language', 'de', 'Indonesisch')");
6204 $dbh->do("INSERT INTO language_descriptions (subtag, type, lang, description) VALUES( 'it', 'language', 'de', 'Italienisch')");
6205 $dbh->do("INSERT INTO language_descriptions (subtag, type, lang, description) VALUES( 'ja', 'language', 'de', 'Japanisch')");
6206 $dbh->do("INSERT INTO language_descriptions (subtag, type, lang, description) VALUES( 'ko', 'language', 'de', 'Koreanisch')");
6207 $dbh->do("INSERT INTO language_descriptions (subtag, type, lang, description) VALUES( 'la', 'language', 'de', 'Latein')");
6208 $dbh->do("INSERT INTO language_descriptions (subtag, type, lang, description) VALUES( 'gl', 'language', 'fr', 'Galicien')");
6209 $dbh->do("INSERT INTO language_descriptions (subtag, type, lang, description) VALUES( 'gl', 'language', 'de', 'Galizisch')");
6210 $dbh->do("INSERT INTO language_descriptions (subtag, type, lang, description) VALUES( 'nb', 'language', 'de', 'Norwegisch bokmål')");
6211 $dbh->do("INSERT INTO language_descriptions (subtag, type, lang, description) VALUES( 'nn', 'language', 'de', 'Norwegisch nynorsk')");
6212 $dbh->do("INSERT INTO language_descriptions (subtag, type, lang, description) VALUES( 'fa', 'language', 'de', 'Persisch')");
6213 $dbh->do("INSERT INTO language_descriptions (subtag, type, lang, description) VALUES( 'pl', 'language', 'de', 'Polnisch')");
6214 $dbh->do("INSERT INTO language_descriptions (subtag, type, lang, description) VALUES( 'pt', 'language', 'de', 'Portugiesisch')");
6215 $dbh->do("INSERT INTO language_descriptions (subtag, type, lang, description) VALUES( 'ro', 'language', 'de', 'Rumänisch')");
6216 $dbh->do("INSERT INTO language_descriptions (subtag, type, lang, description) VALUES( 'ru', 'language', 'de', 'Russisch')");
6217 $dbh->do("INSERT INTO language_descriptions (subtag, type, lang, description) VALUES( 'sr', 'language', 'fr', 'Serbe')");
6218 $dbh->do("INSERT INTO language_descriptions (subtag, type, lang, description) VALUES( 'sr', 'language', 'de', 'Serbisch')");
6219 $dbh->do("INSERT INTO language_descriptions (subtag, type, lang, description) VALUES( 'es', 'language', 'de', 'Spanisch')");
6220 $dbh->do("INSERT INTO language_descriptions (subtag, type, lang, description) VALUES( 'sv', 'language', 'de', 'Schwedisch')");
6221 $dbh->do("INSERT INTO language_descriptions (subtag, type, lang, description) VALUES( 'tet', 'language', 'fr', 'Tétoum')");
6222 $dbh->do("INSERT INTO language_descriptions (subtag, type, lang, description) VALUES( 'tet', 'language', 'de', 'Tetum')");
6223 $dbh->do("INSERT INTO language_descriptions (subtag, type, lang, description) VALUES( 'th', 'language', 'de', 'Thailändisch')");
6224 $dbh->do("INSERT INTO language_descriptions (subtag, type, lang, description) VALUES( 'tr', 'language', 'de', 'Türkisch')");
6225 $dbh->do("INSERT INTO language_descriptions (subtag, type, lang, description) VALUES( 'uk', 'language', 'de', 'Ukrainisch')");
6226 $dbh->do("INSERT INTO language_descriptions (subtag, type, lang, description) VALUES( 'ur', 'language', 'fr', 'Ourdou')");
6227 $dbh->do("INSERT INTO language_descriptions (subtag, type, lang, description) VALUES( 'ur', 'language', 'de', 'Urdu')");
6228 print "Upgrade to $DBversion done (Bug 9056: add German and a couple of French translations to language_descriptions)\n";
6229 SetVersion ($DBversion);
6232 $DBversion = "3.11.00.008";
6233 if (CheckVersion($DBversion)) {
6235 CREATE TABLE IF NOT EXISTS `borrower_modifications` (
6236 `timestamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
6237 `verification_token` varchar(255) NOT NULL DEFAULT '',
6238 `borrowernumber` int(11) NOT NULL DEFAULT '0',
6239 `cardnumber` varchar(16) DEFAULT NULL,
6240 `surname` mediumtext,
6243 `othernames` mediumtext,
6245 `streetnumber` varchar(10) DEFAULT NULL,
6246 `streettype` varchar(50) DEFAULT NULL,
6247 `address` mediumtext,
6251 `zipcode` varchar(25) DEFAULT NULL,
6255 `mobile` varchar(50) DEFAULT NULL,
6259 `B_streetnumber` varchar(10) DEFAULT NULL,
6260 `B_streettype` varchar(50) DEFAULT NULL,
6261 `B_address` varchar(100) DEFAULT NULL,
6263 `B_city` mediumtext,
6265 `B_zipcode` varchar(25) DEFAULT NULL,
6268 `B_phone` mediumtext,
6269 `dateofbirth` date DEFAULT NULL,
6270 `branchcode` varchar(10) DEFAULT NULL,
6271 `categorycode` varchar(10) DEFAULT NULL,
6272 `dateenrolled` date DEFAULT NULL,
6273 `dateexpiry` date DEFAULT NULL,
6274 `gonenoaddress` tinyint(1) DEFAULT NULL,
6275 `lost` tinyint(1) DEFAULT NULL,
6276 `debarred` date DEFAULT NULL,
6277 `debarredcomment` varchar(255) DEFAULT NULL,
6278 `contactname` mediumtext,
6279 `contactfirstname` text,
6280 `contacttitle` text,
6281 `guarantorid` int(11) DEFAULT NULL,
6282 `borrowernotes` mediumtext,
6283 `relationship` varchar(100) DEFAULT NULL,
6284 `ethnicity` varchar(50) DEFAULT NULL,
6285 `ethnotes` varchar(255) DEFAULT NULL,
6286 `sex` varchar(1) DEFAULT NULL,
6287 `password` varchar(30) DEFAULT NULL,
6288 `flags` int(11) DEFAULT NULL,
6289 `userid` varchar(75) DEFAULT NULL,
6290 `opacnote` mediumtext,
6291 `contactnote` varchar(255) DEFAULT NULL,
6292 `sort1` varchar(80) DEFAULT NULL,
6293 `sort2` varchar(80) DEFAULT NULL,
6294 `altcontactfirstname` varchar(255) DEFAULT NULL,
6295 `altcontactsurname` varchar(255) DEFAULT NULL,
6296 `altcontactaddress1` varchar(255) DEFAULT NULL,
6297 `altcontactaddress2` varchar(255) DEFAULT NULL,
6298 `altcontactaddress3` varchar(255) DEFAULT NULL,
6299 `altcontactstate` text,
6300 `altcontactzipcode` varchar(50) DEFAULT NULL,
6301 `altcontactcountry` text,
6302 `altcontactphone` varchar(50) DEFAULT NULL,
6303 `smsalertnumber` varchar(50) DEFAULT NULL,
6304 `privacy` int(11) DEFAULT NULL,
6305 PRIMARY KEY (`verification_token`,`borrowernumber`),
6306 KEY `verification_token` (`verification_token`),
6307 KEY `borrowernumber` (`borrowernumber`)
6308 ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
6312 INSERT INTO systempreferences (`variable`, `value`, `options`, `explanation`, `type`) VALUES
6313 ('PatronSelfRegistration', '0', NULL, 'If enabled, patrons will be able to register themselves via the OPAC.', 'YesNo'),
6314 ('PatronSelfRegistrationVerifyByEmail', '0', NULL, 'If enabled, any patron attempting to register themselves via the OPAC will be required to verify themselves via email to activate his or her account.', 'YesNo'),
6315 ('PatronSelfRegistrationDefaultCategory', '', '', 'A patron registered via the OPAC will receive a borrower category code set in this system preference.', 'free'),
6316 ('PatronSelfRegistrationExpireTemporaryAccountsDelay', '0', NULL, 'If PatronSelfRegistrationDefaultCategory is enabled, this system preference controls how long a patron can have a temporary status before the account is deleted automatically. It is an integer value representing a number of days to wait before deleting a temporary patron account. Setting it to 0 disables the deleting of temporary accounts.', 'Integer'),
6317 ('PatronSelfRegistrationBorrowerMandatoryField', 'surname|firstname', NULL , 'Choose the mandatory fields for a patron''s account, when registering via the OPAC.', 'free'),
6318 ('PatronSelfRegistrationBorrowerUnwantedField', '', NULL , 'Name the fields you don''t want to display when registering a new patron via the OPAC.', 'free');
6322 INSERT INTO letter ( `module`, `code`, `branchcode`, `name`, `is_html`, `title`, `content` )
6323 VALUES ( 'members', 'OPAC_REG_VERIFY', '', 'Opac Self-Registration Verification Email', '1', 'Verify Your Account', 'Hello!
6325 Your library account has been created. Please verify your email address by clicking this link to complete the signup process:
6327 http://<<OPACBaseURL>>/cgi-bin/koha/opac-registration-verify.pl?token=<<borrower_modifications.verification_token>>
6329 If you did not initiate this request, you may safely ignore this one-time message. The request will expire shortly.'
6332 print "Upgrade to $DBversion done (Bug 7067: Add Patron Self Registration)\n";
6333 SetVersion ($DBversion);
6336 $DBversion = "3.11.00.009";
6337 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
6339 INSERT IGNORE INTO systempreferences (variable,value,explanation,options,type) VALUES
6340 ('SeparateHoldings', '0', 'Separate current branch holdings from other holdings', NULL, 'YesNo'),
6341 ('SeparateHoldingsBranch', 'homebranch', 'Branch used to separate holdings', 'homebranch|holdingbranch', 'Choice'),
6342 ('OpacSeparateHoldings', '0', 'Separate current branch holdings from other holdings (OPAC)', NULL, 'YesNo'),
6343 ('OpacSeparateHoldingsBranch', 'homebranch', 'Branch used to separate holdings (OPAC)', 'homebranch|holdingbranch', 'Choice')
6346 print "Upgrade to $DBversion done (Bug 7674: Add systempreferences SeparateHoldings, SeparateHoldingsBranch, OpacSeparateHoldings and OpacSeparateHoldingsBranch) \n";
6347 SetVersion ($DBversion);
6350 $DBversion = "3.11.00.010";
6351 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
6352 $dbh->do("INSERT INTO systempreferences (variable,value,options,explanation,type) VALUES('RenewalSendNotice', '0', '', NULL, 'YesNo')");
6354 INSERT INTO `letter` (`module`, `code`, `name`, `title`, `content`) VALUES
6355 ('circulation','RENEWAL','Item Renewals','Item Renewals','The following items have been renewed:\r\n----\r\n<<biblio.title>>\r\n----\r\nThank you for visiting <<branches.branchname>>.');
6357 print "Upgrade to $DBversion done (Bug 9151 - Renewal notice according to patron alert preferences)\n";
6358 SetVersion($DBversion);
6361 $DBversion = "3.11.00.011";
6362 if ( CheckVersion($DBversion) ) {
6363 $dbh->do("INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES('HTML5MediaEnabled','not','Show a HTML5 media player in a tab on opac-detail.pl for media files catalogued in field 856.','not|opac|staff|both','Choice');");
6364 $dbh->do("INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES('HTML5MediaExtensions','webm|ogg|ogv|oga|vtt','Media file extensions','','free');");
6365 print "Upgrade to $DBversion done (Bug 8377: Add HTML5MediaEnabled and HTML5MediaExtensions sysprefs)\n";
6366 SetVersion ($DBversion);
6369 $DBversion = "3.11.00.012";
6370 if ( CheckVersion($DBversion) ) {
6371 $dbh->do("INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES('AllowHoldsOnPatronsPossessions', '1', 'Allow holds on records that patron have items of it',NULL,'YesNo')");
6372 print "Upgrade to $DBversion done (Bug 9206: Only allow place holds in records that the patron don't have in his possession)\n";
6373 SetVersion($DBversion);
6376 $DBversion = "3.11.00.013";
6377 if ( CheckVersion($DBversion) ) {
6378 $dbh->do("INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES('NotesBlacklist','','List of notes fields that should not appear in the title notes/description separator of details',NULL,'free')");
6379 print "Upgrade to $DBversion done (Bug 9162 - Add a system preference to set which notes fields appears on title notes/description separator)\n";
6380 SetVersion($DBversion);
6383 $DBversion = "3.11.00.014";
6384 if ( CheckVersion($DBversion) ) {
6385 $dbh->do("INSERT INTO systempreferences ( variable, value, explanation, type ) VALUES ( 'SCOUserCSS', '', 'Add CSS to be included in the SCO module in an embedded <style> tag.', 'free' )");
6386 $dbh->do("INSERT INTO systempreferences ( variable, value, explanation, type ) VALUES ( 'SCOUserJS', '', 'Define custom javascript for inclusion in the SCO module', 'free' )");
6387 print "Upgrade to $DBversion done (Bug 9009: Add SCOUserCSS and SCOUserJS sysprefs)\n";
6390 $DBversion = "3.11.00.015";
6391 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
6392 $dbh->do("INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES ('RentalsInNoissuesCharge', '1', 'Rental charges block checkouts (added to noissuescharge).',NULL,'YesNo');");
6393 $dbh->do("INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES ('ManInvInNoissuesCharge', '1', 'MANUAL_INV charges block checkouts (added to noissuescharge).',NULL,'YesNo');");
6394 print "Upgrade to $DBversion done (Add sysprefs RentalsInNoissuesCharge and ManInvInNoissuesCharge.)\n";
6395 SetVersion($DBversion);
6398 $DBversion = "3.11.00.016";
6399 if ( CheckVersion($DBversion) ) {
6401 UPDATE userflags SET flagdesc="<b>Required for staff login.</b> Staff access, allows viewing of catalogue in staff client." where flagdesc="Modify login / permissions for staff users";
6404 UPDATE userflags SET flagdesc="Edit Authorities" where flagdesc="Allow to edit authorities";
6407 UPDATE userflags SET flagdesc="Allow access to the reports module" where flagdesc="Allow to access to the reports module";
6410 UPDATE userflags SET flagdesc="Set library management parameters (deprecated)" where flagdesc="Set library management parameters";
6413 UPDATE userflags SET flagdesc="Manage serial subscriptions" where flagdesc="Allow to manage serials subscriptions";
6416 UPDATE userflags SET flagdesc="Manage patrons fines and fees" where flagdesc="Update borrower charges";
6419 UPDATE userflags SET flagdesc="Check out and check in items" where flagdesc="Circulate books";
6422 UPDATE userflags SET flagdesc="Manage Koha system settings (Administration panel)" where flagdesc="Set Koha system parameters";
6425 UPDATE userflags SET flagdesc="Add or modify patrons" where flagdesc="Add or modify borrowers";
6428 UPDATE userflags SET flagdesc="Use all tools (expand for granular tools permissions)" where flagdesc="Use tools (export, import, barcodes)";
6431 UPDATE userflags SET flagdesc="Allow staff members to modify permissions for other staff members" where flagdesc="Set user permissions";
6434 UPDATE permissions SET description="Perform batch modification of patrons" where description="Perform batch modifivation of patrons";
6437 print "Upgrade to $DBversion done (Bug 9382 (updated with bug 9745) - refresh permission descriptions to make more sense)\n";
6438 SetVersion ($DBversion);
6441 $DBversion ="3.11.00.017";
6442 if ( CheckVersion($DBversion) ) {
6443 $dbh->do("INSERT IGNORE INTO systempreferences (variable,value,explanation,options,type) VALUES('IDreamBooksReviews','0','Display book review snippets from IDreamBooks.com','','YesNo');");
6444 $dbh->do("INSERT IGNORE INTO systempreferences (variable,value,explanation,options,type) VALUES('IDreamBooksReadometer','0','Display Readometer from IDreamBooks.com','','YesNo');");
6445 $dbh->do("INSERT IGNORE INTO systempreferences (variable,value,explanation,options,type) VALUES('IDreamBooksResults','0','Display IDreamBooks.com rating in search results','','YesNo');");
6446 print "Upgrade to $DBversion done (Add IDreamBooks enhanced content)\n";
6447 SetVersion($DBversion);
6450 $DBversion = "3.11.00.018";
6451 if ( CheckVersion($DBversion) ) {
6452 $dbh->do("INSERT INTO systempreferences (variable,value,options,explanation,type) VALUES ('OPACNumbersPreferPhrase','0', NULL, 'Control the use of phr operator in callnumber and standard number OPAC searches', 'YesNo')");
6453 $dbh->do("INSERT INTO systempreferences (variable,value,options,explanation,type) VALUES ('IntranetNumbersPreferPhrase','0', NULL, 'Control the use of phr operator in callnumber and standard number staff client searches', 'YesNo')");
6454 print "Upgrade to $DBversion done (Bug 9395: Problem with callnumber and standard number search in OPAC and Staff Client)\n";
6455 SetVersion ($DBversion);
6458 $DBversion = "3.11.00.019";
6459 if ( CheckVersion($DBversion) ) {
6460 $dbh->do("INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES ('UNIMARCAuthorityField100', 'afrey50 ba0', NULL, NULL, 'Textarea')");
6461 print "Upgrade to $DBversion done (Bug 9145 - Add syspref UNIMARCAuthorityField100)\n";
6462 SetVersion ($DBversion);
6465 $DBversion = "3.11.00.020";
6466 if ( CheckVersion($DBversion) ) {
6467 $dbh->do("INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES('UNIMARCField100Language', 'fre','UNIMARC field 100 default language',NULL,'short')");
6468 print "Upgrade to $DBversion done (Bug 8347 - Koha forces UNIMARC 100 field code language to 'fre')\n";
6469 SetVersion($DBversion);
6472 $DBversion ="3.11.00.021";
6473 if ( CheckVersion($DBversion) ) {
6474 $dbh->do("INSERT IGNORE INTO systempreferences (variable,value,explanation,options,type) VALUES('OPACPopupAuthorsSearch','0','Display the list of authors when clicking on one author.','','YesNo');");
6475 print "Upgrade to $DBversion done (Bug 5888 - Subject search pop-up for the OPAC)\n";
6476 SetVersion($DBversion);
6479 $DBversion = "3.11.00.022";
6480 if ( CheckVersion($DBversion) ) {
6482 "INSERT IGNORE INTO systempreferences (variable,value,explanation,options,type) VALUES('Persona',0,'Use Mozilla Persona for login','','YesNo')"
6484 print "Upgrade to $DBversion done (Bug 9587 - Allow login via Persona)\n";
6485 SetVersion($DBversion);
6488 $DBversion = "3.11.00.023";
6489 if ( CheckVersion($DBversion) ) {
6490 $dbh->do("UPDATE z3950servers SET host = 'lx2.loc.gov', port = 210, db = 'LCDB', syntax = 'USMARC', encoding = 'utf8' WHERE name = 'LIBRARY OF CONGRESS'");
6491 print "Upgrade to $DBversion done (Bug 9520 - Update default LOC Z39.50 target)\n";
6492 SetVersion($DBversion);
6495 $DBversion = "3.11.00.024";
6496 if ( CheckVersion($DBversion) ) {
6497 $dbh->do("INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES('OpacItemLocation','callnum','Show the shelving location of items in the opac','callnum|ccode|location','Choice');");
6498 print "Upgrade to $DBversion done (Bug 5079: Add OpacItemLocation syspref)\n";
6499 SetVersion ($DBversion);
6502 $DBversion = "3.11.00.025";
6503 if ( CheckVersion($DBversion) ) {
6505 "CREATE TABLE linktracker (
6506 id int(11) NOT NULL AUTO_INCREMENT,
6507 biblionumber int(11) DEFAULT NULL,
6508 itemnumber int(11) DEFAULT NULL,
6509 borrowernumber int(11) DEFAULT NULL,
6511 timeclicked datetime DEFAULT NULL,
6513 KEY bibidx (biblionumber),
6514 KEY itemidx (itemnumber),
6515 KEY borridx (borrowernumber),
6516 KEY dateidx (timeclicked)
6517 ) ENGINE=InnoDB DEFAULT CHARSET=utf8;"
6520 INSERT INTO systempreferences (variable,value,explanation,options,type)
6521 VALUES('TrackClicks','0','Track links clicked',NULL,'Integer')" );
6523 "Upgrade to $DBversion done (Adds feature Bug 8917, the ability to track links clicked)\n";
6524 SetVersion($DBversion);
6527 $DBversion = "3.11.00.026";
6528 if ( CheckVersion($DBversion) ) {
6530 ALTER TABLE import_records ADD INDEX batch_id_record_type ( import_batch_id, record_type );
6532 print "Upgrade to $DBversion done (Bug 9207: Add new index batch_id_record_type to import_records)\n";
6533 SetVersion($DBversion);
6536 $DBversion = "3.11.00.027";
6537 if ( CheckVersion($DBversion) ) {
6539 INSERT INTO permissions ( module_bit, code, description )
6540 VALUES ( '1', 'overdues_report', 'Execute overdue items report' )
6542 # add new permission for users with all report permissions and circulation remaining permission
6544 INSERT INTO user_permissions (borrowernumber, module_bit, code)
6545 SELECT user_permissions.borrowernumber, 1, 'overdues_report'
6546 FROM user_permissions
6547 LEFT JOIN borrowers USING(borrowernumber)
6548 WHERE borrowers.flags & (1 << 16)
6549 AND user_permissions.code = 'circulate_remaining_permissions'
6551 print "Upgrade to $DBversion done ( Add circ permission overdues_report )\n";
6552 SetVersion($DBversion);
6555 $DBversion = "3.11.00.028";
6556 if ( CheckVersion($DBversion) ) {
6557 $dbh->do("INSERT IGNORE INTO systempreferences (variable,value,options,explanation,type) VALUES ('PatronSelfRegistrationAdditionalInstructions', '', NULL , 'A free text field to display additional instructions to newly self registered patrons.', 'free' );");
6558 print "Upgrade to $DBversion done (Bug 9756 - Patron self registration missing the system preference PatronSelfRegistrationAdditionalInstructions)\n";
6559 SetVersion($DBversion);
6562 $DBversion = "3.11.00.029";
6563 if (CheckVersion($DBversion)) {
6564 $dbh->do("INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES('UseQueryParser', '0', 'If enabled, try to use QueryParser for queries.', NULL, 'YesNo')");
6565 print "Upgrade to $DBversion done (Bug 9239: Make it possible for Koha to use QueryParser)\n";
6566 SetVersion ($DBversion);
6569 $DBversion = "3.11.00.030";
6570 if ( CheckVersion($DBversion) ) {
6571 $dbh->do("INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES('FinesIncludeGracePeriod','1','If enabled, fines calculations will include the grace period.',NULL,'YesNo');");
6572 print "Upgrade to $DBversion done (Add system preference FinesIncludeGracePeriod)\n";
6573 SetVersion($DBversion);
6576 $DBversion = "3.11.00.100";
6577 if ( CheckVersion($DBversion) ) {
6578 print "Upgrade to $DBversion done (3.12-alpha release)\n";
6579 SetVersion ($DBversion);
6582 $DBversion = "3.11.00.101";
6583 if ( CheckVersion($DBversion) ) {
6584 $dbh->do("INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES ('UNIMARCAuthorsFacetsSeparator',', ', 'UNIMARC authors facets separator', NULL, 'short')");
6585 print "Upgrade to $DBversion done (Bug 9341: Problem with UNIMARC authors facets)\n";
6586 SetVersion ($DBversion);
6589 $DBversion = "3.11.00.102";
6590 if ( CheckVersion($DBversion) ) {
6592 DELETE FROM systempreferences WHERE variable='NoZebra'
6595 DELETE FROM systempreferences WHERE variable='QueryRemoveStopwords'
6597 print "Upgrade to $DBversion done (Remove deprecated NoZebra and QueryRemoveStopwords sysprefs)\n";
6598 SetVersion($DBversion);
6601 $DBversion = "3.11.00.103";
6602 if ( CheckVersion($DBversion) ) {
6603 $dbh->do("DELETE FROM systempreferences WHERE variable = 'insecure';");
6604 print "Upgrade to $DBversion done (Bug 9827 - Remove 'insecure' system preference)\n";
6605 SetVersion($DBversion);
6608 $DBversion = "3.11.00.104";
6609 if ( CheckVersion($DBversion) ) {
6610 print "Upgrade to $DBversion done (3.12-alpha2 release)\n";
6611 SetVersion ($DBversion);
6614 $DBversion = "3.11.00.105";
6615 if ( CheckVersion($DBversion) ) {
6616 if ( C4::Context->preference("marcflavour") eq 'MARC21' ) {
6617 $sth = $dbh->prepare(
6618 "SELECT frameworkcode FROM marc_tag_structure WHERE tagfield = '029'"
6621 my $frameworkcodes = $sth->fetchall_hashref('frameworkcode');
6623 for my $frameworkcode ( keys %$frameworkcodes ) {
6625 INSERT IGNORE INTO marc_subfield_structure (tagfield, tagsubfield, liblibrarian,
6626 libopac, repeatable, mandatory, kohafield, tab, authorised_value, authtypecode,
6627 value_builder, isurl, hidden, frameworkcode, seealso, link, defaultvalue) VALUES
6628 ('029', 'a', 'OCLC library identifier', 'OCLC library identifier', 0, 0, '', 0, '', '', '', 0, -6, '$frameworkcode', '', '', NULL),
6629 ('029', 'b', 'System control number', 'System control number', 0, 0, '', 0, '', '', '', 0, -6, '$frameworkcode', '', '', NULL),
6630 ('029', 'c', 'OAI set name', 'OAI set name', 0, 0, '', 0, '', '', '', 0, -6, '$frameworkcode', '', '', NULL),
6631 ('029', 't', 'Content type identifier', 'Content type identifier', 0, 0, '', 0, '', '', '', 0, -6, '$frameworkcode', '', '', NULL)
6635 for my $tag ( '863', '864', '865' ) {
6636 $sth = $dbh->prepare(
6637 "SELECT frameworkcode FROM marc_tag_structure WHERE tagfield = '$tag'"
6640 my $frameworkcodes = $sth->fetchall_hashref('frameworkcode');
6642 for my $frameworkcode ( keys %$frameworkcodes ) {
6644 INSERT IGNORE INTO marc_subfield_structure (tagfield, tagsubfield, liblibrarian,
6645 libopac, repeatable, mandatory, kohafield, tab, authorised_value, authtypecode,
6646 value_builder, isurl, hidden, frameworkcode, seealso, link, defaultvalue) VALUES
6647 ('$tag', '6', 'Linkage', 'Linkage', 0, 0, '', 8, '', '', '', NULL, 5, '$frameworkcode', '', '', NULL),
6648 ('$tag', '8', 'Field link and sequence number', 'Field link and sequence number', 0, 0, '', 8, '', '', '', NULL, 5, '$frameworkcode', '', '', NULL),
6649 ('$tag', 'a', 'First level of enumeration', 'First level of enumeration', 0, 0, '', 8, '', '', '', 0, 5, '$frameworkcode', '', '', NULL),
6650 ('$tag', 'b', 'Second level of enumeration', 'Second level of enumeration', 0, 0, '', 8, '', '', '', 0, 5, '$frameworkcode', '', '', NULL),
6651 ('$tag', 'c', 'Third level of enumeration', 'Third level of enumeration', 0, 0, '', 8, '', '', '', 0, 5, '$frameworkcode', '', '', NULL),
6652 ('$tag', 'd', 'Fourth level of enumeration', 'Fourth level of enumeration', 0, 0, '', 8, '', '', '', 0, 5, '$frameworkcode', '', '', NULL),
6653 ('$tag', 'e', 'Fifth level of enumeration', 'Fifth level of enumeration', 0, 0, '', 8, '', '', '', 0, 5, '$frameworkcode', '', '', NULL),
6654 ('$tag', 'f', 'Sixth level of enumeration', 'Sixth level of enumeration', 0, 0, '', 8, '', '', '', 0, 5, '$frameworkcode', '', '', NULL),
6655 ('$tag', 'g', 'Alternative numbering scheme, first level of enumeration', 'Alternative numbering scheme, first level of enumeration', 0, 0, '', 8, '', '', '', 0, 5, '$frameworkcode', '', '', NULL),
6656 ('$tag', 'h', 'Alternative numbering scheme, second level of enumeration', 'Alternative numbering scheme, second level of enumeration', 0, 0, '', 8, '', '', '', 0, 5, '$frameworkcode', '', '', NULL),
6657 ('$tag', 'i', 'First level of chronology', 'First level of chronology', 0, 0, '', 8, '', '', '', 0, 5, '$frameworkcode', '', '', NULL),
6658 ('$tag', 'j', 'Second level of chronology', 'Second level of chronology', 0, 0, '', 8, '', '', '', 0, 5, '$frameworkcode', '', '', NULL),
6659 ('$tag', 'k', 'Third level of chronology', 'Third level of chronology', 0, 0, '', 8, '', '', '', 0, 5, '$frameworkcode', '', '', NULL),
6660 ('$tag', 'l', 'Fourth level of chronology', 'Fourth level of chronology', 0, 0, '', 8, '', '', '', 0, 5, '$frameworkcode', '', '', NULL),
6661 ('$tag', 'm', 'Alternative numbering scheme, chronology', 'Alternative numbering scheme, chronology', 0, 0, '', 8, '', '', '', 0, 5, '$frameworkcode', '', '', NULL),
6662 ('$tag', 'n', 'Converted Gregorian year', 'Converted Gregorian year', 0, 0, '', 8, '', '', '', 0, 5, '$frameworkcode', '', '', NULL),
6663 ('$tag', 'o', 'Type of unit', 'Type of unit', 1, 0, '', 8, '', '', '', 0, 5, '$frameworkcode', '', '', NULL),
6664 ('$tag', 'p', 'Piece designation', 'Piece designation', 0, 0, '', 8, '', '', '', 0, 5, '$frameworkcode', '', '', NULL),
6665 ('$tag', 'q', 'Piece physical condition', 'Piece physical condition', 0, 0, '', 8, '', '', '', 0, 5, '$frameworkcode', '', '', NULL),
6666 ('$tag', 's', 'Copyright article-fee code', 'Copyright article-fee code', 1, 0, '', 8, '', '', '', 0, 5, '$frameworkcode', '', '', NULL),
6667 ('$tag', 't', 'Copy number', 'Copy number', 0, 0, '', 8, '', '', '', 0, 5, '$frameworkcode', '', '', NULL),
6668 ('$tag', 'v', 'Issuing date', 'Issuing date', 1, 0, '', 8, '', '', '', 0, 5, '$frameworkcode', '', '', NULL),
6669 ('$tag', 'w', 'Break indicator', 'Break indicator', 0, 0, '', 8, '', '', '', 0, 5, '$frameworkcode', '', '', NULL),
6670 ('$tag', 'x', 'Nonpublic note', 'Nonpublic note', 1, 0, '', 8, '', '', '', 0, 5, '$frameworkcode', '', '', NULL),
6671 ('$tag', 'z', 'Public note', 'Public note', 1, 0, '', 8, '', '', '', 0, 5, '$frameworkcode', '', '', NULL)
6676 print "Upgrade to $DBversion done (Bug 9353: Missing subfields on MARC21 frameworks)\n";
6677 SetVersion($DBversion);
6681 $DBversion = "3.11.00.106";
6682 if ( CheckVersion($DBversion) ) {
6683 $dbh->do("INSERT INTO userflags (bit, flag, flagdesc, defaulton) VALUES ('19', 'plugins', 'Koha plugins', '0')");
6684 $dbh->do("INSERT INTO permissions (module_bit, code, description) VALUES
6685 ('19', 'manage', 'Manage plugins ( install / uninstall )'),
6686 ('19', 'tool', 'Use tool plugins'),
6687 ('19', 'report', 'Use report plugins'),
6688 ('19', 'configure', 'Configure plugins')
6690 $dbh->do("INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES('UseKohaPlugins','0','Enable or disable the ability to use Koha Plugins.','','YesNo')");
6693 CREATE TABLE IF NOT EXISTS plugin_data (
6694 plugin_class varchar(255) NOT NULL,
6695 plugin_key varchar(255) NOT NULL,
6697 PRIMARY KEY (plugin_class,plugin_key)
6698 ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
6701 print "Upgrade to $DBversion done (Bug 7804: Added plugin system.)\n";
6702 SetVersion($DBversion);
6705 $DBversion = "3.11.00.107";
6706 if ( CheckVersion($DBversion) ) {
6707 $dbh->do("INSERT INTO systempreferences (variable,value,options,explanation,type) VALUES ('TimeFormat','24hr','12hr|24hr','Defines the global time format for visual output.','Choice')");
6708 print "Upgrade to $DBversion done (Bug 9014: Add syspref TimeFormat)\n";
6709 SetVersion ($DBversion);
6712 $DBversion = "3.11.00.108";
6713 if ( CheckVersion($DBversion) ) {
6714 $dbh->do("ALTER TABLE action_logs CHANGE timestamp timestamp TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP;");
6715 $dbh->do("UPDATE action_logs SET info=(SELECT itemnumber FROM items WHERE biblionumber= action_logs.info LIMIT 1) WHERE module='CIRCULATION' AND action in ('ISSUE','RETURN');");
6716 $dbh->do("ALTER TABLE action_logs CHANGE timestamp timestamp TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP;");
6717 print "Upgrade to $DBversion done (Bug 7241: Fix on circulation logs)\n";
6718 print "WARNING about bug 7241: to partially correct the broken logs, the log history is filled with the first found item for each biblio.\n";
6719 SetVersion($DBversion);
6722 $DBversion = "3.11.00.109";
6723 if ( CheckVersion($DBversion) ) {
6724 $dbh->do("INSERT INTO systempreferences (variable,value,options,explanation,type) VALUES('DisplayIconsXSLT', '1', '', 'If ON, displays the format, audience, and material type icons in XSLT MARC21 results and detail pages.', 'YesNo');");
6725 print "Upgrade to $DBversion done (Bug 9403: Add DisplayIconsXSLT)\n";
6726 SetVersion ($DBversion);
6729 $DBversion = "3.11.00.110";
6730 if ( CheckVersion($DBversion) ) {
6731 $dbh->do("ALTER TABLE pending_offline_operations CHANGE barcode barcode VARCHAR( 20 ) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL");
6732 $dbh->do("ALTER TABLE pending_offline_operations ADD amount DECIMAL( 28, 6 ) NULL DEFAULT NULL");
6733 print "Upgrade to $DBversion done (Bug 8220 - Allow koc uploads to go to process queue)\n";
6734 SetVersion ($DBversion);
6737 $DBversion = "3.11.00.111";
6738 if ( CheckVersion($DBversion) ) {
6739 my $sth = $dbh->prepare("
6740 SELECT module, code, branchcode, content
6742 WHERE content LIKE '%<fine>%'
6745 my $sth_update = $dbh->prepare("UPDATE letter SET content = ? WHERE module = ? AND code = ? AND branchcode = ?");
6746 while(my $row = $sth->fetchrow_hashref){
6747 $row->{content} =~ s/<fine>\w+<\/fine>/<<items.fine>>/;
6748 $sth_update->execute($row->{content}, $row->{module}, $row->{code}, $row->{branchcode});
6750 print "Upgrade to $DBversion done (use new <<items.fine>> syntax in notices)\n";
6751 SetVersion($DBversion);
6754 $DBversion = "3.11.00.112";
6755 if ( CheckVersion($DBversion) ) {
6757 ALTER TABLE issuingrules ADD COLUMN renewalperiod int(4) DEFAULT NULL AFTER renewalsallowed
6760 UPDATE issuingrules SET renewalperiod = issuelength
6762 print "Upgrade to $DBversion done (Bug 8365: Add colum issuingrules.renewalperiod)\n";
6763 SetVersion ($DBversion);
6766 $DBversion = "3.11.00.113";
6767 if ( CheckVersion($DBversion) ) {
6769 ALTER TABLE branchcategories ADD show_in_pulldown BOOLEAN NOT NULL DEFAULT '0',
6770 ADD INDEX ( show_in_pulldown )
6772 print "Upgrade to $DBversion done (Bug 9257 - Add groups to normal search pulldown)\n";
6773 SetVersion ($DBversion);
6776 $DBversion = "3.11.00.115";
6777 if ( CheckVersion($DBversion) ) {
6778 $dbh->do("INSERT INTO systempreferences (variable,value,options,explanation,type) VALUES ('HighlightOwnItemsOnOPAC','0','','If on, and a patron is logged into the OPAC, items from his or her home library will be emphasized and shown first in search results and item details.','YesNo')");
6779 $dbh->do("INSERT INTO systempreferences (variable,value,options,explanation,type) VALUES ('HighlightOwnItemsOnOPACWhich','PatronBranch','PatronBranch|OpacURLBranch','Decides which branch''s items to emphasize. If PatronBranch, emphasize the logged in user''s library''s items. If OpacURLBranch, highlight the items of the Apache var BRANCHCODE defined in Koha''s Apache configuration file.','Choice')");
6780 print "Upgrade to $DBversion done (Bug 7740: Add syspref HighlightOwnItemsOnOPAC)\n";
6781 SetVersion ($DBversion);
6784 $DBversion = "3.11.00.116";
6785 if ( CheckVersion($DBversion) ) {
6786 $dbh->do(q{ALTER TABLE aqorders DROP COLUMN serialid;});
6787 $dbh->do(q{ALTER TABLE aqorders DROP COLUMN subscription;});
6788 $dbh->do(q{ALTER TABLE aqorders ADD COLUMN subscriptionid INT(11) DEFAULT NULL;});
6789 $dbh->do(q{ALTER TABLE aqorders ADD CONSTRAINT aqorders_subscriptionid FOREIGN KEY (subscriptionid) REFERENCES subscription (subscriptionid) ON DELETE CASCADE ON UPDATE CASCADE;});
6790 $dbh->do(q{ALTER TABLE subscription ADD COLUMN reneweddate DATE DEFAULT NULL;});
6791 print "Upgrade to $DBversion done (Bug 5343: table aqorders: DROP serialid and subscription fields and ADD subscriptionid, table subscription: ADD reneweddate)\n";
6792 SetVersion ($DBversion);
6795 $DBversion = "3.11.00.200";
6796 if ( CheckVersion($DBversion) ) {
6797 print "Upgrade to $DBversion done (3.12-beta1 release)\n";
6798 SetVersion ($DBversion);
6801 $DBversion = "3.11.00.201";
6802 if ( CheckVersion($DBversion) ) {
6803 $dbh->do("UPDATE z3950servers SET encoding = 'ISO_8859-1' WHERE name = 'BIBSYS' AND host LIKE 'z3950.bibsys.no'");
6804 $dbh->do("UPDATE z3950servers SET encoding = 'ISO_8859-1' WHERE name = 'NORBOK' AND host LIKE 'z3950.nb.no'");
6805 $dbh->do("UPDATE z3950servers SET encoding = 'ISO_8859-1' WHERE name = 'SAMBOK' AND host LIKE 'z3950.nb.no'");
6806 $dbh->do("UPDATE z3950servers SET encoding = 'ISO_8859-1' WHERE name = 'DEICHMAN' AND host like 'z3950.deich.folkebibl.no'");
6807 print "Upgrade to $DBversion done (Bug 9498 - Update encoding for Norwegian sample Z39.50 servers)\n";
6808 SetVersion($DBversion);
6811 $DBversion = "3.11.00.202";
6812 if ( CheckVersion($DBversion) ) {
6813 $dbh->do("INSERT INTO language_subtag_registry( subtag, type, description, added) VALUES ( 'ca', 'language', 'Catalan','2013-01-12' )");
6814 $dbh->do("INSERT INTO language_rfc4646_to_iso639(rfc4646_subtag,iso639_2_code) VALUES( 'ca','cat')");
6815 $dbh->do("INSERT INTO language_descriptions(subtag, type, lang, description) VALUES( 'ca', 'language', 'es', 'Catalán')");
6816 $dbh->do("INSERT INTO language_descriptions(subtag, type, lang, description) VALUES( 'ca', 'language', 'en', 'Catalan')");
6817 $dbh->do("INSERT INTO language_descriptions(subtag, type, lang, description) VALUES( 'ca', 'language', 'fr', 'Catalan')");
6818 $dbh->do("INSERT INTO language_descriptions(subtag, type, lang, description) VALUES( 'ca', 'language', 'ca', 'Català')");
6819 $dbh->do("INSERT INTO language_descriptions(subtag, type, lang, description) VALUES( 'ca', 'language', 'de', 'Katalanisch')");
6820 print "Upgrade to $DBversion done (Bug 9381: Add Catalan laguage)\n";
6821 SetVersion ($DBversion);
6824 $DBversion = "3.11.00.203";
6825 if ( CheckVersion($DBversion) ) {
6826 $dbh->do(q{ALTER TABLE suggestions CHANGE COLUMN title title VARCHAR(255) DEFAULT NULL;});
6827 print "Upgrade to $DBversion done (Bug 2046 - increasing title column length for suggestions)\n";
6828 SetVersion ($DBversion);
6831 $DBversion = "3.11.00.300";
6832 if ( CheckVersion($DBversion) ) {
6833 print "Upgrade to $DBversion done (3.12-beta3 release)\n";
6834 SetVersion ($DBversion);
6837 $DBversion = "3.11.00.301";
6838 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
6841 ALTER TABLE `issues`
6842 ADD KEY `itemnumber_idx` (`itemnumber`),
6843 ADD KEY `branchcode_idx` (`branchcode`),
6844 ADD KEY `issuingbranch_idx` (`issuingbranch`)
6847 ALTER TABLE `old_issues`
6848 ADD KEY `branchcode_idx` (`branchcode`),
6849 ADD KEY `issuingbranch_idx` (`issuingbranch`)
6853 ALTER TABLE `items` ADD KEY `itype_idx` (`itype`)
6856 ALTER TABLE `deleteditems` ADD KEY `itype_idx` (`itype`)
6860 ALTER TABLE `biblioitems` ADD KEY `itemtype_idx` (`itemtype`)
6863 ALTER TABLE `deletedbiblioitems` ADD KEY `itemtype_idx` (`itemtype`)
6867 ALTER TABLE `statistics`
6868 ADD KEY `branch_idx` (`branch`),
6869 ADD KEY `proccode_idx` (`proccode`),
6870 ADD KEY `type_idx` (`type`),
6871 ADD KEY `usercode_idx` (`usercode`),
6872 ADD KEY `itemnumber_idx` (`itemnumber`),
6873 ADD KEY `itemtype_idx` (`itemtype`),
6874 ADD KEY `borrowernumber_idx` (`borrowernumber`),
6875 ADD KEY `associatedborrower_idx` (`associatedborrower`),
6876 ADD KEY `ccode_idx` (`ccode`)
6879 print "Upgrade to $DBversion done (Bug 9681: Add some database indexes)\n";
6880 SetVersion($DBversion);
6883 $DBversion = "3.12.00.000";
6884 if ( CheckVersion($DBversion) ) {
6885 print "Upgrade to $DBversion done (3.12.0 release)\n";
6886 SetVersion ($DBversion);
6889 $DBversion = '3.13.00.000';
6890 if ( CheckVersion($DBversion) ) {
6891 print "Upgrade to $DBversion done (start the journey to Koha Pi)\n";
6892 SetVersion ($DBversion);
6895 $DBversion = "3.13.00.001";
6896 if ( CheckVersion($DBversion) ) {
6897 $dbh->do("INSERT INTO `systempreferences` (`variable`, `value`, `options`, `explanation`, `type`) VALUES ('UseCourseReserves', '0', NULL, 'Enable the course reserves feature.', 'YesNo')");
6898 $dbh->do("INSERT INTO userflags (bit,flag,flagdesc,defaulton) VALUES ('18','coursereserves','Course Reserves','0')");
6900 CREATE TABLE `courses` (
6901 `course_id` int(11) NOT NULL AUTO_INCREMENT,
6902 `department` varchar(20) DEFAULT NULL,
6903 `course_number` varchar(255) DEFAULT NULL,
6904 `section` varchar(255) DEFAULT NULL,
6905 `course_name` varchar(255) DEFAULT NULL,
6906 `term` varchar(20) DEFAULT NULL,
6907 `staff_note` mediumtext,
6908 `public_note` mediumtext,
6909 `students_count` varchar(20) DEFAULT NULL,
6910 `enabled` enum('yes','no') NOT NULL DEFAULT 'yes',
6911 `timestamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
6912 PRIMARY KEY (`course_id`)
6913 ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
6917 CREATE TABLE `course_instructors` (
6918 `course_id` int(11) NOT NULL,
6919 `borrowernumber` int(11) NOT NULL,
6920 PRIMARY KEY (`course_id`,`borrowernumber`),
6921 KEY `borrowernumber` (`borrowernumber`)
6922 ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
6926 ALTER TABLE `course_instructors`
6927 ADD CONSTRAINT `course_instructors_ibfk_2` FOREIGN KEY (`course_id`) REFERENCES `courses` (`course_id`),
6928 ADD CONSTRAINT `course_instructors_ibfk_1` FOREIGN KEY (`borrowernumber`) REFERENCES `borrowers` (`borrowernumber`) ON DELETE CASCADE ON UPDATE CASCADE;
6932 CREATE TABLE `course_items` (
6933 `ci_id` int(11) NOT NULL AUTO_INCREMENT,
6934 `itemnumber` int(11) NOT NULL,
6935 `itype` varchar(10) DEFAULT NULL,
6936 `ccode` varchar(10) DEFAULT NULL,
6937 `holdingbranch` varchar(10) DEFAULT NULL,
6938 `location` varchar(80) DEFAULT NULL,
6939 `enabled` enum('yes','no') NOT NULL DEFAULT 'no',
6940 `timestamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
6941 PRIMARY KEY (`ci_id`),
6942 UNIQUE KEY `itemnumber` (`itemnumber`),
6943 KEY `holdingbranch` (`holdingbranch`)
6944 ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
6948 ALTER TABLE `course_items`
6949 ADD CONSTRAINT `course_items_ibfk_2` FOREIGN KEY (`holdingbranch`) REFERENCES `branches` (`branchcode`) ON DELETE CASCADE ON UPDATE CASCADE,
6950 ADD CONSTRAINT `course_items_ibfk_1` FOREIGN KEY (`itemnumber`) REFERENCES `items` (`itemnumber`) ON DELETE CASCADE ON UPDATE CASCADE;
6954 CREATE TABLE `course_reserves` (
6955 `cr_id` int(11) NOT NULL AUTO_INCREMENT,
6956 `course_id` int(11) NOT NULL,
6957 `ci_id` int(11) NOT NULL,
6958 `staff_note` mediumtext,
6959 `public_note` mediumtext,
6960 `timestamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
6961 PRIMARY KEY (`cr_id`),
6962 UNIQUE KEY `pseudo_key` (`course_id`,`ci_id`),
6963 KEY `course_id` (`course_id`)
6964 ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
6968 ALTER TABLE `course_reserves`
6969 ADD CONSTRAINT `course_reserves_ibfk_1` FOREIGN KEY (`course_id`) REFERENCES `courses` (`course_id`);
6973 INSERT INTO permissions (module_bit, code, description) VALUES
6974 (18, 'manage_courses', 'Add, edit and delete courses'),
6975 (18, 'add_reserves', 'Add course reserves'),
6976 (18, 'delete_reserves', 'Remove course reserves')
6981 print "Upgrade to $DBversion done (Add Course Reserves ( system preference UseCourseReserves ))\n";
6982 SetVersion($DBversion);
6985 $DBversion = "3.13.00.002";
6986 if ( CheckVersion($DBversion) ) {
6987 $dbh->do("UPDATE systempreferences SET variable = 'IndependentBranches' WHERE variable = 'IndependantBranches'");
6988 print "Upgrade to $DBversion done (Bug 10080 - Change system pref IndependantBranches to IndependentBranches)\n";
6989 SetVersion ($DBversion);
6992 $DBversion = '3.13.00.003';
6993 if ( CheckVersion($DBversion) ) {
6994 $dbh->do("ALTER TABLE serial DROP itemnumber");
6995 print "Upgrade to $DBversion done (Bug 7718 - Remove itemnumber column from serials table)\n";
6996 SetVersion($DBversion);
6999 $DBversion = "3.13.00.004";
7000 if(CheckVersion($DBversion)) {
7002 "INSERT IGNORE INTO systempreferences (variable,value,explanation,options,type) VALUES('OpacShowHoldNotes',0,'Show hold notes on OPAC','','YesNo')"
7004 print "Upgrade to $DBversion done (Bug 9722: Allow users to add notes when placing a hold in OPAC)\n";
7005 SetVersion($DBversion);
7008 $DBversion = "3.13.00.005";
7009 if(CheckVersion($DBversion)) {
7010 my $intra= C4::Context->preference("intranetstylesheet");
7011 #if this pref is not blank or starting with http, https or / [root], then
7012 #add an additional / to the front
7013 if($intra && $intra !~ /^(\/|https?)/) {
7014 $dbh->do("UPDATE systempreferences SET value=? WHERE variable=?",
7015 undef,('/'.$intra,"intranetstylesheet"));
7016 print "WARNING: Your system preference intranetstylesheet has been prefixed with a slash to make it an absolute path.\n";
7018 print "Upgrade to $DBversion done (Bug 10052: Make intranetstylesheet and intranetcolorstylesheet behave exactly like their opac counterparts)\n";
7019 SetVersion ($DBversion);
7022 $DBversion = "3.13.00.006";
7023 if ( CheckVersion($DBversion) ) {
7025 INSERT IGNORE INTO systempreferences (variable,value,explanation,options,type)
7026 VALUES ('CalculateFinesOnReturn','1','Switch to control if overdue fines are calculated on return or not', '', 'YesNo')
7028 print "Upgrade to $DBversion done (Bug 10120: Fines on item return controlled by a systempreference)\n";
7029 SetVersion($DBversion);
7032 $DBversion = "3.13.00.007";
7033 if ( CheckVersion($DBversion) ) {
7034 $dbh->do("UPDATE systempreferences SET variable='OpacHoldNotes' WHERE variable='OpacShowHoldNotes'");
7035 print "Upgrade to $DBversion done (Bug 10343: Rename OpacShowHoldNotes to OpacHoldNotes)\n";
7036 SetVersion($DBversion);
7039 $DBversion = "3.13.00.008";
7040 if ( CheckVersion($DBversion) ) {
7042 CREATE TABLE IF NOT EXISTS borrower_files (
7043 file_id int(11) NOT NULL AUTO_INCREMENT,
7044 borrowernumber int(11) NOT NULL,
7045 file_name varchar(255) NOT NULL,
7046 file_type varchar(255) NOT NULL,
7047 file_description varchar(255) DEFAULT NULL,
7048 file_content longblob NOT NULL,
7049 date_uploaded timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
7050 PRIMARY KEY (file_id),
7051 KEY borrowernumber (borrowernumber),
7052 CONSTRAINT borrower_files_ibfk_1 FOREIGN KEY (borrowernumber) REFERENCES borrowers (borrowernumber) ON DELETE CASCADE ON UPDATE CASCADE
7053 ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
7055 print "Upgrade to $DBversion done (Bug 10443: make sure borrower_files table exists)\n";
7056 SetVersion($DBversion);
7059 $DBversion = "3.13.00.009";
7060 if ( CheckVersion($DBversion) ) {
7061 $dbh->do("ALTER TABLE aqorders DROP COLUMN biblioitemnumber");
7062 print "Upgrade to $DBversion done (Bug 9987 - Drop column aqorders.biblioitemnumber)\n";
7063 SetVersion($DBversion);
7066 $DBversion = "3.13.00.010";
7067 if ( CheckVersion($DBversion) ) {
7070 INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES ('AcqWarnOnDuplicateInvoice','0','Warn librarians when they try to create a duplicate invoice', '', 'YesNo');
7074 "Upgrade to $DBversion done (Bug 10366 - Add system preference to enabling warning librarian when invoice is duplicated)\n";
7075 SetVersion($DBversion);
7078 $DBversion = "3.13.00.011";
7079 if ( CheckVersion($DBversion) ) {
7080 $dbh->do("UPDATE language_rfc4646_to_iso639 SET iso639_2_code='ita' WHERE rfc4646_subtag='it'");
7081 print "Upgrade to $DBversion done (Bug 9519: Wrong language code for Italian in the advanced search language limitations)\n";
7082 SetVersion($DBversion);
7085 $DBversion = "3.13.00.012";
7086 if ( CheckVersion($DBversion) ) {
7087 $dbh->do("ALTER TABLE issuingrules MODIFY COLUMN overduefinescap decimal(28,6) DEFAULT NULL;");
7088 print "Upgrade to $DBversion done (Bug 10490: Correct datatype for overduefinescap in issuingrules)\n";
7089 SetVersion($DBversion);
7092 $DBversion ="3.13.00.013";
7093 if ( CheckVersion($DBversion) ) {
7094 $dbh->do("INSERT IGNORE INTO systempreferences (variable,value,explanation,options,type) VALUES ('AllowTooManyOverride', '1', 'If on, allow staff to override and check out items when the patron has reached the maximum number of allowed checkouts', '', 'YesNo');");
7095 print "Upgrade to $DBversion done (Bug 9576: add AllowTooManyOverride syspref to enable or disable issue limit confirmation)\n";
7096 SetVersion($DBversion);
7099 $DBversion = "3.13.00.014";
7100 if ( CheckVersion($DBversion) ) {
7101 $dbh->do("ALTER TABLE courses MODIFY COLUMN department varchar(80) DEFAULT NULL;");
7102 $dbh->do("ALTER TABLE courses MODIFY COLUMN term varchar(80) DEFAULT NULL;");
7103 print "Upgrade to $DBversion done (Bug 10604: correct width of courses.department and courses.term)\n";
7104 SetVersion($DBversion);
7107 $DBversion = "3.13.00.015";
7108 if ( CheckVersion($DBversion) ) {
7110 "INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('itemBarcodeFallbackSearch','','If set, enables the automatic use of a keyword catalog search if the phrase entered as a barcode on the checkout page does not turn up any results during an item barcode search',NULL,'YesNo')"
7112 print "Upgrade to $DBversion done (Bug 7494: Add itemBarcodeFallbackSearch syspref)\n";
7113 SetVersion($DBversion);
7116 $DBversion = "3.13.00.016";
7117 if ( CheckVersion($DBversion) ) {
7119 ALTER TABLE items CHANGE wthdrawn withdrawn TINYINT( 1 ) NOT NULL DEFAULT '0'
7123 ALTER TABLE deleteditems CHANGE wthdrawn withdrawn TINYINT( 1 ) NOT NULL DEFAULT '0'
7127 UPDATE saved_sql SET savedsql = REPLACE(savedsql, 'wthdrawn', 'withdrawn')
7131 UPDATE marc_subfield_structure SET kohafield = 'items.withdrawn' WHERE kohafield = 'items.wthdrawn'
7134 print "Upgrade to $DBversion done (Bug 10550 - Fix database typo wthdrawn)\n";
7135 SetVersion($DBversion);
7138 $DBversion = "3.13.00.017";
7139 if ( CheckVersion($DBversion) ) {
7141 "INSERT IGNORE INTO systempreferences (variable,value,explanation,options,type) VALUES('OverDriveClientKey','','Client key for OverDrive integration','30','Free')"
7144 "INSERT IGNORE INTO systempreferences (variable,value,explanation,options,type) VALUES('OverDriveClientSecret','','Client key for OverDrive integration','30','YesNo')"
7147 "INSERT IGNORE INTO systempreferences (variable,value,explanation,options,type) VALUES('OverDriveLibraryID','','Library ID for OverDrive integration','','Integer')"
7149 print "Upgrade to $DBversion done (Bug 10320 - Show results from library's OverDrive collection in OPAC search)\n";
7150 SetVersion($DBversion);
7153 $DBversion = "3.13.00.018";
7154 if ( CheckVersion($DBversion) ) {
7155 $dbh->do(qq{DROP TABLE IF EXISTS aqorders_transfers;});
7157 CREATE TABLE aqorders_transfers (
7158 ordernumber_from int(11) NULL,
7159 ordernumber_to int(11) NULL,
7160 timestamp timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
7161 UNIQUE KEY ordernumber_from (ordernumber_from),
7162 UNIQUE KEY ordernumber_to (ordernumber_to),
7163 CONSTRAINT aqorders_transfers_ordernumber_from FOREIGN KEY (ordernumber_from) REFERENCES aqorders (ordernumber) ON DELETE SET NULL ON UPDATE CASCADE,
7164 CONSTRAINT aqorders_transfers_ordernumber_to FOREIGN KEY (ordernumber_to) REFERENCES aqorders (ordernumber) ON DELETE SET NULL ON UPDATE CASCADE
7165 ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
7167 print "Upgrade to $DBversion done (Bug 5349: Add aqorders_transfers table)\n";
7168 SetVersion($DBversion);
7171 $DBversion = "3.13.00.019";
7172 if ( CheckVersion($DBversion) ) {
7173 $dbh->do("ALTER TABLE itemtypes ADD COLUMN checkinmsg VARCHAR(255) AFTER summary;");
7174 $dbh->do("ALTER TABLE itemtypes ADD COLUMN checkinmsgtype CHAR(16) DEFAULT 'message' NOT NULL AFTER checkinmsg;");
7175 print "Upgrade to $DBversion done (Bug 10513 - Light up a warning/message when returning a chosen item type)\n";
7176 SetVersion($DBversion);
7179 $DBversion = "3.13.00.020";
7180 if ( CheckVersion($DBversion) ) {
7181 $dbh->do("INSERT INTO systempreferences (variable,value,options,explanation,type) VALUES('WhenLostForgiveFine','0',NULL,'If ON, Forgives the fines on an item when it is lost.','YesNo')");
7182 $dbh->do("INSERT INTO systempreferences (variable,value,options,explanation,type) VALUES('WhenLostChargeReplacementFee','1',NULL,'If ON, Charge the replacement price when a patron loses an item.','YesNo')");
7183 print "Upgrade to $DBversion done (Bug 7639: system preferences to forgive fines on lost items)\n";
7184 SetVersion($DBversion);
7187 $DBversion ="3.13.00.021";
7188 if ( CheckVersion($DBversion) ) {
7189 $dbh->do("INSERT IGNORE INTO systempreferences (variable,value,explanation,options,type) VALUES('ConfirmFutureHolds','0','Number of days for confirming future holds','','Integer');");
7190 print "Upgrade to $DBversion done (Bug 9761: Add ConfirmFutureHolds pref)\n";
7191 SetVersion($DBversion);
7194 $DBversion = "3.13.00.022";
7195 if ( CheckVersion($DBversion) ) {
7196 $dbh->do("DELETE from auth_tag_structure WHERE tagfield IN ('68a','68b')");
7197 $dbh->do("DELETE from auth_subfield_structure WHERE tagfield IN ('68a','68b')");
7198 print "Upgrade to $DBversion done (Bug 10687 - Delete erroneous tags 68a and 68b on default MARC21 auth framework)\n";
7199 SetVersion($DBversion);
7202 $DBversion = "3.13.00.023";
7203 if ( CheckVersion($DBversion) ) {
7204 $dbh->do("ALTER TABLE borrowers CHANGE password password VARCHAR(60);");
7205 print "Upgrade to $DBversion done (Bug 9611 upgrading password storage system)\n";
7206 SetVersion($DBversion);
7209 $DBversion = "3.13.00.024";
7210 if ( CheckVersion($DBversion) ) {
7211 $dbh->do(q{ALTER TABLE z3950servers ADD COLUMN recordtype VARCHAR(45) NOT NULL DEFAULT 'biblio' AFTER description;});
7212 print "Upgrade to $DBversion done (Bug 10096 - Add a Z39.50 interface for authority searching)\n";
7215 $DBversion = "3.13.00.025";
7216 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
7217 $dbh->do("ALTER TABLE oai_sets_mappings ADD COLUMN operator varchar(8) NOT NULL default 'equal' AFTER marcsubfield;");
7218 print "Upgrade to $DBversion done (Bug 9295: OAI notequal: add operator column to OAI mappings table)\n";
7219 SetVersion ($DBversion);
7222 $DBversion = "3.13.00.026";
7223 if ( CheckVersion($DBversion) ) {
7225 ALTER TABLE auth_subfield_structure ADD COLUMN defaultvalue TEXT DEFAULT NULL AFTER frameworkcode
7227 print "Upgrade to $DBversion done (Bug 10602: Add the column auth_subfield_structure.defaultvalue)\n";
7228 SetVersion($DBversion);
7231 $DBversion = "3.13.00.027";
7232 if ( CheckVersion($DBversion) ) {
7233 $dbh->do("INSERT INTO systempreferences (variable,value,options,explanation,type) VALUES ('AllowOfflineCirculation','0','','If on, enables HTML5 offline circulation functionality.','YesNo')");
7234 print "Upgrade to $DBversion done (Bug 10240: Add syspref AllowOfflineCirculation)\n";
7235 SetVersion ($DBversion);
7238 $DBversion = "3.13.00.028";
7239 if ( CheckVersion($DBversion) ) {
7241 ALTER TABLE export_format ADD type VARCHAR(255) DEFAULT 'marc' AFTER encoding
7244 ALTER TABLE export_format CHANGE marcfields content mediumtext NOT NULL
7246 print "Upgrade to $DBversion done (Bug 10853: Add new field export_format.type and rename export_format.marcfields with export_format.content)\n";
7247 SetVersion($DBversion);
7250 $DBversion = "3.13.00.029";
7251 if ( CheckVersion($DBversion) ) {
7253 INSERT IGNORE INTO export_format( profile, description, content, csv_separator, type )
7254 VALUES ( "issues to claim", "Default CSV export for serial issue claims",
7255 "SUPPLIER=aqbooksellers.name|TITLE=subscription.title|ISSUE NUMBER=serial.serialseq|LATE SINCE=serial.planneddate",
7258 print "Upgrade to $DBversion done (Bug 10854: Add the default CSV profile for claiming issues)\n";
7259 SetVersion($DBversion);
7262 $DBversion = "3.13.00.030";
7263 if ( CheckVersion($DBversion) ) {
7265 DELETE FROM patronimage WHERE NOT EXISTS (SELECT * FROM borrowers WHERE borrowers.cardnumber = patronimage.cardnumber)
7269 ALTER TABLE patronimage ADD borrowernumber INT( 11 ) NULL FIRST
7272 $dbh->{AutoCommit} = 0;
7273 $dbh->{RaiseError} = 1;
7277 UPDATE patronimage LEFT JOIN borrowers USING ( cardnumber ) SET patronimage.borrowernumber = borrowers.borrowernumber
7283 print "Upgrade to $DBversion done (Bug 10636 - patronimage should have borrowernumber as PK, not cardnumber) failed! Transaction aborted because $@\n";
7284 eval { $dbh->rollback };
7288 ALTER TABLE patronimage DROP FOREIGN KEY patronimage_fk1
7291 ALTER TABLE patronimage DROP PRIMARY KEY, ADD PRIMARY KEY( borrowernumber )
7294 ALTER TABLE patronimage DROP cardnumber
7297 ALTER TABLE patronimage ADD FOREIGN KEY ( borrowernumber ) REFERENCES borrowers ( borrowernumber ) ON DELETE CASCADE ON UPDATE CASCADE
7300 print "Upgrade to $DBversion done (Bug 10636 - patronimage should have borrowernumber as PK, not cardnumber)\n";
7301 SetVersion($DBversion);
7304 $dbh->{AutoCommit} = 1;
7305 $dbh->{RaiseError} = 0;
7308 $DBversion = "3.13.00.031";
7309 if ( CheckVersion($DBversion) ) {
7312 CREATE TABLE IF NOT EXISTS `patron_lists` (
7313 patron_list_id int(11) NOT NULL AUTO_INCREMENT,
7314 name varchar(255) CHARACTER SET utf8 NOT NULL,
7315 owner int(11) NOT NULL,
7316 PRIMARY KEY (patron_list_id),
7318 ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
7322 ALTER TABLE `patron_lists`
7323 ADD CONSTRAINT patron_lists_ibfk_1 FOREIGN KEY (`owner`) REFERENCES borrowers (borrowernumber) ON DELETE CASCADE ON UPDATE CASCADE;
7327 CREATE TABLE patron_list_patrons (
7328 patron_list_patron_id int(11) NOT NULL AUTO_INCREMENT,
7329 patron_list_id int(11) NOT NULL,
7330 borrowernumber int(11) NOT NULL,
7331 PRIMARY KEY (patron_list_patron_id),
7332 KEY patron_list_id (patron_list_id),
7333 KEY borrowernumber (borrowernumber)
7334 ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
7338 ALTER TABLE `patron_list_patrons`
7339 ADD CONSTRAINT patron_list_patrons_ibfk_1 FOREIGN KEY (patron_list_id) REFERENCES patron_lists (patron_list_id) ON DELETE CASCADE ON UPDATE CASCADE,
7340 ADD CONSTRAINT patron_list_patrons_ibfk_2 FOREIGN KEY (borrowernumber) REFERENCES borrowers (borrowernumber) ON DELETE CASCADE ON UPDATE CASCADE;
7344 INSERT INTO permissions (module_bit, code, description) VALUES
7345 (13, 'manage_patron_lists', 'Add, edit and delete patron lists and their contents')
7348 print "Upgrade to $DBversion done (Bug 10565 - Add a 'Patron List' feature for storing and manipulating collections of patrons)\n";
7349 SetVersion($DBversion);
7352 $DBversion = "3.13.00.032";
7353 if ( CheckVersion($DBversion) ) {
7354 $dbh->do("ALTER TABLE aqorders ADD COLUMN orderstatus varchar(16) DEFAULT 'new' AFTER parent_ordernumber");
7355 $dbh->do("UPDATE aqorders SET orderstatus='ordered' WHERE basketno IN (SELECT basketno FROM aqbasket WHERE closedate IS NOT NULL)");
7357 UPDATE aqorders SET orderstatus='partial'
7358 WHERE quantity > quantityreceived
7359 AND quantityreceived > 0
7360 AND ordernumber IN (
7361 SELECT parent_ordernumber
7363 SELECT DISTINCT(parent_ordernumber)
7365 WHERE ordernumber != parent_ordernumber
7368 AND basketno IN (SELECT basketno FROM aqbasket WHERE closedate IS NOT NULL)
7370 $dbh->do("UPDATE aqorders SET orderstatus='complete' WHERE quantity=quantityreceived");
7371 $dbh->do("UPDATE aqorders SET orderstatus='cancelled' WHERE datecancellationprinted IS NOT NULL");
7372 print "Upgrade to $DBversion done (Bug 5336: Add the new column aqorders.orderstatus)\n";
7373 SetVersion($DBversion);
7376 $DBversion = "3.13.00.033";
7377 if ( CheckVersion($DBversion) ) {
7379 DROP TABLE IF EXISTS subscription_frequencies
7382 CREATE TABLE subscription_frequencies (
7383 id INTEGER NOT NULL AUTO_INCREMENT,
7384 description TEXT NOT NULL,
7385 displayorder INT DEFAULT NULL,
7386 unit ENUM('day','week','month','year') DEFAULT NULL,
7387 unitsperissue INTEGER NOT NULL DEFAULT '1',
7388 issuesperunit INTEGER NOT NULL DEFAULT '1',
7390 ) ENGINE=InnoDB DEFAULT CHARSET=utf8
7394 DROP TABLE IF EXISTS subscription_numberpatterns
7397 CREATE TABLE subscription_numberpatterns (
7398 id INTEGER NOT NULL AUTO_INCREMENT,
7399 label VARCHAR(255) NOT NULL,
7400 displayorder INTEGER DEFAULT NULL,
7401 description TEXT NOT NULL,
7402 numberingmethod VARCHAR(255) NOT NULL,
7403 label1 VARCHAR(255) DEFAULT NULL,
7404 add1 INTEGER DEFAULT NULL,
7405 every1 INTEGER DEFAULT NULL,
7406 whenmorethan1 INTEGER DEFAULT NULL,
7407 setto1 INTEGER DEFAULT NULL,
7408 numbering1 VARCHAR(255) DEFAULT NULL,
7409 label2 VARCHAR(255) DEFAULT NULL,
7410 add2 INTEGER DEFAULT NULL,
7411 every2 INTEGER DEFAULT NULL,
7412 whenmorethan2 INTEGER DEFAULT NULL,
7413 setto2 INTEGER DEFAULT NULL,
7414 numbering2 VARCHAR(255) DEFAULT NULL,
7415 label3 VARCHAR(255) DEFAULT NULL,
7416 add3 INTEGER DEFAULT NULL,
7417 every3 INTEGER DEFAULT NULL,
7418 whenmorethan3 INTEGER DEFAULT NULL,
7419 setto3 INTEGER DEFAULT NULL,
7420 numbering3 VARCHAR(255) DEFAULT NULL,
7422 ) ENGINE=InnoDB DEFAULT CHARSET=utf8
7426 INSERT INTO subscription_frequencies (description, unit, unitsperissue, issuesperunit, displayorder)
7428 ('2/day', 'day', 1, 2, 1),
7429 ('1/day', 'day', 1, 1, 2),
7430 ('3/week', 'week', 1, 3, 3),
7431 ('1/week', 'week', 1, 1, 4),
7432 ('1/2 weeks', 'week', 2, 1, 5),
7433 ('1/3 weeks', 'week', 3, 1, 6),
7434 ('1/month', 'month', 1, 1, 7),
7435 ('1/2 months', 'month', 2, 1, 8),
7436 ('1/3 months', 'month', 3, 1, 9),
7437 ('2/year', 'month', 6, 1, 10),
7438 ('1/year', 'year', 1, 1, 11),
7439 ('1/2 year', 'year', 2, 1, 12),
7440 ('Irregular', NULL, 1, 1, 13)
7443 # Used to link existing subscription to newly created frequencies
7444 my $frequencies_mapping = { # keys are old frequency numbers, values are the new ones
7445 1 => 2, # daily (n/week)
7450 6 => 8, # 1/2 months (6/year)
7451 7 => 9, # 1/3 months (1/quarter)
7452 8 => 9, # 1/quarter (seasonal)
7455 11 => 12, # 1/2 years
7457 16 => 13, # Without periodicity
7458 32 => 13, # Irregular
7463 INSERT INTO subscription_numberpatterns
7464 (label, displayorder, description, numberingmethod,
7465 label1, add1, every1, whenmorethan1, setto1, numbering1,
7466 label2, add2, every2, whenmorethan2, setto2, numbering2,
7467 label3, add3, every3, whenmorethan3, setto3, numbering3)
7469 ('Number', 1, 'Simple Numbering method', 'No.{X}',
7470 'Number', 1, 1, 99999, 1, NULL,
7471 NULL, NULL, NULL, NULL, NULL, NULL,
7472 NULL, NULL, NULL, NULL, NULL, NULL),
7474 ('Volume, Number, Issue', 2, 'Volume Number Issue 1', 'Vol.{X}, Number {Y}, Issue {Z}',
7475 'Volume', 1, 48, 99999, 1, NULL,
7476 'Number', 1, 4, 12, 1, NULL,
7477 'Issue', 1, 1, 4, 1, NULL),
7479 ('Volume, Number', 3, 'Volume Number 1', 'Vol {X}, No {Y}',
7480 'Volume', 1, 12, 99999, 1, NULL,
7481 'Number', 1, 1, 12, 1, NULL,
7482 NULL, NULL, NULL, NULL, NULL, NULL),
7484 ('Seasonal', 4, 'Season Year', '{X} {Y}',
7485 'Season', 1, 1, 3, 0, 'season',
7486 'Year', 1, 4, 99999, 1, NULL,
7487 NULL, NULL, NULL, NULL, NULL, NULL)
7491 ALTER TABLE subscription
7492 MODIFY COLUMN numberpattern INTEGER DEFAULT NULL,
7493 MODIFY COLUMN periodicity INTEGER DEFAULT NULL
7496 # Update existing subscriptions
7499 SELECT subscriptionid, periodicity, numberingmethod,
7500 add1, every1, whenmorethan1, setto1,
7501 add2, every2, whenmorethan2, setto2,
7502 add3, every3, whenmorethan3, setto3
7504 ORDER BY subscriptionid
7506 my $sth = $dbh->prepare($query);
7508 my $insert_numberpatterns_sth = $dbh->prepare(qq|
7509 INSERT INTO subscription_numberpatterns
7510 (label, displayorder, description, numberingmethod,
7511 label1, add1, every1, whenmorethan1, setto1, numbering1,
7512 label2, add2, every2, whenmorethan2, setto2, numbering2,
7513 label3, add3, every3, whenmorethan3, setto3, numbering3)
7515 (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
7517 my $check_numberpatterns_sth = $dbh->prepare(qq|
7518 SELECT * FROM subscription_numberpatterns
7519 WHERE (add1 = ? OR (add1 IS NULL AND ? IS NULL)) AND (add2 = ? OR (add2 IS NULL AND ? IS NULL))
7520 AND (add3 = ? OR (add3 IS NULL AND ? IS NULL)) AND (every1 = ? OR (every1 IS NULL AND ? IS NULL))
7521 AND (every2 = ? OR (every2 IS NULL AND ? IS NULL)) AND (every3 = ? OR (every3 IS NULL AND ? IS NULL))
7522 AND (whenmorethan1 = ? OR (whenmorethan1 IS NULL AND ? IS NULL)) AND (whenmorethan2 = ? OR (whenmorethan2 IS NULL AND ? IS NULL))
7523 AND (whenmorethan3 = ? OR (whenmorethan3 IS NULL AND ? IS NULL)) AND (setto1 = ? OR (setto1 IS NULL AND ? IS NULL))
7524 AND (setto2 = ? OR (setto2 IS NULL AND ? IS NULL)) AND (setto3 = ? OR (setto3 IS NULL AND ? IS NULL))
7525 AND (numberingmethod = ? OR (numberingmethod IS NULL AND ? IS NULL))
7528 my $update_subscription_sth = $dbh->prepare(qq|
7530 SET numberpattern = ?,
7532 WHERE subscriptionid = ?
7536 while(my $sub = $sth->fetchrow_hashref) {
7537 $check_numberpatterns_sth->execute(
7538 $sub->{add1}, $sub->{add1}, $sub->{add2}, $sub->{add2}, $sub->{add3}, $sub->{add3},
7539 $sub->{every1}, $sub->{every1}, $sub->{every2}, $sub->{every2}, $sub->{every3}, $sub->{every3},
7540 $sub->{whenmorethan1}, $sub->{whenmorethan1}, $sub->{whenmorethan2}, $sub->{whenmorethan2},
7541 $sub->{whenmorethan3}, $sub->{whenmorethan3}, $sub->{setto1}, $sub->{setto1}, $sub->{setto2},
7542 $sub->{setto2}, $sub->{setto3}, $sub->{setto3}, $sub->{numberingmethod}, $sub->{numberingmethod}
7544 my $p = $check_numberpatterns_sth->fetchrow_hashref;
7546 # Pattern already exists, link to it
7547 $update_subscription_sth->execute($p->{id},
7548 $frequencies_mapping->{$sub->{periodicity}},
7549 $sub->{subscriptionid});
7551 # Create a new numbering pattern for this subscription
7552 my $ok = $insert_numberpatterns_sth->execute(
7553 "Backup pattern $i", 4+$i, "Automatically created pattern by updatedatabase", $sub->{numberingmethod},
7554 "X", $sub->{add1}, $sub->{every1}, $sub->{whenmorethan1}, $sub->{setto1}, undef,
7555 "Y", $sub->{add2}, $sub->{every2}, $sub->{whenmorethan2}, $sub->{setto2}, undef,
7556 "Z", $sub->{add3}, $sub->{every3}, $sub->{whenmorethan3}, $sub->{setto3}, undef
7559 my $id = $dbh->last_insert_id(undef, undef, 'subscription_numberpatterns', undef);
7560 # Link to subscription_numberpatterns and subscription_frequencies
7561 $update_subscription_sth->execute($id,
7562 $frequencies_mapping->{$sub->{periodicity}},
7563 $sub->{subscriptionid});
7569 # Remove now useless columns
7571 ALTER TABLE subscription
7572 DROP COLUMN numberingmethod,
7575 DROP COLUMN whenmorethan1,
7579 DROP COLUMN whenmorethan2,
7583 DROP COLUMN whenmorethan3,
7586 DROP COLUMN issuesatonce,
7587 DROP COLUMN hemisphere,
7588 ADD COLUMN countissuesperunit INTEGER NOT NULL DEFAULT 1 AFTER periodicity,
7589 ADD COLUMN skip_serialseq BOOLEAN NOT NULL DEFAULT 0 AFTER irregularity,
7590 ADD COLUMN locale VARCHAR(80) DEFAULT NULL AFTER numberpattern,
7591 ADD CONSTRAINT subscription_ibfk_1 FOREIGN KEY (periodicity) REFERENCES subscription_frequencies (id) ON DELETE SET NULL ON UPDATE CASCADE,
7592 ADD CONSTRAINT subscription_ibfk_2 FOREIGN KEY (numberpattern) REFERENCES subscription_numberpatterns (id) ON DELETE SET NULL ON UPDATE CASCADE
7595 # Set firstacquidate if not already set (firstacquidate is now mandatory)
7596 my $get_first_planneddate_sth = $dbh->prepare(qq|
7599 WHERE subscriptionid = ?
7603 my $update_firstacquidate_sth = $dbh->prepare(qq|
7605 SET firstacquidate = ?
7606 WHERE subscriptionid = ?
7609 sanitize_zero_date('subscription', 'firstacquidate');
7610 my $get_subscriptions_sth = $dbh->prepare(qq|
7611 SELECT subscriptionid, startdate
7613 WHERE firstacquidate IS NULL
7614 OR firstacquidate = '0000-00-00'
7616 $get_subscriptions_sth->execute;
7617 while ( my ($subscriptionid, $startdate) = $get_subscriptions_sth->fetchrow ) {
7618 # Try to get the planned date of the first serial
7619 $get_first_planneddate_sth->execute($subscriptionid);
7620 my ($first_planneddate) = $get_first_planneddate_sth->fetchrow;
7621 if ($first_planneddate and $first_planneddate =~ /^\d{4}-\d{2}-\d{2}$/) {
7622 $update_firstacquidate_sth->execute($first_planneddate, $subscriptionid);
7624 # Defaults to subscription start date
7625 $update_firstacquidate_sth->execute($startdate, $subscriptionid);
7629 print "Upgrade to $DBversion done (Bug 7688: add subscription_frequencies and subscription_numberpatterns tables)\n";
7630 SetVersion($DBversion);
7633 $DBversion = "3.13.00.034";
7634 if ( CheckVersion($DBversion) ) {
7636 ALTER TABLE `import_batches`
7637 CHANGE `item_action` `item_action`
7638 ENUM( 'always_add', 'add_only_for_matches', 'add_only_for_new', 'ignore', 'replace' )
7639 NOT NULL DEFAULT 'always_add'
7641 print "Upgrade to $DBversion done (Bug 7131 - way to overlay items in in marc import)\n";
7642 SetVersion($DBversion);
7645 $DBversion ="3.13.00.035";
7646 if ( CheckVersion($DBversion) ) {
7648 CREATE TABLE borrower_debarments (
7649 borrower_debarment_id int(11) NOT NULL AUTO_INCREMENT,
7650 borrowernumber int(11) NOT NULL,
7651 expiration date DEFAULT NULL,
7652 `type` enum('SUSPENSION','OVERDUES','MANUAL') NOT NULL DEFAULT 'MANUAL',
7654 manager_id int(11) DEFAULT NULL,
7655 created timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
7656 updated timestamp NULL DEFAULT NULL,
7657 PRIMARY KEY (borrower_debarment_id),
7658 KEY borrowernumber (borrowernumber) ,
7659 CONSTRAINT `borrower_debarments_ibfk_1` FOREIGN KEY (`borrowernumber`) REFERENCES `borrowers` (`borrowernumber`)
7660 ON DELETE CASCADE ON UPDATE CASCADE
7661 ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
7664 # debarments with end date
7666 INSERT INTO borrower_debarments ( borrowernumber, expiration, comment ) SELECT borrowernumber, debarred, debarredcomment FROM borrowers WHERE debarred IS NOT NULL AND debarred <> '9999-12-31'
7668 # debarments with no end date
7670 INSERT INTO borrower_debarments ( borrowernumber, comment ) SELECT borrowernumber, debarredcomment FROM borrowers WHERE debarred = '9999-12-31'
7674 INSERT IGNORE INTO systempreferences (variable,value,explanation,type) VALUES
7675 ('AutoRemoveOverduesRestrictions','0','Defines whether an OVERDUES debarment should be lifted automatically if all overdue items are returned by the patron.','YesNo')
7678 print "Upgrade to $DBversion done (Bug 2720 - Overdues which debar automatically should undebar automatically when returned)\n";
7679 SetVersion($DBversion);
7682 $DBversion = "3.13.00.036";
7683 if ( CheckVersion($DBversion) ) {
7685 INSERT INTO systempreferences (variable, value, explanation, options, type)
7686 VALUES ('StaffDetailItemSelection', '1', 'Enable item selection in record detail page', NULL, 'YesNo')
7688 print "Upgrade to $DBversion done (Add system preference StaffDetailItemSelection)\n";
7689 SetVersion($DBversion);
7692 $DBversion = "3.13.00.037";
7693 if ( CheckVersion($DBversion) ) {
7694 #add phone if it is not there already (explains the ignore option)
7696 INSERT IGNORE INTO message_transport_types (message_transport_type) values ('phone');
7698 print "Upgrade to $DBversion done (Bug 10572: Add phone to message_transport_types table for new installs)\n";
7699 SetVersion($DBversion);
7702 $DBversion = "3.13.00.038";
7703 if ( CheckVersion($DBversion) ) {
7704 $dbh->do("INSERT INTO permissions (module_bit, code, description) VALUES(15, 'superserials', 'Manage subscriptions from any branch (only applies when IndependentBranches is used)')");
7705 print "Upgrade to $DBversion done (Bug 8435: Add superserials permission)\n";
7706 SetVersion($DBversion);
7709 $DBversion = "3.13.00.039";
7710 if ( CheckVersion($DBversion) ) {
7712 ALTER TABLE aqbasket ADD branch varchar(10) default NULL
7715 ALTER TABLE aqbasket
7716 ADD CONSTRAINT aqbasket_ibfk_4 FOREIGN KEY (branch)
7717 REFERENCES branches (branchcode)
7718 ON UPDATE CASCADE ON DELETE SET NULL
7721 DROP TABLE IF EXISTS aqbasketusers
7724 CREATE TABLE aqbasketusers (
7725 basketno int(11) NOT NULL,
7726 borrowernumber int(11) NOT NULL,
7727 PRIMARY KEY (basketno,borrowernumber),
7728 CONSTRAINT aqbasketusers_ibfk_1 FOREIGN KEY (basketno) REFERENCES aqbasket (basketno) ON DELETE CASCADE ON UPDATE CASCADE,
7729 CONSTRAINT aqbasketusers_ibfk_2 FOREIGN KEY (borrowernumber) REFERENCES borrowers (borrowernumber) ON DELETE CASCADE ON UPDATE CASCADE
7730 ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
7733 INSERT INTO permissions (module_bit, code, description)
7734 VALUES (11, 'order_manage_all', 'Manage all orders and baskets, regardless of restrictions on them')
7737 print "Upgrade to $DBversion done (Add branch and users list to baskets. "
7738 . "New permission order_manage_all)\n";
7739 SetVersion($DBversion);
7742 $DBversion = "3.13.00.040";
7743 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
7744 $dbh->do("CREATE TABLE IF NOT EXISTS marc_modification_templates (
7745 template_id int(11) NOT NULL auto_increment,
7747 PRIMARY KEY (template_id)
7748 ) ENGINE=InnoDB DEFAULT CHARSET=utf8;"
7752 CREATE TABLE IF NOT EXISTS marc_modification_template_actions (
7753 mmta_id int(11) NOT NULL auto_increment,
7754 template_id int(11) NOT NULL,
7755 ordering int(3) NOT NULL,
7756 action enum('delete_field','update_field','move_field','copy_field') NOT NULL,
7757 field_number smallint(6) NOT NULL default '0',
7758 from_field varchar(3) NOT NULL,
7759 from_subfield varchar(1) NULL,
7760 field_value varchar(100) default NULL,
7761 to_field varchar(3) default NULL,
7762 to_subfield varchar(1) default NULL,
7763 to_regex_search text,
7764 to_regex_replace text,
7765 to_regex_modifiers varchar(8) default '',
7766 conditional enum('if','unless') default NULL,
7767 conditional_field varchar(3) default NULL,
7768 conditional_subfield varchar(1) default NULL,
7769 conditional_comparison enum('exists','not_exists','equals','not_equals') default NULL,
7770 conditional_value text,
7771 conditional_regex tinyint(1) NOT NULL default '0',
7773 PRIMARY KEY (mmta_id),
7774 CONSTRAINT `mmta_ibfk_1` FOREIGN KEY (`template_id`) REFERENCES `marc_modification_templates` (`template_id`) ON DELETE CASCADE ON UPDATE CASCADE
7775 ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
7778 $dbh->do("INSERT INTO permissions (module_bit, code, description) VALUES ('13', 'marc_modification_templates', 'Manage marc modification templates')");
7780 print "Upgrade to $DBversion done ( Bug 8015: Added tables for MARC Modification Framework )\n";
7781 SetVersion($DBversion);
7784 $DBversion = "3.13.00.041";
7785 if(CheckVersion($DBversion)) {
7787 INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES('AcqItemSetSubfieldsWhenReceived','','Set subfields for item when items are created when receiving (e.g. o=5|a="foo bar")','','Free');
7789 print "Upgrade to $DBversion done (Bug 10986: Added AcqItemSetSubfieldsWhenReceived syspref)\n";
7790 SetVersion($DBversion);
7793 $DBversion = "3.13.00.042";
7794 if(CheckVersion($DBversion)) {
7795 print "Upgrade to $DBversion done (Koha 3.14 beta)\n";
7796 SetVersion($DBversion);
7799 $DBversion = "3.13.00.043";
7800 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
7801 $dbh->do("INSERT IGNORE INTO systempreferences (variable,value,options,explanation,type) VALUES('SearchEngine','Zebra','Solr|Zebra','Search Engine','Choice')");
7802 print "Upgrade to $DBversion done (Bug 11196: Add system preference SearchEngine if missing )\n";
7803 SetVersion($DBversion);
7806 $DBversion = "3.14.00.000";
7807 if ( CheckVersion($DBversion) ) {
7808 print "Upgrade to $DBversion done (3.14.0 release)\n";
7809 SetVersion ($DBversion);
7812 $DBversion = '3.15.00.000';
7813 if ( CheckVersion($DBversion) ) {
7814 print "Upgrade to $DBversion done (the road goes ever on)\n";
7815 SetVersion ($DBversion);
7818 $DBversion = "3.15.00.001";
7819 if ( CheckVersion($DBversion) ) {
7820 $dbh->do("UPDATE systempreferences SET value='clear' where variable = 'CircAutoPrintQuickSlip' and value = '0'");
7821 $dbh->do("UPDATE systempreferences SET value='qslip' where variable = 'CircAutoPrintQuickSlip' and value = '1'");
7822 $dbh->do("UPDATE systempreferences SET explanation = 'Choose what should happen when an empty barcode field is submitted in circulation: Display a print quick slip window, Display a print slip window or Clear the screen.', type = 'Choice' where variable = 'CircAutoPrintQuickSlip'");
7823 print "Upgrade to $DBversion done (Bug 11040: Add option to print full slip when checking out a null barcode)\n";
7824 SetVersion($DBversion);
7827 $DBversion = "3.15.00.002";
7828 if(CheckVersion($DBversion)) {
7829 $dbh->do("ALTER TABLE deleteditems MODIFY materials text;");
7830 print "Upgrade to $DBversion done (Bug 11275: alter deleteditems.materials from varchar(10) to text)\n";
7831 SetVersion($DBversion);
7834 $DBversion = "3.15.00.003";
7835 if ( CheckVersion($DBversion) ) {
7838 SET description = ''
7839 WHERE description IN (
7844 ' Account Management fee',
7845 'Payment,thanks', 'Payment,thanks - ',
7849 print "Upgrade to $DBversion done (Bug 2546: Update fine descriptions)\n";
7850 SetVersion($DBversion);
7853 $DBversion = "3.15.00.004";
7854 if ( CheckVersion($DBversion) ) {
7855 if ( C4::Context->preference("marcflavour") eq 'MARC21' ) {
7857 INSERT IGNORE INTO marc_subfield_structure (tagfield, tagsubfield, liblibrarian, libopac, repeatable, mandatory,
7858 kohafield, tab, authorised_value, authtypecode, value_builder, isurl, hidden, frameworkcode, seealso, link,
7859 defaultvalue) VALUES
7860 ('015', 'q', 'Qualifying information', 'Qualifying information', 1, 0, '', 0, '', '', '', 0, 0, '', '', '', NULL),
7861 ('020', 'q', 'Qualifying information', 'Qualifying information', 1, 0, '', 0, '', '', '', 0, 0, '', '', '', NULL),
7862 ('024', 'q', 'Qualifying information', 'Qualifying information', 1, 0, '', 0, '', '', '', 0, 0, '', '', '', NULL),
7863 ('027', 'q', 'Qualifying information', 'Qualifying information', 1, 0, '', 0, '', '', '', 0, 0, '', '', '', NULL),
7864 ('800', '7', 'Control subfield', 'Control subfield', 0, 0, '', 8, '', '', '', NULL, -6, '', '', '', NULL),
7865 ('810', '7', 'Control subfield', 'Control subfield', 0, 0, '', 8, '', '', '', NULL, -6, '', '', '', NULL),
7866 ('811', '7', 'Control subfield', 'Control subfield', 0, 0, '', 8, '', '', '', NULL, -6, '', '', '', NULL),
7867 ('830', '7', 'Control subfield', 'Control subfield', 0, 0, '', 8, '', '', '', NULL, -6, '', '', '', NULL);
7870 INSERT IGNORE INTO auth_subfield_structure (authtypecode, tagfield, tagsubfield, liblibrarian, libopac, repeatable,
7871 mandatory, tab, authorised_value, value_builder, seealso, isurl, hidden, linkid, kohafield, frameworkcode) VALUES
7872 ('', '020', 'q', 'Qualifying information', 'Qualifying information', 1, 0, 0, NULL, NULL, NULL, 0, 0, '', '', ''),
7873 ('', '024', 'q', 'Qualifying information', 'Qualifying information', 1, 0, 0, NULL, NULL, NULL, 0, 0, '', '', '');
7876 print "Upgrade to $DBversion done (Bug 10970 - Update MARC21 frameworks to Update Nr. 17 - DB update)\n";
7877 SetVersion($DBversion);
7880 $DBversion = "3.15.00.005";
7881 if ( CheckVersion($DBversion) ) {
7882 $dbh->do("INSERT INTO systempreferences (variable,value,options,explanation,type) VALUES('AcquisitionDetails', '1', '', 'Hide/Show acquisition details on the biblio detail page.', 'YesNo');");
7883 print "Upgrade to $DBversion done (Bug 8230: Add AcquisitionDetails system preference)\n";
7884 SetVersion ($DBversion);
7887 $DBversion = "3.15.00.006";
7888 if(CheckVersion($DBversion)) {
7890 ALTER TABLE `borrowers`
7891 ADD KEY `surname_idx` (`surname`(255)),
7892 ADD KEY `firstname_idx` (`firstname`(255)),
7893 ADD KEY `othernames_idx` (`othernames`(255))
7895 print "Upgrade to $DBversion done (Bug 11249 - Add DB indexes on borrower names)\n";
7896 SetVersion($DBversion);
7899 $DBversion = "3.15.00.007";
7900 if ( CheckVersion($DBversion) ) {
7901 $dbh->do("ALTER TABLE items ADD itemlost_on DATETIME NULL AFTER itemlost");
7902 $dbh->do("ALTER TABLE items ADD withdrawn_on DATETIME NULL AFTER withdrawn");
7903 $dbh->do("ALTER TABLE deleteditems ADD itemlost_on DATETIME NULL AFTER itemlost");
7904 $dbh->do("ALTER TABLE deleteditems ADD withdrawn_on DATETIME NULL AFTER withdrawn");
7905 print "Upgrade to $DBversion done (Bug 9673 - Track when items are marked as lost or withdrawn)\n";
7906 SetVersion ($DBversion);
7909 $DBversion = "3.15.00.008";
7910 if ( CheckVersion($DBversion) ) {
7912 ALTER TABLE collections_tracking CHANGE ctId collections_tracking_id integer(11) NOT NULL auto_increment;
7914 print "Upgrade to $DBversion done (Bug 11384) - change name of collections_tracker.ctId column)\n";
7915 SetVersion ($DBversion);
7918 $DBversion = "3.15.00.009";
7919 if ( CheckVersion($DBversion) ) {
7921 ALTER TABLE suggestions MODIFY suggesteddate DATE NOT NULL
7923 print "Upgrade to $DBversion done (Bug 11391) - drop default value on suggestions.suggesteddate column)\n";
7924 SetVersion ($DBversion);
7927 $DBversion = "3.15.00.010";
7928 if(CheckVersion($DBversion)) {
7929 $dbh->do("ALTER TABLE deleteditems DROP COLUMN marc");
7930 print "Upgrade to $DBversion done (Bug 6331: remove obsolete column in deleteditems.marc)\n";
7931 SetVersion ($DBversion);
7934 $DBversion = "3.15.00.011";
7935 if(CheckVersion($DBversion)) {
7936 $dbh->do("UPDATE marc_subfield_structure SET maxlength=9999 WHERE maxlength IS NULL OR maxlength=0;");
7937 print "Upgrade to $DBversion done (Bug 8018: set 9999 as default max length for subfields)\n";
7938 SetVersion ($DBversion);
7941 $DBversion = "3.15.00.012";
7942 if ( CheckVersion($DBversion) ) {
7944 INSERT INTO permissions (module_bit, code, description) VALUES ( 1, 'force_checkout', 'Force checkout if a limitation exists')
7947 INSERT INTO permissions (module_bit, code, description) VALUES ( 1, 'manage_restrictions', 'Manage restrictions for accounts')
7950 INSERT INTO user_permissions (borrowernumber, module_bit, code)
7951 SELECT user_permissions.borrowernumber, 1, 'force_checkout'
7952 FROM user_permissions
7953 LEFT JOIN borrowers USING(borrowernumber)
7954 WHERE borrowers.flags & (1 << 1)
7957 INSERT INTO user_permissions (borrowernumber, module_bit, code)
7958 SELECT user_permissions.borrowernumber, 1, 'manage_restrictions'
7959 FROM user_permissions
7960 LEFT JOIN borrowers USING(borrowernumber)
7961 WHERE borrowers.flags & (1 << 1)
7964 print "Upgrade to $DBversion done (Bug 10863 - Add permissions force_checkout and manage_restrictions)\n";
7965 SetVersion($DBversion);
7968 $DBversion = "3.15.00.013";
7969 if(CheckVersion($DBversion)) {
7971 UPDATE systempreferences
7972 SET explanation = 'Upon receiving items, update their subfields if they were created when placing an order (e.g. o=5|a="foo bar")'
7973 WHERE variable = "AcqItemSetSubfieldsWhenReceived"
7977 UPDATE systempreferences
7979 WHERE variable = "AcqItemSetSubfieldsWhenReceived"
7982 print "Upgrade to $DBversion done (Bug 11237: Update explanation and default value for AcqItemSetSubfieldsWhenReceived syspref)\n";
7983 SetVersion($DBversion);
7986 $DBversion = "3.15.00.014";
7987 if (CheckVersion($DBversion)) {
7988 $dbh->do("INSERT INTO systempreferences (variable,value,options,explanation,type) VALUES('SelfCheckReceiptPrompt', '1', 'NULL', 'If ON, print receipt dialog pops up when self checkout is finished.', 'YesNo');");
7989 print "Upgrade to $DBversion done (Bug 11415: add system preference for automatic self checkout receipt printing)\n";
7990 SetVersion($DBversion);
7993 $DBversion = "3.15.00.015";
7994 if (CheckVersion($DBversion)) {
7995 $dbh->do("INSERT INTO systempreferences ( variable, value, options, explanation, type ) VALUES
7996 ('OpacSuggestionManagedBy',1,'','Show the name of the staff member who managed a suggestion in OPAC','YesNo');");
7997 print "Upgrade to $DBversion done (Bug 10907: Add OpacSuggestionManagedBy system preference)\n";
7998 SetVersion($DBversion);
8001 $DBversion = "3.15.00.016";
8002 if (CheckVersion($DBversion)) {
8003 $dbh->do("ALTER TABLE biblioitems CHANGE url url TEXT NULL DEFAULT NULL");
8004 $dbh->do("ALTER TABLE deletedbiblioitems CHANGE url url TEXT NULL DEFAULT NULL");
8005 print "Upgrade to $DBversion done (Bug 11268 - Biblioitems URL field is too small for some URLs)\n";
8006 SetVersion($DBversion);
8009 $DBversion = "3.15.00.017";
8010 if(CheckVersion($DBversion)) {
8012 UPDATE systempreferences
8013 SET explanation = 'Define the contents of UNIMARC authority control field 100 position 08-35'
8014 WHERE variable = "UNIMARCAuthorityField100"
8017 UPDATE systempreferences
8018 SET explanation = 'Define the contents of MARC21 authority control field 008 position 06-39'
8019 WHERE variable = "MARCAuthorityControlField008"
8022 UPDATE systempreferences
8023 SET explanation = 'Define MARC Organization Code for MARC21 records - http://www.loc.gov/marc/organizations/orgshome.html'
8024 WHERE variable = "MARCOrgCode"
8026 print "Upgrade to $DBversion done (Bug 11611 - fix possible confusion between UNIMARC and MARC21 in some sysprefs)\n";
8027 SetVersion($DBversion);
8030 $DBversion = "3.15.00.018";
8031 if ( CheckVersion($DBversion) ) {
8032 $dbh->{AutoCommit} = 0;
8033 $dbh->{RaiseError} = 1;
8036 $dbh->selectcol_arrayref(q|SELECT COUNT(*) FROM roadtype|);
8039 my $av_added = $dbh->do(q|
8040 INSERT INTO authorised_values(category, authorised_value, lib, lib_opac)
8041 SELECT 'ROADTYPE', roadtypeid, road_type, road_type
8045 my $rt_deleted = $dbh->do(q|
8046 DELETE FROM roadtype
8049 if ( $av_added == $rt_deleted or $rt_deleted eq "0E0" ) {
8051 DROP TABLE roadtype;
8054 print "Upgrade to $DBversion done (Bug 7372: Move road types from the roadtype table to the ROADTYPE authorised values)\n";
8055 SetVersion($DBversion);
8057 print "Upgrade to $DBversion failed (Bug 7372: Move road types from the roadtype table to the ROADTYPE authorised values.\nTransaction aborted because $@\n)";
8061 $dbh->{AutoCommit} = 1;
8062 $dbh->{RaiseError} = 0;
8065 $DBversion = "3.15.00.019";
8066 if ( CheckVersion($DBversion) ) {
8067 $dbh->do("INSERT IGNORE INTO systempreferences (variable,value,options,explanation,type) VALUES('OpacMaxItemsToDisplay','50','','Max items to display at the OPAC on a biblio detail','Integer')");
8068 print "Upgrade to $DBversion done (Bug 11256: Add system preference OpacMaxItemsToDisplay)\n";
8069 SetVersion($DBversion);
8072 $DBversion = "3.15.00.020";
8073 if ( CheckVersion($DBversion) ) {
8075 INSERT IGNORE INTO systempreferences (variable,value,options,explanation,type) VALUES('MaxItemsForBatch','1000',NULL,'Max number of items record to process in a batch (modification or deletion)','Integer')
8077 print "Upgrade to $DBversion done (Bug 11343: Add system preference MaxItemsForBatch )\n";
8078 SetVersion($DBversion);
8081 $DBversion = "3.15.00.021";
8082 if(CheckVersion($DBversion)) {
8084 ALTER TABLE `action_logs`
8086 ADD KEY `timestamp_idx` (`timestamp`),
8087 ADD KEY `user_idx` (`user`),
8088 ADD KEY `module_idx` (`module`(255)),
8089 ADD KEY `action_idx` (`action`(255)),
8090 ADD KEY `object_idx` (`object`),
8091 ADD KEY `info_idx` (`info`(255))
8093 print "Upgrade to $DBversion done (Bug 3445: Add indexes to action_logs table)\n";
8094 SetVersion($DBversion);
8097 $DBversion = "3.15.00.022";
8098 if (CheckVersion($DBversion)) {
8100 DELETE FROM systempreferences WHERE variable= "memberofinstitution"
8102 print "Upgrade to $DBversion done (Bug 11751: Remove memberofinstitytion system preference)\n";
8103 SetVersion($DBversion);
8106 $DBversion = "3.15.00.023";
8107 if ( CheckVersion($DBversion) ) {
8109 INSERT INTO systempreferences (variable,value,options,explanation,type)
8110 VALUES('CardnumberLength', '', '', 'Set a length for card numbers.', 'Free');
8112 print "Upgrade to $DBversion done (Bug 10861: Add CardnumberLength syspref)\n";
8113 SetVersion ($DBversion);
8116 $DBversion = "3.15.00.024";
8117 if ( CheckVersion($DBversion) ) {
8119 DELETE FROM systempreferences WHERE variable = 'NoZebraIndexes'
8121 print "Upgrade to $DBversion done (Bug 10012 - remove last vestiges of NoZebra)\n";
8122 SetVersion($DBversion);
8125 $DBversion = "3.15.00.025";
8126 if ( CheckVersion($DBversion) ) {
8128 DROP TABLE aqorderdelivery;
8130 print "Upgrade to $DBversion done (Bug 11928 - remove unused table)\n";
8131 SetVersion($DBversion);
8134 $DBversion = "3.15.00.026";
8135 if ( CheckVersion($DBversion) ) {
8137 UPDATE language_descriptions SET description = 'Հայերեն' WHERE subtag = 'hy' AND lang = 'hy';
8139 print "Upgrade to $DBversion done (Bug 11973 - Fix Armenian language description)\n";
8140 SetVersion($DBversion);
8143 $DBversion = "3.15.00.027";
8144 if (CheckVersion($DBversion)) {
8146 ALTER TABLE opac_news ADD branchcode varchar(10) DEFAULT NULL
8148 ADD CONSTRAINT opac_news_branchcode_ibfk
8149 FOREIGN KEY (branchcode)
8150 REFERENCES branches (branchcode)
8151 ON DELETE CASCADE ON UPDATE CASCADE;
8153 print "Upgrade to $DBversion done (Bug 7567: Add branchcode to opac_news)\n";
8154 SetVersion($DBversion);
8157 $DBversion = "3.15.00.028";
8158 if(CheckVersion($DBversion)) {
8160 ALTER TABLE issuingrules ADD norenewalbefore int(4) default NULL AFTER renewalperiod
8162 print "Upgrade to $DBversion done (Bug 7413: Allow OPAC renewal x days before due date)\n";
8163 SetVersion($DBversion);
8166 $DBversion = "3.15.00.029";
8167 if ( CheckVersion($DBversion) ) {
8169 UPDATE borrower_debarments SET expiration = NULL WHERE expiration = '9999-12-31'
8171 print "Upgrade to $DBversion done (Bug 11846 - correct borrower_debarments with expiration 9999-12-31)\n";
8172 SetVersion($DBversion);
8175 $DBversion = "3.15.00.030";
8176 if(CheckVersion($DBversion)) {
8178 INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES ('OPACMySummaryNote','','','Note to display on the patron summary page. This note only appears if the patron is connected.','Free')
8180 print "Upgrade to $DBversion done (Bug 12052: Add OPACMySummaryNote syspref)\n";
8181 SetVersion($DBversion);
8184 $DBversion = "3.15.00.031";
8185 if ( CheckVersion($DBversion) ) {
8186 $dbh->do("INSERT INTO permissions (module_bit, code, description) VALUES ('10', 'writeoff', 'Write off fines and fees')");
8187 $dbh->do("INSERT INTO permissions (module_bit, code, description) VALUES ('10', 'remaining_permissions', 'Remaining permissions for managing fines and fees')");
8188 print "Upgrade to $DBversion done (Bug 9448 - Add separate permission for writing off fees)\n";
8189 SetVersion ($DBversion);
8192 $DBversion = "3.15.00.032";
8193 if ( CheckVersion($DBversion) ) {
8194 $dbh->do("ALTER TABLE aqorders CHANGE notes order_internalnote MEDIUMTEXT;");
8195 $dbh->do("ALTER TABLE aqorders ADD COLUMN order_vendornote MEDIUMTEXT AFTER order_internalnote;");
8196 print "Upgrade to $DBversion done (Bug 9416 - In each order, add a new note made for the vendor)\n";
8197 SetVersion ($DBversion);
8200 $DBversion = "3.15.00.033";
8201 if ( CheckVersion($DBversion) ) {
8202 $dbh->do("INSERT IGNORE INTO systempreferences (variable,value,options,explanation,type) VALUES ('NoLoginInstructions', '', '60|10', 'Instructions to display on the OPAC login form when a patron is not logged in', 'Textarea')");
8203 print "Upgrade to $DBversion done (Bug 10951: Add NoLoginInstructions pref)\n";
8204 SetVersion($DBversion);
8207 $DBversion = "3.15.00.034";
8208 if ( CheckVersion($DBversion) ) {
8209 $dbh->do("INSERT INTO systempreferences (variable,value,options,explanation,type) VALUES('AdvancedSearchLanguages','','','ISO 639-2 codes of languages you wish to see appear as an advanced search option. Example: eng|fra|ita','Textarea')");
8210 print "Upgrade to $DBversion done (Bug 10986: system preferences to limit languages in advanced search )\n";
8211 SetVersion ($DBversion);
8214 $DBversion = "3.15.00.035";
8215 if ( CheckVersion($DBversion) ) {
8216 #insert a notice for sharing a list and accepting a share
8218 INSERT INTO letter (module, code, branchcode, name, is_html, title, content)
8219 VALUES ( 'members', 'SHARE_INVITE', '', 'Invitation for sharing a list', '0', 'Share list <<listname>>', 'Dear patron,
8221 One of our patrons, <<borrowers.firstname>> <<borrowers.surname>>, invites you to share a list <<listname>> in our library catalog.
8223 To access this shared list, please click on the following URL or copy-and-paste it into your browser address bar.
8227 In case you are not a patron in our library or do not want to accept this invitation, please ignore this mail. Note also that this invitation expires within two weeks.
8234 INSERT INTO letter (module, code, branchcode, name, is_html, title, content)
8235 VALUES ( 'members', 'SHARE_ACCEPT', '', 'Notification about an accepted share', '0', 'Share on list <<listname>> accepted', 'Dear patron,
8237 We want to inform you that <<borrowers.firstname>> <<borrowers.surname>> accepted your invitation to share your list <<listname>> in our library catalog.
8243 print "Upgrade to $DBversion done (Bug 9032: Share a list)\n";
8244 SetVersion($DBversion);
8247 $DBversion = "3.15.00.036";
8248 if ( CheckVersion($DBversion) ) {
8250 INSERT IGNORE INTO systempreferences (variable,value,explanation,options,type)
8251 VALUES('AllowMultipleIssuesOnABiblio',1,'Allow/Don\'t allow patrons to check out multiple items from one biblio','','YesNo')
8254 print "Upgrade to $DBversion done (Bug 10859 - Add system preference AllowMultipleIssuesOnABiblio)\n";
8255 SetVersion($DBversion);
8258 $DBversion = "3.15.00.037";
8259 if(CheckVersion($DBversion)) {
8261 ALTER TABLE itemtypes ADD sip_media_type VARCHAR( 3 ) DEFAULT NULL AFTER checkinmsgtype
8264 INSERT INTO authorised_values (category, authorised_value, lib) VALUES
8265 ('SIP_MEDIA_TYPE', '000', 'Other'),
8266 ('SIP_MEDIA_TYPE', '001', 'Book'),
8267 ('SIP_MEDIA_TYPE', '002', 'Magazine'),
8268 ('SIP_MEDIA_TYPE', '003', 'Bound journal'),
8269 ('SIP_MEDIA_TYPE', '004', 'Audio tape'),
8270 ('SIP_MEDIA_TYPE', '005', 'Video tape'),
8271 ('SIP_MEDIA_TYPE', '006', 'CD/CDROM'),
8272 ('SIP_MEDIA_TYPE', '007', 'Diskette'),
8273 ('SIP_MEDIA_TYPE', '008', 'Book with diskette'),
8274 ('SIP_MEDIA_TYPE', '009', 'Book with CD'),
8275 ('SIP_MEDIA_TYPE', '010', 'Book with audio tape')
8277 print "Upgrade to $DBversion done (Bug 11351 - Add support for SIP2 media type)\n";
8278 SetVersion($DBversion);
8281 $DBversion = '3.15.00.038';
8282 if ( CheckVersion($DBversion) ) {
8284 INSERT INTO systempreferences (
8292 'DisplayLibraryFacets', 'holding', 'home|holding|both', 'Defines which library facets to display.', 'Choice'
8295 print "Upgrade to $DBversion done (Bug 11334 - Add facet for home library)\n";
8296 SetVersion ($DBversion);
8299 $DBversion = "3.15.00.039";
8300 if ( CheckVersion($DBversion) ) {
8303 ALTER TABLE letter ADD COLUMN message_transport_type VARCHAR(20) NOT NULL DEFAULT 'email' AFTER content
8307 ALTER TABLE letter ADD CONSTRAINT message_transport_type_fk FOREIGN KEY (message_transport_type) REFERENCES message_transport_types(message_transport_type) ON DELETE CASCADE ON UPDATE CASCADE
8311 ALTER TABLE letter DROP PRIMARY KEY, ADD PRIMARY KEY (`module`,`code`,`branchcode`, message_transport_type);
8315 CREATE TABLE overduerules_transport_types(
8316 id INT(11) NOT NULL AUTO_INCREMENT,
8317 branchcode varchar(10) NOT NULL DEFAULT '',
8318 categorycode VARCHAR(10) NOT NULL DEFAULT '',
8319 letternumber INT(1) NOT NULL DEFAULT 1,
8320 message_transport_type VARCHAR(20) NOT NULL DEFAULT 'email',
8322 CONSTRAINT overduerules_fk FOREIGN KEY (branchcode, categorycode) REFERENCES overduerules (branchcode, categorycode) ON DELETE CASCADE ON UPDATE CASCADE,
8323 CONSTRAINT mtt_fk FOREIGN KEY (message_transport_type) REFERENCES message_transport_types (message_transport_type) ON DELETE CASCADE ON UPDATE CASCADE
8324 ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
8327 my $sth = $dbh->prepare( q{
8328 SELECT * FROM overduerules;
8332 my $sth_insert_mtt = $dbh->prepare( q{
8333 INSERT INTO overduerules_transport_types (branchcode, categorycode, letternumber, message_transport_type) VALUES ( ?, ?, ?, ? )
8335 while ( my $row = $sth->fetchrow_hashref ) {
8336 my $branchcode = $row->{branchcode};
8337 my $categorycode = $row->{categorycode};
8338 for my $letternumber ( 1 .. 3 ) {
8339 next unless $row->{"letter$letternumber"};
8340 $sth_insert_mtt->execute(
8341 $branchcode, $categorycode, $letternumber, 'email'
8346 print "Upgrade done (Bug 9016: Adds multi transport types management for notices)\n";
8347 SetVersion($DBversion);
8350 $DBversion = "3.15.00.040";
8351 if ( CheckVersion($DBversion) ) {
8353 UPDATE message_transports SET letter_code='HOLD' WHERE letter_code='HOLD_PHONE' OR letter_code='HOLD_PRINT'
8356 UPDATE letter SET code='HOLD', message_transport_type='print' WHERE code='HOLD_PRINT'
8359 UPDATE letter SET code='HOLD', message_transport_type='phone' WHERE code='HOLD_PHONE'
8361 print "Upgrade to $DBversion done (Bug 10845: Multi transport types for holds)\n";
8362 SetVersion($DBversion);
8365 $DBversion = "3.15.00.041";
8366 if ( CheckVersion($DBversion) ) {
8367 my ( $name ) = $dbh->selectrow_array(q|
8368 SELECT name FROM letter WHERE code="HOLD"
8373 message_transport_type="phone",
8375 WHERE code="HOLD_PHONE"
8378 ( $name ) = $dbh->selectrow_array(q|
8379 SELECT name FROM letter WHERE code="PREDUE"
8384 message_transport_type="phone",
8386 WHERE code="PREDUE_PHONE"
8389 ( $name ) = $dbh->selectrow_array(q|
8390 SELECT name FROM letter WHERE code="OVERDUE"
8395 message_transport_type="phone",
8397 WHERE code="OVERDUE_PHONE"
8400 print "Upgrade to $DBversion done (Bug 11867: Update letters *_PHONE)\n";
8401 SetVersion($DBversion);
8404 $DBversion = "3.15.00.042";
8405 if ( CheckVersion($DBversion) ) {
8407 INSERT INTO systempreferences
8408 (variable,value,explanation,options,type)
8410 ('SpecifyReturnDate',0,'Define whether to display \"Specify Return Date\" form in Circulation','','YesNo')
8412 print "Upgrade to $DBversion done (Bug 10694 - Allow arbitrary backdating of returns)\n";
8413 SetVersion($DBversion);
8416 $DBversion = "3.15.00.043";
8417 if ( CheckVersion($DBversion) ) {
8418 $dbh->do("INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES('MarcFieldsToOrder','','Set the mapping values for a new order line created from a MARC record in a staged file. In a YAML format.', NULL, 'textarea')");
8419 print "Upgrade to $DBversion done (Bug 7180: Added MarcFieldsToOrder syspref)\n";
8420 SetVersion ($DBversion);
8423 $DBversion = "3.15.00.044";
8424 if ( CheckVersion($DBversion) ) {
8425 $dbh->do("ALTER TABLE currency ADD isocode VARCHAR(5) default NULL AFTER symbol;");
8426 print "Upgrade to $DBversion done (Added isocode to the currency table)\n";
8427 SetVersion($DBversion);
8430 $DBversion = "3.15.00.045";
8431 if ( CheckVersion($DBversion) ) {
8433 INSERT INTO systempreferences (variable,value,explanation,options,type)
8435 'BlockExpiredPatronOpacActions',
8437 'Set whether an expired patron can perform opac actions such as placing holds or renew books, can be overridden on a per patron-type basis',
8442 $dbh->do("ALTER TABLE `categories` ADD COLUMN `BlockExpiredPatronOpacActions` TINYINT(1) DEFAULT -1 NOT NULL AFTER category_type");
8443 print "Upgraded to $DBversion done (Bug 6739 - expired patrons not blocked from opac actions)\n";
8444 SetVersion ($DBversion);
8447 $DBversion = "3.15.00.046";
8448 if ( CheckVersion($DBversion) ) {
8450 ALTER TABLE search_history ADD COLUMN type VARCHAR(16) NOT NULL DEFAULT 'biblio' AFTER query_cgi
8452 print "Upgrade to $DBversion done (Bug 10807 - Add db field search_history.type)\n";
8453 SetVersion($DBversion);
8456 $DBversion = "3.15.00.047";
8457 if ( CheckVersion($DBversion) ) {
8459 INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES ('EnableSearchHistory','0','','Enable or disable search history','YesNo')
8461 print "Upgrade to $DBversion done (Bug 10862: Add EnableSearchHistory syspref)\n";
8462 SetVersion($DBversion);
8465 $DBversion = "3.15.00.048";
8466 if ( CheckVersion($DBversion) ) {
8467 $dbh->do("INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES ('OpacSuppressionRedirect','1','Redirect the opac detail page for suppressed records to an explanatory page (otherwise redirect to 404 error page)','','YesNo')");
8468 $dbh->do("INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES ('OpacSuppressionMessage', '','Display this message on the redirect page for suppressed biblios','70|10','Textarea')");
8469 print "Upgrade to $DBversion done (Bug 10195: Records hidden with OpacSuppression can still be accessed)\n";
8470 SetVersion($DBversion);
8473 $DBversion = "3.15.00.049";
8474 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
8475 $dbh->do("ALTER TABLE biblioitems DROP INDEX isbn");
8476 $dbh->do("ALTER TABLE biblioitems DROP INDEX issn");
8477 $dbh->do("ALTER TABLE biblioitems DROP INDEX issn_idx");
8478 $dbh->do("ALTER TABLE biblioitems
8479 CHANGE isbn isbn MEDIUMTEXT NULL DEFAULT NULL,
8480 CHANGE issn issn MEDIUMTEXT NULL DEFAULT NULL
8482 $dbh->do("ALTER TABLE biblioitems
8483 ADD INDEX isbn ( isbn ( 255 ) ),
8484 ADD INDEX issn ( issn ( 255 ) )
8487 $dbh->do("ALTER TABLE deletedbiblioitems DROP INDEX isbn");
8488 $dbh->do("ALTER TABLE deletedbiblioitems
8489 CHANGE isbn isbn MEDIUMTEXT NULL DEFAULT NULL,
8490 CHANGE issn issn MEDIUMTEXT NULL DEFAULT NULL
8492 $dbh->do("ALTER TABLE deletedbiblioitems
8493 ADD INDEX isbn ( isbn ( 255 ) )
8496 print "Upgrade to $DBversion done (Bug 5377 - Biblioitems isbn and issn fields too small for multiple ISBN and ISSN)\n";
8497 SetVersion($DBversion);
8500 $DBversion = "3.15.00.050";
8501 if ( CheckVersion($DBversion) ) {
8503 INSERT INTO systempreferences (
8509 'AggressiveMatchOnISBN',
8511 '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',
8516 print "Upgrade to $DBversion done (Bug 10500 - Improve isbn matching when importing records)\n";
8517 SetVersion($DBversion);
8520 $DBversion = "3.15.00.051";
8521 if ( CheckVersion($DBversion) ) {
8522 print "Upgrade to $DBversion done (Koha 3.16 beta)\n";
8523 SetVersion($DBversion);
8526 $DBversion = "3.15.00.052";
8527 if ( CheckVersion($DBversion) ) {
8528 print "Upgrade to $DBversion done (Koha 3.16 RC)\n";
8529 SetVersion($DBversion);
8532 $DBversion = "3.16.00.000";
8533 if ( CheckVersion($DBversion) ) {
8534 print "Upgrade to $DBversion done (3.16.0 release)\n";
8535 SetVersion ($DBversion);
8538 $DBversion = '3.17.00.000';
8539 if ( CheckVersion($DBversion) ) {
8540 print "Upgrade to $DBversion done (there is no time to rest on our laurels)\n";
8541 SetVersion ($DBversion);
8544 $DBversion = '3.17.00.001';
8545 if ( CheckVersion($DBversion) ) {
8546 $dbh->do("UPDATE systempreferences SET variable = 'AuthoritySeparator' WHERE variable = 'authoritysep'");
8547 print "Upgrade to $DBversion done (Bug 10330 - Rename system preference authoritysep to AuthoritySeparator)\n";
8548 SetVersion ($DBversion);
8551 $DBversion = "3.17.00.002";
8552 if (CheckVersion($DBversion)) {
8553 $dbh->do("INSERT INTO systempreferences (variable,value,explanation,type) VALUES('AcqEnableFiles','0','If enabled, allows librarians to upload and attach arbitrary files to invoice records.','YesNo')");
8555 CREATE TABLE IF NOT EXISTS `misc_files` (
8556 `file_id` int(11) NOT NULL AUTO_INCREMENT,
8557 `table_tag` varchar(255) NOT NULL,
8558 `record_id` int(11) NOT NULL,
8559 `file_name` varchar(255) NOT NULL,
8560 `file_type` varchar(255) NOT NULL,
8561 `file_description` varchar(255) DEFAULT NULL,
8562 `file_content` longblob NOT NULL, -- file content
8563 `date_uploaded` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
8564 PRIMARY KEY (`file_id`),
8565 KEY `table_tag` (`table_tag`),
8566 KEY `record_id` (`record_id`)
8567 ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
8569 print "Upgrade to $DBversion done (Bug 3050 - Add an option to upload scanned invoices)\n";
8570 SetVersion($DBversion);
8573 $DBversion = "3.17.00.003";
8574 if (CheckVersion($DBversion)) {
8575 $dbh->do("UPDATE systempreferences SET type = 'Choice', options = '0|1|force' WHERE variable = 'OPACItemHolds'");
8576 print "Upgrade to $DBversion done (Bug 7825 - Changed OPACItemHolds syspref to Choice)\n";
8577 SetVersion($DBversion);
8580 $DBversion = "3.17.00.004";
8581 if (CheckVersion($DBversion)) {
8582 $dbh->do("ALTER TABLE categories ADD default_privacy ENUM( 'default', 'never', 'forever' ) NOT NULL DEFAULT 'default' AFTER category_type");
8583 print "Upgrade to $DBversion done (Bug 6254 - can't set patron privacy by default)\n";
8584 SetVersion($DBversion);
8587 $DBversion = "3.17.00.005";
8588 if (CheckVersion($DBversion)) {
8590 ALTER TABLE issuingrules
8591 ADD maxsuspensiondays INT(11) DEFAULT NULL AFTER finedays;
8593 print "Upgrade to $DBversion done (Bug 12230: Add new issuing rule maxsuspensiondays)\n";
8594 SetVersion($DBversion);
8597 $DBversion = "3.17.00.006";
8598 if ( CheckVersion($DBversion) ) {
8599 $dbh->do("INSERT INTO systempreferences (variable,value,options,explanation,type) VALUES ('OpacLocationBranchToDisplay', 'holding', 'holding|home|both', 'In the OPAC, under location show which branch for Location in the record details.', 'Choice')");
8600 $dbh->do("INSERT INTO systempreferences (variable,value,options,explanation,type) VALUES ('OpacLocationBranchToDisplayShelving', 'holding', 'holding|home|both', 'In the OPAC, display the shelving location under which which column', 'Choice')");
8601 print "Upgrade to $DBversion done (Bug 7720 - Ambiguity in OPAC Details location.)\n";
8602 SetVersion($DBversion);
8605 $DBversion = "3.17.00.007";
8606 if (CheckVersion($DBversion)) {
8607 $dbh->do("INSERT INTO systempreferences (variable,value,options,explanation,type) VALUES('UpdateNotForLoanStatusOnCheckin', '', 'NULL', 'This is a list of value pairs. When an item is checked in, if the not for loan value on the left matches the items not for loan value it will be updated to the right-hand value. E.g. ''-1: 0'' will cause an item that was set to ''Ordered'' to now be available for loan. Each pair of values should be on a separate line.', 'Free');");
8608 print "Upgrade to $DBversion done (Bug 11629 - Add ability to update not for loan status on checkin)\n";
8609 SetVersion($DBversion);
8612 $DBversion = "3.17.00.008";
8613 if ( CheckVersion($DBversion) ) {
8615 INSERT IGNORE INTO systempreferences (variable,value,options,explanation,type) VALUES('OPACAcquisitionDetails','0', '','Show the acquisition details at the OPAC','YesNo')
8617 print "Upgrade to $DBversion done (Bug 11169 - Add OPACAcquisitionDetails syspref)\n";
8618 SetVersion($DBversion);
8621 $DBversion = "3.17.00.009";
8622 if ( CheckVersion($DBversion) ) {
8624 DELETE FROM systempreferences WHERE variable = 'UseTablesortForCirc'
8627 print "Upgrade to $DBversion done (Bug 11703 - Remove UseTablesortForCirc syspref)\n";
8628 SetVersion($DBversion);
8631 $DBversion = "3.17.00.010";
8632 if ( CheckVersion($DBversion) ) {
8633 $dbh->do("DELETE FROM systempreferences WHERE variable='opacsmallimage'");
8634 print "Upgrade to $DBversion done (Bug 11347 - PROG/CCSR deprecation: Remove opacsmallimage system preference)\n";
8635 SetVersion($DBversion);
8638 $DBversion = "3.17.00.011";
8639 if ( CheckVersion($DBversion) ) {
8640 $dbh->do("INSERT INTO language_subtag_registry( subtag, type, description, added) VALUES ( 'hr', 'language', 'Croatian','2014-07-24' )");
8641 $dbh->do("INSERT INTO language_rfc4646_to_iso639(rfc4646_subtag,iso639_2_code) VALUES( 'hr','hrv')");
8642 $dbh->do("INSERT INTO language_descriptions(subtag, type, lang, description) VALUES( 'hr', 'language', 'hr', 'Hrvatski')");
8643 $dbh->do("INSERT INTO language_descriptions(subtag, type, lang, description) VALUES( 'hr', 'language', 'en', 'Croatian')");
8644 $dbh->do("INSERT INTO language_descriptions(subtag, type, lang, description) VALUES( 'hr', 'language', 'fr', 'Croate')");
8645 $dbh->do("INSERT INTO language_descriptions(subtag, type, lang, description) VALUES( 'hr', 'language', 'de', 'Kroatisch')");
8646 print "Upgrade to $DBversion done (Bug 12649: Add Croatian language)\n";
8647 SetVersion ($DBversion);
8650 $DBversion = "3.17.00.012";
8651 if ( CheckVersion($DBversion) ) {
8652 $dbh->do("DELETE FROM systempreferences WHERE variable='OpacShowFiltersPulldownMobile'");
8653 print "Upgrade to $DBversion done ( Bug 12512 - PROG/CCSR deprecation: Remove OpacShowFiltersPulldownMobile system preference )\n";
8654 SetVersion ($DBversion);
8657 $DBversion = "3.17.00.013";
8658 if ( CheckVersion($DBversion) ) {
8659 $dbh->do("INSERT IGNORE INTO systempreferences (variable,value,explanation,options,type) VALUES ('maxreserves',50,'System-wide maximum number of holds a patron can place','','Integer')");
8660 print "Upgrade to $DBversion done (Re-add system preference maxreserves)\n";
8661 SetVersion ($DBversion);
8664 $DBversion = '3.17.00.014';
8665 if ( CheckVersion($DBversion) ) {
8667 INSERT INTO systempreferences (variable,value,explanation,type) VALUES
8668 ('OverdueNoticeCalendar',0,'Take calendar into consideration when working out sending overdue notices','YesNo')
8670 print "Upgrade to $DBversion done (Bug 12529 - Adding a syspref to allow the overdue notices to consider the calendar when generating notices)\n";
8671 SetVersion($DBversion);
8674 $DBversion = "3.17.00.015";
8675 if ( CheckVersion($DBversion) ) {
8677 CREATE TABLE IF NOT EXISTS columns_settings (
8678 module varchar(255) NOT NULL,
8679 page varchar(255) NOT NULL,
8680 tablename varchar(255) NOT NULL,
8681 columnname varchar(255) NOT NULL,
8682 cannot_be_toggled int(1) NOT NULL DEFAULT 0,
8683 is_hidden int(1) NOT NULL DEFAULT 0,
8684 PRIMARY KEY(module, page, tablename, columnname)
8685 ) ENGINE=InnoDB DEFAULT CHARSET=utf8
8687 print "Upgrade to $DBversion done (Bug 10212 - Create new table columns_settings)\n";
8688 SetVersion ($DBversion);
8691 $DBversion = "3.17.00.016";
8692 if ( CheckVersion($DBversion) ) {
8693 $dbh->do("CREATE TABLE aqcontacts (
8694 id int(11) NOT NULL auto_increment,
8695 name varchar(100) default NULL,
8696 position varchar(100) default NULL,
8697 phone varchar(100) default NULL,
8698 altphone varchar(100) default NULL,
8699 fax varchar(100) default NULL,
8700 email varchar(100) default NULL,
8702 claimacquisition BOOLEAN NOT NULL DEFAULT 0,
8703 claimissues BOOLEAN NOT NULL DEFAULT 0,
8704 acqprimary BOOLEAN NOT NULL DEFAULT 0,
8705 serialsprimary BOOLEAN NOT NULL DEFAULT 0,
8706 booksellerid int(11) not NULL,
8708 CONSTRAINT booksellerid_aqcontacts_fk FOREIGN KEY (booksellerid)
8709 REFERENCES aqbooksellers (id) ON DELETE CASCADE ON UPDATE CASCADE
8710 ) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1;");
8711 $dbh->do("INSERT INTO aqcontacts (name, position, phone, altphone, fax,
8712 email, notes, booksellerid, claimacquisition, claimissues, acqprimary, serialsprimary)
8713 SELECT contact, contpos, contphone, contaltphone, contfax, contemail,
8714 contnotes, id, 1, 1, 1, 1 FROM aqbooksellers;");
8715 $dbh->do("ALTER TABLE aqbooksellers DROP COLUMN contact,
8716 DROP COLUMN contpos, DROP COLUMN contphone,
8717 DROP COLUMN contaltphone, DROP COLUMN contfax,
8718 DROP COLUMN contemail, DROP COLUMN contnotes;");
8719 $dbh->do("UPDATE letter SET content = replace(content, '<<aqbooksellers.contact>>', '<<aqcontacts.name>>')");
8720 $dbh->do("UPDATE letter SET content = replace(content, '<<aqbooksellers.contpos>>', '<<aqcontacts.position>>')");
8721 $dbh->do("UPDATE letter SET content = replace(content, '<<aqbooksellers.contphone>>', '<<aqcontacts.phone>>')");
8722 $dbh->do("UPDATE letter SET content = replace(content, '<<aqbooksellers.contaltphone>>', '<<aqcontacts.altphone>>')");
8723 $dbh->do("UPDATE letter SET content = replace(content, '<<aqbooksellers.contfax>>', '<<aqcontacts.contfax>>')");
8724 $dbh->do("UPDATE letter SET content = replace(content, '<<aqbooksellers.contemail>>', '<<aqcontacts.contemail>>')");
8725 $dbh->do("UPDATE letter SET content = replace(content, '<<aqbooksellers.contnotes>>', '<<aqcontacts.contnotes>>')");
8726 print "Upgrade to $DBversion done (Bug 10402: Move bookseller contacts to separate table)\n";
8727 SetVersion($DBversion);
8730 $DBversion = "3.17.00.017";
8731 if ( CheckVersion($DBversion) ) {
8732 # Correct invalid recordtypes (should be very exceptional)
8734 UPDATE z3950servers set recordtype='biblio' WHERE recordtype NOT IN ('authority','biblio')
8736 # Correct invalid server types (should also be very exceptional)
8738 UPDATE z3950servers set type='zed' WHERE type <> 'zed'
8742 ALTER TABLE z3950servers
8744 DROP COLUMN description,
8745 DROP COLUMN position,
8746 MODIFY COLUMN id int NOT NULL AUTO_INCREMENT FIRST,
8747 MODIFY COLUMN recordtype enum('authority','biblio') NOT NULL DEFAULT 'biblio',
8748 CHANGE COLUMN name servername mediumtext NOT NULL,
8749 CHANGE COLUMN type servertype enum('zed','sru') NOT NULL DEFAULT 'zed',
8750 ADD COLUMN sru_options varchar(255) default NULL,
8751 ADD COLUMN sru_fields mediumtext default NULL,
8752 ADD COLUMN add_xslt mediumtext default NULL
8754 print "Upgrade to $DBversion done (Bug 6536: Z3950 improvements)\n";
8755 SetVersion ($DBversion);
8758 $DBversion = "3.17.00.018";
8759 if ( CheckVersion($DBversion) ) {
8760 $dbh->do("INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES ('HoldsInNoissuesCharge', '0', 'Hold charges block checkouts (added to noissuescharge).',NULL,'YesNo');");
8761 print "Upgrade to $DBversion done (Bug 12205: Add HoldsInNoissuesCharge systempreference)\n";
8762 SetVersion($DBversion);
8765 $DBversion = "3.17.00.019";
8766 if ( CheckVersion($DBversion) ) {
8767 $dbh->do("INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('NotHighlightedWords','and|or|not',NULL,'List of words to NOT highlight when OpacHighlightedWords is enabled','free')"
8769 print "Upgrade to $DBversion done (Bug 6149: Operator highlighted in search results)\n";
8770 SetVersion($DBversion);
8773 $DBversion = "3.17.00.020";
8774 if(C4::Context->preference("Version") < TransformToNum($DBversion) ) {
8775 $dbh->do("INSERT INTO systempreferences (variable,value,options,explanation,type) VALUES ('ExpireReservesOnHolidays', '1', NULL, 'If false, reserves at a library will not be canceled on days the library is not open.', 'YesNo')");
8776 print "Upgrade to $DBversion done (Bug 8735 - Expire holds waiting only on days the library is open)\n";
8777 SetVersion ($DBversion);
8780 $DBversion = "3.17.00.021";
8781 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
8782 my $pref = C4::Context->preference('HomeOrHoldingBranch');
8783 $dbh->do("INSERT INTO `systempreferences` (variable,value,options,explanation,type)
8784 VALUES ('StaffSearchResultsDisplayBranch', ?,'homebranch|holdingbranch','Controls the display of the home or holding branch for staff search results','choice')", undef, $pref);
8785 print "Upgrade to $DBversion done (Bug 12582 - Control of branch displayed in search results linked to HomeOrHoldingBranch)\n";
8786 SetVersion ($DBversion);
8789 $DBversion = '3.17.00.022';
8790 if ( CheckVersion($DBversion) ) {
8791 my @temp= $dbh->selectrow_array(qq|
8793 FROM marc_subfield_structure
8794 WHERE kohafield='permanent_location' OR kohafield='items.permanent_location'
8796 print "Upgrade to $DBversion done (Bug 7817: Check for permanent_location)\n";
8798 print "WARNING for Koha administrator: Your database contains one or more mappings for permanent_location to the MARC structure. This item field however is for internal use and should not be linked to a MARC (sub)field. Please correct it. See also Bugzilla reports 7817 and 12818.\n";
8800 SetVersion($DBversion);
8803 $DBversion = "3.17.00.023";
8804 if ( CheckVersion($DBversion) ) {
8806 INSERT IGNORE INTO systempreferences (variable,value,options,explanation,type) VALUES('AcqItemSetSubfieldsWhenReceiptIsCancelled','', '','Upon cancelling a receipt, update the items subfields if they were created when placing an order (e.g. o=5|a="bar foo")', 'Free')
8808 print "Upgrade to $DBversion done (Bug 11169 - Add AcqItemSetSubfieldsWhenReceiptIsCancelled syspref)\n";
8809 SetVersion($DBversion);
8812 $DBversion = "3.17.00.024";
8813 if(CheckVersion($DBversion)) {
8815 ALTER TABLE issues ADD auto_renew BOOLEAN default FALSE AFTER renewals
8818 ALTER TABLE old_issues ADD auto_renew BOOLEAN default FALSE AFTER renewals
8821 ALTER TABLE issuingrules ADD auto_renew BOOLEAN default FALSE AFTER norenewalbefore
8823 print "Upgrade to $DBversion done (Bug 11577: [ENH] Automatic renewal feature)\n";
8824 SetVersion($DBversion);
8827 $DBversion = '3.17.00.025';
8828 if ( CheckVersion($DBversion) ) {
8830 INSERT IGNORE INTO systempreferences (variable,value,explanation,options,type) VALUES('StatisticsFields','location|itype|ccode','Define fields (from the items table) used for statistics members',NULL,'Free')
8832 print "Upgrade to $DBversion done (Bug 12728: Checked syspref StatisticsFields)\n";
8835 $DBversion = "3.17.00.026";
8836 if ( CheckVersion($DBversion) ) {
8837 if ( C4::Context->preference('marcflavour') eq 'MARC21' ) {
8838 $dbh->do("UPDATE marc_subfield_structure SET liblibrarian = 'Encoded bitrate', libopac = 'Encoded bitrate' WHERE tagfield = '347' AND tagsubfield = 'f'");
8839 $dbh->do("UPDATE marc_subfield_structure SET repeatable = 1 WHERE tagfield IN ('110','111','610','611','710','711','810','811') AND tagsubfield = 'c'");
8840 $dbh->do("UPDATE auth_subfield_structure SET repeatable = 1 WHERE tagfield IN ('110','111','410','411','510','511','710','711') AND tagsubfield = 'c'");
8841 print "Upgrade to $DBversion done (Bug 12435 - Update MARC21 frameworks to Update No. 18 (April 2014))\n";
8843 SetVersion($DBversion);
8846 $DBversion = "3.17.00.027";
8847 if ( CheckVersion($DBversion) ) {
8849 DELETE FROM systempreferences WHERE variable = 'SearchEngine'
8851 print "Upgrade to $DBversion done (Bug 12538 - Remove SearchEngine syspref)\n";
8852 SetVersion($DBversion);
8855 $DBversion = "3.17.00.028";
8856 if ( CheckVersion($DBversion) ) {
8858 INSERT INTO systempreferences (variable,value) VALUES('OpacCustomSearch','');
8860 print "Upgrade to $DBversion done (Bug 12296 - search box replaceable with a system preference)\n";
8861 SetVersion($DBversion);
8864 $DBversion = "3.17.00.029";
8865 if ( CheckVersion($DBversion) ) {
8866 $dbh->do("ALTER TABLE `items` CHANGE `cn_sort` `cn_sort` VARCHAR( 255 ) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL");
8867 $dbh->do("ALTER TABLE `deleteditems` CHANGE `cn_sort` `cn_sort` VARCHAR( 255 ) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL");
8868 $dbh->do("ALTER TABLE `biblioitems` CHANGE `cn_sort` `cn_sort` VARCHAR( 255 ) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL");
8869 $dbh->do("ALTER TABLE `deletedbiblioitems` CHANGE `cn_sort` `cn_sort` VARCHAR( 255 ) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL");
8870 print "Upgrade to $DBversion done (Bug 12424 - ddc sorting of call numbers truncates long Cutter parts)\n";
8871 SetVersion ($DBversion);
8874 $DBversion = "3.17.00.030";
8875 if ( CheckVersion($DBversion) ) {
8878 INSERT INTO systempreferences (variable, value, options, explanation, type )
8880 ('UsageStatsCountry', '', NULL, 'The country where your library is located, to be shown on the Hea Koha community website', 'Choice'),
8881 ('UsageStatsID', '', NULL, 'This preference is part of Koha but it should not be deleted or updated manually.', 'Free'),
8882 ('UsageStatsLastUpdateTime', '', NULL, 'This preference is part of Koha but it should not be deleted or updated manually.', 'Free'),
8883 ('UsageStatsLibraryName', '', NULL, 'The library name to be shown on Hea Koha community website', 'Free'),
8884 ('UsageStatsLibraryType', 'public', 'public|university', 'The library type to be shown on the Hea Koha community website', 'Choice'),
8885 ('UsageStatsLibraryUrl', '', NULL, 'The library URL to be shown on Hea Koha community website', 'Free'),
8886 ('UsageStats', 0, NULL, 'Share anonymous usage data on the Hea Koha community website.', 'YesNo')
8888 print "Upgrade to $DBversion done (Bug 11926: Add UsageStats systempreferences (HEA))\n";
8889 SetVersion ($DBversion);
8892 $DBversion = "3.17.00.031";
8893 if ( CheckVersion($DBversion) ) {
8894 $dbh->do("ALTER TABLE saved_sql CHANGE report_name report_name VARCHAR( 255 ) NOT NULL DEFAULT '' ");
8895 print "Upgrade to $DBversion done (Bug 2969: Report Name should be mandatory for saved reports)\n";
8896 SetVersion ($DBversion);
8899 $DBversion = "3.17.00.032";
8900 if ( CheckVersion($DBversion) ) {
8902 "INSERT INTO systempreferences (variable,value,options,explanation,type) VALUES ('ReplytoDefault', '', NULL, 'The default email address to be set as replyto.', 'Free')"
8905 "INSERT INTO systempreferences (variable,value,options,explanation,type) VALUES ('ReturnpathDefault', '', NULL, 'The default email address to be set as return-path', 'Free')"
8907 $dbh->do("ALTER TABLE branches ADD branchreplyto mediumtext AFTER branchemail");
8908 $dbh->do("ALTER TABLE branches ADD branchreturnpath mediumtext AFTER branchreplyto");
8909 print "Upgrade to $DBversion done (Bug 9530: Adding replyto and returnpath addresses.)\n";
8910 SetVersion($DBversion);
8913 $DBversion = "3.17.00.033";
8914 if ( CheckVersion($DBversion) ) {
8916 INSERT IGNORE INTO systempreferences (variable, value, explanation, options, type)
8917 VALUES('FacetMaxCount', '20','Specify the max facet count for each category',NULL,'Integer')
8919 print "Upgrade to $DBversion done (Bug 13088 - Allow the user to specify a max amount of facets to show)\n";
8920 SetVersion($DBversion);
8923 $DBversion = "3.17.00.034";
8924 if ( CheckVersion($DBversion) ) {
8926 ALTER TABLE aqorders DROP COLUMN cancelledby;
8929 print "Upgrade to $DBversion done (Bug 11007 - DROP column aqorders.cancelledby)\n";
8930 SetVersion($DBversion);
8933 $DBversion = "3.17.00.035";
8934 if ( CheckVersion($DBversion) ) {
8936 ALTER TABLE serial ADD COLUMN claims_count INT(11) DEFAULT 0 after claimdate
8940 SET claims_count = 1
8941 WHERE claimdate IS NOT NULL
8943 print "Upgrade to $DBversion done (Bug 5342: Add claims_count field in serial table)\n";
8944 SetVersion($DBversion);
8947 $DBversion = "3.17.00.036";
8948 if ( CheckVersion($DBversion) ) {
8949 $dbh->do("DELETE FROM systempreferences WHERE variable='OpacShowLibrariesPulldownMobile'");
8950 print "Upgrade to $DBversion done ( Bug 12513 - PROG/CCSR deprecation: Remove OpacShowLibrariesPulldownMobile system preference )\n";
8951 SetVersion ($DBversion);
8954 $DBversion = "3.17.00.037";
8955 if ( CheckVersion($DBversion) ) {
8956 $dbh->do("DELETE FROM systempreferences WHERE variable='OpacMainUserBlockMobile'");
8957 print "Upgrade to $DBversion done ( Bug 12246 - PROG/CCSR deprecation: Remove OpacMainUserBlockMobile system preference )\n";
8958 SetVersion ($DBversion);
8961 $DBversion = "3.17.00.038";
8962 if ( CheckVersion($DBversion) ) {
8963 $dbh->do("DELETE FROM systempreferences WHERE variable='OPACMobileUserCSS'");
8964 print "Upgrade to $DBversion done ( Bug 12245 - PROG/CCSR deprecation: Remove OPACMobileUserCSS system preference )\n";
8965 SetVersion ($DBversion);
8968 $DBversion = "3.17.00.039";
8969 if ( CheckVersion($DBversion) ) {
8970 $dbh->do("INSERT IGNORE INTO systempreferences (variable, value, options, explanation, type) VALUES
8971 ('OPACFallback', 'prog', 'bootstrap|prog', 'Define the fallback theme for the OPAC interface.', 'Themes')");
8972 print "Upgrade to $DBversion done (Bug 12539 - PROG/CCSR deprecation: Remove hardcoded theme from C4/Templates.pm)\n";
8973 SetVersion ($DBversion);
8976 $DBversion = "3.17.00.040";
8977 if ( CheckVersion($DBversion) ) {
8978 my $opac_theme = C4::Context->preference( 'opacthemes' );
8979 if ( !defined $opac_theme || $opac_theme eq 'prog' || $opac_theme eq 'ccsr' ) {
8980 $dbh->do("UPDATE systempreferences SET value='bootstrap' WHERE variable='opacthemes'");
8982 print "Upgrade to $DBversion done (Bug 12223: 'prog' and 'ccsr' themes removed)\n";
8983 SetVersion($DBversion);
8986 $DBversion = "3.17.00.041";
8987 if ( CheckVersion($DBversion) ) {
8988 print "Upgrade to $DBversion done (Bug 11346: Deprecate the 'prog' and 'CCSR' themes)\n";
8989 SetVersion($DBversion);
8992 $DBversion = "3.17.00.042";
8993 if ( CheckVersion($DBversion) ) {
8994 $dbh->do("DELETE FROM systempreferences WHERE variable='yuipath'");
8995 print "Upgrade to $DBversion done (Bug 12494: Remove yuipath system preference)\n";
8996 SetVersion ($DBversion);
8999 $DBversion = "3.17.00.043";
9000 if ( CheckVersion($DBversion) ) {
9002 ALTER TABLE aqorders
9003 ADD COLUMN cancellationreason TEXT DEFAULT NULL AFTER datecancellationprinted
9005 print "Upgrade to $DBversion done (Bug 7162: Add aqorders.cancellationreason)\n";
9006 SetVersion ($DBversion);
9009 $DBversion = "3.17.00.044";
9010 if ( CheckVersion($DBversion) ) {
9012 INSERT IGNORE INTO systempreferences
9013 (variable,value,explanation,options,type)
9014 VALUES('OnSiteCheckouts','0','Enable/Disable the on-site checkouts feature','','YesNo');
9017 INSERT IGNORE INTO systempreferences
9018 (variable,value,explanation,options,type)
9019 VALUES('OnSiteCheckoutsForce','0','Enable/Disable the on-site for all cases (Even if a user is debarred, etc.)','','YesNo');
9022 ALTER TABLE issues ADD COLUMN onsite_checkout INT(1) NOT NULL DEFAULT 0 AFTER issuedate;
9025 ALTER TABLE old_issues ADD COLUMN onsite_checkout INT(1) NOT NULL DEFAULT 0 AFTER issuedate;
9027 print "Upgrade to $DBversion done (Bug 10860: Add new system preference OnSiteCheckouts + fields [old_]issues.onsite_checkout)\n";
9028 SetVersion($DBversion);
9031 $DBversion = "3.17.00.045";
9032 if ( CheckVersion($DBversion) ) {
9034 INSERT INTO systempreferences ( variable, value, options, explanation, type ) VALUES
9035 ('LocalHoldsPriority', '0', NULL, 'Enables the LocalHoldsPriority feature', 'YesNo'),
9036 ('LocalHoldsPriorityItemControl', 'holdingbranch', 'holdingbranch|homebranch', 'decides if the feature operates using the item''s home or holding library.', 'Choice'),
9037 ('LocalHoldsPriorityPatronControl', 'PickupLibrary', 'HomeLibrary|PickupLibrary', 'decides if the feature operates using the library set as the patron''s home library, or the library set as the pickup library for the given hold.', 'Choice')
9039 print "Upgrade to $DBversion done (Bug 11126 - Make the holds system optionally give precedence to local holds)\n";
9040 SetVersion($DBversion);
9043 $DBversion = "3.17.00.046";
9044 if ( CheckVersion($DBversion) ) {
9046 CREATE TABLE IF NOT EXISTS items_search_fields (
9047 name VARCHAR(255) NOT NULL,
9048 label VARCHAR(255) NOT NULL,
9049 tagfield CHAR(3) NOT NULL,
9050 tagsubfield CHAR(1) NULL DEFAULT NULL,
9051 authorised_values_category VARCHAR(16) NULL DEFAULT NULL,
9053 CONSTRAINT items_search_fields_authorised_values_category
9054 FOREIGN KEY (authorised_values_category) REFERENCES authorised_values (category)
9055 ON DELETE SET NULL ON UPDATE CASCADE
9056 ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
9058 print "Upgrade to $DBversion done (Bug 11425: Add items_search_fields table)\n";
9059 SetVersion($DBversion);
9062 $DBversion = "3.17.00.047";
9063 if ( CheckVersion($DBversion) ) {
9065 ALTER TABLE collections
9066 CHANGE colBranchcode colBranchcode VARCHAR( 10 ) NULL DEFAULT NULL,
9067 ADD INDEX ( colBranchcode ),
9068 ADD CONSTRAINT collections_ibfk_1 FOREIGN KEY (colBranchcode) REFERENCES branches (branchcode) ON DELETE CASCADE ON UPDATE CASCADE
9070 print "Upgrade to $DBversion done (Bug 8836 - Resurrect Rotating Collections)\n";
9071 SetVersion($DBversion);
9074 $DBversion = "3.17.00.048";
9075 if ( CheckVersion($DBversion) ) {
9077 INSERT INTO systempreferences (variable,value,options,explanation,type) VALUES('RentalFeesCheckoutConfirmation', '0', NULL , 'Allow user to confirm when checking out an item with rental fees.', 'YesNo')
9079 print "Upgrade to $DBversion done (Bug 12448 - Add RentalFeesCheckoutConfirmation syspref)\n";
9080 SetVersion($DBversion);
9083 $DBversion = "3.17.00.049";
9084 if ( CheckVersion($DBversion) ) {
9085 $dbh->do("INSERT IGNORE INTO language_subtag_registry( subtag, type, description, added) VALUES ( 'am', 'language', 'Amharic','2014-10-29')");
9086 $dbh->do("INSERT IGNORE INTO language_rfc4646_to_iso639(rfc4646_subtag,iso639_2_code) VALUES ( 'am','amh')");
9087 $dbh->do("INSERT IGNORE INTO language_descriptions(subtag, type, lang, description) VALUES ( 'am', 'language', 'am', 'አማርኛ')");
9088 $dbh->do("INSERT IGNORE INTO language_descriptions(subtag, type, lang, description) VALUES ( 'am', 'language', 'en', 'Amharic')");
9090 $dbh->do("UPDATE language_descriptions SET description = 'لعربية' WHERE subtag = 'ar' AND type = 'language' AND lang = 'ar'");
9092 $dbh->do("INSERT IGNORE INTO language_subtag_registry( subtag, type, description, added) VALUES ( 'az', 'language', 'Azerbaijani','2014-10-30')");
9093 $dbh->do("INSERT IGNORE INTO language_rfc4646_to_iso639(rfc4646_subtag,iso639_2_code) VALUES ( 'az','aze')");
9094 $dbh->do("INSERT IGNORE INTO language_descriptions(subtag, type, lang, description) VALUES ( 'az', 'language', 'az', 'Azərbaycan dili')");
9095 $dbh->do("INSERT IGNORE INTO language_descriptions(subtag, type, lang, description) VALUES ( 'az', 'language', 'en', 'Azerbaijani')");
9097 $dbh->do("INSERT IGNORE INTO language_subtag_registry( subtag, type, description, added) VALUES ( 'be', 'language', 'Byelorussian','2014-10-30')");
9098 $dbh->do("INSERT IGNORE INTO language_rfc4646_to_iso639(rfc4646_subtag,iso639_2_code) VALUES ( 'be','bel')");
9099 $dbh->do("INSERT IGNORE INTO language_descriptions(subtag, type, lang, description) VALUES ( 'be', 'language', 'be', 'Беларуская мова')");
9100 $dbh->do("INSERT IGNORE INTO language_descriptions(subtag, type, lang, description) VALUES ( 'be', 'language', 'en', 'Byelorussian')");
9102 $dbh->do("INSERT IGNORE INTO language_subtag_registry( subtag, type, description, added) VALUES ( 'bn', 'language', 'Bengali','2014-10-30')");
9103 $dbh->do("INSERT IGNORE INTO language_rfc4646_to_iso639(rfc4646_subtag,iso639_2_code) VALUES ( 'bn','ben')");
9104 $dbh->do("INSERT IGNORE INTO language_descriptions(subtag, type, lang, description) VALUES ( 'bn', 'language', 'bn', 'বাংলা')");
9105 $dbh->do("INSERT IGNORE INTO language_descriptions(subtag, type, lang, description) VALUES ( 'bn', 'language', 'en', 'Bengali')");
9107 $dbh->do("UPDATE language_descriptions SET description = 'Български' WHERE subtag = 'bg' AND type = 'language' AND lang = 'bg'");
9108 $dbh->do("UPDATE language_descriptions SET description = 'Ceština' WHERE subtag = 'cs' AND type = 'language' AND lang = 'cs'");
9109 $dbh->do("UPDATE language_descriptions SET description = 'Ελληνικά' WHERE subtag = 'el' AND type = 'language' AND lang = 'el'");
9110 $dbh->do("UPDATE language_descriptions SET description = 'Español' WHERE subtag = 'es' AND type = 'language' AND lang = 'es'");
9112 $dbh->do("INSERT IGNORE INTO language_subtag_registry( subtag, type, description, added) VALUES ( 'eu', 'language', 'Basque','2014-10-30')");
9113 $dbh->do("INSERT IGNORE INTO language_rfc4646_to_iso639(rfc4646_subtag,iso639_2_code) VALUES ( 'eu','eus')");
9114 $dbh->do("INSERT IGNORE INTO language_descriptions(subtag, type, lang, description) VALUES ( 'eu', 'language', 'eu', 'Euskera')");
9115 $dbh->do("INSERT IGNORE INTO language_descriptions(subtag, type, lang, description) VALUES ( 'eu', 'language', 'en', 'Basque')");
9117 $dbh->do("UPDATE language_descriptions SET description = 'فارسى' WHERE subtag = 'fa' AND type = 'language' AND lang = 'fa'");
9118 $dbh->do("UPDATE language_descriptions SET description = 'Suomi' WHERE subtag = 'fi' AND type = 'language' AND lang = 'fi'");
9120 $dbh->do("INSERT IGNORE INTO language_subtag_registry( subtag, type, description, added) VALUES ( 'fo', 'language', 'Faroese','2014-10-30')");
9121 $dbh->do("INSERT IGNORE INTO language_rfc4646_to_iso639(rfc4646_subtag,iso639_2_code) VALUES ( 'fo','fao')");
9122 $dbh->do("INSERT IGNORE INTO language_descriptions(subtag, type, lang, description) VALUES ( 'fo', 'language', 'fo', 'Føroyskt')");
9123 $dbh->do("INSERT IGNORE INTO language_descriptions(subtag, type, lang, description) VALUES ( 'fo', 'language', 'en', 'Faroese')");
9125 $dbh->do("UPDATE language_descriptions SET description = 'Français' WHERE subtag = 'fr' AND type = 'language' AND lang = 'fr'");
9126 $dbh->do("UPDATE language_descriptions SET description = 'עִבְרִית' WHERE subtag = 'he' AND type = 'language' AND lang = 'he'");
9127 $dbh->do("UPDATE language_descriptions SET description = 'हिन्दी' WHERE subtag = 'hi' AND type = 'language' AND lang = 'hi'");
9129 $dbh->do("INSERT IGNORE INTO language_subtag_registry( subtag, type, description, added) VALUES ( 'is', 'language', 'Icelandic','2014-10-30')");
9130 $dbh->do("INSERT IGNORE INTO language_rfc4646_to_iso639(rfc4646_subtag,iso639_2_code) VALUES ( 'is','ice')");
9131 $dbh->do("INSERT IGNORE INTO language_descriptions(subtag, type, lang, description) VALUES ( 'is', 'language', 'is', 'Íslenska')");
9132 $dbh->do("INSERT IGNORE INTO language_descriptions(subtag, type, lang, description) VALUES ( 'is', 'language', 'en', 'Icelandic')");
9134 $dbh->do("UPDATE language_descriptions SET description = '日本語' WHERE subtag = 'ja' AND type = 'language' AND lang = 'ja'");
9136 $dbh->do("INSERT IGNORE INTO language_subtag_registry( subtag, type, description, added) VALUES ( 'ka', 'language', 'Kannada','2014-10-30')");
9137 $dbh->do("INSERT IGNORE INTO language_rfc4646_to_iso639(rfc4646_subtag,iso639_2_code) VALUES ( 'ka','kan')");
9138 $dbh->do("INSERT IGNORE INTO language_descriptions(subtag, type, lang, description) VALUES ( 'ka', 'language', 'ka', 'ಕನ್ನಡ')");
9139 $dbh->do("INSERT IGNORE INTO language_descriptions(subtag, type, lang, description) VALUES ( 'ka', 'language', 'en', 'Kannada')");
9141 $dbh->do("INSERT IGNORE INTO language_subtag_registry( subtag, type, description, added) VALUES ( 'km', 'language', 'Khmer','2014-10-30')");
9142 $dbh->do("INSERT IGNORE INTO language_rfc4646_to_iso639(rfc4646_subtag,iso639_2_code) VALUES( 'km','khm')");
9143 $dbh->do("INSERT IGNORE INTO language_descriptions(subtag, type, lang, description) VALUES ( 'km', 'language', 'km', 'ភាសាខ្មែរ')");
9144 $dbh->do("INSERT IGNORE INTO language_descriptions(subtag, type, lang, description) VALUES( 'km', 'language', 'en', 'Khmer')");
9146 $dbh->do("UPDATE language_descriptions SET description = '한국어' WHERE subtag = 'ko' AND type = 'language' AND lang = 'ko'");
9148 $dbh->do("INSERT IGNORE INTO language_subtag_registry( subtag, type, description, added) VALUES ( 'ku', 'language', 'Kurdish','2014-05-13')");
9149 $dbh->do("INSERT IGNORE INTO language_rfc4646_to_iso639(rfc4646_subtag,iso639_2_code) VALUES ( 'ku','kur')");
9150 $dbh->do("INSERT IGNORE INTO language_descriptions(subtag, type, lang, description) VALUES ( 'ku', 'language', 'ku', 'کوردی')");
9151 $dbh->do("INSERT IGNORE INTO language_descriptions(subtag, type, lang, description) VALUES ( 'ku', 'language', 'en', 'Kurdish')");
9152 $dbh->do("INSERT IGNORE INTO language_descriptions(subtag, type, lang, description) VALUES ( 'ku', 'language', 'fr', 'Kurde')");
9153 $dbh->do("INSERT IGNORE INTO language_descriptions(subtag, type, lang, description) VALUES ( 'ku', 'language', 'de', 'Kurdisch')");
9154 $dbh->do("INSERT IGNORE INTO language_descriptions(subtag, type, lang, description) VALUES ( 'ku', 'language', 'es', 'Kurdo')");
9156 $dbh->do("UPDATE language_descriptions SET description = 'ພາສາລາວ' WHERE subtag = 'lo' AND type = 'language' AND lang = 'lo'");
9158 $dbh->do("INSERT IGNORE INTO language_subtag_registry( subtag, type, description, added) VALUES ( 'mi', 'language', 'Maori','2014-10-30')");
9159 $dbh->do("INSERT IGNORE INTO language_rfc4646_to_iso639(rfc4646_subtag,iso639_2_code) VALUES ( 'mi','mri')");
9160 $dbh->do("INSERT IGNORE INTO language_descriptions(subtag, type, lang, description) VALUES ( 'mi', 'language', 'mi', 'Te Reo Māori')");
9161 $dbh->do("INSERT IGNORE INTO language_descriptions(subtag, type, lang, description) VALUES ( 'mi', 'language', 'en', 'Maori')");
9163 $dbh->do("INSERT IGNORE INTO language_subtag_registry( subtag, type, description, added) VALUES ( 'mn', 'language', 'Mongolian','2014-10-30')");
9164 $dbh->do("INSERT IGNORE INTO language_rfc4646_to_iso639(rfc4646_subtag,iso639_2_code) VALUES ( 'mn','mon')");
9165 $dbh->do("INSERT IGNORE INTO language_descriptions(subtag, type, lang, description) VALUES ( 'mn', 'language', 'mn', 'Mонгол')");
9166 $dbh->do("INSERT IGNORE INTO language_descriptions(subtag, type, lang, description) VALUES ( 'mn', 'language', 'en', 'Mongolian')");
9168 $dbh->do("INSERT IGNORE INTO language_subtag_registry( subtag, type, description, added) VALUES ( 'mr', 'language', 'Marathi','2014-10-30')");
9169 $dbh->do("INSERT IGNORE INTO language_rfc4646_to_iso639(rfc4646_subtag,iso639_2_code) VALUES ( 'mr','mar')");
9170 $dbh->do("INSERT IGNORE INTO language_descriptions(subtag, type, lang, description) VALUES ( 'mr', 'language', 'mr', 'मराठी')");
9171 $dbh->do("INSERT IGNORE INTO language_descriptions(subtag, type, lang, description) VALUES ( 'mr', 'language', 'en', 'Marathi')");
9173 $dbh->do("INSERT IGNORE INTO language_subtag_registry( subtag, type, description, added) VALUES ( 'ms', 'language', 'Malay','2014-10-30')");
9174 $dbh->do("INSERT IGNORE INTO language_rfc4646_to_iso639(rfc4646_subtag,iso639_2_code) VALUES ( 'ms','may')");
9175 $dbh->do("INSERT IGNORE INTO language_descriptions(subtag, type, lang, description) VALUES ( 'ms', 'language', 'ms', 'Bahasa melayu')");
9176 $dbh->do("INSERT IGNORE INTO language_descriptions(subtag, type, lang, description) VALUES ( 'ms', 'language', 'en', 'Malay')");
9178 $dbh->do("UPDATE language_descriptions SET description = 'Norsk bokmål' WHERE subtag = 'nb' AND type = 'language' AND lang = 'nb'");
9179 $dbh->do("UPDATE language_descriptions SET description = 'Norwegian bokmål' WHERE subtag = 'nb' AND type = 'language' AND lang = 'en'");
9180 $dbh->do("UPDATE language_descriptions SET description = 'Norvégien bokmål' WHERE subtag = 'nb' AND type = 'language' AND lang = 'fr'");
9181 $dbh->do("UPDATE language_descriptions SET description = 'Norwegisch bokmål' WHERE subtag = 'nb' AND type = 'language' AND lang = 'de'");
9183 $dbh->do("INSERT IGNORE INTO language_subtag_registry( subtag, type, description, added) VALUES ( 'ne', 'language', 'Nepali','2014-10-30')");
9184 $dbh->do("INSERT IGNORE INTO language_rfc4646_to_iso639(rfc4646_subtag,iso639_2_code) VALUES ( 'ne','nep')");
9185 $dbh->do("INSERT IGNORE INTO language_descriptions(subtag, type, lang, description)VALUES ( 'ne', 'language', 'ne', 'नेपाली')");
9186 $dbh->do("INSERT IGNORE INTO language_descriptions(subtag, type, lang, description) VALUES ( 'ne', 'language', 'en', 'Nepali')");
9188 $dbh->do("INSERT IGNORE INTO language_subtag_registry( subtag, type, description, added) VALUES ( 'pbr', 'language', 'Pangwa','2014-10-30')");
9189 $dbh->do("INSERT IGNORE INTO language_rfc4646_to_iso639(rfc4646_subtag,iso639_2_code) VALUES ( 'pbr','pbr')");
9190 $dbh->do("INSERT IGNORE INTO language_descriptions(subtag, type, lang, description) VALUES ( 'pbr', 'language', 'pbr', 'Ekipangwa')");
9191 $dbh->do("INSERT IGNORE INTO language_descriptions(subtag, type, lang, description) VALUES ( 'pbr', 'language', 'en', 'Pangwa')");
9193 $dbh->do("INSERT IGNORE INTO language_subtag_registry( subtag, type, description, added) VALUES ( 'prs', 'language', 'Dari','2014-10-30')");
9194 $dbh->do("INSERT IGNORE INTO language_rfc4646_to_iso639(rfc4646_subtag,iso639_2_code) VALUES ( 'prs','prs')");
9195 $dbh->do("INSERT IGNORE INTO language_descriptions(subtag, type, lang, description) VALUES ( 'prs', 'language', 'prs', 'درى')");
9196 $dbh->do("INSERT IGNORE INTO language_descriptions(subtag, type, lang, description) VALUES ( 'prs', 'language', 'en', 'Dari')");
9198 $dbh->do("UPDATE language_descriptions SET description = 'Português' WHERE subtag = 'pt' AND type = 'language' AND lang = 'pt'");
9199 $dbh->do("UPDATE language_descriptions SET description = 'Român' WHERE subtag = 'ro' AND type = 'language' AND lang = 'ro'");
9200 $dbh->do("UPDATE language_descriptions SET description = 'Русский' WHERE subtag = 'ru' AND type = 'language' AND lang = 'ru'");
9202 $dbh->do("INSERT IGNORE INTO language_subtag_registry( subtag, type, description, added) VALUES ( 'rw', 'language', 'Kinyarwanda','2014-10-30')");
9203 $dbh->do("INSERT IGNORE INTO language_rfc4646_to_iso639(rfc4646_subtag,iso639_2_code) VALUES ( 'rw','kin')");
9204 $dbh->do("INSERT IGNORE INTO language_descriptions(subtag, type, lang, description) VALUES ( 'rw', 'language', 'rw', 'Ikinyarwanda')");
9205 $dbh->do("INSERT IGNORE INTO language_descriptions(subtag, type, lang, description) VALUES ( 'rw', 'language', 'en', 'Kinyarwanda')");
9207 $dbh->do("INSERT IGNORE INTO language_subtag_registry( subtag, type, description, added) VALUES ( 'sd', 'language', 'Sindhi','2014-10-30')");
9208 $dbh->do("INSERT IGNORE INTO language_rfc4646_to_iso639(rfc4646_subtag,iso639_2_code) VALUES ( 'sd','snd')");
9209 $dbh->do("INSERT IGNORE INTO language_descriptions(subtag, type, lang, description) VALUES ( 'sd', 'language', 'sd', 'سنڌي')");
9210 $dbh->do("INSERT IGNORE INTO language_descriptions(subtag, type, lang, description) VALUES ( 'sd', 'language', 'en', 'Sindhi')");
9212 $dbh->do("INSERT IGNORE INTO language_subtag_registry( subtag, type, description, added) VALUES ( 'sk', 'language', 'Slovak','2014-10-30')");
9213 $dbh->do("INSERT IGNORE INTO language_rfc4646_to_iso639(rfc4646_subtag,iso639_2_code) VALUES ( 'sk','slk')");
9214 $dbh->do("INSERT IGNORE INTO language_descriptions(subtag, type, lang, description) VALUES ( 'sk', 'language', 'sk', 'Slovenčina')");
9215 $dbh->do("INSERT IGNORE INTO language_descriptions(subtag, type, lang, description) VALUES ( 'sk', 'language', 'en', 'Slovak')");
9217 $dbh->do("INSERT IGNORE INTO language_subtag_registry( subtag, type, description, added) VALUES ( 'sl', 'language', 'Slovene','2014-10-30')");
9218 $dbh->do("INSERT IGNORE INTO language_rfc4646_to_iso639(rfc4646_subtag,iso639_2_code) VALUES ( 'sl','slv')");
9219 $dbh->do("INSERT IGNORE INTO language_descriptions(subtag, type, lang, description) VALUES ( 'sl', 'language', 'sl', 'Slovenščina')");
9220 $dbh->do("INSERT IGNORE INTO language_descriptions(subtag, type, lang, description) VALUES ( 'sl', 'language', 'en', 'Slovene')");
9222 $dbh->do("INSERT IGNORE INTO language_subtag_registry( subtag, type, description, added) VALUES ( 'sq', 'language', 'Albanian','2014-10-30')");
9223 $dbh->do("INSERT IGNORE INTO language_rfc4646_to_iso639(rfc4646_subtag,iso639_2_code) VALUES ( 'sq','sqi')");
9224 $dbh->do("INSERT IGNORE INTO language_descriptions(subtag, type, lang, description) VALUES ( 'sq', 'language', 'sq', 'Shqip')");
9225 $dbh->do("INSERT IGNORE INTO language_descriptions(subtag, type, lang, description) VALUES ( 'sq', 'language', 'en', 'Albanian')");
9227 $dbh->do("UPDATE language_descriptions SET description = 'Cрпски' WHERE subtag = 'sr' AND type = 'language' AND lang = 'sr'");
9229 $dbh->do("INSERT IGNORE INTO language_subtag_registry( subtag, type, description, added) VALUES ( 'sw', 'language', 'Swahili','2014-10-30')");
9230 $dbh->do("INSERT IGNORE INTO language_rfc4646_to_iso639(rfc4646_subtag,iso639_2_code) VALUES ( 'sw','swa')");
9231 $dbh->do("INSERT IGNORE INTO language_descriptions(subtag, type, lang, description) VALUES ( 'sw', 'language', 'sw', 'Kiswahili')");
9232 $dbh->do("INSERT IGNORE INTO language_descriptions(subtag, type, lang, description) VALUES ( 'sw', 'language', 'en', 'Swahili')");
9234 $dbh->do("INSERT IGNORE INTO language_subtag_registry( subtag, type, description, added) VALUES ( 'ta', 'language', 'Tamil','2014-10-30')");
9235 $dbh->do("INSERT IGNORE INTO language_rfc4646_to_iso639(rfc4646_subtag,iso639_2_code) VALUES ( 'ta','tam')");
9236 $dbh->do("INSERT IGNORE INTO language_descriptions(subtag, type, lang, description) VALUES ( 'ta', 'language', 'ta', 'தமிழ்')");
9237 $dbh->do("INSERT IGNORE INTO language_descriptions(subtag, type, lang, description) VALUES ( 'ta', 'language', 'en', 'Tamil')");
9239 $dbh->do("UPDATE language_descriptions SET description = 'Tetun' WHERE subtag = 'tet' AND type = 'language' AND lang = 'tet'");
9240 $dbh->do("UPDATE language_descriptions SET description = 'ภาษาไทย' WHERE subtag = 'th' AND type = 'language' AND lang = 'th'");
9242 $dbh->do("INSERT IGNORE INTO language_subtag_registry( subtag, type, description, added) VALUES ( 'tl', 'language', 'Tagalog','2014-10-30')");
9243 $dbh->do("INSERT IGNORE INTO language_rfc4646_to_iso639(rfc4646_subtag,iso639_2_code) VALUES ( 'tl','tgl')");
9244 $dbh->do("INSERT IGNORE INTO language_descriptions(subtag, type, lang, description) VALUES ( 'tl', 'language', 'tl', 'Tagalog')");
9245 $dbh->do("INSERT IGNORE INTO language_descriptions(subtag, type, lang, description) VALUES ( 'tl', 'language', 'en', 'Tagalog')");
9247 $dbh->do("UPDATE language_descriptions SET description = 'Türkçe' WHERE subtag = 'tr' AND type = 'language' AND lang = 'tr'");
9248 $dbh->do("UPDATE language_descriptions SET description = 'Українська' WHERE subtag = 'uk' AND type = 'language' AND lang = 'uk'");
9249 $dbh->do("UPDATE language_descriptions SET description = 'اردو' WHERE subtag = 'ur' AND type = 'language' AND lang = 'ur'");
9251 $dbh->do("INSERT IGNORE INTO language_subtag_registry( subtag, type, description, added) VALUES ( 'vi', 'language', 'Vietnamese','2014-10-30')");
9252 $dbh->do("INSERT IGNORE INTO language_rfc4646_to_iso639(rfc4646_subtag,iso639_2_code) VALUES ( 'vi','vie')");
9253 $dbh->do("INSERT IGNORE INTO language_descriptions(subtag, type, lang, description) VALUES ( 'vi', 'language', 'vi', '㗂越')");
9254 $dbh->do("INSERT IGNORE INTO language_descriptions(subtag, type, lang, description) VALUES ( 'vi', 'language', 'en', 'Vietnamese')");
9256 $dbh->do("UPDATE language_descriptions SET description = '中文' WHERE subtag = 'zh' AND type = 'language' AND lang = 'zh'");
9257 $dbh->do("UPDATE language_descriptions SET description = '' WHERE subtag = 'Arab,script' AND type = 'Arab' AND lang = 'العربية'");
9259 $dbh->do("INSERT IGNORE INTO language_subtag_registry( subtag, type, description, added) VALUES ( 'Armn', 'script', 'Armenian','2014-10-30')");
9260 $dbh->do("INSERT IGNORE INTO language_descriptions(subtag, type, lang, description) VALUES ( 'Armn', 'script', 'Armn', 'Հայոց այբուբեն')");
9261 $dbh->do("INSERT IGNORE INTO language_descriptions(subtag, type, lang, description) VALUES( 'Armn', 'script', 'en', 'Armenian')");
9263 $dbh->do("UPDATE language_descriptions SET description = 'Кирилица' WHERE subtag = 'Cyrl' AND type = 'script' AND lang = 'Cyrl'");
9265 $dbh->do("INSERT IGNORE INTO language_subtag_registry( subtag, type, description, added) VALUES ( 'Ethi', 'script', 'Ethiopic','2014-10-30')");
9266 $dbh->do("INSERT IGNORE INTO language_descriptions(subtag, type, lang, description) VALUES ( 'Ethi', 'script', 'Ethi', 'ግዕዝ')");
9267 $dbh->do("INSERT IGNORE INTO language_descriptions(subtag, type, lang, description) VALUES( 'Ethi', 'script', 'en', 'Ethiopic')");
9269 $dbh->do("UPDATE language_descriptions SET description = 'Ελληνικό αλφάβητο' WHERE subtag = 'Grek' AND type = 'script' AND lang = 'Grek'");
9270 $dbh->do("UPDATE language_descriptions SET description = '简体字' WHERE subtag = 'Hans' AND type = 'script' AND lang = 'Hans'");
9271 $dbh->do("UPDATE language_descriptions SET description = '繁體字' WHERE subtag = 'Hant' AND type = 'script' AND lang = 'Hant'");
9272 $dbh->do("UPDATE language_descriptions SET description = 'אָלֶף־בֵּית עִבְרִי' WHERE subtag = 'Hebr' AND type = 'script' AND lang = 'Hebr'");
9274 $dbh->do("INSERT IGNORE INTO language_subtag_registry( subtag, type, description, added) VALUES ( 'Jpan', 'script', 'Japanese','2014-10-30')");
9275 $dbh->do("INSERT IGNORE INTO language_descriptions(subtag, type, lang, description) VALUES ( 'Jpan', 'script', 'Jpan', '漢字')");
9276 $dbh->do("INSERT IGNORE INTO language_descriptions(subtag, type, lang, description) VALUES( 'Jpan', 'script', 'en', 'Japanese')");
9278 $dbh->do("INSERT IGNORE INTO language_subtag_registry( subtag, type, description, added) VALUES ( 'Knda', 'script', 'Kannada','2014-10-30')");
9279 $dbh->do("INSERT IGNORE INTO language_descriptions(subtag, type, lang, description) VALUES ( 'Knda', 'script', 'Knda', 'ಕನ್ನಡ ಲಿಪಿ')");
9280 $dbh->do("INSERT IGNORE INTO language_descriptions(subtag, type, lang, description) VALUES( 'Knda', 'script', 'en', 'Kannada')");
9282 $dbh->do("INSERT IGNORE INTO language_subtag_registry( subtag, type, description, added) VALUES ( 'Kore', 'script', 'Korean','2014-10-30')");
9283 $dbh->do("INSERT IGNORE INTO language_descriptions(subtag, type, lang, description) VALUES ( 'Kore', 'script', 'Kore', '한글')");
9284 $dbh->do("INSERT IGNORE INTO language_descriptions(subtag, type, lang, description) VALUES( 'Kore', 'script', 'en', 'Korean')");
9286 $dbh->do("UPDATE language_descriptions SET description = 'ອັກສອນລາວ' WHERE subtag = 'Laoo' AND type = 'script' AND lang = 'Laoo'");
9288 $dbh->do("INSERT IGNORE INTO language_subtag_registry( subtag, type, description, added) VALUES ( 'AL', 'region', 'Albania','2014-10-30')");
9289 $dbh->do("INSERT IGNORE INTO language_descriptions(subtag, type, lang, description) VALUES ( 'AL', 'region', 'en', 'Albania')");
9290 $dbh->do("INSERT IGNORE INTO language_descriptions(subtag, type, lang, description) VALUES ( 'AL', 'region', 'sq', 'Shqipërisë')");
9292 $dbh->do("INSERT IGNORE INTO language_subtag_registry( subtag, type, description, added) VALUES ( 'AZ', 'region', 'Azerbaijan','2014-10-30')");
9293 $dbh->do("INSERT IGNORE INTO language_descriptions(subtag, type, lang, description) VALUES ( 'AZ', 'region', 'en', 'Azerbaijan')");
9294 $dbh->do("INSERT IGNORE INTO language_descriptions(subtag, type, lang, description) VALUES ( 'AZ', 'region', 'az', 'Azərbaycan')");
9296 $dbh->do("INSERT IGNORE INTO language_subtag_registry( subtag, type, description, added) VALUES ( 'BE', 'region', 'Belgium','2014-10-30')");
9297 $dbh->do("INSERT IGNORE INTO language_descriptions(subtag, type, lang, description) VALUES ( 'BE', 'region', 'en', 'Belgium')");
9298 $dbh->do("INSERT IGNORE INTO language_descriptions(subtag, type, lang, description) VALUES ( 'BE', 'region', 'nl', 'België')");
9300 $dbh->do("INSERT IGNORE INTO language_subtag_registry( subtag, type, description, added) VALUES ( 'BR', 'region', 'Brazil','2014-10-30')");
9301 $dbh->do("INSERT IGNORE INTO language_descriptions(subtag, type, lang, description) VALUES ( 'BR', 'region', 'en', 'Brazil')");
9302 $dbh->do("INSERT IGNORE INTO language_descriptions(subtag, type, lang, description) VALUES ( 'BR', 'region', 'pt', 'Brasil')");
9304 $dbh->do("INSERT IGNORE INTO language_subtag_registry( subtag, type, description, added) VALUES ( 'BY', 'region', 'Belarus','2014-10-30')");
9305 $dbh->do("INSERT IGNORE INTO language_descriptions(subtag, type, lang, description) VALUES ( 'BY', 'region', 'en', 'Belarus')");
9306 $dbh->do("INSERT IGNORE INTO language_descriptions(subtag, type, lang, description) VALUES ( 'BY', 'region', 'be', 'Беларусь')");
9308 $dbh->do("INSERT IGNORE INTO language_descriptions(subtag, type, lang, description) VALUES ( 'CA', 'region', 'fr', 'Canada')");
9310 $dbh->do("INSERT IGNORE INTO language_subtag_registry( subtag, type, description, added) VALUES ( 'CH', 'region', 'Switzerland','2014-10-30')");
9311 $dbh->do("INSERT IGNORE INTO language_descriptions(subtag, type, lang, description) VALUES ( 'CH', 'region', 'en', 'Switzerland')");
9312 $dbh->do("INSERT IGNORE INTO language_descriptions(subtag, type, lang, description) VALUES ( 'CH', 'region', 'de', 'Schweiz')");
9314 $dbh->do("INSERT IGNORE INTO language_subtag_registry( subtag, type, description, added) VALUES ( 'CN', 'region', 'China','2014-10-30')");
9315 $dbh->do("INSERT IGNORE INTO language_descriptions(subtag, type, lang, description) VALUES ( 'CN', 'region', 'en', 'China')");
9316 $dbh->do("INSERT IGNORE INTO language_descriptions(subtag, type, lang, description) VALUES ( 'CN', 'region', 'zh', '中国')");
9318 $dbh->do("INSERT IGNORE INTO language_subtag_registry( subtag, type, description, added) VALUES ( 'CZ', 'region', 'Czech Republic','2014-10-30')");
9319 $dbh->do("INSERT IGNORE INTO language_descriptions(subtag, type, lang, description) VALUES ( 'CZ', 'region', 'en', 'Czech Republic')");
9320 $dbh->do("INSERT IGNORE INTO language_descriptions(subtag, type, lang, description) VALUES ( 'CZ', 'region', 'cs', 'Česká republika')");
9322 $dbh->do("INSERT IGNORE INTO language_subtag_registry( subtag, type, description, added) VALUES ( 'DE', 'region', 'Germany','2014-10-30')");
9323 $dbh->do("INSERT IGNORE INTO language_descriptions(subtag, type, lang, description) VALUES ( 'DE', 'region', 'en', 'Germany')");
9324 $dbh->do("INSERT IGNORE INTO language_descriptions(subtag, type, lang, description) VALUES ( 'DE', 'region', 'de', 'Deutschland')");
9326 $dbh->do("INSERT IGNORE INTO language_descriptions(subtag, type, lang, description) VALUES ( 'DK', 'region', 'en', 'Denmark')");
9328 $dbh->do("INSERT IGNORE INTO language_subtag_registry( subtag, type, description, added) VALUES ( 'ES', 'region', 'Spain','2014-10-30')");
9329 $dbh->do("INSERT IGNORE INTO language_descriptions(subtag, type, lang, description) VALUES ( 'ES', 'region', 'en', 'Spain')");
9330 $dbh->do("INSERT IGNORE INTO language_descriptions(subtag, type, lang, description) VALUES ( 'ES', 'region', 'es', 'España')");
9332 $dbh->do("INSERT IGNORE INTO language_subtag_registry( subtag, type, description, added) VALUES ( 'FI', 'region', 'Finland','2014-10-30')");
9333 $dbh->do("INSERT IGNORE INTO language_descriptions(subtag, type, lang, description) VALUES ( 'FI', 'region', 'en', 'Finland')");
9334 $dbh->do("INSERT IGNORE INTO language_descriptions(subtag, type, lang, description) VALUES ( 'FI', 'region', 'fi', 'Suomi')");
9336 $dbh->do("INSERT IGNORE INTO language_subtag_registry( subtag, type, description, added) VALUES ( 'FO', 'region', 'Faroe Islands','2014-10-30')");
9337 $dbh->do("INSERT IGNORE INTO language_descriptions(subtag, type, lang, description) VALUES ( 'FO', 'region', 'en', 'Faroe Islands')");
9338 $dbh->do("INSERT IGNORE INTO language_descriptions(subtag, type, lang, description) VALUES ( 'FO', 'region', 'fo', 'Føroyar')");
9340 $dbh->do("INSERT IGNORE INTO language_subtag_registry( subtag, type, description, added) VALUES ( 'GR', 'region', 'Greece','2014-10-30')");
9341 $dbh->do("INSERT IGNORE INTO language_descriptions(subtag, type, lang, description) VALUES ( 'GR', 'region', 'en', 'Greece')");
9342 $dbh->do("INSERT IGNORE INTO language_descriptions(subtag, type, lang, description) VALUES ( 'GR', 'region', 'el', 'Ελλάδα')");
9344 $dbh->do("INSERT IGNORE INTO language_subtag_registry( subtag, type, description, added) VALUES ( 'HR', 'region', 'Croatia','2014-10-30')");
9345 $dbh->do("INSERT IGNORE INTO language_descriptions(subtag, type, lang, description) VALUES ( 'HR', 'region', 'en', 'Croatia')");
9346 $dbh->do("INSERT IGNORE INTO language_descriptions(subtag, type, lang, description) VALUES ( 'HR', 'region', 'hr', 'Hrvatska')");
9348 $dbh->do("INSERT IGNORE INTO language_subtag_registry( subtag, type, description, added) VALUES ( 'HU', 'region', 'Hungary','2014-10-30')");
9349 $dbh->do("INSERT IGNORE INTO language_descriptions(subtag, type, lang, description) VALUES ( 'HU', 'region', 'en', 'Hungary')");
9350 $dbh->do("INSERT IGNORE INTO language_descriptions(subtag, type, lang, description) VALUES ( 'HU', 'region', 'hu', 'Magyarország')");
9352 $dbh->do("INSERT IGNORE INTO language_subtag_registry( subtag, type, description, added) VALUES ( 'ID', 'region', 'Indonesia','2014-10-30')");
9353 $dbh->do("INSERT IGNORE INTO language_descriptions(subtag, type, lang, description) VALUES ( 'ID', 'region', 'en', 'Indonesia')");
9354 $dbh->do("INSERT IGNORE INTO language_descriptions(subtag, type, lang, description) VALUES ( 'ID', 'region', 'id', 'Indonesia')");
9356 $dbh->do("INSERT IGNORE INTO language_subtag_registry( subtag, type, description, added) VALUES ( 'IS', 'region', 'Iceland','2014-10-30')");
9357 $dbh->do("INSERT IGNORE INTO language_descriptions(subtag, type, lang, description) VALUES ( 'IS', 'region', 'en', 'Iceland')");
9358 $dbh->do("INSERT IGNORE INTO language_descriptions(subtag, type, lang, description) VALUES ( 'IS', 'region', 'is', 'Ísland')");
9360 $dbh->do("INSERT IGNORE INTO language_subtag_registry( subtag, type, description, added) VALUES ( 'IT', 'region', 'Italy','2014-10-30')");
9361 $dbh->do("INSERT IGNORE INTO language_descriptions(subtag, type, lang, description) VALUES ( 'IT', 'region', 'en', 'Italy')");
9362 $dbh->do("INSERT IGNORE INTO language_descriptions(subtag, type, lang, description) VALUES ( 'IT', 'region', 'it', 'Italia')");
9364 $dbh->do("INSERT IGNORE INTO language_subtag_registry( subtag, type, description, added) VALUES ( 'JP', 'region', 'Japan','2014-10-30')");
9365 $dbh->do("INSERT IGNORE INTO language_descriptions(subtag, type, lang, description) VALUES ( 'JP', 'region', 'en', 'Japan')");
9366 $dbh->do("INSERT IGNORE INTO language_descriptions(subtag, type, lang, description) VALUES ( 'JP', 'region', 'ja', '日本')");
9368 $dbh->do("INSERT IGNORE INTO language_subtag_registry( subtag, type, description, added) VALUES ( 'KE', 'region', 'Kenya','2014-10-30')");
9369 $dbh->do("INSERT IGNORE INTO language_descriptions(subtag, type, lang, description) VALUES ( 'KE', 'region', 'en', 'Kenya')");
9370 $dbh->do("INSERT IGNORE INTO language_descriptions(subtag, type, lang, description) VALUES ( 'KE', 'region', 'rw', 'Kenya')");
9372 $dbh->do("INSERT IGNORE INTO language_subtag_registry( subtag, type, description, added) VALUES ( 'KH', 'region', 'Cambodia','2014-10-30')");
9373 $dbh->do("INSERT IGNORE INTO language_descriptions(subtag, type, lang, description) VALUES ( 'KH', 'region', 'en', 'Cambodia')");
9374 $dbh->do("INSERT IGNORE INTO language_descriptions(subtag, type, lang, description) VALUES ( 'KH', 'region', 'km', 'កម្ពុជា')");
9376 $dbh->do("INSERT IGNORE INTO language_subtag_registry( subtag, type, description, added) VALUES ( 'KP', 'region', 'North Korea','2014-10-30')");
9377 $dbh->do("INSERT IGNORE INTO language_descriptions(subtag, type, lang, description) VALUES ( 'KP', 'region', 'en', 'North Korea')");
9378 $dbh->do("INSERT IGNORE INTO language_descriptions(subtag, type, lang, description) VALUES ( 'KP', 'region', 'ko', '조선민주주의인민공화국')");
9380 $dbh->do("INSERT IGNORE INTO language_subtag_registry( subtag, type, description, added) VALUES ( 'LK', 'region', 'Sri Lanka','2014-10-30')");
9381 $dbh->do("INSERT IGNORE INTO language_descriptions(subtag, type, lang, description) VALUES ( 'LK', 'region', 'en', 'Sri Lanka')");
9382 $dbh->do("INSERT IGNORE INTO language_descriptions(subtag, type, lang, description) VALUES ( 'LK', 'region', 'ta', 'இலங்கை')");
9384 $dbh->do("INSERT IGNORE INTO language_subtag_registry( subtag, type, description, added) VALUES ( 'MY', 'region', 'Malaysia','2014-10-30')");
9385 $dbh->do("INSERT IGNORE INTO language_descriptions(subtag, type, lang, description) VALUES ( 'MY', 'region', 'en', 'Malaysia')");
9386 $dbh->do("INSERT IGNORE INTO language_descriptions(subtag, type, lang, description) VALUES ( 'MY', 'region', 'ms', 'Malaysia')");
9388 $dbh->do("INSERT IGNORE INTO language_subtag_registry( subtag, type, description, added) VALUES ( 'NE', 'region', 'Niger','2014-10-30')");
9389 $dbh->do("INSERT IGNORE INTO language_descriptions(subtag, type, lang, description) VALUES ( 'NE', 'region', 'en', 'Niger')");
9390 $dbh->do("INSERT IGNORE INTO language_descriptions(subtag, type, lang, description) VALUES ( 'NE', 'region', 'ne', 'Niger')");
9392 $dbh->do("INSERT IGNORE INTO language_subtag_registry( subtag, type, description, added) VALUES ( 'NL', 'region', 'Netherlands','2014-10-30')");
9393 $dbh->do("INSERT IGNORE INTO language_descriptions(subtag, type, lang, description) VALUES ( 'NL', 'region', 'en', 'Netherlands')");
9394 $dbh->do("INSERT IGNORE INTO language_descriptions(subtag, type, lang, description) VALUES ( 'NL', 'region', 'nl', 'Nederland')");
9396 $dbh->do("INSERT IGNORE INTO language_subtag_registry( subtag, type, description, added) VALUES ( 'NO', 'region', 'Norway','2014-10-30')");
9397 $dbh->do("INSERT IGNORE INTO language_descriptions(subtag, type, lang, description) VALUES ( 'NO', 'region', 'en', 'Norway')");
9398 $dbh->do("INSERT IGNORE INTO language_descriptions(subtag, type, lang, description) VALUES ( 'NO', 'region', 'ne', 'Noreg')");
9399 $dbh->do("INSERT IGNORE INTO language_descriptions(subtag, type, lang, description) VALUES ( 'NO', 'region', 'nn', 'Noreg')");
9401 $dbh->do("INSERT IGNORE INTO language_subtag_registry( subtag, type, description, added) VALUES ( 'PH', 'region', 'Philippines','2014-10-30')");
9402 $dbh->do("INSERT IGNORE INTO language_descriptions(subtag, type, lang, description) VALUES ( 'PH', 'region', 'en', 'Philippines')");
9403 $dbh->do("INSERT IGNORE INTO language_descriptions(subtag, type, lang, description) VALUES ( 'PH', 'region', 'tl', 'Pilipinas')");
9405 $dbh->do("INSERT IGNORE INTO language_subtag_registry( subtag, type, description, added) VALUES ( 'PK', 'region', 'Pakistan','2014-10-30')");
9406 $dbh->do("INSERT IGNORE INTO language_descriptions(subtag, type, lang, description) VALUES ( 'PK', 'region', 'en', 'Pakistan')");
9407 $dbh->do("INSERT IGNORE INTO language_descriptions(subtag, type, lang, description) VALUES ( 'PK', 'region', 'sd', 'پاكستان')");
9409 $dbh->do("INSERT IGNORE INTO language_subtag_registry( subtag, type, description, added) VALUES ( 'PL', 'region', 'Poland','2014-10-30')");
9410 $dbh->do("INSERT IGNORE INTO language_descriptions(subtag, type, lang, description) VALUES ( 'PL', 'region', 'en', 'Poland')");
9411 $dbh->do("INSERT IGNORE INTO language_descriptions(subtag, type, lang, description) VALUES ( 'PL', 'region', 'pl', 'Polska')");
9413 $dbh->do("INSERT IGNORE INTO language_subtag_registry( subtag, type, description, added) VALUES ( 'PT', 'region', 'Portugal','2014-10-30')");
9414 $dbh->do("INSERT IGNORE INTO language_descriptions(subtag, type, lang, description) VALUES ( 'PT', 'region', 'en', 'Portugal')");
9415 $dbh->do("INSERT IGNORE INTO language_descriptions(subtag, type, lang, description) VALUES ( 'PT', 'region', 'pt', 'Portugal')");
9417 $dbh->do("INSERT IGNORE INTO language_subtag_registry( subtag, type, description, added) VALUES ( 'RO', 'region', 'Romania','2014-10-30')");
9418 $dbh->do("INSERT IGNORE INTO language_descriptions(subtag, type, lang, description) VALUES ( 'RO', 'region', 'en', 'Romania')");
9419 $dbh->do("INSERT IGNORE INTO language_descriptions(subtag, type, lang, description) VALUES ( 'RO', 'region', 'ro', 'România')");
9421 $dbh->do("INSERT IGNORE INTO language_subtag_registry( subtag, type, description, added) VALUES ( 'RU', 'region', 'Russia','2014-10-30')");
9422 $dbh->do("INSERT IGNORE INTO language_descriptions(subtag, type, lang, description) VALUES ( 'RU', 'region', 'en', 'Russia')");
9423 $dbh->do("INSERT IGNORE INTO language_descriptions(subtag, type, lang, description) VALUES ( 'RU', 'region', 'ru', 'Россия')");
9425 $dbh->do("INSERT IGNORE INTO language_subtag_registry( subtag, type, description, added) VALUES ( 'RW', 'region', 'Rwanda','2014-10-30')");
9426 $dbh->do("INSERT IGNORE INTO language_descriptions(subtag, type, lang, description) VALUES ( 'RW', 'region', 'en', 'Rwanda')");
9427 $dbh->do("INSERT IGNORE INTO language_descriptions(subtag, type, lang, description) VALUES ( 'RW', 'region', 'rw', 'Rwanda')");
9429 $dbh->do("INSERT IGNORE INTO language_subtag_registry( subtag, type, description, added) VALUES ( 'SE', 'region', 'Sweden','2014-10-30')");
9430 $dbh->do("INSERT IGNORE INTO language_descriptions(subtag, type, lang, description) VALUES ( 'SE', 'region', 'en', 'Sweden')");
9431 $dbh->do("INSERT IGNORE INTO language_descriptions(subtag, type, lang, description) VALUES ( 'SE', 'region', 'sv', 'Sverige')");
9433 $dbh->do("INSERT IGNORE INTO language_subtag_registry( subtag, type, description, added) VALUES ( 'SI', 'region', 'Slovenia','2014-10-30')");
9434 $dbh->do("INSERT IGNORE INTO language_descriptions(subtag, type, lang, description) VALUES ( 'SI', 'region', 'en', 'Slovenia')");
9435 $dbh->do("INSERT IGNORE INTO language_descriptions(subtag, type, lang, description) VALUES ( 'SI', 'region', 'sl', 'Slovenija')");
9437 $dbh->do("INSERT IGNORE INTO language_subtag_registry( subtag, type, description, added) VALUES ( 'SK', 'region', 'Slovakia','2014-10-30')");
9438 $dbh->do("INSERT IGNORE INTO language_descriptions(subtag, type, lang, description) VALUES ( 'SK', 'region', 'en', 'Slovakia')");
9439 $dbh->do("INSERT IGNORE INTO language_descriptions(subtag, type, lang, description) VALUES ( 'SK', 'region', 'sk', 'Slovensko')");
9441 $dbh->do("INSERT IGNORE INTO language_subtag_registry( subtag, type, description, added) VALUES ( 'TH', 'region', 'Thailand','2014-10-30')");
9442 $dbh->do("INSERT IGNORE INTO language_descriptions(subtag, type, lang, description) VALUES ( 'TH', 'region', 'en', 'Thailand')");
9443 $dbh->do("INSERT IGNORE INTO language_descriptions(subtag, type, lang, description) VALUES ( 'TH', 'region', 'th', 'ประเทศไทย')");
9445 $dbh->do("INSERT IGNORE INTO language_subtag_registry( subtag, type, description, added) VALUES ( 'TR', 'region', 'Turkey','2014-10-30')");
9446 $dbh->do("INSERT IGNORE INTO language_descriptions(subtag, type, lang, description) VALUES ( 'TR', 'region', 'en', 'Turkey')");
9447 $dbh->do("INSERT IGNORE INTO language_descriptions(subtag, type, lang, description) VALUES ( 'TR', 'region', 'tr', 'Türkiye')");
9449 $dbh->do("INSERT IGNORE INTO language_subtag_registry( subtag, type, description, added) VALUES ( 'TW', 'region', 'Taiwan','2014-10-30')");
9450 $dbh->do("INSERT IGNORE INTO language_descriptions(subtag, type, lang, description) VALUES ( 'TW', 'region', 'en', 'Taiwan')");
9451 $dbh->do("INSERT IGNORE INTO language_descriptions(subtag, type, lang, description) VALUES ( 'TW', 'region', 'zh', '台灣')");
9453 $dbh->do("INSERT IGNORE INTO language_subtag_registry( subtag, type, description, added) VALUES ( 'UA', 'region', 'Ukraine','2014-10-30')");
9454 $dbh->do("INSERT IGNORE INTO language_descriptions(subtag, type, lang, description) VALUES ( 'UA', 'region', 'en', 'Ukraine')");
9455 $dbh->do("INSERT IGNORE INTO language_descriptions(subtag, type, lang, description) VALUES ( 'UA', 'region', 'uk', 'Україна')");
9457 $dbh->do("INSERT IGNORE INTO language_subtag_registry( subtag, type, description, added) VALUES ( 'VN', 'region', 'Vietnam','2014-10-30')");
9458 $dbh->do("INSERT IGNORE INTO language_descriptions(subtag, type, lang, description) VALUES ( 'VN', 'region', 'en', 'Vietnam')");
9459 $dbh->do("INSERT IGNORE INTO language_descriptions(subtag, type, lang, description) VALUES ( 'VN', 'region', 'vi', 'Việt Nam')");
9461 print "Upgrade to $DBversion done (Bug 12250: Update descriptions for languages, scripts and regions)\n";
9462 SetVersion($DBversion);
9465 $DBversion = "3.17.00.050";
9466 if ( CheckVersion($DBversion) ) {
9468 INSERT INTO permissions (module_bit, code, description) VALUES
9469 (13, 'records_batchdel', 'Perform batch deletion of records (bibliographic or authority)')
9471 print "Upgrade to $DBversion done (Bug 12403: Add permission tools_records_batchdelitem)\n";
9472 SetVersion($DBversion);
9475 $DBversion = "3.17.00.051";
9476 if ( CheckVersion($DBversion) ) {
9477 $dbh->do("INSERT INTO systempreferences (variable,value,options,explanation,type) VALUES('GoogleIndicTransliteration','0','','GoogleIndicTransliteration on the OPAC.','YesNo')");
9478 print "Upgrade to $DBversion done (Bug 13211: Added system preferences GoogleIndicTransliteration on the OPAC)\n";
9479 SetVersion($DBversion);
9482 $DBversion = "3.17.00.052";
9483 if ( CheckVersion($DBversion) ) {
9485 INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES('OpacAdvSearchOptions','pubdate|itemtype|language|sorting|location','Show search options','pubdate|itemtype|language|subtype|sorting|location','multiple');
9489 INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES('OpacAdvSearchMoreOptions','pubdate|itemtype|language|subtype|sorting|location','Show search options for the expanded view (More options)','pubdate|itemtype|language|subtype|sorting|location','multiple');
9491 print "Upgrade to $DBversion done (Bug 9043: Add system preference OpacAdvSearchOptions and OpacAdvSearchMoreOptions)\n";
9492 SetVersion ($DBversion);
9495 $DBversion = "3.17.00.053";
9496 if ( CheckVersion($DBversion) ) {
9498 INSERT INTO permissions (module_bit, code, description) VALUES ('9', 'edit_items_restricted', 'Limit item modification to subfields defined in the SubfieldsToAllowForRestrictedEditing preference (please note that edit_item is still required)');
9502 INSERT INTO permissions (module_bit, code, description) VALUES ('9', 'delete_all_items', 'Delete all items at once');
9506 INSERT INTO permissions (module_bit, code, description) VALUES ('13', 'items_batchmod_restricted', 'Limit batch item modification to subfields defined in the SubfieldsToAllowForRestrictedBatchmod preference (please note that items_batchmod is still required)');
9509 # The delete_all_items permission should be added to users having the edit_items permission.
9511 INSERT INTO user_permissions (borrowernumber, module_bit, code) SELECT borrowernumber, module_bit, "delete_all_items" FROM user_permissions WHERE code="edit_items";
9516 INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES ('SubfieldsToAllowForRestrictedEditing','','Define a list of subfields for which edition is authorized when edit_items_restricted permission is enabled, separated by spaces. Example: 995\$f 995\$h 995\$j','','Free');
9520 INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES ('SubfieldsToAllowForRestrictedBatchmod','','Define a list of subfields for which edition is authorized when items_batchmod_restricted permission is enabled, separated by spaces. Example: 995\$f 995\$h 995\$j','','Free');
9523 print "Upgrade to $DBversion done (Bug 7673: Adds 2 new prefs (SubfieldsToAllowForRestrictedEditing and SubfieldsToAllowForRestrictedBatchmod) and 3 new permissions (edit_items_restricted and delete_all_items and items_batchmod_restricted))\n";
9524 SetVersion($DBversion);
9527 $DBversion = "3.17.00.054";
9528 if (CheckVersion($DBversion)) {
9530 INSERT INTO systempreferences ( variable, value, options, explanation, type ) VALUES
9531 ('AllowRenewalIfOtherItemsAvailable','0',NULL,'If enabled, allow a patron to renew an item with unfilled holds if other available items can fill that hold.','YesNo')
9533 print "Upgrade to $DBversion done (Bug 11634 - Allow renewal of item with unfilled holds if other available items can fill those holds)\n";
9534 SetVersion($DBversion);
9537 $DBversion = "3.17.00.055";
9538 if ( CheckVersion($DBversion) ) {
9539 $dbh->do("INSERT IGNORE INTO systempreferences (variable,value,options,explanation,type) VALUES ('NorwegianPatronDBEnable', '0', NULL, 'Enable communication with the Norwegian national patron database.', 'YesNo')");
9540 $dbh->do("INSERT IGNORE INTO systempreferences (variable,value,options,explanation,type) VALUES ('NorwegianPatronDBEndpoint', '', NULL, 'Which NL endpoint to use.', 'Free')");
9541 $dbh->do("INSERT IGNORE INTO systempreferences (variable,value,options,explanation,type) VALUES ('NorwegianPatronDBUsername', '', NULL, 'Username for communication with the Norwegian national patron database.', 'Free')");
9542 $dbh->do("INSERT IGNORE INTO systempreferences (variable,value,options,explanation,type) VALUES ('NorwegianPatronDBPassword', '', NULL, 'Password for communication with the Norwegian national patron database.', 'Free')");
9543 $dbh->do("INSERT IGNORE INTO systempreferences (variable,value,options,explanation,type) VALUES ('NorwegianPatronDBSearchNLAfterLocalHit','0',NULL,'Search NL if a search has already given one or more local hits?.','YesNo')");
9545 CREATE TABLE borrower_sync (
9546 borrowersyncid int(11) NOT NULL AUTO_INCREMENT,
9547 borrowernumber int(11) NOT NULL,
9548 synctype varchar(32) NOT NULL,
9549 sync tinyint(1) NOT NULL DEFAULT '0',
9550 syncstatus varchar(10) DEFAULT NULL,
9551 lastsync varchar(50) DEFAULT NULL,
9552 hashed_pin varchar(64) DEFAULT NULL,
9553 PRIMARY KEY (borrowersyncid),
9554 KEY borrowernumber (borrowernumber),
9555 CONSTRAINT borrower_sync_ibfk_1 FOREIGN KEY (borrowernumber) REFERENCES borrowers (borrowernumber) ON DELETE CASCADE ON UPDATE CASCADE
9556 ) ENGINE=InnoDB DEFAULT CHARSET=utf8"
9558 print "Upgrade to $DBversion done (Bug 11401 - Add support for Norwegian national library card)\n";
9559 SetVersion($DBversion);
9562 $DBversion = "3.17.00.056";
9563 if ( CheckVersion($DBversion) ) {
9565 UPDATE systempreferences SET value = 'pubdate,itemtype,language,sorting,location' WHERE variable='OpacAdvSearchOptions'
9569 UPDATE systempreferences SET value = 'pubdate,itemtype,language,subtype,sorting,location' WHERE variable='OpacAdvSearchMoreOptions'
9572 print "Upgrade to $DBversion done (Bug 9043 - Update the values for OpacAdvSearchOptions and OpacAdvSearchOptions)\n";
9573 SetVersion($DBversion);
9576 $DBversion = "3.17.00.057";
9577 if ( CheckVersion($DBversion) ) {
9578 print "Upgrade to $DBversion done (Koha 3.18 beta)\n";
9579 SetVersion ($DBversion);
9582 $DBversion = "3.17.00.058";
9583 if( CheckVersion($DBversion) ){
9584 $dbh->do("INSERT INTO systempreferences (variable, explanation, type) VALUES('DefaultLongOverdueChargeValue','Charge a lost item to the borrower account when the LOST value of the item changes to n', 'integer')");
9585 $dbh->do("INSERT INTO systempreferences (variable, explanation, type) VALUES('DefaultLongOverdueLostValue', 'Set the LOST value of an item to n when the item has been overdue for more than defaultlongoverduedays days.', 'integer')");
9586 $dbh->do("INSERT INTO systempreferences (variable, explanation, type) VALUES('DefaultLongOverdueDays', 'Set the LOST value of an item when the item has been overdue for more than n days.', 'integer')");
9587 print "Upgrade to $DBversion done (Bug 8337: System preferences for longoverdue cron)\n";
9588 SetVersion($DBversion);
9591 $DBversion = "3.17.00.059";
9592 if ( CheckVersion($DBversion) ) {
9594 UPDATE permissions SET description = "Add and delete budgets (but can't modifiy budgets)" WHERE description = "Add and delete budgets (but cant modify budgets)";
9596 print "Upgrade to $DBversion done (Bug 10749: Fix typo in budget_add_del permission description)\n";
9597 SetVersion ($DBversion);
9600 $DBversion = "3.17.00.060";
9601 if ( CheckVersion($DBversion) ) {
9602 my $count_l = $dbh->selectcol_arrayref(q|
9603 SELECT COUNT(*) FROM letter WHERE message_transport_type='feed'
9605 my $count_mq = $dbh->selectcol_arrayref(q|
9606 SELECT COUNT(*) FROM message_queue WHERE message_transport_type='feed'
9608 my $count_ott = $dbh->selectcol_arrayref(q|
9609 SELECT COUNT(*) FROM overduerules_transport_types WHERE message_transport_type='feed'
9611 my $count_mt = $dbh->selectcol_arrayref(q|
9612 SELECT COUNT(*) FROM message_transports WHERE message_transport_type='feed'
9614 my $count_bmtp = $dbh->selectcol_arrayref(q|
9615 SELECT COUNT(*) FROM borrower_message_transport_preferences WHERE message_transport_type='feed'
9619 if ( $count_l->[0] == 0 and $count_mq->[0] == 0 and $count_ott->[0] == 0 and $count_mt->[0] == 0 and $count_bmtp->[0] == 0 ) {
9620 $deleted = $dbh->do(q|
9621 DELETE FROM message_transport_types where message_transport_type='feed'
9623 $deleted = $deleted ne '0E0' ? 1 : 0;
9626 print "Upgrade to $DBversion done (Bug 12298: Delete the 'feed' message transport type " . ($deleted ? '(deleted!)' : '(not deleted)') . ")\n";
9627 SetVersion($DBversion);
9630 $DBversion = "3.18.00.000";
9631 if ( CheckVersion($DBversion) ) {
9632 print "Upgrade to $DBversion done (3.18.0 release)\n";
9633 SetVersion($DBversion);
9636 $DBversion = "3.19.00.000";
9637 if ( CheckVersion($DBversion) ) {
9638 print "Upgrade to $DBversion done (there's life after 3.18)\n";
9639 SetVersion ($DBversion);
9642 $DBversion = "3.19.00.001";
9643 if ( CheckVersion($DBversion) ) {
9645 UPDATE systempreferences
9646 SET options = 'public|school|academic|research|private|societyAssociation|corporate|government|religiousOrg|subscription'
9647 WHERE variable = 'UsageStatsLibraryType'
9649 if ( C4::Context->preference("UsageStatsLibraryType") eq "university" ) {
9650 C4::Context->set_preference("UsageStatsLibraryType", "academic")
9652 print "Upgrade to $DBversion done (Bug 13436: Add more options to UsageStatsLibraryType)\n";
9653 SetVersion ($DBversion);
9656 $DBversion = "3.19.00.002";
9657 if ( CheckVersion($DBversion) ) {
9659 UPDATE suggestions SET branchcode="" WHERE branchcode="__ANY__"
9661 print "upgrade to $DBversion done (Bug 10753: replace __ANY__ with empty string in suggestions.branchcode)\n";
9662 SetVersion ($DBversion);
9665 $DBversion = "3.19.00.003";
9666 if ( CheckVersion($DBversion) ) {
9667 my ($count) = $dbh->selectrow_array("SELECT COUNT(*) FROM borrowers GROUP BY userid HAVING COUNT(userid) > 1");
9670 print "Upgrade to $DBversion done (Bug 1861 - Unique patrons logins not (totally) enforced) FAILED!\n";
9671 print "Your database has users with duplicate user logins. Please have your administrator deduplicate your user logins.\n";
9672 print "Afterward, your Koha administrator should execute the following database query: ALTER TABLE borrowers DROP INDEX userid, ADD UNIQUE userid (userid)";
9675 ALTER TABLE borrowers
9677 ADD UNIQUE userid (userid)
9679 print "Upgrade to $DBversion done (Bug 1861: Unique patrons logins not (totally) enforced)\n";
9681 SetVersion ($DBversion);
9684 $DBversion = "3.19.00.004";
9685 if ( CheckVersion($DBversion) ) {
9686 my $pref_value = C4::Context->preference('OpacExportOptions');
9687 $pref_value =~ s/\|/,/g; # multiple is separated by ,
9689 UPDATE systempreferences
9692 WHERE variable = 'OpacExportOptions'
9693 }, {}, $pref_value );
9694 print "Upgrade to $DBversion done (Bug 13346: OpacExportOptions is now multiple)\n";
9695 SetVersion ($DBversion);
9698 $DBversion = "3.19.00.005";
9699 if(CheckVersion($DBversion)) {
9701 ALTER TABLE authorised_values MODIFY COLUMN category VARCHAR(32) NOT NULL DEFAULT ''
9705 ALTER TABLE borrower_attribute_types MODIFY COLUMN authorised_value_category VARCHAR(32) DEFAULT NULL
9708 print "Upgrade to $DBversion done (Bug 13379: Modify authorised_values.category to varchar(32))\n";
9709 SetVersion($DBversion);
9712 $DBversion = "3.19.00.006";
9713 if ( CheckVersion($DBversion) ) {
9714 $dbh->do(q|SET foreign_key_checks = 0|);
9715 my $sth = $dbh->table_info( '','','','TABLE' );
9716 my ( $cat, $schema, $name, $type, $remarks );
9717 while ( ( $cat, $schema, $name, $type, $remarks ) = $sth->fetchrow_array ) {
9718 my $table_sth = $dbh->prepare(qq|SHOW CREATE TABLE $name|);
9719 $table_sth->execute;
9720 my @table = $table_sth->fetchrow_array;
9721 unless ( $table[1] =~ /COLLATE=utf8mb4_unicode_ci/ ) { #catches utf8mb4 collated tables
9722 if ( $name eq 'marc_subfield_structure' ) {
9724 ALTER TABLE marc_subfield_structure
9725 MODIFY COLUMN tagfield varchar(3) COLLATE utf8_unicode_ci NOT NULL DEFAULT '',
9726 MODIFY COLUMN tagsubfield varchar(1) COLLATE utf8_bin NOT NULL DEFAULT '',
9727 MODIFY COLUMN liblibrarian varchar(255) COLLATE utf8_unicode_ci NOT NULL DEFAULT '',
9728 MODIFY COLUMN libopac varchar(255) COLLATE utf8_unicode_ci NOT NULL DEFAULT '',
9729 MODIFY COLUMN kohafield varchar(40) COLLATE utf8_unicode_ci DEFAULT NULL,
9730 MODIFY COLUMN authorised_value varchar(20) COLLATE utf8_unicode_ci DEFAULT NULL,
9731 MODIFY COLUMN authtypecode varchar(20) COLLATE utf8_unicode_ci DEFAULT NULL,
9732 MODIFY COLUMN value_builder varchar(80) COLLATE utf8_unicode_ci DEFAULT NULL,
9733 MODIFY COLUMN frameworkcode varchar(4) COLLATE utf8_unicode_ci NOT NULL DEFAULT '',
9734 MODIFY COLUMN seealso varchar(1100) COLLATE utf8_unicode_ci DEFAULT NULL,
9735 MODIFY COLUMN link varchar(80) COLLATE utf8_unicode_ci DEFAULT NULL
9737 $dbh->do(qq|ALTER TABLE $name CHARACTER SET utf8 COLLATE utf8_unicode_ci|);
9740 $dbh->do(qq|ALTER TABLE $name CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci|);
9744 $dbh->do(q|SET foreign_key_checks = 1|);;
9746 print "Upgrade to $DBversion done (Bug 11944: Convert DB tables to utf8_unicode_ci)\n";
9747 SetVersion($DBversion);
9750 $DBversion = "3.19.00.007";
9751 if ( CheckVersion($DBversion) ) {
9752 my $orphan_budgets = $dbh->selectall_arrayref(q|
9753 SELECT budget_id, budget_name, budget_code
9755 WHERE budget_parent_id IS NOT NULL
9756 AND budget_parent_id NOT IN (
9757 SELECT DISTINCT budget_id FROM aqbudgets
9759 |, { Slice => {} } );
9761 if ( @$orphan_budgets ) {
9762 for my $b ( @$orphan_budgets ) {
9763 print "Fund $b->{budget_name} (code:$b->{budget_code}, id:$b->{budget_id}) does not have a parent, it may cause problem\n";
9765 print "Upgrade to $DBversion done (Bug 12905: Check budget integrity: FAIL)\n";
9767 print "Upgrade to $DBversion done (Bug 12905: Check budget integrity: OK)\n";
9769 SetVersion ($DBversion);
9772 $DBversion = "3.19.00.008";
9773 if ( CheckVersion($DBversion) ) {
9774 my $number_of_orders_not_linked = $dbh->selectcol_arrayref(q|
9780 WHERE b.budget_id = o.budget_id
9784 if ( $number_of_orders_not_linked->[0] > 0 ) {
9786 INSERT INTO aqbudgetperiods(budget_period_startdate, budget_period_enddate, budget_period_active, budget_period_description, budget_period_total) VALUES ( CAST(NOW() AS date), CAST(NOW() AS date), 0, "WARNING: This budget has been automatically created by the updatedatabase script, please see bug 12601 for more information", 0)
9788 my $budget_period_id = $dbh->last_insert_id( undef, undef, 'aqbudgetperiods', undef );
9790 INSERT INTO aqbudgets(budget_code, budget_name, budget_amount, budget_period_id) VALUES ( "BACKUP_TMP", "WARNING: fund created by the updatedatabase script, please see bug 12601", 0, $budget_period_id );
9792 my $budget_id = $dbh->last_insert_id( undef, undef, 'aqbudgets', undef );
9795 SET budget_id = $budget_id
9799 WHERE b.budget_id = o.budget_id
9805 ALTER TABLE aqorders
9806 ADD CONSTRAINT aqorders_budget_id_fk FOREIGN KEY (budget_id) REFERENCES aqbudgets(budget_id) ON DELETE CASCADE ON UPDATE CASCADE
9809 print "Upgrade to $DBversion done (Bug 12601: Add new foreign key aqorders.budget_id" . ( ( $number_of_orders_not_linked->[0] > 0 ) ? ' WARNING: temporary budget and fund have been created (search for "BACKUP_TMP"). At least one of your order was not linked to a budget' : '' ) . ")\n";
9810 SetVersion($DBversion);
9813 $DBversion = "3.19.00.009";
9814 if ( CheckVersion($DBversion) ) {
9816 UPDATE suggestions s SET s.budgetid = NULL
9820 WHERE b.budget_id = s.budgetid
9825 ALTER TABLE suggestions
9826 ADD CONSTRAINT suggestions_budget_id_fk FOREIGN KEY (budgetid) REFERENCES aqbudgets(budget_id) ON DELETE SET NULL ON UPDATE CASCADE
9829 print "Upgrade to $DBversion done (Bug 13007: Add new foreign key suggestions.budgetid)\n";
9830 SetVersion($DBversion);
9833 $DBversion = "3.19.00.010";
9834 if ( CheckVersion($DBversion) ) {
9836 INSERT IGNORE INTO systempreferences (variable,value,explanation,options,type)
9837 VALUES('SessionRestrictionByIP','1','Check for Change in Remote IP address for Session Security. Disable when remote ip address changes frequently.','','YesNo')
9839 print "Upgrade to $DBversion done (Bug 5511: SessionRestrictionByIP)\n";
9840 SetVersion ($DBversion);
9843 $DBversion = "3.19.00.011";
9844 if ( CheckVersion($DBversion) ) {
9846 INSERT INTO userflags (bit, flag, flagdesc, defaulton) VALUES
9847 (20, 'lists', 'Lists', 0)
9850 INSERT INTO permissions (module_bit, code, description) VALUES
9851 (20, 'delete_public_lists', 'Delete public lists')
9853 print "Upgrade to $DBversion done (Bug 13417: Add permission to delete public lists)\n";
9854 SetVersion ($DBversion);
9857 $DBversion = "3.19.00.012";
9858 if(CheckVersion($DBversion)) {
9860 ALTER TABLE biblioitems MODIFY COLUMN marcxml longtext
9864 ALTER TABLE deletedbiblioitems MODIFY COLUMN marcxml longtext
9867 print "Upgrade to $DBversion done (Bug 13523 Remove NOT NULL restriction on field marcxml due to mysql STRICT_TRANS_TABLES)\n";
9868 SetVersion ($DBversion);
9871 $DBversion = "3.19.00.013";
9872 if ( CheckVersion($DBversion) ) {
9874 INSERT INTO permissions (module_bit, code, description) VALUES
9875 (13, 'records_batchmod', 'Perform batch modification of records (biblios or authorities)')
9877 print "Upgrade to $DBversion done (Bug 11395: Add permission tools_records_batchmod)\n";
9878 SetVersion($DBversion);
9881 $DBversion = "3.19.00.014";
9882 if ( CheckVersion($DBversion) ) {
9884 CREATE TABLE aqorder_users (
9885 ordernumber int(11) NOT NULL,
9886 borrowernumber int(11) NOT NULL,
9887 PRIMARY KEY (ordernumber, borrowernumber),
9888 CONSTRAINT aqorder_users_ibfk_1 FOREIGN KEY (ordernumber) REFERENCES aqorders (ordernumber) ON DELETE CASCADE ON UPDATE CASCADE,
9889 CONSTRAINT aqorder_users_ibfk_2 FOREIGN KEY (borrowernumber) REFERENCES borrowers (borrowernumber) ON DELETE CASCADE ON UPDATE CASCADE
9890 ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
9894 INSERT INTO letter(module, code, branchcode, name, title, content, message_transport_type)
9895 VALUES ('acquisition', 'ACQ_NOTIF_ON_RECEIV', '', 'Notification on receiving', 'Order received', 'Dear <<borrowers.firstname>> <<borrowers.surname>>,\n\n The order <<aqorders.ordernumber>> (<<biblio.title>>) has been received.\n\nYour library.', 'email')
9897 print "Upgrade to $DBversion done (Bug 12648: Add letter ACQ_NOTIF_ON_RECEIV )\n";
9898 SetVersion ($DBversion);
9901 $DBversion = "3.19.00.015";
9902 if ( CheckVersion($DBversion) ) {
9904 ALTER TABLE search_history ADD COLUMN id INT(11) NOT NULL AUTO_INCREMENT FIRST, ADD PRIMARY KEY(id);
9906 print "Upgrade to $DBversion done (Bug 11430: Add primary key for search_history)\n";
9907 SetVersion ($DBversion);
9910 $DBversion = "3.19.00.016";
9911 if(CheckVersion($DBversion)) {
9912 my @order_cancellation_reason = $dbh->selectrow_array("SELECT count(*) FROM authorised_values WHERE category='ORDER_CANCELLATION_REASON'");
9913 if ($order_cancellation_reason[0] == 0) {
9915 INSERT INTO authorised_values (category, authorised_value, lib) VALUES
9916 ('ORDER_CANCELLATION_REASON', 0, 'No reason provided'),
9917 ('ORDER_CANCELLATION_REASON', 1, 'Out of stock'),
9918 ('ORDER_CANCELLATION_REASON', 2, 'Restocking')
9921 my $already_existing_reasons = $dbh->selectcol_arrayref(q{
9922 SELECT DISTINCT( cancellationreason )
9924 }, { Slice => {} });
9926 my $update_orders_sth = $dbh->prepare(q{
9928 SET cancellationreason = ?
9929 WHERE cancellationreason = ?
9932 my $insert_av_sth = $dbh->prepare(q{
9933 INSERT INTO authorised_values (category, authorised_value, lib) VALUES
9934 ('ORDER_CANCELLATION_REASON', ?, ?)
9937 for my $reason ( @$already_existing_reasons ) {
9938 next unless $reason;
9939 $insert_av_sth->execute( $i, $reason );
9940 $update_orders_sth->execute( $i, $reason );
9943 print "Upgrade to $DBversion done (Bug 13380: Add the ORDER_CANCELLATION_REASON authorised value)\n";
9946 print "Upgrade to $DBversion done (Bug 13380: ORDER_CANCELLATION_REASON authorised value already existed from earlier update!)\n";
9949 SetVersion($DBversion);
9952 $DBversion = '3.19.00.017';
9953 if ( CheckVersion($DBversion) ) {
9954 # First create the column
9955 $dbh->do("ALTER TABLE issuingrules ADD onshelfholds tinyint(1) default 0 NOT NULL");
9956 # Now update the column
9957 if (C4::Context->preference("AllowOnShelfHolds")){
9958 # Pref is on, set allow for all rules
9959 $dbh->do("UPDATE issuingrules SET onshelfholds=1");
9961 # If the preference is not set, leave off
9962 $dbh->do("UPDATE issuingrules SET onshelfholds=0");
9964 # Remove from the systempreferences table
9965 $dbh->do("DELETE FROM systempreferences WHERE variable = 'AllowOnShelfHolds'");
9967 # First create the column
9968 $dbh->do("ALTER TABLE issuingrules ADD opacitemholds char(1) DEFAULT 'N' NOT NULL");
9969 # Now update the column
9970 my $opacitemholds = C4::Context->preference("OPACItemHolds") || '';
9971 if (lc ($opacitemholds) eq 'force') {
9972 $opacitemholds = 'F';
9975 $opacitemholds = $opacitemholds ? 'Y' : 'N';
9977 # Set allow for all rules
9978 $dbh->do("UPDATE issuingrules SET opacitemholds='$opacitemholds'");
9980 # Remove from the systempreferences table
9981 $dbh->do("DELETE FROM systempreferences WHERE variable = 'OPACItemHolds'");
9983 print "Upgrade to $DBversion done (Bug 5786: Move AllowOnShelfHolds to circulation matrix; Move OPACItemHolds system preference to circulation matrix)\n";
9984 SetVersion ($DBversion);
9988 $DBversion = "3.19.00.018";
9989 if ( CheckVersion($DBversion) ) {
9991 UPDATE systempreferences set variable="OpacAdditionalStylesheet" WHERE variable="opaccolorstylesheet"
9993 print "Upgrade to $DBversion done (Bug 10328: Rename opaccolorstylesheet to OpacAdditionalStylesheet\n";
9994 SetVersion ($DBversion);
9997 $DBversion = "3.19.00.019";
9998 if ( CheckVersion($DBversion) ) {
10000 INSERT IGNORE INTO systempreferences (variable, value, explanation, options, type)
10001 VALUES('Coce','0', 'If on, enables cover retrieval from the configured Coce server', NULL, 'YesNo')
10004 INSERT IGNORE INTO systempreferences (variable, value, explanation, options, type)
10005 VALUES('CoceHost', NULL, 'Coce server URL', NULL,'Free')
10008 INSERT IGNORE INTO systempreferences (variable, value, explanation, options, type)
10009 VALUES('CoceProviders', NULL, 'Coce providers', 'aws,gb,ol', 'multiple')
10011 print "Upgrade to $DBversion done (Bug 9580: Cover image from Coce, a remote image URL cache)\n";
10012 SetVersion($DBversion);
10015 $DBversion = "3.19.00.020";
10016 if ( CheckVersion($DBversion) ) {
10018 ALTER TABLE aqorders DROP COLUMN supplierreference;
10021 print "Upgrade to $DBversion done (Bug 11008: DROP column aqorders.supplierreference)\n";
10022 SetVersion($DBversion);
10025 $DBversion = "3.19.00.021";
10026 if ( CheckVersion($DBversion) ) {
10028 ALTER TABLE issues DROP COLUMN issuingbranch
10031 ALTER TABLE old_issues DROP COLUMN issuingbranch
10033 print "Upgrade to $DBversion done (Bug 2806: Remove issuingbranch columns)\n";
10034 SetVersion ($DBversion);
10037 $DBversion = '3.19.00.022';
10038 if ( CheckVersion($DBversion) ) {
10040 ALTER TABLE suggestions DROP COLUMN mailoverseeing;
10042 print "Upgrade to $DBversion done (Bug 13006: Drop column suggestion.mailoverseeing)\n";
10043 SetVersion($DBversion);
10046 $DBversion = "3.19.00.023";
10047 if ( CheckVersion($DBversion) ) {
10049 DELETE FROM systempreferences where variable = 'AddPatronLists'
10051 print "Upgrade to $DBversion done (Bug 13497: Remove the AddPatronLists system preferences)\n";
10052 SetVersion ($DBversion);
10055 $DBversion = "3.19.00.024";
10056 if ( CheckVersion($DBversion) ) {
10057 $dbh->do(qq|DROP table patroncards;|);
10058 print "Upgrade to $DBversion done (Bug 13539: Remove table patroncards from database as it's no longer in use)\n";
10059 SetVersion ($DBversion);
10062 $DBversion = "3.19.00.025";
10063 if ( CheckVersion($DBversion) ) {
10065 INSERT INTO systempreferences ( variable, value, options, explanation, type ) VALUES
10066 ('SearchWithISBNVariations','0',NULL,'If enabled, search on all variations of the ISBN','YesNo')
10068 print "Upgrade to $DBversion done (Bug 13528: Add the SearchWithISBNVariations syspref)\n";
10069 SetVersion ($DBversion);
10072 $DBversion = "3.19.00.026";
10073 if( CheckVersion($DBversion) ) {
10074 if ( C4::Context->preference('marcflavour') eq 'MARC21' ) {
10076 INSERT IGNORE INTO auth_tag_structure (authtypecode, tagfield, liblibrarian, libopac, repeatable, mandatory, authorised_value) VALUES
10077 ('', '388', 'TIME PERIOD OF CREATION', 'TIME PERIOD OF CREATION', 1, 0, NULL);
10081 INSERT IGNORE INTO auth_subfield_structure (authtypecode, tagfield, tagsubfield, liblibrarian, libopac, repeatable,
10082 mandatory, tab, authorised_value, value_builder, seealso, isurl, hidden, linkid, kohafield, frameworkcode) VALUES
10083 ('', '388', '0', 'Authority record control number or standard number', 'Authority record control number or standard number', 1, 0, 3, NULL, NULL, NULL, 0, 0, '', '', ''),
10084 ('', '388', '2', 'Source of term', 'Source of term', 0, 0, 3, NULL, NULL, NULL, 0, 0, '', '', ''),
10085 ('', '388', '3', 'Materials specified', 'Materials specified', 0, 0, 3, NULL, NULL, NULL, 0, 0, '', '', ''),
10086 ('', '388', '6', 'Linkage', 'Linkage', 0, 0, 3, NULL, NULL, NULL, 0, 0, '', '', ''),
10087 ('', '388', '8', 'Field link and sequence number', 'Field link and sequence number', 1, 0, 3, NULL, NULL, NULL, 0, 0, '', '', ''),
10088 ('', '388', 'a', 'Time period of creation term', 'Time period of creation term', 1, 0, 3, NULL, NULL, NULL, 0, 0, '', '', '');
10092 UPDATE IGNORE auth_subfield_structure SET repeatable = 1 WHERE tagsubfield = 'g' AND tagfield IN
10093 ('100','110','111','130','400','410','411','430','500','510','511','530','700','710','730');
10097 INSERT IGNORE INTO auth_subfield_structure (authtypecode, tagfield, tagsubfield, liblibrarian, libopac, repeatable,
10098 mandatory, tab, authorised_value, value_builder, seealso, isurl, hidden, linkid, kohafield, frameworkcode) VALUES
10099 ('', '150', 'g', 'Miscellaneous information', 'Miscellaneous information', 1, 0, 1, NULL, NULL, NULL, 0, 0, '', '', ''),
10100 ('', '151', 'g', 'Miscellaneous information', 'Miscellaneous information', 1, 0, 1, NULL, NULL, NULL, 0, 0, '', '', ''),
10101 ('', '450', 'g', 'Miscellaneous information', 'Miscellaneous information', 1, 0, 4, NULL, NULL, NULL, 0, 0, '', '', ''),
10102 ('', '451', 'g', 'Miscellaneous information', 'Miscellaneous information', 1, 0, 4, NULL, NULL, NULL, 0, 0, '', '', ''),
10103 ('', '550', 'g', 'Miscellaneous information', 'Miscellaneous information', 1, 0, 5, NULL, NULL, NULL, 0, 0, '', '', ''),
10104 ('', '551', 'g', 'Miscellaneous information', 'Miscellaneous information', 1, 0, 5, NULL, NULL, NULL, 0, 0, '', '', ''),
10105 ('', '750', 'g', 'Miscellaneous information', 'Miscellaneous information', 1, 0, 7, NULL, NULL, NULL, 0, 0, '', '', ''),
10106 ('', '751', 'g', 'Miscellaneous information', 'Miscellaneous information', 1, 0, 7, NULL, NULL, NULL, 0, 0, '', '', ''),
10107 ('', '748', 'i', 'Relationship information', 'Relationship information', 1, 0, 7, NULL, NULL, NULL, 0, 0, '', '', ''),
10108 ('', '755', 'i', 'Relationship information', 'Relationship information', 1, 0, 7, NULL, NULL, NULL, 0, 0, '', '', ''),
10109 ('', '780', 'i', 'Relationship information', 'Relationship information', 1, 0, 7, NULL, NULL, NULL, 0, 0, '', '', ''),
10110 ('', '781', 'i', 'Relationship information', 'Relationship information', 1, 0, 7, NULL, NULL, NULL, 0, 0, '', '', ''),
10111 ('', '782', 'i', 'Relationship information', 'Relationship information', 1, 0, 7, NULL, NULL, NULL, 0, 0, '', '', ''),
10112 ('', '785', 'i', 'Relationship information', 'Relationship information', 1, 0, 7, NULL, NULL, NULL, 0, 0, '', '', ''),
10113 ('', '710', '4', 'Relationship code', 'Relationship code', 1, 0, 7, NULL, NULL, NULL, 0, 0, '', '', ''),
10114 ('', '730', '4', 'Relationship code', 'Relationship code', 1, 0, 7, NULL, NULL, NULL, 0, 0, '', '', ''),
10115 ('', '748', '4', 'Relationship code', 'Relationship code', 1, 0, 7, NULL, NULL, NULL, 0, 0, '', '', ''),
10116 ('', '750', '4', 'Relationship code', 'Relationship code', 1, 0, 7, NULL, NULL, NULL, 0, 0, '', '', ''),
10117 ('', '751', '4', 'Relationship code', 'Relationship code', 1, 0, 7, NULL, NULL, NULL, 0, 0, '', '', ''),
10118 ('', '755', '4', 'Relationship code', 'Relationship code', 1, 0, 7, NULL, NULL, NULL, 0, 0, '', '', ''),
10119 ('', '762', '4', 'Relationship code', 'Relationship code', 1, 0, 7, NULL, NULL, NULL, 0, 0, '', '', ''),
10120 ('', '780', '4', 'Relationship code', 'Relationship code', 1, 0, 7, NULL, NULL, NULL, 0, 0, '', '', ''),
10121 ('', '781', '4', 'Relationship code', 'Relationship code', 1, 0, 7, NULL, NULL, NULL, 0, 0, '', '', ''),
10122 ('', '782', '4', 'Relationship code', 'Relationship code', 1, 0, 7, NULL, NULL, NULL, 0, 0, '', '', ''),
10123 ('', '785', '4', 'Relationship code', 'Relationship code', 1, 0, 7, NULL, NULL, NULL, 0, 0, '', '', ''),
10124 ('', '788', '4', 'Relationship code', 'Relationship code', 1, 0, 7, NULL, NULL, NULL, 0, 0, '', '', '');
10128 UPDATE IGNORE auth_subfield_structure SET liblibrarian = 'Relationship information', libopac = 'Relationship information'
10129 WHERE tagsubfield = 'i' AND tagfield IN ('700','710','730','750','751','762');
10133 UPDATE IGNORE auth_subfield_structure SET liblibrarian = 'Relationship code', libopac = 'Relationship code'
10134 WHERE tagsubfield = '4' AND tagfield IN ('700','710');
10138 INSERT IGNORE INTO marc_tag_structure (tagfield, liblibrarian, libopac, repeatable, mandatory, authorised_value, frameworkcode) VALUES
10139 ('370', 'ASSOCIATED PLACE', 'ASSOCIATED PLACE', 1, 0, NULL, ''),
10140 ('388', 'TIME PERIOD OF CREATION', 'TIME PERIOD OF CREATION', 1, 0, NULL, '');
10144 INSERT IGNORE INTO marc_subfield_structure (tagfield, tagsubfield, liblibrarian, libopac, repeatable, mandatory,
10145 kohafield, tab, authorised_value, authtypecode, value_builder, isurl, hidden, frameworkcode, seealso, link, defaultvalue) VALUES
10146 ('370', '0', 'Authority record control number or standard number', 'Authority record control number or standard number', 1, 0, '', 3, '', '', '', NULL, -6, '', '', '', NULL),
10147 ('370', '2', 'Source of term', 'Source of term', 0, 0, '', 3, '', '', '', NULL, -6, '', '', '', NULL),
10148 ('370', '6', 'Linkage', 'Linkage', 0, 0, '', 3, '', '', '', NULL, -6, '', '', '', NULL),
10149 ('370', '8', 'Field link and sequence number', 'Field link and sequence number', 1, 0, '', 3, '', '', '', NULL, -6, '', '', '', NULL),
10150 ('370', 'c', 'Associated country', 'Associated country', 1, 0, '', 3, '', '', '', NULL, -6, '', '', '', NULL),
10151 ('370', 'f', 'Other associated place', 'Other associated place', 1, 0, '', 3, '', '', '', NULL, -6, '', '', '', NULL),
10152 ('370', 'g', 'Place of origin of work', 'Place of origin of work', 1, 0, '', 3, '', '', '', NULL, -6, '', '', '', NULL),
10153 ('370', 's', 'Start period', 'Start period', 0, 0, '', 3, '', '', '', NULL, -6, '', '', '', NULL),
10154 ('370', 't', 'End period', 'End period', 0, 0, '', 3, '', '', '', NULL, -6, '', '', '', NULL),
10155 ('370', 'u', 'Uniform Resource Identifier', 'Uniform Resource Identifier', 1, 0, '', 3, '', '', '', NULL, -6, '', '', '', NULL),
10156 ('370', 'v', 'Source of information', 'Source of information', 1, 0, '', 3, '', '', '', NULL, -6, '', '', '', NULL),
10157 ('377', 'l', 'Language term', 'Language term', 1, 0, '', 3, '', '', '', NULL, -6, '', '', '', NULL),
10158 ('382', 's', 'Total number of performers', 'Total number of performers', 0, 0, '', 3, '', '', '', NULL, -6, '', '', '', NULL),
10159 ('388', '0', 'Authority record control number or standard number', 'Authority record control number or standard number', 1, 0, '', 3, '', '', '', NULL, -6, '', '', '', NULL),
10160 ('388', '2', 'Source of term', 'Source of term', 0, 0, '', 3, '', '', '', NULL, -6, '', '', '', NULL),
10161 ('388', '3', ' Materials specified', ' Materials specified', 0, 0, '', 3, '', '', '', NULL, -6, '', '', '', NULL),
10162 ('388', '6', ' Linkage', ' Linkage', 0, 0, '', 3, '', '', '', NULL, -6, '', '', '', NULL),
10163 ('388', '8', 'Field link and sequence number', 'Field link and sequence number', 1, 0, '', 3, '', '', '', NULL, -6, '', '', '', NULL),
10164 ('388', 'a', 'Time period of creation term', 'Time period of creation term', 1, 0, '', 3, '', '', '', NULL, -6, '', '', '', NULL),
10165 ('650', 'g', 'Miscellaneous information', 'Miscellaneous information', 1, 0, '', 6, '', '', '', 0, -1, '', '', '', NULL),
10166 ('651', 'g', 'Miscellaneous information', 'Miscellaneous information', 1, 0, '', 6, '', '', '', 0, -1, '', '', '', NULL);
10170 UPDATE IGNORE marc_subfield_structure SET repeatable = 1 WHERE tagsubfield = 'g' AND
10171 tagfield IN ('100','110','111','130','240','243','246','247','600','610','611','630','700','710','711','730','800','810','811','830');
10175 print "Upgrade to $DBversion done (Bug 13322: Update MARC21 frameworks to Update No. 19 - October 2014)\n";
10176 SetVersion($DBversion);
10179 $DBversion = '3.19.00.027';
10180 if ( CheckVersion($DBversion) ) {
10181 $dbh->do("ALTER TABLE items ADD COLUMN itemnotes_nonpublic MEDIUMTEXT AFTER itemnotes");
10182 $dbh->do("ALTER TABLE deleteditems ADD COLUMN itemnotes_nonpublic MEDIUMTEXT AFTER itemnotes");
10183 print "Upgrade to $DBversion done (Bug 4222: Nonpublic note not appearing in the staff client) <b>Please check each of your frameworks to ensure your non-public item notes are mapped to items.itemnotes_nonpublic. After doing so please have your administrator run misc/batchRebuildItemsTables.pl </b>)\n";
10184 SetVersion($DBversion);
10187 $DBversion = "3.19.00.028";
10188 if( CheckVersion($DBversion) ) {
10190 local $dbh->{PrintError} = 0;
10192 ALTER TABLE issues DROP PRIMARY KEY
10197 ALTER TABLE old_issues ADD issue_id INT( 11 ) NOT NULL AUTO_INCREMENT PRIMARY KEY FIRST
10201 ALTER TABLE old_issues CHANGE issue_id issue_id INT( 11 ) NOT NULL
10205 ALTER TABLE issues ADD issue_id INT( 11 ) NOT NULL AUTO_INCREMENT PRIMARY KEY FIRST
10209 UPDATE issues SET issue_id = issue_id + ( SELECT COUNT(*) FROM old_issues ) ORDER BY issue_id DESC
10212 my $max_issue_id = $schema->resultset('Issue')->get_column('issue_id')->max();
10213 if ($max_issue_id) {
10216 ALTER TABLE issues AUTO_INCREMENT = $max_issue_id
10220 print "Upgrade to $DBversion done (Bug 13790: Add unique id issue_id to issues and oldissues tables)\n";
10221 SetVersion($DBversion);
10224 $DBversion = "3.19.00.029";
10225 if ( CheckVersion($DBversion) ) {
10227 ALTER TABLE sessions CHANGE COLUMN a_session a_session MEDIUMTEXT
10229 print "Upgrade to $DBversion done (Bug 13606: Upgrade sessions.a_session to MEDIUMTEXT)\n";
10230 SetVersion($DBversion);
10233 $DBversion = "3.19.00.030";
10234 if ( CheckVersion($DBversion) ) {
10236 UPDATE language_subtag_registry SET subtag = 'kn' WHERE subtag = 'ka' AND description = 'Kannada';
10239 UPDATE language_rfc4646_to_iso639 SET rfc4646_subtag = 'kn' WHERE rfc4646_subtag = 'ka' AND iso639_2_code = 'kan';
10242 UPDATE language_descriptions SET subtag = 'kn', lang = 'kn' WHERE subtag = 'ka' AND lang = 'ka' AND description = 'ಕನ್ನಡ';
10245 UPDATE language_descriptions SET subtag = 'kn' WHERE subtag = 'ka' AND description = 'Kannada';
10248 INSERT IGNORE INTO language_subtag_registry( subtag, type, description, added) VALUES ( 'ka', 'language', 'Georgian','2015-04-20');
10251 DELETE FROM language_subtag_registry
10254 (SELECT MIN(id) as id,subtag,type,description,added
10255 FROM language_subtag_registry
10256 GROUP BY subtag,type,description,added)
10260 INSERT IGNORE INTO language_rfc4646_to_iso639(rfc4646_subtag,iso639_2_code) VALUES ( 'ka', 'geo');
10263 DELETE FROM language_rfc4646_to_iso639
10266 (SELECT MIN(id) as id,rfc4646_subtag,iso639_2_code
10267 FROM language_rfc4646_to_iso639
10268 GROUP BY rfc4646_subtag,iso639_2_code)
10272 INSERT IGNORE INTO language_descriptions(subtag, type, lang, description) VALUES ( 'ka', 'language', 'ka', 'ქართული');
10275 INSERT IGNORE INTO language_descriptions(subtag, type, lang, description) VALUES ( 'ka', 'language', 'en', 'Georgian');
10278 INSERT IGNORE INTO language_descriptions(subtag, type, lang, description) VALUES ( 'ka', 'language', 'fr', 'Géorgien');
10281 INSERT IGNORE INTO language_descriptions(subtag, type, lang, description) VALUES ( 'ka', 'language', 'de', 'Georgisch');
10284 INSERT IGNORE INTO language_descriptions(subtag, type, lang, description) VALUES ( 'ka', 'language', 'es', 'Georgiano');
10287 DELETE FROM language_descriptions
10290 (SELECT MIN(id) as id,subtag,type,lang,description
10291 FROM language_descriptions GROUP BY subtag,type,lang,description)
10294 print "Upgrade to $DBversion done (Bug 14030: Add Georgian language and fix Kannada language code)\n";
10295 SetVersion($DBversion);
10298 $DBversion = "3.19.00.031";
10299 if ( CheckVersion($DBversion) ) {
10301 INSERT IGNORE INTO systempreferences (variable,value,explanation,options,type)
10302 VALUES('IdRef','0','Disable/enable the IdRef webservice from the OPAC detail page.',NULL,'YesNo')
10304 print "Upgrade to $DBversion done (Bug 8992: Add system preference IdRef))\n";
10305 SetVersion($DBversion);
10308 $DBversion = "3.19.00.032";
10309 if ( CheckVersion($DBversion) ) {
10311 INSERT IGNORE INTO systempreferences (variable,value,explanation,options,type)
10312 VALUES('AddressFormat','us','Choose format to display postal addresses','','Choice')
10314 print "Upgrade to $DBversion done (Bug 4041: Address Format as a I18N/L10N system preference\n";
10315 SetVersion ($DBversion);
10318 $DBversion = "3.19.00.033";
10319 if ( CheckVersion($DBversion) ) {
10321 ALTER TABLE auth_header
10322 CHANGE COLUMN datemodified modification_time TIMESTAMP NOT NULL default CURRENT_TIMESTAMP
10325 ALTER TABLE auth_header
10326 CHANGE COLUMN modification_time modification_time TIMESTAMP NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP
10328 print "Upgrade to $DBversion done (Bug 11165: Update auth_header.datemodified when updated)\n";
10329 SetVersion ($DBversion);
10332 $DBversion = "3.19.00.034";
10333 if ( CheckVersion($DBversion) ) {
10335 INSERT IGNORE INTO systempreferences (variable,value,options,explanation,type)
10336 VALUES('CardnumberLength', '', '', 'Set a length for card numbers.', 'Free')
10338 print "Upgrade to $DBversion done (Bug 13984: CardnumberLength syspref missing on some setups\n";
10339 SetVersion ($DBversion);
10342 $DBversion = "3.19.00.035";
10343 if ( CheckVersion($DBversion) ) {
10345 INSERT IGNORE INTO systempreferences (variable,value,explanation,options,type) VALUES('useDischarge','','Allows librarians to discharge borrowers and borrowers to request a discharge','','YesNo')
10348 INSERT IGNORE INTO letter (module, code, name, title, content) VALUES('members', 'DISCHARGE', 'Discharge', 'Discharge for <<borrowers.firstname>> <<borrowers.surname>>', '<h1>Discharge</h1>\r\n\r\nThe library <<borrowers.branchcode>> certifies that the following borrower :\r\n\r\n <<borrowers.firstname>> <<borrowers.surname>>\r\n Cardnumber : <<borrowers.cardnumber>>\r\n\r\nreturned all his documents.')
10352 ALTER TABLE borrower_debarments CHANGE type type ENUM('SUSPENSION','OVERDUES','MANUAL','DISCHARGE') NOT NULL DEFAULT 'MANUAL'
10356 CREATE TABLE discharges (
10357 borrower int(11) DEFAULT NULL,
10358 needed timestamp NULL DEFAULT NULL,
10359 validated timestamp NULL DEFAULT NULL,
10360 KEY borrower_discharges_ibfk1 (borrower),
10361 CONSTRAINT borrower_discharges_ibfk1 FOREIGN KEY (borrower) REFERENCES borrowers (borrowernumber) ON DELETE CASCADE ON UPDATE CASCADE
10362 ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
10365 print "Upgrade to $DBversion done (Bug 8007: Add System Preferences useDischarge, the discharge notice and the new table discharges)\n";
10366 SetVersion($DBversion);
10369 $DBversion = "3.19.00.036";
10370 if ( CheckVersion($DBversion) ) {
10372 INSERT IGNORE INTO systempreferences (variable,value,explanation,options,type)
10373 VALUES ('CronjobLog','0',NULL,'If ON, log information from cron jobs.','YesNo')
10375 print "Upgrade to $DBversion done (Bug 13889: Add cron jobs information to system log)\n";
10376 SetVersion ($DBversion);
10379 $DBversion = "3.19.00.037";
10380 if ( CheckVersion($DBversion) ) {
10382 ALTER TABLE marc_subfield_structure
10383 MODIFY COLUMN tagsubfield varchar(1) COLLATE utf8_bin NOT NULL DEFAULT ''
10385 print "Upgrade to $DBversion done (Bug 13810: Change collate for tagsubfield (utf8_bin))\n";
10386 SetVersion ($DBversion);
10389 $DBversion = "3.19.00.038";
10390 if ( CheckVersion($DBversion) ) {
10392 ALTER TABLE virtualshelves
10393 ADD COLUMN created_on DATETIME NOT NULL AFTER lastmodified
10395 # Set created_on = lastmodified
10396 # I would say it's better than 0000-00-00
10397 # Set modified to the existing value (do not get the current ts!)
10399 UPDATE virtualshelves
10400 SET created_on = lastmodified, lastmodified = lastmodified
10402 print "Upgrade to $DBversion done (Bug 13421: Add DB field virtualshelves.created_on)\n";
10403 SetVersion ($DBversion);
10406 $DBversion = "3.19.00.039";
10407 if ( CheckVersion($DBversion) ) {
10408 print "Upgrade to $DBversion done (Koha 3.20 beta)\n";
10409 SetVersion ($DBversion);
10412 $DBversion = "3.19.00.040";
10413 if ( CheckVersion($DBversion) ) {
10415 ALTER TABLE aqorders DROP COLUMN totalamount
10417 print "Upgrade to $DBversion done (Bug 11006: Drop column aqorders.totalamount)\n";
10418 SetVersion ($DBversion);
10421 $DBversion = "3.19.00.041";
10422 if ( CheckVersion($DBversion) ) {
10423 unless ( index_exists( 'suggestions', 'status' ) ) {
10425 ALTER TABLE suggestions ADD KEY status (STATUS)
10428 unless ( index_exists( 'suggestions', 'biblionumber' ) ) {
10430 ALTER TABLE suggestions ADD KEY biblionumber (biblionumber)
10433 unless ( index_exists( 'suggestions', 'branchcode' ) ) {
10435 ALTER TABLE suggestions ADD KEY branchcode (branchcode)
10438 print "Upgrade to $DBversion done (Bug 14132: suggestions table is missing indexes)\n";
10439 SetVersion ($DBversion);
10442 $DBversion = "3.19.00.042";
10443 if ( CheckVersion($DBversion) ) {
10446 FROM auth_subfield_structure AS ass
10447 LEFT JOIN auth_types USING(authtypecode)
10448 WHERE auth_types.authtypecode IS NULL
10451 unless ( foreign_key_exists( 'auth_subfield_structure', 'auth_subfield_structure_ibfk_1' ) ) {
10453 ALTER TABLE auth_subfield_structure
10454 ADD CONSTRAINT auth_subfield_structure_ibfk_1
10455 FOREIGN KEY (authtypecode) REFERENCES auth_types(authtypecode)
10456 ON DELETE CASCADE ON UPDATE CASCADE
10460 print "Upgrade to $DBversion done (Bug 8480: Add foreign key on auth_subfield_structure.authtypecode)\n";
10461 SetVersion($DBversion);
10464 $DBversion = "3.19.00.043";
10465 if ( CheckVersion($DBversion) ) {
10467 INSERT IGNORE INTO authorised_values (category, authorised_value, lib) VALUES
10468 ('REPORT_GROUP', 'SER', 'Serials')
10471 print "Upgrade to $DBversion done (Bug 5338: Add Serial to the report groups if does not exist)\n";
10472 SetVersion ($DBversion);
10475 $DBversion = "3.20.00.000";
10476 if ( CheckVersion($DBversion) ) {
10477 print "Upgrade to $DBversion done (Koha 3.20)\n";
10478 SetVersion ($DBversion);
10481 $DBversion = "3.21.00.000";
10482 if ( CheckVersion($DBversion) ) {
10483 print "Upgrade to $DBversion done (El tiempo vuela, un nuevo ciclo comienza.)\n";
10484 SetVersion ($DBversion);
10487 $DBversion = "3.21.00.001";
10488 if ( CheckVersion($DBversion) ) {
10490 UPDATE systempreferences SET variable='IntranetUserJS' where variable='intranetuserjs'
10492 print "Upgrade to $DBversion done (Bug 12160: Rename intranetuserjs to IntranetUserJS)\n";
10493 SetVersion ($DBversion);
10496 $DBversion = "3.21.00.002";
10497 if ( CheckVersion($DBversion) ) {
10499 UPDATE systempreferences SET variable='OPACUserJS' where variable='opacuserjs'
10501 print "Upgrade to $DBversion done (Bug 12160: Rename opacuserjs to OPACUserJS)\n";
10502 SetVersion ($DBversion);
10505 $DBversion = "3.21.00.003";
10506 if ( CheckVersion($DBversion) ) {
10508 INSERT IGNORE INTO language_subtag_registry( subtag, type, description, added)
10509 VALUES ( 'IN', 'region', 'India','2015-05-28');
10512 INSERT IGNORE INTO language_descriptions(subtag, type, lang, description)
10513 VALUES ( 'IN', 'region', 'en', 'India');
10516 INSERT IGNORE INTO language_descriptions(subtag, type, lang, description)
10517 VALUES ( 'IN', 'region', 'bn', 'ভারত');
10519 print "Upgrade to $DBversion done (Bug 14285: Add new region India)\n";
10520 SetVersion ($DBversion);
10523 $DBversion = '3.21.00.004';
10524 if ( CheckVersion($DBversion) ) {
10525 my $OPACBaseURL = C4::Context->preference('OPACBaseURL');
10526 if (defined($OPACBaseURL) && substr($OPACBaseURL,0,4) ne "http") {
10527 my $explanation = q{Specify the Base URL of the OPAC, e.g., http://opac.mylibrary.com, including the protocol (http:// or https://). Otherwise, the http:// will be added automatically by Koha upon saving.};
10528 $OPACBaseURL = 'http://' . $OPACBaseURL;
10529 my $sth_OPACBaseURL = $dbh->prepare( q{
10530 UPDATE systempreferences SET value=?,explanation=?
10531 WHERE variable='OPACBaseURL'; } );
10532 $sth_OPACBaseURL->execute($OPACBaseURL,$explanation);
10534 if (defined($OPACBaseURL)) {
10535 $dbh->do( q{ UPDATE letter
10536 SET content=replace(content,
10537 'http://<<OPACBaseURL>>',
10539 WHERE content LIKE "%http://<<OPACBaseURL>>%"; } );
10542 print "Upgrade to $DBversion done (Bug 5010: Fix OPACBaseURL to include protocol)\n";
10543 SetVersion($DBversion);
10546 $DBversion = "3.21.00.005";
10547 if ( CheckVersion($DBversion) ) {
10549 INSERT IGNORE INTO systempreferences (variable,value,explanation,options,type)
10550 VALUES ('ReportsLog','0',NULL,'If ON, log information about reports.','YesNo')
10552 print "Upgrade to $DBversion done (Bug 14024: Add reports to action logs)\n";
10553 SetVersion ($DBversion);
10556 $DBversion = "3.21.00.006";
10557 if ( CheckVersion($DBversion) ) {
10558 # Remove the borrow permission flag (bit 7)
10561 SET flags = flags - ( flags & (1<<7) )
10562 WHERE flags IS NOT NULL
10566 DELETE FROM userflags WHERE bit=7;
10568 print "Upgrade to $DBversion done (Bug 7976: Remove the 'borrow' permission)\n";
10569 SetVersion($DBversion);
10572 $DBversion = "3.21.00.007";
10573 if ( CheckVersion($DBversion) ) {
10574 unless ( index_exists( 'aqbasket', 'authorisedby' ) ) {
10576 ALTER TABLE aqbasket
10577 ADD KEY authorisedby (authorisedby)
10580 unless ( index_exists( 'aqbooksellers', 'name' ) ) {
10582 ALTER TABLE aqbooksellers
10583 ADD KEY name (name(255))
10586 unless ( index_exists( 'aqbudgets', 'budget_parent_id' ) ) {
10588 ALTER TABLE aqbudgets
10589 ADD KEY budget_parent_id (budget_parent_id)|);
10591 unless ( index_exists( 'aqbudgets', 'budget_code' ) ) {
10593 ALTER TABLE aqbudgets
10594 ADD KEY budget_code (budget_code)|);
10596 unless ( index_exists( 'aqbudgets', 'budget_branchcode' ) ) {
10598 ALTER TABLE aqbudgets
10599 ADD KEY budget_branchcode (budget_branchcode)|);
10601 unless ( index_exists( 'aqbudgets', 'budget_period_id' ) ) {
10603 ALTER TABLE aqbudgets
10604 ADD KEY budget_period_id (budget_period_id)|);
10606 unless ( index_exists( 'aqbudgets', 'budget_owner_id' ) ) {
10608 ALTER TABLE aqbudgets
10609 ADD KEY budget_owner_id (budget_owner_id)|);
10611 unless ( index_exists( 'aqbudgets_planning', 'budget_period_id' ) ) {
10613 ALTER TABLE aqbudgets_planning
10614 ADD KEY budget_period_id (budget_period_id)|);
10616 unless ( index_exists( 'aqorders', 'parent_ordernumber' ) ) {
10618 ALTER TABLE aqorders
10619 ADD KEY parent_ordernumber (parent_ordernumber)|);
10621 unless ( index_exists( 'aqorders', 'orderstatus' ) ) {
10623 ALTER TABLE aqorders
10624 ADD KEY orderstatus (orderstatus)|);
10626 print "Upgrade to $DBversion done (Bug 14053: Acquisition db tables are missing indexes)\n";
10627 SetVersion ($DBversion);
10630 $DBversion = "3.21.00.008";
10631 if ( CheckVersion($DBversion) ) {
10633 DELETE IGNORE FROM systempreferences
10634 WHERE variable = 'HomeOrHoldingBranchReturn';
10636 print "Upgrade to $DBversion done (Bug 7981: Transfer message on return. HomeOrHoldingBranchReturn syspref removed in favour of circulation rules.)\n";
10637 SetVersion($DBversion);
10640 $DBversion = "3.21.00.009";
10641 if ( CheckVersion($DBversion) ) {
10643 sanitize_zero_date('aqorders', 'datecancellationprinted');
10646 UPDATE aqorders SET orderstatus='cancelled'
10647 WHERE (datecancellationprinted IS NOT NULL)
10650 print "Upgrade to $DBversion done (Bug 13993: Correct orderstatus for transferred orders)\n";
10651 SetVersion($DBversion);
10654 $DBversion = "3.21.00.010";
10655 if ( CheckVersion($DBversion) ) {
10657 ALTER TABLE message_queue
10661 ALTER TABLE message_queue
10662 ADD message_id INT( 11 ) NOT NULL AUTO_INCREMENT PRIMARY KEY FIRST
10664 print "Upgrade to $DBversion done (Bug 7793: redefine the field message_id as PRIMARY KEY of message_queue)\n";
10665 SetVersion ($DBversion);
10668 $DBversion = "3.21.00.011";
10669 if ( CheckVersion($DBversion) ) {
10671 INSERT IGNORE INTO systempreferences (variable,value,options,explanation,type)
10672 VALUES ('OpacLangSelectorMode','footer','top|both|footer','Select the location to display the language selector','Choice')
10674 print "Upgrade to $DBversion done (Bug 14252: Make the OPAC language switcher available in the masthead navbar, footer, or both)\n";
10675 SetVersion ($DBversion);
10678 $DBversion = "3.21.00.012";
10679 if ( CheckVersion($DBversion) ) {
10681 INSERT INTO letter (module, code, name, title, content, message_transport_type)
10683 ('suggestions','TO_PROCESS','Notify fund owner', 'A suggestion is ready to be processed','Dear <<borrowers.firstname>> <<borrowers.surname>>,\n\nA new suggestion is ready to be processed: <<suggestions.title>> by <<suggestions.autho r>>.\n\nThank you,\n\n<<branches.branchname>>', 'email')
10685 print "Upgrade to $DBversion done (Bug 13014: Add the TO_PROCESS letter code)\n";
10686 SetVersion($DBversion);
10689 $DBversion = "3.21.00.013";
10690 if ( CheckVersion($DBversion) ) {
10692 if ( C4::Context->preference('OPACPrivacy') ) {
10693 if ( my $anonymous_patron = C4::Context->preference('AnonymousPatron') ) {
10694 my $anonymous_patron_exists = $dbh->selectcol_arrayref(q|
10697 WHERE borrowernumber=?
10698 |, {}, $anonymous_patron);
10699 unless ( $anonymous_patron_exists->[0] ) {
10700 $msg = "Configuration WARNING: OPACPrivacy is set but AnonymousPatron is not linked to an existing patron";
10704 $msg = "Configuration WARNING: OPACPrivacy is set but AnonymousPatron is not";
10708 my $patrons_have_required_anonymity = $dbh->selectcol_arrayref(q|
10713 if ( $patrons_have_required_anonymity->[0] ) {
10714 $msg = "Configuration WARNING: OPACPrivacy is not set but $patrons_have_required_anonymity->[0] patrons have required anonymity (perhaps in a previous configuration). You should fix that asap.";
10718 $msg //= "Privacy is correctly set";
10719 print "Upgrade to $DBversion done (Bug 9942: $msg)\n";
10720 SetVersion ($DBversion);
10723 $DBversion = "3.21.00.014";
10724 if ( CheckVersion($DBversion) ) {
10726 INSERT IGNORE INTO systempreferences (variable,value,explanation,options,type)
10727 VALUES ('OAI-PMH:DeletedRecord','persistent','Koha\'s deletedbiblio table will never be deleted (persistent) or might be deleted (transient)','transient|persistent','Choice')
10730 if ( foreign_key_exists( 'oai_sets_biblios', 'oai_sets_biblios_ibfk_1' ) ) {
10732 ALTER TABLE oai_sets_biblios DROP FOREIGN KEY oai_sets_biblios_ibfk_1
10735 print "Upgrade to $DBversion done (Bug 3206: OAI repository deleted record support)\n";
10736 SetVersion ($DBversion);
10739 $DBversion = "3.21.00.015";
10740 if ( CheckVersion($DBversion) ) {
10742 UPDATE systempreferences SET value='0' WHERE variable='CalendarFirstDayOfWeek' AND value='Sunday';
10745 UPDATE systempreferences SET value='1' WHERE variable='CalendarFirstDayOfWeek' AND value='Monday';
10748 UPDATE systempreferences SET options='0|1|2|3|4|5|6' WHERE variable='CalendarFirstDayOfWeek';
10751 print "Upgrade to $DBversion done (Bug 12137: Extend functionality of CalendarFirstDayOfWeek to be any day)\n";
10752 SetVersion($DBversion);
10755 $DBversion = "3.21.00.016";
10756 if ( CheckVersion($DBversion) ) {
10757 my $rs = $schema->resultset('Systempreference');
10758 $rs->find_or_create(
10760 variable => 'DumpTemplateVarsIntranet',
10762 explanation => 'If enabled, dump all Template Toolkit variable to a comment in the html source for the staff intranet.',
10766 $rs->find_or_create(
10768 variable => 'DumpTemplateVarsOpac',
10770 explanation => 'If enabled, dump all Template Toolkit variable to a comment in the html source for the opac.',
10774 print "Upgrade to $DBversion done (Bug 13948: Add ability to dump template toolkit variables to html comment)\n";
10775 SetVersion($DBversion);
10778 $DBversion = "3.21.00.017";
10779 if ( CheckVersion($DBversion) ) {
10781 CREATE TABLE uploaded_files (
10782 id int(11) NOT NULL AUTO_INCREMENT,
10783 hashvalue CHAR(40) NOT NULL,
10784 filename TEXT NOT NULL,
10787 dtcreated timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
10788 categorycode tinytext,
10791 ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci
10794 print "Upgrade to $DBversion done (Bug 6874: New cataloging plugin upload.pl)\n";
10795 print "This plugin comes with a new config variable (upload_path) and a new table (uploaded_files)\n";
10796 print "To use it, set 'upload_path' config variable and 'OPACBaseURL' system preference and link this plugin to a subfield (856\$u for instance)\n";
10797 SetVersion($DBversion);
10800 $DBversion = "3.21.00.018";
10801 if ( CheckVersion($DBversion) ) {
10803 INSERT IGNORE INTO systempreferences (variable,value,options,explanation,type)
10805 ('RestrictedPageLocalIPs','',NULL,'Beginning of IP addresses considered as local (comma separated ex: \"127.0.0,127.0.2\")','Free'),
10806 ('RestrictedPageContent','',NULL,'HTML content of the restricted page','TextArea'),
10807 ('RestrictedPageTitle','',NULL,'Title of the restricted page (breadcrumb and header)','Free')
10809 print "Upgrade to $DBversion done (Bug 13485: Add a page to display links to restricted sites)\n";
10810 SetVersion ($DBversion);
10813 $DBversion = "3.21.00.019";
10814 if ( CheckVersion($DBversion) ) {
10815 if ( column_exists( 'reserves', 'constrainttype' ) ) {
10817 ALTER TABLE reserves DROP constrainttype
10820 ALTER TABLE old_reserves DROP constrainttype
10824 DROP TABLE IF EXISTS reserveconstraints
10826 print "Upgrade to $DBversion done (Bug 9809: Get rid of reserveconstraints)\n";
10827 SetVersion ($DBversion);
10830 $DBversion = "3.21.00.020";
10831 if ( CheckVersion($DBversion) ) {
10833 INSERT IGNORE INTO `systempreferences` (`variable`, `value`, `options`, `explanation`, `type`)
10834 VALUES ('FeeOnChangePatronCategory','1','','If set, when a patron changes to a category with enrolment fee, a fee is charged','YesNo')
10836 print "Upgrade to $DBversion done (Bug 13697: Option to don't charge a fee, if the patron changes to a category with enrolment fee)\n";
10837 SetVersion($DBversion);
10840 $DBversion = "3.21.00.021";
10841 if ( CheckVersion($DBversion) ) {
10843 INSERT IGNORE INTO systempreferences (variable,value,explanation,options,type)
10844 VALUES ('UseWYSIWYGinSystemPreferences','0','','Show WYSIWYG editor when editing certain HTML system preferences.','YesNo')
10846 print "Upgrade to $DBversion done (Bug 11584: Add wysiwyg editor to system preferences dealing with HTML)\n";
10847 SetVersion($DBversion);
10850 $DBversion = "3.21.00.022";
10851 if ( CheckVersion($DBversion) ) {
10854 FROM course_reserves AS cr
10855 LEFT JOIN course_items USING(ci_id)
10856 WHERE course_items.ci_id IS NULL
10859 my ($print_error) = $dbh->{PrintError};
10860 $dbh->{RaiseError} = 0;
10861 $dbh->{PrintError} = 0;
10862 if ( foreign_key_exists('course_reserves', 'course_reserves_ibfk_2') ) {
10863 $dbh->do(q{ALTER TABLE course_reserves DROP FOREIGN KEY course_reserves_ibfk_2});
10864 $dbh->do(q{ALTER TABLE course_reserves DROP INDEX course_reserves_ibfk_2});
10866 $dbh->{PrintError} = $print_error;
10869 ALTER TABLE course_reserves
10870 ADD CONSTRAINT course_reserves_ibfk_2
10871 FOREIGN KEY (ci_id) REFERENCES course_items (ci_id)
10872 ON DELETE CASCADE ON UPDATE CASCADE
10874 print "Upgrade to $DBversion done (Bug 14205: Deleting an Item/Record does not remove link to course reserve)\n";
10875 SetVersion($DBversion);
10878 $DBversion = "3.21.00.023";
10879 if ( CheckVersion($DBversion) ) {
10881 sanitize_zero_date('borrowers', 'debarred');
10882 sanitize_zero_date('borrowers', 'dateexpiry');
10883 sanitize_zero_date('borrowers', 'dateofbirth');
10884 sanitize_zero_date('borrowers', 'dateenrolled');
10886 print "Upgrade to $DBversion done (Bug 14717: Prevent 0000-00-00 dates in patron data)\n";
10887 SetVersion($DBversion);
10890 $DBversion = "3.21.00.024";
10891 if ( CheckVersion($DBversion) ) {
10893 ALTER TABLE marc_modification_template_actions
10894 MODIFY COLUMN action
10895 ENUM('delete_field','update_field','move_field','copy_field','copy_and_replace_field')
10898 print "Upgrade to $DBversion done (Bug 14098: Regression in Marc Modification Templates)\n";
10899 SetVersion($DBversion);
10902 $DBversion = "3.21.00.025";
10903 if ( CheckVersion($DBversion) ) {
10905 INSERT IGNORE INTO systempreferences (variable,value,options,explanation,type)
10906 VALUES ('RisExportAdditionalFields', '', NULL , 'Define additional RIS 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')
10909 INSERT IGNORE INTO systempreferences (variable,value,options,explanation,type)
10910 VALUES ('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')
10912 print "Upgrade to $DBversion done (Bug 12357: Enhancements to RIS and BibTeX exporting)\n";
10913 SetVersion($DBversion);
10916 $DBversion = "3.21.00.026";
10917 if ( CheckVersion($DBversion) ) {
10920 SET search_index='issn'
10921 WHERE matcher_id IN (SELECT matcher_id FROM marc_matchers WHERE code = 'ISSN')
10923 print "Upgrade to $DBversion done (Bug 14472: Wrong ISSN search index in record matching rules)\n";
10924 SetVersion($DBversion);
10927 $DBversion = "3.21.00.027";
10928 if ( CheckVersion($DBversion) ) {
10930 INSERT IGNORE INTO permissions (module_bit, code, description)
10931 VALUES (1, 'self_checkout', 'Perform self checkout at the OPAC. It should be used for the patron matching the AutoSelfCheckID')
10934 my $AutoSelfCheckID = C4::Context->preference('AutoSelfCheckID');
10940 |, undef, $AutoSelfCheckID);
10943 DELETE FROM user_permissions
10944 WHERE borrowernumber=(SELECT borrowernumber FROM borrowers WHERE userid=?)
10945 |, undef, $AutoSelfCheckID);
10948 INSERT INTO user_permissions(borrowernumber, module_bit, code)
10949 SELECT borrowernumber, 1, 'self_checkout' FROM borrowers WHERE userid=?
10950 |, undef, $AutoSelfCheckID);
10951 print "Upgrade to $DBversion done (Bug 14298: AutoSelfCheckID user should only be able to access SCO)\n";
10952 SetVersion($DBversion);
10955 $DBversion = "3.21.00.028";
10956 if ( CheckVersion($DBversion) ) {
10957 unless ( column_exists('uploaded_files', 'public') ) {
10959 ALTER TABLE uploaded_files
10960 ADD COLUMN public tinyint,
10961 ADD COLUMN permanent tinyint
10964 UPDATE uploaded_files SET public=1, permanent=1
10967 ALTER TABLE uploaded_files
10968 CHANGE COLUMN categorycode uploadcategorycode tinytext
10971 print "Upgrade to $DBversion done (Bug 14321: Merge UploadedFile and UploadedFiles into Koha::Upload)\n";
10972 SetVersion($DBversion);
10975 $DBversion = "3.21.00.029";
10976 if ( CheckVersion($DBversion) ) {
10977 unless ( column_exists('discharges', 'discharge_id') ) {
10979 ALTER TABLE discharges
10980 ADD COLUMN discharge_id int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY FIRST
10983 print "Upgrade to $DBversion done (Bug 14368: Add discharges history)\n";
10984 SetVersion($DBversion);
10987 $DBversion = "3.21.00.030";
10988 if ( CheckVersion($DBversion) ) {
10990 UPDATE marc_subfield_structure
10991 SET value_builder='marc21_leader.pl'
10992 WHERE value_builder='marc21_leader_book.pl'
10995 UPDATE marc_subfield_structure
10996 SET value_builder='marc21_leader.pl'
10997 WHERE value_builder='marc21_leader_computerfile.pl'
11000 UPDATE marc_subfield_structure
11001 SET value_builder='marc21_leader.pl'
11002 WHERE value_builder='marc21_leader_video.pl'
11004 print "Upgrade to $DBversion done (Bug 14201: Remove unused code or template from some MARC21 leader plugins )\n";
11005 SetVersion($DBversion);
11008 $DBversion = "3.21.00.031";
11009 if ( CheckVersion($DBversion) ) {
11011 INSERT IGNORE INTO systempreferences (variable,value,options,explanation,type)
11013 ('SMSSendPassword', '', '', 'Password used to send SMS messages', 'free'),
11014 ('SMSSendUsername', '', '', 'Username/Login used to send SMS messages', 'free')
11016 print "Upgrade to $DBversion done (Bug 14820: SMSSendUsername and SMSSendPassword are not listed in the system preferences)\n";
11017 SetVersion($DBversion);
11020 $DBversion = "3.21.00.032";
11021 if ( CheckVersion($DBversion) ) {
11023 CREATE TABLE additional_fields (
11024 id int(11) NOT NULL AUTO_INCREMENT,
11025 tablename varchar(255) NOT NULL DEFAULT '',
11026 name varchar(255) NOT NULL DEFAULT '',
11027 authorised_value_category varchar(16) NOT NULL DEFAULT '',
11028 marcfield varchar(16) NOT NULL DEFAULT '',
11029 searchable tinyint(1) NOT NULL DEFAULT '0',
11031 UNIQUE KEY fields_uniq (tablename,name)
11032 ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci
11035 CREATE TABLE additional_field_values (
11036 id int(11) NOT NULL AUTO_INCREMENT,
11037 field_id int(11) NOT NULL,
11038 record_id int(11) NOT NULL,
11039 value varchar(255) NOT NULL DEFAULT '',
11041 UNIQUE KEY field_record (field_id,record_id),
11042 CONSTRAINT afv_fk FOREIGN KEY (field_id) REFERENCES additional_fields (id) ON DELETE CASCADE ON UPDATE CASCADE
11043 ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci
11045 print "Upgrade to $DBversion done (Bug 10855: Additional fields for subscriptions)\n";
11046 SetVersion($DBversion);
11049 $DBversion = "3.21.00.033";
11050 if ( CheckVersion($DBversion) ) {
11053 my $count_ethnicity = $dbh->selectrow_arrayref(q|
11054 SELECT COUNT(*) FROM ethnicity
11056 my $count_borrower_modifications = $dbh->selectrow_arrayref(q|
11058 FROM borrower_modifications
11059 WHERE ethnicity IS NOT NULL
11060 OR ethnotes IS NOT NULL
11062 my $count_borrowers = $dbh->selectrow_arrayref(q|
11065 WHERE ethnicity IS NOT NULL
11066 OR ethnotes IS NOT NULL
11068 # We don't care about the ethnicity of the deleted borrowers, right?
11069 if ( $count_ethnicity->[0] == 0
11070 and $count_borrower_modifications->[0] == 0
11071 and $count_borrowers->[0] == 0
11074 DROP TABLE ethnicity
11077 ALTER TABLE borrower_modifications
11078 DROP COLUMN ethnicity,
11079 DROP COLUMN ethnotes
11082 ALTER TABLE borrowers
11083 DROP COLUMN ethnicity,
11084 DROP COLUMN ethnotes
11087 ALTER TABLE deletedborrowers
11088 DROP COLUMN ethnicity,
11089 DROP COLUMN ethnotes
11094 print "Upgrade to $DBversion done (Bug 10020: Drop table ethnicity and columns ethnicity and ethnotes)\n";
11097 print "Upgrade to $DBversion done (Bug 10020: This database contains data related to 'ethnicity'. No change will be done on the DB structure but note that the Koha codebase does not use it)\n";
11100 SetVersion ($DBversion);
11103 $DBversion = "3.21.00.034";
11104 if ( CheckVersion($DBversion) ) {
11106 INSERT IGNORE INTO systempreferences (variable,value,explanation,options,type)
11107 VALUES('MembershipExpiryDaysNotice',NULL,'Send an account expiration notice that a patron''s card is about to expire after',NULL,'Integer')
11110 INSERT IGNORE INTO letter (module, code, branchcode, name, title, content, message_transport_type)
11111 VALUES('members','MEMBERSHIP_EXPIRY','','Account expiration','Account expiration','Dear <<borrowers.title>> <<borrowers.firstname>> <<borrowers.surname>>,\r\n\r\nYour library card will expire soon, on:\r\n\r\n<<borrowers.dateexpiry>>\r\n\r\nThank you,\r\n\r\nLibrarian\r\n\r\n<<branches.branchname>>', 'email')
11113 print "Upgrade to $DBversion done (Bug 6810: Send membership expiry reminder notices)\n";
11114 SetVersion($DBversion);
11117 $DBversion = "3.21.00.035";
11118 if ( CheckVersion($DBversion) ) {
11120 ALTER TABLE branch_borrower_circ_rules ADD COLUMN maxonsiteissueqty int(4) DEFAULT NULL AFTER maxissueqty;
11123 UPDATE branch_borrower_circ_rules SET maxonsiteissueqty = maxissueqty;
11126 ALTER TABLE default_borrower_circ_rules ADD COLUMN maxonsiteissueqty int(4) DEFAULT NULL AFTER maxissueqty;
11129 UPDATE default_borrower_circ_rules SET maxonsiteissueqty = maxissueqty;
11132 ALTER TABLE default_branch_circ_rules ADD COLUMN maxonsiteissueqty int(4) DEFAULT NULL AFTER maxissueqty;
11135 UPDATE default_branch_circ_rules SET maxonsiteissueqty = maxissueqty;
11138 ALTER TABLE default_circ_rules ADD COLUMN maxonsiteissueqty int(4) DEFAULT NULL AFTER maxissueqty;
11141 UPDATE default_circ_rules SET maxonsiteissueqty = maxissueqty;
11144 ALTER TABLE issuingrules ADD COLUMN maxonsiteissueqty int(4) DEFAULT NULL AFTER maxissueqty;
11147 UPDATE issuingrules SET maxonsiteissueqty = maxissueqty;
11150 INSERT IGNORE INTO systempreferences (variable,value,explanation,options,type)
11151 VALUES ('ConsiderOnSiteCheckoutsAsNormalCheckouts','1',NULL,'Consider on-site checkouts as normal checkouts','YesNo');
11154 print "Upgrade to $DBversion done (Bug 14045: Add DB fields maxonsiteissueqty and pref ConsiderOnSiteCheckoutsAsNormalCheckouts)\n";
11155 SetVersion ($DBversion);
11158 $DBversion = "3.21.00.036";
11159 if ( CheckVersion($DBversion) ) {
11161 ALTER TABLE authorised_values_branches
11162 DROP FOREIGN KEY authorised_values_branches_ibfk_1,
11163 DROP FOREIGN KEY authorised_values_branches_ibfk_2
11166 ALTER TABLE authorised_values_branches
11167 MODIFY av_id INT( 11 ) NOT NULL,
11168 MODIFY branchcode VARCHAR( 10 ) NOT NULL,
11169 ADD FOREIGN KEY (`av_id`) REFERENCES `authorised_values` (`id`) ON DELETE CASCADE,
11170 ADD FOREIGN KEY (`branchcode`) REFERENCES `branches` (`branchcode`) ON DELETE CASCADE
11172 print "Upgrade to $DBversion done (Bug 10363: There is no package for authorised values)\n";
11173 SetVersion($DBversion);
11176 $DBversion = "3.21.00.037";
11177 if ( CheckVersion($DBversion) ) {
11179 INSERT IGNORE INTO systempreferences (variable,value,explanation,options,type)
11180 VALUES ('OverduesBlockRenewing','allow','If any of a patron checked out documents is late, should renewal be allowed, blocked only on overdue items or blocked on whatever checked out document','allow|blockitem|block','Choice')
11183 INSERT IGNORE INTO systempreferences (variable,value,explanation,options,type)
11184 VALUES ('RestrictionBlockRenewing','0','If patron is restricted, should renewal be allowed or blocked',NULL,'YesNo')
11186 print "Upgrade to $DBversion done (Bug 8236: Prevent renewing if overdue or restriction)\n";
11187 SetVersion($DBversion);
11190 $DBversion = "3.21.00.038";
11191 if ( CheckVersion($DBversion) ) {
11193 INSERT IGNORE INTO systempreferences ( variable, value, options, explanation, type )
11194 VALUES ('BatchCheckouts','0','','Enable or disable batch checkouts','YesNo')
11197 INSERT IGNORE INTO systempreferences ( variable, value, options, explanation, type )
11198 VALUES ('BatchCheckoutsValidCategories','',NULL,'Patron categories allowed to checkout in a batch','Free')
11200 print "Upgrade to $DBversion done (Bug 11759: Add the batch checkout feature)\n";
11201 SetVersion($DBversion);
11204 $DBversion = "3.21.00.039";
11205 if ( CheckVersion($DBversion) ) {
11207 ALTER TABLE creator_layouts ADD COLUMN oblique_title INT(1) NULL DEFAULT 1 AFTER guidebox
11209 print "Upgrade to $DBversion done (Bug 12194: Add column oblique_title to layouts)\n";
11210 SetVersion($DBversion);
11213 $DBversion = "3.21.00.040";
11214 if ( CheckVersion($DBversion) ) {
11216 ALTER TABLE itemtypes
11217 ADD hideinopac TINYINT(1) NOT NULL DEFAULT 0
11218 AFTER sip_media_type,
11219 ADD searchcategory VARCHAR(80) DEFAULT NULL
11222 print "Upgrade to $DBversion done (Bug 10937: Option to hide and group itemtypes from advanced search)\n";
11223 SetVersion($DBversion);
11226 $DBversion = "3.21.00.041";
11227 if ( CheckVersion($DBversion) ) {
11229 ALTER TABLE issuingrules
11230 ADD chargeperiod_charge_at BOOLEAN NOT NULL DEFAULT '0' AFTER chargeperiod
11232 print "Upgrade to $DBversion done (Bug 13590: Add ability to charge fines at start of charge period)\n";
11233 SetVersion($DBversion);
11236 $DBversion = "3.21.00.042";
11237 if ( CheckVersion($DBversion) ) {
11239 ALTER TABLE items_search_fields
11240 MODIFY COLUMN authorised_values_category VARCHAR(32) DEFAULT NULL
11242 print "Upgrade to $DBversion done (Bug 15069: items_search_fields.authorised_values_category is still a varchar(32))\n";
11243 SetVersion($DBversion);
11246 $DBversion = "3.21.00.043";
11247 if ( CheckVersion($DBversion) ) {
11249 INSERT IGNORE INTO systempreferences ( variable, value, options, explanation, type )
11250 VALUES ('EnableAdvancedCatalogingEditor','0','','Enable the Rancor advanced cataloging editor','YesNo')
11252 print "Upgrade to $DBversion done (Bug 11559: Professional cataloger's interface)\n";
11253 SetVersion($DBversion);
11256 $DBversion = "3.21.00.044";
11257 if ( CheckVersion($DBversion) ) {
11259 CREATE TABLE localization (
11260 localization_id int(11) NOT NULL AUTO_INCREMENT,
11261 entity varchar(16) COLLATE utf8_unicode_ci NOT NULL,
11262 code varchar(64) COLLATE utf8_unicode_ci NOT NULL,
11263 lang varchar(25) COLLATE utf8_unicode_ci NOT NULL,
11264 translation text COLLATE utf8_unicode_ci,
11265 PRIMARY KEY (localization_id),
11266 UNIQUE KEY entity_code_lang (entity,code,lang)
11267 ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci
11269 print "Upgrade to $DBversion done (Bug 14100: Generic solution for language overlay)\n";
11270 SetVersion($DBversion);
11273 $DBversion = "3.21.00.045";
11274 if ( CheckVersion($DBversion) ) {
11276 ALTER TABLE opac_news
11277 ADD borrowernumber int(11) default NULL
11281 ALTER TABLE opac_news
11282 ADD CONSTRAINT borrowernumber_fk
11283 FOREIGN KEY (borrowernumber)
11284 REFERENCES borrowers (borrowernumber)
11285 ON DELETE SET NULL ON UPDATE CASCADE
11287 print "Upgrade to $DBversion done (Bug 14246: (newsauthor) Add borrowernumber to koha_news)\n";
11288 SetVersion($DBversion);
11291 $DBversion = "3.21.00.046";
11292 if ( CheckVersion($DBversion) ) {
11294 INSERT IGNORE INTO systempreferences ( variable, value, options, explanation, type )
11295 VALUES ('NewsAuthorDisplay','none','none|opac|staff|both','Display the author name for news items.','Choice')
11297 print "Upgrade to $DBversion done (Bug 14247: (newsauthor) System preference for news author display)\n";
11298 SetVersion($DBversion);
11301 $DBversion = "3.21.00.047";
11302 if(CheckVersion($DBversion)) {
11304 INSERT IGNORE INTO systempreferences (variable,value,explanation,options,type)
11305 VALUES ('IndependentBranchesPatronModifications','0','Show only modification request for the logged in branch','','YesNo')
11307 print "Upgrade to $DBversion done (Bug 10904: Limit patron update request management by branch)\n";
11308 SetVersion($DBversion);
11311 $DBversion = '3.21.00.048';
11312 if ( CheckVersion($DBversion) ) {
11313 my $create_table_issues = @{ $dbh->selectall_arrayref(q|SHOW CREATE TABLE issues|) }[0]->[1];
11314 if ($create_table_issues !~ m|UNIQUE KEY.*itemnumber| ) {
11315 $dbh->do(q|ALTER TABLE issues ADD CONSTRAINT UNIQUE KEY (itemnumber)|);
11317 print "Upgrade to $DBversion done (Bug 14978: Make sure issues.itemnumber is a unique key)\n";
11318 SetVersion($DBversion);
11321 $DBversion = "3.21.00.049";
11322 if ( CheckVersion($DBversion) ) {
11323 $dbh->do(q{UPDATE systempreferences SET variable = 'AudioAlerts' WHERE variable = 'soundon'});
11326 CREATE TABLE audio_alerts (
11327 id int(11) NOT NULL AUTO_INCREMENT,
11328 precedence smallint(5) unsigned NOT NULL,
11329 selector varchar(255) NOT NULL,
11330 sound varchar(255) NOT NULL,
11332 KEY precedence (precedence)
11333 ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
11337 INSERT IGNORE INTO audio_alerts VALUES
11338 (1, 1, '.audio-alert-action', 'opening.ogg'),
11339 (2, 2, '.audio-alert-warning', 'critical.ogg'),
11340 (3, 3, '.audio-alert-success', 'beep.ogg');
11343 print "Upgrade to $DBversion done (Bug 11431: Add additional sound options for warnings)\n";
11344 SetVersion($DBversion);
11347 $DBversion = "3.21.00.050";
11348 if(CheckVersion($DBversion)) {
11350 INSERT INTO letter ( module, code, branchcode, name, is_html, title, content, message_transport_type )
11351 VALUES ( 'circulation', 'OVERDUES_SLIP', '', 'Overdues Slip', '0', 'OVERDUES_SLIP', 'The following item(s) is/are currently overdue:
11353 <item>"<<biblio.title>>" by <<biblio.author>>, <<items.itemcallnumber>>, Barcode: <<items.barcode>> Fine: <<items.fine>></item>
11356 print "Upgrade to $DBversion done (Bug 12933: Add ability to print overdue slip from staff intranet)\n";
11357 SetVersion($DBversion);
11360 $DBversion = "3.21.00.051";
11361 if ( CheckVersion($DBversion) ) {
11363 ALTER TABLE virtualshelves
11364 CHANGE COLUMN sortfield sortfield VARCHAR(16) DEFAULT 'title'
11367 UPDATE virtualshelves
11368 SET sortfield='title'
11369 WHERE sortfield IS NULL;
11371 print "Upgrade to $DBversion done (Bug 14544: Move the list related code to Koha::Virtualshelves)\n";
11372 SetVersion($DBversion);
11375 $DBversion = "3.21.00.052";
11376 if ( CheckVersion($DBversion) ) {
11379 ADD COLUMN publisheddatetext VARCHAR(100) DEFAULT NULL AFTER publisheddate
11381 print "Upgrade to $DBversion done (Bug 8296: Add descriptive (text) published date field for serials)\n";
11382 SetVersion($DBversion);
11385 $DBversion = "3.21.00.053";
11386 if ( CheckVersion($DBversion) ) {
11387 my $query = q{ SELECT * FROM itemtypes ORDER BY description };
11388 my $sth = C4::Context->dbh->prepare($query);
11390 my $suggestion_formats = $sth->fetchall_arrayref( {} );
11392 foreach my $format (@$suggestion_formats) {
11395 INSERT IGNORE INTO authorised_values (category, authorised_value, lib, lib_opac, imageurl)
11396 VALUES (?, ?, ?, ?, ?)
11398 'SUGGEST_FORMAT', $format->{itemtype}, $format->{description}, $format->{description},
11399 $format->{imageurl}
11402 print "Upgrade to $DBversion done (Bug 9468: create new SUGGEST_FORMAT authorised_value list)\n";
11403 SetVersion($DBversion);
11406 $DBversion = "3.21.00.054";
11407 if(CheckVersion($DBversion)) {
11409 INSERT IGNORE INTO systempreferences (variable,value,explanation,options,type)
11410 VALUES('MergeReportFields','','Displayed fields for deleted MARC records after merge',NULL,'Free')
11412 print "Upgrade to $DBversion done (Bug 8064: Merge several biblio records)\n";
11413 SetVersion($DBversion);
11416 $DBversion = "3.21.00.055";
11417 if ( CheckVersion($DBversion) ) {
11418 print "Upgrade to $DBversion done (Koha 3.22 beta)\n";
11419 SetVersion($DBversion);
11422 $DBversion = "3.21.00.056";
11423 if(CheckVersion($DBversion)) {
11425 UPDATE systempreferences
11427 options='metric|us|iso|dmydot',
11428 explanation='Define global date format (us mm/dd/yyyy, metric dd/mm/yyy, ISO yyyy-mm-dd, DMY separated by dots dd.mm.yyyy)'
11429 WHERE variable='dateformat'
11431 print "Upgrade to $DBversion done (Bug 12072: New dateformat dd.mm.yyyy)\n";
11432 SetVersion($DBversion);
11435 $DBversion = "3.22.00.000";
11436 if ( CheckVersion($DBversion) ) {
11437 print "Upgrade to $DBversion done (Koha 3.22)\n";
11438 SetVersion($DBversion);
11441 $DBversion = "3.23.00.000";
11442 if ( CheckVersion($DBversion) ) {
11443 print "Upgrade to $DBversion done (The year of the monkey will be here soon.)\n";
11444 SetVersion ($DBversion);
11447 $DBversion = "3.23.00.001";
11448 if(CheckVersion($DBversion)) {
11450 INSERT IGNORE INTO systempreferences ( variable, value, options, explanation, type )
11452 'DefaultToLoggedInLibraryCircRules', '0', NULL , 'If enabled, circ rules editor will default to the logged in library''s rules, rather than the ''all libraries'' rules.', 'YesNo'
11454 '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'
11458 print "Upgrade to $DBversion done (Bug 11625 - Add pref DefaultToLoggedInLibraryCircRules and DefaultToLoggedInLibraryNoticesSlips)\n";
11459 SetVersion($DBversion);
11462 $DBversion = "3.23.00.002";
11463 if(CheckVersion($DBversion)) {
11465 INSERT IGNORE INTO systempreferences ( variable, value, options, explanation, type )
11466 VALUES ('DefaultToLoggedInLibraryOverdueTriggers', '0', NULL, 'If enabled, overdue status triggers editor will default to the logged in library''s rules, rather than the ''default'' rules.', 'YesNo')
11469 print "Upgrade to $DBversion done (Bug 11747 - add pref DefaultToLoggedInLibraryOverdueTriggers)\n";
11470 SetVersion($DBversion);
11473 $DBversion = "3.23.00.003";
11474 if(CheckVersion($DBversion)) {
11476 UPDATE letter SET name = "Hold Slip" WHERE name = "Reserve Slip"
11479 UPDATE letter SET title = "Hold Slip" WHERE title = "Reserve Slip";
11482 print "Upgrade to $DBversion done (Bug 8085 - Rename 'Reserve slip' to 'Hold slip')\n";
11483 SetVersion($DBversion);
11486 $DBversion = "3.23.00.004";
11487 if ( CheckVersion($DBversion) ) {
11489 DROP TABLE IF EXISTS `stopwords`;
11491 print "Upgrade to $DBversion done (Bug 9819 - stopwords related code should be removed)\n";
11492 SetVersion($DBversion);
11495 $DBversion = "3.23.00.005";
11496 if ( CheckVersion($DBversion) ) {
11498 UPDATE permissions SET description = 'Manage circulation rules' WHERE description = 'manage circulation rules'
11501 UPDATE permissions SET description = 'Manage staged MARC records, including completing and reversing imports' WHERE description = 'Managed staged MARC records, including completing and reversing imports'
11503 print "Upgrade to $DBversion done (Bug 11569 - Typo in userpermissions.sql)\n";
11504 SetVersion($DBversion);
11506 $DBversion = "3.23.00.006";
11507 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
11510 ADD serialseq_x VARCHAR( 100 ) NULL DEFAULT NULL AFTER serialseq,
11511 ADD serialseq_y VARCHAR( 100 ) NULL DEFAULT NULL AFTER serialseq_x,
11512 ADD serialseq_z VARCHAR( 100 ) NULL DEFAULT NULL AFTER serialseq_y
11515 my $sth = $dbh->prepare("SELECT * FROM subscription");
11518 my $sth2 = $dbh->prepare("SELECT * FROM subscription_numberpatterns WHERE id = ?");
11520 my $sth3 = $dbh->prepare("UPDATE serial SET serialseq_x = ?, serialseq_y = ?, serialseq_z = ? WHERE serialid = ?");
11522 foreach my $subscription ( $sth->fetchrow_hashref() ) {
11523 next if !defined($subscription);
11524 $sth2->execute( $subscription->{numberpattern} );
11525 my $number_pattern = $sth2->fetchrow_hashref();
11527 my $numbering_method = $number_pattern->{numberingmethod};
11528 # Get all the data between the enumeration values, we need
11529 # to split each enumeration string based on these values.
11530 my @splits = split( /\{[XYZ]\}/, $numbering_method );
11531 # Get the order in which the X Y and Z values are used
11533 foreach my $i (qw(X Y Z)) {
11534 $indexes{$i} = index( $numbering_method, "{$i}" );
11535 delete $indexes{$i} if $indexes{$i} == -1;
11537 my @indexes = sort { $indexes{$a} <=> $indexes{$b} } keys(%indexes);
11540 $dbh->selectall_arrayref(
11541 "SELECT * FROM serial WHERE subscriptionid = $subscription->{subscriptionid}",
11546 foreach my $serial (@serials) {
11547 my $serialseq = $serial->{serialseq};
11548 my %enumeration_data;
11550 ## We cannot split on multiple values at once,
11551 ## so let's replace each of those values with __SPLIT__
11553 for my $split_item (@splits) {
11554 my $quoted_split = quotemeta($split_item);
11555 $serialseq =~ s/$quoted_split/__SPLIT__/;
11559 $enumeration_data{ $indexes[0] // q{} },
11560 $enumeration_data{ $indexes[1] // q{} },
11561 $enumeration_data{ $indexes[2] // q{} }
11562 ) = split( /__SPLIT__/, $serialseq );
11565 { ## Nothing to split on means the only thing in serialseq is a single placeholder e.g. {X}
11566 $enumeration_data{ $indexes[0] } = $serialseq;
11570 $enumeration_data{'X'},
11571 $enumeration_data{'Y'},
11572 $enumeration_data{'Z'},
11573 $serial->{serialid},
11578 print "Upgrade to $DBversion done ( Bug 8956 - Split serials enumeration data into separate fields )\n";
11579 SetVersion($DBversion);
11582 $DBversion = "3.23.00.007";
11583 if ( CheckVersion($DBversion) ) {
11584 $dbh->do("SET FOREIGN_KEY_CHECKS=0");
11585 $dbh->do("ALTER TABLE overduerules RENAME old_overduerules");
11586 $dbh->do("CREATE TABLE overduerules (
11587 `overduerules_id` int(11) NOT NULL AUTO_INCREMENT,
11588 `branchcode` varchar(10) NOT NULL DEFAULT '',
11589 `categorycode` varchar(10) NOT NULL DEFAULT '',
11590 `delay1` int(4) DEFAULT NULL,
11591 `letter1` varchar(20) DEFAULT NULL,
11592 `debarred1` varchar(1) DEFAULT '0',
11593 `delay2` int(4) DEFAULT NULL,
11594 `debarred2` varchar(1) DEFAULT '0',
11595 `letter2` varchar(20) DEFAULT NULL,
11596 `delay3` int(4) DEFAULT NULL,
11597 `letter3` varchar(20) DEFAULT NULL,
11598 `debarred3` int(1) DEFAULT '0',
11599 PRIMARY KEY (`overduerules_id`),
11600 UNIQUE KEY `overduerules_branch_cat` (`branchcode`,`categorycode`)
11601 ) ENGINE=InnoDB DEFAULT CHARSET=utf8;");
11602 $dbh->do("INSERT INTO overduerules(branchcode, categorycode, delay1, letter1, debarred1, delay2, debarred2, letter2, delay3, letter3, debarred3) SELECT * FROM old_overduerules");
11603 $dbh->do("DROP TABLE old_overduerules");
11604 $dbh->do("ALTER TABLE overduerules_transport_types
11605 ADD COLUMN overduerules_id int(11) NOT NULL");
11606 my $mtts = $dbh->selectall_arrayref("SELECT * FROM overduerules_transport_types", { Slice => {} });
11607 $dbh->do("DELETE FROM overduerules_transport_types");
11608 $dbh->do("ALTER TABLE overduerules_transport_types
11609 DROP FOREIGN KEY overduerules_fk,
11610 ADD FOREIGN KEY overduerules_transport_types_fk (overduerules_id) REFERENCES overduerules (overduerules_id) ON DELETE CASCADE ON UPDATE CASCADE,
11611 DROP COLUMN branchcode,
11612 DROP COLUMN categorycode");
11613 my $s = $dbh->prepare("INSERT INTO overduerules_transport_types (overduerules_id, id, letternumber, message_transport_type) "
11614 ." VALUES((SELECT overduerules_id FROM overduerules WHERE branchcode = ? AND categorycode = ?),?,?,?)");
11615 foreach my $mtt(@$mtts){
11616 $s->execute($mtt->{branchcode}, $mtt->{categorycode}, $mtt->{id}, $mtt->{letternumber}, $mtt->{message_transport_type} );
11618 $dbh->do("SET FOREIGN_KEY_CHECKS=1");
11620 print "Upgrade to $DBversion done (Bug 13624 - Remove columns branchcode, categorytype from table overduerules_transport_types)\n";
11621 SetVersion($DBversion);
11624 $DBversion = "3.23.00.008";
11625 if ( CheckVersion($DBversion) ) {
11627 $dbh->do(q{ALTER TABLE borrowers ADD privacy_guarantor_checkouts BOOLEAN NOT NULL DEFAULT '0' AFTER privacy});
11629 $dbh->do(q{ALTER TABLE deletedborrowers ADD privacy_guarantor_checkouts BOOLEAN NOT NULL DEFAULT '0' AFTER privacy});
11632 INSERT IGNORE INTO systempreferences (variable, value, options, explanation, type )
11634 'AllowStaffToSetCheckoutsVisibilityForGuarantor', '0', NULL,
11635 'If enabled, library staff can set a patron''s checkouts to be visible to linked patrons from the opac.', 'YesNo'
11637 'AllowPatronToSetCheckoutsVisibilityForGuarantor', '0', NULL,
11638 'If enabled, the patron can set checkouts to be visible to his or her guarantor', 'YesNo'
11642 print "Upgrade to $DBversion done (Bug 9303 - relative's checkouts in the opac)\n";
11643 SetVersion($DBversion);
11646 $DBversion = "3.23.00.009";
11647 if ( CheckVersion($DBversion) ) {
11649 INSERT IGNORE INTO systempreferences (variable, value, options, explanation, type ) VALUES
11650 ( 'EnablePayPalOpacPayments', '0', NULL , 'Enables the ability to pay fees and fines from the OPAC via PayPal', 'YesNo' ),
11651 ( 'PayPalChargeDescription', 'Koha fee payment', NULL , 'This preference defines what the user will see the charge listed as in PayPal', 'Free' ),
11652 ( 'PayPalPwd', '', NULL , 'Your PayPal API password', 'Free' ),
11653 ( 'PayPalSandboxMode', '1', NULL , 'If enabled, the system will use PayPal''s sandbox server for testing, rather than the production server.', 'YesNo' ),
11654 ( 'PayPalSignature', '', NULL , 'Your PayPal API signature', 'Free' ),
11655 ( 'PayPalUser', '', NULL , 'Your PayPal API username ( email address )', 'Free' )
11658 print "Upgrade to $DBversion done (Bug 11622 - Add ability to pay fees and fines from OPAC via PayPal)\n";
11659 SetVersion($DBversion);
11662 $DBversion = "3.23.00.010";
11663 if ( CheckVersion($DBversion) ) {
11665 ALTER TABLE issuingrules ADD cap_fine_to_replacement_price BOOLEAN NOT NULL DEFAULT '0' AFTER overduefinescap
11668 print "Upgrade to $DBversion done (Bug 9129 - Add the ability to set the maximum fine for an item to its replacement price)\n";
11669 SetVersion($DBversion);
11672 $DBversion = "3.23.00.011";
11673 if ( CheckVersion($DBversion) ) {
11675 INSERT IGNORE INTO systempreferences ( `variable`, `value`, `options`, `explanation`, `type` ) VALUES ('HoldFeeMode','not_always','always|not_always','Set the hold fee mode','Choice')
11678 print "Upgrade to $DBversion done (Bug 13592 - Hold fee not being applied on placing a hold)\n";
11679 SetVersion($DBversion);
11682 $DBversion = "3.23.00.012";
11683 if ( CheckVersion($DBversion) ) {
11685 INSERT IGNORE INTO systempreferences ( `variable`, `value`, `explanation`, `options`, `type` ) VALUES('MaxSearchResultsItemsPerRecordStatusCheck','20','Max number of items per record for which to check transit and hold status','','Integer')
11688 print "Upgrade to $DBversion done (Bug 15380 - Move the authority types related code to Koha::Authority::Type[s] - part 1)\n";
11689 SetVersion($DBversion);
11692 $DBversion = "3.23.00.013";
11693 if ( CheckVersion($DBversion) ) {
11695 INSERT IGNORE INTO systempreferences ( `variable`, `value`, `options`, `explanation`, `type` ) VALUES ('StoreLastBorrower','0','','If ON, the last borrower to return an item will be stored in items.last_returned_by','YesNo')
11698 CREATE TABLE IF NOT EXISTS `items_last_borrower` (
11699 `id` int(11) NOT NULL AUTO_INCREMENT,
11700 `itemnumber` int(11) NOT NULL,
11701 `borrowernumber` int(11) NOT NULL,
11702 `created_on` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
11703 PRIMARY KEY (`id`),
11704 UNIQUE KEY `itemnumber` (`itemnumber`),
11705 KEY `borrowernumber` (`borrowernumber`),
11706 CONSTRAINT `items_last_borrower_ibfk_2` FOREIGN KEY (`borrowernumber`) REFERENCES `borrowers` (`borrowernumber`) ON DELETE CASCADE ON UPDATE CASCADE,
11707 CONSTRAINT `items_last_borrower_ibfk_1` FOREIGN KEY (`itemnumber`) REFERENCES `items` (`itemnumber`) ON DELETE CASCADE ON UPDATE CASCADE
11708 ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci
11711 print "Upgrade to $DBversion done (Bug 14945 - Add the ability to store the last patron to return an item)\n";
11712 SetVersion($DBversion);
11716 $DBversion = "3.23.00.014";
11717 if ( CheckVersion($DBversion) ) {
11719 INSERT IGNORE INTO systempreferences ( `variable`, `value`, `options`, `explanation`, `type` )
11720 VALUES ('ClaimsBccCopy','0','','Bcc the ClaimAcquisition and ClaimIssues alerts','YesNo')
11723 print "Upgrade to $DBversion done (Bug 10076 - Add Bcc syspref for claimacquisition and clamissues)\n";
11724 SetVersion($DBversion);
11727 $DBversion = "3.23.00.015";
11728 if ( CheckVersion($DBversion) ) {
11730 UPDATE letter SET code = "HOLD_SLIP" WHERE code = "RESERVESLIP";
11733 print "Upgrade to $DBversion done (Bug 15443 - Re-code RESERVESLIP as HOLD_SLIP)\n";
11734 SetVersion($DBversion);
11737 $DBversion = "3.23.00.016";
11738 if ( CheckVersion($DBversion) ) {
11740 INSERT IGNORE INTO systempreferences (variable,value,options,explanation,type)
11741 VALUES ('OpacResetPassword', '0','','Shows the ''Forgot your password?'' link in the OPAC','YesNo');
11744 CREATE TABLE IF NOT EXISTS borrower_password_recovery (
11745 borrowernumber int(11) NOT NULL,
11746 uuid varchar(128) NOT NULL,
11747 valid_until timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
11748 PRIMARY KEY (borrowernumber),
11749 KEY borrowernumber (borrowernumber)
11750 ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
11753 INSERT IGNORE INTO `letter` (module, code, branchcode, name, is_html, title, content, message_transport_type)
11754 VALUES ('members','PASSWORD_RESET','','Online password reset',1,'Koha password recovery','<html>\r\n<p>This email has been sent in response to your password recovery request for the account <strong><<user>></strong>.\r\n</p>\r\n<p>\r\nYou can now create your new password using the following link:\r\n<br/><a href=\"<<passwordreseturl>>\"><<passwordreseturl>></a>\r\n</p>\r\n<p>This link will be valid for 2 days from this email\'s reception, then you must reapply if you do not change your password.</p>\r\n<p>Thank you.</p>\r\n</html>\r\n','email');
11758 print "Upgrade to $DBversion done (Bug 8753 - Add forgot password link to OPAC)\n";
11759 SetVersion($DBversion);
11762 $DBversion = "3.23.00.017";
11763 if ( CheckVersion($DBversion) ) {
11766 DELETE FROM uploaded_files
11767 WHERE COALESCE(permanent,0)=0 AND dir='koha_upload'
11770 my $tmp = C4::Context->temporary_directory . '/koha_upload';
11771 remove_tree( $tmp ) if -d $tmp;
11773 print "Upgrade to $DBversion done (Bug 14893 - Separate temporary storage per instance in Upload.pm)\n";
11774 SetVersion($DBversion);
11778 $DBversion = "3.23.00.018";
11779 if ( CheckVersion($DBversion) ) {
11781 UPDATE systempreferences SET value="0" where type="YesNo" and value="";
11784 print "Upgrade to $DBversion done (Bug 15446 - Fix systempreferences rows where type=YesNo and value='')\n";
11785 SetVersion($DBversion);
11788 $DBversion = "3.23.00.019";
11789 if ( CheckVersion($DBversion) ) {
11791 UPDATE `authorised_values` SET `lib`='Non-fiction' WHERE `lib`='Non Fiction';
11794 print "Upgrade to $DBversion done (Bug 15411 - Change Non Fiction to Non-fiction in authorised_values)\n";
11795 SetVersion($DBversion);
11798 $DBversion = "3.23.00.020";
11799 if ( CheckVersion($DBversion) ) {
11801 CREATE TABLE sms_providers (
11802 id INT( 11 ) NOT NULL AUTO_INCREMENT PRIMARY KEY ,
11803 name VARCHAR( 255 ) NOT NULL ,
11804 domain VARCHAR( 255 ) NOT NULL ,
11808 ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
11812 ALTER TABLE borrowers ADD sms_provider_id INT( 11 ) NULL DEFAULT NULL AFTER smsalertnumber;
11815 ALTER TABLE borrowers ADD FOREIGN KEY ( sms_provider_id ) REFERENCES sms_providers ( id ) ON UPDATE CASCADE ON DELETE SET NULL;
11818 ALTER TABLE deletedborrowers ADD sms_provider_id INT( 11 ) NULL DEFAULT NULL AFTER smsalertnumber;
11821 print "Upgrade to $DBversion done (Bug 9021 - Add SMS via email as an alternative to SMS services via SMS::Send drivers)\n";
11822 SetVersion($DBversion);
11825 $DBversion = "3.23.00.021";
11826 if ( CheckVersion($DBversion) ) {
11828 INSERT IGNORE INTO systempreferences ( `variable`, `value`, `options`, `explanation`, `type` ) VALUES ('ShowAllCheckins', '0', '', 'Show all checkins', 'YesNo');
11831 print "Upgrade to $DBversion done (Bug 15736 - Add a preference to control whether all items should be shown in checked-in items list)\n";
11832 SetVersion($DBversion);
11835 $DBversion = "3.23.00.022";
11836 if ( CheckVersion($DBversion) ) {
11837 $dbh->do(q{ ALTER TABLE tags_all MODIFY COLUMN borrowernumber INT(11) });
11838 $dbh->do(q{ ALTER TABLE tags_all drop FOREIGN KEY tags_borrowers_fk_1 });
11839 $dbh->do(q{ ALTER TABLE tags_all ADD CONSTRAINT `tags_borrowers_fk_1` FOREIGN KEY (`borrowernumber`) REFERENCES `borrowers` (`borrowernumber`) ON DELETE SET NULL ON UPDATE CASCADE });
11840 $dbh->do(q{ ALTER TABLE tags_approval DROP FOREIGN KEY tags_approval_borrowers_fk_1 });
11841 $dbh->do(q{ ALTER TABLE tags_approval ADD CONSTRAINT `tags_approval_borrowers_fk_1` FOREIGN KEY (`approved_by`) REFERENCES `borrowers` (`borrowernumber`) ON DELETE SET NULL ON UPDATE CASCADE });
11843 print "Upgrade to $DBversion done (Bug 13534 - Deleting staff patron will delete tags approved by this patron)\n";
11844 SetVersion($DBversion);
11847 $DBversion = "3.23.00.023";
11848 if ( CheckVersion($DBversion) ) {
11850 INSERT IGNORE INTO systempreferences (variable,value,explanation,options,type)
11851 VALUES('OpenLibrarySearch','0','If Yes Open Library search results will show in OPAC',NULL,'YesNo');
11854 print "Upgrade to $DBversion done (Bug 6624 - Allow Koha to use the new read API from OpenLibrary)\n";
11855 SetVersion($DBversion);
11858 $DBversion = "3.23.00.024";
11859 if ( CheckVersion($DBversion) ) {
11861 ALTER TABLE deletedborrowers MODIFY COLUMN userid VARCHAR(75) DEFAULT NULL;
11865 ALTER TABLE deletedborrowers MODIFY COLUMN password VARCHAR(60) DEFAULT NULL;
11868 print "Upgrade to $DBversion done (Bug 15517 - Tables borrowers and deletedborrowers differ again)\n";
11869 SetVersion($DBversion);
11872 $DBversion = "3.23.00.025";
11873 if ( CheckVersion($DBversion) ) {
11875 DROP TABLE IF EXISTS nozebra;
11878 print "Upgrade to $DBversion done (Bug 15526 - Drop nozebra database table)\n";
11879 SetVersion($DBversion);
11882 $DBversion = "3.23.00.026";
11883 if ( CheckVersion($DBversion) ) {
11885 UPDATE systempreferences SET value = CONCAT_WS('|', IF(value='', NULL, value), "password") WHERE variable="PatronSelfRegistrationBorrowerUnwantedField" AND value NOT LIKE "%password%";
11888 print "Upgrade to $DBversion done (Bug 15343 - Allow patrons to choose their own password on self registration)\n";
11889 SetVersion($DBversion);
11892 $DBversion = "3.23.00.027";
11893 if ( CheckVersion($DBversion) ) {
11894 my ( $db_value ) = $dbh->selectrow_array(q|SELECT count(*) FROM branches|);
11895 my $pref_value = C4::Context->preference("singleBranchMode") || 0;
11896 if ( $db_value > 1 and $pref_value == 1 ) {
11897 warn "WARNING: You have more than 1 libraries in your branches tables but the singleBranchMode system preference is on.\n";
11898 warn "This configuration does not make sense. The system preference is going to be deleted,\n";
11899 warn "and this parameter will be based on the number of libraries defined.\n";
11901 $dbh->do(q|DELETE FROM systempreferences WHERE variable="singleBranchMode"|);
11903 print "Upgrade to $DBversion done (Bug 4941 - Can't set branch in staff client when singleBranchMode is enabled)\n";
11904 SetVersion($DBversion);
11907 $DBversion = "3.23.00.028";
11908 if ( CheckVersion($DBversion) ) {
11910 INSERT IGNORE INTO systempreferences ( `variable`, `value`, `options`, `explanation`, `type` ) SELECT 'PatronSelfModificationBorrowerUnwantedField',value,NULL,'Name the fields you don\'t want to display when a patron is editing their information via the OPAC.','free' FROM systempreferences WHERE variable = 'PatronSelfRegistrationBorrowerUnwantedField';
11913 print "Upgrade to $DBversion done (Bug 14658 - Split PatronSelfRegistrationBorrowerUnwantedField into two preferences for creating and editing)\n";
11914 SetVersion($DBversion);
11917 $DBversion = "3.23.00.029";
11918 if ( CheckVersion($DBversion) ) {
11920 # move marc21_field_003.pl 040c and 040d to marc21_orgcode.pl
11922 update marc_subfield_structure set value_builder='marc21_orgcode.pl' where value_builder IN ( 'marc21_field_003.pl', 'marc21_field_040c.pl', 'marc21_field_040d.pl' );
11925 update auth_subfield_structure set value_builder='marc21_orgcode.pl' where value_builder IN ( 'marc21_field_003.pl', 'marc21_field_040c.pl', 'marc21_field_040d.pl' );
11928 print "Upgrade to $DBversion done (Bug 14199 - Unify all organization code plugins)\n";
11929 SetVersion($DBversion);
11932 $DBversion = "3.23.00.030";
11933 if(CheckVersion($DBversion)) {
11935 INSERT IGNORE INTO systempreferences (variable,value,options,explanation,type)
11936 VALUES ('OpacMaintenanceNotice','','','A user-defined block of HTML to appear on screen when OpacMaintenace is enabled','Textarea')
11939 print "Upgrade to $DBversion done (Bug 15311: Let libraries set text to display when OpacMaintenance = on)\n";
11940 SetVersion($DBversion);
11943 $DBversion = "3.23.00.031";
11944 if(CheckVersion($DBversion)) {
11946 INSERT IGNORE INTO systempreferences (variable,value,explanation,options,type)
11947 VALUES ('NoRenewalBeforePrecision', 'date', 'Calculate "No renewal before" based on date or exact time. Only relevant for loans calculated in days, hourly loans are not affected.', 'date|exact_time', 'Choice')
11950 print "Upgrade to $DBversion done (Bug 14395 - Two different ways to calculate 'No renewal before')\n";
11951 SetVersion($DBversion);
11954 $DBversion = "3.23.00.032";
11955 if ( CheckVersion($DBversion) ) {
11957 -- Add issue_id to accountlines table
11958 ALTER TABLE accountlines ADD issue_id INT(11) NULL DEFAULT NULL AFTER accountlines_id;
11961 ## Close out any accruing fines with no current issue
11963 UPDATE accountlines LEFT JOIN issues USING ( itemnumber, borrowernumber ) SET accounttype = 'F' WHERE accounttype = 'FU' and issues.issue_id IS NULL;
11966 ## Close out any extra not really accruing fines, keep only the latest accring fine
11968 UPDATE accountlines a1
11969 LEFT JOIN (SELECT MAX(accountlines_id) AS keeper,
11973 WHERE accounttype = 'FU'
11974 GROUP BY borrowernumber, itemnumber
11975 ) a2 USING ( borrowernumber, itemnumber )
11976 SET a1.accounttype = 'F'
11977 WHERE a1.accounttype = 'FU'
11978 AND a1.accountlines_id != a2.keeper;
11981 ## Update the unclosed fines to add the current issue_id to them
11983 UPDATE accountlines LEFT JOIN issues USING ( itemnumber ) SET accountlines.issue_id = issues.issue_id WHERE accounttype = 'FU';
11986 print "Upgrade to $DBversion done (Bug 15675 - Add issue_id column to accountlines and use it for updating fines)\n";
11987 SetVersion($DBversion);
11990 $DBversion = "3.23.00.033";
11991 if ( CheckVersion($DBversion) ) {
11993 UPDATE systempreferences SET value = CONCAT_WS('|', IF(value = '', NULL, value), 'cardnumber') WHERE variable = 'PatronSelfRegistrationBorrowerUnwantedField' AND value NOT LIKE '%cardnumber%';
11997 UPDATE systempreferences SET value = CONCAT_WS('|', IF(value = '', NULL, value), 'categorycode') WHERE variable = 'PatronSelfRegistrationBorrowerUnwantedField' AND value NOT LIKE '%categorycode%';
12000 print "Upgrade to $DBversion done (Bug 14659 - Allow patrons to enter card number and patron category on OPAC registration page)\n";
12001 SetVersion($DBversion);
12004 $DBversion = "3.23.00.034";
12005 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
12007 ALTER TABLE `items` ADD `new` VARCHAR(32) NULL AFTER `stocknumber`;
12010 ALTER TABLE `deleteditems` ADD `new` VARCHAR(32) NULL AFTER `stocknumber`;
12012 print "Upgrade to $DBversion done (Bug 11023: Adds field 'new' in items and deleteditems tables)\n";
12013 SetVersion($DBversion);
12016 $DBversion = "3.23.00.035";
12017 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
12019 INSERT IGNORE INTO systempreferences (variable,value,explanation,options,type) VALUES ('HTML5MediaYouTube',0,'Embed|Don\'t embed','YouTube links as videos','YesNo');
12021 print "Upgrade to $DBversion done (Bug 14168 - enhance streaming cataloging to include youtube)\n";
12023 SetVersion($DBversion);
12026 $DBversion = "3.23.00.036";
12027 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
12029 INSERT IGNORE INTO systempreferences (variable,value,explanation,type) VALUES ('HoldsQueueSkipClosed', '0', 'If enabled, any libraries that are closed when the holds queue is built will be ignored for the purpose of filling holds.', 'YesNo');
12031 print "Upgrade to $DBversion done (Bug 12803 - Add ability to skip closed libraries when generating the holds queue)\n";
12032 SetVersion($DBversion);
12035 $DBversion = "3.23.00.037";
12036 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
12037 ## Add the new currency.archived column
12039 ALTER TABLE currency ADD column archived tinyint(1) DEFAULT 0;
12041 ## Set currency=NULL if empty (just in case)
12043 UPDATE aqorders SET currency=NULL WHERE currency="";
12045 ## Insert the missing currency and mark them as archived before adding the FK
12047 INSERT INTO currency(currency, archived) SELECT distinct currency, 1 FROM aqorders WHERE currency NOT IN (SELECT currency FROM currency);
12049 ## Correct the field length in aqorders before adding FK too
12050 $dbh->do(q{ ALTER TABLE aqorders MODIFY COLUMN currency varchar(10) default NULL; });
12051 ## And finally add the FK
12053 ALTER TABLE aqorders ADD FOREIGN KEY (currency) REFERENCES currency(currency) ON DELETE SET NULL ON UPDATE SET null;
12056 print "Upgrade to $DBversion done (Bug 15084 - Move the currency related code to Koha::Acquisition::Currenc[y|ies])\n";
12057 SetVersion($DBversion);
12060 $DBversion = "3.23.00.038";
12061 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
12063 INSERT IGNORE INTO systempreferences ( `variable`, `value`, `options`, `explanation`, `type` ) VALUES ('decreaseLoanHighHoldsControl', 'static', 'static|dynamic', "Chooses between static and dynamic high holds checking", 'Choice'), ('decreaseLoanHighHoldsIgnoreStatuses', '', 'damaged|itemlost|notforloan|withdrawn', "Ignore items with these statuses for dynamic high holds checking", 'Choice');
12065 print "Upgrade to $DBversion done (Bug 14694 - Make decreaseloanHighHolds more flexible)\n";
12066 SetVersion($DBversion);
12069 $DBversion = "3.23.00.039";
12070 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
12073 ALTER TABLE suggestions
12074 MODIFY COLUMN currency varchar(10) default NULL;
12077 ALTER TABLE aqbooksellers
12078 MODIFY COLUMN currency varchar(10) default NULL;
12080 print "Upgrade to $DBversion done (Bug 15084 - Move the currency related code to Koha::Acquisition::Currenc[y|ies])\n";
12081 SetVersion($DBversion);
12085 $DBversion = "3.23.00.040";
12086 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
12088 my $c = $dbh->selectrow_array('SELECT COUNT(*) FROM systempreferences WHERE variable="intranetcolorstylesheet" AND value="blue.css"');
12091 print "WARNING: You are using a stylesheeet which has been removed from the Koha codebase.\n";
12092 print "Update your intranetcolorstylesheet.\n";
12094 print "Upgrade to $DBversion done (Bug 16019 - Check intranetcolorstylesheet for blue.css)\n";
12095 SetVersion($DBversion);
12098 $DBversion = "3.23.00.041";
12099 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
12101 my $dbh = C4::Context->dbh;
12102 my ($print_error) = $dbh->{PrintError};
12103 $dbh->{RaiseError} = 0;
12104 $dbh->{PrintError} = 0;
12105 $dbh->do("ALTER TABLE overduerules_transport_types ADD COLUMN letternumber INT(1) NOT NULL DEFAULT 1 AFTER id");
12106 $dbh->{PrintError} = $print_error;
12108 print "Upgrade to $DBversion done (Bug 16007: Make sure overduerules_transport_types.letternumber exists)\n";
12109 SetVersion($DBversion);
12112 $DBversion = "3.23.00.042";
12113 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
12116 ALTER TABLE items CHANGE new new_status VARCHAR(32) NULL;
12119 ALTER TABLE deleteditems CHANGE new new_status VARCHAR(32) NULL;
12122 UPDATE systempreferences SET value=REPLACE(value, '"items.new"', '"items.new_status"') WHERE variable="automatic_item_modification_by_age_configuration";
12125 print "Upgrade to $DBversion done (Bug 16004 - Replace items.new with items.new_status)\n";
12126 SetVersion($DBversion);
12129 $DBversion = "3.23.00.043";
12130 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
12132 UPDATE systempreferences SET value="" WHERE value IS NULL;
12135 print "Upgrade to $DBversion done (Bug 16070 - Empty (undef) system preferences may cause some issues in combination with memcache)\n";
12136 SetVersion($DBversion);
12139 $DBversion = "3.23.00.044";
12140 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
12142 INSERT IGNORE INTO systempreferences (variable,value,explanation,options,type) VALUES
12143 ('GoogleOpenIDConnect', '0', NULL, 'if ON, allows the use of Google OpenID Connect for login', 'YesNo'),
12144 ('GoogleOAuth2ClientID', '', NULL, 'Client ID for the web app registered with Google', 'Free'),
12145 ('GoogleOAuth2ClientSecret', '', NULL, 'Client Secret for the web app registered with Google', 'Free'),
12146 ('GoogleOpenIDConnectDomain', '', NULL, 'Restrict OpenID Connect to this domain (or subdomains of this domain). Leave blank for all Google domains', 'Free');
12149 print "Upgrade to $DBversion done (Bug 10988 - Allow login via Google OAuth2 (OpenID Connect))\n";
12150 SetVersion($DBversion);
12153 $DBversion = "3.23.00.045";
12154 if ( CheckVersion($DBversion) ) {
12155 ## Holds details for vendors supplying goods by EDI
12157 CREATE TABLE IF NOT EXISTS vendor_edi_accounts (
12158 id INT(11) NOT NULL auto_increment,
12159 description TEXT NOT NULL,
12161 username VARCHAR(40),
12162 password VARCHAR(40),
12163 last_activity DATE,
12164 vendor_id INT(11) REFERENCES aqbooksellers( id ),
12165 download_directory TEXT,
12166 upload_directory TEXT,
12168 id_code_qualifier VARCHAR(3) default '14',
12169 transport VARCHAR(6) default 'FTP',
12170 quotes_enabled TINYINT(1) not null default 0,
12171 invoices_enabled TINYINT(1) not null default 0,
12172 orders_enabled TINYINT(1) not null default 0,
12173 responses_enabled TINYINT(1) not null default 0,
12174 auto_orders TINYINT(1) not null default 0,
12175 shipment_budget INTEGER(11) REFERENCES aqbudgets( budget_id ),
12177 KEY vendorid (vendor_id),
12178 KEY shipmentbudget (shipment_budget),
12179 CONSTRAINT vfk_vendor_id FOREIGN KEY ( vendor_id ) REFERENCES aqbooksellers ( id ),
12180 CONSTRAINT vfk_shipment_budget FOREIGN KEY ( shipment_budget ) REFERENCES aqbudgets ( budget_id )
12181 ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
12184 ## Hold the actual edifact messages with links to associated baskets
12186 CREATE TABLE IF NOT EXISTS edifact_messages (
12187 id INT(11) NOT NULL auto_increment,
12188 message_type VARCHAR(10) NOT NULL,
12189 transfer_date DATE,
12190 vendor_id INT(11) REFERENCES aqbooksellers( id ),
12191 edi_acct INTEGER REFERENCES vendor_edi_accounts( id ),
12193 basketno INT(11) REFERENCES aqbasket( basketno),
12194 raw_msg MEDIUMTEXT,
12196 deleted BOOLEAN NOT NULL DEFAULT 0,
12198 KEY vendorid ( vendor_id),
12199 KEY ediacct (edi_acct),
12200 KEY basketno ( basketno),
12201 CONSTRAINT emfk_vendor FOREIGN KEY ( vendor_id ) REFERENCES aqbooksellers ( id ),
12202 CONSTRAINT emfk_edi_acct FOREIGN KEY ( edi_acct ) REFERENCES vendor_edi_accounts ( id ),
12203 CONSTRAINT emfk_basketno FOREIGN KEY ( basketno ) REFERENCES aqbasket ( basketno )
12204 ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
12207 ## invoices link back to the edifact message it was generated from
12209 ALTER TABLE aqinvoices ADD COLUMN message_id INT(11) REFERENCES edifact_messages( id );
12212 ## clean up link on deletes
12214 ALTER TABLE aqinvoices ADD CONSTRAINT edifact_msg_fk FOREIGN KEY ( message_id ) REFERENCES edifact_messages ( id ) ON DELETE SET NULL;
12217 ## Hold the supplier ids from quotes for ordering
12218 ## although this is an EAN-13 article number the standard says 35 characters ???
12220 ALTER TABLE aqorders ADD COLUMN line_item_id VARCHAR(35);
12223 ## The suppliers unique reference usually a quotation line number ('QLI')
12224 ## Otherwise Suppliers unique orderline reference ('SLI')
12226 ALTER TABLE aqorders ADD COLUMN suppliers_reference_number VARCHAR(35);
12229 ALTER TABLE aqorders ADD COLUMN suppliers_reference_qualifier VARCHAR(3);
12232 ALTER TABLE aqorders ADD COLUMN suppliers_report text;
12235 ## hold the EAN/SAN used in ordering
12237 CREATE TABLE IF NOT EXISTS edifact_ean (
12238 ee_id int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,
12239 description VARCHAR(128) NULL DEFAULT NULL,
12240 branchcode VARCHAR(10) NOT NULL REFERENCES branches (branchcode),
12241 ean VARCHAR(15) NOT NULL,
12242 id_code_qualifier VARCHAR(3) NOT NULL DEFAULT '14',
12243 CONSTRAINT efk_branchcode FOREIGN KEY ( branchcode ) REFERENCES branches ( branchcode )
12244 ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
12247 ## Add a permission for managing EDI
12249 INSERT INTO permissions (module_bit, code, description) values (11, 'edi_manage', 'Manage EDIFACT transmissions');
12252 print "Upgrade to $DBversion done (Bug 7736 - Edifact QUOTE and ORDER functionality))\n";
12253 SetVersion($DBversion);
12256 $DBversion = "3.23.00.046";
12257 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
12260 ALTER TABLE vendor_edi_accounts ADD COLUMN plugin VARCHAR(256) NOT NULL DEFAULT "";
12263 print "Upgrade to $DBversion done (Bug 15630 - Make Edifact module pluggable))\n";
12264 SetVersion($DBversion);
12267 $DBversion = "3.23.00.047";
12268 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
12271 INSERT IGNORE INTO systempreferences (variable,value,explanation,options,type) VALUES ('IntranetReportsHomeHTML', '', 'Show the following HTML in a div on the bottom of the reports home page', NULL, 'Free');
12274 INSERT IGNORE INTO systempreferences (variable,value,explanation,options,type) VALUES ('IntranetCirculationHomeHTML', '', 'Show the following HTML in a div on the bottom of the reports home page', NULL, 'Free');
12277 print "Upgrade to $DBversion done (Bug 15008 - Add custom HTML areas to circulation and reports home pages)\n";
12278 SetVersion($DBversion);
12281 $DBversion = "3.23.00.048";
12282 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
12284 INSERT IGNORE INTO `systempreferences` (variable,value,options,explanation,type) SELECT 'OPACISBD', value, '70|10', 'Allows to define ISBD view in OPAC', 'Textarea' FROM `systempreferences` WHERE variable = 'ISBD';
12287 print "Upgrade to $DBversion done (Bug 5979 - Add separate OPACISBD system preference)\n";
12288 SetVersion($DBversion);
12293 $DBversion = "3.23.00.049";
12294 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
12295 my $dbh = C4::Context->dbh;
12296 my ( $column_has_been_used ) = $dbh->selectrow_array(q|
12298 FROM borrower_attributes
12299 WHERE password IS NOT NULL
12302 if ( $column_has_been_used ) {
12303 print q|WARNING: The columns borrower_attribute_types.password_allowed and borrower_attributes.password have been removed from the Koha codebase. They were not used. However your installation has at least one borrower_attributes.password defined. In order not to alter your data, the columns have been kept, please save the information elsewhere and remove these columns manually.|;
12306 ALTER TABLE borrower_attribute_types DROP column password_allowed
12309 ALTER TABLE borrower_attributes DROP column password;
12312 print "Upgrade to $DBversion done (Bug 12267 - Allow password option in Patron Attribute non functional)\n";
12313 SetVersion($DBversion);
12317 $DBversion = "3.23.00.050";
12318 if ( CheckVersion($DBversion) ) {
12320 $dbh->do(q|INSERT IGNORE INTO systempreferences (variable,value,explanation,options,type)
12321 VALUES('SearchEngine','Zebra','Choose Search Engine','','Choice')|);
12324 $dbh->do(q|DROP TABLE IF EXISTS search_marc_to_field|);
12325 $dbh->do(q|DROP TABLE IF EXISTS search_marc_map|);
12326 $dbh->do(q|DROP TABLE IF EXISTS search_field|);
12328 # This specifies the fields that will be stored in the search engine.
12330 CREATE TABLE `search_field` (
12331 `id` int(11) NOT NULL AUTO_INCREMENT,
12332 `name` varchar(255) NOT NULL COMMENT 'the name of the field as it will be stored in the search engine',
12333 `label` varchar(255) NOT NULL COMMENT 'the human readable name of the field, for display',
12334 `type` ENUM('', 'string', 'date', 'number', 'boolean', 'sum') NOT NULL COMMENT 'what type of data this holds, relevant when storing it in the search engine',
12335 PRIMARY KEY (`id`),
12336 UNIQUE KEY (`name`)
12337 ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci
12339 # This contains a MARC field specifier for a given index, marc type, and marc
12342 CREATE TABLE `search_marc_map` (
12343 id int(11) NOT NULL AUTO_INCREMENT,
12344 index_name ENUM('biblios','authorities') NOT NULL COMMENT 'what storage index this map is for',
12345 marc_type ENUM('marc21', 'unimarc', 'normarc') NOT NULL COMMENT 'what MARC type this map is for',
12346 marc_field VARCHAR(255) NOT NULL COMMENT 'the MARC specifier for this field',
12348 unique key( index_name, marc_field, marc_type),
12349 INDEX (`index_name`)
12350 ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci
12353 # This joins the two search tables together. We can have any combination:
12354 # one marc field could have many search fields (maybe you want one value
12355 # to go to 'author' and 'corporate-author) and many marc fields could go
12356 # to one search field (e.g. all the various author fields going into
12359 # a note about the sort field:
12360 # * if all the entries for a mapping are 'null', nothing special is done with that mapping.
12361 # * if any of the entries are not null, then a __sort field is created in ES for this mapping. In this case:
12362 # * any mapping with sort == false WILL NOT get copied into a __sort field
12363 # * any mapping with sort == true or is null WILL get copied into a __sort field
12364 # * any sorts on the field name will be applied to $fieldname.'__sort' instead.
12365 # this means that we can have search for author that includes 1xx, 245$c, and 7xx, but the sort only applies to 1xx.
12368 CREATE TABLE `search_marc_to_field` (
12369 search_marc_map_id int(11) NOT NULL,
12370 search_field_id int(11) NOT NULL,
12371 facet boolean DEFAULT FALSE COMMENT 'true if a facet field should be generated for this',
12372 suggestible boolean DEFAULT FALSE COMMENT 'true if this field can be used to generate suggestions for browse',
12373 sort boolean DEFAULT NULL COMMENT 'true/false creates special sort handling, null doesn''t',
12374 PRIMARY KEY(search_marc_map_id, search_field_id),
12375 FOREIGN KEY(search_marc_map_id) REFERENCES search_marc_map(id) ON DELETE CASCADE ON UPDATE CASCADE,
12376 FOREIGN KEY(search_field_id) REFERENCES search_field(id) ON DELETE CASCADE ON UPDATE CASCADE
12377 ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci
12380 print "WARNING: If you plan to use Elasticsearch you should go to 'Home › Administration › Search engine configuration' and reset the mappings\n";
12381 print "Upgrade to $DBversion done (Bug 12478 - Elasticsearch support for Koha)\n";
12382 SetVersion($DBversion);
12386 $DBversion = "3.23.00.051";
12387 if ( CheckVersion($DBversion) ) {
12389 ALTER TABLE edifact_messages
12390 DROP FOREIGN KEY emfk_vendor,
12391 DROP FOREIGN KEY emfk_edi_acct,
12392 DROP FOREIGN KEY emfk_basketno;
12396 ALTER TABLE edifact_messages
12397 ADD CONSTRAINT emfk_vendor FOREIGN KEY ( vendor_id ) REFERENCES aqbooksellers ( id ) ON DELETE CASCADE ON UPDATE CASCADE,
12398 ADD CONSTRAINT emfk_edi_acct FOREIGN KEY ( edi_acct ) REFERENCES vendor_edi_accounts ( id ) ON DELETE CASCADE ON UPDATE CASCADE,
12399 ADD CONSTRAINT emfk_basketno FOREIGN KEY ( basketno ) REFERENCES aqbasket ( basketno ) ON DELETE CASCADE ON UPDATE CASCADE;
12402 print "Upgrade to $DBversion done (Bug 16354 - Fix FK constraints for edifact_messages table)\n";
12403 SetVersion($DBversion);
12407 $DBversion = "3.23.00.052";
12408 if ( CheckVersion($DBversion) ) {
12409 ## Insert permission
12412 INSERT IGNORE INTO permissions (module_bit, code, description) VALUES
12413 (13, 'upload_general_files', 'Upload any file'),
12414 (13, 'upload_manage', 'Manage uploaded files');
12416 ## Update user_permissions for current users (check count in uploaded_files)
12417 ## Note 9 == edit_catalogue and 13 == tools
12418 ## We do not insert if someone is superlibrarian, does not have edit_catalogue,
12419 ## or already has all tools
12422 INSERT IGNORE INTO user_permissions (borrowernumber, module_bit, code)
12423 SELECT borrowernumber, 13, 'upload_general_files'
12425 WHERE flags<>1 AND flags & POW(2,13) = 0 AND
12426 ( flags & POW(2,9) > 0 OR
12427 (SELECT COUNT(*) FROM user_permissions
12428 WHERE borrowernumber=bo.borrowernumber AND module_bit=9 ) > 0 )
12429 AND ( SELECT COUNT(*) FROM uploaded_files ) > 0
12432 print "Upgrade to $DBversion done (Bug 14686 - New menu option and permission for file uploading)\n";
12433 SetVersion($DBversion);
12436 $DBversion = "3.23.00.053";
12437 if ( CheckVersion($DBversion) ) {
12438 my $letters = $dbh->selectall_arrayref(
12442 WHERE message_transport_type="email"
12445 for my $letter (@$letters) {
12451 AND message_transport_type <> "email"
12452 |, undef, $letter->{name}, $letter->{code}
12456 print "Upgrade to $DBversion done (Bug 16217 - Notice' names may have diverged)\n";
12457 SetVersion($DBversion);
12460 $DBversion = "3.23.00.054";
12461 if ( CheckVersion($DBversion) ) {
12463 ALTER TABLE branch_item_rules ADD COLUMN hold_fulfillment_policy ENUM('any', 'homebranch', 'holdingbranch') NOT NULL DEFAULT 'any' AFTER holdallowed;
12466 ALTER TABLE default_branch_circ_rules ADD COLUMN hold_fulfillment_policy ENUM('any', 'homebranch', 'holdingbranch') NOT NULL DEFAULT 'any' AFTER holdallowed;
12469 ALTER TABLE default_branch_item_rules ADD COLUMN hold_fulfillment_policy ENUM('any', 'homebranch', 'holdingbranch') NOT NULL DEFAULT 'any' AFTER holdallowed;
12472 ALTER TABLE default_circ_rules ADD COLUMN hold_fulfillment_policy ENUM('any', 'homebranch', 'holdingbranch') NOT NULL DEFAULT 'any' AFTER holdallowed;
12475 print "Upgrade to $DBversion done (Bug 15532 - Add ability to allow only items whose home/holding branch matches the hold's pickup branch to fill a given hold)\n";
12476 SetVersion($DBversion);
12479 $DBversion = "3.23.00.055";
12480 if ( CheckVersion($DBversion) ) {
12482 ALTER TABLE reserves ADD COLUMN itemtype VARCHAR(10) NULL DEFAULT NULL AFTER suspend_until;
12485 ALTER TABLE reserves ADD KEY `itemtype` (`itemtype`);
12488 ALTER TABLE reserves ADD CONSTRAINT `reserves_ibfk_5` FOREIGN KEY (`itemtype`) REFERENCES `itemtypes` (`itemtype`) ON DELETE CASCADE ON UPDATE CASCADE;
12491 ALTER TABLE old_reserves ADD COLUMN itemtype VARCHAR(10) NULL DEFAULT NULL AFTER suspend_until;
12494 ALTER TABLE old_reserves ADD KEY `itemtype` (`itemtype`);
12497 ALTER TABLE old_reserves ADD CONSTRAINT `old_reserves_ibfk_4` FOREIGN KEY (`itemtype`) REFERENCES `itemtypes` (`itemtype`) ON DELETE CASCADE ON UPDATE CASCADE;
12501 INSERT IGNORE INTO systempreferences ( `variable`, `value`, `options`, `explanation`, `type` ) VALUES
12502 ('AllowHoldItemTypeSelection','0','','If enabled, patrons and staff will be able to select the itemtype when placing a hold','YesNo');
12505 print "Upgrade to $DBversion done (Bug 15533 - Allow patrons and librarians to select itemtype when placing hold)\n";
12506 SetVersion($DBversion);
12509 $DBversion = "3.23.00.056";
12510 if ( CheckVersion($DBversion) ) {
12512 INSERT IGNORE INTO systempreferences ( `variable`, `value`, `options`, `explanation`, `type` ) VALUES
12513 ('NoIssuesChargeGuarantees','','','Define maximum amount withstanding before check outs are blocked','Integer');
12516 print "Upgrade to $DBversion done (Bug 14577 - Allow restriction of checkouts based on fines of guarantor/guarantee)\n";
12517 SetVersion($DBversion);
12520 $DBversion = "3.23.00.057";
12521 if ( CheckVersion($DBversion) ) {
12523 ALTER TABLE aqbasket ADD COLUMN is_standing TINYINT(1) NOT NULL DEFAULT 0 AFTER branch;
12526 print "Upgrade to $DBversion done (Bug 15531 - Add support for standing orders)\n";
12527 SetVersion($DBversion);
12530 $DBversion = "3.23.00.058";
12531 if ( CheckVersion($DBversion) ) {
12533 my ($count_imageurl) = $dbh->selectrow_array(q|
12535 FROM authorised_values
12536 WHERE imageurl IS NOT NULL
12540 unless ($count_imageurl) {
12541 if ( C4::Context->preference('AuthorisedValueImages')
12542 or C4::Context->preference('StaffAuthorisedValueImages') )
12545 UPDATE systempreferences
12547 WHERE variable = "AuthorisedValueImages"
12548 or variable = "StaffAuthorisedValueImages"
12550 warn "The system preferences AuthorisedValueImages and StaffAuthorisedValueImages have been turned off\n";
12551 warn "authorised_values.imageurl is not populated, that means you are not using this feature\n";
12555 warn "At least one authorised value has an icon defined (imageurl)\n";
12556 warn "The system preference AuthorisedValueImages or StaffAuthorisedValueImages could be turned off if you are not aware of this feature\n";
12559 print "Upgrade to $DBversion done (Bug 16041 - StaffAuthorisedValueImages & AuthorisedValueImages preferences - impact on search performance)\n";
12560 SetVersion($DBversion);
12563 $DBversion = "3.23.00.059";
12564 if ( CheckVersion($DBversion) ) {
12566 DELETE FROM systempreferences WHERE variable="AuthorisedValueImages" OR variable="StaffAuthorisedValueImages";
12569 print "Upgrade to $DBversion done (Bug 16167 - Remove prefs to drive authorised value images)\n";
12570 SetVersion($DBversion);
12573 $DBversion = "3.23.00.060";
12574 if ( CheckVersion($DBversion) ) {
12576 INSERT IGNORE INTO systempreferences ( value, variable, options, explanation,type )
12577 SELECT value ,'EnhancedMessagingPreferencesOPAC', NULL, 'If ON, allows patrons to select to receive additional messages about items due or nearly due.', 'YesNo' FROM systempreferences WHERE variable = 'EnhancedMessagingPreferences';
12580 print "Upgrade to $DBversion done (Bug 12528 - Enable staff to deny message setting access to patrons on the OPAC)\n";
12581 SetVersion($DBversion);
12584 $DBversion = "3.23.00.061";
12585 if ( CheckVersion($DBversion) ) {
12586 my ( $cnt ) = $dbh->selectrow_array( q|
12587 SELECT COUNT(*) FROM items it
12588 LEFT JOIN biblio bi ON bi.biblionumber=it.biblionumber
12589 LEFT JOIN biblioitems bii USING (biblioitemnumber)
12590 WHERE bi.biblionumber IS NULL
12593 print "WARNING: You have corrupted data in your items table!! The table contains $cnt references to biblio records that do not exist.\nPlease correct your data IMMEDIATELY after this upgrade and manually add the foreign key constraint for biblionumber in the items table.\n";
12598 ADD FOREIGN KEY (`biblionumber`) REFERENCES `biblio` (`biblionumber`) ON DELETE CASCADE ON UPDATE CASCADE
12600 print "Upgrade to $DBversion done (Bug 16170 - Add FK for biblionumber in items)\n";
12602 SetVersion($DBversion);
12605 $DBversion = "3.23.00.062";
12606 if ( CheckVersion($DBversion) ) {
12608 ALTER TABLE aqorders DROP COLUMN budgetgroup_id;
12610 print "Upgrade to $DBversion done (Bug 16414 - aqorders.budgetgroup_id has never been used and can be removed)\n";
12611 SetVersion($DBversion);
12614 $DBversion = "3.23.00.063";
12615 if ( CheckVersion($DBversion) ) {
12617 UPDATE letter SET branchcode='' WHERE branchcode IS NULL;
12620 ALTER TABLE letter MODIFY COLUMN branchcode varchar(10) NOT NULL DEFAULT ''
12623 ALTER TABLE permissions MODIFY COLUMN code varchar(64) NOT NULL DEFAULT '';
12625 print "Upgrade to $DBversion done (Bug 16402: Fix DB structure to work on MySQL 5.7)\n";
12626 SetVersion($DBversion);
12629 $DBversion = "3.23.00.064";
12630 if ( CheckVersion($DBversion) ) {
12632 ALTER TABLE creator_layouts MODIFY layout_name char(25) NOT NULL DEFAULT 'DEFAULT';
12634 print "Upgrade to $DBversion done (Bug 15086 - Creators layout and template sql has warnings)\n";
12635 SetVersion($DBversion);
12638 $DBversion = "16.05.00.000";
12639 if ( CheckVersion($DBversion) ) {
12640 print "Upgrade to $DBversion done (Koha 16.05)\n";
12641 SetVersion($DBversion);
12644 $DBversion = "16.06.00.000";
12645 if ( CheckVersion($DBversion) ) {
12646 print "Upgrade to $DBversion done (Koha 16.06 - starting a new dev line at KohaCon16 in Thessaloniki, Greece! Koha is great!)\n";
12647 SetVersion($DBversion);
12650 $DBversion = "16.06.00.001";
12651 if ( CheckVersion($DBversion) ) {
12653 UPDATE accountlines SET accounttype='HE', description=itemnumber WHERE (description REGEXP '^Hold waiting too long [0-9]+') AND accounttype='F';
12656 print "Upgrade to $DBversion done (Bug 16200 - 'Hold waiting too long' fee has a translation problem)\n";
12657 SetVersion($DBversion);
12660 $DBversion = "16.06.00.002";
12661 if ( CheckVersion($DBversion) ) {
12662 unless ( column_exists('borrowers', 'updated_on') ) {
12664 ALTER TABLE borrowers
12665 ADD COLUMN updated_on timestamp NULL DEFAULT CURRENT_TIMESTAMP
12666 ON UPDATE CURRENT_TIMESTAMP
12667 AFTER privacy_guarantor_checkouts;
12670 ALTER TABLE deletedborrowers
12671 ADD COLUMN updated_on timestamp NULL DEFAULT CURRENT_TIMESTAMP
12672 ON UPDATE CURRENT_TIMESTAMP
12673 AFTER privacy_guarantor_checkouts;
12677 print "Upgrade to $DBversion done (Bug 10459 - borrowers should have a timestamp)\n";
12678 SetVersion($DBversion);
12681 $DBversion = "16.06.00.003";
12682 if ( CheckVersion($DBversion) ) {
12684 INSERT IGNORE INTO systempreferences ( variable, value, options, explanation, type )
12685 SELECT 'MaxItemsToProcessForBatchMod', value, NULL, 'Process up to a given number of items in a single item modification batch.', 'Integer' FROM systempreferences WHERE variable='MaxItemsForBatch';
12688 INSERT IGNORE INTO systempreferences ( variable, value, options, explanation, type )
12689 SELECT 'MaxItemsToDisplayForBatchDel', value, NULL, 'Display up to a given number of items in a single item deletionbatch.', 'Integer' FROM systempreferences WHERE variable='MaxItemsForBatch';
12692 DELETE FROM systempreferences WHERE variable="MaxItemsForBatch";
12695 print "Upgrade to $DBversion done (Bug 11490 - MaxItemsForBatch should be split into two new prefs)\n";
12696 SetVersion($DBversion);
12699 $DBversion = '16.06.00.004';
12700 if ( CheckVersion($DBversion) ) {
12702 INSERT IGNORE INTO systempreferences ( variable, value, options, explanation, type )
12703 SELECT 'OPACXSLTListsDisplay', COALESCE(value,''), '', 'Enable XSLT stylesheet control over lists pages display on OPAC', 'Free'
12704 FROM systempreferences WHERE variable='OPACXSLTResultsDisplay';
12708 INSERT IGNORE INTO systempreferences ( variable, value, options, explanation, type )
12709 SELECT 'XSLTListsDisplay', COALESCE(value,''), '', 'Enable XSLT stylesheet control over lists pages display on intranet', 'Free'
12710 FROM systempreferences WHERE variable='XSLTResultsDisplay';
12713 print "Upgrade to $DBversion done (Bug 15485: Allow choosing different XSLTs for lists)\n";
12714 SetVersion($DBversion);
12717 $DBversion = '16.06.00.005';
12718 if ( CheckVersion($DBversion) ) {
12720 UPDATE `systempreferences` set options = 'US|FR|CH' where variable = 'CurrencyFormat';
12723 print "Upgrade to $DBversion done (Bug 16768 - Add official number format for Switzerland: 1'234'567.89)\n";
12724 SetVersion($DBversion);
12727 $DBversion = "16.06.00.006";
12728 if ( CheckVersion($DBversion) ) {
12730 CREATE TABLE `refund_lost_item_fee_rules` (
12731 `branchcode` varchar(10) NOT NULL default '',
12732 `refund` tinyint(1) NOT NULL default 0,
12733 PRIMARY KEY (`branchcode`)
12734 ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
12737 INSERT IGNORE INTO systempreferences (variable,value,explanation,options,type)
12738 VALUES( 'RefundLostOnReturnControl',
12740 'If a lost item is returned, choose which branch to pick rules for refunding.',
12741 'CheckinLibrary|PatronLibrary|ItemHomeBranch|ItemHoldingbranch',
12744 # Pick the old syspref as the default rule
12746 INSERT INTO refund_lost_item_fee_rules (branchcode,refund)
12747 SELECT '*', COALESCE(value,'1') FROM systempreferences WHERE variable='RefundLostItemFeeOnReturn'
12749 # Delete the old syspref
12751 DELETE IGNORE FROM systempreferences
12752 WHERE variable='RefundLostItemFeeOnReturn'
12755 print "Upgrade to $DBversion done (Bug 14048: Change RefundLostItemFeeOnReturn to be branch specific)\n";
12756 SetVersion($DBversion);
12759 $DBversion = '16.06.00.007';
12760 if ( CheckVersion($DBversion) ) {
12762 INSERT IGNORE INTO systempreferences (variable,value,explanation,options,type)
12763 VALUES ('PatronQuickAddFields', '', 'A list of fields separated by "|" to be displayed along with mandatory fields in the patron quick add form if chosen at patron entry', NULL, 'Free');
12766 print "Upgrade to $DBversion done (Bug 3534 - Patron quick add form)\n";
12767 SetVersion($DBversion);
12770 $DBversion = '16.06.00.008';
12771 if ( CheckVersion($DBversion) ) {
12773 INSERT IGNORE INTO systempreferences (variable,value,options,explanation,type)
12774 VALUES('CheckPrevCheckout','hardno','hardyes|softyes|softno|hardno','By default, for every item checked out, should we warn if the patron has checked out that item in the past?','Choice');
12777 ALTER TABLE categories
12778 ADD COLUMN `checkprevcheckout` varchar(7) NOT NULL default 'inherit'
12779 AFTER `default_privacy`;
12782 ALTER TABLE borrowers
12783 ADD COLUMN `checkprevcheckout` varchar(7) NOT NULL default 'inherit'
12784 AFTER `privacy_guarantor_checkouts`;
12787 ALTER TABLE deletedborrowers
12788 ADD COLUMN `checkprevcheckout` varchar(7) NOT NULL default 'inherit'
12789 AFTER `privacy_guarantor_checkouts`;
12792 print "Upgrade to $DBversion done (Bug 6906 - show 'Borrower has previously issued \$ITEM' alert on checkout)\n";
12793 SetVersion($DBversion);
12796 $DBversion = '16.06.00.009';
12797 if ( CheckVersion($DBversion) ) {
12799 INSERT IGNORE INTO systempreferences (variable,value,options,explanation,type)
12800 VALUES ('IntranetCatalogSearchPulldown','0',NULL,'Show a search field pulldown for \"Search the catalog\" boxes. ','YesNo');
12803 print "Upgrade to $DBversion done (Bug 14902 - Add qualifier menu to staff side 'Search the Catalog')\n";
12804 SetVersion($DBversion);
12807 $DBversion = '16.06.00.010';
12808 if ( CheckVersion($DBversion) ) {
12810 INSERT IGNORE INTO systempreferences (variable,value,options,explanation,type)
12811 VALUES ('MaxOpenSuggestions','',NULL,'Limit the number of open suggestions a patron can have at once, unlimited if blank','Integer')
12814 print "Upgrade to $DBversion done (Bug 15128 - Add ability to limit the number of open purchase suggestions a patron can make)\n";
12815 SetVersion($DBversion);
12818 $DBversion = '16.06.00.011';
12819 if ( CheckVersion($DBversion) ) {
12821 INSERT IGNORE INTO systempreferences (variable,value,options,explanation,type) VALUES
12822 ('NovelistSelectStaffEnabled','0',NULL,'Enable Novelist Select content to the Staff Interface (requires that you have entered in a user profile and password, which can be seen in image links)','YesNo'),
12823 ('NovelistSelectStaffView','tab','tab|above|below','Where to display Novelist Select content','Choice');
12826 print "Upgrade to $DBversion done (Bug 11606 - Novelist Select in Staff Client)\n";
12827 SetVersion($DBversion);
12830 $DBversion = '16.06.00.012';
12831 if ( CheckVersion($DBversion) ) {
12833 ALTER TABLE virtualshelves MODIFY COLUMN created_on DATETIME not NULL;
12836 print "Upgrade to $DBversion done (Bug 16573 - Web installer fails to load structure and sample data on MySQL 5.7)\n";
12837 SetVersion($DBversion);
12840 $DBversion = '16.06.00.013';
12841 if ( CheckVersion($DBversion) ) {
12843 INSERT IGNORE INTO systempreferences (variable, value, options, explanation, type) VALUES
12844 ('OPACResultsLibrary', 'homebranch', 'homebranch|holdingbranch', 'Defines whether the OPAC displays the holding or home branch in search results when using XSLT', 'Choice');
12847 print "Upgrade to $DBversion done (Bug 7441 - Search results showing wrong branch)\n";
12848 SetVersion($DBversion);
12851 $DBversion = "16.06.00.014";
12852 if ( CheckVersion($DBversion) ) {
12854 ALTER TABLE `action_logs` ADD COLUMN `interface` VARCHAR(30) DEFAULT NULL AFTER `info`;
12858 ALTER TABLE `action_logs` ADD KEY `interface` (`interface`);
12861 print "Upgrade to $DBversion done (Bug 16829: action_logs should have an 'interface' column)\n";
12862 SetVersion($DBversion);
12865 $DBversion = "16.06.00.015";
12866 if ( CheckVersion($DBversion) ) {
12868 INSERT IGNORE INTO systempreferences ( variable, value, options, explanation, type ) VALUES
12869 ('HoldsLog','0',NULL,'If ON, log create/cancel/suspend/resume actions on holds.','YesNo');
12872 print "Upgrade to $DBversion done (Bug 14642: Add logging of hold modifications)\n";
12873 SetVersion($DBversion);
12876 $DBversion = "16.06.00.016";
12877 if ( CheckVersion($DBversion) ) {
12879 update marc_subfield_structure set defaultvalue=REPLACE(defaultvalue, 'YYYY', '<<YYYY>>') where defaultvalue like "%YYYY%" and defaultvalue not like "%<<YYYY>>%";
12882 update marc_subfield_structure set defaultvalue=REPLACE(defaultvalue, 'MM', '<<MM>>') where defaultvalue like "%MM%" and defaultvalue not like "%<<MM>>%";
12885 update marc_subfield_structure set defaultvalue=REPLACE(defaultvalue, 'DD', '<<DD>>') where defaultvalue like "%DD%" and defaultvalue not like "%<<DD>>%";
12888 update marc_subfield_structure set defaultvalue=REPLACE(defaultvalue, 'user', '<<USER>>') where defaultvalue like "%user%" and defaultvalue not like "%<<USER>>%";
12891 print "Upgrade to $DBversion done (Bug 7045 - Default-value substitution inconsistent)\n";
12892 SetVersion($DBversion);
12895 $DBversion = "16.06.00.017";
12896 if ( CheckVersion($DBversion) ) {
12898 INSERT IGNORE INTO systempreferences (`variable`, `value`, `options`, `explanation`, `type`) VALUES ('OPACSuggestionMandatoryFields','title','','Define the mandatory fields for a patron purchase suggestions made via OPAC.','multiple');
12901 print "Upgrade to $DBversion done (Bug 10848 - Allow configuration of mandatory/required fields on the suggestion form in OPAC)\n";
12902 SetVersion($DBversion);
12905 $DBversion = "16.06.00.018";
12906 if ( CheckVersion($DBversion) ) {
12908 ALTER TABLE issuingrules ADD COLUMN holds_per_record SMALLINT(6) NOT NULL DEFAULT 1 AFTER reservesallowed;
12911 print "Upgrade to $DBversion done (Bug 14695 - Add ability to place multiple item holds on a given record per patron)\n";
12912 SetVersion($DBversion);
12915 $DBversion = "16.06.00.019";
12916 if ( CheckVersion($DBversion) ) {
12918 ALTER TABLE reviews CHANGE COLUMN approved approved tinyint(4) DEFAULT 0;
12921 UPDATE reviews SET approved=0 WHERE approved IS NULL;
12924 print "Upgrade to $DBversion done (Bug 15839 - Move the reviews related code to Koha::Reviews)\n";
12925 SetVersion($DBversion);
12928 $DBversion = "16.06.00.020";
12929 if ( CheckVersion($DBversion) ) {
12931 INSERT IGNORE INTO systempreferences (variable,value,explanation,options,type) VALUES ('SwitchOnSiteCheckouts', '0', 'Automatically switch an on-site checkout to a normal checkout', NULL, 'YesNo');
12934 print "Upgrade to $DBversion done (Bug 16272 - Transform checkout from on-site checkout to regular checkout)\n";
12935 SetVersion($DBversion);
12938 $DBversion = "16.06.00.021";
12939 if ( CheckVersion($DBversion) ) {
12941 INSERT IGNORE INTO systempreferences (variable,value,explanation,options,type) VALUES ('PatronSelfRegistrationEmailMustBeUnique', '0', 'If set, the field borrowers.email will be considered as a unique field on self registering', NULL, 'YesNo');
12944 print "Upgrade to $DBversion done (Bug 16275 - Prevent patron self registration if the email already filled in borrowers.email)\n";
12945 SetVersion($DBversion);
12948 $DBversion = "16.06.00.022";
12949 if ( CheckVersion($DBversion) ) {
12951 INSERT IGNORE INTO `permissions`
12952 (module_bit, code, description) VALUES
12953 (16, 'delete_reports', 'Delete SQL reports');
12956 INSERT IGNORE INTO user_permissions
12957 (borrowernumber, module_bit,code)
12958 SELECT borrowernumber,module_bit,'delete_reports'
12959 FROM user_permissions
12960 WHERE module_bit=16 AND code='create_reports';
12963 print "Upgrade to $DBversion done (Bug 16978 - Add delete reports user permission)\n";
12964 SetVersion($DBversion);
12967 $DBversion = "16.06.00.023";
12968 if ( CheckVersion($DBversion) ) {
12969 my $pref = C4::Context->preference('timeout');
12970 if( !$pref || $pref eq '12000000' ) {
12971 # update if pref is null or equals old default value
12973 UPDATE systempreferences SET value = '1d', type = 'Free'
12974 WHERE variable = 'timeout'
12976 print "Upgrade to $DBversion done (Bug 17187)\nNote: Pref value for timeout has been adjusted.\n";
12978 # only update pref type
12980 UPDATE systempreferences SET type = 'Free'
12981 WHERE variable = 'timeout'
12983 print "Upgrade to $DBversion done (Bug 17187)\nNote: Pref value for timeout has not been adjusted.\n";
12985 SetVersion($DBversion);
12988 $DBversion = "16.06.00.024";
12989 if ( CheckVersion($DBversion) ) {
12991 UPDATE language_descriptions SET description = 'Română' WHERE subtag = 'ro' AND type = 'language' AND lang = 'ro';
12994 print "Upgrade to $DBversion done (Bug 16311 - Advanced search language limit typo for Romanian)\n";
12995 SetVersion($DBversion);
12998 $DBversion = "16.06.00.025";
12999 if ( CheckVersion($DBversion) ) {
13001 ALTER TABLE `subscription` ADD `itemtype` VARCHAR( 10 ) NULL AFTER reneweddate, ADD `previousitemtype` VARCHAR( 10 ) NULL AFTER itemtype;
13004 INSERT IGNORE INTO systempreferences (variable,value,explanation,options,type) VALUES
13005 ('makePreviousSerialAvailable','0','make previous serial automatically available when collecting a new serial. Please note that the item-level_itypes syspref must be set to specific item.','','YesNo');
13008 print "Upgrade to $DBversion done (Bug 7677 - Subscriptions: Ability to define default itemtype and automatically change itemtype of older issues on receive of next issue)\n";
13009 SetVersion($DBversion);
13012 $DBversion = "16.06.00.026";
13013 if ( CheckVersion($DBversion) ) {
13015 INSERT IGNORE INTO systempreferences (variable,value,explanation,options,type) VALUES ('PatronSelfRegistrationLibraryList', '', 'Only display libraries listed. If empty, all libraries are displayed.', NULL, 'Free');
13018 print "Upgrade to $DBversion done (Bug 16274 - Make the selfregistration branchcode selection configurable)\n";
13019 SetVersion($DBversion);
13022 $DBversion = "16.06.00.027";
13023 if ( CheckVersion($DBversion) ) {
13024 unless ( column_exists('borrowers', 'lastseen') ) {
13026 ALTER TABLE borrowers ADD COLUMN lastseen datetime default NULL AFTER updated_on;
13029 ALTER TABLE deletedborrowers ADD COLUMN lastseen datetime default NULL AFTER updated_on;
13033 INSERT IGNORE INTO systempreferences (variable,value,explanation,options,type) VALUES ('TrackLastPatronActivity', '0', 'If set, the field borrowers.lastseen will be updated everytime a patron is seen', NULL, 'YesNo');
13036 print "Upgrade to $DBversion done (Bug 16276: Add a new pref TrackLastPatronActivity and new column borrowers.lastseen)\n";
13037 SetVersion($DBversion);
13040 $DBversion = '16.06.00.028';
13041 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
13043 print "Attempting upgrade to $DBversion (Bug 17135) ...\n";
13044 my $maintenance_script = C4::Context->config("intranetdir") . "/installer/data/mysql/fix_unclosed_nonaccruing_fines_bug17135.pl";
13045 system("perl $maintenance_script --confirm");
13047 print "Upgrade to $DBversion done (Bug 17135 - Fine for the previous overdue may get overwritten by the next one)\n";
13049 unless ($original_version < TransformToNum("3.23.00.032")) { ## Bug 15675
13050 print "WARNING: There is a possibility (= just a possibility, it's configuration dependent etc.) that - due to regression introduced by Bug 15675 - some old fine records for overdued items (items which got renewed 1+ time while being overdue) may have been overwritten in your production 16.05+ database. See Bugzilla reports for Bug 14390 and Bug 17135 for more details.\n";
13051 print "WARNING: Please note that this upgrade does not try to recover such overwitten old fine records (if any) - it's just an follow-up for Bug 14390, its sole purpose is preventing eventual further-on overwrites from happening in the future. Optional recovery of the overwritten fines (again, if any) is like, totally outside of the scope of this particular upgrade!\n";
13053 SetVersion ($DBversion);
13057 $DBversion = "16.06.00.029";
13058 if ( CheckVersion($DBversion) ) {
13060 UPDATE systempreferences SET type="Choice" WHERE variable="UsageStatsLibraryType";
13063 UPDATE systempreferences SET value="Canada" WHERE variable="UsageStatsCountry" AND value="CANADA";
13066 UPDATE systempreferences SET value="Czech Republic" WHERE variable="UsageStatsCountry" AND value="CZ";
13069 UPDATE systempreferences SET value="United Kingdom" WHERE variable="UsageStatsCountry" AND (value="England" OR value="UK");
13072 UPDATE systempreferences SET value="Spain" WHERE variable="UsageStatsCountry" AND value="España";
13075 UPDATE systempreferences SET value="Greece" WHERE variable="UsageStatsCountry" AND value="GR";
13078 UPDATE systempreferences SET value="Ireland" WHERE variable="UsageStatsCountry" AND value="Irelanbd";
13081 UPDATE systempreferences SET value="Mexico" WHERE variable="UsageStatsCountry" AND value="México";
13084 UPDATE systempreferences SET value="Peru" WHERE variable="UsageStatsCountry" AND value="Perú";
13087 UPDATE systempreferences SET value="Dominican Rep." WHERE variable="UsageStatsCountry" AND value="República Dominicana";
13090 UPDATE systempreferences SET value="Trinidad & Tob." WHERE variable="UsageStatsCountry" AND value="Trinidad";
13093 UPDATE systempreferences SET value="Turkey" WHERE variable="UsageStatsCountry" AND value="Türkiye";
13096 UPDATE systempreferences SET value="USA" WHERE variable="UsageStatsCountry" AND (value="United States" OR value="United States of America" OR value="US");
13099 UPDATE systempreferences SET value="Zimbabwe" WHERE variable="UsageStatsCountry" AND value="Zimbabbwe";
13102 print "Upgrade to $DBversion done (Bug 14707 - Change UsageStatsCountry from free text to a dropdown list)\n";
13103 SetVersion($DBversion);
13106 $DBversion = "16.06.00.030";
13107 if ( CheckVersion($DBversion) ) {
13109 INSERT IGNORE INTO systempreferences ( `variable`, `value`, `options`, `explanation`, `type` ) VALUES
13110 ('OPACHoldingsDefaultSortField','first_column','first_column|homebranch|holdingbranch','Default sort field for the holdings table at the OPAC','choice');
13113 print "Upgrade to $DBversion done (Bug 16552 - Add the ability to change the default holdings sort)\n";
13114 SetVersion($DBversion);
13117 $DBversion = "16.06.00.031";
13118 if ( CheckVersion($DBversion) ) {
13120 INSERT IGNORE INTO systempreferences (variable,value,explanation,options,type) VALUES ('PatronSelfRegistrationPrefillForm', '1', 'Display password and prefill login form after a patron has self registered', NULL, 'YesNo');
13123 print "Upgrade to $DBversion done (Bug 16273 - Prevent selfregistration from printing the borrower password and filling the logging form)\n";
13124 SetVersion($DBversion);
13127 $DBversion = "16.06.00.032";
13128 if ( CheckVersion($DBversion) ) {
13130 UPDATE marc_subfield_structure SET authorised_value="WITHDRAWN" WHERE authorised_value="WTHDRAWN";
13133 print "Upgrade to $DBversion done (Bug 17357 - WTHDRAWN is still used in installer files)\n";
13134 SetVersion($DBversion);
13138 $DBversion = "16.06.00.033";
13139 if ( CheckVersion($DBversion) ) {
13141 CREATE TABLE authorised_value_categories (
13142 category_name VARCHAR(32) NOT NULL,
13143 primary key (category_name)
13144 ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
13146 ## Add authorised value categories
13148 INSERT INTO authorised_value_categories (category_name )
13149 SELECT DISTINCT category FROM authorised_values;
13152 ## Add special categories
13154 INSERT IGNORE INTO authorised_value_categories( category_name )
13164 ('REPORT_SUBGROUP'),
13167 ('SUGGEST_STATUS'),
13171 ## Add very special categories
13173 INSERT IGNORE INTO authorised_value_categories( category_name )
13181 INSERT IGNORE INTO authorised_value_categories( category_name )
13193 ALTER TABLE items_search_fields
13194 DROP FOREIGN KEY items_search_fields_authorised_values_category;
13198 ALTER TABLE items_search_fields
13199 ADD CONSTRAINT `items_search_fields_authorised_values_category` FOREIGN KEY (`authorised_values_category`) REFERENCES `authorised_value_categories` (`category_name`) ON DELETE SET NULL ON UPDATE CASCADE;
13203 ALTER TABLE authorised_values
13204 ADD CONSTRAINT `authorised_values_authorised_values_category` FOREIGN KEY (`category`) REFERENCES `authorised_value_categories` (`category_name`) ON DELETE CASCADE ON UPDATE CASCADE;
13208 INSERT IGNORE INTO authorised_value_categories( category_name ) SELECT DISTINCT(authorised_value) FROM marc_subfield_structure;
13212 UPDATE marc_subfield_structure SET authorised_value = NULL WHERE authorised_value = '';
13215 # If the DB has been created before 3.19.00.006, the default collate for marc_subfield_structure if not set to utf8_unicode_ci and the new FK will not be create (MariaDB or MySQL will raise err 150)
13216 my $table_sth = $dbh->prepare(qq|SHOW CREATE TABLE marc_subfield_structure|);
13217 $table_sth->execute;
13218 my @table = $table_sth->fetchrow_array;
13219 if ( $table[1] !~ /COLLATE=utf8_unicode_ci/ and $table[1] !~ /COLLATE=utf8mb4_unicode_ci/ ) { #catches utf8mb4 collated tables
13220 $dbh->do(qq|ALTER TABLE marc_subfield_structure CHARACTER SET utf8 COLLATE utf8_unicode_ci|);
13223 ALTER TABLE marc_subfield_structure
13224 MODIFY COLUMN authorised_value VARCHAR(32) DEFAULT NULL,
13225 ADD CONSTRAINT marc_subfield_structure_ibfk_1 FOREIGN KEY (authorised_value) REFERENCES authorised_value_categories (category_name) ON UPDATE CASCADE ON DELETE SET NULL;
13228 print "Upgrade to $DBversion done (Bug 17216 - Add a new table to store authorized value categories)\n";
13229 SetVersion($DBversion);
13232 $DBversion = "16.06.00.034";
13233 if ( CheckVersion($DBversion) ) {
13235 ALTER TABLE biblioitems DROP COLUMN marc;
13238 ALTER TABLE deletedbiblioitems DROP COLUMN marc;
13241 print "Upgrade to $DBversion done (Bug 10455 - remove redundant 'biblioitems.marc' field)\n";
13242 SetVersion($DBversion);
13245 $DBversion = '16.06.00.035';
13246 if ( CheckVersion($DBversion) ) {
13248 INSERT IGNORE INTO systempreferences ( variable, value, options, explanation, type )
13249 SELECT 'AllowItemsOnHoldCheckoutSCO',COALESCE(value,0),'','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'
13250 FROM systempreferences WHERE variable='AllowItemsOnHoldCheckout';
13253 print "Upgrade to $DBversion done (Bug 15131: Give SCO separate control for AllowItemsOnHoldCheckout)\n";
13254 SetVersion($DBversion);
13257 $DBversion = '16.06.00.036';
13258 if ( CheckVersion($DBversion) ) {
13260 CREATE TABLE IF NOT EXISTS `housebound_profile` (
13261 `borrowernumber` int(11) NOT NULL, -- Number of the borrower associated with this profile.
13262 `day` text NOT NULL, -- The preferred day of the week for delivery.
13263 `frequency` text NOT NULL, -- The Authorised_Value definining the pattern for delivery.
13264 `fav_itemtypes` text default NULL, -- Free text describing preferred itemtypes.
13265 `fav_subjects` text default NULL, -- Free text describing preferred subjects.
13266 `fav_authors` text default NULL, -- Free text describing preferred authors.
13267 `referral` text default NULL, -- Free text indicating how the borrower was added to the service.
13268 `notes` text default NULL, -- Free text for additional notes.
13269 PRIMARY KEY (`borrowernumber`),
13270 CONSTRAINT `housebound_profile_bnfk`
13271 FOREIGN KEY (`borrowernumber`)
13272 REFERENCES `borrowers` (`borrowernumber`)
13273 ON UPDATE CASCADE ON DELETE CASCADE
13274 ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
13277 CREATE TABLE IF NOT EXISTS `housebound_visit` (
13278 `id` int(11) NOT NULL auto_increment, -- ID of the visit.
13279 `borrowernumber` int(11) NOT NULL, -- Number of the borrower, & the profile, linked to this visit.
13280 `appointment_date` date default NULL, -- Date of visit.
13281 `day_segment` varchar(10), -- Rough time frame: 'morning', 'afternoon' 'evening'
13282 `chooser_brwnumber` int(11) default NULL, -- Number of the borrower to choose items for delivery.
13283 `deliverer_brwnumber` int(11) default NULL, -- Number of the borrower to deliver items.
13284 PRIMARY KEY (`id`),
13285 CONSTRAINT `houseboundvisit_bnfk`
13286 FOREIGN KEY (`borrowernumber`)
13287 REFERENCES `housebound_profile` (`borrowernumber`)
13288 ON UPDATE CASCADE ON DELETE CASCADE,
13289 CONSTRAINT `houseboundvisit_bnfk_1`
13290 FOREIGN KEY (`chooser_brwnumber`)
13291 REFERENCES `borrowers` (`borrowernumber`)
13292 ON UPDATE CASCADE ON DELETE CASCADE,
13293 CONSTRAINT `houseboundvisit_bnfk_2`
13294 FOREIGN KEY (`deliverer_brwnumber`)
13295 REFERENCES `borrowers` (`borrowernumber`)
13296 ON UPDATE CASCADE ON DELETE CASCADE
13297 ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
13300 CREATE TABLE IF NOT EXISTS `housebound_role` (
13301 `borrowernumber_id` int(11) NOT NULL, -- borrowernumber link
13302 `housebound_chooser` tinyint(1) NOT NULL DEFAULT 0, -- set to 1 to indicate this patron is a housebound chooser volunteer
13303 `housebound_deliverer` tinyint(1) NOT NULL DEFAULT 0, -- set to 1 to indicate this patron is a housebound deliverer volunteer
13304 PRIMARY KEY (`borrowernumber_id`),
13305 CONSTRAINT `houseboundrole_bnfk`
13306 FOREIGN KEY (`borrowernumber_id`)
13307 REFERENCES `borrowers` (`borrowernumber`)
13308 ON UPDATE CASCADE ON DELETE CASCADE
13309 ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
13312 INSERT IGNORE INTO systempreferences
13313 (variable,value,options,explanation,type) VALUES
13314 ('HouseboundModule',0,'',
13315 'If ON, enable housebound module functionality.','YesNo');
13318 INSERT IGNORE INTO authorised_value_categories( category_name ) VALUES
13322 INSERT IGNORE INTO authorised_values (category, authorised_value, lib) VALUES
13323 ('HSBND_FREQ','EW','Every week');
13326 print "Upgrade to $DBversion done (Bug 5670 - Housebound Readers Module)\n";
13327 SetVersion($DBversion);
13330 $DBversion = "16.06.00.037";
13331 if ( CheckVersion($DBversion) ) {
13333 ALTER TABLE `issuingrules` ADD `article_requests` ENUM( 'no', 'yes', 'bib_only', 'item_only' ) NOT NULL DEFAULT 'no' AFTER `opacitemholds`;
13336 INSERT INTO `systempreferences` (`variable`, `value`, `options`, `explanation`, `type`) VALUES
13337 ('ArticleRequests', '0', NULL, 'Enables the article request feature', 'YesNo'),
13338 ('ArticleRequestsMandatoryFields', '', NULL, 'Comma delimited list of required fields for bibs where article requests rule = ''yes''', 'multiple'),
13339 ('ArticleRequestsMandatoryFieldsItemsOnly', '', NULL, 'Comma delimited list of required fields for bibs where article requests rule = ''item_only''', 'multiple'),
13340 ('ArticleRequestsMandatoryFieldsRecordOnly', '', NULL, 'Comma delimited list of required fields for bibs where article requests rule = ''bib_only''', 'multiple');
13343 CREATE TABLE IF NOT EXISTS `article_requests` (
13344 `id` int(11) NOT NULL AUTO_INCREMENT,
13345 `borrowernumber` int(11) NOT NULL,
13346 `biblionumber` int(11) NOT NULL,
13347 `itemnumber` int(11) DEFAULT NULL,
13348 `branchcode` varchar(10) CHARACTER SET utf8 COLLATE utf8_unicode_ci DEFAULT NULL,
13356 `patron_notes` text,
13357 `status` enum('PENDING','PROCESSING','COMPLETED','CANCELED') NOT NULL DEFAULT 'PENDING',
13359 `created_on` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
13360 `updated_on` timestamp NULL DEFAULT NULL,
13361 PRIMARY KEY (`id`),
13362 KEY `borrowernumber` (`borrowernumber`),
13363 KEY `biblionumber` (`biblionumber`),
13364 KEY `itemnumber` (`itemnumber`),
13365 KEY `branchcode` (`branchcode`),
13366 CONSTRAINT `article_requests_ibfk_1` FOREIGN KEY (`borrowernumber`) REFERENCES `borrowers` (`borrowernumber`) ON DELETE CASCADE ON UPDATE CASCADE,
13367 CONSTRAINT `article_requests_ibfk_2` FOREIGN KEY (`biblionumber`) REFERENCES `biblio` (`biblionumber`) ON DELETE CASCADE ON UPDATE CASCADE,
13368 CONSTRAINT `article_requests_ibfk_3` FOREIGN KEY (`itemnumber`) REFERENCES `items` (`itemnumber`) ON DELETE SET NULL ON UPDATE CASCADE,
13369 CONSTRAINT `article_requests_ibfk_4` FOREIGN KEY (`branchcode`) REFERENCES `branches` (`branchcode`) ON DELETE SET NULL ON UPDATE CASCADE
13370 ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
13373 INSERT INTO `letter` (`module`, `code`, `branchcode`, `name`, `is_html`, `title`, `content`, `message_transport_type`) VALUES
13374 ('circulation', 'AR_CANCELED', '', 'Article Request - Email - Canceled', 0, 'Article Request Canceled', '<<borrowers.firstname>> <<borrowers.surname>> (<<borrowers.cardnumber>>)\r\n\r\nYour request for an article from <<biblio.title>> (<<items.barcode>>) has been canceled for the following reason:\r\n\r\n<<article_requests.notes>>\r\n\r\nArticle requested:\r\nTitle: <<article_requests.title>>\r\nAuthor: <<article_requests.author>>\r\nVolume: <<article_requests.volume>>\r\nIssue: <<article_requests.issue>>\r\nDate: <<article_requests.date>>\r\nPages: <<article_requests.pages>>\r\nChapters: <<article_requests.chapters>>\r\nNotes: <<article_requests.patron_notes>>\r\n', 'email'),
13375 ('circulation', 'AR_COMPLETED', '', 'Article Request - Email - Completed', 0, 'Article Request Completed', '<<borrowers.firstname>> <<borrowers.surname>> (<<borrowers.cardnumber>>)\r\n\r\nWe are have completed your request for an article from <<biblio.title>> (<<items.barcode>>).\r\n\r\nArticle requested:\r\nTitle: <<article_requests.title>>\r\nAuthor: <<article_requests.author>>\r\nVolume: <<article_requests.volume>>\r\nIssue: <<article_requests.issue>>\r\nDate: <<article_requests.date>>\r\nPages: <<article_requests.pages>>\r\nChapters: <<article_requests.chapters>>\r\nNotes: <<article_requests.patron_notes>>\r\n\r\nYou may pick your article up at <<branches.branchname>>.\r\n\r\nThank you!', 'email'),
13376 ('circulation', 'AR_PENDING', '', 'Article Request - Email - Open', 0, 'Article Request Received', '<<borrowers.firstname>> <<borrowers.surname>> (<<borrowers.cardnumber>>)\r\n\r\nWe have received your request for an article from <<biblio.title>> (<<items.barcode>>).\r\n\r\nArticle requested:\r\nTitle: <<article_requests.title>>\r\nAuthor: <<article_requests.author>>\r\nVolume: <<article_requests.volume>>\r\nIssue: <<article_requests.issue>>\r\nDate: <<article_requests.date>>\r\nPages: <<article_requests.pages>>\r\nChapters: <<article_requests.chapters>>\r\nNotes: <<article_requests.patron_notes>>\r\n\r\n\r\nThank you!', 'email'),
13377 ('circulation', 'AR_SLIP', '', 'Article Request - Print Slip', 0, 'Test', 'Article Request:\r\n\r\n<<borrowers.firstname>> <<borrowers.surname>> (<<borrowers.cardnumber>>)\r\n\r\nTitle: <<biblio.title>>\r\nBarcode: <<items.barcode>>\r\n\r\nArticle requested:\r\nTitle: <<article_requests.title>>\r\nAuthor: <<article_requests.author>>\r\nVolume: <<article_requests.volume>>\r\nIssue: <<article_requests.issue>>\r\nDate: <<article_requests.date>>\r\nPages: <<article_requests.pages>>\r\nChapters: <<article_requests.chapters>>\r\nNotes: <<article_requests.patron_notes>>\r\n', 'print'),
13378 ('circulation', 'AR_PROCESSING', '', 'Article Request - Email - Processing', 0, 'Article Request Processing', '<<borrowers.firstname>> <<borrowers.surname>> (<<borrowers.cardnumber>>)\r\n\r\nWe are now processing your request for an article from <<biblio.title>> (<<items.barcode>>).\r\n\r\nArticle requested:\r\nTitle: <<article_requests.title>>\r\nAuthor: <<article_requests.author>>\r\nVolume: <<article_requests.volume>>\r\nIssue: <<article_requests.issue>>\r\nDate: <<article_requests.date>>\r\nPages: <<article_requests.pages>>\r\nChapters: <<article_requests.chapters>>\r\nNotes: <<article_requests.patron_notes>>\r\n\r\nThank you!', 'email');
13381 print "Upgrade to $DBversion done (Bug 14610 - Add ability to place article requests in Koha)\n";
13382 SetVersion($DBversion);
13385 $DBversion = '16.06.00.038';
13386 if ( CheckVersion($DBversion) ) {
13388 INSERT IGNORE INTO systempreferences (variable,value,options,explanation,type) VALUES ('DefaultPatronSearchFields','surname,firstname,othernames,cardnumber,userid',NULL,'Comma separated list defining the default fields to be used during a patron search','free');
13391 print "Upgrade to $DBversion done (Bug 14874 - Add ability to search for patrons by date of birth from checkout and patron quick searches)\n";
13392 SetVersion($DBversion);
13395 $DBversion = "16.06.00.039";
13396 if ( CheckVersion($DBversion) ) {
13398 my $sth = $dbh->prepare(q{
13399 SELECT s.itemnumber, i.itype, b.itemtype
13401 ( SELECT DISTINCT itemnumber
13403 WHERE ( type = "return" OR type = "localuse" ) AND
13407 ( SELECT itemnumber,biblionumber, itype
13410 SELECT itemnumber,biblionumber, itype
13413 ON (s.itemnumber=i.itemnumber)
13415 ( SELECT biblionumber, itemtype
13418 SELECT biblionumber, itemtype
13419 FROM deletedbiblioitems
13421 ON (i.biblionumber=b.biblionumber);
13425 my $update_sth = $dbh->prepare(q{
13428 WHERE itemnumber=? AND itemtype IS NULL
13430 my $ilevel_itypes = C4::Context->preference('item-level_itypes');
13432 while ( my ($itemnumber,$item_itype,$biblio_itype) = $sth->fetchrow_array ) {
13434 my $effective_itemtype = $ilevel_itypes
13435 ? $item_itype // $biblio_itype
13437 warn "item-level_itypes set but no itype defined for item ($itemnumber)"
13438 if $ilevel_itypes and !defined $item_itype;
13439 $update_sth->execute( $effective_itemtype, $itemnumber );
13442 print "Upgrade to $DBversion done (Bug 14598: itemtype is not set on statistics by C4::Circulation::AddReturn)\n";
13443 SetVersion($DBversion);
13446 $DBversion = '16.06.00.040';
13447 if ( CheckVersion($DBversion) ) {
13449 ALTER TABLE `aqcontacts` ADD `orderacquisition` BOOLEAN NOT NULL DEFAULT 0 AFTER `notes`;
13452 INSERT IGNORE INTO `letter` (module, code, name, title, content, message_transport_type) VALUES
13453 ('orderacquisition','ACQORDER','Acquisition order','Order','<<aqbooksellers.name>>\r\n<<aqbooksellers.address1>>\r\n<<aqbooksellers.address2>>\r\n<<aqbooksellers.address3>>\r\n<<aqbooksellers.address4>>\r\n<<aqbooksellers.phone>>\r\n\r\nPlease order for the library:\r\n\r\n<order>Ordernumber <<aqorders.ordernumber>> (<<biblio.title>>) (quantity: <<aqorders.quantity>>) ($<<aqorders.listprice>> each).</order>\r\n\r\nThank you,\n\n<<branches.branchname>>', 'email');
13456 print "Upgrade to $DBversion done (Bug 5260 - Add option to send an order by e-mail to the acquisition module)\n";
13457 SetVersion($DBversion);
13460 $DBversion = '16.06.00.041';
13461 if ( CheckVersion($DBversion) ) {
13463 INSERT IGNORE INTO systempreferences (variable,value,explanation,options,type) VALUES ('AggressiveMatchOnISSN','0','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')
13466 print "Upgrade to $DBversion done (Bug 14629 - Add aggressive ISSN matching feature equivalent to the aggressive ISBN matcher)\n";
13467 SetVersion($DBversion);
13470 $DBversion = '16.06.00.042';
13471 if ( CheckVersion($DBversion) ) {
13473 ALTER TABLE aqorders
13474 ADD COLUMN unitprice_tax_excluded decimal(28,6) default NULL AFTER unitprice,
13475 ADD COLUMN unitprice_tax_included decimal(28,6) default NULL AFTER unitprice_tax_excluded,
13476 ADD COLUMN rrp_tax_excluded decimal(28,6) default NULL AFTER rrp,
13477 ADD COLUMN rrp_tax_included decimal(28,6) default NULL AFTER rrp_tax_excluded,
13478 ADD COLUMN ecost_tax_excluded decimal(28,6) default NULL AFTER ecost,
13479 ADD COLUMN ecost_tax_included decimal(28,6) default NULL AFTER ecost_tax_excluded,
13480 ADD COLUMN tax_value decimal(6,4) default NULL AFTER gstrate
13483 # rename gstrate with tax_rate
13484 $dbh->do(q|ALTER TABLE aqorders CHANGE COLUMN gstrate tax_rate decimal(6,4) DEFAULT NULL|);
13485 $dbh->do(q|ALTER TABLE aqbooksellers CHANGE COLUMN gstrate tax_rate decimal(6,4) DEFAULT NULL|);
13487 # Fill the new columns
13488 my $orders = $dbh->selectall_arrayref(q|
13489 SELECT * FROM aqorders
13490 |, { Slice => {} } );
13492 my $sth_update_order = $dbh->prepare(q|
13494 SET unitprice_tax_excluded = ?,
13495 unitprice_tax_included = ?,
13496 rrp_tax_excluded = ?,
13497 rrp_tax_included = ?,
13498 ecost_tax_excluded = ?,
13499 ecost_tax_included = ?,
13501 WHERE ordernumber = ?
13504 my $sth_get_bookseller = $dbh->prepare(q|
13505 SELECT aqbooksellers.*
13507 LEFT JOIN aqbasket ON aqbasket.booksellerid = aqbooksellers.id
13508 LEFT JOIN aqorders ON aqorders.basketno = aqbasket.basketno
13509 WHERE ordernumber = ?
13512 require Number::Format;
13513 my $format = Number::Format->new;
13515 for my $order ( @$orders ) {
13516 $sth_get_bookseller->execute( $order->{ordernumber} );
13517 my ( $bookseller ) = $sth_get_bookseller->fetchrow_hashref;
13518 $order->{rrp} = $format->round( $order->{rrp}, $precision );
13519 $order->{ecost} = $format->round( $order->{ecost}, $precision );
13520 $order->{tax_rate} ||= 0 ; # tax_rate can be NULL in DB
13522 if ( $bookseller->{listincgst} ) {
13523 $order->{rrp_tax_included} = $order->{rrp};
13524 $order->{rrp_tax_excluded} = $format->round(
13525 $order->{rrp_tax_included} / ( 1 + $order->{tax_rate} ), $precision );
13526 $order->{ecost_tax_included} = $order->{ecost};
13527 $order->{ecost_tax_excluded} = $format->round(
13528 $order->{ecost} / ( 1 + $order->{tax_rate} ), $precision );
13531 $order->{rrp_tax_excluded} = $order->{rrp};
13532 $order->{rrp_tax_included} = $format->round(
13533 $order->{rrp} * ( 1 + $order->{tax_rate} ), $precision );
13534 $order->{ecost_tax_excluded} = $order->{ecost};
13535 $order->{ecost_tax_included} = $format->round(
13536 $order->{ecost} * ( 1 + $order->{tax_rate} ), $precision );
13540 if ( $bookseller->{listincgst} ) {
13541 $order->{unitprice_tax_included} = $format->round( $order->{unitprice}, $precision );
13542 $order->{unitprice_tax_excluded} = $format->round(
13543 $order->{unitprice_tax_included} / ( 1 + $order->{tax_rate} ), $precision );
13546 $order->{unitprice_tax_excluded} = $format->round( $order->{unitprice}, $precision );
13547 $order->{unitprice_tax_included} = $format->round(
13548 $order->{unitprice_tax_excluded} * ( 1 + $order->{tax_rate} ), $precision );
13551 # If the order is received, the tax is calculated from the unit price
13552 if ( $order->{orderstatus} eq 'complete' ) {
13553 $order->{tax_value} = $format->round(
13554 ( $order->{unitprice_tax_included} - $order->{unitprice_tax_excluded} )
13555 * $order->{quantity}, $precision );
13557 # otherwise the ecost is used
13558 $order->{tax_value} = $format->round(
13559 ( $order->{ecost_tax_included} - $order->{ecost_tax_excluded} ) *
13560 $order->{quantity}, $precision );
13563 $sth_update_order->execute(
13564 $order->{unitprice_tax_excluded},
13565 $order->{unitprice_tax_included},
13566 $order->{rrp_tax_excluded},
13567 $order->{rrp_tax_included},
13568 $order->{ecost_tax_excluded},
13569 $order->{ecost_tax_included},
13570 $order->{tax_value},
13571 $order->{ordernumber},
13575 print "Upgrade to $DBversion done (Bug 13321 - Tax and prices calculation need to be fixed)\n";
13576 SetVersion($DBversion);
13579 $DBversion = '16.06.00.043';
13580 if ( CheckVersion($DBversion) ) {
13581 # Add the new columns
13583 ALTER TABLE aqorders
13584 ADD COLUMN tax_rate_on_ordering decimal(6,4) default NULL AFTER tax_rate,
13585 ADD COLUMN tax_rate_on_receiving decimal(6,4) default NULL AFTER tax_rate_on_ordering,
13586 ADD COLUMN tax_value_on_ordering decimal(28,6) default NULL AFTER tax_value,
13587 ADD COLUMN tax_value_on_receiving decimal(28,6) default NULL AFTER tax_value_on_ordering
13590 my $orders = $dbh->selectall_arrayref(q|
13591 SELECT * FROM aqorders
13592 |, { Slice => {} } );
13594 my $sth_update_order = $dbh->prepare(q|
13596 SET tax_rate_on_ordering = tax_rate,
13597 tax_rate_on_receiving = tax_rate,
13598 tax_value_on_ordering = ?,
13599 tax_value_on_receiving = ?
13600 WHERE ordernumber = ?
13603 for my $order (@$orders) {
13604 my $tax_value_on_ordering =
13605 $order->{quantity} *
13606 $order->{ecost_tax_excluded} *
13607 $order->{tax_rate};
13609 my $tax_value_on_receiving =
13610 ( defined $order->{unitprice_tax_excluded} )
13611 ? $order->{quantity} * $order->{unitprice_tax_excluded} * $order->{tax_rate}
13614 $sth_update_order->execute( $tax_value_on_ordering,
13615 $tax_value_on_receiving, $order->{ordernumber} );
13618 # Remove the old columns
13620 ALTER TABLE aqorders
13621 CHANGE COLUMN tax_value tax_value_bak decimal(28,6) default NULL,
13622 CHANGE COLUMN tax_rate tax_rate_bak decimal(6,4) default NULL
13625 print "Upgrade to $DBversion done (Bug 13323 - Change the tax rate on receiving)\n";
13626 SetVersion($DBversion);
13629 $DBversion = '16.06.00.044';
13630 if ( CheckVersion($DBversion) ) {
13632 ALTER TABLE `messages`
13633 ADD `manager_id` int(11) NULL,
13634 ADD FOREIGN KEY (`manager_id`) REFERENCES `borrowers` (`borrowernumber`) ON DELETE SET NULL;
13637 print "Upgrade to $DBversion done (Bug 17397 - Show name of librarian who created circulation message)\n";
13638 SetVersion($DBversion);
13641 $DBversion = '16.06.00.045';
13642 if ( CheckVersion($DBversion) ) {
13644 UPDATE systempreferences SET options = "now|dateexpiry|combination", explanation = "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 " WHERE variable = "BorrowerRenewalPeriodBase";
13647 print "Upgrade to $DBversion done (Bug 17443 - Make possible to renew patron by later of expiry and current date)\n";
13648 SetVersion($DBversion);
13651 $DBversion = '16.06.00.046';
13652 if ( CheckVersion($DBversion) ) {
13654 ALTER TABLE issuingrules ADD COLUMN no_auto_renewal_after INT(4) DEFAULT NULL AFTER auto_renew;
13657 print "Upgrade to $DBversion done (Bug 15581 - Add a circ rule to not allow auto-renewals after defined loan period)\n";
13658 SetVersion($DBversion);
13661 $DBversion = '16.06.00.047';
13662 if ( CheckVersion($DBversion) ) {
13664 UPDATE language_descriptions SET description = 'Čeština' WHERE subtag = 'cs' AND type = 'language' AND lang = 'cs'
13667 print "Upgrade to $DBversion done (Bug 17518: Displayed language name for Czech is wrong)\n";
13668 SetVersion($DBversion);
13671 $DBversion = '16.06.00.048';
13672 if( CheckVersion( $DBversion ) ) {
13674 INSERT IGNORE INTO permissions (module_bit, code, description) VALUES
13675 (13, 'upload_general_files', 'Upload any file'),
13676 (13, 'upload_manage', 'Manage uploaded files');
13679 # Update user_permissions for current users (check count in uploaded_files)
13680 # Note 9 == edit_catalogue and 13 == tools
13681 # We do not insert if someone is superlibrarian, does not have edit_catalogue,
13682 # or already has all tools
13684 INSERT IGNORE INTO user_permissions (borrowernumber, module_bit, code)
13685 SELECT borrowernumber, 13, 'upload_general_files'
13687 WHERE flags<>1 AND flags & POW(2,13) = 0 AND
13688 ( flags & POW(2,9) > 0 OR (
13689 SELECT COUNT(*) FROM user_permissions
13690 WHERE borrowernumber=bo.borrowernumber AND module_bit=9 ) > 0 )
13691 AND ( SELECT COUNT(*) FROM uploaded_files ) > 0;
13694 SetVersion( $DBversion );
13695 print "Upgrade to $DBversion done (Bug 17663 - Forgotten userpermissions)\n";
13698 $DBversion = '16.06.00.049';
13699 if( CheckVersion( $DBversion ) ) {
13701 INSERT IGNORE INTO systempreferences (variable,value,options,explanation,type)
13702 VALUES ('ReplytoDefault', '', NULL, 'The default email address to be set as replyto.', 'Free');
13706 INSERT IGNORE INTO systempreferences (variable,value,options,explanation,type)
13707 VALUES ('ReturnpathDefault', '', NULL, 'The default email address to be set as return-path', 'Free');
13710 SetVersion( $DBversion );
13711 print "Upgrade to $DBversion done (Bug 17391 - ReturnpathDefault and ReplyToDefault missing from syspref.sql)\n";
13714 $DBversion = "16.06.00.050";
13715 if ( CheckVersion($DBversion) ) {
13717 # If index issn_idx still exists, we assume that dbrev 3.15.00.049 failed,
13718 # and we repeat it (partially).
13719 # Note: the db rev only pertains to biblioitems and is not needed for
13720 # deletedbiblioitems.
13722 my $temp = $dbh->selectall_arrayref( "SHOW INDEXES FROM biblioitems WHERE key_name = 'issn_idx'" );
13725 $dbh->do( "ALTER TABLE biblioitems DROP INDEX isbn" );
13726 $dbh->do( "ALTER TABLE biblioitems DROP INDEX issn" );
13727 $dbh->do( "ALTER TABLE biblioitems DROP INDEX issn_idx" );
13728 $dbh->do( "ALTER TABLE biblioitems CHANGE isbn isbn MEDIUMTEXT NULL DEFAULT NULL, CHANGE issn issn MEDIUMTEXT NULL DEFAULT NULL" );
13729 $dbh->do( "ALTER TABLE biblioitems ADD INDEX isbn ( isbn ( 255 ) ), ADD INDEX issn ( issn ( 255 ) )" );
13730 print "Upgrade to $DBversion done (Bug 8835). Removed issn_idx.\n";
13732 print "Upgrade to $DBversion done (Bug 8835). Everything is fine.\n";
13735 SetVersion($DBversion);
13738 $DBversion = "16.11.00.000";
13739 if ( CheckVersion($DBversion) ) {
13740 print "Upgrade to $DBversion done (Koha 16.11)\n";
13741 SetVersion($DBversion);
13744 $DBversion = "16.12.00.000";
13745 if ( CheckVersion($DBversion) ) {
13746 print "Upgrade to $DBversion done (Koha 16.12 - Our battered suitcases were piled on the sidewalk again; we had longer ways to go. But no matter, the road is life.)\n";
13747 SetVersion($DBversion);
13750 $DBversion = "16.12.00.001";
13751 if ( CheckVersion($DBversion) ) {
13753 ALTER TABLE borrower_modifications
13754 ADD COLUMN extended_attributes text DEFAULT NULL
13758 print "Upgrade to $DBversion done (Bug 17767 - Let Koha::Patron::Modification handle extended attributes)\n";
13759 SetVersion($DBversion);
13762 $DBversion = '16.12.00.002';
13763 if ( CheckVersion($DBversion) ) {
13764 unless (column_exists( 'branchtransfers', 'branchtransfer_id' )
13765 and index_exists( 'branchtransfers', 'PRIMARY' ) )
13768 "ALTER TABLE branchtransfers
13769 ADD COLUMN branchtransfer_id int(12) NOT NULL auto_increment FIRST, ADD CONSTRAINT PRIMARY KEY (branchtransfer_id);"
13773 SetVersion($DBversion);
13774 print "Upgrade to $DBversion done (Bug 14187 - branchtransfer needs a primary key (id) for DBIx and common sense.)\n";
13777 $DBversion = '16.12.00.003';
13778 if ( CheckVersion($DBversion) ) {
13779 $dbh->do(q{DELETE FROM systempreferences WHERE variable="Persona"});
13780 SetVersion($DBversion);
13781 print "Upgrade to $DBversion done (Bug 17486 - Remove 'Mozilla Persona' as an authentication method)\n";
13784 $DBversion = '16.12.00.004';
13785 if ( CheckVersion($DBversion) ) {
13787 CREATE TABLE biblio_metadata (
13788 `id` INT(11) NOT NULL AUTO_INCREMENT,
13789 `biblionumber` INT(11) NOT NULL,
13790 `format` VARCHAR(16) NOT NULL,
13791 `marcflavour` VARCHAR(16) NOT NULL,
13792 `metadata` LONGTEXT NOT NULL,
13794 UNIQUE KEY `biblio_metadata_uniq_key` (`biblionumber`,`format`,`marcflavour`),
13795 CONSTRAINT `biblio_metadata_fk_1` FOREIGN KEY (biblionumber) REFERENCES biblio (biblionumber) ON DELETE CASCADE ON UPDATE CASCADE
13796 ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
13799 CREATE TABLE deletedbiblio_metadata (
13800 `id` INT(11) NOT NULL AUTO_INCREMENT,
13801 `biblionumber` INT(11) NOT NULL,
13802 `format` VARCHAR(16) NOT NULL,
13803 `marcflavour` VARCHAR(16) NOT NULL,
13804 `metadata` LONGTEXT NOT NULL,
13806 UNIQUE KEY `deletedbiblio_metadata_uniq_key` (`biblionumber`,`format`,`marcflavour`),
13807 CONSTRAINT `deletedbiblio_metadata_fk_1` FOREIGN KEY (biblionumber) REFERENCES deletedbiblio (biblionumber) ON DELETE CASCADE ON UPDATE CASCADE
13808 ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
13811 INSERT INTO biblio_metadata ( biblionumber, format, marcflavour, metadata ) SELECT biblionumber, 'marcxml', 'CHANGEME', marcxml FROM biblioitems;
13814 INSERT INTO deletedbiblio_metadata ( biblionumber, format, marcflavour, metadata ) SELECT biblionumber, 'marcxml', 'CHANGEME', marcxml FROM deletedbiblioitems;
13817 UPDATE biblio_metadata SET marcflavour = (SELECT value FROM systempreferences WHERE variable="marcflavour");
13820 UPDATE deletedbiblio_metadata SET marcflavour = (SELECT value FROM systempreferences WHERE variable="marcflavour");
13823 ALTER TABLE biblioitems DROP COLUMN marcxml;
13826 ALTER TABLE deletedbiblioitems DROP COLUMN marcxml;
13828 SetVersion($DBversion);
13829 print "Upgrade to $DBversion done (Bug 17196 - Move marcxml out of the biblioitems table)\n";
13832 $DBversion = '16.12.00.005';
13833 if( CheckVersion( $DBversion ) ) {
13834 $dbh->do( "INSERT IGNORE INTO systempreferences (variable,value,options,explanation,type) VALUES('AuthorityMergeMode','loose','loose|strict','Authority merge mode','Choice')");
13836 SetVersion( $DBversion );
13837 print "Upgrade to $DBversion done (Bug 17913 - AuthorityMergeMode)\n";
13840 $DBversion = "16.12.00.006";
13841 if ( CheckVersion($DBversion) ) {
13842 unless ( column_exists( 'borrower_attributes', 'id' )
13843 and index_exists( 'borrower_attributes', 'PRIMARY' ) )
13846 ALTER TABLE `borrower_attributes`
13847 ADD `id` int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY FIRST
13851 print "Upgrade to $DBversion done (Bug 17813: Table borrower_attributes needs a primary key\n";
13852 SetVersion($DBversion);
13855 $DBversion = "16.12.00.007";
13856 if( CheckVersion( $DBversion ) ) {
13858 if ( column_exists('opac_news', 'new' ) ) {
13859 $dbh->do(q|ALTER TABLE opac_news CHANGE COLUMN new content text NOT NULL|);
13863 UPDATE letter SET content = REPLACE(content, "<<opac_news.new>>", "<<opac_news.content>>") WHERE content LIKE "%<<opac_news.new>>%"
13866 SetVersion( $DBversion );
13867 print "Upgrade to $DBversion done (Bug 17960 - Rename opac_news with opac_news.content (template notices have been updated!))\n";
13870 $DBversion = "16.12.00.008";
13871 if( CheckVersion( $DBversion ) ) {
13873 INSERT IGNORE INTO systempreferences (variable,value,explanation,options,type) VALUES
13874 ('MarcItemFieldsToOrder','','Set the mapping values for new item records created from a MARC record in a staged file. In a YAML format.', NULL, 'textarea');
13877 SetVersion( $DBversion );
13878 print "Upgrade to $DBversion done (Bug 15503 - Grab Item Information from Order Files)\n";
13881 $DBversion = "16.12.00.009";
13882 if( CheckVersion( $DBversion ) ) {
13884 INSERT IGNORE INTO systempreferences (variable,value,explanation,options,type) VALUES
13885 ('OPACHoldsIfAvailableAtPickup','1','','Allow to pickup up holds at libraries where the item is available','YesNo');
13889 INSERT IGNORE INTO systempreferences (variable,value,explanation,options,type) VALUES
13890 ('OPACHoldsIfAvailableAtPickupExceptions','','','List the patron categories not affected by OPACHoldsIfAvailableAtPickup if off','Free');
13893 SetVersion( $DBversion );
13894 print "Upgrade to $DBversion done (Bug 17453 - Inter-site holds improvement)\n";
13897 $DBversion = "16.12.00.010";
13898 if( CheckVersion( $DBversion ) ) {
13900 ALTER TABLE borrowers ADD overdrive_auth_token text default NULL AFTER lastseen;
13904 ALTER TABLE deletedborrowers ADD overdrive_auth_token text default NULL AFTER lastseen;
13908 INSERT IGNORE INTO systempreferences (variable,value,explanation,options,type)
13909 VALUES ('OverDriveCirculation','0','Enable client to see their OverDrive account','','YesNo');
13912 SetVersion( $DBversion );
13913 print "Upgrade to $DBversion done (Bug 16034 - Integration with OverDrive Patron API)\n";
13916 $DBversion = "16.12.00.011";
13917 if( CheckVersion( $DBversion ) ) {
13919 ALTER TABLE search_field CHANGE COLUMN type type ENUM('', 'string', 'date', 'number', 'boolean', 'sum') NOT NULL
13920 COMMENT 'what type of data this holds, relevant when storing it in the search engine';
13923 SetVersion( $DBversion );
13924 print "Upgrade to $DBversion done (Bug 17260 - updatedatabase.pl fails on invalid entries in ENUM and BOOLEAN columns)\n";
13927 $DBversion = "16.12.00.012";
13928 if( CheckVersion( $DBversion ) ) {
13930 INSERT IGNORE INTO `systempreferences` (`variable`, `value`, `options`, `explanation`, `type`)
13931 VALUES ('OpacNewsLibrarySelect', '0', '', 'Show selector for branches on OPAC news page', 'YesNo');
13934 SetVersion( $DBversion );
13935 print "Upgrade to $DBversion done (Bug 14764 - Add OPAC News branch selector)\n";
13938 $DBversion = "16.12.00.013";
13939 if( CheckVersion( $DBversion ) ) {
13941 INSERT IGNORE INTO systempreferences (`variable`, `value`, `options`, `explanation`, `type`)
13942 VALUES ('CircSidebar','0','','Activate or deactivate the navigation sidebar on all Circulation pages','YesNo');
13945 SetVersion( $DBversion );
13946 print "Upgrade to $DBversion done (Bug 16530 - Add a circ sidebar navigation menu)\n";
13949 $DBversion = "16.12.00.014";
13950 if( CheckVersion( $DBversion ) ) {
13952 INSERT INTO systempreferences ( `variable`, `value`, `options`, `explanation`, `type` ) VALUES
13953 ('LoadSearchHistoryToTheFirstLoggedUser', '1', NULL, 'If ON, the next user will automatically get the last searches in his history', 'YesNo');
13955 SetVersion( $DBversion );
13956 print "Upgrade to $DBversion done (Bug 8010 - Search history can be added to the wrong patron)\n";
13959 $DBversion = "16.12.00.015";
13960 if( CheckVersion( $DBversion ) ) {
13961 unless( column_exists( 'branches', 'geolocation' ) ) {
13963 ALTER TABLE branches ADD COLUMN geolocation VARCHAR(255) DEFAULT NULL after opac_info
13968 INSERT IGNORE INTO systempreferences (variable, value, options, explanation, type ) VALUES ('UsageStatsGeolocation', '', NULL, 'Geolocation of the main library', 'Free');
13971 INSERT IGNORE INTO systempreferences (variable, value, options, explanation, type ) VALUES ('UsageStatsLibrariesInfo', '', NULL, 'Share libraries information', 'YesNo');
13974 INSERT IGNORE INTO systempreferences (variable, value, options, explanation, type ) VALUES ('UsageStatsPublicID', '', NULL, 'Public ID for Hea website', 'Free');
13977 SetVersion( $DBversion );
13978 print "Upgrade to $DBversion done (Bug 18066 - Hea version 2)\n";
13981 $DBversion = "16.12.00.016";
13982 if ( CheckVersion($DBversion) ) {
13983 unless ( column_exists( 'borrower_attribute_types', 'opac_editable' ) )
13986 ALTER TABLE borrower_attribute_types
13987 ADD COLUMN `opac_editable` tinyint(1) NOT NULL default 0 AFTER `opac_display`
13991 print "Upgrade to $DBversion done (Bug 13757: Make patron attributes editable in the opac if set to 'editable in OPAC)'\n";
13992 SetVersion($DBversion);
13995 $DBversion = "16.12.00.017";
13996 if ( CheckVersion($DBversion) ) {
13998 INSERT IGNORE INTO systempreferences (variable,value,options,explanation,type)
13999 VALUES ('CumulativeRestrictionPeriods', 0, NULL, 'Cumulate the restriction periods instead of keeping the highest', 'YesNo')
14002 print "Upgrade to $DBversion done (Bug 14146 - Additional days are not added to restriction period when checking-in several overdues for same patron)'\n";
14003 SetVersion($DBversion);
14006 $DBversion = "16.12.00.018";
14007 if ( CheckVersion($DBversion) ) {
14009 INSERT IGNORE INTO systempreferences ( variable, value, options, explanation, type )
14010 SELECT 'ExportCircHistory', COUNT(*), NULL, "Display the export circulation options", 'YesNo'
14011 FROM systempreferences
14012 WHERE ( variable = 'ExportRemoveFields' AND value != "" AND value IS NOT NULL )
14013 OR ( variable = 'ExportWithCsvProfile' AND value != "" AND value IS NOT NULL );
14017 DELETE FROM systempreferences WHERE variable="ExportWithCsvProfile";
14020 print "Upgrade to $DBversion done (Bug 15498 - Replace ExportWithCsvProfile with ExportCircHistory)'\n";
14021 SetVersion($DBversion);
14024 $DBversion = "16.12.00.019";
14025 if( CheckVersion( $DBversion ) ) {
14026 if ( column_exists( 'issues', 'return' ) ) {
14027 $dbh->do(q|ALTER TABLE issues DROP column `return`|);
14030 if ( column_exists( 'old_issues', 'return' ) ) {
14031 $dbh->do(q|ALTER TABLE old_issues DROP column `return`|);
14034 SetVersion( $DBversion );
14035 print "Upgrade to $DBversion done (Bug 18173 - Remove issues.return DB field)\n";
14038 $DBversion = "16.12.00.020";
14039 if( CheckVersion( $DBversion ) ) {
14041 UPDATE systempreferences SET options="any_time_is_placed|not_always|any_time_is_collected" WHERE variable="HoldFeeMode";
14045 UPDATE systempreferences SET value="any_time_is_placed" WHERE variable="HoldFeeMode" AND value="always";
14048 SetVersion( $DBversion );
14049 print "Upgrade to $DBversion done (Bug 17560 - Hold fee placement at point of checkout)\n";
14052 $DBversion = "16.12.00.021";
14053 if( CheckVersion( $DBversion ) ) {
14055 INSERT IGNORE INTO systempreferences ( `variable`, `value`, `options`, `explanation`, `type` ) VALUES
14056 ('RenewalLog','0','','If ON, log information about renewals','YesNo');
14059 SetVersion( $DBversion );
14060 print "Upgrade to $DBversion done (Bug 17708 - Renewal log seems empty)\n";
14063 $DBversion = "16.12.00.022";
14064 if( CheckVersion( $DBversion ) ) {
14065 print "NOTE: The sender for claim notifications has been corrected. The email address of the staff member is no longer used. We will use the branch email address or KohaAdminEmailAddress, as is done for other notices.\n";
14066 SetVersion( $DBversion );
14067 print "Upgrade to $DBversion done (Bug 17866 - Change sender for serial claim notifications)\n";
14070 $DBversion = '16.12.00.023';
14071 if( CheckVersion( $DBversion ) ) {
14072 my $oldval = C4::Context->preference('dontmerge');
14073 my $newval = $oldval ? 0 : 50;
14075 # Remove dontmerge, add AuthorityMergeLimit
14077 DELETE FROM systempreferences WHERE variable = 'dontmerge';
14080 INSERT IGNORE INTO systempreferences ( variable, value, options, explanation, type ) VALUES ('AuthorityMergeLimit','$newval',NULL,'Maximum number of biblio records updated immediately when an authority record has been modified.','integer');
14084 ALTER TABLE need_merge_authorities
14085 ADD COLUMN authid_new BIGINT AFTER authid,
14086 ADD COLUMN reportxml text AFTER authid_new,
14087 ADD COLUMN timestamp timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP;
14091 UPDATE need_merge_authorities SET authid_new=authid WHERE done <> 1
14094 SetVersion( $DBversion );
14095 if( $newval == 0 ) {
14096 print "NOTE: Since dontmerge was enabled, we have initialized AuthorityMergeLimit to 0 records. Please consider raising this value. This will allow for performing smaller merges directly and only postponing larger merges.\n";
14098 print "IMPORTANT NOTE: If you are not using a Debian package install, please verify that you no longer use misc/migration_tools/merge_authority.pl in your cron files AND add misc/cronjobs/merge_authorities.pl to cron now. This job is no longer optional! You need it to perform larger authority merges.\n";
14099 print "Upgrade to $DBversion done (Bug 9988 - Add AuthorityMergeLimit)\n";
14102 $DBversion = '16.12.00.024';
14103 if( CheckVersion( $DBversion ) ) {
14105 UPDATE systempreferences SET variable="NoticeBcc" WHERE variable="OverdueNoticeBcc";
14108 SetVersion( $DBversion );
14109 print "Upgrade to $DBversion done (Bug 14537 - The system preference 'OverdueNoticeBcc' is mis-named.)\n";
14112 $DBversion = '16.12.00.025';
14113 if( CheckVersion( $DBversion ) ) {
14115 INSERT IGNORE INTO systempreferences ( `variable`, `value`, `options`, `explanation`, `type` )
14116 VALUES ('UploadPurgeTemporaryFilesDays','',NULL,'If not empty, number of days used when automatically deleting temporary uploads','integer');
14119 my ( $cnt ) = $dbh->selectrow_array( "SELECT COUNT(*) FROM uploaded_files WHERE permanent IS NULL or permanent=0" );
14121 print "NOTE: You have $cnt temporary uploads. You could benefit from setting pref UploadPurgeTemporaryFilesDays now to automatically delete them.\n";
14124 SetVersion( $DBversion );
14125 print "Upgrade to $DBversion done (Bug 17669 - Introduce preference for deleting temporary uploads)\n";
14128 $DBversion = '16.12.00.026';
14129 if( CheckVersion( $DBversion ) ) {
14131 # In order to be overcomplete, we check if the situation is what we expect
14132 if( !index_exists( 'serialitems', 'PRIMARY' ) ) {
14133 if( index_exists( 'serialitems', 'serialitemsidx' ) ) {
14135 ALTER TABLE serialitems ADD PRIMARY KEY (itemnumber), DROP INDEX serialitemsidx;
14138 $dbh->do(q|ALTER TABLE serialitems ADD PRIMARY KEY (itemnumber)|);
14142 SetVersion( $DBversion );
14143 print "Upgrade to $DBversion done (Bug 18427 - Add a primary key to serialitems)\n";
14146 $DBversion = '16.12.00.027';
14147 if( CheckVersion( $DBversion ) ) {
14150 CREATE TABLE IF NOT EXISTS club_templates (
14151 id int(11) NOT NULL AUTO_INCREMENT,
14152 `name` tinytext NOT NULL,
14154 is_enrollable_from_opac tinyint(1) NOT NULL DEFAULT '0',
14155 is_email_required tinyint(1) NOT NULL DEFAULT '0',
14156 branchcode varchar(10) NULL DEFAULT NULL,
14157 date_created timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
14158 date_updated timestamp NULL DEFAULT NULL,
14159 is_deletable tinyint(1) NOT NULL DEFAULT '1',
14161 KEY ct_branchcode (branchcode),
14162 CONSTRAINT `club_templates_ibfk_1` FOREIGN KEY (branchcode) REFERENCES `branches` (branchcode) ON DELETE CASCADE ON UPDATE CASCADE
14163 ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
14167 CREATE TABLE IF NOT EXISTS clubs (
14168 id int(11) NOT NULL AUTO_INCREMENT,
14169 club_template_id int(11) NOT NULL,
14170 `name` tinytext NOT NULL,
14172 date_start date DEFAULT NULL,
14173 date_end date DEFAULT NULL,
14174 branchcode varchar(10) NULL DEFAULT NULL,
14175 date_created timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
14176 date_updated timestamp NULL DEFAULT NULL,
14178 KEY club_template_id (club_template_id),
14179 KEY branchcode (branchcode),
14180 CONSTRAINT clubs_ibfk_1 FOREIGN KEY (club_template_id) REFERENCES club_templates (id) ON DELETE CASCADE ON UPDATE CASCADE,
14181 CONSTRAINT clubs_ibfk_2 FOREIGN KEY (branchcode) REFERENCES branches (branchcode)
14182 ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
14186 CREATE TABLE IF NOT EXISTS club_enrollments (
14187 id int(11) NOT NULL AUTO_INCREMENT,
14188 club_id int(11) NOT NULL,
14189 borrowernumber int(11) NOT NULL,
14190 date_enrolled timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
14191 date_canceled timestamp NULL DEFAULT NULL,
14192 date_created timestamp NULL DEFAULT NULL,
14193 date_updated timestamp NULL DEFAULT NULL,
14194 branchcode varchar(10) NULL DEFAULT NULL,
14196 KEY club_id (club_id),
14197 KEY borrowernumber (borrowernumber),
14198 KEY branchcode (branchcode),
14199 CONSTRAINT club_enrollments_ibfk_1 FOREIGN KEY (club_id) REFERENCES clubs (id) ON DELETE CASCADE ON UPDATE CASCADE,
14200 CONSTRAINT club_enrollments_ibfk_2 FOREIGN KEY (borrowernumber) REFERENCES borrowers (borrowernumber) ON DELETE CASCADE ON UPDATE CASCADE,
14201 CONSTRAINT club_enrollments_ibfk_3 FOREIGN KEY (branchcode) REFERENCES branches (branchcode) ON DELETE SET NULL ON UPDATE CASCADE
14202 ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
14206 CREATE TABLE IF NOT EXISTS club_template_enrollment_fields (
14207 id int(11) NOT NULL AUTO_INCREMENT,
14208 club_template_id int(11) NOT NULL,
14209 `name` tinytext NOT NULL,
14211 authorised_value_category varchar(16) DEFAULT NULL,
14213 KEY club_template_id (club_template_id),
14214 CONSTRAINT club_template_enrollment_fields_ibfk_1 FOREIGN KEY (club_template_id) REFERENCES club_templates (id) ON DELETE CASCADE ON UPDATE CASCADE
14215 ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
14219 CREATE TABLE IF NOT EXISTS club_enrollment_fields (
14220 id int(11) NOT NULL AUTO_INCREMENT,
14221 club_enrollment_id int(11) NOT NULL,
14222 club_template_enrollment_field_id int(11) NOT NULL,
14223 `value` text NOT NULL,
14225 KEY club_enrollment_id (club_enrollment_id),
14226 KEY club_template_enrollment_field_id (club_template_enrollment_field_id),
14227 CONSTRAINT club_enrollment_fields_ibfk_1 FOREIGN KEY (club_enrollment_id) REFERENCES club_enrollments (id) ON DELETE CASCADE ON UPDATE CASCADE,
14228 CONSTRAINT club_enrollment_fields_ibfk_2 FOREIGN KEY (club_template_enrollment_field_id) REFERENCES club_template_enrollment_fields (id) ON DELETE CASCADE ON UPDATE CASCADE
14229 ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
14233 CREATE TABLE IF NOT EXISTS club_template_fields (
14234 id int(11) NOT NULL AUTO_INCREMENT,
14235 club_template_id int(11) NOT NULL,
14236 `name` tinytext NOT NULL,
14238 authorised_value_category varchar(16) DEFAULT NULL,
14240 KEY club_template_id (club_template_id),
14241 CONSTRAINT club_template_fields_ibfk_1 FOREIGN KEY (club_template_id) REFERENCES club_templates (id) ON DELETE CASCADE ON UPDATE CASCADE
14242 ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
14246 CREATE TABLE IF NOT EXISTS club_fields (
14247 id int(11) NOT NULL AUTO_INCREMENT,
14248 club_template_field_id int(11) NOT NULL,
14249 club_id int(11) NOT NULL,
14252 KEY club_template_field_id (club_template_field_id),
14253 KEY club_id (club_id),
14254 CONSTRAINT club_fields_ibfk_3 FOREIGN KEY (club_template_field_id) REFERENCES club_template_fields (id) ON DELETE CASCADE ON UPDATE CASCADE,
14255 CONSTRAINT club_fields_ibfk_4 FOREIGN KEY (club_id) REFERENCES clubs (id) ON DELETE CASCADE ON UPDATE CASCADE
14256 ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
14260 INSERT IGNORE INTO userflags (bit, flag, flagdesc, defaulton) VALUES (21, 'clubs', 'Patron clubs', '0');
14264 INSERT IGNORE INTO permissions (module_bit, code, description) VALUES
14265 (21, 'edit_templates', 'Create and update club templates'),
14266 (21, 'edit_clubs', 'Create and update clubs'),
14267 (21, 'enroll', 'Enroll patrons in clubs')
14271 SetVersion( $DBversion );
14272 print "Upgrade to $DBversion done (Bug 12461 - Add patron clubs feature)\n";
14275 $DBversion = '16.12.00.028';
14276 if( CheckVersion( $DBversion ) ) {
14278 UPDATE systempreferences SET options = 'us|de|fr' WHERE variable = 'AddressFormat';
14281 SetVersion( $DBversion );
14282 print "Upgrade to $DBversion done (Bug 18110 - Adds FR to the syspref AddressFormat)\n";
14285 $DBversion = '16.12.00.029';
14286 if( CheckVersion( $DBversion ) ) {
14287 unless( column_exists( 'issues', 'note' ) ) {
14288 $dbh->do(q|ALTER TABLE issues ADD note mediumtext default NULL AFTER onsite_checkout|);
14290 unless( column_exists( 'issues', 'notedate' ) ) {
14291 $dbh->do(q|ALTER TABLE issues ADD notedate datetime default NULL AFTER note|);
14293 unless( column_exists( 'old_issues', 'note' ) ) {
14294 $dbh->do(q|ALTER TABLE old_issues ADD note mediumtext default NULL AFTER onsite_checkout|);
14296 unless( column_exists( 'old_issues', 'notedate' ) ) {
14297 $dbh->do(q|ALTER TABLE old_issues ADD notedate datetime default NULL AFTER note|);
14301 INSERT IGNORE INTO letter (`module`, `code`, `branchcode`, `name`, `is_html`, `title`, `content`, `message_transport_type`)
14302 VALUES ('circulation', 'CHECKOUT_NOTE', '', 'Checkout note on item set by patron', '0', 'Checkout note', '<<borrowers.firstname>> <<borrowers.surname>> has added a note to the item <<biblio.title>> - <<biblio.author>> (<<biblio.biblionumber>>).','email');
14306 INSERT IGNORE INTO systempreferences (`variable`, `value`, `options`, `explanation`,`type`)
14307 VALUES ('AllowCheckoutNotes', '0', NULL, 'Allow patrons to submit notes about checked out items.','YesNo');
14310 SetVersion( $DBversion );
14311 print "Upgrade to $DBversion done (Bug 14224: Add column issues.note and issues.notedate)\n";
14314 $DBversion = '16.12.00.030';
14315 if( CheckVersion( $DBversion ) ) {
14316 unless( column_exists( 'issuingrules', 'no_auto_renewal_after_hard_limit' ) ) {
14318 ALTER TABLE issuingrules ADD COLUMN no_auto_renewal_after_hard_limit DATE DEFAULT NULL AFTER no_auto_renewal_after;
14322 SetVersion( $DBversion );
14323 print "Upgrade to $DBversion done (Bug 16344 - Add a circ rule to limit the auto renewals given a specific date)\n";
14326 $DBversion = '16.12.00.031';
14327 if( CheckVersion( $DBversion ) ) {
14328 if ( !index_exists( 'biblioitems', 'timestamp' ) ) {
14329 $dbh->do("ALTER TABLE biblioitems ADD KEY `timestamp` (`timestamp`);");
14331 if ( !index_exists( 'deletedbiblioitems', 'timestamp' ) ) {
14332 $dbh->do("ALTER TABLE deletedbiblioitems ADD KEY `timestamp` (`timestamp`);");
14334 if ( !index_exists( 'items', 'timestamp' ) ) {
14335 $dbh->do("ALTER TABLE items ADD KEY `timestamp` (`timestamp`);");
14337 if ( !index_exists( 'deleteditems', 'timestamp' ) ) {
14338 $dbh->do("ALTER TABLE deleteditems ADD KEY `timestamp` (`timestamp`);");
14341 SetVersion( $DBversion );
14342 print "Upgrade to $DBversion done (Bug 15108: OAI-PMH provider improvements)\n";
14345 $DBversion = '16.12.00.032';
14346 if( CheckVersion( $DBversion ) ) {
14347 require Koha::Calendar;
14350 INSERT IGNORE INTO systempreferences (variable,value,explanation,options,type)
14351 VALUES ('ExcludeHolidaysFromMaxPickUpDelay', '0', 'If ON, reserves max pickup delay takes into account the closed days.', NULL, 'Integer');
14354 my $waiting_holds = $dbh->selectall_arrayref(q|
14355 SELECT expirationdate, waitingdate, branchcode
14357 WHERE found = 'W' AND priority = 0
14358 |, { Slice => {} });
14359 my $update_sth = $dbh->prepare(q|
14361 SET expirationdate = ?
14362 WHERE reserve_id = ?
14364 my $max_pickup_delay = C4::Context->preference("ReservesMaxPickUpDelay");
14365 for my $hold ( @$waiting_holds ) {
14367 my $requested_expiration;
14368 if ($hold->{expirationdate}) {
14369 $requested_expiration = dt_from_string($hold->{expirationdate});
14372 my $expirationdate = dt_from_string($hold->{waitingdate});
14373 if ( C4::Context->preference("ExcludeHolidaysFromMaxPickUpDelay") ) {
14374 my $calendar = Koha::Calendar->new( branchcode => $hold->{branchcode}, days_mode => C4::Context->preference('useDaysMode') );
14375 $expirationdate = $calendar->days_forward( $expirationdate, $max_pickup_delay );
14377 $expirationdate->add( days => $max_pickup_delay );
14380 my $cmp = $requested_expiration ? DateTime->compare($requested_expiration, $expirationdate) : 0;
14381 $update_sth->execute($cmp == -1 ? $requested_expiration->ymd : $expirationdate->ymd, $hold->{reserve_id});
14384 SetVersion( $DBversion );
14385 print "Upgrade to $DBversion done (Bug 12063 - Update reserves.expirationdate)\n";
14388 $DBversion = '16.12.00.033';
14389 if( CheckVersion( $DBversion ) ) {
14391 if( !column_exists( 'letter', 'lang' ) ) {
14392 $dbh->do( "ALTER TABLE letter ADD COLUMN lang VARCHAR(25) NOT NULL DEFAULT 'default' AFTER message_transport_type" );
14395 if( !column_exists( 'borrowers', 'lang' ) ) {
14396 $dbh->do( "ALTER TABLE borrowers ADD COLUMN lang VARCHAR(25) NOT NULL DEFAULT 'default' AFTER lastseen" );
14397 $dbh->do( "ALTER TABLE deletedborrowers ADD COLUMN lang VARCHAR(25) NOT NULL DEFAULT 'default' AFTER lastseen" );
14400 # Add test on existene of this key
14401 $dbh->do( "ALTER TABLE message_transports DROP FOREIGN KEY message_transports_ibfk_3 ");
14402 $dbh->do( "ALTER TABLE letter DROP PRIMARY KEY ");
14403 $dbh->do( "ALTER TABLE letter ADD PRIMARY KEY (`module`, `code`, `branchcode`, `message_transport_type`, `lang`) ");
14405 $dbh->do( "INSERT IGNORE INTO systempreferences (variable,value,options,explanation,type)
14406 VALUES ('TranslateNotices', '0', NULL, 'Allow notices to be translated', 'YesNo') ");
14408 SetVersion( $DBversion );
14409 print "Upgrade to $DBversion done (Bug 17762 - Add columns letter.lang and borrowers.lang to allow translation of notices)\n";
14412 $DBversion = '16.12.00.034';
14413 if( CheckVersion( $DBversion ) ) {
14415 INSERT IGNORE INTO systempreferences ( `variable`, `value`, `options`, `explanation`, `type` )
14416 VALUES ('OPACFineNoRenewalsBlockAutoRenew','0','','Block/Allow auto renewals if the patron owe more than OPACFineNoRenewals','YesNo')
14419 SetVersion( $DBversion );
14420 print "Upgrade to $DBversion done (Bug 15582 - Ability to block auto renewals if the OPACFineNoRenewals amount is reached)\n";
14423 $DBversion = '16.12.00.035';
14424 if( CheckVersion( $DBversion ) ) {
14425 if( !column_exists( 'issues', 'auto_renew_error' ) ) {
14427 ALTER TABLE issues ADD COLUMN auto_renew_error VARCHAR(32) DEFAULT NULL AFTER auto_renew;
14431 if( !column_exists( 'old_issues', 'auto_renew_error' ) ) {
14433 ALTER TABLE old_issues ADD COLUMN auto_renew_error VARCHAR(32) DEFAULT NULL AFTER auto_renew;
14438 INSERT INTO letter (module, code, name, title, content, message_transport_type) VALUES ('circulation', 'AUTO_RENEWALS', 'Notification of automatic renewal', 'Automatic renewal notice',
14439 "Dear [% borrower.firstname %] [% borrower.surname %],
14440 [% IF checkout.auto_renew_error %]
14441 The following item, [% biblio.title %], has not been renewed because:
14442 [% IF checkout.auto_renew_error == 'too_many' %]
14443 You have reached the maximum number of renewals possible.
14444 [% ELSIF checkout.auto_renew_error == 'on_reserve' %]
14445 This item is on hold for another patron.
14446 [% ELSIF checkout.auto_renew_error == 'restriction' %]
14447 You are currently restricted.
14448 [% ELSIF checkout.auto_renew_error == 'overdue' %]
14449 You have overdue items.
14450 [% ELSIF checkout.auto_renew_error == 'auto_too_late' %]
14451 It\'s too late to renew this item.
14452 [% ELSIF checkout.auto_renew_error == 'auto_too_much_oweing' %]
14453 Your total unpaid fines are too high.
14456 The following item, [% biblio.title %], has correctly been renewed and is now due on [% checkout.date_due | $KohaDates as_due_date => 1 %]
14457 [% END %]", 'email');
14460 SetVersion( $DBversion );
14461 print "Upgrade to $DBversion done (Bug 15705 - Notify the user on auto renewing)\n";
14464 $DBversion = '16.12.00.036';
14465 if( CheckVersion( $DBversion ) ) {
14467 INSERT IGNORE INTO systempreferences (`variable`, `value`, `options`, `explanation`, `type`)
14468 VALUES ('NumSavedReports', '20', NULL, 'By default, show this number of saved reports.', 'Integer');
14471 SetVersion( $DBversion );
14472 print "Upgrade to $DBversion done (Bug 17465 - Add a System Preference to control number of Saved Reports displayed)\n";
14475 $DBversion = '16.12.00.037';
14476 if( CheckVersion( $DBversion ) ) {
14478 INSERT IGNORE INTO systempreferences (`variable`, `value`, `options`, `explanation`, `type`)
14479 VALUES ('FailedLoginAttempts','','','Number of login attempts before lockout the patron account','Integer');
14482 unless( column_exists( 'borrowers', 'login_attempts' ) ) {
14484 ALTER TABLE borrowers ADD COLUMN login_attempts INT(4) DEFAULT 0 AFTER lastseen
14487 ALTER TABLE deletedborrowers ADD COLUMN login_attempts INT(4) DEFAULT 0 AFTER lastseen
14491 SetVersion( $DBversion );
14492 print "Upgrade to $DBversion done (Bug 18314 - Add FailedLoginAttempts and borrowers.login_attempts)\n";
14495 $DBversion = '16.12.00.038';
14496 if( CheckVersion( $DBversion ) ) {
14498 INSERT IGNORE INTO systempreferences ( `variable`, `value`, `options`, `explanation`, `type` ) VALUES
14499 ('ExportRemoveFields','',NULL,'List of fields for non export in circulation.pl (separated by a space)','Free');
14502 SetVersion( $DBversion );
14503 print "Upgrade to $DBversion done (Bug 18663 - Missing db update for ExportRemoveFields)\n";
14506 $DBversion = '16.12.00.039';
14507 if( CheckVersion( $DBversion ) ) {
14509 INSERT IGNORE INTO systempreferences ( `variable`, `value`, `options`, `explanation`, `type` ) VALUES
14510 ('TalkingTechItivaPhoneNotification','0',NULL,'If ON, enables Talking Tech I-tiva phone notifications','YesNo');
14513 SetVersion( $DBversion );
14514 print "Upgrade to $DBversion done (Bug 18600 - Missing db update for TalkingTechItivaPhoneNotification)\n";
14517 $DBversion = '17.05.00.000';
14518 if( CheckVersion( $DBversion ) ) {
14520 SetVersion( $DBversion );
14521 print "Upgrade to $DBversion done (Koha 17.05)\n";
14524 $DBversion = '17.06.00.000';
14525 if( CheckVersion( $DBversion ) ) {
14526 SetVersion( $DBversion );
14527 print "Upgrade to $DBversion done (He pai ake te iti i te kore)\n";
14530 $DBversion = '17.06.00.001';
14531 if( CheckVersion( $DBversion ) ) {
14533 unless ( column_exists( 'export_format', 'used_for' ) ) {
14534 $dbh->do(q|ALTER TABLE export_format ADD used_for varchar(255) DEFAULT 'export_records' AFTER type|);
14536 $dbh->do(q|UPDATE export_format SET used_for = 'late_issues' WHERE type = 'sql'|);
14537 $dbh->do(q|UPDATE export_format SET used_for = 'export_records' WHERE type = 'marc'|);
14539 SetVersion( $DBversion );
14540 print "Upgrade to $DBversion done (Bug 8612 - Add new column export_format.used_for)\n";
14543 $DBversion = '17.06.00.002';
14544 if ( CheckVersion($DBversion) ) {
14546 unless ( column_exists('virtualshelves', 'allow_change_from_owner' ) ) {
14548 ALTER TABLE virtualshelves
14549 ADD COLUMN allow_change_from_owner tinyint(1) default 1,
14550 ADD COLUMN allow_change_from_others tinyint(1) default 0
14554 # Since we had no readonly lists, change_from_owner is set to true.
14555 # When adding or delete_other was granted, change_from_others is true.
14556 # Note: In my opinion the best choice; there is no exact match.
14558 UPDATE virtualshelves
14559 SET allow_change_from_owner = 1,
14560 allow_change_from_others = CASE WHEN allow_add=1 OR allow_delete_other=1 THEN 1 ELSE 0 END
14563 # Remove the old columns
14565 ALTER TABLE virtualshelves
14566 DROP COLUMN allow_add,
14567 DROP COLUMN allow_delete_own,
14568 DROP COLUMN allow_delete_other
14572 SetVersion($DBversion);
14573 print "Upgrade to $DBversion done (Bug 18228 - Alter table virtualshelves to simplify permissions)\n";
14576 $DBversion = '17.06.00.003';
14577 if ( CheckVersion($DBversion) ) {
14579 # Fetch all auth types
14580 my $authtypes = $dbh->selectcol_arrayref(q|SELECT authtypecode FROM auth_types|);
14582 if ( grep { $_ eq 'Default' } @$authtypes ) {
14584 # If this exists as an authtypecode, we don't do anything
14587 # Replace the incorrect Default by empty string
14589 UPDATE auth_header SET authtypecode='' WHERE authtypecode='Default'
14593 SetVersion($DBversion);
14594 print "Upgrade to $DBversion done (Bug 18801 - Update incorrect Default auth type codes)\n";
14597 $DBversion = '17.06.00.004';
14598 if( CheckVersion( $DBversion ) ) {
14600 INSERT IGNORE INTO systempreferences ( `variable`, `value`, `options`, `explanation`, `type` ) VALUES
14601 ('GoogleOpenIDConnectAutoRegister', '0',NULL,' Google OpenID Connect logins to auto-register patrons.','YesNo'),
14602 ('GoogleOpenIDConnectDefaultCategory','','','This category code will be used to create Google OpenID Connect patrons.','Textarea'),
14603 ('GoogleOpenIDConnectDefaultBranch', '','','This branch code will be used to create Google OpenID Connect patrons.','Textarea');
14606 SetVersion( $DBversion );
14607 print "Upgrade to $DBversion done (Bug 16892: Add automatic patron registration via OAuth2 login)\n";
14610 $DBversion = '17.06.00.005';
14611 if( CheckVersion( $DBversion ) ) {
14613 INSERT IGNORE INTO systempreferences (`variable`, `value`, `options`, `explanation`, `type`) VALUES ('StaffLangSelectorMode','footer','top|both|footer','Select the location to display the language selector in staff client','Choice')
14616 SetVersion( $DBversion );
14617 print "Upgrade to $DBversion done (Bug 18718 - Language selector in staff header menu similar to OPAC )\n";
14620 $DBversion = '17.06.00.006';
14621 if( CheckVersion( $DBversion ) ) {
14622 print q{WARNING: Bug 18811 fixed an inconsistency in the visibility settings for authority frameworks. It is recommended that you run script misc/maintenance/auth_show_hidden_data.pl to check if you have data in hidden fields and adjust your frameworks accordingly to prevent data loss when editing such records.};
14625 SetVersion( $DBversion );
14626 print "Upgrade to $DBversion done (Bug 18811 - Visibility settings inconsistent between framework and authority editor)\n";
14629 $DBversion = '17.06.00.007';
14630 if( CheckVersion( $DBversion ) ) {
14631 if( !column_exists( 'branches', 'marcorgcode' ) ) {
14632 $dbh->do( "ALTER TABLE branches ADD COLUMN marcorgcode VARCHAR(16) default NULL AFTER geolocation" );
14635 SetVersion( $DBversion );
14636 print "Upgrade to $DBversion done (Bug 10132 - MARCOrgCode on branch level (branches.marcorgcode))\n";
14639 $DBversion = '17.06.00.008';
14640 if( CheckVersion( $DBversion ) ) {
14641 unless ( column_exists( 'borrowers', 'date_renewed' ) ) {
14643 ALTER TABLE borrowers ADD COLUMN date_renewed DATE NULL DEFAULT NULL AFTER dateexpiry;
14647 unless ( column_exists( 'deletedborrowers', 'date_renewed' ) ) {
14649 ALTER TABLE deletedborrowers ADD COLUMN date_renewed DATE NULL DEFAULT NULL AFTER dateexpiry;
14653 unless ( column_exists( 'borrower_modifications', 'date_renewed' ) ) {
14655 ALTER TABLE borrower_modifications ADD COLUMN date_renewed DATE NULL DEFAULT NULL AFTER dateexpiry;
14659 SetVersion( $DBversion );
14660 print "Upgrade to $DBversion done (Bug 6758 - Capture membership renewal date for reporting purposes (borrowers.date_renewed))\n";
14663 $DBversion = '17.06.00.009';
14664 if( CheckVersion( $DBversion ) ) {
14666 ALTER TABLE borrowers MODIFY COLUMN login_attempts int(4) DEFAULT 0 AFTER lang;
14669 ALTER TABLE deletedborrowers MODIFY COLUMN login_attempts int(4) DEFAULT 0 AFTER lang;
14672 SetVersion( $DBversion );
14673 print "Upgrade to $DBversion done (Bug 19344 - Reorder lang and login_attempts in the [deleted]borrowers tables)\n";
14676 $DBversion = '17.06.00.010';
14677 if ( CheckVersion($DBversion) ) {
14679 INSERT IGNORE INTO systempreferences ( `variable`, `value`, `options`, `explanation`, `type` )
14681 'DefaultCountryField008','','',
14682 'Fill in the default country code for field 008 Range 15-17 of MARC21 - Place of publication, production, or execution. See <a href=\"http://www.loc.gov/marc/countries/countries_code.html\">MARC Code List for Countries</a>','Free')
14684 SetVersion($DBversion);
14685 print "Upgrade to $DBversion done (Bug 13912 - System preference for default place of publication (country code) for field 008, range 15-17)\n";
14688 $DBversion = '17.06.00.011';
14689 if ( CheckVersion($DBversion) ) {
14690 # Drop index that might exist because of bug 5337
14691 if( index_exists('biblioitems', 'ean')) {
14692 $dbh->do(q{ ALTER TABLE biblioitems DROP INDEX ean });
14694 if( index_exists('deletedbiblioitems', 'ean')) {
14695 $dbh->do(q{ ALTER TABLE deletedbiblioitems DROP INDEX ean });
14698 # Change data type of column
14699 $dbh->do(q{ ALTER TABLE biblioitems MODIFY COLUMN ean MEDIUMTEXT default NULL });
14700 $dbh->do(q{ ALTER TABLE deletedbiblioitems MODIFY COLUMN ean MEDIUMTEXT default NULL });
14703 $dbh->do(q{ ALTER TABLE biblioitems ADD INDEX ean ( ean(255) )});
14704 $dbh->do(q{ ALTER TABLE deletedbiblioitems ADD INDEX ean ( ean(255 ) )});
14706 SetVersion($DBversion);
14707 print "Upgrade to $DBversion done (Bug 13766 - Make ean mediumtext and add ean indexes)\n";
14710 $DBversion = '17.06.00.012';
14711 if( CheckVersion( $DBversion ) ) {
14712 my $where = q|host='clio-db.cc.columbia.edu' AND port=7090|;
14713 my $sql = "SELECT COUNT(*) FROM z3950servers WHERE $where";
14714 my ( $cnt ) = $dbh->selectrow_array( $sql );
14716 $dbh->do( "DELETE FROM z3950servers WHERE $where" );
14717 print "Removed $cnt Z39.50 target(s) for Columbia University\n";
14720 SetVersion( $DBversion );
14721 print "Upgrade to $DBversion done (Bug 19043 - Z39.50 target for Columbia University is no longer publicly available.)\n";
14724 $DBversion = '17.06.00.013';
14725 if( CheckVersion( $DBversion ) ) {
14726 $dbh->do( "UPDATE systempreferences SET value = CONCAT('http://', value) WHERE variable = 'staffClientBaseURL' AND value <> '' AND value NOT LIKE 'http%'" );
14728 my ( $staffClientBaseURL_used_in_notices ) = $dbh->selectrow_array(q|
14729 SELECT COUNT(*) FROM letter where content like "%staffClientBaseURL%"
14731 if ( $staffClientBaseURL_used_in_notices ) {
14732 warn "\tYou may need to update one or more notice templates if they contain 'staffClientBaseURL'\n";
14735 SetVersion( $DBversion );
14736 print "Upgrade to $DBversion done (Bug 16401 - fix potentialy bad set staffClientBaseURL preference)\n";
14739 $DBversion = '17.06.00.014';
14740 if( CheckVersion( $DBversion ) ) {
14741 unless( column_exists('aqbasket','create_items') ){
14743 ALTER TABLE aqbasket
14744 ADD COLUMN create_items ENUM('ordering', 'receiving', 'cataloguing') default NULL AFTER is_standing
14748 SetVersion( $DBversion );
14749 print "Upgrade to $DBversion done (Bug 15685 - Allow creation of items (AcqCreateItem) to be customizable per-basket)\n";
14752 $DBversion = '17.06.00.015';
14753 if( CheckVersion( $DBversion ) ) {
14755 INSERT IGNORE INTO systempreferences (`variable`, `value`, `options`, `explanation`, `type`) VALUES
14756 ('SelfCheckoutByLogin','0',NULL,'Have patrons login into the web-based self checkout system with their username/password or their cardnumber','YesNo')
14759 SetVersion( $DBversion );
14760 print "Upgrade to $DBversion done (Bug 19186 - Insert system preference SelfCheckoutByLogin if missing)\n";
14763 $DBversion = '17.06.00.016';
14764 if( CheckVersion( $DBversion ) ) {
14766 INSERT IGNORE INTO systempreferences (`variable`, `value`, `options`, `explanation`, `type`)
14767 VALUES ('RequireStrongPassword','0','','Require a strong login password for staff and patrons','YesNo');
14770 SetVersion( $DBversion );
14771 print "Upgrade to $DBversion done (Bug 18298 - Allow enforcing password complexity (system preference RequireStrongPassword))\n";
14774 $DBversion = '17.06.00.017';
14775 if( CheckVersion( $DBversion ) ) {
14776 unless (TableExists('account_offsets')) {
14778 DROP TABLE IF EXISTS `accountoffsets`;
14782 CREATE TABLE IF NOT EXISTS `account_offset_types` (
14783 `type` varchar(16) NOT NULL, -- The type of offset this is
14784 PRIMARY KEY (`type`)
14785 ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
14789 CREATE TABLE IF NOT EXISTS `account_offsets` (
14790 `id` int(11) NOT NULL auto_increment, -- unique identifier for each offset
14791 `credit_id` int(11) NULL DEFAULT NULL, -- The id of the accountline the increased the patron's balance
14792 `debit_id` int(11) NULL DEFAULT NULL, -- The id of the accountline that decreased the patron's balance
14793 `type` varchar(16) NOT NULL, -- The type of offset this is
14794 `amount` decimal(26,6) NOT NULL, -- The amount of the change
14795 `created_on` timestamp NOT NULL default CURRENT_TIMESTAMP,
14796 PRIMARY KEY (`id`),
14797 CONSTRAINT `account_offsets_ibfk_p` FOREIGN KEY (`credit_id`) REFERENCES `accountlines` (`accountlines_id`) ON DELETE CASCADE ON UPDATE CASCADE,
14798 CONSTRAINT `account_offsets_ibfk_f` FOREIGN KEY (`debit_id`) REFERENCES `accountlines` (`accountlines_id`) ON DELETE CASCADE ON UPDATE CASCADE,
14799 CONSTRAINT `account_offsets_ibfk_t` FOREIGN KEY (`type`) REFERENCES `account_offset_types` (`type`) ON DELETE CASCADE ON UPDATE CASCADE
14800 ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
14804 INSERT IGNORE INTO account_offset_types ( type ) VALUES
14808 ('Processing Fee'),
14810 ('Reverse Payment'),
14819 SetVersion( $DBversion );
14820 print "Upgrade to $DBversion done (Bug 14826 - Resurrect account offsets table (Add new tables account_offsets and account_offset_types))\n";
14823 $DBversion = '17.06.00.018';
14824 if( CheckVersion( $DBversion ) ) {
14826 INSERT IGNORE INTO systempreferences (variable,value,explanation,type) VALUES ('useDefaultReplacementCost',0,'default replacement cost defined in item type','YesNo');
14829 INSERT IGNORE INTO systempreferences (variable,value,explanation,type) VALUES ('ProcessingFeeNote','','Set the text to be recorded in the column note, table accountlines when the processing fee (defined in item type) is applied','textarea');
14832 ALTER TABLE `itemtypes` MODIFY COLUMN `rentalcharge` DECIMAL(28,6) NULL DEFAULT NULL;
14834 unless ( column_exists( 'itemtypes', 'defaultreplacecost' ) ) {
14836 ALTER TABLE `itemtypes` ADD `defaultreplacecost` DECIMAL(28,6) NULL DEFAULT NULL AFTER `rentalcharge`;
14839 unless ( column_exists( 'itemtypes', 'processfee' ) ) {
14841 ALTER TABLE `itemtypes` ADD `processfee` DECIMAL(28,6) NULL DEFAULT NULL AFTER `defaultreplacecost`;
14845 SetVersion( $DBversion );
14846 print "Upgrade to $DBversion done (Bug 12768 - Insert system preferences useDefaultReplacementCost and ProcessingFeeNote + Add new columns defaultreplacecost and processfee to the itemtypes table)\n";
14849 $DBversion = '17.06.00.019';
14850 if( CheckVersion( $DBversion ) ) {
14852 INSERT IGNORE INTO account_offset_types ( type ) VALUES ( 'Processing Fee' );
14855 SetVersion( $DBversion );
14856 print "Upgrade to $DBversion done (Bug 12768 - Add 'Processing Fee' to the account_offset_types table if missing)\n";
14859 $DBversion = '17.06.00.020';
14860 if( CheckVersion( $DBversion ) ) {
14862 UPDATE systempreferences
14864 variable='OpacLocationOnDetail',
14865 options='holding|home|both|column',
14866 explanation='In the OPAC detail, display the shelving location on its own column or under a library columns.'
14868 variable='OpacLocationBranchToDisplayShelving'
14871 SetVersion( $DBversion );
14872 print "Upgrade to $DBversion done (Bug 19028: Add 'shelving location' to holdings table in detail page (Rename syspref OpacLocationBranchToDisplayShelving with OpacLocationOnDetail))\n";
14875 $DBversion = '17.06.00.021';
14876 if( CheckVersion( $DBversion ) ) {
14878 INSERT IGNORE INTO systempreferences (`variable`, `value`, `options`, `explanation`, `type` ) VALUES ('SCOMainUserBlock','','70|10','Add a block of HTML that will display on the self checkout screen','Textarea')
14881 SetVersion( $DBversion );
14882 print "Upgrade to $DBversion done (Bug 17381 - Add system preference SCOMainUserBlock)\n";
14885 $DBversion = '17.06.00.022';
14886 if( CheckVersion( $DBversion ) ) {
14887 my $hide_barcode = C4::Context->preference('OPACShowBarcode') ? 0 : 1;
14889 DELETE FROM systempreferences
14891 variable='OPACShowBarcode'
14894 # Configure column visibility if it isn't
14896 INSERT IGNORE INTO columns_settings
14897 (module,page,tablename,columnname,cannot_be_toggled,is_hidden)
14899 ('opac','biblio-detail','holdingst','item_barcode',0,?)
14900 }, undef, $hide_barcode);
14902 SetVersion( $DBversion );
14903 print "Upgrade to $DBversion done (Bug 19038: Remove OPACShowBarcode syspref)\n";
14906 $DBversion = '17.06.00.023';
14907 if( CheckVersion( $DBversion ) ) {
14909 INSERT IGNORE INTO systempreferences ( `variable`, `value`, `options`, `explanation`, `type` ) VALUES
14910 ('MarkLostItemsAsReturned','1','','Mark items as returned when flagged as lost','YesNo');
14913 SetVersion( $DBversion );
14914 print "Upgrade to $DBversion done (Bug 12363 - Add system preference MarkLostItemsAsReturned)\n";
14917 $DBversion = '17.06.00.024';
14918 if( CheckVersion( $DBversion ) ) {
14920 INSERT IGNORE INTO systempreferences (`variable`,`value`,`options`,`explanation`,`type`) VALUES
14921 ('OPACUserSummary', 1, NULL, "Show the summary of a logged in user's checkouts, overdues, holds and fines on the mainpage", 'YesNo');
14924 SetVersion( $DBversion );
14925 print "Upgrade to $DBversion done (Bug 2093 - Add system preference OPACUserSummary)\n";
14928 $DBversion = '17.06.00.025';
14929 if( CheckVersion( $DBversion ) ) {
14931 ALTER TABLE borrowers MODIFY cardnumber varchar(32);
14934 ALTER TABLE borrower_modifications MODIFY cardnumber varchar(32);
14937 ALTER TABLE deletedborrowers MODIFY cardnumber varchar(32);
14940 ALTER TABLE pending_offline_operations MODIFY cardnumber varchar(32);
14943 ALTER TABLE tmp_holdsqueue MODIFY cardnumber varchar(32);
14946 SetVersion( $DBversion );
14947 print "Upgrade to $DBversion done (Bug 13178 - Increase cardnumber fields to VARCHAR(32))\n";
14950 $DBversion = '17.06.00.026';
14951 if( CheckVersion( $DBversion ) ) {
14953 INSERT IGNORE INTO systempreferences ( `variable`, `value`, `options`, `explanation`, `type` ) VALUES
14954 ('BlockReturnOfLostItems','0','0','If enabled, items that are marked as lost cannot be returned.','YesNo');
14957 SetVersion( $DBversion );
14958 print "Upgrade to $DBversion done (Bug 10748 - Add system preference BlockReturnOfLostItems)\n";
14961 $DBversion = '17.06.00.027';
14962 if( CheckVersion( $DBversion ) ) {
14963 if ( !column_exists( 'statistics', 'location' ) ) {
14964 $dbh->do('ALTER TABLE statistics ADD COLUMN location VARCHAR(80) default NULL AFTER itemtype');
14967 SetVersion($DBversion);
14968 print "Upgrade to $DBversion done (Bug 18882 - Add location code to statistics table for checkouts and renewals)\n";
14971 $DBversion = '17.06.00.028';
14972 if( CheckVersion( $DBversion ) ) {
14973 if ( !TableExists( 'illrequests' ) ) {
14975 CREATE TABLE illrequests (
14976 illrequest_id serial PRIMARY KEY, -- ILL request number
14977 borrowernumber integer DEFAULT NULL, -- Patron associated with request
14978 biblio_id integer DEFAULT NULL, -- Potential bib linked to request
14979 branchcode varchar(50) NOT NULL, -- The branch associated with the request
14980 status varchar(50) DEFAULT NULL, -- Current Koha status of request
14981 placed date DEFAULT NULL, -- Date the request was placed
14982 replied date DEFAULT NULL, -- Last API response
14983 updated timestamp DEFAULT CURRENT_TIMESTAMP -- Last modification to request
14984 ON UPDATE CURRENT_TIMESTAMP,
14985 completed date DEFAULT NULL, -- Date the request was completed
14986 medium varchar(30) DEFAULT NULL, -- The Koha request type
14987 accessurl varchar(500) DEFAULT NULL, -- Potential URL for accessing item
14988 cost varchar(20) DEFAULT NULL, -- Cost of request
14989 notesopac text DEFAULT NULL, -- Patron notes attached to request
14990 notesstaff text DEFAULT NULL, -- Staff notes attached to request
14991 orderid varchar(50) DEFAULT NULL, -- Backend id attached to request
14992 backend varchar(20) DEFAULT NULL, -- The backend used to create request
14993 CONSTRAINT `illrequests_bnfk`
14994 FOREIGN KEY (`borrowernumber`)
14995 REFERENCES `borrowers` (`borrowernumber`)
14996 ON UPDATE CASCADE ON DELETE CASCADE,
14997 CONSTRAINT `illrequests_bcfk_2`
14998 FOREIGN KEY (`branchcode`)
14999 REFERENCES `branches` (`branchcode`)
15000 ON UPDATE CASCADE ON DELETE CASCADE
15001 ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
15005 if ( !TableExists( 'illrequestattributes' ) ) {
15007 CREATE TABLE illrequestattributes (
15008 illrequest_id bigint(20) unsigned NOT NULL, -- ILL request number
15009 type varchar(200) NOT NULL, -- API ILL property name
15010 value text NOT NULL, -- API ILL property value
15011 PRIMARY KEY (`illrequest_id`,`type`),
15012 CONSTRAINT `illrequestattributes_ifk`
15013 FOREIGN KEY (illrequest_id)
15014 REFERENCES `illrequests` (`illrequest_id`)
15015 ON UPDATE CASCADE ON DELETE CASCADE
15016 ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
15020 # System preferences
15022 INSERT IGNORE INTO systempreferences (variable,value,explanation,options,type) VALUES
15023 ('ILLModule','0','If ON, enables the interlibrary loans module.','','YesNo');
15027 INSERT IGNORE INTO systempreferences (variable,value,explanation,options,type) VALUES
15028 ('ILLModuleCopyrightClearance','','70|10','Enter text to enable the copyright clearance stage of request creation. Text will be displayed','Textarea');
15032 INSERT IGNORE INTO userflags (bit,flag,flagdesc,defaulton) VALUES
15033 (22,'ill','The Interlibrary Loans Module',0);
15036 SetVersion( $DBversion );
15037 print "Upgrade to $DBversion done (Bug 7317 - Add an Interlibrary Loan Module to Circulation and OPAC)\n";
15040 $DBversion = '17.11.00.000';
15041 if( CheckVersion( $DBversion ) ) {
15042 SetVersion( $DBversion );
15043 print "Upgrade to $DBversion done (Koha 17.11)\n";
15046 $DBversion = '17.12.00.000';
15047 if( CheckVersion( $DBversion ) ) {
15048 SetVersion( $DBversion );
15049 print "Upgrade to $DBversion done (Tē tōia, tē haumatia)\n";
15052 $DBversion = '17.12.00.001';
15053 if( CheckVersion( $DBversion ) ) {
15054 foreach my $table (qw(biblio_metadata deletedbiblio_metadata)) {
15055 if (!column_exists($table, 'timestamp')) {
15057 ALTER TABLE `$table`
15058 ADD COLUMN `timestamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP AFTER `metadata`,
15059 ADD KEY `timestamp` (`timestamp`)
15062 UPDATE $table metadata
15063 LEFT JOIN biblioitems ON (biblioitems.biblionumber = metadata.biblionumber)
15064 LEFT JOIN biblio ON (biblio.biblionumber = metadata.biblionumber)
15065 SET metadata.timestamp = GREATEST(biblioitems.timestamp, biblio.timestamp);
15070 SetVersion( $DBversion );
15071 print "Upgrade to $DBversion done (Bug 19724 - Add [deleted]biblio_metadata.timestamp)\n";
15074 $DBversion = '17.12.00.002';
15075 if( CheckVersion( $DBversion ) ) {
15077 my $msss = $dbh->selectall_arrayref(q|
15078 SELECT kohafield, tagfield, tagsubfield, frameworkcode
15079 FROM marc_subfield_structure
15080 WHERE frameworkcode != ''
15081 |, { Slice => {} });
15084 my $sth = $dbh->prepare(q|
15086 FROM marc_subfield_structure
15087 WHERE frameworkcode = ''
15089 AND tagsubfield = ?
15093 for my $mss ( @$msss ) {
15094 $sth->execute($mss->{tagfield}, $mss->{tagsubfield} );
15095 my ( $default_kohafield ) = $sth->fetchrow_array();
15096 if( $mss->{kohafield} ) {
15097 push @exceptions, { frameworkcode => $mss->{frameworkcode}, tagfield => $mss->{tagfield}, tagsubfield => $mss->{tagsubfield}, kohafield => $mss->{kohafield} } if not $default_kohafield or $default_kohafield ne $mss->{kohafield};
15099 push @exceptions, { frameworkcode => $mss->{frameworkcode}, tagfield => $mss->{tagfield}, tagsubfield => $mss->{tagsubfield}, kohafield => q{} } if $default_kohafield;
15104 print "WARNING: The Default framework is now considered as authoritative for Koha to MARC mappings. We have found that your additional frameworks contained "
15105 . scalar(@exceptions)
15106 . " mapping(s) that deviate from the standard mappings. Please look at the following list and consider if you need to add them again in Default (possibly as a second mapping).\n";
15107 for my $exception (@exceptions) {
15109 . $exception->{tagfield} . '$'
15110 . $exception->{tagsubfield}
15112 . $exception->{frameworkcode} . ': ';
15113 if ( $exception->{kohafield} ) {
15114 print "Mapping to "
15115 . $exception->{kohafield}
15116 . " has been adjusted.\n";
15119 print "Mapping has been reset.\n";
15125 # Clear the destination frameworks first
15127 UPDATE marc_subfield_structure
15128 SET kohafield = NULL
15129 WHERE frameworkcode > ''
15133 # Now copy from Default
15134 my $msss = $dbh->selectall_arrayref(q|
15135 SELECT kohafield, tagfield, tagsubfield
15136 FROM marc_subfield_structure
15137 WHERE frameworkcode = ''
15139 |, { Slice => {} });
15140 my $sth = $dbh->prepare(q|
15141 UPDATE marc_subfield_structure
15143 WHERE frameworkcode > ''
15145 AND tagsubfield = ?
15147 for my $mss (@$msss) {
15148 $sth->execute( $mss->{kohafield}, $mss->{tagfield},
15149 $mss->{tagsubfield} );
15153 my @frameworkcodes = $dbh->selectall_arrayref(q|
15154 SELECT frameworkcode FROM biblio_framework WHERE frameworkcode > ''
15156 for my $frameworkcode (@frameworkcodes) {
15157 Koha::Caches->get_instance->clear_from_cache("MarcSubfieldStructure-$frameworkcode");
15159 Koha::Caches->get_instance->clear_from_cache("default_value_for_mod_marc-");
15162 SetVersion( $DBversion );
15163 print "Upgrade to $DBversion done (Bug 19096 - Make Default authoritative for Koha to MARC mappings)\n";
15166 $DBversion = '17.12.00.003';
15167 if( CheckVersion( $DBversion ) ) {
15168 $dbh->do(q|DROP TABLE IF EXISTS notifys|);
15170 if( column_exists( 'accountlines', 'notify_id' ) ) {
15171 $dbh->do(q|ALTER TABLE accountlines DROP COLUMN notify_id|);
15172 $dbh->do(q|ALTER TABLE accountlines DROP COLUMN notify_level|);
15175 SetVersion( $DBversion );
15176 print "Upgrade to $DBversion done (Bug 10021 - Drop notifys-related table and columns)\n";
15179 $DBversion = '17.12.00.004';
15180 if( CheckVersion( $DBversion ) ) {
15182 INSERT IGNORE INTO systempreferences ( `variable`, `value`, `options`, `explanation`, `type` )
15184 ('RESTdefaultPageSize','20','','Set the default number of results returned by the REST API endpoints','Integer')
15187 SetVersion( $DBversion );
15188 print "Upgrade to $DBversion done (Bug 19278 - Add a configurable default page size for REST endpoints)\n";
15191 $DBversion = '17.12.00.005';
15192 if( CheckVersion( $DBversion ) ) {
15193 # For installations having the note already
15196 SET code = 'CHECKOUT_NOTE',
15197 name = 'Checkout note on item set by patron',
15198 title = 'Checkout note',
15199 content = REPLACE(content, "<<biblio.item>>", "<<biblio.title>>")
15200 WHERE code = 'PATRON_NOTE'
15202 # For installations coming from 17.11
15204 INSERT IGNORE INTO `letter` (`module`, `code`, `branchcode`, `name`, `is_html`, `title`, `content`, `message_transport_type`)
15205 VALUES ('circulation', 'CHECKOUT_NOTE', '', 'Checkout note on item set by patron', '0', 'Checkout note', '<<borrowers.firstname>> <<borrowers.surname>> has added a note to the item <<biblio.title>> - <<biblio.author>> (<<biblio.biblionumber>>).','email')
15208 SetVersion( $DBversion );
15209 print "Upgrade to $DBversion done (Bug 18915 - Correct CHECKOUT_NOTE notice template)\n";
15212 $DBversion = '17.12.00.006';
15213 if( CheckVersion( $DBversion ) ) {
15215 UPDATE systempreferences SET value=replace(value, "http://www.scholar", "https://scholar") WHERE variable='OPACSearchForTitleIn';
15218 SetVersion( $DBversion );
15219 print "Upgrade to $DBversion done (Bug 17682 - Update URL for Google Scholar in OPACSearchForTitleIn)\n";
15222 $DBversion = '17.12.00.007';
15223 if( CheckVersion( $DBversion ) ) {
15225 unless ( TableExists( 'library_groups' ) ) {
15227 CREATE TABLE library_groups (
15228 id INT(11) NOT NULL auto_increment, -- unique id for each group
15229 parent_id INT(11) NULL DEFAULT NULL, -- if this is a child group, the id of the parent group
15230 branchcode VARCHAR(10) NULL DEFAULT NULL, -- The branchcode of a branch belonging to the parent group
15231 title VARCHAR(100) NULL DEFAULT NULL, -- Short description of the goup
15232 description TEXT NULL DEFAULT NULL, -- Longer explanation of the group, if necessary
15233 created_on TIMESTAMP NULL, -- Date and time of creation
15234 updated_on TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, -- Date and time of last
15235 PRIMARY KEY id ( id ),
15236 FOREIGN KEY (parent_id) REFERENCES library_groups(id) ON UPDATE CASCADE ON DELETE CASCADE,
15237 FOREIGN KEY (branchcode) REFERENCES branches(branchcode) ON UPDATE CASCADE ON DELETE CASCADE,
15238 UNIQUE KEY title ( title )
15239 ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
15243 SetVersion( $DBversion );
15244 print "Upgrade to $DBversion done (Bug 15707 - Add new table library_groups)\n";
15247 $DBversion = '17.12.00.008';
15248 if ( CheckVersion($DBversion) ) {
15250 if ( TableExists( 'branchcategories' ) and TableExists('branchrelations' )) {
15252 INSERT INTO library_groups ( title, description, created_on ) VALUES ( '__SEARCH_GROUPS__', 'Library search groups', NOW() )
15254 my $search_groups_root_id = $dbh->last_insert_id(undef, undef, 'library_groups', undef);
15256 my $sth = $dbh->prepare("SELECT * FROM branchcategories");
15258 my $sth2 = $dbh->prepare("INSERT INTO library_groups ( parent_id, title, description, created_on ) VALUES ( ?, ?, ?, NOW() )");
15260 my $sth3 = $dbh->prepare("SELECT * FROM branchrelations WHERE categorycode = ?");
15262 my $sth4 = $dbh->prepare("INSERT INTO library_groups ( parent_id, branchcode, created_on ) VALUES ( ?, ?, NOW() )");
15265 while ( my $lc = $sth->fetchrow_hashref ) {
15266 my $description = $lc->{categorycode};
15267 $description .= " - " . $lc->{codedescription} if $lc->{codedescription};
15269 $sth2->execute($search_groups_root_id, $lc->{categoryname}, $description);
15271 my $subgroup_id = $dbh->last_insert_id(undef, undef, 'library_groups', undef);
15273 $sth3->execute( $lc->{categorycode} );
15275 while ( my $l = $sth3->fetchrow_hashref ) {
15276 $sth4->execute( $subgroup_id, $l->{branchcode} );
15280 $dbh->do("DROP TABLE branchrelations");
15281 $dbh->do("DROP TABLE branchcategories");
15284 print "Upgrade to $DBversion done (Bug 16735 - Migrate library search groups into the new hierarchical groups)\n";
15285 SetVersion($DBversion);
15288 $DBversion = '17.12.00.009';
15289 if ( CheckVersion($DBversion) ) {
15291 INSERT IGNORE INTO permissions (module_bit, code, description) VALUES
15292 (4, 'edit_borrowers', 'Add, modify and view patron information'),
15293 (4, 'view_borrower_infos_from_any_libraries', 'View patron infos from any libraries');
15296 # We are lucky here, there is nothing else to do: flags 4-borrowers did not contain sub permissions
15298 SetVersion( $DBversion );
15299 print "Upgrade to $DBversion done (Bug 18403 - Add the view_borrower_infos_from_any_libraries permission )\n";
15302 $DBversion = '17.12.00.010';
15303 if( CheckVersion( $DBversion ) ) {
15305 if( !column_exists( 'library_groups', 'ft_hide_patron_info' ) ) {
15306 $dbh->do( "ALTER TABLE library_groups ADD COLUMN ft_hide_patron_info tinyint(1) NOT NULL DEFAULT 0 AFTER description" );
15309 SetVersion( $DBversion );
15310 print "Upgrade to $DBversion done (Bug 20133 - Add library_groups.ft_hide_patron_info)\n";
15313 $DBversion = '17.12.00.011';
15314 if( CheckVersion( $DBversion ) ) {
15316 if( !column_exists( 'library_groups', 'ft_search_groups_opac' ) ) {
15317 $dbh->do( "ALTER TABLE library_groups ADD COLUMN ft_search_groups_opac tinyint(1) NOT NULL DEFAULT 0 AFTER ft_hide_patron_info" );
15318 $dbh->do( "ALTER TABLE library_groups ADD COLUMN ft_search_groups_staff tinyint(1) NOT NULL DEFAULT 0 AFTER ft_search_groups_opac" );
15319 $dbh->do( "UPDATE library_groups SET ft_search_groups_staff = 1 AND ft_search_groups_opac = 1 WHERE title = '__SEARCH_GROUPS__'" );
15322 SetVersion( $DBversion );
15323 print "Upgrade to $DBversion done (Bug 20157 - Use group 'features' to decide which groups to use for group searching functionality)\n";
15326 $DBversion = '17.12.00.012';
15327 if( CheckVersion( $DBversion ) ) {
15330 INSERT IGNORE INTO systempreferences (variable,value,options,explanation,type)
15331 VALUES ('AutoSwitchPatron', '0', '', 'Auto switch to patron', 'YesNo');
15334 SetVersion( $DBversion );
15335 print "Upgrade to $DBversion done (Bug 15752 - Add system preference AutoSwitchPatron)\n";
15338 $DBversion = '17.12.00.013';
15339 if( CheckVersion( $DBversion ) ) {
15342 ALTER TABLE club_enrollments MODIFY date_created timestamp NULL DEFAULT NULL;
15345 SetVersion( $DBversion );
15346 print "Upgrade to $DBversion done (Bug 20175 - Set DEFAULT NULL value for club_enrollments.date_created)\n";
15349 $DBversion = '17.12.00.014';
15350 if( CheckVersion( $DBversion ) ) {
15351 $dbh->do( "UPDATE marc_subfield_structure SET kohafield=NULL where kohafield='additionalauthors.author'" );
15352 SetVersion( $DBversion );
15353 print "Upgrade to $DBversion done (Bug 19790 - Remove additionalauthors.author from installer files)\n";
15356 $DBversion = '17.12.00.015';
15357 if( CheckVersion( $DBversion ) ) {
15359 ALTER TABLE borrowers
15360 MODIFY surname MEDIUMTEXT,
15361 MODIFY address MEDIUMTEXT,
15362 MODIFY city MEDIUMTEXT
15365 ALTER TABLE deletedborrowers
15366 MODIFY surname MEDIUMTEXT,
15367 MODIFY address MEDIUMTEXT,
15368 MODIFY city MEDIUMTEXT
15372 ALTER TABLE export_format
15373 MODIFY csv_separator VARCHAR(2) NOT NULL DEFAULT ',',
15374 MODIFY field_separator VARCHAR(2),
15375 MODIFY subfield_separator VARCHAR(2)
15378 ALTER TABLE export_format MODIFY encoding VARCHAR(255) NOT NULL DEFAULT 'utf8'
15382 ALTER TABLE reserves MODIFY lowestPriority tinyint(1) NOT NULL DEFAULT 0
15385 ALTER TABLE old_reserves MODIFY lowestPriority tinyint(1) NOT NULL DEFAULT 0
15388 SetVersion( $DBversion );
15389 print "Upgrade to $DBversion done (Bug 20144 - Adapt DB structure to work with new SQL modes)\n";
15392 $DBversion = '17.12.00.016';
15393 if( CheckVersion( $DBversion ) ) {
15394 $dbh->do(q|SET foreign_key_checks = 0|);
15395 my $sth = $dbh->table_info( '','','','TABLE' );
15397 while ( my ( $cat, $schema, $name, $type, $remarks ) = $sth->fetchrow_array ) {
15398 my $table_sth = $dbh->prepare(qq|SHOW CREATE TABLE $name|);
15399 $table_sth->execute;
15400 my @table = $table_sth->fetchrow_array;
15401 unless ( $table[1] =~ /COLLATE=utf8mb4_unicode_ci/ ) {
15402 # Some users might have done the upgrade to utf8mb4 on their own
15403 # to support supplemental chars (japanese, chinese, etc)
15404 if ( $name eq 'additional_fields' ) {
15407 DROP KEY `fields_uniq`,
15408 ADD UNIQUE KEY `fields_uniq` (`tablename` (191), `name` (191))
15410 $dbh->do(qq|ALTER TABLE $name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci|);
15412 elsif ( $name eq 'authorised_values' ) {
15416 ADD KEY `lib` (`lib` (191))
15418 $dbh->do(qq|ALTER TABLE $name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci|);
15420 elsif ( $name eq 'borrower_modifications' ) {
15424 DROP KEY `verification_token`,
15425 ADD PRIMARY KEY (`verification_token` (191),`borrowernumber`),
15426 ADD KEY `verification_token` (`verification_token` (191))
15428 $dbh->do(qq|ALTER TABLE $name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci|);
15430 elsif ( $name eq 'columns_settings' ) {
15434 ADD PRIMARY KEY (`module` (191), `page` (191), `tablename` (191), `columnname` (191))
15436 $dbh->do(qq|ALTER TABLE $name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci|);
15438 elsif ( $name eq 'illrequestattributes' ) {
15442 ADD PRIMARY KEY (`illrequest_id`, `type` (191))
15444 $dbh->do(qq|ALTER TABLE $name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci|);
15446 elsif ( $name eq 'items_search_fields' ) {
15450 ADD PRIMARY KEY (`name` (191))
15452 $dbh->do(qq|ALTER TABLE $name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci|);
15454 elsif ( $name eq 'marc_subfield_structure' ) {
15455 # In this case we convert each column explicitly
15456 # to preserve 'tagsubield' collation (utf8mb4_bin)
15459 MODIFY COLUMN tagfield
15460 VARCHAR(3) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '',
15461 MODIFY COLUMN tagsubfield
15462 VARCHAR(1) COLLATE utf8mb4_bin NOT NULL DEFAULT '',
15463 MODIFY COLUMN liblibrarian
15464 VARCHAR(255) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '',
15465 MODIFY COLUMN libopac
15466 VARCHAR(255) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '',
15467 MODIFY COLUMN kohafield
15468 VARCHAR(40) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
15469 MODIFY COLUMN authorised_value
15470 VARCHAR(32) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
15471 MODIFY COLUMN authtypecode
15472 VARCHAR(20) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
15473 MODIFY COLUMN value_builder
15474 VARCHAR(80) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
15475 MODIFY COLUMN frameworkcode
15476 VARCHAR(4) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '',
15477 MODIFY COLUMN seealso
15478 VARCHAR(1100) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
15480 VARCHAR(80) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
15481 MODIFY COLUMN defaultvalue
15482 MEDIUMTEXT COLLATE utf8mb4_unicode_ci default NULL
15484 $dbh->do(qq|ALTER TABLE $name CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci|);
15486 elsif ( $name eq 'plugin_data' ) {
15490 ADD PRIMARY KEY (`plugin_class` (191), `plugin_key` (191))
15492 $dbh->do(qq|ALTER TABLE $name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci|);
15494 elsif ( $name eq 'search_field' ) {
15498 ADD UNIQUE KEY `name` (`name` (191))
15500 $dbh->do(qq|ALTER TABLE $name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci|);
15502 elsif ( $name eq 'search_marc_map' ) {
15505 DROP KEY `index_name`,
15506 ADD UNIQUE KEY `index_name` (`index_name`, `marc_field` (191), `marc_type`)
15508 $dbh->do(qq|ALTER TABLE $name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci|);
15510 elsif ( $name eq 'sms_providers' ) {
15514 ADD UNIQUE KEY `name` (`name` (191))
15516 $dbh->do(qq|ALTER TABLE $name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci|);
15518 elsif ( $name eq 'tags' ) {
15522 ADD PRIMARY KEY (`entry` (191))
15524 $dbh->do(qq|ALTER TABLE $name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci|);
15526 elsif ( $name eq 'tags_approval' ) {
15529 MODIFY COLUMN `term` VARCHAR(191) NOT NULL
15531 $dbh->do(qq|ALTER TABLE $name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci|);
15533 elsif ( $name eq 'tags_index' ) {
15536 MODIFY COLUMN `term` VARCHAR(191) NOT NULL
15538 $dbh->do(qq|ALTER TABLE $name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci|);
15541 $dbh->do(qq|ALTER TABLE $name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci|);
15545 $dbh->do(q|SET foreign_key_checks = 1|);
15547 print "Upgrade to $DBversion done (Bug 18336 - Convert DB tables to utf8mb4 🎁)\n";
15548 SetVersion($DBversion);
15552 $DBversion = '17.12.00.017';
15553 if( CheckVersion( $DBversion ) ) {
15555 if( !column_exists( 'items', 'damaged_on' ) ) {
15556 $dbh->do( "ALTER TABLE items ADD COLUMN damaged_on DATETIME NULL AFTER damaged");
15558 if( !column_exists( 'deleteditems', 'damaged_on' ) ) {
15559 $dbh->do( "ALTER TABLE deleteditems ADD COLUMN damaged_on DATETIME NULL AFTER damaged");
15562 SetVersion( $DBversion );
15563 print "Upgrade to $DBversion done (Bug 17672 - Add damaged_on to items and deleteditems tables)\n";
15566 $DBversion = '17.12.00.018';
15567 if( CheckVersion( $DBversion ) ) {
15570 INSERT IGNORE INTO systempreferences (`variable`, `value`, `options`, `explanation`, `type`) VALUES ('BrowseResultSelection','0',NULL,'Enable/Disable browsing search results fromt the bibliographic record detail page in staff client','YesNo')
15573 SetVersion( $DBversion );
15574 print "Upgrade to $DBversion done (Bug 19290 - Add system preference BrowseResultSelection)\n";
15577 $DBversion = '17.12.00.019';
15578 if( CheckVersion( $DBversion ) ) {
15580 $dbh->do(q|UPDATE auth_subfield_structure SET hidden=1 WHERE hidden<>0|);
15582 SetVersion( $DBversion );
15583 print "Upgrade to $DBversion done (Bug 20074 - Auth_subfield_structure changes hidden attribute)\n";
15586 $DBversion = '17.12.00.020';
15587 if( CheckVersion( $DBversion ) ) {
15590 INSERT IGNORE INTO language_descriptions(subtag, type, lang, description)
15591 VALUES ('vi', 'language', 'de', 'Vietnamesisch')
15595 UPDATE language_descriptions SET description = 'Tiếng Việt'
15596 WHERE subtag = 'vi' and type = 'language' and lang = 'vi'
15599 SetVersion( $DBversion );
15600 print "Upgrade to $DBversion done (Bug 20082 - Update descriptions of Vietnamese language)\n";
15603 $DBversion = '17.12.00.021';
15604 if( CheckVersion( $DBversion ) ) {
15607 INSERT IGNORE INTO systempreferences ( `variable`, `value`, `options`, `explanation`, `type` ) VALUES
15608 ('PurgeSuggestionsOlderThan', '', NULL, 'Default value for cronjob purge_suggestions.pl', 'Integer');
15611 SetVersion( $DBversion );
15612 print "Upgrade to $DBversion done (Bug 13287 - Add system preference PurgeSuggestionsOlderThan)\n";
15615 $DBversion = '17.12.00.022';
15616 if( CheckVersion( $DBversion ) ) {
15618 if( !column_exists( 'currency', 'p_sep_by_space' ) ) {
15620 ALTER TABLE currency ADD COLUMN p_sep_by_space tinyint(1) default 0 after archived
15624 SetVersion( $DBversion );
15625 print "Upgrade to $DBversion done (Bug 4078 - Add column currency.p_sep_by_space)\n";
15628 $DBversion = '17.12.00.023';
15629 if( CheckVersion( $DBversion ) ) {
15631 DELETE FROM systempreferences
15632 WHERE variable='checkdigit'
15635 SetVersion( $DBversion );
15636 print "Upgrade to $DBversion done (Bug 20264 - Remove system preference 'checkdigit')\n";
15639 $DBversion = '17.12.00.024';
15640 if( CheckVersion( $DBversion ) ) {
15643 INSERT IGNORE INTO systempreferences (variable,value,options,explanation,type)
15644 VALUES ('SelfCheckInMainUserBlock', '', '70|10', 'Add a block of HTML that will display on the self check-in screen.', 'Textarea');
15648 INSERT IGNORE INTO systempreferences (variable,value,options,explanation,type)
15649 VALUES ('SelfCheckInModule', 0, NULL, 'Enable the standalone self-checkin module.', 'YesNo');
15653 INSERT IGNORE INTO systempreferences (variable,value,options,explanation,type)
15654 VALUES ('SelfCheckInModuleUserID', NULL, NULL, 'Patron ID (borrowernumber) to be allowed on the self-checkin module.', 'Integer');
15658 INSERT IGNORE INTO systempreferences (variable,value,options,explanation,type)
15659 VALUES ('SelfCheckInTimeout', 120, NULL, 'Define the number of seconds before the self check-in module times out.', 'Integer');
15663 INSERT IGNORE INTO systempreferences (variable,value,options,explanation,type)
15664 VALUES ('SelfCheckInUserCSS', '', NULL, 'Add CSS to be included in the self check-in module in an embedded <style> tag.', 'free');
15668 INSERT IGNORE INTO systempreferences (variable,value,options,explanation,type)
15669 VALUES ('SelfCheckInUserJS', '', NULL, 'Define custom javascript for inclusion in the self check-in module.', 'free');
15672 # Add new userflag for self check
15674 INSERT IGNORE INTO userflags (bit,flag,flagdesc,defaulton) VALUES
15675 (23,'self_check','Self check modules',0);
15678 # Add self check-in module subpermission
15680 INSERT IGNORE INTO permissions (module_bit,code,description)
15681 VALUES (23, 'self_checkin_module', 'Log into the self check-in module');
15684 # Add self check-in module subpermission
15686 INSERT IGNORE INTO permissions (module_bit,code,description)
15687 VALUES (23, 'self_checkout_module', 'Perform self checkout at the OPAC. It should be used for the patron matching the AutoSelfCheckID');
15690 # Update patrons with self_checkout permission
15691 # IMPORTANT: Needs to happen before removing the old subpermission
15693 UPDATE user_permissions
15694 SET module_bit = 23,
15695 code = 'self_checkout_module'
15696 WHERE module_bit = 1 AND code = 'self_checkout';
15699 # Remove old self_checkout permission
15701 DELETE IGNORE FROM permissions
15702 WHERE code='self_checkout';
15705 SetVersion( $DBversion );
15706 print "Upgrade to $DBversion done (Bug 15492 - Add a standalone self-checkin module)\n";
15709 $DBversion = '17.12.00.025';
15710 if( CheckVersion( $DBversion ) ) {
15712 INSERT IGNORE INTO systempreferences (variable,value,explanation,options,type)
15713 VALUES ('StaffLoginInstructions','','HTML to go into the login box for the staff client',NULL,'Free')
15716 UPDATE systempreferences
15717 SET variable = 'OpacLoginInstructions'
15718 WHERE variable = 'NoLoginInstructions'
15721 SetVersion( $DBversion );
15722 print "Upgrade to $DBversion done (Bug 20291 - Add StaffLoginInstructions system preference and rename NoLoginInstructions with OpacLoginInstructions)\n";
15725 $DBversion = '17.12.00.026';
15726 if( CheckVersion( $DBversion ) ) {
15727 if( !column_exists( 'issuingrules', 'suspension_chargeperiod' ) ) {
15729 ALTER TABLE issuingrules ADD COLUMN suspension_chargeperiod int(11) DEFAULT '1' AFTER maxsuspensiondays;
15733 SetVersion( $DBversion );
15734 print "Upgrade to $DBversion done (Bug 19804 - Add issuingrules.suspension_chargeperiod)\n";
15737 $DBversion = '17.12.00.027';
15738 if( CheckVersion( $DBversion ) ) {
15740 INSERT IGNORE INTO systempreferences (`variable`, `value`, `options`, `explanation`, `type`)
15741 VALUES ('UseACQFrameworkForBiblioRecords','0','','Use the ACQ framework for the catalog details','YesNo')
15744 SetVersion( $DBversion );
15745 print "Upgrade to $DBversion done (Bug 19289 - Add system preference UseACQFrameworkForBiblioRecords)\n";
15748 $DBversion = '17.12.00.028';
15749 if( CheckVersion( $DBversion ) ) {
15750 if( !column_exists( 'marc_tag_structure', 'ind1_defaultvalue' ) ) {
15752 ALTER TABLE marc_tag_structure
15753 ADD COLUMN ind2_defaultvalue VARCHAR(1) NOT NULL DEFAULT '' AFTER authorised_value,
15754 ADD COLUMN ind1_defaultvalue VARCHAR(1) NOT NULL DEFAULT '' AFTER authorised_value;
15758 SetVersion( $DBversion );
15759 print "Upgrade to $DBversion done (Bug 9701 - Add default indicators (marc_tag_structure.indX_defaultvalue))\n";
15762 $DBversion = '17.12.00.029';
15763 if( CheckVersion( $DBversion ) ) {
15765 q|# PERSO_NAME 100 600 696 700 796 800 896
15766 marc21, 100, ind1:auth1
15767 marc21, 600, ind1:auth1, ind2:thesaurus
15768 marc21, 696, ind1:auth1
15769 marc21, 700, ind1:auth1
15770 marc21, 796, ind1:auth1
15771 marc21, 800, ind1:auth1
15772 marc21, 896, ind1:auth1
15773 # CORPO_NAME 110 610 697 710 797 810 897
15774 marc21, 110, ind1:auth1
15775 marc21, 610, ind1:auth1, ind2:thesaurus
15776 marc21, 697, ind1:auth1
15777 marc21, 710, ind1:auth1
15778 marc21, 797, ind1:auth1
15779 marc21, 810, ind1:auth1
15780 marc21, 897, ind1:auth1
15781 # MEETI_NAME 111 611 698 711 798 811 898
15782 marc21, 111, ind1:auth1
15783 marc21, 611, ind1:auth1, ind2:thesaurus
15784 marc21, 698, ind1:auth1
15785 marc21, 711, ind1:auth1
15786 marc21, 798, ind1:auth1
15787 marc21, 811, ind1:auth1
15788 marc21, 898, ind1:auth1
15789 # UNIF_TITLE 130 440 630 699 730 799 830 899 / 240
15790 marc21, 130, ind1:auth2
15791 marc21, 240, , ind2:auth2
15792 marc21, 440, , ind2:auth2
15793 marc21, 630, ind1:auth2, ind2:thesaurus
15794 marc21, 699, ind1:auth2
15795 marc21, 730, ind1:auth2
15796 marc21, 799, ind1:auth2
15797 marc21, 830, , ind2:auth2
15798 marc21, 899, ind1:auth2
15800 marc21, 648, , ind2:thesaurus
15801 # TOPIC_TERM 650 654 656 657 658 690
15802 marc21, 650, , ind2:thesaurus
15803 # GEOGR_NAME 651 662 691 / 751
15804 marc21, 651, , ind2:thesaurus
15806 marc21, 655, , ind2:thesaurus
15808 # UNIMARC: Always copy the indicators from the authority
15809 unimarc, *, ind1:auth1, ind2:auth2|;
15812 INSERT IGNORE INTO systempreferences (variable,value,explanation,options,type)
15813 VALUES ( 'AuthorityControlledIndicators', ?, 'Authority controlled indicators per biblio field', NULL, 'Free' );
15816 SetVersion( $DBversion );
15817 print "Upgrade to $DBversion done (Bug 14769 - Authorities merge: Set correct indicators in biblio field (new system preference AuthorityControlledIndicators))\n";
15820 $DBversion = '17.12.00.030';
15821 if( CheckVersion( $DBversion ) ) {
15823 INSERT IGNORE INTO systempreferences (variable,value,explanation,options,type)
15824 VALUES ('NovelistSelectStaffProfile',NULL,'Novelist staff client user Profile',NULL,'free')
15827 SetVersion( $DBversion );
15828 print "Upgrade to $DBversion done (Bug 19882 - Add system preference NovelistSelectStaffProfile)\n";
15831 $DBversion = '17.12.00.031';
15832 if( CheckVersion( $DBversion ) ) {
15834 INSERT IGNORE INTO systempreferences (`variable`, `value`, `options`, `explanation`, `type`)
15835 VALUES ('MarcFieldDocURL', NULL, NULL, 'URL used for MARC field documentation. Following substitutions are available: {MARC} = marc flavour, eg. \"MARC21\" or \"UNIMARC\". {FIELD} = field number, eg. \"000\" or \"048\". {LANG} = user language, eg. \"en\" or \"fi-FI\"', 'free')
15838 SetVersion( $DBversion );
15839 print "Upgrade to $DBversion done (Bug 11674 - Add system preference MarcFieldDocURL)\n";
15842 $DBversion = '17.12.00.032';
15843 if( CheckVersion( $DBversion ) ) {
15845 UPDATE letter SET code = "SERIAL_ALERT" WHERE code = "RLIST";
15848 UPDATE letter SET name = "New serial issue" WHERE name = "Routing List";
15851 UPDATE subscription SET letter = "SERIAL_ALERT" WHERE letter = "RLIST";
15854 SetVersion( $DBversion );
15855 print "Upgrade to $DBversion done (Bug 19794 - Rename RLIST notice to SERIAL_ALERT)\n";
15858 $DBversion = '17.12.00.033';
15859 if( CheckVersion( $DBversion ) ) {
15860 if ( !column_exists( 'accountlines', 'payment_type' ) ) {
15862 ALTER TABLE accountlines ADD payment_type varchar(80) default NULL AFTER accounttype
15867 INSERT IGNORE INTO authorised_value_categories( category_name ) VALUES ('PAYMENT_TYPE')
15870 SetVersion( $DBversion );
15871 print "Upgrade to $DBversion done (Bug 18786 - Add ability to create custom payment types)\n";
15874 $DBversion = '17.12.00.034';
15875 if( CheckVersion( $DBversion ) ) {
15878 INSERT IGNORE INTO account_offset_types ( type ) VALUES ('Void Payment')
15881 SetVersion( $DBversion );
15882 print "Upgrade to $DBversion done (Bug 18790 - Add ability to void payment)\n";
15885 $DBversion = '17.12.00.035';
15886 if( CheckVersion( $DBversion ) ) {
15887 my ( $original_value ) = $dbh->selectrow_array(q|
15888 SELECT value FROM systempreferences WHERE variable="MarkLostItemsAsReturned"
15890 if ( $original_value and $original_value eq '1' ) {
15892 UPDATE systempreferences
15893 SET type="multiple",
15894 options="batchmod|moredetail|cronjob|additem",
15895 value="batchmod,moredetail,cronjob,additem"
15896 WHERE variable="MarkLostItemsAsReturned"
15898 } elsif ( $original_value == 0 || !defined($original_value) ) {
15900 UPDATE systempreferences
15901 SET type="multiple",
15902 options="batchmod|moredetail|cronjob|additem",
15904 WHERE variable="MarkLostItemsAsReturned"
15908 SetVersion( $DBversion );
15909 print "Upgrade to $DBversion done (Bug 19974 - Make MarkLostItemsAsReturned multiple)\n";
15912 $DBversion = '17.12.00.036';
15913 if( CheckVersion( $DBversion ) ) {
15916 INSERT IGNORE INTO systempreferences ( `variable`, `value`, `options`, `explanation`, `type` ) VALUES ('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');
15919 INSERT IGNORE INTO letter(module, code, branchcode, name, is_html, title, content, message_transport_type, lang) VALUES ('reserves', 'CANCEL_HOLD_ON_LOST', '', 'Hold has been cancelled', 0, "Hold has been cancelled", "Dear [% borrower.firstname %] [% borrower.surname %],\n\nWe regret to inform you, that the following item can not be provided due to it being missing. Your hold was cancelled.\n\nTitle: [% biblio.title %]\nAuthor: [% biblio.author %]\nCopy: [% item.copynumber %]\nLocation: [% branch.branchname %]", 'email', 'default');
15922 INSERT IGNORE INTO systempreferences ( `variable`, `value`, `options`, `explanation`, `type` ) VALUES ('UpdateItemWhenLostFromHoldList','',NULL,'This is a list of values to update an item when it is marked as lost from the holds to pull screen','Free');
15925 UPDATE systempreferences SET options="batchmod|moredetail|cronjob|additem|pendingreserves" WHERE variable="MarkLostItemsAsReturned";
15928 SetVersion( $DBversion );
15929 print "Upgrade to $DBversion done (Bug 19287 - Add ability to mark an item 'Lost' from 'Holds to pull' list (CanMarkHoldsToPullAsLost, UpdateItemWhenLostFromHoldList and CANCEL_HOLD_ON_LOST))\n";
15932 $DBversion = '17.12.00.037';
15933 if( CheckVersion( $DBversion ) ) {
15935 SetVersion( $DBversion );
15936 print "Upgrade to $DBversion done (This change has been reverted, nothing done!)\n";
15939 $DBversion = '17.12.00.038';
15940 if( CheckVersion( $DBversion ) ) {
15943 UPDATE language_rfc4646_to_iso639 SET iso639_2_code = 'slo' WHERE iso639_2_code = 'slk' AND rfc4646_subtag = 'sk';
15946 SetVersion( $DBversion );
15947 print "Upgrade to $DBversion done (Bug 20245 - Use Bibliographic code value for Slovak language)\n";
15950 $DBversion = '17.12.00.039';
15951 if( CheckVersion( $DBversion ) ) {
15954 UPDATE language_rfc4646_to_iso639 SET iso639_2_code = 'baq' WHERE iso639_2_code = 'eus' AND rfc4646_subtag = 'eu';
15957 UPDATE language_rfc4646_to_iso639 SET iso639_2_code = 'mao' WHERE iso639_2_code = 'mri' AND rfc4646_subtag = 'mi';
15960 UPDATE language_rfc4646_to_iso639 SET iso639_2_code = 'alb' WHERE iso639_2_code = 'sqi' AND rfc4646_subtag = 'sq';
15963 SetVersion( $DBversion );
15964 print "Upgrade to $DBversion done (Bug 20482 - Use Bibliographic code value for Basque, Maori and Albanian languages)\n";
15967 $DBversion = '17.12.00.040';
15968 if( CheckVersion( $DBversion ) ) {
15971 INSERT IGNORE INTO systempreferences ( value, variable, options, explanation, type )
15972 VALUES ( '0', 'ProtectSuperlibrarianPrivileges', NULL, 'If enabled, non-superlibrarians cannot set superlibrarian privileges', 'YesNo' )
15975 SetVersion( $DBversion );
15976 print "Upgrade to $DBversion done (Bug 20100 - Add new system preference ProtectSuperlibrarianPrivileges)\n";
15979 $DBversion = '17.12.00.041';
15980 if( CheckVersion( $DBversion ) ) {
15983 INSERT IGNORE INTO permissions (module_bit, code, description) VALUES (13, 'access_files', 'Access to the files stored on the server');
15986 SetVersion( $DBversion );
15987 print "Upgrade to $DBversion done (Bug 11317 - Add a new permission to access files stored on the server)\n";
15990 $DBversion = '17.12.00.042';
15991 if( CheckVersion( $DBversion ) ) {
15993 if (!TableExists('oauth_access_tokens')) {
15995 CREATE TABLE oauth_access_tokens (
15996 `access_token` VARCHAR(191) NOT NULL,
15997 `client_id` VARCHAR(191) NOT NULL,
15998 `expires` INT NOT NULL,
15999 PRIMARY KEY (`access_token`)
16000 ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci
16004 SetVersion( $DBversion );
16005 print "Upgrade to $DBversion done (Bug 20402 - Implement OAuth2 authentication for REST API)\n";
16008 $DBversion = '17.12.00.043';
16009 if(CheckVersion($DBversion)) {
16011 if (!TableExists('api_keys')) {
16013 CREATE TABLE `api_keys` (
16014 `client_id` VARCHAR(191) NOT NULL,
16015 `secret` VARCHAR(191) NOT NULL,
16016 `description` VARCHAR(255) NOT NULL,
16017 `patron_id` INT(11) NOT NULL,
16018 `active` TINYINT(1) DEFAULT 1 NOT NULL,
16019 PRIMARY KEY `client_id` (`client_id`),
16020 UNIQUE KEY `secret` (`secret`),
16021 KEY `patron_id` (`patron_id`),
16022 CONSTRAINT `api_keys_fk_patron_id`
16023 FOREIGN KEY (`patron_id`)
16024 REFERENCES `borrowers` (`borrowernumber`)
16025 ON DELETE CASCADE ON UPDATE CASCADE
16026 ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
16030 print "Upgrade to $DBversion done (Bug 20568 - Add API key management interface for patrons)\n";
16031 SetVersion($DBversion);
16034 $DBversion = '17.12.00.044';
16035 if(CheckVersion($DBversion)) {
16038 INSERT IGNORE INTO systempreferences (`variable`,`value`,`options`,`explanation`,`type`)
16040 ('RESTOAuth2ClientCredentials','0',NULL,'If enabled, the OAuth2 client credentials flow is enabled for the REST API.','YesNo');
16043 print "Upgrade to $DBversion done (Bug 20624 - Disable OAuth2 client credentials grant by default)\n";
16044 SetVersion($DBversion);
16047 $DBversion = '18.05.00.000';
16048 if( CheckVersion( $DBversion ) ) {
16049 SetVersion( $DBversion );
16050 print "Upgrade to $DBversion done (Koha 18.05)\n";
16053 $DBversion = '18.06.00.000';
16054 if( CheckVersion( $DBversion ) ) {
16055 SetVersion( $DBversion );
16056 print "Upgrade to $DBversion done (Koha 18.06 - It's Adventure time!)\n";
16059 $DBversion = '18.06.00.001';
16060 if( CheckVersion( $DBversion ) ) {
16061 $dbh->do(q{UPDATE permissions SET description = 'Manage budgets' WHERE code = 'period_manage';});
16062 $dbh->do(q{UPDATE permissions SET description = 'Manage funds' WHERE code = 'budget_manage';});
16063 $dbh->do(q{UPDATE permissions SET description = 'Modify funds (can''t create lines, but can modify existing ones)' WHERE code = 'budget_modify';});
16064 $dbh->do(q{UPDATE permissions SET description = 'Manage baskets and order lines' WHERE code = 'order_manage';});
16065 $dbh->do(q{UPDATE permissions SET description = 'Manage all baskets and order lines, regardless of restrictions on them' WHERE code = 'order_manage_all';});
16066 $dbh->do(q{UPDATE permissions SET description = 'Manage basket groups' WHERE code = 'group_manage';});
16067 $dbh->do(q{UPDATE permissions SET description = 'Receive orders and manage shipments' WHERE code = 'order_receive';});
16068 $dbh->do(q{UPDATE permissions SET description = 'Add and delete funds (but can''t modify funds)' WHERE code = 'budget_add_del';});
16069 $dbh->do(q{UPDATE permissions SET description = 'Manage all funds' WHERE code = 'budget_manage_all';});
16070 SetVersion( $DBversion );
16071 print "Upgrade to $DBversion done (Bug 3849- Improve descriptions of granular acquisition permissions)\n";
16074 $DBversion = '18.06.00.002';
16075 if( CheckVersion( $DBversion ) ) {
16076 $dbh->do(q{DELETE FROM userflags WHERE bit = 12 AND flag = 'management';});
16077 $dbh->do(q{UPDATE borrowers SET flags = flags - ( flags & (1<<12) ) WHERE flags & (1 << 12);});
16078 SetVersion( $DBversion );
16079 print "Upgrade to $DBversion done (Bug 2426 - Remove deprecated management permission)\n";
16082 $DBversion = '18.06.00.003';
16083 if( CheckVersion( $DBversion ) ) {
16084 $dbh->do( "ALTER TABLE search_field CHANGE COLUMN type type ENUM('', 'string', 'date', 'number', 'boolean', 'sum', 'isbn', 'stdno') NOT NULL COMMENT 'what type of data this holds, relevant when storing it in the search engine'" );
16085 SetVersion( $DBversion );
16086 print "Upgrade to $DBversion done (Bug 20073 - Add new types for Elasticsearch fields)\n";
16089 $DBversion = '18.06.00.004';
16090 if( CheckVersion( $DBversion ) ) {
16092 # Add 'Manual Credit' offset type
16094 INSERT IGNORE INTO `account_offset_types` (`type`) VALUES ('Manual Credit');
16097 # Fix wrong account offsets / Manual credits
16099 UPDATE account_offsets
16100 SET credit_id=debit_id,
16102 type='Manual Credit'
16103 WHERE amount < 0 AND
16104 type='Manual Debit' AND
16106 (SELECT accountlines_id AS debit_id
16108 WHERE accounttype='C');
16111 # Fix wrong account offsets / Manually forgiven amounts
16113 UPDATE account_offsets
16114 SET credit_id=debit_id,
16117 WHERE amount < 0 AND
16118 type='Manual Debit' AND
16120 (SELECT accountlines_id AS debit_id
16122 WHERE accounttype='FOR');
16125 SetVersion( $DBversion );
16126 print "Upgrade to $DBversion done (Bug 20980 - Manual credit offsets are stored as debits)\n";
16129 $DBversion = '18.06.00.005';
16130 if( CheckVersion( $DBversion ) ) {
16131 unless ( column_exists('aqorders', 'created_by') ) {
16132 $dbh->do( "ALTER TABLE aqorders ADD COLUMN created_by int(11) NULL DEFAULT NULL AFTER quantityreceived;" );
16133 unless ( foreign_key_exists('aqorders', 'aqorders_created_by') ) {
16134 $dbh->do( "ALTER TABLE aqorders ADD CONSTRAINT aqorders_created_by FOREIGN KEY (created_by) REFERENCES borrowers (borrowernumber) ON DELETE SET NULL ON UPDATE CASCADE;" );
16136 $dbh->do( "UPDATE aqbasket LEFT JOIN borrowers ON ( aqbasket.authorisedby = borrowers.borrowernumber ) SET aqbasket.authorisedby = NULL WHERE borrowers.borrowernumber IS NULL;" );
16137 $dbh->do( "UPDATE aqorders LEFT JOIN aqbasket ON ( aqorders.basketno = aqbasket.basketno ) SET aqorders.created_by = aqbasket.authorisedby WHERE aqorders.created_by IS NULL;" );
16139 SetVersion( $DBversion );
16140 print "Upgrade to $DBversion done (Bug 12395 - Save order line's creator)\n";
16143 $DBversion = '18.06.00.006';
16144 if( CheckVersion( $DBversion ) ) {
16145 unless ( column_exists('patron_lists', 'shared') ) {
16146 $dbh->do( "ALTER TABLE patron_lists ADD COLUMN shared tinyint(1) default 0 AFTER owner;" );
16148 SetVersion( $DBversion );
16149 print "Upgrade to $DBversion done (Bug 19524 - Share patron lists between staff)\n";
16152 $DBversion = '18.06.00.007';
16153 if( CheckVersion( $DBversion ) ) {
16154 $dbh->do( "INSERT IGNORE INTO permissions (module_bit, code, description) VALUES (11, 'currencies_manage', 'Manage currencies and exchange rates');" );
16156 INSERT IGNORE INTO user_permissions (borrowernumber, module_bit, code)
16157 SELECT borrowernumber, 11, 'currencies_manage' FROM borrowers WHERE flags & (1 << 3) OR borrowernumber IN
16158 (SELECT borrowernumber FROM user_permissions WHERE code = 'parameters_remaining_permissions');
16160 SetVersion( $DBversion );
16161 print "Upgrade to $DBversion done (Bug 7651 - Add separate permission for managing currencies and exchange rates)\n";
16164 $DBversion = '18.06.00.008';
16165 if( CheckVersion( $DBversion ) ) {
16166 $dbh->do( "ALTER TABLE marc_modification_template_actions CHANGE action action ENUM('delete_field','add_field','update_field','move_field','copy_field','copy_and_replace_field')" );
16167 SetVersion( $DBversion );
16168 print "Upgrade to $DBversion done (Bug 13560 - need an add option in marc modification templates)\n";
16171 $DBversion = '18.06.00.009';
16172 if( CheckVersion( $DBversion ) ) {
16174 CREATE TABLE IF NOT EXISTS aqinvoice_adjustments (
16175 adjustment_id int(11) NOT NULL AUTO_INCREMENT,
16176 invoiceid int(11) NOT NULL,
16177 adjustment decimal(28,6),
16178 reason varchar(80) default NULL,
16179 note mediumtext default NULL,
16180 budget_id int(11) default NULL,
16181 encumber_open smallint(1) NOT NULL default 1,
16182 timestamp timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
16183 PRIMARY KEY (adjustment_id),
16184 CONSTRAINT aqinvoice_adjustments_fk_invoiceid FOREIGN KEY (invoiceid) REFERENCES aqinvoices (invoiceid) ON DELETE CASCADE ON UPDATE CASCADE,
16185 CONSTRAINT aqinvoice_adjustments_fk_budget_id FOREIGN KEY (budget_id) REFERENCES aqbudgets (budget_id) ON DELETE SET NULL ON UPDATE CASCADE
16186 ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci
16188 $dbh->do("INSERT IGNORE INTO authorised_value_categories (category_name) VALUES ('ADJ_REASON')");
16189 SetVersion( $DBversion );
16190 print "Upgrade to $DBversion done (Bug 19166 - Add the ability to add adjustments to an invoice)\n";
16193 $DBversion = '18.06.00.010';
16194 if( CheckVersion( $DBversion ) ) {
16196 INSERT IGNORE INTO `letter` (`module`, `code`, `branchcode`, `name`, `is_html`, `title`, `content`, `message_transport_type`, `lang`)
16198 ('circulation', 'ACCOUNT_PAYMENT', '', 'Account payment', 0, 'Account payment', '[%- USE Price -%]\r\nA payment of [% credit.amount * -1 | $Price %] has been applied to your account.\r\n\r\nThis payment affected the following fees:\r\n[%- FOREACH o IN offsets %]\r\nDescription: [% o.debit.description %]\r\nAmount paid: [% o.amount * -1 | $Price %]\r\nAmount remaining: [% o.debit.amountoutstanding | $Price %]\r\n[% END %]', 'email', 'default'),
16199 ('circulation', 'ACCOUNT_WRITEOFF', '', 'Account writeoff', 0, 'Account writeoff', '[%- USE Price -%]\r\nAn account writeoff of [% credit.amount * -1 | $Price %] has been applied to your account.\r\n\r\nThis writeoff affected the following fees:\r\n[%- FOREACH o IN offsets %]\r\nDescription: [% o.debit.description %]\r\nAmount paid: [% o.amount * -1 | $Price %]\r\nAmount remaining: [% o.debit.amountoutstanding | $Price %]\r\n[% END %]', 'email', 'default');
16202 INSERT IGNORE INTO systempreferences (`variable`, `value`, `options`, `explanation`, `type`)
16203 VALUES ('UseEmailReceipts','0','','Send email receipts for payments and write-offs','YesNo')
16205 SetVersion( $DBversion );
16206 print "Upgrade to $DBversion done (Bug 19191 - Add ability to email receipts for account payments and write-offs)\n";
16209 $DBversion = '18.06.00.011';
16210 if( CheckVersion( $DBversion ) ) {
16211 unless( column_exists( 'issues', 'noteseen' ) ) {
16212 $dbh->do(q|ALTER TABLE issues ADD COLUMN noteseen int(1) default NULL AFTER notedate|);
16215 unless( column_exists( 'old_issues', 'noteseen' ) ) {
16216 $dbh->do(q|ALTER TABLE old_issues ADD COLUMN noteseen int(1) default NULL AFTER notedate|);
16218 $dbh->do(q|INSERT IGNORE INTO permissions (module_bit, code, description) VALUES ( 1, 'manage_checkout_notes', 'Mark checkout notes as seen/not seen');|);
16219 SetVersion( $DBversion );
16220 print "Upgrade to $DBversion done (Bug 17698: Add column issues.noteseen and old_issues.noteseen)\n";
16223 $DBversion = '18.06.00.012';
16224 if( CheckVersion( $DBversion ) ) {
16225 $dbh->do(q|INSERT IGNORE INTO permissions (module_bit, code, description) VALUES (11, 'suggestions_manage', 'Manage purchase suggestions');|);
16226 $dbh->do(q|INSERT IGNORE INTO user_permissions (borrowernumber, module_bit, code) SELECT borrowernumber, 11, 'suggestions_manage' FROM borrowers WHERE flags & (1 << 2);|);
16227 SetVersion( $DBversion );
16228 print "Upgrade to $DBversion done (Bug 11911 - Add separate permission for managing suggestions)\n";
16231 $DBversion = '18.06.00.013';
16232 if( CheckVersion( $DBversion ) ) {
16234 INSERT IGNORE INTO `account_offset_types` (`type`) VALUES ('Credit Applied');
16236 SetVersion( $DBversion );
16237 print "Upgrade to $DBversion done (Bug 20997 - Add Koha::Account::Line::apply)\n";
16240 $DBversion = '18.06.00.014';
16241 if( CheckVersion( $DBversion ) ) {
16243 INSERT IGNORE INTO systempreferences (variable, value, options, explanation) VALUES ('HidePersonalPatronDetailOnCirculation', 0, 'YesNo', 'Hide patrons phone number, email address, street address and city in the circulation page');
16245 SetVersion( $DBversion );
16246 print "Upgrade to $DBversion done (Bug 21121 - New syspref to allow hiding of private patron data in circulation page)\n";
16249 $DBversion = '18.06.00.015';
16250 if( CheckVersion( $DBversion ) ) {
16251 $dbh->do(q{DELETE FROM systempreferences where variable="OCLCAffiliateID";});
16252 $dbh->do(q{DELETE FROM systempreferences where variable="XISBN";});
16253 $dbh->do(q{DELETE FROM systempreferences where variable="XISBNDailyLimit";});
16254 SetVersion( $DBversion );
16255 print "Upgrade to $DBversion done (Bug 21226 - Remove prefs OCLCAffiliateID, XISBN and XISBNDailyLimit)\n";
16258 $DBversion = '18.06.00.016';
16259 if( CheckVersion( $DBversion ) ) {
16260 my $dtf = Koha::Database->new->schema->storage->datetime_parser;
16261 my $days = C4::Context->preference('MaxPickupDelay') || 7;
16262 my $date = dt_from_string()->add( days => $days );
16263 my $sql = q|UPDATE reserves SET expirationdate = ? WHERE expirationdate IS NULL AND waitingdate IS NOT NULL|;
16264 $dbh->do( $sql, undef, $dtf->format_datetime($date) );
16265 SetVersion( $DBversion );
16266 print "Upgrade to $DBversion done (Bug 20773 - expirationdate filled for waiting holds)\n";
16269 $DBversion = '18.06.00.017';
16270 if( CheckVersion( $DBversion ) ) {
16271 $dbh->do(q|INSERT IGNORE INTO authorised_value_categories (category_name) VALUES ('ROADTYPE');|);
16272 SetVersion( $DBversion );
16273 print "Upgrade to $DBversion done (Bug 21144: Add ROADTYPE to default authorised values categories)\n";
16276 $DBversion = '18.06.00.018';
16277 if( CheckVersion( $DBversion ) ) {
16279 UPDATE items LEFT JOIN issues USING (itemnumber)
16280 SET items.onloan = NULL
16281 WHERE issues.itemnumber IS NULL
16283 SetVersion( $DBversion );
16284 print "Upgrade to $DBversion done (Bug 20487: Clear items.onloan for unissued items)\n";
16287 $DBversion = '18.06.00.019';
16288 if( CheckVersion( $DBversion ) ) {
16290 INSERT IGNORE INTO columns_settings (module, page, tablename, columnname, cannot_be_toggled, is_hidden) VALUES
16291 ("circ", "circulation", "issues-table", "collection", 0, 1),
16292 ("members", "moremember", "issues-table", "collection", 0, 1);
16294 SetVersion( $DBversion );
16295 print "Upgrade to $DBversion done (Bug 19719: Default to hiding collection code column)\n";
16298 $DBversion = '18.06.00.020';
16299 if( CheckVersion( $DBversion ) ) {
16300 if( !column_exists( 'branch_borrower_circ_rules', 'max_holds' ) ) {
16302 ALTER TABLE branch_borrower_circ_rules ADD COLUMN max_holds INT(4) NULL DEFAULT NULL AFTER maxonsiteissueqty
16305 if( !column_exists( 'default_borrower_circ_rules', 'max_holds' ) ) {
16307 ALTER TABLE default_borrower_circ_rules ADD COLUMN max_holds INT(4) NULL DEFAULT NULL AFTER maxonsiteissueqty
16310 SetVersion( $DBversion );
16311 print "Upgrade to $DBversion done (Bug 15524 - Set limit on maximum possible holds per patron by category)\n";
16314 $DBversion = '18.06.00.021';
16315 if( CheckVersion( $DBversion ) ) {
16316 my $dbh = C4::Context->dbh;
16317 unless ( C4::Context->preference('NorwegianPatronDBEnable') ) {
16319 DELETE FROM systempreferences
16320 WHERE variable IN ('NorwegianPatronDBEnable', 'NorwegianPatronDBEndpoint', 'NorwegianPatronDBUsername', 'NorwegianPatronDBPassword', 'NorwegianPatronDBSearchNLAfterLocalHit')
16322 if ( TableExists('borrower_sync') ) {
16323 $dbh->do(q|DROP TABLE borrower_sync|);
16326 SetVersion( $DBversion );
16327 print "Upgrade to $DBversion done (Bug 21068 - Remove system preferences NorwegianPatronDB*)\n";
16330 $DBversion = '18.06.00.022';
16331 if( CheckVersion( $DBversion ) ) {
16332 my $dbh = C4::Context->dbh;
16334 INSERT IGNORE INTO systempreferences ( `variable`, `value`, `options`, `explanation`, `type` ) VALUES
16335 ('HoldsAutoFill','0',NULL,'If on, librarian will not be asked if hold should be filled, it will be filled automatically','YesNo'),
16336 ('HoldsAutoFillPrintSlip','0',NULL,'If on, hold slip print dialog will be displayed automatically','YesNo')
16338 SetVersion( $DBversion );
16339 print "Upgrade to $DBversion done (Bug 19383 - Add ability to print hold receipts automatically)\n";
16342 $DBversion = '18.06.00.023';
16343 if( CheckVersion( $DBversion ) ) {
16344 if( !column_exists( 'aqorders', 'replacementprice' ) ){
16345 $dbh->do( "ALTER TABLE aqorders ADD COLUMN replacementprice DECIMAL(28,6)" );
16346 $dbh->do( "UPDATE aqorders set replacementprice = rrp WHERE replacementprice IS NULL" );
16348 SetVersion( $DBversion );
16349 print "Upgrade to $DBversion done (Bug 18639 - Add replacementprice field to aqorders table)\n";
16352 $DBversion = '18.06.00.024';
16353 if( CheckVersion( $DBversion ) ) {
16354 if( !column_exists( 'branches', 'pickup_location' ) ){
16355 $dbh->do( "ALTER TABLE branches ADD COLUMN pickup_location TINYINT(1) not null default 1" );
16357 SetVersion( $DBversion );
16358 print "Upgrade to $DBversion done (Bug 7534 - Let libraries have configuration for pickup locations)\n";
16361 $DBversion = '18.06.00.025';
16362 if( CheckVersion( $DBversion ) ) {
16364 INSERT IGNORE INTO systempreferences ( `variable`, `value`, `options`, `explanation`, `type` ) VALUES
16365 ('KohaManualBaseURL','https://koha-community.org/manual/','','Where is the Koha manual/documentation located?','Free'),
16366 ('KohaManualLanguage','en','en|ar|cs|es|de|fr|it|pt_BR|tr|zh_TW','What is the language of the online manual you want to use?','Choice')
16368 SetVersion( $DBversion );
16369 print "Upgrade to $DBversion done (Bug 19817: Add pref KohaManualLanguage and KohaManualBaseURL)\n";
16372 $DBversion = '18.06.00.026';
16373 if( CheckVersion( $DBversion ) ) {
16375 INSERT IGNORE INTO systempreferences (variable, value, options, explanation, type) VALUES ('ArticleRequestsLinkControl', 'always', 'always\|calc', 'Control display of article request link on search results', 'Choice')
16377 SetVersion( $DBversion );
16378 print "Upgrade to $DBversion done (Bug 17530 - Add pref ArticleRequestsLinkControl)\n";
16381 $DBversion = '18.06.00.027';
16382 if( CheckVersion( $DBversion ) ) {
16383 $dbh->do( "DROP TABLE IF EXISTS services_throttle" );
16384 SetVersion( $DBversion );
16385 print "Upgrade to $DBversion done (Bug 21235: Remove table services_throttle)\n";
16388 $DBversion = '18.06.00.028';
16389 if( CheckVersion( $DBversion ) ) {
16391 INSERT IGNORE INTO systempreferences ( `variable`, `value`, `options`, `explanation`, `type` ) VALUES
16392 ('HoldsSplitQueue','nothing','nothing|branch|itemtype|branch_itemtype','In the staff client, split the holds view by the given criteria','Choice'),
16393 ('HoldsSplitQueueNumbering', 'actual', 'actual|virtual', 'If the holds queue is split, decide if the acual priorities should be displayed', 'Choice');
16395 SetVersion( $DBversion );
16396 print "Upgrade to $DBversion done (Bug 19469 - Add ability to split view of holds view on record by pickup library and/or itemtype)\n";
16399 $DBversion = '18.06.00.029';
16400 if( CheckVersion( $DBversion ) ) {
16401 unless ( index_exists( 'subscription', 'by_biblionumber' ) ) {
16403 CREATE INDEX `by_biblionumber` ON `subscription` (`biblionumber`)
16406 SetVersion( $DBversion );
16407 print "Upgrade to $DBversion done (Bug 21288: Slowness in acquisition caused by GetInvoices\n";
16410 $DBversion = '18.06.00.030';
16411 if( CheckVersion( $DBversion ) ) {
16412 if ( column_exists( 'accountlines', 'dispute' ) ) {
16414 ALTER TABLE `accountlines`
16415 DROP COLUMN `dispute`
16418 SetVersion( $DBversion );
16419 print "Upgrade to $DBversion done (Bug 20777 - Remove unused field accountlines.dispute)\n";
16422 $DBversion = '18.06.00.031';
16423 if( CheckVersion( $DBversion ) ) {
16424 # Add table and add column
16425 unless (TableExists('patron_consent')) {
16427 CREATE TABLE patron_consent (id int AUTO_INCREMENT, borrowernumber int NOT NULL, type enum('GDPR_PROCESSING' ), given_on datetime, refused_on datetime, PRIMARY KEY (id), FOREIGN KEY (borrowernumber) REFERENCES borrowers (borrowernumber) ON DELETE CASCADE ON UPDATE CASCADE )
16430 unless ( column_exists( 'borrower_modifications', 'gdpr_proc_consent' ) ) {
16432 ALTER TABLE borrower_modifications ADD COLUMN gdpr_proc_consent datetime
16435 # Add two sysprefs too
16437 INSERT IGNORE INTO systempreferences ( variable, value, options, explanation, type ) VALUES ('PrivacyPolicyURL','',NULL,'This URL is used in messages about GDPR consents.', 'Free')
16440 INSERT IGNORE INTO systempreferences ( variable, value, options, explanation, type ) VALUES ('GDPR_Policy','','Enforced\|Permissive\|Disabled','General Data Protection Regulation - policy', 'Choice')
16442 SetVersion( $DBversion );
16443 print "Upgrade to $DBversion done (Bug 20819: Add patron_consent)\n";
16446 $DBversion = '18.06.00.032';
16447 if( CheckVersion( $DBversion ) ) {
16448 $dbh->do(q|ALTER TABLE items CHANGE COLUMN ccode ccode varchar(80) default NULL|);
16449 $dbh->do(q|ALTER TABLE deleteditems CHANGE COLUMN ccode ccode varchar(80) default NULL|);
16450 $dbh->do(q|ALTER TABLE branch_transfer_limits CHANGE COLUMN ccode ccode varchar(80) default NULL|);
16451 $dbh->do(q|ALTER TABLE course_items CHANGE COLUMN ccode ccode varchar(80) default NULL|);
16452 SetVersion( $DBversion );
16453 print "Upgrade to $DBversion done (Bug 5458: length of items.ccode disagrees with authorised_values.authorised_value)\n";
16456 $DBversion = '18.06.00.033';
16457 if( CheckVersion( $DBversion ) ) {
16459 INSERT IGNORE INTO systempreferences (variable,value,options,explanation,type) VALUES ('AdditionalFieldsInZ3950ResultSearch', '', 'NULL', 'Determines which MARC field/subfields are displayed in -Additional field- column in the result of a search Z3950', 'Free')
16461 SetVersion( $DBversion );
16462 print "Upgrade to $DBversion done (Bug 12747 - Add AdditionalFieldsInZ3950ResultSearch system preference)\n";
16465 $DBversion = '18.06.00.034';
16466 if( CheckVersion( $DBversion ) ) {
16468 INSERT IGNORE INTO systempreferences (variable,value,options,explanation,type)
16469 VALUES ('RecordedBooksClientSecret','','30','Client key for RecordedBooks integration','YesNo'),
16470 ('RecordedBooksLibraryID','','','Library ID for RecordedBooks integration','Integer'),
16471 ('RecordedBooksDomain','','','RecordedBooks domain','Free');
16473 SetVersion( $DBversion );
16474 print "Upgrade to $DBversion done (Bug 17602 - Integrate support for OneClickdigital/Recorded Books API)\n";
16477 $DBversion = '18.06.00.035';
16478 if( CheckVersion( $DBversion ) ) {
16480 UPDATE `systempreferences` SET options = 'US|CA|DE|FR|IN|JP|UK' WHERE variable = 'AmazonLocale' AND options='US|CA|DE|FR|JP|UK';
16482 SetVersion( $DBversion );
16483 print "Upgrade to $DBversion done (Bug 21403 - Add Indian Amazon Affiliate option to AmazonLocale setting)\n";
16487 $DBversion = '18.06.00.036';
16488 if( CheckVersion( $DBversion ) ) {
16489 unless (TableExists('circulation_rules')){
16491 CREATE TABLE `circulation_rules` (
16492 `id` int(11) NOT NULL auto_increment,
16493 `branchcode` varchar(10) NULL default NULL,
16494 `categorycode` varchar(10) NULL default NULL,
16495 `itemtype` varchar(10) NULL default NULL,
16496 `rule_name` varchar(32) NOT NULL,
16497 `rule_value` varchar(32) NOT NULL,
16498 PRIMARY KEY (`id`),
16499 CONSTRAINT `circ_rules_ibfk_1` FOREIGN KEY (`branchcode`) REFERENCES `branches` (`branchcode`) ON DELETE CASCADE ON UPDATE CASCADE,
16500 CONSTRAINT `circ_rules_ibfk_2` FOREIGN KEY (`categorycode`) REFERENCES `categories` (`categorycode`) ON DELETE CASCADE ON UPDATE CASCADE,
16501 CONSTRAINT `circ_rules_ibfk_3` FOREIGN KEY (`itemtype`) REFERENCES `itemtypes` (`itemtype`) ON DELETE CASCADE ON UPDATE CASCADE,
16502 KEY `rule_name` (`rule_name`),
16503 UNIQUE (`branchcode`,`categorycode`,`itemtype`,`rule_name`)
16504 ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
16507 if (column_exists('branch_borrower_circ_rules', 'max_holds') ){
16509 INSERT IGNORE INTO circulation_rules ( branchcode, categorycode, itemtype, rule_name, rule_value )
16510 SELECT branchcode, categorycode, NULL, 'max_holds', COALESCE( max_holds, '' ) FROM branch_borrower_circ_rules
16513 ALTER TABLE branch_borrower_circ_rules DROP COLUMN max_holds
16516 if (column_exists('default_borrower_circ_rules', 'max_holds') ){
16518 INSERT IGNORE INTO circulation_rules ( branchcode, categorycode, itemtype, rule_name, rule_value )
16519 SELECT NULL, categorycode, NULL, 'max_holds', COALESCE( max_holds, '' ) FROM default_borrower_circ_rules
16522 ALTER TABLE default_borrower_circ_rules DROP COLUMN max_holds
16525 SetVersion( $DBversion );
16526 print "Upgrade to $DBversion done (Bug 18887 - Introduce new table 'circulation_rules', use for 'max_holds' rules)\n";
16529 $DBversion = '18.06.00.037';
16530 if( CheckVersion( $DBversion ) ) {
16531 unless (TableExists('branches_overdrive')){
16533 CREATE TABLE branches_overdrive (
16534 `branchcode` VARCHAR( 10 ) NOT NULL ,
16535 `authname` VARCHAR( 255 ) NOT NULL ,
16536 PRIMARY KEY (`branchcode`) ,
16537 CONSTRAINT `branches_overdrive_ibfk_1` FOREIGN KEY (`branchcode`) REFERENCES `branches` (`branchcode`) ON DELETE CASCADE ON UPDATE CASCADE
16538 ) ENGINE = INNODB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci |
16541 $dbh->do("INSERT IGNORE INTO systempreferences (variable,value,explanation,options,type) VALUES ('OverDriveAuthname', '', 'Authname for OverDrive Patron Authentication, will be used as fallback if individual branch authname not set', NULL, 'Free');");
16542 $dbh->do("INSERT IGNORE INTO systempreferences (variable,value,explanation,options,type) VALUES ('OverDriveWebsiteID','', 'WebsiteID provided by OverDrive', NULL, 'Free');");
16543 $dbh->do("INSERT IGNORE INTO systempreferences (variable,value,explanation,options,type) VALUES ('OverDrivePasswordRequired','', 'Does the library require passwords for OverDrive SIP authentication', NULL, 'YesNo');");
16544 SetVersion( $DBversion );
16545 print "Upgrade to $DBversion done (Bug 21082 - Add overdrive patron auth method)\n";
16548 $DBversion = '18.06.00.038';
16549 if( CheckVersion( $DBversion ) ) {
16550 $dbh->do( "ALTER TABLE edifact_ean MODIFY branchcode VARCHAR(10) NULL DEFAULT NULL" );
16551 SetVersion( $DBversion );
16552 print "Upgrade to $DBversion done (Bug 21417 - EDI ordering fails when basket and EAN libraries do not match)\n";
16555 $DBversion = '18.06.00.039';
16556 if( CheckVersion( $DBversion ) ) {
16558 INSERT IGNORE INTO `permissions` (module_bit, code, description) VALUES(3, 'manage_circ_rules_from_any_libraries', 'Manage circ rules for any libraries');
16560 SetVersion( $DBversion );
16561 print "Upgrade to $DBversion done (Bug 15520 - Add more granular permission for only editing own library's circ rules)\n";
16564 $DBversion = '18.06.00.040';
16565 if( CheckVersion( $DBversion ) ) {
16566 # Stock Rotation Rotas
16567 unless (TableExists('stockrotationrotas')){
16569 CREATE TABLE `stockrotationrotas` (
16570 `rota_id` int(11) auto_increment, -- Stockrotation rota ID
16571 `title` varchar(100) NOT NULL, -- Title for this rota
16572 `description` text NOT NULL, -- Description for this rota
16573 `cyclical` tinyint(1) NOT NULL default 0, -- Should items on this rota keep cycling?
16574 `active` tinyint(1) NOT NULL default 0, -- Is this rota currently active?
16575 PRIMARY KEY (`rota_id`),
16576 CONSTRAINT `stockrotationrotas_title`
16578 ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
16581 # Stock Rotation Stages
16582 unless (TableExists('stockrotationstages')){
16584 CREATE TABLE `stockrotationstages` (
16585 `stage_id` int(11) auto_increment, -- Unique stage ID
16586 `position` int(11) NOT NULL, -- The position of this stage within its rota
16587 `rota_id` int(11) NOT NULL, -- The rota this stage belongs to
16588 `branchcode_id` varchar(10) NOT NULL, -- Branch this stage relates to
16589 `duration` int(11) NOT NULL default 4, -- The number of days items shoud occupy this stage
16590 PRIMARY KEY (`stage_id`),
16591 CONSTRAINT `stockrotationstages_rifk`
16592 FOREIGN KEY (`rota_id`)
16593 REFERENCES `stockrotationrotas` (`rota_id`)
16594 ON UPDATE CASCADE ON DELETE CASCADE,
16595 CONSTRAINT `stockrotationstages_bifk`
16596 FOREIGN KEY (`branchcode_id`)
16597 REFERENCES `branches` (`branchcode`)
16598 ON UPDATE CASCADE ON DELETE CASCADE
16599 ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
16602 # Stock Rotation Items
16603 unless (TableExists('stockrotationitems')){
16605 CREATE TABLE `stockrotationitems` (
16606 `itemnumber_id` int(11) NOT NULL, -- Itemnumber to link to a stage & rota
16607 `stage_id` int(11) NOT NULL, -- stage ID to link the item to
16608 `indemand` tinyint(1) NOT NULL default 0, -- Should this item be skipped for rotation?
16609 `fresh` tinyint(1) NOT NULL default 0, -- Flag showing item is only just added to rota
16610 PRIMARY KEY (itemnumber_id),
16611 CONSTRAINT `stockrotationitems_iifk`
16612 FOREIGN KEY (`itemnumber_id`)
16613 REFERENCES `items` (`itemnumber`)
16614 ON UPDATE CASCADE ON DELETE CASCADE,
16615 CONSTRAINT `stockrotationitems_sifk`
16616 FOREIGN KEY (`stage_id`)
16617 REFERENCES `stockrotationstages` (`stage_id`)
16618 ON UPDATE CASCADE ON DELETE CASCADE
16619 ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
16622 # System preferences
16624 INSERT IGNORE INTO `systempreferences` (`variable`,`value`,`explanation`,`options`,`type`)
16625 VALUES ('StockRotation','0','If ON, enables the stock rotation module','','YesNo'),
16626 ('RotationPreventTransfers','0','If ON, prevent any transfers for items on stock rotation rotas, except for stock rotation transfers','','YesNo');
16630 INSERT IGNORE INTO `userflags` (`bit`, `flag`, `flagdesc`, `defaulton`)
16631 VALUES (24, 'stockrotation', 'Manage stockrotation operations', 0);
16634 INSERT IGNORE INTO `permissions` (`module_bit`, `code`, `description`)
16635 VALUES (24, 'manage_rotas', 'Create, edit and delete rotas'),
16636 (24, 'manage_rota_items', 'Add and remove items from rotas');
16640 INSERT IGNORE INTO `letter` (`module`, `code`, `branchcode`, `name`, `is_html`, `title`, `content`, `message_transport_type`)
16641 VALUES ('circulation', 'SR_SLIP', '', 'Stock Rotation Slip', 0, 'Stockrotation Report', 'Stockrotation report for [% branch.name %]:\r\n\r\n[% IF branch.items.size %][% branch.items.size %] items to be processed for this branch.\r\n[% ELSE %]No items to be processed for this branch\r\n[% END %][% FOREACH item IN branch.items %][% IF item.reason ne \'in-demand\' %]Title: [% item.title %]\r\nAuthor: [% item.author %]\r\nCallnumber: [% item.callnumber %]\r\nLocation: [% item.location %]\r\nBarcode: [% item.barcode %]\r\nOn loan?: [% item.onloan %]\r\nStatus: [% item.reason %]\r\nCurrent Library: [% item.branch.branchname %] [% item.branch.branchcode %]\r\n\r\n[% END %][% END %]', 'email');
16643 print "Upgrade to $DBversion done (Bug 11897 - Add Stock Rotation Feature)\n";
16644 SetVersion( $DBversion );
16647 $DBversion = '18.06.00.041';
16648 if( CheckVersion( $DBversion ) ) {
16650 if( !column_exists( 'illrequests', 'price_paid' ) ) {
16652 ALTER TABLE illrequests
16653 ADD COLUMN price_paid varchar(20) DEFAULT NULL
16658 if( !column_exists( 'illrequestattributes', 'readonly' ) ) {
16660 ALTER TABLE illrequestattributes
16661 ADD COLUMN readonly tinyint(1) NOT NULL DEFAULT 1
16665 UPDATE illrequestattributes SET readonly = 1
16669 SetVersion( $DBversion );
16670 print "Upgrade to $DBversion done (Bug 20772 - Add illrequestattributes.readonly and illrequest.price_paid columns)\n";
16673 $DBversion = '18.06.00.042';
16674 if( CheckVersion( $DBversion ) ) {
16675 $dbh->do( "alter table statistics change column ccode ccode varchar(80) default NULL" );
16677 SetVersion( $DBversion );
16678 print "Upgrade to $DBversion done (Bug 21617: Make statistics.ccode longer)\n";
16681 $DBversion = "18.06.00.043";
16682 if ( CheckVersion($DBversion) ) {
16683 if ( !column_exists( 'issuingrules', 'holds_per_day' ) ) {
16685 ALTER TABLE `issuingrules`
16686 ADD COLUMN `holds_per_day` SMALLINT(6) DEFAULT NULL
16687 AFTER `holds_per_record`
16690 print "Upgrade to $DBversion done (Bug 15486: Restrict number of holds placed by day)\n";
16691 SetVersion($DBversion);
16694 $DBversion = '18.06.00.044';
16695 if( CheckVersion( $DBversion ) ) {
16696 unless( column_exists( 'creator_batches', 'description' ) ) {
16697 $dbh->do(q|ALTER TABLE creator_batches ADD description mediumtext default NULL AFTER batch_id|);
16699 SetVersion( $DBversion );
16700 print "Upgrade to $DBversion done (Bug 15766: Add column creator_batches.description)\n";
16703 $DBversion = '18.06.00.045';
16704 if( CheckVersion( $DBversion ) ) {
16706 INSERT IGNORE INTO message_transports
16707 (message_attribute_id,message_transport_type,is_digest,letter_module,letter_code)
16709 (2, 'phone', 0, 'circulation', 'PREDUE'),
16710 (2, 'phone', 1, 'circulation', 'PREDUEDGST'),
16711 (4, 'phone', 0, 'reserves', 'HOLD')
16713 SetVersion( $DBversion );
16714 print "Upgrade to $DBversion done (Bug 21639 - Add phone transports by default)\n";
16717 $DBversion = '18.06.00.046';
16718 if( CheckVersion( $DBversion ) ) {
16719 unless (TableExists('illcomments')) {
16721 CREATE TABLE illcomments (
16722 illcomment_id int(11) NOT NULL AUTO_INCREMENT, -- Unique ID of the comment
16723 illrequest_id bigint(20) unsigned NOT NULL, -- ILL request number
16724 borrowernumber integer DEFAULT NULL, -- Link to the user who made the comment (could be librarian, patron or ILL partner library)
16725 comment text DEFAULT NULL, -- The text of the comment
16726 timestamp timestamp DEFAULT CURRENT_TIMESTAMP, -- Date and time when the comment was made
16727 PRIMARY KEY ( illcomment_id ),
16728 CONSTRAINT illcomments_bnfk
16729 FOREIGN KEY ( borrowernumber )
16730 REFERENCES borrowers ( borrowernumber )
16731 ON UPDATE CASCADE ON DELETE CASCADE,
16732 CONSTRAINT illcomments_ifk
16733 FOREIGN KEY (illrequest_id)
16734 REFERENCES illrequests ( illrequest_id )
16735 ON UPDATE CASCADE ON DELETE CASCADE
16736 ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
16740 SetVersion( $DBversion );
16741 print "Upgrade to $DBversion done (Bug 18591 - Add comments to ILL requests)\n";
16744 $DBversion = '18.06.00.047';
16745 if( CheckVersion( $DBversion ) ) {
16746 # insert the authorized_value_category for CONTROL_NUM_SEQUENCE
16747 $dbh->do( "INSERT IGNORE INTO authorised_value_categories values ('CONTROL_NUM_SEQUENCE');" );
16748 SetVersion( $DBversion );
16749 print "Upgrade to $DBversion done (Bug 19263 - Advanced Editor - Rancor - Add auto control number (001) widget)\n";
16752 $DBversion = '18.06.00.048';
16753 if( CheckVersion( $DBversion ) ) {
16754 $dbh->do( "ALTER TABLE stockrotationrotas CHANGE COLUMN description description text" );
16755 SetVersion( $DBversion );
16756 print "Upgrade to $DBversion done (Bug 21682 - Remove default on stockrotationrotas.description)\n";
16759 $DBversion = '18.06.00.049';
16760 if( CheckVersion( $DBversion ) ) {
16762 UPDATE letter SET content = REPLACE(content,"item.reason ne \'in-demand\'","item.reason != \'in-demand\'")
16763 WHERE code="SR_SLIP";
16765 print "Upgrade to $DBversion done (Bug 21656 - Stock Rotation Notice, Template Toolkit Syntax Correction)\n";
16766 SetVersion( $DBversion );
16769 $DBversion = '18.06.00.050';
16770 if( CheckVersion( $DBversion ) ) {
16772 INSERT IGNORE INTO systempreferences (`variable`, `value`, `options`, `explanation`, `type`) VALUES ('OpacHiddenItemsExceptions','',NULL,'List of borrower categories, separated by |, that can see items otherwise hidden by OpacHiddenItems','Textarea');
16774 print "Upgrade to $DBversion done (Bug 14385 - Add OpacHiddenItemExceptions)\n";
16775 SetVersion( $DBversion );
16778 $DBversion = '18.06.00.051';
16779 if( CheckVersion( $DBversion ) ) {
16781 INSERT IGNORE INTO `systempreferences` (`variable`, `value`, `options`, `explanation`, `type`) VALUES
16782 ('AdlibrisCoversEnabled', '0', NULL, 'Display cover images in OPAC results and detail listing from Swedish retailer Adlibris.','YesNo'),
16783 ('AdlibrisCoversURL', 'http://www.adlibris.com/se/organisationer/showimagesafe.aspx', NULL, 'Base URL for Adlibris cover image web service.', 'Free');
16785 print "Upgrade to $DBversion done (Bug 8630 - Add covers from AdLibris to the OPAC and Intranet)\n";
16786 SetVersion( $DBversion );
16789 $DBversion = '18.06.00.052';
16790 if( CheckVersion( $DBversion ) ) {
16792 INSERT IGNORE INTO permissions (module_bit, code, description) VALUES
16793 ( 3, 'manage_sysprefs', 'Manage global system preferences'),
16794 ( 3, 'manage_libraries', 'Manage libraries and library groups'),
16795 ( 3, 'manage_itemtypes', 'Manage item types'),
16796 ( 3, 'manage_auth_values', 'Manage authorized values'),
16797 ( 3, 'manage_patron_categories', 'Manage patron categories'),
16798 ( 3, 'manage_patron_attributes', 'Manage extended patron attributes'),
16799 ( 3, 'manage_transfers', 'Manage library transfer limits and transport cost matrix'),
16800 ( 3, 'manage_item_circ_alerts', 'Manage item circulation alerts'),
16801 ( 3, 'manage_cities', 'Manage cities and towns'),
16802 ( 3, 'manage_marc_frameworks', 'Manage MARC bibliographic and authority frameworks'),
16803 ( 3, 'manage_keywords2koha_mappings', 'Manage keywords to Koha mappings'),
16804 ( 3, 'manage_classifications', 'Manage classification sources'),
16805 ( 3, 'manage_matching_rules', 'Manage record matching rules'),
16806 ( 3, 'manage_oai_sets', 'Manage OAI sets'),
16807 ( 3, 'manage_item_search_fields', 'Manage item search fields'),
16808 ( 3, 'manage_search_engine_config', 'Manage search engine configuration'),
16809 ( 3, 'manage_search_targets', 'Manage Z39.50 and SRU server configuration'),
16810 ( 3, 'manage_didyoumean', 'Manage Did you mean? configuration'),
16811 ( 3, 'manage_column_config', 'Manage column configuration'),
16812 ( 3, 'manage_sms_providers', 'Manage SMS cellular providers'),
16813 ( 3, 'manage_audio_alerts', 'Manage audio alerts'),
16814 ( 3, 'manage_usage_stats', 'Manage usage statistics settings');
16817 INSERT INTO user_permissions (borrowernumber, module_bit, code)
16818 SELECT borrowernumber, 3, 'manage_sysprefs' FROM borrowers WHERE borrowernumber IN (SELECT borrowernumber FROM user_permissions WHERE code = 'parameters_remaining_permissions');
16821 INSERT INTO user_permissions (borrowernumber, module_bit, code)
16822 SELECT borrowernumber, 3, 'manage_libraries' FROM borrowers WHERE borrowernumber IN (SELECT borrowernumber FROM user_permissions WHERE code = 'parameters_remaining_permissions');
16825 INSERT INTO user_permissions (borrowernumber, module_bit, code)
16826 SELECT borrowernumber, 3, 'manage_itemtypes' FROM borrowers WHERE borrowernumber IN (SELECT borrowernumber FROM user_permissions WHERE code = 'parameters_remaining_permissions');
16829 INSERT INTO user_permissions (borrowernumber, module_bit, code)
16830 SELECT borrowernumber, 3, 'manage_auth_values' FROM borrowers WHERE borrowernumber IN (SELECT borrowernumber FROM user_permissions WHERE code = 'parameters_remaining_permissions');
16833 INSERT INTO user_permissions (borrowernumber, module_bit, code)
16834 SELECT borrowernumber, 3, 'manage_patron_categories' FROM borrowers WHERE borrowernumber IN (SELECT borrowernumber FROM user_permissions WHERE code = 'parameters_remaining_permissions');
16837 INSERT INTO user_permissions (borrowernumber, module_bit, code)
16838 SELECT borrowernumber, 3, 'manage_patron_attributes' FROM borrowers WHERE borrowernumber IN (SELECT borrowernumber FROM user_permissions WHERE code = 'parameters_remaining_permissions');
16841 INSERT INTO user_permissions (borrowernumber, module_bit, code)
16842 SELECT borrowernumber, 3, 'manage_transfers' FROM borrowers WHERE borrowernumber IN (SELECT borrowernumber FROM user_permissions WHERE code = 'parameters_remaining_permissions');
16845 INSERT INTO user_permissions (borrowernumber, module_bit, code)
16846 SELECT borrowernumber, 3, 'manage_item_circ_alerts' FROM borrowers WHERE borrowernumber IN (SELECT borrowernumber FROM user_permissions WHERE code = 'parameters_remaining_permissions');
16849 INSERT INTO user_permissions (borrowernumber, module_bit, code)
16850 SELECT borrowernumber, 3, 'manage_cities' FROM borrowers WHERE borrowernumber IN (SELECT borrowernumber FROM user_permissions WHERE code = 'parameters_remaining_permissions');
16853 INSERT INTO user_permissions (borrowernumber, module_bit, code)
16854 SELECT borrowernumber, 3, 'manage_marc_frameworks' FROM borrowers WHERE borrowernumber IN (SELECT borrowernumber FROM user_permissions WHERE code = 'parameters_remaining_permissions');
16857 INSERT INTO user_permissions (borrowernumber, module_bit, code)
16858 SELECT borrowernumber, 3, 'manage_keywords2koha_mappings' FROM borrowers WHERE borrowernumber IN (SELECT borrowernumber FROM user_permissions WHERE code = 'parameters_remaining_permissions');
16861 INSERT INTO user_permissions (borrowernumber, module_bit, code)
16862 SELECT borrowernumber, 3, 'manage_classifications' FROM borrowers WHERE borrowernumber IN (SELECT borrowernumber FROM user_permissions WHERE code = 'parameters_remaining_permissions');
16865 INSERT INTO user_permissions (borrowernumber, module_bit, code)
16866 SELECT borrowernumber, 3, 'manage_matching_rules' FROM borrowers WHERE borrowernumber IN (SELECT borrowernumber FROM user_permissions WHERE code = 'parameters_remaining_permissions');
16869 INSERT INTO user_permissions (borrowernumber, module_bit, code)
16870 SELECT borrowernumber, 3, 'manage_oai_sets' FROM borrowers WHERE borrowernumber IN (SELECT borrowernumber FROM user_permissions WHERE code = 'parameters_remaining_permissions');
16873 INSERT INTO user_permissions (borrowernumber, module_bit, code)
16874 SELECT borrowernumber, 3, 'manage_item_search_fields' FROM borrowers WHERE borrowernumber IN (SELECT borrowernumber FROM user_permissions WHERE code = 'parameters_remaining_permissions');
16877 INSERT INTO user_permissions (borrowernumber, module_bit, code)
16878 SELECT borrowernumber, 3, 'manage_search_engine_config' FROM borrowers WHERE borrowernumber IN (SELECT borrowernumber FROM user_permissions WHERE code = 'parameters_remaining_permissions');
16881 INSERT INTO user_permissions (borrowernumber, module_bit, code)
16882 SELECT borrowernumber, 3, 'manage_search_targets' FROM borrowers WHERE borrowernumber IN (SELECT borrowernumber FROM user_permissions WHERE code = 'parameters_remaining_permissions');
16885 INSERT INTO user_permissions (borrowernumber, module_bit, code)
16886 SELECT borrowernumber, 3, 'manage_didyoumean' FROM borrowers WHERE borrowernumber IN (SELECT borrowernumber FROM user_permissions WHERE code = 'parameters_remaining_permissions');
16889 INSERT INTO user_permissions (borrowernumber, module_bit, code)
16890 SELECT borrowernumber, 3, 'manage_column_config' FROM borrowers WHERE borrowernumber IN (SELECT borrowernumber FROM user_permissions WHERE code = 'parameters_remaining_permissions');
16893 INSERT INTO user_permissions (borrowernumber, module_bit, code)
16894 SELECT borrowernumber, 3, 'manage_sms_providers' FROM borrowers WHERE borrowernumber IN (SELECT borrowernumber FROM user_permissions WHERE code = 'parameters_remaining_permissions');
16897 INSERT INTO user_permissions (borrowernumber, module_bit, code)
16898 SELECT borrowernumber, 3, 'manage_audio_alerts' FROM borrowers WHERE borrowernumber IN (SELECT borrowernumber FROM user_permissions WHERE code = 'parameters_remaining_permissions');
16901 INSERT INTO user_permissions (borrowernumber, module_bit, code)
16902 SELECT borrowernumber, 3, 'manage_usage_stats' FROM borrowers WHERE borrowernumber IN (SELECT borrowernumber FROM user_permissions WHERE code = 'parameters_remaining_permissions');
16905 INSERT INTO user_permissions (borrowernumber, module_bit, code)
16906 SELECT borrowernumber, 3, 'manage_item_search_fields' FROM borrowers WHERE flags & (1 << 2);
16908 SetVersion( $DBversion );
16909 print "Upgrade to $DBversion done (Bug 14391: Add granular permissions to the administration module)\n";
16912 $DBversion = '18.06.00.053';
16913 if( CheckVersion( $DBversion ) ) {
16914 $dbh->do( "INSERT IGNORE INTO systempreferences (variable,value,options,explanation,type) VALUES ('ItemsDeniedRenewal','','','This syspref allows to define custom rules for denying renewal of specific items.','Textarea')" );
16915 SetVersion( $DBversion );
16916 print "Upgrade to $DBversion done (Bug 15494 - Block renewals by arbitrary item values)\n";
16919 $DBversion = '18.06.00.054';
16920 if( CheckVersion( $DBversion ) ) {
16921 if( !column_exists( 'search_field', 'weight' ) ) {
16922 $dbh->do( "ALTER TABLE `search_field` ADD COLUMN `weight` decimal(5,2) DEFAULT NULL AFTER `type`" );
16924 SetVersion( $DBversion );
16925 print "Upgrade to $DBversion done (Bug 18316 - Add column search_field.weight)\n";
16928 $DBversion = '18.06.00.055';
16929 if( CheckVersion( $DBversion ) ) {
16930 unless( column_exists( 'issuingrules', 'note' ) ) {
16931 $dbh->do(q|ALTER TABLE `issuingrules` ADD `note` varchar(100) default NULL AFTER `article_requests`|);
16933 SetVersion( $DBversion );
16934 print "Upgrade to $DBversion done (Bug 12365: Add column issuingrules.note)\n";
16937 $DBversion = '18.06.00.056';
16938 if( CheckVersion( $DBversion ) ) {
16940 # All attributes we're potentially interested in
16941 my $ff_req = $dbh->selectall_arrayref(
16942 'SELECT a.illrequest_id, a.type, a.value '.
16943 'FROM illrequests r, illrequestattributes a '.
16944 'WHERE r.illrequest_id = a.illrequest_id '.
16945 'AND r.backend = "FreeForm"',
16949 # Before we go any further, identify whether we've done
16950 # this before, we test for the presence of "container_title"
16951 # We stop as soon as we find one
16952 foreach my $req(@{$ff_req}) {
16953 if ($req->{type} eq 'container_title') {
16954 warn "Upgrade already carried out";
16958 # Transform into a hashref with the key of the request ID
16960 foreach my $request(@{$ff_req}) {
16961 my $id = $request->{illrequest_id};
16962 if (!exists $requests->{$id}) {
16963 $requests->{$id} = {};
16965 $requests->{$id}->{$request->{type}} = $request->{value};
16968 # Transform any article requests
16969 my $transformed = {};
16970 foreach my $id(keys %{$requests}) {
16971 if (lc($requests->{$id}->{type}) eq 'article') {
16972 $transformed->{$id} = $requests->{$id};
16973 $transformed->{$id}->{type} = 'article';
16974 $transformed->{$id}->{container_title} = $transformed->{$id}->{title}
16975 if defined $transformed->{$id}->{title} &&
16976 length $transformed->{$id}->{title} > 0;
16977 $transformed->{$id}->{title} = $transformed->{$id}->{article_title}
16978 if defined $transformed->{$id}->{article_title} &&
16979 length $transformed->{$id}->{article_title} > 0;
16980 $transformed->{$id}->{author} = $transformed->{$id}->{article_author}
16981 if defined $transformed->{$id}->{article_author} &&
16982 length $transformed->{$id}->{article_author} > 0;
16983 $transformed->{$id}->{pages} = $transformed->{$id}->{article_pages}
16984 if defined $transformed->{$id}->{article_pages} &&
16985 length $transformed->{$id}->{article_pages} > 0;
16989 # Now write back the transformed data
16990 # Rather than selectively replace, we just remove all attributes we've
16991 # transformed and re-write them
16992 my @changed = keys %{$transformed};
16993 my $changed_str = join(',', @changed);
16995 if (scalar @changed > 0) {
16996 my ($raise_error) = $dbh->{RaiseError};
16997 $dbh->{AutoCommit} = 0;
16998 $dbh->{RaiseError} = 1;
17000 my $del = $dbh->do(
17001 "DELETE FROM illrequestattributes ".
17002 "WHERE illrequest_id IN ($changed_str)"
17004 foreach my $reqid(keys %{$transformed}) {
17005 my $attr = $transformed->{$reqid};
17006 foreach my $key(keys %{$attr}) {
17007 my $sth = $dbh->prepare(
17008 'INSERT INTO illrequestattributes '.
17009 '(illrequest_id, type, value) '.
17024 warn "Upgrade to $DBversion failed: $@\n";
17025 eval { $dbh->rollback };
17027 SetVersion( $DBversion );
17028 print "Upgrade to $DBversion done (Bug 21079 - Unify metadata schema across backends)\n";
17031 $dbh->{AutoCommit} = 1;
17032 $dbh->{RaiseError} = $raise_error;
17037 $DBversion = '18.06.00.057';
17038 if( CheckVersion( $DBversion ) ) {
17039 # System preferences
17041 INSERT IGNORE INTO `systempreferences` (`variable`,`value`,`explanation`,`options`,`type`)
17042 VALUES ('showLastPatron','0','','If ON, enables the last patron feature in the intranet','YesNo');
17044 SetVersion( $DBversion );
17045 print "Upgrade to $DBversion done (Bug 20312 - Add showLastPatron systempreference)\n";
17048 $DBversion = '18.06.00.058';
17049 if( CheckVersion( $DBversion ) ) {
17051 INSERT IGNORE INTO systempreferences (`variable`, `value`, `options`, `explanation`, `type`) VALUES
17052 ('MarcFieldForCreatorId','',NULL,'Where to store the borrowernumber of the record''s creator','Free'),
17053 ('MarcFieldForCreatorName','',NULL,'Where to store the name of the record''s creator','Free'),
17054 ('MarcFieldForModifierId','',NULL,'Where to store the borrowernumber of the record''s last modifier','Free'),
17055 ('MarcFieldForModifierName','',NULL,'Where to store the name of the record''s last modifier','Free')
17058 SetVersion( $DBversion );
17059 print "Upgrade to $DBversion done (Bug 19349 - Add system preferences MarcFieldForCreatorId, MarcFieldForCreatorName, MarcFieldForModifierId, MarcFieldForModifierName)\n";
17062 $DBversion = '18.06.00.059';
17063 if( CheckVersion( $DBversion ) ) {
17065 INSERT IGNORE INTO systempreferences ( `variable`, `value`, `options`, `explanation`, `type`) VALUES ('EmailSMSSendDriverFromAddress', '', '', 'Email SMS send driver from address override', 'Free');
17067 SetVersion( $DBversion );
17068 print "Upgrade to $DBversion done (Bug 20356 - Add EmailSMSSendDriverFromAddress system preference)\n";
17071 $DBversion = '18.06.00.060';
17072 if( CheckVersion( $DBversion ) ) {
17073 unless( TableExists( 'class_split_rules' ) ) {
17075 CREATE TABLE class_split_rules (
17076 class_split_rule varchar(10) NOT NULL default '',
17077 description LONGTEXT,
17078 split_routine varchar(30) NOT NULL default '',
17079 split_regex varchar(255) NOT NULL default '',
17080 PRIMARY KEY (class_split_rule),
17081 UNIQUE KEY class_split_rule_idx (class_split_rule)
17082 ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci
17086 ALTER TABLE class_sources
17087 ADD COLUMN class_split_rule varchar(10) NOT NULL default ''
17088 AFTER class_sort_rule
17092 UPDATE class_sources
17093 SET class_split_rule = class_sort_rule
17097 UPDATE class_sources
17098 SET class_split_rule = 'generic'
17099 WHERE class_split_rule NOT IN('dewey', 'generic', 'lcc')
17103 INSERT INTO class_split_rules(class_split_rule, description, split_routine)
17105 ('dewey', 'Default sorting rules for DDC', 'Dewey'),
17106 ('lcc', 'Default sorting rules for LCC', 'LCC'),
17107 ('generic', 'Generic call number sorting rules', 'Generic')
17111 ALTER TABLE class_sources
17112 ADD CONSTRAINT class_source_ibfk_2 FOREIGN KEY (class_split_rule)
17113 REFERENCES class_split_rules (class_split_rule)
17117 SetVersion( $DBversion );
17118 print "Upgrade to $DBversion done (Bug 15836 - Add class_sort_rules.split_routine and split_regex)\n";
17121 $DBversion = '18.06.00.061';
17122 if ( CheckVersion($DBversion) ) {
17124 INSERT IGNORE INTO `systempreferences` (`variable`,`value`,`explanation`,`options`,`type`) VALUES
17125 ('ElasticsearchIndexStatus_biblios', '0', 'Biblios index status', NULL, NULL),
17126 ('ElasticsearchIndexStatus_authorities', '0', 'Authorities index status', NULL, NULL)
17128 SetVersion($DBversion);
17129 print "Upgrade to $DBversion done (Bug 19893 - Add elasticsearch index status preferences)\n";
17132 $DBversion = '18.06.00.062';
17133 if( CheckVersion( $DBversion ) ) {
17134 $dbh->do( "INSERT IGNORE INTO authorised_value_categories (category_name) VALUES ('PA_CLASS');");
17135 SetVersion( $DBversion );
17136 print "Upgrade to $DBversion done (Bug 21730: Add new authorised value category PA_CLASS)\n";
17139 $DBversion = '18.11.00.000';
17140 if( CheckVersion( $DBversion ) ) {
17141 SetVersion( $DBversion );
17142 print "Upgrade to $DBversion done (18.11.00 release)\n";
17145 $DBversion = '18.12.00.000';
17146 if( CheckVersion( $DBversion ) ) {
17147 SetVersion( $DBversion );
17148 print "Upgrade to $DBversion done (...and Steven!)\n";
17151 $DBversion = '18.12.00.001';
17152 if( CheckVersion( $DBversion ) ) {
17154 UPDATE permissions SET code = 'manage_didyoumean' WHERE code = 'manage_didyouean';
17157 UPDATE user_permissions SET code = 'manage_didyoumean' WHERE code = 'manage_didyouean';
17159 SetVersion( $DBversion );
17160 print "Upgrade to $DBversion (Bug 21961 - Fix typo in manage_didyoumean permission)\n";
17163 $DBversion = '18.12.00.002';
17164 if( CheckVersion( $DBversion ) ) {
17165 my $sth = $dbh->prepare(q|SELECT * FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS WHERE CONSTRAINT_NAME='accountlines_ibfk_1'|);
17167 if ($sth->fetchrow_hashref) {
17169 ALTER TABLE accountlines DROP FOREIGN KEY accountlines_ibfk_1;
17172 ALTER TABLE accountlines CHANGE COLUMN borrowernumber borrowernumber INT(11) DEFAULT NULL;
17175 ALTER TABLE accountlines ADD CONSTRAINT accountlines_ibfk_borrowers FOREIGN KEY (borrowernumber) REFERENCES borrowers (borrowernumber) ON DELETE SET NULL ON UPDATE CASCADE;
17178 SetVersion( $DBversion );
17179 print "Upgrade to $DBversion done (Bug 21065 - Set ON DELETE SET NULL on accountlines.borrowernumber)\n";
17182 $DBversion = '18.12.00.003';
17183 if( CheckVersion( $DBversion ) ) {
17184 # On a new installation the class_sources.sql will have failed, so we need to add all missing data
17185 my( $sort_cnt ) = $dbh->selectrow_array( q|SELECT COUNT(*) FROM class_sort_rules|);
17187 $dbh->do(q|INSERT INTO `class_sort_rules` (`class_sort_rule`, `description`, `sort_routine`) VALUES
17188 ('dewey', 'Default filing rules for DDC', 'Dewey'),
17189 ('lcc', 'Default filing rules for LCC', 'LCC'),
17190 ('generic', 'Generic call number filing rules', 'Generic')
17194 my ( $split_cnt ) = $dbh->selectrow_array( q|SELECT COUNT(*) FROM class_split_rules|);
17195 if( !$split_cnt ) {
17196 $dbh->do(q|INSERT INTO `class_split_rules` (`class_split_rule`, `description`, `split_routine`) VALUES
17197 ('dewey', 'Default splitting rules for DDC', 'Dewey'),
17198 ('lcc', 'Default splitting rules for LCC', 'LCC'),
17199 ('generic', 'Generic call number splitting rules', 'Generic')
17203 my( $source_cnt ) = $dbh->selectrow_array( q|SELECT COUNT(*) FROM class_sources|);
17204 if( !$source_cnt ) {
17205 $dbh->do(q|INSERT INTO `class_sources` (`cn_source`, `description`, `used`, `class_sort_rule`, `class_split_rule`) VALUES
17206 ('ddc', 'Dewey Decimal Classification', 1, 'dewey', 'dewey'),
17207 ('lcc', 'Library of Congress Classification', 1, 'lcc', 'lcc'),
17208 ('udc', 'Universal Decimal Classification', 0, 'generic', 'generic'),
17209 ('sudocs', 'SuDoc Classification (U.S. GPO)', 0, 'generic', 'generic'),
17210 ('anscr', 'ANSCR (Sound Recordings)', 0, 'generic', 'generic'),
17211 ('z', 'Other/Generic Classification Scheme', 0, 'generic', 'generic')
17216 SetVersion( $DBversion );
17217 print "Upgrade to $DBversion done (Bug 22024 - Add missing splitting rule definitions)\n";
17220 $DBversion = '18.12.00.004';
17221 if( CheckVersion( $DBversion ) ) {
17222 if( !column_exists( 'accountlines', 'branchcode' ) ) {
17223 $dbh->do("ALTER TABLE accountlines ADD branchcode VARCHAR( 10 ) NULL DEFAULT NULL AFTER manager_id");
17224 $dbh->do("ALTER TABLE accountlines ADD CONSTRAINT accountlines_ibfk_branches FOREIGN KEY (branchcode) REFERENCES branches (branchcode) ON DELETE SET NULL ON UPDATE CASCADE");
17226 SetVersion( $DBversion );
17227 print "Upgrade to $DBversion done (Bug 19066 - Add branchcode to accountlines)\n";
17230 $DBversion = '18.12.00.005';
17231 if( CheckVersion( $DBversion ) ) {
17233 INSERT IGNORE INTO systempreferences ( `variable`, `value`, `options`, `explanation`, `type` ) VALUES
17234 ('OverDriveUsername','cardnumber','cardnumber|userid','Which patron information should be passed as OverDrive username','Choice')
17236 SetVersion( $DBversion );
17237 print "Upgrade to $DBversion done (Bug 22030: Add OverDriveUsername syspref)\n";
17240 $DBversion = '18.12.00.006';
17241 if( CheckVersion( $DBversion ) ) {
17243 INSERT IGNORE INTO systempreferences (variable,value,explanation,options,type) VALUES
17244 ('AccountAutoReconcile','0','If enabled, patron balances will get reconciled automatically on each transaction.',NULL,'YesNo');
17246 SetVersion($DBversion);
17247 print "Upgrade to $DBversion done (Bug 21915 - Add a way to automatically reconcile balance for patrons)\n";
17250 $DBversion = '18.12.00.007';
17251 if( CheckVersion( $DBversion ) ) {
17252 if( column_exists( 'issuingrules', 'chargename' ) ) {
17253 $dbh->do( "ALTER TABLE issuingrules DROP chargename" );
17255 SetVersion( $DBversion );
17256 print "Upgrade to $DBversion done (Bug 21753: Drop chargename from issuingrules )\n";
17259 $DBversion = '18.12.00.008';
17260 if( CheckVersion( $DBversion ) ) {
17261 if( !column_exists( 'subscription', 'mana_id' ) ) {
17262 $dbh->do( "ALTER TABLE subscription ADD mana_id int(11) NULL DEFAULT NULL" );
17265 if( !column_exists( 'saved_sql', 'mana_id' ) ) {
17266 $dbh->do( "ALTER TABLE saved_sql ADD mana_id int(11) NULL DEFAULT NULL" );
17269 INSERT IGNORE INTO systempreferences ( `variable`, `value`, `options`, `explanation`, `type` ) VALUES
17270 ('Mana','2',NULL,'request to Mana Webservice. Mana centralize common information between other Koha to facilitate the creation of new subscriptions, vendors, report queries etc... You can search, share, import and comment the content of Mana.','Choice');
17273 INSERT IGNORE INTO systempreferences ( `variable`, `value`, `options`, `explanation`, `type` ) VALUES
17274 ('AutoShareWithMana','','','defines datas automatically shared with mana','multiple');
17277 INSERT IGNORE INTO systempreferences ( `variable`, `value`, `options`, `explanation`, `type` ) VALUES
17278 ('ManaToken','',NULL,'Security token used for authentication on Mana KB service (anti spam)','Textarea');
17280 SetVersion( $DBversion );
17281 print "Upgrade to $DBversion done (Bug 17047 - Mana knowledge base)\n";
17284 $DBversion = '18.12.00.009';
17285 if( CheckVersion( $DBversion ) ) {
17287 INSERT IGNORE INTO systempreferences (variable, value, options, explanation, type) VALUES ('FallbackToSMSIfNoEmail', 0, 'Enable|Disable', 'Send messages by SMS if no patron email is defined', 'YesNo');
17289 SetVersion( $DBversion );
17290 print "Upgrade to $DBversion done (Bug 21241 - Add FallbackToSMSIfNoEmail syspref )\n";
17293 $DBversion = '18.12.00.010';
17294 if( CheckVersion( $DBversion ) ) {
17296 INSERT IGNORE INTO systempreferences
17297 ( variable, value, options, explanation, type )
17299 ('RESTPublicAPI','1',NULL,'If enabled, the REST API will expose the /public endpoints.','YesNo')
17302 # Always end with this (adjust the bug info)
17303 SetVersion( $DBversion );
17304 print "Upgrade to $DBversion done (Bug 22061 - Add a /public namespace that can be switched on/off)\n";
17307 $DBversion = '18.12.00.011';
17308 if( CheckVersion( $DBversion ) ) {
17309 if ( column_exists( 'biblio_metadata', 'marcflavour' ) ) {
17311 ALTER TABLE biblio_metadata
17312 CHANGE COLUMN marcflavour `schema` VARCHAR(16)
17315 if ( column_exists( 'deletedbiblio_metadata', 'marcflavour' ) ) {
17317 ALTER TABLE deletedbiblio_metadata
17318 CHANGE COLUMN marcflavour `schema` VARCHAR(16)
17321 SetVersion( $DBversion );
17322 print "Upgrade to $DBversion done (Bug 22155 - biblio_metadata.marcflavour should be renamed 'schema')\n";
17325 $DBversion = '18.12.00.012';
17326 if( CheckVersion( $DBversion ) ) {
17328 INSERT IGNORE INTO systempreferences
17329 (variable, value, options, explanation, type )
17331 ('RESTBasicAuth','0',NULL,'If enabled, Basic authentication is enabled for the REST API.','YesNo')
17333 SetVersion( $DBversion );
17334 print "Upgrade to $DBversion done (Bug 22132 - Add Basic authentication)\n";
17337 $DBversion = '18.12.00.013';
17338 if( CheckVersion( $DBversion ) ) {
17340 INSERT IGNORE INTO permissions (module_bit, code, description) VALUES ( 3, 'manage_mana', 'Manage Mana KB content sharing');
17342 SetVersion( $DBversion );
17343 print "Upgrade to $DBversion done (Bug 22198 - Add ghranular permission setting for Mana KB)\n";
17346 $DBversion = '18.12.00.014';
17347 if( CheckVersion( $DBversion ) ) {
17348 unless( foreign_key_exists( 'messages', 'messages_borrowernumber' ) ) {
17350 DELETE m FROM messages m
17351 LEFT JOIN borrowers b ON m.borrowernumber=b.borrowernumber
17352 WHERE b.borrowernumber IS NULL
17355 ALTER TABLE messages
17356 ADD CONSTRAINT messages_borrowernumber
17357 FOREIGN KEY (borrowernumber) REFERENCES borrowers (borrowernumber) ON DELETE CASCADE ON UPDATE CASCADE
17360 SetVersion( $DBversion );
17361 print "Upgrade to $DBversion done (Bug 13515 - Add a FOREIGN KEY constaint on messages.borrowernumber)\n";
17364 $DBversion = '18.12.00.015';
17365 if( CheckVersion( $DBversion ) ) {
17366 $dbh->do( "UPDATE action_logs SET info = REPLACE(info,'cardnumber_replaced','cardnumber'), timestamp = timestamp WHERE module='MEMBERS' AND action='MODIFY'" );
17367 $dbh->do( "UPDATE action_logs SET info = REPLACE(info,'previous_cardnumber','before'), timestamp = timestamp WHERE module='MEMBERS' AND action='MODIFY'" );
17368 $dbh->do( "UPDATE action_logs SET info = REPLACE(info,'new_cardnumber','after'), timestamp = timestamp WHERE module='MEMBERS' AND action='MODIFY'" );
17370 SetVersion( $DBversion );
17371 print "Upgrade to $DBversion done (Bug 3820 - Update patron modification logs)\n";
17374 $DBversion = '18.12.00.016';
17375 if( CheckVersion( $DBversion ) ) {
17377 if ( !column_exists( 'illrequests', 'status_alias' ) ) {
17378 # Fresh upgrade, just add the column and constraint
17379 $dbh->do( "ALTER TABLE illrequests ADD COLUMN status_alias varchar(80) DEFAULT NULL AFTER status" );
17381 # Migrate all existing foreign keys from referencing authorised_values.id
17382 # to referencing authorised_values.authorised_value
17383 # First remove the foreign key constraint and index
17384 if ( foreign_key_exists( 'illrequests', 'illrequests_safk' ) ) {
17385 $dbh->do( "ALTER TABLE illrequests DROP FOREIGN KEY illrequests_safk");
17387 if ( index_exists( 'illrequests', 'illrequests_safk' ) ) {
17388 $dbh->do( "DROP INDEX illrequests_safk ON illrequests" );
17390 # Now change the illrequests.status_alias column definition from int to varchar
17391 $dbh->do( "ALTER TABLE illrequests MODIFY COLUMN status_alias varchar(80)" );
17392 # Now replace all references to authorised_values.id with their
17393 # corresponding authorised_values.authorised_value
17394 my $sth = $dbh->prepare( "SELECT illrequest_id, status_alias FROM illrequests WHERE status_alias IS NOT NULL" );
17396 while (my @row = $sth->fetchrow_array()) {
17397 my $r_id = $row[0];
17398 my $av_id = $row[1];
17399 # Get the authorised value's authorised_value value
17400 my ($av_val) = $dbh->selectrow_array( "SELECT authorised_value FROM authorised_values WHERE id = ?", {}, $av_id );
17401 # Now update illrequests.status_alias
17403 $dbh->do( "UPDATE illrequests SET status_alias = ? WHERE illrequest_id = ?", {}, ($av_val, $r_id) );
17407 if ( !foreign_key_exists( 'illrequests', 'illrequests_safk' ) ) {
17408 $dbh->do( "ALTER TABLE illrequests ADD CONSTRAINT illrequests_safk FOREIGN KEY (status_alias) REFERENCES authorised_values(authorised_value) ON UPDATE CASCADE ON DELETE SET NULL" );
17410 $dbh->do( "INSERT IGNORE INTO authorised_value_categories SET category_name = 'ILLSTATUS'");
17412 SetVersion( $DBversion );
17413 print "Upgrade to $DBversion done (Bug 20581 - Allow manual selection of custom ILL request statuses)\n";
17416 $DBversion = '18.12.00.017';
17417 if( CheckVersion( $DBversion ) ) {
17419 INSERT IGNORE INTO account_offset_types ( type ) VALUES ( 'fine_increase' ), ( 'fine_decrease' );
17422 UPDATE account_offsets SET type = 'fine_increase' WHERE type = 'Fine Update' AND amount > 0;
17425 UPDATE account_offsets SET type = 'fine_decrease' WHERE type = 'Fine Update' AND amount < 0;
17429 DELETE FROM account_offset_types WHERE type = 'Fine Update';
17431 SetVersion( $DBversion );
17432 print "Upgrade to $DBversion done (Bug 21747 - Update account_offset_types to include 'fine_increase' and 'fine_decrease')\n";
17435 $DBversion = '18.12.00.018';
17436 if( CheckVersion( $DBversion ) ) {
17437 $dbh->do( "UPDATE `search_field` SET `name` = 'date-of-publication', `label` = 'date-of-publication' WHERE `name` = 'pubdate'" );
17438 $dbh->do( "UPDATE `search_field` SET `name` = 'title-series', `label` = 'title-series' WHERE `name` = 'se'" );
17439 $dbh->do( "UPDATE `search_field` SET `name` = 'identifier-standard', `label` = 'identifier-standard' WHERE `name` = 'identifier-standard'" );
17440 $dbh->do( "UPDATE `search_field` SET `name` = 'author', `label` = 'author' WHERE `name` = 'author'" );
17441 $dbh->do( "UPDATE `search_field` SET `name` = 'control-number', `label` = 'control-number' WHERE `name` = 'control-number'" );
17442 $dbh->do( "UPDATE `search_field` SET `name` = 'place-of-publication', `label` = 'place-of-publication' WHERE `name` = 'place'" );
17443 $dbh->do( "UPDATE `search_field` SET `name` = 'date-of-acquisition', `label` = 'date-of-acquisition' WHERE `name` = 'acqdate'" );
17444 $dbh->do( "UPDATE `search_field` SET `name` = 'isbn', `label` = 'isbn' WHERE `name` = 'isbn'" );
17445 $dbh->do( "UPDATE `search_field` SET `name` = 'koha-auth-number', `label` = 'koha-auth-number' WHERE `name` = 'an'" );
17446 $dbh->do( "UPDATE `search_field` SET `name` = 'subject', `label` = 'subject' WHERE `name` = 'subject'" );
17447 $dbh->do( "UPDATE `search_field` SET `name` = 'publisher', `label` = 'publisher' WHERE `name` = 'publisher'" );
17448 $dbh->do( "UPDATE `search_field` SET `name` = 'record-source', `label` = 'record-source' WHERE `name` = 'record-source'" );
17449 $dbh->do( "UPDATE `search_field` SET `name` = 'title', `label` = 'title' WHERE `name` = 'title'" );
17450 $dbh->do( "UPDATE `search_field` SET `name` = 'local-classification', `label` = 'local-classification' WHERE `name` = 'local-classification'" );
17451 $dbh->do( "UPDATE `search_field` SET `name` = 'bib-level', `label` = 'bib-level' WHERE `name` = 'bib-level'" );
17452 $dbh->do( "UPDATE `search_field` SET `name` = 'microform-generation', `label` = 'microform-generation' WHERE `name` = 'microform-generation'" );
17453 $dbh->do( "UPDATE `search_field` SET `name` = 'material-type', `label` = 'material-type' WHERE `name` = 'material-type'" );
17454 $dbh->do( "UPDATE `search_field` SET `name` = 'bgf-number', `label` = 'bgf-number' WHERE `name` = 'bgf-number'" );
17455 $dbh->do( "UPDATE `search_field` SET `name` = 'number-db', `label` = 'number-db' WHERE `name` = 'number-db'" );
17456 $dbh->do( "UPDATE `search_field` SET `name` = 'number-natl-biblio', `label` = 'number-natl-biblio' WHERE `name` = 'number-natl-biblio'" );
17457 $dbh->do( "UPDATE `search_field` SET `name` = 'number-legal-deposit', `label` = 'number-legal-deposit' WHERE `name` = 'number-legal-deposit'" );
17458 $dbh->do( "UPDATE `search_field` SET `name` = 'issn', `label` = 'issn' WHERE `name` = 'issn'" );
17459 $dbh->do( "UPDATE `search_field` SET `name` = 'local-number', `label` = 'local-number' WHERE `name` = 'local-number'" );
17460 $dbh->do( "UPDATE `search_field` SET `name` = 'suppress', `label` = 'supress' WHERE `name` = 'suppress'" );
17461 $dbh->do( "UPDATE `search_field` SET `name` = 'bnb-card-number', `label` = 'bnb-card-number' WHERE `name` = 'bnb-card-number'" );
17462 $dbh->do( "UPDATE `search_field` SET `name` = 'date/time-last-modified', `label` = 'date/time-last-modified' WHERE `name` = 'date-time-last-modified'" );
17463 $dbh->do( "DELETE FROM `search_field` WHERE `name` = 'lc-cardnumber'" );
17464 $dbh->do( "DELETE FROM `search_marc_map` WHERE `id` NOT IN(SELECT `search_marc_map_id` FROM `search_marc_to_field`)" );
17465 SetVersion( $DBversion );
17466 print "Upgrade to $DBversion done (Bug 19575 - Use canonical field names and resolve aliased fields)\n";
17469 $DBversion = '18.12.00.019';
17470 if( CheckVersion( $DBversion ) ) {
17472 INSERT IGNORE INTO account_offset_types ( type ) VALUES ( 'Reserve Fee' );
17475 SetVersion( $DBversion );
17476 print "Upgrade to $DBversion done (Bug 21728 - Add 'Reserve Fee' to the account_offset_types table if missing)\n";
17479 $DBversion = '18.12.00.020';
17480 if( CheckVersion( $DBversion ) ) {
17481 if ( TableExists( 'branch_borrower_circ_rules' ) ) {
17482 if ( column_exists( 'branch_borrower_circ_rules', 'maxissueqty' ) ) {
17484 INSERT INTO circulation_rules ( categorycode, branchcode, itemtype, rule_name, rule_value )
17485 SELECT categorycode, branchcode, NULL, 'patron_maxissueqty', COALESCE( maxissueqty, '' )
17486 FROM branch_borrower_circ_rules
17489 INSERT INTO circulation_rules ( categorycode, branchcode, itemtype, rule_name, rule_value )
17490 SELECT categorycode, branchcode, NULL, 'patron_maxonsiteissueqty', COALESCE( maxonsiteissueqty, '' )
17491 FROM branch_borrower_circ_rules
17493 $dbh->do("DROP TABLE branch_borrower_circ_rules");
17497 if ( TableExists( 'default_borrower_circ_rules' ) ) {
17498 if ( column_exists( 'default_borrower_circ_rules', 'maxissueqty' ) ) {
17500 INSERT INTO circulation_rules ( categorycode, branchcode, itemtype, rule_name, rule_value )
17501 SELECT categorycode, NULL, NULL, 'patron_maxissueqty', COALESCE( maxissueqty, '' )
17502 FROM default_borrower_circ_rules
17505 INSERT INTO circulation_rules ( categorycode, branchcode, itemtype, rule_name, rule_value )
17506 SELECT categorycode, NULL, NULL, 'patron_maxonsiteissueqty', COALESCE( maxonsiteissueqty, '' )
17507 FROM default_borrower_circ_rules
17509 $dbh->do("DROP TABLE default_borrower_circ_rules");
17513 if ( column_exists( 'default_circ_rules', 'maxissueqty' ) ) {
17515 INSERT INTO circulation_rules ( categorycode, branchcode, itemtype, rule_name, rule_value )
17516 SELECT NULL, NULL, NULL, 'patron_maxissueqty', COALESCE( maxissueqty, '' )
17517 FROM default_circ_rules
17520 INSERT INTO circulation_rules ( categorycode, branchcode, itemtype, rule_name, rule_value )
17521 SELECT NULL, NULL, NULL, 'patron_maxonsiteissueqty', COALESCE( maxonsiteissueqty, '' )
17522 FROM default_circ_rules
17524 $dbh->do("ALTER TABLE default_circ_rules DROP COLUMN maxissueqty, DROP COLUMN maxonsiteissueqty");
17527 if ( column_exists( 'default_branch_circ_rules', 'maxissueqty' ) ) {
17529 INSERT INTO circulation_rules ( categorycode, branchcode, itemtype, rule_name, rule_value )
17530 SELECT NULL, branchcode, NULL, 'patron_maxissueqty', COALESCE( maxissueqty, '' )
17531 FROM default_branch_circ_rules
17534 INSERT INTO circulation_rules ( categorycode, branchcode, itemtype, rule_name, rule_value )
17535 SELECT NULL, NULL, NULL, 'patron_maxonsiteissueqty', COALESCE( maxonsiteissueqty, '' )
17536 FROM default_branch_circ_rules
17538 $dbh->do("ALTER TABLE default_branch_circ_rules DROP COLUMN maxissueqty, DROP COLUMN maxonsiteissueqty");
17541 if ( column_exists( 'issuingrules', 'maxissueqty' ) ) {
17542 # Cleaning invalid rules before, to avoid FK contraints to fail
17544 DELETE FROM issuingrules WHERE categorycode != '*' AND categorycode NOT IN (SELECT categorycode FROM categories);
17547 DELETE FROM issuingrules WHERE branchcode != '*' AND branchcode NOT IN (SELECT branchcode FROM branches);
17550 DELETE FROM issuingrules WHERE itemtype != '*' AND itemtype NOT IN (SELECT itemtype FROM itemtypes);
17554 INSERT INTO circulation_rules ( categorycode, branchcode, itemtype, rule_name, rule_value )
17555 SELECT IF(categorycode='*', NULL, categorycode),
17556 IF(branchcode='*', NULL, branchcode),
17557 IF(itemtype='*', NULL, itemtype),
17559 COALESCE( maxissueqty, '' )
17563 INSERT INTO circulation_rules ( categorycode, branchcode, itemtype, rule_name, rule_value )
17564 SELECT IF(categorycode='*', NULL, categorycode),
17565 IF(branchcode='*', NULL, branchcode),
17566 IF(itemtype='*', NULL, itemtype),
17567 'maxonsiteissueqty',
17568 COALESCE( maxonsiteissueqty, '' )
17571 $dbh->do("ALTER TABLE issuingrules DROP COLUMN maxissueqty, DROP COLUMN maxonsiteissueqty");
17574 SetVersion( $DBversion );
17575 print "Upgrade to $DBversion done (Bug 18925 - Move maxissueqty and maxonsiteissueqty to circulation_rules)\n";
17578 $DBversion = '18.12.00.021';
17579 if ( CheckVersion($DBversion) ) {
17581 if ( !column_exists( 'itemtypes', 'rentalcharge_daily' ) ) {
17582 $dbh->do("ALTER TABLE `itemtypes` ADD COLUMN `rentalcharge_daily` decimal(28,6) default NULL AFTER `rentalcharge`");
17585 if ( !column_exists( 'itemtypes', 'rentalcharge_hourly' ) ) {
17586 $dbh->do("ALTER TABLE `itemtypes` ADD COLUMN `rentalcharge_hourly` decimal(28,6) default NULL AFTER `rentalcharge_daily`");
17589 if ( column_exists( 'itemtypes', 'rental_charge_daily' ) ) {
17590 $dbh->do("UPDATE `itemtypes` SET `rentalcharge_daily` = `rental_charge_daily`");
17591 $dbh->do("ALTER TABLE `itemtypes` DROP COLUMN `rental_charge_daily`");
17594 SetVersion($DBversion);
17595 print "Upgrade to $DBversion done (Bug 20912 - Support granular rental charges)\n";
17598 $DBversion = '18.12.00.022';
17599 if( CheckVersion( $DBversion ) ) {
17601 INSERT IGNORE INTO permissions (module_bit,code,description)
17603 (3,'manage_additional_fields','Add, edit, or delete additional custom fields for baskets or subscriptions (also requires order_manage or edit_subscription permissions)')
17606 INSERT INTO user_permissions (borrowernumber, module_bit, code)
17607 SELECT borrowernumber, 3, 'manage_additional_fields' FROM borrowers WHERE borrowernumber IN (SELECT DISTINCT borrowernumber FROM user_permissions WHERE code = 'order_manage' OR code = 'edit_subscription');
17610 INSERT INTO user_permissions (borrowernumber, module_bit, code)
17611 SELECT borrowernumber, 3, 'manage_additional_fields' FROM borrowers WHERE borrowernumber IN (SELECT borrowernumber FROM borrowers WHERE MOD(flags DIV POWER(2,11),2)=1 OR MOD(flags DIV POWER(2,15),2) =1);
17613 SetVersion( $DBversion );
17614 print "Upgrade to $DBversion done (Bug 15774 - Add permission for managing additional fields)\n";
17617 $DBversion = '18.12.00.023';
17618 if( CheckVersion( $DBversion ) ) {
17620 INSERT IGNORE INTO systempreferences (variable,value,explanation,options,type)
17621 VALUES ('ILLOpacbackends',NULL,NULL,'ILL backends to enabled for OPAC initiated requests','multiple');
17624 # Always end with this (adjust the bug info)
17625 SetVersion( $DBversion );
17626 print "Upgrade to $DBversion done (Bug 20639 - Add ILLOpacbackends syspref)\n";
17629 $DBversion = '18.12.00.024';
17630 if ( CheckVersion($DBversion) ) {
17632 # Fixup any pre-existing bad suggestedby, manageddate, accepteddate dates
17634 local $dbh->{PrintError} = 0;
17636 "UPDATE suggestions SET suggesteddate = '1970-01-01' WHERE suggesteddate = '0000-00-00';"
17639 "UPDATE suggestions SET manageddate = '1970-01-01' WHERE manageddate = '0000-00-00';"
17642 "UPDATE suggestions SET accepteddate = '1970-01-01' WHERE accepteddate = '0000-00-00';"
17646 # Add constraint for suggestedby
17647 unless ( foreign_key_exists( 'suggestions', 'suggestions_ibfk_suggestedby' ) )
17650 "ALTER TABLE suggestions CHANGE COLUMN suggestedby suggestedby INT(11) NULL DEFAULT NULL;"
17653 "UPDATE suggestions LEFT JOIN borrowers ON (suggestions.suggestedby = borrowers.borrowernumber) SET suggestedby = null WHERE borrowernumber IS null"
17656 "ALTER TABLE suggestions ADD CONSTRAINT `suggestions_ibfk_suggestedby` FOREIGN KEY (`suggestedby`) REFERENCES `borrowers` (`borrowernumber`) ON DELETE SET NULL ON UPDATE CASCADE"
17660 # Add constraint for managedby
17661 unless ( foreign_key_exists( 'suggestions', 'suggestions_ibfk_managedby' ) )
17664 "UPDATE suggestions LEFT JOIN borrowers ON (suggestions.managedby = borrowers.borrowernumber) SET managedby = null WHERE borrowernumber IS NULL"
17667 "ALTER TABLE suggestions ADD CONSTRAINT `suggestions_ibfk_managedby` FOREIGN KEY (`managedby`) REFERENCES `borrowers` (`borrowernumber`) ON DELETE SET NULL ON UPDATE CASCADE"
17671 # Add constraint for acceptedby
17673 foreign_key_exists( 'suggestions', 'suggestions_ibfk_acceptedby' ) )
17676 "UPDATE suggestions LEFT JOIN borrowers ON (suggestions.acceptedby = borrowers.borrowernumber) SET acceptedby = null WHERE borrowernumber IS NULL"
17679 "ALTER TABLE suggestions ADD CONSTRAINT `suggestions_ibfk_acceptedby` FOREIGN KEY (`acceptedby`) REFERENCES `borrowers` (`borrowernumber`) ON DELETE SET NULL ON UPDATE CASCADE"
17683 # Add constraint for rejectedby
17685 foreign_key_exists( 'suggestions', 'suggestions_ibfk_rejectedby' ) )
17688 "UPDATE suggestions LEFT JOIN borrowers ON (suggestions.rejectedby = borrowers.borrowernumber) SET rejectedby = null WHERE borrowernumber IS null"
17691 "ALTER TABLE suggestions ADD CONSTRAINT `suggestions_ibfk_rejectedby` FOREIGN KEY (`rejectedby`) REFERENCES `borrowers` (`borrowernumber`) ON DELETE SET NULL ON UPDATE CASCADE"
17695 # Add constraint for biblionumber
17697 foreign_key_exists( 'suggestions', 'suggestions_ibfk_biblionumber' ) )
17700 "UPDATE suggestions s LEFT JOIN biblio b ON (s.biblionumber = b.biblionumber) SET s.biblionumber = null WHERE b.biblionumber IS null"
17703 "ALTER TABLE suggestions ADD CONSTRAINT `suggestions_ibfk_biblionumber` FOREIGN KEY (`biblionumber`) REFERENCES `biblio` (`biblionumber`) ON DELETE SET NULL ON UPDATE CASCADE"
17707 # Add constraint for branchcode
17709 foreign_key_exists( 'suggestions', 'suggestions_ibfk_branchcode' ) )
17712 "UPDATE suggestions s LEFT JOIN branches b ON (s.branchcode = b.branchcode) SET s.branchcode = null WHERE b.branchcode IS null"
17715 "ALTER TABLE suggestions ADD CONSTRAINT `suggestions_ibfk_branchcode` FOREIGN KEY (`branchcode`) REFERENCES `branches` (`branchcode`) ON DELETE SET NULL ON UPDATE CASCADE"
17719 SetVersion($DBversion);
17721 "Upgrade to $DBversion done (Bug 22368 - Add missing constraints to suggestions)\n";
17724 $DBversion = '18.12.00.025';
17725 if( CheckVersion( $DBversion ) ) {
17727 $dbh->do('SET FOREIGN_KEY_CHECKS=0');
17729 # Change columns accordingly
17731 ALTER TABLE tags_index
17732 MODIFY COLUMN term VARCHAR(191) COLLATE utf8mb4_bin NOT NULL;
17736 ALTER TABLE tags_approval
17737 MODIFY COLUMN term VARCHAR(191) COLLATE utf8mb4_bin NOT NULL;
17741 ALTER TABLE tags_all
17742 MODIFY COLUMN term VARCHAR(191) COLLATE utf8mb4_bin NOT NULL;
17745 $dbh->do('SET FOREIGN_KEY_CHECKS=1');
17747 SetVersion( $DBversion );
17748 print "Upgrade to $DBversion done (Bug 21846 - Using emoji as tags has broken weights)\n";
17749 my $maintenance_script = C4::Context->config("intranetdir") . "/misc/maintenance/fix_tags_weight.pl";
17750 print "WARNING: (Bug 21846) You need to manually run $maintenance_script to fix possible issues with tags.\n";
17753 $DBversion = '18.12.00.026';
17754 if( CheckVersion( $DBversion ) ) {
17755 $dbh->do( "INSERT IGNORE INTO systempreferences (variable, value, explanation, type) VALUES ('IllLog', 0, 'If ON, log information about ILL requests', 'YesNo')" );
17757 SetVersion( $DBversion );
17758 print "Upgrade to $DBversion done (Bug 20750 - Allow timestamped auditing of ILL request events)\n";
17761 $DBversion = '18.12.00.027';
17762 if( CheckVersion( $DBversion ) ) {
17764 INSERT IGNORE INTO systempreferences (variable,value,explanation,options,type) VALUES
17765 ('ILLModuleUnmediated','0','','If enabled, try to immediately progress newly placed ILL requests.','YesNo');
17767 SetVersion( $DBversion );
17768 print "Upgrade to $DBversion done (Bug 18837: Add ILLModuleUnmediated Syspref)\n";
17771 $DBversion = '18.12.00.028';
17772 if( CheckVersion( $DBversion ) ) {
17774 INSERT IGNORE INTO account_offset_types ( type ) VALUES ( 'Account Fee' );
17778 INSERT IGNORE INTO account_offset_types ( type ) VALUES ( 'Hold Expired' );
17781 SetVersion( $DBversion );
17782 print "Upgrade to $DBversion done (Bug 21756 - Add 'Account Fee' and 'Hold Expired' to the account_offset_types table if missing)\n";
17785 $DBversion = '18.12.00.029';
17786 if( CheckVersion( $DBversion ) ) {
17787 $dbh->do( "INSERT IGNORE INTO systempreferences (variable,value,explanation,options,type) VALUES ('OrderPriceRounding',NULL,'Local preference for rounding orders before calculations to ensure correct calculations','|nearest_cent','Choice')" );
17789 SetVersion( $DBversion );
17790 print "Upgrade to $DBversion done (Bug 18736 - Add syspref to control order rounding)\n";
17793 $DBversion = '18.12.00.030';
17794 if( CheckVersion( $DBversion ) ) {
17795 if( column_exists( 'accountlines', 'accountno' ) ) {
17796 $dbh->do( "ALTER TABLE accountlines DROP COLUMN accountno" );
17798 if( column_exists( 'statistics', 'proccode' ) ) {
17799 $dbh->do( "ALTER TABLE statistics DROP COLUMN proccode" );
17801 SetVersion( $DBversion );
17802 print "Upgrade to $DBversion done (Bug 21683 - Remove accountlines.accountno and statistics.proccode fields)\n";
17805 $DBversion = '18.12.00.031';
17806 if( CheckVersion( $DBversion ) ) {
17808 # Add constraint for manager_id
17809 unless( foreign_key_exists( 'accountlines', 'accountlines_ibfk_borrowers_2' ) ) {
17810 $dbh->do("ALTER TABLE accountlines CHANGE COLUMN manager_id manager_id INT(11) NULL DEFAULT NULL");
17811 $dbh->do("UPDATE accountlines a LEFT JOIN borrowers b ON ( a.manager_id = b.borrowernumber) SET a.manager_id = NULL WHERE b.borrowernumber IS NULL");
17812 $dbh->do("ALTER TABLE accountlines ADD CONSTRAINT `accountlines_ibfk_borrowers_2` FOREIGN KEY (`manager_id`) REFERENCES `borrowers` (`borrowernumber`) ON DELETE SET NULL ON UPDATE CASCADE");
17815 # Rename accountlines_ibfk_2 to accountlines_ibfk_items
17816 if ( foreign_key_exists( 'accountlines', 'accountlines_ibfk_2' ) ) {
17817 $dbh->do("ALTER TABLE accountlines DROP FOREIGN KEY accountlines_ibfk_2");
17819 unless ( foreign_key_exists( 'accountlines', 'accountlines_ibfk_items' ) ) {
17820 $dbh->do("ALTER TABLE accountlines ADD CONSTRAINT `accountlines_ibfk_items` FOREIGN KEY (`itemnumber`) REFERENCES `items` (`itemnumber`) ON DELETE SET NULL ON UPDATE CASCADE");
17823 SetVersion( $DBversion );
17824 print "Upgrade to $DBversion done (Bug 22008 - Add missing constraints for accountlines.manager_id)\n";
17827 $DBversion = '18.12.00.032';
17828 if( CheckVersion( $DBversion ) ) {
17829 if( !column_exists( 'search_field', 'facet_order' ) ) {
17830 $dbh->do("ALTER TABLE search_field ADD COLUMN facet_order TINYINT(4) DEFAULT NULL AFTER weight");
17832 $dbh->do("UPDATE search_field SET facet_order=1 WHERE name='author'");
17833 $dbh->do("UPDATE search_field SET facet_order=2 WHERE name='itype'");
17834 $dbh->do("UPDATE search_field SET facet_order=3 WHERE name='location'");
17835 $dbh->do("UPDATE search_field SET facet_order=4 WHERE name='su-geo'");
17836 $dbh->do("UPDATE search_field SET facet_order=5 WHERE name='title-series'");
17837 $dbh->do("UPDATE search_field SET facet_order=6 WHERE name='subject'");
17838 $dbh->do("UPDATE search_field SET facet_order=7 WHERE name='ccode'");
17839 $dbh->do("UPDATE search_field SET facet_order=8 WHERE name='holdingbranch'");
17840 $dbh->do("UPDATE search_field SET facet_order=9 WHERE name='homebranch'");
17841 SetVersion( $DBversion );
17842 print "Upgrade to $DBversion done (Bug 18235 - Elastic search - make facets configurable)\n";
17845 $DBversion = '18.12.00.033';
17846 if( CheckVersion( $DBversion ) ) {
17847 $dbh->do( "UPDATE search_field SET facet_order=10 WHERE name='ln'" );
17848 SetVersion( $DBversion );
17849 print "Upgrade to $DBversion done (Bug 18213 - Add language facets to Elasticsearch)\n";
17852 $DBversion = '18.12.00.034';
17853 if( CheckVersion( $DBversion ) ) {
17855 if ( column_exists( 'accountlines', 'lastincrement' ) ) {
17856 $dbh->do("ALTER TABLE `accountlines` DROP COLUMN `lastincrement`");
17859 SetVersion( $DBversion );
17860 print "Upgrade to $DBversion done (Bug 22516 - Drop deprecated accountlines.lastincrement field)\n";
17863 $DBversion = '18.12.00.035';
17864 if( CheckVersion( $DBversion ) ) {
17865 $dbh->do( "INSERT IGNORE INTO systempreferences (variable, value, options, explanation, type)
17866 VALUES ('MaxItemsToDisplayForBatchMod','1000',NULL,'Display up to a given number of items in a single item modification batch.','Integer')"
17868 SetVersion( $DBversion );
17869 print "Upgrade to $DBversion done (Bug 19722 - Add a MaxItemsToDisplayForBatchMod preference)\n";
17872 $DBversion = '18.12.00.036';
17873 if ( CheckVersion($DBversion) ) {
17875 my $rows = $dbh->do(
17877 UPDATE `accountlines`
17879 `accounttype` = 'FU'
17881 `accounttype` = 'O'
17885 SetVersion($DBversion);
17886 printf "Upgrade to $DBversion done (Bug 22518 - Fix accounttype 'O' to 'FU' - %d updated)\n", $rows;
17889 $DBversion = '18.12.00.037';
17890 if( CheckVersion( $DBversion ) ) {
17892 $dbh->do( "UPDATE issues SET renewals = 0 WHERE renewals IS NULL" );
17893 $dbh->do( "UPDATE old_issues SET renewals = 0 WHERE renewals IS NULL" );
17895 $dbh->do( "ALTER TABLE issues MODIFY COLUMN renewals tinyint(4) NOT NULL default 0");
17896 $dbh->do( "ALTER TABLE old_issues MODIFY COLUMN renewals tinyint(4) NOT NULL default 0");
17898 # Always end with this (adjust the bug info)
17899 SetVersion( $DBversion );
17900 print "Upgrade to $DBversion done (Bug 22607 - Set default value of issues.renewals to 0)\n";
17903 $DBversion = '18.12.00.038';
17904 if ( CheckVersion($DBversion) ) {
17906 if ( !column_exists( 'accountlines', 'status' ) ) {
17909 ALTER TABLE `accountlines`
17911 `status` varchar(16) DEFAULT NULL
17918 SetVersion($DBversion);
17919 print "Upgrade to $DBversion done (Bug 22512 - Add status to accountlines)\n";
17922 $DBversion = '18.12.00.039';
17923 if ( CheckVersion($DBversion) ) {
17925 if ( !column_exists( 'accountlines', 'interface' ) ) {
17928 ALTER TABLE `accountlines`
17930 `interface` varchar(16)
17943 borrowernumber = manager_id;
17954 branchcode IS NULL;
17961 interface = 'intranet'
17967 ALTER TABLE `accountlines`
17968 MODIFY COLUMN `interface` varchar(16) NOT NULL;
17971 SetVersion($DBversion);
17972 print "Upgrade to $DBversion done (Bug 22600 - Add interface to accountlines)\n";
17975 $DBversion = '18.12.00.040';
17976 if( CheckVersion( $DBversion ) ) {
17977 $dbh->do("UPDATE accountlines SET description = REPLACE(description, 'Reserve Charge - ', '') WHERE description LIKE 'Reserve Charge - %'");
17978 SetVersion( $DBversion );
17979 print "Upgrade to $DBversion done (Bug 12166 - Remove 'Reserve Charge' text from accountlines description)\n";
17982 $DBversion = '18.12.00.041';
17983 if( CheckVersion( $DBversion ) ) {
17984 my $table_sth = $dbh->prepare('SHOW CREATE TABLE `search_marc_map`');
17985 $table_sth->execute();
17986 my @table = $table_sth->fetchrow_array();
17987 unless ( $table[1] =~ /`marc_field`.*COLLATE utf8mb4_bin/ ) { #catches utf8mb4 collated tables
17988 $dbh->do("ALTER TABLE `search_marc_map` MODIFY `marc_field` VARCHAR(255) NOT NULL COLLATE utf8mb4_bin COMMENT 'the MARC specifier for this field'");
17991 # Always end with this (adjust the bug info)
17992 SetVersion( $DBversion );
17993 print "Upgrade to $DBversion done (Bug 19670 - Change collation of marc_field to allow mixed case search field mappings)\n";
17996 $DBversion = '18.12.00.042';
17997 if( CheckVersion( $DBversion ) ) {
17998 $dbh->do( "UPDATE systempreferences SET value = 'default' WHERE variable = 'XSLTDetailsDisplay' AND value = ''" );
17999 SetVersion( $DBversion );
18000 print "Upgrade to $DBversion done (Bug 29891 - Remove non-XSLT detail view in the staff client)\n";
18003 $DBversion = '18.12.00.043';
18004 if ( CheckVersion($DBversion) ) {
18005 $dbh->do("UPDATE accountlines SET description = REPLACE(description, 'Lost Item ', '') WHERE description LIKE 'Lost Item %'");
18006 SetVersion($DBversion);
18007 print "Upgrade to $DBversion done (Bug 21953 - Remove 'Lost Item' text from accountlines description)\n";
18010 $DBversion = '18.12.00.044';
18011 if( CheckVersion( $DBversion ) ) {
18013 if ( !column_exists( 'categories', 'reset_password' ) ) {
18015 ALTER TABLE categories
18016 ADD COLUMN reset_password TINYINT(1) NULL DEFAULT NULL
18017 AFTER checkprevcheckout
18021 SetVersion( $DBversion );
18022 print "Upgrade to $DBversion done (Bug 21890 - Patron password reset by category)\n";
18025 $DBversion = '18.12.00.045';
18026 if( CheckVersion( $DBversion ) ) {
18028 if ( !column_exists( 'categories', 'change_password' ) ) {
18030 ALTER TABLE categories
18031 ADD COLUMN change_password TINYINT(1) NULL DEFAULT NULL
18032 AFTER reset_password
18036 SetVersion( $DBversion );
18037 print "Upgrade to $DBversion done (Bug 10796 - Patron password change by category)\n";
18040 $DBversion = '18.12.00.046';
18041 if( CheckVersion( $DBversion ) ) {
18042 $dbh->do( "UPDATE systempreferences SET value = 'default' WHERE variable = 'XSLTResultsDisplay' AND value = ''" );
18043 SetVersion( $DBversion );
18044 print "Upgrade to $DBversion done (Bug 22695 - Remove non-XSLT search results view from the staff client)\n";
18047 $DBversion = '18.12.00.047';
18048 if( CheckVersion( $DBversion ) ) {
18050 INSERT IGNORE INTO systempreferences (variable,value,explanation,options,type) VALUES ('LibrisKey', '', 'This key must be obtained at http://api.libris.kb.se/. It is unique for the IP of the server.', NULL, 'Free');
18053 INSERT IGNORE INTO systempreferences (variable,value,explanation,options,type) VALUES ('LibrisURL', 'http://api.libris.kb.se/bibspell/', 'This is the base URL for the Libris spellchecking API.',NULL,'Free');
18055 SetVersion( $DBversion );
18056 print "Upgrade to $DBversion done (Bug 14557: Add Libris spellchecking system preferences)\n";
18059 $DBversion = '18.12.00.048';
18060 if( CheckVersion( $DBversion ) ) {
18062 INSERT IGNORE INTO systempreferences (variable,value,explanation,options,type)
18063 VALUES ('NoRenewalBeforePrecision', 'exact_time', 'Calculate "No renewal before" based on date or exact time. Only relevant for loans calculated in days, hourly loans are not affected.', 'date|exact_time', 'Choice');
18065 $dbh->do("UPDATE systempreferences SET value='exact_time' WHERE variable='NoRenewalBeforePrecision' AND value IS NULL;" );
18066 SetVersion( $DBversion );
18067 print "Upgrade to $DBversion done (Bug 22044 - Set a default value for NoRenewalBeforePrecision)\n";
18070 $DBversion = '18.12.00.049';
18071 if( CheckVersion( $DBversion ) ) {
18074 ALTER TABLE borrowers
18075 ADD COLUMN flgAnonymized tinyint DEFAULT 0
18076 AFTER overdrive_auth_token
18077 }) if !column_exists('borrowers', 'flgAnonymized');
18080 ALTER TABLE deletedborrowers
18081 ADD COLUMN flgAnonymized tinyint DEFAULT 0
18082 AFTER overdrive_auth_token
18083 }) if !column_exists('deletedborrowers', 'flgAnonymized');
18085 SetVersion( $DBversion );
18086 print "Upgrade to $DBversion done (Bug 21336 - Add field flgAnonymized)\n";
18089 $DBversion = '18.12.00.050';
18090 if( CheckVersion( $DBversion ) ) {
18092 INSERT IGNORE INTO systempreferences ( `variable`, `value`, `options`, `explanation`, `type` )
18094 ('UnsubscribeReflectionDelay','',NULL,'Delay for locking unsubscribers', 'Integer'),
18095 ('PatronAnonymizeDelay','',NULL,'Delay for anonymizing patrons', 'Integer'),
18096 ('PatronRemovalDelay','',NULL,'Delay for removing anonymized patrons', 'Integer')
18098 SetVersion( $DBversion );
18099 print "Upgrade to $DBversion done (Bug 21336 - Add preferences)\n";
18102 $DBversion = '18.12.00.051';
18103 if( CheckVersion( $DBversion ) ) {
18104 my $failed_attempts = C4::Context->preference('FailedLoginAttempts');
18105 $dbh->do( "UPDATE borrowers SET login_attempts = ? WHERE login_attempts > ?", undef, $failed_attempts, $failed_attempts ) if $failed_attempts && $failed_attempts > 0;
18106 SetVersion( $DBversion );
18107 print "Upgrade to $DBversion done (Bug 21336 - Reset login_attempts)\n";
18110 $DBversion = '18.12.00.052';
18111 if( CheckVersion( $DBversion ) ) {
18113 INSERT IGNORE INTO systempreferences ( `variable`, `value`, `options`, `explanation`, `type` ) VALUES
18114 ('OpacMoreSearches', '', NULL, 'Add additional elements to the OPAC more searches bar', 'Textarea')
18117 SetVersion( $DBversion );
18118 print "Upgrade to $DBversion done (Bug 22311 - Add a SysPref to allow adding content to the #moresearches div in the opac)\n";
18121 $DBversion = '18.12.00.053';
18122 if( CheckVersion( $DBversion ) ) {
18124 INSERT IGNORE INTO `systempreferences` (`variable`, `value`, `options`, `explanation`, `type`) VALUES
18125 ('AutoReturnCheckedOutItems', '0', '', 'If disabled, librarian must confirm return of checked out item when checking out to another.', 'YesNo');
18128 SetVersion( $DBversion );
18129 print "Upgrade to $DBversion done (Bug 17171 - Add a syspref to allow currently issued items to be issued to a new patron without staff confirmation)\n";
18132 $DBversion = '18.12.00.054';
18133 if( CheckVersion( $DBversion ) ) {
18135 INSERT IGNORE permissions (module_bit, code, description)
18137 (9,'advanced_editor','Use the advanced cataloging editor')
18139 if( C4::Context->preference('EnableAdvancedCatalogingEditor') ){
18141 INSERT INTO user_permissions (borrowernumber, module_bit, code)
18142 SELECT borrowernumber, 9, 'advanced_editor' FROM borrowers WHERE borrowernumber IN (SELECT DISTINCT borrowernumber FROM user_permissions WHERE code = 'edit_catalogue');
18145 SetVersion( $DBversion );
18146 print "Upgrade to $DBversion done (Bug 20128: Add permission for Advanced Cataloging Editor)\n";
18149 $DBversion = '18.12.00.055';
18150 if ( CheckVersion($DBversion) ) {
18154 `account_offset_types`
18163 `account_offset_types`
18165 type = 'OVERDUE_INCREASE'
18167 type = 'fine_increase';
18172 `account_offset_types`
18174 type = 'OVERDUE_DECREASE'
18176 type = 'fine_decrease';
18179 if ( column_exists( 'accountlines', 'accounttype' ) ) {
18182 ALTER TABLE `accountlines`
18183 CHANGE COLUMN `accounttype`
18184 `accounttype` varchar(16) DEFAULT NULL;
18193 accounttype = 'OVERDUE',
18194 status = 'UNRETURNED'
18196 accounttype = 'FU';
18203 accounttype = 'OVERDUE',
18204 status = 'FORGIVEN'
18206 accounttype = 'FFOR';
18213 accounttype = 'OVERDUE',
18214 status = 'RETURNED'
18218 SetVersion($DBversion);
18219 print "Upgrade to $DBversion done (Bug 22521 - Update accountlines.accounttype to varchar(16), and map new statuses)\n";
18222 $DBversion = '18.12.00.056';
18223 if( CheckVersion( $DBversion ) ) {
18224 $dbh->do( "UPDATE systempreferences SET explanation = 'This syspref allows to define custom rules for hiding specific items at the OPAC. See http://wiki.koha-community.org/wiki/OpacHiddenItems for more information.' WHERE variable = 'OpacHiddenItems'");
18225 SetVersion( $DBversion );
18226 print "Upgrade to $DBversion done (Bug 8701 - Update OpacHiddenItems system preference description)\n";
18229 $DBversion = '18.12.00.057';
18230 if( CheckVersion( $DBversion ) ) {
18231 if( column_exists('statistics', 'associatedborrower') ) {
18232 $dbh->do(q{ ALTER TABLE statistics DROP COLUMN associatedborrower });
18234 if( column_exists('statistics', 'usercode') ) {
18235 $dbh->do(q{ ALTER TABLE statistics DROP COLUMN usercode });
18238 SetVersion($DBversion);
18239 print "Upgrade to $DBversion done (Bug 13795 - Delete unused fields from statistics table)\n";
18242 $DBversion = '18.12.00.058';
18243 if( CheckVersion( $DBversion ) ) {
18244 my $opaclang = C4::Context->preference("opaclanguages");
18246 push @langs, split ( '\,', $opaclang );
18247 # Get any existing value from the OpacNavRight system preference
18248 my ($OpacNavRight) = $dbh->selectrow_array( q|
18249 SELECT value FROM systempreferences WHERE variable='OpacNavRight';
18251 if( $OpacNavRight ){
18252 # If there is a value in the OpacNavRight preference, insert it into opac_news
18253 $dbh->do("INSERT INTO opac_news (branchcode, lang, title, content ) VALUES (NULL, ?, '', ?)", undef, "OpacNavRight_$langs[0]", $OpacNavRight);
18255 # Remove the OpacNavRight system preference
18256 $dbh->do("DELETE FROM systempreferences WHERE variable='OpacNavRight'");
18257 SetVersion ($DBversion);
18258 print "Upgrade to $DBversion done (Bug 22318: Move contents of OpacNavRight preference to Koha news system)\n";
18261 $DBversion = '18.12.00.059';
18262 if( CheckVersion( $DBversion ) ) {
18263 if( column_exists( 'import_records', 'z3950random' ) ) {
18264 $dbh->do( "ALTER TABLE import_records DROP COLUMN z3950random" );
18267 # Always end with this (adjust the bug info)
18268 SetVersion( $DBversion );
18269 print "Upgrade to $DBversion done (Bug 22532 - Remove import_records z3950random column)\n";
18272 $DBversion = '18.12.00.060';
18273 if ( CheckVersion($DBversion) ) {
18275 my $rows = $dbh->do(
18277 UPDATE `accountlines`
18279 `accounttype` = 'L',
18280 `status` = 'REPLACED'
18282 `accounttype` = 'Rep'
18286 SetVersion($DBversion);
18287 printf "Upgrade to $DBversion done (Bug 22564 - Fix accounttype 'Rep' - %d updated)\n", $rows;
18290 $DBversion = '18.12.00.061';
18291 if( CheckVersion( $DBversion ) ) {
18293 if ( column_exists( 'borrowers', 'flgAnonymized' ) ) {
18295 UPDATE borrowers SET flgAnonymized = 0 WHERE flgAnonymized IS NULL
18298 ALTER TABLE borrowers
18299 CHANGE `flgAnonymized` `anonymized` TINYINT(1) NOT NULL DEFAULT 0
18303 if ( column_exists( 'deletedborrowers', 'flgAnonymized' ) ) {
18305 UPDATE deletedborrowers SET flgAnonymized = 0 WHERE flgAnonymized IS NULL
18308 ALTER TABLE deletedborrowers
18309 CHANGE `flgAnonymized` `anonymized` TINYINT(1) NOT NULL DEFAULT 0
18313 SetVersion( $DBversion );
18314 print "Upgrade to $DBversion done (Bug 21336 - (follow-up) Rename flgAnonymized column)\n";
18317 $DBversion = '18.12.00.062';
18318 if( CheckVersion( $DBversion ) ) {
18320 UPDATE search_marc_map SET marc_field='007_/0'
18321 WHERE marc_type IN ('marc21', 'normarc') AND marc_field='007_/1' AND id IN
18322 (SELECT search_marc_map_id FROM search_marc_to_field WHERE search_field_id IN
18323 (SELECT id FROM search_field WHERE label='ff7-00')
18328 UPDATE search_marc_map SET marc_field='007_/1'
18329 WHERE marc_type IN ('marc21', 'normarc') AND marc_field='007_/2' AND id IN
18330 (SELECT search_marc_map_id FROM search_marc_to_field WHERE search_field_id IN
18331 (SELECT id FROM search_field WHERE label='ff7-01')
18336 UPDATE search_marc_map SET marc_field='007_/2'
18337 WHERE marc_type IN ('marc21', 'normarc') AND marc_field='007_/3' AND id IN
18338 (SELECT search_marc_map_id FROM search_marc_to_field WHERE search_field_id IN
18339 (SELECT id FROM search_field WHERE label='ff7-02')
18343 # N.B. ff7-01-02 really is 00-01!
18345 UPDATE search_marc_map SET marc_field='007_/0-1'
18346 WHERE marc_type IN ('marc21', 'normarc') AND marc_field='007_/1-2' AND id IN
18347 (SELECT search_marc_map_id FROM search_marc_to_field WHERE search_field_id IN
18348 (SELECT id FROM search_field WHERE label='ff7-01-02')
18353 UPDATE search_marc_map SET marc_field='008_/0-5'
18354 WHERE marc_type IN ('marc21', 'normarc') AND marc_field='008_/1-5' AND id IN
18355 (SELECT search_marc_map_id FROM search_marc_to_field WHERE search_field_id IN
18356 (SELECT id FROM search_field WHERE label='date-entered-on-file')
18361 UPDATE search_marc_map SET marc_field='leader_/0-4'
18362 WHERE marc_type IN ('marc21', 'normarc') AND marc_field='leader_/1-5' AND id IN
18363 (SELECT search_marc_map_id FROM search_marc_to_field WHERE search_field_id IN
18364 (SELECT id FROM search_field WHERE label='llength')
18368 # Always end with this (adjust the bug info)
18369 SetVersion( $DBversion );
18370 print "Upgrade to $DBversion done (Bug 22339 - Fix search field mappings of MARC fixed fields)\n";
18373 $DBversion = '18.12.00.063';
18374 if ( CheckVersion($DBversion) ) {
18378 'Payment' => 'Pay',
18379 'Lost Item' => 'CR',
18380 'Manual Credit' => 'C',
18381 'Forgiven' => 'FOR'
18384 my $sth = $dbh->prepare( "SELECT accountlines_id FROM accountlines WHERE accounttype = 'VOID'" );
18385 my $sth2 = $dbh->prepare( "SELECT type FROM account_offsets WHERE credit_id = ? ORDER BY created_on LIMIT 1" );
18386 my $sth3 = $dbh->prepare( "UPDATE accountlines SET accounttype = ?, status = 'VOID' WHERE accountlines_id = ?" );
18388 while (my $row = $sth->fetchrow_hashref) {
18389 $sth2->execute($row->{accountlines_id});
18390 my $result = $sth2->fetchrow_hashref;
18391 my $type = $types_map->{$result->{'type'}} // 'Pay';
18392 $sth3->execute($type,$row->{accountlines_id});
18395 SetVersion($DBversion);
18396 print "Upgrade to $DBversion done (Bug 22511 - Update existing VOID accountlines)\n";
18399 $DBversion = '18.12.00.064';
18400 if( CheckVersion( $DBversion ) ) {
18402 INSERT IGNORE INTO systempreferences (variable,value,options,explanation,type) VALUES ('UpdateItemLocationOnCheckin', 'PROC: _PERM_\n', 'NULL', '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.', 'Free');
18405 UPDATE systempreferences s1, (SELECT IF(value,'PROC: CART\n','') AS p2c FROM systempreferences WHERE variable='InProcessingToShelvingCart') s2 SET s1.value= CONCAT(s2.p2c, REPLACE(s1.value,'PROC: _PERM_\n','') ) WHERE s1.variable='UpdateItemLocationOnCheckin' AND s1.value NOT LIKE '%PROC: CART%';
18408 DELETE FROM systempreferences WHERE variable='InProcessingToShelvingCart';
18411 UPDATE systempreferences s1, (SELECT IF(value,'_ALL_: CART\n','') AS rtc FROM systempreferences WHERE variable='ReturnToShelvingCart') s2 SET s1.value= CONCAT(s2.rtc,s1.value) WHERE s1.variable='UpdateItemLocationOnCheckin' AND s1.value NOT LIKE '%_ALL_: CART%';
18414 DELETE FROM systempreferences WHERE variable='ReturnToShelvingCart';
18416 SetVersion( $DBversion );
18417 print "Upgrade to $DBversion done (Bug 14576: Add UpdateItemLocationOnCheckin syspref)\n";
18420 $DBversion = '18.12.00.065';
18421 if( CheckVersion( $DBversion ) ) {
18423 INSERT IGNORE INTO systempreferences ( `variable`, `value`, `options`, `explanation`, `type` )
18424 SELECT 'IndependentBranchesTransfers', value, NULL, 'Allow non-superlibrarians to transfer items between libraries','YesNo'
18425 FROM systempreferences WHERE variable = 'IndependentBranches'
18427 SetVersion( $DBversion );
18428 print "Upgrade to $DBversion done (Bug 10300 - Allow transferring of items to be have separate IndependentBranches syspref)\n";
18431 $DBversion = '18.12.00.066';
18432 if ( CheckVersion($DBversion) ) {
18434 INSERT IGNORE INTO `systempreferences` (`variable`, `value`, `explanation`, `options`, `type`) VALUES
18435 ('OpenURLResolverURL', '', 'URL of OpenURL Resolver', NULL, 'Free'),
18436 ('OpenURLText', '', 'Text of OpenURL links (or image title if OpenURLImageLocation is defined)', NULL, 'Free'),
18437 ('OpenURLImageLocation', '', 'Location of image for OpenURL links', NULL, 'Free'),
18438 ('OPACShowOpenURL', '', 'Enable display of OpenURL links in OPAC search results and detail page', NULL, 'YesNo'),
18439 ('OPACOpenURLItemTypes', '', 'Show the OpenURL link only for these item types', NULL, 'Free');
18442 SetVersion($DBversion);
18444 "Upgrade to $DBversion done (Bug 8995 - Add new preferences for OpenURLResolvers)\n";
18447 $DBversion = '18.12.00.067';
18448 if ( CheckVersion($DBversion) ) {
18450 INSERT IGNORE INTO systempreferences (variable,value,options,explanation,type)
18451 VALUES ('SendAllEmailsTo','',NULL,'All emails will be redirected to this email if it is not empty','free');
18453 SetVersion($DBversion);
18455 "Upgrade to $DBversion done (Bug 8000 - Add new preferences for SendAllEmailsTo)\n";
18458 $DBversion = '18.12.00.068';
18459 if ( CheckVersion($DBversion) ) {
18461 INSERT IGNORE INTO systempreferences (variable,value,explanation,options,type) VALUES
18462 ('AllowRenewalOnHoldOverride','0','','If on, allow items on hold to be renewed with a specified due date','YesNo');
18464 SetVersion($DBversion);
18465 print "Upgrade to $DBversion done (Bug 7088: Cannot renew items on hold even with override)\n";
18468 $DBversion = '18.12.00.069';
18469 if( CheckVersion( $DBversion ) ) {
18472 INSERT INTO plugin_data
18473 (plugin_class, plugin_key, plugin_value)
18479 WHERE plugin_key='__INSTALLED_VERSION__'
18482 # Always end with this (adjust the bug info)
18483 SetVersion( $DBversion );
18484 print "Upgrade to $DBversion done (Bug 22053 - enable all plugins)\n";
18487 $DBversion = '18.12.00.070';
18488 if ( CheckVersion($DBversion) ) {
18490 INSERT IGNORE INTO systempreferences
18491 ( `variable`, `value`, `options`, `explanation`, `type` )
18493 ('SelfCheckAllowByIPRanges','',NULL,'(Leave blank if not used. Use ranges or simple ip addresses separated by spaces, like <code>192.168.1.1 192.168.0.0/24</code>.)','Short');
18495 SetVersion($DBversion);
18496 print "Upgrade to $DBversion done (Bug 14407 - Limit web-based self-checkout to specific IP addresses)\n";
18499 $DBversion = '18.12.00.071';
18500 if( CheckVersion( $DBversion ) ) {
18502 INSERT IGNORE INTO `letter` (`module`, `code`, `branchcode`, `name`, `is_html`, `title`, `content`, `message_transport_type`, `lang`) VALUES
18503 ('circulation', 'ACCOUNT_CREDIT', '', 'Account payment', 0, 'Account payment', '<table>
18504 [% IF ( LibraryName ) %]
18506 <th colspan="4" class="centerednames">
18507 <h3>[% LibraryName | html %]</h3>
18512 <th colspan="4" class="centerednames">
18513 <h2><u>Fee receipt</u></h2>
18517 <th colspan="4" class="centerednames">
18518 <h2>[% Branches.GetName( patron.branchcode ) | html %]</h2>
18523 Received with thanks from [% patron.firstname | html %] [% patron.surname | html %] <br />
18524 Card number: [% patron.cardnumber | html %]<br />
18529 <th>Description of charges</th>
18534 [% FOREACH account IN accounts %]
18535 <tr class="highlight">
18536 <td>[% account.date | $KohaDates %]</td>
18538 [% PROCESS account_type_description account=account %]
18539 [%- IF account.description %], [% account.description | html %][% END %]
18541 <td>[% account.note | html %]</td>
18542 [% IF ( account.amountcredit ) %]<td class="credit">[% ELSE %]<td class="debit">[% END %][% account.amount | $Price %]</td>
18548 <td colspan="3">Total outstanding dues as on date: </td>
18549 [% IF ( totalcredit ) %]<td class="credit">[% ELSE %]<td class="debit">[% END %][% total | $Price %]</td>
18552 </table>', 'print', 'default');
18554 SetVersion( $DBversion );
18555 print "Upgrade to $DBversion done (Bug 22809 - Move 'ACCOUNT_CREDIT' from template to a slip)\n";
18558 $DBversion = '18.12.00.072';
18559 if( CheckVersion( $DBversion ) ) {
18561 INSERT IGNORE INTO `letter` (`module`, `code`, `branchcode`, `name`, `is_html`, `title`, `content`, `message_transport_type`, `lang`) VALUES
18562 ('circulation', 'ACCOUNT_DEBIT', '', 'Account fee', 0, 'Account fee', '<table>
18563 [% IF ( LibraryName ) %]
18565 <th colspan="5" class="centerednames">
18566 <h3>[% LibraryName | html %]</h3>
18572 <th colspan="5" class="centerednames">
18573 <h2><u>INVOICE</u></h2>
18577 <th colspan="5" class="centerednames">
18578 <h2>[% Branches.GetName( patron.branchcode ) | html %]</h2>
18583 Bill to: [% patron.firstname | html %] [% patron.surname | html %] <br />
18584 Card number: [% patron.cardnumber | html %]<br />
18589 <th>Description of charges</th>
18591 <th style="text-align:right;">Amount</th>
18592 <th style="text-align:right;">Amount outstanding</th>
18595 [% FOREACH account IN accounts %]
18596 <tr class="highlight">
18597 <td>[% account.date | $KohaDates%]</td>
18599 [% PROCESS account_type_description account=account %]
18600 [%- IF account.description %], [% account.description | html %][% END %]
18602 <td>[% account.note | html %]</td>
18603 [% IF ( account.amountcredit ) %]<td class="credit">[% ELSE %]<td class="debit">[% END %][% account.amount | $Price %]</td>
18604 [% IF ( account.amountoutstandingcredit ) %]<td class="credit">[% ELSE %]<td class="debit">[% END %][% account.amountoutstanding | $Price %]</td>
18610 <td colspan="4">Total outstanding dues as on date: </td>
18611 [% IF ( totalcredit ) %]<td class="credit">[% ELSE %]<td class="debit">[% END %][% total | $Price %]</td>
18614 </table>', 'print', 'default');
18616 SetVersion( $DBversion );
18617 print "Upgrade to $DBversion done (Bug 22809 - Move 'INVOICE' from template to a slip)\n";
18620 $DBversion = '18.12.00.073';
18621 if( CheckVersion( $DBversion ) ) {
18623 INSERT IGNORE INTO systempreferences (variable,value,options,explanation,type) VALUES
18624 ('EmailPurchaseSuggestions','0','0|EmailAddressForSuggestions|BranchEmailAddress|KohaAdminEmailAddress','Choose email address that will be sent new purchase suggestions','Choice'),
18625 ('EmailAddressForSuggestions','','','If you choose EmailAddressForSuggestions you should enter a valid email address','free')
18629 INSERT IGNORE INTO `letter` (module, code, name, title, content, is_html, message_transport_type) VALUES
18630 ('suggestions','NEW_SUGGESTION','New suggestion','New suggestion','<h3>Suggestion pending approval</h3>
18631 <p><h4>Suggested by</h4>
18633 <li><<borrowers.firstname>> <<borrowers.surname>></li>
18634 <li><<borrowers.cardnumber>></li>
18635 <li><<borrowers.phone>></li>
18636 <li><<borrowers.email>></li>
18639 <p><h4>Title suggested</h4>
18641 <li><b>Library:</b> <<branches.branchname>></li>
18642 <li><b>Title:</b> <<suggestions.title>></li>
18643 <li><b>Author:</b> <<suggestions.author>></li>
18644 <li><b>Copyright date:</b> <<suggestions.copyrightdate>></li>
18645 <li><b>Standard number (ISBN, ISSN or other):</b> <<suggestions.isbn>></li>
18646 <li><b>Publisher:</b> <<suggestions.publishercode>></li>
18647 <li><b>Collection title:</b> <<suggestions.collectiontitle>></li>
18648 <li><b>Publication place:</b> <<suggestions.place>></li>
18649 <li><b>Quantity:</b> <<suggestions.quantity>></li>
18650 <li><b>Item type:</b> <<suggestions.itemtype>></li>
18651 <li><b>Reason for suggestion:</b> <<suggestions.patronreason>></li>
18652 <li><b>Notes:</b> <<suggestions.note>></li>
18657 SetVersion( $DBversion );
18658 print "Upgrade to $DBversion done (Bug 5770 - Email librarian when purchase suggestion made)\n";
18661 $DBversion = '18.12.00.074';
18662 if( CheckVersion( $DBversion ) ) {
18663 unless ( TableExists( 'keyboard_shortcuts' ) ) {
18665 CREATE TABLE keyboard_shortcuts (
18666 shortcut_name varchar(80) NOT NULL,
18667 shortcut_keys varchar(80) NOT NULL,
18668 PRIMARY KEY (shortcut_name)
18669 ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;|
18673 INSERT IGNORE INTO keyboard_shortcuts (shortcut_name, shortcut_keys) VALUES
18674 ("insert_copyright","Alt-C"),
18675 ("insert_copyright_sound","Alt-P"),
18676 ("insert_delimiter","Ctrl-D"),
18677 ("subfield_help","Ctrl-H"),
18678 ("link_authorities","Shift-Ctrl-L"),
18679 ("delete_field","Ctrl-X"),
18680 ("delete_subfield","Shift-Ctrl-X"),
18681 ("new_line","Enter"),
18682 ("line_break","Shift-Enter"),
18683 ("next_position","Tab"),
18684 ("prev_position","Shift-Tab")
18688 INSERT IGNORE permissions (module_bit, code, description)
18690 (3,'manage_keyboard_shortcuts','Manage keyboard shortcuts for advanced cataloging editor')
18693 SetVersion( $DBversion );
18694 print "Upgrade to $DBversion done (Bug 21411 - Add keyboard_shortcuts table)\n";
18697 $DBversion = '18.12.00.075';
18698 if( CheckVersion( $DBversion ) ) {
18699 # you can use $dbh here like:
18700 unless ( foreign_key_exists( 'tmp_holdsqueue', 'tmp_holdsqueue_ibfk_1' ) ) {
18702 DELETE t FROM tmp_holdsqueue t
18703 LEFT JOIN items i ON t.itemnumber=i.itemnumber
18704 WHERE i.itemnumber IS NULL
18707 ALTER TABLE tmp_holdsqueue
18708 ADD CONSTRAINT `tmp_holdsqueue_ibfk_1` FOREIGN KEY (`itemnumber`)
18709 REFERENCES `items` (`itemnumber`) ON DELETE CASCADE ON UPDATE CASCADE
18712 SetVersion( $DBversion );
18713 print "Upgrade to $DBversion done (Bug 22899 - Add items constraint to tmp_holdsqueue)\n";
18716 $DBversion = '19.05.00.000';
18717 if( CheckVersion( $DBversion ) ) {
18718 SetVersion( $DBversion );
18719 print "Upgrade to $DBversion done (19.05.00 release)\n";
18722 $DBversion = '19.06.00.000';
18723 if( CheckVersion( $DBversion ) ) {
18724 SetVersion( $DBversion );
18725 print "Upgrade to $DBversion done (Wingardium Leviosa!)\n";
18728 $DBversion = '19.06.00.001';
18729 if( CheckVersion( $DBversion ) ) {
18731 UPDATE systempreferences
18732 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.'
18733 WHERE variable = 'UpdateItemLocationOnCheckin'
18735 SetVersion( $DBversion );
18736 print "Upgrade to $DBversion done (Bug 22960: Fix typo in syspref description)\n";
18739 $DBversion = '19.06.00.002';
18740 if ( CheckVersion($DBversion) ) {
18742 $dbh->do(q{ALTER TABLE subscriptionhistory CHANGE opacnote opacnote LONGTEXT NULL});
18743 $dbh->do(q{ALTER TABLE subscriptionhistory CHANGE librariannote librariannote LONGTEXT NULL});
18745 $dbh->do(q{UPDATE subscriptionhistory SET opacnote = NULL WHERE opacnote = ''});
18746 $dbh->do(q{UPDATE subscriptionhistory SET librariannote = NULL WHERE librariannote = ''});
18748 SetVersion ($DBversion);
18749 print "Upgrade to $DBversion done (Bug 10215: Increase the size of opacnote and librariannote for table subscriptionhistory)\n";
18752 $DBversion = '19.06.00.003';
18753 if( CheckVersion( $DBversion ) ) {
18754 $dbh->do(q{UPDATE systempreferences SET value = REPLACE( value, ' ', '|' ) WHERE variable = 'UniqueItemFields'; });
18756 SetVersion( $DBversion );
18757 print "Upgrade to $DBversion done (Bug 22867: UniqueItemFields preference value should be pipe-delimited)\n";
18760 $DBversion = '19.06.00.004';
18761 if( CheckVersion( $DBversion ) ) {
18762 $dbh->do( 'UPDATE language_descriptions SET description = "Griechisch (Modern 1453-)"
18763 WHERE subtag = "el" and type = "language" and lang ="de"' );
18764 SetVersion( $DBversion );
18765 print "Upgrade to $DBversion done (Bug 22770: Fix typo in language description for el in German)\n";
18768 $DBversion = '19.06.00.005';
18769 if( CheckVersion( $DBversion ) ) {
18770 unless ( column_exists( 'reserves', 'item_level_hold' ) ) {
18771 $dbh->do( "ALTER TABLE reserves ADD COLUMN item_level_hold BOOLEAN NOT NULL DEFAULT 0 AFTER itemtype" );
18773 unless ( column_exists( 'old_reserves', 'item_level_hold' ) ) {
18774 $dbh->do( "ALTER TABLE old_reserves ADD COLUMN item_level_hold BOOLEAN NOT NULL DEFAULT 0 AFTER itemtype" );
18777 SetVersion( $DBversion );
18778 print "Upgrade to $DBversion done (Bug 9834: Add the reserves.item_level_hold column)\n";
18781 $DBversion = '19.06.00.006';
18782 if( CheckVersion( $DBversion ) ) {
18784 unless ( TableExists('plugin_methods') ) {
18786 CREATE TABLE plugin_methods (
18787 plugin_class varchar(255) NOT NULL,
18788 plugin_method varchar(255) NOT NULL,
18789 PRIMARY KEY ( `plugin_class` (191), `plugin_method` (191) )
18790 ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
18794 require Koha::Plugins;
18795 Koha::Plugins->new({ enable_plugins => 1 })->InstallPlugins;
18797 SetVersion( $DBversion );
18798 print "Upgrade to $DBversion done (Bug 21073: Improve plugin performance)\n";
18801 $DBversion = '19.06.00.007';
18802 if( CheckVersion( $DBversion ) ) {
18803 $dbh->do( "DELETE FROM systempreferences WHERE variable = 'RotationPreventTransfers'" );
18804 SetVersion( $DBversion );
18805 print "Upgrade to $DBversion done (Bug 22653: Remove unimplemented RotationPreventTransfers system preference)\n";
18808 $DBversion = '19.06.00.008';
18809 if( CheckVersion( $DBversion ) ) {
18810 $dbh->do( "UPDATE userflags SET flagdesc = 'Allow staff members to modify permissions and passwords for other staff members' WHERE flag = 'staffaccess'" );
18811 SetVersion( $DBversion );
18812 print "Upgrade to $DBversion done (Bug 23109: Improve description of staffaccess permission)\n";
18815 $DBversion = '19.06.00.009';
18816 if( CheckVersion( $DBversion ) ) {
18818 INSERT IGNORE INTO keyboard_shortcuts (shortcut_name, shortcut_keys)
18819 VALUES ("toggle_keyboard", "Shift-Ctrl-K")
18822 SetVersion( $DBversion );
18823 print "Upgrade to $DBversion done (Bug 17178: add shortcut to keyboard_shortcuts)\n";
18826 $DBversion = '19.06.00.010';
18827 if( CheckVersion( $DBversion ) ) {
18829 if ( TableExists('default_circ_rules') ) {
18830 if ( column_exists( 'default_circ_rules', 'holdallowed' ) ) {
18832 INSERT IGNORE INTO circulation_rules ( categorycode, branchcode, itemtype, rule_name, rule_value )
18833 SELECT NULL, NULL, NULL, 'holdallowed', holdallowed
18834 FROM default_circ_rules
18837 INSERT IGNORE INTO circulation_rules ( categorycode, branchcode, itemtype, rule_name, rule_value )
18838 SELECT NULL, NULL, NULL, 'hold_fulfillment_policy', hold_fulfillment_policy
18839 FROM default_circ_rules
18842 INSERT IGNORE INTO circulation_rules ( categorycode, branchcode, itemtype, rule_name, rule_value )
18843 SELECT NULL, NULL, NULL, 'returnbranch', returnbranch
18844 FROM default_circ_rules
18846 $dbh->do("DROP TABLE default_circ_rules");
18850 if ( TableExists('default_branch_circ_rules') ) {
18851 if ( column_exists( 'default_branch_circ_rules', 'holdallowed' ) ) {
18853 INSERT IGNORE INTO circulation_rules ( categorycode, branchcode, itemtype, rule_name, rule_value )
18854 SELECT NULL, branchcode, NULL, 'holdallowed', holdallowed
18855 FROM default_branch_circ_rules
18858 INSERT IGNORE INTO circulation_rules ( categorycode, branchcode, itemtype, rule_name, rule_value )
18859 SELECT NULL, branchcode, NULL, 'hold_fulfillment_policy', hold_fulfillment_policy
18860 FROM default_branch_circ_rules
18863 INSERT IGNORE INTO circulation_rules ( categorycode, branchcode, itemtype, rule_name, rule_value )
18864 SELECT NULL, branchcode, NULL, 'returnbranch', returnbranch
18865 FROM default_branch_circ_rules
18867 $dbh->do("DROP TABLE default_branch_circ_rules");
18871 if ( TableExists('branch_item_rules') ) {
18872 if ( column_exists( 'branch_item_rules', 'holdallowed' ) ) {
18874 INSERT IGNORE INTO circulation_rules ( categorycode, branchcode, itemtype, rule_name, rule_value )
18875 SELECT NULL, branchcode, itemtype, 'holdallowed', holdallowed
18876 FROM branch_item_rules
18879 INSERT IGNORE INTO circulation_rules ( categorycode, branchcode, itemtype, rule_name, rule_value )
18880 SELECT NULL, branchcode, itemtype, 'hold_fulfillment_policy', hold_fulfillment_policy
18881 FROM branch_item_rules
18884 INSERT IGNORE INTO circulation_rules ( categorycode, branchcode, itemtype, rule_name, rule_value )
18885 SELECT NULL, branchcode, itemtype, 'returnbranch', returnbranch
18886 FROM branch_item_rules
18888 $dbh->do("DROP TABLE branch_item_rules");
18892 if ( TableExists('default_branch_item_rules') ) {
18893 if ( column_exists( 'default_branch_item_rules', 'holdallowed' ) ) {
18895 INSERT IGNORE INTO circulation_rules ( categorycode, branchcode, itemtype, rule_name, rule_value )
18896 SELECT NULL, NULL, itemtype, 'holdallowed', holdallowed
18897 FROM default_branch_item_rules
18900 INSERT IGNORE INTO circulation_rules ( categorycode, branchcode, itemtype, rule_name, rule_value )
18901 SELECT NULL, NULL, itemtype, 'hold_fulfillment_policy', hold_fulfillment_policy
18902 FROM default_branch_item_rules
18905 INSERT IGNORE INTO circulation_rules ( categorycode, branchcode, itemtype, rule_name, rule_value )
18906 SELECT NULL, NULL, itemtype, 'returnbranch', returnbranch
18907 FROM default_branch_item_rules
18909 $dbh->do("DROP TABLE default_branch_item_rules");
18913 SetVersion( $DBversion );
18914 print "Upgrade to $DBversion done (Bug 18928: Move holdallowed, hold_fulfillment_policy, returnbranch to circulation_rules)\n";
18917 $DBversion = '19.06.00.011';
18918 if( CheckVersion( $DBversion ) ) {
18920 if ( TableExists('refund_lost_item_fee_rules') ) {
18921 if ( column_exists( 'refund_lost_item_fee_rules', 'refund' ) ) {
18923 INSERT INTO circulation_rules ( categorycode, branchcode, itemtype, rule_name, rule_value )
18924 SELECT NULL, IF(branchcode='*', NULL, branchcode), NULL, 'refund', refund
18925 FROM refund_lost_item_fee_rules
18927 $dbh->do("DROP TABLE refund_lost_item_fee_rules");
18931 SetVersion( $DBversion );
18932 print "Upgrade to $DBversion done (Bug 18930: Move lost item refund rules to circulation_rules table)\n";
18935 $DBversion = '19.06.00.012';
18936 if ( CheckVersion($DBversion) ) {
18938 # Find and correct pathological cases of LR becoming a credit
18939 my $sth = $dbh->prepare( "SELECT accountlines_id, issue_id, borrowernumber, itemnumber, amount, manager_id FROM accountlines WHERE accounttype = 'LR' AND amount < 0" );
18941 while ( my $row = $sth->fetchrow_hashref ) {
18943 "INSERT INTO accountlines (accounttype, issue_id, borrowernumber, itemnumber, amount, manager_id, interface) VALUES ( ?, ?, ?, ?, ?, ?, ? );",
18946 'CR', $row->{issue_id},
18947 $row->{borrowernumber}, $row->{itemnumber},
18948 $row->{amount}, $row->{manager_id},
18952 my $credit_id = $dbh->last_insert_id(undef, undef, 'accountlines', undef);
18953 my $amount = $row->{amount} * -1;
18954 $dbh->do("INSERT INTO account_offsets (credit_id, debit_id, type, amount) VALUES (?,?,?,?);",{},($credit_id, $row->{accountlines_id}, 'Lost Item', $amount));
18955 $dbh->do("UPDATE accountlines SET amount = '$amount' WHERE accountlines_id = '$row->{accountlines_id}';");
18962 accounttype = 'LOST',
18963 status = 'RETURNED'
18965 accounttype = 'LR';
18968 # Find and correct pathalogical cases of L having been converted to W
18969 $sth = $dbh->prepare( "SELECT accountlines_id, issue_id, borrowernumber, itemnumber, amount, manager_id FROM accountlines WHERE accounttype = 'W' AND itemnumber IS NOT NULL" );
18971 while ( my $row = $sth->fetchrow_hashref ) {
18972 my $amount = $row->{amount} * -1;
18974 "INSERT INTO accountlines (accounttype, issue_id, borrowernumber, itemnumber, amount, manager_id, interface) VALUES ( ?, ?, ?, ?, ?, ?, ? );",
18977 'LOST', $row->{issue_id}, $row->{borrowernumber},
18978 $row->{itemnumber}, $amount, $row->{manager_id},
18982 my $debit_id = $dbh->last_insert_id(undef, undef, 'accountlines', undef);
18984 "INSERT INTO account_offsets (credit_id, debit_id, type, amount) VALUES (?,?,?,?);",
18987 $row->{accountlines_id}, $debit_id,
18988 'Lost Item', $amount
18997 accounttype = 'LOST'
19006 accounttype = 'LOST_RETURN'
19008 accounttype = 'CR';
19011 SetVersion($DBversion);
19012 print "Upgrade to $DBversion done (Bug 22563: Fix accounttypes for 'L', 'LR' and 'CR')\n";
19015 $DBversion = '19.06.00.013';
19016 if ( CheckVersion( $DBversion ) ) {
19017 unless ( column_exists( 'borrower_modifications', 'changed_fields' ) ) {
19018 $dbh->do("ALTER TABLE borrower_modifications ADD changed_fields MEDIUMTEXT AFTER verification_token;");
19020 SetVersion( $DBversion );
19021 print "Upgrade to $DBversion done (Bug 23151: Add borrower_modifications.changed_fields column)\n";
19024 $DBversion = '19.06.00.014';
19025 if ( CheckVersion($DBversion) ) {
19031 accounttype = 'RENT_DAILY_RENEW'
19033 accounttype = 'Rent'
19035 description LIKE 'Renewal of Daily Rental Item%';
19042 accounttype = 'RENT_DAILY'
19044 accounttype = 'Rent'
19046 description LIKE 'Daily rental';
19054 accounttype = 'RENT_RENEW'
19056 accounttype = 'Rent'
19058 description LIKE 'Renewal of Rental Item%';
19065 accounttype = 'RENT'
19067 accounttype = 'Rent';
19070 SetVersion($DBversion);
19071 print "Upgrade to $DBversion done (Bug 11573: Fix accounttypes for 'Rent')\n";
19074 $DBversion = '19.06.00.015';
19075 if( CheckVersion( $DBversion ) ) {
19076 $dbh->do( "UPDATE `search_field` SET `name` = 'date-time-last-modified', `label` = 'date-time-last-modified' WHERE `name` = 'date/time-last-modified'" );
19078 SetVersion( $DBversion );
19079 print "Upgrade to $DBversion done (Bug 22524: Fix date/time-last-modified search with Elasticsearch)\n";
19082 $DBversion = '19.06.00.016';
19083 if( CheckVersion( $DBversion ) ) {
19086 INSERT IGNORE INTO keyboard_shortcuts (shortcut_name, shortcut_keys) VALUES
19087 ("insert_copyright","Alt-C"),
19088 ("insert_copyright_sound","Alt-P"),
19089 ("insert_delimiter","Ctrl-D"),
19090 ("subfield_help","Ctrl-H"),
19091 ("link_authorities","Shift-Ctrl-L"),
19092 ("delete_field","Ctrl-X"),
19093 ("delete_subfield","Shift-Ctrl-X"),
19094 ("new_line","Enter"),
19095 ("line_break","Shift-Enter"),
19096 ("next_position","Tab"),
19097 ("prev_position","Shift-Tab"),
19098 ("toggle_keyboard", "Shift-Ctrl-K")
19101 SetVersion( $DBversion );
19102 print "Upgrade to $DBversion done (Bug 23396: Fix missing keyboard_shortcuts table)\n";
19105 $DBversion = '19.06.00.017';
19106 if ( CheckVersion($DBversion) ) {
19110 authorised_values (category,authorised_value,lib)
19112 ('PAYMENT_TYPE','SIP00','Cash via SIP2'),
19113 ('PAYMENT_TYPE','SIP01','VISA via SIP2'),
19114 ('PAYMENT_TYPE','SIP02','Creditcard via SIP2')
19121 accounttype = 'Pay',
19122 payment_type = 'SIP00'
19124 accounttype = 'Pay00';
19131 accounttype = 'Pay',
19132 payment_type = 'SIP01'
19134 accounttype = 'Pay01';
19141 accounttype = 'Pay',
19142 payment_type = 'SIP02'
19144 accounttype = 'Pay02';
19147 my $sth = $dbh->prepare( q{SELECT * FROM accountlines WHERE accounttype REGEXP '^Pay[[:digit:]]{2}$' } );
19150 while (my $row = $sth->fetchrow_hashref) {
19151 my $type = $row->{accounttype};
19152 my $sipcode = $type;
19153 $sipcode =~ s/Pay/SIP/g;
19154 unless ($seen->{$sipcode}) {
19157 authorised_values (category,authorised_value,lib)
19159 ('PAYMENT_TYPE',"$sipcode",'Unrecognised SIP2 payment type')
19166 accounttype = 'Pay',
19167 payment_type = "$sipcode"
19169 accounttype = "$type";
19172 $seen->{$sipcode} = 1;
19176 SetVersion($DBversion);
19177 print "Upgrade to $DBversion done (Bug 22610: Fix accounttypes for SIP2 payments)\n";
19180 $DBversion = '19.06.00.018';
19181 if( CheckVersion( $DBversion ) ) {
19182 if( !column_exists( 'biblio', 'subtitle' ) ) {
19183 $dbh->do( "ALTER TABLE biblio ADD COLUMN medium LONGTEXT AFTER title" );
19184 $dbh->do( "ALTER TABLE biblio ADD COLUMN subtitle LONGTEXT AFTER medium" );
19185 $dbh->do( "ALTER TABLE biblio ADD COLUMN part_number LONGTEXT AFTER subtitle" );
19186 $dbh->do( "ALTER TABLE biblio ADD COLUMN part_name LONGTEXT AFTER part_number" );
19188 $dbh->do( "ALTER TABLE deletedbiblio ADD COLUMN medium LONGTEXT AFTER title" );
19189 $dbh->do( "ALTER TABLE deletedbiblio ADD COLUMN subtitle LONGTEXT AFTER medium" );
19190 $dbh->do( "ALTER TABLE deletedbiblio ADD COLUMN part_number LONGTEXT AFTER subtitle" );
19191 $dbh->do( "ALTER TABLE deletedbiblio ADD COLUMN part_name LONGTEXT AFTER part_number" );
19194 $dbh->do( "UPDATE marc_subfield_structure SET kohafield='biblio.subtitle' WHERE kohafield='bibliosubtitle.subtitle'" );
19196 my $marcflavour = C4::Context->preference('marcflavour');
19198 if ( $marcflavour eq 'UNIMARC' ) {
19200 UPDATE marc_subfield_structure SET kohafield='biblio.medium'
19201 WHERE (kohafield IS NULL OR kohafield='') AND frameworkcode='' AND tagfield='200' AND tagsubfield='b'
19204 UPDATE marc_subfield_structure SET kohafield='biblio.subtitle'
19205 WHERE (kohafield IS NULL OR kohafield='') AND frameworkcode='' AND tagfield='200' AND tagsubfield='e'
19208 UPDATE marc_subfield_structure SET kohafield='biblio.part_number'
19209 WHERE (kohafield IS NULL OR kohafield='') AND frameworkcode='' AND tagfield='200' AND tagsubfield='h'
19212 UPDATE marc_subfield_structure SET kohafield='biblio.part_name'
19213 WHERE (kohafield IS NULL OR kohafield='') AND frameworkcode='' AND tagfield='200' AND tagsubfield='i'
19217 UPDATE marc_subfield_structure SET kohafield='biblio.medium'
19218 WHERE (kohafield IS NULL OR kohafield='') AND frameworkcode='' AND tagfield='245' AND tagsubfield='h'
19221 UPDATE marc_subfield_structure SET kohafield='biblio.subtitle'
19222 WHERE (kohafield IS NULL OR kohafield='') AND frameworkcode='' AND tagfield='245' AND tagsubfield='b'
19225 UPDATE marc_subfield_structure SET kohafield='biblio.part_number'
19226 WHERE (kohafield IS NULL OR kohafield='') AND frameworkcode='' AND tagfield='245' AND tagsubfield='n'
19229 UPDATE marc_subfield_structure SET kohafield='biblio.part_name'
19230 WHERE (kohafield IS NULL OR kohafield='') AND frameworkcode='' AND tagfield='245' AND tagsubfield='p'
19234 $sth = $dbh->prepare("SELECT * FROM fieldmapping");
19237 if ( $sth->rows ) {
19238 while ( my $value = $sth->fetchrow_hashref() ) {
19240 $value->{frameworkcode} eq ""
19242 : $value->{frameworkcode};
19245 field => $value->{field},
19246 fieldcode => $value->{fieldcode},
19247 subfieldcode => $value->{subfieldcode},
19248 framework => $framework
19253 $dbh->do( "DROP TABLE IF EXISTS fieldmapping" );
19255 $dbh->do( "DELETE FROM user_permissions WHERE code='manage_keywords2koha_mappings'" );
19257 $dbh->do( "DELETE FROM permissions WHERE code='manage_keywords2koha_mappings'" );
19259 # Always end with this (adjust the bug info)
19260 SetVersion( $DBversion );
19261 print "Upgrade to $DBversion done (Bug 11529: Add medium, subtitle and part information to biblio table)\n";
19262 if ( @fails_11529 ) {
19263 print "WARNING: Keyword to MARC Mappings:\n";
19264 for my $fail_11529 ( @fails_11529 ) {
19266 . $fail_11529->{field}
19268 . $fail_11529->{fieldcode} . "\$"
19269 . $fail_11529->{subfieldcode} . " for "
19270 . $fail_11529->{framework}
19273 print "The keyword to marc mapping feature is no longer supported. Above find the\n";
19274 print "mappings that had been defined in your system. You will need to remap any\n";
19275 print "desired MARC fields to the Koha field you desire in the Koha to MARC mappings\n";
19276 print "page under Administration\n";
19278 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"
19281 $DBversion = '19.06.00.019';
19282 if ( CheckVersion($DBversion) ) {
19284 INSERT IGNORE INTO systempreferences (variable, value, options, explanation, type)
19287 'FinePaymentAutoPopup',
19290 'If enabled, automatically display a print dialog for a payment receipt when making a payment.',
19295 SetVersion($DBversion);
19297 "Upgrade to $DBversion done (Bug 23228: Add option to automatically display payment receipt for printing after making a payment)\n";
19300 $DBversion = '19.06.00.020';
19301 if( CheckVersion( $DBversion ) ) {
19303 INSERT IGNORE INTO systempreferences ( `variable`, `value`, `options`, `explanation`, `type` ) VALUES
19304 ('PreserveSerialNotes','1','','When a new "Expected" issue is generated, should it be prefilled with last created issue notes?','YesNo');
19307 SetVersion( $DBversion );
19308 print "Upgrade to $DBversion done (Bug 23416: Add PreserveSerialNotes syspref)\n";
19311 $DBversion = '19.06.00.021';
19312 if( CheckVersion( $DBversion ) ) {
19315 ALTER TABLE marc_subfield_structure CHANGE COLUMN hidden hidden TINYINT(1) DEFAULT 8 NOT NULL;
19317 # Always end with this (adjust the bug info)
19318 SetVersion( $DBversion );
19319 print "Upgrade to $DBversion done (Bug 23309: Can't add new subfields to bibliographic frameworks in strict mode)\n";
19322 $DBversion = '19.06.00.022';
19323 if ( CheckVersion($DBversion) ) {
19325 unless ( TableExists('borrower_relationships') ) {
19327 CREATE TABLE `borrower_relationships` (
19328 id INT(11) NOT NULL AUTO_INCREMENT,
19329 guarantor_id INT(11) NOT NULL,
19330 guarantee_id INT(11) NOT NULL,
19331 relationship VARCHAR(100) NOT NULL,
19333 UNIQUE KEY `guarantor_guarantee_idx` ( `guarantor_id`, `guarantee_id` ),
19334 CONSTRAINT r_guarantor FOREIGN KEY ( guarantor_id ) REFERENCES borrowers ( borrowernumber ) ON UPDATE CASCADE ON DELETE CASCADE,
19335 CONSTRAINT r_guarantee FOREIGN KEY ( guarantee_id ) REFERENCES borrowers ( borrowernumber ) ON UPDATE CASCADE ON DELETE CASCADE
19336 ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
19341 LEFT JOIN borrowers guarantor ON ( borrowers.guarantorid = guarantor.borrowernumber )
19342 SET borrowers.guarantorid = NULL WHERE guarantor.borrowernumber IS NULL;
19345 # Bad data handling: guarantorid IS NOT NULL AND relationship IS NULL
19348 SET relationship = '_bad_data'
19349 WHERE guarantorid IS NOT NULL AND
19350 relationship IS NULL
19354 INSERT INTO borrower_relationships ( guarantor_id, guarantee_id, relationship )
19355 SELECT guarantorid, borrowernumber, relationship FROM borrowers WHERE guarantorid IS NOT NULL;
19358 # Clean migrated guarantor data
19361 SET contactname=NULL,
19362 contactfirstname=NULL,
19364 WHERE guarantorid IS NOT NULL
19368 if ( column_exists( 'borrowers', 'guarantorid' ) ) {
19370 ALTER TABLE borrowers DROP guarantorid;
19374 if ( column_exists( 'deletedborrowers', 'guarantorid' ) ) {
19376 ALTER TABLE deletedborrowers DROP guarantorid;
19380 if ( column_exists( 'borrower_modifications', 'guarantorid' ) ) {
19382 ALTER TABLE borrower_modifications DROP guarantorid;
19386 SetVersion($DBversion);
19387 print "Upgrade to $DBversion done (Bug 14570: Make it possible to add multiple guarantors to a record)\n";
19390 $DBversion = '19.06.00.023';
19391 if( CheckVersion( $DBversion ) ) {
19393 INSERT IGNORE INTO `systempreferences` (`variable`,`value`,`explanation`,`options`,`type`) VALUES
19394 ('ElasticsearchMARCFormat', 'ISO2709', 'ISO2709|ARRAY', 'Elasticsearch MARC format. ISO2709 format is recommended as it is faster and takes less space, whereas array is searchable.', 'Choice')
19397 SetVersion( $DBversion );
19398 print "Upgrade to $DBversion done (Bug 22258: Add ElasticsearchMARCFormat preference)\n";
19401 $DBversion = '19.06.00.024';
19402 if( CheckVersion( $DBversion ) ) {
19403 $dbh->do(q{ALTER TABLE accountlines CHANGE COLUMN accounttype accounttype varchar(80) default NULL});
19405 SetVersion( $DBversion );
19406 print "Upgrade to $DBversion done (Bug 23539: accountlines.accounttype should match authorised_values.authorised_value in size)\n";
19409 $DBversion = '19.06.00.025';
19410 if( CheckVersion( $DBversion ) ) {
19411 $dbh->do( q/INSERT IGNORE INTO systempreferences (variable,value,options,explanation,type) VALUES (?, ?, ?, ?, ?)/, undef, 'BarcodeSeparators','\s\r\n','','Splitting characters for barcodes','Free' );
19412 SetVersion( $DBversion );
19413 print "Upgrade to $DBversion done (Bug 22996: Add pref BarcodeSeparators)\n";
19416 $DBversion = '19.06.00.026';
19417 if( CheckVersion( $DBversion ) ) {
19419 unless ( column_exists( 'borrowers', 'privacy_guarantor_fines' ) ) {
19421 ALTER TABLE borrowers
19422 ADD privacy_guarantor_fines TINYINT(1) NOT NULL DEFAULT '0' AFTER privacy;
19426 unless ( column_exists( 'deletedborrowers', 'privacy_guarantor_fines' ) ) {
19428 ALTER TABLE deletedborrowers
19429 ADD privacy_guarantor_fines TINYINT(1) NOT NULL DEFAULT '0' AFTER privacy;
19434 INSERT IGNORE INTO systempreferences (variable, value, options, explanation, type )
19436 'AllowStaffToSetFinesVisibilityForGuarantor', '0', NULL,
19437 'If enabled, library staff can set a patron''s fines to be visible to linked patrons from the opac.', 'YesNo'
19439 'AllowPatronToSetFinesVisibilityForGuarantor', '0', NULL,
19440 'If enabled, the patron can set fines to be visible to his or her guarantor', 'YesNo'
19444 SetVersion( $DBversion );
19445 print "Upgrade to $DBversion done (Bug 20691: Add ability for guarantors to view guarantee's fines in OPAC)\n";
19448 $DBversion = '19.06.00.027';
19449 if( CheckVersion( $DBversion ) ) {
19451 if( !TableExists( 'itemtypes_branches' ) ) {
19453 CREATE TABLE itemtypes_branches( -- association table between authorised_values and branches
19454 itemtype VARCHAR(10) NOT NULL,
19455 branchcode VARCHAR(10) NOT NULL,
19456 FOREIGN KEY (itemtype) REFERENCES itemtypes(itemtype) ON DELETE CASCADE,
19457 FOREIGN KEY (branchcode) REFERENCES branches(branchcode) ON DELETE CASCADE
19458 ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
19462 SetVersion( $DBversion );
19463 print "Upgrade to $DBversion done (Bug 15497: Add itemtypes_branches table)\n";
19466 $DBversion = '19.06.00.028';
19467 if ( CheckVersion($DBversion) ) {
19473 accounttype = 'ACCOUNT'
19478 SetVersion($DBversion);
19479 print "Upgrade to $DBversion done (Bug 11573: Fix accounttypes for 'A')\n";
19482 $DBversion = '19.06.00.029';
19483 if ( CheckVersion($DBversion) ) {
19485 unless ( TableExists( 'cash_registers' ) ) {
19487 CREATE TABLE `cash_registers` (
19488 `id` int(11) NOT NULL auto_increment, -- unique identifier for each account register
19489 `name` varchar(24) NOT NULL, -- the user friendly identifier for each account register
19490 `description` longtext NOT NULL, -- the user friendly description for each account register
19491 `branch` varchar(10) NOT NULL, -- the foreign key the library this account register belongs
19492 `branch_default` tinyint(1) NOT NULL DEFAULT 0, -- boolean flag to denote that this till is the branch default
19493 `starting_float` decimal(28, 6), -- the starting float this account register should be assigned
19494 `archived` tinyint(1) NOT NULL DEFAULT 0, -- boolean flag to denote if this till is archived or not
19495 PRIMARY KEY (`id`),
19496 UNIQUE KEY `name` (`name`,`branch`),
19497 CONSTRAINT cash_registers_branch FOREIGN KEY (branch) REFERENCES branches (branchcode) ON UPDATE CASCADE ON DELETE CASCADE
19498 ) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_unicode_ci;
19502 unless ( column_exists( 'accountlines', 'register_id' ) ) {
19503 $dbh->do(qq{ALTER TABLE `accountlines` ADD `register_id` int(11) NULL DEFAULT NULL AFTER `manager_id`});
19505 ALTER TABLE `accountlines`
19506 ADD CONSTRAINT `accountlines_ibfk_registers` FOREIGN KEY (`register_id`)
19507 REFERENCES `cash_registers` (`id`) ON DELETE SET NULL ON UPDATE CASCADE
19512 INSERT IGNORE INTO `userflags` (`bit`, `flag`, `flagdesc`, `defaulton`)
19513 VALUES (25, 'cash_management', 'Cash management', 0)
19517 INSERT IGNORE permissions (module_bit, code, description)
19519 (25, 'manage_cash_registers', 'Add and remove cash registers')
19523 INSERT IGNORE INTO systempreferences (variable,value,options,explanation,type) VALUES
19524 ('UseCashRegisters','0','','Use cash registers with the accounting system and assign patron transactions to them.','YesNo')
19527 SetVersion($DBversion);
19528 print "Upgrade to $DBversion done (Bug 23321: Add cash_registers table, permissions and preferences)\n";
19531 $DBversion = '19.06.00.030';
19532 if( CheckVersion( $DBversion ) ) {
19534 if ( !TableExists('club_holds') ) {
19536 CREATE TABLE club_holds (
19537 id INT(11) NOT NULL AUTO_INCREMENT,
19538 club_id INT(11) NOT NULL, -- id for the club the hold was generated for
19539 biblio_id INT(11) NOT NULL, -- id for the bibliographic record the hold has been placed against
19540 item_id INT(11) NULL DEFAULT NULL, -- If item-level, the id for the item the hold has been placed agains
19541 date_created TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, -- Timestamp for the placed hold
19543 -- KEY club_id (club_id),
19544 CONSTRAINT clubs_holds_ibfk_1 FOREIGN KEY (club_id) REFERENCES clubs (id) ON DELETE CASCADE ON UPDATE CASCADE,
19545 CONSTRAINT clubs_holds_ibfk_2 FOREIGN KEY (biblio_id) REFERENCES biblio (biblionumber) ON DELETE CASCADE ON UPDATE CASCADE,
19546 CONSTRAINT clubs_holds_ibfk_3 FOREIGN KEY (item_id) REFERENCES items (itemnumber) ON DELETE CASCADE ON UPDATE CASCADE
19547 ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
19551 if ( !TableExists('club_holds_to_patron_holds') ) {
19553 CREATE TABLE club_holds_to_patron_holds (
19554 id INT(11) NOT NULL AUTO_INCREMENT,
19555 club_hold_id INT(11) NOT NULL,
19556 patron_id INT(11) NOT NULL,
19558 error_code ENUM ( 'damaged', 'ageRestricted', 'itemAlreadyOnHold',
19559 'tooManyHoldsForThisRecord', 'tooManyReservesToday',
19560 'tooManyReserves', 'notReservable', 'cannotReserveFromOtherBranches',
19561 'libraryNotFound', 'libraryNotPickupLocation', 'cannotBeTransferred'
19562 ) NULL DEFAULT NULL,
19563 error_message varchar(100) NULL DEFAULT NULL,
19565 -- KEY club_hold_id (club_hold_id),
19566 CONSTRAINT clubs_holds_paton_holds_ibfk_1 FOREIGN KEY (club_hold_id) REFERENCES club_holds (id) ON DELETE CASCADE ON UPDATE CASCADE,
19567 CONSTRAINT clubs_holds_paton_holds_ibfk_2 FOREIGN KEY (patron_id) REFERENCES borrowers (borrowernumber) ON DELETE CASCADE ON UPDATE CASCADE,
19568 CONSTRAINT clubs_holds_paton_holds_ibfk_3 FOREIGN KEY (hold_id) REFERENCES reserves (reserve_id) ON DELETE CASCADE ON UPDATE CASCADE
19569 ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
19573 # Always end with this (adjust the bug info)
19574 SetVersion( $DBversion );
19575 print "Upgrade to $DBversion done (Bug 19618: add club_holds tables)\n";
19578 $DBversion = '19.06.00.031';
19579 if( CheckVersion( $DBversion ) ) {
19581 INSERT IGNORE INTO systempreferences ( `variable`, `value`, `options`, `explanation`, `type` ) VALUES
19582 ('OPACDetailQRCode','0','','Enable the display of a QR Code on the OPAC detail page','YesNo');
19585 SetVersion( $DBversion );
19586 print "Upgrade to $DBversion done (Bug 23566: Add OPACDetailQRCode system preference)\n";
19589 $DBversion = '19.06.00.032';
19590 if ( CheckVersion($DBversion) ) {
19591 if ( !column_exists( 'search_marc_to_field', 'search' ) ) {
19593 ALTER TABLE `search_marc_to_field` ADD COLUMN `search` tinyint(1) NOT NULL DEFAULT 1
19596 if ( !column_exists( 'search_field', 'staff_client' ) ) {
19598 ALTER TABLE `search_field` ADD COLUMN `staff_client` tinyint(1) NOT NULL DEFAULT 1
19601 if ( !column_exists( 'search_field', 'opac' ) ) {
19603 ALTER TABLE `search_field` ADD COLUMN `opac` tinyint(1) NOT NULL DEFAULT 1
19607 SetVersion($DBversion);
19609 "Upgrade to $DBversion done (Bug 20589: Add field boosting and use elastic query fields parameter instead of depricated _all)\n";
19612 $DBversion = '19.06.00.033';
19613 if( CheckVersion( $DBversion ) ) {
19616 INSERT IGNORE INTO systempreferences (variable,value,options,explanation,type) VALUES
19617 ('OnSiteCheckoutAutoCheck','0','','Enable/Do not enable onsite checkout by default if last checkout was an onsite checkout','YesNo')
19619 SetVersion( $DBversion );
19620 print "Upgrade to $DBversion done (Bug 23686: Add OnSiteCheckoutAutoCheck system preference)\n";
19623 $DBversion = '19.06.00.034';
19624 if( CheckVersion( $DBversion ) ) {
19626 INSERT IGNORE INTO systempreferences ( `variable`, `value`, `options`, `explanation`, `type` ) VALUES
19627 ('TransfersBlockCirc','1',NULL,'Should the transfer modal block circulation staff from continuing scanning items','YesNo')
19629 SetVersion( $DBversion );
19630 print "Upgrade to $DBversion done (Bug 23007: Make transfer modals optionally block circ)\n";
19633 $DBversion = '19.06.00.035';
19634 if( CheckVersion( $DBversion ) ) {
19637 INSERT IGNORE INTO systempreferences (variable,value,options,explanation,type) VALUES
19638 ( 'IntranetCoce','0', NULL, 'If on, enables cover retrieval from the configured Coce server in the staff client', 'YesNo')
19642 UPDATE systempreferences SET
19643 variable = 'OpacCoce',
19644 explanation = 'If on, enables cover retrieval from the configured Coce server in the OPAC'
19649 SetVersion( $DBversion );
19650 print "Upgrade to $DBversion done (Bug 18421: Add Coce image cache to the Intranet)\n";
19653 $DBversion = '19.06.00.036';
19654 if( CheckVersion( $DBversion ) ) {
19657 INSERT IGNORE INTO systempreferences ( `variable`, `value`, `options`, `explanation`, `type`) VALUES
19658 ('QueryRegexEscapeOptions', 'escape', 'dont_escape|escape|unescape_escaped', 'Escape option for regexps delimiters in Elasicsearch queries.', 'Choice')
19661 SetVersion( $DBversion );
19662 print "Upgrade to $DBversion done (Bug 20334: Add elasticsearch escape options preference)\n";
19665 $DBversion = '19.06.00.037';
19666 if( CheckVersion( $DBversion ) ) {
19668 INSERT IGNORE INTO systempreferences ( `variable`, `value`, `options`, `explanation`, `type` )
19669 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')
19672 SetVersion( $DBversion );
19673 print "Upgrade to $DBversion done (Bug 21701: PayPal return URL option)\n";
19676 $DBversion = '19.06.00.038';
19677 if( CheckVersion( $DBversion ) ) {
19678 $dbh->do( "UPDATE systempreferences SET variable='PatronAutoComplete' WHERE variable='CircAutocompl' LIMIT 1" );
19679 SetVersion( $DBversion );
19680 print "Upgrade to $DBversion done (Bug 23697: Rename CircAutocompl system preference to PatronAutoComplete)\n";
19683 $DBversion = '19.06.00.039';
19684 if( CheckVersion( $DBversion ) ) {
19686 INSERT IGNORE INTO keyboard_shortcuts (shortcut_name, shortcut_keys) VALUES
19687 ("copy_line","Ctrl-C"),
19688 ("copy_subfield","Shift-Ctrl-C"),
19689 ("paste_line","Ctrl-P"),
19690 ("insert_line","Ctrl-I")
19693 SetVersion( $DBversion );
19694 print "Upgrade to $DBversion done (Bug 17179: Add additional keyboard_shortcuts)\n";
19697 $DBversion = '19.06.00.040';
19698 if( CheckVersion( $DBversion ) ) {
19700 INSERT IGNORE INTO systempreferences
19701 (variable,value,explanation,options,type)
19703 ('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')
19706 SetVersion( $DBversion );
19707 print "Upgrade to $DBversion done (Bug 17140: Add pref to allow rounding fines at payment)\n";
19710 $DBversion = '19.06.00.041';
19711 if( CheckVersion( $DBversion ) ) {
19712 my ($socialnetworks) = $dbh->selectrow_array( q|
19713 SELECT value FROM systempreferences WHERE variable='socialnetworks';
19715 if( $socialnetworks ){
19716 # If the socialnetworks preference is enabled, enable all social networks
19717 $dbh->do("UPDATE systempreferences SET value = 'email,facebook,linkedin,twitter', explanation = 'email|facebook|linkedin|twitter', type = 'multiple' WHERE variable = 'SocialNetworks'");
19719 $dbh->do("UPDATE systempreferences SET value = '', explanation = 'email|facebook|linkedin|twitter', type = 'multiple' WHERE variable = 'SocialNetworks'");
19721 SetVersion ($DBversion);
19722 print "Upgrade to $DBversion done (Bug 22880: Allow granular control of socialnetworks preference)\n";
19725 $DBversion = '19.06.00.042';
19726 if( CheckVersion( $DBversion ) ) {
19728 INSERT IGNORE INTO systempreferences
19729 ( variable, value, options, explanation, type )
19731 ('CustomCoverImages','0',NULL,'If enabled, the custom cover images will be displayed in the staff client. CustomCoverImagesURL must be defined.','YesNo'),
19732 ('OPACCustomCoverImages','0',NULL,'If enabled, the custom cover images will be displayed at the OPAC. CustomCoverImagesURL must be defined.','YesNo'),
19733 ('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')
19736 SetVersion( $DBversion );
19737 print "Upgrade to $DBversion done (Bug 22445: Add new pref *CustomCoverImages*)\n";
19740 $DBversion = '19.06.00.043';
19741 if ( CheckVersion($DBversion) ) {
19743 # Adding account_debit_types
19744 if ( !TableExists('account_debit_types') ) {
19747 CREATE TABLE account_debit_types (
19748 code varchar(80) NOT NULL,
19749 description varchar(200) NULL,
19750 can_be_added_manually tinyint(4) NOT NULL DEFAULT 1,
19751 default_amount decimal(28, 6) NULL,
19752 is_system tinyint(1) NOT NULL DEFAULT 0,
19753 archived tinyint(1) NOT NULL DEFAULT 0,
19755 ) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_unicode_ci
19760 # Adding account_debit_types_branches
19761 if ( !TableExists('account_debit_types_branches') ) {
19764 CREATE TABLE account_debit_types_branches (
19765 debit_type_code VARCHAR(80),
19766 branchcode VARCHAR(10),
19767 FOREIGN KEY (debit_type_code) REFERENCES account_debit_types(code) ON DELETE CASCADE,
19768 FOREIGN KEY (branchcode) REFERENCES branches(branchcode) ON DELETE CASCADE
19769 ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci
19774 # Populating account_debit_types
19777 INSERT IGNORE INTO account_debit_types (
19780 can_be_added_manually,
19785 ('ACCOUNT', 'Account creation fee', 0, NULL, 1),
19786 ('ACCOUNT_RENEW', 'Account renewal fee', 0, NULL, 1),
19787 ('RESERVE_EXPIRED', 'Hold waiting too long', 0, NULL, 1),
19788 ('LOST', 'Lost item', 1, NULL, 1),
19789 ('MANUAL', 'Manual fee', 1, NULL, 0),
19790 ('NEW_CARD', 'New card fee', 1, NULL, 1),
19791 ('OVERDUE', 'Overdue fine', 0, NULL, 1),
19792 ('PROCESSING', 'Lost item processing fee', 0, NULL, 1),
19793 ('RENT', 'Rental fee', 0, NULL, 1),
19794 ('RENT_DAILY', 'Daily rental fee', 0, NULL, 1),
19795 ('RENT_RENEW', 'Renewal of rental item', 0, NULL, 1),
19796 ('RENT_DAILY_RENEW', 'Renewal of daily rental item', 0, NULL, 1),
19797 ('RESERVE', 'Hold fee', 0, NULL, 1)
19801 # Update accountype 'Res' to 'RESERVE'
19804 UPDATE accountlines SET accounttype = 'RESERVE' WHERE accounttype = 'Res'
19808 # Update accountype 'PF' to 'PROCESSING'
19811 UPDATE accountlines SET accounttype = 'PROCESSING' WHERE accounttype = 'PF'
19815 # Update accountype 'HE' to 'RESERVE_EXPIRED'
19818 UPDATE accountlines SET accounttype = 'RESERVE_EXPIRED' WHERE accounttype = 'HE'
19822 # Update accountype 'N' to 'NEW_CARD'
19825 UPDATE accountlines SET accounttype = 'NEW_CARD' WHERE accounttype = 'N'
19829 # Update accountype 'M' to 'MANUAL'
19832 UPDATE accountlines SET accounttype = 'MANUAL' WHERE accounttype = 'M'
19836 # Catch 'F' cases introduced since bug 22521
19841 accounttype = 'OVERDUE',
19842 status = 'RETURNED'
19847 # Moving MANUAL_INV to account_debit_types
19850 INSERT IGNORE INTO account_debit_types (
19854 can_be_added_manually,
19866 category = 'MANUAL_INV'
19870 # Update uncaught partial accounttypes left behind after bugs 23539 and 22521
19871 my $sth = $dbh->prepare( "SELECT code, SUBSTR(code, 1,5) AS subcode FROM account_debit_types" );
19873 while ( my $row = $sth->fetchrow_hashref ) {
19876 UPDATE accountlines SET accounttype = ? WHERE accounttype = ?
19886 # Add any unexpected accounttype codes to debit_types as appropriate
19889 INSERT IGNORE INTO account_debit_types (
19892 can_be_added_manually,
19897 DISTINCT(accounttype),
19898 "Unexpected type found during upgrade",
19909 # Adding debit_type_code to accountlines
19910 unless ( column_exists('accountlines', 'debit_type_code') ) {
19913 ALTER TABLE accountlines
19915 debit_type_code varchar(80) DEFAULT NULL
19922 # Linking debit_type_code in accountlines to code in account_debit_types
19923 unless ( foreign_key_exists( 'accountlines', 'accountlines_ibfk_debit_type' ) ) {
19926 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
19931 # Populating debit_type_code
19934 UPDATE accountlines SET debit_type_code = accounttype, accounttype = NULL WHERE accounttype IN (SELECT code from account_debit_types) AND amount >= 0
19938 # Remove MANUAL_INV
19941 DELETE FROM authorised_values WHERE category = 'MANUAL_INV'
19946 DELETE FROM authorised_value_categories WHERE category_name = 'MANUAL_INV'
19950 # Add new permission
19953 INSERT IGNORE INTO permissions (module_bit, code, description)
19958 'Manage Account Debit and Credit Types'
19963 SetVersion($DBversion);
19964 print "Upgrade to $DBversion done (Bug 23049: Add account debit_types)\n";
19967 $DBversion = '19.06.00.044';
19968 if ( CheckVersion($DBversion) ) {
19970 # Adding account_credit_types
19971 if ( !TableExists('account_credit_types') ) {
19974 CREATE TABLE account_credit_types (
19975 code varchar(80) NOT NULL,
19976 description varchar(200) NULL,
19977 can_be_added_manually tinyint(4) NOT NULL DEFAULT 1,
19978 is_system tinyint(1) NOT NULL DEFAULT 0,
19980 ) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_unicode_ci
19985 # Adding account_credit_types_branches
19986 if ( !TableExists('account_credit_types_branches') ) {
19989 CREATE TABLE account_credit_types_branches (
19990 credit_type_code VARCHAR(80),
19991 branchcode VARCHAR(10),
19992 FOREIGN KEY (credit_type_code) REFERENCES account_credit_types(code) ON DELETE CASCADE,
19993 FOREIGN KEY (branchcode) REFERENCES branches(branchcode) ON DELETE CASCADE
19994 ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci
19999 # Populating account_credit_types
20002 INSERT IGNORE INTO account_credit_types (
20005 can_be_added_manually,
20009 ('PAYMENT', 'Payment', 0, 1),
20010 ('WRITEOFF', 'Writeoff', 0, 1),
20011 ('FORGIVEN', 'Forgiven', 1, 1),
20012 ('CREDIT', 'Credit', 1, 1),
20013 ('LOST_RETURN', 'Lost item fee refund', 0, 1)
20017 # Adding credit_type_code to accountlines
20018 unless ( column_exists('accountlines', 'credit_type_code') ) {
20021 ALTER TABLE accountlines
20023 credit_type_code varchar(80) DEFAULT NULL
20030 # Catch LOST_RETURNED cases from original bug 22563 update
20033 UPDATE accountlines
20034 SET accounttype = 'LOST_RETURN'
20035 WHERE accounttype = 'LOST_RETURNED'
20038 # Linking credit_type_code in accountlines to code in account_credit_types
20039 unless ( foreign_key_exists( 'accountlines', 'accountlines_ibfk_credit_type' ) ) {
20042 ALTER TABLE accountlines
20044 `accountlines_ibfk_credit_type`
20045 FOREIGN KEY (`credit_type_code`) REFERENCES `account_credit_types` (`code`)
20052 # Update accountype 'C' to 'CREDIT'
20055 UPDATE accountlines SET accounttype = 'CREDIT' WHERE accounttype = 'C' OR accounttype = 'CR'
20059 # Update accountype 'FOR' to 'FORGIVEN'
20062 UPDATE accountlines SET accounttype = 'FORGIVEN' WHERE accounttype = 'FOR' OR accounttype = 'FORW'
20066 # Update accountype 'Pay' to 'PAYMENT'
20069 UPDATE accountlines SET accounttype = 'PAYMENT' WHERE accounttype = 'Pay' OR accounttype = 'PAY'
20073 # Update accountype 'W' to 'WRITEOFF'
20076 UPDATE accountlines SET accounttype = 'WRITEOFF' WHERE accounttype = 'W' OR accounttype = 'WO'
20080 # Add any unexpected accounttype codes to credit_types as appropriate
20083 INSERT IGNORE INTO account_credit_types (
20086 can_be_added_manually,
20090 DISTINCT(accounttype),
20091 "Unexpected type found during upgrade",
20101 # Populating credit_type_code
20107 credit_type_code = accounttype, accounttype = NULL
20108 WHERE accounttype IN (SELECT code from account_credit_types)
20112 # Drop accounttype field
20115 ALTER TABLE accountlines
20116 DROP COLUMN `accounttype`
20120 SetVersion($DBversion);
20121 print "Upgrade to $DBversion done (Bug 23805: Add account credit_types)\n";
20124 $DBversion = '19.06.00.045';
20125 if( CheckVersion( $DBversion ) ) {
20126 $dbh->do( "UPDATE systempreferences SET value = '2' WHERE value = '0' AND variable = 'UsageStats'" );
20128 SetVersion( $DBversion );
20129 print "Upgrade to $DBversion done (Bug 23866: Set HEA syspref to prompt for review)\n";
20132 $DBversion = '19.06.00.046';
20133 if( CheckVersion( $DBversion ) ) {
20135 UPDATE systempreferences
20137 options = "Calendar|Days|Datedue|Dayweek",
20138 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"
20140 variable = "useDaysMode"
20143 # Always end with this (adjust the bug info)
20144 SetVersion( $DBversion );
20145 print "Upgrade to $DBversion done (Bug 15260: Option for extended loan with useDaysMode)\n";
20148 $DBversion = '19.06.00.047';
20149 if ( CheckVersion($DBversion) ) {
20150 if ( !TableExists('return_claims') ) {
20153 CREATE TABLE return_claims (
20154 id int(11) auto_increment, -- Unique ID of the return claim
20155 itemnumber int(11) NOT NULL, -- ID of the item
20156 issue_id int(11) NULL DEFAULT NULL, -- ID of the checkout that triggered the claim
20157 borrowernumber int(11) NOT NULL, -- ID of the patron
20158 notes MEDIUMTEXT DEFAULT NULL, -- Notes about the claim
20159 created_on TIMESTAMP NULL, -- Time and date the claim was created
20160 created_by int(11) NULL DEFAULT NULL, -- ID of the staff member that registered the claim
20161 updated_on TIMESTAMP NULL ON UPDATE CURRENT_TIMESTAMP, -- Time and date of the latest change on the claim (notes)
20162 updated_by int(11) NULL DEFAULT NULL, -- ID of the staff member that updated the claim
20163 resolution varchar(80) NULL DEFAULT NULL, -- Resolution code (RETURN_CLAIM_RESOLUTION AVs)
20164 resolved_on TIMESTAMP NULL DEFAULT NULL, -- Time and date the claim was resolved
20165 resolved_by int(11) NULL DEFAULT NULL, -- ID of the staff member that resolved the claim
20166 PRIMARY KEY (`id`),
20167 KEY `itemnumber` (`itemnumber`),
20168 CONSTRAINT UNIQUE `issue_id` ( issue_id ),
20169 CONSTRAINT `issue_id` FOREIGN KEY (`issue_id`) REFERENCES `issues` (`issue_id`) ON DELETE SET NULL ON UPDATE CASCADE,
20170 CONSTRAINT `rc_items_ibfk` FOREIGN KEY (`itemnumber`) REFERENCES `items` (`itemnumber`) ON DELETE CASCADE ON UPDATE CASCADE,
20171 CONSTRAINT `rc_borrowers_ibfk` FOREIGN KEY (`borrowernumber`) REFERENCES `borrowers` (`borrowernumber`) ON DELETE CASCADE ON UPDATE CASCADE,
20172 CONSTRAINT `rc_created_by_ibfk` FOREIGN KEY (`created_by`) REFERENCES `borrowers` (`borrowernumber`) ON DELETE SET NULL ON UPDATE CASCADE,
20173 CONSTRAINT `rc_updated_by_ibfk` FOREIGN KEY (`updated_by`) REFERENCES `borrowers` (`borrowernumber`) ON DELETE SET NULL ON UPDATE CASCADE,
20174 CONSTRAINT `rc_resolved_by_ibfk` FOREIGN KEY (`resolved_by`) REFERENCES `borrowers` (`borrowernumber`) ON DELETE SET NULL ON UPDATE CASCADE
20175 ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
20182 INSERT IGNORE INTO systempreferences ( `variable`, `value`, `options`, `explanation`, `type` ) VALUES
20183 ('ClaimReturnedChargeFee', 'ask', 'ask|charge|no_charge', 'Controls whether or not a lost item fee is charged for return claims', 'Choice'),
20184 ('ClaimReturnedLostValue', '', '', 'Sets the LOST AV value that represents "Claims returned" as a lost value', 'Free'),
20185 ('ClaimReturnedWarningThreshold', '', '', 'Sets the number of return claims past which the librarian will be warned the patron has many return claims', 'Integer');
20191 INSERT IGNORE INTO authorised_value_categories ( category_name ) VALUES
20192 ('RETURN_CLAIM_RESOLUTION');
20198 INSERT IGNORE INTO `authorised_values` ( category, authorised_value, lib )
20200 ('RETURN_CLAIM_RESOLUTION', 'RET_BY_PATRON', 'Returned by patron'),
20201 ('RETURN_CLAIM_RESOLUTION', 'FOUND_IN_LIB', 'Found in library');
20205 SetVersion($DBversion);
20207 "Upgrade to $DBversion done (Bug 14697: Extend and enhance 'Claims returned' lost status)\n";
20210 $DBversion = '19.06.00.048';
20211 if( CheckVersion( $DBversion ) ) {
20212 # you can use $dbh here like:
20214 INSERT IGNORE INTO systempreferences ( `variable`, `value`, `options`, `explanation`, `type` )
20215 VALUES ('OPACShowMusicalInscripts','0','','Display musical inscripts on the OPAC record details page when available.','YesNo'),
20216 ('OPACPlayMusicalInscripts','0','','If displayed musical inscripts, play midi conversion on the OPAC record details page.','YesNo')
20219 SetVersion( $DBversion );
20220 print "Upgrade to $DBversion done (Bug 22581: add new OPACShowMusicalInscripts and OPACPlayMusicalInscripts system preferences)\n";
20223 $DBversion = '19.06.00.049';
20224 if( CheckVersion( $DBversion ) ) {
20227 INSERT IGNORE INTO systempreferences (variable,value,options,explanation,type)
20229 'SuspensionsCalendar',
20230 IF( value='noFinesWhenClosed', 'noSuspensionsWhenClosed', 'ignoreCalendar'),
20231 'ignoreCalendar|noSuspensionsWhenClosed',
20232 'Specify whether to use the Calendar in calculating suspensions',
20234 FROM systempreferences
20235 WHERE variable='finesCalendar';
20238 SetVersion( $DBversion );
20239 print "Upgrade to $DBversion done (Bug 13958: Add a SuspensionsCalendar syspref)\n";
20242 $DBversion = '19.06.00.050';
20243 if( CheckVersion( $DBversion ) ) {
20245 INSERT IGNORE INTO systempreferences (variable,value,options,explanation,type)
20246 VALUES ('OPACFineNoRenewalsIncludeCredits','1',NULL,'If enabled the value specified in OPACFineNoRenewals should include any unapplied account credits in the calculation','YesNo')
20249 SetVersion( $DBversion );
20250 print "Upgrade to $DBversion done (Bug 23293: Add 'OPACFineNoRenewalsIncludeCredits' system preference)\n";
20253 $DBversion = '19.11.00.000';
20254 if( CheckVersion( $DBversion ) ) {
20255 NewVersion( $DBversion, undef, '19.11.00 release' );
20258 $DBversion = '19.12.00.000';
20259 if( CheckVersion( $DBversion ) ) {
20260 NewVersion( $DBversion, undef, 'Dobbie is a free elf...' );
20263 $DBversion = '19.12.00.001';
20264 if( CheckVersion( $DBversion ) ) {
20265 $dbh->do( "UPDATE marc_subfield_structure SET kohafield = NULL WHERE kohafield = 'bibliosubject.subject';" );
20266 NewVersion( $DBversion, 17831, 'Remove non-existing bibliosubject.subject from frameworks' );
20269 $DBversion = '19.12.00.002';
20270 if( CheckVersion( $DBversion ) ) {
20272 UPDATE systempreferences SET
20273 variable = 'AllowItemsOnHoldCheckoutSIP',
20274 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.'
20275 WHERE variable = 'AllowItemsOnHoldCheckout'
20278 NewVersion( $DBversion, 23233, 'Rename AllowItemsOnHoldCheckout syspref' );
20281 $DBversion = '19.12.00.003';
20282 if( CheckVersion( $DBversion ) ) {
20284 if( !column_exists( 'library_groups', 'ft_local_hold_group' ) ) {
20285 $dbh->do( "ALTER TABLE library_groups ADD COLUMN ft_local_hold_group tinyint(1) NOT NULL DEFAULT 0 AFTER ft_search_groups_staff" );
20288 NewVersion( $DBversion, 22284, 'Add ft_local_hold_group column to library_groups' );
20291 $DBversion = '19.12.00.004';
20292 if ( CheckVersion($DBversion) ) {
20296 INSERT IGNORE INTO account_debit_types (
20299 can_be_added_manually,
20304 ('PAYOUT', 'Payment from library to patron', 0, NULL, 1)
20309 INSERT IGNORE INTO account_offset_types ( type ) VALUES ('PAYOUT');
20313 INSERT IGNORE permissions (module_bit, code, description)
20315 (10, 'payout', 'Perform account payout action')
20318 NewVersion( $DBversion, 24080, ['Add PAYOUT account_debit_type', 'Add PAYOUT account_offset_type', 'Add accounts payout permission'] );
20321 $DBversion = '19.12.00.005';
20322 if( CheckVersion( $DBversion ) ) {
20323 $dbh->do( "ALTER TABLE action_logs MODIFY COLUMN `timestamp` timestamp NOT NULL default CURRENT_TIMESTAMP" );
20325 NewVersion( $DBversion, 24329, 'Do not update action_log.timestamp' );
20328 $DBversion = '19.12.00.006';
20329 if( CheckVersion( $DBversion ) ) {
20331 UPDATE borrowers SET relationship = NULL
20332 WHERE relationship = ""
20335 NewVersion( $DBversion, 24263, 'Replace relationship with NULL when empty string' );
20338 $DBversion = '19.12.00.007';
20339 if ( CheckVersion($DBversion) ) {
20343 INSERT IGNORE INTO account_credit_types (code, description, can_be_added_manually, is_system)
20345 ('REFUND', 'A refund applied to a patrons fine', 0, 1)
20350 INSERT IGNORE INTO account_offset_types ( type ) VALUES ('REFUND');
20354 INSERT IGNORE permissions (module_bit, code, description)
20356 (10, 'refund', 'Perform account refund action')
20359 NewVersion( $DBversion, 23442, ['Add REFUND to account_credit_types', 'Add REFUND to account_offset_types', 'Add accounts refund permission'] );
20362 $DBversion = '19.12.00.008';
20363 if( CheckVersion( $DBversion ) ) {
20364 $dbh->do( 'UPDATE systempreferences SET value = REPLACE(value, "http://worldcat.org", "https://worldcat.org") WHERE variable = "OPACSearchForTitleIn"' );
20365 $dbh->do( 'UPDATE systempreferences SET value = REPLACE(value, "http://www.bookfinder.com", "https://www.bookfinder.com") WHERE variable = "OPACSearchForTitleIn"' );
20366 $dbh->do( 'UPDATE systempreferences SET value = REPLACE(value, "https://openlibrary.org/search/?", "https://openlibrary.org/search?") WHERE variable = "OPACSearchForTitleIn"' );
20368 NewVersion( $DBversion, 24206, 'Update OpacSearchForTitleIn system preference' );
20371 $DBversion = '19.12.00.009';
20372 if( CheckVersion( $DBversion ) ) {
20375 INSERT IGNORE INTO account_offset_types ( type ) VALUES ( 'Purchase' );
20379 INSERT IGNORE INTO account_credit_types ( code, description, can_be_added_manually, is_system )
20380 VALUES ('PURCHASE', 'Purchase', 0, 1);
20383 my $sth = $dbh->prepare(q{
20384 SELECT COUNT(*) FROM authorised_values WHERE category = 'PAYMENT_TYPE' AND authorised_value = 'CASH'
20387 my $already_exists = $sth->fetchrow;
20388 if ( not $already_exists ) {
20390 INSERT INTO authorised_values (category,authorised_value,lib) VALUES ('PAYMENT_TYPE','CASH','Cash')
20394 # Updating field in account_debit_types
20395 unless ( column_exists('account_debit_types', 'can_be_invoiced') ) {
20398 ALTER TABLE account_debit_types
20400 can_be_added_manually can_be_invoiced tinyint(1) NOT NULL DEFAULT 1
20404 unless ( column_exists('account_debit_types', 'can_be_sold') ) {
20407 ALTER TABLE account_debit_types
20409 can_be_sold tinyint(1) DEFAULT 0
20417 INSERT IGNORE INTO `letter` (`module`, `code`, `branchcode`, `name`, `is_html`, `title`, `content`, `message_transport_type`, `lang`) VALUES
20418 ('pos', 'RECEIPT', '', 'Point of sale receipt', 0, 'Receipt', '[% PROCESS "accounts.inc" %]
20420 [% IF ( LibraryName ) %]
20422 <th colspan="2" class="centerednames">
20423 <h3>[% LibraryName | html %]</h3>
20428 <th colspan="2" class="centerednames">
20429 <h2>[% Branches.GetName( payment.branchcode ) | html %]</h2>
20433 <th colspan="2" class="centerednames">
20434 <h3>[% payment.date | $KohaDates %]</h3>
20437 <td>Transaction ID: </td>
20438 <td>[% payment.accountlines_id %]</td>
20441 <td>Operator ID: </td>
20442 <td>[% payment.manager_id %]</td>
20445 <td>Payment type: </td>
20446 <td>[% payment.payment_type %]</td>
20450 <th colspan="2" class="centerednames">
20451 <h2><u>Fee receipt</u></h2>
20456 <th>Description of charges</th>
20460 [% FOREACH offset IN offsets %]
20462 <td>[% PROCESS account_type_description account=offset.debit %]</td>
20463 <td>[% offset.amount * -1 | $Price %]</td>
20468 <tr class="highlight">
20470 <td>[% payment.amount * -1| $Price %]</td>
20473 <td>Tendered: </td>
20474 <td>[% collected | $Price %]</td>
20478 <td>[% change | $Price %]</td>
20481 </table>', 'print', 'default');
20485 INSERT IGNORE permissions (module_bit, code, description)
20487 (25, 'takepayment', 'Access the point of sale page and take payments')
20490 NewVersion( $DBversion, 23354, [q|Add 'Purchase' account offset type|, q|Add 'RECEIPT' notice for Point of Sale|, q|Add point of sale permissions|] );
20493 $DBversion = '19.12.00.010';
20494 if( CheckVersion( $DBversion ) ) {
20495 if( !column_exists( 'oai_sets_mappings', 'rule_order' ) ) {
20496 $dbh->do( "ALTER TABLE oai_sets_mappings ADD COLUMN rule_order INT AFTER set_id, ADD COLUMN rule_operator VARCHAR(3) AFTER rule_order" );
20497 $dbh->do( "UPDATE oai_sets_mappings SET rule_operator='or'" );
20498 my $sets = $dbh->selectall_arrayref("SELECT * from oai_sets_mappings ORDER BY set_id", { Slice => {} });
20500 my $previous_set_id;
20501 for my $set ( @{$sets}) {
20502 my $set_id = $set->{set_id};
20504 if ($previous_set_id && $previous_set_id != $set_id) {
20509 $dbh->do("UPDATE oai_sets_mappings SET rule_operator=NULL WHERE set_id=? LIMIT 1", {}, $set_id);
20512 $dbh->do("UPDATE oai_sets_mappings SET rule_order=? WHERE set_id=? AND rule_order IS NULL LIMIT 1", {}, $i, $set_id);
20515 $previous_set_id = $set_id;
20519 NewVersion( $DBversion, 21520, 'Add rule_order and rule_operator fields to oai_sets_mappings table' );
20522 $DBversion = '19.12.00.011';
20523 if( CheckVersion( $DBversion ) ) {
20524 if( !foreign_key_exists( 'repeatable_holidays', 'repeatable_holidays_ibfk_1' ) ) {
20527 FROM repeatable_holidays h
20528 LEFT JOIN branches b ON h.branchcode=b.branchcode
20529 WHERE b.branchcode IS NULL;
20532 ALTER TABLE repeatable_holidays
20533 ADD FOREIGN KEY repeatable_holidays_ibfk_1 (branchcode) REFERENCES branches (branchcode) ON DELETE CASCADE ON UPDATE CASCADE
20537 if( !foreign_key_exists( 'special_holidays', 'special_holidays_ibfk_1' ) ) {
20540 FROM special_holidays h
20541 LEFT JOIN branches b ON h.branchcode=b.branchcode
20542 WHERE b.branchcode IS NULL;
20545 ALTER TABLE special_holidays
20546 ADD FOREIGN KEY special_holidays_ibfk_1 (branchcode) REFERENCES branches (branchcode) ON DELETE CASCADE ON UPDATE CASCADE
20550 NewVersion( $DBversion, 24289, 'Adding foreign keys on *_holidays.branchcode tables' );
20553 $DBversion = '19.12.00.012';
20554 if( CheckVersion( $DBversion ) ) {
20562 `code` = 'manage_cash_registers'
20565 NewVersion( $DBversion, 24481, 'Move permission to correct module_bit' );
20568 $DBversion = '19.12.00.013';
20569 if( CheckVersion( $DBversion ) ) {
20572 systempreferences (variable,value,options,explanation,type)
20574 ('EnablePointOfSale','0',NULL,'Enable the point of sale feature to allow anonymous transactions with the accounting system. (Requires UseCashRegisters)','YesNo')
20577 NewVersion( $DBversion, 24478, 'Add `EnablePointOfSale` system preference to allow disabling the point of sale feature)' );
20580 $DBversion = '19.12.00.014';
20581 if( CheckVersion( $DBversion ) ) {
20582 unless ( column_exists('branchtransfers', 'reason') ) {
20585 ALTER TABLE branchtransfers
20587 `reason` enum('Manual')
20594 NewVersion( $DBversion, 24287, q|Add 'reason' field to transfers table| );
20597 $DBversion = '19.12.00.015';
20598 if( CheckVersion( $DBversion ) ) {
20600 # Add stockrotation states to reason enum
20608 'StockrotationAdvance',
20609 'StockrotationRepatriation'
20615 # Move stockrotation states to reason field
20621 `reason` = 'StockrotationAdvance',
20624 `comments` = 'StockrotationAdvance'
20632 `reason` = 'StockrotationRepatriation',
20635 `comments` = 'StockrotationRepatriation'
20639 NewVersion( $DBversion, 24296, q|Update stockrotation to use 'reason' field in transfers table| );
20642 $DBversion = '19.12.00.016';
20643 if( CheckVersion( $DBversion ) ) {
20645 INSERT IGNORE INTO `userflags` (`bit`, `flag`, `flagdesc`, `defaulton`)
20646 VALUES (12, 'suggestions', 'Suggestion management', 0)
20650 UPDATE permissions SET module_bit=12
20651 WHERE code="suggestions_manage"
20655 UPDATE borrowers SET flags = flags | (1<<12) WHERE flags & (1 << 11)
20658 NewVersion( $DBversion, 22868, 'Move suggestions_manage subpermission out of acquisition permission' );
20661 $DBversion = '19.12.00.017';
20662 if( CheckVersion( $DBversion ) ) {
20663 if( !index_exists( 'library_groups', 'library_groups_uniq_2' ) ) {
20665 DELETE FROM library_groups
20668 FROM ( SELECT * FROM library_groups ) AS lg
20669 GROUP BY parent_id, branchcode
20671 AND NOT(parent_id IS NULL OR branchcode IS NULL);
20674 ALTER TABLE library_groups
20675 ADD UNIQUE KEY library_groups_uniq_2 (parent_id, branchcode)
20679 NewVersion( $DBversion, 21674, 'Add unique key (parent_id, branchcode) to library_group' );
20682 $DBversion = '19.12.00.018';
20683 if( CheckVersion( $DBversion ) ) {
20690 suspension_chargeperiod
20693 chargeperiod_charge_at
20703 no_auto_renewal_after
20704 no_auto_renewal_after_hard_limit
20711 cap_fine_to_replacement_price
20717 DELETE i FROM issuingrules i
20718 LEFT JOIN itemtypes it ON i.itemtype=it.itemtype
20719 WHERE it.itemtype IS NULL AND i.itemtype!='*'
20722 DELETE i FROM issuingrules i
20723 LEFT JOIN branches b ON i.branchcode=b.branchcode
20724 WHERE b.branchcode IS NULL AND i.branchcode!='*'
20727 DELETE i FROM issuingrules i
20728 LEFT JOIN categories c ON i.categorycode=c.categorycode
20729 WHERE c.categorycode IS NULL AND i.categorycode!='*'
20731 if ( column_exists( 'issuingrules', 'categorycode' ) ) {
20732 foreach my $column ( @columns ) {
20734 INSERT INTO circulation_rules ( categorycode, branchcode, itemtype, rule_name, rule_value )
20735 SELECT IF(categorycode='*', NULL, categorycode), IF(branchcode='*', NULL, branchcode), IF(itemtype='*', NULL, itemtype), \'$column\', COALESCE( $column, '' )
20740 DELETE FROM circulation_rules WHERE rule_name='holdallowed' AND rule_value='';
20742 $dbh->do("DROP TABLE issuingrules");
20745 NewVersion( $DBversion, 18936, 'Convert issuingrules fields to circulation_rules' );
20748 $DBversion = '19.12.00.019';
20749 if( CheckVersion( $DBversion ) ) {
20751 $dbh->do("ALTER TABLE message_queue MODIFY time_queued timestamp NULL");
20753 if( !column_exists( 'message_queue', 'updated_on' ) ) {
20754 $dbh->do("ALTER TABLE message_queue ADD COLUMN updated_on timestamp NOT NULL default CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP AFTER time_queued");
20755 $dbh->do("UPDATE message_queue SET updated_on=time_queued");
20758 NewVersion( $DBversion, 23673, 'modify time_queued and add updated_on to message_queue' );
20761 $DBversion = '19.12.00.020';
20762 if ( CheckVersion($DBversion) ) {
20763 if ( !column_exists( 'marc_subfield_structure', 'important') ){
20764 $dbh->do("ALTER TABLE marc_subfield_structure ADD COLUMN important TINYINT(4) NOT NULL DEFAULT 0 AFTER mandatory");
20766 if ( !column_exists( 'marc_tag_structure', 'important') ){
20767 $dbh->do("ALTER TABLE marc_tag_structure ADD COLUMN important TINYINT(4) NOT NULL DEFAULT 0 AFTER mandatory");
20770 NewVersion( $DBversion, 8643, 'Add important constraint to marc subfields' );
20773 $DBversion = '19.12.00.021';
20774 if( CheckVersion( $DBversion ) ) {
20776 # Add LOST_FOUND debit type
20779 account_credit_types ( code, description, can_be_added_manually, is_system )
20781 ('LOST_FOUND', 'Lost item fee refund', 0, 1)
20784 # Migrate LOST_RETURN to LOST_FOUND
20789 credit_type_code = 'LOST_FOUND'
20791 credit_type_code = 'LOST_RETURN'
20793 credit_type_code = 'LOST_RETURNED'
20796 # Migrate LOST + RETURNED to LOST + FOUND
20803 debit_type_code = 'LOST'
20805 status = 'RETURNED'
20808 # Drop LOST_RETURNED credit type
20810 DELETE FROM account_credit_types WHERE code = 'LOST_RETURNED'
20813 # Drop LOST_RETURN credit type
20815 DELETE FROM account_credit_types WHERE code = 'LOST_RETURN'
20818 # Add Lost Item Found offset type
20821 account_offset_types ( type )
20823 ( 'Lost Item Found' )
20826 NewVersion( $DBversion, 24592, 'Update LOST_RETURN to LOST_FOUND');
20829 $DBversion = '19.12.00.022';
20830 if( CheckVersion( $DBversion ) ) {
20831 $dbh->do( "ALTER TABLE items MODIFY COLUMN uri MEDIUMTEXT" );
20832 $dbh->do( "ALTER TABLE deleteditems MODIFY COLUMN uri MEDIUMTEXT" );
20834 NewVersion( $DBversion, 20882, 'items.uri to MEDIUMTEXT');
20837 $DBversion = '19.12.00.023';
20838 if( CheckVersion( $DBversion ) ) {
20839 $dbh->do( "ALTER TABLE quotes MODIFY timestamp datetime NULL" );
20841 NewVersion( $DBversion, 24640, 'Allow quotes.timestamp to be NULL');
20844 $DBversion = '19.12.00.024';
20845 if( CheckVersion( $DBversion ) ) {
20847 UPDATE systempreferences SET value = 'off'
20848 WHERE variable = 'finesMode' AND (value <> 'production' OR value IS NULL)
20851 UPDATE systempreferences SET options = 'off|production',
20852 explanation = "Choose the fines mode, 'off' (do not accrue fines) or 'production' (accrue overdue fines). Requires accruefines cronjob or CalculateFinesOnReturn system preference."
20853 WHERE variable = 'finesMode'
20856 NewVersion( $DBversion, 21633, 'Remove finesMode "test"');
20859 $DBversion = '19.12.00.025';
20860 if( CheckVersion( $DBversion ) ) {
20862 INSERT IGNORE INTO `systempreferences` (variable,value,options,explanation,type)
20863 VALUES ('DumpSearchQueryTemplate',0,'','Add the search query being passed to the search engine into the template for debugging','YesNo')
20866 NewVersion( $DBversion, 24103, 'add DumpSearchQueryTemplate syspref');
20869 $DBversion = '19.12.00.026';
20870 if( CheckVersion( $DBversion ) ) {
20871 if( !column_exists( 'z3950servers', 'attributes' ) ) {
20872 $dbh->do( "ALTER TABLE z3950servers ADD COLUMN attributes VARCHAR(255) after add_xslt" );
20875 NewVersion( $DBversion, 11297, 'Add support for custom PQF attributes for Z39.50 server searches');
20878 $DBversion = '19.12.00.027';
20879 if( CheckVersion( $DBversion ) ) {
20881 # Add any pathalogical incorrect debit_types as credit_types as appropriate
20884 INSERT IGNORE INTO account_credit_types (
20887 can_be_added_manually,
20891 DISTINCT(debit_type_code),
20892 "Unexpected type found during upgrade",
20900 debit_type_code IS NOT NULL
20904 # Correct any pathalogical cases
20909 credit_type_code = debit_type_code,
20910 debit_type_code = NULL
20914 debit_type_code IS NOT NULL
20917 NewVersion( $DBversion, 24532, 'Fix pathological cases of negative debits');
20920 $DBversion = '19.12.00.028';
20921 if( CheckVersion( $DBversion ) ) {
20923 INSERT IGNORE INTO systempreferences (variable,value,options,explanation,type)
20925 ('OpacBrowseSearch', '0',NULL, "Elasticsearch only: add a page allowing users to 'browse' all items in the collection",'YesNo')
20928 NewVersion( $DBversion, 14567, 'Add OpacBrowseSearch syspref');
20931 $DBversion = '19.12.00.029';
20932 if( CheckVersion( $DBversion ) ) {
20933 if (!column_exists('account_credit_types', 'archived')) {
20934 $dbh->do('ALTER TABLE account_credit_types ADD COLUMN archived tinyint(1) NOT NULL DEFAULT 0 AFTER is_system');
20937 NewVersion( $DBversion, 17702, 'Add column account_credit_types.archived');
20940 $DBversion = '19.12.00.030';
20941 if( CheckVersion( $DBversion ) ) {
20943 # get list of installed translations
20944 require C4::Languages;
20946 my $tlangs = C4::Languages::getTranslatedLanguages('opac','bootstrap');
20948 foreach my $language ( @$tlangs ) {
20949 foreach my $sublanguage ( @{$language->{'sublanguages_loop'}} ) {
20950 push @langs, $sublanguage->{'rfc4646_subtag'};
20954 # Get any existing value from the opacheader system preference
20955 my ($opacheader) = $dbh->selectrow_array( q|
20956 SELECT value FROM systempreferences WHERE variable='opacheader';
20961 foreach my $lang ( @langs ) {
20962 # If there is a value in the opacheader preference, insert it into opac_news
20963 $dbh->do("INSERT INTO opac_news (branchcode, lang, title, content ) VALUES (NULL, ?, '', ?)", undef, "opacheader_$lang", $opacheader);
20964 push @detail, "Inserted opacheader contents into $lang news item...";
20967 # Remove the opacheader system preference
20968 $dbh->do("DELETE FROM systempreferences WHERE variable='opacheader'");
20970 unshift @detail, 'Move contents of opacheader preference to Koha news system';
20971 NewVersion( $DBversion, 22880, \@detail);
20974 $DBversion = '19.12.00.031';
20975 if( CheckVersion( $DBversion ) ) {
20977 ALTER TABLE article_requests MODIFY COLUMN created_on timestamp NULL, MODIFY COLUMN updated_on timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp()
20980 NewVersion( $DBversion, 22273, "Column article_requests.created_on should not be updated" );
20983 $DBversion = '19.12.00.032';
20984 if( CheckVersion( $DBversion ) ) {
20986 DELETE FROM systempreferences WHERE variable="UseQueryParser"
20989 NewVersion( $DBversion, 24735, "Remove UseQueryParser system preference" );
20992 $DBversion = '19.12.00.033';
20993 if ( CheckVersion($DBversion) ) {
20995 # Add cash_register_actions table
20996 if ( !TableExists('cash_register_actions') ) {
20998 CREATE TABLE `cash_register_actions` (
20999 `id` int(11) NOT NULL auto_increment, -- unique identifier for each account register action
21000 `code` varchar(24) NOT NULL, -- action code denoting the type of action recorded (enum),
21001 `register_id` int(11) NOT NULL, -- id of cash_register this action belongs to,
21002 `manager_id` int(11) NOT NULL, -- staff member performing the action
21003 `amount` decimal(28,6) DEFAULT NULL, -- amount recorded in action (signed)
21004 `timestamp` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
21005 PRIMARY KEY (`id`),
21006 CONSTRAINT `cash_register_actions_manager` FOREIGN KEY (`manager_id`) REFERENCES `borrowers` (`borrowernumber`) ON DELETE CASCADE ON UPDATE CASCADE,
21007 CONSTRAINT `cash_register_actions_register` FOREIGN KEY (`register_id`) REFERENCES `cash_registers` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
21008 ) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_unicode_ci;
21012 # Add cashup permission
21014 INSERT IGNORE permissions (module_bit, code, description)
21016 (25, 'cashup', 'Perform cash register cashup action')
21019 NewVersion( $DBversion, 23355, [ "Add cash_register_actions table", "Add cash register cashup permissions" ] );
21022 $DBversion = '19.12.00.034';
21023 if ( CheckVersion($DBversion) ) {
21027 INSERT IGNORE INTO account_credit_types (code, description, can_be_added_manually, is_system)
21029 ('DISCOUNT', 'A discount applied to a patrons fine', 0, 1)
21035 INSERT IGNORE INTO account_offset_types ( type ) VALUES ('DISCOUNT');
21041 INSERT IGNORE permissions (module_bit, code, description)
21043 (10, 'discount', 'Perform account discount action')
21047 NewVersion( $DBversion, 24081, "Add DISCOUNT to account_credit_types and account_offset_types, Add accounts discount permission");
21050 $DBversion = '19.12.00.035';
21051 if ( CheckVersion($DBversion) ) {
21054 INSERT IGNORE permissions (module_bit, code, description)
21056 (25, 'anonymous_refund', 'Perform refund actions from cash registers')
21059 NewVersion( $DBversion, 23442, "Add a refund option to the point of sale system" );
21062 $DBversion = '19.12.00.036';
21063 if( CheckVersion( $DBversion ) ) {
21065 INSERT IGNORE INTO `systempreferences`
21066 (`variable`, `value`, `options`, `explanation`, `type`)
21068 ('AccessControlAllowOrigin', '', NULL, 'Set the Access-Control-Allow-Origin header to the specified value', 'Free');
21071 NewVersion( $DBversion, 24369, "Add CORS support to Koha");
21074 $DBversion = '19.12.00.037';
21075 if( CheckVersion( $DBversion ) ) {
21077 $dbh->do( q| INSERT IGNORE INTO systempreferences (variable, value, explanation, options, type) VALUES ('RenewAccruingItemInOpac', '0', 'If enabled, when the fines on an item accruing is paid off in the OPAC via a payment plugin, attempt to renew that item. If the syspref "RenewalPeriodBase" is set to "due date", renewed items may still be overdue', '', 'YesNo'); | );
21079 $dbh->do( q| INSERT IGNORE INTO systempreferences (variable, value, explanation, options, type) VALUES ('RenewAccruingItemWhenPaid', '0', 'If enabled, when the fines on an item accruing is paid off, attempt to renew that item. If the syspref "RenewalPeriodBase" is set to "due date", renewed items may still be overdue', '', 'YesNo'); | );
21081 NewVersion( $DBversion, 23051, [ "Add RenewAccruingItemInOpac syspref", "Add RenewAccruingItemWhenPaid syspref" ]);
21084 $DBversion = '19.12.00.038';
21085 if( CheckVersion( $DBversion ) ) {
21086 $dbh->do( q| INSERT IGNORE INTO systempreferences (variable, value, explanation, options, type) VALUES ('CirculateILL', '0', 'If enabled, it is possible to circulate ILL requested items from within ILL', '', 'YesNo'); | );
21088 NewVersion( $DBversion, 23112, "Add CirculateILL syspref");
21091 $DBversion = '19.12.00.039';
21092 if( CheckVersion( $DBversion ) ) {
21093 $dbh->do( "DROP TABLE IF EXISTS printers" );
21095 if( column_exists( 'branches', 'branchprinter' ) ) {
21096 $dbh->do( "ALTER TABLE branches DROP COLUMN branchprinter" );
21099 $dbh->do(qq{ DELETE FROM systempreferences WHERE variable = "printcirculationslips"} );
21101 NewVersion( $DBversion, 17845, "Drop unused table printers and branchprinter column");
21104 $DBversion = '19.12.00.040';
21105 if( CheckVersion( $DBversion ) ) {
21106 $dbh->do( "UPDATE systempreferences SET explanation = 'Comma separated list defining the default fields to be used during a patron search using the \"standard\" option. If empty Koha will default to \"surname,firstname,othernames,cardnumber,userid\". Additional fields added to this preference will be added as search options in the dropdown menu on the patron search page.' WHERE variable='DefaultPatronSearchFields' " );
21108 NewVersion( $DBversion, 17374, "Update description of DefaultPatronSearchFields");
21111 $DBversion = '19.12.00.041';
21112 if( CheckVersion( $DBversion ) ) {
21114 # Update existing NULL priorities
21116 UPDATE reserves SET priority = 1 WHERE priority IS NULL
21120 ALTER TABLE reserves MODIFY priority SMALLINT(6) NOT NULL DEFAULT 1
21124 UPDATE old_reserves SET priority = 1 WHERE priority IS NULL
21128 ALTER TABLE old_reserves MODIFY priority SMALLINT(6) NOT NULL DEFAULT 1
21131 NewVersion( $DBversion, 24722, "Enforce NOT NULL constraint for reserves.priority");
21134 $DBversion = '19.12.00.042';
21135 if( CheckVersion( $DBversion ) ) {
21136 if (!column_exists('message_queue', 'reply_address')) {
21137 $dbh->do('ALTER TABLE message_queue ADD COLUMN reply_address LONGTEXT AFTER from_address');
21140 NewVersion( $DBversion, 22821, "Add reply_address to message_queue");
21143 $DBversion = '19.12.00.043';
21144 if( CheckVersion( $DBversion ) ) {
21146 # Add return reasons to enum
21154 'StockrotationAdvance',
21155 'StockrotationRepatriation',
21163 NewVersion( $DBversion, 24296, "Add 'return' reasons to branchtransfers enum");
21166 $DBversion = '19.12.00.044';
21167 if( CheckVersion( $DBversion ) ) {
21169 INSERT IGNORE permissions (module_bit, code, description)
21171 (13, 'batch_extend_due_dates', 'Perform batch extend due dates')
21174 NewVersion( $DBversion, 24846, "Add a new permission for new tool batch extend due dates");
21177 $DBversion = '19.12.00.045';
21178 if( CheckVersion( $DBversion ) ) {
21180 INSERT IGNORE INTO systempreferences (variable,value,options,explanation,type)
21182 ('CollapseFieldsPatronAddForm','',NULL,'Collapse these fields by default when adding a new patron. These fields can still be expanded.','Multiple')
21185 NewVersion( $DBversion, 4461, "Add CollapseFieldsPatronAddForm system preference");
21188 $DBversion = '19.12.00.046';
21189 if( CheckVersion( $DBversion ) ) {
21191 $dbh->do( "ALTER TABLE accountlines MODIFY COLUMN date TIMESTAMP NULL" );
21193 NewVersion( $DBversion, 24818, "Update 'accountlines.date' from DATE to TIMESTAMP");
21196 $DBversion = '19.12.00.047';
21197 if( CheckVersion( $DBversion ) ) {
21199 ALTER TABLE biblioimages
21200 ADD `timestamp` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
21204 NewVersion( $DBversion, 22987, "Add biblioimages.timestamp");
21207 $DBversion = '19.12.00.048';
21208 if( CheckVersion( $DBversion ) ) {
21210 # Add rotating collection states to reason enum
21218 'StockrotationAdvance',
21219 'StockrotationRepatriation',
21222 'RotatingCollection'
21228 NewVersion( $DBversion, 24299, "Add 'collection' reasons to branchtransfers enum");
21231 $DBversion = '19.12.00.049';
21232 if( CheckVersion( $DBversion ) ) {
21234 # Add reserve reasons enum
21242 'StockrotationAdvance',
21243 'StockrotationRepatriation',
21246 'RotatingCollection',
21255 NewVersion( $DBversion, 24299, "Add 'reserve' reasons to branchtransfers enum");
21258 $DBversion = '19.12.00.050';
21259 if( CheckVersion( $DBversion ) ) {
21260 $dbh->do( "DELETE FROM systempreferences WHERE variable in ('IDreamBooksReadometer','IDreamBooksResults','IDreamBooksReviews')" );
21262 NewVersion( $DBversion, 24854, "Remove IDreamBooks* system preferences");
21265 $DBversion = '19.12.00.051';
21266 if( CheckVersion( $DBversion ) ) {
21268 UPDATE systempreferences SET options = 'itemhomebranch|patronhomebranch|checkoutbranch|none' WHERE variable='OpacRenewalBranch'
21271 UPDATE systempreferences SET value = "none" WHERE variable='OpacRenewalBranch'
21275 UPDATE systempreferences SET value = 'opacrenew' WHERE variable='OpacRenewalBranch'
21276 AND value NOT IN ('checkoutbranch','itemhomebranch','opacrenew','patronhomebranch','none')
21279 NewVersion( $DBversion, 24759, "Cleanup OpacRenewalBranch");
21282 $DBversion = '19.12.00.052';
21283 if( CheckVersion( $DBversion ) ) {
21284 my $finesCalendar = C4::Context->preference('finesCalendar');
21285 my $value = $finesCalendar eq 'noFinesWhenClosed' ? 1 : 0;
21287 if( !column_exists( 'itemtypes', 'rentalcharge_daily_calendar' ) ) {
21289 ALTER TABLE itemtypes ADD COLUMN
21290 rentalcharge_daily_calendar tinyint(1) NOT NULL DEFAULT 1
21291 AFTER rentalcharge_daily;
21294 $dbh->do("UPDATE itemtypes SET rentalcharge_daily_calendar = $value");
21297 if( !column_exists( 'itemtypes', 'rentalcharge_hourly_calendar' ) ) {
21299 ALTER TABLE itemtypes ADD COLUMN
21300 rentalcharge_hourly_calendar tinyint(1) NOT NULL DEFAULT 1
21301 AFTER rentalcharge_hourly;
21304 $dbh->do("UPDATE itemtypes SET rentalcharge_hourly_calendar = $value");
21307 NewVersion( $DBversion, 21443, "Add ability to exclude holidays when calculating rentals fees by time period");
21310 $DBversion = '19.12.00.053';
21311 if( CheckVersion( $DBversion ) ) {
21312 unless( column_exists('borrowers','autorenew_checkouts') ){
21313 $dbh->do( "ALTER TABLE borrowers ADD COLUMN autorenew_checkouts TINYINT(1) NOT NULL DEFAULT 1 AFTER anonymized" );
21315 unless( column_exists('deletedborrowers','autorenew_checkouts') ){
21316 $dbh->do( "ALTER TABLE deletedborrowers ADD COLUMN autorenew_checkouts TINYINT(1) NOT NULL DEFAULT 1 AFTER anonymized" );
21319 INSERT IGNORE INTO systempreferences
21320 ( `variable`, `value`, `options`, `explanation`, `type` )
21322 ('AllowPatronToControlAutorenewal','0',NULL,'If enabled, patrons will have a field in their account to choose whether their checkouts are auto renewed or not','YesNo')
21325 NewVersion( $DBversion, 24476, "Allow patrons to opt-out of autorenewal");
21328 $DBversion = '19.12.00.054';
21329 if( CheckVersion( $DBversion ) ) {
21331 if ( !TableExists('desks') ) {
21333 CREATE TABLE `desks` ( -- desks available in a library
21334 `desk_id` int(11) NOT NULL auto_increment, -- unique identifier added by Koha
21335 `desk_name` varchar(100) NOT NULL default '', -- name of the desk
21336 `branchcode` varchar(10) NOT NULL, -- library the desk is located at
21337 PRIMARY KEY (`desk_id`),
21338 KEY `fk_desks_branchcode` (`branchcode`),
21339 CONSTRAINT `fk_desks_branchcode` FOREIGN KEY (`branchcode`) REFERENCES `branches` (`branchcode`) ON DELETE CASCADE ON UPDATE CASCADE
21340 ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
21344 NewVersion( $DBversion, 13881, "Add desk management");
21347 $DBversion = '19.12.00.055';
21348 if( CheckVersion( $DBversion ) ) {
21349 if( !column_exists( 'suggestions', 'lastmodificationby' ) ) {
21351 ALTER TABLE suggestions ADD COLUMN lastmodificationby INT(11) DEFAULT NULL AFTER rejecteddate
21355 ALTER TABLE suggestions ADD CONSTRAINT `suggestions_ibfk_lastmodificationby` FOREIGN KEY (`lastmodificationby`) REFERENCES `borrowers` (`borrowernumber`) ON DELETE SET NULL ON UPDATE CASCADE
21359 if( !column_exists( 'suggestions', 'lastmodificationdate' ) ) {
21361 ALTER TABLE suggestions ADD COLUMN lastmodificationdate DATE DEFAULT NULL AFTER lastmodificationby
21364 my $suggestions = $dbh->selectall_arrayref(q|
21365 SELECT suggestionid, managedby, manageddate, acceptedby, accepteddate, rejectedby, rejecteddate
21367 |, { Slice => {} });
21368 for my $suggestion ( @$suggestions ) {
21369 my ( $max_date ) = sort ( $suggestion->{manageddate} || (), $suggestion->{accepteddate} || (), $suggestion->{rejecteddate} || () );
21370 next unless $max_date;
21371 my $last_modif_by = ( defined $suggestion->{manageddate} and $max_date eq $suggestion->{manageddate} )
21372 ? $suggestion->{managedby}
21373 : ( defined $suggestion->{accepteddate} and $max_date eq $suggestion->{accepteddate} )
21374 ? $suggestion->{acceptedby}
21375 : ( defined $suggestion->{rejecteddate} and $max_date eq $suggestion->{rejecteddate} )
21376 ? $suggestion->{rejectedby}
21378 next unless $last_modif_by;
21381 SET lastmodificationdate = ?, lastmodificationby = ?
21382 WHERE suggestionid = ?
21383 |, undef, $max_date, $last_modif_by, $suggestion->{suggestionid});
21389 INSERT IGNORE INTO letter(module, code, branchcode, name, is_html, title, content, message_transport_type, lang) VALUES ('suggestions', 'NOTIFY_MANAGER', '', 'Notify manager of a suggestion', 0, "A suggestion has been assigned to you", "Dear [% borrower.firstname %] [% borrower.surname %],\nA suggestion has been assigned to you: [% suggestion.title %].\nThank you,\n[% branch.branchname %]", 'email', 'default');
21392 NewVersion( $DBversion, 23590, "Add lastmodificationby and lastmodificationdate to the suggestions table");
21395 $DBversion = '19.12.00.056';
21396 if( CheckVersion( $DBversion ) ) {
21398 $dbh->do( "DELETE FROM systempreferences WHERE variable='UseKohaPlugins'" );
21400 NewVersion( $DBversion, 20415, "Remove UseKohaPlugins preference");
21403 $DBversion = '19.12.00.057';
21404 if( CheckVersion( $DBversion ) ) {
21406 $dbh->do( "DELETE FROM systempreferences WHERE variable='INTRAdidyoumean'" );
21408 NewVersion( $DBversion, 20399, "Remove INTRAdidyoumean preference");
21411 $DBversion = '19.12.00.058';
21412 if( CheckVersion( $DBversion ) ) {
21414 INSERT IGNORE INTO systempreferences (`variable`, `value`, `options`, `explanation`,`type`) VALUES
21415 ('OPACnumSearchResultsDropdown', 0, NULL, 'Enable option list of number of results per page to show in OPAC search results','YesNo'),
21416 ('numSearchResultsDropdown', 0, NULL, 'Enable option list of number of results per page to show in staff client search results','YesNo')
21419 NewVersion( $DBversion, 14715, "Add sysprefs numSearchResultsDropdown and OPACnumSearchResultsDropdown");
21422 $DBversion = '19.12.00.059';
21423 if( CheckVersion( $DBversion ) ) {
21425 for my $column ( qw(othersupplier booksellerfax booksellerurl bookselleremail currency) ) {
21426 if( column_exists( 'aqbooksellers', $column ) ) {
21427 my ($count) = $dbh->selectrow_array(qq|
21430 WHERE $column IS NOT NULL AND $column <> ""
21433 warn "Warning - Cannot remove column aqbooksellers.$column. At least one value exists";
21436 ALTER TABLE aqbooksellers
21437 DROP COLUMN $column
21443 NewVersion( $DBversion, 18177, "Remove some unused columns from aqbooksellers");
21446 $DBversion = '19.12.00.060';
21447 if( CheckVersion( $DBversion ) ) {
21449 ALTER TABLE search_marc_map CHANGE marc_type `marc_type` enum('marc21','normarc','unimarc') COLLATE utf8mb4_unicode_ci NOT NULL COMMENT 'what MARC type this map is for';
21451 NewVersion( $DBversion, 23204, "Change enum order for marc_type in search_marc_map to fix sorting");
21454 $DBversion = '19.12.00.061';
21455 if ( CheckVersion($DBversion) ) {
21460 options = "batchmod|moredetail|cronjob|additem|pendingreserves|onpayment"
21462 variable = "MarkLostItemsAsReturned"
21465 my $lost_item_returned = C4::Context->preference("MarkLostItemsAsReturned");
21466 my @set = split( ",", $lost_item_returned );
21467 push @set, 'onpayment';
21468 $lost_item_returned = join( ",", @set );
21474 value = "$lost_item_returned"
21476 variable = "MarkLostItemsAsReturned"
21479 NewVersion( $DBversion, 24474, "Add `onpayment` option to MarkLostItemsAsReturned");
21482 $DBversion = '19.12.00.062';
21483 if( CheckVersion( $DBversion ) ) {
21484 $dbh->do( "UPDATE account_debit_types SET description = REPLACE(description,'Rewewal','Renewal') WHERE description like '%Rewewal%'" );
21486 NewVersion( $DBversion, 25010, "Fix typo in account_debit_type description");
21489 $DBversion = '19.12.00.063';
21490 if( CheckVersion( $DBversion ) ) {
21491 $dbh->do(q{INSERT IGNORE INTO systempreferences (variable, value, options, explanation, type) VALUES ('PrefillGuaranteeField', 'phone,email,streetnumber,address,city,state,zipcode,country', NULL, 'Prefill these fields in guarantee member entry form from guarantor patron record', 'Multiple') });
21493 NewVersion( $DBversion, 22534, "Add PreFillGuaranteeField syspref");
21496 $DBversion = '19.12.00.064';
21497 if( CheckVersion( $DBversion ) ) {
21500 INSERT IGNORE INTO systempreferences ( `variable`, `value`, `options`, `explanation`, `type` )
21501 SELECT 'OpacNoItemTypeImages', value, NULL, 'If ON, disables itemtype images in the OPAC','YesNo'
21502 FROM (SELECT value FROM systempreferences WHERE variable="NoItemTypeImages") tmp
21504 $dbh->do( "UPDATE systempreferences SET explanation = 'If ON, disables itemtype images in the staff interface'
21505 WHERE variable = 'noItemTypeImages' ");
21507 NewVersion( $DBversion, 4944, "Add new system preference OpacNoItemTypeImages");
21510 $DBversion = '19.12.00.065';
21511 if( CheckVersion( $DBversion ) ) {
21514 INSERT IGNORE INTO systempreferences (variable, value, explanation, options, type)
21515 VALUES ('ILLCheckAvailability', '0', 'If enabled, during the ILL request process third party sources will be checked for current availability', '', 'YesNo')
21518 NewVersion( $DBversion, 23173, "Add ILLCheckAvailability syspref");
21521 $DBversion = '19.12.00.066';
21522 if ( CheckVersion($DBversion) ) {
21524 q{INSERT IGNORE INTO systempreferences (variable,value,options,explanation,type) VALUES ('OPACReportProblem', 0, NULL, 'Allow patrons to submit problem reports for OPAC pages to the library or Koha Administrator', 'YesNo') }
21527 q{INSERT IGNORE INTO letter (module, code, name, title, content, message_transport_type) VALUES ('members', 'PROBLEM_REPORT','OPAC Problem Report','OPAC Problem Report','Username: <<problem_reports.username>>\n\nProblem page: <<problem_reports.problempage>>\n\nTitle: <<problem_reports.title>>\n\nMessage: <<problem_reports.content>>','email') }
21529 if ( !TableExists('problem_reports') ) {
21531 q{ CREATE TABLE problem_reports (
21532 reportid int(11) NOT NULL auto_increment, -- unique identifier assigned by Koha
21533 title varchar(40) NOT NULL default '', -- report subject line
21534 content varchar(255) NOT NULL default '', -- report message content
21535 borrowernumber int(11) NOT NULL default 0, -- the user who created the problem report
21536 branchcode varchar(10) NOT NULL default '', -- borrower's branch
21537 username varchar(75) default NULL, -- OPAC username
21538 problempage TEXT default NULL, -- page the user triggered the problem report form from
21539 recipient enum('admin','library') NOT NULL default 'library', -- the 'to-address' of the problem report
21540 created_on timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, -- timestamp of report submission
21541 status varchar(6) NOT NULL default 'New', -- status of the report. New, Viewed, Closed
21542 PRIMARY KEY (reportid),
21543 CONSTRAINT problem_reports_ibfk1 FOREIGN KEY (borrowernumber) REFERENCES borrowers (borrowernumber) ON DELETE CASCADE ON UPDATE CASCADE,
21544 CONSTRAINT problem_reports_ibfk2 FOREIGN KEY (branchcode) REFERENCES branches (branchcode) ON DELETE CASCADE ON UPDATE CASCADE
21545 ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci }
21549 q{INSERT IGNORE INTO userflags (bit, flag, flagdesc, defaulton) VALUES (26, 'problem_reports', 'Manage problem reports', 0) }
21552 q{INSERT IGNORE INTO permissions (module_bit, code, description) VALUES (26, 'manage_problem_reports', 'Manage OPAC problem reports') }
21559 "Add OPACReportProblem system preference",
21560 "Adding PROBLEM_REPORT notice",
21561 "Add problem reports table",
21562 "Add user permissions for managing OPAC problem reports"
21567 $DBversion = '19.12.00.067';
21568 if( CheckVersion( $DBversion ) ) {
21569 # From: https://stackoverflow.com/questions/3311903/remove-duplicate-rows-in-mysql
21572 FROM virtualshelfshares as a, virtualshelfshares as b
21576 a.borrowernumber IS NOT NULL
21578 a.borrowernumber=b.borrowernumber
21580 a.shelfnumber=b.shelfnumber
21583 NewVersion( $DBversion, 20754, "Remove double accepted list shares" );
21586 $DBversion = '19.12.00.068';
21587 if( CheckVersion( $DBversion ) ) {
21589 INSERT IGNORE INTO systempreferences
21590 (variable,value,explanation,options,type)
21592 ('AuthFailureLog','','If enabled, log authentication failures',NULL,'YesNo'),
21593 ('AuthSuccessLog','','If enabled, log successful authentications',NULL,'YesNo')
21596 NewVersion( $DBversion, 21190, "Add prefs AuthFailureLog and AuthSuccessLog");
21599 $DBversion = '19.12.00.069';
21600 if( CheckVersion( $DBversion ) ) {
21601 if( !column_exists( 'suggestions', 'archived' ) ) {
21603 ALTER TABLE suggestions ADD COLUMN archived TINYINT(1) NOT NULL DEFAULT 0 AFTER `STATUS`;
21607 NewVersion( $DBversion, 22784, "Add a new suggestions.archived column");
21610 $DBversion = '19.12.00.070';
21611 if( CheckVersion( $DBversion ) ) {
21614 INSERT IGNORE INTO systempreferences (variable,value,explanation,type) VALUES
21615 ('MaxTotalSuggestions','','Number of total suggestions used for time limit with NumberOfSuggestionDays','Free'),
21616 ('NumberOfSuggestionDays','','Number of days that will be used to determine the MaxTotalSuggestions limit','Free')
21619 NewVersion( $DBversion, 22774, "Limit purchase suggestion in a specified time period");
21622 $DBversion = '19.12.00.071';
21623 if( CheckVersion( $DBversion ) ) {
21624 my @description = ("Add unique constraint to authorised_values");
21625 unless ( index_exists('authorised_values', 'av_uniq') ) {
21627 DELETE FROM authorised_values
21628 WHERE category="COUNTRY" AND authorised_value="CC" AND lib="Keeling"
21630 my $duplicates = $dbh->selectall_arrayref(q|
21631 SELECT category, authorised_value, COUNT(concat(category, ':', authorised_value)) AS c
21632 FROM authorised_values
21633 GROUP BY category, authorised_value
21634 HAVING COUNT(concat(category, ':', authorised_value)) > 1
21635 |, { Slice => {} });
21636 if ( @$duplicates ) {
21637 push @description, "WARNING - Cannot create unique constraint on authorised_value(category, authorised_value)";
21638 push @description, "The following entries are duplicated: " . join(
21641 sprintf "%s:%s (%s)", $_->{category},
21642 $_->{authorised_value}, $_->{c}
21645 for my $warning (@description) {
21649 $dbh->do( q{ALTER TABLE `authorised_values` ADD CONSTRAINT `av_uniq` UNIQUE (category, authorised_value)} );
21653 NewVersion( $DBversion, 22887, \@description );
21656 $DBversion = '19.12.00.072';
21657 if( CheckVersion( $DBversion ) ) {
21659 INSERT IGNORE INTO systempreferences ( `variable`, `value`, `options`, `explanation`, `type` )
21660 SELECT 'CalculateFinesOnBackdate',value,'','Switch to control if overdue fines are calculated on return when backdating','YesNo'
21661 FROM ( SELECT value FROM systempreferences WHERE variable = 'CalculateFinesOnReturn' ) tmp
21664 NewVersion( $DBversion, 24380, "Add syspref CalculateFinesOnBackdate");
21667 $DBversion = '19.12.00.073';
21668 if( CheckVersion( $DBversion ) ) {
21669 $dbh->do( "ALTER TABLE subscription MODIFY COLUMN closed tinyint(1) not null default 0" );
21671 NewVersion( $DBversion, 25152, "Update subscription.closed to tinyint(1) as per guidelines");
21674 $DBversion = '19.12.00.074';
21675 if( CheckVersion( $DBversion ) ) {
21676 $dbh->do( "UPDATE systempreferences SET variable = 'SCOAllowCheckin' WHERE variable = 'AllowSelfCheckReturns'" );
21678 # Always end with this (adjust the bug info)
21679 NewVersion( $DBversion, 25147, "Rename AllowSelfCheckReturns to SCOAllowCheckin for consistency");
21682 $DBversion = '19.12.00.075';
21683 if( CheckVersion( $DBversion ) ) {
21685 $dbh->do( "ALTER TABLE borrower_modifications MODIFY changed_fields MEDIUMTEXT DEFAULT NULL" );
21687 NewVersion( $DBversion, 25086, "Set changed_fields column of borrower_modifications as nullable");
21690 $DBversion = '19.12.00.076';
21691 if( CheckVersion( $DBversion ) ) {
21694 sanitize_zero_date('serial', 'planneddate');
21695 sanitize_zero_date('serial', 'publisheddate');
21696 sanitize_zero_date('serial', 'claimdate');
21700 MODIFY COLUMN biblionumber INT(11) NOT NULL
21703 unless ( foreign_key_exists( 'serial', 'serial_ibfk_1' ) ) {
21704 my $serials = $dbh->selectall_arrayref(q|
21705 SELECT serialid FROM serial JOIN subscription USING (subscriptionid) WHERE serial.biblionumber != subscription.biblionumber
21706 |, { Slice => {} });
21708 push @warnings, q|WARNING - The following serials will be updated, they were attached to a different biblionumber than their related subscription: | . join ", ", map { $_->{serialid} } @$serials;
21710 UPDATE serial JOIN subscription USING (subscriptionid) SET serial.biblionumber = subscription.biblionumber WHERE serial.biblionumber != subscription.biblionumber
21713 $serials = $dbh->selectall_arrayref(q|
21714 SELECT serialid FROM serial WHERE biblionumber NOT IN (SELECT biblionumber FROM biblio)
21715 |, { Slice => {} });
21717 push @warnings, q|WARNING - The following serials are deleted, they were not attached to an existing bibliographic record (serialid): | . join ", ", map { $_->{serialid} } @$serials;
21719 DELETE FROM serial WHERE biblionumber NOT IN (SELECT biblionumber FROM biblio)
21724 ADD CONSTRAINT serial_ibfk_1 FOREIGN KEY (biblionumber) REFERENCES biblio (biblionumber) ON DELETE CASCADE ON UPDATE CASCADE
21730 MODIFY COLUMN subscriptionid INT(11) NOT NULL
21733 unless ( foreign_key_exists( 'serial', 'serial_ibfk_2' ) ) {
21734 my $serials = $dbh->selectall_arrayref(q|
21735 SELECT serialid FROM serial WHERE subscriptionid NOT IN (SELECT subscriptionid FROM subscription)
21736 |, { Slice => {} });
21738 push @warnings, q|WARNING - The following serials are deleted, they were not attached to an existing subscription (serialid): | . join ", ", map { $_->{serialid} } @$serials;
21740 DELETE FROM serial WHERE subscriptionid NOT IN (SELECT subscriptionid FROM subscription)
21745 ADD CONSTRAINT serial_ibfk_2 FOREIGN KEY (subscriptionid) REFERENCES subscription (subscriptionid) ON DELETE CASCADE ON UPDATE CASCADE
21750 ALTER TABLE subscriptionhistory
21751 MODIFY COLUMN biblionumber int(11) NOT NULL,
21752 MODIFY COLUMN subscriptionid int(11) NOT NULL
21755 unless ( foreign_key_exists( 'subscriptionhistory', 'subscription_history_ibfk_1' ) ) {
21757 UPDATE subscriptionhistory JOIN subscription USING (subscriptionid) SET subscriptionhistory.biblionumber = subscription.biblionumber WHERE subscriptionhistory.biblionumber != subscription.biblionumber
21760 DELETE FROM subscriptionhistory WHERE biblionumber NOT IN (SELECT biblionumber FROM biblio)
21763 ALTER TABLE subscriptionhistory
21764 ADD CONSTRAINT subscription_history_ibfk_1 FOREIGN KEY (biblionumber) REFERENCES biblio (biblionumber) ON DELETE CASCADE ON UPDATE CASCADE
21768 unless ( foreign_key_exists( 'subscriptionhistory', 'subscription_history_ibfk_2' ) ) {
21770 DELETE FROM subscriptionhistory WHERE subscriptionid NOT IN (SELECT subscriptionid FROM subscription)
21773 ALTER TABLE subscriptionhistory
21774 ADD CONSTRAINT subscription_history_ibfk_2 FOREIGN KEY (subscriptionid) REFERENCES subscription (subscriptionid) ON DELETE CASCADE ON UPDATE CASCADE
21779 ALTER TABLE subscription
21780 MODIFY COLUMN biblionumber int(11) NOT NULL
21783 unless ( foreign_key_exists( 'subscription', 'subscription_ibfk_3' ) ) {
21784 my $subscriptions = $dbh->selectall_arrayref(q|
21785 SELECT subscriptionid FROM subscription WHERE biblionumber NOT IN (SELECT biblionumber FROM biblio)
21786 |, { Slice => {} });
21787 if ( @$subscriptions ) {
21788 push @warnings, q|WARNING - The following subscriptions are deleted, they were not attached to an existing bibliographic record (subscriptionid): | . join ", ", map { $_->{subscriptionid} } @$subscriptions;
21791 DELETE FROM subscription WHERE biblionumber NOT IN (SELECT biblionumber FROM biblio)
21795 ALTER TABLE subscription
21796 ADD CONSTRAINT subscription_ibfk_3 FOREIGN KEY (biblionumber) REFERENCES biblio (biblionumber) ON DELETE CASCADE ON UPDATE CASCADE
21800 for my $warning (@warnings) {
21804 my $description = [ "Add foreign key constraints on serial", @warnings ];
21805 NewVersion( $DBversion, 21901, $description);
21808 $DBversion = '19.12.00.077';
21809 if( CheckVersion( $DBversion ) ) {
21810 if ( !column_exists( 'course_items', 'itype_enabled' ) ) {
21812 ALTER TABLE course_items
21813 ADD COLUMN itype_enabled tinyint(1) NOT NULL DEFAULT 0 AFTER itype,
21814 ADD COLUMN ccode_enabled tinyint(1) NOT NULL DEFAULT 0 AFTER ccode,
21815 ADD COLUMN holdingbranch_enabled tinyint(1) NOT NULL DEFAULT 0 AFTER holdingbranch,
21816 ADD COLUMN location_enabled tinyint(1) NOT NULL DEFAULT 0 AFTER location,
21817 ADD COLUMN itype_storage varchar(10) DEFAULT NULL AFTER itype_enabled,
21818 ADD COLUMN ccode_storage varchar(80) DEFAULT NULL AFTER ccode_enabled,
21819 ADD COLUMN holdingbranch_storage varchar(10) DEFAULT NULL AFTER ccode_enabled,
21820 ADD COLUMN location_storage varchar(80) DEFAULT NULL AFTER location_enabled
21823 my $item_level_items = C4::Context->preference('item-level_itypes');
21824 my $itype_field = $item_level_items ? 'i.itype' : 'bi.itemtype';
21826 UPDATE course_items ci
21827 LEFT JOIN items i USING ( itemnumber )
21828 LEFT JOIN biblioitems bi USING ( biblioitemnumber )
21831 -- Assume the column is enabled if the course item is active and i.itype/bi.itemtype is set,
21832 -- or if the course item is not enabled and ci.itype is set
21833 ci.itype_enabled = IF( ci.enabled = 'yes', IF( $itype_field IS NULL, 0, 1 ), IF( ci.itype IS NULL, 0, 1 ) ),
21834 ci.ccode_enabled = IF( ci.enabled = 'yes', IF( i.ccode IS NULL, 0, 1 ), IF( ci.ccode IS NULL, 0, 1 ) ),
21835 ci.holdingbranch_enabled = IF( ci.enabled = 'yes', IF( i.holdingbranch IS NULL, 0, 1 ), IF( ci.holdingbranch IS NULL, 0, 1 ) ),
21836 ci.location_enabled = IF( ci.enabled = 'yes', IF( i.location IS NULL, 0, 1 ), IF( ci.location IS NULL, 0, 1 ) ),
21838 -- If the course item is enabled, copy the value from the item.
21839 -- If the course item is not enabled, keep the existing value
21840 ci.itype = IF( ci.enabled = 'yes', $itype_field, ci.itype ),
21841 ci.ccode = IF( ci.enabled = 'yes', i.ccode, ci.ccode ),
21842 ci.holdingbranch = IF( ci.enabled = 'yes', i.holdingbranch, ci.holdingbranch ),
21843 ci.location = IF( ci.enabled = 'yes', i.location, ci.location ),
21845 -- If the course is enabled, copy the value from the item to storage.
21846 -- If it is not enabled, copy the value from the course item to storage
21847 ci.itype_storage = IF( ci.enabled = 'no', $itype_field, ci.itype ),
21848 ci.ccode_storage = IF( ci.enabled = 'no', i.ccode, ci.ccode ),
21849 ci.holdingbranch_storage = IF( ci.enabled = 'no', i.holdingbranch, ci.holdingbranch ),
21850 ci.location_storage = IF( ci.enabled = 'no', i.location, ci.location );
21853 # Clean up the storage columns
21855 UPDATE course_items SET
21856 itype_storage = NULL,
21857 ccode_storage = NULL,
21858 holdingbranch_storage = NULL,
21859 location_storage = NULL
21860 WHERE enabled = 'no';
21863 # Clean up the course enabled value columns
21865 UPDATE course_items SET
21866 itype = IF( itype_enabled = 'no', NULL, itype ),
21867 ccode = IF( ccode_enabled = 'no', NULL, ccode ),
21868 holdingbranch = IF( holdingbranch_enabled = 'no', NULL, holdingbranch ),
21869 location = IF( location_enabled = 'no', NULL, location )
21870 WHERE enabled = 'no';
21874 NewVersion( $DBversion, 23727, "Editing course reserve items is broken");
21877 $DBversion = '19.12.00.078';
21878 if( CheckVersion( $DBversion ) ) {
21879 $dbh->do(q{INSERT IGNORE INTO systempreferences (variable,value,options,explanation,type) VALUES ('PatronSelfRegistrationConfirmEmail', '0', NULL, 'Require users to confirm their email address by entering it twice.', 'YesNo') });
21881 NewVersion( $DBversion, 24913, "Add PatronSelfRegistrationConfirmEmail syspref");
21884 $DBversion = '19.12.00.079';
21885 if( CheckVersion( $DBversion ) ) {
21887 # Default to the homologous OpacPublic syspref
21888 my $opac_public = C4::Context->preference('OpacPublic') ? 1 : 0;
21891 INSERT IGNORE INTO `systempreferences`
21892 (`variable`,`value`,`explanation`,`options`,`type`)
21894 ('RESTPublicAnonymousRequests', $opac_public, NULL,'If enabled, the API will allow anonymous access to public routes that do not require authenticated access.','YesNo');
21897 NewVersion( $DBversion, 25045, "Add a way to restrict anonymous access to public routes (OpacPublic behaviour)");
21900 $DBversion = '19.12.00.080';
21901 if( CheckVersion( $DBversion ) ) {
21902 $dbh->do( "UPDATE items set issues=0 where issues is null" );
21903 $dbh->do( "UPDATE deleteditems set issues=0 where issues is null" );
21904 $dbh->do( "ALTER TABLE items ALTER issues set default 0" );
21905 $dbh->do( "ALTER TABLE deleteditems ALTER issues set default 0" );
21907 NewVersion( $DBversion, 23081, "Set default to 0 for items.issues");
21910 $DBversion = '19.12.00.081';
21911 if (CheckVersion($DBversion)) {
21912 if (!column_exists('course_items', 'homebranch')) {
21914 ALTER TABLE course_items
21915 ADD COLUMN homebranch VARCHAR(10) NULL DEFAULT NULL AFTER ccode_storage
21919 if (!foreign_key_exists('course_items', 'fk_course_items_homebranch')) {
21921 ALTER TABLE course_items
21922 ADD CONSTRAINT fk_course_items_homebranch
21923 FOREIGN KEY (homebranch) REFERENCES branches (branchcode)
21924 ON DELETE CASCADE ON UPDATE CASCADE
21928 if (!column_exists('course_items', 'homebranch_enabled')) {
21930 ALTER TABLE course_items
21931 ADD COLUMN homebranch_enabled tinyint(1) NOT NULL DEFAULT 0 AFTER homebranch
21935 if (!column_exists('course_items', 'homebranch_storage')) {
21937 ALTER TABLE course_items
21938 ADD COLUMN homebranch_storage VARCHAR(10) NULL DEFAULT NULL AFTER homebranch_enabled
21942 if (!foreign_key_exists('course_items', 'fk_course_items_homebranch_storage')) {
21944 ALTER TABLE course_items
21945 ADD CONSTRAINT fk_course_items_homebranch_storage
21946 FOREIGN KEY (homebranch_storage) REFERENCES branches (branchcode)
21947 ON DELETE CASCADE ON UPDATE CASCADE
21951 NewVersion( $DBversion, 22630, "Add course_items.homebranch");
21954 $DBversion = '19.12.00.082';
21955 if( CheckVersion( $DBversion ) ) {
21957 # get list of installed translations
21958 require C4::Languages;
21960 my $tlangs = C4::Languages::getTranslatedLanguages('opac','bootstrap');
21962 foreach my $language ( @$tlangs ) {
21963 foreach my $sublanguage ( @{$language->{'sublanguages_loop'}} ) {
21964 push @langs, $sublanguage->{'rfc4646_subtag'};
21968 # Get any existing value from the OpacMainUserBlock system preference
21969 my ($opacmainuserblock) = $dbh->selectrow_array( q|
21970 SELECT value FROM systempreferences WHERE variable='OpacMainUserBlock';
21974 if( $opacmainuserblock ){
21975 foreach my $lang ( @langs ) {
21976 # If there is a value in the OpacMainUserBlock preference, insert it into opac_news
21977 $dbh->do("INSERT INTO opac_news (branchcode, lang, title, content ) VALUES (NULL, ?, '', ?)", undef, "OpacMainUserBlock_$lang", $opacmainuserblock);
21978 push @detail, "Inserting OpacMainUserBlock contents into $lang news item...";
21981 # Remove the OpacMainUserBlock system preference
21982 $dbh->do("DELETE FROM systempreferences WHERE variable='OpacMainUserBlock'");
21984 unshift @detail, "Move contents of OpacMainUserBlock preference to Koha news system";
21985 NewVersion( $DBversion, 23794, \@detail);
21988 $DBversion = '19.12.00.083';
21989 if( CheckVersion( $DBversion ) ) {
21991 unless ( column_exists( 'authorised_value_categories', 'is_system' ) ) {
21993 ALTER TABLE authorised_value_categories
21994 ADD COLUMN is_system TINYINT(1) DEFAULT 0 AFTER category_name
21999 UPDATE authorised_value_categories
22001 WHERE category_name IN ('LOC', 'LOST', 'WITHDRAWN', 'Bsort1', 'Bsort2', 'Asort1', 'Asort2', 'SUGGEST', 'DAMAGED', 'LOST', 'BOR_NOTES', 'CCODE', 'NOT_LOAN')
22005 UPDATE authorised_value_categories
22007 WHERE category_name IN ('branches', 'itemtypes', 'cn_source')
22010 NewVersion( $DBversion, 17355, "Add is_system to authorised_value_categories table");
22013 $DBversion = '19.12.00.084';
22014 if( CheckVersion( $DBversion ) ) {
22015 unless ( TableExists('advanced_editor_macros') ) {
22017 CREATE TABLE advanced_editor_macros (
22018 id INT(11) NOT NULL AUTO_INCREMENT,
22019 name varchar(80) NOT NULL,
22020 macro longtext NULL,
22021 borrowernumber INT(11) default NULL,
22022 shared TINYINT(1) default 0,
22024 CONSTRAINT borrower_macro_fk FOREIGN KEY ( borrowernumber ) REFERENCES borrowers ( borrowernumber ) ON UPDATE CASCADE ON DELETE CASCADE
22025 ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;|
22029 INSERT IGNORE INTO permissions (module_bit, code, description)
22030 VALUES (9, 'create_shared_macros', 'Create public macros')
22033 INSERT IGNORE INTO permissions (module_bit, code, description)
22034 VALUES (9, 'delete_shared_macros', 'Delete public macros')
22037 NewVersion( $DBversion, 17682, "Add macros db table and permissions");
22040 $DBversion = '19.12.00.085';
22041 if( CheckVersion( $DBversion ) ) {
22042 unless ( TableExists( 'aqorders_claims' ) ) {
22044 CREATE TABLE aqorders_claims (
22045 id int(11) AUTO_INCREMENT,
22046 ordernumber INT(11) NOT NULL,
22047 claimed_on TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
22049 CONSTRAINT aqorders_claims_ibfk_1 FOREIGN KEY (ordernumber) REFERENCES aqorders (ordernumber) ON DELETE CASCADE ON UPDATE CASCADE
22050 ) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_unicode_ci
22053 my $orders = $dbh->selectall_arrayref(q|
22054 SELECT ordernumber, claims_count, claimed_date
22056 WHERE claims_count > 0
22057 |, { Slice => {} });
22058 my $insert_claim_sth = $dbh->prepare(q|
22059 INSERT INTO aqorders_claims (ordernumber, claimed_on)
22063 for my $order ( @$orders ) {
22064 for my $claim (1..$order->{claims_count}) {
22065 $insert_claim_sth->execute($order->{ordernumber}, $order->{claimed_on});
22069 $dbh->do(q|ALTER TABLE aqorders DROP COLUMN claims_count, DROP COLUMN claimed_date|);
22072 NewVersion( $DBversion, 24161, "Add new join table aqorders_claims to keep track of claims");
22075 $DBversion = '19.12.00.086';
22076 if( CheckVersion( $DBversion ) ) {
22078 INSERT IGNORE INTO export_format( profile, description, content, csv_separator, type, used_for ) VALUES
22079 ("Late orders (CSV profile)", "Default CSV export for late orders", 'Title[% separator %]Author[% separator %]Publication year[% separator %]ISBN[% separator %]Quantity[% separator %]Number of claims
22080 [% FOR order IN orders ~%]
22081 [%~ SET biblio = order.biblio ~%]
22082 "[% biblio.title %]"[% separator ~%]
22083 "[% biblio.author %]"[% separator ~%]
22084 "[% bibio.biblioitem.publicationyear %]"[% separator ~%]
22085 "[% biblio.biblioitem.isbn %]"[% separator ~%]
22086 "[% order.quantity%]"[% separator ~%]
22087 "[% order.claims.count%][% IF order.claims.count %]([% FOR c IN order.claims %][% c.claimed_on | $KohaDates %][% UNLESS loop.last %], [% END %][% END %])[% END %]"
22088 [% END %]', ",", "sql", "late_orders")
22091 NewVersion( $DBversion, 24163, "Define a default CSV profile for late orders");
22094 $DBversion = '19.12.00.087';
22095 if( CheckVersion( $DBversion ) ) {
22097 INSERT IGNORE INTO systempreferences ( `variable`, `value`, `options`, `explanation`, `type` ) VALUES
22098 ('TrapHoldsOnOrder','1',NULL,'If enabled, Koha will trap holds for on order items ( notforloan < 0 )','YesNo')
22101 NewVersion( $DBversion, 25184, "Items with a negative notforloan status should not be captured for holds");
22104 $DBversion = '19.12.00.088';
22105 if( CheckVersion( $DBversion ) ) {
22109 name = REPLACE(name, "notification on auto renewing", "Notification of automatic renewal"),
22110 title = REPLACE(title, "Auto renewals", "Automatic renewal notice"),
22111 content = REPLACE(content, "You have reach the maximum of checkouts possible.", "You have reached the maximum number of renewals possible.")
22112 WHERE code = 'AUTO_RENEWALS';
22116 content = REPLACE(content, "You have overdues.", "You have overdue items.")
22117 WHERE code = 'AUTO_RENEWALS';
22121 content = REPLACE(content, "It's too late to renew this checkout.", "It's too late to renew this item.")
22122 WHERE code = 'AUTO_RENEWALS';
22126 content = REPLACE(content, "You have too much unpaid fines.", "Your total unpaid fines are too high.")
22127 WHERE code = 'AUTO_RENEWALS';
22131 content = REPLACE(content, "The following item [% biblio.title %] has correctly been renewed and is now due [% checkout.date_due %]", "The following item, [% biblio.title %], has correctly been renewed and is now due on [% checkout.date_due | $KohaDates as_due_date => 1 %]
22133 WHERE code = 'AUTO_RENEWALS';
22136 NewVersion( $DBversion, 24378, "Fix some grammatical errors in default auto renewal notice");
22139 $DBversion = '19.12.00.089';
22140 if( CheckVersion( $DBversion ) ) {
22142 # Migrate LOST_RETURNED to LOST_FOUND
22147 credit_type_code = 'LOST_FOUND'
22149 credit_type_code = 'LOST_RETURNED'
22152 # Drop LOST_RETURNED credit type
22154 DELETE FROM account_credit_types WHERE code = 'LOST_RETURNED'
22157 NewVersion( $DBversion, 25389, "Catch errant cases of LOST_RETURNED");
22160 $DBversion = '19.12.00.090';
22161 if ( CheckVersion($DBversion) ) {
22165 INSERT IGNORE INTO systempreferences (variable,value,options,explanation,type) VALUES
22166 ('UseIssueDesks','0','','Use issue desks with circulation.','YesNo')
22170 NewVersion( $DBversion, 13881, "Add issue desks system preference");
22173 $DBversion = '19.12.00.091';
22174 if ( CheckVersion($DBversion) ) {
22177 UPDATE systempreferences SET variable = 'UseCirculationDesks' WHERE variable = 'UseIssueDesks'
22180 NewVersion( $DBversion, 13881, "Correction to preference terminology");
22183 $DBversion = '20.05.00.000';
22184 if( CheckVersion( $DBversion ) ) {
22185 NewVersion( $DBversion, undef, '20.05.00 alpha release' );
22188 $DBversion = '20.06.00.000';
22189 if( CheckVersion( $DBversion ) ) {
22190 NewVersion( $DBversion, undef, 'All our codebase are belong to everybody' );
22193 $DBversion = '20.06.00.001';
22194 if( CheckVersion( $DBversion ) ) {
22195 for my $f (qw( streetnumber streettype zipcode mobile B_streetnumber B_streettype B_zipcode ) ) {
22197 ALTER TABLE borrowers MODIFY $f TINYTEXT DEFAULT NULL
22200 ALTER TABLE deletedborrowers MODIFY $f TINYTEXT DEFAULT NULL
22203 for my $f ( qw( B_address altcontactfirstname altcontactsurname altcontactaddress1 altcontactaddress2 altcontactaddress3 altcontactzipcode altcontactphone ) ) {
22205 ALTER TABLE borrowers MODIFY $f MEDIUMTEXT DEFAULT NULL
22208 ALTER TABLE deletedborrowers MODIFY $f MEDIUMTEXT DEFAULT NULL
22212 NewVersion( $DBversion, 24986, "Switch borrowers address related fields to TINYTEXT or MEDIUMTEXT");
22215 $DBversion = '20.06.00.002';
22216 if( CheckVersion( $DBversion ) ) {
22218 INSERT IGNORE INTO systempreferences ( `variable`, `value`, `options`, `explanation`, `type` ) VALUES
22219 ('SkipHoldTrapOnNotForLoanValue','',NULL,'If set, Koha will never trap items for hold with this notforloan value','Integer')
22222 NewVersion( $DBversion, 25184, "Items with a negative notforloan status should not be captured for holds");
22225 $DBversion = '20.06.00.003';
22226 if( CheckVersion( $DBversion ) ) {
22227 unless ( TableExists( 'tables_settings' ) ) {
22229 CREATE TABLE tables_settings (
22230 module varchar(255) NOT NULL,
22231 page varchar(255) NOT NULL,
22232 tablename varchar(255) NOT NULL,
22233 default_display_length smallint(6) NOT NULL DEFAULT 20,
22234 default_sort_order varchar(255),
22235 PRIMARY KEY(module (191), page (191), tablename (191) )
22236 ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
22240 NewVersion( $DBversion, 24156, "Add new table tables_settings" );
22243 $DBversion = '20.06.00.004';
22244 if( CheckVersion( $DBversion ) ) {
22246 DELETE FROM circulation_rules WHERE rule_name='holdallowed' AND rule_value='';
22248 NewVersion( $DBversion, 25851, "Remove holdallowed rule if value is an empty string");
22251 $DBversion = '20.06.00.005';
22252 if( CheckVersion( $DBversion ) ) {
22253 $dbh->do( "UPDATE borrowers SET login_attempts=0 WHERE login_attempts IS NULL" );
22254 $dbh->do( "ALTER TABLE borrowers MODIFY COLUMN login_attempts int(4) NOT NULL DEFAULT 0" );
22255 $dbh->do( "UPDATE deletedborrowers SET login_attempts=0 WHERE login_attempts IS NULL" );
22256 $dbh->do( "ALTER TABLE deletedborrowers MODIFY COLUMN login_attempts int(4) NOT NULL DEFAULT 0" );
22257 NewVersion( $DBversion, 24379, "Set login_attempts NOT NULL" );
22260 $DBversion = '20.06.00.006';
22261 if( CheckVersion( $DBversion ) ) {
22262 unless( TableExists( 'pseudonymized_transactions' ) ) {
22264 CREATE TABLE `pseudonymized_transactions` (
22265 `id` INT(11) NOT NULL AUTO_INCREMENT,
22266 `hashed_borrowernumber` VARCHAR(60) NOT NULL,
22267 `has_cardnumber` TINYINT(1) NOT NULL DEFAULT 0,
22270 `state` MEDIUMTEXT default NULL,
22271 `zipcode` varchar(25) default NULL,
22272 `country` MEDIUMTEXT,
22273 `branchcode` varchar(10) NOT NULL default '',
22274 `categorycode` varchar(10) NOT NULL default '',
22275 `dateenrolled` date default NULL,
22276 `sex` varchar(1) default NULL,
22277 `sort1` varchar(80) default NULL,
22278 `sort2` varchar(80) default NULL,
22279 `datetime` datetime default NULL,
22280 `transaction_branchcode` varchar(10) default NULL,
22281 `transaction_type` varchar(16) default NULL,
22282 `itemnumber` int(11) default NULL,
22283 `itemtype` varchar(10) default NULL,
22284 `holdingbranch` varchar(10) default null,
22285 `homebranch` varchar(10) default null,
22286 `location` varchar(80) default NULL,
22287 `itemcallnumber` varchar(255) default NULL,
22288 `ccode` varchar(80) default NULL,
22289 PRIMARY KEY (`id`),
22290 CONSTRAINT `pseudonymized_transactions_ibfk_1` FOREIGN KEY (`categorycode`) REFERENCES `categories` (`categorycode`),
22291 CONSTRAINT `pseudonymized_transactions_borrowers_ibfk_2` FOREIGN KEY (`branchcode`) REFERENCES `branches` (`branchcode`),
22292 CONSTRAINT `pseudonymized_transactions_borrowers_ibfk_3` FOREIGN KEY (`transaction_branchcode`) REFERENCES `branches` (`branchcode`)
22293 ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
22298 INSERT IGNORE INTO systempreferences (variable,value,options,explanation,type)
22299 VALUES ('Pseudonymization','0',NULL,'If enabled patrons and transactions will be copied in a separate table for statistics purpose','YesNo')
22302 INSERT IGNORE INTO systempreferences (variable,value,options,explanation,type)
22303 VALUES ('PseudonymizationPatronFields','','title,city,state,zipcode,country,branchcode,categorycode,dateenrolled,sex,sort1,sort2','Patron fields to copy to the pseudonymized_transactions table','multiple')
22306 INSERT IGNORE INTO systempreferences (variable,value,options,explanation,type)
22307 VALUES ('PseudonymizationTransactionFields','','datetime,transaction_branchcode,transaction_type,itemnumber,itemtype,holdingbranch,homebranch,location,itemcallnumber,ccode','Transaction fields to copy to the pseudonymized_transactions table','multiple')
22310 unless( TableExists( 'pseudonymized_borrower_attributes' ) ) {
22312 CREATE TABLE pseudonymized_borrower_attributes (
22313 `id` int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY, -- Row id field
22314 `transaction_id` int(11) NOT NULL,
22315 `code` varchar(10) NOT NULL,
22316 `attribute` varchar(255) default NULL,
22317 CONSTRAINT `pseudonymized_borrower_attributes_ibfk_1` FOREIGN KEY (`transaction_id`) REFERENCES `pseudonymized_transactions` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
22318 CONSTRAINT `anonymized_borrower_attributes_ibfk_2` FOREIGN KEY (`code`) REFERENCES `borrower_attribute_types` (`code`) ON DELETE CASCADE ON UPDATE CASCADE
22319 ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
22323 unless( column_exists('borrower_attribute_types', 'keep_for_pseudonymization') ) {
22325 ALTER TABLE borrower_attribute_types ADD COLUMN `keep_for_pseudonymization` TINYINT(1) NOT NULL DEFAULT 0 AFTER `class`
22329 NewVersion( $DBversion, 24151, "Add pseudonymized_transactions tables and sysprefs for Pseudonymization" );
22332 $DBversion = '20.06.00.007';
22333 if( CheckVersion( $DBversion ) ) {
22334 if( !column_exists( 'borrower_attribute_types', 'mandatory' ) ) {
22336 ALTER TABLE borrower_attribute_types
22337 ADD COLUMN mandatory TINYINT(1) NOT NULL DEFAULT 0
22338 AFTER keep_for_pseudonymization
22342 NewVersion( $DBversion, 22844, "Add borrower_attribute_types.mandatory" );
22345 $DBversion = '20.06.00.008';
22346 if( CheckVersion( $DBversion ) ) {
22347 $dbh->do( "UPDATE itemtypes SET imageurl = REPLACE (imageurl, '.gif', '.png') WHERE imageurl LIKE 'bridge/%'" );
22349 NewVersion( $DBversion, 23148, "Replace Bridge icons with transparent PNG files" );
22352 $DBversion = '20.06.00.009';
22353 if( CheckVersion( $DBversion ) ) {
22355 INSERT IGNORE INTO systempreferences (variable,value,options,explanation,type)
22356 VALUES ('ILLHiddenRequestStatuses',NULL,NULL,'ILL statuses that are considered finished and should not be displayed in the ILL module','multiple')
22359 NewVersion( $DBversion, 23391, "Hide finished ILL requests" );
22362 $DBversion = '20.06.00.010';
22363 if( CheckVersion( $DBversion ) ) {
22365 INSERT IGNORE INTO systempreferences ( `variable`, `value`, `options`, `explanation`, `type` ) VALUES
22366 ('NoRefundOnLostReturnedItemsAge','','','Do not refund lost item fees if item is lost for more than this number of days','Integer')
22369 NewVersion( $DBversion, 20815, "Add NoRefundOnLostReturnedItemsAge system preference" );
22372 $DBversion = '20.06.00.011';
22373 if( CheckVersion( $DBversion ) ) {
22374 unless( column_exists( 'export_format', 'staff_only' ) ) {
22376 ALTER TABLE export_format
22377 ADD staff_only TINYINT(1) NOT NULL DEFAULT 0 AFTER used_for,
22378 ADD KEY `staff_only_idx` (`staff_only`);
22382 unless ( index_exists( 'export_format', 'used_for_idx' ) ) {
22384 ALTER TABLE export_format
22385 ADD KEY `used_for_idx` (`used_for` (191));
22389 NewVersion( $DBversion, 5087, "Add export_format.staff_only" );
22392 $DBversion = '20.06.00.012';
22393 if( CheckVersion( $DBversion ) ) {
22395 # get list of installed translations
22396 require C4::Languages;
22398 my $tlangs = C4::Languages::getTranslatedLanguages('opac','bootstrap');
22400 foreach my $language ( @$tlangs ) {
22401 foreach my $sublanguage ( @{$language->{'sublanguages_loop'}} ) {
22402 push @langs, $sublanguage->{'rfc4646_subtag'};
22406 # Get any existing value from the opaccredits system preference
22407 my ($opaccredits) = $dbh->selectrow_array( q|
22408 SELECT value FROM systempreferences WHERE variable='opaccredits';
22410 if( $opaccredits ){
22411 foreach my $lang ( @langs ) {
22412 # If there is a value in the opaccredits preference, insert it into opac_news
22413 $dbh->do("INSERT IGNORE INTO opac_news (branchcode, lang, title, content ) VALUES (NULL, ?, '', ?)", undef, "opaccredits_$lang", $opaccredits);
22416 # Remove the opaccredits system preference
22417 $dbh->do("DELETE FROM systempreferences WHERE variable='opaccredits'");
22419 NewVersion( $DBversion, 23795, "Convert OpacCredits system preference to news block" );
22422 $DBversion = '20.06.00.013';
22423 if( CheckVersion( $DBversion ) ) {
22425 # get list of installed translations
22426 require C4::Languages;
22428 my $tlangs = C4::Languages::getTranslatedLanguages('opac','bootstrap');
22430 foreach my $language ( @$tlangs ) {
22431 foreach my $sublanguage ( @{$language->{'sublanguages_loop'}} ) {
22432 push @langs, $sublanguage->{'rfc4646_subtag'};
22436 # Get any existing value from the OpacCustomSearch system preference
22437 my ($OpacCustomSearch) = $dbh->selectrow_array( q|
22438 SELECT value FROM systempreferences WHERE variable='OpacCustomSearch';
22440 if( $OpacCustomSearch ){
22441 foreach my $lang ( @langs ) {
22442 # If there is a value in the OpacCustomSearch preference, insert it into opac_news
22443 $dbh->do("INSERT INTO opac_news (branchcode, lang, title, content ) VALUES (NULL, ?, '', ?)", undef, "OpacCustomSearch_$lang", $OpacCustomSearch);
22446 # Remove the OpacCustomSearch system preference
22447 $dbh->do("DELETE FROM systempreferences WHERE variable='OpacCustomSearch'");
22449 NewVersion( $DBversion, 23795, "Convert OpacCustomSearch system preference to news block" );
22452 $DBversion = '20.06.00.014';
22453 if( CheckVersion( $DBversion ) ) {
22455 $dbh->do( "ALTER TABLE opac_news CHANGE lang lang VARCHAR(50) NOT NULL DEFAULT ''" );
22457 NewVersion( $DBversion, 23797, "Extend the opac_news lang column to accommodate longer values" );
22460 $DBversion = '20.06.00.015';
22461 if( CheckVersion( $DBversion ) ) {
22463 # get list of installed translations
22464 require C4::Languages;
22466 my $tlangs = C4::Languages::getTranslatedLanguages('opac','bootstrap');
22468 foreach my $language ( @$tlangs ) {
22469 foreach my $sublanguage ( @{$language->{'sublanguages_loop'}} ) {
22470 push @langs, $sublanguage->{'rfc4646_subtag'};
22474 # Get any existing value from the OpacLoginInstructions system preference
22475 my ($opaclogininstructions) = $dbh->selectrow_array( q|
22476 SELECT value FROM systempreferences WHERE variable='OpacLoginInstructions';
22478 if( $opaclogininstructions ){
22479 foreach my $lang ( @langs ) {
22480 # If there is a value in the OpacLoginInstructions preference, insert it into opac_news
22481 $dbh->do("INSERT INTO opac_news (branchcode, lang, title, content ) VALUES (NULL, ?, '', ?)", undef, "OpacLoginInstructions_$lang", $opaclogininstructions);
22484 # Remove the OpacLoginInstructions system preference
22485 $dbh->do("DELETE FROM systempreferences WHERE variable='OpacLoginInstructions'");
22487 NewVersion( $DBversion, 23797, "Convert OpacLoginInstructions system preference to news block" );
22490 $DBversion = '20.06.00.016';
22491 if( CheckVersion( $DBversion ) ) {
22493 unless ( column_exists('branchtransfers', 'daterequested') ) {
22496 ALTER TABLE branchtransfers
22498 `daterequested` timestamp NOT NULL default CURRENT_TIMESTAMP
22505 NewVersion( $DBversion, 23092, "Add 'daterequested' field to transfers table" );
22508 $DBversion = '20.06.00.017';
22509 if( CheckVersion( $DBversion ) ) {
22510 $dbh->do( "UPDATE systempreferences SET variable='NotesToHide' WHERE variable = 'NotesBlacklist'" );
22511 NewVersion( $DBversion, 25709, "Rename systempreference to NotesToHide");
22514 $DBversion = '20.06.00.018';
22515 if( CheckVersion( $DBversion ) ) {
22517 INSERT IGNORE INTO permissions (module_bit, code, description) VALUES
22518 (11, 'reopen_closed_invoices', 'Reopen closed invoices')
22522 INSERT IGNORE INTO permissions (module_bit, code, description) VALUES
22523 (11, 'edit_invoices', 'Edit invoices')
22527 INSERT IGNORE INTO permissions (module_bit, code, description) VALUES
22528 (11, 'delete_baskets', 'Delete baskets')
22532 INSERT IGNORE INTO permissions (module_bit, code, description) VALUES
22533 (11, 'delete_invoices', 'Delete invoices')
22537 INSERT IGNORE INTO permissions (module_bit, code, description) VALUES
22538 (11, 'merge_invoices', 'Merge invoices')
22541 NewVersion( $DBversion, 24157, "Add new permissions reopen_closed_invoices, edit_invoices, delete_invoices, merge_invoices, delete_basket");
22544 $DBversion = '20.06.00.019';
22545 if( CheckVersion( $DBversion ) ) {
22546 $dbh->do( "INSERT IGNORE INTO systempreferences (variable,value,explanation,options,type) VALUES('NewsToolEditor','tinymce', 'Choose tool for editing News','tinymce|codemirror','Choice')" );
22548 NewVersion( $DBversion, 22660, "Adds NewsToolEditor system preference");
22551 $DBversion = '20.06.00.020';
22552 if( CheckVersion( $DBversion ) ) {
22553 # Remove from the systempreferences table
22554 $dbh->do("DELETE FROM systempreferences WHERE variable = 'GoogleIndicTransliteration'");
22556 NewVersion( $DBversion, 26070, "Remove references to deprecated Google Transliterate API");
22559 $DBversion = '20.06.00.021';
22560 if( CheckVersion( $DBversion ) ) {
22562 UPDATE systempreferences SET options = "callnum|ccode|location|library"
22563 WHERE variable = "OpacItemLocation"
22565 NewVersion( $DBversion, 25871, "Add library option to OpacItemLocation");
22568 $DBversion = '20.06.00.022';
22569 if( CheckVersion( $DBversion ) ) {
22570 unless ( column_exists('itemtypes', 'parent_type') ) {
22572 ALTER TABLE itemtypes
22573 ADD COLUMN parent_type VARCHAR(10) NULL DEFAULT NULL
22578 unless ( foreign_key_exists( 'itemtypes', 'itemtypes_ibfk_1') ){
22580 ALTER TABLE itemtypes
22581 ADD CONSTRAINT itemtypes_ibfk_1
22582 FOREIGN KEY (parent_type) REFERENCES itemtypes (itemtype)
22586 NewVersion( $DBversion, 21946, "Add parent type to itemtypes" );
22589 $DBversion = '20.06.00.023';
22590 if( CheckVersion( $DBversion ) ) {
22592 my ( $QuoteOfTheDay ) = $dbh->selectrow_array(q|
22593 SELECT value FROM systempreferences WHERE variable='QuoteOfTheDay'
22595 my $options = $QuoteOfTheDay ? 'opac' : '';
22597 UPDATE systempreferences
22599 options = 'intranet,opac',
22600 explanation = 'Enable or disable display of Quote of the Day on the OPAC and staff interface home page',
22602 WHERE variable = 'QuoteOfTheDay'
22603 |, undef, $options );
22605 NewVersion( $DBversion, 16371, "Quote of the Day (QOTD) for the staff interface " );
22608 $DBversion = '20.06.00.024';
22609 if( CheckVersion( $DBversion ) ) {
22611 $dbh->do( "UPDATE marc_subfield_structure SET liblibrarian = 'Home library' WHERE liblibrarian = 'Permanent location'
22612 AND tagfield = 952 and tagsubfield = 'a'" );
22613 $dbh->do( "UPDATE marc_subfield_structure SET libopac = 'Home library' WHERE libopac = 'Permanent location'
22614 AND tagfield = 952 and tagsubfield = 'a'" );
22615 $dbh->do( "UPDATE marc_subfield_structure SET liblibrarian = 'Current library' WHERE liblibrarian = 'Current location'
22616 AND tagfield = 952 and tagsubfield = 'b'" );
22617 $dbh->do( "UPDATE marc_subfield_structure SET libopac = 'Current library' WHERE libopac = 'Current location'
22618 AND tagfield = 952 and tagsubfield = 'b'" );
22620 NewVersion( $DBversion, 25867, "Update subfield descriptions for 952\$a and 952\$b");
22623 $DBversion = '20.06.00.025';
22624 if( CheckVersion( $DBversion ) ) {
22627 INSERT IGNORE INTO systempreferences (variable,value,options,explanation,type) VALUES
22628 ('PatronDuplicateMatchingAddFields','surname|firstname|dateofbirth', NULL,'A list of fields separated by "|" to deduplicate patrons when created','Free')
22631 NewVersion( $DBversion, 6725, "Adds PatronDuplicateMatchingAddFields system preference");
22634 $DBversion = '20.06.00.026';
22635 if (CheckVersion($DBversion)) {
22636 unless (column_exists('accountlines', 'credit_number')) {
22637 $dbh->do('ALTER TABLE accountlines ADD COLUMN credit_number VARCHAR(20) NULL DEFAULT NULL COMMENT "autogenerated number for credits" AFTER debit_type_code');
22640 unless (column_exists('account_credit_types', 'credit_number_enabled')) {
22642 ALTER TABLE account_credit_types
22643 ADD COLUMN credit_number_enabled TINYINT(1) NOT NULL DEFAULT 0
22644 COMMENT "Is autogeneration of credit number enabled for this credit type"
22645 AFTER can_be_added_manually
22649 $dbh->do('INSERT IGNORE INTO systempreferences (variable, value, options, explanation, type) VALUES(?, ?, ?, ?, ?)', undef, 'AutoCreditNumber', '', '', 'Automatically generate a number for account credits', 'Choice');
22651 NewVersion( $DBversion, 19036, "Add accountlines.credit_number, account_credit_types.credit_number_enabled and syspref AutoCreditNumber" );
22654 $DBversion = '20.06.00.027';
22655 if( CheckVersion( $DBversion ) ) {
22656 $dbh->do( "INSERT IGNORE INTO systempreferences (variable,value,explanation,options,type) VALUES('BiblioItemtypeInfo', '0','Control whether biblio level itemtype image displays','0','YesNo')" );
22658 NewVersion( $DBversion, 8732, 'Add new BiblioItemtypeInfo to system preferences' );
22661 $DBversion = '20.06.00.028';
22662 if( CheckVersion( $DBversion ) ) {
22664 INSERT IGNORE INTO systempreferences ( `variable`, `value`, `options`, `explanation`, `type` ) VALUES
22665 ('DefaultLongOverdueSkipLostStatuses', '', NULL, 'Skip these lost statuses by default in longoverdue.pl', 'Free')
22668 NewVersion( $DBversion, 25958, "Allow LongOverdue cron to exclude specified lost values");
22671 $DBversion = '20.06.00.029';
22672 if ( CheckVersion( $DBversion ) ) {
22674 INSERT IGNORE INTO authorised_value_categories( category_name, is_system ) VALUES ('HOLD_CANCELLATION', 0);
22677 if ( !column_exists( 'reserves', 'cancellation_reason' ) ) {
22679 ALTER TABLE reserves ADD COLUMN `cancellation_reason` varchar(80) default NULL AFTER cancellationdate;
22683 if ( !column_exists( 'old_reserves', 'cancellation_reason' ) ) {
22685 ALTER TABLE old_reserves ADD COLUMN `cancellation_reason` varchar(80) default NULL AFTER cancellationdate;
22689 NewVersion( $DBversion, 25534, "Add ability to send an email specifying a reason when canceling a hold");
22692 $DBversion = '20.06.00.030';
22693 if ( CheckVersion( $DBversion ) ) {
22696 INSERT IGNORE INTO systempreferences ( `variable`, `value`, `options`, `explanation`, `type`) VALUES
22697 ('AutoApprovePatronProfileSettings', '0', '', 'Automatically approve patron profile changes from the OPAC.', 'YesNo');
22700 NewVersion( $DBversion, 20057, "Add new system preference 'AutoApprovePatronProfileSettings'");
22703 $DBversion = '20.06.00.031';
22704 if( CheckVersion( $DBversion ) ) {
22706 if( !column_exists( 'reserves', 'non_priority' ) ) {
22707 $dbh->do("ALTER TABLE reserves ADD COLUMN `non_priority` tinyint(1) NOT NULL DEFAULT 0 AFTER `item_level_hold`");
22710 if( !column_exists( 'old_reserves', 'non_priority' ) ) {
22711 $dbh->do("ALTER TABLE old_reserves ADD COLUMN `non_priority` tinyint(1) NOT NULL DEFAULT 0 AFTER `item_level_hold`");
22714 NewVersion( $DBversion, 22789, "Add non_priority column on reserves and old_reserves tables");
22717 $DBversion = '20.06.00.032';
22718 if( CheckVersion( $DBversion ) ) {
22719 if( !column_exists( 'items', 'exclude_from_local_holds_priority' ) ) {
22721 ALTER TABLE `items` ADD COLUMN `exclude_from_local_holds_priority` tinyint(1) default NULL AFTER `new_status`
22725 if( !column_exists( 'deleteditems', 'exclude_from_local_holds_priority' ) ) {
22727 ALTER TABLE `deleteditems` ADD COLUMN `exclude_from_local_holds_priority` tinyint(1) default NULL AFTER `new_status`
22731 if( !column_exists( 'categories', 'exclude_from_local_holds_priority' ) ) {
22733 ALTER TABLE `categories` ADD COLUMN `exclude_from_local_holds_priority` tinyint(1) default NULL AFTER `change_password`
22736 NewVersion( $DBversion, 19889, "Add exclude_from_local_holds_priority column to items, deleteditems and categories tables");
22739 $DBversion = '20.06.00.033';
22740 if( CheckVersion( $DBversion ) ) {
22741 if( column_exists( 'opac_news', 'timestamp' ) ) {
22743 ALTER TABLE opac_news
22744 CHANGE COLUMN timestamp published_on date DEFAULT NULL
22747 if( !column_exists( 'opac_news', 'updated_on' ) ) {
22749 ALTER TABLE opac_news
22750 ADD COLUMN updated_on timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP AFTER published_on
22756 SET content = REPLACE(content,?,?)
22757 WHERE content LIKE ?
22758 |, undef, 'opac_news.timestamp', 'opac_news.published_on', '%opac_news.timestamp%' );
22760 NewVersion( $DBversion, 21066, ["Rename column opac_news.timestamp with published_on", "Add new column opac_news.updated_on", "Replace timestamp references in letters table"] );
22763 $DBversion = '20.06.00.034';
22764 if( CheckVersion( $DBversion ) ) {
22766 INSERT IGNORE INTO systempreferences (variable, value, options, explanation, type)
22767 VALUES ('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')
22770 NewVersion( $DBversion, 24197, "Add new system preference 'AddressForFailedOverdueNotices'" );
22773 $DBversion = '20.06.00.035';
22774 if ( CheckVersion( $DBversion ) ) {
22776 INSERT IGNORE INTO systempreferences ( `variable`, `value`, `options`, `explanation`, `type` ) VALUES
22777 ('EdifactInvoiceImport', 'automatic', 'automatic|manual', "If on, don't auto-import EDI invoices, just keep them in the database with the status 'new'", 'Choice')
22780 NewVersion( $DBversion, 23682, "Add new system preference 'EdifactInvoiceImport'" );
22783 $DBversion = '20.06.00.036';
22784 if( CheckVersion( $DBversion ) ) {
22785 # Fix the markup in the OPACSearchForTitleIn system preference
22786 $dbh->do("UPDATE systempreferences SET VALUE = replace( value, '</li>', ''), value = REPLACE( value, '<li>', '') WHERE VARIABLE = 'OPACSearchForTitleIn';");
22788 NewVersion( $DBversion, 20168, "Update OPACSearchForTitleIn to work with Bootstrap 4");
22791 $DBversion = '20.06.00.037';
22792 if( CheckVersion( $DBversion ) ) {
22793 if( !column_exists( 'categories', 'min_password_length' ) ) {
22794 $dbh->do("ALTER TABLE categories ADD COLUMN `min_password_length` smallint(6) NULL DEFAULT NULL AFTER `change_password` -- set minimum password length for patrons in this category");
22796 if( !column_exists( 'categories', 'require_strong_password' ) ) {
22797 $dbh->do("ALTER TABLE categories ADD COLUMN `require_strong_password` TINYINT(1) NULL DEFAULT NULL AFTER `min_password_length` -- set required password strength for patrons in this category");
22800 NewVersion( $DBversion, 23816, "Add min_password_length and require_strong_password columns in categories table");
22803 $DBversion = '20.06.00.038';
22804 if( CheckVersion( $DBversion ) ) {
22805 $dbh->do( "ALTER TABLE `search_field` MODIFY COLUMN `type` enum('','string','date','number','boolean','sum','isbn','stdno','year') NOT NULL" );
22806 $dbh->do( "UPDATE `search_field` SET type = 'year' WHERE name = 'date-of-publication'" );
22808 NewVersion( $DBversion, 24807, "Add 'year' type to improve sorting behaviour" );
22811 $DBversion = '20.06.00.039';
22812 if( CheckVersion( $DBversion ) ) {
22814 if( !column_exists( 'hold_fill_targets', 'reserve_id' ) ) {
22815 $dbh->do( "ALTER TABLE hold_fill_targets ADD COLUMN reserve_id int(11) DEFAULT NULL AFTER item_level_request" );
22818 NewVersion( $DBversion, 18958, "Add reserve_id to hold_fill_targets");
22821 $DBversion = '20.06.00.040';
22822 if( CheckVersion( $DBversion ) ) {
22823 $dbh->do( "INSERT IGNORE INTO systempreferences (variable, value, options, explanation, type) VALUES ('OpacMetaDescription','','','This description will show in search engine results (160 characters).','Textarea');" );
22825 NewVersion( $DBversion, 26454, "Add system preference to set meta description for the OPAC");
22828 $DBversion = '20.06.00.041';
22829 if ( CheckVersion($DBversion) ) {
22831 if ( column_exists( 'items', 'paidfor' ) ) {
22832 my ($count) = $dbh->selectrow_array(
22836 WHERE paidfor IS NOT NULL AND paidfor <> ""
22840 warn "Warning - Cannot remove column items.paidfor. At least one value exists";
22843 $dbh->do(q|ALTER TABLE items DROP COLUMN paidfor|);
22844 $dbh->do(q|UPDATE marc_subfield_structure SET kohafield = '' WHERE kohafield = 'items.paidfor'|);
22848 if ( column_exists( 'deleteditems', 'paidfor' ) ) {
22849 my ($count) = $dbh->selectrow_array(
22853 WHERE paidfor IS NOT NULL AND paidfor <> ""
22857 warn "Warning - Cannot remove column deleteditems.paidfor. At least one value exists";
22860 $dbh->do(q|ALTER TABLE deleteditems DROP COLUMN paidfor|);
22864 NewVersion( $DBversion, 26268, "Remove items.paidfor field" );
22867 $DBversion = '20.06.00.042';
22868 if( CheckVersion( $DBversion ) ) {
22869 unless ( column_exists('letter', 'updated_on') ) {
22871 ALTER TABLE letter ADD COLUMN updated_on timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP AFTER lang
22875 NewVersion( $DBversion, 25776, "Add letter.updated_on");
22878 $DBversion = '20.06.00.043';
22879 if( CheckVersion( $DBversion ) ) {
22881 INSERT IGNORE INTO systempreferences (variable,value,options,explanation,type) VALUES ('CircConfirmItemParts', '0', NULL, 'Require staff to confirm that all parts of an item are present at checkin/checkout.', 'YesNo')
22884 NewVersion( $DBversion, 25261, "Add CircConfirmItemParts syspref");
22887 $DBversion = '20.06.00.044';
22888 if( CheckVersion( $DBversion ) ) {
22890 unless (TableExists('smtp_servers')) {
22894 CREATE TABLE `smtp_servers` (
22895 `id` INT(11) NOT NULL AUTO_INCREMENT,
22896 `name` VARCHAR(80) NOT NULL,
22897 `host` VARCHAR(80) NOT NULL DEFAULT 'localhost',
22898 `port` INT(11) NOT NULL DEFAULT 25,
22899 `timeout` INT(11) NOT NULL DEFAULT 120,
22900 `ssl_mode` ENUM('disabled', 'ssl', 'starttls') NOT NULL,
22901 `user_name` VARCHAR(80) NULL DEFAULT NULL,
22902 `password` VARCHAR(80) NULL DEFAULT NULL,
22903 `debug` TINYINT(1) NOT NULL DEFAULT 0,
22904 PRIMARY KEY (`id`),
22905 KEY `host_idx` (`host`)
22906 ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
22910 unless (TableExists('library_smtp_servers')) {
22912 CREATE TABLE `library_smtp_servers` (
22913 `id` INT(11) NOT NULL AUTO_INCREMENT,
22914 `library_id` VARCHAR(10) NOT NULL,
22915 `smtp_server_id` INT(11) NOT NULL,
22916 PRIMARY KEY (`id`),
22917 UNIQUE KEY `library_id_idx` (`library_id`),
22918 KEY `smtp_server_id_idx` (`smtp_server_id`),
22919 CONSTRAINT `library_smtp_servers_library_fk` FOREIGN KEY (`library_id`) REFERENCES `branches` (`branchcode`) ON DELETE CASCADE ON UPDATE CASCADE,
22920 CONSTRAINT `library_smtp_servers_smtp_servers_fk` FOREIGN KEY (`smtp_server_id`) REFERENCES `smtp_servers` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
22921 ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
22926 INSERT IGNORE INTO permissions
22927 (module_bit, code, description)
22928 VALUES ( 3, 'manage_smtp_servers', 'Manage SMTP servers configuration');
22931 NewVersion( $DBversion, 22343, "Add SMTP configuration options");
22934 $DBversion = '20.06.00.045';
22935 if( CheckVersion( $DBversion ) ) {
22937 unless ( TableExists('background_jobs') ) {
22939 CREATE TABLE background_jobs (
22940 id INT(11) NOT NULL AUTO_INCREMENT,
22941 status VARCHAR(32),
22944 borrowernumber INT(11),
22947 enqueued_on DATETIME DEFAULT NULL,
22948 started_on DATETIME DEFAULT NULL,
22949 ended_on DATETIME DEFAULT NULL,
22951 ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
22956 INSERT IGNORE permissions (module_bit, code, description)
22958 (3, 'manage_background_jobs', 'Manage background jobs')
22961 NewVersion( $DBversion, 22417, "Add new table background_jobs");
22964 $DBversion = '20.06.00.046';
22965 if( CheckVersion( $DBversion ) ) {
22966 unless ( foreign_key_exists( 'alert', 'alert_ibfk_1' ) ) {
22968 DELETE a FROM alert a
22969 LEFT JOIN borrowers b ON a.borrowernumber=b.borrowernumber
22970 WHERE b.borrowernumber IS NULL
22974 ADD CONSTRAINT alert_ibfk_1 FOREIGN KEY (borrowernumber) REFERENCES borrowers (borrowernumber) ON UPDATE CASCADE ON DELETE CASCADE
22977 NewVersion( $DBversion, 13535, "Add FK constraint on borrowernumber to alert table" );
22980 $DBversion = '20.06.00.047';
22981 if ( CheckVersion($DBversion) ) {
22983 #Get value from AllowPurchaseSuggestionBranchChoice system preference
22984 my ($allowpurchasesuggestionbranchchoice) =
22985 C4::Context->preference('AllowPurchaseSuggestionBranchChoice');
22986 if ($allowpurchasesuggestionbranchchoice) {
22988 INSERT IGNORE INTO systempreferences
22989 (`variable`, `value`, `options`, `explanation`, `type`)
22991 ('OPACSuggestionUnwantedFields','branch', NULL,'Define the hidden fields for a patron purchase suggestions made via OPAC.','multiple');
22996 INSERT IGNORE INTO systempreferences
22997 (`variable`, `value`, `options`, `explanation`, `type`)
22999 ('OPACSuggestionUnwantedFields','', NULL,'Define the hidden fields for a patron purchase suggestions made via OPAC.','multiple');
23003 #Remove the AllowPurchaseSuggestionBranchChoice system preference
23005 "DELETE FROM systempreferences WHERE variable='AllowPurchaseSuggestionBranchChoice'"
23007 NewVersion( $DBversion, 23420, "Allow configuration of hidden fields on the suggestion form in OPAC" );
23010 $DBversion = '20.06.00.048';
23011 if( CheckVersion( $DBversion ) ) {
23013 DELETE FROM circulation_rules WHERE
23014 rule_name IN ('holdallowed','hold_fulfillment_policy','returnbranch') AND
23017 NewVersion( $DBversion, 26529, "Remove blank default branch rules");
23020 $DBversion = '20.06.00.049';
23021 if( CheckVersion( $DBversion ) ) {
23023 if( TableExists('biblioimages') && !column_exists( 'biblioimages', 'itemnumber' ) ) {
23025 ALTER TABLE biblioimages
23026 ADD COLUMN itemnumber INT(11) DEFAULT NULL
23027 AFTER biblionumber;
23030 ALTER TABLE biblioimages
23031 ADD FOREIGN KEY bibliocoverimage_fk2 (`itemnumber`) REFERENCES `items` (`itemnumber`) ON DELETE CASCADE ON UPDATE CASCADE
23034 ALTER TABLE biblioimages MODIFY biblionumber INT(11) DEFAULT NULL
23038 if( !TableExists('cover_images') ) {
23040 ALTER TABLE biblioimages RENAME cover_images
23044 NewVersion( $DBversion, '26145', ["Add the biblioimages.itemnumber column", "Rename table biblioimages with cover_images"] );
23047 $DBversion = '20.06.00.050';
23048 if ( CheckVersion($DBversion) ) {
23050 INSERT IGNORE INTO systempreferences ( `variable`, `value`, `options`, `explanation`, `type` ) VALUES
23051 ('NoIssuesChargeGuarantorsWithGuarantees','','','Define maximum amount withstanding before checkouts are blocked including guarantors and their other guarantees','Integer');
23054 NewVersion( $DBversion, 19382, "Add ability to block guarantees based on fees owed by guarantor and other guarantee - new system preference 'NoIssuesChargeGuarantorsWithGuarantees'");
23057 $DBversion = '20.06.00.051';
23058 if( CheckVersion( $DBversion ) ) {
23060 INSERT IGNORE INTO systempreferences ( `variable`, `value`, `options`, `explanation`, `type` ) VALUES
23061 ('HoldsNeedProcessingSIP', '0', NULL, 'Require staff to check-in before hold is set to waiting state', 'YesNo' )
23064 NewVersion( $DBversion, 12556, "Add new syspref HoldsNeedProcessingSIP");
23067 $DBversion = '20.06.00.052';
23068 if ( CheckVersion($DBversion) ) {
23070 INSERT IGNORE INTO systempreferences (variable, value, options, explanation, type) VALUES ('OAI-PMH:AutoUpdateSetEmbedItemData', '0', '', 'Embed item information when automatically updating OAI sets. Requires OAI-PMH:AutoUpdateSets syspref to be enabled', 'YesNo')
23074 UPDATE systempreferences SET explanation = 'Automatically update OAI sets when a bibliographic or item record is created or updated' WHERE variable = 'OAI-PMH:AutoUpdateSets'
23077 NewVersion( $DBversion, 25460, "Update OAI set when adding/editing/deleting item records" );
23080 $DBversion = '20.06.00.053';
23081 if( CheckVersion( $DBversion ) ) {
23082 $dbh->do( "UPDATE systempreferences SET explanation='Define which baskets a user is allowed to view: their own only, any within their branch, or all' WHERE variable='AcqViewBaskets'" );
23083 $dbh->do( "UPDATE systempreferences SET explanation='If enabled, the patron can set checkouts to be visible to their guarantor' WHERE variable='AllowPatronToSetCheckoutsVisibilityForGuarantor'" );
23084 $dbh->do( "UPDATE systempreferences SET explanation='If enabled, the patron can set fines to be visible to their guarantor' WHERE variable='AllowPatronToSetFinesVisibilityForGuarantor'" );
23085 $dbh->do( "UPDATE systempreferences SET explanation='If on, and a patron is logged into the OPAC, items from their home library will be emphasized and shown first in search results and item details.' WHERE variable='HighlightOwnItemsOnOPAC'" );
23086 $dbh->do( "UPDATE systempreferences SET explanation='If ON, the next user will automatically get the last searches in their history' WHERE variable='LoadSearchHistoryToTheFirstLoggedUser'" );
23087 $dbh->do( "UPDATE systempreferences SET explanation='If enabled, any patron attempting to register themselves via the OPAC will be required to verify themselves via email to activate their account.' WHERE variable='PatronSelfRegistrationVerifyByEmail'" );
23089 NewVersion( $DBversion, 26569, "Use gender neutral pronouns in system preference explanations" );
23092 $DBversion = '20.06.00.054';
23093 if ( CheckVersion($DBversion) ) {
23097 INSERT IGNORE INTO account_credit_types (code, description, can_be_added_manually, is_system)
23099 ('OVERPAYMENT', 'Overpayment refund', 0, 1)
23105 INSERT IGNORE INTO account_offset_types ( type ) VALUES ('Overpayment');
23111 UPDATE accountlines SET credit_type_code = 'OVERPAYMENT' WHERE credit_type_code = 'CREDIT' AND description = 'Overpayment refund'
23115 NewVersion( $DBversion, 25596, "Add OVERPAYMENT credit type" );
23118 $DBversion = '20.06.00.055';
23119 if( CheckVersion( $DBversion ) ) {
23120 my $count_missing_budget = $dbh->selectrow_arrayref(q|
23121 SELECT COUNT(*) FROM aqbudgets ab WHERE NOT EXISTS
23122 (SELECT * FROM aqbudgetperiods abp WHERE abp.budget_period_id = ab.budget_period_id)
23123 AND budget_period_id IS NOT NULL;
23128 if($count_missing_budget->[0] > 0) {
23130 CREATE TABLE _bug_18050_aqbudgets AS
23131 SELECT * FROM aqbudgets ab WHERE NOT EXISTS
23132 (SELECT * FROM aqbudgetperiods abp WHERE abp.budget_period_id = ab.budget_period_id)
23136 UPDATE aqbudgets ab SET budget_period_id = NULL
23138 (SELECT * FROM aqbudgetperiods abp WHERE abp.budget_period_id = ab.budget_period_id)
23140 $message = ". There are $count_missing_budget->[0] funds in your database that are not linked
23141 to a valid budget. Setting invalid budget id (budget_period_id) to null. The table _bug_18050_aqbudgets
23142 was created with original data. Please check that table and place valid ids in aqbudget table as soon as possible."
23146 if ( !foreign_key_exists( 'aqbudgets', 'aqbudgetperiods_ibfk_1' ) ) {
23148 ALTER TABLE aqbudgets ADD CONSTRAINT `aqbudgetperiods_ibfk_1` FOREIGN KEY (`budget_period_id`) REFERENCES `aqbudgetperiods` (`budget_period_id`) ON UPDATE CASCADE ON DELETE CASCADE
23150 NewVersion( $DBversion, 18050, "Add FK constraint on aqbudgets.budget_period_id$message");
23152 NewVersion( $DBversion, 18050, "FK constraint on aqbudgets.budget already exists");
23157 $DBversion = '20.06.00.056';
23158 if( CheckVersion( $DBversion ) ) {
23160 $dbh->do("DROP INDEX title ON import_biblios");
23161 $dbh->do("DROP INDEX isbn ON import_biblios");
23162 $dbh->do("ALTER TABLE import_biblios MODIFY title LONGTEXT");
23163 $dbh->do("ALTER TABLE import_biblios MODIFY author LONGTEXT");
23164 $dbh->do("ALTER TABLE import_biblios MODIFY isbn LONGTEXT");
23165 $dbh->do("ALTER TABLE import_biblios MODIFY issn LONGTEXT");
23166 $dbh->do("CREATE INDEX title ON import_biblios (title(191));");
23167 $dbh->do("CREATE INDEX isbn ON import_biblios (isbn(191));");
23169 NewVersion( $DBversion, 26853, "Update import_biblios columns and indexes" );
23172 $DBversion = '20.06.00.057';
23173 if( CheckVersion( $DBversion ) ) {
23175 INSERT IGNORE INTO `systempreferences` (`variable`, `value`, `options`, `explanation`, `type`) VALUES
23176 ('ArticleRequestsMandatoryFieldsItemOnly', '', NULL, 'Comma delimited list of required fields for bibs where article requests rule = ''item_only''', 'multiple')
23179 DELETE FROM systempreferences WHERE variable = "ArticleRequestsMandatoryFieldsItemsOnly"
23182 NewVersion( $DBversion, 26638, "Add missing system preference ArticleRequestsMandatoryFieldsItemOnly");
23185 $DBversion = '20.06.00.058';
23186 if( CheckVersion( $DBversion ) ) {
23188 # Adding the ON DELETE CASCASE ON UPDATE CASCADE, in case it's missing (from 9016 - 3.15.00.039)
23190 ALTER TABLE letter DROP FOREIGN KEY message_transport_type_fk
23194 ALTER TABLE letter ADD CONSTRAINT message_transport_type_fk FOREIGN KEY (message_transport_type) REFERENCES message_transport_types(message_transport_type) ON DELETE CASCADE ON UPDATE CASCADE
23198 UPDATE message_transport_types SET message_transport_type = "itiva" WHERE message_transport_type = "phone"
23201 NewVersion( $DBversion, 25333, q{Change message transport type for Talking Tech from "phone" to "itiva"});
23204 $DBversion = '20.06.00.059';
23205 if( CheckVersion( $DBversion ) ) {
23207 if( !column_exists( 'search_field', 'mandatory' ) ) {
23208 $dbh->do( "ALTER TABLE search_field ADD COLUMN mandatory tinyint(1) NULL DEFAULT NULL AFTER opac" );
23211 NewVersion( $DBversion, 19482, "Add mandatory column to search_field for ES mapping" );
23214 $DBversion = '20.06.00.060';
23215 if( CheckVersion( $DBversion ) ) {
23217 INSERT IGNORE INTO systempreferences ( `variable`, `value`, `options`, `explanation`, `type` ) VALUES
23218 ('PhoneNotification','0',NULL,'If ON, enables generation of phone notifications to be sent by plugins','YesNo')
23222 INSERT IGNORE INTO message_transport_types (message_transport_type) VALUES ('phone')
23226 INSERT IGNORE INTO `message_transports`
23227 (`message_attribute_id`, `message_transport_type`, `is_digest`, `letter_module`, `letter_code`)
23229 (1, 'phone', 0, 'circulation', 'DUE'),
23230 (1, 'phone', 1, 'circulation', 'DUEDGST'),
23231 (2, 'phone', 0, 'circulation', 'PREDUE'),
23232 (2, 'phone', 1, 'circulation', 'PREDUEDGST'),
23233 (4, 'phone', 0, 'reserves', 'HOLD'),
23234 (5, 'phone', 0, 'circulation', 'CHECKIN'),
23235 (6, 'phone', 0, 'circulation', 'CHECKOUT');
23238 NewVersion( $DBversion, 25334, "Add generic 'phone' message transport type");
23241 $DBversion = '20.06.00.061';
23242 if( CheckVersion( $DBversion ) ) {
23243 if ( !column_exists( 'reserves', 'desk_id' ) ) {
23245 ALTER TABLE reserves ADD COLUMN desk_id INT(11) DEFAULT NULL AFTER branchcode,
23246 ADD KEY desk_id (`desk_id`),
23247 ADD CONSTRAINT `reserves_ibfk_6` FOREIGN KEY (`desk_id`) REFERENCES `desks` (`desk_id`) ON DELETE SET NULL ON UPDATE CASCADE ;
23250 ALTER TABLE old_reserves ADD COLUMN desk_id INT(11) DEFAULT NULL AFTER branchcode,
23251 ADD KEY `old_desk_id` (`desk_id`);
23255 NewVersion( $DBversion, 24412, "Attach waiting reserve to desk" );
23258 $DBversion = '20.06.00.062';
23259 if( CheckVersion( $DBversion ) ) {
23260 $dbh->do( "UPDATE circulation_rules SET rule_name = 'lostreturn' WHERE rule_name = 'refund'" );
23261 $dbh->do( "UPDATE circulation_rules SET rule_value = 'refund' WHERE rule_name = 'lostreturn' AND rule_value = 1" );
23263 NewVersion( $DBversion, 23091, "Update refund rules");
23266 $DBversion = '20.06.00.063';
23267 if( CheckVersion( $DBversion ) ) {
23268 $dbh->do(q{INSERT IGNORE INTO circulation_rules (branchcode, categorycode, itemtype, rule_name, rule_value) VALUES (NULL, NULL, NULL, 'decreaseloanholds', NULL) });
23270 NewVersion( $DBversion, 14866, "Add decreaseloanholds circulation rule" );
23273 $DBversion = '20.06.00.064';
23274 if ( CheckVersion($DBversion) ) {
23277 INSERT IGNORE INTO account_credit_types (code, description, can_be_added_manually, is_system)
23278 VALUES ('CANCELLATION', 'Cancelled charge', 0, 1)
23282 INSERT IGNORE INTO account_offset_types ( type ) VALUES ('CANCELLATION');
23285 NewVersion( $DBversion, 24603, "Add CANCELLATION credit_type_code" );
23288 $DBversion = '20.06.00.065';
23289 if( CheckVersion( $DBversion ) ) {
23290 if( !column_exists( 'issues', 'issuer_id' ) ) {
23291 $dbh->do( q| ALTER TABLE issues ADD issuer_id INT(11) DEFAULT NULL AFTER borrowernumber | );
23293 if (!foreign_key_exists( 'issues', 'issues_ibfk_borrowers_borrowernumber' )) {
23294 $dbh->do( q| ALTER TABLE issues ADD CONSTRAINT `issues_ibfk_borrowers_borrowernumber` FOREIGN KEY (`issuer_id`) REFERENCES `borrowers` (`borrowernumber`) ON DELETE SET NULL ON UPDATE CASCADE | );
23296 if( !column_exists( 'old_issues', 'issuer_id' ) ) {
23297 $dbh->do( q| ALTER TABLE old_issues ADD issuer_id INT(11) DEFAULT NULL AFTER borrowernumber | );
23299 if (!foreign_key_exists( 'old_issues', 'old_issues_ibfk_borrowers_borrowernumber' )) {
23300 $dbh->do( q| ALTER TABLE old_issues ADD CONSTRAINT `old_issues_ibfk_borrowers_borrowernumber` FOREIGN KEY (`issuer_id`) REFERENCES `borrowers` (`borrowernumber`) ON DELETE SET NULL ON UPDATE CASCADE | );
23303 $dbh->do( q| INSERT IGNORE INTO systempreferences (variable, value, explanation, options, type) VALUES ('RecordStaffUserOnCheckout', '0', 'If enabled, when an item is checked out, the user who checked out the item is recorded', '', 'YesNo'); | );
23305 NewVersion( $DBversion, 23916, [ "Add new [old_]issues.issuer DB fields", "Add new syspref RecordStaffUserOnCheckout" ] );
23308 $DBversion = '20.06.00.066';
23309 if( CheckVersion( $DBversion ) ) {
23310 if( !column_exists( 'branches', 'branchillemail' ) ) {
23311 $dbh->do( q| ALTER TABLE branches ADD branchillemail LONGTEXT AFTER branchemail | );
23314 $dbh->do( q| INSERT IGNORE INTO systempreferences (variable, value, explanation, options, type) VALUES ('ILLDefaultStaffEmail', '', 'Fallback email address for staff ILL notices to be sent to in the absence of a branch address', NULL, 'Free'); | );
23315 $dbh->do( q| INSERT IGNORE INTO systempreferences (variable, value, explanation, options, type) VALUES ('ILLSendStaffNotices', NULL, 'Send these ILL notices to staff', NULL, 'multiple'); | );
23317 $dbh->do( q| INSERT IGNORE INTO letter(module, code, branchcode, name, is_html, title, content, message_transport_type, lang) VALUES ('ill', 'ILL_PICKUP_READY', '', 'ILL request ready for pickup', 0, "Interlibrary loan request ready for pickup", "Dear [% borrower.firstname %] [% borrower.surname %],\n\nThe Interlibrary loans request number [% illrequest.illrequest_id %] you placed for:\n\n- [% ill_bib_title %] - [% ill_bib_author %]\n\nis ready for pick up from [% branch.branchname %].\n\nKind Regards\n\n[% branch.branchname %]\n[% branch.branchaddress1 %]\n[% branch.branchaddress2 %]\n[% branch.branchaddress3 %]\n[% branch.branchcity %]\n[% branch.branchstate %]\n[% branch.branchzip %]\n[% branch.branchphone %]\n[% branch.branchillemail %]\n[% branch.branchemail %]", 'email', 'default'); | );
23318 $dbh->do( q| INSERT IGNORE INTO letter(module, code, branchcode, name, is_html, title, content, message_transport_type, lang) VALUES ('ill', 'ILL_REQUEST_UNAVAIL', '', 'ILL request unavailable', 0, "Interlibrary loan request unavailable", "Dear [% borrower.firstname %] [% borrower.surname %],\n\nThe Interlibrary loans request number [% illrequest.illrequest_id %] you placed for\n\n- [% ill_bib_title %] - [% ill_bib_author %]\n\nis unfortunately unavailable.\n\nKind Regards\n\n[% branch.branchname %]\n[% branch.branchaddress1 %]\n[% branch.branchaddress2 %]\n[% branch.branchaddress3 %]\n[% branch.branchcity %]\n[% branch.branchstate %]\n[% branch.branchzip %]\n[% branch.branchphone %]\n[% branch.branchillemail %]\n[% branch.branchemail %]", 'email', 'default'); | );
23319 $dbh->do( q| INSERT IGNORE INTO letter(module, code, branchcode, name, is_html, title, content, message_transport_type, lang) VALUES ('ill', 'ILL_REQUEST_CANCEL', '', 'ILL request cancelled', 0, "Interlibrary loan request cancelled", "The patron for interlibrary loans request [% illrequest.illrequest_id %], with the following details, has requested cancellation of this ILL request:\n\n[% ill_full_metadata %]", 'email', 'default'); | );
23320 $dbh->do( q| INSERT IGNORE INTO letter(module, code, branchcode, name, is_html, title, content, message_transport_type, lang) VALUES ('ill', 'ILL_REQUEST_MODIFIED', '', 'ILL request modified', 0, "Interlibrary loan request modified", "The patron for interlibrary loans request [% illrequest.illrequest_id %], with the following details, has modified this ILL request:\n\n[% ill_full_metadata %]", 'email', 'default'); | );
23321 $dbh->do( q| INSERT IGNORE INTO letter(module, code, branchcode, name, is_html, title, content, message_transport_type, lang) VALUES ('ill', 'ILL_PARTNER_REQ', '', 'ILL request to partners', 0, "Interlibrary loan request to partners", "Dear Sir/Madam,\n\nWe would like to request an interlibrary loan for a title matching the following description:\n\n[% ill_full_metadata %]\n\nPlease let us know if you are able to supply this to us.\n\nKind Regards\n\n[% branch.branchname %]\n[% branch.branchaddress1 %]\n[% branch.branchaddress2 %]\n[% branch.branchaddress3 %]\n[% branch.branchcity %]\n[% branch.branchstate %]\n[% branch.branchzip %]\n[% branch.branchphone %]\n[% branch.branchillemail %]\n[% branch.branchemail %]", 'email', 'default'); | );
23322 $dbh->do( q| INSERT IGNORE INTO letter(module, code, branchcode, name, is_html, title, content, message_transport_type, lang) VALUES ('ill', 'ILL_PICKUP_READY', '', 'ILL request ready for pickup', 0, "Interlibrary loan request ready for pickup", "Dear [% borrower.firstname %] [% borrower.surname %],\n\nThe Interlibrary loans request number [% illrequest.illrequest_id %] you placed for:\n\n- [% ill_bib_title %] - [% ill_bib_author %]\n\nis ready for pick up from [% branch.branchname %].\n\nKind Regards\n\n[% branch.branchname %]\n[% branch.branchaddress1 %]\n[% branch.branchaddress2 %]\n[% branch.branchaddress3 %]\n[% branch.branchcity %]\n[% branch.branchstate %]\n[% branch.branchzip %]\n[% branch.branchphone %]\n[% branch.branchillemail %]\n[% branch.branchemail %]", 'sms', 'default'); | );
23323 $dbh->do( q| INSERT IGNORE INTO letter(module, code, branchcode, name, is_html, title, content, message_transport_type, lang) VALUES ('ill', 'ILL_REQUEST_UNAVAIL', '', 'ILL request unavailable', 0, "Interlibrary loan request unavailable", "Dear [% borrower.firstname %] [% borrower.surname %],\n\nThe Interlibrary loans request number [% illrequest.illrequest_id %] you placed for\n\n- [% ill_bib_title %] - [% ill_bib_author %]\n\nis unfortunately unavailable.\n\nKind Regards\n\n[% branch.branchname %]\n[% branch.branchaddress1 %]\n[% branch.branchaddress2 %]\n[% branch.branchaddress3 %]\n[% branch.branchcity %]\n[% branch.branchstate %]\n[% branch.branchzip %]\n[% branch.branchphone %]\n[% branch.branchillemail %]\n[% branch.branchemail %]", 'sms', 'default'); | );
23324 $dbh->do( q| INSERT IGNORE INTO letter(module, code, branchcode, name, is_html, title, content, message_transport_type, lang) VALUES ('ill', 'ILL_REQUEST_CANCEL', '', 'ILL request cancelled', 0, "Interlibrary loan request cancelled", "The patron for interlibrary loans request [% illrequest.illrequest_id %], with the following details, has requested cancellation of this ILL request:\n\n[% ill_full_metadata %]", 'sms', 'default'); | );
23325 $dbh->do( q| INSERT IGNORE INTO letter(module, code, branchcode, name, is_html, title, content, message_transport_type, lang) VALUES ('ill', 'ILL_REQUEST_MODIFIED', '', 'ILL request modified', 0, "Interlibrary loan request modified", "The patron for interlibrary loans request [% illrequest.illrequest_id %], with the following details, has modified this ILL request:\n\n[% ill_full_metadata %]", 'sms', 'default'); | );
23326 $dbh->do( q| INSERT IGNORE INTO letter(module, code, branchcode, name, is_html, title, content, message_transport_type, lang) VALUES ('ill', 'ILL_PARTNER_REQ', '', 'ILL request to partners', 0, "Interlibrary loan request to partners", "Dear Sir/Madam,\n\nWe would like to request an interlibrary loan for a title matching the following description:\n\n[% ill_full_metadata %]\n\nPlease let us know if you are able to supply this to us.\n\nKind Regards\n\n[% branch.branchname %]\n[% branch.branchaddress1 %]\n[% branch.branchaddress2 %]\n[% branch.branchaddress3 %]\n[% branch.branchcity %]\n[% branch.branchstate %]\n[% branch.branchzip %]\n[% branch.branchphone %]\n[% branch.branchillemail %]\n[% branch.branchemail %]", 'sms', 'default'); | );
23327 # Add patron messaging preferences
23328 $dbh->do( q| INSERT IGNORE INTO message_attributes (message_name, takes_days) VALUES ('Ill_ready', 0); | );
23329 my $ready_id = $dbh->last_insert_id(undef, undef, 'message_attributes', undef);
23330 if (defined $ready_id) {
23331 $dbh->do( qq(INSERT IGNORE INTO message_transports (message_attribute_id, message_transport_type, is_digest, letter_module, letter_code) VALUES ($ready_id, 'email', 0, 'ill', 'ILL_PICKUP_READY');) );
23332 $dbh->do( qq(INSERT IGNORE INTO message_transports (message_attribute_id, message_transport_type, is_digest, letter_module, letter_code) VALUES ($ready_id, 'sms', 0, 'ill', 'ILL_PICKUP_READY');) );
23333 $dbh->do( qq(INSERT IGNORE INTO message_transports (message_attribute_id, message_transport_type, is_digest, letter_module, letter_code) VALUES ($ready_id, 'phone', 0, 'ill', 'ILL_PICKUP_READY');) );
23335 $dbh->do( q| INSERT IGNORE INTO message_attributes (message_name, takes_days) VALUES ('Ill_unavailable', 0); | );
23336 my $unavail_id = $dbh->last_insert_id(undef, undef, 'message_attributes', undef);
23337 if (defined $unavail_id) {
23338 $dbh->do( qq(INSERT IGNORE INTO message_transports (message_attribute_id, message_transport_type, is_digest, letter_module, letter_code) VALUES ($unavail_id, 'email', 0, 'ill', 'ILL_REQUEST_UNAVAIL');) );
23339 $dbh->do( qq(INSERT IGNORE INTO message_transports (message_attribute_id, message_transport_type, is_digest, letter_module, letter_code) VALUES ($unavail_id, 'sms', 0, 'ill', 'ILL_REQUEST_UNAVAIL');) );
23340 $dbh->do( qq(INSERT IGNORE INTO message_transports (message_attribute_id, message_transport_type, is_digest, letter_module, letter_code) VALUES ($unavail_id, 'phone', 0, 'ill', 'ILL_REQUEST_UNAVAIL');) );
23343 NewVersion( $DBversion, 22818, "Add ILL notices" );
23346 $DBversion = '20.06.00.067';
23347 if( CheckVersion( $DBversion ) ) {
23349 INSERT IGNORE INTO systempreferences ( `variable`, `value`, `options`, `explanation`, `type` ) VALUES
23350 ('OPACHoldsHistory','0','','If ON, enables display of Patron Holds History in OPAC','YesNo')
23353 NewVersion( $DBversion, 20936, "Add new system preference OPACHoldsHistory");
23356 $DBversion = '20.06.00.068';
23357 if( CheckVersion( $DBversion ) ) {
23358 if( !TableExists( 'import_batch_profiles' ) ) {
23360 CREATE TABLE `import_batch_profiles` ( -- profile for batches of marc records to be imported
23361 `id` int(11) NOT NULL auto_increment, -- unique identifier and primary key
23362 `name` varchar(100) NOT NULL, -- name of this profile
23363 `matcher_id` int(11) default NULL, -- the id of the match rule used (matchpoints.matcher_id)
23364 `template_id` int(11) default NULL, -- the id of the marc modification template
23365 `overlay_action` varchar(50) default NULL, -- how to handle duplicate records
23366 `nomatch_action` varchar(50) default NULL, -- how to handle records where no match is found
23367 `item_action` varchar(50) default NULL, -- what to do with item records
23368 `parse_items` tinyint(1) default NULL, -- should items be parsed
23369 `record_type` varchar(50) default NULL, -- type of record in the batch
23370 `encoding` varchar(50) default NULL, -- file encoding
23371 `format` varchar(50) default NULL, -- marc format
23372 `comments` LONGTEXT, -- any comments added when the file was uploaded
23373 PRIMARY KEY (`id`),
23374 UNIQUE KEY `u_import_batch_profiles__name` (`name`)
23375 ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci
23379 if(!column_exists('import_batches', 'profile_id')) {
23381 ALTER TABLE import_batches ADD COLUMN `profile_id` int(11) default NULL AFTER comments
23385 ALTER TABLE import_batches ADD CONSTRAINT `import_batches_ibfk_1` FOREIGN KEY (`profile_id`) REFERENCES `import_batch_profiles` (`id`) ON DELETE SET NULL ON UPDATE SET NULL
23389 NewVersion( $DBversion, 23019, "Add import_batch_profiles table and profile_id column in import_batches" );
23392 $DBversion = '20.06.00.069';
23393 if( CheckVersion( $DBversion ) ) {
23394 my ($count) = $dbh->selectrow_array(
23397 FROM circulation_rules
23398 WHERE rule_name = 'unseen_renewals_allowed'
23403 INSERT INTO circulation_rules (rule_name, rule_value)
23404 VALUES ('unseen_renewals_allowed', '')
23408 if( !column_exists( 'issues', 'unseen_renewals' ) ) {
23409 $dbh->do( q| ALTER TABLE issues ADD unseen_renewals TINYINT(4) DEFAULT 0 NOT NULL AFTER renewals | );
23411 if( !column_exists( 'old_issues', 'unseen_renewals' ) ) {
23412 $dbh->do( q| ALTER TABLE old_issues ADD unseen_renewals TINYINT(4) DEFAULT 0 NOT NULL AFTER renewals | );
23415 $dbh->do( q| INSERT IGNORE INTO systempreferences (variable, value, explanation, options, type) VALUES ('UnseenRenewals', '0', 'If enabled, a renewal can be recorded as "unseen" by the library and count against the borrowers unseen renewals limit', '', 'YesNo'); | );
23417 NewVersion( $DBversion, 24083, ["Add circulation_rules 'unseen_renewals_allowed'", "Add issues.unseen_renewals & old_issues.unseen_renewals)", "Add new system preference UnseenRenewals"] );
23420 $DBversion = '20.11.00.000';
23421 if( CheckVersion( $DBversion ) ) {
23422 NewVersion( $DBversion, "", "Koha 20.11.00 release" );
23425 $DBversion = '20.12.00.000';
23426 if( CheckVersion( $DBversion ) ) {
23427 NewVersion( $DBversion, "", "Sorry, this is my first life, I am still learning!" );
23430 $DBversion = '20.12.00.001';
23431 if( CheckVersion( $DBversion ) ) {
23433 INSERT IGNORE INTO systempreferences ( `variable`, `value`, `options`, `explanation`, `type` ) VALUES
23434 ('ElasticsearchCrossFields', '1', '', 'Enable "cross_fields" option for searches using Elastic search.', 'YesNo')
23436 NewVersion( $DBversion, 27252, "Add ElasticsearchCrossFields system preference");
23439 $DBversion = '20.12.00.002';
23440 if( CheckVersion( $DBversion ) ) {
23441 $dbh->do(q{UPDATE systempreferences SET `type` = 'Choice' WHERE `variable` = 'UsageStatsCountry'});
23442 NewVersion( $DBversion, 27351, "Set type for UsageStatsCountry to Choice");
23445 $DBversion = '20.12.00.003';
23446 if( CheckVersion( $DBversion ) ) {
23447 $dbh->do(q{UPDATE systempreferences SET `type` = 'Choice' WHERE `variable` = 'Mana'});
23448 NewVersion( $DBversion, 27349, "Update type for Mana system preference to Choice");
23451 $DBversion = '20.12.00.004';
23452 if( CheckVersion( $DBversion ) ) {
23453 $dbh->do(q{UPDATE systempreferences set variable="TaxRates" WHERE variable="gist"});
23454 NewVersion( $DBversion, 27485, "Rename system preference 'gist' to 'TaxRates'");
23457 $DBversion = '20.12.00.005';
23458 if( CheckVersion( $DBversion ) ) {
23459 $dbh->do(q{UPDATE systempreferences set variable="OPACLanguages" WHERE variable="opaclanguages"});
23460 NewVersion( $DBversion, 27491, "Rename system preference 'opaclanguages' to 'OPACLanguages'");
23463 $DBversion = '20.12.00.006';
23464 if( CheckVersion( $DBversion ) ) {
23465 $dbh->do(q{UPDATE systempreferences SET variable="OPACComments" WHERE variable="reviewson" });
23466 NewVersion( $DBversion, 27487, "Rename system preference 'reviewson' to 'OPACComments");
23469 $DBversion = '20.12.00.007';
23470 if( CheckVersion( $DBversion ) ) {
23471 $dbh->do(q{UPDATE systempreferences set variable="CSVDelimiter" WHERE variable="delimiter"});
23472 NewVersion( $DBversion, 27486, "Renaming system preference 'delimiter' to 'CSVDelimiter'");
23475 $DBversion = '20.12.00.008';
23476 if( CheckVersion( $DBversion ) ) {
23478 UPDATE systempreferences
23479 SET options = "claim_returned|batchmod|moredetail|cronjob|additem|pendingreserves|onpayment"
23480 WHERE variable = "MarkLostItemsAsReturned";
23482 NewVersion( $DBversion, 25552, "Add missing Claims Returned option to MarkLostItemsAsReturned");
23485 $DBversion = '20.12.00.009';
23486 if( CheckVersion( $DBversion ) ) {
23487 $dbh->do( "UPDATE systempreferences SET variable = 'UseICUStyleQUotes' WHERE variable = 'UseICU'" );
23488 NewVersion( $DBversion, 27581, "Rename system preference 'UseICU' to 'UseICUStyleQuotes'");
23491 $DBversion = '20.12.00.010';
23492 if( CheckVersion( $DBversion ) ) {
23494 DELETE FROM systempreferences WHERE variable="OpacGroupResults"
23497 NewVersion( $DBversion, 20410, "Remove OpacGroupResults");
23500 $DBversion = '20.12.00.011';
23501 if ( CheckVersion($DBversion) ) {
23503 INSERT IGNORE INTO systempreferences (variable,value,explanation,options,type)
23505 ('OPACShibOnly','0','If ON enables shibboleth only authentication for the opac','','YesNo'),
23506 ('staffShibOnly','0','If ON enables shibboleth only authentication for the staff client','','YesNo')
23508 NewVersion( $DBversion, 18506, "Add OPACShibOnly and staffShibOnly system preferences" );
23511 $DBversion = '20.12.00.012';
23512 if( CheckVersion( $DBversion ) ) {
23513 my $category_exists = $dbh->selectrow_array("SELECT count(category_name) FROM authorised_value_categories WHERE category_name='UPLOAD'");
23515 if( $category_exists ){
23516 $description = "The UPLOAD authorized value category exists. Update the 'is_system' value to 1.";
23517 $dbh->do( "UPDATE authorised_value_categories SET is_system = 1 WHERE category_name = 'UPLOAD'" );
23519 $description = "The UPLOAD authorized value category does not exist. Create it.";
23520 $dbh->do( "INSERT IGNORE INTO authorised_value_categories (category_name, is_system) VALUES ('UPLOAD', 1)" );
23523 NewVersion( $DBversion, 27598, ["Add UPLOAD as a built-in system authorized value category", $description] );
23526 $DBversion = '20.12.00.013';
23527 if( CheckVersion( $DBversion ) ) {
23529 INSERT IGNORE INTO systempreferences
23530 (variable, value, explanation, options, type) VALUES
23531 ('DefaultSaveRecordFileID', 'biblionumber', 'Defines whether the advanced cataloging editor will use the bibliographic record number or control number field to populate the name of the save file.', 'biblionumber|controlnumber', 'Choice')
23533 NewVersion( $DBversion, 24108, "Add system preference DefaultSaveRecordFileID");
23536 $DBversion = '20.12.00.014';
23537 if( CheckVersion( $DBversion ) ) {
23539 sanitize_zero_date('aqorders', 'datecancellationprinted');
23540 sanitize_zero_date('old_issues', 'returndate');
23542 NewVersion( $DBversion, 7806, "Remove remaining possible 0000-00-00 values");
23545 $DBversion = '20.12.00.015';
23546 if( CheckVersion( $DBversion ) ) {
23547 $dbh->do( "UPDATE search_marc_to_field SET sort = 1 WHERE sort IS NULL" );
23548 $dbh->do( "ALTER TABLE search_marc_to_field MODIFY COLUMN sort tinyint(1) DEFAULT 1 NOT NULL COMMENT 'Sort defaults to 1 (Yes) and creates sort fields in the index, 0 (no) will prevent this'" );
23549 NewVersion( $DBversion, 27316, "In Elastisearch mappings convert NULL (Undef) for sort to 1 (Yes)");
23552 $DBversion = '20.12.00.016';
23553 if( CheckVersion( $DBversion ) ) {
23555 unless ( column_exists( 'marc_subfield_structure', 'display_order' ) ) {
23557 ALTER TABLE marc_subfield_structure
23558 ADD COLUMN display_order INT(2) NOT NULL DEFAULT 0 AFTER maxlength
23562 unless ( column_exists( 'auth_subfield_structure', 'display_order' ) ) {
23564 ALTER TABLE auth_subfield_structure
23565 ADD COLUMN display_order INT(2) NOT NULL DEFAULT 0 AFTER defaultvalue
23569 NewVersion( $DBversion, 8976, "Allow setting a default sequence of subfields in cataloguing editor" );
23572 $DBversion = '20.12.00.017';
23573 if( CheckVersion( $DBversion ) ) {
23575 INSERT IGNORE INTO systempreferences (variable,value,explanation,options,type)
23576 VALUES ('CheckPrevCheckoutDelay','0', 'Maximum number of days that will trigger a warning if the patron has borrowed that item in the past when CheckPrevCheckout is enabled. Disabled if 0 or empty.', NULL, 'free')
23579 NewVersion( $DBversion, 26937, "Add CheckPrevCheckoutDelay system preference)" );
23582 $DBversion = '20.12.00.018';
23583 if( CheckVersion( $DBversion ) ) {
23587 LEFT JOIN issues ON issues.itemnumber=items.itemnumber
23588 SET items.onloan=CAST(issues.date_due AS DATE)
23589 WHERE items.onloan IS NULL AND issues.issue_id IS NOT NULL
23592 NewVersion( $DBversion, 27808, "Adjust items.onloan if needed" );
23595 $DBversion = '20.12.00.019';
23596 if( CheckVersion( $DBversion ) ) {
23598 if( !column_exists( 'branchtransfers', 'datecancelled' ) ) {
23600 ALTER TABLE `branchtransfers`
23601 ADD COLUMN `datecancelled` datetime default NULL AFTER `datearrived`
23605 if( !column_exists( 'branchtransfers', 'cancellation_reason' ) ) {
23607 ALTER TABLE `branchtransfers`
23608 ADD COLUMN `cancellation_reason` ENUM('Manual', 'StockrotationAdvance', 'StockrotationRepatriation', 'ReturnToHome', 'ReturnToHolding', 'RotatingCollection', 'Reserve', 'LostReserve', 'CancelReserve') DEFAULT NULL AFTER `reason`
23612 NewVersion( $DBversion, 26057, "Add datecancelled field to branchtransfers");
23615 $DBversion = '20.12.00.020';
23616 if ( CheckVersion($DBversion) ) {
23618 # Update daterequested from datesent for stockrotation
23620 UPDATE `branchtransfers`
23622 `daterequested` = `datesent`,
23624 WHERE `reason` LIKE 'Stockrotation%'
23625 AND `datearrived` IS NULL
23628 NewVersion( $DBversion, 24446, "Update stockrotation 'daterequested' field in transfers table" );
23631 $DBversion = '20.12.00.021';
23632 if( CheckVersion( $DBversion ) ) {
23634 UPDATE systempreferences SET type="Free" WHERE variable="OverDriveClientSecret" OR variable="RecordedBooksClientSecret"
23637 UPDATE systempreferences SET type="integer" WHERE variable="UsageStats"
23640 UPDATE systempreferences
23642 WHERE ( ( type = "YesNo" AND ( value NOT IN ( "1", "0" ) OR value IS NULL ) ) )
23645 NewVersion( $DBversion, 22824, "Update syspref values for YesNo");
23648 $DBversion = '20.12.00.022';
23649 if( CheckVersion( $DBversion ) ) {
23650 $dbh->do(q{ INSERT IGNORE INTO letter (module, code, branchcode, name, is_html, title, content, message_transport_type) VALUES
23651 ('circulation','CHECKINSLIP','','Checkin slip',1,'Checkin slip',
23652 "<h3>[% branch.branchname %]</h3>
23653 Checked in items for [% borrower.title %] [% borrower.firstname %] [% borrower.initials %] [% borrower.surname %] <br />
23654 ([% borrower.cardnumber %]) <br />
23656 [% today | $KohaDates %]<br />
23658 <h4>Checked in today</h4>
23659 [% FOREACH checkin IN old_checkouts %]
23660 [% SET item = checkin.item %]
23662 [% item.biblio.title %] <br />
23663 Barcode: [% item.barcode %] <br />
23669 NewVersion( $DBversion, 12224, "Add CHECKINSLIP notice" );
23672 $DBversion = '20.12.00.023';
23673 if( CheckVersion( $DBversion ) ) {
23676 UPDATE systempreferences
23677 SET value=REPLACE(value, '|', ',')
23678 WHERE variable="OPACHoldsIfAvailableAtPickupExceptions"
23679 OR variable="BatchCheckoutsValidCategories"
23681 NewVersion( $DBversion, 27652, "Separate values for OPACHoldsIfAvailableAtPickupExceptions and BatchCheckoutsValidCategories with comma");
23684 $DBversion = '20.12.00.024';
23685 if( CheckVersion( $DBversion ) ) {
23688 INSERT IGNORE INTO letter (module, code, name, title, content, message_transport_type) VALUES ('circulation', 'AUTO_RENEWALS_DGST', 'Notification on auto renewals', 'Auto renewals (Digest)',
23689 "Dear [% borrower.firstname %] [% borrower.surname %],
23691 There were [% error %] items that were not renewed.
23694 There were [% success %] items that were renewed.
23696 [% FOREACH checkout IN checkouts %]
23697 [% checkout.item.biblio.title %] : [% checkout.item.barcode %]
23698 [% IF !checkout.auto_renew_error %]
23699 was renewed until [% checkout.date_due | $KohaDates as_due_date => 1%]
23700 [% ELSIF checkout.auto_renew_error == 'too_many' %]
23701 You have reached the maximum number of renewals possible.
23702 [% ELSIF checkout.auto_renew_error == 'on_reserve' %]
23703 This item is on hold for another patron.
23704 [% ELSIF checkout.auto_renew_error == 'restriction' %]
23705 You are currently restricted.
23706 [% ELSIF checkout.auto_renew_error == 'overdue' %]
23707 You have overdue items.
23708 [% ELSIF checkout.auto_renew_error == 'auto_too_late' %]
23709 It's too late to renew this item.
23710 [% ELSIF checkout.auto_renew_error == 'auto_too_much_oweing' %]
23711 Your total unpaid fines are too high.
23712 [% ELSIF checkout.auto_renew_error == 'too_unseen' %]
23713 This item must be renewed at the library.
23720 INSERT IGNORE INTO `message_attributes`
23721 (`message_attribute_id`, message_name, `takes_days`)
23722 VALUES (9, 'Auto_Renewals', 0)
23726 INSERT IGNORE INTO `message_transports`
23727 (`message_attribute_id`, `message_transport_type`, `is_digest`, `letter_module`, `letter_code`)
23728 VALUES (9, 'email', 0, 'circulation', 'AUTO_RENEWALS'),
23729 (9, 'sms', 0, 'circulation', 'AUTO_RENEWALS'),
23730 (9, 'email', 1, 'circulation', 'AUTO_RENEWALS_DGST'),
23731 (9, 'sms', 1, 'circulation', 'AUTO_RENEWALS_DGST')
23735 INSERT IGNORE INTO systempreferences (variable,value,explanation,options,type)
23736 VALUES ('AutoRenewalNotices','cron','cron|preferences|never','How should Koha determine whether to end autorenewal notices','Choice')
23739 NewVersion( $DBversion, 18532, 'Messaging preferences for auto renewals' );
23742 $DBversion = '20.12.00.025';
23743 if( CheckVersion( $DBversion ) ) {
23746 INSERT IGNORE INTO systempreferences (variable,value,options,explanation,type)
23747 VALUES ('ChargeFinesOnClosedDays', '0', NULL, 'Charge fines on days the library is closed.', 'YesNo')
23750 NewVersion( $DBversion, 27835, "Add new system preference ChargeFinesOnClosedDays");
23753 $DBversion = '20.12.00.026';
23754 if( CheckVersion( $DBversion ) ) {
23756 $dbh->do(q{INSERT IGNORE INTO systempreferences (variable,value,options,explanation,type) VALUES ('DefaultHoldExpirationdate','0','','Automatically set default expiration date for holds','YesNo') });
23757 $dbh->do(q{INSERT IGNORE INTO systempreferences (variable,value,options,explanation,type) VALUES ('DefaultHoldExpirationdatePeriod','0','','How long into the future default expiration date is set to be.','integer') });
23758 $dbh->do(q{INSERT IGNORE INTO systempreferences (variable,value,options,explanation,type) VALUES ('DefaultHoldExpirationdateUnitOfTime','days','days|months|years','Which unit of time is used when setting the default expiration date. ','choice') });
23760 NewVersion( $DBversion, 26498, "Bug 26498 - Add option to set a default expire date for holds at reservation time");
23763 $DBversion = '20.12.00.027';
23764 if( CheckVersion( $DBversion ) ) {
23767 UPDATE circulation_rules
23770 WHEN rule_value='0' THEN 'not_allowed'
23771 WHEN rule_value='1' THEN 'from_home_library'
23772 WHEN rule_value='2' THEN 'from_any_library'
23773 WHEN rule_value='3' THEN 'from_local_hold_group'
23775 WHERE rule_name='holdallowed' AND rule_value >= 0 AND rule_value <= 3;
23778 NewVersion( $DBversion, 27069, "Change holdallowed values from numbers to strings");
23781 $DBversion = '20.12.00.028';
23782 if ( CheckVersion($DBversion) ) {
23784 if ( !column_exists( 'letter', 'id' ) ) {
23786 ALTER TABLE letter DROP PRIMARY KEY
23789 ALTER TABLE letter ADD COLUMN `id` int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY FIRST
23792 ALTER TABLE letter ADD UNIQUE KEY letter_uniq_1 (`module`,`code`,`branchcode`,`message_transport_type`,`lang`)
23797 INSERT IGNORE INTO systempreferences (variable, value, explanation, options, type)
23798 VALUES ('NoticesLog','0',NULL,'If enabled, log changes to notice templates','YesNo')
23801 NewVersion( $DBversion, 14233, "Add id field to letter table" );
23804 $DBversion = '20.12.00.029';
23805 if( CheckVersion( $DBversion ) ) {
23806 $dbh->do("ALTER TABLE problem_reports MODIFY content TEXT NOT NULL");
23808 NewVersion( $DBversion, 27726, "Increase field size for problem_reports.content");
23811 $DBversion = '20.12.00.030';
23812 if( CheckVersion( $DBversion ) ) {
23814 INSERT IGNORE INTO systempreferences ( `variable`, `value`, `options`, `explanation`, `type` )
23815 VALUES ('LockExpiredDelay','','','Delay for locking expired patrons (empty means no locking)','Integer')
23818 NewVersion( $DBversion, 21549, "Add new system preference LockExpiredDelay");
23821 $DBversion = '20.12.00.031';
23822 if( CheckVersion( $DBversion ) ) {
23824 INSERT IGNORE INTO systempreferences (variable, value, explanation, options, type)
23825 VALUES ('Reference_NFL_Statuses','1|2',NULL,'Contains not for loan statuses considered as available for reference','Free')
23828 NewVersion( $DBversion, 21260, "Add new system preference Reference_NFL_Statuses");
23831 $DBversion = '20.12.00.032';
23832 if( CheckVersion( $DBversion ) ) {
23834 INSERT IGNORE INTO letter
23835 (module,code,branchcode,name,is_html,title,content,message_transport_type,lang)
23836 VALUES ('reserves','HOLD_REMINDER','','Waiting hold reminder',0,'You have waiting holds.','Dear [% borrower.firstname %] [% borrower.surname %],\r\n\r\nThe following holds are waiting at [% branch.branchname %]:\r\n\\r\n[% FOREACH hold IN holds %]\r\n [% hold.biblio.title %] : waiting since [% hold.waitingdate | $KohaDates %]\r\n[% END %]','email','default')
23839 NewVersion( $DBversion, 15986, "Add sample HOLD_REMINDER notice");
23842 $DBversion = '20.12.00.033';
23843 if( CheckVersion( $DBversion ) ) {
23844 my $debar = $dbh->selectall_arrayref(q|
23845 SELECT d.borrowernumber, GROUP_CONCAT(comment SEPARATOR '\n') AS comment
23846 FROM borrower_debarments d
23847 LEFT JOIN borrowers b ON b.borrowernumber=d.borrowernumber
23848 WHERE ( b.debarredcomment IS NULL OR b.debarredcomment = "" ) AND ( expiration > CURRENT_DATE() OR expiration IS NULL )
23849 GROUP BY d.borrowernumber
23850 |, { Slice => {} });
23853 my $update_sth = $dbh->prepare(q|
23855 SET debarredcomment=?
23856 WHERE borrowernumber=?
23858 for my $d ( @$debar ) {
23859 $update_sth->execute($d->{comment}, $d->{borrowernumber});
23862 NewVersion( $DBversion, 26940, "Put in sync borrowers.debarredcomment with comments from borrower_debarments");
23865 $DBversion = '20.12.00.034';
23866 if( CheckVersion( $DBversion ) ) {
23869 INSERT IGNORE INTO systempreferences (variable, value, options, explanation, type)
23870 VALUES ('casServerVersion', '2', '2|3', 'Version of the CAS server Koha will connect to.', 'Choice');
23873 NewVersion( $DBversion, 20854, "Add new system preference casServerVersion");
23876 $DBversion = '20.12.00.035';
23877 if( CheckVersion( $DBversion ) ) {
23878 if( !column_exists( 'itemtypes', 'automatic_checkin' ) ) {
23880 ALTER TABLE itemtypes
23881 ADD COLUMN `automatic_checkin` tinyint(1) NOT NULL DEFAULT 0 COMMENT 'If automatic checkin is enabled for items of this type' AFTER `searchcategory`
23885 NewVersion( $DBversion, 23207, "Add automatic_checkin to itemtypes table");
23888 $DBversion = '20.12.00.036';
23889 if( CheckVersion( $DBversion ) ) {
23891 ALTER TABLE club_holds_to_patron_holds
23892 MODIFY COLUMN error_code
23893 ENUM ( 'damaged', 'ageRestricted', 'itemAlreadyOnHold',
23894 'tooManyHoldsForThisRecord', 'tooManyReservesToday',
23895 'tooManyReserves', 'notReservable', 'cannotReserveFromOtherBranches',
23896 'libraryNotFound', 'libraryNotPickupLocation', 'cannotBeTransferred',
23897 'noReservesAllowed'
23901 NewVersion( $DBversion, 16787, "Add noReservesAllowed to club holds error codes");
23904 $DBversion = '20.12.00.037';
23905 if( CheckVersion( $DBversion ) ) {
23907 INSERT IGNORE INTO systempreferences (variable, value, explanation, options, type)
23908 VALUES ('AcquisitionLog', '0', 'If enabled, log acquisition activity', '', 'YesNo');
23911 NewVersion( $DBversion, 23971, "Add new system preference AcquisitionLog");
23914 $DBversion = '20.12.00.038';
23915 if( CheckVersion( $DBversion ) ) {
23917 # Add 'ItemLost' to reserves cancellation_reason enum
23923 `cancellation_reason` enum(
23925 'StockrotationAdvance',
23926 'StockrotationRepatriation',
23929 'RotatingCollection',
23939 NewVersion( $DBversion, 27281, "Add 'ItemLost' to branchtransfers.cancellation_reason enum");
23942 $DBversion = '20.12.00.039';
23943 if( CheckVersion( $DBversion ) ) {
23952 'StockrotationAdvance',
23953 'StockrotationRepatriation',
23956 'RotatingCollection',
23960 'TransferCancellation'
23966 NewVersion( $DBversion, 12362, "Add 'TransferCancellation' to branchtransfers.reason enum");
23969 $DBversion = '20.12.00.040';
23970 if( CheckVersion( $DBversion ) ) {
23973 INSERT IGNORE INTO account_debit_types (
23982 ('VOID', 'Credit has been voided', 0, 0, NULL, 1)
23987 INSERT IGNORE INTO account_offset_types ( type ) VALUES ('VOID');
23990 NewVersion( $DBversion, 27971, "Add VOID debit type code");
23993 $DBversion = '20.12.00.041';
23994 if ( CheckVersion($DBversion) ) {
23996 # ACCOUNT_CREDIT UPDATES
23997 # backup existing notice to action_logs
23998 my $credit_arr = $dbh->selectall_arrayref(q{SELECT lang FROM letter WHERE code = 'ACCOUNT_CREDIT'}, { Slice => {} });
23999 my $c_sth = $dbh->prepare(q{
24000 INSERT INTO action_logs ( timestamp, module, action, object, info, interface )
24001 SELECT NOW(), 'NOTICES', 'UPGRADE', id, content, 'cli'
24003 WHERE lang = ? AND code = 'ACCOUNT_CREDIT'
24006 for my $c ( @{$credit_arr} ) {
24007 $c_sth->execute( $c->{lang} );
24010 # replace notice with default
24013 [% PROCESS 'accounts.inc' %]
24015 [% IF ( LibraryName ) %]
24017 <th colspan="4" class="centerednames">
24018 <h3>[% LibraryName | html %]</h3>
24023 <th colspan="4" class="centerednames">
24024 <h2><u>Fee receipt</u></h2>
24028 <th colspan="4" class="centerednames">
24029 <h2>[% Branches.GetName( credit.patron.branchcode ) | html %]</h2>
24034 Received with thanks from [% credit.patron.firstname | html %] [% credit.patron.surname | html %] <br />
24035 Card number: [% credit.patron.cardnumber | html %]<br />
24040 <th>Description of charges</th>
24045 <tr class="highlight">
24046 <td>[% credit.date | $KohaDates %]</td>
24048 [% PROCESS account_type_description account=credit %]
24049 [%- IF credit.description %], [% credit.description | html %][% END %]
24051 <td>[% credit.note | html %]</td>
24052 <td class="credit">[% credit.amount | $Price %]</td>
24057 <td colspan="3">Total outstanding dues as on date: </td>
24058 [% IF ( credit.patron.account.balance >= 0 ) %]<td class="credit">[% ELSE %]<td class="debit">[% END %][% credit.patron.account.balance | $Price %]</td>
24064 $dbh->do(q{UPDATE letter SET content = ?, is_html = 1 WHERE code = 'ACCOUNT_CREDIT'}, undef, $c_notice);
24066 # ACCOUNT_DEBIT UPDATES
24067 # backup existing notice to action_logs
24068 my $debit_arr = $dbh->selectall_arrayref(
24069 "SELECT lang FROM letter WHERE code = 'ACCOUNT_DEBIT'", { Slice => {} });
24070 my $d_sth = $dbh->prepare(q{
24071 INSERT INTO action_logs ( timestamp, module, action, object, info, interface )
24072 SELECT NOW(), 'NOTICES', 'UPGRADE', id, content, 'cli'
24074 WHERE lang = ? AND code = 'ACCOUNT_DEBIT'
24077 for my $d ( @{$debit_arr} ) {
24078 $d_sth->execute( $d->{lang} );
24081 # replace notice with default
24084 [% PROCESS 'accounts.inc' %]
24086 [% IF ( LibraryName ) %]
24088 <th colspan="5" class="centerednames">
24089 <h3>[% LibraryName | html %]</h3>
24095 <th colspan="5" class="centerednames">
24096 <h2><u>INVOICE</u></h2>
24100 <th colspan="5" class="centerednames">
24101 <h2>[% Branches.GetName( debit.patron.branchcode ) | html %]</h2>
24106 Bill to: [% debit.patron.firstname | html %] [% debit.patron.surname | html %] <br />
24107 Card number: [% debit.patron.cardnumber | html %]<br />
24112 <th>Description of charges</th>
24114 <th style="text-align:right;">Amount</th>
24115 <th style="text-align:right;">Amount outstanding</th>
24118 <tr class="highlight">
24119 <td>[% debit.date | $KohaDates%]</td>
24121 [% PROCESS account_type_description account=debit %]
24122 [%- IF debit.description %], [% debit.description | html %][% END %]
24124 <td>[% debit.note | html %]</td>
24125 <td class="debit">[% debit.amount | $Price %]</td>
24126 <td class="debit">[% debit.amountoutstanding | $Price %]</td>
24129 [% IF ( tendered ) %]
24131 <td colspan="3">Amount tendered: </td>
24132 <td>[% tendered | $Price %]</td>
24135 <td colspan="3">Change given: </td>
24136 <td>[% change | $Price %]</td>
24142 <td colspan="4">Total outstanding dues as on date: </td>
24143 [% IF ( debit.patron.account.balance <= 0 ) %]<td class="credit">[% ELSE %]<td class="debit">[% END %][% debit.patron.account.balance | $Price %]</td>
24148 $dbh->do(q{UPDATE letter SET content = ?, is_html = 1 WHERE code = 'ACCOUNT_DEBIT'}, undef, $d_notice);
24150 NewVersion( $DBversion, 26734, ["Update notices to use defaults", "WARNING - ACCOUNT_DEBIT and ACCOUNT_CREDIT slip templates have been replaced. Backups have been made to the action logs for your reference."] );
24153 $DBversion = '20.12.00.042';
24154 if( CheckVersion( $DBversion ) ) {
24155 unless( foreign_key_exists( 'collections_tracking', 'collectionst_ibfk_1' ) ) {
24157 DELETE FROM collections_tracking WHERE colId NOT IN ( SELECT colId FROM collections )
24160 ALTER TABLE collections_tracking
24161 ADD CONSTRAINT `collectionst_ibfk_1` FOREIGN KEY (`colId`) REFERENCES `collections` (`colId`) ON DELETE CASCADE ON UPDATE CASCADE
24165 NewVersion( $DBversion, 17202, "Add FK constraint for collection to collections_tracking");
24168 $DBversion = '20.12.00.043';
24169 if( CheckVersion( $DBversion ) ) {
24172 content = REPLACE(content, "The following item, [% biblio.title %], has correctly been renewed and is now due on [% checkout.date_due as_due_date => 1 %]" , "The following item, [% biblio.title %], has correctly been renewed and is now due on [% checkout.date_due | $KohaDates as_due_date => 1 %]")
24173 WHERE code = 'AUTO_RENEWALS';
24176 NewVersion( $DBversion, 28258, "Update AUTO_RENEWAL content");
24179 $DBversion = '20.12.00.044';
24180 if( CheckVersion( $DBversion ) ) {
24182 UPDATE language_subtag_registry SET description = 'Ukrainian' WHERE subtag='uk' and type='language' and description='Ukranian'
24185 UPDATE language_descriptions SET description = 'Ukrainian' WHERE subtag='uk' and type='language' and lang='en' and description='Ukranian'
24188 NewVersion( $DBversion, 28244, "Fix Ukrainian typo in English");
24191 $DBversion = '20.12.00.045';
24192 if( CheckVersion( $DBversion ) ) {
24194 INSERT IGNORE INTO systempreferences (variable, value, options, explanation, type) VALUES ('SearchLimitLibrary', 'homebranch', 'homebranch|holdingbranch|both', "When limiting search results with a library or library group, use the item's home library, or holding library, or both.", 'Choice')
24197 NewVersion( $DBversion, 21249, "Adding new system preference SearchLimitLibrary" );
24200 $DBversion = '20.12.00.046';
24201 if( CheckVersion( $DBversion ) ) {
24202 unless ( column_exists('message_queue', 'delivery_note') ) {
24204 ALTER TABLE message_queue ADD delivery_note mediumtext AFTER content_type
24208 NewVersion( $DBversion, 14723, "Additional delivery notes to messages" );
24211 $DBversion = '20.12.00.047';
24212 if( CheckVersion( $DBversion ) ) {
24215 DELETE FROM systempreferences
24217 ('EnablePayPalOpacPayments',
24218 'PayPalChargeDescription',
24221 'PayPalSandboxMode',
24226 NewVersion( $DBversion, 23215, "Remove core PayPal support in favor of the use of plugins" );
24229 $DBversion = '20.12.00.048';
24230 if( CheckVersion( $DBversion ) ) {
24232 # This DB upgrade has been commented out because it removes
24233 # actively used data, the relationship columns will be added back
24235 # if ( column_exists( 'borrowers', 'relationship' ) ) {
24237 # ALTER TABLE borrowers DROP COLUMN relationship
24241 # if ( column_exists( 'deletedborrowers', 'relationship' ) ) {
24243 # ALTER TABLE deletedborrowers DROP COLUMN relationship
24247 # if ( column_exists( 'borrower_modifications', 'relationship' ) ) {
24249 # ALTER TABLE borrower_modifications DROP COLUMN relationship
24253 NewVersion( $DBversion, 26995, "[SKIP] Drop column relationship from borrower tables [not executed]");
24256 $DBversion = '20.12.00.049';
24257 if ( CheckVersion($DBversion) ) {
24259 UPDATE action_logs SET module = 'CLAIMS'
24260 WHERE module = 'ACQUISITIONS' AND ( action = 'SERIAL CLAIM' OR action = 'ACQUISITION CLAIM')
24264 UPDATE systempreferences SET variable = 'ClaimsLog' WHERE variable = 'LetterLog';
24267 NewVersion( $DBversion, 28108, "Move action logs 'SERIAL CLAIM' and 'ACQUISITION CLAIM' to a new 'CLAIMS' module" );
24270 $DBversion = '20.12.00.050';
24271 if ( CheckVersion($DBversion) ) {
24273 INSERT IGNORE INTO systempreferences (variable, value, options, explanation, type) VALUES
24274 ('OpacHiddenItemsHidesRecord','1','','Hide bibliographic record when all its items are hidden because of OpacHiddenItems','YesNo')
24277 NewVersion( $DBversion, 28108, "Add new systempreference OpacHiddenItemsHidesRecord" );
24280 $DBversion = '21.05.00.000';
24281 if( CheckVersion( $DBversion ) ) {
24282 NewVersion( $DBversion, "", "Koha 21.05.00 release" );
24285 unless ( $ENV{HTTP_HOST} ) { # Is that correct?
24286 my $files = get_db_entries;
24287 my $report = update( $files, { force => $force } );
24289 for my $s ( @{ $report->{success} } ) {
24290 say Encode::encode_utf8(join "\n", @{$s->{output}});
24292 for my $e ( @{ $report->{error} } ) {
24293 say Encode::encode_utf8(join "\n", @{$e->{output}});
24294 say Encode::encode_utf8("ERROR - " . $e->{error});
24297 my $atomic_update_files = get_atomic_updates;
24298 $report = run_atomic_updates($atomic_update_files);
24299 for my $s ( @{ $report->{success} } ) {
24300 say Encode::encode_utf8(join "\n", @{$s->{output}});
24302 for my $e ( @{ $report->{error} } ) {
24303 say Encode::encode_utf8(join "\n", @{$e->{output}});
24304 say Encode::encode_utf8("ERROR - " . $e->{error});