161078cdaf6e7304a4f38882d67fff7dcd51d303
angie
  Mon Sep 30 10:29:31 2013 -0700
Code review feedback from Brian - use trackDb instead of hardcoding accessory URL.refs #11763

diff --git src/hg/hgc/hgc.c src/hg/hgc/hgc.c
index 88aed04..4fdcd46 100644
--- src/hg/hgc/hgc.c
+++ src/hg/hgc/hgc.c
@@ -16138,45 +16138,45 @@
 	}
     printf("<B>Variant Type:</B> %s<BR>\n", dgv.varType);
     printf("<B>Reference:</B> <A HREF=\"");
     printEntrezPubMedUidAbstractUrl(stdout, dgv.pubMedId);
     printf("\" TARGET=_BLANK>%s</A><BR>\n", dgv.reference);
     printf("<B>Method/platform:</B> %s<BR>\n", dgv.method);
     printf("<B>Sample:</B> %s<BR>\n", dgv.sample);
     if (isNotEmpty(dgv.landmark))
 	printf("<B>Landmark:</B> %s<BR>\n", dgv.landmark);
     }
 sqlFreeResult(&sr);
 hFreeConn(&conn);
 printTrackHtml(tdb);
 }
 
-#define CORIELL_ID_URL_BASE "http://ccr.coriell.org/Sections/Search/Sample_Detail.aspx?Ref="
-
-static void maybePrintCoriellLinks(char *commaSepIds)
-/* If id looks like a Coriell ID, print a link to Coriell, otherwise just print id. */
+static void maybePrintCoriellLinks(struct trackDb *tdb, char *commaSepIds)
+/* If id looks like a Coriell NA ID, print a link to Coriell, otherwise just print id. */
 {
+char *coriellUrlBase = trackDbSetting(tdb, "coriellUrlBase");
 struct slName *id, *sampleIds = slNameListFromComma(commaSepIds);
 for (id = sampleIds;  id != NULL;  id = id->next)
     {
-    if (startsWith("NA", id->name) && countLeadingDigits(id->name+2) == strlen(id->name+2))
+    if (startsWith("NA", id->name) && countLeadingDigits(id->name+2) == strlen(id->name+2)
+	&& isNotEmpty(coriellUrlBase))
 	{
 	// I don't know why coriell doesn't have direct links to NA's but oh well,
 	// we can substitute 'GM' for 'NA' to get to the page...
 	char *gmId = cloneString(id->name);
 	gmId[0] = 'G';  gmId[1] = 'M';
-	printf("<A HREF=\""CORIELL_ID_URL_BASE"%s\" TARGET=_BLANK>%s</A>", gmId, id->name);
+	printf("<A HREF=\"%s%s\" TARGET=_BLANK>%s</A>", coriellUrlBase, gmId, id->name);
 	freeMem(gmId);
 	}
     else
 	printf("%s", id->name);
     if (id->next != NULL)
 	printf(", ");
     }
 slNameFreeList(&sampleIds);
 }
 
 static void printBrowserPosLinks(char *commaSepIds)
 /* Print hgTracks links with position=id. */
 {
 struct slName *id, *sampleIds = slNameListFromComma(commaSepIds);
 for (id = sampleIds;  id != NULL;  id = id->next)
@@ -16218,31 +16218,31 @@
 	   dgv.chrom, dgv.chromStart+1, dgv.chromEnd);
     printBand(dgv.chrom, dgv.chromStart, dgv.chromEnd, FALSE);
     printf("<B>Genomic size:</B> %d<BR>\n", dgv.chromEnd - dgv.chromStart);
     printf("<B>Variant type:</B> %s<BR>\n", dgv.varType);
     printf("<B>Reference:</B> <A HREF=\"");
     printEntrezPubMedUidAbstractUrl(stdout, dgv.pubMedId);
     printf("\" TARGET=_BLANK>%s</A><BR>\n", dgv.reference);
     printf("<B>Method:</B> %s<BR>\n", dgv.method);
     if (isNotEmpty(dgv.platform))
 	printf("<B>Platform:</B> %s<BR>\n", dgv.platform);
     if (isNotEmpty(dgv.cohortDescription))
 	printf("<B>Sample cohort description:</B> %s<BR>\n", dgv.cohortDescription);
     if (isNotEmpty(dgv.samples))
 	{
 	printf("<B>Sample IDs:</B> ");
-	maybePrintCoriellLinks(dgv.samples);
+	maybePrintCoriellLinks(tdb, dgv.samples);
 	printf("<BR>\n");
 	}
     printf("<B>Sample size:</B> %u<BR>\n", dgv.sampleSize);
     if (dgv.observedGains != 0 || dgv.observedLosses != 0)
 	{
 	printf("<B>Observed gains:</B> %u<BR>\n", dgv.observedGains);
 	printf("<B>Observed losses:</B> %u<BR>\n", dgv.observedLosses);
 	}
     if (isNotEmpty(dgv.mergedVariants))
 	{
 	printf("<B>Merged variants:</B> ");
 	printBrowserPosLinks(dgv.mergedVariants);
 	printf("<BR>\n");
 	}
     if (isNotEmpty(dgv.supportingVariants))