Bug 7741 - DBRev 16.06.00.013 - Add IGNORE to insert in case of backporting
[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
10 # under the terms of the GNU General Public License as published by
11 # the Free Software Foundation; either version 3 of the License, or
12 # (at your option) any later version.
13 #
14 # Koha is distributed in the hope that it will be useful, but
15 # WITHOUT ANY WARRANTY; without even the implied warranty of
16 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 # GNU General Public License for more details.
18 #
19 # You should have received a copy of the GNU General Public License
20 # along with Koha; if not, see <http://www.gnu.org/licenses>.
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 Koha::Database;
40 use Koha;
41 use Koha::DateUtils;
42
43 use MARC::Record;
44 use MARC::File::XML ( BinaryEncoding => 'utf8' );
45
46 use File::Path qw[remove_tree]; # perl core module
47 use File::Spec;
48
49 # FIXME - The user might be installing a new database, so can't rely
50 # on /etc/koha.conf anyway.
51
52 my $debug = 0;
53
54 my (
55     $sth, $sti,
56     $query,
57     %existingtables,    # tables already in database
58     %types,
59     $table,
60     $column,
61     $type, $null, $key, $default, $extra,
62     $prefitem,          # preference item in systempreferences table
63 );
64
65 my $schema = Koha::Database->new()->schema();
66
67 my $silent;
68 GetOptions(
69     's' =>\$silent
70     );
71 my $dbh = C4::Context->dbh;
72 $|=1; # flushes output
73
74 local $dbh->{RaiseError} = 0;
75
76 # Record the version we are coming from
77
78 my $original_version = C4::Context->preference("Version");
79
80 # Deal with virtualshelves
81 my $DBversion = "3.00.00.001";
82 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
83     # update virtualshelves table to
84     #
85     $dbh->do("ALTER TABLE `bookshelf` RENAME `virtualshelves`");
86     $dbh->do("ALTER TABLE `shelfcontents` RENAME `virtualshelfcontents`");
87     $dbh->do("ALTER TABLE `virtualshelfcontents` ADD `biblionumber` INT( 11 ) NOT NULL default '0' AFTER shelfnumber");
88     $dbh->do("UPDATE `virtualshelfcontents` SET biblionumber=(SELECT biblionumber FROM items WHERE items.itemnumber=virtualshelfcontents.itemnumber)");
89     # drop all foreign keys : otherwise, we can't drop itemnumber field.
90     DropAllForeignKeys('virtualshelfcontents');
91     $dbh->do("ALTER TABLE `virtualshelfcontents` ADD KEY biblionumber (biblionumber)");
92     # create the new foreign keys (on biblionumber)
93     $dbh->do("ALTER TABLE `virtualshelfcontents` ADD CONSTRAINT `virtualshelfcontents_ibfk_1` FOREIGN KEY (`shelfnumber`) REFERENCES `virtualshelves` (`shelfnumber`) ON DELETE CASCADE ON UPDATE CASCADE");
94     # re-create the foreign key on virtualshelf
95     $dbh->do("ALTER TABLE `virtualshelfcontents` ADD CONSTRAINT `shelfcontents_ibfk_2` FOREIGN KEY (`biblionumber`) REFERENCES `biblio` (`biblionumber`) ON DELETE CASCADE ON UPDATE CASCADE");
96     $dbh->do("ALTER TABLE `virtualshelfcontents` DROP `itemnumber`");
97     print "Upgrade to $DBversion done (virtualshelves)\n";
98     SetVersion ($DBversion);
99 }
100
101
102 $DBversion = "3.00.00.002";
103 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
104     $dbh->do("DROP TABLE sessions");
105     $dbh->do("CREATE TABLE `sessions` (
106   `id` varchar(32) NOT NULL,
107   `a_session` text NOT NULL,
108   UNIQUE KEY `id` (`id`)
109 ) ENGINE=InnoDB DEFAULT CHARSET=utf8;");
110     print "Upgrade to $DBversion done (sessions uses CGI::session, new table structure for sessions)\n";
111     SetVersion ($DBversion);
112 }
113
114
115 $DBversion = "3.00.00.003";
116 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
117     if (C4::Context->preference("opaclanguages") eq "fr") {
118         $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')");
119     } else {
120         $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')");
121     }
122     print "Upgrade to $DBversion done (adding ReservesNeedReturns systempref, in circulation)\n";
123     SetVersion ($DBversion);
124 }
125
126
127 $DBversion = "3.00.00.004";
128 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
129     $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')");
130     print "Upgrade to $DBversion done (adding DebugLevel systempref, in 'Admin' tab)\n";
131     SetVersion ($DBversion);
132 }
133
134 $DBversion = "3.00.00.005";
135 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
136     $dbh->do("CREATE TABLE `tags` (
137                     `entry` varchar(255) NOT NULL default '',
138                     `weight` bigint(20) NOT NULL default 0,
139                     PRIMARY KEY  (`entry`)
140                     ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
141                 ");
142         $dbh->do("CREATE TABLE `nozebra` (
143                 `server` varchar(20)     NOT NULL,
144                 `indexname` varchar(40)  NOT NULL,
145                 `value` varchar(250)     NOT NULL,
146                 `biblionumbers` longtext NOT NULL,
147                 KEY `indexname` (`server`,`indexname`),
148                 KEY `value` (`server`,`value`))
149                 ENGINE=InnoDB DEFAULT CHARSET=utf8;
150                 ");
151     print "Upgrade to $DBversion done (adding tags and nozebra tables )\n";
152     SetVersion ($DBversion);
153 }
154
155 $DBversion = "3.00.00.006";
156 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
157     $dbh->do("UPDATE issues SET issuedate=timestamp WHERE issuedate='0000-00-00'");
158     print "Upgrade to $DBversion done (filled issues.issuedate with timestamp)\n";
159     SetVersion ($DBversion);
160 }
161
162 $DBversion = "3.00.00.007";
163 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
164     $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')");
165     print "Upgrade to $DBversion done (set SessionStorage variable)\n";
166     SetVersion ($DBversion);
167 }
168
169 $DBversion = "3.00.00.008";
170 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
171     $dbh->do("ALTER TABLE `biblio` ADD `datecreated` DATE NOT NULL AFTER `timestamp` ;");
172     $dbh->do("UPDATE biblio SET datecreated=timestamp");
173     print "Upgrade to $DBversion done (biblio creation date)\n";
174     SetVersion ($DBversion);
175 }
176
177 $DBversion = "3.00.00.009";
178 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
179
180     # Create backups of call number columns
181     # in case default migration needs to be customized
182     #
183     # UPGRADE NOTE: temp_upg_biblioitems_call_num should be dropped
184     #               after call numbers have been transformed to the new structure
185     #
186     # Not bothering to do the same with deletedbiblioitems -- assume
187     # default is good enough.
188     $dbh->do("CREATE TABLE `temp_upg_biblioitems_call_num` AS
189               SELECT `biblioitemnumber`, `biblionumber`,
190                      `classification`, `dewey`, `subclass`,
191                      `lcsort`, `ccode`
192               FROM `biblioitems`");
193
194     # biblioitems changes
195     $dbh->do("ALTER TABLE `biblioitems` CHANGE COLUMN `volumeddesc` `volumedesc` TEXT,
196                                     ADD `cn_source` VARCHAR(10) DEFAULT NULL AFTER `ccode`,
197                                     ADD `cn_class` VARCHAR(30) DEFAULT NULL AFTER `cn_source`,
198                                     ADD `cn_item` VARCHAR(10) DEFAULT NULL AFTER `cn_class`,
199                                     ADD `cn_suffix` VARCHAR(10) DEFAULT NULL AFTER `cn_item`,
200                                     ADD `cn_sort` VARCHAR(30) DEFAULT NULL AFTER `cn_suffix`,
201                                     ADD `totalissues` INT(10) AFTER `cn_sort`");
202
203     # default mapping of call number columns:
204     #   cn_class = concatentation of classification + dewey,
205     #              trimmed to fit -- assumes that most users do not
206     #              populate both classification and dewey in a single record
207     #   cn_item  = subclass
208     #   cn_source = left null
209     #   cn_sort = lcsort
210     #
211     # After upgrade, cn_sort will have to be set based on whatever
212     # default call number scheme user sets as a preference.  Misc
213     # script will be added at some point to do that.
214     #
215     $dbh->do("UPDATE `biblioitems`
216               SET cn_class = SUBSTR(TRIM(CONCAT_WS(' ', `classification`, `dewey`)), 1, 30),
217                     cn_item = subclass,
218                     `cn_sort` = `lcsort`
219             ");
220
221     # Now drop the old call number columns
222     $dbh->do("ALTER TABLE `biblioitems` DROP COLUMN `classification`,
223                                         DROP COLUMN `dewey`,
224                                         DROP COLUMN `subclass`,
225                                         DROP COLUMN `lcsort`,
226                                         DROP COLUMN `ccode`");
227
228     # deletedbiblio changes
229     $dbh->do("ALTER TABLE `deletedbiblio` ALTER COLUMN `frameworkcode` SET DEFAULT '',
230                                         DROP COLUMN `marc`,
231                                         ADD `datecreated` DATE NOT NULL AFTER `timestamp`");
232     $dbh->do("UPDATE deletedbiblio SET datecreated = timestamp");
233
234     # deletedbiblioitems changes
235     $dbh->do("ALTER TABLE `deletedbiblioitems`
236                         MODIFY `publicationyear` TEXT,
237                         CHANGE `volumeddesc` `volumedesc` TEXT,
238                         MODIFY `collectiontitle` MEDIUMTEXT DEFAULT NULL AFTER `volumedesc`,
239                         MODIFY `collectionissn` TEXT DEFAULT NULL AFTER `collectiontitle`,
240                         MODIFY `collectionvolume` MEDIUMTEXT DEFAULT NULL AFTER `collectionissn`,
241                         MODIFY `editionstatement` TEXT DEFAULT NULL AFTER `collectionvolume`,
242                         MODIFY `editionresponsibility` TEXT DEFAULT NULL AFTER `editionstatement`,
243                         MODIFY `place` VARCHAR(255) DEFAULT NULL AFTER `size`,
244                         MODIFY `marc` LONGBLOB,
245                         ADD `cn_source` VARCHAR(10) DEFAULT NULL AFTER `url`,
246                         ADD `cn_class` VARCHAR(30) DEFAULT NULL AFTER `cn_source`,
247                         ADD `cn_item` VARCHAR(10) DEFAULT NULL AFTER `cn_class`,
248                         ADD `cn_suffix` VARCHAR(10) DEFAULT NULL AFTER `cn_item`,
249                         ADD `cn_sort` VARCHAR(30) DEFAULT NULL AFTER `cn_suffix`,
250                         ADD `totalissues` INT(10) AFTER `cn_sort`,
251                         ADD `marcxml` LONGTEXT NOT NULL AFTER `totalissues`,
252                         ADD KEY `isbn` (`isbn`),
253                         ADD KEY `publishercode` (`publishercode`)
254                     ");
255
256     $dbh->do("UPDATE `deletedbiblioitems`
257                 SET `cn_class` = SUBSTR(TRIM(CONCAT_WS(' ', `classification`, `dewey`)), 1, 30),
258                `cn_item` = `subclass`,
259                 `cn_sort` = `lcsort`
260             ");
261     $dbh->do("ALTER TABLE `deletedbiblioitems`
262                         DROP COLUMN `classification`,
263                         DROP COLUMN `dewey`,
264                         DROP COLUMN `subclass`,
265                         DROP COLUMN `lcsort`,
266                         DROP COLUMN `ccode`
267             ");
268
269     # deleteditems changes
270     $dbh->do("ALTER TABLE `deleteditems`
271                         MODIFY `barcode` VARCHAR(20) DEFAULT NULL,
272                         MODIFY `price` DECIMAL(8,2) DEFAULT NULL,
273                         MODIFY `replacementprice` DECIMAL(8,2) DEFAULT NULL,
274                         DROP `bulk`,
275                         MODIFY `itemcallnumber` VARCHAR(30) DEFAULT NULL AFTER `wthdrawn`,
276                         MODIFY `holdingbranch` VARCHAR(10) DEFAULT NULL,
277                         DROP `interim`,
278                         MODIFY `timestamp` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP AFTER `paidfor`,
279                         DROP `cutterextra`,
280                         ADD `cn_source` VARCHAR(10) DEFAULT NULL AFTER `onloan`,
281                         ADD `cn_sort` VARCHAR(30) DEFAULT NULL AFTER `cn_source`,
282                         ADD `ccode` VARCHAR(10) DEFAULT NULL AFTER `cn_sort`,
283                         ADD `materials` VARCHAR(10) DEFAULT NULL AFTER `ccode`,
284                         ADD `uri` VARCHAR(255) DEFAULT NULL AFTER `materials`,
285                         MODIFY `marc` LONGBLOB AFTER `uri`,
286                         DROP KEY `barcode`,
287                         DROP KEY `itembarcodeidx`,
288                         DROP KEY `itembinoidx`,
289                         DROP KEY `itembibnoidx`,
290                         ADD UNIQUE KEY `delitembarcodeidx` (`barcode`),
291                         ADD KEY `delitembinoidx` (`biblioitemnumber`),
292                         ADD KEY `delitembibnoidx` (`biblionumber`),
293                         ADD KEY `delhomebranch` (`homebranch`),
294                         ADD KEY `delholdingbranch` (`holdingbranch`)");
295     $dbh->do("UPDATE deleteditems SET `ccode` = `itype`");
296     $dbh->do("ALTER TABLE deleteditems DROP `itype`");
297     $dbh->do("UPDATE `deleteditems` SET `cn_sort` = `itemcallnumber`");
298
299     # items changes
300     $dbh->do("ALTER TABLE `items` ADD `cn_source` VARCHAR(10) DEFAULT NULL AFTER `onloan`,
301                                 ADD `cn_sort` VARCHAR(30) DEFAULT NULL AFTER `cn_source`,
302                                 ADD `ccode` VARCHAR(10) DEFAULT NULL AFTER `cn_sort`,
303                                 ADD `materials` VARCHAR(10) DEFAULT NULL AFTER `ccode`,
304                                 ADD `uri` VARCHAR(255) DEFAULT NULL AFTER `materials`
305             ");
306     $dbh->do("ALTER TABLE `items`
307                         DROP KEY `itembarcodeidx`,
308                         ADD UNIQUE KEY `itembarcodeidx` (`barcode`)");
309
310     # map items.itype to items.ccode and
311     # set cn_sort to itemcallnumber -- as with biblioitems.cn_sort,
312     # will have to be subsequently updated per user's default
313     # classification scheme
314     $dbh->do("UPDATE `items` SET `cn_sort` = `itemcallnumber`,
315                             `ccode` = `itype`");
316
317     $dbh->do("ALTER TABLE `items` DROP `cutterextra`,
318                                 DROP `itype`");
319
320     print "Upgrade to $DBversion done (major changes to biblio, biblioitems, items, and deleted* versions of same\n";
321     SetVersion ($DBversion);
322 }
323
324 $DBversion = "3.00.00.010";
325 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
326     $dbh->do("CREATE INDEX `userid` ON borrowers (`userid`) ");
327     print "Upgrade to $DBversion done (userid index added)\n";
328     SetVersion ($DBversion);
329 }
330
331 $DBversion = "3.00.00.011";
332 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
333     $dbh->do("ALTER TABLE `branchcategories` CHANGE `categorycode` `categorycode` varchar(10) ");
334     $dbh->do("ALTER TABLE `branchcategories` CHANGE `categoryname` `categoryname` varchar(32) ");
335     $dbh->do("ALTER TABLE `branchcategories` ADD COLUMN `categorytype` varchar(16) ");
336     $dbh->do("UPDATE `branchcategories` SET `categorytype` = 'properties'");
337     $dbh->do("ALTER TABLE `branchrelations` CHANGE `categorycode` `categorycode` varchar(10) ");
338     print "Upgrade to $DBversion done (added branchcategory type)\n";
339     SetVersion ($DBversion);
340 }
341
342 $DBversion = "3.00.00.012";
343 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
344     $dbh->do("CREATE TABLE `class_sort_rules` (
345                                `class_sort_rule` varchar(10) NOT NULL default '',
346                                `description` mediumtext,
347                                `sort_routine` varchar(30) NOT NULL default '',
348                                PRIMARY KEY (`class_sort_rule`),
349                                UNIQUE KEY `class_sort_rule_idx` (`class_sort_rule`)
350                              ) ENGINE=InnoDB DEFAULT CHARSET=utf8");
351     $dbh->do("CREATE TABLE `class_sources` (
352                                `cn_source` varchar(10) NOT NULL default '',
353                                `description` mediumtext,
354                                `used` tinyint(4) NOT NULL default 0,
355                                `class_sort_rule` varchar(10) NOT NULL default '',
356                                PRIMARY KEY (`cn_source`),
357                                UNIQUE KEY `cn_source_idx` (`cn_source`),
358                                KEY `used_idx` (`used`),
359                                CONSTRAINT `class_source_ibfk_1` FOREIGN KEY (`class_sort_rule`)
360                                           REFERENCES `class_sort_rules` (`class_sort_rule`)
361                              ) ENGINE=InnoDB DEFAULT CHARSET=utf8");
362     $dbh->do("INSERT INTO `systempreferences` (variable,value,explanation,options,type)
363               VALUES('DefaultClassificationSource','ddc',
364                      'Default classification scheme used by the collection. E.g., Dewey, LCC, etc.', NULL,'free')");
365     $dbh->do("INSERT INTO `class_sort_rules` (`class_sort_rule`, `description`, `sort_routine`) VALUES
366                                ('dewey', 'Default filing rules for DDC', 'Dewey'),
367                                ('lcc', 'Default filing rules for LCC', 'LCC'),
368                                ('generic', 'Generic call number filing rules', 'Generic')");
369     $dbh->do("INSERT INTO `class_sources` (`cn_source`, `description`, `used`, `class_sort_rule`) VALUES
370                             ('ddc', 'Dewey Decimal Classification', 1, 'dewey'),
371                             ('lcc', 'Library of Congress Classification', 1, 'lcc'),
372                             ('udc', 'Universal Decimal Classification', 0, 'generic'),
373                             ('sudocs', 'SuDoc Classification (U.S. GPO)', 0, 'generic'),
374                             ('z', 'Other/Generic Classification Scheme', 0, 'generic')");
375     print "Upgrade to $DBversion done (classification sources added)\n";
376     SetVersion ($DBversion);
377 }
378
379 $DBversion = "3.00.00.013";
380 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
381     $dbh->do("CREATE TABLE `import_batches` (
382               `import_batch_id` int(11) NOT NULL auto_increment,
383               `template_id` int(11) default NULL,
384               `branchcode` varchar(10) default NULL,
385               `num_biblios` int(11) NOT NULL default 0,
386               `num_items` int(11) NOT NULL default 0,
387               `upload_timestamp` timestamp NOT NULL default CURRENT_TIMESTAMP,
388               `overlay_action` enum('replace', 'create_new', 'use_template') NOT NULL default 'create_new',
389               `import_status` enum('staging', 'staged', 'importing', 'imported', 'reverting', 'reverted', 'cleaned') NOT NULL default 'staging',
390               `batch_type` enum('batch', 'z3950') NOT NULL default 'batch',
391               `file_name` varchar(100),
392               `comments` mediumtext,
393               PRIMARY KEY (`import_batch_id`),
394               KEY `branchcode` (`branchcode`)
395               ) ENGINE=InnoDB DEFAULT CHARSET=utf8");
396     $dbh->do("CREATE TABLE `import_records` (
397               `import_record_id` int(11) NOT NULL auto_increment,
398               `import_batch_id` int(11) NOT NULL,
399               `branchcode` varchar(10) default NULL,
400               `record_sequence` int(11) NOT NULL default 0,
401               `upload_timestamp` timestamp NOT NULL default CURRENT_TIMESTAMP,
402               `import_date` DATE default NULL,
403               `marc` longblob NOT NULL,
404               `marcxml` longtext NOT NULL,
405               `marcxml_old` longtext NOT NULL,
406               `record_type` enum('biblio', 'auth', 'holdings') NOT NULL default 'biblio',
407               `overlay_status` enum('no_match', 'auto_match', 'manual_match', 'match_applied') NOT NULL default 'no_match',
408               `status` enum('error', 'staged', 'imported', 'reverted', 'items_reverted') NOT NULL default 'staged',
409               `import_error` mediumtext,
410               `encoding` varchar(40) NOT NULL default '',
411               `z3950random` varchar(40) default NULL,
412               PRIMARY KEY (`import_record_id`),
413               CONSTRAINT `import_records_ifbk_1` FOREIGN KEY (`import_batch_id`)
414                           REFERENCES `import_batches` (`import_batch_id`) ON DELETE CASCADE ON UPDATE CASCADE,
415               KEY `branchcode` (`branchcode`),
416               KEY `batch_sequence` (`import_batch_id`, `record_sequence`)
417               ) ENGINE=InnoDB DEFAULT CHARSET=utf8");
418     $dbh->do("CREATE TABLE `import_record_matches` (
419               `import_record_id` int(11) NOT NULL,
420               `candidate_match_id` int(11) NOT NULL,
421               `score` int(11) NOT NULL default 0,
422               CONSTRAINT `import_record_matches_ibfk_1` FOREIGN KEY (`import_record_id`)
423                           REFERENCES `import_records` (`import_record_id`) ON DELETE CASCADE ON UPDATE CASCADE,
424               KEY `record_score` (`import_record_id`, `score`)
425               ) ENGINE=InnoDB DEFAULT CHARSET=utf8");
426     $dbh->do("CREATE TABLE `import_biblios` (
427               `import_record_id` int(11) NOT NULL,
428               `matched_biblionumber` int(11) default NULL,
429               `control_number` varchar(25) default NULL,
430               `original_source` varchar(25) default NULL,
431               `title` varchar(128) default NULL,
432               `author` varchar(80) default NULL,
433               `isbn` varchar(14) default NULL,
434               `issn` varchar(9) default NULL,
435               `has_items` tinyint(1) NOT NULL default 0,
436               CONSTRAINT `import_biblios_ibfk_1` FOREIGN KEY (`import_record_id`)
437                           REFERENCES `import_records` (`import_record_id`) ON DELETE CASCADE ON UPDATE CASCADE,
438               KEY `matched_biblionumber` (`matched_biblionumber`),
439               KEY `title` (`title`),
440               KEY `isbn` (`isbn`)
441               ) ENGINE=InnoDB DEFAULT CHARSET=utf8");
442     $dbh->do("CREATE TABLE `import_items` (
443               `import_items_id` int(11) NOT NULL auto_increment,
444               `import_record_id` int(11) NOT NULL,
445               `itemnumber` int(11) default NULL,
446               `branchcode` varchar(10) default NULL,
447               `status` enum('error', 'staged', 'imported', 'reverted') NOT NULL default 'staged',
448               `marcxml` longtext NOT NULL,
449               `import_error` mediumtext,
450               PRIMARY KEY (`import_items_id`),
451               CONSTRAINT `import_items_ibfk_1` FOREIGN KEY (`import_record_id`)
452                           REFERENCES `import_records` (`import_record_id`) ON DELETE CASCADE ON UPDATE CASCADE,
453               KEY `itemnumber` (`itemnumber`),
454               KEY `branchcode` (`branchcode`)
455               ) ENGINE=InnoDB DEFAULT CHARSET=utf8");
456
457     $dbh->do("INSERT INTO `import_batches`
458                 (`overlay_action`, `import_status`, `batch_type`, `file_name`)
459               SELECT distinct 'create_new', 'staged', 'z3950', `file`
460               FROM   `marc_breeding`");
461
462     $dbh->do("INSERT INTO `import_records`
463                 (`import_batch_id`, `import_record_id`, `record_sequence`, `marc`, `record_type`, `status`,
464                 `encoding`, `z3950random`, `marcxml`, `marcxml_old`)
465               SELECT `import_batch_id`, `id`, 1, `marc`, 'biblio', 'staged', `encoding`, `z3950random`, '', ''
466               FROM `marc_breeding`
467               JOIN `import_batches` ON (`file_name` = `file`)");
468
469     $dbh->do("INSERT INTO `import_biblios`
470                 (`import_record_id`, `title`, `author`, `isbn`)
471               SELECT `import_record_id`, `title`, `author`, `isbn`
472               FROM   `marc_breeding`
473               JOIN   `import_records` ON (`import_record_id` = `id`)");
474
475     $dbh->do("UPDATE `import_batches`
476               SET `num_biblios` = (
477               SELECT COUNT(*)
478               FROM `import_records`
479               WHERE `import_batch_id` = `import_batches`.`import_batch_id`
480               )");
481
482     $dbh->do("DROP TABLE `marc_breeding`");
483
484     print "Upgrade to $DBversion done (import_batches et al. added)\n";
485     SetVersion ($DBversion);
486 }
487
488 $DBversion = "3.00.00.014";
489 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
490     $dbh->do("ALTER TABLE subscription ADD lastbranch VARCHAR(4)");
491     print "Upgrade to $DBversion done (userid index added)\n";
492     SetVersion ($DBversion);
493 }
494
495 $DBversion = "3.00.00.015";
496 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
497     $dbh->do("CREATE TABLE `saved_sql` (
498            `id` int(11) NOT NULL auto_increment,
499            `borrowernumber` int(11) default NULL,
500            `date_created` datetime default NULL,
501            `last_modified` datetime default NULL,
502            `savedsql` text,
503            `last_run` datetime default NULL,
504            `report_name` varchar(255) default NULL,
505            `type` varchar(255) default NULL,
506            `notes` text,
507            PRIMARY KEY  (`id`),
508            KEY boridx (`borrowernumber`)
509         ) ENGINE=InnoDB DEFAULT CHARSET=utf8;");
510     $dbh->do("CREATE TABLE `saved_reports` (
511            `id` int(11) NOT NULL auto_increment,
512            `report_id` int(11) default NULL,
513            `report` longtext,
514            `date_run` datetime default NULL,
515            PRIMARY KEY  (`id`)
516         ) ENGINE=InnoDB DEFAULT CHARSET=utf8;");
517     print "Upgrade to $DBversion done (saved_sql and saved_reports added)\n";
518     SetVersion ($DBversion);
519 }
520
521 $DBversion = "3.00.00.016";
522 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
523     $dbh->do(" CREATE TABLE reports_dictionary (
524           id int(11) NOT NULL auto_increment,
525           name varchar(255) default NULL,
526           description text,
527           date_created datetime default NULL,
528           date_modified datetime default NULL,
529           saved_sql text,
530           area int(11) default NULL,
531           PRIMARY KEY  (id)
532         ) ENGINE=InnoDB DEFAULT CHARSET=utf8 ");
533     print "Upgrade to $DBversion done (reports_dictionary) added)\n";
534     SetVersion ($DBversion);
535 }
536
537 $DBversion = "3.00.00.017";
538 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
539     $dbh->do("ALTER TABLE action_logs DROP PRIMARY KEY");
540     $dbh->do("ALTER TABLE action_logs ADD KEY  timestamp (timestamp,user)");
541     $dbh->do("ALTER TABLE action_logs ADD action_id INT(11) NOT NULL FIRST");
542     $dbh->do("UPDATE action_logs SET action_id = if (\@a, \@a:=\@a+1, \@a:=1)");
543     $dbh->do("ALTER TABLE action_logs MODIFY action_id INT(11) NOT NULL AUTO_INCREMENT PRIMARY KEY");
544     print "Upgrade to $DBversion done (added column to action_logs)\n";
545     SetVersion ($DBversion);
546 }
547
548 $DBversion = "3.00.00.018";
549 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
550     $dbh->do("ALTER TABLE `zebraqueue`
551                     ADD `done` INT NOT NULL DEFAULT '0',
552                     ADD `time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ;
553             ");
554     print "Upgrade to $DBversion done (adding timestamp and done columns to zebraque table to improve problem tracking) added)\n";
555     SetVersion ($DBversion);
556 }
557
558 $DBversion = "3.00.00.019";
559 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
560     $dbh->do("ALTER TABLE biblio MODIFY biblionumber INT(11) NOT NULL AUTO_INCREMENT");
561     $dbh->do("ALTER TABLE biblioitems MODIFY biblioitemnumber INT(11) NOT NULL AUTO_INCREMENT");
562     $dbh->do("ALTER TABLE items MODIFY itemnumber INT(11) NOT NULL AUTO_INCREMENT");
563     print "Upgrade to $DBversion done (made bib/item PKs auto_increment)\n";
564     SetVersion ($DBversion);
565 }
566
567 $DBversion = "3.00.00.020";
568 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
569     $dbh->do("ALTER TABLE deleteditems
570               DROP KEY `delitembarcodeidx`,
571               ADD KEY `delitembarcodeidx` (`barcode`)");
572     print "Upgrade to $DBversion done (dropped uniqueness of key on deleteditems.barcode)\n";
573     SetVersion ($DBversion);
574 }
575
576 $DBversion = "3.00.00.021";
577 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
578     $dbh->do("ALTER TABLE items CHANGE homebranch homebranch VARCHAR(10)");
579     $dbh->do("ALTER TABLE deleteditems CHANGE homebranch homebranch VARCHAR(10)");
580     $dbh->do("ALTER TABLE statistics CHANGE branch branch VARCHAR(10)");
581     $dbh->do("ALTER TABLE subscription CHANGE lastbranch lastbranch VARCHAR(10)");
582     print "Upgrade to $DBversion done (extended missed branchcode columns to 10 chars)\n";
583     SetVersion ($DBversion);
584 }
585
586 $DBversion = "3.00.00.022";
587 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
588     $dbh->do("ALTER TABLE items
589                 ADD `damaged` tinyint(1) default NULL AFTER notforloan");
590     $dbh->do("ALTER TABLE deleteditems
591                 ADD `damaged` tinyint(1) default NULL AFTER notforloan");
592     print "Upgrade to $DBversion done (adding damaged column to items table)\n";
593     SetVersion ($DBversion);
594 }
595
596 $DBversion = "3.00.00.023";
597 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
598      $dbh->do("INSERT INTO `systempreferences` (variable,value,options,explanation,type)
599          VALUES ('yuipath','http://yui.yahooapis.com/2.3.1/build','Insert the path to YUI libraries','','free')");
600     print "Upgrade to $DBversion done (adding new system preference for controlling YUI path)\n";
601     SetVersion ($DBversion);
602 }
603 $DBversion = "3.00.00.024";
604 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
605     $dbh->do("ALTER TABLE biblioitems CHANGE  itemtype itemtype VARCHAR(10)");
606     print "Upgrade to $DBversion done (changing itemtype to (10))\n";
607     SetVersion ($DBversion);
608 }
609
610 $DBversion = "3.00.00.025";
611 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
612     $dbh->do("ALTER TABLE items ADD COLUMN itype VARCHAR(10)");
613     $dbh->do("ALTER TABLE deleteditems ADD COLUMN itype VARCHAR(10) AFTER uri");
614     if(C4::Context->preference('item-level_itypes')){
615         $dbh->do('update items,biblioitems set items.itype=biblioitems.itemtype where items.biblionumber=biblioitems.biblionumber and itype is null');
616     }
617     print "Upgrade to $DBversion done (reintroduce items.itype - fill from itemtype)\n ";
618     SetVersion ($DBversion);
619 }
620
621 $DBversion = "3.00.00.026";
622 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
623     $dbh->do("INSERT INTO `systempreferences` (variable,value,options,explanation,type)
624        VALUES ('HomeOrHoldingBranch','homebranch','homebranch|holdingbranch','With independent branches turned on this decides whether to check the items holdingbranch or homebranch at circulatilon','choice')");
625     print "Upgrade to $DBversion done (adding new system preference for choosing whether homebranch or holdingbranch is checked in circulation)\n";
626     SetVersion ($DBversion);
627 }
628
629 $DBversion = "3.00.00.027";
630 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
631     $dbh->do("CREATE TABLE `marc_matchers` (
632                 `matcher_id` int(11) NOT NULL auto_increment,
633                 `code` varchar(10) NOT NULL default '',
634                 `description` varchar(255) NOT NULL default '',
635                 `record_type` varchar(10) NOT NULL default 'biblio',
636                 `threshold` int(11) NOT NULL default 0,
637                 PRIMARY KEY (`matcher_id`),
638                 KEY `code` (`code`),
639                 KEY `record_type` (`record_type`)
640               ) ENGINE=InnoDB DEFAULT CHARSET=utf8");
641     $dbh->do("CREATE TABLE `matchpoints` (
642                 `matcher_id` int(11) NOT NULL,
643                 `matchpoint_id` int(11) NOT NULL auto_increment,
644                 `search_index` varchar(30) NOT NULL default '',
645                 `score` int(11) NOT NULL default 0,
646                 PRIMARY KEY (`matchpoint_id`),
647                 CONSTRAINT `matchpoints_ifbk_1` FOREIGN KEY (`matcher_id`)
648                            REFERENCES `marc_matchers` (`matcher_id`) ON DELETE CASCADE ON UPDATE CASCADE
649               ) ENGINE=InnoDB DEFAULT CHARSET=utf8");
650     $dbh->do("CREATE TABLE `matchpoint_components` (
651                 `matchpoint_id` int(11) NOT NULL,
652                 `matchpoint_component_id` int(11) NOT NULL auto_increment,
653                 sequence int(11) NOT NULL default 0,
654                 tag varchar(3) NOT NULL default '',
655                 subfields varchar(40) NOT NULL default '',
656                 offset int(4) NOT NULL default 0,
657                 length int(4) NOT NULL default 0,
658                 PRIMARY KEY (`matchpoint_component_id`),
659                 KEY `by_sequence` (`matchpoint_id`, `sequence`),
660                 CONSTRAINT `matchpoint_components_ifbk_1` FOREIGN KEY (`matchpoint_id`)
661                            REFERENCES `matchpoints` (`matchpoint_id`) ON DELETE CASCADE ON UPDATE CASCADE
662               ) ENGINE=InnoDB DEFAULT CHARSET=utf8");
663     $dbh->do("CREATE TABLE `matchpoint_component_norms` (
664                 `matchpoint_component_id` int(11) NOT NULL,
665                 `sequence`  int(11) NOT NULL default 0,
666                 `norm_routine` varchar(50) NOT NULL default '',
667                 KEY `matchpoint_component_norms` (`matchpoint_component_id`, `sequence`),
668                 CONSTRAINT `matchpoint_component_norms_ifbk_1` FOREIGN KEY (`matchpoint_component_id`)
669                            REFERENCES `matchpoint_components` (`matchpoint_component_id`) ON DELETE CASCADE ON UPDATE CASCADE
670               ) ENGINE=InnoDB DEFAULT CHARSET=utf8");
671     $dbh->do("CREATE TABLE `matcher_matchpoints` (
672                 `matcher_id` int(11) NOT NULL,
673                 `matchpoint_id` int(11) NOT NULL,
674                 CONSTRAINT `matcher_matchpoints_ifbk_1` FOREIGN KEY (`matcher_id`)
675                            REFERENCES `marc_matchers` (`matcher_id`) ON DELETE CASCADE ON UPDATE CASCADE,
676                 CONSTRAINT `matcher_matchpoints_ifbk_2` FOREIGN KEY (`matchpoint_id`)
677                            REFERENCES `matchpoints` (`matchpoint_id`) ON DELETE CASCADE ON UPDATE CASCADE
678               ) ENGINE=InnoDB DEFAULT CHARSET=utf8");
679     $dbh->do("CREATE TABLE `matchchecks` (
680                 `matcher_id` int(11) NOT NULL,
681                 `matchcheck_id` int(11) NOT NULL auto_increment,
682                 `source_matchpoint_id` int(11) NOT NULL,
683                 `target_matchpoint_id` int(11) NOT NULL,
684                 PRIMARY KEY (`matchcheck_id`),
685                 CONSTRAINT `matcher_matchchecks_ifbk_1` FOREIGN KEY (`matcher_id`)
686                            REFERENCES `marc_matchers` (`matcher_id`) ON DELETE CASCADE ON UPDATE CASCADE,
687                 CONSTRAINT `matcher_matchchecks_ifbk_2` FOREIGN KEY (`source_matchpoint_id`)
688                            REFERENCES `matchpoints` (`matchpoint_id`) ON DELETE CASCADE ON UPDATE CASCADE,
689                 CONSTRAINT `matcher_matchchecks_ifbk_3` FOREIGN KEY (`target_matchpoint_id`)
690                            REFERENCES `matchpoints` (`matchpoint_id`) ON DELETE CASCADE ON UPDATE CASCADE
691               ) ENGINE=InnoDB DEFAULT CHARSET=utf8");
692     print "Upgrade to $DBversion done (added C4::Matcher serialization tables)\n ";
693     SetVersion ($DBversion);
694 }
695
696 $DBversion = "3.00.00.028";
697 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
698     $dbh->do("INSERT INTO `systempreferences` (variable,value,options,explanation,type)
699        VALUES ('canreservefromotherbranches','1','','With Independent branches on, can a user from one library reserve an item from another library','YesNo')");
700     print "Upgrade to $DBversion done (adding new system preference for changing reserve/holds behaviour with independent branches)\n";
701     SetVersion ($DBversion);
702 }
703
704
705 $DBversion = "3.00.00.029";
706 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
707     $dbh->do("ALTER TABLE `import_batches` ADD `matcher_id` int(11) NULL AFTER `import_batch_id`");
708     print "Upgrade to $DBversion done (adding matcher_id to import_batches)\n";
709     SetVersion ($DBversion);
710 }
711
712 $DBversion = "3.00.00.030";
713 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
714     $dbh->do("
715 CREATE TABLE services_throttle (
716   service_type varchar(10) NOT NULL default '',
717   service_count varchar(45) default NULL,
718   PRIMARY KEY  (service_type)
719 ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
720 ");
721     $dbh->do("INSERT INTO `systempreferences` (variable,value,options,explanation,type)
722        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')");
723  $dbh->do("INSERT INTO `systempreferences` (variable,value,options,explanation,type)
724        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')");
725  $dbh->do("INSERT INTO `systempreferences` (variable,value,options,explanation,type)
726        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')");
727  $dbh->do("INSERT INTO `systempreferences` (variable,value,options,explanation,type)
728        VALUES ('XISBNDailyLimit',499,'','The xISBN Web service is free for non-commercial use when usage does not exceed 500 requests per day','free')");
729  $dbh->do("INSERT INTO `systempreferences` (variable,value,options,explanation,type)
730        VALUES ('PINESISBN',0,'','Use with FRBRizeEditions. If ON, Koha will use PINES OISBN web service in the Editions tab on the detail pages.','YesNo')");
731  $dbh->do("INSERT INTO `systempreferences` (variable,value,options,explanation,type)
732        VALUES ('ThingISBN',0,'','Use with FRBRizeEditions. If ON, Koha will use the ThingISBN web service in the Editions tab on the detail pages.','YesNo')");
733     print "Upgrade to $DBversion done (adding services throttle table and sysprefs for xISBN)\n";
734     SetVersion ($DBversion);
735 }
736
737 $DBversion = "3.00.00.031";
738 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
739
740 $dbh->do("INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('QueryStemming',1,'If ON, enables query stemming',NULL,'YesNo')");
741 $dbh->do("INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('QueryFuzzy',1,'If ON, enables fuzzy option for searches',NULL,'YesNo')");
742 $dbh->do("INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('QueryWeightFields',1,'If ON, enables field weighting',NULL,'YesNo')");
743 $dbh->do("INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('WebBasedSelfCheck',0,'If ON, enables the web-based self-check system',NULL,'YesNo')");
744 $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')");
745 $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')");
746 $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')");
747 $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')");
748 $dbh->do("INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('defaultSortOrder',NULL,'Specify the default sort order','asc|dsc|az|za','Choice')");
749 $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')");
750 $dbh->do("INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('OPACdefaultSortOrder',NULL,'Specify the default sort order','asc|dsc|za|az','Choice')");
751 $dbh->do("INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('staffClientBaseURL','','Specify the base URL of the staff client',NULL,'free')");
752 $dbh->do("INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('minPasswordLength',3,'Specify the minimum length of a patron/staff password',NULL,'free')");
753 $dbh->do("INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('noItemTypeImages',0,'If ON, disables item-type images',NULL,'YesNo')");
754 $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')");
755 $dbh->do("INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('holdCancelLength','','Specify how many days before a hold is canceled',NULL,'free')");
756 $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')");
757 $dbh->do("INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('finesMode','test','Choose the fines mode, test or production','test|production','Choice')");
758 $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')");
759 $dbh->do("INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('itemBarcodeInputFilter','','If set, allows specification of a item barcode input filter','cuecat','Choice')");
760 $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')");
761 $dbh->do("INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('URLLinkText','','Text to display as the link anchor in the OPAC',NULL,'free')");
762 $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')");
763 $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')");
764 $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')");
765 $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')");
766 $dbh->do("INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('OPACUserCSS',0,'Add CSS to be included in the OPAC',NULL,'free')");
767
768     print "Upgrade to $DBversion done (adding additional system preference)\n";
769     SetVersion ($DBversion);
770 }
771
772 $DBversion = "3.00.00.032";
773 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
774     $dbh->do("UPDATE `marc_subfield_structure` SET `kohafield` = 'items.wthdrawn' WHERE `kohafield` = 'items.withdrawn'");
775     print "Upgrade to $DBversion done (fixed MARC framework references to items.withdrawn)\n";
776     SetVersion ($DBversion);
777 }
778
779 $DBversion = "3.00.00.033";
780 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
781     $dbh->do("INSERT INTO `userflags` VALUES(17,'staffaccess','Modify login / permissions for staff users',0)");
782     print "Upgrade to $DBversion done (Adding permissions flag for staff member access modification.  )\n";
783     SetVersion ($DBversion);
784 }
785
786 $DBversion = "3.00.00.034";
787 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
788     $dbh->do("ALTER TABLE `virtualshelves` ADD COLUMN `sortfield` VARCHAR(16) ");
789     print "Upgrade to $DBversion done (Adding sortfield for Virtual Shelves.  )\n";
790     SetVersion ($DBversion);
791 }
792
793 $DBversion = "3.00.00.035";
794 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
795     $dbh->do("UPDATE marc_subfield_structure
796               SET authorised_value = 'cn_source'
797               WHERE kohafield IN ('items.cn_source', 'biblioitems.cn_source')
798               AND (authorised_value is NULL OR authorised_value = '')");
799     print "Upgrade to $DBversion done (MARC frameworks: make classification source a drop-down)\n";
800     SetVersion ($DBversion);
801 }
802
803 $DBversion = "3.00.00.036";
804 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
805     $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');");
806     print "Upgrade to $DBversion done (OPACItemsResultsDisplay systempreference added)\n";
807     SetVersion ($DBversion);
808 }
809
810 $DBversion = "3.00.00.037";
811 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
812     $dbh->do("ALTER TABLE `borrowers` ADD COLUMN `altcontactfirstname` varchar(255)");
813     $dbh->do("ALTER TABLE `borrowers` ADD COLUMN `altcontactsurname` varchar(255)");
814     $dbh->do("ALTER TABLE `borrowers` ADD COLUMN `altcontactaddress1` varchar(255)");
815     $dbh->do("ALTER TABLE `borrowers` ADD COLUMN `altcontactaddress2` varchar(255)");
816     $dbh->do("ALTER TABLE `borrowers` ADD COLUMN `altcontactaddress3` varchar(255)");
817     $dbh->do("ALTER TABLE `borrowers` ADD COLUMN `altcontactzipcode` varchar(50)");
818     $dbh->do("ALTER TABLE `borrowers` ADD COLUMN `altcontactphone` varchar(50)");
819     print "Upgrade to $DBversion done (Adding Alternative Contact Person information to borrowers table)\n";
820     SetVersion ($DBversion);
821 }
822
823 $DBversion = "3.00.00.038";
824 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
825     $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'");
826     $dbh->do("DELETE FROM `systempreferences` WHERE variable='hideBiblioNumber'");
827     print "Upgrade to $DBversion done ('alter finesMode systempreference, remove superfluous syspref.')\n";
828     SetVersion ($DBversion);
829 }
830
831 $DBversion = "3.00.00.039";
832 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
833     $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')");
834     $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')");
835     $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')");
836     # $dbh->do("DELETE FROM `systempreferences` WHERE variable='HomeOrHoldingBranch'"); # Bug #2752
837     print "Upgrade to $DBversion done ('add circ sysprefs CircControl, finesCalendar, and uppercasesurnames, and delete HomeOrHoldingBranch.')\n";
838     SetVersion ($DBversion);
839 }
840
841 $DBversion = "3.00.00.040";
842 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
843         $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')");
844         $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')");
845         print "Upgrade to $DBversion done ('add circ sysprefs todaysIssuesDefaultSortOrder and previousIssuesDefaultSortOrder.')\n";
846     SetVersion ($DBversion);
847 }
848
849
850 $DBversion = "3.00.00.041";
851 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
852     # Strictly speaking it is not necessary to explicitly change
853     # NULL values to 0, because the ALTER TABLE statement will do that.
854     # However, setting them first avoids a warning.
855     $dbh->do("UPDATE items SET notforloan = 0 WHERE notforloan IS NULL");
856     $dbh->do("UPDATE items SET damaged = 0 WHERE damaged IS NULL");
857     $dbh->do("UPDATE items SET itemlost = 0 WHERE itemlost IS NULL");
858     $dbh->do("UPDATE items SET wthdrawn = 0 WHERE wthdrawn IS NULL");
859     $dbh->do("ALTER TABLE items
860                 MODIFY notforloan tinyint(1) NOT NULL default 0,
861                 MODIFY damaged    tinyint(1) NOT NULL default 0,
862                 MODIFY itemlost   tinyint(1) NOT NULL default 0,
863                 MODIFY wthdrawn   tinyint(1) NOT NULL default 0");
864     $dbh->do("UPDATE deleteditems SET notforloan = 0 WHERE notforloan IS NULL");
865     $dbh->do("UPDATE deleteditems SET damaged = 0 WHERE damaged IS NULL");
866     $dbh->do("UPDATE deleteditems SET itemlost = 0 WHERE itemlost IS NULL");
867     $dbh->do("UPDATE deleteditems SET wthdrawn = 0 WHERE wthdrawn IS NULL");
868     $dbh->do("ALTER TABLE deleteditems
869                 MODIFY notforloan tinyint(1) NOT NULL default 0,
870                 MODIFY damaged    tinyint(1) NOT NULL default 0,
871                 MODIFY itemlost   tinyint(1) NOT NULL default 0,
872                 MODIFY wthdrawn   tinyint(1) NOT NULL default 0");
873         print "Upgrade to $DBversion done (disallow NULL in several item status columns)\n";
874     SetVersion ($DBversion);
875 }
876
877 $DBversion = "3.00.00.04";
878 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
879     $dbh->do("ALTER TABLE aqbooksellers CHANGE name name mediumtext NOT NULL");
880         print "Upgrade to $DBversion done (disallow NULL in aqbooksellers.name; part of fix for bug 1251)\n";
881     SetVersion ($DBversion);
882 }
883
884 $DBversion = "3.00.00.043";
885 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
886     $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");
887         print "Upgrade to $DBversion done (currency table: add symbol and timestamp columns)\n";
888     SetVersion ($DBversion);
889 }
890
891 $DBversion = "3.00.00.044";
892 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
893     $dbh->do("ALTER TABLE deletedborrowers
894   ADD `altcontactfirstname` varchar(255) default NULL,
895   ADD `altcontactsurname` varchar(255) default NULL,
896   ADD `altcontactaddress1` varchar(255) default NULL,
897   ADD `altcontactaddress2` varchar(255) default NULL,
898   ADD `altcontactaddress3` varchar(255) default NULL,
899   ADD `altcontactzipcode` varchar(50) default NULL,
900   ADD `altcontactphone` varchar(50) default NULL
901   ");
902   $dbh->do("INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES
903 ('OPACBaseURL',NULL,'Specify the Base URL of the OPAC, e.g., opac.mylibrary.com, the http:// will be added automatically by Koha.',NULL,'Free'),
904 ('language','en','Set the default language in the staff client.',NULL,'Languages'),
905 ('QueryAutoTruncate',1,'If ON, query truncation is enabled by default',NULL,'YesNo'),
906 ('QueryRemoveStopwords',0,'If ON, stopwords listed in the Administration area will be removed from queries',NULL,'YesNo')
907   ");
908         print "Upgrade to $DBversion done (syncing deletedborrowers table with borrowers table)\n";
909     SetVersion ($DBversion);
910 }
911
912 #-- http://www.w3.org/International/articles/language-tags/
913
914 #-- RFC4646
915 $DBversion = "3.00.00.045";
916 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
917     $dbh->do("
918 CREATE TABLE language_subtag_registry (
919         subtag varchar(25),
920         type varchar(25), -- language-script-region-variant-extension-privateuse
921         description varchar(25), -- only one of the possible descriptions for ease of reference, see language_descriptions for the complete list
922         added date,
923         KEY `subtag` (`subtag`)
924 ) ENGINE=InnoDB DEFAULT CHARSET=utf8");
925
926 #-- TODO: add suppress_scripts
927 #-- this maps three letter codes defined in iso639.2 back to their
928 #-- two letter equivilents in rfc4646 (LOC maintains iso639+)
929  $dbh->do("CREATE TABLE language_rfc4646_to_iso639 (
930         rfc4646_subtag varchar(25),
931         iso639_2_code varchar(25),
932         KEY `rfc4646_subtag` (`rfc4646_subtag`)
933 ) ENGINE=InnoDB DEFAULT CHARSET=utf8");
934
935  $dbh->do("CREATE TABLE language_descriptions (
936         subtag varchar(25),
937         type varchar(25),
938         lang varchar(25),
939         description varchar(255),
940         KEY `lang` (`lang`)
941 ) ENGINE=InnoDB DEFAULT CHARSET=utf8");
942
943 #-- bi-directional support, keyed by script subcode
944  $dbh->do("CREATE TABLE language_script_bidi (
945         rfc4646_subtag varchar(25), -- script subtag, Arab, Hebr, etc.
946         bidi varchar(3), -- rtl ltr
947         KEY `rfc4646_subtag` (`rfc4646_subtag`)
948 ) ENGINE=InnoDB DEFAULT CHARSET=utf8");
949
950 #-- BIDI Stuff, Arabic and Hebrew
951  $dbh->do("INSERT INTO language_script_bidi(rfc4646_subtag,bidi)
952 VALUES( 'Arab', 'rtl')");
953  $dbh->do("INSERT INTO language_script_bidi(rfc4646_subtag,bidi)
954 VALUES( 'Hebr', 'rtl')");
955
956 #-- TODO: need to map language subtags to script subtags for detection
957 #-- of bidi when script is not specified (like ar, he)
958  $dbh->do("CREATE TABLE language_script_mapping (
959         language_subtag varchar(25),
960         script_subtag varchar(25),
961         KEY `language_subtag` (`language_subtag`)
962 ) ENGINE=InnoDB DEFAULT CHARSET=utf8");
963
964 #-- Default mappings between script and language subcodes
965  $dbh->do("INSERT INTO language_script_mapping(language_subtag,script_subtag)
966 VALUES( 'ar', 'Arab')");
967  $dbh->do("INSERT INTO language_script_mapping(language_subtag,script_subtag)
968 VALUES( 'he', 'Hebr')");
969
970         print "Upgrade to $DBversion done (adding language subtag registry and basic BiDi support NOTE: You should import the subtag registry SQL)\n";
971     SetVersion ($DBversion);
972 }
973
974 $DBversion = "3.00.00.046";
975 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
976     $dbh->do("ALTER TABLE `subscription` CHANGE `numberlength` `numberlength` int(11) default '0' ,
977                  CHANGE `weeklength` `weeklength` int(11) default '0'");
978     $dbh->do("CREATE TABLE `serialitems` (`serialid` int(11) NOT NULL, `itemnumber` int(11) NOT NULL, UNIQUE KEY `serialididx` (`serialid`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8");
979     $dbh->do("INSERT INTO `serialitems` SELECT `serialid`,`itemnumber` from serial where NOT ISNULL(itemnumber) && itemnumber <> '' && itemnumber NOT LIKE '%,%'");
980         print "Upgrade to $DBversion done (Add serialitems table to link serial issues to items. )\n";
981     SetVersion ($DBversion);
982 }
983
984 $DBversion = "3.00.00.047";
985 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
986     $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');");
987         print "Upgrade to $DBversion done ( Added OpacRenewalAllowed syspref )\n";
988     SetVersion ($DBversion);
989 }
990
991 $DBversion = "3.00.00.048";
992 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
993     $dbh->do("ALTER TABLE `items` ADD `more_subfields_xml` longtext default NULL AFTER `itype`");
994         print "Upgrade to $DBversion done (added items.more_subfields_xml)\n";
995     SetVersion ($DBversion);
996 }
997
998 $DBversion = "3.00.00.049";
999 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
1000         $dbh->do("ALTER TABLE `z3950servers` ADD `encoding` text default NULL AFTER type ");
1001         print "Upgrade to $DBversion done ( Added encoding field to z3950servers table )\n";
1002     SetVersion ($DBversion);
1003 }
1004
1005 $DBversion = "3.00.00.050";
1006 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
1007     $dbh->do("INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('OpacHighlightedWords','0','If Set, query matched terms are highlighted in OPAC',NULL,'YesNo');");
1008         print "Upgrade to $DBversion done ( Added OpacHighlightedWords syspref )\n";
1009     SetVersion ($DBversion);
1010 }
1011
1012 $DBversion = "3.00.00.051";
1013 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
1014     $dbh->do("UPDATE systempreferences SET explanation = 'Define the current theme for the OPAC interface.' WHERE variable = 'opacthemes';");
1015         print "Upgrade to $DBversion done ( Corrected opacthemes explanation. )\n";
1016     SetVersion ($DBversion);
1017 }
1018
1019 $DBversion = "3.00.00.052";
1020 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
1021     $dbh->do("ALTER TABLE `deleteditems` ADD `more_subfields_xml` LONGTEXT DEFAULT NULL AFTER `itype`");
1022         print "Upgrade to $DBversion done ( Adding missing column to deleteditems table. )\n";
1023     SetVersion ($DBversion);
1024 }
1025
1026 $DBversion = "3.00.00.053";
1027 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
1028     $dbh->do("CREATE TABLE `printers_profile` (
1029             `prof_id` int(4) NOT NULL auto_increment,
1030             `printername` varchar(40) NOT NULL,
1031             `tmpl_id` int(4) NOT NULL,
1032             `paper_bin` varchar(20) NOT NULL,
1033             `offset_horz` float default NULL,
1034             `offset_vert` float default NULL,
1035             `creep_horz` float default NULL,
1036             `creep_vert` float default NULL,
1037             `unit` char(20) NOT NULL default 'POINT',
1038             PRIMARY KEY  (`prof_id`),
1039             UNIQUE KEY `printername` (`printername`,`tmpl_id`,`paper_bin`),
1040             CONSTRAINT `printers_profile_pnfk_1` FOREIGN KEY (`tmpl_id`) REFERENCES `labels_templates` (`tmpl_id`) ON DELETE CASCADE ON UPDATE CASCADE
1041             ) ENGINE=InnoDB DEFAULT CHARSET=utf8 ");
1042     $dbh->do("CREATE TABLE `labels_profile` (
1043             `tmpl_id` int(4) NOT NULL,
1044             `prof_id` int(4) NOT NULL,
1045             UNIQUE KEY `tmpl_id` (`tmpl_id`),
1046             UNIQUE KEY `prof_id` (`prof_id`)
1047             ) ENGINE=InnoDB DEFAULT CHARSET=utf8 ");
1048     print "Upgrade to $DBversion done ( Printer Profile tables added )\n";
1049     SetVersion ($DBversion);
1050 }
1051
1052 $DBversion = "3.00.00.054";
1053 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
1054     $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';");
1055         print "Upgrade to $DBversion done ( Added another barcode autogeneration sequence to barcode.pl. )\n";
1056     SetVersion ($DBversion);
1057 }
1058
1059 $DBversion = "3.00.00.055";
1060 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
1061     $dbh->do("ALTER TABLE `zebraqueue` ADD KEY `zebraqueue_lookup` (`server`, `biblio_auth_number`, `operation`, `done`)");
1062         print "Upgrade to $DBversion done ( Added index on zebraqueue. )\n";
1063     SetVersion ($DBversion);
1064 }
1065 $DBversion = "3.00.00.056";
1066 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
1067     if (C4::Context->preference("marcflavour") eq 'UNIMARC') {
1068         $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) ");
1069     } else {
1070         $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) ");
1071     }
1072     $dbh->do("ALTER TABLE `items` ADD `enumchron` VARCHAR(80) DEFAULT NULL;");
1073     print "Upgrade to $DBversion done ( Added item.enumchron column, and framework map to 952h )\n";
1074     SetVersion ($DBversion);
1075 }
1076
1077 $DBversion = "3.00.00.057";
1078 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
1079     $dbh->do("INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('OAI-PMH','0','if ON, OAI-PMH server is enabled',NULL,'YesNo');");
1080     $dbh->do("INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('OAI-PMH:archiveID','KOHA-OAI-TEST','OAI-PMH archive identification',NULL,'Free');");
1081     $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');");
1082     $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');");
1083     $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');");
1084     SetVersion ($DBversion);
1085 }
1086
1087 $DBversion = "3.00.00.058";
1088 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
1089     $dbh->do("ALTER TABLE `opac_news`
1090                 CHANGE `lang` `lang` VARCHAR( 25 )
1091                 CHARACTER SET utf8
1092                 COLLATE utf8_general_ci
1093                 NOT NULL default ''");
1094         print "Upgrade to $DBversion done ( lang field in opac_news made longer )\n";
1095     SetVersion ($DBversion);
1096 }
1097
1098 $DBversion = "3.00.00.059";
1099 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
1100
1101     $dbh->do("CREATE TABLE IF NOT EXISTS `labels_templates` (
1102             `tmpl_id` int(4) NOT NULL auto_increment,
1103             `tmpl_code` char(100)  default '',
1104             `tmpl_desc` char(100) default '',
1105             `page_width` float default '0',
1106             `page_height` float default '0',
1107             `label_width` float default '0',
1108             `label_height` float default '0',
1109             `topmargin` float default '0',
1110             `leftmargin` float default '0',
1111             `cols` int(2) default '0',
1112             `rows` int(2) default '0',
1113             `colgap` float default '0',
1114             `rowgap` float default '0',
1115             `active` int(1) default NULL,
1116             `units` char(20)  default 'PX',
1117             `fontsize` int(4) NOT NULL default '3',
1118             PRIMARY KEY  (`tmpl_id`)
1119             ) ENGINE=InnoDB DEFAULT CHARSET=utf8;");
1120     $dbh->do("CREATE TABLE  IF NOT EXISTS `printers_profile` (
1121             `prof_id` int(4) NOT NULL auto_increment,
1122             `printername` varchar(40) NOT NULL,
1123             `tmpl_id` int(4) NOT NULL,
1124             `paper_bin` varchar(20) NOT NULL,
1125             `offset_horz` float default NULL,
1126             `offset_vert` float default NULL,
1127             `creep_horz` float default NULL,
1128             `creep_vert` float default NULL,
1129             `unit` char(20) NOT NULL default 'POINT',
1130             PRIMARY KEY  (`prof_id`),
1131             UNIQUE KEY `printername` (`printername`,`tmpl_id`,`paper_bin`),
1132             CONSTRAINT `printers_profile_pnfk_1` FOREIGN KEY (`tmpl_id`) REFERENCES `labels_templates` (`tmpl_id`) ON DELETE CASCADE ON UPDATE CASCADE
1133             ) ENGINE=InnoDB DEFAULT CHARSET=utf8 ");
1134     print "Upgrade to $DBversion done ( Added labels_templates table if it did not exist. )\n";
1135     SetVersion ($DBversion);
1136 }
1137
1138 $DBversion = "3.00.00.060";
1139 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
1140     $dbh->do("CREATE TABLE IF NOT EXISTS `patronimage` (
1141             `cardnumber` varchar(16) NOT NULL,
1142             `mimetype` varchar(15) NOT NULL,
1143             `imagefile` mediumblob NOT NULL,
1144             PRIMARY KEY  (`cardnumber`),
1145             CONSTRAINT `patronimage_fk1` FOREIGN KEY (`cardnumber`) REFERENCES `borrowers` (`cardnumber`) ON DELETE CASCADE ON UPDATE CASCADE
1146             ) ENGINE=InnoDB DEFAULT CHARSET=utf8;");
1147         print "Upgrade to $DBversion done ( Added patronimage table. )\n";
1148     SetVersion ($DBversion);
1149 }
1150
1151 $DBversion = "3.00.00.061";
1152 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
1153     $dbh->do("ALTER TABLE labels_templates ADD COLUMN font char(10) NOT NULL DEFAULT 'TR';");
1154         print "Upgrade to $DBversion done ( Added font column to labels_templates )\n";
1155     SetVersion ($DBversion);
1156 }
1157
1158 $DBversion = "3.00.00.062";
1159 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
1160     $dbh->do("CREATE TABLE `old_issues` (
1161                 `borrowernumber` int(11) default NULL,
1162                 `itemnumber` int(11) default NULL,
1163                 `date_due` date default NULL,
1164                 `branchcode` varchar(10) default NULL,
1165                 `issuingbranch` varchar(18) default NULL,
1166                 `returndate` date default NULL,
1167                 `lastreneweddate` date default NULL,
1168                 `return` varchar(4) default NULL,
1169                 `renewals` tinyint(4) default NULL,
1170                 `timestamp` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
1171                 `issuedate` date default NULL,
1172                 KEY `old_issuesborridx` (`borrowernumber`),
1173                 KEY `old_issuesitemidx` (`itemnumber`),
1174                 KEY `old_bordate` (`borrowernumber`,`timestamp`),
1175                 CONSTRAINT `old_issues_ibfk_1` FOREIGN KEY (`borrowernumber`) REFERENCES `borrowers` (`borrowernumber`)
1176                     ON DELETE SET NULL ON UPDATE SET NULL,
1177                 CONSTRAINT `old_issues_ibfk_2` FOREIGN KEY (`itemnumber`) REFERENCES `items` (`itemnumber`)
1178                     ON DELETE SET NULL ON UPDATE SET NULL
1179                 ) ENGINE=InnoDB DEFAULT CHARSET=utf8");
1180     $dbh->do("CREATE TABLE `old_reserves` (
1181                 `borrowernumber` int(11) default NULL,
1182                 `reservedate` date default NULL,
1183                 `biblionumber` int(11) default NULL,
1184                 `constrainttype` varchar(1) default NULL,
1185                 `branchcode` varchar(10) default NULL,
1186                 `notificationdate` date default NULL,
1187                 `reminderdate` date default NULL,
1188                 `cancellationdate` date default NULL,
1189                 `reservenotes` mediumtext,
1190                 `priority` smallint(6) default NULL,
1191                 `found` varchar(1) default NULL,
1192                 `timestamp` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
1193                 `itemnumber` int(11) default NULL,
1194                 `waitingdate` date default NULL,
1195                 KEY `old_reserves_borrowernumber` (`borrowernumber`),
1196                 KEY `old_reserves_biblionumber` (`biblionumber`),
1197                 KEY `old_reserves_itemnumber` (`itemnumber`),
1198                 KEY `old_reserves_branchcode` (`branchcode`),
1199                 CONSTRAINT `old_reserves_ibfk_1` FOREIGN KEY (`borrowernumber`) REFERENCES `borrowers` (`borrowernumber`)
1200                     ON DELETE SET NULL ON UPDATE SET NULL,
1201                 CONSTRAINT `old_reserves_ibfk_2` FOREIGN KEY (`biblionumber`) REFERENCES `biblio` (`biblionumber`)
1202                     ON DELETE SET NULL ON UPDATE SET NULL,
1203                 CONSTRAINT `old_reserves_ibfk_3` FOREIGN KEY (`itemnumber`) REFERENCES `items` (`itemnumber`)
1204                     ON DELETE SET NULL ON UPDATE SET NULL
1205                 ) ENGINE=InnoDB DEFAULT CHARSET=utf8");
1206
1207     # move closed transactions to old_* tables
1208     $dbh->do("INSERT INTO old_issues SELECT * FROM issues WHERE returndate IS NOT NULL");
1209     $dbh->do("DELETE FROM issues WHERE returndate IS NOT NULL");
1210     $dbh->do("INSERT INTO old_reserves SELECT * FROM reserves WHERE cancellationdate IS NOT NULL OR found = 'F'");
1211     $dbh->do("DELETE FROM reserves WHERE cancellationdate IS NOT NULL OR found = 'F'");
1212
1213         print "Upgrade to $DBversion done ( Added old_issues and old_reserves tables )\n";
1214     SetVersion ($DBversion);
1215 }
1216
1217 $DBversion = "3.00.00.063";
1218 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
1219     $dbh->do("ALTER TABLE deleteditems
1220                 CHANGE COLUMN booksellerid booksellerid MEDIUMTEXT DEFAULT NULL,
1221                 ADD COLUMN enumchron VARCHAR(80) DEFAULT NULL AFTER more_subfields_xml,
1222                 ADD COLUMN copynumber SMALLINT(6) DEFAULT NULL AFTER enumchron;");
1223     $dbh->do("ALTER TABLE items
1224                 CHANGE COLUMN booksellerid booksellerid MEDIUMTEXT,
1225                 ADD COLUMN copynumber SMALLINT(6) DEFAULT NULL AFTER enumchron;");
1226         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";
1227     SetVersion ($DBversion);
1228 }
1229
1230 $DBversion = "3.00.00.064";
1231 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
1232     $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');");
1233     $dbh->do("INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('AWSAccessKeyID','','See:  http://aws.amazon.com','','free');");
1234     $dbh->do("DELETE FROM `systempreferences` WHERE variable='AmazonDevKey';");
1235     $dbh->do("DELETE FROM `systempreferences` WHERE variable='XISBNAmazonSimilarItems';");
1236     $dbh->do("DELETE FROM `systempreferences` WHERE variable='OPACXISBNAmazonSimilarItems';");
1237     print "Upgrade to $DBversion done (IMPORTANT: Upgrading to Amazon.com Associates Web Service 4.0 ) \n";
1238     SetVersion ($DBversion);
1239 }
1240
1241 $DBversion = "3.00.00.065";
1242 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
1243     $dbh->do("CREATE TABLE `patroncards` (
1244                 `cardid` int(11) NOT NULL auto_increment,
1245                 `batch_id` varchar(10) NOT NULL default '1',
1246                 `borrowernumber` int(11) NOT NULL,
1247                 `timestamp` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
1248                 PRIMARY KEY  (`cardid`),
1249                 KEY `patroncards_ibfk_1` (`borrowernumber`),
1250                 CONSTRAINT `patroncards_ibfk_1` FOREIGN KEY (`borrowernumber`) REFERENCES `borrowers` (`borrowernumber`) ON DELETE CASCADE ON UPDATE CASCADE
1251                 ) ENGINE=InnoDB DEFAULT CHARSET=utf8;");
1252     print "Upgrade to $DBversion done (Adding patroncards table for patroncards generation feature. ) \n";
1253     SetVersion ($DBversion);
1254 }
1255
1256 $DBversion = "3.00.00.066";
1257 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
1258     $dbh->do("ALTER TABLE `virtualshelfcontents` MODIFY `dateadded` timestamp NOT NULL
1259 DEFAULT CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP;
1260 ");
1261     print "Upgrade to $DBversion done (fix for bug 1873: virtualshelfcontents dateadded column empty. ) \n";
1262     SetVersion ($DBversion);
1263 }
1264
1265 $DBversion = "3.00.00.067";
1266 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
1267     $dbh->do("UPDATE systempreferences SET explanation = 'Enable patron images for the Staff Client', type = 'YesNo' WHERE variable = 'patronimages'");
1268     print "Upgrade to $DBversion done (Updating patronimages syspref to reflect current kohastructure.sql. ) \n";
1269     SetVersion ($DBversion);
1270 }
1271
1272 $DBversion = "3.00.00.068";
1273 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
1274     $dbh->do("CREATE TABLE `permissions` (
1275                 `module_bit` int(11) NOT NULL DEFAULT 0,
1276                 `code` varchar(30) DEFAULT NULL,
1277                 `description` varchar(255) DEFAULT NULL,
1278                 PRIMARY KEY  (`module_bit`, `code`),
1279                 CONSTRAINT `permissions_ibfk_1` FOREIGN KEY (`module_bit`) REFERENCES `userflags` (`bit`)
1280                     ON DELETE CASCADE ON UPDATE CASCADE
1281               ) ENGINE=InnoDB DEFAULT CHARSET=utf8");
1282     $dbh->do("CREATE TABLE `user_permissions` (
1283                 `borrowernumber` int(11) NOT NULL DEFAULT 0,
1284                 `module_bit` int(11) NOT NULL DEFAULT 0,
1285                 `code` varchar(30) DEFAULT NULL,
1286                 CONSTRAINT `user_permissions_ibfk_1` FOREIGN KEY (`borrowernumber`) REFERENCES `borrowers` (`borrowernumber`)
1287                     ON DELETE CASCADE ON UPDATE CASCADE,
1288                 CONSTRAINT `user_permissions_ibfk_2` FOREIGN KEY (`module_bit`, `code`)
1289                     REFERENCES `permissions` (`module_bit`, `code`)
1290                     ON DELETE CASCADE ON UPDATE CASCADE
1291               ) ENGINE=InnoDB DEFAULT CHARSET=utf8");
1292
1293     $dbh->do("INSERT INTO permissions (module_bit, code, description) VALUES
1294     (13, 'edit_news', 'Write news for the OPAC and staff interfaces'),
1295     (13, 'label_creator', 'Create printable labels and barcodes from catalog and patron data'),
1296     (13, 'edit_calendar', 'Define days when the library is closed'),
1297     (13, 'moderate_comments', 'Moderate patron comments'),
1298     (13, 'edit_notices', 'Define notices'),
1299     (13, 'edit_notice_status_triggers', 'Set notice/status triggers for overdue items'),
1300     (13, 'view_system_logs', 'Browse the system logs'),
1301     (13, 'inventory', 'Perform inventory (stocktaking) of your catalogue'),
1302     (13, 'stage_marc_import', 'Stage MARC records into the reservoir'),
1303     (13, 'manage_staged_marc', 'Managed staged MARC records, including completing and reversing imports'),
1304     (13, 'export_catalog', 'Export bibliographic and holdings data'),
1305     (13, 'import_patrons', 'Import patron data'),
1306     (13, 'delete_anonymize_patrons', 'Delete old borrowers and anonymize circulation history (deletes borrower reading history)'),
1307     (13, 'batch_upload_patron_images', 'Upload patron images in batch or one at a time'),
1308     (13, 'schedule_tasks', 'Schedule tasks to run')");
1309
1310     $dbh->do("INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('GranularPermissions','0','Use detailed staff user permissions',NULL,'YesNo')");
1311
1312     print "Upgrade to $DBversion done (adding permissions and user_permissions tables and GranularPermissions syspref) \n";
1313     SetVersion ($DBversion);
1314 }
1315 $DBversion = "3.00.00.069";
1316 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
1317     $dbh->do("ALTER TABLE labels_conf CHANGE COLUMN class classification int(1) DEFAULT NULL;");
1318         print "Upgrade to $DBversion done ( Correcting columname in labels_conf )\n";
1319     SetVersion ($DBversion);
1320 }
1321
1322 $DBversion = "3.00.00.070";
1323 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
1324     $sth = $dbh->prepare("SELECT value FROM systempreferences WHERE variable='yuipath'");
1325     $sth->execute;
1326     my ($value) = $sth->fetchrow;
1327     $value =~ s/2.3.1/2.5.1/;
1328     $dbh->do("UPDATE systempreferences SET value='$value' WHERE variable='yuipath';");
1329         print "Update yuipath syspref to 2.5.1 if necessary\n";
1330     SetVersion ($DBversion);
1331 }
1332
1333 $DBversion = "3.00.00.071";
1334 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
1335     $dbh->do(" ALTER TABLE `subscription` ADD `serialsadditems` TINYINT( 1 ) NOT NULL DEFAULT '0';");
1336     # fill the new field with the previous systempreference value, then drop the syspref
1337     my $sth = $dbh->prepare("SELECT value FROM systempreferences WHERE variable='serialsadditems'");
1338     $sth->execute;
1339     my ($serialsadditems) = $sth->fetchrow();
1340     $dbh->do("UPDATE subscription SET serialsadditems=$serialsadditems");
1341     $dbh->do("DELETE FROM systempreferences WHERE variable='serialsadditems'");
1342     print "Upgrade to $DBversion done ( moving serialsadditems from syspref to subscription )\n";
1343     SetVersion ($DBversion);
1344 }
1345
1346 $DBversion = "3.00.00.072";
1347 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
1348     $dbh->do("ALTER TABLE labels_conf ADD COLUMN formatstring mediumtext DEFAULT NULL AFTER printingtype");
1349         print "Upgrade to $DBversion done ( Adding format string to labels generator. )\n";
1350     SetVersion ($DBversion);
1351 }
1352
1353 $DBversion = "3.00.00.073";
1354 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
1355         $dbh->do("DROP TABLE IF EXISTS `tags_all`;");
1356         $dbh->do(q#
1357         CREATE TABLE `tags_all` (
1358           `tag_id`         int(11) NOT NULL auto_increment,
1359           `borrowernumber` int(11) NOT NULL,
1360           `biblionumber`   int(11) NOT NULL,
1361           `term`      varchar(255) NOT NULL,
1362           `language`       int(4) default NULL,
1363           `date_created` datetime  NOT NULL,
1364           PRIMARY KEY  (`tag_id`),
1365           KEY `tags_borrowers_fk_1` (`borrowernumber`),
1366           KEY `tags_biblionumber_fk_1` (`biblionumber`),
1367           CONSTRAINT `tags_borrowers_fk_1` FOREIGN KEY (`borrowernumber`)
1368                 REFERENCES `borrowers` (`borrowernumber`) ON DELETE CASCADE ON UPDATE CASCADE,
1369           CONSTRAINT `tags_biblionumber_fk_1` FOREIGN KEY (`biblionumber`)
1370                 REFERENCES `biblio`     (`biblionumber`)  ON DELETE CASCADE ON UPDATE CASCADE
1371         ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
1372         #);
1373         $dbh->do("DROP TABLE IF EXISTS `tags_approval`;");
1374         $dbh->do(q#
1375         CREATE TABLE `tags_approval` (
1376           `term`   varchar(255) NOT NULL,
1377           `approved`     int(1) NOT NULL default '0',
1378           `date_approved` datetime       default NULL,
1379           `approved_by` int(11)          default NULL,
1380           `weight_total` int(9) NOT NULL default '1',
1381           PRIMARY KEY  (`term`),
1382           KEY `tags_approval_borrowers_fk_1` (`approved_by`),
1383           CONSTRAINT `tags_approval_borrowers_fk_1` FOREIGN KEY (`approved_by`)
1384                 REFERENCES `borrowers` (`borrowernumber`) ON DELETE CASCADE ON UPDATE CASCADE
1385         ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
1386         #);
1387         $dbh->do("DROP TABLE IF EXISTS `tags_index`;");
1388         $dbh->do(q#
1389         CREATE TABLE `tags_index` (
1390           `term`    varchar(255) NOT NULL,
1391           `biblionumber` int(11) NOT NULL,
1392           `weight`        int(9) NOT NULL default '1',
1393           PRIMARY KEY  (`term`,`biblionumber`),
1394           KEY `tags_index_biblionumber_fk_1` (`biblionumber`),
1395           CONSTRAINT `tags_index_term_fk_1` FOREIGN KEY (`term`)
1396                 REFERENCES `tags_approval` (`term`)  ON DELETE CASCADE ON UPDATE CASCADE,
1397           CONSTRAINT `tags_index_biblionumber_fk_1` FOREIGN KEY (`biblionumber`)
1398                 REFERENCES `biblio` (`biblionumber`) ON DELETE CASCADE ON UPDATE CASCADE
1399         ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
1400         #);
1401         $dbh->do(q#
1402         INSERT INTO `systempreferences` VALUES
1403                 ('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=',''),
1404                 ('BakerTaylorEnabled','0','','Enable or disable all Baker & Taylor features.','YesNo'),
1405                 ('BakerTaylorPassword','','','Baker & Taylor Password for Content Cafe (external content)','Textarea'),
1406                 ('BakerTaylorUsername','','','Baker & Taylor Username for Content Cafe (external content)','Textarea'),
1407                 ('TagsEnabled','1','','Enables or disables all tagging features.  This is the main switch for tags.','YesNo'),
1408                 ('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.',''),
1409                 ('TagsInputOnDetail','1','','Allow users to input tags from the detail page.',         'YesNo'),
1410                 ('TagsInputOnList',  '0','','Allow users to input tags from the search results list.', 'YesNo'),
1411                 ('TagsModeration',  NULL,'','Require tags from patrons to be approved before becoming visible.','YesNo'),
1412                 ('TagsShowOnDetail','10','','Number of tags to display on detail page.  0 is off.',        'Integer'),
1413                 ('TagsShowOnList',   '6','','Number of tags to display on search results list.  0 is off.','Integer')
1414         #);
1415         print "Upgrade to $DBversion done (Baker/Taylor,Tags: sysprefs and tables (tags_all, tags_index, tags_approval)) \n";
1416         SetVersion ($DBversion);
1417 }
1418
1419 $DBversion = "3.00.00.074";
1420 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
1421     $dbh->do( q(update itemtypes set imageurl = concat( 'npl/', imageurl )
1422                   where imageurl not like 'http%'
1423                     and imageurl is not NULL
1424                     and imageurl != '') );
1425     print "Upgrade to $DBversion done (updating imagetype.imageurls to reflect new icon locations.)\n";
1426     SetVersion ($DBversion);
1427 }
1428
1429 $DBversion = "3.00.00.075";
1430 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
1431     $dbh->do( q(alter table authorised_values add imageurl varchar(200) default NULL) );
1432     print "Upgrade to $DBversion done (adding imageurl field to authorised_values table)\n";
1433     SetVersion ($DBversion);
1434 }
1435
1436 $DBversion = "3.00.00.076";
1437 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
1438     $dbh->do("ALTER TABLE import_batches
1439               ADD COLUMN nomatch_action enum('create_new', 'ignore') NOT NULL default 'create_new' AFTER overlay_action");
1440     $dbh->do("ALTER TABLE import_batches
1441               ADD COLUMN item_action enum('always_add', 'add_only_for_matches', 'add_only_for_new', 'ignore')
1442                   NOT NULL default 'always_add' AFTER nomatch_action");
1443     $dbh->do("ALTER TABLE import_batches
1444               MODIFY overlay_action  enum('replace', 'create_new', 'use_template', 'ignore')
1445                   NOT NULL default 'create_new'");
1446     $dbh->do("ALTER TABLE import_records
1447               MODIFY status  enum('error', 'staged', 'imported', 'reverted', 'items_reverted',
1448                                   'ignored') NOT NULL default 'staged'");
1449     $dbh->do("ALTER TABLE import_items
1450               MODIFY status enum('error', 'staged', 'imported', 'reverted', 'ignored') NOT NULL default 'staged'");
1451
1452         print "Upgrade to $DBversion done (changes to import_batches and import_records)\n";
1453         SetVersion ($DBversion);
1454 }
1455
1456 $DBversion = "3.00.00.077";
1457 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
1458     # drop these tables only if they exist and none of them are empty
1459     # these tables are not defined in the packaged 2.2.9, but since it is believed
1460     # that at least one library may be using them in a post-2.2.9 but pre-3.0 Koha,
1461     # some care is taken.
1462     my ($print_error) = $dbh->{PrintError};
1463     $dbh->{PrintError} = 0;
1464     my ($raise_error) = $dbh->{RaiseError};
1465     $dbh->{RaiseError} = 1;
1466
1467     my $count = 0;
1468     my $do_drop = 1;
1469     eval { $count = $dbh->do("SELECT 1 FROM categorytable"); };
1470     if ($count > 0) {
1471         $do_drop = 0;
1472     }
1473     eval { $count = $dbh->do("SELECT 1 FROM mediatypetable"); };
1474     if ($count > 0) {
1475         $do_drop = 0;
1476     }
1477     eval { $count = $dbh->do("SELECT 1 FROM subcategorytable"); };
1478     if ($count > 0) {
1479         $do_drop = 0;
1480     }
1481
1482     if ($do_drop) {
1483         $dbh->do("DROP TABLE IF EXISTS `categorytable`");
1484         $dbh->do("DROP TABLE IF EXISTS `mediatypetable`");
1485         $dbh->do("DROP TABLE IF EXISTS `subcategorytable`");
1486     }
1487
1488     $dbh->{PrintError} = $print_error;
1489     $dbh->{RaiseError} = $raise_error;
1490         print "Upgrade to $DBversion done (drop categorytable, subcategorytable, and mediatypetable)\n";
1491         SetVersion ($DBversion);
1492 }
1493
1494 $DBversion = "3.00.00.078";
1495 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
1496     my ($print_error) = $dbh->{PrintError};
1497     $dbh->{PrintError} = 0;
1498
1499     unless ($dbh->do("SELECT 1 FROM browser")) {
1500         $dbh->{PrintError} = $print_error;
1501         $dbh->do("CREATE TABLE `browser` (
1502                     `level` int(11) NOT NULL,
1503                     `classification` varchar(20) NOT NULL,
1504                     `description` varchar(255) NOT NULL,
1505                     `number` bigint(20) NOT NULL,
1506                     `endnode` tinyint(4) NOT NULL
1507                   ) ENGINE=InnoDB DEFAULT CHARSET=utf8");
1508     }
1509     $dbh->{PrintError} = $print_error;
1510         print "Upgrade to $DBversion done (add browser table if not already present)\n";
1511         SetVersion ($DBversion);
1512 }
1513
1514 $DBversion = "3.00.00.079";
1515 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
1516  my ($print_error) = $dbh->{PrintError};
1517     $dbh->{PrintError} = 0;
1518
1519     $dbh->do("INSERT INTO `systempreferences` (variable, value,options,type, explanation)VALUES
1520         ('AddPatronLists','categorycode','categorycode|category_type','Choice','Allow user to choose what list to pick up from when adding patrons')");
1521     print "Upgrade to $DBversion done (add browser table if not already present)\n";
1522         SetVersion ($DBversion);
1523 }
1524
1525 $DBversion = "3.00.00.080";
1526 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
1527     $dbh->do("ALTER TABLE subscription CHANGE monthlength monthlength int(11) default '0'");
1528     $dbh->do("ALTER TABLE deleteditems MODIFY marc LONGBLOB AFTER copynumber");
1529     $dbh->do("ALTER TABLE aqbooksellers CHANGE name name mediumtext NOT NULL");
1530         print "Upgrade to $DBversion done (catch up on DB schema changes since alpha and beta)\n";
1531         SetVersion ($DBversion);
1532 }
1533
1534 $DBversion = "3.00.00.081";
1535 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
1536     $dbh->do("CREATE TABLE `borrower_attribute_types` (
1537                 `code` varchar(10) NOT NULL,
1538                 `description` varchar(255) NOT NULL,
1539                 `repeatable` tinyint(1) NOT NULL default 0,
1540                 `unique_id` tinyint(1) NOT NULL default 0,
1541                 `opac_display` tinyint(1) NOT NULL default 0,
1542                 `password_allowed` tinyint(1) NOT NULL default 0,
1543                 `staff_searchable` tinyint(1) NOT NULL default 0,
1544                 `authorised_value_category` varchar(10) default NULL,
1545                 PRIMARY KEY  (`code`)
1546               ) ENGINE=InnoDB DEFAULT CHARSET=utf8");
1547     $dbh->do("CREATE TABLE `borrower_attributes` (
1548                 `borrowernumber` int(11) NOT NULL,
1549                 `code` varchar(10) NOT NULL,
1550                 `attribute` varchar(30) default NULL,
1551                 `password` varchar(30) default NULL,
1552                 KEY `borrowernumber` (`borrowernumber`),
1553                 KEY `code_attribute` (`code`, `attribute`),
1554                 CONSTRAINT `borrower_attributes_ibfk_1` FOREIGN KEY (`borrowernumber`) REFERENCES `borrowers` (`borrowernumber`)
1555                     ON DELETE CASCADE ON UPDATE CASCADE,
1556                 CONSTRAINT `borrower_attributes_ibfk_2` FOREIGN KEY (`code`) REFERENCES `borrower_attribute_types` (`code`)
1557                     ON DELETE CASCADE ON UPDATE CASCADE
1558             ) ENGINE=InnoDB DEFAULT CHARSET=utf8");
1559     $dbh->do("INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('ExtendedPatronAttributes','0','Use extended patron IDs and attributes',NULL,'YesNo')");
1560     print "Upgrade to $DBversion done (added borrower_attributes and  borrower_attribute_types)\n";
1561  SetVersion ($DBversion);
1562 }
1563
1564 $DBversion = "3.00.00.082";
1565 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
1566     $dbh->do( q(alter table accountlines add column lastincrement decimal(28,6) default NULL) );
1567     print "Upgrade to $DBversion done (adding lastincrement column to accountlines table)\n";
1568     SetVersion ($DBversion);
1569 }
1570
1571 $DBversion = "3.00.00.083";
1572 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
1573     $dbh->do( qq(UPDATE systempreferences SET value='local' where variable='yuipath' and value like "%/intranet-tmpl/prog/%"));
1574     print "Upgrade to $DBversion done (Changing yuipath behaviour in managing a local value)\n";
1575     SetVersion ($DBversion);
1576 }
1577 $DBversion = "3.00.00.084";
1578     if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
1579     $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')");
1580     $dbh->do("INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES('GoogleJackets','0','if ON, displays jacket covers from Google Books API',NULL,'YesNo')");
1581     print "Upgrade to $DBversion done (add new sysprefs)\n";
1582     SetVersion ($DBversion);
1583 }
1584
1585 $DBversion = "3.00.00.085";
1586 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
1587     if (C4::Context->preference("marcflavour") eq 'MARC21') {
1588         $dbh->do("UPDATE marc_subfield_structure SET tab = 0 WHERE tab =  9 AND tagfield = '037'");
1589         $dbh->do("UPDATE marc_subfield_structure SET tab = 1 WHERE tab =  6 AND tagfield in ('100', '110', '111', '130')");
1590         $dbh->do("UPDATE marc_subfield_structure SET tab = 2 WHERE tab =  6 AND tagfield in ('240', '243')");
1591         $dbh->do("UPDATE marc_subfield_structure SET tab = 4 WHERE tab =  6 AND tagfield in ('400', '410', '411', '440')");
1592         $dbh->do("UPDATE marc_subfield_structure SET tab = 5 WHERE tab =  9 AND tagfield = '584'");
1593         $dbh->do("UPDATE marc_subfield_structure SET tab = 7 WHERE tab = -6 AND tagfield = '760'");
1594     }
1595     print "Upgrade to $DBversion done (move editing tab of various MARC21 subfields)\n";
1596     SetVersion ($DBversion);
1597 }
1598
1599 $DBversion = "3.00.00.086";
1600 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
1601         $dbh->do(
1602         "CREATE TABLE `tmp_holdsqueue` (
1603         `biblionumber` int(11) default NULL,
1604         `itemnumber` int(11) default NULL,
1605         `barcode` varchar(20) default NULL,
1606         `surname` mediumtext NOT NULL,
1607         `firstname` text,
1608         `phone` text,
1609         `borrowernumber` int(11) NOT NULL,
1610         `cardnumber` varchar(16) default NULL,
1611         `reservedate` date default NULL,
1612         `title` mediumtext,
1613         `itemcallnumber` varchar(30) default NULL,
1614         `holdingbranch` varchar(10) default NULL,
1615         `pickbranch` varchar(10) default NULL,
1616         `notes` text
1617         ) ENGINE=InnoDB DEFAULT CHARSET=utf8");
1618
1619         $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')");
1620         $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')");
1621
1622         print "Upgrade to $DBversion done (Table structure for table `tmp_holdsqueue`)\n";
1623         SetVersion ($DBversion);
1624 }
1625
1626 $DBversion = "3.00.00.087";
1627 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
1628     $dbh->do("INSERT INTO `systempreferences` VALUES ('AutoEmailOpacUser','0','','Sends notification emails containing new account details to patrons - when account is created.','YesNo')" );
1629     $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')");
1630     print "Upgrade to $DBversion done (added 2 new 'AutoEmailOpacUser' sysprefs)\n";
1631     SetVersion ($DBversion);
1632 }
1633
1634 $DBversion = "3.00.00.088";
1635 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
1636         $dbh->do("INSERT INTO `systempreferences` (variable,value,options,explanation,type) VALUES ('OPACShelfBrowser','1','','Enable/disable Shelf Browser on item details page','YesNo')");
1637         $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')");
1638         $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')");
1639         $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')");
1640         print "Upgrade to $DBversion done (added 2 new 'AutoEmailOpacUser' sysprefs)\n";
1641     SetVersion ($DBversion);
1642 }
1643
1644 $DBversion = "3.00.00.089";
1645 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
1646         $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')");
1647         print "Upgrade to $DBversion done (added new AdvancedSearchTypes syspref)\n";
1648     SetVersion ($DBversion);
1649 }
1650
1651 $DBversion = "3.00.00.090";
1652 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
1653     $dbh->do("
1654         CREATE TABLE `branch_borrower_circ_rules` (
1655           `branchcode` VARCHAR(10) NOT NULL,
1656           `categorycode` VARCHAR(10) NOT NULL,
1657           `maxissueqty` int(4) default NULL,
1658           PRIMARY KEY (`categorycode`, `branchcode`),
1659           CONSTRAINT `branch_borrower_circ_rules_ibfk_1` FOREIGN KEY (`categorycode`) REFERENCES `categories` (`categorycode`)
1660             ON DELETE CASCADE ON UPDATE CASCADE,
1661           CONSTRAINT `branch_borrower_circ_rules_ibfk_2` FOREIGN KEY (`branchcode`) REFERENCES `branches` (`branchcode`)
1662             ON DELETE CASCADE ON UPDATE CASCADE
1663         ) ENGINE=InnoDB DEFAULT CHARSET=utf8
1664     ");
1665     $dbh->do("
1666         CREATE TABLE `default_borrower_circ_rules` (
1667           `categorycode` VARCHAR(10) NOT NULL,
1668           `maxissueqty` int(4) default NULL,
1669           PRIMARY KEY (`categorycode`),
1670           CONSTRAINT `borrower_borrower_circ_rules_ibfk_1` FOREIGN KEY (`categorycode`) REFERENCES `categories` (`categorycode`)
1671             ON DELETE CASCADE ON UPDATE CASCADE
1672         ) ENGINE=InnoDB DEFAULT CHARSET=utf8
1673     ");
1674     $dbh->do("
1675         CREATE TABLE `default_branch_circ_rules` (
1676           `branchcode` VARCHAR(10) NOT NULL,
1677           `maxissueqty` int(4) default NULL,
1678           PRIMARY KEY (`branchcode`),
1679           CONSTRAINT `default_branch_circ_rules_ibfk_1` FOREIGN KEY (`branchcode`) REFERENCES `branches` (`branchcode`)
1680             ON DELETE CASCADE ON UPDATE CASCADE
1681         ) ENGINE=InnoDB DEFAULT CHARSET=utf8
1682     ");
1683     $dbh->do("
1684         CREATE TABLE `default_circ_rules` (
1685             `singleton` enum('singleton') NOT NULL default 'singleton',
1686             `maxissueqty` int(4) default NULL,
1687             PRIMARY KEY (`singleton`)
1688         ) ENGINE=InnoDB DEFAULT CHARSET=utf8
1689     ");
1690     print "Upgrade to $DBversion done (added several circ rules tables)\n";
1691     SetVersion ($DBversion);
1692 }
1693
1694
1695 $DBversion = "3.00.00.091";
1696 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
1697     $dbh->do(<<'END_SQL');
1698 ALTER TABLE borrowers
1699 ADD `smsalertnumber` varchar(50) default NULL
1700 END_SQL
1701
1702     $dbh->do(<<'END_SQL');
1703 CREATE TABLE `message_attributes` (
1704   `message_attribute_id` int(11) NOT NULL auto_increment,
1705   `message_name` varchar(20) NOT NULL default '',
1706   `takes_days` tinyint(1) NOT NULL default '0',
1707   PRIMARY KEY  (`message_attribute_id`),
1708   UNIQUE KEY `message_name` (`message_name`)
1709 ) ENGINE=InnoDB DEFAULT CHARSET=utf8
1710 END_SQL
1711
1712     $dbh->do(<<'END_SQL');
1713 CREATE TABLE `message_transport_types` (
1714   `message_transport_type` varchar(20) NOT NULL,
1715   PRIMARY KEY  (`message_transport_type`)
1716 ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
1717 END_SQL
1718
1719     $dbh->do(<<'END_SQL');
1720 CREATE TABLE `message_transports` (
1721   `message_attribute_id` int(11) NOT NULL,
1722   `message_transport_type` varchar(20) NOT NULL,
1723   `is_digest` tinyint(1) NOT NULL default '0',
1724   `letter_module` varchar(20) NOT NULL default '',
1725   `letter_code` varchar(20) NOT NULL default '',
1726   PRIMARY KEY  (`message_attribute_id`,`message_transport_type`,`is_digest`),
1727   KEY `message_transport_type` (`message_transport_type`),
1728   KEY `letter_module` (`letter_module`,`letter_code`),
1729   CONSTRAINT `message_transports_ibfk_1` FOREIGN KEY (`message_attribute_id`) REFERENCES `message_attributes` (`message_attribute_id`) ON DELETE CASCADE ON UPDATE CASCADE,
1730   CONSTRAINT `message_transports_ibfk_2` FOREIGN KEY (`message_transport_type`) REFERENCES `message_transport_types` (`message_transport_type`) ON DELETE CASCADE ON UPDATE CASCADE,
1731   CONSTRAINT `message_transports_ibfk_3` FOREIGN KEY (`letter_module`, `letter_code`) REFERENCES `letter` (`module`, `code`) ON DELETE CASCADE ON UPDATE CASCADE
1732 ) ENGINE=InnoDB DEFAULT CHARSET=utf8
1733 END_SQL
1734
1735     $dbh->do(<<'END_SQL');
1736 CREATE TABLE `borrower_message_preferences` (
1737   `borrower_message_preference_id` int(11) NOT NULL auto_increment,
1738   `borrowernumber` int(11) NOT NULL default '0',
1739   `message_attribute_id` int(11) default '0',
1740   `days_in_advance` int(11) default '0',
1741   `wants_digets` tinyint(1) NOT NULL default '0',
1742   PRIMARY KEY  (`borrower_message_preference_id`),
1743   KEY `borrowernumber` (`borrowernumber`),
1744   KEY `message_attribute_id` (`message_attribute_id`),
1745   CONSTRAINT `borrower_message_preferences_ibfk_1` FOREIGN KEY (`borrowernumber`) REFERENCES `borrowers` (`borrowernumber`) ON DELETE CASCADE ON UPDATE CASCADE,
1746   CONSTRAINT `borrower_message_preferences_ibfk_2` FOREIGN KEY (`message_attribute_id`) REFERENCES `message_attributes` (`message_attribute_id`) ON DELETE CASCADE ON UPDATE CASCADE
1747 ) ENGINE=InnoDB DEFAULT CHARSET=utf8
1748 END_SQL
1749
1750     $dbh->do(<<'END_SQL');
1751 CREATE TABLE `borrower_message_transport_preferences` (
1752   `borrower_message_preference_id` int(11) NOT NULL default '0',
1753   `message_transport_type` varchar(20) NOT NULL default '0',
1754   PRIMARY KEY  (`borrower_message_preference_id`,`message_transport_type`),
1755   KEY `message_transport_type` (`message_transport_type`),
1756   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,
1757   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
1758 ) ENGINE=InnoDB DEFAULT CHARSET=utf8
1759 END_SQL
1760
1761     $dbh->do(<<'END_SQL');
1762 CREATE TABLE `message_queue` (
1763   `message_id` int(11) NOT NULL auto_increment,
1764   `borrowernumber` int(11) NOT NULL,
1765   `subject` text,
1766   `content` text,
1767   `message_transport_type` varchar(20) NOT NULL,
1768   `status` enum('sent','pending','failed','deleted') NOT NULL default 'pending',
1769   `time_queued` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
1770   KEY `message_id` (`message_id`),
1771   KEY `borrowernumber` (`borrowernumber`),
1772   KEY `message_transport_type` (`message_transport_type`),
1773   CONSTRAINT `messageq_ibfk_1` FOREIGN KEY (`borrowernumber`) REFERENCES `borrowers` (`borrowernumber`) ON DELETE CASCADE ON UPDATE CASCADE,
1774   CONSTRAINT `messageq_ibfk_2` FOREIGN KEY (`message_transport_type`) REFERENCES `message_transport_types` (`message_transport_type`) ON DELETE RESTRICT ON UPDATE CASCADE
1775 ) ENGINE=InnoDB DEFAULT CHARSET=utf8
1776 END_SQL
1777
1778     $dbh->do(<<'END_SQL');
1779 INSERT INTO `systempreferences`
1780   (variable,value,explanation,options,type)
1781 VALUES
1782 ('EnhancedMessagingPreferences',0,'If ON, allows patrons to select to receive additional messages about items due or nearly due.','','YesNo')
1783 END_SQL
1784
1785     $dbh->do( <<'END_SQL');
1786 INSERT INTO `letter`
1787 (module, code, name, title, content)
1788 VALUES
1789 ('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>>'),
1790 ('circulation','DUEDGST','Item Due Reminder (Digest)','Item Due Reminder','You have <<count>> items due'),
1791 ('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>>'),
1792 ('circulation','PREDUEDGST','Advance Notice of Item Due (Digest)','Advance Notice of Item Due','You have <<count>> items due soon'),
1793 ('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.');
1794 END_SQL
1795
1796     my @sql_scripts = (
1797         'installer/data/mysql/en/mandatory/message_transport_types.sql',
1798         'installer/data/mysql/en/optional/sample_notices_message_attributes.sql',
1799         'installer/data/mysql/en/optional/sample_notices_message_transports.sql',
1800     );
1801
1802     my $installer = C4::Installer->new();
1803     foreach my $script ( @sql_scripts ) {
1804         my $full_path = $installer->get_file_path_from_name($script);
1805         my $error = $installer->load_sql($full_path);
1806         warn $error if $error;
1807     }
1808
1809     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";
1810     SetVersion ($DBversion);
1811 }
1812
1813 $DBversion = "3.00.00.092";
1814 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
1815     $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')");
1816     $dbh->do("INSERT INTO `systempreferences` (variable,value,options,explanation,type) VALUES('AllowHoldsOnDamagedItems', '1', '', 'Allow hold requests to be placed on damaged items', 'YesNo')");
1817         print "Upgrade to $DBversion done (added new AllowOnShelfHolds syspref)\n";
1818     SetVersion ($DBversion);
1819 }
1820
1821 $DBversion = "3.00.00.093";
1822 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
1823     $dbh->do("ALTER TABLE `items` MODIFY COLUMN `copynumber` VARCHAR(32) DEFAULT NULL");
1824     $dbh->do("ALTER TABLE `deleteditems` MODIFY COLUMN `copynumber` VARCHAR(32) DEFAULT NULL");
1825         print "Upgrade to $DBversion done (Change data type of items.copynumber to allow free text)\n";
1826     SetVersion ($DBversion);
1827 }
1828
1829 $DBversion = "3.00.00.094";
1830 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
1831     $dbh->do("ALTER TABLE `marc_subfield_structure` MODIFY `tagsubfield` VARCHAR(1) NOT NULL DEFAULT '' COLLATE utf8_bin");
1832         print "Upgrade to $DBversion done (Change Collation of marc_subfield_structure to allow mixed case in subfield labels.)\n";
1833     SetVersion ($DBversion);
1834 }
1835
1836 $DBversion = "3.00.00.095";
1837 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
1838     if (C4::Context->preference("marcflavour") eq 'MARC21') {
1839         $dbh->do("UPDATE marc_subfield_structure SET authtypecode = 'MEETI_NAME' WHERE authtypecode = 'Meeting Name'");
1840         $dbh->do("UPDATE marc_subfield_structure SET authtypecode = 'CORPO_NAME' WHERE authtypecode = 'CORP0_NAME'");
1841     }
1842         print "Upgrade to $DBversion done (fix invalid authority types in MARC21 frameworks [bug 2254])\n";
1843     SetVersion ($DBversion);
1844 }
1845
1846 $DBversion = "3.00.00.096";
1847 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
1848     $sth = $dbh->prepare("SHOW COLUMNS FROM borrower_message_preferences LIKE 'wants_digets'");
1849     $sth->execute();
1850     if (my $row = $sth->fetchrow_hashref) {
1851         $dbh->do("ALTER TABLE borrower_message_preferences CHANGE wants_digets wants_digest tinyint(1) NOT NULL default 0");
1852     }
1853         print "Upgrade to $DBversion done (fix name borrower_message_preferences.wants_digest)\n";
1854     SetVersion ($DBversion);
1855 }
1856
1857 $DBversion = '3.00.00.097';
1858 if ( C4::Context->preference('Version') < TransformToNum($DBversion) ) {
1859
1860     $dbh->do('ALTER TABLE message_queue ADD to_address   mediumtext default NULL');
1861     $dbh->do('ALTER TABLE message_queue ADD from_address mediumtext default NULL');
1862     $dbh->do('ALTER TABLE message_queue ADD content_type text');
1863     $dbh->do('ALTER TABLE message_queue CHANGE borrowernumber borrowernumber int(11) default NULL');
1864
1865     print "Upgrade to $DBversion done (updating 4 fields in message_queue table)\n";
1866     SetVersion($DBversion);
1867 }
1868
1869 $DBversion = '3.00.00.098';
1870 if ( C4::Context->preference('Version') < TransformToNum($DBversion) ) {
1871
1872     $dbh->do(q(DELETE FROM message_transport_types WHERE message_transport_type = 'rss'));
1873     $dbh->do(q(DELETE FROM message_transports WHERE message_transport_type = 'rss'));
1874
1875     print "Upgrade to $DBversion done (removing unused RSS message_transport_type)\n";
1876     SetVersion($DBversion);
1877 }
1878
1879 $DBversion = '3.00.00.099';
1880 if ( C4::Context->preference('Version') < TransformToNum($DBversion) ) {
1881     $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')");
1882     print "Upgrade to $DBversion done (Adding OpacSuppression syspref)\n";
1883     SetVersion($DBversion);
1884 }
1885
1886 $DBversion = '3.00.00.100';
1887 if ( C4::Context->preference('Version') < TransformToNum($DBversion) ) {
1888         $dbh->do('ALTER TABLE virtualshelves ADD COLUMN lastmodified timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP');
1889     print "Upgrade to $DBversion done (Adding lastmodified column to virtualshelves)\n";
1890     SetVersion($DBversion);
1891 }
1892
1893 $DBversion = '3.00.00.101';
1894 if ( C4::Context->preference('Version') < TransformToNum($DBversion) ) {
1895         $dbh->do('ALTER TABLE `overduerules` CHANGE `categorycode` `categorycode` VARCHAR(10) NOT NULL');
1896         $dbh->do('ALTER TABLE `deletedborrowers` CHANGE `categorycode` `categorycode` VARCHAR(10) NOT NULL');
1897     print "Upgrade to $DBversion done (Updating columnd definitions for patron category codes in notice/statsu triggers and deletedborrowers tables.)\n";
1898     SetVersion($DBversion);
1899 }
1900
1901 $DBversion = '3.00.00.102';
1902 if ( C4::Context->preference('Version') < TransformToNum($DBversion) ) {
1903         $dbh->do('ALTER TABLE serialitems MODIFY `serialid` int(11) NOT NULL AFTER itemnumber' );
1904         $dbh->do('ALTER TABLE serialitems DROP KEY serialididx' );
1905         $dbh->do('ALTER TABLE serialitems ADD CONSTRAINT UNIQUE KEY serialitemsidx (itemnumber)' );
1906         # before setting constraint, delete any unvalid data
1907         $dbh->do('DELETE from serialitems WHERE serialid not in (SELECT serial.serialid FROM serial)');
1908         $dbh->do('ALTER TABLE serialitems ADD CONSTRAINT serialitems_sfk_1 FOREIGN KEY (serialid) REFERENCES serial (serialid) ON DELETE CASCADE ON UPDATE CASCADE' );
1909     print "Upgrade to $DBversion done (Updating serialitems table to allow for multiple items per serial fixing kohabug 2380)\n";
1910     SetVersion($DBversion);
1911 }
1912
1913 $DBversion = "3.00.00.103";
1914 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
1915     $dbh->do("DELETE FROM systempreferences WHERE variable='serialsadditems'");
1916     print "Upgrade to $DBversion done ( Verifying the removal of serialsadditems from syspref fixing kohabug 2219)\n";
1917     SetVersion ($DBversion);
1918 }
1919
1920 $DBversion = "3.00.00.104";
1921 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
1922     $dbh->do("DELETE FROM systempreferences WHERE variable='noOPACHolds'");
1923     print "Upgrade to $DBversion done (remove superseded 'noOPACHolds' system preference per bug 2413)\n";
1924     SetVersion ($DBversion);
1925 }
1926
1927 $DBversion = '3.00.00.105';
1928 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
1929
1930     # it is possible that this syspref is already defined since the feature was added some time ago.
1931     unless ( $dbh->do(q(SELECT variable FROM systempreferences WHERE variable = 'SMSSendDriver')) ) {
1932         $dbh->do(<<'END_SQL');
1933 INSERT INTO `systempreferences`
1934   (variable,value,explanation,options,type)
1935 VALUES
1936 ('SMSSendDriver','','Sets which SMS::Send driver is used to send SMS messages.','','free')
1937 END_SQL
1938     }
1939     print "Upgrade to $DBversion done (added SMSSendDriver system preference)\n";
1940     SetVersion($DBversion);
1941 }
1942
1943 $DBversion = "3.00.00.106";
1944 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
1945     $dbh->do("DELETE FROM systempreferences WHERE variable='noOPACHolds'");
1946
1947 # db revision 105 didn't apply correctly, so we're rolling this into 106
1948         $dbh->do("INSERT INTO `systempreferences`
1949    (variable,value,explanation,options,type)
1950         VALUES
1951         ('SMSSendDriver','','Sets which SMS::Send driver is used to send SMS messages.','','free')");
1952
1953     print "Upgrade to $DBversion done (remove default '0000-00-00' in subscriptionhistory.enddate field)\n";
1954     $dbh->do("ALTER TABLE `subscriptionhistory` CHANGE `enddate` `enddate` DATE NULL DEFAULT NULL ");
1955     $dbh->do("UPDATE subscriptionhistory SET enddate=NULL WHERE enddate='0000-00-00'");
1956     SetVersion ($DBversion);
1957 }
1958
1959 $DBversion = '3.00.00.107';
1960 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
1961     $dbh->do(<<'END_SQL');
1962 UPDATE systempreferences
1963   SET explanation = CONCAT( explanation, '. WARNING: this feature is very resource consuming on collections with large numbers of items.' )
1964   WHERE variable = 'OPACShelfBrowser'
1965     AND explanation NOT LIKE '%WARNING%'
1966 END_SQL
1967     $dbh->do(<<'END_SQL');
1968 UPDATE systempreferences
1969   SET explanation = CONCAT( explanation, '. WARNING: this feature is very resource consuming.' )
1970   WHERE variable = 'CataloguingLog'
1971     AND explanation NOT LIKE '%WARNING%'
1972 END_SQL
1973     $dbh->do(<<'END_SQL');
1974 UPDATE systempreferences
1975   SET explanation = CONCAT( explanation, '. WARNING: using NoZebra on even modest sized collections is very slow.' )
1976   WHERE variable = 'NoZebra'
1977     AND explanation NOT LIKE '%WARNING%'
1978 END_SQL
1979     print "Upgrade to $DBversion done (warning added to OPACShelfBrowser system preference)\n";
1980     SetVersion ($DBversion);
1981 }
1982
1983 $DBversion = '3.01.00.000';
1984 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
1985     print "Upgrade to $DBversion done (start of 3.1)\n";
1986     SetVersion ($DBversion);
1987 }
1988
1989 $DBversion = '3.01.00.001';
1990 if ( C4::Context->preference('Version') < TransformToNum($DBversion) ) {
1991     $dbh->do("
1992         CREATE TABLE hold_fill_targets (
1993             `borrowernumber` int(11) NOT NULL,
1994             `biblionumber` int(11) NOT NULL,
1995             `itemnumber` int(11) NOT NULL,
1996             `source_branchcode`  varchar(10) default NULL,
1997             `item_level_request` tinyint(4) NOT NULL default 0,
1998             PRIMARY KEY `itemnumber` (`itemnumber`),
1999             KEY `bib_branch` (`biblionumber`, `source_branchcode`),
2000             CONSTRAINT `hold_fill_targets_ibfk_1` FOREIGN KEY (`borrowernumber`)
2001                 REFERENCES `borrowers` (`borrowernumber`) ON DELETE CASCADE ON UPDATE CASCADE,
2002             CONSTRAINT `hold_fill_targets_ibfk_2` FOREIGN KEY (`biblionumber`)
2003                 REFERENCES `biblio` (`biblionumber`) ON DELETE CASCADE ON UPDATE CASCADE,
2004             CONSTRAINT `hold_fill_targets_ibfk_3` FOREIGN KEY (`itemnumber`)
2005                 REFERENCES `items` (`itemnumber`) ON DELETE CASCADE ON UPDATE CASCADE,
2006             CONSTRAINT `hold_fill_targets_ibfk_4` FOREIGN KEY (`source_branchcode`)
2007                 REFERENCES `branches` (`branchcode`) ON DELETE CASCADE ON UPDATE CASCADE
2008         ) ENGINE=InnoDB DEFAULT CHARSET=utf8
2009     ");
2010     $dbh->do("
2011         ALTER TABLE tmp_holdsqueue
2012             ADD item_level_request tinyint(4) NOT NULL default 0
2013     ");
2014
2015     print "Upgrade to $DBversion done (add hold_fill_targets table and a column to tmp_holdsqueue)\n";
2016     SetVersion($DBversion);
2017 }
2018
2019 $DBversion = '3.01.00.002';
2020 if ( C4::Context->preference('Version') < TransformToNum($DBversion) ) {
2021     # use statistics where available
2022     $dbh->do("
2023         ALTER TABLE statistics ADD KEY  tmp_stats (type, itemnumber, borrowernumber)
2024     ");
2025     $dbh->do("
2026         UPDATE issues iss
2027         SET issuedate = (
2028             SELECT max(datetime)
2029             FROM statistics
2030             WHERE type = 'issue'
2031             AND itemnumber = iss.itemnumber
2032             AND borrowernumber = iss.borrowernumber
2033         )
2034         WHERE issuedate IS NULL;
2035     ");
2036     $dbh->do("ALTER TABLE statistics DROP KEY tmp_stats");
2037
2038     # default to last renewal date
2039     $dbh->do("
2040         UPDATE issues
2041         SET issuedate = lastreneweddate
2042         WHERE issuedate IS NULL
2043         and lastreneweddate IS NOT NULL
2044     ");
2045
2046     my $num_bad_issuedates = $dbh->selectrow_array("SELECT COUNT(*) FROM issues WHERE issuedate IS NULL");
2047     if ($num_bad_issuedates > 0) {
2048         print STDERR "After the upgrade to $DBversion, there are still $num_bad_issuedates loan(s) with a NULL (blank) loan date. ",
2049                      "Please check the issues table in your database.";
2050     }
2051     print "Upgrade to $DBversion done (bug 2582: set null issues.issuedate to lastreneweddate)\n";
2052     SetVersion($DBversion);
2053 }
2054
2055 $DBversion = "3.01.00.003";
2056 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
2057     $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')");
2058     print "Upgrade to $DBversion done (add new syspref)\n";
2059     SetVersion ($DBversion);
2060 }
2061
2062 $DBversion = '3.01.00.004';
2063 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
2064     $dbh->do("INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES ('OPACDisplayRequestPriority','0','Show patrons the priority level on holds in the OPAC','','YesNo')");
2065     print "Upgrade to $DBversion done (added OPACDisplayRequestPriority system preference)\n";
2066     SetVersion ($DBversion);
2067 }
2068
2069 $DBversion = '3.01.00.005';
2070 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
2071     $dbh->do("
2072         INSERT INTO `letter` (module, code, name, title, content)
2073         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>>')
2074     ");
2075     $dbh->do("INSERT INTO `message_attributes` (message_attribute_id, message_name, takes_days) values(4, 'Hold Filled', 0)");
2076     $dbh->do("INSERT INTO `message_transports` (message_attribute_id, message_transport_type, is_digest, letter_module, letter_code) values(4, 'sms', 0, 'reserves', 'HOLD')");
2077     $dbh->do("INSERT INTO `message_transports` (message_attribute_id, message_transport_type, is_digest, letter_module, letter_code) values(4, 'email', 0, 'reserves', 'HOLD')");
2078     print "Upgrade to $DBversion done (Add letter for holds notifications)\n";
2079     SetVersion ($DBversion);
2080 }
2081
2082 $DBversion = '3.01.00.006';
2083 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
2084     $dbh->do("ALTER TABLE `biblioitems` ADD KEY issn (issn)");
2085     print "Upgrade to $DBversion done (add index on biblioitems.issn)\n";
2086     SetVersion ($DBversion);
2087 }
2088
2089 $DBversion = "3.01.00.007";
2090 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
2091     $dbh->do("UPDATE `systempreferences` SET options='70|10' WHERE variable='intranetmainUserblock'");
2092     $dbh->do("UPDATE `systempreferences` SET options='70|10' WHERE variable='intranetuserjs'");
2093     $dbh->do("UPDATE `systempreferences` SET options='70|10' WHERE variable='opacheader'");
2094     $dbh->do("UPDATE `systempreferences` SET options='70|10' WHERE variable='OpacMainUserBlock'");
2095     $dbh->do("UPDATE `systempreferences` SET options='70|10' WHERE variable='OpacNav'");
2096     $dbh->do("UPDATE `systempreferences` SET options='70|10' WHERE variable='opacuserjs'");
2097     $dbh->do("UPDATE `systempreferences` SET options='30|10', type='Textarea' WHERE variable='OAI-PMH:Set'");
2098     $dbh->do("UPDATE `systempreferences` SET options='50' WHERE variable='intranetstylesheet'");
2099     $dbh->do("UPDATE `systempreferences` SET options='50' WHERE variable='intranetcolorstylesheet'");
2100     $dbh->do("UPDATE `systempreferences` SET options='10' WHERE variable='globalDueDate'");
2101     $dbh->do("UPDATE `systempreferences` SET type='Integer' WHERE variable='numSearchResults'");
2102     $dbh->do("UPDATE `systempreferences` SET type='Integer' WHERE variable='OPACnumSearchResults'");
2103     $dbh->do("UPDATE `systempreferences` SET type='Integer' WHERE variable='ReservesMaxPickupDelay'");
2104     $dbh->do("UPDATE `systempreferences` SET type='Integer' WHERE variable='TransfersMaxDaysWarning'");
2105     $dbh->do("UPDATE `systempreferences` SET type='Integer' WHERE variable='StaticHoldsQueueWeight'");
2106     $dbh->do("UPDATE `systempreferences` SET type='Integer' WHERE variable='holdCancelLength'");
2107     $dbh->do("UPDATE `systempreferences` SET type='Integer' WHERE variable='XISBNDailyLimit'");
2108     $dbh->do("UPDATE `systempreferences` SET type='Float' WHERE variable='gist'");
2109     $dbh->do("UPDATE `systempreferences` SET type='Free' WHERE variable='BakerTaylorUsername'");
2110     $dbh->do("UPDATE `systempreferences` SET type='Free' WHERE variable='BakerTaylorPassword'");
2111     $dbh->do("UPDATE `systempreferences` SET type='Textarea', options='70|10' WHERE variable='ISBD'");
2112     $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'");
2113     print "Upgrade to $DBversion done (fix display of many sysprefs)\n";
2114     SetVersion ($DBversion);
2115 }
2116
2117 $DBversion = '3.01.00.008';
2118 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
2119
2120     $dbh->do("CREATE TABLE branch_transfer_limits (
2121                           limitId int(8) NOT NULL auto_increment,
2122                           toBranch varchar(4) NOT NULL,
2123                           fromBranch varchar(4) NOT NULL,
2124                           itemtype varchar(4) NOT NULL,
2125                           PRIMARY KEY  (limitId)
2126                           ) ENGINE=InnoDB DEFAULT CHARSET=utf8"
2127                         );
2128
2129     $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')");
2130
2131     print "Upgrade to $DBversion done (added branch_transfer_limits table and UseBranchTransferLimits system preference)\n";
2132     SetVersion ($DBversion);
2133 }
2134
2135 $DBversion = "3.01.00.009";
2136 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
2137     $dbh->do("ALTER TABLE permissions MODIFY `code` varchar(64) DEFAULT NULL");
2138     $dbh->do("ALTER TABLE user_permissions MODIFY `code` varchar(64) DEFAULT NULL");
2139     $dbh->do("INSERT INTO permissions (module_bit, code, description) VALUES ( 1, 'circulate_remaining_permissions', 'Remaining circulation permissions')");
2140     $dbh->do("INSERT INTO permissions (module_bit, code, description) VALUES ( 1, 'override_renewals', 'Override blocked renewals')");
2141     print "Upgrade to $DBversion done (added subpermissions for circulate permission)\n";
2142 }
2143
2144 $DBversion = '3.01.00.010';
2145 if ( C4::Context->preference('Version') < TransformToNum($DBversion) ) {
2146     $dbh->do("ALTER TABLE `borrower_attributes` MODIFY COLUMN `attribute` VARCHAR(64) DEFAULT NULL");
2147     $dbh->do("ALTER TABLE `borrower_attributes` MODIFY COLUMN `password` VARCHAR(64) DEFAULT NULL");
2148     print "Upgrade to $DBversion done (bug 2687: increase length of borrower attribute fields)\n";
2149     SetVersion ($DBversion);
2150 }
2151
2152 $DBversion = '3.01.00.011';
2153 if ( C4::Context->preference('Version') < TransformToNum($DBversion) ) {
2154
2155     # Yes, the old value was ^M terminated.
2156     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);";
2157
2158     my $intranetuserjs = C4::Context->preference('intranetuserjs');
2159     if ($intranetuserjs  and  $intranetuserjs eq $bad_value) {
2160         my $sql = <<'END_SQL';
2161 UPDATE systempreferences
2162 SET value = ''
2163 WHERE variable = 'intranetuserjs'
2164 END_SQL
2165         $dbh->do($sql);
2166     }
2167     print "Upgrade to $DBversion done (removed bogus intranetuserjs syspref)\n";
2168     SetVersion($DBversion);
2169 }
2170
2171 $DBversion = "3.01.00.012";
2172 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
2173     $dbh->do("INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES('AllowHoldPolicyOverride', '0', 'Allow staff to override hold policies when placing holds',NULL,'YesNo')");
2174     $dbh->do("
2175         CREATE TABLE `branch_item_rules` (
2176           `branchcode` varchar(10) NOT NULL,
2177           `itemtype` varchar(10) NOT NULL,
2178           `holdallowed` tinyint(1) default NULL,
2179           PRIMARY KEY  (`itemtype`,`branchcode`),
2180           KEY `branch_item_rules_ibfk_2` (`branchcode`),
2181           CONSTRAINT `branch_item_rules_ibfk_1` FOREIGN KEY (`itemtype`) REFERENCES `itemtypes` (`itemtype`) ON DELETE CASCADE ON UPDATE CASCADE,
2182           CONSTRAINT `branch_item_rules_ibfk_2` FOREIGN KEY (`branchcode`) REFERENCES `branches` (`branchcode`) ON DELETE CASCADE ON UPDATE CASCADE
2183         ) ENGINE=InnoDB DEFAULT CHARSET=utf8
2184     ");
2185     $dbh->do("
2186         CREATE TABLE `default_branch_item_rules` (
2187           `itemtype` varchar(10) NOT NULL,
2188           `holdallowed` tinyint(1) default NULL,
2189           PRIMARY KEY  (`itemtype`),
2190           CONSTRAINT `default_branch_item_rules_ibfk_1` FOREIGN KEY (`itemtype`) REFERENCES `itemtypes` (`itemtype`) ON DELETE CASCADE ON UPDATE CASCADE
2191         ) ENGINE=InnoDB DEFAULT CHARSET=utf8
2192     ");
2193     $dbh->do("
2194         ALTER TABLE default_branch_circ_rules
2195             ADD COLUMN holdallowed tinyint(1) NULL
2196     ");
2197     $dbh->do("
2198         ALTER TABLE default_circ_rules
2199             ADD COLUMN holdallowed tinyint(1) NULL
2200     ");
2201     print "Upgrade to $DBversion done (Add tables and system preferences for holds policies)\n";
2202     SetVersion ($DBversion);
2203 }
2204
2205 $DBversion = '3.01.00.013';
2206 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
2207     $dbh->do("
2208         CREATE TABLE item_circulation_alert_preferences (
2209             id           int(11) AUTO_INCREMENT,
2210             branchcode   varchar(10) NOT NULL,
2211             categorycode varchar(10) NOT NULL,
2212             item_type    varchar(10) NOT NULL,
2213             notification varchar(16) NOT NULL,
2214             PRIMARY KEY (id),
2215             KEY (branchcode, categorycode, item_type, notification)
2216         ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
2217     ");
2218
2219     $dbh->do(q{ ALTER TABLE `message_queue` ADD metadata text DEFAULT NULL           AFTER content;  });
2220     $dbh->do(q{ ALTER TABLE `message_queue` ADD letter_code varchar(64) DEFAULT NULL AFTER metadata; });
2221
2222     $dbh->do(q{
2223         INSERT INTO `letter` (`module`, `code`, `name`, `title`, `content`) VALUES
2224         ('circulation','CHECKIN','Item Check-in','Check-ins','The following items have been checked in:\r\n----\r\n<<biblio.title>>\r\n----\r\nThank you.');
2225     });
2226     $dbh->do(q{
2227         INSERT INTO `letter` (`module`, `code`, `name`, `title`, `content`) VALUES
2228         ('circulation','CHECKOUT','Item Checkout','Checkouts','The following items have been checked out:\r\n----\r\n<<biblio.title>>\r\n----\r\nThank you for visiting <<branches.branchname>>.');
2229     });
2230
2231     $dbh->do(q{INSERT INTO message_attributes (message_attribute_id, message_name, takes_days) VALUES (5, 'Item Check-in', 0);});
2232     $dbh->do(q{INSERT INTO message_attributes (message_attribute_id, message_name, takes_days) VALUES (6, 'Item Checkout', 0);});
2233
2234     $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');});
2235     $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');});
2236     $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');});
2237     $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');});
2238
2239     print "Upgrade to $DBversion done (data for Email Checkout Slips project)\n";
2240          SetVersion ($DBversion);
2241 }
2242
2243 $DBversion = "3.01.00.014";
2244 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
2245     $dbh->do("ALTER TABLE `branch_transfer_limits` CHANGE `itemtype` `itemtype` VARCHAR( 4 ) CHARACTER SET utf8 COLLATE utf8_general_ci NULL");
2246     $dbh->do("ALTER TABLE `branch_transfer_limits` ADD `ccode` VARCHAR( 10 ) NULL ;");
2247     $dbh->do("INSERT INTO `systempreferences` ( `variable` , `value` , `options` , `explanation` , `type` )
2248     VALUES (
2249     'BranchTransferLimitsType', 'ccode', 'itemtype|ccode', 'When using branch transfer limits, choose whether to limit by itemtype or collection code.', 'Choice'
2250     );");
2251
2252     print "Upgrade to $DBversion done ( Updated table for Branch Transfer Limits)\n";
2253     SetVersion ($DBversion);
2254 }
2255
2256 $DBversion = '3.01.00.015';
2257 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
2258     $dbh->do("INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES ('SyndeticsClientCode', '0', 'Client Code for using Syndetics Solutions content','','free')");
2259
2260     $dbh->do("INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES ('SyndeticsEnabled', '0', 'Turn on Syndetics Enhanced Content','','YesNo')");
2261
2262     $dbh->do("INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES ('SyndeticsCoverImages', '0', 'Display Cover Images from Syndetics','','YesNo')");
2263
2264     $dbh->do("INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES ('SyndeticsTOC', '0', 'Display Table of Content information from Syndetics','','YesNo')");
2265
2266     $dbh->do("INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES ('SyndeticsSummary', '0', 'Display Summary Information from Syndetics','','YesNo')");
2267
2268     $dbh->do("INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES ('SyndeticsEditions', '0', 'Display Editions from Syndetics','','YesNo')");
2269
2270     $dbh->do("INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES ('SyndeticsExcerpt', '0', 'Display Excerpts and first chapters on OPAC from Syndetics','','YesNo')");
2271
2272     $dbh->do("INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES ('SyndeticsReviews', '0', 'Display Reviews on OPAC from Syndetics','','YesNo')");
2273
2274     $dbh->do("INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES ('SyndeticsAuthorNotes', '0', 'Display Notes about the Author on OPAC from Syndetics','','YesNo')");
2275
2276     $dbh->do("INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES ('SyndeticsAwards', '0', 'Display Awards on OPAC from Syndetics','','YesNo')");
2277
2278     $dbh->do("INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES ('SyndeticsSeries', '0', 'Display Series information on OPAC from Syndetics','','YesNo')");
2279
2280     $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')");
2281
2282     $dbh->do("INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES ('OPACAmazonCoverImages', '0', 'Display cover images on OPAC from Amazon Web Services','','YesNo')");
2283
2284     $dbh->do("INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES ('AmazonCoverImages', '0', 'Display Cover Images in Staff Client from Amazon Web Services','','YesNo')");
2285
2286     $dbh->do("UPDATE systempreferences SET variable='AmazonEnabled' WHERE variable = 'AmazonContent'");
2287
2288     $dbh->do("UPDATE systempreferences SET variable='OPACAmazonEnabled' WHERE variable = 'OPACAmazonContent'");
2289
2290     print "Upgrade to $DBversion done (added Syndetics Enhanced Content system preferences)\n";
2291     SetVersion ($DBversion);
2292 }
2293
2294 $DBversion = "3.01.00.016";
2295 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
2296     $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')");
2297     print "Upgrade to $DBversion done (Added Babeltheque syspref)\n";
2298     SetVersion ($DBversion);
2299 }
2300
2301 $DBversion = "3.01.00.017";
2302 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
2303     $dbh->do("ALTER TABLE `subscription` ADD `staffdisplaycount` VARCHAR(10) NULL;");
2304     $dbh->do("ALTER TABLE `subscription` ADD `opacdisplaycount` VARCHAR(10) NULL;");
2305     $dbh->do("INSERT INTO `systempreferences` ( `variable` , `value` , `options` , `explanation` , `type` )
2306     VALUES (
2307     'StaffSerialIssueDisplayCount', '3', '', 'Number of serial issues to display per subscription in the Staff client', 'Integer'
2308     );");
2309         $dbh->do("INSERT INTO `systempreferences` ( `variable` , `value` , `options` , `explanation` , `type` )
2310     VALUES (
2311     'OPACSerialIssueDisplayCount', '3', '', 'Number of serial issues to display per subscription in the OPAC', 'Integer'
2312     );");
2313
2314     print "Upgrade to $DBversion done ( Updated table for Serials Display)\n";
2315     SetVersion ($DBversion);
2316 }
2317
2318 $DBversion = "3.01.00.018";
2319 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
2320     $dbh->do("ALTER TABLE deletedborrowers ADD `smsalertnumber` varchar(50) default NULL");
2321     print "Upgrade to $DBversion done (added deletedborrowers.smsalertnumber, missed in 3.00.00.091)\n";
2322     SetVersion ($DBversion);
2323 }
2324
2325 $DBversion = "3.01.00.019";
2326 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
2327         $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')");
2328     print "Upgrade to $DBversion done (adding OPACShowCheckoutName systempref)\n";
2329     SetVersion ($DBversion);
2330 }
2331
2332 $DBversion = "3.01.00.020";
2333 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
2334     $dbh->do("INSERT INTO systempreferences (variable,value,explanation,options,type)VALUES('LibraryThingForLibrariesID','','See:http://librarything.com/forlibraries/','','free')");
2335     $dbh->do("INSERT INTO systempreferences (variable,value,explanation,options,type)VALUES('LibraryThingForLibrariesEnabled','0','Enable or Disable Library Thing for Libraries Features','','YesNo')");
2336     $dbh->do("INSERT INTO systempreferences (variable,value,explanation,options,type)VALUES('LibraryThingForLibrariesTabbedView','0','Put LibraryThingForLibraries Content in Tabs.','','YesNo')");
2337     print "Upgrade to $DBversion done (adding LibraryThing for Libraries sysprefs)\n";
2338     SetVersion ($DBversion);
2339 }
2340
2341 $DBversion = "3.01.00.021";
2342 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
2343     my $enable_reviews = C4::Context->preference('OPACAmazonEnabled') ? '1' : '0';
2344     $dbh->do("INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES ('OPACAmazonReviews', '$enable_reviews', 'Display Amazon readers reviews on OPAC','','YesNo')");
2345     print "Upgrade to $DBversion done (adding OPACAmazonReviews syspref)\n";
2346     SetVersion ($DBversion);
2347 }
2348
2349 $DBversion = '3.01.00.022';
2350 if ( C4::Context->preference('Version') < TransformToNum($DBversion) ) {
2351     $dbh->do("ALTER TABLE `labels_conf` MODIFY COLUMN `formatstring` mediumtext DEFAULT NULL");
2352     print "Upgrade to $DBversion done (bug 2945: increase size of labels_conf.formatstring)\n";
2353     SetVersion ($DBversion);
2354 }
2355
2356 $DBversion = '3.01.00.023';
2357 if ( C4::Context->preference('Version') < TransformToNum($DBversion) ) {
2358     $dbh->do("ALTER TABLE biblioitems        MODIFY COLUMN isbn VARCHAR(30) DEFAULT NULL");
2359     $dbh->do("ALTER TABLE deletedbiblioitems MODIFY COLUMN isbn VARCHAR(30) DEFAULT NULL");
2360     $dbh->do("ALTER TABLE import_biblios     MODIFY COLUMN isbn VARCHAR(30) DEFAULT NULL");
2361     $dbh->do("ALTER TABLE suggestions        MODIFY COLUMN isbn VARCHAR(30) DEFAULT NULL");
2362     print "Upgrade to $DBversion done (bug 2765: increase width of isbn column in several tables)\n";
2363     SetVersion ($DBversion);
2364 }
2365
2366 $DBversion = "3.01.00.024";
2367 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
2368     $dbh->do("ALTER TABLE labels MODIFY COLUMN batch_id int(10) NOT NULL default 1;");
2369     print "Upgrade to $DBversion done (change labels.batch_id from varchar to int)\n";
2370     SetVersion ($DBversion);
2371 }
2372
2373 $DBversion = '3.01.00.025';
2374 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
2375     $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')");
2376
2377     print "Upgrade to $DBversion done (added ceilingDueDate system preference)\n";
2378     SetVersion ($DBversion);
2379 }
2380
2381 $DBversion = '3.01.00.026';
2382 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
2383     $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')");
2384
2385     print "Upgrade to $DBversion done (added numReturnedItemsToShow system preference)\n";
2386     SetVersion ($DBversion);
2387 }
2388
2389 $DBversion = '3.01.00.027';
2390 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
2391     $dbh->do("ALTER TABLE zebraqueue CHANGE `biblio_auth_number` `biblio_auth_number` bigint(20) unsigned NOT NULL default 0");
2392     print "Upgrade to $DBversion done (Increased size of zebraqueue biblio_auth_number to address bug 3148.)\n";
2393     SetVersion ($DBversion);
2394 }
2395
2396 $DBversion = '3.01.00.028';
2397 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
2398     my $enable_reviews = C4::Context->preference('AmazonEnabled') ? '1' : '0';
2399     $dbh->do("INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES ('AmazonReviews', '$enable_reviews', 'Display Amazon reviews on staff interface','','YesNo')");
2400     print "Upgrade to $DBversion done (added AmazonReviews)\n";
2401     SetVersion ($DBversion);
2402 }
2403
2404 $DBversion = '3.01.00.029';
2405 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
2406     $dbh->do(q( UPDATE language_rfc4646_to_iso639
2407                 SET iso639_2_code = 'spa'
2408                 WHERE rfc4646_subtag = 'es'
2409                 AND   iso639_2_code = 'rus' )
2410             );
2411     print "Upgrade to $DBversion done (fixed bug 2599: using Spanish search limit retrieves Russian results)\n";
2412     SetVersion ($DBversion);
2413 }
2414
2415 $DBversion = "3.01.00.030";
2416 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
2417     $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')");
2418     print "Upgrade to $DBversion done (added AllowNotForLoanOverride system preference)\n";
2419     SetVersion ($DBversion);
2420 }
2421
2422 $DBversion = "3.01.00.031";
2423 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
2424     $dbh->do("ALTER TABLE branch_transfer_limits
2425               MODIFY toBranch   varchar(10) NOT NULL,
2426               MODIFY fromBranch varchar(10) NOT NULL,
2427               MODIFY itemtype   varchar(10) NULL");
2428     print "Upgrade to $DBversion done (fix column widths in branch_transfer_limits)\n";
2429     SetVersion ($DBversion);
2430 }
2431
2432 $DBversion = "3.01.00.032";
2433 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
2434     $dbh->do(<<ENDOFRENEWAL);
2435 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');
2436 ENDOFRENEWAL
2437     print "Upgrade to $DBversion done (Change the field)\n";
2438     SetVersion ($DBversion);
2439 }
2440
2441 $DBversion = "3.01.00.033";
2442 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
2443     $dbh->do(q/
2444         ALTER TABLE borrower_message_preferences
2445         MODIFY borrowernumber int(11) default NULL,
2446         ADD    categorycode varchar(10) default NULL AFTER borrowernumber,
2447         ADD KEY `categorycode` (`categorycode`),
2448         ADD CONSTRAINT `borrower_message_preferences_ibfk_3`
2449                        FOREIGN KEY (`categorycode`) REFERENCES `categories` (`categorycode`)
2450                        ON DELETE CASCADE ON UPDATE CASCADE
2451     /);
2452     print "Upgrade to $DBversion done (DB changes to allow patron category defaults for messaging preferences)\n";
2453     SetVersion ($DBversion);
2454 }
2455
2456 $DBversion = "3.01.00.034";
2457 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
2458     $dbh->do("ALTER TABLE `subscription` ADD COLUMN `graceperiod` INT(11) NOT NULL default '0';");
2459     print "Upgrade to $DBversion done (Adding graceperiod column to subscription table)\n";
2460     SetVersion ($DBversion);
2461 }
2462
2463 $DBversion = '3.01.00.035';
2464 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
2465     $dbh->do(q{ ALTER TABLE `subscription` ADD location varchar(80) NULL DEFAULT '' AFTER callnumber; });
2466    print "Upgrade to $DBversion done (Adding location to subscription table)\n";
2467     SetVersion ($DBversion);
2468 }
2469
2470 $DBversion = '3.01.00.036';
2471 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
2472     $dbh->do("UPDATE systempreferences SET explanation = 'Choose the default detail view in the staff interface; choose between normal, labeled_marc, marc or isbd'
2473               WHERE variable = 'IntranetBiblioDefaultView'
2474               AND   explanation = 'IntranetBiblioDefaultView'");
2475     $dbh->do("UPDATE systempreferences SET type = 'Choice', options = 'normal|marc|isbd|labeled_marc'
2476               WHERE variable = 'IntranetBiblioDefaultView'");
2477     $dbh->do("INSERT INTO systempreferences (variable,value,explanation,options,type)VALUES('viewISBD','1','Allow display of ISBD view of bibiographic records','','YesNo')");
2478     $dbh->do("INSERT INTO systempreferences (variable,value,explanation,options,type)VALUES('viewLabeledMARC','0','Allow display of labeled MARC view of bibiographic records','','YesNo')");
2479     $dbh->do("INSERT INTO systempreferences (variable,value,explanation,options,type)VALUES('viewMARC','1','Allow display of MARC view of bibiographic records','','YesNo')");
2480     print "Upgrade to $DBversion done (new viewISBD, viewLabeledMARC, viewMARC sysprefs and tweak IntranetBiblioDefaultView)\n";
2481     SetVersion ($DBversion);
2482 }
2483
2484 $DBversion = '3.01.00.037';
2485 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
2486     $dbh->do('ALTER TABLE authorised_values ADD KEY `lib` (`lib`)');
2487     $dbh->do("INSERT INTO systempreferences (variable,value,explanation,options,type)VALUES('FilterBeforeOverdueReport','0','Do not run overdue report until filter selected','','YesNo')");
2488     SetVersion ($DBversion);
2489     print "Upgrade to $DBversion done (added FilterBeforeOverdueReport syspref and new index on authorised_values)\n";
2490 }
2491
2492 $DBversion = "3.01.00.038";
2493 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
2494     # update branches table
2495     #
2496     $dbh->do("ALTER TABLE branches ADD `branchzip` varchar(25) default NULL AFTER `branchaddress3`");
2497     $dbh->do("ALTER TABLE branches ADD `branchcity` mediumtext AFTER `branchzip`");
2498     $dbh->do("ALTER TABLE branches ADD `branchcountry` text AFTER `branchcity`");
2499     $dbh->do("ALTER TABLE branches ADD `branchurl` mediumtext AFTER `branchemail`");
2500     $dbh->do("ALTER TABLE branches ADD `branchnotes` mediumtext AFTER `branchprinter`");
2501     print "Upgrade to $DBversion done (add ZIP, city, country, URL, and notes column to branches)\n";
2502     SetVersion ($DBversion);
2503 }
2504
2505 $DBversion = '3.01.00.039';
2506 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
2507     $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')");
2508     $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')");
2509     SetVersion ($DBversion);
2510     print "Upgrade to $DBversion done (added SpineLabelFormat and SpineLabelAutoPrint sysprefs)\n";
2511 }
2512
2513 $DBversion = '3.01.00.040';
2514 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
2515     $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')");
2516     $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')");
2517     SetVersion ($DBversion);
2518     print "Upgrade to $DBversion done (AllowHoldDateInFuture and OPACAllowHoldDateInFuture sysprefs)\n";
2519 }
2520
2521 $DBversion = '3.01.00.041';
2522 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
2523     $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')");
2524     SetVersion ($DBversion);
2525     print "Upgrade to $DBversion done (added AWSPrivateKey syspref - note that if you use enhanced content from Amazon, this should be set right away.)\n";
2526 }
2527
2528 $DBversion = '3.01.00.042';
2529 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
2530     $dbh->do("INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('OPACFineNoRenewals','99999','Fine Limit above which user canmot renew books via OPAC','','Integer')");
2531     SetVersion ($DBversion);
2532     print "Upgrade to $DBversion done (added OPACFineNoRenewals syspref)\n";
2533 }
2534
2535 $DBversion = '3.01.00.043';
2536 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
2537     $dbh->do('ALTER TABLE items ADD COLUMN permanent_location VARCHAR(80) DEFAULT NULL AFTER location');
2538     $dbh->do('UPDATE items SET permanent_location = location');
2539     $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 )', '')");
2540     $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')");
2541     $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')");
2542     SetVersion ($DBversion);
2543     print "Upgrade to $DBversion done (amended Item added NewItemsDefaultLocation, InProcessingToShelvingCart, ReturnToShelvingCart sysprefs)\n";
2544 }
2545
2546 $DBversion = '3.01.00.044';
2547 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
2548     $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')");
2549     SetVersion ($DBversion);
2550     print "Upgrade to $DBversion done (added DisplayClearScreenButton system preference)\n";
2551 }
2552
2553 $DBversion = '3.01.00.045';
2554 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
2555     $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')");
2556     SetVersion ($DBversion);
2557     print "Upgrade to $DBversion done (added a preference to hide the patrons name in the staff catalog)\n";
2558 }
2559
2560 $DBversion = "3.01.00.046";
2561 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
2562     # update borrowers table
2563     #
2564     $dbh->do("ALTER TABLE borrowers ADD `country` text AFTER zipcode");
2565     $dbh->do("ALTER TABLE borrowers ADD `B_country` text AFTER B_zipcode");
2566     $dbh->do("ALTER TABLE deletedborrowers ADD `country` text AFTER zipcode");
2567     $dbh->do("ALTER TABLE deletedborrowers ADD `B_country` text AFTER B_zipcode");
2568     print "Upgrade to $DBversion done (add country and B_country to borrowers)\n";
2569     SetVersion ($DBversion);
2570 }
2571
2572 $DBversion = '3.01.00.047';
2573 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
2574     $dbh->do("ALTER TABLE items MODIFY itemcallnumber varchar(255);");
2575     $dbh->do("ALTER TABLE deleteditems MODIFY itemcallnumber varchar(255);");
2576     $dbh->do("ALTER TABLE tmp_holdsqueue MODIFY itemcallnumber varchar(255);");
2577     SetVersion ($DBversion);
2578     print " Upgrade to $DBversion done (bug 2761: change max length of itemcallnumber to 255 from 30)\n";
2579 }
2580
2581 $DBversion = '3.01.00.048';
2582 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
2583     $dbh->do("UPDATE userflags SET flagdesc='View Catalog (Librarian Interface)' WHERE bit=2;");
2584     $dbh->do("UPDATE userflags SET flagdesc='Edit Catalog (Modify bibliographic/holdings data)' WHERE bit=9;");
2585     $dbh->do("UPDATE userflags SET flagdesc='Allow to edit authorities' WHERE bit=14;");
2586     $dbh->do("UPDATE userflags SET flagdesc='Allow to access to the reports module' WHERE bit=16;");
2587     $dbh->do("UPDATE userflags SET flagdesc='Allow to manage serials subscriptions' WHERE bit=15;");
2588     SetVersion ($DBversion);
2589     print " Upgrade to $DBversion done (bug 2611: fix spelling/capitalization in permission flag descriptions)\n";
2590 }
2591
2592 $DBversion = '3.01.00.049';
2593 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
2594     $dbh->do("UPDATE permissions SET description = 'Perform inventory (stocktaking) of your catalog' WHERE code = 'inventory';");
2595      SetVersion ($DBversion);
2596     print "Upgrade to $DBversion done (bug 2611: changed catalogue to catalog per the standard)\n";
2597 }
2598
2599 $DBversion = '3.01.00.050';
2600 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
2601     $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');");
2602     SetVersion ($DBversion);
2603     print "Upgrade to $DBversion done (bug 1934: Add OPACSearchForTitleIn syspref)\n";
2604 }
2605
2606 $DBversion = '3.01.00.051';
2607 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
2608     $dbh->do("UPDATE systempreferences SET explanation='Fine limit above which user cannot renew books via OPAC' WHERE variable='OPACFineNoRenewals';");
2609     $dbh->do("UPDATE systempreferences SET explanation='If set to ON, a clear screen button will appear on the circulation page.' WHERE variable='DisplayClearScreenButton';");
2610     SetVersion ($DBversion);
2611     print "Upgrade to $DBversion done (fixed typos in new sysprefs)\n";
2612 }
2613
2614 $DBversion = '3.01.00.052';
2615 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
2616     $dbh->do('ALTER TABLE deleteditems ADD COLUMN permanent_location VARCHAR(80) DEFAULT NULL AFTER location');
2617     SetVersion ($DBversion);
2618     print "Upgrade to $DBversion done (bug 3481: add permanent_location column to deleteditems)\n";
2619 }
2620
2621 $DBversion = '3.01.00.053';
2622 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
2623     my $upgrade_script = C4::Context->config("intranetdir") . "/installer/data/mysql/labels_upgrade.pl";
2624     system("perl $upgrade_script");
2625     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";
2626     SetVersion ($DBversion);
2627 }
2628
2629 $DBversion = '3.01.00.054';
2630 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
2631     $dbh->do("ALTER TABLE borrowers ADD `B_address2` text AFTER B_address");
2632     $dbh->do("ALTER TABLE borrowers ADD `altcontactcountry` text AFTER altcontactzipcode");
2633     $dbh->do("ALTER TABLE deletedborrowers ADD `B_address2` text AFTER B_address");
2634     $dbh->do("ALTER TABLE deletedborrowers ADD `altcontactcountry` text AFTER altcontactzipcode");
2635     SetVersion ($DBversion);
2636     print "Upgrade to $DBversion done (bug 1600, bug 3454: add altcontactcountry and B_address2 to borrowers and deletedborrowers)\n";
2637 }
2638
2639 $DBversion = '3.01.00.055';
2640 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
2641     $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'|);
2642     SetVersion ($DBversion);
2643     print "Upgrade to $DBversion done (changed OPACSearchForTitleIn per requests in bug 1934)\n";
2644 }
2645
2646 $DBversion = '3.01.00.056';
2647 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
2648     $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');");
2649     SetVersion ($DBversion);
2650     print "Upgrade to $DBversion done (Bug 1172 : Add OPACPatronDetails syspref)\n";
2651 }
2652
2653 $DBversion = '3.01.00.057';
2654 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
2655     $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');");
2656     SetVersion ($DBversion);
2657     print "Upgrade to $DBversion done (Bug 2576 : Add OPACFinesTab syspref)\n";
2658 }
2659
2660 $DBversion = '3.01.00.058';
2661 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
2662     $dbh->do("ALTER TABLE `language_subtag_registry` ADD `id` INT( 11 ) NOT NULL AUTO_INCREMENT PRIMARY KEY;");
2663     $dbh->do("ALTER TABLE `language_rfc4646_to_iso639` ADD `id` INT( 11 ) NOT NULL AUTO_INCREMENT PRIMARY KEY;");
2664     $dbh->do("ALTER TABLE `language_descriptions` ADD `id` INT( 11 ) NOT NULL AUTO_INCREMENT PRIMARY KEY;");
2665     SetVersion ($DBversion);
2666     print "Upgrade to $DBversion done (Added primary keys to language tables)\n";
2667 }
2668
2669 $DBversion = '3.01.00.059';
2670 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
2671     $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')");
2672     SetVersion ($DBversion);
2673     print "Upgrade to $DBversion done (added DisplayOPACiconsXSLT sysprefs)\n";
2674 }
2675
2676 $DBversion = '3.01.00.060';
2677 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
2678     $dbh->do("INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES('AllowAllMessageDeletion','0','Allow any Library to delete any message','','YesNo');");
2679     $dbh->do('DROP TABLE IF EXISTS messages');
2680     $dbh->do("CREATE TABLE messages ( `message_id` int(11) NOT NULL auto_increment,
2681         `borrowernumber` int(11) NOT NULL,
2682         `branchcode` varchar(4) default NULL,
2683         `message_type` varchar(1) NOT NULL,
2684         `message` text NOT NULL,
2685         `message_date` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
2686         PRIMARY KEY (`message_id`)
2687         ) ENGINE=InnoDB DEFAULT CHARSET=utf8");
2688
2689         print "Upgrade to $DBversion done ( Added AllowAllMessageDeletion syspref and messages table )\n";
2690     SetVersion ($DBversion);
2691 }
2692
2693 $DBversion = '3.01.00.061';
2694 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
2695     $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')");
2696         print "Upgrade to $DBversion done ( Added ShowPatronImageInWebBasedSelfCheck system preference )\n";
2697     SetVersion ($DBversion);
2698 }
2699
2700 $DBversion = "3.01.00.062";
2701 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
2702     $dbh->do("INSERT INTO permissions (module_bit, code, description) VALUES ( 13, 'manage_csv_profiles', 'Manage CSV export profiles')");
2703     $dbh->do(q/
2704         CREATE TABLE `export_format` (
2705           `export_format_id` int(11) NOT NULL auto_increment,
2706           `profile` varchar(255) NOT NULL,
2707           `description` mediumtext NOT NULL,
2708           `marcfields` mediumtext NOT NULL,
2709           PRIMARY KEY  (`export_format_id`)
2710         ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='Used for CSV export';
2711     /);
2712     print "Upgrade to $DBversion done (added csv export profiles)\n";
2713 }
2714
2715 $DBversion = "3.01.00.063";
2716 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
2717     $dbh->do("
2718         CREATE TABLE `fieldmapping` (
2719           `id` int(11) NOT NULL auto_increment,
2720           `field` varchar(255) NOT NULL,
2721           `frameworkcode` char(4) NOT NULL default '',
2722           `fieldcode` char(3) NOT NULL,
2723           `subfieldcode` char(1) NOT NULL,
2724           PRIMARY KEY  (`id`)
2725         ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
2726              ");
2727     SetVersion ($DBversion);print "Upgrade to $DBversion done (Created table fieldmapping)\n";print "Upgrade to 3.01.00.064 done (Version number skipped: nothing done)\n";
2728 }
2729
2730 $DBversion = '3.01.00.065';
2731 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
2732     $dbh->do('ALTER TABLE issuingrules ADD COLUMN `renewalsallowed` smallint(6) NOT NULL default "0" AFTER `issuelength`;');
2733     $sth = $dbh->prepare("SELECT itemtype, renewalsallowed FROM itemtypes");
2734     $sth->execute();
2735
2736     my $sthupd = $dbh->prepare("UPDATE issuingrules SET renewalsallowed = ? WHERE itemtype = ?");
2737
2738     while(my $row = $sth->fetchrow_hashref){
2739         $sthupd->execute($row->{renewalsallowed}, $row->{itemtype});
2740     }
2741
2742     $dbh->do('ALTER TABLE itemtypes DROP COLUMN `renewalsallowed`;');
2743
2744     SetVersion ($DBversion);
2745     print "Upgrade to $DBversion done (Moving allowed renewals from itemtypes to issuingrule)\n";
2746 }
2747
2748 $DBversion = '3.01.00.066';
2749 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
2750     $dbh->do('ALTER TABLE issuingrules ADD COLUMN `reservesallowed` smallint(6) NOT NULL default "0" AFTER `renewalsallowed`;');
2751
2752     my $maxreserves = C4::Context->preference('maxreserves');
2753     $sth = $dbh->prepare('UPDATE issuingrules SET reservesallowed = ?;');
2754     $sth->execute($maxreserves);
2755
2756     $dbh->do('DELETE FROM systempreferences WHERE variable = "maxreserves";');
2757
2758     $dbh->do("INSERT INTO systempreferences (variable,value, options, explanation, type) VALUES('ReservesControlBranch','PatronLibrary','ItemHomeLibrary|PatronLibrary','Branch checked for members reservations rights','Choice')");
2759
2760     SetVersion ($DBversion);
2761     print "Upgrade to $DBversion done (Moving max allowed reserves from system preference to issuingrule)\n";
2762 }
2763
2764 $DBversion = "3.01.00.067";
2765 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
2766     $dbh->do("INSERT INTO permissions (module_bit, code, description) VALUES ( 13, 'batchmod', 'Perform batch modification of items')");
2767     $dbh->do("INSERT INTO permissions (module_bit, code, description) VALUES ( 13, 'batchdel', 'Perform batch deletion of items')");
2768     print "Upgrade to $DBversion done (added permissions for batch modification and deletion)\n";
2769     SetVersion ($DBversion);
2770 }
2771
2772 $DBversion = "3.01.00.068";
2773 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
2774         $dbh->do("ALTER TABLE issuingrules ADD COLUMN `finedays` int(11) default NULL AFTER `fine` ");
2775         print "Upgrade to $DBversion done (Adding finedays in issuingrules table)\n";
2776     SetVersion ($DBversion);
2777 }
2778
2779
2780 $DBversion = "3.01.00.069";
2781 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
2782         $dbh->do("INSERT INTO `systempreferences` (`variable`, `value`, `options`, `explanation`, `type`) VALUES ('EnableOpacSearchHistory', '1', '', 'Enable or disable opac search history', 'YesNo')");
2783
2784         my $create = <<SEARCHHIST;
2785 CREATE TABLE IF NOT EXISTS `search_history` (
2786   `userid` int(11) NOT NULL,
2787   `sessionid` varchar(32) NOT NULL,
2788   `query_desc` varchar(255) NOT NULL,
2789   `query_cgi` varchar(255) NOT NULL,
2790   `total` int(11) NOT NULL,
2791   `time` timestamp NOT NULL default CURRENT_TIMESTAMP,
2792   KEY `userid` (`userid`),
2793   KEY `sessionid` (`sessionid`)
2794 ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='Opac search history results';
2795 SEARCHHIST
2796         $dbh->do($create);
2797
2798         print "Upgrade to $DBversion done (added OPAC search history preference and table)\n";
2799 }
2800
2801 $DBversion = "3.01.00.070";
2802 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
2803         $dbh->do("ALTER TABLE authorised_values ADD COLUMN `lib_opac` VARCHAR(80) default NULL AFTER `lib`");
2804         print "Upgrade to $DBversion done (Added a lib_opac field in authorised_values table)\n";
2805 }
2806
2807 $DBversion = "3.01.00.071";
2808 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
2809         $dbh->do("ALTER TABLE `subscription` ADD `enddate` date default NULL");
2810         $dbh->do("ALTER TABLE subscriptionhistory CHANGE enddate histenddate DATE default NULL");
2811         print "Upgrade to $DBversion done ( Adding enddate to subscription)\n";
2812 }
2813
2814 # Acquisitions update
2815
2816 $DBversion = "3.01.00.072";
2817 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
2818     $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')");
2819     # create a new syspref for the 'Mr anonymous' patron
2820     $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,'')");
2821     # fill AnonymousPatron with AnonymousSuggestion value (copy)
2822     my $sth=$dbh->prepare("SELECT value FROM systempreferences WHERE variable='AnonSuggestions'");
2823     $sth->execute;
2824     my ($value) = $sth->fetchrow() || 0;
2825     $dbh->do("UPDATE systempreferences SET value='$value' WHERE variable='AnonymousPatron'");
2826     # set AnonymousSuggestion do YesNo
2827     # 1st, set the value (1/True if it had a borrowernumber)
2828     $dbh->do("UPDATE systempreferences SET value=1 WHERE variable='AnonSuggestions' AND value>0");
2829     # 2nd, change the type to Choice
2830     $dbh->do("UPDATE systempreferences SET type='YesNo' WHERE variable='AnonSuggestions'");
2831         # borrower reading record privacy : 0 : forever, 1 : laws, 2 : don't keep at all
2832     $dbh->do("ALTER TABLE `borrowers` ADD `privacy` INTEGER NOT NULL DEFAULT 1;");
2833     print "Upgrade to $DBversion done (add new syspref and column in borrowers)\n";
2834     SetVersion ($DBversion);
2835 }
2836
2837 $DBversion = '3.01.00.073';
2838 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
2839     $dbh->do('SET FOREIGN_KEY_CHECKS=0 ');
2840     $dbh->do(<<'END_SQL');
2841 CREATE TABLE IF NOT EXISTS `aqcontract` (
2842   `contractnumber` int(11) NOT NULL auto_increment,
2843   `contractstartdate` date default NULL,
2844   `contractenddate` date default NULL,
2845   `contractname` varchar(50) default NULL,
2846   `contractdescription` mediumtext,
2847   `booksellerid` int(11) not NULL,
2848     PRIMARY KEY  (`contractnumber`),
2849         CONSTRAINT `booksellerid_fk1` FOREIGN KEY (`booksellerid`)
2850         REFERENCES `aqbooksellers` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
2851 ) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
2852 END_SQL
2853     $dbh->do('SET FOREIGN_KEY_CHECKS=1 ');
2854     print "Upgrade to $DBversion done (adding aqcontract table)\n";
2855     SetVersion ($DBversion);
2856 }
2857
2858 $DBversion = '3.01.00.074';
2859 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
2860     $dbh->do("ALTER TABLE `aqbasket` ADD COLUMN `basketname` varchar(50) default NULL AFTER `basketno`");
2861     $dbh->do("ALTER TABLE `aqbasket` ADD COLUMN `note` mediumtext AFTER `basketname`");
2862     $dbh->do("ALTER TABLE `aqbasket` ADD COLUMN `booksellernote` mediumtext AFTER `note`");
2863     $dbh->do("ALTER TABLE `aqbasket` ADD COLUMN `contractnumber` int(11) AFTER `booksellernote`");
2864     $dbh->do("ALTER TABLE `aqbasket` ADD FOREIGN KEY (`contractnumber`) REFERENCES `aqcontract` (`contractnumber`)");
2865     print "Upgrade to $DBversion done (edit aqbasket table done)\n";
2866     SetVersion ($DBversion);
2867 }
2868
2869 $DBversion = '3.01.00.075';
2870 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
2871     $dbh->do("ALTER TABLE `aqorders` ADD COLUMN `uncertainprice` tinyint(1)");
2872
2873     print "Upgrade to $DBversion done (adding uncertainprices)\n";
2874     SetVersion ($DBversion);
2875 }
2876
2877 $DBversion = '3.01.00.076';
2878 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
2879     $dbh->do('SET FOREIGN_KEY_CHECKS=0 ');
2880     $dbh->do("CREATE TABLE IF NOT EXISTS `aqbasketgroups` (
2881                          `id` int(11) NOT NULL auto_increment,
2882                          `name` varchar(50) default NULL,
2883                          `closed` tinyint(1) default NULL,
2884                          `booksellerid` int(11) NOT NULL,
2885                          PRIMARY KEY (`id`),
2886                          KEY `booksellerid` (`booksellerid`),
2887                          CONSTRAINT `aqbasketgroups_ibfk_1` FOREIGN KEY (`booksellerid`) REFERENCES `aqbooksellers` (`id`) ON UPDATE CASCADE ON DELETE CASCADE
2888                          ) ENGINE=InnoDB DEFAULT CHARSET=utf8;");
2889     $dbh->do("ALTER TABLE aqbasket ADD COLUMN `basketgroupid` int(11)");
2890     $dbh->do("ALTER TABLE aqbasket ADD FOREIGN KEY (`basketgroupid`) REFERENCES `aqbasketgroups` (`id`) ON UPDATE CASCADE ON DELETE SET NULL");
2891     $dbh->do("INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES ('pdfformat','pdfformat::layout2pages','Controls what script is used for printing (basketgroups)','','free')");
2892     $dbh->do('SET FOREIGN_KEY_CHECKS=1 ');
2893     print "Upgrade to $DBversion done (adding basketgroups)\n";
2894     SetVersion ($DBversion);
2895 }
2896 $DBversion = '3.01.00.077';
2897 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
2898
2899     $dbh->do("SET FOREIGN_KEY_CHECKS=0 ");
2900     # create a mapping table holding the info we need to match orders to budgets
2901     $dbh->do('DROP TABLE IF EXISTS fundmapping');
2902     $dbh->do(
2903         q|CREATE TABLE fundmapping AS
2904         SELECT aqorderbreakdown.ordernumber, branchcode, bookfundid, budgetdate, entrydate
2905         FROM aqorderbreakdown JOIN aqorders ON aqorderbreakdown.ordernumber = aqorders.ordernumber|);
2906     # match the new type of the corresponding field
2907     $dbh->do('ALTER TABLE fundmapping modify column bookfundid varchar(30)');
2908     # System did not ensure budgetdate was valid historically
2909     $dbh->do(q|UPDATE fundmapping SET budgetdate = entrydate WHERE budgetdate = '0000-00-00' OR budgetdate IS NULL|);
2910     # We save the map in fundmapping in case you need later processing
2911     $dbh->do(q|ALTER TABLE fundmapping add column aqbudgetid integer|);
2912     # these can speed processing up
2913     $dbh->do(q|CREATE INDEX fundmaporder ON fundmapping (ordernumber)|);
2914     $dbh->do(q|CREATE INDEX fundmapid ON fundmapping (bookfundid)|);
2915
2916     $dbh->do("DROP TABLE IF EXISTS `aqbudgetperiods` ");
2917
2918     $dbh->do(qq|
2919                     CREATE TABLE `aqbudgetperiods` (
2920                     `budget_period_id` int(11) NOT NULL auto_increment,
2921                     `budget_period_startdate` date NOT NULL,
2922                     `budget_period_enddate` date NOT NULL,
2923                     `budget_period_active` tinyint(1) default '0',
2924                     `budget_period_description` mediumtext,
2925                     `budget_period_locked` tinyint(1) default NULL,
2926                     `sort1_authcat` varchar(10) default NULL,
2927                     `sort2_authcat` varchar(10) default NULL,
2928                     PRIMARY KEY  (`budget_period_id`)
2929                     ) ENGINE=InnoDB  DEFAULT CHARSET=utf8 |);
2930
2931    $dbh->do(<<ADDPERIODS);
2932 INSERT INTO aqbudgetperiods (budget_period_startdate,budget_period_enddate,budget_period_active,budget_period_description,budget_period_locked)
2933 SELECT DISTINCT startdate, enddate, NOW() BETWEEN startdate and enddate, concat(startdate," ",enddate),NOT NOW() BETWEEN startdate AND enddate from aqbudget
2934 ADDPERIODS
2935 # SORRY , NO AQBUDGET/AQBOOKFUND -> AQBUDGETS IMPORT JUST YET,
2936 # BUT A NEW CLEAN AQBUDGETS TABLE CREATE FOR NOW..
2937 # DROP TABLE IF EXISTS `aqbudget`;
2938 #CREATE TABLE `aqbudget` (
2939 #  `bookfundid` varchar(10) NOT NULL default ',
2940 #    `startdate` date NOT NULL default 0,
2941 #         `enddate` date default NULL,
2942 #           `budgetamount` decimal(13,2) default NULL,
2943 #                 `aqbudgetid` tinyint(4) NOT NULL auto_increment,
2944 #                   `branchcode` varchar(10) default NULL,
2945     DropAllForeignKeys('aqbudget');
2946   #$dbh->do("drop table aqbudget;");
2947
2948
2949     my $maxbudgetid = $dbh->selectcol_arrayref(<<IDsBUDGET);
2950 SELECT MAX(aqbudgetid) from aqbudget
2951 IDsBUDGET
2952
2953 $$maxbudgetid[0] = 0 if !$$maxbudgetid[0];
2954
2955     $dbh->do(<<BUDGETAUTOINCREMENT);
2956 ALTER TABLE aqbudget AUTO_INCREMENT=$$maxbudgetid[0]
2957 BUDGETAUTOINCREMENT
2958
2959     $dbh->do(<<BUDGETNAME);
2960 ALTER TABLE aqbudget RENAME `aqbudgets`
2961 BUDGETNAME
2962
2963     $dbh->do(<<BUDGETS);
2964 ALTER TABLE `aqbudgets`
2965    CHANGE  COLUMN aqbudgetid `budget_id` int(11) NOT NULL AUTO_INCREMENT,
2966    CHANGE  COLUMN branchcode `budget_branchcode` varchar(10) default NULL,
2967    CHANGE  COLUMN budgetamount `budget_amount` decimal(28,6) NOT NULL default '0.00',
2968    CHANGE  COLUMN bookfundid   `budget_code` varchar(30) default NULL,
2969    ADD     COLUMN `budget_parent_id` int(11) default NULL,
2970    ADD     COLUMN `budget_name` varchar(80) default NULL,
2971    ADD     COLUMN `budget_encumb` decimal(28,6) default '0.00',
2972    ADD     COLUMN `budget_expend` decimal(28,6) default '0.00',
2973    ADD     COLUMN `budget_notes` mediumtext,
2974    ADD     COLUMN `budget_description` mediumtext,
2975    ADD     COLUMN `timestamp` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
2976    ADD     COLUMN `budget_amount_sublevel`  decimal(28,6) AFTER `budget_amount`,
2977    ADD     COLUMN `budget_period_id` int(11) default NULL,
2978    ADD     COLUMN `sort1_authcat` varchar(80) default NULL,
2979    ADD     COLUMN `sort2_authcat` varchar(80) default NULL,
2980    ADD     COLUMN `budget_owner_id` int(11) default NULL,
2981    ADD     COLUMN `budget_permission` int(1) default '0';
2982 BUDGETS
2983
2984     $dbh->do(<<BUDGETCONSTRAINTS);
2985 ALTER TABLE `aqbudgets`
2986    ADD CONSTRAINT `aqbudgets_ifbk_1` FOREIGN KEY (`budget_period_id`) REFERENCES `aqbudgetperiods` (`budget_period_id`) ON DELETE CASCADE ON UPDATE CASCADE
2987 BUDGETCONSTRAINTS
2988 #    $dbh->do(<<BUDGETPKDROP);
2989 #ALTER TABLE `aqbudgets`
2990 #   DROP PRIMARY KEY
2991 #BUDGETPKDROP
2992 #    $dbh->do(<<BUDGETPKADD);
2993 #ALTER TABLE `aqbudgets`
2994 #   ADD PRIMARY KEY budget_id
2995 #BUDGETPKADD
2996
2997
2998         my $query_period= $dbh->prepare(qq|SELECT budget_period_id from aqbudgetperiods where budget_period_startdate=? and budget_period_enddate=?|);
2999         my $query_bookfund= $dbh->prepare(qq|SELECT * from aqbookfund where bookfundid=?|);
3000         my $selectbudgets=$dbh->prepare(qq|SELECT * from aqbudgets|);
3001         my $updatebudgets=$dbh->prepare(qq|UPDATE aqbudgets SET budget_period_id= ? , budget_name=?, budget_branchcode=? where budget_id=?|);
3002         $selectbudgets->execute;
3003         while (my $databudget=$selectbudgets->fetchrow_hashref){
3004                 $query_period->execute ($$databudget{startdate},$$databudget{enddate});
3005                 my ($budgetperiodid)=$query_period->fetchrow;
3006                 $query_bookfund->execute ($$databudget{budget_code});
3007                 my $databf=$query_bookfund->fetchrow_hashref;
3008                 my $branchcode=$$databudget{budget_branchcode}||$$databf{branchcode};
3009                 $updatebudgets->execute($budgetperiodid,$$databf{bookfundname},$branchcode,$$databudget{budget_id});
3010         }
3011     $dbh->do(<<BUDGETDROPDATES);
3012 ALTER TABLE `aqbudgets`
3013    DROP startdate,
3014    DROP enddate
3015 BUDGETDROPDATES
3016
3017
3018     $dbh->do("DROP TABLE IF EXISTS `aqbudgets_planning` ");
3019     $dbh->do("CREATE TABLE  `aqbudgets_planning` (
3020                     `plan_id` int(11) NOT NULL auto_increment,
3021                     `budget_id` int(11) NOT NULL,
3022                     `budget_period_id` int(11) NOT NULL,
3023                     `estimated_amount` decimal(28,6) default NULL,
3024                     `authcat` varchar(30) NOT NULL,
3025                     `authvalue` varchar(30) NOT NULL,
3026                                         `display` tinyint(1) DEFAULT 1,
3027                         PRIMARY KEY  (`plan_id`),
3028                         CONSTRAINT `aqbudgets_planning_ifbk_1` FOREIGN KEY (`budget_id`) REFERENCES `aqbudgets` (`budget_id`) ON DELETE CASCADE ON UPDATE CASCADE
3029                         ) ENGINE=InnoDB DEFAULT CHARSET=utf8;");
3030
3031     $dbh->do("ALTER TABLE `aqorders`
3032                     ADD COLUMN `budget_id` tinyint(4) NOT NULL,
3033                     ADD COLUMN `budgetgroup_id` int(11) NOT NULL,
3034                     ADD COLUMN  `sort1_authcat` varchar(10) default NULL,
3035                     ADD COLUMN  `sort2_authcat` varchar(10) default NULL" );