Skip to content

[dashboard | statistics] Add Project Size to dashboard charts#3

Open
jeffersoncasimir wants to merge 249 commits intomainfrom
2025_09_11_project_size_chart
Open

[dashboard | statistics] Add Project Size to dashboard charts#3
jeffersoncasimir wants to merge 249 commits intomainfrom
2025_09_11_project_size_chart

Conversation

@jeffersoncasimir
Copy link
Owner

@jeffersoncasimir jeffersoncasimir commented Sep 15, 2025

Adds project sizes to the dashboard:

Screenshot 2025-10-20 at 5 58 23 PM Screenshot 2025-10-20 at 5 58 26 PM Screenshot 2025-10-20 at 5 58 42 PM

SKADE2303 and others added 13 commits June 27, 2025 09:18
Fixing typo in README.md inside 02_GETTING_STARTED in wiki

* Resolves aces#9782
In MariaDB 10.5, if you’re using an init script like 0004-sql-user.sql,
it may not execute as expected because of differences in how
MariaDB/MySQL handle CREATE USER, GRANT, and init scripts in
/docker-entrypoint-initdb.d.
Fix bug with error log not showing correct message
IBIS candidate dataset has empty value in sex for some candidates.
Page was incorrectly checking permissions for an issue that does not exist, because the user is attempting to create a new issue.
Fixes even further what was fixed in aces#9534.  The fix in the
previous PR did not account for arguments coming after the `?` in the
URL, this new parameter should account for it.
…le (aces#9916)

Fix incorrect path that prevents module overrides
…oading (aces#9882)

1. An error is thrown for empty CSVs for both choices in the 'CSV
containing list of' dropdown (Candidates and Sessions)
2. If an incorrectly formatted csv is uploaded, it is cleared from
selection and not allowed to submit.
3. If user clicks on 'Submit' without uploading a csv, an error is
thrown.

* Resolves aces#9880
…9784)

This change modifies the transformation of csvData in the DataTable
component by replacing .flatMap() with .map().
• Before: csvData was a flattened array of mapped cells across all
fields and rows.
• After: csvData is now a nested array (Array<Array<Cell>>), preserving
the structure of rows.
• This aligns better with expected downstream usage or fixes unintended
flattening issues in CSV processing.
Tab does not load because column 'cohort.CohortID' in on clause is ambiguous.

Fixes aces#9970
…s#10005)

The issue tracker notification was added in  aces#9396 but it was only added as a new
patch and not to the schema. This adds it to the schema as of
27.0-release since that is when the feature was added.
Fix inability to source upgrade from IBIS.
kongtiaowang and others added 3 commits September 22, 2025 10:27
All examiners are returned for the data dictionary when
`empty($this->getCommentID())`.

Closes aces#9852
Fix broken links in LORIS footer
@jeffersoncasimir jeffersoncasimir marked this pull request as ready for review October 20, 2025 21:59
This translates the recruitment widget (the last widget) on the LORIS
dashboard, so that the entire dashboard is now translated (The
recruitment widget had been waiting on aces#9937 to be merged before
translating it.). Japanese is used as a test language.

It also fixes a regression on the study progression translation
introduced by aces#9937 as new filters that are shared between the two were
added.
jeffersoncasimir and others added 11 commits February 24, 2026 12:41
All changes mentioned in aces#10232 are addressed, except for the following,
which are either from the database or otherwise out of our current
control:

- Admin account
- Loris Website
- Site names (ex: DCC)
- Table content
- Notification descriptions
- Help text
- "All Projects" on login page
- Terms of Use (button and content)
- Instrument fields and metadata
- Caveat text from an RB candidate
- Emails
- Calendar picker (browser language)

Bug:
- Male/Female is not pluralizing on dashboard
(`modules/statistics/jsx/widgets/helpers/progressbarBuilder.js`)
…0355)

The `testFilter` test in `BatteryManagerTest.php` fails intermittently
in CI (PHP 8.3 and 8.4). The failures are unrelated to any PR's changes.
Re-running the tests typically makes them pass. This makes CI unreliable
for all contributors.

### Root Cause: Race Condition

The existing `_filterTest` helper (from `LorisIntegrationTest`) has a
timing bug:

1. It sets a filter value (e.g., selects "AOSI" from the dropdown)
2. It **immediately** reads the display text (`"X rows displayed of Y"`)
3. It asserts on the expected row count

The problem is that `safeFindElement` only waits for the element to be
**visible**; but the display element is *always* visible on the page.
After a filter change, React needs time to re-render the table with
filtered results. Sometimes React finishes before the read (test
passes), sometimes it doesn't (test fails with stale data like `"0 rows
displayed of 0"`).

The same issue occurs after clicking "Clear Filters", the next filter
test starts before the previous filter state has fully reset.

### Secondary Issue: Wrong Expected Count

The test expected `'2 rows'` for the AOSI filter, but
`RB_test_battery.sql` contains **3** AOSI entries (IDs 131, 132, 133).
The query in `TestProvisioner` has no `WHERE Active='Y'` clause, it
returns all rows.

### Change Summary

