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

(-)a/C4/Utils/DataTables/VirtualShelves.pm (-2 / +1 lines)
Lines 28-35 sub search { Link Here
28
    my $dbh = C4::Context->dbh;
28
    my $dbh = C4::Context->dbh;
29
29
30
    # FIXME refactore the following queries
30
    # FIXME refactore the following queries
31
    # We should call C4::VirtualShelves::GetShelves and C4::VirtualShelves::GetAllShelves
31
    # We should call Koha::Virtualshelves
32
    # But the code is too dirty to refactor...
33
    my $select = q|
32
    my $select = q|
34
        SELECT vs.shelfnumber, vs.shelfname, vs.owner, vs.category AS type,
33
        SELECT vs.shelfnumber, vs.shelfname, vs.owner, vs.category AS type,
35
        vs.created_on, vs.lastmodified as modification_time,
34
        vs.created_on, vs.lastmodified as modification_time,
(-)a/C4/VirtualShelves.pm (-37 / +1 lines)
Lines 47-53 BEGIN { Link Here
47
            &GetBibliosShelves
47
            &GetBibliosShelves
48
    );
48
    );
49
        @EXPORT_OK = qw(
49
        @EXPORT_OK = qw(
50
            &GetAllShelves &ShelvesMax
50
            &ShelvesMax
51
        );
51
        );
52
}
52
}
53
53
Lines 136-177 sub GetShelves { Link Here
136
    return \%shelflist;
136
    return \%shelflist;
137
}
137
}
138
138
139
=head2 GetAllShelves
140
141
    $shelflist = GetAllShelves($category, $owner)
142
143
This function returns a reference to an array of hashrefs containing all shelves
144
sorted by the shelf name.
145
146
This function is intended to return a dataset reflecting all the shelves for
147
the submitted parameters.
148
149
=cut
150
151
sub GetAllShelves {
152
    my ($category,$owner,$adding_allowed) = @_;
153
    my @params;
154
    my $dbh = C4::Context->dbh;
155
    my $query = 'SELECT vs.* FROM virtualshelves vs ';
156
    if($category==1) {
157
        $query.= qq{
158
            LEFT JOIN virtualshelfshares sh ON sh.shelfnumber=vs.shelfnumber
159
            AND sh.borrowernumber=?
160
        WHERE category=1 AND (vs.owner=? OR sh.borrowernumber=?) };
161
        @params = ($owner, $owner, $owner);
162
    }
163
    else {
164
    $query.='WHERE category=2 ';
165
        @params = ();
166
    }
167
    $query.='AND (allow_add=1 OR owner=?) ' if $adding_allowed;
168
    push @params, $owner if $adding_allowed;
169
    $query.= 'ORDER BY shelfname ASC';
170
    my $sth = $dbh->prepare( $query );
171
    $sth->execute(@params);
172
    return $sth->fetchall_arrayref({});
173
}
174
175
=head2 GetSomeShelfNames
139
=head2 GetSomeShelfNames
176
140
177
Returns shelf names and numbers for Add to combo of search results and Lists button of OPAC header.
141
Returns shelf names and numbers for Add to combo of search results and Lists button of OPAC header.
(-)a/koha-tmpl/intranet-tmpl/prog/en/modules/virtualshelves/addbybiblionumber.tt (-22 / +30 lines)
Lines 38-65 Link Here
38
38
39
[% UNLESS ( newshelf ) %]
39
[% UNLESS ( newshelf ) %]
40
     <fieldset class="rows">
40
     <fieldset class="rows">
41
	<legend>Select an existing list</legend>
41
    <legend>Select an existing list</legend>
42
	<ol>
42
    <ol>
43
	    <li>
43
        <li>
44
		<label>Choose list</label>
44
            <label>Choose list</label>
45
		<select name="shelfnumber" id="shelfnumber">
45
            <select name="shelfnumber" id="shelfnumber">
46
		[% IF ( privatevirtualshelves ) %]
