|
@@ -9,97 +9,101 @@ 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();
|
|
|
+ TestsListBox.Items.Clear(); // Очистка списка тестов
|
|
|
+ if (Session.User.Post == "Преподаватель") // Если пользователь имеет права преподавателя, то
|
|
|
+ AddTestButton.Visibility = Visibility.Visible;// Кнопка "Создать тест" становится видна
|
|
|
+ LoadingTests(); // Обновление списка тестов
|
|
|
}
|
|
|
|
|
|
- private void AddTest_Click(object sender, RoutedEventArgs e)
|
|
|
+ private void AddTest_Click(object sender, RoutedEventArgs e) // Метод, который вызывается при нажатии на кнопку "создать тест"
|
|
|
{
|
|
|
- NavigationService.Navigate(new EditTestPage());
|
|
|
+ NavigationService.Navigate(new EditTestPage()); // Переход на страницу редактирования/создания теста
|
|
|
}
|
|
|
- void LoadingTests()
|
|
|
+ void LoadingTests() // Метод, обновляющий список тестов
|
|
|
{
|
|
|
- List<Tests> list = cdb.db.Tests.Where(item => item.IsVisible == true && item.Questions.Count > 0).ToList();
|
|
|
- if (TestNameBox.Text != "Название теста")
|
|
|
- list = list.Where(item => item.Name.StartsWith(TestNameBox.Text)).ToList();
|
|
|
+ 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)
|
|
|
- || item.Users.Patronymic.StartsWith(AuthorTestBox.Text)).ToList();
|
|
|
+ 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>();
|
|
|
+ List<TestsClass> testsList = new List<TestsClass>(); // Создание списка с тестами "для отображения"
|
|
|
|
|
|
- foreach (Tests test in 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);
|
|
|
+ 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();
|
|
|
+ LoadingTests(); // Обновление списка тестов
|
|
|
}
|
|
|
|
|
|
private void TestNameBox_PreviewMouseDown(object sender, MouseButtonEventArgs e)
|
|
|
{
|
|
|
- ((TextBox)sender).Text = String.Empty;
|
|
|
+ ((TextBox)sender).Text = String.Empty; // Очистка строки поиска по названию теста
|
|
|
}
|
|
|
|
|
|
private void TestNameBox_LostFocus(object sender, RoutedEventArgs e)
|
|
|
{
|
|
|
- if (TestNameBox.Text.Trim() == "")
|
|
|
- TestNameBox.Text = "Название теста";
|
|
|
+ if (TestNameBox.Text.Trim() == "") //
|
|
|
+ TestNameBox.Text = "Название теста"; // Возврат стандартного текста у поля для ввода названия теста(поиск)
|
|
|
}
|
|
|
|
|
|
private void AuthorTestBox_PreviewMouseDown(object sender, MouseButtonEventArgs e)
|
|
|
{
|
|
|
- ((TextBox)sender).Text = String.Empty;
|
|
|
+ ((TextBox)sender).Text = String.Empty; // Очистка строки поиска по автору
|
|
|
}
|
|
|
|
|
|
private void AuthorTestBox_LostFocus(object sender, RoutedEventArgs e)
|
|
|
{
|
|
|
- if (AuthorTestBox.Text.Trim() == "")
|
|
|
- AuthorTestBox.Text = "Преподаватель";
|
|
|
+ if (AuthorTestBox.Text.Trim() == "") //
|
|
|
+ AuthorTestBox.Text = "Преподаватель"; //Возврат стандартного текста у поля для ввода автора теста(поиск)
|
|
|
}
|
|
|
|
|
|
- private void TestsListBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
|
|
|
+ private void TestsListBox_SelectionChanged(object sender, SelectionChangedEventArgs e) // Вызывается при нажатии на тест
|
|
|
{
|
|
|
try
|
|
|
{
|
|
|
- if (((TestsClass)TestsListBox.SelectedItem) != null)
|
|
|
+ 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
|
|
|
+
|
|
|
+ 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 Pages.CurTestPage());
|
|
|
+ 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();
|
|
|
+ new ErrorWindow("Ошибка открытия теста.").ShowDialog(); // Вывод ошибки
|
|
|
}
|
|
|
}
|
|
|
|