mirror of
https://github.com/alexmickelson/canvasManagement.git
synced 2026-03-25 23:28:33 -06:00
added assignment group support
This commit is contained in:
@@ -150,7 +150,8 @@
|
||||
&& planner.CanvasModules != null
|
||||
&& Assignment.NeedsUpdates(
|
||||
planner.CanvasAssignments,
|
||||
planner.LocalCourse.AssignmentTemplates
|
||||
planner.LocalCourse.AssignmentTemplates,
|
||||
Assignment.GetCanvasAssignmentGroupId(planner.LocalCourse.AssignmentGroups)
|
||||
)
|
||||
)
|
||||
{
|
||||
|
||||
@@ -24,6 +24,8 @@ public static partial class AssignmentSyncronizationExtensions
|
||||
localCourse.AssignmentTemplates
|
||||
);
|
||||
|
||||
var canvasAssignmentGroupId = localAssignment.GetCanvasAssignmentGroupId(localCourse.AssignmentGroups);
|
||||
|
||||
return canvasAssignment != null
|
||||
? await updateAssignmentIfNeeded(
|
||||
localCourse,
|
||||
@@ -31,9 +33,10 @@ public static partial class AssignmentSyncronizationExtensions
|
||||
localAssignment,
|
||||
canvasAssignments,
|
||||
canvas,
|
||||
localHtmlDescription
|
||||
localHtmlDescription,
|
||||
canvasAssignmentGroupId
|
||||
)
|
||||
: await canvas.Assignments.Create(canvasCourseId, localAssignment, localHtmlDescription);
|
||||
: await canvas.Assignments.Create(canvasCourseId, localAssignment, localHtmlDescription, canvasAssignmentGroupId);
|
||||
}
|
||||
|
||||
private static async Task<LocalAssignment> updateAssignmentIfNeeded(
|
||||
@@ -42,12 +45,14 @@ public static partial class AssignmentSyncronizationExtensions
|
||||
LocalAssignment localAssignment,
|
||||
IEnumerable<CanvasAssignment> canvasAssignments,
|
||||
CanvasService canvas,
|
||||
string localHtmlDescription
|
||||
string localHtmlDescription,
|
||||
ulong? canvasAssignmentGroupId
|
||||
)
|
||||
{
|
||||
var assignmentNeedsUpdates = localAssignment.NeedsUpdates(
|
||||
canvasAssignments,
|
||||
localCourse.AssignmentTemplates,
|
||||
canvasAssignmentGroupId,
|
||||
quiet: false
|
||||
);
|
||||
if (assignmentNeedsUpdates)
|
||||
@@ -55,7 +60,8 @@ public static partial class AssignmentSyncronizationExtensions
|
||||
await canvas.Assignments.Update(
|
||||
courseId: canvasCourseId,
|
||||
localAssignment,
|
||||
localHtmlDescription
|
||||
localHtmlDescription,
|
||||
canvasAssignmentGroupId
|
||||
);
|
||||
}
|
||||
return localAssignment;
|
||||
@@ -65,6 +71,7 @@ public static partial class AssignmentSyncronizationExtensions
|
||||
this LocalAssignment localAssignment,
|
||||
IEnumerable<CanvasAssignment> canvasAssignments,
|
||||
IEnumerable<AssignmentTemplate> courseAssignmentTemplates,
|
||||
ulong? canvasAssignmentGroupId,
|
||||
bool quiet = true
|
||||
)
|
||||
{
|
||||
@@ -154,6 +161,9 @@ public static partial class AssignmentSyncronizationExtensions
|
||||
var submissionTypesSame = canvasAssignment.SubmissionTypes.SequenceEqual(
|
||||
localAssignment.SubmissionTypes.Select(t => t.ToString())
|
||||
);
|
||||
var assignmentGroupSame =
|
||||
canvasAssignmentGroupId != null
|
||||
&& canvasAssignmentGroupId == canvasAssignment.AssignmentGroupId;
|
||||
|
||||
if (!quiet)
|
||||
{
|
||||
@@ -210,6 +220,10 @@ public static partial class AssignmentSyncronizationExtensions
|
||||
Console.WriteLine(
|
||||
$"Submission Types different for {localAssignment.Name}, local: {JsonSerializer.Serialize(localAssignment.SubmissionTypes.Select(t => t.ToString()))}, in canvas {JsonSerializer.Serialize(canvasAssignment.SubmissionTypes)}"
|
||||
);
|
||||
if(!assignmentGroupSame)
|
||||
Console.WriteLine(
|
||||
$"Canvas assignment group ids different for {localAssignment.Name}, local: {canvasAssignmentGroupId}, in canvas {canvasAssignment.AssignmentGroupId}"
|
||||
);
|
||||
}
|
||||
|
||||
return !nameSame
|
||||
@@ -217,7 +231,8 @@ public static partial class AssignmentSyncronizationExtensions
|
||||
|| !lockDatesSame
|
||||
|| !descriptionSame
|
||||
|| !pointsSame
|
||||
|| !submissionTypesSame;
|
||||
|| !submissionTypesSame
|
||||
|| !assignmentGroupSame;
|
||||
}
|
||||
|
||||
internal static async Task<LocalCourse> SyncAssignmentsWithCanvas(
|
||||
|
||||
@@ -43,14 +43,14 @@ public static partial class QuizSyncronizationExtensions
|
||||
)
|
||||
{
|
||||
var isCreated = localQuiz.QuizIsCreated(canvasQuizzes);
|
||||
|
||||
var canvasAssignmentGroupId = localQuiz.GetCanvasAssignmentGroupId(localCourse.AssignmentGroups);
|
||||
if (isCreated)
|
||||
{
|
||||
// TODO write update
|
||||
}
|
||||
else
|
||||
{
|
||||
return await canvas.Quizzes.Create(canvasCourseId, localQuiz);
|
||||
return await canvas.Quizzes.Create(canvasCourseId, localQuiz, canvasAssignmentGroupId);
|
||||
}
|
||||
|
||||
return localQuiz;
|
||||
|
||||
@@ -89,4 +89,9 @@ public record LocalAssignment
|
||||
|
||||
return Markdig.Markdown.ToHtml(Description) + "<hr>" + rubricHtml;
|
||||
}
|
||||
|
||||
public ulong? GetCanvasAssignmentGroupId(IEnumerable<LocalAssignmentGroup> assignmentGroups) =>
|
||||
assignmentGroups
|
||||
.FirstOrDefault(g => g.Id == LocalAssignmentGroupId)?
|
||||
.CanvasId;
|
||||
}
|
||||
|
||||
@@ -21,4 +21,8 @@ public record LocalQuiz
|
||||
// If “until_after_last_attempt”, students can only see results after their last attempt. (Only valid if allowed_attempts > 1). Defaults to null.
|
||||
public IEnumerable<LocalQuizQuestion> Questions { get; init; } =
|
||||
Enumerable.Empty<LocalQuizQuestion>();
|
||||
public ulong? GetCanvasAssignmentGroupId(IEnumerable<LocalAssignmentGroup> assignmentGroups) =>
|
||||
assignmentGroups
|
||||
.FirstOrDefault(g => g.Id == LocalAssignmentGroupId)?
|
||||
.CanvasId;
|
||||
}
|
||||
|
||||
@@ -32,7 +32,8 @@ public class CanvasAssignmentService
|
||||
public async Task<LocalAssignment> Create(
|
||||
ulong canvasCourseId,
|
||||
LocalAssignment localAssignment,
|
||||
string htmlDescription
|
||||
string htmlDescription,
|
||||
ulong? canvasAssignmentGroupId
|
||||
)
|
||||
{
|
||||
Console.WriteLine($"creating assignment: {localAssignment.Name}");
|
||||
@@ -45,7 +46,8 @@ public class CanvasAssignmentService
|
||||
description = htmlDescription,
|
||||
due_at = localAssignment.DueAt,
|
||||
lock_at = localAssignment.LockAtDueDate ? localAssignment.DueAt : localAssignment.LockAt,
|
||||
points_possible = localAssignment.PointsPossible
|
||||
points_possible = localAssignment.PointsPossible,
|
||||
assignment_group_id = canvasAssignmentGroupId,
|
||||
};
|
||||
var bodyObj = new { assignment = body };
|
||||
request.AddBody(bodyObj);
|
||||
@@ -60,7 +62,12 @@ public class CanvasAssignmentService
|
||||
return updatedLocalAssignment;
|
||||
}
|
||||
|
||||
public async Task Update(ulong courseId, LocalAssignment localAssignment, string htmlDescription)
|
||||
public async Task Update(
|
||||
ulong courseId,
|
||||
LocalAssignment localAssignment,
|
||||
string htmlDescription,
|
||||
ulong? canvasAssignmentGroupId
|
||||
)
|
||||
{
|
||||
Console.WriteLine($"updating assignment: {localAssignment.Name}");
|
||||
var url = $"courses/{courseId}/assignments/{localAssignment.CanvasId}";
|
||||
@@ -72,7 +79,8 @@ public class CanvasAssignmentService
|
||||
description = htmlDescription,
|
||||
due_at = localAssignment.DueAt,
|
||||
lock_at = localAssignment.LockAtDueDate ? localAssignment.DueAt : localAssignment.LockAt,
|
||||
points_possible = localAssignment.PointsPossible
|
||||
points_possible = localAssignment.PointsPossible,
|
||||
assignment_group_id = canvasAssignmentGroupId,
|
||||
};
|
||||
var bodyObj = new { assignment = body };
|
||||
request.AddBody(bodyObj);
|
||||
|
||||
@@ -36,7 +36,11 @@ public class CanvasQuizService
|
||||
);
|
||||
}
|
||||
|
||||
public async Task<LocalQuiz> Create(ulong canvasCourseId, LocalQuiz localQuiz)
|
||||
public async Task<LocalQuiz> Create(
|
||||
ulong canvasCourseId,
|
||||
LocalQuiz localQuiz,
|
||||
ulong? canvasAssignmentGroupId
|
||||
)
|
||||
{
|
||||
Console.WriteLine($"Creating Quiz {localQuiz.Name}");
|
||||
|
||||
@@ -56,6 +60,7 @@ public class CanvasQuizService
|
||||
cant_go_back = false,
|
||||
due_at = localQuiz.DueAt,
|
||||
lock_at = localQuiz.LockAtDueDate ? localQuiz.DueAt : localQuiz.LockAt,
|
||||
assignment_group_id = canvasAssignmentGroupId,
|
||||
}
|
||||
};
|
||||
var request = new RestRequest(url);
|
||||
|
||||
@@ -131,7 +131,11 @@ GET https://snow.instructure.com/api/v1/courses/872095/assignments/12676639?incl
|
||||
Authorization: Bearer {{$dotenv CANVAS_TOKEN}}
|
||||
|
||||
###
|
||||
GET https://snow.instructure.com/api/v1/courses/871954/assignment_groups
|
||||
GET https://snow.instructure.com/api/v1/courses/871954/assignment_groups/
|
||||
Authorization: Bearer {{$dotenv CANVAS_TOKEN}}
|
||||
|
||||
###
|
||||
GET https://snow.instructure.com/api/v1/courses/871954/assignment_groups/1943132
|
||||
Authorization: Bearer {{$dotenv CANVAS_TOKEN}}
|
||||
###
|
||||
GET https://snow.instructure.com/api/v1/courses/871954
|
||||
|
||||
Reference in New Issue
Block a user