public void ValidateUrls_SitemapNode() { SitemapNode siteMapNode = new SitemapNode("/categories"); _urlValidator.ValidateUrls(null, siteMapNode); siteMapNode.Url.Should().Be("http://example.org/categories"); }
private static Mock<ISitemapService> MockSitemapService(SitemapNode[] sitemap) { var serviceMock = new Mock<ISitemapService>(); serviceMock .Setup(h => h.GetRootNodes(It.IsAny<string>())) .Returns(sitemap ?? new SitemapNode[0]); return serviceMock; }
private static Mock<IRepository> MockRepository(SitemapNode[] sitemap) { var mock = new Mock<IRepository>(); mock.Setup(r => r.First<SitemapNode>(It.IsAny<Guid>())) .Returns(sitemap[0]); mock.Setup(r => r.AsQueryable<SitemapNode>()) .Returns(sitemap.AsQueryable()); return mock; }
public void Serialize_SitemapNode_AllTags() { SitemapNode sitemapNode = new SitemapNode("abc") { LastModificationDate = new DateTime(2013, 12, 11, 16, 05, 00, DateTimeKind.Utc), ChangeFrequency = ChangeFrequency.Weekly, Priority = 0.8M }; string result = _serializer.Serialize(sitemapNode); result.Should().BeXmlEquivalent("Samples/sitemap-node-all.xml"); }
public void ValidateUrls_SitemapNodeWithImages() { SitemapNode sitemapNode = new SitemapNode("abc") { Images = new List<SitemapImage> { new SitemapImage("/image.jpg") { License = "/licenses/unlicense/", } } }; _urlValidator.ValidateUrls(null, sitemapNode); var sitemapImage = sitemapNode.Images[0]; sitemapImage.Url.Should().Be("http://example.org/image.jpg"); sitemapImage.License.Should().Be("http://example.org/licenses/unlicense/"); }
/// <summary> /// Deletes the node (does not archive sitemap). /// </summary> /// <param name="node">The node.</param> /// <param name="deletedNodes">The deleted nodes.</param> public void DeleteNode(SitemapNode node, ref IList<SitemapNode> deletedNodes) { if (node.ChildNodes != null) { foreach (var childNode in node.ChildNodes) { DeleteNode(childNode, ref deletedNodes); } } repository.Delete(node); deletedNodes.Add(node); }
/// <summary> /// Saves the translations. /// </summary> /// <param name="model">The node model.</param> /// <param name="node">The node to save.</param> private void SaveTranslations(SaveSitemapNodeModel model, SitemapNode node) { if (model.Translations != null) { foreach (var nodeTranslation in node.Translations) { if (model.Translations.All(m => m.Id != nodeTranslation.Id)) { repository.Delete(nodeTranslation); } } foreach (var translationModel in model.Translations) { var translationToSave = node.Translations.FirstOrDefault(t => t.Id == translationModel.Id); var isNewTranslation = translationToSave == null; if (isNewTranslation) { translationToSave = new Module.Pages.Models.SitemapNodeTranslation { Id = translationModel.Id.GetValueOrDefault(), Node = node }; } else if (translationModel.Version > 0) { translationToSave.Version = translationModel.Version; } translationToSave.Language = repository.AsProxy<Language>(translationModel.LanguageId); translationToSave.Macro = translationModel.Macro; translationToSave.Title = translationModel.Title; translationToSave.UsePageTitleAsNodeTitle = translationModel.UsePageTitleAsNodeTitle; translationToSave.Url = translationModel.Url; translationToSave.UrlHash = !string.IsNullOrWhiteSpace(translationToSave.Url) ? translationToSave.Url.UrlHash() : null; if (translationToSave.Node != node) { translationToSave.Node = node; } repository.Save(translationToSave); } } }
/// <summary> /// Puts the specified request. /// </summary> /// <param name="request">The request.</param> /// <returns> /// <c>PutNodeResponse</c> with create or updated node id. /// </returns> public PutNodeResponse Put(PutNodeRequest request) { var sitemapFuture = repository.AsQueryable<Module.Pages.Models.Sitemap>(e => e.Id == request.SitemapId) .FetchMany(f => f.AccessRules) .ToFuture(); var node = repository.AsQueryable<SitemapNode>(e => e.Sitemap.Id == request.SitemapId && e.Id == request.Id) .FetchMany(n => n.Translations) .ToFuture() .ToList() .FirstOrDefault(); var sitemap = sitemapFuture.ToList().FirstOne(); if (cmsConfiguration.Security.AccessControlEnabled) { accessControlService.DemandAccess(sitemap, securityService.GetCurrentPrincipal(), AccessLevel.ReadWrite); } var isNew = node == null; if (isNew) { node = new SitemapNode { Id = request.Id.GetValueOrDefault(), Translations = new List<Module.Pages.Models.SitemapNodeTranslation>() }; } else if (request.Data.Version > 0) { node.Version = request.Data.Version; } unitOfWork.BeginTransaction(); sitemapService.ArchiveSitemap(sitemap.Id); node.Sitemap = sitemap; node.Title = request.Data.Title; if (request.Data.PageId.GetValueOrDefault() != default(Guid)) { node.Page = repository.AsProxy<PageProperties>(request.Data.PageId.GetValueOrDefault()); node.Url = null; node.UrlHash = null; } else { node.Page = null; node.Url = request.Data.Url; node.UrlHash = node.Url.UrlHash(); } node.ParentNode = request.Data.ParentId.GetValueOrDefault() != default(Guid) ? repository.AsProxy<SitemapNode>(request.Data.ParentId.GetValueOrDefault()) : null; node.DisplayOrder = request.Data.DisplayOrder; node.Macro = request.Data.Macro; node.UsePageTitleAsNodeTitle = request.Data.UsePageTitleAsNodeTitle; repository.Save(node); UpdateTranslations(node, request.Data); unitOfWork.Commit(); // Fire events. if (isNew) { Events.SitemapEvents.Instance.OnSitemapNodeCreated(node); } else { Events.SitemapEvents.Instance.OnSitemapNodeUpdated(node); } Events.SitemapEvents.Instance.OnSitemapUpdated(sitemap); return new PutNodeResponse { Data = node.Id }; }
/// <summary> /// Gets the page translation from page translations list, which is most compatible with node translation: /// if page translation exists, take page translations /// if page translation does not exist, take default language translation /// if default language translation does not exist, take node's data /// </summary> /// <param name="pageTranslations">The page translations.</param> /// <param name="nodeLanguage">The node language.</param> /// <param name="node">The node.</param> /// <returns></returns> private PageTranslationViewModel GetPageTranslation(IEnumerable <PageTranslationViewModel> pageTranslations, Guid nodeLanguage, SitemapNode node, Page page) { var pageTranslation = pageTranslations.FirstOrDefault(p => p.LanguageId == nodeLanguage); if (pageTranslation == null) { pageTranslation = pageTranslations.FirstOrDefault(p => !p.LanguageId.HasValue); } if (pageTranslation == null && page != null) { pageTranslation = new PageTranslationViewModel { Title = page.Title, PageUrl = page.PageUrl, PageUrlHash = page.PageUrlHash }; } if (pageTranslation == null) { pageTranslation = new PageTranslationViewModel { Title = node.Title, PageUrl = node.Url, PageUrlHash = node.UrlHash }; } return(pageTranslation); }
private string SerializeSitemap(SitemapNode sitemapNode) { return serializer.Serialize(new SitemapModel(new List<SitemapNode> { sitemapNode })); }
public void Serialize_SitemapNode_VideoAllTags() { SitemapNode sitemapNode = new SitemapNode("http://www.example.com/videos/some_video_landing_page.html") { Video = new SitemapVideo("Grilling steaks for summer", "Alkis shows you how to get perfectly done steaks every time", "http://www.example.com/thumbs/123.jpg", "http://www.example.com/video123.flv") { PlayerUrl = new VideoPlayerUrl("http://www.example.com/videoplayer.swf?video=123") { AllowEmbed = YesNo.Yes, Autoplay = "ap=1" }, Duration = 600, ExpirationDate = new DateTime(2014, 12, 16, 16, 56, 0, DateTimeKind.Utc), Rating = 4.2M, ViewCount = 12345, PublicationDate = new DateTime(2014, 12, 16, 17, 51, 0, DateTimeKind.Utc), FamilyFriendly = YesNo.No, Tags = new[] { "steak", "summer", "outdoor" }, Category = "Grilling", Restriction = new VideoRestriction("IE GB US CA", VideoRestrictionRelationship.Allow), Gallery = new VideoGallery("http://cooking.example.com") { Title = "Cooking Videos" }, Prices = new List<VideoPrice> { new VideoPrice("EUR",1.99M), new VideoPrice("TRY",5.99M){Type = VideoPurchaseOption.Rent}, new VideoPrice("USD",2.99M){Resolution = VideoPurchaseResolution.Hd} }, RequiresSubscription = YesNo.No, Uploader = new VideoUploader("GrillyMcGrillerson") { Info = "http://www.example.com/users/grillymcgrillerson" }, Platform = "web mobile", Live = YesNo.Yes } }; _namespaces.Add(Namespaces.VideoPrefix, Namespaces.Video); string result = _serializer.Serialize(sitemapNode); result.Should().BeXmlEquivalent("Samples/sitemap-node-video-all.xml"); }
public void Serialize_SitemapNode_Mobile() { SitemapNode sitemapNode = new SitemapNode("http://mobile.example.com/article100.html") { Mobile = new SitemapMobile() }; _namespaces.Add(Namespaces.MobilePrefix, Namespaces.Mobile); string result = _serializer.Serialize(sitemapNode); result.Should().BeXmlEquivalent("Samples/sitemap-node-mobile.xml"); }
public Task <SitemapNode> CreateAsync(SitemapNode sitemapNode) { _sitemapNodes.Add(sitemapNode); return(Task.FromResult(sitemapNode)); }
public Task <SitemapNode> UpdateAsync(Guid id, SitemapNode sitemapNode) { return(Task.FromResult(sitemapNode)); }
private static SitemapNode JTokenToSitemapNodeConvert(JToken data) { if (data == null) { return(null); } SitemapNode model = new SitemapNode(); model.Id = new Guid(data["id"].ToString()); model.ParentId = (data["parent_id"] != null && data["parent_id"].Value <string>() != null) ? new Guid(data["parent_id"].Value <string>()) : (Guid?)null; model.Name = (string)data["name"]; model.Label = (string)data["label"]; model.Url = (string)data["url"]; model.IconClass = (string)data["icon_class"]; model.Type = (SitemapNodeType)((int)data["type"]); model.EntityId = (Guid?)data["entity_id"]; model.Weight = (int)data["weight"]; model.GroupName = (string)null; if (!string.IsNullOrWhiteSpace((string)data["label_translations"])) { model.LabelTranslations = JsonConvert.DeserializeObject <List <TranslationResource> >((string)data["label_translations"]); } else { model.LabelTranslations = new List <TranslationResource>(); } model.Access = new List <Guid>(); if (data["access_roles"] != null) { foreach (var rId in data["access_roles"].AsJEnumerable()) { model.Access.Add(new Guid(rId.ToString())); } } model.EntityListPages = new List <Guid>(); if (data["entity_list_pages"] != null) { foreach (var rId in data["entity_list_pages"].AsJEnumerable()) { model.EntityListPages.Add(new Guid(rId.ToString())); } } model.EntityCreatePages = new List <Guid>(); if (data["entity_create_pages"] != null) { foreach (var rId in data["entity_create_pages"].AsJEnumerable()) { model.EntityCreatePages.Add(new Guid(rId.ToString())); } } model.EntityDetailsPages = new List <Guid>(); if (data["entity_details_pages"] != null) { foreach (var rId in data["entity_details_pages"].AsJEnumerable()) { model.EntityDetailsPages.Add(new Guid(rId.ToString())); } } model.EntityManagePages = new List <Guid>(); if (data["entity_manage_pages"] != null) { foreach (var rId in data["entity_manage_pages"].AsJEnumerable()) { model.EntityManagePages.Add(new Guid(rId.ToString())); } } return(model); }
private static SitemapNode DataRowToSitemapNodeConvert(DataRow data) { if (data == null) { return(null); } SitemapNode model = new SitemapNode(); model.Id = new Guid(data["id"].ToString()); model.ParentId = data["parent_id"] != DBNull.Value ? new Guid(data["parent_id"].ToString()) : (Guid?)null; model.Name = (string)data["name"]; model.Label = (string)data["label"]; model.Url = (string)data["url"]; model.IconClass = (string)data["icon_class"]; model.Type = (SitemapNodeType)((int)data["type"]); model.EntityId = data["entity_id"] == DBNull.Value ? null : (Guid?)data["entity_id"]; model.Weight = (int)data["weight"]; model.GroupName = (string)null; if (!string.IsNullOrWhiteSpace((string)data["label_translations"])) { model.LabelTranslations = JsonConvert.DeserializeObject <List <TranslationResource> >((string)data["label_translations"]); } else { model.LabelTranslations = new List <TranslationResource>(); } model.Access = new List <Guid>(); if (data["access_roles"] != null) { model.Access.AddRange((Guid[])data["access_roles"]); } model.EntityListPages = new List <Guid>(); if (data["entity_list_pages"] != null) { model.EntityListPages.AddRange((Guid[])data["entity_list_pages"]); } model.EntityCreatePages = new List <Guid>(); if (data["entity_create_pages"] != null) { model.EntityCreatePages.AddRange((Guid[])data["entity_create_pages"]); } model.EntityDetailsPages = new List <Guid>(); if (data["entity_details_pages"] != null) { model.EntityDetailsPages.AddRange((Guid[])data["entity_details_pages"]); } model.EntityManagePages = new List <Guid>(); if (data["entity_manage_pages"] != null) { model.EntityManagePages.AddRange((Guid[])data["entity_manage_pages"]); } return(model); }
/// <summary> /// Puts the specified request. /// </summary> /// <param name="request">The request.</param> /// <returns> /// <c>PutNodeResponse</c> with create or updated node id. /// </returns> public PutNodeResponse Put(PutNodeRequest request) { var sitemapFuture = repository.AsQueryable <Module.Pages.Models.Sitemap>(e => e.Id == request.SitemapId) .FetchMany(f => f.AccessRules) .ToFuture(); var node = repository.AsQueryable <SitemapNode>(e => e.Sitemap.Id == request.SitemapId && e.Id == request.Id) .FetchMany(n => n.Translations) .ToFuture() .ToList() .FirstOrDefault(); var sitemap = sitemapFuture.ToList().FirstOne(); if (cmsConfiguration.Security.AccessControlEnabled) { accessControlService.DemandAccess(sitemap, securityService.GetCurrentPrincipal(), AccessLevel.ReadWrite); } var isNew = node == null; if (isNew) { node = new SitemapNode { Id = request.Id.GetValueOrDefault(), Translations = new List <Module.Pages.Models.SitemapNodeTranslation>() }; } else if (request.Data.Version > 0) { node.Version = request.Data.Version; } unitOfWork.BeginTransaction(); sitemapService.ArchiveSitemap(sitemap.Id); node.Sitemap = sitemap; node.Title = request.Data.Title; if (request.Data.PageId.GetValueOrDefault() != default(Guid)) { node.Page = repository.AsProxy <PageProperties>(request.Data.PageId.GetValueOrDefault()); node.Url = null; node.UrlHash = null; } else { node.Page = null; node.Url = request.Data.Url; node.UrlHash = node.Url.UrlHash(); } node.ParentNode = request.Data.ParentId.GetValueOrDefault() != default(Guid) ? repository.AsProxy <SitemapNode>(request.Data.ParentId.GetValueOrDefault()) : null; node.DisplayOrder = request.Data.DisplayOrder; node.Macro = request.Data.Macro; node.UsePageTitleAsNodeTitle = request.Data.UsePageTitleAsNodeTitle; repository.Save(node); UpdateTranslations(node, request.Data); unitOfWork.Commit(); // Fire events. if (isNew) { Events.SitemapEvents.Instance.OnSitemapNodeCreated(node); } else { Events.SitemapEvents.Instance.OnSitemapNodeUpdated(node); } Events.SitemapEvents.Instance.OnSitemapUpdated(sitemap); return(new PutNodeResponse { Data = node.Id }); }
/// <summary> /// Adds the translations. /// </summary> /// <param name="archivedNode">The archived node.</param> /// <param name="node">The node.</param> /// <returns>Archived node translation list.</returns> private static IList<SitemapNodeTranslation> AddTranslations(ArchivedNode archivedNode, SitemapNode node) { var translations = new List<SitemapNodeTranslation>(); if (archivedNode.Translations != null) { foreach (var translation in archivedNode.Translations) { translations.Add(new SitemapNodeTranslation { Node = node, Language = new Language() { Id = translation.LanguageId }, Title = translation.Title, Url = translation.Url, UsePageTitleAsNodeTitle = translation.UsePageTitleAsNodeTitle, Macro = translation.Macro }); } } return translations; }
/// <summary> /// Gets the root node. /// </summary> /// <param name="node">The node.</param> /// <returns>Node that has no parent.</returns> private SitemapNode GetRootNode(SitemapNode node) { if (node.ParentNode != null) { return GetRootNode(node.ParentNode); } return node; }
/// <summary> /// Gets the page translation from page translations list, which is most compatible with node translation: /// if page translation exists, take page translations /// if page translation does not exist, take default language translation /// if default language translation does not exist, take node's data /// </summary> /// <param name="pageTranslations">The page translations.</param> /// <param name="nodeLanguage">The node language.</param> /// <param name="node">The node.</param> /// <returns></returns> private PageTranslationViewModel GetPageTranslation(IEnumerable<PageTranslationViewModel> pageTranslations, Guid nodeLanguage, SitemapNode node, Page page) { var pageTranslation = pageTranslations.FirstOrDefault(p => p.LanguageId == nodeLanguage); if (pageTranslation == null) { pageTranslation = pageTranslations.FirstOrDefault(p => !p.LanguageId.HasValue); } if (pageTranslation == null && page != null) { pageTranslation = new PageTranslationViewModel { Title = page.Title, PageUrl = page.PageUrl, PageUrlHash = page.PageUrlHash }; } if (pageTranslation == null) { pageTranslation = new PageTranslationViewModel { Title = node.Title, PageUrl = node.Url, PageUrlHash = node.UrlHash }; } return pageTranslation; }
/// <summary> /// Saves the node. /// </summary> /// <param name="id">The id.</param> /// <param name="version">The version.</param> /// <param name="url">The URL.</param> /// <param name="title">The title.</param> /// <param name="displayOrder">The display order.</param> /// <param name="parentId">The parent id.</param> /// <param name="isDeleted">if set to <c>true</c> [is deleted].</param> /// <param name="parentNode">The parent node.</param> /// <returns> /// Updated or newly created sitemap node. /// </returns> public SitemapNode SaveNode(Guid id, int version, string url, string title, int displayOrder, Guid parentId, bool isDeleted = false, SitemapNode parentNode = null) { var node = id.HasDefaultValue() ? new SitemapNode() : repository.First<SitemapNode>(id); var oldUrl = node.Url; if (isDeleted) { if (!node.Id.HasDefaultValue()) { repository.Delete(node); UpdatedPageProperties(id.HasDefaultValue(), node.IsDeleted, oldUrl, url); } } else { node.Version = version; node.Title = title; node.Url = url; node.DisplayOrder = displayOrder; if (parentNode != null && !parentNode.Id.HasDefaultValue()) { node.ParentNode = parentNode; } else { node.ParentNode = parentId.HasDefaultValue() ? null : repository.First<SitemapNode>(parentId); } repository.Save(node); UpdatedPageProperties(id.HasDefaultValue(), node.IsDeleted, oldUrl, url); } return node; }
public void Serialize_SitemapNode_NewsReqiredTags() { SitemapNode sitemapNode = new SitemapNode("http://www.example.org/business/article55.html") { News = new SitemapNews(new NewsPublication("The Example Times", "en"), new DateTime(2014, 11, 5, 0, 0, 0, DateTimeKind.Utc), "Companies A, B in Merger Talks") }; _namespaces.Add(Namespaces.NewsPrefix, Namespaces.News); string result = _serializer.Serialize(sitemapNode); result.Should().BeXmlEquivalent("Samples/sitemap-node-news-required.xml"); }
/// <summary> /// Deletes the node without page update. /// </summary> /// <param name="node">The node.</param> public void DeleteNodeWithoutPageUpdate(SitemapNode node) { repository.Delete(node); }
private dynamic BuildNodeShape(SitemapNode node) { var childShapes = node.Children.Values.Select(BuildNodeShape).ToList(); return(Shape.Sitemap_Node(Title: node.Title, Url: node.Url, Children: childShapes)); }
public void ValidateUrls_SitemapNodeWithVideo() { SitemapNode sitemapNode = new SitemapNode("/some_video_landing_page.html") { Video = new SitemapVideo { ContentUrl = "/video123.flv", ThumbnailUrl = "/thumbs/123.jpg", PlayerUrl = new VideoPlayerUrl { Url = "/videoplayer.swf?video=123", }, Gallery = new VideoGallery { Url = "/gallery-1", }, Uploader = new VideoUploader { Info = "/users/grillymcgrillerson" } } }; _urlValidator.ValidateUrls(null, sitemapNode); sitemapNode.Video.ContentUrl.Should().Be("http://example.org/video123.flv"); sitemapNode.Video.ThumbnailUrl.Should().Be("http://example.org/thumbs/123.jpg"); sitemapNode.Video.PlayerUrl.Url.Should().Be("http://example.org/videoplayer.swf?video=123"); sitemapNode.Video.Gallery.Url.Should().Be("http://example.org/gallery-1"); sitemapNode.Video.Uploader.Info.Should().Be("http://example.org/users/grillymcgrillerson"); }
/// <summary> /// Saves the translations. /// </summary> /// <param name="translationUpdatedInDb"></param> /// <param name="sitemapNode">The sitemap node.</param> /// <param name="node">The node.</param> /// <param name="translationList"></param> private void SaveTranslations(out bool translationUpdatedInDb, SitemapNode sitemapNode, SitemapNodeViewModel node, List <SitemapNodeTranslation> translationList) { translationUpdatedInDb = false; var translations = translationList == null ? Repository.AsQueryable <SitemapNodeTranslation>().Where(translation => translation.Node.Id == sitemapNode.Id).ToList() : translationList.Where(translation => translation.Node.Id == sitemapNode.Id).ToList(); foreach (var model in node.Translations) { var saveIt = false; var translation = translations.FirstOrDefault(t => t.Id == model.Id); if (translation == null) { translation = translations.FirstOrDefault(t => t.Language.Id == model.LanguageId); if (translation != null) { throw new InvalidDataException(string.Format("Node {0} translation to language {1} already exists.", sitemapNode.Id, model.LanguageId)); } saveIt = true; translation = new SitemapNodeTranslation { Node = sitemapNode, Language = Repository.AsProxy <Language>(model.LanguageId), Title = model.Title, Macro = CmsConfiguration.EnableMacros ? model.Macro : null, UsePageTitleAsNodeTitle = model.UsePageTitleAsNodeTitle }; if (sitemapNode.Page == null) { translation.UsePageTitleAsNodeTitle = false; translation.Url = model.Url; translation.UrlHash = model.Url.UrlHash(); } } else { if (translation.Version != model.Version) { throw new ConcurrentDataException(translation); } if (translation.Title != model.Title) { saveIt = true; translation.Title = model.Title; } if (CmsConfiguration.EnableMacros && translation.Macro != model.Macro) { saveIt = true; translation.Macro = model.Macro; } if (sitemapNode.Page == null) { if (translation.Url != model.Url || translation.UsePageTitleAsNodeTitle) { saveIt = true; translation.UsePageTitleAsNodeTitle = false; translation.Url = model.Url; translation.UrlHash = model.Url.UrlHash(); } } else { if (translation.Url != null || translation.UrlHash != null) { saveIt = true; translation.Url = null; translation.UrlHash = null; } if (translation.UsePageTitleAsNodeTitle != model.UsePageTitleAsNodeTitle) { saveIt = true; translation.UsePageTitleAsNodeTitle = model.UsePageTitleAsNodeTitle; } } } if (saveIt) { Repository.Save(translation); translationUpdatedInDb = true; } } }
public ActionResult SiteMapXml() { DateTime value; string str; string empty; string str1; List <SitemapNode> sitemapNodes = new List <SitemapNode>(); string item = ConfigurationManager.AppSettings["SiteName"]; sitemapNodes.Add(new SitemapNode(string.Empty) { Url = item, ChangeFrequency = new ChangeFrequency?(ChangeFrequency.Always), Priority = new decimal?(1) }); IEnumerable <MenuLink> menuLinks = this._menuLinkService.FindBy((MenuLink x) => x.Status == 1, true); if (menuLinks.IsAny <MenuLink>()) { foreach (MenuLink menuLink in menuLinks) { SitemapNode sitemapNode = new SitemapNode(string.Empty) { Url = base.Url.Action("GetContent", "Menu", new { menu = menuLink.SeoUrl }, base.Request.Url.Scheme), ChangeFrequency = new ChangeFrequency?(ChangeFrequency.Daily), Priority = new decimal?(new decimal(8, 0, 0, false, 1)) }; if (menuLink.UpdatedDate.HasValue) { value = menuLink.UpdatedDate.Value; str1 = value.ToString("yyyy-MM-dd"); } else { str1 = string.Empty; } sitemapNode.LastModificationDate = str1; sitemapNodes.Add(sitemapNode); } } IOrderedEnumerable <Post> posts = from x in this._postService.FindBy((Post x) => x.Status == 1, true) orderby x.CreatedDate descending select x; if (posts.IsAny <Post>()) { foreach (Post post in posts) { SitemapNode sitemapNode1 = new SitemapNode(string.Empty) { Url = base.Url.Action("PostDetail", "Post", new { seoUrl = post.SeoUrl }, base.Request.Url.Scheme), ChangeFrequency = new ChangeFrequency?(ChangeFrequency.Daily), Priority = new decimal?(new decimal(5, 0, 0, false, 1)) }; if (post.UpdatedDate.HasValue) { value = post.UpdatedDate.Value; empty = value.ToString("yyyy-MM-dd"); } else { empty = string.Empty; } sitemapNode1.LastModificationDate = empty; sitemapNodes.Add(sitemapNode1); } } IOrderedEnumerable <News> news = from x in this._newsService.FindBy((News x) => x.Status == 1, true) orderby x.CreatedDate descending select x; if (news.IsAny <News>()) { foreach (News news1 in news) { SitemapNode sitemapNode2 = new SitemapNode(string.Empty) { Url = base.Url.Action("NewsDetail", "News", new { seoUrl = news1.SeoUrl }, base.Request.Url.Scheme), ChangeFrequency = new ChangeFrequency?(ChangeFrequency.Daily), Priority = new decimal?(new decimal(5, 0, 0, false, 1)) }; if (news1.UpdatedDate.HasValue) { value = news1.UpdatedDate.Value; str = value.ToString("yyyy-MM-dd"); } else { str = string.Empty; } sitemapNode2.LastModificationDate = str; sitemapNodes.Add(sitemapNode2); } } return(this._sitemapProvider.CreateSitemap(new SitemapModel(sitemapNodes))); }
/// <summary> /// Deletes the node. /// </summary> /// <param name="node">The node.</param> private void DeleteNode(SitemapNode node) { foreach (var childNode in node.ChildNodes) { DeleteNode(childNode); } repository.Delete(node); UpdatedPageProperties(false, true, node.Url, string.Empty); }
private static void Patch20181215(EntityManager entMan, EntityRelationManager relMan, RecordManager recMan) { var appSrv = new AppService(); #region << Create SDK App >> var sdkApp = new App() { Id = WEBVELLA_SDK_APP_ID, Name = WEBVELLA_SDK_APP_NAME, Label = "Software Development Kit", Description = "SDK & Development Tools", IconClass = "ti-settings", Author = "WebVella", Weight = 1000, Color = "#dc3545", Access = new List <Guid>() { SystemIds.AdministratorRoleId } }; appSrv.CreateApplication(sdkApp.Id, sdkApp.Name, sdkApp.Label, sdkApp.Description, sdkApp.IconClass, sdkApp.Author, sdkApp.Color, sdkApp.Weight, sdkApp.Access, DbContext.Current.Transaction); #endregion #region << Create App Sitemap Areas>> { var appArea = new SitemapArea() { Id = WEBVELLA_SDK_APP_AREA_DESIGN_ID, Name = "objects", Label = "Objects", Description = "Schema and Layout management", IconClass = "ti-ruler-pencil", Weight = 1, Color = "#2196F3" }; appSrv.CreateArea(appArea.Id, WEBVELLA_SDK_APP_ID, appArea.Name, appArea.Label, appArea.LabelTranslations, appArea.Description, appArea.DescriptionTranslations, appArea.IconClass, appArea.Color, appArea.Weight, appArea.ShowGroupNames, appArea.Access, DbContext.Current.Transaction); } { var appArea = new SitemapArea() { Id = WEBVELLA_SDK_APP_AREA_ACCESS_ID, Name = "access", Label = "Access", Description = "Manage users and roles", IconClass = "ti-key", Weight = 2, Color = "#673AB7" }; appSrv.CreateArea(appArea.Id, WEBVELLA_SDK_APP_ID, appArea.Name, appArea.Label, appArea.LabelTranslations, appArea.Description, appArea.DescriptionTranslations, appArea.IconClass, appArea.Color, appArea.Weight, appArea.ShowGroupNames, appArea.Access, DbContext.Current.Transaction); } { var appArea = new SitemapArea() { Id = WEBVELLA_SDK_APP_AREA_SERVER_ID, Name = "server", Label = "Server", Description = "Background jobs and maintenance", IconClass = "ti-server", Weight = 3, Color = "#F44336" }; appSrv.CreateArea(appArea.Id, WEBVELLA_SDK_APP_ID, appArea.Name, appArea.Label, appArea.LabelTranslations, appArea.Description, appArea.DescriptionTranslations, appArea.IconClass, appArea.Color, appArea.Weight, appArea.ShowGroupNames, appArea.Access, DbContext.Current.Transaction); } #endregion #region Create Sitemap Nodes >> //Design { var appNode = new SitemapNode() { Id = new Guid("5b132ac0-703e-4342-a13d-c7ff93d07a4f"), Name = "page", Label = "Pages", IconClass = "ti-file", Url = "/sdk/objects/page/l", Weight = 1, Type = SitemapNodeType.Url }; appSrv.CreateAreaNode(appNode.Id, WEBVELLA_SDK_APP_AREA_DESIGN_ID, appNode.Name, appNode.Label, appNode.LabelTranslations, appNode.IconClass, appNode.Url, (int)appNode.Type, appNode.EntityId, appNode.Weight, appNode.Access, DbContext.Current.Transaction); } { var appNode = new SitemapNode() { Id = new Guid("9b30bf96-67d9-4d20-bf07-e6ef1c44d553"), Name = "data_source", Label = "Data sources", IconClass = "ti-cloud-down", Url = "/sdk/objects/data_source/l/list", Weight = 2, Type = SitemapNodeType.Url }; appSrv.CreateAreaNode(appNode.Id, WEBVELLA_SDK_APP_AREA_DESIGN_ID, appNode.Name, appNode.Label, appNode.LabelTranslations, appNode.IconClass, appNode.Url, (int)appNode.Type, appNode.EntityId, appNode.Weight, appNode.Access, DbContext.Current.Transaction); } { var appNode = new SitemapNode() { Id = new Guid("02d75ea5-8fc6-4f95-9933-0eed6b36ca49"), Name = "application", Label = "Applications", IconClass = "ti-layout-grid2", Url = "/sdk/objects/application/l/list", Weight = 3, Type = SitemapNodeType.Url }; appSrv.CreateAreaNode(appNode.Id, WEBVELLA_SDK_APP_AREA_DESIGN_ID, appNode.Name, appNode.Label, appNode.LabelTranslations, appNode.IconClass, appNode.Url, (int)appNode.Type, appNode.EntityId, appNode.Weight, appNode.Access, DbContext.Current.Transaction); } { var appNode = new SitemapNode() { Id = new Guid("dfa7ec55-b55b-404f-b251-889f1d81df29"), Name = "entity", Label = "Entities", IconClass = "ti-server", Url = "/sdk/objects/entity/l", Weight = 4, Type = SitemapNodeType.Url }; appSrv.CreateAreaNode(appNode.Id, WEBVELLA_SDK_APP_AREA_DESIGN_ID, appNode.Name, appNode.Label, appNode.LabelTranslations, appNode.IconClass, appNode.Url, (int)appNode.Type, appNode.EntityId, appNode.Weight, appNode.Access, DbContext.Current.Transaction); } { var appNode = new SitemapNode() { Id = new Guid("4571de62-a817-4a94-8b49-4b230cc0d2ad"), Name = "codegen", Label = "Code generation", IconClass = "fa fa-code", Url = "/sdk/objects/codegen/a/codegen", Weight = 10, Type = SitemapNodeType.Url }; appSrv.CreateAreaNode(appNode.Id, WEBVELLA_SDK_APP_AREA_DESIGN_ID, appNode.Name, appNode.Label, appNode.LabelTranslations, appNode.IconClass, appNode.Url, (int)appNode.Type, appNode.EntityId, appNode.Weight, appNode.Access, DbContext.Current.Transaction); } //Access { var appNode = new SitemapNode() { Id = new Guid("ff578868-817e-433d-988f-bb8d4e9baa0d"), Name = "user", Label = "Users", IconClass = "ti-user", Url = "/sdk/access/user/l/list", Weight = 1, Type = SitemapNodeType.Url }; appSrv.CreateAreaNode(appNode.Id, WEBVELLA_SDK_APP_AREA_ACCESS_ID, appNode.Name, appNode.Label, appNode.LabelTranslations, appNode.IconClass, appNode.Url, (int)appNode.Type, appNode.EntityId, appNode.Weight, appNode.Access, DbContext.Current.Transaction); } { var appNode = new SitemapNode() { Id = new Guid("75567fc4-70e1-41a9-9e32-2e5b62636598"), Name = "role", Label = "Roles", IconClass = "fa fa-key", Url = "/sdk/access/role/l/list", Weight = 2, Type = SitemapNodeType.Url }; appSrv.CreateAreaNode(appNode.Id, WEBVELLA_SDK_APP_AREA_ACCESS_ID, appNode.Name, appNode.Label, appNode.LabelTranslations, appNode.IconClass, appNode.Url, (int)appNode.Type, appNode.EntityId, appNode.Weight, appNode.Access, DbContext.Current.Transaction); } //Server { var appNode = new SitemapNode() { Id = new Guid("396ec481-3b2e-461c-b514-743fb3252003"), Name = "job", Label = "Background jobs", IconClass = "ti-settings", Url = "/sdk/server/job/l/plan", Weight = 1, Type = SitemapNodeType.Url }; appSrv.CreateAreaNode(appNode.Id, WEBVELLA_SDK_APP_AREA_SERVER_ID, appNode.Name, appNode.Label, appNode.LabelTranslations, appNode.IconClass, appNode.Url, (int)appNode.Type, appNode.EntityId, appNode.Weight, appNode.Access, DbContext.Current.Transaction); } { var appNode = new SitemapNode() { Id = new Guid("78a29ac8-d2aa-4379-b990-08f7f164a895"), Name = "log", Label = "Logs", IconClass = "ti-notepad", Url = "/sdk/server/log/l/list", Weight = 2, Type = SitemapNodeType.Url }; appSrv.CreateAreaNode(appNode.Id, WEBVELLA_SDK_APP_AREA_SERVER_ID, appNode.Name, appNode.Label, appNode.LabelTranslations, appNode.IconClass, appNode.Url, (int)appNode.Type, appNode.EntityId, appNode.Weight, appNode.Access, DbContext.Current.Transaction); } #endregion }
private string SerializeSitemap(SitemapNode sitemapNode) { return(Serialize(new SitemapModel(new[] { sitemapNode }))); }
/// <summary> /// Saves the node. /// </summary> /// <param name="id">The id.</param> /// <param name="version">The version.</param> /// <param name="url">The URL.</param> /// <param name="title">The title.</param> /// <param name="displayOrder">The display order.</param> /// <param name="parentId">The parent id.</param> /// <param name="isDeleted">if set to <c>true</c> [is deleted].</param> /// <param name="parentNode">The parent node.</param> /// <returns> /// Updated or newly created sitemap node. /// </returns> public SitemapNode SaveNode(Guid id, int version, string url, string title, int displayOrder, Guid parentId, bool isDeleted = false, SitemapNode parentNode = null) { var node = id.HasDefaultValue() ? new SitemapNode() : repository.First <SitemapNode>(id); var oldUrl = node.Url; if (isDeleted) { if (!node.Id.HasDefaultValue()) { repository.Delete(node); UpdatedPageProperties(id.HasDefaultValue(), node.IsDeleted, oldUrl, url); } } else { node.Version = version; node.Title = title; node.Url = url; node.DisplayOrder = displayOrder; if (parentNode != null && !parentNode.Id.HasDefaultValue()) { node.ParentNode = parentNode; } else { node.ParentNode = parentId.HasDefaultValue() ? null : repository.First <SitemapNode>(parentId); } repository.Save(node); UpdatedPageProperties(id.HasDefaultValue(), node.IsDeleted, oldUrl, url); } return(node); }
public SitemapNode GetSitemapRoot() { // Create dictionary indexed by routes var routeSettings = GetRoutes().ToDictionary( k => k.Slug, v => v); var sitemapRoot = _cacheManager.Get("WebAdvanced.Sitemap.Root", ctx => { ctx.Monitor(_signals.When("WebAdvanced.Sitemap.Refresh")); var sitemap = new SitemapNode("Root", null); foreach (var provider in _routeProviders.OrderByDescending(p => p.Priority)) { var validRoutes = provider.GetDisplayRoutes() .Where(r => _routeFilters.All(filter => filter.AllowUrl(r.Url))) .AsEnumerable(); foreach (var item in validRoutes) { var alias = item.UrlAlias ?? item.Url; var slugs = alias.Split('/').ToArray(); var routeSetting = routeSettings.ContainsKey(slugs[0]) ? routeSettings[slugs[0]] : null; // Only add this to the sitemap if the route settings exist and accept it if (routeSetting == null || !routeSetting.Active || slugs.Count() > routeSetting.DisplayLevels) { continue; } int i = 0; SitemapNode currentNode = sitemap; while (i < slugs.Length) { var isLeaf = i == slugs.Length - 1; if (!currentNode.Children.ContainsKey(slugs[i])) { string name = isLeaf ? item.Title : slugs[i].SlugToTitle(); string url = isLeaf ? item.Url : null; currentNode.Children.Add(slugs[i], new SitemapNode(name, url)); } else if (isLeaf) // Only replace existing items if the current is a leaf { currentNode.Children[slugs[i]].Url = item.Url; // Keep current title if the over-riding one is empty when a custom route is over-riding a content route if (!string.IsNullOrWhiteSpace(item.Title)) { currentNode.Children[slugs[i]].Title = item.Title; } } currentNode = currentNode.Children[slugs[i]]; i++; } } } return(sitemap); }); return(sitemapRoot); }
/// <summary> /// Saves the child nodes. /// </summary> /// <param name="sitemap">The sitemap.</param> /// <param name="parentNode">The parent node.</param> /// <param name="nodesToSave">The nodes to save.</param> /// <param name="currentNodes">The current nodes.</param> /// <param name="createdNodes">The created nodes.</param> /// <param name="updatedNodes">The sitemap nodes.</param> /// <param name="deletedNodes">The deleted nodes.</param> private void SaveChildNodes( Module.Pages.Models.Sitemap sitemap, SitemapNode parentNode, IEnumerable<SaveSitemapNodeModel> nodesToSave, IList<SitemapNode> currentNodes, ref IList<SitemapNode> createdNodes, ref IList<SitemapNode> updatedNodes, ref IList<SitemapNode> deletedNodes) { if (nodesToSave == null) { return; } foreach (var nodeModel in nodesToSave) { var nodeToSave = currentNodes.FirstOrDefault(n => n.Id == nodeModel.Id && !n.IsDeleted); var isNew = nodeToSave == null; if (isNew) { nodeToSave = new SitemapNode { Id = nodeModel.Id.GetValueOrDefault(), Sitemap = sitemap, Translations = new List<Module.Pages.Models.SitemapNodeTranslation>() }; } else if (nodeModel.Version > 0) { nodeToSave.Version = nodeModel.Version; } nodeToSave.Page = nodeModel.PageId.HasValue ? repository.AsProxy<PageProperties>(nodeModel.PageId.Value) : null; nodeToSave.UsePageTitleAsNodeTitle = nodeModel.UsePageTitleAsNodeTitle; nodeToSave.Title = nodeModel.Title; nodeToSave.Url = nodeModel.Url; nodeToSave.UrlHash = !string.IsNullOrWhiteSpace(nodeModel.Url) ? nodeModel.Url.UrlHash() : null; nodeToSave.DisplayOrder = nodeModel.DisplayOrder; nodeToSave.Macro = nodeModel.Macro; nodeToSave.ParentNode = parentNode; repository.Save(nodeToSave); SaveTranslations(nodeModel, nodeToSave); if (isNew) { createdNodes.Add(nodeToSave); } else { updatedNodes.Add(nodeToSave); } SaveChildNodes(sitemap, nodeToSave, nodeModel.Nodes, currentNodes, ref createdNodes, ref updatedNodes, ref deletedNodes); } }
/// <summary> /// Saves the node list. /// </summary> /// <param name="sitemap"></param> /// <param name="nodes">The nodes.</param> /// <param name="parentNode">The parent node.</param> /// <param name="toList"></param> private void SaveNodeList(Models.Sitemap sitemap, IEnumerable <SitemapNodeViewModel> nodes, SitemapNode parentNode, List <SitemapNode> nodesToSearchIn) { if (nodes == null) { return; } foreach (var node in nodes) { var isDeleted = node.IsDeleted || (parentNode != null && parentNode.IsDeleted); var create = node.Id.HasDefaultValue() && !isDeleted; var update = !node.Id.HasDefaultValue() && !isDeleted; var delete = !node.Id.HasDefaultValue() && isDeleted; bool updatedInDB; var sitemapNode = SaveNodeIfUpdated(out updatedInDB, sitemap, node.Id, node.Version, node.Url, node.Title, node.PageId, node.UsePageTitleAsNodeTitle, node.DisplayOrder, node.ParentId, isDeleted, parentNode, nodesToSearchIn); if (create && updatedInDB) { createdNodes.Add(sitemapNode); } else if (update && updatedInDB) { updatedNodes.Add(sitemapNode); } else if (delete && updatedInDB) { deletedNodes.Add(sitemapNode); } SaveNodeList(sitemap, node.ChildNodes, sitemapNode, nodesToSearchIn); } }
/// <summary> /// Saves the node (does not archive sitemap). /// </summary> /// <param name="nodeUpdated"></param> /// <param name="sitemap">The sitemap.</param> /// <param name="nodeId">The id.</param> /// <param name="version">The version.</param> /// <param name="url">The URL.</param> /// <param name="title">The title.</param> /// <param name="macro">The macro.</param> /// <param name="pageId">The page identifier.</param> /// <param name="usePageTitleAsNodeTitle">if set to <c>true</c> [use page title as node title].</param> /// <param name="displayOrder">The display order.</param> /// <param name="parentId">The parent id.</param> /// <param name="isDeleted">if set to <c>true</c> node is deleted.</param> /// <param name="parentNode">The parent node.</param> /// <param name="nodeList"></param> /// <returns> /// Updated or newly created sitemap node. /// </returns> public SitemapNode SaveNode(out bool nodeUpdated, Sitemap sitemap, Guid nodeId, int version, string url, string title, string macro, Guid pageId, bool usePageTitleAsNodeTitle, int displayOrder, Guid parentId, bool isDeleted = false, SitemapNode parentNode = null, List<SitemapNode> nodeList = null) { nodeUpdated = false; var node = nodeId.HasDefaultValue() ? new SitemapNode() : nodeList != null ? nodeList.First(n => n.Id == nodeId) : repository.First<SitemapNode>(nodeId); if (isDeleted) { if (!node.Id.HasDefaultValue()) { repository.Delete(node); nodeUpdated = true; } } else { var updated = false; if (node.Sitemap == null) { node.Sitemap = sitemap; } if (node.Title != title) { updated = true; node.Title = title; } if (node.Page != (!pageId.HasDefaultValue() ? repository.AsProxy<PageProperties>(pageId) : null)) { updated = true; node.Page = !pageId.HasDefaultValue() ? repository.AsProxy<PageProperties>(pageId) : null; } if (node.UsePageTitleAsNodeTitle != (!pageId.HasDefaultValue() && usePageTitleAsNodeTitle)) { updated = true; node.UsePageTitleAsNodeTitle = !pageId.HasDefaultValue() && usePageTitleAsNodeTitle; } if (node.Url != (node.Page != null ? null : url)) { updated = true; node.Url = node.Page != null ? null : url; node.UrlHash = node.Page != null ? null : url.UrlHash(); } if (node.DisplayOrder != displayOrder) { updated = true; node.DisplayOrder = displayOrder; } SitemapNode newParent; if (parentNode != null && !parentNode.Id.HasDefaultValue()) { newParent = parentNode; } else { newParent = parentId.HasDefaultValue() ? null : repository.AsProxy<SitemapNode>(parentId); } if (node.ParentNode != newParent) { updated = true; node.ParentNode = newParent; } if (cmsConfiguration.EnableMacros && node.Macro != macro) { node.Macro = macro; updated = true; } if (updated) { node.Version = version; repository.Save(node); nodeUpdated = true; } } return node; }
private SitemapNode SaveNodeIfUpdated(out bool nodeUpdated, Models.Sitemap sitemap, Guid nodeId, int version, string url, string title, Guid pageId, bool usePageTitleAsNodeTitle, int displayOrder, Guid parentId, bool isDeleted = false, SitemapNode parentNode = null, List <SitemapNode> nodesToSearchIn = null) { nodeUpdated = false; var node = nodeId.HasDefaultValue() ? new SitemapNode() : nodesToSearchIn != null?nodesToSearchIn.First(n => n.Id == nodeId) : Repository.First <SitemapNode>(nodeId); if (isDeleted) { if (!node.Id.HasDefaultValue()) { Repository.Delete(node); nodeUpdated = true; } } else { var updated = false; if (node.Sitemap == null) { node.Sitemap = sitemap; } if (node.Title != title) { updated = true; node.Title = title; } if (node.Page != (!pageId.HasDefaultValue() ? Repository.AsProxy <PageProperties>(pageId) : null)) { updated = true; node.Page = !pageId.HasDefaultValue() ? Repository.AsProxy <PageProperties>(pageId) : null; } if (node.UsePageTitleAsNodeTitle != (!pageId.HasDefaultValue() && usePageTitleAsNodeTitle)) { updated = true; node.UsePageTitleAsNodeTitle = !pageId.HasDefaultValue() && usePageTitleAsNodeTitle; } if (node.Url != (node.Page != null ? null : url)) { updated = true; node.Url = node.Page != null ? null : url; node.UrlHash = node.Page != null ? null : url.UrlHash(); } if (node.DisplayOrder != displayOrder) { updated = true; node.DisplayOrder = displayOrder; } SitemapNode newParent; if (parentNode != null && !parentNode.Id.HasDefaultValue()) { newParent = parentNode; } else { newParent = parentId.HasDefaultValue() ? null : Repository.First <SitemapNode>(parentId); } if (node.ParentNode != newParent) { updated = true; node.ParentNode = newParent; } if (updated) { node.Version = version; Repository.Save(node); nodeUpdated = true; } } return(node); }
/// <summary> /// Adds the nodes. /// </summary> /// <param name="sitemap">The sitemap.</param> /// <param name="archivedNodes">The archived nodes.</param> /// <param name="parentNode">The parent node.</param> /// <returns> /// Sitemap node list. /// </returns> private static List<SitemapNode> AddNodes(Sitemap sitemap, IEnumerable<ArchivedNode> archivedNodes, SitemapNode parentNode) { var nodes = new List<SitemapNode>(); foreach (var archivedNode in archivedNodes) { var node = new SitemapNode { Title = archivedNode.Title, Url = archivedNode.Url, Page = !archivedNode.PageId.HasDefaultValue() ? new PageProperties { Id = archivedNode.PageId } : null, UsePageTitleAsNodeTitle = archivedNode.UsePageTitleAsNodeTitle, DisplayOrder = archivedNode.DisplayOrder, ParentNode = parentNode, Macro = archivedNode.Macro }; node.ChildNodes = AddNodes(sitemap, archivedNode.Nodes, node); node.Translations = AddTranslations(archivedNode, node); nodes.Add(node); } nodes.ForEach(sitemap.Nodes.Add); return nodes.OrderBy(node => node.DisplayOrder).ToList(); }
public ActionResult SiteMapXml() { DateTime value; string str; string empty; string str1; var sitemapNodes = new List <SitemapNode>(); var item = ConfigurationManager.AppSettings["SiteName"]; sitemapNodes.Add(new SitemapNode(string.Empty) { Url = item, ChangeFrequency = ChangeFrequency.Always, Priority = 1 }); var menuLinks = _menuLinkService.FindBy(x => x.Status == 1, true); if (menuLinks.IsAny()) { foreach (var menuLink in menuLinks) { var sitemapNode = new SitemapNode(string.Empty) { Url = Url.Action("GetContent", "Menu", new { menu = menuLink.SeoUrl }, Request.Url.Scheme), ChangeFrequency = ChangeFrequency.Daily, Priority = new decimal(8, 0, 0, false, 1) }; if (menuLink.UpdatedDate.HasValue) { value = menuLink.UpdatedDate.Value; str1 = value.ToString("yyyy-MM-dd"); } else { str1 = string.Empty; } sitemapNode.LastModificationDate = str1; sitemapNodes.Add(sitemapNode); } } var posts = from x in _postService.FindBy(x => x.Status == 1, true) orderby x.CreatedDate descending select x; if (posts.IsAny()) { foreach (var post in posts) { var sitemapNode1 = new SitemapNode(string.Empty) { Url = Url.Action("PostDetail", "Post", new { seoUrl = post.SeoUrl }, Request.Url.Scheme), ChangeFrequency = ChangeFrequency.Daily, Priority = new decimal(5, 0, 0, false, 1) }; if (post.UpdatedDate.HasValue) { value = post.UpdatedDate.Value; empty = value.ToString("yyyy-MM-dd"); } else { empty = string.Empty; } sitemapNode1.LastModificationDate = empty; sitemapNodes.Add(sitemapNode1); } } var news = from x in _newsService.FindBy(x => x.Status == 1, true) orderby x.CreatedDate descending select x; if (news.IsAny()) { foreach (var news1 in news) { var sitemapNode2 = new SitemapNode(string.Empty) { Url = Url.Action("NewsDetail", "News", new { seoUrl = news1.SeoUrl }, Request.Url.Scheme), ChangeFrequency = ChangeFrequency.Daily, Priority = new decimal(5, 0, 0, false, 1) }; if (news1.UpdatedDate.HasValue) { value = news1.UpdatedDate.Value; str = value.ToString("yyyy-MM-dd"); } else { str = string.Empty; } sitemapNode2.LastModificationDate = str; sitemapNodes.Add(sitemapNode2); } } return(_sitemapProvider.CreateSitemap(new SitemapModel(sitemapNodes))); }
/// <summary> /// Restores the nodes. /// </summary> /// <param name="sitemap">The sitemap.</param> /// <param name="parentNode">The parent node.</param> /// <param name="childNodes">The child nodes.</param> private void RestoreTheNodes(Sitemap sitemap, SitemapNode parentNode, IEnumerable<SitemapNode> childNodes) { foreach (var node in childNodes) { var restoredNode = new SitemapNode { Sitemap = sitemap, ParentNode = parentNode, Title = node.Title, UsePageTitleAsNodeTitle = node.UsePageTitleAsNodeTitle, Macro = node.Macro, }; if (node.Page != null) { var node1 = node; var page = repository.FirstOrDefault<PageProperties>(properties => properties.Id == node1.Page.Id && !properties.IsDeleted); restoredNode.Page = page; restoredNode.Url = page != null ? null : node.Url; restoredNode.UrlHash = page != null ? null : node.UrlHash; } else { restoredNode.Page = null; restoredNode.Url = node.Url; restoredNode.UrlHash = node.UrlHash; } repository.Save(restoredNode); foreach (var translation in node.Translations) { var translation1 = translation; var language = repository.FirstOrDefault<Language>(l => l.Id == translation1.Language.Id && !l.IsDeleted); if (language == null) { continue; } var restoredTranslation = new SitemapNodeTranslation { Node = restoredNode, Language = language, Title = translation.Title, UsePageTitleAsNodeTitle = translation.UsePageTitleAsNodeTitle, Macro = translation.Macro }; if (restoredNode.Page == null) { restoredTranslation.Url = restoredNode.Url; restoredTranslation.UrlHash = restoredNode.Url.UrlHash(); } repository.Save(restoredTranslation); } RestoreTheNodes(sitemap, restoredNode, node.ChildNodes); } }
/// <summary> /// Occurs when the process of sitemap parsing has finished. /// </summary> /// <param name="url">Website URL.</param> /// <param name="sitemap">Parsed sitemap.</param> public void OnCompleted(string url, SitemapNode sitemap) { SitemapManager.Current.OnCompleted(url, sitemap); }
public void Serialize_SitemapNode_ImageRequiredTags() { SitemapNode sitemapNode = new SitemapNode("abc") { Images = new List<SitemapImage> { new SitemapImage("image1"), new SitemapImage("image2") } }; _namespaces.Add(Namespaces.ImagePrefix, Namespaces.Image); string result = _serializer.Serialize(sitemapNode); result.Should().BeXmlEquivalent("Samples/sitemap-node-image-required.xml"); }
/// <summary> /// Occurs when the process of sitemap parsing has finished. /// </summary> /// <param name="url">Website URL.</param> /// <param name="sitemap">Parsed sitemap.</param> private void OnCompleted(string url, SitemapNode sitemap) { OnProgress(url, 100).Result = sitemap; }
public void Serialize_SitemapNode_NewsAllTags() { SitemapNode sitemapNode = new SitemapNode("http://www.example.org/business/article55.html") { News = new SitemapNews(new NewsPublication("The Example Times", "en"), new DateTime(2014, 11, 5, 0, 0, 0, DateTimeKind.Utc), "Companies A, B in Merger Talks") { Access = NewsAccess.Subscription, Genres = "PressRelease, Blog", Keywords = "business, merger, acquisition, A, B", StockTickers = "NASDAQ:A, NASDAQ:B" } }; _namespaces.Add(Namespaces.NewsPrefix, Namespaces.News); string result = _serializer.Serialize(sitemapNode); result.Should().BeXmlEquivalent("Samples/sitemap-node-news-all.xml"); }
/// <summary> /// Saves the node (does not archive sitemap). /// </summary> /// <param name="nodeUpdated"></param> /// <param name="sitemap">The sitemap.</param> /// <param name="nodeId">The id.</param> /// <param name="version">The version.</param> /// <param name="url">The URL.</param> /// <param name="title">The title.</param> /// <param name="macro">The macro.</param> /// <param name="pageId">The page identifier.</param> /// <param name="usePageTitleAsNodeTitle">if set to <c>true</c> [use page title as node title].</param> /// <param name="displayOrder">The display order.</param> /// <param name="parentId">The parent id.</param> /// <param name="isDeleted">if set to <c>true</c> node is deleted.</param> /// <param name="parentNode">The parent node.</param> /// <param name="nodeList"></param> /// <returns> /// Updated or newly created sitemap node. /// </returns> public SitemapNode SaveNode(out bool nodeUpdated, Sitemap sitemap, Guid nodeId, int version, string url, string title, string macro, Guid pageId, bool usePageTitleAsNodeTitle, int displayOrder, Guid parentId, bool isDeleted = false, SitemapNode parentNode = null, List <SitemapNode> nodeList = null) { nodeUpdated = false; var node = nodeId.HasDefaultValue() ? new SitemapNode() : nodeList != null?nodeList.First(n => n.Id == nodeId) : repository.First <SitemapNode>(nodeId); if (isDeleted) { if (!node.Id.HasDefaultValue()) { repository.Delete(node); nodeUpdated = true; } } else { var updated = false; if (node.Sitemap == null) { node.Sitemap = sitemap; } if (node.Title != title) { updated = true; node.Title = title; } if (node.Page != (!pageId.HasDefaultValue() ? repository.AsProxy <PageProperties>(pageId) : null)) { updated = true; node.Page = !pageId.HasDefaultValue() ? repository.AsProxy <PageProperties>(pageId) : null; } if (node.UsePageTitleAsNodeTitle != (!pageId.HasDefaultValue() && usePageTitleAsNodeTitle)) { updated = true; node.UsePageTitleAsNodeTitle = !pageId.HasDefaultValue() && usePageTitleAsNodeTitle; } if (node.Url != (node.Page != null ? null : url)) { updated = true; node.Url = node.Page != null ? null : url; node.UrlHash = node.Page != null ? null : url.UrlHash(); } if (node.DisplayOrder != displayOrder) { updated = true; node.DisplayOrder = displayOrder; } SitemapNode newParent; if (parentNode != null && !parentNode.Id.HasDefaultValue()) { newParent = parentNode; } else { newParent = parentId.HasDefaultValue() ? null : repository.AsProxy <SitemapNode>(parentId); } if (node.ParentNode != newParent) { updated = true; node.ParentNode = newParent; } if (cmsConfiguration.EnableMacros && node.Macro != macro) { node.Macro = macro; updated = true; } if (updated) { node.Version = version; repository.Save(node); nodeUpdated = true; } } return(node); }
public void Serialize_SitemapNode_RequiredTegs() { SitemapNode sitemapNode = new SitemapNode("abc"); string result = _serializer.Serialize(sitemapNode); result.Should().BeXmlEquivalent("Samples/sitemap-node-required.xml"); }
/// <summary> /// Adds the nodes. /// </summary> /// <param name="sitemap">The sitemap.</param> /// <param name="archivedNodes">The archived nodes.</param> /// <param name="parentNode">The parent node.</param> /// <returns> /// Sitemap node list. /// </returns> private static List <SitemapNode> AddNodes(Sitemap sitemap, IEnumerable <ArchivedNode> archivedNodes, SitemapNode parentNode) { var nodes = new List <SitemapNode>(); foreach (var archivedNode in archivedNodes) { var node = new SitemapNode { Title = archivedNode.Title, Url = archivedNode.Url, Page = !archivedNode.PageId.HasDefaultValue() ? new PageProperties { Id = archivedNode.PageId } : null, UsePageTitleAsNodeTitle = archivedNode.UsePageTitleAsNodeTitle, DisplayOrder = archivedNode.DisplayOrder, ParentNode = parentNode, Macro = archivedNode.Macro }; node.ChildNodes = AddNodes(sitemap, archivedNode.Nodes, node); node.Translations = AddTranslations(archivedNode, node); nodes.Add(node); } nodes.ForEach(sitemap.Nodes.Add); return(nodes.OrderBy(node => node.DisplayOrder).ToList()); }
public void Serialize_SitemapNode_VideoRequiredTags() { SitemapNode sitemapNode = new SitemapNode("http://www.example.com/videos/some_video_landing_page.html") { Video = new SitemapVideo("Grilling steaks for summer", "Alkis shows you how to get perfectly done steaks every time", "http://www.example.com/thumbs/123.jpg", "http://www.example.com/video123.flv") }; _namespaces.Add(Namespaces.VideoPrefix, Namespaces.Video); string result = _serializer.Serialize(sitemapNode); result.Should().BeXmlEquivalent("Samples/sitemap-node-video-required.xml"); }
/// <summary> /// Adds the translations. /// </summary> /// <param name="archivedNode">The archived node.</param> /// <param name="node">The node.</param> /// <returns>Archived node translation list.</returns> private static IList <SitemapNodeTranslation> AddTranslations(ArchivedNode archivedNode, SitemapNode node) { var translations = new List <SitemapNodeTranslation>(); if (archivedNode.Translations != null) { foreach (var translation in archivedNode.Translations) { translations.Add(new SitemapNodeTranslation { Node = node, Language = new Language { Id = translation.LanguageId }, Title = translation.Title, Url = translation.Url, UsePageTitleAsNodeTitle = translation.UsePageTitleAsNodeTitle, Macro = translation.Macro }); } } return(translations); }
public void Serialize_SitemapNode_ImageAllTags() { SitemapNode sitemapNode = new SitemapNode("abc") { Images = new List<SitemapImage> { new SitemapImage("http://example.com/image.jpg") { Caption = "Photo caption", Location = "Limerick, Ireland", License = "http://choosealicense.com/licenses/unlicense/", Title = "Photo Title" } } }; _namespaces.Add(Namespaces.ImagePrefix, Namespaces.Image); string result = _serializer.Serialize(sitemapNode); result.Should().BeXmlEquivalent("Samples/sitemap-node-image-all.xml"); }
/// <summary> /// Saves the node list. /// </summary> /// <param name="sitemap">The sitemap.</param> /// <param name="nodes">The nodes.</param> /// <param name="parentNode">The parent node.</param> /// <param name="nodeList"></param> /// <param name="translationList"></param> private void SaveNodeList(Models.Sitemap sitemap, IEnumerable <SitemapNodeViewModel> nodes, SitemapNode parentNode, List <SitemapNode> nodeList, List <SitemapNodeTranslation> translationList) { if (nodes == null) { return; } foreach (var node in nodes) { var isDeleted = node.IsDeleted || (parentNode != null && parentNode.IsDeleted); var create = node.Id.HasDefaultValue() && !isDeleted; var update = !node.Id.HasDefaultValue() && !isDeleted; var delete = !node.Id.HasDefaultValue() && isDeleted; bool updatedInDB; var translationUpdatedInDB = false; var sitemapNode = SitemapService.SaveNode(out updatedInDB, sitemap, node.Id, node.Version, node.Url, node.Title, node.Macro, node.PageId, node.UsePageTitleAsNodeTitle, node.DisplayOrder, node.ParentId, isDeleted, parentNode, nodeList); if ((create || update) && (node.Translations != null && node.Translations.Count > 0)) { SaveTranslations(out translationUpdatedInDB, sitemapNode, node, translationList); } if (create && (updatedInDB || translationUpdatedInDB)) { createdNodes.Add(sitemapNode); } else if (update && (updatedInDB || translationUpdatedInDB)) { updatedNodes.Add(sitemapNode); } else if (delete && updatedInDB) { deletedNodes.Add(sitemapNode); RemoveTranslations(sitemapNode); } SaveNodeList(sitemap, node.ChildNodes, sitemapNode, nodeList, translationList); } }