using System; using System.Collections.Generic; using System.Linq; using System.Windows; using System.Windows.Controls; using System.Windows.Media.Imaging; using Comal.Classes; using InABox.Core; using InABox.Wpf; using InABox.WPF; namespace PRSDesktop { /// /// Interaction logic for SecurityTokenPanel.xaml /// public partial class GlobalTokenWindow : ThemableWindow { private static readonly BitmapImage _key = PRSDesktop.Resources.key.AsBitmapImage(); private readonly List> _groups = new() { new Tuple(Guid.Empty, "All Groups", _key) }; private Dictionary _images = new() { { Guid.Empty, _key } }; public GlobalTokenWindow() { InitializeComponent(); var query = new MultiQuery(); query.Add( null, new Columns(x => x.ID) .Add(x => x.Description), //.Add(x=>x.Image.ID), new SortOrder(x => x.Description) ); //SubQuery secfilter = new SubQuery( // new Filter(x => x.Image.ID).IsNotEqualTo(Guid.Empty), // new Columns(x => x.Image.ID) //); //query.Add( // new Filter(x => x.ID).InQuery(secfilter), // new Columns(x => x.ID).Add(x => x.Data) //); query.Add(); query.Add(); query.Add(); query.Add( LookupFactory.DefineFilter(), new Columns(x => x.ID) .Add(x => x.UserID) .Add(x => x.SecurityGroup.ID) ); query.Add( LookupFactory.DefineFilter(), new Columns(x => x.UserLink.ID) .Add(x => x.Name) ); query.Query(q => { //q.Get().IntoDictionary( // _images, // x => x.ID, // (row) => ImageUtils.LoadImage(row.Get(c => c.Data)) //); _groups.AddRange( q.Get().Rows.Select( r => new Tuple( r.Get(x => x.ID), r.Get(x => x.Description), _key //_images.ContainsKey(r.Get(x => x.Image.ID)) // ? _images[r.Get(x => x.Image.ID)] // : _key ) ) ); query.Get().IntoDictionary( Tokens.GroupNames, x => x.ID, r => r.Get(c => c.Description) ); foreach (var userrow in query.Get().Rows) { var userid = userrow.Get(x => x.ID); var emprow = query.Get().Rows.FirstOrDefault(r => r.Get(x => x.UserLink.ID) == userid); var usercode = emprow != null ? emprow.Get(c => c.Name) : userrow.Get(x => x.UserID); var groupid = userrow.Get(x => x.SecurityGroup.ID); Tokens.UserNames[userid] = usercode; Tokens.UserGroups[userid] = groupid; } foreach (var row in query.Get().Rows) Tokens.Items.Add(new SecurityTokenItem { Descriptor = row.Get(c => c.Descriptor).Split('.').Last(), Type = SecurityTokenType.Global, RecordID = row.Get(x => x.ID), ID = Guid.Empty, Enabled = row.Get(c => c.Enabled) }); foreach (var row in query.Get().Rows) Tokens.Items.Add(new SecurityTokenItem { Descriptor = row.Get(c => c.Descriptor).Split('.').Last(), Type = SecurityTokenType.Group, RecordID = row.Get(x => x.ID), ID = row.Get(x => x.Group.ID), Enabled = row.Get(c => c.Enabled) }); foreach (var row in query.Get().Rows) { var userid = row.Get(c => c.User.ID); if (Tokens.UserGroups.ContainsKey(userid)) { Tokens.Items.Add(new SecurityTokenItem { Descriptor = row.Get(c => c.Descriptor).Split('.').Last(), Type = SecurityTokenType.User, RecordID = row.Get(x => x.ID), ID = row.Get(x => x.User.ID), Enabled = row.Get(c => c.Enabled) }); } } Dispatcher.Invoke(() => { Groups.ItemsSource = _groups; Groups.SelectedItem = _groups.FirstOrDefault(); Groups.Visibility = Visibility.Visible; }); }); } private void Groups_SelectionChanged(object sender, SelectionChangedEventArgs e) { var selected = Groups.SelectedItem as Tuple; if (selected != null) { Tokens.GroupID = selected.Item1; Tokens.Refresh(true, true); } } } }