+=head2 RemoveShare
+
+ RemoveShare( $user, $shelfnumber );
+
+RemoveShare removes a share for specific shelf and borrower.
+Returns true if a record could be deleted.
+
+=cut
+
+sub RemoveShare {
+ my ($user, $shelfnumber)= @_;
+ my $dbh = C4::Context->dbh;
+ my $sql="
+DELETE FROM virtualshelfshares
+WHERE borrowernumber=? AND shelfnumber=?
+ ";
+ my $n= $dbh->do($sql,undef,($user, $shelfnumber));
+ return if !defined($n) || !$n || $n eq '0E0'; #nothing removed
+ return 1;
+}
+
+
+sub GetShelfCount {
+ my ($owner, $category) = @_;
+ my @params;
+ # Find out how many shelves total meet the submitted criteria...
+
+ my $dbh = C4::Context->dbh;
+ my $query = "SELECT count(*) FROM virtualshelves vs ";
+ if($category==1) {
+ $query.= qq{
+ LEFT JOIN virtualshelfshares sh ON sh.shelfnumber=vs.shelfnumber
+ AND sh.borrowernumber=?
+ WHERE category=1 AND (vs.owner=? OR sh.borrowernumber=?) };
+ @params= ($owner, $owner, $owner);
+ }
+ else {
+ $query.='WHERE category=2';
+ @params= ();
+ }
+ my $sth = $dbh->prepare($query);
+ $sth->execute(@params);
+ my ($total)= $sth->fetchrow;
+ return $total;
+}
+
+# internal subs
+sub _CheckShelfName {
+ my ($name, $cat, $owner, $number)= @_;
+
+ my $dbh = C4::Context->dbh;
+ my @pars;
+ my $query = qq(
+ SELECT DISTINCT shelfnumber
+ FROM virtualshelves
+ LEFT JOIN virtualshelfshares sh USING (shelfnumber)
+ WHERE shelfname=? AND shelfnumber<>?);
+ if($cat==1 && defined($owner)) {
+ $query.= ' AND (sh.borrowernumber=? OR owner=?) AND category=1';
+ @pars=($name, $number, $owner, $owner);
+ }
+ elsif($cat==1 && !defined($owner)) { #owner is null (exceptional)
+ $query.= ' AND owner IS NULL AND category=1';
+ @pars=($name, $number);
+ }
+ else { #public list
+ $query.= ' AND category=2';
+ @pars=($name, $number);
+ }
+ my $sth = $dbh->prepare($query);
+ $sth->execute(@pars);
+ return $sth->rows>0? 0: 1;