crfRoleSelector.js 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. var crfRoleSelector={};
  2. crfRoleSelector.init=
  3. function(cb=null){
  4. let that=this;
  5. let action=function(){that.afterScripts(cb);};
  6. LABKEY.requiresScript(["crf/crfHTML.js"],action);
  7. }
  8. crfRoleSelector.afterScripts=
  9. function(cb=null){
  10. if (cb) cb();
  11. }
  12. crfRoleSelector.set=
  13. function(setup){
  14. this.setup=setup;
  15. }
  16. crfRoleSelector.print=
  17. function(msg){
  18. console.log(msg);
  19. }
  20. crfRoleSelector.makePortal=
  21. function(cb=null){
  22. //cb is a callback function that gets executed on select change
  23. let fName='[crfRoleSelector::makePortal]';
  24. let userId=LABKEY.Security.currentUser.id;
  25. let userRoles=['crfEditor','crfMonitor','crfSponsor','crfManager'];
  26. //let siteRows=this.setup.getRows('siteData');
  27. //find possible matches between user and sites
  28. let options=new Object();
  29. let siteMap=this.setup.getEntryMap('siteData:siteNumber');
  30. let userMap=this.setup.getEntryMap('users:UserId');
  31. for (let i=0;i<userRoles.length;i++){
  32. let listName=userRoles[i]+'s';
  33. let listRows=this.setup.getRows(listName);
  34. for (let j=0;j<listRows.length;j++){
  35. if (listRows[j]['User']!=userId) continue;
  36. let siteNumber=listRows[j]['Site'];
  37. let siteRow=siteMap[siteNumber];
  38. options[userRoles[i]+':'+siteNumber]=userRoles[i]+' for '+siteRow['siteName'];
  39. }
  40. }
  41. for (let opt in options){
  42. this.print(fName+' ['+opt+'] '+options[opt]);
  43. }
  44. let table=crfHTML.createTable('formDiv');
  45. let row=table.insertRow();
  46. let cell=row.insertCell();
  47. this.roleSelect=crfHTML.createSelect(options,null,cell);
  48. row=table.insertRow();
  49. cell=row.insertCell();
  50. this.roleLabel=crfHTML.createTextNode('Please select option',null,cell);
  51. let that=this;
  52. this.roleSelect.onchange=function(){that.onChange(cb);}
  53. }
  54. crfRoleSelector.onChange=
  55. function(cb=null){
  56. crfHTML.setTextNode(this.roleLabel,this.roleSelect.value);
  57. if (cb) cb();
  58. }
  59. crfRoleSelector.getRoleAndSite=
  60. function(){
  61. if (this.roleSelect.selectedIndex==0)
  62. return null;
  63. return this.roleSelect.value;
  64. }
  65. crfRoleSelector.setRoleAndSite=
  66. function(roleAndSite,cb=null){
  67. if (!roleAndSite) return;
  68. this.roleSelect.value=roleAndSite;
  69. if (cb) cb();
  70. }