=cut
-sub type {
- return 'Virtualshelf';
+sub get_private_shelves {
+ my ( $self, $params ) = @_;
+ my $page = $params->{page};
+ my $rows = $params->{rows};
+ my $borrowernumber = $params->{borrowernumber} || 0;
+
+ $self->search(
+ {
+ category => 1,
+ -or => {
+ 'virtualshelfshares.borrowernumber' => $borrowernumber,
+ 'me.owner' => $borrowernumber,
+ }
+ },
+ {
+ join => [ 'virtualshelfshares' ],
+ distinct => 'shelfnumber',
+ order_by => 'shelfname',
+ ( ( $page and $rows ) ? ( page => $page, rows => $rows ) : () ),
+ }
+ );
+}
+
+
+sub get_public_shelves {
+ my ( $self, $params ) = @_;
+ my $page = $params->{page};
+ my $rows = $params->{rows};
+
+ $self->search(
+ {
+ category => 2,
+ },
+ {
+ distinct => 'shelfnumber',
+ order_by => 'shelfname',
+ ( ( $page and $rows ) ? ( page => $page, rows => $rows ) : () ),
+ }
+ );
+}
+
+sub get_some_shelves {
+ my ( $self, $params ) = @_;
+ my $borrowernumber = $params->{borrowernumber} || 0;
+ my $category = $params->{category} || 1;
+ my $add_allowed = $params->{add_allowed};
+
+ my @conditions;
+ if ( $add_allowed ) {
+ push @conditions, {
+ -or =>
+ [
+ {
+ "me.owner" => $borrowernumber,
+ "me.allow_change_from_owner" => 1,
+ },
+ "me.allow_change_from_others" => 1,
+ ]
+ };
+ }
+ if ( $category == 1 ) {
+ push @conditions, {
+ -or =>
+ {
+ "virtualshelfshares.borrowernumber" => $borrowernumber,
+ "me.owner" => $borrowernumber,
+ }
+ };
+ }
+
+ $self->search(
+ {
+ category => $category,
+ ( @conditions ? ( -and => \@conditions ) : () ),
+ },
+ {
+ join => [ 'virtualshelfshares' ],
+ distinct => 'shelfnumber',
+ order_by => { -desc => 'lastmodified' },
+ }
+ );
+}
+
+sub get_shelves_containing_record {
+ my ( $self, $params ) = @_;
+ my $borrowernumber = $params->{borrowernumber};
+ my $biblionumber = $params->{biblionumber};
+
+ my @conditions = ( 'virtualshelfcontents.biblionumber' => $biblionumber );
+ if ($borrowernumber) {
+ push @conditions,
+ {
+ -or => [
+ {
+ category => 1,
+ -or => {
+ 'me.owner' => $borrowernumber,
+ -or => {
+ 'virtualshelfshares.borrowernumber' => $borrowernumber,
+ },
+ }
+ },
+ { category => 2 },
+ ]
+ };
+ } else {
+ push @conditions, { category => 2 };
+ }
+
+ return Koha::Virtualshelves->search(
+ {
+ -and => \@conditions
+ },
+ {
+ join => [ 'virtualshelfcontents', 'virtualshelfshares' ],
+ distinct => 'shelfnumber',
+ order_by => { -asc => 'shelfname' },
+ }
+ );
+}
+
+sub _type {
+ return 'Virtualshelve';
}
sub object_class {