From: Winona Salesky <wsale...@gmail.com>

This patch updates the visibility of the 7xx fields in the
XSLT display in the staff and OPAC.

To test:

* Search the opac for a title with 7xx fields
* Click the title
* Make sure the fields display properly
* Repeat for a few more titles
* Repeat in the Staff Client
---
 .../prog/en/xslt/MARC21slim2intranetDetail.xsl     |  198 ++++++++++++++++++--
 .../bootstrap/en/xslt/MARC21slim2OPACDetail.xsl    |  110 +++++++++---
 2 files changed, 263 insertions(+), 45 deletions(-)

diff --git a/koha-tmpl/intranet-tmpl/prog/en/xslt/MARC21slim2intranetDetail.xsl 
b/koha-tmpl/intranet-tmpl/prog/en/xslt/MARC21slim2intranetDetail.xsl
index f96c0eb..b0d3995 100644
--- a/koha-tmpl/intranet-tmpl/prog/en/xslt/MARC21slim2intranetDetail.xsl
+++ b/koha-tmpl/intranet-tmpl/prog/en/xslt/MARC21slim2intranetDetail.xsl
@@ -3,6 +3,7 @@
 <!DOCTYPE stylesheet [<!ENTITY nbsp "&#160;" >]>
 
 <!-- $Id: MARC21slim2DC.xsl,v 1.1 2003/01/06 08:20:27 adam Exp $ -->
+<!-- Edited: Bug 13382 [ENH] XSLT enhancements sponsored by bywater solutions 
2015/01/19 WS wsale...@gmail.com  -->
 <xsl:stylesheet version="1.0"
   xmlns:marc="http://www.loc.gov/MARC21/slim";
   xmlns:items="http://www.koha-community.org/items";
@@ -140,9 +141,17 @@
         </xsl:if>
 
         <!-- Author Statement -->
-        <xsl:call-template name="showAuthor"><xsl:with-param 
name="authorfield" select="marc:datafield[@tag=100 or @tag=110 or 
@tag=111]"/><xsl:with-param name="UseAuthoritiesForTracings" 
select="$UseAuthoritiesForTracings"/></xsl:call-template>
-        <xsl:call-template name="showAuthor"><xsl:with-param 
name="authorfield" select="marc:datafield[@tag=700 or @tag=710 or 
@tag=711]"/><xsl:with-param name="UseAuthoritiesForTracings" 
select="$UseAuthoritiesForTracings"/></xsl:call-template>
-
+        <!-- #13382 suppress 700$i and 7xx/@ind2=2 -->
+        <xsl:call-template name="showAuthor">
+            <xsl:with-param name="authorfield" select="marc:datafield[@tag=100 
or @tag=110 or @tag=111]"/>
+            <xsl:with-param name="UseAuthoritiesForTracings" 
select="$UseAuthoritiesForTracings"/>
+        </xsl:call-template>
+        <xsl:call-template name="showAuthor">
+            <!-- #13382 suppress 700$i and 7xx/@ind2=2 -->
+            <xsl:with-param name="authorfield" select="marc:datafield[@tag=700 
or @tag=710 or 
@tag=711][not(@ind2=2)][not(marc:subfield[@code='i'][parent::marc:datafield[@tag='700']])]"/>
+            <xsl:with-param name="UseAuthoritiesForTracings" 
select="$UseAuthoritiesForTracings"/>
+        </xsl:call-template>
+        
     <xsl:if test="$DisplayIconsXSLT!='0' and $materialTypeCode!=''">
         <span class="results_summary type"><span class="label">Material type: 
</span>
         <xsl:element name="img"><xsl:attribute 
name="src">/intranet-tmpl/prog/img/famfamfam/<xsl:value-of 
select="$materialTypeCode"/>.png</xsl:attribute><xsl:attribute 
name="alt"></xsl:attribute></xsl:element>
@@ -524,7 +533,115 @@
         </xsl:for-each>
         </span>
         </xsl:if>