46
                [% IF private_shelves.count %]
47
        <optgroup label="Private lists">
47
                    <optgroup label="Private lists">
48
		[% FOREACH privatevirtualshelve IN privatevirtualshelves %]
48
                        [% FOREACH private_shelf IN private_shelves %]
49
		<option value="[% privatevirtualshelve.shelfnumber %]">[% privatevirtualshelve.shelfname | html%]</option>
49
                            <option value="[% private_shelf.shelfnumber %]">[% private_shelf.shelfname | html%]</option>
50
		[% END %]
50
                        [% END %]
51
		</optgroup>
51
                    </optgroup>
52
		[% END %]
52
                [% END %]
53
		[% IF ( publicvirtualshelves ) %]
53
                [% IF private_shelves_shared_with_me.count %]
54
        <optgroup label="Public lists">
54
                    <optgroup label="Private lists shared with me">
55
		[% FOREACH publicvirtualshelve IN publicvirtualshelves %]
55
                        [% FOREACH private_shelf IN private_shelves_shared_with_me %]
56
		<option value="[% publicvirtualshelve.shelfnumber %]">[% publicvirtualshelve.shelfname | html%]</option>
56
                            <option value="[% private_shelf.shelfnumber %]">[% private_shelf.shelfname | html%]</option>
57
		[% END %]
57
                        [% END %]
58
		</optgroup>
58
                    </optgroup>
59
		[% END %]
59
                [% END %]
60
		</select>
60
                [% IF public_shelves.count %]
61
	    </li>
61
                    <optgroup label="Public lists">
62
	</ol>
62
                        [% FOREACH public_shelf IN public_shelves %]
63
                            <option value="[% public_shelf.shelfnumber %]">[% public_shelf.shelfname | html%]</option>
64
                        [% END %]
65
                    </optgroup>
66
                [% END %]
67
            </select>
68
        </li>
69
    </ol>
63
	[% FOREACH biblio IN biblios %]<input type="hidden" name="biblionumber" value="[% biblio.biblionumber %]" />[% END %]
70
	[% FOREACH biblio IN biblios %]<input type="hidden" name="biblionumber" value="[% biblio.biblionumber %]" />[% END %]
64
	[% UNLESS ( biblionumbers ) %]
71
	[% UNLESS ( biblionumbers ) %]
65
	  <input type="hidden" name="biblionumber" value="[% biblionumber %]" />
72
	  <input type="hidden" name="biblionumber" value="[% biblionumber %]" />
Lines 100-105 Link Here
100
107
101
<!-- SAVE -->
108
<!-- SAVE -->
102
		    <fieldset class="action">
109
		    <fieldset class="action">
110
            <input type="hidden" name="sortfield" value="title" />
103
			<input type="submit" value="Save" class="submit" /> <a class="close cancel" href="#">Cancel</a>
111
			<input type="submit" value="Save" class="submit" /> <a class="close cancel" href="#">Cancel</a>
104
		    </fieldset>
112
		    </fieldset>
105
		</form>
113
		</form>
(-)a/koha-tmpl/opac-tmpl/bootstrap/en/modules/opac-addbybiblionumber.tt (-7 / +13 lines)
Lines 23-41 Link Here
23
                                        </li>
23
                                        </li>
24
                                    [% END %]
24
                                    [% END %]
25
                                </ul>
25
                                </ul>
26
                                [% IF ( existingshelves ) %]
26
                                [% IF private_shelves.count or public_shelves.count or private_shelves_shared_with_me %]
27
                                    <form name="f1" action="/cgi-bin/koha/opac-addbybiblionumber.pl" method="post">
27
                                    <form name="f1" action="/cgi-bin/koha/opac-addbybiblionumber.pl" method="post">
28
                                        <fieldset>
28
                                        <fieldset>
29
                                            <legend>Select a list</legend>
29
                                            <legend>Select a list</legend>
30
                                            <label for="shelfnumber">Add to list:</label> <select name="shelfnumber" id="shelfnumber">
