mirror of
https://github.com/alexmickelson/canvasManagement.git
synced 2026-03-25 23:28:33 -06:00
added dropdown suppot for file upload extensions
This commit is contained in:
@@ -132,5 +132,25 @@ public class AssignmentMarkdownTests
|
|||||||
var parsedAssignment = LocalAssignment.ParseMarkdown(assignmentMarkdown);
|
var parsedAssignment = LocalAssignment.ParseMarkdown(assignmentMarkdown);
|
||||||
parsedAssignment.Should().BeEquivalentTo(assignment);
|
parsedAssignment.Should().BeEquivalentTo(assignment);
|
||||||
}
|
}
|
||||||
|
[Fact]
|
||||||
|
public void Assignments_CanRestrictUploadTypes()
|
||||||
|
{
|
||||||
|
var assignment = new LocalAssignment()
|
||||||
|
{
|
||||||
|
Name = "test assignment",
|
||||||
|
Description = "here is the description",
|
||||||
|
DueAt = new DateTime(),
|
||||||
|
LockAt = new DateTime(),
|
||||||
|
SubmissionTypes = [AssignmentSubmissionType.ONLINE_UPLOAD],
|
||||||
|
AllowedFileUploadExtensions = ["pdf", "txt"],
|
||||||
|
LocalAssignmentGroupName = "Final Project",
|
||||||
|
Rubric = new List<RubricItem>() {}
|
||||||
|
};
|
||||||
|
|
||||||
|
var assignmentMarkdown = assignment.ToMarkdown();
|
||||||
|
|
||||||
|
var parsedAssignment = LocalAssignment.ParseMarkdown(assignmentMarkdown);
|
||||||
|
parsedAssignment.Should().BeEquivalentTo(assignment);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -72,6 +72,11 @@ SubmissionTypes:
|
|||||||
- {AssignmentSubmissionType.ONLINE_TEXT_ENTRY}
|
- {AssignmentSubmissionType.ONLINE_TEXT_ENTRY}
|
||||||
- {AssignmentSubmissionType.ONLINE_UPLOAD}
|
- {AssignmentSubmissionType.ONLINE_UPLOAD}
|
||||||
- {AssignmentSubmissionType.DISCUSSION_TOPIC}
|
- {AssignmentSubmissionType.DISCUSSION_TOPIC}
|
||||||
|
AllowedFileUploadExtensions:
|
||||||
|
- pdf
|
||||||
|
- jpg
|
||||||
|
- jpeg
|
||||||
|
- png
|
||||||
|
|
||||||
Assignment Group Names:
|
Assignment Group Names:
|
||||||
- {groupNames}
|
- {groupNames}
|
||||||
|
|||||||
@@ -19,6 +19,7 @@ public sealed record LocalAssignment : IModuleItem
|
|||||||
public DateTime DueAt { get; init; }
|
public DateTime DueAt { get; init; }
|
||||||
public string? LocalAssignmentGroupName { get; init; }
|
public string? LocalAssignmentGroupName { get; init; }
|
||||||
public IEnumerable<string> SubmissionTypes { get; init; } = Array.Empty<string>();
|
public IEnumerable<string> SubmissionTypes { get; init; } = Array.Empty<string>();
|
||||||
|
public IEnumerable<string> AllowedFileUploadExtensions { get; init; } = Array.Empty<string>();
|
||||||
public IEnumerable<RubricItem> Rubric { get; init; } = Array.Empty<RubricItem>();
|
public IEnumerable<RubricItem> Rubric { get; init; } = Array.Empty<RubricItem>();
|
||||||
public double PointsPossible => Rubric.Sum(r => r.IsExtraCredit ? 0 : r.Points);
|
public double PointsPossible => Rubric.Sum(r => r.IsExtraCredit ? 0 : r.Points);
|
||||||
|
|
||||||
|
|||||||
@@ -43,6 +43,11 @@ public static class LocalAssignmentMarkdownCreator
|
|||||||
{
|
{
|
||||||
builder.Append($"- {submissionType}" + "\n");
|
builder.Append($"- {submissionType}" + "\n");
|
||||||
}
|
}
|
||||||
|
builder.Append($"AllowedFileUploadExtensions:" + "\n");
|
||||||
|
foreach (var fileExtension in assignment.AllowedFileUploadExtensions)
|
||||||
|
{
|
||||||
|
builder.Append($"- {fileExtension}" + "\n");
|
||||||
|
}
|
||||||
return builder.ToString();
|
return builder.ToString();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ public static class LocalAssignmentMarkdownParser
|
|||||||
public static LocalAssignment ParseMarkdown(string input)
|
public static LocalAssignment ParseMarkdown(string input)
|
||||||
{
|
{
|
||||||
var settingsString = input.Split("---")[0];
|
var settingsString = input.Split("---")[0];
|
||||||
var (name, localAssignmentGroupName, submissionTypes, dueAt, lockAt) = parseSettings(settingsString);
|
var (name, localAssignmentGroupName, submissionTypes, fileUploadExtensions, dueAt, lockAt) = parseSettings(settingsString);
|
||||||
|
|
||||||
var description = String.Join("---\n", input.Split("---\n")[1..]).Split("## Rubric")[0];
|
var description = String.Join("---\n", input.Split("---\n")[1..]).Split("## Rubric")[0];
|
||||||
|
|
||||||
@@ -20,6 +20,7 @@ public static class LocalAssignmentMarkdownParser
|
|||||||
Name = name.Trim(),
|
Name = name.Trim(),
|
||||||
LocalAssignmentGroupName = localAssignmentGroupName.Trim(),
|
LocalAssignmentGroupName = localAssignmentGroupName.Trim(),
|
||||||
SubmissionTypes = submissionTypes,
|
SubmissionTypes = submissionTypes,
|
||||||
|
AllowedFileUploadExtensions = fileUploadExtensions,
|
||||||
DueAt = dueAt,
|
DueAt = dueAt,
|
||||||
LockAt = lockAt,
|
LockAt = lockAt,
|
||||||
Rubric = rubric,
|
Rubric = rubric,
|
||||||
@@ -27,22 +28,23 @@ public static class LocalAssignmentMarkdownParser
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
private static (string name, string assignmentGroupName, List<string> submissionTypes, DateTime dueAt, DateTime? lockAt) parseSettings(string input)
|
private static (string name, string assignmentGroupName, List<string> submissionTypes, List<string> fileUploadExtensions, DateTime dueAt, DateTime? lockAt) parseSettings(string input)
|
||||||
{
|
{
|
||||||
var name = MarkdownUtils.ExtractLabelValue(input, "Name");
|
var name = MarkdownUtils.ExtractLabelValue(input, "Name");
|
||||||
var rawLockAt = MarkdownUtils.ExtractLabelValue(input, "LockAt");
|
var rawLockAt = MarkdownUtils.ExtractLabelValue(input, "LockAt");
|
||||||
var rawDueAt = MarkdownUtils.ExtractLabelValue(input, "DueAt");
|
var rawDueAt = MarkdownUtils.ExtractLabelValue(input, "DueAt");
|
||||||
var localAssignmentGroupName = MarkdownUtils.ExtractLabelValue(input, "AssignmentGroupName");
|
var localAssignmentGroupName = MarkdownUtils.ExtractLabelValue(input, "AssignmentGroupName");
|
||||||
var submissionTypes = parseSubmissionTypes(input);
|
var submissionTypes = parseSubmissionTypes(input);
|
||||||
|
var fileUploadExtensions = parseFileUploadExtensions(input);
|
||||||
|
|
||||||
DateTime? lockAt = DateTime.TryParse(rawLockAt, out DateTime parsedLockAt)
|
DateTime? lockAt = DateTime.TryParse(rawLockAt, out DateTime parsedLockAt)
|
||||||
? parsedLockAt
|
? parsedLockAt
|
||||||
: null;
|
: null;
|
||||||
var dueAt = DateTime.TryParse(rawDueAt, out DateTime parsedDueAt)
|
var dueAt = DateTime.TryParse(rawDueAt, out DateTime parsedDueAt)
|
||||||
? parsedDueAt
|
? parsedDueAt
|
||||||
: throw new QuizMarkdownParseException($"Error with DueAt: {rawDueAt}");
|
: throw new AssignmentMarkdownParseException($"Error with DueAt: {rawDueAt}");
|
||||||
|
|
||||||
return (name, localAssignmentGroupName, submissionTypes, dueAt, lockAt);
|
return (name, localAssignmentGroupName, submissionTypes, fileUploadExtensions, dueAt, lockAt);
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -76,6 +78,37 @@ public static class LocalAssignmentMarkdownParser
|
|||||||
return submissionTypes;
|
return submissionTypes;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static List<string> parseFileUploadExtensions(string input)
|
||||||
|
{
|
||||||
|
input = input.Replace("\r\n", "\n");
|
||||||
|
List<string> allowedFileUploadExtensions = [];
|
||||||
|
|
||||||
|
// Define a regular expression pattern to match the bulleted list items
|
||||||
|
string startOfTypePattern = @"- (.+)";
|
||||||
|
Regex regex = new(startOfTypePattern);
|
||||||
|
|
||||||
|
var words = input.Split("AllowedFileUploadExtensions:");
|
||||||
|
if(words.Length < 2)
|
||||||
|
return [];
|
||||||
|
var inputAfterSubmissionTypes = words[1];
|
||||||
|
|
||||||
|
string[] lines = inputAfterSubmissionTypes.Split("\n", StringSplitOptions.RemoveEmptyEntries);
|
||||||
|
|
||||||
|
foreach (string line in lines)
|
||||||
|
{
|
||||||
|
string trimmedLine = line.Trim();
|
||||||
|
Match match = regex.Match(trimmedLine);
|
||||||
|
|
||||||
|
if (!match.Success)
|
||||||
|
break;
|
||||||
|
|
||||||
|
string type = match.Groups[1].Value.Trim();
|
||||||
|
allowedFileUploadExtensions.Add(type);
|
||||||
|
}
|
||||||
|
|
||||||
|
return allowedFileUploadExtensions;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
public static IEnumerable<RubricItem> ParseRubricMarkdown(string rawMarkdown)
|
public static IEnumerable<RubricItem> ParseRubricMarkdown(string rawMarkdown)
|
||||||
|
|||||||
Reference in New Issue
Block a user