70e9200a58ef4db6378dae703296d29188ae26b1 tdreszer Fri Dec 17 14:58:43 2010 -0800 Make use of fileUi.h macros and support hgFileUi CGI diff --git src/hg/lib/fileUi.c src/hg/lib/fileUi.c index 8c8cfd8..0620a63 100644 --- src/hg/lib/fileUi.c +++ src/hg/lib/fileUi.c @@ -135,38 +135,38 @@ slAddHead(&newList,oneFile); oneFile = NULL; } if (newList) foundFiles = slCat(newList,foundFiles); return oneFile; } sortOrder_t *fileSortOrderGet(struct cart *cart,struct trackDb *parentTdb) /* Parses 'fileSortOrder' trackDb/cart instructions and returns a sort order struct or NULL. Some trickiness here. sortOrder->sortOrder is from cart (changed by user action), as is sortOrder->order, But columns are in original tdb order (unchanging)! However, if cart is null, all is from trackDb.ra */ { int ix; -char *setting = trackDbSetting(parentTdb, "fileSortOrder"); +char *setting = trackDbSetting(parentTdb, FILE_SORT_ORDER); if(setting == NULL) // Must be in trackDb or not a sortable list of files return NULL; sortOrder_t *sortOrder = needMem(sizeof(sortOrder_t)); sortOrder->setting = cloneString(setting); sortOrder->htmlId = needMem(strlen(parentTdb->track)+20); -safef(sortOrder->htmlId, (strlen(parentTdb->track)+20), "%s.fileSortOrder", parentTdb->track); +safef(sortOrder->htmlId, (strlen(parentTdb->track)+20), "%s.%s", parentTdb->track,FILE_SORT_ORDER); if(cart != NULL) sortOrder->sortOrder = cloneString(cartOptionalString(cart, sortOrder->htmlId)); sortOrder->count = chopByWhite(sortOrder->setting,NULL,0); // Get size sortOrder->column = needMem(sortOrder->count*sizeof(char*)); sortOrder->count = chopByWhite(sortOrder->setting,sortOrder->column,sortOrder->count); sortOrder->title = needMem(sortOrder->count*sizeof(char*)); sortOrder->forward = needMem(sortOrder->count*sizeof(boolean)); sortOrder->order = needMem(sortOrder->count*sizeof(int)); for (ix = 0; ixcount; ix++) { // separate out mtaDb var in sortColumn from title sortOrder->title[ix] = strchr(sortOrder->column[ix],'='); // Could be 'cell=Cell_Line' if (sortOrder->title[ix] != NULL) { @@ -298,31 +298,31 @@ // Get an mdbObj list of all that belong to this track and have a fileName char buf[256]; safef(buf,sizeof(buf),"composite=%s fileName=?",tdb->track); struct mdbByVar *mdbVars = mdbByVarsLineParse(buf); struct mdbObj *mdbList = mdbObjsQueryByVars(conn,mdbTable,mdbVars); // Now get Indexes But be sure not to duplicate entries in the list!!! safef(buf,sizeof(buf),"composite=%s fileIndex= fileName!=",tdb->track); mdbVars = mdbByVarsLineParse(buf); mdbList = slCat(mdbList, mdbObjsQueryByVars(conn,mdbTable,mdbVars)); sqlDisconnect(&conn); if (slCount(mdbList) == 0) { - warn("No files specified in memtadata for: %s\n%s",tdb->track,tdb->longLabel); + warn("No files specified in metadata for: %s\n%s",tdb->track,tdb->longLabel); return; } // Remove common vars from mdbs grant=Bernstein; lab=Broad; dataType=ChipSeq; setType=exp; control=std; char *commonTerms[] = { "grant", "lab", "dataType", "control", "setType" }; struct dyString *dyCommon = dyStringNew(256); for(ix=0;ix\n"); printf("\n"); printf("\n"); printf(" "); int filesCount = slCount(fileList); if (filesCount > 5) printf("%d files",filesCount); //puts(""); // Use this style when filterboxes are up and running -//if (sortOrder) // NOTE: This could be done to preserve sort order +//if (sortOrder) // NOTE: This could be done to preserve sort order FIXME: However hgFileUi would need form OR changes would need to be ajaxed over AND hgsid would be needed. // printf("",sortOrder->htmlId, sortOrder->sortOrder); printf("\n"); +columnCount++; // Now the columns int curOrder = 0; if (sortOrder) { curOrder = sortOrder->count; for(ix=0;ixcount;ix++) { printf("%s\n", sortOrder->order[ix],(sortOrder->forward[ix]?"":" sortRev"), (sameString("fileSize",sortOrder->column[ix])?"abbr='use' ":""), sortOrder->title[ix]); // keeing track of sortOrder + columnCount++; + if (sameWord(sortOrder->column[ix],"dateUnrestricted")) + restrictedColumn = columnCount; } } //#define INCLUDE_FILENAMES #ifndef INCLUDE_FILENAMES else #endif///defn INCLUDE_FILENAMES + { printf("File Name\n",++curOrder); + columnCount++; + } printf("Additional Details\n",++curOrder); +columnCount++; printf("\n"); // Now the files... -printf("\n"); +printf("\n"); // 'sorting' is a fib but it conveniently greys the list till the table is initialized. for(oneFile = fileList;oneFile!= NULL;oneFile=oneFile->next) { char *field = NULL; printf(""); // TODO: BUILD IN THE CLASSES TO ALLOW FILTERBOXES TO WORK!!! // Download button printf(""); printf("", hDownloadsServer(),db,ENCODE_DCC_DOWNLOADS, tdb->track, oneFile->fileName, oneFile->fileName); printf(""); printf("\n"); // Each of the pulled out mdb vars if (sortOrder) @@ -474,25 +484,38 @@ //printf(" ...", // oneFile->mdb->obj,oneFile->mdb->obj); //printf("",oneFile->mdb->obj); } // Extras grant=Bernstein; lab=Broad; dataType=ChipSeq; setType=exp; control=std; mdbObjRemoveVars(oneFile->mdb,"fileName fileIndex composite project"); // Remove this from mdb now so that it isn't displayed in "extras' mdbObjReorderVars(oneFile->mdb,"grant lab dataType cell treatment antibody protocol replicate view",FALSE); // Bring to front mdbObjReorderVars(oneFile->mdb,"subId submittedDataVersion dateResubmitted dataVersion setType inputType controlId tableName",TRUE); // Send to back field = mdbObjVarValPairsAsLine(oneFile->mdb,TRUE); printf("%s",field?field:"  "); printf("\n"); } -printf("
\n"); -printf("\n"); +printf("\n"); +printf(""); + +// Restriction policy link in first column? +if (restrictedColumn == 1) + printf("Restriction Policy", (columnCount - restrictedColumn),ENCODE_DATA_RELEASE_POLICY); + +printf("    ",(restrictedColumn > 1 ? (restrictedColumn - 1) : columnCount)); // Total if (filesCount > 5) - printf("    %d files\n",filesCount); //puts(""); // Use this style when filterboxes are up and running + printf("%d files\n",filesCount); + +// Restriction policy link in later column? +if (restrictedColumn > 1) + printf("Restriction Policy", columnCount,ENCODE_DATA_RELEASE_POLICY); + +printf("\n"); +printf("
\n"); // Free mem? }