View | Details | Raw Unified | Return to bug 26302
Collapse All | Expand All

(-)a/0001-Bug-26302-OPAC-XSLT-Results-List-variable-number-of-.patch (+124 lines)
Line 0 Link Here
1
From 569a125952166d289abf7c7c6b82205d30dd7dd2 Mon Sep 17 00:00:00 2001
2
From: Marcel de Rooy <m.de.rooy@rijksmuseum.nl>
3
Date: Wed, 26 Aug 2020 13:49:53 +0000
4
Subject: [PATCH 1/3] Bug 26302: OPAC XSLT Results: List variable number of
5
 itemcallnumbers
6
Content-Type: text/plain; charset=utf-8
7
8
We define a local preference resultsMaxItems and add it to the xml
9
passed to the results XSLT (in C4::XSLT).
10
Instead of showing one item, we add this number of items for the
11
available for loan and reference segments.
12
13
Test plan:
14
Play with the value of local pref resultsMaxItems.
15
Check if it matches with displayed callnumbers.
16
Try home and holdingbranch for results location.
17
18
Signed-off-by: Marcel de Rooy <m.de.rooy@rijksmuseum.nl>
19
---
20
 C4/XSLT.pm                                         |  2 ++
21
 .../bootstrap/en/xslt/MARC21slim2OPACResults.xsl   | 41 +++++++++++++++++-----
22
 2 files changed, 35 insertions(+), 8 deletions(-)
23
24
diff --git a/C4/XSLT.pm b/C4/XSLT.pm
25
index cd183fbe51..c32368d622 100644
26
--- a/C4/XSLT.pm
27
+++ b/C4/XSLT.pm
28
@@ -173,9 +173,11 @@ sub get_xslt_sysprefs {
29
                               TrackClicks opacthemes IdRef OpacSuppression
30
                               OPACResultsLibrary OPACShowOpenURL
31
                               OpenURLResolverURL OpenURLImageLocation
32
+                              resultsMaxItems
33
                               OpenURLText OPACShowMusicalInscripts OPACPlayMusicalInscripts / )
34
     {
35
         my $sp = C4::Context->preference( $syspref );
36
+        $sp ||= 1 if $syspref eq 'resultsMaxItems'; # needs default
37
         next unless defined($sp);
38
         $sysxml .= "<syspref name=\"$syspref\">$sp</syspref>\n";
39
     }
40
diff --git a/koha-tmpl/opac-tmpl/bootstrap/en/xslt/MARC21slim2OPACResults.xsl b/koha-tmpl/opac-tmpl/bootstrap/en/xslt/MARC21slim2OPACResults.xsl
41
index d7f299e226..7a0065fef1 100644
42
--- a/koha-tmpl/opac-tmpl/bootstrap/en/xslt/MARC21slim2OPACResults.xsl
43
+++ b/koha-tmpl/opac-tmpl/bootstrap/en/xslt/MARC21slim2OPACResults.xsl
44
@@ -39,6 +39,7 @@
45
     <xsl:variable name="singleBranchMode" select="1"/>
46
     <xsl:variable name="OPACTrackClicks" select="marc:sysprefs/marc:syspref[@name='TrackClicks']"/>
47
     <xsl:variable name="BiblioDefaultView" select="marc:sysprefs/marc:syspref[@name='BiblioDefaultView']"/>
48
+    <xsl:variable name="resultsMaxItems" select="marc:sysprefs/marc:syspref[@name='resultsMaxItems']"/>
49
         <xsl:variable name="leader" select="marc:leader"/>
50
         <xsl:variable name="leader6" select="substring($leader,7,1)"/>
51
         <xsl:variable name="leader7" select="substring($leader,8,1)"/>
52
@@ -1282,7 +1283,13 @@
53
                                <xsl:if test="items:itemcallnumber != '' and items:itemcallnumber and $OPACItemLocation='callnum'">
54
                                    <span class="CallNumberAndLabel">
55
                                         <span class="LabelCallNumber">Call number: </span>
