diff --git a/Management/Features/Configuration/AssignmentEditorContext.cs b/Management/Features/Configuration/AssignmentEditorContext.cs
index ca8774f..494982f 100644
--- a/Management/Features/Configuration/AssignmentEditorContext.cs
+++ b/Management/Features/Configuration/AssignmentEditorContext.cs
@@ -93,11 +93,13 @@ public class AssignmentEditorContext
logger.Log("cannot update assignment in canvas, could not find canvas assignment with id: " + canvasAssignmentId);
return;
}
+ // Console.WriteLine(JsonSerializer.Serialize(Assignment.LocalAssignmentGroupName));
+ // Console.WriteLine(JsonSerializer.Serialize(planner.LocalCourse.Settings.AssignmentGroups));
+
var canvasAssignmentGroupId = Assignment.GetCanvasAssignmentGroupId(planner.LocalCourse.Settings.AssignmentGroups);
if (canvasAssignmentGroupId == null)
{
-
logger.Log("cannot update assignment in canvas, could not get assignment group id: " + assignmentInCanvas.AssignmentGroupId);
return;
}
diff --git a/Management/Features/Configuration/CoursePlanner.cs b/Management/Features/Configuration/CoursePlanner.cs
index bb3120d..988c0c7 100644
--- a/Management/Features/Configuration/CoursePlanner.cs
+++ b/Management/Features/Configuration/CoursePlanner.cs
@@ -162,5 +162,17 @@ public class CoursePlanner
CanvasAssignmentGroups = await canvas.AssignmentGroups.GetAll(canvasCourseId);
await LocalCourse.EnsureAllAssignmentGroupsExistInCanvas(canvasCourseId, CanvasAssignmentGroups, canvas);
+
+ CanvasAssignmentGroups = await canvas.AssignmentGroups.GetAll(canvasCourseId);
+
+ LocalCourse = LocalCourse with {Settings = LocalCourse.Settings with {
+ AssignmentGroups = LocalCourse.Settings.AssignmentGroups.Select(g => {
+ var canvasGroup = CanvasAssignmentGroups.FirstOrDefault(c => c.Name == g.Name);
+ return canvasGroup == null
+ ? g
+ : g with {CanvasId = canvasGroup.Id};
+ })
+ }
+ };
}
}
diff --git a/Management/Features/Configuration/Synchronization/AssignmentSyncronizationExtensions.cs b/Management/Features/Configuration/Synchronization/AssignmentSyncronizationExtensions.cs
index b943189..f2be490 100644
--- a/Management/Features/Configuration/Synchronization/AssignmentSyncronizationExtensions.cs
+++ b/Management/Features/Configuration/Synchronization/AssignmentSyncronizationExtensions.cs
@@ -1,3 +1,4 @@
+using System.Net.Quic;
using System.Reflection;
using System.Text.RegularExpressions;
using CanvasModel.Assignments;
@@ -5,13 +6,12 @@ using CanvasModel.Modules;
using CanvasModel.Quizzes;
using LocalModels;
using Management.Services.Canvas;
+using Markdig.Renderers.Normalize;
namespace Management.Planner;
public static partial class AssignmentSyncronizationExtensions
{
-
-
internal static async Task SyncAssignmentToCanvas(
this LocalCourse localCourse,
ulong canvasCourseId,
@@ -20,7 +20,6 @@ public static partial class AssignmentSyncronizationExtensions
CanvasService canvas
)
{
-
var canvasAssignment = canvasAssignments.FirstOrDefault(
ca => ca.Name == localAssignment.Name
);
@@ -48,7 +47,6 @@ public static partial class AssignmentSyncronizationExtensions
ulong? canvasAssignmentGroupId
)
{
-
var assignmentNeedsUpdates = localAssignment.NeedsUpdates(
canvasAssignment,
canvasAssignmentGroupId,
@@ -72,35 +70,24 @@ public static partial class AssignmentSyncronizationExtensions
ulong? canvasAssignmentGroupId,
bool quiet = true
)
+ {
+ var reason = localAssignment.GetUpdateReason(canvasAssignment, canvasAssignmentGroupId, quiet);
+ return reason != string.Empty;
+ }
+ public static string GetUpdateReason(
+ this LocalAssignment localAssignment,
+ CanvasAssignment canvasAssignment,
+ ulong? canvasAssignmentGroupId,
+ bool quiet = false
+ )
{
- var localHtmlDescription = localAssignment
- .GetDescriptionHtml()
- .Replace("", "") // self closing tags are hard
- .Replace(" ", " ")
- .Replace(">", "")
- .Replace("<", "")
- .Replace(">", "")
- .Replace("<", "")
- .Replace(""", "")
- .Replace("\"", "")
- .Replace("&", "")
- .Replace("&", "");
+ var localHtmlDescription = removeHtmlDetails(localAssignment.GetDescriptionHtml());
var canvasHtmlDescription = canvasAssignment.Description;
canvasHtmlDescription = CanvasScriptTagRegex().Replace(canvasHtmlDescription, "");
canvasHtmlDescription = CanvasLinkTagRegex().Replace(canvasHtmlDescription, "");
- canvasHtmlDescription = canvasHtmlDescription
- .Replace("", "")
- .Replace(" ", " ")
- .Replace(">", "")
- .Replace("<", "")
- .Replace(">", "")
- .Replace("<", "")
- .Replace(""", "")
- .Replace("\"", "")
- .Replace("&", "")
- .Replace("&", "");
+ canvasHtmlDescription = removeHtmlDetails(canvasHtmlDescription);
var canvasComparisonDueDate =
canvasAssignment.DueAt != null
@@ -162,36 +149,44 @@ public static partial class AssignmentSyncronizationExtensions
canvasAssignmentGroupId != null
&& canvasAssignmentGroupId == canvasAssignment.AssignmentGroupId;
- if (!quiet)
+ var reason = "";
+ if (!dueDatesSame)
{
- if (!dueDatesSame)
+ reason = $"Due dates different for assignment {localAssignment.Name}, local: {localAssignment.DueAt}, in canvas {canvasAssignment.DueAt}";
+ if (!quiet)
{
Console.WriteLine(JsonSerializer.Serialize(canvasAssignment));
Console.WriteLine(canvasComparisonDueDate);
Console.WriteLine(localComparisonDueDate);
- Console.WriteLine(
- $"Due dates different for assignment {localAssignment.Name}, local: {localAssignment.DueAt}, in canvas {canvasAssignment.DueAt}"
- );
+ Console.WriteLine(reason);
Console.WriteLine(JsonSerializer.Serialize(localAssignment.DueAt));
Console.WriteLine(JsonSerializer.Serialize(canvasAssignment.DueAt));
}
+ return reason;
+ }
- if (!lockDatesSame)
+ if (!lockDatesSame)
+ {
+ reason = $"Lock dates different for assignment {localAssignment.Name}, local: {localAssignment.LockAt}, in canvas {canvasAssignment.LockAt}";
+ if (!quiet)
{
Console.WriteLine(JsonSerializer.Serialize(canvasAssignment));
Console.WriteLine(canvasComparisonLockDate);
Console.WriteLine(localComparisonLockDate);
- Console.WriteLine(
- $"Lock dates different for assignment {localAssignment.Name}, local: {localAssignment.LockAt}, in canvas {canvasAssignment.LockAt}"
- );
+ Console.WriteLine(reason);
Console.WriteLine(JsonSerializer.Serialize(localAssignment.LockAt));
Console.WriteLine(JsonSerializer.Serialize(canvasAssignment.LockAt));
}
+ return reason;
+ }
- if (!descriptionSame)
+ if (!descriptionSame)
+ {
+ reason = $"descriptions different for {localAssignment.Name}";
+ if (!quiet)
{
Console.WriteLine();
- Console.WriteLine($"descriptions different for {localAssignment.Name}");
+ Console.WriteLine(reason);
Console.WriteLine();
Console.WriteLine("Local Description:");
@@ -204,34 +199,54 @@ public static partial class AssignmentSyncronizationExtensions
Console.WriteLine(canvasAssignment.Description);
Console.WriteLine();
}
-
- if (!nameSame)
- Console.WriteLine(
- $"names different for {localAssignment.Name}, local: {localAssignment.Name}, in canvas {canvasAssignment.Name}"
- );
- if (!pointsSame)
- Console.WriteLine(
- $"Points different for {localAssignment.Name}, local: {localAssignment.PointsPossible}, in canvas {canvasAssignment.PointsPossible}"
- );
- if (!submissionTypesSame)
- 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 reason;
}
- return !nameSame
- || !dueDatesSame
- || !lockDatesSame
- || !descriptionSame
- || !pointsSame
- || !submissionTypesSame
- || !assignmentGroupSame;
+ if (!nameSame)
+ {
+ reason = $"names different for {localAssignment.Name}, local: {localAssignment.Name}, in canvas {canvasAssignment.Name}";
+ if (!quiet)
+ Console.WriteLine(reason);
+ return reason;
+ }
+ if (!pointsSame)
+ {
+ reason = $"Points different for {localAssignment.Name}, local: {localAssignment.PointsPossible}, in canvas {canvasAssignment.PointsPossible}";
+ if (!quiet)
+ Console.WriteLine(reason);
+ return reason;
+ }
+ if (!submissionTypesSame)
+ {
+ reason = $"Submission Types different for {localAssignment.Name}, local: {JsonSerializer.Serialize(localAssignment.SubmissionTypes.Select(t => t.ToString()))}, in canvas {JsonSerializer.Serialize(canvasAssignment.SubmissionTypes)}";
+ if (!quiet)
+ Console.WriteLine(reason);
+ return reason;
+ }
+ if (!assignmentGroupSame)
+ {
+ reason = $"Canvas assignment group ids different for {localAssignment.Name}, local: {canvasAssignmentGroupId}, in canvas {canvasAssignment.AssignmentGroupId}";
+ if (!quiet)
+ Console.WriteLine(reason);
+ return reason;
+ }
+
+ return reason;
}
+ private static string removeHtmlDetails(string canvasHtmlDescription) => canvasHtmlDescription
+ .Replace("", "")
+ .Replace(" ", " ")
+ .Replace(" ", " ")
+ .Replace("", "")
+ .Replace(">", "")
+ .Replace("<", "")
+ .Replace(">", "")
+ .Replace("<", "")
+ .Replace(""", "")
+ .Replace("\"", "")
+ .Replace("&", "")
+ .Replace("&", "");
[GeneratedRegex("")]
private static partial Regex CanvasScriptTagRegex();
diff --git a/Management/Models/Local/Assignment/LocalAssignment.cs b/Management/Models/Local/Assignment/LocalAssignment.cs
index a17f2ba..b19c4fa 100644
--- a/Management/Models/Local/Assignment/LocalAssignment.cs
+++ b/Management/Models/Local/Assignment/LocalAssignment.cs
@@ -30,7 +30,6 @@ public record LocalAssignment
public string GetRubricHtml()
{
var output = "
Rubric
";
-
var lineStrings = Rubric.Select(
item => $"- {item.Points}pts: {item.Label} "
);
diff --git a/Management/Services/Canvas/CanvasAssignmentService.cs b/Management/Services/Canvas/CanvasAssignmentService.cs
index dda6304..fbc4727 100644
--- a/Management/Services/Canvas/CanvasAssignmentService.cs
+++ b/Management/Services/Canvas/CanvasAssignmentService.cs
@@ -86,6 +86,7 @@ public class CanvasAssignmentService
points_possible = localAssignment.PointsPossible,
assignment_group_id = canvasAssignmentGroupId,
};
+
var bodyObj = new { assignment = body };
request.AddBody(bodyObj);
diff --git a/README.md b/README.md
index 40762c5..20586a1 100644
--- a/README.md
+++ b/README.md
@@ -42,3 +42,23 @@ AssignmentGroupName: Final Project
SubmissionTypes:
---
+
+
+
+Local Description:
+pMake a new C# console program./p
+pAdd functionality to your program to ask the user three different questions and include their responses in a message back to the user. For example, ask the user their name then ask their age then ask their favorite food. Then tell the user Your name is {name}, your age is {age}, and you like to eat {favoriteFood}./p
+pSubmit a copy of your code via canvas./p
+hrh2Rubric/h2- 7pts: code submitted and correctly runs br/
+
+Canvas Description:
+pMake a new C# console program./p
+pAdd functionality to your program to ask the user three different questions and include their responses in a message back to the user. For example, ask the user their name then ask their age then ask their favorite food. Then tell the user Your name is {name}, your age is {age}, and you like to eat {favoriteFood}./p
+pSubmit a copy of your code via canvas./p
+hrh2Rubric/h2- 7pts: code submitted and correctly runs br
+
+Canvas Raw Description:
+
Make a new C# console program.
+
Add functionality to your program to ask the user three different questions and include their responses in a message back to the user. For example, ask the user their name then ask their age then ask their favorite food. Then tell the user "Your name is {name}, your age is {age}, and you like to eat {favoriteFood}".
+
Submit a copy of your code via canvas.
+
Rubric
- 7pts: code submitted and correctly runs
\ No newline at end of file