30
                                            <label for="shelfnumber">Add to list:</label> <select name="shelfnumber" id="shelfnumber">
31
                                                [% IF ( privatevirtualshelves ) %]<optgroup label="Private Lists">
31
                                                [% IF private_shelves.count %]<optgroup label="Private lists">
32
                                                    [% FOREACH privatevirtualshelve IN privatevirtualshelves %]
32
                                                    [% FOREACH private_shelf IN private_shelves %]
33
                                                    <option value="[% privatevirtualshelve.shelfnumber %]">[% privatevirtualshelve.shelfname | html%]</option>
33
                                                    <option value="[% private_shelf.shelfnumber %]">[% private_shelf.shelfname | html%]</option>
34
                                                    [% END %]
34
                                                    [% END %]
35
                                                </optgroup>[% END %]
35
                                                </optgroup>[% END %]
36
                                                [% IF ( publicvirtualshelves ) %]<optgroup label="Public Lists">
36
                                                [% IF private_shelves_shared_with_me.count %]<optgroup label="Private lists shared with me">
37
                                                    [% FOREACH publicvirtualshelve IN publicvirtualshelves %]
37
                                                    [% FOREACH private_shelf IN private_shelves_shared_with_me %]
38
                                                    <option value="[% publicvirtualshelve.shelfnumber %]">[% publicvirtualshelve.shelfname |html%]</option>
38
                                                    <option value="[% private_shelf.shelfnumber %]">[% private_shelf.shelfname | html%]</option>
39
                                                    [% END %]
40
                                                </optgroup>[% END %]
41
                                                [% IF public_shelves.count %]<optgroup label="Public lists">
42
                                                    [% FOREACH public_shelf IN public_shelves %]
43
                                                    <option value="[% public_shelf.shelfnumber %]">[% public_shelf.shelfname |html%]</option>
39
                                                    [% END %]
44
                                                    [% END %]
40
                                                </optgroup>[% END %]
45
                                                </optgroup>[% END %]
41
                                            </select>
46
                                            </select>
Lines 85-90 Link Here
85
                                        <input type="hidden" name="biblionumber" value="[% biblio.biblionumber | html%]" />
90
                                        <input type="hidden" name="biblionumber" value="[% biblio.biblionumber | html%]" />
86
                                    [% END %]
91
                                    [% END %]
87
                                    <fieldset class="action">
92
                                    <fieldset class="action">
93
                                        <input type="hidden" name="sortfield" value="title" />
88
                                        <input type="submit" value="Save" class="btn" />
94
                                        <input type="submit" value="Save" class="btn" />
89
                                        <a class="close cancel" href="#">Cancel</a>
95
                                        <a class="close cancel" href="#">Cancel</a>
90
                                    </fieldset>
96
                                    </fieldset>
