diff options
| author | Michael <[email protected]> | 2017-05-31 18:41:36 -0400 |
|---|---|---|
| committer | Michael <[email protected]> | 2017-05-31 18:41:36 -0400 |
| commit | 82c0215b9743c8cc7e90a054b6cff9fb8f6cebe7 (patch) | |
| tree | 6e87b173f9650fc6c5a8e772f70ebe00d22614e8 | |
| parent | 1dcba9a68839ac0eac372030b20d9c0c8f2f8e0e (diff) | |
| download | project-unite-82c0215b9743c8cc7e90a054b6cff9fb8f6cebe7.tar.gz project-unite-82c0215b9743c8cc7e90a054b6cff9fb8f6cebe7.tar.bz2 project-unite-82c0215b9743c8cc7e90a054b6cff9fb8f6cebe7.zip | |
User-submitted quotes.
| -rw-r--r-- | Project-Unite/Controllers/QuotesController.cs | 82 | ||||
| -rw-r--r-- | Project-Unite/Models/IdentityModels.cs | 10 | ||||
| -rw-r--r-- | Project-Unite/Project-Unite.csproj | 3 | ||||
| -rw-r--r-- | Project-Unite/Views/Quotes/Index.cshtml | 67 | ||||
| -rw-r--r-- | Project-Unite/Views/Quotes/ReviewAll.cshtml | 36 |
5 files changed, 198 insertions, 0 deletions
diff --git a/Project-Unite/Controllers/QuotesController.cs b/Project-Unite/Controllers/QuotesController.cs new file mode 100644 index 0000000..cce8f24 --- /dev/null +++ b/Project-Unite/Controllers/QuotesController.cs @@ -0,0 +1,82 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Web; +using System.Web.Mvc; +using Microsoft.AspNet.Identity; +using Project_Unite.Models; + +namespace Project_Unite.Controllers +{ + [Authorize] + public class QuotesController : Controller + { + // GET: Quotes + public ActionResult Index() + { + return View(); + } + + [HttpPost] + [ValidateAntiForgeryToken] + public ActionResult Index(Models.Quote model) + { + if (!ModelState.IsValid) + return View(model); + + var db = new Models.ApplicationDbContext(); + model.Id = (db.Quotes.Count() + 1).ToString(); + model.IsApproved = false; + db.Quotes.Add(model); + db.SaveChanges(); + + var users = db.Users.ToArray(); + foreach (var user in users) + { + try + { + if (user.HighestRole.IsAdmin) + { + NotificationDaemon.NotifyUser(User.Identity.GetUserId(), user.Id, "New quote submitted.", "Please review user-submitted quotes.", Url.Action("ReviewAll")); + } + } + catch { } + } + return View(model); + } + + [RequiresModerator] + public ActionResult ReviewAll() + { + var db = new ApplicationDbContext(); + return View(db.Quotes.Where(x => x.IsApproved == false)); + } + + [RequiresModerator] + public ActionResult Deny(string id) + { + var db = new ApplicationDbContext(); + var quote = db.Quotes.FirstOrDefault(x => x.Id == id); + if (quote == null) + return new HttpStatusCodeResult(404); + if (quote.IsApproved == true) + return new HttpStatusCodeResult(403); + db.Quotes.Remove(quote); + db.SaveChanges(); + return RedirectToAction("ReviewAll"); + + } + + [RequiresModerator] + public ActionResult Approve(string id) + { + var db = new ApplicationDbContext(); + var quote = db.Quotes.FirstOrDefault(x => x.Id == id); + if (quote == null) + return new HttpStatusCodeResult(404); + quote.IsApproved = true; + db.SaveChanges(); + return RedirectToAction("ReviewAll"); + } + } +}
\ No newline at end of file diff --git a/Project-Unite/Models/IdentityModels.cs b/Project-Unite/Models/IdentityModels.cs index 3b534ec..6783e7c 100644 --- a/Project-Unite/Models/IdentityModels.cs +++ b/Project-Unite/Models/IdentityModels.cs @@ -228,10 +228,20 @@ namespace Project_Unite.Models public class Quote { public string Id { get; set; } + + [Required(ErrorMessage ="Your quote must have an author name.", AllowEmptyStrings =false)] + [MaxLength(50, ErrorMessage ="Your author name must not exceed 50 characters.")] public string AuthorId { get; set; } + + [AllowHtml] + [Required(AllowEmptyStrings =false, ErrorMessage ="Trying to submit an empty quote, I see?")] public string Body { get; set; } + public string AuthorAvatar { get; set; } + + [Required(ErrorMessage ="We must know what year this quote was said in.")] public long Year { get; set; } + public bool IsApproved { get; set; } } public class BannedIP diff --git a/Project-Unite/Project-Unite.csproj b/Project-Unite/Project-Unite.csproj index 7ddcc26..9172afa 100644 --- a/Project-Unite/Project-Unite.csproj +++ b/Project-Unite/Project-Unite.csproj @@ -638,6 +638,7 @@ <Compile Include="Controllers\ModeratorController.cs" /> <Compile Include="Controllers\OAuth2Controller.cs" /> <Compile Include="Controllers\ProfilesController.cs" /> + <Compile Include="Controllers\QuotesController.cs" /> <Compile Include="Controllers\SkinsController.cs" /> <Compile Include="Controllers\StatsController.cs" /> <Compile Include="Controllers\WikiControllerController.cs" /> @@ -981,6 +982,8 @@ <Content Include="Views\Contests\Disqualify.cshtml" /> <Content Include="Views\Home\AboutUnite.cshtml" /> <Content Include="Views\Legal\Privacy.cshtml" /> + <Content Include="Views\Quotes\Index.cshtml" /> + <Content Include="Views\Quotes\ReviewAll.cshtml" /> </ItemGroup> <ItemGroup> <Folder Include="App_Data\" /> diff --git a/Project-Unite/Views/Quotes/Index.cshtml b/Project-Unite/Views/Quotes/Index.cshtml new file mode 100644 index 0000000..4bea2d6 --- /dev/null +++ b/Project-Unite/Views/Quotes/Index.cshtml @@ -0,0 +1,67 @@ +@model Project_Unite.Models.Quote +@{ + ViewBag.Title = "Quotes"; +} + +<h2>Quotes</h2> + +<p>Welcome to the ShiftOS Quotes Database! This page allows you to submit a quote to our Discord bot.</p> + +@if (User.Identity.IsModerator()) +{ + <p>Click here to <a href="@Url.Action("ReviewAll")">review all quotes.</a></p> +} + +<h3>Submit a quote</h3> + +@using (Html.BeginForm()) +{ + @Html.AntiForgeryToken() + <div class="panel panel-danger"> + <div class="panel-body"> + @Html.ValidationSummary() + </div> + </div> + + <dl> + <dt>Quote Author</dt> + <dd>@Html.TextBoxFor(Model=>Model.AuthorId, new{@class="form-control"})</dd> + <dt>Quote Author Image URL (requires http:// or https://)</dt> + <dd>@Html.TextBoxFor(Model => Model.AuthorAvatar, new { @class = "form-control" })</dd> + <dt>Year</dt> + <dd>@Html.TextBoxFor(Model=>Model.Year, new { @type = "number", @class = "form-control" })</dd> + <dt>Quote body</dt> + <dd>@Html.TextAreaFor(Model => Model.AuthorId, new { @class = "form-control" })</dd> + </dl> + + <input type="submit" value="Submit!" class="btn btn-primary" /> +} + +<hr/> + +<h3>How to use the quote bot in Discord:</h3> + [email protected](@"To use the quote bot in our Discord server, simply join `#bot`, then type in `!quoteoftheday` and send it as a message and the moderator bot will show you the quote of the day. + +To force a new quote of the day, simply type `!forcequote`. This pulls a random quote from the database, and will keep the quote for 24 hours.") + +<h4>Bot rules</h4> + +<p>Here is a quick reminder of the rules regarding both spam and bot usage inside our Discord server.</p> + +<dl> + <dt>Section 2: Spam</dt> + <dd> + 2A. Rapid-fire of messages whether they be different, similar, long or short, is not permitted, and the bot will shun you if you continue.<br/> + 2B. Disrupting an on-going conversation is not genuinely appreciated. Please move to a different channel, preferrably #off-topic.<br/> + 2C. Emoji and reaction spam is not appreciated.<br/> + 2D. Mention-spamming staff and dev roles is not appreciated.<br/> + </dd> + <dt>Section 4: Bots</dt> + <dd> + 4A. Selfbots must follow the Discord TOS, or we will boot you off the server.<br/> + 4B. Use of bots must be done in #bot.<br/> + 4C. If you want your bot on the server, please contact me.<br/> + 4D. We reserve the right to boot your bot off the server if it breaks any server rules.<br/> + </dd> +</dl>
\ No newline at end of file diff --git a/Project-Unite/Views/Quotes/ReviewAll.cshtml b/Project-Unite/Views/Quotes/ReviewAll.cshtml new file mode 100644 index 0000000..bee7f37 --- /dev/null +++ b/Project-Unite/Views/Quotes/ReviewAll.cshtml @@ -0,0 +1,36 @@ +@model IEnumerable<Project_Unite.Models.Quote> +@{ + ViewBag.Title = "Review quotes"; +} + +<h2>Review Quotes</h2> + +<p>Below is a list of all quotes that need moderator review.</p> + +@if(Model.Count() == 0) +{ + <p><em>No quotes to show!</em></p> +} +else +{ + foreach (var quote in Model) + { + <div class="panel panel-default"> + <div class="panel-body"> + <p><strong> + @if (!String.IsNullOrWhiteSpace(quote.AuthorAvatar)) + { + <img src="@quote.AuthorAvatar" width="24" height="24" style="border-radius:100%" /> + } + @quote.AuthorId </strong></p> + + <p>@Html.Markdown(quote.Body)</p> + + <p><em> - @quote.Year</em></p> + + <a href="@Url.Action("Approve", new { id = quote.Id })" class="btn btn-primary"><span class="glyphicon glyphicon-ok"></span> Approve</a> + <a href="@Url.Action("Deny", new { id = quote.Id })" class="btn btn-danger"><span class="glyphicon glyphicon-ban-circle"></span> Deny & delete</a> + </div> + </div> + } +}
\ No newline at end of file |
