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