4898794edd81be5285ea6e544acbedeaeb31bf78 max Tue Nov 23 08:10:57 2021 -0800 Fixing pointers to README file for license in all source code files. refs #27614 diff --git src/hg/gisaid/gisaidSubj/gisaidSubj.c src/hg/gisaid/gisaidSubj/gisaidSubj.c index 0d32867..d956bdf 100644 --- src/hg/gisaid/gisaidSubj/gisaidSubj.c +++ src/hg/gisaid/gisaidSubj/gisaidSubj.c @@ -1,337 +1,337 @@ /* gisaidSubj - A CGI script to display the subject details page.. */ /* Copyright (C) 2013 The Regents of the University of California - * See README in this or parent directory for licensing information. */ + * See kent/LICENSE or http://genome.ucsc.edu/license/ for licensing information. */ #include "common.h" #include "hCommon.h" #include "linefile.h" #include "hash.h" #include "jksql.h" #include "cheapcgi.h" #include "htmshell.h" #include "cart.h" #include "hui.h" #include "dbDb.h" #include "hdb.h" #include "web.h" #include "ra.h" #include "spDb.h" #include "genePred.h" #include "hgColors.h" #include "hPrint.h" //#include "gisaid.h" #include "gisaidSubj.h" /* ---- Global variables. ---- */ struct cart *cart; /* This holds cgi and other variables between clicks. */ struct hash *oldCart; /* Old cart hash. */ char *genome; /* Name of genome - mouse, human, etc. */ char organism[20] = {"hiv"}; char *database; /* Name of genome database - hg15, mm3, or the like. */ char *curSubjId = NULL; /* Current Subject ID */ void usage() /* Explain usage and exit. */ { errAbort( "gisaidSubj - A CGI script to display the subject details page.\n" "usage:\n" " gisaidSubj cgi-vars in var=val format\n" "options:\n" " -hgisaid=XXX Session ID to grab vars from session database\n" " -db=XXX Genome database associated with gene\n" " -org=XXX Organism associated with gene\n" " -hgs_subj=XXX ID of subject\n" ); } /* --------------- Low level utility functions. ----------------- */ static char *rootDir = "gisaidSubjData"; struct hash *readRa(char *rootName, struct hash **retHashOfHash) /* Read in ra in root, root/org, and root/org/database. */ { return hgReadRa(genome, database, rootDir, rootName, retHashOfHash); } static struct hash *genomeSettings; /* Genome-specific settings from settings.ra. */ char *genomeSetting(char *name) /* Return genome setting value. Aborts if setting not found. */ { return hashMustFindVal(genomeSettings, name); } char *genomeOptionalSetting(char *name) /* Returns genome setting value or NULL if not found. */ { return hashFindVal(genomeSettings, name); } boolean checkDatabases(char *databases) /* Check all databases in space delimited string exist. */ { char *dupe = cloneString(databases); char *s = dupe, *word; boolean ok = TRUE; while ((word = nextWord(&s)) != NULL) { if (!sqlDatabaseExists(word)) { ok = FALSE; break; } } freeMem(dupe); return ok; } /* --------------- Page printers ----------------- */ char *sectionSetting(struct section *section, char *name) /* Return section setting value if it exists. */ { return hashFindVal(section->settings, name); } char *sectionRequiredSetting(struct section *section, char *name) /* Return section setting. Squawk and die if it doesn't exist. */ { char *res = sectionSetting(section, name); if (res == NULL) errAbort("Can't find required %s field in %s in settings.ra", name, section->name); return res; } boolean sectionAlwaysExists(struct section *section, struct sqlConnection *conn, char *subjId) /* Return TRUE - for sections that always exist. */ { return TRUE; } void sectionPrintStub(struct section *section, struct sqlConnection *conn, char *subjId) /* Print out coming soon message for section. */ { hPrintf("coming soon!"); } struct section *sectionNew(struct hash *sectionRa, char *name) /* Create a section loading all but methods part from the * sectionRa. */ { struct section *section = NULL; struct hash *settings = hashFindVal(sectionRa, name); if (settings != NULL) { AllocVar(section); section->settings = settings; section->name = sectionSetting(section, "name"); section->shortLabel = sectionRequiredSetting(section, "shortLabel"); section->longLabel = sectionRequiredSetting(section, "longLabel"); section->priority = atof(sectionRequiredSetting(section, "priority")); section->exists = sectionAlwaysExists; section->print = sectionPrintStub; } return section; } int sectionCmpPriority(const void *va, const void *vb) /* Compare to sort sections based on priority. */ { const struct section *a = *((struct section **)va); const struct section *b = *((struct section **)vb); float dif = a->priority - b->priority; if (dif < 0) return -1; else if (dif > 0) return 1; else return 0; } static void addGoodSection(struct section *section, struct sqlConnection *conn, struct section **pList) /* Add section to list if it is non-null and exists returns ok. */ { if (section != NULL && hashLookup(section->settings, "hide") == NULL && section->exists(section, conn, curSubjId)) slAddHead(pList, section); } struct section *loadSectionList(struct sqlConnection *conn) /* Load up section list - first load up sections.ra, and then * call each section loader. */ { struct hash *sectionRa = NULL; struct section *sectionList = NULL; readRa("section.ra", §ionRa); addGoodSection(demogSection(conn, sectionRa), conn, §ionList); //addGoodSection(vaccineSection(conn, sectionRa), conn, §ionList); //addGoodSection(clinicalSection(conn, sectionRa), conn, §ionList); addGoodSection(sequenceSection(conn, sectionRa), conn, §ionList); slSort(§ionList, sectionCmpPriority); return sectionList; } void printSections(struct section *sectionList, struct sqlConnection *conn, char *subjId) /* Print each section in turn. */ { struct section *section; for (section = sectionList; section != NULL; section = section->next) { webNewSection("<A NAME=\"%s\"></A>%s\n", section->name, section->longLabel); section->print(section, conn, subjId); } } void hotLinks() /* Put up the hot links bar. */ { hPrintf("<TABLE WIDTH=\"100%%\" BGCOLOR=\"#000000\" BORDER=\"0\" CELLSPACING=\"0\" CELLPADDING=\"1\"><TR><TD>\n"); hPrintf("<TABLE WIDTH=\"100%%\" BGCOLOR=\"#2636D1\" BORDER=\"0\" CELLSPACING=\"0\" CELLPADDING=\"2\"><TR>\n"); /* Home */ hPrintf("<TD ALIGN=CENTER><A HREF=\"/index.html\" class='topbar' style='color:#FFFFFF;'>" "Home</A></TD>"); //, orgEnc); /* Blat */ hPrintf("<TD ALIGN=CENTER><A HREF=\"../cgi-bin/hgBlat?command=start\" class='topbar' " "style='color:#FFFFFF;'>Blat</A></TD>"); /* Sequence View */ if (hIsGisaidServer()) { hPrintf("<TD ALIGN=CENTER><A HREF=\"../cgi-bin/hgTracks?db=%s\" class='topbar' " "style='color:#FFFFFF;'>Sequence View</A></TD>", database); } else { hPrintf("<TD ALIGN=CENTER><A HREF=\"../cgi-bin/hgGateway?db=%s\" class='topbar' " "style='color:#FFFFFF;'>Sequence View Gateway</A></TD>", database); } /* Table View */ hPrintf("<TD ALIGN=CENTER><A HREF=\"../cgi-bin/gisaidTable\" class='topbar' " "style='color:#FFFFFF;'>Table View</A></TD>"); /* Help */ hPrintf("<TD ALIGN=CENTER><A HREF=\"/goldenPath/help/gisaidTutorial.html#SubjectView\" " "target=_blank class='topbar' style='color:#FFFFFF;'>Help</A></TD>"); hPuts("</TR></TABLE>"); hPuts("</TD></TR></TABLE>\n"); } void webMain(struct sqlConnection *conn) /* Set up fancy web page with hotlinks bar and * sections. */ { struct section *sectionList = NULL; char query[256]; struct sqlResult *sr; char **row; if (hIsGisaidServer()) { validateGisaidUser(cart); } sectionList = loadSectionList(conn); puts("<FORM ACTION=\"/cgi-bin/gisaidSubj\" NAME=\"mainForm\" METHOD=\"GET\">\n"); /* display GISAID logo image here */ //printf("<img src=\"/images/gisaid_header.jpg\" alt=\"\" name=\"gisaid_header\" width=\"800\" height=\"86\" border=\"1\" usemap=\"#gisaid_headerMap\">"); //hPrintf("<br><br>"); hotLinks(); printf("<font size=\"5\"><BR><B>Subject View </B></font>"); if (sameWord(curSubjId, "")) { printf("<BR><H3>Please enter a subject ID.\n"); printf("<input type=\"text\" name=\"hgs_subj\" value=\"%s\">\n", curSubjId); cgiMakeButton("submit", "Go!"); printf("</H3>"); printf("For example: A/California/04/2009");fflush(stdout); } else { sqlSafef(query, sizeof(query), "select subjId from %s.gisaidSubjInfo where subjId = '%s'", database, curSubjId); sr = sqlMustGetResult(conn, query); row = sqlNextRow(sr); sqlFreeResult(&sr); if (row != NULL) { printf( " search for another subject: "); printf("<input type=\"text\" name=\"hgs_subj\" value=\"\">\n"); cgiMakeButton("submit", "Go!"); printSections(sectionList, conn, curSubjId); } else { printf("<H3><span style='color:red;'>%s</span> is not a valid subject ID.</H3>", curSubjId); printf("<H3>Please enter a valid subject ID.\n"); printf("<input type=\"text\" name=\"hgs_subj\" value=\"%s\">\n", ""); cgiMakeButton("submit", "Go!"); printf("<BR><BR>For example: GISAID4123"); printf("</H3>"); fflush(stdout); } } puts("</FORM>\n"); } void cartMain(struct cart *theCart) /* We got the persistent/CGI variable cart. Now * set up the globals and make a web page. */ { struct sqlConnection *conn = NULL; cart = theCart; getDbAndGenome(cart, &database, &genome, oldCart); /* !!! force database to hiv1 until move to server hiv1 is complete and the default database of hgcentral on it point to hiv1. */ conn = hAllocConn(database); curSubjId = cgiOptionalString("hgs_subj"); if (curSubjId == NULL) curSubjId = strdup(""); cartHtmlStart("GISAID Subject View"); webMain(conn); hFreeConn(&conn); cartHtmlEnd(); } char *excludeVars[] = {"Submit", "submit", NULL}; int main(int argc, char *argv[]) /* Process command line. */ { if (argc != 1) usage(); cgiSpoof(&argc, argv); htmlSetBackground(hBackgroundImage()); oldCart = hashNew(12); cartEmptyShell(cartMain, hUserCookie(), excludeVars, oldCart); return 0; }