[Koha-patches] [PATCH] Bug 13040 - multiple branch selections in exporter

Robin Sheat robin at catalyst.net.nz
Wed Oct 8 08:18:25 CEST 2014


This allows the exporter (Tools -> Export) to have any combination of
branches selected, rather than it being all or only one.

Test Plan:
* Apply the patch
* Go to the exporter, see that instead of a dropdown you now have an
  elegently laid out grid of branches you can select from
* Select some branches, run the export
* Note that only records with items in the selected branches are
  returned.
* Repeat this with the item related options (as that code was refactored
  slightly) and make sure everything is sane.

Sponsored-By: South Taranaki District Libraries
---
 .../intranet-tmpl/prog/en/css/staff-global.css     | 12 +++++++++
 .../prog/en/includes/branch-selector.inc           | 21 +++++++++++++++
 .../intranet-tmpl/prog/en/modules/tools/export.tt  | 13 +++------
 tools/export.pl                                    | 31 +++++++++++-----------
 4 files changed, 51 insertions(+), 26 deletions(-)
 create mode 100644 koha-tmpl/intranet-tmpl/prog/en/includes/branch-selector.inc

diff --git a/koha-tmpl/intranet-tmpl/prog/en/css/staff-global.css b/koha-tmpl/intranet-tmpl/prog/en/css/staff-global.css
index 382701b..675908f 100644
--- a/koha-tmpl/intranet-tmpl/prog/en/css/staff-global.css
+++ b/koha-tmpl/intranet-tmpl/prog/en/css/staff-global.css
@@ -2713,3 +2713,15 @@ span.browse-button {
 #i18nMenu .dropdown-menu a:focus {
     color : #FFF;
 }
