#!/usr/bin/python

#Script in Python per la Registrazione dei visitatori

#Importa i moduli necessari
import cgi
import smtplib
import sys
import traceback

#Funzione per la verifica dell'assenza del carattere di tabulazione
def tabulazione(campo):
    for contatore in range(len(campo)):
        carattere = campo[contatore]
        if carattere == "\t":
            Errore_tab = "\t"
            return Errore_tab

sys.stderr = sys.stdout
print "Content-Type: text/html\n\n"
print
for prova in range(1):
    #Valori iniziali per le variabili dei campi
    nome = ""
    cognome = ""
    indirizzo = ""
    residenza = ""
    cap = ""
    nazionalita = ""
    eta = ""
    telefono_casa = ""
    telefono_ufficio = ""
    cellulare = ""
    e_mail = ""
    nome_utente = ""
    password = ""
    conferma_password = ""

    #Ottiene i valori dai dai campi del form della pagina html.
    campi_html = "" #cgi.fieldStorage()
    nome = "Federica" #(campi_html.has_key("nome")
    cognome = "Cipollini" #(campi_html.has_key("cognome")
    indirizzo = "" #(campi_html.has_key("indirizzo")
    residenza = "Vicenza" #(campi_html.has_key("residenza")
    cap = "" #(campi_html.has_key("cap")
    nazionalita = "Italia" #(campi_html.has_key("nazionalita")
    eta = "30" #(campi_html.has_key("eta")
    telefono_casa = "" #(campi_html.has_key("telefono-casa")
    telefono_ufficio = "" #(campi_html.has_key("telefono-ufficio")
    cellulare = "" #(campi_html.has_key("cellulare")
    e_mail = "[email protected]" #(campi_html.has_key("e-mail")
    nome_utente = "cipollini2" #(campi_html.has_key("nome-utente")
    password = "1e23st" #(campi_html.has_key("password")
    conferma_password = "1e23st" #(campi_html.has_key("conferma-password")

    #Valori iniziali per gli errori
    errore_tabul = ""
    errore_nome = ""
    errore_cognome = ""
    errore_e_mail = ""
    errore_nome_utente = ""
    errore_password = ""
    errore_conf_passw = ""

    #Verifica la presenza di testo ed eventuale correttezza nei campi obbligatori.
    cond1 = (nome == "")
    if cond1:
        errore_nome = "Errore: Non &egrave stato inserito un Nome nell'apposito campo.<br>\n\n"
    cond2 = (cognome == "")
    if cond2:
        errore_cognome = "Errore: Non &egrave stato inserito un Cognome nell'apposito campo.<br>\n\n"
   
    cond3 = (e_mail == "")
    if cond3:
        errore_e_mail = "Errore: Non &egrave stato inserito un Indirizzo E-mail nell'apposito campo.<br>\n\n"

    #Apertura e lettura del file contenente i visitatori registrati.
    visit_regist = open(".......","r+t")

    #Legge quanti visitatori sono registrati
    for cont_rig_reg in range(2):
        tot_visit_reg = ""
        rig_tot_visit = visit_regist.readline()
        tot_visit_reg = rig_tot_visit.split("\t")[1]
    tot_visit_reg = int(tot_visit_reg)
   
    #Verifica che non vi siano nomi utente registrati equvalenti a quello immesso
    for cont_rig_reg in range(tot_visit_reg+1):
        rig = visit_regist.readline()
        nome_presente = ""
        try:
            nome_presente = rig.split("\t")[12]
        except:
            no_visit = "Non sono registrati visitatori"
        cond4 = (nome_utente == "" or nome_utente == nome_presente)
        if cond4:
            errore_nome_utente = "Errore: Non &egrave stato inserito un Nome utente nell'apposito campo<br>\n o &egrave stato già registrato da altri, prova a cambiarlo.<br>\n\n"
            break
       
    cond5 = (password == "")
    if cond5:
        errore_password = "Errore: Non &egrave stata inserita una Password  nell'apposito campo<br>\n\n"
    cond6 = (conferma_password == "" or conferma_password != password)
    if cond6:
        errore_conf_passw = "Errore: Non &egrave stata inserita la Password di conferma nell'apposito campo<br>\n o la stessa non &egrave stata digitata in modo equvalente alla Password iniziale<br>\n\n\n\n"

    err_tab = "Errore: Non &egrave possibile inserire caratteri di tabulazione nei campi.<br>\n\n"
    campi = [nome,cognome,indirizzo,residenza,cap,nazionalita,eta,telefono_casa,telefono_ufficio,cellulare,e_mail,nome_utente,password,conferma_password]
    num_campi = len(campi)
    for cont_campi in range(num_campi):
        nome_campo = campi[cont_campi]
        tabul = tabulazione(nome_campo)
        cond7 = (tabul == "\t")
        if cond7:
            errore_tabul = err_tab
            break

    # Se almeno una condizione d'errore è verificata stampa a video tutti gli errori.                    
    if (cond1 or cond2 or cond3 or cond4 or cond5 or cond6 or cond7):
        visit_regist.close()
        pag_orig = open(".......","r+t")
        let_pag_orig = pag_orig.read()
        pag_err = errore_tabul + errore_nome + errore_cognome + errore_e_mail + errore_nome_utente + errore_password + errore_conf_passw + let_pag_orig
        print pag_err

    # Se non vi sono errori registra i dati del nuovo visitatore in un file   
    else:
        indice = str(tot_visit_reg + 1)
        v = "\t"
        visit_regist.write(indice+v+nome+v+cognome+v+indirizzo+v+residenza+v+cap+v+nazionalita+v+eta+v+telefono_casa+v+telefono_ufficio+v+cellulare+v+e_mail+v+nome_utente+v+password+"\n")
        visit_regist.seek(0)
        rig_reg = visit_regist.readline()
        posizione2 = len(rig_reg)
        rig_reg = visit_regist.readline()
        posizione3 = len(rig_reg.split("\t")[0]) + 1
        posizione = posizione2 + posizione3
        visit_regist.seek(posizione)
        visit_regist.write(indice)
        visit_regist.close()

        #Indirizzi E-mail del mittente
        mittente = "[email protected]"