**File:** `modules/battery_manager/test/BatteryManagerTest.php`

1. **Replaced `_filterTest` calls with `WebDriverWait`-based polling**:
instead of reading the display text once and hopes React has
re-rendered, the test now polls every 500ms (up to 10s) until the
expected text appears.

2. **Added waits after "Clear Filters" clicks**: ensures each filter
test starts with a clean state.

3. **Moved `testFilter()` before DB-mutating tests**: `testEditform`,
`testAddNew`, and `testActivebtn` modify the `test_battery` table
without cleanup. Running `testFilter` first ensures it sees the original
RaisinBread data.

4. **Corrected AOSI expected count** from `'2 rows'` to `'3 rows'` to
match the actual test data.

### Design Decisions

- **10-second timeout**: The full `testFilter` completes in ~5 seconds
across all three filter operations. A 10-second ceiling provides a 2x
safety margin without making slow failures take unreasonably long.

- **500ms polling interval**: Balances responsiveness with CPU overhead.
React re-renders typically complete in under 500ms, so most polls
succeed on the first or second check.

- **Local helper instead of modifying `_filterTest`**: The shared
`_filterTest` in `LorisIntegrationTest` is used by other modules. Adding
a private `_waitForFilterResult` method in `BatteryManagerTest` avoids
touching shared infrastructure.
This updates the version number to LORIS 28 in the same places done for
27 in PR#9868.

