fd2186c41e2df333831985ebd340934bd8e767ae
chinhli
  Wed May 30 11:39:18 2012 -0700
Return to 'returnto' URL after signup successful.
diff --git src/hg/hgLogin/hgLogin.c src/hg/hgLogin/hgLogin.c
index e04b450..1d64f8f 100644
--- src/hg/hgLogin/hgLogin.c
+++ src/hg/hgLogin/hgLogin.c
@@ -230,53 +230,121 @@
 int delay=nSec*1000;
 hPrintf("<script  language=\"JavaScript\">\n"
     "<!-- \n"
     "window.setTimeout(afterDelay, %d);\n"
     "function afterDelay() {\n"
     "window.location =\"http://%s/cgi-bin/hgLogin?hgLogin.do.displayLoginPage=1\";\n}"
     "//-->\n</script>", delay, hgLoginHost);
 }
 
 boolean tokenExpired(char *dateTime)
 /* Is token expired? */
 {
 return FALSE;
 }
 
+void getReturnToURL(char **returnTo)
+/* get URL passed in with returnto URL */
+{
+char *returnURL = cartUsualString(cart, "returnto", "");
+char *hgLoginHost = wikiLinkHost();
+
+if (!returnURL || sameString(returnURL,""))
+   safef(returnTo, sizeof(returnTo),
+        "http://%s/cgi-bin/hgSession?hgS_doMainPage=1", hgLoginHost);
+else
+   safecpy(returnTo, sizeof(returnTo), returnURL);
+}
+
 void returnToURL(int nSec)
 /* delay for N/10  micro seconds then return to the "returnto" URL */
 {
 char *returnURL = cartUsualString(cart, "returnto", "");
 char *hgLoginHost = wikiLinkHost();
 char returnTo[512];
 
 if (!returnURL || sameString(returnURL,""))
    safef(returnTo, sizeof(returnTo),
         "http://%s/cgi-bin/hgSession?hgS_doMainPage=1", hgLoginHost);
 else
    safecpy(returnTo, sizeof(returnTo), returnURL);
-
 int delay=nSec*100;
 hPrintf(
     "<script  language=\"JavaScript\">\n"
     "<!-- "
     "\n"
     "window.setTimeout(afterDelay, %d);\n"
     "function afterDelay() {\n"
     "window.location =\"%s\";\n}"
     "\n//-->\n"
-    "</script>", delay, returnTo);
+    "</script>", delay, returnURL);
+}
+
+
+void  displayActMailSuccess()
+/* display Activate mail success box */
+{
+char *returnURL = cartUsualString(cart, "returnto", "");
+char *hgLoginHost = wikiLinkHost();
+char returnTo[512];
+
+if (!returnURL || sameString(returnURL,""))
+   safef(returnTo, sizeof(returnTo),
+        "http://%s/cgi-bin/hgSession?hgS_doMainPage=1", hgLoginHost);
+else
+   safecpy(returnTo, sizeof(returnTo), returnURL);
+
+hPrintf(
+    "<div id=\"confirmationBox\" class=\"centeredContainer formBox\">"
+    "\n"
+    "<h2>UCSC Genome Browser</h2>"
+    "<p id=\"confirmationMsg\" class=\"confirmationTxt\">An account activation email has been sent to you \n"
+   "Please activate your account within 7 days.</p>"
+    "\n"
+    "<p><a href=\"%s\">Return</a></p>", returnURL);
+cartRemove(cart, "hgLogin_helpWith");
+cartRemove(cart, "hgLogin_email");
+cartRemove(cart, "hgLogin_userName");
+}
+
+
+void sendActMailOut(char *email, char *subject, char *msg)
+/* send mail to email address */
+{
+char *hgLoginHost = wikiLinkHost();
+char cmd[4096];
+safef(cmd,sizeof(cmd),
+    "echo '%s' | mail -s \"%s\" %s" , msg, subject, email);
+int result = system(cmd);
+if (result == -1)
+    {
+    hPrintf(
+        "<h2>UCSC Genome Browser</h2>"
+        "<p align=\"left\">"
+        "</p>"
+        "<h3>Error emailing to: %s</h3>"
+        "Click <a href=hgLogin?hgLogin.do.displayAccHelpPage=1>here</a> to return.<br>", email );
+    }
+else
+    {
+    hPrintf("<script  language=\"JavaScript\">\n"
+        "<!-- \n"
+        "window.location =\"http://%s/cgi-bin/hgLogin?hgLogin.do.displayActMailSuccess=1\""
+        "//-->"
+        "\n"
+        "</script>", hgLoginHost);
+    }
 }
 
 void  displayMailSuccess()
 /* display mail success confirmation box */
 {
 hPrintf(
     "<div id=\"confirmationBox\" class=\"centeredContainer formBox\">"
     "\n"
     "<h2>UCSC Genome Browser</h2>"
     "<p id=\"confirmationMsg\" class=\"confirmationTxt\">An email has been sent to you \n"
    "containing information that you requested.</p>"
     "\n"
     "<p><a href=\"hgLogin?hgLogin.do.displayLoginPage=1\">Return to Login</a></p>");
 cartRemove(cart, "hgLogin_helpWith");
 cartRemove(cart, "hgLogin_email");
@@ -290,41 +358,39 @@
 char *obj = cartUsualString(cart, "hgLogin_helpWith", "");
 char cmd[4096];
 safef(cmd,sizeof(cmd),
     "echo '%s' | mail -s \"%s\" %s" , msg, subject, email);
 int result = system(cmd);
 if (result == -1)
     {
     hPrintf( 
         "<h2>UCSC Genome Browser</h2>"
         "<p align=\"left\">"
         "</p>"
         "<h3>Error emailing %s to: %s</h3>"
         "Click <a href=hgLogin?hgLogin.do.displayAccHelpPage=1>here</a> to return.<br>", 
         obj, email );
     }
-//***** TODO replace a modal window
 else
     {
     hPrintf("<script  language=\"JavaScript\">\n"
         "<!-- \n"
         "window.location =\"http://%s/cgi-bin/hgLogin?hgLogin.do.displayMailSuccess=1\""
         "//-->"
         "\n"
         "</script>", hgLoginHost);
     }
-/********************************/
 }
 
 void mailUsername(char *email, char *users)
 /* send user name list to the email address */
 {
 char subject[256];
 char msg[256];
 char *remoteAddr=getenv("REMOTE_ADDR");
 
 safef(subject, sizeof(subject),"Your user name at the UCSC Genome Browser");
 safef(msg, sizeof(msg), 
     "Someone (probably you, from IP address %s) has requested user name associated with this email address at UCSC Genome Browser. Your user name is: \n\n  %s\n\n", 
    remoteAddr, users);
 safecat (msg, sizeof(msg), signature);
 sendMailOut(email, subject, msg);
@@ -474,31 +540,31 @@
 char subject[256];
 char msg[4096];
 char activateURL[256];
 char *hgLoginHost = wikiLinkHost();
 char *remoteAddr=getenv("REMOTE_ADDR");
 safef(activateURL, sizeof(activateURL),
     "http://%s/cgi-bin/hgLogin?hgLogin.do.activateAccount=1&user=%s&token=%s\n",
     sqlEscapeString(hgLoginHost),
     sqlEscapeString(username),
     sqlEscapeString(encToken));
 safef(subject, sizeof(subject),"UCSC Genome Browser account e-mail address confirmation");
 safef(msg, sizeof(msg),
     "Someone (probably you, from IP address %s) has requested an account %s with this e-mail address on the UCSC Genome Browser.\n\nTo confirm that this account really does belong to you on the UCSC Genome Browser, open this link in your browser:\n\n%s\n\nIf this is *not* you, do not follow the link. This confirmation code will expire in 7 days.\n", 
      remoteAddr, username, activateURL);
 safecat (msg, sizeof(msg), signature);
-sendMailOut(email, subject, msg);
+sendActMailOut(email, subject, msg);
 }
 
 void setupNewAccount(struct sqlConnection *conn, char *email, char *username)
 /* Set up  new user account and send activation mail to user */
 {
 char query[256];
 char *token = generateRandomPassword();
 char *tokenMD5 = generateTokenMD5(token);
 safef(query,sizeof(query), "update gbMembers set lastUse=NOW(),emailToken='%s', emailTokenExpires=DATE_ADD(NOW(), INTERVAL 7 DAY), accountActivated='N' where userName='%s'",
     sqlEscapeString(tokenMD5),
     sqlEscapeString(username)
     );
 sqlUpdate(conn, query);
 sendActivateMail(email, username, tokenMD5);
 return;
@@ -830,30 +896,31 @@
     {
     freez(&errMsg);
     errMsg = cloneString("Passwords do not match.");
     signupPage(conn);
     return;
     }
 
 /* pass all the checks, OK to create the account now */
 char encPwd[45] = "";
 encryptNewPwd(password, encPwd, sizeof(encPwd));
 safef(query,sizeof(query), "insert into gbMembers set "
     "userName='%s',password='%s',email='%s', "
     "lastUse=NOW(),accountActivated='N'",
     sqlEscapeString(user),sqlEscapeString(encPwd),sqlEscapeString(email));
 sqlUpdate(conn, query);
+/********** new signup process start *******************/
 setupNewAccount(conn, email, user);
 /* send out activate code mail, and display the mail confirmation box */
 /* and comback here to contine back to URL */
 hPrintf("<h2>UCSC Genome Browser</h2>\n"
     "<p align=\"left\">\n"
     "</p>\n"
     "<h3>User %s successfully added.</h3>\n", user);
 cartRemove(cart, "hgLogin_email");
 cartRemove(cart, "hgLogin_email2");
 cartRemove(cart, "hgLogin_userName");
 cartRemove(cart, "user");
 cartRemove(cart, "token");
 //backToHgSession(1);
 returnToURL(1);
 }
