Files
SkyArtShop/Controllers/AdminPagesController.cs

164 lines
5.2 KiB
C#
Raw Normal View History

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text.RegularExpressions;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.ModelBinding;
using SkyArtShop.Models;
using SkyArtShop.Services;
namespace SkyArtShop.Controllers;
[Route("admin/pages")]
[Authorize(Roles = "Admin,MasterAdmin")]
public class AdminPagesController : Controller
{
private readonly PostgreSQLService _pgService;
private readonly SlugService _slugService;
private readonly string _pagesCollection = "Pages";
public AdminPagesController(PostgreSQLService pgService, SlugService slugService)
{
_pgService = pgService;
_slugService = slugService;
}
[HttpGet("")]
public async Task<IActionResult> Index()
{
return View((await _pgService.GetAllAsync<Page>(_pagesCollection)).OrderBy((Page p) => p.PageName).ToList());
}
[HttpGet("create")]
public IActionResult Create()
{
return View(new Page());
}
[HttpPost("create")]
public async Task<IActionResult> Create(Page page)
{
if (!base.ModelState.IsValid)
{
return View(page);
}
page.CreatedAt = DateTime.UtcNow;
page.UpdatedAt = DateTime.UtcNow;
page.PageSlug = _slugService.GenerateSlug(page.PageName);
await _pgService.InsertAsync(_pagesCollection, page);
base.TempData["SuccessMessage"] = "Page created successfully!";
return RedirectToAction("Index");
}
[HttpGet("edit/{id}")]
public async Task<IActionResult> Edit(string id)
{
Page page = await _pgService.GetByIdAsync<Page>(_pagesCollection, id);
if (page == null)
{
return NotFound();
}
return View(page);
}
[HttpPost("edit/{id}")]
public async Task<IActionResult> Edit(string id, [FromForm] Page page, IFormCollection form)
{
Console.WriteLine("[ADMIN-PAGES] === FORM SUBMISSION DEBUG ===");
Console.WriteLine("[ADMIN-PAGES] Form Keys: " + string.Join(", ", form.Keys));
foreach (string key in form.Keys)
{
if (key.StartsWith("ImageGallery") || key.StartsWith("TeamMembers"))
{
Console.WriteLine($"[ADMIN-PAGES] {key} = {form[key]}");
}
}
if (!base.ModelState.IsValid)
{
Console.WriteLine("[ADMIN-PAGES] ModelState is INVALID");
foreach (ModelError item2 in base.ModelState.Values.SelectMany((ModelStateEntry v) => v.Errors))
{
Console.WriteLine("[ADMIN-PAGES] Error: " + item2.ErrorMessage);
}
return View(page);
}
Page page2 = await _pgService.GetByIdAsync<Page>(_pagesCollection, id);
if (page2 == null)
{
Console.WriteLine("[ADMIN-PAGES] Page not found: " + id);
return NotFound();
}
page2.PageName = page.PageName;
page2.Title = page.Title;
page2.Subtitle = page.Subtitle;
page2.Content = page.Content;
page2.IsActive = page.IsActive;
page2.UpdatedAt = DateTime.UtcNow;
page2.PageSlug = _slugService.GenerateSlug(page.PageName);
page2.AboutImage1 = form["AboutImage1"].ToString() ?? string.Empty;
page2.AboutImage2 = form["AboutImage2"].ToString() ?? string.Empty;
page2.ImageGallery = new List<string>();
foreach (string item3 in form.Keys.Where((string k) => k.StartsWith("ImageGallery[")))
{
string text = form[item3].ToString();
if (!string.IsNullOrEmpty(text))
{
page2.ImageGallery.Add(text);
}
}
page2.TeamMembers = new List<TeamMember>();
List<int> list = (from i in (from i in form.Keys.Where((string k) => k.StartsWith("TeamMembers[") && k.Contains("].Name")).Select(delegate(string k)
{
Match match = Regex.Match(k, "TeamMembers\\[(\\d+)\\]");
return (!match.Success) ? (-1) : int.Parse(match.Groups[1].Value);
})
where i >= 0
select i).Distinct()
orderby i
select i).ToList();
foreach (int item4 in list)
{
TeamMember item = new TeamMember
{
Name = form[$"TeamMembers[{item4}].Name"].ToString(),
Role = form[$"TeamMembers[{item4}].Role"].ToString(),
Bio = form[$"TeamMembers[{item4}].Bio"].ToString(),
PhotoUrl = form[$"TeamMembers[{item4}].PhotoUrl"].ToString()
};
page2.TeamMembers.Add(item);
}
Console.WriteLine($"[ADMIN-PAGES] Updating page: {page2.PageName} (Slug: {page2.PageSlug})");
Console.WriteLine("[ADMIN-PAGES] Title: " + page2.Title);
Console.WriteLine($"[ADMIN-PAGES] Content length: {page2.Content?.Length ?? 0}");
Console.WriteLine($"[ADMIN-PAGES] Image Gallery Count: {page2.ImageGallery.Count}");
Console.WriteLine($"[ADMIN-PAGES] Team Members Count: {page2.TeamMembers.Count}");
if (page2.ImageGallery.Any())
{
Console.WriteLine("[ADMIN-PAGES] Gallery Images: " + string.Join(", ", page2.ImageGallery));
}
if (page2.TeamMembers.Any())
{
foreach (TeamMember teamMember in page2.TeamMembers)
{
Console.WriteLine($"[ADMIN-PAGES] Team Member: {teamMember.Name} - {teamMember.Role} - Photo: {teamMember.PhotoUrl}");
}
}
await _pgService.UpdateAsync(_pagesCollection, id, page2);
base.TempData["SuccessMessage"] = "Page updated successfully!";
return RedirectToAction("Index");
}
[HttpPost("delete/{id}")]
public async Task<IActionResult> Delete(string id)
{
await _pgService.DeleteAsync<Page>(_pagesCollection, id);
base.TempData["SuccessMessage"] = "Page deleted successfully!";
return RedirectToAction("Index");
}
}