Bug 14716: Fix more unencoded url parameters.
[koha-ffzg.git] / koha-tmpl / intranet-tmpl / prog / en / xslt / UNIMARCslimUtils.xsl
1 <?xml version='1.0'?>
2
3 <!DOCTYPE stylesheet [<!ENTITY nbsp "&#160;" >]>
4
5 <xsl:stylesheet version="1.0"
6   xmlns:marc="http://www.loc.gov/MARC21/slim"
7   xmlns:items="http://www.koha-community.org/items"
8   xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
9   xmlns:str="http://exslt.org/strings"
10   exclude-result-prefixes="marc items str">
11
12   <xsl:template name="datafield">
13     <xsl:param name="tag"/>
14     <xsl:param name="ind1"><xsl:text> </xsl:text></xsl:param>
15     <xsl:param name="ind2"><xsl:text> </xsl:text></xsl:param>
16     <xsl:param name="subfields"/>
17     <xsl:element name="datafield">
18       <xsl:attribute name="tag">
19         <xsl:value-of select="$tag"/>
20       </xsl:attribute>
21       <xsl:attribute name="ind1">
22         <xsl:value-of select="$ind1"/>
23       </xsl:attribute>
24       <xsl:attribute name="ind2">
25        <xsl:value-of select="$ind2"/>
26          </xsl:attribute>
27        <xsl:copy-of select="$subfields"/>
28     </xsl:element>
29   </xsl:template>
30
31   <xsl:template name="tag_210">
32     <li>
33       <strong>Publication: </strong>
34       <xsl:for-each select="marc:datafield[@tag=210]">
35         <span>
36           <xsl:call-template name="addClassRtl" />
37           <xsl:value-of select="marc:subfield[@code='a']"/>
38           <xsl:if test="marc:subfield[@code='b']">
39             <xsl:if test="marc:subfield[@code='a']">, </xsl:if>
40             <xsl:value-of select="marc:subfield[@code='b']"/>
41           </xsl:if>
42           <xsl:if test="marc:subfield[@code='a' or @code='b']">
43             <xsl:if test="marc:subfield[@code='a']"> : </xsl:if>
44             <xsl:value-of select="marc:subfield[@code='c']"/>
45           </xsl:if>
46           <xsl:if test="marc:subfield[@code='d']">
47             <xsl:if test="marc:subfield[@code='a' or @code='c']">, </xsl:if>
48             <xsl:value-of select="marc:subfield[@code='d']"/>
49           </xsl:if>
50           <xsl:if test="marc:subfield[@code='e']">
51             <xsl:if test="marc:subfield[@code='a' or @code='c' or @code='d']"> — </xsl:if>
52             <xsl:value-of select="marc:subfield[@code='e']"/>
53           </xsl:if>
54           <xsl:if test="marc:subfield[@code='g']">
55             <xsl:if test="marc:subfield[@code='e']"> : </xsl:if>
56             <xsl:value-of select="marc:subfield[@code='g']"/>
57           </xsl:if>
58           <xsl:if test="marc:subfield[@code='h']">
59             <xsl:if test="marc:subfield[@code='e' or @code='g']">, </xsl:if>
60             <xsl:value-of select="marc:subfield[@code='h']"/>
61           </xsl:if>
62           <xsl:if test="not (position() = last())">
63             <xsl:text> • </xsl:text>
64           </xsl:if>
65         </span>
66       </xsl:for-each>
67     </li>
68   </xsl:template>
69
70         <xsl:template name="tag_215">
71     <xsl:for-each select="marc:datafield[@tag=215]">
72       <li>
73         <strong>Description: </strong>
74         <xsl:if test="marc:subfield[@code='a']">
75           <xsl:value-of select="marc:subfield[@code='a']"/>
76         </xsl:if>
77         <xsl:if test="marc:subfield[@code='c']"> :
78           <xsl:value-of select="marc:subfield[@code='c']"/>
79         </xsl:if>
80         <xsl:if test="marc:subfield[@code='d']"> ;
81           <xsl:value-of select="marc:subfield[@code='d']"/>
82         </xsl:if>
83         <xsl:if test="marc:subfield[@code='e']"> +
84           <xsl:value-of select="marc:subfield[@code='e']"/>
85         </xsl:if>
86       </li>
87     </xsl:for-each>
88   </xsl:template>
89
90         <xsl:template name="tag_4xx">
91     <xsl:for-each select="marc:datafield[@tag=464 or @tag=461]">
92         <li>
93         <strong>Linked with: </strong>
94         <span>
95           <xsl:call-template name="addClassRtl" />
96           <xsl:if test="marc:subfield[@code='t']">
97             <xsl:value-of select="marc:subfield[@code='t']"/>
98           </xsl:if>
99           <xsl:if test="marc:subfield[@code='e']"> :
100             <xsl:value-of select="marc:subfield[@code='e']"/>
101           </xsl:if>
102           <xsl:if test="marc:subfield[@code='f']"> /
103             <xsl:value-of select="marc:subfield[@code='f']"/>
104           </xsl:if>
105           <xsl:if test="marc:subfield[@code='v']">,
106             <xsl:value-of select="marc:subfield[@code='v']"/>
107           </xsl:if>
108         </span>
109       </li>
110     </xsl:for-each>
111   </xsl:template>
112
113         <xsl:template name="subfieldSelect">
114                 <xsl:param name="codes"/>
115                 <xsl:param name="delimeter"><xsl:text> </xsl:text></xsl:param>
116                 <xsl:param name="subdivCodes"/>
117                 <xsl:param name="subdivDelimiter"/>
118     <xsl:param name="urlencode"/>
119                 <xsl:variable name="str">
120                         <xsl:for-each select="marc:subfield">
121                                 <xsl:if test="contains($codes, @code)">
122                     <xsl:if test="contains($subdivCodes, @code)">
123                         <xsl:value-of select="$subdivDelimiter"/>
124                     </xsl:if>
125                                         <xsl:value-of select="text()"/><xsl:value-of select="$delimeter"/>
126                                 </xsl:if>
127                         </xsl:for-each>
128                 </xsl:variable>
129     <xsl:choose>
130       <xsl:when test="$urlencode=1">
131         <xsl:value-of select="str:encode-uri(substring($str,1,string-length($str)-string-length($delimeter)), true())"/>
132       </xsl:when>
133       <xsl:otherwise>
134         <xsl:value-of select="substring($str,1,string-length($str)-string-length($delimeter))"/>
135       </xsl:otherwise>
136     </xsl:choose>
137         </xsl:template>
138
139         <xsl:template name="buildSpaces">
140                 <xsl:param name="spaces"/>
141                 <xsl:param name="char"><xsl:text> </xsl:text></xsl:param>
142                 <xsl:if test="$spaces>0">
143                         <xsl:value-of select="$char"/>
144                         <xsl:call-template name="buildSpaces">
145                                 <xsl:with-param name="spaces" select="$spaces - 1"/>
146                                 <xsl:with-param name="char" select="$char"/>
147                         </xsl:call-template>
148                 </xsl:if>
149         </xsl:template>
150
151   <xsl:template name="buildBiblioDefaultViewURL">
152       <xsl:param name="IntranetBiblioDefaultView"/>
153       <xsl:choose>
154           <xsl:when test="$IntranetBiblioDefaultView='normal'">
155               <xsl:text>/cgi-bin/koha/catalogue/detail.pl?biblionumber=</xsl:text>
156           </xsl:when>
157           <xsl:when test="$IntranetBiblioDefaultView='isbd'">
158               <xsl:text>/cgi-bin/koha/catalogue/ISBDdetail.pl?biblionumber=</xsl:text>
159           </xsl:when>
160           <xsl:when test="$IntranetBiblioDefaultView='labeled_marc'">
161               <xsl:text>/cgi-bin/koha/catalogue/labeledMARCdetail.pl?biblionumber=</xsl:text>
162           </xsl:when>
163           <xsl:when test="$IntranetBiblioDefaultView='marc'">
164               <xsl:text>/cgi-bin/koha/catalogue/MARCdetail.pl?biblionumber=</xsl:text>
165           </xsl:when>
166           <xsl:otherwise>
167               <xsl:text>/cgi-bin/koha/catalogue/detail.pl?biblionumber=</xsl:text>
168           </xsl:otherwise>
169       </xsl:choose>
170   </xsl:template>
171
172         <xsl:template name="chopSpecialCharacters">
173         <xsl:param name="title" />
174         <xsl:variable name="ntitle"
175              select="translate($title, '&#x0098;&#x009C;&#xC29C;&#xC29B;&#xC298;&#xC288;&#xC289;','')"/>
176         <xsl:value-of select="$ntitle" />
177     </xsl:template>
178
179
180         <xsl:template name="chopPunctuation">
181                 <xsl:param name="chopString"/>
182                 <xsl:variable name="length" select="string-length($chopString)"/>
183                 <xsl:choose>
184                         <xsl:when test="$length=0"/>
185                         <xsl:when test="contains('.:,;/ ', substring($chopString,$length,1))">
186                                 <xsl:call-template name="chopPunctuation">
187                                         <xsl:with-param name="chopString" select="substring($chopString,1,$length - 1)"/>
188                                 </xsl:call-template>
189                         </xsl:when>
190                         <xsl:when test="not($chopString)"/>
191                         <xsl:otherwise><xsl:value-of select="$chopString"/></xsl:otherwise>
192                 </xsl:choose>
193     <xsl:text> </xsl:text>
194         </xsl:template>
195
196         <xsl:template name="addClassRtl">
197     <xsl:variable name="lang" select="marc:subfield[@code='7']" />
198     <xsl:if test="$lang = 'ha' or $lang = 'Hebrew' or $lang = 'fa' or $lang = 'Arabe'">
199       <xsl:attribute name="class">rtl</xsl:attribute>
200     </xsl:if>
201   </xsl:template>
202
203   <xsl:template name="tag_title">
204     <xsl:param name="tag" />
205     <xsl:param name="label" />
206     <xsl:if test="marc:datafield[@tag=$tag]">
207       <li>
208         <strong><xsl:value-of select="$label"/>: </strong>
209         <xsl:for-each select="marc:datafield[@tag=$tag]">
210           <xsl:value-of select="marc:subfield[@code='a']" />
211           <xsl:if test="marc:subfield[@code='d']">
212             <xsl:text> : </xsl:text>
213             <xsl:value-of select="marc:subfield[@code='e']"/>
214           </xsl:if>
215           <xsl:if test="marc:subfield[@code='e']">
216             <xsl:for-each select="marc:subfield[@code='e']">
217               <xsl:text> </xsl:text>
218               <xsl:value-of select="."/>
219             </xsl:for-each>
220           </xsl:if>
221           <xsl:if test="marc:subfield[@code='f']">
222             <xsl:text> / </xsl:text>
223             <xsl:value-of select="marc:subfield[@code='f']"/>
224           </xsl:if>
225           <xsl:if test="marc:subfield[@code='h']">
226             <xsl:text>, </xsl:text>
227             <xsl:value-of select="marc:subfield[@code='h']"/>
228           </xsl:if>
229           <xsl:if test="marc:subfield[@code='i']">
230             <xsl:text>, </xsl:text>
231             <xsl:value-of select="marc:subfield[@code='i']"/>
232           </xsl:if>
233           <xsl:if test="marc:subfield[@code='v']">
234             <xsl:text>, </xsl:text>
235             <xsl:value-of select="marc:subfield[@code='v']"/>
236           </xsl:if>
237           <xsl:if test="marc:subfield[@code='x']">
238             <xsl:text>, </xsl:text>
239             <xsl:value-of select="marc:subfield[@code='x']"/>
240           </xsl:if>
241           <xsl:if test="marc:subfield[@code='z']">
242             <xsl:text>, </xsl:text>
243             <xsl:value-of select="marc:subfield[@code='z']"/>
244           </xsl:if>
245         </xsl:for-each>
246       </li>
247     </xsl:if>
248   </xsl:template>
249
250
251   <xsl:template name="tag_subject">
252     <xsl:param name="tag" />
253     <xsl:param name="label" />
254     <xsl:if test="marc:datafield[@tag=$tag]">
255       <li>
256         <strong><xsl:value-of select="$label"/>: </strong>
257         <xsl:for-each select="marc:datafield[@tag=$tag]">
258           <a>
259             <xsl:choose>
260               <xsl:when test="marc:subfield[@code=9]">
261                 <xsl:attribute name="href">/cgi-bin/koha/catalogue/search.pl?q=an:<xsl:value-of select="str:encode-uri(marc:subfield[@code=9], true())"/></xsl:attribute>
262               </xsl:when>
263               <xsl:otherwise>
264                 <xsl:attribute name="href">/cgi-bin/koha/catalogue/search.pl?q=su:<xsl:value-of select="str:encode-uri(marc:subfield[@code='a'], true())"/></xsl:attribute>
265               </xsl:otherwise>
266             </xsl:choose>
267             <xsl:call-template name="chopPunctuation">
268               <xsl:with-param name="chopString">
269                 <xsl:call-template name="subfieldSelect">
270                     <xsl:with-param name="codes">abcdjpvxyz</xsl:with-param>
271                     <xsl:with-param name="subdivCodes">jpxyz</xsl:with-param>
272                     <xsl:with-param name="subdivDelimiter">-- </xsl:with-param>
273                 </xsl:call-template>
274               </xsl:with-param>
275             </xsl:call-template>
276           </a>
277           <xsl:if test="not (position()=last())">
278             <xsl:text> | </xsl:text>
279           </xsl:if>
280         </xsl:for-each>
281       </li>
282     </xsl:if>
283   </xsl:template>
284
285
286   <xsl:template name="tag_7xx">
287     <xsl:param name="tag" />
288     <xsl:param name="label" />
289     <xsl:if test="marc:datafield[@tag=$tag]">
290       <li>
291         <strong><xsl:value-of select="$label" />: </strong>
292         <xsl:for-each select="marc:datafield[@tag=$tag]">
293           <span>
294             <xsl:call-template name="addClassRtl" />
295             <a>
296               <xsl:choose>
297                 <xsl:when test="marc:subfield[@code=9]">
298                   <xsl:attribute name="href">/cgi-bin/koha/catalogue/search.pl?q=an:<xsl:value-of select="str:encode-uri(marc:subfield[@code=9], true())"/></xsl:attribute>
299                 </xsl:when>
300                 <xsl:otherwise>
301                   <xsl:attribute name="href">/cgi-bin/koha/catalogue/search.pl?q=au:<xsl:value-of select="str:encode-uri(marc:subfield[@code='a'], true())"/><xsl:text> </xsl:text><xsl:value-of select="marc:subfield[@code='b']"/></xsl:attribute>
302                 </xsl:otherwise>
303               </xsl:choose>
304               <xsl:if test="marc:subfield[@code='a']">
305                 <xsl:value-of select="marc:subfield[@code='a']"/>
306               </xsl:if>
307               <xsl:if test="marc:subfield[@code='b']">
308                 <xsl:text>, </xsl:text>
309                 <xsl:value-of select="marc:subfield[@code='b']"/>
310               </xsl:if>
311               <xsl:if test="marc:subfield[@code='c']">
312                 <xsl:text>, </xsl:text>
313                 <xsl:value-of select="marc:subfield[@code='c']"/>
314               </xsl:if>
315               <xsl:if test="marc:subfield[@code='d']">
316                 <xsl:text> </xsl:text>
317                 <xsl:value-of select="marc:subfield[@code='d']"/>
318               </xsl:if>
319               <xsl:if test="marc:subfield[@code='f']">
320                 <span dir="ltr">
321                 <xsl:text> (</xsl:text>
322                 <xsl:value-of select="marc:subfield[@code='f']"/>
323                 <xsl:text>)</xsl:text>
324                 </span>
325               </xsl:if>
326               <xsl:if test="marc:subfield[@code='g']">
327                 <xsl:text> </xsl:text>
328                 <xsl:value-of select="marc:subfield[@code='g']"/>
329               </xsl:if>
330               <xsl:if test="marc:subfield[@code='p']">
331                 <xsl:text> </xsl:text>
332                 <xsl:value-of select="marc:subfield[@code='p']"/>
333               </xsl:if>
334             </a>
335           </span>
336           <xsl:if test="not (position() = last())">
337             <xsl:text> ; </xsl:text>
338           </xsl:if>
339         </xsl:for-each>
340       </li>
341     </xsl:if>
342   </xsl:template>
343
344 </xsl:stylesheet>