-
+        
+        <!-- #13382 Added Related works 700$i -->
+        <xsl:if test="marc:datafield[@tag=700][marc:subfield[@code='i']]">
+            <span class="results_summary related_works"><span 
class="label">Related Works: </span>
+                <xsl:for-each 
select="marc:datafield[@tag=700][marc:subfield[@code='i']]">
+                    <xsl:variable name="str">   
+                        <xsl:call-template name="subfieldSelect">
+                            <xsl:with-param 
name="codes">abcdfghiklmorstux</xsl:with-param>
+                        </xsl:call-template>
+                    </xsl:variable>
+                    <xsl:call-template name="chopPunctuation">
+                        <xsl:with-param name="chopString">
+                            <xsl:value-of 
select="substring($str,1,string-length($str)-1)"/>    
+                        </xsl:with-param>
+                    </xsl:call-template>
+                    <!-- add relator code too between brackets-->
+                    <xsl:if test="marc:subfield[@code='4' or @code='e']">
+                        <span class="relatorcode">
+                            <xsl:text> [</xsl:text>
+                            <xsl:choose>
+                                <xsl:when test="marc:subfield[@code='e']">
+                                    <xsl:call-template name="chopPunctuation">
+                                        <xsl:with-param name="chopString">
+                                            <xsl:call-template 
name="subfieldSelect">
+                                                <xsl:with-param 
name="codes">e</xsl:with-param>
+                                            </xsl:call-template>
+                                        </xsl:with-param>
+                                        <xsl:with-param name="punctuation">
+                                            <xsl:text>:,;/. </xsl:text>
+                                        </xsl:with-param>
+                                    </xsl:call-template>
+                                </xsl:when>
+                                <xsl:otherwise>
+                                    <xsl:call-template name="chopPunctuation">
+                                        <xsl:with-param name="chopString">
+                                            <xsl:call-template 
name="subfieldSelect">
+                                                <xsl:with-param 
name="codes">4</xsl:with-param>
+                                            </xsl:call-template>
+                                        </xsl:with-param>
+                                        <xsl:with-param name="punctuation">
+                                            <xsl:text>:,;/. </xsl:text>
+                                        </xsl:with-param>
+                                    </xsl:call-template>
+                                </xsl:otherwise>
+                            </xsl:choose>
+                            <xsl:text>]</xsl:text>
+                        </span>
+                    </xsl:if>
+                    <xsl:choose>
+                        <xsl:when 
test="position()=last()"><xsl:text>.</xsl:text></xsl:when><xsl:otherwise><xsl:text>
 -- </xsl:text></xsl:otherwise>
+                    </xsl:choose>
+                </xsl:for-each>
+            </span> 
+        </xsl:if>
+        
+        <!-- #13382 Added Contained Works 7xx@ind2=2 -->
+        <xsl:if test="marc:datafield[@tag=700][@ind2=2] or 
marc:datafield[@tag=710][@ind2=2] or marc:datafield[@tag=711][@ind2=2]">
+            <span class="results_summary contained_works"><span 
class="label">Contained Works: </span>
+                <xsl:for-each 
select="marc:datafield[@tag=700][@ind2=2][not(marc:subfield[@code='i'])] | 
marc:datafield[@tag=710][@ind2=2][not(marc:subfield[@code='i'])] | 
marc:datafield[@tag=711][@ind2=2][not(marc:subfield[@code='i'])]">
+                    <xsl:variable name="str">   
+                        <xsl:call-template name="subfieldSelect">
+                            <xsl:with-param 
name="codes">abcdfghiklmorstux</xsl:with-param>
+                        </xsl:call-template>
+                    </xsl:variable>
+                    <xsl:call-template name="chopPunctuation">
+                        <xsl:with-param name="chopString">
+                            <xsl:value-of 
select="substring($str,1,string-length($str)-1)"/>    
+                        </xsl:with-param>
+                    </xsl:call-template>
+                    <!-- add relator code too between brackets-->
+                    <xsl:if test="marc:subfield[@code='4' or @code='e']">
+                        <span class="relatorcode">
+                            <xsl:text> [</xsl:text>
+                            <xsl:choose>
+                                <xsl:when test="marc:subfield[@code='e']">
+                                    <xsl:call-template name="chopPunctuation">
+                                        <xsl:with-param name="chopString">
+                                            <xsl:call-template 
name="subfieldSelect">
+                                                <xsl:with-param 
name="codes">e</xsl:with-param>
+                                            </xsl:call-template>
+                                        </xsl:with-param>
+                                        <xsl:with-param name="punctuation">
+                                            <xsl:text>:,;/. </xsl:text>
+                                        </xsl:with-param>
+                                    </xsl:call-template>    
+                                </xsl:when>
+                                <xsl:otherwise>
+                                    <xsl:call-template name="chopPunctuation">
+                                        <xsl:with-param name="chopString">
+                                            <xsl:call-template 
name="subfieldSelect">
+                                                <xsl:with-param 
name="codes">4</xsl:with-param>
+                                            </xsl:call-template>
+                                        </xsl:with-param>
+                                        <xsl:with-param name="punctuation">
+                                            <xsl:text>:,;/. </xsl:text>
+                                        </xsl:with-param>
+                                    </xsl:call-template>
+                                </xsl:otherwise>
+                            </xsl:choose>
+                            <xsl:text>]</xsl:text>
+                        </span>
+                    </xsl:if>
+                    <xsl:choose>
+                        <xsl:when 
test="position()=last()"><xsl:text>.</xsl:text></xsl:when><xsl:otherwise><xsl:text>;
 </xsl:text></xsl:otherwise>
