2ba572dc8bbe18b3398dcf17205dafdd52ab396a braney Sat May 24 10:01:21 2014 -0700 updates to hgHubConnect to interface to make it less confusing. Nowconnection and disconnection put you on the gateway page. diff --git src/hg/hgHubConnect/hgHubConnect.c src/hg/hgHubConnect/hgHubConnect.c index 2b54555..8f9e737 100644 --- src/hg/hgHubConnect/hgHubConnect.c +++ src/hg/hgHubConnect/hgHubConnect.c @@ -12,42 +12,34 @@ #include "htmshell.h" #include "hdb.h" #include "hui.h" #include "cart.h" #include "dbDb.h" #include "web.h" #include "trackHub.h" #include "hubConnect.h" #include "dystring.h" #include "hPrint.h" #include "jsHelper.h" #include "obscure.h" #include "hgConfig.h" #include "trix.h" -#define hgHub "hgHub_" /* prefix for all control variables */ -#define hgHubDo hgHub "do_" /* prefix for all commands */ -#define hgHubDoClear hgHubDo "clear" -#define hgHubDoDisconnect hgHubDo "disconnect" -#define hgHubDoReset hgHubDo "reset" -#define hgHubDoSearch hgHubDo "search" -#define hgHubDoDeleteSearch hgHubDo "deleteSearch" struct cart *cart; /* The user's ui state. */ struct hash *oldVars = NULL; -static char *destUrl = "../cgi-bin/hgTracks"; static char *pageTitle = "Track Data Hubs"; char *database = NULL; char *organism = NULL; static void ourCellStart() { fputs("", stdout); // do not add a newline } static void ourCellEnd() { puts(""); } static void ourPrintCellLink(char *str, char *url) @@ -188,51 +180,55 @@ { // nothing to see here printf("No Unlisted Track Hubs"); printf(""); return; } // time to output the big table. First the header printf( " " "Display " "Hub Name " "Description " "Assemblies " "URL " - "Disconnect " "\n" "\n"); // start first row printf(""); int count = 0; for(hub = unlistedHubList; hub; hub = hub->next) { if (count) webPrintLinkTableNewRow(); // ends last row and starts a new one count++; // if there's an error message, we don't let people select it if (isEmpty(hub->errorMessage)) { ourCellStart(); char hubName[32]; safef(hubName, sizeof(hubName), "%s%u", hgHubConnectHubVarPrefix, hub->id); - cartMakeCheckBox(cart, hubName, FALSE); + if (cartUsualBoolean(cart, hubName, FALSE)) + printf("\n", hub->id); ourCellEnd(); } else { // give people a chance to clear the error ourCellStart(); printf( "\n" , hub->hubUrl); ourCellEnd(); } if (hub->trackHub != NULL) @@ -247,39 +243,30 @@ if (!isEmpty(hub->errorMessage)) printf("ERROR: %s " "Debug\n", hub->errorMessage); else if (hub->trackHub != NULL) ourPrintCell(hub->trackHub->longLabel); else ourPrintCell(""); if (hub->trackHub != NULL) printGenomes(hub->trackHub, count); else ourPrintCell(""); ourPrintCell(hub->hubUrl); - - ourCellStart(); - printf( - "\n" - , hub->id); - ourCellEnd(); } printf("\n"); printf(""); } static void addPublicHubsToHubStatus(struct sqlConnection *conn, char *publicTable, char *statusTable) /* add url's in the hubPublic table to the hubStatus table if they aren't there already */ { char query[1024]; sqlSafef(query, sizeof(query), "select hubUrl from %s where hubUrl not in (select hubUrl from %s)\n", publicTable, statusTable); struct sqlResult *sr = sqlGetResult(conn, query); char **row; while ((row = sqlNextRow(sr)) != NULL) { @@ -357,90 +344,117 @@ struct sqlResult *sr = sqlGetResult(conn, query); char **row; int count = 0; boolean gotAnyRows = FALSE; while ((row = sqlNextRow(sr)) != NULL) { ++count; char *url = row[0], *shortLabel = row[1], *longLabel = row[2], *dbList = row[3], *errorMessage = row[4], *descriptionUrl = row[6]; int id = atoi(row[5]); if ((urlSearchHash != NULL) && (hashLookup(urlSearchHash, url) == NULL)) continue; + struct slName *dbListNames = slNameListFromComma(dbList); + if (gotAnyRows) webPrintLinkTableNewRow(); else { /* output header */ printf("
\n"); printf(" " " " " " " " " " " " - " " "\n"); // start first row printf(""); gotAnyRows = TRUE; // allocate the hash to store hubUrl's publicHash = newHash(5); } if ((id != 0) && isEmpty(errorMessage)) { ourCellStart(); char hubName[32]; safef(hubName, sizeof(hubName), "%s%u", hgHubConnectHubVarPrefix, id); - cartMakeCheckBox(cart, hubName, FALSE); + if (cartUsualBoolean(cart, hubName, FALSE)) + printf("\n", id); + else + { + // get first name off of list of supported databases + char * name = dbListNames->name; + + // if the name isn't currently loaded, we assume it's a hub + if (!hDbExists(name)) + { + char buffer[512]; + + safef(buffer, sizeof buffer, "hub_%d_%s", id, name); + name = cloneString(buffer); + } + + printf("\n", url,name); + } + ourCellEnd(); } else if (!isEmpty(errorMessage)) { // give user a chance to clear the error ourCellStart(); printf( "" , url); ourCellEnd(); } else errAbort("cannot get id for hub with url %s\n", url); if (hasDescription && !isEmpty(descriptionUrl)) ourPrintCellLink(shortLabel, descriptionUrl); else ourPrintCell(shortLabel); if (isEmpty(errorMessage)) ourPrintCell(longLabel); else printf("", errorMessage); - printGenomeList(slNameListFromComma(dbList), count); // Leaking a bit of memory - ourPrintCell(url); + printGenomeList(dbListNames, count); hashStore(publicHash, url); } sqlFreeResult(&sr); if (gotAnyRows) { printf("
DisplayHub NameDescriptionAssembliesURL
ERROR: %s " "Debug
\n"); printf("
"); } return publicHash; } struct hash *hgHubConnectPublic() @@ -497,90 +511,65 @@ errAbort("must specify url in %s\n", hgHubDataText); } static void doClearHub(struct cart *theCart) { char *url = cartOptionalString(cart, hgHubDataText); printf("
clearing hub %s\n",url);
 if (url != NULL)
     hubClearStatus(url);
 else
     errAbort("must specify url in %s\n", hgHubDataText);
 printf("
Completed\n");
 }
 