It also creates the release patch by concatenating all the SQL files in
new_patches, as that was apparently missed.
Bumps [ajv](https://github.com/ajv-validator/ajv) from 6.12.6 to 6.14.0.
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/ajv-validator/ajv/commit/e3af0a723b4b7ad86eff43be355c706d31e0e915"><code>e3af0a7</code></a>
6.14.0</li>
<li><a
href="https://github.com/ajv-validator/ajv/commit/b552ed66191eb338498df3196065c777e3bb71f2"><code>b552ed6</code></a>
add regExp option to address $data exploit via a regular expression
(CVE-2025...</li>
<li><a
href="https://github.com/ajv-validator/ajv/commit/72f228665859eed5e2be3a66f8c4a7aff6b34dcf"><code>72f2286</code></a>
docs: update v7 info</li>
<li><a
href="https://github.com/ajv-validator/ajv/commit/231e52b3bca62559202b95e5fb5cee02145b226a"><code>231e52b</code></a>
Merge pull request <a
href="https://redirect.github.com/ajv-validator/ajv/issues/1320">#1320</a>
from philsturgeon/patch-1</li>
<li><a
href="https://github.com/ajv-validator/ajv/commit/d3475fc20416c33fe030c8aa3b09fa411f325bbd"><code>d3475fc</code></a>
Add spectral, an AJV util from a sponsor</li>
<li><a
href="https://github.com/ajv-validator/ajv/commit/413afe01f518ea74d1740a7cb211df787c585544"><code>413afe0</code></a>
docs: v7.0.0-beta.3</li>
<li><a
href="https://github.com/ajv-validator/ajv/commit/11e997bda2f3eecb445c1e5a07d96ef7e81c5f5d"><code>11e997b</code></a>
update readme for v7</li>
<li>See full diff in <a
href="https://github.com/ajv-validator/ajv/compare/v6.12.6...v6.14.0">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=ajv&package-manager=npm_and_yarn&previous-version=6.12.6&new-version=6.14.0)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)
You can disable automated security fix PRs for this repo from the
[Security Alerts page](https://github.com/aces/Loris/network/alerts).

</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Bumps and [minimatch](https://github.com/isaacs/minimatch). These
dependencies needed to be updated together.
Updates `minimatch` from 3.1.2 to 3.1.5
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/isaacs/minimatch/commit/7bba97888a27a6162983056bcce2a6e28f668712"><code>7bba978</code></a>
3.1.5</li>
<li><a
href="https://github.com/isaacs/minimatch/commit/bd259425b2ca17b42897997f93e890314155522d"><code>bd25942</code></a>
docs: add warning about ReDoS</li>
<li><a
href="https://github.com/isaacs/minimatch/commit/1a9c27c75725474dbde57db2995b6281b267756d"><code>1a9c27c</code></a>
fix partial matching of globstar patterns</li>
<li><a
href="https://github.com/isaacs/minimatch/commit/1a2e084af579731af66c221214e3ca8222c9bf23"><code>1a2e084</code></a>
3.1.4</li>
<li><a
href="https://github.com/isaacs/minimatch/commit/ae24656237c3d58067442f790ce17eff84463a47"><code>ae24656</code></a>
update lockfile</li>
<li><a
href="https://github.com/isaacs/minimatch/commit/b1003749228b2a79e1f237963a0d559ef7a0941e"><code>b100374</code></a>
limit recursion for **, improve perf considerably</li>
<li><a
href="https://github.com/isaacs/minimatch/commit/26ffeaa091b9f660833e23f42e07165b33e85c13"><code>26ffeaa</code></a>
lockfile update</li>
<li><a
href="https://github.com/isaacs/minimatch/commit/9eca892a4e5dbb20534f9f30483b85cdeee6c2eb"><code>9eca892</code></a>
lock node version to 14</li>
<li><a
href="https://github.com/isaacs/minimatch/commit/00c323b188b704e5d4bc534ecec2268cfa70a32a"><code>00c323b</code></a>
3.1.3</li>
<li><a
href="https://github.com/isaacs/minimatch/commit/30486b2048929264f44d18822891cfffa02af78b"><code>30486b2</code></a>
update CI matrix and actions</li>
<li>Additional commits viewable in <a
href="https://github.com/isaacs/minimatch/compare/v3.1.2...v3.1.5">compare
view</a></li>
</ul>
</details>
<br />

Updates `minimatch` from 5.1.6 to 5.1.9
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/isaacs/minimatch/commit/7bba97888a27a6162983056bcce2a6e28f668712"><code>7bba978</code></a>
3.1.5</li>
<li><a
href="https://github.com/isaacs/minimatch/commit/bd259425b2ca17b42897997f93e890314155522d"><code>bd25942</code></a>
docs: add warning about ReDoS</li>
<li><a
href="https://github.com/isaacs/minimatch/commit/1a9c27c75725474dbde57db2995b6281b267756d"><code>1a9c27c</code></a>
fix partial matching of globstar patterns</li>
<li><a
href="https://github.com/isaacs/minimatch/commit/1a2e084af579731af66c221214e3ca8222c9bf23"><code>1a2e084</code></a>
3.1.4</li>
<li><a
href="https://github.com/isaacs/minimatch/commit/ae24656237c3d58067442f790ce17eff84463a47"><code>ae24656</code></a>
update lockfile</li>
<li><a
href="https://github.com/isaacs/minimatch/commit/b1003749228b2a79e1f237963a0d559ef7a0941e"><code>b100374</code></a>
limit recursion for **, improve perf considerably</li>
<li><a
href="https://github.com/isaacs/minimatch/commit/26ffeaa091b9f660833e23f42e07165b33e85c13"><code>26ffeaa</code></a>
lockfile update</li>
<li><a
href="https://github.com/isaacs/minimatch/commit/9eca892a4e5dbb20534f9f30483b85cdeee6c2eb"><code>9eca892</code></a>
lock node version to 14</li>
<li><a
href="https://github.com/isaacs/minimatch/commit/00c323b188b704e5d4bc534ecec2268cfa70a32a"><code>00c323b</code></a>
3.1.3</li>
<li><a
href="https://github.com/isaacs/minimatch/commit/30486b2048929264f44d18822891cfffa02af78b"><code>30486b2</code></a>
update CI matrix and actions</li>
<li>Additional commits viewable in <a
href="https://github.com/isaacs/minimatch/compare/v3.1.2...v3.1.5">compare
view</a></li>
</ul>
</details>
<br />

Updates `minimatch` from 6.1.8 to 6.2.3
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/isaacs/minimatch/commit/7bba97888a27a6162983056bcce2a6e28f668712"><code>7bba978</code></a>
3.1.5</li>
<li><a
href="https://github.com/isaacs/minimatch/commit/bd259425b2ca17b42897997f93e890314155522d"><code>bd25942</code></a>
docs: add warning about ReDoS</li>
<li><a
href="https://github.com/isaacs/minimatch/commit/1a9c27c75725474dbde57db2995b6281b267756d"><code>1a9c27c</code></a>
fix partial matching of globstar patterns</li>
<li><a
href="https://github.com/isaacs/minimatch/commit/1a2e084af579731af66c221214e3ca8222c9bf23"><code>1a2e084</code></a>
3.1.4</li>
<li><a
href="https://github.com/isaacs/minimatch/commit/ae24656237c3d58067442f790ce17eff84463a47"><code>ae24656</code></a>
update lockfile</li>
<li><a
href="https://github.com/isaacs/minimatch/commit/b1003749228b2a79e1f237963a0d559ef7a0941e"><code>b100374</code></a>
limit recursion for **, improve perf considerably</li>
<li><a
href="https://github.com/isaacs/minimatch/commit/26ffeaa091b9f660833e23f42e07165b33e85c13"><code>26ffeaa</code></a>
lockfile update</li>
<li><a
href="https://github.com/isaacs/minimatch/commit/9eca892a4e5dbb20534f9f30483b85cdeee6c2eb"><code>9eca892</code></a>
lock node version to 14</li>
<li><a
href="https://github.com/isaacs/minimatch/commit/00c323b188b704e5d4bc534ecec2268cfa70a32a"><code>00c323b</code></a>
3.1.3</li>
<li><a
href="https://github.com/isaacs/minimatch/commit/30486b2048929264f44d18822891cfffa02af78b"><code>30486b2</code></a>
update CI matrix and actions</li>
<li>Additional commits viewable in <a
href="https://github.com/isaacs/minimatch/compare/v3.1.2...v3.1.5">compare
view</a></li>
</ul>
</details>
<br />


Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)
You can disable automated security fix PRs for this repo from the
[Security Alerts page](https://github.com/aces/Loris/network/alerts).

</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment