9684047874667451e47229f16b5c9eab60286850 braney Sat Apr 11 12:15:39 2015 -0700 change mirror redirect to be opt-in. diff --git src/hg/hgSession/hgSession.c src/hg/hgSession/hgSession.c index c00a0f5..645bc31 100644 --- src/hg/hgSession/hgSession.c +++ src/hg/hgSession/hgSession.c @@ -588,32 +588,30 @@ void cleanHgSessionFromCart(struct cart *cart) /* Remove hgSession action variables that should not stay in the cart. */ { char varName[256]; safef(varName, sizeof(varName), "%s%s", cgiBooleanShadowPrefix(), hgsSharePrefix); cartRemovePrefix(cart, varName); cartRemovePrefix(cart, hgsSharePrefix); cartRemovePrefix(cart, hgsLoadPrefix); cartRemovePrefix(cart, hgsLoadLocalFileName); cartRemovePrefix(cart, hgsDeletePrefix); cartRemovePrefix(cart, hgsDo); cartRemove(cart, hgsOldSessionName); cartRemove(cart, hgsCancel); } -void checkForCustomTracks(struct dyString *dyMessage); - #define INITIAL_USE_COUNT 0 char *doNewSession() /* Save current settings in a new named session. * Return a message confirming what we did. */ { struct dyString *dyMessage = dyStringNew(2048); char *sessionName = trimSpaces(cartString(cart, hgsNewSessionName)); char *encSessionName = cgiEncodeFull(sessionName); boolean shareSession = cartBoolean(cart, hgsNewSessionShare); char *userName = getLinkUserName(); char *encUserName = cgiEncodeFull(userName); struct sqlConnection *conn = hConnectCentral(); if (sqlTableExists(conn, namedSessionTable)) { @@ -667,141 +665,42 @@ if (useCount > INITIAL_USE_COUNT) dyStringPrintf(dyMessage, "Overwrote the contents of session <B>%s</B> " "(that %s be shared with other users). " "%s %s", htmlEncode(sessionName), (shareSession ? "may" : "may not"), getSessionLink(encUserName, encSessionName), getSessionEmailLink(encUserName, encSessionName)); else dyStringPrintf(dyMessage, "Added a new session <B>%s</B> that %s be shared with other users. " "%s %s", htmlEncode(sessionName), (shareSession ? "may" : "may not"), getSessionLink(encUserName, encSessionName), getSessionEmailLink(encUserName, encSessionName)); - checkForCustomTracks(dyMessage); + cartCheckForCustomTracks(cart, dyMessage); } else dyStringPrintf(dyMessage, "Sorry, required table %s does not exist yet in the central " "database (%s). Please ask a developer to create it using " "kent/src/hg/lib/namedSessionDb.sql .", namedSessionTable, sqlGetDatabase(conn)); hDisconnectCentral(&conn); return dyStringCannibalize(&dyMessage); } -void checkForCustomTracks(struct dyString *dyMessage) -/* Scan cart for ctfile_<db> variables. Tally up the databases that have - * live custom tracks and those that have expired custom tracks. */ -/* While we're at it, also look for saved blat results. */ -{ -struct hashEl *helList = cartFindPrefix(cart, CT_FILE_VAR_PREFIX); -if (helList != NULL) - { - struct hashEl *hel; - boolean gotLiveCT = FALSE, gotExpiredCT = FALSE; - struct slName *liveDbList = NULL, *expiredDbList = NULL, *sln = NULL; - for (hel = helList; hel != NULL; hel = hel->next) - { - char *db = hel->name + strlen(CT_FILE_VAR_PREFIX); - boolean thisGotLiveCT = FALSE, thisGotExpiredCT = FALSE; - /* If the file doesn't exist, just remove the cart variable so it - * doesn't get copied from session to session. If it does exist, - * leave it up to customFactoryTestExistence to parse the file for - * possible customTrash table references, some of which may exist - * and some not. */ - if (!fileExists(hel->val)) - { - cartRemove(cart, hel->name); - thisGotExpiredCT = TRUE; - } - else - { - customFactoryTestExistence(db, hel->val, - &thisGotLiveCT, &thisGotExpiredCT); - } - if (thisGotLiveCT) - slNameAddHead(&liveDbList, db); - if (thisGotExpiredCT) - slNameAddHead(&expiredDbList, db); - gotLiveCT |= thisGotLiveCT; - gotExpiredCT |= thisGotExpiredCT; - } - if (gotLiveCT) - { - slSort(&liveDbList, slNameCmp); - dyStringPrintf(dyMessage, - "<P>Note: the session has at least one active custom " - "track (in database "); - for (sln = liveDbList; sln != NULL; sln = sln->next) - dyStringPrintf(dyMessage, "<A HREF=\"hgCustom?%s&db=%s\">%s</A>%s", - cartSidUrlString(cart), sln->name, - sln->name, (sln->next ? sln->next->next ? ", " : " and " : "")); - dyStringAppend(dyMessage, "; click on the database link " - "to manage custom tracks). "); - - } - if (gotExpiredCT) - { - slSort(&expiredDbList, slNameCmp); - dyStringPrintf(dyMessage, - "<P>Note: the session has at least one expired custom " - "track (in database "); - for (sln = expiredDbList; sln != NULL; sln = sln->next) - dyStringPrintf(dyMessage, "%s%s", - sln->name, (sln->next ? sln->next->next ? ", " : " and " : "")); - dyStringPrintf(dyMessage, - "), so it may not appear as originally intended. "); - } - dyStringPrintf(dyMessage, - "Custom tracks are subject to an expiration policy described in the " - "<A HREF=\"../goldenPath/help/hgSessionHelp.html#CTs\" TARGET=_BLANK>" - "Session documentation</A>.</P>"); - slNameFreeList(&liveDbList); - slNameFreeList(&expiredDbList); - } -/* Check for saved blat results (quasi custom track). */ -char *ss = cartOptionalString(cart, "ss"); -if (isNotEmpty(ss)) - { - char buf[1024]; - char *words[2]; - int wordCount; - boolean exists = FALSE; - safecpy(buf, sizeof(buf), ss); - wordCount = chopLine(buf, words); - if (wordCount < 2) - exists = FALSE; - else - exists = fileExists(words[0]) && fileExists(words[1]); - - if (exists) - dyStringPrintf(dyMessage, - "<P>Note: the session contains BLAT results. "); - else - dyStringPrintf(dyMessage, - "<P>Note: the session contains an expired reference to " - "previously saved BLAT results, so it may not appear as " - "originally intended. "); - dyStringPrintf(dyMessage, - "BLAT results are subject to an " - "<A HREF=\"../goldenPath/help/hgSessionHelp.html#CTs\" TARGET=_BLANK>" - "expiration policy</A>."); - } -} char *doUpdateSessions() /* Look for cart variables matching prefixes for sharing/unsharing, * loading or deleting a previously saved session. * Return a message confirming what we did, or NULL if no such variables * were in the cart. */ { struct dyString *dyMessage = dyStringNew(1024); struct hashEl *cartHelList = NULL, *hel = NULL; struct sqlConnection *conn = hConnectCentral(); char *userName = getLinkUserName(); char *encUserName = cgiEncodeFull(userName); boolean didSomething = FALSE; char query[512]; @@ -843,31 +742,31 @@ hel = cartFindPrefix(cart, hgsLoadPrefix); if (hel != NULL) { char *encSessionName = hel->name + strlen(hgsLoadPrefix); char *sessionName = cgiDecodeClone(encSessionName); char wildStr[256]; safef(wildStr, sizeof(wildStr), "%s*", hgsLoadPrefix); dyStringPrintf(dyMessage, "Loaded settings from session <B>%s</B>. %s %s<BR>\n", htmlEncode(sessionName), getSessionLink(encUserName, encSessionName), getSessionEmailLink(encUserName, encSessionName)); cartLoadUserSession(conn, userName, sessionName, cart, NULL, wildStr); hubConnectLoadHubs(cart); cartCopyCustomTracks(cart); - checkForCustomTracks(dyMessage); + cartCheckForCustomTracks(cart, dyMessage); didSomething = TRUE; } cartHelList = cartFindPrefix(cart, hgsDeletePrefix); for (hel = cartHelList; hel != NULL; hel = hel->next) { char *encSessionName = hel->name + strlen(hgsDeletePrefix); char *sessionName = cgiDecodeClone(encSessionName); sqlSafef(query, sizeof(query), "DELETE FROM %s " "WHERE userName = '%s' AND sessionName = '%s';", namedSessionTable, encUserName, encSessionName); sqlUpdate(conn, query); dyStringPrintf(dyMessage, "Deleted session <B>%s</B>.<BR>\n", htmlEncode(sessionName)); @@ -891,31 +790,31 @@ struct sqlConnection *conn = hConnectCentral(); struct dyString *dyMessage = dyStringNew(1024); char *otherUser = trimSpaces(cartString(cart, hgsOtherUserName)); char *sessionName = trimSpaces(cartString(cart, hgsOtherUserSessionName)); char *encOtherUser = cgiEncodeFull(otherUser); char *encSessionName = cgiEncodeFull(sessionName); dyStringPrintf(dyMessage, "Loaded settings from user <B>%s</B>'s session <B>%s</B>. %s %s", otherUser, htmlEncode(sessionName), getSessionLink(otherUser, encSessionName), getSessionEmailLink(encOtherUser, encSessionName)); cartLoadUserSession(conn, otherUser, sessionName, cart, NULL, actionVar); hubConnectLoadHubs(cart); cartCopyCustomTracks(cart); -checkForCustomTracks(dyMessage); +cartCheckForCustomTracks(cart, dyMessage); hDisconnectCentral(&conn); return dyStringCannibalize(&dyMessage); } void doSaveLocal() /* Output current settings to be saved as a file on the user's machine. * Return a message confirming what we did. */ { char *fileName = trimSpaces(cartString(cart, hgsSaveLocalFileName)); char *compressType = cartString(cart, hgsSaveLocalFileCompress); struct pipeline *compressPipe = textOutInit(fileName, compressType, NULL); cleanHgSessionFromCart(cart); cartDump(cart); @@ -990,31 +889,31 @@ dyStringPrintf(dyMessage, ", only the filename <B>%s</B>", fileName); dyStringAppend(dyMessage, ". Your settings have not been changed."); lf = NULL; } dyStringPrintf(dyMessage, " " "<A HREF=\"http%s://%s%s?%s=%s\">Browser</A>", cgiAppendSForHttps(), cgiServerNamePort(), destAppScriptName(), cartSessionVarName(), cartSessionId(cart)); } if (lf != NULL) { cartLoadSettings(lf, cart, NULL, actionVar); hubConnectLoadHubs(cart); cartCopyCustomTracks(cart); - checkForCustomTracks(dyMessage); + cartCheckForCustomTracks(cart, dyMessage); lineFileClose(&lf); } return dyStringCannibalize(&dyMessage); } char *doSessionDetail(char *sessionName) /* Show details about a particular session. */ { struct dyString *dyMessage = dyStringNew(4096); char *encSessionName = cgiEncodeFull(sessionName); char *userName = getLinkUserName(); char *encUserName = cgiEncodeFull(userName); struct sqlConnection *conn = hConnectCentral(); struct sqlResult *sr = NULL; char **row = NULL;