8a78199eaca4cb4996a056fdb69d1824ec89aed1
chmalee
  Mon Apr 3 11:28:33 2023 -0700
Explicitly set the CGI variable 'org' when doing an hgGateway ucsc db lookup, refs #30816

diff --git src/hg/hgGateway/hgGateway.c src/hg/hgGateway/hgGateway.c
index 45f4c14..77776af 100644
--- src/hg/hgGateway/hgGateway.c
+++ src/hg/hgGateway/hgGateway.c
@@ -162,39 +162,42 @@
     if (! trackHubDatabase(db) && (sqlMayConnect(db) != NULL))
         suggestTrack = assemblyGeneSuggestTrack(db);
     jsonWriteString(jw, "suggestTrack", suggestTrack);
     char *description = maybeGetDescriptionText(db);
     jsonWriteString(jw, "description", description);
     listAssemblyHubs(jw);
     }
 }
 
 static void setTaxId(struct cartJson *cj, struct hash *paramHash)
 /* Set db and genome according to taxId (and/or db) and return the info we'll need
  * to fill in the findPosition section. */
 {
 char *taxIdStr = cartJsonRequiredParam(paramHash, "taxId", cj->jw, "setTaxId");
 char *db = cartJsonOptionalParam(paramHash, "db");
+char *organism = cartJsonOptionalParam(paramHash, "org");
 int taxId = atoi(taxIdStr);
 if (isEmpty(db))
     db = hDbForTaxon(taxId);
 if (isEmpty(db))
     jsonWriteStringf(cj->jw, "error", "No db for taxId '%s'", taxIdStr);
 else
     {
     writeFindPositionInfo(cj->jw, db, taxId, NULL, hDefaultPos(db));
     cartSetString(cart, "db", db);
+    if (!isEmpty(organism))
+        cartSetString(cart, "org", organism);
     cartSetString(cart, "position", hDefaultPos(db));
     }
 }
 
 static void setHubDb(struct cartJson *cj, struct hash *paramHash)
 /* Set db and genome according to hubUrl (and/or db and hub) and return the info we'll need
  * to fill in the findPosition section. */
 {
 char *hubUrl = cartJsonRequiredParam(paramHash, "hubUrl", cj->jw, "setHubDb");
 char *taxIdStr = cartJsonOptionalParam(paramHash, "taxId");
 int taxId = taxIdStr ? atoi(taxIdStr) : -1;
 // cart's db was already set by magic handling of hub CGI variables sent along
 // with this command.
 char *db = cartString(cart, "db");
 if (isEmpty(db))
@@ -599,30 +602,31 @@
 else if (match->type == ddmtDescription)
     {
     safef(value, sizeof(value), "%s (%s %s)",
           dbDb->name, dbDb->genome, dbDb->description);
     char *bolded = boldTerm(dbDb->description, term, match->offset, match->type);
     safef(label, sizeof(label), "%s (%s %s)",
           dbDb->name, dbDb->genome, bolded);
     freeMem(bolded);
     jsonWriteString(jw, "db", dbDb->name);
     }
 else
     errAbort("writeDbDbMatch: unrecognized dbDbMatchType value %d (db %s, term %s)",
              match->type, dbDb->name, term);
 jsonWriteString(jw, "label", label);
 jsonWriteString(jw, "value", value);
+jsonWriteString(jw, "org", dbDb->organism);
 jsonWriteNumber(jw, "taxId", dbDb->taxId);
 if (isNotEmpty(category))
     jsonWriteString(jw, "category", category);
 jsonWriteObjectEnd(jw);
 }
 
 int wordMatchOffset(char *term, char *target)
 /* If some word of target starts with term (case insensitive), return the offset of
  * that word in target; otherwise return -1. */
 {
 if (startsWith(term, target))
     return 0;
 int targetLen = strlen(target);
 char targetClone[targetLen+1];
 safecpy(targetClone, sizeof(targetClone), target);