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

(-)a/C4/VirtualShelves.pm (-69 / +1 lines)
Lines 40-46 BEGIN { Link Here
40
    require Exporter;
40
    require Exporter;
41
    @ISA    = qw(Exporter);
41
    @ISA    = qw(Exporter);
42
    @EXPORT = qw(
42
    @EXPORT = qw(
43
            &GetShelves &GetShelfContents
43
            &GetShelfContents
44
            &ShelfPossibleAction
44
            &ShelfPossibleAction
45
    );
45
    );
46
        @EXPORT_OK = qw(
46
        @EXPORT_OK = qw(
Lines 65-138 bibs to and from virtual shelves. Link Here
65
65
66
=head1 FUNCTIONS
66
=head1 FUNCTIONS
67
67
68
=head2 GetShelves
69
70
  $shelflist = &GetShelves($category, $row_count, $offset, $owner);
71
  ($shelfnumber, $shelfhash) = each %{$shelflist};
72
73
Returns the number of shelves specified by C<$row_count> and C<$offset> as well as the total
74
number of shelves that meet the C<$owner> and C<$category> criteria.  C<$category>,
75
C<$row_count>, and C<$offset> are required. C<$owner> must be supplied when C<$category> == 1.
76
When C<$category> is 2, supply undef as argument for C<$owner>.
77
78
This function is used by shelfpage in VirtualShelves/Page.pm when listing all shelves for lists management in opac or staff client. Order is by shelfname.
79
80
C<$shelflist>is a reference-to-hash. The keys are the virtualshelves numbers (C<$shelfnumber>, above),
81
and the values (C<$shelfhash>, above) are themselves references-to-hash, with the following keys:
82
83
=over
84
85
=item C<$shelfhash-E<gt>{shelfname}>
86
87
A string. The name of the shelf.
88
89
=back
90
91
=cut
92
93
sub GetShelves {
94
    my ($category, $row_count, $offset, $owner) = @_;
95
    $offset ||= 0;
96
    my @params = ( $offset, $row_count );
97
    my $dbh = C4::Context->dbh;
98
    my $query = qq{
99
        SELECT vs.shelfnumber, vs.shelfname,vs.owner,
100
        bo.surname,bo.firstname,vs.category,vs.sortfield,
101
        count(vc.biblionumber) as count
102
        FROM virtualshelves vs
103
        LEFT JOIN borrowers bo ON vs.owner=bo.borrowernumber
104
        LEFT JOIN virtualshelfcontents vc USING (shelfnumber) };
105
    if($category==1) {
106
        $query.= qq{
107
            LEFT JOIN virtualshelfshares sh ON sh.shelfnumber=vs.shelfnumber
108
            AND sh.borrowernumber=?
109
        WHERE category=1 AND (vs.owner=? OR sh.borrowernumber=?) };
110
        unshift @params, ($owner) x 3;
111
    }
112
    else {
113
        $query.= 'WHERE category=2 ';
114
    }
115
    $query.= qq{
116
        GROUP BY vs.shelfnumber
117
        ORDER BY vs.shelfname
118
        LIMIT ?, ?};
119
120
    my $sth2 = $dbh->prepare($query);
121
    $sth2->execute(@params);
122
    my %shelflist;
123
    while( my ($shelfnumber, $shelfname, $owner, $surname, $firstname, $category, $sortfield, $count)= $sth2->fetchrow) {
124
        $shelflist{$shelfnumber}->{'shelfname'} = $shelfname;
125
        $shelflist{$shelfnumber}->{'count'}     = $count;
126
        $shelflist{$shelfnumber}->{'single'}    = $count==1;
127
        $shelflist{$shelfnumber}->{'sortfield'} = $sortfield;
128
        $shelflist{$shelfnumber}->{'category'}  = $category;
129
        $shelflist{$shelfnumber}->{'owner'}     = $owner;
130
        $shelflist{$shelfnumber}->{'surname'}   = $surname;
131
        $shelflist{$shelfnumber}->{'firstname'} = $firstname;
132
    }
133
    return \%shelflist;
134
}
135
136
=head2 GetSomeShelfNames
68
=head2 GetSomeShelfNames
137
69
138
Returns shelf names and numbers for Add to combo of search results and Lists button of OPAC header.
70
Returns shelf names and numbers for Add to combo of search results and Lists button of OPAC header.
(-)a/C4/VirtualShelves/Page.pm (-2 / +15 lines)
Lines 89-95 sub shelfpage { Link Here
89
89
90
    # getting the Shelves list
90
    # getting the Shelves list
91
    my $category = ( ( $displaymode eq 'privateshelves' ) ? 1 : 2 );
91
    my $category = ( ( $displaymode eq 'privateshelves' ) ? 1 : 2 );
92
    my $shelflist = GetShelves( $category, $shelveslimit, $shelvesoffset, $loggedinuser );
92
93
    my $shelflist;
94
    if ( $category == 2 ) {
95
        $shelflist = Koha::Virtualshelves->get_public_shelves({ limit => $shelveslimit, offset => $shelvesoffset });
96
    } else {
97
        $shelflist = Koha::Virtualshelves->get_private_shelves({ limit => $shelveslimit, offset => $shelvesoffset, borrowernumber => $loggedinuser });
98
    }
93
    my $totshelves = C4::VirtualShelves::GetShelfCount( $loggedinuser, $category );
99
    my $totshelves = C4::VirtualShelves::GetShelfCount( $loggedinuser, $category );
94
100
95
    my $op = $query->param('op');
101
    my $op = $query->param('op');
Lines 438-444 sub shelfpage { Link Here
438
    my $numberCanManage = 0;
444
    my $numberCanManage = 0;
439
445
440
    # rebuild shelflist in case a shelf has been added
446
    # rebuild shelflist in case a shelf has been added
441
    $shelflist = GetShelves( $category, $shelveslimit, $shelvesoffset, $loggedinuser ) unless $delflag;
447
    unless ( $delflag ) {
448
        if ( $category == 2 ) {
449
            $shelflist = Koha::Virtualshelves->get_public_shelves({ limit => $shelveslimit, offset => $shelvesoffset });
450
        } else {
451
            $shelflist = Koha::Virtualshelves->get_private_shelves({ limit => $shelveslimit, offset => $shelvesoffset, borrowernumber => $loggedinuser });
452
        }
453
    }
454
442
    $totshelves = C4::VirtualShelves::GetShelfCount( $loggedinuser, $category ) unless $delflag;
455
    $totshelves = C4::VirtualShelves::GetShelfCount( $loggedinuser, $category ) unless $delflag;
443
    foreach my $element ( sort { lc( $shelflist->{$a}->{'shelfname'} ) cmp lc( $shelflist->{$b}->{'shelfname'} ) } keys %$shelflist ) {
456
    foreach my $element ( sort { lc( $shelflist->{$a}->{'shelfname'} ) cmp lc( $shelflist->{$b}->{'shelfname'} ) } keys %$shelflist ) {
444
        my %line;
457
        my %line;
(-)a/Koha/Virtualshelves.pm (+43 lines)
Lines 39-44 Koha::Virtualshelf - Koha Virtualshelf Object class Link Here
39
39
40
=cut
40
=cut
41
41
42
sub get_private_shelves {
43
    my ( $self, $params ) = @_;
44
    my $limit = $params->{limit};
45
    my $offset = $params->{offset} || 0;
46
    my $borrowernumber = $params->{borrowernumber};
47
48
    $self->search(
49
        {
50
            'virtualshelfshares.borrowernumber' => $borrowernumber,
51
            category => 1,
52
            -or => {
53
                'virtualshelfshares.owner' => $borrowernumber,
54
                'virtualshelves.borrowernumber' => $borrowernumber,
55
            }
56
        },
57
        {
58
            join => ['borrowers', 'virtualshelfcontents', 'virtualshelfshares' ],
59
            group_by => 'shelfnumber',
60
            order_by => 'shelfname',
61
            limit => "$limit,$offset",
62
        }
63
    );
64
}
65
66
67
sub get_public_shelves {
68
    my ( $self, $params ) = @_;
69
    my $limit = $params->{limit};
70
    my $offset = $params->{offset} || 0;
71
72
    $self->search(
73
        {
74
            category => 1,
75
        },
76
        {
77
            join => [ 'virtualshelfcontents' ],
78
            group_by => 'shelfnumber',
79
            order_by => 'shelfname',
80
            limit => "$limit,$offset",
81
        }
82
    );
83
}
84
42
sub type {
85
sub type {
43
    return 'Virtualshelve';
86
    return 'Virtualshelve';
44
}
87
}
(-)a/koha-tmpl/opac-tmpl/bootstrap/en/modules/opac-shelves.tt (-4 / +3 lines)
Lines 115-121 Link Here
115
                            [% IF ( paramsloo.need_confirm ) %]
115
                            [% IF ( paramsloo.need_confirm ) %]
116
                              <div class="alert">
116
                              <div class="alert">
117
                                The list <i>[% paramsloo.need_confirm %]</i> is not empty.
117
                                The list <i>[% paramsloo.need_confirm %]</i> is not empty.
118
                                <br />It has <b>[% paramsloo.count %]</b> [% IF ( paramsloo.single ) %]entry[% ELSE %]entries[% END %].
118
                                <br />It has <b>[% paramsloo.count %]</b> [% IF paramsloo.count == 1 %]entry[% ELSE %]entries[% END %].
119
                                <br />Use the "Confirm" button below to confirm deletion.
119
                                <br />Use the "Confirm" button below to confirm deletion.
120
                             </div>
120
                             </div>
121
                            [% END %]
121
                            [% END %]
Lines 642-648 Link Here
642
                                                            [% FOREACH shelveslooppri IN shelveslooppriv %]
642
                                                            [% FOREACH shelveslooppri IN shelveslooppriv %]
643
                                                                <tr>
643
                                                                <tr>
644
                                                                    <td><a href="/cgi-bin/koha/opac-shelves.pl?display=privateshelves&amp;viewshelf=[% shelveslooppri.shelf %]&amp;sortfield=[% shelveslooppri.sortfield %]">[% shelveslooppri.shelfname |html %]</a></td>
644
                                                                    <td><a href="/cgi-bin/koha/opac-shelves.pl?display=privateshelves&amp;viewshelf=[% shelveslooppri.shelf %]&amp;sortfield=[% shelveslooppri.sortfield %]">[% shelveslooppri.shelfname |html %]</a></td>
645
                                                                    <td>[% IF ( shelveslooppri.count ) %][% shelveslooppri.count %] [% IF ( shelveslooppri.single ) %]item[% ELSE %]items[% END %][% ELSE %]Empty[% END %]</td>
645
                                                                    <td>[% IF ( shelveslooppri.count ) %][% shelveslooppri.count %] [% IF shelveslooppri.count == 1 %]item[% ELSE %]items[% END %][% ELSE %]Empty[% END %]</td>
646
                                                                    <td>
646
                                                                    <td>
647
                                                                        [% IF ( shelveslooppri.viewcategory1 ) %][% IF !shelveslooppri.shares %]Private[% ELSE %]Shared[% END %][% END %]
647
                                                                        [% IF ( shelveslooppri.viewcategory1 ) %][% IF !shelveslooppri.shares %]Private[% ELSE %]Shared[% END %][% END %]
648
                                                                    </td>
648
                                                                    </td>
Lines 716-722 Link Here
716
                                                [% FOREACH shelvesloo IN shelvesloop %]
716
                                                [% FOREACH shelvesloo IN shelvesloop %]
717
                                                    <tr>
717
                                                    <tr>
718
                                                        <td><a class="title" href="/cgi-bin/koha/opac-shelves.pl?viewshelf=[% shelvesloo.shelf %]&amp;sortfield=[% shelvesloo.sortfield %]">[% shelvesloo.shelfname |html %]</a></td>
718
                                                        <td><a class="title" href="/cgi-bin/koha/opac-shelves.pl?viewshelf=[% shelvesloo.shelf %]&amp;sortfield=[% shelvesloo.sortfield %]">[% shelvesloo.shelfname |html %]</a></td>
719
                                                        <td>[% shelvesloo.count %] [% IF ( shelvesloo.single ) %]item[% ELSE %]item(s)[% END %]</td>
719
                                                        <td>[% shelvesloo.count %] [% IF shelvesloo.count == 1 %]item[% ELSE %]item(s)[% END %]</td>
720
                                                        <td>
720
                                                        <td>
721
                                                            [% IF ( shelvesloo.viewcategory2 ) %]Public[% END %]
721
                                                            [% IF ( shelvesloo.viewcategory2 ) %]Public[% END %]
722
                                                        </td>
722
                                                        </td>
723
- 

Return to bug 14544