diff --git a/Oqtane.Server/Pages/Sitemap.cshtml.cs b/Oqtane.Server/Pages/Sitemap.cshtml.cs index dd72c071..d4d6d636 100644 --- a/Oqtane.Server/Pages/Sitemap.cshtml.cs +++ b/Oqtane.Server/Pages/Sitemap.cshtml.cs @@ -30,87 +30,90 @@ namespace Oqtane.Pages private readonly Alias _alias; 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; _pages = pages; _pageModules = pageModules; _moduleDefinitions = moduleDefinitions; + _settings = settings; _userPermissions = userPermissions; _logger = logger; _alias = tenantManager.GetAlias(); } - public IActionResult OnGetAsync() + public IActionResult OnGet() { - var sitemap = new List(); + var sitemap = new List(); - // build site map - var moduleDefinitions = _moduleDefinitions.GetModuleDefinitions(_alias.SiteId).ToList(); - var pageModules = _pageModules.GetPageModules(_alias.SiteId); - foreach (var page in _pages.GetPages(_alias.SiteId)) + // build site map + var moduleDefinitions = _moduleDefinitions.GetModuleDefinitions(_alias.SiteId).ToList(); + var pageModules = _pageModules.GetPageModules(_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(); - if (moduleDefinition != null && moduleDefinition.ServerManagerType != "") + Type moduletype = Type.GetType(moduleDefinition.ServerManagerType); + if (moduletype != null && moduletype.GetInterface("ISitemap") != null) { - Type moduletype = Type.GetType(moduleDefinition.ServerManagerType); - if (moduletype != null && moduletype.GetInterface("ISitemap") != null) + try { - 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); - 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); + 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); + } } } } } } + } - // write XML - XmlWriterSettings settings = new XmlWriterSettings(); - settings.Indent = true; - settings.IndentChars = (" "); - settings.CloseOutput = true; - settings.OmitXmlDeclaration = true; - settings.WriteEndDocumentOnClose = true; + // write XML + XmlWriterSettings settings = new XmlWriterSettings(); + settings.Indent = true; + settings.IndentChars = (" "); + settings.CloseOutput = true; + settings.OmitXmlDeclaration = true; + settings.WriteEndDocumentOnClose = true; - StringBuilder builder = new StringBuilder(); - using (XmlWriter writer = XmlWriter.Create(builder, settings)) + StringBuilder builder = new StringBuilder(); + 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("urlset", "http://www.sitemaps.org/schemas/sitemap/0.9"); - - foreach (var url in sitemap) - { - writer.WriteStartElement("url"); - writer.WriteElementString("loc", url.Url); - writer.WriteElementString("lastmod", url.ModifiedOn.ToString("yyyy-MM-dd")); - writer.WriteEndElement(); - } - writer.Close(); + writer.WriteStartElement("url"); + writer.WriteElementString("loc", url.Url); + writer.WriteElementString("lastmod", url.ModifiedOn.ToString("yyyy-MM-dd")); + writer.WriteEndElement(); } - // Cache the sitemap XML - sitemapXml = builder.ToString(); + writer.Close(); + } + + sitemapXml = builder.ToString(); return Content(sitemapXml, "application/xml"); } } } +