void webMain(struct liftOverChain *chain, char *dataFormat, boolean multiple) /* set up page for entering data */ { struct dbDb *dbList; char *fromOrg = hArchiveOrganism(chain->fromDb), *toOrg = hArchiveOrganism(chain->toDb); cgiParagraph( "This tool converts genome coordinates and genome annotation files " "between assemblies. " "The input data can be pasted into the text box, or uploaded from a file. " "If a pair of assemblies cannot be selected from the pull-down menus," " a direct lift between them is unavailable. " "However, a sequential lift may be possible. " "Example: lift from Mouse, May 2004, to Mouse, Feb. 2006, and then from Mouse, " "Feb. 2006 to Mouse, July 2007 to achieve a lift from mm5 to mm9. " ""); /* create HMTL form */ puts("<FORM ACTION=\"../cgi-bin/hgLiftOver\" METHOD=\"POST\" " " ENCTYPE=\"multipart/form-data\" NAME=\"mainForm\">\n"); cartSaveSession(cart); /* create HTML table for layout purposes */ puts("\n<TABLE WIDTH=\"100%%\">\n"); /* top two rows -- genome and assembly menus */ cgiSimpleTableRowStart(); cgiTableField("Original Genome: "); cgiTableField("Original Assembly: "); cgiTableField("New Genome: "); cgiTableField("New Assembly: "); cgiTableRowEnd(); cgiSimpleTableRowStart(); /* genome */ cgiSimpleTableFieldStart(); dbList = hGetLiftOverFromDatabases(); printSomeGenomeListHtmlNamed(HGLFT_FROMORG_VAR, chain->fromDb, dbList, onChange); cgiTableFieldEnd(); /* from assembly */ cgiSimpleTableFieldStart(); printAllAssemblyListHtmlParm(chain->fromDb, dbList, HGLFT_FROMDB_VAR, TRUE, onChange); cgiTableFieldEnd(); /* to assembly */ cgiSimpleTableFieldStart(); dbDbFreeList(&dbList); dbList = hGetLiftOverToDatabases(chain->fromDb); printLiftOverGenomeList(HGLFT_TOORG_VAR, chain->toDb, dbList, onChange); cgiTableFieldEnd(); cgiSimpleTableFieldStart(); printAllAssemblyListHtmlParm(chain->toDb, dbList, HGLFT_TODB_VAR, TRUE, ""); cgiTableFieldEnd(); cgiTableRowEnd(); cgiTableEnd(); cgiParagraph(" "); cgiSimpleTableStart(); cgiSimpleTableRowStart(); cgiSimpleTableFieldStart(); cgiTableField("Minimum ratio of bases that must remap:"); cgiTableFieldEnd(); cgiSimpleTableFieldStart(); cgiMakeDoubleVar(HGLFT_MINMATCH,chain->minMatch,6); cgiTableFieldEnd(); cgiTableRowEnd(); cgiSimpleTableRowStart(); cgiSimpleTableFieldStart(); cgiTableField("Minimum chain size in target:"); cgiTableFieldEnd(); cgiSimpleTableFieldStart(); cgiMakeIntVar(HGLFT_MINSIZET,chain->minSizeT,4); cgiTableFieldEnd(); cgiTableRowEnd(); cgiSimpleTableRowStart(); cgiSimpleTableFieldStart(); cgiTableField("Minimum hit size in query:"); cgiTableFieldEnd(); cgiSimpleTableFieldStart(); cgiMakeIntVar(HGLFT_MINSIZEQ,chain->minSizeQ,4); cgiTableFieldEnd(); cgiTableRowEnd(); cgiSimpleTableRowStart(); cgiSimpleTableFieldStart(); cgiTableField("Allow multiple output regions:"); cgiTableFieldEnd(); cgiSimpleTableFieldStart(); cgiMakeCheckBox(HGLFT_MULTIPLE,multiple); cgiTableFieldEnd(); cgiTableRowEnd(); cgiSimpleTableRowStart(); cgiSimpleTableFieldStart(); cgiTableField("Min ratio of alignment blocks/exons that must map:"); cgiTableFieldEnd(); cgiSimpleTableFieldStart(); cgiMakeDoubleVar(HGLFT_MINBLOCKS,chain->minBlocks,6); cgiTableFieldEnd(); cgiTableRowEnd(); cgiSimpleTableRowStart(); cgiSimpleTableFieldStart(); cgiTableField("If thickStart/thickEnd is not mapped, use the closest mapped base:"); cgiTableFieldEnd(); cgiSimpleTableFieldStart(); cgiMakeCheckBox(HGLFT_FUDGETHICK,(chain->fudgeThick[0]=='Y') ? TRUE : FALSE); cgiTableFieldEnd(); cgiTableRowEnd(); cgiTableEnd(); /* next row -- file format menu */ cgiParagraph( " For descriptions of the supported data formats, see the bottom of this page."); cgiSimpleTableStart(); cgiSimpleTableRowStart(); cgiTableField("Data Format: "); cgiSimpleTableFieldStart(); cgiMakeDropList(HGLFT_DATAFORMAT_VAR, formatList, sizeof(formatList)/sizeof (char*) - 1, dataFormat); cgiTableFieldEnd(); cgiTableRowEnd(); cgiTableEnd(); /* text box and two buttons (submit, reset) */ cgiParagraph(" Paste in data:\n"); cgiSimpleTableStart(); cgiSimpleTableRowStart(); cgiSimpleTableFieldStart(); cgiMakeTextArea(HGLFT_USERDATA_VAR, cartCgiUsualString(cart, HGLFT_USERDATA_VAR, NULL), 10, 80); cgiTableFieldEnd(); /* right element of table is a nested table * with two buttons stacked on top of each other */ cgiSimpleTableFieldStart(); cgiSimpleTableStart(); cgiSimpleTableRowStart(); cgiSimpleTableFieldStart(); cgiMakeSubmitButton(); cgiTableFieldEnd(); cgiTableRowEnd(); cgiSimpleTableRowStart(); cgiSimpleTableFieldStart(); cgiMakeClearButton("mainForm", HGLFT_USERDATA_VAR); cgiTableFieldEnd(); cgiTableRowEnd(); cgiTableEnd(); cgiTableFieldEnd(); cgiTableRowEnd(); cgiTableEnd(); /* next row -- file upload controls */ cgiParagraph(" Or upload data from a file:"); cgiSimpleTableStart(); cgiSimpleTableRowStart(); printf("<TD><INPUT TYPE=FILE NAME=\"%s\"></TD>\n", HGLFT_DATAFILE_VAR); puts("<TD><INPUT TYPE=SUBMIT NAME=SubmitFile VALUE=\"Submit File\"></TD>\n"); cgiTableRowEnd(); cgiTableEnd(); printf("<input type=\"hidden\" name=\"%s\" value=\"0\">\n", HGLFT_REFRESHONLY_VAR); puts("</FORM>\n"); cartSaveSession(cart); puts("</FORM>"); freeMem(fromOrg); freeMem(toOrg); }
void doMiddle() /* Write what goes between BODY and /BODY */ { pushWarnHandler(localWarn); if (!cgiServerHttpsIsOn()) usage(); struct sqlConnection *conn = edwConnectReadWrite(); printf("<FORM ACTION=\"edwWebRegisterScript\" METHOD=POST>\n"); printf("<B>Register Script with ENCODE Data Warehouse</B><BR>\n"); #ifdef SOON uglyf("HTTP_AUTHENTICATION: '%s'<BR>\n", getenv("HTTP_AUTHENTICATION")); uglyf("HTTP_AUTHORIZATION: '%s'<BR>\n", getenv("HTTP_AUTHORIZATION")); dumpEnv(mainEnv); #endif if (userEmail == NULL) { printf("Please sign in:"); printf("<INPUT TYPE=BUTTON NAME=\"signIn\" VALUE=\"sign in\" id=\"signin\">"); } else if (cgiVarExists("description")) { struct edwUser *user = edwUserFromEmail(conn, userEmail); if (user == NULL) edwWarnUnregisteredUser(userEmail); else { char password[HEXED_32_SIZE]; edwRandomHexed32(password); char babyName[HEXED_32_SIZE]; edwRandomBabble(babyName, sizeof(babyName)); edwRegisterScript(conn, user, babyName, password, cgiString("description")); printf("Script now registered.<BR>\n"); printf("The script user name is %s.<BR>\n", babyName); printf("The script password is %s.<BR>\n", password); printf("Please save the script user name and password somewhere. "); puts("Please pass these two and the URL"); puts(" of your validated manifest file (validated.txt) to our server to submit data."); puts("Construct a URL of the form:<BR>"); printf("<PRE>https://encodedcc.sdsc.edu/cgi-bin/edwScriptSubmit" "?user=%s&password=%s&url=%s\n</PRE>", babyName, password, cgiEncode("http://your.host.edu/your_dir/validated.txt")); puts("That is pass the CGI encoded variables user, password, and url to the "); puts("web services CGI at"); puts("https://encodedcc.sdsc.edu/cgi-bin/edwScriptSubmit. "); puts("You can use the http://encodedcc.sdsc.edu/cgi-bin/edwWebBrowse site to "); puts("monitor your submission interactively. Please contact your wrangler if you "); puts("have any questions.<BR>"); cgiMakeButton("submit", "Register another script"); } printf(" "); edwPrintLogOutButton(); } else { struct edwUser *user = edwUserFromEmail(conn, userEmail); edwPrintLogOutButton(); if (user == NULL) edwWarnUnregisteredUser(userEmail); else { printf("%s is authorized to register a new script<BR>\n", userEmail); printf("<BR>Script description:\n"); cgiMakeTextVar("description", NULL, 80); cgiMakeSubmitButton(); } } printf("</FORM>\n"); }