Bug 35919: DB changes

This patch adds:

* A new table: `record_sources`.
* A new user permission: `manage_record_sources`.
* A FK on record_sources.recour_source_id on the biblio_metadata tables

Record sources will contain a name and (for now) a flag telling if
records from the specific source can be manually edited.

Signed-off-by: Tomas Cohen Arazi <tomascohen@theke.io>
Signed-off-by: Matt Blenkinsop <matt.blenkinsop@ptfs-europe.com>

Signed-off-by: Jonathan Druart <jonathan.druart@bugs.koha-community.org>
Signed-off-by: Katrin Fischer <katrin.fischer@bsz-bw.de>
This commit is contained in:
Tomas Cohen Arazi 2024-01-24 16:12:52 -03:00 committed by Katrin Fischer
parent 764675e06c
commit 5609cbdd9a
No known key found for this signature in database
GPG Key ID: 0EF6E2C03357A834
4 changed files with 217 additions and 2 deletions

View File

@ -0,0 +1,112 @@
use utf8;
package Koha::Schema::Result::RecordSource;
# Created by DBIx::Class::Schema::Loader
# DO NOT MODIFY THE FIRST PART OF THIS FILE
=head1 NAME
Koha::Schema::Result::RecordSource
=cut
use strict;
use warnings;
use base 'DBIx::Class::Core';
=head1 TABLE: C<record_sources>
=cut
__PACKAGE__->table("record_sources");
=head1 ACCESSORS
=head2 record_source_id
data_type: 'integer'
is_auto_increment: 1
is_nullable: 0
Primary key for the `record_sources` table
=head2 name
data_type: 'text'
is_nullable: 0
User defined name for the record source
=head2 can_be_edited
data_type: 'tinyint'
default_value: 0
is_nullable: 0
If records from this source can be edited
=cut
__PACKAGE__->add_columns(
"record_source_id",
{ data_type => "integer", is_auto_increment => 1, is_nullable => 0 },
"name",
{ data_type => "text", is_nullable => 0 },
"can_be_edited",
{ data_type => "tinyint", default_value => 0, is_nullable => 0 },
);
=head1 PRIMARY KEY
=over 4
=item * L</record_source_id>
=back
=cut
__PACKAGE__->set_primary_key("record_source_id");
=head1 RELATIONS
=head2 biblio_metadatas
Type: has_many
Related object: L<Koha::Schema::Result::BiblioMetadata>
=cut
__PACKAGE__->has_many(
"biblio_metadatas",
"Koha::Schema::Result::BiblioMetadata",
{ "foreign.record_source_id" => "self.record_source_id" },
{ cascade_copy => 0, cascade_delete => 0 },
);
=head2 deletedbiblio_metadatas
Type: has_many
Related object: L<Koha::Schema::Result::DeletedbiblioMetadata>
=cut
__PACKAGE__->has_many(
"deletedbiblio_metadatas",
"Koha::Schema::Result::DeletedbiblioMetadata",
{ "foreign.record_source_id" => "self.record_source_id" },
{ cascade_copy => 0, cascade_delete => 0 },
);
# Created by DBIx::Class::Schema::Loader v0.07049 @ 2024-01-24 18:05:50
# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:WX72aRYhWBK9bQWr9AJk2A
__PACKAGE__->add_columns(
'+can_be_edited' => { is_boolean => 1 },
);
1;

View File

