mirror of
https://github.com/alexmickelson/canvasManagement.git
synced 2026-03-25 15:18:32 -06:00
added points to quiz editor
This commit is contained in:
@@ -32,8 +32,8 @@
|
||||
}
|
||||
}
|
||||
|
||||
<div class="modal @modalClass" @onclick="Hide">
|
||||
<div class="modal-dialog modal-xl" role="document" @onclick:stopPropagation="true">
|
||||
<div class="modal @modalClass" @onmousedown="Hide">
|
||||
<div class="modal-dialog modal-xl" role="document" @onmousedown:stopPropagation="true">
|
||||
<div class="modal-content">
|
||||
<div class="modal-header">
|
||||
<h4 class="modal-title text-center w-100">@Title</h4>
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
@using Management.Web.Shared.Components
|
||||
|
||||
@inject QuizEditorContext quizContext
|
||||
|
||||
@code {
|
||||
@@ -100,12 +101,18 @@
|
||||
quizContext.SaveQuiz(newQuiz);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
<Modal @ref="modal" OnHide="() => quizContext.Quiz = null" >
|
||||
<Title>
|
||||
@quizContext.Quiz?.Name
|
||||
<div class="row justify-content-between">
|
||||
<div class="col-auto">
|
||||
@quizContext.Quiz?.Name
|
||||
</div>
|
||||
<div class="col-auto me-3">
|
||||
Points: @quizContext.Quiz?.Questions.Sum(q => q.Points)
|
||||
</div>
|
||||
</div>
|
||||
</Title>
|
||||
<Body>
|
||||
@if(quizContext.Quiz != null)
|
||||
|
||||
@@ -15,11 +15,14 @@
|
||||
|
||||
if(answers.Count() == 0)
|
||||
answers = Question.Answers;
|
||||
if (points == 0)
|
||||
points = Question.Points;
|
||||
|
||||
base.OnParametersSet();
|
||||
}
|
||||
private string text { get; set; } = string.Empty;
|
||||
private string questionType { get; set; } = string.Empty;
|
||||
private int points { get; set; }
|
||||
private IEnumerable<LocalQuizQuestionAnswer> answers { get; set; } = Enumerable.Empty<LocalQuizQuestionAnswer>();
|
||||
|
||||
private void handleTypeUpdate(string type)
|
||||
@@ -35,6 +38,18 @@
|
||||
UpdateQuestion(newQuestion);
|
||||
}
|
||||
}
|
||||
private void handlePointsInput(ChangeEventArgs e)
|
||||
{
|
||||
if (quizContext.Quiz != null)
|
||||
{
|
||||
var newPoints = int.Parse(e.Value?.ToString() ?? "0");
|
||||
var newQuestion = Question with
|
||||
{
|
||||
Points = newPoints
|
||||
};
|
||||
UpdateQuestion(newQuestion);
|
||||
}
|
||||
}
|
||||
|
||||
private void addAnswer()
|
||||
{
|
||||
@@ -130,6 +145,23 @@
|
||||
}
|
||||
</div>
|
||||
</div>
|
||||
<div class="mb-3 row">
|
||||
<div class="col-auto">
|
||||
<label
|
||||
for="exampleInputEmail1"
|
||||
class="form-label"
|
||||
>
|
||||
Points
|
||||
</label>
|
||||
<input
|
||||
type="number"
|
||||
class="form-control"
|
||||
id="exampleInputEmail1"
|
||||
@bind="points"
|
||||
@oninput="handlePointsInput"
|
||||
>
|
||||
</div>
|
||||
</div>
|
||||
<div>Answers:</div>
|
||||
|
||||
@if(questionType == QuestionType.MULTIPLE_ANSWERS || questionType == QuestionType.MULTIPLE_CHOICE)
|
||||
|
||||
@@ -79,7 +79,8 @@ public class CoursePlanner
|
||||
public async Task<(
|
||||
IEnumerable<CanvasAssignment> CanvasAssignments,
|
||||
IEnumerable<CanvasModule> CanvasModules,
|
||||
Dictionary<ulong, IEnumerable<CanvasModuleItem>> CanvasModulesItems
|
||||
Dictionary<ulong, IEnumerable<CanvasModuleItem>> CanvasModulesItems,
|
||||
IEnumerable<CanvasQuiz> canvasQuizzes
|
||||
)> LoadCanvasData()
|
||||
{
|
||||
LoadingCanvasData = true;
|
||||
@@ -100,7 +101,7 @@ public class CoursePlanner
|
||||
|
||||
LoadingCanvasData = false;
|
||||
StateHasChanged?.Invoke();
|
||||
return (CanvasAssignments, CanvasModules, CanvasModulesItems);
|
||||
return (CanvasAssignments, CanvasModules, CanvasModulesItems, CanvasQuizzes);
|
||||
}
|
||||
|
||||
public async Task SyncWithCanvas()
|
||||
@@ -118,10 +119,14 @@ public class CoursePlanner
|
||||
LoadingCanvasData = true;
|
||||
StateHasChanged?.Invoke();
|
||||
|
||||
var (canvasAssignments, canvasModules, canvasModuleItems) = await LoadCanvasData();
|
||||
var (canvasAssignments, canvasModules, canvasModuleItems, canvasQuizzes) = await LoadCanvasData();
|
||||
LoadingCanvasData = true;
|
||||
StateHasChanged?.Invoke();
|
||||
LocalCourse = LocalCourse.deleteCanvasIdsThatNoLongerExist(canvasModules, canvasAssignments);
|
||||
LocalCourse = LocalCourse.deleteCanvasIdsThatNoLongerExist(
|
||||
canvasModules,
|
||||
canvasAssignments,
|
||||
canvasQuizzes
|
||||
);
|
||||
|
||||
var canvasId =
|
||||
LocalCourse.CanvasId ?? throw new Exception("no course canvas id to sync with canvas");
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
using CanvasModel.Assignments;
|
||||
using CanvasModel.Modules;
|
||||
using CanvasModel.Quizzes;
|
||||
using LocalModels;
|
||||
|
||||
namespace Management.Planner;
|
||||
@@ -43,13 +44,14 @@ public static class CoursePlannerExtensions
|
||||
public static LocalCourse deleteCanvasIdsThatNoLongerExist(
|
||||
this LocalCourse localCourse,
|
||||
IEnumerable<CanvasModule> canvasModules,
|
||||
IEnumerable<CanvasAssignment> canvasAssignments
|
||||
IEnumerable<CanvasAssignment> canvasAssignments,
|
||||
IEnumerable<CanvasQuiz> canvasQuizzes
|
||||
)
|
||||
{
|
||||
Console.WriteLine("checking canvas ids still exist");
|
||||
|
||||
var correctedModules = localCourse.Modules
|
||||
.Select((m) => m.validateCanvasIds(canvasModules, canvasAssignments))
|
||||
.Select((m) => m.validateCanvasIds(canvasModules, canvasAssignments, canvasQuizzes))
|
||||
.ToArray();
|
||||
|
||||
return localCourse with
|
||||
@@ -61,7 +63,8 @@ public static class CoursePlannerExtensions
|
||||
private static LocalModule validateCanvasIds(
|
||||
this LocalModule module,
|
||||
IEnumerable<CanvasModule> canvasModules,
|
||||
IEnumerable<CanvasAssignment> canvasAssignments
|
||||
IEnumerable<CanvasAssignment> canvasAssignments,
|
||||
IEnumerable<CanvasQuiz> canvasQuizzes
|
||||
)
|
||||
{
|
||||
var moduleIdInCanvas = canvasModules.FirstOrDefault(m => m.Id == module.CanvasId) != null;
|
||||
@@ -69,7 +72,8 @@ public static class CoursePlannerExtensions
|
||||
{
|
||||
Assignments = module.Assignments
|
||||
.Select((a) => a.validateAssignmentForCanvasId(canvasAssignments))
|
||||
.ToArray()
|
||||
.ToArray(),
|
||||
Quizzes = module.Quizzes.Select((s) => s.validateQuizForCanvasId(canvasQuizzes)).ToArray()
|
||||
};
|
||||
|
||||
if (!moduleIdInCanvas)
|
||||
@@ -98,6 +102,22 @@ public static class CoursePlannerExtensions
|
||||
}
|
||||
return assignment;
|
||||
}
|
||||
private static LocalQuiz validateQuizForCanvasId(
|
||||
this LocalQuiz quiz,
|
||||
IEnumerable<CanvasQuiz> canvasQuizzes
|
||||
)
|
||||
{
|
||||
var assignmentIdInCanvas =
|
||||
canvasQuizzes.FirstOrDefault(cq => cq.Id == quiz.CanvasId) != null;
|
||||
if (!assignmentIdInCanvas)
|
||||
{
|
||||
Console.WriteLine(
|
||||
$"no id in canvas for quiz, removing old canvas id: {quiz.Name}"
|
||||
);
|
||||
return quiz with { CanvasId = null };
|
||||
}
|
||||
return quiz;
|
||||
}
|
||||
|
||||
public static LocalAssignment validateSubmissionTypes(this LocalAssignment assignment)
|
||||
{
|
||||
|
||||
@@ -30,7 +30,7 @@ public class CanvasQuizService
|
||||
|
||||
public async Task<LocalQuiz> Create(ulong canvasCourseId, LocalQuiz localQuiz)
|
||||
{
|
||||
Console.WriteLine($"Creating Quiz ${localQuiz.Name}");
|
||||
Console.WriteLine($"Creating Quiz {localQuiz.Name}");
|
||||
|
||||
var url = $"courses/{canvasCourseId}/quizzes";
|
||||
var body = new
|
||||
|
||||
Reference in New Issue
Block a user