From 0bf14c2d3a8e6dfc428065af1630e46aa087d9f1 Mon Sep 17 00:00:00 2001 From: Jonathan Druart Date: Tue, 10 Sep 2013 15:20:09 +0200 Subject: [PATCH] Bug 10853: Add DB field export_format.type ('marc' or 'sql'). This patch: - adds a new column 'type' to the export_format table. - renames the field name export_format.marcfields with export_format.content. Test plan: - Check that existing profiles have the type "marc" selected by default - Create a new profile with a type "sql" - Save and verify the profile is correctly displayed when you select it. Signed-off-by: Bernardo Gonzalez Kriegel Comment: Work as described. koha-qa reports Small tabs errors, corrected in followup Test: 1) go to Tools > CSV profiles, Create profile, current 2) Apply patch, run updatedatabase 3) Go to Tools > CSV profiles, new option present old profile with type MARC 4) Create new profile MARC, save and show correct 5) Create new profile SQL, save and show correct Signed-off-by: Katrin Fischer All tests and QA script pass with all 3 patches applied. Works as described. Functionality for SQL profiles will be added by another patch. For now it's possible to add/edit/delete them. Existing CSV profiles can still be exported correctly. Signed-off-by: Galen Charlton --- C4/Csv.pm | 10 ++- C4/Record.pm | 2 +- installer/data/mysql/kohastructure.sql | 3 +- installer/data/mysql/updatedatabase.pl | 18 ++++ .../prog/en/modules/tools/csv-profiles.tt | 83 ++++++++++++++++--- tools/csv-profiles.pl | 21 +++-- 6 files changed, 112 insertions(+), 25 deletions(-) diff --git a/C4/Csv.pm b/C4/Csv.pm index 74270ff4c1..13ab1a4ee8 100644 --- a/C4/Csv.pm +++ b/C4/Csv.pm @@ -43,11 +43,15 @@ $VERSION = 3.07.00.049; # Returns all informations about csv profiles sub GetCsvProfiles { + my ( $type ) = @_; my $dbh = C4::Context->dbh; my $query = "SELECT * FROM export_format"; + if ( $type ) { + $query .= " WHERE type = ?"; + } $sth = $dbh->prepare($query); - $sth->execute; + $sth->execute( $type ? $type : () ); $sth->fetchall_arrayref({}); @@ -82,12 +86,12 @@ sub GetMarcFieldsForCsv { my ($id) = @_; my $dbh = C4::Context->dbh; - my $query = "SELECT marcfields FROM export_format WHERE export_format_id=?"; + my $query = "SELECT content FROM export_format WHERE export_format_id=?"; $sth = $dbh->prepare($query); $sth->execute($id); - return ($sth->fetchrow_hashref)->{marcfields}; + return ($sth->fetchrow_hashref)->{content}; } diff --git a/C4/Record.pm b/C4/Record.pm index e727eb40fa..7277f2c2b2 100644 --- a/C4/Record.pm +++ b/C4/Record.pm @@ -461,7 +461,7 @@ sub marcrecord2csv { $csv->sep_char($csvseparator); # Getting the marcfields - my $marcfieldslist = $profile->{marcfields}; + my $marcfieldslist = $profile->{content}; # Getting the marcfields as an array my @marcfieldsarray = split('\|', $marcfieldslist); diff --git a/installer/data/mysql/kohastructure.sql b/installer/data/mysql/kohastructure.sql index c1a8b8d964..c361885d9f 100644 --- a/installer/data/mysql/kohastructure.sql +++ b/installer/data/mysql/kohastructure.sql @@ -922,11 +922,12 @@ CREATE TABLE `export_format` ( `export_format_id` int(11) NOT NULL auto_increment, `profile` varchar(255) NOT NULL, `description` mediumtext NOT NULL, - `marcfields` mediumtext NOT NULL, + `content` mediumtext NOT NULL, `csv_separator` varchar(2) NOT NULL, `field_separator` varchar(2) NOT NULL, `subfield_separator` varchar(2) NOT NULL, `encoding` varchar(255) NOT NULL, + `type` varchar(255) DEFAULT 'marc', PRIMARY KEY (`export_format_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='Used for CSV export'; diff --git a/installer/data/mysql/updatedatabase.pl b/installer/data/mysql/updatedatabase.pl index 0326eda549..e7c67851f1 100755 --- a/installer/data/mysql/updatedatabase.pl +++ b/installer/data/mysql/updatedatabase.pl @@ -7192,6 +7192,24 @@ if ( CheckVersion($DBversion) ) { SetVersion ($DBversion); } + + + + + + +$DBversion = "3.13.00.XXX"; +if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) { + $dbh->do(q{ + ALTER TABLE export_format ADD type VARCHAR(255) DEFAULT 'marc' AFTER encoding + }); + $dbh->do(q{ + ALTER TABLE export_format CHANGE marcfields content mediumtext NOT NULL + }); + print "Upgrade to $DBversion done (Bug 10853: Add new field export_format.type and rename export_format.marcfields with export_format.content)\n"; + SetVersion($DBversion); +} + =head1 FUNCTIONS =head2 TableExists($table) diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/tools/csv-profiles.tt b/koha-tmpl/intranet-tmpl/prog/en/modules/tools/csv-profiles.tt index 01f516658c..9c58751c21 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/modules/tools/csv-profiles.tt +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/tools/csv-profiles.tt @@ -7,6 +7,30 @@ function reloadPage(p) { } $(document).ready(function() { $('#csvexporttabs').tabs(); + + $("#profile_type").find("option:first").attr("selected", "selected"); + $("#csvnew").find("li.marc_specific").show(); + $("#csvnew").find("li.sql_specific").hide(); + + $("#profile_type").change(function(){ + if ( $(this).find("option:selected").val() == "marc" ) { + $("#csvnew li.marc_specific").show(); + $("#csvnew li.sql_specific").hide(); + } else { + $("#csvnew li.marc_specific").hide(); + $("#csvnew li.sql_specific").show(); + } + }); + $("#modify_profile_type").change(function(){ + if ( $(this).find("option:selected").val() == "marc" ) { + $("#csvedit li.marc_specific").show(); + $("#csvedit li.sql_specific").hide(); + } else { + $("#csvedit li.marc_specific").hide(); + $("#csvedit li.sql_specific").show(); + } + }); + $("#modify_profile_type").change(); }); //]]> @@ -53,9 +77,18 @@ function reloadPage(p) {
-
  1. +
      +
    1. +
    2. + + +
    3. +
    4. @@ -72,7 +105,7 @@ function reloadPage(p) { -
    5. +
    6. -
    7. +
    8. -
    9. +
    10. -
    11. - +
    12. +

      You have to define which fields or subfields you want to export, separated by pipes.

      You can also use your own headers (instead of the ones from Koha) by prefixing the field number with an header, followed by the equal sign.

      Example: Personal name=200|Entry element=210$a|300|009

    13. +
    14. + + +

      You have to define which fields you want to export, separated by pipes.

      +

      You can also use your own headers (instead of the ones from Koha) by prefixing the field name with an header, followed by the equal sign.

      +

      Example: Name=subscription.name|Title=subscription.title|Issue number=serial.serialseq

      +
@@ -129,7 +169,8 @@ function reloadPage(p) {
-
  1. +
      +
    1. +
    2. + + +
    3. + +
    4. @@ -184,7 +238,7 @@ function reloadPage(p) { [% END %] -
    5. +
    6. -
    7. +
    8. -
    9. +
    10. -
    11. -
    12. +
    13. +
    14. + +
    15. + + +
    16. diff --git a/tools/csv-profiles.pl b/tools/csv-profiles.pl index 32f2b985b4..d144ed721c 100755 --- a/tools/csv-profiles.pl +++ b/tools/csv-profiles.pl @@ -67,30 +67,34 @@ $template->param(encodings => \@encodings_loop); my $profile_name = $input->param("profile_name"); my $profile_description = $input->param("profile_description"); -my $profile_content = $input->param("profile_content"); my $csv_separator = $input->param("csv_separator"); my $field_separator = $input->param("field_separator"); my $subfield_separator = $input->param("subfield_separator"); my $encoding = $input->param("encoding"); +my $type = $input->param("profile_type"); my $action = $input->param("action"); my $delete = $input->param("delete"); my $id = $input->param("id"); if ($delete) { $action = "delete"; } +my $profile_content = $type eq "marc" + ? $input->param("profile_marc_content") + : $input->param("profile_sql_content"); + if ($profile_name && $profile_content && $action) { my $rows; if ($action eq "create") { - my $query = "INSERT INTO export_format(export_format_id, profile, description, marcfields, csv_separator, field_separator, subfield_separator, encoding) VALUES (NULL, ?, ?, ?, ?, ?, ?, ?)"; + my $query = "INSERT INTO export_format(export_format_id, profile, description, content, csv_separator, field_separator, subfield_separator, encoding, type) VALUES (NULL, ?, ?, ?, ?, ?, ?, ?, ?)"; my $sth = $dbh->prepare($query); - $rows = $sth->execute($profile_name, $profile_description, $profile_content, $csv_separator, $field_separator, $subfield_separator, $encoding); + $rows = $sth->execute($profile_name, $profile_description, $profile_content, $csv_separator, $field_separator, $subfield_separator, $encoding, $type); } if ($action eq "edit") { - my $query = "UPDATE export_format SET description=?, marcfields=?, csv_separator=?, field_separator=?, subfield_separator=?, encoding=? WHERE export_format_id=? LIMIT 1"; + my $query = "UPDATE export_format SET description=?, content=?, csv_separator=?, field_separator=?, subfield_separator=?, encoding=?, type=? WHERE export_format_id=? LIMIT 1"; my $sth = $dbh->prepare($query); - $rows = $sth->execute($profile_description, $profile_content, $csv_separator, $field_separator, $subfield_separator, $encoding, $profile_name); + $rows = $sth->execute($profile_description, $profile_content, $csv_separator, $field_separator, $subfield_separator, $encoding, $type, $profile_name); } if ($action eq "delete") { @@ -108,7 +112,7 @@ if ($profile_name && $profile_content && $action) { # If a profile has been selected for modification if ($id) { - my $query = "SELECT export_format_id, profile, description, marcfields, csv_separator, field_separator, subfield_separator, encoding FROM export_format WHERE export_format_id = ?"; + my $query = "SELECT export_format_id, profile, description, content, csv_separator, field_separator, subfield_separator, encoding, type FROM export_format WHERE export_format_id = ?"; my $sth; $sth = $dbh->prepare($query); @@ -118,11 +122,12 @@ if ($profile_name && $profile_content && $action) { selected_profile_id => $selected_profile->[0], selected_profile_name => $selected_profile->[1], selected_profile_description => $selected_profile->[2], - selected_profile_marcfields => $selected_profile->[3], + selected_profile_content => $selected_profile->[3], selected_csv_separator => $selected_profile->[4], selected_field_separator => $selected_profile->[5], selected_subfield_separator => $selected_profile->[6], - selected_encoding => $selected_profile->[7] + selected_encoding => $selected_profile->[7], + selected_profile_type => $selected_profile->[8] ); }