56
-                                        <span class="CallNumber"><xsl:value-of select="items:itemcallnumber"/><xsl:if test="count(key('item-by-status-and-branch-home', concat(items:status, ' ', items:homebranch)))>1"><xsl:text>, ..</xsl:text></xsl:if></span>
57
+                                        <span class="CallNumber">
58
+                                            <xsl:for-each select="$available_items[position() &lt;= $resultsMaxItems]">
59
+                                                <xsl:value-of select="items:itemcallnumber"/>
60
+                                                <xsl:if test="position()!=last()"><xsl:text>, </xsl:text></xsl:if>
61
+                                            </xsl:for-each>
62
+                                            <xsl:if test="count(key('item-by-status-and-branch-home', concat(items:status, ' ', items:homebranch)))>$resultsMaxItems"><xsl:text>, ..</xsl:text></xsl:if>
63
+                                        </span>
64
                                    </span>
65
                                </xsl:if>
66
                                <xsl:choose>
67
@@ -1302,10 +1309,16 @@
68
                                            <xsl:value-of select="count(key('item-by-status-and-branch-home', concat(items:status, ' ', items:homebranch)))"/>
69
                                        <xsl:text>) </xsl:text>
70
                                        <xsl:if test="items:itemcallnumber != '' and items:itemcallnumber and $OPACItemLocation='callnum'">
71
-                                           <span class="CallNumberAndLabel">
72
+                                            <span class="CallNumberAndLabel">
73
                                                 <span class="LabelCallNumber">Call number: </span>
74
-                                                <span class="CallNumber"><xsl:value-of select="items:itemcallnumber"/><xsl:if test="count(key('item-by-status-and-branch-holding', concat(items:status, ' ', items:holdingbranch)))>1"><xsl:text>, ..</xsl:text></xsl:if></span>
75
-                                           </span>
76
+                                                <span class="CallNumber">
77
+                                                    <xsl:for-each select="$available_items[position() &lt;= $resultsMaxItems]">
78
+                                                        <xsl:value-of select="items:itemcallnumber"/>
79
+                                                        <xsl:if test="position()!=last()"><xsl:text>, </xsl:text></xsl:if>
80
+                                                    </xsl:for-each>
81
+                                                    <xsl:if test="count(key('item-by-status-and-branch-home', concat(items:status, ' ', items:homebranch)))>$resultsMaxItems"><xsl:text>, ..</xsl:text></xsl:if>
82
+                                                </span>
83
+                                            </span>
84
                                        </xsl:if>
85
                                        <xsl:choose>
86
                                            <xsl:when test="position()=last()"><xsl:text>. </xsl:text></xsl:when>
87
@@ -1322,10 +1335,16 @@
88
                                            <xsl:value-of select="count(key('item-by-status-and-branch-holding', concat(items:status, ' ', items:holdingbranch)))"/>
89
                                        <xsl:text>) </xsl:text>
90
                                        <xsl:if test="items:itemcallnumber != '' and items:itemcallnumber and $OPACItemLocation='callnum'">
91
-                                           <span class="CallNumberAndLabel">
92
+                                            <span class="CallNumberAndLabel">
93
                                                 <span class="LabelCallNumber">Call number: </span>
94
-                                                <span class="CallNumber"><xsl:value-of select="items:itemcallnumber"/><xsl:if test="count(key('item-by-status-and-branch-home', concat(items:status, ' ', items:homebranch)))>1"><xsl:text>, ..</xsl:text></xsl:if></span>
95
-                                           </span>
96
+                                                <span class="CallNumber">
97
+                                                    <xsl:for-each select="$available_items[position() &lt;= $resultsMaxItems]">
98
+                                                        <xsl:value-of select="items:itemcallnumber"/>
99
+                                                        <xsl:if test="position()!=last()"><xsl:text>, </xsl:text></xsl:if>
100
+                                                    </xsl:for-each>
101
+                                                    <xsl:if test="count(key('item-by-status-and-branch-holding', concat(items:status, ' ', items:holdingbranch)))>$resultsMaxItems"><xsl:text>, ..</xsl:text></xsl:if>
102
+                                                </span>
103
+                                            </span>
104
                                        </xsl:if>
105
                                        <xsl:choose>
106
                                            <xsl:when test="position()=last()"><xsl:text>. </xsl:text></xsl:when>
107
@@ -1362,7 +1381,13 @@
108
                                 <xsl:if test="items:itemcallnumber != '' and items:itemcallnumber and $OPACItemLocation='callnum'">
