87c656377e1664b3175828540e1d371631fffdda
chinhli
Tue Jun 11 19:45:38 2013 -0700
Thank you suggestion confirmed page.
diff --git src/hg/hgUserSuggestion/hgUserSuggestion.c src/hg/hgUserSuggestion/hgUserSuggestion.c
index ef2c05f..a7e8ebc 100644
--- src/hg/hgUserSuggestion/hgUserSuggestion.c
+++ src/hg/hgUserSuggestion/hgUserSuggestion.c
@@ -1,385 +1,391 @@
/* hgUserSuggestion - CGI-script to collect user's suggestion. */
#include "common.h"
#include "errabort.h"
#include "hCommon.h"
#include "jksql.h"
#include "portable.h"
#include "cheapcgi.h"
#include "htmshell.h"
#include "hdb.h"
#include "hui.h"
#include "cart.h"
#include "hPrint.h"
#include "dbDb.h"
#include "web.h"
#include "hash.h"
#include "hgConfig.h"
#include "hgUserSuggestion.h"
#include "mailViaPipe.h"
/* ---- Global variables. ---- */
struct cart *cart; /* The user's ui state. */
struct hash *oldVars = NULL;
/* ---- Global helper functions ---- */
void checkHgConfForSuggestion()
/* Abort if hg.conf has not been set up to accept suggestion */
{
if (isEmpty(cfgOption(CFG_SUGGEST_MAILTOADDR)) ||
isEmpty(cfgOption(CFG_SUGGEST_MAILFROMADDR)) ||
isEmpty(cfgOption(CFG_FILTERKEYWORD)) ||
isEmpty(cfgOption(CFG_SUGGEST_MAIL_SIGNATURE)) ||
isEmpty(cfgOption(CFG_SUGGEST_MAIL_RETURN_ADDR)) ||
isEmpty(cfgOption(CFG_SUGGEST_BROWSER_NAME)))
- errAbort("This Genome Browser has not been configured to accept suggestion yet. Please contact the browser administrator for more information.");
+ errAbort("This Genome Browser has not been configured to accept suggestions yet. Please contact the browser administrator for more information.");
}
char *mailToAddr()
/* Return the address to send suggestion to */
{
return cloneString(cfgOption(CFG_SUGGEST_MAILTOADDR));
}
char *mailFromAddr()
/* Return the bogus sender address to help filter out spam */
{
return cloneString(cfgOption(CFG_SUGGEST_MAILFROMADDR));
}
char *filterKeyword()
/* Return the keyword used to filter out spam */
{
return cloneString(cfgOption(CFG_FILTERKEYWORD));
}
char *mailSignature()
/* Return the signature to be used by outbound mail. */
{
return cloneString(cfgOption(CFG_SUGGEST_MAIL_SIGNATURE));
}
char *mailReturnAddr()
/* Return the return addr. to be used by outbound mail. */
{
return cloneString(cfgOption(CFG_SUGGEST_MAIL_RETURN_ADDR));
}
char *browserName()
/* Return the browser name like 'UCSC Genome Browser' */
{
return cloneString(cfgOption(CFG_SUGGEST_BROWSER_NAME));
}
static char *now()
/* Return a mysql-formatted time like "2008-05-19 15:33:34". */
{
char nowBuf[256];
time_t curtime;
curtime = time (NULL);
struct tm *theTime = localtime(&curtime);
strftime(nowBuf, sizeof nowBuf, "%Y-%m-%d %H:%M:%S", theTime);
return cloneString(nowBuf);
}
/* javascript functions */
void printMainForm()
/* Create the main suggestion form */
{
hPrintf(
"
\n\n");
}
void printValidateScript()
/* javascript to validate form inputs */
{
hPrintf(
"
\n\n");
}
void printCheckCaptchaScript()
/* javascript to check CAPTCHA code */
{
hPrintf(
"
\n\n");
}
void printSubmitFormScript()
/* javascript to submit form */
{
hPrintf(
" \n\n");
}
-void printSuggestionConfirmed()
+void printSuggestionConfirmed(char *summary, char * refID, char *userAddr, char *adminAddr, char *details)
+/* display suggestion confirm page */
{
hPrintf(
"Thank you for your suggestion!
");
hPrintf(
""
- "Thank you for your suggestion regarding the UCSC Genome Browser.
"
- "A confirmation mail has send to you containing an unique suggestion ID,
"
-"Please use this ID for all future communications related to this suggestion.
");
+ "Thank you for your suggestion regarding %s.
"
+ "You may follow up on the status of your request at any time by sending email to %s "
+ "and quoting your reference number:
%s
"
+ "A copy of this information has also been sent to you at %s.
",
+ summary, adminAddr, refID, userAddr);
hPrintf(
- "Click here for more suggestions
");
-
+ "Click here if you wish to make additional suggestions.
");
+hPrintf(
+ ""
+ "Your suggestion:
"
+ "%s
",
+ details);
}
void sendSuggestionBack(char *sName, char *sEmail, char *sCategory, char *sSummary, char *sDetails, char *suggestID)
/* send back the suggestion */
{
/* parameters from hg.cong */
char *mailTo = mailToAddr();
char *mailFrom=mailFromAddr();
char *filter=filterKeyword();
char subject[256];
char msg[4096]; /* need to make larger */
safef(msg, sizeof(msg),
"SuggestionID:: %s\nUserName:: %s\nUserEmail:: %s\nCategory:: %s\nSummary:: %s\n\n\nDetails::\n%s",
suggestID, sName, sEmail, sCategory, sSummary, sDetails);
safef(subject, sizeof(subject),"%s %s", filter, suggestID);
int result;
result = mailViaPipe(mailTo, subject, msg, mailFrom);
}
void sendConfirmMail(char *emailAddr, char *suggestID)
/* send user suggestion confirm mail */
{
char subject[256];
char msg[4096];
char *remoteAddr=getenv("REMOTE_ADDR");
char brwName[256];
char returnAddr[256];
char signature[256];
safecpy(brwName,sizeof(brwName), browserName());
safecpy(returnAddr,sizeof(returnAddr), mailReturnAddr());
safecpy(signature,sizeof(signature), mailSignature());
safef(subject, sizeof(subject),"Thank you for your suggestion to the %s", brwName);
safef(msg, sizeof(msg),
" Someone (probably you, from IP address %s) submitted a suggestion to the %s.\nThe suggestion has been assigned an ID \"%s\".\nPlease use this ID for all future communications related to ths suggestion.\n\nThanks!\n%s\n%s",
remoteAddr, brwName, suggestID, signature, returnAddr);
int result;
result = mailViaPipe(emailAddr, subject, msg, returnAddr);
}
void askForSuggest(char *organism, char *db)
/* Put up the suggestion form. */
{
printMainForm();
printValidateScript();
printCheckCaptchaScript();
printSubmitFormScript();
//cartSaveSession(cart);
}
void submitSuggestion()
/* send the suggestion to ,.. */
{
/* parameters from hg.cong */
char *filter=filterKeyword();
/* values from cart */
char *sName=cartUsualString(cart,"suggestName","");
char *sEmail=cartUsualString(cart,"suggestEmail","");
char *sCategory=cartUsualString(cart,"suggestCategory","");
char *sSummary=cartUsualString(cart,"suggestSummary","");
char *sDetails=cartUsualString(cart,"suggestDetails","");
char suggestID[256];
safef(suggestID, sizeof(suggestID),"%s-%s", sEmail, now());
char subject[256];
safef(subject, sizeof(subject),"%s %s", filter, suggestID);
/* send back the suggestion */
sendSuggestionBack(sName, sEmail, sCategory, sSummary, sDetails, suggestID);
/* send confirmation mail to user */
sendConfirmMail(sEmail,suggestID);
/* display confirmation page */
-printSuggestionConfirmed();
+printSuggestionConfirmed(sSummary, suggestID, sEmail, mailReturnAddr(), sDetails);
cartRemove(cart, "do.suggestSendMail");
}
void doMiddle(struct cart *theCart)
/* Write header and body of html page. */
{
char *db, *organism;
cart = theCart;
getDbAndGenome(cart, &db, &organism, oldVars);
cartWebStart(theCart, db, "User Suggestion");
checkHgConfForSuggestion();
if (cartVarExists(cart, "do.suggestSendMail"))
{
submitSuggestion();
cartRemove(cart, "do.suggestSendMail");
return;
}
askForSuggest(organism,db);
cartWebEnd();
}
/* Null terminated list of CGI Variables we don't want to save
* permanently. */
char *excludeVars[] = {"Submit", "submit", "Clear", NULL};
int main(int argc, char *argv[])
/* Process command line. */
{
long enteredMainTime = clock1000();
oldVars = hashNew(10);
cgiSpoof(&argc, argv);
htmlSetStyleSheet("/style/userAccounts.css");
htmlSetFormClass("accountScreen");
cartHtmlShell("User Suggestion",doMiddle, hUserCookie(), excludeVars, oldVars);
//cartEmptyShell(doMiddle, hUserCookie(), excludeVars, oldVars);
cgiExitTime("hgUserSuggestion", enteredMainTime);
return 0;
}