Bug 8083 follow-up DBRev number
[koha.git] / installer / data / mysql / updatedatabase.pl
index b3c5691..dbceb8d 100755 (executable)
@@ -3974,20 +3974,25 @@ if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
 }
 
 $DBversion = "3.03.00.015";
-if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
-    my $sth = $dbh->prepare("INSERT INTO `marc_subfield_structure` (`tagfield`, `tagsubfield`, `liblibrarian`, `libopac`, `repeatable`, `mandatory`, `kohafield`, 
+if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
+    if ( C4::Context->preference("marcflavour") eq "MARC21" ) {
+        my $sth = $dbh->prepare(
+"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 ( ?, '9', '9 (RLIN)', '9 (RLIN)', 0, 0, '', 6, '', '', '', 0, -5, '', '', '', NULL)");
-    $sth->execute('648');
-    $sth->execute('654');
-    $sth->execute('655');
-    $sth->execute('656');
-    $sth->execute('657');
-    $sth->execute('658');
-    $sth->execute('662');
-    $sth->finish;
-    print "Upgrade to $DBversion done (Bug 5619: Add subfield 9 to marc21 648,654,655,656,657,658,662)\n";
-    SetVersion ($DBversion);
+                             VALUES ( ?, '9', '9 (RLIN)', '9 (RLIN)', 0, 0, '', 6, '', '', '', 0, -5, '', '', '', NULL)"
+        );
+        $sth->execute('648');
+        $sth->execute('654');
+        $sth->execute('655');
+        $sth->execute('656');
+        $sth->execute('657');
+        $sth->execute('658');
+        $sth->execute('662');
+        $sth->finish;
+        print
+"Upgrade to $DBversion done (Bug 5619: Add subfield 9 to marc21 648,654,655,656,657,658,662)\n";
+    }
+    SetVersion($DBversion);
 }
 
 $DBversion = '3.03.00.016';
@@ -4664,7 +4669,7 @@ ENDOFRENEWAL
 
 $DBversion = "3.07.00.012";
 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
-    $dbh->do("INSERT INTO `systempreferences` (variable,value,options,explanation,type) VALUES ('AllowItemsOnHoldCheckout',0,'Do not generate RESERVE_WAITING and RESERVED warning when checking out items reserved to someone else. This allows self checkouts for those items.','','YesNo')");
+    $dbh->do("INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES ('AllowItemsOnHoldCheckout',0,'Do not generate RESERVE_WAITING and RESERVED warning when checking out items reserved to someone else. This allows self checkouts for those items.','','YesNo')");
     print "Upgrade to $DBversion add 'AllowItemsOnHoldCheckout' syspref \n";
     SetVersion ($DBversion);
 }
@@ -4893,19 +4898,21 @@ if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
 
 $DBversion = "3.07.00.025";
 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
-    $dbh->do( q|DROP TABLE bibliocoverimage;| );
-    $dbh->do(
-        q|CREATE TABLE biblioimages (
-          imagenumber int(11) NOT NULL AUTO_INCREMENT,
-          biblionumber int(11) NOT NULL,
-          mimetype varchar(15) NOT NULL,
-          imagefile mediumblob NOT NULL,
-          thumbnail mediumblob NOT NULL,
-          PRIMARY KEY (imagenumber),
-          CONSTRAINT bibliocoverimage_fk1 FOREIGN KEY (biblionumber) REFERENCES biblio (biblionumber) ON DELETE CASCADE ON UPDATE CASCADE
-          ) ENGINE=InnoDB DEFAULT CHARSET=utf8;|
-    );
-    print "Upgrade to $DBversion done (Correct table name for local cover images [please disregard the following error messages: \"Unknown table 'bibliocoverimage'...\" and \"Table 'biblioimages' already exists...\"])\n";
+    if (TableExists('bibliocoverimage')) {
+        $dbh->do( q|DROP TABLE bibliocoverimage;| );
+        $dbh->do(
+            q|CREATE TABLE biblioimages (
+              imagenumber int(11) NOT NULL AUTO_INCREMENT,
+              biblionumber int(11) NOT NULL,
+              mimetype varchar(15) NOT NULL,
+              imagefile mediumblob NOT NULL,
+              thumbnail mediumblob NOT NULL,
+              PRIMARY KEY (imagenumber),
+              CONSTRAINT bibliocoverimage_fk1 FOREIGN KEY (biblionumber) REFERENCES biblio (biblionumber) ON DELETE CASCADE ON UPDATE CASCADE
+              ) ENGINE=InnoDB DEFAULT CHARSET=utf8;|
+        );
+    }
+    print "Upgrade to $DBversion done (Correct table name for local cover images if needed. )\n";
     SetVersion($DBversion);
 }
 
