Fixed missing logic from PR

This commit is contained in:
Cody 2023-04-19 10:18:27 -07:00 committed by GitHub
parent abf4ff71d7
commit d81fbe4585
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -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");
} }
} }
} }