@ -0,0 +1,83 @@
use Modern::Perl;
return {
bug_number => "35919",
description => "Add record_sources table",
up => sub {
my ($args) = @_;
my ( $dbh, $out ) = @$args{qw(dbh out)};
unless ( TableExists('record_sources') ) {
$dbh->do(
q{
CREATE TABLE `record_sources` (
`record_source_id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'Primary key for the `record_sources` table',
`name` text NOT NULL COMMENT 'User defined name for the record source',
`can_be_edited` tinyint(1) NOT NULL DEFAULT 0 COMMENT 'If records from this source can be edited',
PRIMARY KEY (`record_source_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
}
);
say $out "Added new table 'record_sources'";
}
unless ( column_exists( 'biblio_metadata', 'record_source_id' ) ) {
$dbh->do(
q{
ALTER TABLE biblio_metadata
ADD COLUMN `record_source_id` int(11) NULL DEFAULT NULL
COMMENT 'The record source for the metadata'
AFTER timestamp
}
);
say $out "Added new column 'biblio_metadata.record_source_id'";
}
unless ( foreign_key_exists( 'biblio_metadata', 'record_metadata_fk_2' ) ) {
$dbh->do(
q{
ALTER TABLE biblio_metadata
ADD CONSTRAINT `record_metadata_fk_2` FOREIGN KEY (`record_source_id`) REFERENCES `record_sources` (`record_source_id`) ON DELETE CASCADE ON UPDATE CASCADE
}
);
say $out "Added new foreign key 'biblio_metadata.record_metadata_fk_2'";
}
unless ( column_exists( 'deletedbiblio_metadata', 'record_source_id' ) ) {
$dbh->do(
q{
ALTER TABLE deletedbiblio_metadata
ADD COLUMN `record_source_id` int(11) NULL DEFAULT NULL
COMMENT 'The record source for the metadata'
AFTER timestamp
}
);
say $out "Added new column 'deletedbiblio_metadata.record_source_id'";
}
unless ( foreign_key_exists( 'deletedbiblio_metadata', 'deletedrecord_metadata_fk_2' ) ) {
$dbh->do(
q{
ALTER TABLE deletedbiblio_metadata
ADD CONSTRAINT `deletedrecord_metadata_fk_2` FOREIGN KEY (`record_source_id`) REFERENCES `record_sources` (`record_source_id`) ON DELETE CASCADE ON UPDATE CASCADE
}
);
say $out "Added new foreign key 'deletedbiblio_metadata.record_metadata_fk_2'";
}
$dbh->do(
q{
INSERT IGNORE INTO permissions (module_bit, code, description) VALUES
( 3, 'manage_record_sources', 'Manage record sources')
}
);
say $out "Added new permission 'manage_record_sources'";
},
};

View File

@ -1122,6 +1122,21 @@ CREATE TABLE `biblio_framework` (
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Table structure for table `record_sources`
--
DROP TABLE IF EXISTS `record_sources`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `record_sources` (
`record_source_id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'Primary key for the `record_sources` table',
`name` text NOT NULL COMMENT 'User defined name for the record source',
`can_be_edited` tinyint(1) NOT NULL DEFAULT 0 COMMENT 'If records from this source can be edited',
PRIMARY KEY (`record_source_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Table structure for table `biblio_metadata`
--
@ -1136,10 +1151,12 @@ CREATE TABLE `biblio_metadata` (
`schema` varchar(16) NOT NULL,
`metadata` longtext NOT NULL,
`timestamp` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
`record_source_id` int(11) NULL DEFAULT NULL COMMENT 'The record source for the metadata',
PRIMARY KEY (`id`),
UNIQUE KEY `biblio_metadata_uniq_key` (`biblionumber`,`format`,`schema`),
KEY `timestamp` (`timestamp`),
CONSTRAINT `record_metadata_fk_1` FOREIGN KEY (`biblionumber`) REFERENCES `biblio` (`biblionumber`) ON DELETE CASCADE ON UPDATE CASCADE
CONSTRAINT `record_metadata_fk_1` FOREIGN KEY (`biblionumber`) REFERENCES `biblio` (`biblionumber`) ON DELETE CASCADE ON UPDATE CASCADE,
CONSTRAINT `record_metadata_fk_2` FOREIGN KEY (`record_source_id`) REFERENCES `record_sources` (`record_source_id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
@ -2571,10 +2588,12 @@ CREATE TABLE `deletedbiblio_metadata` (
`schema` varchar(16) NOT NULL,
`metadata` longtext NOT NULL,
`timestamp` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
`record_source_id` int(11) NULL DEFAULT NULL COMMENT 'The record source for the metadata',
PRIMARY KEY (`id`),
UNIQUE KEY `deletedbiblio_metadata_uniq_key` (`biblionumber`,`format`,`schema`),
KEY `timestamp` (`timestamp`),
CONSTRAINT `deletedrecord_metadata_fk_1` FOREIGN KEY (`biblionumber`) REFERENCES `deletedbiblio` (`biblionumber`) ON DELETE CASCADE ON UPDATE CASCADE
CONSTRAINT `deletedrecord_metadata_fk_1` FOREIGN KEY (`biblionumber`) REFERENCES `deletedbiblio` (`biblionumber`) ON DELETE CASCADE ON UPDATE CASCADE,
CONSTRAINT `deletedrecord_metadata_fk_2` FOREIGN KEY (`record_source_id`) REFERENCES `record_sources` (`record_source_id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

View File

@ -43,6 +43,7 @@ INSERT INTO permissions (module_bit, code, description) VALUES
( 3, 'manage_curbside_pickups', 'Manage curbside pickups'),
( 3, 'manage_search_filters', 'Manage custom search filters'),
( 3, 'manage_identity_providers', 'Manage identity providers'),
( 3, 'manage_record_sources', 'Manage record sources'),
( 4, 'delete_borrowers', 'Delete patrons'),
( 4, 'edit_borrowers', 'Add, modify and view patron information'),
( 4, 'list_borrowers', 'Search, list and view patrons'),