summaryrefslogtreecommitdiff
path: root/Project-Unite
diff options
context:
space:
mode:
Diffstat (limited to 'Project-Unite')
-rw-r--r--Project-Unite/Controllers/ContestsController.cs35
-rw-r--r--Project-Unite/Models/ContestModels.cs8
-rw-r--r--Project-Unite/Project-Unite.csproj1
-rw-r--r--Project-Unite/Views/Contests/Disqualify.cshtml30
4 files changed, 74 insertions, 0 deletions
diff --git a/Project-Unite/Controllers/ContestsController.cs b/Project-Unite/Controllers/ContestsController.cs
index fd0c39f..a99b342 100644
--- a/Project-Unite/Controllers/ContestsController.cs
+++ b/Project-Unite/Controllers/ContestsController.cs
@@ -121,6 +121,41 @@ namespace Project_Unite.Controllers
}
+ [RequiresAdmin]
+ public ActionResult Disqualify(string id)
+ {
+ var db = new ApplicationDbContext();
+ var c = db.ContestEntries.FirstOrDefault(x => x.Id == id);
+ if (c == null)
+ return new HttpStatusCodeResult(404);
+ var model = new DisqualifySubmissionViewModel();
+ model.Entry = id;
+ return View(model);
+ }
+
+ [RequiresAdmin]
+ [HttpPost]
+ [ValidateAntiForgeryToken]
+ public ActionResult Disqualify(DisqualifySubmissionViewModel model)
+ {
+ if (!ModelState.IsValid)
+ return View(model);
+ var db = new ApplicationDbContext();
+ var e = db.ContestEntries.FirstOrDefault(x => x.Id == model.Entry);
+ if (e == null)
+ return new HttpStatusCodeResult(404);
+ e.Disqualified = true;
+ e.DisqualifiedBy = User.Identity.GetUserId();
+ e.DisqualifiedReason = model.Reason;
+ db.SaveChanges();
+
+ NotificationDaemon.NotifyUser(User.Identity.GetUserId(), e.AuthorId, "Submission disqualified.", $@"We have disqualified your contest submission ""{e.Name}"".
+
+<strong>Reason:</strong> {e.DisqualifiedReason}");
+
+ return RedirectToAction("ViewSubmission", new { id = model.Entry });
+ }
+
public ActionResult RemoveVote(string id)
{
string uid = User.Identity.GetUserId();
diff --git a/Project-Unite/Models/ContestModels.cs b/Project-Unite/Models/ContestModels.cs
index ef2cf85..9316d14 100644
--- a/Project-Unite/Models/ContestModels.cs
+++ b/Project-Unite/Models/ContestModels.cs
@@ -65,6 +65,14 @@ namespace Project_Unite.Models
}
+ public class DisqualifySubmissionViewModel
+ {
+ public string Entry { get; set; }
+
+ [Required(AllowEmptyStrings =false, ErrorMessage ="You must provide a reason.")]
+ public string Reason { get; set; }
+ }
+
public class ContestEntry
{
public string Id { get; set; }
diff --git a/Project-Unite/Project-Unite.csproj b/Project-Unite/Project-Unite.csproj
index c8e3dd6..d2c2ee8 100644
--- a/Project-Unite/Project-Unite.csproj
+++ b/Project-Unite/Project-Unite.csproj
@@ -974,6 +974,7 @@
<Content Include="Views\Contests\CreateContest.cshtml" />
<Content Include="Views\Contests\SubmitEntry.cshtml" />
<Content Include="Views\Contests\ViewSubmission.cshtml" />
+ <Content Include="Views\Contests\Disqualify.cshtml" />
</ItemGroup>
<ItemGroup>
<Folder Include="App_Data\" />
diff --git a/Project-Unite/Views/Contests/Disqualify.cshtml b/Project-Unite/Views/Contests/Disqualify.cshtml
new file mode 100644
index 0000000..f59a126
--- /dev/null
+++ b/Project-Unite/Views/Contests/Disqualify.cshtml
@@ -0,0 +1,30 @@
+@model Project_Unite.Models.DisqualifySubmissionViewModel
+@{
+ ViewBag.Title = "Disqualify contest submission";
+}
+
+<h2>Disqualify contest submission</h2>
+
+<p>Are you sure you want to disqualify this entry?</p>
+
+<div class="panel panel-warning">
+ <div class="panel-body">
+ <p><strong>Warning!</strong><br/>You cannot reverse this. Once the entry is disqualified, there's no re-qualifying it.</p>
+ </div>
+</div>
+
+@using (Html.BeginForm())
+{
+ @Html.ValidationSummary()
+ @Html.AntiForgeryToken()
+ @Html.HiddenFor(Model=>Model.Entry)
+
+ <dl>
+ <dt>Disqualification reason:</dt>
+ <dd>Why did you disqualify this submission? @Html.TextBoxFor(Model=>Model.Reason, new { @class = "form-control" })</dd>
+ </dl>
+
+ <hr/>
+ <input type="submit" value="Disqualify" class="btn btn-default" />
+ <a href="#" onclick="window.history.back()" class="btn btn-default">Go back</a>
+} \ No newline at end of file