|
Lines 158-163
sub _get_best_default_xslt_filename {
Link Here
|
| 158 |
|
158 |
|
| 159 |
sub XSLTParse4Display { |
159 |
sub XSLTParse4Display { |
| 160 |
my ( $biblionumber, $orig_record, $xslsyspref, $fixamps, $hidden_items ) = @_; |
160 |
my ( $biblionumber, $orig_record, $xslsyspref, $fixamps, $hidden_items ) = @_; |
|
|
161 |
|
| 162 |
my $shouldIPullChildRecords; #We don't want to pull child records if they are not needed! Show child records only for detailed views. |
| 163 |
|
| 161 |
my $xslfilename = C4::Context->preference($xslsyspref); |
164 |
my $xslfilename = C4::Context->preference($xslsyspref); |
| 162 |
if ( $xslfilename =~ /^\s*"?default"?\s*$/i ) { |
165 |
if ( $xslfilename =~ /^\s*"?default"?\s*$/i ) { |
| 163 |
my $htdocs; |
166 |
my $htdocs; |
|
Lines 169-174
sub XSLTParse4Display {
Link Here
|
| 169 |
$theme = C4::Context->preference("template"); |
172 |
$theme = C4::Context->preference("template"); |
| 170 |
$xslfile = C4::Context->preference('marcflavour') . |
173 |
$xslfile = C4::Context->preference('marcflavour') . |
| 171 |
"slim2intranetDetail.xsl"; |
174 |
"slim2intranetDetail.xsl"; |
|
|
175 |
$shouldIPullChildRecords = 1; |
| 172 |
} elsif ($xslsyspref eq "XSLTResultsDisplay") { |
176 |
} elsif ($xslsyspref eq "XSLTResultsDisplay") { |
| 173 |
$htdocs = C4::Context->config('intrahtdocs'); |
177 |
$htdocs = C4::Context->config('intrahtdocs'); |
| 174 |
$theme = C4::Context->preference("template"); |
178 |
$theme = C4::Context->preference("template"); |
|
Lines 179-184
sub XSLTParse4Display {
Link Here
|
| 179 |
$theme = C4::Context->preference("opacthemes"); |
183 |
$theme = C4::Context->preference("opacthemes"); |
| 180 |
$xslfile = C4::Context->preference('marcflavour') . |
184 |
$xslfile = C4::Context->preference('marcflavour') . |
| 181 |
"slim2OPACDetail.xsl"; |
185 |
"slim2OPACDetail.xsl"; |
|
|
186 |
$shouldIPullChildRecords = 1; |
| 182 |
} elsif ($xslsyspref eq "OPACXSLTResultsDisplay") { |
187 |
} elsif ($xslsyspref eq "OPACXSLTResultsDisplay") { |
| 183 |
$htdocs = C4::Context->config('opachtdocs'); |
188 |
$htdocs = C4::Context->config('opachtdocs'); |
| 184 |
$theme = C4::Context->preference("opacthemes"); |
189 |
$theme = C4::Context->preference("opacthemes"); |
|
Lines 192-200
sub XSLTParse4Display {
Link Here
|
| 192 |
my $lang = C4::Templates::_current_language(); |
197 |
my $lang = C4::Templates::_current_language(); |
| 193 |
$xslfilename =~ s/\{langcode\}/$lang/; |
198 |
$xslfilename =~ s/\{langcode\}/$lang/; |
| 194 |
} |
199 |
} |
|
|
200 |
|
| 195 |
|
201 |
|
| 196 |
# grab the XML, run it through our stylesheet, push it out to the browser |
202 |
# grab the XML, run it through our stylesheet, push it out to the browser |
| 197 |
my $record = transformMARCXML4XSLT($biblionumber, $orig_record); |
203 |
my $record = transformMARCXML4XSLT($biblionumber, $orig_record); |
|
|
204 |
my $f001Data = $record->field('001')->data(); |
| 205 |
|
| 206 |
my $childRecordsXML = _prepareChildRecords($f001Data) if $shouldIPullChildRecords && |
| 207 |
C4::Context->preference('AddChildRecordsToDetailedViews');; |
| 208 |
|
| 198 |
#return $record->as_formatted(); |
209 |
#return $record->as_formatted(); |
| 199 |
my $itemsxml = buildKohaItemsNamespace($biblionumber, $hidden_items); |
210 |
my $itemsxml = buildKohaItemsNamespace($biblionumber, $hidden_items); |
| 200 |
my $xmlrecord = $record->as_xml(C4::Context->preference('marcflavour')); |
211 |
my $xmlrecord = $record->as_xml(C4::Context->preference('marcflavour')); |
|
Lines 214-220
sub XSLTParse4Display {
Link Here
|
| 214 |
$sysxml .= "<syspref name=\"$syspref\">$sp</syspref>\n"; |
225 |
$sysxml .= "<syspref name=\"$syspref\">$sp</syspref>\n"; |
| 215 |
} |
226 |
} |
| 216 |
$sysxml .= "</sysprefs>\n"; |
227 |
$sysxml .= "</sysprefs>\n"; |
| 217 |
$xmlrecord =~ s/\<\/record\>/$itemsxml$sysxml\<\/record\>/; |
228 |
$xmlrecord =~ s/\<\/record\>/$itemsxml$sysxml$childRecordsXML\<\/record\>/; |
| 218 |
if ($fixamps) { # We need to correct the ampersand entities that Zebra outputs |
229 |
if ($fixamps) { # We need to correct the ampersand entities that Zebra outputs |
| 219 |
$xmlrecord =~ s/\&amp;/\&/g; |
230 |
$xmlrecord =~ s/\&amp;/\&/g; |
| 220 |
} |
231 |
} |
|
Lines 313-318
sub buildKohaItemsNamespace {
Link Here
|
| 313 |
return $xml; |
324 |
return $xml; |
| 314 |
} |
325 |
} |
| 315 |
|
326 |
|
|
|
327 |
=head |
| 328 |
|
| 329 |
Makes a C4::Search::SimpleSearch() to find all records from the index rcn=Record-control-number matching the given |
| 330 |
field 001 value. |
| 331 |
Strips some key identifiers from those records. |
| 332 |
Builds a XML presentation out of those, ready for the XSLT processing. |
| 333 |
|
| 334 |
$childRecordsXML = &_prepareChildRecords($field001Data); |
| 335 |
|
| 336 |
In Koha the field 001 is not the same as the biblionumber! |
| 337 |
|
| 338 |
Returns: a string containing an XML representation of child records |
| 339 |
In XSL: childRecords/child/title |
| 340 |
in addition to title, elements can also be subtitle, biblionumber, author, publishercode, publicationyear |
| 341 |
eg. childRecords/child/biblionumber |
| 342 |
|
| 343 |
=cut |
| 344 |
sub _prepareChildRecords { |
| 345 |
|
| 346 |
my $field001Data = shift; |
| 347 |
my $childRecordsXML; |
| 348 |
my ($error, $childRecordISOs, $resultSetSize) = C4::Search::SimpleSearch("rcn=$field001Data"); |
| 349 |
#TODO my ($error, $childRecordISOs, $resultSetSize) = C4::Search::SimpleSearch("rcn=$biblionumber title-sort-az"); |
| 350 |
# how the hell do I sort the result set? BTW I cant sort it by title. le fuuu! |
| 351 |
|
| 352 |
if ($resultSetSize && !$error) { |
| 353 |
|
| 354 |
#Collect the XML elements to a array instead of continuously concatenating a string. |
| 355 |
# There might be dozens of child records and in such a case string concatenation is extremely slow. |
| 356 |
my @childRecordsXML = ('<childRecords>'); #@childRecordsXML vs $childRecordsXML is a nice Perl curiosity! |
| 357 |
for my $cr ( @{$childRecordISOs} ) { |
| 358 |
push @childRecordsXML, ' <child>'; |
| 359 |
my $marcrecord = MARC::File::USMARC::decode($cr); |
| 360 |
my $childBiblio = TransformMarcToKoha(C4::Context->dbh,$marcrecord,q{}); |
| 361 |
|
| 362 |
push @childRecordsXML, " <title>$childBiblio->{'title'}</title>" if $childBiblio->{'title'}; |
| 363 |
push @childRecordsXML, " <subtitle>$childBiblio->{'subtitle'}</subtitle>" if $childBiblio->{'subtitle'}; |
| 364 |
push @childRecordsXML, " <biblionumber>$childBiblio->{'biblionumber'}</biblionumber>" if $childBiblio->{'biblionumber'}; |
| 365 |
push @childRecordsXML, " <author>$childBiblio->{'author'}</author>" if $childBiblio->{'author'}; |
| 366 |
push @childRecordsXML, " <publishercode>$childBiblio->{'publishercode'}</publishercode>" if $childBiblio->{'publishercode'}; |
| 367 |
push @childRecordsXML, " <publicationyear>$childBiblio->{'publicationyear'}</publicationyear>" if $childBiblio->{'publicationyear'}; |
| 368 |
|
| 369 |
push @childRecordsXML, ' </child>'; |
| 370 |
} |
| 371 |
push @childRecordsXML, '</childRecords>'; |
| 372 |
push @childRecordsXML, ''; #Just to make the join operation end with a newline |
| 373 |
|
| 374 |
#Build the real XML string. |
| 375 |
$childRecordsXML = join "\n", @childRecordsXML; |
| 376 |
|
| 377 |
return $childRecordsXML; |
| 378 |
} |
| 379 |
return ''; #Instantiate this string so we don't get undefined errors when concatenating with this. |
| 380 |
} |
| 316 |
|
381 |
|
| 317 |
|
382 |
|
| 318 |
1; |
383 |
1; |