index => $index_tag,
id => "tag_".$tag."_subfield_".$subfield."_".$index_tag."_".$index_subfield,
value => $value,
+ random => CreateKey(),
);
+ # deal with a <010 tag
if($subfield eq '@'){
$subfield_data{id} = "tag_".$tag."_subfield_00_".$index_tag."_".$index_subfield;
} else {
if(exists $mandatory_z3950->{$tag.$subfield}){
$subfield_data{z3950_mandatory} = $mandatory_z3950->{$tag.$subfield};
}
-
+ # decide if the subfield must be expanded (visible) by default or not
+ # if it is mandatory, then expand. If it is hidden explicitly by the hidden flag, hidden anyway
$subfield_data{visibility} = "display:none;"
if ( ($tagslib->{$tag}->{$subfield}->{hidden} % 2 == 1) and $value ne ''
or ($value eq '' and !$tagslib->{$tag}->{$subfield}->{mandatory})
);
-
+ # always expand all subfields of a mandatory field
+ $subfield_data{visibility} = "" if $tagslib->{$tag}->{mandatory};
# it's an authorised field
if ( $tagslib->{$tag}->{$subfield}->{authorised_value} ) {
$subfield_data{marc_value} =
}
elsif ( $tagslib->{$tag}->{$subfield}->{authtypecode} ) {
$subfield_data{marc_value} =
- "<input type=\"text\"
- id=".$subfield_data{id}."
- name=".$subfield_data{id}."
- value=\"$value\"
- class=\"input_marceditor\"
- tabindex=\"1\"
- DISABLE READONLY \/>
- <span class=\"buttonDot\"
- onclick=\"Dopop('/cgi-bin/koha/authorities/auth_finder.pl?authtypecode=".$tagslib->{$tag}->{$subfield}->{authtypecode}."&index=$subfield_data{id}','$subfield_data{id}')\">...</span>
+ "<input type=\"text\"
+ id=\"".$subfield_data{id}."\"
+ name=\"".$subfield_data{id}."\"
+ value=\"$value\"
+ class=\"input_marceditor\"
+ tabindex=\"1\"
+ \/>
+ <span class=\"buttonDot\"
+ onclick=\"Dopop('/cgi-bin/koha/authorities/auth_finder.pl?authtypecode=".$tagslib->{$tag}->{$subfield}->{authtypecode}."&index=$subfield_data{id}','$subfield_data{id}')\">...</span>
";
# it's a plugin field
}
$subfield_data{marc_value} =
"<input tabindex=\"1\"
type=\"text\"
- id=".$subfield_data{id}."
- name=".$subfield_data{id}."
+ id=\"".$subfield_data{id}."\"
+ name=\"".$subfield_data{id}."\"
value=\"$value\"
class=\"input_marceditor\"
- onfocus=\"javascript:Focus$function_name($index_tag)\"
- onblur=\"javascript:Blur$function_name($index_tag); \" \/>
- <span class=\"buttonDot\"
- onclick=\"Clic$function_name('$subfield_data{id}')\">...</a>
+ onfocus=\"Focus$function_name($index_tag)\"
+ onblur=\"Blur$function_name($index_tag); \" \/>
+ <span class=\"buttonDot\" onclick=\"Clic$function_name('$subfield_data{id}')\">...</a>
$javascript";
# it's an hidden field
}
$subfield_data{marc_value} =
"<input tabindex=\"1\"
type=\"hidden\"
- id=".$subfield_data{id}."
- name=".$subfield_data{id}."
+ id=\"".$subfield_data{id}."\"
+ name=\"".$subfield_data{id}."\"
value=\"$value\" \/>
";
}
elsif ( $tagslib->{$tag}->{$subfield}->{'hidden'} ) {
$subfield_data{marc_value} =
"<input type=\"text\"
- id=".$subfield_data{id}."
- name=".$subfield_data{id}."
+ id=\"".$subfield_data{id}."\"
+ name=\"".$subfield_data{id}."\"
class=\"input_marceditor\"
tabindex=\"1\"
value=\"$value\"
$subfield_data{marc_value} =
"<textarea cols=\"70\"
rows=\"4\"
- id=".$subfield_data{id}."
- name=".$subfield_data{id}."
+ id=\"".$subfield_data{id}."\"
+ name=\"".$subfield_data{id}."\"
class=\"input_marceditor\"
tabindex=\"1\"
>$value</textarea>
else {
$subfield_data{marc_value} =
"<input type=\"text\"
- id=".$subfield_data{id}."
- name=".$subfield_data{id}."
+ id=\"".$subfield_data{id}."\"
+ name=\"".$subfield_data{id}."\"
value=\"$value\"
tabindex=\"1\"
class=\"input_marceditor\"
else {
push @fields, $record->leader(); # if tag == 000
}
+ # loop through each field
foreach my $field (@fields) {
my @subfields_data;
);
}
if ( $#subfields_data >= 0 ) {
+ # build the tag entry.
+ # note that the random() field is mandatory. Otherwise, on repeated fields, you'll
+ # have twice the same "name" value, and cgi->param() will return only one, making
+ # all subfields to be merged in a single field.
my %tag_data = (
tag => $tag,
index => $index_tag,
tag_lib => $tagslib->{$tag}->{lib},
+ repeatable => $tagslib->{$tag}->{repeatable},
subfield_loop => \@subfields_data,
- fixedfield => ($tag < 10)?(1):(0),
+ fixedfield => $tag < 10?1:0,
+ random => CreateKey,
);
if ($tag >= 010){ # no indicator for theses tag
$tag_data{indicator} = $field->indicator(1).$field->indicator(2);
indicator => $indicator,
subfield_loop => \@subfields_data,
tagfirstsubfield => $subfields_data[0],
- fixedfield => ($tag < 10)?(1):(0)
+ fixedfield => $tag < 10?1:0,
);
push @loop_data, \%tag_data ;
$template->param( BIG_LOOP => \@BIG_LOOP );
}
+sub BiblioAddAuthorities{
+ my ( $record, $frameworkcode ) = @_;
+ my $dbh=C4::Context->dbh;
+ my $query=$dbh->prepare(qq|
+SELECT authtypecode,tagfield
+FROM marc_subfield_structure
+WHERE frameworkcode=?
+AND (authtypecode IS NOT NULL AND authtypecode<>\"\")|);
+# SELECT authtypecode,tagfield
+# FROM marc_subfield_structure
+# WHERE frameworkcode=?
+# AND (authtypecode IS NOT NULL OR authtypecode<>\"\")|);
+ $query->execute($frameworkcode);
+ my ($countcreated,$countlinked);
+ while (my $data=$query->fetchrow_hashref){
+ if ($record->field($data->{tagfield})){
+ next if ($record->subfield($data->{tagfield},'3')||$record->subfield($data->{tagfield},'9'));
+ # No authorities id in the tag.
+ # Search if there is any authorities to link to.
+ my $query='at='.$data->{authtypecode}.' ';
+ map {$query.= " and he=".$_->[1] if ($_->[0]=~/[A-z]/)} $record->field($data->{tagfield})->subfields();
+ my ($error,$results)=SimpleSearch($query,"authorityserver");
+ # there is at least 1 result => return the 1st one
+ if (@$results>1) {
+ my $marcrecord = MARC::File::USMARC::decode($results->[0]);
+ $record->field($data->{tagfield})->add_subfields('9'=>$marcrecord->field('001')->data);
+ $countlinked++;
+ } else {
+ #There are no results, build authority record, add it to Authorities, get authid and add it to 9
+ ###NOTICE : This is only valid if a subfield is linked to one and only one authtypecode
+
+ my $authtypedata=GetAuthType($data->{authtypecode});
+ my $marcrecordauth=MARC::Record->new();
+ my $field=MARC::Field->new($authtypedata->{auth_tag_to_report},'','',"a"=>"".$record->subfield($data->{tagfield},'a'));
+ map { $field->add_subfields($_->[0]=>$_->[1]) if ($_->[0]=~/[A-z]/ && $_->[0] ne "a" )} $record->field($data->{tagfield})->subfields();
+ $marcrecordauth->insert_fields_ordered($field);
+ my $authid=AddAuthority($marcrecordauth,'',$data->{authtypecode});
+ $countcreated++;
+ $record->field($data->{tagfield})->add_subfields('9'=>$authid);
+ }
+ }
+ }
+ return ($countlinked,$countcreated);
+}
+
# ========================
# MAIN
#=========================
-name => 'Frameworks',
-id => 'Frameworks',
-default => $curfwk,
- -OnChange => 'Changefwk(this);',
+ -onchange => 'Changefwk(this);',
-values => \@select_fwk,
-labels => \%select_fwk,
-size => 1,
my $record = -1;
my $encoding = "";
my (
- $biblionumtagfield,
- $biblionumtagsubfield,
+ $biblionumbertagfield,
+ $biblionumbertagsubfield,
$biblioitemnumtagfield,
$biblioitemnumtagsubfield,
$bibitem,
$is_a_modif = 1;
# if it's a modif, retrieve bibli and biblioitem numbers for the future modification of old-DB.
- ( $biblionumtagfield, $biblionumtagsubfield ) =
+ ( $biblionumbertagfield, $biblionumbertagsubfield ) =
&GetMarcFromKohaField( "biblio.biblionumber", $frameworkcode );
( $biblioitemnumtagfield, $biblioitemnumtagsubfield ) =
&GetMarcFromKohaField( "biblioitems.biblioitemnumber", $frameworkcode );
if ( !$duplicatebiblionumber or $confirm_not_duplicate ) {
my $oldbibnum;
my $oldbibitemnum;
+ if (C4::Context->preference("BiblioAddsAuthorities")){
+ my ($countlinked,$countcreated)=BiblioAddAuthorities($record,$frameworkcode);
+ }
if ( $is_a_modif ) {
ModBiblioframework( $biblionumber, $frameworkcode );
ModBiblio( $record, $biblionumber, $frameworkcode );
( $biblionumber, $oldbibitemnum ) = AddBiblio( $record, $frameworkcode );
}
- if (C4::Context->preference("BiblioAddsAuthorities")){
- my ($countlinked,$countcreated)=BiblioAddAuthorities($record,$frameworkcode);
- }
-
if ($mode ne "popup"){
print $input->redirect(
"/cgi-bin/koha/cataloguing/additem.pl?biblionumber=$biblionumber&frameworkcode=$frameworkcode"
build_tabs ($template, $record, $dbh,$encoding,$input);
$template->param(
biblionumber => $biblionumber,
- biblionumtagfield => $biblionumtagfield,
- biblionumtagsubfield => $biblionumtagsubfield,
- biblioitemnumtagfield => $biblioitemnumtagfield,
- biblioitemnumtagsubfield => $biblioitemnumtagsubfield,
biblioitemnumber => $biblioitemnumber,
duplicatebiblionumber => $duplicatebiblionumber,
duplicatebibid => $duplicatebiblionumber,
build_tabs( $template, $record, $dbh, $encoding,$input );
$template->param(
biblionumber => $biblionumber,
- biblionumtagfield => $biblionumtagfield,
- biblionumtagsubfield => $biblionumtagsubfield,
+ biblionumbertagfield => $biblionumbertagfield,
+ biblionumbertagsubfield => $biblionumbertagsubfield,
biblioitemnumtagfield => $biblioitemnumtagfield,
biblioitemnumtagsubfield => $biblioitemnumtagsubfield,
biblioitemnumber => $biblioitemnumber,