Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
61 commits
Select commit Hold shift + click to select a range
e830d46
[statistics] Cleanup filters and add Registration Date
skarya22 Jul 30, 2025
670e896
Fix line length
skarya22 Jul 30, 2025
8f39796
Add subtitles to dashboard panels
skarya22 Jul 31, 2025
8456dc3
Fix formatting
skarya22 Jul 31, 2025
26c1f49
Fix tests
skarya22 Jul 31, 2025
dfc2bf9
Fix issue with visit filter + console warning + date_registered
skarya22 Aug 13, 2025
b480d09
Reorganize and add age distribution
skarya22 Aug 14, 2025
a717898
Fix php formatting
skarya22 Aug 14, 2025
8230261
Just trying to make phan happy
skarya22 Aug 14, 2025
ef341c8
Add % to age chart and bigger subtitle
skarya22 Sep 3, 2025
4bb8745
Add project size charts + Generalize helpers
jeffersoncasimir Sep 15, 2025
89cfcf1
Add SQL patch + RB
jeffersoncasimir Sep 15, 2025
4a4ba99
Rename 'Project Size' to 'Dataset Size'
jeffersoncasimir Sep 15, 2025
282b845
Fint php lint
jeffersoncasimir Sep 16, 2025
ca95d21
Remove commented code
jeffersoncasimir Sep 16, 2025
26ca1d6
Fix conflict
jeffersoncasimir Sep 16, 2025
f9469d1
Compliance changes
jeffersoncasimir Sep 17, 2025
6988b31
Lint fixes
jeffersoncasimir Sep 17, 2025
1ed56ac
Static fixes
jeffersoncasimir Sep 17, 2025
f542b9b
Satisfy linter
jeffersoncasimir Sep 17, 2025
6f00bb6
Satisfy linter
jeffersoncasimir Sep 17, 2025
6c89143
Corrected merge change
jeffersoncasimir Oct 20, 2025
97581e7
Remove console.log
jeffersoncasimir Oct 20, 2025
6722dff
Rebase to aces/main
jeffersoncasimir Oct 27, 2025
2f4718c
Fix failing static tests
jeffersoncasimir Oct 27, 2025
4c5818a
Fix failing static tests
jeffersoncasimir Oct 27, 2025
a0208a4
Fix null scenario
jeffersoncasimir Oct 27, 2025
c98b77a
Fix null scenario
jeffersoncasimir Oct 27, 2025
b5b150b
Make strings translatable
jeffersoncasimir Oct 29, 2025
2865ca9
Revert unecessary changes
jeffersoncasimir Oct 29, 2025
c72dfdf
Add missing translations
jeffersoncasimir Nov 24, 2025
e85727a
Remove dead code
jeffersoncasimir Nov 24, 2025
35f99ce
Remove artifact
jeffersoncasimir Nov 24, 2025
b2077af
Rebase + Satisfy php linter
jeffersoncasimir Nov 24, 2025
9c271f3
Fully translated to French
jeffersoncasimir Feb 24, 2026
10686cf
Merge branch 'main' into 2025_09_11_project_size_chart
jeffersoncasimir Mar 3, 2026
b1235fc
Add loris.pot translations to hi and ja
jeffersoncasimir Mar 5, 2026
2e4b7d6
Change URL to '#'
jeffersoncasimir Mar 5, 2026
c709161
Fix bug when module not accessible
jeffersoncasimir Apr 21, 2026
78e8c38
Slightly alter syntax
jeffersoncasimir Apr 21, 2026
eb2bc98
Rename patch
jeffersoncasimir Jun 18, 2026
52544c8
Add tables to deletion patch
jeffersoncasimir Jun 18, 2026
f0d739e
Merge branch '29.0-release' into 2025_09_11_project_size_chart
jeffersoncasimir Jun 18, 2026
5deca90
Dynamically display view + Remove unused filtering code
jeffersoncasimir Jun 18, 2026
58bc58e
lintfix
jeffersoncasimir Jun 18, 2026
5498a6c
Add SQL patch + RB
jeffersoncasimir Sep 15, 2025
1ed3d96
EEG widget + charts endpoints
jeffersoncasimir Sep 17, 2025
93a0880
Show graphs + Fix payload
jeffersoncasimir Sep 29, 2025
0953da7
php lint fix
jeffersoncasimir Sep 29, 2025
752b5a8
Add request to endpoints
jeffersoncasimir Oct 22, 2025
ee2781e
Add translations
jeffersoncasimir Oct 29, 2025
6b257a1
Revert unecessary changes
jeffersoncasimir Oct 29, 2025
31c7dc5
Linter compliance
jeffersoncasimir Oct 29, 2025
0632644
Static compliance
jeffersoncasimir Oct 30, 2025
e5c35fc
Add translations (FR only)
jeffersoncasimir Jun 18, 2026
0c0c225
Fix remaining translations + add zh support
jeffersoncasimir Jun 18, 2026
199b860
lintfix
jeffersoncasimir Jun 18, 2026
d295047
lintfix (js)
jeffersoncasimir Jun 18, 2026
dc8e13e
Merge branch '29.0-release' into 2025_10_29_rebased_eeg_charts
jeffersoncasimir Jun 30, 2026
6ba14b0
Merge branch '29.0-release' into 2025_10_29_rebased_eeg_charts
jeffersoncasimir Jul 13, 2026
9a57b39
Merge branch '29.0-release' into 2025_10_29_rebased_eeg_charts
jeffersoncasimir Sep 2, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -615,3 +615,12 @@ msgstr ""