+
+.branchgriditem {
+    display: table-cell;
+    float: left;
+}
+.branchgridrow {
+    display: table-row;
+}
+.branchselector {
+    display: table;
+}
+
diff --git a/koha-tmpl/intranet-tmpl/prog/en/includes/branch-selector.inc b/koha-tmpl/intranet-tmpl/prog/en/includes/branch-selector.inc
new file mode 100644
index 0000000..a5ce611
--- /dev/null
+++ b/koha-tmpl/intranet-tmpl/prog/en/includes/branch-selector.inc
@@ -0,0 +1,21 @@
+[%# First check to see if we have anything selected, otherwise we select all %]
+[% selectall = 1 %]
+[% FOREACH branch IN branches;
+    IF branch.selected;
+        selectall = 0;
+    END;
+END %]
+<div class="branchselector">
+    <div class="branchgridrow">
+    [% FOREACH branch IN branches %]
+        <div class="branchgriditem">
+            <input id="branch_[% branch.value %]" type="checkbox" name="branch" value="[% branch.value %]"[% IF branch.selected || (selectall == 1) %] checked="checked" [% END %]/>
+            <label for="branch_[% branch.value %]">[% branch.branchname %]</label>
+        </div>
+        [% IF loop.count() % 4 == 0 && !loop.last() %]
+            </div>
+            <div class="branchgridrow">
+        [% END %]
+    [% END %]
+    </div>
+</div>
diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/tools/export.tt b/koha-tmpl/intranet-tmpl/prog/en/modules/tools/export.tt
index 0ac62d1..bacc296 100644
--- a/koha-tmpl/intranet-tmpl/prog/en/modules/tools/export.tt
+++ b/koha-tmpl/intranet-tmpl/prog/en/modules/tools/export.tt
@@ -65,16 +65,9 @@ $(document).ready(function() {
         </li>
         
         <li>
-            <label for="branch">Library: </label>
-            <select id="branch" name="branch">
-            <option value="">-- All --</option>
-                [% FOREACH branchloo IN branchloop %]
-                    [% IF ( branchloo.selected ) %]<option value="[% branchloo.value %]" selected="selected">[% branchloo.branchname %]</option>
-				[% ELSE %]
-				<option value="[% branchloo.value %]">[% branchloo.branchname %]</option>
-				[% END %]
-                    [% END %]
-                </select>
+            <label>Library: </label>
+            [% INCLUDE 'branch-selector.inc'
+                branches = branchloop %]
         </li>
         <li>
             <label for="startcn">From item call number: </label>
diff --git a/tools/export.pl b/tools/export.pl
index 8a5c2a5..c3d1d60 100755
--- a/tools/export.pl
+++ b/tools/export.pl
@@ -131,13 +131,17 @@ my $limit_ind_branch =
       && !C4::Context->IsSuperLibrarian()
       && C4::Context->userenv->{branch} ) ? 1 : 0;
 
-my $branch = $query->param("branch") || '';
+my @branch = $query->param("branch");
 if (   C4::Context->preference("IndependentBranches")
     && C4::Context->userenv
     && !C4::Context->IsSuperLibrarian() )
 {
-    $branch = C4::Context->userenv->{'branch'};
+    @branch = ( C4::Context->userenv->{'branch'} );
 }
+# if stripping nonlocal items, use loggedinuser's branch if they didn't select one
+ at branch = ( C4::Context->userenv->{'branch'} )
+  unless @branch;
+my %branchmap = map { $_ => 1 } @branch; # for quick lookups
 
 my $backupdir = C4::Context->config('backupdir');
 
@@ -245,7 +249,7 @@ if ( $op eq "export" ) {
                         itemstable           => $itemstable,
                         StartingBiblionumber => $StartingBiblionumber,
                         EndingBiblionumber   => $EndingBiblionumber,
-                        branch               => $branch,
+                        branch               => \@branch,
                         start_callnumber     => $start_callnumber,
                         end_callnumber       => $end_callnumber,
                         start_accession      => $start_accession,
@@ -322,7 +326,6 @@ if ( $op eq "export" ) {
             # Someone is trying to mess us up
             exit;
         }
-
         unless (@biblionumbers) {
             my $sth = $dbh->prepare($sql_query);
             $sth->execute(@sql_params);
@@ -363,14 +366,10 @@ if ( $op eq "export" ) {
                         my ( $homebranchfield, $homebranchsubfield ) =
                           GetMarcFromKohaField( 'items.homebranch', '' );
                         for my $itemfield ( $record->field($homebranchfield) ) {
-
-# if stripping nonlocal items, use loggedinuser's branch if they didn't select one
-                            $branch = C4::Context->userenv->{'branch'}
-                              unless $branch;
                             $record->delete_field($itemfield)
                               if ( $dont_export_items
-                                || $itemfield->subfield($homebranchsubfield) ne
-                                $branch );
+                                || !$branchmap{ $itemfield->subfield(
+                                        $homebranchsubfield) } );
                         }
                     }
                 }
@@ -470,7 +469,7 @@ else {
         push @branchloop,
           {
             value      => $thisbranch,
-            selected   => $thisbranch eq $branch,
+            selected   => $branchmap{$thisbranch},
             branchname => $branches->{$thisbranch}->{'branchname'},
           };
     }
@@ -545,14 +544,14 @@ sub construct_query {
             my $itemstable           = $params->{itemstable};
             my $StartingBiblionumber = $params->{StartingBiblionumber};
             my $EndingBiblionumber   = $params->{EndingBiblionumber};
-            my $branch               = $params->{branch};
+            my @branch               = @{ $params->{branch} };
             my $start_callnumber     = $params->{start_callnumber};
             my $end_callnumber       = $params->{end_callnumber};
             my $start_accession      = $params->{start_accession};
             my $end_accession        = $params->{end_accession};
             my $itemtype             = $params->{itemtype};
             my $items_filter =
-                 $branch
+                 @branch
               || $start_callnumber
               || $end_callnumber
               || $start_accession
@@ -574,9 +573,9 @@ sub construct_query {
                 push @sql_params, $EndingBiblionumber;
             }
 
-            if ($branch) {
-                $sql_query .= " AND homebranch = ? ";
-                push @sql_params, $branch;
+            if (@branch) {
+                $sql_query .= " AND homebranch IN (".join(',',map({'?'} @branch)).")";
+                push @sql_params, @branch;
             }
 
             if ($start_callnumber) {
-- 
1.9.1



More information about the Koha-patches mailing list