Fixed missing logic from PR
This commit is contained in:
parent
abf4ff71d7
commit
d81fbe4585
|
@ -30,87 +30,90 @@ namespace Oqtane.Pages
|
||||||
private readonly Alias _alias;
|
private readonly Alias _alias;
|
||||||
private string sitemapXml;
|
private string sitemapXml;
|
||||||
|
|
||||||
public SitemapModel(IServiceProvider serviceProvider, IPageRepository pages, IPageModuleRepository pageModules, IModuleDefinitionRepository moduleDefinitions, IUserPermissions userPermissions, IUrlMappingRepository urlMappings, ISyncManager syncManager, ILogManager logger, ITenantManager tenantManager)
|
public SitemapModel(IServiceProvider serviceProvider, IPageRepository pages, IPageModuleRepository pageModules, IModuleDefinitionRepository moduleDefinitions, ISettingRepository settings, IUserPermissions userPermissions, IUrlMappingRepository urlMappings, ISyncManager syncManager, ILogManager logger, ITenantManager tenantManager)
|
||||||
{
|
{
|
||||||
_serviceProvider = serviceProvider;
|
_serviceProvider = serviceProvider;
|
||||||
_pages = pages;
|
_pages = pages;
|
||||||
_pageModules = pageModules;
|
_pageModules = pageModules;
|
||||||
_moduleDefinitions = moduleDefinitions;
|
_moduleDefinitions = moduleDefinitions;
|
||||||
|
_settings = settings;
|
||||||
_userPermissions = userPermissions;
|
_userPermissions = userPermissions;
|
||||||
_logger = logger;
|
_logger = logger;
|
||||||
_alias = tenantManager.GetAlias();
|
_alias = tenantManager.GetAlias();
|
||||||
}
|
}
|
||||||
|
|
||||||
public IActionResult OnGetAsync()
|
public IActionResult OnGet()
|
||||||
{
|
{
|
||||||
var sitemap = new List<Sitemap>();
|
var sitemap = new List<Sitemap>();
|
||||||
|
|
||||||
// build site map
|
// build site map
|
||||||
var moduleDefinitions = _moduleDefinitions.GetModuleDefinitions(_alias.SiteId).ToList();
|
var moduleDefinitions = _moduleDefinitions.GetModuleDefinitions(_alias.SiteId).ToList();
|
||||||
var pageModules = _pageModules.GetPageModules(_alias.SiteId);
|
var pageModules = _pageModules.GetPageModules(_alias.SiteId);
|
||||||
foreach (var page in _pages.GetPages(_alias.SiteId))
|
foreach (var page in _pages.GetPages(_alias.SiteId))
|
||||||
|
{
|
||||||
|
if (_userPermissions.IsAuthorized(null, PermissionNames.View, page.PermissionList) && page.IsNavigation)
|
||||||
{
|
{
|
||||||
if (_userPermissions.IsAuthorized(null, PermissionNames.View, page.PermissionList) && page.IsNavigation)
|
sitemap.Add(new Sitemap { Url = _alias.Protocol + _alias.Name + Utilities.NavigateUrl(_alias.Path, page.Path, ""), ModifiedOn = page.ModifiedOn });
|
||||||
{
|
|
||||||
sitemap.Add(new Sitemap { Url = _alias.Protocol + _alias.Name + Utilities.NavigateUrl(_alias.Path, page.Path, ""), ModifiedOn = page.ModifiedOn });
|
|
||||||
|
|
||||||
foreach (var pageModule in pageModules.Where(item => item.PageId == page.PageId))
|
foreach (var pageModule in pageModules.Where(item => item.PageId == page.PageId))
|
||||||
|
{
|
||||||
|
if (_userPermissions.IsAuthorized(null, PermissionNames.View, pageModule.Module.PermissionList))
|
||||||
{
|
{
|
||||||
if (_userPermissions.IsAuthorized(null, PermissionNames.View, pageModule.Module.PermissionList))
|
var moduleDefinition = moduleDefinitions.Where(item => item.ModuleDefinitionName == pageModule.Module.ModuleDefinitionName).FirstOrDefault();
|
||||||
|
if (moduleDefinition != null && moduleDefinition.ServerManagerType != "")
|
||||||
{
|
{
|
||||||
var moduleDefinition = moduleDefinitions.Where(item => item.ModuleDefinitionName == pageModule.Module.ModuleDefinitionName).FirstOrDefault();
|
Type moduletype = Type.GetType(moduleDefinition.ServerManagerType);
|
||||||
if (moduleDefinition != null && moduleDefinition.ServerManagerType != "")
|
if (moduletype != null && moduletype.GetInterface("ISitemap") != null)
|
||||||
{
|
{
|
||||||
Type moduletype = Type.GetType(moduleDefinition.ServerManagerType);
|
try
|
||||||
if (moduletype != null && moduletype.GetInterface("ISitemap") != null)
|
|
||||||
{
|
{
|
||||||
try
|
pageModule.Module.Settings = _settings.GetSettings(EntityNames.Module, pageModule.ModuleId).ToDictionary(x => x.SettingName, x => x.SettingValue);
|
||||||
|
var moduleobject = ActivatorUtilities.CreateInstance(_serviceProvider, moduletype);
|
||||||
|
var urls = ((ISitemap)moduleobject).GetUrls(_alias.Path, page.Path, pageModule.Module);
|
||||||
|
foreach (var url in urls)
|
||||||
{
|
{
|
||||||
var moduleobject = ActivatorUtilities.CreateInstance(_serviceProvider, moduletype);
|
sitemap.Add(new Sitemap { Url = _alias.Protocol + _alias.Name + url.Url, ModifiedOn = url.ModifiedOn });
|
||||||
var urls = ((ISitemap)moduleobject).GetUrls(_alias.Path, page.Path, pageModule.Module);
|
|
||||||
foreach (var url in urls)
|
|
||||||
{
|
|
||||||
sitemap.Add(new Sitemap { Url = _alias.Protocol + _alias.Name + url.Url, ModifiedOn = url.ModifiedOn });
|
|
||||||
}
|
|
||||||
}
|
|
||||||
catch (Exception ex)
|
|
||||||
{
|
|
||||||
_logger.Log(LogLevel.Error, this, LogFunction.Other, ex, "Error Retrieving SiteMap For {Name} Module", moduleDefinition.Name);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
_logger.Log(LogLevel.Error, this, LogFunction.Other, ex, "Error Retrieving SiteMap For {Name} Module", moduleDefinition.Name);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// write XML
|
// write XML
|
||||||
XmlWriterSettings settings = new XmlWriterSettings();
|
XmlWriterSettings settings = new XmlWriterSettings();
|
||||||
settings.Indent = true;
|
settings.Indent = true;
|
||||||
settings.IndentChars = (" ");
|
settings.IndentChars = (" ");
|
||||||
settings.CloseOutput = true;
|
settings.CloseOutput = true;
|
||||||
settings.OmitXmlDeclaration = true;
|
settings.OmitXmlDeclaration = true;
|
||||||
settings.WriteEndDocumentOnClose = true;
|
settings.WriteEndDocumentOnClose = true;
|
||||||
|
|
||||||
StringBuilder builder = new StringBuilder();
|
StringBuilder builder = new StringBuilder();
|
||||||
using (XmlWriter writer = XmlWriter.Create(builder, settings))
|
using (XmlWriter writer = XmlWriter.Create(builder, settings))
|
||||||
|
{
|
||||||
|
writer.WriteStartDocument();
|
||||||
|
writer.WriteStartElement("urlset", "http://www.sitemaps.org/schemas/sitemap/0.9");
|
||||||
|
|
||||||
|
foreach (var url in sitemap)
|
||||||
{
|
{
|
||||||
writer.WriteStartDocument();
|
writer.WriteStartElement("url");
|
||||||
writer.WriteStartElement("urlset", "http://www.sitemaps.org/schemas/sitemap/0.9");
|
writer.WriteElementString("loc", url.Url);
|
||||||
|
writer.WriteElementString("lastmod", url.ModifiedOn.ToString("yyyy-MM-dd"));
|
||||||
foreach (var url in sitemap)
|
writer.WriteEndElement();
|
||||||
{
|
|
||||||
writer.WriteStartElement("url");
|
|
||||||
writer.WriteElementString("loc", url.Url);
|
|
||||||
writer.WriteElementString("lastmod", url.ModifiedOn.ToString("yyyy-MM-dd"));
|
|
||||||
writer.WriteEndElement();
|
|
||||||
}
|
|
||||||
writer.Close();
|
|
||||||
}
|
}
|
||||||
// Cache the sitemap XML
|
writer.Close();
|
||||||
sitemapXml = builder.ToString();
|
}
|
||||||
|
|
||||||
|
sitemapXml = builder.ToString();
|
||||||
|
|
||||||
return Content(sitemapXml, "application/xml");
|
return Content(sitemapXml, "application/xml");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user