msgid "Channel Types"
msgstr ""

# EEG charts
msgid "EEG Session"
msgid_plural "EEG Sessions"
msgstr[0] ""

msgid "EEG Event"
msgid_plural "EEG Events"
msgstr[0] ""
Original file line number Diff line number Diff line change
Expand Up @@ -755,3 +755,14 @@ msgstr "Voir la session"

msgid "Channel Types"
msgstr "Types de chaînes"

# Widgets
msgid "EEG Session"
msgid_plural "EEG Sessions"
msgstr[0] "Session EEG"
msgstr[1] "Sessions EEG"

msgid "EEG Event"
msgid_plural "EEG Events"
msgstr[0] "Événement EEG"
msgstr[1] "Événements EEG"
Original file line number Diff line number Diff line change
Expand Up @@ -615,3 +615,4 @@ msgstr "セッションを見る"

msgid "Channel Types"
msgstr "チャネルタイプ"

81 changes: 81 additions & 0 deletions modules/electrophysiology_browser/php/module.class.inc
Original file line number Diff line number Diff line change
Expand Up @@ -64,4 +64,85 @@ class Module extends \Module
{
return dgettext("electrophysiology_browser", "Electrophysiology Browser");
}

/**
* {@inheritDoc}
*
* @param string $type The type of widgets to get.
* @param \User $user The user widgets are being retrieved for.
* @param array $options A type dependent list of options to provide
* to the widget.
*
* @return \LORIS\GUI\Widget[]
*/
public function getWidgets(string $type, \User $user, array $options) : array
{
$factory = \NDB_Factory::singleton();
$baseURL = $factory->settings()->getBaseURL();

switch ($type) {
case 'study-progression':
$DB = $factory->database();
$sessionData = $DB->pselectWithIndexKey(
"SELECT
p.ProjectID,
p.Name AS ProjectName,
COUNT(s.ID) AS count,
CONCAT('"
. $baseURL .
"/electrophysiology_browser/?project=', p.Name
) as url
FROM session s
JOIN Project p ON p.ProjectID = s.ProjectID
JOIN physiological_file pf ON pf.SessionID = s.ID
WHERE s.Active <> 'N'
AND s.CenterID <> 1
GROUP BY p.Name",
[],
'ProjectID'
);
$eventData = $DB->pselectWithIndexKey(
"SELECT
p.ProjectID,
p.Name AS ProjectName,
COUNT(pte.PhysiologicalTaskEventID) AS count,
CONCAT('"
. $baseURL .
"/electrophysiology_browser/?project=', p.Name
) as url
FROM session s
JOIN Project p ON p.ProjectID = s.ProjectID
JOIN physiological_file pf ON pf.SessionID = s.ID
JOIN physiological_task_event pte USING (PhysiologicalFileID)
WHERE s.Active <> 'N'
AND s.CenterID <> 1
GROUP BY p.Name",
[],
'ProjectID'
);
return [
new \LORIS\dashboard\DataWidget(
new \LORIS\GUI\LocalizableString(
"electrophysiology_browser",
"EEG Session",
"EEG Sessions",
),
$sessionData,
"",
'rgb(186,255,201)',
),
new \LORIS\dashboard\DataWidget(
new \LORIS\GUI\LocalizableString(
"electrophysiology_browser",
"EEG Event",
"EEG Events",
),
$eventData,
"",
'rgb(186,255,201)',
)
];
}
return [];
}
}
12 changes: 10 additions & 2 deletions modules/statistics/css/recruitment.css
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,15 @@
margin-bottom: 0;
}

.study-progression-container {
.progress-bar-male {
background-color: #1C70B6;
}

.progress-bar-female {
background-color: #2FA4E7;
}

.study-progression-container, .eeg-data-container {
max-height: 415px;
overflow-y: auto;
}
Expand Down Expand Up @@ -34,4 +42,4 @@
transform: translateY(-10px);
background-color: #f9fdff;
box-shadow: 0 12px 12px rgba(0, 0, 0, 0.25);
}
}
9 changes: 9 additions & 0 deletions modules/statistics/jsx/WidgetIndex.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ import React, {useEffect, useState} from 'react';
import PropTypes from 'prop-types';
import Recruitment from './widgets/recruitment';
import StudyProgression from './widgets/studyprogression';
import Electrophysiology from './widgets/electrophysiology';
import {fetchData} from './Fetch';
import Modal from 'Modal';
import Loader from 'Loader';
Expand All @@ -25,6 +26,7 @@ import zhStrings from '../locale/zh/LC_MESSAGES/statistics.json';
const WidgetIndex = (props) => {
const [recruitmentData, setRecruitmentData] = useState({});
const [studyProgressionData, setStudyProgressionData] = useState({});
const [electrophysiologyData, setElectrophysiologyData] = useState({});
const [modalChart, setModalChart] = useState(null);
const {t, i18n} = useTranslation();
useEffect( () => {
Expand Down Expand Up @@ -273,6 +275,7 @@ const WidgetIndex = (props) => {
);
setRecruitmentData(data);
setStudyProgressionData(data);
setElectrophysiologyData(data);
};
setup().catch(
(error) => {
Expand Down Expand Up @@ -368,6 +371,12 @@ const WidgetIndex = (props) => {
showChart ={showChart}
updateFilters ={updateFilters}
/>
<Electrophysiology
data ={electrophysiologyData}
baseURL ={props.baseURL}
showChart ={showChart}
updateFilters ={updateFilters}
/>
</>
);
};
Expand Down
Loading
Loading