Bug 10565: DBrev 3.13.00.031
[koha.git] / installer / data / mysql / updatedatabase.pl
1 #!/usr/bin/perl
2
3 # Database Updater
4 # This script checks for required updates to the database.
5
6 # Parts copyright Catalyst IT 2011
7
8 # Part of the Koha Library Software www.koha-community.org
9 # Koha is free software; you can redistribute it and/or modify it under the
10 # terms of the GNU General Public License as published by the Free Software
11 # Foundation; either version 2 of the License, or (at your option) any later
12 # version.
13 #
14 # Koha is distributed in the hope that it will be useful, but WITHOUT ANY
15 # WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
16 # A PARTICULAR PURPOSE.  See the GNU General Public License for more details.
17 #
18 # You should have received a copy of the GNU General Public License along
19 # with Koha; if not, write to the Free Software Foundation, Inc.,
20 # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
21 #
22
23 # Bugs/ToDo:
24 # - Would also be a good idea to offer to do a backup at this time...
25
26 # NOTE:  If you do something more than once in here, make it table driven.
27
28 # NOTE: Please keep the version in kohaversion.pl up-to-date!
29
30 use strict;
31 use warnings;
32
33 # CPAN modules
34 use DBI;
35 use Getopt::Long;
36 # Koha modules
37 use C4::Context;
38 use C4::Installer;
39 use C4::Dates;
40
41 use MARC::Record;
42 use MARC::File::XML ( BinaryEncoding => 'utf8' );
43
44 # FIXME - The user might be installing a new database, so can't rely
45 # on /etc/koha.conf anyway.
46
47 my $debug = 0;
48
49 my (
50     $sth, $sti,
51     $query,
52     %existingtables,    # tables already in database
53     %types,
54     $table,
55     $column,
56     $type, $null, $key, $default, $extra,
57     $prefitem,          # preference item in systempreferences table
58 );
59
60 my $silent;
61 GetOptions(
62     's' =>\$silent
63     );
64 my $dbh = C4::Context->dbh;
65 $|=1; # flushes output
66
67 local $dbh->{RaiseError} = 0;
68
69 # Record the version we are coming from
70
71 my $original_version = C4::Context->preference("Version");
72
73 # Deal with virtualshelves
74 my $DBversion = "3.00.00.001";
75 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
76     # update virtualshelves table to
77     #
78     $dbh->do("ALTER TABLE `bookshelf` RENAME `virtualshelves`");
79     $dbh->do("ALTER TABLE `shelfcontents` RENAME `virtualshelfcontents`");
80     $dbh->do("ALTER TABLE `virtualshelfcontents` ADD `biblionumber` INT( 11 ) NOT NULL default '0' AFTER shelfnumber");
81     $dbh->do("UPDATE `virtualshelfcontents` SET biblionumber=(SELECT biblionumber FROM items WHERE items.itemnumber=virtualshelfcontents.itemnumber)");
82     # drop all foreign keys : otherwise, we can't drop itemnumber field.
83     DropAllForeignKeys('virtualshelfcontents');
84     $dbh->do("ALTER TABLE `virtualshelfcontents` ADD KEY biblionumber (biblionumber)");
85     # create the new foreign keys (on biblionumber)
86     $dbh->do("ALTER TABLE `virtualshelfcontents` ADD CONSTRAINT `virtualshelfcontents_ibfk_1` FOREIGN KEY (`shelfnumber`) REFERENCES `virtualshelves` (`shelfnumber`) ON DELETE CASCADE ON UPDATE CASCADE");
87     # re-create the foreign key on virtualshelf
88     $dbh->do("ALTER TABLE `virtualshelfcontents` ADD CONSTRAINT `shelfcontents_ibfk_2` FOREIGN KEY (`biblionumber`) REFERENCES `biblio` (`biblionumber`) ON DELETE CASCADE ON UPDATE CASCADE");
89     $dbh->do("ALTER TABLE `virtualshelfcontents` DROP `itemnumber`");
90     print "Upgrade to $DBversion done (virtualshelves)\n";
91     SetVersion ($DBversion);
92 }
93
94
95 $DBversion = "3.00.00.002";
96 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
97     $dbh->do("DROP TABLE sessions");
98     $dbh->do("CREATE TABLE `sessions` (
99   `id` varchar(32) NOT NULL,
100   `a_session` text NOT NULL,
101   UNIQUE KEY `id` (`id`)
102 ) ENGINE=InnoDB DEFAULT CHARSET=utf8;");
103     print "Upgrade to $DBversion done (sessions uses CGI::session, new table structure for sessions)\n";
104     SetVersion ($DBversion);
105 }
106
107
108 $DBversion = "3.00.00.003";
109 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
110     if (C4::Context->preference("opaclanguages") eq "fr") {
111         $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')");
112     } else {
113         $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')");
114     }
115     print "Upgrade to $DBversion done (adding ReservesNeedReturns systempref, in circulation)\n";
116     SetVersion ($DBversion);
117 }
118
119
120 $DBversion = "3.00.00.004";
121 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
122     $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')");
123     print "Upgrade to $DBversion done (adding DebugLevel systempref, in 'Admin' tab)\n";
124     SetVersion ($DBversion);
125 }
126
127 $DBversion = "3.00.00.005";
128 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
129     $dbh->do("CREATE TABLE `tags` (
130                     `entry` varchar(255) NOT NULL default '',
131                     `weight` bigint(20) NOT NULL default 0,
132                     PRIMARY KEY  (`entry`)
133                     ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
134                 ");
135         $dbh->do("CREATE TABLE `nozebra` (
136                 `server` varchar(20)     NOT NULL,
137                 `indexname` varchar(40)  NOT NULL,
138                 `value` varchar(250)     NOT NULL,
139                 `biblionumbers` longtext NOT NULL,
140                 KEY `indexname` (`server`,`indexname`),
141                 KEY `value` (`server`,`value`))
142                 ENGINE=InnoDB DEFAULT CHARSET=utf8;
143                 ");
144     print "Upgrade to $DBversion done (adding tags and nozebra tables )\n";
145     SetVersion ($DBversion);
146 }
147
148 $DBversion = "3.00.00.006";
149 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
150     $dbh->do("UPDATE issues SET issuedate=timestamp WHERE issuedate='0000-00-00'");
151     print "Upgrade to $DBversion done (filled issues.issuedate with timestamp)\n";
152     SetVersion ($DBversion);
153 }
154
155 $DBversion = "3.00.00.007";
156 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
157     $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')");
158     print "Upgrade to $DBversion done (set SessionStorage variable)\n";
159     SetVersion ($DBversion);
160 }
161
162 $DBversion = "3.00.00.008";
163 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
164     $dbh->do("ALTER TABLE `biblio` ADD `datecreated` DATE NOT NULL AFTER `timestamp` ;");
165     $dbh->do("UPDATE biblio SET datecreated=timestamp");
166     print "Upgrade to $DBversion done (biblio creation date)\n";
167     SetVersion ($DBversion);
168 }
169
170 $DBversion = "3.00.00.009";
171 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
172
173     # Create backups of call number columns
174     # in case default migration needs to be customized
175     #
176     # UPGRADE NOTE: temp_upg_biblioitems_call_num should be dropped
177     #               after call numbers have been transformed to the new structure
178     #
179     # Not bothering to do the same with deletedbiblioitems -- assume
180     # default is good enough.
181     $dbh->do("CREATE TABLE `temp_upg_biblioitems_call_num` AS
182               SELECT `biblioitemnumber`, `biblionumber`,
183                      `classification`, `dewey`, `subclass`,
184                      `lcsort`, `ccode`
185               FROM `biblioitems`");
186
187     # biblioitems changes
188     $dbh->do("ALTER TABLE `biblioitems` CHANGE COLUMN `volumeddesc` `volumedesc` TEXT,
189                                     ADD `cn_source` VARCHAR(10) DEFAULT NULL AFTER `ccode`,
190                                     ADD `cn_class` VARCHAR(30) DEFAULT NULL AFTER `cn_source`,
191                                     ADD `cn_item` VARCHAR(10) DEFAULT NULL AFTER `cn_class`,
192                                     ADD `cn_suffix` VARCHAR(10) DEFAULT NULL AFTER `cn_item`,
193                                     ADD `cn_sort` VARCHAR(30) DEFAULT NULL AFTER `cn_suffix`,
194                                     ADD `totalissues` INT(10) AFTER `cn_sort`");
195
196     # default mapping of call number columns:
197     #   cn_class = concatentation of classification + dewey,
198     #              trimmed to fit -- assumes that most users do not
199     #              populate both classification and dewey in a single record
200     #   cn_item  = subclass
201     #   cn_source = left null
202     #   cn_sort = lcsort
203     #
204     # After upgrade, cn_sort will have to be set based on whatever
205     # default call number scheme user sets as a preference.  Misc
206     # script will be added at some point to do that.
207     #
208     $dbh->do("UPDATE `biblioitems`
209               SET cn_class = SUBSTR(TRIM(CONCAT_WS(' ', `classification`, `dewey`)), 1, 30),
210                     cn_item = subclass,
211                     `cn_sort` = `lcsort`
212             ");
213
214     # Now drop the old call number columns
215     $dbh->do("ALTER TABLE `biblioitems` DROP COLUMN `classification`,
216                                         DROP COLUMN `dewey`,
217                                         DROP COLUMN `subclass`,
218                                         DROP COLUMN `lcsort`,
219                                         DROP COLUMN `ccode`");
220
221     # deletedbiblio changes
222     $dbh->do("ALTER TABLE `deletedbiblio` ALTER COLUMN `frameworkcode` SET DEFAULT '',
223                                         DROP COLUMN `marc`,
224                                         ADD `datecreated` DATE NOT NULL AFTER `timestamp`");
225     $dbh->do("UPDATE deletedbiblio SET datecreated = timestamp");
226
227     # deletedbiblioitems changes
228     $dbh->do("ALTER TABLE `deletedbiblioitems`
229                         MODIFY `publicationyear` TEXT,
230                         CHANGE `volumeddesc` `volumedesc` TEXT,
231                         MODIFY `collectiontitle` MEDIUMTEXT DEFAULT NULL AFTER `volumedesc`,
232                         MODIFY `collectionissn` TEXT DEFAULT NULL AFTER `collectiontitle`,
233                         MODIFY `collectionvolume` MEDIUMTEXT DEFAULT NULL AFTER `collectionissn`,
234                         MODIFY `editionstatement` TEXT DEFAULT NULL AFTER `collectionvolume`,
235                         MODIFY `editionresponsibility` TEXT DEFAULT NULL AFTER `editionstatement`,
236                         MODIFY `place` VARCHAR(255) DEFAULT NULL AFTER `size`,
237                         MODIFY `marc` LONGBLOB,
238                         ADD `cn_source` VARCHAR(10) DEFAULT NULL AFTER `url`,
239                         ADD `cn_class` VARCHAR(30) DEFAULT NULL AFTER `cn_source`,
240                         ADD `cn_item` VARCHAR(10) DEFAULT NULL AFTER `cn_class`,
241                         ADD `cn_suffix` VARCHAR(10) DEFAULT NULL AFTER `cn_item`,
242                         ADD `cn_sort` VARCHAR(30) DEFAULT NULL AFTER `cn_suffix`,
243                         ADD `totalissues` INT(10) AFTER `cn_sort`,
244                         ADD `marcxml` LONGTEXT NOT NULL AFTER `totalissues`,
245                         ADD KEY `isbn` (`isbn`),
246                         ADD KEY `publishercode` (`publishercode`)
247                     ");
248
249     $dbh->do("UPDATE `deletedbiblioitems`
250                 SET `cn_class` = SUBSTR(TRIM(CONCAT_WS(' ', `classification`, `dewey`)), 1, 30),
251                `cn_item` = `subclass`,
252                 `cn_sort` = `lcsort`
253             ");
254     $dbh->do("ALTER TABLE `deletedbiblioitems`
255                         DROP COLUMN `classification`,
256                         DROP COLUMN `dewey`,
257                         DROP COLUMN `subclass`,
258                         DROP COLUMN `lcsort`,
259                         DROP COLUMN `ccode`
260             ");
261
262     # deleteditems changes
263     $dbh->do("ALTER TABLE `deleteditems`
264                         MODIFY `barcode` VARCHAR(20) DEFAULT NULL,
265                         MODIFY `price` DECIMAL(8,2) DEFAULT NULL,
266                         MODIFY `replacementprice` DECIMAL(8,2) DEFAULT NULL,
267                         DROP `bulk`,
268                         MODIFY `itemcallnumber` VARCHAR(30) DEFAULT NULL AFTER `wthdrawn`,
269                         MODIFY `holdingbranch` VARCHAR(10) DEFAULT NULL,
270                         DROP `interim`,
271                         MODIFY `timestamp` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP AFTER `paidfor`,
272                         DROP `cutterextra`,
273                         ADD `cn_source` VARCHAR(10) DEFAULT NULL AFTER `onloan`,
274                         ADD `cn_sort` VARCHAR(30) DEFAULT NULL AFTER `cn_source`,
275                         ADD `ccode` VARCHAR(10) DEFAULT NULL AFTER `cn_sort`,
276                         ADD `materials` VARCHAR(10) DEFAULT NULL AFTER `ccode`,
277                         ADD `uri` VARCHAR(255) DEFAULT NULL AFTER `materials`,
278                         MODIFY `marc` LONGBLOB AFTER `uri`,
279                         DROP KEY `barcode`,
280                         DROP KEY `itembarcodeidx`,
281                         DROP KEY `itembinoidx`,
282                         DROP KEY `itembibnoidx`,
283                         ADD UNIQUE KEY `delitembarcodeidx` (`barcode`),
284                         ADD KEY `delitembinoidx` (`biblioitemnumber`),
285                         ADD KEY `delitembibnoidx` (`biblionumber`),
286                         ADD KEY `delhomebranch` (`homebranch`),
287                         ADD KEY `delholdingbranch` (`holdingbranch`)");
288     $dbh->do("UPDATE deleteditems SET `ccode` = `itype`");
289     $dbh->do("ALTER TABLE deleteditems DROP `itype`");
290     $dbh->do("UPDATE `deleteditems` SET `cn_sort` = `itemcallnumber`");
291
292     # items changes
293     $dbh->do("ALTER TABLE `items` ADD `cn_source` VARCHAR(10) DEFAULT NULL AFTER `onloan`,
294                                 ADD `cn_sort` VARCHAR(30) DEFAULT NULL AFTER `cn_source`,
295                                 ADD `ccode` VARCHAR(10) DEFAULT NULL AFTER `cn_sort`,
296                                 ADD `materials` VARCHAR(10) DEFAULT NULL AFTER `ccode`,
297                                 ADD `uri` VARCHAR(255) DEFAULT NULL AFTER `materials`
298             ");
299     $dbh->do("ALTER TABLE `items`
300                         DROP KEY `itembarcodeidx`,
301                         ADD UNIQUE KEY `itembarcodeidx` (`barcode`)");
302
303     # map items.itype to items.ccode and
304     # set cn_sort to itemcallnumber -- as with biblioitems.cn_sort,
305     # will have to be subsequently updated per user's default
306     # classification scheme
307     $dbh->do("UPDATE `items` SET `cn_sort` = `itemcallnumber`,
308                             `ccode` = `itype`");
309
310     $dbh->do("ALTER TABLE `items` DROP `cutterextra`,
311                                 DROP `itype`");
312
313     print "Upgrade to $DBversion done (major changes to biblio, biblioitems, items, and deleted* versions of same\n";
314     SetVersion ($DBversion);
315 }
316
317 $DBversion = "3.00.00.010";
318 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
319     $dbh->do("CREATE INDEX `userid` ON borrowers (`userid`) ");
320     print "Upgrade to $DBversion done (userid index added)\n";
321     SetVersion ($DBversion);
322 }
323
324 $DBversion = "3.00.00.011";
325 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
326     $dbh->do("ALTER TABLE `branchcategories` CHANGE `categorycode` `categorycode` varchar(10) ");
327     $dbh->do("ALTER TABLE `branchcategories` CHANGE `categoryname` `categoryname` varchar(32) ");
328     $dbh->do("ALTER TABLE `branchcategories` ADD COLUMN `categorytype` varchar(16) ");
329     $dbh->do("UPDATE `branchcategories` SET `categorytype` = 'properties'");
330     $dbh->do("ALTER TABLE `branchrelations` CHANGE `categorycode` `categorycode` varchar(10) ");
331     print "Upgrade to $DBversion done (added branchcategory type)\n";
332     SetVersion ($DBversion);
333 }
334
335 $DBversion = "3.00.00.012";
336 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
337     $dbh->do("CREATE TABLE `class_sort_rules` (
338                                `class_sort_rule` varchar(10) NOT NULL default '',
339                                `description` mediumtext,
340                                `sort_routine` varchar(30) NOT NULL default '',
341                                PRIMARY KEY (`class_sort_rule`),
342                                UNIQUE KEY `class_sort_rule_idx` (`class_sort_rule`)
343                              ) ENGINE=InnoDB DEFAULT CHARSET=utf8");
344     $dbh->do("CREATE TABLE `class_sources` (
345                                `cn_source` varchar(10) NOT NULL default '',
346                                `description` mediumtext,
347                                `used` tinyint(4) NOT NULL default 0,
348                                `class_sort_rule` varchar(10) NOT NULL default '',
349                                PRIMARY KEY (`cn_source`),
350                                UNIQUE KEY `cn_source_idx` (`cn_source`),
351                                KEY `used_idx` (`used`),
352                                CONSTRAINT `class_source_ibfk_1` FOREIGN KEY (`class_sort_rule`)
353                                           REFERENCES `class_sort_rules` (`class_sort_rule`)
354                              ) ENGINE=InnoDB DEFAULT CHARSET=utf8");
355     $dbh->do("INSERT INTO `systempreferences` (variable,value,explanation,options,type)
356               VALUES('DefaultClassificationSource','ddc',
357                      'Default classification scheme used by the collection. E.g., Dewey, LCC, etc.', NULL,'free')");
358     $dbh->do("INSERT INTO `class_sort_rules` (`class_sort_rule`, `description`, `sort_routine`) VALUES
359                                ('dewey', 'Default filing rules for DDC', 'Dewey'),
360                                ('lcc', 'Default filing rules for LCC', 'LCC'),
361                                ('generic', 'Generic call number filing rules', 'Generic')");
362     $dbh->do("INSERT INTO `class_sources` (`cn_source`, `description`, `used`, `class_sort_rule`) VALUES
363                             ('ddc', 'Dewey Decimal Classification', 1, 'dewey'),
364                             ('lcc', 'Library of Congress Classification', 1, 'lcc'),
365                             ('udc', 'Universal Decimal Classification', 0, 'generic'),
366                             ('sudocs', 'SuDoc Classification (U.S. GPO)', 0, 'generic'),
367                             ('z', 'Other/Generic Classification Scheme', 0, 'generic')");
368     print "Upgrade to $DBversion done (classification sources added)\n";
369     SetVersion ($DBversion);
370 }
371
372 $DBversion = "3.00.00.013";
373 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
374     $dbh->do("CREATE TABLE `import_batches` (
375               `import_batch_id` int(11) NOT NULL auto_increment,
376               `template_id` int(11) default NULL,
377               `branchcode` varchar(10) default NULL,
378               `num_biblios` int(11) NOT NULL default 0,
379               `num_items` int(11) NOT NULL default 0,
380               `upload_timestamp` timestamp NOT NULL default CURRENT_TIMESTAMP,
381               `overlay_action` enum('replace', 'create_new', 'use_template') NOT NULL default 'create_new',
382               `import_status` enum('staging', 'staged', 'importing', 'imported', 'reverting', 'reverted', 'cleaned') NOT NULL default 'staging',
383               `batch_type` enum('batch', 'z3950') NOT NULL default 'batch',
384               `file_name` varchar(100),
385               `comments` mediumtext,
386               PRIMARY KEY (`import_batch_id`),
387               KEY `branchcode` (`branchcode`)
388               ) ENGINE=InnoDB DEFAULT CHARSET=utf8");
389     $dbh->do("CREATE TABLE `import_records` (
390               `import_record_id` int(11) NOT NULL auto_increment,
391               `import_batch_id` int(11) NOT NULL,
392               `branchcode` varchar(10) default NULL,
393               `record_sequence` int(11) NOT NULL default 0,
394               `upload_timestamp` timestamp NOT NULL default CURRENT_TIMESTAMP,
395               `import_date` DATE default NULL,
396               `marc` longblob NOT NULL,
397               `marcxml` longtext NOT NULL,
398               `marcxml_old` longtext NOT NULL,
399               `record_type` enum('biblio', 'auth', 'holdings') NOT NULL default 'biblio',
400               `overlay_status` enum('no_match', 'auto_match', 'manual_match', 'match_applied') NOT NULL default 'no_match',
401               `status` enum('error', 'staged', 'imported', 'reverted', 'items_reverted') NOT NULL default 'staged',
402               `import_error` mediumtext,
403               `encoding` varchar(40) NOT NULL default '',
404               `z3950random` varchar(40) default NULL,
405               PRIMARY KEY (`import_record_id`),
406               CONSTRAINT `import_records_ifbk_1` FOREIGN KEY (`import_batch_id`)
407                           REFERENCES `import_batches` (`import_batch_id`) ON DELETE CASCADE ON UPDATE CASCADE,
408               KEY `branchcode` (`branchcode`),
409               KEY `batch_sequence` (`import_batch_id`, `record_sequence`)
410               ) ENGINE=InnoDB DEFAULT CHARSET=utf8");
411     $dbh->do("CREATE TABLE `import_record_matches` (
412               `import_record_id` int(11) NOT NULL,
413               `candidate_match_id` int(11) NOT NULL,
414               `score` int(11) NOT NULL default 0,
415               CONSTRAINT `import_record_matches_ibfk_1` FOREIGN KEY (`import_record_id`)
416                           REFERENCES `import_records` (`import_record_id`) ON DELETE CASCADE ON UPDATE CASCADE,
417               KEY `record_score` (`import_record_id`, `score`)
418               ) ENGINE=InnoDB DEFAULT CHARSET=utf8");
419     $dbh->do("CREATE TABLE `import_biblios` (
420               `import_record_id` int(11) NOT NULL,
421               `matched_biblionumber` int(11) default NULL,
422               `control_number` varchar(25) default NULL,
423               `original_source` varchar(25) default NULL,
424               `title` varchar(128) default NULL,
425               `author` varchar(80) default NULL,
426               `isbn` varchar(14) default NULL,
427               `issn` varchar(9) default NULL,
428               `has_items` tinyint(1) NOT NULL default 0,
429               CONSTRAINT `import_biblios_ibfk_1` FOREIGN KEY (`import_record_id`)
430                           REFERENCES `import_records` (`import_record_id`) ON DELETE CASCADE ON UPDATE CASCADE,
431               KEY `matched_biblionumber` (`matched_biblionumber`),
432               KEY `title` (`title`),
433               KEY `isbn` (`isbn`)
434               ) ENGINE=InnoDB DEFAULT CHARSET=utf8");
435     $dbh->do("CREATE TABLE `import_items` (
436               `import_items_id` int(11) NOT NULL auto_increment,
437               `import_record_id` int(11) NOT NULL,
438               `itemnumber` int(11) default NULL,
439               `branchcode` varchar(10) default NULL,
440               `status` enum('error', 'staged', 'imported', 'reverted') NOT NULL default 'staged',
441               `marcxml` longtext NOT NULL,
442               `import_error` mediumtext,
443               PRIMARY KEY (`import_items_id`),
444               CONSTRAINT `import_items_ibfk_1` FOREIGN KEY (`import_record_id`)
445                           REFERENCES `import_records` (`import_record_id`) ON DELETE CASCADE ON UPDATE CASCADE,
446               KEY `itemnumber` (`itemnumber`),
447               KEY `branchcode` (`branchcode`)
448               ) ENGINE=InnoDB DEFAULT CHARSET=utf8");
449
450     $dbh->do("INSERT INTO `import_batches`
451                 (`overlay_action`, `import_status`, `batch_type`, `file_name`)
452               SELECT distinct 'create_new', 'staged', 'z3950', `file`
453               FROM   `marc_breeding`");
454
455     $dbh->do("INSERT INTO `import_records`
456                 (`import_batch_id`, `import_record_id`, `record_sequence`, `marc`, `record_type`, `status`,
457                 `encoding`, `z3950random`, `marcxml`, `marcxml_old`)
458               SELECT `import_batch_id`, `id`, 1, `marc`, 'biblio', 'staged', `encoding`, `z3950random`, '', ''
459               FROM `marc_breeding`
460               JOIN `import_batches` ON (`file_name` = `file`)");
461
462     $dbh->do("INSERT INTO `import_biblios`
463                 (`import_record_id`, `title`, `author`, `isbn`)
464               SELECT `import_record_id`, `title`, `author`, `isbn`
465               FROM   `marc_breeding`
466               JOIN   `import_records` ON (`import_record_id` = `id`)");
467
468     $dbh->do("UPDATE `import_batches`
469               SET `num_biblios` = (
470               SELECT COUNT(*)
471               FROM `import_records`
472               WHERE `import_batch_id` = `import_batches`.`import_batch_id`
473               )");
474
475     $dbh->do("DROP TABLE `marc_breeding`");
476
477     print "Upgrade to $DBversion done (import_batches et al. added)\n";
478     SetVersion ($DBversion);
479 }
480
481 $DBversion = "3.00.00.014";
482 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
483     $dbh->do("ALTER TABLE subscription ADD lastbranch VARCHAR(4)");
484     print "Upgrade to $DBversion done (userid index added)\n";
485     SetVersion ($DBversion);
486 }
487
488 $DBversion = "3.00.00.015";
489 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
490     $dbh->do("CREATE TABLE `saved_sql` (
491            `id` int(11) NOT NULL auto_increment,
492            `borrowernumber` int(11) default NULL,
493            `date_created` datetime default NULL,
494            `last_modified` datetime default NULL,
495            `savedsql` text,
496            `last_run` datetime default NULL,
497            `report_name` varchar(255) default NULL,
498            `type` varchar(255) default NULL,
499            `notes` text,
500            PRIMARY KEY  (`id`),
501            KEY boridx (`borrowernumber`)
502         ) ENGINE=InnoDB DEFAULT CHARSET=utf8;");
503     $dbh->do("CREATE TABLE `saved_reports` (
504            `id` int(11) NOT NULL auto_increment,
505            `report_id` int(11) default NULL,
506            `report` longtext,
507            `date_run` datetime default NULL,
508            PRIMARY KEY  (`id`)
509         ) ENGINE=InnoDB DEFAULT CHARSET=utf8;");
510     print "Upgrade to $DBversion done (saved_sql and saved_reports added)\n";
511     SetVersion ($DBversion);
512 }
513
514 $DBversion = "3.00.00.016";
515 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
516     $dbh->do(" CREATE TABLE reports_dictionary (
517           id int(11) NOT NULL auto_increment,
518           name varchar(255) default NULL,
519           description text,
520           date_created datetime default NULL,
521           date_modified datetime default NULL,
522           saved_sql text,
523           area int(11) default NULL,
524           PRIMARY KEY  (id)
525         ) ENGINE=InnoDB DEFAULT CHARSET=utf8 ");
526     print "Upgrade to $DBversion done (reports_dictionary) added)\n";
527     SetVersion ($DBversion);
528 }
529
530 $DBversion = "3.00.00.017";
531 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
532     $dbh->do("ALTER TABLE action_logs DROP PRIMARY KEY");
533     $dbh->do("ALTER TABLE action_logs ADD KEY  timestamp (timestamp,user)");
534     $dbh->do("ALTER TABLE action_logs ADD action_id INT(11) NOT NULL FIRST");
535     $dbh->do("UPDATE action_logs SET action_id = if (\@a, \@a:=\@a+1, \@a:=1)");
536     $dbh->do("ALTER TABLE action_logs MODIFY action_id INT(11) NOT NULL AUTO_INCREMENT PRIMARY KEY");
537     print "Upgrade to $DBversion done (added column to action_logs)\n";
538     SetVersion ($DBversion);
539 }
540
541 $DBversion = "3.00.00.018";
542 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
543     $dbh->do("ALTER TABLE `zebraqueue`
544                     ADD `done` INT NOT NULL DEFAULT '0',
545                     ADD `time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ;
546             ");
547     print "Upgrade to $DBversion done (adding timestamp and done columns to zebraque table to improve problem tracking) added)\n";
548     SetVersion ($DBversion);
549 }
550
551 $DBversion = "3.00.00.019";
552 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
553     $dbh->do("ALTER TABLE biblio MODIFY biblionumber INT(11) NOT NULL AUTO_INCREMENT");
554     $dbh->do("ALTER TABLE biblioitems MODIFY biblioitemnumber INT(11) NOT NULL AUTO_INCREMENT");
555     $dbh->do("ALTER TABLE items MODIFY itemnumber INT(11) NOT NULL AUTO_INCREMENT");
556     print "Upgrade to $DBversion done (made bib/item PKs auto_increment)\n";
557     SetVersion ($DBversion);
558 }
559
560 $DBversion = "3.00.00.020";
561 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
562     $dbh->do("ALTER TABLE deleteditems
563               DROP KEY `delitembarcodeidx`,
564               ADD KEY `delitembarcodeidx` (`barcode`)");
565     print "Upgrade to $DBversion done (dropped uniqueness of key on deleteditems.barcode)\n";
566     SetVersion ($DBversion);
567 }
568
569 $DBversion = "3.00.00.021";
570 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
571     $dbh->do("ALTER TABLE items CHANGE homebranch homebranch VARCHAR(10)");
572     $dbh->do("ALTER TABLE deleteditems CHANGE homebranch homebranch VARCHAR(10)");
573     $dbh->do("ALTER TABLE statistics CHANGE branch branch VARCHAR(10)");
574     $dbh->do("ALTER TABLE subscription CHANGE lastbranch lastbranch VARCHAR(10)");
575     print "Upgrade to $DBversion done (extended missed branchcode columns to 10 chars)\n";
576     SetVersion ($DBversion);
577 }
578
579 $DBversion = "3.00.00.022";
580 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
581     $dbh->do("ALTER TABLE items
582                 ADD `damaged` tinyint(1) default NULL AFTER notforloan");
583     $dbh->do("ALTER TABLE deleteditems
584                 ADD `damaged` tinyint(1) default NULL AFTER notforloan");
585     print "Upgrade to $DBversion done (adding damaged column to items table)\n";
586     SetVersion ($DBversion);
587 }
588
589 $DBversion = "3.00.00.023";
590 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
591      $dbh->do("INSERT INTO `systempreferences` (variable,value,options,explanation,type)
592          VALUES ('yuipath','http://yui.yahooapis.com/2.3.1/build','Insert the path to YUI libraries','','free')");
593     print "Upgrade to $DBversion done (adding new system preference for controlling YUI path)\n";
594     SetVersion ($DBversion);
595 }
596 $DBversion = "3.00.00.024";
597 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
598     $dbh->do("ALTER TABLE biblioitems CHANGE  itemtype itemtype VARCHAR(10)");
599     print "Upgrade to $DBversion done (changing itemtype to (10))\n";
600     SetVersion ($DBversion);
601 }
602
603 $DBversion = "3.00.00.025";
604 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
605     $dbh->do("ALTER TABLE items ADD COLUMN itype VARCHAR(10)");
606     $dbh->do("ALTER TABLE deleteditems ADD COLUMN itype VARCHAR(10) AFTER uri");
607     if(C4::Context->preference('item-level_itypes')){
608         $dbh->do('update items,biblioitems set items.itype=biblioitems.itemtype where items.biblionumber=biblioitems.biblionumber and itype is null');
609     }
610     print "Upgrade to $DBversion done (reintroduce items.itype - fill from itemtype)\n ";
611     SetVersion ($DBversion);
612 }
613
614 $DBversion = "3.00.00.026";
615 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
616     $dbh->do("INSERT INTO `systempreferences` (variable,value,options,explanation,type)
617        VALUES ('HomeOrHoldingBranch','homebranch','homebranch|holdingbranch','With independent branches turned on this decides whether to check the items holdingbranch or homebranch at circulatilon','choice')");
618     print "Upgrade to $DBversion done (adding new system preference for choosing whether homebranch or holdingbranch is checked in circulation)\n";
619     SetVersion ($DBversion);
620 }
621
622 $DBversion = "3.00.00.027";
623 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
624     $dbh->do("CREATE TABLE `marc_matchers` (
625                 `matcher_id` int(11) NOT NULL auto_increment,
626                 `code` varchar(10) NOT NULL default '',
627                 `description` varchar(255) NOT NULL default '',
628                 `record_type` varchar(10) NOT NULL default 'biblio',
629                 `threshold` int(11) NOT NULL default 0,
630                 PRIMARY KEY (`matcher_id`),
631                 KEY `code` (`code`),
632                 KEY `record_type` (`record_type`)
633               ) ENGINE=InnoDB DEFAULT CHARSET=utf8");
634     $dbh->do("CREATE TABLE `matchpoints` (
635                 `matcher_id` int(11) NOT NULL,
636                 `matchpoint_id` int(11) NOT NULL auto_increment,
637                 `search_index` varchar(30) NOT NULL default '',
638                 `score` int(11) NOT NULL default 0,
639                 PRIMARY KEY (`matchpoint_id`),
640                 CONSTRAINT `matchpoints_ifbk_1` FOREIGN KEY (`matcher_id`)
641                            REFERENCES `marc_matchers` (`matcher_id`) ON DELETE CASCADE ON UPDATE CASCADE
642               ) ENGINE=InnoDB DEFAULT CHARSET=utf8");
643     $dbh->do("CREATE TABLE `matchpoint_components` (
644                 `matchpoint_id` int(11) NOT NULL,
645                 `matchpoint_component_id` int(11) NOT NULL auto_increment,
646                 sequence int(11) NOT NULL default 0,
647                 tag varchar(3) NOT NULL default '',
648                 subfields varchar(40) NOT NULL default '',
649                 offset int(4) NOT NULL default 0,
650                 length int(4) NOT NULL default 0,
651                 PRIMARY KEY (`matchpoint_component_id`),
652                 KEY `by_sequence` (`matchpoint_id`, `sequence`),
653                 CONSTRAINT `matchpoint_components_ifbk_1` FOREIGN KEY (`matchpoint_id`)
654                            REFERENCES `matchpoints` (`matchpoint_id`) ON DELETE CASCADE ON UPDATE CASCADE
655               ) ENGINE=InnoDB DEFAULT CHARSET=utf8");
656     $dbh->do("CREATE TABLE `matchpoint_component_norms` (
657                 `matchpoint_component_id` int(11) NOT NULL,
658                 `sequence`  int(11) NOT NULL default 0,
659                 `norm_routine` varchar(50) NOT NULL default '',
660                 KEY `matchpoint_component_norms` (`matchpoint_component_id`, `sequence`),
661                 CONSTRAINT `matchpoint_component_norms_ifbk_1` FOREIGN KEY (`matchpoint_component_id`)
662                            REFERENCES `matchpoint_components` (`matchpoint_component_id`) ON DELETE CASCADE ON UPDATE CASCADE
663               ) ENGINE=InnoDB DEFAULT CHARSET=utf8");
664     $dbh->do("CREATE TABLE `matcher_matchpoints` (
665                 `matcher_id` int(11) NOT NULL,
666                 `matchpoint_id` int(11) NOT NULL,
667                 CONSTRAINT `matcher_matchpoints_ifbk_1` FOREIGN KEY (`matcher_id`)
668                            REFERENCES `marc_matchers` (`matcher_id`) ON DELETE CASCADE ON UPDATE CASCADE,
669                 CONSTRAINT `matcher_matchpoints_ifbk_2` FOREIGN KEY (`matchpoint_id`)
670                            REFERENCES `matchpoints` (`matchpoint_id`) ON DELETE CASCADE ON UPDATE CASCADE
671               ) ENGINE=InnoDB DEFAULT CHARSET=utf8");
672     $dbh->do("CREATE TABLE `matchchecks` (
673                 `matcher_id` int(11) NOT NULL,
674                 `matchcheck_id` int(11) NOT NULL auto_increment,
675                 `source_matchpoint_id` int(11) NOT NULL,
676                 `target_matchpoint_id` int(11) NOT NULL,
677                 PRIMARY KEY (`matchcheck_id`),
678                 CONSTRAINT `matcher_matchchecks_ifbk_1` FOREIGN KEY (`matcher_id`)
679                            REFERENCES `marc_matchers` (`matcher_id`) ON DELETE CASCADE ON UPDATE CASCADE,
680                 CONSTRAINT `matcher_matchchecks_ifbk_2` FOREIGN KEY (`source_matchpoint_id`)
681                            REFERENCES `matchpoints` (`matchpoint_id`) ON DELETE CASCADE ON UPDATE CASCADE,
682                 CONSTRAINT `matcher_matchchecks_ifbk_3` FOREIGN KEY (`target_matchpoint_id`)
683                            REFERENCES `matchpoints` (`matchpoint_id`) ON DELETE CASCADE ON UPDATE CASCADE
684               ) ENGINE=InnoDB DEFAULT CHARSET=utf8");
685     print "Upgrade to $DBversion done (added C4::Matcher serialization tables)\n ";
686     SetVersion ($DBversion);
687 }
688
689 $DBversion = "3.00.00.028";
690 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
691     $dbh->do("INSERT INTO `systempreferences` (variable,value,options,explanation,type)
692        VALUES ('canreservefromotherbranches','1','','With Independent branches on, can a user from one library reserve an item from another library','YesNo')");
693     print "Upgrade to $DBversion done (adding new system preference for changing reserve/holds behaviour with independent branches)\n";
694     SetVersion ($DBversion);
695 }
696
697
698 $DBversion = "3.00.00.029";
699 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
700     $dbh->do("ALTER TABLE `import_batches` ADD `matcher_id` int(11) NULL AFTER `import_batch_id`");
701     print "Upgrade to $DBversion done (adding matcher_id to import_batches)\n";
702     SetVersion ($DBversion);
703 }
704
705 $DBversion = "3.00.00.030";
706 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
707     $dbh->do("
708 CREATE TABLE services_throttle (
709   service_type varchar(10) NOT NULL default '',
710   service_count varchar(45) default NULL,
711   PRIMARY KEY  (service_type)
712 ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
713 ");
714     $dbh->do("INSERT INTO `systempreferences` (variable,value,options,explanation,type)
715        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')");
716  $dbh->do("INSERT INTO `systempreferences` (variable,value,options,explanation,type)
717        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')");
718  $dbh->do("INSERT INTO `systempreferences` (variable,value,options,explanation,type)
719        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')");
720  $dbh->do("INSERT INTO `systempreferences` (variable,value,options,explanation,type)
721        VALUES ('XISBNDailyLimit',499,'','The xISBN Web service is free for non-commercial use when usage does not exceed 500 requests per day','free')");
722  $dbh->do("INSERT INTO `systempreferences` (variable,value,options,explanation,type)
723        VALUES ('PINESISBN',0,'','Use with FRBRizeEditions. If ON, Koha will use PINES OISBN web service in the Editions tab on the detail pages.','YesNo')");
724  $dbh->do("INSERT INTO `systempreferences` (variable,value,options,explanation,type)
725        VALUES ('ThingISBN',0,'','Use with FRBRizeEditions. If ON, Koha will use the ThingISBN web service in the Editions tab on the detail pages.','YesNo')");
726     print "Upgrade to $DBversion done (adding services throttle table and sysprefs for xISBN)\n";
727     SetVersion ($DBversion);
728 }
729
730 $DBversion = "3.00.00.031";
731 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
732
733 $dbh->do("INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('QueryStemming',1,'If ON, enables query stemming',NULL,'YesNo')");
734 $dbh->do("INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('QueryFuzzy',1,'If ON, enables fuzzy option for searches',NULL,'YesNo')");
735 $dbh->do("INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('QueryWeightFields',1,'If ON, enables field weighting',NULL,'YesNo')");
736 $dbh->do("INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('WebBasedSelfCheck',0,'If ON, enables the web-based self-check system',NULL,'YesNo')");
737 $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')");
738 $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')");
739 $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')");
740 $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')");
741 $dbh->do("INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('defaultSortOrder',NULL,'Specify the default sort order','asc|dsc|az|za','Choice')");
742 $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')");
743 $dbh->do("INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('OPACdefaultSortOrder',NULL,'Specify the default sort order','asc|dsc|za|az','Choice')");
744 $dbh->do("INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('staffClientBaseURL','','Specify the base URL of the staff client',NULL,'free')");
745 $dbh->do("INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('minPasswordLength',3,'Specify the minimum length of a patron/staff password',NULL,'free')");
746 $dbh->do("INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('noItemTypeImages',0,'If ON, disables item-type images',NULL,'YesNo')");
747 $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')");
748 $dbh->do("INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('holdCancelLength','','Specify how many days before a hold is canceled',NULL,'free')");
749 $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')");
750 $dbh->do("INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('finesMode','test','Choose the fines mode, test or production','test|production','Choice')");
751 $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')");
752 $dbh->do("INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('itemBarcodeInputFilter','','If set, allows specification of a item barcode input filter','cuecat','Choice')");
753 $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')");
754 $dbh->do("INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('URLLinkText','','Text to display as the link anchor in the OPAC',NULL,'free')");
755 $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')");
756 $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')");
757 $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')");
758 $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')");
759 $dbh->do("INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('OPACUserCSS',0,'Add CSS to be included in the OPAC',NULL,'free')");
760
761     print "Upgrade to $DBversion done (adding additional system preference)\n";
762     SetVersion ($DBversion);
763 }
764
765 $DBversion = "3.00.00.032";
766 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
767     $dbh->do("UPDATE `marc_subfield_structure` SET `kohafield` = 'items.wthdrawn' WHERE `kohafield` = 'items.withdrawn'");
768     print "Upgrade to $DBversion done (fixed MARC framework references to items.withdrawn)\n";
769     SetVersion ($DBversion);
770 }
771
772 $DBversion = "3.00.00.033";
773 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
774     $dbh->do("INSERT INTO `userflags` VALUES(17,'staffaccess','Modify login / permissions for staff users',0)");
775     print "Upgrade to $DBversion done (Adding permissions flag for staff member access modification.  )\n";
776     SetVersion ($DBversion);
777 }
778
779 $DBversion = "3.00.00.034";
780 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
781     $dbh->do("ALTER TABLE `virtualshelves` ADD COLUMN `sortfield` VARCHAR(16) ");
782     print "Upgrade to $DBversion done (Adding sortfield for Virtual Shelves.  )\n";
783     SetVersion ($DBversion);
784 }
785
786 $DBversion = "3.00.00.035";
787 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
788     $dbh->do("UPDATE marc_subfield_structure
789               SET authorised_value = 'cn_source'
790               WHERE kohafield IN ('items.cn_source', 'biblioitems.cn_source')
791               AND (authorised_value is NULL OR authorised_value = '')");
792     print "Upgrade to $DBversion done (MARC frameworks: make classification source a drop-down)\n";
793     SetVersion ($DBversion);
794 }
795
796 $DBversion = "3.00.00.036";
797 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
798     $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');");
799     print "Upgrade to $DBversion done (OPACItemsResultsDisplay systempreference added)\n";
800     SetVersion ($DBversion);
801 }
802
803 $DBversion = "3.00.00.037";
804 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
805     $dbh->do("ALTER TABLE `borrowers` ADD COLUMN `altcontactfirstname` varchar(255)");
806     $dbh->do("ALTER TABLE `borrowers` ADD COLUMN `altcontactsurname` varchar(255)");
807     $dbh->do("ALTER TABLE `borrowers` ADD COLUMN `altcontactaddress1` varchar(255)");
808     $dbh->do("ALTER TABLE `borrowers` ADD COLUMN `altcontactaddress2` varchar(255)");
809     $dbh->do("ALTER TABLE `borrowers` ADD COLUMN `altcontactaddress3` varchar(255)");
810     $dbh->do("ALTER TABLE `borrowers` ADD COLUMN `altcontactzipcode` varchar(50)");
811     $dbh->do("ALTER TABLE `borrowers` ADD COLUMN `altcontactphone` varchar(50)");
812     print "Upgrade to $DBversion done (Adding Alternative Contact Person information to borrowers table)\n";
813     SetVersion ($DBversion);
814 }
815
816 $DBversion = "3.00.00.038";
817 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
818     $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'");
819     $dbh->do("DELETE FROM `systempreferences` WHERE variable='hideBiblioNumber'");
820     print "Upgrade to $DBversion done ('alter finesMode systempreference, remove superfluous syspref.')\n";
821     SetVersion ($DBversion);
822 }
823
824 $DBversion = "3.00.00.039";
825 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
826     $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')");
827     $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')");
828     $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')");
829     # $dbh->do("DELETE FROM `systempreferences` WHERE variable='HomeOrHoldingBranch'"); # Bug #2752
830     print "Upgrade to $DBversion done ('add circ sysprefs CircControl, finesCalendar, and uppercasesurnames, and delete HomeOrHoldingBranch.')\n";
831     SetVersion ($DBversion);
832 }
833
834 $DBversion = "3.00.00.040";
835 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
836         $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')");
837         $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')");
838         print "Upgrade to $DBversion done ('add circ sysprefs todaysIssuesDefaultSortOrder and previousIssuesDefaultSortOrder.')\n";
839     SetVersion ($DBversion);
840 }
841
842
843 $DBversion = "3.00.00.041";
844 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
845     # Strictly speaking it is not necessary to explicitly change
846     # NULL values to 0, because the ALTER TABLE statement will do that.
847     # However, setting them first avoids a warning.
848     $dbh->do("UPDATE items SET notforloan = 0 WHERE notforloan IS NULL");
849     $dbh->do("UPDATE items SET damaged = 0 WHERE damaged IS NULL");
850     $dbh->do("UPDATE items SET itemlost = 0 WHERE itemlost IS NULL");
851     $dbh->do("UPDATE items SET wthdrawn = 0 WHERE wthdrawn IS NULL");
852     $dbh->do("ALTER TABLE items
853                 MODIFY notforloan tinyint(1) NOT NULL default 0,
854                 MODIFY damaged    tinyint(1) NOT NULL default 0,
855                 MODIFY itemlost   tinyint(1) NOT NULL default 0,
856                 MODIFY wthdrawn   tinyint(1) NOT NULL default 0");
857     $dbh->do("UPDATE deleteditems SET notforloan = 0 WHERE notforloan IS NULL");
858     $dbh->do("UPDATE deleteditems SET damaged = 0 WHERE damaged IS NULL");
859     $dbh->do("UPDATE deleteditems SET itemlost = 0 WHERE itemlost IS NULL");
860     $dbh->do("UPDATE deleteditems SET wthdrawn = 0 WHERE wthdrawn IS NULL");
861     $dbh->do("ALTER TABLE deleteditems
862                 MODIFY notforloan tinyint(1) NOT NULL default 0,
863                 MODIFY damaged    tinyint(1) NOT NULL default 0,
864                 MODIFY itemlost   tinyint(1) NOT NULL default 0,
865                 MODIFY wthdrawn   tinyint(1) NOT NULL default 0");
866         print "Upgrade to $DBversion done (disallow NULL in several item status columns)\n";
867     SetVersion ($DBversion);
868 }
869
870 $DBversion = "3.00.00.04";
871 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
872     $dbh->do("ALTER TABLE aqbooksellers CHANGE name name mediumtext NOT NULL");
873         print "Upgrade to $DBversion done (disallow NULL in aqbooksellers.name; part of fix for bug 1251)\n";
874     SetVersion ($DBversion);
875 }
876
877 $DBversion = "3.00.00.043";
878 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
879     $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");
880         print "Upgrade to $DBversion done (currency table: add symbol and timestamp columns)\n";
881     SetVersion ($DBversion);
882 }
883
884 $DBversion = "3.00.00.044";
885 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
886     $dbh->do("ALTER TABLE deletedborrowers
887   ADD `altcontactfirstname` varchar(255) default NULL,
888   ADD `altcontactsurname` varchar(255) default NULL,
889   ADD `altcontactaddress1` varchar(255) default NULL,
890   ADD `altcontactaddress2` varchar(255) default NULL,
891   ADD `altcontactaddress3` varchar(255) default NULL,
892   ADD `altcontactzipcode` varchar(50) default NULL,
893   ADD `altcontactphone` varchar(50) default NULL
894   ");
895   $dbh->do("INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES
896 ('OPACBaseURL',NULL,'Specify the Base URL of the OPAC, e.g., opac.mylibrary.com, the http:// will be added automatically by Koha.',NULL,'Free'),
897 ('language','en','Set the default language in the staff client.',NULL,'Languages'),
898 ('QueryAutoTruncate',1,'If ON, query truncation is enabled by default',NULL,'YesNo'),
899 ('QueryRemoveStopwords',0,'If ON, stopwords listed in the Administration area will be removed from queries',NULL,'YesNo')
900   ");
901         print "Upgrade to $DBversion done (syncing deletedborrowers table with borrowers table)\n";
902     SetVersion ($DBversion);
903 }
904
905 #-- http://www.w3.org/International/articles/language-tags/
906
907 #-- RFC4646
908 $DBversion = "3.00.00.045";
909 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
910     $dbh->do("
911 CREATE TABLE language_subtag_registry (
912         subtag varchar(25),
913         type varchar(25), -- language-script-region-variant-extension-privateuse
914         description varchar(25), -- only one of the possible descriptions for ease of reference, see language_descriptions for the complete list
915         added date,
916         KEY `subtag` (`subtag`)
917 ) ENGINE=InnoDB DEFAULT CHARSET=utf8");
918
919 #-- TODO: add suppress_scripts
920 #-- this maps three letter codes defined in iso639.2 back to their
921 #-- two letter equivilents in rfc4646 (LOC maintains iso639+)
922  $dbh->do("CREATE TABLE language_rfc4646_to_iso639 (
923         rfc4646_subtag varchar(25),
924         iso639_2_code varchar(25),
925         KEY `rfc4646_subtag` (`rfc4646_subtag`)
926 ) ENGINE=InnoDB DEFAULT CHARSET=utf8");
927
928  $dbh->do("CREATE TABLE language_descriptions (
929         subtag varchar(25),
930         type varchar(25),
931         lang varchar(25),
932         description varchar(255),
933         KEY `lang` (`lang`)
934 ) ENGINE=InnoDB DEFAULT CHARSET=utf8");
935
936 #-- bi-directional support, keyed by script subcode
937  $dbh->do("CREATE TABLE language_script_bidi (
938         rfc4646_subtag varchar(25), -- script subtag, Arab, Hebr, etc.
939         bidi varchar(3), -- rtl ltr
940         KEY `rfc4646_subtag` (`rfc4646_subtag`)
941 ) ENGINE=InnoDB DEFAULT CHARSET=utf8");
942
943 #-- BIDI Stuff, Arabic and Hebrew
944  $dbh->do("INSERT INTO language_script_bidi(rfc4646_subtag,bidi)
945 VALUES( 'Arab', 'rtl')");
946  $dbh->do("INSERT INTO language_script_bidi(rfc4646_subtag,bidi)
947 VALUES( 'Hebr', 'rtl')");
948
949 #-- TODO: need to map language subtags to script subtags for detection
950 #-- of bidi when script is not specified (like ar, he)
951  $dbh->do("CREATE TABLE language_script_mapping (
952         language_subtag varchar(25),
953         script_subtag varchar(25),
954         KEY `language_subtag` (`language_subtag`)
955 ) ENGINE=InnoDB DEFAULT CHARSET=utf8");
956
957 #-- Default mappings between script and language subcodes
958  $dbh->do("INSERT INTO language_script_mapping(language_subtag,script_subtag)
959 VALUES( 'ar', 'Arab')");
960  $dbh->do("INSERT INTO language_script_mapping(language_subtag,script_subtag)
961 VALUES( 'he', 'Hebr')");
962
963         print "Upgrade to $DBversion done (adding language subtag registry and basic BiDi support NOTE: You should import the subtag registry SQL)\n";
964     SetVersion ($DBversion);
965 }
966
967 $DBversion = "3.00.00.046";
968 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
969     $dbh->do("ALTER TABLE `subscription` CHANGE `numberlength` `numberlength` int(11) default '0' ,
970                  CHANGE `weeklength` `weeklength` int(11) default '0'");
971     $dbh->do("CREATE TABLE `serialitems` (`serialid` int(11) NOT NULL, `itemnumber` int(11) NOT NULL, UNIQUE KEY `serialididx` (`serialid`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8");
972     $dbh->do("INSERT INTO `serialitems` SELECT `serialid`,`itemnumber` from serial where NOT ISNULL(itemnumber) && itemnumber <> '' && itemnumber NOT LIKE '%,%'");
973         print "Upgrade to $DBversion done (Add serialitems table to link serial issues to items. )\n";
974     SetVersion ($DBversion);
975 }
976
977 $DBversion = "3.00.00.047";
978 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
979     $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');");
980         print "Upgrade to $DBversion done ( Added OpacRenewalAllowed syspref )\n";
981     SetVersion ($DBversion);
982 }
983
984 $DBversion = "3.00.00.048";
985 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
986     $dbh->do("ALTER TABLE `items` ADD `more_subfields_xml` longtext default NULL AFTER `itype`");
987         print "Upgrade to $DBversion done (added items.more_subfields_xml)\n";
988     SetVersion ($DBversion);
989 }
990
991 $DBversion = "3.00.00.049";
992 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
993         $dbh->do("ALTER TABLE `z3950servers` ADD `encoding` text default NULL AFTER type ");
994         print "Upgrade to $DBversion done ( Added encoding field to z3950servers table )\n";
995     SetVersion ($DBversion);
996 }
997
998 $DBversion = "3.00.00.050";
999 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
1000     $dbh->do("INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('OpacHighlightedWords','0','If Set, query matched terms are highlighted in OPAC',NULL,'YesNo');");
1001         print "Upgrade to $DBversion done ( Added OpacHighlightedWords syspref )\n";
1002     SetVersion ($DBversion);
1003 }
1004
1005 $DBversion = "3.00.00.051";
1006 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
1007     $dbh->do("UPDATE systempreferences SET explanation = 'Define the current theme for the OPAC interface.' WHERE variable = 'opacthemes';");
1008         print "Upgrade to $DBversion done ( Corrected opacthemes explanation. )\n";
1009     SetVersion ($DBversion);
1010 }
1011
1012 $DBversion = "3.00.00.052";
1013 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
1014     $dbh->do("ALTER TABLE `deleteditems` ADD `more_subfields_xml` LONGTEXT DEFAULT NULL AFTER `itype`");
1015         print "Upgrade to $DBversion done ( Adding missing column to deleteditems table. )\n";
1016     SetVersion ($DBversion);
1017 }
1018
1019 $DBversion = "3.00.00.053";
1020 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
1021     $dbh->do("CREATE TABLE `printers_profile` (
1022             `prof_id` int(4) NOT NULL auto_increment,
1023             `printername` varchar(40) NOT NULL,
1024             `tmpl_id` int(4) NOT NULL,
1025             `paper_bin` varchar(20) NOT NULL,
1026             `offset_horz` float default NULL,
1027             `offset_vert` float default NULL,
1028             `creep_horz` float default NULL,
1029             `creep_vert` float default NULL,
1030             `unit` char(20) NOT NULL default 'POINT',
1031             PRIMARY KEY  (`prof_id`),
1032             UNIQUE KEY `printername` (`printername`,`tmpl_id`,`paper_bin`),
1033             CONSTRAINT `printers_profile_pnfk_1` FOREIGN KEY (`tmpl_id`) REFERENCES `labels_templates` (`tmpl_id`) ON DELETE CASCADE ON UPDATE CASCADE
1034             ) ENGINE=InnoDB DEFAULT CHARSET=utf8 ");
1035     $dbh->do("CREATE TABLE `labels_profile` (
1036             `tmpl_id` int(4) NOT NULL,
1037             `prof_id` int(4) NOT NULL,
1038             UNIQUE KEY `tmpl_id` (`tmpl_id`),
1039             UNIQUE KEY `prof_id` (`prof_id`)
1040             ) ENGINE=InnoDB DEFAULT CHARSET=utf8 ");
1041     print "Upgrade to $DBversion done ( Printer Profile tables added )\n";
1042     SetVersion ($DBversion);
1043 }
1044
1045 $DBversion = "3.00.00.054";
1046 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
1047     $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';");
1048         print "Upgrade to $DBversion done ( Added another barcode autogeneration sequence to barcode.pl. )\n";
1049     SetVersion ($DBversion);
1050 }
1051
1052 $DBversion = "3.00.00.055";
1053 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
1054     $dbh->do("ALTER TABLE `zebraqueue` ADD KEY `zebraqueue_lookup` (`server`, `biblio_auth_number`, `operation`, `done`)");
1055         print "Upgrade to $DBversion done ( Added index on zebraqueue. )\n";
1056     SetVersion ($DBversion);
1057 }
1058 $DBversion = "3.00.00.056";
1059 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
1060     if (C4::Context->preference("marcflavour") eq 'UNIMARC') {
1061         $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) ");
1062     } else {
1063         $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) ");
1064     }
1065     $dbh->do("ALTER TABLE `items` ADD `enumchron` VARCHAR(80) DEFAULT NULL;");
1066     print "Upgrade to $DBversion done ( Added item.enumchron column, and framework map to 952h )\n";
1067     SetVersion ($DBversion);
1068 }
1069
1070 $DBversion = "3.00.00.057";
1071 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
1072     $dbh->do("INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('OAI-PMH','0','if ON, OAI-PMH server is enabled',NULL,'YesNo');");
1073     $dbh->do("INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('OAI-PMH:archiveID','KOHA-OAI-TEST','OAI-PMH archive identification',NULL,'Free');");
1074     $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');");
1075     $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');");
1076     $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');");
1077     SetVersion ($DBversion);
1078 }
1079
1080 $DBversion = "3.00.00.058";
1081 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
1082     $dbh->do("ALTER TABLE `opac_news`
1083                 CHANGE `lang` `lang` VARCHAR( 25 )
1084                 CHARACTER SET utf8
1085                 COLLATE utf8_general_ci
1086                 NOT NULL default ''");
1087         print "Upgrade to $DBversion done ( lang field in opac_news made longer )\n";
1088     SetVersion ($DBversion);
1089 }
1090
1091 $DBversion = "3.00.00.059";
1092 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
1093
1094     $dbh->do("CREATE TABLE IF NOT EXISTS `labels_templates` (
1095             `tmpl_id` int(4) NOT NULL auto_increment,
1096             `tmpl_code` char(100)  default '',
1097             `tmpl_desc` char(100) default '',
1098             `page_width` float default '0',
1099             `page_height` float default '0',
1100             `label_width` float default '0',
1101             `label_height` float default '0',
1102             `topmargin` float default '0',
1103             `leftmargin` float default '0',
1104             `cols` int(2) default '0',
1105             `rows` int(2) default '0',
1106             `colgap` float default '0',
1107             `rowgap` float default '0',
1108             `active` int(1) default NULL,
1109             `units` char(20)  default 'PX',
1110             `fontsize` int(4) NOT NULL default '3',
1111             PRIMARY KEY  (`tmpl_id`)
1112             ) ENGINE=InnoDB DEFAULT CHARSET=utf8;");
1113     $dbh->do("CREATE TABLE  IF NOT EXISTS `printers_profile` (
1114             `prof_id` int(4) NOT NULL auto_increment,
1115             `printername` varchar(40) NOT NULL,
1116             `tmpl_id` int(4) NOT NULL,
1117             `paper_bin` varchar(20) NOT NULL,
1118             `offset_horz` float default NULL,
1119             `offset_vert` float default NULL,
1120             `creep_horz` float default NULL,
1121             `creep_vert` float default NULL,
1122             `unit` char(20) NOT NULL default 'POINT',
1123             PRIMARY KEY  (`prof_id`),
1124             UNIQUE KEY `printername` (`printername`,`tmpl_id`,`paper_bin`),
1125             CONSTRAINT `printers_profile_pnfk_1` FOREIGN KEY (`tmpl_id`) REFERENCES `labels_templates` (`tmpl_id`) ON DELETE CASCADE ON UPDATE CASCADE
1126             ) ENGINE=InnoDB DEFAULT CHARSET=utf8 ");
1127     print "Upgrade to $DBversion done ( Added labels_templates table if it did not exist. )\n";
1128     SetVersion ($DBversion);
1129 }
1130
1131 $DBversion = "3.00.00.060";
1132 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
1133     $dbh->do("CREATE TABLE IF NOT EXISTS `patronimage` (
1134             `cardnumber` varchar(16) NOT NULL,
1135             `mimetype` varchar(15) NOT NULL,
1136             `imagefile` mediumblob NOT NULL,
1137             PRIMARY KEY  (`cardnumber`),
1138             CONSTRAINT `patronimage_fk1` FOREIGN KEY (`cardnumber`) REFERENCES `borrowers` (`cardnumber`) ON DELETE CASCADE ON UPDATE CASCADE
1139             ) ENGINE=InnoDB DEFAULT CHARSET=utf8;");
1140         print "Upgrade to $DBversion done ( Added patronimage table. )\n";
1141     SetVersion ($DBversion);
1142 }
1143
1144 $DBversion = "3.00.00.061";
1145 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
1146     $dbh->do("ALTER TABLE labels_templates ADD COLUMN font char(10) NOT NULL DEFAULT 'TR';");
1147         print "Upgrade to $DBversion done ( Added font column to labels_templates )\n";
1148     SetVersion ($DBversion);
1149 }
1150
1151 $DBversion = "3.00.00.062";
1152 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
1153     $dbh->do("CREATE TABLE `old_issues` (
1154                 `borrowernumber` int(11) default NULL,
1155                 `itemnumber` int(11) default NULL,
1156                 `date_due` date default NULL,
1157                 `branchcode` varchar(10) default NULL,
1158                 `issuingbranch` varchar(18) default NULL,
1159                 `returndate` date default NULL,
1160                 `lastreneweddate` date default NULL,
1161                 `return` varchar(4) default NULL,
1162                 `renewals` tinyint(4) default NULL,
1163                 `timestamp` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
1164                 `issuedate` date default NULL,
1165                 KEY `old_issuesborridx` (`borrowernumber`),
1166                 KEY `old_issuesitemidx` (`itemnumber`),
1167                 KEY `old_bordate` (`borrowernumber`,`timestamp`),
1168                 CONSTRAINT `old_issues_ibfk_1` FOREIGN KEY (`borrowernumber`) REFERENCES `borrowers` (`borrowernumber`)
1169                     ON DELETE SET NULL ON UPDATE SET NULL,
1170                 CONSTRAINT `old_issues_ibfk_2` FOREIGN KEY (`itemnumber`) REFERENCES `items` (`itemnumber`)
1171                     ON DELETE SET NULL ON UPDATE SET NULL
1172                 ) ENGINE=InnoDB DEFAULT CHARSET=utf8");
1173     $dbh->do("CREATE TABLE `old_reserves` (
1174                 `borrowernumber` int(11) default NULL,
1175                 `reservedate` date default NULL,
1176                 `biblionumber` int(11) default NULL,
1177                 `constrainttype` varchar(1) default NULL,
1178                 `branchcode` varchar(10) default NULL,
1179                 `notificationdate` date default NULL,
1180                 `reminderdate` date default NULL,
1181                 `cancellationdate` date default NULL,
1182                 `reservenotes` mediumtext,
1183                 `priority` smallint(6) default NULL,
1184                 `found` varchar(1) default NULL,
1185                 `timestamp` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
1186                 `itemnumber` int(11) default NULL,
1187                 `waitingdate` date default NULL,
1188                 KEY `old_reserves_borrowernumber` (`borrowernumber`),
1189                 KEY `old_reserves_biblionumber` (`biblionumber`),
1190                 KEY `old_reserves_itemnumber` (`itemnumber`),
1191                 KEY `old_reserves_branchcode` (`branchcode`),
1192                 CONSTRAINT `old_reserves_ibfk_1` FOREIGN KEY (`borrowernumber`) REFERENCES `borrowers` (`borrowernumber`)
1193                     ON DELETE SET NULL ON UPDATE SET NULL,
1194                 CONSTRAINT `old_reserves_ibfk_2` FOREIGN KEY (`biblionumber`) REFERENCES `biblio` (`biblionumber`)
1195                     ON DELETE SET NULL ON UPDATE SET NULL,
1196                 CONSTRAINT `old_reserves_ibfk_3` FOREIGN KEY (`itemnumber`) REFERENCES `items` (`itemnumber`)
1197                     ON DELETE SET NULL ON UPDATE SET NULL
1198                 ) ENGINE=InnoDB DEFAULT CHARSET=utf8");
1199
1200     # move closed transactions to old_* tables
1201     $dbh->do("INSERT INTO old_issues SELECT * FROM issues WHERE returndate IS NOT NULL");
1202     $dbh->do("DELETE FROM issues WHERE returndate IS NOT NULL");
1203     $dbh->do("INSERT INTO old_reserves SELECT * FROM reserves WHERE cancellationdate IS NOT NULL OR found = 'F'");
1204     $dbh->do("DELETE FROM reserves WHERE cancellationdate IS NOT NULL OR found = 'F'");
1205
1206         print "Upgrade to $DBversion done ( Added old_issues and old_reserves tables )\n";
1207     SetVersion ($DBversion);
1208 }
1209
1210 $DBversion = "3.00.00.063";
1211 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
1212     $dbh->do("ALTER TABLE deleteditems
1213                 CHANGE COLUMN booksellerid booksellerid MEDIUMTEXT DEFAULT NULL,
1214                 ADD COLUMN enumchron VARCHAR(80) DEFAULT NULL AFTER more_subfields_xml,
1215                 ADD COLUMN copynumber SMALLINT(6) DEFAULT NULL AFTER enumchron;");
1216     $dbh->do("ALTER TABLE items
1217                 CHANGE COLUMN booksellerid booksellerid MEDIUMTEXT,
1218                 ADD COLUMN copynumber SMALLINT(6) DEFAULT NULL AFTER enumchron;");
1219         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";
1220     SetVersion ($DBversion);
1221 }
1222
1223 $DBversion = "3.00.00.064";
1224 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
1225     $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');");
1226     $dbh->do("INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('AWSAccessKeyID','','See:  http://aws.amazon.com','','free');");
1227     $dbh->do("DELETE FROM `systempreferences` WHERE variable='AmazonDevKey';");
1228     $dbh->do("DELETE FROM `systempreferences` WHERE variable='XISBNAmazonSimilarItems';");
1229     $dbh->do("DELETE FROM `systempreferences` WHERE variable='OPACXISBNAmazonSimilarItems';");
1230     print "Upgrade to $DBversion done (IMPORTANT: Upgrading to Amazon.com Associates Web Service 4.0 ) \n";
1231     SetVersion ($DBversion);
1232 }
1233
1234 $DBversion = "3.00.00.065";
1235 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
1236     $dbh->do("CREATE TABLE `patroncards` (
1237                 `cardid` int(11) NOT NULL auto_increment,
1238                 `batch_id` varchar(10) NOT NULL default '1',
1239                 `borrowernumber` int(11) NOT NULL,
1240                 `timestamp` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
1241                 PRIMARY KEY  (`cardid`),
1242                 KEY `patroncards_ibfk_1` (`borrowernumber`),
1243                 CONSTRAINT `patroncards_ibfk_1` FOREIGN KEY (`borrowernumber`) REFERENCES `borrowers` (`borrowernumber`) ON DELETE CASCADE ON UPDATE CASCADE
1244                 ) ENGINE=InnoDB DEFAULT CHARSET=utf8;");
1245     print "Upgrade to $DBversion done (Adding patroncards table for patroncards generation feature. ) \n";
1246     SetVersion ($DBversion);
1247 }
1248
1249 $DBversion = "3.00.00.066";
1250 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
1251     $dbh->do("ALTER TABLE `virtualshelfcontents` MODIFY `dateadded` timestamp NOT NULL
1252 DEFAULT CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP;
1253 ");
1254     print "Upgrade to $DBversion done (fix for bug 1873: virtualshelfcontents dateadded column empty. ) \n";
1255     SetVersion ($DBversion);
1256 }
1257
1258 $DBversion = "3.00.00.067";
1259 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
1260     $dbh->do("UPDATE systempreferences SET explanation = 'Enable patron images for the Staff Client', type = 'YesNo' WHERE variable = 'patronimages'");
1261     print "Upgrade to $DBversion done (Updating patronimages syspref to reflect current kohastructure.sql. ) \n";
1262     SetVersion ($DBversion);
1263 }
1264
1265 $DBversion = "3.00.00.068";
1266 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
1267     $dbh->do("CREATE TABLE `permissions` (
1268                 `module_bit` int(11) NOT NULL DEFAULT 0,
1269                 `code` varchar(30) DEFAULT NULL,
1270                 `description` varchar(255) DEFAULT NULL,
1271                 PRIMARY KEY  (`module_bit`, `code`),
1272                 CONSTRAINT `permissions_ibfk_1` FOREIGN KEY (`module_bit`) REFERENCES `userflags` (`bit`)
1273                     ON DELETE CASCADE ON UPDATE CASCADE
1274               ) ENGINE=InnoDB DEFAULT CHARSET=utf8");
1275     $dbh->do("CREATE TABLE `user_permissions` (
1276                 `borrowernumber` int(11) NOT NULL DEFAULT 0,
1277                 `module_bit` int(11) NOT NULL DEFAULT 0,
1278                 `code` varchar(30) DEFAULT NULL,
1279                 CONSTRAINT `user_permissions_ibfk_1` FOREIGN KEY (`borrowernumber`) REFERENCES `borrowers` (`borrowernumber`)
1280                     ON DELETE CASCADE ON UPDATE CASCADE,
1281                 CONSTRAINT `user_permissions_ibfk_2` FOREIGN KEY (`module_bit`, `code`)
1282                     REFERENCES `permissions` (`module_bit`, `code`)
1283                     ON DELETE CASCADE ON UPDATE CASCADE
1284               ) ENGINE=InnoDB DEFAULT CHARSET=utf8");
1285
1286     $dbh->do("INSERT INTO permissions (module_bit, code, description) VALUES
1287     (13, 'edit_news', 'Write news for the OPAC and staff interfaces'),
1288     (13, 'label_creator', 'Create printable labels and barcodes from catalog and patron data'),
1289     (13, 'edit_calendar', 'Define days when the library is closed'),
1290     (13, 'moderate_comments', 'Moderate patron comments'),
1291     (13, 'edit_notices', 'Define notices'),
1292     (13, 'edit_notice_status_triggers', 'Set notice/status triggers for overdue items'),
1293     (13, 'view_system_logs', 'Browse the system logs'),
1294     (13, 'inventory', 'Perform inventory (stocktaking) of your catalogue'),
1295     (13, 'stage_marc_import', 'Stage MARC records into the reservoir'),
1296     (13, 'manage_staged_marc', 'Managed staged MARC records, including completing and reversing imports'),
1297     (13, 'export_catalog', 'Export bibliographic and holdings data'),
1298     (13, 'import_patrons', 'Import patron data'),
1299     (13, 'delete_anonymize_patrons', 'Delete old borrowers and anonymize circulation history (deletes borrower reading history)'),
1300     (13, 'batch_upload_patron_images', 'Upload patron images in batch or one at a time'),
1301     (13, 'schedule_tasks', 'Schedule tasks to run')");
1302
1303     $dbh->do("INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('GranularPermissions','0','Use detailed staff user permissions',NULL,'YesNo')");
1304
1305     print "Upgrade to $DBversion done (adding permissions and user_permissions tables and GranularPermissions syspref) \n";
1306     SetVersion ($DBversion);
1307 }
1308 $DBversion = "3.00.00.069";
1309 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
1310     $dbh->do("ALTER TABLE labels_conf CHANGE COLUMN class classification int(1) DEFAULT NULL;");
1311         print "Upgrade to $DBversion done ( Correcting columname in labels_conf )\n";
1312     SetVersion ($DBversion);
1313 }
1314
1315 $DBversion = "3.00.00.070";
1316 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
1317     $sth = $dbh->prepare("SELECT value FROM systempreferences WHERE variable='yuipath'");
1318     $sth->execute;
1319     my ($value) = $sth->fetchrow;
1320     $value =~ s/2.3.1/2.5.1/;
1321     $dbh->do("UPDATE systempreferences SET value='$value' WHERE variable='yuipath';");
1322         print "Update yuipath syspref to 2.5.1 if necessary\n";
1323     SetVersion ($DBversion);
1324 }
1325
1326 $DBversion = "3.00.00.071";
1327 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
1328     $dbh->do(" ALTER TABLE `subscription` ADD `serialsadditems` TINYINT( 1 ) NOT NULL DEFAULT '0';");
1329     # fill the new field with the previous systempreference value, then drop the syspref
1330     my $sth = $dbh->prepare("SELECT value FROM systempreferences WHERE variable='serialsadditems'");
1331     $sth->execute;
1332     my ($serialsadditems) = $sth->fetchrow();
1333     $dbh->do("UPDATE subscription SET serialsadditems=$serialsadditems");
1334     $dbh->do("DELETE FROM systempreferences WHERE variable='serialsadditems'");
1335     print "Upgrade to $DBversion done ( moving serialsadditems from syspref to subscription )\n";
1336     SetVersion ($DBversion);
1337 }
1338
1339 $DBversion = "3.00.00.072";
1340 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
1341     $dbh->do("ALTER TABLE labels_conf ADD COLUMN formatstring mediumtext DEFAULT NULL AFTER printingtype");
1342         print "Upgrade to $DBversion done ( Adding format string to labels generator. )\n";
1343     SetVersion ($DBversion);
1344 }
1345
1346 $DBversion = "3.00.00.073";
1347 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
1348         $dbh->do("DROP TABLE IF EXISTS `tags_all`;");
1349         $dbh->do(q#
1350         CREATE TABLE `tags_all` (
1351           `tag_id`         int(11) NOT NULL auto_increment,
1352           `borrowernumber` int(11) NOT NULL,
1353           `biblionumber`   int(11) NOT NULL,
1354           `term`      varchar(255) NOT NULL,
1355           `language`       int(4) default NULL,
1356           `date_created` datetime  NOT NULL,
1357           PRIMARY KEY  (`tag_id`),
1358           KEY `tags_borrowers_fk_1` (`borrowernumber`),
1359           KEY `tags_biblionumber_fk_1` (`biblionumber`),
1360           CONSTRAINT `tags_borrowers_fk_1` FOREIGN KEY (`borrowernumber`)
1361                 REFERENCES `borrowers` (`borrowernumber`) ON DELETE CASCADE ON UPDATE CASCADE,
1362           CONSTRAINT `tags_biblionumber_fk_1` FOREIGN KEY (`biblionumber`)
1363                 REFERENCES `biblio`     (`biblionumber`)  ON DELETE CASCADE ON UPDATE CASCADE
1364         ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
1365         #);
1366         $dbh->do("DROP TABLE IF EXISTS `tags_approval`;");
1367         $dbh->do(q#
1368         CREATE TABLE `tags_approval` (
1369           `term`   varchar(255) NOT NULL,
1370           `approved`     int(1) NOT NULL default '0',
1371           `date_approved` datetime       default NULL,
1372           `approved_by` int(11)          default NULL,
1373           `weight_total` int(9) NOT NULL default '1',
1374           PRIMARY KEY  (`term`),
1375           KEY `tags_approval_borrowers_fk_1` (`approved_by`),
1376           CONSTRAINT `tags_approval_borrowers_fk_1` FOREIGN KEY (`approved_by`)
1377                 REFERENCES `borrowers` (`borrowernumber`) ON DELETE CASCADE ON UPDATE CASCADE
1378         ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
1379         #);
1380         $dbh->do("DROP TABLE IF EXISTS `tags_index`;");
1381         $dbh->do(q#
1382         CREATE TABLE `tags_index` (
1383           `term`    varchar(255) NOT NULL,
1384           `biblionumber` int(11) NOT NULL,
1385           `weight`        int(9) NOT NULL default '1',
1386           PRIMARY KEY  (`term`,`biblionumber`),
1387           KEY `tags_index_biblionumber_fk_1` (`biblionumber`),
1388           CONSTRAINT `tags_index_term_fk_1` FOREIGN KEY (`term`)
1389                 REFERENCES `tags_approval` (`term`)  ON DELETE CASCADE ON UPDATE CASCADE,
1390           CONSTRAINT `tags_index_biblionumber_fk_1` FOREIGN KEY (`biblionumber`)
1391                 REFERENCES `biblio` (`biblionumber`) ON DELETE CASCADE ON UPDATE CASCADE
1392         ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
1393         #);
1394         $dbh->do(q#
1395         INSERT INTO `systempreferences` VALUES
1396                 ('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=',''),
1397                 ('BakerTaylorEnabled','0','','Enable or disable all Baker & Taylor features.','YesNo'),
1398                 ('BakerTaylorPassword','','','Baker & Taylor Password for Content Cafe (external content)','Textarea'),
1399                 ('BakerTaylorUsername','','','Baker & Taylor Username for Content Cafe (external content)','Textarea'),
1400                 ('TagsEnabled','1','','Enables or disables all tagging features.  This is the main switch for tags.','YesNo'),
1401                 ('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.',''),
1402                 ('TagsInputOnDetail','1','','Allow users to input tags from the detail page.',         'YesNo'),
1403                 ('TagsInputOnList',  '0','','Allow users to input tags from the search results list.', 'YesNo'),
1404                 ('TagsModeration',  NULL,'','Require tags from patrons to be approved before becoming visible.','YesNo'),
1405                 ('TagsShowOnDetail','10','','Number of tags to display on detail page.  0 is off.',        'Integer'),
1406                 ('TagsShowOnList',   '6','','Number of tags to display on search results list.  0 is off.','Integer')
1407         #);
1408         print "Upgrade to $DBversion done (Baker/Taylor,Tags: sysprefs and tables (tags_all, tags_index, tags_approval)) \n";
1409         SetVersion ($DBversion);
1410 }
1411
1412 $DBversion = "3.00.00.074";
1413 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
1414     $dbh->do( q(update itemtypes set imageurl = concat( 'npl/', imageurl )
1415                   where imageurl not like 'http%'
1416                     and imageurl is not NULL
1417                     and imageurl != '') );
1418     print "Upgrade to $DBversion done (updating imagetype.imageurls to reflect new icon locations.)\n";
1419     SetVersion ($DBversion);
1420 }
1421
1422 $DBversion = "3.00.00.075";
1423 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
1424     $dbh->do( q(alter table authorised_values add imageurl varchar(200) default NULL) );
1425     print "Upgrade to $DBversion done (adding imageurl field to authorised_values table)\n";
1426     SetVersion ($DBversion);
1427 }
1428
1429 $DBversion = "3.00.00.076";
1430 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
1431     $dbh->do("ALTER TABLE import_batches
1432               ADD COLUMN nomatch_action enum('create_new', 'ignore') NOT NULL default 'create_new' AFTER overlay_action");
1433     $dbh->do("ALTER TABLE import_batches
1434               ADD COLUMN item_action enum('always_add', 'add_only_for_matches', 'add_only_for_new', 'ignore')
1435                   NOT NULL default 'always_add' AFTER nomatch_action");
1436     $dbh->do("ALTER TABLE import_batches
1437               MODIFY overlay_action  enum('replace', 'create_new', 'use_template', 'ignore')
1438                   NOT NULL default 'create_new'");
1439     $dbh->do("ALTER TABLE import_records
1440               MODIFY status  enum('error', 'staged', 'imported', 'reverted', 'items_reverted',
1441                                   'ignored') NOT NULL default 'staged'");
1442     $dbh->do("ALTER TABLE import_items
1443               MODIFY status enum('error', 'staged', 'imported', 'reverted', 'ignored') NOT NULL default 'staged'");
1444
1445         print "Upgrade to $DBversion done (changes to import_batches and import_records)\n";
1446         SetVersion ($DBversion);
1447 }
1448
1449 $DBversion = "3.00.00.077";
1450 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
1451     # drop these tables only if they exist and none of them are empty
1452     # these tables are not defined in the packaged 2.2.9, but since it is believed
1453     # that at least one library may be using them in a post-2.2.9 but pre-3.0 Koha,
1454     # some care is taken.
1455     my ($print_error) = $dbh->{PrintError};
1456     $dbh->{PrintError} = 0;
1457     my ($raise_error) = $dbh->{RaiseError};
1458     $dbh->{RaiseError} = 1;
1459
1460     my $count = 0;
1461     my $do_drop = 1;
1462     eval { $count = $dbh->do("SELECT 1 FROM categorytable"); };
1463     if ($count > 0) {
1464         $do_drop = 0;
1465     }
1466     eval { $count = $dbh->do("SELECT 1 FROM mediatypetable"); };
1467     if ($count > 0) {
1468         $do_drop = 0;
1469     }
1470     eval { $count = $dbh->do("SELECT 1 FROM subcategorytable"); };
1471     if ($count > 0) {
1472         $do_drop = 0;
1473     }
1474
1475     if ($do_drop) {
1476         $dbh->do("DROP TABLE IF EXISTS `categorytable`");
1477         $dbh->do("DROP TABLE IF EXISTS `mediatypetable`");
1478         $dbh->do("DROP TABLE IF EXISTS `subcategorytable`");
1479     }
1480
1481     $dbh->{PrintError} = $print_error;
1482     $dbh->{RaiseError} = $raise_error;
1483         print "Upgrade to $DBversion done (drop categorytable, subcategorytable, and mediatypetable)\n";
1484         SetVersion ($DBversion);
1485 }
1486
1487 $DBversion = "3.00.00.078";
1488 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
1489     my ($print_error) = $dbh->{PrintError};
1490     $dbh->{PrintError} = 0;
1491
1492     unless ($dbh->do("SELECT 1 FROM browser")) {
1493         $dbh->{PrintError} = $print_error;
1494         $dbh->do("CREATE TABLE `browser` (
1495                     `level` int(11) NOT NULL,
1496                     `classification` varchar(20) NOT NULL,
1497                     `description` varchar(255) NOT NULL,
1498                     `number` bigint(20) NOT NULL,
1499                     `endnode` tinyint(4) NOT NULL
1500                   ) ENGINE=InnoDB DEFAULT CHARSET=utf8");
1501     }
1502     $dbh->{PrintError} = $print_error;
1503         print "Upgrade to $DBversion done (add browser table if not already present)\n";
1504         SetVersion ($DBversion);
1505 }
1506
1507 $DBversion = "3.00.00.079";
1508 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
1509  my ($print_error) = $dbh->{PrintError};
1510     $dbh->{PrintError} = 0;
1511
1512     $dbh->do("INSERT INTO `systempreferences` (variable, value,options,type, explanation)VALUES
1513         ('AddPatronLists','categorycode','categorycode|category_type','Choice','Allow user to choose what list to pick up from when adding patrons')");
1514     print "Upgrade to $DBversion done (add browser table if not already present)\n";
1515         SetVersion ($DBversion);
1516 }
1517
1518 $DBversion = "3.00.00.080";
1519 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
1520     $dbh->do("ALTER TABLE subscription CHANGE monthlength monthlength int(11) default '0'");
1521     $dbh->do("ALTER TABLE deleteditems MODIFY marc LONGBLOB AFTER copynumber");
1522     $dbh->do("ALTER TABLE aqbooksellers CHANGE name name mediumtext NOT NULL");
1523         print "Upgrade to $DBversion done (catch up on DB schema changes since alpha and beta)\n";
1524         SetVersion ($DBversion);
1525 }
1526
1527 $DBversion = "3.00.00.081";
1528 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
1529     $dbh->do("CREATE TABLE `borrower_attribute_types` (
1530                 `code` varchar(10) NOT NULL,
1531                 `description` varchar(255) NOT NULL,
1532                 `repeatable` tinyint(1) NOT NULL default 0,
1533                 `unique_id` tinyint(1) NOT NULL default 0,
1534                 `opac_display` tinyint(1) NOT NULL default 0,
1535                 `password_allowed` tinyint(1) NOT NULL default 0,
1536                 `staff_searchable` tinyint(1) NOT NULL default 0,
1537                 `authorised_value_category` varchar(10) default NULL,
1538                 PRIMARY KEY  (`code`)
1539               ) ENGINE=InnoDB DEFAULT CHARSET=utf8");
1540     $dbh->do("CREATE TABLE `borrower_attributes` (
1541                 `borrowernumber` int(11) NOT NULL,
1542                 `code` varchar(10) NOT NULL,
1543                 `attribute` varchar(30) default NULL,
1544                 `password` varchar(30) default NULL,
1545                 KEY `borrowernumber` (`borrowernumber`),
1546                 KEY `code_attribute` (`code`, `attribute`),
1547                 CONSTRAINT `borrower_attributes_ibfk_1` FOREIGN KEY (`borrowernumber`) REFERENCES `borrowers` (`borrowernumber`)
1548                     ON DELETE CASCADE ON UPDATE CASCADE,
1549                 CONSTRAINT `borrower_attributes_ibfk_2` FOREIGN KEY (`code`) REFERENCES `borrower_attribute_types` (`code`)
1550                     ON DELETE CASCADE ON UPDATE CASCADE
1551             ) ENGINE=InnoDB DEFAULT CHARSET=utf8");
1552     $dbh->do("INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('ExtendedPatronAttributes','0','Use extended patron IDs and attributes',NULL,'YesNo')");
1553     print "Upgrade to $DBversion done (added borrower_attributes and  borrower_attribute_types)\n";
1554  SetVersion ($DBversion);
1555 }
1556
1557 $DBversion = "3.00.00.082";
1558 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
1559     $dbh->do( q(alter table accountlines add column lastincrement decimal(28,6) default NULL) );
1560     print "Upgrade to $DBversion done (adding lastincrement column to accountlines table)\n";
1561     SetVersion ($DBversion);
1562 }
1563
1564 $DBversion = "3.00.00.083";
1565 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
1566     $dbh->do( qq(UPDATE systempreferences SET value='local' where variable='yuipath' and value like "%/intranet-tmpl/prog/%"));
1567     print "Upgrade to $DBversion done (Changing yuipath behaviour in managing a local value)\n";
1568     SetVersion ($DBversion);
1569 }
1570 $DBversion = "3.00.00.084";
1571     if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
1572     $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')");
1573     $dbh->do("INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES('GoogleJackets','0','if ON, displays jacket covers from Google Books API',NULL,'YesNo')");
1574     print "Upgrade to $DBversion done (add new sysprefs)\n";
1575     SetVersion ($DBversion);
1576 }
1577
1578 $DBversion = "3.00.00.085";
1579 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
1580     if (C4::Context->preference("marcflavour") eq 'MARC21') {
1581         $dbh->do("UPDATE marc_subfield_structure SET tab = 0 WHERE tab =  9 AND tagfield = '037'");
1582         $dbh->do("UPDATE marc_subfield_structure SET tab = 1 WHERE tab =  6 AND tagfield in ('100', '110', '111', '130')");
1583         $dbh->do("UPDATE marc_subfield_structure SET tab = 2 WHERE tab =  6 AND tagfield in ('240', '243')");
1584         $dbh->do("UPDATE marc_subfield_structure SET tab = 4 WHERE tab =  6 AND tagfield in ('400', '410', '411', '440')");
1585         $dbh->do("UPDATE marc_subfield_structure SET tab = 5 WHERE tab =  9 AND tagfield = '584'");
1586         $dbh->do("UPDATE marc_subfield_structure SET tab = 7 WHERE tab = -6 AND tagfield = '760'");
1587     }
1588     print "Upgrade to $DBversion done (move editing tab of various MARC21 subfields)\n";
1589     SetVersion ($DBversion);
1590 }
1591
1592 $DBversion = "3.00.00.086";
1593 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
1594         $dbh->do(
1595         "CREATE TABLE `tmp_holdsqueue` (
1596         `biblionumber` int(11) default NULL,
1597         `itemnumber` int(11) default NULL,
1598         `barcode` varchar(20) default NULL,
1599         `surname` mediumtext NOT NULL,
1600         `firstname` text,
1601         `phone` text,
1602         `borrowernumber` int(11) NOT NULL,
1603         `cardnumber` varchar(16) default NULL,
1604         `reservedate` date default NULL,
1605         `title` mediumtext,
1606         `itemcallnumber` varchar(30) default NULL,
1607         `holdingbranch` varchar(10) default NULL,
1608         `pickbranch` varchar(10) default NULL,
1609         `notes` text
1610         ) ENGINE=InnoDB DEFAULT CHARSET=utf8");
1611
1612         $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')");
1613         $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')");
1614
1615         print "Upgrade to $DBversion done (Table structure for table `tmp_holdsqueue`)\n";
1616         SetVersion ($DBversion);
1617 }
1618
1619 $DBversion = "3.00.00.087";
1620 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
1621     $dbh->do("INSERT INTO `systempreferences` VALUES ('AutoEmailOpacUser','0','','Sends notification emails containing new account details to patrons - when account is created.','YesNo')" );
1622     $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')");
1623     print "Upgrade to $DBversion done (added 2 new 'AutoEmailOpacUser' sysprefs)\n";
1624     SetVersion ($DBversion);
1625 }
1626
1627 $DBversion = "3.00.00.088";
1628 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
1629         $dbh->do("INSERT INTO `systempreferences` (variable,value,options,explanation,type) VALUES ('OPACShelfBrowser','1','','Enable/disable Shelf Browser on item details page','YesNo')");
1630         $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')");
1631         $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')");
1632         $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')");
1633         print "Upgrade to $DBversion done (added 2 new 'AutoEmailOpacUser' sysprefs)\n";
1634     SetVersion ($DBversion);
1635 }
1636
1637 $DBversion = "3.00.00.089";
1638 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
1639         $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')");
1640         print "Upgrade to $DBversion done (added new AdvancedSearchTypes syspref)\n";
1641     SetVersion ($DBversion);
1642 }
1643
1644 $DBversion = "3.00.00.090";
1645 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
1646     $dbh->do("
1647         CREATE TABLE `branch_borrower_circ_rules` (
1648           `branchcode` VARCHAR(10) NOT NULL,
1649           `categorycode` VARCHAR(10) NOT NULL,
1650           `maxissueqty` int(4) default NULL,
1651           PRIMARY KEY (`categorycode`, `branchcode`),
1652           CONSTRAINT `branch_borrower_circ_rules_ibfk_1` FOREIGN KEY (`categorycode`) REFERENCES `categories` (`categorycode`)
1653             ON DELETE CASCADE ON UPDATE CASCADE,
1654           CONSTRAINT `branch_borrower_circ_rules_ibfk_2` FOREIGN KEY (`branchcode`) REFERENCES `branches` (`branchcode`)
1655             ON DELETE CASCADE ON UPDATE CASCADE
1656         ) ENGINE=InnoDB DEFAULT CHARSET=utf8
1657     ");
1658     $dbh->do("
1659         CREATE TABLE `default_borrower_circ_rules` (
1660           `categorycode` VARCHAR(10) NOT NULL,
1661           `maxissueqty` int(4) default NULL,
1662           PRIMARY KEY (`categorycode`),
1663           CONSTRAINT `borrower_borrower_circ_rules_ibfk_1` FOREIGN KEY (`categorycode`) REFERENCES `categories` (`categorycode`)
1664             ON DELETE CASCADE ON UPDATE CASCADE
1665         ) ENGINE=InnoDB DEFAULT CHARSET=utf8
1666     ");
1667     $dbh->do("
1668         CREATE TABLE `default_branch_circ_rules` (
1669           `branchcode` VARCHAR(10) NOT NULL,
1670           `maxissueqty` int(4) default NULL,
1671           PRIMARY KEY (`branchcode`),
1672           CONSTRAINT `default_branch_circ_rules_ibfk_1` FOREIGN KEY (`branchcode`) REFERENCES `branches` (`branchcode`)
1673             ON DELETE CASCADE ON UPDATE CASCADE
1674         ) ENGINE=InnoDB DEFAULT CHARSET=utf8
1675     ");
1676     $dbh->do("
1677         CREATE TABLE `default_circ_rules` (
1678             `singleton` enum('singleton') NOT NULL default 'singleton',
1679             `maxissueqty` int(4) default NULL,
1680             PRIMARY KEY (`singleton`)
1681         ) ENGINE=InnoDB DEFAULT CHARSET=utf8
1682     ");
1683     print "Upgrade to $DBversion done (added several circ rules tables)\n";
1684     SetVersion ($DBversion);
1685 }
1686
1687
1688 $DBversion = "3.00.00.091";
1689 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
1690     $dbh->do(<<'END_SQL');
1691 ALTER TABLE borrowers
1692 ADD `smsalertnumber` varchar(50) default NULL
1693 END_SQL
1694
1695     $dbh->do(<<'END_SQL');
1696 CREATE TABLE `message_attributes` (
1697   `message_attribute_id` int(11) NOT NULL auto_increment,
1698   `message_name` varchar(20) NOT NULL default '',
1699   `takes_days` tinyint(1) NOT NULL default '0',
1700   PRIMARY KEY  (`message_attribute_id`),
1701   UNIQUE KEY `message_name` (`message_name`)
1702 ) ENGINE=InnoDB DEFAULT CHARSET=utf8
1703 END_SQL
1704
1705     $dbh->do(<<'END_SQL');
1706 CREATE TABLE `message_transport_types` (
1707   `message_transport_type` varchar(20) NOT NULL,
1708   PRIMARY KEY  (`message_transport_type`)
1709 ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
1710 END_SQL
1711
1712     $dbh->do(<<'END_SQL');
1713 CREATE TABLE `message_transports` (
1714   `message_attribute_id` int(11) NOT NULL,
1715   `message_transport_type` varchar(20) NOT NULL,
1716   `is_digest` tinyint(1) NOT NULL default '0',
1717   `letter_module` varchar(20) NOT NULL default '',
1718   `letter_code` varchar(20) NOT NULL default '',
1719   PRIMARY KEY  (`message_attribute_id`,`message_transport_type`,`is_digest`),
1720   KEY `message_transport_type` (`message_transport_type`),
1721   KEY `letter_module` (`letter_module`,`letter_code`),
1722   CONSTRAINT `message_transports_ibfk_1` FOREIGN KEY (`message_attribute_id`) REFERENCES `message_attributes` (`message_attribute_id`) ON DELETE CASCADE ON UPDATE CASCADE,
1723   CONSTRAINT `message_transports_ibfk_2` FOREIGN KEY (`message_transport_type`) REFERENCES `message_transport_types` (`message_transport_type`) ON DELETE CASCADE ON UPDATE CASCADE,
1724   CONSTRAINT `message_transports_ibfk_3` FOREIGN KEY (`letter_module`, `letter_code`) REFERENCES `letter` (`module`, `code`) ON DELETE CASCADE ON UPDATE CASCADE
1725 ) ENGINE=InnoDB DEFAULT CHARSET=utf8
1726 END_SQL
1727
1728     $dbh->do(<<'END_SQL');
1729 CREATE TABLE `borrower_message_preferences` (
1730   `borrower_message_preference_id` int(11) NOT NULL auto_increment,
1731   `borrowernumber` int(11) NOT NULL default '0',
1732   `message_attribute_id` int(11) default '0',
1733   `days_in_advance` int(11) default '0',
1734   `wants_digets` tinyint(1) NOT NULL default '0',
1735   PRIMARY KEY  (`borrower_message_preference_id`),
1736   KEY `borrowernumber` (`borrowernumber`),
1737   KEY `message_attribute_id` (`message_attribute_id`),
1738   CONSTRAINT `borrower_message_preferences_ibfk_1` FOREIGN KEY (`borrowernumber`) REFERENCES `borrowers` (`borrowernumber`) ON DELETE CASCADE ON UPDATE CASCADE,
1739   CONSTRAINT `borrower_message_preferences_ibfk_2` FOREIGN KEY (`message_attribute_id`) REFERENCES `message_attributes` (`message_attribute_id`) ON DELETE CASCADE ON UPDATE CASCADE
1740 ) ENGINE=InnoDB DEFAULT CHARSET=utf8
1741 END_SQL
1742
1743     $dbh->do(<<'END_SQL');
1744 CREATE TABLE `borrower_message_transport_preferences` (
1745   `borrower_message_preference_id` int(11) NOT NULL default '0',
1746   `message_transport_type` varchar(20) NOT NULL default '0',
1747   PRIMARY KEY  (`borrower_message_preference_id`,`message_transport_type`),
1748   KEY `message_transport_type` (`message_transport_type`),
1749   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,
1750   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
1751 ) ENGINE=InnoDB DEFAULT CHARSET=utf8
1752 END_SQL
1753
1754     $dbh->do(<<'END_SQL');
1755 CREATE TABLE `message_queue` (
1756   `message_id` int(11) NOT NULL auto_increment,
1757   `borrowernumber` int(11) NOT NULL,
1758   `subject` text,
1759   `content` text,
1760   `message_transport_type` varchar(20) NOT NULL,
1761   `status` enum('sent','pending','failed','deleted') NOT NULL default 'pending',
1762   `time_queued` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
1763   KEY `message_id` (`message_id`),
1764   KEY `borrowernumber` (`borrowernumber`),
1765   KEY `message_transport_type` (`message_transport_type`),
1766   CONSTRAINT `messageq_ibfk_1` FOREIGN KEY (`borrowernumber`) REFERENCES `borrowers` (`borrowernumber`) ON DELETE CASCADE ON UPDATE CASCADE,
1767   CONSTRAINT `messageq_ibfk_2` FOREIGN KEY (`message_transport_type`) REFERENCES `message_transport_types` (`message_transport_type`) ON DELETE RESTRICT ON UPDATE CASCADE
1768 ) ENGINE=InnoDB DEFAULT CHARSET=utf8
1769 END_SQL
1770
1771     $dbh->do(<<'END_SQL');
1772 INSERT INTO `systempreferences`
1773   (variable,value,explanation,options,type)
1774 VALUES
1775 ('EnhancedMessagingPreferences',0,'If ON, allows patrons to select to receive additional messages about items due or nearly due.','','YesNo')
1776 END_SQL
1777
1778     $dbh->do( <<'END_SQL');
1779 INSERT INTO `letter`
1780 (module, code, name, title, content)
1781 VALUES
1782 ('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>>'),
1783 ('circulation','DUEDGST','Item Due Reminder (Digest)','Item Due Reminder','You have <<count>> items due'),
1784 ('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>>'),
1785 ('circulation','PREDUEDGST','Advance Notice of Item Due (Digest)','Advance Notice of Item Due','You have <<count>> items due soon'),
1786 ('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.');
1787 END_SQL
1788
1789     my @sql_scripts = (
1790         'installer/data/mysql/en/mandatory/message_transport_types.sql',
1791         'installer/data/mysql/en/optional/sample_notices_message_attributes.sql',
1792         'installer/data/mysql/en/optional/sample_notices_message_transports.sql',
1793     );
1794
1795     my $installer = C4::Installer->new();
1796     foreach my $script ( @sql_scripts ) {
1797         my $full_path = $installer->get_file_path_from_name($script);
1798         my $error = $installer->load_sql($full_path);
1799         warn $error if $error;
1800     }
1801
1802     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";
1803     SetVersion ($DBversion);
1804 }
1805
1806 $DBversion = "3.00.00.092";
1807 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
1808     $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')");
1809     $dbh->do("INSERT INTO `systempreferences` (variable,value,options,explanation,type) VALUES('AllowHoldsOnDamagedItems', '1', '', 'Allow hold requests to be placed on damaged items', 'YesNo')");
1810         print "Upgrade to $DBversion done (added new AllowOnShelfHolds syspref)\n";
1811     SetVersion ($DBversion);
1812 }
1813
1814 $DBversion = "3.00.00.093";
1815 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
1816     $dbh->do("ALTER TABLE `items` MODIFY COLUMN `copynumber` VARCHAR(32) DEFAULT NULL");
1817     $dbh->do("ALTER TABLE `deleteditems` MODIFY COLUMN `copynumber` VARCHAR(32) DEFAULT NULL");
1818         print "Upgrade to $DBversion done (Change data type of items.copynumber to allow free text)\n";
1819     SetVersion ($DBversion);
1820 }
1821
1822 $DBversion = "3.00.00.094";
1823 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
1824     $dbh->do("ALTER TABLE `marc_subfield_structure` MODIFY `tagsubfield` VARCHAR(1) NOT NULL DEFAULT '' COLLATE utf8_bin");
1825         print "Upgrade to $DBversion done (Change Collation of marc_subfield_structure to allow mixed case in subfield labels.)\n";
1826     SetVersion ($DBversion);
1827 }
1828
1829 $DBversion = "3.00.00.095";
1830 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
1831     if (C4::Context->preference("marcflavour") eq 'MARC21') {
1832         $dbh->do("UPDATE marc_subfield_structure SET authtypecode = 'MEETI_NAME' WHERE authtypecode = 'Meeting Name'");
1833         $dbh->do("UPDATE marc_subfield_structure SET authtypecode = 'CORPO_NAME' WHERE authtypecode = 'CORP0_NAME'");
1834     }
1835         print "Upgrade to $DBversion done (fix invalid authority types in MARC21 frameworks [bug 2254])\n";
1836     SetVersion ($DBversion);
1837 }
1838
1839 $DBversion = "3.00.00.096";
1840 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
1841     $sth = $dbh->prepare("SHOW COLUMNS FROM borrower_message_preferences LIKE 'wants_digets'");
1842     $sth->execute();
1843     if (my $row = $sth->fetchrow_hashref) {
1844         $dbh->do("ALTER TABLE borrower_message_preferences CHANGE wants_digets wants_digest tinyint(1) NOT NULL default 0");
1845     }
1846         print "Upgrade to $DBversion done (fix name borrower_message_preferences.wants_digest)\n";
1847     SetVersion ($DBversion);
1848 }
1849
1850 $DBversion = '3.00.00.097';
1851 if ( C4::Context->preference('Version') < TransformToNum($DBversion) ) {
1852
1853     $dbh->do('ALTER TABLE message_queue ADD to_address   mediumtext default NULL');
1854     $dbh->do('ALTER TABLE message_queue ADD from_address mediumtext default NULL');
1855     $dbh->do('ALTER TABLE message_queue ADD content_type text');
1856     $dbh->do('ALTER TABLE message_queue CHANGE borrowernumber borrowernumber int(11) default NULL');
1857
1858     print "Upgrade to $DBversion done (updating 4 fields in message_queue table)\n";
1859     SetVersion($DBversion);
1860 }
1861
1862 $DBversion = '3.00.00.098';
1863 if ( C4::Context->preference('Version') < TransformToNum($DBversion) ) {
1864
1865     $dbh->do(q(DELETE FROM message_transport_types WHERE message_transport_type = 'rss'));
1866     $dbh->do(q(DELETE FROM message_transports WHERE message_transport_type = 'rss'));
1867
1868     print "Upgrade to $DBversion done (removing unused RSS message_transport_type)\n";
1869     SetVersion($DBversion);
1870 }
1871
1872 $DBversion = '3.00.00.099';
1873 if ( C4::Context->preference('Version') < TransformToNum($DBversion) ) {
1874     $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')");
1875     print "Upgrade to $DBversion done (Adding OpacSuppression syspref)\n";
1876     SetVersion($DBversion);
1877 }
1878
1879 $DBversion = '3.00.00.100';
1880 if ( C4::Context->preference('Version') < TransformToNum($DBversion) ) {
1881         $dbh->do('ALTER TABLE virtualshelves ADD COLUMN lastmodified timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP');
1882     print "Upgrade to $DBversion done (Adding lastmodified column to virtualshelves)\n";
1883     SetVersion($DBversion);
1884 }
1885
1886 $DBversion = '3.00.00.101';
1887 if ( C4::Context->preference('Version') < TransformToNum($DBversion) ) {
1888         $dbh->do('ALTER TABLE `overduerules` CHANGE `categorycode` `categorycode` VARCHAR(10) NOT NULL');
1889         $dbh->do('ALTER TABLE `deletedborrowers` CHANGE `categorycode` `categorycode` VARCHAR(10) NOT NULL');
1890     print "Upgrade to $DBversion done (Updating columnd definitions for patron category codes in notice/statsu triggers and deletedborrowers tables.)\n";
1891     SetVersion($DBversion);
1892 }
1893
1894 $DBversion = '3.00.00.102';
1895 if ( C4::Context->preference('Version') < TransformToNum($DBversion) ) {
1896         $dbh->do('ALTER TABLE serialitems MODIFY `serialid` int(11) NOT NULL AFTER itemnumber' );
1897         $dbh->do('ALTER TABLE serialitems DROP KEY serialididx' );
1898         $dbh->do('ALTER TABLE serialitems ADD CONSTRAINT UNIQUE KEY serialitemsidx (itemnumber)' );
1899         # before setting constraint, delete any unvalid data
1900         $dbh->do('DELETE from serialitems WHERE serialid not in (SELECT serial.serialid FROM serial)');
1901         $dbh->do('ALTER TABLE serialitems ADD CONSTRAINT serialitems_sfk_1 FOREIGN KEY (serialid) REFERENCES serial (serialid) ON DELETE CASCADE ON UPDATE CASCADE' );
1902     print "Upgrade to $DBversion done (Updating serialitems table to allow for multiple items per serial fixing kohabug 2380)\n";
1903     SetVersion($DBversion);
1904 }
1905
1906 $DBversion = "3.00.00.103";
1907 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
1908     $dbh->do("DELETE FROM systempreferences WHERE variable='serialsadditems'");
1909     print "Upgrade to $DBversion done ( Verifying the removal of serialsadditems from syspref fixing kohabug 2219)\n";
1910     SetVersion ($DBversion);
1911 }
1912
1913 $DBversion = "3.00.00.104";
1914 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
1915     $dbh->do("DELETE FROM systempreferences WHERE variable='noOPACHolds'");
1916     print "Upgrade to $DBversion done (remove superseded 'noOPACHolds' system preference per bug 2413)\n";
1917     SetVersion ($DBversion);
1918 }
1919
1920 $DBversion = '3.00.00.105';
1921 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
1922
1923     # it is possible that this syspref is already defined since the feature was added some time ago.
1924     unless ( $dbh->do(q(SELECT variable FROM systempreferences WHERE variable = 'SMSSendDriver')) ) {
1925         $dbh->do(<<'END_SQL');
1926 INSERT INTO `systempreferences`
1927   (variable,value,explanation,options,type)
1928 VALUES
1929 ('SMSSendDriver','','Sets which SMS::Send driver is used to send SMS messages.','','free')
1930 END_SQL
1931     }
1932     print "Upgrade to $DBversion done (added SMSSendDriver system preference)\n";
1933     SetVersion($DBversion);
1934 }
1935
1936 $DBversion = "3.00.00.106";
1937 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
1938     $dbh->do("DELETE FROM systempreferences WHERE variable='noOPACHolds'");
1939
1940 # db revision 105 didn't apply correctly, so we're rolling this into 106
1941         $dbh->do("INSERT INTO `systempreferences`
1942    (variable,value,explanation,options,type)
1943         VALUES
1944         ('SMSSendDriver','','Sets which SMS::Send driver is used to send SMS messages.','','free')");
1945
1946     print "Upgrade to $DBversion done (remove default '0000-00-00' in subscriptionhistory.enddate field)\n";
1947     $dbh->do("ALTER TABLE `subscriptionhistory` CHANGE `enddate` `enddate` DATE NULL DEFAULT NULL ");
1948     $dbh->do("UPDATE subscriptionhistory SET enddate=NULL WHERE enddate='0000-00-00'");
1949     SetVersion ($DBversion);
1950 }
1951
1952 $DBversion = '3.00.00.107';
1953 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
1954     $dbh->do(<<'END_SQL');
1955 UPDATE systempreferences
1956   SET explanation = CONCAT( explanation, '. WARNING: this feature is very resource consuming on collections with large numbers of items.' )
1957   WHERE variable = 'OPACShelfBrowser'
1958     AND explanation NOT LIKE '%WARNING%'
1959 END_SQL
1960     $dbh->do(<<'END_SQL');
1961 UPDATE systempreferences
1962   SET explanation = CONCAT( explanation, '. WARNING: this feature is very resource consuming.' )
1963   WHERE variable = 'CataloguingLog'
1964     AND explanation NOT LIKE '%WARNING%'
1965 END_SQL
1966     $dbh->do(<<'END_SQL');
1967 UPDATE systempreferences
1968   SET explanation = CONCAT( explanation, '. WARNING: using NoZebra on even modest sized collections is very slow.' )
1969   WHERE variable = 'NoZebra'
1970     AND explanation NOT LIKE '%WARNING%'
1971 END_SQL
1972     print "Upgrade to $DBversion done (warning added to OPACShelfBrowser system preference)\n";
1973     SetVersion ($DBversion);
1974 }
1975
1976 $DBversion = '3.01.00.000';
1977 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
1978     print "Upgrade to $DBversion done (start of 3.1)\n";
1979     SetVersion ($DBversion);
1980 }
1981
1982 $DBversion = '3.01.00.001';
1983 if ( C4::Context->preference('Version') < TransformToNum($DBversion) ) {
1984     $dbh->do("
1985         CREATE TABLE hold_fill_targets (
1986             `borrowernumber` int(11) NOT NULL,
1987             `biblionumber` int(11) NOT NULL,
1988             `itemnumber` int(11) NOT NULL,
1989             `source_branchcode`  varchar(10) default NULL,
1990             `item_level_request` tinyint(4) NOT NULL default 0,
1991             PRIMARY KEY `itemnumber` (`itemnumber`),
1992             KEY `bib_branch` (`biblionumber`, `source_branchcode`),
1993             CONSTRAINT `hold_fill_targets_ibfk_1` FOREIGN KEY (`borrowernumber`)
1994                 REFERENCES `borrowers` (`borrowernumber`) ON DELETE CASCADE ON UPDATE CASCADE,
1995             CONSTRAINT `hold_fill_targets_ibfk_2` FOREIGN KEY (`biblionumber`)
1996                 REFERENCES `biblio` (`biblionumber`) ON DELETE CASCADE ON UPDATE CASCADE,
1997             CONSTRAINT `hold_fill_targets_ibfk_3` FOREIGN KEY (`itemnumber`)
1998                 REFERENCES `items` (`itemnumber`) ON DELETE CASCADE ON UPDATE CASCADE,
1999             CONSTRAINT `hold_fill_targets_ibfk_4` FOREIGN KEY (`source_branchcode`)
2000                 REFERENCES `branches` (`branchcode`) ON DELETE CASCADE ON UPDATE CASCADE
2001         ) ENGINE=InnoDB DEFAULT CHARSET=utf8
2002     ");
2003     $dbh->do("
2004         ALTER TABLE tmp_holdsqueue
2005             ADD item_level_request tinyint(4) NOT NULL default 0
2006     ");
2007
2008     print "Upgrade to $DBversion done (add hold_fill_targets table and a column to tmp_holdsqueue)\n";
2009     SetVersion($DBversion);
2010 }
2011
2012 $DBversion = '3.01.00.002';
2013 if ( C4::Context->preference('Version') < TransformToNum($DBversion) ) {
2014     # use statistics where available
2015     $dbh->do("
2016         ALTER TABLE statistics ADD KEY  tmp_stats (type, itemnumber, borrowernumber)
2017     ");
2018     $dbh->do("
2019         UPDATE issues iss
2020         SET issuedate = (
2021             SELECT max(datetime)
2022             FROM statistics
2023             WHERE type = 'issue'
2024             AND itemnumber = iss.itemnumber
2025             AND borrowernumber = iss.borrowernumber
2026         )
2027         WHERE issuedate IS NULL;
2028     ");
2029     $dbh->do("ALTER TABLE statistics DROP KEY tmp_stats");
2030
2031     # default to last renewal date
2032     $dbh->do("
2033         UPDATE issues
2034         SET issuedate = lastreneweddate
2035         WHERE issuedate IS NULL
2036         and lastreneweddate IS NOT NULL
2037     ");
2038
2039     my $num_bad_issuedates = $dbh->selectrow_array("SELECT COUNT(*) FROM issues WHERE issuedate IS NULL");
2040     if ($num_bad_issuedates > 0) {
2041         print STDERR "After the upgrade to $DBversion, there are still $num_bad_issuedates loan(s) with a NULL (blank) loan date. ",
2042                      "Please check the issues table in your database.";
2043     }
2044     print "Upgrade to $DBversion done (bug 2582: set null issues.issuedate to lastreneweddate)\n";
2045     SetVersion($DBversion);
2046 }
2047
2048 $DBversion = "3.01.00.003";
2049 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
2050     $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')");
2051     print "Upgrade to $DBversion done (add new syspref)\n";
2052     SetVersion ($DBversion);
2053 }
2054
2055 $DBversion = '3.01.00.004';
2056 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
2057     $dbh->do("INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES ('OPACDisplayRequestPriority','0','Show patrons the priority level on holds in the OPAC','','YesNo')");
2058     print "Upgrade to $DBversion done (added OPACDisplayRequestPriority system preference)\n";
2059     SetVersion ($DBversion);
2060 }
2061
2062 $DBversion = '3.01.00.005';
2063 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
2064     $dbh->do("
2065         INSERT INTO `letter` (module, code, name, title, content)
2066         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>>')
2067     ");
2068     $dbh->do("INSERT INTO `message_attributes` (message_attribute_id, message_name, takes_days) values(4, 'Hold Filled', 0)");
2069     $dbh->do("INSERT INTO `message_transports` (message_attribute_id, message_transport_type, is_digest, letter_module, letter_code) values(4, 'sms', 0, 'reserves', 'HOLD')");
2070     $dbh->do("INSERT INTO `message_transports` (message_attribute_id, message_transport_type, is_digest, letter_module, letter_code) values(4, 'email', 0, 'reserves', 'HOLD')");
2071     print "Upgrade to $DBversion done (Add letter for holds notifications)\n";
2072     SetVersion ($DBversion);
2073 }
2074
2075 $DBversion = '3.01.00.006';
2076 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
2077     $dbh->do("ALTER TABLE `biblioitems` ADD KEY issn (issn)");
2078     print "Upgrade to $DBversion done (add index on biblioitems.issn)\n";
2079     SetVersion ($DBversion);
2080 }
2081
2082 $DBversion = "3.01.00.007";
2083 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
2084     $dbh->do("UPDATE `systempreferences` SET options='70|10' WHERE variable='intranetmainUserblock'");
2085     $dbh->do("UPDATE `systempreferences` SET options='70|10' WHERE variable='intranetuserjs'");
2086     $dbh->do("UPDATE `systempreferences` SET options='70|10' WHERE variable='opacheader'");
2087     $dbh->do("UPDATE `systempreferences` SET options='70|10' WHERE variable='OpacMainUserBlock'");
2088     $dbh->do("UPDATE `systempreferences` SET options='70|10' WHERE variable='OpacNav'");
2089     $dbh->do("UPDATE `systempreferences` SET options='70|10' WHERE variable='opacuserjs'");
2090     $dbh->do("UPDATE `systempreferences` SET options='30|10', type='Textarea' WHERE variable='OAI-PMH:Set'");
2091     $dbh->do("UPDATE `systempreferences` SET options='50' WHERE variable='intranetstylesheet'");
2092     $dbh->do("UPDATE `systempreferences` SET options='50' WHERE variable='intranetcolorstylesheet'");
2093     $dbh->do("UPDATE `systempreferences` SET options='10' WHERE variable='globalDueDate'");
2094     $dbh->do("UPDATE `systempreferences` SET type='Integer' WHERE variable='numSearchResults'");
2095     $dbh->do("UPDATE `systempreferences` SET type='Integer' WHERE variable='OPACnumSearchResults'");
2096     $dbh->do("UPDATE `systempreferences` SET type='Integer' WHERE variable='ReservesMaxPickupDelay'");
2097     $dbh->do("UPDATE `systempreferences` SET type='Integer' WHERE variable='TransfersMaxDaysWarning'");
2098     $dbh->do("UPDATE `systempreferences` SET type='Integer' WHERE variable='StaticHoldsQueueWeight'");
2099     $dbh->do("UPDATE `systempreferences` SET type='Integer' WHERE variable='holdCancelLength'");
2100     $dbh->do("UPDATE `systempreferences` SET type='Integer' WHERE variable='XISBNDailyLimit'");
2101     $dbh->do("UPDATE `systempreferences` SET type='Float' WHERE variable='gist'");
2102     $dbh->do("UPDATE `systempreferences` SET type='Free' WHERE variable='BakerTaylorUsername'");
2103     $dbh->do("UPDATE `systempreferences` SET type='Free' WHERE variable='BakerTaylorPassword'");
2104     $dbh->do("UPDATE `systempreferences` SET type='Textarea', options='70|10' WHERE variable='ISBD'");
2105     $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'");
2106     print "Upgrade to $DBversion done (fix display of many sysprefs)\n";
2107     SetVersion ($DBversion);
2108 }
2109
2110 $DBversion = '3.01.00.008';
2111 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
2112
2113     $dbh->do("CREATE TABLE branch_transfer_limits (
2114                           limitId int(8) NOT NULL auto_increment,
2115                           toBranch varchar(4) NOT NULL,
2116                           fromBranch varchar(4) NOT NULL,
2117                           itemtype varchar(4) NOT NULL,
2118                           PRIMARY KEY  (limitId)
2119                           ) ENGINE=InnoDB DEFAULT CHARSET=utf8"
2120                         );
2121
2122     $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')");
2123
2124     print "Upgrade to $DBversion done (added branch_transfer_limits table and UseBranchTransferLimits system preference)\n";
2125     SetVersion ($DBversion);
2126 }
2127
2128 $DBversion = "3.01.00.009";
2129 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
2130     $dbh->do("ALTER TABLE permissions MODIFY `code` varchar(64) DEFAULT NULL");
2131     $dbh->do("ALTER TABLE user_permissions MODIFY `code` varchar(64) DEFAULT NULL");
2132     $dbh->do("INSERT INTO permissions (module_bit, code, description) VALUES ( 1, 'circulate_remaining_permissions', 'Remaining circulation permissions')");
2133     $dbh->do("INSERT INTO permissions (module_bit, code, description) VALUES ( 1, 'override_renewals', 'Override blocked renewals')");
2134     print "Upgrade to $DBversion done (added subpermissions for circulate permission)\n";
2135 }
2136
2137 $DBversion = '3.01.00.010';
2138 if ( C4::Context->preference('Version') < TransformToNum($DBversion) ) {
2139     $dbh->do("ALTER TABLE `borrower_attributes` MODIFY COLUMN `attribute` VARCHAR(64) DEFAULT NULL");
2140     $dbh->do("ALTER TABLE `borrower_attributes` MODIFY COLUMN `password` VARCHAR(64) DEFAULT NULL");
2141     print "Upgrade to $DBversion done (bug 2687: increase length of borrower attribute fields)\n";
2142     SetVersion ($DBversion);
2143 }
2144
2145 $DBversion = '3.01.00.011';
2146 if ( C4::Context->preference('Version') < TransformToNum($DBversion) ) {
2147
2148     # Yes, the old value was ^M terminated.
2149     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);";
2150
2151     my $intranetuserjs = C4::Context->preference('intranetuserjs');
2152     if ($intranetuserjs  and  $intranetuserjs eq $bad_value) {
2153         my $sql = <<'END_SQL';
2154 UPDATE systempreferences
2155 SET value = ''
2156 WHERE variable = 'intranetuserjs'
2157 END_SQL
2158         $dbh->do($sql);
2159     }
2160     print "Upgrade to $DBversion done (removed bogus intranetuserjs syspref)\n";
2161     SetVersion($DBversion);
2162 }
2163
2164 $DBversion = "3.01.00.012";
2165 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
2166     $dbh->do("INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES('AllowHoldPolicyOverride', '0', 'Allow staff to override hold policies when placing holds',NULL,'YesNo')");
2167     $dbh->do("
2168         CREATE TABLE `branch_item_rules` (
2169           `branchcode` varchar(10) NOT NULL,
2170           `itemtype` varchar(10) NOT NULL,
2171           `holdallowed` tinyint(1) default NULL,
2172           PRIMARY KEY  (`itemtype`,`branchcode`),
2173           KEY `branch_item_rules_ibfk_2` (`branchcode`),
2174           CONSTRAINT `branch_item_rules_ibfk_1` FOREIGN KEY (`itemtype`) REFERENCES `itemtypes` (`itemtype`) ON DELETE CASCADE ON UPDATE CASCADE,
2175           CONSTRAINT `branch_item_rules_ibfk_2` FOREIGN KEY (`branchcode`) REFERENCES `branches` (`branchcode`) ON DELETE CASCADE ON UPDATE CASCADE
2176         ) ENGINE=InnoDB DEFAULT CHARSET=utf8
2177     ");
2178     $dbh->do("
2179         CREATE TABLE `default_branch_item_rules` (
2180           `itemtype` varchar(10) NOT NULL,
2181           `holdallowed` tinyint(1) default NULL,
2182           PRIMARY KEY  (`itemtype`),
2183           CONSTRAINT `default_branch_item_rules_ibfk_1` FOREIGN KEY (`itemtype`) REFERENCES `itemtypes` (`itemtype`) ON DELETE CASCADE ON UPDATE CASCADE
2184         ) ENGINE=InnoDB DEFAULT CHARSET=utf8
2185     ");
2186     $dbh->do("
2187         ALTER TABLE default_branch_circ_rules
2188             ADD COLUMN holdallowed tinyint(1) NULL
2189     ");
2190     $dbh->do("
2191         ALTER TABLE default_circ_rules
2192             ADD COLUMN holdallowed tinyint(1) NULL
2193     ");
2194     print "Upgrade to $DBversion done (Add tables and system preferences for holds policies)\n";
2195     SetVersion ($DBversion);
2196 }
2197
2198 $DBversion = '3.01.00.013';
2199 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
2200     $dbh->do("
2201         CREATE TABLE item_circulation_alert_preferences (
2202             id           int(11) AUTO_INCREMENT,
2203             branchcode   varchar(10) NOT NULL,
2204             categorycode varchar(10) NOT NULL,
2205             item_type    varchar(10) NOT NULL,
2206             notification varchar(16) NOT NULL,
2207             PRIMARY KEY (id),
2208             KEY (branchcode, categorycode, item_type, notification)
2209         ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
2210     ");
2211
2212     $dbh->do(q{ ALTER TABLE `message_queue` ADD metadata text DEFAULT NULL           AFTER content;  });
2213     $dbh->do(q{ ALTER TABLE `message_queue` ADD letter_code varchar(64) DEFAULT NULL AFTER metadata; });
2214
2215     $dbh->do(q{
2216         INSERT INTO `letter` (`module`, `code`, `name`, `title`, `content`) VALUES
2217         ('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.');
2218     });
2219     $dbh->do(q{
2220         INSERT INTO `letter` (`module`, `code`, `name`, `title`, `content`) VALUES
2221         ('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>>.');
2222     });
2223
2224     $dbh->do(q{INSERT INTO message_attributes (message_attribute_id, message_name, takes_days) VALUES (5, 'Item Check-in', 0);});
2225     $dbh->do(q{INSERT INTO message_attributes (message_attribute_id, message_name, takes_days) VALUES (6, 'Item Checkout', 0);});
2226
2227     $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');});
2228     $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');});
2229     $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');});
2230     $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');});
2231
2232     print "Upgrade to $DBversion done (data for Email Checkout Slips project)\n";
2233          SetVersion ($DBversion);
2234 }
2235
2236 $DBversion = "3.01.00.014";
2237 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
2238     $dbh->do("ALTER TABLE `branch_transfer_limits` CHANGE `itemtype` `itemtype` VARCHAR( 4 ) CHARACTER SET utf8 COLLATE utf8_general_ci NULL");
2239     $dbh->do("ALTER TABLE `branch_transfer_limits` ADD `ccode` VARCHAR( 10 ) NULL ;");
2240     $dbh->do("INSERT INTO `systempreferences` ( `variable` , `value` , `options` , `explanation` , `type` )
2241     VALUES (
2242     'BranchTransferLimitsType', 'ccode', 'itemtype|ccode', 'When using branch transfer limits, choose whether to limit by itemtype or collection code.', 'Choice'
2243     );");
2244
2245     print "Upgrade to $DBversion done ( Updated table for Branch Transfer Limits)\n";
2246     SetVersion ($DBversion);
2247 }
2248
2249 $DBversion = '3.01.00.015';
2250 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
2251     $dbh->do("INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES ('SyndeticsClientCode', '0', 'Client Code for using Syndetics Solutions content','','free')");
2252
2253     $dbh->do("INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES ('SyndeticsEnabled', '0', 'Turn on Syndetics Enhanced Content','','YesNo')");
2254
2255     $dbh->do("INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES ('SyndeticsCoverImages', '0', 'Display Cover Images from Syndetics','','YesNo')");
2256
2257     $dbh->do("INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES ('SyndeticsTOC', '0', 'Display Table of Content information from Syndetics','','YesNo')");
2258
2259     $dbh->do("INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES ('SyndeticsSummary', '0', 'Display Summary Information from Syndetics','','YesNo')");
2260
2261     $dbh->do("INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES ('SyndeticsEditions', '0', 'Display Editions from Syndetics','','YesNo')");
2262
2263     $dbh->do("INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES ('SyndeticsExcerpt', '0', 'Display Excerpts and first chapters on OPAC from Syndetics','','YesNo')");
2264
2265     $dbh->do("INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES ('SyndeticsReviews', '0', 'Display Reviews on OPAC from Syndetics','','YesNo')");
2266
2267     $dbh->do("INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES ('SyndeticsAuthorNotes', '0', 'Display Notes about the Author on OPAC from Syndetics','','YesNo')");
2268
2269     $dbh->do("INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES ('SyndeticsAwards', '0', 'Display Awards on OPAC from Syndetics','','YesNo')");
2270
2271     $dbh->do("INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES ('SyndeticsSeries', '0', 'Display Series information on OPAC from Syndetics','','YesNo')");
2272
2273     $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')");
2274
2275     $dbh->do("INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES ('OPACAmazonCoverImages', '0', 'Display cover images on OPAC from Amazon Web Services','','YesNo')");
2276
2277     $dbh->do("INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES ('AmazonCoverImages', '0', 'Display Cover Images in Staff Client from Amazon Web Services','','YesNo')");
2278
2279     $dbh->do("UPDATE systempreferences SET variable='AmazonEnabled' WHERE variable = 'AmazonContent'");
2280
2281     $dbh->do("UPDATE systempreferences SET variable='OPACAmazonEnabled' WHERE variable = 'OPACAmazonContent'");
2282
2283     print "Upgrade to $DBversion done (added Syndetics Enhanced Content system preferences)\n";
2284     SetVersion ($DBversion);
2285 }
2286
2287 $DBversion = "3.01.00.016";
2288 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
2289     $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')");
2290     print "Upgrade to $DBversion done (Added Babeltheque syspref)\n";
2291     SetVersion ($DBversion);
2292 }
2293
2294 $DBversion = "3.01.00.017";
2295 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
2296     $dbh->do("ALTER TABLE `subscription` ADD `staffdisplaycount` VARCHAR(10) NULL;");
2297     $dbh->do("ALTER TABLE `subscription` ADD `opacdisplaycount` VARCHAR(10) NULL;");
2298     $dbh->do("INSERT INTO `systempreferences` ( `variable` , `value` , `options` , `explanation` , `type` )
2299     VALUES (
2300     'StaffSerialIssueDisplayCount', '3', '', 'Number of serial issues to display per subscription in the Staff client', 'Integer'
2301     );");
2302         $dbh->do("INSERT INTO `systempreferences` ( `variable` , `value` , `options` , `explanation` , `type` )
2303     VALUES (
2304     'OPACSerialIssueDisplayCount', '3', '', 'Number of serial issues to display per subscription in the OPAC', 'Integer'
2305     );");
2306
2307     print "Upgrade to $DBversion done ( Updated table for Serials Display)\n";
2308     SetVersion ($DBversion);
2309 }
2310
2311 $DBversion = "3.01.00.018";
2312 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
2313     $dbh->do("ALTER TABLE deletedborrowers ADD `smsalertnumber` varchar(50) default NULL");
2314     print "Upgrade to $DBversion done (added deletedborrowers.smsalertnumber, missed in 3.00.00.091)\n";
2315     SetVersion ($DBversion);
2316 }
2317
2318 $DBversion = "3.01.00.019";
2319 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
2320         $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')");
2321     print "Upgrade to $DBversion done (adding OPACShowCheckoutName systempref)\n";
2322     SetVersion ($DBversion);
2323 }
2324
2325 $DBversion = "3.01.00.020";
2326 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
2327     $dbh->do("INSERT INTO systempreferences (variable,value,explanation,options,type)VALUES('LibraryThingForLibrariesID','','See:http://librarything.com/forlibraries/','','free')");
2328     $dbh->do("INSERT INTO systempreferences (variable,value,explanation,options,type)VALUES('LibraryThingForLibrariesEnabled','0','Enable or Disable Library Thing for Libraries Features','','YesNo')");
2329     $dbh->do("INSERT INTO systempreferences (variable,value,explanation,options,type)VALUES('LibraryThingForLibrariesTabbedView','0','Put LibraryThingForLibraries Content in Tabs.','','YesNo')");
2330     print "Upgrade to $DBversion done (adding LibraryThing for Libraries sysprefs)\n";
2331     SetVersion ($DBversion);
2332 }
2333
2334 $DBversion = "3.01.00.021";
2335 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
2336     my $enable_reviews = C4::Context->preference('OPACAmazonEnabled') ? '1' : '0';
2337     $dbh->do("INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES ('OPACAmazonReviews', '$enable_reviews', 'Display Amazon readers reviews on OPAC','','YesNo')");
2338     print "Upgrade to $DBversion done (adding OPACAmazonReviews syspref)\n";
2339     SetVersion ($DBversion);
2340 }
2341
2342 $DBversion = '3.01.00.022';
2343 if ( C4::Context->preference('Version') < TransformToNum($DBversion) ) {
2344     $dbh->do("ALTER TABLE `labels_conf` MODIFY COLUMN `formatstring` mediumtext DEFAULT NULL");
2345     print "Upgrade to $DBversion done (bug 2945: increase size of labels_conf.formatstring)\n";
2346     SetVersion ($DBversion);
2347 }
2348
2349 $DBversion = '3.01.00.023';
2350 if ( C4::Context->preference('Version') < TransformToNum($DBversion) ) {
2351     $dbh->do("ALTER TABLE biblioitems        MODIFY COLUMN isbn VARCHAR(30) DEFAULT NULL");
2352     $dbh->do("ALTER TABLE deletedbiblioitems MODIFY COLUMN isbn VARCHAR(30) DEFAULT NULL");
2353     $dbh->do("ALTER TABLE import_biblios     MODIFY COLUMN isbn VARCHAR(30) DEFAULT NULL");
2354     $dbh->do("ALTER TABLE suggestions        MODIFY COLUMN isbn VARCHAR(30) DEFAULT NULL");
2355     print "Upgrade to $DBversion done (bug 2765: increase width of isbn column in several tables)\n";
2356     SetVersion ($DBversion);
2357 }
2358
2359 $DBversion = "3.01.00.024";
2360 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
2361     $dbh->do("ALTER TABLE labels MODIFY COLUMN batch_id int(10) NOT NULL default 1;");
2362     print "Upgrade to $DBversion done (change labels.batch_id from varchar to int)\n";
2363     SetVersion ($DBversion);
2364 }
2365
2366 $DBversion = '3.01.00.025';
2367 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
2368     $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')");
2369
2370     print "Upgrade to $DBversion done (added ceilingDueDate system preference)\n";
2371     SetVersion ($DBversion);
2372 }
2373
2374 $DBversion = '3.01.00.026';
2375 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
2376     $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')");
2377
2378     print "Upgrade to $DBversion done (added numReturnedItemsToShow system preference)\n";
2379     SetVersion ($DBversion);
2380 }
2381
2382 $DBversion = '3.01.00.027';
2383 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
2384     $dbh->do("ALTER TABLE zebraqueue CHANGE `biblio_auth_number` `biblio_auth_number` bigint(20) unsigned NOT NULL default 0");
2385     print "Upgrade to $DBversion done (Increased size of zebraqueue biblio_auth_number to address bug 3148.)\n";
2386     SetVersion ($DBversion);
2387 }
2388
2389 $DBversion = '3.01.00.028';
2390 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
2391     my $enable_reviews = C4::Context->preference('AmazonEnabled') ? '1' : '0';
2392     $dbh->do("INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES ('AmazonReviews', '$enable_reviews', 'Display Amazon reviews on staff interface','','YesNo')");
2393     print "Upgrade to $DBversion done (added AmazonReviews)\n";
2394     SetVersion ($DBversion);
2395 }
2396
2397 $DBversion = '3.01.00.029';
2398 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
2399     $dbh->do(q( UPDATE language_rfc4646_to_iso639
2400                 SET iso639_2_code = 'spa'
2401                 WHERE rfc4646_subtag = 'es'
2402                 AND   iso639_2_code = 'rus' )
2403             );
2404     print "Upgrade to $DBversion done (fixed bug 2599: using Spanish search limit retrieves Russian results)\n";
2405     SetVersion ($DBversion);
2406 }
2407
2408 $DBversion = "3.01.00.030";
2409 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
2410     $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')");
2411     print "Upgrade to $DBversion done (added AllowNotForLoanOverride system preference)\n";
2412     SetVersion ($DBversion);
2413 }
2414
2415 $DBversion = "3.01.00.031";
2416 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
2417     $dbh->do("ALTER TABLE branch_transfer_limits
2418               MODIFY toBranch   varchar(10) NOT NULL,
2419               MODIFY fromBranch varchar(10) NOT NULL,
2420               MODIFY itemtype   varchar(10) NULL");
2421     print "Upgrade to $DBversion done (fix column widths in branch_transfer_limits)\n";
2422     SetVersion ($DBversion);
2423 }
2424
2425 $DBversion = "3.01.00.032";
2426 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
2427     $dbh->do(<<ENDOFRENEWAL);
2428 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');
2429 ENDOFRENEWAL
2430     print "Upgrade to $DBversion done (Change the field)\n";
2431     SetVersion ($DBversion);
2432 }
2433
2434 $DBversion = "3.01.00.033";
2435 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
2436     $dbh->do(q/
2437         ALTER TABLE borrower_message_preferences
2438         MODIFY borrowernumber int(11) default NULL,
2439         ADD    categorycode varchar(10) default NULL AFTER borrowernumber,
2440         ADD KEY `categorycode` (`categorycode`),
2441         ADD CONSTRAINT `borrower_message_preferences_ibfk_3`
2442                        FOREIGN KEY (`categorycode`) REFERENCES `categories` (`categorycode`)
2443                        ON DELETE CASCADE ON UPDATE CASCADE
2444     /);
2445     print "Upgrade to $DBversion done (DB changes to allow patron category defaults for messaging preferences)\n";
2446     SetVersion ($DBversion);
2447 }
2448
2449 $DBversion = "3.01.00.034";
2450 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
2451     $dbh->do("ALTER TABLE `subscription` ADD COLUMN `graceperiod` INT(11) NOT NULL default '0';");
2452     print "Upgrade to $DBversion done (Adding graceperiod column to subscription table)\n";
2453     SetVersion ($DBversion);
2454 }
2455
2456 $DBversion = '3.01.00.035';
2457 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
2458     $dbh->do(q{ ALTER TABLE `subscription` ADD location varchar(80) NULL DEFAULT '' AFTER callnumber; });
2459    print "Upgrade to $DBversion done (Adding location to subscription table)\n";
2460     SetVersion ($DBversion);
2461 }
2462
2463 $DBversion = '3.01.00.036';
2464 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
2465     $dbh->do("UPDATE systempreferences SET explanation = 'Choose the default detail view in the staff interface; choose between normal, labeled_marc, marc or isbd'
2466               WHERE variable = 'IntranetBiblioDefaultView'
2467               AND   explanation = 'IntranetBiblioDefaultView'");
2468     $dbh->do("UPDATE systempreferences SET type = 'Choice', options = 'normal|marc|isbd|labeled_marc'
2469               WHERE variable = 'IntranetBiblioDefaultView'");
2470     $dbh->do("INSERT INTO systempreferences (variable,value,explanation,options,type)VALUES('viewISBD','1','Allow display of ISBD view of bibiographic records','','YesNo')");
2471     $dbh->do("INSERT INTO systempreferences (variable,value,explanation,options,type)VALUES('viewLabeledMARC','0','Allow display of labeled MARC view of bibiographic records','','YesNo')");
2472     $dbh->do("INSERT INTO systempreferences (variable,value,explanation,options,type)VALUES('viewMARC','1','Allow display of MARC view of bibiographic records','','YesNo')");
2473     print "Upgrade to $DBversion done (new viewISBD, viewLabeledMARC, viewMARC sysprefs and tweak IntranetBiblioDefaultView)\n";
2474     SetVersion ($DBversion);
2475 }
2476
2477 $DBversion = '3.01.00.037';
2478 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
2479     $dbh->do('ALTER TABLE authorised_values ADD KEY `lib` (`lib`)');
2480     $dbh->do("INSERT INTO systempreferences (variable,value,explanation,options,type)VALUES('FilterBeforeOverdueReport','0','Do not run overdue report until filter selected','','YesNo')");
2481     SetVersion ($DBversion);
2482     print "Upgrade to $DBversion done (added FilterBeforeOverdueReport syspref and new index on authorised_values)\n";
2483 }
2484
2485 $DBversion = "3.01.00.038";
2486 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
2487     # update branches table
2488     #
2489     $dbh->do("ALTER TABLE branches ADD `branchzip` varchar(25) default NULL AFTER `branchaddress3`");
2490     $dbh->do("ALTER TABLE branches ADD `branchcity` mediumtext AFTER `branchzip`");
2491     $dbh->do("ALTER TABLE branches ADD `branchcountry` text AFTER `branchcity`");
2492     $dbh->do("ALTER TABLE branches ADD `branchurl` mediumtext AFTER `branchemail`");
2493     $dbh->do("ALTER TABLE branches ADD `branchnotes` mediumtext AFTER `branchprinter`");
2494     print "Upgrade to $DBversion done (add ZIP, city, country, URL, and notes column to branches)\n";
2495     SetVersion ($DBversion);
2496 }
2497
2498 $DBversion = '3.01.00.039';
2499 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
2500     $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')");
2501     $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')");
2502     SetVersion ($DBversion);
2503     print "Upgrade to $DBversion done (added SpineLabelFormat and SpineLabelAutoPrint sysprefs)\n";
2504 }
2505
2506 $DBversion = '3.01.00.040';
2507 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
2508     $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')");
2509     $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')");
2510     SetVersion ($DBversion);
2511     print "Upgrade to $DBversion done (AllowHoldDateInFuture and OPACAllowHoldDateInFuture sysprefs)\n";
2512 }
2513
2514 $DBversion = '3.01.00.041';
2515 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
2516     $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')");
2517     SetVersion ($DBversion);
2518     print "Upgrade to $DBversion done (added AWSPrivateKey syspref - note that if you use enhanced content from Amazon, this should be set right away.)\n";
2519 }
2520
2521 $DBversion = '3.01.00.042';
2522 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
2523     $dbh->do("INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('OPACFineNoRenewals','99999','Fine Limit above which user canmot renew books via OPAC','','Integer')");
2524     SetVersion ($DBversion);
2525     print "Upgrade to $DBversion done (added OPACFineNoRenewals syspref)\n";
2526 }
2527
2528 $DBversion = '3.01.00.043';
2529 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
2530     $dbh->do('ALTER TABLE items ADD COLUMN permanent_location VARCHAR(80) DEFAULT NULL AFTER location');
2531     $dbh->do('UPDATE items SET permanent_location = location');
2532     $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 )', '')");
2533     $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')");
2534     $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')");
2535     SetVersion ($DBversion);
2536     print "Upgrade to $DBversion done (amended Item added NewItemsDefaultLocation, InProcessingToShelvingCart, ReturnToShelvingCart sysprefs)\n";
2537 }
2538
2539 $DBversion = '3.01.00.044';
2540 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
2541     $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')");
2542     SetVersion ($DBversion);
2543     print "Upgrade to $DBversion done (added DisplayClearScreenButton system preference)\n";
2544 }
2545
2546 $DBversion = '3.01.00.045';
2547 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
2548     $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')");
2549     SetVersion ($DBversion);
2550     print "Upgrade to $DBversion done (added a preference to hide the patrons name in the staff catalog)\n";
2551 }
2552
2553 $DBversion = "3.01.00.046";
2554 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
2555     # update borrowers table
2556     #
2557     $dbh->do("ALTER TABLE borrowers ADD `country` text AFTER zipcode");
2558     $dbh->do("ALTER TABLE borrowers ADD `B_country` text AFTER B_zipcode");
2559     $dbh->do("ALTER TABLE deletedborrowers ADD `country` text AFTER zipcode");
2560     $dbh->do("ALTER TABLE deletedborrowers ADD `B_country` text AFTER B_zipcode");
2561     print "Upgrade to $DBversion done (add country and B_country to borrowers)\n";
2562     SetVersion ($DBversion);
2563 }
2564
2565 $DBversion = '3.01.00.047';
2566 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
2567     $dbh->do("ALTER TABLE items MODIFY itemcallnumber varchar(255);");
2568     $dbh->do("ALTER TABLE deleteditems MODIFY itemcallnumber varchar(255);");
2569     $dbh->do("ALTER TABLE tmp_holdsqueue MODIFY itemcallnumber varchar(255);");
2570     SetVersion ($DBversion);
2571     print " Upgrade to $DBversion done (bug 2761: change max length of itemcallnumber to 255 from 30)\n";
2572 }
2573
2574 $DBversion = '3.01.00.048';
2575 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
2576     $dbh->do("UPDATE userflags SET flagdesc='View Catalog (Librarian Interface)' WHERE bit=2;");
2577     $dbh->do("UPDATE userflags SET flagdesc='Edit Catalog (Modify bibliographic/holdings data)' WHERE bit=9;");
2578     $dbh->do("UPDATE userflags SET flagdesc='Allow to edit authorities' WHERE bit=14;");
2579     $dbh->do("UPDATE userflags SET flagdesc='Allow to access to the reports module' WHERE bit=16;");
2580     $dbh->do("UPDATE userflags SET flagdesc='Allow to manage serials subscriptions' WHERE bit=15;");
2581     SetVersion ($DBversion);
2582     print " Upgrade to $DBversion done (bug 2611: fix spelling/capitalization in permission flag descriptions)\n";
2583 }
2584
2585 $DBversion = '3.01.00.049';
2586 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
2587     $dbh->do("UPDATE permissions SET description = 'Perform inventory (stocktaking) of your catalog' WHERE code = 'inventory';");
2588      SetVersion ($DBversion);
2589     print "Upgrade to $DBversion done (bug 2611: changed catalogue to catalog per the standard)\n";
2590 }
2591
2592 $DBversion = '3.01.00.050';
2593 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
2594     $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');");
2595     SetVersion ($DBversion);
2596     print "Upgrade to $DBversion done (bug 1934: Add OPACSearchForTitleIn syspref)\n";
2597 }
2598
2599 $DBversion = '3.01.00.051';
2600 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
2601     $dbh->do("UPDATE systempreferences SET explanation='Fine limit above which user cannot renew books via OPAC' WHERE variable='OPACFineNoRenewals';");
2602     $dbh->do("UPDATE systempreferences SET explanation='If set to ON, a clear screen button will appear on the circulation page.' WHERE variable='DisplayClearScreenButton';");
2603     SetVersion ($DBversion);
2604     print "Upgrade to $DBversion done (fixed typos in new sysprefs)\n";
2605 }
2606
2607 $DBversion = '3.01.00.052';
2608 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
2609     $dbh->do('ALTER TABLE deleteditems ADD COLUMN permanent_location VARCHAR(80) DEFAULT NULL AFTER location');
2610     SetVersion ($DBversion);
2611     print "Upgrade to $DBversion done (bug 3481: add permanent_location column to deleteditems)\n";
2612 }
2613
2614 $DBversion = '3.01.00.053';
2615 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
2616     my $upgrade_script = C4::Context->config("intranetdir") . "/installer/data/mysql/labels_upgrade.pl";
2617     system("perl $upgrade_script");
2618     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";
2619     SetVersion ($DBversion);
2620 }
2621
2622 $DBversion = '3.01.00.054';
2623 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
2624     $dbh->do("ALTER TABLE borrowers ADD `B_address2` text AFTER B_address");
2625     $dbh->do("ALTER TABLE borrowers ADD `altcontactcountry` text AFTER altcontactzipcode");
2626     $dbh->do("ALTER TABLE deletedborrowers ADD `B_address2` text AFTER B_address");
2627     $dbh->do("ALTER TABLE deletedborrowers ADD `altcontactcountry` text AFTER altcontactzipcode");
2628     SetVersion ($DBversion);
2629     print "Upgrade to $DBversion done (bug 1600, bug 3454: add altcontactcountry and B_address2 to borrowers and deletedborrowers)\n";
2630 }
2631
2632 $DBversion = '3.01.00.055';
2633 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
2634     $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'|);
2635     SetVersion ($DBversion);
2636     print "Upgrade to $DBversion done (changed OPACSearchForTitleIn per requests in bug 1934)\n";
2637 }
2638
2639 $DBversion = '3.01.00.056';
2640 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
2641     $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');");
2642     SetVersion ($DBversion);
2643     print "Upgrade to $DBversion done (Bug 1172 : Add OPACPatronDetails syspref)\n";
2644 }
2645
2646 $DBversion = '3.01.00.057';
2647 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
2648     $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');");
2649     SetVersion ($DBversion);
2650     print "Upgrade to $DBversion done (Bug 2576 : Add OPACFinesTab syspref)\n";
2651 }
2652
2653 $DBversion = '3.01.00.058';
2654 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
2655     $dbh->do("ALTER TABLE `language_subtag_registry` ADD `id` INT( 11 ) NOT NULL AUTO_INCREMENT PRIMARY KEY;");
2656     $dbh->do("ALTER TABLE `language_rfc4646_to_iso639` ADD `id` INT( 11 ) NOT NULL AUTO_INCREMENT PRIMARY KEY;");
2657     $dbh->do("ALTER TABLE `language_descriptions` ADD `id` INT( 11 ) NOT NULL AUTO_INCREMENT PRIMARY KEY;");
2658     SetVersion ($DBversion);
2659     print "Upgrade to $DBversion done (Added primary keys to language tables)\n";
2660 }
2661
2662 $DBversion = '3.01.00.059';
2663 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
2664     $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')");
2665     SetVersion ($DBversion);
2666     print "Upgrade to $DBversion done (added DisplayOPACiconsXSLT sysprefs)\n";
2667 }
2668
2669 $DBversion = '3.01.00.060';
2670 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
2671     $dbh->do("INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES('AllowAllMessageDeletion','0','Allow any Library to delete any message','','YesNo');");
2672     $dbh->do('DROP TABLE IF EXISTS messages');
2673     $dbh->do("CREATE TABLE messages ( `message_id` int(11) NOT NULL auto_increment,
2674         `borrowernumber` int(11) NOT NULL,
2675         `branchcode` varchar(4) default NULL,
2676         `message_type` varchar(1) NOT NULL,
2677         `message` text NOT NULL,
2678         `message_date` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
2679         PRIMARY KEY (`message_id`)
2680         ) ENGINE=InnoDB DEFAULT CHARSET=utf8");
2681
2682         print "Upgrade to $DBversion done ( Added AllowAllMessageDeletion syspref and messages table )\n";
2683     SetVersion ($DBversion);
2684 }
2685
2686 $DBversion = '3.01.00.061';
2687 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
2688     $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')");
2689         print "Upgrade to $DBversion done ( Added ShowPatronImageInWebBasedSelfCheck system preference )\n";
2690     SetVersion ($DBversion);
2691 }
2692
2693 $DBversion = "3.01.00.062";
2694 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
2695     $dbh->do("INSERT INTO permissions (module_bit, code, description) VALUES ( 13, 'manage_csv_profiles', 'Manage CSV export profiles')");
2696     $dbh->do(q/
2697         CREATE TABLE `export_format` (
2698           `export_format_id` int(11) NOT NULL auto_increment,
2699           `profile` varchar(255) NOT NULL,
2700           `description` mediumtext NOT NULL,
2701           `marcfields` mediumtext NOT NULL,
2702           PRIMARY KEY  (`export_format_id`)
2703         ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='Used for CSV export';
2704     /);
2705     print "Upgrade to $DBversion done (added csv export profiles)\n";
2706 }
2707
2708 $DBversion = "3.01.00.063";
2709 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
2710     $dbh->do("
2711         CREATE TABLE `fieldmapping` (
2712           `id` int(11) NOT NULL auto_increment,
2713           `field` varchar(255) NOT NULL,
2714           `frameworkcode` char(4) NOT NULL default '',
2715           `fieldcode` char(3) NOT NULL,
2716           `subfieldcode` char(1) NOT NULL,
2717           PRIMARY KEY  (`id`)
2718         ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
2719              ");
2720     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";
2721 }
2722
2723 $DBversion = '3.01.00.065';
2724 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
2725     $dbh->do('ALTER TABLE issuingrules ADD COLUMN `renewalsallowed` smallint(6) NOT NULL default "0" AFTER `issuelength`;');
2726     $sth = $dbh->prepare("SELECT itemtype, renewalsallowed FROM itemtypes");
2727     $sth->execute();
2728
2729     my $sthupd = $dbh->prepare("UPDATE issuingrules SET renewalsallowed = ? WHERE itemtype = ?");
2730
2731     while(my $row = $sth->fetchrow_hashref){
2732         $sthupd->execute($row->{renewalsallowed}, $row->{itemtype});
2733     }
2734
2735     $dbh->do('ALTER TABLE itemtypes DROP COLUMN `renewalsallowed`;');
2736
2737     SetVersion ($DBversion);
2738     print "Upgrade to $DBversion done (Moving allowed renewals from itemtypes to issuingrule)\n";
2739 }
2740
2741 $DBversion = '3.01.00.066';
2742 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
2743     $dbh->do('ALTER TABLE issuingrules ADD COLUMN `reservesallowed` smallint(6) NOT NULL default "0" AFTER `renewalsallowed`;');
2744     
2745     my $maxreserves = C4::Context->preference('maxreserves');
2746     $sth = $dbh->prepare('UPDATE issuingrules SET reservesallowed = ?;');
2747     $sth->execute($maxreserves);
2748
2749     $dbh->do('DELETE FROM systempreferences WHERE variable = "maxreserves";');
2750
2751     $dbh->do("INSERT INTO systempreferences (variable,value, options, explanation, type) VALUES('ReservesControlBranch','PatronLibrary','ItemHomeLibrary|PatronLibrary','Branch checked for members reservations rights','Choice')");
2752
2753     SetVersion ($DBversion);
2754     print "Upgrade to $DBversion done (Moving max allowed reserves from system preference to issuingrule)\n";
2755 }
2756
2757 $DBversion = "3.01.00.067";
2758 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
2759     $dbh->do("INSERT INTO permissions (module_bit, code, description) VALUES ( 13, 'batchmod', 'Perform batch modification of items')");
2760     $dbh->do("INSERT INTO permissions (module_bit, code, description) VALUES ( 13, 'batchdel', 'Perform batch deletion of items')");
2761     print "Upgrade to $DBversion done (added permissions for batch modification and deletion)\n";
2762     SetVersion ($DBversion);
2763 }
2764
2765 $DBversion = "3.01.00.068";
2766 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
2767         $dbh->do("ALTER TABLE issuingrules ADD COLUMN `finedays` int(11) default NULL AFTER `fine` ");
2768         print "Upgrade to $DBversion done (Adding finedays in issuingrules table)\n";
2769     SetVersion ($DBversion);
2770 }
2771
2772
2773 $DBversion = "3.01.00.069";
2774 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
2775         $dbh->do("INSERT INTO `systempreferences` (`variable`, `value`, `options`, `explanation`, `type`) VALUES ('EnableOpacSearchHistory', '1', '', 'Enable or disable opac search history', 'YesNo')");
2776
2777         my $create = <<SEARCHHIST;
2778 CREATE TABLE IF NOT EXISTS `search_history` (
2779   `userid` int(11) NOT NULL,
2780   `sessionid` varchar(32) NOT NULL,
2781   `query_desc` varchar(255) NOT NULL,
2782   `query_cgi` varchar(255) NOT NULL,
2783   `total` int(11) NOT NULL,
2784   `time` timestamp NOT NULL default CURRENT_TIMESTAMP,
2785   KEY `userid` (`userid`),
2786   KEY `sessionid` (`sessionid`)
2787 ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='Opac search history results';
2788 SEARCHHIST
2789         $dbh->do($create);
2790
2791         print "Upgrade to $DBversion done (added OPAC search history preference and table)\n";
2792 }
2793
2794 $DBversion = "3.01.00.070";
2795 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
2796         $dbh->do("ALTER TABLE authorised_values ADD COLUMN `lib_opac` VARCHAR(80) default NULL AFTER `lib`");
2797         print "Upgrade to $DBversion done (Added a lib_opac field in authorised_values table)\n";
2798 }
2799
2800 $DBversion = "3.01.00.071";
2801 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
2802         $dbh->do("ALTER TABLE `subscription` ADD `enddate` date default NULL");
2803         $dbh->do("ALTER TABLE subscriptionhistory CHANGE enddate histenddate DATE default NULL");
2804         print "Upgrade to $DBversion done ( Adding enddate to subscription)\n";
2805 }
2806
2807 # Acquisitions update
2808
2809 $DBversion = "3.01.00.072";
2810 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
2811     $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')");
2812     # create a new syspref for the 'Mr anonymous' patron
2813     $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,'')");
2814     # fill AnonymousPatron with AnonymousSuggestion value (copy)
2815     my $sth=$dbh->prepare("SELECT value FROM systempreferences WHERE variable='AnonSuggestions'");
2816     $sth->execute;
2817     my ($value) = $sth->fetchrow() || 0;
2818     $dbh->do("UPDATE systempreferences SET value='$value' WHERE variable='AnonymousPatron'");
2819     # set AnonymousSuggestion do YesNo
2820     # 1st, set the value (1/True if it had a borrowernumber)
2821     $dbh->do("UPDATE systempreferences SET value=1 WHERE variable='AnonSuggestions' AND value>0");
2822     # 2nd, change the type to Choice
2823     $dbh->do("UPDATE systempreferences SET type='YesNo' WHERE variable='AnonSuggestions'");
2824         # borrower reading record privacy : 0 : forever, 1 : laws, 2 : don't keep at all
2825     $dbh->do("ALTER TABLE `borrowers` ADD `privacy` INTEGER NOT NULL DEFAULT 1;");
2826     print "Upgrade to $DBversion done (add new syspref and column in borrowers)\n";
2827     SetVersion ($DBversion);
2828 }
2829
2830 $DBversion = '3.01.00.073';
2831 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
2832     $dbh->do('SET FOREIGN_KEY_CHECKS=0 ');
2833     $dbh->do(<<'END_SQL');
2834 CREATE TABLE IF NOT EXISTS `aqcontract` (
2835   `contractnumber` int(11) NOT NULL auto_increment,
2836   `contractstartdate` date default NULL,
2837   `contractenddate` date default NULL,
2838   `contractname` varchar(50) default NULL,
2839   `contractdescription` mediumtext,
2840   `booksellerid` int(11) not NULL,
2841     PRIMARY KEY  (`contractnumber`),
2842         CONSTRAINT `booksellerid_fk1` FOREIGN KEY (`booksellerid`)
2843         REFERENCES `aqbooksellers` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
2844 ) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
2845 END_SQL
2846     $dbh->do('SET FOREIGN_KEY_CHECKS=1 ');
2847     print "Upgrade to $DBversion done (adding aqcontract table)\n";
2848     SetVersion ($DBversion);
2849 }
2850
2851 $DBversion = '3.01.00.074';
2852 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
2853     $dbh->do("ALTER TABLE `aqbasket` ADD COLUMN `basketname` varchar(50) default NULL AFTER `basketno`");
2854     $dbh->do("ALTER TABLE `aqbasket` ADD COLUMN `note` mediumtext AFTER `basketname`");
2855     $dbh->do("ALTER TABLE `aqbasket` ADD COLUMN `booksellernote` mediumtext AFTER `note`");
2856     $dbh->do("ALTER TABLE `aqbasket` ADD COLUMN `contractnumber` int(11) AFTER `booksellernote`");
2857     $dbh->do("ALTER TABLE `aqbasket` ADD FOREIGN KEY (`contractnumber`) REFERENCES `aqcontract` (`contractnumber`)");
2858     print "Upgrade to $DBversion done (edit aqbasket table done)\n";
2859     SetVersion ($DBversion);
2860 }
2861
2862 $DBversion = '3.01.00.075';
2863 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
2864     $dbh->do("ALTER TABLE `aqorders` ADD COLUMN `uncertainprice` tinyint(1)");
2865
2866     print "Upgrade to $DBversion done (adding uncertainprices)\n";
2867     SetVersion ($DBversion);
2868 }
2869
2870 $DBversion = '3.01.00.076';
2871 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
2872     $dbh->do('SET FOREIGN_KEY_CHECKS=0 ');
2873     $dbh->do("CREATE TABLE IF NOT EXISTS `aqbasketgroups` (
2874                          `id` int(11) NOT NULL auto_increment,
2875                          `name` varchar(50) default NULL,
2876                          `closed` tinyint(1) default NULL,
2877                          `booksellerid` int(11) NOT NULL,
2878                          PRIMARY KEY (`id`),
2879                          KEY `booksellerid` (`booksellerid`),
2880                          CONSTRAINT `aqbasketgroups_ibfk_1` FOREIGN KEY (`booksellerid`) REFERENCES `aqbooksellers` (`id`) ON UPDATE CASCADE ON DELETE CASCADE
2881                          ) ENGINE=InnoDB DEFAULT CHARSET=utf8;");
2882     $dbh->do("ALTER TABLE aqbasket ADD COLUMN `basketgroupid` int(11)");
2883     $dbh->do("ALTER TABLE aqbasket ADD FOREIGN KEY (`basketgroupid`) REFERENCES `aqbasketgroups` (`id`) ON UPDATE CASCADE ON DELETE SET NULL");
2884     $dbh->do("INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES ('pdfformat','pdfformat::layout2pages','Controls what script is used for printing (basketgroups)','','free')");
2885     $dbh->do('SET FOREIGN_KEY_CHECKS=1 ');
2886     print "Upgrade to $DBversion done (adding basketgroups)\n";
2887     SetVersion ($DBversion);
2888 }
2889 $DBversion = '3.01.00.077';
2890 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
2891
2892     $dbh->do("SET FOREIGN_KEY_CHECKS=0 ");
2893     # create a mapping table holding the info we need to match orders to budgets
2894     $dbh->do('DROP TABLE IF EXISTS fundmapping');
2895     $dbh->do(
2896         q|CREATE TABLE fundmapping AS
2897         SELECT aqorderbreakdown.ordernumber, branchcode, bookfundid, budgetdate, entrydate
2898         FROM aqorderbreakdown JOIN aqorders ON aqorderbreakdown.ordernumber = aqorders.ordernumber|);
2899     # match the new type of the corresponding field
2900     $dbh->do('ALTER TABLE fundmapping modify column bookfundid varchar(30)');
2901     # System did not ensure budgetdate was valid historically
2902     $dbh->do(q|UPDATE fundmapping SET budgetdate = entrydate WHERE budgetdate = '0000-00-00' OR budgetdate IS NULL|);
2903     # We save the map in fundmapping in case you need later processing
2904     $dbh->do(q|ALTER TABLE fundmapping add column aqbudgetid integer|);
2905     # these can speed processing up
2906     $dbh->do(q|CREATE INDEX fundmaporder ON fundmapping (ordernumber)|);
2907     $dbh->do(q|CREATE INDEX fundmapid ON fundmapping (bookfundid)|);
2908
2909     $dbh->do("DROP TABLE IF EXISTS `aqbudgetperiods` ");
2910
2911     $dbh->do(qq|
2912                     CREATE TABLE `aqbudgetperiods` (
2913                     `budget_period_id` int(11) NOT NULL auto_increment,
2914                     `budget_period_startdate` date NOT NULL,
2915                     `budget_period_enddate` date NOT NULL,
2916                     `budget_period_active` tinyint(1) default '0',
2917                     `budget_period_description` mediumtext,
2918                     `budget_period_locked` tinyint(1) default NULL,
2919                     `sort1_authcat` varchar(10) default NULL,
2920                     `sort2_authcat` varchar(10) default NULL,
2921                     PRIMARY KEY  (`budget_period_id`)
2922                     ) ENGINE=InnoDB  DEFAULT CHARSET=utf8 |);
2923
2924    $dbh->do(<<ADDPERIODS);
2925 INSERT INTO aqbudgetperiods (budget_period_startdate,budget_period_enddate,budget_period_active,budget_period_description,budget_period_locked)
2926 SELECT DISTINCT startdate, enddate, NOW() BETWEEN startdate and enddate, concat(startdate," ",enddate),NOT NOW() BETWEEN startdate AND enddate from aqbudget
2927 ADDPERIODS
2928 # SORRY , NO AQBUDGET/AQBOOKFUND -> AQBUDGETS IMPORT JUST YET,
2929 # BUT A NEW CLEAN AQBUDGETS TABLE CREATE FOR NOW..
2930 # DROP TABLE IF EXISTS `aqbudget`;
2931 #CREATE TABLE `aqbudget` (
2932 #  `bookfundid` varchar(10) NOT NULL default ',
2933 #    `startdate` date NOT NULL default 0,
2934 #         `enddate` date default NULL,
2935 #           `budgetamount` decimal(13,2) default NULL,
2936 #                 `aqbudgetid` tinyint(4) NOT NULL auto_increment,
2937 #                   `branchcode` varchar(10) default NULL,
2938     DropAllForeignKeys('aqbudget');
2939   #$dbh->do("drop table aqbudget;");
2940
2941
2942     my $maxbudgetid = $dbh->selectcol_arrayref(<<IDsBUDGET);
2943 SELECT MAX(aqbudgetid) from aqbudget
2944 IDsBUDGET
2945
2946 $$maxbudgetid[0] = 0 if !$$maxbudgetid[0];
2947
2948     $dbh->do(<<BUDGETAUTOINCREMENT);
2949 ALTER TABLE aqbudget AUTO_INCREMENT=$$maxbudgetid[0]
2950 BUDGETAUTOINCREMENT
2951     
2952     $dbh->do(<<BUDGETNAME);
2953 ALTER TABLE aqbudget RENAME `aqbudgets`
2954 BUDGETNAME
2955
2956     $dbh->do(<<BUDGETS);
2957 ALTER TABLE `aqbudgets`
2958    CHANGE  COLUMN aqbudgetid `budget_id` int(11) NOT NULL AUTO_INCREMENT,
2959    CHANGE  COLUMN branchcode `budget_branchcode` varchar(10) default NULL,
2960    CHANGE  COLUMN budgetamount `budget_amount` decimal(28,6) NOT NULL default '0.00',
2961    CHANGE  COLUMN bookfundid   `budget_code` varchar(30) default NULL,
2962    ADD     COLUMN `budget_parent_id` int(11) default NULL,
2963    ADD     COLUMN `budget_name` varchar(80) default NULL,
2964    ADD     COLUMN `budget_encumb` decimal(28,6) default '0.00',
2965    ADD     COLUMN `budget_expend` decimal(28,6) default '0.00',
2966    ADD     COLUMN `budget_notes` mediumtext,
2967    ADD     COLUMN `budget_description` mediumtext,
2968    ADD     COLUMN `timestamp` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
2969    ADD     COLUMN `budget_amount_sublevel`  decimal(28,6) AFTER `budget_amount`,
2970    ADD     COLUMN `budget_period_id` int(11) default NULL,
2971    ADD     COLUMN `sort1_authcat` varchar(80) default NULL,
2972    ADD     COLUMN `sort2_authcat` varchar(80) default NULL,
2973    ADD     COLUMN `budget_owner_id` int(11) default NULL,
2974    ADD     COLUMN `budget_permission` int(1) default '0';
2975 BUDGETS
2976
2977     $dbh->do(<<BUDGETCONSTRAINTS);
2978 ALTER TABLE `aqbudgets`
2979    ADD CONSTRAINT `aqbudgets_ifbk_1` FOREIGN KEY (`budget_period_id`) REFERENCES `aqbudgetperiods` (`budget_period_id`) ON DELETE CASCADE ON UPDATE CASCADE
2980 BUDGETCONSTRAINTS
2981 #    $dbh->do(<<BUDGETPKDROP);
2982 #ALTER TABLE `aqbudgets`
2983 #   DROP PRIMARY KEY
2984 #BUDGETPKDROP
2985 #    $dbh->do(<<BUDGETPKADD);
2986 #ALTER TABLE `aqbudgets`
2987 #   ADD PRIMARY KEY budget_id
2988 #BUDGETPKADD
2989
2990
2991         my $query_period= $dbh->prepare(qq|SELECT budget_period_id from aqbudgetperiods where budget_period_startdate=? and budget_period_enddate=?|);
2992         my $query_bookfund= $dbh->prepare(qq|SELECT * from aqbookfund where bookfundid=?|);
2993         my $selectbudgets=$dbh->prepare(qq|SELECT * from aqbudgets|);
2994         my $updatebudgets=$dbh->prepare(qq|UPDATE aqbudgets SET budget_period_id= ? , budget_name=?, budget_branchcode=? where budget_id=?|);
2995         $selectbudgets->execute;
2996         while (my $databudget=$selectbudgets->fetchrow_hashref){
2997                 $query_period->execute ($$databudget{startdate},$$databudget{enddate});
2998                 my ($budgetperiodid)=$query_period->fetchrow;
2999                 $query_bookfund->execute ($$databudget{budget_code});
3000                 my $databf=$query_bookfund->fetchrow_hashref;
3001                 my $branchcode=$$databudget{budget_branchcode}||$$databf{branchcode};
3002                 $updatebudgets->execute($budgetperiodid,$$databf{bookfundname},$branchcode,$$databudget{budget_id});
3003         }
3004     $dbh->do(<<BUDGETDROPDATES);
3005 ALTER TABLE `aqbudgets`
3006    DROP startdate,
3007    DROP enddate
3008 BUDGETDROPDATES
3009
3010
3011     $dbh->do("DROP TABLE IF EXISTS `aqbudgets_planning` ");
3012     $dbh->do("CREATE TABLE  `aqbudgets_planning` (
3013                     `plan_id` int(11) NOT NULL auto_increment,
3014                     `budget_id` int(11) NOT NULL,
3015                     `budget_period_id` int(11) NOT NULL,
3016                     `estimated_amount` decimal(28,6) default NULL,
3017                     `authcat` varchar(30) NOT NULL,
3018                     `authvalue` varchar(30) NOT NULL,
3019                                         `display` tinyint(1) DEFAULT 1,
3020                         PRIMARY KEY  (`plan_id`),
3021                         CONSTRAINT `aqbudgets_planning_ifbk_1` FOREIGN KEY (`budget_id`) REFERENCES `aqbudgets` (`budget_id`) ON DELETE CASCADE ON UPDATE CASCADE
3022                         ) ENGINE=InnoDB DEFAULT CHARSET=utf8;");
3023
3024     $dbh->do("ALTER TABLE `aqorders`
3025                     ADD COLUMN `budget_id` tinyint(4) NOT NULL,
3026                     ADD COLUMN `budgetgroup_id` int(11) NOT NULL,
3027                     ADD COLUMN  `sort1_authcat` varchar(10) default NULL,
3028                     ADD COLUMN  `sort2_authcat` varchar(10) default NULL" );
3029                 # We need to map the orders to the budgets
3030                 # For Historic reasons this is more complex than it should be on occasions
3031                 my $budg_arr = $dbh->selectall_arrayref(
3032                     q|SELECT aqbudgets.budget_id, aqbudgets.budget_code, aqbudgetperiods.budget_period_startdate,
3033                     aqbudgetperiods.budget_period_enddate
3034                     FROM aqbudgets JOIN aqbudgetperiods ON aqbudgets.budget_period_id = aqbudgetperiods.budget_period_id
3035                     ORDER BY budget_code, budget_period_startdate|, { Slice => {} });
3036                 # We arbitarily order on start date, this means if you have overlapping periods the order will be
3037                 # linked to the latest matching budget YMMV
3038                 my $b_sth = $dbh->prepare(
3039                     'UPDATE fundmapping set aqbudgetid = ? where bookfundid =? AND budgetdate >= ? AND budgetdate <= ?');
3040                 for my $b ( @{$budg_arr}) {
3041                     $b_sth->execute($b->{budget_id}, $b->{budget_code}, $b->{budget_period_startdate}, $b->{budget_period_enddate});
3042                 }
3043                 # move the budgetids to aqorders
3044                 $dbh->do(q|UPDATE aqorders, fundmapping SET aqorders.budget_id = fundmapping.aqbudgetid
3045                     WHERE aqorders.ordernumber = fundmapping.ordernumber AND fundmapping.aqbudgetid IS NOT NULL|);
3046                 # NB fundmapping is left as an accontants trail also if you have budgetids that werent set
3047                 # you can decide what to do with them
3048
3049      $dbh->do(
3050          q|UPDATE aqorders, aqbudgets SET aqorders.budgetgroup_id = aqbudgets.budget_period_id
3051          WHERE aqorders.budget_id = aqbudgets.budget_id|);
3052                 # cannot do until aqorderbreakdown removed
3053 #    $dbh->do("DROP TABLE aqbookfund ");
3054 #    $dbh->do("ALTER TABLE aqorders  ADD FOREIGN KEY (`budget_id`) REFERENCES `aqbudgets` (`budget_id`) ON UPDATE CASCADE  " ); ????
3055     $dbh->do("SET FOREIGN_KEY_CHECKS=1 ");
3056
3057     print "Upgrade to $DBversion done (Adding new aqbudgetperiods, aqbudgets and aqbudget_planning tables  )\n";
3058     SetVersion ($DBversion);
3059 }
3060
3061
3062
3063 $DBversion = '3.01.00.078';
3064 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
3065     $dbh->do("ALTER TABLE aqbudgetperiods ADD COLUMN budget_period_total decimal(28,6)");
3066     print "Upgrade to $DBversion done (adds 'budget_period_total' column to aqbudgetperiods table)\n";
3067     SetVersion($DBversion);
3068 }
3069
3070
3071 $DBversion = '3.01.00.079';
3072 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
3073     $dbh->do("ALTER TABLE currency ADD COLUMN active  tinyint(1)");
3074
3075     print "Upgrade to $DBversion done (adds 'active' column to currencies table)\n";
3076     SetVersion($DBversion);
3077 }
3078
3079 $DBversion = '3.01.00.080';
3080 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
3081     $dbh->do(<<BUDG_PERM );
3082 INSERT INTO permissions (module_bit, code, description) VALUES
3083             (11, 'vendors_manage', 'Manage vendors'),
3084             (11, 'contracts_manage', 'Manage contracts'),
3085             (11, 'period_manage', 'Manage periods'),
3086             (11, 'budget_manage', 'Manage budgets'),
3087             (11, 'budget_modify', "Modify budget (can't create lines but can modify existing ones)"),
3088             (11, 'planning_manage', 'Manage budget plannings'),
3089             (11, 'order_manage', 'Manage orders & basket'),
3090             (11, 'group_manage', 'Manage orders & basketgroups'),
3091             (11, 'order_receive', 'Manage orders & basket'),
3092             (11, 'budget_add_del', "Add and delete budgets (but can't modify budgets)");
3093 BUDG_PERM
3094
3095     print "Upgrade to $DBversion done (adds permissions for the acquisitions module)\n";
3096     SetVersion($DBversion);
3097 }
3098
3099
3100 $DBversion = '3.01.00.081';
3101 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
3102     $dbh->do("ALTER TABLE aqbooksellers ADD COLUMN `gstrate` decimal(6,4) default NULL");
3103     if (my $gist=C4::Context->preference("gist")){
3104                 my $sql=$dbh->prepare("UPDATE aqbooksellers set `gstrate`=? ");
3105         $sql->execute($gist) ;
3106         }
3107     print "Upgrade to $DBversion done (added per-supplier gstrate setting)\n";
3108     SetVersion($DBversion);
3109 }
3110
3111 $DBversion = "3.01.00.082";
3112 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
3113     if (C4::Context->preference("opaclanguages") eq "fr") {
3114         $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')#);
3115     } else {
3116         $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')");
3117     }
3118     print "Upgrade to $DBversion done (adding ReservesNeedReturns systempref, in circulation)\n";
3119     SetVersion ($DBversion);
3120 }
3121
3122 $DBversion = "3.01.00.083";
3123 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
3124     $dbh->do(qq|
3125  CREATE TABLE `aqorders_items` (
3126   `ordernumber` int(11) NOT NULL,
3127   `itemnumber` int(11) NOT NULL,
3128   `timestamp` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
3129   PRIMARY KEY  (`itemnumber`),
3130   KEY `ordernumber` (`ordernumber`)
3131 ) ENGINE=InnoDB DEFAULT CHARSET=utf8   |
3132     );
3133
3134     $dbh->do(qq| DROP TABLE aqorderbreakdown |);
3135     $dbh->do('DROP TABLE aqbookfund');
3136     print "Upgrade to $DBversion done (New aqorders_items table for acqui)\n";
3137     SetVersion ($DBversion);
3138 }
3139
3140 $DBversion = "3.01.00.084";
3141 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
3142     $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')  #);
3143
3144     print "Upgrade to $DBversion done (CurrencyFormat syspref added)\n";
3145     SetVersion ($DBversion);
3146 }
3147
3148 $DBversion = "3.01.00.085";
3149 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
3150     $dbh->do("ALTER table aqorders drop column title");
3151     $dbh->do("ALTER TABLE `aqorders` CHANGE `budget_id` `budget_id` INT( 11 ) NOT NULL");
3152     print "Upgrade to $DBversion done update budget_id size that should not be a tinyint\n";
3153     SetVersion ($DBversion);
3154 }
3155
3156 $DBversion = "3.01.00.086";
3157 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
3158     $dbh->do(<<SUGGESTIONS);
3159 ALTER table suggestions
3160     ADD budgetid INT(11),
3161     ADD branchcode VARCHAR(10) default NULL,
3162     ADD acceptedby INT(11) default NULL,
3163     ADD accepteddate date default NULL,
3164     ADD suggesteddate date default NULL,
3165     ADD manageddate date default NULL,
3166     ADD rejectedby INT(11) default NULL,
3167     ADD rejecteddate date default NULL,
3168     ADD collectiontitle text default NULL,
3169     ADD itemtype VARCHAR(30) default NULL
3170     ;
3171 SUGGESTIONS
3172     print "Upgrade to $DBversion done (Suggestions)\n";
3173     SetVersion ($DBversion);
3174 }
3175
3176 $DBversion = "3.01.00.087";
3177 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
3178     $dbh->do("ALTER table aqbudgets drop column budget_amount_sublevel;");
3179     print "Upgrade to $DBversion done (Drop column budget_amount_sublevel from aqbudgets)\n";
3180     SetVersion ($DBversion);
3181 }
3182
3183 $DBversion = "3.01.00.088";
3184 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
3185     $dbh->do(  qq# INSERT INTO `systempreferences` VALUES ('intranetbookbag','1','','If ON, enables display of Cart feature in the intranet','YesNo')  #);
3186
3187     print "Upgrade to $DBversion done (intranetbookbag syspref added)\n";
3188     SetVersion ($DBversion);
3189 }
3190
3191 $DBversion = "3.01.00.090";
3192 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
3193 $dbh->do("
3194        INSERT INTO `permissions` (`module_bit`, `code`, `description`) VALUES
3195                 (16, 'execute_reports', 'Execute SQL reports'),
3196                 (16, 'create_reports', 'Create SQL Reports')
3197         ");
3198
3199     print "Upgrade to $DBversion done (granular permissions for guided reports added)\n";
3200     SetVersion ($DBversion);
3201 }
3202
3203 $DBversion = "3.01.00.091";
3204 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
3205 $dbh->do("
3206         UPDATE `systempreferences` SET `options` = 'holdings|serialcollection|subscriptions'
3207         WHERE `systempreferences`.`variable` = 'opacSerialDefaultTab' LIMIT 1
3208         ");
3209
3210     print "Upgrade to $DBversion done (opac-detail default tag updated)\n";
3211     SetVersion ($DBversion);
3212 }
3213
3214 $DBversion = "3.01.00.092";
3215 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
3216     if (C4::Context->preference("opaclanguages") =~ /fr/) {
3217         $dbh->do(qq{
3218 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');
3219         });
3220         }else{
3221         $dbh->do(qq{
3222 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');
3223         });
3224         }
3225     print "Upgrade to $DBversion done (Added RoutingListAddReserves syspref)\n";
3226     SetVersion ($DBversion);
3227 }
3228
3229 $DBversion = "3.01.00.093";
3230 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
3231         $dbh->do(qq{
3232         ALTER TABLE biblioitems ADD INDEX issn_idx (issn);
3233         });
3234     print "Upgrade to $DBversion done (added index to ISSN)\n";
3235     SetVersion ($DBversion);
3236 }
3237
3238 $DBversion = "3.01.00.094";
3239 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
3240         $dbh->do(qq{
3241         ALTER TABLE aqbasketgroups ADD deliveryplace VARCHAR(10) default NULL, ADD deliverycomment VARCHAR(255) default NULL;
3242         });
3243
3244     print "Upgrade to $DBversion done (adding deliveryplace deliverycomment to basketgroups)\n";
3245     SetVersion ($DBversion);
3246 }
3247
3248 $DBversion = "3.01.00.095";
3249 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
3250         $dbh->do(qq{
3251         ALTER TABLE items ADD stocknumber VARCHAR(32) DEFAULT NULL COMMENT "stores the inventory number";
3252         });
3253         $dbh->do(qq{
3254         ALTER TABLE items ADD UNIQUE INDEX itemsstocknumberidx (stocknumber);
3255         });
3256         $dbh->do(qq{
3257         ALTER TABLE deleteditems ADD stocknumber VARCHAR(32) DEFAULT NULL COMMENT "stores the inventory number of deleted items";
3258         });
3259         $dbh->do(qq{
3260         ALTER TABLE deleteditems ADD UNIQUE INDEX deleteditemsstocknumberidx (stocknumber);
3261         });
3262         if (C4::Context->preference('marcflavour') eq 'UNIMARC'){
3263                 $dbh->do(qq{
3264         INSERT IGNORE INTO marc_subfield_structure (frameworkcode,tagfield, tagsubfield, tab, repeatable, mandatory,kohafield)
3265         SELECT DISTINCT (frameworkcode),995,"j",10,0,0,"items.stocknumber" from biblio_framework ;
3266                 });
3267                 #Previously, copynumber was used as stocknumber
3268                 $dbh->do(qq{
3269         UPDATE items set stocknumber=copynumber;
3270                 });
3271                 $dbh->do(qq{
3272         UPDATE items set copynumber=NULL;
3273                 });
3274         }
3275     print "Upgrade to $DBversion done (stocknumber field added)\n";
3276     SetVersion ($DBversion);
3277 }
3278
3279 $DBversion = "3.01.00.096";
3280 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
3281     $dbh->do("INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES ('OrderPdfTemplate','','Uploads a PDF template to use for printing baskets','NULL','Upload')");
3282     $dbh->do("UPDATE systempreferences SET variable='OrderPdfFormat' WHERE variable='pdfformat'");
3283     print "Upgrade to $DBversion done (PDF orders system preferences added and updated)\n";
3284     SetVersion ($DBversion);
3285 }
3286
3287 $DBversion = "3.01.00.097";
3288 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
3289         $dbh->do(qq{
3290         ALTER TABLE aqbasketgroups ADD billingplace VARCHAR(10) NOT NULL AFTER deliverycomment;
3291         });
3292
3293     print "Upgrade to $DBversion done (Adding billingplace to aqbasketgroups)\n";
3294     SetVersion ($DBversion);
3295 }
3296
3297 $DBversion = "3.01.00.098";
3298 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
3299         $dbh->do(qq{
3300         ALTER TABLE auth_subfield_structure MODIFY frameworkcode VARCHAR(10) NULL;
3301         });
3302
3303     print "Upgrade to $DBversion done (changing frameworkcode length in auth_subfield_structure)\n";
3304     SetVersion ($DBversion);
3305 }
3306
3307 $DBversion = "3.01.00.099";
3308 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
3309         $dbh->do(qq{
3310                 INSERT INTO `permissions` (`module_bit`, `code`, `description`) VALUES
3311                 (9, 'edit_catalogue', 'Edit catalogue'),
3312                 (9, 'fast_cataloging', 'Fast cataloging')
3313         });
3314
3315     print "Upgrade to $DBversion done (granular permissions for cataloging added)\n";
3316     SetVersion ($DBversion);
3317 }
3318
3319 $DBversion = "3.01.00.100";
3320 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
3321         $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')");
3322         print "Upgrade to $DBversion done (added CAS authentication system preferences)\n";
3323     SetVersion ($DBversion);
3324 }
3325
3326 $DBversion = "3.01.00.101";
3327 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
3328         $dbh->do(
3329         "INSERT INTO systempreferences 
3330            (variable, value, options, explanation, type)
3331          VALUES (
3332             'OverdueNoticeBcc', '', '', 
3333             'Email address to Bcc outgoing notices sent by email',
3334             'free')
3335          ");
3336         print "Upgrade to $DBversion done (added OverdueNoticeBcc system preferences)\n";
3337     SetVersion ($DBversion);
3338 }
3339 $DBversion = "3.01.00.102";
3340 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
3341     $dbh->do(
3342     "UPDATE permissions set description = 'Edit catalog (Modify bibliographic/holdings data)' where module_bit = 9 and code = 'edit_catalogue'"
3343     );
3344         print "Upgrade to $DBversion done (fixed spelling error in edit_catalogue permission)\n";
3345     SetVersion ($DBversion);
3346 }
3347
3348 $DBversion = "3.01.00.103";
3349 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
3350         $dbh->do("INSERT INTO permissions (module_bit, code, description) VALUES (13, 'moderate_tags', 'Moderate patron tags')");
3351         print "Upgrade to $DBversion done (adding patron permissions for tags tool)\n";
3352     SetVersion ($DBversion);
3353 }
3354
3355 $DBversion = "3.01.00.104";
3356 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
3357
3358     my ($maninv_count, $borrnotes_count);
3359     eval { $maninv_count = $dbh->do("SELECT 1 FROM authorised_values WHERE category='MANUAL_INV'"); };
3360     if ($maninv_count == 0) {
3361         $dbh->do("INSERT INTO authorised_values (category,authorised_value,lib) VALUES ('MANUAL_INV','Copier Fees','.25')");
3362     }
3363     eval { $borrnotes_count = $dbh->do("SELECT 1 FROM authorised_values WHERE category='BOR_NOTES'"); };
3364     if ($borrnotes_count == 0) {
3365         $dbh->do("INSERT INTO authorised_values (category,authorised_value,lib) VALUES ('BOR_NOTES','ADDR','Address Notes')");
3366     }
3367     
3368     $dbh->do("INSERT INTO authorised_values (category,authorised_value,lib) VALUES ('LOC','CART','Book Cart')");
3369     $dbh->do("INSERT INTO authorised_values (category,authorised_value,lib) VALUES ('LOC','PROC','Processing Center')");
3370
3371         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";
3372         SetVersion ($DBversion);
3373 }
3374
3375
3376 $DBversion = "3.01.00.105";
3377 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
3378     $dbh->do("
3379       CREATE TABLE `collections` (
3380         `colId` int(11) NOT NULL auto_increment,
3381         `colTitle` varchar(100) NOT NULL default '',
3382         `colDesc` text NOT NULL,
3383         `colBranchcode` varchar(4) default NULL COMMENT 'branchcode for branch where item should be held.',
3384         PRIMARY KEY  (`colId`)
3385       ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
3386     ");
3387        
3388     $dbh->do("
3389       CREATE TABLE `collections_tracking` (
3390         `ctId` int(11) NOT NULL auto_increment,
3391         `colId` int(11) NOT NULL default '0' COMMENT 'collections.colId',
3392         `itemnumber` int(11) NOT NULL default '0' COMMENT 'items.itemnumber',
3393         PRIMARY KEY  (`ctId`)
3394       ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
3395     ");
3396     $dbh->do("
3397         INSERT INTO permissions (module_bit, code, description) 
3398         VALUES ( 13, 'rotating_collections', 'Manage Rotating collections')" );
3399         print "Upgrade to $DBversion done (added collection and collection_tracking tables for rotating collections functionality)\n";
3400     SetVersion ($DBversion);
3401 }
3402 $DBversion = "3.01.00.106";
3403 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
3404         $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' )");
3405         print "Upgrade to $DBversion done (added OpacAddMastheadLibraryPulldown system preferences)\n";
3406     SetVersion ($DBversion);
3407 }
3408
3409 $DBversion = '3.01.00.107';
3410 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
3411     my $upgrade_script = C4::Context->config("intranetdir") . "/installer/data/mysql/patroncards_upgrade.pl";
3412     system("perl $upgrade_script");
3413     print "Upgrade to $DBversion done (Migrated labels and patroncards tables and data to new schema.)\n";
3414     SetVersion ($DBversion);
3415 }
3416
3417 $DBversion = '3.01.00.108';
3418 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
3419         $dbh->do(qq{
3420         ALTER TABLE `export_format` ADD `csv_separator` VARCHAR( 2 ) NOT NULL AFTER `marcfields` ,
3421         ADD `field_separator` VARCHAR( 2 ) NOT NULL AFTER `csv_separator` ,
3422         ADD `subfield_separator` VARCHAR( 2 ) NOT NULL AFTER `field_separator` 
3423         });
3424         print "Upgrade to $DBversion done (added separators for csv export)\n";
3425     SetVersion ($DBversion);
3426 }
3427
3428 $DBversion = "3.01.00.109";
3429 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
3430         $dbh->do(qq{
3431         ALTER TABLE `export_format` ADD `encoding` VARCHAR(255) NOT NULL AFTER `subfield_separator`
3432         });
3433         print "Upgrade to $DBversion done (added encoding for csv export)\n";
3434     SetVersion ($DBversion);
3435 }
3436
3437 $DBversion = '3.01.00.110';
3438 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
3439     $dbh->do('ALTER TABLE `categories` ADD COLUMN `enrolmentperioddate` DATE NULL DEFAULT NULL AFTER `enrolmentperiod`');
3440     print "Upgrade to $DBversion done (Add enrolment period date support)\n";
3441     SetVersion ($DBversion);
3442 }
3443
3444 $DBversion = '3.01.00.111';
3445 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
3446     print "Upgrade to $DBversion done (mark DBrev for 3.2-alpha release)\n";
3447     SetVersion ($DBversion);
3448 }
3449
3450 $DBversion = '3.01.00.112';
3451 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
3452         $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');");
3453         print "Upgrade to $DBversion done ( added Show Spine Label Printer on Bib Items Details preferences )\n";
3454     SetVersion ($DBversion);
3455 }
3456
3457 $DBversion = '3.01.00.113';
3458 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
3459     my $value = C4::Context->preference("XSLTResultsDisplay");
3460     $dbh->do(
3461         "INSERT INTO systempreferences (variable,value,type)
3462          VALUES('OPACXSLTResultsDisplay',?,'YesNo')", {}, $value ? 1 : 0);
3463     $value = C4::Context->preference("XSLTDetailsDisplay");
3464     $dbh->do(
3465         "INSERT INTO systempreferences (variable,value,type)
3466          VALUES('OPACXSLTDetailsDisplay',?,'YesNo')", {}, $value ? 1 : 0);
3467     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";
3468     SetVersion ($DBversion);
3469 }
3470
3471 $DBversion = '3.01.00.114';
3472 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
3473     $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')");
3474     $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')");
3475     $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')");
3476         print "Upgrade to $DBversion done ( Added AutoSelfCheckAllowed, AutoSelfCheckID, and AutoShelfCheckPass system preference )\n";
3477     SetVersion ($DBversion);
3478 }
3479
3480 $DBversion = '3.01.00.115';
3481 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
3482     $dbh->do('UPDATE aqorders SET quantityreceived = 0 WHERE quantityreceived IS NULL');
3483     $dbh->do('ALTER TABLE aqorders MODIFY COLUMN quantityreceived smallint(6) NOT NULL DEFAULT 0');
3484         print "Upgrade to $DBversion done ( Default aqorders.quantityreceived to 0 )\n";
3485     SetVersion ($DBversion);
3486 }
3487
3488 $DBversion = '3.01.00.116';
3489 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
3490         if (C4::Context->preference('OrderPdfFormat') eq 'pdfformat::example'){
3491                 $dbh->do("UPDATE `systempreferences` set value='pdfformat::layout2pages' WHERE variable='OrderPdfFormat'");
3492         }
3493         print "Upgrade to $DBversion done (corrected default OrderPdfFormat value if still set wrong )\n";
3494     SetVersion ($DBversion);
3495 }
3496
3497 $DBversion = '3.01.00.117';
3498 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
3499     $dbh->do("UPDATE language_rfc4646_to_iso639 SET iso639_2_code = 'por' WHERE rfc4646_subtag='pt' ");
3500     print "Upgrade to $DBversion done (corrected ISO 639-2 language code for Portuguese)\n";
3501     SetVersion ($DBversion);
3502 }
3503
3504 $DBversion = '3.01.00.118';
3505 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
3506     my ($count) = $dbh->selectrow_array("SELECT count(*) FROM information_schema.columns
3507                                          WHERE table_name = 'aqbudgets_planning'
3508                                          AND column_name = 'display'");
3509     if ($count < 1) {
3510         $dbh->do("ALTER TABLE aqbudgets_planning ADD COLUMN display tinyint(1) DEFAULT 1");
3511     }
3512     print "Upgrade to $DBversion done (bug 4203: add display column to aqbudgets_planning if missing)\n";
3513     SetVersion ($DBversion);
3514 }
3515
3516 $DBversion = '3.01.00.119';
3517 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
3518     eval{require Locale::Currency::Format};
3519     if (!$@) {
3520         print "Upgrade to $DBversion done (Locale::Currency::Format installed.)\n";
3521         SetVersion ($DBversion);
3522     }
3523     else {
3524         print "Upgrade to $DBversion done.\n";
3525         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";
3526         SetVersion ($DBversion);
3527     }
3528 }
3529
3530 $DBversion = '3.01.00.120';
3531 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
3532     $dbh->do(q{
3533 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');
3534 });
3535     print "Upgrade to $DBversion done (bug 1080: add soundon system preference for circulation sounds)\n";
3536     SetVersion ($DBversion);
3537 }
3538
3539 $DBversion = '3.01.00.121';
3540 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
3541     $dbh->do("ALTER TABLE `reserves` ADD `expirationdate` DATE DEFAULT NULL");
3542     $dbh->do("ALTER TABLE `reserves` ADD `lowestPriority` tinyint(1) NOT NULL");
3543     $dbh->do("ALTER TABLE `old_reserves` ADD `expirationdate` DATE DEFAULT NULL");
3544     $dbh->do("ALTER TABLE `old_reserves` ADD `lowestPriority` tinyint(1) NOT NULL");
3545     print "Upgrade to $DBversion done ( Added Additional Fields to Reserves tables )\n";
3546     SetVersion ($DBversion);
3547 }
3548
3549 $DBversion = '3.01.00.122';
3550 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
3551     $dbh->do(q{
3552       INSERT INTO systempreferences (variable,value,explanation,options,type)
3553       VALUES ('OAI-PMH:ConfFile', '', 'If empty, Koha OAI Server operates in normal mode, otherwise it operates in extended mode.','','File');
3554 });
3555     print "Upgrade to $DBversion done. — Add a new system preference OAI-PMF:ConfFile\n";
3556     SetVersion ($DBversion);
3557 }
3558
3559 $DBversion = "3.01.00.123";
3560 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
3561     $dbh->do("INSERT INTO `permissions` (`module_bit`, `code`, `description`) VALUES
3562         (6, 'place_holds', 'Place holds for patrons')");
3563     $dbh->do("INSERT INTO `permissions` (`module_bit`, `code`, `description`) VALUES
3564         (6, 'modify_holds_priority', 'Modify holds priority')");
3565     $dbh->do("UPDATE `userflags` SET `flagdesc` = 'Place and modify holds for patrons' WHERE `flag` = 'reserveforothers'");
3566     print "Upgrade to $DBversion done (Add granular permission for holds modification and update description of reserveforothers permission)\n";
3567     SetVersion ($DBversion);
3568 }
3569
3570 $DBversion = '3.01.00.124';
3571 if (C4::Context->preference('Version') < TransformToNum($DBversion)){
3572     $dbh->do("
3573         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>>).');
3574     ");
3575     print "Upgrade to $DBversion done (bug 3242: add HOLDPLACED letter template, which is used when emailLibrarianWhenHoldIsPlaced is enabled)\n";
3576     SetVersion ($DBversion);
3577 }
3578
3579 $DBversion = '3.01.00.125';
3580 if (C4::Context->preference('Version') < TransformToNum($DBversion)){
3581     $dbh->do("
3582         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' );
3583     ");
3584     $dbh->do("
3585         INSERT INTO message_transport_types (message_transport_type) values ('print');
3586     ");
3587     print "Upgrade to $DBversion done (bug 3482: Printable hold and overdue notices)\n";
3588     SetVersion ($DBversion);
3589 }
3590
3591 $DBversion = "3.01.00.126";
3592 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
3593         $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')");
3594         $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')");
3595         
3596     print "Upgrade to $DBversion done (Adding ILS-DI updates and ILS-DI:AuthorizedIPs)\n";
3597     SetVersion ($DBversion);
3598 }
3599
3600 $DBversion = '3.01.00.127';
3601 if (C4::Context->preference('Version') < TransformToNum($DBversion)){
3602     $dbh->do("ALTER TABLE messages CHANGE branchcode branchcode varchar(10);");
3603     print "Upgrade to $DBversion done (bug 4190: messages in patron account did not work with branchcodes > 4)\n";
3604     SetVersion ($DBversion);
3605 }
3606
3607 $DBversion = '3.01.00.128';
3608 if (C4::Context->preference('Version') < TransformToNum($DBversion)){
3609     $dbh->do('CREATE INDEX budget_id ON aqorders (budget_id );');
3610     print "Upgrade to $DBversion done (bug 4331: index orders by budget_id)\n";
3611     SetVersion ($DBversion);
3612 }
3613
3614 $DBversion = "3.01.00.129";
3615 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
3616         $dbh->do("UPDATE `permissions` SET `code` = 'items_batchdel' WHERE `permissions`.`module_bit` =13 AND `permissions`.`code` = 'batchdel' LIMIT 1 ;");
3617         $dbh->do("UPDATE `permissions` SET `code` = 'items_batchmod' WHERE `permissions`.`module_bit` =13 AND `permissions`.`code` = 'batchmod' LIMIT 1 ;");
3618         print "Upgrade to $DBversion done (Change permissions names for item batch modification / deletion)\n";
3619
3620     SetVersion ($DBversion);
3621 }
3622
3623 $DBversion = "3.01.00.130";
3624 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
3625     $dbh->do("UPDATE reserves SET expirationdate = NULL WHERE expirationdate = '0000-00-00'");
3626     print "Upgrade to $DBversion done (change reserves.expirationdate values of 0000-00-00 to NULL (bug 1532)\n";
3627     SetVersion ($DBversion);
3628 }
3629
3630 $DBversion = "3.01.00.131";
3631 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
3632         $dbh->do(q{
3633 INSERT IGNORE INTO message_transport_types (message_transport_type) VALUES ('print'),('feed');
3634     });
3635     print "Upgrade to $DBversion done (adding print and feed message transport types)\n";
3636     SetVersion ($DBversion);
3637 }
3638
3639 $DBversion = "3.01.00.132";
3640 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
3641         $dbh->do(q{
3642     ALTER TABLE language_descriptions ADD INDEX subtag_type_lang (subtag, type, lang);
3643     });
3644     print "Upgrade to $DBversion done (Adding index to language_descriptions table)\n";
3645     SetVersion ($DBversion);
3646 }
3647
3648 $DBversion = '3.01.00.133';
3649 if (C4::Context->preference('Version') < TransformToNum($DBversion)){
3650     $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')");
3651     print "Upgrade to $DBversion done (bug 4405: added OverduesBlockCirc syspref to control whether circulation is blocked if a borrower has overdues)\n";
3652     SetVersion ($DBversion);
3653 }
3654
3655 $DBversion = '3.01.00.134';
3656 if (C4::Context->preference('Version') < TransformToNum($DBversion)){
3657     $dbh->do("INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES ('DisplayMultiPlaceHold','1','Display the ability to place multiple holds or not','','YesNo')");
3658     print "Upgrade to $DBversion done (adding syspref DisplayMultiPlaceHold to control whether multiple holds can be placed from the search results page)\n";
3659     SetVersion ($DBversion);
3660 }
3661
3662 $DBversion = '3.01.00.135';
3663 if (C4::Context->preference('Version') < TransformToNum($DBversion)){
3664     $dbh->do("
3665         INSERT INTO `letter` (module, code, name, title, content) VALUES
3666 ('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')
3667 ");
3668     print "Upgrade to $DBversion done (bug 4377: added HOLD_PRINT message template)\n";
3669     SetVersion ($DBversion);
3670 }
3671
3672 $DBversion = '3.01.00.136';
3673 if (C4::Context->preference('Version') < TransformToNum($DBversion)){
3674     $dbh->do(qq{
3675 INSERT INTO permissions (module_bit, code, description) VALUES
3676    ( 9, 'edit_items', 'Edit Items');});
3677     print "Upgrade to $DBversion done (Adding a new permission to edit items)\n";
3678     SetVersion ($DBversion);
3679 }
3680
3681 $DBversion = "3.01.00.137";
3682 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
3683         $dbh->do("
3684           INSERT INTO permissions (module_bit, code, description) VALUES
3685           (15, 'check_expiration', 'Check the expiration of a serial'),
3686           (15, 'claim_serials', 'Claim missing serials'),
3687           (15, 'create_subscription', 'Create a new subscription'),
3688           (15, 'delete_subscription', 'Delete an existing subscription'),
3689           (15, 'edit_subscription', 'Edit an existing subscription'),
3690           (15, 'receive_serials', 'Serials receiving'),
3691           (15, 'renew_subscription', 'Renew a subscription'),
3692           (15, 'routing', 'Routing');
3693                  ");
3694     print "Upgrade to $DBversion done (adding granular permissions for serials)\n";
3695     SetVersion ($DBversion);
3696 }
3697
3698 $DBversion = "3.01.00.138";
3699 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
3700     $dbh->do("DELETE FROM systempreferences WHERE variable = 'GranularPermissions'");
3701     print "Upgrade to $DBversion done (bug 4896: removing GranularPermissions syspref; use of granular permissions is now the default)\n";
3702     SetVersion ($DBversion);
3703 }
3704
3705 $DBversion = '3.01.00.139';
3706 if (C4::Context->preference('Version') < TransformToNum($DBversion)){
3707     $dbh->do("ALTER TABLE message_attributes CHANGE message_name message_name varchar(40);");
3708     print "Upgrade to $DBversion done (bug 3682: change message_name from varchar(20) to varchar(40))\n";
3709     SetVersion ($DBversion);
3710 }
3711
3712 $DBversion = '3.01.00.140';
3713 if (C4::Context->preference('Version') < TransformToNum($DBversion)){
3714     $dbh->do("UPDATE systempreferences SET value = '0' WHERE variable = 'TagsModeration' AND value is NULL");
3715     print "Upgrade to $DBversion done (bug 4312 TagsModeration changed from NULL to 0)\n";
3716     SetVersion ($DBversion);
3717 }
3718
3719 $DBversion = '3.01.00.141';
3720 if (C4::Context->preference('Version') < TransformToNum($DBversion)){
3721     $dbh->do(qq{DELETE FROM message_attributes WHERE message_attribute_id=3;});
3722     $dbh->do(qq{DELETE FROM letter WHERE code='EVENT' AND title='Upcoming Library Event';});
3723     print "Upgrade to $DBversion done Remove upcoming events messaging option (bug 2434)\n";
3724     SetVersion ($DBversion);
3725 }
3726
3727 $DBversion = '3.01.00.142';
3728 if (C4::Context->preference('Version') < TransformToNum($DBversion)){
3729     $dbh->do(qq{DELETE FROM message_transports WHERE message_attribute_id=3;});
3730     print "Upgrade to $DBversion done (Remove upcoming events messaging option part 2 (bug 2434))\n";
3731     SetVersion ($DBversion);
3732 }
3733
3734 $DBversion = '3.01.00.143';
3735 if (C4::Context->preference('Version') < TransformToNum($DBversion)){
3736     $dbh->do(qq{CREATE INDEX auth_value_idx ON authorised_values (authorised_value)});
3737     $dbh->do(qq{CREATE INDEX auth_val_cat_idx ON borrower_attribute_types (authorised_value_category)});
3738     print "Upgrade to $DBversion done (Create index on authorised_values and borrower_attribute_types (bug 4139))\n";
3739     SetVersion ($DBversion);
3740 }
3741
3742 $DBversion = '3.01.00.144';
3743 if (C4::Context->preference('Version') < TransformToNum($DBversion)){
3744     $dbh->do(qq{UPDATE systempreferences SET value='normal' where value='default' and variable='IntranetBiblioDefaultView'});
3745     print "Upgrade to $DBversion done (Update the 'default' to 'normal' for the IntranetBiblioDefaultView syspref (bug 5007))\n";
3746     SetVersion ($DBversion);
3747 }
3748
3749 $DBversion = "3.01.00.145";
3750 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
3751     $dbh->do("ALTER TABLE borrowers ADD KEY `guarantorid` (guarantorid);");
3752     print "Upgrade to $DBversion done (Add index on guarantorid)\n";
3753     SetVersion ($DBversion);
3754 }
3755
3756 $DBversion = '3.01.00.999';
3757 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
3758     print "Upgrade to $DBversion done (3.2.0 release candidate)\n";
3759     SetVersion ($DBversion);
3760 }
3761
3762 $DBversion = "3.02.00.000";
3763 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
3764     my $value = $dbh->selectrow_array("SELECT value FROM systempreferences WHERE variable = 'HomeOrHoldingBranch'");
3765     $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');");
3766     print "Upgrade to $DBversion done (Add HomeOrHoldingBranchReturn system preference)\n";
3767     SetVersion ($DBversion);
3768 }
3769
3770 $DBversion = "3.02.00.001";
3771 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
3772     $dbh->do(q{DELETE FROM systempreferences WHERE variable IN (
3773                 'holdCancelLength',
3774                 'PINESISBN',
3775                 'sortbynonfiling',
3776                 'TemplateEncoding',
3777                 'OPACSubscriptionDisplay',
3778                 'OPACDisplayExtendedSubInfo',
3779                 'OAI-PMH:Set',
3780                 'OAI-PMH:Subset',
3781                 'libraryAddress',
3782                 'kohaspsuggest',
3783                 'OrderPdfTemplate',
3784                 'marc',
3785                 'acquisitions',
3786                 'MIME')
3787                }
3788     );
3789     print "Upgrade to $DBversion done (bug 3756: remove disused system preferences)\n";
3790     SetVersion ($DBversion);
3791 }
3792
3793 $DBversion = "3.02.00.002";
3794 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
3795     $dbh->do(q{DELETE FROM systempreferences WHERE variable = 'OpacPrivacy'});
3796     print "Upgrade to $DBversion done (bug 3881: remove unused OpacPrivacy system preference)\n";
3797     SetVersion ($DBversion);
3798 }
3799
3800 $DBversion = "3.02.00.003";
3801 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
3802     $dbh->do(q{UPDATE systempreferences SET variable = 'ILS-DI:AuthorizedIPs' WHERE variable = 'ILS-DI:Authorized_IPs'});
3803     print "Upgrade to $DBversion done (correct ILS-DI:AuthorizedIPs)\n";
3804     SetVersion ($DBversion);
3805 }
3806
3807 $DBversion = "3.02.00.004";
3808 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
3809     print "Upgrade to $DBversion done (3.2.0 general release)\n";
3810     SetVersion ($DBversion);
3811 }
3812
3813 # This is the point where 3.2.x and master diverged, we can use $original_version to make sure we don't
3814 # apply updates that have already been done
3815
3816 $DBversion = "3.03.00.001";
3817 if (C4::Context->preference("Version") < TransformToNum($DBversion) && $original_version < TransformToNum("3.02.00.005")) {
3818     $dbh->do("DELETE FROM subscriptionroutinglist WHERE borrowernumber IS NULL;");
3819     $dbh->do("ALTER TABLE subscriptionroutinglist MODIFY COLUMN `borrowernumber` int(11) NOT NULL;");
3820     $dbh->do("DELETE FROM subscriptionroutinglist WHERE subscriptionid IS NULL;");
3821     $dbh->do("ALTER TABLE subscriptionroutinglist MODIFY COLUMN `subscriptionid` int(11) NOT NULL;");
3822     $dbh->do("CREATE TEMPORARY TABLE del_subscriptionroutinglist 
3823               SELECT s1.routingid FROM subscriptionroutinglist s1
3824               WHERE EXISTS (SELECT * FROM subscriptionroutinglist s2
3825                             WHERE s2.borrowernumber = s1.borrowernumber
3826                             AND   s2.subscriptionid = s1.subscriptionid 
3827                             AND   s2.routingid < s1.routingid);");
3828     $dbh->do("DELETE FROM subscriptionroutinglist
3829               WHERE routingid IN (SELECT routingid FROM del_subscriptionroutinglist);");
3830     $dbh->do("ALTER TABLE subscriptionroutinglist ADD UNIQUE (subscriptionid, borrowernumber);");
3831     $dbh->do("ALTER TABLE subscriptionroutinglist 
3832                 ADD CONSTRAINT `subscriptionroutinglist_ibfk_1` FOREIGN KEY (`borrowernumber`) 
3833                 REFERENCES `borrowers` (`borrowernumber`)
3834                 ON DELETE CASCADE ON UPDATE CASCADE");
3835     $dbh->do("ALTER TABLE subscriptionroutinglist 
3836                 ADD CONSTRAINT `subscriptionroutinglist_ibfk_2` FOREIGN KEY (`subscriptionid`) 
3837                 REFERENCES `subscription` (`subscriptionid`)
3838                 ON DELETE CASCADE ON UPDATE CASCADE");
3839     print "Upgrade to $DBversion done (Make subscriptionroutinglist more strict)\n";
3840     SetVersion ($DBversion);
3841 }
3842
3843 $DBversion = '3.03.00.002';
3844 if (C4::Context->preference("Version") < TransformToNum($DBversion) && $original_version < TransformToNum("3.02.00.006")) {
3845     $dbh->do("UPDATE language_rfc4646_to_iso639 SET iso639_2_code='arm' WHERE rfc4646_subtag='hy';");
3846     $dbh->do("UPDATE language_rfc4646_to_iso639 SET iso639_2_code='eng' WHERE rfc4646_subtag='en';");
3847     $dbh->do("INSERT INTO language_rfc4646_to_iso639(rfc4646_subtag,iso639_2_code) VALUES( 'fi','fin');");
3848     $dbh->do("UPDATE language_rfc4646_to_iso639 SET iso639_2_code='fre' WHERE rfc4646_subtag='fr';");
3849     $dbh->do("INSERT INTO language_rfc4646_to_iso639(rfc4646_subtag,iso639_2_code) VALUES( 'lo','lao');");
3850     $dbh->do("UPDATE language_rfc4646_to_iso639 SET iso639_2_code='ita' WHERE rfc4646_subtag='it';");
3851     $dbh->do("INSERT INTO language_rfc4646_to_iso639(rfc4646_subtag,iso639_2_code) VALUES( 'sr','srp');");
3852     $dbh->do("INSERT INTO language_rfc4646_to_iso639(rfc4646_subtag,iso639_2_code) VALUES( 'tet','tet');");
3853     $dbh->do("INSERT INTO language_rfc4646_to_iso639(rfc4646_subtag,iso639_2_code) VALUES( 'ur','urd');");
3854
3855     print "Upgrade to $DBversion done (Correct language mappings)\n";
3856     SetVersion ($DBversion);
3857 }
3858
3859 $DBversion = '3.03.00.003';
3860 if (C4::Context->preference("Version") < TransformToNum($DBversion) && $original_version < TransformToNum("3.02.00.007")) {
3861     $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');");
3862     print "Upgrade to $DBversion done (Add UseTablesortForCirc syspref)\n";
3863     SetVersion ($DBversion);
3864 }
3865
3866 $DBversion = '3.03.00.004';
3867 if (C4::Context->preference("Version") < TransformToNum($DBversion) && $original_version < TransformToNum("3.02.01.001")) {
3868     my $count = $dbh->selectrow_array('SELECT COUNT(*) FROM letter WHERE module = ? AND code = ?', {}, 'suggestions', 'ACCEPTED');
3869     $dbh->do(q/
3870 INSERT INTO `letter`
3871 (module, code, name, title, content)
3872 VALUES
3873 ('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>>')
3874 /) unless $count > 0;
3875     $count = $dbh->selectrow_array('SELECT COUNT(*) FROM letter WHERE module = ? AND code = ?', {}, 'suggestions', 'AVAILABLE');
3876     $dbh->do(q/
3877 INSERT INTO `letter`
3878 (module, code, name, title, content)
3879 VALUES
3880 ('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>>')
3881 /) unless $count > 0;
3882     $count = $dbh->selectrow_array('SELECT COUNT(*) FROM letter WHERE module = ? AND code = ?', {}, 'suggestions', 'ORDERED');
3883     $dbh->do(q/
3884 INSERT INTO `letter`
3885 (module, code, name, title, content)
3886 VALUES
3887 ('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>>')
3888 /) unless $count > 0;
3889     $count = $dbh->selectrow_array('SELECT COUNT(*) FROM letter WHERE module = ? AND code = ?', {}, 'suggestions', 'REJECTED');
3890     $dbh->do(q/
3891 INSERT INTO `letter`
3892 (module, code, name, title, content)
3893 VALUES
3894 ('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>>')
3895 /) unless $count > 0;
3896     print "Upgrade to $DBversion done (bug 5127: add default templates for suggestion status change notifications)\n";
3897     SetVersion ($DBversion);
3898 };
3899
3900 $DBversion = '3.03.00.005';
3901 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
3902     $dbh->do("update `systempreferences` set options='whitespace|T-prefix|cuecat|libsuite8' where variable='itemBarcodeInputFilter'");
3903     print "Upgrade to $DBversion done (Add itemBarcodeInputFilter choice libsuite8)\n";
3904 }
3905
3906 $DBversion = '3.03.00.006';
3907 if (C4::Context->preference("Version") < TransformToNum($DBversion) && $original_version < TransformToNum("3.02.01.002")) {
3908     $dbh->do("ALTER TABLE deletedborrowers ADD `privacy` int(11) AFTER smsalertnumber;");
3909     $dbh->do("ALTER TABLE deletedborrowers CHANGE `cardnumber` `cardnumber` varchar(16);");
3910     print "Upgrade to $DBversion done (Fix differences between borrowers and deletedborrowers)\n";
3911     SetVersion ($DBversion);
3912 }
3913
3914 $DBversion = '3.03.00.007';
3915 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
3916     $dbh->do("ALTER table suggestions ADD quantity SMALLINT(6) default NULL,
3917                 ADD currency VARCHAR(3) default NULL,
3918                 ADD price DECIMAL(28,6) default NULL,
3919                 ADD total DECIMAL(28,6) default NULL;
3920                 ");
3921     print "Upgrade to $DBversion done (Added acq related columns to suggestions)\n";
3922     SetVersion ($DBversion);
3923 }
3924
3925 $DBversion = '3.03.00.008';
3926 if (C4::Context->preference('Version') < TransformToNum($DBversion)){
3927     $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')");
3928     print "Upgrade to $DBversion done (adding syspref OPACNoResultsFound to control what displays when no results are found for a search in the OPAC.)\n";
3929     SetVersion ($DBversion);
3930 }
3931
3932 $DBversion = '3.03.00.009';
3933 if (C4::Context->preference("Version") < TransformToNum($DBversion) && $original_version < TransformToNum("3.02.01.003")) {
3934     $dbh->do("INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('IntranetUserCSS','','Add CSS to be included in the Intranet',NULL,'free')");
3935     print "Upgrade to $DBversion done (Add IntranetUserCSS syspref)\n";
3936     SetVersion ($DBversion);
3937 }
3938
3939 $DBversion = "3.03.00.010";
3940 if (C4::Context->preference("Version") < TransformToNum($DBversion) && $original_version < TransformToNum("3.02.02.001")) {
3941     $dbh->do("UPDATE `marc_subfield_structure` SET liblibrarian = 'Distance from earth' WHERE liblibrarian = 'Distrance from earth' AND tagfield = '034' AND tagsubfield = 'r';");
3942     $dbh->do("UPDATE `marc_subfield_structure` SET libopac = 'Distance from earth' WHERE libopac = 'Distrance from earth' AND tagfield = '034' AND tagsubfield = 'r';");
3943     print "Upgrade to $DBversion done (Fix misspelled 034r subfield in MARC21 Frameworks)\n";
3944     SetVersion ($DBversion);
3945 }
3946
3947 $DBversion = "3.03.00.011";
3948 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
3949     $dbh->do("UPDATE aqbooksellers SET gstrate=NULL WHERE gstrate=0.0");
3950     print "Upgrade to $DBversion done (Bug 5186: allow GST rate to be set to 0)\n";
3951     SetVersion ($DBversion);
3952 }
3953
3954 $DBversion = "3.03.00.012";
3955 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
3956    $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')");
3957    print "Upgrade to $DBversion done (Bug 2142: maxItemsInSearchResults syspref resurrected)\n";
3958    SetVersion ($DBversion);
3959 }
3960
3961 $DBversion = "3.03.00.013";
3962 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
3963     $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')");
3964     print "Upgrade to $DBversion done (added 'OpacPublic' syspref)\n";
3965    SetVersion ($DBversion);
3966 }
3967
3968 $DBversion = "3.03.00.014";
3969 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
3970     $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')");
3971     $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')");
3972     $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')");
3973     print "Upgrade to $DBversion done (Add flexible shelf browser constraints)\n";
3974     SetVersion ($DBversion);
3975 }
3976
3977 $DBversion = "3.03.00.015";
3978 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
3979     if ( C4::Context->preference("marcflavour") eq "MARC21" ) {
3980         my $sth = $dbh->prepare(
3981 "INSERT INTO `marc_subfield_structure` (`tagfield`, `tagsubfield`, `liblibrarian`, `libopac`, `repeatable`, `mandatory`, `kohafield`,
3982                              `tab`, `authorised_value`, `authtypecode`, `value_builder`, `isurl`, `hidden`, `frameworkcode`, `seealso`, `link`, `defaultvalue`)
3983                              VALUES ( ?, '9', '9 (RLIN)', '9 (RLIN)', 0, 0, '', 6, '', '', '', 0, -5, '', '', '', NULL)"
3984         );
3985         $sth->execute('648');
3986         $sth->execute('654');
3987         $sth->execute('655');
3988         $sth->execute('656');
3989         $sth->execute('657');
3990         $sth->execute('658');
3991         $sth->execute('662');
3992         $sth->finish;
3993         print
3994 "Upgrade to $DBversion done (Bug 5619: Add subfield 9 to marc21 648,654,655,656,657,658,662)\n";
3995     }
3996     SetVersion($DBversion);
3997 }
3998
3999 $DBversion = '3.03.00.016';
4000 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
4001     # reimplement OpacPrivacy system preference
4002     $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')");
4003     $dbh->do("ALTER TABLE `borrowers` ADD `privacy` INTEGER NOT NULL DEFAULT 1;");
4004     $dbh->do("ALTER TABLE `deletedborrowers` ADD `privacy` INTEGER NOT NULL DEFAULT 1;");
4005     print "Upgrade to $DBversion done (OpacPrivacy reimplementation)\n";
4006     SetVersion($DBversion);
4007 };
4008
4009 $DBversion = '3.03.00.017';
4010 if (C4::Context->preference("Version") < TransformToNum($DBversion) && $original_version < TransformToNum("3.02.03.001")) {
4011     $dbh->do("ALTER TABLE  `currency` CHANGE `rate` `rate` FLOAT( 15, 5 ) NULL DEFAULT NULL;");
4012     print "Upgrade to $DBversion done (Enable currency rates >= 100)\n";
4013     SetVersion ($DBversion);
4014 }
4015
4016 $DBversion = '3.03.00.018';
4017 if (C4::Context->preference("Version") < TransformToNum($DBversion) && $original_version < TransformToNum("3.02.03.002")) {
4018     $dbh->do( q|update language_descriptions set description = 'Nederlands' where lang = 'nl' and subtag = 'nl'|);
4019     $dbh->do( q|update language_descriptions set description = 'Dansk' where lang = 'da' and subtag = 'da'|);
4020     print "Upgrade to $DBversion done (Correct language descriptions)\n";
4021     SetVersion ($DBversion);
4022 }
4023
4024 $DBversion = '3.03.00.019';
4025 if (C4::Context->preference("Version") < TransformToNum($DBversion) && $original_version < TransformToNum("3.02.03.003")) {
4026     # Fix bokmål
4027     $dbh->do("UPDATE language_subtag_registry SET description = 'Norwegian bokm&#229;l' WHERE subtag = 'nb';");
4028     $dbh->do("INSERT INTO language_rfc4646_to_iso639(rfc4646_subtag,iso639_2_code) VALUES( 'nb','nob');");
4029     $dbh->do("UPDATE language_descriptions SET description = 'Norsk bokm&#229;l' WHERE subtag = 'nb' AND lang = 'nb';");
4030     $dbh->do("UPDATE language_descriptions SET description = 'Norwegian bokm&#229;l' WHERE subtag = 'nb' AND lang = 'en';");
4031     $dbh->do("UPDATE language_descriptions SET description = 'Norvégien bokm&#229;l' WHERE subtag = 'nb' AND lang = 'fr';");
4032     # Add nynorsk
4033     $dbh->do("INSERT INTO language_subtag_registry( subtag, type, description, added) VALUES ( 'nn', 'language', 'Norwegian nynorsk','2011-02-14' )");
4034     $dbh->do("INSERT INTO language_rfc4646_to_iso639(rfc4646_subtag,iso639_2_code) VALUES( 'nn','nno')");
4035     $dbh->do("INSERT INTO language_descriptions(subtag, type, lang, description) VALUES( 'nn', 'language', 'nb', 'Norsk nynorsk')");
4036     $dbh->do("INSERT INTO language_descriptions(subtag, type, lang, description) VALUES( 'nn', 'language', 'nn', 'Norsk nynorsk')");
4037     $dbh->do("INSERT INTO language_descriptions(subtag, type, lang, description) VALUES( 'nn', 'language', 'en', 'Norwegian nynorsk')");
4038     $dbh->do("INSERT INTO language_descriptions(subtag, type, lang, description) VALUES( 'nn', 'language', 'fr', 'Norvégien nynorsk')");
4039     print "Upgrade to $DBversion done (Correct language descriptions for Norwegian)\n";
4040     SetVersion ($DBversion);
4041 }
4042
4043 $DBversion = '3.03.00.020';
4044 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
4045     $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')");
4046     $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')");
4047     print "Upgrade to $DBversion done (Bug 5811: Add sysprefs controlling overriding fines)\n";
4048     SetVersion($DBversion);
4049 };
4050
4051 $DBversion = '3.03.00.021';
4052 if (C4::Context->preference("Version") < TransformToNum($DBversion) && $original_version < TransformToNum("3.02.05.001")) {
4053     $dbh->do("ALTER TABLE items MODIFY enumchron TEXT");
4054     $dbh->do("ALTER TABLE deleteditems MODIFY enumchron TEXT");
4055     print "Upgrade to $DBversion done (bug 5642: longer serial enumeration)\n";
4056     SetVersion ($DBversion);
4057 }
4058
4059 $DBversion = '3.03.00.022';
4060 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
4061     $dbh->do("INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES ('AuthoritiesLog','0','If ON, log edit/create/delete actions on authorities.','','YesNo');");
4062     print "Upgrade to $DBversion done (Add AuthoritiesLog syspref)\n";
4063     SetVersion ($DBversion);
4064 }
4065
4066 # due to a mismatch in kohastructure.sql some koha will have missing columns in aqbasketgroup
4067 # this attempts to fix that
4068 $DBversion = '3.03.00.023';
4069 if (C4::Context->preference("Version") < TransformToNum($DBversion) && $original_version < TransformToNum("3.02.05.002")) {
4070     my $sth = $dbh->prepare("SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'aqbasketgroups' AND COLUMN_NAME = 'billingplace'");
4071     $sth->execute;
4072     $dbh->do("ALTER TABLE aqbasketgroups ADD billingplace VARCHAR(10)") if ! $sth->fetchrow_hashref;
4073     $sth = $dbh->prepare("SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'aqbasketgroups' AND COLUMN_NAME = 'deliveryplace'");
4074     $sth->execute;
4075     $dbh->do("ALTER TABLE aqbasketgroups ADD deliveryplace VARCHAR(10)") if ! $sth->fetchrow_hashref;
4076     $sth = $dbh->prepare("SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'aqbasketgroups' AND COLUMN_NAME = 'deliverycomment'");
4077     $sth->execute;
4078     $dbh->do("ALTER TABLE aqbasketgroups ADD deliverycomment VARCHAR(255)") if ! $sth->fetchrow_hashref;
4079     print "Upgrade to $DBversion done (Reconcile aqbasketgroups)\n";
4080     SetVersion ($DBversion);
4081 }
4082
4083 $DBversion = '3.03.00.024';
4084 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
4085     $dbh->do("INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES ('TraceCompleteSubfields','0','Force subject tracings to only match complete subfields.','0','YesNo')");
4086     $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')");
4087     print "Upgrade to $DBversion done (Add syspref to force whole-subfield matching on subject tracings)\n";
4088     SetVersion($DBversion);
4089 };
4090
4091 $DBversion = "3.03.00.025";
4092 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
4093     $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')");
4094     print "Upgrade to $DBversion done (Add syspref to control if user can choose pickup branch for holds)\n";
4095     SetVersion ($DBversion);
4096 }
4097
4098 $DBversion = '3.03.00.026';
4099 if (C4::Context->preference("Version") < TransformToNum($DBversion) && $original_version < TransformToNum("3.02.05.003")) {
4100     $dbh->do("UPDATE `message_attributes` SET message_name='Item Due' WHERE message_attribute_id=1 AND message_name LIKE 'Item DUE'");
4101         print "Upgrade to $DBversion done ( fix capitalization in message type )\n";
4102     SetVersion ($DBversion);
4103 }
4104
4105 $DBversion = '3.03.00.027'; 
4106 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
4107     $dbh->do("INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES('displayFacetCount', '0', NULL, NULL, 'YesNo')");
4108     $dbh->do("INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES('maxRecordsForFacets', '20', NULL, NULL, 'Integer')");
4109     print "Upgrade to $DBversion done (Preferences for facet count)\n";
4110     SetVersion ($DBversion);
4111 }
4112
4113 $DBversion = "3.03.00.028";
4114 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
4115     $dbh->do("INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES ('FacetLabelTruncationLength', 20, 'Truncate facets length to','','free')");
4116     print "Upgrade to $DBversion done (Add FacetLabelTruncationLength syspref to control facets displayed length)\n";
4117     SetVersion ($DBversion);
4118 }
4119
4120 $DBversion = "3.03.00.029";
4121 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
4122     $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')");
4123     print "Upgrade to $DBversion done (Add syspref to control if user can choose branch when making purchase suggestion)\n";
4124     SetVersion ($DBversion);
4125 }
4126
4127 $DBversion = "3.03.00.030";
4128 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
4129     $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')");
4130     $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')");
4131     print "Upgrade to $DBversion done (Add sysprefs to control custom favicons)\n";
4132     SetVersion ($DBversion);
4133 }
4134
4135 $DBversion = "3.03.00.031";
4136 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
4137     $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');");
4138     print "Upgrade to $DBversion done (Add syspref FineNotifyAtCheckin)\n";
4139     SetVersion ($DBversion);    
4140 }
4141
4142 $DBversion = '3.03.00.032';
4143 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
4144     $dbh->do("INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES ('TraceSubjectSubdivisions', 1, 'Create searches on all subdivisions for subject tracings.','1','YesNo')");
4145     print "Upgrade to $DBversion done ( include subdivisions when generating subject tracing searches )\n";
4146 }
4147
4148
4149 $DBversion = '3.03.00.033';
4150 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
4151     $dbh->do("INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES('StaffAuthorisedValueImages', '1', '', NULL, 'YesNo')");
4152     print "Upgrade to $DBversion done (System pref StaffAuthorisedValueImages)\n";
4153     SetVersion ($DBversion);
4154 }
4155
4156 $DBversion = '3.03.00.034';
4157 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
4158     $dbh->do("ALTER TABLE `categories` ADD `hidelostitems` tinyint(1) NOT NULL default '0' AFTER `reservefee`");
4159     print "Upgrade to $DBversion done (Add hidelostitems preference to borrower categories)\n";
4160     SetVersion ($DBversion);
4161 }
4162
4163 $DBversion = '3.03.00.035';
4164 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
4165     $dbh->do("ALTER TABLE `issuingrules` ADD hardduedate date default NULL AFTER issuelength");
4166     $dbh->do("ALTER TABLE `issuingrules` ADD hardduedatecompare tinyint NOT NULL default 0 AFTER hardduedate");
4167     my $duedate;
4168     if (C4::Context->preference("globalDueDate")) {
4169       $duedate = C4::Dates::format_date_in_iso(C4::Context->preference("globalDueDate"));
4170       $dbh->do("UPDATE `issuingrules` SET hardduedate = '$duedate', hardduedatecompare = 0");
4171     } elsif (C4::Context->preference("ceilingDueDate")) {
4172       $duedate = C4::Dates::format_date_in_iso(C4::Context->preference("ceilingDueDate"));
4173       $dbh->do("UPDATE `issuingrules` SET hardduedate = '$duedate', hardduedatecompare = -1");
4174     }
4175     $dbh->do("DELETE FROM `systempreferences` WHERE variable = 'globalDueDate' OR variable = 'ceilingDueDate'");
4176     print "Upgrade to $DBversion done (Move global and ceiling due dates to Circ Rules level)\n";
4177     SetVersion ($DBversion);
4178 }
4179
4180 $DBversion = '3.03.00.036';
4181 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
4182     $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')");
4183     print "Upgrade to $DBversion done ( Make COinS optional in OPAC search results )\n";
4184     SetVersion ($DBversion);
4185 }
4186
4187 $DBversion = '3.03.00.037';
4188 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
4189     $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')");
4190     $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')");
4191     print "Upgrade to $DBversion done (Add 'Display856uAsImage' and 'OPACDisplay856uAsImage' syspref)\n";
4192     SetVersion ($DBversion);
4193 }
4194
4195 $DBversion = '3.03.00.038';
4196 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
4197     $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')");
4198     $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')");
4199     $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')");
4200     print "Upgrade to $DBversion done ( Add Self-checkout by Login system preferences )\n";
4201 }
4202
4203 $DBversion = "3.03.00.039";
4204 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
4205     $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');");
4206     print "Upgrade to $DBversion done (Add syspref ShowReviewer)\n";
4207 }
4208     
4209 $DBversion = "3.03.00.040";
4210 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
4211     $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');");
4212     print "Upgrade to $DBversion done (Add syspref UseControlNumber)\n";
4213 }
4214
4215 $DBversion = "3.03.00.041";
4216 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
4217     $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')");
4218     $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')");
4219     print "Upgrade to $DBversion done (Add sysprefs to control alternate holdings information display)\n";
4220     SetVersion ($DBversion);
4221 }
4222
4223 $DBversion = '3.03.00.042';
4224 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
4225     stocknumber_checker();
4226     print "Upgrade to $DBversion done (5860 Index itemstocknumber)\n";
4227     SetVersion ($DBversion);
4228 }
4229
4230 sub stocknumber_checker { #code reused later on
4231   my @row;
4232   #drop the obsolete itemSStocknumber idx if it exists
4233   @row = $dbh->selectrow_array("SHOW INDEXES FROM items WHERE key_name='itemsstocknumberidx'");
4234   $dbh->do("ALTER TABLE `items` DROP INDEX `itemsstocknumberidx`;") if @row;
4235
4236   #check itemstocknumber idx; remove it if it is unique
4237   @row = $dbh->selectrow_array("SHOW INDEXES FROM items WHERE key_name='itemstocknumberidx' AND non_unique=0");
4238   $dbh->do("ALTER TABLE `items` DROP INDEX `itemstocknumberidx`;") if @row;
4239
4240   #add itemstocknumber index non-unique IF it still not exists
4241   @row = $dbh->selectrow_array("SHOW INDEXES FROM items WHERE key_name='itemstocknumberidx'");
4242   $dbh->do("ALTER TABLE items ADD INDEX itemstocknumberidx (stocknumber);") unless @row;
4243 }
4244
4245 $DBversion = "3.03.00.043";
4246 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
4247
4248     $dbh->do("INSERT INTO authorised_values (category,authorised_value,lib,lib_opac) VALUES ('YES_NO','0','No','No')");
4249     $dbh->do("INSERT INTO authorised_values (category,authorised_value,lib,lib_opac) VALUES ('YES_NO','1','Yes','Yes')");
4250
4251         print "Upgrade to $DBversion done ( add generic boolean YES_NO authorised_values pair )\n";
4252         SetVersion ($DBversion);
4253 }
4254
4255 $DBversion = '3.03.00.044';
4256 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
4257     $dbh->do("ALTER TABLE `aqbasketgroups` ADD `freedeliveryplace` TEXT NULL AFTER `deliveryplace`;");
4258     print "Upgrade to $DBversion done (adding freedeliveryplace to basketgroups)\n";
4259 }
4260
4261 $DBversion = '3.03.00.045';
4262 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
4263     #Remove obsolete columns from aqbooksellers if needed
4264     my $a = $dbh->selectall_hashref('SHOW columns from aqbooksellers','Field');
4265     my $sqldrop="ALTER TABLE aqbooksellers DROP COLUMN ";
4266     foreach(qw/deliverydays followupdays followupscancel invoicedisc nocalc specialty/) {
4267       $dbh->do($sqldrop.$_) if exists $a->{$_};
4268     }
4269     #Remove obsolete column from aqbudgets if needed
4270     #The correct column is budget_notes
4271     $a = $dbh->selectall_hashref('SHOW columns from aqbudgets','Field');
4272     if(exists $a->{budget_description}) {
4273       $dbh->do("ALTER TABLE aqbudgets DROP COLUMN budget_description");
4274     }
4275     print "Upgrade to $DBversion done (Remove obsolete columns from aqbooksellers and aqbudgets if needed)\n";
4276     SetVersion ($DBversion);
4277 }
4278
4279 $DBversion = "3.03.00.046";
4280 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
4281     $dbh->do("ALTER TABLE overduerules ALTER delay1 SET DEFAULT NULL, ALTER delay2 SET DEFAULT NULL, ALTER delay3 SET DEFAULT NULL");
4282     print "Upgrade to $DBversion done (Setting NULL default value for delayn columns in table overduerules)\n";
4283     SetVersion($DBversion);
4284 }
4285
4286 $DBversion = '3.03.00.047';
4287 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
4288     $dbh->do("ALTER TABLE borrowers ADD `state` mediumtext AFTER city;");
4289     $dbh->do("ALTER TABLE borrowers ADD `B_state` mediumtext AFTER B_city;");
4290     $dbh->do("ALTER TABLE borrowers ADD `altcontactstate` mediumtext AFTER altcontactaddress3;");
4291     $dbh->do("ALTER TABLE deletedborrowers ADD `state` mediumtext AFTER city;");
4292     $dbh->do("ALTER TABLE deletedborrowers ADD `B_state` mediumtext AFTER B_city;");
4293     $dbh->do("ALTER TABLE deletedborrowers ADD `altcontactstate` mediumtext AFTER altcontactaddress3;");
4294     print "Upgrade to $DBversion done (Add state field to patron's addresses)\n";
4295 }
4296
4297 $DBversion = '3.03.00.048';
4298 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
4299     $dbh->do("ALTER TABLE branches ADD `branchstate` mediumtext AFTER `branchcity`;");
4300     print "Upgrade to $DBversion done (Add state to branch address)\n";
4301     SetVersion ($DBversion);
4302 }
4303
4304 $DBversion = '3.03.00.049';
4305 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
4306     $dbh->do("ALTER TABLE `accountlines` ADD `note` text NULL default NULL");
4307     $dbh->do("ALTER TABLE `accountlines` ADD `manager_id` int( 11 ) NULL ");
4308     print "Upgrade to $DBversion done (adding note and manager_id fields in accountlines table)\n";
4309     SetVersion($DBversion);
4310 }
4311
4312 $DBversion = "3.03.00.050";
4313 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
4314     $dbh->do("
4315         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');
4316         ");
4317     print "Upgrade to $DBversion done (Adding OpacHiddenItems syspref)\n";
4318     SetVersion($DBversion);
4319 }
4320
4321 $DBversion = "3.03.00.051";
4322 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
4323     print "Upgrade to $DBversion done (Remove spaces and dashes from message_attribute names)\n";
4324     $dbh->do("UPDATE message_attributes SET message_name = 'Item_Due' WHERE message_name='Item Due'");
4325     $dbh->do("UPDATE message_attributes SET message_name = 'Advance_Notice' WHERE message_name='Advance Notice'");
4326     $dbh->do("UPDATE message_attributes SET message_name = 'Hold_Filled' WHERE message_name='Hold Filled'");
4327     $dbh->do("UPDATE message_attributes SET message_name = 'Item_Check_in' WHERE message_name='Item Check-in'");
4328     $dbh->do("UPDATE message_attributes SET message_name = 'Item_Checkout' WHERE message_name='Item Checkout'");    
4329     SetVersion ($DBversion);
4330 }
4331
4332 $DBversion = "3.03.00.052";
4333 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
4334     $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');");
4335     print "Upgrade to $DBversion done (Add syspref WaitingNotifyAtCheckin)\n";
4336     SetVersion ($DBversion);
4337 }
4338
4339 $DBversion = "3.04.00.000";
4340 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
4341     print "Upgrade to $DBversion done Koha 3.4.0 release \n";
4342     SetVersion ($DBversion);
4343 }
4344
4345 $DBversion = "3.05.00.001";
4346 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
4347     $dbh->do(qq{
4348     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');
4349     });
4350     print "Upgrade to $DBversion done (Adds New System preference numSearchRSSResults)\n";
4351     SetVersion($DBversion);
4352 }
4353
4354 $DBversion = '3.05.00.002';
4355 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
4356     #follow up fix 5860: some installs already past 3.3.0.42
4357     stocknumber_checker();
4358     print "Upgrade to $DBversion done (Fix for stocknumber index)\n";
4359     SetVersion ($DBversion);
4360 }
4361
4362 $DBversion = "3.05.00.003";
4363 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
4364     $dbh->do(qq{
4365     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');
4366     });
4367     print "Upgrade to $DBversion done (Adds New System preference OpacRenewalBranch)\n";
4368     SetVersion($DBversion);
4369 }
4370
4371 $DBversion = "3.05.00.004";
4372 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
4373     $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');");
4374     print "Upgrade to $DBversion done (Add syspref ShowReviewerPhoto)\n";
4375     SetVersion($DBversion);    
4376 }
4377     
4378 $DBversion = "3.05.00.005";
4379 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
4380     $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');");
4381     print "Upgrade to $DBversion done (Adds pref BasketConfirmations)\n";
4382     SetVersion($DBversion);
4383 }
4384
4385 $DBversion = "3.05.00.006"; 
4386 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
4387     $dbh->do("INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES ('MARCAuthorityControlField008', '|| aca||aabn           | a|a     d', NULL, NULL, 'Textarea')");
4388     print "Upgrade to $DBversion done (Add syspref MARCAuthorityControlField008)\n";
4389     SetVersion ($DBversion);
4390 }
4391
4392 $DBversion = "3.05.00.007";
4393 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
4394     $dbh->do("INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES('OpenLibraryCovers',0,'If ON Openlibrary book covers will be show',NULL,'YesNo');");
4395     print "Upgrade to $DBversion done (Add syspref OpenLibraryCovers)\n";
4396     SetVersion($DBversion);
4397 }
4398
4399 $DBversion = "3.05.00.008";
4400 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
4401     $dbh->do("ALTER TABLE `cities` ADD `city_state` VARCHAR( 100 ) NULL DEFAULT NULL AFTER  `city_name`;");
4402     $dbh->do("ALTER TABLE `cities` ADD `city_country` VARCHAR( 100 ) NULL DEFAULT NULL AFTER  `city_zipcode`;");
4403     print "Add state and country to cities table corresponding to new columns in borrowers\n";
4404     SetVersion($DBversion);
4405 }
4406
4407 $DBversion = "3.05.00.009";
4408 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
4409     $dbh->do("INSERT INTO old_issues (borrowernumber, itemnumber, date_due, branchcode, issuingbranch, returndate, lastreneweddate, `return`, renewals, timestamp, issuedate)
4410               SELECT borrowernumber, itemnumber, date_due, branchcode, issuingbranch, returndate, lastreneweddate, `return`, renewals, timestamp, issuedate FROM issues WHERE borrowernumber IS NULL");
4411     $dbh->do("DELETE FROM issues WHERE borrowernumber IS NULL");
4412
4413     $dbh->do("INSERT INTO old_issues (borrowernumber, itemnumber, date_due, branchcode, issuingbranch, returndate, lastreneweddate, `return`, renewals, timestamp, issuedate)
4414               SELECT borrowernumber, itemnumber, date_due, branchcode, issuingbranch, returndate, lastreneweddate, `return`, renewals, timestamp, issuedate FROM issues WHERE itemnumber IS NULL");
4415     $dbh->do("DELETE FROM issues WHERE itemnumber IS NULL");
4416
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 NOT EXISTS (SELECT * FROM borrowers WHERE borrowernumber = issues.borrowernumber)");
4419     $dbh->do("DELETE FROM issues WHERE NOT EXISTS (SELECT * FROM borrowers WHERE borrowernumber = issues.borrowernumber)");
4420
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 NOT EXISTS (SELECT * FROM items WHERE itemnumber = issues.itemnumber)");
4423     $dbh->do("DELETE FROM issues WHERE NOT EXISTS (SELECT * FROM items WHERE itemnumber = issues.itemnumber)");
4424
4425     $dbh->do("ALTER TABLE issues DROP FOREIGN KEY `issues_ibfk_1`");
4426     $dbh->do("ALTER TABLE issues DROP FOREIGN KEY `issues_ibfk_2`");
4427     $dbh->do("ALTER TABLE issues ALTER COLUMN borrowernumber DROP DEFAULT");
4428     $dbh->do("ALTER TABLE issues ALTER COLUMN itemnumber DROP DEFAULT");
4429     $dbh->do("ALTER TABLE issues MODIFY COLUMN borrowernumber int(11) NOT NULL");
4430     $dbh->do("ALTER TABLE issues MODIFY COLUMN itemnumber int(11) NOT NULL");
4431     $dbh->do("ALTER TABLE issues DROP KEY `issuesitemidx`");
4432     $dbh->do("ALTER TABLE issues ADD PRIMARY KEY (`itemnumber`)");
4433     $dbh->do("ALTER TABLE issues ADD CONSTRAINT `issues_ibfk_1` FOREIGN KEY (`borrowernumber`) REFERENCES `borrowers` (`borrowernumber`) ON DELETE RESTRICT ON UPDATE CASCADE");
4434     $dbh->do("ALTER TABLE issues ADD CONSTRAINT `issues_ibfk_2` FOREIGN KEY (`itemnumber`) REFERENCES `items` (`itemnumber`) ON DELETE RESTRICT ON UPDATE CASCADE");
4435
4436     print "Upgrade to $DBversion done (issues referential integrity)\n";
4437     SetVersion ($DBversion);
4438 }
4439
4440 $DBversion = "3.05.00.010";
4441 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
4442     $dbh->do("CREATE INDEX priorityfoundidx ON reserves (priority,found)");
4443     print "Create an index on reserves to speed up holds awaiting pickup report bug 5866\n";
4444     SetVersion($DBversion);
4445 }
4446
4447
4448 $DBversion = "3.05.00.011";
4449 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
4450     $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')");
4451     print "Upgrade to $DBversion done (add OPACResultsSidebar syspref (enh 6165))\n";
4452     SetVersion($DBversion);
4453 }
4454     
4455 $DBversion = "3.05.00.012";
4456 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
4457     $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')");
4458     print "Upgrade to $DBversion done (add RecordLocalUseOnReturn syspref (enh 6403))\n";
4459     SetVersion($DBversion);
4460 }
4461
4462 $DBversion = "3.05.00.013";
4463 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
4464     $dbh->do(qq|INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES ('OpacKohaUrl','0',"Show 'Powered by Koha' text on OPAC footer.",NULL,NULL)|);
4465     print "Upgrade to $DBversion done (Add syspref 'OpacKohaUrl')\n";
4466     SetVersion($DBversion);
4467 }
4468
4469 $DBversion = "3.05.00.014";
4470 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
4471     $dbh->do("ALTER TABLE `borrowers` MODIFY `userid` VARCHAR(75)");
4472     print "Modified userid column length into 75 in borrowers\n";
4473     SetVersion($DBversion);
4474 }
4475
4476 $DBversion = "3.05.00.015";
4477 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
4478     $dbh->do("INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES ('NovelistSelectEnabled',0,'Enable Novelist Select content.  Requires Novelist Profile and Password',NULL,'YesNo')");
4479     $dbh->do("INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES ('NovelistSelectProfile',NULL,'Novelist Select user Password',NULL,'free')");
4480     $dbh->do("INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES ('NovelistSelectPassword',NULL,'Enable Novelist user Profile',NULL,'free')");
4481     $dbh->do("INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES ('NovelistSelectView','tab','Where to display Novelist Select content','tab|above|below|right','Choice')");
4482     print "Upgrade to $DBversion done (Add support for EBSCO's NoveList Select (enh 6902))\n";
4483     SetVersion($DBversion);
4484 }
4485
4486 $DBversion = '3.05.00.016';
4487 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
4488     $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');");
4489     print "Upgrade to $DBversion done (Add EasyAnalyticalRecords syspref)\n";
4490     SetVersion ($DBversion);
4491 }
4492
4493 $DBversion = '3.05.00.017';
4494 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
4495     if (C4::Context->preference("marcflavour") eq 'MARC21' ||
4496         C4::Context->preference("marcflavour") eq 'NORMARC'){
4497         $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)");
4498         $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)");
4499         print "Upgrade to $DBversion done (Add 773 subfield 9 and 0 to default framework)\n";
4500         SetVersion ($DBversion);
4501     } elsif (C4::Context->preference("marcflavour") eq 'UNIMARC'){
4502         $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)");
4503         print "Upgrade to $DBversion done (Add 461 subfield 9 to default framework)\n";
4504         SetVersion ($DBversion);
4505     }
4506 }
4507
4508 $DBversion = "3.05.00.018";
4509 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
4510     $dbh->do("INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('OpacNavBottom','','Links after OpacNav links','70|10','Textarea')");
4511     print "Upgrade to $DBversion done (add OpacNavBottom syspref (enh 6825): if appropriate, you can split OpacNav into OpacNav and OpacNavBottom)\n";
4512     SetVersion($DBversion);
4513 }
4514
4515 $DBversion = "3.05.00.019";
4516 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
4517     $dbh->do("UPDATE itemtypes SET imageurl = 'vokal/Book.png' WHERE imageurl = 'vokal/BOOK.png'");
4518     $dbh->do("UPDATE itemtypes SET imageurl = 'vokal/Book-32px.png' WHERE imageurl = 'vokal/BOOK-32px.png'");
4519     $dbh->do("UPDATE authorised_values SET imageurl = 'vokal/Book.png' WHERE imageurl = 'vokal/BOOK.png'");
4520     $dbh->do("UPDATE authorised_values SET imageurl = 'vokal/Book-32px.png' WHERE imageurl = 'vokal/BOOK-32px.png'");
4521     print "Upgrade to $DBversion done (remove duplicate VOKAL Book icons, bug 6862)\n";
4522     SetVersion($DBversion);
4523 }
4524
4525 $DBversion = "3.05.00.020";
4526 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
4527     $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')");
4528     print "Upgrade to $DBversion done (Add syspref AcqViewBaskets)\n";
4529     SetVersion($DBversion);
4530 }
4531
4532 $DBversion = "3.05.00.021";
4533 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
4534     $dbh->do("ALTER TABLE borrower_attribute_types ADD COLUMN display_checkout TINYINT(1) NOT NULL DEFAULT '0';");
4535     print "Upgrade to $DBversion done (Added a display_checkout field in borrower_attribute_types table)\n"; 
4536     SetVersion($DBversion);
4537 }
4538
4539 $DBversion = "3.05.00.022"; 
4540 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
4541     $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");
4542     print "Upgrade to $DBversion done (6094: Fixing ModAuthority problems, add a need_merge_authorities table)\n";
4543     SetVersion($DBversion);
4544 }
4545
4546 $DBversion = "3.05.00.023";
4547 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
4548     $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');");
4549     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";
4550     SetVersion($DBversion);
4551 }
4552
4553 $DBversion = "3.06.00.000";
4554 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
4555     print "Upgrade to $DBversion done Koha 3.6.0 release \n";
4556     SetVersion ($DBversion);
4557 }
4558
4559 $DBversion = "3.07.00.001";
4560 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
4561     my $borrowers = $dbh->selectcol_arrayref( "SELECT borrowernumber from borrowers where debarred =1;", { Columns => [1] } );
4562     $dbh->do("ALTER TABLE borrowers MODIFY debarred DATE DEFAULT NULL;");
4563     $dbh->do( "UPDATE borrowers set debarred='9999-12-31' where borrowernumber IN (" . join( ",", @$borrowers ) . ");" ) if ($borrowers and scalar(@$borrowers)>0);
4564     $dbh->do("ALTER TABLE borrowers ADD COLUMN debarredcomment VARCHAR(255) DEFAULT NULL AFTER debarred;");
4565     $dbh->do("ALTER TABLE deletedborrowers MODIFY debarred DATE DEFAULT NULL;");
4566     $dbh->do("ALTER TABLE deletedborrowers ADD COLUMN debarredcomment VARCHAR(255) DEFAULT NULL AFTER debarred;");
4567     print "Upgrade done (Change borrowers.debarred into Date )\n";
4568     SetVersion($DBversion);
4569 }
4570
4571 $DBversion = "3.07.00.002";
4572 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
4573     $dbh->do("UPDATE borrowers SET debarred=NULL WHERE debarred='0000-00-00';");
4574     print "Setting NULL to debarred where 0000-00-00 is stored (bug 7272)\n";
4575     SetVersion($DBversion);
4576 }
4577
4578 $DBversion = "3.07.00.003";
4579 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
4580     $dbh->do(" UPDATE `message_attributes` SET message_name='Item_Due' WHERE message_name='Item_DUE'");
4581     print "Updating message_name in message_attributes\n";
4582     SetVersion($DBversion);
4583 }
4584
4585 $DBversion = "3.07.00.004";
4586 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
4587     $dbh->do("ALTER TABLE  `suggestions` ADD  `patronreason` TEXT NULL AFTER  `reason`");
4588     print "Upgrade to $DBversion done (Add column to suggestions table to store patrons' reasons for submitting a suggestion. )\n";
4589     SetVersion($DBversion);
4590 }
4591
4592 $DBversion = "3.07.00.005";
4593 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
4594     $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')");
4595     print "Upgrade to $DBversion done (BorrowerUnwantedField syspref)\n";
4596     SetVersion ($DBversion);
4597 }
4598
4599 $DBversion = "3.07.00.006";
4600 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
4601     $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');");
4602     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";
4603     SetVersion($DBversion);
4604 }
4605
4606 $DBversion = "3.07.00.007";
4607 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
4608     $dbh->do("ALTER TABLE items MODIFY materials text;");
4609     print "Upgrade to $DBversion done alter items.material from varchar(10) to text \n";
4610     SetVersion($DBversion);
4611 }
4612
4613 $DBversion = '3.07.00.008';
4614 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
4615     if (C4::Context->preference("marcflavour") eq 'MARC21') {
4616         if (C4::Context->preference("opaclanguages") eq "de") {
4617             $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, '');");
4618         } else {
4619             $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, '');");
4620         }
4621     }
4622     print "Upgrade to $DBversion done (add MARC21 field 545 to framework)\n";
4623     SetVersion ($DBversion);
4624 }
4625
4626 $DBversion = "3.07.00.009";
4627 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
4628     $dbh->do("ALTER TABLE `aqorders` ADD COLUMN `claims_count` INT(11)  DEFAULT 0, ADD COLUMN `claimed_date` DATE  DEFAULT NULL AFTER `claims_count`");
4629     print "Upgrade to $DBversion done (Add claims_count and claimed_date fields in aqorders table)\n";
4630     SetVersion($DBversion);
4631 }
4632
4633 $DBversion = "3.07.00.010";
4634 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
4635     $dbh->do(
4636         q|CREATE TABLE `biblioimages` (
4637           `imagenumber` int(11) NOT NULL AUTO_INCREMENT,
4638           `biblionumber` int(11) NOT NULL,
4639           `mimetype` varchar(15) NOT NULL,
4640           `imagefile` mediumblob NOT NULL,
4641           `thumbnail` mediumblob NOT NULL,
4642           PRIMARY KEY (`imagenumber`),
4643           CONSTRAINT `bibliocoverimage_fk1` FOREIGN KEY (`biblionumber`) REFERENCES `biblio` (`biblionumber`) ON DELETE CASCADE ON UPDATE CASCADE
4644           ) ENGINE=InnoDB DEFAULT CHARSET=utf8|
4645     );
4646     $dbh->do(
4647         q|INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES ('OPACLocalCoverImages','0','Display local cover images on OPAC search and details pages.','1','YesNo')|
4648         );
4649     $dbh->do(
4650         q|INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES ('LocalCoverImages','0','Display local cover images on intranet search and details pages.','1','YesNo')|
4651         );
4652     $dbh->do(
4653         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')|
4654     );
4655     $dbh->do(
4656         q|INSERT INTO permissions (module_bit, code, description) VALUES (13, 'upload_local_cover_images', 'Upload local cover images')|
4657     );
4658     print "Upgrade to $DBversion done (Added support for local cover images)\n";
4659     SetVersion($DBversion);
4660 }
4661
4662 $DBversion = "3.07.00.011";
4663 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
4664     $dbh->do(<<ENDOFRENEWAL);
4665     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');
4666 ENDOFRENEWAL
4667     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";
4668     SetVersion($DBversion);
4669 }
4670
4671 $DBversion = "3.07.00.012";
4672 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
4673     $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')");
4674     print "Upgrade to $DBversion add 'AllowItemsOnHoldCheckout' syspref \n";
4675     SetVersion ($DBversion);
4676 }
4677
4678 $DBversion = "3.07.00.013";
4679 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
4680     $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');");
4681     print "Upgrade to $DBversion done (Bug 7345: Add system preference OpacExportOptions.)\n";
4682     SetVersion ($DBversion);
4683 }
4684
4685 $DBversion = "3.07.00.014";
4686 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
4687     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";
4688     SetVersion($DBversion);
4689 }
4690
4691 $DBversion = "3.07.00.015";
4692 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
4693     my $sth = $dbh->prepare(q|
4694         SELECT COUNT(*) FROM marc_subfield_structure where kohafield="biblioitems.editionstatement"
4695         |);
4696     $sth->execute;
4697     my $already_exists = $sth->fetchrow;
4698     if ( not $already_exists ) {
4699         my $field = C4::Context->preference("marcflavour") eq "UNIMARC" ? "205" : "250";
4700         my $subfield = "a";
4701         my $sth = $dbh->prepare( q|
4702             UPDATE marc_subfield_structure SET kohafield = "biblioitems.editionstatement"
4703             WHERE tagfield = ? AND tagsubfield = ?
4704         |);
4705         $sth->execute( $field, $subfield );
4706         print "Upgrade to $DBversion done (Added a mapping for biblioitems.editionstatement.)\n";
4707     } else {
4708         print "Upgrade to $DBversion done (Added a mapping for biblioitems.editionstatement (already exists, nothing to do).)\n";
4709     }
4710     SetVersion($DBversion);
4711 }
4712
4713 $DBversion = "3.07.00.016";
4714 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
4715     $dbh->do("ALTER TABLE items ADD KEY `itemcallnumber` (itemcallnumber)");
4716     print "Upgrade to $DBversion done (Added index on items.itemcallnumber)\n";
4717     SetVersion($DBversion);
4718 }
4719
4720 $DBversion = "3.07.00.017";
4721 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
4722     $dbh->do("INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('TransferWhenCancelAllWaitingHolds','0','Transfer items when cancelling all waiting holds',NULL,'YesNo')");
4723     print "Upgrade to $DBversion done (Add sysprefs to control transfer when cancel all waiting holds)\n";
4724     SetVersion ($DBversion);
4725 }
4726
4727 $DBversion = "3.07.00.018";
4728 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
4729     $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;");
4730     print "Upgrade to $DBversion done ( adding offline operations table )\n";
4731     SetVersion($DBversion);
4732 }
4733
4734 $DBversion = "3.07.00.019";
4735 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
4736     $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");
4737     $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");
4738     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";
4739     SetVersion($DBversion);
4740 }
4741
4742 $DBversion = "3.07.00.020";
4743 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
4744     $dbh->do("INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES('OPACpatronimages',0,'Enable patron images in the OPAC',NULL,'YesNo');");
4745     print "Upgrade to $DBversion done (Bug 3516: Add the option to show patron images in the OPAC.)\n";
4746     SetVersion($DBversion);
4747 }
4748
4749 $DBversion = "3.07.00.021";
4750 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
4751     $dbh->do(
4752     "INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES('LinkerModule','Default','Chooses which linker module to use (see documentation).','Default|FirstMatchLastMatch','Choice');"
4753     );
4754     $dbh->do(
4755     "INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES('LinkerOptions','','A pipe-separated list of options for the linker.','','free');"
4756     );
4757     $dbh->do(
4758     "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');"
4759     );
4760     $dbh->do(
4761     "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');"
4762     );
4763     $dbh->do(
4764     "INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES('AutoCreateAuthorities',0,'Automatically create authorities that do not exist when cataloging records.',NULL,'YesNo');"
4765     );
4766     $dbh->do(
4767     "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');"
4768     );
4769     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";
4770     SetVersion($DBversion);
4771 }
4772
4773 $DBversion = "3.07.00.022";
4774 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
4775     $dbh->do("DELETE FROM reviews WHERE biblionumber NOT IN (SELECT biblionumber from biblio)");
4776     $dbh->do("UPDATE reviews SET borrowernumber = NULL WHERE borrowernumber NOT IN (SELECT borrowernumber FROM borrowers)");
4777     $dbh->do("ALTER TABLE reviews ADD CONSTRAINT reviews_ibfk_2 FOREIGN KEY (`biblionumber`) REFERENCES `biblio` (`biblionumber`) ON DELETE CASCADE ON UPDATE CASCADE");
4778     $dbh->do("ALTER TABLE reviews ADD CONSTRAINT reviews_ibfk_1 FOREIGN KEY (borrowernumber) REFERENCES borrowers (borrowernumber ) ON UPDATE CASCADE ON DELETE SET NULL");
4779     print "Upgrade to $DBversion done (Bug 7493 - Add constraint linking OPAC comment biblionumber to biblio, OPAC comment borrowernumber to borrowers.)\n";
4780     SetVersion($DBversion);
4781 }
4782
4783 $DBversion = "3.07.00.023";
4784 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
4785     $dbh->do("ALTER TABLE `message_transports` DROP FOREIGN KEY `message_transports_ibfk_3`");
4786     $dbh->do("ALTER TABLE `letter` DROP PRIMARY KEY");
4787     $dbh->do("ALTER TABLE `letter` ADD `branchcode` varchar(10) default NULL AFTER `code`");
4788     $dbh->do("ALTER TABLE `letter` ADD PRIMARY KEY  (`module`,`code`, `branchcode`)");
4789     $dbh->do("ALTER TABLE `message_transports` ADD `branchcode` varchar(10) NOT NULL default ''");
4790     $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");
4791     $dbh->do("ALTER TABLE `letter` ADD `is_html` tinyint(1) default 0 AFTER `name`");
4792
4793     $dbh->do("INSERT INTO `letter` (module, code, name, title, content, is_html)
4794               VALUES ('circulation','ISSUESLIP','Issue Slip','Issue Slip', '<h3><<branches.branchname>></h3>
4795 Checked out to <<borrowers.title>> <<borrowers.firstname>> <<borrowers.initials>> <<borrowers.surname>> <br />
4796 (<<borrowers.cardnumber>>) <br />
4797
4798 <<today>><br />
4799
4800 <h4>Checked Out</h4>
4801 <checkedout>
4802 <p>
4803 <<biblio.title>> <br />
4804 Barcode: <<items.barcode>><br />
4805 Date due: <<issues.date_due>><br />
4806 </p>
4807 </checkedout>
4808
4809 <h4>Overdues</h4>
4810 <overdue>
4811 <p>
4812 <<biblio.title>> <br />
4813 Barcode: <<items.barcode>><br />
4814 Date due: <<issues.date_due>><br />
4815 </p>
4816 </overdue>
4817
4818 <hr>
4819
4820 <h4 style=\"text-align: center; font-style:italic;\">News</h4>
4821 <news>
4822 <div class=\"newsitem\">
4823 <h5 style=\"margin-bottom: 1px; margin-top: 1px\"><b><<opac_news.title>></b></h5>
4824 <p style=\"margin-bottom: 1px; margin-top: 1px\"><<opac_news.new>></p>
4825 <p class=\"newsfooter\" style=\"font-size: 8pt; font-style:italic; margin-bottom: 1px; margin-top: 1px\">Posted on <<opac_news.timestamp>></p>
4826 <hr />
4827 </div>
4828 </news>', 1)");
4829     $dbh->do("INSERT INTO `letter` (module, code, name, title, content, is_html)
4830               VALUES ('circulation','ISSUEQSLIP','Issue Quick Slip','Issue Quick Slip', '<h3><<branches.branchname>></h3>
4831 Checked out to <<borrowers.title>> <<borrowers.firstname>> <<borrowers.initials>> <<borrowers.surname>> <br />
4832 (<<borrowers.cardnumber>>) <br />
4833
4834 <<today>><br />
4835
4836 <h4>Checked Out Today</h4>
4837 <checkedout>
4838 <p>
4839 <<biblio.title>> <br />
4840 Barcode: <<items.barcode>><br />
4841 Date due: <<issues.date_due>><br />
4842 </p>
4843 </checkedout>', 1)");
4844     $dbh->do("INSERT INTO `letter` (module, code, name, title, content, is_html)
4845               VALUES ('circulation','RESERVESLIP','Reserve Slip','Reserve Slip', '<h5>Date: <<today>></h5>
4846
4847 <h3> Transfer to/Hold in <<branches.branchname>></h3>
4848
4849 <h3><<borrowers.surname>>, <<borrowers.firstname>></h3>
4850
4851 <ul>
4852     <li><<borrowers.cardnumber>></li>
4853     <li><<borrowers.phone>></li>
4854     <li> <<borrowers.address>><br />
4855          <<borrowers.address2>><br />
4856          <<borrowers.city >>  <<borrowers.zipcode>>
4857     </li>
4858     <li><<borrowers.email>></li>
4859 </ul>
4860 <br />
4861 <h3>ITEM ON HOLD</h3>
4862 <h4><<biblio.title>></h4>
4863 <h5><<biblio.author>></h5>
4864 <ul>
4865    <li><<items.barcode>></li>
4866    <li><<items.itemcallnumber>></li>
4867    <li><<reserves.waitingdate>></li>
4868 </ul>
4869 <p>Notes:
4870 <pre><<reserves.reservenotes>></pre>
4871 </p>', 1)");
4872     $dbh->do("INSERT INTO `letter` (module, code, name, title, content, is_html)
4873               VALUES ('circulation','TRANSFERSLIP','Transfer Slip','Transfer Slip', '<h5>Date: <<today>></h5>
4874 <h3>Transfer to <<branches.branchname>></h3>
4875
4876 <h3>ITEM</h3>
4877 <h4><<biblio.title>></h4>
4878 <h5><<biblio.author>></h5>
4879 <ul>
4880    <li><<items.barcode>></li>
4881    <li><<items.itemcallnumber>></li>
4882 </ul>', 1)");
4883
4884     $dbh->do("INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('NoticeCSS','','Notices CSS url.',NULL,'free')");
4885     $dbh->do("INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('SlipCSS','','Slips CSS url.',NULL,'free')");
4886
4887     $dbh->do("UPDATE `letter` SET content = replace(content, '<<title>>', '<<biblio.title>>') WHERE code = 'HOLDPLACED'");
4888
4889     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";
4890     SetVersion($DBversion);
4891 }
4892
4893 $DBversion = "3.07.00.024";
4894 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
4895     $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')");
4896     $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')");
4897     print "Upgrade to $DBversion done (Added system preference ExpireReservesMaxPickUpDelay, system preference ExpireReservesMaxPickUpDelayCharge, add reseves.charge_if_expired)\n";
4898 }
4899
4900 $DBversion = "3.07.00.025";
4901 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
4902     if (TableExists('bibliocoverimage')) {
4903         $dbh->do( q|DROP TABLE bibliocoverimage;| );
4904         $dbh->do(
4905             q|CREATE TABLE biblioimages (
4906               imagenumber int(11) NOT NULL AUTO_INCREMENT,
4907               biblionumber int(11) NOT NULL,
4908               mimetype varchar(15) NOT NULL,
4909               imagefile mediumblob NOT NULL,
4910               thumbnail mediumblob NOT NULL,
4911               PRIMARY KEY (imagenumber),
4912               CONSTRAINT bibliocoverimage_fk1 FOREIGN KEY (biblionumber) REFERENCES biblio (biblionumber) ON DELETE CASCADE ON UPDATE CASCADE
4913               ) ENGINE=InnoDB DEFAULT CHARSET=utf8;|
4914         );
4915     }
4916     print "Upgrade to $DBversion done (Correct table name for local cover images if needed. )\n";
4917     SetVersion($DBversion);
4918 }
4919
4920 $DBversion = "3.07.00.026";
4921 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
4922     $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');");
4923     print "Upgrade to $DBversion done (Add syspref CalendarFirstDayOfWeek used to select the first day of week to use in the calendar. )\n";
4924     SetVersion($DBversion);
4925 }
4926
4927 $DBversion = "3.07.00.027";
4928 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
4929     $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');});
4930     print "Upgrade to $DBversion done (Added system preference RoutingListNote for adding a general note to all routing lists.)\n";
4931     SetVersion($DBversion);
4932 }
4933
4934 $DBversion = "3.07.00.028";
4935 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
4936     $dbh->do(qq{
4937     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');
4938     });
4939     print "Upgrade to $DBversion done (Bug 6296 New System preference AllowPKIAuth)\n";
4940 }
4941
4942 $DBversion = "3.07.00.029";
4943 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
4944     my $installer = C4::Installer->new();
4945     my $full_path = C4::Context->config('intranetdir') . "/installer/data/$installer->{dbms}/atomicupdate/oai_sets.sql";
4946     my $error     = $installer->load_sql($full_path);
4947     warn $error if $error;
4948     print "Upgrade to $DBversion done (Atomic update for OAI-PMH sets management)\n";
4949     SetVersion($DBversion);
4950 }
4951
4952 $DBversion = "3.07.00.030";
4953 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
4954     $dbh->do("ALTER TABLE default_circ_rules ADD
4955             COLUMN `returnbranch` varchar(15) default NULL AFTER `holdallowed`");
4956     $dbh->do("ALTER TABLE branch_item_rules ADD
4957             COLUMN `returnbranch` varchar(15) default NULL AFTER `holdallowed`");
4958     $dbh->do("ALTER TABLE default_branch_circ_rules ADD
4959             COLUMN `returnbranch` varchar(15) default NULL AFTER `holdallowed`");
4960     $dbh->do("ALTER TABLE default_branch_item_rules ADD
4961             COLUMN `returnbranch` varchar(15) default NULL AFTER `holdallowed`");
4962     # set the default rule to the current value of HomeOrHoldingBranchReturn (default to 'homebranch' if need be)
4963     my $homeorholdingbranchreturn = C4::Context->prefernce('HomeOrHoldingBranchReturn') || 'homebranch';
4964     $dbh->do("UPDATE default_circ_rules SET returnbranch = '$homeorholdingbranchreturn'");
4965     print "Upgrade to $DBversion done (Atomic update for OAI-PMH sets management)\n";
4966     SetVersion($DBversion);
4967 }
4968
4969 $DBversion = "3.07.00.031";
4970 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
4971     $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')");
4972     print "Upgrade to $DBversion done (Add syspref to tell Koha if ICU indexing is in use for Zebra or not.)\n";
4973     SetVersion ($DBversion);
4974 }
4975
4976 $DBversion = "3.07.00.032";
4977 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
4978     $dbh->do("ALTER TABLE virtualshelves MODIFY COLUMN owner int"); #should have been int already (fk to borrowers)
4979     $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
4980     $dbh->do("DELETE FROM virtualshelves WHERE owner IS NULL and category=1"); #delete private lists without owner (cascades to shelfcontents)
4981     $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");
4982     $dbh->do("UPDATE virtualshelves SET allow_add=0, allow_delete_own=1, allow_delete_other=0 WHERE category=1");
4983     $dbh->do("UPDATE virtualshelves SET allow_add=0, allow_delete_own=1, allow_delete_other=0 WHERE category=2");
4984     $dbh->do("UPDATE virtualshelves SET allow_add=1, allow_delete_own=1, allow_delete_other=1 WHERE category=3");
4985     $dbh->do("UPDATE virtualshelves SET category=2 WHERE category=3");
4986
4987     $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");
4988     $dbh->do("UPDATE virtualshelfcontents co LEFT JOIN virtualshelves sh USING (shelfnumber) SET co.borrowernumber=sh.owner");
4989
4990     $dbh->do("CREATE TABLE virtualshelfshares
4991     (id int AUTO_INCREMENT PRIMARY KEY, shelfnumber int NOT NULL,
4992     borrowernumber int, invitekey varchar(10), sharedate datetime,
4993     CONSTRAINT `virtualshelfshares_ibfk_1` FOREIGN KEY (`shelfnumber`) REFERENCES `virtualshelves` (`shelfnumber`) ON DELETE CASCADE ON UPDATE CASCADE,
4994         CONSTRAINT `virtualshelfshares_ibfk_2` FOREIGN KEY (`borrowernumber`) REFERENCES `borrowers` (`borrowernumber`) ON DELETE SET NULL ON UPDATE SET NULL) ENGINE=InnoDB DEFAULT CHARSET=utf8");
4995
4996     $dbh->do("INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES('OpacAllowPublicListCreation',1,'If set, allows opac users to create public lists',NULL,'YesNo');");
4997     $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');");
4998
4999     print "Upgrade to $DBversion done (BZ7310: Improving list permissions)\n";
5000     SetVersion($DBversion);
5001 }
5002
5003 $DBversion = "3.07.00.033";
5004 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
5005     $dbh->do("ALTER TABLE branches ADD opac_info text;");
5006     print "Upgrade to $DBversion done add opac_info to branches \n";
5007     SetVersion($DBversion);
5008 }
5009
5010 $DBversion = "3.07.00.034";
5011 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
5012     $dbh->do("ALTER TABLE borrower_attribute_types ADD COLUMN category_code VARCHAR(10) NULL DEFAULT NULL AFTER `display_checkout`");
5013     $dbh->do("ALTER TABLE borrower_attribute_types ADD COLUMN class VARCHAR(255)  NOT NULL DEFAULT '' AFTER `category_code`");
5014     $dbh->do("ALTER TABLE borrower_attribute_types ADD CONSTRAINT category_code_fk FOREIGN KEY (category_code) REFERENCES categories(categorycode)");
5015     print "Upgrade to $DBversion done (New fields category_code and class in borrower_attribute_types table)\n";
5016     SetVersion($DBversion);
5017 }
5018
5019 $DBversion = "3.07.00.035";
5020 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
5021     $dbh->do("ALTER TABLE issues CHANGE date_due date_due datetime");
5022     $dbh->do("UPDATE issues SET date_due = CONCAT(SUBSTR(date_due,1,11),'23:59:00')");
5023     $dbh->do("ALTER TABLE issues CHANGE returndate returndate datetime");
5024     $dbh->do("ALTER TABLE issues CHANGE lastreneweddate lastreneweddate datetime");
5025     $dbh->do("ALTER TABLE issues CHANGE issuedate issuedate datetime");
5026     $dbh->do("ALTER TABLE old_issues CHANGE date_due date_due datetime");
5027     $dbh->do("ALTER TABLE old_issues CHANGE returndate returndate datetime");
5028     $dbh->do("ALTER TABLE old_issues CHANGE lastreneweddate lastreneweddate datetime");
5029     $dbh->do("ALTER TABLE old_issues CHANGE issuedate issuedate datetime");
5030     $dbh->do("UPDATE accountlines SET description = CONCAT(description,' 23:59') WHERE accounttype='F' OR accounttype='FU'"); #BUG-8253
5031     print "Upgrade to $DBversion done (Setting up issues and accountlines tables for hourly loans)\n";
5032     SetVersion($DBversion);
5033 }
5034
5035 $DBversion = "3.07.00.036";
5036 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
5037     $dbh->do(qq{
5038        ALTER TABLE z3950servers ADD timeout INT( 11 ) NOT NULL DEFAULT '0' AFTER syntax;
5039     });
5040     print "Upgrade to $DBversion done (New timeout field in z3950servers)\n";
5041 }
5042
5043 $DBversion = "3.07.00.037";
5044 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
5045     $dbh->do("
5046        ALTER TABLE  `marc_subfield_structure` ADD  `maxlength` INT( 4 ) NOT NULL DEFAULT  '9999';
5047        ");
5048        $dbh->do("
5049        UPDATE `marc_subfield_structure` SET maxlength=24 WHERE tagfield='000';
5050        ");
5051        $dbh->do("
5052        UPDATE marc_subfield_structure SET maxlength = IF ((SELECT value FROM systempreferences WHERE variable = 'marcflavour')='MARC21','40','9999') WHERE tagfield='008';
5053        ");
5054        $dbh->do("
5055        UPDATE marc_subfield_structure SET maxlength = IF ((SELECT value FROM systempreferences WHERE variable = 'marcflavour')='NORMARC','40','9999') WHERE tagfield='008';
5056        ");
5057        $dbh->do("
5058        UPDATE marc_subfield_structure SET maxlength = IF ((SELECT value FROM systempreferences WHERE variable = 'marcflavour')='UNIMARC','36','9999') WHERE tagfield='100';
5059        ");
5060     print "Upgrade to $DBversion done (Add new field maxlength to marc_subfield_structure)\n";
5061     SetVersion($DBversion);
5062 }
5063
5064 $DBversion = "3.07.00.038";
5065 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
5066     $dbh->do(qq{
5067         INSERT INTO systempreferences(variable,value,explanation,options,type)
5068         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')
5069     });
5070     print "Upgrade to $DBversion done (Added system preference 'UniqueItemFields')\n";
5071     SetVersion($DBversion);
5072 }
5073
5074 $DBversion = "3.07.00.039";
5075 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
5076     $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')} );
5077     $dbh->do( qq{CREATE TABLE IF NOT EXISTS social_data
5078       ( isbn VARCHAR(30),
5079         num_critics INT,
5080         num_critics_pro INT,
5081         num_quotations INT,
5082         num_videos INT,
5083         score_avg DECIMAL(5,2),
5084         num_scores INT,
5085         PRIMARY KEY  (isbn)
5086       ) ENGINE=InnoDB DEFAULT CHARSET=utf8
5087     } );
5088     $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')} );
5089     print "Upgrade to $DBversion done (added syspref and table for babeltheque (Babeltheque_url_js, babeltheque))\n";
5090     SetVersion($DBversion);
5091 }
5092
5093 $DBversion = "3.07.00.040";
5094 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
5095     $dbh->do( qq{INSERT IGNORE INTO systempreferences (variable,value,explanation,options,type) VALUES('SocialNetworks','0','Enable/Disable social networks links in opac detail','','YesNo')} );
5096     print "Upgrade to $DBversion done (added syspref SocialNetworks, to display facebook/ggl+ and other buttons)\n";
5097     SetVersion($DBversion);
5098 }
5099
5100
5101
5102 $DBversion = "3.07.00.041";
5103 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
5104     $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')");
5105     print "Upgrade to $DBversion done (Add system preference SubscriptionDuplicateDroppedInput)\n";
5106     SetVersion($DBversion);
5107 }
5108
5109 $DBversion = "3.07.00.042";
5110 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
5111     $dbh->do("ALTER TABLE reserves ADD suspend BOOLEAN NOT NULL DEFAULT 0");
5112     $dbh->do("ALTER TABLE old_reserves ADD suspend BOOLEAN NOT NULL DEFAULT 0");
5113
5114     $dbh->do("ALTER TABLE reserves ADD suspend_until DATETIME NULL DEFAULT NULL");
5115     $dbh->do("ALTER TABLE old_reserves ADD suspend_until DATETIME NULL DEFAULT NULL");
5116
5117     $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')");
5118
5119     print "Upgrade to $DBversion done (Add suspend fields to reserves table, add syspref AutoResumeSuspendedHolds)\n";
5120     SetVersion ($DBversion);
5121 }
5122
5123 $DBversion = "3.07.00.043";
5124 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
5125     my $countXSLTDetailsDisplay = 0;
5126     my $valueXSLTDetailsDisplay = "";
5127     my $valueXSLTResultsDisplay = "";
5128     my $valueOPACXSLTDetailsDisplay = "";
5129     my $valueOPACXSLTResultsDisplay = "";
5130     #the line below test if database comes from a BibLibre's branch
5131     $countXSLTDetailsDisplay = $dbh->do('SELECT 1 FROM systempreferences WHERE variable="IntranetXSLTDetailsDisplay"');
5132     if ($countXSLTDetailsDisplay > 0)
5133     {
5134         #the two lines below will only be used to update the databases from the BibLibre's branch. They will not affect the others
5135         $dbh->do(q|UPDATE systempreferences SET variable="XSLTDetailsDisplay" WHERE variable="IntranetXSLTDetailsDisplay"|);
5136         $dbh->do(q|UPDATE systempreferences SET variable="XSLTResultsDisplay" WHERE variable="IntranetXSLTResultsDisplay"|);
5137     }
5138     else
5139     {
5140         $valueXSLTDetailsDisplay = "default" if (C4::Context->preference("XSLTDetailsDisplay"));
5141         $valueXSLTResultsDisplay = "default" if (C4::Context->preference("XSLTResultsDisplay"));
5142         $valueOPACXSLTDetailsDisplay = "default" if (C4::Context->preference("OPACXSLTDetailsDisplay"));
5143         $valueOPACXSLTResultsDisplay = "default" if (C4::Context->preference("OPACXSLTResultsDisplay"));
5144         $dbh->do("UPDATE systempreferences SET type='Free', value=\"$valueXSLTDetailsDisplay\" WHERE variable='XSLTDetailsDisplay'");
5145         $dbh->do("UPDATE systempreferences SET type='Free', value=\"$valueXSLTResultsDisplay\" WHERE variable='XSLTResultsDisplay'");
5146         $dbh->do("UPDATE systempreferences SET type='Free', value=\"$valueOPACXSLTDetailsDisplay\" WHERE variable='OPACXSLTDetailsDisplay'");
5147         $dbh->do("UPDATE systempreferences SET type='Free', value=\"$valueOPACXSLTResultsDisplay\" WHERE variable='OPACXSLTResultsDisplay'");
5148     }
5149     print "Upgrade to $DBversion done (XSLT systempreference takes a path to file rather than YesNo)\n";
5150     SetVersion($DBversion);
5151 }
5152
5153 $DBversion = "3.07.00.044";
5154 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
5155     $dbh->do("ALTER TABLE aqbooksellers ADD deliverytime INT DEFAULT NULL");
5156     print "Upgrade to $DBversion done (Add deliverytime field in aqbooksellers table)";
5157     SetVersion($DBversion);
5158 }
5159
5160 $DBversion = "3.07.00.045";
5161 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
5162     $dbh->do("ALTER TABLE import_batches MODIFY COLUMN batch_type ENUM('batch','z3950','webservice') NOT NULL default 'batch'");
5163     print "Upgrade to $DBversion done (Add 'webservice' to batch_type enum)\n";
5164     SetVersion ($DBversion);
5165 }
5166
5167 $DBversion = "3.07.00.046";
5168 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
5169     $dbh->do("ALTER TABLE issuingrules ADD COLUMN lengthunit varchar(10) DEFAULT 'days' AFTER issuelength");
5170     print "Upgrade to $DBversion done (Setting up issues tables for hourly loans (lengthunit fix))\n";
5171     SetVersion($DBversion);
5172 }
5173
5174 $DBversion = "3.07.00.047";
5175 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
5176     $dbh->do("CREATE INDEX items_location ON items(location)");
5177     $dbh->do("CREATE INDEX items_ccode ON items(ccode)");
5178     print "Upgrade to $DBversion done (items_location and items_ccode indexes added for ShelfBrowser)\n";
5179     SetVersion($DBversion);
5180 }
5181
5182 $DBversion = "3.07.00.048";
5183 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
5184     $dbh->do(
5185         q | CREATE TABLE ratings (
5186   borrowernumber int(11) NOT NULL,
5187   biblionumber int(11) NOT NULL,
5188   rating_value tinyint(1) NOT NULL,
5189   timestamp timestamp NOT NULL default CURRENT_TIMESTAMP,
5190   PRIMARY KEY  (borrowernumber,biblionumber),
5191   CONSTRAINT ratings_ibfk_1 FOREIGN KEY (borrowernumber) REFERENCES borrowers (borrowernumber) ON DELETE CASCADE ON UPDATE CASCADE,
5192   CONSTRAINT ratings_ibfk_2 FOREIGN KEY (biblionumber) REFERENCES biblio (biblionumber) ON DELETE CASCADE ON UPDATE CASCADE
5193 ) ENGINE=InnoDB DEFAULT CHARSET=utf8 |
5194     );
5195
5196     $dbh->do(
5197 q /INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES ('OpacStarRatings','disable',NULL,'disable|all|details','Choice') /
5198     );
5199
5200     print
5201 "Upgrade to $DBversion done (Add 'ratings' table and 'OpacStarRatings' syspref)\n";
5202     SetVersion($DBversion);
5203 }
5204
5205 $DBversion = "3.07.00.049";
5206 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
5207     $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')");
5208     print "Upgrade to $DBversion done (Add system preference OpacBrowseResults ))\n";
5209     SetVersion($DBversion);
5210 }
5211
5212 $DBversion = "3.08.00.000";
5213 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
5214     print "Upgrade to $DBversion done\n";
5215     SetVersion($DBversion);
5216 }
5217
5218 $DBversion = "3.09.00.001";
5219 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
5220     $dbh->do("ALTER TABLE borrower_attribute_types MODIFY category_code VARCHAR( 1 ) NULL DEFAULT NULL");
5221     print "Upgrade to $DBversion done. (Bug 8002: Update patron attribute types table to allow NULL category_code)\n";
5222     SetVersion($DBversion);
5223 }
5224
5225 $DBversion = "3.09.00.002";
5226 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
5227     $dbh->do("ALTER TABLE saved_sql
5228         ADD (
5229             cache_expiry INT NOT NULL DEFAULT 300,
5230             public BOOLEAN NOT NULL DEFAULT FALSE
5231         );
5232     ");
5233     print "Upgrade to $DBversion done (Added cache_expiry and public fields in
5234 saved_reports table.)\n";
5235     SetVersion($DBversion);
5236 }
5237
5238 $DBversion = "3.09.00.003";
5239 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
5240     $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');");
5241     print "Upgrade to $DBversion done (Added SvcMaxReportRows syspref)\n";
5242     SetVersion($DBversion);
5243 }
5244
5245 $DBversion = "3.09.00.004";
5246 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
5247     $dbh->do("INSERT IGNORE INTO permissions (module_bit, code, description) VALUES('13', 'edit_patrons', 'Perform batch modifivation of patrons')");
5248     print "Upgrade to $DBversion done (Adds permissions flag for access to the patron modifications tool)\n";
5249     SetVersion($DBversion);
5250 }
5251
5252 $DBversion = "3.09.00.005";
5253 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
5254     unless (TableExists('quotes')) {
5255         $dbh->do( qq{
5256             CREATE TABLE `quotes` (
5257               `id` int(11) NOT NULL AUTO_INCREMENT,
5258               `source` text DEFAULT NULL,
5259               `text` mediumtext NOT NULL,
5260               `timestamp` datetime NOT NULL,
5261               PRIMARY KEY (`id`)
5262             ) ENGINE=InnoDB DEFAULT CHARSET=utf8
5263         });
5264     }
5265     $dbh->do( qq{
5266         INSERT IGNORE INTO permissions VALUES (13, "edit_quotes","Edit quotes for quote-of-the-day feature");
5267     });
5268     $dbh->do( qq{
5269         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');
5270     });
5271     print "Upgrade to $DBversion done (Adding Quote of the Day Option.)\n";
5272     SetVersion($DBversion);
5273 }
5274
5275 $DBversion = "3.09.00.006";
5276 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
5277     $dbh->do("UPDATE systempreferences SET
5278                 variable = 'OPACShowHoldQueueDetails',
5279                 value = CASE value WHEN '1' THEN 'priority' ELSE 'none' END,
5280                 options = 'none|priority|holds|holds_priority',
5281                 explanation = 'Show holds details in OPAC',
5282                 type = 'Choice'
5283               WHERE variable = 'OPACDisplayRequestPriority'");
5284     print "Upgrade to $DBversion done (Changed system preference OPACDisplayRequestPriority -> OPACShowHoldQueueDetails)\n";
5285     SetVersion($DBversion);
5286 }
5287
5288 $DBversion = "3.09.00.007";
5289 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
5290     unless(C4::Context->preference('ReservesControlBranch')){
5291         $dbh->do("INSERT INTO `systempreferences` (variable,value,options,explanation,type) VALUES ('ReservesControlBranch','PatronLibrary','ItemHomeLibrary|PatronLibrary','Branch checked for members reservations rights.','Choice')");
5292     }
5293     print "Upgrade to $DBversion done (Insert ReservesControlBranch systempreference into systempreferences table )\n";
5294     SetVersion($DBversion);
5295 }
5296
5297 $DBversion = "3.09.00.008";
5298 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
5299     $dbh->do("ALTER TABLE sessions ADD PRIMARY KEY (id);");
5300     $dbh->do("ALTER TABLE sessions DROP INDEX `id`;");
5301     print "Upgrade to $DBversion done (redefine the field id as PRIMARY KEY of sessions)\n";
5302     SetVersion($DBversion);
5303 }
5304
5305 $DBversion = "3.09.00.009";
5306 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
5307     $dbh->do("ALTER TABLE branches ADD PRIMARY KEY (branchcode);");
5308     $dbh->do("ALTER TABLE branches DROP INDEX branchcode;");
5309     print "Upgrade to $DBversion done (redefine the field branchcode as PRIMARY KEY of branches)\n";
5310     SetVersion ($DBversion);
5311 }
5312
5313 $DBversion = "3.09.00.010";
5314 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
5315     $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')");
5316     print "Upgrade to $DBversion done (Add system preference issuelostitem ))\n";
5317     SetVersion($DBversion);
5318 }
5319
5320 $DBversion = "3.09.00.011";
5321 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
5322     $dbh->do("ALTER TABLE `biblioitems` ADD `ean` VARCHAR( 13 ) NULL AFTER issn");
5323     $dbh->do("CREATE INDEX `ean` ON biblioitems (`ean`) ");
5324     $dbh->do("ALTER TABLE `deletedbiblioitems` ADD `ean` VARCHAR( 13 ) NULL AFTER issn");
5325     if (C4::Context->preference("marcflavour") eq 'UNIMARC') {
5326          $dbh->do("UPDATE marc_subfield_structure SET kohafield='biblioitems.ean' WHERE tagfield='073' and tagsubfield='a'");
5327     }
5328     print "Upgrade to $DBversion done (Adding ean in biblioitems and deletedbiblioitems)\n";
5329     print "If you have records with ean, please run misc/batchRebuildBiblioTables.pl to populate bibliotems.ean\n" if (C4::Context->preference("marcflavour") eq 'UNIMARC');
5330     SetVersion($DBversion);
5331 }
5332
5333 $DBversion = "3.09.00.012";
5334 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
5335     $dbh->do("INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES('SuspendHoldsIntranet', '1', NULL , 'Allow holds to be suspended from the intranet.', 'YesNo')");
5336     $dbh->do("INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES('SuspendHoldsOpac', '1', NULL , 'Allow holds to be suspended from the OPAC.', 'YesNo')");
5337     print "Upgrade to $DBversion done (Add system preference OpacBrowseResults ))\n";
5338     SetVersion($DBversion);
5339 }
5340
5341 $DBversion ="3.09.00.013";
5342 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
5343     $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');");
5344     print "Upgrade to $DBversion done (Add system preference DefaultLanguageField008))\n";
5345     SetVersion($DBversion);
5346 }
5347
5348 $DBversion ="3.09.00.014";
5349 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
5350     # add phone message transport type
5351     $dbh->do("INSERT INTO message_transport_types (message_transport_type) VALUES ('phone')");
5352     
5353     # adds HOLD_PHONE and PREDUE_PHONE letters (as placeholders)
5354     $dbh->do("INSERT INTO letter (module, code, name, title, content) VALUES
5355               ('reserves', 'HOLD_PHONE', 'Item Available for Pick-up (phone notice)', 'Item Available for Pick-up (phone notice)', 'Your item is available for pickup'),
5356               ('circulation', 'PREDUE_PHONE', 'Advance Notice of Item Due (phone notice)', 'Advance Notice of Item Due (phone notice)', 'Your item is due soon'),
5357               ('circulation', 'OVERDUE_PHONE', 'Overdue Notice (phone notice)', 'Overdue Notice (phone notice)', 'Your item is overdue')
5358               ");
5359     
5360     # add phone notifications to patron message preferences options
5361     $dbh->do("INSERT INTO message_transports
5362              (message_attribute_id, message_transport_type, is_digest, letter_module, letter_code) VALUES
5363              (4, 'phone', 0, 'reserves', 'HOLD_PHONE'),
5364              (2, 'phone', 0, 'circulation', 'PREDUE_PHONE')
5365              ");
5366     
5367     # add TalkingTechItivaPhoneNotification syspref
5368     $dbh->do("INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES('TalkingTechItivaPhoneNotification',0,'If ON, enables Talking Tech I-tiva phone notifications',NULL,'YesNo');");
5369     
5370     print "Upgrade done (Support for Talking Tech i-tiva phone notification system)\n";
5371     SetVersion($DBversion);
5372 }
5373
5374 $DBversion = "3.09.00.015";
5375 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
5376     $dbh->do(qq{
5377         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')
5378     });
5379     print "Upgrade to $DBversion done (Add System preference StatisticsFields)\n";
5380     SetVersion($DBversion);
5381 }
5382
5383 $DBversion = "3.09.00.016";
5384 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
5385     $dbh->do("INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('OPACShowBarcode','0','Show items barcode in holding tab','','YesNo')");
5386     print "Upgrade to $DBversion done (Add syspref OPACShowBarcode)\n";
5387     SetVersion ($DBversion);
5388 }
5389
5390 $DBversion = "3.09.00.017";
5391 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
5392     $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');");
5393     print "Upgrade to $DBversion done (Add customizable OpacNavRight region to the OPAC main page)\n";
5394     SetVersion ($DBversion);
5395 }
5396
5397 $DBversion = "3.09.00.018";
5398 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
5399     $dbh->do("DROP TABLE IF EXISTS aqbudgetborrowers");
5400     $dbh->do("
5401         CREATE TABLE aqbudgetborrowers (
5402           budget_id int(11) NOT NULL,
5403           borrowernumber int(11) NOT NULL,
5404           PRIMARY KEY (budget_id, borrowernumber),
5405           CONSTRAINT aqbudgetborrowers_ibfk_1 FOREIGN KEY (budget_id)
5406             REFERENCES aqbudgets (budget_id)
5407             ON DELETE CASCADE ON UPDATE CASCADE,
5408           CONSTRAINT aqbudgetborrowers_ibfk_2 FOREIGN KEY (borrowernumber)
5409             REFERENCES borrowers (borrowernumber)
5410             ON DELETE CASCADE ON UPDATE CASCADE
5411         ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
5412     ");
5413     $dbh->do("
5414         INSERT INTO permissions (module_bit, code, description)
5415         VALUES (11, 'budget_manage_all', 'Manage all budgets')
5416     ");
5417     print "Upgrade to $DBversion done (Add aqbudgetborrowers table)\n";
5418     SetVersion($DBversion);
5419 }
5420
5421 $DBversion = "3.09.00.019";
5422 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
5423     $dbh->do("INSERT INTO systempreferences (variable,value,options,explanation,type) VALUES ('OPACShowUnusedAuthorities','1','','Show authorities that are not being used in the OPAC.','YesNo')");
5424     print "Upgrade to $DBversion done (Add OPACShowUnusedAuthorities system preference)\n";
5425     SetVersion ($DBversion);
5426 }
5427
5428 $DBversion = "3.09.00.020";
5429 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
5430     $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')");
5431     $dbh->do("
5432 CREATE TABLE IF NOT EXISTS borrower_files (
5433   file_id int(11) NOT NULL AUTO_INCREMENT,
5434   borrowernumber int(11) NOT NULL,
5435   file_name varchar(255) NOT NULL,
5436   file_type varchar(255) NOT NULL,
5437   file_description varchar(255) DEFAULT NULL,
5438   file_content longblob NOT NULL,
5439   date_uploaded timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
5440   PRIMARY KEY (file_id),
5441   KEY borrowernumber (borrowernumber)
5442 ) ENGINE=InnoDB  DEFAULT CHARSET=utf8;
5443     ");
5444     $dbh->do("ALTER TABLE borrower_files ADD CONSTRAINT borrower_files_ibfk_1 FOREIGN KEY (borrowernumber) REFERENCES borrowers (borrowernumber) ON DELETE CASCADE ON UPDATE CASCADE");
5445
5446     print "Upgrade to $DBversion done (Added borrow_files table, EnableBorrowerFiles syspref)\n";
5447     SetVersion($DBversion);
5448 }
5449
5450 $DBversion = "3.09.00.021";
5451 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
5452     $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');");
5453     print "Upgrade to $DBversion done (Add syspref UpdateTotalIssuesOnCirc)\n";
5454     SetVersion($DBversion);
5455 }
5456
5457 $DBversion = "3.09.00.022";
5458 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
5459     $dbh->do("ALTER TABLE search_history MODIFY COLUMN query_cgi text NOT NULL");
5460     print "Upgrade to $DBversion done (Change search_history.query_cgi type to text. bug 5981)\n";
5461     SetVersion($DBversion);
5462 }
5463
5464 $DBversion = "3.09.00.023";
5465 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
5466     $dbh->do("INSERT IGNORE INTO systempreferences (variable,value,options,explanation,type) VALUES('SearchEngine','Zebra','Solr|Zebra','Search Engine','Choice')");
5467     print "Upgrade to $DBversion done (Add system preference SearchEngine )\n";
5468     SetVersion($DBversion);
5469 }
5470
5471 $DBversion ="3.09.00.024";
5472 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
5473     $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')");
5474     print "Upgrade to $DBversion done (Add system preference IntranetSlipPrinterJS))\n";
5475     SetVersion($DBversion);
5476 }
5477
5478 $DBversion = "3.09.00.025";
5479 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
5480     $dbh->do('START TRANSACTION');
5481     $dbh->do('CREATE TABLE tmp_reserves AS SELECT * FROM old_reserves LIMIT 0');
5482     $dbh->do('ALTER TABLE tmp_reserves ADD reserve_id INT( 11 ) NOT NULL AUTO_INCREMENT PRIMARY KEY FIRST');
5483     $dbh->do("
5484         INSERT INTO tmp_reserves (
5485           borrowernumber, reservedate, biblionumber,
5486           constrainttype, branchcode, notificationdate,
5487           reminderdate, cancellationdate, reservenotes,
5488           priority, found, timestamp, itemnumber,
5489           waitingdate, expirationdate, lowestPriority,
5490           suspend, suspend_until
5491         ) SELECT
5492           borrowernumber, reservedate, biblionumber,
5493           constrainttype, branchcode, notificationdate,
5494           reminderdate, cancellationdate, reservenotes,
5495           priority, found, timestamp, itemnumber,
5496           waitingdate, expirationdate, lowestPriority,
5497           suspend, suspend_until
5498         FROM old_reserves ORDER BY reservedate
5499     ");
5500     $dbh->do('SET @ai = ( SELECT MAX( reserve_id ) FROM tmp_reserves )');
5501     $dbh->do('TRUNCATE old_reserves');
5502     $dbh->do('ALTER TABLE old_reserves ADD reserve_id INT( 11 ) NOT NULL PRIMARY KEY FIRST');
5503     $dbh->do('INSERT INTO old_reserves SELECT * FROM tmp_reserves WHERE reserve_id <= @ai');
5504     $dbh->do("
5505         INSERT INTO tmp_reserves (
5506           borrowernumber, reservedate, biblionumber,
5507           constrainttype, branchcode, notificationdate,
5508           reminderdate, cancellationdate, reservenotes,
5509           priority, found, timestamp, itemnumber,
5510           waitingdate, expirationdate, lowestPriority,
5511           suspend, suspend_until
5512         ) SELECT
5513           borrowernumber, reservedate, biblionumber,
5514           constrainttype, branchcode, notificationdate,
5515           reminderdate, cancellationdate, reservenotes,
5516           priority, found, timestamp, itemnumber,
5517           waitingdate, expirationdate, lowestPriority,
5518           suspend, suspend_until
5519         FROM reserves ORDER BY reservedate
5520     ");
5521     $dbh->do('TRUNCATE reserves');
5522     $dbh->do('ALTER TABLE reserves ADD reserve_id INT( 11 ) NOT NULL AUTO_INCREMENT PRIMARY KEY FIRST');
5523     $dbh->do('INSERT INTO reserves SELECT * FROM tmp_reserves WHERE reserve_id > COALESCE(@ai, 0)');
5524     $dbh->do('DROP TABLE tmp_reserves');
5525     $dbh->do('COMMIT');
5526
5527     my $sth = $dbh->prepare("
5528         SELECT COUNT( * ) AS count
5529         FROM information_schema.COLUMNS
5530         WHERE COLUMN_NAME =  'reserve_id'
5531         AND (
5532           TABLE_NAME LIKE  'reserves'
5533           OR
5534           TABLE_NAME LIKE  'old_reserves'
5535         )
5536     ");
5537     $sth->execute();
5538     my $row = $sth->fetchrow_hashref();
5539     die("Failed to add reserve_id to reserves tables, please refresh the page to try again.") unless ( $row->{'count'} );
5540
5541     print "Upgrade to $DBversion done (add reserve_id to reserves & old_reserves tables)\n";
5542     SetVersion($DBversion);
5543 }
5544
5545 $DBversion = "3.09.00.026";
5546 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
5547     $dbh->do("INSERT INTO permissions (module_bit, code, description) VALUES
5548         ( 3, 'parameters_remaining_permissions', 'Remaining system parameters permissions'),
5549         ( 3, 'manage_circ_rules', 'manage circulation rules')");
5550     $dbh->do("INSERT INTO user_permissions (borrowernumber, module_bit, code)
5551         SELECT borrowernumber, 3, 'parameters_remaining_permissions'
5552         FROM borrowers WHERE flags & (1 << 3)");
5553     # Give new subpermissions to all users that have 'parameters' permission flag (bit 3) set
5554     # see userflags table
5555     $dbh->do("INSERT INTO user_permissions (borrowernumber, module_bit, code)
5556         SELECT borrowernumber, 3, 'manage_circ_rules'
5557         FROM borrowers WHERE flags & (1 << 3)");
5558     print "Upgrade to $DBversion done (Added parameters subpermissions)\n";
5559     SetVersion($DBversion);
5560 }
5561
5562 $DBversion = '3.09.00.027';
5563 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
5564     $dbh->do("ALTER TABLE issuingrules ADD overduefinescap decimal(28,6) DEFAULT NULL");
5565     my $maxfine = C4::Context->preference('MaxFine');
5566     if ($maxfine && $maxfine < 900) { # an arbitrary value that tells us it's not "some huge value"
5567       $dbh->do("UPDATE issuingrules SET overduefinescap=?",undef,$maxfine);
5568       $dbh->do("UPDATE systempreferences SET value = NULL WHERE variable = 'MaxFine'");
5569     }
5570     $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'");
5571     print "Upgrade to $DBversion done (Bug 7420 add overduefinescap to circulation matrix)\n";
5572     SetVersion ($DBversion);
5573 }
5574
5575 $DBversion = "3.09.00.028";
5576 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
5577     unless ( C4::Context->preference('marcflavour') eq 'UNIMARC' ) {
5578         my %referencetypes = (  '00' => 'PERSO_NAME',
5579                                 '10' => 'CORPO_NAME',
5580                                 '11' => 'MEETI_NAME',
5581                                 '30' => 'UNIF_TITLE',
5582                                 '48' => 'CHRON_TERM',
5583                                 '50' => 'TOPIC_TERM',
5584                                 '51' => 'GEOGR_NAME',
5585                                 '55' => 'GENRE/FORM'
5586                 );
5587         my $query = q{SELECT DISTINCT authtypecode, tagfield
5588                     FROM auth_subfield_structure
5589                     WHERE (tagfield BETWEEN '400' AND '455' OR
5590                     tagfield BETWEEN '500' and '555') AND tagsubfield='a' AND
5591                     frameworkcode = '' AND ROW(authtypecode, tagfield) NOT IN
5592                     (SELECT authtypecode, tagfield FROM auth_subfield_structure
5593                     WHERE tagsubfield ='9' )};
5594         $sth = $dbh->prepare($query);
5595         $sth->execute;
5596         my $sth2 = $dbh->prepare(q{INSERT INTO auth_subfield_structure
5597                 (authtypecode, tagfield, tagsubfield, liblibrarian, libopac,
5598                  repeatable, mandatory, tab, authorised_value, value_builder,
5599                  seealso, isurl, hidden, linkid, kohafield, frameworkcode)
5600                 VALUES (?, ?, '9', '9 (RLIN)', '9 (RLIN)', 0, 0, ?, NULL, NULL,
5601                     NULL, 0, 1, '', '', '')});
5602         my $sth3 = $dbh->prepare(q{UPDATE auth_subfield_structure SET
5603                                     frameworkcode = ? WHERE authtypecode = ? AND
5604                                     tagfield = ? AND tagsubfield = 'a'});
5605         while (my $row = $sth->fetchrow_arrayref()) {
5606             my ($authtypecode, $field) = @$row;
5607             $sth2->execute($authtypecode, $field, substr($field, 0, 1));
5608             my $authtypemarker = substr $field, 1, 2;
5609             if ($authtypemarker && $referencetypes{$authtypemarker}) {
5610                 $sth3->execute($referencetypes{$authtypemarker}, $authtypecode, $field);
5611             }
5612         }
5613     }
5614
5615     print "Upgrade to $DBversion done (Add thesaurus links for MARC21/NORMARC)\n";
5616     SetVersion($DBversion);
5617 }
5618
5619 $DBversion = "3.09.00.029"; # FIXME
5620 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
5621     $dbh->do("UPDATE systempreferences SET options=concat(options,'|EAN13') WHERE variable='itemBarcodeInputFilter' AND options NOT LIKE '%EAN13%'");
5622     print "Upgrade to $DBversion done (Add itemBarcodeInputFilter choice EAN13)\n";
5623
5624     $dbh->do("UPDATE systempreferences SET options = concat(options,'|EAN13'), explanation = concat(explanation,'; EAN13 - incremental') WHERE variable = 'autoBarcode' AND options NOT LIKE '%EAN13%'");
5625     print "Upgrade to $DBversion done ( Added EAN13 barcode autogeneration sequence )\n";
5626     SetVersion($DBversion);
5627 }
5628
5629 $DBversion ="3.09.00.030";
5630 if(C4::Context->preference("Version") < TransformToNum($DBversion) ) {
5631     my $query = "SELECT value FROM systempreferences WHERE variable='opacstylesheet'";
5632     my $remote= $dbh->selectrow_arrayref($query);
5633     $dbh->do("DELETE from systempreferences WHERE variable='opacstylesheet'");
5634     if($remote && $remote->[0]) {
5635         $query="UPDATE systempreferences SET value=? WHERE variable='opaclayoutstylesheet'";
5636         $dbh->do($query,undef,$remote->[0]);
5637         print "NOTE: The URL of your remote opac css file has been moved to preference opaclayoutstylesheet.\n";
5638     }
5639     print "Upgrade to $DBversion done (BZ 8263: Make OPAC stylesheet preferences more consistent)\n";
5640     SetVersion($DBversion);
5641 }
5642
5643 $DBversion = "3.09.00.031";
5644 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
5645     $dbh->do("DELETE FROM systempreferences WHERE variable='AmazonReviews'");
5646     $dbh->do("DELETE FROM systempreferences WHERE variable='AmazonSimilarItems'");
5647     $dbh->do("DELETE FROM systempreferences WHERE variable='AWSAccessKeyID'");
5648     $dbh->do("DELETE FROM systempreferences WHERE variable='AWSPrivateKey'");
5649     $dbh->do("DELETE FROM systempreferences WHERE variable='OPACAmazonReviews'");
5650     $dbh->do("DELETE FROM systempreferences WHERE variable='OPACAmazonSimilarItems'");
5651     $dbh->do("DELETE FROM systempreferences WHERE variable='AmazonEnabled'");
5652     $dbh->do("DELETE FROM systempreferences WHERE variable='OPACAmazonEnabled'");
5653     print "Upgrade to $DBversion done ('Remove preferences controlling broken Amazon features (Bug 8679')\n";
5654     SetVersion ($DBversion);
5655 }
5656
5657 $DBversion = "3.09.00.032";
5658 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
5659     $dbh->do("UPDATE systempreferences SET value = 'call_number' WHERE variable = 'defaultSortField' AND value = 'callnumber'");
5660     $dbh->do("UPDATE systempreferences SET value = 'call_number' WHERE variable = 'OPACdefaultSortField' AND value = 'callnumber'");
5661     print "Upgrade to $DBversion done (Bug 8657 - Default sort by call number does not work. Correcting system preference value.)\n";
5662     SetVersion ($DBversion);
5663 }
5664
5665
5666 $DBversion = '3.09.00.033';
5667 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
5668    $dbh->do("INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES('OpacSuppressionByIPRange','','Restrict the suppression to IP adresses outside of the IP range','','free');");
5669    print "Upgrade to $DBversion done (Add OpacSuppressionByIPRange syspref)\n";
5670    SetVersion ($DBversion);
5671 }
5672
5673 $DBversion ="3.09.00.034";
5674 if(C4::Context->preference("Version") < TransformToNum($DBversion) ) {
5675     $dbh->do("UPDATE auth_subfield_structure SET frameworkcode = 'PERSO_NAME' WHERE frameworkcode = 'PERSO_CODE'");
5676     $dbh->do("UPDATE auth_subfield_structure SET frameworkcode = 'CORPO_NAME' WHERE frameworkcode = 'ORGO_CODE'");
5677     print "Upgrade to $DBversion done (Bug 8207: correct typo in authority types)\n";
5678     SetVersion ($DBversion);
5679 }
5680
5681 $DBversion = "3.09.00.035";
5682 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
5683     $dbh->do("
5684     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');
5685     ");
5686     $dbh->do(
5687     "INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES ('SubfieldsToUseWhenPrefill','','Define a list of subfields to use when prefilling items (separated by space)','','Free');
5688     ");
5689     print "Upgrade to $DBversion done (Adding PrefillItem and SubfieldsToUseWhenPrefill sysprefs)\n";
5690     SetVersion ($DBversion);
5691 }
5692
5693 $DBversion = "3.09.00.036";
5694 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
5695     # biblioitems changes
5696     $dbh->do("ALTER TABLE biblioitems ADD COLUMN agerestriction VARCHAR(255) DEFAULT NULL AFTER cn_sort");
5697     $dbh->do("ALTER TABLE deletedbiblioitems ADD COLUMN agerestriction VARCHAR(255) DEFAULT NULL AFTER cn_sort");
5698     # preferences changes
5699     $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')");
5700     $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')");
5701
5702     print "Upgrade to $DBversion done (Add colum agerestriction to biblioitems and deletedbiblioitems, add system preferences AgeRestrictionMarker and AgeRestrictionOverride)\n";
5703    SetVersion ($DBversion);
5704 }
5705
5706 $DBversion = "3.09.00.037";
5707 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
5708     $dbh->do("INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('UseTransportCostMatrix',0,'Use Transport Cost Matrix when filling holds','','YesNo')");
5709
5710  $dbh->do("CREATE TABLE `transport_cost` (
5711               `frombranch` varchar(10) NOT NULL,
5712               `tobranch` varchar(10) NOT NULL,
5713               `cost` decimal(6,2) NOT NULL,
5714               `disable_transfer` tinyint(1) NOT NULL DEFAULT 0,
5715               CHECK ( `frombranch` <> `tobranch` ), -- a dud check, mysql does not support that
5716               PRIMARY KEY (`frombranch`, `tobranch`),
5717               CONSTRAINT `transport_cost_ibfk_1` FOREIGN KEY (`frombranch`) REFERENCES `branches` (`branchcode`) ON DELETE CASCADE ON UPDATE CASCADE,
5718               CONSTRAINT `transport_cost_ibfk_2` FOREIGN KEY (`tobranch`) REFERENCES `branches` (`branchcode`) ON DELETE CASCADE ON UPDATE CASCADE
5719           ) ENGINE=InnoDB DEFAULT CHARSET=utf8");
5720
5721     print "Upgrade to $DBversion done (creating `transport_cost` table; adding UseTransportCostMatrix systempref, in circulation)\n";
5722     SetVersion($DBversion);
5723 }
5724
5725 $DBversion ="3.09.00.038";
5726 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
5727     $dbh->do("ALTER TABLE borrower_attributes CHANGE  attribute  attribute VARCHAR( 255 ) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL");
5728     print "Upgrade to $DBversion done (Increase the maximum size of a borrower attribute value)\n";
5729     SetVersion($DBversion);
5730 }
5731
5732 $DBversion ="3.09.00.039";
5733 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
5734     $dbh->do("INSERT INTO systempreferences (variable,value,explanation,type) VALUES('DidYouMeanFromAuthorities','0','Suggest searches based on authority file.','YesNo');");
5735     print "Upgrade to $DBversion done (Add system preference DidYouMeanFromAuthorities)\n";
5736     SetVersion($DBversion);
5737 }
5738
5739 $DBversion = "3.09.00.040";
5740 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
5741     $dbh->do("INSERT INTO systempreferences (variable,value,options,explanation,type) VALUES ('IncludeSeeFromInSearches','0','','Include see-from references in searches.','YesNo');");
5742     print "Upgrade to $DBversion done (Add IncludeSeeFromInSearches system preference)\n";
5743     SetVersion ($DBversion);
5744 }
5745
5746 $DBversion = "3.09.00.041";
5747 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
5748     $dbh->do(qq{
5749         INSERT IGNORE INTO systempreferences (variable,value,explanation,options,type) VALUES('ExportRemoveFields','','List of fields for non export in circulation.pl (separated by a space)','','');
5750     });
5751     print "Upgrade to $DBversion done (Add system preference ExportRemoveFields)\n";
5752     SetVersion($DBversion);
5753 }
5754
5755 $DBversion = "3.09.00.042";
5756 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
5757     $dbh->do(qq{
5758         INSERT IGNORE INTO systempreferences (variable,value,explanation,options,type) VALUES('ExportWithCsvProfile','','Set a profile name for CSV export','','');
5759     });
5760     print "Upgrade to $DBversion done (Adds New System preference ExportWithCsvProfile)\n";
5761     SetVersion($DBversion)
5762 }
5763
5764 $DBversion = "3.09.00.043";
5765 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
5766     $dbh->do("
5767         ALTER TABLE aqorders
5768         ADD parent_ordernumber int(11) DEFAULT NULL
5769     ");
5770     $dbh->do("
5771         UPDATE aqorders
5772         SET parent_ordernumber = ordernumber;
5773     ");
5774     print "Upgrade to $DBversion done (Adding parent_ordernumber in aqorders)\n";
5775     SetVersion($DBversion);
5776 }
5777
5778 $DBversion = '3.09.00.044';
5779 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
5780     $dbh->do("ALTER TABLE statistics ADD COLUMN ccode VARCHAR ( 10 ) NULL AFTER associatedborrower");
5781     $dbh->do("UPDATE statistics SET statistics.ccode = ( SELECT items.ccode FROM items WHERE statistics.itemnumber = items.itemnumber )");
5782     $dbh->do("UPDATE statistics SET statistics.ccode = (
5783               SELECT deleteditems.ccode FROM deleteditems
5784                   WHERE statistics.itemnumber = deleteditems.itemnumber
5785               ) WHERE statistics.ccode IS NULL");
5786     print "Upgrade done ( Added Collection Code to Statistics table. )\n";
5787     SetVersion ($DBversion);
5788 }
5789
5790 $DBversion = "3.09.00.045";
5791 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
5792     $dbh->do("ALTER TABLE borrower_attribute_types MODIFY category_code VARCHAR( 10 ) NULL DEFAULT NULL");
5793     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.";
5794     SetVersion($DBversion);
5795 }
5796
5797 $DBversion = "3.09.00.046";
5798 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
5799     $dbh->do("ALTER TABLE `accountlines` ADD `accountlines_id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY FIRST;");
5800     print "Upgrade to $DBversion done (adding accountlines_id field in accountlines table)\n";
5801     SetVersion($DBversion);
5802 }
5803
5804 $DBversion = "3.09.00.047";
5805 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
5806     # to preserve default behaviour as best as possible, set this new preference differently depending on whether IndependantBranches is set or not
5807     my $prefvalue = 'anywhere';
5808     if (C4::Context->preference("IndependantBranches")) { $prefvalue = 'homeorholdingbranch';}
5809     $dbh->do("INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES('AllowReturnToBranch', '$prefvalue', 'Where an item may be returned', 'anywhere|homebranch|holdingbranch|homeorholdingbranch', 'Choice');");
5810
5811     print "Upgrade to $DBversion done: adding AllowReturnToBranch syspref (bug 6151)";
5812     SetVersion($DBversion);
5813 }
5814
5815 $DBversion = "3.09.00.048";
5816 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
5817     $dbh->do("ALTER TABLE authorised_values MODIFY lib varchar(200)");
5818     $dbh->do("ALTER TABLE authorised_values MODIFY lib_opac varchar(200)");
5819
5820     print "Upgrade to $DBversion done (Raise the length of Authorised Values descriptions)\n";
5821     SetVersion($DBversion);
5822 }
5823
5824 $DBversion ="3.09.00.049";
5825 if(C4::Context->preference("Version") < TransformToNum($DBversion) ) {
5826     $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');");
5827     $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');");
5828     $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');");
5829     $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');");
5830     print "Upgrade to $DBversion done (Add OPACMobileUserCSS, OpacMainUserBlockMobile, OpacShowLibrariesPulldownMobile and OpacShowFiltersPulldownMobile sysprefs)\n";
5831     SetVersion($DBversion);
5832 }
5833
5834 $DBversion = "3.09.00.050";
5835 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
5836     $dbh->do("ALTER TABLE authorised_values MODIFY category varchar(16) NOT NULL DEFAULT '';");
5837     $dbh->do("INSERT INTO authorised_values (category, authorised_value, lib) VALUES
5838               ('REPORT_GROUP', 'CIRC', 'Circulation'),
5839               ('REPORT_GROUP', 'CAT', 'Catalog'),
5840               ('REPORT_GROUP', 'PAT', 'Patrons'),
5841               ('REPORT_GROUP', 'ACQ', 'Acquisitions'),
5842               ('REPORT_GROUP', 'ACC', 'Accounts');");
5843
5844     $dbh->do("ALTER TABLE reports_dictionary ADD report_area varchar(6) DEFAULT NULL;");
5845     $dbh->do("UPDATE reports_dictionary SET report_area = CASE area
5846                   WHEN 1 THEN 'CIRC'
5847                   WHEN 2 THEN 'CAT'
5848                   WHEN 3 THEN 'PAT'
5849                   WHEN 4 THEN 'ACQ'
5850                   WHEN 5 THEN 'ACC'
5851                   END;");
5852     $dbh->do("ALTER TABLE reports_dictionary DROP area;");
5853     $dbh->do("ALTER TABLE reports_dictionary ADD KEY dictionary_area_idx (report_area);");
5854
5855     $dbh->do("ALTER TABLE saved_sql ADD report_area varchar(6) DEFAULT NULL;");
5856     $dbh->do("ALTER TABLE saved_sql ADD report_group varchar(80) DEFAULT NULL;");
5857     $dbh->do("ALTER TABLE saved_sql ADD report_subgroup varchar(80) DEFAULT NULL;");
5858     $dbh->do("ALTER TABLE saved_sql ADD KEY sql_area_group_idx (report_group, report_subgroup);");
5859
5860     print "Upgrade to $DBversion done saved_sql new fields report_group and report_area; authorised_values.category 16 char \n";
5861     SetVersion($DBversion);
5862 }
5863
5864 $DBversion = "3.09.00.051";
5865 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
5866     $dbh->do("
5867         CREATE TABLE aqinvoices (
5868           invoiceid int(11) NOT NULL AUTO_INCREMENT,
5869           invoicenumber mediumtext NOT NULL,
5870           booksellerid int(11) NOT NULL,
5871           shipmentdate date default NULL,
5872           billingdate date default NULL,
5873           closedate date default NULL,
5874           shipmentcost decimal(28,6) default NULL,
5875           shipmentcost_budgetid int(11) default NULL,
5876           PRIMARY KEY (invoiceid),
5877           CONSTRAINT aqinvoices_fk_aqbooksellerid FOREIGN KEY (booksellerid) REFERENCES aqbooksellers (id) ON DELETE CASCADE ON UPDATE CASCADE,
5878           CONSTRAINT aqinvoices_fk_shipmentcost_budgetid FOREIGN KEY (shipmentcost_budgetid) REFERENCES aqbudgets (budget_id) ON DELETE SET NULL ON UPDATE CASCADE
5879         ) ENGINE=InnoDB DEFAULT CHARSET=utf8
5880     ");
5881
5882     # Fill this new table with existing invoices
5883     my $sth = $dbh->prepare("
5884         SELECT aqorders.booksellerinvoicenumber AS invoicenumber, aqbasket.booksellerid, aqorders.datereceived
5885         FROM aqorders
5886           LEFT JOIN aqbasket ON aqorders.basketno = aqbasket.basketno
5887         WHERE aqorders.booksellerinvoicenumber IS NOT NULL
5888           AND aqorders.booksellerinvoicenumber != ''
5889         GROUP BY aqorders.booksellerinvoicenumber
5890     ");
5891     $sth->execute;
5892     my $results = $sth->fetchall_arrayref({});
5893     $sth = $dbh->prepare("
5894         INSERT INTO aqinvoices (invoicenumber, booksellerid, shipmentdate) VALUES (?,?,?)
5895     ");
5896     foreach(@$results) {
5897         $sth->execute($_->{invoicenumber}, $_->{booksellerid}, $_->{datereceived});
5898     }
5899
5900     # Add the column in aqorders, fill it with correct value
5901     # and then drop booksellerinvoicenumber column
5902     $dbh->do("
5903         ALTER TABLE aqorders
5904         ADD COLUMN invoiceid int(11) default NULL AFTER booksellerinvoicenumber,
5905         ADD CONSTRAINT aqorders_ibfk_3 FOREIGN KEY (invoiceid) REFERENCES aqinvoices (invoiceid) ON DELETE SET NULL ON UPDATE CASCADE
5906     ");
5907
5908     $dbh->do("
5909         UPDATE aqorders, aqinvoices
5910         SET aqorders.invoiceid = aqinvoices.invoiceid
5911         WHERE aqorders.booksellerinvoicenumber = aqinvoices.invoicenumber
5912     ");
5913
5914     $dbh->do("
5915         ALTER TABLE aqorders
5916         DROP COLUMN booksellerinvoicenumber
5917     ");
5918
5919     print "Upgrade to $DBversion done (Add aqinvoices table) \n";
5920     SetVersion ($DBversion);
5921 }
5922
5923 $DBversion = "3.09.00.052";
5924 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
5925     $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');");
5926     $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');");
5927     $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');");
5928     print "Upgrade to $DBversion done (Add systempreferences to decrease loan length on high demand items decreaseLoanHighHolds, decreaseLoanHighHoldsValue and decreaseLoanHighHoldsDuration) \n";
5929     SetVersion ($DBversion);
5930 }
5931
5932 $DBversion = "3.09.00.053";
5933 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
5934     $dbh->do(
5935     q|CREATE TABLE `import_auths` (
5936         import_record_id int(11) NOT NULL,
5937         matched_authid int(11) default NULL,
5938         control_number varchar(25) default NULL,
5939         authorized_heading varchar(128) default NULL,
5940         original_source varchar(25) default NULL,
5941         CONSTRAINT import_auths_ibfk_1 FOREIGN KEY (import_record_id)
5942         REFERENCES import_records (import_record_id) ON DELETE CASCADE ON UPDATE CASCADE,
5943         KEY matched_authid (matched_authid)
5944         ) ENGINE=InnoDB DEFAULT CHARSET=utf8;|
5945     );
5946     $dbh->do("ALTER TABLE import_batches
5947                 CHANGE COLUMN num_biblios num_records int(11) NOT NULL default 0,
5948                 ADD COLUMN record_type enum('biblio', 'auth', 'holdings') NOT NULL default 'biblio'");
5949     $dbh->do("UPDATE import_batches SET record_type='auth' WHERE import_batch_id IN
5950                 (SELECT import_batch_id FROM import_records WHERE record_type='auth')");
5951     
5952     print "Upgrade to $DBversion done (Added support for staging authorities)\n";
5953     SetVersion ($DBversion);
5954 }
5955
5956 $DBversion = "3.09.00.054";
5957 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
5958     $dbh->do("ALTER TABLE aqorders CHANGE COLUMN gst gstrate DECIMAL(6,4)  DEFAULT NULL");
5959     print "Upgrade to $DBversion done (Change column name in aqorders gst --> gstrate)\n";
5960     SetVersion($DBversion);
5961 }
5962
5963 $DBversion = "3.09.00.055";
5964 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
5965     $dbh->do("ALTER TABLE aqorders ADD discount float(6,4) DEFAULT NULL AFTER gstrate");
5966     print "Upgrade to $DBversion done (Add discount field in aqorders table)\n";
5967     SetVersion($DBversion);
5968 }
5969
5970 $DBversion ="3.09.00.056";
5971 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
5972     $dbh->do("INSERT IGNORE INTO systempreferences (variable,value,explanation,options,type) VALUES('AuthDisplayHierarchy','0','Display authority hierarchies','','YesNo')");
5973     print "Upgrade to $DBversion done (Add system preference AuthDisplayHierarchy)\n";
5974     SetVersion($DBversion);
5975 }
5976
5977 $DBversion = "3.09.00.057";
5978 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
5979     $dbh->do("ALTER TABLE aqbasket ADD deliveryplace VARCHAR(10) default NULL AFTER basketgroupid;");
5980     $dbh->do("ALTER TABLE aqbasket ADD billingplace VARCHAR(10) default NULL AFTER deliveryplace;");
5981     print "Upgrade to $DBversion done (Bug 5356: Added billingplace, deliveryplace to the aqbasket table)\n";
5982     SetVersion($DBversion);
5983 }
5984
5985 $DBversion ="3.09.00.058";
5986 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
5987     $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');");
5988     $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');");
5989     print "Upgrade to $DBversion done (Add Did You Mean? configuration)\n";
5990     SetVersion($DBversion);
5991 }
5992
5993 $DBversion ="3.09.00.059";
5994 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
5995     $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');");
5996     print "Upgrade to $DBversion done (Add system preference BlockReturnOfWithdrawnItems)\n";
5997     SetVersion($DBversion);
5998 }
5999
6000 $DBversion = "3.09.00.060";
6001 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
6002     $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')");
6003     print "Upgrade to $DBversion done (Added HoldsToPullStartDate syspref)\n";
6004     SetVersion($DBversion);
6005 }
6006
6007 $DBversion = "3.09.00.061";
6008 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
6009     $dbh->do("UPDATE systempreferences set value=0 WHERE variable='OPACItemsResultsDisplay' AND value='statuses'");
6010     $dbh->do("UPDATE systempreferences set value=1 WHERE variable='OPACItemsResultsDisplay' AND value='itemdetails'");
6011     $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'");
6012     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";
6013     SetVersion ($DBversion);
6014 }
6015
6016 $DBversion = "3.09.00.062";
6017 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
6018    $dbh->do("UPDATE systempreferences SET value=0 WHERE variable='NoZebra'");
6019    $dbh->do("UPDATE systempreferences SET value=0 WHERE variable='QueryRemoveStopwords'");
6020    print "Upgrade to $DBversion done (Disable obsolete NoZebra and QueryRemoveStopwords sysprefs)\n";
6021    SetVersion ($DBversion);
6022 }
6023
6024 $DBversion = "3.09.00.063";
6025 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
6026     my $gst_booksellers = $dbh->selectcol_arrayref("SELECT DISTINCT(gstrate) FROM aqbooksellers");
6027     my $gist_syspref = C4::Context->preference("gist");
6028     # remove the undef values and construct and array with the syspref and the supplier values
6029     my @gstrates = map { defined $_ ? $_ : () } @$gst_booksellers;
6030     push @gstrates, split ('\|', $gist_syspref);
6031     # we want to compare integer (or float)
6032     $_ = $_ + 0 for @gstrates;
6033     use List::MoreUtils qw/uniq/;
6034     # remove duplicate values
6035     @gstrates = uniq sort @gstrates;
6036     my $new_syspref_value = join '|', @gstrates;
6037     # update the syspref with the new values
6038     my $sth = $dbh->prepare("UPDATE systempreferences set value=? WHERE variable='gist'");
6039     $sth->execute( $new_syspref_value );
6040
6041     print "Upgrade to $DBversion done (Bug 8832, Set the syspref gist with the existing values)\n";
6042     SetVersion ($DBversion);
6043 }
6044
6045 $DBversion = "3.09.00.064";
6046 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
6047    $dbh->do('ALTER TABLE items ADD coded_location_qualifier varchar(10) default NULL AFTER itemcallnumber');
6048    print "Upgrade to $DBversion done (Bug 6428: Added coded_location_qualifier to the items table)\n";
6049    SetVersion ($DBversion);
6050 }
6051
6052 $DBversion = "3.09.00.065";
6053 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
6054    $dbh->do('ALTER TABLE deleteditems ADD coded_location_qualifier varchar(10) default NULL AFTER itemcallnumber');
6055    print "Upgrade to $DBversion done (Bug 6428: Added coded_location_qualifier to the deleteditems table)\n";
6056    SetVersion ($DBversion);
6057 }
6058
6059 $DBversion = "3.09.00.066";
6060 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
6061    $dbh->do("DELETE FROM systempreferences WHERE variable='DidYouMeanFromAuthorities'");
6062    print "Upgrade to $DBversion done (Bug 9107: remove DidYouMeanFromAuthorities syspref)\n";
6063    SetVersion ($DBversion);
6064 }
6065
6066 $DBversion = "3.09.00.067";
6067 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
6068    $dbh->do("ALTER TABLE statistics CHANGE COLUMN ccode ccode varchar(10) NULL");
6069    print "Upgrade to $DBversion done (Bug 9064: statistics.ccode potentially wrongly defined)\n";
6070    SetVersion ($DBversion);
6071 }
6072
6073 $DBversion = "3.10.00.00";
6074 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
6075    print "Upgrade to $DBversion done (release tag)\n";
6076    SetVersion ($DBversion);
6077 }
6078
6079 $DBversion = "3.11.00.001";
6080 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
6081     $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')");
6082     print "Upgrade to $DBversion done (Bug 2832 - Add alphabet syspref)\n";
6083 }
6084
6085 $DBversion = "3.11.00.002";
6086 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
6087     $dbh->do(q{
6088         DELETE from aqorders_items where ordernumber NOT IN (SELECT ordernumber FROM aqorders);
6089     });
6090     $dbh->do(q{
6091         ALTER TABLE aqorders_items
6092         ADD CONSTRAINT aqorders_items_ibfk_1 FOREIGN KEY (ordernumber) REFERENCES aqorders (ordernumber)
6093         ON DELETE CASCADE ON UPDATE CASCADE;
6094     });
6095     print "Upgrade to $DBversion done (Bug 9030: Add constraint on aqorders_items.ordernumber)\n";
6096     SetVersion ($DBversion);
6097 }
6098
6099 $DBversion = "3.11.00.003";
6100 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
6101     $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')");
6102     print "Upgrade to $DBversion done (Bug 7189: Add system preference RefundLostItemFeeOnReturn)\n";
6103     SetVersion($DBversion);
6104 }
6105
6106 $DBversion = "3.11.00.004";
6107 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
6108     $dbh->do(qq{
6109         ALTER TABLE subscription ADD COLUMN closed INT(1) NOT NULL DEFAULT 0 AFTER enddate;
6110     });
6111
6112     print "Upgrade to $DBversion done (Bug 8782: Add field subscription.closed)\n";
6113     SetVersion($DBversion);
6114 }
6115
6116 $DBversion = "3.11.00.005";
6117 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
6118     $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;});
6119
6120     $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;});
6121
6122     $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;});
6123
6124     print "Upgrade to $DBversion done (Bug 7919: Display of values depending on the connexion library)\n";
6125     SetVersion($DBversion);
6126 }
6127
6128 $DBversion = "3.11.00.006";
6129 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
6130     $dbh->do(q{
6131         UPDATE virtualshelves SET sortfield="copyrightdate" where sortfield="year";
6132     });
6133     print "Upgrade to $DBversion done (Bug 9167: Update the virtualshelves.sortfield column with 'copyrightdate' if needed)\n";
6134     SetVersion($DBversion);
6135 }
6136
6137 $DBversion = "3.11.00.007";
6138 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
6139     $dbh->do("INSERT INTO language_descriptions (subtag, type, lang, description) VALUES( 'ar', 'language', 'de', 'Arabisch')");
6140     $dbh->do("INSERT INTO language_descriptions (subtag, type, lang, description) VALUES( 'hy', 'language', 'de', 'Armenisch')");
6141     $dbh->do("INSERT INTO language_descriptions (subtag, type, lang, description) VALUES( 'bg', 'language', 'de', 'Bulgarisch')");
6142     $dbh->do("INSERT INTO language_descriptions (subtag, type, lang, description) VALUES( 'zh', 'language', 'de', 'Chinesisch')");
6143     $dbh->do("INSERT INTO language_descriptions (subtag, type, lang, description) VALUES( 'cs', 'language', 'de', 'Tschechisch')");
6144     $dbh->do("INSERT INTO language_descriptions (subtag, type, lang, description) VALUES( 'da', 'language', 'de', 'Dänisch')");
6145     $dbh->do("INSERT INTO language_descriptions (subtag, type, lang, description) VALUES( 'nl', 'language', 'de', 'Niederländisch')");
6146     $dbh->do("INSERT INTO language_descriptions (subtag, type, lang, description) VALUES( 'en', 'language', 'de', 'Englisch')");
6147     $dbh->do("INSERT INTO language_descriptions (subtag, type, lang, description) VALUES( 'fi', 'language', 'de', 'Finnisch')");
6148     $dbh->do("INSERT INTO language_descriptions (subtag, type, lang, description) VALUES( 'fr', 'language', 'de', 'Französisch')");
6149     $dbh->do("INSERT INTO language_descriptions (subtag, type, lang, description) VALUES( 'lo', 'language', 'fr', 'Laotien')");
6150     $dbh->do("INSERT INTO language_descriptions (subtag, type, lang, description) VALUES( 'lo', 'language', 'de', 'Laotisch')");
6151     $dbh->do("INSERT INTO language_descriptions (subtag, type, lang, description) VALUES( 'el', 'language', 'de', 'Griechisch (Nach 1453)')");
6152     $dbh->do("INSERT INTO language_descriptions (subtag, type, lang, description) VALUES( 'he', 'language', 'de', 'Hebräisch')");
6153     $dbh->do("INSERT INTO language_descriptions (subtag, type, lang, description) VALUES( 'hi', 'language', 'de', 'Hindi')");
6154     $dbh->do("INSERT INTO language_descriptions (subtag, type, lang, description) VALUES( 'hu', 'language', 'de', 'Ungarisch')");
6155     $dbh->do("INSERT INTO language_descriptions (subtag, type, lang, description) VALUES( 'id', 'language', 'de', 'Indonesisch')");
6156     $dbh->do("INSERT INTO language_descriptions (subtag, type, lang, description) VALUES( 'it', 'language', 'de', 'Italienisch')");
6157     $dbh->do("INSERT INTO language_descriptions (subtag, type, lang, description) VALUES( 'ja', 'language', 'de', 'Japanisch')");
6158     $dbh->do("INSERT INTO language_descriptions (subtag, type, lang, description) VALUES( 'ko', 'language', 'de', 'Koreanisch')");
6159     $dbh->do("INSERT INTO language_descriptions (subtag, type, lang, description) VALUES( 'la', 'language', 'de', 'Latein')");
6160     $dbh->do("INSERT INTO language_descriptions (subtag, type, lang, description) VALUES( 'gl', 'language', 'fr', 'Galicien')");
6161     $dbh->do("INSERT INTO language_descriptions (subtag, type, lang, description) VALUES( 'gl', 'language', 'de', 'Galizisch')");
6162     $dbh->do("INSERT INTO language_descriptions (subtag, type, lang, description) VALUES( 'nb', 'language', 'de', 'Norwegisch bokm&#229;l')");
6163     $dbh->do("INSERT INTO language_descriptions (subtag, type, lang, description) VALUES( 'nn', 'language', 'de', 'Norwegisch nynorsk')");
6164     $dbh->do("INSERT INTO language_descriptions (subtag, type, lang, description) VALUES( 'fa', 'language', 'de', 'Persisch')");
6165     $dbh->do("INSERT INTO language_descriptions (subtag, type, lang, description) VALUES( 'pl', 'language', 'de', 'Polnisch')");
6166     $dbh->do("INSERT INTO language_descriptions (subtag, type, lang, description) VALUES( 'pt', 'language', 'de', 'Portugiesisch')");
6167     $dbh->do("INSERT INTO language_descriptions (subtag, type, lang, description) VALUES( 'ro', 'language', 'de', 'Rumänisch')");
6168     $dbh->do("INSERT INTO language_descriptions (subtag, type, lang, description) VALUES( 'ru', 'language', 'de', 'Russisch')");
6169     $dbh->do("INSERT INTO language_descriptions (subtag, type, lang, description) VALUES( 'sr', 'language', 'fr', 'Serbe')");
6170     $dbh->do("INSERT INTO language_descriptions (subtag, type, lang, description) VALUES( 'sr', 'language', 'de', 'Serbisch')");
6171     $dbh->do("INSERT INTO language_descriptions (subtag, type, lang, description) VALUES( 'es', 'language', 'de', 'Spanisch')");
6172     $dbh->do("INSERT INTO language_descriptions (subtag, type, lang, description) VALUES( 'sv', 'language', 'de', 'Schwedisch')");
6173     $dbh->do("INSERT INTO language_descriptions (subtag, type, lang, description) VALUES( 'tet', 'language', 'fr', 'Tétoum')");
6174     $dbh->do("INSERT INTO language_descriptions (subtag, type, lang, description) VALUES( 'tet', 'language', 'de', 'Tetum')");
6175     $dbh->do("INSERT INTO language_descriptions (subtag, type, lang, description) VALUES( 'th', 'language', 'de', 'Thailändisch')");
6176     $dbh->do("INSERT INTO language_descriptions (subtag, type, lang, description) VALUES( 'tr', 'language', 'de', 'Türkisch')");
6177     $dbh->do("INSERT INTO language_descriptions (subtag, type, lang, description) VALUES( 'uk', 'language', 'de', 'Ukrainisch')");
6178     $dbh->do("INSERT INTO language_descriptions (subtag, type, lang, description) VALUES( 'ur', 'language', 'fr', 'Ourdou')");
6179     $dbh->do("INSERT INTO language_descriptions (subtag, type, lang, description) VALUES( 'ur', 'language', 'de', 'Urdu')");
6180     print "Upgrade to $DBversion done (Bug 9056: add German and a couple of French translations to language_descriptions)\n";
6181     SetVersion ($DBversion);
6182 }
6183
6184 $DBversion = "3.11.00.008";
6185 if (CheckVersion($DBversion)) {
6186     $dbh->do("
6187         CREATE TABLE IF NOT EXISTS `borrower_modifications` (
6188           `timestamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
6189           `verification_token` varchar(255) NOT NULL DEFAULT '',
6190           `borrowernumber` int(11) NOT NULL DEFAULT '0',
6191           `cardnumber` varchar(16) DEFAULT NULL,
6192           `surname` mediumtext,
6193           `firstname` text,
6194           `title` mediumtext,
6195           `othernames` mediumtext,
6196           `initials` text,
6197           `streetnumber` varchar(10) DEFAULT NULL,
6198           `streettype` varchar(50) DEFAULT NULL,
6199           `address` mediumtext,
6200           `address2` text,
6201           `city` mediumtext,
6202           `state` text,
6203           `zipcode` varchar(25) DEFAULT NULL,
6204           `country` text,
6205           `email` mediumtext,
6206           `phone` text,
6207           `mobile` varchar(50) DEFAULT NULL,
6208           `fax` mediumtext,
6209           `emailpro` text,
6210           `phonepro` text,
6211           `B_streetnumber` varchar(10) DEFAULT NULL,
6212           `B_streettype` varchar(50) DEFAULT NULL,
6213           `B_address` varchar(100) DEFAULT NULL,
6214           `B_address2` text,
6215           `B_city` mediumtext,
6216           `B_state` text,
6217           `B_zipcode` varchar(25) DEFAULT NULL,
6218           `B_country` text,
6219           `B_email` text,
6220           `B_phone` mediumtext,
6221           `dateofbirth` date DEFAULT NULL,
6222           `branchcode` varchar(10) DEFAULT NULL,
6223           `categorycode` varchar(10) DEFAULT NULL,
6224           `dateenrolled` date DEFAULT NULL,
6225           `dateexpiry` date DEFAULT NULL,
6226           `gonenoaddress` tinyint(1) DEFAULT NULL,
6227           `lost` tinyint(1) DEFAULT NULL,
6228           `debarred` date DEFAULT NULL,
6229           `debarredcomment` varchar(255) DEFAULT NULL,
6230           `contactname` mediumtext,
6231           `contactfirstname` text,
6232           `contacttitle` text,
6233           `guarantorid` int(11) DEFAULT NULL,
6234           `borrowernotes` mediumtext,
6235           `relationship` varchar(100) DEFAULT NULL,
6236           `ethnicity` varchar(50) DEFAULT NULL,
6237           `ethnotes` varchar(255) DEFAULT NULL,
6238           `sex` varchar(1) DEFAULT NULL,
6239           `password` varchar(30) DEFAULT NULL,
6240           `flags` int(11) DEFAULT NULL,
6241           `userid` varchar(75) DEFAULT NULL,
6242           `opacnote` mediumtext,
6243           `contactnote` varchar(255) DEFAULT NULL,
6244           `sort1` varchar(80) DEFAULT NULL,
6245           `sort2` varchar(80) DEFAULT NULL,
6246           `altcontactfirstname` varchar(255) DEFAULT NULL,
6247           `altcontactsurname` varchar(255) DEFAULT NULL,
6248           `altcontactaddress1` varchar(255) DEFAULT NULL,
6249           `altcontactaddress2` varchar(255) DEFAULT NULL,
6250           `altcontactaddress3` varchar(255) DEFAULT NULL,
6251           `altcontactstate` text,
6252           `altcontactzipcode` varchar(50) DEFAULT NULL,
6253           `altcontactcountry` text,
6254           `altcontactphone` varchar(50) DEFAULT NULL,
6255           `smsalertnumber` varchar(50) DEFAULT NULL,
6256           `privacy` int(11) DEFAULT NULL,
6257           PRIMARY KEY (`verification_token`,`borrowernumber`),
6258           KEY `verification_token` (`verification_token`),
6259           KEY `borrowernumber` (`borrowernumber`)
6260         ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
6261 ");
6262
6263     $dbh->do("
6264         INSERT INTO systempreferences (`variable`, `value`, `options`, `explanation`, `type`) VALUES
6265         ('PatronSelfRegistration', '0', NULL, 'If enabled, patrons will be able to register themselves via the OPAC.', 'YesNo'),
6266         ('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'),
6267         ('PatronSelfRegistrationDefaultCategory', '', '', 'A patron registered via the OPAC will receive a borrower category code set in this system preference.', 'free'),
6268         ('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'),
6269         ('PatronSelfRegistrationBorrowerMandatoryField',  'surname|firstname', NULL ,  'Choose the mandatory fields for a patron''s account, when registering via the OPAC.',  'free'),
6270         ('PatronSelfRegistrationBorrowerUnwantedField',  '', NULL ,  'Name the fields you don''t want to display when registering a new patron via the OPAC.',  'free');
6271     ");
6272
6273     $dbh->do("
6274     INSERT INTO  letter ( `module`, `code`, `branchcode`, `name`, `is_html`, `title`, `content` )
6275     VALUES ( 'members', 'OPAC_REG_VERIFY', '', 'Opac Self-Registration Verification Email', '1', 'Verify Your Account', 'Hello!
6276
6277     Your library account has been created. Please verify your email address by clicking this link to complete the signup process:
6278
6279     http://<<OPACBaseURL>>/cgi-bin/koha/opac-registration-verify.pl?token=<<borrower_modifications.verification_token>>
6280
6281     If you did not initiate this request, you may safely ignore this one-time message. The request will expire shortly.'
6282     )");
6283
6284     print "Upgrade to $DBversion done (Bug 7067: Add Patron Self Registration)\n";
6285     SetVersion ($DBversion);
6286 }
6287
6288 $DBversion = "3.11.00.009";
6289 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
6290     $dbh->do("
6291         INSERT IGNORE INTO systempreferences (variable,value,explanation,options,type) VALUES
6292         ('SeparateHoldings', '0', 'Separate current branch holdings from other holdings', NULL, 'YesNo'),
6293         ('SeparateHoldingsBranch', 'homebranch', 'Branch used to separate holdings', 'homebranch|holdingbranch', 'Choice'),
6294         ('OpacSeparateHoldings', '0', 'Separate current branch holdings from other holdings (OPAC)', NULL, 'YesNo'),
6295         ('OpacSeparateHoldingsBranch', 'homebranch', 'Branch used to separate holdings (OPAC)', 'homebranch|holdingbranch', 'Choice')
6296     ");
6297
6298     print "Upgrade to $DBversion done (Bug 7674: Add systempreferences SeparateHoldings, SeparateHoldingsBranch, OpacSeparateHoldings and OpacSeparateHoldingsBranch) \n";
6299     SetVersion ($DBversion);
6300 }
6301
6302 $DBversion = "3.11.00.010";
6303 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
6304     $dbh->do("INSERT INTO systempreferences (variable,value,options,explanation,type) VALUES('RenewalSendNotice', '0', '', NULL, 'YesNo')");
6305     $dbh->do(q{
6306         INSERT INTO `letter` (`module`, `code`, `name`, `title`, `content`) VALUES
6307         ('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>>.');
6308     });
6309     print "Upgrade to $DBversion done (Bug 9151 - Renewal notice according to patron alert preferences)\n";
6310     SetVersion($DBversion);
6311 }
6312
6313 $DBversion = "3.11.00.011";
6314 if ( CheckVersion($DBversion) ) {
6315    $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');");
6316    $dbh->do("INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES('HTML5MediaExtensions','webm|ogg|ogv|oga|vtt','Media file extensions','','free');");
6317    print "Upgrade to $DBversion done (Bug 8377: Add HTML5MediaEnabled and HTML5MediaExtensions sysprefs)\n";
6318    SetVersion ($DBversion);
6319 }
6320
6321 $DBversion = "3.11.00.012";
6322 if ( CheckVersion($DBversion) ) {
6323     $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')");
6324     print "Upgrade to $DBversion done (Bug 9206: Only allow place holds in records that the patron don't have in his possession)\n";
6325     SetVersion($DBversion);
6326 }
6327
6328 $DBversion = "3.11.00.013";
6329 if ( CheckVersion($DBversion) ) {
6330     $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')");
6331     print "Upgrade to $DBversion done (Bug 9162 - Add a system preference to set which notes fields appears on title notes/description separator)\n";
6332     SetVersion($DBversion);
6333 }
6334
6335 $DBversion = "3.11.00.014";
6336 if ( CheckVersion($DBversion) ) {
6337    $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' )");
6338    $dbh->do("INSERT INTO systempreferences ( variable, value, explanation, type ) VALUES ( 'SCOUserJS', '', 'Define custom javascript for inclusion in the SCO module', 'free' )");
6339    print "Upgrade to $DBversion done (Bug 9009: Add SCOUserCSS and SCOUserJS sysprefs)\n";
6340 }
6341
6342 $DBversion = "3.11.00.015";
6343 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
6344     $dbh->do("INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES ('RentalsInNoissuesCharge', '1', 'Rental charges block checkouts (added to noissuescharge).',NULL,'YesNo');");
6345     $dbh->do("INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES ('ManInvInNoissuesCharge', '1', 'MANUAL_INV charges block checkouts (added to noissuescharge).',NULL,'YesNo');");
6346     print "Upgrade to $DBversion done (Add sysprefs RentalsInNoissuesCharge and ManInvInNoissuesCharge.)\n";
6347     SetVersion($DBversion);
6348 }
6349
6350 $DBversion = "3.11.00.016";
6351 if ( CheckVersion($DBversion) ) {
6352    $dbh->do(q{
6353         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";
6354         });
6355    $dbh->do(q{
6356         UPDATE userflags SET flagdesc="Edit Authorities" where flagdesc="Allow to edit authorities";
6357         });
6358    $dbh->do(q{
6359         UPDATE userflags SET flagdesc="Allow access to the reports module" where flagdesc="Allow to access to the reports module";
6360         });
6361    $dbh->do(q{
6362         UPDATE userflags SET flagdesc="Set library management parameters (deprecated)" where flagdesc="Set library management parameters";
6363         });
6364    $dbh->do(q{
6365         UPDATE userflags SET flagdesc="Manage serial subscriptions" where flagdesc="Allow to manage serials subscriptions";
6366         });
6367    $dbh->do(q{
6368         UPDATE userflags SET flagdesc="Manage patrons fines and fees" where flagdesc="Update borrower charges";
6369         });
6370    $dbh->do(q{
6371         UPDATE userflags SET flagdesc="Check out and check in items" where flagdesc="Circulate books";
6372         });
6373    $dbh->do(q{
6374         UPDATE userflags SET flagdesc="Manage Koha system settings (Administration panel)" where flagdesc="Set Koha system parameters";
6375         });
6376    $dbh->do(q{
6377         UPDATE userflags SET flagdesc="Add or modify patrons" where flagdesc="Add or modify borrowers";
6378         });
6379    $dbh->do(q{
6380         UPDATE userflags SET flagdesc="Use all tools (expand for granular tools permissions)" where flagdesc="Use tools (export, import, barcodes)";
6381         });
6382    $dbh->do(q{
6383         UPDATE userflags SET flagdesc="Allow staff members to modify permissions for other staff members" where flagdesc="Set user permissions";
6384         });
6385    $dbh->do(q{
6386         UPDATE permissions SET description="Perform batch modification of patrons" where description="Perform batch modifivation of patrons";
6387         });
6388
6389    print "Upgrade to $DBversion done (Bug 9382 (updated with bug 9745) - refresh permission descriptions to make more sense)\n";
6390    SetVersion ($DBversion);
6391 }
6392
6393 $DBversion ="3.11.00.017";
6394 if ( CheckVersion($DBversion) ) {
6395     $dbh->do("INSERT IGNORE INTO systempreferences (variable,value,explanation,options,type) VALUES('IDreamBooksReviews','0','Display book review snippets from IDreamBooks.com','','YesNo');");
6396     $dbh->do("INSERT IGNORE INTO systempreferences (variable,value,explanation,options,type) VALUES('IDreamBooksReadometer','0','Display Readometer from IDreamBooks.com','','YesNo');");
6397     $dbh->do("INSERT IGNORE INTO systempreferences (variable,value,explanation,options,type) VALUES('IDreamBooksResults','0','Display IDreamBooks.com rating in search results','','YesNo');");
6398     print "Upgrade to $DBversion done (Add IDreamBooks enhanced content)\n";
6399     SetVersion($DBversion);
6400 }
6401
6402 $DBversion = "3.11.00.018";
6403 if ( CheckVersion($DBversion) ) {
6404    $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')");
6405    $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')");
6406    print "Upgrade to $DBversion done (Bug 9395: Problem with callnumber and standard number search in OPAC and Staff Client)\n";
6407    SetVersion ($DBversion);
6408 }
6409
6410 $DBversion = "3.11.00.019";
6411 if ( CheckVersion($DBversion) ) {
6412     $dbh->do("INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES ('UNIMARCAuthorityField100', 'afrey50      ba0', NULL, NULL, 'Textarea')");
6413     print "Upgrade to $DBversion done (Bug 9145 - Add syspref UNIMARCAuthorityField100)\n";
6414     SetVersion ($DBversion);
6415 }
6416
6417 $DBversion = "3.11.00.020";
6418 if ( CheckVersion($DBversion) ) {
6419     $dbh->do("INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES('UNIMARCField100Language', 'fre','UNIMARC field 100 default language',NULL,'short')");
6420     print "Upgrade to $DBversion done (Bug 8347 - Koha forces UNIMARC 100 field code language to 'fre')\n";
6421     SetVersion($DBversion);
6422 }
6423
6424 $DBversion ="3.11.00.021";
6425 if ( CheckVersion($DBversion) ) {
6426     $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');");
6427     print "Upgrade to $DBversion done (Bug 5888 - Subject search pop-up for the OPAC)\n";
6428     SetVersion($DBversion);
6429 }
6430
6431 $DBversion = "3.11.00.022";
6432 if ( CheckVersion($DBversion) ) {
6433     $dbh->do(
6434 "INSERT IGNORE INTO systempreferences (variable,value,explanation,options,type) VALUES('Persona',0,'Use Mozilla Persona for login','','YesNo')"
6435     );
6436     print "Upgrade to $DBversion done (Bug 9587 - Allow login via Persona)\n";
6437     SetVersion($DBversion);
6438 }
6439
6440 $DBversion = "3.11.00.023";
6441 if ( CheckVersion($DBversion) ) {
6442     $dbh->do("UPDATE z3950servers SET host = 'lx2.loc.gov', port = 210, db = 'LCDB', syntax = 'USMARC', encoding = 'utf8' WHERE name = 'LIBRARY OF CONGRESS'");
6443     print "Upgrade to $DBversion done (Bug 9520 - Update default LOC Z39.50 target)\n";
6444     SetVersion($DBversion);
6445 }
6446
6447 $DBversion = "3.11.00.024";
6448 if ( CheckVersion($DBversion) ) {
6449     $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');");
6450     print "Upgrade to $DBversion done (Bug 5079: Add OpacItemLocation syspref)\n";
6451     SetVersion ($DBversion);
6452 }
6453
6454 $DBversion = "3.11.00.025";
6455 if ( CheckVersion($DBversion) ) {
6456     $dbh->do(
6457         "CREATE TABLE linktracker (
6458   id int(11) NOT NULL AUTO_INCREMENT,
6459   biblionumber int(11) DEFAULT NULL,
6460   itemnumber int(11) DEFAULT NULL,
6461   borrowernumber int(11) DEFAULT NULL,
6462   url text,
6463   timeclicked datetime DEFAULT NULL,
6464   PRIMARY KEY (id),
6465   KEY bibidx (biblionumber),
6466   KEY itemidx (itemnumber),
6467   KEY borridx (borrowernumber),
6468   KEY dateidx (timeclicked)
6469     ) ENGINE=InnoDB DEFAULT CHARSET=utf8;"
6470     );
6471     $dbh->do( "
6472   INSERT INTO systempreferences (variable,value,explanation,options,type)
6473   VALUES('TrackClicks','0','Track links clicked',NULL,'Integer')" );
6474     print
6475 "Upgrade to $DBversion done (Adds feature Bug 8917, the ability to track links clicked)\n";
6476     SetVersion($DBversion);
6477 }
6478
6479 $DBversion = "3.11.00.026";
6480 if ( CheckVersion($DBversion) ) {
6481     $dbh->do(qq{
6482         ALTER TABLE import_records ADD INDEX batch_id_record_type ( import_batch_id, record_type );
6483     });
6484     print "Upgrade to $DBversion done (Bug 9207: Add new index batch_id_record_type to import_records)\n";
6485     SetVersion($DBversion);
6486 }
6487
6488 $DBversion = "3.11.00.027";
6489 if ( CheckVersion($DBversion) ) {
6490     $dbh->do(q{
6491         INSERT INTO permissions ( module_bit, code, description )
6492         VALUES  ( '1', 'overdues_report', 'Execute overdue items report' )
6493     });
6494     # add new permission for users with all report permissions and circulation remaining permission
6495     $dbh->do(q{
6496         INSERT INTO user_permissions (borrowernumber, module_bit, code)
6497         SELECT user_permissions.borrowernumber, 1, 'overdues_report'
6498         FROM user_permissions
6499         LEFT JOIN borrowers USING(borrowernumber)
6500         WHERE borrowers.flags & (1 << 16)
6501         AND user_permissions.code = 'circulate_remaining_permissions'
6502     });
6503     print "Upgrade to $DBversion done ( Add circ permission overdues_report )\n";
6504     SetVersion($DBversion);
6505 }
6506
6507 $DBversion = "3.11.00.028";
6508 if ( CheckVersion($DBversion) ) {
6509     $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'    );");
6510     print "Upgrade to $DBversion done (Bug 9756 - Patron self registration missing the system preference PatronSelfRegistrationAdditionalInstructions)\n";
6511     SetVersion($DBversion);
6512 }
6513
6514 $DBversion = "3.11.00.029";
6515 if (CheckVersion($DBversion)) {
6516     $dbh->do("INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES('UseQueryParser', '0', 'If enabled, try to use QueryParser for queries.', NULL, 'YesNo')");
6517     print "Upgrade to $DBversion done (Bug 9239: Make it possible for Koha to use QueryParser)\n";
6518     SetVersion ($DBversion);
6519 }
6520
6521 $DBversion = "3.11.00.030";
6522 if ( CheckVersion($DBversion) ) {
6523     $dbh->do("INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES('FinesIncludeGracePeriod','1','If enabled, fines calculations will include the grace period.',NULL,'YesNo');");
6524     print "Upgrade to $DBversion done (Add system preference FinesIncludeGracePeriod)\n";
6525     SetVersion($DBversion);
6526 }
6527
6528 $DBversion = "3.11.00.100";
6529 if ( CheckVersion($DBversion) ) {
6530     print "Upgrade to $DBversion done (3.12-alpha release)\n";
6531     SetVersion ($DBversion);
6532 }
6533
6534 $DBversion = "3.11.00.101";
6535 if ( CheckVersion($DBversion) ) {
6536    $dbh->do("INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES ('UNIMARCAuthorsFacetsSeparator',', ', 'UNIMARC authors facets separator', NULL, 'short')");
6537    print "Upgrade to $DBversion done (Bug 9341: Problem with UNIMARC authors facets)\n";
6538    SetVersion ($DBversion);
6539 }
6540
6541 $DBversion = "3.11.00.102";
6542 if ( CheckVersion($DBversion) ) {
6543     $dbh->do(q{
6544         DELETE FROM systempreferences WHERE variable='NoZebra'
6545     });
6546     $dbh->do(q{
6547         DELETE FROM systempreferences WHERE variable='QueryRemoveStopwords'
6548     });
6549     print "Upgrade to $DBversion done (Remove deprecated NoZebra and QueryRemoveStopwords sysprefs)\n";
6550     SetVersion($DBversion);
6551 }
6552
6553 $DBversion = "3.11.00.103";
6554 if ( CheckVersion($DBversion) ) {
6555     $dbh->do("DELETE FROM systempreferences WHERE variable = 'insecure';");
6556     print "Upgrade to $DBversion done (Bug 9827 - Remove 'insecure' system preference)\n";
6557     SetVersion($DBversion);
6558 }
6559
6560 $DBversion = "3.11.00.104";
6561 if ( CheckVersion($DBversion) ) {
6562     print "Upgrade to $DBversion done (3.12-alpha2 release)\n";
6563     SetVersion ($DBversion);
6564 }
6565
6566 $DBversion = "3.11.00.105";
6567 if ( CheckVersion($DBversion) ) {
6568     if ( C4::Context->preference("marcflavour") eq 'MARC21' ) {
6569         $sth = $dbh->prepare(
6570 "SELECT frameworkcode FROM marc_tag_structure WHERE tagfield = '029'"
6571         );
6572         $sth->execute;
6573         my $frameworkcodes = $sth->fetchall_hashref('frameworkcode');
6574
6575         for my $frameworkcode ( keys %$frameworkcodes ) {
6576             $dbh->do( "
6577     INSERT IGNORE INTO marc_subfield_structure (tagfield, tagsubfield, liblibrarian,
6578     libopac, repeatable, mandatory, kohafield, tab, authorised_value, authtypecode,
6579     value_builder, isurl, hidden, frameworkcode, seealso, link, defaultvalue) VALUES
6580     ('029', 'a', 'OCLC library identifier', 'OCLC library identifier', 0, 0, '', 0, '', '', '', 0, -6, '$frameworkcode', '', '', NULL),
6581     ('029', 'b', 'System control number', 'System control number', 0, 0, '', 0, '', '', '', 0, -6, '$frameworkcode', '', '', NULL),
6582     ('029', 'c', 'OAI set name', 'OAI set name', 0, 0, '', 0, '', '', '', 0, -6, '$frameworkcode', '', '', NULL),
6583     ('029', 't', 'Content type identifier', 'Content type identifier', 0, 0, '', 0, '', '', '', 0, -6, '$frameworkcode', '', '', NULL)
6584    " );
6585         }
6586
6587         for my $tag ( '863', '864', '865' ) {
6588             $sth = $dbh->prepare(
6589 "SELECT frameworkcode FROM marc_tag_structure WHERE tagfield = '$tag'"
6590             );
6591             $sth->execute;
6592             my $frameworkcodes = $sth->fetchall_hashref('frameworkcode');
6593
6594             for my $frameworkcode ( keys %$frameworkcodes ) {
6595                 $dbh->do( "
6596      INSERT IGNORE INTO marc_subfield_structure (tagfield, tagsubfield, liblibrarian,
6597      libopac, repeatable, mandatory, kohafield, tab, authorised_value, authtypecode,
6598      value_builder, isurl, hidden, frameworkcode, seealso, link, defaultvalue) VALUES
6599      ('$tag', '6', 'Linkage', 'Linkage', 0, 0, '', 8, '', '', '', NULL, 5, '$frameworkcode', '', '', NULL),
6600      ('$tag', '8', 'Field link and sequence number', 'Field link and sequence number', 0, 0, '', 8, '', '', '', NULL, 5, '$frameworkcode', '', '', NULL),
6601      ('$tag', 'a', 'First level of enumeration', 'First level of enumeration', 0, 0, '', 8, '', '', '', 0, 5, '$frameworkcode', '', '', NULL),
6602      ('$tag', 'b', 'Second level of enumeration', 'Second level of enumeration', 0, 0, '', 8, '', '', '', 0, 5, '$frameworkcode', '', '', NULL),
6603      ('$tag', 'c', 'Third level of enumeration', 'Third level of enumeration', 0, 0, '', 8, '', '', '', 0, 5, '$frameworkcode', '', '', NULL),
6604      ('$tag', 'd', 'Fourth level of enumeration', 'Fourth level of enumeration', 0, 0, '', 8, '', '', '', 0, 5, '$frameworkcode', '', '', NULL),
6605      ('$tag', 'e', 'Fifth level of enumeration', 'Fifth level of enumeration', 0, 0, '', 8, '', '', '', 0, 5, '$frameworkcode', '', '', NULL),
6606      ('$tag', 'f', 'Sixth level of enumeration', 'Sixth level of enumeration', 0, 0, '', 8, '', '', '', 0, 5, '$frameworkcode', '', '', NULL),
6607      ('$tag', 'g', 'Alternative numbering scheme, first level of enumeration', 'Alternative numbering scheme, first level of enumeration', 0, 0, '', 8, '', '', '', 0, 5, '$frameworkcode', '', '', NULL),
6608      ('$tag', 'h', 'Alternative numbering scheme, second level of enumeration', 'Alternative numbering scheme, second level of enumeration', 0, 0, '', 8, '', '', '', 0, 5, '$frameworkcode', '', '', NULL),
6609      ('$tag', 'i', 'First level of chronology', 'First level of chronology', 0, 0, '', 8, '', '', '', 0, 5, '$frameworkcode', '', '', NULL),
6610      ('$tag', 'j', 'Second level of chronology', 'Second level of chronology', 0, 0, '', 8, '', '', '', 0, 5, '$frameworkcode', '', '', NULL),
6611      ('$tag', 'k', 'Third level of chronology', 'Third level of chronology', 0, 0, '', 8, '', '', '', 0, 5, '$frameworkcode', '', '', NULL),
6612      ('$tag', 'l', 'Fourth level of chronology', 'Fourth level of chronology', 0, 0, '', 8, '', '', '', 0, 5, '$frameworkcode', '', '', NULL),
6613      ('$tag', 'm', 'Alternative numbering scheme, chronology', 'Alternative numbering scheme, chronology', 0, 0, '', 8, '', '', '', 0, 5, '$frameworkcode', '', '', NULL),
6614      ('$tag', 'n', 'Converted Gregorian year', 'Converted Gregorian year', 0, 0, '', 8, '', '', '', 0, 5, '$frameworkcode', '', '', NULL),
6615      ('$tag', 'o', 'Type of unit', 'Type of unit', 1, 0, '', 8, '', '', '', 0, 5, '$frameworkcode', '', '', NULL),
6616      ('$tag', 'p', 'Piece designation', 'Piece designation', 0, 0, '', 8, '', '', '', 0, 5, '$frameworkcode', '', '', NULL),
6617      ('$tag', 'q', 'Piece physical condition', 'Piece physical condition', 0, 0, '', 8, '', '', '', 0, 5, '$frameworkcode', '', '', NULL),
6618      ('$tag', 's', 'Copyright article-fee code', 'Copyright article-fee code', 1, 0, '', 8, '', '', '', 0, 5, '$frameworkcode', '', '', NULL),
6619      ('$tag', 't', 'Copy number', 'Copy number', 0, 0, '', 8, '', '', '', 0, 5, '$frameworkcode', '', '', NULL),
6620      ('$tag', 'v', 'Issuing date', 'Issuing date', 1, 0, '', 8, '', '', '', 0, 5, '$frameworkcode', '', '', NULL),
6621      ('$tag', 'w', 'Break indicator', 'Break indicator', 0, 0, '', 8, '', '', '', 0, 5, '$frameworkcode', '', '', NULL),
6622      ('$tag', 'x', 'Nonpublic note', 'Nonpublic note', 1, 0, '', 8, '', '', '', 0, 5, '$frameworkcode', '', '', NULL),
6623      ('$tag', 'z', 'Public note', 'Public note', 1, 0, '', 8, '', '', '', 0, 5, '$frameworkcode', '', '', NULL)
6624     " );
6625             }
6626         }
6627     }
6628     print "Upgrade to $DBversion done (Bug 9353: Missing subfields on MARC21 frameworks)\n";
6629     SetVersion($DBversion);
6630 }
6631
6632
6633 $DBversion = "3.11.00.106";
6634 if ( CheckVersion($DBversion) ) {
6635     $dbh->do("INSERT INTO userflags (bit, flag, flagdesc, defaulton) VALUES ('19', 'plugins', 'Koha plugins', '0')");
6636     $dbh->do("INSERT INTO permissions (module_bit, code, description) VALUES
6637               ('19', 'manage', 'Manage plugins ( install / uninstall )'),
6638               ('19', 'tool', 'Use tool plugins'),
6639               ('19', 'report', 'Use report plugins'),
6640               ('19', 'configure', 'Configure plugins')
6641             ");
6642     $dbh->do("INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES('UseKohaPlugins','0','Enable or disable the ability to use Koha Plugins.','','YesNo')");
6643
6644     $dbh->do("
6645         CREATE TABLE IF NOT EXISTS plugin_data (
6646             plugin_class varchar(255) NOT NULL,
6647             plugin_key varchar(255) NOT NULL,
6648             plugin_value text,
6649             PRIMARY KEY (plugin_class,plugin_key)
6650         ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
6651     ");
6652
6653     print "Upgrade to $DBversion done (Bug 7804: Added plugin system.)\n";
6654     SetVersion($DBversion);
6655 }
6656
6657 $DBversion = "3.11.00.107";
6658 if ( CheckVersion($DBversion) ) {
6659    $dbh->do("INSERT INTO systempreferences (variable,value,options,explanation,type) VALUES ('TimeFormat','24hr','12hr|24hr','Defines the global time format for visual output.','Choice')");
6660    print "Upgrade to $DBversion done (Bug 9014: Add syspref TimeFormat)\n";
6661    SetVersion ($DBversion);
6662 }
6663
6664 $DBversion = "3.11.00.108";
6665 if ( CheckVersion($DBversion) ) {
6666     $dbh->do("ALTER TABLE action_logs CHANGE timestamp timestamp TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP;");
6667     $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');");
6668     $dbh->do("ALTER TABLE action_logs CHANGE timestamp timestamp TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP;");
6669     print "Upgrade to $DBversion done (Bug 7241: Fix on circulation logs)\n";
6670     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";
6671     SetVersion($DBversion);
6672 }
6673
6674 $DBversion = "3.11.00.109";
6675 if ( CheckVersion($DBversion) ) {
6676    $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');");
6677    print "Upgrade to $DBversion done (Bug 9403: Add DisplayIconsXSLT)\n";
6678    SetVersion ($DBversion);
6679 }
6680
6681 $DBversion = "3.11.00.110";
6682 if ( CheckVersion($DBversion) ) {
6683     $dbh->do("ALTER TABLE pending_offline_operations CHANGE barcode barcode VARCHAR( 20 ) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL");
6684     $dbh->do("ALTER TABLE pending_offline_operations ADD amount DECIMAL( 28, 6 ) NULL DEFAULT NULL");
6685     print "Upgrade to $DBversion done (Bug 8220 - Allow koc uploads to go to process queue)\n";
6686     SetVersion ($DBversion);
6687 }
6688
6689 $DBversion = "3.11.00.111";
6690 if ( CheckVersion($DBversion) ) {
6691     my $sth = $dbh->prepare("
6692         SELECT module, code, branchcode, content
6693         FROM letter
6694         WHERE content LIKE '%<fine>%'
6695     ");
6696     $sth->execute;
6697     my $sth_update = $dbh->prepare("UPDATE letter SET content = ? WHERE module = ? AND code = ? AND branchcode = ?");
6698     while(my $row = $sth->fetchrow_hashref){
6699         $row->{content} =~ s/<fine>\w+<\/fine>/<<items.fine>>/;
6700         $sth_update->execute($row->{content}, $row->{module}, $row->{code}, $row->{branchcode});
6701     }
6702     print "Upgrade to $DBversion done (use new <<items.fine>> syntax in notices)\n";
6703     SetVersion($DBversion);
6704 }
6705
6706 $DBversion = "3.11.00.112";
6707 if ( CheckVersion($DBversion) ) {
6708     $dbh->do(qq{
6709         ALTER TABLE issuingrules ADD COLUMN renewalperiod int(4) DEFAULT NULL AFTER renewalsallowed
6710     });
6711     $dbh->do(qq{
6712         UPDATE issuingrules SET renewalperiod = issuelength
6713     });
6714     print "Upgrade to $DBversion done (Bug 8365: Add colum issuingrules.renewalperiod)\n";
6715     SetVersion ($DBversion);
6716 }
6717
6718 $DBversion = "3.11.00.113";
6719 if ( CheckVersion($DBversion) ) {
6720     $dbh->do(q{
6721         ALTER TABLE branchcategories ADD show_in_pulldown BOOLEAN NOT NULL DEFAULT '0',
6722         ADD INDEX ( show_in_pulldown )
6723     });
6724     print "Upgrade to $DBversion done (Bug 9257 - Add groups to normal search pulldown)\n";
6725     SetVersion ($DBversion);
6726 }
6727
6728 $DBversion = "3.11.00.115";
6729 if ( CheckVersion($DBversion) ) {
6730     $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')");
6731     $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')");
6732     print "Upgrade to $DBversion done (Bug 7740: Add syspref HighlightOwnItemsOnOPAC)\n";
6733     SetVersion ($DBversion);
6734 }
6735
6736 $DBversion = "3.11.00.116";
6737 if ( CheckVersion($DBversion) ) {
6738     $dbh->do(q{ALTER TABLE aqorders DROP COLUMN serialid;});
6739     $dbh->do(q{ALTER TABLE aqorders DROP COLUMN subscription;});
6740     $dbh->do(q{ALTER TABLE aqorders ADD COLUMN subscriptionid INT(11) DEFAULT NULL;});
6741     $dbh->do(q{ALTER TABLE aqorders ADD CONSTRAINT aqorders_subscriptionid FOREIGN KEY (subscriptionid) REFERENCES subscription (subscriptionid) ON DELETE CASCADE ON UPDATE CASCADE;});
6742     $dbh->do(q{ALTER TABLE subscription ADD COLUMN reneweddate DATE DEFAULT NULL;});
6743     print "Upgrade to $DBversion done (Bug 5343: table aqorders: DROP serialid and subscription fields and ADD subscriptionid, table subscription: ADD reneweddate)\n";
6744     SetVersion ($DBversion);
6745 }
6746
6747 $DBversion = "3.11.00.200";
6748 if ( CheckVersion($DBversion) ) {
6749     print "Upgrade to $DBversion done (3.12-beta1 release)\n";
6750     SetVersion ($DBversion);
6751 }
6752
6753 $DBversion = "3.11.00.201";
6754 if ( CheckVersion($DBversion) ) {
6755     $dbh->do("UPDATE z3950servers SET encoding = 'ISO_8859-1' WHERE name = 'BIBSYS' AND host LIKE 'z3950.bibsys.no'");
6756     $dbh->do("UPDATE z3950servers SET encoding = 'ISO_8859-1' WHERE name = 'NORBOK' AND host LIKE 'z3950.nb.no'");
6757     $dbh->do("UPDATE z3950servers SET encoding = 'ISO_8859-1' WHERE name = 'SAMBOK' AND host LIKE 'z3950.nb.no'");
6758     $dbh->do("UPDATE z3950servers SET encoding = 'ISO_8859-1' WHERE name = 'DEICHMAN' AND host like 'z3950.deich.folkebibl.no'");
6759     print "Upgrade to $DBversion done (Bug 9498 - Update encoding for Norwegian sample Z39.50 servers)\n";
6760     SetVersion($DBversion);
6761 }
6762
6763 $DBversion = "3.11.00.202";
6764 if ( CheckVersion($DBversion) ) {
6765    $dbh->do("INSERT INTO language_subtag_registry( subtag, type, description, added) VALUES ( 'ca', 'language', 'Catalan','2013-01-12' )");
6766    $dbh->do("INSERT INTO language_rfc4646_to_iso639(rfc4646_subtag,iso639_2_code) VALUES( 'ca','cat')");
6767    $dbh->do("INSERT INTO language_descriptions(subtag, type, lang, description) VALUES( 'ca', 'language', 'es', 'Catalán')");
6768    $dbh->do("INSERT INTO language_descriptions(subtag, type, lang, description) VALUES( 'ca', 'language', 'en', 'Catalan')");
6769    $dbh->do("INSERT INTO language_descriptions(subtag, type, lang, description) VALUES( 'ca', 'language', 'fr', 'Catalan')");
6770    $dbh->do("INSERT INTO language_descriptions(subtag, type, lang, description) VALUES( 'ca', 'language', 'ca', 'Català')");
6771    $dbh->do("INSERT INTO language_descriptions(subtag, type, lang, description) VALUES( 'ca', 'language', 'de', 'Katalanisch')");
6772    print "Upgrade to $DBversion done (Bug 9381: Add Catalan laguage)\n";
6773    SetVersion ($DBversion);
6774 }
6775
6776 $DBversion = "3.11.00.203";
6777 if ( CheckVersion($DBversion) ) {
6778     $dbh->do(q{ALTER TABLE suggestions CHANGE COLUMN title title VARCHAR(255) DEFAULT NULL;});
6779     print "Upgrade to $DBversion done (Bug 2046 - increasing title column length for suggestions)\n";
6780     SetVersion ($DBversion);
6781 }
6782
6783 $DBversion = "3.11.00.300";
6784 if ( CheckVersion($DBversion) ) {
6785     print "Upgrade to $DBversion done (3.12-beta3 release)\n";
6786     SetVersion ($DBversion);
6787 }
6788
6789 $DBversion = "3.11.00.301";
6790 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
6791     #issues
6792     $dbh->do(q{
6793         ALTER TABLE `issues`
6794             ADD KEY `itemnumber_idx` (`itemnumber`),
6795             ADD KEY `branchcode_idx` (`branchcode`),
6796             ADD KEY `issuingbranch_idx` (`issuingbranch`)
6797     });
6798     $dbh->do(q{
6799         ALTER TABLE `old_issues`
6800             ADD KEY `branchcode_idx` (`branchcode`),
6801             ADD KEY `issuingbranch_idx` (`issuingbranch`)
6802     });
6803     #items
6804     $dbh->do(q{
6805         ALTER TABLE `items` ADD KEY `itype_idx` (`itype`)
6806     });
6807     $dbh->do(q{
6808         ALTER TABLE `deleteditems` ADD KEY `itype_idx` (`itype`)
6809     });
6810     # biblioitems
6811     $dbh->do(q{
6812         ALTER TABLE `biblioitems` ADD KEY `itemtype_idx` (`itemtype`)
6813     });
6814     $dbh->do(q{
6815         ALTER TABLE `deletedbiblioitems` ADD KEY `itemtype_idx` (`itemtype`)
6816     });
6817     # statistics
6818     $dbh->do(q{
6819         ALTER TABLE `statistics`
6820             ADD KEY `branch_idx` (`branch`),
6821             ADD KEY `proccode_idx` (`proccode`),
6822             ADD KEY `type_idx` (`type`),
6823             ADD KEY `usercode_idx` (`usercode`),
6824             ADD KEY `itemnumber_idx` (`itemnumber`),
6825             ADD KEY `itemtype_idx` (`itemtype`),
6826             ADD KEY `borrowernumber_idx` (`borrowernumber`),
6827             ADD KEY `associatedborrower_idx` (`associatedborrower`),
6828             ADD KEY `ccode_idx` (`ccode`)
6829     });
6830
6831     print "Upgrade to $DBversion done (Bug 9681: Add some database indexes)\n";
6832     SetVersion($DBversion);
6833 }
6834
6835 $DBversion = "3.12.00.000";
6836 if ( CheckVersion($DBversion) ) {
6837     print "Upgrade to $DBversion done (3.12.0 release)\n";
6838     SetVersion ($DBversion);
6839 }
6840
6841 $DBversion = '3.13.00.000';
6842 if ( CheckVersion($DBversion) ) {
6843     print "Upgrade to $DBversion done (start the journey to Koha Pi)\n";
6844     SetVersion ($DBversion);
6845 }
6846
6847 $DBversion = "3.13.00.001";
6848 if ( CheckVersion($DBversion) ) {
6849     $dbh->do("INSERT INTO `systempreferences` (`variable`, `value`, `options`, `explanation`, `type`) VALUES ('UseCourseReserves', '0', NULL, 'Enable the course reserves feature.', 'YesNo')");
6850     $dbh->do("INSERT INTO userflags (bit,flag,flagdesc,defaulton) VALUES ('18','coursereserves','Course Reserves','0')");
6851     $dbh->do("
6852 CREATE TABLE `courses` (
6853   `course_id` int(11) NOT NULL AUTO_INCREMENT,
6854   `department` varchar(20) DEFAULT NULL,
6855   `course_number` varchar(255) DEFAULT NULL,
6856   `section` varchar(255) DEFAULT NULL,
6857   `course_name` varchar(255) DEFAULT NULL,
6858   `term` varchar(20) DEFAULT NULL,
6859   `staff_note` mediumtext,
6860   `public_note` mediumtext,
6861   `students_count` varchar(20) DEFAULT NULL,
6862   `enabled` enum('yes','no') NOT NULL DEFAULT 'yes',
6863   `timestamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
6864    PRIMARY KEY (`course_id`)
6865 ) ENGINE=InnoDB  DEFAULT CHARSET=utf8;
6866     ");
6867
6868     $dbh->do("
6869 CREATE TABLE `course_instructors` (
6870   `course_id` int(11) NOT NULL,
6871   `borrowernumber` int(11) NOT NULL,
6872   PRIMARY KEY (`course_id`,`borrowernumber`),
6873   KEY `borrowernumber` (`borrowernumber`)
6874 ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
6875     ");
6876
6877     $dbh->do("
6878 ALTER TABLE `course_instructors`
6879   ADD CONSTRAINT `course_instructors_ibfk_2` FOREIGN KEY (`course_id`) REFERENCES `courses` (`course_id`),
6880   ADD CONSTRAINT `course_instructors_ibfk_1` FOREIGN KEY (`borrowernumber`) REFERENCES `borrowers` (`borrowernumber`) ON DELETE CASCADE ON UPDATE CASCADE;
6881     ");
6882
6883     $dbh->do("
6884 CREATE TABLE `course_items` (
6885   `ci_id` int(11) NOT NULL AUTO_INCREMENT,
6886   `itemnumber` int(11) NOT NULL,
6887   `itype` varchar(10) DEFAULT NULL,
6888   `ccode` varchar(10) DEFAULT NULL,
6889   `holdingbranch` varchar(10) DEFAULT NULL,
6890   `location` varchar(80) DEFAULT NULL,
6891   `enabled` enum('yes','no') NOT NULL DEFAULT 'no',
6892   `timestamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
6893    PRIMARY KEY (`ci_id`),
6894    UNIQUE KEY `itemnumber` (`itemnumber`),
6895    KEY `holdingbranch` (`holdingbranch`)
6896 ) ENGINE=InnoDB  DEFAULT CHARSET=utf8;
6897     ");
6898
6899     $dbh->do("
6900 ALTER TABLE `course_items`
6901   ADD CONSTRAINT `course_items_ibfk_2` FOREIGN KEY (`holdingbranch`) REFERENCES `branches` (`branchcode`) ON DELETE CASCADE ON UPDATE CASCADE,
6902   ADD CONSTRAINT `course_items_ibfk_1` FOREIGN KEY (`itemnumber`) REFERENCES `items` (`itemnumber`) ON DELETE CASCADE ON UPDATE CASCADE;
6903 ");
6904
6905     $dbh->do("
6906 CREATE TABLE `course_reserves` (
6907   `cr_id` int(11) NOT NULL AUTO_INCREMENT,
6908   `course_id` int(11) NOT NULL,
6909   `ci_id` int(11) NOT NULL,
6910   `staff_note` mediumtext,
6911   `public_note` mediumtext,
6912   `timestamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
6913    PRIMARY KEY (`cr_id`),
6914    UNIQUE KEY `pseudo_key` (`course_id`,`ci_id`),
6915    KEY `course_id` (`course_id`)
6916 ) ENGINE=InnoDB  DEFAULT CHARSET=utf8;
6917 ");
6918
6919     $dbh->do("
6920 ALTER TABLE `course_reserves`
6921   ADD CONSTRAINT `course_reserves_ibfk_1` FOREIGN KEY (`course_id`) REFERENCES `courses` (`course_id`);
6922     ");
6923
6924     $dbh->do("
6925 INSERT INTO permissions (module_bit, code, description) VALUES
6926   (18, 'manage_courses', 'Add, edit and delete courses'),
6927   (18, 'add_reserves', 'Add course reserves'),
6928   (18, 'delete_reserves', 'Remove course reserves')
6929 ;
6930     ");
6931
6932
6933     print "Upgrade to $DBversion done (Add Course Reserves ( system preference UseCourseReserves ))\n";
6934     SetVersion($DBversion);
6935 }
6936
6937 $DBversion = "3.13.00.002";
6938 if ( CheckVersion($DBversion) ) {
6939    $dbh->do("UPDATE systempreferences SET variable = 'IndependentBranches' WHERE variable = 'IndependantBranches'");
6940    print "Upgrade to $DBversion done (Bug 10080 - Change system pref IndependantBranches to IndependentBranches)\n";
6941    SetVersion ($DBversion);
6942 }
6943
6944 $DBversion = '3.13.00.003';
6945 if ( CheckVersion($DBversion) ) {
6946     $dbh->do("ALTER TABLE serial DROP itemnumber");
6947     print "Upgrade to $DBversion done (Bug 7718 - Remove itemnumber column from serials table)\n";
6948     SetVersion($DBversion);
6949 }
6950
6951 $DBversion = "3.13.00.004";
6952 if(CheckVersion($DBversion)) {
6953     $dbh->do(
6954 "INSERT IGNORE INTO systempreferences (variable,value,explanation,options,type) VALUES('OpacShowHoldNotes',0,'Show hold notes on OPAC','','YesNo')"
6955     );
6956     print "Upgrade to $DBversion done (Bug 9722: Allow users to add notes when placing a hold in OPAC)\n";
6957     SetVersion($DBversion);
6958 }
6959
6960 $DBversion = "3.13.00.005";
6961 if(CheckVersion($DBversion)) {
6962     my $intra= C4::Context->preference("intranetstylesheet");
6963     #if this pref is not blank or starting with http, https or / [root], then
6964     #add an additional / to the front
6965     if($intra && $intra !~ /^(\/|https?)/) {
6966         $dbh->do("UPDATE systempreferences SET value=? WHERE variable=?",
6967             undef,('/'.$intra,"intranetstylesheet"));
6968         print "WARNING: Your system preference intranetstylesheet has been prefixed with a slash to make it an absolute path.\n";
6969     }
6970     print "Upgrade to $DBversion done (Bug 10052: Make intranetstylesheet and intranetcolorstylesheet behave exactly like their opac counterparts)\n";
6971     SetVersion ($DBversion);
6972 }
6973
6974 $DBversion = "3.13.00.006";
6975 if ( CheckVersion($DBversion) ) {
6976     $dbh->do(
6977         q{
6978 INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES ('CalculateFinesOnReturn','1','Switch to control if overdue fines are calculated on return or not', '', 'YesNo');
6979 }
6980     );
6981     print
6982 "Upgrade to $DBversion done (Bug 10120 - Fines on item return controlled by a systempreference)\n";
6983     SetVersion($DBversion);
6984 }
6985
6986 $DBversion = "3.13.00.007";
6987 if ( CheckVersion($DBversion) ) {
6988     $dbh->do("UPDATE systempreferences SET variable='OpacHoldNotes' WHERE variable='OpacShowHoldNotes'");
6989     print "Upgrade to $DBversion done (Bug 10343: Rename OpacShowHoldNotes to OpacHoldNotes)\n";
6990     SetVersion($DBversion);
6991 }
6992
6993 $DBversion = "3.13.00.008";
6994 if ( CheckVersion($DBversion) ) {
6995     $dbh->do("
6996 CREATE TABLE IF NOT EXISTS borrower_files (
6997   file_id int(11) NOT NULL AUTO_INCREMENT,
6998   borrowernumber int(11) NOT NULL,
6999   file_name varchar(255) NOT NULL,
7000   file_type varchar(255) NOT NULL,
7001   file_description varchar(255) DEFAULT NULL,
7002   file_content longblob NOT NULL,
7003   date_uploaded timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
7004   PRIMARY KEY (file_id),
7005   KEY borrowernumber (borrowernumber),
7006   CONSTRAINT borrower_files_ibfk_1 FOREIGN KEY (borrowernumber) REFERENCES borrowers (borrowernumber) ON DELETE CASCADE ON UPDATE CASCADE
7007 ) ENGINE=InnoDB  DEFAULT CHARSET=utf8;
7008     ");
7009     print "Upgrade to $DBversion done (Bug 10443: make sure borrower_files table exists)\n";
7010     SetVersion($DBversion);
7011 }
7012
7013 $DBversion = "3.13.00.009";
7014 if ( CheckVersion($DBversion) ) {
7015     $dbh->do("ALTER TABLE aqorders DROP COLUMN biblioitemnumber");
7016     print "Upgrade to $DBversion done (Bug 9987 - Drop column aqorders.biblioitemnumber)\n";
7017     SetVersion($DBversion);
7018 }
7019
7020 $DBversion = "3.13.00.010";
7021 if ( CheckVersion($DBversion) ) {
7022     $dbh->do(
7023         q{
7024 INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES ('AcqWarnOnDuplicateInvoice','0','Warn librarians when they try to create a duplicate invoice', '', 'YesNo');
7025 }
7026     );
7027     print
7028 "Upgrade to $DBversion done (Bug 10366 - Add system preference to enabling warning librarian when invoice is duplicated)\n";
7029     SetVersion($DBversion);
7030 }
7031
7032 $DBversion = "3.13.00.011";
7033 if ( CheckVersion($DBversion) ) {
7034     $dbh->do("UPDATE language_rfc4646_to_iso639 SET iso639_2_code='ita' WHERE rfc4646_subtag='it'");
7035     print "Upgrade to $DBversion done (Bug 9519: Wrong language code for Italian in the advanced search language limitations)\n";
7036     SetVersion($DBversion);
7037 }
7038
7039 $DBversion = "3.13.00.012";
7040 if ( CheckVersion($DBversion) ) {
7041     $dbh->do("ALTER TABLE issuingrules MODIFY COLUMN overduefinescap decimal(28,6) DEFAULT NULL;");
7042     print "Upgrade to $DBversion done (Bug 10490: Correct datatype for overduefinescap in issuingrules)\n";
7043     SetVersion($DBversion);
7044 }
7045
7046 $DBversion ="3.13.00.013";
7047 if ( CheckVersion($DBversion) ) {
7048     $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');");
7049     print "Upgrade to $DBversion done (Bug 9576: add AllowTooManyOverride syspref to enable or disable issue limit confirmation)\n";
7050     SetVersion($DBversion);
7051 }
7052
7053 $DBversion = "3.13.00.014";
7054 if ( CheckVersion($DBversion) ) {
7055     $dbh->do("ALTER TABLE courses MODIFY COLUMN department varchar(80) DEFAULT NULL;");
7056     $dbh->do("ALTER TABLE courses MODIFY COLUMN term       varchar(80) DEFAULT NULL;");
7057     print "Upgrade to $DBversion done (Bug 10604: correct width of courses.department and courses.term)\n";
7058     SetVersion($DBversion);
7059 }
7060
7061 $DBversion = "3.13.00.015";
7062 if ( CheckVersion($DBversion) ) {
7063     $dbh->do(
7064 "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')"
7065     );
7066     print "Upgrade to $DBversion done (Bug 7494: Add itemBarcodeFallbackSearch syspref)\n";
7067     SetVersion($DBversion);
7068 }
7069
7070 $DBversion = "3.13.00.016";
7071 if ( CheckVersion($DBversion) ) {
7072     $dbh->do(q{
7073         ALTER TABLE items CHANGE wthdrawn withdrawn TINYINT( 1 ) NOT NULL DEFAULT  '0'
7074     });
7075
7076     $dbh->do(q{
7077         ALTER TABLE deleteditems CHANGE wthdrawn withdrawn TINYINT( 1 ) NOT NULL DEFAULT  '0'
7078     });
7079
7080     $dbh->do(q{
7081         UPDATE saved_sql SET savedsql = REPLACE(savedsql, 'wthdrawn', 'withdrawn')
7082     });
7083
7084     $dbh->do(q{
7085         UPDATE marc_subfield_structure SET kohafield = 'items.withdrawn' WHERE kohafield = 'items.wthdrawn'
7086     });
7087
7088     print "Upgrade to $DBversion done (Bug 10550 - Fix database typo wthdrawn)\n";
7089     SetVersion($DBversion);
7090 }
7091
7092 $DBversion = "3.13.00.017";
7093 if ( CheckVersion($DBversion) ) {
7094     $dbh->do(
7095 "INSERT IGNORE INTO systempreferences (variable,value,explanation,options,type) VALUES('OverDriveClientKey','','Client key for OverDrive integration','30','Free')"
7096     );
7097     $dbh->do(
7098 "INSERT IGNORE INTO systempreferences (variable,value,explanation,options,type) VALUES('OverDriveClientSecret','','Client key for OverDrive integration','30','YesNo')"
7099     );
7100     $dbh->do(
7101 "INSERT IGNORE INTO systempreferences (variable,value,explanation,options,type) VALUES('OverDriveLibraryID','','Library ID for OverDrive integration','','Integer')"
7102     );
7103     print "Upgrade to $DBversion done (Bug 10320 - Show results from library's OverDrive collection in OPAC search)\n";
7104     SetVersion($DBversion);
7105 }
7106
7107 $DBversion = "3.13.00.018";
7108 if ( CheckVersion($DBversion) ) {
7109     $dbh->do(qq{DROP TABLE IF EXISTS aqorders_transfers;});
7110     $dbh->do(qq{
7111         CREATE TABLE aqorders_transfers (
7112           ordernumber_from int(11) NULL,
7113           ordernumber_to int(11) NULL,
7114           timestamp timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
7115           UNIQUE KEY ordernumber_from (ordernumber_from),
7116           UNIQUE KEY ordernumber_to (ordernumber_to),
7117           CONSTRAINT aqorders_transfers_ordernumber_from FOREIGN KEY (ordernumber_from) REFERENCES aqorders (ordernumber) ON DELETE SET NULL ON UPDATE CASCADE,
7118           CONSTRAINT aqorders_transfers_ordernumber_to FOREIGN KEY (ordernumber_to) REFERENCES aqorders (ordernumber) ON DELETE SET NULL ON UPDATE CASCADE
7119         ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
7120     });
7121     print "Upgrade to $DBversion done (Bug 5349: Add aqorders_transfers table)\n";
7122     SetVersion($DBversion);
7123 }
7124
7125 $DBversion = "3.13.00.019";
7126 if ( CheckVersion($DBversion) ) {
7127     $dbh->do("ALTER TABLE itemtypes ADD COLUMN checkinmsg VARCHAR(255) AFTER summary;");
7128     $dbh->do("ALTER TABLE itemtypes ADD COLUMN checkinmsgtype CHAR(16) DEFAULT 'message' NOT NULL AFTER checkinmsg;");
7129     print "Upgrade to $DBversion done (Bug 10513 - Light up a warning/message when returning a chosen item type)\n";
7130     SetVersion($DBversion);
7131 }
7132
7133
7134 $DBversion = "3.13.00.020";
7135 if ( CheckVersion($DBversion) ) {
7136     $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')");
7137     $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')");
7138     print "Upgrade to $DBversion done (Bug 7639: system preferences to forgive fines on lost items)\n";
7139     SetVersion ($DBversion);
7140 }
7141
7142 $DBversion ="3.13.00.021";
7143 if ( CheckVersion($DBversion) ) {
7144     $dbh->do("INSERT IGNORE INTO systempreferences (variable,value,explanation,options,type) VALUES('ConfirmFutureHolds','0','Number of days for confirming future holds','','Integer');");
7145     print "Upgrade to $DBversion done (Bug 9761: Add ConfirmFutureHolds pref)\n";
7146     SetVersion($DBversion);
7147 }
7148
7149
7150 $DBversion = "3.13.00.022";
7151 if ( CheckVersion($DBversion) ) {
7152     $dbh->do("DELETE from auth_tag_structure WHERE tagfield IN ('68a','68b')");
7153     $dbh->do("DELETE from auth_subfield_structure WHERE tagfield IN ('68a','68b')");
7154     print "Upgrade to $DBversion done (Bug 10687 - Delete erroneous tags 68a and 68b on default MARC21 auth framework)\n";
7155     SetVersion($DBversion);
7156 }
7157
7158 $DBversion = "3.13.00.023";
7159 if ( CheckVersion($DBversion) ) {
7160     $dbh->do("ALTER TABLE borrowers CHANGE password password VARCHAR(60);");
7161     print "Upgrade to $DBversion done (Bug 9611 upgrading password storage system)\n";
7162     SetVersion($DBversion);
7163 }
7164
7165 $DBversion = "3.13.00.024";
7166 if ( CheckVersion($DBversion) ) {
7167     $dbh->do(q{ALTER TABLE z3950servers ADD COLUMN recordtype VARCHAR(45) NOT NULL DEFAULT 'biblio' AFTER description;});
7168     print "Upgrade to $DBversion done (Bug 10096 - Add a Z39.50 interface for authority searching)\n";
7169     SetVersion ($DBversion);
7170 }
7171
7172 $DBversion = "3.13.00.025";
7173 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
7174    $dbh->do("ALTER TABLE oai_sets_mappings ADD COLUMN operator varchar(8) NOT NULL default 'equal' AFTER marcsubfield;");
7175    print "Upgrade to $DBversion done (Bug 9295: OAI notequal: add operator column to OAI mappings table)\n";
7176    SetVersion ($DBversion);
7177 }
7178
7179 $DBversion = "3.13.00.026";
7180 if ( CheckVersion($DBversion) ) {
7181     $dbh->do(q|
7182         ALTER TABLE auth_subfield_structure ADD COLUMN defaultvalue TEXT DEFAULT NULL AFTER frameworkcode
7183     |);
7184     print "Upgrade to $DBversion done (Bug 10602: Add the column auth_subfield_structure.defaultvalue)\n";
7185     SetVersion($DBversion);
7186 }
7187
7188 $DBversion = "3.13.00.027";
7189 if ( CheckVersion($DBversion) ) {
7190     $dbh->do("INSERT INTO systempreferences (variable,value,options,explanation,type) VALUES ('AllowOfflineCirculation','0','','If on, enables HTML5 offline circulation functionality.','YesNo')");
7191     print "Upgrade to $DBversion done (Bug 10240: Add syspref AllowOfflineCirculation)\n";
7192     SetVersion ($DBversion);
7193 }
7194
7195 $DBversion = "3.13.00.028";
7196 if ( CheckVersion($DBversion) ) {
7197     $dbh->do(q{
7198         ALTER TABLE export_format ADD type VARCHAR(255) DEFAULT 'marc' AFTER encoding
7199     });
7200     $dbh->do(q{
7201         ALTER TABLE export_format CHANGE marcfields content mediumtext NOT NULL
7202     });
7203     print "Upgrade to $DBversion done (Bug 10853: Add new field export_format.type and rename export_format.marcfields with export_format.content)\n";
7204     SetVersion($DBversion);
7205 }
7206
7207 $DBversion = "3.13.00.029";
7208 if ( CheckVersion($DBversion) ) {
7209     $dbh->do(q{
7210         INSERT IGNORE INTO export_format( profile, description, content, csv_separator, type ) 
7211         VALUES ( "issues to claim", "efault CSV export for serial issue claims",
7212                 "SUPPLIER=aqbooksellers.name|TITLE=subscription.title|ISSUE NUMBER=serial.serialseq|LATE SINCE=serial.planneddate", 
7213                 ",", "sql" )
7214     });
7215     print "Upgrade to $DBversion done (Bug 10854: Add the default CSV profile for claiming issues)\n";
7216     SetVersion($DBversion);
7217 }
7218
7219 $DBversion = "3.13.00.030";
7220 if ( CheckVersion($DBversion) ) {
7221     $dbh->do(qq{
7222         DELETE FROM patronimage WHERE NOT EXISTS (SELECT * FROM borrowers WHERE borrowers.cardnumber = patronimage.cardnumber)
7223     });
7224
7225     $dbh->do(qq{
7226         ALTER TABLE patronimage ADD borrowernumber INT( 11 ) NULL FIRST
7227     });
7228
7229     $dbh->{AutoCommit} = 0;
7230     $dbh->{RaiseError} = 1;
7231
7232     eval {
7233         $dbh->do(qq{
7234             UPDATE patronimage LEFT JOIN borrowers USING ( cardnumber ) SET patronimage.borrowernumber = borrowers.borrowernumber
7235         });
7236         $dbh->commit();
7237     };
7238
7239     if ($@) {
7240         print "Upgrade to $DBversion done (Bug 10636 - patronimage should have borrowernumber as PK, not cardnumber) failed! Transaction aborted because $@\n";
7241         eval { $dbh->rollback };
7242     }
7243     else {
7244         $dbh->do(qq{
7245             ALTER TABLE patronimage DROP FOREIGN KEY patronimage_fk1
7246         });
7247         $dbh->do(qq{
7248             ALTER TABLE patronimage DROP PRIMARY KEY, ADD PRIMARY KEY( borrowernumber )
7249         });
7250         $dbh->do(qq{
7251             ALTER TABLE patronimage DROP cardnumber
7252         });
7253         $dbh->do(qq{
7254             ALTER TABLE patronimage ADD FOREIGN KEY ( borrowernumber ) REFERENCES borrowers ( borrowernumber ) ON DELETE CASCADE ON UPDATE CASCADE
7255         });
7256
7257         print "Upgrade to $DBversion done (Bug 10636 - patronimage should have borrowernumber as PK, not cardnumber)\n";
7258         SetVersion($DBversion);
7259     }
7260
7261     $dbh->{AutoCommit} = 1;
7262     $dbh->{RaiseError} = 0;
7263 }
7264
7265 $DBversion = "3.13.00.031";
7266 if ( CheckVersion($DBversion) ) {
7267
7268     $dbh->do(q{
7269         CREATE TABLE IF NOT EXISTS `patron_lists` (
7270           patron_list_id int(11) NOT NULL AUTO_INCREMENT,
7271           name varchar(255) CHARACTER SET utf8 NOT NULL,
7272           owner int(11) NOT NULL,
7273           PRIMARY KEY (patron_list_id),
7274           KEY owner (owner)
7275         ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
7276     });
7277
7278     $dbh->do(q{
7279         ALTER TABLE `patron_lists`
7280           ADD CONSTRAINT patron_lists_ibfk_1 FOREIGN KEY (`owner`) REFERENCES borrowers (borrowernumber) ON DELETE CASCADE ON UPDATE CASCADE;
7281     });
7282
7283     $dbh->do(q{
7284         CREATE TABLE patron_list_patrons (
7285           patron_list_patron_id int(11) NOT NULL AUTO_INCREMENT,
7286           patron_list_id int(11) NOT NULL,
7287           borrowernumber int(11) NOT NULL,
7288           PRIMARY KEY (patron_list_patron_id),
7289           KEY patron_list_id (patron_list_id),
7290           KEY borrowernumber (borrowernumber)
7291         ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
7292     });
7293
7294     $dbh->do(q{
7295         ALTER TABLE `patron_list_patrons`
7296           ADD CONSTRAINT patron_list_patrons_ibfk_1 FOREIGN KEY (patron_list_id) REFERENCES patron_lists (patron_list_id) ON DELETE CASCADE ON UPDATE CASCADE,
7297           ADD CONSTRAINT patron_list_patrons_ibfk_2 FOREIGN KEY (borrowernumber) REFERENCES borrowers (borrowernumber) ON DELETE CASCADE ON UPDATE CASCADE;
7298     });
7299
7300     print "Upgrade to $DBversion done (Bug 10565 - Add a 'Patron List' feature for storing and manipulating collections of patrons)\n";
7301     SetVersion($DBversion);
7302 }
7303
7304 =head1 FUNCTIONS
7305
7306 =head2 TableExists($table)
7307
7308 =cut
7309
7310 sub TableExists {
7311     my $table = shift;
7312     eval {
7313                 local $dbh->{PrintError} = 0;
7314                 local $dbh->{RaiseError} = 1;
7315                 $dbh->do(qq{SELECT * FROM $table WHERE 1 = 0 });
7316             };
7317     return 1 unless $@;
7318     return 0;
7319 }
7320
7321 =head2 DropAllForeignKeys($table)
7322
7323 Drop all foreign keys of the table $table
7324
7325 =cut
7326
7327 sub DropAllForeignKeys {
7328     my ($table) = @_;
7329     # get the table description
7330     my $sth = $dbh->prepare("SHOW CREATE TABLE $table");
7331     $sth->execute;
7332     my $vsc_structure = $sth->fetchrow;
7333     # split on CONSTRAINT keyword
7334     my @fks = split /CONSTRAINT /,$vsc_structure;
7335     # parse each entry
7336     foreach (@fks) {
7337         # isolate what is before FOREIGN KEY, if there is something, it's a foreign key to drop
7338         $_ = /(.*) FOREIGN KEY.*/;
7339         my $id = $1;
7340         if ($id) {
7341             # we have found 1 foreign, drop it
7342             $dbh->do("ALTER TABLE $table DROP FOREIGN KEY $id");
7343             $id="";
7344         }
7345     }
7346 }
7347
7348
7349 =head2 TransformToNum
7350
7351 Transform the Koha version from a 4 parts string
7352 to a number, with just 1 .
7353
7354 =cut
7355
7356 sub TransformToNum {
7357     my $version = shift;
7358     # remove the 3 last . to have a Perl number
7359     $version =~ s/(.*\..*)\.(.*)\.(.*)/$1$2$3/;
7360     # three X's at the end indicate that you are testing patch with dbrev
7361     # change it into 999
7362     # prevents error on a < comparison between strings (should be: lt)
7363     $version =~ s/XXX$/999/;
7364     return $version;
7365 }
7366
7367 =head2 SetVersion
7368
7369 set the DBversion in the systempreferences
7370
7371 =cut
7372
7373 sub SetVersion {
7374     return if $_[0]=~ /XXX$/;
7375       #you are testing a patch with a db revision; do not change version
7376     my $kohaversion = TransformToNum($_[0]);
7377     if (C4::Context->preference('Version')) {
7378       my $finish=$dbh->prepare("UPDATE systempreferences SET value=? WHERE variable='Version'");
7379       $finish->execute($kohaversion);
7380     } else {
7381       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')");
7382       $finish->execute($kohaversion);
7383     }
7384     C4::Context::clear_syspref_cache(); # invalidate cached preferences
7385 }
7386
7387 =head2 CheckVersion
7388
7389 Check whether a given update should be run when passed the proposed version
7390 number. The update will always be run if the proposed version is greater
7391 than the current database version and less than or equal to the version in
7392 kohaversion.pl. The update is also run if the version contains XXX, though
7393 this behavior will be changed following the adoption of non-linear updates
7394 as implemented in bug 7167.
7395
7396 =cut
7397
7398 sub CheckVersion {
7399     my ($proposed_version) = @_;
7400     my $version_number = TransformToNum($proposed_version);
7401
7402     # The following line should be deleted when bug 7167 is pushed
7403     return 1 if ( $proposed_version =~ m/XXX/ );
7404
7405     if ( C4::Context->preference("Version") < $version_number
7406         && $version_number <= TransformToNum( C4::Context->final_linear_version ) )
7407     {
7408         return 1;
7409     }
7410     else {
7411         return 0;
7412     }
7413 }
7414
7415 exit;