diff --git a/Oqtane.Server/Pages/Sitemap.cshtml.cs b/Oqtane.Server/Pages/Sitemap.cshtml.cs index 7a7684c1..64e7faa5 100644 --- a/Oqtane.Server/Pages/Sitemap.cshtml.cs +++ b/Oqtane.Server/Pages/Sitemap.cshtml.cs @@ -25,98 +25,91 @@ namespace Oqtane.Pages private readonly IPageRepository _pages; private readonly IPageModuleRepository _pageModules; private readonly IModuleDefinitionRepository _moduleDefinitions; - private readonly ISettingRepository _settings; private readonly IUserPermissions _userPermissions; private readonly ILogManager _logger; private readonly Alias _alias; - private readonly IMemoryCache _memoryCache; + private string sitemapXml; - public SitemapModel(IServiceProvider serviceProvider, IPageRepository pages, IPageModuleRepository pageModules, IModuleDefinitionRepository moduleDefinitions, ISettingRepository settings, IUserPermissions userPermissions, IUrlMappingRepository urlMappings, ISyncManager syncManager, ILogManager logger, ITenantManager tenantManager, IMemoryCache memoryCache) + public SitemapModel(IServiceProvider serviceProvider, IPageRepository pages, IPageModuleRepository pageModules, IModuleDefinitionRepository moduleDefinitions, 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(); - _memoryCache = memoryCache; } - public IActionResult OnGet() + public IActionResult OnGetAsync() { - if (!_memoryCache.TryGetValue("Sitemap", out string sitemapXml)) + 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)) { - 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)) + 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 + var moduleobject = ActivatorUtilities.CreateInstance(_serviceProvider, moduletype); + var urls = ((ISitemap)moduleobject).GetUrls(_alias.Path, page.Path, pageModule.Module); + foreach (var url in urls) { - 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) - { - 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; - - 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.WriteStartElement("url"); - writer.WriteElementString("loc", url.Url); - writer.WriteElementString("lastmod", url.ModifiedOn.ToString("yyyy-MM-dd")); - writer.WriteEndElement(); - } - writer.Close(); - } - // Cache the sitemap XML - sitemapXml = builder.ToString(); - _memoryCache.Set("Sitemap", sitemapXml, TimeSpan.FromHours(1)); } + + // 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)) + { + 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(); + } + // Cache the sitemap XML + sitemapXml = builder.ToString(); + return Content(sitemapXml, "application/xml"); } }