diff --git a/StudentHouseDashboard/Data/AnnouncementRepository.cs b/StudentHouseDashboard/Data/AnnouncementRepository.cs index 9eab875..a3d4b78 100644 --- a/StudentHouseDashboard/Data/AnnouncementRepository.cs +++ b/StudentHouseDashboard/Data/AnnouncementRepository.cs @@ -37,6 +37,27 @@ namespace Data } return announcements; } + public Announcement GetAnnouncementById(int id) + { + UserRepository userRepository = new UserRepository(); + using (SqlConnection conn = SqlConnectionHelper.CreateConnection()) + { + string sql = "SELECT * FROM Announcements WHERE ID = @id;"; + SqlCommand cmd = new SqlCommand(sql, conn); + cmd.Parameters.AddWithValue("id", id); + var reader = cmd.ExecuteReader(); + reader.Read(); + Announcement announcement = new Announcement(Convert.ToInt32(reader["ID"]), + userRepository.GetUserById(Convert.ToInt32(reader["Author"])), + reader["Description"].ToString(), reader["Title"].ToString(), + (DateTime)reader["PublishDate"], (bool)reader["IsImportant"], + (bool)reader["IsSticky"]); + CommentRepository commentRepository = new CommentRepository(); + announcement.Comments = commentRepository.GetAllCommentsOnAnnouncement(announcement.ID); + conn.Close(); + return announcement; + } + } public List GetAnnouncementsByPage(int? p, int? c) { List announcements = new List(); diff --git a/StudentHouseDashboard/Logic/AnnouncementManager.cs b/StudentHouseDashboard/Logic/AnnouncementManager.cs index 2b52701..f981cd6 100644 --- a/StudentHouseDashboard/Logic/AnnouncementManager.cs +++ b/StudentHouseDashboard/Logic/AnnouncementManager.cs @@ -20,6 +20,10 @@ namespace Logic { return announcementRepository.GetAllAnnouncements(); } + public Announcement GetAnnouncementById(int id) + { + return announcementRepository.GetAnnouncementById(id); + } public List GetAnnouncementsByPage(int? p, int? c) { return announcementRepository.GetAnnouncementsByPage(p, c); @@ -30,6 +34,7 @@ namespace Logic } public bool UpdateAnnouncement(int id, string title, string description, bool isImportant, bool isSticky) { + description += $"{Environment.NewLine}{Environment.NewLine}Updated: {DateTime.Now.ToString("g")}"; return announcementRepository.UpdateAnnouncement(id, title, description, isImportant, isSticky); } public bool DeleteAnnouncement(int id) diff --git a/StudentHouseDashboard/Models/GenericMessage.cs b/StudentHouseDashboard/Models/GenericMessage.cs index c6ce2b8..35a219c 100644 --- a/StudentHouseDashboard/Models/GenericMessage.cs +++ b/StudentHouseDashboard/Models/GenericMessage.cs @@ -26,7 +26,7 @@ namespace Models } public int ID { - get; private set; + get; set; } public User Author diff --git a/StudentHouseDashboard/WebApp/Pages/Announcement.cshtml b/StudentHouseDashboard/WebApp/Pages/Announcement.cshtml index 037692a..de0cc19 100644 --- a/StudentHouseDashboard/WebApp/Pages/Announcement.cshtml +++ b/StudentHouseDashboard/WebApp/Pages/Announcement.cshtml @@ -7,13 +7,17 @@ Announcement announcement = (Announcement)ViewData["announcement"]; ViewData["Title"] = $"{announcement.Title}"; } -

@announcement.Title

+

@announcement.Title +

Published @announcement.PublishDate.ToString("g") by @announcement.Author.Name @Html.Raw((announcement.Author.Role == UserRole.ADMIN || announcement.Author.Role == UserRole.MANAGER) ? $"({CultureInfo.CurrentCulture.TextInfo.ToTitleCase(announcement.Author.Role.ToString().ToLower())})" : "") - @(announcement.IsImportant ? "Important" : "") @(announcement.IsSticky ? "Sticky" : "") + @(announcement.IsSticky ? "Pinned" : "")

