Skip to content

Commit

Permalink
Fix case-insensitive sorting of dag and user names
Browse files Browse the repository at this point in the history
Fix case-insensitive sorting of dag and user names which can lead to tick boxes in user/dag config appearing in the wrong coumn.
  • Loading branch information
lsgs committed Jun 29, 2019
1 parent 4de19fe commit 5be8fe0
Showing 1 changed file with 23 additions and 8 deletions.
31 changes: 23 additions & 8 deletions DAGSwitcher.php
Original file line number Diff line number Diff line change
Expand Up @@ -188,7 +188,7 @@ protected function renderDAGPageTableContainer() {

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>").
RCView::div(array('style'=>'font-weight:bold;font-size:120%'), RCView::img(array('src'=>'puzzle_small.png')).$dagTableBlockTitle).
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::img(array('src'=>'progress_circle.gif'))
Expand Down Expand Up @@ -244,14 +244,15 @@ public function getUserDAGsTable($rowsAreDags=true) {
$col0Hdr = $this->lang['global_22']; // Data Access Groups
$colGroupHdr = $this->lang['control_center_132']; // Users
$colSet = REDCap::getUsers();
uasort($colSet, $this->value_compare_func); // sort in ascending order by value, case-insensitive, preserving keys
$this->setUserSetting('rowoption', 'dags');
$superusers = $this->readSuperUserNames();
} else { // $rowsAreDags===false // columns are dags
// column-per-dag, row-per-user (load via ajax)
$col0Hdr = $this->lang['control_center_132']; // Users
$colGroupHdr = $this->lang['global_22']; // Data Access Groups
$colSet = REDCap::getGroupNames(false);
asort($colSet); // sort associative arrays in ascending order, according to the value, preserving keys
uasort($colSet, $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');
}
Expand Down Expand Up @@ -305,13 +306,14 @@ public function getUserDAGsTableRowData($rowsAreDags=true) {
$usersEnabledDags = $this->getUserDAGs();

$users = REDCap::getUsers();
asort($users);
uasort($users, $this->value_compare_func); // sort in ascending order by value, case-insensitive, preserving keys

$dags = REDCap::getGroupNames(false);
asort($dags); // sort associative arrays in ascending order, according to the value, preserving keys
uasort($dags, $this->value_compare_func); // sort in ascending order by value, case-insensitive, preserving keys
$dags = array(0=>$this->lang['data_access_groups_ajax_23']) + (array)$dags; // [No Assignment]

$rows = array();
$superusers = $this->readSuperUserNames();

if (count($users)===0) { // can only be a superuser viewing an orphan project so don't need anything fancy returned
$rows = null;
Expand All @@ -326,23 +328,23 @@ public function getUserDAGsTableRowData($rowsAreDags=true) {
'dagname' => $dagName,
'user' => $user,
'enabled' => (in_array($dagId, $usersEnabledDags[$user]))?1:0,
'is_super' => (in_array($user, $this->readSuperUserNames()))?1:0
'is_super' => (in_array($user, $superusers))?1:0
);
}
$rows[] = $row;
}
} else {
foreach ($users as $user) {
$row = array();
$row[] = array('rowref'=>$user,'is_super' => (in_array($user, $this->readSuperUserNames()))?1:0);
$row[] = array('rowref'=>$user,'is_super' => (in_array($user, $superusers))?1:0);
foreach ($dags as $dagId => $dagName) {
$row[] = array(
'rowref' => $user,
'dagid' => $dagId,
'dagname' => $dagName,
'user' => $user,
'enabled' => (in_array($dagId, $usersEnabledDags[$user]))?1:0,
'is_super' => (in_array($user, $this->readSuperUserNames()))?1:0
'is_super' => (in_array($user, $superusers))?1:0
);
}
$rows[] = $row;
Expand Down Expand Up @@ -436,7 +438,7 @@ protected function renderUserDAGInfo() {
}
}

asort($thisUserOtherDags); // sort dag names alphabetically in dialog, preserving keys
uasort($thisUserOtherDags, $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-primary'), $dagSwitchDialogBtnText);

Expand Down Expand Up @@ -627,4 +629,17 @@ public function redcap_module_project_enable($version, $project_id) {
$this->setProjectSetting($settingKey, $settingValue);
}
}

/**
* value_compare_func
* Can't get asort($users, SORT_STRING | SORT_FLAG_CASE | SORT_NATURAL);
* to sort user and dag names in natural, case insensitive, order, so
* using user sort, uasort(), with this as compare function.
* @param string $a
* @param string $b
* @return string
*/
private function value_compare_func(string $a, string $b) {
return strcmp(strtolower($a), strtolower($b));
}
}

0 comments on commit 5be8fe0

Please sign in to comment.