Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
34 commits
Select commit Hold shift + click to select a range
58364fa
redcap dictionary table
regisoc Jul 11, 2025
5bbba43
redcap ui view permission
regisoc Jul 11, 2025
5d1c3f8
patch
regisoc Jul 11, 2025
fb3ab83
RB
regisoc Jul 11, 2025
fc421e0
backend endpoints for ui notification/issues/dictionary
regisoc Jul 11, 2025
763b6f0
queries update for redcap dictionary mgmt
regisoc Jul 11, 2025
e74e728
dictionary record db export method
regisoc Jul 11, 2025
b699b8a
redcap menu category/menu link
regisoc Jul 11, 2025
e6d863e
redcap2linst to redcap/tools and automatic update to dictonary when p…
regisoc Jul 11, 2025
559af39
redcap ui 3 tabs
regisoc Jul 11, 2025
3758ac5
build instruction
regisoc Jul 11, 2025
88407a0
lint
regisoc Jul 11, 2025
7d1b6f6
lint
regisoc Jul 11, 2025
002c68d
lint
regisoc Jul 11, 2025
fb93d42
lint
regisoc Jul 11, 2025
eebd1f4
lint
regisoc Jul 11, 2025
3b4c6f5
lint
regisoc Jul 11, 2025
f658b49
lint
regisoc Jul 11, 2025
9b7a194
file open check
regisoc Jul 11, 2025
d86655c
redcap type check
regisoc Jul 11, 2025
efcb56f
redcap type check
regisoc Jul 11, 2025
312dbc8
redcap type check
regisoc Jul 11, 2025
9f70294
FormName to InstrumentName
regisoc Jul 31, 2025
7e27beb
Merge branch 'main' into 20250710_redcap_ui
regisoc Dec 12, 2025
9d06c96
i18n redcap compile cmd
regisoc Dec 12, 2025
6e0eac2
redcap dictionary - form name to instrument name
regisoc Dec 12, 2025
b9a60e1
redcap permission ui view
regisoc Dec 12, 2025
ad0dc1f
redcap - raisinbread
regisoc Dec 12, 2025
5f1f774
lint
regisoc Dec 12, 2025
5c1ba66
redcap2linst in generic tools
regisoc Dec 12, 2025
cab539d
generic_include path
regisoc Dec 12, 2025
b046f94
remove request parameters from get in dictionary and issues classes
regisoc Dec 15, 2025
b3febab
jsx lint
regisoc Dec 16, 2025
fff6a8e
lint typo
regisoc Dec 16, 2025
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
3 changes: 3 additions & 0 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -262,3 +262,6 @@ electrophysiology_browser: $(filter modules/electrophysiology_browser/%,$(MOFILE

dicom_archive: $(filter modules/dicom_archive/%,$(MOFILES)) $(filter modules/dicom_archive/%,$(I18NJSONFILES))
target=dicom_archive npm run compile

redcap: $(filter modules/redcap/%,$(MOFILES)) $(filter modules/redcap/%,$(I18NJSONFILES))
target=redcap npm run compile
23 changes: 23 additions & 0 deletions SQL/0000-00-00-schema.sql
Original file line number Diff line number Diff line change
Expand Up @@ -2708,3 +2708,26 @@ CREATE TABLE `redcap_notification` (
PRIMARY KEY (`id`),
KEY `i_redcap_notif_received_dt` (`received_dt`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

CREATE TABLE `redcap_dictionary` (
ID int(10) unsigned NOT NULL auto_increment,
InstrumentName varchar(255),
FieldName varchar(255) NOT NULL,
FieldRequired boolean NOT NULL,
FieldType varchar(20) NOT NULL,
FieldLabel text NOT NULL,
SectionHeader text,
Choices text,
FieldNote text,
TextValidationType varchar(50),
TextValidationMin varchar(50),
TextValidationMax varchar(50),
Identifier text,
BranchingLogic text,
CustomAlignment varchar(10),
QuestionNumber text,
MatrixGroupName varchar(100),
MatrixRanking varchar(50),
FieldAnnotation text,
PRIMARY KEY (`ID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='All REDCap instrument fields and variables';
4 changes: 3 additions & 1 deletion SQL/0000-00-02-Permission.sql
Original file line number Diff line number Diff line change
Expand Up @@ -166,6 +166,7 @@ INSERT INTO `permissions` (code, description, moduleID, categoryID) VALUES
('dicom_archive_nosessionid', 'DICOMs with no session ID', (SELECT ID FROM modules WHERE Name='dicom_archive'),2),
('dicom_archive_view_ownsites', 'DICOMs - Own Sites', (SELECT ID FROM modules WHERE Name='dicom_archive'),2),
('view_instrument_data', 'Data', (SELECT ID FROM modules WHERE Name = 'instruments'),2),
('redcap_ui_view','REDCap GUI - View',(SELECT ID FROM modules WHERE Name ='redcap'),2),
('biobank_specimen_view','View Specimen Data',(SELECT ID FROM modules WHERE Name='biobank'), '2'),
('biobank_specimen_create','Create Specimens',(SELECT ID FROM modules WHERE Name='biobank'), '2'),
('biobank_specimen_update','Process Specimens',(SELECT ID FROM modules WHERE Name='biobank'), '2'),
Expand Down Expand Up @@ -289,7 +290,8 @@ INSERT INTO `perm_perm_action_rel` (permID, actionID) VALUES
((SELECT permID FROM permissions WHERE code = 'biobank_fullprojectaccess'),1),
((SELECT permID FROM permissions WHERE code = 'view_instrument_data'),1),
((SELECT permID FROM permissions WHERE code = 'dqt_view'),1),
((SELECT permID FROM permissions WHERE code = 'dqt_view'),8);
((SELECT permID FROM permissions WHERE code = 'dqt_view'),8),
((SELECT permID FROM permissions WHERE code = 'redcap_ui_view'),1);


-- permissions for each notification module
Expand Down
1 change: 1 addition & 0 deletions SQL/9999-99-99-drop_tables.sql
Original file line number Diff line number Diff line change
Expand Up @@ -103,6 +103,7 @@ DROP TABLE IF EXISTS `modules`;

-- 0000-00-00-schema.sql
DROP TABLE IF EXISTS `redcap_notification`;
DROP TABLE IF EXISTS `redcap_dictionary`;

DROP TABLE IF EXISTS `candidate_consent_rel`;
DROP TABLE IF EXISTS `consent`;
Expand Down
38 changes: 38 additions & 0 deletions SQL/New_patches/2025-07-10_REDCap_front_end_permission.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
-- adds the redcap_ui_view permission
INSERT INTO permissions (code, description, moduleID, categoryID)
VALUES (
'redcap_ui_view',
'REDCap GUI - View',
(SELECT ID FROM modules WHERE Name ='redcap'),
(SELECT ID FROM permissions_category WHERE Description = 'Permission')
);

INSERT INTO perm_perm_action_rel (permID, actionID)
VALUES (
(SELECT permID FROM permissions WHERE code = 'redcap_ui_view'),
(SELECT ID FROM permisssions_action WHERE name = 'View')
);

-- adds the redcap dictionary table
CREATE TABLE `redcap_dictionary` (
ID int(10) unsigned NOT NULL auto_increment,
InstrumentName varchar(255),
FieldName varchar(255) NOT NULL,
FieldRequired boolean NOT NULL,
FieldType varchar(20) NOT NULL,
FieldLabel text NOT NULL,
SectionHeader text,
Choices text,
FieldNote text,
TextValidationType varchar(50),
TextValidationMin varchar(50),
TextValidationMax varchar(50),
Identifier text,
BranchingLogic text,
CustomAlignment varchar(10),
QuestionNumber text,
MatrixGroupName varchar(100),
MatrixRanking varchar(50),
FieldAnnotation text,
PRIMARY KEY (`ID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='All REDCap instrument fields and variables';
66 changes: 66 additions & 0 deletions modules/redcap/jsx/redcapIndex.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
import PropTypes from 'prop-types';
import {TabPane, Tabs} from 'jsx/Tabs';
import NotificationViewer from './tabs/notificationViewer';
import DictionaryViewer from './tabs/dictionaryViewer';
import IssuesViewer from './tabs/issuesViewer';
import {createRoot} from 'react-dom/client';


/**
* REDCap index view
*
* @param {array} props
* @return {JSX}
*/
export default function RedcapIndex(props) {
// list of tabs
const tabList = [
{id: 'notificationTable', label: 'Notifications'},
{id: 'dictionaryTable', label: 'Data Dictionary'},
{id: 'issuesTable', label: 'Issues'},
];

return (
<>
<Tabs tabs={tabList} defaultTab='notificationTable' updateURL={true}>

{/* notifications */}
<TabPane TabId={tabList[0].id}>
<NotificationViewer baseURL={props.moduleURL} />
</TabPane>

{/* dictionary */}
<TabPane TabId={tabList[1].id}>
<DictionaryViewer baseURL={props.moduleURL} />
</TabPane>

{/* issues */}
<TabPane TabId={tabList[2].id}>
<IssuesViewer baseURL={props.baseURL} moduleURL={props.moduleURL} />
</TabPane>

</Tabs>
</>
);
}

RedcapIndex.propTypes = {
baseURL: PropTypes.string.isRequired,
moduleURL: PropTypes.string.isRequired,
hasPermission: PropTypes.func.isRequired,
};

/**
* Render REDCap main page on page load
*/
document.addEventListener('DOMContentLoaded', function() {
createRoot(
document.getElementById('lorisworkspace')
).render(
<RedcapIndex
baseURL={loris.BaseURL}
moduleURL={loris.BaseURL + '/redcap'}
hasPermission={loris.userHasPermission}
/>
);
});
Loading
Loading