94041c12e043016875ebd340568bda0ccaf122f6
lrnassar
  Wed Jul 8 13:53:22 2026 -0700
Add db= to cross-CGI hgTracks/hgTrackUi/hgc links to prevent wrong-assembly errors. refs #37840

Completes the incomplete work from #26892: links from the browser to a different
CGI omitted db=, so the target CGI fell back to the cart's db (often wrong),
producing "Can't find <track> in track database <db>" errors and broken shared
links. Adds the current-assembly db to link builders across hgTracks
(chromGraphTrack, expRatioTracks, config ruler and per-track configure links,
variation), hgVai, hgFileUi, hgGtexTrackSettings, hgBlat, hgGene, hgNear, the
barChart/GTEx faceted UI (facetedBar, barChartUi, gtexUi), and the hgTrackUi
group-configure link.

diff --git src/hg/hgTracks/expRatioTracks.c src/hg/hgTracks/expRatioTracks.c
index 3c728e6b232..f894f1241a7 100644
--- src/hg/hgTracks/expRatioTracks.c
+++ src/hg/hgTracks/expRatioTracks.c
@@ -172,32 +172,32 @@
 
 
 
 void mapBoxHcTwoItems(struct hvGfx *hvg, int start, int end, int x, int y, int width, int height,
 	char *track, char *item1, char *item2, char *statusLine)
 /* Print out image map rectangle that would invoke the htc (human track click)
  * program. */
 {
 char *encodedItem1 = cgiEncode(item1);
 char *encodedItem2 = cgiEncode(item2);
 x = hvGfxAdjXW(hvg, x, width);
 if (theImgBox && curImgTrack)
     {
     char link[512];
     // NOTE: winStart,winEnd removed due to portal (added back by Galt for multi-region)
-    safef(link,sizeof(link),"%s&c=%s&l=%d&r=%d&o=%d&t=%d&g=%s&i=%s&i2=%s", 
-        hgcNameAndSettings(), chromName, winStart, winEnd, start, end, track, encodedItem1, encodedItem2);
+    safef(link,sizeof(link),"%s&db=%s&c=%s&l=%d&r=%d&o=%d&t=%d&g=%s&i=%s&i2=%s",
+        hgcNameAndSettings(), database, chromName, winStart, winEnd, start, end, track, encodedItem1, encodedItem2);
     #ifdef IMAGEv2_SHORT_MAPITEMS
     if (x < insideX && x+width > insideX)
         warn("mapBoxHcTwoItems(%s) map item spanning slices. LX:%d TY:%d RX:%d BY:%d  link:[%s]",
              track,x, y, x+width, y+height, link);
     #endif//def IMAGEv2_SHORT_MAPITEMS
     imgTrackAddMapItem(curImgTrack,link,statusLine,x, y, x+width, y+height, track, NULL);
     }
 else
     {
     hPrintf("<AREA SHAPE=RECT COORDS=\"%d,%d,%d,%d\" ", x, y, x+width, y+height);
     hPrintf("HREF=\"%s&o=%d&t=%d&g=%s&i=%s&i2=%s&c=%s&l=%d&r=%d&db=%s&pix=%d\" ",
             hgcNameAndSettings(), start, end, track, encodedItem1, encodedItem2,chromName,
             winStart, winEnd, database, tl.picWidth);
     hPrintf("TITLE=\"%s\">\n", statusLine);
     }
@@ -1426,31 +1426,31 @@
 nProbes = slCount(probes);
 nExps = slCount(marrays);
 totalHeight = nExps * lineHeight;
 if ((nProbes > MICROARRAY_CLICK_LIMIT) &&
     !(sameString(tg->table, "expRatioUCSFDemo") || sameString(tg->table, "cnvLungBroadv2")  || sameString(tg->table, "CGHBreastCancerUCSF")  || sameString(tg->table, "expBreastCancerUCSF")) )
     {
     int xOffRc = hvGfxAdjXW(hvg, xOff, insideWidth);
     if (theImgBox && curImgTrack)
         {
         char link[512];
 #if defined(IMAGEv2_DRAG_SCROLL_SZ) && (IMAGEv2_DRAG_SCROLL_SZ > 1)
         // Tim isn't sure what to do here if/when we implement drag scroll.
         warn("Tim take a look at this link and whether it needs different winStart and winEnd values with dragScroll > 1.");
 #endif
 	// Galt added back winStart, winEnd for multi-region.
-        safef(link,sizeof(link),"%s&c=%s&l=%d&r=%d&o=%d&t=%d&g=%s&i=zoomInMore", hgcNameAndSettings(), chromName, winStart, winEnd, seqStart, seqEnd, tg->track);
+        safef(link,sizeof(link),"%s&db=%s&c=%s&l=%d&r=%d&o=%d&t=%d&g=%s&i=zoomInMore", hgcNameAndSettings(), database, chromName, winStart, winEnd, seqStart, seqEnd, tg->track);
         #ifdef IMAGEv2_SHORT_MAPITEMS
         if (xOffRc < insideX && xOffRc+insideWidth > insideX)
             warn("expRatioMapBoxes(%s) map item spanning slices. LX:%d TY:%d RX:%d BY:%d "
                  "link:[%s]",tg->track,xOffRc, y, xOffRc+insideWidth, y+totalHeight, link);
         #endif//def IMAGEv2_SHORT_MAPITEMS
         imgTrackAddMapItem(curImgTrack,link,"zoomInMore",xOffRc, y, xOffRc+insideWidth, y+totalHeight, tg->track, NULL);
         }
     else
         {
         hPrintf("<AREA SHAPE=RECT COORDS=\"%d,%d,%d,%d\" ",
                 xOffRc, y, xOffRc+insideWidth, y+totalHeight);
         hPrintf("HREF=\"%s&c=%s&o=%d&t=%d&g=%s&c=%s&l=%d&r=%d&db=%s&i=zoomInMore\" ",
                 hgcNameAndSettings(), chromName, seqStart, seqEnd, tg->track, chromName, winStart, winEnd, database);
         hPrintf("TITLE=\"zoomInMore\">\n");
         }