@@ -, +, @@
plugins)
---
cataloguing/additem.pl | 47 ++++++++++++++++++++++++++++++++++++++---------
1 files changed, 38 insertions(+), 9 deletions(-)
--- a/cataloguing/additem.pl
+++ a/cataloguing/additem.pl
@@ -41,6 +41,10 @@ use MARC::File::XML;
use URI::Escape;
our $dbh = C4::Context->dbh;
+our $building_plugin={};
+ #hashref { record => .., subfieldid => .., }
+ #used in building the new cataloging plugins (without redefinitions)
+ #plugin script should add function and javascript to hash
sub find_value {
my ($tagfield,$insubfield,$record) = @_;
@@ -241,19 +245,19 @@ sub generate_subfield_form {
elsif ( $subfieldlib->{value_builder} ) {
# opening plugin
my $plugin = C4::Context->intranetdir . "/cataloguing/value_builder/" . $subfieldlib->{'value_builder'};
- if (do $plugin) {
- my $extended_param = plugin_parameters( $dbh, $temp, $tagslib, $subfield_data{id}, $loop_data );
- my ( $function_name, $javascript ) = plugin_javascript( $dbh, $temp, $tagslib, $subfield_data{id}, $loop_data );
- my $change = index($javascript, 'function Change') > -1 ?
- "return Change$function_name($subfield_data{random}, '$subfield_data{id}');" :
- 'return 1;';
+ my ( $function_name, $javascript ) = _new_plugin_builder( $plugin, $temp, $subfield_data{id} ); #no tabno passed for items
+ if( $function_name ) {
+ my $change = index($javascript, 'function Change') > -1 ?
+ "return Change$function_name($subfield_data{random}, '$subfield_data{id}');" :
+ 'return 1;';
$subfield_data{marc_value} = qq[
+ onchange=" $change"
+ onblur=" Blur$function_name($subfield_data{random}, '$subfield_data{id}');" />
...
$javascript];
- } else {
+ }
+ else {
warn "Plugin Failed: $plugin";
$subfield_data{marc_value} = ""; # supply default input form
}
@@ -280,6 +284,31 @@ sub generate_subfield_form {
return \%subfield_data;
}
+sub _new_plugin_builder {
+ my ($plugin, $record, $subfieldid) = @_;
+
+ $building_plugin = {
+ record => $record,
+ subfieldid => $subfieldid,
+ };
+ do $plugin || return;
+
+ #first, try the new way without redefines using building_plugin hash
+ if( defined $building_plugin->{function} &&
+ defined $building_plugin->{javascript} ) {
+ return ($building_plugin->{function},
+ $building_plugin->{javascript} );
+ }
+
+ #arriving here, we try the old way with redefines: we are PHASING this OUT
+ #next call is of no use, commented
+ #my $extended_param = plugin_parameters( $dbh, $rec, $tagslib, $subfield_data{id}, $tabloop );
+ my ( $function_name, $javascript ) = plugin_javascript( undef, $record, undef, $subfieldid ); #no tabno passed for items, same for tagslib
+ #first param was dbh, not needed: use C4::Context->dbh in plugin
+ return ( $function_name, $javascript );
+ #caller tests if function_name is defined
+}
+
# Removes some subfields when prefilling items
# This function will remove any subfield that is not in the SubfieldsToUseWhenPrefill syspref
sub removeFieldsForPrefill {
--