#!/usr/bin/python
import smtplib
import cgi
import template
import string
import robstring
FromAddress = "webmanager@affedis.com"
ToAddress = "webmaster@affedis.com"
SMTPTo = "webmaster@affedis.com"
SMTPFrom = "webmanager@affedis.com"
msg_top = "From: " + FromAddress + "\nTo: " + ToAddress + "\nSubject: Order\n\n"
msg_cc = ""
tmsg = "Transcriptions\n--------------\n\n"
mbmsg = "Music Books\n-----------\n\n"
fmsg = "Flamenco CD's\n-------------\n\n"
fields = cgi.FieldStorage()
print "Content-type: text/html\n\n"
TWarning = ""
MBWarning = ""
FWarning = ""
TopWarning = ""
CCError = ""
valid = 1
lines = 0
if not(fields.has_key("order")):
output = template.Template("orderform.html")
else:
if fields.has_key("address"):
address = str(fields["address"].value)
else:
address = ""
valid = 0
TopWarning = "You have not entered an address
"
if fields.has_key("name"):
name = str(fields["name"].value)
else:
name = ""
valid = 0
TopWarning = TopWarning + "You have not entered a name
"
if fields.has_key("email"):
email = str(fields["email"].value)
else:
email = ""
TopWarning = TopWarning + "You have not entered an email address
"
if fields.has_key("phone"):
phone = str(fields["phone"].value)
else:
phone = ""
TopWarning = TopWarning + "You have not entered a phone number
"
msg_top = msg_top + "Name : " + name + "\n"
msg_top = msg_top + "Email : " + email + "\n"
msg_top = msg_top + "Phone : " + email + "\n\n"
msg_top = msg_top + "Address\n-------\n" + address + "\n\n"
# ####################################################################### #
# vaidate transcriptions orders
for i in range(1,10):
if fields.has_key("TArtist" + str(i)) and fields.has_key("TTitle" + str(i)) and fields.has_key("TPrice" + str(i)) and fields.has_key("TQuantity" + str(i)) and fields.has_key("TTotal" + str(i)):
# completed order line
# do some validation ?
# Artist & Title can be pretty much anythin not blank
# price, quantity & total must be numeric
if not(robstring.isnumeric(str(fields["TPrice" + str(i)].value))):
valid = 0
TWarning = TWarning + "Line " + str(i) + " : Price must be a number.
\n"
if not(robstring.isnumeric(str(fields["TQuantity" + str(i)].value))):
valid = 0
TWarning = TWarning + "Line " + str(i) + " : Quantity must be a number.
\n"
if not(robstring.isnumeric(str(fields["TTotal" + str(i)].value))):
valid = 0
TWarning = TWarning + "Line " + str(i) + " : Total must be a number.
\n"
tmsg = tmsg + "Artist : " + str(fields[ "TArtist" + str(i)].value) + "\n"
tmsg = tmsg + "Title : " + str(fields[ "TTitle" + str(i)].value) + "\n"
tmsg = tmsg + "Price : " + str(fields[ "TPrice" + str(i)].value) + "\n"
tmsg = tmsg + "Quantity : " + str(fields[ "TQuantity" + str(i)].value) + "\n"
tmsg = tmsg + "Total : " + str(fields[ "TTotal" + str(i)].value) + "\n\n"
lines = lines + 1
elif not(fields.has_key("TArtist" + str(i)) and fields.has_key("TTitle" + str(i)) and fields.has_key("TPrice" + str(i)) and fields.has_key("TQuantity" + str(i)) and fields.has_key("TTotal" + str(i))):
# no entries blank line
pass
else:
# some entries are blank
valid = 0
TWarning = TWarning + "Missing "
if not(fields.has_key("TArtist" + str(i))):
TWarning = TWarning + "Artist, "
if not(fields.has_key("TTitle" + str(i))):
TWarning = TWarning + "Title, "
if not(fields.has_key("TPrice" + str(i))):
TWarning = TWarning + "Price, "
if not(fields.has_key("TQuantity" + str(i))):
TWarning = TWarning + "Quantity, "
if not(fields.has_key("TTotal" + str(i))):
TWarning = TWarning + "Total"
TWarning = TWarning + " in line " + str(i) + "
"
# if tmsg != "":
# if fields.has_key("TTotalPrice"):
# tmsg = tmsg + "Total Price : " + str(fields["TTotalPrice"].value) + "\n"
# if fields.has_key("TTotalQuantiy"):
# tmsg = tmsg + "Total Quantity : " + str(fields["TTotalQuantity"].value) + "\n"
# if fields.has_key("TTotalTotal"):
# tmsg = tmsg + "Total Total : " + str(fields["TTotalTotal"].value) + "\n"
# ####################################################################### #
# validate music book orders
for i in range(1,7):
if fields.has_key("MBTitle" + str(i)) and fields.has_key("MBPrice" + str(i)) and fields.has_key("MBQuantity" + str(i)) and fields.has_key("MBTotal" + str(i)):
# completed order line
# do some validation ?
# Title can be pretty much anythin not blank
# price, quantity & total must be numeric
if not(robstring.isnumeric(str(fields["MBPrice" + str(i)].value))):
valid = 0
MBWarning = MBWarning + "Line " + str(i) + " : Price must be a number.
\n"
if not(robstring.isnumeric(str(fields["MBQuantity" + str(i)].value))):
valid = 0
MBWarning = MBWarning + "Line " + str(i) + " : Quantity must be a number.
\n"
if not(robstring.isnumeric(str(fields["MBTotal" + str(i)].value))):
valid = 0
MBWarning = MBWarning + "Line " + str(i) + " : Total must be a number.
\n"
mbmsg = mbmsg + "Title : " + str(fields[ "MBTitle" + str(i)].value) + "\n"
mbmsg = mbmsg + "Price : " + str(fields[ "MBPrice" + str(i)].value) + "\n"
mbmsg = mbmsg + "Quantity : " + str(fields[ "MBQuantity" + str(i)].value) + "\n"
mbmsg = mbmsg + "Total : " + str(fields[ "MBTotal" + str(i)].value) + "\n\n"
lines = lines + 1
elif not(fields.has_key("MBTitle" + str(i)) and fields.has_key("MBPrice" + str(i)) and fields.has_key("MBQuantity" + str(i)) and fields.has_key("MBTotal" + str(i))):
# no entries blank line
pass
else:
# some entries are blank
valid = 0
MBWarning = MBWarning + "Missing "
if not(fields.has_key("MBTitle" + str(i))):
MBWarning = MBWarning + "Title, "
if not(fields.has_key("MBPrice" + str(i))):
MBWarning = MBWarning + "Price, "
if not(fields.has_key("TQuantity" + str(i))):
MBWarning = MBWarning + "Quantity, "
if not(fields.has_key("MBTotal" + str(i))):
MBWarning = MBWarning + "Total"
MBWarning = MBWarning + " in line " + str(i) + "
"
# ####################################################################### #
# validate flamenco cd orders
for i in range(1,7):
if fields.has_key("FTitle" + str(i)) and fields.has_key("FPrice" + str(i)) and fields.has_key("FQuantity" + str(i)) and fields.has_key("FTotal" + str(i)):
# completed order line
# do some validation ?
# Title can be pretty much anythin not blank
# price, quantity & total must be numeric
if not(robstring.isnumeric(str(fields["FPrice" + str(i)].value))):
valid = 0
FWarning = FWarning + "Line " + str(i) + " : Price must be a number.
\n"
if not(robstring.isnumeric(str(fields["FQuantity" + str(i)].value))):
valid = 0
FWarning = FWarning + "Line " + str(i) + " : Quantity must be a number.
\n"
if not(robstring.isnumeric(str(fields["FTotal" + str(i)].value))):
valid = 0
FWarning = FWarning + "Line " + str(i) + " : Total must be a number.
\n"
fmsg = fmsg + "Title : " + str(fields[ "FTitle" + str(i)].value) + "\n"
fmsg = fmsg + "Price : " + str(fields[ "FPrice" + str(i)].value) + "\n"
fmsg = fmsg + "Quantity : " + str(fields[ "FQuantity" + str(i)].value) + "\n"
fmsg = fmsg + "Total : " + str(fields[ "FTotal" + str(i)].value) + "\n\n"
lines = lines + 1
elif not(fields.has_key("FTitle" + str(i)) and fields.has_key("FPrice" + str(i)) and fields.has_key("FQuantity" + str(i)) and fields.has_key("FTotal" + str(i))):
# no entries blank line
pass
else:
# some entries are blank
valid = 0
MBWarning = FWarning + "Missing "
if not(fields.has_key("FTitle" + str(i))):
FWarning = FWarning + "Title, "
if not(fields.has_key("MBPrice" + str(i))):
FWarning = FWarning + "Price, "
if not(fields.has_key("TQuantity" + str(i))):
FWarning = FWarning + "Quantity, "
if not(fields.has_key("MBTotal" + str(i))):
FWarning = FWarning + "Total"
FWarning = FWarning + " in line " + str(i) + "
"
if fields.has_key("GrandTotal"):
gtotal = str(fields["GrandTotal"].value)
if fields.has_key("cardno"):
cardno = str(fields["cardno"].value)
if len(cardno) == 16:
msg_cc = msg_cc + "Card No : " + cardno + "\n"
else:
CCError = CCError + "Card number may be invalid (wrong length) please confirm before proceeding
"
valid = 1
else:
cardno = ""
valid = 0
CCError = CCError + "No Credit Card number entered"
if fields["cardtype"].value == "visa":
msg_cc = msg_cc + "Card Type : VISA\n"
elif fields["cardtype"].value == "master":
msg_cc = msg_cc + "Card Type : MasterCard\n"
if fields.has_key("month"):
month = str(fields["month"].value)
if int(month) > 12 or int(month) < 1 or len(month) > 2:
CCError = CCError + "Invalid Month
"
valid = 0
else:
msg_cc = msg_cc + "Expiry : " + month + "/"
else:
month = ""
valid = 0
CCError = CCError + "You must enter a valid expiry date
"
if fields.has_key("year"):
year = str(fields["year"].value)
if int(year) < 01 or len(year) > 2:
CCError = CCError + "Invalid Year
"
valid = 0
else:
msg_cc = msg_cc + year + "\n\n"
else:
year = ""
valid = 0
CCError = CCError + "You must enter a valid expiry date
"
if valid != 0 and lines > 0:
msg = msg_top + msg_cc + tmsg + "\n\n" + mbmsg + "\n\n" + fmsg
SMTP = smtplib.SMTP()
SMTP.connect("localhost")
SMTP.sendmail(SMTPFrom,[SMTPTo],msg)
SMTP.quit()
#re direct to thanks page after sending email
output = template.Template("thanks.html")
else:
output = template.Template("orderform.html")
##############################
#t_fields = array(
for i in range(1,10):
if fields.has_key("TArtist[i]"):
tartist[i] = fields["TArtist"].value
output.set_variable("valuetartist[i]",tartist[i])
no_data = ""
if lines == 0:
no_data = "
No items specified" output.set_variable("order_error","There are errors with the details you have entered " + no_data); output.set_variable("valueaddress",address) output.set_variable("valuename",name) output.set_variable("valueemail",email) output.set_variable("valuephone",phone) # output.set_variable("user_total",gtotal) output.set_variable("valuecardno",cardno) output.set_variable("valuemonth",month) output.set_variable("valueyear",year) if TopWarning != "": output.set_variable("TopError",TopWarning) if TWarning != "": output.set_variable("TError",TWarning) if MBWarning != "": output.set_variable("MBError",MBWarning) if FWarning != "": output.set_variable("FError",FWarning) if CCError != "": output.set_variable("CCError",CCError) print output.get_block("")