示例#1
0
        public ActionResult Save(Quiz quiz, QuizBlock block, QuizEditHistory latestChange)
        {
            var errorMessages = ValidateQuiz(quiz, block);

            if (errorMessages != null)
            {
                var errorMessage = string.Format("Invalid data: {0}", string.Concat(errorMessages));
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest, errorMessage));
            }

            var now = DateTime.UtcNow;

            if (quiz.Id != 0)
            {
                quiz.QuizStateId = quiz.QuizState.Id;
                quiz.QuizState   = null;
                block.Quiz       = null;
                if (quiz.UserGroup != null)
                {
                    quiz.GroupId   = quiz.UserGroup.Id;
                    quiz.UserGroup = null;
                }
                latestChange.LastChangeDate = now;
                latestChange.User           = null;
                _repository.Update <QuizEditHistory>(latestChange);
                _repository.Update <Quiz>(quiz);
                _repository.Update <QuizBlock>(block);
            }
            else
            {
                quiz.QuizStateId = quiz.QuizState.Id;
                quiz.QuizState   = null;
                _repository.Insert <Quiz>(quiz);
                block.TopicId = 1;
                block.QuizId  = quiz.Id;
                _repository.Insert <QuizBlock>(block);
                _repository.Insert <QuizVariant>(new QuizVariant()
                {
                    QuizId = quiz.Id
                });
                latestChange = LockQuiz(quiz.Id, User.Identity.GetUserId(), now);
            }
            quiz.QuizState = _repository.GetSingle <QuizState>(q => q.Id == quiz.QuizStateId);
            quiz.UserGroup = _repository.GetSingle <UserGroup>(g => g.Id == quiz.GroupId);

            var minQuiz         = GetQuizForSerialization(quiz);
            var minQuizBlock    = GetQuizBlockForSerialization(block);
            var minLatestChange = GetQuizEditHistoryForSerialization(latestChange);

            var result = new { quiz = minQuiz, block = minQuizBlock, latestChange = minLatestChange };

            return(Json(result));
        }
示例#2
0
        private QuizEditHistory LockQuiz(int quizId, string userId, DateTime date)
        {
            var latestEdit = new QuizEditHistory()
            {
                QuizId         = quizId,
                UserId         = userId,
                StartDate      = date,
                LastChangeDate = date
            };

            _repository.Insert <QuizEditHistory>(latestEdit);

            return(latestEdit);
        }
示例#3
0
        private object GetQuizEditHistoryForSerialization(QuizEditHistory history)
        {
            object user = null;

            if (history.User != null)
            {
                user = new
                {
                    UserName = history.User.UserName,
                };
            }
            var minQuizEditHistory = new
            {
                Id             = history.Id,
                UserId         = history.UserId,
                QuizId         = history.QuizId,
                StartDate      = history.StartDate.ToString("yyyy-MM-ddTHH:mm:ss"),
                LastChangeDate = history.LastChangeDate.ToString("yyyy-MM-ddTHH:mm:ss"),
                EndLockDate    = history.LastChangeDate.AddMinutes(QuizLockDuration).ToString("dd.MM.yyyy HH:mm:ss"),
                User           = user
            };

            return(minQuizEditHistory);
        }