c1322ce22bfb59b5f98bf6b2aeb72c08fa4632ff
max
  Tue Sep 3 16:52:30 2024 -0700
no feedback from QA for a long time, so committing curl button now but putting under hg.conf control, refs #33415

diff --git src/hg/hgTables/hgTables.c src/hg/hgTables/hgTables.c
index b22fa39..a8b2535 100644
--- src/hg/hgTables/hgTables.c
+++ src/hg/hgTables/hgTables.c
@@ -1430,81 +1430,99 @@
     {
     sep="";
     for (c=0;c<numCols;++c)
 	{
 	printf("%s%s",sep,row[c]);
 	sep = "\t";
 	}
     fprintf(stdout, "\n");
     }
 sqlFreeResult(&sr);
 removeMetaData();
 }
 
 void dispatch();
 
+void doTopCurl(struct sqlConnection *conn, char *addVar)
+{
+    htmlOpen("Curl command to get output");
+    puts("<p><tt>curl");
+    for (struct cgiVar *vars = cgiVarList(); vars!=NULL; vars=vars->next)
+    {
+        if ((sameOk(vars->name, "hgsid")) || (sameOk(vars->name, hgtaDoCurl) || sameOk(vars->name, hgtaDoCurlSelected)))
+            continue;
+        else
+            printf(" --data '%s=%s'", vars->name, vars->val);
+    }
+    printf(" --data '%s=submit' %shgTables</tt></p>", addVar, hLocalHostCgiBinUrl());
+    htmlClose();
+}
+
 void doTopSubmit(struct sqlConnection *conn)
 /* Respond to submit button on top level page.
  * This basically just dispatches based on output type. */
 {
 char *output = cartString(cart, hgtaOutputType);
 char *trackName = NULL;
 char *table = cartString(cart, hgtaTable);
 struct trackDb *track = NULL;
 
 if (!sameString(curGroup->name, "allTables"))
     {
     trackName = undupedTrackName(cart, hgtaTrack);
     track = mustFindTrack(trackName, fullTrackList);
     }
 else
     {
     struct trackDb *cTdb = NULL;
     track = hTrackDbForTrack(database, table);
     cTdb = hCompositeTrackDbForSubtrack(database, track);
     if (cTdb)
 	track = cTdb;
     }
 checkNoGenomeDisabled(database, table);
+
+
 if (track != NULL)
     {
     if (sameString(track->table, "gvPos") &&
 	!cartVarExists(cart, "gvDisclaimer"))
 	{
 	/* display disclaimer and add flag to cart, program exits from here */
 	htmlStart("Table Browser");
 	gvDisclaimer();
 	}
     else if (sameString(track->table, "gvPos") &&
 	     sameString(cartString(cart, "gvDisclaimer"), "Disagree"))
 	{
 	cartRemove(cart, "gvDisclaimer");
 	cartRemove(cart, hgtaDoTopSubmit);
 	cartSetString(cart, hgtaDoMainPage, "return to table browser");
 	dispatch();
 	return;
 	}
     }
 if (doGenomeSpace())
     {
     if (!checkGsReady())
 	return;
     }
 if (doGreat())
     verifyGreatFormat(output);
 if (doGalaxy())
     verifyGalaxyFormat(output);
+
 if (sameString(output, outPrimaryTable))
     {
     if (doGalaxy() && !cgiOptionalString(hgtaDoGalaxyQuery))
         sendParamsToGalaxy(hgtaDoTopSubmit, "get output");
     else
         doOutPrimaryTable(table, conn);
     }
 else if (sameString(output, outSelectedFields))
     doOutSelectedFields(table, conn);
 else if (sameString(output, outSequence))
     doOutSequence(conn);
 else if (sameString(output, outMicroarrayNames))
     doOutMicroarrayNames(track);
 else if (sameString(output, outBed))
     doOutBed(table, conn);
@@ -1565,30 +1583,41 @@
 }
 
 void dispatch()
 /* Scan for 'do' variables and dispatch to appropriate page-generator.
  * By default head to the main page. */
 {
 struct hashEl *varList;
 struct sqlConnection *conn = NULL;
 if (!trackHubDatabase(database))
     conn = curTrack ? hAllocConnTrack(database, curTrack) : hAllocConn(database);
 pushWarnHandler(earlyAbortHandler);
 if (cartVarExists(cart, hgtaDoTest))
     doTest();
 else if (cartVarExists(cart, hgtaDoMainPage))
     doMainPage(conn);
+else if (cartVarExists(cart, hgtaDoCurl))
+    {
+    if (sameOk(cartOptionalString(cart, hgtaOutputType), outSelectedFields))
+        doTopSubmit(conn);
+    else
+        doTopCurl(conn, hgtaDoTopSubmit);
+    }
+else if (cartVarExists(cart, hgtaDoCurlSelected))
+    doTopCurl(conn, hgtaDoPrintSelectedFields);
+else if (cartVarExists(cart, hgtaDoCurlGenePredSequence))
+    doTopCurl(conn, hgtaDoGenePredSequence);
 else if (cartVarExists(cart, hgtaDoSchema))
     doSchema(conn);
 else if (cartVarExists(cart, hgtaDoTopSubmit))
     doTopSubmit(conn);
 else if (cartVarExists(cart, hgtaDoSummaryStats))
     doSummaryStats(conn);
 else if (cartVarExists(cart, hgtaDoIntersectPage))
     doIntersectPage(conn);
 else if (cartVarExists(cart, hgtaDoPalOut))
     doGenePredPal(conn);
 else if (cartVarExists(cart, hgtaDoPal))
     doOutPalOptions( conn);
 else if (cartVarExists(cart, hgtaDoClearIntersect))
     doClearIntersect(conn);
 else if (cartVarExists(cart, hgtaDoIntersectMore))