637185cb51ee2ce0651a4defe22862d735dfb3ff kate Thu Nov 17 15:01:34 2016 -0800 Remove globals in response to code review. refs #17369 diff --git src/hg/hgGtexTrackSettings/hgGtexTrackSettings.c src/hg/hgGtexTrackSettings/hgGtexTrackSettings.c index 9170249..5cd306d 100644 --- src/hg/hgGtexTrackSettings/hgGtexTrackSettings.c +++ src/hg/hgGtexTrackSettings/hgGtexTrackSettings.c @@ -6,168 +6,166 @@ #include "common.h" #include "trackDb.h" #include "cart.h" #include "portable.h" #include "cheapcgi.h" #include "web.h" #include "hCommon.h" #include "hui.h" #include "gtexUi.h" #include "gtexInfo.h" #include "gtexTissue.h" /* Global Variables */ struct cart *cart = NULL; /* CGI and other variables */ struct hash *oldVars = NULL; /* Old contents of cart before it was updated by CGI */ -char *db = NULL; -char *version; /* GTEx release */ -struct trackDb *trackDb = NULL; -static void printTrackHeader() +static void printTrackHeader(char *db, struct trackDb *tdb) /* Print top banner with track labels */ // TODO: Try to simplify layout { char *assembly = stringBetween("(", ")", hFreezeFromDb(db)); puts( "\n" "
\n" "
\n" ); printf( " \n" " %s Track\n" " %s \n" " " " %s \n" -, trackDb->shortLabel, assembly, trackDb->longLabel); +, tdb->shortLabel, assembly, tdb->longLabel); puts( "\n" " \n" " \n" " \n" " \n" " \n" "
\n" "
\n" "
\n" "
GO
\n" " \n" "
\n" "
\n" "
\n"); } static void printBodyMap() { puts( " \n" " \n" " GTEx Body Map illustration not found\n" " \n"); } -static void printVisSelect() +static void printVisSelect(struct trackDb *tdb) /* Track visibility dropdown */ { -enum trackVisibility vis = trackDb->visibility; -vis = hTvFromString(cartUsualString(cart, trackDb->track, hStringFromTv(vis))); +enum trackVisibility vis = tdb->visibility; +vis = hTvFromString(cartUsualString(cart, tdb->track, hStringFromTv(vis))); boolean canPack = TRUE; -hTvDropDownClassVisOnlyAndExtra(trackDb->track, vis, canPack, "gbSelect normalText visDD", - trackDbSetting(trackDb, "onlyVisibility"), NULL); +hTvDropDownClassVisOnlyAndExtra(tdb->track, vis, canPack, "gbSelect normalText visDD", + trackDbSetting(tdb, "onlyVisibility"), NULL); } -static void printScoreFilter(struct cart *cart, char *track) +static void printScoreFilter(struct cart *cart, char *track, struct trackDb *tdb) /* Filter on overall gene expression score */ { char buf[512]; puts("Limit to genes scored at or above:\n"); -safef(buf, sizeof(buf), "%s.%s", trackDb->track, SCORE_FILTER); +safef(buf, sizeof(buf), "%s.%s", tdb->track, SCORE_FILTER); int score = cartUsualInt(cart, buf, 0); int minScore = 0, maxScore = 1000; cgiMakeIntVarWithLimits(buf, score, "Minimum score", 0, minScore, maxScore); printf( " (range %d-%d)\n", minScore, maxScore); } -static void printConfigPanel() +static void printConfigPanel(struct trackDb *tdb) /* Controls for track configuration (except for tissues) */ { -char *track = trackDb->track; +char *track = tdb->track; puts( " \n" "
\n" "
Configuration
\n" "
\n"); /* Track vis dropdown */ -printVisSelect(); +printVisSelect(tdb); puts( "
\n" "
\n"); /* GTEx-specific track controls, layout in 3 rows */ puts( " \n" "
\n" "
\n"); -gtexGeneUiGeneLabel(cart, track, trackDb); +gtexGeneUiGeneLabel(cart, track, tdb); puts( "
\n" "
\n"); -gtexGeneUiGeneModel(cart, track, trackDb); +gtexGeneUiGeneModel(cart, track, tdb); puts( "
\n" "
\n"); puts( " \n" "
\n" "
\n"); -gtexGeneUiLogTransform(cart, track, trackDb); +gtexGeneUiLogTransform(cart, track, tdb); puts( "
\n"); puts( "
\n"); -gtexGeneUiViewLimits(cart, track, trackDb); +gtexGeneUiViewLimits(cart, track, tdb); puts( "
\n" "
\n"); puts( " \n" "
\n"); puts( "
\n"); -gtexGeneUiCodingFilter(cart, track, trackDb); +gtexGeneUiCodingFilter(cart, track, tdb); puts( "
\n"); /* Filter on score */ puts( "
\n"); -printScoreFilter(cart, track); +printScoreFilter(cart, track, tdb); puts( "
\n" "
\n"); puts( " \n"); } -static void printTissueTable() +static void printTissueTable(struct trackDb *tdb) /* Output HTML with tissue labels and colors, in 2 columns, to fit next to body map */ { +char *version = gtexVersion(tdb->track); struct gtexTissue *tis, *tissues = gtexGetTissues(version); char var[512]; -safef(var, sizeof var, "%s.%s", trackDb->track, GTEX_TISSUE_SELECT); +safef(var, sizeof var, "%s.%s", tdb->track, GTEX_TISSUE_SELECT); struct hash *selectedHash = cartHashList(cart, var); struct gtexTissue **tisTable = NULL; int count = slCount(tissues); AllocArray(tisTable, count); int i=0, col=0; int cols = 2; int last = count/2 + 1; puts( " \n" "
\n" "
Tissues
\n" "
\n" " Click label below or in Body Map to set or clear a tissue\n" "
\n" @@ -212,151 +210,150 @@ var, tis->name, isChecked ? "checked" : ""); puts( ""); col++; if (col > cols-1) { puts("\n"); col = 0; } } puts( "\n"); puts( ""); char buf[512]; -safef(buf, sizeof(buf), "%s%s.%s", cgiMultListShadowPrefix(), trackDb->track, GTEX_TISSUE_SELECT); +safef(buf, sizeof(buf), "%s%s.%s", cgiMultListShadowPrefix(), tdb->track, GTEX_TISSUE_SELECT); cgiMakeHiddenVar(buf, "0"); } -static void printTrackConfig() +static void printTrackConfig(struct trackDb *tdb) /* Print track configuration panels, including Body Map. The layout is 2-column. Left column is body map SVG. Right column has a top panel for configuration settings (non-tissue), and a lower panel with a tissue selection list. */ { puts( "\n" "
\n" "
\n"); printBodyMap(); puts( "
\n" "
\n"); -printConfigPanel(); -printTissueTable(); +printConfigPanel(tdb); +printTissueTable(tdb); puts( "
\n" "
\n"); } -static void printDataInfo() +static void printDataInfo(char *db, struct trackDb *tdb) { puts( "\n" "
\n" "
Data Information
\n" "
\n" // TODO: move click handler to JS " \n" "
\n" "
\n" ); puts( "
\n" "
\n"); puts("
"); -printUpdateTime(db, trackDb, NULL); +printUpdateTime(db, tdb, NULL); puts("
"); puts("
"); -makeSchemaLink(db, trackDb, "View table schema"); +makeSchemaLink(db, tdb, "View table schema"); puts("
"); puts( "
\n" "
\n"); } -static void printTrackDescription() +static void printTrackDescription(struct trackDb *tdb) { puts( "\n" "
\n" "
Track Description
\n" "
\n" " \n" "
\n" "
\n" "
\n" "
\n"); -puts(trackDb->html); +puts(tdb->html); puts( "
\n" "
\n"); } -static struct trackDb *getTrackDb(char *database, char *track) +static struct trackDb *getTrackDb(char *db, char *track) /* Check if this is an assembly with GTEx track and get trackDb */ { struct sqlConnection *conn = sqlConnect(db); if (conn == NULL) errAbort("Can't connect to database %s\n", db); char where[256]; safef(where, sizeof(where), "tableName='%s'", track); // TODO: use hdb, hTrackDbList to get table names of trackDb, struct trackDb *tdb = trackDbLoadWhere(conn, "trackDb", where); trackDbAddTableField(tdb); sqlDisconnect(&conn); return tdb; } static void doMiddle(struct cart *theCart) /* Send HTML with javascript to display the user interface. */ { cart = theCart; +char *db = NULL, *genome = NULL, *clade = NULL; +getDbGenomeClade(cart, &db, &genome, &clade, oldVars); // Start web page with new-style header webStartGbNoBanner(cart, db, "Genome Browser GTEx Track Settings"); puts(""); -char *genome = NULL, *clade = NULL; -getDbGenomeClade(cart, &db, &genome, &clade, oldVars); char *track = cartString(cart, "g"); -trackDb = getTrackDb(db, track); -if (!trackDb) +struct trackDb *tdb = getTrackDb(db, track); +if (!tdb) errAbort("No GTEx track %s found in database %s\n", track, db); -version = gtexVersion(track); // Container for bootstrap grid layout puts( "
\n"); // Print form with configuration HTML, and track description printf( "
\n\n", hgTracksName(), cartUsualString(cart, "formMethod", "POST")); -printTrackHeader(); -printTrackConfig(); +printTrackHeader(db, tdb); +printTrackConfig(tdb); puts( "
"); -printDataInfo(); -if (trackDb->html) - printTrackDescription(); +printDataInfo(db, tdb); +if (tdb->html) + printTrackDescription(tdb); puts( "
"); // Initialize illustration display and handle mouseover and clicks puts(""); webIncludeFile("inc/gbFooter.html"); webEndJWest(); } int main(int argc, char *argv[]) /* Process CGI / command line. */ { /* Null terminated list of CGI Variables we don't want to save to cart */