-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");
-}
 
 static void checkTrackDbs(struct hubConnectStatus *hubList)
 {
 struct hubConnectStatus *hub = hubList;
 
 for(; hub; hub = hub->next)
     {
     struct errCatch *errCatch = errCatchNew();
     if (errCatchStart(errCatch))
 	{
 	hubAddTracks(hub, database);
 	}
     errCatchEnd(errCatch);
     if (errCatch->gotError)
 	{
 	hub->errorMessage = cloneString(errCatch->message->string);
 	hubUpdateStatus( errCatch->message->string, hub);
 	}
     else
 	hubUpdateStatus(NULL, hub);
     }
 }
 
 void doMiddle(struct cart *theCart)
 /* Write header and body of html page. */
 {
-boolean gotDisconnect = FALSE;
-
 cart = theCart;
 
 if (cartVarExists(cart, hgHubDoClear))
     {
     doClearHub(cart);
     cartWebEnd();
     return;
     }
 
-if (cartVarExists(cart, hgHubDoDisconnect))
-    {
-    gotDisconnect = TRUE;
-    doDisconnectHub(cart);
-
-    // now rebuild the cart variable ("trackHubs") that has which lists which
-    // hubs are on.
-    hubConnectHubsInCart(cart);
-    }
-
 if (cartVarExists(cart, hgHubDoReset))
     {
     doResetHub(cart);
     }
 
 cartWebStart(cart, NULL, "%s", pageTitle);
 jsIncludeFile("jquery.js", NULL);
 jsIncludeFile("utils.js", NULL);
 jsIncludeFile("jquery-ui.js", NULL);
 
 webIncludeResourceFile("jquery-ui.css");
 
 jsIncludeFile("ajax.js", NULL);
 jsIncludeFile("hgHubConnect.js", NULL);
 jsIncludeFile("jquery.cookie.js", NULL);
@@ -606,88 +595,94 @@
 char *surveyLabel = cfgOptionEnv("HGDB_HUB_SURVEY_LABEL", "hubSurveyLabel");
 
 if (survey && differentWord(survey, "off"))
     hPrintf("%s\n", survey, surveyLabel ? surveyLabel : "Take survey");
 hPutc('\n');
 
 // check to see if we have any new hubs
 hubCheckForNew(cart);
 
 // grab all the hubs that are listed in the cart
 struct hubConnectStatus *hubList =  hubConnectStatusListFromCartAll(cart);
 
 checkTrackDbs(hubList);
 
 // here's a little form for the add new hub button
-printf("
\n", "../cgi-bin/hgHubConnect"); +printf("\n", "../cgi-bin/hgGateway"); +cgiMakeHiddenVar("hubUrl", ""); +cgiMakeHiddenVar(hgHubConnectRemakeTrackHub, "on"); +puts("
"); + +// this is the form for the connect hub button +printf("
\n", "../cgi-bin/hgGateway"); cgiMakeHiddenVar("hubUrl", ""); +cgiMakeHiddenVar("db", ""); +cgiMakeHiddenVar(hgHubDoConnect, "on"); cgiMakeHiddenVar(hgHubConnectRemakeTrackHub, "on"); puts("
"); // this is the form for the disconnect hub button -printf("
\n", "../cgi-bin/hgHubConnect"); +printf("\n", "../cgi-bin/hgGateway"); +cgiMakeHiddenVar("db", "hg19"); cgiMakeHiddenVar("hubId", ""); cgiMakeHiddenVar(hgHubDoDisconnect, "on"); cgiMakeHiddenVar(hgHubConnectRemakeTrackHub, "on"); puts("
"); // this is the form for the reset hub button printf("
\n", "../cgi-bin/hgHubConnect"); cgiMakeHiddenVar("hubUrl", ""); cgiMakeHiddenVar(hgHubDoReset, "on"); cgiMakeHiddenVar(hgHubConnectRemakeTrackHub, "on"); puts("
"); // this is the form for the search hub button printf("
\n", "../cgi-bin/hgHubConnect"); cgiMakeHiddenVar(hgHubSearchTerms, ""); cgiMakeHiddenVar(hgHubDoSearch, "on"); puts("
"); // ... and now the main form -if (cartVarExists(cart, hgHubConnectCgiDestUrl)) - destUrl = cartOptionalString(cart, hgHubConnectCgiDestUrl); -printf("
\n", destUrl); +printf("\n", "../cgi-bin/hgGateway"); cartSaveSession(cart); // we have two tabs for the public and unlisted hubs printf("
" " "); struct hash *publicHash = hgHubConnectPublic(); hgHubConnectUnlisted(hubList, publicHash); printf("
"); printf("
"); -cgiMakeButton("Submit", "Use Selected Hubs"); char *emailAddress = cfgOptionDefault("hub.emailAddress","genome@soe.ucsc.edu"); printf("" "Contact %s to add a public hub." "\n", emailAddress,emailAddress); printf("
"); cgiMakeHiddenVar(hgHubConnectRemakeTrackHub, "on"); printf("\n"); puts("
"); cartWebEnd(); } char *excludeVars[] = {"Submit", "submit", "hc_one_url", - hgHubDoReset, hgHubDoClear, hgHubDoDisconnect, hgHubDataText, + hgHubDoReset, hgHubDoClear, hgHubDoDisconnect,hgHubDoConnect, hgHubDataText, hgHubConnectRemakeTrackHub, NULL}; int main(int argc, char *argv[]) /* Process command line. */ { long enteredMainTime = clock1000(); oldVars = hashNew(10); setUdcCacheDir(); cgiSpoof(&argc, argv); cartEmptyShell(doMiddle, hUserCookie(), excludeVars, oldVars); cgiExitTime("hgHubConnect", enteredMainTime); return 0; }