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

(-)a/C4/VirtualShelves.pm (-23 / +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 &GetShelf
43
            &GetShelves &GetShelfContents
44
            &AddToShelf &AddShelf
44
            &AddToShelf &AddShelf
45
            &ModShelf
45
            &ModShelf
46
            &ShelfPossibleAction
46
            &ShelfPossibleAction
Lines 213-240 sub GetSomeShelfNames { Link Here
213
    return ( { bartotal => $bar? scalar @$bar: 0, pubtotal => $pub? scalar @$pub: 0}, $pub, $bar);
213
    return ( { bartotal => $bar? scalar @$bar: 0, pubtotal => $pub? scalar @$pub: 0}, $pub, $bar);
214
}
214
}
215
215
216
=head2 GetShelf
217
218
  (shelfnumber,shelfname,owner,category,sortfield,allow_add,allow_delete_own,allow_delete_other) = &GetShelf($shelfnumber);
219
220
Returns the above-mentioned fields for passed virtual shelf number.
221
222
=cut
223
224
sub GetShelf {
225
    my ($shelfnumber) = @_;
226
    my $dbh = C4::Context->dbh;
227
    my $query = qq(
228
        SELECT shelfnumber, shelfname, owner, category, sortfield,
229
            allow_add, allow_delete_own, allow_delete_other
230
        FROM   virtualshelves
231
        WHERE  shelfnumber=?
232
    );
233
    my $sth = $dbh->prepare($query);
234
    $sth->execute($shelfnumber);
235
    return $sth->fetchrow;
236
}
237
238
=head2 GetShelfContents
216
=head2 GetShelfContents
239
217
240
  $biblist = &GetShelfContents($shelfnumber);
218
  $biblist = &GetShelfContents($shelfnumber);
(-)a/C4/VirtualShelves/Page.pm (-20 / +20 lines)
Lines 40-45 use C4::Tags qw(get_tags); Link Here
40
use C4::Csv;
40
use C4::Csv;
41
use C4::XSLT;
41
use C4::XSLT;
42
42
43
use Koha::Virtualshelves;
44
43
use constant VIRTUALSHELVES_COUNT => 20;
45
use constant VIRTUALSHELVES_COUNT => 20;
44
46
45
use vars qw($debug @EXPORT @ISA $VERSION);
47
use vars qw($debug @EXPORT @ISA $VERSION);
Lines 203-225 sub shelfpage { Link Here
203
            }
205
            }
204
        #Editing a shelf
206
        #Editing a shelf
205
        elsif ( $op eq 'modif' ) {
207
        elsif ( $op eq 'modif' ) {
206
                my ( $shelfnumber2, $shelfname, $owner, $category, $sortfield, $allow_add, $allow_delete_own, $allow_delete_other) = GetShelf($shelfnumber);
208
                my $shelf = Koha::Virtualshelves->find( $shelfnumber );
207
                my $member = GetMember( 'borrowernumber' => $owner );
209
                my $member = GetMember( 'borrowernumber' => $shelf->owner );
208
                my $ownername = defined($member) ? $member->{firstname} . " " . $member->{surname} : '';
210
                my $ownername = defined($member) ? $member->{firstname} . " " . $member->{surname} : '';
209
                $edit = 1;
211
                $edit = 1;
210
                $template->param(
212
                $template->param(
211
                    edit                => 1,
213
                    edit                => 1,
212
                    display             => $displaymode,
214
                    display             => $displaymode,
213
                    shelfnumber         => $shelfnumber2,
215
                    shelfnumber         => $shelf->shelfnumber,
214
                    shelfname           => $shelfname,
216
                    shelfname           => $shelf->shelfname,
215
                    owner               => $owner,
217
                    owner               => $shelf->owner,
216
                    ownername           => $ownername,
218
                    ownername           => $ownername,
217
                    "category$category" => 1,
219
                    "category".$shelf->category => 1,
218
                    category            => $category,
220
                    category            => $shelf->category,
219
                    sortfield           => $sortfield,
221
                    sortfield           => $shelf->sortfield,
220
                    allow_add           => $allow_add,
222
                    allow_add           => $shelf->allow_add,
221
                    allow_delete_own    => $allow_delete_own,
223
                    allow_delete_own    => $shelf->allow_delete_own,
222
                    allow_delete_other  => $allow_delete_other,
224
                    allow_delete_other  => $shelf->allow_delete_other,
223
                );
225
                );
224
            }
226
            }
