00001
00002
00003
00004
00005
00006
00007
00008
00009 #include "cgiClass.h"
00010 #include"ocMail.h"
00011
00012 static char * mailPath = "/usr/sbin/sendmail";
00013 string baseUrl;
00014
00015 #include "page.hpp"
00016 using namespace std;
00017
00018
00019 class mailpage: public page
00020 {
00021 bool sentMail;
00022 string mailBody;
00023 ocSendMail sendMail;
00024 bool parseItem( const char * name,
00025 const char * prefix = NULL,
00026 const char * suffix = NULL )
00027 {
00028 bool bRet = false;
00029 if( script.ClientArguments().count(name) &&
00030 script.ClientArguments()[name].length() )
00031 {
00032 string var = script.ClientArguments()[const_cast<char *>(name)].c_str();
00033 if( var.length() > 0 )
00034 {
00035 if( prefix && strlen(prefix) )
00036 {
00037 mailBody += prefix;
00038 }
00039 mailBody += var;
00040 if( suffix && strlen(suffix) )
00041 {
00042 mailBody += suffix;
00043 }
00044 bRet = true;
00045 }
00046 }
00047 return bRet;
00048 }
00049
00050 void parseForm(void)
00051 {
00052 mailBody += "<h2>Customer Request:</h2>\n<hr>\n";
00053 mailBody += "<table>\n";
00054 mailBody += "<tr><th>Customer Information</th><td> ... </td></tr>\n";
00055 parseItem( "Name","<tr><th>Name:</th><td>", "</td></tr>" );
00056 parseItem( "Title","<tr><th>Title:</th><td>", "</td></tr>" );
00057 parseItem( "Company","<tr><th>Company Size:</th><td>", "</td></tr>" );
00058 parseItem( "Address","<tr><th>Address 1:</th><td>", "</td></tr>" );
00059 parseItem( "City","<tr><th>City:</th><td>", "</td></tr>" );
00060 parseItem( "State","<tr><th>State:</th><td>", "</td></tr>" );
00061 parseItem( "Zip","<tr><th>Zip:</th><td>", "</td></tr>" );
00062 parseItem( "Phone","<tr><th>Phone:</th><td>", "</td></tr>" );
00063 parseItem( "Fax","<tr><th>Fax:</th><td>", "</td></tr>" );
00064 parseItem( "Email","<tr><th>Email:</th><td>", "</td></tr>" );
00065 parseItem( "Request",
00066 "<tr><th>Request:</th><td class='request'><pre>",
00067 "</pre></td></tr>" );
00068 mailBody += "</table>\n";
00069 }
00070 public:
00071 mailpage(cgiScript & script):page(script),sendMail(mailPath)
00072 {
00073
00074 sentMail = false;
00075 }
00076 virtual ~mailpage() {;}
00077
00078 void send( void )
00079 {
00080 if( script.RequestMethod().upper() == "POST" )
00081 {
00082 sentMail = true;
00083
00084 parseForm();
00085 sendMail.openRoute( script.ClientArguments()["To"].c_str(),
00086 script.ClientArguments()["To"].c_str(),
00087 "Customer Request" );
00088 sendMail.setMimeType("text/html");
00089 sendMail.write( "<html><head>");
00090 sendMail.write( "<style>\n"
00091 "body{ background: #f5f5f0; color: navy;}\n"
00092 "td.request{ background: white; color: #000087; padding: 5px;}\n"
00093 "pre{ font: normal 10pt arial; }\n"
00094 "h1, h2{ color: #000087; }\n"
00095 "</style>"
00096 "</head>" );
00097 sendMail.write( "<body>" );
00098 sendMail.write( mailBody.c_str() );
00099 sendMail.write( "</body></html>");
00100 sendMail.send();
00101
00102 }
00103 }
00104 virtual bool emit( void )
00105 {
00106 bool bRet = emitTop();
00107
00108 if( bRet )
00109 {
00110
00111
00112
00113
00114 emitMenu( "menu1_start", "menu1_end" );
00115 emitMenu( "menu2_start", "menu2_end" );
00116
00117
00118 bRet = emitFormOrAck();
00119
00120
00121 emitEnd();
00122
00123 }
00124 else
00125 {
00126 script << "The page you requested is not available" << endl;
00127 bRet = false;
00128 }
00129 return bRet;
00130 }
00131 virtual bool emitFormOrAck( void )
00132 {
00133 bool bRet = true;
00134 if( sentMail )
00135 {
00136 script << pg_template.getParagraph("Thanks") << endl;
00137 }
00138 else
00139 {
00140
00141 cgiTemplates states;
00142 states.load("Templates/states.html");
00143 ocString form(pg_template.getParagraph("Form"));
00144 script << form.replace("$state_field$",
00145 states.getUnparsedHtml().c_str()) << endl;
00146 }
00147 return bRet;
00148 }
00149 };
00150
00151 int main(int argc, char ** argv)
00152 {
00153 baseUrl = "contact.meta";
00154 cgiScript script;
00155 mailpage pg(script);
00156
00157 pg.load();
00158
00159 pg.send();
00160
00161 pg.emit();
00162
00163 return 0;
00164 }