using System; using System.Collections.Generic; using System.Linq; using System.Windows; using System.Windows.Controls; using System.Windows.Input; using System.Windows.Media.Imaging; using System.Windows.Navigation; namespace MyTests.Pages { // Каталог тестов public partial class TestsCatalog : Page { public TestsCatalog() { InitializeComponent(); TestsListBox.Items.Clear(); // Очистка списка тестов if (Session.User.Post == "Преподаватель") // Если пользователь имеет права преподавателя, то AddTestButton.Visibility = Visibility.Visible;// Кнопка "Создать тест" становится видна LoadingTests(); // Обновление списка тестов } private void AddTest_Click(object sender, RoutedEventArgs e) // Метод, который вызывается при нажатии на кнопку "создать тест" { NavigationService.Navigate(new EditTestPage()); // Переход на страницу редактирования/создания теста } void LoadingTests() // Метод, обновляющий список тестов { List list = cdb.db.Tests.Where(item => item.IsVisible == true && item.Questions.Count > 0).ToList(); // Создается список и заполняется тестами, которые видны пользователям и в которых больше 0 вопросов if (TestNameBox.Text != "Название теста") // list = list.Where(item => item.Name.StartsWith(TestNameBox.Text)).ToList(); // В списке остаются только тесты, названия которых начинается на содержимое TestNameBox (aka поиск) if (AuthorTestBox.Text != "Преподаватель") // list = list.Where(item => item.Users.Surname.StartsWith(AuthorTestBox.Text) // В списке остаются только тесты, || item.Users.Name.StartsWith(AuthorTestBox.Text) // автор которых начинается на содержимое AuthorTestBox (aka поиск) || item.Users.Patronymic.StartsWith(AuthorTestBox.Text)).ToList(); // Поиск по имени, фамилии и отчеству List testsList = new List(); // Создание списка с тестами "для отображения" 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);// Добавление теста в список "для отображения" } // Заполнение содержимым TestsListBox. Т.е сам вывод тестов пользователю TestsListBox.ItemsSource = testsList; } private void FindTests_Click(object sender, RoutedEventArgs e) { LoadingTests(); // Обновление списка тестов } private void TestNameBox_PreviewMouseDown(object sender, MouseButtonEventArgs e) { ((TextBox)sender).Text = String.Empty; // Очистка строки поиска по названию теста } private void TestNameBox_LostFocus(object sender, RoutedEventArgs e) { if (TestNameBox.Text.Trim() == "") // TestNameBox.Text = "Название теста"; // Возврат стандартного текста у поля для ввода названия теста(поиск) } private void AuthorTestBox_PreviewMouseDown(object sender, MouseButtonEventArgs e) { ((TextBox)sender).Text = String.Empty; // Очистка строки поиска по автору } private void AuthorTestBox_LostFocus(object sender, RoutedEventArgs e) { if (AuthorTestBox.Text.Trim() == "") // AuthorTestBox.Text = "Преподаватель"; //Возврат стандартного текста у поля для ввода автора теста(поиск) } private void TestsListBox_SelectionChanged(object sender, SelectionChangedEventArgs e) // Вызывается при нажатии на тест { try { if (((TestsClass)TestsListBox.SelectedItem) != null) // Доп проверка на то, что выбран именно тест { // Создание переменной, которая равна выбранному тесту Tests thisTest = cdb.db.Tests.Where(item => item.IdTest == ((TestsClass)TestsListBox.SelectedItem).test.IdTest).FirstOrDefault(); if (!thisTest.CanAgain && cdb.db.Answers.Where(item => item.Questions.Tests.IdTest == thisTest.IdTest).Select(item => item.IdUser).Contains(Session.User.IdUser) && Session.User.IdUser != thisTest.IdUser) // Проверка на возможность пройти тест повторно new ErrorWindow("Этот тест не может быть пройден повторно.").ShowDialog(); // Вывод ошибки else // Если пройти повторно или впервые возможно, то { Session.OpenedTest = thisTest; // Открытый тест = выбранному тесту Session.Points = 0; // Сброс очков Session.CurQuestion = 0; // Сброс текущего вопроса Session.Quest.Content = cdb.db.Questions.Where(item => item.IdTest == Session.OpenedTest.IdTest).Select(item => item.Content).ToArray(); // Заполнение массива вопросами (нужно для отображения вопросов в тесте) 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(); // Вывод ошибки } } public class TestsClass { public Tests test { get; set; } public BitmapImage testImage { get; set; } } } }