@@ -4929,7 +4936,6 @@ if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
     INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES ('AllowPKIAuth','None','Use the field from a client-side SSL certificate to look a user in the Koha database','None|Common Name|emailAddress','Choice');
     });
     print "Upgrade to $DBversion done (Bug 6296 New System preference AllowPKIAuth)\n";
-    SetVersion($DBversion);
 }
 
 $DBversion = "3.07.00.029";
@@ -5012,6 +5018,7 @@ if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
 $DBversion = "3.07.00.035";
 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
     $dbh->do("ALTER TABLE issues CHANGE date_due date_due datetime");
+    $dbh->do("UPDATE issues SET date_due = CONCAT(SUBSTR(date_due,1,11),'23:59:00')");
     $dbh->do("ALTER TABLE issues CHANGE returndate returndate datetime");
     $dbh->do("ALTER TABLE issues CHANGE lastreneweddate lastreneweddate datetime");
     $dbh->do("ALTER TABLE issues CHANGE issuedate issuedate datetime");
@@ -5043,6 +5050,9 @@ if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
        UPDATE marc_subfield_structure SET maxlength = IF ((SELECT value FROM systempreferences WHERE variable = 'marcflavour')='MARC21','40','9999') WHERE tagfield='008';
        ");
        $dbh->do("
+       UPDATE marc_subfield_structure SET maxlength = IF ((SELECT value FROM systempreferences WHERE variable = 'marcflavour')='NORMARC','40','9999') WHERE tagfield='008';
+       ");
+       $dbh->do("
        UPDATE marc_subfield_structure SET maxlength = IF ((SELECT value FROM systempreferences WHERE variable = 'marcflavour')='UNIMARC','36','9999') WHERE tagfield='100';
        ");
     print "Upgrade to $DBversion done (Add new field maxlength to marc_subfield_structure)\n";
@@ -5090,7 +5100,7 @@ if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
 $DBversion = "3.07.00.041";
 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
     $dbh->do("INSERT INTO systempreferences (variable,value,options,explanation,type) VALUES('SubscriptionDuplicateDroppedInput','','','List of fields which must not be rewritten when a subscription is duplicated (Separated by pipe |)','Free')");
-    print "Upgrade to $DBversion done (Add System Preferences SubscriptionDuplicateDroppedInput)\n";
+    print "Upgrade to $DBversion done (Add system preference SubscriptionDuplicateDroppedInput)\n";
     SetVersion($DBversion);
 }
 
@@ -5134,7 +5144,7 @@ if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
         $dbh->do("UPDATE systempreferences SET type='Free', value=\"$valueOPACXSLTDetailsDisplay\" WHERE variable='OPACXSLTDetailsDisplay'");
         $dbh->do("UPDATE systempreferences SET type='Free', value=\"$valueOPACXSLTResultsDisplay\" WHERE variable='OPACXSLTResultsDisplay'");
     }
-    print "XSLT systempreference takes a path to file rather than YesNo\n";
+    print "Upgrade to $DBversion done (XSLT systempreference takes a path to file rather than YesNo)\n";
     SetVersion($DBversion);
 }
 
@@ -5159,8 +5169,410 @@ if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
     SetVersion($DBversion);
 }
 
