Bug 4013 [Revised] road type missing on search results
[srvgit] / C4 / Items.pm
index 5680db7..f8e2121 100644 (file)
@@ -632,18 +632,27 @@ sub ModDateLastSeen {
 
 =head2 DelItem
 
-  DelItem($dbh, $biblionumber, $itemnumber);
+  DelItem({ itemnumber => $itemnumber, [ biblionumber => $biblionumber ] } );
 
 Exported function (core API) for deleting an item record in Koha.
 
 =cut
 
 sub DelItem {
-    my ( $dbh, $biblionumber, $itemnumber ) = @_;
-    
+    my ( $params ) = @_;
+
+    my $itemnumber   = $params->{itemnumber};
+    my $biblionumber = $params->{biblionumber};
+
+    unless ($biblionumber) {
+        $biblionumber = C4::Biblio::GetBiblionumberFromItemnumber($itemnumber);
+    }
+
+    # If there is no biblionumber for the given itemnumber, there is nothing to delete
+    return 0 unless $biblionumber;
+
     # FIXME check the item has no current issues
-    
-    _koha_delete_item( $dbh, $itemnumber );
+    my $deleted = _koha_delete_item( $itemnumber );
 
     # get the MARC record
     my $record = GetMarcBiblio($biblionumber);
@@ -651,6 +660,7 @@ sub DelItem {
 
     #search item field code
     logaction("CATALOGUING", "DELETE", $itemnumber, "item") if C4::Context->preference("CataloguingLog");
+    return $deleted;
 }
 
 =head2 CheckItemPreSave
@@ -1145,11 +1155,13 @@ sub GetItemsCount {
 sub GetItemInfosOf {
     my @itemnumbers = @_;
 
-    my $query = '
+    my $itemnumber_values = @itemnumbers ? join( ',', @itemnumbers ) : "''";
+
+    my $query = "
         SELECT *
         FROM items
-        WHERE itemnumber IN (' . join( ',', @itemnumbers ) . ')
-    ';
+        WHERE itemnumber IN ($itemnumber_values)
+    ";
     return get_infos_of( $query, 'itemnumber' );
 }
 
@@ -1270,7 +1282,8 @@ sub GetItemsInfo {
            itemtypes.notforloan as notforloan_per_itemtype,
            holding.branchurl,
            holding.branchname,
-           holding.opac_info as branch_opac_info
+           holding.opac_info as holding_branch_opac_info,
+           home.opac_info as home_branch_opac_info
      FROM items
      LEFT JOIN branches AS holding ON items.holdingbranch = holding.branchcode
      LEFT JOIN branches AS home ON items.homebranch=home.branchcode
@@ -2285,7 +2298,12 @@ sub DelItemCheck {
         } elsif ($countanalytics > 0){
                $error = "linked_analytics";
        } else {
-            DelItem($dbh, $biblionumber, $itemnumber);
+            DelItem(
+                {
+                    biblionumber => $biblionumber,
+                    itemnumber   => $itemnumber
+                }
+            );
             return 1;
         }
     }
@@ -2316,10 +2334,10 @@ sub _koha_modify_item {
     $query =~ s/,$//;
     $query .= " WHERE itemnumber=?";
     push @bind, $item->{'itemnumber'};
-    my $sth = C4::Context->dbh->prepare($query);
+    my $sth = $dbh->prepare($query);
     $sth->execute(@bind);
-    if ( C4::Context->dbh->errstr ) {
-        $error.="ERROR in _koha_modify_item $query".$dbh->errstr;
+    if ( $sth->err ) {
+        $error.="ERROR in _koha_modify_item $query: ".$sth->errstr;
         warn $error;
     }
     return ($item->{'itemnumber'},$error);
@@ -2327,19 +2345,24 @@ sub _koha_modify_item {
 
 =head2 _koha_delete_item
 
-  _koha_delete_item( $dbh, $itemnum );
+  _koha_delete_item( $itemnum );
 
 Internal function to delete an item record from the koha tables
 
 =cut
 
 sub _koha_delete_item {
-    my ( $dbh, $itemnum ) = @_;
+    my ( $itemnum ) = @_;
 
+    my $dbh = C4::Context->dbh;
     # save the deleted item to deleteditems table
     my $sth = $dbh->prepare("SELECT * FROM items WHERE itemnumber=?");
     $sth->execute($itemnum);
     my $data = $sth->fetchrow_hashref();
+
+    # There is no item to delete
+    return 0 unless $data;
+
     my $query = "INSERT INTO deleteditems SET ";
     my @bind  = ();
     foreach my $key ( keys %$data ) {
@@ -2353,8 +2376,8 @@ sub _koha_delete_item {
 
     # delete from items table
     $sth = $dbh->prepare("DELETE FROM items WHERE itemnumber=?");
-    $sth->execute($itemnum);
-    return;
+    my $deleted = $sth->execute($itemnum);
+    return ( $deleted == 1 ) ? 1 : 0;
 }
 
 =head2 _marc_from_item_hash
@@ -2688,7 +2711,8 @@ sub PrepareItemrecordDisplay {
                 $subfield_data{mandatory}  = $tagslib->{$tag}->{$subfield}->{mandatory};
                 $subfield_data{repeatable} = $tagslib->{$tag}->{$subfield}->{repeatable};
                 $subfield_data{hidden}     = "display:none"
-                  if $tagslib->{$tag}->{$subfield}->{hidden};
+                  if ( ( $tagslib->{$tag}->{$subfield}->{hidden} > 4 )
+                    || ( $tagslib->{$tag}->{$subfield}->{hidden} < -4 ) );
                 my ( $x, $defaultvalue );
                 if ($itemrecord) {
                     ( $x, $defaultvalue ) = _find_value( $tag, $subfield, $itemrecord );
@@ -2811,15 +2835,12 @@ sub PrepareItemrecordDisplay {
                             $authorised_lib{$value} = $lib;
                         }
                     }
-                    $subfield_data{marc_value} = CGI::scrolling_list(
-                        -name     => 'field_value',
-                        -values   => \@authorised_values,
-                        -default  => "$defaultvalue",
-                        -labels   => \%authorised_lib,
-                        -size     => 1,
-                        -tabindex => '',
-                        -multiple => 0,
-                    );
+                    $subfield_data{marc_value} = {
+                        type    => 'select',
+                        values  => \@authorised_values,
+                        default => "$defaultvalue",
+                        labels  => \%authorised_lib,
+                    };
                 } elsif ( $tagslib->{$tag}->{$subfield}->{value_builder} ) {
                         # opening plugin
                         my $plugin = C4::Context->intranetdir . "/cataloguing/value_builder/" . $tagslib->{$tag}->{$subfield}->{'value_builder'};