- @Assignment.description
+ @if(Assignment.use_template)
+ {
+ var template = planner.LocalCourse?.AssignmentTemplates.First((t) => t.Id == Assignment.template_id);
+ if(template == null)
+ {
+ System.Console.WriteLine($"Could not find template fof assignment, {Assignment.template_id}");
+ }
+ else
+ {
+ var html = AssignmentTemplate.GetHtml(template, Assignment);
+ @((MarkupString) html)
+ }
+ }
+ else
+ {
+ @Assignment.description
+ }
diff --git a/Management.Web/Shared/Module/Assignment/AssignmentForm/AssignmentDescriptionEditor.razor b/Management.Web/Shared/Module/Assignment/AssignmentForm/AssignmentDescriptionEditor.razor
index 1ca5b44..80beff6 100644
--- a/Management.Web/Shared/Module/Assignment/AssignmentForm/AssignmentDescriptionEditor.razor
+++ b/Management.Web/Shared/Module/Assignment/AssignmentForm/AssignmentDescriptionEditor.razor
@@ -9,6 +9,8 @@
public bool UseTemplate { get; set; }
[Parameter]
public string? TemplateId { get; set; }
+ [Parameter]
+ public Dictionary
VariableValues { get; set; } = new Dictionary();
[Parameter]
public EventCallback DescriptionChanged { get; set; }
@@ -19,12 +21,14 @@
[Parameter]
public EventCallback TemplateIdChanged { get; set; }
- private string selectedTemplateId { get; set; }
+ [Parameter]
+ public EventCallback> VariableValuesChanged { get; set; }
+
private AssignmentTemplate? selectedTemplate =>
planner
.LocalCourse?
.AssignmentTemplates
- .FirstOrDefault(t => t.Id == selectedTemplateId);
+ .FirstOrDefault(t => t.Id == TemplateId);
}
@@ -55,8 +59,14 @@
}
diff --git a/Management.Web/Shared/Module/Assignment/AssignmentForm/AssignmentForm.razor b/Management.Web/Shared/Module/Assignment/AssignmentForm/AssignmentForm.razor
index 7f8309e..1bc6536 100644
--- a/Management.Web/Shared/Module/Assignment/AssignmentForm/AssignmentForm.razor
+++ b/Management.Web/Shared/Module/Assignment/AssignmentForm/AssignmentForm.razor
@@ -55,6 +55,7 @@
.Where(r => !r.Label.Contains(RubricItem.extraCredit))
.Select(s => s.Points)
.Sum();
+
var newAssignment = Assignment with
{
name=name,
@@ -117,6 +118,7 @@
@bind-Description="description"
@bind-UseTemplate="useTemplate"
@bind-TemplateId="templateId"
+ @bind-VariableValues="templateVariables"
/>
diff --git a/Management.Web/Utils/StorageManagement.cs b/Management.Web/Utils/StorageManagement.cs
deleted file mode 100644
index c1e83a2..0000000
--- a/Management.Web/Utils/StorageManagement.cs
+++ /dev/null
@@ -1,28 +0,0 @@
-using Microsoft.AspNetCore.Components.Server.ProtectedBrowserStorage;
-
-public class BrowserStorageManagement : ICanvasTokenManagement
-{
- // private string moduleStorageKey = "module storage key";
- // private string assignmentStorageKey = "assignment storage key";
- private string canvasKey = "canvas key";
-
- private ProtectedLocalStorage storage { get; }
-
- public BrowserStorageManagement(ProtectedLocalStorage BrowserStorage)
- {
- storage = BrowserStorage;
- }
-
- public async Task
GetCanvasToken()
- {
- var result = await storage.GetAsync(canvasKey);
- if (!result.Success)
- return null;
- return result.Value;
- }
-
- public async Task SaveCanvasToken(string token)
- {
- await storage.SetAsync(canvasKey, token);
- }
-}
diff --git a/Management/Management.csproj b/Management/Management.csproj
index 86f7c20..1d2bbcf 100644
--- a/Management/Management.csproj
+++ b/Management/Management.csproj
@@ -7,6 +7,7 @@
+
diff --git a/Management/Models/Local/AssignmentTemplate.cs b/Management/Models/Local/AssignmentTemplate.cs
index 791e73c..4d214cf 100644
--- a/Management/Models/Local/AssignmentTemplate.cs
+++ b/Management/Models/Local/AssignmentTemplate.cs
@@ -15,4 +15,16 @@ public record AssignmentTemplate
return matches.Select(match => match.Groups[1].Value);
}
+ public static string GetHtml(AssignmentTemplate template, LocalAssignment assignment)
+ {
+
+ var html = Markdig.Markdown.ToHtml(template.Markdown);
+
+ foreach (KeyValuePair entry in assignment.template_variables)
+ {
+ html = html.Replace($"%7B%7B{entry.Key}%7D%7D", entry.Value);
+ }
+ return html;
+ }
+
}
diff --git a/Management/Services/ICanvasTokenManagement.cs b/Management/Services/ICanvasTokenManagement.cs
deleted file mode 100644
index a33e182..0000000
--- a/Management/Services/ICanvasTokenManagement.cs
+++ /dev/null
@@ -1,5 +0,0 @@
-public interface ICanvasTokenManagement
-{
- Task GetCanvasToken();
- Task SaveCanvasToken(string token);
-}
\ No newline at end of file
diff --git a/Management/Services/WebRequestor.cs b/Management/Services/WebRequestor.cs
index eec913b..b29933c 100644
--- a/Management/Services/WebRequestor.cs
+++ b/Management/Services/WebRequestor.cs
@@ -3,46 +3,33 @@ using RestSharp;
public class WebRequestor : IWebRequestor
{
private const string BaseUrl = "https://snow.instructure.com/api/v1/";
- private bool tokenSet = false;
+ private string token;
private RestClient client;
- private ICanvasTokenManagement tokenManagement { get; }
-
- public WebRequestor(ICanvasTokenManagement tokenManagement)
+ public WebRequestor()
{
+ token =
+ Environment.GetEnvironmentVariable("CANVAS_TOKEN")
+ ?? throw new Exception("CANVAS_TOKEN not in environment");
client = new RestClient(BaseUrl);
- this.tokenManagement = tokenManagement;
+ client.AddDefaultHeader("Authorization", $"Bearer {token}");
}
- private async Task EnsureCanvasTokenSet()
- {
- if (tokenSet)
- return;
-
- var newToken = await tokenManagement.GetCanvasToken();
- if(newToken == null)
- throw new Exception("cannot request canvas, no token in storage");
-
- client.AddDefaultHeader("Authorization", $"Bearer {newToken}");
- tokenSet = true;
- }
+
public async Task<(T[]?, RestResponse)> GetManyAsync(RestRequest request)
{
- await EnsureCanvasTokenSet();
var response = await client.ExecuteGetAsync(request);
return (Deserialize(response), response);
}
public async Task<(T?, RestResponse)> GetAsync(RestRequest request)
{
- await EnsureCanvasTokenSet();
var response = await client.ExecuteGetAsync(request);
return (Deserialize(response), response);
}
public async Task PostAsync(RestRequest request)
{
- await EnsureCanvasTokenSet();
var response = await client.ExecutePostAsync(request);
if (!response.IsSuccessful)
{
@@ -56,7 +43,6 @@ public class WebRequestor : IWebRequestor
public async Task<(T?, RestResponse)> PostAsync(RestRequest request)
{
- await EnsureCanvasTokenSet();
var response = await client.ExecutePostAsync(request);
return (Deserialize(response), response);
}