225
            last SWITCH;
227
            last SWITCH;
Lines 227-235 sub shelfpage { Link Here
227
229
228
        #View a shelf
230
        #View a shelf
229
        if ( $shelfnumber = $query->param('viewshelf') ) {
231
        if ( $shelfnumber = $query->param('viewshelf') ) {
230
            # explicitly fetch this shelf
232
            my $shelf = Koha::Virtualshelves->find( $shelfnumber );
231
            my ($shelfnumber2,$shelfname,$owner,$category,$sorton) = GetShelf($shelfnumber);
232
233
            $template->param(
233
            $template->param(
234
                'DisplayMultiPlaceHold' => C4::Context->preference('DisplayMultiPlaceHold'),
234
                'DisplayMultiPlaceHold' => C4::Context->preference('DisplayMultiPlaceHold'),
235
            );
235
            );
Lines 243-249 sub shelfpage { Link Here
243
            if ( ShelfPossibleAction( $loggedinuser, $shelfnumber, 'view' ) ) {
243
            if ( ShelfPossibleAction( $loggedinuser, $shelfnumber, 'view' ) ) {
244
                my $items;
244
                my $items;
245
                my $tag_quantity;
245
                my $tag_quantity;
246
                my $sortfield = ( $sorton ? $sorton : 'title' );
246
                my $sortfield = ( $shelf->sortfield ? $shelf->sortfield : 'title' );
247
                $sortfield = $query->param('sort') || $sortfield; ## Passed in sorting overrides default sorting
247
                $sortfield = $query->param('sort') || $sortfield; ## Passed in sorting overrides default sorting
248
                my $direction = $query->param('direction') || 'asc';
248
                my $direction = $query->param('direction') || 'asc';
249
                $template->param(
249
                $template->param(
Lines 313-325 sub shelfpage { Link Here
313
                        addpubshelvesloop => $pubshelves,
313
                        addpubshelvesloop => $pubshelves,
314
                    );
314
                    );
315
                }
315
                }
316
                push @paramsloop, { display => 'privateshelves' } if $category == 1;
316
                push @paramsloop, { display => 'privateshelves' } if $shelf->category == 1;
317
                $showadd = 1;
317
                $showadd = 1;
318
                my $i = 0;
318
                my $i = 0;
319
                my $manageshelf = ShelfPossibleAction( $loggedinuser, $shelfnumber, 'manage' );
319
                my $manageshelf = ShelfPossibleAction( $loggedinuser, $shelfnumber, 'manage' );
320
                my $can_delete_shelf = ShelfPossibleAction( $loggedinuser, $shelfnumber, 'delete_shelf' );
320
                my $can_delete_shelf = ShelfPossibleAction( $loggedinuser, $shelfnumber, 'delete_shelf' );
321
                $template->param(
321
                $template->param(
322
                    shelfname           => $shelfname,
322
                    shelfname           => $shelf->shelfname,
323
                    shelfnumber         => $shelfnumber,
323
                    shelfnumber         => $shelfnumber,
324
                    viewshelf           => $shelfnumber,
324
                    viewshelf           => $shelfnumber,
325
                    sortfield           => $sortfield,
325
                    sortfield           => $sortfield,
Lines 327-336 sub shelfpage { Link Here
327
                    allowremovingitems  => ShelfPossibleAction( $loggedinuser, $shelfnumber, 'delete'),
327
                    allowremovingitems  => ShelfPossibleAction( $loggedinuser, $shelfnumber, 'delete'),
328
                    allowaddingitem     => ShelfPossibleAction( $loggedinuser, $shelfnumber, 'add'),
328
                    allowaddingitem     => ShelfPossibleAction( $loggedinuser, $shelfnumber, 'add'),
329
                    allowdeletingshelf  => $can_delete_shelf,
329
                    allowdeletingshelf  => $can_delete_shelf,
330
                    "category$category" => 1,
330
                    "category".$shelf->category => 1,
331
                    category            => $category,
331
                    category            => $shelf->category,
332
                    itemsloop           => $items,
332
                    itemsloop           => $items,
333
                    showprivateshelves  => $category==1,
333
                    showprivateshelves  => $shelf->category==1,
334
                );
334
                );
335
            } else {
335
            } else {
336
                push @paramsloop, { nopermission => $shelfnumber };
336
                push @paramsloop, { nopermission => $shelfnumber };
(-)a/Koha/Virtualshelf.pm (-1 / +1 lines)
Lines 38-44 Koha::Virtualshelf - Koha Virtualshelf Object class Link Here
38
=cut
38
=cut
39
39
40
sub type {
40
sub type {
41
    return 'Virtualshelf';
41
    return 'Virtualshelve';
42
}
42
}
43
43
44
1;
44
1;
(-)a/Koha/Virtualshelves.pm (-1 / +1 lines)
Lines 40-46 Koha::Virtualshelf - Koha Virtualshelf Object class Link Here
40
=cut
40
=cut
41
41
42
sub type {
42
sub type {
43
    return 'Virtualshelf';
43
    return 'Virtualshelve';
44
}
44
}
45
45
46
sub object_class {
46
sub object_class {
(-)a/opac/opac-addbybiblionumber.pl (-4 / +7 lines)
Lines 31-36 use C4::VirtualShelves qw/:DEFAULT GetAllShelves/; Link Here
31
use C4::Output;
31
use C4::Output;
32
use C4::Auth;
32
use C4::Auth;
33
33
34
use Koha::Virtualshelves;
35
34
our $query        	= new CGI;
36
our $query        	= new CGI;
35
our @biblionumber 	= $query->param('biblionumber');
37
our @biblionumber 	= $query->param('biblionumber');
36
our $selectedshelf 	= $query->param('selectedshelf');
38
our $selectedshelf 	= $query->param('selectedshelf');
Lines 115-125 sub HandleShelfNumber { Link Here
115
sub HandleSelectedShelf {
117
sub HandleSelectedShelf {
116
    if($authorized= ShelfPossibleAction( $loggedinuser, $selectedshelf, 'add')){
118
    if($authorized= ShelfPossibleAction( $loggedinuser, $selectedshelf, 'add')){
117
        #adding to specific shelf
119
        #adding to specific shelf
118
        my ($singleshelf, $singleshelfname)= GetShelf($query->param('selectedshelf'));
120
        my $shelfnumber = $query->param('selectedshelf');
121
        my $shelf = Koha::Virtualshelves->find( $shelfnumber );
119
        $template->param(
122
        $template->param(
120
        singleshelf               => 1,
123
            singleshelf               => 1,
121
        shelfnumber               => $singleshelf,
124
            shelfnumber               => $shelf->shelfnumber,
122
        shelfname                 => $singleshelfname,
125
            shelfname                 => $shelf->shelfname,
123
        );
126
        );
124
    }
127
    }
125
}
128
}
(-)a/opac/opac-downloadshelf.pl (-6 / +8 lines)
Lines 31-36 use C4::VirtualShelves; Link Here
31
use C4::Record;
31
use C4::Record;
32
use C4::Ris;
32
use C4::Ris;
33
use C4::Csv;
33
use C4::Csv;
34
35
use Koha::Virtualshelves;
36
34
use utf8;
37
use utf8;
35
my $query = new CGI;
38
my $query = new CGI;
36
39
Lines 104-111 if ( ShelfPossibleAction( (defined($borrowernumber) ? $borrowernumber : -1), $sh Link Here
104
107
105
    } else {
108
    } else {
106
109
107
        # get details of the list
110
        my $shelf = Koha::Virtualshelves->find( $shelfid );
108
        my ($shelfnumber,$shelfname,$owner,$category,$sorton) = GetShelf($shelfid);
109
111
110
        # if modal context is passed set a variable so that page markup can be different
112
        # if modal context is passed set a variable so that page markup can be different
111
        if($context eq "modal"){
113
        if($context eq "modal"){
Lines 116-125 if ( ShelfPossibleAction( (defined($borrowernumber) ? $borrowernumber : -1), $sh Link Here
116
        $template->param(csv_profiles => GetCsvProfilesLoop('marc'));
118
        $template->param(csv_profiles => GetCsvProfilesLoop('marc'));
117
        $template->param(
119
        $template->param(
118
            showprivateshelves  => $showprivateshelves,
120
            showprivateshelves  => $showprivateshelves,
119
            shelfid             => $shelfid,
121
            shelfid             => $shelf->shelfnumber,
120
            shelfname           => $shelfname,
122
            shelfnumber         => $shelf->shelfnumber,
121
            shelfnumber         => $shelfnumber,
123
            viewshelf           => $shelf->shelfnumber,
122
            viewshelf           => $shelfnumber
124
            shelfname           => $shelf->shelfname,
123
        );
125
        );
124
        output_html_with_http_headers $query, $cookie, $template->output;
126
        output_html_with_http_headers $query, $cookie, $template->output;
125
    }
127
    }
(-)a/opac/opac-sendshelf.pl (-2 / +3 lines)
Lines 34-39 use C4::Output; Link Here
34
use C4::VirtualShelves;
34
use C4::VirtualShelves;
35
use C4::Members;
35
use C4::Members;
36
use Koha::Email;
36
use Koha::Email;
37
use Koha::Virtualshelves;
37
38
38
my $query = new CGI;
39
my $query = new CGI;
39
40
Lines 72-78 if ( $email ) { Link Here
72
        }
73
        }
73
    );
74
    );
74
75
75
    my @shelf               = GetShelf($shelfid);
76
    my $shelf = Koha::Virtualshelves->find( $shelfid );
76
    my ($items, $totitems)  = GetShelfContents($shelfid);
77
    my ($items, $totitems)  = GetShelfContents($shelfid);
77
    my $marcflavour         = C4::Context->preference('marcflavour');
78
    my $marcflavour         = C4::Context->preference('marcflavour');
78
    my $iso2709;
79
    my $iso2709;
Lines 110-116 if ( $email ) { Link Here
110
    $template2->param(
111
    $template2->param(
111
        BIBLIO_RESULTS => \@results,
112
        BIBLIO_RESULTS => \@results,
112
        comment        => $comment,
113
        comment        => $comment,
113
        shelfname      => $shelf[1],
114
        shelfname      => $shelf->shelfname,
114
        firstname      => $user->{firstname},
115
        firstname      => $user->{firstname},
115
        surname        => $user->{surname},
116
        surname        => $user->{surname},
116
    );
117
    );
(-)a/opac/opac-shareshelf.pl (-5 / +8 lines)
Lines 34-39 use C4::Members (); Link Here
34
use C4::Output;
34
use C4::Output;
35
use C4::VirtualShelves;
35
use C4::VirtualShelves;
36
36
37
use Koha::Virtualshelves;
38
37
#-------------------------------------------------------------------------------
39
#-------------------------------------------------------------------------------
38
40
39
my $pvar = _init( {} );
41
my $pvar = _init( {} );
Lines 67-77 sub _init { Link Here
67
    }
69
    }
68
70
69
    #get some list details
71
    #get some list details
70
    my @temp;
72
    my $shelf;
71
    @temp = GetShelf( $param->{shelfnumber} ) if !$param->{errcode};
73
    my $shelfnumber = $param->{shelfnumber};
72
    $param->{shelfname} = @temp ? $temp[1] : '';
74
    $shelf = Koha::Virtualshelves->find( $shelfnumber ) unless $param->{errcode};
73
    $param->{owner}     = @temp ? $temp[2] : -1;
75
    $param->{shelfname} = $shelf ? $shelf->shelfname : q||;
74
    $param->{category}  = @temp ? $temp[3] : -1;
76
    $param->{owner}     = $shelf ? $shelf->owner : -1;
77
    $param->{category}  = $shelf ? $shelf->category : -1;
75
78
76
    load_template($param);
79
    load_template($param);
77
    return $param;
80
    return $param;
(-)a/t/db_dependent/VirtualShelves.t (-10 / +11 lines)
Lines 12-17 use C4::Biblio qw( AddBiblio DelBiblio ); Link Here
12
use C4::Context;
12
use C4::Context;
13
use C4::Members qw( AddMember );
13
use C4::Members qw( AddMember );
14
14
15
use Koha::Virtualshelves;
16
15
17
16
my $dbh = C4::Context->dbh;
18
my $dbh = C4::Context->dbh;
17
$dbh->{RaiseError} = 1;
19
$dbh->{RaiseError} = 1;
Lines 82-91 for my $i (0..9){ Link Here
82
        ok(1, 'skip duplicate test for earlier name clash');
84
        ok(1, 'skip duplicate test for earlier name clash');
83
        next;
85
        next;
84
    }
86
    }
85
    my @shlf=GetShelf($shelves[$i]->{number}); #number, name, owner, catg, ...
87
    my $shelf = Koha::Virtualshelves->find( $shelves[$i]->{number} );
86
88
87
    # A shelf name is not per se unique!
89
    # A shelf name is not per se unique!
88
    if( $shlf[3]==2 ) { #public list: try to create with same name
90
    if( $shelf->category == 2 ) { #public list: try to create with same name
89
        my $badNumShelf= AddShelf( {
91
        my $badNumShelf= AddShelf( {
90
            shelfname=> $shelves[$i]->{name},
92
            shelfname=> $shelves[$i]->{name},
91
            category => 2
93
            category => 2
Lines 95-106 for my $i (0..9){ Link Here
95
        DelShelf($badNumShelf) if $badNumShelf>-1; #delete if went wrong..
97
        DelShelf($badNumShelf) if $badNumShelf>-1; #delete if went wrong..
96
    }
98
    }
97
    else { #private list, try to add another one for SAME user (owner)
99
    else { #private list, try to add another one for SAME user (owner)
98
        my $badNumShelf= defined($shlf[2])? AddShelf(
100
        my $badNumShelf= defined($shelf->owner)? AddShelf(
99
            {
101
            {
100
                shelfname=> $shelves[$i]->{name},
102
                shelfname=> $shelves[$i]->{name},
101
                category => 1,
103
                category => 1,
102
            },
104
            },
103
            $shlf[2]): -1;
105
            $shelf->owner): -1;
104
        is($badNumShelf, -1, 'do not create private lists with duplicate name for same user');
106
        is($badNumShelf, -1, 'do not create private lists with duplicate name for same user');
105
        DelShelf($badNumShelf) if $badNumShelf>-1; #delete if went wrong..
107
        DelShelf($badNumShelf) if $badNumShelf>-1; #delete if went wrong..
106
    }
108
    }
Lines 145-153 for my $i (0..9){ Link Here
145
    $used{$key}++;
147
    $used{$key}++;
146
}
148
}
147
149
148
#-----------------------TEST ModShelf & GetShelf functions------------------------#
150
#-----------------------TEST ModShelf & Koha::Virtualshelves->find functions/methods------------------------#
149
# usage : ModShelf($shelfnumber, $shelfname, $owner, $category )
151
# usage : ModShelf($shelfnumber, $shelfname, $owner, $category )
150
# usage : (shelfnumber,shelfname,owner,category) = GetShelf($shelfnumber);
151
152
152
for my $i (0..9){
153
for my $i (0..9){
153
    my $rand = int(rand(9));
154
    my $rand = int(rand(9));
Lines 167-176 for my $i (0..9){ Link Here
167
    if(C4::VirtualShelves::_CheckShelfName($newname,$shelf->{category},
168
    if(C4::VirtualShelves::_CheckShelfName($newname,$shelf->{category},
168
            $shelves[$rand]->{owner}, $numA)) {
169
            $shelves[$rand]->{owner}, $numA)) {
169
        ModShelf($numA,$shelf);
170
        ModShelf($numA,$shelf);
170
        my ($numB,$nameB,$ownerB,$categoryB) = GetShelf($numA);
171
        my $shelf_b = Koha::Virtualshelves->find( $numA );
171
        is($numA, $numB, 'modified shelf');
172
        is($numA, $shelf_b->shelfnumber, 'modified shelf');
172
        is($shelf->{shelfname}, $nameB,     '... and name change took');
173
        is($shelf->{shelfname}, $shelf_b->shelfname,     '... and name change took');
173
        is($shelf->{category}, $categoryB, '... and category change took');
174
        is($shelf->{category}, $shelf_b->category, '... and category change took');
174
    }
175
    }
175
    else {
176
    else {
176
        ok(1, "No ModShelf for $newname") for 1..3;
177
        ok(1, "No ModShelf for $newname") for 1..3;
(-)a/virtualshelves/addbybiblionumber.pl (-3 / +4 lines)
Lines 67-72 use C4::Output; Link Here
67
use C4::VirtualShelves qw/:DEFAULT GetAllShelves/;
67
use C4::VirtualShelves qw/:DEFAULT GetAllShelves/;
68
use C4::Auth;
68
use C4::Auth;
69
69
70
use Koha::Virtualshelves;
70
71
71
our $query           = new CGI;
72
our $query           = new CGI;
72
our @biblionumber    = HandleBiblioPars();
73
our @biblionumber    = HandleBiblioPars();
Lines 161-171 sub HandleShelfNumber { Link Here
161
sub HandleSelectedShelf {
162
sub HandleSelectedShelf {
162
    if($authorized= ShelfPossibleAction( $loggedinuser, $shelfnumber, 'add')){
163
    if($authorized= ShelfPossibleAction( $loggedinuser, $shelfnumber, 'add')){
163
        #confirm adding to specific shelf
164
        #confirm adding to specific shelf
164
        my ($singleshelf, $singleshelfname)= GetShelf($shelfnumber);
165
        my $shelf = Koha::Virtualshelves->find( $shelfnumber );
165
        $template->param(
166
        $template->param(
166
        singleshelf               => 1,
167
        singleshelf               => 1,
167
        shelfnumber               => $singleshelf,
168
        shelfnumber               => $shelf->shelfnumber,
168
        shelfname                 => $singleshelfname,
169
        shelfname                 => $shelf->shelfname,
169
        );
170
        );
170
    }
171
    }
171
    else {
172
    else {
(-)a/virtualshelves/sendshelf.pl (-4 / +4 lines)
Lines 33-38 use C4::Items; Link Here
33
use C4::Output;
33
use C4::Output;
34
use C4::VirtualShelves;
34
use C4::VirtualShelves;
35
use Koha::Email;
35
use Koha::Email;
36
use Koha::Virtualshelves;
36
37
37
my $query = new CGI;
38
my $query = new CGI;
38
39
Lines 70-77 if ($email) { Link Here
70
        }
71
        }
71
    );
72
    );
72
73
73
    my @shelf = GetShelf($shelfid);
74
    my $shelf = Koha::Virtualshelves->find( $shelfid );
74
    my ( $items, $totitems ) = GetShelfContents($shelfid);
75
    my ( $items, $totitems ) = GetShelfContents($shelf->shelfnumber);
75
    my $marcflavour = C4::Context->preference('marcflavour');
76
    my $marcflavour = C4::Context->preference('marcflavour');
76
    my $iso2709;
77
    my $iso2709;
77
    my @results;
78
    my @results;
Lines 104-110 if ($email) { Link Here
104
    $template2->param(
105
    $template2->param(
105
        BIBLIO_RESULTS => \@results,
106
        BIBLIO_RESULTS => \@results,
106
        comment        => $comment,
107
        comment        => $comment,
107
        shelfname      => $shelf[1],
108
        shelfname      => $shelf->shelfname,
108
    );
109
    );
109
110
110
    # Getting template result
111
    # Getting template result
111
- 

Return to bug 14544