eef3ac987538affd38eb38ccddf6ce6721f4c6f4 jcasper Sun Nov 23 22:03:29 2025 -0800 Removing bigCompositeUpdate CGI (folded into cartDump), and some kent-ifying of the remaining code. refs #36320 diff --git src/hg/cartDump/cartDump.c src/hg/cartDump/cartDump.c index 4623ad66d83..186ca36adc9 100644 --- src/hg/cartDump/cartDump.c +++ src/hg/cartDump/cartDump.c @@ -14,30 +14,31 @@ /* for earlyBotCheck() function at the beginning of main() */ #define delayFraction 1.0 /* standard penalty for most CGIs */ static boolean issueBotWarning = FALSE; #define CART_DUMP_REMOVE_VAR "n/a" struct hash *oldVars = NULL; void doMiddle(struct cart *cart) /* cartDump - Dump contents of cart. */ { #define MATCH_VAR "match" char *vName = "cartDump.varName"; char *vVal = "cartDump.newValue"; +char *mName = "cartDump.metaDataId"; char *wildcard; boolean asTable = cartVarExists(cart,CART_DUMP_AS_TABLE); if (cgiVarExists("submit")) { char *varName = cgiOptionalString(vName); char *newValue = cgiOptionalString(vVal); if (isNotEmpty(varName) && isNotEmpty(newValue)) { varName = skipLeadingSpaces(varName); eraseTrailingSpaces(varName); if (sameString(newValue, CART_DUMP_REMOVE_VAR) || sameString(newValue, CART_VAR_EMPTY)) cartRemove(cart, varName); else cartSetString(cart, varName, newValue); @@ -50,30 +51,63 @@ // update cart vars for a track, called by hgTracks.js and ajax.js // not useful to hackers, so there is no need to call bottleneck. char *trackName = cgiOptionalString("g"); if (trackName != NULL && hashNumEntries(oldVars) > 0) { char *db = cartString(cart, "db"); struct trackDb *tdb = hTrackDbForTrack(db, trackName); if (tdb != NULL && tdbIsComposite(tdb)) { struct lm *lm = lmInit(0); cartTdbTreeCleanupOverrides(tdb,cart,oldVars,lm); lmCleanup(&lm); } } + if (cgiVarExists(mName)) + { + char *mdid = cgiOptionalString(mName); + char mdid_de[1024], mdid_dt[1024]; + safef(mdid_de, sizeof(mdid_de), "%s.de", mdid); + safef(mdid_dt, sizeof(mdid_dt), "%s.dt", mdid); + struct slName *de_list = cgiStringList(mdid_de); + struct slName *dt_list = cgiStringList(mdid_dt); + + // This component should change. Erasing settings doesn't preserve any user selections + // (like bigWig display changes) and doesn't work at all for tracks that are on by default. + char wc_mdid[1024]; + safef(wc_mdid, sizeof(wc_mdid), "*_%s", mdid); + cartRemoveLike(cart, wc_mdid); + cartRemovePrefix(cart, mdid); + char subtrackSetting[1024]; + for (struct slName *de_itr = de_list; de_itr; de_itr = de_itr->next) + { + struct slName *dt_itr = NULL; + for (dt_itr = dt_list; dt_itr; dt_itr = dt_itr->next) + { + safef(subtrackSetting, sizeof(subtrackSetting), "%s_%s_%s_sel", mdid, de_itr->name, dt_itr->name); + cartSetString(cart, subtrackSetting, "1"); + safef(subtrackSetting, sizeof(subtrackSetting), "%s_%s_%s", mdid, de_itr->name, dt_itr->name); + cartSetString(cart, subtrackSetting, "1"); + } + } + + cartRemove(cart, mName); + cartRemove(cart, mdid_de); + cartRemove(cart, mdid_dt); + } + return; } // To discourage hacking, call bottleneck if (issueBotWarning) { char *ip = getenv("REMOTE_ADDR"); botDelayMessage(ip, botDelayMillis); } if (asTable) { jsIncludeFile("jquery.js",NULL); // required by utils.js jsIncludeFile("utils.js",NULL); jsIncludeFile("ajax.js",NULL);