using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Timers;
using System.Windows.Controls;
using System.Windows.Input;
using System.Windows.Navigation;
namespace WPF01.pages
{
using db;
///
/// Логика взаимодействия для Authorization.xaml
///
public partial class Authorization : Page
{
// Количество неверно веденного пароля
int count = 0;
// Таймер, который будет отсчитывать время разблокировки
// кнопки Вход в случае 3 неверных попыток ввода логин и пароля
Timer timer = new Timer();
// Конструктор окна авторизации
public Authorization()
{
InitializeComponent();
// Задать время счетчику 1 минута (60000 миллисекунд)
timer.Interval = 60000;
// Установить событие (функция Timeout) которое
// будет вызвано, когда 1 минута пройдет
// (после запуска timer.Start())
timer.Elapsed += new ElapsedEventHandler(Timeout);
}
// Функция для вызова таймером
void Timeout(object sender, ElapsedEventArgs e)
{
// Для доступа к кнопке необходим особый механизм
// Диспетчер помещает в общую очередь задач
// действие, которое будет вызвано в UI потоке.
// В общем нужно просто запомнить эту запись
Dispatcher.Invoke(new Action(() =>
{
// Включить кнопку
buttonLogin.IsEnabled = true;
// Остановить таймер
timer.Stop();
}));
// Вместо записи () => {} можно было бы использовать
// имя функции.
// например, new Action(имяФункции)
}
private void ButtonClick(object sender, RoutedEventArgs e)
{
// Записать значение полей Логин и Пароль
// в одтельные переменные для удобства использования
string login = textBoxLogin.Text;
string password = textBoxPassword.Password;
// Проверить количество введенных символов
// в поля Логин и Пароль
if (login.Length < 4 || password.Length < 4)
{
return;
}
// Получить из таблицы Manager запись, которая соответствует
// указанному логину и паролю (login, password)
IQueryable man = Database.Context.Manager.Where(
m => m.Login == login && m.Password == password);
// Из полученного результата попытаться взять первую запись
Database.User = man.FirstOrDefault();
if (Database.User == null)
{
// Если записей нет, то сказать пользователю
// о неправильном вводе
MessageBox.Show("Неверный логин/пароль");
// Увеличить счетчик неверно введенного пароля на единицу
count++;
// Если счетчик достиг значения 3, то...
if (count >= 3)
{
// заблокировать кнопку Вход
buttonLogin.IsEnabled = false;
// и запустить таймер на 1 минуту
// После 1 минуты таймер разблокирует кнопку
timer.Start();
}
return;
}
// Если пользователь был получен (из базы данных)
// то проверить его роль, и в соответствии с ролью
// открыть нужную страницу
switch (Database.User.Role)
{
case "Директор":
// Для роли Директор октрыть страницу "директор"
NavigationService.Navigate(PageNavigation.director);
break;
case "Менеджер":
NavigationService.Navigate(PageNavigation.mainPage);
break;
case "Администратор":
NavigationService.Navigate(PageNavigation.mainPage);
break;
default:
NavigationService.Navigate(PageNavigation.mainPage);
break;
}
// На главном окне показать кнопку Мои данные
PageNavigation.mainWindow.userInfoButton.Visibility = Visibility.Visible;
}
private void TextBoxInput(object sender, KeyEventArgs e)
{
if (textBoxLogin.Text.Length >= 4 && textBoxPassword.Password.Length >= 4)
{
buttonLogin.IsEnabled = true;
}
else
{
buttonLogin.IsEnabled = false;
}
}
private void Label_MouseUp(object sender, MouseButtonEventArgs e)
{
NavigationService.Navigate(PageNavigation.registration);
}
}
}