1 package C4
::Utils
::DataTables
::VirtualShelves
;
5 use C4
::Utils
::DataTables
;
6 use Koha
::Virtualshelves
;
10 my $shelfname = $params->{shelfname
};
11 my $count = $params->{count
};
12 my $owner = $params->{owner
};
13 my $sortby = $params->{sortby
};
14 my $type = $params->{type
};
15 my $dt_params = $params->{dt_params
};
18 $type = 2 if not $type or $type != 1;
20 # If not logged in user, be carreful and set the borrowernumber to 0
21 # to prevent private lists lack
22 my $loggedinuser = C4
::Context
->userenv->{'number'} || 0;
24 my ($iTotalRecords, $iTotalDisplayRecords);
26 my $dbh = C4
::Context
->dbh;
28 # FIXME refactore the following queries
29 # We should call Koha::Virtualshelves
31 SELECT vs
.shelfnumber
, vs
.shelfname
, vs
.owner
, vs
.category AS type
,
32 vs
.created_on
, vs
.lastmodified as modification_time
,
33 bo
.surname
, bo
.firstname
, vs
.sortfield as sortby
,
34 count
(vc
.biblionumber
) as count
38 FROM virtualshelves vs
39 LEFT JOIN borrowers bo ON vs
.owner
=bo
.borrowernumber
42 my $from = $from_total . q
|
43 LEFT JOIN virtualshelfcontents vc USING
( shelfnumber
)
50 LEFT JOIN virtualshelfshares sh ON sh
.shelfnumber
= vs
.shelfnumber
51 AND sh
.borrowernumber
= ?
54 $from_total .= $join_vs;
55 push @args, $loggedinuser;
61 if ( defined $shelfname and $shelfname ne '' ) {
62 push @where_strs, 'shelfname LIKE ?';
63 push @args, "%$shelfname%";
65 if ( defined $owner and $owner ne '' ) {
66 push @where_strs, '( bo.firstname LIKE ? OR bo.surname LIKE ? )';
67 push @args, "%$owner%", "%$owner%";
69 if ( defined $sortby and $sortby ne '' ) {
70 push @where_strs, 'sortfield = ?';
74 push @where_strs, 'category = ?';
78 push @where_strs, '(vs.owner = ? OR sh.borrowernumber = ?)';
79 push @args, $loggedinuser, $loggedinuser;
83 $where = " WHERE " . join (" AND ", @where_strs) if @where_strs;
84 my $orderby = dt_build_orderby
($dt_params);
85 $orderby =~ s
|shelfnumber
|vs
.shelfnumber
| if $orderby;
88 # If iDisplayLength == -1, we want to display all shelves
89 if ( $dt_params->{iDisplayLength
} > -1 ) {
90 # In order to avoid sql injection
91 $dt_params->{iDisplayStart
} =~ s/\D//g;
92 $dt_params->{iDisplayLength
} =~ s/\D//g;
93 $dt_params->{iDisplayStart
} //= 0;
94 $dt_params->{iDisplayLength
} //= 20;
95 $limit = "LIMIT $dt_params->{iDisplayStart},$dt_params->{iDisplayLength}";
98 my $group_by = " GROUP BY vs.shelfnumber, vs.shelfname, vs.owner, vs.category,
99 vs.created_on, vs.lastmodified, bo.surname, bo.firstname, vs.sortfield ";
105 ($where ?
$where : ""),
107 ($orderby ?
$orderby : ""),
108 ($limit ?
$limit : "")
110 my $shelves = $dbh->selectall_arrayref( $query, { Slice
=> {} }, @args );
112 # Get the iTotalDisplayRecords DataTable variable
113 $query = "SELECT COUNT(vs.shelfnumber) " . $from_total . ($where ?
$where : "");
114 ($iTotalDisplayRecords) = $dbh->selectrow_array( $query, undef, @args );
116 # Get the iTotalRecords DataTable variable
117 $query = q
|SELECT COUNT
(vs
.shelfnumber
)| . $from_total . q
| WHERE category
= ?
|;
118 $query .= q
| AND
(vs
.owner
= ? OR sh
.borrowernumber
= ?
)| if $type == 1;
119 @args = $type == 1 ?
( $loggedinuser, $type, $loggedinuser, $loggedinuser ) : ( $type );
120 ( $iTotalRecords ) = $dbh->selectrow_array( $query, undef, @args );
122 for my $shelf ( @
$shelves ) {
123 my $s = Koha
::Virtualshelves
->find( $shelf->{shelfnumber
} );
124 $shelf->{can_manage_shelf
} = $s->can_be_managed( $loggedinuser );
125 $shelf->{can_delete_shelf
} = $s->can_be_deleted( $loggedinuser );
126 $shelf->{is_shared
} = $s->is_shared;
129 iTotalRecords
=> $iTotalRecords,
130 iTotalDisplayRecords
=> $iTotalDisplayRecords,
140 C4::Utils::DataTables::VirtualShelves - module for using DataTables with virtual shelves
144 This module provides routines used by the virtual shelves search
150 my $dt_infos = C4::Utils::DataTables::VirtualShelves->search($params);
152 $params is a hashref with some keys:
172 This file is part of Koha.
174 Copyright 2014 BibLibre
176 Koha is free software; you can redistribute it and/or modify it
177 under the terms of the GNU General Public License as published by
178 the Free Software Foundation; either version 3 of the License, or
179 (at your option) any later version.
181 Koha is distributed in the hope that it will be useful, but
182 WITHOUT ANY WARRANTY; without even the implied warranty of
183 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
184 GNU General Public License for more details.
186 You should have received a copy of the GNU General Public License
187 along with Koha; if not, see <http://www.gnu.org/licenses>.