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
|
&& planner.CanvasModules != null
|
||||||
&& Assignment.NeedsUpdates(
|
&& Assignment.NeedsUpdates(
|
||||||
planner.CanvasAssignments,
|
planner.CanvasAssignments,
|
||||||
planner.LocalCourse.AssignmentTemplates
|
planner.LocalCourse.AssignmentTemplates,
|
||||||
|
Assignment.GetCanvasAssignmentGroupId(planner.LocalCourse.AssignmentGroups)
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -24,6 +24,8 @@ public static partial class AssignmentSyncronizationExtensions
|
|||||||
localCourse.AssignmentTemplates
|
localCourse.AssignmentTemplates
|
||||||
);
|
);
|
||||||
|
|
||||||
|
var canvasAssignmentGroupId = localAssignment.GetCanvasAssignmentGroupId(localCourse.AssignmentGroups);
|
||||||
|
|
||||||
return canvasAssignment != null
|
return canvasAssignment != null
|
||||||
? await updateAssignmentIfNeeded(
|
? await updateAssignmentIfNeeded(
|
||||||
localCourse,
|
localCourse,
|
||||||
@@ -31,9 +33,10 @@ public static partial class AssignmentSyncronizationExtensions
|
|||||||
localAssignment,
|
localAssignment,
|
||||||
canvasAssignments,
|
canvasAssignments,
|
||||||
canvas,
|
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(
|
private static async Task<LocalAssignment> updateAssignmentIfNeeded(
|
||||||
@@ -42,12 +45,14 @@ public static partial class AssignmentSyncronizationExtensions
|
|||||||
LocalAssignment localAssignment,
|
LocalAssignment localAssignment,
|
||||||
IEnumerable<CanvasAssignment> canvasAssignments,
|
IEnumerable<CanvasAssignment> canvasAssignments,
|
||||||
CanvasService canvas,
|
CanvasService canvas,
|
||||||
string localHtmlDescription
|
string localHtmlDescription,
|
||||||
|
ulong? canvasAssignmentGroupId
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
var assignmentNeedsUpdates = localAssignment.NeedsUpdates(
|
var assignmentNeedsUpdates = localAssignment.NeedsUpdates(
|
||||||
canvasAssignments,
|
canvasAssignments,
|
||||||
localCourse.AssignmentTemplates,
|
localCourse.AssignmentTemplates,
|
||||||
|
canvasAssignmentGroupId,
|
||||||
quiet: false
|
quiet: false
|
||||||
);
|
);
|
||||||
if (assignmentNeedsUpdates)
|
if (assignmentNeedsUpdates)
|
||||||
@@ -55,7 +60,8 @@ public static partial class AssignmentSyncronizationExtensions
|
|||||||
await canvas.Assignments.Update(
|
await canvas.Assignments.Update(
|
||||||
courseId: canvasCourseId,
|
courseId: canvasCourseId,
|
||||||
localAssignment,
|
localAssignment,
|
||||||
localHtmlDescription
|
localHtmlDescription,
|
||||||
|
canvasAssignmentGroupId
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
return localAssignment;
|
return localAssignment;
|
||||||
@@ -65,6 +71,7 @@ public static partial class AssignmentSyncronizationExtensions
|
|||||||
this LocalAssignment localAssignment,
|
this LocalAssignment localAssignment,
|
||||||
IEnumerable<CanvasAssignment> canvasAssignments,
|
IEnumerable<CanvasAssignment> canvasAssignments,
|
||||||
IEnumerable<AssignmentTemplate> courseAssignmentTemplates,
|
IEnumerable<AssignmentTemplate> courseAssignmentTemplates,
|
||||||
|
ulong? canvasAssignmentGroupId,
|
||||||
bool quiet = true
|
bool quiet = true
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
@@ -154,6 +161,9 @@ public static partial class AssignmentSyncronizationExtensions
|
|||||||
var submissionTypesSame = canvasAssignment.SubmissionTypes.SequenceEqual(
|
var submissionTypesSame = canvasAssignment.SubmissionTypes.SequenceEqual(
|
||||||
localAssignment.SubmissionTypes.Select(t => t.ToString())
|
localAssignment.SubmissionTypes.Select(t => t.ToString())
|
||||||
);
|
);
|
||||||
|
var assignmentGroupSame =
|
||||||
|
canvasAssignmentGroupId != null
|
||||||
|
&& canvasAssignmentGroupId == canvasAssignment.AssignmentGroupId;
|
||||||
|
|
||||||
if (!quiet)
|
if (!quiet)
|
||||||
{
|
{
|
||||||
@@ -210,6 +220,10 @@ public static partial class AssignmentSyncronizationExtensions
|
|||||||
Console.WriteLine(
|
Console.WriteLine(
|
||||||
$"Submission Types different for {localAssignment.Name}, local: {JsonSerializer.Serialize(localAssignment.SubmissionTypes.Select(t => t.ToString()))}, in canvas {JsonSerializer.Serialize(canvasAssignment.SubmissionTypes)}"
|
$"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
|
return !nameSame
|
||||||
@@ -217,7 +231,8 @@ public static partial class AssignmentSyncronizationExtensions
|
|||||||
|| !lockDatesSame
|
|| !lockDatesSame
|
||||||
|| !descriptionSame
|
|| !descriptionSame
|
||||||
|| !pointsSame
|
|| !pointsSame
|
||||||
|| !submissionTypesSame;
|
|| !submissionTypesSame
|
||||||
|
|| !assignmentGroupSame;
|
||||||
}
|
}
|
||||||
|
|
||||||
internal static async Task<LocalCourse> SyncAssignmentsWithCanvas(
|
internal static async Task<LocalCourse> SyncAssignmentsWithCanvas(
|
||||||
|
|||||||
@@ -43,14 +43,14 @@ public static partial class QuizSyncronizationExtensions
|
|||||||
)
|
)
|
||||||
{
|
{
|
||||||
var isCreated = localQuiz.QuizIsCreated(canvasQuizzes);
|
var isCreated = localQuiz.QuizIsCreated(canvasQuizzes);
|
||||||
|
var canvasAssignmentGroupId = localQuiz.GetCanvasAssignmentGroupId(localCourse.AssignmentGroups);
|
||||||
if (isCreated)
|
if (isCreated)
|
||||||
{
|
{
|
||||||
// TODO write update
|
// TODO write update
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
return await canvas.Quizzes.Create(canvasCourseId, localQuiz);
|
return await canvas.Quizzes.Create(canvasCourseId, localQuiz, canvasAssignmentGroupId);
|
||||||
}
|
}
|
||||||
|
|
||||||
return localQuiz;
|
return localQuiz;
|
||||||
|
|||||||
@@ -89,4 +89,9 @@ public record LocalAssignment
|
|||||||
|
|
||||||
return Markdig.Markdown.ToHtml(Description) + "<hr>" + rubricHtml;
|
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.
|
// 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; } =
|
public IEnumerable<LocalQuizQuestion> Questions { get; init; } =
|
||||||
Enumerable.Empty<LocalQuizQuestion>();
|
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(
|
public async Task<LocalAssignment> Create(
|
||||||
ulong canvasCourseId,
|
ulong canvasCourseId,
|
||||||
LocalAssignment localAssignment,
|
LocalAssignment localAssignment,
|
||||||
string htmlDescription
|
string htmlDescription,
|
||||||
|
ulong? canvasAssignmentGroupId
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
Console.WriteLine($"creating assignment: {localAssignment.Name}");
|
Console.WriteLine($"creating assignment: {localAssignment.Name}");
|
||||||
@@ -45,7 +46,8 @@ public class CanvasAssignmentService
|
|||||||
description = htmlDescription,
|
description = htmlDescription,
|
||||||
due_at = localAssignment.DueAt,
|
due_at = localAssignment.DueAt,
|
||||||
lock_at = localAssignment.LockAtDueDate ? localAssignment.DueAt : localAssignment.LockAt,
|
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 };
|
var bodyObj = new { assignment = body };
|
||||||
request.AddBody(bodyObj);
|
request.AddBody(bodyObj);
|
||||||
@@ -60,7 +62,12 @@ public class CanvasAssignmentService
|
|||||||
return updatedLocalAssignment;
|
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}");
|
Console.WriteLine($"updating assignment: {localAssignment.Name}");
|
||||||
var url = $"courses/{courseId}/assignments/{localAssignment.CanvasId}";
|
var url = $"courses/{courseId}/assignments/{localAssignment.CanvasId}";
|
||||||
@@ -72,7 +79,8 @@ public class CanvasAssignmentService
|
|||||||
description = htmlDescription,
|
description = htmlDescription,
|
||||||
due_at = localAssignment.DueAt,
|
due_at = localAssignment.DueAt,
|
||||||
lock_at = localAssignment.LockAtDueDate ? localAssignment.DueAt : localAssignment.LockAt,
|
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 };
|
var bodyObj = new { assignment = body };
|
||||||
request.AddBody(bodyObj);
|
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}");
|
Console.WriteLine($"Creating Quiz {localQuiz.Name}");
|
||||||
|
|
||||||
@@ -56,6 +60,7 @@ public class CanvasQuizService
|
|||||||
cant_go_back = false,
|
cant_go_back = false,
|
||||||
due_at = localQuiz.DueAt,
|
due_at = localQuiz.DueAt,
|
||||||
lock_at = localQuiz.LockAtDueDate ? localQuiz.DueAt : localQuiz.LockAt,
|
lock_at = localQuiz.LockAtDueDate ? localQuiz.DueAt : localQuiz.LockAt,
|
||||||
|
assignment_group_id = canvasAssignmentGroupId,
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
var request = new RestRequest(url);
|
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}}
|
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}}
|
Authorization: Bearer {{$dotenv CANVAS_TOKEN}}
|
||||||
###
|
###
|
||||||
GET https://snow.instructure.com/api/v1/courses/871954
|
GET https://snow.instructure.com/api/v1/courses/871954
|
||||||
|
|||||||
Reference in New Issue
Block a user