From 650caae201b81af054fcdfafd57fc8c1d8633ede 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. Feel free to propose another name. 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. --- C4/Csv.pm | 10 ++- C4/Record.pm | 2 +- installer/data/mysql/kohastructure.sql | 3 +- installer/data/mysql/updatedatabase.pl | 19 +++++ .../prog/en/modules/tools/csv-profiles.tt | 83 +++++++++++++++++--- tools/csv-profiles.pl | 21 +++-- 6 files changed, 113 insertions(+), 25 deletions(-) diff --git a/C4/Csv.pm b/C4/Csv.pm index 74270ff..13ab1a4 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 be1912c..c010888 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 3214ad9..f31caa4 100644 --- a/installer/data/mysql/kohastructure.sql +++ b/installer/data/mysql/kohastructure.sql @@ -921,11 +921,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 ddcc455..eafdbd9 100755 --- a/installer/data/mysql/updatedatabase.pl +++ b/installer/data/mysql/updatedatabase.pl @@ -7104,6 +7104,25 @@ 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 01f5166..9c58751 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 32f2b98..d144ed7 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] ); } -- 1.7.10.4