/* advFilter - stuff to put up advanced filter controls and to build * gene lists based on advanced filters. */ #include "common.h" #include "hash.h" #include "portable.h" #include "jksql.h" #include "cheapcgi.h" #include "htmshell.h" #include "cart.h" #include "hdb.h" #include "hgColors.h" #include "hPrint.h" #include "gsidTable.h" struct subjInfo *advFilterResults(struct column *colList, struct sqlConnection *conn) /* Get list of genes that pass all advanced filter filters. * If no filters are on this returns all genes. */ { struct subjInfo *list = readAllSubjInfo(conn, colList); struct column *col; if (gotAdvFilter()) /* Then go through and filter it down by column. */ { for (col = colList; col != NULL; col = col->next) { if (col->advFilter) { list = col->advFilter(col, conn, list); } } } return list; } boolean gotAdvFilter() /* Return TRUE if advanced filter variables are set. */ { char wild[64]; safef(wild, sizeof(wild), "%s*", advFilterPrefix); return anyRealInCart(cart, wild); } char *advFilterVal(struct column *col, char *varName) /* Return value for advanced filter variable. Return NULL if it * doesn't exist or if it is "" */ { char *name = advFilterName(col, varName); char *s; s = cartNonemptyString(cart, name); if (s != NULL) fixSafariSpaceInQuotes(s); return s; } char *advFilterName(struct column *col, char *varName) /* Return variable name for advanced filter. */ { static char name[64]; safef(name, sizeof(name), "%s%s.%s", advFilterPrefix, col->name, varName); return name; } static char *anyAllMenu[] = {"all", "any"}; void advFilterAnyAllMenu(struct column *col, char *varName, boolean defaultAny) /* Make a drop-down menu with value all/any. */ { char *var = advFilterNameI(col, varName); char *val = cartUsualString(cart, var, anyAllMenu[defaultAny]); cgiMakeDropList(var, anyAllMenu, ArraySize(anyAllMenu), val); } char *advFilterNameI(struct column *col, char *varName) /* Return name for advanced filter that doesn't force filter. */ { static char name[64]; safef(name, sizeof(name), "%s%s.%s", advFilterPrefixI, col->name, varName); return name; } boolean advFilterOrLogic(struct column *col, char *varName, boolean defaultOr) /* Return TRUE if user has selected 'all' from any/all menu * of given name. */ { char *var = advFilterNameI(col, varName); char *val = cartUsualString(cart, var, anyAllMenu[defaultOr]); return sameWord(val, "any"); } void advFilterRemakeTextVar(struct column *col, char *varName, int size) /* Make a text field of given name and size filling it in with * the existing value if any. */ { char *var = advFilterName(col, varName); cartMakeTextVar(cart, var, NULL, size); } void advFilterKeyUploadButton(struct column *col) /* Make a button for uploading keywords. */ { colButton(col, keyWordUploadPrefix, "upload list"); } void advFilterKeyPasteButton(struct column *col) /* Make a button for uploading keywords. */ { colButton(col, keyWordPastePrefix, "paste list"); } void advFilterKeyClearButton(struct column *col) /* Make a button for uploading keywords. */ { colButton(col, keyWordClearPrefix, "Clear List"); } void doAdvFilterKeyClear(struct sqlConnection *conn, struct column *colList, struct column *col) /* Handle upload keyword list button press in advanced filter form. */ { cartRemovePrefix(cart, keyWordClearPrefix); cartRemove(cart, advFilterName(col, "keyFile")); doAdvFilter(conn, colList); } struct column *advFilterKeyClearPressed(struct column *colList) /* Return column where an key upload button was pressed, or * NULL if none. */ { return colButtonPressed(colList, keyWordClearPrefix); } void doAdvFilterKeyUpload(struct sqlConnection *conn, struct column *colList, struct column *col) /* Handle upload keyword list button press in advanced filter form. */ { char *varName = NULL; cartRemovePrefix(cart, keyWordUploadPrefix); hPrintf("
"); cgiMakeButton("submit_filter", "submit"); hPrintf(" | "); cgiMakeButton(advFilterClearVarName, "clear filter"); //hPrintf(" | "); //cgiMakeButton(filSaveCurrentVarName, "save filter"); //hPrintf(" | "); //cgiMakeOptionalButton(filUseSavedVarName, "load filter", // !userSettingsAnySaved(filUserSettings())); hPrintf(" |