123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159 |
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Windows;
- using System.Windows.Controls;
- using System.Windows.Media.Imaging;
- using System.Windows.Navigation;
- namespace MyTests.Pages
- {
- // Страница с профилем
- public partial class ProfilePage : Page
- {
- static Users user;
- public ProfilePage(Users _user)
- {
- InitializeComponent();
- TestsListBox.Items.Clear(); // Очистка списка с тестами
- user = _user;
- //Заполняются данные из БД
- FIOLabel.Content = user.Surname + " " + user.Name + " " + user.Patronymic; // Заполнение ФИО из базы данных
- ProfileImage.Source = user.Image == null ? // Если НЕТ картинки у пользователя в базе данных, то
- new BitmapImage(new Uri("../Resources/StandartImage.png", UriKind.RelativeOrAbsolute)) : // Устанавливается стандартная
- ImagesFunctions.NewImage(user); // Если есть - картинка устанавливается из БД
- EmailBox.Text = user.Email; // Заполняется электронная почта из БД
- InfoBox.Text = user.Info; // Заполняется информация из БД
- if (user != Session.User) //
- { //
- EmailBox.IsEnabled = false; // Если пользователь не владелец профиля, то запрещается редактирование
- InfoBox.IsEnabled = false; //
- SaveButton.Visibility = Visibility.Collapsed;//
- } //
-
- if (user.Post == "Преподаватель")// Если пользователь - преподаватель, то
- TestsLoading(); // загружается список тестов преподавателя
- else // иначе
- TestsListBox.Visibility = Visibility.Collapsed; // список тестов скрывается
- }
- private void EditImage_Click(object sender, RoutedEventArgs e)
- {
- if (user == Session.User) // если пользователь - владелец
- {
- BitmapImage image = ImagesFunctions.SelectImage(); // Выбор картинки с компьютера пользователя
- if (image != null) // Если картинка выбрана
- {
- ProfileImage.Source = image; // картинка профиля заменяется на выбранную
- Session.User.Image = ImagesFunctions.BitmapSourceToByteArray((BitmapSource)ProfileImage.Source); // Замена картинки в базе данных в виде varbinary
- cdb.db.SaveChanges(); // Сохранение данных
- }
- }
- }
- private void TestsLoading()
- {
- // Создание списка с тестами. Если профиль открыл владелец, то в список добавляются еще и скрытые тесты.
- List<Tests> list = user != Session.User ? cdb.db.Tests.Where(item => item.IdUser == user.IdUser && item.IsVisible == true).ToList() :
- cdb.db.Tests.Where(item => item.IdUser == user.IdUser).ToList();
- // Создание списка с типом TestsClass, в котором будут хранится тесты и их картинки
- List<TestsClass> testsList = new List<TestsClass>();
- // Берется каждый тест из списка с тестами
- foreach (Tests test in list)
- {
- TestsClass tc = new TestsClass();
- tc.test = test;
- tc.testImage = test.Image == null ? new BitmapImage(new Uri("../Resources/Approval.png", UriKind.RelativeOrAbsolute)) : ImagesFunctions.NewImage(test); // Если у теста нет картинки, то устанавливается стандартная. Иначе - картинка из БД
- testsList.Add(tc);// Добавление данных в список с тестами и картинками
- }
- // Добавление данных из списка с тестами и картинками в список для отображения (ListBox)
- TestsListBox.ItemsSource = testsList;
- }
- private void SaveButton_Click(object sender, RoutedEventArgs e)
- {
- if (!Functions.IsValidEmail(EmailBox.Text)) // Проверка на правильность ввода электронной почты
- new ErrorWindow("Email введен неверно.").Show(); // Вывод ошибки
- else if (Functions.IsEmailAlreadyTaken(EmailBox.Text) && EmailBox.Text != user.Email) // Проверка на уникальность электронной почты
- new ErrorWindow("Данный email уже используется.").Show(); // Вывод ошибки
- else
- {
- Session.User.Email = EmailBox.Text; // Замена электронной почты в БД на содержимое EmailBox
- Session.User.Info = InfoBox.Text; // Замена информации в БД на содержимое InfoBox
- cdb.db.SaveChanges(); // Сохранение
- new ErrorWindow("Успешно.").ShowDialog(); // Вывод диалогового окна
- }
- }
- private void CheckResultsButton_Click(object sender, RoutedEventArgs e)
- {
- Button btn = (Button)sender; // Создание кнопки, которая равна sender
- if (btn.DataContext is TestsClass) // Проверка на содержимое элемента ListBox
- NavigationService.Navigate(new CheckTestResultsCatalog(((TestsClass)btn.DataContext).test)); //Переход на страницу с каталогом результатов
- }
- private void EditTestButton_Click(object sender, RoutedEventArgs e)
- {
- Button btn = (Button)sender;// Создание кнопки, которая равна sender
- if (btn.DataContext is TestsClass) // Проверка на содержимое элемента ListBox
- NavigationService.Navigate(new EditTestPage(((TestsClass)btn.DataContext).test)); // Переход на страницу с редактированием теста
- }
- private void TestsListBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
- {
- try
- {
- if (((Tests)TestsListBox.SelectedItem) != null) // Если выбран элемент списка с тестами
- {
- // Заполняется переменная, которая хранит в себе открытый тест
- Session.OpenedTest = cdb.db.Tests.Where(item => item.IdTest == ((TestsClass)TestsListBox.SelectedItem).test.IdTest).FirstOrDefault();
- // Сбрасывается количество баллов за ответы на вопросы
- Session.Points = 0;
- // Сбрасывается номер вопроса
- Session.CurQuestion = 0;
- // Массив Content заполняется вопросами из открытого теста
- Session.Quest.Content = cdb.db.Questions.Where(item => item.IdTest == Session.OpenedTest.IdTest).Select(item => item.Content).ToArray();
- // Массив Answer заполняется ответами из открытого теста
- Session.Quest.Answer = cdb.db.Questions.Where(item => item.IdTest == Session.OpenedTest.IdTest).Select(item => item.Answer).ToArray();
- // Переход на страницу с прохождением теста
- NavigationService.Navigate(new CurTestPage());
- }
- }
- catch
- {
- new ErrorWindow("Ошибка открытия теста.").ShowDialog(); // Вывод ошибки
- }
- }
- private void DeleteTestButton_Click(object sender, RoutedEventArgs e)
- {
- Button btn = (Button)sender; // Создается кнопка, которая равна sender
- if (btn.DataContext is TestsClass) // Проверка на содержимое элемента ListBox. Т.е нажато по элементу ListBox или нет
- {
- ConfirmationWindow confWindow = new ConfirmationWindow(); // Открытие окна
- confWindow.ShowDialog(); // с подтверждением действия
- if (confWindow.answer) // Если ответ "Да"
- {
- // Удаляются все ответы пользователей, которые относились к выбранному тесту
- foreach (Answers answer in cdb.db.Answers.Where(item => item.Questions.IdTest == ((TestsClass)btn.DataContext).test.IdTest))
- cdb.db.Answers.Remove(answer);
- // Удаляются все вопросы, которые относились к выбранному тесту
- foreach (Questions question in cdb.db.Questions.Where(item => item.IdTest == ((TestsClass)btn.DataContext).test.IdTest))
- cdb.db.Questions.Remove(question);
- // Удаление теста
- cdb.db.Tests.Remove(((TestsClass)btn.DataContext).test);
- cdb.db.SaveChanges(); // Сохранение
- TestsLoading(); // Обновление списка тестов
- }
- }
- }
- //Класс, хранящий в себе тест и картинку теста
- public class TestsClass
- {
- public Tests test { get; set; }
- public BitmapImage testImage { get; set; }
- }
- }
- }
|