mirror of
https://github.com/alexmickelson/canvasManagement.git
synced 2026-03-26 23:58:31 -06:00
added some details for editing assignment
This commit is contained in:
@@ -49,6 +49,7 @@
|
|||||||
assignmentContext.Assignment = assignment;
|
assignmentContext.Assignment = assignment;
|
||||||
logger.LogInformation($"set assignment to '{assignmentContext.Assignment?.Name}'");
|
logger.LogInformation($"set assignment to '{assignmentContext.Assignment?.Name}'");
|
||||||
}
|
}
|
||||||
|
await planner.LoadCanvasData();
|
||||||
base.OnInitialized();
|
base.OnInitialized();
|
||||||
StateHasChanged();
|
StateHasChanged();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -144,6 +144,16 @@
|
|||||||
await planner.LoadCanvasData();
|
await planner.LoadCanvasData();
|
||||||
addingAssignmentToCanvas = false;
|
addingAssignmentToCanvas = false;
|
||||||
}
|
}
|
||||||
|
private async Task updateInCanvas()
|
||||||
|
{
|
||||||
|
if(assignmentInCanvas != null)
|
||||||
|
{
|
||||||
|
addingAssignmentToCanvas = true;
|
||||||
|
await assignmentContext.UpdateInCanvas(assignmentInCanvas.Id);
|
||||||
|
await planner.LoadCanvasData();
|
||||||
|
addingAssignmentToCanvas = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private CanvasAssignment? assignmentInCanvas =>
|
private CanvasAssignment? assignmentInCanvas =>
|
||||||
planner.CanvasAssignments?.FirstOrDefault(a => a.Name == assignmentContext.Assignment?.Name);
|
planner.CanvasAssignments?.FirstOrDefault(a => a.Name == assignmentContext.Assignment?.Name);
|
||||||
@@ -153,16 +163,20 @@
|
|||||||
|
|
||||||
private async Task deleteFromCanvas()
|
private async Task deleteFromCanvas()
|
||||||
{
|
{
|
||||||
if (assignmentInCanvas == null || planner.LocalCourse.Settings.CanvasId == null || assignmentContext.Assignment == null)
|
if (assignmentInCanvas == null
|
||||||
|
|| planner.LocalCourse.Settings.CanvasId == null
|
||||||
|
|| assignmentContext.Assignment == null
|
||||||
|
)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
deletingAssignmentFromCanvas = true;
|
deletingAssignmentFromCanvas = true;
|
||||||
await canvas.Assignments.Delete(
|
await canvas.Assignments.Delete(
|
||||||
(ulong)planner.LocalCourse.Settings.CanvasId,
|
(ulong)planner.LocalCourse.Settings.CanvasId,
|
||||||
assignmentInCanvas.Id,
|
assignmentInCanvas.Id,
|
||||||
assignmentContext.Assignment.Name);
|
assignmentContext.Assignment.Name);
|
||||||
await planner.LoadCanvasData();
|
await planner.LoadCanvasData();
|
||||||
StateHasChanged();
|
|
||||||
deletingAssignmentFromCanvas = false;
|
deletingAssignmentFromCanvas = false;
|
||||||
|
StateHasChanged();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -224,6 +238,13 @@
|
|||||||
>
|
>
|
||||||
View in Canvas
|
View in Canvas
|
||||||
</a>
|
</a>
|
||||||
|
<button
|
||||||
|
class="btn btn-outline-secondary mx-3"
|
||||||
|
disabled="@(addingAssignmentToCanvas || deletingAssignmentFromCanvas)"
|
||||||
|
@onclick="updateInCanvas"
|
||||||
|
>
|
||||||
|
Update In Canvas
|
||||||
|
</button>
|
||||||
<ConfirmationModal
|
<ConfirmationModal
|
||||||
Disabled="@(addingAssignmentToCanvas || deletingAssignmentFromCanvas)"
|
Disabled="@(addingAssignmentToCanvas || deletingAssignmentFromCanvas)"
|
||||||
Label="Delete from Canvas"
|
Label="Delete from Canvas"
|
||||||
|
|||||||
@@ -5,10 +5,40 @@
|
|||||||
|
|
||||||
@code
|
@code
|
||||||
{
|
{
|
||||||
private IEnumerable<RubricItem> rubric { get; set; } = Array.Empty<RubricItem>();
|
private IEnumerable<RubricItem> displayRubric { get; set; } = new RubricItem[] {};
|
||||||
private string rubricText = "";
|
private string _rubricText = "";
|
||||||
|
private string rubricText
|
||||||
|
{
|
||||||
|
get => _rubricText;
|
||||||
|
set
|
||||||
|
{
|
||||||
|
_rubricText = value;
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
var parsedRubric = LocalAssignment.ParseRubricMarkdown(value);
|
||||||
|
displayRubric = parsedRubric;
|
||||||
|
error = null;
|
||||||
|
if (assignmentContext.Assignment != null)
|
||||||
|
{
|
||||||
|
var newAssignment = assignmentContext.Assignment with
|
||||||
|
{
|
||||||
|
Rubric = parsedRubric,
|
||||||
|
};
|
||||||
|
assignmentContext.SaveAssignment(newAssignment);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (RubricMarkdownParseException parseError)
|
||||||
|
{
|
||||||
|
error = parseError.Message;
|
||||||
|
}
|
||||||
|
|
||||||
|
StateHasChanged();
|
||||||
|
}
|
||||||
|
}
|
||||||
private int rubricReloadKey = 0;
|
private int rubricReloadKey = 0;
|
||||||
|
|
||||||
|
private string? error { get; set; } = null;
|
||||||
|
|
||||||
protected override void OnInitialized()
|
protected override void OnInitialized()
|
||||||
{
|
{
|
||||||
@@ -19,55 +49,28 @@
|
|||||||
{
|
{
|
||||||
if (assignmentContext.Assignment != null)
|
if (assignmentContext.Assignment != null)
|
||||||
{
|
{
|
||||||
rubric = assignmentContext.Assignment.Rubric;
|
if(rubricText == string.Empty)
|
||||||
|
{
|
||||||
|
rubricText = assignmentContext.Assignment.RubricToMarkdown();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
this.InvokeAsync(this.StateHasChanged);
|
this.InvokeAsync(this.StateHasChanged);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Dispose()
|
public void Dispose()
|
||||||
{
|
{
|
||||||
assignmentContext.StateHasChanged -= reload;
|
assignmentContext.StateHasChanged -= reload;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void save()
|
private int requiredPoints => displayRubric.Where(r => !r.IsExtraCredit).Select(r => r.Points).Sum();
|
||||||
{
|
private int extraCreditPoints => displayRubric.Where(r => r.IsExtraCredit).Select(r => r.Points).Sum();
|
||||||
if (assignmentContext.Assignment != null)
|
|
||||||
{
|
|
||||||
var newAssignment = assignmentContext.Assignment with
|
|
||||||
{
|
|
||||||
Rubric = rubric,
|
|
||||||
};
|
|
||||||
assignmentContext.SaveAssignment(newAssignment);
|
|
||||||
StateHasChanged();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void handleNewRubricText()
|
|
||||||
{
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
private int requiredPoints => rubric.Where(r => !r.IsExtraCredit).Select(r => r.Points).Sum();
|
|
||||||
private int extraCreditPoints => rubric.Where(r => r.IsExtraCredit).Select(r => r.Points).Sum();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
<br>
|
<br>
|
||||||
<div class="row">
|
<div class="row">
|
||||||
|
|
||||||
<div class="col offset-3">
|
|
||||||
<h4 class="text-center">Rubric</h4>
|
<h4 class="text-center">Rubric</h4>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="row">
|
|
||||||
<div class="col">
|
|
||||||
<label for="description" class="form-label">
|
|
||||||
Rubric
|
|
||||||
</label>
|
|
||||||
</div>
|
|
||||||
<div class="col">
|
|
||||||
HTML Preview
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-6">
|
<div class="col-6">
|
||||||
<textarea
|
<textarea
|
||||||
@@ -75,22 +78,37 @@
|
|||||||
class="form-control h-100"
|
class="form-control h-100"
|
||||||
rows=12
|
rows=12
|
||||||
@bind="rubricText"
|
@bind="rubricText"
|
||||||
@oninput="handleNewRubricText"
|
@bind:event="oninput"
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-6">
|
<div class="col-6">
|
||||||
preview here
|
@if (error != null)
|
||||||
</div>
|
{
|
||||||
</div>
|
<p class="text-danger text-truncate">Error: @error</p>
|
||||||
|
}
|
||||||
|
|
||||||
|
<div class="row border-bottom">
|
||||||
<div class="row">
|
<div class="col-6 text-end">Label</div>
|
||||||
<div class="col">
|
<div class="col-3 text-center">Points</div>
|
||||||
|
<div class="col-3 text-center">Extra Credit</div>
|
||||||
|
</div>
|
||||||
|
@foreach(var item in displayRubric)
|
||||||
|
{
|
||||||
|
<div class="row border-bottom">
|
||||||
|
<div class="col-6 text-end">@item.Label</div>
|
||||||
|
<div class="col-3 text-center">@item.Points</div>
|
||||||
|
<div class="col-3 text-center">@item.IsExtraCredit</div>
|
||||||
|
</div>
|
||||||
|
}
|
||||||
|
<div class="text-end">
|
||||||
<div>
|
<div>
|
||||||
Requred Points: @requiredPoints
|
Required Points: @requiredPoints
|
||||||
</div>
|
</div>
|
||||||
<div>
|
<div>
|
||||||
Extra Credit Points @extraCreditPoints
|
Extra Credit Points @extraCreditPoints
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -39,10 +39,7 @@ public class AssignmentEditorContext
|
|||||||
if (planner.LocalCourse != null)
|
if (planner.LocalCourse != null)
|
||||||
{
|
{
|
||||||
// run discovery on Assignment, it was the last stored version of the assignment
|
// run discovery on Assignment, it was the last stored version of the assignment
|
||||||
var currentModule =
|
var currentModule = getCurrentModule(Assignment, planner.LocalCourse);
|
||||||
planner.LocalCourse.Modules.First(
|
|
||||||
m => m.Assignments.Contains(Assignment)
|
|
||||||
) ?? throw new Exception("could not find current module in assignment editor context");
|
|
||||||
|
|
||||||
var updatedModules = planner.LocalCourse.Modules
|
var updatedModules = planner.LocalCourse.Modules
|
||||||
.Select(
|
.Select(
|
||||||
@@ -63,6 +60,56 @@ public class AssignmentEditorContext
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public async Task UpdateInCanvas(ulong canvasAssignmentId)
|
||||||
|
{
|
||||||
|
logger.Log("started to update assignment in canvas");
|
||||||
|
if (Assignment == null)
|
||||||
|
{
|
||||||
|
logger.Log("cannot update null assignment in canvas");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
await planner.LoadCanvasData();
|
||||||
|
if (planner.CanvasAssignments == null)
|
||||||
|
{
|
||||||
|
logger.Log("cannot update assignment in canvas, failed to retrieve current assignments");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (planner.LocalCourse == null)
|
||||||
|
{
|
||||||
|
logger.Log("cannot update assignment in canvas, no course stored in planner");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (planner.LocalCourse.Settings.CanvasId == null)
|
||||||
|
{
|
||||||
|
logger.Log("Cannot update assignment with null local course canvas id");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
var assignmentInCanvas = planner.CanvasAssignments?.FirstOrDefault(a => a.Id == canvasAssignmentId);
|
||||||
|
if (assignmentInCanvas == null)
|
||||||
|
{
|
||||||
|
logger.Log("cannot update assignment in canvas, could not find canvas assignment with id: " + canvasAssignmentId);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
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;
|
||||||
|
}
|
||||||
|
|
||||||
|
await canvas.Assignments.Update(
|
||||||
|
courseId: (ulong)planner.LocalCourse.Settings.CanvasId,
|
||||||
|
canvasAssignmentId: canvasAssignmentId,
|
||||||
|
localAssignment: Assignment,
|
||||||
|
htmlDescription: Assignment.GetDescriptionHtml(),
|
||||||
|
canvasAssignmentGroupId: (ulong)canvasAssignmentGroupId
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
public async Task AddAssignmentToCanvas()
|
public async Task AddAssignmentToCanvas()
|
||||||
{
|
{
|
||||||
logger.Log("started to add assignment to canvas");
|
logger.Log("started to add assignment to canvas");
|
||||||
@@ -120,13 +167,12 @@ public class AssignmentEditorContext
|
|||||||
canvas
|
canvas
|
||||||
);
|
);
|
||||||
logger.Log($"finished adding assignment {Assignment.Name} to canvas");
|
logger.Log($"finished adding assignment {Assignment.Name} to canvas");
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private static LocalModule getCurrentModule(LocalAssignment assignment, LocalCourse course)
|
private static LocalModule getCurrentModule(LocalAssignment assignment, LocalCourse course)
|
||||||
{
|
{
|
||||||
return course.Modules.FirstOrDefault(
|
return course.Modules.FirstOrDefault(
|
||||||
m => m.Assignments.Contains(assignment)
|
m => m.Assignments.Select(a => a.Name).Contains(assignment.Name)
|
||||||
)
|
)
|
||||||
?? throw new Exception("could not find current module in assignment editor context");
|
?? throw new Exception("could not find current module in assignment editor context");
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -64,9 +64,10 @@ public static partial class AssignmentSyncronizationExtensions
|
|||||||
{
|
{
|
||||||
await canvas.Assignments.Update(
|
await canvas.Assignments.Update(
|
||||||
courseId: canvasCourseId,
|
courseId: canvasCourseId,
|
||||||
|
canvasAssignmentId: (ulong) localAssignment.CanvasId,
|
||||||
localAssignment,
|
localAssignment,
|
||||||
localHtmlDescription,
|
localHtmlDescription,
|
||||||
canvasAssignmentGroupId
|
(ulong)canvasAssignmentGroupId
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
return canvasAssignment.Id;
|
return canvasAssignment.Id;
|
||||||
|
|||||||
@@ -69,19 +69,20 @@ public class CanvasAssignmentService
|
|||||||
|
|
||||||
public async Task Update(
|
public async Task Update(
|
||||||
ulong courseId,
|
ulong courseId,
|
||||||
|
ulong canvasAssignmentId,
|
||||||
LocalAssignment localAssignment,
|
LocalAssignment localAssignment,
|
||||||
string htmlDescription,
|
string htmlDescription,
|
||||||
ulong? canvasAssignmentGroupId
|
ulong canvasAssignmentGroupId
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
log.Log($"updating assignment: {localAssignment.Name}");
|
log.Log($"updating assignment: {localAssignment.Name}");
|
||||||
var url = $"courses/{courseId}/assignments/{localAssignment.CanvasId}";
|
var url = $"courses/{courseId}/assignments/{canvasAssignmentId}";
|
||||||
var request = new RestRequest(url);
|
var request = new RestRequest(url);
|
||||||
var body = new
|
var body = new
|
||||||
{
|
{
|
||||||
name = localAssignment.Name,
|
name = localAssignment.Name,
|
||||||
submission_types = localAssignment.SubmissionTypes.Select(t => t.ToString()),
|
submission_types = localAssignment.SubmissionTypes.Select(t => t.ToString()),
|
||||||
description = htmlDescription,
|
description = localAssignment.GetDescriptionHtml(),
|
||||||
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,
|
||||||
@@ -92,7 +93,7 @@ public class CanvasAssignmentService
|
|||||||
|
|
||||||
await webRequestor.PutAsync(request);
|
await webRequestor.PutAsync(request);
|
||||||
|
|
||||||
await CreateRubric(courseId, (ulong)localAssignment.CanvasId, localAssignment);
|
await CreateRubric(courseId, canvasAssignmentId, localAssignment);
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task Delete(ulong courseId, ulong assignmentCanvasId, string assignmentName)
|
public async Task Delete(ulong courseId, ulong assignmentCanvasId, string assignmentName)
|
||||||
|
|||||||
Reference in New Issue
Block a user