From 58ebcf46a955f08502b5b3846b1e538290fd29a2 Mon Sep 17 00:00:00 2001 From: Marty Pradere Date: Sun, 20 Jul 2025 13:48:43 -0700 Subject: [PATCH 01/11] link crawler fixes --- .../study/datasets/datasets_manifest.xml | 3 + .../study/datasets/datasets_metadata.xml | 50 +++++++++++++++ WNPRC_EHR/resources/views/dataAdmin.html | 1 - WNPRC_EHR/resources/views/ehrAdmin.html | 10 --- WNPRC_EHR/resources/views/moreReports.html | 1 - .../org/labkey/wnprc_ehr/WNPRC_EHRModule.java | 5 ++ .../data/ColonyCensus/ColonyCensus.java | 62 +++++++++++-------- .../pages/dataentry/NecropsySchedule.jsp | 12 ++-- .../pages/husbandry/WaterCalendar.jsp | 2 +- .../wnprc_ehr/table/WNPRC_EHRCustomizer.java | 2 +- .../test/tests/wnprc_ehr/WNPRC_EHRTest.java | 60 +++++++++++++++++- 11 files changed, 160 insertions(+), 48 deletions(-) diff --git a/WNPRC_EHR/resources/referenceStudy/study/datasets/datasets_manifest.xml b/WNPRC_EHR/resources/referenceStudy/study/datasets/datasets_manifest.xml index afd1f41f4..af54a8e9d 100644 --- a/WNPRC_EHR/resources/referenceStudy/study/datasets/datasets_manifest.xml +++ b/WNPRC_EHR/resources/referenceStudy/study/datasets/datasets_manifest.xml @@ -229,5 +229,8 @@ + + + \ No newline at end of file diff --git a/WNPRC_EHR/resources/referenceStudy/study/datasets/datasets_metadata.xml b/WNPRC_EHR/resources/referenceStudy/study/datasets/datasets_metadata.xml index ecb768871..82b520229 100644 --- a/WNPRC_EHR/resources/referenceStudy/study/datasets/datasets_metadata.xml +++ b/WNPRC_EHR/resources/referenceStudy/study/datasets/datasets_metadata.xml @@ -1,5 +1,55 @@ + + + + + varchar + http://cpas.labkey.com/Study#ParticipantId + + ptid + + + + timestamp + http://cpas.labkey.com/Study#VisitDate + http://cpas.labkey.com/Study#VisitDate + + + timestamp + urn:ehr.labkey.org/#EndDate + + + varchar + urn:ehr.labkey.org/#CaseId + + + timestamp + + + varchar + + + varchar + + + varchar + + + varchar + + + varchar + urn:ehr.labkey.org/#VetReview + + + timestamp + urn:ehr.labkey.org/#VetReviewDate + + + Cases +
+ Contains one row for each breeding pairing/assignment for a dam at the center. diff --git a/WNPRC_EHR/resources/views/dataAdmin.html b/WNPRC_EHR/resources/views/dataAdmin.html index 6ed14e725..a2a1c0794 100644 --- a/WNPRC_EHR/resources/views/dataAdmin.html +++ b/WNPRC_EHR/resources/views/dataAdmin.html @@ -104,7 +104,6 @@ {queryName: 'dental_teeth', schemaName: 'ehr_lookups', title: 'Dental Teeth Field'}, {queryName: 'encounter_types', schemaName: 'ehr_lookups', title: 'Encounter Types'}, - {queryName: 'error_types', schemaName: 'ehr_lookups', title: 'Error Report Error Types'}, {queryName: 'gender_codes', schemaName: 'ehr_lookups', title: 'Gender Codes'}, {queryName: 'geographic_origins', schemaName: 'ehr_lookups', title: 'Geographic Origin Codes'}, {queryName: 'hematology_method', schemaName: 'ehr_lookups', title: 'Hematology Method'}, diff --git a/WNPRC_EHR/resources/views/ehrAdmin.html b/WNPRC_EHR/resources/views/ehrAdmin.html index bdcc617e3..f2fd84d6a 100644 --- a/WNPRC_EHR/resources/views/ehrAdmin.html +++ b/WNPRC_EHR/resources/views/ehrAdmin.html @@ -13,7 +13,6 @@ items: [ {name: 'Client Errors', url: '<%=contextPath%>' + '/shared/query-executeQuery.view?schemaName=auditlog&query.queryName=Client%20API%20Actions'}, {name: 'EHR Backups', url: '<%=contextPath%><%=containerPath%>/Backups/project-begin.view'}, - {name: 'ETL Admin', url: '<%=contextPath%><%=containerPath%>/onprc_ehr-etlAdmin.view'}, {name: 'Genetics Calculations', url: '<%=contextPath%><%=containerPath%>/ehr-geneticCalculationSettings.view'}, //{name: 'ETL Duration', url: '<%=contextPath%><%=containerPath%>/query-executeQuery.view?schemaName=core&query.queryName=Sync Duration'}, //{name: 'ETL History', url: '<%=contextPath%><%=containerPath%>/query-executeQuery.view?schemaName=core&query.queryName=Sync History'}, @@ -41,15 +40,6 @@ {header: 'Logs', items: [ {name: 'All Logs', url: '<%=contextPath%><%=containerPath%>/Logs/project-begin.view'}, - {name: 'Labkey.log', url: '<%=contextPath%>/files<%=containerPath%>/Logs/%40filesets/Tomcat%20Logs/labkey.log'}, - {name: 'Labkey-errors.log', url: '<%=contextPath%>/files<%=containerPath%>/Logs/%40filesets/Tomcat%20Logs/labkey-errors.log'}, - {name: 'ETL Log', url: '<%=contextPath%>/files<%=containerPath%>/Logs/%40filesets/Tomcat%20Logs/ehr-etl.log'}, - {name: 'ETL Errors Log', url: '<%=contextPath%>/files<%=containerPath%>/Logs/%40filesets/Tomcat%20Logs/ehr-etl-errors.log'}, - {name: 'ActiveMQ.log', url: '<%=contextPath%>/files<%=containerPath%>/Logs/%40filesets/ActiveMQ/activemq.log'}, - {name: 'Monit.log', url: '<%=contextPath%>/files<%=containerPath%>/Logs/%40filesets/Monit/monit.log'}, - {name: 'Munin.log', url: '<%=contextPath%>/files<%=containerPath%>/Logs/%40filesets/Munin/munin.log'}, - {name: 'Inbreeding Coefficients Reload Cron Job Log', url: '<%=contextPath%>/files<%=containerPath%>/Logs/%40filesets/Kinship/kinshipOut.txt'}, - {name: 'Kinship Reload Cron Job Log', url: '<%=contextPath%>/files<%=containerPath%>/Logs/%40filesets/Kinship/inbreedingOut.txt'} ] }, {header: 'Notifications', diff --git a/WNPRC_EHR/resources/views/moreReports.html b/WNPRC_EHR/resources/views/moreReports.html index 327a03cdf..579c6a938 100644 --- a/WNPRC_EHR/resources/views/moreReports.html +++ b/WNPRC_EHR/resources/views/moreReports.html @@ -12,7 +12,6 @@ header: 'Reports', items: [ {name: 'Blood Needlesticks', url: '<%=contextPath%>' + ctx['EHRStudyContainer'] + '/query-executeQuery.view?schemaName=study&query.queryName=bloodNeedlesticks'}, - {name: 'Housing By Room and Cage', url: '<%=contextPath%>' + ctx['EHRStudyContainer'] + '/query-executeQuery.view?schemaName=study&query.queryName=housingByRoomCage'}, {name: 'Per Diems (in testing)', url: '<%=contextPath%>' + ctx['EHRStudyContainer'] + '/query-executeQuery.view?schemaName=study&query.queryName=PerDiems'}, {name: 'Per Diems Raw Data (in testing)', url: '<%=contextPath%>' + ctx['EHRStudyContainer'] + '/query-executeQuery.view?schemaName=study&query.queryName=PerDiemsByDay'}, {name: 'Restraints Used', url: '<%=contextPath%>' + ctx['EHRStudyContainer'] + '/query-executeQuery.view?schemaName=study&query.queryName=restraintUsed'}, diff --git a/WNPRC_EHR/src/org/labkey/wnprc_ehr/WNPRC_EHRModule.java b/WNPRC_EHR/src/org/labkey/wnprc_ehr/WNPRC_EHRModule.java index 21f40c0d8..85a6d4ade 100644 --- a/WNPRC_EHR/src/org/labkey/wnprc_ehr/WNPRC_EHRModule.java +++ b/WNPRC_EHR/src/org/labkey/wnprc_ehr/WNPRC_EHRModule.java @@ -45,10 +45,12 @@ import org.labkey.api.query.DetailsURL; import org.labkey.api.query.QuerySchema; import org.labkey.api.resource.Resource; +import org.labkey.api.security.Directive; import org.labkey.api.security.User; import org.labkey.api.security.roles.RoleManager; import org.labkey.api.view.WebPartFactory; import org.labkey.api.view.template.ClientDependency; +import org.labkey.filters.ContentSecurityPolicyFilter; import org.labkey.wnprc_ehr.bc.BCReportRunner; import org.labkey.wnprc_ehr.buttons.ChangeBloodQCButton; import org.labkey.wnprc_ehr.buttons.CreateTaskButton; @@ -193,6 +195,9 @@ protected void init() { addController(CONTROLLER_NAME, WNPRC_EHRController.class); addController(TEST_CONTROLLER_NAME, WNPRC_EHRTestController.class); + ContentSecurityPolicyFilter.registerAllowedSources("bs_style", Directive.Style, "https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css"); + ContentSecurityPolicyFilter.registerAllowedSources("bs_font", Directive.Font, "https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/fonts/"); + registerRoles(); registerPermissions(); } diff --git a/WNPRC_EHR/src/org/labkey/wnprc_ehr/data/ColonyCensus/ColonyCensus.java b/WNPRC_EHR/src/org/labkey/wnprc_ehr/data/ColonyCensus/ColonyCensus.java index f778d1d0d..dfc9cc255 100644 --- a/WNPRC_EHR/src/org/labkey/wnprc_ehr/data/ColonyCensus/ColonyCensus.java +++ b/WNPRC_EHR/src/org/labkey/wnprc_ehr/data/ColonyCensus/ColonyCensus.java @@ -135,36 +135,46 @@ public TreeMap getPopulationOverTimeForSpecies(Pop Map deltasPerDate = new HashMap<>(); Integer animalsAtStart = 0; - for( String id : animalsBySpeciesId.get(species)) { - AnimalEventSet animalEventSet = animalEventSetsById.get(id); - for( StintAtPrimateCenter stint: animalEventSet.getStints() ) { - // Null startdate is okay... - LocalDate startDate = (stint.getStartDay() == null) ? null : new LocalDate(stint.getStartDay()); - LocalDate endDate = ( stint.getEndDay() == null) ? null : new LocalDate(stint.getEndDay()); - - - // Increment the counter for start of stints, if there was a start - if (startDate != null) { - Integer currentStartDelta = deltasPerDate.get(startDate); - if (currentStartDelta == null) { - currentStartDelta = 0; + if (animalsBySpeciesId.get(species) != null) + { + for (String id : animalsBySpeciesId.get(species)) + { + AnimalEventSet animalEventSet = animalEventSetsById.get(id); + for (StintAtPrimateCenter stint : animalEventSet.getStints()) + { + // Null startdate is okay... + LocalDate startDate = (stint.getStartDay() == null) ? null : new LocalDate(stint.getStartDay()); + LocalDate endDate = (stint.getEndDay() == null) ? null : new LocalDate(stint.getEndDay()); + + + // Increment the counter for start of stints, if there was a start + if (startDate != null) + { + Integer currentStartDelta = deltasPerDate.get(startDate); + if (currentStartDelta == null) + { + currentStartDelta = 0; + } + deltasPerDate.put(startDate, currentStartDelta + 1); + } + else + { + // If there wasn't a start, assume the animal was always in the colony + animalsAtStart++; } - deltasPerDate.put(startDate, currentStartDelta + 1); - } - else { - // If there wasn't a start, assume the animal was always in the colony - animalsAtStart++; - } - // Decrement the counter for end of stints, if there was an end - if ( endDate != null) { - Integer currentEndDelta = deltasPerDate.get(endDate); - if ( currentEndDelta == null ) { - currentEndDelta = 0; + // Decrement the counter for end of stints, if there was an end + if (endDate != null) + { + Integer currentEndDelta = deltasPerDate.get(endDate); + if (currentEndDelta == null) + { + currentEndDelta = 0; + } + deltasPerDate.put(endDate, currentEndDelta - 1); } - deltasPerDate.put(endDate, currentEndDelta - 1); - } + } } } diff --git a/WNPRC_EHR/src/org/labkey/wnprc_ehr/pages/dataentry/NecropsySchedule.jsp b/WNPRC_EHR/src/org/labkey/wnprc_ehr/pages/dataentry/NecropsySchedule.jsp index aea88ea34..fd1c87b57 100644 --- a/WNPRC_EHR/src/org/labkey/wnprc_ehr/pages/dataentry/NecropsySchedule.jsp +++ b/WNPRC_EHR/src/org/labkey/wnprc_ehr/pages/dataentry/NecropsySchedule.jsp @@ -22,14 +22,14 @@ dependencies.add("fullcalendar"); } %> - + <%----%> - + <%----%> - - - - + + + + <% SimpleQueryFactory queryFactory = new SimpleQueryFactory(getUser(), getContainer()); diff --git a/WNPRC_EHR/src/org/labkey/wnprc_ehr/pages/husbandry/WaterCalendar.jsp b/WNPRC_EHR/src/org/labkey/wnprc_ehr/pages/husbandry/WaterCalendar.jsp index f6fa4fd0e..e5bfcf69e 100644 --- a/WNPRC_EHR/src/org/labkey/wnprc_ehr/pages/husbandry/WaterCalendar.jsp +++ b/WNPRC_EHR/src/org/labkey/wnprc_ehr/pages/husbandry/WaterCalendar.jsp @@ -106,7 +106,7 @@ %> - +