add copy page functionality to control panel

This commit is contained in:
sbwalker
2026-02-24 15:35:45 -05:00
parent 458c8534c7
commit 9aad400038
6 changed files with 204 additions and 47 deletions

View File

@@ -1,16 +1,15 @@
using System.Collections.Generic;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Authorization;
using Oqtane.Models;
using Oqtane.Shared;
using System.Linq;
using Oqtane.Security;
using System.Net;
using System.Security;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using Oqtane.Enums;
using Oqtane.Infrastructure;
using Oqtane.Models;
using Oqtane.Repository;
using System.Xml.Linq;
using Microsoft.AspNetCore.Diagnostics;
using Oqtane.Security;
using Oqtane.Shared;
namespace Oqtane.Controllers
{
@@ -498,6 +497,79 @@ namespace Oqtane.Controllers
HttpContext.Response.StatusCode = (int)HttpStatusCode.Forbidden;
}
}
}
// POST api/<controller>/5/6
[HttpPost("{fromPageId}/{toPageId}/{usePagePermissions}")]
[Authorize(Roles = RoleNames.Registered)]
public void Post(int fromPageId, int toPageId, bool usePagePermissions)
{
var fromPage = _pages.GetPage(fromPageId);
if (fromPage != null && fromPage.SiteId == _alias.SiteId && _userPermissions.IsAuthorized(User, PermissionNames.View, fromPage.PermissionList))
{
var toPage = _pages.GetPage(toPageId);
if (toPage != null && toPage.SiteId == _alias.SiteId && _userPermissions.IsAuthorized(User, PermissionNames.View, toPage.PermissionList))
{
// copy modules
List<PageModule> pageModules = _pageModules.GetPageModules(fromPage.SiteId).ToList();
foreach (PageModule pm in pageModules.Where(item => item.PageId == fromPage.PageId && !item.Module.AllPages && !item.IsDeleted))
{
Module module = new Module();
module.SiteId = fromPage.SiteId;
module.PageId = toPageId;
module.ModuleDefinitionName = pm.Module.ModuleDefinitionName;
module.AllPages = false;
if (usePagePermissions)
{
module.PermissionList = toPage.PermissionList;
}
else
{
module.PermissionList = pm.Module.PermissionList;
}
module.PermissionList = module.PermissionList.Select(item => new Permission
{
SiteId = item.SiteId,
EntityName = EntityNames.Module,
EntityId = -1,
PermissionName = item.PermissionName,
RoleName = item.RoleName,
UserId = item.UserId,
IsAuthorized = item.IsAuthorized,
}).ToList();
module = _modules.AddModule(module);
string content = _modules.ExportModule(pm.ModuleId);
if (content != "")
{
_modules.ImportModule(module.ModuleId, content);
}
PageModule pageModule = new PageModule();
pageModule.PageId = toPageId;
pageModule.ModuleId = module.ModuleId;
pageModule.Title = pm.Title;
pageModule.Pane = pm.Pane;
pageModule.Order = pm.Order;
pageModule.ContainerType = pm.ContainerType;
pageModule.EffectiveDate = pm.EffectiveDate;
pageModule.ExpiryDate = pm.ExpiryDate;
pageModule.Header = pm.Header;
pageModule.Footer = pm.Footer;
_pageModules.AddPageModule(pageModule);
}
_syncManager.AddSyncEvent(_alias, EntityNames.Site, fromPage.SiteId, SyncEventActions.Refresh);
}
else
{
HttpContext.Response.StatusCode = (int)HttpStatusCode.Forbidden;
}
}
else
{
HttpContext.Response.StatusCode = (int)HttpStatusCode.Forbidden;
}
}
}
}