#!/usr/bin/perl use File::Temp; use File::Copy; use CGI; use C4::Context; use C4::Auth; use C4::Output; #my $destdir = "/usr/local/koha/intranet/htdocs/intranet-tmpl/images/patronpictures"; #my $uploadfile = shift @ARGV; my $input = new CGI; my $destdir = C4::Context->config('intrahtdocs') . "/patronimages"; warn "DEST : $destdir"; my ($template, $loggedinuser, $cookie) = get_template_and_user({template_name => "tools/picture-upload.tmpl", query => $input, type => "intranet", authnotrequired => 0, flagsrequired => {management => 1, tools => 1}, debug => 0, }); unless (-d $destdir) { $errors{'NODIR'} = 1; warn "patronimages directory not present"; } if ( %errors ) { $template->param( ERRORS => [ \%errors ] ); } my $uploadfilename = $input->param( 'uploadfile' ); my $uploadfile = $input->upload( 'uploadfile' ); my ( $total, $handled, @counts ); if ( $uploadfile ) { my $dirname = File::Temp::tempdir( CLEANUP => 1); my ( $tfh, $tempfile ) = File::Temp::tempfile( SUFFIX => '.zip', UNLINK => 1 ); my ( @directories, %errors ); $errors{'NOTZIP'} = 1 unless ( $uploadfilename =~ /\.zip$/i ); $errors{'NOWRITETEMP'} = 1 unless ( -w "$dirname" ); $errors{'NOWRITEDEST'} = 1 unless ( -w "$destdir" ); $errors{'EMPTYUPLOAD'} = 1 unless ( length( $uploadfile ) > 0 ); if ( %errors ) { $template->param( ERRORS => [ \%errors ] ); } else { while ( <$uploadfile> ) { print $tfh $_; } close $tfh; `unzip $tempfile -d $dirname`; push @directories, "$dirname"; foreach $recursive_dir ( @directories ) { opendir $dir, $recursive_dir; while ( my $entry = readdir $dir ) { push @directories, "$recursive_dir/$entry" if ( -d "$recursive_dir/$entry" and $entry !~ /^\./ ); } closedir $dir; } foreach my $dir ( @directories ) { $handled += handle_dir( $dir ); } $total = scalar @directories; $template->param( TOTAL => $total, HANDLED => $handled, COUNTS => \@counts, ); } } output_html_with_http_headers $input, $cookie, $template->output; sub handle_dir { my ( $dir ) = @_; my ( %count ); $count{filenames} = (); return 0 unless ( -r "$dir/IDLINK.TXT" or -r "$dir/DATALINK.TXT" ); my $file = ( -r "$dir/IDLINK.TXT" ) ? "$dir/IDLINK.TXT" : "$dir/DATALINK.TXT"; open $fh, $file or { print "Openning $dir/$filename failed!\n" and return 0 }; while (my $line = <$fh>) { chomp $line; my ( $filename, $cardnumber ); my $delim = ($line =~ /\t/) ? "\t" : ","; ($cardnumber, $filename) = split $delim, $line; $cardnumber =~ s/[\"\r\n]//g; # remove offensive characters $filename =~ s/[\"\r\n]//g; if ($cardnumber && $filename) { my $result = move ( "$dir/$filename", "$destdir/$cardnumber.jpg" ); if ( $result ) { $count{count}++; push @{ $count{filenames} }, { source => $filename, dest => $cardnumber .".jpg" }; } } } $count{source} = $dir; $count{dest} = $destdir; push @counts, \%count; close $fh; return 1; }