@@ -1039,30 +1106,32 @@
  * dispatches to the appropriate page-maker. */
 {
 struct sqlConnection *conn = hConnectCentral();
 cart = theCart;
 
 if (cartVarExists(cart, "hgLogin.do.changePasswordPage"))
     changePasswordPage(conn);
 else if (cartVarExists(cart, "hgLogin.do.changePassword"))
     changePassword(conn);
 else if (cartVarExists(cart, "hgLogin.do.displayAccHelpPage"))
     displayAccHelpPage(conn);
 else if (cartVarExists(cart, "hgLogin.do.accountHelp"))
     accountHelp(conn);
 else if (cartVarExists(cart, "hgLogin.do.activateAccount"))
     activateAccount(conn);
+else if (cartVarExists(cart, "hgLogin.do.displayActMailSuccess"))
+    displayActMailSuccess();
 else if (cartVarExists(cart, "hgLogin.do.displayMailSuccess"))
     displayMailSuccess();
 else if (cartVarExists(cart, "hgLogin.do.displayLoginPage"))
     displayLoginPage(conn);
 else if (cartVarExists(cart, "hgLogin.do.displayLogin"))
     displayLogin(conn);
 else if (cartVarExists(cart, "hgLogin.do.displayLogout"))
     displayLogoutSuccess();
 else if (cartVarExists(cart, "hgLogin.do.signup"))
     signup(conn);
 else
     signupPage(conn);
 
 hDisconnectCentral(&conn);
 cartRemovePrefix(cart, "hgLogin.do.");