Bug 10403: (follow-up) fix test to use vendor created earlier during test
[koha.git] / admin / itemtypes.pl
index c86e0c7..ee70238 100755 (executable)
@@ -13,9 +13,9 @@
 # WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
 # A PARTICULAR PURPOSE.  See the GNU General Public License for more details.
 #
-# You should have received a copy of the GNU General Public License along with
-# Koha; if not, write to the Free Software Foundation, Inc., 59 Temple Place,
-# Suite 330, Boston, MA  02111-1307 USA
+# You should have received a copy of the GNU General Public License along
+# with Koha; if not, write to the Free Software Foundation, Inc.,
+# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 
 =head1 admin/itemtypes.pl
 
@@ -41,9 +41,11 @@ written 20/02/2002 by paul.poulain@free.fr
 =cut
 
 use strict;
+#use warnings; FIXME - Bug 2505
 use CGI;
 
 use List::Util qw/min/;
+use File::Spec;
 
 use C4::Koha;
 use C4::Context;
@@ -55,27 +57,18 @@ sub StringSearch {
     my $dbh = C4::Context->dbh;
     $searchstring =~ s/\'/\\\'/g;
     my @data = split( ' ', $searchstring );
-    my $count = @data;
-    my $sth =
-      $dbh->prepare(
-        "Select * from itemtypes where (description like ?) order by itemtype");
+    my $sth = $dbh->prepare(
+        "SELECT * FROM itemtypes WHERE (description LIKE ?) ORDER BY itemtype"
+       );
     $sth->execute("$data[0]%");
-    my @results;
-
-    while ( my $data = $sth->fetchrow_hashref ) {
-        push( @results, $data );
-    }
-
-    #  $sth->execute;
-    $sth->finish;
-    return ( scalar(@results), \@results );
+    return $sth->fetchall_arrayref({});                # return ref-to-array of ref-to-hashes
+                                                               # like [ fetchrow_hashref(), fetchrow_hashref() ... ]
 }
 
 my $input       = new CGI;
 my $searchfield = $input->param('description');
 my $script_name = "/cgi-bin/koha/admin/itemtypes.pl";
 my $itemtype    = $input->param('itemtype');
-my $pagesize    = 10;
 my $op          = $input->param('op');
 $searchfield =~ s/\,//g;
 my ( $template, $borrowernumber, $cookie ) = get_template_and_user(
@@ -84,82 +77,49 @@ my ( $template, $borrowernumber, $cookie ) = get_template_and_user(
         query           => $input,
         type            => "intranet",
         authnotrequired => 0,
-        flagsrequired   => { parameters => 1 },
+        flagsrequired   => { parameters => 'parameters_remaining_permissions' },
         debug           => 1,
     }
 );
 
+$template->param(script_name => $script_name);
 if ($op) {
-    $template->param(
-        script_name => $script_name,
-        $op         => 1
-    );    # we show only the TMPL_VAR names $op
-}
-else {
-    $template->param(
-        script_name => $script_name,
-        else        => 1
-    );    # we show only the TMPL_VAR names $op
+       $template->param($op  => 1); # we show only the TMPL_VAR names $op
+} else {
+    $template->param(else => 1);
 }
