#!/usr/bin/perl -w

# Copyright (c) 1996 Steven E. Brenner
# $Id: upload.pl,v 1.1 2000-03-02 15:26:30 luca Exp $

require 5.001;
use strict;
require "./cgi-lib.pl";
require "./HyperNews/.scripts/check_mod_user.pl";

MAIN: 
{
  my (%cgi_data,  # The form data
      %cgi_cfn,   # The uploaded file(s) client-provided name(s)
      %cgi_ct,    # The uploaded file(s) content-type(s).  These are
                  #   set by the user's browser and may be unreliable
      %cgi_sfn,   # The uploaded file(s) name(s) on the server (this machine)
      $ret,       # Return value of the ReadParse call.       
      $user,      # User name from environment
      $course,    # Course name selected from user database
      $basedir,   # Base directory for download (per evitare i cheats)
      $fn,        # File per le note dell'utente
      $fl,        # nome del file in locale
      $xn,
      $ccc,
      $i1,
      $i2
     );

  # When writing files, several options can be set..
  # Spool the files to the /tmp directory
  #$basedir = "../upload/";
  $basedir = "../corso_";
  $user = $ENV{'REMOTE_USER'};
  $course = get_course($user);
  $cgi_lib::writefiles = "/tmp";   


  $basedir = "$basedir$course/upload/";
  $user = "$basedir$user";
  if (!-d $user) {
    mkdir $user, 0755;
  }

  $cgi_lib::writefiles = $user;

  # Limit upload size to avoid using too much memory
  $cgi_lib::maxdata = 500000; 

  # Start off by reading and parsing the data.  Save the return value.
  # Pass references to retreive the data, the filenames, and the content-type
  $ret = &ReadParse(\%cgi_data,\%cgi_cfn,\%cgi_ct,\%cgi_sfn);

  # A bit of error checking never hurt anyone
  if (!defined $ret) {
    &CgiDie("Errore in lettura parametri del CGI");
  } elsif (!$ret or !defined $cgi_data{'upfile'} or !defined $cgi_data{'note'}) {
	# Legge il file upload.htm dal direttorio dei servizi
	# e lo restituisce cos� com'�
	print "Content-type: text/html\n\n";
	$xn = "../servizi/upload.htm";
	open (FKL, $xn);
	while (!eof(FKL)) {
		$ccc = getc(FKL);
		print $ccc;
  	} 
	close (FKL);
	exit 1;
  } 

  if ($user eq '') {
    &CgiDie("Utente non autorizzato\n",
            "Si prega di effettuare ancora la validazione dell'utente.\n");
  }

  if (!-d $basedir) {
    &CgiDie("Impossibile trovare il direttorio base per l'upload\n",
            "Contattare il docente.\n");
  }
  
  if ($cgi_cfn{'upfile'} eq '') {
    &CgiDie("Nome file non valido\n",
            "Assicurarsi di aver fornito un nome file corretto.\n");
  } 
  
  $fn = ">>$user/note.txt";
  open (FILE, $fn) || &CgiDie("Impossibile aprire il file delle note $fn\n");
  binmode (FILE);  # write files accurately
  print FILE "---- Nota ----\n";
  print FILE $cgi_data{'note'} ;
#  print FILE "\n---- Fine nota ----\n";
  print FILE "\n";
  close (FILE);
 
  $i1 = rindex($cgi_cfn{'upfile'}, "\\");
  $i2 = rindex($cgi_cfn{'upfile'}, "/");
  if ($i2 > $i1) {
    $i1 = $i2;
  } 
  $fl = "$user/";
  if ($i1 > -1) {
    $fl .= substr($cgi_cfn{'upfile'}, $i1+1);
  } else {
     $fl .= $cgi_cfn{'upfile'};
    }

  # Cambia nome
  rename ($cgi_sfn{'upfile'}, $fl) ;

  # Now print the page for the user to see...
  print &PrintHeader;
  print &HtmlTop("Invio file");


  print <<EOT;
Il file <i>$cgi_cfn{'upfile'}</i> e' stato ricevuto.<br>
<b>Grazie.</b>
<hr>
EOT

  print &HtmlBot;


  # The following lines are solely to suppress 'only used once' warnings
  $cgi_lib::writefiles = $cgi_lib::writefiles;
  $cgi_lib::maxdata    = $cgi_lib::maxdata;

}