src/hg/instinct/hgHeatmap2/hgHeatmap2.c 1.87

1.87 2010/04/12 17:16:56 jsanborn
added raDb functionality
Index: src/hg/instinct/hgHeatmap2/hgHeatmap2.c
===================================================================
RCS file: /projects/compbio/cvsroot/kent/src/hg/instinct/hgHeatmap2/hgHeatmap2.c,v
retrieving revision 1.86
retrieving revision 1.87
diff -b -B -U 4 -r1.86 -r1.87
--- src/hg/instinct/hgHeatmap2/hgHeatmap2.c	17 Mar 2010 01:29:29 -0000	1.86
+++ src/hg/instinct/hgHeatmap2/hgHeatmap2.c	12 Apr 2010 17:16:56 -0000	1.87
@@ -30,8 +30,9 @@
 #include "json.h"
 #include "hgHeatmapLib.h"
 #include "heatmapUtility.h"
 #include "hgUsers.h"
+#include "raDb.h"
 
 static char const rcsid[] = "$Id$";
 
 /* ---- Global variables. ---- */
@@ -652,8 +652,60 @@
 
 hFreeConn(&conn);
 }
 
+void addUserDbHeatmapsRaDb(struct genoHeatmap **list, char *raName)
+{
+/* only to test user authentication currently */
+char *tokenIdStr = cartOptionalString(cart, hgh2UserTokenId);
+char *userIdStr = cartOptionalString(cart, hgh2UserId);
+if (!tokenIdStr || !userIdStr)
+    return;
+
+int tokenId = atoi(tokenIdStr);
+int userId  = atoi(userIdStr);
+
+struct slName *sl, *datasets = getUserDatasets(cart, tokenId, userId);
+if (!datasets)
+    return;
+if (!slCount(datasets))
+    return;
+
+struct sqlConnection *conn = hAllocConnProfile(localDbProfile, database);
+if (!conn)
+    return;
+
+struct raDb *ra, *raList = raDbLoad(conn);
+
+if (!raList)
+    {
+    hFreeConn(&conn);
+    errAbort("Couldn't find anything from raDb.");
+    }
+
+for (ra = raList; ra != NULL; ra = ra->next)
+    {
+    boolean userHasAccess = FALSE;
+    for (sl = datasets; sl; sl = sl->next)
+	if (sameString(sl->name, ra->name))
+	    userHasAccess = TRUE;
+
+    if (!userHasAccess)
+	continue;
+
+    struct genoHeatmap *gh = getHeatmapRaDb(conn, NULL, database, ra);
+
+    if (!gh)
+	continue;
+    if (!gh->private)
+	continue;  // do not public private datasets.
+
+    slAddHead(list, gh);
+    }
+
+hFreeConn(&conn);
+}
+
 struct genoHeatmap *getUserDbHeatmaps(char *raName)
 /* Get graphs defined. Requried to be present in the database as well as 
    in the datasets.ra file */
 {
@@ -723,16 +773,77 @@
 
 return list;
 }
 
+struct genoHeatmap *getDbHeatmapsRaDb(char *set, char *raName)
+/* Get graphs defined. Requried to be present in the database as well as 
+   in the datasets.ra file */
+{
+struct sqlConnection *localConn = hAllocConnProfile(localDbProfile, database);
+if (!localConn)
+    return NULL;
+
+/* This can be NULL */
+struct sqlConnection *publicConn = hAllocConnProfile(publicDbProfile, database);
+
+char varName[1024];
+struct genoHeatmap *list = NULL, *gh;
+
+struct raDb *ra, *raList = raDbLoad(localConn);
+
+if (raList == NULL)
+    {
+    hFreeConn(&localConn);
+    hFreeConn(&publicConn);
+    errAbort("Couldn't find anything from %s", raName);
+    }
+
+for (ra = raList; ra != NULL; ra = ra->next)
+    {
+    safef(varName, sizeof(varName), "%s%s.%s", hghDataConfigPrefix, ra->name, hghVis);
+
+    /* cgi visibility */
+    char *vis;
+    if (!hashLookup(cart->hash,varName))
+	/* default visibility */
+	vis = ra->visibility;
+    else
+	{
+	boolean cgiVis = cartBoolean(cart,varName);
+	if (cgiVis)
+	    vis = "on";
+	else
+	    vis = "off";
+	}
+
+
+    gh = getHeatmapRaDb(localConn, publicConn, database, ra);
+    if (!gh)
+	continue;
+    if (gh->private)
+	continue;  // do not include private datasets.
+
+    slAddHead(&list,gh);
+    }
+
+hFreeConn(&localConn);
+hFreeConn(&publicConn);
+
+addUserDbHeatmapsRaDb(&list, raName);
+addCustomDbHeatmaps(&list, raName);
+slReverse(&list);
+
+return list;
+}
+
 void getGenoHeatmaps(char* set)
 /* Set up ghList and ghHash with all available genome graphs */
 {
 if (isEmpty(set))
     return;
 
 char *datasetRaName = dataSetRaName();
-struct genoHeatmap *dbList = getDbHeatmaps(set, datasetRaName);
+struct genoHeatmap *dbList = getDbHeatmapsRaDb(set, datasetRaName);
 
 struct genoHeatmap *gh;
 struct slRef *ref, *refList = NULL;