(-)a/opac/opac-addbybiblionumber.pl (-13 / +34 lines)
Lines 24-30 use warnings; Link Here
24
24
25
use CGI qw ( -utf8 );
25
use CGI qw ( -utf8 );
26
use C4::Biblio;
26
use C4::Biblio;
27
use C4::VirtualShelves qw/:DEFAULT GetAllShelves/;
27
use C4::VirtualShelves qw/:DEFAULT/;
28
use C4::Output;
28
use C4::Output;
29
use C4::Auth;
29
use C4::Auth;
30
30
Lines 132-151 sub HandleSelectedShelf { Link Here
132
132
133
sub HandleSelect {
133
sub HandleSelect {
134
    return unless $authorized= $loggedinuser>0;
134
    return unless $authorized= $loggedinuser>0;
135
    my $privateshelves = GetAllShelves(1,$loggedinuser,1);
135
    my $private_shelves = Koha::Virtualshelves->search(
136
    if(@{$privateshelves}){
136
        {
137
        $template->param (
137
            category => 1,
138
        privatevirtualshelves          => $privateshelves,
138
            owner => $loggedinuser,
139
        existingshelves => 1
139
        },
140
        { order_by => 'shelfname' }
140
    );
141
    );
141
    }
142
    my $shelves_shared_with_me = Koha::Virtualshelves->search(
142
    my $publicshelves = GetAllShelves(2,$loggedinuser,1);
143
        {
143
    if(@{$publicshelves}){
144
            category => 1,
144
        $template->param (
145
            'virtualshelfshares.borrowernumber' => $loggedinuser,
145
        publicvirtualshelves          => $publicshelves,
146
            -or => {
146
        existingshelves => 1
147
                allow_add => 1,
148
                owner => $loggedinuser,
149
            }
150
        },
151
        {
152
            join => 'virtualshelfshares',
153
        }
154
    );
155
    my $public_shelves= Koha::Virtualshelves->search(
156
        {
157
            category => 2,
158
            -or => {
159
                allow_add => 1,
160
                owner => $loggedinuser,
161
            }
162
        },
163
        { order_by => 'shelfname' }
164
    );
165
    $template->param (
166
        private_shelves => $private_shelves,
167
        private_shelves_shared_with_me => $shelves_shared_with_me,
168
        public_shelves  => $public_shelves,
147
    );
169
    );
148
    }
149
}
170
}
150
171
151
sub LoadBib {
172
sub LoadBib {
(-)a/opac/opac-shareshelf.pl (+1 lines)
Lines 35-40 use C4::Output; Link Here
35
use C4::VirtualShelves;
35
use C4::VirtualShelves;
36
36
37
use Koha::Virtualshelves;
37
use Koha::Virtualshelves;
38
use Koha::Virtualshelfshares;
38
39
39
#-------------------------------------------------------------------------------
40
#-------------------------------------------------------------------------------
40
41
(-)a/virtualshelves/addbybiblionumber.pl (-7 / +35 lines)
Lines 64-70 use warnings; Link Here
64
use CGI qw ( -utf8 );
64
use CGI qw ( -utf8 );
65
use C4::Biblio;
65
use C4::Biblio;
66
use C4::Output;
66
use C4::Output;
67
use C4::VirtualShelves qw/:DEFAULT GetAllShelves/;
67
use C4::VirtualShelves qw/:DEFAULT/;
68
use C4::Auth;
68
use C4::Auth;
69
69
70
use Koha::Virtualshelves;
70
use Koha::Virtualshelves;
Lines 182-192 sub HandleSelectedShelf { Link Here
182
}
182
}
183
183
184
sub HandleSelect {
184
sub HandleSelect {
185
    my $privateshelves = GetAllShelves(1,$loggedinuser,1);
185
    my $private_shelves = Koha::Virtualshelves->search(
186
    my $publicshelves = GetAllShelves(2,$loggedinuser,1);
186
        {
187
    $template->param(
187
            category => 1,
188
    privatevirtualshelves => $privateshelves,
188
            owner => $loggedinuser,
189
    publicvirtualshelves  => $publicshelves,
189
        },
190
        { order_by => 'shelfname' }
191
    );
192
    my $shelves_shared_with_me = Koha::Virtualshelves->search(
193
        {
194
            category => 1,
195
            'virtualshelfshares.borrowernumber' => $loggedinuser,
196
            -or => {
197
                allow_add => 1,
198
                owner => $loggedinuser,
199
            }
200
        },
201
        {
202
            join => 'virtualshelfshares',
203
        }
204
    );
205
    my $public_shelves= Koha::Virtualshelves->search(
206
        {
207
            category => 2,
208
            -or => {
209
                allow_add => 1,
210
                owner => $loggedinuser,
211
            }
212
        },
213
        { order_by => 'shelfname' }
214
    );
215
    $template->param (
216
        private_shelves => $private_shelves,
217
        private_shelves_shared_with_me => $shelves_shared_with_me,
218
        public_shelves  => $public_shelves,
190
    );
219
    );
191
}
220
}
192
221
193
- 

Return to bug 14544