+$DBversion = "3.07.00.047";
+if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
+    $dbh->do("CREATE INDEX items_location ON items(location)");
+    $dbh->do("CREATE INDEX items_ccode ON items(ccode)");
+    print "Upgrade to $DBversion done (items_location and items_ccode indexes added for ShelfBrowser)\n";
+    SetVersion($DBversion);
+}
+
+$DBversion = "3.07.00.048";
+if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
+    $dbh->do(
+        q | CREATE TABLE ratings (
+  borrowernumber int(11) NOT NULL,
+  biblionumber int(11) NOT NULL,
+  rating_value tinyint(1) NOT NULL,
+  timestamp timestamp NOT NULL default CURRENT_TIMESTAMP,
+  PRIMARY KEY  (borrowernumber,biblionumber),
+  CONSTRAINT ratings_ibfk_1 FOREIGN KEY (borrowernumber) REFERENCES borrowers (borrowernumber) ON DELETE CASCADE ON UPDATE CASCADE,
+  CONSTRAINT ratings_ibfk_2 FOREIGN KEY (biblionumber) REFERENCES biblio (biblionumber) ON DELETE CASCADE ON UPDATE CASCADE
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 |
+    );
+
+    $dbh->do(
+q /INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES ('OpacStarRatings','disable',NULL,'disable|all|details','Choice') /
+    );
+
+    print
+"Upgrade to $DBversion done (Add 'ratings' table and 'OpacStarRatings' syspref)\n";
+    SetVersion($DBversion);
+}
+
+$DBversion = "3.07.00.049";
+if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
+    $dbh->do("INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES('OpacBrowseResults','1','Disable/enable browsing and paging search results from the OPAC detail page.',NULL,'YesNo')");
+    print "Upgrade to $DBversion done (Add system preference OpacBrowseResults ))\n";
+    SetVersion($DBversion);
+}
+
+$DBversion = "3.08.00.000";
+if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
+    print "Upgrade to $DBversion done\n";
+    SetVersion($DBversion);
+}
+
+$DBversion = "3.09.00.001";
+if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
+    $dbh->do("ALTER TABLE borrower_attribute_types MODIFY category_code VARCHAR( 1 ) NULL DEFAULT NULL");
+    print "Upgrade to $DBversion done. (Bug 8002: Update patron attribute types table to allow NULL category_code)\n";
+    SetVersion($DBversion);
+}
+
+$DBversion = "3.09.00.002";
+if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
+    $dbh->do("ALTER TABLE saved_sql
+        ADD (
+            cache_expiry INT NOT NULL DEFAULT 300,
+            public BOOLEAN NOT NULL DEFAULT FALSE
+        );
+    ");
+    print "Upgrade to $DBversion done (Added cache_expiry and public fields in
+saved_reports table.)\n";
+    SetVersion($DBversion);
+}
+
+$DBversion = "3.09.00.003";
+if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
+    $dbh->do("INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES('SvcMaxReportRows','10','Maximum number of rows to return via the report web service.',NULL,'Integer');");
+    print "Upgrade to $DBversion done (Added SvcMaxReportRows syspref)\n";
+    SetVersion($DBversion);
+}
+
+$DBversion = "3.09.00.004";
+if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
+    $dbh->do("INSERT IGNORE INTO permissions (module_bit, code, description) VALUES('13', 'edit_patrons', 'Perform batch modifivation of patrons')");
+    print "Upgrade to $DBversion done (Adds permissions flag for access to the patron modifications tool)\n";
+    SetVersion($DBversion);
+}
+
+$DBversion = "3.09.00.005";
+if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
+    unless (TableExists('quotes')) {
+        $dbh->do( qq{
+            CREATE TABLE `quotes` (
+              `id` int(11) NOT NULL AUTO_INCREMENT,
+              `source` text DEFAULT NULL,
+              `text` mediumtext NOT NULL,
+              `timestamp` datetime NOT NULL,
+              PRIMARY KEY (`id`)
+            ) ENGINE=InnoDB DEFAULT CHARSET=utf8
+        });
+    }
+    $dbh->do( qq{
+        INSERT IGNORE INTO permissions VALUES (13, "edit_quotes","Edit quotes for quote-of-the-day feature");
+    });
+    $dbh->do( qq{
+        INSERT IGNORE INTO `systempreferences` (variable,value,explanation,options,type) VALUES('QuoteOfTheDay',0,'Enable or disable display of Quote of the Day on the OPAC home page',NULL,'YesNo');
+    });
+    print "Upgrade to $DBversion done (Adding Quote of the Day Option.)\n";
+    SetVersion($DBversion);
+}
+
+$DBversion = "3.09.00.006";
+if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
+    $dbh->do("UPDATE systempreferences SET
+                variable = 'OPACShowHoldQueueDetails',
+                value = CASE value WHEN '1' THEN 'priority' ELSE 'none' END,
+                options = 'none|priority|holds|holds_priority',
+                explanation = 'Show holds details in OPAC',
+                type = 'Choice'
+              WHERE variable = 'OPACDisplayRequestPriority'");
+    print "Upgrade to $DBversion done (Changed system preference OPACDisplayRequestPriority -> OPACShowHoldQueueDetails)\n";
+    SetVersion($DBversion);
+}
+
+$DBversion = "3.09.00.007";
+if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
+    unless(C4::Context->preference('ReservesControlBranch')){
+        $dbh->do("INSERT INTO `systempreferences` (variable,value,options,explanation,type) VALUES ('ReservesControlBranch','PatronLibrary','ItemHomeLibrary|PatronLibrary','Branch checked for members reservations rights.','Choice')");
+    }
+    print "Upgrade to $DBversion done (Insert ReservesControlBranch systempreference into systempreferences table )\n";
+    SetVersion($DBversion);
+}
+
+$DBversion = "3.09.00.008";
+if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
+    $dbh->do("ALTER TABLE sessions ADD PRIMARY KEY (id);");
+    $dbh->do("ALTER TABLE sessions DROP INDEX `id`;");
+    print "Upgrade to $DBversion done (redefine the field id as PRIMARY KEY of sessions)\n";
+    SetVersion($DBversion);
+}
+
+$DBversion = "3.09.00.009";
+if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
+    $dbh->do("ALTER TABLE branches ADD PRIMARY KEY (branchcode);");
+    $dbh->do("ALTER TABLE branches DROP INDEX branchcode;");
+    print "Upgrade to $DBversion done (redefine the field branchcode as PRIMARY KEY of branches)\n";
+    SetVersion ($DBversion);
+}
+
+$DBversion = "3.09.00.010";
+if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
+    $dbh->do("INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES('IssueLostItem', 'alert', 'alert|confirm|nothing', 'Defines what should be done when an attempt is made to issue an item that has been marked as lost.', 'Choice')");
+    print "Upgrade to $DBversion done (Add system preference issuelostitem ))\n";
+    SetVersion($DBversion);
+}
+
+$DBversion = "3.09.00.011";
+if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
+    $dbh->do("ALTER TABLE `biblioitems` ADD `ean` VARCHAR( 13 ) NULL AFTER issn");
+    $dbh->do("CREATE INDEX `ean` ON biblioitems (`ean`) ");
+    $dbh->do("ALTER TABLE `deletedbiblioitems` ADD `ean` VARCHAR( 13 ) NULL AFTER issn");
+    if (C4::Context->preference("marcflavour") eq 'UNIMARC') {
+         $dbh->do("UPDATE marc_subfield_structure SET kohafield='biblioitems.ean' WHERE tagfield='073' and tagsubfield='a'");
+    }
+    print "Upgrade to $DBversion done (Adding ean in biblioitems and deletedbiblioitems)\n";
+    print "If you have records with ean, please run misc/batchRebuildBiblioTables.pl to populate bibliotems.ean\n" if (C4::Context->preference("marcflavour") eq 'UNIMARC');
+    SetVersion($DBversion);
+}
+
+$DBversion = "3.09.00.012";
+if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
+    $dbh->do("INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES('SuspendHoldsIntranet', '1', NULL , 'Allow holds to be suspended from the intranet.', 'YesNo')");
+    $dbh->do("INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES('SuspendHoldsOpac', '1', NULL , 'Allow holds to be suspended from the OPAC.', 'YesNo')");
+    print "Upgrade to $DBversion done (Add system preference OpacBrowseResults ))\n";
+    SetVersion($DBversion);
+}
+
+$DBversion ="3.09.00.013";
+if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
+    $dbh->do("INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES('DefaultLanguageField008','','Fill in the default language for field 008 Range 35-37 (e.g. eng, nor, ger, see www.loc.gov/marc/languages/language_code.html)','','Free');");
+    print "Upgrade to $DBversion done (Add system preference DefaultLanguageField008))\n";
+    SetVersion($DBversion);
+}
+
+$DBversion ="3.09.00.014";
+if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
+    # add phone message transport type
+    $dbh->do("INSERT INTO message_transport_types (message_transport_type) VALUES ('phone')");
+    
+    # adds HOLD_PHONE and PREDUE_PHONE letters (as placeholders)
+    $dbh->do("INSERT INTO letter (module, code, name, title, content) VALUES
+              ('reserves', 'HOLD_PHONE', 'Item Available for Pick-up (phone notice)', 'Item Available for Pick-up (phone notice)', 'Your item is available for pickup'),
+              ('circulation', 'PREDUE_PHONE', 'Advance Notice of Item Due (phone notice)', 'Advance Notice of Item Due (phone notice)', 'Your item is due soon'),
+              ('circulation', 'OVERDUE_PHONE', 'Overdue Notice (phone notice)', 'Overdue Notice (phone notice)', 'Your item is overdue')
+              ");
+    
+    # add phone notifications to patron message preferences options
+    $dbh->do("INSERT INTO message_transports
+             (message_attribute_id, message_transport_type, is_digest, letter_module, letter_code) VALUES
+             (4, 'phone', 0, 'reserves', 'HOLD_PHONE'),
+             (2, 'phone', 0, 'circulation', 'PREDUE_PHONE')
+             ");
+    
+    # add TalkingTechItivaPhoneNotification syspref
+    $dbh->do("INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES('TalkingTechItivaPhoneNotification',0,'If ON, enables Talking Tech I-tiva phone notifications',NULL,'YesNo');");
+    
+    print "Upgrade done (Support for Talking Tech i-tiva phone notification system)\n";
+    SetVersion($DBversion);
+}
+
+$DBversion = "3.09.00.015";
+if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
+    $dbh->do(qq{
+        INSERT IGNORE INTO systempreferences (variable,value,explanation,options,type) VALUES('StatisticsFields','location|itype|ccode','Define Fields (from the items table) used for statistics members','location|itype|ccode','free')
+    });
+    print "Upgrade to $DBversion done (Add System preference StatisticsFields)\n";
+    SetVersion($DBversion);
+}
+
+$DBversion = "3.09.00.016";
+if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
+    $dbh->do("INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('OPACShowBarcode','0','Show items barcode in holding tab','','YesNo')");
+    print "Upgrade to $DBversion done (Add syspref OPACShowBarcode)\n";
+    SetVersion ($DBversion);
+}
+
+$DBversion = "3.09.00.017";
+if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
+    $dbh->do("INSERT INTO systempreferences (variable,value,options,explanation,type) VALUES ('OpacNavRight', '', '70|10', 'Show the following HTML in the right hand column of the main page under the main login form', 'Textarea');");
+    print "Upgrade to $DBversion done (Add customizable OpacNavRight region to the OPAC main page)\n";
+    SetVersion ($DBversion);
+}
+
+$DBversion = "3.09.00.018";
+if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
+    $dbh->do("DROP TABLE IF EXISTS aqbudgetborrowers");
+    $dbh->do("
+        CREATE TABLE aqbudgetborrowers (
+          budget_id int(11) NOT NULL,
+          borrowernumber int(11) NOT NULL,
+          PRIMARY KEY (budget_id, borrowernumber),
+          CONSTRAINT aqbudgetborrowers_ibfk_1 FOREIGN KEY (budget_id)
+            REFERENCES aqbudgets (budget_id)
+            ON DELETE CASCADE ON UPDATE CASCADE,
+          CONSTRAINT aqbudgetborrowers_ibfk_2 FOREIGN KEY (borrowernumber)
+            REFERENCES borrowers (borrowernumber)
+            ON DELETE CASCADE ON UPDATE CASCADE
+        ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+    ");
+    $dbh->do("
+        INSERT INTO permissions (module_bit, code, description)
+        VALUES (11, 'budget_manage_all', 'Manage all budgets')
+    ");
+    print "Upgrade to $DBversion done (Add aqbudgetborrowers table)\n";
+    SetVersion($DBversion);
+}
+
+$DBversion = "3.09.00.019";
+if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
+    $dbh->do("INSERT INTO systempreferences (variable,value,options,explanation,type) VALUES ('OPACShowUnusedAuthorities','1','','Show authorities that are not being used in the OPAC.','YesNo')");
+    print "Upgrade to $DBversion done (Add OPACShowUnusedAuthorities system preference)\n";
+    SetVersion ($DBversion);
+}
+
+$DBversion = "3.09.00.020";
+if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
+    $dbh->do("INSERT INTO systempreferences (variable,value,explanation,type) VALUES('EnableBorrowerFiles','0','If enabled, allows librarians to upload and attach arbitrary files to a borrower record.','YesNo')");
+    $dbh->do("
+CREATE TABLE IF NOT EXISTS borrower_files (
+  file_id int(11) NOT NULL AUTO_INCREMENT,
+  borrowernumber int(11) NOT NULL,
+  file_name varchar(255) NOT NULL,
+  file_type varchar(255) NOT NULL,
+  file_description varchar(255) DEFAULT NULL,
+  file_content longblob NOT NULL,
+  date_uploaded timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
+  PRIMARY KEY (file_id),
+  KEY borrowernumber (borrowernumber)
+) ENGINE=InnoDB  DEFAULT CHARSET=utf8;
+    ");
+    $dbh->do("ALTER TABLE borrower_files ADD CONSTRAINT borrower_files_ibfk_1 FOREIGN KEY (borrowernumber) REFERENCES borrowers (borrowernumber) ON DELETE CASCADE ON UPDATE CASCADE");
+
+    print "Upgrade to $DBversion done (Added borrow_files table, EnableBorrowerFiles syspref)\n";
+    SetVersion($DBversion);
+}
+
+$DBversion = "3.09.00.021";
+if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
+    $dbh->do("INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES('UpdateTotalIssuesOnCirc','0','Whether to update the totalissues field in the biblio on each circ.',NULL,'YesNo');");
+    print "Upgrade to $DBversion done (Add syspref UpdateTotalIssuesOnCirc)\n";
+    SetVersion($DBversion);
+}
+
+$DBversion = "3.09.00.022";
+if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
+    $dbh->do("ALTER TABLE search_history MODIFY COLUMN query_cgi text NOT NULL");
+    print "Upgrade to $DBversion done (Change search_history.query_cgi type to text. bug 5981)\n";
+    SetVersion($DBversion);
+}
+
+$DBversion = "3.09.00.023";
+if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
+    $dbh->do("INSERT IGNORE INTO systempreferences (variable,value,options,explanation,type) VALUES('SearchEngine','Zebra','Solr|Zebra','Search Engine','Choice')");
+    print "Upgrade to $DBversion done (Add system preference SearchEngine )\n";
+    SetVersion($DBversion);
+}
+
+$DBversion ="3.09.00.024";
+if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
+    $dbh->do("INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES('IntranetSlipPrinterJS','','Use this JavaScript for printing slips. Define at least function printThenClose(). For use e.g. with Firefox PlugIn jsPrintSetup, see http://jsprintsetup.mozdev.org/','','Free')");
+    print "Upgrade to $DBversion done (Add system preference IntranetSlipPrinterJS))\n";
+    SetVersion($DBversion);
+}
+
+$DBversion = "3.09.00.025";
+if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
+    $dbh->do('START TRANSACTION');
+    $dbh->do('CREATE TABLE tmp_reserves AS SELECT * FROM old_reserves LIMIT 0');
+    $dbh->do('ALTER TABLE tmp_reserves ADD reserve_id INT( 11 ) NOT NULL AUTO_INCREMENT PRIMARY KEY FIRST');
+    $dbh->do("
+        INSERT INTO tmp_reserves (
+          borrowernumber, reservedate, biblionumber,
+          constrainttype, branchcode, notificationdate,
+          reminderdate, cancellationdate, reservenotes,
+          priority, found, timestamp, itemnumber,
+          waitingdate, expirationdate, lowestPriority
+        ) SELECT
+          borrowernumber, reservedate, biblionumber,
+          constrainttype, branchcode, notificationdate,
+          reminderdate, cancellationdate, reservenotes,
+          priority, found, timestamp, itemnumber,
+          waitingdate, expirationdate, lowestPriority
+        FROM old_reserves ORDER BY reservedate
+    ");
+    $dbh->do('SET @ai = ( SELECT MAX( reserve_id ) FROM tmp_reserves )');
+    $dbh->do('TRUNCATE old_reserves');
+    $dbh->do('ALTER TABLE old_reserves ADD reserve_id INT( 11 ) NOT NULL PRIMARY KEY FIRST');
+    $dbh->do('INSERT INTO old_reserves SELECT * FROM tmp_reserves WHERE reserve_id <= @ai');
+    $dbh->do("
+        INSERT INTO tmp_reserves (
+          borrowernumber, reservedate, biblionumber,
+          constrainttype, branchcode, notificationdate,
+          reminderdate, cancellationdate, reservenotes,
+          priority, found, timestamp, itemnumber,
+          waitingdate, expirationdate, lowestPriority
+        ) SELECT
+          borrowernumber, reservedate, biblionumber,
+          constrainttype, branchcode, notificationdate,
+          reminderdate, cancellationdate, reservenotes,
+          priority, found, timestamp, itemnumber,
+          waitingdate, expirationdate, lowestPriority
+        FROM reserves ORDER BY reservedate
+    ");
+    $dbh->do('TRUNCATE reserves');
+    $dbh->do('ALTER TABLE reserves ADD reserve_id INT( 11 ) NOT NULL AUTO_INCREMENT PRIMARY KEY FIRST');
+    $dbh->do('INSERT INTO reserves SELECT * FROM tmp_reserves WHERE reserve_id > @ai');
+    $dbh->do('DROP TABLE tmp_reserves');
+    $dbh->do('COMMIT');
+
+    my $sth = $dbh->prepare("
+        SELECT COUNT( * ) AS count
+        FROM information_schema.COLUMNS
+        WHERE COLUMN_NAME =  'reserve_id'
+        AND (
+          TABLE_NAME LIKE  'reserves'
+          OR
+          TABLE_NAME LIKE  'old_reserves'
+        )
+    ");
+    $sth->execute();
+    my $row = $sth->fetchrow_hashref();
+    die("Failed to add reserve_id to reserves tables, please refresh the page to try again.") unless ( $row->{'count'} );
+
+    print "Upgrade to $DBversion done (add reserve_id to reserves & old_reserves tables)\n";
+    SetVersion($DBversion);
+}
+
+
+
+
+$DBversion = "3.09.00.026";
+if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
+    $dbh->do("INSERT INTO permissions (module_bit, code, description) VALUES
+        ( 3, 'parameters_remaining_permissions', 'Remaining system parameters permissions'),
+        ( 3, 'manage_circ_rules', 'manage circulation rules')");
+    $dbh->do("INSERT INTO user_permissions (borrowernumber, module_bit, code)
+        SELECT borrowernumber, 3, 'parameters_remaining_permissions'
+        FROM borrowers WHERE flags & (1 << 3)");
+    # Give new subpermissions to all users that have 'parameters' permission flag (bit 3) set
+    # see userflags table
+    $dbh->do("INSERT INTO user_permissions (borrowernumber, module_bit, code)
+        SELECT borrowernumber, 3, 'manage_circ_rules'
+        FROM borrowers WHERE flags & (1 << 3)");
+    print "Upgrade to $DBversion done (Added parameters subpermissions)\n";
+    SetVersion($DBversion);
+}
+
 =head1 FUNCTIONS
 
+=head2 TableExists($table)
+
+=cut
+
+sub TableExists {
+    my $table = shift;
+    eval {
+                local $dbh->{PrintError} = 0;
+                local $dbh->{RaiseError} = 1;
+                $dbh->do(qq{SELECT * FROM $table WHERE 1 = 0 });
+            };
+    return 1 unless $@;
+    return 0;
+}
+
 =head2 DropAllForeignKeys($table)
 
 Drop all foreign keys of the table $table
@@ -5225,6 +5637,7 @@ sub SetVersion {
       my $finish=$dbh->prepare("INSERT into systempreferences (variable,value,explanation) values ('Version',?,'The Koha database version. WARNING: Do not change this value manually, it is maintained by the webinstaller')");
       $finish->execute($kohaversion);
     }
+    C4::Context::clear_syspref_cache(); # invalidate cached preferences
 }
 exit;