+                    </xsl:choose>
+                </xsl:for-each>
+            </span> 
+        </xsl:if>
+        
         <xsl:if test="marc:datafield[substring(@tag, 1, 1) = '6']">
             <span class="results_summary subjects"><span 
class="label">Subject(s): </span>
             <xsl:for-each select="marc:datafield[substring(@tag, 1, 1) = '6']">
@@ -949,7 +1066,8 @@
         <xsl:choose>
           <xsl:when test="position()&gt;1"/>
           <xsl:when test="@tag&lt;700">Author(s): </xsl:when>
-          <xsl:otherwise>Additional author(s): </xsl:otherwise>
+            <!--#13382 Changed Additional author to contributor -->
+            <xsl:otherwise>Contributor(s): </xsl:otherwise>
         </xsl:choose>
         <a>
         <xsl:choose>
@@ -961,24 +1079,66 @@
             </xsl:otherwise>
         </xsl:choose>
        <xsl:choose>
-          <xsl:when test="@tag=100 or @tag=700"><xsl:call-template 
name="nameABCQ"/></xsl:when>
-          <xsl:when test="@tag=110 or @tag=710"><xsl:call-template 
name="nameABCDN"/></xsl:when>
-          <xsl:when test="@tag=111 or @tag=711"><xsl:call-template 
name="nameACDEQ"/></xsl:when>
+        <xsl:when test="@tag=100"><xsl:call-template 
name="nameABCQ"/></xsl:when>
+        <xsl:when test="@tag=110"><xsl:call-template 
name="nameABCDN"/></xsl:when>
+        <xsl:when test="@tag=111"><xsl:call-template 
name="nameACDEQ"/></xsl:when>
+           <!-- #13382 excludes 700$i and ind2=2, displayed as Related Works 
-->
+           <!--#13382 Added all relevant subfields 4, e, are handled 
separately -->
+           <xsl:when test="@tag=700 or @tag=710 or @tag=711">
+               <xsl:variable name="str">
+                   <xsl:call-template name="subfieldSelect">
+                       <xsl:with-param 
name="codes">abcdfghiklmnoprstux</xsl:with-param>
+                   </xsl:call-template>
+               </xsl:variable>
+               <xsl:call-template name="chopPunctuation">
+                   <xsl:with-param name="chopString">
+                       <xsl:value-of select="$str"/>
+                   </xsl:with-param>
+                   <xsl:with-param name="punctuation">
+                       <xsl:text>:,;/. </xsl:text>
+                   </xsl:with-param>
+               </xsl:call-template>
+           </xsl:when>
        </xsl:choose>
        <!-- add relator code too between brackets-->
