Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Newer
Older
100755 175 lines (152 sloc) 5.355 kB
8515ca8 road to 1.3.1 : viewing biblio MARC detail
tipaul authored
1 #!/usr/bin/perl
2
3 # Copyright 2000-2002 Katipo Communications
4 #
5 # This file is part of Koha.
6 #
7 # Koha is free software; you can redistribute it and/or modify it under the
8 # terms of the GNU General Public License as published by the Free Software
9 # Foundation; either version 2 of the License, or (at your option) any later
10 # version.
11 #
12 # Koha is distributed in the hope that it will be useful, but WITHOUT ANY
13 # WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
14 # A PARTICULAR PURPOSE. See the GNU General Public License for more details.
15 #
16 # You should have received a copy of the GNU General Public License along with
17 # Koha; if not, write to the Free Software Foundation, Inc., 59 Temple Place,
18 # Suite 330, Boston, MA 02111-1307 USA
19
4a6b840 POD doc and code cleaning
tipaul authored
20 =head1 NAME
21
22 MARCdetail.pl : script to show a biblio in MARC format
23
24 =head1 SYNOPSIS
25
26
27 =head1 DESCRIPTION
28
d16a973 Handle non-latin1 charsets
acli authored
29 This script needs a biblionumber in bib parameter (bibnumber
30 from koha style DB. Automaticaly maps to marc biblionumber).
31
32 It shows the biblio in a (nice) MARC format depending on MARC
33 parameters tables.
34
35 The template is in <templates_dir>/catalogue/MARCdetail.tmpl.
36 this template must be divided into 11 "tabs".
37
38 The first 10 tabs present the biblio, the 11th one presents
39 the items attached to the biblio
4a6b840 POD doc and code cleaning
tipaul authored
40
41 =head1 FUNCTIONS
42
43 =over 2
44
45 =cut
46
47
8515ca8 road to 1.3.1 : viewing biblio MARC detail
tipaul authored
48 use strict;
49 require Exporter;
0e7f86d adding authentification with Auth.pm
tipaul authored
50 use C4::Auth;
8515ca8 road to 1.3.1 : viewing biblio MARC detail
tipaul authored
51 use C4::Context;
52 use C4::Output;
52a5fd4 Moved C4/Charset.pm to C4/Interface/CGI/Output.pm
acli authored
53 use C4::Interface::CGI::Output;
8515ca8 road to 1.3.1 : viewing biblio MARC detail
tipaul authored
54 use CGI;
55 use C4::Search;
56 use MARC::Record;
57 use C4::Biblio;
58 use C4::Catalogue;
59 use HTML::Template;
60
61 my $query=new CGI;
62
63 my $dbh=C4::Context->dbh;
64
aef9c7d minor bugfixes and improvements
tipaul authored
65 my $biblionumber=$query->param('bib');
0f6783c small fix
tipaul authored
66 my $bibid = $query->param('bibid');
67 $bibid = &MARCfind_MARCbibid_from_oldbiblionumber($dbh,$biblionumber) unless $bibid;
5347b92 bugfix
tipaul authored
68 $biblionumber = &MARCfind_oldbiblionumber_from_MARCbibid($dbh,$bibid) unless $biblionumber;
8515ca8 road to 1.3.1 : viewing biblio MARC detail
tipaul authored
69 my $tagslib = &MARCgettagslib($dbh,1);
70
71 my $record =MARCgetbiblio($dbh,$bibid);
72 # open template
0e7f86d adding authentification with Auth.pm
tipaul authored
73 my ($template, $loggedinuser, $cookie)
74 = get_template_and_user({template_name => "catalogue/MARCdetail.tmpl",
75 query => $query,
76 type => "intranet",
77 authnotrequired => 0,
78 flagsrequired => {catalogue => 1},
79 debug => 1,
80 });
81
8515ca8 road to 1.3.1 : viewing biblio MARC detail
tipaul authored
82 # fill arrays
83 my @loop_data =();
84 my $tag;
9193195 road to 1.3.1 : viewing biblio MARC detail
tipaul authored
85 # loop through each tab 0 through 9
86 for (my $tabloop = 0; $tabloop<=10;$tabloop++) {
87 # loop through each tag
88 my @fields = $record->fields();
89 my @loop_data =();
8515ca8 road to 1.3.1 : viewing biblio MARC detail
tipaul authored
90 foreach my $field (@fields) {
e5bbeac Those fixes solves the "internal server error" with MARC::Record 1.12.
tipaul authored
91 my @subfields_data;
92 # if tag <10, there's no subfield, use the "@" trick
93 if ($field->tag()<10) {
94 next if ($tagslib->{$field->tag()}->{'@'}->{tab} ne $tabloop);
8515ca8 road to 1.3.1 : viewing biblio MARC detail
tipaul authored
95 my %subfield_data;
e5bbeac Those fixes solves the "internal server error" with MARC::Record 1.12.
tipaul authored
96 $subfield_data{marc_lib}=$tagslib->{$field->tag()}->{'@'}->{lib};
97 $subfield_data{marc_value}=$field->data();
98 $subfield_data{marc_tag}='@';
8515ca8 road to 1.3.1 : viewing biblio MARC detail
tipaul authored
99 push(@subfields_data, \%subfield_data);
e5bbeac Those fixes solves the "internal server error" with MARC::Record 1.12.
tipaul authored
100 } else {
101 my @subf=$field->subfields;
102 # loop through each subfield
103 for my $i (0..$#subf) {
104 $subf[$i][0] = "@" unless $subf[$i][0];
105 next if ($tagslib->{$field->tag()}->{$subf[$i][0]}->{tab} ne $tabloop);
106 my %subfield_data;
107 $subfield_data{marc_lib}=$tagslib->{$field->tag()}->{$subf[$i][0]}->{lib};
108 $subfield_data{marc_value}=$subf[$i][1];
109 $subfield_data{marc_tag}=$subf[$i][0];
110 push(@subfields_data, \%subfield_data);
111 }
8515ca8 road to 1.3.1 : viewing biblio MARC detail
tipaul authored
112 }
9193195 road to 1.3.1 : viewing biblio MARC detail
tipaul authored
113 if ($#subfields_data>=0) {
114 my %tag_data;
aef9c7d minor bugfixes and improvements
tipaul authored
115 $tag_data{tag}=$field->tag().' -'. $tagslib->{$field->tag()}->{lib};
9193195 road to 1.3.1 : viewing biblio MARC detail
tipaul authored
116 $tag_data{subfield} = \@subfields_data;
117 push (@loop_data, \%tag_data);
118 }
119 }
120 $template->param($tabloop."XX" =>\@loop_data);
121 }
122 # now, build item tab !
123 # the main difference is that datas are in lines and not in columns : thus, we build the <th> first, then the values...
124 # loop through each tag
125 # warning : we may have differents number of columns in each row. Thus, we first build a hash, complete it if necessary
126 # then construct template.
127 my @fields = $record->fields();
128 my %witness; #---- stores the list of subfields used at least once, with the "meaning" of the code
129 my @big_array;
130 foreach my $field (@fields) {
e5bbeac Those fixes solves the "internal server error" with MARC::Record 1.12.
tipaul authored
131 next if ($field->tag()<10);
9193195 road to 1.3.1 : viewing biblio MARC detail
tipaul authored
132 my @subf=$field->subfields;
133 my %this_row;
134 # loop through each subfield
135 for my $i (0..$#subf) {
136 next if ($tagslib->{$field->tag()}->{$subf[$i][0]}->{tab} ne 10);
137 $witness{$subf[$i][0]} = $tagslib->{$field->tag()}->{$subf[$i][0]}->{lib};
138 $this_row{$subf[$i][0]} =$subf[$i][1];
139 }
140 if (%this_row) {
141 push(@big_array, \%this_row);
8515ca8 road to 1.3.1 : viewing biblio MARC detail
tipaul authored
142 }
9193195 road to 1.3.1 : viewing biblio MARC detail
tipaul authored
143 }
144 #fill big_row with missing datas
145 foreach my $subfield_code (keys(%witness)) {
146 for (my $i=0;$i<=$#big_array;$i++) {
147 $big_array[$i]{$subfield_code}="&nbsp;" unless ($big_array[$i]{$subfield_code});
148 }
149 }
150 # now, construct template !
151 my @item_value_loop;
152 my @header_value_loop;
153 for (my $i=0;$i<=$#big_array; $i++) {
154 my $items_data;
155 foreach my $subfield_code (keys(%witness)) {
156 $items_data .="<td>".$big_array[$i]{$subfield_code}."</td>";
157 }
158 my %row_data;
159 $row_data{item_value} = $items_data;
160 push(@item_value_loop,\%row_data);
161 }
162 foreach my $subfield_code (keys(%witness)) {
163 my %header_value;
164 $header_value{header_value} = $witness{$subfield_code};
165 push(@header_value_loop, \%header_value);
8515ca8 road to 1.3.1 : viewing biblio MARC detail
tipaul authored
166 }
167
9193195 road to 1.3.1 : viewing biblio MARC detail
tipaul authored
168 $template->param(item_loop => \@item_value_loop,
169 item_header_loop => \@header_value_loop,
170 biblionumber => $biblionumber,
ae96102 * graphic bugfixes
tipaul authored
171 bibid => $bibid,
172 biblionumber => $biblionumber);
52a5fd4 Moved C4/Charset.pm to C4/Interface/CGI/Output.pm
acli authored
173 output_html_with_http_headers $query, $cookie, $template->output;
8515ca8 road to 1.3.1 : viewing biblio MARC detail
tipaul authored
174
Something went wrong with that request. Please try again.