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);
}
}
}
}