-       <xsl:if test="marc:subfield[@code='4' or @code='e']">
-      <span class="relatorcode">
-      <xsl:text> [</xsl:text>
-         <xsl:choose>
-           <xsl:when test="marc:subfield[@code=4]"><xsl:value-of 
select="marc:subfield[@code=4]"/></xsl:when>
-           <xsl:otherwise><xsl:value-of 
select="marc:subfield[@code='e']"/></xsl:otherwise>
-         </xsl:choose>
-         <xsl:text>]</xsl:text>
-      </span>
-       </xsl:if>
+        <xsl:if test="marc:subfield[@code='4' or @code='e']">
+                <xsl:if test="not(@tag=111 or @tag=711)">
+                    <span class="relatorcode">
+                        <xsl:text> [</xsl:text>
+                        <!-- #13382 If both $e and $4 are present only display 
$e -->
+                        <xsl:choose>
+                            <xsl:when test="marc:subfield[@code='e']">
+                                <xsl:call-template name="chopPunctuation">
+                                    <xsl:with-param name="chopString">
+                                        <xsl:call-template 
name="subfieldSelect">
+                                            <xsl:with-param 
name="codes">e</xsl:with-param>
+                                        </xsl:call-template>
+                                    </xsl:with-param>
+                                    <xsl:with-param name="punctuation">
+                                        <xsl:text>:,;/. </xsl:text>
+                                    </xsl:with-param>
+                                </xsl:call-template>
+                            </xsl:when>
+                            <xsl:otherwise>
+                                <xsl:call-template name="chopPunctuation">
+                                    <xsl:with-param name="chopString">
+                                        <xsl:call-template 
name="subfieldSelect">
+                                            <xsl:with-param 
name="codes">4</xsl:with-param>
+                                        </xsl:call-template>
+                                    </xsl:with-param>
+                                    <xsl:with-param name="punctuation">
+                                        <xsl:text>:,;/. </xsl:text>
+                                    </xsl:with-param>
+                                </xsl:call-template>
+                            </xsl:otherwise>
+                        </xsl:choose>
+                        <xsl:text>]</xsl:text>
+                    </span>
+                </xsl:if>
+            </xsl:if>
        </a>
         <xsl:choose>
-          <xsl:when 
test="position()=last()"><xsl:text>.</xsl:text></xsl:when><xsl:otherwise><xsl:text>;
 </xsl:text></xsl:otherwise>
+          <xsl:when 
test="position()=last()"><xsl:text>.</xsl:text></xsl:when><xsl:otherwise><xsl:text>
 | </xsl:text></xsl:otherwise>
         </xsl:choose>
         </xsl:for-each>
         </h5>
diff --git a/koha-tmpl/opac-tmpl/bootstrap/en/xslt/MARC21slim2OPACDetail.xsl 
b/koha-tmpl/opac-tmpl/bootstrap/en/xslt/MARC21slim2OPACDetail.xsl
index af9ac00..04eda03 100644
--- a/koha-tmpl/opac-tmpl/bootstrap/en/xslt/MARC21slim2OPACDetail.xsl
+++ b/koha-tmpl/opac-tmpl/bootstrap/en/xslt/MARC21slim2OPACDetail.xsl
@@ -1,5 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!-- $Id: MARC21slim2DC.xsl,v 1.1 2003/01/06 08:20:27 adam Exp $ -->
+<!-- Edited: Bug 13382 [ENH] XSLT enhancements sponsored by bywater solutions 
2015/01/19 WS wsale...@gmail.com  -->
 <!DOCTYPE stylesheet [<!ENTITY nbsp "&#160;" >]>
 <xsl:stylesheet version="1.0"
   xmlns:marc="http://www.loc.gov/MARC21/slim";
@@ -158,18 +159,21 @@
                 </xsl:call-template>
             </h5>
         </xsl:if>
