Skip to content

Commit

Permalink
Override built-in DAG Switcher
Browse files Browse the repository at this point in the history
Override built-in DAG Switcher from REDCap v9.8.0 because that version does not handle >10k users x dags.
  • Loading branch information
lsgs committed Jul 10, 2020
1 parent 4da4753 commit e9bab0c
Show file tree
Hide file tree
Showing 5 changed files with 47 additions and 43 deletions.
54 changes: 29 additions & 25 deletions DAGSwitcher.php
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ class DAGSwitcher extends AbstractExternalModule
private $user_rights;
private $Proj;

public static $IgnorePages = array('FileRepository','ProjectSetup','ExternalModules','UserRights','DataAccessGroups','SendItController');
public static $IgnorePages = array('FileRepository','ProjectSetup','ExternalModules','UserRights','DataAccessGroupsController','SendItController');

private static $SettingDefaults = array(
"dag-switcher-block-text-pre" => "Current Data Access Group: ",
Expand Down Expand Up @@ -63,7 +63,7 @@ public function hook_every_page_top($project_id) {

$pageRoute = $this->getPageRoute();

if ($pageRoute==='DataAccessGroups') {
if ($pageRoute==='DataAccessGroupsController') {

$this->renderDAGPageTableContainer();
$this->includeDAGPageJs();
Expand Down Expand Up @@ -166,22 +166,22 @@ protected function renderDAGPageTableContainer() {
$dagTableRowOptionDags = REDCap::filterHtml($this->getProjectSetting('dag-switcher-table-row-option-dags'));
$dagTableRowOptionUsers = REDCap::filterHtml($this->getProjectSetting('dag-switcher-table-row-option-users'));

if ($this->getUserSetting('rowoption')==='users') {
if ($this->getUserSetting('rowoption-em')==='users') {
$rowOptionCheckedD = '';
$rowOptionCheckedU = 'checked'; // rows are users, columns are dags
$rowOptionCheckedU = 'checked=""'; // rows are users, columns are dags
} else {
$rowOptionCheckedD = 'checked'; // rows are dags, columns are users
$rowOptionCheckedD = 'checked=""'; // rows are dags, columns are users
$rowOptionCheckedU = '';
}

print RCView::div(array('id'=>'dag-switcher-config-container', 'class'=>'gray'),//,'style'=>'width:698px;display:none;margin-top:20px'),
RCView::div(array('style'=>'float:right'), "<input type='radio' name='rowoption' value='dags' $rowOptionCheckedD>&nbsp; $dagTableRowOptionDags<br><input type='radio' name='rowoption' value='users' $rowOptionCheckedU>&nbsp; $dagTableRowOptionUsers<br>").
print RCView::div(array('id'=>'dag-switcher-em-config-container', 'class'=>'gray'),//,'style'=>'width:698px;display:none;margin-top:20px'),
RCView::div(array('style'=>'float:right'), "<input type='radio' name='rowoption-em' value='dags' $rowOptionCheckedD>&nbsp; $dagTableRowOptionDags<br><input type='radio' name='rowoption-em' value='users' $rowOptionCheckedU>&nbsp; $dagTableRowOptionUsers<br>").
RCView::div(array('style'=>'font-weight:bold;font-size:120%'), RCView::i(array('class'=>'fas fa-cube fs14 mr-1')).$dagTableBlockTitle).
RCView::div(array('style'=>'margin:10px 0;'), $dagTableBlockInfo).
RCView::div(array('id'=>'dag-switcher-spin'),//, 'style'=>'width:100%;text-align:center;'),
RCView::div(array('id'=>'dag-switcher-em-spin'),//, 'style'=>'width:100%;text-align:center;'),
RCView::img(array('src'=>'progress_circle.gif'))
).
RCView::div(array('id'=>'dag-switcher-table-container'),//, 'style'=>'width:100%;display:none;'),
RCView::div(array('id'=>'dag-switcher-em-table-container'),//, 'style'=>'width:100%;display:none;'),
''
)
);
Expand All @@ -203,15 +203,16 @@ protected function includeDAGPageJs() {

?>
<style type="text/css">
#dag-switcher-config-container { width:100%; display:none; margin-top:20px; }
#dag-switcher-spin { width:100%; text-align:center; }
#dag-switcher-table-container { width:100%; display:none; }
#dag-switcher-table tr.odd { background-color: #f1f1f1 !important; }
#dag-switcher-table tr.even { background-color: #fafafa !important; }
#dag-switcher-table td { text-align: center; }
#dag-switcher-table td.highlight { background-color: whitesmoke !important; }
#dag-switcher-config-container { display: none; } /* hide built-in dag switcher */
#dag-switcher-em-config-container { width:100%; display:none; margin-top:20px; }
#dag-switcher-em-spin { width:100%; text-align:center; }
#dag-switcher-em-table-container { width:100%; display:none; }
#dag-switcher-em-table tr.odd { background-color: #f1f1f1 !important; }
#dag-switcher-em-table tr.even { background-color: #fafafa !important; }
#dag-switcher-em-table td { text-align: center; }
#dag-switcher-em-table td.highlight { background-color: whitesmoke !important; }
.DTFC_LeftBodyLiner { overflow-x: hidden; }
.dag-switcher-table-left-col { max-width: 300px; overflow: hidden; text-align: left; }
.dag-switcher-em-table-left-col { max-width: 300px; overflow: hidden; text-align: left; }
</style>
<script type="text/javascript" src="<?php echo $jsPath;?>"></script>
<script type="text/javascript">
Expand Down Expand Up @@ -243,7 +244,7 @@ public function getUserDAGsTable($rowsAreDags=true) {
$colGroupHdr = $this->lang['control_center_132']; // Users
$colSet = REDCap::getUsers();
uasort($colSet, array($this,'value_compare_func')); // sort in ascending order by value, case-insensitive, preserving keys
$this->setUserSetting('rowoption', 'dags');
$this->setUserSetting('rowoption-em', 'dags');
$superusers = $this->readSuperUserNames();
} else { // $rowsAreDags===false // columns are dags
// column-per-dag, row-per-user (load via ajax)
Expand All @@ -252,7 +253,7 @@ public function getUserDAGsTable($rowsAreDags=true) {
$colSet = REDCap::getGroupNames(false);
uasort($colSet, array($this,'value_compare_func')); // sort in ascending order by value, case-insensitive, preserving keys
$colSet = array(0=>$this->lang['data_access_groups_ajax_23']) + (array)$colSet; // [No Assignment]
$this->setUserSetting('rowoption', 'users');
$this->setUserSetting('rowoption-em', 'users');
}

$colhdrs = RCView::tr(array(),
Expand Down Expand Up @@ -282,7 +283,7 @@ public function getUserDAGsTable($rowsAreDags=true) {
);
}

$html = RCView::table(array('class'=>'table table-striped table-bordered display nowrap compact no-footer','id'=>'dag-switcher-table'),
$html = RCView::table(array('class'=>'table table-striped table-bordered display nowrap compact no-footer','id'=>'dag-switcher-em-table'),
RCView::thead(array(), $colhdrs)
);

Expand Down Expand Up @@ -438,9 +439,9 @@ protected function renderUserDAGInfo() {

uasort($thisUserOtherDags, array($this,'value_compare_func')); // sort dag names alphabetically in dialog, preserving keys

$changeButton = RCView::button(array('id'=>'dag-switcher-change-button', 'class'=>'btn btn-sm btn-primaryrc'), '<i class="fas fa-random mr-1"></i>'.$dagSwitchDialogBtnText);
$changeButton = RCView::button(array('id'=>'dag-switcher-em-change-button', 'class'=>'btn btn-sm btn-primaryrc'), '<i class="fas fa-random mr-1"></i>'.$dagSwitchDialogBtnText);

$dagSelect = RCView::select(array('id'=>'dag-switcher-change-select', 'class'=>'form-control'), $thisUserOtherDags);
$dagSelect = RCView::select(array('id'=>'dag-switcher-em-change-select', 'class'=>'form-control'), $thisUserOtherDags);

$apiMsg = '';
if ($this->user_rights['api_export'] || $this->user_rights['api_import']) {
Expand All @@ -460,14 +461,14 @@ protected function renderUserDAGInfo() {
}

print RCView::div(
array('id'=>'dag-switcher-change-dialog'),
array('id'=>'dag-switcher-em-change-dialog'),
RCView::div(array('style'=>'margin:5px 0;'), $dagSwitchDialogText).
$dagSelect.
$apiMsg
);

print RCView::div(
array('id'=>'dag-switcher-current-dag-block', 'class'=>'blue', 'style'=>'text-align:center;'),
array('id'=>'dag-switcher-em-current-dag-block', 'class'=>'blue', 'style'=>'text-align:center;'),
RCView::img(array('src'=>'information_frame.png')).
RCView::span(array('style'=>'margin:0 10px; font-size:110%;'),
$pageBlockTextPre.
Expand All @@ -490,7 +491,7 @@ protected function includeProjectPageJs() {
$dagSwitchDialogTitle = REDCap::filterHtml($this->getProjectSetting('dag-switcher-dialog-title'));
?>
<style type="text/css">
#dag-switcher-current-dag-block {
#dag-switcher-em-current-dag-block {
text-align:center;
margin:-15px 0 15px 0;
}
Expand Down Expand Up @@ -563,6 +564,9 @@ protected function includeUserRightsPageJs() {
$dagNames = array_map('htmlentities', $dagNames); // encode quotes etc. in dag names

?>
<style type="text/css">
div.dagNameLinkDiv > a[data-toggle="popover"]:not(.dag-switcher-em-popover) { display: none; }
</style>
<script type="text/javascript" src="<?php echo $jsPath;?>"></script>
<script type="text/javascript">
$(document).ready(function() {
Expand Down
2 changes: 1 addition & 1 deletion config.json
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@
"project-settings": [
{
"key": "page-at-n-rows",
"name": "Number of rows per table page:<br>Leave blank to show all DAGs/users (default).<br>(Can aid performance when project has hundreds of DAGs and users) ",
"name": "Number of rows per table page:<br>Leave blank to show all DAGs/users (default).<br>(Can aid performance when project has hundreds of DAGs and users)<br>Example: 20",
"required": false,
"type": "text"
},
Expand Down
10 changes: 5 additions & 5 deletions dag_switch.js
Original file line number Diff line number Diff line change
Expand Up @@ -28,26 +28,26 @@ var MCRI_DAG_Switcher_Switch = (function(window, document, $, undefined) {
init: function(savePath, dagSwitchDialogTitle) {
switchSavePath = savePath;

$('#dag-switcher-change-dialog').dialog({
$('#dag-switcher-em-change-dialog').dialog({
title: dagSwitchDialogTitle,
autoOpen: false,
width: 500,
modal: true,
buttons: {
Ok: function() {
var newDag = $('#dag-switcher-change-select').val();
var newDag = $('#dag-switcher-em-change-select').val();
doDagSwitch(newDag);
},
Cancel: function() { $( this ).dialog( "close" ); }
}
});

$('#dag-switcher-change-button').click(function(e) {
$('#dag-switcher-em-change-button').click(function(e) {
e.preventDefault();
$('#dag-switcher-change-dialog').dialog('open');
$('#dag-switcher-em-change-dialog').dialog('open');
});

$('#dag-switcher-current-dag-block').detach().insertAfter('#subheader').show();
$('#dag-switcher-em-current-dag-block').detach().insertAfter('#subheader').show();
}
};
})(window, document, jQuery);
22 changes: 11 additions & 11 deletions dag_user_config.js
Original file line number Diff line number Diff line change
Expand Up @@ -14,12 +14,12 @@ var MCRI_DAG_Switcher_Config = (function(window, document, $, undefined) {
var pageSize;

function getTable() {
$('#dag-switcher-table-container').hide().html('');
$('#dag-switcher-spin').show();
rowoption = $('#dag-switcher-config-container input[name="rowoption"]:checked').val();
$('#dag-switcher-em-table-container').hide().html('');
$('#dag-switcher-em-spin').show();
rowoption = $('#dag-switcher-em-config-container input[name="rowoption-em"]:checked').val();
$.get(getTableAjaxPath+'&rowoption='+rowoption).then(function(data) {
$('#dag-switcher-spin').hide();
$('#dag-switcher-table-container').html(data).show();
$('#dag-switcher-em-spin').hide();
$('#dag-switcher-em-table-container').html(data).show();
initDataTable(rowoption, pageSize);
});
}
Expand All @@ -32,7 +32,7 @@ var MCRI_DAG_Switcher_Config = (function(window, document, $, undefined) {
}
pageOpt.push(-1);
pageOptLbl.push("All");
table = $('#dag-switcher-table').DataTable( {
table = $('#dag-switcher-em-table').DataTable( {
deferRender: true,
stateSave: true,
searching: true,
Expand All @@ -41,13 +41,13 @@ var MCRI_DAG_Switcher_Config = (function(window, document, $, undefined) {
scrollX: true,
/*scrollY: "500px",*/
scrollCollapse: true,
fixedHeader: { header: true },
/*fixedHeader: { header: true }, header does not stay in container*/
fixedColumns: { leftColumns: 1 }, /*this does weird things to the row colouring and you get overlapping cell wording when sorting on other columns */
ajax: getTableRowsAjaxPath+'&rowoption='+rowoption,
columnDefs: [
{
"targets": 0,
"className": "dag-switcher-table-left-col",
"className": "dag-switcher-em-table-left-col",
"render": function ( celldata, type, row ) {
var celltext;
if (typeof celldata.is_super !== 'undefined' && celldata.is_super) {
Expand All @@ -73,7 +73,7 @@ var MCRI_DAG_Switcher_Config = (function(window, document, $, undefined) {
]
});

$('#dag-switcher-table tbody').on('change', 'input', function () {
$('#dag-switcher-em-table tbody').on('change', 'input', function () {
var cb = $(this);
var parentTd = cb.parent('td');
var spinner = parentTd.find('img');
Expand Down Expand Up @@ -128,10 +128,10 @@ var MCRI_DAG_Switcher_Config = (function(window, document, $, undefined) {
setUserDagAjaxPath = setUserDagPath;
pageSize = setPageSize;

$('#dag-switcher-config-container').delegate('input[name=rowoption]','change', function () {
$('#dag-switcher-em-config-container').delegate('input[name=rowoption-em]','change', function () {
getTable();
});
$('#dag-switcher-config-container').detach().insertAfter('#group_table').show();
$('#dag-switcher-em-config-container').detach().insertAfter('#dag-switcher-config-container-parent').show();
getTable();

// The hidedagMsg() function is called after adding/deleting a group
Expand Down
2 changes: 1 addition & 1 deletion user_rights.js
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ var MCRI_DAG_Switcher_User_Rights = (function(window, document, $, JSON, undefin
content += '<li><span class=\'text-info\'>'+el+'</span></li>';
});
content += '</ul>';
appendAfter.after(' <a href="#" data-toggle="popover" data-content="'+content+'" style="font-size:75%;color:gray;">(+'+dagIdList.length+')</a>');
appendAfter.after(' <a href="#" class="dag-switcher-em-popover" data-toggle="popover" data-content="'+content+'" style="font-size:75%;color:gray;">(+'+dagIdList.length+')</a>');
};

var activatePopovers = function() {
Expand Down

0 comments on commit e9bab0c

Please sign in to comment.