@if (User.FindFirst(ClaimTypes.Role).Value == "ADMIN" || User.Identity.Name == announcement.Author.Name) diff --git a/StudentHouseDashboard/WebApp/Pages/Announcements.cshtml b/StudentHouseDashboard/WebApp/Pages/Announcements.cshtml index 8ecf464..8fd37e7 100644 --- a/StudentHouseDashboard/WebApp/Pages/Announcements.cshtml +++ b/StudentHouseDashboard/WebApp/Pages/Announcements.cshtml @@ -15,9 +15,12 @@ {

-
@announcement.Title
+
@announcement.Title
@announcement.Author.Name
-

@announcement.Description.PadRight(100).Trim()

+

@announcement.Description.PadRight(100).Substring(0,100).Trim()

More details
diff --git a/StudentHouseDashboard/WebApp/Pages/CreateAnnouncement.cshtml.cs b/StudentHouseDashboard/WebApp/Pages/CreateAnnouncement.cshtml.cs index 1b41106..4243ee0 100644 --- a/StudentHouseDashboard/WebApp/Pages/CreateAnnouncement.cshtml.cs +++ b/StudentHouseDashboard/WebApp/Pages/CreateAnnouncement.cshtml.cs @@ -13,13 +13,13 @@ namespace WebApp.Pages public void OnGet() { } - public void OnPost() + public IActionResult 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"); + return RedirectToPage("Announcements"); } } } diff --git a/StudentHouseDashboard/WebApp/Pages/DeleteAnnouncement.cshtml b/StudentHouseDashboard/WebApp/Pages/DeleteAnnouncement.cshtml new file mode 100644 index 0000000..b64a92a --- /dev/null +++ b/StudentHouseDashboard/WebApp/Pages/DeleteAnnouncement.cshtml @@ -0,0 +1,31 @@ +@page +@using Models; +@model WebApp.Pages.DeleteAnnouncementModel +@{ + ViewData["Title"] = "Delete announcement"; + Announcement announcement = (Announcement)ViewData["announcement"]; +} + +@if (announcement == null) +{ + + Return to all announcements +} +else +{ +
+

Are you sure you want to delete this announcement?

+
+
+
@announcement.Title
+
@announcement.Author.Name - @announcement.PublishDate
+

@Html.Raw(announcement.Description.Replace(Environment.NewLine, "
"))

+
+
+ + + No +
+} \ No newline at end of file diff --git a/StudentHouseDashboard/WebApp/Pages/DeleteAnnouncement.cshtml.cs b/StudentHouseDashboard/WebApp/Pages/DeleteAnnouncement.cshtml.cs new file mode 100644 index 0000000..b98ddcd --- /dev/null +++ b/StudentHouseDashboard/WebApp/Pages/DeleteAnnouncement.cshtml.cs @@ -0,0 +1,32 @@ +using Logic; +using Microsoft.AspNetCore.Mvc; +using Microsoft.AspNetCore.Mvc.RazorPages; +using Models; +using System.Security.Claims; + +namespace WebApp.Pages +{ + public class DeleteAnnouncementModel : PageModel + { + [BindProperty] + public int AnnouncementId { get; set; } + public void OnGet(int id) + { + AnnouncementManager announcementManager = new AnnouncementManager(); + if (id != null) + { + Announcement announcement = announcementManager.GetAnnouncementById(id); + if (announcement.Author.ID == int.Parse(User.FindFirstValue("id")) || User.IsInRole("ADMIN")) + { + ViewData["announcement"] = announcement; + } + } + } + public IActionResult OnPost() + { + AnnouncementManager announcementManager = new AnnouncementManager(); + announcementManager.DeleteAnnouncement(AnnouncementId); + return RedirectToPage("Announcements"); + } + } +} diff --git a/StudentHouseDashboard/WebApp/Pages/EditAnnouncement.cshtml b/StudentHouseDashboard/WebApp/Pages/EditAnnouncement.cshtml new file mode 100644 index 0000000..c122183 --- /dev/null +++ b/StudentHouseDashboard/WebApp/Pages/EditAnnouncement.cshtml @@ -0,0 +1,43 @@ +@page +@using Models; +@model WebApp.Pages.EditAnnouncementModel +@{ + ViewData["Title"] = "Edit announcement"; + Model.Announcement = (Announcement)ViewData["announcement"]; +} + +

@ViewData["Title"]

+ +@if (Model.Announcement == null) +{ + + Return to all announcements +} +else +{ +
+
+ + +
+ @if (HttpContext.User.IsInRole("ADMIN") || HttpContext.User.IsInRole("MANAGER")) + { +
+ + @Html.CheckBoxFor(model => model.Announcement.IsImportant) +
+
+ + @Html.CheckBoxFor(model => model.Announcement.IsSticky) +
+ } +
+ + +
+ + +
+} \ No newline at end of file diff --git a/StudentHouseDashboard/WebApp/Pages/EditAnnouncement.cshtml.cs b/StudentHouseDashboard/WebApp/Pages/EditAnnouncement.cshtml.cs new file mode 100644 index 0000000..69f7134 --- /dev/null +++ b/StudentHouseDashboard/WebApp/Pages/EditAnnouncement.cshtml.cs @@ -0,0 +1,32 @@ +using Logic; +using Microsoft.AspNetCore.Mvc; +using Microsoft.AspNetCore.Mvc.RazorPages; +using Models; +using System.Security.Claims; + +namespace WebApp.Pages +{ + public class EditAnnouncementModel : PageModel + { + [BindProperty] + public Announcement Announcement { get; set; } + public void OnGet(int id) + { + AnnouncementManager announcementManager = new AnnouncementManager(); + if (id != null) + { + Announcement announcement = announcementManager.GetAnnouncementById(id); + if (announcement.Author.ID == int.Parse(User.FindFirstValue("id")) || User.IsInRole("ADMIN") ) + { + ViewData["announcement"] = announcement; + } + } + } + public IActionResult OnPost() + { + AnnouncementManager announcementManager = new AnnouncementManager(); + announcementManager.UpdateAnnouncement(Announcement.ID, Announcement.Title, Announcement.Description, Announcement.IsImportant, Announcement.IsSticky); + return RedirectToPage("Announcements"); + } + } +}