diff --git a/LDK/resources/web/LDK/panel/SingleSubjectFilterType.js b/LDK/resources/web/LDK/panel/SingleSubjectFilterType.js
index 3c228381..4dcfdd9c 100644
--- a/LDK/resources/web/LDK/panel/SingleSubjectFilterType.js
+++ b/LDK/resources/web/LDK/panel/SingleSubjectFilterType.js
@@ -104,6 +104,9 @@ Ext4.define('LDK.panel.SingleSubjectFilterType', {
if (!report.subjectFieldName)
return 'This report cannot be used with the selected filter type, because the report does not contain a ' + this.nounSingular + ' Id field';
+ if (this.subjects.length === 0)
+ return 'Must enter at least one valid Subject ID.'
+
return null;
},
@@ -143,7 +146,11 @@ Ext4.define('LDK.panel.SingleSubjectFilterType', {
for (var alias in this.aliases) {
if (this.aliases.hasOwnProperty(alias)) {
Ext4.each(this.aliases[alias], function (id) {
- msg += "
Alias " + alias + " mapped to ID " + id + "
";
+ msg += "Alias " + alias + " mapped to ID " + id;
+ if (this.subjects.indexOf(alias) !== -1) {
+ msg += " and is a real ID";
+ }
+ msg += "
";
}, this);
}
}
@@ -165,7 +172,8 @@ Ext4.define('LDK.panel.SingleSubjectFilterType', {
// results than necessary in some cases, however those results are filtered to match the user input and non-matching
// results are not used.
var filterType = this.caseInsensitive ? LABKEY.Filter.Types.CONTAINS_ONE_OF : LABKEY.Filter.Types.EQUALS_ONE_OF;
- this.aliasTable.filterArray = [LABKEY.Filter.create('alias', subjectArray.join(';'), filterType)];
+ var filterCol = this.aliasTable.aliasColumn ? this.aliasTable.aliasColumn : this.aliasTable.idColumn;
+ this.aliasTable.filterArray = [LABKEY.Filter.create(filterCol, subjectArray.join(';'), filterType)];
this.aliasTable.columns = this.aliasTable.idColumn + (Ext4.isDefined(this.aliasTable.aliasColumn) ? ',' + this.aliasTable.aliasColumn : '');
},
@@ -183,15 +191,21 @@ Ext4.define('LDK.panel.SingleSubjectFilterType', {
handleAliasResults: function (results) {
this.notFound = Ext4.clone(this.subjects);
+ var updatedSubjects = [];
Ext4.each(results.rows, function (row) {
+ var rowId = row[this.aliasTable.idColumn];
+ updatedSubjects.push(rowId);
+
if (this.aliasTable.aliasColumn) {
+ var rowAlias = row[this.aliasTable.aliasColumn];
+
// Remove from notFound array if found
- var subjIndex = this.notFound.indexOf(row[this.aliasTable.aliasColumn]);
+ var subjIndex = this.notFound.indexOf(rowAlias);
if (subjIndex === -1 && this.caseInsensitive) {
for (var i = 0; i < this.notFound.length; i++) {
- if (row[this.aliasTable.aliasColumn].toLowerCase() === this.notFound[i].toString().toLowerCase()) {
+ if (rowAlias.toLowerCase() === this.notFound[i].toString().toLowerCase()) {
subjIndex = i;
break;
}
@@ -202,44 +216,34 @@ Ext4.define('LDK.panel.SingleSubjectFilterType', {
this.notFound.splice(subjIndex, 1);
}
- var index = this.subjects.indexOf(row[this.aliasTable.aliasColumn]);
+ var index = this.subjects.indexOf(rowAlias);
if (index === -1 && this.caseInsensitive) {
for (var i = 0; i < this.subjects.length; i++) {
- if (row[this.aliasTable.aliasColumn].toLowerCase() === this.subjects[i].toString().toLowerCase()) {
+ if (rowAlias.toLowerCase() === this.subjects[i].toString().toLowerCase()) {
index = i;
break;
}
}
}
- if (index !== -1) {
- this.subjects.splice(index, 1, row[this.aliasTable.idColumn]);
- }
-
// Resolve aliases
- if (row[this.aliasTable.idColumn] !== row[this.aliasTable.aliasColumn]) {
+ if (rowId !== rowAlias) {
- if (index !== -1) {
- this.aliases[row[this.aliasTable.aliasColumn]] = [row[this.aliasTable.idColumn]];
+ var aliasList = this.aliases[rowAlias];
+ if (aliasList) {
+ aliasList.push(rowId);
}
- // In case an alias matches multiple ID's
else {
- for (var alias in this.aliases) {
- if (this.aliases.hasOwnProperty(alias) && row[this.aliasTable.aliasColumn] == alias) {
- this.aliases[row[this.aliasTable.aliasColumn]].push(row[this.aliasTable.idColumn]);
- index = this.subjects.indexOf(this.aliases[row[this.aliasTable.aliasColumn]][0]);
- this.subjects.splice(index, 0, row[this.aliasTable.idColumn]);
- }
- }
+ this.aliases[rowAlias] = [rowId];
}
}
}
else {
// Remove from notFound array if found
- var idIndex = this.notFound.indexOf(row[this.aliasTable.idColumn]);
+ var idIndex = this.notFound.indexOf(rowId);
if (idIndex === -1 && this.caseInsensitive) {
for (var i = 0; i < this.notFound.length; i++) {
- if (row[this.aliasTable.idColumn].toLowerCase() === this.notFound[i].toString().toLowerCase()) {
+ if (rowId.toLowerCase() === this.notFound[i].toString().toLowerCase()) {
idIndex = i;
break;
}
@@ -247,16 +251,16 @@ Ext4.define('LDK.panel.SingleSubjectFilterType', {
}
// TODO: Update this and LDK.Utils.splitIds when the case sensitive cache issues are fixed
- if (idIndex == -1) {
+ if (idIndex === -1) {
for (var nfIndex = 0; nfIndex < this.notFound.length; nfIndex++) {
- if (this.notFound[nfIndex].toString().toUpperCase() == row[this.aliasTable.idColumn]) {
+ if (this.notFound[nfIndex].toString().toUpperCase() === rowId) {
idIndex = nfIndex;
break;
}
}
}
- if (idIndex != -1) {
+ if (idIndex !== -1) {
this.notFound.splice(idIndex, 1);
}
}
@@ -264,12 +268,12 @@ Ext4.define('LDK.panel.SingleSubjectFilterType', {
// Remove any not found
Ext4.each(this.notFound, function (id) {
- var found = this.subjects.indexOf(id);
- if (found != -1)
- this.subjects.splice(found, 1);
+ var found = updatedSubjects.indexOf(id);
+ if (found !== -1)
+ updatedSubjects.splice(found, 1);
}, this);
- this.subjects = Ext4.unique(this.subjects);
+ this.subjects = Ext4.unique(updatedSubjects);
this.subjects.sort();
},