Koha/cataloguing/value_builder/marc21_field_007.pl
Marcel de Rooy 39a598c987 Bug 13437: Replace javascript function parameter in builder
The builder contains js functions with a parameter like subfield_managed
or i or something similar. This parameter contains the html id of the
field corresponding with the plugin.
With the functionality of Koha::FrameworkPlugin in place, we can eliminate
one js function call and get the same id via the event passed in. Note
that this actually makes the function a 'real' event handler.

Also note that in many cases this parameter was not used but the id
was borrowed from a perl variable like $params->{id}. If the field is not
cloned, this is not a problem. But some fields can be cloned and should
not use the static perl value but should get it from the event.

Test plan:
Look for js errors when loading the marc editor.
Since the Focus or Click event code has been touched for most marc21
plugins, move your cursor into the field or click on the tag editor
button. Verify that the focus event updates the correct field or the
click event correctly launches the plugin AND the value comes back into
the right field.
Bonus: Attach a plugin with popup (like leader) to 040$d. Clone this field.
Verify that the two launch buttons operate on the correct value.
(This resolves a current bug.)

Signed-off-by: Marcel de Rooy <m.de.rooy@rijksmuseum.nl>
Checked all 15 plugins.
Plugin marc21_linking_section seems to work, but I could not get it to pass
back something useful into my field. (Same without this patch.)
Tested the clone button with leader on 040d.

Signed-off-by: Bernardo Gonzalez Kriegel <bgkriegel@gmail.com>
All seems to work, no errors

Signed-off-by: Katrin Fischer <katrin.fischer.83@web.de>
Signed-off-by: Tomas Cohen Arazi <tomascohen@gmail.com>
2015-06-10 12:51:28 -03:00

151 lines
No EOL
4.6 KiB
Perl
Executable file

#!/usr/bin/perl
# Converted to new plugin style (Bug 13437)
# Copyright 2000-2002 Katipo Communications
#
# This file is part of Koha.
#
# Koha is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 3 of the License, or
# (at your option) any later version.
#
# Koha is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with Koha; if not, see <http://www.gnu.org/licenses>.
use Modern::Perl;
use C4::Auth;
use CGI qw ( -utf8 );
use C4::Context;
use C4::Search;
use C4::Output;
my $builder = sub {
my ( $params ) = @_;
my $function_name = $params->{id};
my $res = "
<script type=\"text/javascript\">
//<![CDATA[
function Click$function_name(event) {
defaultvalue=document.getElementById(event.data.id).value;
newin=window.open(\"../cataloguing/plugin_launcher.pl?plugin_name=marc21_field_007.pl&index=\"+ event.data.id +\"&result=\"+defaultvalue,\"tag_editor\",'width=1000,height=600,toolbar=false,scrollbars=yes');
}
//]]>
</script>
";
return $res;
};
my $launcher = sub {
my ( $params ) = @_;
my $input = $params->{cgi};
my $index = $input->param('index');
my $result = $input->param('result');
my $dbh = C4::Context->dbh;
my ( $template, $loggedinuser, $cookie ) = get_template_and_user(
{ template_name => "cataloguing/value_builder/marc21_field_007.tt",
query => $input,
type => "intranet",
authnotrequired => 0,
flagsrequired => { editcatalogue => '*' },
debug => 1,
}
);
$result = "ta" unless $result;
my $f0 = substr( $result, 0, 1 );
my $f1 = substr( $result, 1, 1 );
#added new parameters to allow for all material types
my $f2 = substr( $result, 2, 1 );
my $f3 = substr( $result, 3, 1 );
my $f4 = substr( $result, 4, 1 );
my $f5 = substr( $result, 5, 1 );
my $f6 = substr( $result, 6, 1 );
my $f7 = substr( $result, 7, 1 );
my $f8 = substr( $result, 8, 1 );
my $f9 = substr( $result, 9, 1 );
my $f10 = substr( $result, 10, 1 );
my $f11 = substr( $result, 11, 1 );
my $f12 = substr( $result, 12, 1 );
my $f13 = substr( $result, 13, 1 );
my $f14 = substr( $result, 14, 1 );
my $f15 = substr( $result, 15, 1 );
my $f16 = substr( $result, 16, 1 );
my $f17 = substr( $result, 17, 1 );
my $f18 = substr( $result, 18, 1 );
my $f19 = substr( $result, 19, 1 );
my $f20 = substr( $result, 20, 1 );
my $f21 = substr( $result, 21, 1 );
my $f22 = substr( $result, 22, 1 );
#FIXME: There is probably a more-elegant way to do this!
#FIXME: Two of the material types treat position 06, 07, and 08 as a single
#three-char field. This script works fine for creating values and sending them
#back to the MARC, but if there is already a value in the 007, it won't send
#it properly to the value builder for those two instances. Not sure how to solve.
$template->param(
index => $index,
f0 => $f0,
"f0$f0" => $f0,
f1 => $f1,
"f1$f1" => $f1,
f2 => $f2,
"f2$f2" => $f2,
f3 => $f3,
"f3$f3" => $f3,
f4 => $f4,
"f4$f4" => $f4,
f5 => $f5,
"f5$f5" => $f5,
f6 => $f6,
"f6$f6" => $f6,
f7 => $f7,
"f7$f7" => $f7,
f8 => $f8,
"f8$f8" => $f8,
f9 => $f9,
"f9$f9" => $f9,
f10 => $f10,
"f10$f10" => $f10,
f11 => $f11,
"f11$f11" => $f11,
f12 => $f12,
"f12$f12" => $f12,
f13 => $f13,
"f13$f13" => $f13,
f14 => $f14,
"f14$f14" => $f14,
f15 => $f15,
"f15$f15" => $f15,
f16 => $f16,
"f16$f16" => $f16,
f17 => $f17,
"f17$f17" => $f17,
f18 => $f18,
"f18$f18" => $f18,
f19 => $f19,
"f19$f19" => $f19,
f20 => $f20,
"f20$f20" => $f20,
f21 => $f21,
"f21$f21" => $f21,
f22 => $f22,
"f22$f22" => $f22,
);
output_html_with_http_headers $input, $cookie, $template->output;
};
return { builder => $builder, launcher => $launcher };