Bug 25858: Use bitwise OR for setting a bit in borrowers.flag
[koha.git] / installer / data / mysql / updatedatabase.pl
blobabb403243c3590c740fb4e8ac13003b190fc148c
1 #!/usr/bin/perl
3 # Database Updater
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>.
23 # Bugs/ToDo:
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!
30 use Modern::Perl;
32 use feature 'say';
34 # CPAN modules
35 use DBI;
36 use Getopt::Long;
37 # Koha modules
38 use C4::Context;
39 use C4::Installer;
40 use Koha::Database;
41 use Koha;
42 use Koha::DateUtils;
44 use MARC::Record;
45 use MARC::File::XML ( BinaryEncoding => 'utf8' );
47 use File::Path qw[remove_tree]; # perl core module
48 use File::Slurp;
50 # FIXME - The user might be installing a new database, so can't rely
51 # on /etc/koha.conf anyway.
53 my $debug = 0;
55 my (
56 $sth, $sti,
57 $query,
58 %existingtables, # tables already in database
59 %types,
60 $table,
61 $column,
62 $type, $null, $key, $default, $extra,
63 $prefitem, # preference item in systempreferences table
66 my $schema = Koha::Database->new()->schema();
68 my $silent;
69 GetOptions(
70 's' =>\$silent
72 my $dbh = C4::Context->dbh;
73 $|=1; # flushes output
75 local $dbh->{RaiseError} = 0;
77 # Record the version we are coming from
79 my $original_version = C4::Context->preference("Version");
81 # Deal with virtualshelves
82 my $DBversion = "3.00.00.001";
83 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
84 # update virtualshelves table to
86 $dbh->do("ALTER TABLE `bookshelf` RENAME `virtualshelves`");
87 $dbh->do("ALTER TABLE `shelfcontents` RENAME `virtualshelfcontents`");
88 $dbh->do("ALTER TABLE `virtualshelfcontents` ADD `biblionumber` INT( 11 ) NOT NULL default '0' AFTER shelfnumber");
89 $dbh->do("UPDATE `virtualshelfcontents` SET biblionumber=(SELECT biblionumber FROM items WHERE items.itemnumber=virtualshelfcontents.itemnumber)");
90 # drop all foreign keys : otherwise, we can't drop itemnumber field.
91 DropAllForeignKeys('virtualshelfcontents');
92 $dbh->do("ALTER TABLE `virtualshelfcontents` ADD KEY biblionumber (biblionumber)");
93 # create the new foreign keys (on biblionumber)
94 $dbh->do("ALTER TABLE `virtualshelfcontents` ADD CONSTRAINT `virtualshelfcontents_ibfk_1` FOREIGN KEY (`shelfnumber`) REFERENCES `virtualshelves` (`shelfnumber`) ON DELETE CASCADE ON UPDATE CASCADE");
95 # re-create the foreign key on virtualshelf
96 $dbh->do("ALTER TABLE `virtualshelfcontents` ADD CONSTRAINT `shelfcontents_ibfk_2` FOREIGN KEY (`biblionumber`) REFERENCES `biblio` (`biblionumber`) ON DELETE CASCADE ON UPDATE CASCADE");
97 $dbh->do("ALTER TABLE `virtualshelfcontents` DROP `itemnumber`");
98 print "Upgrade to $DBversion done (virtualshelves)\n";
99 SetVersion ($DBversion);
103 $DBversion = "3.00.00.002";
104 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
105 $dbh->do("DROP TABLE sessions");
106 $dbh->do("CREATE TABLE `sessions` (
107 `id` varchar(32) NOT NULL,
108 `a_session` text NOT NULL,
109 UNIQUE KEY `id` (`id`)
110 ) ENGINE=InnoDB DEFAULT CHARSET=utf8;");
111 print "Upgrade to $DBversion done (sessions uses CGI::session, new table structure for sessions)\n";
112 SetVersion ($DBversion);
116 $DBversion = "3.00.00.003";
117 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
118 if (C4::Context->preference("opaclanguages") eq "fr") {
119 $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')");
120 } else {
121 $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')");
123 print "Upgrade to $DBversion done (adding ReservesNeedReturns systempref, in circulation)\n";
124 SetVersion ($DBversion);
128 $DBversion = "3.00.00.004";
129 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
130 $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')");
131 print "Upgrade to $DBversion done (adding DebugLevel systempref, in 'Admin' tab)\n";
132 SetVersion ($DBversion);
135 $DBversion = "3.00.00.005";
136 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
137 $dbh->do("CREATE TABLE `tags` (
138 `entry` varchar(255) NOT NULL default '',
139 `weight` bigint(20) NOT NULL default 0,
140 PRIMARY KEY (`entry`)
141 ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
143 $dbh->do("CREATE TABLE `nozebra` (
144 `server` varchar(20) NOT NULL,
145 `indexname` varchar(40) NOT NULL,
146 `value` varchar(250) NOT NULL,
147 `biblionumbers` longtext NOT NULL,
148 KEY `indexname` (`server`,`indexname`),
149 KEY `value` (`server`,`value`))
150 ENGINE=InnoDB DEFAULT CHARSET=utf8;
152 print "Upgrade to $DBversion done (adding tags and nozebra tables )\n";
153 SetVersion ($DBversion);
156 $DBversion = "3.00.00.006";
157 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
158 $dbh->do("UPDATE issues SET issuedate=timestamp WHERE issuedate='0000-00-00'");
159 print "Upgrade to $DBversion done (filled issues.issuedate with timestamp)\n";
160 SetVersion ($DBversion);
163 $DBversion = "3.00.00.007";
164 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
165 $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')");
166 print "Upgrade to $DBversion done (set SessionStorage variable)\n";
167 SetVersion ($DBversion);
170 $DBversion = "3.00.00.008";
171 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
172 $dbh->do("ALTER TABLE `biblio` ADD `datecreated` DATE NOT NULL AFTER `timestamp` ;");
173 $dbh->do("UPDATE biblio SET datecreated=timestamp");
174 print "Upgrade to $DBversion done (biblio creation date)\n";
175 SetVersion ($DBversion);
178 $DBversion = "3.00.00.009";
179 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
181 # Create backups of call number columns
182 # in case default migration needs to be customized
184 # UPGRADE NOTE: temp_upg_biblioitems_call_num should be dropped
185 # after call numbers have been transformed to the new structure
187 # Not bothering to do the same with deletedbiblioitems -- assume
188 # default is good enough.
189 $dbh->do("CREATE TABLE `temp_upg_biblioitems_call_num` AS
190 SELECT `biblioitemnumber`, `biblionumber`,
191 `classification`, `dewey`, `subclass`,
192 `lcsort`, `ccode`
193 FROM `biblioitems`");
195 # biblioitems changes
196 $dbh->do("ALTER TABLE `biblioitems` CHANGE COLUMN `volumeddesc` `volumedesc` TEXT,
197 ADD `cn_source` VARCHAR(10) DEFAULT NULL AFTER `ccode`,
198 ADD `cn_class` VARCHAR(30) DEFAULT NULL AFTER `cn_source`,
199 ADD `cn_item` VARCHAR(10) DEFAULT NULL AFTER `cn_class`,
200 ADD `cn_suffix` VARCHAR(10) DEFAULT NULL AFTER `cn_item`,
201 ADD `cn_sort` VARCHAR(30) DEFAULT NULL AFTER `cn_suffix`,
202 ADD `totalissues` INT(10) AFTER `cn_sort`");
204 # default mapping of call number columns:
205 # cn_class = concatentation of classification + dewey,
206 # trimmed to fit -- assumes that most users do not
207 # populate both classification and dewey in a single record
208 # cn_item = subclass
209 # cn_source = left null
210 # cn_sort = lcsort
212 # After upgrade, cn_sort will have to be set based on whatever
213 # default call number scheme user sets as a preference. Misc
214 # script will be added at some point to do that.
216 $dbh->do("UPDATE `biblioitems`
217 SET cn_class = SUBSTR(TRIM(CONCAT_WS(' ', `classification`, `dewey`)), 1, 30),
218 cn_item = subclass,
219 `cn_sort` = `lcsort`
222 # Now drop the old call number columns
223 $dbh->do("ALTER TABLE `biblioitems` DROP COLUMN `classification`,
224 DROP COLUMN `dewey`,
225 DROP COLUMN `subclass`,
226 DROP COLUMN `lcsort`,
227 DROP COLUMN `ccode`");
229 # deletedbiblio changes
230 $dbh->do("ALTER TABLE `deletedbiblio` ALTER COLUMN `frameworkcode` SET DEFAULT '',
231 DROP COLUMN `marc`,
232 ADD `datecreated` DATE NOT NULL AFTER `timestamp`");
233 $dbh->do("UPDATE deletedbiblio SET datecreated = timestamp");
235 # deletedbiblioitems changes
236 $dbh->do("ALTER TABLE `deletedbiblioitems`
237 MODIFY `publicationyear` TEXT,
238 CHANGE `volumeddesc` `volumedesc` TEXT,
239 MODIFY `collectiontitle` MEDIUMTEXT DEFAULT NULL AFTER `volumedesc`,
240 MODIFY `collectionissn` TEXT DEFAULT NULL AFTER `collectiontitle`,
241 MODIFY `collectionvolume` MEDIUMTEXT DEFAULT NULL AFTER `collectionissn`,
242 MODIFY `editionstatement` TEXT DEFAULT NULL AFTER `collectionvolume`,
243 MODIFY `editionresponsibility` TEXT DEFAULT NULL AFTER `editionstatement`,
244 MODIFY `place` VARCHAR(255) DEFAULT NULL AFTER `size`,
245 MODIFY `marc` LONGBLOB,
246 ADD `cn_source` VARCHAR(10) DEFAULT NULL AFTER `url`,
247 ADD `cn_class` VARCHAR(30) DEFAULT NULL AFTER `cn_source`,
248 ADD `cn_item` VARCHAR(10) DEFAULT NULL AFTER `cn_class`,
249 ADD `cn_suffix` VARCHAR(10) DEFAULT NULL AFTER `cn_item`,
250 ADD `cn_sort` VARCHAR(30) DEFAULT NULL AFTER `cn_suffix`,
251 ADD `totalissues` INT(10) AFTER `cn_sort`,
252 ADD `marcxml` LONGTEXT NOT NULL AFTER `totalissues`,
253 ADD KEY `isbn` (`isbn`),
254 ADD KEY `publishercode` (`publishercode`)
257 $dbh->do("UPDATE `deletedbiblioitems`
258 SET `cn_class` = SUBSTR(TRIM(CONCAT_WS(' ', `classification`, `dewey`)), 1, 30),
259 `cn_item` = `subclass`,
260 `cn_sort` = `lcsort`
262 $dbh->do("ALTER TABLE `deletedbiblioitems`
263 DROP COLUMN `classification`,
264 DROP COLUMN `dewey`,
265 DROP COLUMN `subclass`,
266 DROP COLUMN `lcsort`,
267 DROP COLUMN `ccode`
270 # deleteditems changes
271 $dbh->do("ALTER TABLE `deleteditems`
272 MODIFY `barcode` VARCHAR(20) DEFAULT NULL,
273 MODIFY `price` DECIMAL(8,2) DEFAULT NULL,
274 MODIFY `replacementprice` DECIMAL(8,2) DEFAULT NULL,
275 DROP `bulk`,
276 MODIFY `itemcallnumber` VARCHAR(30) DEFAULT NULL AFTER `wthdrawn`,
277 MODIFY `holdingbranch` VARCHAR(10) DEFAULT NULL,
278 DROP `interim`,
279 MODIFY `timestamp` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP AFTER `paidfor`,
280 DROP `cutterextra`,
281 ADD `cn_source` VARCHAR(10) DEFAULT NULL AFTER `onloan`,
282 ADD `cn_sort` VARCHAR(30) DEFAULT NULL AFTER `cn_source`,
283 ADD `ccode` VARCHAR(10) DEFAULT NULL AFTER `cn_sort`,
284 ADD `materials` VARCHAR(10) DEFAULT NULL AFTER `ccode`,
285 ADD `uri` VARCHAR(255) DEFAULT NULL AFTER `materials`,
286 MODIFY `marc` LONGBLOB AFTER `uri`,
287 DROP KEY `barcode`,
288 DROP KEY `itembarcodeidx`,
289 DROP KEY `itembinoidx`,
290 DROP KEY `itembibnoidx`,
291 ADD UNIQUE KEY `delitembarcodeidx` (`barcode`),
292 ADD KEY `delitembinoidx` (`biblioitemnumber`),
293 ADD KEY `delitembibnoidx` (`biblionumber`),
294 ADD KEY `delhomebranch` (`homebranch`),
295 ADD KEY `delholdingbranch` (`holdingbranch`)");
296 $dbh->do("UPDATE deleteditems SET `ccode` = `itype`");
297 $dbh->do("ALTER TABLE deleteditems DROP `itype`");
298 $dbh->do("UPDATE `deleteditems` SET `cn_sort` = `itemcallnumber`");
300 # items changes
301 $dbh->do("ALTER TABLE `items` ADD `cn_source` VARCHAR(10) DEFAULT NULL AFTER `onloan`,
302 ADD `cn_sort` VARCHAR(30) DEFAULT NULL AFTER `cn_source`,
303 ADD `ccode` VARCHAR(10) DEFAULT NULL AFTER `cn_sort`,
304 ADD `materials` VARCHAR(10) DEFAULT NULL AFTER `ccode`,
305 ADD `uri` VARCHAR(255) DEFAULT NULL AFTER `materials`
307 $dbh->do("ALTER TABLE `items`
308 DROP KEY `itembarcodeidx`,
309 ADD UNIQUE KEY `itembarcodeidx` (`barcode`)");
311 # map items.itype to items.ccode and
312 # set cn_sort to itemcallnumber -- as with biblioitems.cn_sort,
313 # will have to be subsequently updated per user's default
314 # classification scheme
315 $dbh->do("UPDATE `items` SET `cn_sort` = `itemcallnumber`,
316 `ccode` = `itype`");
318 $dbh->do("ALTER TABLE `items` DROP `cutterextra`,
319 DROP `itype`");
321 print "Upgrade to $DBversion done (major changes to biblio, biblioitems, items, and deleted* versions of same\n";
322 SetVersion ($DBversion);
325 $DBversion = "3.00.00.010";
326 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
327 $dbh->do("CREATE INDEX `userid` ON borrowers (`userid`) ");
328 print "Upgrade to $DBversion done (userid index added)\n";
329 SetVersion ($DBversion);
332 $DBversion = "3.00.00.011";
333 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
334 $dbh->do("ALTER TABLE `branchcategories` CHANGE `categorycode` `categorycode` varchar(10) ");
335 $dbh->do("ALTER TABLE `branchcategories` CHANGE `categoryname` `categoryname` varchar(32) ");
336 $dbh->do("ALTER TABLE `branchcategories` ADD COLUMN `categorytype` varchar(16) ");
337 $dbh->do("UPDATE `branchcategories` SET `categorytype` = 'properties'");
338 $dbh->do("ALTER TABLE `branchrelations` CHANGE `categorycode` `categorycode` varchar(10) ");
339 print "Upgrade to $DBversion done (added branchcategory type)\n";
340 SetVersion ($DBversion);
343 $DBversion = "3.00.00.012";
344 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
345 $dbh->do("CREATE TABLE `class_sort_rules` (
346 `class_sort_rule` varchar(10) NOT NULL default '',
347 `description` mediumtext,
348 `sort_routine` varchar(30) NOT NULL default '',
349 PRIMARY KEY (`class_sort_rule`),
350 UNIQUE KEY `class_sort_rule_idx` (`class_sort_rule`)
351 ) ENGINE=InnoDB DEFAULT CHARSET=utf8");
352 $dbh->do("CREATE TABLE `class_sources` (
353 `cn_source` varchar(10) NOT NULL default '',
354 `description` mediumtext,
355 `used` tinyint(4) NOT NULL default 0,
356 `class_sort_rule` varchar(10) NOT NULL default '',
357 PRIMARY KEY (`cn_source`),
358 UNIQUE KEY `cn_source_idx` (`cn_source`),
359 KEY `used_idx` (`used`),
360 CONSTRAINT `class_source_ibfk_1` FOREIGN KEY (`class_sort_rule`)
361 REFERENCES `class_sort_rules` (`class_sort_rule`)
362 ) ENGINE=InnoDB DEFAULT CHARSET=utf8");
363 $dbh->do("INSERT INTO `systempreferences` (variable,value,explanation,options,type)
364 VALUES('DefaultClassificationSource','ddc',
365 'Default classification scheme used by the collection. E.g., Dewey, LCC, etc.', NULL,'free')");
366 $dbh->do("INSERT INTO `class_sort_rules` (`class_sort_rule`, `description`, `sort_routine`) VALUES
367 ('dewey', 'Default filing rules for DDC', 'Dewey'),
368 ('lcc', 'Default filing rules for LCC', 'LCC'),
369 ('generic', 'Generic call number filing rules', 'Generic')");
370 $dbh->do("INSERT INTO `class_sources` (`cn_source`, `description`, `used`, `class_sort_rule`) VALUES
371 ('ddc', 'Dewey Decimal Classification', 1, 'dewey'),
372 ('lcc', 'Library of Congress Classification', 1, 'lcc'),
373 ('udc', 'Universal Decimal Classification', 0, 'generic'),
374 ('sudocs', 'SuDoc Classification (U.S. GPO)', 0, 'generic'),
375 ('z', 'Other/Generic Classification Scheme', 0, 'generic')");
376 print "Upgrade to $DBversion done (classification sources added)\n";
377 SetVersion ($DBversion);
380 $DBversion = "3.00.00.013";
381 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
382 $dbh->do("CREATE TABLE `import_batches` (
383 `import_batch_id` int(11) NOT NULL auto_increment,
384 `template_id` int(11) default NULL,
385 `branchcode` varchar(10) default NULL,
386 `num_biblios` int(11) NOT NULL default 0,
387 `num_items` int(11) NOT NULL default 0,
388 `upload_timestamp` timestamp NOT NULL default CURRENT_TIMESTAMP,
389 `overlay_action` enum('replace', 'create_new', 'use_template') NOT NULL default 'create_new',
390 `import_status` enum('staging', 'staged', 'importing', 'imported', 'reverting', 'reverted', 'cleaned') NOT NULL default 'staging',
391 `batch_type` enum('batch', 'z3950') NOT NULL default 'batch',
392 `file_name` varchar(100),
393 `comments` mediumtext,
394 PRIMARY KEY (`import_batch_id`),
395 KEY `branchcode` (`branchcode`)
396 ) ENGINE=InnoDB DEFAULT CHARSET=utf8");
397 $dbh->do("CREATE TABLE `import_records` (
398 `import_record_id` int(11) NOT NULL auto_increment,
399 `import_batch_id` int(11) NOT NULL,
400 `branchcode` varchar(10) default NULL,
401 `record_sequence` int(11) NOT NULL default 0,
402 `upload_timestamp` timestamp NOT NULL default CURRENT_TIMESTAMP,
403 `import_date` DATE default NULL,
404 `marc` longblob NOT NULL,
405 `marcxml` longtext NOT NULL,
406 `marcxml_old` longtext NOT NULL,
407 `record_type` enum('biblio', 'auth', 'holdings') NOT NULL default 'biblio',
408 `overlay_status` enum('no_match', 'auto_match', 'manual_match', 'match_applied') NOT NULL default 'no_match',
409 `status` enum('error', 'staged', 'imported', 'reverted', 'items_reverted') NOT NULL default 'staged',
410 `import_error` mediumtext,
411 `encoding` varchar(40) NOT NULL default '',
412 `z3950random` varchar(40) default NULL,
413 PRIMARY KEY (`import_record_id`),
414 CONSTRAINT `import_records_ifbk_1` FOREIGN KEY (`import_batch_id`)
415 REFERENCES `import_batches` (`import_batch_id`) ON DELETE CASCADE ON UPDATE CASCADE,
416 KEY `branchcode` (`branchcode`),
417 KEY `batch_sequence` (`import_batch_id`, `record_sequence`)
418 ) ENGINE=InnoDB DEFAULT CHARSET=utf8");
419 $dbh->do("CREATE TABLE `import_record_matches` (
420 `import_record_id` int(11) NOT NULL,
421 `candidate_match_id` int(11) NOT NULL,
422 `score` int(11) NOT NULL default 0,
423 CONSTRAINT `import_record_matches_ibfk_1` FOREIGN KEY (`import_record_id`)
424 REFERENCES `import_records` (`import_record_id`) ON DELETE CASCADE ON UPDATE CASCADE,
425 KEY `record_score` (`import_record_id`, `score`)
426 ) ENGINE=InnoDB DEFAULT CHARSET=utf8");
427 $dbh->do("CREATE TABLE `import_biblios` (
428 `import_record_id` int(11) NOT NULL,
429 `matched_biblionumber` int(11) default NULL,
430 `control_number` varchar(25) default NULL,
431 `original_source` varchar(25) default NULL,
432 `title` varchar(128) default NULL,
433 `author` varchar(80) default NULL,
434 `isbn` varchar(14) default NULL,
435 `issn` varchar(9) default NULL,
436 `has_items` tinyint(1) NOT NULL default 0,
437 CONSTRAINT `import_biblios_ibfk_1` FOREIGN KEY (`import_record_id`)
438 REFERENCES `import_records` (`import_record_id`) ON DELETE CASCADE ON UPDATE CASCADE,
439 KEY `matched_biblionumber` (`matched_biblionumber`),
440 KEY `title` (`title`),
441 KEY `isbn` (`isbn`)
442 ) ENGINE=InnoDB DEFAULT CHARSET=utf8");
443 $dbh->do("CREATE TABLE `import_items` (
444 `import_items_id` int(11) NOT NULL auto_increment,
445 `import_record_id` int(11) NOT NULL,
446 `itemnumber` int(11) default NULL,
447 `branchcode` varchar(10) default NULL,
448 `status` enum('error', 'staged', 'imported', 'reverted') NOT NULL default 'staged',
449 `marcxml` longtext NOT NULL,
450 `import_error` mediumtext,
451 PRIMARY KEY (`import_items_id`),
452 CONSTRAINT `import_items_ibfk_1` FOREIGN KEY (`import_record_id`)
453 REFERENCES `import_records` (`import_record_id`) ON DELETE CASCADE ON UPDATE CASCADE,
454 KEY `itemnumber` (`itemnumber`),
455 KEY `branchcode` (`branchcode`)
456 ) ENGINE=InnoDB DEFAULT CHARSET=utf8");
458 $dbh->do("INSERT INTO `import_batches`
459 (`overlay_action`, `import_status`, `batch_type`, `file_name`)
460 SELECT distinct 'create_new', 'staged', 'z3950', `file`
461 FROM `marc_breeding`");
463 $dbh->do("INSERT INTO `import_records`
464 (`import_batch_id`, `import_record_id`, `record_sequence`, `marc`, `record_type`, `status`,
465 `encoding`, `z3950random`, `marcxml`, `marcxml_old`)
466 SELECT `import_batch_id`, `id`, 1, `marc`, 'biblio', 'staged', `encoding`, `z3950random`, '', ''
467 FROM `marc_breeding`
468 JOIN `import_batches` ON (`file_name` = `file`)");
470 $dbh->do("INSERT INTO `import_biblios`
471 (`import_record_id`, `title`, `author`, `isbn`)
472 SELECT `import_record_id`, `title`, `author`, `isbn`
473 FROM `marc_breeding`
474 JOIN `import_records` ON (`import_record_id` = `id`)");
476 $dbh->do("UPDATE `import_batches`
477 SET `num_biblios` = (
478 SELECT COUNT(*)
479 FROM `import_records`
480 WHERE `import_batch_id` = `import_batches`.`import_batch_id`
481 )");
483 $dbh->do("DROP TABLE `marc_breeding`");
485 print "Upgrade to $DBversion done (import_batches et al. added)\n";
486 SetVersion ($DBversion);
489 $DBversion = "3.00.00.014";
490 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
491 $dbh->do("ALTER TABLE subscription ADD lastbranch VARCHAR(4)");
492 print "Upgrade to $DBversion done (userid index added)\n";
493 SetVersion ($DBversion);
496 $DBversion = "3.00.00.015";
497 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
498 $dbh->do("CREATE TABLE `saved_sql` (
499 `id` int(11) NOT NULL auto_increment,
500 `borrowernumber` int(11) default NULL,
501 `date_created` datetime default NULL,
502 `last_modified` datetime default NULL,
503 `savedsql` text,
504 `last_run` datetime default NULL,
505 `report_name` varchar(255) default NULL,
506 `type` varchar(255) default NULL,
507 `notes` text,
508 PRIMARY KEY (`id`),
509 KEY boridx (`borrowernumber`)
510 ) ENGINE=InnoDB DEFAULT CHARSET=utf8;");
511 $dbh->do("CREATE TABLE `saved_reports` (
512 `id` int(11) NOT NULL auto_increment,
513 `report_id` int(11) default NULL,
514 `report` longtext,
515 `date_run` datetime default NULL,
516 PRIMARY KEY (`id`)
517 ) ENGINE=InnoDB DEFAULT CHARSET=utf8;");
518 print "Upgrade to $DBversion done (saved_sql and saved_reports added)\n";
519 SetVersion ($DBversion);
522 $DBversion = "3.00.00.016";
523 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
524 $dbh->do(" CREATE TABLE reports_dictionary (
525 id int(11) NOT NULL auto_increment,
526 name varchar(255) default NULL,
527 description text,
528 date_created datetime default NULL,
529 date_modified datetime default NULL,
530 saved_sql text,
531 area int(11) default NULL,
532 PRIMARY KEY (id)
533 ) ENGINE=InnoDB DEFAULT CHARSET=utf8 ");
534 print "Upgrade to $DBversion done (reports_dictionary) added)\n";
535 SetVersion ($DBversion);
538 $DBversion = "3.00.00.017";
539 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
540 $dbh->do("ALTER TABLE action_logs DROP PRIMARY KEY");
541 $dbh->do("ALTER TABLE action_logs ADD KEY timestamp (timestamp,user)");
542 $dbh->do("ALTER TABLE action_logs ADD action_id INT(11) NOT NULL FIRST");
543 $dbh->do("UPDATE action_logs SET action_id = if (\@a, \@a:=\@a+1, \@a:=1)");
544 $dbh->do("ALTER TABLE action_logs MODIFY action_id INT(11) NOT NULL AUTO_INCREMENT PRIMARY KEY");
545 print "Upgrade to $DBversion done (added column to action_logs)\n";
546 SetVersion ($DBversion);
549 $DBversion = "3.00.00.018";
550 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
551 $dbh->do("ALTER TABLE `zebraqueue`
552 ADD `done` INT NOT NULL DEFAULT '0',
553 ADD `time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ;
555 print "Upgrade to $DBversion done (adding timestamp and done columns to zebraque table to improve problem tracking) added)\n";
556 SetVersion ($DBversion);
559 $DBversion = "3.00.00.019";
560 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
561 $dbh->do("ALTER TABLE biblio MODIFY biblionumber INT(11) NOT NULL AUTO_INCREMENT");
562 $dbh->do("ALTER TABLE biblioitems MODIFY biblioitemnumber INT(11) NOT NULL AUTO_INCREMENT");
563 $dbh->do("ALTER TABLE items MODIFY itemnumber INT(11) NOT NULL AUTO_INCREMENT");
564 print "Upgrade to $DBversion done (made bib/item PKs auto_increment)\n";
565 SetVersion ($DBversion);
568 $DBversion = "3.00.00.020";
569 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
570 $dbh->do("ALTER TABLE deleteditems
571 DROP KEY `delitembarcodeidx`,
572 ADD KEY `delitembarcodeidx` (`barcode`)");
573 print "Upgrade to $DBversion done (dropped uniqueness of key on deleteditems.barcode)\n";
574 SetVersion ($DBversion);
577 $DBversion = "3.00.00.021";
578 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
579 $dbh->do("ALTER TABLE items CHANGE homebranch homebranch VARCHAR(10)");
580 $dbh->do("ALTER TABLE deleteditems CHANGE homebranch homebranch VARCHAR(10)");
581 $dbh->do("ALTER TABLE statistics CHANGE branch branch VARCHAR(10)");
582 $dbh->do("ALTER TABLE subscription CHANGE lastbranch lastbranch VARCHAR(10)");
583 print "Upgrade to $DBversion done (extended missed branchcode columns to 10 chars)\n";
584 SetVersion ($DBversion);
587 $DBversion = "3.00.00.022";
588 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
589 $dbh->do("ALTER TABLE items
590 ADD `damaged` tinyint(1) default NULL AFTER notforloan");
591 $dbh->do("ALTER TABLE deleteditems
592 ADD `damaged` tinyint(1) default NULL AFTER notforloan");
593 print "Upgrade to $DBversion done (adding damaged column to items table)\n";
594 SetVersion ($DBversion);
597 $DBversion = "3.00.00.023";
598 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
599 $dbh->do("INSERT INTO `systempreferences` (variable,value,options,explanation,type)
600 VALUES ('yuipath','http://yui.yahooapis.com/2.3.1/build','Insert the path to YUI libraries','','free')");
601 print "Upgrade to $DBversion done (adding new system preference for controlling YUI path)\n";
602 SetVersion ($DBversion);
604 $DBversion = "3.00.00.024";
605 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
606 $dbh->do("ALTER TABLE biblioitems CHANGE itemtype itemtype VARCHAR(10)");
607 print "Upgrade to $DBversion done (changing itemtype to (10))\n";
608 SetVersion ($DBversion);
611 $DBversion = "3.00.00.025";
612 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
613 $dbh->do("ALTER TABLE items ADD COLUMN itype VARCHAR(10)");
614 $dbh->do("ALTER TABLE deleteditems ADD COLUMN itype VARCHAR(10) AFTER uri");
615 if(C4::Context->preference('item-level_itypes')){
616 $dbh->do('update items,biblioitems set items.itype=biblioitems.itemtype where items.biblionumber=biblioitems.biblionumber and itype is null');
618 print "Upgrade to $DBversion done (reintroduce items.itype - fill from itemtype)\n ";
619 SetVersion ($DBversion);
622 $DBversion = "3.00.00.026";
623 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
624 $dbh->do("INSERT INTO `systempreferences` (variable,value,options,explanation,type)
625 VALUES ('HomeOrHoldingBranch','homebranch','homebranch|holdingbranch','With independent branches turned on this decides whether to check the items holdingbranch or homebranch at circulatilon','choice')");
626 print "Upgrade to $DBversion done (adding new system preference for choosing whether homebranch or holdingbranch is checked in circulation)\n";
627 SetVersion ($DBversion);
630 $DBversion = "3.00.00.027";
631 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
632 $dbh->do("CREATE TABLE `marc_matchers` (
633 `matcher_id` int(11) NOT NULL auto_increment,
634 `code` varchar(10) NOT NULL default '',
635 `description` varchar(255) NOT NULL default '',
636 `record_type` varchar(10) NOT NULL default 'biblio',
637 `threshold` int(11) NOT NULL default 0,
638 PRIMARY KEY (`matcher_id`),
639 KEY `code` (`code`),
640 KEY `record_type` (`record_type`)
641 ) ENGINE=InnoDB DEFAULT CHARSET=utf8");
642 $dbh->do("CREATE TABLE `matchpoints` (
643 `matcher_id` int(11) NOT NULL,
644 `matchpoint_id` int(11) NOT NULL auto_increment,
645 `search_index` varchar(30) NOT NULL default '',
646 `score` int(11) NOT NULL default 0,
647 PRIMARY KEY (`matchpoint_id`),
648 CONSTRAINT `matchpoints_ifbk_1` FOREIGN KEY (`matcher_id`)
649 REFERENCES `marc_matchers` (`matcher_id`) ON DELETE CASCADE ON UPDATE CASCADE
650 ) ENGINE=InnoDB DEFAULT CHARSET=utf8");
651 $dbh->do("CREATE TABLE `matchpoint_components` (
652 `matchpoint_id` int(11) NOT NULL,
653 `matchpoint_component_id` int(11) NOT NULL auto_increment,
654 sequence int(11) NOT NULL default 0,
655 tag varchar(3) NOT NULL default '',
656 subfields varchar(40) NOT NULL default '',
657 offset int(4) NOT NULL default 0,
658 length int(4) NOT NULL default 0,
659 PRIMARY KEY (`matchpoint_component_id`),
660 KEY `by_sequence` (`matchpoint_id`, `sequence`),
661 CONSTRAINT `matchpoint_components_ifbk_1` FOREIGN KEY (`matchpoint_id`)
662 REFERENCES `matchpoints` (`matchpoint_id`) ON DELETE CASCADE ON UPDATE CASCADE
663 ) ENGINE=InnoDB DEFAULT CHARSET=utf8");
664 $dbh->do("CREATE TABLE `matchpoint_component_norms` (
665 `matchpoint_component_id` int(11) NOT NULL,
666 `sequence` int(11) NOT NULL default 0,
667 `norm_routine` varchar(50) NOT NULL default '',
668 KEY `matchpoint_component_norms` (`matchpoint_component_id`, `sequence`),
669 CONSTRAINT `matchpoint_component_norms_ifbk_1` FOREIGN KEY (`matchpoint_component_id`)
670 REFERENCES `matchpoint_components` (`matchpoint_component_id`) ON DELETE CASCADE ON UPDATE CASCADE
671 ) ENGINE=InnoDB DEFAULT CHARSET=utf8");
672 $dbh->do("CREATE TABLE `matcher_matchpoints` (
673 `matcher_id` int(11) NOT NULL,
674 `matchpoint_id` int(11) NOT NULL,
675 CONSTRAINT `matcher_matchpoints_ifbk_1` FOREIGN KEY (`matcher_id`)
676 REFERENCES `marc_matchers` (`matcher_id`) ON DELETE CASCADE ON UPDATE CASCADE,
677 CONSTRAINT `matcher_matchpoints_ifbk_2` FOREIGN KEY (`matchpoint_id`)
678 REFERENCES `matchpoints` (`matchpoint_id`) ON DELETE CASCADE ON UPDATE CASCADE
679 ) ENGINE=InnoDB DEFAULT CHARSET=utf8");
680 $dbh->do("CREATE TABLE `matchchecks` (
681 `matcher_id` int(11) NOT NULL,
682 `matchcheck_id` int(11) NOT NULL auto_increment,
683 `source_matchpoint_id` int(11) NOT NULL,
684 `target_matchpoint_id` int(11) NOT NULL,
685 PRIMARY KEY (`matchcheck_id`),
686 CONSTRAINT `matcher_matchchecks_ifbk_1` FOREIGN KEY (`matcher_id`)
687 REFERENCES `marc_matchers` (`matcher_id`) ON DELETE CASCADE ON UPDATE CASCADE,
688 CONSTRAINT `matcher_matchchecks_ifbk_2` FOREIGN KEY (`source_matchpoint_id`)
689 REFERENCES `matchpoints` (`matchpoint_id`) ON DELETE CASCADE ON UPDATE CASCADE,
690 CONSTRAINT `matcher_matchchecks_ifbk_3` FOREIGN KEY (`target_matchpoint_id`)
691 REFERENCES `matchpoints` (`matchpoint_id`) ON DELETE CASCADE ON UPDATE CASCADE
692 ) ENGINE=InnoDB DEFAULT CHARSET=utf8");
693 print "Upgrade to $DBversion done (added C4::Matcher serialization tables)\n ";
694 SetVersion ($DBversion);
697 $DBversion = "3.00.00.028";
698 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
699 $dbh->do("INSERT INTO `systempreferences` (variable,value,options,explanation,type)
700 VALUES ('canreservefromotherbranches','1','','With Independent branches on, can a user from one library reserve an item from another library','YesNo')");
701 print "Upgrade to $DBversion done (adding new system preference for changing reserve/holds behaviour with independent branches)\n";
702 SetVersion ($DBversion);
706 $DBversion = "3.00.00.029";
707 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
708 $dbh->do("ALTER TABLE `import_batches` ADD `matcher_id` int(11) NULL AFTER `import_batch_id`");
709 print "Upgrade to $DBversion done (adding matcher_id to import_batches)\n";
710 SetVersion ($DBversion);
713 $DBversion = "3.00.00.030";
714 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
715 $dbh->do("
716 CREATE TABLE services_throttle (
717 service_type varchar(10) NOT NULL default '',
718 service_count varchar(45) default NULL,
719 PRIMARY KEY (service_type)
720 ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
722 $dbh->do("INSERT INTO `systempreferences` (variable,value,options,explanation,type)
723 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')");
724 $dbh->do("INSERT INTO `systempreferences` (variable,value,options,explanation,type)
725 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')");
726 $dbh->do("INSERT INTO `systempreferences` (variable,value,options,explanation,type)
727 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')");
728 $dbh->do("INSERT INTO `systempreferences` (variable,value,options,explanation,type)
729 VALUES ('XISBNDailyLimit',499,'','The xISBN Web service is free for non-commercial use when usage does not exceed 500 requests per day','free')");
730 $dbh->do("INSERT INTO `systempreferences` (variable,value,options,explanation,type)
731 VALUES ('PINESISBN',0,'','Use with FRBRizeEditions. If ON, Koha will use PINES OISBN web service in the Editions tab on the detail pages.','YesNo')");
732 $dbh->do("INSERT INTO `systempreferences` (variable,value,options,explanation,type)
733 VALUES ('ThingISBN',0,'','Use with FRBRizeEditions. If ON, Koha will use the ThingISBN web service in the Editions tab on the detail pages.','YesNo')");
734 print "Upgrade to $DBversion done (adding services throttle table and sysprefs for xISBN)\n";
735 SetVersion ($DBversion);
738 $DBversion = "3.00.00.031";
739 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
741 $dbh->do("INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('QueryStemming',1,'If ON, enables query stemming',NULL,'YesNo')");
742 $dbh->do("INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('QueryFuzzy',1,'If ON, enables fuzzy option for searches',NULL,'YesNo')");
743 $dbh->do("INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('QueryWeightFields',1,'If ON, enables field weighting',NULL,'YesNo')");
744 $dbh->do("INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('WebBasedSelfCheck',0,'If ON, enables the web-based self-check system',NULL,'YesNo')");
745 $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')");
746 $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')");
747 $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')");
748 $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')");
749 $dbh->do("INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('defaultSortOrder',NULL,'Specify the default sort order','asc|dsc|az|za','Choice')");
750 $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')");
751 $dbh->do("INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('OPACdefaultSortOrder',NULL,'Specify the default sort order','asc|dsc|za|az','Choice')");
752 $dbh->do("INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('staffClientBaseURL','','Specify the base URL of the staff client',NULL,'free')");
753 $dbh->do("INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('minPasswordLength',3,'Specify the minimum length of a patron/staff password',NULL,'free')");
754 $dbh->do("INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('noItemTypeImages',0,'If ON, disables item-type images',NULL,'YesNo')");
755 $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')");
756 $dbh->do("INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('holdCancelLength','','Specify how many days before a hold is canceled',NULL,'free')");
757 $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')");
758 $dbh->do("INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('finesMode','test','Choose the fines mode, test or production','test|production','Choice')");
759 $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')");
760 $dbh->do("INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('itemBarcodeInputFilter','','If set, allows specification of a item barcode input filter','cuecat','Choice')");
761 $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')");
762 $dbh->do("INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('URLLinkText','','Text to display as the link anchor in the OPAC',NULL,'free')");
763 $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')");
764 $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')");
765 $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')");
766 $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')");
767 $dbh->do("INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('OPACUserCSS',0,'Add CSS to be included in the OPAC',NULL,'free')");
769 print "Upgrade to $DBversion done (adding additional system preference)\n";
770 SetVersion ($DBversion);
773 $DBversion = "3.00.00.032";
774 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
775 $dbh->do("UPDATE `marc_subfield_structure` SET `kohafield` = 'items.wthdrawn' WHERE `kohafield` = 'items.withdrawn'");
776 print "Upgrade to $DBversion done (fixed MARC framework references to items.withdrawn)\n";
777 SetVersion ($DBversion);
780 $DBversion = "3.00.00.033";
781 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
782 $dbh->do("INSERT INTO `userflags` VALUES(17,'staffaccess','Modify login / permissions for staff users',0)");
783 print "Upgrade to $DBversion done (Adding permissions flag for staff member access modification. )\n";
784 SetVersion ($DBversion);
787 $DBversion = "3.00.00.034";
788 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
789 $dbh->do("ALTER TABLE `virtualshelves` ADD COLUMN `sortfield` VARCHAR(16) ");
790 print "Upgrade to $DBversion done (Adding sortfield for Virtual Shelves. )\n";
791 SetVersion ($DBversion);
794 $DBversion = "3.00.00.035";
795 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
796 $dbh->do("UPDATE marc_subfield_structure
797 SET authorised_value = 'cn_source'
798 WHERE kohafield IN ('items.cn_source', 'biblioitems.cn_source')
799 AND (authorised_value is NULL OR authorised_value = '')");
800 print "Upgrade to $DBversion done (MARC frameworks: make classification source a drop-down)\n";
801 SetVersion ($DBversion);
804 $DBversion = "3.00.00.036";
805 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
806 $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');");
807 print "Upgrade to $DBversion done (OPACItemsResultsDisplay systempreference added)\n";
808 SetVersion ($DBversion);
811 $DBversion = "3.00.00.037";
812 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
813 $dbh->do("ALTER TABLE `borrowers` ADD COLUMN `altcontactfirstname` varchar(255)");
814 $dbh->do("ALTER TABLE `borrowers` ADD COLUMN `altcontactsurname` varchar(255)");
815 $dbh->do("ALTER TABLE `borrowers` ADD COLUMN `altcontactaddress1` varchar(255)");
816 $dbh->do("ALTER TABLE `borrowers` ADD COLUMN `altcontactaddress2` varchar(255)");
817 $dbh->do("ALTER TABLE `borrowers` ADD COLUMN `altcontactaddress3` varchar(255)");
818 $dbh->do("ALTER TABLE `borrowers` ADD COLUMN `altcontactzipcode` varchar(50)");
819 $dbh->do("ALTER TABLE `borrowers` ADD COLUMN `altcontactphone` varchar(50)");
820 print "Upgrade to $DBversion done (Adding Alternative Contact Person information to borrowers table)\n";
821 SetVersion ($DBversion);
824 $DBversion = "3.00.00.038";
825 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
826 $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'");
827 $dbh->do("DELETE FROM `systempreferences` WHERE variable='hideBiblioNumber'");
828 print "Upgrade to $DBversion done ('alter finesMode systempreference, remove superfluous syspref.')\n";
829 SetVersion ($DBversion);
832 $DBversion = "3.00.00.039";
833 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
834 $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')");
835 $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')");
836 $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')");
837 # $dbh->do("DELETE FROM `systempreferences` WHERE variable='HomeOrHoldingBranch'"); # Bug #2752
838 print "Upgrade to $DBversion done ('add circ sysprefs CircControl, finesCalendar, and uppercasesurnames, and delete HomeOrHoldingBranch.')\n";
839 SetVersion ($DBversion);
842 $DBversion = "3.00.00.040";
843 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
844 $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')");
845 $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')");
846 print "Upgrade to $DBversion done ('add circ sysprefs todaysIssuesDefaultSortOrder and previousIssuesDefaultSortOrder.')\n";
847 SetVersion ($DBversion);
851 $DBversion = "3.00.00.041";
852 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
853 # Strictly speaking it is not necessary to explicitly change
854 # NULL values to 0, because the ALTER TABLE statement will do that.
855 # However, setting them first avoids a warning.
856 $dbh->do("UPDATE items SET notforloan = 0 WHERE notforloan IS NULL");
857 $dbh->do("UPDATE items SET damaged = 0 WHERE damaged IS NULL");
858 $dbh->do("UPDATE items SET itemlost = 0 WHERE itemlost IS NULL");
859 $dbh->do("UPDATE items SET wthdrawn = 0 WHERE wthdrawn IS NULL");
860 $dbh->do("ALTER TABLE items
861 MODIFY notforloan tinyint(1) NOT NULL default 0,
862 MODIFY damaged tinyint(1) NOT NULL default 0,
863 MODIFY itemlost tinyint(1) NOT NULL default 0,
864 MODIFY wthdrawn tinyint(1) NOT NULL default 0");
865 $dbh->do("UPDATE deleteditems SET notforloan = 0 WHERE notforloan IS NULL");
866 $dbh->do("UPDATE deleteditems SET damaged = 0 WHERE damaged IS NULL");
867 $dbh->do("UPDATE deleteditems SET itemlost = 0 WHERE itemlost IS NULL");
868 $dbh->do("UPDATE deleteditems SET wthdrawn = 0 WHERE wthdrawn IS NULL");
869 $dbh->do("ALTER TABLE deleteditems
870 MODIFY notforloan tinyint(1) NOT NULL default 0,
871 MODIFY damaged tinyint(1) NOT NULL default 0,
872 MODIFY itemlost tinyint(1) NOT NULL default 0,
873 MODIFY wthdrawn tinyint(1) NOT NULL default 0");
874 print "Upgrade to $DBversion done (disallow NULL in several item status columns)\n";
875 SetVersion ($DBversion);
878 $DBversion = "3.00.00.04";
879 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
880 $dbh->do("ALTER TABLE aqbooksellers CHANGE name name mediumtext NOT NULL");
881 print "Upgrade to $DBversion done (disallow NULL in aqbooksellers.name; part of fix for bug 1251)\n";
882 SetVersion ($DBversion);
885 $DBversion = "3.00.00.043";
886 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
887 $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");
888 print "Upgrade to $DBversion done (currency table: add symbol and timestamp columns)\n";
889 SetVersion ($DBversion);
892 $DBversion = "3.00.00.044";
893 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
894 $dbh->do("ALTER TABLE deletedborrowers
895 ADD `altcontactfirstname` varchar(255) default NULL,
896 ADD `altcontactsurname` varchar(255) default NULL,
897 ADD `altcontactaddress1` varchar(255) default NULL,
898 ADD `altcontactaddress2` varchar(255) default NULL,
899 ADD `altcontactaddress3` varchar(255) default NULL,
900 ADD `altcontactzipcode` varchar(50) default NULL,
901 ADD `altcontactphone` varchar(50) default NULL
903 $dbh->do("INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES
904 ('OPACBaseURL',NULL,'Specify the Base URL of the OPAC, e.g., opac.mylibrary.com, the http:// will be added automatically by Koha.',NULL,'Free'),
905 ('language','en','Set the default language in the staff client.',NULL,'Languages'),
906 ('QueryAutoTruncate',1,'If ON, query truncation is enabled by default',NULL,'YesNo'),
907 ('QueryRemoveStopwords',0,'If ON, stopwords listed in the Administration area will be removed from queries',NULL,'YesNo')
909 print "Upgrade to $DBversion done (syncing deletedborrowers table with borrowers table)\n";
910 SetVersion ($DBversion);
913 #-- http://www.w3.org/International/articles/language-tags/
915 #-- RFC4646
916 $DBversion = "3.00.00.045";
917 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
918 $dbh->do("
919 CREATE TABLE language_subtag_registry (
920 subtag varchar(25),
921 type varchar(25), -- language-script-region-variant-extension-privateuse
922 description varchar(25), -- only one of the possible descriptions for ease of reference, see language_descriptions for the complete list
923 added date,
924 KEY `subtag` (`subtag`)
925 ) ENGINE=InnoDB DEFAULT CHARSET=utf8");
927 #-- TODO: add suppress_scripts
928 #-- this maps three letter codes defined in iso639.2 back to their
929 #-- two letter equivilents in rfc4646 (LOC maintains iso639+)
930 $dbh->do("CREATE TABLE language_rfc4646_to_iso639 (
931 rfc4646_subtag varchar(25),
932 iso639_2_code varchar(25),
933 KEY `rfc4646_subtag` (`rfc4646_subtag`)
934 ) ENGINE=InnoDB DEFAULT CHARSET=utf8");
936 $dbh->do("CREATE TABLE language_descriptions (
937 subtag varchar(25),
938 type varchar(25),
939 lang varchar(25),
940 description varchar(255),
941 KEY `lang` (`lang`)
942 ) ENGINE=InnoDB DEFAULT CHARSET=utf8");
944 #-- bi-directional support, keyed by script subcode
945 $dbh->do("CREATE TABLE language_script_bidi (
946 rfc4646_subtag varchar(25), -- script subtag, Arab, Hebr, etc.
947 bidi varchar(3), -- rtl ltr
948 KEY `rfc4646_subtag` (`rfc4646_subtag`)
949 ) ENGINE=InnoDB DEFAULT CHARSET=utf8");
951 #-- BIDI Stuff, Arabic and Hebrew
952 $dbh->do("INSERT INTO language_script_bidi(rfc4646_subtag,bidi)
953 VALUES( 'Arab', 'rtl')");
954 $dbh->do("INSERT INTO language_script_bidi(rfc4646_subtag,bidi)
955 VALUES( 'Hebr', 'rtl')");
957 #-- TODO: need to map language subtags to script subtags for detection
958 #-- of bidi when script is not specified (like ar, he)
959 $dbh->do("CREATE TABLE language_script_mapping (
960 language_subtag varchar(25),
961 script_subtag varchar(25),
962 KEY `language_subtag` (`language_subtag`)
963 ) ENGINE=InnoDB DEFAULT CHARSET=utf8");
965 #-- Default mappings between script and language subcodes
966 $dbh->do("INSERT INTO language_script_mapping(language_subtag,script_subtag)
967 VALUES( 'ar', 'Arab')");
968 $dbh->do("INSERT INTO language_script_mapping(language_subtag,script_subtag)
969 VALUES( 'he', 'Hebr')");
971 print "Upgrade to $DBversion done (adding language subtag registry and basic BiDi support NOTE: You should import the subtag registry SQL)\n";
972 SetVersion ($DBversion);
975 $DBversion = "3.00.00.046";
976 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
977 $dbh->do("ALTER TABLE `subscription` CHANGE `numberlength` `numberlength` int(11) default '0' ,
978 CHANGE `weeklength` `weeklength` int(11) default '0'");
979 $dbh->do("CREATE TABLE `serialitems` (`serialid` int(11) NOT NULL, `itemnumber` int(11) NOT NULL, UNIQUE KEY `serialididx` (`serialid`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8");
980 $dbh->do("INSERT INTO `serialitems` SELECT `serialid`,`itemnumber` from serial where NOT ISNULL(itemnumber) && itemnumber <> '' && itemnumber NOT LIKE '%,%'");
981 print "Upgrade to $DBversion done (Add serialitems table to link serial issues to items. )\n";
982 SetVersion ($DBversion);
985 $DBversion = "3.00.00.047";
986 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
987 $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');");
988 print "Upgrade to $DBversion done ( Added OpacRenewalAllowed syspref )\n";
989 SetVersion ($DBversion);
992 $DBversion = "3.00.00.048";
993 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
994 $dbh->do("ALTER TABLE `items` ADD `more_subfields_xml` longtext default NULL AFTER `itype`");
995 print "Upgrade to $DBversion done (added items.more_subfields_xml)\n";
996 SetVersion ($DBversion);
999 $DBversion = "3.00.00.049";
1000 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
1001 $dbh->do("ALTER TABLE `z3950servers` ADD `encoding` text default NULL AFTER type ");
1002 print "Upgrade to $DBversion done ( Added encoding field to z3950servers table )\n";
1003 SetVersion ($DBversion);
1006 $DBversion = "3.00.00.050";
1007 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
1008 $dbh->do("INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('OpacHighlightedWords','0','If Set, query matched terms are highlighted in OPAC',NULL,'YesNo');");
1009 print "Upgrade to $DBversion done ( Added OpacHighlightedWords syspref )\n";
1010 SetVersion ($DBversion);
1013 $DBversion = "3.00.00.051";
1014 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
1015 $dbh->do("UPDATE systempreferences SET explanation = 'Define the current theme for the OPAC interface.' WHERE variable = 'opacthemes';");
1016 print "Upgrade to $DBversion done ( Corrected opacthemes explanation. )\n";
1017 SetVersion ($DBversion);
1020 $DBversion = "3.00.00.052";
1021 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
1022 $dbh->do("ALTER TABLE `deleteditems` ADD `more_subfields_xml` LONGTEXT DEFAULT NULL AFTER `itype`");
1023 print "Upgrade to $DBversion done ( Adding missing column to deleteditems table. )\n";
1024 SetVersion ($DBversion);
1027 $DBversion = "3.00.00.053";
1028 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
1029 $dbh->do("CREATE TABLE `printers_profile` (
1030 `prof_id` int(4) NOT NULL auto_increment,
1031 `printername` varchar(40) NOT NULL,
1032 `tmpl_id` int(4) NOT NULL,
1033 `paper_bin` varchar(20) NOT NULL,
1034 `offset_horz` float default NULL,
1035 `offset_vert` float default NULL,
1036 `creep_horz` float default NULL,
1037 `creep_vert` float default NULL,
1038 `unit` char(20) NOT NULL default 'POINT',
1039 PRIMARY KEY (`prof_id`),
1040 UNIQUE KEY `printername` (`printername`,`tmpl_id`,`paper_bin`),
1041 CONSTRAINT `printers_profile_pnfk_1` FOREIGN KEY (`tmpl_id`) REFERENCES `labels_templates` (`tmpl_id`) ON DELETE CASCADE ON UPDATE CASCADE
1042 ) ENGINE=InnoDB DEFAULT CHARSET=utf8 ");
1043 $dbh->do("CREATE TABLE `labels_profile` (
1044 `tmpl_id` int(4) NOT NULL,
1045 `prof_id` int(4) NOT NULL,
1046 UNIQUE KEY `tmpl_id` (`tmpl_id`),
1047 UNIQUE KEY `prof_id` (`prof_id`)
1048 ) ENGINE=InnoDB DEFAULT CHARSET=utf8 ");
1049 print "Upgrade to $DBversion done ( Printer Profile tables added )\n";
1050 SetVersion ($DBversion);
1053 $DBversion = "3.00.00.054";
1054 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
1055 $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';");
1056 print "Upgrade to $DBversion done ( Added another barcode autogeneration sequence to barcode.pl. )\n";
1057 SetVersion ($DBversion);
1060 $DBversion = "3.00.00.055";
1061 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
1062 $dbh->do("ALTER TABLE `zebraqueue` ADD KEY `zebraqueue_lookup` (`server`, `biblio_auth_number`, `operation`, `done`)");
1063 print "Upgrade to $DBversion done ( Added index on zebraqueue. )\n";
1064 SetVersion ($DBversion);
1066 $DBversion = "3.00.00.056";
1067 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
1068 if (C4::Context->preference("marcflavour") eq 'UNIMARC') {
1069 $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) ");
1070 } else {
1071 $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) ");
1073 $dbh->do("ALTER TABLE `items` ADD `enumchron` VARCHAR(80) DEFAULT NULL;");
1074 print "Upgrade to $DBversion done ( Added item.enumchron column, and framework map to 952h )\n";
1075 SetVersion ($DBversion);
1078 $DBversion = "3.00.00.057";
1079 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
1080 $dbh->do("INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('OAI-PMH','0','if ON, OAI-PMH server is enabled',NULL,'YesNo');");
1081 $dbh->do("INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('OAI-PMH:archiveID','KOHA-OAI-TEST','OAI-PMH archive identification',NULL,'Free');");
1082 $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');");
1083 $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');");
1084 $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');");
1085 SetVersion ($DBversion);
1088 $DBversion = "3.00.00.058";
1089 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
1090 $dbh->do("ALTER TABLE `opac_news`
1091 CHANGE `lang` `lang` VARCHAR( 25 )
1092 CHARACTER SET utf8
1093 COLLATE utf8_general_ci
1094 NOT NULL default ''");
1095 print "Upgrade to $DBversion done ( lang field in opac_news made longer )\n";
1096 SetVersion ($DBversion);
1099 $DBversion = "3.00.00.059";
1100 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
1102 $dbh->do("CREATE TABLE IF NOT EXISTS `labels_templates` (
1103 `tmpl_id` int(4) NOT NULL auto_increment,
1104 `tmpl_code` char(100) default '',
1105 `tmpl_desc` char(100) default '',
1106 `page_width` float default '0',
1107 `page_height` float default '0',
1108 `label_width` float default '0',
1109 `label_height` float default '0',
1110 `topmargin` float default '0',
1111 `leftmargin` float default '0',
1112 `cols` int(2) default '0',
1113 `rows` int(2) default '0',
1114 `colgap` float default '0',
1115 `rowgap` float default '0',
1116 `active` int(1) default NULL,
1117 `units` char(20) default 'PX',
1118 `fontsize` int(4) NOT NULL default '3',
1119 PRIMARY KEY (`tmpl_id`)
1120 ) ENGINE=InnoDB DEFAULT CHARSET=utf8;");
1121 $dbh->do("CREATE TABLE IF NOT EXISTS `printers_profile` (
1122 `prof_id` int(4) NOT NULL auto_increment,
1123 `printername` varchar(40) NOT NULL,
1124 `tmpl_id` int(4) NOT NULL,
1125 `paper_bin` varchar(20) NOT NULL,
1126 `offset_horz` float default NULL,
1127 `offset_vert` float default NULL,
1128 `creep_horz` float default NULL,
1129 `creep_vert` float default NULL,
1130 `unit` char(20) NOT NULL default 'POINT',
1131 PRIMARY KEY (`prof_id`),
1132 UNIQUE KEY `printername` (`printername`,`tmpl_id`,`paper_bin`),
1133 CONSTRAINT `printers_profile_pnfk_1` FOREIGN KEY (`tmpl_id`) REFERENCES `labels_templates` (`tmpl_id`) ON DELETE CASCADE ON UPDATE CASCADE
1134 ) ENGINE=InnoDB DEFAULT CHARSET=utf8 ");
1135 print "Upgrade to $DBversion done ( Added labels_templates table if it did not exist. )\n";
1136 SetVersion ($DBversion);
1139 $DBversion = "3.00.00.060";
1140 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
1141 $dbh->do("CREATE TABLE IF NOT EXISTS `patronimage` (
1142 `cardnumber` varchar(16) NOT NULL,
1143 `mimetype` varchar(15) NOT NULL,
1144 `imagefile` mediumblob NOT NULL,
1145 PRIMARY KEY (`cardnumber`),
1146 CONSTRAINT `patronimage_fk1` FOREIGN KEY (`cardnumber`) REFERENCES `borrowers` (`cardnumber`) ON DELETE CASCADE ON UPDATE CASCADE
1147 ) ENGINE=InnoDB DEFAULT CHARSET=utf8;");
1148 print "Upgrade to $DBversion done ( Added patronimage table. )\n";
1149 SetVersion ($DBversion);
1152 $DBversion = "3.00.00.061";
1153 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
1154 $dbh->do("ALTER TABLE labels_templates ADD COLUMN font char(10) NOT NULL DEFAULT 'TR';");
1155 print "Upgrade to $DBversion done ( Added font column to labels_templates )\n";
1156 SetVersion ($DBversion);
1159 $DBversion = "3.00.00.062";
1160 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
1161 $dbh->do("CREATE TABLE `old_issues` (
1162 `borrowernumber` int(11) default NULL,
1163 `itemnumber` int(11) default NULL,
1164 `date_due` date default NULL,
1165 `branchcode` varchar(10) default NULL,
1166 `issuingbranch` varchar(18) default NULL,
1167 `returndate` date default NULL,
1168 `lastreneweddate` date default NULL,
1169 `return` varchar(4) default NULL,
1170 `renewals` tinyint(4) default NULL,
1171 `timestamp` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
1172 `issuedate` date default NULL,
1173 KEY `old_issuesborridx` (`borrowernumber`),
1174 KEY `old_issuesitemidx` (`itemnumber`),
1175 KEY `old_bordate` (`borrowernumber`,`timestamp`),
1176 CONSTRAINT `old_issues_ibfk_1` FOREIGN KEY (`borrowernumber`) REFERENCES `borrowers` (`borrowernumber`)
1177 ON DELETE SET NULL ON UPDATE SET NULL,
1178 CONSTRAINT `old_issues_ibfk_2` FOREIGN KEY (`itemnumber`) REFERENCES `items` (`itemnumber`)
1179 ON DELETE SET NULL ON UPDATE SET NULL
1180 ) ENGINE=InnoDB DEFAULT CHARSET=utf8");
1181 $dbh->do("CREATE TABLE `old_reserves` (
1182 `borrowernumber` int(11) default NULL,
1183 `reservedate` date default NULL,
1184 `biblionumber` int(11) default NULL,
1185 `constrainttype` varchar(1) default NULL,
1186 `branchcode` varchar(10) default NULL,
1187 `notificationdate` date default NULL,
1188 `reminderdate` date default NULL,
1189 `cancellationdate` date default NULL,
1190 `reservenotes` mediumtext,
1191 `priority` smallint(6) default NULL,
1192 `found` varchar(1) default NULL,
1193 `timestamp` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
1194 `itemnumber` int(11) default NULL,
1195 `waitingdate` date default NULL,
1196 KEY `old_reserves_borrowernumber` (`borrowernumber`),
1197 KEY `old_reserves_biblionumber` (`biblionumber`),
1198 KEY `old_reserves_itemnumber` (`itemnumber`),
1199 KEY `old_reserves_branchcode` (`branchcode`),
1200 CONSTRAINT `old_reserves_ibfk_1` FOREIGN KEY (`borrowernumber`) REFERENCES `borrowers` (`borrowernumber`)
1201 ON DELETE SET NULL ON UPDATE SET NULL,
1202 CONSTRAINT `old_reserves_ibfk_2` FOREIGN KEY (`biblionumber`) REFERENCES `biblio` (`biblionumber`)
1203 ON DELETE SET NULL ON UPDATE SET NULL,
1204 CONSTRAINT `old_reserves_ibfk_3` FOREIGN KEY (`itemnumber`) REFERENCES `items` (`itemnumber`)
1205 ON DELETE SET NULL ON UPDATE SET NULL
1206 ) ENGINE=InnoDB DEFAULT CHARSET=utf8");
1208 # move closed transactions to old_* tables
1209 $dbh->do("INSERT INTO old_issues SELECT * FROM issues WHERE returndate IS NOT NULL");
1210 $dbh->do("DELETE FROM issues WHERE returndate IS NOT NULL");
1211 $dbh->do("INSERT INTO old_reserves SELECT * FROM reserves WHERE cancellationdate IS NOT NULL OR found = 'F'");
1212 $dbh->do("DELETE FROM reserves WHERE cancellationdate IS NOT NULL OR found = 'F'");
1214 print "Upgrade to $DBversion done ( Added old_issues and old_reserves tables )\n";
1215 SetVersion ($DBversion);
1218 $DBversion = "3.00.00.063";
1219 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
1220 $dbh->do("ALTER TABLE deleteditems
1221 CHANGE COLUMN booksellerid booksellerid MEDIUMTEXT DEFAULT NULL,
1222 ADD COLUMN enumchron VARCHAR(80) DEFAULT NULL AFTER more_subfields_xml,
1223 ADD COLUMN copynumber SMALLINT(6) DEFAULT NULL AFTER enumchron;");
1224 $dbh->do("ALTER TABLE items
1225 CHANGE COLUMN booksellerid booksellerid MEDIUMTEXT,
1226 ADD COLUMN copynumber SMALLINT(6) DEFAULT NULL AFTER enumchron;");
1227 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";
1228 SetVersion ($DBversion);
1231 $DBversion = "3.00.00.064";
1232 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
1233 $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');");
1234 $dbh->do("INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('AWSAccessKeyID','','See: http://aws.amazon.com','','free');");
1235 $dbh->do("DELETE FROM `systempreferences` WHERE variable='AmazonDevKey';");
1236 $dbh->do("DELETE FROM `systempreferences` WHERE variable='XISBNAmazonSimilarItems';");
1237 $dbh->do("DELETE FROM `systempreferences` WHERE variable='OPACXISBNAmazonSimilarItems';");
1238 print "Upgrade to $DBversion done (IMPORTANT: Upgrading to Amazon.com Associates Web Service 4.0 ) \n";
1239 SetVersion ($DBversion);
1242 $DBversion = "3.00.00.065";
1243 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
1244 $dbh->do("CREATE TABLE `patroncards` (
1245 `cardid` int(11) NOT NULL auto_increment,
1246 `batch_id` varchar(10) NOT NULL default '1',
1247 `borrowernumber` int(11) NOT NULL,
1248 `timestamp` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
1249 PRIMARY KEY (`cardid`),
1250 KEY `patroncards_ibfk_1` (`borrowernumber`),
1251 CONSTRAINT `patroncards_ibfk_1` FOREIGN KEY (`borrowernumber`) REFERENCES `borrowers` (`borrowernumber`) ON DELETE CASCADE ON UPDATE CASCADE
1252 ) ENGINE=InnoDB DEFAULT CHARSET=utf8;");
1253 print "Upgrade to $DBversion done (Adding patroncards table for patroncards generation feature. ) \n";
1254 SetVersion ($DBversion);
1257 $DBversion = "3.00.00.066";
1258 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
1259 $dbh->do("ALTER TABLE `virtualshelfcontents` MODIFY `dateadded` timestamp NOT NULL
1260 DEFAULT CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP;
1262 print "Upgrade to $DBversion done (fix for bug 1873: virtualshelfcontents dateadded column empty. ) \n";
1263 SetVersion ($DBversion);
1266 $DBversion = "3.00.00.067";
1267 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
1268 $dbh->do("UPDATE systempreferences SET explanation = 'Enable patron images for the Staff Client', type = 'YesNo' WHERE variable = 'patronimages'");
1269 print "Upgrade to $DBversion done (Updating patronimages syspref to reflect current kohastructure.sql. ) \n";
1270 SetVersion ($DBversion);
1273 $DBversion = "3.00.00.068";
1274 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
1275 $dbh->do("CREATE TABLE `permissions` (
1276 `module_bit` int(11) NOT NULL DEFAULT 0,
1277 `code` varchar(30) DEFAULT NULL,
1278 `description` varchar(255) DEFAULT NULL,
1279 PRIMARY KEY (`module_bit`, `code`),
1280 CONSTRAINT `permissions_ibfk_1` FOREIGN KEY (`module_bit`) REFERENCES `userflags` (`bit`)
1281 ON DELETE CASCADE ON UPDATE CASCADE
1282 ) ENGINE=InnoDB DEFAULT CHARSET=utf8");
1283 $dbh->do("CREATE TABLE `user_permissions` (
1284 `borrowernumber` int(11) NOT NULL DEFAULT 0,
1285 `module_bit` int(11) NOT NULL DEFAULT 0,
1286 `code` varchar(30) DEFAULT NULL,
1287 CONSTRAINT `user_permissions_ibfk_1` FOREIGN KEY (`borrowernumber`) REFERENCES `borrowers` (`borrowernumber`)
1288 ON DELETE CASCADE ON UPDATE CASCADE,
1289 CONSTRAINT `user_permissions_ibfk_2` FOREIGN KEY (`module_bit`, `code`)
1290 REFERENCES `permissions` (`module_bit`, `code`)
1291 ON DELETE CASCADE ON UPDATE CASCADE
1292 ) ENGINE=InnoDB DEFAULT CHARSET=utf8");
1294 $dbh->do("INSERT INTO permissions (module_bit, code, description) VALUES
1295 (13, 'edit_news', 'Write news for the OPAC and staff interfaces'),
1296 (13, 'label_creator', 'Create printable labels and barcodes from catalog and patron data'),
1297 (13, 'edit_calendar', 'Define days when the library is closed'),
1298 (13, 'moderate_comments', 'Moderate patron comments'),
1299 (13, 'edit_notices', 'Define notices'),
1300 (13, 'edit_notice_status_triggers', 'Set notice/status triggers for overdue items'),
1301 (13, 'view_system_logs', 'Browse the system logs'),
1302 (13, 'inventory', 'Perform inventory (stocktaking) of your catalogue'),
1303 (13, 'stage_marc_import', 'Stage MARC records into the reservoir'),
1304 (13, 'manage_staged_marc', 'Managed staged MARC records, including completing and reversing imports'),
1305 (13, 'export_catalog', 'Export bibliographic and holdings data'),
1306 (13, 'import_patrons', 'Import patron data'),
1307 (13, 'delete_anonymize_patrons', 'Delete old borrowers and anonymize circulation history (deletes borrower reading history)'),
1308 (13, 'batch_upload_patron_images', 'Upload patron images in batch or one at a time'),
1309 (13, 'schedule_tasks', 'Schedule tasks to run')");
1311 $dbh->do("INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('GranularPermissions','0','Use detailed staff user permissions',NULL,'YesNo')");
1313 print "Upgrade to $DBversion done (adding permissions and user_permissions tables and GranularPermissions syspref) \n";
1314 SetVersion ($DBversion);
1316 $DBversion = "3.00.00.069";
1317 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
1318 $dbh->do("ALTER TABLE labels_conf CHANGE COLUMN class classification int(1) DEFAULT NULL;");
1319 print "Upgrade to $DBversion done ( Correcting columname in labels_conf )\n";
1320 SetVersion ($DBversion);
1323 $DBversion = "3.00.00.070";
1324 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
1325 $sth = $dbh->prepare("SELECT value FROM systempreferences WHERE variable='yuipath'");
1326 $sth->execute;
1327 my ($value) = $sth->fetchrow;
1328 $value =~ s/2.3.1/2.5.1/;
1329 $dbh->do("UPDATE systempreferences SET value='$value' WHERE variable='yuipath';");
1330 print "Update yuipath syspref to 2.5.1 if necessary\n";
1331 SetVersion ($DBversion);
1334 $DBversion = "3.00.00.071";
1335 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
1336 $dbh->do(" ALTER TABLE `subscription` ADD `serialsadditems` TINYINT( 1 ) NOT NULL DEFAULT '0';");
1337 # fill the new field with the previous systempreference value, then drop the syspref
1338 my $sth = $dbh->prepare("SELECT value FROM systempreferences WHERE variable='serialsadditems'");
1339 $sth->execute;
1340 my ($serialsadditems) = $sth->fetchrow();
1341 $dbh->do("UPDATE subscription SET serialsadditems=$serialsadditems");
1342 $dbh->do("DELETE FROM systempreferences WHERE variable='serialsadditems'");
1343 print "Upgrade to $DBversion done ( moving serialsadditems from syspref to subscription )\n";
1344 SetVersion ($DBversion);
1347 $DBversion = "3.00.00.072";
1348 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
1349 $dbh->do("ALTER TABLE labels_conf ADD COLUMN formatstring mediumtext DEFAULT NULL AFTER printingtype");
1350 print "Upgrade to $DBversion done ( Adding format string to labels generator. )\n";
1351 SetVersion ($DBversion);
1354 $DBversion = "3.00.00.073";
1355 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
1356 $dbh->do("DROP TABLE IF EXISTS `tags_all`;");
1357 $dbh->do(q#
1358 CREATE TABLE `tags_all` (
1359 `tag_id` int(11) NOT NULL auto_increment,
1360 `borrowernumber` int(11) NOT NULL,
1361 `biblionumber` int(11) NOT NULL,
1362 `term` varchar(255) NOT NULL,
1363 `language` int(4) default NULL,
1364 `date_created` datetime NOT NULL,
1365 PRIMARY KEY (`tag_id`),
1366 KEY `tags_borrowers_fk_1` (`borrowernumber`),
1367 KEY `tags_biblionumber_fk_1` (`biblionumber`),
1368 CONSTRAINT `tags_borrowers_fk_1` FOREIGN KEY (`borrowernumber`)
1369 REFERENCES `borrowers` (`borrowernumber`) ON DELETE CASCADE ON UPDATE CASCADE,
1370 CONSTRAINT `tags_biblionumber_fk_1` FOREIGN KEY (`biblionumber`)
1371 REFERENCES `biblio` (`biblionumber`) ON DELETE CASCADE ON UPDATE CASCADE
1372 ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
1374 $dbh->do("DROP TABLE IF EXISTS `tags_approval`;");
1375 $dbh->do(q#
1376 CREATE TABLE `tags_approval` (
1377 `term` varchar(255) NOT NULL,
1378 `approved` int(1) NOT NULL default '0',
1379 `date_approved` datetime default NULL,
1380 `approved_by` int(11) default NULL,
1381 `weight_total` int(9) NOT NULL default '1',
1382 PRIMARY KEY (`term`),
1383 KEY `tags_approval_borrowers_fk_1` (`approved_by`),
1384 CONSTRAINT `tags_approval_borrowers_fk_1` FOREIGN KEY (`approved_by`)
1385 REFERENCES `borrowers` (`borrowernumber`) ON DELETE CASCADE ON UPDATE CASCADE
1386 ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
1388 $dbh->do("DROP TABLE IF EXISTS `tags_index`;");
1389 $dbh->do(q#
1390 CREATE TABLE `tags_index` (
1391 `term` varchar(255) NOT NULL,
1392 `biblionumber` int(11) NOT NULL,
1393 `weight` int(9) NOT NULL default '1',
1394 PRIMARY KEY (`term`,`biblionumber`),
1395 KEY `tags_index_biblionumber_fk_1` (`biblionumber`),
1396 CONSTRAINT `tags_index_term_fk_1` FOREIGN KEY (`term`)
1397 REFERENCES `tags_approval` (`term`) ON DELETE CASCADE ON UPDATE CASCADE,
1398 CONSTRAINT `tags_index_biblionumber_fk_1` FOREIGN KEY (`biblionumber`)
1399 REFERENCES `biblio` (`biblionumber`) ON DELETE CASCADE ON UPDATE CASCADE
1400 ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
1402 $dbh->do(q#
1403 INSERT INTO `systempreferences` VALUES
1404 ('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=',''),
1405 ('BakerTaylorEnabled','0','','Enable or disable all Baker & Taylor features.','YesNo'),
1406 ('BakerTaylorPassword','','','Baker & Taylor Password for Content Cafe (external content)','Textarea'),
1407 ('BakerTaylorUsername','','','Baker & Taylor Username for Content Cafe (external content)','Textarea'),
1408 ('TagsEnabled','1','','Enables or disables all tagging features. This is the main switch for tags.','YesNo'),
1409 ('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.',''),
1410 ('TagsInputOnDetail','1','','Allow users to input tags from the detail page.', 'YesNo'),
1411 ('TagsInputOnList', '0','','Allow users to input tags from the search results list.', 'YesNo'),
1412 ('TagsModeration', NULL,'','Require tags from patrons to be approved before becoming visible.','YesNo'),
1413 ('TagsShowOnDetail','10','','Number of tags to display on detail page. 0 is off.', 'Integer'),
1414 ('TagsShowOnList', '6','','Number of tags to display on search results list. 0 is off.','Integer')
1416 print "Upgrade to $DBversion done (Baker/Taylor,Tags: sysprefs and tables (tags_all, tags_index, tags_approval)) \n";
1417 SetVersion ($DBversion);
1420 $DBversion = "3.00.00.074";
1421 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
1422 $dbh->do( q(update itemtypes set imageurl = concat( 'npl/', imageurl )
1423 where imageurl not like 'http%'
1424 and imageurl is not NULL
1425 and imageurl != '') );
1426 print "Upgrade to $DBversion done (updating imagetype.imageurls to reflect new icon locations.)\n";
1427 SetVersion ($DBversion);
1430 $DBversion = "3.00.00.075";
1431 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
1432 $dbh->do( q(alter table authorised_values add imageurl varchar(200) default NULL) );
1433 print "Upgrade to $DBversion done (adding imageurl field to authorised_values table)\n";
1434 SetVersion ($DBversion);
1437 $DBversion = "3.00.00.076";
1438 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
1439 $dbh->do("ALTER TABLE import_batches
1440 ADD COLUMN nomatch_action enum('create_new', 'ignore') NOT NULL default 'create_new' AFTER overlay_action");
1441 $dbh->do("ALTER TABLE import_batches
1442 ADD COLUMN item_action enum('always_add', 'add_only_for_matches', 'add_only_for_new', 'ignore')
1443 NOT NULL default 'always_add' AFTER nomatch_action");
1444 $dbh->do("ALTER TABLE import_batches
1445 MODIFY overlay_action enum('replace', 'create_new', 'use_template', 'ignore')
1446 NOT NULL default 'create_new'");
1447 $dbh->do("ALTER TABLE import_records
1448 MODIFY status enum('error', 'staged', 'imported', 'reverted', 'items_reverted',
1449 'ignored') NOT NULL default 'staged'");
1450 $dbh->do("ALTER TABLE import_items
1451 MODIFY status enum('error', 'staged', 'imported', 'reverted', 'ignored') NOT NULL default 'staged'");
1453 print "Upgrade to $DBversion done (changes to import_batches and import_records)\n";
1454 SetVersion ($DBversion);
1457 $DBversion = "3.00.00.077";
1458 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
1459 # drop these tables only if they exist and none of them are empty
1460 # these tables are not defined in the packaged 2.2.9, but since it is believed
1461 # that at least one library may be using them in a post-2.2.9 but pre-3.0 Koha,
1462 # some care is taken.
1463 my ($print_error) = $dbh->{PrintError};
1464 $dbh->{PrintError} = 0;
1465 my ($raise_error) = $dbh->{RaiseError};
1466 $dbh->{RaiseError} = 1;
1468 my $count = 0;
1469 my $do_drop = 1;
1470 eval { $count = $dbh->do("SELECT 1 FROM categorytable"); };
1471 if ($count > 0) {
1472 $do_drop = 0;
1474 eval { $count = $dbh->do("SELECT 1 FROM mediatypetable"); };
1475 if ($count > 0) {
1476 $do_drop = 0;
1478 eval { $count = $dbh->do("SELECT 1 FROM subcategorytable"); };
1479 if ($count > 0) {
1480 $do_drop = 0;
1483 if ($do_drop) {
1484 $dbh->do("DROP TABLE IF EXISTS `categorytable`");
1485 $dbh->do("DROP TABLE IF EXISTS `mediatypetable`");
1486 $dbh->do("DROP TABLE IF EXISTS `subcategorytable`");
1489 $dbh->{PrintError} = $print_error;
1490 $dbh->{RaiseError} = $raise_error;
1491 print "Upgrade to $DBversion done (drop categorytable, subcategorytable, and mediatypetable)\n";
1492 SetVersion ($DBversion);
1495 $DBversion = "3.00.00.078";
1496 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
1497 my ($print_error) = $dbh->{PrintError};
1498 $dbh->{PrintError} = 0;
1500 unless ($dbh->do("SELECT 1 FROM browser")) {
1501 $dbh->{PrintError} = $print_error;
1502 $dbh->do("CREATE TABLE `browser` (
1503 `level` int(11) NOT NULL,
1504 `classification` varchar(20) NOT NULL,
1505 `description` varchar(255) NOT NULL,
1506 `number` bigint(20) NOT NULL,
1507 `endnode` tinyint(4) NOT NULL
1508 ) ENGINE=InnoDB DEFAULT CHARSET=utf8");
1510 $dbh->{PrintError} = $print_error;
1511 print "Upgrade to $DBversion done (add browser table if not already present)\n";
1512 SetVersion ($DBversion);
1515 $DBversion = "3.00.00.079";
1516 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
1517 my ($print_error) = $dbh->{PrintError};
1518 $dbh->{PrintError} = 0;
1520 $dbh->do("INSERT INTO `systempreferences` (variable, value,options,type, explanation)VALUES
1521 ('AddPatronLists','categorycode','categorycode|category_type','Choice','Allow user to choose what list to pick up from when adding patrons')");
1522 print "Upgrade to $DBversion done (add browser table if not already present)\n";
1523 SetVersion ($DBversion);
1526 $DBversion = "3.00.00.080";
1527 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
1528 $dbh->do("ALTER TABLE subscription CHANGE monthlength monthlength int(11) default '0'");
1529 $dbh->do("ALTER TABLE deleteditems MODIFY marc LONGBLOB AFTER copynumber");
1530 $dbh->do("ALTER TABLE aqbooksellers CHANGE name name mediumtext NOT NULL");
1531 print "Upgrade to $DBversion done (catch up on DB schema changes since alpha and beta)\n";
1532 SetVersion ($DBversion);
1535 $DBversion = "3.00.00.081";
1536 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
1537 $dbh->do("CREATE TABLE `borrower_attribute_types` (
1538 `code` varchar(10) NOT NULL,
1539 `description` varchar(255) NOT NULL,
1540 `repeatable` tinyint(1) NOT NULL default 0,
1541 `unique_id` tinyint(1) NOT NULL default 0,
1542 `opac_display` tinyint(1) NOT NULL default 0,
1543 `password_allowed` tinyint(1) NOT NULL default 0,
1544 `staff_searchable` tinyint(1) NOT NULL default 0,
1545 `authorised_value_category` varchar(10) default NULL,
1546 PRIMARY KEY (`code`)
1547 ) ENGINE=InnoDB DEFAULT CHARSET=utf8");
1548 $dbh->do("CREATE TABLE `borrower_attributes` (
1549 `borrowernumber` int(11) NOT NULL,
1550 `code` varchar(10) NOT NULL,
1551 `attribute` varchar(30) default NULL,
1552 `password` varchar(30) default NULL,
1553 KEY `borrowernumber` (`borrowernumber`),
1554 KEY `code_attribute` (`code`, `attribute`),
1555 CONSTRAINT `borrower_attributes_ibfk_1` FOREIGN KEY (`borrowernumber`) REFERENCES `borrowers` (`borrowernumber`)
1556 ON DELETE CASCADE ON UPDATE CASCADE,
1557 CONSTRAINT `borrower_attributes_ibfk_2` FOREIGN KEY (`code`) REFERENCES `borrower_attribute_types` (`code`)
1558 ON DELETE CASCADE ON UPDATE CASCADE
1559 ) ENGINE=InnoDB DEFAULT CHARSET=utf8");
1560 $dbh->do("INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('ExtendedPatronAttributes','0','Use extended patron IDs and attributes',NULL,'YesNo')");
1561 print "Upgrade to $DBversion done (added borrower_attributes and borrower_attribute_types)\n";
1562 SetVersion ($DBversion);
1565 $DBversion = "3.00.00.082";
1566 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
1567 $dbh->do( q(alter table accountlines add column lastincrement decimal(28,6) default NULL) );
1568 print "Upgrade to $DBversion done (adding lastincrement column to accountlines table)\n";
1569 SetVersion ($DBversion);
1572 $DBversion = "3.00.00.083";
1573 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
1574 $dbh->do( qq(UPDATE systempreferences SET value='local' where variable='yuipath' and value like "%/intranet-tmpl/prog/%"));
1575 print "Upgrade to $DBversion done (Changing yuipath behaviour in managing a local value)\n";
1576 SetVersion ($DBversion);
1578 $DBversion = "3.00.00.084";
1579 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
1580 $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')");
1581 $dbh->do("INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES('GoogleJackets','0','if ON, displays jacket covers from Google Books API',NULL,'YesNo')");
1582 print "Upgrade to $DBversion done (add new sysprefs)\n";
1583 SetVersion ($DBversion);
1586 $DBversion = "3.00.00.085";
1587 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
1588 if (C4::Context->preference("marcflavour") eq 'MARC21') {
1589 $dbh->do("UPDATE marc_subfield_structure SET tab = 0 WHERE tab = 9 AND tagfield = '037'");
1590 $dbh->do("UPDATE marc_subfield_structure SET tab = 1 WHERE tab = 6 AND tagfield in ('100', '110', '111', '130')");
1591 $dbh->do("UPDATE marc_subfield_structure SET tab = 2 WHERE tab = 6 AND tagfield in ('240', '243')");
1592 $dbh->do("UPDATE marc_subfield_structure SET tab = 4 WHERE tab = 6 AND tagfield in ('400', '410', '411', '440')");
1593 $dbh->do("UPDATE marc_subfield_structure SET tab = 5 WHERE tab = 9 AND tagfield = '584'");
1594 $dbh->do("UPDATE marc_subfield_structure SET tab = 7 WHERE tab = -6 AND tagfield = '760'");
1596 print "Upgrade to $DBversion done (move editing tab of various MARC21 subfields)\n";
1597 SetVersion ($DBversion);
1600 $DBversion = "3.00.00.086";
1601 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
1602 $dbh->do(
1603 "CREATE TABLE `tmp_holdsqueue` (
1604 `biblionumber` int(11) default NULL,
1605 `itemnumber` int(11) default NULL,
1606 `barcode` varchar(20) default NULL,
1607 `surname` mediumtext NOT NULL,
1608 `firstname` text,
1609 `phone` text,
1610 `borrowernumber` int(11) NOT NULL,
1611 `cardnumber` varchar(16) default NULL,
1612 `reservedate` date default NULL,
1613 `title` mediumtext,
1614 `itemcallnumber` varchar(30) default NULL,
1615 `holdingbranch` varchar(10) default NULL,
1616 `pickbranch` varchar(10) default NULL,
1617 `notes` text
1618 ) ENGINE=InnoDB DEFAULT CHARSET=utf8");
1620 $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')");
1621 $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')");
1623 print "Upgrade to $DBversion done (Table structure for table `tmp_holdsqueue`)\n";
1624 SetVersion ($DBversion);
1627 $DBversion = "3.00.00.087";
1628 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
1629 $dbh->do("INSERT INTO `systempreferences` VALUES ('AutoEmailOpacUser','0','','Sends notification emails containing new account details to patrons - when account is created.','YesNo')" );
1630 $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')");
1631 print "Upgrade to $DBversion done (added 2 new 'AutoEmailOpacUser' sysprefs)\n";
1632 SetVersion ($DBversion);
1635 $DBversion = "3.00.00.088";
1636 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
1637 $dbh->do("INSERT INTO `systempreferences` (variable,value,options,explanation,type) VALUES ('OPACShelfBrowser','1','','Enable/disable Shelf Browser on item details page','YesNo')");
1638 $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')");
1639 $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')");
1640 $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')");
1641 print "Upgrade to $DBversion done (added 2 new 'AutoEmailOpacUser' sysprefs)\n";
1642 SetVersion ($DBversion);
1645 $DBversion = "3.00.00.089";
1646 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
1647 $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')");
1648 print "Upgrade to $DBversion done (added new AdvancedSearchTypes syspref)\n";
1649 SetVersion ($DBversion);
1652 $DBversion = "3.00.00.090";
1653 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
1654 $dbh->do("
1655 CREATE TABLE `branch_borrower_circ_rules` (
1656 `branchcode` VARCHAR(10) NOT NULL,
1657 `categorycode` VARCHAR(10) NOT NULL,
1658 `maxissueqty` int(4) default NULL,
1659 PRIMARY KEY (`categorycode`, `branchcode`),
1660 CONSTRAINT `branch_borrower_circ_rules_ibfk_1` FOREIGN KEY (`categorycode`) REFERENCES `categories` (`categorycode`)
1661 ON DELETE CASCADE ON UPDATE CASCADE,
1662 CONSTRAINT `branch_borrower_circ_rules_ibfk_2` FOREIGN KEY (`branchcode`) REFERENCES `branches` (`branchcode`)
1663 ON DELETE CASCADE ON UPDATE CASCADE
1664 ) ENGINE=InnoDB DEFAULT CHARSET=utf8
1666 $dbh->do("
1667 CREATE TABLE `default_borrower_circ_rules` (
1668 `categorycode` VARCHAR(10) NOT NULL,
1669 `maxissueqty` int(4) default NULL,
1670 PRIMARY KEY (`categorycode`),
1671 CONSTRAINT `borrower_borrower_circ_rules_ibfk_1` FOREIGN KEY (`categorycode`) REFERENCES `categories` (`categorycode`)
1672 ON DELETE CASCADE ON UPDATE CASCADE
1673 ) ENGINE=InnoDB DEFAULT CHARSET=utf8
1675 $dbh->do("
1676 CREATE TABLE `default_branch_circ_rules` (
1677 `branchcode` VARCHAR(10) NOT NULL,
1678 `maxissueqty` int(4) default NULL,
1679 PRIMARY KEY (`branchcode`),
1680 CONSTRAINT `default_branch_circ_rules_ibfk_1` FOREIGN KEY (`branchcode`) REFERENCES `branches` (`branchcode`)
1681 ON DELETE CASCADE ON UPDATE CASCADE
1682 ) ENGINE=InnoDB DEFAULT CHARSET=utf8
1684 $dbh->do("
1685 CREATE TABLE `default_circ_rules` (
1686 `singleton` enum('singleton') NOT NULL default 'singleton',
1687 `maxissueqty` int(4) default NULL,
1688 PRIMARY KEY (`singleton`)
1689 ) ENGINE=InnoDB DEFAULT CHARSET=utf8
1691 print "Upgrade to $DBversion done (added several circ rules tables)\n";
1692 SetVersion ($DBversion);
1696 $DBversion = "3.00.00.091";
1697 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
1698 $dbh->do(<<'END_SQL');
1699 ALTER TABLE borrowers
1700 ADD `smsalertnumber` varchar(50) default NULL
1701 END_SQL
1703 $dbh->do(<<'END_SQL');
1704 CREATE TABLE `message_attributes` (
1705 `message_attribute_id` int(11) NOT NULL auto_increment,
1706 `message_name` varchar(20) NOT NULL default '',
1707 `takes_days` tinyint(1) NOT NULL default '0',
1708 PRIMARY KEY (`message_attribute_id`),
1709 UNIQUE KEY `message_name` (`message_name`)
1710 ) ENGINE=InnoDB DEFAULT CHARSET=utf8
1711 END_SQL
1713 $dbh->do(<<'END_SQL');
1714 CREATE TABLE `message_transport_types` (
1715 `message_transport_type` varchar(20) NOT NULL,
1716 PRIMARY KEY (`message_transport_type`)
1717 ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
1718 END_SQL
1720 $dbh->do(<<'END_SQL');
1721 CREATE TABLE `message_transports` (
1722 `message_attribute_id` int(11) NOT NULL,
1723 `message_transport_type` varchar(20) NOT NULL,
1724 `is_digest` tinyint(1) NOT NULL default '0',
1725 `letter_module` varchar(20) NOT NULL default '',
1726 `letter_code` varchar(20) NOT NULL default '',
1727 PRIMARY KEY (`message_attribute_id`,`message_transport_type`,`is_digest`),
1728 KEY `message_transport_type` (`message_transport_type`),
1729 KEY `letter_module` (`letter_module`,`letter_code`),
1730 CONSTRAINT `message_transports_ibfk_1` FOREIGN KEY (`message_attribute_id`) REFERENCES `message_attributes` (`message_attribute_id`) ON DELETE CASCADE ON UPDATE CASCADE,
1731 CONSTRAINT `message_transports_ibfk_2` FOREIGN KEY (`message_transport_type`) REFERENCES `message_transport_types` (`message_transport_type`) ON DELETE CASCADE ON UPDATE CASCADE,
1732 CONSTRAINT `message_transports_ibfk_3` FOREIGN KEY (`letter_module`, `letter_code`) REFERENCES `letter` (`module`, `code`) ON DELETE CASCADE ON UPDATE CASCADE
1733 ) ENGINE=InnoDB DEFAULT CHARSET=utf8
1734 END_SQL
1736 $dbh->do(<<'END_SQL');
1737 CREATE TABLE `borrower_message_preferences` (
1738 `borrower_message_preference_id` int(11) NOT NULL auto_increment,
1739 `borrowernumber` int(11) NOT NULL default '0',
1740 `message_attribute_id` int(11) default '0',
1741 `days_in_advance` int(11) default '0',
1742 `wants_digets` tinyint(1) NOT NULL default '0',
1743 PRIMARY KEY (`borrower_message_preference_id`),
1744 KEY `borrowernumber` (`borrowernumber`),
1745 KEY `message_attribute_id` (`message_attribute_id`),
1746 CONSTRAINT `borrower_message_preferences_ibfk_1` FOREIGN KEY (`borrowernumber`) REFERENCES `borrowers` (`borrowernumber`) ON DELETE CASCADE ON UPDATE CASCADE,
1747 CONSTRAINT `borrower_message_preferences_ibfk_2` FOREIGN KEY (`message_attribute_id`) REFERENCES `message_attributes` (`message_attribute_id`) ON DELETE CASCADE ON UPDATE CASCADE
1748 ) ENGINE=InnoDB DEFAULT CHARSET=utf8
1749 END_SQL
1751 $dbh->do(<<'END_SQL');
1752 CREATE TABLE `borrower_message_transport_preferences` (
1753 `borrower_message_preference_id` int(11) NOT NULL default '0',
1754 `message_transport_type` varchar(20) NOT NULL default '0',
1755 PRIMARY KEY (`borrower_message_preference_id`,`message_transport_type`),
1756 KEY `message_transport_type` (`message_transport_type`),
1757 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,
1758 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
1759 ) ENGINE=InnoDB DEFAULT CHARSET=utf8
1760 END_SQL
1762 $dbh->do(<<'END_SQL');
1763 CREATE TABLE `message_queue` (
1764 `message_id` int(11) NOT NULL auto_increment,
1765 `borrowernumber` int(11) NOT NULL,
1766 `subject` text,
1767 `content` text,
1768 `message_transport_type` varchar(20) NOT NULL,
1769 `status` enum('sent','pending','failed','deleted') NOT NULL default 'pending',
1770 `time_queued` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
1771 KEY `message_id` (`message_id`),
1772 KEY `borrowernumber` (`borrowernumber`),
1773 KEY `message_transport_type` (`message_transport_type`),
1774 CONSTRAINT `messageq_ibfk_1` FOREIGN KEY (`borrowernumber`) REFERENCES `borrowers` (`borrowernumber`) ON DELETE CASCADE ON UPDATE CASCADE,
1775 CONSTRAINT `messageq_ibfk_2` FOREIGN KEY (`message_transport_type`) REFERENCES `message_transport_types` (`message_transport_type`) ON DELETE RESTRICT ON UPDATE CASCADE
1776 ) ENGINE=InnoDB DEFAULT CHARSET=utf8
1777 END_SQL
1779 $dbh->do(<<'END_SQL');
1780 INSERT INTO `systempreferences`
1781 (variable,value,explanation,options,type)
1782 VALUES
1783 ('EnhancedMessagingPreferences',0,'If ON, allows patrons to select to receive additional messages about items due or nearly due.','','YesNo')
1784 END_SQL
1786 $dbh->do( <<'END_SQL');
1787 INSERT INTO `letter`
1788 (module, code, name, title, content)
1789 VALUES
1790 ('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>>'),
1791 ('circulation','DUEDGST','Item Due Reminder (Digest)','Item Due Reminder','You have <<count>> items due'),
1792 ('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>>'),
1793 ('circulation','PREDUEDGST','Advance Notice of Item Due (Digest)','Advance Notice of Item Due','You have <<count>> items due soon'),
1794 ('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.');
1795 END_SQL
1797 my @sql_scripts = (
1798 'installer/data/mysql/en/mandatory/message_transport_types.sql',
1799 'installer/data/mysql/en/optional/sample_notices_message_attributes.sql',
1800 'installer/data/mysql/en/optional/sample_notices_message_transports.sql',
1803 my $installer = C4::Installer->new();
1804 foreach my $script ( @sql_scripts ) {
1805 my $full_path = $installer->get_file_path_from_name($script);
1806 my $error = $installer->load_sql($full_path);
1807 warn $error if $error;
1810 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";
1811 SetVersion ($DBversion);
1814 $DBversion = "3.00.00.092";
1815 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
1816 $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')");
1817 $dbh->do("INSERT INTO `systempreferences` (variable,value,options,explanation,type) VALUES('AllowHoldsOnDamagedItems', '1', '', 'Allow hold requests to be placed on damaged items', 'YesNo')");
1818 print "Upgrade to $DBversion done (added new AllowOnShelfHolds syspref)\n";
1819 SetVersion ($DBversion);
1822 $DBversion = "3.00.00.093";
1823 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
1824 $dbh->do("ALTER TABLE `items` MODIFY COLUMN `copynumber` VARCHAR(32) DEFAULT NULL");
1825 $dbh->do("ALTER TABLE `deleteditems` MODIFY COLUMN `copynumber` VARCHAR(32) DEFAULT NULL");
1826 print "Upgrade to $DBversion done (Change data type of items.copynumber to allow free text)\n";
1827 SetVersion ($DBversion);
1830 $DBversion = "3.00.00.094";
1831 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
1832 $dbh->do("ALTER TABLE `marc_subfield_structure` MODIFY `tagsubfield` VARCHAR(1) NOT NULL DEFAULT '' COLLATE utf8_bin");
1833 print "Upgrade to $DBversion done (Change Collation of marc_subfield_structure to allow mixed case in subfield labels.)\n";
1834 SetVersion ($DBversion);
1837 $DBversion = "3.00.00.095";
1838 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
1839 if (C4::Context->preference("marcflavour") eq 'MARC21') {
1840 $dbh->do("UPDATE marc_subfield_structure SET authtypecode = 'MEETI_NAME' WHERE authtypecode = 'Meeting Name'");
1841 $dbh->do("UPDATE marc_subfield_structure SET authtypecode = 'CORPO_NAME' WHERE authtypecode = 'CORP0_NAME'");
1843 print "Upgrade to $DBversion done (fix invalid authority types in MARC21 frameworks [bug 2254])\n";
1844 SetVersion ($DBversion);
1847 $DBversion = "3.00.00.096";
1848 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
1849 $sth = $dbh->prepare("SHOW COLUMNS FROM borrower_message_preferences LIKE 'wants_digets'");
1850 $sth->execute();
1851 if (my $row = $sth->fetchrow_hashref) {
1852 $dbh->do("ALTER TABLE borrower_message_preferences CHANGE wants_digets wants_digest tinyint(1) NOT NULL default 0");
1854 print "Upgrade to $DBversion done (fix name borrower_message_preferences.wants_digest)\n";
1855 SetVersion ($DBversion);
1858 $DBversion = '3.00.00.097';
1859 if ( C4::Context->preference('Version') < TransformToNum($DBversion) ) {
1861 $dbh->do('ALTER TABLE message_queue ADD to_address mediumtext default NULL');
1862 $dbh->do('ALTER TABLE message_queue ADD from_address mediumtext default NULL');
1863 $dbh->do('ALTER TABLE message_queue ADD content_type text');
1864 $dbh->do('ALTER TABLE message_queue CHANGE borrowernumber borrowernumber int(11) default NULL');
1866 print "Upgrade to $DBversion done (updating 4 fields in message_queue table)\n";
1867 SetVersion($DBversion);
1870 $DBversion = '3.00.00.098';
1871 if ( C4::Context->preference('Version') < TransformToNum($DBversion) ) {
1873 $dbh->do(q(DELETE FROM message_transport_types WHERE message_transport_type = 'rss'));
1874 $dbh->do(q(DELETE FROM message_transports WHERE message_transport_type = 'rss'));
1876 print "Upgrade to $DBversion done (removing unused RSS message_transport_type)\n";
1877 SetVersion($DBversion);
1880 $DBversion = '3.00.00.099';
1881 if ( C4::Context->preference('Version') < TransformToNum($DBversion) ) {
1882 $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')");
1883 print "Upgrade to $DBversion done (Adding OpacSuppression syspref)\n";
1884 SetVersion($DBversion);
1887 $DBversion = '3.00.00.100';
1888 if ( C4::Context->preference('Version') < TransformToNum($DBversion) ) {
1889 $dbh->do('ALTER TABLE virtualshelves ADD COLUMN lastmodified timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP');
1890 print "Upgrade to $DBversion done (Adding lastmodified column to virtualshelves)\n";
1891 SetVersion($DBversion);
1894 $DBversion = '3.00.00.101';
1895 if ( C4::Context->preference('Version') < TransformToNum($DBversion) ) {
1896 $dbh->do('ALTER TABLE `overduerules` CHANGE `categorycode` `categorycode` VARCHAR(10) NOT NULL');
1897 $dbh->do('ALTER TABLE `deletedborrowers` CHANGE `categorycode` `categorycode` VARCHAR(10) NOT NULL');
1898 print "Upgrade to $DBversion done (Updating columnd definitions for patron category codes in notice/statsu triggers and deletedborrowers tables.)\n";
1899 SetVersion($DBversion);
1902 $DBversion = '3.00.00.102';
1903 if ( C4::Context->preference('Version') < TransformToNum($DBversion) ) {
1904 $dbh->do('ALTER TABLE serialitems MODIFY `serialid` int(11) NOT NULL AFTER itemnumber' );
1905 $dbh->do('ALTER TABLE serialitems DROP KEY serialididx' );
1906 $dbh->do('ALTER TABLE serialitems ADD CONSTRAINT UNIQUE KEY serialitemsidx (itemnumber)' );
1907 # before setting constraint, delete any unvalid data
1908 $dbh->do('DELETE from serialitems WHERE serialid not in (SELECT serial.serialid FROM serial)');
1909 $dbh->do('ALTER TABLE serialitems ADD CONSTRAINT serialitems_sfk_1 FOREIGN KEY (serialid) REFERENCES serial (serialid) ON DELETE CASCADE ON UPDATE CASCADE' );
1910 print "Upgrade to $DBversion done (Updating serialitems table to allow for multiple items per serial fixing kohabug 2380)\n";
1911 SetVersion($DBversion);
1914 $DBversion = "3.00.00.103";
1915 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
1916 $dbh->do("DELETE FROM systempreferences WHERE variable='serialsadditems'");
1917 print "Upgrade to $DBversion done ( Verifying the removal of serialsadditems from syspref fixing kohabug 2219)\n";
1918 SetVersion ($DBversion);
1921 $DBversion = "3.00.00.104";
1922 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
1923 $dbh->do("DELETE FROM systempreferences WHERE variable='noOPACHolds'");
1924 print "Upgrade to $DBversion done (remove superseded 'noOPACHolds' system preference per bug 2413)\n";
1925 SetVersion ($DBversion);
1928 $DBversion = '3.00.00.105';
1929 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
1931 # it is possible that this syspref is already defined since the feature was added some time ago.
1932 unless ( $dbh->do(q(SELECT variable FROM systempreferences WHERE variable = 'SMSSendDriver')) ) {
1933 $dbh->do(<<'END_SQL');
1934 INSERT INTO `systempreferences`
1935 (variable,value,explanation,options,type)
1936 VALUES
1937 ('SMSSendDriver','','Sets which SMS::Send driver is used to send SMS messages.','','free')
1938 END_SQL
1940 print "Upgrade to $DBversion done (added SMSSendDriver system preference)\n";
1941 SetVersion($DBversion);
1944 $DBversion = "3.00.00.106";
1945 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
1946 $dbh->do("DELETE FROM systempreferences WHERE variable='noOPACHolds'");
1948 # db revision 105 didn't apply correctly, so we're rolling this into 106
1949 $dbh->do("INSERT INTO `systempreferences`
1950 (variable,value,explanation,options,type)
1951 VALUES
1952 ('SMSSendDriver','','Sets which SMS::Send driver is used to send SMS messages.','','free')");
1954 print "Upgrade to $DBversion done (remove default '0000-00-00' in subscriptionhistory.enddate field)\n";
1955 $dbh->do("ALTER TABLE `subscriptionhistory` CHANGE `enddate` `enddate` DATE NULL DEFAULT NULL ");
1956 $dbh->do("UPDATE subscriptionhistory SET enddate=NULL WHERE enddate='0000-00-00'");
1957 SetVersion ($DBversion);
1960 $DBversion = '3.00.00.107';
1961 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
1962 $dbh->do(<<'END_SQL');
1963 UPDATE systempreferences
1964 SET explanation = CONCAT( explanation, '. WARNING: this feature is very resource consuming on collections with large numbers of items.' )
1965 WHERE variable = 'OPACShelfBrowser'
1966 AND explanation NOT LIKE '%WARNING%'
1967 END_SQL
1968 $dbh->do(<<'END_SQL');
1969 UPDATE systempreferences
1970 SET explanation = CONCAT( explanation, '. WARNING: this feature is very resource consuming.' )
1971 WHERE variable = 'CataloguingLog'
1972 AND explanation NOT LIKE '%WARNING%'
1973 END_SQL
1974 $dbh->do(<<'END_SQL');
1975 UPDATE systempreferences
1976 SET explanation = CONCAT( explanation, '. WARNING: using NoZebra on even modest sized collections is very slow.' )
1977 WHERE variable = 'NoZebra'
1978 AND explanation NOT LIKE '%WARNING%'
1979 END_SQL
1980 print "Upgrade to $DBversion done (warning added to OPACShelfBrowser system preference)\n";
1981 SetVersion ($DBversion);
1984 $DBversion = '3.01.00.000';
1985 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
1986 print "Upgrade to $DBversion done (start of 3.1)\n";
1987 SetVersion ($DBversion);
1990 $DBversion = '3.01.00.001';
1991 if ( C4::Context->preference('Version') < TransformToNum($DBversion) ) {
1992 $dbh->do("
1993 CREATE TABLE hold_fill_targets (
1994 `borrowernumber` int(11) NOT NULL,
1995 `biblionumber` int(11) NOT NULL,
1996 `itemnumber` int(11) NOT NULL,
1997 `source_branchcode` varchar(10) default NULL,
1998 `item_level_request` tinyint(4) NOT NULL default 0,
1999 PRIMARY KEY `itemnumber` (`itemnumber`),
2000 KEY `bib_branch` (`biblionumber`, `source_branchcode`),
2001 CONSTRAINT `hold_fill_targets_ibfk_1` FOREIGN KEY (`borrowernumber`)
2002 REFERENCES `borrowers` (`borrowernumber`) ON DELETE CASCADE ON UPDATE CASCADE,
2003 CONSTRAINT `hold_fill_targets_ibfk_2` FOREIGN KEY (`biblionumber`)
2004 REFERENCES `biblio` (`biblionumber`) ON DELETE CASCADE ON UPDATE CASCADE,
2005 CONSTRAINT `hold_fill_targets_ibfk_3` FOREIGN KEY (`itemnumber`)
2006 REFERENCES `items` (`itemnumber`) ON DELETE CASCADE ON UPDATE CASCADE,
2007 CONSTRAINT `hold_fill_targets_ibfk_4` FOREIGN KEY (`source_branchcode`)
2008 REFERENCES `branches` (`branchcode`) ON DELETE CASCADE ON UPDATE CASCADE
2009 ) ENGINE=InnoDB DEFAULT CHARSET=utf8
2011 $dbh->do("
2012 ALTER TABLE tmp_holdsqueue
2013 ADD item_level_request tinyint(4) NOT NULL default 0
2016 print "Upgrade to $DBversion done (add hold_fill_targets table and a column to tmp_holdsqueue)\n";
2017 SetVersion($DBversion);
2020 $DBversion = '3.01.00.002';
2021 if ( C4::Context->preference('Version') < TransformToNum($DBversion) ) {
2022 # use statistics where available
2023 $dbh->do("
2024 ALTER TABLE statistics ADD KEY tmp_stats (type, itemnumber, borrowernumber)
2026 $dbh->do("
2027 UPDATE issues iss
2028 SET issuedate = (
2029 SELECT max(datetime)
2030 FROM statistics
2031 WHERE type = 'issue'
2032 AND itemnumber = iss.itemnumber
2033 AND borrowernumber = iss.borrowernumber
2035 WHERE issuedate IS NULL;
2037 $dbh->do("ALTER TABLE statistics DROP KEY tmp_stats");
2039 # default to last renewal date
2040 $dbh->do("
2041 UPDATE issues
2042 SET issuedate = lastreneweddate
2043 WHERE issuedate IS NULL
2044 and lastreneweddate IS NOT NULL
2047 my $num_bad_issuedates = $dbh->selectrow_array("SELECT COUNT(*) FROM issues WHERE issuedate IS NULL");
2048 if ($num_bad_issuedates > 0) {
2049 print STDERR "After the upgrade to $DBversion, there are still $num_bad_issuedates loan(s) with a NULL (blank) loan date. ",
2050 "Please check the issues table in your database.";
2052 print "Upgrade to $DBversion done (bug 2582: set null issues.issuedate to lastreneweddate)\n";
2053 SetVersion($DBversion);
2056 $DBversion = "3.01.00.003";
2057 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
2058 $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')");
2059 print "Upgrade to $DBversion done (add new syspref)\n";
2060 SetVersion ($DBversion);
2063 $DBversion = '3.01.00.004';
2064 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
2065 $dbh->do("INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES ('OPACDisplayRequestPriority','0','Show patrons the priority level on holds in the OPAC','','YesNo')");
2066 print "Upgrade to $DBversion done (added OPACDisplayRequestPriority system preference)\n";
2067 SetVersion ($DBversion);
2070 $DBversion = '3.01.00.005';
2071 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
2072 $dbh->do("
2073 INSERT INTO `letter` (module, code, name, title, content)
2074 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>>')
2076 $dbh->do("INSERT INTO `message_attributes` (message_attribute_id, message_name, takes_days) values(4, 'Hold Filled', 0)");
2077 $dbh->do("INSERT INTO `message_transports` (message_attribute_id, message_transport_type, is_digest, letter_module, letter_code) values(4, 'sms', 0, 'reserves', 'HOLD')");
2078 $dbh->do("INSERT INTO `message_transports` (message_attribute_id, message_transport_type, is_digest, letter_module, letter_code) values(4, 'email', 0, 'reserves', 'HOLD')");
2079 print "Upgrade to $DBversion done (Add letter for holds notifications)\n";
2080 SetVersion ($DBversion);
2083 $DBversion = '3.01.00.006';
2084 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
2085 $dbh->do("ALTER TABLE `biblioitems` ADD KEY issn (issn)");
2086 print "Upgrade to $DBversion done (add index on biblioitems.issn)\n";
2087 SetVersion ($DBversion);
2090 $DBversion = "3.01.00.007";
2091 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
2092 $dbh->do("UPDATE `systempreferences` SET options='70|10' WHERE variable='intranetmainUserblock'");
2093 $dbh->do("UPDATE `systempreferences` SET options='70|10' WHERE variable='intranetuserjs'");
2094 $dbh->do("UPDATE `systempreferences` SET options='70|10' WHERE variable='opacheader'");
2095 $dbh->do("UPDATE `systempreferences` SET options='70|10' WHERE variable='OpacMainUserBlock'");
2096 $dbh->do("UPDATE `systempreferences` SET options='70|10' WHERE variable='OpacNav'");
2097 $dbh->do("UPDATE `systempreferences` SET options='70|10' WHERE variable='opacuserjs'");
2098 $dbh->do("UPDATE `systempreferences` SET options='30|10', type='Textarea' WHERE variable='OAI-PMH:Set'");
2099 $dbh->do("UPDATE `systempreferences` SET options='50' WHERE variable='intranetstylesheet'");
2100 $dbh->do("UPDATE `systempreferences` SET options='50' WHERE variable='intranetcolorstylesheet'");
2101 $dbh->do("UPDATE `systempreferences` SET options='10' WHERE variable='globalDueDate'");
2102 $dbh->do("UPDATE `systempreferences` SET type='Integer' WHERE variable='numSearchResults'");
2103 $dbh->do("UPDATE `systempreferences` SET type='Integer' WHERE variable='OPACnumSearchResults'");
2104 $dbh->do("UPDATE `systempreferences` SET type='Integer' WHERE variable='ReservesMaxPickupDelay'");
2105 $dbh->do("UPDATE `systempreferences` SET type='Integer' WHERE variable='TransfersMaxDaysWarning'");
2106 $dbh->do("UPDATE `systempreferences` SET type='Integer' WHERE variable='StaticHoldsQueueWeight'");
2107 $dbh->do("UPDATE `systempreferences` SET type='Integer' WHERE variable='holdCancelLength'");
2108 $dbh->do("UPDATE `systempreferences` SET type='Integer' WHERE variable='XISBNDailyLimit'");
2109 $dbh->do("UPDATE `systempreferences` SET type='Float' WHERE variable='gist'");
2110 $dbh->do("UPDATE `systempreferences` SET type='Free' WHERE variable='BakerTaylorUsername'");
2111 $dbh->do("UPDATE `systempreferences` SET type='Free' WHERE variable='BakerTaylorPassword'");
2112 $dbh->do("UPDATE `systempreferences` SET type='Textarea', options='70|10' WHERE variable='ISBD'");
2113 $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'");
2114 print "Upgrade to $DBversion done (fix display of many sysprefs)\n";
2115 SetVersion ($DBversion);
2118 $DBversion = '3.01.00.008';
2119 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
2121 $dbh->do("CREATE TABLE branch_transfer_limits (
2122 limitId int(8) NOT NULL auto_increment,
2123 toBranch varchar(4) NOT NULL,
2124 fromBranch varchar(4) NOT NULL,
2125 itemtype varchar(4) NOT NULL,
2126 PRIMARY KEY (limitId)
2127 ) ENGINE=InnoDB DEFAULT CHARSET=utf8"
2130 $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')");
2132 print "Upgrade to $DBversion done (added branch_transfer_limits table and UseBranchTransferLimits system preference)\n";
2133 SetVersion ($DBversion);
2136 $DBversion = "3.01.00.009";
2137 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
2138 $dbh->do("ALTER TABLE permissions MODIFY `code` varchar(64) DEFAULT NULL");
2139 $dbh->do("ALTER TABLE user_permissions MODIFY `code` varchar(64) DEFAULT NULL");
2140 $dbh->do("INSERT INTO permissions (module_bit, code, description) VALUES ( 1, 'circulate_remaining_permissions', 'Remaining circulation permissions')");
2141 $dbh->do("INSERT INTO permissions (module_bit, code, description) VALUES ( 1, 'override_renewals', 'Override blocked renewals')");
2142 print "Upgrade to $DBversion done (added subpermissions for circulate permission)\n";
2145 $DBversion = '3.01.00.010';
2146 if ( C4::Context->preference('Version') < TransformToNum($DBversion) ) {
2147 $dbh->do("ALTER TABLE `borrower_attributes` MODIFY COLUMN `attribute` VARCHAR(64) DEFAULT NULL");
2148 $dbh->do("ALTER TABLE `borrower_attributes` MODIFY COLUMN `password` VARCHAR(64) DEFAULT NULL");
2149 print "Upgrade to $DBversion done (bug 2687: increase length of borrower attribute fields)\n";
2150 SetVersion ($DBversion);
2153 $DBversion = '3.01.00.011';
2154 if ( C4::Context->preference('Version') < TransformToNum($DBversion) ) {
2156 # Yes, the old value was ^M terminated.
2157 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);";
2159 my $intranetuserjs = C4::Context->preference('intranetuserjs');
2160 if ($intranetuserjs and $intranetuserjs eq $bad_value) {
2161 my $sql = <<'END_SQL';
2162 UPDATE systempreferences
2163 SET value = ''
2164 WHERE variable = 'intranetuserjs'
2165 END_SQL
2166 $dbh->do($sql);
2168 print "Upgrade to $DBversion done (removed bogus intranetuserjs syspref)\n";
2169 SetVersion($DBversion);
2172 $DBversion = "3.01.00.012";
2173 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
2174 $dbh->do("INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES('AllowHoldPolicyOverride', '0', 'Allow staff to override hold policies when placing holds',NULL,'YesNo')");
2175 $dbh->do("
2176 CREATE TABLE `branch_item_rules` (
2177 `branchcode` varchar(10) NOT NULL,
2178 `itemtype` varchar(10) NOT NULL,
2179 `holdallowed` tinyint(1) default NULL,
2180 PRIMARY KEY (`itemtype`,`branchcode`),
2181 KEY `branch_item_rules_ibfk_2` (`branchcode`),
2182 CONSTRAINT `branch_item_rules_ibfk_1` FOREIGN KEY (`itemtype`) REFERENCES `itemtypes` (`itemtype`) ON DELETE CASCADE ON UPDATE CASCADE,
2183 CONSTRAINT `branch_item_rules_ibfk_2` FOREIGN KEY (`branchcode`) REFERENCES `branches` (`branchcode`) ON DELETE CASCADE ON UPDATE CASCADE
2184 ) ENGINE=InnoDB DEFAULT CHARSET=utf8
2186 $dbh->do("
2187 CREATE TABLE `default_branch_item_rules` (
2188 `itemtype` varchar(10) NOT NULL,
2189 `holdallowed` tinyint(1) default NULL,
2190 PRIMARY KEY (`itemtype`),
2191 CONSTRAINT `default_branch_item_rules_ibfk_1` FOREIGN KEY (`itemtype`) REFERENCES `itemtypes` (`itemtype`) ON DELETE CASCADE ON UPDATE CASCADE
2192 ) ENGINE=InnoDB DEFAULT CHARSET=utf8
2194 $dbh->do("
2195 ALTER TABLE default_branch_circ_rules
2196 ADD COLUMN holdallowed tinyint(1) NULL
2198 $dbh->do("
2199 ALTER TABLE default_circ_rules
2200 ADD COLUMN holdallowed tinyint(1) NULL
2202 print "Upgrade to $DBversion done (Add tables and system preferences for holds policies)\n";
2203 SetVersion ($DBversion);
2206 $DBversion = '3.01.00.013';
2207 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
2208 $dbh->do("
2209 CREATE TABLE item_circulation_alert_preferences (
2210 id int(11) AUTO_INCREMENT,
2211 branchcode varchar(10) NOT NULL,
2212 categorycode varchar(10) NOT NULL,
2213 item_type varchar(10) NOT NULL,
2214 notification varchar(16) NOT NULL,
2215 PRIMARY KEY (id),
2216 KEY (branchcode, categorycode, item_type, notification)
2217 ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
2220 $dbh->do(q{ ALTER TABLE `message_queue` ADD metadata text DEFAULT NULL AFTER content; });
2221 $dbh->do(q{ ALTER TABLE `message_queue` ADD letter_code varchar(64) DEFAULT NULL AFTER metadata; });
2223 $dbh->do(q{
2224 INSERT INTO `letter` (`module`, `code`, `name`, `title`, `content`) VALUES
2225 ('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.');
2227 $dbh->do(q{
2228 INSERT INTO `letter` (`module`, `code`, `name`, `title`, `content`) VALUES
2229 ('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>>.');
2232 $dbh->do(q{INSERT INTO message_attributes (message_attribute_id, message_name, takes_days) VALUES (5, 'Item Check-in', 0);});
2233 $dbh->do(q{INSERT INTO message_attributes (message_attribute_id, message_name, takes_days) VALUES (6, 'Item Checkout', 0);});
2235 $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');});
2236 $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');});
2237 $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');});
2238 $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');});
2240 print "Upgrade to $DBversion done (data for Email Checkout Slips project)\n";
2241 SetVersion ($DBversion);
2244 $DBversion = "3.01.00.014";
2245 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
2246 $dbh->do("ALTER TABLE `branch_transfer_limits` CHANGE `itemtype` `itemtype` VARCHAR( 4 ) CHARACTER SET utf8 COLLATE utf8_general_ci NULL");
2247 $dbh->do("ALTER TABLE `branch_transfer_limits` ADD `ccode` VARCHAR( 10 ) NULL ;");
2248 $dbh->do("INSERT INTO `systempreferences` ( `variable` , `value` , `options` , `explanation` , `type` )
2249 VALUES (
2250 'BranchTransferLimitsType', 'ccode', 'itemtype|ccode', 'When using branch transfer limits, choose whether to limit by itemtype or collection code.', 'Choice'
2251 );");
2253 print "Upgrade to $DBversion done ( Updated table for Branch Transfer Limits)\n";
2254 SetVersion ($DBversion);
2257 $DBversion = '3.01.00.015';
2258 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
2259 $dbh->do("INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES ('SyndeticsClientCode', '0', 'Client Code for using Syndetics Solutions content','','free')");
2261 $dbh->do("INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES ('SyndeticsEnabled', '0', 'Turn on Syndetics Enhanced Content','','YesNo')");
2263 $dbh->do("INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES ('SyndeticsCoverImages', '0', 'Display Cover Images from Syndetics','','YesNo')");
2265 $dbh->do("INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES ('SyndeticsTOC', '0', 'Display Table of Content information from Syndetics','','YesNo')");
2267 $dbh->do("INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES ('SyndeticsSummary', '0', 'Display Summary Information from Syndetics','','YesNo')");
2269 $dbh->do("INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES ('SyndeticsEditions', '0', 'Display Editions from Syndetics','','YesNo')");
2271 $dbh->do("INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES ('SyndeticsExcerpt', '0', 'Display Excerpts and first chapters on OPAC from Syndetics','','YesNo')");
2273 $dbh->do("INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES ('SyndeticsReviews', '0', 'Display Reviews on OPAC from Syndetics','','YesNo')");
2275 $dbh->do("INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES ('SyndeticsAuthorNotes', '0', 'Display Notes about the Author on OPAC from Syndetics','','YesNo')");
2277 $dbh->do("INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES ('SyndeticsAwards', '0', 'Display Awards on OPAC from Syndetics','','YesNo')");
2279 $dbh->do("INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES ('SyndeticsSeries', '0', 'Display Series information on OPAC from Syndetics','','YesNo')");
2281 $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')");
2283 $dbh->do("INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES ('OPACAmazonCoverImages', '0', 'Display cover images on OPAC from Amazon Web Services','','YesNo')");
2285 $dbh->do("INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES ('AmazonCoverImages', '0', 'Display Cover Images in Staff Client from Amazon Web Services','','YesNo')");
2287 $dbh->do("UPDATE systempreferences SET variable='AmazonEnabled' WHERE variable = 'AmazonContent'");
2289 $dbh->do("UPDATE systempreferences SET variable='OPACAmazonEnabled' WHERE variable = 'OPACAmazonContent'");
2291 print "Upgrade to $DBversion done (added Syndetics Enhanced Content system preferences)\n";
2292 SetVersion ($DBversion);
2295 $DBversion = "3.01.00.016";
2296 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
2297 $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')");
2298 print "Upgrade to $DBversion done (Added Babeltheque syspref)\n";
2299 SetVersion ($DBversion);
2302 $DBversion = "3.01.00.017";
2303 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
2304 $dbh->do("ALTER TABLE `subscription` ADD `staffdisplaycount` VARCHAR(10) NULL;");
2305 $dbh->do("ALTER TABLE `subscription` ADD `opacdisplaycount` VARCHAR(10) NULL;");
2306 $dbh->do("INSERT INTO `systempreferences` ( `variable` , `value` , `options` , `explanation` , `type` )
2307 VALUES (
2308 'StaffSerialIssueDisplayCount', '3', '', 'Number of serial issues to display per subscription in the Staff client', 'Integer'
2309 );");
2310 $dbh->do("INSERT INTO `systempreferences` ( `variable` , `value` , `options` , `explanation` , `type` )
2311 VALUES (
2312 'OPACSerialIssueDisplayCount', '3', '', 'Number of serial issues to display per subscription in the OPAC', 'Integer'
2313 );");
2315 print "Upgrade to $DBversion done ( Updated table for Serials Display)\n";
2316 SetVersion ($DBversion);
2319 $DBversion = "3.01.00.018";
2320 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
2321 $dbh->do("ALTER TABLE deletedborrowers ADD `smsalertnumber` varchar(50) default NULL");
2322 print "Upgrade to $DBversion done (added deletedborrowers.smsalertnumber, missed in 3.00.00.091)\n";
2323 SetVersion ($DBversion);
2326 $DBversion = "3.01.00.019";
2327 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
2328 $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')");
2329 print "Upgrade to $DBversion done (adding OPACShowCheckoutName systempref)\n";
2330 SetVersion ($DBversion);
2333 $DBversion = "3.01.00.020";
2334 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
2335 $dbh->do("INSERT INTO systempreferences (variable,value,explanation,options,type)VALUES('LibraryThingForLibrariesID','','See:http://librarything.com/forlibraries/','','free')");
2336 $dbh->do("INSERT INTO systempreferences (variable,value,explanation,options,type)VALUES('LibraryThingForLibrariesEnabled','0','Enable or Disable Library Thing for Libraries Features','','YesNo')");
2337 $dbh->do("INSERT INTO systempreferences (variable,value,explanation,options,type)VALUES('LibraryThingForLibrariesTabbedView','0','Put LibraryThingForLibraries Content in Tabs.','','YesNo')");
2338 print "Upgrade to $DBversion done (adding LibraryThing for Libraries sysprefs)\n";
2339 SetVersion ($DBversion);
2342 $DBversion = "3.01.00.021";
2343 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
2344 my $enable_reviews = C4::Context->preference('OPACAmazonEnabled') ? '1' : '0';
2345 $dbh->do("INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES ('OPACAmazonReviews', '$enable_reviews', 'Display Amazon readers reviews on OPAC','','YesNo')");
2346 print "Upgrade to $DBversion done (adding OPACAmazonReviews syspref)\n";
2347 SetVersion ($DBversion);
2350 $DBversion = '3.01.00.022';
2351 if ( C4::Context->preference('Version') < TransformToNum($DBversion) ) {
2352 $dbh->do("ALTER TABLE `labels_conf` MODIFY COLUMN `formatstring` mediumtext DEFAULT NULL");
2353 print "Upgrade to $DBversion done (bug 2945: increase size of labels_conf.formatstring)\n";
2354 SetVersion ($DBversion);
2357 $DBversion = '3.01.00.023';
2358 if ( C4::Context->preference('Version') < TransformToNum($DBversion) ) {
2359 $dbh->do("ALTER TABLE biblioitems MODIFY COLUMN isbn VARCHAR(30) DEFAULT NULL");
2360 $dbh->do("ALTER TABLE deletedbiblioitems MODIFY COLUMN isbn VARCHAR(30) DEFAULT NULL");
2361 $dbh->do("ALTER TABLE import_biblios MODIFY COLUMN isbn VARCHAR(30) DEFAULT NULL");
2362 $dbh->do("ALTER TABLE suggestions MODIFY COLUMN isbn VARCHAR(30) DEFAULT NULL");
2363 print "Upgrade to $DBversion done (bug 2765: increase width of isbn column in several tables)\n";
2364 SetVersion ($DBversion);
2367 $DBversion = "3.01.00.024";
2368 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
2369 $dbh->do("ALTER TABLE labels MODIFY COLUMN batch_id int(10) NOT NULL default 1;");
2370 print "Upgrade to $DBversion done (change labels.batch_id from varchar to int)\n";
2371 SetVersion ($DBversion);
2374 $DBversion = '3.01.00.025';
2375 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
2376 $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')");
2378 print "Upgrade to $DBversion done (added ceilingDueDate system preference)\n";
2379 SetVersion ($DBversion);
2382 $DBversion = '3.01.00.026';
2383 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
2384 $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')");
2386 print "Upgrade to $DBversion done (added numReturnedItemsToShow system preference)\n";
2387 SetVersion ($DBversion);
2390 $DBversion = '3.01.00.027';
2391 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
2392 $dbh->do("ALTER TABLE zebraqueue CHANGE `biblio_auth_number` `biblio_auth_number` bigint(20) unsigned NOT NULL default 0");
2393 print "Upgrade to $DBversion done (Increased size of zebraqueue biblio_auth_number to address bug 3148.)\n";
2394 SetVersion ($DBversion);
2397 $DBversion = '3.01.00.028';
2398 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
2399 my $enable_reviews = C4::Context->preference('AmazonEnabled') ? '1' : '0';
2400 $dbh->do("INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES ('AmazonReviews', '$enable_reviews', 'Display Amazon reviews on staff interface','','YesNo')");
2401 print "Upgrade to $DBversion done (added AmazonReviews)\n";
2402 SetVersion ($DBversion);
2405 $DBversion = '3.01.00.029';
2406 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
2407 $dbh->do(q( UPDATE language_rfc4646_to_iso639
2408 SET iso639_2_code = 'spa'
2409 WHERE rfc4646_subtag = 'es'
2410 AND iso639_2_code = 'rus' )
2412 print "Upgrade to $DBversion done (fixed bug 2599: using Spanish search limit retrieves Russian results)\n";
2413 SetVersion ($DBversion);
2416 $DBversion = "3.01.00.030";
2417 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
2418 $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')");
2419 print "Upgrade to $DBversion done (added AllowNotForLoanOverride system preference)\n";
2420 SetVersion ($DBversion);
2423 $DBversion = "3.01.00.031";
2424 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
2425 $dbh->do("ALTER TABLE branch_transfer_limits
2426 MODIFY toBranch varchar(10) NOT NULL,
2427 MODIFY fromBranch varchar(10) NOT NULL,
2428 MODIFY itemtype varchar(10) NULL");
2429 print "Upgrade to $DBversion done (fix column widths in branch_transfer_limits)\n";
2430 SetVersion ($DBversion);
2433 $DBversion = "3.01.00.032";
2434 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
2435 $dbh->do(<<ENDOFRENEWAL);
2436 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');
2437 ENDOFRENEWAL
2438 print "Upgrade to $DBversion done (Change the field)\n";
2439 SetVersion ($DBversion);
2442 $DBversion = "3.01.00.033";
2443 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
2444 $dbh->do(q/
2445 ALTER TABLE borrower_message_preferences
2446 MODIFY borrowernumber int(11) default NULL,
2447 ADD categorycode varchar(10) default NULL AFTER borrowernumber,
2448 ADD KEY `categorycode` (`categorycode`),
2449 ADD CONSTRAINT `borrower_message_preferences_ibfk_3`
2450 FOREIGN KEY (`categorycode`) REFERENCES `categories` (`categorycode`)
2451 ON DELETE CASCADE ON UPDATE CASCADE
2453 print "Upgrade to $DBversion done (DB changes to allow patron category defaults for messaging preferences)\n";
2454 SetVersion ($DBversion);
2457 $DBversion = "3.01.00.034";
2458 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
2459 $dbh->do("ALTER TABLE `subscription` ADD COLUMN `graceperiod` INT(11) NOT NULL default '0';");
2460 print "Upgrade to $DBversion done (Adding graceperiod column to subscription table)\n";
2461 SetVersion ($DBversion);
2464 $DBversion = '3.01.00.035';
2465 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
2466 $dbh->do(q{ ALTER TABLE `subscription` ADD location varchar(80) NULL DEFAULT '' AFTER callnumber; });
2467 print "Upgrade to $DBversion done (Adding location to subscription table)\n";
2468 SetVersion ($DBversion);
2471 $DBversion = '3.01.00.036';
2472 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
2473 $dbh->do("UPDATE systempreferences SET explanation = 'Choose the default detail view in the staff interface; choose between normal, labeled_marc, marc or isbd'
2474 WHERE variable = 'IntranetBiblioDefaultView'
2475 AND explanation = 'IntranetBiblioDefaultView'");
2476 $dbh->do("UPDATE systempreferences SET type = 'Choice', options = 'normal|marc|isbd|labeled_marc'
2477 WHERE variable = 'IntranetBiblioDefaultView'");
2478 $dbh->do("INSERT INTO systempreferences (variable,value,explanation,options,type)VALUES('viewISBD','1','Allow display of ISBD view of bibiographic records','','YesNo')");
2479 $dbh->do("INSERT INTO systempreferences (variable,value,explanation,options,type)VALUES('viewLabeledMARC','0','Allow display of labeled MARC view of bibiographic records','','YesNo')");
2480 $dbh->do("INSERT INTO systempreferences (variable,value,explanation,options,type)VALUES('viewMARC','1','Allow display of MARC view of bibiographic records','','YesNo')");
2481 print "Upgrade to $DBversion done (new viewISBD, viewLabeledMARC, viewMARC sysprefs and tweak IntranetBiblioDefaultView)\n";
2482 SetVersion ($DBversion);
2485 $DBversion = '3.01.00.037';
2486 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
2487 $dbh->do('ALTER TABLE authorised_values ADD KEY `lib` (`lib`)');
2488 $dbh->do("INSERT INTO systempreferences (variable,value,explanation,options,type)VALUES('FilterBeforeOverdueReport','0','Do not run overdue report until filter selected','','YesNo')");
2489 SetVersion ($DBversion);
2490 print "Upgrade to $DBversion done (added FilterBeforeOverdueReport syspref and new index on authorised_values)\n";
2493 $DBversion = "3.01.00.038";
2494 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
2495 # update branches table
2497 $dbh->do("ALTER TABLE branches ADD `branchzip` varchar(25) default NULL AFTER `branchaddress3`");
2498 $dbh->do("ALTER TABLE branches ADD `branchcity` mediumtext AFTER `branchzip`");
2499 $dbh->do("ALTER TABLE branches ADD `branchcountry` text AFTER `branchcity`");
2500 $dbh->do("ALTER TABLE branches ADD `branchurl` mediumtext AFTER `branchemail`");
2501 $dbh->do("ALTER TABLE branches ADD `branchnotes` mediumtext AFTER `branchprinter`");
2502 print "Upgrade to $DBversion done (add ZIP, city, country, URL, and notes column to branches)\n";
2503 SetVersion ($DBversion);
2506 $DBversion = '3.01.00.039';
2507 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
2508 $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')");
2509 $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')");
2510 SetVersion ($DBversion);
2511 print "Upgrade to $DBversion done (added SpineLabelFormat and SpineLabelAutoPrint sysprefs)\n";
2514 $DBversion = '3.01.00.040';
2515 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
2516 $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')");
2517 $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')");
2518 SetVersion ($DBversion);
2519 print "Upgrade to $DBversion done (AllowHoldDateInFuture and OPACAllowHoldDateInFuture sysprefs)\n";
2522 $DBversion = '3.01.00.041';
2523 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
2524 $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')");
2525 SetVersion ($DBversion);
2526 print "Upgrade to $DBversion done (added AWSPrivateKey syspref - note that if you use enhanced content from Amazon, this should be set right away.)\n";
2529 $DBversion = '3.01.00.042';
2530 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
2531 $dbh->do("INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('OPACFineNoRenewals','99999','Fine Limit above which user canmot renew books via OPAC','','Integer')");
2532 SetVersion ($DBversion);
2533 print "Upgrade to $DBversion done (added OPACFineNoRenewals syspref)\n";
2536 $DBversion = '3.01.00.043';
2537 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
2538 $dbh->do('ALTER TABLE items ADD COLUMN permanent_location VARCHAR(80) DEFAULT NULL AFTER location');
2539 $dbh->do('UPDATE items SET permanent_location = location');
2540 $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 )', '')");
2541 $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')");
2542 $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')");
2543 SetVersion ($DBversion);
2544 print "Upgrade to $DBversion done (amended Item added NewItemsDefaultLocation, InProcessingToShelvingCart, ReturnToShelvingCart sysprefs)\n";
2547 $DBversion = '3.01.00.044';
2548 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
2549 $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')");
2550 SetVersion ($DBversion);
2551 print "Upgrade to $DBversion done (added DisplayClearScreenButton system preference)\n";
2554 $DBversion = '3.01.00.045';
2555 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
2556 $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')");
2557 SetVersion ($DBversion);
2558 print "Upgrade to $DBversion done (added a preference to hide the patrons name in the staff catalog)\n";
2561 $DBversion = "3.01.00.046";
2562 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
2563 # update borrowers table
2565 $dbh->do("ALTER TABLE borrowers ADD `country` text AFTER zipcode");
2566 $dbh->do("ALTER TABLE borrowers ADD `B_country` text AFTER B_zipcode");
2567 $dbh->do("ALTER TABLE deletedborrowers ADD `country` text AFTER zipcode");
2568 $dbh->do("ALTER TABLE deletedborrowers ADD `B_country` text AFTER B_zipcode");
2569 print "Upgrade to $DBversion done (add country and B_country to borrowers)\n";
2570 SetVersion ($DBversion);
2573 $DBversion = '3.01.00.047';
2574 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
2575 $dbh->do("ALTER TABLE items MODIFY itemcallnumber varchar(255);");
2576 $dbh->do("ALTER TABLE deleteditems MODIFY itemcallnumber varchar(255);");
2577 $dbh->do("ALTER TABLE tmp_holdsqueue MODIFY itemcallnumber varchar(255);");
2578 SetVersion ($DBversion);
2579 print " Upgrade to $DBversion done (bug 2761: change max length of itemcallnumber to 255 from 30)\n";
2582 $DBversion = '3.01.00.048';
2583 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
2584 $dbh->do("UPDATE userflags SET flagdesc='View Catalog (Librarian Interface)' WHERE bit=2;");
2585 $dbh->do("UPDATE userflags SET flagdesc='Edit Catalog (Modify bibliographic/holdings data)' WHERE bit=9;");
2586 $dbh->do("UPDATE userflags SET flagdesc='Allow to edit authorities' WHERE bit=14;");
2587 $dbh->do("UPDATE userflags SET flagdesc='Allow to access to the reports module' WHERE bit=16;");
2588 $dbh->do("UPDATE userflags SET flagdesc='Allow to manage serials subscriptions' WHERE bit=15;");
2589 SetVersion ($DBversion);
2590 print " Upgrade to $DBversion done (bug 2611: fix spelling/capitalization in permission flag descriptions)\n";
2593 $DBversion = '3.01.00.049';
2594 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
2595 $dbh->do("UPDATE permissions SET description = 'Perform inventory (stocktaking) of your catalog' WHERE code = 'inventory';");
2596 SetVersion ($DBversion);
2597 print "Upgrade to $DBversion done (bug 2611: changed catalogue to catalog per the standard)\n";
2600 $DBversion = '3.01.00.050';
2601 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
2602 $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&amp;title=TITLE&amp;st=xl&amp;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');");
2603 SetVersion ($DBversion);
2604 print "Upgrade to $DBversion done (bug 1934: Add OPACSearchForTitleIn syspref)\n";
2607 $DBversion = '3.01.00.051';
2608 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
2609 $dbh->do("UPDATE systempreferences SET explanation='Fine limit above which user cannot renew books via OPAC' WHERE variable='OPACFineNoRenewals';");
2610 $dbh->do("UPDATE systempreferences SET explanation='If set to ON, a clear screen button will appear on the circulation page.' WHERE variable='DisplayClearScreenButton';");
2611 SetVersion ($DBversion);
2612 print "Upgrade to $DBversion done (fixed typos in new sysprefs)\n";
2615 $DBversion = '3.01.00.052';
2616 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
2617 $dbh->do('ALTER TABLE deleteditems ADD COLUMN permanent_location VARCHAR(80) DEFAULT NULL AFTER location');
2618 SetVersion ($DBversion);
2619 print "Upgrade to $DBversion done (bug 3481: add permanent_location column to deleteditems)\n";
2622 $DBversion = '3.01.00.053';
2623 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
2624 my $upgrade_script = C4::Context->config("intranetdir") . "/installer/data/mysql/labels_upgrade.pl";
2625 system("perl $upgrade_script");
2626 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";
2627 SetVersion ($DBversion);
2630 $DBversion = '3.01.00.054';
2631 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
2632 $dbh->do("ALTER TABLE borrowers ADD `B_address2` text AFTER B_address");
2633 $dbh->do("ALTER TABLE borrowers ADD `altcontactcountry` text AFTER altcontactzipcode");
2634 $dbh->do("ALTER TABLE deletedborrowers ADD `B_address2` text AFTER B_address");
2635 $dbh->do("ALTER TABLE deletedborrowers ADD `altcontactcountry` text AFTER altcontactzipcode");
2636 SetVersion ($DBversion);
2637 print "Upgrade to $DBversion done (bug 1600, bug 3454: add altcontactcountry and B_address2 to borrowers and deletedborrowers)\n";
2640 $DBversion = '3.01.00.055';
2641 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
2642 $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}&amp;title={TITLE}&amp;st=xl&amp;ac=qr" target="_blank">Online Stores (Bookfinder.com)</a></li>' WHERE variable='OPACSearchForTitleIn'|);
2643 SetVersion ($DBversion);
2644 print "Upgrade to $DBversion done (changed OPACSearchForTitleIn per requests in bug 1934)\n";
2647 $DBversion = '3.01.00.056';
2648 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
2649 $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');");
2650 SetVersion ($DBversion);
2651 print "Upgrade to $DBversion done (Bug 1172 : Add OPACPatronDetails syspref)\n";
2654 $DBversion = '3.01.00.057';
2655 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
2656 $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');");
2657 SetVersion ($DBversion);
2658 print "Upgrade to $DBversion done (Bug 2576 : Add OPACFinesTab syspref)\n";
2661 $DBversion = '3.01.00.058';
2662 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
2663 $dbh->do("ALTER TABLE `language_subtag_registry` ADD `id` INT( 11 ) NOT NULL AUTO_INCREMENT PRIMARY KEY;");
2664 $dbh->do("ALTER TABLE `language_rfc4646_to_iso639` ADD `id` INT( 11 ) NOT NULL AUTO_INCREMENT PRIMARY KEY;");
2665 $dbh->do("ALTER TABLE `language_descriptions` ADD `id` INT( 11 ) NOT NULL AUTO_INCREMENT PRIMARY KEY;");
2666 SetVersion ($DBversion);
2667 print "Upgrade to $DBversion done (Added primary keys to language tables)\n";
2670 $DBversion = '3.01.00.059';
2671 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
2672 $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')");
2673 SetVersion ($DBversion);
2674 print "Upgrade to $DBversion done (added DisplayOPACiconsXSLT sysprefs)\n";
2677 $DBversion = '3.01.00.060';
2678 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
2679 $dbh->do("INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES('AllowAllMessageDeletion','0','Allow any Library to delete any message','','YesNo');");
2680 $dbh->do('DROP TABLE IF EXISTS messages');
2681 $dbh->do("CREATE TABLE messages ( `message_id` int(11) NOT NULL auto_increment,
2682 `borrowernumber` int(11) NOT NULL,
2683 `branchcode` varchar(4) default NULL,
2684 `message_type` varchar(1) NOT NULL,
2685 `message` text NOT NULL,
2686 `message_date` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
2687 PRIMARY KEY (`message_id`)
2688 ) ENGINE=InnoDB DEFAULT CHARSET=utf8");
2690 print "Upgrade to $DBversion done ( Added AllowAllMessageDeletion syspref and messages table )\n";
2691 SetVersion ($DBversion);
2694 $DBversion = '3.01.00.061';
2695 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
2696 $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')");
2697 print "Upgrade to $DBversion done ( Added ShowPatronImageInWebBasedSelfCheck system preference )\n";
2698 SetVersion ($DBversion);
2701 $DBversion = "3.01.00.062";
2702 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
2703 $dbh->do("INSERT INTO permissions (module_bit, code, description) VALUES ( 13, 'manage_csv_profiles', 'Manage CSV export profiles')");
2704 $dbh->do(q/
2705 CREATE TABLE `export_format` (
2706 `export_format_id` int(11) NOT NULL auto_increment,
2707 `profile` varchar(255) NOT NULL,
2708 `description` mediumtext NOT NULL,
2709 `marcfields` mediumtext NOT NULL,
2710 PRIMARY KEY (`export_format_id`)
2711 ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='Used for CSV export';
2713 print "Upgrade to $DBversion done (added csv export profiles)\n";
2716 $DBversion = "3.01.00.063";
2717 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
2718 $dbh->do("
2719 CREATE TABLE `fieldmapping` (
2720 `id` int(11) NOT NULL auto_increment,
2721 `field` varchar(255) NOT NULL,
2722 `frameworkcode` char(4) NOT NULL default '',
2723 `fieldcode` char(3) NOT NULL,
2724 `subfieldcode` char(1) NOT NULL,
2725 PRIMARY KEY (`id`)
2726 ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
2728 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";
2731 $DBversion = '3.01.00.065';
2732 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
2733 $dbh->do('ALTER TABLE issuingrules ADD COLUMN `renewalsallowed` smallint(6) NOT NULL default "0" AFTER `issuelength`;');
2734 $sth = $dbh->prepare("SELECT itemtype, renewalsallowed FROM itemtypes");
2735 $sth->execute();
2737 my $sthupd = $dbh->prepare("UPDATE issuingrules SET renewalsallowed = ? WHERE itemtype = ?");
2739 while(my $row = $sth->fetchrow_hashref){
2740 $sthupd->execute($row->{renewalsallowed}, $row->{itemtype});
2743 $dbh->do('ALTER TABLE itemtypes DROP COLUMN `renewalsallowed`;');
2745 SetVersion ($DBversion);
2746 print "Upgrade to $DBversion done (Moving allowed renewals from itemtypes to issuingrule)\n";
2749 $DBversion = '3.01.00.066';
2750 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
2751 $dbh->do('ALTER TABLE issuingrules ADD COLUMN `reservesallowed` smallint(6) NOT NULL default "0" AFTER `renewalsallowed`;');
2753 my $maxreserves = C4::Context->preference('maxreserves');
2754 $sth = $dbh->prepare('UPDATE issuingrules SET reservesallowed = ?;');
2755 $sth->execute($maxreserves);
2757 $dbh->do('DELETE FROM systempreferences WHERE variable = "maxreserves";');
2759 $dbh->do("INSERT INTO systempreferences (variable,value, options, explanation, type) VALUES('ReservesControlBranch','PatronLibrary','ItemHomeLibrary|PatronLibrary','Branch checked for members reservations rights','Choice')");
2761 SetVersion ($DBversion);
2762 print "Upgrade to $DBversion done (Moving max allowed reserves from system preference to issuingrule)\n";
2765 $DBversion = "3.01.00.067";
2766 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
2767 $dbh->do("INSERT INTO permissions (module_bit, code, description) VALUES ( 13, 'batchmod', 'Perform batch modification of items')");
2768 $dbh->do("INSERT INTO permissions (module_bit, code, description) VALUES ( 13, 'batchdel', 'Perform batch deletion of items')");
2769 print "Upgrade to $DBversion done (added permissions for batch modification and deletion)\n";
2770 SetVersion ($DBversion);
2773 $DBversion = "3.01.00.068";
2774 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
2775 $dbh->do("ALTER TABLE issuingrules ADD COLUMN `finedays` int(11) default NULL AFTER `fine` ");
2776 print "Upgrade to $DBversion done (Adding finedays in issuingrules table)\n";
2777 SetVersion ($DBversion);
2781 $DBversion = "3.01.00.069";
2782 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
2783 $dbh->do("INSERT INTO `systempreferences` (`variable`, `value`, `options`, `explanation`, `type`) VALUES ('EnableOpacSearchHistory', '1', '', 'Enable or disable opac search history', 'YesNo')");
2785 my $create = <<SEARCHHIST;
2786 CREATE TABLE IF NOT EXISTS `search_history` (
2787 `userid` int(11) NOT NULL,
2788 `sessionid` varchar(32) NOT NULL,
2789 `query_desc` varchar(255) NOT NULL,
2790 `query_cgi` varchar(255) NOT NULL,
2791 `total` int(11) NOT NULL,
2792 `time` timestamp NOT NULL default CURRENT_TIMESTAMP,
2793 KEY `userid` (`userid`),
2794 KEY `sessionid` (`sessionid`)
2795 ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='Opac search history results';
2796 SEARCHHIST
2797 $dbh->do($create);
2799 print "Upgrade to $DBversion done (added OPAC search history preference and table)\n";
2802 $DBversion = "3.01.00.070";
2803 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
2804 $dbh->do("ALTER TABLE authorised_values ADD COLUMN `lib_opac` VARCHAR(80) default NULL AFTER `lib`");
2805 print "Upgrade to $DBversion done (Added a lib_opac field in authorised_values table)\n";
2808 $DBversion = "3.01.00.071";
2809 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
2810 $dbh->do("ALTER TABLE `subscription` ADD `enddate` date default NULL");
2811 $dbh->do("ALTER TABLE subscriptionhistory CHANGE enddate histenddate DATE default NULL");
2812 print "Upgrade to $DBversion done ( Adding enddate to subscription)\n";
2815 # Acquisitions update
2817 $DBversion = "3.01.00.072";
2818 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
2819 $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')");
2820 # create a new syspref for the 'Mr anonymous' patron
2821 $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,'')");
2822 # fill AnonymousPatron with AnonymousSuggestion value (copy)
2823 my $sth=$dbh->prepare("SELECT value FROM systempreferences WHERE variable='AnonSuggestions'");
2824 $sth->execute;
2825 my ($value) = $sth->fetchrow() || 0;
2826 $dbh->do("UPDATE systempreferences SET value='$value' WHERE variable='AnonymousPatron'");
2827 # set AnonymousSuggestion do YesNo
2828 # 1st, set the value (1/True if it had a borrowernumber)
2829 $dbh->do("UPDATE systempreferences SET value=1 WHERE variable='AnonSuggestions' AND value>0");
2830 # 2nd, change the type to Choice
2831 $dbh->do("UPDATE systempreferences SET type='YesNo' WHERE variable='AnonSuggestions'");
2832 # borrower reading record privacy : 0 : forever, 1 : laws, 2 : don't keep at all
2833 $dbh->do("ALTER TABLE `borrowers` ADD `privacy` INTEGER NOT NULL DEFAULT 1;");
2834 print "Upgrade to $DBversion done (add new syspref and column in borrowers)\n";
2835 SetVersion ($DBversion);
2838 $DBversion = '3.01.00.073';
2839 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
2840 $dbh->do('SET FOREIGN_KEY_CHECKS=0 ');
2841 $dbh->do(<<'END_SQL');
2842 CREATE TABLE IF NOT EXISTS `aqcontract` (
2843 `contractnumber` int(11) NOT NULL auto_increment,
2844 `contractstartdate` date default NULL,
2845 `contractenddate` date default NULL,
2846 `contractname` varchar(50) default NULL,
2847 `contractdescription` mediumtext,
2848 `booksellerid` int(11) not NULL,
2849 PRIMARY KEY (`contractnumber`),
2850 CONSTRAINT `booksellerid_fk1` FOREIGN KEY (`booksellerid`)
2851 REFERENCES `aqbooksellers` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
2852 ) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
2853 END_SQL
2854 $dbh->do('SET FOREIGN_KEY_CHECKS=1 ');
2855 print "Upgrade to $DBversion done (adding aqcontract table)\n";
2856 SetVersion ($DBversion);
2859 $DBversion = '3.01.00.074';
2860 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
2861 $dbh->do("ALTER TABLE `aqbasket` ADD COLUMN `basketname` varchar(50) default NULL AFTER `basketno`");
2862 $dbh->do("ALTER TABLE `aqbasket` ADD COLUMN `note` mediumtext AFTER `basketname`");
2863 $dbh->do("ALTER TABLE `aqbasket` ADD COLUMN `booksellernote` mediumtext AFTER `note`");
2864 $dbh->do("ALTER TABLE `aqbasket` ADD COLUMN `contractnumber` int(11) AFTER `booksellernote`");
2865 $dbh->do("ALTER TABLE `aqbasket` ADD FOREIGN KEY (`contractnumber`) REFERENCES `aqcontract` (`contractnumber`)");
2866 print "Upgrade to $DBversion done (edit aqbasket table done)\n";
2867 SetVersion ($DBversion);
2870 $DBversion = '3.01.00.075';
2871 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
2872 $dbh->do("ALTER TABLE `aqorders` ADD COLUMN `uncertainprice` tinyint(1)");
2874 print "Upgrade to $DBversion done (adding uncertainprices)\n";
2875 SetVersion ($DBversion);
2878 $DBversion = '3.01.00.076';
2879 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
2880 $dbh->do('SET FOREIGN_KEY_CHECKS=0 ');
2881 $dbh->do("CREATE TABLE IF NOT EXISTS `aqbasketgroups` (
2882 `id` int(11) NOT NULL auto_increment,
2883 `name` varchar(50) default NULL,
2884 `closed` tinyint(1) default NULL,
2885 `booksellerid` int(11) NOT NULL,
2886 PRIMARY KEY (`id`),
2887 KEY `booksellerid` (`booksellerid`),
2888 CONSTRAINT `aqbasketgroups_ibfk_1` FOREIGN KEY (`booksellerid`) REFERENCES `aqbooksellers` (`id`) ON UPDATE CASCADE ON DELETE CASCADE
2889 ) ENGINE=InnoDB DEFAULT CHARSET=utf8;");
2890 $dbh->do("ALTER TABLE aqbasket ADD COLUMN `basketgroupid` int(11)");
2891 $dbh->do("ALTER TABLE aqbasket ADD FOREIGN KEY (`basketgroupid`) REFERENCES `aqbasketgroups` (`id`) ON UPDATE CASCADE ON DELETE SET NULL");
2892 $dbh->do("INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES ('pdfformat','pdfformat::layout2pages','Controls what script is used for printing (basketgroups)','','free')");
2893 $dbh->do('SET FOREIGN_KEY_CHECKS=1 ');
2894 print "Upgrade to $DBversion done (adding basketgroups)\n";
2895 SetVersion ($DBversion);
2897 $DBversion = '3.01.00.077';
2898 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
2900 $dbh->do("SET FOREIGN_KEY_CHECKS=0 ");
2901 # create a mapping table holding the info we need to match orders to budgets
2902 $dbh->do('DROP TABLE IF EXISTS fundmapping');
2903 $dbh->do(
2904 q|CREATE TABLE fundmapping AS
2905 SELECT aqorderbreakdown.ordernumber, branchcode, bookfundid, budgetdate, entrydate
2906 FROM aqorderbreakdown JOIN aqorders ON aqorderbreakdown.ordernumber = aqorders.ordernumber|);
2907 # match the new type of the corresponding field
2908 $dbh->do('ALTER TABLE fundmapping modify column bookfundid varchar(30)');
2909 # System did not ensure budgetdate was valid historically
2910 $dbh->do(q|UPDATE fundmapping SET budgetdate = entrydate WHERE budgetdate = '0000-00-00' OR budgetdate IS NULL|);
2911 # We save the map in fundmapping in case you need later processing
2912 $dbh->do(q|ALTER TABLE fundmapping add column aqbudgetid integer|);
2913 # these can speed processing up
2914 $dbh->do(q|CREATE INDEX fundmaporder ON fundmapping (ordernumber)|);
2915 $dbh->do(q|CREATE INDEX fundmapid ON fundmapping (bookfundid)|);
2917 $dbh->do("DROP TABLE IF EXISTS `aqbudgetperiods` ");
2919 $dbh->do(qq|
2920 CREATE TABLE `aqbudgetperiods` (
2921 `budget_period_id` int(11) NOT NULL auto_increment,
2922 `budget_period_startdate` date NOT NULL,
2923 `budget_period_enddate` date NOT NULL,
2924 `budget_period_active` tinyint(1) default '0',
2925 `budget_period_description` mediumtext,
2926 `budget_period_locked` tinyint(1) default NULL,
2927 `sort1_authcat` varchar(10) default NULL,
2928 `sort2_authcat` varchar(10) default NULL,
2929 PRIMARY KEY (`budget_period_id`)
2930 ) ENGINE=InnoDB DEFAULT CHARSET=utf8 |);
2932 $dbh->do(<<ADDPERIODS);
2933 INSERT INTO aqbudgetperiods (budget_period_startdate,budget_period_enddate,budget_period_active,budget_period_description,budget_period_locked)
2934 SELECT DISTINCT startdate, enddate, NOW() BETWEEN startdate and enddate, concat(startdate," ",enddate),NOT NOW() BETWEEN startdate AND enddate from aqbudget
2935 ADDPERIODS
2936 # SORRY , NO AQBUDGET/AQBOOKFUND -> AQBUDGETS IMPORT JUST YET,
2937 # BUT A NEW CLEAN AQBUDGETS TABLE CREATE FOR NOW..
2938 # DROP TABLE IF EXISTS `aqbudget`;
2939 #CREATE TABLE `aqbudget` (
2940 # `bookfundid` varchar(10) NOT NULL default ',
2941 # `startdate` date NOT NULL default 0,
2942 # `enddate` date default NULL,
2943 # `budgetamount` decimal(13,2) default NULL,
2944 # `aqbudgetid` tinyint(4) NOT NULL auto_increment,
2945 # `branchcode` varchar(10) default NULL,
2946 DropAllForeignKeys('aqbudget');
2947 #$dbh->do("drop table aqbudget;");
2950 my $maxbudgetid = $dbh->selectcol_arrayref(<<IDsBUDGET);
2951 SELECT MAX(aqbudgetid) from aqbudget
2952 IDsBUDGET
2954 $$maxbudgetid[0] = 0 if !$$maxbudgetid[0];
2956 $dbh->do(<<BUDGETAUTOINCREMENT);
2957 ALTER TABLE aqbudget AUTO_INCREMENT=$$maxbudgetid[0]
2958 BUDGETAUTOINCREMENT
2960 $dbh->do(<<BUDGETNAME);
2961 ALTER TABLE aqbudget RENAME `aqbudgets`
2962 BUDGETNAME
2964 $dbh->do(<<BUDGETS);
2965 ALTER TABLE `aqbudgets`
2966 CHANGE COLUMN aqbudgetid `budget_id` int(11) NOT NULL AUTO_INCREMENT,
2967 CHANGE COLUMN branchcode `budget_branchcode` varchar(10) default NULL,
2968 CHANGE COLUMN budgetamount `budget_amount` decimal(28,6) NOT NULL default '0.00',
2969 CHANGE COLUMN bookfundid `budget_code` varchar(30) default NULL,
2970 ADD COLUMN `budget_parent_id` int(11) default NULL,
2971 ADD COLUMN `budget_name` varchar(80) default NULL,
2972 ADD COLUMN `budget_encumb` decimal(28,6) default '0.00',
2973 ADD COLUMN `budget_expend` decimal(28,6) default '0.00',
2974 ADD COLUMN `budget_notes` mediumtext,
2975 ADD COLUMN `budget_description` mediumtext,
2976 ADD COLUMN `timestamp` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
2977 ADD COLUMN `budget_amount_sublevel` decimal(28,6) AFTER `budget_amount`,
2978 ADD COLUMN `budget_period_id` int(11) default NULL,
2979 ADD COLUMN `sort1_authcat` varchar(80) default NULL,
2980 ADD COLUMN `sort2_authcat` varchar(80) default NULL,
2981 ADD COLUMN `budget_owner_id` int(11) default NULL,
2982 ADD COLUMN `budget_permission` int(1) default '0';
2983 BUDGETS
2985 $dbh->do(<<BUDGETCONSTRAINTS);
2986 ALTER TABLE `aqbudgets`
2987 ADD CONSTRAINT `aqbudgets_ifbk_1` FOREIGN KEY (`budget_period_id`) REFERENCES `aqbudgetperiods` (`budget_period_id`) ON DELETE CASCADE ON UPDATE CASCADE
2988 BUDGETCONSTRAINTS
2989 # $dbh->do(<<BUDGETPKDROP);
2990 #ALTER TABLE `aqbudgets`
2991 # DROP PRIMARY KEY
2992 #BUDGETPKDROP
2993 # $dbh->do(<<BUDGETPKADD);
2994 #ALTER TABLE `aqbudgets`
2995 # ADD PRIMARY KEY budget_id
2996 #BUDGETPKADD
2999 my $query_period= $dbh->prepare(qq|SELECT budget_period_id from aqbudgetperiods where budget_period_startdate=? and budget_period_enddate=?|);
3000 my $query_bookfund= $dbh->prepare(qq|SELECT * from aqbookfund where bookfundid=?|);
3001 my $selectbudgets=$dbh->prepare(qq|SELECT * from aqbudgets|);
3002 my $updatebudgets=$dbh->prepare(qq|UPDATE aqbudgets SET budget_period_id= ? , budget_name=?, budget_branchcode=? where budget_id=?|);
3003 $selectbudgets->execute;
3004 while (my $databudget=$selectbudgets->fetchrow_hashref){
3005 $query_period->execute ($$databudget{startdate},$$databudget{enddate});
3006 my ($budgetperiodid)=$query_period->fetchrow;
3007 $query_bookfund->execute ($$databudget{budget_code});
3008 my $databf=$query_bookfund->fetchrow_hashref;
3009 my $branchcode=$$databudget{budget_branchcode}||$$databf{branchcode};
3010 $updatebudgets->execute($budgetperiodid,$$databf{bookfundname},$branchcode,$$databudget{budget_id});
3012 $dbh->do(<<BUDGETDROPDATES);
3013 ALTER TABLE `aqbudgets`
3014 DROP startdate,
3015 DROP enddate
3016 BUDGETDROPDATES
3019 $dbh->do("DROP TABLE IF EXISTS `aqbudgets_planning` ");
3020 $dbh->do("CREATE TABLE `aqbudgets_planning` (
3021 `plan_id` int(11) NOT NULL auto_increment,
3022 `budget_id` int(11) NOT NULL,
3023 `budget_period_id` int(11) NOT NULL,
3024 `estimated_amount` decimal(28,6) default NULL,
3025 `authcat` varchar(30) NOT NULL,
3026 `authvalue` varchar(30) NOT NULL,
3027 `display` tinyint(1) DEFAULT 1,
3028 PRIMARY KEY (`plan_id`),
3029 CONSTRAINT `aqbudgets_planning_ifbk_1` FOREIGN KEY (`budget_id`) REFERENCES `aqbudgets` (`budget_id`) ON DELETE CASCADE ON UPDATE CASCADE
3030 ) ENGINE=InnoDB DEFAULT CHARSET=utf8;");
3032 $dbh->do("ALTER TABLE `aqorders`
3033 ADD COLUMN `budget_id` tinyint(4) NOT NULL,
3034 ADD COLUMN `budgetgroup_id` int(11) NOT NULL,
3035 ADD COLUMN `sort1_authcat` varchar(10) default NULL,
3036 ADD COLUMN `sort2_authcat` varchar(10) default NULL" );
3037 # We need to map the orders to the budgets
3038 # For Historic reasons this is more complex than it should be on occasions
3039 my $budg_arr = $dbh->selectall_arrayref(
3040 q|SELECT aqbudgets.budget_id, aqbudgets.budget_code, aqbudgetperiods.budget_period_startdate,
3041 aqbudgetperiods.budget_period_enddate
3042 FROM aqbudgets JOIN aqbudgetperiods ON aqbudgets.budget_period_id = aqbudgetperiods.budget_period_id
3043 ORDER BY budget_code, budget_period_startdate|, { Slice => {} });
3044 # We arbitarily order on start date, this means if you have overlapping periods the order will be
3045 # linked to the latest matching budget YMMV
3046 my $b_sth = $dbh->prepare(
3047 'UPDATE fundmapping set aqbudgetid = ? where bookfundid =? AND budgetdate >= ? AND budgetdate <= ?');
3048 for my $b ( @{$budg_arr}) {
3049 $b_sth->execute($b->{budget_id}, $b->{budget_code}, $b->{budget_period_startdate}, $b->{budget_period_enddate});
3051 # move the budgetids to aqorders
3052 $dbh->do(q|UPDATE aqorders, fundmapping SET aqorders.budget_id = fundmapping.aqbudgetid
3053 WHERE aqorders.ordernumber = fundmapping.ordernumber AND fundmapping.aqbudgetid IS NOT NULL|);
3054 # NB fundmapping is left as an accontants trail also if you have budgetids that werent set
3055 # you can decide what to do with them
3057 $dbh->do(
3058 q|UPDATE aqorders, aqbudgets SET aqorders.budgetgroup_id = aqbudgets.budget_period_id
3059 WHERE aqorders.budget_id = aqbudgets.budget_id|);
3060 # cannot do until aqorderbreakdown removed
3061 # $dbh->do("DROP TABLE aqbookfund ");
3062 # $dbh->do("ALTER TABLE aqorders ADD FOREIGN KEY (`budget_id`) REFERENCES `aqbudgets` (`budget_id`) ON UPDATE CASCADE " ); ????
3063 $dbh->do("SET FOREIGN_KEY_CHECKS=1 ");
3065 print "Upgrade to $DBversion done (Adding new aqbudgetperiods, aqbudgets and aqbudget_planning tables )\n";
3066 SetVersion ($DBversion);
3071 $DBversion = '3.01.00.078';
3072 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
3073 $dbh->do("ALTER TABLE aqbudgetperiods ADD COLUMN budget_period_total decimal(28,6)");
3074 print "Upgrade to $DBversion done (adds 'budget_period_total' column to aqbudgetperiods table)\n";
3075 SetVersion($DBversion);
3079 $DBversion = '3.01.00.079';
3080 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
3081 $dbh->do("ALTER TABLE currency ADD COLUMN active tinyint(1)");
3083 print "Upgrade to $DBversion done (adds 'active' column to currencies table)\n";
3084 SetVersion($DBversion);
3087 $DBversion = '3.01.00.080';
3088 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
3089 $dbh->do(<<BUDG_PERM );
3090 INSERT INTO permissions (module_bit, code, description) VALUES
3091 (11, 'vendors_manage', 'Manage vendors'),
3092 (11, 'contracts_manage', 'Manage contracts'),
3093 (11, 'period_manage', 'Manage periods'),
3094 (11, 'budget_manage', 'Manage budgets'),
3095 (11, 'budget_modify', "Modify budget (can't create lines but can modify existing ones)"),
3096 (11, 'planning_manage', 'Manage budget plannings'),
3097 (11, 'order_manage', 'Manage orders & basket'),
3098 (11, 'group_manage', 'Manage orders & basketgroups'),
3099 (11, 'order_receive', 'Manage orders & basket'),
3100 (11, 'budget_add_del', "Add and delete budgets (but can't modify budgets)");
3101 BUDG_PERM
3103 print "Upgrade to $DBversion done (adds permissions for the acquisitions module)\n";
3104 SetVersion($DBversion);
3108 $DBversion = '3.01.00.081';
3109 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
3110 $dbh->do("ALTER TABLE aqbooksellers ADD COLUMN `gstrate` decimal(6,4) default NULL");
3111 if (my $gist=C4::Context->preference("gist")){
3112 my $sql=$dbh->prepare("UPDATE aqbooksellers set `gstrate`=? ");
3113 $sql->execute($gist) ;
3115 print "Upgrade to $DBversion done (added per-supplier gstrate setting)\n";
3116 SetVersion($DBversion);
3119 $DBversion = "3.01.00.082";
3120 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
3121 if (C4::Context->preference("opaclanguages") eq "fr") {
3122 $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')#);
3123 } else {
3124 $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')");
3126 print "Upgrade to $DBversion done (adding ReservesNeedReturns systempref, in circulation)\n";
3127 SetVersion ($DBversion);
3130 $DBversion = "3.01.00.083";
3131 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
3132 $dbh->do(qq|
3133 CREATE TABLE `aqorders_items` (
3134 `ordernumber` int(11) NOT NULL,
3135 `itemnumber` int(11) NOT NULL,
3136 `timestamp` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
3137 PRIMARY KEY (`itemnumber`),
3138 KEY `ordernumber` (`ordernumber`)
3139 ) ENGINE=InnoDB DEFAULT CHARSET=utf8 |
3142 $dbh->do(qq| DROP TABLE aqorderbreakdown |);
3143 $dbh->do('DROP TABLE aqbookfund');
3144 print "Upgrade to $DBversion done (New aqorders_items table for acqui)\n";
3145 SetVersion ($DBversion);
3148 $DBversion = "3.01.00.084";
3149 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
3150 $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') #);
3152 print "Upgrade to $DBversion done (CurrencyFormat syspref added)\n";
3153 SetVersion ($DBversion);
3156 $DBversion = "3.01.00.085";
3157 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
3158 $dbh->do("ALTER table aqorders drop column title");
3159 $dbh->do("ALTER TABLE `aqorders` CHANGE `budget_id` `budget_id` INT( 11 ) NOT NULL");
3160 print "Upgrade to $DBversion done update budget_id size that should not be a tinyint\n";
3161 SetVersion ($DBversion);
3164 $DBversion = "3.01.00.086";
3165 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
3166 $dbh->do(<<SUGGESTIONS);
3167 ALTER table suggestions
3168 ADD budgetid INT(11),
3169 ADD branchcode VARCHAR(10) default NULL,
3170 ADD acceptedby INT(11) default NULL,
3171 ADD accepteddate date default NULL,
3172 ADD suggesteddate date default NULL,
3173 ADD manageddate date default NULL,
3174 ADD rejectedby INT(11) default NULL,
3175 ADD rejecteddate date default NULL,
3176 ADD collectiontitle text default NULL,
3177 ADD itemtype VARCHAR(30) default NULL
3179 SUGGESTIONS
3180 print "Upgrade to $DBversion done (Suggestions)\n";
3181 SetVersion ($DBversion);
3184 $DBversion = "3.01.00.087";
3185 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
3186 $dbh->do("ALTER table aqbudgets drop column budget_amount_sublevel;");
3187 print "Upgrade to $DBversion done (Drop column budget_amount_sublevel from aqbudgets)\n";
3188 SetVersion ($DBversion);
3191 $DBversion = "3.01.00.088";
3192 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
3193 $dbh->do( qq# INSERT INTO `systempreferences` VALUES ('intranetbookbag','1','','If ON, enables display of Cart feature in the intranet','YesNo') #);
3195 print "Upgrade to $DBversion done (intranetbookbag syspref added)\n";
3196 SetVersion ($DBversion);
3199 $DBversion = "3.01.00.090";
3200 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
3201 $dbh->do("
3202 INSERT INTO `permissions` (`module_bit`, `code`, `description`) VALUES
3203 (16, 'execute_reports', 'Execute SQL reports'),
3204 (16, 'create_reports', 'Create SQL Reports')
3207 print "Upgrade to $DBversion done (granular permissions for guided reports added)\n";
3208 SetVersion ($DBversion);
3211 $DBversion = "3.01.00.091";
3212 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
3213 $dbh->do("
3214 UPDATE `systempreferences` SET `options` = 'holdings|serialcollection|subscriptions'
3215 WHERE `systempreferences`.`variable` = 'opacSerialDefaultTab' LIMIT 1
3218 print "Upgrade to $DBversion done (opac-detail default tag updated)\n";
3219 SetVersion ($DBversion);
3222 $DBversion = "3.01.00.092";
3223 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
3224 if (C4::Context->preference("opaclanguages") =~ /fr/) {
3225 $dbh->do(qq{
3226 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 }else{
3229 $dbh->do(qq{
3230 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');
3233 print "Upgrade to $DBversion done (Added RoutingListAddReserves syspref)\n";
3234 SetVersion ($DBversion);
3237 $DBversion = "3.01.00.093";
3238 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
3239 $dbh->do(qq{
3240 ALTER TABLE biblioitems ADD INDEX issn_idx (issn);
3242 print "Upgrade to $DBversion done (added index to ISSN)\n";
3243 SetVersion ($DBversion);
3246 $DBversion = "3.01.00.094";
3247 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
3248 $dbh->do(qq{
3249 ALTER TABLE aqbasketgroups ADD deliveryplace VARCHAR(10) default NULL, ADD deliverycomment VARCHAR(255) default NULL;
3252 print "Upgrade to $DBversion done (adding deliveryplace deliverycomment to basketgroups)\n";
3253 SetVersion ($DBversion);
3256 $DBversion = "3.01.00.095";
3257 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
3258 $dbh->do(qq{
3259 ALTER TABLE items ADD stocknumber VARCHAR(32) DEFAULT NULL COMMENT "stores the inventory number";
3261 $dbh->do(qq{
3262 ALTER TABLE items ADD UNIQUE INDEX itemsstocknumberidx (stocknumber);
3264 $dbh->do(qq{
3265 ALTER TABLE deleteditems ADD stocknumber VARCHAR(32) DEFAULT NULL COMMENT "stores the inventory number of deleted items";
3267 $dbh->do(qq{
3268 ALTER TABLE deleteditems ADD UNIQUE INDEX deleteditemsstocknumberidx (stocknumber);
3270 if (C4::Context->preference('marcflavour') eq 'UNIMARC'){
3271 $dbh->do(qq{
3272 INSERT IGNORE INTO marc_subfield_structure (frameworkcode,tagfield, tagsubfield, tab, repeatable, mandatory,kohafield)
3273 SELECT DISTINCT (frameworkcode),995,"j",10,0,0,"items.stocknumber" from biblio_framework ;
3275 #Previously, copynumber was used as stocknumber
3276 $dbh->do(qq{
3277 UPDATE items set stocknumber=copynumber;
3279 $dbh->do(qq{
3280 UPDATE items set copynumber=NULL;
3283 print "Upgrade to $DBversion done (stocknumber field added)\n";
3284 SetVersion ($DBversion);
3287 $DBversion = "3.01.00.096";
3288 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
3289 $dbh->do("INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES ('OrderPdfTemplate','','Uploads a PDF template to use for printing baskets','NULL','Upload')");
3290 $dbh->do("UPDATE systempreferences SET variable='OrderPdfFormat' WHERE variable='pdfformat'");
3291 print "Upgrade to $DBversion done (PDF orders system preferences added and updated)\n";
3292 SetVersion ($DBversion);
3295 $DBversion = "3.01.00.097";
3296 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
3297 $dbh->do(qq{
3298 ALTER TABLE aqbasketgroups ADD billingplace VARCHAR(10) NOT NULL AFTER deliverycomment;
3301 print "Upgrade to $DBversion done (Adding billingplace to aqbasketgroups)\n";
3302 SetVersion ($DBversion);
3305 $DBversion = "3.01.00.098";
3306 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
3307 $dbh->do(qq{
3308 ALTER TABLE auth_subfield_structure MODIFY frameworkcode VARCHAR(10) NULL;
3311 print "Upgrade to $DBversion done (changing frameworkcode length in auth_subfield_structure)\n";
3312 SetVersion ($DBversion);
3315 $DBversion = "3.01.00.099";
3316 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
3317 $dbh->do(qq{
3318 INSERT INTO `permissions` (`module_bit`, `code`, `description`) VALUES
3319 (9, 'edit_catalogue', 'Edit catalogue'),
3320 (9, 'fast_cataloging', 'Fast cataloging')
3323 print "Upgrade to $DBversion done (granular permissions for cataloging added)\n";
3324 SetVersion ($DBversion);
3327 $DBversion = "3.01.00.100";
3328 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
3329 $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')");
3330 print "Upgrade to $DBversion done (added CAS authentication system preferences)\n";
3331 SetVersion ($DBversion);
3334 $DBversion = "3.01.00.101";
3335 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
3336 $dbh->do(
3337 "INSERT INTO systempreferences
3338 (variable, value, options, explanation, type)
3339 VALUES (
3340 'OverdueNoticeBcc', '', '',
3341 'Email address to Bcc outgoing notices sent by email',
3342 'free')
3344 print "Upgrade to $DBversion done (added OverdueNoticeBcc system preferences)\n";
3345 SetVersion ($DBversion);
3347 $DBversion = "3.01.00.102";
3348 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
3349 $dbh->do(
3350 "UPDATE permissions set description = 'Edit catalog (Modify bibliographic/holdings data)' where module_bit = 9 and code = 'edit_catalogue'"
3352 print "Upgrade to $DBversion done (fixed spelling error in edit_catalogue permission)\n";
3353 SetVersion ($DBversion);
3356 $DBversion = "3.01.00.103";
3357 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
3358 $dbh->do("INSERT INTO permissions (module_bit, code, description) VALUES (13, 'moderate_tags', 'Moderate patron tags')");
3359 print "Upgrade to $DBversion done (adding patron permissions for tags tool)\n";
3360 SetVersion ($DBversion);
3363 $DBversion = "3.01.00.104";
3364 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
3366 my ($maninv_count, $borrnotes_count);
3367 eval { $maninv_count = $dbh->do("SELECT 1 FROM authorised_values WHERE category='MANUAL_INV'"); };
3368 if ($maninv_count == 0) {
3369 $dbh->do("INSERT INTO authorised_values (category,authorised_value,lib) VALUES ('MANUAL_INV','Copier Fees','.25')");
3371 eval { $borrnotes_count = $dbh->do("SELECT 1 FROM authorised_values WHERE category='BOR_NOTES'"); };
3372 if ($borrnotes_count == 0) {
3373 $dbh->do("INSERT INTO authorised_values (category,authorised_value,lib) VALUES ('BOR_NOTES','ADDR','Address Notes')");
3376 $dbh->do("INSERT INTO authorised_values (category,authorised_value,lib) VALUES ('LOC','CART','Book Cart')");
3377 $dbh->do("INSERT INTO authorised_values (category,authorised_value,lib) VALUES ('LOC','PROC','Processing Center')");
3379 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";
3380 SetVersion ($DBversion);
3384 $DBversion = "3.01.00.105";
3385 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
3386 $dbh->do("
3387 CREATE TABLE `collections` (
3388 `colId` int(11) NOT NULL auto_increment,
3389 `colTitle` varchar(100) NOT NULL default '',
3390 `colDesc` text NOT NULL,
3391 `colBranchcode` varchar(4) default NULL COMMENT 'branchcode for branch where item should be held.',
3392 PRIMARY KEY (`colId`)
3393 ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
3396 $dbh->do("
3397 CREATE TABLE `collections_tracking` (
3398 `ctId` int(11) NOT NULL auto_increment,
3399 `colId` int(11) NOT NULL default '0' COMMENT 'collections.colId',
3400 `itemnumber` int(11) NOT NULL default '0' COMMENT 'items.itemnumber',
3401 PRIMARY KEY (`ctId`)
3402 ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
3404 $dbh->do("
3405 INSERT INTO permissions (module_bit, code, description)
3406 VALUES ( 13, 'rotating_collections', 'Manage Rotating collections')" );
3407 print "Upgrade to $DBversion done (added collection and collection_tracking tables for rotating collections functionality)\n";
3408 SetVersion ($DBversion);
3410 $DBversion = "3.01.00.106";
3411 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
3412 $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' )");
3413 print "Upgrade to $DBversion done (added OpacAddMastheadLibraryPulldown system preferences)\n";
3414 SetVersion ($DBversion);
3417 $DBversion = '3.01.00.107';
3418 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
3419 my $upgrade_script = C4::Context->config("intranetdir") . "/installer/data/mysql/patroncards_upgrade.pl";
3420 system("perl $upgrade_script");
3421 print "Upgrade to $DBversion done (Migrated labels and patroncards tables and data to new schema.)\n";
3422 SetVersion ($DBversion);
3425 $DBversion = '3.01.00.108';
3426 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
3427 $dbh->do(qq{
3428 ALTER TABLE `export_format` ADD `csv_separator` VARCHAR( 2 ) NOT NULL AFTER `marcfields` ,
3429 ADD `field_separator` VARCHAR( 2 ) NOT NULL AFTER `csv_separator` ,
3430 ADD `subfield_separator` VARCHAR( 2 ) NOT NULL AFTER `field_separator`
3432 print "Upgrade to $DBversion done (added separators for csv export)\n";
3433 SetVersion ($DBversion);
3436 $DBversion = "3.01.00.109";
3437 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
3438 $dbh->do(qq{
3439 ALTER TABLE `export_format` ADD `encoding` VARCHAR(255) NOT NULL AFTER `subfield_separator`
3441 print "Upgrade to $DBversion done (added encoding for csv export)\n";
3442 SetVersion ($DBversion);
3445 $DBversion = '3.01.00.110';
3446 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
3447 $dbh->do('ALTER TABLE `categories` ADD COLUMN `enrolmentperioddate` DATE NULL DEFAULT NULL AFTER `enrolmentperiod`');
3448 print "Upgrade to $DBversion done (Add enrolment period date support)\n";
3449 SetVersion ($DBversion);
3452 $DBversion = '3.01.00.111';
3453 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
3454 print "Upgrade to $DBversion done (mark DBrev for 3.2-alpha release)\n";
3455 SetVersion ($DBversion);
3458 $DBversion = '3.01.00.112';
3459 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
3460 $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');");
3461 print "Upgrade to $DBversion done ( added Show Spine Label Printer on Bib Items Details preferences )\n";
3462 SetVersion ($DBversion);
3465 $DBversion = '3.01.00.113';
3466 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
3467 my $value = C4::Context->preference("XSLTResultsDisplay");
3468 $dbh->do(
3469 "INSERT INTO systempreferences (variable,value,type)
3470 VALUES('OPACXSLTResultsDisplay',?,'YesNo')", {}, $value ? 1 : 0);
3471 $value = C4::Context->preference("XSLTDetailsDisplay");
3472 $dbh->do(
3473 "INSERT INTO systempreferences (variable,value,type)
3474 VALUES('OPACXSLTDetailsDisplay',?,'YesNo')", {}, $value ? 1 : 0);
3475 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";
3476 SetVersion ($DBversion);
3479 $DBversion = '3.01.00.114';
3480 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
3481 $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')");
3482 $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')");
3483 $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')");
3484 print "Upgrade to $DBversion done ( Added AutoSelfCheckAllowed, AutoSelfCheckID, and AutoShelfCheckPass system preference )\n";
3485 SetVersion ($DBversion);
3488 $DBversion = '3.01.00.115';
3489 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
3490 $dbh->do('UPDATE aqorders SET quantityreceived = 0 WHERE quantityreceived IS NULL');
3491 $dbh->do('ALTER TABLE aqorders MODIFY COLUMN quantityreceived smallint(6) NOT NULL DEFAULT 0');
3492 print "Upgrade to $DBversion done ( Default aqorders.quantityreceived to 0 )\n";
3493 SetVersion ($DBversion);
3496 $DBversion = '3.01.00.116';
3497 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
3498 if (C4::Context->preference('OrderPdfFormat') eq 'pdfformat::example'){
3499 $dbh->do("UPDATE `systempreferences` set value='pdfformat::layout2pages' WHERE variable='OrderPdfFormat'");
3501 print "Upgrade to $DBversion done (corrected default OrderPdfFormat value if still set wrong )\n";
3502 SetVersion ($DBversion);
3505 $DBversion = '3.01.00.117';
3506 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
3507 $dbh->do("UPDATE language_rfc4646_to_iso639 SET iso639_2_code = 'por' WHERE rfc4646_subtag='pt' ");
3508 print "Upgrade to $DBversion done (corrected ISO 639-2 language code for Portuguese)\n";
3509 SetVersion ($DBversion);
3512 $DBversion = '3.01.00.118';
3513 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
3514 my ($count) = $dbh->selectrow_array("SELECT count(*) FROM information_schema.columns
3515 WHERE table_name = 'aqbudgets_planning'
3516 AND column_name = 'display'");
3517 if ($count < 1) {
3518 $dbh->do("ALTER TABLE aqbudgets_planning ADD COLUMN display tinyint(1) DEFAULT 1");
3520 print "Upgrade to $DBversion done (bug 4203: add display column to aqbudgets_planning if missing)\n";
3521 SetVersion ($DBversion);
3524 $DBversion = '3.01.00.119';
3525 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
3526 eval{require Locale::Currency::Format};
3527 if (!$@) {
3528 print "Upgrade to $DBversion done (Locale::Currency::Format installed.)\n";
3529 SetVersion ($DBversion);
3531 else {
3532 print "Upgrade to $DBversion done.\n";
3533 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";
3534 SetVersion ($DBversion);
3538 $DBversion = '3.01.00.120';
3539 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
3540 $dbh->do(q{
3541 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');
3543 print "Upgrade to $DBversion done (bug 1080: add soundon system preference for circulation sounds)\n";
3544 SetVersion ($DBversion);
3547 $DBversion = '3.01.00.121';
3548 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
3549 $dbh->do("ALTER TABLE `reserves` ADD `expirationdate` DATE DEFAULT NULL");
3550 $dbh->do("ALTER TABLE `reserves` ADD `lowestPriority` tinyint(1) NOT NULL");
3551 $dbh->do("ALTER TABLE `old_reserves` ADD `expirationdate` DATE DEFAULT NULL");
3552 $dbh->do("ALTER TABLE `old_reserves` ADD `lowestPriority` tinyint(1) NOT NULL");
3553 print "Upgrade to $DBversion done ( Added Additional Fields to Reserves tables )\n";
3554 SetVersion ($DBversion);
3557 $DBversion = '3.01.00.122';
3558 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
3559 $dbh->do(q{
3560 INSERT INTO systempreferences (variable,value,explanation,options,type)
3561 VALUES ('OAI-PMH:ConfFile', '', 'If empty, Koha OAI Server operates in normal mode, otherwise it operates in extended mode.','','File');
3563 print "Upgrade to $DBversion done. — Add a new system preference OAI-PMF:ConfFile\n";
3564 SetVersion ($DBversion);
3567 $DBversion = "3.01.00.123";
3568 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
3569 $dbh->do("INSERT INTO `permissions` (`module_bit`, `code`, `description`) VALUES
3570 (6, 'place_holds', 'Place holds for patrons')");
3571 $dbh->do("INSERT INTO `permissions` (`module_bit`, `code`, `description`) VALUES
3572 (6, 'modify_holds_priority', 'Modify holds priority')");
3573 $dbh->do("UPDATE `userflags` SET `flagdesc` = 'Place and modify holds for patrons' WHERE `flag` = 'reserveforothers'");
3574 print "Upgrade to $DBversion done (Add granular permission for holds modification and update description of reserveforothers permission)\n";
3575 SetVersion ($DBversion);
3578 $DBversion = '3.01.00.124';
3579 if (C4::Context->preference('Version') < TransformToNum($DBversion)){
3580 $dbh->do("
3581 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>>).');
3583 print "Upgrade to $DBversion done (bug 3242: add HOLDPLACED letter template, which is used when emailLibrarianWhenHoldIsPlaced is enabled)\n";
3584 SetVersion ($DBversion);
3587 $DBversion = '3.01.00.125';
3588 if (C4::Context->preference('Version') < TransformToNum($DBversion)){
3589 $dbh->do("
3590 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' );
3592 $dbh->do("
3593 INSERT INTO message_transport_types (message_transport_type) values ('print');
3595 print "Upgrade to $DBversion done (bug 3482: Printable hold and overdue notices)\n";
3596 SetVersion ($DBversion);
3599 $DBversion = "3.01.00.126";
3600 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
3601 $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')");
3602 $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')");
3604 print "Upgrade to $DBversion done (Adding ILS-DI updates and ILS-DI:AuthorizedIPs)\n";
3605 SetVersion ($DBversion);
3608 $DBversion = '3.01.00.127';
3609 if (C4::Context->preference('Version') < TransformToNum($DBversion)){
3610 $dbh->do("ALTER TABLE messages CHANGE branchcode branchcode varchar(10);");
3611 print "Upgrade to $DBversion done (bug 4190: messages in patron account did not work with branchcodes > 4)\n";
3612 SetVersion ($DBversion);
3615 $DBversion = '3.01.00.128';
3616 if (C4::Context->preference('Version') < TransformToNum($DBversion)){
3617 $dbh->do('CREATE INDEX budget_id ON aqorders (budget_id );');
3618 print "Upgrade to $DBversion done (bug 4331: index orders by budget_id)\n";
3619 SetVersion ($DBversion);
3622 $DBversion = "3.01.00.129";
3623 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
3624 $dbh->do("UPDATE `permissions` SET `code` = 'items_batchdel' WHERE `permissions`.`module_bit` =13 AND `permissions`.`code` = 'batchdel' LIMIT 1 ;");
3625 $dbh->do("UPDATE `permissions` SET `code` = 'items_batchmod' WHERE `permissions`.`module_bit` =13 AND `permissions`.`code` = 'batchmod' LIMIT 1 ;");
3626 print "Upgrade to $DBversion done (Change permissions names for item batch modification / deletion)\n";
3628 SetVersion ($DBversion);
3631 $DBversion = "3.01.00.130";
3632 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
3633 $dbh->do("UPDATE reserves SET expirationdate = NULL WHERE expirationdate = '0000-00-00'");
3634 print "Upgrade to $DBversion done (change reserves.expirationdate values of 0000-00-00 to NULL (bug 1532)\n";
3635 SetVersion ($DBversion);
3638 $DBversion = "3.01.00.131";
3639 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
3640 $dbh->do(q{
3641 INSERT IGNORE INTO message_transport_types (message_transport_type) VALUES ('print'),('feed');
3643 print "Upgrade to $DBversion done (adding print and feed message transport types)\n";
3644 SetVersion ($DBversion);
3647 $DBversion = "3.01.00.132";
3648 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
3649 $dbh->do(q{
3650 ALTER TABLE language_descriptions ADD INDEX subtag_type_lang (subtag, type, lang);
3652 print "Upgrade to $DBversion done (Adding index to language_descriptions table)\n";
3653 SetVersion ($DBversion);
3656 $DBversion = '3.01.00.133';
3657 if (C4::Context->preference('Version') < TransformToNum($DBversion)){
3658 $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')");
3659 print "Upgrade to $DBversion done (bug 4405: added OverduesBlockCirc syspref to control whether circulation is blocked if a borrower has overdues)\n";
3660 SetVersion ($DBversion);
3663 $DBversion = '3.01.00.134';
3664 if (C4::Context->preference('Version') < TransformToNum($DBversion)){
3665 $dbh->do("INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES ('DisplayMultiPlaceHold','1','Display the ability to place multiple holds or not','','YesNo')");
3666 print "Upgrade to $DBversion done (adding syspref DisplayMultiPlaceHold to control whether multiple holds can be placed from the search results page)\n";
3667 SetVersion ($DBversion);
3670 $DBversion = '3.01.00.135';
3671 if (C4::Context->preference('Version') < TransformToNum($DBversion)){
3672 $dbh->do("
3673 INSERT INTO `letter` (module, code, name, title, content) VALUES
3674 ('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')
3676 print "Upgrade to $DBversion done (bug 4377: added HOLD_PRINT message template)\n";
3677 SetVersion ($DBversion);
3680 $DBversion = '3.01.00.136';
3681 if (C4::Context->preference('Version') < TransformToNum($DBversion)){
3682 $dbh->do(qq{
3683 INSERT INTO permissions (module_bit, code, description) VALUES
3684 ( 9, 'edit_items', 'Edit Items');});
3685 print "Upgrade to $DBversion done (Adding a new permission to edit items)\n";
3686 SetVersion ($DBversion);
3689 $DBversion = "3.01.00.137";
3690 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
3691 $dbh->do("
3692 INSERT INTO permissions (module_bit, code, description) VALUES
3693 (15, 'check_expiration', 'Check the expiration of a serial'),
3694 (15, 'claim_serials', 'Claim missing serials'),
3695 (15, 'create_subscription', 'Create a new subscription'),
3696 (15, 'delete_subscription', 'Delete an existing subscription'),
3697 (15, 'edit_subscription', 'Edit an existing subscription'),
3698 (15, 'receive_serials', 'Serials receiving'),
3699 (15, 'renew_subscription', 'Renew a subscription'),
3700 (15, 'routing', 'Routing');
3702 print "Upgrade to $DBversion done (adding granular permissions for serials)\n";
3703 SetVersion ($DBversion);
3706 $DBversion = "3.01.00.138";
3707 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
3708 $dbh->do("DELETE FROM systempreferences WHERE variable = 'GranularPermissions'");
3709 print "Upgrade to $DBversion done (bug 4896: removing GranularPermissions syspref; use of granular permissions is now the default)\n";
3710 SetVersion ($DBversion);
3713 $DBversion = '3.01.00.139';
3714 if (C4::Context->preference('Version') < TransformToNum($DBversion)){
3715 $dbh->do("ALTER TABLE message_attributes CHANGE message_name message_name varchar(40);");
3716 print "Upgrade to $DBversion done (bug 3682: change message_name from varchar(20) to varchar(40))\n";
3717 SetVersion ($DBversion);
3720 $DBversion = '3.01.00.140';
3721 if (C4::Context->preference('Version') < TransformToNum($DBversion)){
3722 $dbh->do("UPDATE systempreferences SET value = '0' WHERE variable = 'TagsModeration' AND value is NULL");
3723 print "Upgrade to $DBversion done (bug 4312 TagsModeration changed from NULL to 0)\n";
3724 SetVersion ($DBversion);
3727 $DBversion = '3.01.00.141';
3728 if (C4::Context->preference('Version') < TransformToNum($DBversion)){
3729 $dbh->do(qq{DELETE FROM message_attributes WHERE message_attribute_id=3;});
3730 $dbh->do(qq{DELETE FROM letter WHERE code='EVENT' AND title='Upcoming Library Event';});
3731 print "Upgrade to $DBversion done Remove upcoming events messaging option (bug 2434)\n";
3732 SetVersion ($DBversion);
3735 $DBversion = '3.01.00.142';
3736 if (C4::Context->preference('Version') < TransformToNum($DBversion)){
3737 $dbh->do(qq{DELETE FROM message_transports WHERE message_attribute_id=3;});
3738 print "Upgrade to $DBversion done (Remove upcoming events messaging option part 2 (bug 2434))\n";
3739 SetVersion ($DBversion);
3742 $DBversion = '3.01.00.143';
3743 if (C4::Context->preference('Version') < TransformToNum($DBversion)){
3744 $dbh->do(qq{CREATE INDEX auth_value_idx ON authorised_values (authorised_value)});
3745 $dbh->do(qq{CREATE INDEX auth_val_cat_idx ON borrower_attribute_types (authorised_value_category)});
3746 print "Upgrade to $DBversion done (Create index on authorised_values and borrower_attribute_types (bug 4139))\n";
3747 SetVersion ($DBversion);
3750 $DBversion = '3.01.00.144';
3751 if (C4::Context->preference('Version') < TransformToNum($DBversion)){
3752 $dbh->do(qq{UPDATE systempreferences SET value='normal' where value='default' and variable='IntranetBiblioDefaultView'});
3753 print "Upgrade to $DBversion done (Update the 'default' to 'normal' for the IntranetBiblioDefaultView syspref (bug 5007))\n";
3754 SetVersion ($DBversion);
3757 $DBversion = "3.01.00.145";
3758 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
3759 $dbh->do("ALTER TABLE borrowers ADD KEY `guarantorid` (guarantorid);");
3760 print "Upgrade to $DBversion done (Add index on guarantorid)\n";
3761 SetVersion ($DBversion);
3764 $DBversion = '3.01.00.999';
3765 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
3766 print "Upgrade to $DBversion done (3.2.0 release candidate)\n";
3767 SetVersion ($DBversion);
3770 $DBversion = "3.02.00.000";
3771 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
3772 my $value = $dbh->selectrow_array("SELECT value FROM systempreferences WHERE variable = 'HomeOrHoldingBranch'");
3773 $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');");
3774 print "Upgrade to $DBversion done (Add HomeOrHoldingBranchReturn system preference)\n";
3775 SetVersion ($DBversion);
3778 $DBversion = "3.02.00.001";
3779 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
3780 $dbh->do(q{DELETE FROM systempreferences WHERE variable IN (
3781 'holdCancelLength',
3782 'PINESISBN',
3783 'sortbynonfiling',
3784 'TemplateEncoding',
3785 'OPACSubscriptionDisplay',
3786 'OPACDisplayExtendedSubInfo',
3787 'OAI-PMH:Set',
3788 'OAI-PMH:Subset',
3789 'libraryAddress',
3790 'kohaspsuggest',
3791 'OrderPdfTemplate',
3792 'marc',
3793 'acquisitions',
3794 'MIME')
3797 print "Upgrade to $DBversion done (bug 3756: remove disused system preferences)\n";
3798 SetVersion ($DBversion);
3801 $DBversion = "3.02.00.002";
3802 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
3803 $dbh->do(q{DELETE FROM systempreferences WHERE variable = 'OpacPrivacy'});
3804 print "Upgrade to $DBversion done (bug 3881: remove unused OpacPrivacy system preference)\n";
3805 SetVersion ($DBversion);
3808 $DBversion = "3.02.00.003";
3809 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
3810 $dbh->do(q{UPDATE systempreferences SET variable = 'ILS-DI:AuthorizedIPs' WHERE variable = 'ILS-DI:Authorized_IPs'});
3811 print "Upgrade to $DBversion done (correct ILS-DI:AuthorizedIPs)\n";
3812 SetVersion ($DBversion);
3815 $DBversion = "3.02.00.004";
3816 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
3817 print "Upgrade to $DBversion done (3.2.0 general release)\n";
3818 SetVersion ($DBversion);
3820 # This is the point where 3.2.x and master diverged, we can use $original_version to make sure we don't
3822 # apply updates that have already been done
3824 $DBversion = "3.03.00.001";
3825 if (C4::Context->preference("Version") < TransformToNum($DBversion) && $original_version < TransformToNum("3.02.00.005")) {
3826 $dbh->do("DELETE FROM subscriptionroutinglist WHERE borrowernumber IS NULL;");
3827 $dbh->do("ALTER TABLE subscriptionroutinglist MODIFY COLUMN `borrowernumber` int(11) NOT NULL;");
3828 $dbh->do("DELETE FROM subscriptionroutinglist WHERE subscriptionid IS NULL;");
3829 $dbh->do("ALTER TABLE subscriptionroutinglist MODIFY COLUMN `subscriptionid` int(11) NOT NULL;");
3830 $dbh->do("CREATE TEMPORARY TABLE del_subscriptionroutinglist
3831 SELECT s1.routingid FROM subscriptionroutinglist s1
3832 WHERE EXISTS (SELECT * FROM subscriptionroutinglist s2
3833 WHERE s2.borrowernumber = s1.borrowernumber
3834 AND s2.subscriptionid = s1.subscriptionid
3835 AND s2.routingid < s1.routingid);");
3836 $dbh->do("DELETE FROM subscriptionroutinglist
3837 WHERE routingid IN (SELECT routingid FROM del_subscriptionroutinglist);");
3838 $dbh->do("ALTER TABLE subscriptionroutinglist ADD UNIQUE (subscriptionid, borrowernumber);");
3839 $dbh->do("ALTER TABLE subscriptionroutinglist
3840 ADD CONSTRAINT `subscriptionroutinglist_ibfk_1` FOREIGN KEY (`borrowernumber`)
3841 REFERENCES `borrowers` (`borrowernumber`)
3842 ON DELETE CASCADE ON UPDATE CASCADE");
3843 $dbh->do("ALTER TABLE subscriptionroutinglist
3844 ADD CONSTRAINT `subscriptionroutinglist_ibfk_2` FOREIGN KEY (`subscriptionid`)
3845 REFERENCES `subscription` (`subscriptionid`)
3846 ON DELETE CASCADE ON UPDATE CASCADE");
3847 print "Upgrade to $DBversion done (Make subscriptionroutinglist more strict)\n";
3848 SetVersion ($DBversion);
3851 $DBversion = '3.03.00.002';
3852 if (C4::Context->preference("Version") < TransformToNum($DBversion) && $original_version < TransformToNum("3.02.00.006")) {
3853 $dbh->do("UPDATE language_rfc4646_to_iso639 SET iso639_2_code='arm' WHERE rfc4646_subtag='hy';");
3854 $dbh->do("UPDATE language_rfc4646_to_iso639 SET iso639_2_code='eng' WHERE rfc4646_subtag='en';");
3855 $dbh->do("INSERT INTO language_rfc4646_to_iso639(rfc4646_subtag,iso639_2_code) VALUES( 'fi','fin');");
3856 $dbh->do("UPDATE language_rfc4646_to_iso639 SET iso639_2_code='fre' WHERE rfc4646_subtag='fr';");
3857 $dbh->do("INSERT INTO language_rfc4646_to_iso639(rfc4646_subtag,iso639_2_code) VALUES( 'lo','lao');");
3858 $dbh->do("UPDATE language_rfc4646_to_iso639 SET iso639_2_code='ita' WHERE rfc4646_subtag='it';");
3859 $dbh->do("INSERT INTO language_rfc4646_to_iso639(rfc4646_subtag,iso639_2_code) VALUES( 'sr','srp');");
3860 $dbh->do("INSERT INTO language_rfc4646_to_iso639(rfc4646_subtag,iso639_2_code) VALUES( 'tet','tet');");
3861 $dbh->do("INSERT INTO language_rfc4646_to_iso639(rfc4646_subtag,iso639_2_code) VALUES( 'ur','urd');");
3863 print "Upgrade to $DBversion done (Correct language mappings)\n";
3864 SetVersion ($DBversion);
3867 $DBversion = '3.03.00.003';
3868 if (C4::Context->preference("Version") < TransformToNum($DBversion) && $original_version < TransformToNum("3.02.00.007")) {
3869 $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');");
3870 print "Upgrade to $DBversion done (Add UseTablesortForCirc syspref)\n";
3871 SetVersion ($DBversion);
3874 $DBversion = '3.03.00.004';
3875 if (C4::Context->preference("Version") < TransformToNum($DBversion) && $original_version < TransformToNum("3.02.01.001")) {
3876 my $count = $dbh->selectrow_array('SELECT COUNT(*) FROM letter WHERE module = ? AND code = ?', {}, 'suggestions', 'ACCEPTED');
3877 $dbh->do(q/
3878 INSERT INTO `letter`
3879 (module, code, name, title, content)
3880 VALUES
3881 ('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>>')
3882 /) unless $count > 0;
3883 $count = $dbh->selectrow_array('SELECT COUNT(*) FROM letter WHERE module = ? AND code = ?', {}, 'suggestions', 'AVAILABLE');
3884 $dbh->do(q/
3885 INSERT INTO `letter`
3886 (module, code, name, title, content)
3887 VALUES
3888 ('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>>')
3889 /) unless $count > 0;
3890 $count = $dbh->selectrow_array('SELECT COUNT(*) FROM letter WHERE module = ? AND code = ?', {}, 'suggestions', 'ORDERED');
3891 $dbh->do(q/
3892 INSERT INTO `letter`
3893 (module, code, name, title, content)
3894 VALUES
3895 ('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>>')
3896 /) unless $count > 0;
3897 $count = $dbh->selectrow_array('SELECT COUNT(*) FROM letter WHERE module = ? AND code = ?', {}, 'suggestions', 'REJECTED');
3898 $dbh->do(q/
3899 INSERT INTO `letter`
3900 (module, code, name, title, content)
3901 VALUES
3902 ('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>>')
3903 /) unless $count > 0;
3904 print "Upgrade to $DBversion done (bug 5127: add default templates for suggestion status change notifications)\n";
3905 SetVersion ($DBversion);
3908 $DBversion = '3.03.00.005';
3909 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
3910 $dbh->do("update `systempreferences` set options='whitespace|T-prefix|cuecat|libsuite8' where variable='itemBarcodeInputFilter'");
3911 print "Upgrade to $DBversion done (Add itemBarcodeInputFilter choice libsuite8)\n";
3914 $DBversion = '3.03.00.006';
3915 if (C4::Context->preference("Version") < TransformToNum($DBversion) && $original_version < TransformToNum("3.02.01.002")) {
3916 $dbh->do("ALTER TABLE deletedborrowers ADD `privacy` int(11) AFTER smsalertnumber;");
3917 $dbh->do("ALTER TABLE deletedborrowers CHANGE `cardnumber` `cardnumber` varchar(16);");
3918 print "Upgrade to $DBversion done (Fix differences between borrowers and deletedborrowers)\n";
3919 SetVersion ($DBversion);
3922 $DBversion = '3.03.00.007';
3923 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
3924 $dbh->do("ALTER table suggestions ADD quantity SMALLINT(6) default NULL,
3925 ADD currency VARCHAR(3) default NULL,
3926 ADD price DECIMAL(28,6) default NULL,
3927 ADD total DECIMAL(28,6) default NULL;
3929 print "Upgrade to $DBversion done (Added acq related columns to suggestions)\n";
3930 SetVersion ($DBversion);
3933 $DBversion = '3.03.00.008';
3934 if (C4::Context->preference('Version') < TransformToNum($DBversion)){
3935 $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')");
3936 print "Upgrade to $DBversion done (adding syspref OPACNoResultsFound to control what displays when no results are found for a search in the OPAC.)\n";
3937 SetVersion ($DBversion);
3940 $DBversion = '3.03.00.009';
3941 if (C4::Context->preference("Version") < TransformToNum($DBversion) && $original_version < TransformToNum("3.02.01.003")) {
3942 $dbh->do("INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('IntranetUserCSS','','Add CSS to be included in the Intranet',NULL,'free')");
3943 print "Upgrade to $DBversion done (Add IntranetUserCSS syspref)\n";
3944 SetVersion ($DBversion);
3947 $DBversion = "3.03.00.010";
3948 if (C4::Context->preference("Version") < TransformToNum($DBversion) && $original_version < TransformToNum("3.02.02.001")) {
3949 $dbh->do("UPDATE `marc_subfield_structure` SET liblibrarian = 'Distance from earth' WHERE liblibrarian = 'Distrance from earth' AND tagfield = '034' AND tagsubfield = 'r';");
3950 $dbh->do("UPDATE `marc_subfield_structure` SET libopac = 'Distance from earth' WHERE libopac = 'Distrance from earth' AND tagfield = '034' AND tagsubfield = 'r';");
3951 print "Upgrade to $DBversion done (Fix misspelled 034r subfield in MARC21 Frameworks)\n";
3952 SetVersion ($DBversion);
3955 $DBversion = "3.03.00.011";
3956 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
3957 $dbh->do("UPDATE aqbooksellers SET gstrate=NULL WHERE gstrate=0.0");
3958 print "Upgrade to $DBversion done (Bug 5186: allow GST rate to be set to 0)\n";
3959 SetVersion ($DBversion);
3962 $DBversion = "3.03.00.012";
3963 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
3964 $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')");
3965 print "Upgrade to $DBversion done (Bug 2142: maxItemsInSearchResults syspref resurrected)\n";
3966 SetVersion ($DBversion);
3969 $DBversion = "3.03.00.013";
3970 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
3971 $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')");
3972 print "Upgrade to $DBversion done (added 'OpacPublic' syspref)\n";
3973 SetVersion ($DBversion);
3976 $DBversion = "3.03.00.014";
3977 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
3978 $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')");
3979 $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')");
3980 $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')");
3981 print "Upgrade to $DBversion done (Add flexible shelf browser constraints)\n";
3982 SetVersion ($DBversion);
3985 $DBversion = "3.03.00.015";
3986 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
3987 if ( C4::Context->preference("marcflavour") eq "MARC21" ) {
3988 my $sth = $dbh->prepare(
3989 "INSERT INTO `marc_subfield_structure` (`tagfield`, `tagsubfield`, `liblibrarian`, `libopac`, `repeatable`, `mandatory`, `kohafield`,
3990 `tab`, `authorised_value`, `authtypecode`, `value_builder`, `isurl`, `hidden`, `frameworkcode`, `seealso`, `link`, `defaultvalue`)
3991 VALUES ( ?, '9', '9 (RLIN)', '9 (RLIN)', 0, 0, '', 6, '', '', '', 0, -5, '', '', '', NULL)"
3993 $sth->execute('648');
3994 $sth->execute('654');
3995 $sth->execute('655');
3996 $sth->execute('656');
3997 $sth->execute('657');
3998 $sth->execute('658');
3999 $sth->execute('662');
4000 $sth->finish;
4001 print
4002 "Upgrade to $DBversion done (Bug 5619: Add subfield 9 to marc21 648,654,655,656,657,658,662)\n";
4004 SetVersion($DBversion);
4007 $DBversion = '3.03.00.016';
4008 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
4009 # reimplement OpacPrivacy system preference
4010 $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')");
4011 $dbh->do("ALTER TABLE `borrowers` ADD `privacy` INTEGER NOT NULL DEFAULT 1;");
4012 $dbh->do("ALTER TABLE `deletedborrowers` ADD `privacy` INTEGER NOT NULL DEFAULT 1;");
4013 print "Upgrade to $DBversion done (OpacPrivacy reimplementation)\n";
4014 SetVersion($DBversion);
4017 $DBversion = '3.03.00.017';
4018 if (C4::Context->preference("Version") < TransformToNum($DBversion) && $original_version < TransformToNum("3.02.03.001")) {
4019 $dbh->do("ALTER TABLE `currency` CHANGE `rate` `rate` FLOAT( 15, 5 ) NULL DEFAULT NULL;");
4020 print "Upgrade to $DBversion done (Enable currency rates >= 100)\n";
4021 SetVersion ($DBversion);
4024 $DBversion = '3.03.00.018';
4025 if (C4::Context->preference("Version") < TransformToNum($DBversion) && $original_version < TransformToNum("3.02.03.002")) {
4026 $dbh->do( q|update language_descriptions set description = 'Nederlands' where lang = 'nl' and subtag = 'nl'|);
4027 $dbh->do( q|update language_descriptions set description = 'Dansk' where lang = 'da' and subtag = 'da'|);
4028 print "Upgrade to $DBversion done (Correct language descriptions)\n";
4029 SetVersion ($DBversion);
4032 $DBversion = '3.03.00.019';
4033 if (C4::Context->preference("Version") < TransformToNum($DBversion) && $original_version < TransformToNum("3.02.03.003")) {
4034 # Fix bokmål
4035 $dbh->do("UPDATE language_subtag_registry SET description = 'Norwegian bokm&#229;l' WHERE subtag = 'nb';");
4036 $dbh->do("INSERT INTO language_rfc4646_to_iso639(rfc4646_subtag,iso639_2_code) VALUES( 'nb','nob');");
4037 $dbh->do("UPDATE language_descriptions SET description = 'Norsk bokm&#229;l' WHERE subtag = 'nb' AND lang = 'nb';");
4038 $dbh->do("UPDATE language_descriptions SET description = 'Norwegian bokm&#229;l' WHERE subtag = 'nb' AND lang = 'en';");
4039 $dbh->do("UPDATE language_descriptions SET description = 'Norvégien bokm&#229;l' WHERE subtag = 'nb' AND lang = 'fr';");
4040 # Add nynorsk
4041 $dbh->do("INSERT INTO language_subtag_registry( subtag, type, description, added) VALUES ( 'nn', 'language', 'Norwegian nynorsk','2011-02-14' )");
4042 $dbh->do("INSERT INTO language_rfc4646_to_iso639(rfc4646_subtag,iso639_2_code) VALUES( 'nn','nno')");
4043 $dbh->do("INSERT INTO language_descriptions(subtag, type, lang, description) VALUES( 'nn', 'language', 'nb', 'Norsk nynorsk')");
4044 $dbh->do("INSERT INTO language_descriptions(subtag, type, lang, description) VALUES( 'nn', 'language', 'nn', 'Norsk nynorsk')");
4045 $dbh->do("INSERT INTO language_descriptions(subtag, type, lang, description) VALUES( 'nn', 'language', 'en', 'Norwegian nynorsk')");
4046 $dbh->do("INSERT INTO language_descriptions(subtag, type, lang, description) VALUES( 'nn', 'language', 'fr', 'Norvégien nynorsk')");
4047 print "Upgrade to $DBversion done (Correct language descriptions for Norwegian)\n";
4048 SetVersion ($DBversion);
4051 $DBversion = '3.03.00.020';
4052 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
4053 $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')");
4054 $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')");
4055 print "Upgrade to $DBversion done (Bug 5811: Add sysprefs controlling overriding fines)\n";
4056 SetVersion($DBversion);
4059 $DBversion = '3.03.00.021';
4060 if (C4::Context->preference("Version") < TransformToNum($DBversion) && $original_version < TransformToNum("3.02.05.001")) {
4061 $dbh->do("ALTER TABLE items MODIFY enumchron TEXT");
4062 $dbh->do("ALTER TABLE deleteditems MODIFY enumchron TEXT");
4063 print "Upgrade to $DBversion done (bug 5642: longer serial enumeration)\n";
4064 SetVersion ($DBversion);
4067 $DBversion = '3.03.00.022';
4068 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
4069 $dbh->do("INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES ('AuthoritiesLog','0','If ON, log edit/create/delete actions on authorities.','','YesNo');");
4070 print "Upgrade to $DBversion done (Add AuthoritiesLog syspref)\n";
4071 SetVersion ($DBversion);
4074 # due to a mismatch in kohastructure.sql some koha will have missing columns in aqbasketgroup
4075 # this attempts to fix that
4076 $DBversion = '3.03.00.023';
4077 if (C4::Context->preference("Version") < TransformToNum($DBversion) && $original_version < TransformToNum("3.02.05.002")) {
4078 my $sth = $dbh->prepare("SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'aqbasketgroups' AND COLUMN_NAME = 'billingplace'");
4079 $sth->execute;
4080 $dbh->do("ALTER TABLE aqbasketgroups ADD billingplace VARCHAR(10)") if ! $sth->fetchrow_hashref;
4081 $sth = $dbh->prepare("SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'aqbasketgroups' AND COLUMN_NAME = 'deliveryplace'");
4082 $sth->execute;
4083 $dbh->do("ALTER TABLE aqbasketgroups ADD deliveryplace VARCHAR(10)") if ! $sth->fetchrow_hashref;
4084 $sth = $dbh->prepare("SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'aqbasketgroups' AND COLUMN_NAME = 'deliverycomment'");
4085 $sth->execute;
4086 $dbh->do("ALTER TABLE aqbasketgroups ADD deliverycomment VARCHAR(255)") if ! $sth->fetchrow_hashref;
4087 print "Upgrade to $DBversion done (Reconcile aqbasketgroups)\n";
4088 SetVersion ($DBversion);
4091 $DBversion = '3.03.00.024';
4092 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
4093 $dbh->do("INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES ('TraceCompleteSubfields','0','Force subject tracings to only match complete subfields.','0','YesNo')");
4094 $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')");
4095 print "Upgrade to $DBversion done (Add syspref to force whole-subfield matching on subject tracings)\n";
4096 SetVersion($DBversion);
4099 $DBversion = "3.03.00.025";
4100 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
4101 $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')");
4102 print "Upgrade to $DBversion done (Add syspref to control if user can choose pickup branch for holds)\n";
4103 SetVersion ($DBversion);
4106 $DBversion = '3.03.00.026';
4107 if (C4::Context->preference("Version") < TransformToNum($DBversion) && $original_version < TransformToNum("3.02.05.003")) {
4108 $dbh->do("UPDATE `message_attributes` SET message_name='Item Due' WHERE message_attribute_id=1 AND message_name LIKE 'Item DUE'");
4109 print "Upgrade to $DBversion done ( fix capitalization in message type )\n";
4110 SetVersion ($DBversion);
4113 $DBversion = '3.03.00.027';
4114 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
4115 $dbh->do("INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES('displayFacetCount', '0', NULL, NULL, 'YesNo')");
4116 $dbh->do("INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES('maxRecordsForFacets', '20', NULL, NULL, 'Integer')");
4117 print "Upgrade to $DBversion done (Preferences for facet count)\n";
4118 SetVersion ($DBversion);
4121 $DBversion = "3.03.00.028";
4122 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
4123 $dbh->do("INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES ('FacetLabelTruncationLength', 20, 'Truncate facets length to','','free')");
4124 print "Upgrade to $DBversion done (Add FacetLabelTruncationLength syspref to control facets displayed length)\n";
4125 SetVersion ($DBversion);
4128 $DBversion = "3.03.00.029";
4129 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
4130 $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')");
4131 print "Upgrade to $DBversion done (Add syspref to control if user can choose branch when making purchase suggestion)\n";
4132 SetVersion ($DBversion);
4135 $DBversion = "3.03.00.030";
4136 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
4137 $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')");
4138 $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')");
4139 print "Upgrade to $DBversion done (Add sysprefs to control custom favicons)\n";
4140 SetVersion ($DBversion);
4143 $DBversion = "3.03.00.031";
4144 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
4145 $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');");
4146 print "Upgrade to $DBversion done (Add syspref FineNotifyAtCheckin)\n";
4147 SetVersion ($DBversion);
4150 $DBversion = '3.03.00.032';
4151 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
4152 $dbh->do("INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES ('TraceSubjectSubdivisions', 1, 'Create searches on all subdivisions for subject tracings.','1','YesNo')");
4153 print "Upgrade to $DBversion done ( include subdivisions when generating subject tracing searches )\n";
4157 $DBversion = '3.03.00.033';
4158 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
4159 $dbh->do("INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES('StaffAuthorisedValueImages', '1', '', NULL, 'YesNo')");
4160 print "Upgrade to $DBversion done (System pref StaffAuthorisedValueImages)\n";
4161 SetVersion ($DBversion);
4164 $DBversion = '3.03.00.034';
4165 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
4166 $dbh->do("ALTER TABLE `categories` ADD `hidelostitems` tinyint(1) NOT NULL default '0' AFTER `reservefee`");
4167 print "Upgrade to $DBversion done (Add hidelostitems preference to borrower categories)\n";
4168 SetVersion ($DBversion);
4171 $DBversion = '3.03.00.035';
4172 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
4173 $dbh->do("ALTER TABLE `issuingrules` ADD hardduedate date default NULL AFTER issuelength");
4174 $dbh->do("ALTER TABLE `issuingrules` ADD hardduedatecompare tinyint NOT NULL default 0 AFTER hardduedate");
4175 my $duedate;
4176 if (C4::Context->preference("globalDueDate")) {
4177 $duedate = eval { output_pref( { dt => dt_from_string( C4::Context->preference("globalDueDate") ), dateonly => 1, dateformat => 'iso' } ); };
4178 $dbh->do("UPDATE `issuingrules` SET hardduedate = '$duedate', hardduedatecompare = 0");
4179 } elsif (C4::Context->preference("ceilingDueDate")) {
4180 $duedate = eval { output_pref( { dt => dt_from_string( C4::Context->preference("ceilingDueDate") ), dateonly => 1, dateformat => 'iso' } ); };
4181 $dbh->do("UPDATE `issuingrules` SET hardduedate = '$duedate', hardduedatecompare = -1");
4183 $dbh->do("DELETE FROM `systempreferences` WHERE variable = 'globalDueDate' OR variable = 'ceilingDueDate'");
4184 print "Upgrade to $DBversion done (Move global and ceiling due dates to Circ Rules level)\n";
4185 SetVersion ($DBversion);
4188 $DBversion = '3.03.00.036';
4189 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
4190 $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')");
4191 print "Upgrade to $DBversion done ( Make COinS optional in OPAC search results )\n";
4192 SetVersion ($DBversion);
4195 $DBversion = '3.03.00.037';
4196 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
4197 $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')");
4198 $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')");
4199 print "Upgrade to $DBversion done (Add 'Display856uAsImage' and 'OPACDisplay856uAsImage' syspref)\n";
4200 SetVersion ($DBversion);
4203 $DBversion = '3.03.00.038';
4204 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
4205 $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')");
4206 $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')");
4207 $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')");
4208 print "Upgrade to $DBversion done ( Add Self-checkout by Login system preferences )\n";
4211 $DBversion = "3.03.00.039";
4212 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
4213 $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');");
4214 print "Upgrade to $DBversion done (Add syspref ShowReviewer)\n";
4217 $DBversion = "3.03.00.040";
4218 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
4219 $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');");
4220 print "Upgrade to $DBversion done (Add syspref UseControlNumber)\n";
4223 $DBversion = "3.03.00.041";
4224 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
4225 $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')");
4226 $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')");
4227 print "Upgrade to $DBversion done (Add sysprefs to control alternate holdings information display)\n";
4228 SetVersion ($DBversion);
4231 $DBversion = '3.03.00.042';
4232 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
4233 stocknumber_checker();
4234 print "Upgrade to $DBversion done (5860 Index itemstocknumber)\n";
4235 SetVersion ($DBversion);
4238 sub stocknumber_checker { #code reused later on
4239 my @row;
4240 #drop the obsolete itemSStocknumber idx if it exists
4241 @row = $dbh->selectrow_array("SHOW INDEXES FROM items WHERE key_name='itemsstocknumberidx'");
4242 $dbh->do("ALTER TABLE `items` DROP INDEX `itemsstocknumberidx`;") if @row;
4244 #check itemstocknumber idx; remove it if it is unique
4245 @row = $dbh->selectrow_array("SHOW INDEXES FROM items WHERE key_name='itemstocknumberidx' AND non_unique=0");
4246 $dbh->do("ALTER TABLE `items` DROP INDEX `itemstocknumberidx`;") if @row;
4248 #add itemstocknumber index non-unique IF it still not exists
4249 @row = $dbh->selectrow_array("SHOW INDEXES FROM items WHERE key_name='itemstocknumberidx'");
4250 $dbh->do("ALTER TABLE items ADD INDEX itemstocknumberidx (stocknumber);") unless @row;
4253 $DBversion = "3.03.00.043";
4254 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
4256 $dbh->do("INSERT INTO authorised_values (category,authorised_value,lib,lib_opac) VALUES ('YES_NO','0','No','No')");
4257 $dbh->do("INSERT INTO authorised_values (category,authorised_value,lib,lib_opac) VALUES ('YES_NO','1','Yes','Yes')");
4259 print "Upgrade to $DBversion done ( add generic boolean YES_NO authorised_values pair )\n";
4260 SetVersion ($DBversion);
4263 $DBversion = '3.03.00.044';
4264 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
4265 $dbh->do("ALTER TABLE `aqbasketgroups` ADD `freedeliveryplace` TEXT NULL AFTER `deliveryplace`;");
4266 print "Upgrade to $DBversion done (adding freedeliveryplace to basketgroups)\n";
4269 $DBversion = '3.03.00.045';
4270 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
4271 #Remove obsolete columns from aqbooksellers if needed
4272 my $a = $dbh->selectall_hashref('SHOW columns from aqbooksellers','Field');
4273 my $sqldrop="ALTER TABLE aqbooksellers DROP COLUMN ";
4274 foreach(qw/deliverydays followupdays followupscancel invoicedisc nocalc specialty/) {
4275 $dbh->do($sqldrop.$_) if exists $a->{$_};
4277 #Remove obsolete column from aqbudgets if needed
4278 #The correct column is budget_notes
4279 $a = $dbh->selectall_hashref('SHOW columns from aqbudgets','Field');
4280 if(exists $a->{budget_description}) {
4281 $dbh->do("ALTER TABLE aqbudgets DROP COLUMN budget_description");
4283 print "Upgrade to $DBversion done (Remove obsolete columns from aqbooksellers and aqbudgets if needed)\n";
4284 SetVersion ($DBversion);
4287 $DBversion = "3.03.00.046";
4288 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
4289 $dbh->do("ALTER TABLE overduerules ALTER delay1 SET DEFAULT NULL, ALTER delay2 SET DEFAULT NULL, ALTER delay3 SET DEFAULT NULL");
4290 print "Upgrade to $DBversion done (Setting NULL default value for delayn columns in table overduerules)\n";
4291 SetVersion($DBversion);
4294 $DBversion = '3.03.00.047';
4295 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
4296 $dbh->do("ALTER TABLE borrowers ADD `state` mediumtext AFTER city;");
4297 $dbh->do("ALTER TABLE borrowers ADD `B_state` mediumtext AFTER B_city;");
4298 $dbh->do("ALTER TABLE borrowers ADD `altcontactstate` mediumtext AFTER altcontactaddress3;");
4299 $dbh->do("ALTER TABLE deletedborrowers ADD `state` mediumtext AFTER city;");
4300 $dbh->do("ALTER TABLE deletedborrowers ADD `B_state` mediumtext AFTER B_city;");
4301 $dbh->do("ALTER TABLE deletedborrowers ADD `altcontactstate` mediumtext AFTER altcontactaddress3;");
4302 print "Upgrade to $DBversion done (Add state field to patron's addresses)\n";
4305 $DBversion = '3.03.00.048';
4306 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
4307 $dbh->do("ALTER TABLE branches ADD `branchstate` mediumtext AFTER `branchcity`;");
4308 print "Upgrade to $DBversion done (Add state to branch address)\n";
4309 SetVersion ($DBversion);
4312 $DBversion = '3.03.00.049';
4313 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
4314 $dbh->do("ALTER TABLE `accountlines` ADD `note` text NULL default NULL");
4315 $dbh->do("ALTER TABLE `accountlines` ADD `manager_id` int( 11 ) NULL ");
4316 print "Upgrade to $DBversion done (adding note and manager_id fields in accountlines table)\n";
4317 SetVersion($DBversion);
4320 $DBversion = "3.03.00.050";
4321 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
4322 $dbh->do("
4323 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');
4325 print "Upgrade to $DBversion done (Adding OpacHiddenItems syspref)\n";
4326 SetVersion($DBversion);
4329 $DBversion = "3.03.00.051";
4330 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
4331 print "Upgrade to $DBversion done (Remove spaces and dashes from message_attribute names)\n";
4332 $dbh->do("UPDATE message_attributes SET message_name = 'Item_Due' WHERE message_name='Item Due'");
4333 $dbh->do("UPDATE message_attributes SET message_name = 'Advance_Notice' WHERE message_name='Advance Notice'");
4334 $dbh->do("UPDATE message_attributes SET message_name = 'Hold_Filled' WHERE message_name='Hold Filled'");
4335 $dbh->do("UPDATE message_attributes SET message_name = 'Item_Check_in' WHERE message_name='Item Check-in'");
4336 $dbh->do("UPDATE message_attributes SET message_name = 'Item_Checkout' WHERE message_name='Item Checkout'");
4337 SetVersion ($DBversion);
4340 $DBversion = "3.03.00.052";
4341 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
4342 $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');");
4343 print "Upgrade to $DBversion done (Add syspref WaitingNotifyAtCheckin)\n";
4344 SetVersion ($DBversion);
4347 $DBversion = "3.04.00.000";
4348 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
4349 print "Upgrade to $DBversion done Koha 3.4.0 release \n";
4350 SetVersion ($DBversion);
4353 $DBversion = "3.05.00.001";
4354 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
4355 $dbh->do(qq{
4356 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');
4358 print "Upgrade to $DBversion done (Adds New System preference numSearchRSSResults)\n";
4359 SetVersion($DBversion);
4362 $DBversion = '3.05.00.002';
4363 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
4364 #follow up fix 5860: some installs already past 3.3.0.42
4365 stocknumber_checker();
4366 print "Upgrade to $DBversion done (Fix for stocknumber index)\n";
4367 SetVersion ($DBversion);
4370 $DBversion = "3.05.00.003";
4371 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
4372 $dbh->do(qq{
4373 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');
4375 print "Upgrade to $DBversion done (Adds New System preference OpacRenewalBranch)\n";
4376 SetVersion($DBversion);
4379 $DBversion = "3.05.00.004";
4380 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
4381 $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');");
4382 print "Upgrade to $DBversion done (Add syspref ShowReviewerPhoto)\n";
4383 SetVersion($DBversion);
4386 $DBversion = "3.05.00.005";
4387 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
4388 $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');");
4389 print "Upgrade to $DBversion done (Adds pref BasketConfirmations)\n";
4390 SetVersion($DBversion);
4393 $DBversion = "3.05.00.006";
4394 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
4395 $dbh->do("INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES ('MARCAuthorityControlField008', '|| aca||aabn | a|a d', NULL, NULL, 'Textarea')");
4396 print "Upgrade to $DBversion done (Add syspref MARCAuthorityControlField008)\n";
4397 SetVersion ($DBversion);
4400 $DBversion = "3.05.00.007";
4401 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
4402 $dbh->do("INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES('OpenLibraryCovers',0,'If ON Openlibrary book covers will be show',NULL,'YesNo');");
4403 print "Upgrade to $DBversion done (Add syspref OpenLibraryCovers)\n";
4404 SetVersion($DBversion);
4407 $DBversion = "3.05.00.008";
4408 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
4409 $dbh->do("ALTER TABLE `cities` ADD `city_state` VARCHAR( 100 ) NULL DEFAULT NULL AFTER `city_name`;");
4410 $dbh->do("ALTER TABLE `cities` ADD `city_country` VARCHAR( 100 ) NULL DEFAULT NULL AFTER `city_zipcode`;");
4411 print "Add state and country to cities table corresponding to new columns in borrowers\n";
4412 SetVersion($DBversion);
4415 $DBversion = "3.05.00.009";
4416 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
4417 $dbh->do("INSERT INTO old_issues (borrowernumber, itemnumber, date_due, branchcode, issuingbranch, returndate, lastreneweddate, `return`, renewals, timestamp, issuedate)
4418 SELECT borrowernumber, itemnumber, date_due, branchcode, issuingbranch, returndate, lastreneweddate, `return`, renewals, timestamp, issuedate FROM issues WHERE borrowernumber IS NULL");
4419 $dbh->do("DELETE FROM issues WHERE borrowernumber IS NULL");
4421 $dbh->do("INSERT INTO old_issues (borrowernumber, itemnumber, date_due, branchcode, issuingbranch, returndate, lastreneweddate, `return`, renewals, timestamp, issuedate)
4422 SELECT borrowernumber, itemnumber, date_due, branchcode, issuingbranch, returndate, lastreneweddate, `return`, renewals, timestamp, issuedate FROM issues WHERE itemnumber IS NULL");
4423 $dbh->do("DELETE FROM issues WHERE itemnumber IS NULL");
4425 $dbh->do("INSERT INTO old_issues (borrowernumber, itemnumber, date_due, branchcode, issuingbranch, returndate, lastreneweddate, `return`, renewals, timestamp, issuedate)
4426 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)");
4427 $dbh->do("DELETE FROM issues WHERE NOT EXISTS (SELECT * FROM borrowers WHERE borrowernumber = issues.borrowernumber)");
4429 $dbh->do("INSERT INTO old_issues (borrowernumber, itemnumber, date_due, branchcode, issuingbranch, returndate, lastreneweddate, `return`, renewals, timestamp, issuedate)
4430 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)");
4431 $dbh->do("DELETE FROM issues WHERE NOT EXISTS (SELECT * FROM items WHERE itemnumber = issues.itemnumber)");
4433 $dbh->do("ALTER TABLE issues DROP FOREIGN KEY `issues_ibfk_1`");
4434 $dbh->do("ALTER TABLE issues DROP FOREIGN KEY `issues_ibfk_2`");
4435 $dbh->do("ALTER TABLE issues ALTER COLUMN borrowernumber DROP DEFAULT");
4436 $dbh->do("ALTER TABLE issues ALTER COLUMN itemnumber DROP DEFAULT");
4437 $dbh->do("ALTER TABLE issues MODIFY COLUMN borrowernumber int(11) NOT NULL");
4438 $dbh->do("ALTER TABLE issues MODIFY COLUMN itemnumber int(11) NOT NULL");
4439 $dbh->do("ALTER TABLE issues DROP KEY `issuesitemidx`");
4440 $dbh->do("ALTER TABLE issues ADD PRIMARY KEY (`itemnumber`)");
4441 $dbh->do("ALTER TABLE issues ADD CONSTRAINT `issues_ibfk_1` FOREIGN KEY (`borrowernumber`) REFERENCES `borrowers` (`borrowernumber`) ON DELETE RESTRICT ON UPDATE CASCADE");
4442 $dbh->do("ALTER TABLE issues ADD CONSTRAINT `issues_ibfk_2` FOREIGN KEY (`itemnumber`) REFERENCES `items` (`itemnumber`) ON DELETE RESTRICT ON UPDATE CASCADE");
4444 print "Upgrade to $DBversion done (issues referential integrity)\n";
4445 SetVersion ($DBversion);
4448 $DBversion = "3.05.00.010";
4449 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
4450 $dbh->do("CREATE INDEX priorityfoundidx ON reserves (priority,found)");
4451 print "Create an index on reserves to speed up holds awaiting pickup report bug 5866\n";
4452 SetVersion($DBversion);
4456 $DBversion = "3.05.00.011";
4457 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
4458 $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')");
4459 print "Upgrade to $DBversion done (add OPACResultsSidebar syspref (enh 6165))\n";
4460 SetVersion($DBversion);
4463 $DBversion = "3.05.00.012";
4464 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
4465 $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')");
4466 print "Upgrade to $DBversion done (add RecordLocalUseOnReturn syspref (enh 6403))\n";
4467 SetVersion($DBversion);
4470 $DBversion = "3.05.00.013";
4471 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
4472 $dbh->do(qq|INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES ('OpacKohaUrl','0',"Show 'Powered by Koha' text on OPAC footer.",NULL,NULL)|);
4473 print "Upgrade to $DBversion done (Add syspref 'OpacKohaUrl')\n";
4474 SetVersion($DBversion);
4477 $DBversion = "3.05.00.014";
4478 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
4479 $dbh->do("ALTER TABLE `borrowers` MODIFY `userid` VARCHAR(75)");
4480 print "Modified userid column length into 75 in borrowers\n";
4481 SetVersion($DBversion);
4484 $DBversion = "3.05.00.015";
4485 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
4486 $dbh->do("INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES ('NovelistSelectEnabled',0,'Enable Novelist Select content. Requires Novelist Profile and Password',NULL,'YesNo')");
4487 $dbh->do("INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES ('NovelistSelectProfile',NULL,'Novelist Select user Password',NULL,'free')");
4488 $dbh->do("INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES ('NovelistSelectPassword',NULL,'Enable Novelist user Profile',NULL,'free')");
4489 $dbh->do("INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES ('NovelistSelectView','tab','Where to display Novelist Select content','tab|above|below|right','Choice')");
4490 print "Upgrade to $DBversion done (Add support for EBSCO's NoveList Select (enh 6902))\n";
4491 SetVersion($DBversion);
4494 $DBversion = '3.05.00.016';
4495 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
4496 $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');");
4497 print "Upgrade to $DBversion done (Add EasyAnalyticalRecords syspref)\n";
4498 SetVersion ($DBversion);
4501 $DBversion = '3.05.00.017';
4502 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
4503 if (C4::Context->preference("marcflavour") eq 'MARC21' ||
4504 C4::Context->preference("marcflavour") eq 'NORMARC'){
4505 $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)");
4506 $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)");
4507 print "Upgrade to $DBversion done (Add 773 subfield 9 and 0 to default framework)\n";
4508 SetVersion ($DBversion);
4509 } elsif (C4::Context->preference("marcflavour") eq 'UNIMARC'){
4510 $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)");
4511 print "Upgrade to $DBversion done (Add 461 subfield 9 to default framework)\n";
4512 SetVersion ($DBversion);
4516 $DBversion = "3.05.00.018";
4517 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
4518 $dbh->do("INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('OpacNavBottom','','Links after OpacNav links','70|10','Textarea')");
4519 print "Upgrade to $DBversion done (add OpacNavBottom syspref (enh 6825): if appropriate, you can split OpacNav into OpacNav and OpacNavBottom)\n";
4520 SetVersion($DBversion);
4523 $DBversion = "3.05.00.019";
4524 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
4525 $dbh->do("UPDATE itemtypes SET imageurl = 'vokal/Book.png' WHERE imageurl = 'vokal/BOOK.png'");
4526 $dbh->do("UPDATE itemtypes SET imageurl = 'vokal/Book-32px.png' WHERE imageurl = 'vokal/BOOK-32px.png'");
4527 $dbh->do("UPDATE authorised_values SET imageurl = 'vokal/Book.png' WHERE imageurl = 'vokal/BOOK.png'");
4528 $dbh->do("UPDATE authorised_values SET imageurl = 'vokal/Book-32px.png' WHERE imageurl = 'vokal/BOOK-32px.png'");
4529 print "Upgrade to $DBversion done (remove duplicate VOKAL Book icons, bug 6862)\n";
4530 SetVersion($DBversion);
4533 $DBversion = "3.05.00.020";
4534 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
4535 $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')");
4536 print "Upgrade to $DBversion done (Add syspref AcqViewBaskets)\n";
4537 SetVersion($DBversion);
4540 $DBversion = "3.05.00.021";
4541 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
4542 $dbh->do("ALTER TABLE borrower_attribute_types ADD COLUMN display_checkout TINYINT(1) NOT NULL DEFAULT '0';");
4543 print "Upgrade to $DBversion done (Added a display_checkout field in borrower_attribute_types table)\n";
4544 SetVersion($DBversion);
4547 $DBversion = "3.05.00.022";
4548 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
4549 $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");
4550 print "Upgrade to $DBversion done (6094: Fixing ModAuthority problems, add a need_merge_authorities table)\n";
4551 SetVersion($DBversion);
4554 $DBversion = "3.05.00.023";
4555 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
4556 $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');");
4557 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";
4558 SetVersion($DBversion);
4561 $DBversion = "3.06.00.000";
4562 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
4563 print "Upgrade to $DBversion done Koha 3.6.0 release \n";
4564 SetVersion ($DBversion);
4567 $DBversion = "3.07.00.001";
4568 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
4569 my $borrowers = $dbh->selectcol_arrayref( "SELECT borrowernumber from borrowers where debarred =1;", { Columns => [1] } );
4570 $dbh->do("ALTER TABLE borrowers MODIFY debarred DATE DEFAULT NULL;");
4571 $dbh->do( "UPDATE borrowers set debarred='9999-12-31' where borrowernumber IN (" . join( ",", @$borrowers ) . ");" ) if ($borrowers and scalar(@$borrowers)>0);
4572 $dbh->do("ALTER TABLE borrowers ADD COLUMN debarredcomment VARCHAR(255) DEFAULT NULL AFTER debarred;");
4573 $dbh->do("ALTER TABLE deletedborrowers MODIFY debarred DATE DEFAULT NULL;");
4574 $dbh->do("ALTER TABLE deletedborrowers ADD COLUMN debarredcomment VARCHAR(255) DEFAULT NULL AFTER debarred;");
4575 print "Upgrade done (Change borrowers.debarred into Date )\n";
4576 SetVersion($DBversion);
4579 $DBversion = "3.07.00.002";
4580 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
4581 $dbh->do("UPDATE borrowers SET debarred=NULL WHERE debarred='0000-00-00';");
4582 print "Setting NULL to debarred where 0000-00-00 is stored (bug 7272)\n";
4583 SetVersion($DBversion);
4586 $DBversion = "3.07.00.003";
4587 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
4588 $dbh->do(" UPDATE `message_attributes` SET message_name='Item_Due' WHERE message_name='Item_DUE'");
4589 print "Updating message_name in message_attributes\n";
4590 SetVersion($DBversion);
4593 $DBversion = "3.07.00.004";
4594 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
4595 $dbh->do("ALTER TABLE `suggestions` ADD `patronreason` TEXT NULL AFTER `reason`");
4596 print "Upgrade to $DBversion done (Add column to suggestions table to store patrons' reasons for submitting a suggestion. )\n";
4597 SetVersion($DBversion);
4600 $DBversion = "3.07.00.005";
4601 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
4602 $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')");
4603 print "Upgrade to $DBversion done (BorrowerUnwantedField syspref)\n";
4604 SetVersion ($DBversion);
4607 $DBversion = "3.07.00.006";
4608 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
4609 $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');");
4610 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";
4611 SetVersion($DBversion);
4614 $DBversion = "3.07.00.007";
4615 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
4616 $dbh->do("ALTER TABLE items MODIFY materials text;");
4617 print "Upgrade to $DBversion done alter items.material from varchar(10) to text \n";
4618 SetVersion($DBversion);
4621 $DBversion = '3.07.00.008';
4622 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
4623 if (C4::Context->preference("marcflavour") eq 'MARC21') {
4624 if (C4::Context->preference("opaclanguages") eq "de") {
4625 $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, '');");
4626 } else {
4627 $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, '');");
4630 print "Upgrade to $DBversion done (add MARC21 field 545 to framework)\n";
4631 SetVersion ($DBversion);
4634 $DBversion = "3.07.00.009";
4635 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
4636 $dbh->do("ALTER TABLE `aqorders` ADD COLUMN `claims_count` INT(11) DEFAULT 0, ADD COLUMN `claimed_date` DATE DEFAULT NULL AFTER `claims_count`");
4637 print "Upgrade to $DBversion done (Add claims_count and claimed_date fields in aqorders table)\n";
4638 SetVersion($DBversion);
4641 $DBversion = "3.07.00.010";
4642 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
4643 $dbh->do(
4644 q|CREATE TABLE `biblioimages` (
4645 `imagenumber` int(11) NOT NULL AUTO_INCREMENT,
4646 `biblionumber` int(11) NOT NULL,
4647 `mimetype` varchar(15) NOT NULL,
4648 `imagefile` mediumblob NOT NULL,
4649 `thumbnail` mediumblob NOT NULL,
4650 PRIMARY KEY (`imagenumber`),
4651 CONSTRAINT `bibliocoverimage_fk1` FOREIGN KEY (`biblionumber`) REFERENCES `biblio` (`biblionumber`) ON DELETE CASCADE ON UPDATE CASCADE
4652 ) ENGINE=InnoDB DEFAULT CHARSET=utf8|
4654 $dbh->do(
4655 q|INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES ('OPACLocalCoverImages','0','Display local cover images on OPAC search and details pages.','1','YesNo')|
4657 $dbh->do(
4658 q|INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES ('LocalCoverImages','0','Display local cover images on intranet search and details pages.','1','YesNo')|
4660 $dbh->do(
4661 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')|
4663 $dbh->do(
4664 q|INSERT INTO permissions (module_bit, code, description) VALUES (13, 'upload_local_cover_images', 'Upload local cover images')|
4666 print "Upgrade to $DBversion done (Added support for local cover images)\n";
4667 SetVersion($DBversion);
4670 $DBversion = "3.07.00.011";
4671 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
4672 $dbh->do(<<ENDOFRENEWAL);
4673 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');
4674 ENDOFRENEWAL
4675 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";
4676 SetVersion($DBversion);
4679 $DBversion = "3.07.00.012";
4680 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
4681 $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')");
4682 print "Upgrade to $DBversion add 'AllowItemsOnHoldCheckout' syspref \n";
4683 SetVersion ($DBversion);
4686 $DBversion = "3.07.00.013";
4687 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
4688 $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');");
4689 print "Upgrade to $DBversion done (Bug 7345: Add system preference OpacExportOptions.)\n";
4690 SetVersion ($DBversion);
4693 $DBversion = "3.07.00.014";
4694 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
4695 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";
4696 SetVersion($DBversion);
4699 $DBversion = "3.07.00.015";
4700 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
4701 my $sth = $dbh->prepare(q|
4702 SELECT COUNT(*) FROM marc_subfield_structure where kohafield="biblioitems.editionstatement"
4704 $sth->execute;
4705 my $already_exists = $sth->fetchrow;
4706 if ( not $already_exists ) {
4707 my $field = C4::Context->preference("marcflavour") eq "UNIMARC" ? "205" : "250";
4708 my $subfield = "a";
4709 my $sth = $dbh->prepare( q|
4710 UPDATE marc_subfield_structure SET kohafield = "biblioitems.editionstatement"
4711 WHERE tagfield = ? AND tagsubfield = ?
4713 $sth->execute( $field, $subfield );
4714 print "Upgrade to $DBversion done (Added a mapping for biblioitems.editionstatement.)\n";
4715 } else {
4716 print "Upgrade to $DBversion done (Added a mapping for biblioitems.editionstatement (already exists, nothing to do).)\n";
4718 SetVersion($DBversion);
4721 $DBversion = "3.07.00.016";
4722 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
4723 $dbh->do("ALTER TABLE items ADD KEY `itemcallnumber` (itemcallnumber)");
4724 print "Upgrade to $DBversion done (Added index on items.itemcallnumber)\n";
4725 SetVersion($DBversion);
4728 $DBversion = "3.07.00.017";
4729 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
4730 $dbh->do("INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('TransferWhenCancelAllWaitingHolds','0','Transfer items when cancelling all waiting holds',NULL,'YesNo')");
4731 print "Upgrade to $DBversion done (Add sysprefs to control transfer when cancel all waiting holds)\n";
4732 SetVersion ($DBversion);
4735 $DBversion = "3.07.00.018";
4736 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
4737 $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;");
4738 print "Upgrade to $DBversion done ( adding offline operations table )\n";
4739 SetVersion($DBversion);
4742 $DBversion = "3.07.00.019";
4743 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
4744 $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");
4745 $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");
4746 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";
4747 SetVersion($DBversion);
4750 $DBversion = "3.07.00.020";
4751 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
4752 $dbh->do("INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES('OPACpatronimages',0,'Enable patron images in the OPAC',NULL,'YesNo');");
4753 print "Upgrade to $DBversion done (Bug 3516: Add the option to show patron images in the OPAC.)\n";
4754 SetVersion($DBversion);
4757 $DBversion = "3.07.00.021";
4758 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
4759 $dbh->do(
4760 "INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES('LinkerModule','Default','Chooses which linker module to use (see documentation).','Default|FirstMatchLastMatch','Choice');"
4762 $dbh->do(
4763 "INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES('LinkerOptions','','A pipe-separated list of options for the linker.','','free');"
4765 $dbh->do(
4766 "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');"
4768 $dbh->do(
4769 "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');"
4771 $dbh->do(
4772 "INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES('AutoCreateAuthorities',0,'Automatically create authorities that do not exist when cataloging records.',NULL,'YesNo');"
4774 $dbh->do(
4775 "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');"
4777 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";
4778 SetVersion($DBversion);
4781 $DBversion = "3.07.00.022";
4782 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
4783 $dbh->do("DELETE FROM reviews WHERE biblionumber NOT IN (SELECT biblionumber from biblio)");
4784 $dbh->do("UPDATE reviews SET borrowernumber = NULL WHERE borrowernumber NOT IN (SELECT borrowernumber FROM borrowers)");
4785 $dbh->do("ALTER TABLE reviews ADD CONSTRAINT reviews_ibfk_2 FOREIGN KEY (`biblionumber`) REFERENCES `biblio` (`biblionumber`) ON DELETE CASCADE ON UPDATE CASCADE");
4786 $dbh->do("ALTER TABLE reviews ADD CONSTRAINT reviews_ibfk_1 FOREIGN KEY (borrowernumber) REFERENCES borrowers (borrowernumber ) ON UPDATE CASCADE ON DELETE SET NULL");
4787 print "Upgrade to $DBversion done (Bug 7493 - Add constraint linking OPAC comment biblionumber to biblio, OPAC comment borrowernumber to borrowers.)\n";
4788 SetVersion($DBversion);
4791 $DBversion = "3.07.00.023";
4792 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
4793 $dbh->do("ALTER TABLE `message_transports` DROP FOREIGN KEY `message_transports_ibfk_3`");
4794 $dbh->do("ALTER TABLE `letter` DROP PRIMARY KEY");
4795 $dbh->do("ALTER TABLE `letter` ADD `branchcode` varchar(10) default NULL AFTER `code`");
4796 $dbh->do("ALTER TABLE `letter` ADD PRIMARY KEY (`module`,`code`, `branchcode`)");
4797 $dbh->do("ALTER TABLE `message_transports` ADD `branchcode` varchar(10) NOT NULL default ''");
4798 $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");
4799 $dbh->do("ALTER TABLE `letter` ADD `is_html` tinyint(1) default 0 AFTER `name`");
4801 $dbh->do("INSERT INTO `letter` (module, code, name, title, content, is_html)
4802 VALUES ('circulation','ISSUESLIP','Issue Slip','Issue Slip', '<h3><<branches.branchname>></h3>
4803 Checked out to <<borrowers.title>> <<borrowers.firstname>> <<borrowers.initials>> <<borrowers.surname>> <br />
4804 (<<borrowers.cardnumber>>) <br />
4806 <<today>><br />
4808 <h4>Checked Out</h4>
4809 <checkedout>
4811 <<biblio.title>> <br />
4812 Barcode: <<items.barcode>><br />
4813 Date due: <<issues.date_due>><br />
4814 </p>
4815 </checkedout>
4817 <h4>Overdues</h4>
4818 <overdue>
4820 <<biblio.title>> <br />
4821 Barcode: <<items.barcode>><br />
4822 Date due: <<issues.date_due>><br />
4823 </p>
4824 </overdue>
4826 <hr>
4828 <h4 style=\"text-align: center; font-style:italic;\">News</h4>
4829 <news>
4830 <div class=\"newsitem\">
4831 <h5 style=\"margin-bottom: 1px; margin-top: 1px\"><b><<opac_news.title>></b></h5>
4832 <p style=\"margin-bottom: 1px; margin-top: 1px\"><<opac_news.new>></p>
4833 <p class=\"newsfooter\" style=\"font-size: 8pt; font-style:italic; margin-bottom: 1px; margin-top: 1px\">Posted on <<opac_news.timestamp>></p>
4834 <hr />
4835 </div>
4836 </news>', 1)");
4837 $dbh->do("INSERT INTO `letter` (module, code, name, title, content, is_html)
4838 VALUES ('circulation','ISSUEQSLIP','Issue Quick Slip','Issue Quick Slip', '<h3><<branches.branchname>></h3>
4839 Checked out to <<borrowers.title>> <<borrowers.firstname>> <<borrowers.initials>> <<borrowers.surname>> <br />
4840 (<<borrowers.cardnumber>>) <br />
4842 <<today>><br />
4844 <h4>Checked Out Today</h4>
4845 <checkedout>
4847 <<biblio.title>> <br />
4848 Barcode: <<items.barcode>><br />
4849 Date due: <<issues.date_due>><br />
4850 </p>
4851 </checkedout>', 1)");
4852 $dbh->do("INSERT INTO `letter` (module, code, name, title, content, is_html)
4853 VALUES ('circulation','RESERVESLIP','Reserve Slip','Reserve Slip', '<h5>Date: <<today>></h5>
4855 <h3> Transfer to/Hold in <<branches.branchname>></h3>
4857 <h3><<borrowers.surname>>, <<borrowers.firstname>></h3>
4859 <ul>
4860 <li><<borrowers.cardnumber>></li>
4861 <li><<borrowers.phone>></li>
4862 <li> <<borrowers.address>><br />
4863 <<borrowers.address2>><br />
4864 <<borrowers.city >> <<borrowers.zipcode>>
4865 </li>
4866 <li><<borrowers.email>></li>
4867 </ul>
4868 <br />
4869 <h3>ITEM ON HOLD</h3>
4870 <h4><<biblio.title>></h4>
4871 <h5><<biblio.author>></h5>
4872 <ul>
4873 <li><<items.barcode>></li>
4874 <li><<items.itemcallnumber>></li>
4875 <li><<reserves.waitingdate>></li>
4876 </ul>
4877 <p>Notes:
4878 <pre><<reserves.reservenotes>></pre>
4879 </p>', 1)");
4880 $dbh->do("INSERT INTO `letter` (module, code, name, title, content, is_html)
4881 VALUES ('circulation','TRANSFERSLIP','Transfer Slip','Transfer Slip', '<h5>Date: <<today>></h5>
4882 <h3>Transfer to <<branches.branchname>></h3>
4884 <h3>ITEM</h3>
4885 <h4><<biblio.title>></h4>
4886 <h5><<biblio.author>></h5>
4887 <ul>
4888 <li><<items.barcode>></li>
4889 <li><<items.itemcallnumber>></li>
4890 </ul>', 1)");
4892 $dbh->do("INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('NoticeCSS','','Notices CSS url.',NULL,'free')");
4893 $dbh->do("INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('SlipCSS','','Slips CSS url.',NULL,'free')");
4895 $dbh->do("UPDATE `letter` SET content = replace(content, '<<title>>', '<<biblio.title>>') WHERE code = 'HOLDPLACED'");
4897 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";
4898 SetVersion($DBversion);
4901 $DBversion = "3.07.00.024";
4902 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
4903 $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')");
4904 $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')");
4905 print "Upgrade to $DBversion done (Added system preference ExpireReservesMaxPickUpDelay, system preference ExpireReservesMaxPickUpDelayCharge, add reseves.charge_if_expired)\n";
4908 $DBversion = "3.07.00.025";
4909 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
4910 if (TableExists('bibliocoverimage')) {
4911 $dbh->do( q|DROP TABLE bibliocoverimage;| );
4912 $dbh->do(
4913 q|CREATE TABLE biblioimages (
4914 imagenumber int(11) NOT NULL AUTO_INCREMENT,
4915 biblionumber int(11) NOT NULL,
4916 mimetype varchar(15) NOT NULL,
4917 imagefile mediumblob NOT NULL,
4918 thumbnail mediumblob NOT NULL,
4919 PRIMARY KEY (imagenumber),
4920 CONSTRAINT bibliocoverimage_fk1 FOREIGN KEY (biblionumber) REFERENCES biblio (biblionumber) ON DELETE CASCADE ON UPDATE CASCADE
4921 ) ENGINE=InnoDB DEFAULT CHARSET=utf8;|
4924 print "Upgrade to $DBversion done (Correct table name for local cover images if needed. )\n";
4925 SetVersion($DBversion);
4928 $DBversion = "3.07.00.026";
4929 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
4930 $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');");
4931 print "Upgrade to $DBversion done (Add syspref CalendarFirstDayOfWeek used to select the first day of week to use in the calendar. )\n";
4932 SetVersion($DBversion);
4935 $DBversion = "3.07.00.027";
4936 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
4937 $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');});
4938 print "Upgrade to $DBversion done (Added system preference RoutingListNote for adding a general note to all routing lists.)\n";
4939 SetVersion($DBversion);
4942 $DBversion = "3.07.00.028";
4943 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
4944 $dbh->do(qq{
4945 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');
4947 print "Upgrade to $DBversion done (Bug 6296 New System preference AllowPKIAuth)\n";
4950 $DBversion = "3.07.00.029";
4951 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
4952 $dbh->do(q{DROP TABLE IF EXISTS `oai_sets_descriptions`;});
4953 $dbh->do(q{DROP TABLE IF EXISTS `oai_sets_mappings`;});
4954 $dbh->do(q{DROP TABLE IF EXISTS `oai_sets_biblios`;});
4955 $dbh->do(q{DROP TABLE IF EXISTS `oai_sets`;});
4957 $dbh->do(q{
4958 CREATE TABLE `oai_sets` (
4959 `id` int(11) NOT NULL auto_increment,
4960 `spec` varchar(80) NOT NULL UNIQUE,
4961 `name` varchar(80) NOT NULL,
4962 PRIMARY KEY (`id`)
4963 ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
4966 $dbh->do(q{
4967 CREATE TABLE `oai_sets_descriptions` (
4968 `set_id` int(11) NOT NULL,
4969 `description` varchar(255) NOT NULL,
4970 CONSTRAINT `oai_sets_descriptions_ibfk_1` FOREIGN KEY (`set_id`) REFERENCES `oai_sets` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
4971 ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
4974 $dbh->do(q{
4975 CREATE TABLE `oai_sets_mappings` (
4976 `set_id` int(11) NOT NULL,
4977 `marcfield` char(3) NOT NULL,
4978 `marcsubfield` char(1) NOT NULL,
4979 `marcvalue` varchar(80) NOT NULL,
4980 CONSTRAINT `oai_sets_mappings_ibfk_1` FOREIGN KEY (`set_id`) REFERENCES `oai_sets` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
4981 ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
4984 $dbh->do(q{
4985 CREATE TABLE `oai_sets_biblios` (
4986 `biblionumber` int(11) NOT NULL,
4987 `set_id` int(11) NOT NULL,
4988 PRIMARY KEY (`biblionumber`, `set_id`),
4989 CONSTRAINT `oai_sets_biblios_ibfk_1` FOREIGN KEY (`biblionumber`) REFERENCES `biblio` (`biblionumber`) ON DELETE CASCADE ON UPDATE CASCADE,
4990 CONSTRAINT `oai_sets_biblios_ibfk_2` FOREIGN KEY (`set_id`) REFERENCES `oai_sets` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
4991 ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
4994 $dbh->do(q{
4995 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');
4998 print "Upgrade to $DBversion done (Atomic update for OAI-PMH sets management)\n";
4999 SetVersion($DBversion);
5002 $DBversion = "3.07.00.030";
5003 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
5004 $dbh->do("ALTER TABLE default_circ_rules ADD
5005 COLUMN `returnbranch` varchar(15) default NULL AFTER `holdallowed`");
5006 $dbh->do("ALTER TABLE branch_item_rules ADD
5007 COLUMN `returnbranch` varchar(15) default NULL AFTER `holdallowed`");
5008 $dbh->do("ALTER TABLE default_branch_circ_rules ADD
5009 COLUMN `returnbranch` varchar(15) default NULL AFTER `holdallowed`");
5010 $dbh->do("ALTER TABLE default_branch_item_rules ADD
5011 COLUMN `returnbranch` varchar(15) default NULL AFTER `holdallowed`");
5012 # set the default rule to the current value of HomeOrHoldingBranchReturn (default to 'homebranch' if need be)
5013 my $homeorholdingbranchreturn = C4::Context->preference('HomeOrHoldingBranchReturn') || 'homebranch';
5014 $dbh->do("UPDATE default_circ_rules SET returnbranch = '$homeorholdingbranchreturn'");
5015 print "Upgrade to $DBversion done (Atomic update for OAI-PMH sets management)\n";
5016 SetVersion($DBversion);
5019 $DBversion = "3.07.00.031";
5020 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
5021 $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')");
5022 print "Upgrade to $DBversion done (Add syspref to tell Koha if ICU indexing is in use for Zebra or not.)\n";
5023 SetVersion ($DBversion);
5026 $DBversion = "3.07.00.032";
5027 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
5028 $dbh->do("ALTER TABLE virtualshelves MODIFY COLUMN owner int"); #should have been int already (fk to borrowers)
5029 $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
5030 $dbh->do("DELETE FROM virtualshelves WHERE owner IS NULL and category=1"); #delete private lists without owner (cascades to shelfcontents)
5031 $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");
5032 $dbh->do("UPDATE virtualshelves SET allow_add=0, allow_delete_own=1, allow_delete_other=0 WHERE category=1");
5033 $dbh->do("UPDATE virtualshelves SET allow_add=0, allow_delete_own=1, allow_delete_other=0 WHERE category=2");
5034 $dbh->do("UPDATE virtualshelves SET allow_add=1, allow_delete_own=1, allow_delete_other=1 WHERE category=3");
5035 $dbh->do("UPDATE virtualshelves SET category=2 WHERE category=3");
5037 $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");
5038 $dbh->do("UPDATE virtualshelfcontents co LEFT JOIN virtualshelves sh USING (shelfnumber) SET co.borrowernumber=sh.owner");
5040 $dbh->do("CREATE TABLE virtualshelfshares
5041 (id int AUTO_INCREMENT PRIMARY KEY, shelfnumber int NOT NULL,
5042 borrowernumber int, invitekey varchar(10), sharedate datetime,
5043 CONSTRAINT `virtualshelfshares_ibfk_1` FOREIGN KEY (`shelfnumber`) REFERENCES `virtualshelves` (`shelfnumber`) ON DELETE CASCADE ON UPDATE CASCADE,
5044 CONSTRAINT `virtualshelfshares_ibfk_2` FOREIGN KEY (`borrowernumber`) REFERENCES `borrowers` (`borrowernumber`) ON DELETE SET NULL ON UPDATE SET NULL) ENGINE=InnoDB DEFAULT CHARSET=utf8");
5046 $dbh->do("INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES('OpacAllowPublicListCreation',1,'If set, allows opac users to create public lists',NULL,'YesNo');");
5047 $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');");
5049 print "Upgrade to $DBversion done (BZ7310: Improving list permissions)\n";
5050 SetVersion($DBversion);
5053 $DBversion = "3.07.00.033";
5054 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
5055 $dbh->do("ALTER TABLE branches ADD opac_info text;");
5056 print "Upgrade to $DBversion done add opac_info to branches \n";
5057 SetVersion($DBversion);
5060 $DBversion = "3.07.00.034";
5061 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
5062 $dbh->do("ALTER TABLE borrower_attribute_types ADD COLUMN category_code VARCHAR(10) NULL DEFAULT NULL AFTER `display_checkout`");
5063 $dbh->do("ALTER TABLE borrower_attribute_types ADD COLUMN class VARCHAR(255) NOT NULL DEFAULT '' AFTER `category_code`");
5064 $dbh->do("ALTER TABLE borrower_attribute_types ADD CONSTRAINT category_code_fk FOREIGN KEY (category_code) REFERENCES categories(categorycode)");
5065 print "Upgrade to $DBversion done (New fields category_code and class in borrower_attribute_types table)\n";
5066 SetVersion($DBversion);
5069 $DBversion = "3.07.00.035";
5070 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
5071 $dbh->do("ALTER TABLE issues CHANGE date_due date_due datetime");
5072 $dbh->do("UPDATE issues SET date_due = CONCAT(SUBSTR(date_due,1,11),'23:59:00')");
5073 $dbh->do("ALTER TABLE issues CHANGE returndate returndate datetime");
5074 $dbh->do("ALTER TABLE issues CHANGE lastreneweddate lastreneweddate datetime");
5075 $dbh->do("ALTER TABLE issues CHANGE issuedate issuedate datetime");
5076 $dbh->do("ALTER TABLE old_issues CHANGE date_due date_due datetime");
5077 $dbh->do("ALTER TABLE old_issues CHANGE returndate returndate datetime");
5078 $dbh->do("ALTER TABLE old_issues CHANGE lastreneweddate lastreneweddate datetime");
5079 $dbh->do("ALTER TABLE old_issues CHANGE issuedate issuedate datetime");
5080 $dbh->do("UPDATE accountlines SET description = CONCAT(description,' 23:59') WHERE accounttype='F' OR accounttype='FU'"); #BUG-8253
5081 print "Upgrade to $DBversion done (Setting up issues and accountlines tables for hourly loans)\n";
5082 SetVersion($DBversion);
5085 $DBversion = "3.07.00.036";
5086 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
5087 $dbh->do(qq{
5088 ALTER TABLE z3950servers ADD timeout INT( 11 ) NOT NULL DEFAULT '0' AFTER syntax;
5090 print "Upgrade to $DBversion done (New timeout field in z3950servers)\n";
5093 $DBversion = "3.07.00.037";
5094 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
5095 $dbh->do("
5096 ALTER TABLE `marc_subfield_structure` ADD `maxlength` INT( 4 ) NOT NULL DEFAULT '9999';
5098 $dbh->do("
5099 UPDATE `marc_subfield_structure` SET maxlength=24 WHERE tagfield='000';
5101 $dbh->do("
5102 UPDATE marc_subfield_structure SET maxlength = IF ((SELECT value FROM systempreferences WHERE variable = 'marcflavour')='MARC21','40','9999') WHERE tagfield='008';
5104 $dbh->do("
5105 UPDATE marc_subfield_structure SET maxlength = IF ((SELECT value FROM systempreferences WHERE variable = 'marcflavour')='NORMARC','40','9999') WHERE tagfield='008';
5107 $dbh->do("
5108 UPDATE marc_subfield_structure SET maxlength = IF ((SELECT value FROM systempreferences WHERE variable = 'marcflavour')='UNIMARC','36','9999') WHERE tagfield='100';
5110 print "Upgrade to $DBversion done (Add new field maxlength to marc_subfield_structure)\n";
5111 SetVersion($DBversion);
5114 $DBversion = "3.07.00.038";
5115 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
5116 $dbh->do(qq{
5117 INSERT INTO systempreferences(variable,value,explanation,options,type)
5118 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')
5120 print "Upgrade to $DBversion done (Added system preference 'UniqueItemFields')\n";
5121 SetVersion($DBversion);
5124 $DBversion = "3.07.00.039";
5125 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
5126 $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')} );
5127 $dbh->do( qq{CREATE TABLE IF NOT EXISTS social_data
5128 ( isbn VARCHAR(30),
5129 num_critics INT,
5130 num_critics_pro INT,
5131 num_quotations INT,
5132 num_videos INT,
5133 score_avg DECIMAL(5,2),
5134 num_scores INT,
5135 PRIMARY KEY (isbn)
5136 ) ENGINE=InnoDB DEFAULT CHARSET=utf8
5137 } );
5138 $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')} );
5139 print "Upgrade to $DBversion done (added syspref and table for babeltheque (Babeltheque_url_js, babeltheque))\n";
5140 SetVersion($DBversion);
5143 $DBversion = "3.07.00.040";
5144 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
5145 $dbh->do( qq{INSERT IGNORE INTO systempreferences (variable,value,explanation,options,type) VALUES('SocialNetworks','0','Enable/Disable social networks links in opac detail','','YesNo')} );
5146 print "Upgrade to $DBversion done (added syspref SocialNetworks, to display facebook/ggl+ and other buttons)\n";
5147 SetVersion($DBversion);
5152 $DBversion = "3.07.00.041";
5153 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
5154 $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')");
5155 print "Upgrade to $DBversion done (Add system preference SubscriptionDuplicateDroppedInput)\n";
5156 SetVersion($DBversion);
5159 $DBversion = "3.07.00.042";
5160 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
5161 $dbh->do("ALTER TABLE reserves ADD suspend BOOLEAN NOT NULL DEFAULT 0");
5162 $dbh->do("ALTER TABLE old_reserves ADD suspend BOOLEAN NOT NULL DEFAULT 0");
5164 $dbh->do("ALTER TABLE reserves ADD suspend_until DATETIME NULL DEFAULT NULL");
5165 $dbh->do("ALTER TABLE old_reserves ADD suspend_until DATETIME NULL DEFAULT NULL");
5167 $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')");
5169 print "Upgrade to $DBversion done (Add suspend fields to reserves table, add syspref AutoResumeSuspendedHolds)\n";
5170 SetVersion ($DBversion);
5173 $DBversion = "3.07.00.043";
5174 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
5175 my $countXSLTDetailsDisplay = 0;
5176 my $valueXSLTDetailsDisplay = "";
5177 my $valueXSLTResultsDisplay = "";
5178 my $valueOPACXSLTDetailsDisplay = "";
5179 my $valueOPACXSLTResultsDisplay = "";
5180 #the line below test if database comes from a BibLibre's branch
5181 $countXSLTDetailsDisplay = $dbh->do('SELECT 1 FROM systempreferences WHERE variable="IntranetXSLTDetailsDisplay"');
5182 if ($countXSLTDetailsDisplay > 0)
5184 #the two lines below will only be used to update the databases from the BibLibre's branch. They will not affect the others
5185 $dbh->do(q|UPDATE systempreferences SET variable="XSLTDetailsDisplay" WHERE variable="IntranetXSLTDetailsDisplay"|);
5186 $dbh->do(q|UPDATE systempreferences SET variable="XSLTResultsDisplay" WHERE variable="IntranetXSLTResultsDisplay"|);
5188 else
5190 $valueXSLTDetailsDisplay = "default" if (C4::Context->preference("XSLTDetailsDisplay"));
5191 $valueXSLTResultsDisplay = "default" if (C4::Context->preference("XSLTResultsDisplay"));
5192 $valueOPACXSLTDetailsDisplay = "default" if (C4::Context->preference("OPACXSLTDetailsDisplay"));
5193 $valueOPACXSLTResultsDisplay = "default" if (C4::Context->preference("OPACXSLTResultsDisplay"));
5194 $dbh->do("UPDATE systempreferences SET type='Free', value=\"$valueXSLTDetailsDisplay\" WHERE variable='XSLTDetailsDisplay'");
5195 $dbh->do("UPDATE systempreferences SET type='Free', value=\"$valueXSLTResultsDisplay\" WHERE variable='XSLTResultsDisplay'");
5196 $dbh->do("UPDATE systempreferences SET type='Free', value=\"$valueOPACXSLTDetailsDisplay\" WHERE variable='OPACXSLTDetailsDisplay'");
5197 $dbh->do("UPDATE systempreferences SET type='Free', value=\"$valueOPACXSLTResultsDisplay\" WHERE variable='OPACXSLTResultsDisplay'");
5199 print "Upgrade to $DBversion done (XSLT systempreference takes a path to file rather than YesNo)\n";
5200 SetVersion($DBversion);
5203 $DBversion = "3.07.00.044";
5204 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
5205 $dbh->do("ALTER TABLE aqbooksellers ADD deliverytime INT DEFAULT NULL");
5206 print "Upgrade to $DBversion done (Add deliverytime field in aqbooksellers table)";
5207 SetVersion($DBversion);
5210 $DBversion = "3.07.00.045";
5211 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
5212 $dbh->do("ALTER TABLE import_batches MODIFY COLUMN batch_type ENUM('batch','z3950','webservice') NOT NULL default 'batch'");
5213 print "Upgrade to $DBversion done (Add 'webservice' to batch_type enum)\n";
5214 SetVersion ($DBversion);
5217 $DBversion = "3.07.00.046";
5218 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
5219 $dbh->do("ALTER TABLE issuingrules ADD COLUMN lengthunit varchar(10) DEFAULT 'days' AFTER issuelength");
5220 print "Upgrade to $DBversion done (Setting up issues tables for hourly loans (lengthunit fix))\n";
5221 SetVersion($DBversion);
5224 $DBversion = "3.07.00.047";
5225 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
5226 $dbh->do("CREATE INDEX items_location ON items(location)");
5227 $dbh->do("CREATE INDEX items_ccode ON items(ccode)");
5228 print "Upgrade to $DBversion done (items_location and items_ccode indexes added for ShelfBrowser)\n";
5229 SetVersion($DBversion);
5232 $DBversion = "3.07.00.048";
5233 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
5234 $dbh->do(
5235 q | CREATE TABLE ratings (
5236 borrowernumber int(11) NOT NULL,
5237 biblionumber int(11) NOT NULL,
5238 rating_value tinyint(1) NOT NULL,
5239 timestamp timestamp NOT NULL default CURRENT_TIMESTAMP,
5240 PRIMARY KEY (borrowernumber,biblionumber),
5241 CONSTRAINT ratings_ibfk_1 FOREIGN KEY (borrowernumber) REFERENCES borrowers (borrowernumber) ON DELETE CASCADE ON UPDATE CASCADE,
5242 CONSTRAINT ratings_ibfk_2 FOREIGN KEY (biblionumber) REFERENCES biblio (biblionumber) ON DELETE CASCADE ON UPDATE CASCADE
5243 ) ENGINE=InnoDB DEFAULT CHARSET=utf8 |
5246 $dbh->do(
5247 q /INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES ('OpacStarRatings','disable',NULL,'disable|all|details','Choice') /
5250 print
5251 "Upgrade to $DBversion done (Add 'ratings' table and 'OpacStarRatings' syspref)\n";
5252 SetVersion($DBversion);
5255 $DBversion = "3.07.00.049";
5256 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
5257 $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')");
5258 print "Upgrade to $DBversion done (Add system preference OpacBrowseResults ))\n";
5259 SetVersion($DBversion);
5262 $DBversion = "3.08.00.000";
5263 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
5264 print "Upgrade to $DBversion done\n";
5265 SetVersion($DBversion);
5268 $DBversion = "3.09.00.001";
5269 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
5270 $dbh->do("ALTER TABLE borrower_attribute_types MODIFY category_code VARCHAR( 1 ) NULL DEFAULT NULL");
5271 print "Upgrade to $DBversion done. (Bug 8002: Update patron attribute types table to allow NULL category_code)\n";
5272 SetVersion($DBversion);
5275 $DBversion = "3.09.00.002";
5276 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
5277 $dbh->do("ALTER TABLE saved_sql
5278 ADD (
5279 cache_expiry INT NOT NULL DEFAULT 300,
5280 public BOOLEAN NOT NULL DEFAULT FALSE
5283 print "Upgrade to $DBversion done (Added cache_expiry and public fields in
5284 saved_reports table.)\n";
5285 SetVersion($DBversion);
5288 $DBversion = "3.09.00.003";
5289 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
5290 $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');");
5291 print "Upgrade to $DBversion done (Added SvcMaxReportRows syspref)\n";
5292 SetVersion($DBversion);
5295 $DBversion = "3.09.00.004";
5296 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
5297 $dbh->do("INSERT IGNORE INTO permissions (module_bit, code, description) VALUES('13', 'edit_patrons', 'Perform batch modifivation of patrons')");
5298 print "Upgrade to $DBversion done (Adds permissions flag for access to the patron modifications tool)\n";
5299 SetVersion($DBversion);
5302 $DBversion = "3.09.00.005";
5303 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
5304 unless (TableExists('quotes')) {
5305 $dbh->do( qq{
5306 CREATE TABLE `quotes` (
5307 `id` int(11) NOT NULL AUTO_INCREMENT,
5308 `source` text DEFAULT NULL,
5309 `text` mediumtext NOT NULL,
5310 `timestamp` datetime NOT NULL,
5311 PRIMARY KEY (`id`)
5312 ) ENGINE=InnoDB DEFAULT CHARSET=utf8
5315 $dbh->do( qq{
5316 INSERT IGNORE INTO permissions VALUES (13, "edit_quotes","Edit quotes for quote-of-the-day feature");
5318 $dbh->do( qq{
5319 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');
5321 print "Upgrade to $DBversion done (Adding Quote of the Day Option.)\n";
5322 SetVersion($DBversion);
5325 $DBversion = "3.09.00.006";
5326 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
5327 $dbh->do("UPDATE systempreferences SET
5328 variable = 'OPACShowHoldQueueDetails',
5329 value = CASE value WHEN '1' THEN 'priority' ELSE 'none' END,
5330 options = 'none|priority|holds|holds_priority',
5331 explanation = 'Show holds details in OPAC',
5332 type = 'Choice'
5333 WHERE variable = 'OPACDisplayRequestPriority'");
5334 print "Upgrade to $DBversion done (Changed system preference OPACDisplayRequestPriority -> OPACShowHoldQueueDetails)\n";
5335 SetVersion($DBversion);
5338 $DBversion = "3.09.00.007";
5339 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
5340 unless(C4::Context->preference('ReservesControlBranch')){
5341 $dbh->do("INSERT INTO `systempreferences` (variable,value,options,explanation,type) VALUES ('ReservesControlBranch','PatronLibrary','ItemHomeLibrary|PatronLibrary','Branch checked for members reservations rights.','Choice')");
5343 print "Upgrade to $DBversion done (Insert ReservesControlBranch systempreference into systempreferences table )\n";
5344 SetVersion($DBversion);
5347 $DBversion = "3.09.00.008";
5348 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
5349 $dbh->do("ALTER TABLE sessions ADD PRIMARY KEY (id);");
5350 $dbh->do("ALTER TABLE sessions DROP INDEX `id`;");
5351 print "Upgrade to $DBversion done (redefine the field id as PRIMARY KEY of sessions)\n";
5352 SetVersion($DBversion);
5355 $DBversion = "3.09.00.009";
5356 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
5357 $dbh->do("ALTER TABLE branches ADD PRIMARY KEY (branchcode);");
5358 $dbh->do("ALTER TABLE branches DROP INDEX branchcode;");
5359 print "Upgrade to $DBversion done (redefine the field branchcode as PRIMARY KEY of branches)\n";
5360 SetVersion ($DBversion);
5363 $DBversion = "3.09.00.010";
5364 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
5365 $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')");
5366 print "Upgrade to $DBversion done (Add system preference issuelostitem ))\n";
5367 SetVersion($DBversion);
5370 $DBversion = "3.09.00.011";
5371 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
5372 $dbh->do("ALTER TABLE `biblioitems` ADD `ean` VARCHAR( 13 ) NULL AFTER issn");
5373 $dbh->do("CREATE INDEX `ean` ON biblioitems (`ean`) ");
5374 $dbh->do("ALTER TABLE `deletedbiblioitems` ADD `ean` VARCHAR( 13 ) NULL AFTER issn");
5375 if (C4::Context->preference("marcflavour") eq 'UNIMARC') {
5376 $dbh->do("UPDATE marc_subfield_structure SET kohafield='biblioitems.ean' WHERE tagfield='073' and tagsubfield='a'");
5378 print "Upgrade to $DBversion done (Adding ean in biblioitems and deletedbiblioitems)\n";
5379 print "If you have records with ean, please run misc/batchRebuildBiblioTables.pl to populate bibliotems.ean\n" if (C4::Context->preference("marcflavour") eq 'UNIMARC');
5380 SetVersion($DBversion);
5383 $DBversion = "3.09.00.012";
5384 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
5385 $dbh->do("INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES('SuspendHoldsIntranet', '1', NULL , 'Allow holds to be suspended from the intranet.', 'YesNo')");
5386 $dbh->do("INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES('SuspendHoldsOpac', '1', NULL , 'Allow holds to be suspended from the OPAC.', 'YesNo')");
5387 print "Upgrade to $DBversion done (Add system preference OpacBrowseResults ))\n";
5388 SetVersion($DBversion);
5391 $DBversion ="3.09.00.013";
5392 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
5393 $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');");
5394 print "Upgrade to $DBversion done (Add system preference DefaultLanguageField008))\n";
5395 SetVersion($DBversion);
5398 $DBversion ="3.09.00.014";
5399 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
5400 # add phone message transport type
5401 $dbh->do("INSERT INTO message_transport_types (message_transport_type) VALUES ('phone')");
5403 # adds HOLD_PHONE and PREDUE_PHONE letters (as placeholders)
5404 $dbh->do("INSERT INTO letter (module, code, name, title, content) VALUES
5405 ('reserves', 'HOLD_PHONE', 'Item Available for Pick-up (phone notice)', 'Item Available for Pick-up (phone notice)', 'Your item is available for pickup'),
5406 ('circulation', 'PREDUE_PHONE', 'Advance Notice of Item Due (phone notice)', 'Advance Notice of Item Due (phone notice)', 'Your item is due soon'),
5407 ('circulation', 'OVERDUE_PHONE', 'Overdue Notice (phone notice)', 'Overdue Notice (phone notice)', 'Your item is overdue')
5410 # add phone notifications to patron message preferences options
5411 $dbh->do("INSERT INTO message_transports
5412 (message_attribute_id, message_transport_type, is_digest, letter_module, letter_code) VALUES
5413 (4, 'phone', 0, 'reserves', 'HOLD_PHONE'),
5414 (2, 'phone', 0, 'circulation', 'PREDUE_PHONE')
5417 # add TalkingTechItivaPhoneNotification syspref
5418 $dbh->do("INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES('TalkingTechItivaPhoneNotification',0,'If ON, enables Talking Tech I-tiva phone notifications',NULL,'YesNo');");
5420 print "Upgrade done (Support for Talking Tech i-tiva phone notification system)\n";
5421 SetVersion($DBversion);
5424 $DBversion = "3.09.00.015";
5425 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
5426 $dbh->do(qq{
5427 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')
5429 print "Upgrade to $DBversion done (Add System preference StatisticsFields)\n";
5430 SetVersion($DBversion);
5433 $DBversion = "3.09.00.016";
5434 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
5435 $dbh->do("INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('OPACShowBarcode','0','Show items barcode in holding tab','','YesNo')");
5436 print "Upgrade to $DBversion done (Add syspref OPACShowBarcode)\n";
5437 SetVersion ($DBversion);
5440 $DBversion = "3.09.00.017";
5441 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
5442 $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');");
5443 print "Upgrade to $DBversion done (Add customizable OpacNavRight region to the OPAC main page)\n";
5444 SetVersion ($DBversion);
5447 $DBversion = "3.09.00.018";
5448 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
5449 $dbh->do("DROP TABLE IF EXISTS aqbudgetborrowers");
5450 $dbh->do("
5451 CREATE TABLE aqbudgetborrowers (
5452 budget_id int(11) NOT NULL,
5453 borrowernumber int(11) NOT NULL,
5454 PRIMARY KEY (budget_id, borrowernumber),
5455 CONSTRAINT aqbudgetborrowers_ibfk_1 FOREIGN KEY (budget_id)
5456 REFERENCES aqbudgets (budget_id)
5457 ON DELETE CASCADE ON UPDATE CASCADE,
5458 CONSTRAINT aqbudgetborrowers_ibfk_2 FOREIGN KEY (borrowernumber)
5459 REFERENCES borrowers (borrowernumber)
5460 ON DELETE CASCADE ON UPDATE CASCADE
5461 ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
5463 $dbh->do("
5464 INSERT INTO permissions (module_bit, code, description)
5465 VALUES (11, 'budget_manage_all', 'Manage all budgets')
5467 print "Upgrade to $DBversion done (Add aqbudgetborrowers table)\n";
5468 SetVersion($DBversion);
5471 $DBversion = "3.09.00.019";
5472 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
5473 $dbh->do("INSERT INTO systempreferences (variable,value,options,explanation,type) VALUES ('OPACShowUnusedAuthorities','1','','Show authorities that are not being used in the OPAC.','YesNo')");
5474 print "Upgrade to $DBversion done (Add OPACShowUnusedAuthorities system preference)\n";
5475 SetVersion ($DBversion);
5478 $DBversion = "3.09.00.020";
5479 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
5480 $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')");
5481 $dbh->do("
5482 CREATE TABLE IF NOT EXISTS borrower_files (
5483 file_id int(11) NOT NULL AUTO_INCREMENT,
5484 borrowernumber int(11) NOT NULL,
5485 file_name varchar(255) NOT NULL,
5486 file_type varchar(255) NOT NULL,
5487 file_description varchar(255) DEFAULT NULL,
5488 file_content longblob NOT NULL,
5489 date_uploaded timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
5490 PRIMARY KEY (file_id),
5491 KEY borrowernumber (borrowernumber)
5492 ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
5494 $dbh->do("ALTER TABLE borrower_files ADD CONSTRAINT borrower_files_ibfk_1 FOREIGN KEY (borrowernumber) REFERENCES borrowers (borrowernumber) ON DELETE CASCADE ON UPDATE CASCADE");
5496 print "Upgrade to $DBversion done (Added borrow_files table, EnableBorrowerFiles syspref)\n";
5497 SetVersion($DBversion);
5500 $DBversion = "3.09.00.021";
5501 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
5502 $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');");
5503 print "Upgrade to $DBversion done (Add syspref UpdateTotalIssuesOnCirc)\n";
5504 SetVersion($DBversion);
5507 $DBversion = "3.09.00.022";
5508 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
5509 $dbh->do("ALTER TABLE search_history MODIFY COLUMN query_cgi text NOT NULL");
5510 print "Upgrade to $DBversion done (Change search_history.query_cgi type to text. bug 5981)\n";
5511 SetVersion($DBversion);
5514 $DBversion = "3.09.00.023";
5515 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
5516 $dbh->do("INSERT IGNORE INTO systempreferences (variable,value,options,explanation,type) VALUES('SearchEngine','Zebra','Solr|Zebra','Search Engine','Choice')");
5517 print "Upgrade to $DBversion done (Add system preference SearchEngine )\n";
5518 SetVersion($DBversion);
5521 $DBversion ="3.09.00.024";
5522 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
5523 $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')");
5524 print "Upgrade to $DBversion done (Add system preference IntranetSlipPrinterJS))\n";
5525 SetVersion($DBversion);
5528 $DBversion = "3.09.00.025";
5529 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
5530 $dbh->do('START TRANSACTION');
5531 $dbh->do('CREATE TABLE tmp_reserves AS SELECT * FROM old_reserves LIMIT 0');
5532 $dbh->do('ALTER TABLE tmp_reserves ADD reserve_id INT( 11 ) NOT NULL AUTO_INCREMENT PRIMARY KEY FIRST');
5533 $dbh->do("
5534 INSERT INTO tmp_reserves (
5535 borrowernumber, reservedate, biblionumber,
5536 constrainttype, branchcode, notificationdate,
5537 reminderdate, cancellationdate, reservenotes,
5538 priority, found, timestamp, itemnumber,
5539 waitingdate, expirationdate, lowestPriority,
5540 suspend, suspend_until
5541 ) SELECT
5542 borrowernumber, reservedate, biblionumber,
5543 constrainttype, branchcode, notificationdate,
5544 reminderdate, cancellationdate, reservenotes,
5545 priority, found, timestamp, itemnumber,
5546 waitingdate, expirationdate, lowestPriority,
5547 suspend, suspend_until
5548 FROM old_reserves ORDER BY reservedate
5550 $dbh->do('SET @ai = ( SELECT MAX( reserve_id ) FROM tmp_reserves )');
5551 $dbh->do('TRUNCATE old_reserves');
5552 $dbh->do('ALTER TABLE old_reserves ADD reserve_id INT( 11 ) NOT NULL PRIMARY KEY FIRST');
5553 $dbh->do('INSERT INTO old_reserves SELECT * FROM tmp_reserves WHERE reserve_id <= @ai');
5554 $dbh->do("
5555 INSERT INTO tmp_reserves (
5556 borrowernumber, reservedate, biblionumber,
5557 constrainttype, branchcode, notificationdate,
5558 reminderdate, cancellationdate, reservenotes,
5559 priority, found, timestamp, itemnumber,
5560 waitingdate, expirationdate, lowestPriority,
5561 suspend, suspend_until
5562 ) SELECT
5563 borrowernumber, reservedate, biblionumber,
5564 constrainttype, branchcode, notificationdate,
5565 reminderdate, cancellationdate, reservenotes,
5566 priority, found, timestamp, itemnumber,
5567 waitingdate, expirationdate, lowestPriority,
5568 suspend, suspend_until
5569 FROM reserves ORDER BY reservedate
5571 $dbh->do('TRUNCATE reserves');
5572 $dbh->do('ALTER TABLE reserves ADD reserve_id INT( 11 ) NOT NULL AUTO_INCREMENT PRIMARY KEY FIRST');
5573 $dbh->do('INSERT INTO reserves SELECT * FROM tmp_reserves WHERE reserve_id > COALESCE(@ai, 0)');
5574 $dbh->do('DROP TABLE tmp_reserves');
5575 $dbh->do('COMMIT');
5577 my $sth = $dbh->prepare("
5578 SELECT COUNT( * ) AS count
5579 FROM information_schema.COLUMNS
5580 WHERE COLUMN_NAME = 'reserve_id'
5581 AND (
5582 TABLE_NAME LIKE 'reserves'
5584 TABLE_NAME LIKE 'old_reserves'
5587 $sth->execute();
5588 my $row = $sth->fetchrow_hashref();
5589 die("Failed to add reserve_id to reserves tables, please refresh the page to try again.") unless ( $row->{'count'} );
5591 print "Upgrade to $DBversion done (add reserve_id to reserves & old_reserves tables)\n";
5592 SetVersion($DBversion);
5595 $DBversion = "3.09.00.026";
5596 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
5597 $dbh->do("INSERT INTO permissions (module_bit, code, description) VALUES
5598 ( 3, 'parameters_remaining_permissions', 'Remaining system parameters permissions'),
5599 ( 3, 'manage_circ_rules', 'manage circulation rules')");
5600 $dbh->do("INSERT INTO user_permissions (borrowernumber, module_bit, code)
5601 SELECT borrowernumber, 3, 'parameters_remaining_permissions'
5602 FROM borrowers WHERE flags & (1 << 3)");
5603 # Give new subpermissions to all users that have 'parameters' permission flag (bit 3) set
5604 # see userflags table
5605 $dbh->do("INSERT INTO user_permissions (borrowernumber, module_bit, code)
5606 SELECT borrowernumber, 3, 'manage_circ_rules'
5607 FROM borrowers WHERE flags & (1 << 3)");
5608 print "Upgrade to $DBversion done (Added parameters subpermissions)\n";
5609 SetVersion($DBversion);
5612 $DBversion = '3.09.00.027';
5613 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
5614 $dbh->do("ALTER TABLE issuingrules ADD overduefinescap decimal(28,6) DEFAULT NULL");
5615 my $maxfine = C4::Context->preference('MaxFine');
5616 if ($maxfine && $maxfine < 900) { # an arbitrary value that tells us it's not "some huge value"
5617 $dbh->do("UPDATE issuingrules SET overduefinescap=?",undef,$maxfine);
5618 $dbh->do("UPDATE systempreferences SET value = NULL WHERE variable = 'MaxFine'");
5620 $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'");
5621 print "Upgrade to $DBversion done (Bug 7420 add overduefinescap to circulation matrix)\n";
5622 SetVersion ($DBversion);
5625 $DBversion = "3.09.00.028";
5626 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
5627 unless ( C4::Context->preference('marcflavour') eq 'UNIMARC' ) {
5628 my %referencetypes = ( '00' => 'PERSO_NAME',
5629 '10' => 'CORPO_NAME',
5630 '11' => 'MEETI_NAME',
5631 '30' => 'UNIF_TITLE',
5632 '48' => 'CHRON_TERM',
5633 '50' => 'TOPIC_TERM',
5634 '51' => 'GEOGR_NAME',
5635 '55' => 'GENRE/FORM'
5637 my $query = q{SELECT DISTINCT authtypecode, tagfield
5638 FROM auth_subfield_structure
5639 WHERE (tagfield BETWEEN '400' AND '455' OR
5640 tagfield BETWEEN '500' and '555') AND tagsubfield='a' AND
5641 frameworkcode = '' AND ROW(authtypecode, tagfield) NOT IN
5642 (SELECT authtypecode, tagfield FROM auth_subfield_structure
5643 WHERE tagsubfield ='9' )};
5644 $sth = $dbh->prepare($query);
5645 $sth->execute;
5646 my $sth2 = $dbh->prepare(q{INSERT INTO auth_subfield_structure
5647 (authtypecode, tagfield, tagsubfield, liblibrarian, libopac,
5648 repeatable, mandatory, tab, authorised_value, value_builder,
5649 seealso, isurl, hidden, linkid, kohafield, frameworkcode)
5650 VALUES (?, ?, '9', '9 (RLIN)', '9 (RLIN)', 0, 0, ?, NULL, NULL,
5651 NULL, 0, 1, '', '', '')});
5652 my $sth3 = $dbh->prepare(q{UPDATE auth_subfield_structure SET
5653 frameworkcode = ? WHERE authtypecode = ? AND
5654 tagfield = ? AND tagsubfield = 'a'});
5655 while (my $row = $sth->fetchrow_arrayref()) {
5656 my ($authtypecode, $field) = @$row;
5657 $sth2->execute($authtypecode, $field, substr($field, 0, 1));
5658 my $authtypemarker = substr $field, 1, 2;
5659 if ($authtypemarker && $referencetypes{$authtypemarker}) {
5660 $sth3->execute($referencetypes{$authtypemarker}, $authtypecode, $field);
5665 print "Upgrade to $DBversion done (Add thesaurus links for MARC21/NORMARC)\n";
5666 SetVersion($DBversion);
5669 $DBversion = "3.09.00.029"; # FIXME
5670 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
5671 $dbh->do("UPDATE systempreferences SET options=concat(options,'|EAN13') WHERE variable='itemBarcodeInputFilter' AND options NOT LIKE '%EAN13%'");
5672 print "Upgrade to $DBversion done (Add itemBarcodeInputFilter choice EAN13)\n";
5674 $dbh->do("UPDATE systempreferences SET options = concat(options,'|EAN13'), explanation = concat(explanation,'; EAN13 - incremental') WHERE variable = 'autoBarcode' AND options NOT LIKE '%EAN13%'");
5675 print "Upgrade to $DBversion done ( Added EAN13 barcode autogeneration sequence )\n";
5676 SetVersion($DBversion);
5679 $DBversion ="3.09.00.030";
5680 if(C4::Context->preference("Version") < TransformToNum($DBversion) ) {
5681 my $query = "SELECT value FROM systempreferences WHERE variable='opacstylesheet'";
5682 my $remote= $dbh->selectrow_arrayref($query);
5683 $dbh->do("DELETE from systempreferences WHERE variable='opacstylesheet'");
5684 if($remote && $remote->[0]) {
5685 $query="UPDATE systempreferences SET value=? WHERE variable='opaclayoutstylesheet'";
5686 $dbh->do($query,undef,$remote->[0]);
5687 print "NOTE: The URL of your remote opac css file has been moved to preference opaclayoutstylesheet.\n";
5689 print "Upgrade to $DBversion done (BZ 8263: Make OPAC stylesheet preferences more consistent)\n";
5690 SetVersion($DBversion);
5693 $DBversion = "3.09.00.031";
5694 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
5695 $dbh->do("DELETE FROM systempreferences WHERE variable='AmazonReviews'");
5696 $dbh->do("DELETE FROM systempreferences WHERE variable='AmazonSimilarItems'");
5697 $dbh->do("DELETE FROM systempreferences WHERE variable='AWSAccessKeyID'");
5698 $dbh->do("DELETE FROM systempreferences WHERE variable='AWSPrivateKey'");
5699 $dbh->do("DELETE FROM systempreferences WHERE variable='OPACAmazonReviews'");
5700 $dbh->do("DELETE FROM systempreferences WHERE variable='OPACAmazonSimilarItems'");
5701 $dbh->do("DELETE FROM systempreferences WHERE variable='AmazonEnabled'");
5702 $dbh->do("DELETE FROM systempreferences WHERE variable='OPACAmazonEnabled'");
5703 print "Upgrade to $DBversion done ('Remove preferences controlling broken Amazon features (Bug 8679')\n";
5704 SetVersion ($DBversion);
5707 $DBversion = "3.09.00.032";
5708 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
5709 $dbh->do("UPDATE systempreferences SET value = 'call_number' WHERE variable = 'defaultSortField' AND value = 'callnumber'");
5710 $dbh->do("UPDATE systempreferences SET value = 'call_number' WHERE variable = 'OPACdefaultSortField' AND value = 'callnumber'");
5711 print "Upgrade to $DBversion done (Bug 8657 - Default sort by call number does not work. Correcting system preference value.)\n";
5712 SetVersion ($DBversion);
5716 $DBversion = '3.09.00.033';
5717 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
5718 $dbh->do("INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES('OpacSuppressionByIPRange','','Restrict the suppression to IP adresses outside of the IP range','','free');");
5719 print "Upgrade to $DBversion done (Add OpacSuppressionByIPRange syspref)\n";
5720 SetVersion ($DBversion);
5723 $DBversion ="3.09.00.034";
5724 if(C4::Context->preference("Version") < TransformToNum($DBversion) ) {
5725 $dbh->do("UPDATE auth_subfield_structure SET frameworkcode = 'PERSO_NAME' WHERE frameworkcode = 'PERSO_CODE'");
5726 $dbh->do("UPDATE auth_subfield_structure SET frameworkcode = 'CORPO_NAME' WHERE frameworkcode = 'ORGO_CODE'");
5727 print "Upgrade to $DBversion done (Bug 8207: correct typo in authority types)\n";
5728 SetVersion ($DBversion);
5731 $DBversion = "3.09.00.035";
5732 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
5733 $dbh->do("
5734 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');
5736 $dbh->do(
5737 "INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES ('SubfieldsToUseWhenPrefill','','Define a list of subfields to use when prefilling items (separated by space)','','Free');
5739 print "Upgrade to $DBversion done (Adding PrefillItem and SubfieldsToUseWhenPrefill sysprefs)\n";
5740 SetVersion ($DBversion);
5743 $DBversion = "3.09.00.036";
5744 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
5745 # biblioitems changes
5746 $dbh->do("ALTER TABLE biblioitems ADD COLUMN agerestriction VARCHAR(255) DEFAULT NULL AFTER cn_sort");
5747 $dbh->do("ALTER TABLE deletedbiblioitems ADD COLUMN agerestriction VARCHAR(255) DEFAULT NULL AFTER cn_sort");
5748 # preferences changes
5749 $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')");
5750 $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')");
5752 print "Upgrade to $DBversion done (Add colum agerestriction to biblioitems and deletedbiblioitems, add system preferences AgeRestrictionMarker and AgeRestrictionOverride)\n";
5753 SetVersion ($DBversion);
5756 $DBversion = "3.09.00.037";
5757 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
5758 $dbh->do("INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('UseTransportCostMatrix',0,'Use Transport Cost Matrix when filling holds','','YesNo')");
5760 $dbh->do("CREATE TABLE `transport_cost` (
5761 `frombranch` varchar(10) NOT NULL,
5762 `tobranch` varchar(10) NOT NULL,
5763 `cost` decimal(6,2) NOT NULL,
5764 `disable_transfer` tinyint(1) NOT NULL DEFAULT 0,
5765 CHECK ( `frombranch` <> `tobranch` ), -- a dud check, mysql does not support that
5766 PRIMARY KEY (`frombranch`, `tobranch`),
5767 CONSTRAINT `transport_cost_ibfk_1` FOREIGN KEY (`frombranch`) REFERENCES `branches` (`branchcode`) ON DELETE CASCADE ON UPDATE CASCADE,
5768 CONSTRAINT `transport_cost_ibfk_2` FOREIGN KEY (`tobranch`) REFERENCES `branches` (`branchcode`) ON DELETE CASCADE ON UPDATE CASCADE
5769 ) ENGINE=InnoDB DEFAULT CHARSET=utf8");
5771 print "Upgrade to $DBversion done (creating `transport_cost` table; adding UseTransportCostMatrix systempref, in circulation)\n";
5772 SetVersion($DBversion);
5775 $DBversion ="3.09.00.038";
5776 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
5777 $dbh->do("ALTER TABLE borrower_attributes CHANGE attribute attribute VARCHAR( 255 ) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL");
5778 print "Upgrade to $DBversion done (Increase the maximum size of a borrower attribute value)\n";
5779 SetVersion($DBversion);
5782 $DBversion ="3.09.00.039";
5783 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
5784 $dbh->do("INSERT INTO systempreferences (variable,value,explanation,type) VALUES('DidYouMeanFromAuthorities','0','Suggest searches based on authority file.','YesNo');");
5785 print "Upgrade to $DBversion done (Add system preference DidYouMeanFromAuthorities)\n";
5786 SetVersion($DBversion);
5789 $DBversion = "3.09.00.040";
5790 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
5791 $dbh->do("INSERT INTO systempreferences (variable,value,options,explanation,type) VALUES ('IncludeSeeFromInSearches','0','','Include see-from references in searches.','YesNo');");
5792 print "Upgrade to $DBversion done (Add IncludeSeeFromInSearches system preference)\n";
5793 SetVersion ($DBversion);
5796 $DBversion = "3.09.00.041";
5797 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
5798 $dbh->do(qq{
5799 INSERT IGNORE INTO systempreferences (variable,value,explanation,options,type) VALUES('ExportRemoveFields','','List of fields for non export in circulation.pl (separated by a space)','','');
5801 print "Upgrade to $DBversion done (Add system preference ExportRemoveFields)\n";
5802 SetVersion($DBversion);
5805 $DBversion = "3.09.00.042";
5806 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
5807 $dbh->do(qq{
5808 INSERT IGNORE INTO systempreferences (variable,value,explanation,options,type) VALUES('ExportWithCsvProfile','','Set a profile name for CSV export','','');
5810 print "Upgrade to $DBversion done (Adds New System preference ExportWithCsvProfile)\n";
5811 SetVersion($DBversion)
5814 $DBversion = "3.09.00.043";
5815 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
5816 $dbh->do("
5817 ALTER TABLE aqorders
5818 ADD parent_ordernumber int(11) DEFAULT NULL
5820 $dbh->do("
5821 UPDATE aqorders
5822 SET parent_ordernumber = ordernumber;
5824 print "Upgrade to $DBversion done (Adding parent_ordernumber in aqorders)\n";
5825 SetVersion($DBversion);
5828 $DBversion = '3.09.00.044';
5829 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
5830 $dbh->do("ALTER TABLE statistics ADD COLUMN ccode VARCHAR ( 10 ) NULL AFTER associatedborrower");
5831 $dbh->do("UPDATE statistics SET statistics.ccode = ( SELECT items.ccode FROM items WHERE statistics.itemnumber = items.itemnumber )");
5832 $dbh->do("UPDATE statistics SET statistics.ccode = (
5833 SELECT deleteditems.ccode FROM deleteditems
5834 WHERE statistics.itemnumber = deleteditems.itemnumber
5835 ) WHERE statistics.ccode IS NULL");
5836 print "Upgrade done ( Added Collection Code to Statistics table. )\n";
5837 SetVersion ($DBversion);
5840 $DBversion = "3.09.00.045";
5841 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
5842 $dbh->do("ALTER TABLE borrower_attribute_types MODIFY category_code VARCHAR( 10 ) NULL DEFAULT NULL");
5843 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.";
5844 SetVersion($DBversion);
5847 $DBversion = "3.09.00.046";
5848 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
5849 $dbh->do("ALTER TABLE `accountlines` ADD `accountlines_id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY FIRST;");
5850 print "Upgrade to $DBversion done (adding accountlines_id field in accountlines table)\n";
5851 SetVersion($DBversion);
5854 $DBversion = "3.09.00.047";
5855 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
5856 # to preserve default behaviour as best as possible, set this new preference differently depending on whether IndependantBranches is set or not
5857 my $prefvalue = 'anywhere';
5858 if (C4::Context->preference("IndependantBranches")) { $prefvalue = 'homeorholdingbranch';}
5859 $dbh->do("INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES('AllowReturnToBranch', '$prefvalue', 'Where an item may be returned', 'anywhere|homebranch|holdingbranch|homeorholdingbranch', 'Choice');");
5861 print "Upgrade to $DBversion done: adding AllowReturnToBranch syspref (bug 6151)";
5862 SetVersion($DBversion);
5865 $DBversion = "3.09.00.048";
5866 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
5867 $dbh->do("ALTER TABLE authorised_values MODIFY lib varchar(200)");
5868 $dbh->do("ALTER TABLE authorised_values MODIFY lib_opac varchar(200)");
5870 print "Upgrade to $DBversion done (Raise the length of Authorised Values descriptions)\n";
5871 SetVersion($DBversion);
5874 $DBversion ="3.09.00.049";
5875 if(C4::Context->preference("Version") < TransformToNum($DBversion) ) {
5876 $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');");
5877 $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');");
5878 $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');");
5879 $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');");
5880 print "Upgrade to $DBversion done (Add OPACMobileUserCSS, OpacMainUserBlockMobile, OpacShowLibrariesPulldownMobile and OpacShowFiltersPulldownMobile sysprefs)\n";
5881 SetVersion($DBversion);
5884 $DBversion = "3.09.00.050";
5885 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
5886 $dbh->do("ALTER TABLE authorised_values MODIFY category varchar(16) NOT NULL DEFAULT '';");
5887 $dbh->do("INSERT INTO authorised_values (category, authorised_value, lib) VALUES
5888 ('REPORT_GROUP', 'CIRC', 'Circulation'),
5889 ('REPORT_GROUP', 'CAT', 'Catalog'),
5890 ('REPORT_GROUP', 'PAT', 'Patrons'),
5891 ('REPORT_GROUP', 'ACQ', 'Acquisitions'),
5892 ('REPORT_GROUP', 'ACC', 'Accounts');");
5894 $dbh->do("ALTER TABLE reports_dictionary ADD report_area varchar(6) DEFAULT NULL;");
5895 $dbh->do("UPDATE reports_dictionary SET report_area = CASE area
5896 WHEN 1 THEN 'CIRC'
5897 WHEN 2 THEN 'CAT'
5898 WHEN 3 THEN 'PAT'
5899 WHEN 4 THEN 'ACQ'
5900 WHEN 5 THEN 'ACC'
5901 END;");
5902 $dbh->do("ALTER TABLE reports_dictionary DROP area;");
5903 $dbh->do("ALTER TABLE reports_dictionary ADD KEY dictionary_area_idx (report_area);");
5905 $dbh->do("ALTER TABLE saved_sql ADD report_area varchar(6) DEFAULT NULL;");
5906 $dbh->do("ALTER TABLE saved_sql ADD report_group varchar(80) DEFAULT NULL;");
5907 $dbh->do("ALTER TABLE saved_sql ADD report_subgroup varchar(80) DEFAULT NULL;");
5908 $dbh->do("ALTER TABLE saved_sql ADD KEY sql_area_group_idx (report_group, report_subgroup);");
5910 print "Upgrade to $DBversion done saved_sql new fields report_group and report_area; authorised_values.category 16 char \n";
5911 SetVersion($DBversion);
5914 $DBversion = "3.09.00.051";
5915 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
5916 $dbh->do("
5917 CREATE TABLE aqinvoices (
5918 invoiceid int(11) NOT NULL AUTO_INCREMENT,
5919 invoicenumber mediumtext NOT NULL,
5920 booksellerid int(11) NOT NULL,
5921 shipmentdate date default NULL,
5922 billingdate date default NULL,
5923 closedate date default NULL,
5924 shipmentcost decimal(28,6) default NULL,
5925 shipmentcost_budgetid int(11) default NULL,
5926 PRIMARY KEY (invoiceid),
5927 CONSTRAINT aqinvoices_fk_aqbooksellerid FOREIGN KEY (booksellerid) REFERENCES aqbooksellers (id) ON DELETE CASCADE ON UPDATE CASCADE,
5928 CONSTRAINT aqinvoices_fk_shipmentcost_budgetid FOREIGN KEY (shipmentcost_budgetid) REFERENCES aqbudgets (budget_id) ON DELETE SET NULL ON UPDATE CASCADE
5929 ) ENGINE=InnoDB DEFAULT CHARSET=utf8
5932 # Fill this new table with existing invoices
5933 my $sth = $dbh->prepare("
5934 SELECT aqorders.booksellerinvoicenumber AS invoicenumber, aqbasket.booksellerid, aqorders.datereceived
5935 FROM aqorders
5936 LEFT JOIN aqbasket ON aqorders.basketno = aqbasket.basketno
5937 WHERE aqorders.booksellerinvoicenumber IS NOT NULL
5938 AND aqorders.booksellerinvoicenumber != ''
5939 GROUP BY aqorders.booksellerinvoicenumber
5941 $sth->execute;
5942 my $results = $sth->fetchall_arrayref({});
5943 $sth = $dbh->prepare("
5944 INSERT INTO aqinvoices (invoicenumber, booksellerid, shipmentdate) VALUES (?,?,?)
5946 foreach(@$results) {
5947 $sth->execute($_->{invoicenumber}, $_->{booksellerid}, $_->{datereceived});
5950 # Add the column in aqorders, fill it with correct value
5951 # and then drop booksellerinvoicenumber column
5952 $dbh->do("
5953 ALTER TABLE aqorders
5954 ADD COLUMN invoiceid int(11) default NULL AFTER booksellerinvoicenumber,
5955 ADD CONSTRAINT aqorders_ibfk_3 FOREIGN KEY (invoiceid) REFERENCES aqinvoices (invoiceid) ON DELETE SET NULL ON UPDATE CASCADE
5958 $dbh->do("
5959 UPDATE aqorders, aqinvoices
5960 SET aqorders.invoiceid = aqinvoices.invoiceid
5961 WHERE aqorders.booksellerinvoicenumber = aqinvoices.invoicenumber
5964 $dbh->do("
5965 ALTER TABLE aqorders
5966 DROP COLUMN booksellerinvoicenumber
5969 print "Upgrade to $DBversion done (Add aqinvoices table) \n";
5970 SetVersion ($DBversion);
5973 $DBversion = "3.09.00.052";
5974 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
5975 $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');");
5976 $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');");
5977 $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');");
5978 print "Upgrade to $DBversion done (Add systempreferences to decrease loan length on high demand items decreaseLoanHighHolds, decreaseLoanHighHoldsValue and decreaseLoanHighHoldsDuration) \n";
5979 SetVersion ($DBversion);
5982 $DBversion = "3.09.00.053";
5983 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
5984 $dbh->do(
5985 q|CREATE TABLE `import_auths` (
5986 import_record_id int(11) NOT NULL,
5987 matched_authid int(11) default NULL,
5988 control_number varchar(25) default NULL,
5989 authorized_heading varchar(128) default NULL,
5990 original_source varchar(25) default NULL,
5991 CONSTRAINT import_auths_ibfk_1 FOREIGN KEY (import_record_id)
5992 REFERENCES import_records (import_record_id) ON DELETE CASCADE ON UPDATE CASCADE,
5993 KEY matched_authid (matched_authid)
5994 ) ENGINE=InnoDB DEFAULT CHARSET=utf8;|
5996 $dbh->do("ALTER TABLE import_batches
5997 CHANGE COLUMN num_biblios num_records int(11) NOT NULL default 0,
5998 ADD COLUMN record_type enum('biblio', 'auth', 'holdings') NOT NULL default 'biblio'");
5999 $dbh->do("UPDATE import_batches SET record_type='auth' WHERE import_batch_id IN
6000 (SELECT import_batch_id FROM import_records WHERE record_type='auth')");
6002 print "Upgrade to $DBversion done (Added support for staging authorities)\n";
6003 SetVersion ($DBversion);
6006 $DBversion = "3.09.00.054";
6007 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
6008 $dbh->do("ALTER TABLE aqorders CHANGE COLUMN gst gstrate DECIMAL(6,4) DEFAULT NULL");
6009 print "Upgrade to $DBversion done (Change column name in aqorders gst --> gstrate)\n";
6010 SetVersion($DBversion);
6013 $DBversion = "3.09.00.055";
6014 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
6015 $dbh->do("ALTER TABLE aqorders ADD discount float(6,4) DEFAULT NULL AFTER gstrate");
6016 print "Upgrade to $DBversion done (Add discount field in aqorders table)\n";
6017 SetVersion($DBversion);
6020 $DBversion ="3.09.00.056";
6021 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
6022 $dbh->do("INSERT IGNORE INTO systempreferences (variable,value,explanation,options,type) VALUES('AuthDisplayHierarchy','0','Display authority hierarchies','','YesNo')");
6023 print "Upgrade to $DBversion done (Add system preference AuthDisplayHierarchy)\n";
6024 SetVersion($DBversion);
6027 $DBversion = "3.09.00.057";
6028 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
6029 $dbh->do("ALTER TABLE aqbasket ADD deliveryplace VARCHAR(10) default NULL AFTER basketgroupid;");
6030 $dbh->do("ALTER TABLE aqbasket ADD billingplace VARCHAR(10) default NULL AFTER deliveryplace;");
6031 print "Upgrade to $DBversion done (Bug 5356: Added billingplace, deliveryplace to the aqbasket table)\n";
6032 SetVersion($DBversion);
6035 $DBversion ="3.09.00.058";
6036 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
6037 $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');");
6038 $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');");
6039 print "Upgrade to $DBversion done (Add Did You Mean? configuration)\n";
6040 SetVersion($DBversion);
6043 $DBversion ="3.09.00.059";
6044 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
6045 $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');");
6046 print "Upgrade to $DBversion done (Add system preference BlockReturnOfWithdrawnItems)\n";
6047 SetVersion($DBversion);
6050 $DBversion = "3.09.00.060";
6051 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
6052 $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')");
6053 print "Upgrade to $DBversion done (Added HoldsToPullStartDate syspref)\n";
6054 SetVersion($DBversion);
6057 $DBversion = "3.09.00.061";
6058 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
6059 $dbh->do("UPDATE systempreferences set value=0 WHERE variable='OPACItemsResultsDisplay' AND value='statuses'");
6060 $dbh->do("UPDATE systempreferences set value=1 WHERE variable='OPACItemsResultsDisplay' AND value='itemdetails'");
6061 $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'");
6062 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";
6063 SetVersion ($DBversion);
6066 $DBversion = "3.09.00.062";
6067 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
6068 $dbh->do("UPDATE systempreferences SET value=0 WHERE variable='NoZebra'");
6069 $dbh->do("UPDATE systempreferences SET value=0 WHERE variable='QueryRemoveStopwords'");
6070 print "Upgrade to $DBversion done (Disable obsolete NoZebra and QueryRemoveStopwords sysprefs)\n";
6071 SetVersion ($DBversion);
6074 $DBversion = "3.09.00.063";
6075 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
6076 my $gst_booksellers = $dbh->selectcol_arrayref("SELECT DISTINCT(gstrate) FROM aqbooksellers");
6077 my $gist_syspref = C4::Context->preference("gist");
6078 # remove the undef values and construct and array with the syspref and the supplier values
6079 my @gstrates = map { defined $_ ? $_ : () } @$gst_booksellers;
6080 push @gstrates, split ('\|', $gist_syspref);
6081 # we want to compare integer (or float)
6082 $_ = $_ + 0 for @gstrates;
6083 use List::MoreUtils qw/uniq/;
6084 # remove duplicate values
6085 @gstrates = uniq sort @gstrates;
6086 my $new_syspref_value = join '|', @gstrates;
6087 # update the syspref with the new values
6088 my $sth = $dbh->prepare("UPDATE systempreferences set value=? WHERE variable='gist'");
6089 $sth->execute( $new_syspref_value );
6091 print "Upgrade to $DBversion done (Bug 8832, Set the syspref gist with the existing values)\n";
6092 SetVersion ($DBversion);
6095 $DBversion = "3.09.00.064";
6096 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
6097 $dbh->do('ALTER TABLE items ADD coded_location_qualifier varchar(10) default NULL AFTER itemcallnumber');
6098 print "Upgrade to $DBversion done (Bug 6428: Added coded_location_qualifier to the items table)\n";
6099 SetVersion ($DBversion);
6102 $DBversion = "3.09.00.065";
6103 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
6104 $dbh->do('ALTER TABLE deleteditems ADD coded_location_qualifier varchar(10) default NULL AFTER itemcallnumber');
6105 print "Upgrade to $DBversion done (Bug 6428: Added coded_location_qualifier to the deleteditems table)\n";
6106 SetVersion ($DBversion);
6109 $DBversion = "3.09.00.066";
6110 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
6111 $dbh->do("DELETE FROM systempreferences WHERE variable='DidYouMeanFromAuthorities'");
6112 print "Upgrade to $DBversion done (Bug 9107: remove DidYouMeanFromAuthorities syspref)\n";
6113 SetVersion ($DBversion);
6116 $DBversion = "3.09.00.067";
6117 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
6118 $dbh->do("ALTER TABLE statistics CHANGE COLUMN ccode ccode varchar(10) NULL");
6119 print "Upgrade to $DBversion done (Bug 9064: statistics.ccode potentially wrongly defined)\n";
6120 SetVersion ($DBversion);
6123 $DBversion = "3.10.00.00";
6124 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
6125 print "Upgrade to $DBversion done (release tag)\n";
6126 SetVersion ($DBversion);
6129 $DBversion = "3.11.00.001";
6130 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
6131 $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')");
6132 print "Upgrade to $DBversion done (Bug 2832 - Add alphabet syspref)\n";
6135 $DBversion = "3.11.00.002";
6136 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
6137 $dbh->do(q{
6138 DELETE from aqorders_items where ordernumber NOT IN (SELECT ordernumber FROM aqorders);
6140 $dbh->do(q{
6141 ALTER TABLE aqorders_items
6142 ADD CONSTRAINT aqorders_items_ibfk_1 FOREIGN KEY (ordernumber) REFERENCES aqorders (ordernumber)
6143 ON DELETE CASCADE ON UPDATE CASCADE;
6145 print "Upgrade to $DBversion done (Bug 9030: Add constraint on aqorders_items.ordernumber)\n";
6146 SetVersion ($DBversion);
6149 $DBversion = "3.11.00.003";
6150 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
6151 $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')");
6152 print "Upgrade to $DBversion done (Bug 7189: Add system preference RefundLostItemFeeOnReturn)\n";
6153 SetVersion($DBversion);
6156 $DBversion = "3.11.00.004";
6157 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
6158 $dbh->do(qq{
6159 ALTER TABLE subscription ADD COLUMN closed INT(1) NOT NULL DEFAULT 0 AFTER enddate;
6162 print "Upgrade to $DBversion done (Bug 8782: Add field subscription.closed)\n";
6163 SetVersion($DBversion);
6166 $DBversion = "3.11.00.005";
6167 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
6168 $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;});
6170 $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;});
6172 $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;});
6174 print "Upgrade to $DBversion done (Bug 7919: Display of values depending on the connexion library)\n";
6175 SetVersion($DBversion);
6178 $DBversion = "3.11.00.006";
6179 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
6180 $dbh->do(q{
6181 UPDATE virtualshelves SET sortfield="copyrightdate" where sortfield="year";
6183 print "Upgrade to $DBversion done (Bug 9167: Update the virtualshelves.sortfield column with 'copyrightdate' if needed)\n";
6184 SetVersion($DBversion);
6187 $DBversion = "3.11.00.007";
6188 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
6189 $dbh->do("INSERT INTO language_descriptions (subtag, type, lang, description) VALUES( 'ar', 'language', 'de', 'Arabisch')");
6190 $dbh->do("INSERT INTO language_descriptions (subtag, type, lang, description) VALUES( 'hy', 'language', 'de', 'Armenisch')");
6191 $dbh->do("INSERT INTO language_descriptions (subtag, type, lang, description) VALUES( 'bg', 'language', 'de', 'Bulgarisch')");
6192 $dbh->do("INSERT INTO language_descriptions (subtag, type, lang, description) VALUES( 'zh', 'language', 'de', 'Chinesisch')");
6193 $dbh->do("INSERT INTO language_descriptions (subtag, type, lang, description) VALUES( 'cs', 'language', 'de', 'Tschechisch')");
6194 $dbh->do("INSERT INTO language_descriptions (subtag, type, lang, description) VALUES( 'da', 'language', 'de', 'Dänisch')");
6195 $dbh->do("INSERT INTO language_descriptions (subtag, type, lang, description) VALUES( 'nl', 'language', 'de', 'Niederländisch')");
6196 $dbh->do("INSERT INTO language_descriptions (subtag, type, lang, description) VALUES( 'en', 'language', 'de', 'Englisch')");
6197 $dbh->do("INSERT INTO language_descriptions (subtag, type, lang, description) VALUES( 'fi', 'language', 'de', 'Finnisch')");
6198 $dbh->do("INSERT INTO language_descriptions (subtag, type, lang, description) VALUES( 'fr', 'language', 'de', 'Französisch')");
6199 $dbh->do("INSERT INTO language_descriptions (subtag, type, lang, description) VALUES( 'lo', 'language', 'fr', 'Laotien')");
6200 $dbh->do("INSERT INTO language_descriptions (subtag, type, lang, description) VALUES( 'lo', 'language', 'de', 'Laotisch')");
6201 $dbh->do("INSERT INTO language_descriptions (subtag, type, lang, description) VALUES( 'el', 'language', 'de', 'Griechisch (Nach 1453)')");
6202 $dbh->do("INSERT INTO language_descriptions (subtag, type, lang, description) VALUES( 'he', 'language', 'de', 'Hebräisch')");
6203 $dbh->do("INSERT INTO language_descriptions (subtag, type, lang, description) VALUES( 'hi', 'language', 'de', 'Hindi')");
6204 $dbh->do("INSERT INTO language_descriptions (subtag, type, lang, description) VALUES( 'hu', 'language', 'de', 'Ungarisch')");
6205 $dbh->do("INSERT INTO language_descriptions (subtag, type, lang, description) VALUES( 'id', 'language', 'de', 'Indonesisch')");
6206 $dbh->do("INSERT INTO language_descriptions (subtag, type, lang, description) VALUES( 'it', 'language', 'de', 'Italienisch')");
6207 $dbh->do("INSERT INTO language_descriptions (subtag, type, lang, description) VALUES( 'ja', 'language', 'de', 'Japanisch')");
6208 $dbh->do("INSERT INTO language_descriptions (subtag, type, lang, description) VALUES( 'ko', 'language', 'de', 'Koreanisch')");
6209 $dbh->do("INSERT INTO language_descriptions (subtag, type, lang, description) VALUES( 'la', 'language', 'de', 'Latein')");
6210 $dbh->do("INSERT INTO language_descriptions (subtag, type, lang, description) VALUES( 'gl', 'language', 'fr', 'Galicien')");
6211 $dbh->do("INSERT INTO language_descriptions (subtag, type, lang, description) VALUES( 'gl', 'language', 'de', 'Galizisch')");
6212 $dbh->do("INSERT INTO language_descriptions (subtag, type, lang, description) VALUES( 'nb', 'language', 'de', 'Norwegisch bokm&#229;l')");
6213 $dbh->do("INSERT INTO language_descriptions (subtag, type, lang, description) VALUES( 'nn', 'language', 'de', 'Norwegisch nynorsk')");
6214 $dbh->do("INSERT INTO language_descriptions (subtag, type, lang, description) VALUES( 'fa', 'language', 'de', 'Persisch')");
6215 $dbh->do("INSERT INTO language_descriptions (subtag, type, lang, description) VALUES( 'pl', 'language', 'de', 'Polnisch')");
6216 $dbh->do("INSERT INTO language_descriptions (subtag, type, lang, description) VALUES( 'pt', 'language', 'de', 'Portugiesisch')");
6217 $dbh->do("INSERT INTO language_descriptions (subtag, type, lang, description) VALUES( 'ro', 'language', 'de', 'Rumänisch')");
6218 $dbh->do("INSERT INTO language_descriptions (subtag, type, lang, description) VALUES( 'ru', 'language', 'de', 'Russisch')");
6219 $dbh->do("INSERT INTO language_descriptions (subtag, type, lang, description) VALUES( 'sr', 'language', 'fr', 'Serbe')");
6220 $dbh->do("INSERT INTO language_descriptions (subtag, type, lang, description) VALUES( 'sr', 'language', 'de', 'Serbisch')");
6221 $dbh->do("INSERT INTO language_descriptions (subtag, type, lang, description) VALUES( 'es', 'language', 'de', 'Spanisch')");
6222 $dbh->do("INSERT INTO language_descriptions (subtag, type, lang, description) VALUES( 'sv', 'language', 'de', 'Schwedisch')");
6223 $dbh->do("INSERT INTO language_descriptions (subtag, type, lang, description) VALUES( 'tet', 'language', 'fr', 'Tétoum')");
6224 $dbh->do("INSERT INTO language_descriptions (subtag, type, lang, description) VALUES( 'tet', 'language', 'de', 'Tetum')");
6225 $dbh->do("INSERT INTO language_descriptions (subtag, type, lang, description) VALUES( 'th', 'language', 'de', 'Thailändisch')");
6226 $dbh->do("INSERT INTO language_descriptions (subtag, type, lang, description) VALUES( 'tr', 'language', 'de', 'Türkisch')");
6227 $dbh->do("INSERT INTO language_descriptions (subtag, type, lang, description) VALUES( 'uk', 'language', 'de', 'Ukrainisch')");
6228 $dbh->do("INSERT INTO language_descriptions (subtag, type, lang, description) VALUES( 'ur', 'language', 'fr', 'Ourdou')");
6229 $dbh->do("INSERT INTO language_descriptions (subtag, type, lang, description) VALUES( 'ur', 'language', 'de', 'Urdu')");
6230 print "Upgrade to $DBversion done (Bug 9056: add German and a couple of French translations to language_descriptions)\n";
6231 SetVersion ($DBversion);
6234 $DBversion = "3.11.00.008";
6235 if (CheckVersion($DBversion)) {
6236 $dbh->do("
6237 CREATE TABLE IF NOT EXISTS `borrower_modifications` (
6238 `timestamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
6239 `verification_token` varchar(255) NOT NULL DEFAULT '',
6240 `borrowernumber` int(11) NOT NULL DEFAULT '0',
6241 `cardnumber` varchar(16) DEFAULT NULL,
6242 `surname` mediumtext,
6243 `firstname` text,
6244 `title` mediumtext,
6245 `othernames` mediumtext,
6246 `initials` text,
6247 `streetnumber` varchar(10) DEFAULT NULL,
6248 `streettype` varchar(50) DEFAULT NULL,
6249 `address` mediumtext,
6250 `address2` text,
6251 `city` mediumtext,
6252 `state` text,
6253 `zipcode` varchar(25) DEFAULT NULL,
6254 `country` text,
6255 `email` mediumtext,
6256 `phone` text,
6257 `mobile` varchar(50) DEFAULT NULL,
6258 `fax` mediumtext,
6259 `emailpro` text,
6260 `phonepro` text,
6261 `B_streetnumber` varchar(10) DEFAULT NULL,
6262 `B_streettype` varchar(50) DEFAULT NULL,
6263 `B_address` varchar(100) DEFAULT NULL,
6264 `B_address2` text,
6265 `B_city` mediumtext,
6266 `B_state` text,
6267 `B_zipcode` varchar(25) DEFAULT NULL,
6268 `B_country` text,
6269 `B_email` text,
6270 `B_phone` mediumtext,
6271 `dateofbirth` date DEFAULT NULL,
6272 `branchcode` varchar(10) DEFAULT NULL,
6273 `categorycode` varchar(10) DEFAULT NULL,
6274 `dateenrolled` date DEFAULT NULL,
6275 `dateexpiry` date DEFAULT NULL,
6276 `gonenoaddress` tinyint(1) DEFAULT NULL,
6277 `lost` tinyint(1) DEFAULT NULL,
6278 `debarred` date DEFAULT NULL,
6279 `debarredcomment` varchar(255) DEFAULT NULL,
6280 `contactname` mediumtext,
6281 `contactfirstname` text,
6282 `contacttitle` text,
6283 `guarantorid` int(11) DEFAULT NULL,
6284 `borrowernotes` mediumtext,
6285 `relationship` varchar(100) DEFAULT NULL,
6286 `ethnicity` varchar(50) DEFAULT NULL,
6287 `ethnotes` varchar(255) DEFAULT NULL,
6288 `sex` varchar(1) DEFAULT NULL,
6289 `password` varchar(30) DEFAULT NULL,
6290 `flags` int(11) DEFAULT NULL,
6291 `userid` varchar(75) DEFAULT NULL,
6292 `opacnote` mediumtext,
6293 `contactnote` varchar(255) DEFAULT NULL,
6294 `sort1` varchar(80) DEFAULT NULL,
6295 `sort2` varchar(80) DEFAULT NULL,
6296 `altcontactfirstname` varchar(255) DEFAULT NULL,
6297 `altcontactsurname` varchar(255) DEFAULT NULL,
6298 `altcontactaddress1` varchar(255) DEFAULT NULL,
6299 `altcontactaddress2` varchar(255) DEFAULT NULL,
6300 `altcontactaddress3` varchar(255) DEFAULT NULL,
6301 `altcontactstate` text,
6302 `altcontactzipcode` varchar(50) DEFAULT NULL,
6303 `altcontactcountry` text,
6304 `altcontactphone` varchar(50) DEFAULT NULL,
6305 `smsalertnumber` varchar(50) DEFAULT NULL,
6306 `privacy` int(11) DEFAULT NULL,
6307 PRIMARY KEY (`verification_token`,`borrowernumber`),
6308 KEY `verification_token` (`verification_token`),
6309 KEY `borrowernumber` (`borrowernumber`)
6310 ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
6313 $dbh->do("
6314 INSERT INTO systempreferences (`variable`, `value`, `options`, `explanation`, `type`) VALUES
6315 ('PatronSelfRegistration', '0', NULL, 'If enabled, patrons will be able to register themselves via the OPAC.', 'YesNo'),
6316 ('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'),
6317 ('PatronSelfRegistrationDefaultCategory', '', '', 'A patron registered via the OPAC will receive a borrower category code set in this system preference.', 'free'),
6318 ('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'),
6319 ('PatronSelfRegistrationBorrowerMandatoryField', 'surname|firstname', NULL , 'Choose the mandatory fields for a patron''s account, when registering via the OPAC.', 'free'),
6320 ('PatronSelfRegistrationBorrowerUnwantedField', '', NULL , 'Name the fields you don''t want to display when registering a new patron via the OPAC.', 'free');
6323 $dbh->do("
6324 INSERT INTO letter ( `module`, `code`, `branchcode`, `name`, `is_html`, `title`, `content` )
6325 VALUES ( 'members', 'OPAC_REG_VERIFY', '', 'Opac Self-Registration Verification Email', '1', 'Verify Your Account', 'Hello!
6327 Your library account has been created. Please verify your email address by clicking this link to complete the signup process:
6329 http://<<OPACBaseURL>>/cgi-bin/koha/opac-registration-verify.pl?token=<<borrower_modifications.verification_token>>
6331 If you did not initiate this request, you may safely ignore this one-time message. The request will expire shortly.'
6332 )");
6334 print "Upgrade to $DBversion done (Bug 7067: Add Patron Self Registration)\n";
6335 SetVersion ($DBversion);
6338 $DBversion = "3.11.00.009";
6339 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
6340 $dbh->do("
6341 INSERT IGNORE INTO systempreferences (variable,value,explanation,options,type) VALUES
6342 ('SeparateHoldings', '0', 'Separate current branch holdings from other holdings', NULL, 'YesNo'),
6343 ('SeparateHoldingsBranch', 'homebranch', 'Branch used to separate holdings', 'homebranch|holdingbranch', 'Choice'),
6344 ('OpacSeparateHoldings', '0', 'Separate current branch holdings from other holdings (OPAC)', NULL, 'YesNo'),
6345 ('OpacSeparateHoldingsBranch', 'homebranch', 'Branch used to separate holdings (OPAC)', 'homebranch|holdingbranch', 'Choice')
6348 print "Upgrade to $DBversion done (Bug 7674: Add systempreferences SeparateHoldings, SeparateHoldingsBranch, OpacSeparateHoldings and OpacSeparateHoldingsBranch) \n";
6349 SetVersion ($DBversion);
6352 $DBversion = "3.11.00.010";
6353 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
6354 $dbh->do("INSERT INTO systempreferences (variable,value,options,explanation,type) VALUES('RenewalSendNotice', '0', '', NULL, 'YesNo')");
6355 $dbh->do(q{
6356 INSERT INTO `letter` (`module`, `code`, `name`, `title`, `content`) VALUES
6357 ('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>>.');
6359 print "Upgrade to $DBversion done (Bug 9151 - Renewal notice according to patron alert preferences)\n";
6360 SetVersion($DBversion);
6363 $DBversion = "3.11.00.011";
6364 if ( CheckVersion($DBversion) ) {
6365 $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');");
6366 $dbh->do("INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES('HTML5MediaExtensions','webm|ogg|ogv|oga|vtt','Media file extensions','','free');");
6367 print "Upgrade to $DBversion done (Bug 8377: Add HTML5MediaEnabled and HTML5MediaExtensions sysprefs)\n";
6368 SetVersion ($DBversion);
6371 $DBversion = "3.11.00.012";
6372 if ( CheckVersion($DBversion) ) {
6373 $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')");
6374 print "Upgrade to $DBversion done (Bug 9206: Only allow place holds in records that the patron don't have in his possession)\n";
6375 SetVersion($DBversion);
6378 $DBversion = "3.11.00.013";
6379 if ( CheckVersion($DBversion) ) {
6380 $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')");
6381 print "Upgrade to $DBversion done (Bug 9162 - Add a system preference to set which notes fields appears on title notes/description separator)\n";
6382 SetVersion($DBversion);
6385 $DBversion = "3.11.00.014";
6386 if ( CheckVersion($DBversion) ) {
6387 $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' )");
6388 $dbh->do("INSERT INTO systempreferences ( variable, value, explanation, type ) VALUES ( 'SCOUserJS', '', 'Define custom javascript for inclusion in the SCO module', 'free' )");
6389 print "Upgrade to $DBversion done (Bug 9009: Add SCOUserCSS and SCOUserJS sysprefs)\n";
6392 $DBversion = "3.11.00.015";
6393 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
6394 $dbh->do("INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES ('RentalsInNoissuesCharge', '1', 'Rental charges block checkouts (added to noissuescharge).',NULL,'YesNo');");
6395 $dbh->do("INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES ('ManInvInNoissuesCharge', '1', 'MANUAL_INV charges block checkouts (added to noissuescharge).',NULL,'YesNo');");
6396 print "Upgrade to $DBversion done (Add sysprefs RentalsInNoissuesCharge and ManInvInNoissuesCharge.)\n";
6397 SetVersion($DBversion);
6400 $DBversion = "3.11.00.016";
6401 if ( CheckVersion($DBversion) ) {
6402 $dbh->do(q{
6403 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";
6405 $dbh->do(q{
6406 UPDATE userflags SET flagdesc="Edit Authorities" where flagdesc="Allow to edit authorities";
6408 $dbh->do(q{
6409 UPDATE userflags SET flagdesc="Allow access to the reports module" where flagdesc="Allow to access to the reports module";
6411 $dbh->do(q{
6412 UPDATE userflags SET flagdesc="Set library management parameters (deprecated)" where flagdesc="Set library management parameters";
6414 $dbh->do(q{
6415 UPDATE userflags SET flagdesc="Manage serial subscriptions" where flagdesc="Allow to manage serials subscriptions";
6417 $dbh->do(q{
6418 UPDATE userflags SET flagdesc="Manage patrons fines and fees" where flagdesc="Update borrower charges";
6420 $dbh->do(q{
6421 UPDATE userflags SET flagdesc="Check out and check in items" where flagdesc="Circulate books";
6423 $dbh->do(q{
6424 UPDATE userflags SET flagdesc="Manage Koha system settings (Administration panel)" where flagdesc="Set Koha system parameters";
6426 $dbh->do(q{
6427 UPDATE userflags SET flagdesc="Add or modify patrons" where flagdesc="Add or modify borrowers";
6429 $dbh->do(q{
6430 UPDATE userflags SET flagdesc="Use all tools (expand for granular tools permissions)" where flagdesc="Use tools (export, import, barcodes)";
6432 $dbh->do(q{
6433 UPDATE userflags SET flagdesc="Allow staff members to modify permissions for other staff members" where flagdesc="Set user permissions";
6435 $dbh->do(q{
6436 UPDATE permissions SET description="Perform batch modification of patrons" where description="Perform batch modifivation of patrons";
6439 print "Upgrade to $DBversion done (Bug 9382 (updated with bug 9745) - refresh permission descriptions to make more sense)\n";
6440 SetVersion ($DBversion);
6443 $DBversion ="3.11.00.017";
6444 if ( CheckVersion($DBversion) ) {
6445 $dbh->do("INSERT IGNORE INTO systempreferences (variable,value,explanation,options,type) VALUES('IDreamBooksReviews','0','Display book review snippets from IDreamBooks.com','','YesNo');");
6446 $dbh->do("INSERT IGNORE INTO systempreferences (variable,value,explanation,options,type) VALUES('IDreamBooksReadometer','0','Display Readometer from IDreamBooks.com','','YesNo');");
6447 $dbh->do("INSERT IGNORE INTO systempreferences (variable,value,explanation,options,type) VALUES('IDreamBooksResults','0','Display IDreamBooks.com rating in search results','','YesNo');");
6448 print "Upgrade to $DBversion done (Add IDreamBooks enhanced content)\n";
6449 SetVersion($DBversion);
6452 $DBversion = "3.11.00.018";
6453 if ( CheckVersion($DBversion) ) {
6454 $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')");
6455 $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')");
6456 print "Upgrade to $DBversion done (Bug 9395: Problem with callnumber and standard number search in OPAC and Staff Client)\n";
6457 SetVersion ($DBversion);
6460 $DBversion = "3.11.00.019";
6461 if ( CheckVersion($DBversion) ) {
6462 $dbh->do("INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES ('UNIMARCAuthorityField100', 'afrey50 ba0', NULL, NULL, 'Textarea')");
6463 print "Upgrade to $DBversion done (Bug 9145 - Add syspref UNIMARCAuthorityField100)\n";
6464 SetVersion ($DBversion);
6467 $DBversion = "3.11.00.020";
6468 if ( CheckVersion($DBversion) ) {
6469 $dbh->do("INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES('UNIMARCField100Language', 'fre','UNIMARC field 100 default language',NULL,'short')");
6470 print "Upgrade to $DBversion done (Bug 8347 - Koha forces UNIMARC 100 field code language to 'fre')\n";
6471 SetVersion($DBversion);
6474 $DBversion ="3.11.00.021";
6475 if ( CheckVersion($DBversion) ) {
6476 $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');");
6477 print "Upgrade to $DBversion done (Bug 5888 - Subject search pop-up for the OPAC)\n";
6478 SetVersion($DBversion);
6481 $DBversion = "3.11.00.022";
6482 if ( CheckVersion($DBversion) ) {
6483 $dbh->do(
6484 "INSERT IGNORE INTO systempreferences (variable,value,explanation,options,type) VALUES('Persona',0,'Use Mozilla Persona for login','','YesNo')"
6486 print "Upgrade to $DBversion done (Bug 9587 - Allow login via Persona)\n";
6487 SetVersion($DBversion);
6490 $DBversion = "3.11.00.023";
6491 if ( CheckVersion($DBversion) ) {
6492 $dbh->do("UPDATE z3950servers SET host = 'lx2.loc.gov', port = 210, db = 'LCDB', syntax = 'USMARC', encoding = 'utf8' WHERE name = 'LIBRARY OF CONGRESS'");
6493 print "Upgrade to $DBversion done (Bug 9520 - Update default LOC Z39.50 target)\n";
6494 SetVersion($DBversion);
6497 $DBversion = "3.11.00.024";
6498 if ( CheckVersion($DBversion) ) {
6499 $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');");
6500 print "Upgrade to $DBversion done (Bug 5079: Add OpacItemLocation syspref)\n";
6501 SetVersion ($DBversion);
6504 $DBversion = "3.11.00.025";
6505 if ( CheckVersion($DBversion) ) {
6506 $dbh->do(
6507 "CREATE TABLE linktracker (
6508 id int(11) NOT NULL AUTO_INCREMENT,
6509 biblionumber int(11) DEFAULT NULL,
6510 itemnumber int(11) DEFAULT NULL,
6511 borrowernumber int(11) DEFAULT NULL,
6512 url text,
6513 timeclicked datetime DEFAULT NULL,
6514 PRIMARY KEY (id),
6515 KEY bibidx (biblionumber),
6516 KEY itemidx (itemnumber),
6517 KEY borridx (borrowernumber),
6518 KEY dateidx (timeclicked)
6519 ) ENGINE=InnoDB DEFAULT CHARSET=utf8;"
6521 $dbh->do( "
6522 INSERT INTO systempreferences (variable,value,explanation,options,type)
6523 VALUES('TrackClicks','0','Track links clicked',NULL,'Integer')" );
6524 print
6525 "Upgrade to $DBversion done (Adds feature Bug 8917, the ability to track links clicked)\n";
6526 SetVersion($DBversion);
6529 $DBversion = "3.11.00.026";
6530 if ( CheckVersion($DBversion) ) {
6531 $dbh->do(qq{
6532 ALTER TABLE import_records ADD INDEX batch_id_record_type ( import_batch_id, record_type );
6534 print "Upgrade to $DBversion done (Bug 9207: Add new index batch_id_record_type to import_records)\n";
6535 SetVersion($DBversion);
6538 $DBversion = "3.11.00.027";
6539 if ( CheckVersion($DBversion) ) {
6540 $dbh->do(q{
6541 INSERT INTO permissions ( module_bit, code, description )
6542 VALUES ( '1', 'overdues_report', 'Execute overdue items report' )
6544 # add new permission for users with all report permissions and circulation remaining permission
6545 $dbh->do(q{
6546 INSERT INTO user_permissions (borrowernumber, module_bit, code)
6547 SELECT user_permissions.borrowernumber, 1, 'overdues_report'
6548 FROM user_permissions
6549 LEFT JOIN borrowers USING(borrowernumber)
6550 WHERE borrowers.flags & (1 << 16)
6551 AND user_permissions.code = 'circulate_remaining_permissions'
6553 print "Upgrade to $DBversion done ( Add circ permission overdues_report )\n";
6554 SetVersion($DBversion);
6557 $DBversion = "3.11.00.028";
6558 if ( CheckVersion($DBversion) ) {
6559 $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' );");
6560 print "Upgrade to $DBversion done (Bug 9756 - Patron self registration missing the system preference PatronSelfRegistrationAdditionalInstructions)\n";
6561 SetVersion($DBversion);
6564 $DBversion = "3.11.00.029";
6565 if (CheckVersion($DBversion)) {
6566 $dbh->do("INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES('UseQueryParser', '0', 'If enabled, try to use QueryParser for queries.', NULL, 'YesNo')");
6567 print "Upgrade to $DBversion done (Bug 9239: Make it possible for Koha to use QueryParser)\n";
6568 SetVersion ($DBversion);
6571 $DBversion = "3.11.00.030";
6572 if ( CheckVersion($DBversion) ) {
6573 $dbh->do("INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES('FinesIncludeGracePeriod','1','If enabled, fines calculations will include the grace period.',NULL,'YesNo');");
6574 print "Upgrade to $DBversion done (Add system preference FinesIncludeGracePeriod)\n";
6575 SetVersion($DBversion);
6578 $DBversion = "3.11.00.100";
6579 if ( CheckVersion($DBversion) ) {
6580 print "Upgrade to $DBversion done (3.12-alpha release)\n";
6581 SetVersion ($DBversion);
6584 $DBversion = "3.11.00.101";
6585 if ( CheckVersion($DBversion) ) {
6586 $dbh->do("INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES ('UNIMARCAuthorsFacetsSeparator',', ', 'UNIMARC authors facets separator', NULL, 'short')");
6587 print "Upgrade to $DBversion done (Bug 9341: Problem with UNIMARC authors facets)\n";
6588 SetVersion ($DBversion);
6591 $DBversion = "3.11.00.102";
6592 if ( CheckVersion($DBversion) ) {
6593 $dbh->do(q{
6594 DELETE FROM systempreferences WHERE variable='NoZebra'
6596 $dbh->do(q{
6597 DELETE FROM systempreferences WHERE variable='QueryRemoveStopwords'
6599 print "Upgrade to $DBversion done (Remove deprecated NoZebra and QueryRemoveStopwords sysprefs)\n";
6600 SetVersion($DBversion);
6603 $DBversion = "3.11.00.103";
6604 if ( CheckVersion($DBversion) ) {
6605 $dbh->do("DELETE FROM systempreferences WHERE variable = 'insecure';");
6606 print "Upgrade to $DBversion done (Bug 9827 - Remove 'insecure' system preference)\n";
6607 SetVersion($DBversion);
6610 $DBversion = "3.11.00.104";
6611 if ( CheckVersion($DBversion) ) {
6612 print "Upgrade to $DBversion done (3.12-alpha2 release)\n";
6613 SetVersion ($DBversion);
6616 $DBversion = "3.11.00.105";
6617 if ( CheckVersion($DBversion) ) {
6618 if ( C4::Context->preference("marcflavour") eq 'MARC21' ) {
6619 $sth = $dbh->prepare(
6620 "SELECT frameworkcode FROM marc_tag_structure WHERE tagfield = '029'"
6622 $sth->execute;
6623 my $frameworkcodes = $sth->fetchall_hashref('frameworkcode');
6625 for my $frameworkcode ( keys %$frameworkcodes ) {
6626 $dbh->do( "
6627 INSERT IGNORE INTO marc_subfield_structure (tagfield, tagsubfield, liblibrarian,
6628 libopac, repeatable, mandatory, kohafield, tab, authorised_value, authtypecode,
6629 value_builder, isurl, hidden, frameworkcode, seealso, link, defaultvalue) VALUES
6630 ('029', 'a', 'OCLC library identifier', 'OCLC library identifier', 0, 0, '', 0, '', '', '', 0, -6, '$frameworkcode', '', '', NULL),
6631 ('029', 'b', 'System control number', 'System control number', 0, 0, '', 0, '', '', '', 0, -6, '$frameworkcode', '', '', NULL),
6632 ('029', 'c', 'OAI set name', 'OAI set name', 0, 0, '', 0, '', '', '', 0, -6, '$frameworkcode', '', '', NULL),
6633 ('029', 't', 'Content type identifier', 'Content type identifier', 0, 0, '', 0, '', '', '', 0, -6, '$frameworkcode', '', '', NULL)
6634 " );
6637 for my $tag ( '863', '864', '865' ) {
6638 $sth = $dbh->prepare(
6639 "SELECT frameworkcode FROM marc_tag_structure WHERE tagfield = '$tag'"
6641 $sth->execute;
6642 my $frameworkcodes = $sth->fetchall_hashref('frameworkcode');
6644 for my $frameworkcode ( keys %$frameworkcodes ) {
6645 $dbh->do( "
6646 INSERT IGNORE INTO marc_subfield_structure (tagfield, tagsubfield, liblibrarian,
6647 libopac, repeatable, mandatory, kohafield, tab, authorised_value, authtypecode,
6648 value_builder, isurl, hidden, frameworkcode, seealso, link, defaultvalue) VALUES
6649 ('$tag', '6', 'Linkage', 'Linkage', 0, 0, '', 8, '', '', '', NULL, 5, '$frameworkcode', '', '', NULL),
6650 ('$tag', '8', 'Field link and sequence number', 'Field link and sequence number', 0, 0, '', 8, '', '', '', NULL, 5, '$frameworkcode', '', '', NULL),
6651 ('$tag', 'a', 'First level of enumeration', 'First level of enumeration', 0, 0, '', 8, '', '', '', 0, 5, '$frameworkcode', '', '', NULL),
6652 ('$tag', 'b', 'Second level of enumeration', 'Second level of enumeration', 0, 0, '', 8, '', '', '', 0, 5, '$frameworkcode', '', '', NULL),
6653 ('$tag', 'c', 'Third level of enumeration', 'Third level of enumeration', 0, 0, '', 8, '', '', '', 0, 5, '$frameworkcode', '', '', NULL),
6654 ('$tag', 'd', 'Fourth level of enumeration', 'Fourth level of enumeration', 0, 0, '', 8, '', '', '', 0, 5, '$frameworkcode', '', '', NULL),
6655 ('$tag', 'e', 'Fifth level of enumeration', 'Fifth level of enumeration', 0, 0, '', 8, '', '', '', 0, 5, '$frameworkcode', '', '', NULL),
6656 ('$tag', 'f', 'Sixth level of enumeration', 'Sixth level of enumeration', 0, 0, '', 8, '', '', '', 0, 5, '$frameworkcode', '', '', NULL),
6657 ('$tag', 'g', 'Alternative numbering scheme, first level of enumeration', 'Alternative numbering scheme, first level of enumeration', 0, 0, '', 8, '', '', '', 0, 5, '$frameworkcode', '', '', NULL),
6658 ('$tag', 'h', 'Alternative numbering scheme, second level of enumeration', 'Alternative numbering scheme, second level of enumeration', 0, 0, '', 8, '', '', '', 0, 5, '$frameworkcode', '', '', NULL),
6659 ('$tag', 'i', 'First level of chronology', 'First level of chronology', 0, 0, '', 8, '', '', '', 0, 5, '$frameworkcode', '', '', NULL),
6660 ('$tag', 'j', 'Second level of chronology', 'Second level of chronology', 0, 0, '', 8, '', '', '', 0, 5, '$frameworkcode', '', '', NULL),
6661 ('$tag', 'k', 'Third level of chronology', 'Third level of chronology', 0, 0, '', 8, '', '', '', 0, 5, '$frameworkcode', '', '', NULL),
6662 ('$tag', 'l', 'Fourth level of chronology', 'Fourth level of chronology', 0, 0, '', 8, '', '', '', 0, 5, '$frameworkcode', '', '', NULL),
6663 ('$tag', 'm', 'Alternative numbering scheme, chronology', 'Alternative numbering scheme, chronology', 0, 0, '', 8, '', '', '', 0, 5, '$frameworkcode', '', '', NULL),
6664 ('$tag', 'n', 'Converted Gregorian year', 'Converted Gregorian year', 0, 0, '', 8, '', '', '', 0, 5, '$frameworkcode', '', '', NULL),
6665 ('$tag', 'o', 'Type of unit', 'Type of unit', 1, 0, '', 8, '', '', '', 0, 5, '$frameworkcode', '', '', NULL),
6666 ('$tag', 'p', 'Piece designation', 'Piece designation', 0, 0, '', 8, '', '', '', 0, 5, '$frameworkcode', '', '', NULL),
6667 ('$tag', 'q', 'Piece physical condition', 'Piece physical condition', 0, 0, '', 8, '', '', '', 0, 5, '$frameworkcode', '', '', NULL),
6668 ('$tag', 's', 'Copyright article-fee code', 'Copyright article-fee code', 1, 0, '', 8, '', '', '', 0, 5, '$frameworkcode', '', '', NULL),
6669 ('$tag', 't', 'Copy number', 'Copy number', 0, 0, '', 8, '', '', '', 0, 5, '$frameworkcode', '', '', NULL),
6670 ('$tag', 'v', 'Issuing date', 'Issuing date', 1, 0, '', 8, '', '', '', 0, 5, '$frameworkcode', '', '', NULL),
6671 ('$tag', 'w', 'Break indicator', 'Break indicator', 0, 0, '', 8, '', '', '', 0, 5, '$frameworkcode', '', '', NULL),
6672 ('$tag', 'x', 'Nonpublic note', 'Nonpublic note', 1, 0, '', 8, '', '', '', 0, 5, '$frameworkcode', '', '', NULL),
6673 ('$tag', 'z', 'Public note', 'Public note', 1, 0, '', 8, '', '', '', 0, 5, '$frameworkcode', '', '', NULL)
6674 " );
6678 print "Upgrade to $DBversion done (Bug 9353: Missing subfields on MARC21 frameworks)\n";
6679 SetVersion($DBversion);
6683 $DBversion = "3.11.00.106";
6684 if ( CheckVersion($DBversion) ) {
6685 $dbh->do("INSERT INTO userflags (bit, flag, flagdesc, defaulton) VALUES ('19', 'plugins', 'Koha plugins', '0')");
6686 $dbh->do("INSERT INTO permissions (module_bit, code, description) VALUES
6687 ('19', 'manage', 'Manage plugins ( install / uninstall )'),
6688 ('19', 'tool', 'Use tool plugins'),
6689 ('19', 'report', 'Use report plugins'),
6690 ('19', 'configure', 'Configure plugins')
6692 $dbh->do("INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES('UseKohaPlugins','0','Enable or disable the ability to use Koha Plugins.','','YesNo')");
6694 $dbh->do("
6695 CREATE TABLE IF NOT EXISTS plugin_data (
6696 plugin_class varchar(255) NOT NULL,
6697 plugin_key varchar(255) NOT NULL,
6698 plugin_value text,
6699 PRIMARY KEY (plugin_class,plugin_key)
6700 ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
6703 print "Upgrade to $DBversion done (Bug 7804: Added plugin system.)\n";
6704 SetVersion($DBversion);
6707 $DBversion = "3.11.00.107";
6708 if ( CheckVersion($DBversion) ) {
6709 $dbh->do("INSERT INTO systempreferences (variable,value,options,explanation,type) VALUES ('TimeFormat','24hr','12hr|24hr','Defines the global time format for visual output.','Choice')");
6710 print "Upgrade to $DBversion done (Bug 9014: Add syspref TimeFormat)\n";
6711 SetVersion ($DBversion);
6714 $DBversion = "3.11.00.108";
6715 if ( CheckVersion($DBversion) ) {
6716 $dbh->do("ALTER TABLE action_logs CHANGE timestamp timestamp TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP;");
6717 $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');");
6718 $dbh->do("ALTER TABLE action_logs CHANGE timestamp timestamp TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP;");
6719 print "Upgrade to $DBversion done (Bug 7241: Fix on circulation logs)\n";
6720 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";
6721 SetVersion($DBversion);
6724 $DBversion = "3.11.00.109";
6725 if ( CheckVersion($DBversion) ) {
6726 $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');");
6727 print "Upgrade to $DBversion done (Bug 9403: Add DisplayIconsXSLT)\n";
6728 SetVersion ($DBversion);
6731 $DBversion = "3.11.00.110";
6732 if ( CheckVersion($DBversion) ) {
6733 $dbh->do("ALTER TABLE pending_offline_operations CHANGE barcode barcode VARCHAR( 20 ) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL");
6734 $dbh->do("ALTER TABLE pending_offline_operations ADD amount DECIMAL( 28, 6 ) NULL DEFAULT NULL");
6735 print "Upgrade to $DBversion done (Bug 8220 - Allow koc uploads to go to process queue)\n";
6736 SetVersion ($DBversion);
6739 $DBversion = "3.11.00.111";
6740 if ( CheckVersion($DBversion) ) {
6741 my $sth = $dbh->prepare("
6742 SELECT module, code, branchcode, content
6743 FROM letter
6744 WHERE content LIKE '%<fine>%'
6746 $sth->execute;
6747 my $sth_update = $dbh->prepare("UPDATE letter SET content = ? WHERE module = ? AND code = ? AND branchcode = ?");
6748 while(my $row = $sth->fetchrow_hashref){
6749 $row->{content} =~ s/<fine>\w+<\/fine>/<<items.fine>>/;
6750 $sth_update->execute($row->{content}, $row->{module}, $row->{code}, $row->{branchcode});
6752 print "Upgrade to $DBversion done (use new <<items.fine>> syntax in notices)\n";
6753 SetVersion($DBversion);
6756 $DBversion = "3.11.00.112";
6757 if ( CheckVersion($DBversion) ) {
6758 $dbh->do(qq{
6759 ALTER TABLE issuingrules ADD COLUMN renewalperiod int(4) DEFAULT NULL AFTER renewalsallowed
6761 $dbh->do(qq{
6762 UPDATE issuingrules SET renewalperiod = issuelength
6764 print "Upgrade to $DBversion done (Bug 8365: Add colum issuingrules.renewalperiod)\n";
6765 SetVersion ($DBversion);
6768 $DBversion = "3.11.00.113";
6769 if ( CheckVersion($DBversion) ) {
6770 $dbh->do(q{
6771 ALTER TABLE branchcategories ADD show_in_pulldown BOOLEAN NOT NULL DEFAULT '0',
6772 ADD INDEX ( show_in_pulldown )
6774 print "Upgrade to $DBversion done (Bug 9257 - Add groups to normal search pulldown)\n";
6775 SetVersion ($DBversion);
6778 $DBversion = "3.11.00.115";
6779 if ( CheckVersion($DBversion) ) {
6780 $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')");
6781 $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')");
6782 print "Upgrade to $DBversion done (Bug 7740: Add syspref HighlightOwnItemsOnOPAC)\n";
6783 SetVersion ($DBversion);
6786 $DBversion = "3.11.00.116";
6787 if ( CheckVersion($DBversion) ) {
6788 $dbh->do(q{ALTER TABLE aqorders DROP COLUMN serialid;});
6789 $dbh->do(q{ALTER TABLE aqorders DROP COLUMN subscription;});
6790 $dbh->do(q{ALTER TABLE aqorders ADD COLUMN subscriptionid INT(11) DEFAULT NULL;});
6791 $dbh->do(q{ALTER TABLE aqorders ADD CONSTRAINT aqorders_subscriptionid FOREIGN KEY (subscriptionid) REFERENCES subscription (subscriptionid) ON DELETE CASCADE ON UPDATE CASCADE;});
6792 $dbh->do(q{ALTER TABLE subscription ADD COLUMN reneweddate DATE DEFAULT NULL;});
6793 print "Upgrade to $DBversion done (Bug 5343: table aqorders: DROP serialid and subscription fields and ADD subscriptionid, table subscription: ADD reneweddate)\n";
6794 SetVersion ($DBversion);
6797 $DBversion = "3.11.00.200";
6798 if ( CheckVersion($DBversion) ) {
6799 print "Upgrade to $DBversion done (3.12-beta1 release)\n";
6800 SetVersion ($DBversion);
6803 $DBversion = "3.11.00.201";
6804 if ( CheckVersion($DBversion) ) {
6805 $dbh->do("UPDATE z3950servers SET encoding = 'ISO_8859-1' WHERE name = 'BIBSYS' AND host LIKE 'z3950.bibsys.no'");
6806 $dbh->do("UPDATE z3950servers SET encoding = 'ISO_8859-1' WHERE name = 'NORBOK' AND host LIKE 'z3950.nb.no'");
6807 $dbh->do("UPDATE z3950servers SET encoding = 'ISO_8859-1' WHERE name = 'SAMBOK' AND host LIKE 'z3950.nb.no'");
6808 $dbh->do("UPDATE z3950servers SET encoding = 'ISO_8859-1' WHERE name = 'DEICHMAN' AND host like 'z3950.deich.folkebibl.no'");
6809 print "Upgrade to $DBversion done (Bug 9498 - Update encoding for Norwegian sample Z39.50 servers)\n";
6810 SetVersion($DBversion);
6813 $DBversion = "3.11.00.202";
6814 if ( CheckVersion($DBversion) ) {
6815 $dbh->do("INSERT INTO language_subtag_registry( subtag, type, description, added) VALUES ( 'ca', 'language', 'Catalan','2013-01-12' )");
6816 $dbh->do("INSERT INTO language_rfc4646_to_iso639(rfc4646_subtag,iso639_2_code) VALUES( 'ca','cat')");
6817 $dbh->do("INSERT INTO language_descriptions(subtag, type, lang, description) VALUES( 'ca', 'language', 'es', 'Catalán')");
6818 $dbh->do("INSERT INTO language_descriptions(subtag, type, lang, description) VALUES( 'ca', 'language', 'en', 'Catalan')");
6819 $dbh->do("INSERT INTO language_descriptions(subtag, type, lang, description) VALUES( 'ca', 'language', 'fr', 'Catalan')");
6820 $dbh->do("INSERT INTO language_descriptions(subtag, type, lang, description) VALUES( 'ca', 'language', 'ca', 'Català')");
6821 $dbh->do("INSERT INTO language_descriptions(subtag, type, lang, description) VALUES( 'ca', 'language', 'de', 'Katalanisch')");
6822 print "Upgrade to $DBversion done (Bug 9381: Add Catalan laguage)\n";
6823 SetVersion ($DBversion);
6826 $DBversion = "3.11.00.203";
6827 if ( CheckVersion($DBversion) ) {
6828 $dbh->do(q{ALTER TABLE suggestions CHANGE COLUMN title title VARCHAR(255) DEFAULT NULL;});
6829 print "Upgrade to $DBversion done (Bug 2046 - increasing title column length for suggestions)\n";
6830 SetVersion ($DBversion);
6833 $DBversion = "3.11.00.300";
6834 if ( CheckVersion($DBversion) ) {
6835 print "Upgrade to $DBversion done (3.12-beta3 release)\n";
6836 SetVersion ($DBversion);
6839 $DBversion = "3.11.00.301";
6840 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
6841 #issues
6842 $dbh->do(q{
6843 ALTER TABLE `issues`
6844 ADD KEY `itemnumber_idx` (`itemnumber`),
6845 ADD KEY `branchcode_idx` (`branchcode`),
6846 ADD KEY `issuingbranch_idx` (`issuingbranch`)
6848 $dbh->do(q{
6849 ALTER TABLE `old_issues`
6850 ADD KEY `branchcode_idx` (`branchcode`),
6851 ADD KEY `issuingbranch_idx` (`issuingbranch`)
6853 #items
6854 $dbh->do(q{
6855 ALTER TABLE `items` ADD KEY `itype_idx` (`itype`)
6857 $dbh->do(q{
6858 ALTER TABLE `deleteditems` ADD KEY `itype_idx` (`itype`)
6860 # biblioitems
6861 $dbh->do(q{
6862 ALTER TABLE `biblioitems` ADD KEY `itemtype_idx` (`itemtype`)
6864 $dbh->do(q{
6865 ALTER TABLE `deletedbiblioitems` ADD KEY `itemtype_idx` (`itemtype`)
6867 # statistics
6868 $dbh->do(q{
6869 ALTER TABLE `statistics`
6870 ADD KEY `branch_idx` (`branch`),
6871 ADD KEY `proccode_idx` (`proccode`),
6872 ADD KEY `type_idx` (`type`),
6873 ADD KEY `usercode_idx` (`usercode`),
6874 ADD KEY `itemnumber_idx` (`itemnumber`),
6875 ADD KEY `itemtype_idx` (`itemtype`),
6876 ADD KEY `borrowernumber_idx` (`borrowernumber`),
6877 ADD KEY `associatedborrower_idx` (`associatedborrower`),
6878 ADD KEY `ccode_idx` (`ccode`)
6881 print "Upgrade to $DBversion done (Bug 9681: Add some database indexes)\n";
6882 SetVersion($DBversion);
6885 $DBversion = "3.12.00.000";
6886 if ( CheckVersion($DBversion) ) {
6887 print "Upgrade to $DBversion done (3.12.0 release)\n";
6888 SetVersion ($DBversion);
6891 $DBversion = '3.13.00.000';
6892 if ( CheckVersion($DBversion) ) {
6893 print "Upgrade to $DBversion done (start the journey to Koha Pi)\n";
6894 SetVersion ($DBversion);
6897 $DBversion = "3.13.00.001";
6898 if ( CheckVersion($DBversion) ) {
6899 $dbh->do("INSERT INTO `systempreferences` (`variable`, `value`, `options`, `explanation`, `type`) VALUES ('UseCourseReserves', '0', NULL, 'Enable the course reserves feature.', 'YesNo')");
6900 $dbh->do("INSERT INTO userflags (bit,flag,flagdesc,defaulton) VALUES ('18','coursereserves','Course Reserves','0')");
6901 $dbh->do("
6902 CREATE TABLE `courses` (
6903 `course_id` int(11) NOT NULL AUTO_INCREMENT,
6904 `department` varchar(20) DEFAULT NULL,
6905 `course_number` varchar(255) DEFAULT NULL,
6906 `section` varchar(255) DEFAULT NULL,
6907 `course_name` varchar(255) DEFAULT NULL,
6908 `term` varchar(20) DEFAULT NULL,
6909 `staff_note` mediumtext,
6910 `public_note` mediumtext,
6911 `students_count` varchar(20) DEFAULT NULL,
6912 `enabled` enum('yes','no') NOT NULL DEFAULT 'yes',
6913 `timestamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
6914 PRIMARY KEY (`course_id`)
6915 ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
6918 $dbh->do("
6919 CREATE TABLE `course_instructors` (
6920 `course_id` int(11) NOT NULL,
6921 `borrowernumber` int(11) NOT NULL,
6922 PRIMARY KEY (`course_id`,`borrowernumber`),
6923 KEY `borrowernumber` (`borrowernumber`)
6924 ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
6927 $dbh->do("
6928 ALTER TABLE `course_instructors`
6929 ADD CONSTRAINT `course_instructors_ibfk_2` FOREIGN KEY (`course_id`) REFERENCES `courses` (`course_id`),
6930 ADD CONSTRAINT `course_instructors_ibfk_1` FOREIGN KEY (`borrowernumber`) REFERENCES `borrowers` (`borrowernumber`) ON DELETE CASCADE ON UPDATE CASCADE;
6933 $dbh->do("
6934 CREATE TABLE `course_items` (
6935 `ci_id` int(11) NOT NULL AUTO_INCREMENT,
6936 `itemnumber` int(11) NOT NULL,
6937 `itype` varchar(10) DEFAULT NULL,
6938 `ccode` varchar(10) DEFAULT NULL,
6939 `holdingbranch` varchar(10) DEFAULT NULL,
6940 `location` varchar(80) DEFAULT NULL,
6941 `enabled` enum('yes','no') NOT NULL DEFAULT 'no',
6942 `timestamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
6943 PRIMARY KEY (`ci_id`),
6944 UNIQUE KEY `itemnumber` (`itemnumber`),
6945 KEY `holdingbranch` (`holdingbranch`)
6946 ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
6949 $dbh->do("
6950 ALTER TABLE `course_items`
6951 ADD CONSTRAINT `course_items_ibfk_2` FOREIGN KEY (`holdingbranch`) REFERENCES `branches` (`branchcode`) ON DELETE CASCADE ON UPDATE CASCADE,
6952 ADD CONSTRAINT `course_items_ibfk_1` FOREIGN KEY (`itemnumber`) REFERENCES `items` (`itemnumber`) ON DELETE CASCADE ON UPDATE CASCADE;
6955 $dbh->do("
6956 CREATE TABLE `course_reserves` (
6957 `cr_id` int(11) NOT NULL AUTO_INCREMENT,
6958 `course_id` int(11) NOT NULL,
6959 `ci_id` int(11) NOT NULL,
6960 `staff_note` mediumtext,
6961 `public_note` mediumtext,
6962 `timestamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
6963 PRIMARY KEY (`cr_id`),
6964 UNIQUE KEY `pseudo_key` (`course_id`,`ci_id`),
6965 KEY `course_id` (`course_id`)
6966 ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
6969 $dbh->do("
6970 ALTER TABLE `course_reserves`
6971 ADD CONSTRAINT `course_reserves_ibfk_1` FOREIGN KEY (`course_id`) REFERENCES `courses` (`course_id`);
6974 $dbh->do("
6975 INSERT INTO permissions (module_bit, code, description) VALUES
6976 (18, 'manage_courses', 'Add, edit and delete courses'),
6977 (18, 'add_reserves', 'Add course reserves'),
6978 (18, 'delete_reserves', 'Remove course reserves')
6983 print "Upgrade to $DBversion done (Add Course Reserves ( system preference UseCourseReserves ))\n";
6984 SetVersion($DBversion);
6987 $DBversion = "3.13.00.002";
6988 if ( CheckVersion($DBversion) ) {
6989 $dbh->do("UPDATE systempreferences SET variable = 'IndependentBranches' WHERE variable = 'IndependantBranches'");
6990 print "Upgrade to $DBversion done (Bug 10080 - Change system pref IndependantBranches to IndependentBranches)\n";
6991 SetVersion ($DBversion);
6994 $DBversion = '3.13.00.003';
6995 if ( CheckVersion($DBversion) ) {
6996 $dbh->do("ALTER TABLE serial DROP itemnumber");
6997 print "Upgrade to $DBversion done (Bug 7718 - Remove itemnumber column from serials table)\n";
6998 SetVersion($DBversion);
7001 $DBversion = "3.13.00.004";
7002 if(CheckVersion($DBversion)) {
7003 $dbh->do(
7004 "INSERT IGNORE INTO systempreferences (variable,value,explanation,options,type) VALUES('OpacShowHoldNotes',0,'Show hold notes on OPAC','','YesNo')"
7006 print "Upgrade to $DBversion done (Bug 9722: Allow users to add notes when placing a hold in OPAC)\n";
7007 SetVersion($DBversion);
7010 $DBversion = "3.13.00.005";
7011 if(CheckVersion($DBversion)) {
7012 my $intra= C4::Context->preference("intranetstylesheet");
7013 #if this pref is not blank or starting with http, https or / [root], then
7014 #add an additional / to the front
7015 if($intra && $intra !~ /^(\/|https?)/) {
7016 $dbh->do("UPDATE systempreferences SET value=? WHERE variable=?",
7017 undef,('/'.$intra,"intranetstylesheet"));
7018 print "WARNING: Your system preference intranetstylesheet has been prefixed with a slash to make it an absolute path.\n";
7020 print "Upgrade to $DBversion done (Bug 10052: Make intranetstylesheet and intranetcolorstylesheet behave exactly like their opac counterparts)\n";
7021 SetVersion ($DBversion);
7024 $DBversion = "3.13.00.006";
7025 if ( CheckVersion($DBversion) ) {
7026 $dbh->do(q{
7027 INSERT IGNORE INTO systempreferences (variable,value,explanation,options,type)
7028 VALUES ('CalculateFinesOnReturn','1','Switch to control if overdue fines are calculated on return or not', '', 'YesNo')
7030 print "Upgrade to $DBversion done (Bug 10120: Fines on item return controlled by a systempreference)\n";
7031 SetVersion($DBversion);
7034 $DBversion = "3.13.00.007";
7035 if ( CheckVersion($DBversion) ) {
7036 $dbh->do("UPDATE systempreferences SET variable='OpacHoldNotes' WHERE variable='OpacShowHoldNotes'");
7037 print "Upgrade to $DBversion done (Bug 10343: Rename OpacShowHoldNotes to OpacHoldNotes)\n";
7038 SetVersion($DBversion);
7041 $DBversion = "3.13.00.008";
7042 if ( CheckVersion($DBversion) ) {
7043 $dbh->do("
7044 CREATE TABLE IF NOT EXISTS borrower_files (
7045 file_id int(11) NOT NULL AUTO_INCREMENT,
7046 borrowernumber int(11) NOT NULL,
7047 file_name varchar(255) NOT NULL,
7048 file_type varchar(255) NOT NULL,
7049 file_description varchar(255) DEFAULT NULL,
7050 file_content longblob NOT NULL,
7051 date_uploaded timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
7052 PRIMARY KEY (file_id),
7053 KEY borrowernumber (borrowernumber),
7054 CONSTRAINT borrower_files_ibfk_1 FOREIGN KEY (borrowernumber) REFERENCES borrowers (borrowernumber) ON DELETE CASCADE ON UPDATE CASCADE
7055 ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
7057 print "Upgrade to $DBversion done (Bug 10443: make sure borrower_files table exists)\n";
7058 SetVersion($DBversion);
7061 $DBversion = "3.13.00.009";
7062 if ( CheckVersion($DBversion) ) {
7063 $dbh->do("ALTER TABLE aqorders DROP COLUMN biblioitemnumber");
7064 print "Upgrade to $DBversion done (Bug 9987 - Drop column aqorders.biblioitemnumber)\n";
7065 SetVersion($DBversion);
7068 $DBversion = "3.13.00.010";
7069 if ( CheckVersion($DBversion) ) {
7070 $dbh->do(
7072 INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES ('AcqWarnOnDuplicateInvoice','0','Warn librarians when they try to create a duplicate invoice', '', 'YesNo');
7075 print
7076 "Upgrade to $DBversion done (Bug 10366 - Add system preference to enabling warning librarian when invoice is duplicated)\n";
7077 SetVersion($DBversion);
7080 $DBversion = "3.13.00.011";
7081 if ( CheckVersion($DBversion) ) {
7082 $dbh->do("UPDATE language_rfc4646_to_iso639 SET iso639_2_code='ita' WHERE rfc4646_subtag='it'");
7083 print "Upgrade to $DBversion done (Bug 9519: Wrong language code for Italian in the advanced search language limitations)\n";
7084 SetVersion($DBversion);
7087 $DBversion = "3.13.00.012";
7088 if ( CheckVersion($DBversion) ) {
7089 $dbh->do("ALTER TABLE issuingrules MODIFY COLUMN overduefinescap decimal(28,6) DEFAULT NULL;");
7090 print "Upgrade to $DBversion done (Bug 10490: Correct datatype for overduefinescap in issuingrules)\n";
7091 SetVersion($DBversion);
7094 $DBversion ="3.13.00.013";
7095 if ( CheckVersion($DBversion) ) {
7096 $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');");
7097 print "Upgrade to $DBversion done (Bug 9576: add AllowTooManyOverride syspref to enable or disable issue limit confirmation)\n";
7098 SetVersion($DBversion);
7101 $DBversion = "3.13.00.014";
7102 if ( CheckVersion($DBversion) ) {
7103 $dbh->do("ALTER TABLE courses MODIFY COLUMN department varchar(80) DEFAULT NULL;");
7104 $dbh->do("ALTER TABLE courses MODIFY COLUMN term varchar(80) DEFAULT NULL;");
7105 print "Upgrade to $DBversion done (Bug 10604: correct width of courses.department and courses.term)\n";
7106 SetVersion($DBversion);
7109 $DBversion = "3.13.00.015";
7110 if ( CheckVersion($DBversion) ) {
7111 $dbh->do(
7112 "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')"
7114 print "Upgrade to $DBversion done (Bug 7494: Add itemBarcodeFallbackSearch syspref)\n";
7115 SetVersion($DBversion);
7118 $DBversion = "3.13.00.016";
7119 if ( CheckVersion($DBversion) ) {
7120 $dbh->do(q{
7121 ALTER TABLE items CHANGE wthdrawn withdrawn TINYINT( 1 ) NOT NULL DEFAULT '0'
7124 $dbh->do(q{
7125 ALTER TABLE deleteditems CHANGE wthdrawn withdrawn TINYINT( 1 ) NOT NULL DEFAULT '0'
7128 $dbh->do(q{
7129 UPDATE saved_sql SET savedsql = REPLACE(savedsql, 'wthdrawn', 'withdrawn')
7132 $dbh->do(q{
7133 UPDATE marc_subfield_structure SET kohafield = 'items.withdrawn' WHERE kohafield = 'items.wthdrawn'
7136 print "Upgrade to $DBversion done (Bug 10550 - Fix database typo wthdrawn)\n";
7137 SetVersion($DBversion);
7140 $DBversion = "3.13.00.017";
7141 if ( CheckVersion($DBversion) ) {
7142 $dbh->do(
7143 "INSERT IGNORE INTO systempreferences (variable,value,explanation,options,type) VALUES('OverDriveClientKey','','Client key for OverDrive integration','30','Free')"
7145 $dbh->do(
7146 "INSERT IGNORE INTO systempreferences (variable,value,explanation,options,type) VALUES('OverDriveClientSecret','','Client key for OverDrive integration','30','YesNo')"
7148 $dbh->do(
7149 "INSERT IGNORE INTO systempreferences (variable,value,explanation,options,type) VALUES('OverDriveLibraryID','','Library ID for OverDrive integration','','Integer')"
7151 print "Upgrade to $DBversion done (Bug 10320 - Show results from library's OverDrive collection in OPAC search)\n";
7152 SetVersion($DBversion);
7155 $DBversion = "3.13.00.018";
7156 if ( CheckVersion($DBversion) ) {
7157 $dbh->do(qq{DROP TABLE IF EXISTS aqorders_transfers;});
7158 $dbh->do(qq{
7159 CREATE TABLE aqorders_transfers (
7160 ordernumber_from int(11) NULL,
7161 ordernumber_to int(11) NULL,
7162 timestamp timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
7163 UNIQUE KEY ordernumber_from (ordernumber_from),
7164 UNIQUE KEY ordernumber_to (ordernumber_to),
7165 CONSTRAINT aqorders_transfers_ordernumber_from FOREIGN KEY (ordernumber_from) REFERENCES aqorders (ordernumber) ON DELETE SET NULL ON UPDATE CASCADE,
7166 CONSTRAINT aqorders_transfers_ordernumber_to FOREIGN KEY (ordernumber_to) REFERENCES aqorders (ordernumber) ON DELETE SET NULL ON UPDATE CASCADE
7167 ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
7169 print "Upgrade to $DBversion done (Bug 5349: Add aqorders_transfers table)\n";
7170 SetVersion($DBversion);
7173 $DBversion = "3.13.00.019";
7174 if ( CheckVersion($DBversion) ) {
7175 $dbh->do("ALTER TABLE itemtypes ADD COLUMN checkinmsg VARCHAR(255) AFTER summary;");
7176 $dbh->do("ALTER TABLE itemtypes ADD COLUMN checkinmsgtype CHAR(16) DEFAULT 'message' NOT NULL AFTER checkinmsg;");
7177 print "Upgrade to $DBversion done (Bug 10513 - Light up a warning/message when returning a chosen item type)\n";
7178 SetVersion($DBversion);
7181 $DBversion = "3.13.00.020";
7182 if ( CheckVersion($DBversion) ) {
7183 $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')");
7184 $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')");
7185 print "Upgrade to $DBversion done (Bug 7639: system preferences to forgive fines on lost items)\n";
7186 SetVersion($DBversion);
7189 $DBversion ="3.13.00.021";
7190 if ( CheckVersion($DBversion) ) {
7191 $dbh->do("INSERT IGNORE INTO systempreferences (variable,value,explanation,options,type) VALUES('ConfirmFutureHolds','0','Number of days for confirming future holds','','Integer');");
7192 print "Upgrade to $DBversion done (Bug 9761: Add ConfirmFutureHolds pref)\n";
7193 SetVersion($DBversion);
7196 $DBversion = "3.13.00.022";
7197 if ( CheckVersion($DBversion) ) {
7198 $dbh->do("DELETE from auth_tag_structure WHERE tagfield IN ('68a','68b')");
7199 $dbh->do("DELETE from auth_subfield_structure WHERE tagfield IN ('68a','68b')");
7200 print "Upgrade to $DBversion done (Bug 10687 - Delete erroneous tags 68a and 68b on default MARC21 auth framework)\n";
7201 SetVersion($DBversion);
7204 $DBversion = "3.13.00.023";
7205 if ( CheckVersion($DBversion) ) {
7206 $dbh->do("ALTER TABLE borrowers CHANGE password password VARCHAR(60);");
7207 print "Upgrade to $DBversion done (Bug 9611 upgrading password storage system)\n";
7208 SetVersion($DBversion);
7211 $DBversion = "3.13.00.024";
7212 if ( CheckVersion($DBversion) ) {
7213 $dbh->do(q{ALTER TABLE z3950servers ADD COLUMN recordtype VARCHAR(45) NOT NULL DEFAULT 'biblio' AFTER description;});
7214 print "Upgrade to $DBversion done (Bug 10096 - Add a Z39.50 interface for authority searching)\n";
7217 $DBversion = "3.13.00.025";
7218 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
7219 $dbh->do("ALTER TABLE oai_sets_mappings ADD COLUMN operator varchar(8) NOT NULL default 'equal' AFTER marcsubfield;");
7220 print "Upgrade to $DBversion done (Bug 9295: OAI notequal: add operator column to OAI mappings table)\n";
7221 SetVersion ($DBversion);
7224 $DBversion = "3.13.00.026";
7225 if ( CheckVersion($DBversion) ) {
7226 $dbh->do(q|
7227 ALTER TABLE auth_subfield_structure ADD COLUMN defaultvalue TEXT DEFAULT NULL AFTER frameworkcode
7229 print "Upgrade to $DBversion done (Bug 10602: Add the column auth_subfield_structure.defaultvalue)\n";
7230 SetVersion($DBversion);
7233 $DBversion = "3.13.00.027";
7234 if ( CheckVersion($DBversion) ) {
7235 $dbh->do("INSERT INTO systempreferences (variable,value,options,explanation,type) VALUES ('AllowOfflineCirculation','0','','If on, enables HTML5 offline circulation functionality.','YesNo')");
7236 print "Upgrade to $DBversion done (Bug 10240: Add syspref AllowOfflineCirculation)\n";
7237 SetVersion ($DBversion);
7240 $DBversion = "3.13.00.028";
7241 if ( CheckVersion($DBversion) ) {
7242 $dbh->do(q{
7243 ALTER TABLE export_format ADD type VARCHAR(255) DEFAULT 'marc' AFTER encoding
7245 $dbh->do(q{
7246 ALTER TABLE export_format CHANGE marcfields content mediumtext NOT NULL
7248 print "Upgrade to $DBversion done (Bug 10853: Add new field export_format.type and rename export_format.marcfields with export_format.content)\n";
7249 SetVersion($DBversion);
7252 $DBversion = "3.13.00.029";
7253 if ( CheckVersion($DBversion) ) {
7254 $dbh->do(q{
7255 INSERT IGNORE INTO export_format( profile, description, content, csv_separator, type )
7256 VALUES ( "issues to claim", "Default CSV export for serial issue claims",
7257 "SUPPLIER=aqbooksellers.name|TITLE=subscription.title|ISSUE NUMBER=serial.serialseq|LATE SINCE=serial.planneddate",
7258 ",", "sql" )
7260 print "Upgrade to $DBversion done (Bug 10854: Add the default CSV profile for claiming issues)\n";
7261 SetVersion($DBversion);
7264 $DBversion = "3.13.00.030";
7265 if ( CheckVersion($DBversion) ) {
7266 $dbh->do(qq{
7267 DELETE FROM patronimage WHERE NOT EXISTS (SELECT * FROM borrowers WHERE borrowers.cardnumber = patronimage.cardnumber)
7270 $dbh->do(qq{
7271 ALTER TABLE patronimage ADD borrowernumber INT( 11 ) NULL FIRST
7274 $dbh->{AutoCommit} = 0;
7275 $dbh->{RaiseError} = 1;
7277 eval {
7278 $dbh->do(qq{
7279 UPDATE patronimage LEFT JOIN borrowers USING ( cardnumber ) SET patronimage.borrowernumber = borrowers.borrowernumber
7281 $dbh->commit();
7284 if ($@) {
7285 print "Upgrade to $DBversion done (Bug 10636 - patronimage should have borrowernumber as PK, not cardnumber) failed! Transaction aborted because $@\n";
7286 eval { $dbh->rollback };
7288 else {
7289 $dbh->do(qq{
7290 ALTER TABLE patronimage DROP FOREIGN KEY patronimage_fk1
7292 $dbh->do(qq{
7293 ALTER TABLE patronimage DROP PRIMARY KEY, ADD PRIMARY KEY( borrowernumber )
7295 $dbh->do(qq{
7296 ALTER TABLE patronimage DROP cardnumber
7298 $dbh->do(qq{
7299 ALTER TABLE patronimage ADD FOREIGN KEY ( borrowernumber ) REFERENCES borrowers ( borrowernumber ) ON DELETE CASCADE ON UPDATE CASCADE
7302 print "Upgrade to $DBversion done (Bug 10636 - patronimage should have borrowernumber as PK, not cardnumber)\n";
7303 SetVersion($DBversion);
7306 $dbh->{AutoCommit} = 1;
7307 $dbh->{RaiseError} = 0;
7310 $DBversion = "3.13.00.031";
7311 if ( CheckVersion($DBversion) ) {
7313 $dbh->do(q{
7314 CREATE TABLE IF NOT EXISTS `patron_lists` (
7315 patron_list_id int(11) NOT NULL AUTO_INCREMENT,
7316 name varchar(255) CHARACTER SET utf8 NOT NULL,
7317 owner int(11) NOT NULL,
7318 PRIMARY KEY (patron_list_id),
7319 KEY owner (owner)
7320 ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
7323 $dbh->do(q{
7324 ALTER TABLE `patron_lists`
7325 ADD CONSTRAINT patron_lists_ibfk_1 FOREIGN KEY (`owner`) REFERENCES borrowers (borrowernumber) ON DELETE CASCADE ON UPDATE CASCADE;
7328 $dbh->do(q{
7329 CREATE TABLE patron_list_patrons (
7330 patron_list_patron_id int(11) NOT NULL AUTO_INCREMENT,
7331 patron_list_id int(11) NOT NULL,
7332 borrowernumber int(11) NOT NULL,
7333 PRIMARY KEY (patron_list_patron_id),
7334 KEY patron_list_id (patron_list_id),
7335 KEY borrowernumber (borrowernumber)
7336 ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
7339 $dbh->do(q{
7340 ALTER TABLE `patron_list_patrons`
7341 ADD CONSTRAINT patron_list_patrons_ibfk_1 FOREIGN KEY (patron_list_id) REFERENCES patron_lists (patron_list_id) ON DELETE CASCADE ON UPDATE CASCADE,
7342 ADD CONSTRAINT patron_list_patrons_ibfk_2 FOREIGN KEY (borrowernumber) REFERENCES borrowers (borrowernumber) ON DELETE CASCADE ON UPDATE CASCADE;
7345 $dbh->do(q{
7346 INSERT INTO permissions (module_bit, code, description) VALUES
7347 (13, 'manage_patron_lists', 'Add, edit and delete patron lists and their contents')
7350 print "Upgrade to $DBversion done (Bug 10565 - Add a 'Patron List' feature for storing and manipulating collections of patrons)\n";
7351 SetVersion($DBversion);
7354 $DBversion = "3.13.00.032";
7355 if ( CheckVersion($DBversion) ) {
7356 $dbh->do("ALTER TABLE aqorders ADD COLUMN orderstatus varchar(16) DEFAULT 'new' AFTER parent_ordernumber");
7357 $dbh->do("UPDATE aqorders SET orderstatus='ordered' WHERE basketno IN (SELECT basketno FROM aqbasket WHERE closedate IS NOT NULL)");
7358 $dbh->do(q{
7359 UPDATE aqorders SET orderstatus='partial'
7360 WHERE quantity > quantityreceived
7361 AND quantityreceived > 0
7362 AND ordernumber IN (
7363 SELECT parent_ordernumber
7364 FROM (
7365 SELECT DISTINCT(parent_ordernumber)
7366 FROM aqorders
7367 WHERE ordernumber != parent_ordernumber
7368 ) AS aq
7370 AND basketno IN (SELECT basketno FROM aqbasket WHERE closedate IS NOT NULL)
7372 $dbh->do("UPDATE aqorders SET orderstatus='complete' WHERE quantity=quantityreceived");
7373 $dbh->do("UPDATE aqorders SET orderstatus='cancelled' WHERE datecancellationprinted IS NOT NULL");
7374 print "Upgrade to $DBversion done (Bug 5336: Add the new column aqorders.orderstatus)\n";
7375 SetVersion($DBversion);
7378 $DBversion = "3.13.00.033";
7379 if ( CheckVersion($DBversion) ) {
7380 $dbh->do(qq|
7381 DROP TABLE IF EXISTS subscription_frequencies
7383 $dbh->do(qq|
7384 CREATE TABLE subscription_frequencies (
7385 id INTEGER NOT NULL AUTO_INCREMENT,
7386 description TEXT NOT NULL,
7387 displayorder INT DEFAULT NULL,
7388 unit ENUM('day','week','month','year') DEFAULT NULL,
7389 unitsperissue INTEGER NOT NULL DEFAULT '1',
7390 issuesperunit INTEGER NOT NULL DEFAULT '1',
7391 PRIMARY KEY (id)
7392 ) ENGINE=InnoDB DEFAULT CHARSET=utf8
7395 $dbh->do(qq|
7396 DROP TABLE IF EXISTS subscription_numberpatterns
7398 $dbh->do(qq|
7399 CREATE TABLE subscription_numberpatterns (
7400 id INTEGER NOT NULL AUTO_INCREMENT,
7401 label VARCHAR(255) NOT NULL,
7402 displayorder INTEGER DEFAULT NULL,
7403 description TEXT NOT NULL,
7404 numberingmethod VARCHAR(255) NOT NULL,
7405 label1 VARCHAR(255) DEFAULT NULL,
7406 add1 INTEGER DEFAULT NULL,
7407 every1 INTEGER DEFAULT NULL,
7408 whenmorethan1 INTEGER DEFAULT NULL,
7409 setto1 INTEGER DEFAULT NULL,
7410 numbering1 VARCHAR(255) DEFAULT NULL,
7411 label2 VARCHAR(255) DEFAULT NULL,
7412 add2 INTEGER DEFAULT NULL,
7413 every2 INTEGER DEFAULT NULL,
7414 whenmorethan2 INTEGER DEFAULT NULL,
7415 setto2 INTEGER DEFAULT NULL,
7416 numbering2 VARCHAR(255) DEFAULT NULL,
7417 label3 VARCHAR(255) DEFAULT NULL,
7418 add3 INTEGER DEFAULT NULL,
7419 every3 INTEGER DEFAULT NULL,
7420 whenmorethan3 INTEGER DEFAULT NULL,
7421 setto3 INTEGER DEFAULT NULL,
7422 numbering3 VARCHAR(255) DEFAULT NULL,
7423 PRIMARY KEY (id)
7424 ) ENGINE=InnoDB DEFAULT CHARSET=utf8
7427 $dbh->do(qq|
7428 INSERT INTO subscription_frequencies (description, unit, unitsperissue, issuesperunit, displayorder)
7429 VALUES
7430 ('2/day', 'day', 1, 2, 1),
7431 ('1/day', 'day', 1, 1, 2),
7432 ('3/week', 'week', 1, 3, 3),
7433 ('1/week', 'week', 1, 1, 4),
7434 ('1/2 weeks', 'week', 2, 1, 5),
7435 ('1/3 weeks', 'week', 3, 1, 6),
7436 ('1/month', 'month', 1, 1, 7),
7437 ('1/2 months', 'month', 2, 1, 8),
7438 ('1/3 months', 'month', 3, 1, 9),
7439 ('2/year', 'month', 6, 1, 10),
7440 ('1/year', 'year', 1, 1, 11),
7441 ('1/2 year', 'year', 2, 1, 12),
7442 ('Irregular', NULL, 1, 1, 13)
7445 # Used to link existing subscription to newly created frequencies
7446 my $frequencies_mapping = { # keys are old frequency numbers, values are the new ones
7447 1 => 2, # daily (n/week)
7448 2 => 4, # 1/week
7449 3 => 5, # 1/2 weeks
7450 4 => 6, # 1/3 weeks
7451 5 => 7, # 1/month
7452 6 => 8, # 1/2 months (6/year)
7453 7 => 9, # 1/3 months (1/quarter)
7454 8 => 9, # 1/quarter (seasonal)
7455 9 => 10, # 2/year
7456 10 => 11, # 1/year
7457 11 => 12, # 1/2 years
7458 12 => 1, # 2/day
7459 16 => 13, # Without periodicity
7460 32 => 13, # Irregular
7461 48 => 13 # Unknown
7464 $dbh->do(qq|
7465 INSERT INTO subscription_numberpatterns
7466 (label, displayorder, description, numberingmethod,
7467 label1, add1, every1, whenmorethan1, setto1, numbering1,
7468 label2, add2, every2, whenmorethan2, setto2, numbering2,
7469 label3, add3, every3, whenmorethan3, setto3, numbering3)
7470 VALUES
7471 ('Number', 1, 'Simple Numbering method', 'No.{X}',
7472 'Number', 1, 1, 99999, 1, NULL,
7473 NULL, NULL, NULL, NULL, NULL, NULL,
7474 NULL, NULL, NULL, NULL, NULL, NULL),
7476 ('Volume, Number, Issue', 2, 'Volume Number Issue 1', 'Vol.{X}, Number {Y}, Issue {Z}',
7477 'Volume', 1, 48, 99999, 1, NULL,
7478 'Number', 1, 4, 12, 1, NULL,
7479 'Issue', 1, 1, 4, 1, NULL),
7481 ('Volume, Number', 3, 'Volume Number 1', 'Vol {X}, No {Y}',
7482 'Volume', 1, 12, 99999, 1, NULL,
7483 'Number', 1, 1, 12, 1, NULL,
7484 NULL, NULL, NULL, NULL, NULL, NULL),
7486 ('Seasonal', 4, 'Season Year', '{X} {Y}',
7487 'Season', 1, 1, 3, 0, 'season',
7488 'Year', 1, 4, 99999, 1, NULL,
7489 NULL, NULL, NULL, NULL, NULL, NULL)
7492 $dbh->do(qq|
7493 ALTER TABLE subscription
7494 MODIFY COLUMN numberpattern INTEGER DEFAULT NULL,
7495 MODIFY COLUMN periodicity INTEGER DEFAULT NULL
7498 # Update existing subscriptions
7500 my $query = qq|
7501 SELECT subscriptionid, periodicity, numberingmethod,
7502 add1, every1, whenmorethan1, setto1,
7503 add2, every2, whenmorethan2, setto2,
7504 add3, every3, whenmorethan3, setto3
7505 FROM subscription
7506 ORDER BY subscriptionid
7508 my $sth = $dbh->prepare($query);
7509 $sth->execute;
7510 my $insert_numberpatterns_sth = $dbh->prepare(qq|
7511 INSERT INTO subscription_numberpatterns
7512 (label, displayorder, description, numberingmethod,
7513 label1, add1, every1, whenmorethan1, setto1, numbering1,
7514 label2, add2, every2, whenmorethan2, setto2, numbering2,
7515 label3, add3, every3, whenmorethan3, setto3, numbering3)
7516 VALUES
7517 (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
7519 my $check_numberpatterns_sth = $dbh->prepare(qq|
7520 SELECT * FROM subscription_numberpatterns
7521 WHERE (add1 = ? OR (add1 IS NULL AND ? IS NULL)) AND (add2 = ? OR (add2 IS NULL AND ? IS NULL))
7522 AND (add3 = ? OR (add3 IS NULL AND ? IS NULL)) AND (every1 = ? OR (every1 IS NULL AND ? IS NULL))
7523 AND (every2 = ? OR (every2 IS NULL AND ? IS NULL)) AND (every3 = ? OR (every3 IS NULL AND ? IS NULL))
7524 AND (whenmorethan1 = ? OR (whenmorethan1 IS NULL AND ? IS NULL)) AND (whenmorethan2 = ? OR (whenmorethan2 IS NULL AND ? IS NULL))
7525 AND (whenmorethan3 = ? OR (whenmorethan3 IS NULL AND ? IS NULL)) AND (setto1 = ? OR (setto1 IS NULL AND ? IS NULL))
7526 AND (setto2 = ? OR (setto2 IS NULL AND ? IS NULL)) AND (setto3 = ? OR (setto3 IS NULL AND ? IS NULL))
7527 AND (numberingmethod = ? OR (numberingmethod IS NULL AND ? IS NULL))
7528 LIMIT 1
7530 my $update_subscription_sth = $dbh->prepare(qq|
7531 UPDATE subscription
7532 SET numberpattern = ?,
7533 periodicity = ?
7534 WHERE subscriptionid = ?
7537 my $i = 1;
7538 while(my $sub = $sth->fetchrow_hashref) {
7539 $check_numberpatterns_sth->execute(
7540 $sub->{add1}, $sub->{add1}, $sub->{add2}, $sub->{add2}, $sub->{add3}, $sub->{add3},
7541 $sub->{every1}, $sub->{every1}, $sub->{every2}, $sub->{every2}, $sub->{every3}, $sub->{every3},
7542 $sub->{whenmorethan1}, $sub->{whenmorethan1}, $sub->{whenmorethan2}, $sub->{whenmorethan2},
7543 $sub->{whenmorethan3}, $sub->{whenmorethan3}, $sub->{setto1}, $sub->{setto1}, $sub->{setto2},
7544 $sub->{setto2}, $sub->{setto3}, $sub->{setto3}, $sub->{numberingmethod}, $sub->{numberingmethod}
7546 my $p = $check_numberpatterns_sth->fetchrow_hashref;
7547 if (defined $p) {
7548 # Pattern already exists, link to it
7549 $update_subscription_sth->execute($p->{id},
7550 $frequencies_mapping->{$sub->{periodicity}},
7551 $sub->{subscriptionid});
7552 } else {
7553 # Create a new numbering pattern for this subscription
7554 my $ok = $insert_numberpatterns_sth->execute(
7555 "Backup pattern $i", 4+$i, "Automatically created pattern by updatedatabase", $sub->{numberingmethod},
7556 "X", $sub->{add1}, $sub->{every1}, $sub->{whenmorethan1}, $sub->{setto1}, undef,
7557 "Y", $sub->{add2}, $sub->{every2}, $sub->{whenmorethan2}, $sub->{setto2}, undef,
7558 "Z", $sub->{add3}, $sub->{every3}, $sub->{whenmorethan3}, $sub->{setto3}, undef
7560 if($ok) {
7561 my $id = $dbh->last_insert_id(undef, undef, 'subscription_numberpatterns', undef);
7562 # Link to subscription_numberpatterns and subscription_frequencies
7563 $update_subscription_sth->execute($id,
7564 $frequencies_mapping->{$sub->{periodicity}},
7565 $sub->{subscriptionid});
7567 $i++;
7571 # Remove now useless columns
7572 $dbh->do(qq|
7573 ALTER TABLE subscription
7574 DROP COLUMN numberingmethod,
7575 DROP COLUMN add1,
7576 DROP COLUMN every1,
7577 DROP COLUMN whenmorethan1,
7578 DROP COLUMN setto1,
7579 DROP COLUMN add2,
7580 DROP COLUMN every2,
7581 DROP COLUMN whenmorethan2,
7582 DROP COLUMN setto2,
7583 DROP COLUMN add3,
7584 DROP COLUMN every3,
7585 DROP COLUMN whenmorethan3,
7586 DROP COLUMN setto3,
7587 DROP COLUMN dow,
7588 DROP COLUMN issuesatonce,
7589 DROP COLUMN hemisphere,
7590 ADD COLUMN countissuesperunit INTEGER NOT NULL DEFAULT 1 AFTER periodicity,
7591 ADD COLUMN skip_serialseq BOOLEAN NOT NULL DEFAULT 0 AFTER irregularity,
7592 ADD COLUMN locale VARCHAR(80) DEFAULT NULL AFTER numberpattern,
7593 ADD CONSTRAINT subscription_ibfk_1 FOREIGN KEY (periodicity) REFERENCES subscription_frequencies (id) ON DELETE SET NULL ON UPDATE CASCADE,
7594 ADD CONSTRAINT subscription_ibfk_2 FOREIGN KEY (numberpattern) REFERENCES subscription_numberpatterns (id) ON DELETE SET NULL ON UPDATE CASCADE
7597 # Set firstacquidate if not already set (firstacquidate is now mandatory)
7598 my $get_first_planneddate_sth = $dbh->prepare(qq|
7599 SELECT planneddate
7600 FROM serial
7601 WHERE subscriptionid = ?
7602 ORDER BY serialid
7603 LIMIT 1
7605 my $update_firstacquidate_sth = $dbh->prepare(qq|
7606 UPDATE subscription
7607 SET firstacquidate = ?
7608 WHERE subscriptionid = ?
7610 my $get_subscriptions_sth = $dbh->prepare(qq|
7611 SELECT subscriptionid, startdate
7612 FROM subscription
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);
7623 } else {
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) ) {
7635 $dbh->do("
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) ) {
7647 $dbh->do(q{
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',
7653 `comment` text,
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
7665 $dbh->do(q{
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
7669 $dbh->do(q{
7670 INSERT INTO borrower_debarments ( borrowernumber, comment ) SELECT borrowernumber, debarredcomment FROM borrowers WHERE debarred = '9999-12-31'
7673 $dbh->do(q{
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) ) {
7684 $dbh->do(qq{
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)
7695 $dbh->do("
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) ) {
7711 $dbh->do("
7712 ALTER TABLE aqbasket ADD branch varchar(10) default NULL
7714 $dbh->do("
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
7720 $dbh->do("
7721 DROP TABLE IF EXISTS aqbasketusers
7723 $dbh->do("
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;
7732 $dbh->do("
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,
7746 name text NOT NULL,
7747 PRIMARY KEY (template_id)
7748 ) ENGINE=InnoDB DEFAULT CHARSET=utf8;"
7751 $dbh->do("
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',
7772 description text,
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)) {
7786 $dbh->do(q{
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) ) {
7836 $dbh->do(q{
7837 UPDATE accountlines
7838 SET description = ''
7839 WHERE description IN (
7840 ' New Card',
7841 ' Fine',
7842 ' Sundry',
7843 'Writeoff',
7844 ' Account Management fee',
7845 'Payment,thanks', 'Payment,thanks - ',
7846 ' Lost Item'
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' ) {
7856 $dbh->do(qq{
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);
7869 $dbh->do(qq{
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)) {
7889 $dbh->do(q{
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) ) {
7911 $dbh->do(q{
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) ) {
7920 $dbh->do(q{
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) ) {
7943 $dbh->do(q{
7944 INSERT INTO permissions (module_bit, code, description) VALUES ( 1, 'force_checkout', 'Force checkout if a limitation exists')
7946 $dbh->do(q{
7947 INSERT INTO permissions (module_bit, code, description) VALUES ( 1, 'manage_restrictions', 'Manage restrictions for accounts')
7949 $dbh->do(q{
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)
7956 $dbh->do(q{
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)) {
7970 $dbh->do(q{
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"
7976 $dbh->do(q{
7977 UPDATE systempreferences
7978 SET value = ''
7979 WHERE variable = "AcqItemSetSubfieldsWhenReceived"
7980 AND value = "0"
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)) {
8011 $dbh->do(q{
8012 UPDATE systempreferences
8013 SET explanation = 'Define the contents of UNIMARC authority control field 100 position 08-35'
8014 WHERE variable = "UNIMARCAuthorityField100"
8016 $dbh->do(q{
8017 UPDATE systempreferences
8018 SET explanation = 'Define the contents of MARC21 authority control field 008 position 06-39'
8019 WHERE variable = "MARCAuthorityControlField008"
8021 $dbh->do(q{
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;
8035 eval {
8036 $dbh->selectcol_arrayref(q|SELECT COUNT(*) FROM roadtype|);
8038 unless ( $@ ) {
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
8042 FROM roadtype;
8045 my $rt_deleted = $dbh->do(q|
8046 DELETE FROM roadtype
8049 if ( $av_added == $rt_deleted or $rt_deleted eq "0E0" ) {
8050 $dbh->do(q|
8051 DROP TABLE roadtype;
8053 $dbh->commit;
8054 print "Upgrade to $DBversion done (Bug 7372: Move road types from the roadtype table to the ROADTYPE authorised values)\n";
8055 SetVersion($DBversion);
8056 } else {
8057 print "Upgrade to $DBversion failed (Bug 7372: Move road types from the roadtype table to the ROADTYPE authorised values.\nTransaction aborted because $@\n)";
8058 $dbh->rollback;
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) ) {
8074 $dbh->do(q|
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)) {
8083 $dbh->do(q{
8084 ALTER TABLE `action_logs`
8085 DROP KEY timestamp,
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)) {
8099 $dbh->do(q|
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) ) {
8108 $dbh->do("
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) ) {
8118 $dbh->do(q{
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) ) {
8127 $dbh->do(q{
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) ) {
8136 $dbh->do(q{
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)) {
8145 $dbh->do(q{
8146 ALTER TABLE opac_news ADD branchcode varchar(10) DEFAULT NULL
8147 AFTER idnew,
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)) {
8159 $dbh->do(q{
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) ) {
8168 $dbh->do(q{
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)) {
8177 $dbh->do(q|
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
8217 $dbh->do("
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.
8225 <<shareurl>>
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.
8229 Thank you.
8231 Your library.'
8232 )");
8233 $dbh->do("
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.
8239 Thank you.
8241 Your library.'
8242 )");
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) ) {
8249 $dbh->do(q{
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)) {
8260 $dbh->do(q{
8261 ALTER TABLE itemtypes ADD sip_media_type VARCHAR( 3 ) DEFAULT NULL AFTER checkinmsgtype
8263 $dbh->do(q{
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) ) {
8283 $dbh->do(q{
8284 INSERT INTO systempreferences (
8285 variable,
8286 value,
8287 options,
8288 explanation,
8289 type
8291 VALUES (
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) ) {
8302 $dbh->do( q{
8303 ALTER TABLE letter ADD COLUMN message_transport_type VARCHAR(20) NOT NULL DEFAULT 'email' AFTER content
8304 } );
8306 $dbh->do( q{
8307 ALTER TABLE letter ADD CONSTRAINT message_transport_type_fk FOREIGN KEY (message_transport_type) REFERENCES message_transport_types(message_transport_type);
8308 } );
8310 $dbh->do( q{
8311 ALTER TABLE letter DROP PRIMARY KEY, ADD PRIMARY KEY (`module`,`code`,`branchcode`, message_transport_type);
8312 } );
8314 $dbh->do( q{
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',
8321 PRIMARY KEY (id),
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;
8325 } );
8327 my $sth = $dbh->prepare( q{
8328 SELECT * FROM overduerules;
8329 } );
8331 $sth->execute;
8332 my $sth_insert_mtt = $dbh->prepare( q{
8333 INSERT INTO overduerules_transport_types (branchcode, categorycode, letternumber, message_transport_type) VALUES ( ?, ?, ?, ? )
8334 } );
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) ) {
8352 $dbh->do(q|
8353 UPDATE message_transports SET letter_code='HOLD' WHERE letter_code='HOLD_PHONE' OR letter_code='HOLD_PRINT'
8355 $dbh->do(q|
8356 UPDATE letter SET code='HOLD', message_transport_type='print' WHERE code='HOLD_PRINT'
8358 $dbh->do(q|
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"
8370 $dbh->do(q|
8371 UPDATE letter
8372 SET code="HOLD",
8373 message_transport_type="phone",
8374 name= ?
8375 WHERE code="HOLD_PHONE"
8376 |, {}, $name);
8378 ( $name ) = $dbh->selectrow_array(q|
8379 SELECT name FROM letter WHERE code="PREDUE"
8381 $dbh->do(q|
8382 UPDATE letter
8383 SET code="PREDUE",
8384 message_transport_type="phone",
8385 name= ?
8386 WHERE code="PREDUE_PHONE"
8387 |, {}, $name);
8389 ( $name ) = $dbh->selectrow_array(q|
8390 SELECT name FROM letter WHERE code="OVERDUE"
8392 $dbh->do(q|
8393 UPDATE letter
8394 SET code="OVERDUE",
8395 message_transport_type="phone",
8396 name= ?
8397 WHERE code="OVERDUE_PHONE"
8398 |, {}, $name);
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) ) {
8406 $dbh->do(q{
8407 INSERT INTO systempreferences
8408 (variable,value,explanation,options,type)
8409 VALUES
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) ) {
8432 $dbh->do("
8433 INSERT INTO systempreferences (variable,value,explanation,options,type)
8434 VALUES (
8435 'BlockExpiredPatronOpacActions',
8436 '0',
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',
8438 NULL,
8439 'YesNo'
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) ) {
8449 $dbh->do(q|
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) ) {
8458 $dbh->do(q|
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) ) {
8502 $dbh->do("
8503 INSERT INTO systempreferences (
8504 variable,
8505 value,
8506 explanation,
8507 type
8508 ) VALUES (
8509 'AggressiveMatchOnISBN',
8510 '0',
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',
8512 'YesNo'
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')");
8554 $dbh->do("
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)) {
8589 $dbh->do(q|
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) ) {
8614 $dbh->do(q|
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) ) {
8623 $dbh->do(q{
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) ) {
8666 $dbh->do("
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) ) {
8676 $dbh->do(q{
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,
8701 notes mediumtext,
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,
8707 PRIMARY KEY (id),
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)
8733 $dbh->do(q{
8734 UPDATE z3950servers set recordtype='biblio' WHERE recordtype NOT IN ('authority','biblio')
8736 # Correct invalid server types (should also be very exceptional)
8737 $dbh->do(q{
8738 UPDATE z3950servers set type='zed' WHERE type <> 'zed'
8740 # Adjust table
8741 $dbh->do(q{
8742 ALTER TABLE z3950servers
8743 DROP COLUMN icon,
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|
8792 SELECT count(*)
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";
8797 if( $temp[0] ) {
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) ) {
8805 $dbh->do(q{
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)) {
8814 $dbh->do(q{
8815 ALTER TABLE issues ADD auto_renew BOOLEAN default FALSE AFTER renewals
8817 $dbh->do(q{
8818 ALTER TABLE old_issues ADD auto_renew BOOLEAN default FALSE AFTER renewals
8820 $dbh->do(q{
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) ) {
8829 $dbh->do(qq{
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) ) {
8848 $dbh->do(q{
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) ) {
8857 $dbh->do(q{
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) ) {
8876 $dbh->do(
8878 INSERT INTO systempreferences (variable, value, options, explanation, type )
8879 VALUES
8880 ('UsageStatsCountry', '', NULL, 'The country where your library is located, to be shown on the Hea Koha community website', 'YesNo'),
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) ) {
8901 $dbh->do(
8902 "INSERT INTO systempreferences (variable,value,options,explanation,type) VALUES ('ReplytoDefault', '', NULL, 'The default email address to be set as replyto.', 'Free')"
8904 $dbh->do(
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) ) {
8915 $dbh->do(q{
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) ) {
8925 $dbh->do(q|
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) ) {
8935 $dbh->do(q|
8936 ALTER TABLE serial ADD COLUMN claims_count INT(11) DEFAULT 0 after claimdate
8938 $dbh->do(q|
8939 UPDATE serial
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) ) {
9001 $dbh->do("
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) ) {
9011 $dbh->do(q{
9012 INSERT IGNORE INTO systempreferences
9013 (variable,value,explanation,options,type)
9014 VALUES('OnSiteCheckouts','0','Enable/Disable the on-site checkouts feature','','YesNo');
9016 $dbh->do(q{
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');
9021 $dbh->do(q{
9022 ALTER TABLE issues ADD COLUMN onsite_checkout INT(1) NOT NULL DEFAULT 0 AFTER issuedate;
9024 $dbh->do(q{
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) ) {
9033 $dbh->do(q{
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) ) {
9045 $dbh->do(q{
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,
9052 PRIMARY KEY(name),
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) ) {
9064 $dbh->do(q{
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) ) {
9076 $dbh->do(q|
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) ) {
9467 $dbh->do(q|
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) ) {
9484 $dbh->do(q{
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');
9488 $dbh->do(q{
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) ) {
9497 $dbh->do(q{
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)');
9501 $dbh->do(q{
9502 INSERT INTO permissions (module_bit, code, description) VALUES ('9', 'delete_all_items', 'Delete all items at once');
9505 $dbh->do(q{
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.
9510 $dbh->do(q{
9511 INSERT INTO user_permissions (borrowernumber, module_bit, code) SELECT borrowernumber, module_bit, "delete_all_items" FROM user_permissions WHERE code="edit_items";
9514 # Add 2 new prefs
9515 $dbh->do(q{
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');
9519 $dbh->do(q{
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)) {
9529 $dbh->do(q{
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')");
9544 $dbh->do("
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) ) {
9564 $dbh->do(q{
9565 UPDATE systempreferences SET value = 'pubdate,itemtype,language,sorting,location' WHERE variable='OpacAdvSearchOptions'
9568 $dbh->do(q{
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) ) {
9593 $dbh->do(q{
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'
9618 my $deleted = 0;
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) ) {
9644 $dbh->do("
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) ) {
9658 $dbh->do(q|
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");
9669 if ( $count ) {
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)";
9673 } else {
9674 $dbh->do(q{
9675 ALTER TABLE borrowers
9676 DROP INDEX userid ,
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 ,
9688 $dbh->do(q{
9689 UPDATE systempreferences
9690 SET value = ?,
9691 type = 'multiple'
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)) {
9700 $dbh->do(q{
9701 ALTER TABLE authorised_values MODIFY COLUMN category VARCHAR(32) NOT NULL DEFAULT ''
9704 $dbh->do(q{
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' ) {
9723 $dbh->do(q|
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|);
9739 else {
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
9754 FROM aqbudgets
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";
9766 } else {
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|
9775 SELECT COUNT(*)
9776 FROM aqorders o
9777 WHERE NOT EXISTS (
9778 SELECT NULL
9779 FROM aqbudgets b
9780 WHERE b.budget_id = o.budget_id
9784 if ( $number_of_orders_not_linked->[0] > 0 ) {
9785 $dbh->do(q|
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 );
9789 $dbh->do(qq|
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 );
9793 $dbh->do(qq|
9794 UPDATE aqorders o
9795 SET budget_id = $budget_id
9796 WHERE NOT EXISTS (
9797 SELECT NULL
9798 FROM aqbudgets b
9799 WHERE b.budget_id = o.budget_id
9804 $dbh->do(q|
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) ) {
9815 $dbh->do(q|
9816 UPDATE suggestions s SET s.budgetid = NULL
9817 WHERE NOT EXISTS (
9818 SELECT NULL
9819 FROM aqbudgets b
9820 WHERE b.budget_id = s.budgetid
9824 $dbh->do(q|
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) ) {
9835 $dbh->do(q|
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) ) {
9845 $dbh->do(q|
9846 INSERT INTO userflags (bit, flag, flagdesc, defaulton) VALUES
9847 (20, 'lists', 'Lists', 0)
9849 $dbh->do(q|
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)) {
9859 $dbh->do(q{
9860 ALTER TABLE biblioitems MODIFY COLUMN marcxml longtext
9863 $dbh->do(q{
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) ) {
9873 $dbh->do(q|
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) ) {
9883 $dbh->do(q|
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;
9893 $dbh->do(q|
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) ) {
9903 $dbh->do(q|
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) {
9914 $dbh->do(q{
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 )
9923 FROM aqorders;
9924 }, { Slice => {} });
9926 my $update_orders_sth = $dbh->prepare(q{
9927 UPDATE aqorders
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', ?, ?)
9936 my $i = 3;
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 );
9941 $i++;
9943 print "Upgrade to $DBversion done (Bug 13380: Add the ORDER_CANCELLATION_REASON authorised value)\n";
9945 else {
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");
9960 } else {
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';
9974 else {
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) ) {
9990 $dbh->do(q|
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) ) {
9999 $dbh->do(q{
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')
10003 $dbh->do(q{
10004 INSERT IGNORE INTO systempreferences (variable, value, explanation, options, type)
10005 VALUES('CoceHost', NULL, 'Coce server URL', NULL,'Free')
10007 $dbh->do(q{
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) ) {
10017 $dbh->do(q|
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) ) {
10027 $dbh->do(q|
10028 ALTER TABLE issues DROP COLUMN issuingbranch
10030 $dbh->do(q|
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) ) {
10039 $dbh->do(q{
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) ) {
10048 $dbh->do(q|
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) ) {
10064 $dbh->do(q|
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' ) {
10075 $dbh->do(q{
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);
10080 $dbh->do(q{
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, '', '', '');
10091 $dbh->do(q{
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');
10096 $dbh->do(q{
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, '', '', '');
10127 $dbh->do(q{
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');
10132 $dbh->do(q{
10133 UPDATE IGNORE auth_subfield_structure SET liblibrarian = 'Relationship code', libopac = 'Relationship code'
10134 WHERE tagsubfield = '4' AND tagfield IN ('700','710');
10137 $dbh->do(q{
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, '');
10143 $dbh->do(q{
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);
10169 $dbh->do(q{
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) ) {
10189 eval {
10190 local $dbh->{PrintError} = 0;
10191 $dbh->do(q{
10192 ALTER TABLE issues DROP PRIMARY KEY
10196 $dbh->do(q{
10197 ALTER TABLE old_issues ADD issue_id INT( 11 ) NOT NULL AUTO_INCREMENT PRIMARY KEY FIRST
10200 $dbh->do(q{
10201 ALTER TABLE old_issues CHANGE issue_id issue_id INT( 11 ) NOT NULL
10204 $dbh->do(q{
10205 ALTER TABLE issues ADD issue_id INT( 11 ) NOT NULL AUTO_INCREMENT PRIMARY KEY FIRST
10208 $dbh->do(q{
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) {
10214 $max_issue_id++;
10215 $dbh->do(qq{
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) ) {
10226 $dbh->do(q|
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) ) {
10235 $dbh->do(q|
10236 UPDATE language_subtag_registry SET subtag = 'kn' WHERE subtag = 'ka' AND description = 'Kannada';
10238 $dbh->do(q|
10239 UPDATE language_rfc4646_to_iso639 SET rfc4646_subtag = 'kn' WHERE rfc4646_subtag = 'ka' AND iso639_2_code = 'kan';
10241 $dbh->do(q|
10242 UPDATE language_descriptions SET subtag = 'kn', lang = 'kn' WHERE subtag = 'ka' AND lang = 'ka' AND description = 'ಕನ್ನಡ';
10244 $dbh->do(q|
10245 UPDATE language_descriptions SET subtag = 'kn' WHERE subtag = 'ka' AND description = 'Kannada';
10247 $dbh->do(q|
10248 INSERT IGNORE INTO language_subtag_registry( subtag, type, description, added) VALUES ( 'ka', 'language', 'Georgian','2015-04-20');
10250 $dbh->do(q|
10251 DELETE FROM language_subtag_registry
10252 WHERE NOT id IN
10253 (SELECT id FROM
10254 (SELECT MIN(id) as id,subtag,type,description,added
10255 FROM language_subtag_registry
10256 GROUP BY subtag,type,description,added)
10257 AS subtable);
10259 $dbh->do(q|
10260 INSERT IGNORE INTO language_rfc4646_to_iso639(rfc4646_subtag,iso639_2_code) VALUES ( 'ka', 'geo');
10262 $dbh->do(q|
10263 DELETE FROM language_rfc4646_to_iso639
10264 WHERE NOT id IN
10265 (SELECT id FROM
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)
10269 AS subtable);
10271 $dbh->do(q|
10272 INSERT IGNORE INTO language_descriptions(subtag, type, lang, description) VALUES ( 'ka', 'language', 'ka', 'ქართული');
10274 $dbh->do(q|
10275 INSERT IGNORE INTO language_descriptions(subtag, type, lang, description) VALUES ( 'ka', 'language', 'en', 'Georgian');
10277 $dbh->do(q|
10278 INSERT IGNORE INTO language_descriptions(subtag, type, lang, description) VALUES ( 'ka', 'language', 'fr', 'Géorgien');
10280 $dbh->do(q|
10281 INSERT IGNORE INTO language_descriptions(subtag, type, lang, description) VALUES ( 'ka', 'language', 'de', 'Georgisch');
10283 $dbh->do(q|
10284 INSERT IGNORE INTO language_descriptions(subtag, type, lang, description) VALUES ( 'ka', 'language', 'es', 'Georgiano');
10286 $dbh->do(q|
10287 DELETE FROM language_descriptions
10288 WHERE NOT id IN
10289 (SELECT id FROM
10290 (SELECT MIN(id) as id,subtag,type,lang,description
10291 FROM language_descriptions GROUP BY subtag,type,lang,description)
10292 AS subtable);
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) ) {
10300 $dbh->do(q{
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) ) {
10310 $dbh->do(q|
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) ) {
10320 $dbh->do(q|
10321 ALTER TABLE auth_header
10322 CHANGE COLUMN datemodified modification_time TIMESTAMP NOT NULL default CURRENT_TIMESTAMP
10324 $dbh->do(q|
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) ) {
10334 $dbh->do(q|
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) ) {
10344 $dbh->do(q|
10345 INSERT IGNORE INTO systempreferences (variable,value,explanation,options,type) VALUES('useDischarge','','Allows librarians to discharge borrowers and borrowers to request a discharge','','YesNo')
10347 $dbh->do(q|
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.')
10351 $dbh->do(q|
10352 ALTER TABLE borrower_debarments CHANGE type type ENUM('SUSPENSION','OVERDUES','MANUAL','DISCHARGE') NOT NULL DEFAULT 'MANUAL'
10355 $dbh->do(q|
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) ) {
10371 $dbh->do(q|
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) ) {
10381 $dbh->do(q|
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) ) {
10391 $dbh->do(q|
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!)
10398 $dbh->do(q|
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) ) {
10414 $dbh->do(q|
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' ) ) {
10424 $dbh->do(q|
10425 ALTER TABLE suggestions ADD KEY status (STATUS)
10428 unless ( index_exists( 'suggestions', 'biblionumber' ) ) {
10429 $dbh->do(q|
10430 ALTER TABLE suggestions ADD KEY biblionumber (biblionumber)
10433 unless ( index_exists( 'suggestions', 'branchcode' ) ) {
10434 $dbh->do(q|
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) ) {
10444 $dbh->do(q{
10445 DELETE ass.*
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' ) ) {
10452 $dbh->do(q{
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) ) {
10466 $dbh->do(q|
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) ) {
10489 $dbh->do(q|
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) ) {
10498 $dbh->do(q|
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) ) {
10507 $dbh->do(q|
10508 INSERT IGNORE INTO language_subtag_registry( subtag, type, description, added)
10509 VALUES ( 'IN', 'region', 'India','2015-05-28');
10511 $dbh->do(q|
10512 INSERT IGNORE INTO language_descriptions(subtag, type, lang, description)
10513 VALUES ( 'IN', 'region', 'en', 'India');
10515 $dbh->do(q|
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>>',
10538 '<<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) ) {
10548 $dbh->do(q|
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)
10559 $dbh->do(q|
10560 UPDATE borrowers
10561 SET flags = flags - ( flags & (1<<7) )
10562 WHERE flags IS NOT NULL
10563 AND flags > 0
10565 $dbh->do(q|
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' ) ) {
10575 $dbh->do(q|
10576 ALTER TABLE aqbasket
10577 ADD KEY authorisedby (authorisedby)
10580 unless ( index_exists( 'aqbooksellers', 'name' ) ) {
10581 $dbh->do(q|
10582 ALTER TABLE aqbooksellers
10583 ADD KEY name (name(255))
10586 unless ( index_exists( 'aqbudgets', 'budget_parent_id' ) ) {
10587 $dbh->do(q|
10588 ALTER TABLE aqbudgets
10589 ADD KEY budget_parent_id (budget_parent_id)|);
10591 unless ( index_exists( 'aqbudgets', 'budget_code' ) ) {
10592 $dbh->do(q|
10593 ALTER TABLE aqbudgets
10594 ADD KEY budget_code (budget_code)|);
10596 unless ( index_exists( 'aqbudgets', 'budget_branchcode' ) ) {
10597 $dbh->do(q|
10598 ALTER TABLE aqbudgets
10599 ADD KEY budget_branchcode (budget_branchcode)|);
10601 unless ( index_exists( 'aqbudgets', 'budget_period_id' ) ) {
10602 $dbh->do(q|
10603 ALTER TABLE aqbudgets
10604 ADD KEY budget_period_id (budget_period_id)|);
10606 unless ( index_exists( 'aqbudgets', 'budget_owner_id' ) ) {
10607 $dbh->do(q|
10608 ALTER TABLE aqbudgets
10609 ADD KEY budget_owner_id (budget_owner_id)|);
10611 unless ( index_exists( 'aqbudgets_planning', 'budget_period_id' ) ) {
10612 $dbh->do(q|
10613 ALTER TABLE aqbudgets_planning
10614 ADD KEY budget_period_id (budget_period_id)|);
10616 unless ( index_exists( 'aqorders', 'parent_ordernumber' ) ) {
10617 $dbh->do(q|
10618 ALTER TABLE aqorders
10619 ADD KEY parent_ordernumber (parent_ordernumber)|);
10621 unless ( index_exists( 'aqorders', 'orderstatus' ) ) {
10622 $dbh->do(q|
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) ) {
10632 $dbh->do(q{
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) ) {
10642 $dbh->do(q|
10643 UPDATE aqorders SET orderstatus='cancelled'
10644 WHERE (datecancellationprinted IS NOT NULL OR
10645 datecancellationprinted<>'0000-00-00');
10647 print "Upgrade to $DBversion done (Bug 13993: Correct orderstatus for transferred orders)\n";
10648 SetVersion($DBversion);
10651 $DBversion = "3.21.00.010";
10652 if ( CheckVersion($DBversion) ) {
10653 $dbh->do(q|
10654 ALTER TABLE message_queue
10655 DROP message_id
10657 $dbh->do(q|
10658 ALTER TABLE message_queue
10659 ADD message_id INT( 11 ) NOT NULL AUTO_INCREMENT PRIMARY KEY FIRST
10661 print "Upgrade to $DBversion done (Bug 7793: redefine the field message_id as PRIMARY KEY of message_queue)\n";
10662 SetVersion ($DBversion);
10665 $DBversion = "3.21.00.011";
10666 if ( CheckVersion($DBversion) ) {
10667 $dbh->do(q{
10668 INSERT IGNORE INTO systempreferences (variable,value,options,explanation,type)
10669 VALUES ('OpacLangSelectorMode','footer','top|both|footer','Select the location to display the language selector','Choice')
10671 print "Upgrade to $DBversion done (Bug 14252: Make the OPAC language switcher available in the masthead navbar, footer, or both)\n";
10672 SetVersion ($DBversion);
10675 $DBversion = "3.21.00.012";
10676 if ( CheckVersion($DBversion) ) {
10677 $dbh->do(q|
10678 INSERT INTO letter (module, code, name, title, content, message_transport_type)
10679 VALUES
10680 ('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')
10682 print "Upgrade to $DBversion done (Bug 13014: Add the TO_PROCESS letter code)\n";
10683 SetVersion($DBversion);
10686 $DBversion = "3.21.00.013";
10687 if ( CheckVersion($DBversion) ) {
10688 my $msg;
10689 if ( C4::Context->preference('OPACPrivacy') ) {
10690 if ( my $anonymous_patron = C4::Context->preference('AnonymousPatron') ) {
10691 my $anonymous_patron_exists = $dbh->selectcol_arrayref(q|
10692 SELECT COUNT(*)
10693 FROM borrowers
10694 WHERE borrowernumber=?
10695 |, {}, $anonymous_patron);
10696 unless ( $anonymous_patron_exists->[0] ) {
10697 $msg = "Configuration WARNING: OPACPrivacy is set but AnonymousPatron is not linked to an existing patron";
10700 else {
10701 $msg = "Configuration WARNING: OPACPrivacy is set but AnonymousPatron is not";
10704 else {
10705 my $patrons_have_required_anonymity = $dbh->selectcol_arrayref(q|
10706 SELECT COUNT(*)
10707 FROM borrowers
10708 WHERE privacy = 2
10709 |, {} );
10710 if ( $patrons_have_required_anonymity->[0] ) {
10711 $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.";
10715 $msg //= "Privacy is correctly set";
10716 print "Upgrade to $DBversion done (Bug 9942: $msg)\n";
10717 SetVersion ($DBversion);
10720 $DBversion = "3.21.00.014";
10721 if ( CheckVersion($DBversion) ) {
10722 $dbh->do(q{
10723 INSERT IGNORE INTO systempreferences (variable,value,explanation,options,type)
10724 VALUES ('OAI-PMH:DeletedRecord','persistent','Koha\'s deletedbiblio table will never be deleted (persistent) or might be deleted (transient)','transient|persistent','Choice')
10727 if ( foreign_key_exists( 'oai_sets_biblios', 'oai_sets_biblios_ibfk_1' ) ) {
10728 $dbh->do(q|
10729 ALTER TABLE oai_sets_biblios DROP FOREIGN KEY oai_sets_biblios_ibfk_1
10732 print "Upgrade to $DBversion done (Bug 3206: OAI repository deleted record support)\n";
10733 SetVersion ($DBversion);
10736 $DBversion = "3.21.00.015";
10737 if ( CheckVersion($DBversion) ) {
10738 $dbh->do(q{
10739 UPDATE systempreferences SET value='0' WHERE variable='CalendarFirstDayOfWeek' AND value='Sunday';
10741 $dbh->do(q{
10742 UPDATE systempreferences SET value='1' WHERE variable='CalendarFirstDayOfWeek' AND value='Monday';
10744 $dbh->do(q{
10745 UPDATE systempreferences SET options='0|1|2|3|4|5|6' WHERE variable='CalendarFirstDayOfWeek';
10748 print "Upgrade to $DBversion done (Bug 12137: Extend functionality of CalendarFirstDayOfWeek to be any day)\n";
10749 SetVersion($DBversion);
10752 $DBversion = "3.21.00.016";
10753 if ( CheckVersion($DBversion) ) {
10754 my $rs = $schema->resultset('Systempreference');
10755 $rs->find_or_create(
10757 variable => 'DumpTemplateVarsIntranet',
10758 value => 0,
10759 explanation => 'If enabled, dump all Template Toolkit variable to a comment in the html source for the staff intranet.',
10760 type => 'YesNo',
10763 $rs->find_or_create(
10765 variable => 'DumpTemplateVarsOpac',
10766 value => 0,
10767 explanation => 'If enabled, dump all Template Toolkit variable to a comment in the html source for the opac.',
10768 type => 'YesNo',
10771 print "Upgrade to $DBversion done (Bug 13948: Add ability to dump template toolkit variables to html comment)\n";
10772 SetVersion($DBversion);
10775 $DBversion = "3.21.00.017";
10776 if ( CheckVersion($DBversion) ) {
10777 $dbh->do("
10778 CREATE TABLE uploaded_files (
10779 id int(11) NOT NULL AUTO_INCREMENT,
10780 hashvalue CHAR(40) NOT NULL,
10781 filename TEXT NOT NULL,
10782 dir TEXT NOT NULL,
10783 filesize int(11),
10784 dtcreated timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
10785 categorycode tinytext,
10786 owner int(11),
10787 PRIMARY KEY (id)
10788 ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci
10791 print "Upgrade to $DBversion done (Bug 6874: New cataloging plugin upload.pl)\n";
10792 print "This plugin comes with a new config variable (upload_path) and a new table (uploaded_files)\n";
10793 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";
10794 SetVersion($DBversion);
10797 $DBversion = "3.21.00.018";
10798 if ( CheckVersion($DBversion) ) {
10799 $dbh->do(q{
10800 INSERT IGNORE INTO systempreferences (variable,value,options,explanation,type)
10801 VALUES
10802 ('RestrictedPageLocalIPs','',NULL,'Beginning of IP addresses considered as local (comma separated ex: \"127.0.0,127.0.2\")','Free'),
10803 ('RestrictedPageContent','',NULL,'HTML content of the restricted page','TextArea'),
10804 ('RestrictedPageTitle','',NULL,'Title of the restricted page (breadcrumb and header)','Free')
10806 print "Upgrade to $DBversion done (Bug 13485: Add a page to display links to restricted sites)\n";
10807 SetVersion ($DBversion);
10810 $DBversion = "3.21.00.019";
10811 if ( CheckVersion($DBversion) ) {
10812 if ( column_exists( 'reserves', 'constrainttype' ) ) {
10813 $dbh->do(q{
10814 ALTER TABLE reserves DROP constrainttype
10816 $dbh->do(q{
10817 ALTER TABLE old_reserves DROP constrainttype
10820 $dbh->do(q{
10821 DROP TABLE IF EXISTS reserveconstraints
10823 print "Upgrade to $DBversion done (Bug 9809: Get rid of reserveconstraints)\n";
10824 SetVersion ($DBversion);
10827 $DBversion = "3.21.00.020";
10828 if ( CheckVersion($DBversion) ) {
10829 $dbh->do(q{
10830 INSERT IGNORE INTO `systempreferences` (`variable`, `value`, `options`, `explanation`, `type`)
10831 VALUES ('FeeOnChangePatronCategory','1','','If set, when a patron changes to a category with enrolment fee, a fee is charged','YesNo')
10833 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";
10834 SetVersion($DBversion);
10837 $DBversion = "3.21.00.021";
10838 if ( CheckVersion($DBversion) ) {
10839 $dbh->do(q{
10840 INSERT IGNORE INTO systempreferences (variable,value,explanation,options,type)
10841 VALUES ('UseWYSIWYGinSystemPreferences','0','','Show WYSIWYG editor when editing certain HTML system preferences.','YesNo')
10843 print "Upgrade to $DBversion done (Bug 11584: Add wysiwyg editor to system preferences dealing with HTML)\n";
10844 SetVersion($DBversion);
10847 $DBversion = "3.21.00.022";
10848 if ( CheckVersion($DBversion) ) {
10849 $dbh->do(q{
10850 DELETE cr.*
10851 FROM course_reserves AS cr
10852 LEFT JOIN course_items USING(ci_id)
10853 WHERE course_items.ci_id IS NULL
10856 my ($print_error) = $dbh->{PrintError};
10857 $dbh->{RaiseError} = 0;
10858 $dbh->{PrintError} = 0;
10859 if ( foreign_key_exists('course_reserves', 'course_reserves_ibfk_2') ) {
10860 $dbh->do(q{ALTER TABLE course_reserves DROP FOREIGN KEY course_reserves_ibfk_2});
10861 $dbh->do(q{ALTER TABLE course_reserves DROP INDEX course_reserves_ibfk_2});
10863 $dbh->{PrintError} = $print_error;
10865 $dbh->do(q{
10866 ALTER TABLE course_reserves
10867 ADD CONSTRAINT course_reserves_ibfk_2
10868 FOREIGN KEY (ci_id) REFERENCES course_items (ci_id)
10869 ON DELETE CASCADE ON UPDATE CASCADE
10871 print "Upgrade to $DBversion done (Bug 14205: Deleting an Item/Record does not remove link to course reserve)\n";
10872 SetVersion($DBversion);
10875 $DBversion = "3.21.00.023";
10876 if ( CheckVersion($DBversion) ) {
10877 $dbh->do(q{
10878 UPDATE borrowers SET debarred=NULL WHERE debarred='0000-00-00'
10880 $dbh->do(q{
10881 UPDATE borrowers SET dateexpiry=NULL where dateexpiry='0000-00-00'
10883 $dbh->do(q{
10884 UPDATE borrowers SET dateofbirth=NULL where dateofbirth='0000-00-00'
10886 $dbh->do(q{
10887 UPDATE borrowers SET dateenrolled=NULL where dateenrolled='0000-00-00'
10889 print "Upgrade to $DBversion done (Bug 14717: Prevent 0000-00-00 dates in patron data)\n";
10890 SetVersion($DBversion);
10893 $DBversion = "3.21.00.024";
10894 if ( CheckVersion($DBversion) ) {
10895 $dbh->do(q{
10896 ALTER TABLE marc_modification_template_actions
10897 MODIFY COLUMN action
10898 ENUM('delete_field','update_field','move_field','copy_field','copy_and_replace_field')
10899 NOT NULL
10901 print "Upgrade to $DBversion done (Bug 14098: Regression in Marc Modification Templates)\n";
10902 SetVersion($DBversion);
10905 $DBversion = "3.21.00.025";
10906 if ( CheckVersion($DBversion) ) {
10907 $dbh->do(q{
10908 INSERT IGNORE INTO systempreferences (variable,value,options,explanation,type)
10909 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')
10911 $dbh->do(q{
10912 INSERT IGNORE INTO systempreferences (variable,value,options,explanation,type)
10913 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')
10915 print "Upgrade to $DBversion done (Bug 12357: Enhancements to RIS and BibTeX exporting)\n";
10916 SetVersion($DBversion);
10919 $DBversion = "3.21.00.026";
10920 if ( CheckVersion($DBversion) ) {
10921 $dbh->do(q{
10922 UPDATE matchpoints
10923 SET search_index='issn'
10924 WHERE matcher_id IN (SELECT matcher_id FROM marc_matchers WHERE code = 'ISSN')
10926 print "Upgrade to $DBversion done (Bug 14472: Wrong ISSN search index in record matching rules)\n";
10927 SetVersion($DBversion);
10930 $DBversion = "3.21.00.027";
10931 if ( CheckVersion($DBversion) ) {
10932 $dbh->do(q|
10933 INSERT IGNORE INTO permissions (module_bit, code, description)
10934 VALUES (1, 'self_checkout', 'Perform self checkout at the OPAC. It should be used for the patron matching the AutoSelfCheckID')
10937 my $AutoSelfCheckID = C4::Context->preference('AutoSelfCheckID');
10939 $dbh->do(q|
10940 UPDATE borrowers
10941 SET flags=0
10942 WHERE userid=?
10943 |, undef, $AutoSelfCheckID);
10945 $dbh->do(q|
10946 DELETE FROM user_permissions
10947 WHERE borrowernumber=(SELECT borrowernumber FROM borrowers WHERE userid=?)
10948 |, undef, $AutoSelfCheckID);
10950 $dbh->do(q|
10951 INSERT INTO user_permissions(borrowernumber, module_bit, code)
10952 SELECT borrowernumber, 1, 'self_checkout' FROM borrowers WHERE userid=?
10953 |, undef, $AutoSelfCheckID);
10954 print "Upgrade to $DBversion done (Bug 14298: AutoSelfCheckID user should only be able to access SCO)\n";
10955 SetVersion($DBversion);
10958 $DBversion = "3.21.00.028";
10959 if ( CheckVersion($DBversion) ) {
10960 unless ( column_exists('uploaded_files', 'public') ) {
10961 $dbh->do(q{
10962 ALTER TABLE uploaded_files
10963 ADD COLUMN public tinyint,
10964 ADD COLUMN permanent tinyint
10966 $dbh->do(q{
10967 UPDATE uploaded_files SET public=1, permanent=1
10969 $dbh->do(q{
10970 ALTER TABLE uploaded_files
10971 CHANGE COLUMN categorycode uploadcategorycode tinytext
10974 print "Upgrade to $DBversion done (Bug 14321: Merge UploadedFile and UploadedFiles into Koha::Upload)\n";
10975 SetVersion($DBversion);
10978 $DBversion = "3.21.00.029";
10979 if ( CheckVersion($DBversion) ) {
10980 unless ( column_exists('discharges', 'discharge_id') ) {
10981 $dbh->do(q{
10982 ALTER TABLE discharges
10983 ADD COLUMN discharge_id int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY FIRST
10986 print "Upgrade to $DBversion done (Bug 14368: Add discharges history)\n";
10987 SetVersion($DBversion);
10990 $DBversion = "3.21.00.030";
10991 if ( CheckVersion($DBversion) ) {
10992 $dbh->do(q{
10993 UPDATE marc_subfield_structure
10994 SET value_builder='marc21_leader.pl'
10995 WHERE value_builder='marc21_leader_book.pl'
10997 $dbh->do(q{
10998 UPDATE marc_subfield_structure
10999 SET value_builder='marc21_leader.pl'
11000 WHERE value_builder='marc21_leader_computerfile.pl'
11002 $dbh->do(q{
11003 UPDATE marc_subfield_structure
11004 SET value_builder='marc21_leader.pl'
11005 WHERE value_builder='marc21_leader_video.pl'
11007 print "Upgrade to $DBversion done (Bug 14201: Remove unused code or template from some MARC21 leader plugins )\n";
11008 SetVersion($DBversion);
11011 $DBversion = "3.21.00.031";
11012 if ( CheckVersion($DBversion) ) {
11013 $dbh->do(q{
11014 INSERT IGNORE INTO systempreferences (variable,value,options,explanation,type)
11015 VALUES
11016 ('SMSSendPassword', '', '', 'Password used to send SMS messages', 'free'),
11017 ('SMSSendUsername', '', '', 'Username/Login used to send SMS messages', 'free')
11019 print "Upgrade to $DBversion done (Bug 14820: SMSSendUsername and SMSSendPassword are not listed in the system preferences)\n";
11020 SetVersion($DBversion);
11023 $DBversion = "3.21.00.032";
11024 if ( CheckVersion($DBversion) ) {
11025 $dbh->do(q{
11026 CREATE TABLE additional_fields (
11027 id int(11) NOT NULL AUTO_INCREMENT,
11028 tablename varchar(255) NOT NULL DEFAULT '',
11029 name varchar(255) NOT NULL DEFAULT '',
11030 authorised_value_category varchar(16) NOT NULL DEFAULT '',
11031 marcfield varchar(16) NOT NULL DEFAULT '',
11032 searchable tinyint(1) NOT NULL DEFAULT '0',
11033 PRIMARY KEY (id),
11034 UNIQUE KEY fields_uniq (tablename,name)
11035 ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci
11037 $dbh->do(q{
11038 CREATE TABLE additional_field_values (
11039 id int(11) NOT NULL AUTO_INCREMENT,
11040 field_id int(11) NOT NULL,
11041 record_id int(11) NOT NULL,
11042 value varchar(255) NOT NULL DEFAULT '',
11043 PRIMARY KEY (id),
11044 UNIQUE KEY field_record (field_id,record_id),
11045 CONSTRAINT afv_fk FOREIGN KEY (field_id) REFERENCES additional_fields (id) ON DELETE CASCADE ON UPDATE CASCADE
11046 ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci
11048 print "Upgrade to $DBversion done (Bug 10855: Additional fields for subscriptions)\n";
11049 SetVersion($DBversion);
11052 $DBversion = "3.21.00.033";
11053 if ( CheckVersion($DBversion) ) {
11055 my $done = 0;
11056 my $count_ethnicity = $dbh->selectrow_arrayref(q|
11057 SELECT COUNT(*) FROM ethnicity
11059 my $count_borrower_modifications = $dbh->selectrow_arrayref(q|
11060 SELECT COUNT(*)
11061 FROM borrower_modifications
11062 WHERE ethnicity IS NOT NULL
11063 OR ethnotes IS NOT NULL
11065 my $count_borrowers = $dbh->selectrow_arrayref(q|
11066 SELECT COUNT(*)
11067 FROM borrowers
11068 WHERE ethnicity IS NOT NULL
11069 OR ethnotes IS NOT NULL
11071 # We don't care about the ethnicity of the deleted borrowers, right?
11072 if ( $count_ethnicity->[0] == 0
11073 and $count_borrower_modifications->[0] == 0
11074 and $count_borrowers->[0] == 0
11076 $dbh->do(q|
11077 DROP TABLE ethnicity
11079 $dbh->do(q|
11080 ALTER TABLE borrower_modifications
11081 DROP COLUMN ethnicity,
11082 DROP COLUMN ethnotes
11084 $dbh->do(q|
11085 ALTER TABLE borrowers
11086 DROP COLUMN ethnicity,
11087 DROP COLUMN ethnotes
11089 $dbh->do(q|
11090 ALTER TABLE deletedborrowers
11091 DROP COLUMN ethnicity,
11092 DROP COLUMN ethnotes
11094 $done = 1;
11096 if ( $done ) {
11097 print "Upgrade to $DBversion done (Bug 10020: Drop table ethnicity and columns ethnicity and ethnotes)\n";
11099 else {
11100 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";
11103 SetVersion ($DBversion);
11106 $DBversion = "3.21.00.034";
11107 if ( CheckVersion($DBversion) ) {
11108 $dbh->do(q{
11109 INSERT IGNORE INTO systempreferences (variable,value,explanation,options,type)
11110 VALUES('MembershipExpiryDaysNotice',NULL,'Send an account expiration notice that a patron''s card is about to expire after',NULL,'Integer')
11112 $dbh->do(q{
11113 INSERT IGNORE INTO letter (module, code, branchcode, name, title, content, message_transport_type)
11114 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')
11116 print "Upgrade to $DBversion done (Bug 6810: Send membership expiry reminder notices)\n";
11117 SetVersion($DBversion);
11120 $DBversion = "3.21.00.035";
11121 if ( CheckVersion($DBversion) ) {
11122 $dbh->do(q|
11123 ALTER TABLE branch_borrower_circ_rules ADD COLUMN maxonsiteissueqty int(4) DEFAULT NULL AFTER maxissueqty;
11125 $dbh->do(q|
11126 UPDATE branch_borrower_circ_rules SET maxonsiteissueqty = maxissueqty;
11128 $dbh->do(q|
11129 ALTER TABLE default_borrower_circ_rules ADD COLUMN maxonsiteissueqty int(4) DEFAULT NULL AFTER maxissueqty;
11131 $dbh->do(q|
11132 UPDATE default_borrower_circ_rules SET maxonsiteissueqty = maxissueqty;
11134 $dbh->do(q|
11135 ALTER TABLE default_branch_circ_rules ADD COLUMN maxonsiteissueqty int(4) DEFAULT NULL AFTER maxissueqty;
11137 $dbh->do(q|
11138 UPDATE default_branch_circ_rules SET maxonsiteissueqty = maxissueqty;
11140 $dbh->do(q|
11141 ALTER TABLE default_circ_rules ADD COLUMN maxonsiteissueqty int(4) DEFAULT NULL AFTER maxissueqty;
11143 $dbh->do(q|
11144 UPDATE default_circ_rules SET maxonsiteissueqty = maxissueqty;
11146 $dbh->do(q|
11147 ALTER TABLE issuingrules ADD COLUMN maxonsiteissueqty int(4) DEFAULT NULL AFTER maxissueqty;
11149 $dbh->do(q|
11150 UPDATE issuingrules SET maxonsiteissueqty = maxissueqty;
11152 $dbh->do(q|
11153 INSERT IGNORE INTO systempreferences (variable,value,explanation,options,type)
11154 VALUES ('ConsiderOnSiteCheckoutsAsNormalCheckouts','1',NULL,'Consider on-site checkouts as normal checkouts','YesNo');
11157 print "Upgrade to $DBversion done (Bug 14045: Add DB fields maxonsiteissueqty and pref ConsiderOnSiteCheckoutsAsNormalCheckouts)\n";
11158 SetVersion ($DBversion);
11161 $DBversion = "3.21.00.036";
11162 if ( CheckVersion($DBversion) ) {
11163 $dbh->do(q{
11164 ALTER TABLE authorised_values_branches
11165 DROP FOREIGN KEY authorised_values_branches_ibfk_1,
11166 DROP FOREIGN KEY authorised_values_branches_ibfk_2
11168 $dbh->do(q{
11169 ALTER TABLE authorised_values_branches
11170 MODIFY av_id INT( 11 ) NOT NULL,
11171 MODIFY branchcode VARCHAR( 10 ) NOT NULL,
11172 ADD FOREIGN KEY (`av_id`) REFERENCES `authorised_values` (`id`) ON DELETE CASCADE,
11173 ADD FOREIGN KEY (`branchcode`) REFERENCES `branches` (`branchcode`) ON DELETE CASCADE
11175 print "Upgrade to $DBversion done (Bug 10363: There is no package for authorised values)\n";
11176 SetVersion($DBversion);
11179 $DBversion = "3.21.00.037";
11180 if ( CheckVersion($DBversion) ) {
11181 $dbh->do(q{
11182 INSERT IGNORE INTO systempreferences (variable,value,explanation,options,type)
11183 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')
11185 $dbh->do(q{
11186 INSERT IGNORE INTO systempreferences (variable,value,explanation,options,type)
11187 VALUES ('RestrictionBlockRenewing','0','If patron is restricted, should renewal be allowed or blocked',NULL,'YesNo')
11189 print "Upgrade to $DBversion done (Bug 8236: Prevent renewing if overdue or restriction)\n";
11190 SetVersion($DBversion);
11193 $DBversion = "3.21.00.038";
11194 if ( CheckVersion($DBversion) ) {
11195 $dbh->do(q|
11196 INSERT IGNORE INTO systempreferences ( variable, value, options, explanation, type )
11197 VALUES ('BatchCheckouts','0','','Enable or disable batch checkouts','YesNo')
11199 $dbh->do(q|
11200 INSERT IGNORE INTO systempreferences ( variable, value, options, explanation, type )
11201 VALUES ('BatchCheckoutsValidCategories','',NULL,'Patron categories allowed to checkout in a batch','Free')
11203 print "Upgrade to $DBversion done (Bug 11759: Add the batch checkout feature)\n";
11204 SetVersion($DBversion);
11207 $DBversion = "3.21.00.039";
11208 if ( CheckVersion($DBversion) ) {
11209 $dbh->do(q|
11210 ALTER TABLE creator_layouts ADD COLUMN oblique_title INT(1) NULL DEFAULT 1 AFTER guidebox
11212 print "Upgrade to $DBversion done (Bug 12194: Add column oblique_title to layouts)\n";
11213 SetVersion($DBversion);
11216 $DBversion = "3.21.00.040";
11217 if ( CheckVersion($DBversion) ) {
11218 $dbh->do(q{
11219 ALTER TABLE itemtypes
11220 ADD hideinopac TINYINT(1) NOT NULL DEFAULT 0
11221 AFTER sip_media_type,
11222 ADD searchcategory VARCHAR(80) DEFAULT NULL
11223 AFTER hideinopac;
11225 print "Upgrade to $DBversion done (Bug 10937: Option to hide and group itemtypes from advanced search)\n";
11226 SetVersion($DBversion);
11229 $DBversion = "3.21.00.041";
11230 if ( CheckVersion($DBversion) ) {
11231 $dbh->do(q|
11232 ALTER TABLE issuingrules
11233 ADD chargeperiod_charge_at BOOLEAN NOT NULL DEFAULT '0' AFTER chargeperiod
11235 print "Upgrade to $DBversion done (Bug 13590: Add ability to charge fines at start of charge period)\n";
11236 SetVersion($DBversion);
11239 $DBversion = "3.21.00.042";
11240 if ( CheckVersion($DBversion) ) {
11241 $dbh->do(q|
11242 ALTER TABLE items_search_fields
11243 MODIFY COLUMN authorised_values_category VARCHAR(32) DEFAULT NULL
11245 print "Upgrade to $DBversion done (Bug 15069: items_search_fields.authorised_values_category is still a varchar(32))\n";
11246 SetVersion($DBversion);
11249 $DBversion = "3.21.00.043";
11250 if ( CheckVersion($DBversion) ) {
11251 $dbh->do(q|
11252 INSERT IGNORE INTO systempreferences ( variable, value, options, explanation, type )
11253 VALUES ('EnableAdvancedCatalogingEditor','0','','Enable the Rancor advanced cataloging editor','YesNo')
11255 print "Upgrade to $DBversion done (Bug 11559: Professional cataloger's interface)\n";
11256 SetVersion($DBversion);
11259 $DBversion = "3.21.00.044";
11260 if ( CheckVersion($DBversion) ) {
11261 $dbh->do(q|
11262 CREATE TABLE localization (
11263 localization_id int(11) NOT NULL AUTO_INCREMENT,
11264 entity varchar(16) COLLATE utf8_unicode_ci NOT NULL,
11265 code varchar(64) COLLATE utf8_unicode_ci NOT NULL,
11266 lang varchar(25) COLLATE utf8_unicode_ci NOT NULL,
11267 translation text COLLATE utf8_unicode_ci,
11268 PRIMARY KEY (localization_id),
11269 UNIQUE KEY entity_code_lang (entity,code,lang)
11270 ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci
11272 print "Upgrade to $DBversion done (Bug 14100: Generic solution for language overlay)\n";
11273 SetVersion($DBversion);
11276 $DBversion = "3.21.00.045";
11277 if ( CheckVersion($DBversion) ) {
11278 $dbh->do(q|
11279 ALTER TABLE opac_news
11280 ADD borrowernumber int(11) default NULL
11281 AFTER number
11283 $dbh->do(q|
11284 ALTER TABLE opac_news
11285 ADD CONSTRAINT borrowernumber_fk
11286 FOREIGN KEY (borrowernumber)
11287 REFERENCES borrowers (borrowernumber)
11288 ON DELETE SET NULL ON UPDATE CASCADE
11290 print "Upgrade to $DBversion done (Bug 14246: (newsauthor) Add borrowernumber to koha_news)\n";
11291 SetVersion($DBversion);
11294 $DBversion = "3.21.00.046";
11295 if ( CheckVersion($DBversion) ) {
11296 $dbh->do(q{
11297 INSERT IGNORE INTO systempreferences ( variable, value, options, explanation, type )
11298 VALUES ('NewsAuthorDisplay','none','none|opac|staff|both','Display the author name for news items.','Choice')
11300 print "Upgrade to $DBversion done (Bug 14247: (newsauthor) System preference for news author display)\n";
11301 SetVersion($DBversion);
11304 $DBversion = "3.21.00.047";
11305 if(CheckVersion($DBversion)) {
11306 $dbh->do(q{
11307 INSERT IGNORE INTO systempreferences (variable,value,explanation,options,type)
11308 VALUES ('IndependentBranchesPatronModifications','0','Show only modification request for the logged in branch','','YesNo')
11310 print "Upgrade to $DBversion done (Bug 10904: Limit patron update request management by branch)\n";
11311 SetVersion($DBversion);
11314 $DBversion = '3.21.00.048';
11315 if ( CheckVersion($DBversion) ) {
11316 my $create_table_issues = @{ $dbh->selectall_arrayref(q|SHOW CREATE TABLE issues|) }[0]->[1];
11317 if ($create_table_issues !~ m|UNIQUE KEY.*itemnumber| ) {
11318 $dbh->do(q|ALTER TABLE issues ADD CONSTRAINT UNIQUE KEY (itemnumber)|);
11320 print "Upgrade to $DBversion done (Bug 14978: Make sure issues.itemnumber is a unique key)\n";
11321 SetVersion($DBversion);
11324 $DBversion = "3.21.00.049";
11325 if ( CheckVersion($DBversion) ) {
11326 $dbh->do(q{UPDATE systempreferences SET variable = 'AudioAlerts' WHERE variable = 'soundon'});
11328 $dbh->do(q{
11329 CREATE TABLE audio_alerts (
11330 id int(11) NOT NULL AUTO_INCREMENT,
11331 precedence smallint(5) unsigned NOT NULL,
11332 selector varchar(255) NOT NULL,
11333 sound varchar(255) NOT NULL,
11334 PRIMARY KEY (id),
11335 KEY precedence (precedence)
11336 ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
11339 $dbh->do(q{
11340 INSERT IGNORE INTO audio_alerts VALUES
11341 (1, 1, '.audio-alert-action', 'opening.ogg'),
11342 (2, 2, '.audio-alert-warning', 'critical.ogg'),
11343 (3, 3, '.audio-alert-success', 'beep.ogg');
11346 print "Upgrade to $DBversion done (Bug 11431: Add additional sound options for warnings)\n";
11347 SetVersion($DBversion);
11350 $DBversion = "3.21.00.050";
11351 if(CheckVersion($DBversion)) {
11352 $dbh->do(q{
11353 INSERT INTO letter ( module, code, branchcode, name, is_html, title, content, message_transport_type )
11354 VALUES ( 'circulation', 'OVERDUES_SLIP', '', 'Overdues Slip', '0', 'OVERDUES_SLIP', 'The following item(s) is/are currently overdue:
11356 <item>"<<biblio.title>>" by <<biblio.author>>, <<items.itemcallnumber>>, Barcode: <<items.barcode>> Fine: <<items.fine>></item>
11357 ', 'print' )
11359 print "Upgrade to $DBversion done (Bug 12933: Add ability to print overdue slip from staff intranet)\n";
11360 SetVersion($DBversion);
11363 $DBversion = "3.21.00.051";
11364 if ( CheckVersion($DBversion) ) {
11365 $dbh->do(q{
11366 ALTER TABLE virtualshelves
11367 CHANGE COLUMN sortfield sortfield VARCHAR(16) DEFAULT 'title'
11369 $dbh->do(q{
11370 UPDATE virtualshelves
11371 SET sortfield='title'
11372 WHERE sortfield IS NULL;
11374 print "Upgrade to $DBversion done (Bug 14544: Move the list related code to Koha::Virtualshelves)\n";
11375 SetVersion($DBversion);
11378 $DBversion = "3.21.00.052";
11379 if ( CheckVersion($DBversion) ) {
11380 $dbh->do(q{
11381 ALTER TABLE serial
11382 ADD COLUMN publisheddatetext VARCHAR(100) DEFAULT NULL AFTER publisheddate
11384 print "Upgrade to $DBversion done (Bug 8296: Add descriptive (text) published date field for serials)\n";
11385 SetVersion($DBversion);
11388 $DBversion = "3.21.00.053";
11389 if ( CheckVersion($DBversion) ) {
11390 my $query = q{ SELECT * FROM itemtypes ORDER BY description };
11391 my $sth = C4::Context->dbh->prepare($query);
11392 $sth->execute;
11393 my $suggestion_formats = $sth->fetchall_arrayref( {} );
11395 foreach my $format (@$suggestion_formats) {
11396 $dbh->do(
11398 INSERT IGNORE INTO authorised_values (category, authorised_value, lib, lib_opac, imageurl)
11399 VALUES (?, ?, ?, ?, ?)
11400 |, {},
11401 'SUGGEST_FORMAT', $format->{itemtype}, $format->{description}, $format->{description},
11402 $format->{imageurl}
11405 print "Upgrade to $DBversion done (Bug 9468: create new SUGGEST_FORMAT authorised_value list)\n";
11406 SetVersion($DBversion);
11409 $DBversion = "3.21.00.054";
11410 if(CheckVersion($DBversion)) {
11411 $dbh->do(q{
11412 INSERT IGNORE INTO systempreferences (variable,value,explanation,options,type)
11413 VALUES('MergeReportFields','','Displayed fields for deleted MARC records after merge',NULL,'Free')
11415 print "Upgrade to $DBversion done (Bug 8064: Merge several biblio records)\n";
11416 SetVersion($DBversion);
11419 $DBversion = "3.21.00.055";
11420 if ( CheckVersion($DBversion) ) {
11421 print "Upgrade to $DBversion done (Koha 3.22 beta)\n";
11422 SetVersion($DBversion);
11425 $DBversion = "3.21.00.056";
11426 if(CheckVersion($DBversion)) {
11427 $dbh->do(q{
11428 UPDATE systempreferences
11430 options='metric|us|iso|dmydot',
11431 explanation='Define global date format (us mm/dd/yyyy, metric dd/mm/yyy, ISO yyyy-mm-dd, DMY separated by dots dd.mm.yyyy)'
11432 WHERE variable='dateformat'
11434 print "Upgrade to $DBversion done (Bug 12072: New dateformat dd.mm.yyyy)\n";
11435 SetVersion($DBversion);
11438 $DBversion = "3.22.00.000";
11439 if ( CheckVersion($DBversion) ) {
11440 print "Upgrade to $DBversion done (Koha 3.22)\n";
11441 SetVersion($DBversion);
11444 $DBversion = "3.23.00.000";
11445 if ( CheckVersion($DBversion) ) {
11446 print "Upgrade to $DBversion done (The year of the monkey will be here soon.)\n";
11447 SetVersion ($DBversion);
11450 $DBversion = "3.23.00.001";
11451 if(CheckVersion($DBversion)) {
11452 $dbh->do(q{
11453 INSERT IGNORE INTO systempreferences ( variable, value, options, explanation, type )
11454 VALUES (
11455 'DefaultToLoggedInLibraryCircRules', '0', NULL , 'If enabled, circ rules editor will default to the logged in library''s rules, rather than the ''all libraries'' rules.', 'YesNo'
11456 ), (
11457 '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'
11461 print "Upgrade to $DBversion done (Bug 11625 - Add pref DefaultToLoggedInLibraryCircRules and DefaultToLoggedInLibraryNoticesSlips)\n";
11462 SetVersion($DBversion);
11465 $DBversion = "3.23.00.002";
11466 if(CheckVersion($DBversion)) {
11467 $dbh->do(q{
11468 INSERT IGNORE INTO systempreferences ( variable, value, options, explanation, type )
11469 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')
11472 print "Upgrade to $DBversion done (Bug 11747 - add pref DefaultToLoggedInLibraryOverdueTriggers)\n";
11473 SetVersion($DBversion);
11476 $DBversion = "3.23.00.003";
11477 if(CheckVersion($DBversion)) {
11478 $dbh->do(q{
11479 UPDATE letter SET name = "Hold Slip" WHERE name = "Reserve Slip"
11481 $dbh->do(q{
11482 UPDATE letter SET title = "Hold Slip" WHERE title = "Reserve Slip";
11485 print "Upgrade to $DBversion done (Bug 8085 - Rename 'Reserve slip' to 'Hold slip')\n";
11486 SetVersion($DBversion);
11489 $DBversion = "3.23.00.004";
11490 if ( CheckVersion($DBversion) ) {
11491 $dbh->do(q{
11492 DROP TABLE IF EXISTS `stopwords`;
11494 print "Upgrade to $DBversion done (Bug 9819 - stopwords related code should be removed)\n";
11495 SetVersion($DBversion);
11498 $DBversion = "3.23.00.005";
11499 if ( CheckVersion($DBversion) ) {
11500 $dbh->do(q{
11501 UPDATE permissions SET description = 'Manage circulation rules' WHERE description = 'manage circulation rules'
11503 $dbh->do(q{
11504 UPDATE permissions SET description = 'Manage staged MARC records, including completing and reversing imports' WHERE description = 'Managed staged MARC records, including completing and reversing imports'
11506 print "Upgrade to $DBversion done (Bug 11569 - Typo in userpermissions.sql)\n";
11507 SetVersion($DBversion);
11509 $DBversion = "3.23.00.006";
11510 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
11511 $dbh->do("
11512 ALTER TABLE serial
11513 ADD serialseq_x VARCHAR( 100 ) NULL DEFAULT NULL AFTER serialseq,
11514 ADD serialseq_y VARCHAR( 100 ) NULL DEFAULT NULL AFTER serialseq_x,
11515 ADD serialseq_z VARCHAR( 100 ) NULL DEFAULT NULL AFTER serialseq_y
11518 my $sth = $dbh->prepare("SELECT * FROM subscription");
11519 $sth->execute();
11521 my $sth2 = $dbh->prepare("SELECT * FROM subscription_numberpatterns WHERE id = ?");
11523 my $sth3 = $dbh->prepare("UPDATE serial SET serialseq_x = ?, serialseq_y = ?, serialseq_z = ? WHERE serialid = ?");
11525 foreach my $subscription ( $sth->fetchrow_hashref() ) {
11526 next if !defined($subscription);
11527 $sth2->execute( $subscription->{numberpattern} );
11528 my $number_pattern = $sth2->fetchrow_hashref();
11530 my $numbering_method = $number_pattern->{numberingmethod};
11531 # Get all the data between the enumeration values, we need
11532 # to split each enumeration string based on these values.
11533 my @splits = split( /\{[XYZ]\}/, $numbering_method );
11534 # Get the order in which the X Y and Z values are used
11535 my %indexes;
11536 foreach my $i (qw(X Y Z)) {
11537 $indexes{$i} = index( $numbering_method, "{$i}" );
11538 delete $indexes{$i} if $indexes{$i} == -1;
11540 my @indexes = sort { $indexes{$a} <=> $indexes{$b} } keys(%indexes);
11542 my @serials = @{
11543 $dbh->selectall_arrayref(
11544 "SELECT * FROM serial WHERE subscriptionid = $subscription->{subscriptionid}",
11545 { Slice => {} }
11549 foreach my $serial (@serials) {
11550 my $serialseq = $serial->{serialseq};
11551 my %enumeration_data;
11553 ## We cannot split on multiple values at once,
11554 ## so let's replace each of those values with __SPLIT__
11555 if (@splits) {
11556 for my $split_item (@splits) {
11557 my $quoted_split = quotemeta($split_item);
11558 $serialseq =~ s/$quoted_split/__SPLIT__/;
11561 undef,
11562 $enumeration_data{ $indexes[0] // q{} },
11563 $enumeration_data{ $indexes[1] // q{} },
11564 $enumeration_data{ $indexes[2] // q{} }
11565 ) = split( /__SPLIT__/, $serialseq );
11567 else
11568 { ## Nothing to split on means the only thing in serialseq is a single placeholder e.g. {X}
11569 $enumeration_data{ $indexes[0] } = $serialseq;
11572 $sth3->execute(
11573 $enumeration_data{'X'},
11574 $enumeration_data{'Y'},
11575 $enumeration_data{'Z'},
11576 $serial->{serialid},
11581 print "Upgrade to $DBversion done ( Bug 8956 - Split serials enumeration data into separate fields )\n";
11582 SetVersion($DBversion);
11585 $DBversion = "3.23.00.007";
11586 if ( CheckVersion($DBversion) ) {
11587 $dbh->do("SET FOREIGN_KEY_CHECKS=0");
11588 $dbh->do("ALTER TABLE overduerules RENAME old_overduerules");
11589 $dbh->do("CREATE TABLE overduerules (
11590 `overduerules_id` int(11) NOT NULL AUTO_INCREMENT,
11591 `branchcode` varchar(10) NOT NULL DEFAULT '',
11592 `categorycode` varchar(10) NOT NULL DEFAULT '',
11593 `delay1` int(4) DEFAULT NULL,
11594 `letter1` varchar(20) DEFAULT NULL,
11595 `debarred1` varchar(1) DEFAULT '0',
11596 `delay2` int(4) DEFAULT NULL,
11597 `debarred2` varchar(1) DEFAULT '0',
11598 `letter2` varchar(20) DEFAULT NULL,
11599 `delay3` int(4) DEFAULT NULL,
11600 `letter3` varchar(20) DEFAULT NULL,
11601 `debarred3` int(1) DEFAULT '0',
11602 PRIMARY KEY (`overduerules_id`),
11603 UNIQUE KEY `overduerules_branch_cat` (`branchcode`,`categorycode`)
11604 ) ENGINE=InnoDB DEFAULT CHARSET=utf8;");
11605 $dbh->do("INSERT INTO overduerules(branchcode, categorycode, delay1, letter1, debarred1, delay2, debarred2, letter2, delay3, letter3, debarred3) SELECT * FROM old_overduerules");
11606 $dbh->do("DROP TABLE old_overduerules");
11607 $dbh->do("ALTER TABLE overduerules_transport_types
11608 ADD COLUMN overduerules_id int(11) NOT NULL");
11609 my $mtts = $dbh->selectall_arrayref("SELECT * FROM overduerules_transport_types", { Slice => {} });
11610 $dbh->do("DELETE FROM overduerules_transport_types");
11611 $dbh->do("ALTER TABLE overduerules_transport_types
11612 DROP FOREIGN KEY overduerules_fk,
11613 ADD FOREIGN KEY overduerules_transport_types_fk (overduerules_id) REFERENCES overduerules (overduerules_id) ON DELETE CASCADE ON UPDATE CASCADE,
11614 DROP COLUMN branchcode,
11615 DROP COLUMN categorycode");
11616 my $s = $dbh->prepare("INSERT INTO overduerules_transport_types (overduerules_id, id, letternumber, message_transport_type) "
11617 ." VALUES((SELECT overduerules_id FROM overduerules WHERE branchcode = ? AND categorycode = ?),?,?,?)");
11618 foreach my $mtt(@$mtts){
11619 $s->execute($mtt->{branchcode}, $mtt->{categorycode}, $mtt->{id}, $mtt->{letternumber}, $mtt->{message_transport_type} );
11621 $dbh->do("SET FOREIGN_KEY_CHECKS=1");
11623 print "Upgrade to $DBversion done (Bug 13624 - Remove columns branchcode, categorytype from table overduerules_transport_types)\n";
11624 SetVersion($DBversion);
11627 $DBversion = "3.23.00.008";
11628 if ( CheckVersion($DBversion) ) {
11630 $dbh->do(q{ALTER TABLE borrowers ADD privacy_guarantor_checkouts BOOLEAN NOT NULL DEFAULT '0' AFTER privacy});
11632 $dbh->do(q{ALTER TABLE deletedborrowers ADD privacy_guarantor_checkouts BOOLEAN NOT NULL DEFAULT '0' AFTER privacy});
11634 $dbh->do(q{
11635 INSERT IGNORE INTO systempreferences (variable, value, options, explanation, type )
11636 VALUES (
11637 'AllowStaffToSetCheckoutsVisibilityForGuarantor', '0', NULL,
11638 'If enabled, library staff can set a patron''s checkouts to be visible to linked patrons from the opac.', 'YesNo'
11639 ), (
11640 'AllowPatronToSetCheckoutsVisibilityForGuarantor', '0', NULL,
11641 'If enabled, the patron can set checkouts to be visible to his or her guarantor', 'YesNo'
11645 print "Upgrade to $DBversion done (Bug 9303 - relative's checkouts in the opac)\n";
11646 SetVersion($DBversion);
11649 $DBversion = "3.23.00.009";
11650 if ( CheckVersion($DBversion) ) {
11651 $dbh->do(q{
11652 INSERT IGNORE INTO systempreferences (variable, value, options, explanation, type ) VALUES
11653 ( 'EnablePayPalOpacPayments', '0', NULL , 'Enables the ability to pay fees and fines from the OPAC via PayPal', 'YesNo' ),
11654 ( 'PayPalChargeDescription', 'Koha fee payment', NULL , 'This preference defines what the user will see the charge listed as in PayPal', 'Free' ),
11655 ( 'PayPalPwd', '', NULL , 'Your PayPal API password', 'Free' ),
11656 ( 'PayPalSandboxMode', '1', NULL , 'If enabled, the system will use PayPal''s sandbox server for testing, rather than the production server.', 'YesNo' ),
11657 ( 'PayPalSignature', '', NULL , 'Your PayPal API signature', 'Free' ),
11658 ( 'PayPalUser', '', NULL , 'Your PayPal API username ( email address )', 'Free' )
11661 print "Upgrade to $DBversion done (Bug 11622 - Add ability to pay fees and fines from OPAC via PayPal)\n";
11662 SetVersion($DBversion);
11665 $DBversion = "3.23.00.010";
11666 if ( CheckVersion($DBversion) ) {
11667 $dbh->do(q{
11668 ALTER TABLE issuingrules ADD cap_fine_to_replacement_price BOOLEAN NOT NULL DEFAULT '0' AFTER overduefinescap
11671 print "Upgrade to $DBversion done (Bug 9129 - Add the ability to set the maximum fine for an item to its replacement price)\n";
11672 SetVersion($DBversion);
11675 $DBversion = "3.23.00.011";
11676 if ( CheckVersion($DBversion) ) {
11677 $dbh->do(q{
11678 INSERT IGNORE INTO systempreferences ( `variable`, `value`, `options`, `explanation`, `type` ) VALUES ('HoldFeeMode','not_always','always|not_always','Set the hold fee mode','Choice')
11681 print "Upgrade to $DBversion done (Bug 13592 - Hold fee not being applied on placing a hold)\n";
11682 SetVersion($DBversion);
11685 $DBversion = "3.23.00.012";
11686 if ( CheckVersion($DBversion) ) {
11687 $dbh->do(q{
11688 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')
11691 print "Upgrade to $DBversion done (Bug 15380 - Move the authority types related code to Koha::Authority::Type[s] - part 1)\n";
11692 SetVersion($DBversion);
11695 $DBversion = "3.23.00.013";
11696 if ( CheckVersion($DBversion) ) {
11697 $dbh->do(q{
11698 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')
11700 $dbh->do(q{
11701 CREATE TABLE IF NOT EXISTS `items_last_borrower` (
11702 `id` int(11) NOT NULL AUTO_INCREMENT,
11703 `itemnumber` int(11) NOT NULL,
11704 `borrowernumber` int(11) NOT NULL,
11705 `created_on` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
11706 PRIMARY KEY (`id`),
11707 UNIQUE KEY `itemnumber` (`itemnumber`),
11708 KEY `borrowernumber` (`borrowernumber`),
11709 CONSTRAINT `items_last_borrower_ibfk_2` FOREIGN KEY (`borrowernumber`) REFERENCES `borrowers` (`borrowernumber`) ON DELETE CASCADE ON UPDATE CASCADE,
11710 CONSTRAINT `items_last_borrower_ibfk_1` FOREIGN KEY (`itemnumber`) REFERENCES `items` (`itemnumber`) ON DELETE CASCADE ON UPDATE CASCADE
11711 ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci
11714 print "Upgrade to $DBversion done (Bug 14945 - Add the ability to store the last patron to return an item)\n";
11715 SetVersion($DBversion);
11719 $DBversion = "3.23.00.014";
11720 if ( CheckVersion($DBversion) ) {
11721 $dbh->do(q{
11722 INSERT IGNORE INTO systempreferences ( `variable`, `value`, `options`, `explanation`, `type` )
11723 VALUES ('ClaimsBccCopy','0','','Bcc the ClaimAcquisition and ClaimIssues alerts','YesNo')
11726 print "Upgrade to $DBversion done (Bug 10076 - Add Bcc syspref for claimacquisition and clamissues)\n";
11727 SetVersion($DBversion);
11730 $DBversion = "3.23.00.015";
11731 if ( CheckVersion($DBversion) ) {
11732 $dbh->do(q{
11733 UPDATE letter SET code = "HOLD_SLIP" WHERE code = "RESERVESLIP";
11736 print "Upgrade to $DBversion done (Bug 15443 - Re-code RESERVESLIP as HOLD_SLIP)\n";
11737 SetVersion($DBversion);
11740 $DBversion = "3.23.00.016";
11741 if ( CheckVersion($DBversion) ) {
11742 $dbh->do(q{
11743 INSERT IGNORE INTO systempreferences (variable,value,options,explanation,type)
11744 VALUES ('OpacResetPassword', '0','','Shows the ''Forgot your password?'' link in the OPAC','YesNo');
11746 $dbh->do(q{
11747 CREATE TABLE IF NOT EXISTS borrower_password_recovery (
11748 borrowernumber int(11) NOT NULL,
11749 uuid varchar(128) NOT NULL,
11750 valid_until timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
11751 PRIMARY KEY (borrowernumber),
11752 KEY borrowernumber (borrowernumber)
11753 ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
11755 $dbh->do(q{
11756 INSERT IGNORE INTO `letter` (module, code, branchcode, name, is_html, title, content, message_transport_type)
11757 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');
11761 print "Upgrade to $DBversion done (Bug 8753 - Add forgot password link to OPAC)\n";
11762 SetVersion($DBversion);
11765 $DBversion = "3.23.00.017";
11766 if ( CheckVersion($DBversion) ) {
11768 $dbh->do(q{
11769 DELETE FROM uploaded_files
11770 WHERE COALESCE(permanent,0)=0 AND dir='koha_upload'
11773 my $tmp = C4::Context->temporary_directory . '/koha_upload';
11774 remove_tree( $tmp ) if -d $tmp;
11776 print "Upgrade to $DBversion done (Bug 14893 - Separate temporary storage per instance in Upload.pm)\n";
11777 SetVersion($DBversion);
11781 $DBversion = "3.23.00.018";
11782 if ( CheckVersion($DBversion) ) {
11783 $dbh->do(q{
11784 UPDATE systempreferences SET value="0" where type="YesNo" and value="";
11787 print "Upgrade to $DBversion done (Bug 15446 - Fix systempreferences rows where type=YesNo and value='')\n";
11788 SetVersion($DBversion);
11791 $DBversion = "3.23.00.019";
11792 if ( CheckVersion($DBversion) ) {
11793 $dbh->do(q{
11794 UPDATE `authorised_values` SET `lib`='Non-fiction' WHERE `lib`='Non Fiction';
11797 print "Upgrade to $DBversion done (Bug 15411 - Change Non Fiction to Non-fiction in authorised_values)\n";
11798 SetVersion($DBversion);
11801 $DBversion = "3.23.00.020";
11802 if ( CheckVersion($DBversion) ) {
11803 $dbh->do(q{
11804 CREATE TABLE sms_providers (
11805 id INT( 11 ) NOT NULL AUTO_INCREMENT PRIMARY KEY ,
11806 name VARCHAR( 255 ) NOT NULL ,
11807 domain VARCHAR( 255 ) NOT NULL ,
11808 UNIQUE (
11809 name
11811 ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
11814 $dbh->do(q{
11815 ALTER TABLE borrowers ADD sms_provider_id INT( 11 ) NULL DEFAULT NULL AFTER smsalertnumber;
11817 $dbh->do(q{
11818 ALTER TABLE borrowers ADD FOREIGN KEY ( sms_provider_id ) REFERENCES sms_providers ( id ) ON UPDATE CASCADE ON DELETE SET NULL;
11820 $dbh->do(q{
11821 ALTER TABLE deletedborrowers ADD sms_provider_id INT( 11 ) NULL DEFAULT NULL AFTER smsalertnumber;
11824 print "Upgrade to $DBversion done (Bug 9021 - Add SMS via email as an alternative to SMS services via SMS::Send drivers)\n";
11825 SetVersion($DBversion);
11828 $DBversion = "3.23.00.021";
11829 if ( CheckVersion($DBversion) ) {
11830 $dbh->do(q{
11831 INSERT IGNORE INTO systempreferences ( `variable`, `value`, `options`, `explanation`, `type` ) VALUES ('ShowAllCheckins', '0', '', 'Show all checkins', 'YesNo');
11834 print "Upgrade to $DBversion done (Bug 15736 - Add a preference to control whether all items should be shown in checked-in items list)\n";
11835 SetVersion($DBversion);
11838 $DBversion = "3.23.00.022";
11839 if ( CheckVersion($DBversion) ) {
11840 $dbh->do(q{ ALTER TABLE tags_all MODIFY COLUMN borrowernumber INT(11) });
11841 $dbh->do(q{ ALTER TABLE tags_all drop FOREIGN KEY tags_borrowers_fk_1 });
11842 $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 });
11843 $dbh->do(q{ ALTER TABLE tags_approval DROP FOREIGN KEY tags_approval_borrowers_fk_1 });
11844 $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 });
11846 print "Upgrade to $DBversion done (Bug 13534 - Deleting staff patron will delete tags approved by this patron)\n";
11847 SetVersion($DBversion);
11850 $DBversion = "3.23.00.023";
11851 if ( CheckVersion($DBversion) ) {
11852 $dbh->do(q{
11853 INSERT IGNORE INTO systempreferences (variable,value,explanation,options,type)
11854 VALUES('OpenLibrarySearch','0','If Yes Open Library search results will show in OPAC',NULL,'YesNo');
11857 print "Upgrade to $DBversion done (Bug 6624 - Allow Koha to use the new read API from OpenLibrary)\n";
11858 SetVersion($DBversion);
11861 $DBversion = "3.23.00.024";
11862 if ( CheckVersion($DBversion) ) {
11863 $dbh->do(q{
11864 ALTER TABLE deletedborrowers MODIFY COLUMN userid VARCHAR(75) DEFAULT NULL;
11867 $dbh->do(q{
11868 ALTER TABLE deletedborrowers MODIFY COLUMN password VARCHAR(60) DEFAULT NULL;
11871 print "Upgrade to $DBversion done (Bug 15517 - Tables borrowers and deletedborrowers differ again)\n";
11872 SetVersion($DBversion);
11875 $DBversion = "3.23.00.025";
11876 if ( CheckVersion($DBversion) ) {
11877 $dbh->do(q{
11878 DROP TABLE IF EXISTS nozebra;
11881 print "Upgrade to $DBversion done (Bug 15526 - Drop nozebra database table)\n";
11882 SetVersion($DBversion);
11885 $DBversion = "3.23.00.026";
11886 if ( CheckVersion($DBversion) ) {
11887 $dbh->do(q{
11888 UPDATE systempreferences SET value = CONCAT_WS('|', IF(value='', NULL, value), "password") WHERE variable="PatronSelfRegistrationBorrowerUnwantedField" AND value NOT LIKE "%password%";
11891 print "Upgrade to $DBversion done (Bug 15343 - Allow patrons to choose their own password on self registration)\n";
11892 SetVersion($DBversion);
11895 $DBversion = "3.23.00.027";
11896 if ( CheckVersion($DBversion) ) {
11897 my ( $db_value ) = $dbh->selectrow_array(q|SELECT count(*) FROM branches|);
11898 my $pref_value = C4::Context->preference("singleBranchMode") || 0;
11899 if ( $db_value > 1 and $pref_value == 1 ) {
11900 warn "WARNING: You have more than 1 libraries in your branches tables but the singleBranchMode system preference is on.\n";
11901 warn "This configuration does not make sense. The system preference is going to be deleted,\n";
11902 warn "and this parameter will be based on the number of libraries defined.\n";
11904 $dbh->do(q|DELETE FROM systempreferences WHERE variable="singleBranchMode"|);
11906 print "Upgrade to $DBversion done (Bug 4941 - Can't set branch in staff client when singleBranchMode is enabled)\n";
11907 SetVersion($DBversion);
11910 $DBversion = "3.23.00.028";
11911 if ( CheckVersion($DBversion) ) {
11912 $dbh->do(q{
11913 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';
11916 print "Upgrade to $DBversion done (Bug 14658 - Split PatronSelfRegistrationBorrowerUnwantedField into two preferences for creating and editing)\n";
11917 SetVersion($DBversion);
11920 $DBversion = "3.23.00.029";
11921 if ( CheckVersion($DBversion) ) {
11923 # move marc21_field_003.pl 040c and 040d to marc21_orgcode.pl
11924 $dbh->do(q{
11925 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' );
11927 $dbh->do(q{
11928 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' );
11931 print "Upgrade to $DBversion done (Bug 14199 - Unify all organization code plugins)\n";
11932 SetVersion($DBversion);
11935 $DBversion = "3.23.00.030";
11936 if(CheckVersion($DBversion)) {
11937 $dbh->do(q{
11938 INSERT IGNORE INTO systempreferences (variable,value,options,explanation,type)
11939 VALUES ('OpacMaintenanceNotice','','','A user-defined block of HTML to appear on screen when OpacMaintenace is enabled','Textarea')
11942 print "Upgrade to $DBversion done (Bug 15311: Let libraries set text to display when OpacMaintenance = on)\n";
11943 SetVersion($DBversion);
11946 $DBversion = "3.23.00.031";
11947 if(CheckVersion($DBversion)) {
11948 $dbh->do(q{
11949 INSERT IGNORE INTO systempreferences (variable,value,explanation,options,type)
11950 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')
11953 print "Upgrade to $DBversion done (Bug 14395 - Two different ways to calculate 'No renewal before')\n";
11954 SetVersion($DBversion);
11957 $DBversion = "3.23.00.032";
11958 if ( CheckVersion($DBversion) ) {
11959 $dbh->do(q{
11960 -- Add issue_id to accountlines table
11961 ALTER TABLE accountlines ADD issue_id INT(11) NULL DEFAULT NULL AFTER accountlines_id;
11964 ## Close out any accruing fines with no current issue
11965 $dbh->do(q{
11966 UPDATE accountlines LEFT JOIN issues USING ( itemnumber, borrowernumber ) SET accounttype = 'F' WHERE accounttype = 'FU' and issues.issue_id IS NULL;
11969 ## Close out any extra not really accruing fines, keep only the latest accring fine
11970 $dbh->do(q{
11971 UPDATE accountlines a1
11972 LEFT JOIN (SELECT MAX(accountlines_id) AS keeper,
11973 borrowernumber,
11974 itemnumber
11975 FROM accountlines
11976 WHERE accounttype = 'FU'
11977 GROUP BY borrowernumber, itemnumber
11978 ) a2 USING ( borrowernumber, itemnumber )
11979 SET a1.accounttype = 'F'
11980 WHERE a1.accounttype = 'FU'
11981 AND a1.accountlines_id != a2.keeper;
11984 ## Update the unclosed fines to add the current issue_id to them
11985 $dbh->do(q{
11986 UPDATE accountlines LEFT JOIN issues USING ( itemnumber ) SET accountlines.issue_id = issues.issue_id WHERE accounttype = 'FU';
11989 print "Upgrade to $DBversion done (Bug 15675 - Add issue_id column to accountlines and use it for updating fines)\n";
11990 SetVersion($DBversion);
11993 $DBversion = "3.23.00.033";
11994 if ( CheckVersion($DBversion) ) {
11995 $dbh->do(q{
11996 UPDATE systempreferences SET value = CONCAT_WS('|', IF(value = '', NULL, value), 'cardnumber') WHERE variable = 'PatronSelfRegistrationBorrowerUnwantedField' AND value NOT LIKE '%cardnumber%';
11999 $dbh->do(q{
12000 UPDATE systempreferences SET value = CONCAT_WS('|', IF(value = '', NULL, value), 'categorycode') WHERE variable = 'PatronSelfRegistrationBorrowerUnwantedField' AND value NOT LIKE '%categorycode%';
12003 print "Upgrade to $DBversion done (Bug 14659 - Allow patrons to enter card number and patron category on OPAC registration page)\n";
12004 SetVersion($DBversion);
12007 $DBversion = "3.23.00.034";
12008 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
12009 $dbh->do(q{
12010 ALTER TABLE `items` ADD `new` VARCHAR(32) NULL AFTER `stocknumber`;
12012 $dbh->do(q{
12013 ALTER TABLE `deleteditems` ADD `new` VARCHAR(32) NULL AFTER `stocknumber`;
12015 print "Upgrade to $DBversion done (Bug 11023: Adds field 'new' in items and deleteditems tables)\n";
12016 SetVersion($DBversion);
12019 $DBversion = "3.23.00.035";
12020 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
12021 $dbh->do(q{
12022 INSERT IGNORE INTO systempreferences (variable,value,explanation,options,type) VALUES ('HTML5MediaYouTube',0,'Embed|Don\'t embed','YouTube links as videos','YesNo');
12024 print "Upgrade to $DBversion done (Bug 14168 - enhance streaming cataloging to include youtube)\n";
12026 SetVersion($DBversion);
12029 $DBversion = "3.23.00.036";
12030 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
12031 $dbh->do(q{
12032 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');
12034 print "Upgrade to $DBversion done (Bug 12803 - Add ability to skip closed libraries when generating the holds queue)\n";
12035 SetVersion($DBversion);
12038 $DBversion = "3.23.00.037";
12039 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
12040 ## Add the new currency.archived column
12041 $dbh->do(q{
12042 ALTER TABLE currency ADD column archived tinyint(1) DEFAULT 0;
12044 ## Set currency=NULL if empty (just in case)
12045 $dbh->do(q{
12046 UPDATE aqorders SET currency=NULL WHERE currency="";
12048 ## Insert the missing currency and mark them as archived before adding the FK
12049 $dbh->do(q{
12050 INSERT INTO currency(currency, archived) SELECT distinct currency, 1 FROM aqorders WHERE currency NOT IN (SELECT currency FROM currency);
12052 ## Correct the field length in aqorders before adding FK too
12053 $dbh->do(q{ ALTER TABLE aqorders MODIFY COLUMN currency varchar(10) default NULL; });
12054 ## And finally add the FK
12055 $dbh->do(q{
12056 ALTER TABLE aqorders ADD FOREIGN KEY (currency) REFERENCES currency(currency) ON DELETE SET NULL ON UPDATE SET null;
12059 print "Upgrade to $DBversion done (Bug 15084 - Move the currency related code to Koha::Acquisition::Currenc[y|ies])\n";
12060 SetVersion($DBversion);
12063 $DBversion = "3.23.00.038";
12064 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
12065 $dbh->do(q{
12066 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');
12068 print "Upgrade to $DBversion done (Bug 14694 - Make decreaseloanHighHolds more flexible)\n";
12069 SetVersion($DBversion);
12072 $DBversion = "3.23.00.039";
12073 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
12075 $dbh->do(q{
12076 ALTER TABLE suggestions
12077 MODIFY COLUMN currency varchar(10) default NULL;
12079 $dbh->do(q{
12080 ALTER TABLE aqbooksellers
12081 MODIFY COLUMN currency varchar(10) default NULL;
12083 print "Upgrade to $DBversion done (Bug 15084 - Move the currency related code to Koha::Acquisition::Currenc[y|ies])\n";
12084 SetVersion($DBversion);
12088 $DBversion = "3.23.00.040";
12089 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
12091 my $c = $dbh->selectrow_array('SELECT COUNT(*) FROM systempreferences WHERE variable="intranetcolorstylesheet" AND value="blue.css"');
12093 if ( $c ) {
12094 print "WARNING: You are using a stylesheeet which has been removed from the Koha codebase.\n";
12095 print "Update your intranetcolorstylesheet.\n";
12097 print "Upgrade to $DBversion done (Bug 16019 - Check intranetcolorstylesheet for blue.css)\n";
12098 SetVersion($DBversion);
12101 $DBversion = "3.23.00.041";
12102 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
12104 my $dbh = C4::Context->dbh;
12105 my ($print_error) = $dbh->{PrintError};
12106 $dbh->{RaiseError} = 0;
12107 $dbh->{PrintError} = 0;
12108 $dbh->do("ALTER TABLE overduerules_transport_types ADD COLUMN letternumber INT(1) NOT NULL DEFAULT 1 AFTER id");
12109 $dbh->{PrintError} = $print_error;
12111 print "Upgrade to $DBversion done (Bug 16007: Make sure overduerules_transport_types.letternumber exists)\n";
12112 SetVersion($DBversion);
12115 $DBversion = "3.23.00.042";
12116 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
12118 $dbh->do(q{
12119 ALTER TABLE items CHANGE new new_status VARCHAR(32) NULL;
12121 $dbh->do(q{
12122 ALTER TABLE deleteditems CHANGE new new_status VARCHAR(32) NULL;
12124 $dbh->do(q{
12125 UPDATE systempreferences SET value=REPLACE(value, '"items.new"', '"items.new_status"') WHERE variable="automatic_item_modification_by_age_configuration";
12128 print "Upgrade to $DBversion done (Bug 16004 - Replace items.new with items.new_status)\n";
12129 SetVersion($DBversion);
12132 $DBversion = "3.23.00.043";
12133 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
12134 $dbh->do(q{
12135 UPDATE systempreferences SET value="" WHERE value IS NULL;
12138 print "Upgrade to $DBversion done (Bug 16070 - Empty (undef) system preferences may cause some issues in combination with memcache)\n";
12139 SetVersion($DBversion);
12142 $DBversion = "3.23.00.044";
12143 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
12144 $dbh->do(q{
12145 INSERT IGNORE INTO systempreferences (variable,value,explanation,options,type) VALUES
12146 ('GoogleOpenIDConnect', '0', NULL, 'if ON, allows the use of Google OpenID Connect for login', 'YesNo'),
12147 ('GoogleOAuth2ClientID', '', NULL, 'Client ID for the web app registered with Google', 'Free'),
12148 ('GoogleOAuth2ClientSecret', '', NULL, 'Client Secret for the web app registered with Google', 'Free'),
12149 ('GoogleOpenIDConnectDomain', '', NULL, 'Restrict OpenID Connect to this domain (or subdomains of this domain). Leave blank for all Google domains', 'Free');
12152 print "Upgrade to $DBversion done (Bug 10988 - Allow login via Google OAuth2 (OpenID Connect))\n";
12153 SetVersion($DBversion);
12156 $DBversion = "3.23.00.045";
12157 if ( CheckVersion($DBversion) ) {
12158 ## Holds details for vendors supplying goods by EDI
12159 $dbh->do(q{
12160 CREATE TABLE IF NOT EXISTS vendor_edi_accounts (
12161 id INT(11) NOT NULL auto_increment,
12162 description TEXT NOT NULL,
12163 host VARCHAR(40),
12164 username VARCHAR(40),
12165 password VARCHAR(40),
12166 last_activity DATE,
12167 vendor_id INT(11) REFERENCES aqbooksellers( id ),
12168 download_directory TEXT,
12169 upload_directory TEXT,
12170 san VARCHAR(20),
12171 id_code_qualifier VARCHAR(3) default '14',
12172 transport VARCHAR(6) default 'FTP',
12173 quotes_enabled TINYINT(1) not null default 0,
12174 invoices_enabled TINYINT(1) not null default 0,
12175 orders_enabled TINYINT(1) not null default 0,
12176 responses_enabled TINYINT(1) not null default 0,
12177 auto_orders TINYINT(1) not null default 0,
12178 shipment_budget INTEGER(11) REFERENCES aqbudgets( budget_id ),
12179 PRIMARY KEY (id),
12180 KEY vendorid (vendor_id),
12181 KEY shipmentbudget (shipment_budget),
12182 CONSTRAINT vfk_vendor_id FOREIGN KEY ( vendor_id ) REFERENCES aqbooksellers ( id ),
12183 CONSTRAINT vfk_shipment_budget FOREIGN KEY ( shipment_budget ) REFERENCES aqbudgets ( budget_id )
12184 ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
12187 ## Hold the actual edifact messages with links to associated baskets
12188 $dbh->do(q{
12189 CREATE TABLE IF NOT EXISTS edifact_messages (
12190 id INT(11) NOT NULL auto_increment,
12191 message_type VARCHAR(10) NOT NULL,
12192 transfer_date DATE,
12193 vendor_id INT(11) REFERENCES aqbooksellers( id ),
12194 edi_acct INTEGER REFERENCES vendor_edi_accounts( id ),
12195 status TEXT,
12196 basketno INT(11) REFERENCES aqbasket( basketno),
12197 raw_msg MEDIUMTEXT,
12198 filename TEXT,
12199 deleted BOOLEAN NOT NULL DEFAULT 0,
12200 PRIMARY KEY (id),
12201 KEY vendorid ( vendor_id),
12202 KEY ediacct (edi_acct),
12203 KEY basketno ( basketno),
12204 CONSTRAINT emfk_vendor FOREIGN KEY ( vendor_id ) REFERENCES aqbooksellers ( id ),
12205 CONSTRAINT emfk_edi_acct FOREIGN KEY ( edi_acct ) REFERENCES vendor_edi_accounts ( id ),
12206 CONSTRAINT emfk_basketno FOREIGN KEY ( basketno ) REFERENCES aqbasket ( basketno )
12207 ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
12210 ## invoices link back to the edifact message it was generated from
12211 $dbh->do(q{
12212 ALTER TABLE aqinvoices ADD COLUMN message_id INT(11) REFERENCES edifact_messages( id );
12215 ## clean up link on deletes
12216 $dbh->do(q{
12217 ALTER TABLE aqinvoices ADD CONSTRAINT edifact_msg_fk FOREIGN KEY ( message_id ) REFERENCES edifact_messages ( id ) ON DELETE SET NULL;
12220 ## Hold the supplier ids from quotes for ordering
12221 ## although this is an EAN-13 article number the standard says 35 characters ???
12222 $dbh->do(q{
12223 ALTER TABLE aqorders ADD COLUMN line_item_id VARCHAR(35);
12226 ## The suppliers unique reference usually a quotation line number ('QLI')
12227 ## Otherwise Suppliers unique orderline reference ('SLI')
12228 $dbh->do(q{
12229 ALTER TABLE aqorders ADD COLUMN suppliers_reference_number VARCHAR(35);
12231 $dbh->do(q{
12232 ALTER TABLE aqorders ADD COLUMN suppliers_reference_qualifier VARCHAR(3);
12234 $dbh->do(q{
12235 ALTER TABLE aqorders ADD COLUMN suppliers_report text;
12238 ## hold the EAN/SAN used in ordering
12239 $dbh->do(q{
12240 CREATE TABLE IF NOT EXISTS edifact_ean (
12241 ee_id int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,
12242 description VARCHAR(128) NULL DEFAULT NULL,
12243 branchcode VARCHAR(10) NOT NULL REFERENCES branches (branchcode),
12244 ean VARCHAR(15) NOT NULL,
12245 id_code_qualifier VARCHAR(3) NOT NULL DEFAULT '14',
12246 CONSTRAINT efk_branchcode FOREIGN KEY ( branchcode ) REFERENCES branches ( branchcode )
12247 ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
12250 ## Add a permission for managing EDI
12251 $dbh->do(q{
12252 INSERT INTO permissions (module_bit, code, description) values (11, 'edi_manage', 'Manage EDIFACT transmissions');
12255 print "Upgrade to $DBversion done (Bug 7736 - Edifact QUOTE and ORDER functionality))\n";
12256 SetVersion($DBversion);
12259 $DBversion = "3.23.00.046";
12260 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
12262 $dbh->do(q{
12263 ALTER TABLE vendor_edi_accounts ADD COLUMN plugin VARCHAR(256) NOT NULL DEFAULT "";
12266 print "Upgrade to $DBversion done (Bug 15630 - Make Edifact module pluggable))\n";
12267 SetVersion($DBversion);
12270 $DBversion = "3.23.00.047";
12271 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
12273 $dbh->do(q{
12274 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');
12276 $dbh->do(q{
12277 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');
12280 print "Upgrade to $DBversion done (Bug 15008 - Add custom HTML areas to circulation and reports home pages)\n";
12281 SetVersion($DBversion);
12284 $DBversion = "3.23.00.048";
12285 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
12286 $dbh->do(q{
12287 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';
12290 print "Upgrade to $DBversion done (Bug 5979 - Add separate OPACISBD system preference)\n";
12291 SetVersion($DBversion);
12296 $DBversion = "3.23.00.049";
12297 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
12298 my $dbh = C4::Context->dbh;
12299 my ( $column_has_been_used ) = $dbh->selectrow_array(q|
12300 SELECT COUNT(*)
12301 FROM borrower_attributes
12302 WHERE password IS NOT NULL
12305 if ( $column_has_been_used ) {
12306 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.|;
12307 } else {
12308 $dbh->do(q|
12309 ALTER TABLE borrower_attribute_types DROP column password_allowed
12311 $dbh->do(q|
12312 ALTER TABLE borrower_attributes DROP column password;
12315 print "Upgrade to $DBversion done (Bug 12267 - Allow password option in Patron Attribute non functional)\n";
12316 SetVersion($DBversion);
12320 $DBversion = "3.23.00.050";
12321 if ( CheckVersion($DBversion) ) {
12323 $dbh->do(q|INSERT IGNORE INTO systempreferences (variable,value,explanation,options,type)
12324 VALUES('SearchEngine','Zebra','Choose Search Engine','','Choice')|);
12327 $dbh->do(q|DROP TABLE IF EXISTS search_marc_to_field|);
12328 $dbh->do(q|DROP TABLE IF EXISTS search_marc_map|);
12329 $dbh->do(q|DROP TABLE IF EXISTS search_field|);
12331 # This specifies the fields that will be stored in the search engine.
12332 $dbh->do(q|
12333 CREATE TABLE `search_field` (
12334 `id` int(11) NOT NULL AUTO_INCREMENT,
12335 `name` varchar(255) NOT NULL COMMENT 'the name of the field as it will be stored in the search engine',
12336 `label` varchar(255) NOT NULL COMMENT 'the human readable name of the field, for display',
12337 `type` ENUM('', 'string', 'date', 'number', 'boolean', 'sum') NOT NULL COMMENT 'what type of data this holds, relevant when storing it in the search engine',
12338 PRIMARY KEY (`id`),
12339 UNIQUE KEY (`name`)
12340 ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci
12342 # This contains a MARC field specifier for a given index, marc type, and marc
12343 # field.
12344 $dbh->do(q|
12345 CREATE TABLE `search_marc_map` (
12346 id int(11) NOT NULL AUTO_INCREMENT,
12347 index_name ENUM('biblios','authorities') NOT NULL COMMENT 'what storage index this map is for',
12348 marc_type ENUM('marc21', 'unimarc', 'normarc') NOT NULL COMMENT 'what MARC type this map is for',
12349 marc_field VARCHAR(255) NOT NULL COMMENT 'the MARC specifier for this field',
12350 PRIMARY KEY(`id`),
12351 unique key( index_name, marc_field, marc_type),
12352 INDEX (`index_name`)
12353 ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci
12356 # This joins the two search tables together. We can have any combination:
12357 # one marc field could have many search fields (maybe you want one value
12358 # to go to 'author' and 'corporate-author) and many marc fields could go
12359 # to one search field (e.g. all the various author fields going into
12360 # 'author'.)
12362 # a note about the sort field:
12363 # * if all the entries for a mapping are 'null', nothing special is done with that mapping.
12364 # * if any of the entries are not null, then a __sort field is created in ES for this mapping. In this case:
12365 # * any mapping with sort == false WILL NOT get copied into a __sort field
12366 # * any mapping with sort == true or is null WILL get copied into a __sort field
12367 # * any sorts on the field name will be applied to $fieldname.'__sort' instead.
12368 # this means that we can have search for author that includes 1xx, 245$c, and 7xx, but the sort only applies to 1xx.
12370 $dbh->do(q|
12371 CREATE TABLE `search_marc_to_field` (
12372 search_marc_map_id int(11) NOT NULL,
12373 search_field_id int(11) NOT NULL,
12374 facet boolean DEFAULT FALSE COMMENT 'true if a facet field should be generated for this',
12375 suggestible boolean DEFAULT FALSE COMMENT 'true if this field can be used to generate suggestions for browse',
12376 sort boolean DEFAULT NULL COMMENT 'true/false creates special sort handling, null doesn''t',
12377 PRIMARY KEY(search_marc_map_id, search_field_id),
12378 FOREIGN KEY(search_marc_map_id) REFERENCES search_marc_map(id) ON DELETE CASCADE ON UPDATE CASCADE,
12379 FOREIGN KEY(search_field_id) REFERENCES search_field(id) ON DELETE CASCADE ON UPDATE CASCADE
12380 ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci
12383 print "WARNING: If you plan to use Elasticsearch you should go to 'Home › Administration › Search engine configuration' and reset the mappings\n";
12384 print "Upgrade to $DBversion done (Bug 12478 - Elasticsearch support for Koha)\n";
12385 SetVersion($DBversion);
12389 $DBversion = "3.23.00.051";
12390 if ( CheckVersion($DBversion) ) {
12391 $dbh->do(q{
12392 ALTER TABLE edifact_messages
12393 DROP FOREIGN KEY emfk_vendor,
12394 DROP FOREIGN KEY emfk_edi_acct,
12395 DROP FOREIGN KEY emfk_basketno;
12398 $dbh->do(q{
12399 ALTER TABLE edifact_messages
12400 ADD CONSTRAINT emfk_vendor FOREIGN KEY ( vendor_id ) REFERENCES aqbooksellers ( id ) ON DELETE CASCADE ON UPDATE CASCADE,
12401 ADD CONSTRAINT emfk_edi_acct FOREIGN KEY ( edi_acct ) REFERENCES vendor_edi_accounts ( id ) ON DELETE CASCADE ON UPDATE CASCADE,
12402 ADD CONSTRAINT emfk_basketno FOREIGN KEY ( basketno ) REFERENCES aqbasket ( basketno ) ON DELETE CASCADE ON UPDATE CASCADE;
12405 print "Upgrade to $DBversion done (Bug 16354 - Fix FK constraints for edifact_messages table)\n";
12406 SetVersion($DBversion);
12410 $DBversion = "3.23.00.052";
12411 if ( CheckVersion($DBversion) ) {
12412 ## Insert permission
12414 $dbh->do(q{
12415 INSERT IGNORE INTO permissions (module_bit, code, description) VALUES
12416 (13, 'upload_general_files', 'Upload any file'),
12417 (13, 'upload_manage', 'Manage uploaded files');
12419 ## Update user_permissions for current users (check count in uploaded_files)
12420 ## Note 9 == edit_catalogue and 13 == tools
12421 ## We do not insert if someone is superlibrarian, does not have edit_catalogue,
12422 ## or already has all tools
12424 $dbh->do(q{
12425 INSERT IGNORE INTO user_permissions (borrowernumber, module_bit, code)
12426 SELECT borrowernumber, 13, 'upload_general_files'
12427 FROM borrowers bo
12428 WHERE flags<>1 AND flags & POW(2,13) = 0 AND
12429 ( flags & POW(2,9) > 0 OR
12430 (SELECT COUNT(*) FROM user_permissions
12431 WHERE borrowernumber=bo.borrowernumber AND module_bit=9 ) > 0 )
12432 AND ( SELECT COUNT(*) FROM uploaded_files ) > 0
12435 print "Upgrade to $DBversion done (Bug 14686 - New menu option and permission for file uploading)\n";
12436 SetVersion($DBversion);
12439 $DBversion = "3.23.00.053";
12440 if ( CheckVersion($DBversion) ) {
12441 my $letters = $dbh->selectall_arrayref(
12443 SELECT code, name
12444 FROM letter
12445 WHERE message_transport_type="email"
12446 |, { Slice => {} }
12448 for my $letter (@$letters) {
12449 $dbh->do(
12451 UPDATE letter
12452 SET name = ?
12453 WHERE code = ?
12454 AND message_transport_type <> "email"
12455 |, undef, $letter->{name}, $letter->{code}
12459 print "Upgrade to $DBversion done (Bug 16217 - Notice' names may have diverged)\n";
12460 SetVersion($DBversion);
12463 $DBversion = "3.23.00.054";
12464 if ( CheckVersion($DBversion) ) {
12465 $dbh->do(q{
12466 ALTER TABLE branch_item_rules ADD COLUMN hold_fulfillment_policy ENUM('any', 'homebranch', 'holdingbranch') NOT NULL DEFAULT 'any' AFTER holdallowed;
12468 $dbh->do(q{
12469 ALTER TABLE default_branch_circ_rules ADD COLUMN hold_fulfillment_policy ENUM('any', 'homebranch', 'holdingbranch') NOT NULL DEFAULT 'any' AFTER holdallowed;
12471 $dbh->do(q{
12472 ALTER TABLE default_branch_item_rules ADD COLUMN hold_fulfillment_policy ENUM('any', 'homebranch', 'holdingbranch') NOT NULL DEFAULT 'any' AFTER holdallowed;
12474 $dbh->do(q{
12475 ALTER TABLE default_circ_rules ADD COLUMN hold_fulfillment_policy ENUM('any', 'homebranch', 'holdingbranch') NOT NULL DEFAULT 'any' AFTER holdallowed;
12478 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";
12479 SetVersion($DBversion);
12482 $DBversion = "3.23.00.055";
12483 if ( CheckVersion($DBversion) ) {
12484 $dbh->do(q{
12485 ALTER TABLE reserves ADD COLUMN itemtype VARCHAR(10) NULL DEFAULT NULL AFTER suspend_until;
12487 $dbh->do(q{
12488 ALTER TABLE reserves ADD KEY `itemtype` (`itemtype`);
12490 $dbh->do(q{
12491 ALTER TABLE reserves ADD CONSTRAINT `reserves_ibfk_5` FOREIGN KEY (`itemtype`) REFERENCES `itemtypes` (`itemtype`) ON DELETE CASCADE ON UPDATE CASCADE;
12493 $dbh->do(q{
12494 ALTER TABLE old_reserves ADD COLUMN itemtype VARCHAR(10) NULL DEFAULT NULL AFTER suspend_until;
12496 $dbh->do(q{
12497 ALTER TABLE old_reserves ADD KEY `itemtype` (`itemtype`);
12499 $dbh->do(q{
12500 ALTER TABLE old_reserves ADD CONSTRAINT `old_reserves_ibfk_4` FOREIGN KEY (`itemtype`) REFERENCES `itemtypes` (`itemtype`) ON DELETE CASCADE ON UPDATE CASCADE;
12503 $dbh->do(q{
12504 INSERT IGNORE INTO systempreferences ( `variable`, `value`, `options`, `explanation`, `type` ) VALUES
12505 ('AllowHoldItemTypeSelection','0','','If enabled, patrons and staff will be able to select the itemtype when placing a hold','YesNo');
12508 print "Upgrade to $DBversion done (Bug 15533 - Allow patrons and librarians to select itemtype when placing hold)\n";
12509 SetVersion($DBversion);
12512 $DBversion = "3.23.00.056";
12513 if ( CheckVersion($DBversion) ) {
12514 $dbh->do(q{
12515 INSERT IGNORE INTO systempreferences ( `variable`, `value`, `options`, `explanation`, `type` ) VALUES
12516 ('NoIssuesChargeGuarantees','','','Define maximum amount withstanding before check outs are blocked','Integer');
12519 print "Upgrade to $DBversion done (Bug 14577 - Allow restriction of checkouts based on fines of guarantor/guarantee)\n";
12520 SetVersion($DBversion);
12523 $DBversion = "3.23.00.057";
12524 if ( CheckVersion($DBversion) ) {
12525 $dbh->do(q{
12526 ALTER TABLE aqbasket ADD COLUMN is_standing TINYINT(1) NOT NULL DEFAULT 0 AFTER branch;
12529 print "Upgrade to $DBversion done (Bug 15531 - Add support for standing orders)\n";
12530 SetVersion($DBversion);
12533 $DBversion = "3.23.00.058";
12534 if ( CheckVersion($DBversion) ) {
12536 my ($count_imageurl) = $dbh->selectrow_array(q|
12537 SELECT COUNT(*)
12538 FROM authorised_values
12539 WHERE imageurl IS NOT NULL
12540 AND imageurl <> ""
12543 unless ($count_imageurl) {
12544 if ( C4::Context->preference('AuthorisedValueImages')
12545 or C4::Context->preference('StaffAuthorisedValueImages') )
12547 $dbh->do(q|
12548 UPDATE systempreferences
12549 SET value = 0
12550 WHERE variable = "AuthorisedValueImages"
12551 or variable = "StaffAuthorisedValueImages"
12553 warn "The system preferences AuthorisedValueImages and StaffAuthorisedValueImages have been turned off\n";
12554 warn "authorised_values.imageurl is not populated, that means you are not using this feature\n";
12557 else {
12558 warn "At least one authorised value has an icon defined (imageurl)\n";
12559 warn "The system preference AuthorisedValueImages or StaffAuthorisedValueImages could be turned off if you are not aware of this feature\n";
12562 print "Upgrade to $DBversion done (Bug 16041 - StaffAuthorisedValueImages & AuthorisedValueImages preferences - impact on search performance)\n";
12563 SetVersion($DBversion);
12566 $DBversion = "3.23.00.059";
12567 if ( CheckVersion($DBversion) ) {
12568 $dbh->do(q{
12569 DELETE FROM systempreferences WHERE variable="AuthorisedValueImages" OR variable="StaffAuthorisedValueImages";
12572 print "Upgrade to $DBversion done (Bug 16167 - Remove prefs to drive authorised value images)\n";
12573 SetVersion($DBversion);
12576 $DBversion = "3.23.00.060";
12577 if ( CheckVersion($DBversion) ) {
12578 $dbh->do(q{
12579 INSERT IGNORE INTO systempreferences ( value, variable, options, explanation,type )
12580 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';
12583 print "Upgrade to $DBversion done (Bug 12528 - Enable staff to deny message setting access to patrons on the OPAC)\n";
12584 SetVersion($DBversion);
12587 $DBversion = "3.23.00.061";
12588 if ( CheckVersion($DBversion) ) {
12589 my ( $cnt ) = $dbh->selectrow_array( q|
12590 SELECT COUNT(*) FROM items it
12591 LEFT JOIN biblio bi ON bi.biblionumber=it.biblionumber
12592 LEFT JOIN biblioitems bii USING (biblioitemnumber)
12593 WHERE bi.biblionumber IS NULL
12595 if( $cnt ) {
12596 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";
12597 } else {
12598 # now add FK
12599 $dbh->do( q|
12600 ALTER TABLE items
12601 ADD FOREIGN KEY (`biblionumber`) REFERENCES `biblio` (`biblionumber`) ON DELETE CASCADE ON UPDATE CASCADE
12603 print "Upgrade to $DBversion done (Bug 16170 - Add FK for biblionumber in items)\n";
12605 SetVersion($DBversion);
12608 $DBversion = "3.23.00.062";
12609 if ( CheckVersion($DBversion) ) {
12610 $dbh->do( q|
12611 ALTER TABLE aqorders DROP COLUMN budgetgroup_id;
12613 print "Upgrade to $DBversion done (Bug 16414 - aqorders.budgetgroup_id has never been used and can be removed)\n";
12614 SetVersion($DBversion);
12617 $DBversion = "3.23.00.063";
12618 if ( CheckVersion($DBversion) ) {
12619 $dbh->do(q{
12620 UPDATE letter SET branchcode='' WHERE branchcode IS NULL;
12622 $dbh->do(q{
12623 ALTER TABLE letter MODIFY COLUMN branchcode varchar(10) NOT NULL DEFAULT ''
12625 $dbh->do(q{
12626 ALTER TABLE permissions MODIFY COLUMN code varchar(64) NOT NULL DEFAULT '';
12628 print "Upgrade to $DBversion done (Bug 16402: Fix DB structure to work on MySQL 5.7)\n";
12629 SetVersion($DBversion);
12632 $DBversion = "3.23.00.064";
12633 if ( CheckVersion($DBversion) ) {
12634 $dbh->do(q{
12635 ALTER TABLE creator_layouts MODIFY layout_name char(25) NOT NULL DEFAULT 'DEFAULT';
12637 print "Upgrade to $DBversion done (Bug 15086 - Creators layout and template sql has warnings)\n";
12638 SetVersion($DBversion);
12641 $DBversion = "16.05.00.000";
12642 if ( CheckVersion($DBversion) ) {
12643 print "Upgrade to $DBversion done (Koha 16.05)\n";
12644 SetVersion($DBversion);
12647 $DBversion = "16.06.00.000";
12648 if ( CheckVersion($DBversion) ) {
12649 print "Upgrade to $DBversion done (Koha 16.06 - starting a new dev line at KohaCon16 in Thessaloniki, Greece! Koha is great!)\n";
12650 SetVersion($DBversion);
12653 $DBversion = "16.06.00.001";
12654 if ( CheckVersion($DBversion) ) {
12655 $dbh->do(q{
12656 UPDATE accountlines SET accounttype='HE', description=itemnumber WHERE (description REGEXP '^Hold waiting too long [0-9]+') AND accounttype='F';
12659 print "Upgrade to $DBversion done (Bug 16200 - 'Hold waiting too long' fee has a translation problem)\n";
12660 SetVersion($DBversion);
12663 $DBversion = "16.06.00.002";
12664 if ( CheckVersion($DBversion) ) {
12665 unless ( column_exists('borrowers', 'updated_on') ) {
12666 $dbh->do(q{
12667 ALTER TABLE borrowers
12668 ADD COLUMN updated_on timestamp NULL DEFAULT CURRENT_TIMESTAMP
12669 ON UPDATE CURRENT_TIMESTAMP
12670 AFTER privacy_guarantor_checkouts;
12672 $dbh->do(q{
12673 ALTER TABLE deletedborrowers
12674 ADD COLUMN updated_on timestamp NULL DEFAULT CURRENT_TIMESTAMP
12675 ON UPDATE CURRENT_TIMESTAMP
12676 AFTER privacy_guarantor_checkouts;
12680 print "Upgrade to $DBversion done (Bug 10459 - borrowers should have a timestamp)\n";
12681 SetVersion($DBversion);
12684 $DBversion = "16.06.00.003";
12685 if ( CheckVersion($DBversion) ) {
12686 $dbh->do(q{
12687 INSERT IGNORE INTO systempreferences ( variable, value, options, explanation, type )
12688 SELECT 'MaxItemsToProcessForBatchMod', value, NULL, 'Process up to a given number of items in a single item modification batch.', 'Integer' FROM systempreferences WHERE variable='MaxItemsForBatch';
12690 $dbh->do(q{
12691 INSERT IGNORE INTO systempreferences ( variable, value, options, explanation, type )
12692 SELECT 'MaxItemsToDisplayForBatchDel', value, NULL, 'Display up to a given number of items in a single item deletionbatch.', 'Integer' FROM systempreferences WHERE variable='MaxItemsForBatch';
12694 $dbh->do(q{
12695 DELETE FROM systempreferences WHERE variable="MaxItemsForBatch";
12698 print "Upgrade to $DBversion done (Bug 11490 - MaxItemsForBatch should be split into two new prefs)\n";
12699 SetVersion($DBversion);
12702 $DBversion = '16.06.00.004';
12703 if ( CheckVersion($DBversion) ) {
12704 $dbh->do(q{
12705 INSERT IGNORE INTO systempreferences ( variable, value, options, explanation, type )
12706 SELECT 'OPACXSLTListsDisplay', COALESCE(value,''), '', 'Enable XSLT stylesheet control over lists pages display on OPAC', 'Free'
12707 FROM systempreferences WHERE variable='OPACXSLTResultsDisplay';
12710 $dbh->do(q{
12711 INSERT IGNORE INTO systempreferences ( variable, value, options, explanation, type )
12712 SELECT 'XSLTListsDisplay', COALESCE(value,''), '', 'Enable XSLT stylesheet control over lists pages display on intranet', 'Free'
12713 FROM systempreferences WHERE variable='XSLTResultsDisplay';
12716 print "Upgrade to $DBversion done (Bug 15485: Allow choosing different XSLTs for lists)\n";
12717 SetVersion($DBversion);
12720 $DBversion = '16.06.00.005';
12721 if ( CheckVersion($DBversion) ) {
12722 $dbh->do(q{
12723 UPDATE `systempreferences` set options = 'US|FR|CH' where variable = 'CurrencyFormat';
12726 print "Upgrade to $DBversion done (Bug 16768 - Add official number format for Switzerland: 1'234'567.89)\n";
12727 SetVersion($DBversion);
12730 $DBversion = "16.06.00.006";
12731 if ( CheckVersion($DBversion) ) {
12732 $dbh->do(q{
12733 CREATE TABLE `refund_lost_item_fee_rules` (
12734 `branchcode` varchar(10) NOT NULL default '',
12735 `refund` tinyint(1) NOT NULL default 0,
12736 PRIMARY KEY (`branchcode`)
12737 ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
12739 $dbh->do(q{
12740 INSERT IGNORE INTO systempreferences (variable,value,explanation,options,type)
12741 VALUES( 'RefundLostOnReturnControl',
12742 'CheckinLibrary',
12743 'If a lost item is returned, choose which branch to pick rules for refunding.',
12744 'CheckinLibrary|PatronLibrary|ItemHomeBranch|ItemHoldingbranch',
12745 'Choice')
12747 # Pick the old syspref as the default rule
12748 $dbh->do(q{
12749 INSERT INTO refund_lost_item_fee_rules (branchcode,refund)
12750 SELECT '*', COALESCE(value,'1') FROM systempreferences WHERE variable='RefundLostItemFeeOnReturn'
12752 # Delete the old syspref
12753 $dbh->do(q{
12754 DELETE IGNORE FROM systempreferences
12755 WHERE variable='RefundLostItemFeeOnReturn'
12758 print "Upgrade to $DBversion done (Bug 14048: Change RefundLostItemFeeOnReturn to be branch specific)\n";
12759 SetVersion($DBversion);
12762 $DBversion = '16.06.00.007';
12763 if ( CheckVersion($DBversion) ) {
12764 $dbh->do(q{
12765 INSERT IGNORE INTO systempreferences (variable,value,explanation,options,type)
12766 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');
12769 print "Upgrade to $DBversion done (Bug 3534 - Patron quick add form)\n";
12770 SetVersion($DBversion);
12773 $DBversion = '16.06.00.008';
12774 if ( CheckVersion($DBversion) ) {
12775 $dbh->do(q{
12776 INSERT IGNORE INTO systempreferences (variable,value,options,explanation,type)
12777 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');
12779 $dbh->do(q{
12780 ALTER TABLE categories
12781 ADD COLUMN `checkprevcheckout` varchar(7) NOT NULL default 'inherit'
12782 AFTER `default_privacy`;
12784 $dbh->do(q{
12785 ALTER TABLE borrowers
12786 ADD COLUMN `checkprevcheckout` varchar(7) NOT NULL default 'inherit'
12787 AFTER `privacy_guarantor_checkouts`;
12789 $dbh->do(q{
12790 ALTER TABLE deletedborrowers
12791 ADD COLUMN `checkprevcheckout` varchar(7) NOT NULL default 'inherit'
12792 AFTER `privacy_guarantor_checkouts`;
12795 print "Upgrade to $DBversion done (Bug 6906 - show 'Borrower has previously issued \$ITEM' alert on checkout)\n";
12796 SetVersion($DBversion);
12799 $DBversion = '16.06.00.009';
12800 if ( CheckVersion($DBversion) ) {
12801 $dbh->do(q{
12802 INSERT IGNORE INTO systempreferences (variable,value,options,explanation,type)
12803 VALUES ('IntranetCatalogSearchPulldown','0',NULL,'Show a search field pulldown for \"Search the catalog\" boxes. ','YesNo');
12806 print "Upgrade to $DBversion done (Bug 14902 - Add qualifier menu to staff side 'Search the Catalog')\n";
12807 SetVersion($DBversion);
12810 $DBversion = '16.06.00.010';
12811 if ( CheckVersion($DBversion) ) {
12812 $dbh->do(q{
12813 INSERT IGNORE INTO systempreferences (variable,value,options,explanation,type)
12814 VALUES ('MaxOpenSuggestions','',NULL,'Limit the number of open suggestions a patron can have at once, unlimited if blank','Integer')
12817 print "Upgrade to $DBversion done (Bug 15128 - Add ability to limit the number of open purchase suggestions a patron can make)\n";
12818 SetVersion($DBversion);
12821 $DBversion = '16.06.00.011';
12822 if ( CheckVersion($DBversion) ) {
12823 $dbh->do(q{
12824 INSERT IGNORE INTO systempreferences (variable,value,options,explanation,type) VALUES
12825 ('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'),
12826 ('NovelistSelectStaffView','tab','tab|above|below','Where to display Novelist Select content','Choice');
12829 print "Upgrade to $DBversion done (Bug 11606 - Novelist Select in Staff Client)\n";
12830 SetVersion($DBversion);
12833 $DBversion = '16.06.00.012';
12834 if ( CheckVersion($DBversion) ) {
12835 $dbh->do(q{
12836 ALTER TABLE virtualshelves MODIFY COLUMN created_on DATETIME not NULL;
12839 print "Upgrade to $DBversion done (Bug 16573 - Web installer fails to load structure and sample data on MySQL 5.7)\n";
12840 SetVersion($DBversion);
12843 $DBversion = '16.06.00.013';
12844 if ( CheckVersion($DBversion) ) {
12845 $dbh->do(q{
12846 INSERT IGNORE INTO systempreferences (variable, value, options, explanation, type) VALUES
12847 ('OPACResultsLibrary', 'homebranch', 'homebranch|holdingbranch', 'Defines whether the OPAC displays the holding or home branch in search results when using XSLT', 'Choice');
12850 print "Upgrade to $DBversion done (Bug 7441 - Search results showing wrong branch)\n";
12851 SetVersion($DBversion);
12854 $DBversion = "16.06.00.014";
12855 if ( CheckVersion($DBversion) ) {
12856 $dbh->do(q{
12857 ALTER TABLE `action_logs` ADD COLUMN `interface` VARCHAR(30) DEFAULT NULL AFTER `info`;
12860 $dbh->do(q{
12861 ALTER TABLE `action_logs` ADD KEY `interface` (`interface`);
12864 print "Upgrade to $DBversion done (Bug 16829: action_logs should have an 'interface' column)\n";
12865 SetVersion($DBversion);
12868 $DBversion = "16.06.00.015";
12869 if ( CheckVersion($DBversion) ) {
12870 $dbh->do(q{
12871 INSERT IGNORE INTO systempreferences ( variable, value, options, explanation, type ) VALUES
12872 ('HoldsLog','0',NULL,'If ON, log create/cancel/suspend/resume actions on holds.','YesNo');
12875 print "Upgrade to $DBversion done (Bug 14642: Add logging of hold modifications)\n";
12876 SetVersion($DBversion);
12879 $DBversion = "16.06.00.016";
12880 if ( CheckVersion($DBversion) ) {
12881 $dbh->do(q{
12882 update marc_subfield_structure set defaultvalue=REPLACE(defaultvalue, 'YYYY', '<<YYYY>>') where defaultvalue like "%YYYY%" and defaultvalue not like "%<<YYYY>>%";
12884 $dbh->do(q{
12885 update marc_subfield_structure set defaultvalue=REPLACE(defaultvalue, 'MM', '<<MM>>') where defaultvalue like "%MM%" and defaultvalue not like "%<<MM>>%";
12887 $dbh->do(q{
12888 update marc_subfield_structure set defaultvalue=REPLACE(defaultvalue, 'DD', '<<DD>>') where defaultvalue like "%DD%" and defaultvalue not like "%<<DD>>%";
12890 $dbh->do(q{
12891 update marc_subfield_structure set defaultvalue=REPLACE(defaultvalue, 'user', '<<USER>>') where defaultvalue like "%user%" and defaultvalue not like "%<<USER>>%";
12894 print "Upgrade to $DBversion done (Bug 7045 - Default-value substitution inconsistent)\n";
12895 SetVersion($DBversion);
12898 $DBversion = "16.06.00.017";
12899 if ( CheckVersion($DBversion) ) {
12900 $dbh->do(q{
12901 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');
12904 print "Upgrade to $DBversion done (Bug 10848 - Allow configuration of mandatory/required fields on the suggestion form in OPAC)\n";
12905 SetVersion($DBversion);
12908 $DBversion = "16.06.00.018";
12909 if ( CheckVersion($DBversion) ) {
12910 $dbh->do(q{
12911 ALTER TABLE issuingrules ADD COLUMN holds_per_record SMALLINT(6) NOT NULL DEFAULT 1 AFTER reservesallowed;
12914 print "Upgrade to $DBversion done (Bug 14695 - Add ability to place multiple item holds on a given record per patron)\n";
12915 SetVersion($DBversion);
12918 $DBversion = "16.06.00.019";
12919 if ( CheckVersion($DBversion) ) {
12920 $dbh->do(q{
12921 ALTER TABLE reviews CHANGE COLUMN approved approved tinyint(4) DEFAULT 0;
12923 $dbh->do(q{
12924 UPDATE reviews SET approved=0 WHERE approved IS NULL;
12927 print "Upgrade to $DBversion done (Bug 15839 - Move the reviews related code to Koha::Reviews)\n";
12928 SetVersion($DBversion);
12931 $DBversion = "16.06.00.020";
12932 if ( CheckVersion($DBversion) ) {
12933 $dbh->do(q{
12934 INSERT IGNORE INTO systempreferences (variable,value,explanation,options,type) VALUES ('SwitchOnSiteCheckouts', '0', 'Automatically switch an on-site checkout to a normal checkout', NULL, 'YesNo');
12937 print "Upgrade to $DBversion done (Bug 16272 - Transform checkout from on-site checkout to regular checkout)\n";
12938 SetVersion($DBversion);
12941 $DBversion = "16.06.00.021";
12942 if ( CheckVersion($DBversion) ) {
12943 $dbh->do(q{
12944 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');
12947 print "Upgrade to $DBversion done (Bug 16275 - Prevent patron self registration if the email already filled in borrowers.email)\n";
12948 SetVersion($DBversion);
12951 $DBversion = "16.06.00.022";
12952 if ( CheckVersion($DBversion) ) {
12953 $dbh->do(q{
12954 INSERT IGNORE INTO `permissions`
12955 (module_bit, code, description) VALUES
12956 (16, 'delete_reports', 'Delete SQL reports');
12958 $dbh->do(q{
12959 INSERT IGNORE INTO user_permissions
12960 (borrowernumber, module_bit,code)
12961 SELECT borrowernumber,module_bit,'delete_reports'
12962 FROM user_permissions
12963 WHERE module_bit=16 AND code='create_reports';
12966 print "Upgrade to $DBversion done (Bug 16978 - Add delete reports user permission)\n";
12967 SetVersion($DBversion);
12970 $DBversion = "16.06.00.023";
12971 if ( CheckVersion($DBversion) ) {
12972 my $pref = C4::Context->preference('timeout');
12973 if( !$pref || $pref eq '12000000' ) {
12974 # update if pref is null or equals old default value
12975 $dbh->do(q|
12976 UPDATE systempreferences SET value = '1d', type = 'Free'
12977 WHERE variable = 'timeout'
12979 print "Upgrade to $DBversion done (Bug 17187)\nNote: Pref value for timeout has been adjusted.\n";
12980 } else {
12981 # only update pref type
12982 $dbh->do(q|
12983 UPDATE systempreferences SET type = 'Free'
12984 WHERE variable = 'timeout'
12986 print "Upgrade to $DBversion done (Bug 17187)\nNote: Pref value for timeout has not been adjusted.\n";
12988 SetVersion($DBversion);
12991 $DBversion = "16.06.00.024";
12992 if ( CheckVersion($DBversion) ) {
12993 $dbh->do(q{
12994 UPDATE language_descriptions SET description = 'Română' WHERE subtag = 'ro' AND type = 'language' AND lang = 'ro';
12997 print "Upgrade to $DBversion done (Bug 16311 - Advanced search language limit typo for Romanian)\n";
12998 SetVersion($DBversion);
13001 $DBversion = "16.06.00.025";
13002 if ( CheckVersion($DBversion) ) {
13003 $dbh->do(q{
13004 ALTER TABLE `subscription` ADD `itemtype` VARCHAR( 10 ) NULL AFTER reneweddate, ADD `previousitemtype` VARCHAR( 10 ) NULL AFTER itemtype;
13006 $dbh->do(q{
13007 INSERT IGNORE INTO systempreferences (variable,value,explanation,options,type) VALUES
13008 ('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');
13011 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";
13012 SetVersion($DBversion);
13015 $DBversion = "16.06.00.026";
13016 if ( CheckVersion($DBversion) ) {
13017 $dbh->do(q{
13018 INSERT IGNORE INTO systempreferences (variable,value,explanation,options,type) VALUES ('PatronSelfRegistrationLibraryList', '', 'Only display libraries listed. If empty, all libraries are displayed.', NULL, 'Free');
13021 print "Upgrade to $DBversion done (Bug 16274 - Make the selfregistration branchcode selection configurable)\n";
13022 SetVersion($DBversion);
13025 $DBversion = "16.06.00.027";
13026 if ( CheckVersion($DBversion) ) {
13027 unless ( column_exists('borrowers', 'lastseen') ) {
13028 $dbh->do(q{
13029 ALTER TABLE borrowers ADD COLUMN lastseen datetime default NULL AFTER updated_on;
13031 $dbh->do(q{
13032 ALTER TABLE deletedborrowers ADD COLUMN lastseen datetime default NULL AFTER updated_on;
13035 $dbh->do(q{
13036 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');
13039 print "Upgrade to $DBversion done (Bug 16276: Add a new pref TrackLastPatronActivity and new column borrowers.lastseen)\n";
13040 SetVersion($DBversion);
13043 $DBversion = '16.06.00.028';
13044 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
13046 print "Attempting upgrade to $DBversion (Bug 17135) ...\n";
13047 my $maintenance_script = C4::Context->config("intranetdir") . "/installer/data/mysql/fix_unclosed_nonaccruing_fines_bug17135.pl";
13048 system("perl $maintenance_script --confirm");
13050 print "Upgrade to $DBversion done (Bug 17135 - Fine for the previous overdue may get overwritten by the next one)\n";
13052 unless ($original_version < TransformToNum("3.23.00.032")) { ## Bug 15675
13053 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";
13054 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";
13056 SetVersion ($DBversion);
13060 $DBversion = "16.06.00.029";
13061 if ( CheckVersion($DBversion) ) {
13062 $dbh->do(q{
13063 UPDATE systempreferences SET type="Choice" WHERE variable="UsageStatsLibraryType";
13065 $dbh->do(q{
13066 UPDATE systempreferences SET value="Canada" WHERE variable="UsageStatsCountry" AND value="CANADA";
13068 $dbh->do(q{
13069 UPDATE systempreferences SET value="Czech Republic" WHERE variable="UsageStatsCountry" AND value="CZ";
13071 $dbh->do(q{
13072 UPDATE systempreferences SET value="United Kingdom" WHERE variable="UsageStatsCountry" AND (value="England" OR value="UK");
13074 $dbh->do(q{
13075 UPDATE systempreferences SET value="Spain" WHERE variable="UsageStatsCountry" AND value="España";
13077 $dbh->do(q{
13078 UPDATE systempreferences SET value="Greece" WHERE variable="UsageStatsCountry" AND value="GR";
13080 $dbh->do(q{
13081 UPDATE systempreferences SET value="Ireland" WHERE variable="UsageStatsCountry" AND value="Irelanbd";
13083 $dbh->do(q{
13084 UPDATE systempreferences SET value="Mexico" WHERE variable="UsageStatsCountry" AND value="México";
13086 $dbh->do(q{
13087 UPDATE systempreferences SET value="Peru" WHERE variable="UsageStatsCountry" AND value="Perú";
13089 $dbh->do(q{
13090 UPDATE systempreferences SET value="Dominican Rep." WHERE variable="UsageStatsCountry" AND value="República Dominicana";
13092 $dbh->do(q{
13093 UPDATE systempreferences SET value="Trinidad & Tob." WHERE variable="UsageStatsCountry" AND value="Trinidad";
13095 $dbh->do(q{
13096 UPDATE systempreferences SET value="Turkey" WHERE variable="UsageStatsCountry" AND value="Türkiye";
13098 $dbh->do(q{
13099 UPDATE systempreferences SET value="USA" WHERE variable="UsageStatsCountry" AND (value="United States" OR value="United States of America" OR value="US");
13101 $dbh->do(q{
13102 UPDATE systempreferences SET value="Zimbabwe" WHERE variable="UsageStatsCountry" AND value="Zimbabbwe";
13105 print "Upgrade to $DBversion done (Bug 14707 - Change UsageStatsCountry from free text to a dropdown list)\n";
13106 SetVersion($DBversion);
13109 $DBversion = "16.06.00.030";
13110 if ( CheckVersion($DBversion) ) {
13111 $dbh->do(q{
13112 INSERT IGNORE INTO systempreferences ( `variable`, `value`, `options`, `explanation`, `type` ) VALUES
13113 ('OPACHoldingsDefaultSortField','first_column','first_column|homebranch|holdingbranch','Default sort field for the holdings table at the OPAC','choice');
13116 print "Upgrade to $DBversion done (Bug 16552 - Add the ability to change the default holdings sort)\n";
13117 SetVersion($DBversion);
13120 $DBversion = "16.06.00.031";
13121 if ( CheckVersion($DBversion) ) {
13122 $dbh->do(q{
13123 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');
13126 print "Upgrade to $DBversion done (Bug 16273 - Prevent selfregistration from printing the borrower password and filling the logging form)\n";
13127 SetVersion($DBversion);
13130 $DBversion = "16.06.00.032";
13131 if ( CheckVersion($DBversion) ) {
13132 $dbh->do(q{
13133 UPDATE marc_subfield_structure SET authorised_value="WITHDRAWN" WHERE authorised_value="WTHDRAWN";
13136 print "Upgrade to $DBversion done (Bug 17357 - WTHDRAWN is still used in installer files)\n";
13137 SetVersion($DBversion);
13141 $DBversion = "16.06.00.033";
13142 if ( CheckVersion($DBversion) ) {
13143 $dbh->do(q{
13144 CREATE TABLE authorised_value_categories (
13145 category_name VARCHAR(32) NOT NULL,
13146 primary key (category_name)
13147 ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
13149 ## Add authorised value categories
13150 $dbh->do(q{
13151 INSERT INTO authorised_value_categories (category_name )
13152 SELECT DISTINCT category FROM authorised_values;
13155 ## Add special categories
13156 $dbh->do(q{
13157 INSERT IGNORE INTO authorised_value_categories( category_name )
13158 VALUES
13159 ('Asort1'),
13160 ('Asort2'),
13161 ('Bsort1'),
13162 ('Bsort2'),
13163 ('SUGGEST'),
13164 ('DAMAGED'),
13165 ('LOST'),
13166 ('REPORT_GROUP'),
13167 ('REPORT_SUBGROUP'),
13168 ('DEPARTMENT'),
13169 ('TERM'),
13170 ('SUGGEST_STATUS'),
13171 ('ITEMTYPECAT');
13174 ## Add very special categories
13175 $dbh->do(q{
13176 INSERT IGNORE INTO authorised_value_categories( category_name )
13177 VALUES
13178 ('branches'),
13179 ('itemtypes'),
13180 ('cn_source');
13183 $dbh->do(q{
13184 INSERT IGNORE INTO authorised_value_categories( category_name )
13185 VALUES
13186 ('WITHDRAWN'),
13187 ('RESTRICTED'),
13188 ('NOT_LOAN'),
13189 ('CCODE'),
13190 ('LOC'),
13191 ('STACK');
13194 ## Update the FK
13195 $dbh->do(q{
13196 ALTER TABLE items_search_fields
13197 DROP FOREIGN KEY items_search_fields_authorised_values_category;
13200 $dbh->do(q{
13201 ALTER TABLE items_search_fields
13202 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;
13205 $dbh->do(q{
13206 ALTER TABLE authorised_values
13207 ADD CONSTRAINT `authorised_values_authorised_values_category` FOREIGN KEY (`category`) REFERENCES `authorised_value_categories` (`category_name`) ON DELETE CASCADE ON UPDATE CASCADE;
13210 $dbh->do(q{
13211 INSERT IGNORE INTO authorised_value_categories( category_name ) SELECT DISTINCT(authorised_value) FROM marc_subfield_structure;
13214 $dbh->do(q{
13215 UPDATE marc_subfield_structure SET authorised_value = NULL WHERE authorised_value = '';
13218 # 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)
13219 my $table_sth = $dbh->prepare(qq|SHOW CREATE TABLE marc_subfield_structure|);
13220 $table_sth->execute;
13221 my @table = $table_sth->fetchrow_array;
13222 if ( $table[1] !~ /COLLATE=utf8_unicode_ci/ and $table[1] !~ /COLLATE=utf8mb4_unicode_ci/ ) { #catches utf8mb4 collated tables
13223 $dbh->do(qq|ALTER TABLE marc_subfield_structure CHARACTER SET utf8 COLLATE utf8_unicode_ci|);
13225 $dbh->do(q{
13226 ALTER TABLE marc_subfield_structure
13227 MODIFY COLUMN authorised_value VARCHAR(32) DEFAULT NULL,
13228 ADD CONSTRAINT marc_subfield_structure_ibfk_1 FOREIGN KEY (authorised_value) REFERENCES authorised_value_categories (category_name) ON UPDATE CASCADE ON DELETE SET NULL;
13231 print "Upgrade to $DBversion done (Bug 17216 - Add a new table to store authorized value categories)\n";
13232 SetVersion($DBversion);
13235 $DBversion = "16.06.00.034";
13236 if ( CheckVersion($DBversion) ) {
13237 $dbh->do(q{
13238 ALTER TABLE biblioitems DROP COLUMN marc;
13240 $dbh->do(q{
13241 ALTER TABLE deletedbiblioitems DROP COLUMN marc;
13244 print "Upgrade to $DBversion done (Bug 10455 - remove redundant 'biblioitems.marc' field)\n";
13245 SetVersion($DBversion);
13248 $DBversion = '16.06.00.035';
13249 if ( CheckVersion($DBversion) ) {
13250 $dbh->do(q{
13251 INSERT IGNORE INTO systempreferences ( variable, value, options, explanation, type )
13252 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'
13253 FROM systempreferences WHERE variable='AllowItemsOnHoldCheckout';
13256 print "Upgrade to $DBversion done (Bug 15131: Give SCO separate control for AllowItemsOnHoldCheckout)\n";
13257 SetVersion($DBversion);
13260 $DBversion = '16.06.00.036';
13261 if ( CheckVersion($DBversion) ) {
13262 $dbh->do(q{
13263 CREATE TABLE IF NOT EXISTS `housebound_profile` (
13264 `borrowernumber` int(11) NOT NULL, -- Number of the borrower associated with this profile.
13265 `day` text NOT NULL, -- The preferred day of the week for delivery.
13266 `frequency` text NOT NULL, -- The Authorised_Value definining the pattern for delivery.
13267 `fav_itemtypes` text default NULL, -- Free text describing preferred itemtypes.
13268 `fav_subjects` text default NULL, -- Free text describing preferred subjects.
13269 `fav_authors` text default NULL, -- Free text describing preferred authors.
13270 `referral` text default NULL, -- Free text indicating how the borrower was added to the service.
13271 `notes` text default NULL, -- Free text for additional notes.
13272 PRIMARY KEY (`borrowernumber`),
13273 CONSTRAINT `housebound_profile_bnfk`
13274 FOREIGN KEY (`borrowernumber`)
13275 REFERENCES `borrowers` (`borrowernumber`)
13276 ON UPDATE CASCADE ON DELETE CASCADE
13277 ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
13279 $dbh->do(q{
13280 CREATE TABLE IF NOT EXISTS `housebound_visit` (
13281 `id` int(11) NOT NULL auto_increment, -- ID of the visit.
13282 `borrowernumber` int(11) NOT NULL, -- Number of the borrower, & the profile, linked to this visit.
13283 `appointment_date` date default NULL, -- Date of visit.
13284 `day_segment` varchar(10), -- Rough time frame: 'morning', 'afternoon' 'evening'
13285 `chooser_brwnumber` int(11) default NULL, -- Number of the borrower to choose items for delivery.
13286 `deliverer_brwnumber` int(11) default NULL, -- Number of the borrower to deliver items.
13287 PRIMARY KEY (`id`),
13288 CONSTRAINT `houseboundvisit_bnfk`
13289 FOREIGN KEY (`borrowernumber`)
13290 REFERENCES `housebound_profile` (`borrowernumber`)
13291 ON UPDATE CASCADE ON DELETE CASCADE,
13292 CONSTRAINT `houseboundvisit_bnfk_1`
13293 FOREIGN KEY (`chooser_brwnumber`)
13294 REFERENCES `borrowers` (`borrowernumber`)
13295 ON UPDATE CASCADE ON DELETE CASCADE,
13296 CONSTRAINT `houseboundvisit_bnfk_2`
13297 FOREIGN KEY (`deliverer_brwnumber`)
13298 REFERENCES `borrowers` (`borrowernumber`)
13299 ON UPDATE CASCADE ON DELETE CASCADE
13300 ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
13302 $dbh->do(q{
13303 CREATE TABLE IF NOT EXISTS `housebound_role` (
13304 `borrowernumber_id` int(11) NOT NULL, -- borrowernumber link
13305 `housebound_chooser` tinyint(1) NOT NULL DEFAULT 0, -- set to 1 to indicate this patron is a housebound chooser volunteer
13306 `housebound_deliverer` tinyint(1) NOT NULL DEFAULT 0, -- set to 1 to indicate this patron is a housebound deliverer volunteer
13307 PRIMARY KEY (`borrowernumber_id`),
13308 CONSTRAINT `houseboundrole_bnfk`
13309 FOREIGN KEY (`borrowernumber_id`)
13310 REFERENCES `borrowers` (`borrowernumber`)
13311 ON UPDATE CASCADE ON DELETE CASCADE
13312 ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
13314 $dbh->do(q{
13315 INSERT IGNORE INTO systempreferences
13316 (variable,value,options,explanation,type) VALUES
13317 ('HouseboundModule',0,'',
13318 'If ON, enable housebound module functionality.','YesNo');
13320 $dbh->do(q{
13321 INSERT IGNORE INTO authorised_value_categories( category_name ) VALUES
13322 ('HSBND_FREQ');
13324 $dbh->do(q{
13325 INSERT IGNORE INTO authorised_values (category, authorised_value, lib) VALUES
13326 ('HSBND_FREQ','EW','Every week');
13329 print "Upgrade to $DBversion done (Bug 5670 - Housebound Readers Module)\n";
13330 SetVersion($DBversion);
13333 $DBversion = "16.06.00.037";
13334 if ( CheckVersion($DBversion) ) {
13335 $dbh->do(q{
13336 ALTER TABLE `issuingrules` ADD `article_requests` ENUM( 'no', 'yes', 'bib_only', 'item_only' ) NOT NULL DEFAULT 'no' AFTER `opacitemholds`;
13338 $dbh->do(q{
13339 INSERT INTO `systempreferences` (`variable`, `value`, `options`, `explanation`, `type`) VALUES
13340 ('ArticleRequests', '0', NULL, 'Enables the article request feature', 'YesNo'),
13341 ('ArticleRequestsMandatoryFields', '', NULL, 'Comma delimited list of required fields for bibs where article requests rule = ''yes''', 'multiple'),
13342 ('ArticleRequestsMandatoryFieldsItemsOnly', '', NULL, 'Comma delimited list of required fields for bibs where article requests rule = ''item_only''', 'multiple'),
13343 ('ArticleRequestsMandatoryFieldsRecordOnly', '', NULL, 'Comma delimited list of required fields for bibs where article requests rule = ''bib_only''', 'multiple');
13345 $dbh->do(q{
13346 CREATE TABLE IF NOT EXISTS `article_requests` (
13347 `id` int(11) NOT NULL AUTO_INCREMENT,
13348 `borrowernumber` int(11) NOT NULL,
13349 `biblionumber` int(11) NOT NULL,
13350 `itemnumber` int(11) DEFAULT NULL,
13351 `branchcode` varchar(10) CHARACTER SET utf8 COLLATE utf8_unicode_ci DEFAULT NULL,
13352 `title` text,
13353 `author` text,
13354 `volume` text,
13355 `issue` text,
13356 `date` text,
13357 `pages` text,
13358 `chapters` text,
13359 `patron_notes` text,
13360 `status` enum('PENDING','PROCESSING','COMPLETED','CANCELED') NOT NULL DEFAULT 'PENDING',
13361 `notes` text,
13362 `created_on` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
13363 `updated_on` timestamp NULL DEFAULT NULL,
13364 PRIMARY KEY (`id`),
13365 KEY `borrowernumber` (`borrowernumber`),
13366 KEY `biblionumber` (`biblionumber`),
13367 KEY `itemnumber` (`itemnumber`),
13368 KEY `branchcode` (`branchcode`),
13369 CONSTRAINT `article_requests_ibfk_1` FOREIGN KEY (`borrowernumber`) REFERENCES `borrowers` (`borrowernumber`) ON DELETE CASCADE ON UPDATE CASCADE,
13370 CONSTRAINT `article_requests_ibfk_2` FOREIGN KEY (`biblionumber`) REFERENCES `biblio` (`biblionumber`) ON DELETE CASCADE ON UPDATE CASCADE,
13371 CONSTRAINT `article_requests_ibfk_3` FOREIGN KEY (`itemnumber`) REFERENCES `items` (`itemnumber`) ON DELETE SET NULL ON UPDATE CASCADE,
13372 CONSTRAINT `article_requests_ibfk_4` FOREIGN KEY (`branchcode`) REFERENCES `branches` (`branchcode`) ON DELETE SET NULL ON UPDATE CASCADE
13373 ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
13375 $dbh->do(q{
13376 INSERT INTO `letter` (`module`, `code`, `branchcode`, `name`, `is_html`, `title`, `content`, `message_transport_type`) VALUES
13377 ('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'),
13378 ('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'),
13379 ('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'),
13380 ('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'),
13381 ('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');
13384 print "Upgrade to $DBversion done (Bug 14610 - Add ability to place article requests in Koha)\n";
13385 SetVersion($DBversion);
13388 $DBversion = '16.06.00.038';
13389 if ( CheckVersion($DBversion) ) {
13390 $dbh->do(q{
13391 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');
13394 print "Upgrade to $DBversion done (Bug 14874 - Add ability to search for patrons by date of birth from checkout and patron quick searches)\n";
13395 SetVersion($DBversion);
13398 $DBversion = "16.06.00.039";
13399 if ( CheckVersion($DBversion) ) {
13401 my $sth = $dbh->prepare(q{
13402 SELECT s.itemnumber, i.itype, b.itemtype
13403 FROM
13404 ( SELECT DISTINCT itemnumber
13405 FROM statistics
13406 WHERE ( type = "return" OR type = "localuse" ) AND
13407 itemtype IS NULL
13409 LEFT JOIN
13410 ( SELECT itemnumber,biblionumber, itype
13411 FROM items
13412 UNION
13413 SELECT itemnumber,biblionumber, itype
13414 FROM deleteditems
13416 ON (s.itemnumber=i.itemnumber)
13417 LEFT JOIN
13418 ( SELECT biblionumber, itemtype
13419 FROM biblioitems
13420 UNION
13421 SELECT biblionumber, itemtype
13422 FROM deletedbiblioitems
13424 ON (i.biblionumber=b.biblionumber);
13426 $sth->execute();
13428 my $update_sth = $dbh->prepare(q{
13429 UPDATE statistics
13430 SET itemtype=?
13431 WHERE itemnumber=? AND itemtype IS NULL
13433 my $ilevel_itypes = C4::Context->preference('item-level_itypes');
13435 while ( my ($itemnumber,$item_itype,$biblio_itype) = $sth->fetchrow_array ) {
13437 my $effective_itemtype = $ilevel_itypes
13438 ? $item_itype // $biblio_itype
13439 : $biblio_itype;
13440 warn "item-level_itypes set but no itype defined for item ($itemnumber)"
13441 if $ilevel_itypes and !defined $item_itype;
13442 $update_sth->execute( $effective_itemtype, $itemnumber );
13445 print "Upgrade to $DBversion done (Bug 14598: itemtype is not set on statistics by C4::Circulation::AddReturn)\n";
13446 SetVersion($DBversion);
13449 $DBversion = '16.06.00.040';
13450 if ( CheckVersion($DBversion) ) {
13451 $dbh->do(q{
13452 ALTER TABLE `aqcontacts` ADD `orderacquisition` BOOLEAN NOT NULL DEFAULT 0 AFTER `notes`;
13454 $dbh->do(q{
13455 INSERT IGNORE INTO `letter` (module, code, name, title, content, message_transport_type) VALUES
13456 ('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');
13459 print "Upgrade to $DBversion done (Bug 5260 - Add option to send an order by e-mail to the acquisition module)\n";
13460 SetVersion($DBversion);
13463 $DBversion = '16.06.00.041';
13464 if ( CheckVersion($DBversion) ) {
13465 $dbh->do(q{
13466 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')
13469 print "Upgrade to $DBversion done (Bug 14629 - Add aggressive ISSN matching feature equivalent to the aggressive ISBN matcher)\n";
13470 SetVersion($DBversion);
13473 $DBversion = '16.06.00.042';
13474 if ( CheckVersion($DBversion) ) {
13475 $dbh->do(q|
13476 ALTER TABLE aqorders
13477 ADD COLUMN unitprice_tax_excluded decimal(28,6) default NULL AFTER unitprice,
13478 ADD COLUMN unitprice_tax_included decimal(28,6) default NULL AFTER unitprice_tax_excluded,
13479 ADD COLUMN rrp_tax_excluded decimal(28,6) default NULL AFTER rrp,
13480 ADD COLUMN rrp_tax_included decimal(28,6) default NULL AFTER rrp_tax_excluded,
13481 ADD COLUMN ecost_tax_excluded decimal(28,6) default NULL AFTER ecost,
13482 ADD COLUMN ecost_tax_included decimal(28,6) default NULL AFTER ecost_tax_excluded,
13483 ADD COLUMN tax_value decimal(6,4) default NULL AFTER gstrate
13486 # rename gstrate with tax_rate
13487 $dbh->do(q|ALTER TABLE aqorders CHANGE COLUMN gstrate tax_rate decimal(6,4) DEFAULT NULL|);
13488 $dbh->do(q|ALTER TABLE aqbooksellers CHANGE COLUMN gstrate tax_rate decimal(6,4) DEFAULT NULL|);
13490 # Fill the new columns
13491 my $orders = $dbh->selectall_arrayref(q|
13492 SELECT * FROM aqorders
13493 |, { Slice => {} } );
13495 my $sth_update_order = $dbh->prepare(q|
13496 UPDATE aqorders
13497 SET unitprice_tax_excluded = ?,
13498 unitprice_tax_included = ?,
13499 rrp_tax_excluded = ?,
13500 rrp_tax_included = ?,
13501 ecost_tax_excluded = ?,
13502 ecost_tax_included = ?,
13503 tax_value = ?
13504 WHERE ordernumber = ?
13507 my $sth_get_bookseller = $dbh->prepare(q|
13508 SELECT aqbooksellers.*
13509 FROM aqbooksellers
13510 LEFT JOIN aqbasket ON aqbasket.booksellerid = aqbooksellers.id
13511 LEFT JOIN aqorders ON aqorders.basketno = aqbasket.basketno
13512 WHERE ordernumber = ?
13515 require Number::Format;
13516 my $format = Number::Format->new;
13517 my $precision = 2;
13518 for my $order ( @$orders ) {
13519 $sth_get_bookseller->execute( $order->{ordernumber} );
13520 my ( $bookseller ) = $sth_get_bookseller->fetchrow_hashref;
13521 $order->{rrp} = $format->round( $order->{rrp}, $precision );
13522 $order->{ecost} = $format->round( $order->{ecost}, $precision );
13523 $order->{tax_rate} ||= 0 ; # tax_rate can be NULL in DB
13524 # Ordering
13525 if ( $bookseller->{listincgst} ) {
13526 $order->{rrp_tax_included} = $order->{rrp};
13527 $order->{rrp_tax_excluded} = $format->round(
13528 $order->{rrp_tax_included} / ( 1 + $order->{tax_rate} ), $precision );
13529 $order->{ecost_tax_included} = $order->{ecost};
13530 $order->{ecost_tax_excluded} = $format->round(
13531 $order->{ecost} / ( 1 + $order->{tax_rate} ), $precision );
13533 else {
13534 $order->{rrp_tax_excluded} = $order->{rrp};
13535 $order->{rrp_tax_included} = $format->round(
13536 $order->{rrp} * ( 1 + $order->{tax_rate} ), $precision );
13537 $order->{ecost_tax_excluded} = $order->{ecost};
13538 $order->{ecost_tax_included} = $format->round(
13539 $order->{ecost} * ( 1 + $order->{tax_rate} ), $precision );
13542 #receiving
13543 if ( $bookseller->{listincgst} ) {
13544 $order->{unitprice_tax_included} = $format->round( $order->{unitprice}, $precision );
13545 $order->{unitprice_tax_excluded} = $format->round(
13546 $order->{unitprice_tax_included} / ( 1 + $order->{tax_rate} ), $precision );
13548 else {
13549 $order->{unitprice_tax_excluded} = $format->round( $order->{unitprice}, $precision );
13550 $order->{unitprice_tax_included} = $format->round(
13551 $order->{unitprice_tax_excluded} * ( 1 + $order->{tax_rate} ), $precision );
13554 # If the order is received, the tax is calculated from the unit price
13555 if ( $order->{orderstatus} eq 'complete' ) {
13556 $order->{tax_value} = $format->round(
13557 ( $order->{unitprice_tax_included} - $order->{unitprice_tax_excluded} )
13558 * $order->{quantity}, $precision );
13559 } else {
13560 # otherwise the ecost is used
13561 $order->{tax_value} = $format->round(
13562 ( $order->{ecost_tax_included} - $order->{ecost_tax_excluded} ) *
13563 $order->{quantity}, $precision );
13566 $sth_update_order->execute(
13567 $order->{unitprice_tax_excluded},
13568 $order->{unitprice_tax_included},
13569 $order->{rrp_tax_excluded},
13570 $order->{rrp_tax_included},
13571 $order->{ecost_tax_excluded},
13572 $order->{ecost_tax_included},
13573 $order->{tax_value},
13574 $order->{ordernumber},
13578 print "Upgrade to $DBversion done (Bug 13321 - Tax and prices calculation need to be fixed)\n";
13579 SetVersion($DBversion);
13582 $DBversion = '16.06.00.043';
13583 if ( CheckVersion($DBversion) ) {
13584 # Add the new columns
13585 $dbh->do(q|
13586 ALTER TABLE aqorders
13587 ADD COLUMN tax_rate_on_ordering decimal(6,4) default NULL AFTER tax_rate,
13588 ADD COLUMN tax_rate_on_receiving decimal(6,4) default NULL AFTER tax_rate_on_ordering,
13589 ADD COLUMN tax_value_on_ordering decimal(28,6) default NULL AFTER tax_value,
13590 ADD COLUMN tax_value_on_receiving decimal(28,6) default NULL AFTER tax_value_on_ordering
13593 my $orders = $dbh->selectall_arrayref(q|
13594 SELECT * FROM aqorders
13595 |, { Slice => {} } );
13597 my $sth_update_order = $dbh->prepare(q|
13598 UPDATE aqorders
13599 SET tax_rate_on_ordering = tax_rate,
13600 tax_rate_on_receiving = tax_rate,
13601 tax_value_on_ordering = ?,
13602 tax_value_on_receiving = ?
13603 WHERE ordernumber = ?
13606 for my $order (@$orders) {
13607 my $tax_value_on_ordering =
13608 $order->{quantity} *
13609 $order->{ecost_tax_excluded} *
13610 $order->{tax_rate};
13612 my $tax_value_on_receiving =
13613 ( defined $order->{unitprice_tax_excluded} )
13614 ? $order->{quantity} * $order->{unitprice_tax_excluded} * $order->{tax_rate}
13615 : undef;
13617 $sth_update_order->execute( $tax_value_on_ordering,
13618 $tax_value_on_receiving, $order->{ordernumber} );
13621 # Remove the old columns
13622 $dbh->do(q|
13623 ALTER TABLE aqorders
13624 CHANGE COLUMN tax_value tax_value_bak decimal(28,6) default NULL,
13625 CHANGE COLUMN tax_rate tax_rate_bak decimal(6,4) default NULL
13628 print "Upgrade to $DBversion done (Bug 13323 - Change the tax rate on receiving)\n";
13629 SetVersion($DBversion);
13632 $DBversion = '16.06.00.044';
13633 if ( CheckVersion($DBversion) ) {
13634 $dbh->do(q{
13635 ALTER TABLE `messages`
13636 ADD `manager_id` int(11) NULL,
13637 ADD FOREIGN KEY (`manager_id`) REFERENCES `borrowers` (`borrowernumber`) ON DELETE SET NULL;
13640 print "Upgrade to $DBversion done (Bug 17397 - Show name of librarian who created circulation message)\n";
13641 SetVersion($DBversion);
13644 $DBversion = '16.06.00.045';
13645 if ( CheckVersion($DBversion) ) {
13646 $dbh->do(q{
13647 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";
13650 print "Upgrade to $DBversion done (Bug 17443 - Make possible to renew patron by later of expiry and current date)\n";
13651 SetVersion($DBversion);
13654 $DBversion = '16.06.00.046';
13655 if ( CheckVersion($DBversion) ) {
13656 $dbh->do(q{
13657 ALTER TABLE issuingrules ADD COLUMN no_auto_renewal_after INT(4) DEFAULT NULL AFTER auto_renew;
13660 print "Upgrade to $DBversion done (Bug 15581 - Add a circ rule to not allow auto-renewals after defined loan period)\n";
13661 SetVersion($DBversion);
13664 $DBversion = '16.06.00.047';
13665 if ( CheckVersion($DBversion) ) {
13666 $dbh->do(q{
13667 UPDATE language_descriptions SET description = 'Čeština' WHERE subtag = 'cs' AND type = 'language' AND lang = 'cs'
13670 print "Upgrade to $DBversion done (Bug 17518: Displayed language name for Czech is wrong)\n";
13671 SetVersion($DBversion);
13674 $DBversion = '16.06.00.048';
13675 if( CheckVersion( $DBversion ) ) {
13676 $dbh->do(q|
13677 INSERT IGNORE INTO permissions (module_bit, code, description) VALUES
13678 (13, 'upload_general_files', 'Upload any file'),
13679 (13, 'upload_manage', 'Manage uploaded files');
13682 # Update user_permissions for current users (check count in uploaded_files)
13683 # Note 9 == edit_catalogue and 13 == tools
13684 # We do not insert if someone is superlibrarian, does not have edit_catalogue,
13685 # or already has all tools
13686 $dbh->do(q|
13687 INSERT IGNORE INTO user_permissions (borrowernumber, module_bit, code)
13688 SELECT borrowernumber, 13, 'upload_general_files'
13689 FROM borrowers bo
13690 WHERE flags<>1 AND flags & POW(2,13) = 0 AND
13691 ( flags & POW(2,9) > 0 OR (
13692 SELECT COUNT(*) FROM user_permissions
13693 WHERE borrowernumber=bo.borrowernumber AND module_bit=9 ) > 0 )
13694 AND ( SELECT COUNT(*) FROM uploaded_files ) > 0;
13697 SetVersion( $DBversion );
13698 print "Upgrade to $DBversion done (Bug 17663 - Forgotten userpermissions)\n";
13701 $DBversion = '16.06.00.049';
13702 if( CheckVersion( $DBversion ) ) {
13703 $dbh->do(q|
13704 INSERT IGNORE INTO systempreferences (variable,value,options,explanation,type)
13705 VALUES ('ReplytoDefault', '', NULL, 'The default email address to be set as replyto.', 'Free');
13708 $dbh->do(q|
13709 INSERT IGNORE INTO systempreferences (variable,value,options,explanation,type)
13710 VALUES ('ReturnpathDefault', '', NULL, 'The default email address to be set as return-path', 'Free');
13713 SetVersion( $DBversion );
13714 print "Upgrade to $DBversion done (Bug 17391 - ReturnpathDefault and ReplyToDefault missing from syspref.sql)\n";
13717 $DBversion = "16.06.00.050";
13718 if ( CheckVersion($DBversion) ) {
13720 # If index issn_idx still exists, we assume that dbrev 3.15.00.049 failed,
13721 # and we repeat it (partially).
13722 # Note: the db rev only pertains to biblioitems and is not needed for
13723 # deletedbiblioitems.
13725 my $temp = $dbh->selectall_arrayref( "SHOW INDEXES FROM biblioitems WHERE key_name = 'issn_idx'" );
13727 if( @$temp > 0 ) {
13728 $dbh->do( "ALTER TABLE biblioitems DROP INDEX isbn" );
13729 $dbh->do( "ALTER TABLE biblioitems DROP INDEX issn" );
13730 $dbh->do( "ALTER TABLE biblioitems DROP INDEX issn_idx" );
13731 $dbh->do( "ALTER TABLE biblioitems CHANGE isbn isbn MEDIUMTEXT NULL DEFAULT NULL, CHANGE issn issn MEDIUMTEXT NULL DEFAULT NULL" );
13732 $dbh->do( "ALTER TABLE biblioitems ADD INDEX isbn ( isbn ( 255 ) ), ADD INDEX issn ( issn ( 255 ) )" );
13733 print "Upgrade to $DBversion done (Bug 8835). Removed issn_idx.\n";
13734 } else {
13735 print "Upgrade to $DBversion done (Bug 8835). Everything is fine.\n";
13738 SetVersion($DBversion);
13741 $DBversion = "16.11.00.000";
13742 if ( CheckVersion($DBversion) ) {
13743 print "Upgrade to $DBversion done (Koha 16.11)\n";
13744 SetVersion($DBversion);
13747 $DBversion = "16.12.00.000";
13748 if ( CheckVersion($DBversion) ) {
13749 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";
13750 SetVersion($DBversion);
13753 $DBversion = "16.12.00.001";
13754 if ( CheckVersion($DBversion) ) {
13755 $dbh->do(q{
13756 ALTER TABLE borrower_modifications
13757 ADD COLUMN extended_attributes text DEFAULT NULL
13758 AFTER privacy
13761 print "Upgrade to $DBversion done (Bug 17767 - Let Koha::Patron::Modification handle extended attributes)\n";
13762 SetVersion($DBversion);
13765 $DBversion = '16.12.00.002';
13766 if ( CheckVersion($DBversion) ) {
13767 unless (column_exists( 'branchtransfers', 'branchtransfer_id' )
13768 and index_exists( 'branchtransfers', 'PRIMARY' ) )
13770 $dbh->do(
13771 "ALTER TABLE branchtransfers
13772 ADD COLUMN branchtransfer_id int(12) NOT NULL auto_increment FIRST, ADD CONSTRAINT PRIMARY KEY (branchtransfer_id);"
13776 SetVersion($DBversion);
13777 print "Upgrade to $DBversion done (Bug 14187 - branchtransfer needs a primary key (id) for DBIx and common sense.)\n";
13780 $DBversion = '16.12.00.003';
13781 if ( CheckVersion($DBversion) ) {
13782 $dbh->do(q{DELETE FROM systempreferences WHERE variable="Persona"});
13783 SetVersion($DBversion);
13784 print "Upgrade to $DBversion done (Bug 17486 - Remove 'Mozilla Persona' as an authentication method)\n";
13787 $DBversion = '16.12.00.004';
13788 if ( CheckVersion($DBversion) ) {
13789 $dbh->do(q{
13790 CREATE TABLE biblio_metadata (
13791 `id` INT(11) NOT NULL AUTO_INCREMENT,
13792 `biblionumber` INT(11) NOT NULL,
13793 `format` VARCHAR(16) NOT NULL,
13794 `marcflavour` VARCHAR(16) NOT NULL,
13795 `metadata` LONGTEXT NOT NULL,
13796 PRIMARY KEY(id),
13797 UNIQUE KEY `biblio_metadata_uniq_key` (`biblionumber`,`format`,`marcflavour`),
13798 CONSTRAINT `biblio_metadata_fk_1` FOREIGN KEY (biblionumber) REFERENCES biblio (biblionumber) ON DELETE CASCADE ON UPDATE CASCADE
13799 ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
13801 $dbh->do(q{
13802 CREATE TABLE deletedbiblio_metadata (
13803 `id` INT(11) NOT NULL AUTO_INCREMENT,
13804 `biblionumber` INT(11) NOT NULL,
13805 `format` VARCHAR(16) NOT NULL,
13806 `marcflavour` VARCHAR(16) NOT NULL,
13807 `metadata` LONGTEXT NOT NULL,
13808 PRIMARY KEY(id),
13809 UNIQUE KEY `deletedbiblio_metadata_uniq_key` (`biblionumber`,`format`,`marcflavour`),
13810 CONSTRAINT `deletedbiblio_metadata_fk_1` FOREIGN KEY (biblionumber) REFERENCES deletedbiblio (biblionumber) ON DELETE CASCADE ON UPDATE CASCADE
13811 ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
13813 $dbh->do(q{
13814 INSERT INTO biblio_metadata ( biblionumber, format, marcflavour, metadata ) SELECT biblionumber, 'marcxml', 'CHANGEME', marcxml FROM biblioitems;
13816 $dbh->do(q{
13817 INSERT INTO deletedbiblio_metadata ( biblionumber, format, marcflavour, metadata ) SELECT biblionumber, 'marcxml', 'CHANGEME', marcxml FROM deletedbiblioitems;
13819 $dbh->do(q{
13820 UPDATE biblio_metadata SET marcflavour = (SELECT value FROM systempreferences WHERE variable="marcflavour");
13822 $dbh->do(q{
13823 UPDATE deletedbiblio_metadata SET marcflavour = (SELECT value FROM systempreferences WHERE variable="marcflavour");
13825 $dbh->do(q{
13826 ALTER TABLE biblioitems DROP COLUMN marcxml;
13828 $dbh->do(q{
13829 ALTER TABLE deletedbiblioitems DROP COLUMN marcxml;
13831 SetVersion($DBversion);
13832 print "Upgrade to $DBversion done (Bug 17196 - Move marcxml out of the biblioitems table)\n";
13835 $DBversion = '16.12.00.005';
13836 if( CheckVersion( $DBversion ) ) {
13837 $dbh->do( "INSERT IGNORE INTO systempreferences (variable,value,options,explanation,type) VALUES('AuthorityMergeMode','loose','loose|strict','Authority merge mode','Choice')");
13839 SetVersion( $DBversion );
13840 print "Upgrade to $DBversion done (Bug 17913 - AuthorityMergeMode)\n";
13843 $DBversion = "16.12.00.006";
13844 if ( CheckVersion($DBversion) ) {
13845 unless ( column_exists( 'borrower_attributes', 'id' )
13846 and index_exists( 'borrower_attributes', 'PRIMARY' ) )
13848 $dbh->do(q{
13849 ALTER TABLE `borrower_attributes`
13850 ADD `id` int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY FIRST
13854 print "Upgrade to $DBversion done (Bug 17813: Table borrower_attributes needs a primary key\n";
13855 SetVersion($DBversion);
13858 $DBversion = "16.12.00.007";
13859 if( CheckVersion( $DBversion ) ) {
13861 if ( column_exists('opac_news', 'new' ) ) {
13862 $dbh->do(q|ALTER TABLE opac_news CHANGE COLUMN new content text NOT NULL|);
13865 $dbh->do(q|
13866 UPDATE letter SET content = REPLACE(content, "<<opac_news.new>>", "<<opac_news.content>>") WHERE content LIKE "%<<opac_news.new>>%"
13869 SetVersion( $DBversion );
13870 print "Upgrade to $DBversion done (Bug 17960 - Rename opac_news with opac_news.content (template notices have been updated!))\n";
13873 $DBversion = "16.12.00.008";
13874 if( CheckVersion( $DBversion ) ) {
13875 $dbh->do(q{
13876 INSERT IGNORE INTO systempreferences (variable,value,explanation,options,type) VALUES
13877 ('MarcItemFieldsToOrder','','Set the mapping values for new item records created from a MARC record in a staged file. In a YAML format.', NULL, 'textarea');
13880 SetVersion( $DBversion );
13881 print "Upgrade to $DBversion done (Bug 15503 - Grab Item Information from Order Files)\n";
13884 $DBversion = "16.12.00.009";
13885 if( CheckVersion( $DBversion ) ) {
13886 $dbh->do(q{
13887 INSERT IGNORE INTO systempreferences (variable,value,explanation,options,type) VALUES
13888 ('OPACHoldsIfAvailableAtPickup','1','','Allow to pickup up holds at libraries where the item is available','YesNo');
13891 $dbh->do(q{
13892 INSERT IGNORE INTO systempreferences (variable,value,explanation,options,type) VALUES
13893 ('OPACHoldsIfAvailableAtPickupExceptions','','','List the patron categories not affected by OPACHoldsIfAvailableAtPickup if off','Free');
13896 SetVersion( $DBversion );
13897 print "Upgrade to $DBversion done (Bug 17453 - Inter-site holds improvement)\n";
13900 $DBversion = "16.12.00.010";
13901 if( CheckVersion( $DBversion ) ) {
13902 $dbh->do(q{
13903 ALTER TABLE borrowers ADD overdrive_auth_token text default NULL AFTER lastseen;
13906 $dbh->do(q{
13907 ALTER TABLE deletedborrowers ADD overdrive_auth_token text default NULL AFTER lastseen;
13910 $dbh->do(q{
13911 INSERT IGNORE INTO systempreferences (variable,value,explanation,options,type)
13912 VALUES ('OverDriveCirculation','0','Enable client to see their OverDrive account','','YesNo');
13915 SetVersion( $DBversion );
13916 print "Upgrade to $DBversion done (Bug 16034 - Integration with OverDrive Patron API)\n";
13919 $DBversion = "16.12.00.011";
13920 if( CheckVersion( $DBversion ) ) {
13921 $dbh->do(q{
13922 ALTER TABLE search_field CHANGE COLUMN type type ENUM('', 'string', 'date', 'number', 'boolean', 'sum') NOT NULL
13923 COMMENT 'what type of data this holds, relevant when storing it in the search engine';
13926 SetVersion( $DBversion );
13927 print "Upgrade to $DBversion done (Bug 17260 - updatedatabase.pl fails on invalid entries in ENUM and BOOLEAN columns)\n";
13930 $DBversion = "16.12.00.012";
13931 if( CheckVersion( $DBversion ) ) {
13932 $dbh->do(q{
13933 INSERT IGNORE INTO `systempreferences` (`variable`, `value`, `options`, `explanation`, `type`)
13934 VALUES ('OpacNewsLibrarySelect', '0', '', 'Show selector for branches on OPAC news page', 'YesNo');
13937 SetVersion( $DBversion );
13938 print "Upgrade to $DBversion done (Bug 14764 - Add OPAC News branch selector)\n";
13941 $DBversion = "16.12.00.013";
13942 if( CheckVersion( $DBversion ) ) {
13943 $dbh->do(q{
13944 INSERT IGNORE INTO systempreferences (`variable`, `value`, `options`, `explanation`, `type`)
13945 VALUES ('CircSidebar','0','','Activate or deactivate the navigation sidebar on all Circulation pages','YesNo');
13948 SetVersion( $DBversion );
13949 print "Upgrade to $DBversion done (Bug 16530 - Add a circ sidebar navigation menu)\n";
13952 $DBversion = "16.12.00.014";
13953 if( CheckVersion( $DBversion ) ) {
13954 $dbh->do(q{
13955 INSERT INTO systempreferences ( `variable`, `value`, `options`, `explanation`, `type` ) VALUES
13956 ('LoadSearchHistoryToTheFirstLoggedUser', '1', NULL, 'If ON, the next user will automatically get the last searches in his history', 'YesNo');
13958 SetVersion( $DBversion );
13959 print "Upgrade to $DBversion done (Bug 8010 - Search history can be added to the wrong patron)\n";
13962 $DBversion = "16.12.00.015";
13963 if( CheckVersion( $DBversion ) ) {
13964 unless( column_exists( 'branches', 'geolocation' ) ) {
13965 $dbh->do(q|
13966 ALTER TABLE branches ADD COLUMN geolocation VARCHAR(255) DEFAULT NULL after opac_info
13970 $dbh->do(q|
13971 INSERT IGNORE INTO systempreferences (variable, value, options, explanation, type ) VALUES ('UsageStatsGeolocation', '', NULL, 'Geolocation of the main library', 'Free');
13973 $dbh->do(q|
13974 INSERT IGNORE INTO systempreferences (variable, value, options, explanation, type ) VALUES ('UsageStatsLibrariesInfo', '', NULL, 'Share libraries information', 'YesNo');
13976 $dbh->do(q|
13977 INSERT IGNORE INTO systempreferences (variable, value, options, explanation, type ) VALUES ('UsageStatsPublicID', '', NULL, 'Public ID for Hea website', 'Free');
13980 SetVersion( $DBversion );
13981 print "Upgrade to $DBversion done (Bug 18066 - Hea version 2)\n";
13984 $DBversion = "16.12.00.016";
13985 if ( CheckVersion($DBversion) ) {
13986 unless ( column_exists( 'borrower_attribute_types', 'opac_editable' ) )
13988 $dbh->do(q{
13989 ALTER TABLE borrower_attribute_types
13990 ADD COLUMN `opac_editable` tinyint(1) NOT NULL default 0 AFTER `opac_display`
13994 print "Upgrade to $DBversion done (Bug 13757: Make patron attributes editable in the opac if set to 'editable in OPAC)'\n";
13995 SetVersion($DBversion);
13998 $DBversion = "16.12.00.017";
13999 if ( CheckVersion($DBversion) ) {
14000 $dbh->do(q{
14001 INSERT IGNORE INTO systempreferences (variable,value,options,explanation,type)
14002 VALUES ('CumulativeRestrictionPeriods', 0, NULL, 'Cumulate the restriction periods instead of keeping the highest', 'YesNo')
14005 print "Upgrade to $DBversion done (Bug 14146 - Additional days are not added to restriction period when checking-in several overdues for same patron)'\n";
14006 SetVersion($DBversion);
14009 $DBversion = "16.12.00.018";
14010 if ( CheckVersion($DBversion) ) {
14011 $dbh->do(q{
14012 INSERT IGNORE INTO systempreferences ( variable, value, options, explanation, type )
14013 SELECT 'ExportCircHistory', COUNT(*), NULL, "Display the export circulation options", 'YesNo'
14014 FROM systempreferences
14015 WHERE ( variable = 'ExportRemoveFields' AND value != "" AND value IS NOT NULL )
14016 OR ( variable = 'ExportWithCsvProfile' AND value != "" AND value IS NOT NULL );
14019 $dbh->do(q{
14020 DELETE FROM systempreferences WHERE variable="ExportWithCsvProfile";
14023 print "Upgrade to $DBversion done (Bug 15498 - Replace ExportWithCsvProfile with ExportCircHistory)'\n";
14024 SetVersion($DBversion);
14027 $DBversion = "16.12.00.019";
14028 if( CheckVersion( $DBversion ) ) {
14029 if ( column_exists( 'issues', 'return' ) ) {
14030 $dbh->do(q|ALTER TABLE issues DROP column `return`|);
14033 if ( column_exists( 'old_issues', 'return' ) ) {
14034 $dbh->do(q|ALTER TABLE old_issues DROP column `return`|);
14037 SetVersion( $DBversion );
14038 print "Upgrade to $DBversion done (Bug 18173 - Remove issues.return DB field)\n";
14041 $DBversion = "16.12.00.020";
14042 if( CheckVersion( $DBversion ) ) {
14043 $dbh->do(q{
14044 UPDATE systempreferences SET options="any_time_is_placed|not_always|any_time_is_collected" WHERE variable="HoldFeeMode";
14047 $dbh->do(q{
14048 UPDATE systempreferences SET value="any_time_is_placed" WHERE variable="HoldFeeMode" AND value="always";
14051 SetVersion( $DBversion );
14052 print "Upgrade to $DBversion done (Bug 17560 - Hold fee placement at point of checkout)\n";
14055 $DBversion = "16.12.00.021";
14056 if( CheckVersion( $DBversion ) ) {
14057 $dbh->do(q{
14058 INSERT IGNORE INTO systempreferences ( `variable`, `value`, `options`, `explanation`, `type` ) VALUES
14059 ('RenewalLog','0','','If ON, log information about renewals','YesNo');
14062 SetVersion( $DBversion );
14063 print "Upgrade to $DBversion done (Bug 17708 - Renewal log seems empty)\n";
14066 $DBversion = "16.12.00.022";
14067 if( CheckVersion( $DBversion ) ) {
14068 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";
14069 SetVersion( $DBversion );
14070 print "Upgrade to $DBversion done (Bug 17866 - Change sender for serial claim notifications)\n";
14073 $DBversion = '16.12.00.023';
14074 if( CheckVersion( $DBversion ) ) {
14075 my $oldval = C4::Context->preference('dontmerge');
14076 my $newval = $oldval ? 0 : 50;
14078 # Remove dontmerge, add AuthorityMergeLimit
14079 $dbh->do(q{
14080 DELETE FROM systempreferences WHERE variable = 'dontmerge';
14082 $dbh->do(qq{
14083 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');
14086 $dbh->do(q{
14087 ALTER TABLE need_merge_authorities
14088 ADD COLUMN authid_new BIGINT AFTER authid,
14089 ADD COLUMN reportxml text AFTER authid_new,
14090 ADD COLUMN timestamp timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP;
14093 $dbh->do(q{
14094 UPDATE need_merge_authorities SET authid_new=authid WHERE done <> 1
14097 SetVersion( $DBversion );
14098 if( $newval == 0 ) {
14099 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";
14101 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";
14102 print "Upgrade to $DBversion done (Bug 9988 - Add AuthorityMergeLimit)\n";
14105 $DBversion = '16.12.00.024';
14106 if( CheckVersion( $DBversion ) ) {
14107 $dbh->do(q{
14108 UPDATE systempreferences SET variable="NoticeBcc" WHERE variable="OverdueNoticeBcc";
14111 SetVersion( $DBversion );
14112 print "Upgrade to $DBversion done (Bug 14537 - The system preference 'OverdueNoticeBcc' is mis-named.)\n";
14115 $DBversion = '16.12.00.025';
14116 if( CheckVersion( $DBversion ) ) {
14117 $dbh->do(q|
14118 INSERT IGNORE INTO systempreferences ( `variable`, `value`, `options`, `explanation`, `type` )
14119 VALUES ('UploadPurgeTemporaryFilesDays','',NULL,'If not empty, number of days used when automatically deleting temporary uploads','integer');
14122 my ( $cnt ) = $dbh->selectrow_array( "SELECT COUNT(*) FROM uploaded_files WHERE permanent IS NULL or permanent=0" );
14123 if( $cnt ) {
14124 print "NOTE: You have $cnt temporary uploads. You could benefit from setting pref UploadPurgeTemporaryFilesDays now to automatically delete them.\n";
14127 SetVersion( $DBversion );
14128 print "Upgrade to $DBversion done (Bug 17669 - Introduce preference for deleting temporary uploads)\n";
14131 $DBversion = '16.12.00.026';
14132 if( CheckVersion( $DBversion ) ) {
14134 # In order to be overcomplete, we check if the situation is what we expect
14135 if( !index_exists( 'serialitems', 'PRIMARY' ) ) {
14136 if( index_exists( 'serialitems', 'serialitemsidx' ) ) {
14137 $dbh->do(q|
14138 ALTER TABLE serialitems ADD PRIMARY KEY (itemnumber), DROP INDEX serialitemsidx;
14140 } else {
14141 $dbh->do(q|ALTER TABLE serialitems ADD PRIMARY KEY (itemnumber)|);
14145 SetVersion( $DBversion );
14146 print "Upgrade to $DBversion done (Bug 18427 - Add a primary key to serialitems)\n";
14149 $DBversion = '16.12.00.027';
14150 if( CheckVersion( $DBversion ) ) {
14152 $dbh->do(q{
14153 CREATE TABLE IF NOT EXISTS club_templates (
14154 id int(11) NOT NULL AUTO_INCREMENT,
14155 `name` tinytext NOT NULL,
14156 description text,
14157 is_enrollable_from_opac tinyint(1) NOT NULL DEFAULT '0',
14158 is_email_required tinyint(1) NOT NULL DEFAULT '0',
14159 branchcode varchar(10) NULL DEFAULT NULL,
14160 date_created timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
14161 date_updated timestamp NULL DEFAULT NULL,
14162 is_deletable tinyint(1) NOT NULL DEFAULT '1',
14163 PRIMARY KEY (id),
14164 KEY ct_branchcode (branchcode),
14165 CONSTRAINT `club_templates_ibfk_1` FOREIGN KEY (branchcode) REFERENCES `branches` (branchcode) ON DELETE CASCADE ON UPDATE CASCADE
14166 ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
14169 $dbh->do(q{
14170 CREATE TABLE IF NOT EXISTS clubs (
14171 id int(11) NOT NULL AUTO_INCREMENT,
14172 club_template_id int(11) NOT NULL,
14173 `name` tinytext NOT NULL,
14174 description text,
14175 date_start date DEFAULT NULL,
14176 date_end date DEFAULT NULL,
14177 branchcode varchar(10) NULL DEFAULT NULL,
14178 date_created timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
14179 date_updated timestamp NULL DEFAULT NULL,
14180 PRIMARY KEY (id),
14181 KEY club_template_id (club_template_id),
14182 KEY branchcode (branchcode),
14183 CONSTRAINT clubs_ibfk_1 FOREIGN KEY (club_template_id) REFERENCES club_templates (id) ON DELETE CASCADE ON UPDATE CASCADE,
14184 CONSTRAINT clubs_ibfk_2 FOREIGN KEY (branchcode) REFERENCES branches (branchcode)
14185 ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
14188 $dbh->do(q{
14189 CREATE TABLE IF NOT EXISTS club_enrollments (
14190 id int(11) NOT NULL AUTO_INCREMENT,
14191 club_id int(11) NOT NULL,
14192 borrowernumber int(11) NOT NULL,
14193 date_enrolled timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
14194 date_canceled timestamp NULL DEFAULT NULL,
14195 date_created timestamp NULL DEFAULT NULL,
14196 date_updated timestamp NULL DEFAULT NULL,
14197 branchcode varchar(10) NULL DEFAULT NULL,
14198 PRIMARY KEY (id),
14199 KEY club_id (club_id),
14200 KEY borrowernumber (borrowernumber),
14201 KEY branchcode (branchcode),
14202 CONSTRAINT club_enrollments_ibfk_1 FOREIGN KEY (club_id) REFERENCES clubs (id) ON DELETE CASCADE ON UPDATE CASCADE,
14203 CONSTRAINT club_enrollments_ibfk_2 FOREIGN KEY (borrowernumber) REFERENCES borrowers (borrowernumber) ON DELETE CASCADE ON UPDATE CASCADE,
14204 CONSTRAINT club_enrollments_ibfk_3 FOREIGN KEY (branchcode) REFERENCES branches (branchcode) ON DELETE SET NULL ON UPDATE CASCADE
14205 ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
14208 $dbh->do(q{
14209 CREATE TABLE IF NOT EXISTS club_template_enrollment_fields (
14210 id int(11) NOT NULL AUTO_INCREMENT,
14211 club_template_id int(11) NOT NULL,
14212 `name` tinytext NOT NULL,
14213 description text,
14214 authorised_value_category varchar(16) DEFAULT NULL,
14215 PRIMARY KEY (id),
14216 KEY club_template_id (club_template_id),
14217 CONSTRAINT club_template_enrollment_fields_ibfk_1 FOREIGN KEY (club_template_id) REFERENCES club_templates (id) ON DELETE CASCADE ON UPDATE CASCADE
14218 ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
14221 $dbh->do(q{
14222 CREATE TABLE IF NOT EXISTS club_enrollment_fields (
14223 id int(11) NOT NULL AUTO_INCREMENT,
14224 club_enrollment_id int(11) NOT NULL,
14225 club_template_enrollment_field_id int(11) NOT NULL,
14226 `value` text NOT NULL,
14227 PRIMARY KEY (id),
14228 KEY club_enrollment_id (club_enrollment_id),
14229 KEY club_template_enrollment_field_id (club_template_enrollment_field_id),
14230 CONSTRAINT club_enrollment_fields_ibfk_1 FOREIGN KEY (club_enrollment_id) REFERENCES club_enrollments (id) ON DELETE CASCADE ON UPDATE CASCADE,
14231 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
14232 ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
14235 $dbh->do(q{
14236 CREATE TABLE IF NOT EXISTS club_template_fields (
14237 id int(11) NOT NULL AUTO_INCREMENT,
14238 club_template_id int(11) NOT NULL,
14239 `name` tinytext NOT NULL,
14240 description text,
14241 authorised_value_category varchar(16) DEFAULT NULL,
14242 PRIMARY KEY (id),
14243 KEY club_template_id (club_template_id),
14244 CONSTRAINT club_template_fields_ibfk_1 FOREIGN KEY (club_template_id) REFERENCES club_templates (id) ON DELETE CASCADE ON UPDATE CASCADE
14245 ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
14248 $dbh->do(q{
14249 CREATE TABLE IF NOT EXISTS club_fields (
14250 id int(11) NOT NULL AUTO_INCREMENT,
14251 club_template_field_id int(11) NOT NULL,
14252 club_id int(11) NOT NULL,
14253 `value` text,
14254 PRIMARY KEY (id),
14255 KEY club_template_field_id (club_template_field_id),
14256 KEY club_id (club_id),
14257 CONSTRAINT club_fields_ibfk_3 FOREIGN KEY (club_template_field_id) REFERENCES club_template_fields (id) ON DELETE CASCADE ON UPDATE CASCADE,
14258 CONSTRAINT club_fields_ibfk_4 FOREIGN KEY (club_id) REFERENCES clubs (id) ON DELETE CASCADE ON UPDATE CASCADE
14259 ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
14262 $dbh->do(q{
14263 INSERT IGNORE INTO userflags (bit, flag, flagdesc, defaulton) VALUES (21, 'clubs', 'Patron clubs', '0');
14266 $dbh->do(q{
14267 INSERT IGNORE INTO permissions (module_bit, code, description) VALUES
14268 (21, 'edit_templates', 'Create and update club templates'),
14269 (21, 'edit_clubs', 'Create and update clubs'),
14270 (21, 'enroll', 'Enroll patrons in clubs')
14274 SetVersion( $DBversion );
14275 print "Upgrade to $DBversion done (Bug 12461 - Add patron clubs feature)\n";
14278 $DBversion = '16.12.00.028';
14279 if( CheckVersion( $DBversion ) ) {
14280 $dbh->do(q{
14281 UPDATE systempreferences SET options = 'us|de|fr' WHERE variable = 'AddressFormat';
14284 SetVersion( $DBversion );
14285 print "Upgrade to $DBversion done (Bug 18110 - Adds FR to the syspref AddressFormat)\n";
14288 $DBversion = '16.12.00.029';
14289 if( CheckVersion( $DBversion ) ) {
14290 unless( column_exists( 'issues', 'note' ) ) {
14291 $dbh->do(q|ALTER TABLE issues ADD note mediumtext default NULL AFTER onsite_checkout|);
14293 unless( column_exists( 'issues', 'notedate' ) ) {
14294 $dbh->do(q|ALTER TABLE issues ADD notedate datetime default NULL AFTER note|);
14296 unless( column_exists( 'old_issues', 'note' ) ) {
14297 $dbh->do(q|ALTER TABLE old_issues ADD note mediumtext default NULL AFTER onsite_checkout|);
14299 unless( column_exists( 'old_issues', 'notedate' ) ) {
14300 $dbh->do(q|ALTER TABLE old_issues ADD notedate datetime default NULL AFTER note|);
14303 $dbh->do(q|
14304 INSERT IGNORE INTO letter (`module`, `code`, `branchcode`, `name`, `is_html`, `title`, `content`, `message_transport_type`)
14305 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');
14308 $dbh->do(q|
14309 INSERT IGNORE INTO systempreferences (`variable`, `value`, `options`, `explanation`,`type`)
14310 VALUES ('AllowCheckoutNotes', '0', NULL, 'Allow patrons to submit notes about checked out items.','YesNo');
14313 SetVersion( $DBversion );
14314 print "Upgrade to $DBversion done (Bug 14224: Add column issues.note and issues.notedate)\n";
14317 $DBversion = '16.12.00.030';
14318 if( CheckVersion( $DBversion ) ) {
14319 unless( column_exists( 'issuingrules', 'no_auto_renewal_after_hard_limit' ) ) {
14320 $dbh->do(q{
14321 ALTER TABLE issuingrules ADD COLUMN no_auto_renewal_after_hard_limit DATE DEFAULT NULL AFTER no_auto_renewal_after;
14325 SetVersion( $DBversion );
14326 print "Upgrade to $DBversion done (Bug 16344 - Add a circ rule to limit the auto renewals given a specific date)\n";
14329 $DBversion = '16.12.00.031';
14330 if( CheckVersion( $DBversion ) ) {
14331 if ( !index_exists( 'biblioitems', 'timestamp' ) ) {
14332 $dbh->do("ALTER TABLE biblioitems ADD KEY `timestamp` (`timestamp`);");
14334 if ( !index_exists( 'deletedbiblioitems', 'timestamp' ) ) {
14335 $dbh->do("ALTER TABLE deletedbiblioitems ADD KEY `timestamp` (`timestamp`);");
14337 if ( !index_exists( 'items', 'timestamp' ) ) {
14338 $dbh->do("ALTER TABLE items ADD KEY `timestamp` (`timestamp`);");
14340 if ( !index_exists( 'deleteditems', 'timestamp' ) ) {
14341 $dbh->do("ALTER TABLE deleteditems ADD KEY `timestamp` (`timestamp`);");
14344 SetVersion( $DBversion );
14345 print "Upgrade to $DBversion done (Bug 15108: OAI-PMH provider improvements)\n";
14348 $DBversion = '16.12.00.032';
14349 if( CheckVersion( $DBversion ) ) {
14350 require Koha::Calendar;
14352 $dbh->do(q{
14353 INSERT IGNORE INTO systempreferences (variable,value,explanation,options,type)
14354 VALUES ('ExcludeHolidaysFromMaxPickUpDelay', '0', 'If ON, reserves max pickup delay takes into account the closed days.', NULL, 'Integer');
14357 my $waiting_holds = $dbh->selectall_arrayref(q|
14358 SELECT expirationdate, waitingdate, branchcode
14359 FROM reserves
14360 WHERE found = 'W' AND priority = 0
14361 |, { Slice => {} });
14362 my $update_sth = $dbh->prepare(q|
14363 UPDATE reserves
14364 SET expirationdate = ?
14365 WHERE reserve_id = ?
14367 my $max_pickup_delay = C4::Context->preference("ReservesMaxPickUpDelay");
14368 for my $hold ( @$waiting_holds ) {
14370 my $requested_expiration;
14371 if ($hold->{expirationdate}) {
14372 $requested_expiration = dt_from_string($hold->{expirationdate});
14375 my $expirationdate = dt_from_string($hold->{waitingdate});
14376 if ( C4::Context->preference("ExcludeHolidaysFromMaxPickUpDelay") ) {
14377 my $calendar = Koha::Calendar->new( branchcode => $hold->{branchcode}, days_mode => C4::Context->preference('useDaysMode') );
14378 $expirationdate = $calendar->days_forward( $expirationdate, $max_pickup_delay );
14379 } else {
14380 $expirationdate->add( days => $max_pickup_delay );
14383 my $cmp = $requested_expiration ? DateTime->compare($requested_expiration, $expirationdate) : 0;
14384 $update_sth->execute($cmp == -1 ? $requested_expiration->ymd : $expirationdate->ymd, $hold->{reserve_id});
14387 SetVersion( $DBversion );
14388 print "Upgrade to $DBversion done (Bug 12063 - Update reserves.expirationdate)\n";
14391 $DBversion = '16.12.00.033';
14392 if( CheckVersion( $DBversion ) ) {
14394 if( !column_exists( 'letter', 'lang' ) ) {
14395 $dbh->do( "ALTER TABLE letter ADD COLUMN lang VARCHAR(25) NOT NULL DEFAULT 'default' AFTER message_transport_type" );
14398 if( !column_exists( 'borrowers', 'lang' ) ) {
14399 $dbh->do( "ALTER TABLE borrowers ADD COLUMN lang VARCHAR(25) NOT NULL DEFAULT 'default' AFTER lastseen" );
14400 $dbh->do( "ALTER TABLE deletedborrowers ADD COLUMN lang VARCHAR(25) NOT NULL DEFAULT 'default' AFTER lastseen" );
14403 # Add test on existene of this key
14404 $dbh->do( "ALTER TABLE message_transports DROP FOREIGN KEY message_transports_ibfk_3 ");
14405 $dbh->do( "ALTER TABLE letter DROP PRIMARY KEY ");
14406 $dbh->do( "ALTER TABLE letter ADD PRIMARY KEY (`module`, `code`, `branchcode`, `message_transport_type`, `lang`) ");
14408 $dbh->do( "INSERT IGNORE INTO systempreferences (variable,value,options,explanation,type)
14409 VALUES ('TranslateNotices', '0', NULL, 'Allow notices to be translated', 'YesNo') ");
14411 SetVersion( $DBversion );
14412 print "Upgrade to $DBversion done (Bug 17762 - Add columns letter.lang and borrowers.lang to allow translation of notices)\n";
14415 $DBversion = '16.12.00.034';
14416 if( CheckVersion( $DBversion ) ) {
14417 $dbh->do(q{
14418 INSERT IGNORE INTO systempreferences ( `variable`, `value`, `options`, `explanation`, `type` )
14419 VALUES ('OPACFineNoRenewalsBlockAutoRenew','0','','Block/Allow auto renewals if the patron owe more than OPACFineNoRenewals','YesNo')
14422 SetVersion( $DBversion );
14423 print "Upgrade to $DBversion done (Bug 15582 - Ability to block auto renewals if the OPACFineNoRenewals amount is reached)\n";
14426 $DBversion = '16.12.00.035';
14427 if( CheckVersion( $DBversion ) ) {
14428 if( !column_exists( 'issues', 'auto_renew_error' ) ) {
14429 $dbh->do(q{
14430 ALTER TABLE issues ADD COLUMN auto_renew_error VARCHAR(32) DEFAULT NULL AFTER auto_renew;
14434 if( !column_exists( 'old_issues', 'auto_renew_error' ) ) {
14435 $dbh->do(q{
14436 ALTER TABLE old_issues ADD COLUMN auto_renew_error VARCHAR(32) DEFAULT NULL AFTER auto_renew;
14440 $dbh->do(q{
14441 INSERT INTO letter (module, code, name, title, content, message_transport_type) VALUES ('circulation', 'AUTO_RENEWALS', 'Notification of automatic renewal', 'Automatic renewal notice',
14442 "Dear [% borrower.firstname %] [% borrower.surname %],
14443 [% IF checkout.auto_renew_error %]
14444 The following item, [% biblio.title %], has not been renewed because:
14445 [% IF checkout.auto_renew_error == 'too_many' %]
14446 You have reached the maximum number of checkouts possible.
14447 [% ELSIF checkout.auto_renew_error == 'on_reserve' %]
14448 This item is on hold for another patron.
14449 [% ELSIF checkout.auto_renew_error == 'restriction' %]
14450 You are currently restricted.
14451 [% ELSIF checkout.auto_renew_error == 'overdue' %]
14452 You have overdue items.
14453 [% ELSIF checkout.auto_renew_error == 'auto_too_late' %]
14454 It\'s too late to renew this item.
14455 [% ELSIF checkout.auto_renew_error == 'auto_too_much_oweing' %]
14456 Your total unpaid fines are too high.
14457 [% END %]
14458 [% ELSE %]
14459 The following item, [% biblio.title %], has correctly been renewed and is now due on [% checkout.date_due | $KohaDates as_due_date => 1 %]
14460 [% END %]", 'email');
14463 SetVersion( $DBversion );
14464 print "Upgrade to $DBversion done (Bug 15705 - Notify the user on auto renewing)\n";
14467 $DBversion = '16.12.00.036';
14468 if( CheckVersion( $DBversion ) ) {
14469 $dbh->do(q{
14470 INSERT IGNORE INTO systempreferences (`variable`, `value`, `options`, `explanation`, `type`)
14471 VALUES ('NumSavedReports', '20', NULL, 'By default, show this number of saved reports.', 'Integer');
14474 SetVersion( $DBversion );
14475 print "Upgrade to $DBversion done (Bug 17465 - Add a System Preference to control number of Saved Reports displayed)\n";
14478 $DBversion = '16.12.00.037';
14479 if( CheckVersion( $DBversion ) ) {
14480 $dbh->do( q|
14481 INSERT IGNORE INTO systempreferences (`variable`, `value`, `options`, `explanation`, `type`)
14482 VALUES ('FailedLoginAttempts','','','Number of login attempts before lockout the patron account','Integer');
14485 unless( column_exists( 'borrowers', 'login_attempts' ) ) {
14486 $dbh->do(q|
14487 ALTER TABLE borrowers ADD COLUMN login_attempts INT(4) DEFAULT 0 AFTER lastseen
14489 $dbh->do(q|
14490 ALTER TABLE deletedborrowers ADD COLUMN login_attempts INT(4) DEFAULT 0 AFTER lastseen
14494 SetVersion( $DBversion );
14495 print "Upgrade to $DBversion done (Bug 18314 - Add FailedLoginAttempts and borrowers.login_attempts)\n";
14498 $DBversion = '16.12.00.038';
14499 if( CheckVersion( $DBversion ) ) {
14500 $dbh->do(q{
14501 INSERT IGNORE INTO systempreferences ( `variable`, `value`, `options`, `explanation`, `type` ) VALUES
14502 ('ExportRemoveFields','',NULL,'List of fields for non export in circulation.pl (separated by a space)','Free');
14505 SetVersion( $DBversion );
14506 print "Upgrade to $DBversion done (Bug 18663 - Missing db update for ExportRemoveFields)\n";
14509 $DBversion = '16.12.00.039';
14510 if( CheckVersion( $DBversion ) ) {
14511 $dbh->do(q{
14512 INSERT IGNORE INTO systempreferences ( `variable`, `value`, `options`, `explanation`, `type` ) VALUES
14513 ('TalkingTechItivaPhoneNotification','0',NULL,'If ON, enables Talking Tech I-tiva phone notifications','YesNo');
14516 SetVersion( $DBversion );
14517 print "Upgrade to $DBversion done (Bug 18600 - Missing db update for TalkingTechItivaPhoneNotification)\n";
14520 $DBversion = '17.05.00.000';
14521 if( CheckVersion( $DBversion ) ) {
14523 SetVersion( $DBversion );
14524 print "Upgrade to $DBversion done (Koha 17.05)\n";
14527 $DBversion = '17.06.00.000';
14528 if( CheckVersion( $DBversion ) ) {
14529 SetVersion( $DBversion );
14530 print "Upgrade to $DBversion done (He pai ake te iti i te kore)\n";
14533 $DBversion = '17.06.00.001';
14534 if( CheckVersion( $DBversion ) ) {
14536 unless ( column_exists( 'export_format', 'used_for' ) ) {
14537 $dbh->do(q|ALTER TABLE export_format ADD used_for varchar(255) DEFAULT 'export_records' AFTER type|);
14539 $dbh->do(q|UPDATE export_format SET used_for = 'late_issues' WHERE type = 'sql'|);
14540 $dbh->do(q|UPDATE export_format SET used_for = 'export_records' WHERE type = 'marc'|);
14542 SetVersion( $DBversion );
14543 print "Upgrade to $DBversion done (Bug 8612 - Add new column export_format.used_for)\n";
14546 $DBversion = '17.06.00.002';
14547 if ( CheckVersion($DBversion) ) {
14549 unless ( column_exists('virtualshelves', 'allow_change_from_owner' ) ) {
14550 $dbh->do(q|
14551 ALTER TABLE virtualshelves
14552 ADD COLUMN allow_change_from_owner tinyint(1) default 1,
14553 ADD COLUMN allow_change_from_others tinyint(1) default 0
14556 # Conversion:
14557 # Since we had no readonly lists, change_from_owner is set to true.
14558 # When adding or delete_other was granted, change_from_others is true.
14559 # Note: In my opinion the best choice; there is no exact match.
14560 $dbh->do(q|
14561 UPDATE virtualshelves
14562 SET allow_change_from_owner = 1,
14563 allow_change_from_others = CASE WHEN allow_add=1 OR allow_delete_other=1 THEN 1 ELSE 0 END
14566 # Remove the old columns
14567 $dbh->do(q|
14568 ALTER TABLE virtualshelves
14569 DROP COLUMN allow_add,
14570 DROP COLUMN allow_delete_own,
14571 DROP COLUMN allow_delete_other
14575 SetVersion($DBversion);
14576 print "Upgrade to $DBversion done (Bug 18228 - Alter table virtualshelves to simplify permissions)\n";
14579 $DBversion = '17.06.00.003';
14580 if ( CheckVersion($DBversion) ) {
14582 # Fetch all auth types
14583 my $authtypes = $dbh->selectcol_arrayref(q|SELECT authtypecode FROM auth_types|);
14585 if ( grep { $_ eq 'Default' } @$authtypes ) {
14587 # If this exists as an authtypecode, we don't do anything
14589 else {
14590 # Replace the incorrect Default by empty string
14591 $dbh->do(q|
14592 UPDATE auth_header SET authtypecode='' WHERE authtypecode='Default'
14596 SetVersion($DBversion);
14597 print "Upgrade to $DBversion done (Bug 18801 - Update incorrect Default auth type codes)\n";
14600 $DBversion = '17.06.00.004';
14601 if( CheckVersion( $DBversion ) ) {
14602 $dbh->do(q{
14603 INSERT IGNORE INTO systempreferences ( `variable`, `value`, `options`, `explanation`, `type` ) VALUES
14604 ('GoogleOpenIDConnectAutoRegister', '0',NULL,' Google OpenID Connect logins to auto-register patrons.','YesNo'),
14605 ('GoogleOpenIDConnectDefaultCategory','','','This category code will be used to create Google OpenID Connect patrons.','Textarea'),
14606 ('GoogleOpenIDConnectDefaultBranch', '','','This branch code will be used to create Google OpenID Connect patrons.','Textarea');
14609 SetVersion( $DBversion );
14610 print "Upgrade to $DBversion done (Bug 16892: Add automatic patron registration via OAuth2 login)\n";
14613 $DBversion = '17.06.00.005';
14614 if( CheckVersion( $DBversion ) ) {
14615 $dbh->do(q{
14616 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')
14619 SetVersion( $DBversion );
14620 print "Upgrade to $DBversion done (Bug 18718 - Language selector in staff header menu similar to OPAC )\n";
14623 $DBversion = '17.06.00.006';
14624 if( CheckVersion( $DBversion ) ) {
14625 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.};
14626 print "\n";
14628 SetVersion( $DBversion );
14629 print "Upgrade to $DBversion done (Bug 18811 - Visibility settings inconsistent between framework and authority editor)\n";
14632 $DBversion = '17.06.00.007';
14633 if( CheckVersion( $DBversion ) ) {
14634 if( !column_exists( 'branches', 'marcorgcode' ) ) {
14635 $dbh->do( "ALTER TABLE branches ADD COLUMN marcorgcode VARCHAR(16) default NULL AFTER geolocation" );
14638 SetVersion( $DBversion );
14639 print "Upgrade to $DBversion done (Bug 10132 - MARCOrgCode on branch level (branches.marcorgcode))\n";
14642 $DBversion = '17.06.00.008';
14643 if( CheckVersion( $DBversion ) ) {
14644 unless ( column_exists( 'borrowers', 'date_renewed' ) ) {
14645 $dbh->do(q{
14646 ALTER TABLE borrowers ADD COLUMN date_renewed DATE NULL DEFAULT NULL AFTER dateexpiry;
14650 unless ( column_exists( 'deletedborrowers', 'date_renewed' ) ) {
14651 $dbh->do(q{
14652 ALTER TABLE deletedborrowers ADD COLUMN date_renewed DATE NULL DEFAULT NULL AFTER dateexpiry;
14656 unless ( column_exists( 'borrower_modifications', 'date_renewed' ) ) {
14657 $dbh->do(q{
14658 ALTER TABLE borrower_modifications ADD COLUMN date_renewed DATE NULL DEFAULT NULL AFTER dateexpiry;
14662 SetVersion( $DBversion );
14663 print "Upgrade to $DBversion done (Bug 6758 - Capture membership renewal date for reporting purposes (borrowers.date_renewed))\n";
14666 $DBversion = '17.06.00.009';
14667 if( CheckVersion( $DBversion ) ) {
14668 $dbh->do(q{
14669 ALTER TABLE borrowers MODIFY COLUMN login_attempts int(4) AFTER lang;
14671 $dbh->do(q{
14672 ALTER TABLE deletedborrowers MODIFY COLUMN login_attempts int(4) AFTER lang;
14675 SetVersion( $DBversion );
14676 print "Upgrade to $DBversion done (Bug 19344 - Reorder lang and login_attempts in the [deleted]borrowers tables)\n";
14679 $DBversion = '17.06.00.010';
14680 if ( CheckVersion($DBversion) ) {
14681 $dbh->do(q{
14682 INSERT IGNORE INTO systempreferences ( `variable`, `value`, `options`, `explanation`, `type` )
14683 VALUES (
14684 'DefaultCountryField008','','',
14685 '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')
14687 SetVersion($DBversion);
14688 print "Upgrade to $DBversion done (Bug 13912 - System preference for default place of publication (country code) for field 008, range 15-17)\n";
14691 $DBversion = '17.06.00.011';
14692 if ( CheckVersion($DBversion) ) {
14693 # Drop index that might exist because of bug 5337
14694 if( index_exists('biblioitems', 'ean')) {
14695 $dbh->do(q{ ALTER TABLE biblioitems DROP INDEX ean });
14697 if( index_exists('deletedbiblioitems', 'ean')) {
14698 $dbh->do(q{ ALTER TABLE deletedbiblioitems DROP INDEX ean });
14701 # Change data type of column
14702 $dbh->do(q{ ALTER TABLE biblioitems MODIFY COLUMN ean MEDIUMTEXT default NULL });
14703 $dbh->do(q{ ALTER TABLE deletedbiblioitems MODIFY COLUMN ean MEDIUMTEXT default NULL });
14705 # Add indexes
14706 $dbh->do(q{ ALTER TABLE biblioitems ADD INDEX ean ( ean(255) )});
14707 $dbh->do(q{ ALTER TABLE deletedbiblioitems ADD INDEX ean ( ean(255 ) )});
14709 SetVersion($DBversion);
14710 print "Upgrade to $DBversion done (Bug 13766 - Make ean mediumtext and add ean indexes)\n";
14713 $DBversion = '17.06.00.012';
14714 if( CheckVersion( $DBversion ) ) {
14715 my $where = q|host='clio-db.cc.columbia.edu' AND port=7090|;
14716 my $sql = "SELECT COUNT(*) FROM z3950servers WHERE $where";
14717 my ( $cnt ) = $dbh->selectrow_array( $sql );
14718 if( $cnt ) {
14719 $dbh->do( "DELETE FROM z3950servers WHERE $where" );
14720 print "Removed $cnt Z39.50 target(s) for Columbia University\n";
14723 SetVersion( $DBversion );
14724 print "Upgrade to $DBversion done (Bug 19043 - Z39.50 target for Columbia University is no longer publicly available.)\n";
14727 $DBversion = '17.06.00.013';
14728 if( CheckVersion( $DBversion ) ) {
14729 $dbh->do( "UPDATE systempreferences SET value = CONCAT('http://', value) WHERE variable = 'staffClientBaseURL' AND value <> '' AND value NOT LIKE 'http%'" );
14731 my ( $staffClientBaseURL_used_in_notices ) = $dbh->selectrow_array(q|
14732 SELECT COUNT(*) FROM letter where content like "%staffClientBaseURL%"
14734 if ( $staffClientBaseURL_used_in_notices ) {
14735 warn "\tYou may need to update one or more notice templates if they contain 'staffClientBaseURL'\n";
14738 SetVersion( $DBversion );
14739 print "Upgrade to $DBversion done (Bug 16401 - fix potentialy bad set staffClientBaseURL preference)\n";
14742 $DBversion = '17.06.00.014';
14743 if( CheckVersion( $DBversion ) ) {
14744 unless( column_exists('aqbasket','create_items') ){
14745 $dbh->do(q{
14746 ALTER TABLE aqbasket
14747 ADD COLUMN create_items ENUM('ordering', 'receiving', 'cataloguing') default NULL AFTER is_standing
14751 SetVersion( $DBversion );
14752 print "Upgrade to $DBversion done (Bug 15685 - Allow creation of items (AcqCreateItem) to be customizable per-basket)\n";
14755 $DBversion = '17.06.00.015';
14756 if( CheckVersion( $DBversion ) ) {
14757 $dbh->do(q{
14758 INSERT IGNORE INTO systempreferences (`variable`, `value`, `options`, `explanation`, `type`) VALUES
14759 ('SelfCheckoutByLogin','0',NULL,'Have patrons login into the web-based self checkout system with their username/password or their cardnumber','YesNo')
14762 SetVersion( $DBversion );
14763 print "Upgrade to $DBversion done (Bug 19186 - Insert system preference SelfCheckoutByLogin if missing)\n";
14766 $DBversion = '17.06.00.016';
14767 if( CheckVersion( $DBversion ) ) {
14768 $dbh->do(q{
14769 INSERT IGNORE INTO systempreferences (`variable`, `value`, `options`, `explanation`, `type`)
14770 VALUES ('RequireStrongPassword','0','','Require a strong login password for staff and patrons','YesNo');
14773 SetVersion( $DBversion );
14774 print "Upgrade to $DBversion done (Bug 18298 - Allow enforcing password complexity (system preference RequireStrongPassword))\n";
14777 $DBversion = '17.06.00.017';
14778 if( CheckVersion( $DBversion ) ) {
14779 unless (TableExists('account_offsets')) {
14780 $dbh->do(q{
14781 DROP TABLE IF EXISTS `accountoffsets`;
14784 $dbh->do(q{
14785 CREATE TABLE IF NOT EXISTS `account_offset_types` (
14786 `type` varchar(16) NOT NULL, -- The type of offset this is
14787 PRIMARY KEY (`type`)
14788 ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
14791 $dbh->do(q{
14792 CREATE TABLE IF NOT EXISTS `account_offsets` (
14793 `id` int(11) NOT NULL auto_increment, -- unique identifier for each offset
14794 `credit_id` int(11) NULL DEFAULT NULL, -- The id of the accountline the increased the patron's balance
14795 `debit_id` int(11) NULL DEFAULT NULL, -- The id of the accountline that decreased the patron's balance
14796 `type` varchar(16) NOT NULL, -- The type of offset this is
14797 `amount` decimal(26,6) NOT NULL, -- The amount of the change
14798 `created_on` timestamp NOT NULL default CURRENT_TIMESTAMP,
14799 PRIMARY KEY (`id`),
14800 CONSTRAINT `account_offsets_ibfk_p` FOREIGN KEY (`credit_id`) REFERENCES `accountlines` (`accountlines_id`) ON DELETE CASCADE ON UPDATE CASCADE,
14801 CONSTRAINT `account_offsets_ibfk_f` FOREIGN KEY (`debit_id`) REFERENCES `accountlines` (`accountlines_id`) ON DELETE CASCADE ON UPDATE CASCADE,
14802 CONSTRAINT `account_offsets_ibfk_t` FOREIGN KEY (`type`) REFERENCES `account_offset_types` (`type`) ON DELETE CASCADE ON UPDATE CASCADE
14803 ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
14806 $dbh->do(q{
14807 INSERT IGNORE INTO account_offset_types ( type ) VALUES
14808 ('Writeoff'),
14809 ('Payment'),
14810 ('Lost Item'),
14811 ('Processing Fee'),
14812 ('Manual Debit'),
14813 ('Reverse Payment'),
14814 ('Forgiven'),
14815 ('Dropbox'),
14816 ('Rental Fee'),
14817 ('Fine Update'),
14818 ('Fine');
14822 SetVersion( $DBversion );
14823 print "Upgrade to $DBversion done (Bug 14826 - Resurrect account offsets table (Add new tables account_offsets and account_offset_types))\n";
14826 $DBversion = '17.06.00.018';
14827 if( CheckVersion( $DBversion ) ) {
14828 $dbh->do(q{
14829 INSERT IGNORE INTO systempreferences (variable,value,explanation,type) VALUES ('useDefaultReplacementCost',0,'default replacement cost defined in item type','YesNo');
14831 $dbh->do(q{
14832 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');
14834 $dbh->do(q{
14835 ALTER TABLE `itemtypes` MODIFY COLUMN `rentalcharge` DECIMAL(28,6) NULL DEFAULT NULL;
14837 unless ( column_exists( 'itemtypes', 'defaultreplacecost' ) ) {
14838 $dbh->do(q{
14839 ALTER TABLE `itemtypes` ADD `defaultreplacecost` DECIMAL(28,6) NULL DEFAULT NULL AFTER `rentalcharge`;
14842 unless ( column_exists( 'itemtypes', 'processfee' ) ) {
14843 $dbh->do(q{
14844 ALTER TABLE `itemtypes` ADD `processfee` DECIMAL(28,6) NULL DEFAULT NULL AFTER `defaultreplacecost`;
14848 SetVersion( $DBversion );
14849 print "Upgrade to $DBversion done (Bug 12768 - Insert system preferences useDefaultReplacementCost and ProcessingFeeNote + Add new columns defaultreplacecost and processfee to the itemtypes table)\n";
14852 $DBversion = '17.06.00.019';
14853 if( CheckVersion( $DBversion ) ) {
14854 $dbh->do(q{
14855 INSERT IGNORE INTO account_offset_types ( type ) VALUES ( 'Processing Fee' );
14858 SetVersion( $DBversion );
14859 print "Upgrade to $DBversion done (Bug 12768 - Add 'Processing Fee' to the account_offset_types table if missing)\n";
14862 $DBversion = '17.06.00.020';
14863 if( CheckVersion( $DBversion ) ) {
14864 $dbh->do(q{
14865 UPDATE systempreferences
14867 variable='OpacLocationOnDetail',
14868 options='holding|home|both|column',
14869 explanation='In the OPAC detail, display the shelving location on its own column or under a library columns.'
14870 WHERE
14871 variable='OpacLocationBranchToDisplayShelving'
14874 SetVersion( $DBversion );
14875 print "Upgrade to $DBversion done (Bug 19028: Add 'shelving location' to holdings table in detail page (Rename syspref OpacLocationBranchToDisplayShelving with OpacLocationOnDetail))\n";
14878 $DBversion = '17.06.00.021';
14879 if( CheckVersion( $DBversion ) ) {
14880 $dbh->do(q{
14881 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')
14884 SetVersion( $DBversion );
14885 print "Upgrade to $DBversion done (Bug 17381 - Add system preference SCOMainUserBlock)\n";
14888 $DBversion = '17.06.00.022';
14889 if( CheckVersion( $DBversion ) ) {
14890 my $hide_barcode = C4::Context->preference('OPACShowBarcode') ? 0 : 1;
14891 $dbh->do(q{
14892 DELETE FROM systempreferences
14893 WHERE
14894 variable='OPACShowBarcode'
14897 # Configure column visibility if it isn't
14898 $dbh->do(q{
14899 INSERT IGNORE INTO columns_settings
14900 (module,page,tablename,columnname,cannot_be_toggled,is_hidden)
14901 VALUES
14902 ('opac','biblio-detail','holdingst','item_barcode',0,?)
14903 }, undef, $hide_barcode);
14905 SetVersion( $DBversion );
14906 print "Upgrade to $DBversion done (Bug 19038: Remove OPACShowBarcode syspref)\n";
14909 $DBversion = '17.06.00.023';
14910 if( CheckVersion( $DBversion ) ) {
14911 $dbh->do(q{
14912 INSERT IGNORE INTO systempreferences ( `variable`, `value`, `options`, `explanation`, `type` ) VALUES
14913 ('MarkLostItemsAsReturned','1','','Mark items as returned when flagged as lost','YesNo');
14916 SetVersion( $DBversion );
14917 print "Upgrade to $DBversion done (Bug 12363 - Add system preference MarkLostItemsAsReturned)\n";
14920 $DBversion = '17.06.00.024';
14921 if( CheckVersion( $DBversion ) ) {
14922 $dbh->do(q{
14923 INSERT IGNORE INTO systempreferences (`variable`,`value`,`options`,`explanation`,`type`) VALUES
14924 ('OPACUserSummary', 1, NULL, "Show the summary of a logged in user's checkouts, overdues, holds and fines on the mainpage", 'YesNo');
14927 SetVersion( $DBversion );
14928 print "Upgrade to $DBversion done (Bug 2093 - Add system preference OPACUserSummary)\n";
14931 $DBversion = '17.06.00.025';
14932 if( CheckVersion( $DBversion ) ) {
14933 $dbh->do(q{
14934 ALTER TABLE borrowers MODIFY cardnumber varchar(32);
14936 $dbh->do(q{
14937 ALTER TABLE borrower_modifications MODIFY cardnumber varchar(32);
14939 $dbh->do(q{
14940 ALTER TABLE deletedborrowers MODIFY cardnumber varchar(32);
14942 $dbh->do(q{
14943 ALTER TABLE pending_offline_operations MODIFY cardnumber varchar(32);
14945 $dbh->do(q{
14946 ALTER TABLE tmp_holdsqueue MODIFY cardnumber varchar(32);
14949 SetVersion( $DBversion );
14950 print "Upgrade to $DBversion done (Bug 13178 - Increase cardnumber fields to VARCHAR(32))\n";
14953 $DBversion = '17.06.00.026';
14954 if( CheckVersion( $DBversion ) ) {
14955 $dbh->do(q{
14956 INSERT IGNORE INTO systempreferences ( `variable`, `value`, `options`, `explanation`, `type` ) VALUES
14957 ('BlockReturnOfLostItems','0','0','If enabled, items that are marked as lost cannot be returned.','YesNo');
14960 SetVersion( $DBversion );
14961 print "Upgrade to $DBversion done (Bug 10748 - Add system preference BlockReturnOfLostItems)\n";
14964 $DBversion = '17.06.00.027';
14965 if( CheckVersion( $DBversion ) ) {
14966 if ( !column_exists( 'statistics', 'location' ) ) {
14967 $dbh->do('ALTER TABLE statistics ADD COLUMN location VARCHAR(80) default NULL AFTER itemtype');
14970 SetVersion($DBversion);
14971 print "Upgrade to $DBversion done (Bug 18882 - Add location code to statistics table for checkouts and renewals)\n";
14974 $DBversion = '17.06.00.028';
14975 if( CheckVersion( $DBversion ) ) {
14976 if ( !TableExists( 'illrequests' ) ) {
14977 $dbh->do(q{
14978 CREATE TABLE illrequests (
14979 illrequest_id serial PRIMARY KEY, -- ILL request number
14980 borrowernumber integer DEFAULT NULL, -- Patron associated with request
14981 biblio_id integer DEFAULT NULL, -- Potential bib linked to request
14982 branchcode varchar(50) NOT NULL, -- The branch associated with the request
14983 status varchar(50) DEFAULT NULL, -- Current Koha status of request
14984 placed date DEFAULT NULL, -- Date the request was placed
14985 replied date DEFAULT NULL, -- Last API response
14986 updated timestamp DEFAULT CURRENT_TIMESTAMP -- Last modification to request
14987 ON UPDATE CURRENT_TIMESTAMP,
14988 completed date DEFAULT NULL, -- Date the request was completed
14989 medium varchar(30) DEFAULT NULL, -- The Koha request type
14990 accessurl varchar(500) DEFAULT NULL, -- Potential URL for accessing item
14991 cost varchar(20) DEFAULT NULL, -- Cost of request
14992 notesopac text DEFAULT NULL, -- Patron notes attached to request
14993 notesstaff text DEFAULT NULL, -- Staff notes attached to request
14994 orderid varchar(50) DEFAULT NULL, -- Backend id attached to request
14995 backend varchar(20) DEFAULT NULL, -- The backend used to create request
14996 CONSTRAINT `illrequests_bnfk`
14997 FOREIGN KEY (`borrowernumber`)
14998 REFERENCES `borrowers` (`borrowernumber`)
14999 ON UPDATE CASCADE ON DELETE CASCADE,
15000 CONSTRAINT `illrequests_bcfk_2`
15001 FOREIGN KEY (`branchcode`)
15002 REFERENCES `branches` (`branchcode`)
15003 ON UPDATE CASCADE ON DELETE CASCADE
15004 ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
15008 if ( !TableExists( 'illrequestattributes' ) ) {
15009 $dbh->do(q{
15010 CREATE TABLE illrequestattributes (
15011 illrequest_id bigint(20) unsigned NOT NULL, -- ILL request number
15012 type varchar(200) NOT NULL, -- API ILL property name
15013 value text NOT NULL, -- API ILL property value
15014 PRIMARY KEY (`illrequest_id`,`type`),
15015 CONSTRAINT `illrequestattributes_ifk`
15016 FOREIGN KEY (illrequest_id)
15017 REFERENCES `illrequests` (`illrequest_id`)
15018 ON UPDATE CASCADE ON DELETE CASCADE
15019 ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
15023 # System preferences
15024 $dbh->do(q{
15025 INSERT IGNORE INTO systempreferences (variable,value,explanation,options,type) VALUES
15026 ('ILLModule','0','If ON, enables the interlibrary loans module.','','YesNo');
15029 $dbh->do(q{
15030 INSERT IGNORE INTO systempreferences (variable,value,explanation,options,type) VALUES
15031 ('ILLModuleCopyrightClearance','','70|10','Enter text to enable the copyright clearance stage of request creation. Text will be displayed','Textarea');
15033 # userflags
15034 $dbh->do(q{
15035 INSERT IGNORE INTO userflags (bit,flag,flagdesc,defaulton) VALUES
15036 (22,'ill','The Interlibrary Loans Module',0);
15039 SetVersion( $DBversion );
15040 print "Upgrade to $DBversion done (Bug 7317 - Add an Interlibrary Loan Module to Circulation and OPAC)\n";
15043 $DBversion = '17.11.00.000';
15044 if( CheckVersion( $DBversion ) ) {
15045 SetVersion( $DBversion );
15046 print "Upgrade to $DBversion done (Koha 17.11)\n";
15049 $DBversion = '17.12.00.000';
15050 if( CheckVersion( $DBversion ) ) {
15051 SetVersion( $DBversion );
15052 print "Upgrade to $DBversion done (Tē tōia, tē haumatia)\n";
15055 $DBversion = '17.12.00.001';
15056 if( CheckVersion( $DBversion ) ) {
15057 foreach my $table (qw(biblio_metadata deletedbiblio_metadata)) {
15058 if (!column_exists($table, 'timestamp')) {
15059 $dbh->do(qq{
15060 ALTER TABLE `$table`
15061 ADD COLUMN `timestamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP AFTER `metadata`,
15062 ADD KEY `timestamp` (`timestamp`)
15064 $dbh->do(qq{
15065 UPDATE $table metadata
15066 LEFT JOIN biblioitems ON (biblioitems.biblionumber = metadata.biblionumber)
15067 LEFT JOIN biblio ON (biblio.biblionumber = metadata.biblionumber)
15068 SET metadata.timestamp = GREATEST(biblioitems.timestamp, biblio.timestamp);
15073 SetVersion( $DBversion );
15074 print "Upgrade to $DBversion done (Bug 19724 - Add [deleted]biblio_metadata.timestamp)\n";
15077 $DBversion = '17.12.00.002';
15078 if( CheckVersion( $DBversion ) ) {
15080 my $msss = $dbh->selectall_arrayref(q|
15081 SELECT kohafield, tagfield, tagsubfield, frameworkcode
15082 FROM marc_subfield_structure
15083 WHERE frameworkcode != ''
15084 |, { Slice => {} });
15087 my $sth = $dbh->prepare(q|
15088 SELECT kohafield
15089 FROM marc_subfield_structure
15090 WHERE frameworkcode = ''
15091 AND tagfield = ?
15092 AND tagsubfield = ?
15095 my @exceptions;
15096 for my $mss ( @$msss ) {
15097 $sth->execute($mss->{tagfield}, $mss->{tagsubfield} );
15098 my ( $default_kohafield ) = $sth->fetchrow_array();
15099 if( $mss->{kohafield} ) {
15100 push @exceptions, { frameworkcode => $mss->{frameworkcode}, tagfield => $mss->{tagfield}, tagsubfield => $mss->{tagsubfield}, kohafield => $mss->{kohafield} } if not $default_kohafield or $default_kohafield ne $mss->{kohafield};
15101 } else {
15102 push @exceptions, { frameworkcode => $mss->{frameworkcode}, tagfield => $mss->{tagfield}, tagsubfield => $mss->{tagsubfield}, kohafield => q{} } if $default_kohafield;
15106 if (@exceptions) {
15107 print "WARNING: The Default framework is now considered as authoritative for Koha to MARC mappings. We have found that your additional frameworks contained "
15108 . scalar(@exceptions)
15109 . " 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";
15110 for my $exception (@exceptions) {
15111 print "Field "
15112 . $exception->{tagfield} . '$'
15113 . $exception->{tagsubfield}
15114 . " in framework "
15115 . $exception->{frameworkcode} . ': ';
15116 if ( $exception->{kohafield} ) {
15117 print "Mapping to "
15118 . $exception->{kohafield}
15119 . " has been adjusted.\n";
15121 else {
15122 print "Mapping has been reset.\n";
15126 # Sync kohafield
15128 # Clear the destination frameworks first
15129 $dbh->do(q|
15130 UPDATE marc_subfield_structure
15131 SET kohafield = NULL
15132 WHERE frameworkcode > ''
15133 AND Kohafield > ''
15136 # Now copy from Default
15137 my $msss = $dbh->selectall_arrayref(q|
15138 SELECT kohafield, tagfield, tagsubfield
15139 FROM marc_subfield_structure
15140 WHERE frameworkcode = ''
15141 AND kohafield > ''
15142 |, { Slice => {} });
15143 my $sth = $dbh->prepare(q|
15144 UPDATE marc_subfield_structure
15145 SET kohafield = ?
15146 WHERE frameworkcode > ''
15147 AND tagfield = ?
15148 AND tagsubfield = ?
15150 for my $mss (@$msss) {
15151 $sth->execute( $mss->{kohafield}, $mss->{tagfield},
15152 $mss->{tagsubfield} );
15155 # Clear the cache
15156 my @frameworkcodes = $dbh->selectall_arrayref(q|
15157 SELECT frameworkcode FROM biblio_framework WHERE frameworkcode > ''
15159 for my $frameworkcode (@frameworkcodes) {
15160 Koha::Caches->get_instance->clear_from_cache("MarcSubfieldStructure-$frameworkcode");
15162 Koha::Caches->get_instance->clear_from_cache("default_value_for_mod_marc-");
15165 SetVersion( $DBversion );
15166 print "Upgrade to $DBversion done (Bug 19096 - Make Default authoritative for Koha to MARC mappings)\n";
15169 $DBversion = '17.12.00.003';
15170 if( CheckVersion( $DBversion ) ) {
15171 $dbh->do(q|DROP TABLE IF EXISTS notifys|);
15173 if( column_exists( 'accountlines', 'notify_id' ) ) {
15174 $dbh->do(q|ALTER TABLE accountlines DROP COLUMN notify_id|);
15175 $dbh->do(q|ALTER TABLE accountlines DROP COLUMN notify_level|);
15178 SetVersion( $DBversion );
15179 print "Upgrade to $DBversion done (Bug 10021 - Drop notifys-related table and columns)\n";
15182 $DBversion = '17.12.00.004';
15183 if( CheckVersion( $DBversion ) ) {
15184 $dbh->do(q{
15185 INSERT IGNORE INTO systempreferences ( `variable`, `value`, `options`, `explanation`, `type` )
15186 VALUES
15187 ('RESTdefaultPageSize','20','','Set the default number of results returned by the REST API endpoints','Integer')
15190 SetVersion( $DBversion );
15191 print "Upgrade to $DBversion done (Bug 19278 - Add a configurable default page size for REST endpoints)\n";
15194 $DBversion = '17.12.00.005';
15195 if( CheckVersion( $DBversion ) ) {
15196 # For installations having the note already
15197 $dbh->do(q{
15198 UPDATE letter
15199 SET code = 'CHECKOUT_NOTE',
15200 name = 'Checkout note on item set by patron',
15201 title = 'Checkout note',
15202 content = REPLACE(content, "<<biblio.item>>", "<<biblio.title>>")
15203 WHERE code = 'PATRON_NOTE'
15205 # For installations coming from 17.11
15206 $dbh->do(q{
15207 INSERT IGNORE INTO `letter` (`module`, `code`, `branchcode`, `name`, `is_html`, `title`, `content`, `message_transport_type`)
15208 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')
15211 SetVersion( $DBversion );
15212 print "Upgrade to $DBversion done (Bug 18915 - Correct CHECKOUT_NOTE notice template)\n";
15215 $DBversion = '17.12.00.006';
15216 if( CheckVersion( $DBversion ) ) {
15217 $dbh->do(q{
15218 UPDATE systempreferences SET value=replace(value, "http://www.scholar", "https://scholar") WHERE variable='OPACSearchForTitleIn';
15221 SetVersion( $DBversion );
15222 print "Upgrade to $DBversion done (Bug 17682 - Update URL for Google Scholar in OPACSearchForTitleIn)\n";
15225 $DBversion = '17.12.00.007';
15226 if( CheckVersion( $DBversion ) ) {
15228 unless ( TableExists( 'library_groups' ) ) {
15229 $dbh->do(q{
15230 CREATE TABLE library_groups (
15231 id INT(11) NOT NULL auto_increment, -- unique id for each group
15232 parent_id INT(11) NULL DEFAULT NULL, -- if this is a child group, the id of the parent group
15233 branchcode VARCHAR(10) NULL DEFAULT NULL, -- The branchcode of a branch belonging to the parent group
15234 title VARCHAR(100) NULL DEFAULT NULL, -- Short description of the goup
15235 description TEXT NULL DEFAULT NULL, -- Longer explanation of the group, if necessary
15236 created_on TIMESTAMP NULL, -- Date and time of creation
15237 updated_on TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, -- Date and time of last
15238 PRIMARY KEY id ( id ),
15239 FOREIGN KEY (parent_id) REFERENCES library_groups(id) ON UPDATE CASCADE ON DELETE CASCADE,
15240 FOREIGN KEY (branchcode) REFERENCES branches(branchcode) ON UPDATE CASCADE ON DELETE CASCADE,
15241 UNIQUE KEY title ( title )
15242 ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
15246 SetVersion( $DBversion );
15247 print "Upgrade to $DBversion done (Bug 15707 - Add new table library_groups)\n";
15250 $DBversion = '17.12.00.008';
15251 if ( CheckVersion($DBversion) ) {
15253 if ( TableExists( 'branchcategories' ) and TableExists('branchrelations' )) {
15254 $dbh->do(q{
15255 INSERT INTO library_groups ( title, description, created_on ) VALUES ( '__SEARCH_GROUPS__', 'Library search groups', NOW() )
15257 my $search_groups_root_id = $dbh->last_insert_id(undef, undef, 'library_groups', undef);
15259 my $sth = $dbh->prepare("SELECT * FROM branchcategories");
15261 my $sth2 = $dbh->prepare("INSERT INTO library_groups ( parent_id, title, description, created_on ) VALUES ( ?, ?, ?, NOW() )");
15263 my $sth3 = $dbh->prepare("SELECT * FROM branchrelations WHERE categorycode = ?");
15265 my $sth4 = $dbh->prepare("INSERT INTO library_groups ( parent_id, branchcode, created_on ) VALUES ( ?, ?, NOW() )");
15267 $sth->execute();
15268 while ( my $lc = $sth->fetchrow_hashref ) {
15269 my $description = $lc->{categorycode};
15270 $description .= " - " . $lc->{codedescription} if $lc->{codedescription};
15272 $sth2->execute($search_groups_root_id, $lc->{categoryname}, $description);
15274 my $subgroup_id = $dbh->last_insert_id(undef, undef, 'library_groups', undef);
15276 $sth3->execute( $lc->{categorycode} );
15278 while ( my $l = $sth3->fetchrow_hashref ) {
15279 $sth4->execute( $subgroup_id, $l->{branchcode} );
15283 $dbh->do("DROP TABLE branchrelations");
15284 $dbh->do("DROP TABLE branchcategories");
15287 print "Upgrade to $DBversion done (Bug 16735 - Migrate library search groups into the new hierarchical groups)\n";
15288 SetVersion($DBversion);
15291 $DBversion = '17.12.00.009';
15292 if ( CheckVersion($DBversion) ) {
15293 $dbh->do(q|
15294 INSERT IGNORE INTO permissions (module_bit, code, description) VALUES
15295 (4, 'edit_borrowers', 'Add, modify and view patron information'),
15296 (4, 'view_borrower_infos_from_any_libraries', 'View patron infos from any libraries');
15299 # We are lucky here, there is nothing else to do: flags 4-borrowers did not contain sub permissions
15301 SetVersion( $DBversion );
15302 print "Upgrade to $DBversion done (Bug 18403 - Add the view_borrower_infos_from_any_libraries permission )\n";
15305 $DBversion = '17.12.00.010';
15306 if( CheckVersion( $DBversion ) ) {
15308 if( !column_exists( 'library_groups', 'ft_hide_patron_info' ) ) {
15309 $dbh->do( "ALTER TABLE library_groups ADD COLUMN ft_hide_patron_info tinyint(1) NOT NULL DEFAULT 0 AFTER description" );
15312 SetVersion( $DBversion );
15313 print "Upgrade to $DBversion done (Bug 20133 - Add library_groups.ft_hide_patron_info)\n";
15316 $DBversion = '17.12.00.011';
15317 if( CheckVersion( $DBversion ) ) {
15319 if( !column_exists( 'library_groups', 'ft_search_groups_opac' ) ) {
15320 $dbh->do( "ALTER TABLE library_groups ADD COLUMN ft_search_groups_opac tinyint(1) NOT NULL DEFAULT 0 AFTER ft_hide_patron_info" );
15321 $dbh->do( "ALTER TABLE library_groups ADD COLUMN ft_search_groups_staff tinyint(1) NOT NULL DEFAULT 0 AFTER ft_search_groups_opac" );
15322 $dbh->do( "UPDATE library_groups SET ft_search_groups_staff = 1 AND ft_search_groups_opac = 1 WHERE title = '__SEARCH_GROUPS__'" );
15325 SetVersion( $DBversion );
15326 print "Upgrade to $DBversion done (Bug 20157 - Use group 'features' to decide which groups to use for group searching functionality)\n";
15329 $DBversion = '17.12.00.012';
15330 if( CheckVersion( $DBversion ) ) {
15332 $dbh->do( q|
15333 INSERT IGNORE INTO systempreferences (variable,value,options,explanation,type)
15334 VALUES ('AutoSwitchPatron', '0', '', 'Auto switch to patron', 'YesNo');
15337 SetVersion( $DBversion );
15338 print "Upgrade to $DBversion done (Bug 15752 - Add system preference AutoSwitchPatron)\n";
15341 $DBversion = '17.12.00.013';
15342 if( CheckVersion( $DBversion ) ) {
15344 $dbh->do(q|
15345 ALTER TABLE club_enrollments MODIFY date_created timestamp NULL DEFAULT NULL;
15348 SetVersion( $DBversion );
15349 print "Upgrade to $DBversion done (Bug 20175 - Set DEFAULT NULL value for club_enrollments.date_created)\n";
15352 $DBversion = '17.12.00.014';
15353 if( CheckVersion( $DBversion ) ) {
15354 $dbh->do( "UPDATE marc_subfield_structure SET kohafield=NULL where kohafield='additionalauthors.author'" );
15355 SetVersion( $DBversion );
15356 print "Upgrade to $DBversion done (Bug 19790 - Remove additionalauthors.author from installer files)\n";
15359 $DBversion = '17.12.00.015';
15360 if( CheckVersion( $DBversion ) ) {
15361 $dbh->do(q|
15362 ALTER TABLE borrowers
15363 MODIFY surname MEDIUMTEXT,
15364 MODIFY address MEDIUMTEXT,
15365 MODIFY city MEDIUMTEXT
15367 $dbh->do(q|
15368 ALTER TABLE deletedborrowers
15369 MODIFY surname MEDIUMTEXT,
15370 MODIFY address MEDIUMTEXT,
15371 MODIFY city MEDIUMTEXT
15374 $dbh->do(q|
15375 ALTER TABLE export_format
15376 MODIFY csv_separator VARCHAR(2) NOT NULL DEFAULT ',',
15377 MODIFY field_separator VARCHAR(2),
15378 MODIFY subfield_separator VARCHAR(2)
15380 $dbh->do(q|
15381 ALTER TABLE export_format MODIFY encoding VARCHAR(255) NOT NULL DEFAULT 'utf8'
15384 $dbh->do(q|
15385 ALTER TABLE reserves MODIFY lowestPriority tinyint(1) NOT NULL DEFAULT 0
15387 $dbh->do(q|
15388 ALTER TABLE old_reserves MODIFY lowestPriority tinyint(1) NOT NULL DEFAULT 0
15391 SetVersion( $DBversion );
15392 print "Upgrade to $DBversion done (Bug 20144 - Adapt DB structure to work with new SQL modes)\n";
15395 $DBversion = '17.12.00.016';
15396 if( CheckVersion( $DBversion ) ) {
15397 $dbh->do(q|SET foreign_key_checks = 0|);
15398 my $sth = $dbh->table_info( '','','','TABLE' );
15400 while ( my ( $cat, $schema, $name, $type, $remarks ) = $sth->fetchrow_array ) {
15401 my $table_sth = $dbh->prepare(qq|SHOW CREATE TABLE $name|);
15402 $table_sth->execute;
15403 my @table = $table_sth->fetchrow_array;
15404 unless ( $table[1] =~ /COLLATE=utf8mb4_unicode_ci/ ) {
15405 # Some users might have done the upgrade to utf8mb4 on their own
15406 # to support supplemental chars (japanese, chinese, etc)
15407 if ( $name eq 'additional_fields' ) {
15408 $dbh->do(qq|
15409 ALTER TABLE $name
15410 DROP KEY `fields_uniq`,
15411 ADD UNIQUE KEY `fields_uniq` (`tablename` (191), `name` (191))
15413 $dbh->do(qq|ALTER TABLE $name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci|);
15415 elsif ( $name eq 'authorised_values' ) {
15416 $dbh->do(qq|
15417 ALTER TABLE $name
15418 DROP KEY `lib`,
15419 ADD KEY `lib` (`lib` (191))
15421 $dbh->do(qq|ALTER TABLE $name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci|);
15423 elsif ( $name eq 'borrower_modifications' ) {
15424 $dbh->do(qq|
15425 ALTER TABLE $name
15426 DROP PRIMARY KEY,
15427 DROP KEY `verification_token`,
15428 ADD PRIMARY KEY (`verification_token` (191),`borrowernumber`),
15429 ADD KEY `verification_token` (`verification_token` (191))
15431 $dbh->do(qq|ALTER TABLE $name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci|);
15433 elsif ( $name eq 'columns_settings' ) {
15434 $dbh->do(qq|
15435 ALTER TABLE $name
15436 DROP PRIMARY KEY,
15437 ADD PRIMARY KEY (`module` (191), `page` (191), `tablename` (191), `columnname` (191))
15439 $dbh->do(qq|ALTER TABLE $name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci|);
15441 elsif ( $name eq 'illrequestattributes' ) {
15442 $dbh->do(qq|
15443 ALTER TABLE $name
15444 DROP PRIMARY KEY,
15445 ADD PRIMARY KEY (`illrequest_id`, `type` (191))
15447 $dbh->do(qq|ALTER TABLE $name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci|);
15449 elsif ( $name eq 'items_search_fields' ) {
15450 $dbh->do(qq|
15451 ALTER TABLE $name
15452 DROP PRIMARY KEY,
15453 ADD PRIMARY KEY (`name` (191))
15455 $dbh->do(qq|ALTER TABLE $name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci|);
15457 elsif ( $name eq 'marc_subfield_structure' ) {
15458 # In this case we convert each column explicitly
15459 # to preserve 'tagsubield' collation (utf8mb4_bin)
15460 $dbh->do(qq|
15461 ALTER TABLE $name
15462 MODIFY COLUMN tagfield
15463 VARCHAR(3) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '',
15464 MODIFY COLUMN tagsubfield
15465 VARCHAR(1) COLLATE utf8mb4_bin NOT NULL DEFAULT '',
15466 MODIFY COLUMN liblibrarian
15467 VARCHAR(255) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '',
15468 MODIFY COLUMN libopac
15469 VARCHAR(255) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '',
15470 MODIFY COLUMN kohafield
15471 VARCHAR(40) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
15472 MODIFY COLUMN authorised_value
15473 VARCHAR(32) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
15474 MODIFY COLUMN authtypecode
15475 VARCHAR(20) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
15476 MODIFY COLUMN value_builder
15477 VARCHAR(80) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
15478 MODIFY COLUMN frameworkcode
15479 VARCHAR(4) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '',
15480 MODIFY COLUMN seealso
15481 VARCHAR(1100) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
15482 MODIFY COLUMN link
15483 VARCHAR(80) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
15484 MODIFY COLUMN defaultvalue
15485 MEDIUMTEXT COLLATE utf8mb4_unicode_ci default NULL
15487 $dbh->do(qq|ALTER TABLE $name CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci|);
15489 elsif ( $name eq 'plugin_data' ) {
15490 $dbh->do(qq|
15491 ALTER TABLE $name
15492 DROP PRIMARY KEY,
15493 ADD PRIMARY KEY (`plugin_class` (191), `plugin_key` (191))
15495 $dbh->do(qq|ALTER TABLE $name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci|);
15497 elsif ( $name eq 'search_field' ) {
15498 $dbh->do(qq|
15499 ALTER TABLE $name
15500 DROP KEY `name`,
15501 ADD UNIQUE KEY `name` (`name` (191))
15503 $dbh->do(qq|ALTER TABLE $name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci|);
15505 elsif ( $name eq 'search_marc_map' ) {
15506 $dbh->do(qq|
15507 ALTER TABLE $name
15508 DROP KEY `index_name`,
15509 ADD UNIQUE KEY `index_name` (`index_name`, `marc_field` (191), `marc_type`)
15511 $dbh->do(qq|ALTER TABLE $name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci|);
15513 elsif ( $name eq 'sms_providers' ) {
15514 $dbh->do(qq|
15515 ALTER TABLE $name
15516 DROP KEY `name`,
15517 ADD UNIQUE KEY `name` (`name` (191))
15519 $dbh->do(qq|ALTER TABLE $name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci|);
15521 elsif ( $name eq 'tags' ) {
15522 $dbh->do(qq|
15523 ALTER TABLE $name
15524 DROP PRIMARY KEY,
15525 ADD PRIMARY KEY (`entry` (191))
15527 $dbh->do(qq|ALTER TABLE $name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci|);
15529 elsif ( $name eq 'tags_approval' ) {
15530 $dbh->do(qq|
15531 ALTER TABLE $name
15532 MODIFY COLUMN `term` VARCHAR(191) NOT NULL
15534 $dbh->do(qq|ALTER TABLE $name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci|);
15536 elsif ( $name eq 'tags_index' ) {
15537 $dbh->do(qq|
15538 ALTER TABLE $name
15539 MODIFY COLUMN `term` VARCHAR(191) NOT NULL
15541 $dbh->do(qq|ALTER TABLE $name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci|);
15543 else {
15544 $dbh->do(qq|ALTER TABLE $name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci|);
15548 $dbh->do(q|SET foreign_key_checks = 1|);
15550 print "Upgrade to $DBversion done (Bug 18336 - Convert DB tables to utf8mb4 🎁)\n";
15551 SetVersion($DBversion);
15555 $DBversion = '17.12.00.017';
15556 if( CheckVersion( $DBversion ) ) {
15558 if( !column_exists( 'items', 'damaged_on' ) ) {
15559 $dbh->do( "ALTER TABLE items ADD COLUMN damaged_on DATETIME NULL AFTER damaged");
15561 if( !column_exists( 'deleteditems', 'damaged_on' ) ) {
15562 $dbh->do( "ALTER TABLE deleteditems ADD COLUMN damaged_on DATETIME NULL AFTER damaged");
15565 SetVersion( $DBversion );
15566 print "Upgrade to $DBversion done (Bug 17672 - Add damaged_on to items and deleteditems tables)\n";
15569 $DBversion = '17.12.00.018';
15570 if( CheckVersion( $DBversion ) ) {
15572 $dbh->do( q|
15573 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')
15576 SetVersion( $DBversion );
15577 print "Upgrade to $DBversion done (Bug 19290 - Add system preference BrowseResultSelection)\n";
15580 $DBversion = '17.12.00.019';
15581 if( CheckVersion( $DBversion ) ) {
15583 $dbh->do(q|UPDATE auth_subfield_structure SET hidden=1 WHERE hidden<>0|);
15585 SetVersion( $DBversion );
15586 print "Upgrade to $DBversion done (Bug 20074 - Auth_subfield_structure changes hidden attribute)\n";
15589 $DBversion = '17.12.00.020';
15590 if( CheckVersion( $DBversion ) ) {
15592 $dbh->do(q|
15593 INSERT IGNORE INTO language_descriptions(subtag, type, lang, description)
15594 VALUES ('vi', 'language', 'de', 'Vietnamesisch')
15597 $dbh->do(q|
15598 UPDATE language_descriptions SET description = 'Tiếng Việt'
15599 WHERE subtag = 'vi' and type = 'language' and lang = 'vi'
15602 SetVersion( $DBversion );
15603 print "Upgrade to $DBversion done (Bug 20082 - Update descriptions of Vietnamese language)\n";
15606 $DBversion = '17.12.00.021';
15607 if( CheckVersion( $DBversion ) ) {
15609 $dbh->do(q|
15610 INSERT IGNORE INTO systempreferences ( `variable`, `value`, `options`, `explanation`, `type` ) VALUES
15611 ('PurgeSuggestionsOlderThan', '', NULL, 'Default value for cronjob purge_suggestions.pl', 'Integer');
15614 SetVersion( $DBversion );
15615 print "Upgrade to $DBversion done (Bug 13287 - Add system preference PurgeSuggestionsOlderThan)\n";
15618 $DBversion = '17.12.00.022';
15619 if( CheckVersion( $DBversion ) ) {
15621 if( !column_exists( 'currency', 'p_sep_by_space' ) ) {
15622 $dbh->do(q|
15623 ALTER TABLE currency ADD COLUMN p_sep_by_space tinyint(1) default 0 after archived
15627 SetVersion( $DBversion );
15628 print "Upgrade to $DBversion done (Bug 4078 - Add column currency.p_sep_by_space)\n";
15631 $DBversion = '17.12.00.023';
15632 if( CheckVersion( $DBversion ) ) {
15633 $dbh->do(q{
15634 DELETE FROM systempreferences
15635 WHERE variable='checkdigit'
15638 SetVersion( $DBversion );
15639 print "Upgrade to $DBversion done (Bug 20264 - Remove system preference 'checkdigit')\n";
15642 $DBversion = '17.12.00.024';
15643 if( CheckVersion( $DBversion ) ) {
15645 $dbh->do(q{
15646 INSERT IGNORE INTO systempreferences (variable,value,options,explanation,type)
15647 VALUES ('SelfCheckInMainUserBlock', '', '70|10', 'Add a block of HTML that will display on the self check-in screen.', 'Textarea');
15650 $dbh->do(q{
15651 INSERT IGNORE INTO systempreferences (variable,value,options,explanation,type)
15652 VALUES ('SelfCheckInModule', 0, NULL, 'Enable the standalone self-checkin module.', 'YesNo');
15655 $dbh->do(q{
15656 INSERT IGNORE INTO systempreferences (variable,value,options,explanation,type)
15657 VALUES ('SelfCheckInModuleUserID', NULL, NULL, 'Patron ID (borrowernumber) to be allowed on the self-checkin module.', 'Integer');
15660 $dbh->do(q{
15661 INSERT IGNORE INTO systempreferences (variable,value,options,explanation,type)
15662 VALUES ('SelfCheckInTimeout', 120, NULL, 'Define the number of seconds before the self check-in module times out.', 'Integer');
15665 $dbh->do(q{
15666 INSERT IGNORE INTO systempreferences (variable,value,options,explanation,type)
15667 VALUES ('SelfCheckInUserCSS', '', NULL, 'Add CSS to be included in the self check-in module in an embedded <style> tag.', 'free');
15670 $dbh->do(q{
15671 INSERT IGNORE INTO systempreferences (variable,value,options,explanation,type)
15672 VALUES ('SelfCheckInUserJS', '', NULL, 'Define custom javascript for inclusion in the self check-in module.', 'free');
15675 # Add new userflag for self check
15676 $dbh->do(q{
15677 INSERT IGNORE INTO userflags (bit,flag,flagdesc,defaulton) VALUES
15678 (23,'self_check','Self check modules',0);
15681 # Add self check-in module subpermission
15682 $dbh->do(q{
15683 INSERT IGNORE INTO permissions (module_bit,code,description)
15684 VALUES (23, 'self_checkin_module', 'Log into the self check-in module');
15687 # Add self check-in module subpermission
15688 $dbh->do(q{
15689 INSERT IGNORE INTO permissions (module_bit,code,description)
15690 VALUES (23, 'self_checkout_module', 'Perform self checkout at the OPAC. It should be used for the patron matching the AutoSelfCheckID');
15693 # Update patrons with self_checkout permission
15694 # IMPORTANT: Needs to happen before removing the old subpermission
15695 $dbh->do(q{
15696 UPDATE user_permissions
15697 SET module_bit = 23,
15698 code = 'self_checkout_module'
15699 WHERE module_bit = 1 AND code = 'self_checkout';
15702 # Remove old self_checkout permission
15703 $dbh->do(q{
15704 DELETE IGNORE FROM permissions
15705 WHERE code='self_checkout';
15708 SetVersion( $DBversion );
15709 print "Upgrade to $DBversion done (Bug 15492 - Add a standalone self-checkin module)\n";
15712 $DBversion = '17.12.00.025';
15713 if( CheckVersion( $DBversion ) ) {
15714 $dbh->do(q|
15715 INSERT IGNORE INTO systempreferences (variable,value,explanation,options,type)
15716 VALUES ('StaffLoginInstructions','','HTML to go into the login box for the staff client',NULL,'Free')
15718 $dbh->do(q|
15719 UPDATE systempreferences
15720 SET variable = 'OpacLoginInstructions'
15721 WHERE variable = 'NoLoginInstructions'
15724 SetVersion( $DBversion );
15725 print "Upgrade to $DBversion done (Bug 20291 - Add StaffLoginInstructions system preference and rename NoLoginInstructions with OpacLoginInstructions)\n";
15728 $DBversion = '17.12.00.026';
15729 if( CheckVersion( $DBversion ) ) {
15730 if( !column_exists( 'issuingrules', 'suspension_chargeperiod' ) ) {
15731 $dbh->do(q|
15732 ALTER TABLE issuingrules ADD COLUMN suspension_chargeperiod int(11) DEFAULT '1' AFTER maxsuspensiondays;
15736 SetVersion( $DBversion );
15737 print "Upgrade to $DBversion done (Bug 19804 - Add issuingrules.suspension_chargeperiod)\n";
15740 $DBversion = '17.12.00.027';
15741 if( CheckVersion( $DBversion ) ) {
15742 $dbh->do(q|
15743 INSERT IGNORE INTO systempreferences (`variable`, `value`, `options`, `explanation`, `type`)
15744 VALUES ('UseACQFrameworkForBiblioRecords','0','','Use the ACQ framework for the catalog details','YesNo')
15747 SetVersion( $DBversion );
15748 print "Upgrade to $DBversion done (Bug 19289 - Add system preference UseACQFrameworkForBiblioRecords)\n";
15751 $DBversion = '17.12.00.028';
15752 if( CheckVersion( $DBversion ) ) {
15753 if( !column_exists( 'marc_tag_structure', 'ind1_defaultvalue' ) ) {
15754 $dbh->do(q|
15755 ALTER TABLE marc_tag_structure
15756 ADD COLUMN ind2_defaultvalue VARCHAR(1) NOT NULL DEFAULT '' AFTER authorised_value,
15757 ADD COLUMN ind1_defaultvalue VARCHAR(1) NOT NULL DEFAULT '' AFTER authorised_value;
15761 SetVersion( $DBversion );
15762 print "Upgrade to $DBversion done (Bug 9701 - Add default indicators (marc_tag_structure.indX_defaultvalue))\n";
15765 $DBversion = '17.12.00.029';
15766 if( CheckVersion( $DBversion ) ) {
15767 my $pref =
15768 q|# PERSO_NAME 100 600 696 700 796 800 896
15769 marc21, 100, ind1:auth1
15770 marc21, 600, ind1:auth1, ind2:thesaurus
15771 marc21, 696, ind1:auth1
15772 marc21, 700, ind1:auth1
15773 marc21, 796, ind1:auth1
15774 marc21, 800, ind1:auth1
15775 marc21, 896, ind1:auth1
15776 # CORPO_NAME 110 610 697 710 797 810 897
15777 marc21, 110, ind1:auth1
15778 marc21, 610, ind1:auth1, ind2:thesaurus
15779 marc21, 697, ind1:auth1
15780 marc21, 710, ind1:auth1
15781 marc21, 797, ind1:auth1
15782 marc21, 810, ind1:auth1
15783 marc21, 897, ind1:auth1
15784 # MEETI_NAME 111 611 698 711 798 811 898
15785 marc21, 111, ind1:auth1
15786 marc21, 611, ind1:auth1, ind2:thesaurus
15787 marc21, 698, ind1:auth1
15788 marc21, 711, ind1:auth1
15789 marc21, 798, ind1:auth1
15790 marc21, 811, ind1:auth1
15791 marc21, 898, ind1:auth1
15792 # UNIF_TITLE 130 440 630 699 730 799 830 899 / 240
15793 marc21, 130, ind1:auth2
15794 marc21, 240, , ind2:auth2
15795 marc21, 440, , ind2:auth2
15796 marc21, 630, ind1:auth2, ind2:thesaurus
15797 marc21, 699, ind1:auth2
15798 marc21, 730, ind1:auth2
15799 marc21, 799, ind1:auth2
15800 marc21, 830, , ind2:auth2
15801 marc21, 899, ind1:auth2
15802 # CHRON_TERM 648
15803 marc21, 648, , ind2:thesaurus
15804 # TOPIC_TERM 650 654 656 657 658 690
15805 marc21, 650, , ind2:thesaurus
15806 # GEOGR_NAME 651 662 691 / 751
15807 marc21, 651, , ind2:thesaurus
15808 # GENRE/FORM 655
15809 marc21, 655, , ind2:thesaurus
15811 # UNIMARC: Always copy the indicators from the authority
15812 unimarc, *, ind1:auth1, ind2:auth2|;
15814 $dbh->do( q|
15815 INSERT IGNORE INTO systempreferences (variable,value,explanation,options,type)
15816 VALUES ( 'AuthorityControlledIndicators', ?, 'Authority controlled indicators per biblio field', NULL, 'Free' );
15817 |, undef, $pref );
15819 SetVersion( $DBversion );
15820 print "Upgrade to $DBversion done (Bug 14769 - Authorities merge: Set correct indicators in biblio field (new system preference AuthorityControlledIndicators))\n";
15823 $DBversion = '17.12.00.030';
15824 if( CheckVersion( $DBversion ) ) {
15825 $dbh->do(q|
15826 INSERT IGNORE INTO systempreferences (variable,value,explanation,options,type)
15827 VALUES ('NovelistSelectStaffProfile',NULL,'Novelist staff client user Profile',NULL,'free')
15830 SetVersion( $DBversion );
15831 print "Upgrade to $DBversion done (Bug 19882 - Add system preference NovelistSelectStaffProfile)\n";
15834 $DBversion = '17.12.00.031';
15835 if( CheckVersion( $DBversion ) ) {
15836 $dbh->do(q|
15837 INSERT IGNORE INTO systempreferences (`variable`, `value`, `options`, `explanation`, `type`)
15838 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')
15841 SetVersion( $DBversion );
15842 print "Upgrade to $DBversion done (Bug 11674 - Add system preference MarcFieldDocURL)\n";
15845 $DBversion = '17.12.00.032';
15846 if( CheckVersion( $DBversion ) ) {
15847 $dbh->do(q|
15848 UPDATE letter SET code = "SERIAL_ALERT" WHERE code = "RLIST";
15850 $dbh->do(q|
15851 UPDATE letter SET name = "New serial issue" WHERE name = "Routing List";
15853 $dbh->do(q|
15854 UPDATE subscription SET letter = "SERIAL_ALERT" WHERE letter = "RLIST";
15857 SetVersion( $DBversion );
15858 print "Upgrade to $DBversion done (Bug 19794 - Rename RLIST notice to SERIAL_ALERT)\n";
15861 $DBversion = '17.12.00.033';
15862 if( CheckVersion( $DBversion ) ) {
15863 if ( !column_exists( 'accountlines', 'payment_type' ) ) {
15864 $dbh->do(q{
15865 ALTER TABLE accountlines ADD payment_type varchar(80) default NULL AFTER accounttype
15869 $dbh->do(q{
15870 INSERT IGNORE INTO authorised_value_categories( category_name ) VALUES ('PAYMENT_TYPE')
15873 SetVersion( $DBversion );
15874 print "Upgrade to $DBversion done (Bug 18786 - Add ability to create custom payment types)\n";
15877 $DBversion = '17.12.00.034';
15878 if( CheckVersion( $DBversion ) ) {
15880 $dbh->do( q{
15881 INSERT IGNORE INTO account_offset_types ( type ) VALUES ('Void Payment')
15882 } );
15884 SetVersion( $DBversion );
15885 print "Upgrade to $DBversion done (Bug 18790 - Add ability to void payment)\n";
15888 $DBversion = '17.12.00.035';
15889 if( CheckVersion( $DBversion ) ) {
15890 my ( $original_value ) = $dbh->selectrow_array(q|
15891 SELECT value FROM systempreferences WHERE variable="MarkLostItemsAsReturned"
15893 if ( $original_value and $original_value eq '1' ) {
15894 $dbh->do(q{
15895 UPDATE systempreferences
15896 SET type="multiple",
15897 options="batchmod|moredetail|cronjob|additem",
15898 value="batchmod,moredetail,cronjob,additem"
15899 WHERE variable="MarkLostItemsAsReturned"
15901 } else {
15902 $dbh->do(q{
15903 UPDATE systempreferences
15904 SET type="multiple",
15905 options="batchmod|moredetail|cronjob|additem",
15906 value=""
15907 WHERE variable="MarkLostItemsAsReturned"
15911 SetVersion( $DBversion );
15912 print "Upgrade to $DBversion done (Bug 19974 - Make MarkLostItemsAsReturned multiple)\n";
15915 $DBversion = '17.12.00.036';
15916 if( CheckVersion( $DBversion ) ) {
15918 $dbh->do( q{
15919 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');
15920 } );
15921 $dbh->do( q{
15922 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');
15923 } );
15924 $dbh->do( q{
15925 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');
15926 } );
15927 $dbh->do( q{
15928 UPDATE systempreferences SET options="batchmod|moredetail|cronjob|additem|pendingreserves" WHERE variable="MarkLostItemsAsReturned";
15929 } );
15931 SetVersion( $DBversion );
15932 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";
15935 $DBversion = '17.12.00.037';
15936 if( CheckVersion( $DBversion ) ) {
15938 SetVersion( $DBversion );
15939 print "Upgrade to $DBversion done (This change has been reverted, nothing done!)\n";
15942 $DBversion = '17.12.00.038';
15943 if( CheckVersion( $DBversion ) ) {
15945 $dbh->do( q{
15946 UPDATE language_rfc4646_to_iso639 SET iso639_2_code = 'slo' WHERE iso639_2_code = 'slk' AND rfc4646_subtag = 'sk';
15947 } );
15949 SetVersion( $DBversion );
15950 print "Upgrade to $DBversion done (Bug 20245 - Use Bibliographic code value for Slovak language)\n";
15953 $DBversion = '17.12.00.039';
15954 if( CheckVersion( $DBversion ) ) {
15956 $dbh->do( q{
15957 UPDATE language_rfc4646_to_iso639 SET iso639_2_code = 'baq' WHERE iso639_2_code = 'eus' AND rfc4646_subtag = 'eu';
15958 } );
15959 $dbh->do( q{
15960 UPDATE language_rfc4646_to_iso639 SET iso639_2_code = 'mao' WHERE iso639_2_code = 'mri' AND rfc4646_subtag = 'mi';
15961 } );
15962 $dbh->do( q{
15963 UPDATE language_rfc4646_to_iso639 SET iso639_2_code = 'alb' WHERE iso639_2_code = 'sqi' AND rfc4646_subtag = 'sq';
15964 } );
15966 SetVersion( $DBversion );
15967 print "Upgrade to $DBversion done (Bug 20482 - Use Bibliographic code value for Basque, Maori and Albanian languages)\n";
15970 $DBversion = '17.12.00.040';
15971 if( CheckVersion( $DBversion ) ) {
15973 $dbh->do( q{
15974 INSERT IGNORE INTO systempreferences ( value, variable, options, explanation, type )
15975 VALUES ( '0', 'ProtectSuperlibrarianPrivileges', NULL, 'If enabled, non-superlibrarians cannot set superlibrarian privileges', 'YesNo' )
15976 } );
15978 SetVersion( $DBversion );
15979 print "Upgrade to $DBversion done (Bug 20100 - Add new system preference ProtectSuperlibrarianPrivileges)\n";
15982 $DBversion = '17.12.00.041';
15983 if( CheckVersion( $DBversion ) ) {
15985 $dbh->do( q{
15986 INSERT IGNORE INTO permissions (module_bit, code, description) VALUES (13, 'access_files', 'Access to the files stored on the server');
15987 } );
15989 SetVersion( $DBversion );
15990 print "Upgrade to $DBversion done (Bug 11317 - Add a new permission to access files stored on the server)\n";
15993 $DBversion = '17.12.00.042';
15994 if( CheckVersion( $DBversion ) ) {
15996 if (!TableExists('oauth_access_tokens')) {
15997 $dbh->do(q{
15998 CREATE TABLE oauth_access_tokens (
15999 `access_token` VARCHAR(191) NOT NULL,
16000 `client_id` VARCHAR(191) NOT NULL,
16001 `expires` INT NOT NULL,
16002 PRIMARY KEY (`access_token`)
16003 ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci
16007 SetVersion( $DBversion );
16008 print "Upgrade to $DBversion done (Bug 20402 - Implement OAuth2 authentication for REST API)\n";
16011 $DBversion = '17.12.00.043';
16012 if(CheckVersion($DBversion)) {
16014 if (!TableExists('api_keys')) {
16015 $dbh->do(q{
16016 CREATE TABLE `api_keys` (
16017 `client_id` VARCHAR(191) NOT NULL,
16018 `secret` VARCHAR(191) NOT NULL,
16019 `description` VARCHAR(255) NOT NULL,
16020 `patron_id` INT(11) NOT NULL,
16021 `active` TINYINT(1) DEFAULT 1 NOT NULL,
16022 PRIMARY KEY `client_id` (`client_id`),
16023 UNIQUE KEY `secret` (`secret`),
16024 KEY `patron_id` (`patron_id`),
16025 CONSTRAINT `api_keys_fk_patron_id`
16026 FOREIGN KEY (`patron_id`)
16027 REFERENCES `borrowers` (`borrowernumber`)
16028 ON DELETE CASCADE ON UPDATE CASCADE
16029 ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
16033 print "Upgrade to $DBversion done (Bug 20568 - Add API key management interface for patrons)\n";
16034 SetVersion($DBversion);
16037 $DBversion = '17.12.00.044';
16038 if(CheckVersion($DBversion)) {
16040 $dbh->do(q{
16041 INSERT IGNORE INTO systempreferences (`variable`,`value`,`options`,`explanation`,`type`)
16042 VALUES
16043 ('RESTOAuth2ClientCredentials','0',NULL,'If enabled, the OAuth2 client credentials flow is enabled for the REST API.','YesNo');
16046 print "Upgrade to $DBversion done (Bug 20624 - Disable OAuth2 client credentials grant by default)\n";
16047 SetVersion($DBversion);
16050 $DBversion = '18.05.00.000';
16051 if( CheckVersion( $DBversion ) ) {
16052 SetVersion( $DBversion );
16053 print "Upgrade to $DBversion done (Koha 18.05)\n";
16056 $DBversion = '18.06.00.000';
16057 if( CheckVersion( $DBversion ) ) {
16058 SetVersion( $DBversion );
16059 print "Upgrade to $DBversion done (Koha 18.06 - It's Adventure time!)\n";
16062 $DBversion = '18.06.00.001';
16063 if( CheckVersion( $DBversion ) ) {
16064 $dbh->do(q{UPDATE permissions SET description = 'Manage budgets' WHERE code = 'period_manage';});
16065 $dbh->do(q{UPDATE permissions SET description = 'Manage funds' WHERE code = 'budget_manage';});
16066 $dbh->do(q{UPDATE permissions SET description = 'Modify funds (can''t create lines, but can modify existing ones)' WHERE code = 'budget_modify';});
16067 $dbh->do(q{UPDATE permissions SET description = 'Manage baskets and order lines' WHERE code = 'order_manage';});
16068 $dbh->do(q{UPDATE permissions SET description = 'Manage all baskets and order lines, regardless of restrictions on them' WHERE code = 'order_manage_all';});
16069 $dbh->do(q{UPDATE permissions SET description = 'Manage basket groups' WHERE code = 'group_manage';});
16070 $dbh->do(q{UPDATE permissions SET description = 'Receive orders and manage shipments' WHERE code = 'order_receive';});
16071 $dbh->do(q{UPDATE permissions SET description = 'Add and delete funds (but can''t modify funds)' WHERE code = 'budget_add_del';});
16072 $dbh->do(q{UPDATE permissions SET description = 'Manage all funds' WHERE code = 'budget_manage_all';});
16073 SetVersion( $DBversion );
16074 print "Upgrade to $DBversion done (Bug 3849- Improve descriptions of granular acquisition permissions)\n";
16077 $DBversion = '18.06.00.002';
16078 if( CheckVersion( $DBversion ) ) {
16079 $dbh->do(q{DELETE FROM userflags WHERE bit = 12 AND flag = 'management';});
16080 $dbh->do(q{UPDATE borrowers SET flags = flags - ( flags & (1<<12) ) WHERE flags & (1 << 12);});
16081 SetVersion( $DBversion );
16082 print "Upgrade to $DBversion done (Bug 2426 - Remove deprecated management permission)\n";
16085 $DBversion = '18.06.00.003';
16086 if( CheckVersion( $DBversion ) ) {
16087 $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'" );
16088 SetVersion( $DBversion );
16089 print "Upgrade to $DBversion done (Bug 20073 - Add new types for Elasticsearch fields)\n";
16092 $DBversion = '18.06.00.004';
16093 if( CheckVersion( $DBversion ) ) {
16095 # Add 'Manual Credit' offset type
16096 $dbh->do(q{
16097 INSERT IGNORE INTO `account_offset_types` (`type`) VALUES ('Manual Credit');
16100 # Fix wrong account offsets / Manual credits
16101 $dbh->do(q{
16102 UPDATE account_offsets
16103 SET credit_id=debit_id,
16104 debit_id=NULL,
16105 type='Manual Credit'
16106 WHERE amount < 0 AND
16107 type='Manual Debit' AND
16108 debit_id IN
16109 (SELECT accountlines_id AS debit_id
16110 FROM accountlines
16111 WHERE accounttype='C');
16114 # Fix wrong account offsets / Manually forgiven amounts
16115 $dbh->do(q{
16116 UPDATE account_offsets
16117 SET credit_id=debit_id,
16118 debit_id=NULL,
16119 type='Writeoff'
16120 WHERE amount < 0 AND
16121 type='Manual Debit' AND
16122 debit_id IN
16123 (SELECT accountlines_id AS debit_id
16124 FROM accountlines
16125 WHERE accounttype='FOR');
16128 SetVersion( $DBversion );
16129 print "Upgrade to $DBversion done (Bug 20980 - Manual credit offsets are stored as debits)\n";
16132 $DBversion = '18.06.00.005';
16133 if( CheckVersion( $DBversion ) ) {
16134 unless ( column_exists('aqorders', 'created_by') ) {
16135 $dbh->do( "ALTER TABLE aqorders ADD COLUMN created_by int(11) NULL DEFAULT NULL AFTER quantityreceived;" );
16136 unless ( foreign_key_exists('aqorders', 'aqorders_created_by') ) {
16137 $dbh->do( "ALTER TABLE aqorders ADD CONSTRAINT aqorders_created_by FOREIGN KEY (created_by) REFERENCES borrowers (borrowernumber) ON DELETE SET NULL ON UPDATE CASCADE;" );
16139 $dbh->do( "UPDATE aqbasket LEFT JOIN borrowers ON ( aqbasket.authorisedby = borrowers.borrowernumber ) SET aqbasket.authorisedby = NULL WHERE borrowers.borrowernumber IS NULL;" );
16140 $dbh->do( "UPDATE aqorders LEFT JOIN aqbasket ON ( aqorders.basketno = aqbasket.basketno ) SET aqorders.created_by = aqbasket.authorisedby WHERE aqorders.created_by IS NULL;" );
16142 SetVersion( $DBversion );
16143 print "Upgrade to $DBversion done (Bug 12395 - Save order line's creator)\n";
16146 $DBversion = '18.06.00.006';
16147 if( CheckVersion( $DBversion ) ) {
16148 unless ( column_exists('patron_lists', 'shared') ) {
16149 $dbh->do( "ALTER TABLE patron_lists ADD COLUMN shared tinyint(1) default 0 AFTER owner;" );
16151 SetVersion( $DBversion );
16152 print "Upgrade to $DBversion done (Bug 19524 - Share patron lists between staff)\n";
16155 $DBversion = '18.06.00.007';
16156 if( CheckVersion( $DBversion ) ) {
16157 $dbh->do( "INSERT IGNORE INTO permissions (module_bit, code, description) VALUES (11, 'currencies_manage', 'Manage currencies and exchange rates');" );
16158 $dbh->do(q{
16159 INSERT IGNORE INTO user_permissions (borrowernumber, module_bit, code)
16160 SELECT borrowernumber, 11, 'currencies_manage' FROM borrowers WHERE flags & (1 << 3) OR borrowernumber IN
16161 (SELECT borrowernumber FROM user_permissions WHERE code = 'parameters_remaining_permissions');
16163 SetVersion( $DBversion );
16164 print "Upgrade to $DBversion done (Bug 7651 - Add separate permission for managing currencies and exchange rates)\n";
16167 $DBversion = '18.06.00.008';
16168 if( CheckVersion( $DBversion ) ) {
16169 $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')" );
16170 SetVersion( $DBversion );
16171 print "Upgrade to $DBversion done (Bug 13560 - need an add option in marc modification templates)\n";
16174 $DBversion = '18.06.00.009';
16175 if( CheckVersion( $DBversion ) ) {
16176 $dbh->do( "
16177 CREATE TABLE IF NOT EXISTS aqinvoice_adjustments (
16178 adjustment_id int(11) NOT NULL AUTO_INCREMENT,
16179 invoiceid int(11) NOT NULL,
16180 adjustment decimal(28,6),
16181 reason varchar(80) default NULL,
16182 note mediumtext default NULL,
16183 budget_id int(11) default NULL,
16184 encumber_open smallint(1) NOT NULL default 1,
16185 timestamp timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
16186 PRIMARY KEY (adjustment_id),
16187 CONSTRAINT aqinvoice_adjustments_fk_invoiceid FOREIGN KEY (invoiceid) REFERENCES aqinvoices (invoiceid) ON DELETE CASCADE ON UPDATE CASCADE,
16188 CONSTRAINT aqinvoice_adjustments_fk_budget_id FOREIGN KEY (budget_id) REFERENCES aqbudgets (budget_id) ON DELETE SET NULL ON UPDATE CASCADE
16189 ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci
16190 " );
16191 $dbh->do("INSERT IGNORE INTO authorised_value_categories (category_name) VALUES ('ADJ_REASON')");
16192 SetVersion( $DBversion );
16193 print "Upgrade to $DBversion done (Bug 19166 - Add the ability to add adjustments to an invoice)\n";
16196 $DBversion = '18.06.00.010';
16197 if( CheckVersion( $DBversion ) ) {
16198 $dbh->do(q{
16199 INSERT IGNORE INTO `letter` (`module`, `code`, `branchcode`, `name`, `is_html`, `title`, `content`, `message_transport_type`, `lang`)
16200 VALUES
16201 ('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'),
16202 ('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');
16204 $dbh->do(q{
16205 INSERT IGNORE INTO systempreferences (`variable`, `value`, `options`, `explanation`, `type`)
16206 VALUES ('UseEmailReceipts','0','','Send email receipts for payments and write-offs','YesNo')
16208 SetVersion( $DBversion );
16209 print "Upgrade to $DBversion done (Bug 19191 - Add ability to email receipts for account payments and write-offs)\n";
16212 $DBversion = '18.06.00.011';
16213 if( CheckVersion( $DBversion ) ) {
16214 unless( column_exists( 'issues', 'noteseen' ) ) {
16215 $dbh->do(q|ALTER TABLE issues ADD COLUMN noteseen int(1) default NULL AFTER notedate|);
16218 unless( column_exists( 'old_issues', 'noteseen' ) ) {
16219 $dbh->do(q|ALTER TABLE old_issues ADD COLUMN noteseen int(1) default NULL AFTER notedate|);
16221 $dbh->do(q|INSERT IGNORE INTO permissions (module_bit, code, description) VALUES ( 1, 'manage_checkout_notes', 'Mark checkout notes as seen/not seen');|);
16222 SetVersion( $DBversion );
16223 print "Upgrade to $DBversion done (Bug 17698: Add column issues.noteseen and old_issues.noteseen)\n";
16226 $DBversion = '18.06.00.012';
16227 if( CheckVersion( $DBversion ) ) {
16228 $dbh->do(q|INSERT IGNORE INTO permissions (module_bit, code, description) VALUES (11, 'suggestions_manage', 'Manage purchase suggestions');|);
16229 $dbh->do(q|INSERT IGNORE INTO user_permissions (borrowernumber, module_bit, code) SELECT borrowernumber, 11, 'suggestions_manage' FROM borrowers WHERE flags & (1 << 2);|);
16230 SetVersion( $DBversion );
16231 print "Upgrade to $DBversion done (Bug 11911 - Add separate permission for managing suggestions)\n";
16234 $DBversion = '18.06.00.013';
16235 if( CheckVersion( $DBversion ) ) {
16236 $dbh->do(q{
16237 INSERT IGNORE INTO `account_offset_types` (`type`) VALUES ('Credit Applied');
16239 SetVersion( $DBversion );
16240 print "Upgrade to $DBversion done (Bug 20997 - Add Koha::Account::Line::apply)\n";
16243 $DBversion = '18.06.00.014';
16244 if( CheckVersion( $DBversion ) ) {
16245 $dbh->do(q{
16246 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');
16248 SetVersion( $DBversion );
16249 print "Upgrade to $DBversion done (Bug 21121 - New syspref to allow hiding of private patron data in circulation page)\n";
16252 $DBversion = '18.06.00.015';
16253 if( CheckVersion( $DBversion ) ) {
16254 $dbh->do(q{DELETE FROM systempreferences where variable="OCLCAffiliateID";});
16255 $dbh->do(q{DELETE FROM systempreferences where variable="XISBN";});
16256 $dbh->do(q{DELETE FROM systempreferences where variable="XISBNDailyLimit";});
16257 SetVersion( $DBversion );
16258 print "Upgrade to $DBversion done (Bug 21226 - Remove prefs OCLCAffiliateID, XISBN and XISBNDailyLimit)\n";
16261 $DBversion = '18.06.00.016';
16262 if( CheckVersion( $DBversion ) ) {
16263 my $dtf = Koha::Database->new->schema->storage->datetime_parser;
16264 my $days = C4::Context->preference('MaxPickupDelay') || 7;
16265 my $date = dt_from_string()->add( days => $days );
16266 my $sql = q|UPDATE reserves SET expirationdate = ? WHERE expirationdate IS NULL AND waitingdate IS NOT NULL|;
16267 $dbh->do( $sql, undef, $dtf->format_datetime($date) );
16268 SetVersion( $DBversion );
16269 print "Upgrade to $DBversion done (Bug 20773 - expirationdate filled for waiting holds)\n";
16272 $DBversion = '18.06.00.017';
16273 if( CheckVersion( $DBversion ) ) {
16274 $dbh->do(q|INSERT IGNORE INTO authorised_value_categories (category_name) VALUES ('ROADTYPE');|);
16275 SetVersion( $DBversion );
16276 print "Upgrade to $DBversion done (Bug 21144: Add ROADTYPE to default authorised values categories)\n";
16279 $DBversion = '18.06.00.018';
16280 if( CheckVersion( $DBversion ) ) {
16281 $dbh->do( q|
16282 UPDATE items LEFT JOIN issues USING (itemnumber)
16283 SET items.onloan = NULL
16284 WHERE issues.itemnumber IS NULL
16286 SetVersion( $DBversion );
16287 print "Upgrade to $DBversion done (Bug 20487: Clear items.onloan for unissued items)\n";
16290 $DBversion = '18.06.00.019';
16291 if( CheckVersion( $DBversion ) ) {
16292 $dbh->do( q|
16293 INSERT IGNORE INTO columns_settings (module, page, tablename, columnname, cannot_be_toggled, is_hidden) VALUES
16294 ("circ", "circulation", "issues-table", "collection", 0, 1),
16295 ("members", "moremember", "issues-table", "collection", 0, 1);
16297 SetVersion( $DBversion );
16298 print "Upgrade to $DBversion done (Bug 19719: Default to hiding collection code column)\n";
16301 $DBversion = '18.06.00.020';
16302 if( CheckVersion( $DBversion ) ) {
16303 if( !column_exists( 'branch_borrower_circ_rules', 'max_holds' ) ) {
16304 $dbh->do(q{
16305 ALTER TABLE branch_borrower_circ_rules ADD COLUMN max_holds INT(4) NULL DEFAULT NULL AFTER maxonsiteissueqty
16308 if( !column_exists( 'default_borrower_circ_rules', 'max_holds' ) ) {
16309 $dbh->do(q{
16310 ALTER TABLE default_borrower_circ_rules ADD COLUMN max_holds INT(4) NULL DEFAULT NULL AFTER maxonsiteissueqty
16313 SetVersion( $DBversion );
16314 print "Upgrade to $DBversion done (Bug 15524 - Set limit on maximum possible holds per patron by category)\n";
16317 $DBversion = '18.06.00.021';
16318 if( CheckVersion( $DBversion ) ) {
16319 my $dbh = C4::Context->dbh;
16320 unless ( C4::Context->preference('NorwegianPatronDBEnable') ) {
16321 $dbh->do(q|
16322 DELETE FROM systempreferences
16323 WHERE variable IN ('NorwegianPatronDBEnable', 'NorwegianPatronDBEndpoint', 'NorwegianPatronDBUsername', 'NorwegianPatronDBPassword', 'NorwegianPatronDBSearchNLAfterLocalHit')
16325 if ( TableExists('borrower_sync') ) {
16326 $dbh->do(q|DROP TABLE borrower_sync|);
16329 SetVersion( $DBversion );
16330 print "Upgrade to $DBversion done (Bug 21068 - Remove system preferences NorwegianPatronDB*)\n";
16333 $DBversion = '18.06.00.022';
16334 if( CheckVersion( $DBversion ) ) {
16335 my $dbh = C4::Context->dbh;
16336 $dbh->do(q|
16337 INSERT IGNORE INTO systempreferences ( `variable`, `value`, `options`, `explanation`, `type` ) VALUES
16338 ('HoldsAutoFill','0',NULL,'If on, librarian will not be asked if hold should be filled, it will be filled automatically','YesNo'),
16339 ('HoldsAutoFillPrintSlip','0',NULL,'If on, hold slip print dialog will be displayed automatically','YesNo')
16341 SetVersion( $DBversion );
16342 print "Upgrade to $DBversion done (Bug 19383 - Add ability to print hold receipts automatically)\n";
16345 $DBversion = '18.06.00.023';
16346 if( CheckVersion( $DBversion ) ) {
16347 if( !column_exists( 'aqorders', 'replacementprice' ) ){
16348 $dbh->do( "ALTER TABLE aqorders ADD COLUMN replacementprice DECIMAL(28,6)" );
16349 $dbh->do( "UPDATE aqorders set replacementprice = rrp WHERE replacementprice IS NULL" );
16351 SetVersion( $DBversion );
16352 print "Upgrade to $DBversion done (Bug 18639 - Add replacementprice field to aqorders table)\n";
16355 $DBversion = '18.06.00.024';
16356 if( CheckVersion( $DBversion ) ) {
16357 if( !column_exists( 'branches', 'pickup_location' ) ){
16358 $dbh->do( "ALTER TABLE branches ADD COLUMN pickup_location TINYINT(1) not null default 1" );
16360 SetVersion( $DBversion );
16361 print "Upgrade to $DBversion done (Bug 7534 - Let libraries have configuration for pickup locations)\n";
16364 $DBversion = '18.06.00.025';
16365 if( CheckVersion( $DBversion ) ) {
16366 $dbh->do(q{
16367 INSERT IGNORE INTO systempreferences ( `variable`, `value`, `options`, `explanation`, `type` ) VALUES
16368 ('KohaManualBaseURL','https://koha-community.org/manual/','','Where is the Koha manual/documentation located?','Free'),
16369 ('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')
16371 SetVersion( $DBversion );
16372 print "Upgrade to $DBversion done (Bug 19817: Add pref KohaManualLanguage and KohaManualBaseURL)\n";
16375 $DBversion = '18.06.00.026';
16376 if( CheckVersion( $DBversion ) ) {
16377 $dbh->do(q|
16378 INSERT IGNORE INTO systempreferences (variable, value, options, explanation, type) VALUES ('ArticleRequestsLinkControl', 'always', 'always\|calc', 'Control display of article request link on search results', 'Choice')
16380 SetVersion( $DBversion );
16381 print "Upgrade to $DBversion done (Bug 17530 - Add pref ArticleRequestsLinkControl)\n";
16384 $DBversion = '18.06.00.027';
16385 if( CheckVersion( $DBversion ) ) {
16386 $dbh->do( "DROP TABLE IF EXISTS services_throttle" );
16387 SetVersion( $DBversion );
16388 print "Upgrade to $DBversion done (Bug 21235: Remove table services_throttle)\n";
16391 $DBversion = '18.06.00.028';
16392 if( CheckVersion( $DBversion ) ) {
16393 $dbh->do(q{
16394 INSERT IGNORE INTO systempreferences ( `variable`, `value`, `options`, `explanation`, `type` ) VALUES
16395 ('HoldsSplitQueue','nothing','nothing|branch|itemtype|branch_itemtype','In the staff client, split the holds view by the given criteria','Choice'),
16396 ('HoldsSplitQueueNumbering', 'actual', 'actual|virtual', 'If the holds queue is split, decide if the acual priorities should be displayed', 'Choice');
16398 SetVersion( $DBversion );
16399 print "Upgrade to $DBversion done (Bug 19469 - Add ability to split view of holds view on record by pickup library and/or itemtype)\n";
16402 $DBversion = '18.06.00.029';
16403 if( CheckVersion( $DBversion ) ) {
16404 unless ( index_exists( 'subscription', 'by_biblionumber' ) ) {
16405 $dbh->do(q{
16406 CREATE INDEX `by_biblionumber` ON `subscription` (`biblionumber`)
16409 SetVersion( $DBversion );
16410 print "Upgrade to $DBversion done (Bug 21288: Slowness in acquisition caused by GetInvoices\n";
16413 $DBversion = '18.06.00.030';
16414 if( CheckVersion( $DBversion ) ) {
16415 if ( column_exists( 'accountlines', 'dispute' ) ) {
16416 $dbh->do(q{
16417 ALTER TABLE `accountlines`
16418 DROP COLUMN `dispute`
16421 SetVersion( $DBversion );
16422 print "Upgrade to $DBversion done (Bug 20777 - Remove unused field accountlines.dispute)\n";
16425 $DBversion = '18.06.00.031';
16426 if( CheckVersion( $DBversion ) ) {
16427 # Add table and add column
16428 unless (TableExists('patron_consent')) {
16429 $dbh->do(q|
16430 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 )
16433 unless ( column_exists( 'borrower_modifications', 'gdpr_proc_consent' ) ) {
16434 $dbh->do(q|
16435 ALTER TABLE borrower_modifications ADD COLUMN gdpr_proc_consent datetime
16438 # Add two sysprefs too
16439 $dbh->do(q|
16440 INSERT IGNORE INTO systempreferences ( variable, value, options, explanation, type ) VALUES ('PrivacyPolicyURL','',NULL,'This URL is used in messages about GDPR consents.', 'Free')
16442 $dbh->do(q|
16443 INSERT IGNORE INTO systempreferences ( variable, value, options, explanation, type ) VALUES ('GDPR_Policy','','Enforced\|Permissive\|Disabled','General Data Protection Regulation - policy', 'Choice')
16445 SetVersion( $DBversion );
16446 print "Upgrade to $DBversion done (Bug 20819: Add patron_consent)\n";
16449 $DBversion = '18.06.00.032';
16450 if( CheckVersion( $DBversion ) ) {
16451 $dbh->do(q|ALTER TABLE items CHANGE COLUMN ccode ccode varchar(80) default NULL|);
16452 $dbh->do(q|ALTER TABLE deleteditems CHANGE COLUMN ccode ccode varchar(80) default NULL|);
16453 $dbh->do(q|ALTER TABLE branch_transfer_limits CHANGE COLUMN ccode ccode varchar(80) default NULL|);
16454 $dbh->do(q|ALTER TABLE course_items CHANGE COLUMN ccode ccode varchar(80) default NULL|);
16455 SetVersion( $DBversion );
16456 print "Upgrade to $DBversion done (Bug 5458: length of items.ccode disagrees with authorised_values.authorised_value)\n";
16459 $DBversion = '18.06.00.033';
16460 if( CheckVersion( $DBversion ) ) {
16461 $dbh->do(q|
16462 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')
16464 SetVersion( $DBversion );
16465 print "Upgrade to $DBversion done (Bug 12747 - Add AdditionalFieldsInZ3950ResultSearch system preference)\n";
16468 $DBversion = '18.06.00.034';
16469 if( CheckVersion( $DBversion ) ) {
16470 $dbh->do(q|
16471 INSERT IGNORE INTO systempreferences (variable,value,options,explanation,type)
16472 VALUES ('RecordedBooksClientSecret','','30','Client key for RecordedBooks integration','YesNo'),
16473 ('RecordedBooksLibraryID','','','Library ID for RecordedBooks integration','Integer'),
16474 ('RecordedBooksDomain','','','RecordedBooks domain','Free');
16476 SetVersion( $DBversion );
16477 print "Upgrade to $DBversion done (Bug 17602 - Integrate support for OneClickdigital/Recorded Books API)\n";
16480 $DBversion = '18.06.00.035';
16481 if( CheckVersion( $DBversion ) ) {
16482 $dbh->do(q{
16483 UPDATE `systempreferences` SET options = 'US|CA|DE|FR|IN|JP|UK' WHERE variable = 'AmazonLocale' AND options='US|CA|DE|FR|JP|UK';
16485 SetVersion( $DBversion );
16486 print "Upgrade to $DBversion done (Bug 21403 - Add Indian Amazon Affiliate option to AmazonLocale setting)\n";
16490 $DBversion = '18.06.00.036';
16491 if( CheckVersion( $DBversion ) ) {
16492 unless (TableExists('circulation_rules')){
16493 $dbh->do(q{
16494 CREATE TABLE `circulation_rules` (
16495 `id` int(11) NOT NULL auto_increment,
16496 `branchcode` varchar(10) NULL default NULL,
16497 `categorycode` varchar(10) NULL default NULL,
16498 `itemtype` varchar(10) NULL default NULL,
16499 `rule_name` varchar(32) NOT NULL,
16500 `rule_value` varchar(32) NOT NULL,
16501 PRIMARY KEY (`id`),
16502 CONSTRAINT `circ_rules_ibfk_1` FOREIGN KEY (`branchcode`) REFERENCES `branches` (`branchcode`) ON DELETE CASCADE ON UPDATE CASCADE,
16503 CONSTRAINT `circ_rules_ibfk_2` FOREIGN KEY (`categorycode`) REFERENCES `categories` (`categorycode`) ON DELETE CASCADE ON UPDATE CASCADE,
16504 CONSTRAINT `circ_rules_ibfk_3` FOREIGN KEY (`itemtype`) REFERENCES `itemtypes` (`itemtype`) ON DELETE CASCADE ON UPDATE CASCADE,
16505 KEY `rule_name` (`rule_name`),
16506 UNIQUE (`branchcode`,`categorycode`,`itemtype`,`rule_name`)
16507 ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
16510 if (column_exists('branch_borrower_circ_rules', 'max_holds') ){
16511 $dbh->do(q{
16512 INSERT IGNORE INTO circulation_rules ( branchcode, categorycode, itemtype, rule_name, rule_value )
16513 SELECT branchcode, categorycode, NULL, 'max_holds', COALESCE( max_holds, '' ) FROM branch_borrower_circ_rules
16515 $dbh->do(q{
16516 ALTER TABLE branch_borrower_circ_rules DROP COLUMN max_holds
16519 if (column_exists('default_borrower_circ_rules', 'max_holds') ){
16520 $dbh->do(q{
16521 INSERT IGNORE INTO circulation_rules ( branchcode, categorycode, itemtype, rule_name, rule_value )
16522 SELECT NULL, categorycode, NULL, 'max_holds', COALESCE( max_holds, '' ) FROM default_borrower_circ_rules
16524 $dbh->do(q{
16525 ALTER TABLE default_borrower_circ_rules DROP COLUMN max_holds
16528 SetVersion( $DBversion );
16529 print "Upgrade to $DBversion done (Bug 18887 - Introduce new table 'circulation_rules', use for 'max_holds' rules)\n";
16532 $DBversion = '18.06.00.037';
16533 if( CheckVersion( $DBversion ) ) {
16534 unless (TableExists('branches_overdrive')){
16535 $dbh->do( q|
16536 CREATE TABLE branches_overdrive (
16537 `branchcode` VARCHAR( 10 ) NOT NULL ,
16538 `authname` VARCHAR( 255 ) NOT NULL ,
16539 PRIMARY KEY (`branchcode`) ,
16540 CONSTRAINT `branches_overdrive_ibfk_1` FOREIGN KEY (`branchcode`) REFERENCES `branches` (`branchcode`) ON DELETE CASCADE ON UPDATE CASCADE
16541 ) ENGINE = INNODB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci |
16544 $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');");
16545 $dbh->do("INSERT IGNORE INTO systempreferences (variable,value,explanation,options,type) VALUES ('OverDriveWebsiteID','', 'WebsiteID provided by OverDrive', NULL, 'Free');");
16546 $dbh->do("INSERT IGNORE INTO systempreferences (variable,value,explanation,options,type) VALUES ('OverDrivePasswordRequired','', 'Does the library require passwords for OverDrive SIP authentication', NULL, 'YesNo');");
16547 SetVersion( $DBversion );
16548 print "Upgrade to $DBversion done (Bug 21082 - Add overdrive patron auth method)\n";
16551 $DBversion = '18.06.00.038';
16552 if( CheckVersion( $DBversion ) ) {
16553 $dbh->do( "ALTER TABLE edifact_ean MODIFY branchcode VARCHAR(10) NULL DEFAULT NULL" );
16554 SetVersion( $DBversion );
16555 print "Upgrade to $DBversion done (Bug 21417 - EDI ordering fails when basket and EAN libraries do not match)\n";
16558 $DBversion = '18.06.00.039';
16559 if( CheckVersion( $DBversion ) ) {
16560 $dbh->do(q{
16561 INSERT IGNORE INTO `permissions` (module_bit, code, description) VALUES(3, 'manage_circ_rules_from_any_libraries', 'Manage circ rules for any libraries');
16563 SetVersion( $DBversion );
16564 print "Upgrade to $DBversion done (Bug 15520 - Add more granular permission for only editing own library's circ rules)\n";
16567 $DBversion = '18.06.00.040';
16568 if( CheckVersion( $DBversion ) ) {
16569 # Stock Rotation Rotas
16570 unless (TableExists('stockrotationrotas')){
16571 $dbh->do(q{
16572 CREATE TABLE `stockrotationrotas` (
16573 `rota_id` int(11) auto_increment, -- Stockrotation rota ID
16574 `title` varchar(100) NOT NULL, -- Title for this rota
16575 `description` text NOT NULL, -- Description for this rota
16576 `cyclical` tinyint(1) NOT NULL default 0, -- Should items on this rota keep cycling?
16577 `active` tinyint(1) NOT NULL default 0, -- Is this rota currently active?
16578 PRIMARY KEY (`rota_id`),
16579 CONSTRAINT `stockrotationrotas_title`
16580 UNIQUE (`title`)
16581 ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
16584 # Stock Rotation Stages
16585 unless (TableExists('stockrotationstages')){
16586 $dbh->do(q{
16587 CREATE TABLE `stockrotationstages` (
16588 `stage_id` int(11) auto_increment, -- Unique stage ID
16589 `position` int(11) NOT NULL, -- The position of this stage within its rota
16590 `rota_id` int(11) NOT NULL, -- The rota this stage belongs to
16591 `branchcode_id` varchar(10) NOT NULL, -- Branch this stage relates to
16592 `duration` int(11) NOT NULL default 4, -- The number of days items shoud occupy this stage
16593 PRIMARY KEY (`stage_id`),
16594 CONSTRAINT `stockrotationstages_rifk`
16595 FOREIGN KEY (`rota_id`)
16596 REFERENCES `stockrotationrotas` (`rota_id`)
16597 ON UPDATE CASCADE ON DELETE CASCADE,
16598 CONSTRAINT `stockrotationstages_bifk`
16599 FOREIGN KEY (`branchcode_id`)
16600 REFERENCES `branches` (`branchcode`)
16601 ON UPDATE CASCADE ON DELETE CASCADE
16602 ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
16605 # Stock Rotation Items
16606 unless (TableExists('stockrotationitems')){
16607 $dbh->do(q{
16608 CREATE TABLE `stockrotationitems` (
16609 `itemnumber_id` int(11) NOT NULL, -- Itemnumber to link to a stage & rota
16610 `stage_id` int(11) NOT NULL, -- stage ID to link the item to
16611 `indemand` tinyint(1) NOT NULL default 0, -- Should this item be skipped for rotation?
16612 `fresh` tinyint(1) NOT NULL default 0, -- Flag showing item is only just added to rota
16613 PRIMARY KEY (itemnumber_id),
16614 CONSTRAINT `stockrotationitems_iifk`
16615 FOREIGN KEY (`itemnumber_id`)
16616 REFERENCES `items` (`itemnumber`)
16617 ON UPDATE CASCADE ON DELETE CASCADE,
16618 CONSTRAINT `stockrotationitems_sifk`
16619 FOREIGN KEY (`stage_id`)
16620 REFERENCES `stockrotationstages` (`stage_id`)
16621 ON UPDATE CASCADE ON DELETE CASCADE
16622 ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
16625 # System preferences
16626 $dbh->do(q{
16627 INSERT IGNORE INTO `systempreferences` (`variable`,`value`,`explanation`,`options`,`type`)
16628 VALUES ('StockRotation','0','If ON, enables the stock rotation module','','YesNo'),
16629 ('RotationPreventTransfers','0','If ON, prevent any transfers for items on stock rotation rotas, except for stock rotation transfers','','YesNo');
16631 # Permissions
16632 $dbh->do(q{
16633 INSERT IGNORE INTO `userflags` (`bit`, `flag`, `flagdesc`, `defaulton`)
16634 VALUES (24, 'stockrotation', 'Manage stockrotation operations', 0);
16636 $dbh->do(q{
16637 INSERT IGNORE INTO `permissions` (`module_bit`, `code`, `description`)
16638 VALUES (24, 'manage_rotas', 'Create, edit and delete rotas'),
16639 (24, 'manage_rota_items', 'Add and remove items from rotas');
16641 # Notices
16642 $dbh->do(q{
16643 INSERT IGNORE INTO `letter` (`module`, `code`, `branchcode`, `name`, `is_html`, `title`, `content`, `message_transport_type`)
16644 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');
16646 print "Upgrade to $DBversion done (Bug 11897 - Add Stock Rotation Feature)\n";
16647 SetVersion( $DBversion );
16650 $DBversion = '18.06.00.041';
16651 if( CheckVersion( $DBversion ) ) {
16653 if( !column_exists( 'illrequests', 'price_paid' ) ) {
16654 $dbh->do(q{
16655 ALTER TABLE illrequests
16656 ADD COLUMN price_paid varchar(20) DEFAULT NULL
16657 AFTER cost
16661 if( !column_exists( 'illrequestattributes', 'readonly' ) ) {
16662 $dbh->do(q{
16663 ALTER TABLE illrequestattributes
16664 ADD COLUMN readonly tinyint(1) NOT NULL DEFAULT 1
16665 AFTER value
16667 $dbh->do(q{
16668 UPDATE illrequestattributes SET readonly = 1
16672 SetVersion( $DBversion );
16673 print "Upgrade to $DBversion done (Bug 20772 - Add illrequestattributes.readonly and illrequest.price_paid columns)\n";
16676 $DBversion = '18.06.00.042';
16677 if( CheckVersion( $DBversion ) ) {
16678 $dbh->do( "alter table statistics change column ccode ccode varchar(80) default NULL" );
16680 SetVersion( $DBversion );
16681 print "Upgrade to $DBversion done (Bug 21617: Make statistics.ccode longer)\n";
16684 $DBversion = "18.06.00.043";
16685 if ( CheckVersion($DBversion) ) {
16686 if ( !column_exists( 'issuingrules', 'holds_per_day' ) ) {
16687 $dbh->do(q{
16688 ALTER TABLE `issuingrules`
16689 ADD COLUMN `holds_per_day` SMALLINT(6) DEFAULT NULL
16690 AFTER `holds_per_record`
16693 print "Upgrade to $DBversion done (Bug 15486: Restrict number of holds placed by day)\n";
16694 SetVersion($DBversion);
16697 $DBversion = '18.06.00.044';
16698 if( CheckVersion( $DBversion ) ) {
16699 unless( column_exists( 'creator_batches', 'description' ) ) {
16700 $dbh->do(q|ALTER TABLE creator_batches ADD description mediumtext default NULL AFTER batch_id|);
16702 SetVersion( $DBversion );
16703 print "Upgrade to $DBversion done (Bug 15766: Add column creator_batches.description)\n";
16706 $DBversion = '18.06.00.045';
16707 if( CheckVersion( $DBversion ) ) {
16708 $dbh->do(q(
16709 INSERT IGNORE INTO message_transports
16710 (message_attribute_id,message_transport_type,is_digest,letter_module,letter_code)
16711 VALUES
16712 (2, 'phone', 0, 'circulation', 'PREDUE'),
16713 (2, 'phone', 1, 'circulation', 'PREDUEDGST'),
16714 (4, 'phone', 0, 'reserves', 'HOLD')
16716 SetVersion( $DBversion );
16717 print "Upgrade to $DBversion done (Bug 21639 - Add phone transports by default)\n";
16720 $DBversion = '18.06.00.046';
16721 if( CheckVersion( $DBversion ) ) {
16722 unless (TableExists('illcomments')) {
16723 $dbh->do(q{
16724 CREATE TABLE illcomments (
16725 illcomment_id int(11) NOT NULL AUTO_INCREMENT, -- Unique ID of the comment
16726 illrequest_id bigint(20) unsigned NOT NULL, -- ILL request number
16727 borrowernumber integer DEFAULT NULL, -- Link to the user who made the comment (could be librarian, patron or ILL partner library)
16728 comment text DEFAULT NULL, -- The text of the comment
16729 timestamp timestamp DEFAULT CURRENT_TIMESTAMP, -- Date and time when the comment was made
16730 PRIMARY KEY ( illcomment_id ),
16731 CONSTRAINT illcomments_bnfk
16732 FOREIGN KEY ( borrowernumber )
16733 REFERENCES borrowers ( borrowernumber )
16734 ON UPDATE CASCADE ON DELETE CASCADE,
16735 CONSTRAINT illcomments_ifk
16736 FOREIGN KEY (illrequest_id)
16737 REFERENCES illrequests ( illrequest_id )
16738 ON UPDATE CASCADE ON DELETE CASCADE
16739 ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
16743 SetVersion( $DBversion );
16744 print "Upgrade to $DBversion done (Bug 18591 - Add comments to ILL requests)\n";
16747 $DBversion = '18.06.00.047';
16748 if( CheckVersion( $DBversion ) ) {
16749 # insert the authorized_value_category for CONTROL_NUM_SEQUENCE
16750 $dbh->do( "INSERT IGNORE INTO authorised_value_categories values ('CONTROL_NUM_SEQUENCE');" );
16751 SetVersion( $DBversion );
16752 print "Upgrade to $DBversion done (Bug 19263 - Advanced Editor - Rancor - Add auto control number (001) widget)\n";
16755 $DBversion = '18.06.00.048';
16756 if( CheckVersion( $DBversion ) ) {
16757 $dbh->do( "ALTER TABLE stockrotationrotas CHANGE COLUMN description description text" );
16758 SetVersion( $DBversion );
16759 print "Upgrade to $DBversion done (Bug 21682 - Remove default on stockrotationrotas.description)\n";
16762 $DBversion = '18.06.00.049';
16763 if( CheckVersion( $DBversion ) ) {
16764 $dbh->do(q{
16765 UPDATE letter SET content = REPLACE(content,"item.reason ne \'in-demand\'","item.reason != \'in-demand\'")
16766 WHERE code="SR_SLIP";
16768 print "Upgrade to $DBversion done (Bug 21656 - Stock Rotation Notice, Template Toolkit Syntax Correction)\n";
16769 SetVersion( $DBversion );
16772 $DBversion = '18.06.00.050';
16773 if( CheckVersion( $DBversion ) ) {
16774 $dbh->do(q{
16775 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');
16777 print "Upgrade to $DBversion done (Bug 14385 - Add OpacHiddenItemExceptions)\n";
16778 SetVersion( $DBversion );
16781 $DBversion = '18.06.00.051';
16782 if( CheckVersion( $DBversion ) ) {
16783 $dbh->do(q{
16784 INSERT IGNORE INTO `systempreferences` (`variable`, `value`, `options`, `explanation`, `type`) VALUES
16785 ('AdlibrisCoversEnabled', '0', NULL, 'Display cover images in OPAC results and detail listing from Swedish retailer Adlibris.','YesNo'),
16786 ('AdlibrisCoversURL', 'http://www.adlibris.com/se/organisationer/showimagesafe.aspx', NULL, 'Base URL for Adlibris cover image web service.', 'Free');
16788 print "Upgrade to $DBversion done (Bug 8630 - Add covers from AdLibris to the OPAC and Intranet)\n";
16789 SetVersion( $DBversion );
16792 $DBversion = '18.06.00.052';
16793 if( CheckVersion( $DBversion ) ) {
16794 $dbh->do(q{
16795 INSERT IGNORE INTO permissions (module_bit, code, description) VALUES
16796 ( 3, 'manage_sysprefs', 'Manage global system preferences'),
16797 ( 3, 'manage_libraries', 'Manage libraries and library groups'),
16798 ( 3, 'manage_itemtypes', 'Manage item types'),
16799 ( 3, 'manage_auth_values', 'Manage authorized values'),
16800 ( 3, 'manage_patron_categories', 'Manage patron categories'),
16801 ( 3, 'manage_patron_attributes', 'Manage extended patron attributes'),
16802 ( 3, 'manage_transfers', 'Manage library transfer limits and transport cost matrix'),
16803 ( 3, 'manage_item_circ_alerts', 'Manage item circulation alerts'),
16804 ( 3, 'manage_cities', 'Manage cities and towns'),
16805 ( 3, 'manage_marc_frameworks', 'Manage MARC bibliographic and authority frameworks'),
16806 ( 3, 'manage_keywords2koha_mappings', 'Manage keywords to Koha mappings'),
16807 ( 3, 'manage_classifications', 'Manage classification sources'),
16808 ( 3, 'manage_matching_rules', 'Manage record matching rules'),
16809 ( 3, 'manage_oai_sets', 'Manage OAI sets'),
16810 ( 3, 'manage_item_search_fields', 'Manage item search fields'),
16811 ( 3, 'manage_search_engine_config', 'Manage search engine configuration'),
16812 ( 3, 'manage_search_targets', 'Manage Z39.50 and SRU server configuration'),
16813 ( 3, 'manage_didyoumean', 'Manage Did you mean? configuration'),
16814 ( 3, 'manage_column_config', 'Manage column configuration'),
16815 ( 3, 'manage_sms_providers', 'Manage SMS cellular providers'),
16816 ( 3, 'manage_audio_alerts', 'Manage audio alerts'),
16817 ( 3, 'manage_usage_stats', 'Manage usage statistics settings');
16819 $dbh->do(q{
16820 INSERT INTO user_permissions (borrowernumber, module_bit, code)
16821 SELECT borrowernumber, 3, 'manage_sysprefs' FROM borrowers WHERE borrowernumber IN (SELECT borrowernumber FROM user_permissions WHERE code = 'parameters_remaining_permissions');
16823 $dbh->do(q{
16824 INSERT INTO user_permissions (borrowernumber, module_bit, code)
16825 SELECT borrowernumber, 3, 'manage_libraries' FROM borrowers WHERE borrowernumber IN (SELECT borrowernumber FROM user_permissions WHERE code = 'parameters_remaining_permissions');
16827 $dbh->do(q{
16828 INSERT INTO user_permissions (borrowernumber, module_bit, code)
16829 SELECT borrowernumber, 3, 'manage_itemtypes' FROM borrowers WHERE borrowernumber IN (SELECT borrowernumber FROM user_permissions WHERE code = 'parameters_remaining_permissions');
16831 $dbh->do(q{
16832 INSERT INTO user_permissions (borrowernumber, module_bit, code)
16833 SELECT borrowernumber, 3, 'manage_auth_values' FROM borrowers WHERE borrowernumber IN (SELECT borrowernumber FROM user_permissions WHERE code = 'parameters_remaining_permissions');
16835 $dbh->do(q{
16836 INSERT INTO user_permissions (borrowernumber, module_bit, code)
16837 SELECT borrowernumber, 3, 'manage_patron_categories' FROM borrowers WHERE borrowernumber IN (SELECT borrowernumber FROM user_permissions WHERE code = 'parameters_remaining_permissions');
16839 $dbh->do(q{
16840 INSERT INTO user_permissions (borrowernumber, module_bit, code)
16841 SELECT borrowernumber, 3, 'manage_patron_attributes' FROM borrowers WHERE borrowernumber IN (SELECT borrowernumber FROM user_permissions WHERE code = 'parameters_remaining_permissions');
16843 $dbh->do(q{
16844 INSERT INTO user_permissions (borrowernumber, module_bit, code)
16845 SELECT borrowernumber, 3, 'manage_transfers' FROM borrowers WHERE borrowernumber IN (SELECT borrowernumber FROM user_permissions WHERE code = 'parameters_remaining_permissions');
16847 $dbh->do(q{
16848 INSERT INTO user_permissions (borrowernumber, module_bit, code)
16849 SELECT borrowernumber, 3, 'manage_item_circ_alerts' FROM borrowers WHERE borrowernumber IN (SELECT borrowernumber FROM user_permissions WHERE code = 'parameters_remaining_permissions');
16851 $dbh->do(q{
16852 INSERT INTO user_permissions (borrowernumber, module_bit, code)
16853 SELECT borrowernumber, 3, 'manage_cities' FROM borrowers WHERE borrowernumber IN (SELECT borrowernumber FROM user_permissions WHERE code = 'parameters_remaining_permissions');
16855 $dbh->do(q{
16856 INSERT INTO user_permissions (borrowernumber, module_bit, code)
16857 SELECT borrowernumber, 3, 'manage_marc_frameworks' FROM borrowers WHERE borrowernumber IN (SELECT borrowernumber FROM user_permissions WHERE code = 'parameters_remaining_permissions');
16859 $dbh->do(q{
16860 INSERT INTO user_permissions (borrowernumber, module_bit, code)
16861 SELECT borrowernumber, 3, 'manage_keywords2koha_mappings' FROM borrowers WHERE borrowernumber IN (SELECT borrowernumber FROM user_permissions WHERE code = 'parameters_remaining_permissions');
16863 $dbh->do(q{
16864 INSERT INTO user_permissions (borrowernumber, module_bit, code)
16865 SELECT borrowernumber, 3, 'manage_classifications' FROM borrowers WHERE borrowernumber IN (SELECT borrowernumber FROM user_permissions WHERE code = 'parameters_remaining_permissions');
16867 $dbh->do(q{
16868 INSERT INTO user_permissions (borrowernumber, module_bit, code)
16869 SELECT borrowernumber, 3, 'manage_matching_rules' FROM borrowers WHERE borrowernumber IN (SELECT borrowernumber FROM user_permissions WHERE code = 'parameters_remaining_permissions');
16871 $dbh->do(q{
16872 INSERT INTO user_permissions (borrowernumber, module_bit, code)
16873 SELECT borrowernumber, 3, 'manage_oai_sets' FROM borrowers WHERE borrowernumber IN (SELECT borrowernumber FROM user_permissions WHERE code = 'parameters_remaining_permissions');
16875 $dbh->do(q{
16876 INSERT INTO user_permissions (borrowernumber, module_bit, code)
16877 SELECT borrowernumber, 3, 'manage_item_search_fields' FROM borrowers WHERE borrowernumber IN (SELECT borrowernumber FROM user_permissions WHERE code = 'parameters_remaining_permissions');
16879 $dbh->do(q{
16880 INSERT INTO user_permissions (borrowernumber, module_bit, code)
16881 SELECT borrowernumber, 3, 'manage_search_engine_config' FROM borrowers WHERE borrowernumber IN (SELECT borrowernumber FROM user_permissions WHERE code = 'parameters_remaining_permissions');
16883 $dbh->do(q{
16884 INSERT INTO user_permissions (borrowernumber, module_bit, code)
16885 SELECT borrowernumber, 3, 'manage_search_targets' FROM borrowers WHERE borrowernumber IN (SELECT borrowernumber FROM user_permissions WHERE code = 'parameters_remaining_permissions');
16887 $dbh->do(q{
16888 INSERT INTO user_permissions (borrowernumber, module_bit, code)
16889 SELECT borrowernumber, 3, 'manage_didyoumean' FROM borrowers WHERE borrowernumber IN (SELECT borrowernumber FROM user_permissions WHERE code = 'parameters_remaining_permissions');
16891 $dbh->do(q{
16892 INSERT INTO user_permissions (borrowernumber, module_bit, code)
16893 SELECT borrowernumber, 3, 'manage_column_config' FROM borrowers WHERE borrowernumber IN (SELECT borrowernumber FROM user_permissions WHERE code = 'parameters_remaining_permissions');
16895 $dbh->do(q{
16896 INSERT INTO user_permissions (borrowernumber, module_bit, code)
16897 SELECT borrowernumber, 3, 'manage_sms_providers' FROM borrowers WHERE borrowernumber IN (SELECT borrowernumber FROM user_permissions WHERE code = 'parameters_remaining_permissions');
16899 $dbh->do(q{
16900 INSERT INTO user_permissions (borrowernumber, module_bit, code)
16901 SELECT borrowernumber, 3, 'manage_audio_alerts' FROM borrowers WHERE borrowernumber IN (SELECT borrowernumber FROM user_permissions WHERE code = 'parameters_remaining_permissions');
16903 $dbh->do(q{
16904 INSERT INTO user_permissions (borrowernumber, module_bit, code)
16905 SELECT borrowernumber, 3, 'manage_usage_stats' FROM borrowers WHERE borrowernumber IN (SELECT borrowernumber FROM user_permissions WHERE code = 'parameters_remaining_permissions');
16907 $dbh->do(q{
16908 INSERT INTO user_permissions (borrowernumber, module_bit, code)
16909 SELECT borrowernumber, 3, 'manage_item_search_fields' FROM borrowers WHERE flags & (1 << 2);
16911 SetVersion( $DBversion );
16912 print "Upgrade to $DBversion done (Bug 14391: Add granular permissions to the administration module)\n";
16915 $DBversion = '18.06.00.053';
16916 if( CheckVersion( $DBversion ) ) {
16917 $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')" );
16918 SetVersion( $DBversion );
16919 print "Upgrade to $DBversion done (Bug 15494 - Block renewals by arbitrary item values)\n";
16922 $DBversion = '18.06.00.054';
16923 if( CheckVersion( $DBversion ) ) {
16924 if( !column_exists( 'search_field', 'weight' ) ) {
16925 $dbh->do( "ALTER TABLE `search_field` ADD COLUMN `weight` decimal(5,2) DEFAULT NULL AFTER `type`" );
16927 SetVersion( $DBversion );
16928 print "Upgrade to $DBversion done (Bug 18316 - Add column search_field.weight)\n";
16931 $DBversion = '18.06.00.055';
16932 if( CheckVersion( $DBversion ) ) {
16933 unless( column_exists( 'issuingrules', 'note' ) ) {
16934 $dbh->do(q|ALTER TABLE `issuingrules` ADD `note` varchar(100) default NULL AFTER `article_requests`|);
16936 SetVersion( $DBversion );
16937 print "Upgrade to $DBversion done (Bug 12365: Add column issuingrules.note)\n";
16940 $DBversion = '18.06.00.056';
16941 if( CheckVersion( $DBversion ) ) {
16943 # All attributes we're potentially interested in
16944 my $ff_req = $dbh->selectall_arrayref(
16945 'SELECT a.illrequest_id, a.type, a.value '.
16946 'FROM illrequests r, illrequestattributes a '.
16947 'WHERE r.illrequest_id = a.illrequest_id '.
16948 'AND r.backend = "FreeForm"',
16949 { Slice => {} }
16952 # Before we go any further, identify whether we've done
16953 # this before, we test for the presence of "container_title"
16954 # We stop as soon as we find one
16955 foreach my $req(@{$ff_req}) {
16956 if ($req->{type} eq 'container_title') {
16957 warn "Upgrade already carried out";
16961 # Transform into a hashref with the key of the request ID
16962 my $requests = {};
16963 foreach my $request(@{$ff_req}) {
16964 my $id = $request->{illrequest_id};
16965 if (!exists $requests->{$id}) {
16966 $requests->{$id} = {};
16968 $requests->{$id}->{$request->{type}} = $request->{value};
16971 # Transform any article requests
16972 my $transformed = {};
16973 foreach my $id(keys %{$requests}) {
16974 if (lc($requests->{$id}->{type}) eq 'article') {
16975 $transformed->{$id} = $requests->{$id};
16976 $transformed->{$id}->{type} = 'article';
16977 $transformed->{$id}->{container_title} = $transformed->{$id}->{title}
16978 if defined $transformed->{$id}->{title} &&
16979 length $transformed->{$id}->{title} > 0;
16980 $transformed->{$id}->{title} = $transformed->{$id}->{article_title}
16981 if defined $transformed->{$id}->{article_title} &&
16982 length $transformed->{$id}->{article_title} > 0;
16983 $transformed->{$id}->{author} = $transformed->{$id}->{article_author}
16984 if defined $transformed->{$id}->{article_author} &&
16985 length $transformed->{$id}->{article_author} > 0;
16986 $transformed->{$id}->{pages} = $transformed->{$id}->{article_pages}
16987 if defined $transformed->{$id}->{article_pages} &&
16988 length $transformed->{$id}->{article_pages} > 0;
16992 # Now write back the transformed data
16993 # Rather than selectively replace, we just remove all attributes we've
16994 # transformed and re-write them
16995 my @changed = keys %{$transformed};
16996 my $changed_str = join(',', @changed);
16998 if (scalar @changed > 0) {
16999 my ($raise_error) = $dbh->{RaiseError};
17000 $dbh->{AutoCommit} = 0;
17001 $dbh->{RaiseError} = 1;
17002 eval {
17003 my $del = $dbh->do(
17004 "DELETE FROM illrequestattributes ".
17005 "WHERE illrequest_id IN ($changed_str)"
17007 foreach my $reqid(keys %{$transformed}) {
17008 my $attr = $transformed->{$reqid};
17009 foreach my $key(keys %{$attr}) {
17010 my $sth = $dbh->prepare(
17011 'INSERT INTO illrequestattributes '.
17012 '(illrequest_id, type, value) '.
17013 'VALUES '.
17014 '(?, ?, ?)'
17016 $sth->execute(
17017 $reqid,
17018 $key,
17019 $attr->{$key}
17023 $dbh->commit;
17026 if ($@) {
17027 warn "Upgrade to $DBversion failed: $@\n";
17028 eval { $dbh->rollback };
17029 } else {
17030 SetVersion( $DBversion );
17031 print "Upgrade to $DBversion done (Bug 21079 - Unify metadata schema across backends)\n";
17034 $dbh->{AutoCommit} = 1;
17035 $dbh->{RaiseError} = $raise_error;
17040 $DBversion = '18.06.00.057';
17041 if( CheckVersion( $DBversion ) ) {
17042 # System preferences
17043 $dbh->do(q{
17044 INSERT IGNORE INTO `systempreferences` (`variable`,`value`,`explanation`,`options`,`type`)
17045 VALUES ('showLastPatron','0','','If ON, enables the last patron feature in the intranet','YesNo');
17047 SetVersion( $DBversion );
17048 print "Upgrade to $DBversion done (Bug 20312 - Add showLastPatron systempreference)\n";
17051 $DBversion = '18.06.00.058';
17052 if( CheckVersion( $DBversion ) ) {
17053 $dbh->do(q{
17054 INSERT IGNORE INTO systempreferences (`variable`, `value`, `options`, `explanation`, `type`) VALUES
17055 ('MarcFieldForCreatorId','',NULL,'Where to store the borrowernumber of the record''s creator','Free'),
17056 ('MarcFieldForCreatorName','',NULL,'Where to store the name of the record''s creator','Free'),
17057 ('MarcFieldForModifierId','',NULL,'Where to store the borrowernumber of the record''s last modifier','Free'),
17058 ('MarcFieldForModifierName','',NULL,'Where to store the name of the record''s last modifier','Free')
17061 SetVersion( $DBversion );
17062 print "Upgrade to $DBversion done (Bug 19349 - Add system preferences MarcFieldForCreatorId, MarcFieldForCreatorName, MarcFieldForModifierId, MarcFieldForModifierName)\n";
17065 $DBversion = '18.06.00.059';
17066 if( CheckVersion( $DBversion ) ) {
17067 $dbh->do(q{
17068 INSERT IGNORE INTO systempreferences ( `variable`, `value`, `options`, `explanation`, `type`) VALUES ('EmailSMSSendDriverFromAddress', '', '', 'Email SMS send driver from address override', 'Free');
17070 SetVersion( $DBversion );
17071 print "Upgrade to $DBversion done (Bug 20356 - Add EmailSMSSendDriverFromAddress system preference)\n";
17074 $DBversion = '18.06.00.060';
17075 if( CheckVersion( $DBversion ) ) {
17076 unless( TableExists( 'class_split_rules' ) ) {
17077 $dbh->do(q|
17078 CREATE TABLE class_split_rules (
17079 class_split_rule varchar(10) NOT NULL default '',
17080 description LONGTEXT,
17081 split_routine varchar(30) NOT NULL default '',
17082 split_regex varchar(255) NOT NULL default '',
17083 PRIMARY KEY (class_split_rule),
17084 UNIQUE KEY class_split_rule_idx (class_split_rule)
17085 ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci
17088 $dbh->do(q|
17089 ALTER TABLE class_sources
17090 ADD COLUMN class_split_rule varchar(10) NOT NULL default ''
17091 AFTER class_sort_rule
17094 $dbh->do(q|
17095 UPDATE class_sources
17096 SET class_split_rule = class_sort_rule
17099 $dbh->do(q|
17100 UPDATE class_sources
17101 SET class_split_rule = 'generic'
17102 WHERE class_split_rule NOT IN('dewey', 'generic', 'lcc')
17105 $dbh->do(q|
17106 INSERT INTO class_split_rules(class_split_rule, description, split_routine)
17107 VALUES
17108 ('dewey', 'Default sorting rules for DDC', 'Dewey'),
17109 ('lcc', 'Default sorting rules for LCC', 'LCC'),
17110 ('generic', 'Generic call number sorting rules', 'Generic')
17113 $dbh->do(q|
17114 ALTER TABLE class_sources
17115 ADD CONSTRAINT class_source_ibfk_2 FOREIGN KEY (class_split_rule)
17116 REFERENCES class_split_rules (class_split_rule)
17120 SetVersion( $DBversion );
17121 print "Upgrade to $DBversion done (Bug 15836 - Add class_sort_rules.split_routine and split_regex)\n";
17124 $DBversion = '18.06.00.061';
17125 if ( CheckVersion($DBversion) ) {
17126 $dbh->do(q{
17127 INSERT IGNORE INTO `systempreferences` (`variable`,`value`,`explanation`,`options`,`type`) VALUES
17128 ('ElasticsearchIndexStatus_biblios', '0', 'Biblios index status', NULL, NULL),
17129 ('ElasticsearchIndexStatus_authorities', '0', 'Authorities index status', NULL, NULL)
17131 SetVersion($DBversion);
17132 print "Upgrade to $DBversion done (Bug 19893 - Add elasticsearch index status preferences)\n";
17135 $DBversion = '18.06.00.062';
17136 if( CheckVersion( $DBversion ) ) {
17137 $dbh->do( "INSERT IGNORE INTO authorised_value_categories (category_name) VALUES ('PA_CLASS');");
17138 SetVersion( $DBversion );
17139 print "Upgrade to $DBversion done (Bug 21730: Add new authorised value category PA_CLASS)\n";
17142 $DBversion = '18.11.00.000';
17143 if( CheckVersion( $DBversion ) ) {
17144 SetVersion( $DBversion );
17145 print "Upgrade to $DBversion done (18.11.00 release)\n";
17148 $DBversion = '18.12.00.000';
17149 if( CheckVersion( $DBversion ) ) {
17150 SetVersion( $DBversion );
17151 print "Upgrade to $DBversion done (...and Steven!)\n";
17154 $DBversion = '18.12.00.001';
17155 if( CheckVersion( $DBversion ) ) {
17156 $dbh->do(q{
17157 UPDATE permissions SET code = 'manage_didyoumean' WHERE code = 'manage_didyouean';
17159 $dbh->do(q{
17160 UPDATE user_permissions SET code = 'manage_didyoumean' WHERE code = 'manage_didyouean';
17162 SetVersion( $DBversion );
17163 print "Upgrade to $DBversion (Bug 21961 - Fix typo in manage_didyoumean permission)\n";
17166 $DBversion = '18.12.00.002';
17167 if( CheckVersion( $DBversion ) ) {
17168 my $sth = $dbh->prepare(q|SELECT * FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS WHERE CONSTRAINT_NAME='accountlines_ibfk_1'|);
17169 $sth->execute;
17170 if ($sth->fetchrow_hashref) {
17171 $dbh->do(q|
17172 ALTER TABLE accountlines DROP FOREIGN KEY accountlines_ibfk_1;
17174 $dbh->do(q|
17175 ALTER TABLE accountlines CHANGE COLUMN borrowernumber borrowernumber INT(11) DEFAULT NULL;
17177 $dbh->do(q|
17178 ALTER TABLE accountlines ADD CONSTRAINT accountlines_ibfk_borrowers FOREIGN KEY (borrowernumber) REFERENCES borrowers (borrowernumber) ON DELETE SET NULL ON UPDATE CASCADE;
17181 SetVersion( $DBversion );
17182 print "Upgrade to $DBversion done (Bug 21065 - Set ON DELETE SET NULL on accountlines.borrowernumber)\n";
17185 $DBversion = '18.12.00.003';
17186 if( CheckVersion( $DBversion ) ) {
17187 # On a new installation the class_sources.sql will have failed, so we need to add all missing data
17188 my( $sort_cnt ) = $dbh->selectrow_array( q|SELECT COUNT(*) FROM class_sort_rules|);
17189 if( !$sort_cnt ) {
17190 $dbh->do(q|INSERT INTO `class_sort_rules` (`class_sort_rule`, `description`, `sort_routine`) VALUES
17191 ('dewey', 'Default filing rules for DDC', 'Dewey'),
17192 ('lcc', 'Default filing rules for LCC', 'LCC'),
17193 ('generic', 'Generic call number filing rules', 'Generic')
17197 my ( $split_cnt ) = $dbh->selectrow_array( q|SELECT COUNT(*) FROM class_split_rules|);
17198 if( !$split_cnt ) {
17199 $dbh->do(q|INSERT INTO `class_split_rules` (`class_split_rule`, `description`, `split_routine`) VALUES
17200 ('dewey', 'Default splitting rules for DDC', 'Dewey'),
17201 ('lcc', 'Default splitting rules for LCC', 'LCC'),
17202 ('generic', 'Generic call number splitting rules', 'Generic')
17206 my( $source_cnt ) = $dbh->selectrow_array( q|SELECT COUNT(*) FROM class_sources|);
17207 if( !$source_cnt ) {
17208 $dbh->do(q|INSERT INTO `class_sources` (`cn_source`, `description`, `used`, `class_sort_rule`, `class_split_rule`) VALUES
17209 ('ddc', 'Dewey Decimal Classification', 1, 'dewey', 'dewey'),
17210 ('lcc', 'Library of Congress Classification', 1, 'lcc', 'lcc'),
17211 ('udc', 'Universal Decimal Classification', 0, 'generic', 'generic'),
17212 ('sudocs', 'SuDoc Classification (U.S. GPO)', 0, 'generic', 'generic'),
17213 ('anscr', 'ANSCR (Sound Recordings)', 0, 'generic', 'generic'),
17214 ('z', 'Other/Generic Classification Scheme', 0, 'generic', 'generic')
17219 SetVersion( $DBversion );
17220 print "Upgrade to $DBversion done (Bug 22024 - Add missing splitting rule definitions)\n";
17223 $DBversion = '18.12.00.004';
17224 if( CheckVersion( $DBversion ) ) {
17225 if( !column_exists( 'accountlines', 'branchcode' ) ) {
17226 $dbh->do("ALTER TABLE accountlines ADD branchcode VARCHAR( 10 ) NULL DEFAULT NULL AFTER manager_id");
17227 $dbh->do("ALTER TABLE accountlines ADD CONSTRAINT accountlines_ibfk_branches FOREIGN KEY (branchcode) REFERENCES branches (branchcode) ON DELETE SET NULL ON UPDATE CASCADE");
17229 SetVersion( $DBversion );
17230 print "Upgrade to $DBversion done (Bug 19066 - Add branchcode to accountlines)\n";
17233 $DBversion = '18.12.00.005';
17234 if( CheckVersion( $DBversion ) ) {
17235 $dbh->do(q{
17236 INSERT IGNORE INTO systempreferences ( `variable`, `value`, `options`, `explanation`, `type` ) VALUES
17237 ('OverDriveUsername','cardnumber','cardnumber|userid','Which patron information should be passed as OverDrive username','Choice')
17239 SetVersion( $DBversion );
17240 print "Upgrade to $DBversion done (Bug 22030: Add OverDriveUsername syspref)\n";
17243 $DBversion = '18.12.00.006';
17244 if( CheckVersion( $DBversion ) ) {
17245 $dbh->do(q{
17246 INSERT IGNORE INTO systempreferences (variable,value,explanation,options,type) VALUES
17247 ('AccountAutoReconcile','0','If enabled, patron balances will get reconciled automatically on each transaction.',NULL,'YesNo');
17249 SetVersion($DBversion);
17250 print "Upgrade to $DBversion done (Bug 21915 - Add a way to automatically reconcile balance for patrons)\n";
17253 $DBversion = '18.12.00.007';
17254 if( CheckVersion( $DBversion ) ) {
17255 if( column_exists( 'issuingrules', 'chargename' ) ) {
17256 $dbh->do( "ALTER TABLE issuingrules DROP chargename" );
17258 SetVersion( $DBversion );
17259 print "Upgrade to $DBversion done (Bug 21753: Drop chargename from issuingrules )\n";
17262 $DBversion = '18.12.00.008';
17263 if( CheckVersion( $DBversion ) ) {
17264 if( !column_exists( 'subscription', 'mana_id' ) ) {
17265 $dbh->do( "ALTER TABLE subscription ADD mana_id int(11) NULL DEFAULT NULL" );
17268 if( !column_exists( 'saved_sql', 'mana_id' ) ) {
17269 $dbh->do( "ALTER TABLE saved_sql ADD mana_id int(11) NULL DEFAULT NULL" );
17271 $dbh->do(q{
17272 INSERT IGNORE INTO systempreferences ( `variable`, `value`, `options`, `explanation`, `type` ) VALUES
17273 ('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.','YesNo');
17275 $dbh->do(q{
17276 INSERT IGNORE INTO systempreferences ( `variable`, `value`, `options`, `explanation`, `type` ) VALUES
17277 ('AutoShareWithMana','','','defines datas automatically shared with mana','multiple');
17279 $dbh->do(q{
17280 INSERT IGNORE INTO systempreferences ( `variable`, `value`, `options`, `explanation`, `type` ) VALUES
17281 ('ManaToken','',NULL,'Security token used for authentication on Mana KB service (anti spam)','Textarea');
17283 SetVersion( $DBversion );
17284 print "Upgrade to $DBversion done (Bug 17047 - Mana knowledge base)\n";
17287 $DBversion = '18.12.00.009';
17288 if( CheckVersion( $DBversion ) ) {
17289 $dbh->do(q{
17290 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');
17292 SetVersion( $DBversion );
17293 print "Upgrade to $DBversion done (Bug 21241 - Add FallbackToSMSIfNoEmail syspref )\n";
17296 $DBversion = '18.12.00.010';
17297 if( CheckVersion( $DBversion ) ) {
17298 $dbh->do(q{
17299 INSERT IGNORE INTO systempreferences
17300 ( variable, value, options, explanation, type )
17301 VALUES
17302 ('RESTPublicAPI','1',NULL,'If enabled, the REST API will expose the /public endpoints.','YesNo')
17305 # Always end with this (adjust the bug info)
17306 SetVersion( $DBversion );
17307 print "Upgrade to $DBversion done (Bug 22061 - Add a /public namespace that can be switched on/off)\n";
17310 $DBversion = '18.12.00.011';
17311 if( CheckVersion( $DBversion ) ) {
17312 if ( column_exists( 'biblio_metadata', 'marcflavour' ) ) {
17313 $dbh->do(q{
17314 ALTER TABLE biblio_metadata
17315 CHANGE COLUMN marcflavour `schema` VARCHAR(16)
17318 if ( column_exists( 'deletedbiblio_metadata', 'marcflavour' ) ) {
17319 $dbh->do(q{
17320 ALTER TABLE deletedbiblio_metadata
17321 CHANGE COLUMN marcflavour `schema` VARCHAR(16)
17324 SetVersion( $DBversion );
17325 print "Upgrade to $DBversion done (Bug 22155 - biblio_metadata.marcflavour should be renamed 'schema')\n";
17328 $DBversion = '18.12.00.012';
17329 if( CheckVersion( $DBversion ) ) {
17330 $dbh->do(q{
17331 INSERT IGNORE INTO systempreferences
17332 (variable, value, options, explanation, type )
17333 VALUES
17334 ('RESTBasicAuth','0',NULL,'If enabled, Basic authentication is enabled for the REST API.','YesNo')
17336 SetVersion( $DBversion );
17337 print "Upgrade to $DBversion done (Bug 22132 - Add Basic authentication)\n";
17340 $DBversion = '18.12.00.013';
17341 if( CheckVersion( $DBversion ) ) {
17342 $dbh->do(q{
17343 INSERT IGNORE INTO permissions (module_bit, code, description) VALUES ( 3, 'manage_mana', 'Manage Mana KB content sharing');
17345 SetVersion( $DBversion );
17346 print "Upgrade to $DBversion done (Bug 22198 - Add ghranular permission setting for Mana KB)\n";
17349 $DBversion = '18.12.00.014';
17350 if( CheckVersion( $DBversion ) ) {
17351 unless( foreign_key_exists( 'messages', 'messages_borrowernumber' ) ) {
17352 $dbh->do(q|
17353 DELETE m FROM messages m
17354 LEFT JOIN borrowers b ON m.borrowernumber=b.borrowernumber
17355 WHERE b.borrowernumber IS NULL
17357 $dbh->do(q|
17358 ALTER TABLE messages
17359 ADD CONSTRAINT messages_borrowernumber
17360 FOREIGN KEY (borrowernumber) REFERENCES borrowers (borrowernumber) ON DELETE CASCADE ON UPDATE CASCADE
17363 SetVersion( $DBversion );
17364 print "Upgrade to $DBversion done (Bug 13515 - Add a FOREIGN KEY constaint on messages.borrowernumber)\n";
17367 $DBversion = '18.12.00.015';
17368 if( CheckVersion( $DBversion ) ) {
17369 $dbh->do( "UPDATE action_logs SET info = REPLACE(info,'cardnumber_replaced','cardnumber'), timestamp = timestamp WHERE module='MEMBERS' AND action='MODIFY'" );
17370 $dbh->do( "UPDATE action_logs SET info = REPLACE(info,'previous_cardnumber','before'), timestamp = timestamp WHERE module='MEMBERS' AND action='MODIFY'" );
17371 $dbh->do( "UPDATE action_logs SET info = REPLACE(info,'new_cardnumber','after'), timestamp = timestamp WHERE module='MEMBERS' AND action='MODIFY'" );
17373 SetVersion( $DBversion );
17374 print "Upgrade to $DBversion done (Bug 3820 - Update patron modification logs)\n";
17377 $DBversion = '18.12.00.016';
17378 if( CheckVersion( $DBversion ) ) {
17380 if ( !column_exists( 'illrequests', 'status_alias' ) ) {
17381 # Fresh upgrade, just add the column and constraint
17382 $dbh->do( "ALTER TABLE illrequests ADD COLUMN status_alias varchar(80) DEFAULT NULL AFTER status" );
17383 } else {
17384 # Migrate all existing foreign keys from referencing authorised_values.id
17385 # to referencing authorised_values.authorised_value
17386 # First remove the foreign key constraint and index
17387 if ( foreign_key_exists( 'illrequests', 'illrequests_safk' ) ) {
17388 $dbh->do( "ALTER TABLE illrequests DROP FOREIGN KEY illrequests_safk");
17390 if ( index_exists( 'illrequests', 'illrequests_safk' ) ) {
17391 $dbh->do( "DROP INDEX illrequests_safk ON illrequests" );
17393 # Now change the illrequests.status_alias column definition from int to varchar
17394 $dbh->do( "ALTER TABLE illrequests MODIFY COLUMN status_alias varchar(80)" );
17395 # Now replace all references to authorised_values.id with their
17396 # corresponding authorised_values.authorised_value
17397 my $sth = $dbh->prepare( "SELECT illrequest_id, status_alias FROM illrequests WHERE status_alias IS NOT NULL" );
17398 $sth->execute();
17399 while (my @row = $sth->fetchrow_array()) {
17400 my $r_id = $row[0];
17401 my $av_id = $row[1];
17402 # Get the authorised value's authorised_value value
17403 my ($av_val) = $dbh->selectrow_array( "SELECT authorised_value FROM authorised_values WHERE id = ?", {}, $av_id );
17404 # Now update illrequests.status_alias
17405 if ($av_val) {
17406 $dbh->do( "UPDATE illrequests SET status_alias = ? WHERE illrequest_id = ?", {}, ($av_val, $r_id) );
17410 if ( !foreign_key_exists( 'illrequests', 'illrequests_safk' ) ) {
17411 $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" );
17413 $dbh->do( "INSERT IGNORE INTO authorised_value_categories SET category_name = 'ILLSTATUS'");
17415 SetVersion( $DBversion );
17416 print "Upgrade to $DBversion done (Bug 20581 - Allow manual selection of custom ILL request statuses)\n";
17419 $DBversion = '18.12.00.017';
17420 if( CheckVersion( $DBversion ) ) {
17421 $dbh->do(q{
17422 INSERT IGNORE INTO account_offset_types ( type ) VALUES ( 'fine_increase' ), ( 'fine_decrease' );
17424 $dbh->do(q{
17425 UPDATE account_offsets SET type = 'fine_increase' WHERE type = 'Fine Update' AND amount > 0;
17427 $dbh->do(q{
17428 UPDATE account_offsets SET type = 'fine_decrease' WHERE type = 'Fine Update' AND amount < 0;
17431 $dbh->do(q{
17432 DELETE FROM account_offset_types WHERE type = 'Fine Update';
17434 SetVersion( $DBversion );
17435 print "Upgrade to $DBversion done (Bug 21747 - Update account_offset_types to include 'fine_increase' and 'fine_decrease')\n";
17438 $DBversion = '18.12.00.018';
17439 if( CheckVersion( $DBversion ) ) {
17440 $dbh->do( "UPDATE `search_field` SET `name` = 'date-of-publication', `label` = 'date-of-publication' WHERE `name` = 'pubdate'" );
17441 $dbh->do( "UPDATE `search_field` SET `name` = 'title-series', `label` = 'title-series' WHERE `name` = 'se'" );
17442 $dbh->do( "UPDATE `search_field` SET `name` = 'identifier-standard', `label` = 'identifier-standard' WHERE `name` = 'identifier-standard'" );
17443 $dbh->do( "UPDATE `search_field` SET `name` = 'author', `label` = 'author' WHERE `name` = 'author'" );
17444 $dbh->do( "UPDATE `search_field` SET `name` = 'control-number', `label` = 'control-number' WHERE `name` = 'control-number'" );
17445 $dbh->do( "UPDATE `search_field` SET `name` = 'place-of-publication', `label` = 'place-of-publication' WHERE `name` = 'place'" );
17446 $dbh->do( "UPDATE `search_field` SET `name` = 'date-of-acquisition', `label` = 'date-of-acquisition' WHERE `name` = 'acqdate'" );
17447 $dbh->do( "UPDATE `search_field` SET `name` = 'isbn', `label` = 'isbn' WHERE `name` = 'isbn'" );
17448 $dbh->do( "UPDATE `search_field` SET `name` = 'koha-auth-number', `label` = 'koha-auth-number' WHERE `name` = 'an'" );
17449 $dbh->do( "UPDATE `search_field` SET `name` = 'subject', `label` = 'subject' WHERE `name` = 'subject'" );
17450 $dbh->do( "UPDATE `search_field` SET `name` = 'publisher', `label` = 'publisher' WHERE `name` = 'publisher'" );
17451 $dbh->do( "UPDATE `search_field` SET `name` = 'record-source', `label` = 'record-source' WHERE `name` = 'record-source'" );
17452 $dbh->do( "UPDATE `search_field` SET `name` = 'title', `label` = 'title' WHERE `name` = 'title'" );
17453 $dbh->do( "UPDATE `search_field` SET `name` = 'local-classification', `label` = 'local-classification' WHERE `name` = 'local-classification'" );
17454 $dbh->do( "UPDATE `search_field` SET `name` = 'bib-level', `label` = 'bib-level' WHERE `name` = 'bib-level'" );
17455 $dbh->do( "UPDATE `search_field` SET `name` = 'microform-generation', `label` = 'microform-generation' WHERE `name` = 'microform-generation'" );
17456 $dbh->do( "UPDATE `search_field` SET `name` = 'material-type', `label` = 'material-type' WHERE `name` = 'material-type'" );
17457 $dbh->do( "UPDATE `search_field` SET `name` = 'bgf-number', `label` = 'bgf-number' WHERE `name` = 'bgf-number'" );
17458 $dbh->do( "UPDATE `search_field` SET `name` = 'number-db', `label` = 'number-db' WHERE `name` = 'number-db'" );
17459 $dbh->do( "UPDATE `search_field` SET `name` = 'number-natl-biblio', `label` = 'number-natl-biblio' WHERE `name` = 'number-natl-biblio'" );
17460 $dbh->do( "UPDATE `search_field` SET `name` = 'number-legal-deposit', `label` = 'number-legal-deposit' WHERE `name` = 'number-legal-deposit'" );
17461 $dbh->do( "UPDATE `search_field` SET `name` = 'issn', `label` = 'issn' WHERE `name` = 'issn'" );
17462 $dbh->do( "UPDATE `search_field` SET `name` = 'local-number', `label` = 'local-number' WHERE `name` = 'local-number'" );
17463 $dbh->do( "UPDATE `search_field` SET `name` = 'suppress', `label` = 'supress' WHERE `name` = 'suppress'" );
17464 $dbh->do( "UPDATE `search_field` SET `name` = 'bnb-card-number', `label` = 'bnb-card-number' WHERE `name` = 'bnb-card-number'" );
17465 $dbh->do( "UPDATE `search_field` SET `name` = 'date/time-last-modified', `label` = 'date/time-last-modified' WHERE `name` = 'date-time-last-modified'" );
17466 $dbh->do( "DELETE FROM `search_field` WHERE `name` = 'lc-cardnumber'" );
17467 $dbh->do( "DELETE FROM `search_marc_map` WHERE `id` NOT IN(SELECT `search_marc_map_id` FROM `search_marc_to_field`)" );
17468 SetVersion( $DBversion );
17469 print "Upgrade to $DBversion done (Bug 19575 - Use canonical field names and resolve aliased fields)\n";
17472 $DBversion = '18.12.00.019';
17473 if( CheckVersion( $DBversion ) ) {
17474 $dbh->do(q{
17475 INSERT IGNORE INTO account_offset_types ( type ) VALUES ( 'Reserve Fee' );
17478 SetVersion( $DBversion );
17479 print "Upgrade to $DBversion done (Bug 21728 - Add 'Reserve Fee' to the account_offset_types table if missing)\n";
17482 $DBversion = '18.12.00.020';
17483 if( CheckVersion( $DBversion ) ) {
17484 if ( TableExists( 'branch_borrower_circ_rules' ) ) {
17485 if ( column_exists( 'branch_borrower_circ_rules', 'maxissueqty' ) ) {
17486 $dbh->do("
17487 INSERT INTO circulation_rules ( categorycode, branchcode, itemtype, rule_name, rule_value )
17488 SELECT categorycode, branchcode, NULL, 'patron_maxissueqty', COALESCE( maxissueqty, '' )
17489 FROM branch_borrower_circ_rules
17491 $dbh->do("
17492 INSERT INTO circulation_rules ( categorycode, branchcode, itemtype, rule_name, rule_value )
17493 SELECT categorycode, branchcode, NULL, 'patron_maxonsiteissueqty', COALESCE( maxonsiteissueqty, '' )
17494 FROM branch_borrower_circ_rules
17496 $dbh->do("DROP TABLE branch_borrower_circ_rules");
17500 if ( TableExists( 'default_borrower_circ_rules' ) ) {
17501 if ( column_exists( 'default_borrower_circ_rules', 'maxissueqty' ) ) {
17502 $dbh->do("
17503 INSERT INTO circulation_rules ( categorycode, branchcode, itemtype, rule_name, rule_value )
17504 SELECT categorycode, NULL, NULL, 'patron_maxissueqty', COALESCE( maxissueqty, '' )
17505 FROM default_borrower_circ_rules
17507 $dbh->do("
17508 INSERT INTO circulation_rules ( categorycode, branchcode, itemtype, rule_name, rule_value )
17509 SELECT categorycode, NULL, NULL, 'patron_maxonsiteissueqty', COALESCE( maxonsiteissueqty, '' )
17510 FROM default_borrower_circ_rules
17512 $dbh->do("DROP TABLE default_borrower_circ_rules");
17516 if ( column_exists( 'default_circ_rules', 'maxissueqty' ) ) {
17517 $dbh->do("
17518 INSERT INTO circulation_rules ( categorycode, branchcode, itemtype, rule_name, rule_value )
17519 SELECT NULL, NULL, NULL, 'patron_maxissueqty', COALESCE( maxissueqty, '' )
17520 FROM default_circ_rules
17522 $dbh->do("
17523 INSERT INTO circulation_rules ( categorycode, branchcode, itemtype, rule_name, rule_value )
17524 SELECT NULL, NULL, NULL, 'patron_maxonsiteissueqty', COALESCE( maxonsiteissueqty, '' )
17525 FROM default_circ_rules
17527 $dbh->do("ALTER TABLE default_circ_rules DROP COLUMN maxissueqty, DROP COLUMN maxonsiteissueqty");
17530 if ( column_exists( 'default_branch_circ_rules', 'maxissueqty' ) ) {
17531 $dbh->do("
17532 INSERT INTO circulation_rules ( categorycode, branchcode, itemtype, rule_name, rule_value )
17533 SELECT NULL, branchcode, NULL, 'patron_maxissueqty', COALESCE( maxissueqty, '' )
17534 FROM default_branch_circ_rules
17536 $dbh->do("
17537 INSERT INTO circulation_rules ( categorycode, branchcode, itemtype, rule_name, rule_value )
17538 SELECT NULL, NULL, NULL, 'patron_maxonsiteissueqty', COALESCE( maxonsiteissueqty, '' )
17539 FROM default_branch_circ_rules
17541 $dbh->do("ALTER TABLE default_branch_circ_rules DROP COLUMN maxissueqty, DROP COLUMN maxonsiteissueqty");
17544 if ( column_exists( 'issuingrules', 'maxissueqty' ) ) {
17545 # Cleaning invalid rules before, to avoid FK contraints to fail
17546 $dbh->do(q|
17547 DELETE FROM issuingrules WHERE categorycode != '*' AND categorycode NOT IN (SELECT categorycode FROM categories);
17549 $dbh->do(q|
17550 DELETE FROM issuingrules WHERE branchcode != '*' AND branchcode NOT IN (SELECT branchcode FROM branches);
17552 $dbh->do(q|
17553 DELETE FROM issuingrules WHERE itemtype != '*' AND itemtype NOT IN (SELECT itemtype FROM itemtypes);
17556 $dbh->do("
17557 INSERT INTO circulation_rules ( categorycode, branchcode, itemtype, rule_name, rule_value )
17558 SELECT IF(categorycode='*', NULL, categorycode),
17559 IF(branchcode='*', NULL, branchcode),
17560 IF(itemtype='*', NULL, itemtype),
17561 'maxissueqty',
17562 COALESCE( maxissueqty, '' )
17563 FROM issuingrules
17565 $dbh->do("
17566 INSERT INTO circulation_rules ( categorycode, branchcode, itemtype, rule_name, rule_value )
17567 SELECT IF(categorycode='*', NULL, categorycode),
17568 IF(branchcode='*', NULL, branchcode),
17569 IF(itemtype='*', NULL, itemtype),
17570 'maxonsiteissueqty',
17571 COALESCE( maxonsiteissueqty, '' )
17572 FROM issuingrules
17574 $dbh->do("ALTER TABLE issuingrules DROP COLUMN maxissueqty, DROP COLUMN maxonsiteissueqty");
17577 SetVersion( $DBversion );
17578 print "Upgrade to $DBversion done (Bug 18925 - Move maxissueqty and maxonsiteissueqty to circulation_rules)\n";
17581 $DBversion = '18.12.00.021';
17582 if ( CheckVersion($DBversion) ) {
17584 if ( !column_exists( 'itemtypes', 'rentalcharge_daily' ) ) {
17585 $dbh->do("ALTER TABLE `itemtypes` ADD COLUMN `rentalcharge_daily` decimal(28,6) default NULL AFTER `rentalcharge`");
17588 if ( !column_exists( 'itemtypes', 'rentalcharge_hourly' ) ) {
17589 $dbh->do("ALTER TABLE `itemtypes` ADD COLUMN `rentalcharge_hourly` decimal(28,6) default NULL AFTER `rentalcharge_daily`");
17592 if ( column_exists( 'itemtypes', 'rental_charge_daily' ) ) {
17593 $dbh->do("UPDATE `itemtypes` SET `rentalcharge_daily` = `rental_charge_daily`");
17594 $dbh->do("ALTER TABLE `itemtypes` DROP COLUMN `rental_charge_daily`");
17597 SetVersion($DBversion);
17598 print "Upgrade to $DBversion done (Bug 20912 - Support granular rental charges)\n";
17601 $DBversion = '18.12.00.022';
17602 if( CheckVersion( $DBversion ) ) {
17603 $dbh->do( q{
17604 INSERT IGNORE INTO permissions (module_bit,code,description)
17605 VALUES
17606 (3,'manage_additional_fields','Add, edit, or delete additional custom fields for baskets or subscriptions (also requires order_manage or edit_subscription permissions)')
17608 $dbh->do( q{
17609 INSERT INTO user_permissions (borrowernumber, module_bit, code)
17610 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');
17612 $dbh->do( q{
17613 INSERT INTO user_permissions (borrowernumber, module_bit, code)
17614 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);
17616 SetVersion( $DBversion );
17617 print "Upgrade to $DBversion done (Bug 15774 - Add permission for managing additional fields)\n";
17620 $DBversion = '18.12.00.023';
17621 if( CheckVersion( $DBversion ) ) {
17622 $dbh->do(q|
17623 INSERT IGNORE INTO systempreferences (variable,value,explanation,options,type)
17624 VALUES ('ILLOpacbackends',NULL,NULL,'ILL backends to enabled for OPAC initiated requests','multiple');
17627 # Always end with this (adjust the bug info)
17628 SetVersion( $DBversion );
17629 print "Upgrade to $DBversion done (Bug 20639 - Add ILLOpacbackends syspref)\n";
17632 $DBversion = '18.12.00.024';
17633 if ( CheckVersion($DBversion) ) {
17635 # Fixup any pre-existing bad suggestedby, manageddate, accepteddate dates
17636 $dbh->do(
17637 "UPDATE suggestions SET suggesteddate = '1970-01-01' WHERE suggesteddate = '0000-00-00';"
17639 $dbh->do(
17640 "UPDATE suggestions SET manageddate = '1970-01-01' WHERE manageddate = '0000-00-00';"
17642 $dbh->do(
17643 "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' ) )
17649 $dbh->do(
17650 "ALTER TABLE suggestions CHANGE COLUMN suggestedby suggestedby INT(11) NULL DEFAULT NULL;"
17652 $dbh->do(
17653 "UPDATE suggestions LEFT JOIN borrowers ON (suggestions.suggestedby = borrowers.borrowernumber) SET suggestedby = null WHERE borrowernumber IS null"
17655 $dbh->do(
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' ) )
17663 $dbh->do(
17664 "UPDATE suggestions LEFT JOIN borrowers ON (suggestions.managedby = borrowers.borrowernumber) SET managedby = null WHERE borrowernumber IS NULL"
17666 $dbh->do(
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
17672 unless (
17673 foreign_key_exists( 'suggestions', 'suggestions_ibfk_acceptedby' ) )
17675 $dbh->do(
17676 "UPDATE suggestions LEFT JOIN borrowers ON (suggestions.acceptedby = borrowers.borrowernumber) SET acceptedby = null WHERE borrowernumber IS NULL"
17678 $dbh->do(
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
17684 unless (
17685 foreign_key_exists( 'suggestions', 'suggestions_ibfk_rejectedby' ) )
17687 $dbh->do(
17688 "UPDATE suggestions LEFT JOIN borrowers ON (suggestions.rejectedby = borrowers.borrowernumber) SET rejectedby = null WHERE borrowernumber IS null"
17690 $dbh->do(
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
17696 unless (
17697 foreign_key_exists( 'suggestions', 'suggestions_ibfk_biblionumber' ) )
17699 $dbh->do(
17700 "UPDATE suggestions s LEFT JOIN biblio b ON (s.biblionumber = b.biblionumber) SET s.biblionumber = null WHERE b.biblionumber IS null"
17702 $dbh->do(
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
17708 unless (
17709 foreign_key_exists( 'suggestions', 'suggestions_ibfk_branchcode' ) )
17711 $dbh->do(
17712 "UPDATE suggestions s LEFT JOIN branches b ON (s.branchcode = b.branchcode) SET s.branchcode = null WHERE b.branchcode IS null"
17714 $dbh->do(
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);
17720 print
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
17730 $dbh->do(q{
17731 ALTER TABLE tags_index
17732 MODIFY COLUMN term VARCHAR(191) COLLATE utf8mb4_bin NOT NULL;
17735 $dbh->do(q{
17736 ALTER TABLE tags_approval
17737 MODIFY COLUMN term VARCHAR(191) COLLATE utf8mb4_bin NOT NULL;
17740 $dbh->do(q{
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 ) ) {
17763 $dbh->do(q{
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 ) ) {
17773 $dbh->do(q{
17774 INSERT IGNORE INTO account_offset_types ( type ) VALUES ( 'Account Fee' );
17777 $dbh->do(q{
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' ) && !foreign_key_exists( 'accountlines', 'accountlines_ibfk_items' ) ) {
17817 $dbh->do("ALTER TABLE accountlines DROP FOREIGN KEY accountlines_ibfk_2");
17818 $dbh->do("ALTER TABLE accountlines ADD CONSTRAINT `accountlines_ibfk_items` FOREIGN KEY (`itemnumber`) REFERENCES `items` (`itemnumber`) ON DELETE SET NULL ON UPDATE CASCADE");
17821 SetVersion( $DBversion );
17822 print "Upgrade to $DBversion done (Bug 22008 - Add missing constraints for accountlines.manager_id)\n";
17825 $DBversion = '18.12.00.032';
17826 if( CheckVersion( $DBversion ) ) {
17827 if( !column_exists( 'search_field', 'facet_order' ) ) {
17828 $dbh->do("ALTER TABLE search_field ADD COLUMN facet_order TINYINT(4) DEFAULT NULL AFTER weight");
17830 $dbh->do("UPDATE search_field SET facet_order=1 WHERE name='author'");
17831 $dbh->do("UPDATE search_field SET facet_order=2 WHERE name='itype'");
17832 $dbh->do("UPDATE search_field SET facet_order=3 WHERE name='location'");
17833 $dbh->do("UPDATE search_field SET facet_order=4 WHERE name='su-geo'");
17834 $dbh->do("UPDATE search_field SET facet_order=5 WHERE name='title-series'");
17835 $dbh->do("UPDATE search_field SET facet_order=6 WHERE name='subject'");
17836 $dbh->do("UPDATE search_field SET facet_order=7 WHERE name='ccode'");
17837 $dbh->do("UPDATE search_field SET facet_order=8 WHERE name='holdingbranch'");
17838 $dbh->do("UPDATE search_field SET facet_order=9 WHERE name='homebranch'");
17839 SetVersion( $DBversion );
17840 print "Upgrade to $DBversion done (Bug 18235 - Elastic search - make facets configurable)\n";
17843 $DBversion = '18.12.00.033';
17844 if( CheckVersion( $DBversion ) ) {
17845 $dbh->do( "UPDATE search_field SET facet_order=10 WHERE name='ln'" );
17846 SetVersion( $DBversion );
17847 print "Upgrade to $DBversion done (Bug 18213 - Add language facets to Elasticsearch)\n";
17850 $DBversion = '18.12.00.034';
17851 if( CheckVersion( $DBversion ) ) {
17853 if ( column_exists( 'accountlines', 'lastincrement' ) ) {
17854 $dbh->do("ALTER TABLE `accountlines` DROP COLUMN `lastincrement`");
17857 SetVersion( $DBversion );
17858 print "Upgrade to $DBversion done (Bug 22516 - Drop deprecated accountlines.lastincrement field)\n";
17861 $DBversion = '18.12.00.035';
17862 if( CheckVersion( $DBversion ) ) {
17863 $dbh->do( "INSERT IGNORE INTO systempreferences (variable, value, options, explanation, type)
17864 VALUES ('MaxItemsToDisplayForBatchMod','1000',NULL,'Display up to a given number of items in a single item modification batch.','Integer')"
17866 SetVersion( $DBversion );
17867 print "Upgrade to $DBversion done (Bug 19722 - Add a MaxItemsToDisplayForBatchMod preference)\n";
17870 $DBversion = '18.12.00.036';
17871 if ( CheckVersion($DBversion) ) {
17873 my $rows = $dbh->do(
17875 UPDATE `accountlines`
17877 `accounttype` = 'FU'
17878 WHERE
17879 `accounttype` = 'O'
17883 SetVersion($DBversion);
17884 printf "Upgrade to $DBversion done (Bug 22518 - Fix accounttype 'O' to 'FU' - %d updated)\n", $rows;
17887 $DBversion = '18.12.00.037';
17888 if( CheckVersion( $DBversion ) ) {
17890 $dbh->do( "UPDATE issues SET renewals = 0 WHERE renewals IS NULL" );
17891 $dbh->do( "UPDATE old_issues SET renewals = 0 WHERE renewals IS NULL" );
17893 $dbh->do( "ALTER TABLE issues MODIFY COLUMN renewals tinyint(4) NOT NULL default 0");
17894 $dbh->do( "ALTER TABLE old_issues MODIFY COLUMN renewals tinyint(4) NOT NULL default 0");
17896 # Always end with this (adjust the bug info)
17897 SetVersion( $DBversion );
17898 print "Upgrade to $DBversion done (Bug 22607 - Set default value of issues.renewals to 0)\n";
17901 $DBversion = '18.12.00.038';
17902 if ( CheckVersion($DBversion) ) {
17904 if ( !column_exists( 'accountlines', 'status' ) ) {
17905 $dbh->do(
17907 ALTER TABLE `accountlines`
17909 `status` varchar(16) DEFAULT NULL
17910 AFTER
17911 `accounttype`
17916 SetVersion($DBversion);
17917 print "Upgrade to $DBversion done (Bug 22512 - Add status to accountlines)\n";
17920 $DBversion = '18.12.00.039';
17921 if ( CheckVersion($DBversion) ) {
17923 if ( !column_exists( 'accountlines', 'interface' ) ) {
17924 $dbh->do(
17926 ALTER TABLE `accountlines`
17928 `interface` varchar(16)
17929 AFTER
17930 `manager_id`;
17935 $dbh->do(qq{
17936 UPDATE
17937 `accountlines`
17939 interface = 'opac'
17940 WHERE
17941 borrowernumber = manager_id;
17944 $dbh->do(qq{
17945 UPDATE
17946 `accountlines`
17948 interface = 'cron'
17949 WHERE
17950 manager_id IS NULL
17952 branchcode IS NULL;
17955 $dbh->do(qq{
17956 UPDATE
17957 `accountlines`
17959 interface = 'intranet'
17960 WHERE
17961 interface IS NULL;
17964 $dbh->do(qq{
17965 ALTER TABLE `accountlines`
17966 MODIFY COLUMN `interface` varchar(16) NOT NULL;
17969 SetVersion($DBversion);
17970 print "Upgrade to $DBversion done (Bug 22600 - Add interface to accountlines)\n";
17973 $DBversion = '18.12.00.040';
17974 if( CheckVersion( $DBversion ) ) {
17975 $dbh->do("UPDATE accountlines SET description = REPLACE(description, 'Reserve Charge - ', '') WHERE description LIKE 'Reserve Charge - %'");
17976 SetVersion( $DBversion );
17977 print "Upgrade to $DBversion done (Bug 12166 - Remove 'Reserve Charge' text from accountlines description)\n";
17980 $DBversion = '18.12.00.041';
17981 if( CheckVersion( $DBversion ) ) {
17982 my $table_sth = $dbh->prepare('SHOW CREATE TABLE `search_marc_map`');
17983 $table_sth->execute();
17984 my @table = $table_sth->fetchrow_array();
17985 unless ( $table[1] =~ /`marc_field`.*COLLATE utf8mb4_bin/ ) { #catches utf8mb4 collated tables
17986 $dbh->do("ALTER TABLE `search_marc_map` MODIFY `marc_field` VARCHAR(255) NOT NULL COLLATE utf8mb4_bin COMMENT 'the MARC specifier for this field'");
17989 # Always end with this (adjust the bug info)
17990 SetVersion( $DBversion );
17991 print "Upgrade to $DBversion done (Bug 19670 - Change collation of marc_field to allow mixed case search field mappings)\n";
17994 $DBversion = '18.12.00.042';
17995 if( CheckVersion( $DBversion ) ) {
17996 $dbh->do( "UPDATE systempreferences SET value = 'default' WHERE variable = 'XSLTDetailsDisplay' AND value = ''" );
17997 SetVersion( $DBversion );
17998 print "Upgrade to $DBversion done (Bug 29891 - Remove non-XSLT detail view in the staff client)\n";
18001 $DBversion = '18.12.00.043';
18002 if ( CheckVersion($DBversion) ) {
18003 $dbh->do("UPDATE accountlines SET description = REPLACE(description, 'Lost Item ', '') WHERE description LIKE 'Lost Item %'");
18004 SetVersion($DBversion);
18005 print "Upgrade to $DBversion done (Bug 21953 - Remove 'Lost Item' text from accountlines description)\n";
18008 $DBversion = '18.12.00.044';
18009 if( CheckVersion( $DBversion ) ) {
18011 if ( !column_exists( 'categories', 'reset_password' ) ) {
18012 $dbh->do(q{
18013 ALTER TABLE categories
18014 ADD COLUMN reset_password TINYINT(1) NULL DEFAULT NULL
18015 AFTER checkprevcheckout
18019 SetVersion( $DBversion );
18020 print "Upgrade to $DBversion done (Bug 21890 - Patron password reset by category)\n";
18023 $DBversion = '18.12.00.045';
18024 if( CheckVersion( $DBversion ) ) {
18026 if ( !column_exists( 'categories', 'change_password' ) ) {
18027 $dbh->do(q{
18028 ALTER TABLE categories
18029 ADD COLUMN change_password TINYINT(1) NULL DEFAULT NULL
18030 AFTER reset_password
18034 SetVersion( $DBversion );
18035 print "Upgrade to $DBversion done (Bug 10796 - Patron password change by category)\n";
18038 $DBversion = '18.12.00.046';
18039 if( CheckVersion( $DBversion ) ) {
18040 $dbh->do( "UPDATE systempreferences SET value = 'default' WHERE variable = 'XSLTResultsDisplay' AND value = ''" );
18041 SetVersion( $DBversion );
18042 print "Upgrade to $DBversion done (Bug 22695 - Remove non-XSLT search results view from the staff client)\n";
18045 $DBversion = '18.12.00.047';
18046 if( CheckVersion( $DBversion ) ) {
18047 $dbh->do(q|
18048 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');
18050 $dbh->do(q|
18051 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');
18053 SetVersion( $DBversion );
18054 print "Upgrade to $DBversion done (Bug 14557: Add Libris spellchecking system preferences)\n";
18057 $DBversion = '18.12.00.048';
18058 if( CheckVersion( $DBversion ) ) {
18059 $dbh->do( q{
18060 INSERT IGNORE INTO systempreferences (variable,value,explanation,options,type)
18061 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');
18063 $dbh->do("UPDATE systempreferences SET value='exact_time' WHERE variable='NoRenewalBeforePrecision' AND value IS NULL;" );
18064 SetVersion( $DBversion );
18065 print "Upgrade to $DBversion done (Bug 22044 - Set a default value for NoRenewalBeforePrecision)\n";
18068 $DBversion = '18.12.00.049';
18069 if( CheckVersion( $DBversion ) ) {
18071 $dbh->do(q{
18072 ALTER TABLE borrowers
18073 ADD COLUMN flgAnonymized tinyint DEFAULT 0
18074 AFTER overdrive_auth_token
18075 }) if !column_exists('borrowers', 'flgAnonymized');
18077 $dbh->do(q{
18078 ALTER TABLE deletedborrowers
18079 ADD COLUMN flgAnonymized tinyint DEFAULT 0
18080 AFTER overdrive_auth_token
18081 }) if !column_exists('deletedborrowers', 'flgAnonymized');
18083 SetVersion( $DBversion );
18084 print "Upgrade to $DBversion done (Bug 21336 - Add field flgAnonymized)\n";
18087 $DBversion = '18.12.00.050';
18088 if( CheckVersion( $DBversion ) ) {
18089 $dbh->do( q|
18090 INSERT IGNORE INTO systempreferences ( `variable`, `value`, `options`, `explanation`, `type` )
18091 VALUES
18092 ('UnsubscribeReflectionDelay','',NULL,'Delay for locking unsubscribers', 'Integer'),
18093 ('PatronAnonymizeDelay','',NULL,'Delay for anonymizing patrons', 'Integer'),
18094 ('PatronRemovalDelay','',NULL,'Delay for removing anonymized patrons', 'Integer')
18096 SetVersion( $DBversion );
18097 print "Upgrade to $DBversion done (Bug 21336 - Add preferences)\n";
18100 $DBversion = '18.12.00.051';
18101 if( CheckVersion( $DBversion ) ) {
18102 my $failed_attempts = C4::Context->preference('FailedLoginAttempts');
18103 $dbh->do( "UPDATE borrowers SET login_attempts = ? WHERE login_attempts > ?", undef, $failed_attempts, $failed_attempts ) if $failed_attempts && $failed_attempts > 0;
18104 SetVersion( $DBversion );
18105 print "Upgrade to $DBversion done (Bug 21336 - Reset login_attempts)\n";
18108 $DBversion = '18.12.00.052';
18109 if( CheckVersion( $DBversion ) ) {
18110 $dbh->do(q{
18111 INSERT IGNORE INTO systempreferences ( `variable`, `value`, `options`, `explanation`, `type` ) VALUES
18112 ('OpacMoreSearches', '', NULL, 'Add additional elements to the OPAC more searches bar', 'Textarea')
18113 } );
18115 SetVersion( $DBversion );
18116 print "Upgrade to $DBversion done (Bug 22311 - Add a SysPref to allow adding content to the #moresearches div in the opac)\n";
18119 $DBversion = '18.12.00.053';
18120 if( CheckVersion( $DBversion ) ) {
18121 $dbh->do(q{
18122 INSERT IGNORE INTO `systempreferences` (`variable`, `value`, `options`, `explanation`, `type`) VALUES
18123 ('AutoReturnCheckedOutItems', '0', '', 'If disabled, librarian must confirm return of checked out item when checking out to another.', 'YesNo');
18126 SetVersion( $DBversion );
18127 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";
18130 $DBversion = '18.12.00.054';
18131 if( CheckVersion( $DBversion ) ) {
18132 $dbh->do(q{
18133 INSERT IGNORE permissions (module_bit, code, description)
18134 VALUES
18135 (9,'advanced_editor','Use the advanced cataloging editor')
18137 if( C4::Context->preference('EnableAdvancedCatalogingEditor') ){
18138 $dbh->do(q{
18139 INSERT INTO user_permissions (borrowernumber, module_bit, code)
18140 SELECT borrowernumber, 9, 'advanced_editor' FROM borrowers WHERE borrowernumber IN (SELECT DISTINCT borrowernumber FROM user_permissions WHERE code = 'edit_catalogue');
18143 SetVersion( $DBversion );
18144 print "Upgrade to $DBversion done (Bug 20128: Add permission for Advanced Cataloging Editor)\n";
18147 $DBversion = '18.12.00.055';
18148 if ( CheckVersion($DBversion) ) {
18150 $dbh->do(qq{
18151 UPDATE
18152 `account_offset_types`
18154 type = 'OVERDUE'
18155 WHERE
18156 type = 'Fine';
18159 $dbh->do(qq{
18160 UPDATE
18161 `account_offset_types`
18163 type = 'OVERDUE_INCREASE'
18164 WHERE
18165 type = 'fine_increase';
18168 $dbh->do(qq{
18169 UPDATE
18170 `account_offset_types`
18172 type = 'OVERDUE_DECREASE'
18173 WHERE
18174 type = 'fine_decrease';
18177 if ( column_exists( 'accountlines', 'accounttype' ) ) {
18178 $dbh->do(
18180 ALTER TABLE `accountlines`
18181 CHANGE COLUMN `accounttype`
18182 `accounttype` varchar(16) DEFAULT NULL;
18187 $dbh->do(qq{
18188 UPDATE
18189 accountlines
18191 accounttype = 'OVERDUE',
18192 status = 'UNRETURNED'
18193 WHERE
18194 accounttype = 'FU';
18197 $dbh->do(qq{
18198 UPDATE
18199 accountlines
18201 accounttype = 'OVERDUE',
18202 status = 'FORGIVEN'
18203 WHERE
18204 accounttype = 'FFOR';
18207 $dbh->do(qq{
18208 UPDATE
18209 accountlines
18211 accounttype = 'OVERDUE',
18212 status = 'RETURNED'
18213 WHERE
18214 accounttype = 'F';
18216 SetVersion($DBversion);
18217 print "Upgrade to $DBversion done (Bug 22521 - Update accountlines.accounttype to varchar(16), and map new statuses)\n";
18220 $DBversion = '18.12.00.056';
18221 if( CheckVersion( $DBversion ) ) {
18222 $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'");
18223 SetVersion( $DBversion );
18224 print "Upgrade to $DBversion done (Bug 8701 - Update OpacHiddenItems system preference description)\n";
18227 $DBversion = '18.12.00.057';
18228 if( CheckVersion( $DBversion ) ) {
18229 if( column_exists('statistics', 'associatedborrower') ) {
18230 $dbh->do(q{ ALTER TABLE statistics DROP COLUMN associatedborrower });
18232 if( column_exists('statistics', 'usercode') ) {
18233 $dbh->do(q{ ALTER TABLE statistics DROP COLUMN usercode });
18236 SetVersion($DBversion);
18237 print "Upgrade to $DBversion done (Bug 13795 - Delete unused fields from statistics table)\n";
18240 $DBversion = '18.12.00.058';
18241 if( CheckVersion( $DBversion ) ) {
18242 my $opaclang = C4::Context->preference("opaclanguages");
18243 my @langs;
18244 push @langs, split ( '\,', $opaclang );
18245 # Get any existing value from the OpacNavRight system preference
18246 my ($OpacNavRight) = $dbh->selectrow_array( q|
18247 SELECT value FROM systempreferences WHERE variable='OpacNavRight';
18249 if( $OpacNavRight ){
18250 # If there is a value in the OpacNavRight preference, insert it into opac_news
18251 $dbh->do("INSERT INTO opac_news (branchcode, lang, title, content ) VALUES (NULL, ?, '', ?)", undef, "OpacNavRight_$langs[0]", $OpacNavRight);
18253 # Remove the OpacNavRight system preference
18254 $dbh->do("DELETE FROM systempreferences WHERE variable='OpacNavRight'");
18255 SetVersion ($DBversion);
18256 print "Upgrade to $DBversion done (Bug 22318: Move contents of OpacNavRight preference to Koha news system)\n";
18259 $DBversion = '18.12.00.059';
18260 if( CheckVersion( $DBversion ) ) {
18261 if( column_exists( 'import_records', 'z3950random' ) ) {
18262 $dbh->do( "ALTER TABLE import_records DROP COLUMN z3950random" );
18265 # Always end with this (adjust the bug info)
18266 SetVersion( $DBversion );
18267 print "Upgrade to $DBversion done (Bug 22532 - Remove import_records z3950random column)\n";
18270 $DBversion = '18.12.00.060';
18271 if ( CheckVersion($DBversion) ) {
18273 my $rows = $dbh->do(
18275 UPDATE `accountlines`
18277 `accounttype` = 'L',
18278 `status` = 'REPLACED'
18279 WHERE
18280 `accounttype` = 'Rep'
18284 SetVersion($DBversion);
18285 printf "Upgrade to $DBversion done (Bug 22564 - Fix accounttype 'Rep' - %d updated)\n", $rows;
18288 $DBversion = '18.12.00.061';
18289 if( CheckVersion( $DBversion ) ) {
18291 if ( column_exists( 'borrowers', 'flgAnonymized' ) ) {
18292 $dbh->do(q{
18293 UPDATE borrowers SET flgAnonymized = 0 WHERE flgAnonymized IS NULL
18295 $dbh->do(q{
18296 ALTER TABLE borrowers
18297 CHANGE `flgAnonymized` `anonymized` TINYINT(1) NOT NULL DEFAULT 0
18301 if ( column_exists( 'deletedborrowers', 'flgAnonymized' ) ) {
18302 $dbh->do(q{
18303 UPDATE deletedborrowers SET flgAnonymized = 0 WHERE flgAnonymized IS NULL
18305 $dbh->do(q{
18306 ALTER TABLE deletedborrowers
18307 CHANGE `flgAnonymized` `anonymized` TINYINT(1) NOT NULL DEFAULT 0
18311 SetVersion( $DBversion );
18312 print "Upgrade to $DBversion done (Bug 21336 - (follow-up) Rename flgAnonymized column)\n";
18315 $DBversion = '18.12.00.062';
18316 if( CheckVersion( $DBversion ) ) {
18317 $dbh->do( q|
18318 UPDATE search_marc_map SET marc_field='007_/0'
18319 WHERE marc_type IN ('marc21', 'normarc') AND marc_field='007_/1' AND id IN
18320 (SELECT search_marc_map_id FROM search_marc_to_field WHERE search_field_id IN
18321 (SELECT id FROM search_field WHERE label='ff7-00')
18325 $dbh->do( q|
18326 UPDATE search_marc_map SET marc_field='007_/1'
18327 WHERE marc_type IN ('marc21', 'normarc') AND marc_field='007_/2' AND id IN
18328 (SELECT search_marc_map_id FROM search_marc_to_field WHERE search_field_id IN
18329 (SELECT id FROM search_field WHERE label='ff7-01')
18333 $dbh->do( q|
18334 UPDATE search_marc_map SET marc_field='007_/2'
18335 WHERE marc_type IN ('marc21', 'normarc') AND marc_field='007_/3' AND id IN
18336 (SELECT search_marc_map_id FROM search_marc_to_field WHERE search_field_id IN
18337 (SELECT id FROM search_field WHERE label='ff7-02')
18341 # N.B. ff7-01-02 really is 00-01!
18342 $dbh->do( q|
18343 UPDATE search_marc_map SET marc_field='007_/0-1'
18344 WHERE marc_type IN ('marc21', 'normarc') AND marc_field='007_/1-2' AND id IN
18345 (SELECT search_marc_map_id FROM search_marc_to_field WHERE search_field_id IN
18346 (SELECT id FROM search_field WHERE label='ff7-01-02')
18350 $dbh->do( q|
18351 UPDATE search_marc_map SET marc_field='008_/0-5'
18352 WHERE marc_type IN ('marc21', 'normarc') AND marc_field='008_/1-5' AND id IN
18353 (SELECT search_marc_map_id FROM search_marc_to_field WHERE search_field_id IN
18354 (SELECT id FROM search_field WHERE label='date-entered-on-file')
18358 $dbh->do( q|
18359 UPDATE search_marc_map SET marc_field='leader_/0-4'
18360 WHERE marc_type IN ('marc21', 'normarc') AND marc_field='leader_/1-5' AND id IN
18361 (SELECT search_marc_map_id FROM search_marc_to_field WHERE search_field_id IN
18362 (SELECT id FROM search_field WHERE label='llength')
18366 # Always end with this (adjust the bug info)
18367 SetVersion( $DBversion );
18368 print "Upgrade to $DBversion done (Bug 22339 - Fix search field mappings of MARC fixed fields)\n";
18371 $DBversion = '18.12.00.063';
18372 if ( CheckVersion($DBversion) ) {
18374 my $types_map = {
18375 'Writeoff' => 'W',
18376 'Payment' => 'Pay',
18377 'Lost Item' => 'CR',
18378 'Manual Credit' => 'C',
18379 'Forgiven' => 'FOR'
18382 my $sth = $dbh->prepare( "SELECT accountlines_id FROM accountlines WHERE accounttype = 'VOID'" );
18383 my $sth2 = $dbh->prepare( "SELECT type FROM account_offsets WHERE credit_id = ? ORDER BY created_on LIMIT 1" );
18384 my $sth3 = $dbh->prepare( "UPDATE accountlines SET accounttype = ?, status = 'VOID' WHERE accountlines_id = ?" );
18385 $sth->execute();
18386 while (my $row = $sth->fetchrow_hashref) {
18387 $sth2->execute($row->{accountlines_id});
18388 my $result = $sth2->fetchrow_hashref;
18389 my $type = $types_map->{$result->{'type'}} // 'Pay';
18390 $sth3->execute($type,$row->{accountlines_id});
18393 SetVersion($DBversion);
18394 print "Upgrade to $DBversion done (Bug 22511 - Update existing VOID accountlines)\n";
18397 $DBversion = '18.12.00.064';
18398 if( CheckVersion( $DBversion ) ) {
18399 $dbh->do(q{
18400 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');
18402 $dbh->do(q{
18403 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%';
18405 $dbh->do(q{
18406 DELETE FROM systempreferences WHERE variable='InProcessingToShelvingCart';
18408 $dbh->do(q{
18409 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%';
18411 $dbh->do(q{
18412 DELETE FROM systempreferences WHERE variable='ReturnToShelvingCart';
18414 SetVersion( $DBversion );
18415 print "Upgrade to $DBversion done (Bug 14576: Add UpdateItemLocationOnCheckin syspref)\n";
18418 $DBversion = '18.12.00.065';
18419 if( CheckVersion( $DBversion ) ) {
18420 $dbh->do( q{
18421 INSERT IGNORE INTO systempreferences ( `variable`, `value`, `options`, `explanation`, `type` )
18422 SELECT 'IndependentBranchesTransfers', value, NULL, 'Allow non-superlibrarians to transfer items between libraries','YesNo'
18423 FROM systempreferences WHERE variable = 'IndependentBranches'
18425 SetVersion( $DBversion );
18426 print "Upgrade to $DBversion done (Bug 10300 - Allow transferring of items to be have separate IndependentBranches syspref)\n";
18429 $DBversion = '18.12.00.066';
18430 if ( CheckVersion($DBversion) ) {
18431 $dbh->do(q{
18432 INSERT IGNORE INTO `systempreferences` (`variable`, `value`, `explanation`, `options`, `type`) VALUES
18433 ('OpenURLResolverURL', '', 'URL of OpenURL Resolver', NULL, 'Free'),
18434 ('OpenURLText', '', 'Text of OpenURL links (or image title if OpenURLImageLocation is defined)', NULL, 'Free'),
18435 ('OpenURLImageLocation', '', 'Location of image for OpenURL links', NULL, 'Free'),
18436 ('OPACShowOpenURL', '', 'Enable display of OpenURL links in OPAC search results and detail page', NULL, 'YesNo'),
18437 ('OPACOpenURLItemTypes', '', 'Show the OpenURL link only for these item types', NULL, 'Free');
18440 SetVersion($DBversion);
18441 print
18442 "Upgrade to $DBversion done (Bug 8995 - Add new preferences for OpenURLResolvers)\n";
18445 $DBversion = '18.12.00.067';
18446 if ( CheckVersion($DBversion) ) {
18447 $dbh->do(q{
18448 INSERT IGNORE INTO systempreferences (variable,value,options,explanation,type)
18449 VALUES ('SendAllEmailsTo','',NULL,'All emails will be redirected to this email if it is not empty','free');
18451 SetVersion($DBversion);
18452 print
18453 "Upgrade to $DBversion done (Bug 8000 - Add new preferences for SendAllEmailsTo)\n";
18456 $DBversion = '18.12.00.068';
18457 if ( CheckVersion($DBversion) ) {
18458 $dbh->do(q{
18459 INSERT IGNORE INTO systempreferences (variable,value,explanation,options,type) VALUES
18460 ('AllowRenewalOnHoldOverride','0','','If on, allow items on hold to be renewed with a specified due date','YesNo');
18462 SetVersion($DBversion);
18463 print "Upgrade to $DBversion done (Bug 7088: Cannot renew items on hold even with override)\n";
18466 $DBversion = '18.12.00.069';
18467 if( CheckVersion( $DBversion ) ) {
18469 $dbh->do(q{
18470 INSERT INTO plugin_data
18471 (plugin_class, plugin_key, plugin_value)
18472 SELECT
18473 plugin_class,
18474 '__ENABLED__',
18476 FROM plugin_data
18477 WHERE plugin_key='__INSTALLED_VERSION__'
18480 # Always end with this (adjust the bug info)
18481 SetVersion( $DBversion );
18482 print "Upgrade to $DBversion done (Bug 22053 - enable all plugins)\n";
18485 $DBversion = '18.12.00.070';
18486 if ( CheckVersion($DBversion) ) {
18487 $dbh->do(q{
18488 INSERT IGNORE INTO systempreferences
18489 ( `variable`, `value`, `options`, `explanation`, `type` )
18490 VALUES
18491 ('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');
18493 SetVersion($DBversion);
18494 print "Upgrade to $DBversion done (Bug 14407 - Limit web-based self-checkout to specific IP addresses)\n";
18497 $DBversion = '18.12.00.071';
18498 if( CheckVersion( $DBversion ) ) {
18499 $dbh->do(q{
18500 INSERT IGNORE INTO `letter` (`module`, `code`, `branchcode`, `name`, `is_html`, `title`, `content`, `message_transport_type`, `lang`) VALUES
18501 ('circulation', 'ACCOUNT_CREDIT', '', 'Account payment', 0, 'Account payment', '<table>
18502 [% IF ( LibraryName ) %]
18503 <tr>
18504 <th colspan="4" class="centerednames">
18505 <h3>[% LibraryName | html %]</h3>
18506 </th>
18507 </tr>
18508 [% END %]
18509 <tr>
18510 <th colspan="4" class="centerednames">
18511 <h2><u>Fee receipt</u></h2>
18512 </th>
18513 </tr>
18514 <tr>
18515 <th colspan="4" class="centerednames">
18516 <h2>[% Branches.GetName( patron.branchcode ) | html %]</h2>
18517 </th>
18518 </tr>
18519 <tr>
18520 <th colspan="4">
18521 Received with thanks from [% patron.firstname | html %] [% patron.surname | html %] <br />
18522 Card number: [% patron.cardnumber | html %]<br />
18523 </th>
18524 </tr>
18525 <tr>
18526 <th>Date</th>
18527 <th>Description of charges</th>
18528 <th>Note</th>
18529 <th>Amount</th>
18530 </tr>
18532 [% FOREACH account IN accounts %]
18533 <tr class="highlight">
18534 <td>[% account.date | $KohaDates %]</td>
18535 <td>
18536 [% PROCESS account_type_description account=account %]
18537 [%- IF account.description %], [% account.description | html %][% END %]
18538 </td>
18539 <td>[% account.note | html %]</td>
18540 [% IF ( account.amountcredit ) %]<td class="credit">[% ELSE %]<td class="debit">[% END %][% account.amount | $Price %]</td>
18541 </tr>
18543 [% END %]
18544 <tfoot>
18545 <tr>
18546 <td colspan="3">Total outstanding dues as on date: </td>
18547 [% IF ( totalcredit ) %]<td class="credit">[% ELSE %]<td class="debit">[% END %][% total | $Price %]</td>
18548 </tr>
18549 </tfoot>
18550 </table>', 'print', 'default');
18552 SetVersion( $DBversion );
18553 print "Upgrade to $DBversion done (Bug 22809 - Move 'ACCOUNT_CREDIT' from template to a slip)\n";
18556 $DBversion = '18.12.00.072';
18557 if( CheckVersion( $DBversion ) ) {
18558 $dbh->do(q{
18559 INSERT IGNORE INTO `letter` (`module`, `code`, `branchcode`, `name`, `is_html`, `title`, `content`, `message_transport_type`, `lang`) VALUES
18560 ('circulation', 'ACCOUNT_DEBIT', '', 'Account fee', 0, 'Account fee', '<table>
18561 [% IF ( LibraryName ) %]
18562 <tr>
18563 <th colspan="5" class="centerednames">
18564 <h3>[% LibraryName | html %]</h3>
18565 </th>
18566 </tr>
18567 [% END %]
18569 <tr>
18570 <th colspan="5" class="centerednames">
18571 <h2><u>INVOICE</u></h2>
18572 </th>
18573 </tr>
18574 <tr>
18575 <th colspan="5" class="centerednames">
18576 <h2>[% Branches.GetName( patron.branchcode ) | html %]</h2>
18577 </th>
18578 </tr>
18579 <tr>
18580 <th colspan="5" >
18581 Bill to: [% patron.firstname | html %] [% patron.surname | html %] <br />
18582 Card number: [% patron.cardnumber | html %]<br />
18583 </th>
18584 </tr>
18585 <tr>
18586 <th>Date</th>
18587 <th>Description of charges</th>
18588 <th>Note</th>
18589 <th style="text-align:right;">Amount</th>
18590 <th style="text-align:right;">Amount outstanding</th>
18591 </tr>
18593 [% FOREACH account IN accounts %]
18594 <tr class="highlight">
18595 <td>[% account.date | $KohaDates%]</td>
18596 <td>
18597 [% PROCESS account_type_description account=account %]
18598 [%- IF account.description %], [% account.description | html %][% END %]
18599 </td>
18600 <td>[% account.note | html %]</td>
18601 [% IF ( account.amountcredit ) %]<td class="credit">[% ELSE %]<td class="debit">[% END %][% account.amount | $Price %]</td>
18602 [% IF ( account.amountoutstandingcredit ) %]<td class="credit">[% ELSE %]<td class="debit">[% END %][% account.amountoutstanding | $Price %]</td>
18603 </tr>
18604 [% END %]
18606 <tfoot>
18607 <tr>
18608 <td colspan="4">Total outstanding dues as on date: </td>
18609 [% IF ( totalcredit ) %]<td class="credit">[% ELSE %]<td class="debit">[% END %][% total | $Price %]</td>
18610 </tr>
18611 </tfoot>
18612 </table>', 'print', 'default');
18614 SetVersion( $DBversion );
18615 print "Upgrade to $DBversion done (Bug 22809 - Move 'INVOICE' from template to a slip)\n";
18618 $DBversion = '18.12.00.073';
18619 if( CheckVersion( $DBversion ) ) {
18620 $dbh->do( q{
18621 INSERT IGNORE INTO systempreferences (variable,value,options,explanation,type) VALUES
18622 ('EmailPurchaseSuggestions','0','0|EmailAddressForSuggestions|BranchEmailAddress|KohaAdminEmailAddress','Choose email address that will be sent new purchase suggestions','Choice'),
18623 ('EmailAddressForSuggestions','','','If you choose EmailAddressForSuggestions you should enter a valid email address','free')
18626 $dbh->do( q{
18627 INSERT IGNORE INTO `letter` (module, code, name, title, content, is_html, message_transport_type) VALUES
18628 ('suggestions','NEW_SUGGESTION','New suggestion','New suggestion','<h3>Suggestion pending approval</h3>
18629 <p><h4>Suggested by</h4>
18630 <ul>
18631 <li><<borrowers.firstname>> <<borrowers.surname>></li>
18632 <li><<borrowers.cardnumber>></li>
18633 <li><<borrowers.phone>></li>
18634 <li><<borrowers.email>></li>
18635 </ul>
18636 </p>
18637 <p><h4>Title suggested</h4>
18638 <ul>
18639 <li><b>Library:</b> <<branches.branchname>></li>
18640 <li><b>Title:</b> <<suggestions.title>></li>
18641 <li><b>Author:</b> <<suggestions.author>></li>
18642 <li><b>Copyright date:</b> <<suggestions.copyrightdate>></li>
18643 <li><b>Standard number (ISBN, ISSN or other):</b> <<suggestions.isbn>></li>
18644 <li><b>Publisher:</b> <<suggestions.publishercode>></li>
18645 <li><b>Collection title:</b> <<suggestions.collectiontitle>></li>
18646 <li><b>Publication place:</b> <<suggestions.place>></li>
18647 <li><b>Quantity:</b> <<suggestions.quantity>></li>
18648 <li><b>Item type:</b> <<suggestions.itemtype>></li>
18649 <li><b>Reason for suggestion:</b> <<suggestions.patronreason>></li>
18650 <li><b>Notes:</b> <<suggestions.note>></li>
18651 </ul>
18652 </p>',1, 'email')
18655 SetVersion( $DBversion );
18656 print "Upgrade to $DBversion done (Bug 5770 - Email librarian when purchase suggestion made)\n";
18659 $DBversion = '18.12.00.074';
18660 if( CheckVersion( $DBversion ) ) {
18661 unless ( TableExists( 'keyboard_shortcuts' ) ) {
18662 $dbh->do(q|
18663 CREATE TABLE keyboard_shortcuts (
18664 shortcut_name varchar(80) NOT NULL,
18665 shortcut_keys varchar(80) NOT NULL,
18666 PRIMARY KEY (shortcut_name)
18667 ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;|
18670 $dbh->do(q|
18671 INSERT IGNORE INTO keyboard_shortcuts (shortcut_name, shortcut_keys) VALUES
18672 ("insert_copyright","Alt-C"),
18673 ("insert_copyright_sound","Alt-P"),
18674 ("insert_delimiter","Ctrl-D"),
18675 ("subfield_help","Ctrl-H"),
18676 ("link_authorities","Shift-Ctrl-L"),
18677 ("delete_field","Ctrl-X"),
18678 ("delete_subfield","Shift-Ctrl-X"),
18679 ("new_line","Enter"),
18680 ("line_break","Shift-Enter"),
18681 ("next_position","Tab"),
18682 ("prev_position","Shift-Tab")
18685 $dbh->do(q|
18686 INSERT IGNORE permissions (module_bit, code, description)
18687 VALUES
18688 (3,'manage_keyboard_shortcuts','Manage keyboard shortcuts for advanced cataloging editor')
18691 SetVersion( $DBversion );
18692 print "Upgrade to $DBversion done (Bug 21411 - Add keyboard_shortcuts table)\n";
18695 $DBversion = '18.12.00.075';
18696 if( CheckVersion( $DBversion ) ) {
18697 # you can use $dbh here like:
18698 unless ( foreign_key_exists( 'tmp_holdsqueue', 'tmp_holdsqueue_ibfk_1' ) ) {
18699 $dbh->do(q{
18700 DELETE t FROM tmp_holdsqueue t
18701 LEFT JOIN items i ON t.itemnumber=i.itemnumber
18702 WHERE i.itemnumber IS NULL
18704 $dbh->do(q{
18705 ALTER TABLE tmp_holdsqueue
18706 ADD CONSTRAINT `tmp_holdsqueue_ibfk_1` FOREIGN KEY (`itemnumber`)
18707 REFERENCES `items` (`itemnumber`) ON DELETE CASCADE ON UPDATE CASCADE
18710 SetVersion( $DBversion );
18711 print "Upgrade to $DBversion done (Bug 22899 - Add items constraint to tmp_holdsqueue)\n";
18714 $DBversion = '19.05.00.000';
18715 if( CheckVersion( $DBversion ) ) {
18716 SetVersion( $DBversion );
18717 print "Upgrade to $DBversion done (19.05.00 release)\n";
18720 $DBversion = '19.06.00.000';
18721 if( CheckVersion( $DBversion ) ) {
18722 SetVersion( $DBversion );
18723 print "Upgrade to $DBversion done (Wingardium Leviosa!)\n";
18726 $DBversion = '19.06.00.001';
18727 if( CheckVersion( $DBversion ) ) {
18728 $dbh->do( q{
18729 UPDATE systempreferences
18730 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.'
18731 WHERE variable = 'UpdateItemLocationOnCheckin'
18733 SetVersion( $DBversion );
18734 print "Upgrade to $DBversion done (Bug 22960: Fix typo in syspref description)\n";
18737 $DBversion = '19.06.00.002';
18738 if ( CheckVersion($DBversion) ) {
18740 $dbh->do(q{ALTER TABLE subscriptionhistory CHANGE opacnote opacnote LONGTEXT NULL});
18741 $dbh->do(q{ALTER TABLE subscriptionhistory CHANGE librariannote librariannote LONGTEXT NULL});
18743 $dbh->do(q{UPDATE subscriptionhistory SET opacnote = NULL WHERE opacnote = ''});
18744 $dbh->do(q{UPDATE subscriptionhistory SET librariannote = NULL WHERE librariannote = ''});
18746 SetVersion ($DBversion);
18747 print "Upgrade to $DBversion done (Bug 10215: Increase the size of opacnote and librariannote for table subscriptionhistory)\n";
18750 $DBversion = '19.06.00.003';
18751 if( CheckVersion( $DBversion ) ) {
18752 $dbh->do(q{UPDATE systempreferences SET value = REPLACE( value, ' ', '|' ) WHERE variable = 'UniqueItemFields'; });
18754 SetVersion( $DBversion );
18755 print "Upgrade to $DBversion done (Bug 22867: UniqueItemFields preference value should be pipe-delimited)\n";
18758 $DBversion = '19.06.00.004';
18759 if( CheckVersion( $DBversion ) ) {
18760 $dbh->do( 'UPDATE language_descriptions SET description = "Griechisch (Modern 1453-)"
18761 WHERE subtag = "el" and type = "language" and lang ="de"' );
18762 SetVersion( $DBversion );
18763 print "Upgrade to $DBversion done (Bug 22770: Fix typo in language description for el in German)\n";
18766 $DBversion = '19.06.00.005';
18767 if( CheckVersion( $DBversion ) ) {
18768 unless ( column_exists( 'reserves', 'item_level_hold' ) ) {
18769 $dbh->do( "ALTER TABLE reserves ADD COLUMN item_level_hold BOOLEAN NOT NULL DEFAULT 0 AFTER itemtype" );
18771 unless ( column_exists( 'old_reserves', 'item_level_hold' ) ) {
18772 $dbh->do( "ALTER TABLE old_reserves ADD COLUMN item_level_hold BOOLEAN NOT NULL DEFAULT 0 AFTER itemtype" );
18775 SetVersion( $DBversion );
18776 print "Upgrade to $DBversion done (Bug 9834: Add the reserves.item_level_hold column)\n";
18779 $DBversion = '19.06.00.006';
18780 if( CheckVersion( $DBversion ) ) {
18782 unless ( TableExists('plugin_methods') ) {
18783 $dbh->do(q{
18784 CREATE TABLE plugin_methods (
18785 plugin_class varchar(255) NOT NULL,
18786 plugin_method varchar(255) NOT NULL,
18787 PRIMARY KEY ( `plugin_class` (191), `plugin_method` (191) )
18788 ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
18792 require Koha::Plugins;
18793 Koha::Plugins->new({ enable_plugins => 1 })->InstallPlugins;
18795 SetVersion( $DBversion );
18796 print "Upgrade to $DBversion done (Bug 21073: Improve plugin performance)\n";
18799 $DBversion = '19.06.00.007';
18800 if( CheckVersion( $DBversion ) ) {
18801 $dbh->do( "DELETE FROM systempreferences WHERE variable = 'RotationPreventTransfers'" );
18802 SetVersion( $DBversion );
18803 print "Upgrade to $DBversion done (Bug 22653: Remove unimplemented RotationPreventTransfers system preference)\n";
18806 $DBversion = '19.06.00.008';
18807 if( CheckVersion( $DBversion ) ) {
18808 $dbh->do( "UPDATE userflags SET flagdesc = 'Allow staff members to modify permissions and passwords for other staff members' WHERE flag = 'staffaccess'" );
18809 SetVersion( $DBversion );
18810 print "Upgrade to $DBversion done (Bug 23109: Improve description of staffaccess permission)\n";
18813 $DBversion = '19.06.00.009';
18814 if( CheckVersion( $DBversion ) ) {
18815 $dbh->do(q{
18816 INSERT IGNORE INTO keyboard_shortcuts (shortcut_name, shortcut_keys)
18817 VALUES ("toggle_keyboard", "Shift-Ctrl-K")
18820 SetVersion( $DBversion );
18821 print "Upgrade to $DBversion done (Bug 17178: add shortcut to keyboard_shortcuts)\n";
18824 $DBversion = '19.06.00.010';
18825 if( CheckVersion( $DBversion ) ) {
18827 if ( TableExists('default_circ_rules') ) {
18828 if ( column_exists( 'default_circ_rules', 'holdallowed' ) ) {
18829 $dbh->do("
18830 INSERT IGNORE INTO circulation_rules ( categorycode, branchcode, itemtype, rule_name, rule_value )
18831 SELECT NULL, NULL, NULL, 'holdallowed', holdallowed
18832 FROM default_circ_rules
18834 $dbh->do("
18835 INSERT IGNORE INTO circulation_rules ( categorycode, branchcode, itemtype, rule_name, rule_value )
18836 SELECT NULL, NULL, NULL, 'hold_fulfillment_policy', hold_fulfillment_policy
18837 FROM default_circ_rules
18839 $dbh->do("
18840 INSERT IGNORE INTO circulation_rules ( categorycode, branchcode, itemtype, rule_name, rule_value )
18841 SELECT NULL, NULL, NULL, 'returnbranch', returnbranch
18842 FROM default_circ_rules
18844 $dbh->do("DROP TABLE default_circ_rules");
18848 if ( TableExists('default_branch_circ_rules') ) {
18849 if ( column_exists( 'default_branch_circ_rules', 'holdallowed' ) ) {
18850 $dbh->do("
18851 INSERT IGNORE INTO circulation_rules ( categorycode, branchcode, itemtype, rule_name, rule_value )
18852 SELECT NULL, branchcode, NULL, 'holdallowed', holdallowed
18853 FROM default_branch_circ_rules
18855 $dbh->do("
18856 INSERT IGNORE INTO circulation_rules ( categorycode, branchcode, itemtype, rule_name, rule_value )
18857 SELECT NULL, branchcode, NULL, 'hold_fulfillment_policy', hold_fulfillment_policy
18858 FROM default_branch_circ_rules
18860 $dbh->do("
18861 INSERT IGNORE INTO circulation_rules ( categorycode, branchcode, itemtype, rule_name, rule_value )
18862 SELECT NULL, branchcode, NULL, 'returnbranch', returnbranch
18863 FROM default_branch_circ_rules
18865 $dbh->do("DROP TABLE default_branch_circ_rules");
18869 if ( TableExists('branch_item_rules') ) {
18870 if ( column_exists( 'branch_item_rules', 'holdallowed' ) ) {
18871 $dbh->do("
18872 INSERT IGNORE INTO circulation_rules ( categorycode, branchcode, itemtype, rule_name, rule_value )
18873 SELECT NULL, branchcode, itemtype, 'holdallowed', holdallowed
18874 FROM branch_item_rules
18876 $dbh->do("
18877 INSERT IGNORE INTO circulation_rules ( categorycode, branchcode, itemtype, rule_name, rule_value )
18878 SELECT NULL, branchcode, itemtype, 'hold_fulfillment_policy', hold_fulfillment_policy
18879 FROM branch_item_rules
18881 $dbh->do("
18882 INSERT IGNORE INTO circulation_rules ( categorycode, branchcode, itemtype, rule_name, rule_value )
18883 SELECT NULL, branchcode, itemtype, 'returnbranch', returnbranch
18884 FROM branch_item_rules
18886 $dbh->do("DROP TABLE branch_item_rules");
18890 if ( TableExists('default_branch_item_rules') ) {
18891 if ( column_exists( 'default_branch_item_rules', 'holdallowed' ) ) {
18892 $dbh->do("
18893 INSERT IGNORE INTO circulation_rules ( categorycode, branchcode, itemtype, rule_name, rule_value )
18894 SELECT NULL, NULL, itemtype, 'holdallowed', holdallowed
18895 FROM default_branch_item_rules
18897 $dbh->do("
18898 INSERT IGNORE INTO circulation_rules ( categorycode, branchcode, itemtype, rule_name, rule_value )
18899 SELECT NULL, NULL, itemtype, 'hold_fulfillment_policy', hold_fulfillment_policy
18900 FROM default_branch_item_rules
18902 $dbh->do("
18903 INSERT IGNORE INTO circulation_rules ( categorycode, branchcode, itemtype, rule_name, rule_value )
18904 SELECT NULL, NULL, itemtype, 'returnbranch', returnbranch
18905 FROM default_branch_item_rules
18907 $dbh->do("DROP TABLE default_branch_item_rules");
18911 SetVersion( $DBversion );
18912 print "Upgrade to $DBversion done (Bug 18928: Move holdallowed, hold_fulfillment_policy, returnbranch to circulation_rules)\n";
18915 $DBversion = '19.06.00.011';
18916 if( CheckVersion( $DBversion ) ) {
18918 if ( TableExists('refund_lost_item_fee_rules') ) {
18919 if ( column_exists( 'refund_lost_item_fee_rules', 'refund' ) ) {
18920 $dbh->do("
18921 INSERT INTO circulation_rules ( categorycode, branchcode, itemtype, rule_name, rule_value )
18922 SELECT NULL, IF(branchcode='*', NULL, branchcode), NULL, 'refund', refund
18923 FROM refund_lost_item_fee_rules
18925 $dbh->do("DROP TABLE refund_lost_item_fee_rules");
18929 SetVersion( $DBversion );
18930 print "Upgrade to $DBversion done (Bug 18930: Move lost item refund rules to circulation_rules table)\n";
18933 $DBversion = '19.06.00.012';
18934 if ( CheckVersion($DBversion) ) {
18936 # Find and correct pathological cases of LR becoming a credit
18937 my $sth = $dbh->prepare( "SELECT accountlines_id, issue_id, borrowernumber, itemnumber, amount, manager_id FROM accountlines WHERE accounttype = 'LR' AND amount < 0" );
18938 $sth->execute();
18939 while ( my $row = $sth->fetchrow_hashref ) {
18940 $dbh->do(
18941 "INSERT INTO accountlines (accounttype, issue_id, borrowernumber, itemnumber, amount, manager_id, interface) VALUES ( ?, ?, ?, ?, ?, ?, ? );",
18944 'CR', $row->{issue_id},
18945 $row->{borrowernumber}, $row->{itemnumber},
18946 $row->{amount}, $row->{manager_id},
18947 'upgrade'
18950 my $credit_id = $dbh->last_insert_id(undef, undef, 'accountlines', undef);
18951 my $amount = $row->{amount} * -1;
18952 $dbh->do("INSERT INTO account_offsets (credit_id, debit_id, type, amount) VALUES (?,?,?,?);",{},($credit_id, $row->{accountlines_id}, 'Lost Item', $amount));
18953 $dbh->do("UPDATE accountlines SET amount = '$amount' WHERE accountlines_id = '$row->{accountlines_id}';");
18956 $dbh->do(qq{
18957 UPDATE
18958 accountlines
18960 accounttype = 'LOST',
18961 status = 'RETURNED'
18962 WHERE
18963 accounttype = 'LR';
18966 # Find and correct pathalogical cases of L having been converted to W
18967 $sth = $dbh->prepare( "SELECT accountlines_id, issue_id, borrowernumber, itemnumber, amount, manager_id FROM accountlines WHERE accounttype = 'W' AND itemnumber IS NOT NULL" );
18968 $sth->execute();
18969 while ( my $row = $sth->fetchrow_hashref ) {
18970 my $amount = $row->{amount} * -1;
18971 $dbh->do(
18972 "INSERT INTO accountlines (accounttype, issue_id, borrowernumber, itemnumber, amount, manager_id, interface) VALUES ( ?, ?, ?, ?, ?, ?, ? );",
18975 'LOST', $row->{issue_id}, $row->{borrowernumber},
18976 $row->{itemnumber}, $amount, $row->{manager_id},
18977 'upgrade'
18980 my $debit_id = $dbh->last_insert_id(undef, undef, 'accountlines', undef);
18981 $dbh->do(
18982 "INSERT INTO account_offsets (credit_id, debit_id, type, amount) VALUES (?,?,?,?);",
18985 $row->{accountlines_id}, $debit_id,
18986 'Lost Item', $amount
18991 $dbh->do(qq{
18992 UPDATE
18993 accountlines
18995 accounttype = 'LOST'
18996 WHERE
18997 accounttype = 'L';
19000 $dbh->do(qq{
19001 UPDATE
19002 accountlines
19004 accounttype = 'LOST_RETURN'
19005 WHERE
19006 accounttype = 'CR';
19009 SetVersion($DBversion);
19010 print "Upgrade to $DBversion done (Bug 22563: Fix accounttypes for 'L', 'LR' and 'CR')\n";
19013 $DBversion = '19.06.00.013';
19014 if ( CheckVersion( $DBversion ) ) {
19015 unless ( column_exists( 'borrower_modifications', 'changed_fields' ) ) {
19016 $dbh->do("ALTER TABLE borrower_modifications ADD changed_fields MEDIUMTEXT AFTER verification_token;");
19018 SetVersion( $DBversion );
19019 print "Upgrade to $DBversion done (Bug 23151: Add borrower_modifications.changed_fields column)\n";
19022 $DBversion = '19.06.00.014';
19023 if ( CheckVersion($DBversion) ) {
19025 $dbh->do(qq{
19026 UPDATE
19027 accountlines
19029 accounttype = 'RENT_DAILY_RENEW'
19030 WHERE
19031 accounttype = 'Rent'
19033 description LIKE 'Renewal of Daily Rental Item%';
19036 $dbh->do(qq{
19037 UPDATE
19038 accountlines
19040 accounttype = 'RENT_DAILY'
19041 WHERE
19042 accounttype = 'Rent'
19044 description LIKE 'Daily rental';
19048 $dbh->do(qq{
19049 UPDATE
19050 accountlines
19052 accounttype = 'RENT_RENEW'
19053 WHERE
19054 accounttype = 'Rent'
19056 description LIKE 'Renewal of Rental Item%';
19059 $dbh->do(qq{
19060 UPDATE
19061 accountlines
19063 accounttype = 'RENT'
19064 WHERE
19065 accounttype = 'Rent';
19068 SetVersion($DBversion);
19069 print "Upgrade to $DBversion done (Bug 11573: Fix accounttypes for 'Rent')\n";
19072 $DBversion = '19.06.00.015';
19073 if( CheckVersion( $DBversion ) ) {
19074 $dbh->do( "UPDATE `search_field` SET `name` = 'date-time-last-modified', `label` = 'date-time-last-modified' WHERE `name` = 'date/time-last-modified'" );
19076 SetVersion( $DBversion );
19077 print "Upgrade to $DBversion done (Bug 22524: Fix date/time-last-modified search with Elasticsearch)\n";
19080 $DBversion = '19.06.00.016';
19081 if( CheckVersion( $DBversion ) ) {
19083 $dbh->do(q|
19084 INSERT IGNORE INTO keyboard_shortcuts (shortcut_name, shortcut_keys) VALUES
19085 ("insert_copyright","Alt-C"),
19086 ("insert_copyright_sound","Alt-P"),
19087 ("insert_delimiter","Ctrl-D"),
19088 ("subfield_help","Ctrl-H"),
19089 ("link_authorities","Shift-Ctrl-L"),
19090 ("delete_field","Ctrl-X"),
19091 ("delete_subfield","Shift-Ctrl-X"),
19092 ("new_line","Enter"),
19093 ("line_break","Shift-Enter"),
19094 ("next_position","Tab"),
19095 ("prev_position","Shift-Tab"),
19096 ("toggle_keyboard", "Shift-Ctrl-K")
19097 ;|);
19099 SetVersion( $DBversion );
19100 print "Upgrade to $DBversion done (Bug 23396: Fix missing keyboard_shortcuts table)\n";
19103 $DBversion = '19.06.00.017';
19104 if ( CheckVersion($DBversion) ) {
19106 $dbh->do(qq{
19107 INSERT INTO
19108 authorised_values (category,authorised_value,lib)
19109 VALUES
19110 ('PAYMENT_TYPE','SIP00','Cash via SIP2'),
19111 ('PAYMENT_TYPE','SIP01','VISA via SIP2'),
19112 ('PAYMENT_TYPE','SIP02','Creditcard via SIP2')
19115 $dbh->do(qq{
19116 UPDATE
19117 accountlines
19119 accounttype = 'Pay',
19120 payment_type = 'SIP00'
19121 WHERE
19122 accounttype = 'Pay00';
19125 $dbh->do(qq{
19126 UPDATE
19127 accountlines
19129 accounttype = 'Pay',
19130 payment_type = 'SIP01'
19131 WHERE
19132 accounttype = 'Pay01';
19135 $dbh->do(qq{
19136 UPDATE
19137 accountlines
19139 accounttype = 'Pay',
19140 payment_type = 'SIP02'
19141 WHERE
19142 accounttype = 'Pay02';
19145 my $sth = $dbh->prepare( q{SELECT * FROM accountlines WHERE accounttype REGEXP '^Pay[[:digit:]]{2}$' } );
19146 $sth->execute();
19147 my $seen = {};
19148 while (my $row = $sth->fetchrow_hashref) {
19149 my $type = $row->{accounttype};
19150 my $sipcode = $type;
19151 $sipcode =~ s/Pay/SIP/g;
19152 unless ($seen->{$sipcode}) {
19153 $dbh->do(qq{
19154 INSERT INTO
19155 authorised_values (category,authorised_value,lib)
19156 VALUES
19157 ('PAYMENT_TYPE',"$sipcode",'Unrecognised SIP2 payment type')
19160 $dbh->do(qq{
19161 UPDATE
19162 accountlines
19164 accounttype = 'Pay',
19165 payment_type = "$sipcode"
19166 WHERE
19167 accounttype = "$type";
19170 $seen->{$sipcode} = 1;
19174 SetVersion($DBversion);
19175 print "Upgrade to $DBversion done (Bug 22610: Fix accounttypes for SIP2 payments)\n";
19178 $DBversion = '19.06.00.018';
19179 if( CheckVersion( $DBversion ) ) {
19180 if( !column_exists( 'biblio', 'subtitle' ) ) {
19181 $dbh->do( "ALTER TABLE biblio ADD COLUMN medium LONGTEXT AFTER title" );
19182 $dbh->do( "ALTER TABLE biblio ADD COLUMN subtitle LONGTEXT AFTER medium" );
19183 $dbh->do( "ALTER TABLE biblio ADD COLUMN part_number LONGTEXT AFTER subtitle" );
19184 $dbh->do( "ALTER TABLE biblio ADD COLUMN part_name LONGTEXT AFTER part_number" );
19186 $dbh->do( "ALTER TABLE deletedbiblio ADD COLUMN medium LONGTEXT AFTER title" );
19187 $dbh->do( "ALTER TABLE deletedbiblio ADD COLUMN subtitle LONGTEXT AFTER medium" );
19188 $dbh->do( "ALTER TABLE deletedbiblio ADD COLUMN part_number LONGTEXT AFTER subtitle" );
19189 $dbh->do( "ALTER TABLE deletedbiblio ADD COLUMN part_name LONGTEXT AFTER part_number" );
19192 $dbh->do( "UPDATE marc_subfield_structure SET kohafield='biblio.subtitle' WHERE kohafield='bibliosubtitle.subtitle'" );
19194 my $marcflavour = C4::Context->preference('marcflavour');
19196 if ( $marcflavour eq 'UNIMARC' ) {
19197 $dbh->do(qq{
19198 UPDATE marc_subfield_structure SET kohafield='biblio.medium'
19199 WHERE (kohafield IS NULL OR kohafield='') AND frameworkcode='' AND tagfield='200' AND tagsubfield='b'
19201 $dbh->do(qq{
19202 UPDATE marc_subfield_structure SET kohafield='biblio.subtitle'
19203 WHERE (kohafield IS NULL OR kohafield='') AND frameworkcode='' AND tagfield='200' AND tagsubfield='e'
19205 $dbh->do(qq{
19206 UPDATE marc_subfield_structure SET kohafield='biblio.part_number'
19207 WHERE (kohafield IS NULL OR kohafield='') AND frameworkcode='' AND tagfield='200' AND tagsubfield='h'
19209 $dbh->do(qq{
19210 UPDATE marc_subfield_structure SET kohafield='biblio.part_name'
19211 WHERE (kohafield IS NULL OR kohafield='') AND frameworkcode='' AND tagfield='200' AND tagsubfield='i'
19213 } else {
19214 $dbh->do(qq{
19215 UPDATE marc_subfield_structure SET kohafield='biblio.medium'
19216 WHERE (kohafield IS NULL OR kohafield='') AND frameworkcode='' AND tagfield='245' AND tagsubfield='h'
19218 $dbh->do(qq{
19219 UPDATE marc_subfield_structure SET kohafield='biblio.subtitle'
19220 WHERE (kohafield IS NULL OR kohafield='') AND frameworkcode='' AND tagfield='245' AND tagsubfield='b'
19222 $dbh->do(qq{
19223 UPDATE marc_subfield_structure SET kohafield='biblio.part_number'
19224 WHERE (kohafield IS NULL OR kohafield='') AND frameworkcode='' AND tagfield='245' AND tagsubfield='n'
19226 $dbh->do(qq{
19227 UPDATE marc_subfield_structure SET kohafield='biblio.part_name'
19228 WHERE (kohafield IS NULL OR kohafield='') AND frameworkcode='' AND tagfield='245' AND tagsubfield='p'
19232 $sth = $dbh->prepare("SELECT * FROM fieldmapping");
19233 $sth->execute;
19234 my @fails_11529;
19235 if ( $sth->rows ) {
19236 while ( my $value = $sth->fetchrow_hashref() ) {
19237 my $framework =
19238 $value->{frameworkcode} eq ""
19239 ? "Default"
19240 : $value->{frameworkcode};
19241 push @fails_11529,
19243 field => $value->{field},
19244 fieldcode => $value->{fieldcode},
19245 subfieldcode => $value->{subfieldcode},
19246 framework => $framework
19251 $dbh->do( "DROP TABLE IF EXISTS fieldmapping" );
19253 $dbh->do( "DELETE FROM user_permissions WHERE code='manage_keywords2koha_mappings'" );
19255 $dbh->do( "DELETE FROM permissions WHERE code='manage_keywords2koha_mappings'" );
19257 # Always end with this (adjust the bug info)
19258 SetVersion( $DBversion );
19259 print "Upgrade to $DBversion done (Bug 11529: Add medium, subtitle and part information to biblio table)\n";
19260 if ( @fails_11529 ) {
19261 print "WARNING: Keyword to MARC Mappings:\n";
19262 for my $fail_11529 ( @fails_11529 ) {
19263 print " keyword: "
19264 . $fail_11529->{field}
19265 . " to field: "
19266 . $fail_11529->{fieldcode} . "\$"
19267 . $fail_11529->{subfieldcode} . " for "
19268 . $fail_11529->{framework}
19269 . " framework\n";
19271 print "The keyword to marc mapping feature is no longer supported. Above find the\n";
19272 print "mappings that had been defined in your system. You will need to remap any\n";
19273 print "desired MARC fields to the Koha field you desire in the Koha to MARC mappings\n";
19274 print "page under Administration\n";
19276 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"
19279 $DBversion = '19.06.00.019';
19280 if ( CheckVersion($DBversion) ) {
19281 $dbh->do(q{
19282 INSERT IGNORE INTO systempreferences (variable, value, options, explanation, type)
19283 VALUES
19285 'FinePaymentAutoPopup',
19286 '0',
19287 NULL,
19288 'If enabled, automatically display a print dialog for a payment receipt when making a payment.',
19289 'YesNo'
19293 SetVersion($DBversion);
19294 print
19295 "Upgrade to $DBversion done (Bug 23228: Add option to automatically display payment receipt for printing after making a payment)\n";
19298 $DBversion = '19.06.00.020';
19299 if( CheckVersion( $DBversion ) ) {
19300 $dbh->do(q|
19301 INSERT IGNORE INTO systempreferences ( `variable`, `value`, `options`, `explanation`, `type` ) VALUES
19302 ('PreserveSerialNotes','1','','When a new "Expected" issue is generated, should it be prefilled with last created issue notes?','YesNo');
19305 SetVersion( $DBversion );
19306 print "Upgrade to $DBversion done (Bug 23416: Add PreserveSerialNotes syspref)\n";
19309 $DBversion = '19.06.00.021';
19310 if( CheckVersion( $DBversion ) ) {
19312 $dbh->do(q|
19313 ALTER TABLE marc_subfield_structure CHANGE COLUMN hidden hidden TINYINT(1) DEFAULT 8 NOT NULL;
19315 # Always end with this (adjust the bug info)
19316 SetVersion( $DBversion );
19317 print "Upgrade to $DBversion done (Bug 23309: Can't add new subfields to bibliographic frameworks in strict mode)\n";
19320 $DBversion = '19.06.00.022';
19321 if ( CheckVersion($DBversion) ) {
19323 unless ( TableExists('borrower_relationships') ) {
19324 $dbh->do(q{
19325 CREATE TABLE `borrower_relationships` (
19326 id INT(11) NOT NULL AUTO_INCREMENT,
19327 guarantor_id INT(11) NOT NULL,
19328 guarantee_id INT(11) NOT NULL,
19329 relationship VARCHAR(100) NOT NULL,
19330 PRIMARY KEY (id),
19331 UNIQUE KEY `guarantor_guarantee_idx` ( `guarantor_id`, `guarantee_id` ),
19332 CONSTRAINT r_guarantor FOREIGN KEY ( guarantor_id ) REFERENCES borrowers ( borrowernumber ) ON UPDATE CASCADE ON DELETE CASCADE,
19333 CONSTRAINT r_guarantee FOREIGN KEY ( guarantee_id ) REFERENCES borrowers ( borrowernumber ) ON UPDATE CASCADE ON DELETE CASCADE
19334 ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
19337 $dbh->do(q{
19338 UPDATE borrowers
19339 LEFT JOIN borrowers guarantor ON ( borrowers.guarantorid = guarantor.borrowernumber )
19340 SET borrowers.guarantorid = NULL WHERE guarantor.borrowernumber IS NULL;
19343 # Bad data handling: guarantorid IS NOT NULL AND relationship IS NULL
19344 $dbh->do(q{
19345 UPDATE borrowers
19346 SET relationship = '_bad_data'
19347 WHERE guarantorid IS NOT NULL AND
19348 relationship IS NULL
19351 $dbh->do(q{
19352 INSERT INTO borrower_relationships ( guarantor_id, guarantee_id, relationship )
19353 SELECT guarantorid, borrowernumber, relationship FROM borrowers WHERE guarantorid IS NOT NULL;
19356 # Clean migrated guarantor data
19357 $dbh->do(q{
19358 UPDATE borrowers
19359 SET contactname=NULL,
19360 contactfirstname=NULL,
19361 relationship=NULL
19362 WHERE guarantorid IS NOT NULL
19366 if ( column_exists( 'borrowers', 'guarantorid' ) ) {
19367 $dbh->do(q{
19368 ALTER TABLE borrowers DROP guarantorid;
19372 if ( column_exists( 'deletedborrowers', 'guarantorid' ) ) {
19373 $dbh->do(q{
19374 ALTER TABLE deletedborrowers DROP guarantorid;
19378 if ( column_exists( 'borrower_modifications', 'guarantorid' ) ) {
19379 $dbh->do(q{
19380 ALTER TABLE borrower_modifications DROP guarantorid;
19384 SetVersion($DBversion);
19385 print "Upgrade to $DBversion done (Bug 14570: Make it possible to add multiple guarantors to a record)\n";
19388 $DBversion = '19.06.00.023';
19389 if( CheckVersion( $DBversion ) ) {
19390 $dbh->do(q{
19391 INSERT IGNORE INTO `systempreferences` (`variable`,`value`,`explanation`,`options`,`type`) VALUES
19392 ('ElasticsearchMARCFormat', 'ISO2709', 'ISO2709|ARRAY', 'Elasticsearch MARC format. ISO2709 format is recommended as it is faster and takes less space, whereas array is searchable.', 'Choice')
19395 SetVersion( $DBversion );
19396 print "Upgrade to $DBversion done (Bug 22258: Add ElasticsearchMARCFormat preference)\n";
19399 $DBversion = '19.06.00.024';
19400 if( CheckVersion( $DBversion ) ) {
19401 $dbh->do(q{ALTER TABLE accountlines CHANGE COLUMN accounttype accounttype varchar(80) default NULL});
19403 SetVersion( $DBversion );
19404 print "Upgrade to $DBversion done (Bug 23539: accountlines.accounttype should match authorised_values.authorised_value in size)\n";
19407 $DBversion = '19.06.00.025';
19408 if( CheckVersion( $DBversion ) ) {
19409 $dbh->do( q/INSERT IGNORE INTO systempreferences (variable,value,options,explanation,type) VALUES (?, ?, ?, ?, ?)/, undef, 'BarcodeSeparators','\s\r\n','','Splitting characters for barcodes','Free' );
19410 SetVersion( $DBversion );
19411 print "Upgrade to $DBversion done (Bug 22996: Add pref BarcodeSeparators)\n";
19414 $DBversion = '19.06.00.026';
19415 if( CheckVersion( $DBversion ) ) {
19417 unless ( column_exists( 'borrowers', 'privacy_guarantor_fines' ) ) {
19418 $dbh->do(q{
19419 ALTER TABLE borrowers
19420 ADD privacy_guarantor_fines TINYINT(1) NOT NULL DEFAULT '0' AFTER privacy;
19424 unless ( column_exists( 'deletedborrowers', 'privacy_guarantor_fines' ) ) {
19425 $dbh->do(q{
19426 ALTER TABLE deletedborrowers
19427 ADD privacy_guarantor_fines TINYINT(1) NOT NULL DEFAULT '0' AFTER privacy;
19431 $dbh->do(q{
19432 INSERT IGNORE INTO systempreferences (variable, value, options, explanation, type )
19433 VALUES (
19434 'AllowStaffToSetFinesVisibilityForGuarantor', '0', NULL,
19435 'If enabled, library staff can set a patron''s fines to be visible to linked patrons from the opac.', 'YesNo'
19436 ), (
19437 'AllowPatronToSetFinesVisibilityForGuarantor', '0', NULL,
19438 'If enabled, the patron can set fines to be visible to his or her guarantor', 'YesNo'
19442 SetVersion( $DBversion );
19443 print "Upgrade to $DBversion done (Bug 20691: Add ability for guarantors to view guarantee's fines in OPAC)\n";
19446 $DBversion = '19.06.00.027';
19447 if( CheckVersion( $DBversion ) ) {
19449 if( !TableExists( 'itemtypes_branches' ) ) {
19450 $dbh->do( "
19451 CREATE TABLE itemtypes_branches( -- association table between authorised_values and branches
19452 itemtype VARCHAR(10) NOT NULL,
19453 branchcode VARCHAR(10) NOT NULL,
19454 FOREIGN KEY (itemtype) REFERENCES itemtypes(itemtype) ON DELETE CASCADE,
19455 FOREIGN KEY (branchcode) REFERENCES branches(branchcode) ON DELETE CASCADE
19456 ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
19460 SetVersion( $DBversion );
19461 print "Upgrade to $DBversion done (Bug 15497: Add itemtypes_branches table)\n";
19464 $DBversion = '19.06.00.028';
19465 if ( CheckVersion($DBversion) ) {
19467 $dbh->do(qq{
19468 UPDATE
19469 accountlines
19471 accounttype = 'ACCOUNT'
19472 WHERE
19473 accounttype = 'A';
19476 SetVersion($DBversion);
19477 print "Upgrade to $DBversion done (Bug 11573: Fix accounttypes for 'A')\n";
19480 $DBversion = '19.06.00.029';
19481 if ( CheckVersion($DBversion) ) {
19483 unless ( TableExists( 'cash_registers' ) ) {
19484 $dbh->do(qq{
19485 CREATE TABLE `cash_registers` (
19486 `id` int(11) NOT NULL auto_increment, -- unique identifier for each account register
19487 `name` varchar(24) NOT NULL, -- the user friendly identifier for each account register
19488 `description` longtext NOT NULL, -- the user friendly description for each account register
19489 `branch` varchar(10) NOT NULL, -- the foreign key the library this account register belongs
19490 `branch_default` tinyint(1) NOT NULL DEFAULT 0, -- boolean flag to denote that this till is the branch default
19491 `starting_float` decimal(28, 6), -- the starting float this account register should be assigned
19492 `archived` tinyint(1) NOT NULL DEFAULT 0, -- boolean flag to denote if this till is archived or not
19493 PRIMARY KEY (`id`),
19494 UNIQUE KEY `name` (`name`,`branch`),
19495 CONSTRAINT cash_registers_branch FOREIGN KEY (branch) REFERENCES branches (branchcode) ON UPDATE CASCADE ON DELETE CASCADE
19496 ) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_unicode_ci;
19500 unless ( column_exists( 'accountlines', 'register_id' ) ) {
19501 $dbh->do(qq{ALTER TABLE `accountlines` ADD `register_id` int(11) NULL DEFAULT NULL AFTER `manager_id`});
19502 $dbh->do(qq{
19503 ALTER TABLE `accountlines`
19504 ADD CONSTRAINT `accountlines_ibfk_registers` FOREIGN KEY (`register_id`)
19505 REFERENCES `cash_registers` (`id`) ON DELETE SET NULL ON UPDATE CASCADE
19509 $dbh->do(qq{
19510 INSERT IGNORE INTO `userflags` (`bit`, `flag`, `flagdesc`, `defaulton`)
19511 VALUES (25, 'cash_management', 'Cash management', 0)
19514 $dbh->do(qq{
19515 INSERT IGNORE permissions (module_bit, code, description)
19516 VALUES
19517 (25, 'manage_cash_registers', 'Add and remove cash registers')
19520 $dbh->do(qq{
19521 INSERT IGNORE INTO systempreferences (variable,value,options,explanation,type) VALUES
19522 ('UseCashRegisters','0','','Use cash registers with the accounting system and assign patron transactions to them.','YesNo')
19525 SetVersion($DBversion);
19526 print "Upgrade to $DBversion done (Bug 23321: Add cash_registers table, permissions and preferences)\n";
19529 $DBversion = '19.06.00.030';
19530 if( CheckVersion( $DBversion ) ) {
19532 if ( !TableExists('club_holds') ) {
19533 $dbh->do(q|
19534 CREATE TABLE club_holds (
19535 id INT(11) NOT NULL AUTO_INCREMENT,
19536 club_id INT(11) NOT NULL, -- id for the club the hold was generated for
19537 biblio_id INT(11) NOT NULL, -- id for the bibliographic record the hold has been placed against
19538 item_id INT(11) NULL DEFAULT NULL, -- If item-level, the id for the item the hold has been placed agains
19539 date_created TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, -- Timestamp for the placed hold
19540 PRIMARY KEY (id),
19541 -- KEY club_id (club_id),
19542 CONSTRAINT clubs_holds_ibfk_1 FOREIGN KEY (club_id) REFERENCES clubs (id) ON DELETE CASCADE ON UPDATE CASCADE,
19543 CONSTRAINT clubs_holds_ibfk_2 FOREIGN KEY (biblio_id) REFERENCES biblio (biblionumber) ON DELETE CASCADE ON UPDATE CASCADE,
19544 CONSTRAINT clubs_holds_ibfk_3 FOREIGN KEY (item_id) REFERENCES items (itemnumber) ON DELETE CASCADE ON UPDATE CASCADE
19545 ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
19549 if ( !TableExists('club_holds_to_patron_holds') ) {
19550 $dbh->do(q|
19551 CREATE TABLE club_holds_to_patron_holds (
19552 id INT(11) NOT NULL AUTO_INCREMENT,
19553 club_hold_id INT(11) NOT NULL,
19554 patron_id INT(11) NOT NULL,
19555 hold_id INT(11),
19556 error_code ENUM ( 'damaged', 'ageRestricted', 'itemAlreadyOnHold',
19557 'tooManyHoldsForThisRecord', 'tooManyReservesToday',
19558 'tooManyReserves', 'notReservable', 'cannotReserveFromOtherBranches',
19559 'libraryNotFound', 'libraryNotPickupLocation', 'cannotBeTransferred'
19560 ) NULL DEFAULT NULL,
19561 error_message varchar(100) NULL DEFAULT NULL,
19562 PRIMARY KEY (id),
19563 -- KEY club_hold_id (club_hold_id),
19564 CONSTRAINT clubs_holds_paton_holds_ibfk_1 FOREIGN KEY (club_hold_id) REFERENCES club_holds (id) ON DELETE CASCADE ON UPDATE CASCADE,
19565 CONSTRAINT clubs_holds_paton_holds_ibfk_2 FOREIGN KEY (patron_id) REFERENCES borrowers (borrowernumber) ON DELETE CASCADE ON UPDATE CASCADE,
19566 CONSTRAINT clubs_holds_paton_holds_ibfk_3 FOREIGN KEY (hold_id) REFERENCES reserves (reserve_id) ON DELETE CASCADE ON UPDATE CASCADE
19567 ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
19571 # Always end with this (adjust the bug info)
19572 SetVersion( $DBversion );
19573 print "Upgrade to $DBversion done (Bug 19618: add club_holds tables)\n";
19576 $DBversion = '19.06.00.031';
19577 if( CheckVersion( $DBversion ) ) {
19578 $dbh->do(q|
19579 INSERT IGNORE INTO systempreferences ( `variable`, `value`, `options`, `explanation`, `type` ) VALUES
19580 ('OPACDetailQRCode','0','','Enable the display of a QR Code on the OPAC detail page','YesNo');
19583 SetVersion( $DBversion );
19584 print "Upgrade to $DBversion done (Bug 23566: Add OPACDetailQRCode system preference)\n";
19587 $DBversion = '19.06.00.032';
19588 if ( CheckVersion($DBversion) ) {
19589 if ( !column_exists( 'search_marc_to_field', 'search' ) ) {
19590 $dbh->do(q|
19591 ALTER TABLE `search_marc_to_field` ADD COLUMN `search` tinyint(1) NOT NULL DEFAULT 1
19594 if ( !column_exists( 'search_field', 'staff_client' ) ) {
19595 $dbh->do(q|
19596 ALTER TABLE `search_field` ADD COLUMN `staff_client` tinyint(1) NOT NULL DEFAULT 1
19599 if ( !column_exists( 'search_field', 'opac' ) ) {
19600 $dbh->do(q|
19601 ALTER TABLE `search_field` ADD COLUMN `opac` tinyint(1) NOT NULL DEFAULT 1
19605 SetVersion($DBversion);
19606 print
19607 "Upgrade to $DBversion done (Bug 20589: Add field boosting and use elastic query fields parameter instead of depricated _all)\n";
19610 $DBversion = '19.06.00.033';
19611 if( CheckVersion( $DBversion ) ) {
19613 $dbh->do(qq{
19614 INSERT IGNORE INTO systempreferences (variable,value,options,explanation,type) VALUES
19615 ('OnSiteCheckoutAutoCheck','0','','Enable/Do not enable onsite checkout by default if last checkout was an onsite checkout','YesNo')
19617 SetVersion( $DBversion );
19618 print "Upgrade to $DBversion done (Bug 23686: Add OnSiteCheckoutAutoCheck system preference)\n";
19621 $DBversion = '19.06.00.034';
19622 if( CheckVersion( $DBversion ) ) {
19623 $dbh->do(q{
19624 INSERT IGNORE INTO systempreferences ( `variable`, `value`, `options`, `explanation`, `type` ) VALUES
19625 ('TransfersBlockCirc','1',NULL,'Should the transfer modal block circulation staff from continuing scanning items','YesNo')
19627 SetVersion( $DBversion );
19628 print "Upgrade to $DBversion done (Bug 23007: Make transfer modals optionally block circ)\n";
19631 $DBversion = '19.06.00.035';
19632 if( CheckVersion( $DBversion ) ) {
19634 $dbh->do(q{
19635 INSERT IGNORE INTO systempreferences (variable,value,options,explanation,type) VALUES
19636 ( 'IntranetCoce','0', NULL, 'If on, enables cover retrieval from the configured Coce server in the staff client', 'YesNo')
19639 $dbh->do(qq{
19640 UPDATE systempreferences SET
19641 variable = 'OpacCoce',
19642 explanation = 'If on, enables cover retrieval from the configured Coce server in the OPAC'
19643 WHERE
19644 variable = 'Coce'
19647 SetVersion( $DBversion );
19648 print "Upgrade to $DBversion done (Bug 18421: Add Coce image cache to the Intranet)\n";
19651 $DBversion = '19.06.00.036';
19652 if( CheckVersion( $DBversion ) ) {
19654 $dbh->do(q{
19655 INSERT IGNORE INTO systempreferences ( `variable`, `value`, `options`, `explanation`, `type`) VALUES
19656 ('QueryRegexEscapeOptions', 'escape', 'dont_escape|escape|unescape_escaped', 'Escape option for regexps delimiters in Elasicsearch queries.', 'Choice')
19659 SetVersion( $DBversion );
19660 print "Upgrade to $DBversion done (Bug 20334: Add elasticsearch escape options preference)\n";
19663 $DBversion = '19.06.00.037';
19664 if( CheckVersion( $DBversion ) ) {
19665 $dbh->do(q{
19666 INSERT IGNORE INTO systempreferences ( `variable`, `value`, `options`, `explanation`, `type` )
19667 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')
19670 SetVersion( $DBversion );
19671 print "Upgrade to $DBversion done (Bug 21701: PayPal return URL option)\n";
19674 $DBversion = '19.06.00.038';
19675 if( CheckVersion( $DBversion ) ) {
19676 $dbh->do( "UPDATE systempreferences SET variable='PatronAutoComplete' WHERE variable='CircAutocompl' LIMIT 1" );
19677 SetVersion( $DBversion );
19678 print "Upgrade to $DBversion done (Bug 23697: Rename CircAutocompl system preference to PatronAutoComplete)\n";
19681 $DBversion = '19.06.00.039';
19682 if( CheckVersion( $DBversion ) ) {
19683 $dbh->do(q|
19684 INSERT IGNORE INTO keyboard_shortcuts (shortcut_name, shortcut_keys) VALUES
19685 ("copy_line","Ctrl-C"),
19686 ("copy_subfield","Shift-Ctrl-C"),
19687 ("paste_line","Ctrl-P"),
19688 ("insert_line","Ctrl-I")
19691 SetVersion( $DBversion );
19692 print "Upgrade to $DBversion done (Bug 17179: Add additional keyboard_shortcuts)\n";
19695 $DBversion = '19.06.00.040';
19696 if( CheckVersion( $DBversion ) ) {
19697 $dbh->do(q|
19698 INSERT IGNORE INTO systempreferences
19699 (variable,value,explanation,options,type)
19700 VALUES
19701 ('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')
19704 SetVersion( $DBversion );
19705 print "Upgrade to $DBversion done (Bug 17140: Add pref to allow rounding fines at payment)\n";
19708 $DBversion = '19.06.00.041';
19709 if( CheckVersion( $DBversion ) ) {
19710 my ($socialnetworks) = $dbh->selectrow_array( q|
19711 SELECT value FROM systempreferences WHERE variable='socialnetworks';
19713 if( $socialnetworks ){
19714 # If the socialnetworks preference is enabled, enable all social networks
19715 $dbh->do("UPDATE systempreferences SET value = 'email,facebook,linkedin,twitter', explanation = 'email|facebook|linkedin|twitter', type = 'multiple' WHERE variable = 'SocialNetworks'");
19716 } else {
19717 $dbh->do("UPDATE systempreferences SET value = '', explanation = 'email|facebook|linkedin|twitter', type = 'multiple' WHERE variable = 'SocialNetworks'");
19719 SetVersion ($DBversion);
19720 print "Upgrade to $DBversion done (Bug 22880: Allow granular control of socialnetworks preference)\n";
19723 $DBversion = '19.06.00.042';
19724 if( CheckVersion( $DBversion ) ) {
19725 $dbh->do(q{
19726 INSERT IGNORE INTO systempreferences
19727 ( variable, value, options, explanation, type )
19728 VALUES
19729 ('CustomCoverImages','0',NULL,'If enabled, the custom cover images will be displayed in the staff client. CustomCoverImagesURL must be defined.','YesNo'),
19730 ('OPACCustomCoverImages','0',NULL,'If enabled, the custom cover images will be displayed at the OPAC. CustomCoverImagesURL must be defined.','YesNo'),
19731 ('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')
19734 SetVersion( $DBversion );
19735 print "Upgrade to $DBversion done (Bug 22445: Add new pref *CustomCoverImages*)\n";
19738 $DBversion = '19.06.00.043';
19739 if ( CheckVersion($DBversion) ) {
19741 # Adding account_debit_types
19742 if ( !TableExists('account_debit_types') ) {
19743 $dbh->do(
19745 CREATE TABLE account_debit_types (
19746 code varchar(80) NOT NULL,
19747 description varchar(200) NULL,
19748 can_be_added_manually tinyint(4) NOT NULL DEFAULT 1,
19749 default_amount decimal(28, 6) NULL,
19750 is_system tinyint(1) NOT NULL DEFAULT 0,
19751 archived tinyint(1) NOT NULL DEFAULT 0,
19752 PRIMARY KEY (code)
19753 ) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_unicode_ci
19758 # Adding account_debit_types_branches
19759 if ( !TableExists('account_debit_types_branches') ) {
19760 $dbh->do(
19762 CREATE TABLE account_debit_types_branches (
19763 debit_type_code VARCHAR(80),
19764 branchcode VARCHAR(10),
19765 FOREIGN KEY (debit_type_code) REFERENCES account_debit_types(code) ON DELETE CASCADE,
19766 FOREIGN KEY (branchcode) REFERENCES branches(branchcode) ON DELETE CASCADE
19767 ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci
19772 # Populating account_debit_types
19773 $dbh->do(
19775 INSERT IGNORE INTO account_debit_types (
19776 code,
19777 description,
19778 can_be_added_manually,
19779 default_amount,
19780 is_system
19782 VALUES
19783 ('ACCOUNT', 'Account creation fee', 0, NULL, 1),
19784 ('ACCOUNT_RENEW', 'Account renewal fee', 0, NULL, 1),
19785 ('RESERVE_EXPIRED', 'Hold waiting too long', 0, NULL, 1),
19786 ('LOST', 'Lost item', 1, NULL, 1),
19787 ('MANUAL', 'Manual fee', 1, NULL, 0),
19788 ('NEW_CARD', 'New card fee', 1, NULL, 1),
19789 ('OVERDUE', 'Overdue fine', 0, NULL, 1),
19790 ('PROCESSING', 'Lost item processing fee', 0, NULL, 1),
19791 ('RENT', 'Rental fee', 0, NULL, 1),
19792 ('RENT_DAILY', 'Daily rental fee', 0, NULL, 1),
19793 ('RENT_RENEW', 'Renewal of rental item', 0, NULL, 1),
19794 ('RENT_DAILY_RENEW', 'Renewal of daily rental item', 0, NULL, 1),
19795 ('RESERVE', 'Hold fee', 0, NULL, 1)
19799 # Update accountype 'Res' to 'RESERVE'
19800 $dbh->do(
19802 UPDATE accountlines SET accounttype = 'RESERVE' WHERE accounttype = 'Res'
19806 # Update accountype 'PF' to 'PROCESSING'
19807 $dbh->do(
19809 UPDATE accountlines SET accounttype = 'PROCESSING' WHERE accounttype = 'PF'
19813 # Update accountype 'HE' to 'RESERVE_EXPIRED'
19814 $dbh->do(
19816 UPDATE accountlines SET accounttype = 'RESERVE_EXPIRED' WHERE accounttype = 'HE'
19820 # Update accountype 'N' to 'NEW_CARD'
19821 $dbh->do(
19823 UPDATE accountlines SET accounttype = 'NEW_CARD' WHERE accounttype = 'N'
19827 # Update accountype 'M' to 'MANUAL'
19828 $dbh->do(
19830 UPDATE accountlines SET accounttype = 'MANUAL' WHERE accounttype = 'M'
19834 # Catch 'F' cases introduced since bug 22521
19835 $dbh->do(qq{
19836 UPDATE
19837 accountlines
19839 accounttype = 'OVERDUE',
19840 status = 'RETURNED'
19841 WHERE
19842 accounttype = 'F';
19845 # Moving MANUAL_INV to account_debit_types
19846 $dbh->do(
19848 INSERT IGNORE INTO account_debit_types (
19849 code,
19850 default_amount,
19851 description,
19852 can_be_added_manually,
19853 is_system
19855 SELECT
19856 authorised_value,
19857 lib,
19858 authorised_value,
19861 FROM
19862 authorised_values
19863 WHERE
19864 category = 'MANUAL_INV'
19868 # Update uncaught partial accounttypes left behind after bugs 23539 and 22521
19869 my $sth = $dbh->prepare( "SELECT code, SUBSTR(code, 1,5) AS subcode FROM account_debit_types" );
19870 $sth->execute();
19871 while ( my $row = $sth->fetchrow_hashref ) {
19872 $dbh->do(
19874 UPDATE accountlines SET accounttype = ? WHERE accounttype = ?
19878 $row->{code},
19879 $row->{subcode}
19884 # Add any unexpected accounttype codes to debit_types as appropriate
19885 $dbh->do(
19887 INSERT IGNORE INTO account_debit_types (
19888 code,
19889 description,
19890 can_be_added_manually,
19891 default_amount,
19892 is_system
19894 SELECT
19895 DISTINCT(accounttype),
19896 "Unexpected type found during upgrade",
19898 NULL,
19900 FROM
19901 accountlines
19902 WHERE
19903 amount >= 0
19907 # Adding debit_type_code to accountlines
19908 unless ( column_exists('accountlines', 'debit_type_code') ) {
19909 $dbh->do(
19911 ALTER TABLE accountlines
19913 debit_type_code varchar(80) DEFAULT NULL
19914 AFTER
19915 accounttype
19920 # Linking debit_type_code in accountlines to code in account_debit_types
19921 unless ( foreign_key_exists( 'accountlines', 'accountlines_ibfk_debit_type' ) ) {
19922 $dbh->do(
19924 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
19929 # Populating debit_type_code
19930 $dbh->do(
19932 UPDATE accountlines SET debit_type_code = accounttype, accounttype = NULL WHERE accounttype IN (SELECT code from account_debit_types) AND amount >= 0
19936 # Remove MANUAL_INV
19937 $dbh->do(
19939 DELETE FROM authorised_values WHERE category = 'MANUAL_INV'
19942 $dbh->do(
19944 DELETE FROM authorised_value_categories WHERE category_name = 'MANUAL_INV'
19948 # Add new permission
19949 $dbh->do(
19951 INSERT IGNORE INTO permissions (module_bit, code, description)
19952 VALUES
19955 'manage_accounts',
19956 'Manage Account Debit and Credit Types'
19961 SetVersion($DBversion);
19962 print "Upgrade to $DBversion done (Bug 23049: Add account debit_types)\n";
19965 $DBversion = '19.06.00.044';
19966 if ( CheckVersion($DBversion) ) {
19968 # Adding account_credit_types
19969 if ( !TableExists('account_credit_types') ) {
19970 $dbh->do(
19972 CREATE TABLE account_credit_types (
19973 code varchar(80) NOT NULL,
19974 description varchar(200) NULL,
19975 can_be_added_manually tinyint(4) NOT NULL DEFAULT 1,
19976 is_system tinyint(1) NOT NULL DEFAULT 0,
19977 PRIMARY KEY (code)
19978 ) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_unicode_ci
19983 # Adding account_credit_types_branches
19984 if ( !TableExists('account_credit_types_branches') ) {
19985 $dbh->do(
19987 CREATE TABLE account_credit_types_branches (
19988 credit_type_code VARCHAR(80),
19989 branchcode VARCHAR(10),
19990 FOREIGN KEY (credit_type_code) REFERENCES account_credit_types(code) ON DELETE CASCADE,
19991 FOREIGN KEY (branchcode) REFERENCES branches(branchcode) ON DELETE CASCADE
19992 ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci
19997 # Populating account_credit_types
19998 $dbh->do(
20000 INSERT IGNORE INTO account_credit_types (
20001 code,
20002 description,
20003 can_be_added_manually,
20004 is_system
20006 VALUES
20007 ('PAYMENT', 'Payment', 0, 1),
20008 ('WRITEOFF', 'Writeoff', 0, 1),
20009 ('FORGIVEN', 'Forgiven', 1, 1),
20010 ('CREDIT', 'Credit', 1, 1),
20011 ('LOST_RETURN', 'Lost item fee refund', 0, 1)
20015 # Adding credit_type_code to accountlines
20016 unless ( column_exists('accountlines', 'credit_type_code') ) {
20017 $dbh->do(
20019 ALTER TABLE accountlines
20021 credit_type_code varchar(80) DEFAULT NULL
20022 AFTER
20023 accounttype
20028 # Catch LOST_RETURNED cases from original bug 22563 update
20029 $dbh->do(
20031 UPDATE accountlines
20032 SET accounttype = 'LOST_RETURN'
20033 WHERE accounttype = 'LOST_RETURNED'
20036 # Linking credit_type_code in accountlines to code in account_credit_types
20037 unless ( foreign_key_exists( 'accountlines', 'accountlines_ibfk_credit_type' ) ) {
20038 $dbh->do(
20040 ALTER TABLE accountlines
20041 ADD CONSTRAINT
20042 `accountlines_ibfk_credit_type`
20043 FOREIGN KEY (`credit_type_code`) REFERENCES `account_credit_types` (`code`)
20044 ON DELETE RESTRICT
20045 ON UPDATE CASCADE
20050 # Update accountype 'C' to 'CREDIT'
20051 $dbh->do(
20053 UPDATE accountlines SET accounttype = 'CREDIT' WHERE accounttype = 'C' OR accounttype = 'CR'
20057 # Update accountype 'FOR' to 'FORGIVEN'
20058 $dbh->do(
20060 UPDATE accountlines SET accounttype = 'FORGIVEN' WHERE accounttype = 'FOR' OR accounttype = 'FORW'
20064 # Update accountype 'Pay' to 'PAYMENT'
20065 $dbh->do(
20067 UPDATE accountlines SET accounttype = 'PAYMENT' WHERE accounttype = 'Pay' OR accounttype = 'PAY'
20071 # Update accountype 'W' to 'WRITEOFF'
20072 $dbh->do(
20074 UPDATE accountlines SET accounttype = 'WRITEOFF' WHERE accounttype = 'W' OR accounttype = 'WO'
20078 # Add any unexpected accounttype codes to credit_types as appropriate
20079 $dbh->do(
20081 INSERT IGNORE INTO account_credit_types (
20082 code,
20083 description,
20084 can_be_added_manually,
20085 is_system
20087 SELECT
20088 DISTINCT(accounttype),
20089 "Unexpected type found during upgrade",
20092 FROM
20093 accountlines
20094 WHERE
20095 amount < 0
20099 # Populating credit_type_code
20100 $dbh->do(
20102 UPDATE
20103 accountlines
20105 credit_type_code = accounttype, accounttype = NULL
20106 WHERE accounttype IN (SELECT code from account_credit_types)
20110 # Drop accounttype field
20111 $dbh->do(
20113 ALTER TABLE accountlines
20114 DROP COLUMN `accounttype`
20118 SetVersion($DBversion);
20119 print "Upgrade to $DBversion done (Bug 23805: Add account credit_types)\n";
20122 $DBversion = '19.06.00.045';
20123 if( CheckVersion( $DBversion ) ) {
20124 $dbh->do( "UPDATE systempreferences SET value = '2' WHERE value = '0' AND variable = 'UsageStats'" );
20126 SetVersion( $DBversion );
20127 print "Upgrade to $DBversion done (Bug 23866: Set HEA syspref to prompt for review)\n";
20130 $DBversion = '19.06.00.046';
20131 if( CheckVersion( $DBversion ) ) {
20132 $dbh->do(qq{
20133 UPDATE systempreferences
20134 SET
20135 options = "Calendar|Days|Datedue|Dayweek",
20136 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"
20137 WHERE
20138 variable = "useDaysMode"
20141 # Always end with this (adjust the bug info)
20142 SetVersion( $DBversion );
20143 print "Upgrade to $DBversion done (Bug 15260: Option for extended loan with useDaysMode)\n";
20146 $DBversion = '19.06.00.047';
20147 if ( CheckVersion($DBversion) ) {
20148 if ( !TableExists('return_claims') ) {
20149 $dbh->do(
20151 CREATE TABLE return_claims (
20152 id int(11) auto_increment, -- Unique ID of the return claim
20153 itemnumber int(11) NOT NULL, -- ID of the item
20154 issue_id int(11) NULL DEFAULT NULL, -- ID of the checkout that triggered the claim
20155 borrowernumber int(11) NOT NULL, -- ID of the patron
20156 notes MEDIUMTEXT DEFAULT NULL, -- Notes about the claim
20157 created_on TIMESTAMP NULL, -- Time and date the claim was created
20158 created_by int(11) NULL DEFAULT NULL, -- ID of the staff member that registered the claim
20159 updated_on TIMESTAMP NULL ON UPDATE CURRENT_TIMESTAMP, -- Time and date of the latest change on the claim (notes)
20160 updated_by int(11) NULL DEFAULT NULL, -- ID of the staff member that updated the claim
20161 resolution varchar(80) NULL DEFAULT NULL, -- Resolution code (RETURN_CLAIM_RESOLUTION AVs)
20162 resolved_on TIMESTAMP NULL DEFAULT NULL, -- Time and date the claim was resolved
20163 resolved_by int(11) NULL DEFAULT NULL, -- ID of the staff member that resolved the claim
20164 PRIMARY KEY (`id`),
20165 KEY `itemnumber` (`itemnumber`),
20166 CONSTRAINT UNIQUE `issue_id` ( issue_id ),
20167 CONSTRAINT `issue_id` FOREIGN KEY (`issue_id`) REFERENCES `issues` (`issue_id`) ON DELETE SET NULL ON UPDATE CASCADE,
20168 CONSTRAINT `rc_items_ibfk` FOREIGN KEY (`itemnumber`) REFERENCES `items` (`itemnumber`) ON DELETE CASCADE ON UPDATE CASCADE,
20169 CONSTRAINT `rc_borrowers_ibfk` FOREIGN KEY (`borrowernumber`) REFERENCES `borrowers` (`borrowernumber`) ON DELETE CASCADE ON UPDATE CASCADE,
20170 CONSTRAINT `rc_created_by_ibfk` FOREIGN KEY (`created_by`) REFERENCES `borrowers` (`borrowernumber`) ON DELETE SET NULL ON UPDATE CASCADE,
20171 CONSTRAINT `rc_updated_by_ibfk` FOREIGN KEY (`updated_by`) REFERENCES `borrowers` (`borrowernumber`) ON DELETE SET NULL ON UPDATE CASCADE,
20172 CONSTRAINT `rc_resolved_by_ibfk` FOREIGN KEY (`resolved_by`) REFERENCES `borrowers` (`borrowernumber`) ON DELETE SET NULL ON UPDATE CASCADE
20173 ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
20178 $dbh->do(
20180 INSERT IGNORE INTO systempreferences ( `variable`, `value`, `options`, `explanation`, `type` ) VALUES
20181 ('ClaimReturnedChargeFee', 'ask', 'ask|charge|no_charge', 'Controls whether or not a lost item fee is charged for return claims', 'Choice'),
20182 ('ClaimReturnedLostValue', '', '', 'Sets the LOST AV value that represents "Claims returned" as a lost value', 'Free'),
20183 ('ClaimReturnedWarningThreshold', '', '', 'Sets the number of return claims past which the librarian will be warned the patron has many return claims', 'Integer');
20187 $dbh->do(
20189 INSERT IGNORE INTO authorised_value_categories ( category_name ) VALUES
20190 ('RETURN_CLAIM_RESOLUTION');
20194 $dbh->do(
20196 INSERT IGNORE INTO `authorised_values` ( category, authorised_value, lib )
20197 VALUES
20198 ('RETURN_CLAIM_RESOLUTION', 'RET_BY_PATRON', 'Returned by patron'),
20199 ('RETURN_CLAIM_RESOLUTION', 'FOUND_IN_LIB', 'Found in library');
20203 SetVersion($DBversion);
20204 print
20205 "Upgrade to $DBversion done (Bug 14697: Extend and enhance 'Claims returned' lost status)\n";
20208 $DBversion = '19.06.00.048';
20209 if( CheckVersion( $DBversion ) ) {
20210 # you can use $dbh here like:
20211 $dbh->do( qq{
20212 INSERT IGNORE INTO systempreferences ( `variable`, `value`, `options`, `explanation`, `type` )
20213 VALUES ('OPACShowMusicalInscripts','0','','Display musical inscripts on the OPAC record details page when available.','YesNo'),
20214 ('OPACPlayMusicalInscripts','0','','If displayed musical inscripts, play midi conversion on the OPAC record details page.','YesNo')
20215 } );
20217 SetVersion( $DBversion );
20218 print "Upgrade to $DBversion done (Bug 22581: add new OPACShowMusicalInscripts and OPACPlayMusicalInscripts system preferences)\n";
20221 $DBversion = '19.06.00.049';
20222 if( CheckVersion( $DBversion ) ) {
20224 $dbh->do(q{
20225 INSERT IGNORE INTO systempreferences (variable,value,options,explanation,type)
20226 SELECT
20227 'SuspensionsCalendar',
20228 IF( value='noFinesWhenClosed', 'noSuspensionsWhenClosed', 'ignoreCalendar'),
20229 'ignoreCalendar|noSuspensionsWhenClosed',
20230 'Specify whether to use the Calendar in calculating suspensions',
20231 'Choice'
20232 FROM systempreferences
20233 WHERE variable='finesCalendar';
20236 SetVersion( $DBversion );
20237 print "Upgrade to $DBversion done (Bug 13958: Add a SuspensionsCalendar syspref)\n";
20240 $DBversion = '19.06.00.050';
20241 if( CheckVersion( $DBversion ) ) {
20242 $dbh->do( q{
20243 INSERT IGNORE INTO systempreferences (variable,value,options,explanation,type)
20244 VALUES ('OPACFineNoRenewalsIncludeCredits','1',NULL,'If enabled the value specified in OPACFineNoRenewals should include any unapplied account credits in the calculation','YesNo')
20247 SetVersion( $DBversion );
20248 print "Upgrade to $DBversion done (Bug 23293: Add 'OPACFineNoRenewalsIncludeCredits' system preference)\n";
20251 $DBversion = '19.11.00.000';
20252 if( CheckVersion( $DBversion ) ) {
20253 NewVersion( $DBversion, undef, '19.11.00 release' );
20256 $DBversion = '19.12.00.000';
20257 if( CheckVersion( $DBversion ) ) {
20258 NewVersion( $DBversion, undef, 'Dobbie is a free elf...' );
20261 $DBversion = '19.12.00.001';
20262 if( CheckVersion( $DBversion ) ) {
20263 $dbh->do( "UPDATE marc_subfield_structure SET kohafield = NULL WHERE kohafield = 'bibliosubject.subject';" );
20264 NewVersion( $DBversion, 17831, 'Remove non-existing bibliosubject.subject from frameworks' );
20267 $DBversion = '19.12.00.002';
20268 if( CheckVersion( $DBversion ) ) {
20269 $dbh->do(q{
20270 UPDATE systempreferences SET
20271 variable = 'AllowItemsOnHoldCheckoutSIP',
20272 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.'
20273 WHERE variable = 'AllowItemsOnHoldCheckout'
20276 NewVersion( $DBversion, 23233, 'Rename AllowItemsOnHoldCheckout syspref' );
20279 $DBversion = '19.12.00.003';
20280 if( CheckVersion( $DBversion ) ) {
20282 if( !column_exists( 'library_groups', 'ft_local_hold_group' ) ) {
20283 $dbh->do( "ALTER TABLE library_groups ADD COLUMN ft_local_hold_group tinyint(1) NOT NULL DEFAULT 0 AFTER ft_search_groups_staff" );
20286 NewVersion( $DBversion, 22284, 'Add ft_local_hold_group column to library_groups' );
20289 $DBversion = '19.12.00.004';
20290 if ( CheckVersion($DBversion) ) {
20292 $dbh->do(
20294 INSERT IGNORE INTO account_debit_types (
20295 code,
20296 description,
20297 can_be_added_manually,
20298 default_amount,
20299 is_system
20301 VALUES
20302 ('PAYOUT', 'Payment from library to patron', 0, NULL, 1)
20306 $dbh->do(qq{
20307 INSERT IGNORE INTO account_offset_types ( type ) VALUES ('PAYOUT');
20310 $dbh->do(qq{
20311 INSERT IGNORE permissions (module_bit, code, description)
20312 VALUES
20313 (10, 'payout', 'Perform account payout action')
20316 NewVersion( $DBversion, 24080, ['Add PAYOUT account_debit_type', 'Add PAYOUT account_offset_type', 'Add accounts payout permission'] );
20319 $DBversion = '19.12.00.005';
20320 if( CheckVersion( $DBversion ) ) {
20321 $dbh->do( "ALTER TABLE action_logs MODIFY COLUMN `timestamp` timestamp NOT NULL default CURRENT_TIMESTAMP" );
20323 NewVersion( $DBversion, 24329, 'Do not update action_log.timestamp' );
20326 $DBversion = '19.12.00.006';
20327 if( CheckVersion( $DBversion ) ) {
20328 $dbh->do( q|
20329 UPDATE borrowers SET relationship = NULL
20330 WHERE relationship = ""
20333 NewVersion( $DBversion, 24263, 'Replace relationship with NULL when empty string' );
20336 $DBversion = '19.12.00.007';
20337 if ( CheckVersion($DBversion) ) {
20339 $dbh->do(
20341 INSERT IGNORE INTO account_credit_types (code, description, can_be_added_manually, is_system)
20342 VALUES
20343 ('REFUND', 'A refund applied to a patrons fine', 0, 1)
20347 $dbh->do(qq{
20348 INSERT IGNORE INTO account_offset_types ( type ) VALUES ('REFUND');
20351 $dbh->do(qq{
20352 INSERT IGNORE permissions (module_bit, code, description)
20353 VALUES
20354 (10, 'refund', 'Perform account refund action')
20357 NewVersion( $DBversion, 23442, ['Add REFUND to account_credit_types', 'Add REFUND to account_offset_types', 'Add accounts refund permission'] );
20360 $DBversion = '19.12.00.008';
20361 if( CheckVersion( $DBversion ) ) {
20362 $dbh->do( 'UPDATE systempreferences SET value = REPLACE(value, "http://worldcat.org", "https://worldcat.org") WHERE variable = "OPACSearchForTitleIn"' );
20363 $dbh->do( 'UPDATE systempreferences SET value = REPLACE(value, "http://www.bookfinder.com", "https://www.bookfinder.com") WHERE variable = "OPACSearchForTitleIn"' );
20364 $dbh->do( 'UPDATE systempreferences SET value = REPLACE(value, "https://openlibrary.org/search/?", "https://openlibrary.org/search?") WHERE variable = "OPACSearchForTitleIn"' );
20366 NewVersion( $DBversion, 24206, 'Update OpacSearchForTitleIn system preference' );
20369 $DBversion = '19.12.00.009';
20370 if( CheckVersion( $DBversion ) ) {
20372 $dbh->do(q{
20373 INSERT IGNORE INTO account_offset_types ( type ) VALUES ( 'Purchase' );
20376 $dbh->do(q{
20377 INSERT IGNORE INTO account_credit_types ( code, description, can_be_added_manually, is_system )
20378 VALUES ('PURCHASE', 'Purchase', 0, 1);
20381 my $sth = $dbh->prepare(q{
20382 SELECT COUNT(*) FROM authorised_values WHERE category = 'PAYMENT_TYPE' AND authorised_value = 'CASH'
20384 $sth->execute;
20385 my $already_exists = $sth->fetchrow;
20386 if ( not $already_exists ) {
20387 $dbh->do(q{
20388 INSERT INTO authorised_values (category,authorised_value,lib) VALUES ('PAYMENT_TYPE','CASH','Cash')
20392 # Updating field in account_debit_types
20393 unless ( column_exists('account_debit_types', 'can_be_invoiced') ) {
20394 $dbh->do(
20396 ALTER TABLE account_debit_types
20397 CHANGE COLUMN
20398 can_be_added_manually can_be_invoiced tinyint(1) NOT NULL DEFAULT 1
20402 unless ( column_exists('account_debit_types', 'can_be_sold') ) {
20403 $dbh->do(
20405 ALTER TABLE account_debit_types
20407 can_be_sold tinyint(1) DEFAULT 0
20408 AFTER
20409 can_be_invoiced
20414 $dbh->do(q{
20415 INSERT IGNORE INTO `letter` (`module`, `code`, `branchcode`, `name`, `is_html`, `title`, `content`, `message_transport_type`, `lang`) VALUES
20416 ('pos', 'RECEIPT', '', 'Point of sale receipt', 0, 'Receipt', '[% PROCESS "accounts.inc" %]
20417 <table>
20418 [% IF ( LibraryName ) %]
20419 <tr>
20420 <th colspan="2" class="centerednames">
20421 <h3>[% LibraryName | html %]</h3>
20422 </th>
20423 </tr>
20424 [% END %]
20425 <tr>
20426 <th colspan="2" class="centerednames">
20427 <h2>[% Branches.GetName( payment.branchcode ) | html %]</h2>
20428 </th>
20429 </tr>
20430 <tr>
20431 <th colspan="2" class="centerednames">
20432 <h3>[% payment.date | $KohaDates %]</h3>
20433 </tr>
20434 <tr>
20435 <td>Transaction ID: </td>
20436 <td>[% payment.accountlines_id %]</td>
20437 </tr>
20438 <tr>
20439 <td>Operator ID: </td>
20440 <td>[% payment.manager_id %]</td>
20441 </tr>
20442 <tr>
20443 <td>Payment type: </td>
20444 <td>[% payment.payment_type %]</td>
20445 </tr>
20446 <tr></tr>
20447 <tr>
20448 <th colspan="2" class="centerednames">
20449 <h2><u>Fee receipt</u></h2>
20450 </th>
20451 </tr>
20452 <tr></tr>
20453 <tr>
20454 <th>Description of charges</th>
20455 <th>Amount</th>
20456 </tr>
20458 [% FOREACH offset IN offsets %]
20459 <tr>
20460 <td>[% PROCESS account_type_description account=offset.debit %]</td>
20461 <td>[% offset.amount * -1 | $Price %]</td>
20462 </tr>
20463 [% END %]
20465 <tfoot>
20466 <tr class="highlight">
20467 <td>Total: </td>
20468 <td>[% payment.amount * -1| $Price %]</td>
20469 </tr>
20470 <tr>
20471 <td>Tendered: </td>
20472 <td>[% collected | $Price %]</td>
20473 </tr>
20474 <tr>
20475 <td>Change: </td>
20476 <td>[% change | $Price %]</td>
20477 </tr>
20478 </tfoot>
20479 </table>', 'print', 'default');
20482 $dbh->do(qq{
20483 INSERT IGNORE permissions (module_bit, code, description)
20484 VALUES
20485 (25, 'takepayment', 'Access the point of sale page and take payments')
20488 NewVersion( $DBversion, 23354, [q|Add 'Purchase' account offset type|, q|Add 'RECEIPT' notice for Point of Sale|, q|Add point of sale permissions|] );
20491 $DBversion = '19.12.00.010';
20492 if( CheckVersion( $DBversion ) ) {
20493 if( !column_exists( 'oai_sets_mappings', 'rule_order' ) ) {
20494 $dbh->do( "ALTER TABLE oai_sets_mappings ADD COLUMN rule_order INT AFTER set_id, ADD COLUMN rule_operator VARCHAR(3) AFTER rule_order" );
20495 $dbh->do( "UPDATE oai_sets_mappings SET rule_operator='or'" );
20496 my $sets = $dbh->selectall_arrayref("SELECT * from oai_sets_mappings ORDER BY set_id", { Slice => {} });
20497 my $i = 0;
20498 my $previous_set_id;
20499 for my $set ( @{$sets}) {
20500 my $set_id = $set->{set_id};
20502 if ($previous_set_id && $previous_set_id != $set_id) {
20503 $i = 0;
20506 if ($i == 0) {
20507 $dbh->do("UPDATE oai_sets_mappings SET rule_operator=NULL WHERE set_id=? LIMIT 1", {}, $set_id);
20510 $dbh->do("UPDATE oai_sets_mappings SET rule_order=? WHERE set_id=? AND rule_order IS NULL LIMIT 1", {}, $i, $set_id);
20512 $i++;
20513 $previous_set_id = $set_id;
20517 NewVersion( $DBversion, 21520, 'Add rule_order and rule_operator fields to oai_sets_mappings table' );
20520 $DBversion = '19.12.00.011';
20521 if( CheckVersion( $DBversion ) ) {
20522 if( !foreign_key_exists( 'repeatable_holidays', 'repeatable_holidays_ibfk_1' ) ) {
20523 $dbh->do(q|
20524 DELETE h
20525 FROM repeatable_holidays h
20526 LEFT JOIN branches b ON h.branchcode=b.branchcode
20527 WHERE b.branchcode IS NULL;
20529 $dbh->do(q|
20530 ALTER TABLE repeatable_holidays
20531 ADD FOREIGN KEY repeatable_holidays_ibfk_1 (branchcode) REFERENCES branches (branchcode) ON DELETE CASCADE ON UPDATE CASCADE
20535 if( !foreign_key_exists( 'special_holidays', 'special_holidays_ibfk_1' ) ) {
20536 $dbh->do(q|
20537 DELETE h
20538 FROM special_holidays h
20539 LEFT JOIN branches b ON h.branchcode=b.branchcode
20540 WHERE b.branchcode IS NULL;
20542 $dbh->do(q|
20543 ALTER TABLE special_holidays
20544 ADD FOREIGN KEY special_holidays_ibfk_1 (branchcode) REFERENCES branches (branchcode) ON DELETE CASCADE ON UPDATE CASCADE
20548 NewVersion( $DBversion, 24289, 'Adding foreign keys on *_holidays.branchcode tables' );
20551 $DBversion = '19.12.00.012';
20552 if( CheckVersion( $DBversion ) ) {
20554 $dbh->do(qq{
20555 UPDATE
20556 `permissions`
20558 `module_bit` = 3
20559 WHERE
20560 `code` = 'manage_cash_registers'
20563 NewVersion( $DBversion, 24481, 'Move permission to correct module_bit' );
20566 $DBversion = '19.12.00.013';
20567 if( CheckVersion( $DBversion ) ) {
20568 $dbh->do(qq{
20569 INSERT IGNORE INTO
20570 systempreferences (variable,value,options,explanation,type)
20571 VALUES
20572 ('EnablePointOfSale','0',NULL,'Enable the point of sale feature to allow anonymous transactions with the accounting system. (Requires UseCashRegisters)','YesNo')
20575 NewVersion( $DBversion, 24478, 'Add `EnablePointOfSale` system preference to allow disabling the point of sale feature)' );
20578 $DBversion = '19.12.00.014';
20579 if( CheckVersion( $DBversion ) ) {
20580 unless ( column_exists('branchtransfers', 'reason') ) {
20581 $dbh->do(
20583 ALTER TABLE branchtransfers
20585 `reason` enum('Manual')
20586 AFTER
20587 comments
20592 NewVersion( $DBversion, 24287, q|Add 'reason' field to transfers table| );
20595 $DBversion = '19.12.00.015';
20596 if( CheckVersion( $DBversion ) ) {
20598 # Add stockrotation states to reason enum
20599 $dbh->do(
20601 ALTER TABLE
20602 `branchtransfers`
20603 MODIFY COLUMN
20604 `reason` enum(
20605 'Manual',
20606 'StockrotationAdvance',
20607 'StockrotationRepatriation'
20609 AFTER `comments`
20613 # Move stockrotation states to reason field
20614 $dbh->do(
20616 UPDATE
20617 `branchtransfers`
20619 `reason` = 'StockrotationAdvance',
20620 `comments` = NULL
20621 WHERE
20622 `comments` = 'StockrotationAdvance'
20625 $dbh->do(
20627 UPDATE
20628 `branchtransfers`
20630 `reason` = 'StockrotationRepatriation',
20631 `comments` = NULL
20632 WHERE
20633 `comments` = 'StockrotationRepatriation'
20637 NewVersion( $DBversion, 24296, q|Update stockrotation to use 'reason' field in transfers table| );
20640 $DBversion = '19.12.00.016';
20641 if( CheckVersion( $DBversion ) ) {
20642 $dbh->do(q{
20643 INSERT IGNORE INTO `userflags` (`bit`, `flag`, `flagdesc`, `defaulton`)
20644 VALUES (12, 'suggestions', 'Suggestion management', 0)
20647 $dbh->do(q{
20648 UPDATE permissions SET module_bit=12
20649 WHERE code="suggestions_manage"
20652 $dbh->do(q{
20653 UPDATE borrowers SET flags = flags | (1<<12) WHERE flags & (1 << 11)
20656 NewVersion( $DBversion, 22868, 'Move suggestions_manage subpermission out of acquisition permission' );
20659 $DBversion = '19.12.00.017';
20660 if( CheckVersion( $DBversion ) ) {
20661 if( !index_exists( 'library_groups', 'library_groups_uniq_2' ) ) {
20662 $dbh->do(q|
20663 DELETE FROM library_groups
20664 WHERE id NOT IN (
20665 SELECT MIN(id)
20666 FROM ( SELECT * FROM library_groups ) AS lg
20667 GROUP BY parent_id, branchcode
20669 AND NOT(parent_id IS NULL OR branchcode IS NULL);
20671 $dbh->do(q|
20672 ALTER TABLE library_groups
20673 ADD UNIQUE KEY library_groups_uniq_2 (parent_id, branchcode)
20677 NewVersion( $DBversion, 21674, 'Add unique key (parent_id, branchcode) to library_group' );
20680 $DBversion = '19.12.00.018';
20681 if( CheckVersion( $DBversion ) ) {
20682 my @columns = qw(
20683 restrictedtype
20684 rentaldiscount
20685 fine
20686 finedays
20687 maxsuspensiondays
20688 suspension_chargeperiod
20689 firstremind
20690 chargeperiod
20691 chargeperiod_charge_at
20692 accountsent
20693 issuelength
20694 lengthunit
20695 hardduedate
20696 hardduedatecompare
20697 renewalsallowed
20698 renewalperiod
20699 norenewalbefore
20700 auto_renew
20701 no_auto_renewal_after
20702 no_auto_renewal_after_hard_limit
20703 reservesallowed
20704 holds_per_record
20705 holds_per_day
20706 onshelfholds
20707 opacitemholds
20708 overduefinescap
20709 cap_fine_to_replacement_price
20710 article_requests
20711 note
20714 if ( column_exists( 'issuingrules', 'categorycode' ) ) {
20715 foreach my $column ( @columns ) {
20716 $dbh->do("
20717 INSERT INTO circulation_rules ( categorycode, branchcode, itemtype, rule_name, rule_value )
20718 SELECT IF(categorycode='*', NULL, categorycode), IF(branchcode='*', NULL, branchcode), IF(itemtype='*', NULL, itemtype), \'$column\', COALESCE( $column, '' )
20719 FROM issuingrules
20722 $dbh->do("DROP TABLE issuingrules");
20725 NewVersion( $DBversion, 18936, 'Convert issuingrules fields to circulation_rules' );
20728 $DBversion = '19.12.00.019';
20729 if( CheckVersion( $DBversion ) ) {
20731 $dbh->do("ALTER TABLE message_queue MODIFY time_queued timestamp NULL");
20733 if( !column_exists( 'message_queue', 'updated_on' ) ) {
20734 $dbh->do("ALTER TABLE message_queue ADD COLUMN updated_on timestamp NOT NULL default CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP AFTER time_queued");
20735 $dbh->do("UPDATE message_queue SET updated_on=time_queued");
20738 NewVersion( $DBversion, 23673, 'modify time_queued and add updated_on to message_queue' );
20741 $DBversion = '19.12.00.020';
20742 if ( CheckVersion($DBversion) ) {
20743 if ( !column_exists( 'marc_subfield_structure', 'important') ){
20744 $dbh->do("ALTER TABLE marc_subfield_structure ADD COLUMN important TINYINT(4) NOT NULL DEFAULT 0 AFTER mandatory");
20746 if ( !column_exists( 'marc_tag_structure', 'important') ){
20747 $dbh->do("ALTER TABLE marc_tag_structure ADD COLUMN important TINYINT(4) NOT NULL DEFAULT 0 AFTER mandatory");
20750 NewVersion( $DBversion, 8643, 'Add important constraint to marc subfields' );
20753 $DBversion = '19.12.00.021';
20754 if( CheckVersion( $DBversion ) ) {
20756 # Add LOST_FOUND debit type
20757 $dbh->do(qq{
20758 INSERT IGNORE INTO
20759 account_credit_types ( code, description, can_be_added_manually, is_system )
20760 VALUES
20761 ('LOST_FOUND', 'Lost item fee refund', 0, 1)
20764 # Migrate LOST_RETURN to LOST_FOUND
20765 $dbh->do(qq{
20766 UPDATE
20767 accountlines
20769 credit_type_code = 'LOST_FOUND'
20770 WHERE
20771 credit_type_code = 'LOST_RETURN'
20773 credit_type_code = 'LOST_RETURNED'
20776 # Migrate LOST + RETURNED to LOST + FOUND
20777 $dbh->do(qq{
20778 UPDATE
20779 accountlines
20781 status = 'FOUND'
20782 WHERE
20783 debit_type_code = 'LOST'
20785 status = 'RETURNED'
20788 # Drop LOST_RETURNED credit type
20789 $dbh->do(qq{
20790 DELETE FROM account_credit_types WHERE code = 'LOST_RETURNED'
20793 # Drop LOST_RETURN credit type
20794 $dbh->do(qq{
20795 DELETE FROM account_credit_types WHERE code = 'LOST_RETURN'
20798 # Add Lost Item Found offset type
20799 $dbh->do(qq{
20800 INSERT IGNORE INTO
20801 account_offset_types ( type )
20802 VALUES
20803 ( 'Lost Item Found' )
20806 NewVersion( $DBversion, 24592, 'Update LOST_RETURN to LOST_FOUND');
20809 $DBversion = '19.12.00.022';
20810 if( CheckVersion( $DBversion ) ) {
20811 $dbh->do( "ALTER TABLE items MODIFY COLUMN uri MEDIUMTEXT" );
20812 $dbh->do( "ALTER TABLE deleteditems MODIFY COLUMN uri MEDIUMTEXT" );
20814 NewVersion( $DBversion, 20882, 'items.uri to MEDIUMTEXT');
20817 $DBversion = '19.12.00.023';
20818 if( CheckVersion( $DBversion ) ) {
20819 $dbh->do( "ALTER TABLE quotes MODIFY timestamp datetime NULL" );
20821 NewVersion( $DBversion, 24640, 'Allow quotes.timestamp to be NULL');
20824 $DBversion = '19.12.00.024';
20825 if( CheckVersion( $DBversion ) ) {
20826 $dbh->do(q{
20827 UPDATE systempreferences SET value = 'off'
20828 WHERE variable = 'finesMode' AND (value <> 'production' OR value IS NULL)
20830 $dbh->do(q{
20831 UPDATE systempreferences SET options = 'off|production',
20832 explanation = "Choose the fines mode, 'off' (do not accrue fines) or 'production' (accrue overdue fines). Requires accruefines cronjob or CalculateFinesOnReturn system preference."
20833 WHERE variable = 'finesMode'
20836 NewVersion( $DBversion, 21633, 'Remove finesMode "test"');
20839 $DBversion = '19.12.00.025';
20840 if( CheckVersion( $DBversion ) ) {
20841 $dbh->do(q{
20842 INSERT IGNORE INTO `systempreferences` (variable,value,options,explanation,type)
20843 VALUES ('DumpSearchQueryTemplate',0,'','Add the search query being passed to the search engine into the template for debugging','YesNo')
20846 NewVersion( $DBversion, 24103, 'add DumpSearchQueryTemplate syspref');
20849 $DBversion = '19.12.00.026';
20850 if( CheckVersion( $DBversion ) ) {
20851 if( !column_exists( 'z3950servers', 'attributes' ) ) {
20852 $dbh->do( "ALTER TABLE z3950servers ADD COLUMN attributes VARCHAR(255) after add_xslt" );
20855 NewVersion( $DBversion, 11297, 'Add support for custom PQF attributes for Z39.50 server searches');
20858 $DBversion = '19.12.00.027';
20859 if( CheckVersion( $DBversion ) ) {
20861 # Add any pathalogical incorrect debit_types as credit_types as appropriate
20862 $dbh->do(
20864 INSERT IGNORE INTO account_credit_types (
20865 code,
20866 description,
20867 can_be_added_manually,
20868 is_system
20870 SELECT
20871 DISTINCT(debit_type_code),
20872 "Unexpected type found during upgrade",
20875 FROM
20876 accountlines
20877 WHERE
20878 amount < 0
20880 debit_type_code IS NOT NULL
20884 # Correct any pathalogical cases
20885 $dbh->do( qq{
20886 UPDATE
20887 accountlines
20889 credit_type_code = debit_type_code,
20890 debit_type_code = NULL
20891 WHERE
20892 amount < 0
20894 debit_type_code IS NOT NULL
20897 NewVersion( $DBversion, 24532, 'Fix pathological cases of negative debits');
20900 $DBversion = '19.12.00.028';
20901 if( CheckVersion( $DBversion ) ) {
20902 $dbh->do(q{
20903 INSERT IGNORE INTO systempreferences (variable,value,options,explanation,type)
20904 VALUES
20905 ('OpacBrowseSearch', '0',NULL, "Elasticsearch only: add a page allowing users to 'browse' all items in the collection",'YesNo')
20908 NewVersion( $DBversion, 14567, 'Add OpacBrowseSearch syspref');
20911 $DBversion = '19.12.00.029';
20912 if( CheckVersion( $DBversion ) ) {
20913 if (!column_exists('account_credit_types', 'archived')) {
20914 $dbh->do('ALTER TABLE account_credit_types ADD COLUMN archived tinyint(1) NOT NULL DEFAULT 0 AFTER is_system');
20917 NewVersion( $DBversion, 17702, 'Add column account_credit_types.archived');
20920 $DBversion = '19.12.00.030';
20921 if( CheckVersion( $DBversion ) ) {
20923 # get list of installed translations
20924 require C4::Languages;
20925 my @langs;
20926 my $tlangs = C4::Languages::getTranslatedLanguages('opac','bootstrap');
20928 foreach my $language ( @$tlangs ) {
20929 foreach my $sublanguage ( @{$language->{'sublanguages_loop'}} ) {
20930 push @langs, $sublanguage->{'rfc4646_subtag'};
20934 # Get any existing value from the opacheader system preference
20935 my ($opacheader) = $dbh->selectrow_array( q|
20936 SELECT value FROM systempreferences WHERE variable='opacheader';
20939 my @detail;
20940 if( $opacheader ){
20941 foreach my $lang ( @langs ) {
20942 # If there is a value in the opacheader preference, insert it into opac_news
20943 $dbh->do("INSERT INTO opac_news (branchcode, lang, title, content ) VALUES (NULL, ?, '', ?)", undef, "opacheader_$lang", $opacheader);
20944 push @detail, "Inserted opacheader contents into $lang news item...";
20947 # Remove the opacheader system preference
20948 $dbh->do("DELETE FROM systempreferences WHERE variable='opacheader'");
20950 unshift @detail, 'Move contents of opacheader preference to Koha news system';
20951 NewVersion( $DBversion, 22880, \@detail);
20954 $DBversion = '19.12.00.031';
20955 if( CheckVersion( $DBversion ) ) {
20956 $dbh->do( q|
20957 ALTER TABLE article_requests MODIFY COLUMN created_on timestamp NULL, MODIFY COLUMN updated_on timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp()
20960 NewVersion( $DBversion, 22273, "Column article_requests.created_on should not be updated" );
20963 $DBversion = '19.12.00.032';
20964 if( CheckVersion( $DBversion ) ) {
20965 $dbh->do( q|
20966 DELETE FROM systempreferences WHERE variable="UseQueryParser"
20969 NewVersion( $DBversion, 24735, "Remove UseQueryParser system preference" );
20972 $DBversion = '19.12.00.033';
20973 if ( CheckVersion($DBversion) ) {
20975 # Add cash_register_actions table
20976 if ( !TableExists('cash_register_actions') ) {
20977 $dbh->do(qq{
20978 CREATE TABLE `cash_register_actions` (
20979 `id` int(11) NOT NULL auto_increment, -- unique identifier for each account register action
20980 `code` varchar(24) NOT NULL, -- action code denoting the type of action recorded (enum),
20981 `register_id` int(11) NOT NULL, -- id of cash_register this action belongs to,
20982 `manager_id` int(11) NOT NULL, -- staff member performing the action
20983 `amount` decimal(28,6) DEFAULT NULL, -- amount recorded in action (signed)
20984 `timestamp` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
20985 PRIMARY KEY (`id`),
20986 CONSTRAINT `cash_register_actions_manager` FOREIGN KEY (`manager_id`) REFERENCES `borrowers` (`borrowernumber`) ON DELETE CASCADE ON UPDATE CASCADE,
20987 CONSTRAINT `cash_register_actions_register` FOREIGN KEY (`register_id`) REFERENCES `cash_registers` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
20988 ) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_unicode_ci;
20992 # Add cashup permission
20993 $dbh->do(qq{
20994 INSERT IGNORE permissions (module_bit, code, description)
20995 VALUES
20996 (25, 'cashup', 'Perform cash register cashup action')
20999 NewVersion( $DBversion, 23355, [ "Add cash_register_actions table", "Add cash register cashup permissions" ] );
21002 $DBversion = '19.12.00.034';
21003 if ( CheckVersion($DBversion) ) {
21005 $dbh->do(
21007 INSERT IGNORE INTO account_credit_types (code, description, can_be_added_manually, is_system)
21008 VALUES
21009 ('DISCOUNT', 'A discount applied to a patrons fine', 0, 1)
21013 $dbh->do(
21015 INSERT IGNORE INTO account_offset_types ( type ) VALUES ('DISCOUNT');
21019 $dbh->do(
21021 INSERT IGNORE permissions (module_bit, code, description)
21022 VALUES
21023 (10, 'discount', 'Perform account discount action')
21027 NewVersion( $DBversion, 24081, "Add DISCOUNT to account_credit_types and account_offset_types, Add accounts discount permission");
21030 $DBversion = '19.12.00.035';
21031 if ( CheckVersion($DBversion) ) {
21033 $dbh->do(qq{
21034 INSERT IGNORE permissions (module_bit, code, description)
21035 VALUES
21036 (25, 'anonymous_refund', 'Perform refund actions from cash registers')
21039 NewVersion( $DBversion, 23442, "Add a refund option to the point of sale system" );
21042 $DBversion = '19.12.00.036';
21043 if( CheckVersion( $DBversion ) ) {
21044 $dbh->do(q{
21045 INSERT IGNORE INTO `systempreferences`
21046 (`variable`, `value`, `options`, `explanation`, `type`)
21047 VALUES
21048 ('AccessControlAllowOrigin', '', NULL, 'Set the Access-Control-Allow-Origin header to the specified value', 'Free');
21051 NewVersion( $DBversion, 24369, "Add CORS support to Koha");
21054 $DBversion = '19.12.00.037';
21055 if( CheckVersion( $DBversion ) ) {
21057 $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'); | );
21059 $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'); | );
21061 NewVersion( $DBversion, 23051, [ "Add RenewAccruingItemInOpac syspref", "Add RenewAccruingItemWhenPaid syspref" ]);
21064 $DBversion = '19.12.00.038';
21065 if( CheckVersion( $DBversion ) ) {
21066 $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'); | );
21068 NewVersion( $DBversion, 23112, "Add CirculateILL syspref");
21071 $DBversion = '19.12.00.039';
21072 if( CheckVersion( $DBversion ) ) {
21073 $dbh->do( "DROP TABLE IF EXISTS printers" );
21075 if( column_exists( 'branches', 'branchprinter' ) ) {
21076 $dbh->do( "ALTER TABLE branches DROP COLUMN branchprinter" );
21079 $dbh->do(qq{ DELETE FROM systempreferences WHERE variable = "printcirculationslips"} );
21081 NewVersion( $DBversion, 17845, "Drop unused table printers and branchprinter column");
21084 $DBversion = '19.12.00.040';
21085 if( CheckVersion( $DBversion ) ) {
21086 $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' " );
21088 NewVersion( $DBversion, 17374, "Update description of DefaultPatronSearchFields");
21091 $DBversion = '19.12.00.041';
21092 if( CheckVersion( $DBversion ) ) {
21094 # Update existing NULL priorities
21095 $dbh->do(q|
21096 UPDATE reserves SET priority = 1 WHERE priority IS NULL
21099 $dbh->do(q|
21100 ALTER TABLE reserves MODIFY priority SMALLINT(6) NOT NULL DEFAULT 1
21103 $dbh->do(q|
21104 UPDATE old_reserves SET priority = 1 WHERE priority IS NULL
21107 $dbh->do(q|
21108 ALTER TABLE old_reserves MODIFY priority SMALLINT(6) NOT NULL DEFAULT 1
21111 NewVersion( $DBversion, 24722, "Enforce NOT NULL constraint for reserves.priority");
21114 $DBversion = '19.12.00.042';
21115 if( CheckVersion( $DBversion ) ) {
21116 if (!column_exists('message_queue', 'reply_address')) {
21117 $dbh->do('ALTER TABLE message_queue ADD COLUMN reply_address LONGTEXT AFTER from_address');
21120 NewVersion( $DBversion, 22821, "Add reply_address to message_queue");
21123 $DBversion = '19.12.00.043';
21124 if( CheckVersion( $DBversion ) ) {
21126 # Add return reasons to enum
21127 $dbh->do(
21129 ALTER TABLE
21130 `branchtransfers`
21131 MODIFY COLUMN
21132 `reason` enum(
21133 'Manual',
21134 'StockrotationAdvance',
21135 'StockrotationRepatriation',
21136 'ReturnToHome',
21137 'ReturnToHolding'
21139 AFTER `comments`
21143 NewVersion( $DBversion, 24296, "Add 'return' reasons to branchtransfers enum");
21146 $DBversion = '19.12.00.044';
21147 if( CheckVersion( $DBversion ) ) {
21148 $dbh->do(qq{
21149 INSERT IGNORE permissions (module_bit, code, description)
21150 VALUES
21151 (13, 'batch_extend_due_dates', 'Perform batch extend due dates')
21154 NewVersion( $DBversion, 24846, "Add a new permission for new tool batch extend due dates");
21157 $DBversion = '19.12.00.045';
21158 if( CheckVersion( $DBversion ) ) {
21159 $dbh->do(q{
21160 INSERT IGNORE INTO systempreferences (variable,value,options,explanation,type)
21161 VALUES
21162 ('CollapseFieldsPatronAddForm','',NULL,'Collapse these fields by default when adding a new patron. These fields can still be expanded.','Multiple')
21165 NewVersion( $DBversion, 4461, "Add CollapseFieldsPatronAddForm system preference");
21168 $DBversion = '19.12.00.046';
21169 if( CheckVersion( $DBversion ) ) {
21171 $dbh->do( "ALTER TABLE accountlines MODIFY COLUMN date TIMESTAMP NULL" );
21173 NewVersion( $DBversion, 24818, "Update 'accountlines.date' from DATE to TIMESTAMP");
21176 $DBversion = '19.12.00.047';
21177 if( CheckVersion( $DBversion ) ) {
21178 $dbh->do(q{
21179 ALTER TABLE biblioimages
21180 ADD `timestamp` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
21181 AFTER `thumbnail`;
21184 NewVersion( $DBversion, 22987, "Add biblioimages.timestamp");
21187 $DBversion = '19.12.00.048';
21188 if( CheckVersion( $DBversion ) ) {
21190 # Add rotating collection states to reason enum
21191 $dbh->do(
21193 ALTER TABLE
21194 `branchtransfers`
21195 MODIFY COLUMN
21196 `reason` enum(
21197 'Manual',
21198 'StockrotationAdvance',
21199 'StockrotationRepatriation',
21200 'ReturnToHome',
21201 'ReturnToHolding',
21202 'RotatingCollection'
21204 AFTER `comments`
21208 NewVersion( $DBversion, 24299, "Add 'collection' reasons to branchtransfers enum");
21211 $DBversion = '19.12.00.049';
21212 if( CheckVersion( $DBversion ) ) {
21214 # Add reserve reasons enum
21215 $dbh->do(
21217 ALTER TABLE
21218 `branchtransfers`
21219 MODIFY COLUMN
21220 `reason` enum(
21221 'Manual',
21222 'StockrotationAdvance',
21223 'StockrotationRepatriation',
21224 'ReturnToHome',
21225 'ReturnToHolding',
21226 'RotatingCollection',
21227 'Reserve',
21228 'LostReserve',
21229 'CancelReserve'
21231 AFTER `comments`
21235 NewVersion( $DBversion, 24299, "Add 'reserve' reasons to branchtransfers enum");
21238 $DBversion = '19.12.00.050';
21239 if( CheckVersion( $DBversion ) ) {
21240 $dbh->do( "DELETE FROM systempreferences WHERE variable in ('IDreamBooksReadometer','IDreamBooksResults','IDreamBooksReviews')" );
21242 NewVersion( $DBversion, 24854, "Remove IDreamBooks* system preferences");
21245 $DBversion = '19.12.00.051';
21246 if( CheckVersion( $DBversion ) ) {
21247 $dbh->do(q{
21248 UPDATE systempreferences SET options = 'itemhomebranch|patronhomebranch|checkoutbranch|none' WHERE variable='OpacRenewalBranch'
21250 $dbh->do(q{
21251 UPDATE systempreferences SET value = "none" WHERE variable='OpacRenewalBranch'
21252 AND value = 'NULL'
21254 $dbh->do(q{
21255 UPDATE systempreferences SET value = 'opacrenew' WHERE variable='OpacRenewalBranch'
21256 AND value NOT IN ('checkoutbranch','itemhomebranch','opacrenew','patronhomebranch','none')
21259 NewVersion( $DBversion, 24759, "Cleanup OpacRenewalBranch");
21262 $DBversion = '19.12.00.052';
21263 if( CheckVersion( $DBversion ) ) {
21264 if( !column_exists( 'itemtypes', 'rentalcharge_daily_calendar' ) ) {
21265 $dbh->do(q{
21266 ALTER TABLE itemtypes ADD COLUMN
21267 rentalcharge_daily_calendar tinyint(1) NOT NULL DEFAULT 1
21268 AFTER rentalcharge_daily;
21272 if( !column_exists( 'itemtypes', 'rentalcharge_hourly_calendar' ) ) {
21273 $dbh->do(q{
21274 ALTER TABLE itemtypes ADD COLUMN
21275 rentalcharge_hourly_calendar tinyint(1) NOT NULL DEFAULT 1
21276 AFTER rentalcharge_hourly;
21280 my $finesCalendar = C4::Context->preference('finesCalendar');
21281 my $value = $finesCalendar eq 'noFinesWhenClosed' ? 1 : 0;
21282 $dbh->do("UPDATE itemtypes SET rentalcharge_hourly_calendar = $value, rentalcharge_daily_calendar = $value");
21284 NewVersion( $DBversion, 21443, "Add ability to exclude holidays when calculating rentals fees by time period");
21287 $DBversion = '19.12.00.053';
21288 if( CheckVersion( $DBversion ) ) {
21289 unless( column_exists('borrowers','autorenew_checkouts') ){
21290 $dbh->do( "ALTER TABLE borrowers ADD COLUMN autorenew_checkouts TINYINT(1) NOT NULL DEFAULT 1 AFTER anonymized" );
21292 unless( column_exists('deletedborrowers','autorenew_checkouts') ){
21293 $dbh->do( "ALTER TABLE deletedborrowers ADD COLUMN autorenew_checkouts TINYINT(1) NOT NULL DEFAULT 1 AFTER anonymized" );
21295 $dbh->do(q{
21296 INSERT IGNORE INTO systempreferences
21297 ( `variable`, `value`, `options`, `explanation`, `type` )
21298 VALUES
21299 ('AllowPatronToControlAutorenewal','0',NULL,'If enabled, patrons will have a field in their account to choose whether their checkouts are auto renewed or not','YesNo')
21302 NewVersion( $DBversion, 24476, "Allow patrons to opt-out of autorenewal");
21305 $DBversion = '19.12.00.054';
21306 if( CheckVersion( $DBversion ) ) {
21308 if ( !TableExists('desks') ) {
21309 $dbh->do(qq{
21310 CREATE TABLE `desks` ( -- desks available in a library
21311 `desk_id` int(11) NOT NULL auto_increment, -- unique identifier added by Koha
21312 `desk_name` varchar(100) NOT NULL default '', -- name of the desk
21313 `branchcode` varchar(10) NOT NULL, -- library the desk is located at
21314 PRIMARY KEY (`desk_id`),
21315 KEY `fk_desks_branchcode` (`branchcode`),
21316 CONSTRAINT `fk_desks_branchcode` FOREIGN KEY (`branchcode`) REFERENCES `branches` (`branchcode`) ON DELETE CASCADE ON UPDATE CASCADE
21317 ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
21321 NewVersion( $DBversion, 13881, "Add desk management");
21324 $DBversion = '19.12.00.055';
21325 if( CheckVersion( $DBversion ) ) {
21326 if( !column_exists( 'suggestions', 'lastmodificationby' ) ) {
21327 $dbh->do(q|
21328 ALTER TABLE suggestions ADD COLUMN lastmodificationby INT(11) DEFAULT NULL AFTER rejecteddate
21331 $dbh->do(q|
21332 ALTER TABLE suggestions ADD CONSTRAINT `suggestions_ibfk_lastmodificationby` FOREIGN KEY (`lastmodificationby`) REFERENCES `borrowers` (`borrowernumber`) ON DELETE SET NULL ON UPDATE CASCADE
21336 if( !column_exists( 'suggestions', 'lastmodificationdate' ) ) {
21337 $dbh->do(q|
21338 ALTER TABLE suggestions ADD COLUMN lastmodificationdate DATE DEFAULT NULL AFTER lastmodificationby
21341 my $suggestions = $dbh->selectall_arrayref(q|
21342 SELECT suggestionid, managedby, manageddate, acceptedby, accepteddate, rejectedby, rejecteddate
21343 FROM suggestions
21344 |, { Slice => {} });
21345 for my $suggestion ( @$suggestions ) {
21346 my ( $max_date ) = sort ( $suggestion->{manageddate} || (), $suggestion->{accepteddate} || (), $suggestion->{rejecteddate} || () );
21347 next unless $max_date;
21348 my $last_modif_by = ( defined $suggestion->{manageddate} and $max_date eq $suggestion->{manageddate} )
21349 ? $suggestion->{managedby}
21350 : ( defined $suggestion->{accepteddate} and $max_date eq $suggestion->{accepteddate} )
21351 ? $suggestion->{acceptedby}
21352 : ( defined $suggestion->{rejecteddate} and $max_date eq $suggestion->{rejecteddate} )
21353 ? $suggestion->{rejectedby}
21354 : undef;
21355 next unless $last_modif_by;
21356 $dbh->do(q|
21357 UPDATE suggestions
21358 SET lastmodificationdate = ?, lastmodificationby = ?
21359 WHERE suggestionid = ?
21360 |, undef, $max_date, $last_modif_by, $suggestion->{suggestionid});
21365 $dbh->do( q|
21366 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');
21367 | );
21369 NewVersion( $DBversion, 23590, "Add lastmodificationby and lastmodificationdate to the suggestions table");
21372 $DBversion = '19.12.00.056';
21373 if( CheckVersion( $DBversion ) ) {
21375 $dbh->do( "DELETE FROM systempreferences WHERE variable='UseKohaPlugins'" );
21377 NewVersion( $DBversion, 20415, "Remove UseKohaPlugins preference");
21380 $DBversion = '19.12.00.057';
21381 if( CheckVersion( $DBversion ) ) {
21383 $dbh->do( "DELETE FROM systempreferences WHERE variable='INTRAdidyoumean'" );
21385 NewVersion( $DBversion, 20399, "Remove INTRAdidyoumean preference");
21388 $DBversion = '19.12.00.058';
21389 if( CheckVersion( $DBversion ) ) {
21390 $dbh->do(q{
21391 INSERT IGNORE INTO systempreferences (`variable`, `value`, `options`, `explanation`,`type`) VALUES
21392 ('OPACnumSearchResultsDropdown', 0, NULL, 'Enable option list of number of results per page to show in OPAC search results','YesNo'),
21393 ('numSearchResultsDropdown', 0, NULL, 'Enable option list of number of results per page to show in staff client search results','YesNo')
21396 NewVersion( $DBversion, 14715, "Add sysprefs numSearchResultsDropdown and OPACnumSearchResultsDropdown");
21399 $DBversion = '19.12.00.059';
21400 if( CheckVersion( $DBversion ) ) {
21402 for my $column ( qw(othersupplier booksellerfax booksellerurl bookselleremail currency) ) {
21403 if( column_exists( 'aqbooksellers', $column ) ) {
21404 my ($count) = $dbh->selectrow_array(qq|
21405 SELECT COUNT(*)
21406 FROM aqbooksellers
21407 WHERE $column IS NOT NULL AND $column <> ""
21409 if ( $count ) {
21410 warn "Warning - Cannot remove column aqbooksellers.$column. At least one value exists";
21411 } else {
21412 $dbh->do(qq|
21413 ALTER TABLE aqbooksellers
21414 DROP COLUMN $column
21420 NewVersion( $DBversion, 18177, "Remove some unused columns from aqbooksellers");
21423 $DBversion = '19.12.00.060';
21424 if( CheckVersion( $DBversion ) ) {
21425 $dbh->do(q{
21426 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';
21428 NewVersion( $DBversion, 23204, "Change enum order for marc_type in search_marc_map to fix sorting");
21431 $DBversion = '19.12.00.061';
21432 if ( CheckVersion($DBversion) ) {
21433 $dbh->do(q{
21434 UPDATE
21435 systempreferences
21437 options = "batchmod|moredetail|cronjob|additem|pendingreserves|onpayment"
21438 WHERE
21439 variable = "MarkLostItemsAsReturned"
21442 my $lost_item_returned = C4::Context->preference("MarkLostItemsAsReturned");
21443 my @set = split( ",", $lost_item_returned );
21444 push @set, 'onpayment';
21445 $lost_item_returned = join( ",", @set );
21447 $dbh->do(qq{
21448 UPDATE
21449 systempreferences
21451 value = "$lost_item_returned"
21452 WHERE
21453 variable = "MarkLostItemsAsReturned"
21456 NewVersion( $DBversion, 24474, "Add `onpayment` option to MarkLostItemsAsReturned");
21459 $DBversion = '19.12.00.062';
21460 if( CheckVersion( $DBversion ) ) {
21461 $dbh->do( "UPDATE account_debit_types SET description = REPLACE(description,'Rewewal','Renewal') WHERE description like '%Rewewal%'" );
21463 NewVersion( $DBversion, 25010, "Fix typo in account_debit_type description");
21466 $DBversion = '19.12.00.063';
21467 if( CheckVersion( $DBversion ) ) {
21468 $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') });
21470 NewVersion( $DBversion, 22534, "Add PreFillGuaranteeField syspref");
21473 $DBversion = '19.12.00.064';
21474 if( CheckVersion( $DBversion ) ) {
21476 $dbh->do( q|
21477 INSERT IGNORE INTO systempreferences ( `variable`, `value`, `options`, `explanation`, `type` )
21478 SELECT 'OpacNoItemTypeImages', value, NULL, 'If ON, disables itemtype images in the OPAC','YesNo'
21479 FROM (SELECT value FROM systempreferences WHERE variable="NoItemTypeImages") tmp
21480 | );
21481 $dbh->do( "UPDATE systempreferences SET explanation = 'If ON, disables itemtype images in the staff interface'
21482 WHERE variable = 'noItemTypeImages' ");
21484 NewVersion( $DBversion, 4944, "Add new system preference OpacNoItemTypeImages");
21487 $DBversion = '19.12.00.065';
21488 if( CheckVersion( $DBversion ) ) {
21490 $dbh->do( q|
21491 INSERT IGNORE INTO systempreferences (variable, value, explanation, options, type)
21492 VALUES ('ILLCheckAvailability', '0', 'If enabled, during the ILL request process third party sources will be checked for current availability', '', 'YesNo')
21493 | );
21495 NewVersion( $DBversion, 23173, "Add ILLCheckAvailability syspref");
21498 $DBversion = '19.12.00.066';
21499 if ( CheckVersion($DBversion) ) {
21500 $dbh->do(
21501 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') }
21503 $dbh->do(
21504 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') }
21506 if ( !TableExists('problem_reports') ) {
21507 $dbh->do(
21508 q{ CREATE TABLE problem_reports (
21509 reportid int(11) NOT NULL auto_increment, -- unique identifier assigned by Koha
21510 title varchar(40) NOT NULL default '', -- report subject line
21511 content varchar(255) NOT NULL default '', -- report message content
21512 borrowernumber int(11) NOT NULL default 0, -- the user who created the problem report
21513 branchcode varchar(10) NOT NULL default '', -- borrower's branch
21514 username varchar(75) default NULL, -- OPAC username
21515 problempage TEXT default NULL, -- page the user triggered the problem report form from
21516 recipient enum('admin','library') NOT NULL default 'library', -- the 'to-address' of the problem report
21517 created_on timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, -- timestamp of report submission
21518 status varchar(6) NOT NULL default 'New', -- status of the report. New, Viewed, Closed
21519 PRIMARY KEY (reportid),
21520 CONSTRAINT problem_reports_ibfk1 FOREIGN KEY (borrowernumber) REFERENCES borrowers (borrowernumber) ON DELETE CASCADE ON UPDATE CASCADE,
21521 CONSTRAINT problem_reports_ibfk2 FOREIGN KEY (branchcode) REFERENCES branches (branchcode) ON DELETE CASCADE ON UPDATE CASCADE
21522 ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci }
21525 $dbh->do(
21526 q{INSERT IGNORE INTO userflags (bit, flag, flagdesc, defaulton) VALUES (26, 'problem_reports', 'Manage problem reports', 0) }
21528 $dbh->do(
21529 q{INSERT IGNORE INTO permissions (module_bit, code, description) VALUES (26, 'manage_problem_reports', 'Manage OPAC problem reports') }
21532 NewVersion(
21533 $DBversion,
21534 4461,
21536 "Add OPACReportProblem system preference",
21537 "Adding PROBLEM_REPORT notice",
21538 "Add problem reports table",
21539 "Add user permissions for managing OPAC problem reports"
21544 $DBversion = '19.12.00.067';
21545 if( CheckVersion( $DBversion ) ) {
21546 # From: https://stackoverflow.com/questions/3311903/remove-duplicate-rows-in-mysql
21547 $dbh->do(q|
21548 DELETE a
21549 FROM virtualshelfshares as a, virtualshelfshares as b
21550 WHERE
21551 a.id < b.id
21553 a.borrowernumber IS NOT NULL
21555 a.borrowernumber=b.borrowernumber
21557 a.shelfnumber=b.shelfnumber
21560 NewVersion( $DBversion, 20754, "Remove double accepted list shares" );
21563 $DBversion = '19.12.00.068';
21564 if( CheckVersion( $DBversion ) ) {
21565 $dbh->do(q|
21566 INSERT IGNORE INTO systempreferences
21567 (variable,value,explanation,options,type)
21568 VALUES
21569 ('AuthFailureLog','','If enabled, log authentication failures',NULL,'YesNo'),
21570 ('AuthSuccessLog','','If enabled, log successful authentications',NULL,'YesNo')
21573 NewVersion( $DBversion, 21190, "Add prefs AuthFailureLog and AuthSuccessLog");
21576 $DBversion = '19.12.00.069';
21577 if( CheckVersion( $DBversion ) ) {
21578 if( !column_exists( 'suggestions', 'archived' ) ) {
21579 $dbh->do(q|
21580 ALTER TABLE suggestions ADD COLUMN archived TINYINT(1) NOT NULL DEFAULT 0 AFTER `STATUS`;
21584 NewVersion( $DBversion, 22784, "Add a new suggestions.archived column");
21587 $DBversion = '19.12.00.070';
21588 if( CheckVersion( $DBversion ) ) {
21590 $dbh->do( q{
21591 INSERT IGNORE INTO systempreferences (variable,value,explanation,type) VALUES
21592 ('MaxTotalSuggestions','','Number of total suggestions used for time limit with NumberOfSuggestionDays','Free'),
21593 ('NumberOfSuggestionDays','','Number of days that will be used to determine the MaxTotalSuggestions limit','Free')
21596 NewVersion( $DBversion, 22774, "Limit purchase suggestion in a specified time period");
21599 $DBversion = '19.12.00.071';
21600 if( CheckVersion( $DBversion ) ) {
21601 my @description = ("Add unique constraint to authorised_values");
21602 unless ( index_exists('authorised_values', 'av_uniq') ) {
21603 $dbh->do(q|
21604 DELETE FROM authorised_values
21605 WHERE category="COUNTRY" AND authorised_value="CC" AND lib="Keeling"
21607 my $duplicates = $dbh->selectall_arrayref(q|
21608 SELECT category, authorised_value, COUNT(concat(category, ':', authorised_value)) AS c
21609 FROM authorised_values
21610 GROUP BY category, authorised_value
21611 HAVING COUNT(concat(category, ':', authorised_value)) > 1
21612 |, { Slice => {} });
21613 if ( @$duplicates ) {
21614 push @description, "WARNING - Cannot create unique constraint on authorised_value(category, authorised_value)";
21615 push @description, "The following entries are duplicated: " . join(
21616 ', ',
21617 map {
21618 sprintf "%s:%s (%s)", $_->{category},
21619 $_->{authorised_value}, $_->{c}
21620 } @$duplicates
21622 for my $warning (@description) {
21623 warn $warning;
21625 } else {
21626 $dbh->do( q{ALTER TABLE `authorised_values` ADD CONSTRAINT `av_uniq` UNIQUE (category, authorised_value)} );
21630 NewVersion( $DBversion, 22887, \@description );
21633 $DBversion = '19.12.00.072';
21634 if( CheckVersion( $DBversion ) ) {
21635 $dbh->do(q{
21636 INSERT IGNORE INTO systempreferences ( `variable`, `value`, `options`, `explanation`, `type` )
21637 SELECT 'CalculateFinesOnBackdate',value,'','Switch to control if overdue fines are calculated on return when backdating','YesNo'
21638 FROM ( SELECT value FROM systempreferences WHERE variable = 'CalculateFinesOnReturn' ) tmp
21641 NewVersion( $DBversion, 24380, "Add syspref CalculateFinesOnBackdate");
21644 $DBversion = '19.12.00.073';
21645 if( CheckVersion( $DBversion ) ) {
21646 $dbh->do( "ALTER TABLE subscription MODIFY COLUMN closed tinyint(1) not null default 0" );
21648 NewVersion( $DBversion, 25152, "Update subscription.closed to tinyint(1) as per guidelines");
21651 $DBversion = '19.12.00.074';
21652 if( CheckVersion( $DBversion ) ) {
21653 $dbh->do( "UPDATE systempreferences SET variable = 'SCOAllowCheckin' WHERE variable = 'AllowSelfCheckReturns'" );
21655 # Always end with this (adjust the bug info)
21656 NewVersion( $DBversion, 25147, "Rename AllowSelfCheckReturns to SCOAllowCheckin for consistency");
21659 $DBversion = '19.12.00.075';
21660 if( CheckVersion( $DBversion ) ) {
21662 $dbh->do( "ALTER TABLE borrower_modifications MODIFY changed_fields MEDIUMTEXT DEFAULT NULL" );
21664 NewVersion( $DBversion, 25086, "Set changed_fields column of borrower_modifications as nullable");
21667 $DBversion = '19.12.00.076';
21668 if( CheckVersion( $DBversion ) ) {
21669 my @warnings;
21671 $dbh->do(q|
21672 UPDATE
21673 serial
21675 planneddate = NULL
21676 WHERE
21677 planneddate = '0000-00-00'
21680 $dbh->do(q|
21681 UPDATE
21682 serial
21684 publisheddate = NULL
21685 WHERE
21686 publisheddate = '0000-00-00'
21689 $dbh->do(q|
21690 UPDATE
21691 serial
21693 claimdate = NULL
21694 WHERE
21695 claimdate = '0000-00-00'
21698 $dbh->do(q|
21699 ALTER TABLE serial
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 WHERE biblionumber NOT IN (SELECT biblionumber FROM biblio)
21706 |, { Slice => {} });
21707 if ( @$serials ) {
21708 push @warnings, q|WARNING - The following serials are deleted, they were not attached to an existing bibliographic record (serialid): | . join ", ", map { $_->{serialid} } @$serials;
21709 $dbh->do(q|
21710 DELETE FROM serial WHERE biblionumber NOT IN (SELECT biblionumber FROM biblio)
21713 $dbh->do(q|
21714 ALTER TABLE serial
21715 ADD CONSTRAINT serial_ibfk_1 FOREIGN KEY (biblionumber) REFERENCES biblio (biblionumber) ON DELETE CASCADE ON UPDATE CASCADE
21719 $dbh->do(q|
21720 ALTER TABLE serial
21721 MODIFY COLUMN subscriptionid INT(11) NOT NULL
21724 unless ( foreign_key_exists( 'serial', 'serial_ibfk_2' ) ) {
21725 my $serials = $dbh->selectall_arrayref(q|
21726 SELECT serialid FROM serial WHERE subscriptionid NOT IN (SELECT subscriptionid FROM subscription)
21727 |, { Slice => {} });
21728 if ( @$serials ) {
21729 push @warnings, q|WARNING - The following serials are deleted, they were not attached to an existing subscription (serialid): | . join ", ", map { $_->{serialid} } @$serials;
21730 $dbh->do(q|
21731 DELETE FROM serial WHERE subscriptionid NOT IN (SELECT subscriptionid FROM subscription)
21734 $dbh->do(q|
21735 ALTER TABLE serial
21736 ADD CONSTRAINT serial_ibfk_2 FOREIGN KEY (subscriptionid) REFERENCES subscription (subscriptionid) ON DELETE CASCADE ON UPDATE CASCADE
21740 $dbh->do(q|
21741 ALTER TABLE subscriptionhistory
21742 MODIFY COLUMN biblionumber int(11) NOT NULL,
21743 MODIFY COLUMN subscriptionid int(11) NOT NULL
21746 unless ( foreign_key_exists( 'subscriptionhistory', 'subscription_history_ibfk_1' ) ) {
21747 $dbh->do(q|
21748 DELETE FROM subscriptionhistory WHERE biblionumber NOT IN (SELECT biblionumber FROM biblio)
21750 $dbh->do(q|
21751 ALTER TABLE subscriptionhistory
21752 ADD CONSTRAINT subscription_history_ibfk_1 FOREIGN KEY (biblionumber) REFERENCES biblio (biblionumber) ON DELETE CASCADE ON UPDATE CASCADE
21756 unless ( foreign_key_exists( 'subscriptionhistory', 'subscription_history_ibfk_2' ) ) {
21757 $dbh->do(q|
21758 DELETE FROM subscriptionhistory WHERE subscriptionid NOT IN (SELECT subscriptionid FROM subscription)
21760 $dbh->do(q|
21761 ALTER TABLE subscriptionhistory
21762 ADD CONSTRAINT subscription_history_ibfk_2 FOREIGN KEY (subscriptionid) REFERENCES subscription (subscriptionid) ON DELETE CASCADE ON UPDATE CASCADE
21766 $dbh->do(q|
21767 ALTER TABLE subscription
21768 MODIFY COLUMN biblionumber int(11) NOT NULL
21771 unless ( foreign_key_exists( 'subscription', 'subscription_ibfk_3' ) ) {
21772 my $subscriptions = $dbh->selectall_arrayref(q|
21773 SELECT subscriptionid FROM subscription WHERE biblionumber NOT IN (SELECT biblionumber FROM biblio)
21774 |, { Slice => {} });
21775 if ( @$subscriptions ) {
21776 push @warnings, q|WARNING - The following subscriptions are deleted, they were not attached to an existing bibliographic record (subscriptionid): | . join ", ", map { $_->{subscriptionid} } @$subscriptions;
21778 $dbh->do(q|
21779 DELETE FROM subscription WHERE biblionumber NOT IN (SELECT biblionumber FROM biblio)
21782 $dbh->do(q|
21783 ALTER TABLE subscription
21784 ADD CONSTRAINT subscription_ibfk_3 FOREIGN KEY (biblionumber) REFERENCES biblio (biblionumber) ON DELETE CASCADE ON UPDATE CASCADE
21788 for my $warning (@warnings) {
21789 warn $warning;
21792 my $description = [ "Add foreign key constraints on serial", @warnings ];
21793 NewVersion( $DBversion, 21901, $description);
21796 $DBversion = '19.12.00.077';
21797 if( CheckVersion( $DBversion ) ) {
21798 if ( !column_exists( 'course_items', 'itype_enabled' ) ) {
21799 $dbh->do(q{
21800 ALTER TABLE course_items
21801 ADD COLUMN itype_enabled tinyint(1) NOT NULL DEFAULT 0 AFTER itype,
21802 ADD COLUMN ccode_enabled tinyint(1) NOT NULL DEFAULT 0 AFTER ccode,
21803 ADD COLUMN holdingbranch_enabled tinyint(1) NOT NULL DEFAULT 0 AFTER holdingbranch,
21804 ADD COLUMN location_enabled tinyint(1) NOT NULL DEFAULT 0 AFTER location,
21805 ADD COLUMN itype_storage varchar(10) DEFAULT NULL AFTER itype_enabled,
21806 ADD COLUMN ccode_storage varchar(80) DEFAULT NULL AFTER ccode_enabled,
21807 ADD COLUMN holdingbranch_storage varchar(10) DEFAULT NULL AFTER ccode_enabled,
21808 ADD COLUMN location_storage varchar(80) DEFAULT NULL AFTER location_enabled
21811 my $item_level_items = C4::Context->preference('item-level_itypes');
21812 my $itype_field = $item_level_items ? 'i.itype' : 'bi.itemtype';
21813 $dbh->do(qq{
21814 UPDATE course_items ci
21815 LEFT JOIN items i USING ( itemnumber )
21816 LEFT JOIN biblioitems bi USING ( biblioitemnumber )
21819 -- Assume the column is enabled if the course item is active and i.itype/bi.itemtype is set,
21820 -- or if the course item is not enabled and ci.itype is set
21821 ci.itype_enabled = IF( ci.enabled = 'yes', IF( $itype_field IS NULL, 0, 1 ), IF( ci.itype IS NULL, 0, 1 ) ),
21822 ci.ccode_enabled = IF( ci.enabled = 'yes', IF( i.ccode IS NULL, 0, 1 ), IF( ci.ccode IS NULL, 0, 1 ) ),
21823 ci.holdingbranch_enabled = IF( ci.enabled = 'yes', IF( i.holdingbranch IS NULL, 0, 1 ), IF( ci.holdingbranch IS NULL, 0, 1 ) ),
21824 ci.location_enabled = IF( ci.enabled = 'yes', IF( i.location IS NULL, 0, 1 ), IF( ci.location IS NULL, 0, 1 ) ),
21826 -- If the course item is enabled, copy the value from the item.
21827 -- If the course item is not enabled, keep the existing value
21828 ci.itype = IF( ci.enabled = 'yes', $itype_field, ci.itype ),
21829 ci.ccode = IF( ci.enabled = 'yes', i.ccode, ci.ccode ),
21830 ci.holdingbranch = IF( ci.enabled = 'yes', i.holdingbranch, ci.holdingbranch ),
21831 ci.location = IF( ci.enabled = 'yes', i.location, ci.location ),
21833 -- If the course is enabled, copy the value from the item to storage.
21834 -- If it is not enabled, copy the value from the course item to storage
21835 ci.itype_storage = IF( ci.enabled = 'no', $itype_field, ci.itype ),
21836 ci.ccode_storage = IF( ci.enabled = 'no', i.ccode, ci.ccode ),
21837 ci.holdingbranch_storage = IF( ci.enabled = 'no', i.holdingbranch, ci.holdingbranch ),
21838 ci.location_storage = IF( ci.enabled = 'no', i.location, ci.location );
21841 # Clean up the storage columns
21842 $dbh->do(q{
21843 UPDATE course_items SET
21844 itype_storage = NULL,
21845 ccode_storage = NULL,
21846 holdingbranch_storage = NULL,
21847 location_storage = NULL
21848 WHERE enabled = 'no';
21851 # Clean up the course enabled value columns
21852 $dbh->do(q{
21853 UPDATE course_items SET
21854 itype = IF( itype_enabled = 'no', NULL, itype ),
21855 ccode = IF( ccode_enabled = 'no', NULL, ccode ),
21856 holdingbranch = IF( holdingbranch_enabled = 'no', NULL, holdingbranch ),
21857 location = IF( location_enabled = 'no', NULL, location )
21858 WHERE enabled = 'no';
21862 NewVersion( $DBversion, 23727, "Editing course reserve items is broken");
21865 $DBversion = '19.12.00.078';
21866 if( CheckVersion( $DBversion ) ) {
21867 $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') });
21869 NewVersion( $DBversion, 24913, "Add PatronSelfRegistrationConfirmEmail syspref");
21872 $DBversion = '19.12.00.079';
21873 if( CheckVersion( $DBversion ) ) {
21875 # Default to the homologous OpacPublic syspref
21876 my $opac_public = C4::Context->preference('OpacPublic') ? 1 : 0;
21878 $dbh->do(qq{
21879 INSERT IGNORE INTO `systempreferences`
21880 (`variable`,`value`,`explanation`,`options`,`type`)
21881 VALUES
21882 ('RESTPublicAnonymousRequests', $opac_public, NULL,'If enabled, the API will allow anonymous access to public routes that do not require authenticated access.','YesNo');
21885 NewVersion( $DBversion, 25045, "Add a way to restrict anonymous access to public routes (OpacPublic behaviour)");
21888 $DBversion = '19.12.00.080';
21889 if( CheckVersion( $DBversion ) ) {
21890 $dbh->do( "UPDATE items set issues=0 where issues is null" );
21891 $dbh->do( "UPDATE deleteditems set issues=0 where issues is null" );
21892 $dbh->do( "ALTER TABLE items ALTER issues set default 0" );
21893 $dbh->do( "ALTER TABLE deleteditems ALTER issues set default 0" );
21895 NewVersion( $DBversion, 23081, "Set default to 0 for items.issues");
21898 $DBversion = '19.12.00.081';
21899 if (CheckVersion($DBversion)) {
21900 if (!column_exists('course_items', 'homebranch')) {
21901 $dbh->do(q{
21902 ALTER TABLE course_items
21903 ADD COLUMN homebranch VARCHAR(10) NULL DEFAULT NULL AFTER ccode_storage
21907 if (!foreign_key_exists('course_items', 'fk_course_items_homebranch')) {
21908 $dbh->do(q{
21909 ALTER TABLE course_items
21910 ADD CONSTRAINT fk_course_items_homebranch
21911 FOREIGN KEY (homebranch) REFERENCES branches (branchcode)
21912 ON DELETE CASCADE ON UPDATE CASCADE
21916 if (!column_exists('course_items', 'homebranch_enabled')) {
21917 $dbh->do(q{
21918 ALTER TABLE course_items
21919 ADD COLUMN homebranch_enabled tinyint(1) NOT NULL DEFAULT 0 AFTER homebranch
21923 if (!column_exists('course_items', 'homebranch_storage')) {
21924 $dbh->do(q{
21925 ALTER TABLE course_items
21926 ADD COLUMN homebranch_storage VARCHAR(10) NULL DEFAULT NULL AFTER homebranch_enabled
21930 if (!foreign_key_exists('course_items', 'fk_course_items_homebranch_storage')) {
21931 $dbh->do(q{
21932 ALTER TABLE course_items
21933 ADD CONSTRAINT fk_course_items_homebranch_storage
21934 FOREIGN KEY (homebranch_storage) REFERENCES branches (branchcode)
21935 ON DELETE CASCADE ON UPDATE CASCADE
21939 NewVersion( $DBversion, 22630, "Add course_items.homebranch");
21942 $DBversion = '19.12.00.082';
21943 if( CheckVersion( $DBversion ) ) {
21945 # get list of installed translations
21946 require C4::Languages;
21947 my @langs;
21948 my $tlangs = C4::Languages::getTranslatedLanguages('opac','bootstrap');
21950 foreach my $language ( @$tlangs ) {
21951 foreach my $sublanguage ( @{$language->{'sublanguages_loop'}} ) {
21952 push @langs, $sublanguage->{'rfc4646_subtag'};
21956 # Get any existing value from the OpacMainUserBlock system preference
21957 my ($opacmainuserblock) = $dbh->selectrow_array( q|
21958 SELECT value FROM systempreferences WHERE variable='OpacMainUserBlock';
21961 my @detail;
21962 if( $opacmainuserblock ){
21963 foreach my $lang ( @langs ) {
21964 # If there is a value in the OpacMainUserBlock preference, insert it into opac_news
21965 $dbh->do("INSERT INTO opac_news (branchcode, lang, title, content ) VALUES (NULL, ?, '', ?)", undef, "OpacMainUserBlock_$lang", $opacmainuserblock);
21966 push @detail, "Inserting OpacMainUserBlock contents into $lang news item...";
21969 # Remove the OpacMainUserBlock system preference
21970 $dbh->do("DELETE FROM systempreferences WHERE variable='OpacMainUserBlock'");
21972 unshift @detail, "Move contents of OpacMainUserBlock preference to Koha news system";
21973 NewVersion( $DBversion, 23794, \@detail);
21976 $DBversion = '19.12.00.083';
21977 if( CheckVersion( $DBversion ) ) {
21979 unless ( column_exists( 'authorised_value_categories', 'is_system' ) ) {
21980 $dbh->do(q|
21981 ALTER TABLE authorised_value_categories
21982 ADD COLUMN is_system TINYINT(1) DEFAULT 0 AFTER category_name
21986 $dbh->do(q|
21987 UPDATE authorised_value_categories
21988 SET is_system = 1
21989 WHERE category_name IN ('LOC', 'LOST', 'WITHDRAWN', 'Bsort1', 'Bsort2', 'Asort1', 'Asort2', 'SUGGEST', 'DAMAGED', 'LOST', 'BOR_NOTES', 'CCODE', 'NOT_LOAN')
21992 $dbh->do(q|
21993 UPDATE authorised_value_categories
21994 SET is_system = 1
21995 WHERE category_name IN ('branches', 'itemtypes', 'cn_source')
21998 NewVersion( $DBversion, 17355, "Add is_system to authorised_value_categories table");
22001 $DBversion = '19.12.00.084';
22002 if( CheckVersion( $DBversion ) ) {
22003 unless ( TableExists('advanced_editor_macros') ) {
22004 $dbh->do(q|
22005 CREATE TABLE advanced_editor_macros (
22006 id INT(11) NOT NULL AUTO_INCREMENT,
22007 name varchar(80) NOT NULL,
22008 macro longtext NULL,
22009 borrowernumber INT(11) default NULL,
22010 shared TINYINT(1) default 0,
22011 PRIMARY KEY (id),
22012 CONSTRAINT borrower_macro_fk FOREIGN KEY ( borrowernumber ) REFERENCES borrowers ( borrowernumber ) ON UPDATE CASCADE ON DELETE CASCADE
22013 ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;|
22016 $dbh->do(q|
22017 INSERT IGNORE INTO permissions (module_bit, code, description)
22018 VALUES (9, 'create_shared_macros', 'Create public macros')
22020 $dbh->do(q|
22021 INSERT IGNORE INTO permissions (module_bit, code, description)
22022 VALUES (9, 'delete_shared_macros', 'Delete public macros')
22025 NewVersion( $DBversion, 17682, "Add macros db table and permissions");
22028 $DBversion = '19.12.00.085';
22029 if( CheckVersion( $DBversion ) ) {
22030 unless ( TableExists( 'aqorders_claims' ) ) {
22031 $dbh->do(q|
22032 CREATE TABLE aqorders_claims (
22033 id int(11) AUTO_INCREMENT,
22034 ordernumber INT(11) NOT NULL,
22035 claimed_on TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
22036 PRIMARY KEY (id),
22037 CONSTRAINT aqorders_claims_ibfk_1 FOREIGN KEY (ordernumber) REFERENCES aqorders (ordernumber) ON DELETE CASCADE ON UPDATE CASCADE
22038 ) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_unicode_ci
22041 my $orders = $dbh->selectall_arrayref(q|
22042 SELECT ordernumber, claims_count, claimed_date
22043 FROM aqorders
22044 WHERE claims_count > 0
22045 |, { Slice => {} });
22046 my $insert_claim_sth = $dbh->prepare(q|
22047 INSERT INTO aqorders_claims (ordernumber, claimed_on)
22048 VALUES (?,?)
22051 for my $order ( @$orders ) {
22052 for my $claim (1..$order->{claims_count}) {
22053 $insert_claim_sth->execute($order->{ordernumber}, $order->{claimed_on});
22057 $dbh->do(q|ALTER TABLE aqorders DROP COLUMN claims_count, DROP COLUMN claimed_date|);
22060 NewVersion( $DBversion, 24161, "Add new join table aqorders_claims to keep track of claims");
22063 $DBversion = '19.12.00.086';
22064 if( CheckVersion( $DBversion ) ) {
22065 $dbh->do(q{
22066 INSERT IGNORE INTO export_format( profile, description, content, csv_separator, type, used_for ) VALUES
22067 ("Late orders (CSV profile)", "Default CSV export for late orders", 'Title[% separator %]Author[% separator %]Publication year[% separator %]ISBN[% separator %]Quantity[% separator %]Number of claims
22068 [% FOR order IN orders ~%]
22069 [%~ SET biblio = order.biblio ~%]
22070 "[% biblio.title %]"[% separator ~%]
22071 "[% biblio.author %]"[% separator ~%]
22072 "[% bibio.biblioitem.publicationyear %]"[% separator ~%]
22073 "[% biblio.biblioitem.isbn %]"[% separator ~%]
22074 "[% order.quantity%]"[% separator ~%]
22075 "[% order.claims.count%][% IF order.claims.count %]([% FOR c IN order.claims %][% c.claimed_on | $KohaDates %][% UNLESS loop.last %], [% END %][% END %])[% END %]"
22076 [% END %]', ",", "sql", "late_orders")
22079 NewVersion( $DBversion, 24163, "Define a default CSV profile for late orders");
22082 $DBversion = '19.12.00.087';
22083 if( CheckVersion( $DBversion ) ) {
22084 $dbh->do(q{
22085 INSERT IGNORE INTO systempreferences ( `variable`, `value`, `options`, `explanation`, `type` ) VALUES
22086 ('TrapHoldsOnOrder','1',NULL,'If enabled, Koha will trap holds for on order items ( notforloan < 0 )','YesNo')
22089 NewVersion( $DBversion, 25184, "Items with a negative notforloan status should not be captured for holds");
22092 $DBversion = '19.12.00.088';
22093 if( CheckVersion( $DBversion ) ) {
22095 $dbh->do(q{
22096 UPDATE letter SET
22097 name = REPLACE(name, "notification on auto renewing", "Notification of automatic renewal"),
22098 title = REPLACE(title, "Auto renewals", "Automatic renewal notice"),
22099 content = REPLACE(content, "You have reach the maximum of checkouts possible.", "You have reached the maximum number of checkouts possible.")
22100 WHERE code = 'AUTO_RENEWALS';
22102 $dbh->do(q{
22103 UPDATE letter SET
22104 content = REPLACE(content, "You have overdues.", "You have overdue items.")
22105 WHERE code = 'AUTO_RENEWALS';
22107 $dbh->do(q{
22108 UPDATE letter SET
22109 content = REPLACE(content, "It's too late to renew this checkout.", "It's too late to renew this item.")
22110 WHERE code = 'AUTO_RENEWALS';
22112 $dbh->do(q{
22113 UPDATE letter SET
22114 content = REPLACE(content, "You have too much unpaid fines.", "Your total unpaid fines are too high.")
22115 WHERE code = 'AUTO_RENEWALS';
22117 $dbh->do(q{
22118 UPDATE letter SET
22119 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 as_due_date => 1 %]
22121 WHERE code = 'AUTO_RENEWALS';
22124 NewVersion( $DBversion, 24378, "Fix some grammatical errors in default auto renewal notice");
22127 $DBversion = '19.12.00.089';
22128 if( CheckVersion( $DBversion ) ) {
22130 # Migrate LOST_RETURNED to LOST_FOUND
22131 $dbh->do(qq{
22132 UPDATE
22133 accountlines
22135 credit_type_code = 'LOST_FOUND'
22136 WHERE
22137 credit_type_code = 'LOST_RETURNED'
22140 # Drop LOST_RETURNED credit type
22141 $dbh->do(qq{
22142 DELETE FROM account_credit_types WHERE code = 'LOST_RETURNED'
22145 NewVersion( $DBversion, 25389, "Catch errant cases of LOST_RETURNED");
22148 $DBversion = '19.12.00.090';
22149 if ( CheckVersion($DBversion) ) {
22151 $dbh->do(
22153 INSERT IGNORE INTO systempreferences (variable,value,options,explanation,type) VALUES
22154 ('UseIssueDesks','0','','Use issue desks with circulation.','YesNo')
22158 NewVersion( $DBversion, 13881, "Add issue desks system preference");
22161 $DBversion = '19.12.00.091';
22162 if ( CheckVersion($DBversion) ) {
22164 $dbh->do(qq{
22165 UPDATE systempreferences SET variable = 'UseCirculationDesks' WHERE variable = 'UseIssueDesks'
22168 NewVersion( $DBversion, 13881, "Correction to preference terminology");
22171 $DBversion = '20.05.00.000';
22172 if( CheckVersion( $DBversion ) ) {
22173 NewVersion( $DBversion, undef, '20.05.00 alpha release' );
22176 $DBversion = '20.06.00.000';
22177 if( CheckVersion( $DBversion ) ) {
22178 NewVersion( $DBversion, undef, 'All our codebase are belong to everybody' );
22181 $DBversion = '20.06.00.001';
22182 if( CheckVersion( $DBversion ) ) {
22183 for my $f (qw( streetnumber streettype zipcode mobile B_streetnumber B_streettype B_zipcode ) ) {
22184 $dbh->do(qq|
22185 ALTER TABLE borrowers MODIFY $f TINYTEXT DEFAULT NULL
22187 $dbh->do(qq|
22188 ALTER TABLE deletedborrowers MODIFY $f TINYTEXT DEFAULT NULL
22191 for my $f ( qw( B_address altcontactfirstname altcontactsurname altcontactaddress1 altcontactaddress2 altcontactaddress3 altcontactzipcode altcontactphone ) ) {
22192 $dbh->do(qq|
22193 ALTER TABLE borrowers MODIFY $f MEDIUMTEXT DEFAULT NULL
22195 $dbh->do(qq|
22196 ALTER TABLE deletedborrowers MODIFY $f MEDIUMTEXT DEFAULT NULL
22200 NewVersion( $DBversion, 24986, "Switch borrowers address related fields to TINYTEXT or MEDIUMTEXT");
22203 $DBversion = '20.06.00.002';
22204 if( CheckVersion( $DBversion ) ) {
22205 $dbh->do(q{
22206 INSERT IGNORE INTO systempreferences ( `variable`, `value`, `options`, `explanation`, `type` ) VALUES
22207 ('SkipHoldTrapOnNotForLoanValue','',NULL,'If set, Koha will never trap items for hold with this notforloan value','Integer')
22210 NewVersion( $DBversion, 25184, "Items with a negative notforloan status should not be captured for holds");
22213 $DBversion = '20.06.00.003';
22214 if( CheckVersion( $DBversion ) ) {
22215 unless ( TableExists( 'tables_settings' ) ) {
22216 $dbh->do(q|
22217 CREATE TABLE tables_settings (
22218 module varchar(255) NOT NULL,
22219 page varchar(255) NOT NULL,
22220 tablename varchar(255) NOT NULL,
22221 default_display_length smallint(6) NOT NULL DEFAULT 20,
22222 default_sort_order varchar(255),
22223 PRIMARY KEY(module (191), page (191), tablename (191) )
22224 ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
22228 NewVersion( $DBversion, 24156, "Add new table tables_settings" );
22231 # SEE bug 13068
22232 # if there is anything in the atomicupdate, read and execute it.
22233 my $update_dir = C4::Context->config('intranetdir') . '/installer/data/mysql/atomicupdate/';
22234 opendir( my $dirh, $update_dir );
22235 foreach my $file ( sort readdir $dirh ) {
22236 next if $file !~ /\.(sql|perl)$/; #skip other files
22237 next if $file eq 'skeleton.perl'; # skip the skeleton file
22238 print "DEV atomic update: $file\n";
22239 if ( $file =~ /\.sql$/ ) {
22240 my $installer = C4::Installer->new();
22241 my $rv = $installer->load_sql( $update_dir . $file ) ? 0 : 1;
22242 } elsif ( $file =~ /\.perl$/ ) {
22243 my $code = read_file( $update_dir . $file );
22244 eval $code;
22245 say "Atomic update generated errors: $@" if $@;
22249 =head1 FUNCTIONS
22251 =head2 DropAllForeignKeys($table)
22253 Drop all foreign keys of the table $table
22255 =cut
22257 sub DropAllForeignKeys {
22258 my ($table) = @_;
22259 # get the table description
22260 my $sth = $dbh->prepare("SHOW CREATE TABLE $table");
22261 $sth->execute;
22262 my $vsc_structure = $sth->fetchrow;
22263 # split on CONSTRAINT keyword
22264 my @fks = split /CONSTRAINT /,$vsc_structure;
22265 # parse each entry
22266 foreach (@fks) {
22267 # isolate what is before FOREIGN KEY, if there is something, it's a foreign key to drop
22268 $_ = /(.*) FOREIGN KEY.*/;
22269 my $id = $1;
22270 if ($id) {
22271 # we have found 1 foreign, drop it
22272 $dbh->do("ALTER TABLE $table DROP FOREIGN KEY $id");
22273 $id="";
22279 =head2 TransformToNum
22281 Transform the Koha version from a 4 parts string
22282 to a number, with just 1 .
22284 =cut
22286 sub TransformToNum {
22287 my $version = shift;
22288 # remove the 3 last . to have a Perl number
22289 $version =~ s/(.*\..*)\.(.*)\.(.*)/$1$2$3/;
22290 # three X's at the end indicate that you are testing patch with dbrev
22291 # change it into 999
22292 # prevents error on a < comparison between strings (should be: lt)
22293 $version =~ s/XXX$/999/;
22294 return $version;
22297 =head2 SetVersion
22299 set the DBversion in the systempreferences
22301 =cut
22303 sub SetVersion {
22304 return if $_[0]=~ /XXX$/;
22305 #you are testing a patch with a db revision; do not change version
22306 my $kohaversion = TransformToNum($_[0]);
22307 if (C4::Context->preference('Version')) {
22308 my $finish=$dbh->prepare("UPDATE systempreferences SET value=? WHERE variable='Version'");
22309 $finish->execute($kohaversion);
22310 } else {
22311 my $finish=$dbh->prepare("INSERT into systempreferences (variable,value,explanation) values ('Version',?,'The Koha database version. WARNING: Do not change this value manually, it is maintained by the webinstaller')");
22312 $finish->execute($kohaversion);
22314 C4::Context::clear_syspref_cache(); # invalidate cached preferences
22317 sub NewVersion {
22318 my ( $DBversion, $bug_number, $descriptions ) = @_;
22320 SetVersion($DBversion);
22322 unless ( ref($descriptions) ) {
22323 $descriptions = [ $descriptions ];
22325 my $first = 1;
22326 my $time = POSIX::strftime("%H:%M:%S",localtime);
22327 for my $description ( @$descriptions ) {
22328 if ( @$descriptions > 1 ) {
22329 if ( $first ) {
22330 unless ( $bug_number ) {
22331 say sprintf "Upgrade to %s done [%s]: %s", $DBversion, $time, $description;
22332 } else {
22333 say sprintf "Upgrade to %s done [%s]: Bug %5s - %s", $DBversion, $time, $bug_number, $description;
22335 } else {
22336 say sprintf "\t\t\t\t\t\t - %s", $description;
22338 } else {
22339 unless ( $bug_number ) {
22340 say sprintf "Upgrade to %s done [%s]: %s", $DBversion, $time, $description;
22341 } else {
22342 say sprintf "Upgrade to %s done [%s]: Bug %5s - %s", $DBversion, $time, $bug_number, $description;
22345 $first = 0;
22349 =head2 CheckVersion
22351 Check whether a given update should be run when passed the proposed version
22352 number. The update will always be run if the proposed version is greater
22353 than the current database version and less than or equal to the version in
22354 kohaversion.pl. The update is also run if the version contains XXX, though
22355 this behavior will be changed following the adoption of non-linear updates
22356 as implemented in bug 7167.
22358 =cut
22360 sub CheckVersion {
22361 my ($proposed_version) = @_;
22362 my $version_number = TransformToNum($proposed_version);
22364 # The following line should be deleted when bug 7167 is pushed
22365 return 1 if ( $proposed_version =~ m/XXX/ );
22367 if ( C4::Context->preference("Version") < $version_number
22368 && $version_number <= TransformToNum( $Koha::VERSION ) )
22370 return 1;
22372 else {
22373 return 0;
22377 exit;