Пример #1
0
 public AnswerViewModel(ExamTask sourseTask, int gotPoints)
 {
     task_id      = sourseTask.Id;
     right_answer = sourseTask.Answer;
     max_points   = sourseTask.TaskTopic.PointsPerTask;
     type         = sourseTask.TaskTopic.IsShort ? 0 : 1;
     points       = gotPoints;
 }
Пример #2
0
 public ExamTaskViewModel(ExamTask sourseTask, int?user_points = null)
 {
     id               = sourseTask.Id;
     text             = sourseTask.Text;
     topic_id         = sourseTask.TaskTopic.Id;
     topic_name       = sourseTask.TaskTopic.Name;
     type             = sourseTask.TaskTopic.IsShort ? 0 : 1;
     code             = sourseTask.TaskTopic.Code;
     max_points       = sourseTask.TaskTopic.PointsPerTask;
     this.user_points = user_points;
 }
Пример #3
0
        private UserTaskAttempt GenerateNewEmptyAttempt(ExamTask task)
        {
            UserTaskAttempt result = null;

            if (task.TaskTopic.IsShort)
            {
                result = new UserSimpleTaskAttempt()
                {
                    ExamTask = task
                };
            }
            else
            {
                result = new UserManualCheckingTaskAttempt()
                {
                    ExamTask = task
                };
            }
            if (result != null)
            {
                //_dbContext.UserTaskAttempts.Add(result);
            }
            return(result);
        }
Пример #4
0
        public async Task AddNewTasks(ExamAppDbContext examAppDbContext)
        {
            var exam           = examAppDbContext.Exams.OfType <EgeExam>().FirstOrDefault();
            var existingTopics = examAppDbContext.TaskTopics.ToList();
            var existingTasks  = examAppDbContext.Tasks.ToList();

            var createdTasksTopics = new List <TaskTopic>();
            var createdTasks       = new List <ExamTask>();

            var       config           = Configuration.Default.WithDefaultLoader();
            const int numberOfVariants = 20;

            for (int i = 1; i <= numberOfVariants; i++)
            {
                var address  = "http://kpolyakov.spb.ru/school/ege/gen.php?B=on&C=on&action=viewVar&varId=" + i;
                var document = await BrowsingContext.New(config).OpenAsync(address).ConfigureAwait(false);

                var          cellSelector = "td.topicview script";
                var          cells        = document.QuerySelectorAll(cellSelector);
                const string numberPrefix = "№&nbsp;";
                const string textPrexfix  = "changeImageFilePath('";
                foreach (var cell in cells)
                {
                    var result         = cell.TextContent;
                    var firstOrDefault =
                        cell.ParentElement.ParentElement.QuerySelectorAll("td.egeno span").FirstOrDefault();
                    if (firstOrDefault != null)
                    {
                        int orderNum =
                            int.Parse(firstOrDefault.TextContent);
                        int numStartPoint  = result.IndexOf(numberPrefix) + numberPrefix.Length;
                        int textStartPoint = result.IndexOf(textPrexfix) + textPrexfix.Length;

                        if (existingTopics.All(x => x.Number != orderNum))
                        {
                            var newTopic = new TaskTopic()
                            {
                                Exam          = exam,
                                Name          = "DefaultName" + orderNum,
                                Number        = orderNum,
                                PointsPerTask = 0
                            };

                            createdTasksTopics.Add(newTopic);
                            existingTopics.Add(newTopic);
                        }

                        var topic  = existingTopics.FirstOrDefault(x => x.Number == orderNum);
                        var number = int.Parse(result.Substring(numStartPoint, result.IndexOf(")") - numStartPoint));

                        if (!existingTasks.Any(x => x.Number == number))
                        {
                            var newTask = new ExamTask()
                            {
                                TaskTopic = topic,
                                Number    = number,
                                Text      = result.Substring(textStartPoint, result.LastIndexOf("\') );") - textStartPoint),
                                Answer    = document
                                            .QuerySelectorAll("table.varanswer tr td.egeno")
                                            .Where(
                                    x => int.Parse(x.TextContent.Substring(0, x.TextContent.Length - 1)) == orderNum)
                                            .Next("td.answer")
                                            .FirstOrDefault()?.TextContent
                            };

                            createdTasks.Add(newTask);
                            existingTasks.Add(newTask);
                        }
                    }
                }
            }

            examAppDbContext.TaskTopics.AddRange(createdTasksTopics);
            examAppDbContext.Tasks.AddRange(createdTasks);

            CreateEgeTasksTopics(examAppDbContext, existingTopics);

            examAppDbContext.SaveChanges();
        }
Пример #5
0
 private bool RatedAnswerIsCorrect(ExamTask task, UserTaskAttempt attempt)
 {
     return(task.TaskTopic.PointsPerTask == attempt.Points);
 }
Пример #6
0
        private Task CreateNewTask(string type, string title, string description, Priority priority, DateTime due)
        {
            if (title.Length < 3)
            {
                Toastr.Warning("Warning", "Title length is too short");
                return(null);
            }
            if (description.Length < 10)
            {
                Toastr.Warning("Warning", "Description length is too short.");
                return(null);
            }
            if (!DateService.DateAfterToday(due))
            {
                Toastr.Warning("Warning", "The due date must be in the future.");
                return(null);
            }

            Task newTask = null;

            Toastr.TurnOffNotifications(); // Prevent multiple 'update' notifications

            DateTime now = DateTime.Now;

            switch (type)
            {
            case "Assignment":
                string subject    = tbxSubject.Text;
                int    percentage = int.Parse(tbxPercentage.Text);

                newTask = new AssignmentTask(title, description, priority, due, now, subject, percentage);
                break;

            case "Exam":
                string subjectExam    = tbxSubjectExam.Text;
                string materials      = tbxMaterials.Text;
                int    percentageExam = int.Parse(tbxPercentExam.Text);

                newTask = new ExamTask(title, description, priority, due, now, subjectExam, percentageExam, new List <string>(materials.Split(',')));
                break;

            case "Event":
                string location = tbxLocation.Text;

                newTask = new EventTask(title, description, priority, due, now, location);
                break;

            case "Payment":
                decimal amount = decimal.Parse(tbxAmount.Text);

                newTask = new PaymentTask(title, description, priority, due, now, amount);
                break;

            default:
                Toastr.Error("Error", "Invalid task type.");
                break;
            }

            Toastr.TurnOnNotifications();

            if (newTask != null)
            {
                Toastr.Success("Created", "The '" + title + "' task has been created");
            }

            return(newTask);
        }