void doMiddle(struct cart *theCart) /* Set up pretty web display and save cart in global. */ { char *key = NULL; char *file = NULL; cart = theCart; key = cartOptionalString(cart, "key"); if (isValidKey(key)) { file = cartOptionalString(cart, "file"); if(NULL == file) { printIndexFile(); } else { printFile(file); } } else { cartWebStart(theCart, database, "SECURE CGI \n"); cartRemove(cart, "key"); printf("INVALID KEY\n"); cartWebEnd(); } }
static boolean forCurTable() /* Return TRUE if cart Identifier stuff is for curTable. */ { char *identifierDb = cartOptionalString(cart, hgtaIdentifierDb); char *identifierTable = cartOptionalString(cart, hgtaIdentifierTable); return (identifierDb && identifierTable && sameString(identifierDb, database) && (sameString(identifierTable, curTable) || sameString(connectingTableForTrack(identifierTable), curTable))); }
void doSetUserRegions(struct sqlConnection *conn) /* Respond to set regions button. */ { char *oldPasted = cartUsualString(cart, hgtaEnteredUserRegions, ""); char *db = cartOptionalString(cart, hgtaUserRegionsDb); if (db && !sameString(db, database)) oldPasted = ""; htmlOpen("Enter region definition\n"); hPrintf("<FORM ACTION=\"%s\" METHOD=POST " " ENCTYPE=\"multipart/form-data\" NAME=\"mainForm\">\n", getScriptName()); cartSaveSession(cart); hPrintf("<TABLE><TR><TD ALIGN=LEFT>\n"); hPrintf("Paste regions:"); hPrintf("</TD><TD ALIGN=RIGHT>"); hPrintf("Or upload file: <INPUT TYPE=FILE NAME=\"%s\"> <BR>\n", hgtaEnteredUserRegionFile); hPrintf("</TD></TR><TR><TD COLSPAN=2 ALIGN=LEFT>\n"); cgiMakeTextArea(hgtaEnteredUserRegions, oldPasted, 10, 70); hPrintf("</TD></TR><TR><TD COLSPAN=2 ALIGN=LEFT>\n"); cgiMakeButton(hgtaDoSubmitUserRegions, "submit"); hPrintf(" "); cgiMakeButton(hgtaDoClearSetUserRegionsText, "clear"); hPrintf(" "); cgiMakeButton(hgtaDoMainPage, "cancel"); hPrintf("</TD></TR></TABLE>"); hPrintf("</FORM><BR>\n"); webIncludeHelpFile("hgTbUserRegionsHelp", FALSE); htmlClose(); }
void doMiddle(struct cart *cart) /* Write body of web page. */ { struct trackDb *tdbList = NULL; char *organism = NULL; char *db = NULL; getDbAndGenome(cart, &db, &organism, NULL); char *chrom = cartUsualString(cart, "c", hDefaultChrom(db)); measureTiming = isNotEmpty(cartOptionalString(cart, "measureTiming")); // QUESTION: Do We need track list ??? trackHash ??? Can't we just get one track and no children trackHash = trackHashMakeWithComposites(db,chrom,&tdbList,FALSE); cartWebStart(cart, db, "Search for " FILE_SEARCH_WHAT " in the %s %s Assembly", organism, hFreezeFromDb(db)); webIncludeResourceFile("HGStyle.css"); webIncludeResourceFile("jquery-ui.css"); webIncludeResourceFile("ui.dropdownchecklist.css"); jsIncludeFile("jquery.js", NULL); jsIncludeFile("jquery-ui.js", NULL); jsIncludeFile("ui.dropdownchecklist.js",NULL); jsIncludeFile("utils.js",NULL); // This line is needed to get the multi-selects initialized jsIncludeFile("ddcl.js",NULL); printf("<script type='text/javascript'>$(document).ready(function() " "{ findTracks.updateMdbHelp(0); });</script>\n"); doFileSearch(db,organism,cart,tdbList); printf("<BR>\n"); webEnd(); }
int bigFileMaxOutput() /* return maxOut value (cart variable defined on curTable) */ { char *maxOutputStr = NULL; char *name; int maxOut; char *maxOutput = NULL; if (isCustomTrack(curTable)) name = filterFieldVarName("ct", curTable, "_", filterMaxOutputVar); else name = filterFieldVarName(database, curTable, "_", filterMaxOutputVar); maxOutputStr = cartOptionalString(cart, name); /* Don't modify(stripChar) the values sitting in the cart hash */ if (NULL == maxOutputStr) maxOutput = cloneString(maxOutMenu[0]); else maxOutput = cloneString(maxOutputStr); stripChar(maxOutput, ','); maxOut = sqlUnsigned(maxOutput); freeMem(maxOutput); return maxOut; }
static void getVar(struct cartJson *cj, struct hash *paramHash) /* Print out the requested cart var(s). varString may be a comma-separated list. * If a var is a list variable, prints out a list of values for that var. */ { char *varString = cartJsonRequiredParam(paramHash, "var", cj->jw, "get"); if (! varString) return; struct slName *varList = slNameListFromComma(varString), *var; for (var = varList; var != NULL; var = var->next) { if (cartListVarExists(cj->cart, var->name)) { // Use cartOptionalSlNameList and return a list: struct slName *valList = cartOptionalSlNameList(cj->cart, var->name); jsonWriteSlNameList(cj->jw, var->name, valList); slFreeList(&valList); } else { // Regular single-value variable (or not in the cart): char *val = cartOptionalString(cj->cart, var->name); //#*** TODO: move jsonStringEscape inside jsonWriteString char *encoded = jsonStringEscape(val); jsonWriteString(cj->jw, var->name, encoded); freeMem(encoded); } } slFreeList(&varList); }
void dispatch() /* Set up a connection to database and dispatch control * based on hgpDo type var. */ { struct sqlConnection *conn = sqlConnect(visiDb); if (cartVarExists(cart, hgpDoThumbnails)) doThumbnails(conn); else if (cartVarExists(cart, hgpDoImage)) doImage(conn); else if (cartVarExists(cart, hgpDoProbe)) doProbe(conn); else if (cartVarExists(cart, hgpDoControls)) doControls(conn); else if (cartVarExists(cart, hgpDoId)) doId(conn); #ifdef SOON else if (cartVarExists(cart, hgpDoConfig)) configPage(conn); #endif /* SOON */ else if (cartVarExists(cart, hgpDoSearch)) doDefault(conn, TRUE); else { char *oldListSpec = hashFindVal(oldCart, hgpListSpec); char *newListSpec = cartOptionalString(cart, hgpListSpec); boolean isNew = differentStringNullOk(oldListSpec, newListSpec); doDefault(conn, isNew); } cartRemovePrefix(cart, hgpDoPrefix); }
struct slName *hubConnectHubsInCart(struct cart *cart) /* Return list of track hub ids that are turned on. */ { hubConnectRemakeTrackHubVar(cart); char *trackHubString = cartOptionalString(cart, hubConnectTrackHubsVarName); return slNameListFromString(trackHubString, ' '); }
static void themeDropDown(struct cart* cart) /* Create drop down for UI themes. * specfied in hg.conf like this * browser.theme.modern=background.png,HGStyle * */ { struct slName* themes = cfgNamesWithPrefix("browser.theme."); //struct slName* themes = cfgNames(); if (themes==NULL) return; hPrintf("<TR><TD>website style:"); hPrintf("<TD style=\"text-align: right\">"); // create labels for drop down box by removing prefix from hg.conf keys char *labels[50]; struct slName* el; int i = 0; el = themes; for (el = themes; el != NULL && i<50; el = el->next) { char* name = el->name; name = chopPrefix(name); // chop off first two words name = chopPrefix(name); labels[i] = name; i++; } char* currentTheme = cartOptionalString(cart, "theme"); hDropList("theme", labels, i, currentTheme); slFreeList(themes); hPrintf("</TD>"); }
boolean userSettingsProcessForm(struct userSettings *us) /* Handle button press in userSettings form. * If this returns TRUE then form is finished processing * and you can call something to make the next page. */ { struct cart *cart = us->cart; char *command = cartString(cart, us->formVar); boolean retVal = TRUE; char *name = cartNonemptyString(cart, us->nameVar); command = trimSpaces(command); if (sameWord(command, "save") && name != NULL) { char *varName = settingsVarName(us->savePrefix, name); saveSettings(us, varName); freez(&varName); } else if (startsWith(command, "load") && name != NULL) { userSettingsUseSelected(us); } else if (startsWith("delete", command)) { char *which = cartOptionalString(cart, us->listDisplayVar); if (which != NULL) { char *varName = settingsVarName(us->savePrefix, which); cartRemove(cart, varName); userSettingsSaveForm(us); retVal = FALSE; } } cartRemove(cart, us->formVar); return retVal; }
void doH1n1Gene(struct trackDb *tdb, char *item) /* Show details page for H1N1 Genes and Regions annotations track. */ { struct sqlConnection *conn = hAllocConn(database); struct sqlResult *sr; char query[256]; char **row; char *chrom, *chromStart, *chromEnd; char *gene=NULL; genericHeader(tdb, item); gene = item; printf("<B>Gene: </B> %s\n<BR>", gene); sqlSafef(query, sizeof query, "select chrom, chromStart, chromEnd from h1n1Gene where name='%s';", gene); sr = sqlMustGetResult(conn, query); row = sqlNextRow(sr); if (row != NULL) { chrom = row[0]; chromStart = row[1]; chromEnd = row[2]; printPosOnChrom(chrom, atoi(chromStart), atoi(chromEnd), NULL, FALSE, item); } sqlFreeResult(&sr); hFreeConn(&conn); htmlHorizontalLine(); printf("<H3>Protein Structure Analysis and Prediction</H3>"); printf("<B>3D Structure Prediction of consensus sequence (with variations of all selected sequences highlighted):"); printf("<BR>PDB file:</B> "); char pdbUrl[PATH_LEN]; safef(pdbUrl, sizeof(pdbUrl), "%s/%s/decoys/%s.try1-opt3.pdb.gz", getH1n1StructUrl(), item, item); // Modeller stuff char modelPdbUrl[PATH_LEN]; if (getH1n1Model(gene, modelPdbUrl)) { char *selectFile = cartOptionalString(cart, gisaidAaSeqList); struct tempName imageFile, chimeraScript, chimerax; mkH1n1StructData(gene, selectFile, NULL, &imageFile, &chimeraScript); mkChimerax(gene, modelPdbUrl, chimeraScript.forCgi, &chimerax); printf("<A HREF=\"%s\" TARGET=_blank>%s</A>, view with <A HREF=\"%s\">Chimera</A><BR>\n", modelPdbUrl, gene, chimerax.forHtml); printf("<TABLE>\n"); printf("<TR>\n"); printf("<TD ALIGN=\"center\"><img src=\"%s\"></TD>", imageFile.forHtml); printf("</TR>\n"); printf("</TABLE>\n"); } htmlHorizontalLine(); printTrackHtml(tdb); sqlFreeResult(&sr); hFreeConn(&conn); }
void bigBedCustomClick(struct trackDb *tdb) /* Display details for BigWig custom tracks. */ { char *fileName = trackDbSetting(tdb, "bigDataUrl"); char *item = cartOptionalString(cart, "i"); int start = cartInt(cart, "o"); int end = cartInt(cart, "t"); bigBedClick(fileName, tdb, item, start, end, 0); }
void userSettingsUseSelected(struct userSettings *us) /* Use currently selected user settings. */ { char *setName = cartOptionalString(us->cart, us->nameVar); if (setName != NULL) { userSettingsUseNamed(us, setName); } }
char *userRegionsFileName() /* File name defined regions are in, or NULL if no such file. */ { char *fileName = cartOptionalString(cart, hgtaUserRegionsFile); char *db = cartOptionalString(cart, hgtaUserRegionsDb); if (db && !sameString(database, db)) return NULL; if (fileName == NULL) return NULL; if (fileExists(fileName)) return fileName; else { cartRemove(cart, hgtaUserRegionsFile); cartRemove(cart, hgtaRegionType); return NULL; } }
static char *checkForNew( struct cart *cart) /* see if the user just typed in a new hub url, return id if so */ { struct hubConnectStatus *hub; char *url = cartOptionalString(cart, hgHubDataClearText); if (url != NULL) disconnectHubsSamePrefix(cart, url); else url = cartOptionalString(cart, hgHubDataText); if (url == NULL) return NULL; trimSpaces(url); gNewHub = hub = getAndSetHubStatus( cart, url, TRUE); cartRemove(cart, hgHubDataClearText); cartRemove(cart, hgHubDataText); char *wantFirstDb = cartOptionalString(cart, hgHubDoFirstDb); char *newDatabase = NULL; if ((wantFirstDb != NULL) && (hub->trackHub != NULL)) newDatabase = hub->trackHub->defaultDb; else { // Check to see if the user specified an assembly within // an assembly hub. char *assemblyDb = cartOptionalString(cart, hgHubGenome); if (assemblyDb != NULL) { char buffer[512]; safef(buffer, sizeof buffer, "hub_%d_%s", hub->id, assemblyDb); newDatabase = cloneString(buffer); } } cartRemove(cart, hgHubDoFirstDb); cartRemove(cart, hgHubGenome); return newDatabase; }
static void doClearHub(struct cart *theCart) { char *url = cartOptionalString(cart, hgHubDataText); printf("<pre>clearing hub %s\n",url); if (url != NULL) hubClearStatus(url); else errAbort("must specify url in %s\n", hgHubDataText); printf("<pre>Completed\n"); }
static void doResetHub(struct cart *theCart) { char *url = cartOptionalString(cart, hgHubDataText); if (url != NULL) { unsigned id = hubResetError(url); tryHubOpen(id); } else errAbort("must specify url in %s\n", hgHubDataText); }
void copyCartVars(struct cart *cart, char **source, char **dest, int count) /* Copy from source to dest. */ { int i; for (i=0; i<count; ++i) { char *s = cartOptionalString(cart, source[i]); if (s != NULL) cartSetString(cart, dest[i], s); else cartRemove(cart, dest[i]); } }
static void doDisconnectHub(struct cart *theCart) { char *id = cartOptionalString(cart, "hubId"); if (id != NULL) { char buffer[1024]; safef(buffer, sizeof buffer, "hgHubConnect.hub.%s", id); cartRemove(cart, buffer); } cartRemove(theCart, "hubId"); }
boolean anySubtrackMerge(char *db, char *table) /* Return TRUE if a subtrack merge has been specified on db.table. */ { char *smp = cartOptionalString(cart, hgtaSubtrackMergePrimary); if (smp == NULL) return FALSE; else { char *dbTable = getDbTable(db, table); boolean curTableHasMerge = sameString(smp, dbTable); freez(&dbTable); return curTableHasMerge; } }
void refineVisibility(struct column *colList) /* Consult cart to set on/off visibility. */ { char varName[128], *val; struct column *col; for (col = colList; col != NULL; col = col->next) { safef(varName, sizeof(varName), "%s%s.vis", colConfigPrefix, col->name); val = cartOptionalString(cart, varName); if (val != NULL) col->on = sameString(val, "1"); } }
static void setIfUnset(struct cartJson *cj, struct hash *paramHash) /* For each name in paramHash, if that cart variable doesn't already have a non-empty * value, set it to the value. */ { struct hashCookie cookie = hashFirst(paramHash); struct hashEl *hel; while ((hel = hashNext(&cookie)) != NULL) { if (isEmpty(cartOptionalString(cj->cart, hel->name))) { char *val = jsonStringVal((struct jsonElement *)(hel->val), hel->name); if (val) cartSetString(cj->cart, hel->name, val); } } }
char *identifierFileName() /* File name identifiers are in, or NULL if not for curTable or no such file. */ { char *fileName = cartOptionalString(cart, hgtaIdentifierFile); if (fileName == NULL) return NULL; if (! forCurTable()) return NULL; if (fileExists(fileName)) return fileName; else { cartRemove(cart, hgtaIdentifierFile); return NULL; } }
void doMiddle(struct cart *theCart) /* Write header and body of html page. */ { char *userSeq; char *db, *organism; boolean clearUserSeq = cgiBoolean("Clear"); cart = theCart; dnaUtilOpen(); orgChange = sameOk(cgiOptionalString("changeInfo"),"orgChange"); if (orgChange) { cgiVarSet("db", hDefaultDbForGenome(cgiOptionalString("org"))); } getDbAndGenome(cart, &db, &organism, oldVars); char *oldDb = cloneString(db); findClosestServer(&db, &organism); /* Get sequence - from userSeq variable, or if * that is empty from a file. */ if (clearUserSeq) { cartSetString(cart, "userSeq", ""); cartSetString(cart, "seqFile", ""); } userSeq = cartUsualString(cart, "userSeq", ""); if (isEmpty(userSeq)) { userSeq = cartOptionalString(cart, "seqFile"); } if (isEmpty(userSeq) || orgChange) { cartWebStart(theCart, db, "%s BLAT Search", trackHubSkipHubName(organism)); if (differentString(oldDb, db)) printf("<HR><P><EM><B>Note:</B> BLAT search is not available for %s %s; " "defaulting to %s %s</EM></P><HR>\n", hGenome(oldDb), hFreezeDate(oldDb), organism, hFreezeDate(db)); askForSeq(organism,db); cartWebEnd(); } else { blatSeq(skipLeadingSpaces(userSeq), organism); } }
static void pubsPslLoadItems(struct track *tg) /* load only psl items from a single article */ { // get articleId to filter on char *articleId = cartOptionalString(cart, PUBSFILTERNAME); if (articleId==NULL) return; struct sqlConnection *conn = hAllocConn(database); char *dispLabel = pubsArticleDispId(tg, conn, articleId); struct hash *idToSnip = pubsLookupSequences(tg, conn, articleId, TRUE); struct hash *idToSeq = pubsLookupSequences(tg, conn, articleId, FALSE); // change track label char *oldLabel = tg->longLabel; tg->longLabel = catTwoStrings("Individual matches for article ", dispLabel); freeMem(oldLabel); // filter and load items for this articleId char where[256]; safef(where, sizeof(where), " articleId=%s ", articleId); int rowOffset = 0; struct sqlResult *sr = NULL; sr = hRangeQuery(conn, tg->table, chromName, winStart, winEnd, where, &rowOffset); struct linkedFeatures *lfList = NULL; char **row = NULL; while ((row = sqlNextRow(sr)) != NULL) { struct psl *psl = pslLoad(row+rowOffset); slAddHead(&lfList, lfFromPsl(psl, TRUE)); char *shortSeq = hashFindVal(idToSeq, lfList->name); char *snip = hashFindVal(idToSnip, lfList->name); struct pubsExtra *extra = needMem(sizeof(struct pubsExtra)); extra->mouseOver=snip; extra->label=shortSeq; lfList->extra = extra; } sqlFreeResult(&sr); slReverse(&lfList); slSort(&lfList, linkedFeaturesCmp); tg->items = lfList; hFreeConn(&conn); }
static void getCladeOrgDbPos(struct cartJson *cj, struct hash *paramHash) /* Get cart's current clade, org, db, position and geneSuggest track. */ { jsonWriteObjectStart(cj->jw, "cladeOrgDb"); printCladeOrgDbTree(cj->jw); char *db = cartString(cj->cart, "db"); jsonWriteString(cj->jw, "db", db); char *org = cartUsualString(cj->cart, "org", hGenome(db)); jsonWriteString(cj->jw, "org", org); char *clade = cartUsualString(cj->cart, "clade", hClade(org)); jsonWriteString(cj->jw, "clade", clade); jsonWriteObjectEnd(cj->jw); char *position = cartOptionalString(cj->cart, "position"); if (isEmpty(position)) position = hDefaultPos(db); jsonWriteString(cj->jw, "position", position); printGeneSuggestTrack(cj, db); }
void userSettingsUseNamed(struct userSettings *us, char *setName) /* Use named collection of settings. */ { struct cart *cart = us->cart; char *varName = settingsVarName(us->savePrefix, setName); char *settings = cartOptionalString(cart, varName); if (settings != NULL) { struct hash *hash = hashVarLine(settings, 1); struct hashEl *list = hashElListHash(hash); struct hashEl *el; for (el = list; el != NULL; el = el->next) cartSetString(cart, el->name, el->val); slFreeList(&list); hashFree(&hash); } freez(&varName); }
static void saveSettings(struct userSettings *us, char *varName) /* Save captured settings to varName. */ { struct cart *cart = us->cart; struct slName *capture; struct dyString *dy = dyStringNew(4*1024); for (capture = us->saveList; capture != NULL; capture = capture->next) { char *name = capture->name; char *val = cartOptionalString(cart, name); if (val != NULL) { dyStringPrintf(dy, "%s=", name); dyStringAppendQuoted(dy, val); } } cartSetString(cart, varName, dy->string); dyStringFree(&dy); }
static char * outMafTableDrop(struct cart *cart, struct sqlConnection *conn) { struct slName *list = hTrackTablesOfType(conn, "wigMaf%%"); int count = slCount(list); if (count == 0) errAbort("There are no multiple alignments available for this genome."); char **tables = needMem(sizeof(char *) * count); char **tb = tables; char *mafTable = cartOptionalString(cart, hgtaCGIGeneMafTable); if (mafTable != NULL) { struct slName *l = list; for(; l; l=l->next) if (sameString(l->name, mafTable)) break; /* didn't find mafTable in list, reset it */ if (l == NULL) mafTable = NULL; } if (mafTable == NULL) { if ((mafTable = getConservationTrackName(conn)) == NULL) mafTable = list->name; cartSetString(cart, hgtaCGIGeneMafTable, mafTable); } for(; list; list = list->next) *tb++ = list->name; printf("<B>MAF table: </B>\n"); cgiMakeDropListFull(hgtaCGIGeneMafTable, tables, tables, count , mafTable, onChangeGenome()); return mafTable; }
boolean anyFilter() /* Return TRUE if any filter set. If there is filter state from a filter * defined on a different table, clear it. */ { char *filterTable = cartOptionalString(cart, hgtaFilterTable); if (filterTable == NULL) return FALSE; else { char *dbTable = getDbTable(database, curTable); boolean curTableHasFilter = sameString(filterTable, dbTable); freez(&dbTable); if (curTableHasFilter) return TRUE; else { removeFilterVars(); return FALSE; } } }