Bug 20256: (QA follow-up) Make atomicupdate idempotent
authorTomas Cohen Arazi <tomascohen@theke.io>
Wed, 1 Feb 2023 14:33:56 +0000 (11:33 -0300)
committerTomas Cohen Arazi <tomascohen@theke.io>
Thu, 2 Feb 2023 14:59:26 +0000 (11:59 -0300)
Without this patch, running the atomicupdate twice crashes on patrons
with edit_items permissions:

C4::Installer::run_atomic_updates(): DBI Exception: DBD::mysql::db do failed: Duplicate entry '19-9-edit_any_item' for key 'PRIMARY' at /kohadevbox/koha/installer/data/mysql/updatedatabase.pl line 24303
DEV atomic update /kohadevbox/koha/installer/data/mysql/atomicupdate/bug_20256.perl  [14:26:41]
ERROR - C4::Installer::run_atomic_updates(): DBI Exception: DBD::mysql::db do failed: Duplicate entry '19-9-edit_any_item' for key 'PRIMARY' at /kohadevbox/koha/installer/data/mysql/updatedatabase.pl line 24303

It also aligns this 3yro script with the new structure we've been using.

Signed-off-by: Tomas Cohen Arazi <tomascohen@theke.io>
installer/data/mysql/atomicupdate/bug_20256.perl [deleted file]
installer/data/mysql/atomicupdate/bug_20256.pl [new file with mode: 0755]

diff --git a/installer/data/mysql/atomicupdate/bug_20256.perl b/installer/data/mysql/atomicupdate/bug_20256.perl
deleted file mode 100644 (file)
index 2804944..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-$DBversion = 'XXX'; # will be replaced by the RM
-if( CheckVersion( $DBversion ) ) {
-    $dbh->do( "INSERT IGNORE INTO permissions (module_bit, code, description) VALUES ( 9, 'edit_any_item', 'Edit any item reguardless of home library');" );
-
-    $dbh->do(q{
-        INSERT INTO user_permissions ( borrowernumber, module_bit, code )
-        SELECT borrowernumber, '9', 'edit_any_item'
-        FROM user_permissions
-        WHERE module_bit = '9'
-          AND code = 'edit_items'
-    });
-
-    if ( !column_exists( 'library_groups', 'ft_limit_item_editing' ) ) {
-        $dbh->do( "ALTER TABLE library_groups ADD COLUMN ft_limit_item_editing tinyint(1) NOT NULL DEFAULT 0 AFTER ft_hide_patron_info" );
-    }
-
-    SetVersion( $DBversion );
-    print "Upgrade to $DBversion done (Bug 20256 - Add ability to limit editing of items to home library)\n";
-}
diff --git a/installer/data/mysql/atomicupdate/bug_20256.pl b/installer/data/mysql/atomicupdate/bug_20256.pl
new file mode 100755 (executable)
index 0000000..2df9e03
--- /dev/null
@@ -0,0 +1,32 @@
+use Modern::Perl;
+
+return {
+    bug_number  => "20256",
+    description => "Add ability to limit editing of items to home library",
+    up => sub {
+        my ($args) = @_;
+        my ($dbh, $out) = @$args{qw(dbh out)};
+
+        $dbh->do(q{
+            INSERT IGNORE INTO permissions (module_bit, code, description) VALUES ( 9, 'edit_any_item', 'Edit any item reguardless of home library');
+        });
+        say $out "Added new permission 'edit_any_item'";
+
+        $dbh->do(q{
+            INSERT IGNORE INTO user_permissions ( borrowernumber, module_bit, code )
+            SELECT borrowernumber, '9', 'edit_any_item'
+            FROM user_permissions
+            WHERE module_bit = '9'
+            AND code = 'edit_items'
+        });
+
+        if ( !column_exists( 'library_groups', 'ft_limit_item_editing' ) ) {
+            $dbh->do(q{
+                ALTER TABLE library_groups
+                  ADD COLUMN ft_limit_item_editing tinyint(1) NOT NULL DEFAULT 0 AFTER ft_hide_patron_info
+            });
+    
+            say $out "Added column 'library_groups.ft_limit_item_editing'";
+        }
+    },
+};