7339d9619c68e0758518c78e0b3564a03c3d7835 jcasper Wed Jun 8 12:06:09 2016 -0700 Fix for flawed attempt at counting custom tracks, refs #17476 diff --git src/hg/hgSession/hgSession.c src/hg/hgSession/hgSession.c index 7d7facf..c39177e 100644 --- src/hg/hgSession/hgSession.c +++ src/hg/hgSession/hgSession.c @@ -881,46 +881,45 @@ /* Show details about a particular session. */ { if (userName == NULL) return "Sorry, please log in again."; struct dyString *dyMessage = dyStringNew(4096); char *encSessionName = cgiEncodeFull(sessionName); char *encUserName = cgiEncodeFull(userName); struct sqlConnection *conn = hConnectCentral(); struct sqlResult *sr = NULL; char **row = NULL; char query[512]; webPushErrHandlersCartDb(cart, cartUsualString(cart, "db", NULL)); boolean gotSettings = (sqlFieldIndex(conn, namedSessionTable, "settings") >= 0); if (gotSettings) - sqlSafef(query, sizeof(query), "SELECT shared, firstUse, contents, settings from %s " + sqlSafef(query, sizeof(query), "SELECT shared, firstUse, settings from %s " "WHERE userName = '%s' AND sessionName = '%s'", namedSessionTable, encUserName, encSessionName); else - sqlSafef(query, sizeof(query), "SELECT shared, firstUse contents from %s " + sqlSafef(query, sizeof(query), "SELECT shared, firstUse from %s " "WHERE userName = '%s' AND sessionName = '%s'", namedSessionTable, encUserName, encSessionName); sr = sqlGetResult(conn, query); if ((row = sqlNextRow(sr)) != NULL) { int shared = atoi(row[0]); char *firstUse = row[1]; - char *contents = row[2]; char *settings = NULL; if (gotSettings) - settings = row[3]; + settings = row[2]; char *description = getSetting(settings, "description"); if (description == NULL) description = ""; dyStringPrintf(dyMessage, "<A HREF=\"../goldenPath/help/hgSessionHelp.html#Details\" " "TARGET=_BLANK>Session Details Help</A><P/>\n"); #define highlightAccChanges " var b = document.getElementById('" hgsDoSessionChange "'); " \ " if (b) { b.style.background = '#ff9999'; }" #define toggleGalleryDisable \ " var c = document.getElementById('detailsSharedCheckbox'); " \ " var d = document.getElementById('detailsGalleryCheckbox'); " \ " if (c.checked)" \ " {d.disabled = false;} " \ " else" \ @@ -954,89 +953,36 @@ highlightAccChanges, toggleGalleryDisable, highlightAccChanges, toggleGalleryDisable, cgiBooleanShadowPrefix(), hgsSharePrefix, encSessionName); dyStringPrintf(dyMessage, "List in Public Sessions? <INPUT TYPE=CHECKBOX NAME=\"%s%s\"%s VALUE=on " "onChange=\"{%s}\" onClick=\"{%s}\" id=\"detailsGalleryCheckbox\">\n" "<INPUT TYPE=HIDDEN NAME=\"%s%s%s\" VALUE=0><BR>\n", hgsGalleryPrefix, encSessionName, (shared>=2 ? " CHECKED" : ""), highlightAccChanges, highlightAccChanges, cgiBooleanShadowPrefix(), hgsGalleryPrefix, encSessionName); /* Set initial disabled state of the gallery checkbox */ dyStringPrintf(dyMessage, "\n<script>\n%s\n</script>\n", toggleGalleryDisable); dyStringPrintf(dyMessage, "Created on %s.<BR>\n", firstUse); /* Print custom track counts per assembly */ - if (startsWith("ctfile_", contents) || (strstr(contents, "&ctfile_") != NULL)) - { - char *splitContents = cloneString(contents); - subChar(splitContents, '&', ' '); - struct hash *contentsHash = hashFromString(splitContents); - struct hash *ctValidCount = hashNew(2); - struct hash *ctInvalidCount = hashNew(2); - struct hashEl *elList = hashElListHash(contentsHash), *thisEl = elList; - while (thisEl != NULL) - { - if (startsWith("ctfile_", thisEl->name)) - { - char *db = thisEl->name + 7; - char *ctFile = cloneString(thisEl->val); - cgiDecode(ctFile,ctFile,strlen(ctFile)); - if (!fileExists(ctFile)) - { - if (hashFindVal(ctInvalidCount, db) == NULL) - hashAddInt(ctInvalidCount, db, 1); - else - hashIncInt(ctInvalidCount, db); - } - else - { - if (hashFindVal(ctValidCount, db) == NULL) - hashAddInt(ctValidCount, db, 1); - else - hashIncInt(ctValidCount, db); - } - } - thisEl = thisEl->next; - } - elList = hashElListHash(ctValidCount); - if (elList != NULL) - { - dyStringPrintf(dyMessage, "Custom track counts per assembly: %s (%d)", - elList->name, ptToInt(elList->val)); - thisEl = elList->next; - while (thisEl != NULL) - { - dyStringPrintf(dyMessage, ", %s (%d)", thisEl->name, ptToInt(thisEl->val)); - thisEl = thisEl->next; - } - dyStringPrintf(dyMessage, "<br>\n"); - } - elList = hashElListHash(ctInvalidCount); - if (elList != NULL) - { - dyStringPrintf(dyMessage, "Expired custom track counts per assembly: %s (%d)", - elList->name, ptToInt(elList->val)); - thisEl = elList->next; - while (thisEl != NULL) - { - dyStringPrintf(dyMessage, ", %s (%d)", thisEl->name, ptToInt(thisEl->val)); - thisEl = thisEl->next; - } - dyStringPrintf(dyMessage, "<br>\n"); - } - } + struct cart *tmpCart = cartNew(NULL,NULL,NULL,NULL); + struct sqlConnection *conn2 = hConnectCentral(); + cartLoadUserSession(conn2, userName, sessionName, tmpCart, NULL, NULL); + hDisconnectCentral(&conn2); + cartCheckForCustomTracks(tmpCart, dyMessage); + if (gotSettings) { description = replaceChars(description, "\\\\", "\\__ESC__"); description = replaceChars(description, "\\r", "\r"); description = replaceChars(description, "\\n", "\n"); description = replaceChars(description, "\\__ESC__", "\\"); dyStringPrintf(dyMessage, "Description:<BR>\n" "<TEXTAREA NAME=\"%s\" ROWS=%d COLS=%d " "onChange=\"%s\" onKeypress=\"%s\">%s</TEXTAREA><BR>\n", hgsNewSessionDescription, 5, 80, highlightAccChanges, highlightAccChanges, description); } dyStringAppend(dyMessage, "</FORM>\n"); sqlFreeResult(&sr);