109
                                     <span class="CallNumberAndLabel">
110
                                         <span class="LabelCallNumber">Call number: </span>
111
-                                        <span class="CallNumber"><xsl:value-of select="items:itemcallnumber"/><xsl:if test="count(key('item-by-substatus-and-branch', concat(items:substatus, ' ', items:homebranch)))>1"><xsl:text>, ..</xsl:text></xsl:if></span>
112
+                                        <span class="CallNumber">
113
+                                            <xsl:for-each select="$reference_items[position() &lt;= $resultsMaxItems]">
114
+                                                <xsl:value-of select="items:itemcallnumber"/>
115
+                                                <xsl:if test="position()!=last()"><xsl:text>, </xsl:text></xsl:if>
116
+                                            </xsl:for-each>
117
+                                            <xsl:if test="count(key('item-by-substatus-and-branch', concat(items:substatus, ' ', items:homebranch)))>$resultsMaxItems"><xsl:text>, ..</xsl:text></xsl:if>
118
+                                        </span>
119
                                     </span>
120
                                 </xsl:if>
121
                                 <xsl:choose><xsl:when test="position()=last()"><xsl:text>. </xsl:text></xsl:when><xsl:otherwise><xsl:text>, </xsl:text></xsl:otherwise></xsl:choose>
122
-- 
123
2.11.0
124
(-)a/0002-Bug-26302-Add-syspref-resultsMaxItemsUnavailable.patch (+28 lines)
Line 0 Link Here
1
From 5f59d9cc62b4ee4e35bb779c7c1512b4d4d0f5b5 Mon Sep 17 00:00:00 2001
2
From: Marcel de Rooy <m.de.rooy@rijksmuseum.nl>
3
Date: Fri, 2 Apr 2021 09:07:37 +0000
4
Subject: [PATCH 2/3] Bug 26302: Add syspref resultsMaxItemsUnavailable
5
Content-Type: text/plain; charset=utf-8
6
7
This is the number of call numbers displayed for unavailable
8
categories in the results XSLT.
9
---
10
 C4/XSLT.pm | 2 +-
11
 1 file changed, 1 insertion(+), 1 deletion(-)
12
13
diff --git a/C4/XSLT.pm b/C4/XSLT.pm
14
index c32368d622..15cab1425e 100644
15
--- a/C4/XSLT.pm
16
+++ b/C4/XSLT.pm
17
@@ -173,7 +173,7 @@ sub get_xslt_sysprefs {
18
                               TrackClicks opacthemes IdRef OpacSuppression
19
                               OPACResultsLibrary OPACShowOpenURL
20
                               OpenURLResolverURL OpenURLImageLocation
21
-                              resultsMaxItems
22
+                              resultsMaxItems resultsMaxItemsUnavailable
23
                               OpenURLText OPACShowMusicalInscripts OPACPlayMusicalInscripts / )