-        <xsl:choose>
-            <xsl:when test="marc:datafield[@tag=100] or 
marc:datafield[@tag=110] or marc:datafield[@tag=111] or 
marc:datafield[@tag=700] or marc:datafield[@tag=710] or 
marc:datafield[@tag=711]">
-                <h5 class="author">by
-                    <xsl:call-template name="showAuthor">
-                        <xsl:with-param name="authorfield" 
select="marc:datafield[@tag=100 or @tag=110 or @tag=111 or @tag=700 or @tag=710 
or @tag=711]"/>
-                        <xsl:with-param name="UseAuthoritiesForTracings" 
select="$UseAuthoritiesForTracings"/>
-                        <xsl:with-param name="materialTypeLabel" 
select="$materialTypeLabel"/>
-                        <xsl:with-param name="theme" select="$theme"/>
-                    </xsl:call-template>
-                </h5>
-            </xsl:when>
-        </xsl:choose>
+            
+            <!--#13382 Added Author Statement to seperate Authors and 
Contributors -->
+            <xsl:call-template name="showAuthor">
+                <xsl:with-param name="authorfield" 
select="marc:datafield[@tag=100 or @tag=110 or @tag=111]"/>
+                <xsl:with-param name="UseAuthoritiesForTracings" 
select="$UseAuthoritiesForTracings"/>
+                <xsl:with-param name="materialTypeLabel" 
select="$materialTypeLabel"/>
+                <xsl:with-param name="theme" select="$theme"/>
+            </xsl:call-template>
+            <xsl:call-template name="showAuthor">
+                <!-- #13382 suppress 700$i and 7xx/@ind2=2 -->
+                <xsl:with-param name="authorfield" 
select="marc:datafield[@tag=700 or @tag=710 or 
@tag=711][not(@ind2=2)][not(marc:subfield[@code='i'][parent::marc:datafield[@tag='700']])]"/>
+                <xsl:with-param name="UseAuthoritiesForTracings" 
select="$UseAuthoritiesForTracings"/>
+                <xsl:with-param name="materialTypeLabel" 
select="$materialTypeLabel"/>
+                <xsl:with-param name="theme" select="$theme"/>
+            </xsl:call-template>
 
    <xsl:if test="$DisplayOPACiconsXSLT!='0'">
         <xsl:if test="$materialTypeCode!=''">
@@ -1025,8 +1029,16 @@
         <xsl:param name="UseAuthoritiesForTracings" />
         <xsl:param name="materialTypeLabel" />
         <xsl:param name="theme" />
+        <xsl:if test="count($authorfield)&gt;0">
+        <!--#13382 Changed Additional author to contributor -->
+        <h5>
         <xsl:for-each select="$authorfield">
-            <xsl:choose><xsl:when test="position()!=1"><xsl:text>; 
</xsl:text></xsl:when></xsl:choose>
+            <xsl:choose>
+                <xsl:when test="position()&gt;1"/>
+                <xsl:when test="@tag&lt;700">by </xsl:when>
+                <!--#13382 Changed Additional author to contributor -->
+                <xsl:otherwise>Contributor(s): </xsl:otherwise>
+            </xsl:choose>
             <xsl:choose>
                 <xsl:when test="not(@tag=111 or @tag=711)" />
                 <xsl:when test="marc:subfield[@code='n']">
@@ -1067,21 +1079,62 @@
                     </xsl:choose>
                 <span property="name">
                 <xsl:choose>