+
+my $dbh = C4::Context->dbh;
+
 ################## ADD_FORM ##################################
 # called by default. Used to create form to add or  modify a record
 if ( $op eq 'add_form' ) {
-
-    #start the page and read in includes
     #---- if primkey exists, it's a modify action, so read values to modify...
     my $data;
     if ($itemtype) {
-        my $dbh = C4::Context->dbh;
         my $sth = $dbh->prepare("select * from itemtypes where itemtype=?");
         $sth->execute($itemtype);
         $data = $sth->fetchrow_hashref;
-        $sth->finish;
     }
 
-    # build list of images
-    my $imagedir_filesystem = getitemtypeimagedir();
-    my $imagedir_web        = getitemtypeimagesrc();
-    opendir( DIR, $imagedir_filesystem )
-      or warn "can't opendir " . $imagedir_filesystem . ": " . $!;
-    my @imagelist;
-    my $i              = 0;
-    my $image_per_line = 12;
-    while ( my $line = readdir(DIR) ) {
-        $i++;
-        if ( $line =~ /\.(gif|png)$/i ) {
-            if ( $i == $image_per_line ) {
-                $i = 0;
-                push @imagelist, { KohaImage => '', KohaImageSrc => '' };
-            }
-            else {
-                push(
-                    @imagelist,
-                    {
-                        KohaImage    => $line,
-                        KohaImageSrc => $imagedir_web . '/' . $line,
-                        checked      => $line eq $data->{imageurl} ? 1 : 0,
-                    }
-                );
-            }
-        }
-    }
-    closedir DIR;
+    my $imagesets = C4::Koha::getImageSets( checked => $data->{'imageurl'} );
 
     my $remote_image = undef;
-    if ( defined $data->{imageurl} and $data->{imageurl} =~ m/^http/ ) {
+    if ( defined $data->{imageurl} and $data->{imageurl} =~ /^http/i ) {
         $remote_image = $data->{imageurl};
     }
 
     $template->param(
         itemtype        => $itemtype,
         description     => $data->{'description'},
-        renewalsallowed => $data->{'renewalsallowed'},
         rentalcharge    => sprintf( "%.2f", $data->{'rentalcharge'} ),
         notforloan      => $data->{'notforloan'},
         imageurl        => $data->{'imageurl'},
         template        => C4::Context->preference('template'),
         summary         => $data->{summary},
-        IMAGESLOOP      => \@imagelist,
+        checkinmsg      => $data->{'checkinmsg'},
+        checkinmsgtype  => $data->{'checkinmsgtype'},
+        imagesets       => $imagesets,
         remote_image    => $remote_image,
     );
 
@@ -168,9 +128,6 @@ if ( $op eq 'add_form' ) {
     # called by add_form, used to insert/modify data in DB
 }
 elsif ( $op eq 'add_validate' ) {
-    my $dbh = C4::Context->dbh;
-
-    my $modif = '';
     my $query = "
         SELECT itemtype
         FROM   itemtypes
@@ -178,62 +135,60 @@ elsif ( $op eq 'add_validate' ) {
     ";
     my $sth = $dbh->prepare($query);
     $sth->execute($itemtype);
-    if ( $sth->fetchrow ) {
-        $modif = 1;
-    }
-
-    if ($modif) {    # it 's a modification
-        my $query = '
+    if ( $sth->fetchrow ) {            # it's a modification
+        my $query2 = '
             UPDATE itemtypes
             SET    description = ?
-                 , renewalsallowed = ?
                  , rentalcharge = ?
                  , notforloan = ?
                  , imageurl = ?
                  , summary = ?
+                 , checkinmsg = ?
+                 , checkinmsgtype = ?
             WHERE itemtype = ?
         ';
-        my $sth = $dbh->prepare($query);
+        $sth = $dbh->prepare($query2);
         $sth->execute(
             $input->param('description'),
-            $input->param('renewalsallowed'),
             $input->param('rentalcharge'),
             ( $input->param('notforloan') ? 1 : 0 ),
             (
-                $input->param('image') eq 'removeImage' ? ''
-                : (
+                $input->param('image') eq 'removeImage' ? '' : (
                       $input->param('image') eq 'remoteImage'
                     ? $input->param('remoteImage')
                     : $input->param('image') . ""
                 )
             ),
             $input->param('summary'),
+            $input->param('checkinmsg'),
+            $input->param('checkinmsgtype'),
             $input->param('itemtype')
         );
     }
     else {    # add a new itemtype & not modif an old
         my $query = "
             INSERT INTO itemtypes
-                (itemtype,description,renewalsallowed,rentalcharge, notforloan, imageurl,summary)
+                (itemtype,description,rentalcharge, notforloan, imageurl, summary, checkinmsg, checkinmsgtype)
             VALUES
-                (?,?,?,?,?,?,?);
+                (?,?,?,?,?,?,?,?);
             ";
         my $sth = $dbh->prepare($query);
+               my $image = $input->param('image');
         $sth->execute(
             $input->param('itemtype'),
             $input->param('description'),
-            $input->param('renewalsallowed'),
             $input->param('rentalcharge'),
             $input->param('notforloan') ? 1 : 0,
-            $input->param('image') eq 'removeImage' ? ''
-            : $input->param('image') eq 'remoteImage'
-            ? $input->param('remoteImage')
-            : $input->param('image'),
+            $image eq 'removeImage' ?           ''                 :
+            $image eq 'remoteImage' ? $input->param('remoteImage') :
+            $image,
             $input->param('summary'),
+            $input->param('checkinmsg'),
+            $input->param('checkinmsgtype'),
         );
     }
 
-    print "Content-Type: text/html\n\n<META HTTP-EQUIV=Refresh CONTENT=\"0; URL=itemtypes.pl\"></html>";
+    print $input->redirect('itemtypes.pl');
     exit;
 
     # END $OP eq ADD_VALIDATE
@@ -241,33 +196,27 @@ elsif ( $op eq 'add_validate' ) {
     # called by default form, used to confirm deletion of data in DB
 }
 elsif ( $op eq 'delete_confirm' ) {
-
-    #start the page and read in includes
-    my $dbh = C4::Context->dbh;
-
-    # Check both categoryitem and biblioitems, see Bug 199
-    my $total = 0;
-    for my $table ('biblioitems') {
-        my $sth =
-          $dbh->prepare(
-            "select count(*) as total from $table where itemtype=?");
-        $sth->execute($itemtype);
-        $total += $sth->fetchrow_hashref->{total};
-        $sth->finish;
-    }
+    # Check both items and biblioitems
+    my $sth = $dbh->prepare('
+        SELECT COUNT(*) AS total FROM (
+            SELECT itemtype AS t FROM biblioitems
+            UNION
+            SELECT itype AS t FROM items
+        ) AS tmp
+        WHERE tmp.t=?
+    ');
+    $sth->execute($itemtype);
+    my $total = $sth->fetchrow_hashref->{'total'};
 
     my $sth =
       $dbh->prepare(
-"select itemtype,description,renewalsallowed,rentalcharge from itemtypes where itemtype=?"
+"select itemtype,description,rentalcharge from itemtypes where itemtype=?"
       );
     $sth->execute($itemtype);
     my $data = $sth->fetchrow_hashref;
-    $sth->finish;
-
     $template->param(
         itemtype        => $itemtype,
         description     => $data->{description},
-        renewalsallowed => $data->{renewalsallowed},
         rentalcharge    => sprintf( "%.2f", $data->{rentalcharge} ),
         imageurl        => $data->{imageurl},
         total           => $total
@@ -278,50 +227,27 @@ elsif ( $op eq 'delete_confirm' ) {
   # called by delete_confirm, used to effectively confirm deletion of data in DB
 }
 elsif ( $op eq 'delete_confirmed' ) {
-
-    #start the page and read in includes
-    my $dbh      = C4::Context->dbh;
     my $itemtype = uc( $input->param('itemtype') );
     my $sth      = $dbh->prepare("delete from itemtypes where itemtype=?");
     $sth->execute($itemtype);
     $sth = $dbh->prepare("delete from issuingrules where itemtype=?");
     $sth->execute($itemtype);
-    $sth->finish;
-    print "Content-Type: text/html\n\n<META HTTP-EQUIV=Refresh CONTENT=\"0; URL=itemtypes.pl\"></html>";
+    print $input->redirect('itemtypes.pl');
     exit;
-
     # END $OP eq DELETE_CONFIRMED
 ################## DEFAULT ##################################
 }
 else {    # DEFAULT
-    my ( $count, $results ) = StringSearch( $searchfield, 'web' );
-
-    my $page = $input->param('page') || 1;
-    my $first = ( $page - 1 ) * $pagesize;
-
-    # if we are on the last page, the number of the last word to display
-    # must not exceed the length of the results array
-    my $last = min( $first + $pagesize - 1, scalar @{$results} - 1, );
-
-    my $toggle = 0;
+    my ($results) = StringSearch( $searchfield, 'web' );
     my @loop;
-    foreach my $result ( @{$results}[ $first .. $last ] ) {
-        my $itemtype = $result;
-        $itemtype->{toggle} = ( $toggle++ % 2 eq 0 ? 1 : 0 );
-        $itemtype->{imageurl} =
-          getitemtypeimagesrcfromurl( $itemtype->{imageurl} );
-        $itemtype->{rentalcharge} =
-          sprintf( '%.2f', $itemtype->{rentalcharge} );
-
+    foreach my $itemtype ( @{$results} ) {
+        $itemtype->{imageurl} = getitemtypeimagelocation( 'intranet', $itemtype->{imageurl} );
+        $itemtype->{rentalcharge} = sprintf( '%.2f', $itemtype->{rentalcharge} );
         push( @loop, $itemtype );
     }
 
     $template->param(
         loop           => \@loop,
-        pagination_bar => pagination_bar(
-            $script_name, getnbpages( scalar @{$results}, $pagesize ),
-            $page,        'page'
-        )
     );
 }    #---- END $OP eq DEFAULT