diff --git a/Management.Test/Markdown/AssignmentMarkdownTests.cs b/Management.Test/Markdown/AssignmentMarkdownTests.cs
index ae9649a..11d37e3 100644
--- a/Management.Test/Markdown/AssignmentMarkdownTests.cs
+++ b/Management.Test/Markdown/AssignmentMarkdownTests.cs
@@ -1,11 +1,13 @@
+using LocalModels;
+
public class AssignmentMarkdownTests
{
[Test]
public void TestCanParseAssignmentSettings()
{
- var assignmentMarkdown = @"
+ var assignment = new LocalAssignment()
+ {
-
- ";
+ };
}
}
\ No newline at end of file
diff --git a/Management.Web/Shared/Components/AssignmentForm/AssignmentDescriptionEditor.razor b/Management.Web/Shared/Components/AssignmentForm/AssignmentDescriptionEditor.razor
index 1114ff5..305a8b4 100644
--- a/Management.Web/Shared/Components/AssignmentForm/AssignmentDescriptionEditor.razor
+++ b/Management.Web/Shared/Components/AssignmentForm/AssignmentDescriptionEditor.razor
@@ -44,6 +44,7 @@
private void handleNewDescription(string newDescription)
{
+ description = newDescription;
if (newDescription != string.Empty)
{
descriptionForPreview = newDescription;
@@ -56,6 +57,7 @@
assignmentContext.SaveAssignment(newAssignment);
}
}
+ StateHasChanged();
}
private MarkupString preview { get => (MarkupString)Markdown.ToHtml(descriptionForPreview); }
@@ -76,8 +78,8 @@
-
- @(preview)
+
+ @((MarkupString)Markdown.ToHtml(descriptionForPreview))
}
\ No newline at end of file
diff --git a/Management/Features/Configuration/CoursePlanner.cs b/Management/Features/Configuration/CoursePlanner.cs
index f64b48c..6f524f8 100644
--- a/Management/Features/Configuration/CoursePlanner.cs
+++ b/Management/Features/Configuration/CoursePlanner.cs
@@ -134,12 +134,6 @@ public class CoursePlanner
LoadingCanvasData = true;
StateHasChanged?.Invoke();
- LocalCourse = LocalCourse.deleteCanvasIdsThatNoLongerExist(
- canvasModules,
- canvasAssignments,
- canvasAssignmentGroups,
- canvasQuizzes
- );
var canvasId =
LocalCourse.Settings.CanvasId ?? throw new Exception("no course canvas id to sync with canvas");
@@ -170,7 +164,7 @@ public class CoursePlanner
CanvasModulesItems = await canvas.Modules.GetAllModulesItems(canvasId, CanvasModules);
- await LocalCourse.SyncModuleItemsWithCanvas(canvasId, CanvasModulesItems, canvas);
+ await LocalCourse.SyncModuleItemsWithCanvas(canvasId, CanvasModulesItems, canvas, CanvasAssignments);
CanvasModulesItems = await canvas.Modules.GetAllModulesItems(canvasId, CanvasModules);
LoadingCanvasData = false;
diff --git a/Management/Features/Configuration/CoursePlannerValidationExtensions.cs b/Management/Features/Configuration/CoursePlannerValidationExtensions.cs
index 8b9527d..286dcb7 100644
--- a/Management/Features/Configuration/CoursePlannerValidationExtensions.cs
+++ b/Management/Features/Configuration/CoursePlannerValidationExtensions.cs
@@ -45,83 +45,6 @@ public static class CoursePlannerExtensions
};
}
- public static LocalCourse deleteCanvasIdsThatNoLongerExist(
- this LocalCourse localCourse,
- IEnumerable canvasModules,
- IEnumerable canvasAssignments,
- IEnumerable canvasAssignmentGroups,
- IEnumerable canvasQuizzes
- )
- {
- Console.WriteLine("checking canvas ids still exist");
-
- var correctedModules = localCourse.Modules
- .Select((m) => m.validateCanvasIds(canvasModules, canvasAssignments, canvasQuizzes))
- .ToArray();
-
- var canvasAssignmentGroupIds = canvasAssignmentGroups.Select(g => g.Id).ToArray();
- var correctAssignmentGroups = localCourse.Settings.AssignmentGroups.Select(
- g =>
- {
- var groupCanvasId = g.CanvasId ?? 0;
- return canvasAssignmentGroupIds.Contains(groupCanvasId)
- ? g
- : g with { CanvasId = null };
- }
- ).ToArray();
-
- return localCourse with
- {
- Modules = correctedModules,
- Settings = localCourse.Settings with
- {
- AssignmentGroups = correctAssignmentGroups,
- }
- };
- }
-
- private static LocalModule validateCanvasIds(
- this LocalModule module,
- IEnumerable canvasModules,
- IEnumerable canvasAssignments,
- IEnumerable canvasQuizzes
- )
- {
- var moduleIdInCanvas = canvasModules.FirstOrDefault(m => m.Name == module.Name) != null;
- var moduleWithAssignments = module with
- {
- Assignments = module.Assignments
- .Select((a) => a.validateAssignmentForCanvasId(canvasAssignments))
- .ToArray(),
- };
-
- if (!moduleIdInCanvas)
- {
- Console.WriteLine(
- $"no id in canvas for module, removing old canvas id: {moduleWithAssignments.Name}"
- );
- return moduleWithAssignments;
- }
- return moduleWithAssignments;
- }
-
- private static LocalAssignment validateAssignmentForCanvasId(
- this LocalAssignment assignment,
- IEnumerable canvasAssignments
- )
- {
- var assignmentIdInCanvas =
- canvasAssignments.FirstOrDefault(ca => ca.Id == assignment.CanvasId) != null;
- if (!assignmentIdInCanvas)
- {
- Console.WriteLine(
- $"no id in canvas for assignment, removing old canvas id: {assignment.Name}"
- );
- return assignment with { CanvasId = null };
- }
- return assignment;
- }
-
public static LocalAssignment validateSubmissionTypes(this LocalAssignment assignment)
{
var containsDiscussion =
diff --git a/Management/Features/Configuration/Synchronization/AssignmentSyncronizationExtensions.cs b/Management/Features/Configuration/Synchronization/AssignmentSyncronizationExtensions.cs
index b2b6405..43fb509 100644
--- a/Management/Features/Configuration/Synchronization/AssignmentSyncronizationExtensions.cs
+++ b/Management/Features/Configuration/Synchronization/AssignmentSyncronizationExtensions.cs
@@ -22,7 +22,7 @@ public static partial class AssignmentSyncronizationExtensions
{
var canvasAssignment = canvasAssignments.FirstOrDefault(
- ca => ca.Id == localAssignment.CanvasId
+ ca => ca.Name == localAssignment.Name
);
string localHtmlDescription = localAssignment.GetDescriptionHtml();
@@ -61,7 +61,7 @@ public static partial class AssignmentSyncronizationExtensions
{
await canvas.Assignments.Update(
courseId: canvasCourseId,
- canvasAssignmentId: (ulong) localAssignment.CanvasId,
+ canvasAssignmentId: canvasAssignment.Id,
localAssignment,
localHtmlDescription,
(ulong)canvasAssignmentGroupId
@@ -164,8 +164,8 @@ public static partial class AssignmentSyncronizationExtensions
var submissionTypesSame = canvasAssignment.SubmissionTypes.SequenceEqual(
localAssignment.SubmissionTypes.Select(t => t.ToString())
);
- var assignmentGroupSame =
- canvasAssignmentGroupId != null
+ var assignmentGroupSame =
+ canvasAssignmentGroupId != null
&& canvasAssignmentGroupId == canvasAssignment.AssignmentGroupId;
if (!quiet)
@@ -223,7 +223,7 @@ 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)
+ if (!assignmentGroupSame)
Console.WriteLine(
$"Canvas assignment group ids different for {localAssignment.Name}, local: {canvasAssignmentGroupId}, in canvas {canvasAssignment.AssignmentGroupId}"
);
diff --git a/Management/Features/Configuration/Synchronization/ModuleSyncronizationExtensions.cs b/Management/Features/Configuration/Synchronization/ModuleSyncronizationExtensions.cs
index 48e918c..021ee0a 100644
--- a/Management/Features/Configuration/Synchronization/ModuleSyncronizationExtensions.cs
+++ b/Management/Features/Configuration/Synchronization/ModuleSyncronizationExtensions.cs
@@ -1,3 +1,4 @@
+using CanvasModel.Assignments;
using CanvasModel.Modules;
using LocalModels;
using Management.Services.Canvas;
@@ -95,24 +96,25 @@ public static partial class ModuleSyncronizationExtensions
ulong canvasId,
CanvasModule canvasModule,
Dictionary> canvasModulesItems,
- CanvasService canvas
+ CanvasService canvas,
+ IEnumerable canvasAssignments
)
{
var anyUpdated = false;
foreach (var localAssignment in localModule.Assignments.Where(a => a.DueAt > DateTime.Now))
{
- var canvasModuleItemContentIds = canvasModulesItems[canvasModule].Select(i => i.ContentId);
- if (!canvasModuleItemContentIds.Contains(localAssignment.CanvasId))
+ var canvasModuleItemContentNames = canvasModulesItems[canvasModule].Select(i => i.Title);
+ if (!canvasModuleItemContentNames.Contains(localAssignment.Name))
{
- var canvasAssignmentId =
- localAssignment.CanvasId
- ?? throw new Exception("cannot create module item if assignment does not have canvas id");
+ var canvasAssignment = canvasAssignments.FirstOrDefault(a => a.Name == localAssignment.Name)
+ ?? throw new Exception($"cannot create module item if cannot find canvas assignment with name {localAssignment.Name}");
+
await canvas.CreateModuleItem(
canvasId,
canvasModule.Id,
localAssignment.Name,
"Assignment",
- canvasAssignmentId
+ canvasAssignment.Id
);
anyUpdated = true;
}
@@ -125,23 +127,22 @@ public static partial class ModuleSyncronizationExtensions
this LocalCourse localCourse,
ulong courseCanvasId,
Dictionary> canvasModulesItems,
- CanvasService canvas
+ CanvasService canvas,
+ IEnumerable canvasAssignments
)
{
foreach (var localModule in localCourse.Modules)
{
- // var moduleCanvasId =
- // localModule.CanvasId
- // ?? throw new Exception("cannot sync canvas modules items if module not synced with canvas");
- await localModule.SyncAndSortCanvasModule(courseCanvasId, canvasModulesItems, canvas);
+ await localModule.SyncAndSortCanvasModule(courseCanvasId, canvasModulesItems, canvas, canvasAssignments);
}
}
public static async Task SyncAndSortCanvasModule(
this LocalModule localModule,
- ulong courseCanvasId,
- Dictionary> canvasModulesItems,
- CanvasService canvas
+ ulong courseCanvasId,
+ Dictionary> canvasModulesItems,
+ CanvasService canvas,
+ IEnumerable canvasAssignments
)
{
var canvasModule = canvasModulesItems.Keys.FirstOrDefault(k => k.Name == localModule.Name);
@@ -154,7 +155,8 @@ public static partial class ModuleSyncronizationExtensions
courseCanvasId,
canvasModule,
canvasModulesItems,
- canvas
+ canvas,
+ canvasAssignments
);
var canvasModuleItems = anyUpdated
diff --git a/Management/Models/Local/LocalAssignment.cs b/Management/Models/Local/LocalAssignment.cs
index 7f82270..57e560b 100644
--- a/Management/Models/Local/LocalAssignment.cs
+++ b/Management/Models/Local/LocalAssignment.cs
@@ -42,7 +42,7 @@ public static class SubmissionType
public record LocalAssignment
{
- public ulong? CanvasId { get; init; } = null;
+ // public ulong? CanvasId { get; init; } = null;
public string Name { get; init; } = "";
public string Description { get; init; } = "";
public bool LockAtDueDate { get; init; }