static void doBigSelectPage(char *db, char *table) /* Put up big field selection page. Assumes html page open already*/ { struct joiner *joiner = allJoiner; struct dbTable *dtList, *dt; char dbTableBuf[256]; cartSetString(cart, hgtaFieldSelectTable, getDbTable(db, table)); if (strchr(table, '.')) htmlOpen("Select Fields from %s", table); else htmlOpen("Select Fields from %s.%s", db, table); hPrintf("<FORM NAME=\"mainForm\" ACTION=\"%s\" METHOD=%s>\n", cgiScriptName(), cartUsualString(cart, "formMethod", "POST")); cartSaveSession(cart); cgiMakeHiddenVar(hgtaDatabase, db); cgiMakeHiddenVar(hgtaTable, table); dbOverrideFromTable(dbTableBuf, &db, &table); showTableFields(db, table, TRUE); dtList = extraTableList(selFieldLinkedTablePrefix()); showLinkedFields(dtList); dt = dbTableNew(db, table); slAddHead(&dtList, dt); showLinkedTables(joiner, dtList, selFieldLinkedTablePrefix(), hgtaDoSelectFieldsMore, "allow selection from checked tables"); /* clean up. */ hPrintf("</FORM>"); cgiDown(0.9); htmlClose(); joinerFree(&joiner); }
boolean anySubtrackMerge(char *db, char *table) /* Return TRUE if a subtrack merge has been specified on db.table. */ { char *smp = cartOptionalString(cart, hgtaSubtrackMergePrimary); if (smp == NULL) return FALSE; else { char *dbTable = getDbTable(db, table); boolean curTableHasMerge = sameString(smp, dbTable); freez(&dbTable); return curTableHasMerge; } }
static boolean filteredOrLinked(char *db, char *table) /* Return TRUE if this table is the table to be filtered or if it is to be * linked with that table. */ { char *dbTable = getDbTable(db, table); char *filterTable = cartUsualString(cart, hgtaFilterTable, ""); boolean isFilterTable = sameString(dbTable, filterTable); freez(&dbTable); if (isFilterTable) return TRUE; else { char varName[256]; safef(varName, sizeof(varName), "%slinked.%s.%s", hgtaFilterPrefix, db, table); return cartUsualBoolean(cart, varName, FALSE); } }
boolean anyFilter() /* Return TRUE if any filter set. If there is filter state from a filter * defined on a different table, clear it. */ { char *filterTable = cartOptionalString(cart, hgtaFilterTable); if (filterTable == NULL) return FALSE; else { char *dbTable = getDbTable(database, curTable); boolean curTableHasFilter = sameString(filterTable, dbTable); freez(&dbTable); if (curTableHasFilter) return TRUE; else { removeFilterVars(); return FALSE; } } }
void doSubtrackMergeMore(struct sqlConnection *conn) /* Respond to subtrack merge create/edit button */ { char *dbTable = getDbTable(database, curTable); htmlOpen("Merge subtracks of %s (%s)", curTrack->table, curTrack->longLabel); hPrintf("<FORM ACTION=\"../cgi-bin/hgTables\" NAME=\"mainForm\" METHOD=%s>\n", cartUsualString(cart, "formMethod", "POST")); cartSaveSession(cart); /* Currently selected subtrack table will be the primary subtrack in the * merge. */ cgiMakeHiddenVar(hgtaNextSubtrackMergePrimary, dbTable); hPrintf("<H3>Select a subset of subtracks to merge:</H3>\n"); hCompositeUi(database, cart, curTrack, curTable, hgtaDoSubtrackMergePage, "mainForm", fullTrackHash); hPrintf("<H3>Select a merge operation:</H3>\n"); struct trackDb *primary = subTdbFind(curTrack,curTable); if (isWiggle(database, curTable) || isBedGraph(curTable) || isBigWigTable(curTable)) showWiggleMergeOptions(primary->longLabel); else showBedMergeOptions(); hPrintf("If a filter is specified on the main Table Browser page, it will " "be applied only to %s, not to any other selected subtrack. ", primary->longLabel); hPrintf("If an intersection is specified on the main page, it will be applied " "to the result of this merge.<P>\n"); hPrintf("<P>\n"); cgiMakeButton(hgtaDoSubtrackMergeSubmit, "submit"); hPrintf(" "); cgiMakeButton(hgtaDoMainPage, "cancel"); hPrintf("</FORM>\n"); htmlClose(); }
void doOutSelectedFields(char *table, struct sqlConnection *conn) /* Put up select fields (for tab-separated output) page. */ { if (anySubtrackMerge(database, curTable)) errAbort("Can't do selected fields output when subtrack merge is on. " "Please go back and select another output type, or clear the subtrack merge."); else if (anyIntersection()) errAbort("Can't do selected fields output when intersection is on. " "Please go back and select another output type, or clear the intersection."); else { char *fsTable = cartOptionalString(cart, hgtaFieldSelectTable); char *dbTable = NULL; table = connectingTableForTrack(table); dbTable = getDbTable(database, table); /* Remove cart state if table has been changed: */ if (fsTable && ! sameString(fsTable, dbTable)) { cartRemovePrefix(cart, hgtaFieldSelectPrefix); cartRemove(cart, hgtaFieldSelectTable); } doBigSelectPage(database, table); } }
void doFilterSubmit(struct sqlConnection *conn) /* Respond to submit on filters page. */ { cartSetString(cart, hgtaFilterTable, getDbTable(database, curTable)); doMainPage(conn); }