CreateAnnouncement, pinned announcements before regular

This commit is contained in:
Dimitar Byalkov
2023-05-14 00:07:50 +02:00
parent ee0b063eec
commit 765fa8774d
7 changed files with 96 additions and 22 deletions

View File

@@ -13,6 +13,10 @@ namespace Models
IsSticky = isSticky; IsSticky = isSticky;
} }
public Announcement()
{
}
public List<Comment> Comments public List<Comment> Comments
{ {
get;set; get;set;

View File

@@ -20,7 +20,10 @@ namespace Models
Title = title; Title = title;
PublishDate = publishDate; PublishDate = publishDate;
} }
protected GenericMessage()
{
}
public int ID public int ID
{ {
get; private set; get; private set;

View File

@@ -1,6 +1,7 @@
@page @page
@using Models; @using Models;
@using System.Globalization @using System.Globalization
@using System.Security.Claims;
@model WebApp.Pages.AnnouncementModel @model WebApp.Pages.AnnouncementModel
@{ @{
Announcement announcement = (Announcement)ViewData["announcement"]; Announcement announcement = (Announcement)ViewData["announcement"];
@@ -14,6 +15,13 @@
: "") : "")
@(announcement.IsImportant ? "Important" : "") @(announcement.IsSticky ? "Sticky" : "") @(announcement.IsImportant ? "Important" : "") @(announcement.IsSticky ? "Sticky" : "")
</p> </p>
<p>
@if (User.FindFirst(ClaimTypes.Role).Value == "ADMIN" || User.Identity.Name == announcement.Author.Name)
{
<a href="./EditAnnouncement?id=@announcement.ID" class="btn btn-outline-warning">Edit</a>
<a href="./DeleteAnnouncement?id=@announcement.ID" class="btn btn-outline-danger">Delete</a>
}
</p>
<hr/> <hr/>
<p>@Html.Raw(announcement.Description.Replace(Environment.NewLine, "<br />"))</p> <p>@Html.Raw(announcement.Description.Replace(Environment.NewLine, "<br />"))</p>
<br/> <br/>

View File

@@ -4,29 +4,25 @@
@model WebApp.Pages.AnnouncementsModel @model WebApp.Pages.AnnouncementsModel
@{ @{
ViewData["Title"] = "Announcements"; ViewData["Title"] = "Announcements";
List<Announcement> announcements = (List<Announcement>)ViewData["announcements"]; List<Announcement> announcements = ((List<Announcement>)ViewData["announcements"]).OrderByDescending(x => x.PublishDate).OrderByDescending(x => x.IsSticky).ToList();
int currentPage = @Convert.ToInt32(ViewData["page"]); int currentPage = @Convert.ToInt32(ViewData["page"]);
} }
<a href="./CreateAnnouncement" class="btn btn-primary">Create new announcement</a>
<div class="mb-3 mt-3">
@foreach (Announcement announcement in announcements) @foreach (Announcement announcement in announcements)
{ {
<div class="card" style="display:inline-block; width: 18rem;"> <div class="card" style="display:inline-flex; width: 18rem;">
<div class="card-body"> <div class="card-body">
<h5 class="card-title">@announcement.Title</h5> <h5 class="card-title">@announcement.Title</h5>
<h6 class="card-subtitle mb-2 text-muted">@announcement.Author.Name</h6> <h6 class="card-subtitle mb-2 text-muted">@announcement.Author.Name</h6>
<p class="card-text">@announcement.Description.PadRight(100).Trim()</p> <p class="card-text">@announcement.Description.PadRight(100).Trim()</p>
<a href="./Announcement?id=@announcement.ID" class="btn btn-primary">More details</a> <a href="./Announcement?id=@announcement.ID" class="btn btn-primary">More details</a>
@if (User.FindFirst(ClaimTypes.Role).Value == "ADMIN") </div>
{
@: <a href="./Announcement?id=@announcement.ID" class="btn btn-outline-danger btn-sm">Delete</a>
}
</div> </div>
</div> }
} </div>
<br />
<nav aria-label="Page navigation"> <nav aria-label="Page navigation">
<ul class="pagination justify-content-center"> <ul class="pagination justify-content-center">

View File

@@ -0,0 +1,30 @@
@page
@model WebApp.Pages.CreateAnnouncementModel
@{
ViewData["Title"] = "Create announcement";
}
<h1>@ViewData["Title"]</h1>
<form method="post">
<div class="mb-3">
<label asp-for="Announcement.Title" class="form-label">Title: </label>
<input asp-for="Announcement.Title" class="form-control" />
</div>
@if (HttpContext.User.IsInRole("ADMIN") || HttpContext.User.IsInRole("MANAGER"))
{
<div class="mb-3">
<label asp-for="Announcement.IsImportant" class="form-label">Important: </label>
@Html.CheckBoxFor(model => model.Announcement.IsImportant)
</div>
<div class="mb-3">
<label asp-for="Announcement.IsSticky" class="form-label">Pinned: </label>
@Html.CheckBoxFor(model => model.Announcement.IsSticky)
</div>
}
<div class="mb-3">
<label asp-for="Announcement.Description" class="form-label">Description: </label>
<textarea asp-for="Announcement.Description" class="form-control" rows="5"></textarea>
</div>
<input type="submit" value="Create" class="btn btn-primary" />
</form>

View File

@@ -0,0 +1,25 @@
using Logic;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.RazorPages;
using Models;
using System.Security.Claims;
namespace WebApp.Pages
{
public class CreateAnnouncementModel : PageModel
{
[BindProperty]
public Announcement Announcement { get; set; }
public void OnGet()
{
}
public void OnPost()
{
AnnouncementManager announcementManager = new AnnouncementManager();
UserManager userManager = new UserManager();
User user = userManager.GetUserById(int.Parse(User.FindFirstValue("id")));
announcementManager.CreateAnnouncement(Announcement.Title, Announcement.Description, user, DateTime.Now, Announcement.IsImportant, Announcement.IsSticky);
RedirectToPage("Announcements");
}
}
}

View File

@@ -36,7 +36,15 @@
<li class="nav-item"> <li class="nav-item">
<a class="nav-link text-dark" asp-area="" asp-page="/Announcements">Announcements</a> <a class="nav-link text-dark" asp-area="" asp-page="/Announcements">Announcements</a>
</li> </li>
if (User.IsInRole("ADMIN") || User.IsInRole("MANAGER")) }
</ul>
@if (User.Identity.IsAuthenticated)
{
<ul class="navbar-nav">
<li class="nav-item">
<a class="nav-link text-dark">Logged in as @User.Identity.Name</a>
</li>
@if (User.IsInRole("ADMIN") || User.IsInRole("MANAGER"))
{ {
<li class="nav-item"> <li class="nav-item">
<a class="nav-link text-dark" asp-area="" asp-page="/Register">Create user</a> <a class="nav-link text-dark" asp-area="" asp-page="/Register">Create user</a>
@@ -45,8 +53,8 @@
<li class="nav-item"> <li class="nav-item">
<a class="nav-link text-dark" asp-area="" asp-page="/Logout">Logout</a> <a class="nav-link text-dark" asp-area="" asp-page="/Logout">Logout</a>
</li> </li>
} </ul>
</ul> }
</div> </div>
</div> </div>
</nav> </nav>