/// <summary> /// Called when an item in the exercise list is tapped. /// </summary> /// <param name="sender">The object sending the event.</param> /// <param name="e">The event parameters.</param> private async void ExerciseList_ItemTapped(object sender, ItemTappedEventArgs e) { if (await ConnectivityCheck.AskToEnableConnectivity(this)) { // TODO: support other exercise types try { ExerciseApi exerciseEndpoint = new ExerciseApi(App.OAuth2Account, ((EssayExercise)e.Item).Uid); EssayExercise essay = await Task.Run(async() => await exerciseEndpoint.CallEndpointAsExerciseModel()) as EssayExercise; if (essay == null) { await this.DisplayAlert(Properties.Resources.Error, Properties.Resources.Exercise_UnableToDisplay, Properties.Resources.ButtonOK); } else { await this.Navigation.PushAsync(new EssayExerciseView(essay)); } } catch (UnsuccessfulApiCallException ex) { Tools.Logger.Log("ExerciseList_ItemTapped", ex); await this.DisplayAlert(Properties.Resources.Error, Properties.Resources.Exercise_UnableToDisplay, Properties.Resources.ButtonOK); } } }
public ResultEntity deleteExercise(int?exerciseId) { ResultEntity resultEntity = new ResultEntity(); if (exerciseId != null) { Exercise exercise = ExerciseApi.findByExerciseId(exerciseId); if (exercise != null) { ExerciseApi.delete(exercise.exerciseId); resultEntity.setState(1); resultEntity.setMessage("习题删除成功!"); } else { resultEntity.setMessage("未找到对应习题!"); resultEntity.setState(0); } } else { resultEntity.setMessage("传入参数为空!"); resultEntity.setState(0); } return(resultEntity); }
/// <summary> /// Event handler /// </summary> /// <param name="sender">Sender param</param> /// <param name="e">evet param</param> private async void LoadButton_Clicked(object sender, EventArgs e) { try { ExerciseApi exAPI = new ExerciseApi(App.OAuth2Account, this.ex.Uid); Exercise result = await exAPI.CallEndpointAsExerciseModel(); if (!(result is EssayExercise)) { throw new NotImplementedException(Properties.Resources.EssayExerciseViewExerciseTypeNotSupported); } await this.FillData((EssayExercise)result); } catch (NotImplementedException ex) { // This shouldn't happen await Tools.Logger.LogWithErrorMessage(this, "LoadButton_Clicked - This shouln't happen!", ex); } catch (UnsuccessfulApiCallException ex) { Tools.Logger.Log(this.GetType().ToString(), "LoadButton_Clicked method", ex); } catch (Exception ex) { Tools.Logger.Log(this.GetType().ToString(), "LoadButton_Clicked method", ex); } }
public ResultEntity findOneExerice(int?exerciseId) { ResultEntity resultEntity = new ResultEntity(); if (exerciseId != null) { Exercise exercise = ExerciseApi.findByExerciseId(exerciseId); if (exercise != null) { if (exercise.exerciseType % 3 != 0) { List <ExerciseChoice> exerciseChoices = ExerciseChoiceApi.findByExerciseIdOrderByExerciceChoiceId(exerciseId); resultEntity.setData(new ExerciseSet(exercise, exerciseChoices)); } else { resultEntity.setData(new ExerciseSet(exercise)); } resultEntity.setState(1); resultEntity.setMessage("搜索习题成功!"); } else { resultEntity.setMessage("搜索习题失败!"); resultEntity.setState(0); } } else { resultEntity.setMessage("传入参数为空!"); resultEntity.setState(0); } return(resultEntity); }
public ResultEntity addExercise(Exercise exercise) { ResultEntity resultEntity = new ResultEntity(); if (exercise != null) { resultEntity.setData(ExerciseApi.insert(exercise)); if (resultEntity.getData() != null) { if (exercise.exerciseType <= 3) { setTotalScore(exercise.chapterId, "preview"); } else { setTotalScore(exercise.chapterId, "review"); } resultEntity.setState(1); resultEntity.setMessage("创建习题成功!"); } else { resultEntity.setMessage("创建习题失败!"); resultEntity.setState(0); } } else { resultEntity.setMessage("传入参数为空!"); resultEntity.setState(0); } return(resultEntity); }
public ResultEntity alterExercise(Exercise exercise) { ResultEntity resultEntity = new ResultEntity(); if (exercise != null) { //fragile Exercise exercise1 = ExerciseApi.findByExerciseId(exercise.exerciseId); if (exercise1 != null) { resultEntity.setData(ExerciseApi.insert(exercise)); resultEntity.setState(1); resultEntity.setMessage("习题修改成功!"); } else { resultEntity.setMessage("未找到对应习题!"); resultEntity.setState(0); } } else { resultEntity.setMessage("传入参数为空!"); resultEntity.setState(0); } return(resultEntity); }
/// <summary> /// Refreshes the list containing the exercise history. /// </summary> /// <returns>True if everything was completed correctly</returns> /// <exception cref="UnsuccessfulApiCallException">Thrown if /// <see cref="ExerciseHistoryApi.CallEndpointAsObjectAsync()"/> fails.</exception> /// <exception cref="Exception">Thrown if something else fails.</exception> public async Task RefreshExerciseHistory() { List <Exercise> historyWithResults = new List <Exercise>(); ExerciseHistoryApi historyEndpoint = new ExerciseHistoryApi(App.OAuth2Account); // These exceptions are handled in the view directly. IList <UserActivity> history = new List <UserActivity>(); history = await historyEndpoint.CallEndpointAsObjectAsync().ConfigureAwait(false); // Performance ExerciseApi exerciseEndpoint; Exercise histEx; UserActivityEssay histActEssay; EssayExercise histExEssay; foreach (UserActivity histAct in history) { try { exerciseEndpoint = new ExerciseApi(App.OAuth2Account, histAct.ActivityId); histEx = await exerciseEndpoint.CallEndpointAsExerciseModel().ConfigureAwait(false); if (histAct is UserActivityEssay && histEx is EssayExercise) { histActEssay = (UserActivityEssay)histAct; histExEssay = (EssayExercise)histEx; histExEssay.Contents = histActEssay.Text; histExEssay.Status = histActEssay.Status; histExEssay.Timestamp = histActEssay.Timestamp; } else { historyWithResults.Add(histEx); } } catch (UnsuccessfulApiCallException ex) { Tools.Logger.Log(this.GetType().ToString(), "RefreshExerciseHistory method - Internal UserActivity loop", ex); // TODO: Add activity indicator // this.SwitchActivityIndicator(false); } catch (Exception ex) { Tools.Logger.Log(this.GetType().ToString(), "RefreshExerciseHistory method - Internal UserActivity loop", ex); // TODO: Add activity indicator // this.SwitchActivityIndicator(false); } } this._exerciseHistory = new ReadOnlyObservableCollection <Exercise>(new ObservableCollection <Exercise>(historyWithResults)); this.PropertyChanged?.Invoke(this, new PropertyChangedEventArgs("History")); }
public int?calculateScore(int?chapterId, int?studentId) { List <Exercise> exercises = ExerciseApi.findByChapterId(chapterId); int? score = 0; foreach (Exercise exercise in exercises) { score += int.Parse(StudentExerciseScoreApi.findByExerciseIdAndStudentId(exercise.exerciseId, studentId).exerciseScore); } return(score); }
public void setTotalScore(int?chapterId, String type) { int type1 = 0; int type2 = 0; int type3 = 0; if (type.Equals("preview")) { type1 = 1; type3 = 2; type2 = 3; } else { type1 = 4; type3 = 5; type2 = 6; } //fragile List <Exercise> exercises = ExerciseApi.findByChapterIdAndExerciseTypeOrderByExerciseNumber(chapterId, type1); List <Exercise> temp = new List <Exercise>(); temp.AddRange(exercises); exercises = ExerciseApi.findByChapterIdAndExerciseTypeOrderByExerciseNumber(chapterId, type3); temp.AddRange(exercises); exercises = ExerciseApi.findByChapterIdAndExerciseTypeOrderByExerciseNumber(chapterId, type2); temp.AddRange(exercises); int?total = 0; foreach (Exercise exercise in temp) { total += exercise.exercisePoint; } if (type.Equals("preview")) { //fragile ChapterNode chapterNode = ChapterContentApi.getByID(chapterId); chapterNode.exerciseTotal_1 = total; ChapterContentApi.insert(chapterNode); } else { ChapterNode chapterNode = ChapterContentApi.getByID(chapterId); chapterNode.exerciseTotal_2 = total; ChapterContentApi.insert(chapterNode); } }
public List <int?> exerciseScore(int?studentId, int?chapterId, String type) { int type1 = 0; int type2 = 0; int type3 = 0; if (type.Equals("preview")) { type1 = 1; type3 = 2; type2 = 3; } else { type1 = 4; type3 = 5; type2 = 6; } List <Exercise> exercises = ExerciseApi.findByChapterIdAndExerciseTypeOrderByExerciseNumber(chapterId, type1); List <int?> scores = new List <int?>(); foreach (Exercise exercise in exercises) { if (!StudentExerciseScoreApi.existsByExerciseIdAndStudentId(exercise.exerciseId, studentId)) { return(null); } scores.Add(int.Parse(StudentExerciseScoreApi.findByExerciseIdAndStudentId(exercise.exerciseId, studentId).exerciseScore)); } exercises = ExerciseApi.findByChapterIdAndExerciseTypeOrderByExerciseNumber(chapterId, type3); foreach (Exercise exercise in exercises) { scores.Add(int.Parse(StudentExerciseScoreApi.findByExerciseIdAndStudentId(exercise.exerciseId, studentId).exerciseScore)); } exercises = ExerciseApi.findByChapterIdAndExerciseTypeOrderByExerciseNumber(chapterId, type2); foreach (Exercise exercise in exercises) { if (StudentExerciseScoreApi.findByExerciseIdAndStudentId(exercise.exerciseId, studentId).corrected != 0) { scores.Add(int.Parse(StudentExerciseScoreApi.findByExerciseIdAndStudentId(exercise.exerciseId, studentId).exerciseScore)); } } return(scores); }
/// <summary> /// Refreshes the exercise history asynchronously. /// </summary> /// <returns>A <see cref="Task"/> representing the asynchronous operation.</returns> private static async Task <ReadOnlyObservableCollection <Exercise> > GetHistoryAsync() { List <Exercise> historyWithResults = new List <Exercise>(); ExerciseHistoryApi historyEndpoint = new ExerciseHistoryApi(App.OAuth2Account); IEnumerable <UserActivity> history = new List <UserActivity>(); history = await Task.Run(async() => await historyEndpoint.CallEndpointAsObjectAsync()); // Remove dictionary searches (they are not meant to be displayed in the list). history = history.Where(x => x.GetType() != typeof(DictionarySearchExercise)); // Preload all exercises in the list to improve performance. ExerciseApi exerciseEndpoint; foreach (UserActivity histAct in history) { exerciseEndpoint = new ExerciseApi(App.OAuth2Account, histAct.ActivityId); historyWithResults.Add(await Task.Run(async() => await exerciseEndpoint.CallEndpointAsExerciseModel())); } return(new ReadOnlyObservableCollection <Exercise>(new ObservableCollection <Exercise>(historyWithResults))); }
public ResultEntity answerOne(String answer, int?exerciseId, int?studentId) { ResultEntity resultEntity = new ResultEntity(); StudentExerciseScore studentExerciseScore = new StudentExerciseScore(studentId, exerciseId, answer, 0.ToString()); studentExerciseScore.corrected = 0; Exercise exercise = ExerciseApi.findByExerciseId(exerciseId); if (studentExerciseScore != null) { if (exercise.exerciseType % 3 != 0) { if (answer.Equals(exercise.exerciseAnswer)) { studentExerciseScore.corrected = 1; studentExerciseScore.exerciseScore = exercise.exercisePoint.ToString(); } } resultEntity.setData(StudentExerciseScoreApi.insert(studentExerciseScore)); if (resultEntity.getData() != null) { resultEntity.setState(1); resultEntity.setMessage("答题成功 !"); } else { resultEntity.setMessage("答题失败!"); resultEntity.setState(0); } } else { resultEntity.setMessage("传入参数为空!"); resultEntity.setState(0); } return(resultEntity); }
public ResultEntity viewSomeAnswer(int?chapterId, int?studentId, String type) { ResultEntity resultEntity = new ResultEntity(); if (chapterId != null && studentId != null) { List <ExerciseSet> exerciseSets = new List <ExerciseSet>(); int type1 = 0; int type2 = 0; int type3 = 0; if (type.Equals("preview")) { type1 = 1; type2 = 3; type3 = 2; } else { type1 = 4; type2 = 6; type3 = 5; } List <Exercise> exercises = ExerciseApi.findByChapterIdAndExerciseTypeOrderByExerciseNumber(chapterId, type1); foreach (Exercise exercise in exercises) { if (StudentExerciseScoreApi.existsByExerciseIdAndStudentId(exercise.exerciseId, studentId) == false) { resultEntity.setMessage("学生未答题!"); resultEntity.setState(0); return(resultEntity); } exerciseSets.Add(new ExerciseSet(exercise, ExerciseChoiceApi.findByExerciseIdOrderByExerciceChoiceId(exercise.exerciseId), StudentExerciseScoreApi.findByExerciseIdAndStudentId(exercise.exerciseId, studentId).studentAnswer)); } exercises = ExerciseApi.findByChapterIdAndExerciseTypeOrderByExerciseNumber(chapterId, type3); foreach (Exercise exercise in exercises) { if (StudentExerciseScoreApi.existsByExerciseIdAndStudentId(exercise.exerciseId, studentId) == false) { resultEntity.setMessage("学生未答题!"); resultEntity.setState(0); return(resultEntity); } exerciseSets.Add(new ExerciseSet(exercise, ExerciseChoiceApi.findByExerciseIdOrderByExerciceChoiceId(exercise.exerciseId), StudentExerciseScoreApi.findByExerciseIdAndStudentId(exercise.exerciseId, studentId).studentAnswer)); } exercises = ExerciseApi.findByChapterIdAndExerciseTypeOrderByExerciseNumber(chapterId, type2); foreach (Exercise exercise in exercises) { if (StudentExerciseScoreApi.existsByExerciseIdAndStudentId(exercise.exerciseId, studentId) == false) { resultEntity.setMessage("学生未答题!"); resultEntity.setState(0); return(resultEntity); } exerciseSets.Add(new ExerciseSet(exercise, StudentExerciseScoreApi.findByExerciseIdAndStudentId(exercise.exerciseId, studentId).studentAnswer)); } List <int?> scores = exerciseScore(studentId, chapterId, type); resultEntity.setData(new ExerciseSetsDetails(exerciseSets, scores)); if (resultEntity.getData() != null) { resultEntity.setState(1); resultEntity.setMessage("查看成功!"); } else { resultEntity.setMessage("查看失败!"); resultEntity.setState(0); } } else { resultEntity.setMessage("传入参数为空!"); resultEntity.setState(0); } return(resultEntity); }
public ResultEntity viewExercise(int?chapterId, String type) { ResultEntity resultEntity = new ResultEntity(); if (chapterId != null) { List <ExerciseSet> exerciseSets = new List <ExerciseSet>(); int type1 = 0; int type2 = 0; int type3 = 0; if (type.Equals("preview")) { type1 = 1; type3 = 2; type2 = 3; } else { type1 = 4; type3 = 5; type2 = 6; } List <Exercise> exercises = ExerciseApi.findByChapterIdAndExerciseTypeOrderByExerciseNumber(chapterId, type1); foreach (Exercise exercise in exercises) { exerciseSets.Add(new ExerciseSet(exercise, ExerciseChoiceApi.findByExerciseIdOrderByExerciceChoiceId(exercise.exerciseId))); } exercises = ExerciseApi.findByChapterIdAndExerciseTypeOrderByExerciseNumber(chapterId, type3); foreach (Exercise exercise in exercises) { exerciseSets.Add(new ExerciseSet(exercise, ExerciseChoiceApi.findByExerciseIdOrderByExerciceChoiceId(exercise.exerciseId))); } exercises = ExerciseApi.findByChapterIdAndExerciseTypeOrderByExerciseNumber(chapterId, type2); foreach (Exercise exercise in exercises) { exerciseSets.Add(new ExerciseSet(exercise)); } resultEntity.setData(exerciseSets); if (resultEntity.getData() != null) { if (type.Equals("preview")) { //fragile if (ChapterContentApi.getByID(chapterId).exerciseVisible_1 != null && ChapterContentApi.getByID(chapterId).exerciseVisible_1) { DateTime now = DateTime.Now; if (ChapterContentApi.getByID(chapterId).exerciseDeadline_1 != null && now > ChapterContentApi.getByID(chapterId).exerciseDeadline_1) { resultEntity.setState(4); resultEntity.setMessage("习题已过deadline!"); } else { resultEntity.setState(1); resultEntity.setMessage("查看成功!"); } } else { resultEntity.setState(2); resultEntity.setMessage("习题当前设置为不可见!"); } } else { if (ChapterContentApi.getByID(chapterId).exerciseDeadline_2 != null && ChapterContentApi.getByID(chapterId).exerciseVisible_2) { DateTime now = DateTime.Now; if (ChapterContentApi.getByID(chapterId).exerciseDeadline_2 != null && now > ChapterContentApi.getByID(chapterId).exerciseDeadline_2) { resultEntity.setState(4); resultEntity.setMessage("习题已过deadline!"); } else { resultEntity.setState(1); resultEntity.setMessage("查看成功!"); } } else { resultEntity.setState(2); resultEntity.setMessage("习题当前设置为不可见!"); } } } else { resultEntity.setMessage("无题目!"); resultEntity.setState(3); } } else { resultEntity.setMessage("传入参数为空!"); resultEntity.setState(0); } return(resultEntity); }
public ResultEntity correctAll(List <int?> scores, int?studentId, int?chapterId, String type) { ResultEntity resultEntity = new ResultEntity(); if (studentId != null && chapterId != null && type != null) { int trueType = 0; int type1 = 0; int type2 = 0; if (type.Equals("preview")) { trueType = 3; type1 = 1; type2 = 2; } else { trueType = 6; type1 = 4; type2 = 5; } List <Exercise> exercises = ExerciseApi.findByChapterIdAndExerciseTypeOrderByExerciseNumber(chapterId, trueType); List <int?> exerciseIds = new List <int?>(); foreach (Exercise exercise in exercises) { exerciseIds.Add(exercise.exerciseId); } StudentExerciseScore studentExerciseScore; for (int i = 0; i < scores.Count; i++) { studentExerciseScore = StudentExerciseScoreApi.findByExerciseIdAndStudentId(exerciseIds[i], studentId); studentExerciseScore.exerciseScore = scores[i].ToString(); studentExerciseScore.corrected = 1; StudentExerciseScoreApi.insert(studentExerciseScore); } exercises = ExerciseApi.findByChapterIdAndExerciseTypeOrderByExerciseNumber(chapterId, type1); foreach (Exercise exercise in exercises) { exerciseIds.Add(exercise.exerciseId); } exercises = ExerciseApi.findByChapterIdAndExerciseTypeOrderByExerciseNumber(chapterId, type2); foreach (Exercise exercise in exercises) { exerciseIds.Add(exercise.exerciseId); } int score = 0; foreach (int?exerciseId in exerciseIds) { score += int.Parse(StudentExerciseScoreApi.findByExerciseIdAndStudentId(exerciseId, studentId).exerciseScore); } if (type.Equals("preview")) { StudentChapter studentChapter = StudentChapterApi.findByChapterIDAndStudentID(chapterId, studentId); studentChapter.totalScore_1 = score; studentChapter.scored_1 = 1; StudentChapterApi.insert(studentChapter); } else { StudentChapter studentChapter = StudentChapterApi.findByChapterIDAndStudentID(chapterId, studentId); studentChapter.totalScore_2 = score; studentChapter.scored_2 = 1; StudentChapterApi.insert(studentChapter); } resultEntity.setState(1); resultEntity.setMessage("批改成功 !"); } else { resultEntity.setMessage("传入参数为空!"); resultEntity.setState(0); } return(resultEntity); }
public ResultEntity answerAll(List <String> answers, int?studentId, int?chapterId, String type, String comment, int?rate) { ResultEntity resultEntity = new ResultEntity(); if (answers != null && type != null && chapterId != null && studentId != null) { List <ExerciseSet> exerciseSets = new List <ExerciseSet>(); int type1 = 0; int type2 = 0; int type3 = 0; if (type.Equals("preview")) { type1 = 1; type3 = 2; type2 = 3; } else { type1 = 4; type3 = 5; type2 = 6; } List <int?> exerciseIds = new List <int?>(); List <Exercise> exercises = ExerciseApi.findByChapterIdAndExerciseTypeOrderByExerciseNumber(chapterId, type1); foreach (Exercise exercise in exercises) { exerciseSets.Add(new ExerciseSet(exercise, ExerciseChoiceApi.findByExerciseIdOrderByExerciceChoiceId(exercise.exerciseId))); exerciseIds.Add(exercise.exerciseId); } exercises = ExerciseApi.findByChapterIdAndExerciseTypeOrderByExerciseNumber(chapterId, type3); foreach (Exercise exercise in exercises) { exerciseSets.Add(new ExerciseSet(exercise, ExerciseChoiceApi.findByExerciseIdOrderByExerciceChoiceId(exercise.exerciseId))); exerciseIds.Add(exercise.exerciseId); } exercises = ExerciseApi.findByChapterIdAndExerciseTypeOrderByExerciseNumber(chapterId, type2); foreach (Exercise exercise in exercises) { exerciseSets.Add(new ExerciseSet(exercise)); } for (int i = 0; i < answers.Count; i++) { answerOne(answers[i], exerciseSets[i].getExercise().exerciseId, studentId); } int score = 0; foreach (int?exerciseId in exerciseIds) { score += int.Parse(StudentExerciseScoreApi.findByExerciseIdAndStudentId(exerciseId, studentId).exerciseScore); } StudentChapter studentChapter; if (!StudentChapterApi.existsByChapterIDAndStudentID(chapterId, studentId)) { studentChapter = new StudentChapter(); studentChapter.chapterID = chapterId; studentChapter.studentID = studentId; StudentChapterApi.insert(studentChapter); } if (!type.Equals("preview")) { studentChapter = StudentChapterApi.findByChapterIDAndStudentID(chapterId, studentId); studentChapter.rate = rate; studentChapter.comment = comment; studentChapter.totalScore_2 = score; studentChapter.scored_2 = 0; StudentChapterApi.insert(studentChapter); //LaterImplementation //new NLPUtil().setCommentNLPRate(comment, chapterId, studentId); } else { studentChapter = StudentChapterApi.findByChapterIDAndStudentID(chapterId, studentId); studentChapter.totalScore_1 = score; studentChapter.scored_1 = 0; StudentChapterApi.insert(studentChapter); } resultEntity.setState(1); resultEntity.setMessage("答题成功 !"); } else { resultEntity.setMessage("传入参数有空值!"); resultEntity.setState(0); } return(resultEntity); }