24
     {
25
         my $sp = C4::Context->preference( $syspref );
26
-- 
27
2.11.0
28
(-)a/0003-Bug-26302-Use-resultsMaxItemsUnavailable-in-styleshe.patch (+65 lines)
Line 0 Link Here
1
From d6c94eeeb1a3b4c8d94d85ee6057963207ba314b Mon Sep 17 00:00:00 2001
2
From: Marcel de Rooy <m.de.rooy@rijksmuseum.nl>
3
Date: Fri, 2 Apr 2021 09:09:25 +0000
4
Subject: [PATCH 3/3] Bug 26302: Use resultsMaxItemsUnavailable in stylesheet
5
Content-Type: text/plain; charset=utf-8
6
7
We start here with Checked out until
8
---
9
 .../bootstrap/en/xslt/MARC21slim2OPACResults.xsl   | 22 ++++++++++++++++++++--
10
 1 file changed, 20 insertions(+), 2 deletions(-)
11
12
diff --git a/koha-tmpl/opac-tmpl/bootstrap/en/xslt/MARC21slim2OPACResults.xsl b/koha-tmpl/opac-tmpl/bootstrap/en/xslt/MARC21slim2OPACResults.xsl
13
index 7a0065fef1..7bbd685d36 100644
14
--- a/koha-tmpl/opac-tmpl/bootstrap/en/xslt/MARC21slim2OPACResults.xsl
15
+++ b/koha-tmpl/opac-tmpl/bootstrap/en/xslt/MARC21slim2OPACResults.xsl
16
@@ -40,6 +40,7 @@
17
     <xsl:variable name="OPACTrackClicks" select="marc:sysprefs/marc:syspref[@name='TrackClicks']"/>
18
     <xsl:variable name="BiblioDefaultView" select="marc:sysprefs/marc:syspref[@name='BiblioDefaultView']"/>
19
     <xsl:variable name="resultsMaxItems" select="marc:sysprefs/marc:syspref[@name='resultsMaxItems']"/>
20
+    <xsl:variable name="resultsMaxItemsUnavailable" select="marc:sysprefs/marc:syspref[@name='resultsMaxItemsUnavailable']"/>
21
         <xsl:variable name="leader" select="marc:leader"/>
22
         <xsl:variable name="leader6" select="substring($leader,7,1)"/>
23
         <xsl:variable name="leader7" select="substring($leader,8,1)"/>
24
@@ -1419,14 +1420,18 @@
25
                             <span class="unavailable">
26
                                 <xsl:text>Checked out (</xsl:text>
27
                                 <xsl:value-of select="count(key('item-by-status', 'Checked out'))"/>
28
-                                <xsl:text>). </xsl:text>
29
+                                <xsl:text>)</xsl:text>
30
+                                <xsl:call-template name="listCallNumbers"><xsl:with-param name="items" select="key('item-by-status', 'Checked out')"/><xsl:with-param name="max" select="$resultsMaxItemsUnavailable"/></xsl:call-template>
31
+                                <xsl:text>. </xsl:text>
32
                             </span>
33
                         </xsl:if>
34
                         <xsl:if test="count(key('item-by-status', 'Withdrawn'))>0">
35
                             <span class="unavailable">
36
                                 <xsl:text>Withdrawn (</xsl:text>
37
                                 <xsl:value-of select="count(key('item-by-status', 'Withdrawn'))"/>
38
-                                <xsl:text>). </xsl:text>
39
+                                <xsl:text>)</xsl:text>
40
+                                <xsl:call-template name="listCallNumbers"><xsl:with-param name="items" select="key('item-by-status', 'Withdrawn')"/><xsl:with-param name="max" select="$resultsMaxItemsUnavailable"/></xsl:call-template>
41
+                                <xsl:text>. </xsl:text>
42
                             </span>
43
                         </xsl:if>
44
                         <xsl:if test="$hidelostitems='0' and count(key('item-by-status', 'Lost'))>0">
45
@@ -1623,4 +1628,17 @@
46
         </xsl:if>
47
     </xsl:template>
48
 
49
+    <xsl:template name="listCallNumbers">
50
+        <xsl:param name="items"/>
51
+        <xsl:param name="max"/>
52
+        <xsl:if test="$max>0">
53
+            <xsl:text> [ </xsl:text>
54
+            <xsl:for-each select="$items[position() &lt;= $max]">
55
+                <xsl:value-of select="items:itemcallnumber"/><xsl:if test="position()!=last()"><xsl:text>, </xsl:text></xsl:if>
56
+            </xsl:for-each>
57
+            <xsl:if test="count($items)>$max"><xsl:text>, ..</xsl:text></xsl:if>
58
+            <xsl:text> ]</xsl:text>
59
+        </xsl:if>
60
+    </xsl:template>
61
+
62
 </xsl:stylesheet>
63
-- 
64
2.11.0
65
(-)a/koha-tmpl/opac-tmpl/bootstrap/en/xslt/MARC21slim2OPACResults.xsl (-49 / +67 lines)
Lines 40-45 Link Here
40
    <xsl:variable name="OPACTrackClicks" select="marc:sysprefs/marc:syspref[@name='TrackClicks']"/>
40
    <xsl:variable name="OPACTrackClicks" select="marc:sysprefs/marc:syspref[@name='TrackClicks']"/>
41
    <xsl:variable name="BiblioDefaultView" select="marc:sysprefs/marc:syspref[@name='BiblioDefaultView']"/>
