GlobalTokenWindow.xaml.cs 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Windows;
  5. using System.Windows.Controls;
  6. using System.Windows.Media.Imaging;
  7. using Comal.Classes;
  8. using InABox.Core;
  9. using InABox.Wpf;
  10. using InABox.WPF;
  11. namespace PRSDesktop
  12. {
  13. /// <summary>
  14. /// Interaction logic for SecurityTokenPanel.xaml
  15. /// </summary>
  16. public partial class GlobalTokenWindow : ThemableWindow
  17. {
  18. private static readonly BitmapImage _key = PRSDesktop.Resources.key.AsBitmapImage();
  19. private readonly List<Tuple<Guid, string, BitmapImage>> _groups = new()
  20. {
  21. new Tuple<Guid, string, BitmapImage>(Guid.Empty, "All Groups", _key)
  22. };
  23. private Dictionary<Guid, BitmapImage> _images = new()
  24. {
  25. { Guid.Empty, _key }
  26. };
  27. public GlobalTokenWindow()
  28. {
  29. InitializeComponent();
  30. var query = new MultiQuery();
  31. query.Add(
  32. null,
  33. new Columns<SecurityGroup>(x => x.ID)
  34. .Add(x => x.Description),
  35. //.Add(x=>x.Image.ID),
  36. new SortOrder<SecurityGroup>(x => x.Description)
  37. );
  38. //SubQuery<SecurityGroup> secfilter = new SubQuery<SecurityGroup>(
  39. // new Filter<SecurityGroup>(x => x.Image.ID).IsNotEqualTo(Guid.Empty),
  40. // new Columns<SecurityGroup>(x => x.Image.ID)
  41. //);
  42. //query.Add<Document>(
  43. // new Filter<Document>(x => x.ID).InQuery(secfilter),
  44. // new Columns<Document>(x => x.ID).Add(x => x.Data)
  45. //);
  46. query.Add<GlobalSecurityToken>();
  47. query.Add<SecurityToken>();
  48. query.Add<UserSecurityToken>();
  49. query.Add(
  50. LookupFactory.DefineFilter<User>(),
  51. new Columns<User>(x => x.ID)
  52. .Add(x => x.UserID)
  53. .Add(x => x.SecurityGroup.ID)
  54. );
  55. query.Add(
  56. LookupFactory.DefineFilter<Employee>(),
  57. new Columns<Employee>(x => x.UserLink.ID)
  58. .Add(x => x.Name)
  59. );
  60. query.Query(q =>
  61. {
  62. //q.Get<Document>().IntoDictionary<Document, Guid, BitmapImage>(
  63. // _images,
  64. // x => x.ID,
  65. // (row) => ImageUtils.LoadImage(row.Get<Document, byte[]>(c => c.Data))
  66. //);
  67. _groups.AddRange(
  68. q.Get<SecurityGroup>().Rows.Select(
  69. r => new Tuple<Guid, string, BitmapImage>(
  70. r.Get<SecurityGroup, Guid>(x => x.ID),
  71. r.Get<SecurityGroup, string>(x => x.Description),
  72. _key
  73. //_images.ContainsKey(r.Get<SecurityGroup, Guid>(x => x.Image.ID))
  74. // ? _images[r.Get<SecurityGroup, Guid>(x => x.Image.ID)]
  75. // : _key
  76. )
  77. )
  78. );
  79. query.Get<SecurityGroup>().IntoDictionary<SecurityGroup, Guid, string>(
  80. Tokens.GroupNames,
  81. x => x.ID,
  82. r => r.Get<SecurityGroup, string>(c => c.Description)
  83. );
  84. foreach (var userrow in query.Get<User>().Rows)
  85. {
  86. var userid = userrow.Get<User, Guid>(x => x.ID);
  87. var emprow = query.Get<Employee>().Rows.FirstOrDefault(r => r.Get<Employee, Guid>(x => x.UserLink.ID) == userid);
  88. var usercode = emprow != null ? emprow.Get<Employee, string>(c => c.Name) : userrow.Get<User, string>(x => x.UserID);
  89. var groupid = userrow.Get<User, Guid>(x => x.SecurityGroup.ID);
  90. Tokens.UserNames[userid] = usercode;
  91. Tokens.UserGroups[userid] = groupid;
  92. }
  93. foreach (var row in query.Get<GlobalSecurityToken>().Rows)
  94. Tokens.Items.Add(new SecurityTokenItem
  95. {
  96. Descriptor = row.Get<GlobalSecurityToken, string>(c => c.Descriptor).Split('.').Last(),
  97. Type = SecurityTokenType.Global,
  98. RecordID = row.Get<GlobalSecurityToken, Guid>(x => x.ID),
  99. ID = Guid.Empty,
  100. Enabled = row.Get<GlobalSecurityToken, bool>(c => c.Enabled)
  101. });
  102. foreach (var row in query.Get<SecurityToken>().Rows)
  103. Tokens.Items.Add(new SecurityTokenItem
  104. {
  105. Descriptor = row.Get<SecurityToken, string>(c => c.Descriptor).Split('.').Last(),
  106. Type = SecurityTokenType.Group,
  107. RecordID = row.Get<SecurityToken, Guid>(x => x.ID),
  108. ID = row.Get<SecurityToken, Guid>(x => x.Group.ID),
  109. Enabled = row.Get<SecurityToken, bool>(c => c.Enabled)
  110. });
  111. foreach (var row in query.Get<UserSecurityToken>().Rows)
  112. {
  113. var userid = row.Get<UserSecurityToken, Guid>(c => c.User.ID);
  114. if (Tokens.UserGroups.ContainsKey(userid))
  115. {
  116. Tokens.Items.Add(new SecurityTokenItem
  117. {
  118. Descriptor = row.Get<UserSecurityToken, string>(c => c.Descriptor).Split('.').Last(),
  119. Type = SecurityTokenType.User,
  120. RecordID = row.Get<SecurityToken, Guid>(x => x.ID),
  121. ID = row.Get<UserSecurityToken, Guid>(x => x.User.ID),
  122. Enabled = row.Get<UserSecurityToken, bool>(c => c.Enabled)
  123. });
  124. }
  125. }
  126. Dispatcher.Invoke(() =>
  127. {
  128. Groups.ItemsSource = _groups;
  129. Groups.SelectedItem = _groups.FirstOrDefault();
  130. Groups.Visibility = Visibility.Visible;
  131. });
  132. });
  133. }
  134. private void Groups_SelectionChanged(object sender, SelectionChangedEventArgs e)
  135. {
  136. var selected = Groups.SelectedItem as Tuple<Guid, string, BitmapImage>;
  137. if (selected != null)
  138. {
  139. Tokens.GroupID = selected.Item1;
  140. Tokens.Refresh(true, true);
  141. }
  142. }
  143. }
  144. }