bd6e3996c720821a29a4eaf6b8e9972e4c98a028
kate
  Wed Aug 12 16:50:17 2020 -0700
Add hg.conf var to enable Recommended Track Sets.  Remove hgSession URL mod, in favor of hgTracks detecting non-Track-Set session load. Build patch. refs #25601

diff --git src/hg/hgTracks/recTrackSets.c src/hg/hgTracks/recTrackSets.c
index 253261e..a05ef68 100644
--- src/hg/hgTracks/recTrackSets.c
+++ src/hg/hgTracks/recTrackSets.c
@@ -41,31 +41,33 @@
 
 char *recTrackSetsFile()
 /* Generate path to file specifying menu of recommended track sets.
  *      eg, DOCUMENT_ROOT/inc/recTrackSets.hg19.tab */
 {
 char *root = hDocumentRoot();
 char buf[200];
 safef(buf, sizeof buf, "%s/%s/%s.%s.%s", 
         root, REC_TRACK_SETS_DIR, REC_TRACK_SETS_FILE, database, REC_TRACK_SETS_EXT);
 return cloneString(buf);
 }
 
 boolean recTrackSetsEnabled()
 /* Return TRUE if feature is available */
 {
-return fileExists(recTrackSetsFile());
+char *cfgEnabled = cfgOption("browser.recTrackSets");
+return cfgEnabled && (sameString(cfgEnabled, "on") || sameString(cfgEnabled, "true")) &&
+        fileExists(recTrackSetsFile());
 }
 
 boolean recTrackSetsChangeDetectEnabled()
 /* Return TRUE if feature is available, in hgConf */
 {
 char *cfgChanges = cfgOption("browser.recTrackSetsDetectChange");
 if (cfgChanges && (sameString(cfgChanges, "on") || sameString(cfgChanges, "true")))
     return TRUE;
 return FALSE;
 }
 
 struct recTrackSet *loadRecTrackSets()
 /* Read from tab-sep file.  Return list or NULL if no track sets for this database */
 {
 struct recTrackSet *recTrackSet, *recTrackSets = NULL;
@@ -82,36 +84,56 @@
     recTrackSet->sessionName = cloneString(row[2]);
     recTrackSet->description = cloneString(row[3]);
     slAddHead(&recTrackSets, recTrackSet);
     }
 slReverse(&recTrackSets);
 lineFileClose(&lf);
 return recTrackSets;
 }
 
 int recTrackSetsForDb()
 /* Return number of recommended track sets for this database */
 {
 return slCount(loadRecTrackSets());
 }
 
+boolean hasRecTrackSet(struct cart *cart)
+/* Check if currently loaded session is in the recommended track set */
+{
+if (!recTrackSetsEnabled())
+    return FALSE;
+struct recTrackSet *ts, *recTrackSets = loadRecTrackSets();
+if (!recTrackSets)
+    return FALSE;
+char *session = cartOptionalString(cart, hgsOtherUserSessionName);
+char *user = cartOptionalString(cart, hgsOtherUserName);
+if (!session || !user)
+    return FALSE;
+for (ts = recTrackSets; ts; ts = ts->next)
+    {
+    if (sameString(replaceChars(ts->sessionName, "%20", " "), session) && 
+        sameString(ts->userName, user))
+            return TRUE;
+    }
+return FALSE;
+}
+
 void printRecTrackSets()
 /* Create dialog with list of recommended track sets */
 {
 if (!recTrackSetsEnabled())
     return;
-
 struct recTrackSet *recTrackSet, *recTrackSets = loadRecTrackSets();
 if (!recTrackSets)
     return;
 
 if (recTrackSetsChangeDetectEnabled())
     jsInline("var recTrackSetsDetectChanges = true;");
 
 hPrintf("<div style='display:none;' id='recTrackSetsPopup' title='Recommended Track Sets'>\n");
 
 // TODO: Consider moving this to the tab file as a header section
 hPrintf("<p>These links provide track sets selected and pre-configured for "
             "specific user scenarios. They are designed to be useful at "
             "different genomic loci. Clicking a link below will create a browser "
             "window with these tracks visible, without changing the locus.</p>");