41
    <xsl:variable name="BiblioDefaultView" select="marc:sysprefs/marc:syspref[@name='BiblioDefaultView']"/>
42
    <xsl:variable name="resultsMaxItems" select="marc:sysprefs/marc:syspref[@name='resultsMaxItems']"/>
42
    <xsl:variable name="resultsMaxItems" select="marc:sysprefs/marc:syspref[@name='resultsMaxItems']"/>
43
    <xsl:variable name="resultsMaxItemsUnavailable" select="marc:sysprefs/marc:syspref[@name='resultsMaxItemsUnavailable']"/>
43
        <xsl:variable name="leader" select="marc:leader"/>
44
        <xsl:variable name="leader" select="marc:leader"/>
44
        <xsl:variable name="leader6" select="substring($leader,7,1)"/>
45
        <xsl:variable name="leader6" select="substring($leader,7,1)"/>
45
        <xsl:variable name="leader7" select="substring($leader,8,1)"/>
46
        <xsl:variable name="leader7" select="substring($leader,8,1)"/>
Lines 1415-1469 Link Here
1415
                        </xsl:for-each>
1416
                        </xsl:for-each>
1416
1417
1417
                        <!-- Followed by other statuses -->
1418
                        <!-- Followed by other statuses -->
1418
                        <xsl:if test="count(key('item-by-status', 'Checked out'))>0">
1419
                        <xsl:call-template name="listCallNumbers">
1419
                            <span class="unavailable">
1420
                            <xsl:with-param name="status_text">Checked out</xsl:with-param>
1420
                                <xsl:text>Checked out (</xsl:text>
1421
                            <xsl:with-param name="items" select="key('item-by-status', 'Checked out')"/>
1421
                                <xsl:value-of select="count(key('item-by-status', 'Checked out'))"/>
1422
                            <xsl:with-param name="max" select="$resultsMaxItemsUnavailable"/>
1422
                                <xsl:text>). </xsl:text>
1423
                        </xsl:call-template>
1423
                            </span>
1424
1424
                        </xsl:if>
1425
                        <xsl:call-template name="listCallNumbers">
1425
                        <xsl:if test="count(key('item-by-status', 'Withdrawn'))>0">
1426
                            <xsl:with-param name="status_text">Withdrawn</xsl:with-param>
1426
                            <span class="unavailable">
1427
                            <xsl:with-param name="items" select="key('item-by-status', 'Withdrawn')"/>
1427
                                <xsl:text>Withdrawn (</xsl:text>
1428
                            <xsl:with-param name="max" select="$resultsMaxItemsUnavailable"/>
1428
                                <xsl:value-of select="count(key('item-by-status', 'Withdrawn'))"/>
1429
                        </xsl:call-template>
1429
                                <xsl:text>). </xsl:text>
1430
1430
                            </span>
1431
                        <xsl:if test="$hidelostitems='0'">
1431
                        </xsl:if>
1432
                            <xsl:call-template name="listCallNumbers">
1432
                        <xsl:if test="$hidelostitems='0' and count(key('item-by-status', 'Lost'))>0">
1433
                                <xsl:with-param name="status_text">Lost</xsl:with-param>
1433
                            <span class="unavailable">
1434
                                <xsl:with-param name="items" select="key('item-by-status', 'Lost')"/>
1434
                                <xsl:text>Lost (</xsl:text>
1435
                                <xsl:with-param name="max" select="$resultsMaxItemsUnavailable"/>
1435
                                <xsl:value-of select="count(key('item-by-status', 'Lost'))"/>
1436
                            </xsl:call-template>
1436
                                <xsl:text>). </xsl:text>
1437
                            </span>
1438
                        </xsl:if>
1439
                        <xsl:if test="count(key('item-by-status', 'Damaged'))>0">
1440
                            <span class="unavailable">
1441
                                <xsl:text>Damaged (</xsl:text>
1442
                                <xsl:value-of select="count(key('item-by-status', 'Damaged'))"/>
1443
                                <xsl:text>). </xsl:text>
1444
                            </span>
1445
                        </xsl:if>
1446
                        <xsl:if test="count(key('item-by-status', 'Pending hold'))>0">
1447
                            <span class="unavailable">