-                    <xsl:when test="@tag=100 or @tag=700"><xsl:call-template 
name="nameABCQ"/></xsl:when>
-                    <xsl:when test="@tag=110 or @tag=710"><xsl:call-template 
name="nameABCDN"/></xsl:when>
-                    <xsl:when test="@tag=111 or @tag=711"><xsl:call-template 
name="nameACDEQ"/></xsl:when>
+                    <xsl:when test="@tag=100"><xsl:call-template 
name="nameABCQ"/></xsl:when>
+                    <xsl:when test="@tag=110"><xsl:call-template 
name="nameABCDN"/></xsl:when>
+                    <xsl:when test="@tag=111"><xsl:call-template 
name="nameACDEQ"/></xsl:when>
+                    <!-- #13382 excludes 700$i and ind2=2, displayed as 
Related Works -->
+                    <!--#13382 Added all relevant subfields 4, e, are handled 
separately -->
+                    <xsl:when test="@tag=700 or @tag=710 or @tag=711">
+                        <xsl:variable name="str">
+                            <xsl:call-template name="subfieldSelect">
+                                <xsl:with-param 
name="codes">abcdfghiklmnoprstux</xsl:with-param>
+                            </xsl:call-template>
+                        </xsl:variable>
+                        <xsl:call-template name="chopPunctuation">
+                            <xsl:with-param name="chopString">
+                                <xsl:value-of select="$str"/>
+                            </xsl:with-param>
+                            <xsl:with-param name="punctuation">
+                                <xsl:text>:,;/. </xsl:text>
+                            </xsl:with-param>
+                        </xsl:call-template>
+                    </xsl:when>
                 </xsl:choose>
                 </span></span></span>
-                <!-- add relator code too between brackets-->
+                <!-- #13382 If both $e and $4 are present only display $e -->
                 <xsl:if test="marc:subfield[@code='4' or @code='e']">
-                    <span class="relatorcode">
-                    <xsl:text> [</xsl:text>
-                    <xsl:choose>
-                        <xsl:when test="marc:subfield[@code=4]"><xsl:value-of 
select="marc:subfield[@code=4]"/></xsl:when>
-                        <xsl:otherwise><xsl:value-of 
select="marc:subfield[@code='e']"/></xsl:otherwise>
-                    </xsl:choose>
-                    <xsl:text>]</xsl:text>
-                    </span>
+                    <xsl:if test="not(@tag=111 or @tag=711)">
+                        <span class="relatorcode">
+                            <xsl:text> [</xsl:text>
+                            <xsl:choose>
+                                <xsl:when test="marc:subfield[@code='e']">
+                                    <xsl:call-template name="chopPunctuation">
+                                        <xsl:with-param name="chopString">
+                                            <xsl:call-template 
name="subfieldSelect">
+                                                <xsl:with-param 
name="codes">e</xsl:with-param>
+                                            </xsl:call-template>
+                                        </xsl:with-param>
+                                        <xsl:with-param name="punctuation">
+                                            <xsl:text>:,;/. </xsl:text>
+                                        </xsl:with-param>
+                                    </xsl:call-template>
+                                </xsl:when>
+                                <xsl:otherwise>
+                                    <xsl:call-template name="chopPunctuation">
+                                        <xsl:with-param name="chopString">
+                                            <xsl:call-template 
name="subfieldSelect">
+                                                <xsl:with-param 
name="codes">4</xsl:with-param>
+                                            </xsl:call-template>
+                                        </xsl:with-param>
+                                        <xsl:with-param name="punctuation">
+                                            <xsl:text>:,;/. </xsl:text>
+                                        </xsl:with-param>
+                                    </xsl:call-template>
+                                </xsl:otherwise>
+                            </xsl:choose>
+                            <xsl:text>]</xsl:text>
+                        </span> 
+                    </xsl:if>
                 </xsl:if>
             </a>
             <xsl:if test="marc:subfield[@code=9]">
@@ -1095,8 +1148,13 @@
                     </xsl:element>
                 </a>
             </xsl:if>
+            <!--#13382 Changed separator to | -->
+            <xsl:choose>
+                <xsl:when 
test="position()=last()"><xsl:text>.</xsl:text></xsl:when><xsl:otherwise><xsl:text>
 | </xsl:text></xsl:otherwise>
+            </xsl:choose>
         </xsl:for-each>
-        <xsl:text>.</xsl:text>
+        </h5>
+        </xsl:if>
     </xsl:template>
 
     <xsl:template name="nameABCQ">
-- 
1.7.2.3

_______________________________________________
Koha-patches mailing list
Koha-patches@lists.koha-community.org
http://lists.koha-community.org/cgi-bin/mailman/listinfo/koha-patches
website : http://www.koha-community.org/
git : http://git.koha-community.org/
bugs : http://bugs.koha-community.org/

Reply via email to