123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116 |
- 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<Tests> 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<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);// Добавление теста в список "для отображения"
- }
- // Заполнение содержимым 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; }
- }
- }
- }
|