1448
                                <xsl:text>Pending hold (</xsl:text>
1449
                                <xsl:value-of select="count(key('item-by-status', 'Pending hold'))"/>
1450
                                <xsl:text>). </xsl:text>
1451
                            </span>
1452
                        </xsl:if>
1453
                        <xsl:if test="count(key('item-by-status', 'In transit'))>0">
1454
                            <span class="unavailable">
1455
                                <xsl:text>In transit (</xsl:text>
1456
                                <xsl:value-of select="count(key('item-by-status', 'In transit'))"/>
1457
                                <xsl:text>). </xsl:text>
1458
                            </span>
1459
                        </xsl:if>
1460
                        <xsl:if test="count(key('item-by-status', 'Waiting'))>0">
1461
                            <span class="unavailable">
1462
                                <xsl:text>On hold (</xsl:text>
1463
                                <xsl:value-of select="count(key('item-by-status', 'Waiting'))"/>
1464
                                <xsl:text>). </xsl:text>
1465
                            </span>
1466
                        </xsl:if>
1437
                        </xsl:if>
1438
1439
                        <xsl:call-template name="listCallNumbers">
1440
                            <xsl:with-param name="status_text">Damaged</xsl:with-param>
1441
                            <xsl:with-param name="items" select="key('item-by-status', 'Damaged')"/>
1442
                            <xsl:with-param name="max" select="$resultsMaxItemsUnavailable"/>
1443
                        </xsl:call-template>
1444
1445
                        <xsl:call-template name="listCallNumbers">
1446
                            <xsl:with-param name="status_text">Pending hold</xsl:with-param>
1447
                            <xsl:with-param name="items" select="key('item-by-status', 'Pending hold')"/>
1448
                            <xsl:with-param name="max" select="$resultsMaxItemsUnavailable"/>
1449
                        </xsl:call-template>
1450
1451
                        <xsl:call-template name="listCallNumbers">
1452
                            <xsl:with-param name="status_text">In transit</xsl:with-param>
1453
                            <xsl:with-param name="items" select="key('item-by-status', 'In transit')"/>
1454
                            <xsl:with-param name="max" select="$resultsMaxItemsUnavailable"/>
1455
                        </xsl:call-template>
1456
1457
                        <xsl:call-template name="listCallNumbers">
1458
                            <xsl:with-param name="status_text">On hold</xsl:with-param>
1459
                            <xsl:with-param name="items" select="key('item-by-status', 'Waiting')"/>
1460
                            <xsl:with-param name="max" select="$resultsMaxItemsUnavailable"/>
1461
                        </xsl:call-template>
1462
1467
                    </span>
1463
                    </span>
1468
                </xsl:when>
1464
                </xsl:when>
1469
            </xsl:choose>
1465
            </xsl:choose>
Lines 1623-1626 Link Here
1623
        </xsl:if>
1619
        </xsl:if>
1624
    </xsl:template>
1620
    </xsl:template>
1625
1621
1622
    <xsl:template name="listCallNumbers">
1623
        <xsl:param name="items"/>
1624
        <xsl:param name="max"/>
1625
        <xsl:param name="status_text"/>
1626
        <xsl:if test="count($items)>0">
1627
            <span class="unavailable">
1628
                <xsl:value-of select="$status_text"/>
1629
                <xsl:text> (</xsl:text>
1630
                <xsl:value-of select="count($items)"/>
1631
                <xsl:text>)</xsl:text>
1632
                <xsl:if test="$max>0">
1633
                    <xsl:text> [ </xsl:text>
1634
                    <xsl:for-each select="$items[position() &lt;= $max]">
1635
                        <xsl:value-of select="items:itemcallnumber"/><xsl:if test="position()!=last()"><xsl:text>, </xsl:text></xsl:if>
1636
                    </xsl:for-each>
1637
                    <xsl:if test="count($items)>$max"><xsl:text>, ..</xsl:text></xsl:if>
1638
                    <xsl:text> ]</xsl:text>
1639
                </xsl:if>
1640
                <xsl:text>. </xsl:text>
1641
            </span>
1642
        </xsl:if>
1643
    </xsl:template>
1644
1626
</xsl:stylesheet>
1645
</xsl:stylesheet>
1627
- 

Return to bug 26302