7544fd2a03bf573a9a12195d86a2fc082a88de78
tdreszer
  Tue Apr 5 15:17:56 2011 -0700
Tightened the screws on searching by mdb vars where the search is either for files or tables
diff --git src/hg/lib/searchTracks.c src/hg/lib/searchTracks.c
index 1573f91..d6154ba 100644
--- src/hg/lib/searchTracks.c
+++ src/hg/lib/searchTracks.c
@@ -65,49 +65,30 @@
 }
 
 char *fileFormatSelectHtml(char *name, char *selected, char *extraHtml)
 // returns an allocated string of HTML for the fileType select drop down
 {
 struct slPair *fileTypes = fileFormatSearchWhiteList();
 if (slCount(fileTypes) > 0)
     {
     char *dropDownHtml = cgiMakeSingleSelectDropList(name,fileTypes,selected,ANYLABEL,NULL,extraHtml);
     slPairFreeList(&fileTypes);
     return dropDownHtml;
     }
 return NULL;
 }
 
-struct slPair *mdbVarsRelevant(struct sqlConnection *conn)
-// returns a white list of mdb vars that are relevant to the currect DB
-{
-struct slPair *cvApproved = cvWhiteList(TRUE,FALSE);
-struct slPair *relevant = NULL;
-while(cvApproved != NULL)
-    {
-    struct slPair *oneVar = slPopHead(&cvApproved);
-    char query[256];
-    safef(query, sizeof(query), "select count(*) from metaDb where var = '%s'",oneVar->name);
-    if(sqlQuickNum(conn,query) > 0)
-        slAddHead(&relevant, oneVar);
-    else
-        slPairFree(&oneVar);
-    }
-slReverse(&relevant);
-return relevant;
-}
-
 struct slPair *mdbSelectPairs(struct cart *cart,enum searchTab selectedTab, struct slPair *mdbVars)
 // Returns the current mdb  vars and vals in the table of drop down selects
 {
 // figure out how many metadata selects are visible.
 int numMetadataSelects = 0;
 
 struct slPair *mdbSelectPairs = NULL;
 if (mdbVars == NULL)
     return 0;
 
 // Get the current number of rows in the table of mdb selects
 for(;;)
     {
     char buf[256];
     safef(buf, sizeof(buf), "%s%d", METADATA_NAME_PREFIX, numMetadataSelects + 1);
@@ -182,32 +163,32 @@
         safef(buf, sizeof(buf), "%s%d", METADATA_VALUE_PREFIX, numMetadataSelects + 1);
         cartRemove(cart, buf);
         }
     }
 else
     {
     // create defaults
     slPairAdd(&mdbSelectPairs,"cell",    NULL);
     slPairAdd(&mdbSelectPairs,"antibody",NULL);
     }
 
 slReverse(&mdbSelectPairs);
 return mdbSelectPairs;
 }
 
-char *mdbSelectsHtmlRows(struct sqlConnection *conn,struct slPair *mdbSelects,struct slPair *mdbVars,int cols)
-// generates the html for the table rows containing mdb var and val selects
+char *mdbSelectsHtmlRows(struct sqlConnection *conn,struct slPair *mdbSelects,struct slPair *mdbVars,int cols,boolean fileSearch)
+// genereates the html for the table rows containing mdb var and val selects.  Assume tableSearch unless fileSearch
 {
 struct dyString *output = dyStringNew(1024);
 
 dyStringPrintf(output,"<tr><td colspan='%d' align='right' class='lineOnTop' style='height:20px; max-height:20px;'><em style='color:%s; width:200px;'>ENCODE terms</em></td></tr>\n", cols,COLOR_DARKGREY);
 
 struct slPair *mdbSelect = mdbSelects;
 int row = 0;
 for(;mdbSelect != NULL; mdbSelect = mdbSelect->next)
     {
     char buf[256];
     char *dropDownHtml = NULL;
 
     #define PLUS_MINUS_BUTTON "<input type='button' id='%sButton%d' value='%c' style='font-size:.7em;' title='%s' onclick='findTracksMdbSelectPlusMinus(this,%d)'>"
     #define ADD_PM_BUTTON(type,num,value) dyStringPrintf(output,PLUS_MINUS_BUTTON, (type), (num), (value), ((value) == '+' ? "add another row after":"delete"), (num))
 
@@ -226,31 +207,31 @@
     // Left side select of vars
     dropDownHtml = cgiMakeSingleSelectDropList(buf, mdbVars,mdbSelect->name, NULL,"mdbVar","style='font-size:.9em;' onchange='findTracksMdbVarChanged(this);'");
     if (dropDownHtml)
         {
         dyStringAppend(output,dropDownHtml);
         freeMem(dropDownHtml);
         }
 
     // Right side select of vals
     safef(buf, sizeof(buf), "%s%i", METADATA_VALUE_PREFIX, row);
     enum cvSearchable searchBy = cvSearchMethod(mdbSelect->name);
     if (searchBy == cvSearchBySingleSelect || searchBy == cvSearchByMultiSelect)
         {
         dyStringPrintf(output,"</td>\n<td align='right' id='isLike%i' style='width:10px; white-space:nowrap;'>is%s</td>\n<td nowrap id='%s' style='max-width:600px;'>\n",
                 row,(searchBy == cvSearchByMultiSelect?" among":""),buf);
-        struct slPair *pairs = mdbValLabelSearch(conn, mdbSelect->name, MDB_VAL_STD_TRUNCATION, FALSE, TRUE, FALSE); // not tags, yes tables, not files
+        struct slPair *pairs = mdbValLabelSearch(conn, mdbSelect->name, MDB_VAL_STD_TRUNCATION, FALSE, !fileSearch, fileSearch); // not tags, either a file or table search
         if (slCount(pairs) > 0)
             {
             char *dropDownHtml = cgiMakeSelectDropList((searchBy == cvSearchByMultiSelect),
                     buf, pairs,mdbSelect->val, ANYLABEL,"mdbVal","style='min-width:200px; font-size:.9em;' onchange='findTracksMdbValChanged(this);'");
             if (dropDownHtml)
                 {
                 dyStringAppend(output,dropDownHtml);
                 freeMem(dropDownHtml);
                 }
             slPairFreeList(&pairs);
             }
         }
     else if (searchBy == cvSearchByFreeText)
         {
         dyStringPrintf(output,"</td><td align='right' id='isLike%i' style='width:10px; white-space:nowrap;'>contains</td>\n<td nowrap id='%s' style='max-width:600px;'>\n",row,buf);