d156aaa50bbe78b0c05da8cde9cd837d88d659fc chmalee Wed Aug 19 12:03:49 2020 -0700 hgc and hgTrackUi can query a 'relatedTrack' table to print a list of related tracks to the one being looked at along with a reason for the relation, refs #25721 diff --git src/hg/lib/hui.c src/hg/lib/hui.c index 18345a7..699a501 100644 --- src/hg/lib/hui.c +++ src/hg/lib/hui.c @@ -9592,15 +9592,64 @@ if (version == NULL) { // try the hgFixed.trackVersion table struct trackVersion *trackVersion = getTrackVersion(database, tdb->track); // try trackVersion table with parent, for composites/superTracks if (trackVersion == NULL && tdb->parent != NULL) trackVersion = getTrackVersion(database, tdb->parent->track); if (trackVersion != NULL) version = trackVersion->version; } if (isNotEmpty(version)) printf("<B>Data version:</B> %s <BR>\n", version); } +void printRelatedTracks(char *database, struct hash *trackHash, struct trackDb *tdb, struct cart *cart) +/* Maybe print a "related track" section */ +{ +struct sqlConnection *conn = hAllocConn(database); +char *relatedTrackTable = cfgOptionDefault("db.relatedTrack","relatedTrack"); +if (!sqlTableExists(conn, relatedTrackTable)) + { + hFreeConn(&conn); + return; + } + +char query[256]; +sqlSafef(query, sizeof(query), + "select track1, track2, why from %s where track1='%s' or track2='%s'", relatedTrackTable, tdb->track, tdb->track); + +char **row; +struct sqlResult *sr; +sr = sqlGetResult(conn, query); +row = sqlNextRow(sr); +if (row != NULL) + { + puts("<b>Related tracks</b>\n"); + puts("<ul>\n"); + char *track1, *track2, *why, *otherTrack; + for (; row != NULL; row = sqlNextRow(sr)) + { + track1 = row[0]; + track2 = row[1]; + why = row[2]; + + if (sameWord(track1, tdb->track)) + otherTrack = track2; + else + otherTrack = track1; + + struct trackDb *otherTdb = hashFindVal(trackHash, otherTrack); + if (otherTdb) + { + puts("<li>"); + printf("<a href=\"%s?g=%s&%s\">%s</a>", hTrackUiForTrack(otherTdb->track), otherTdb->track, cartSidUrlString(cart), otherTdb->shortLabel); + puts(": "); + puts(why); + } + } + puts("</ul>\n"); + } +sqlFreeResult(&sr); +hFreeConn(&conn); +}