/// <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); }
public void CreateTables() { List <PageTranslationViewModel> pageTranslationList = new List <PageTranslationViewModel>(); IEnumerable <PageNameModel> pageList = _coreService.LoadModel <PageNameModel>(conName: HttpContext.Current.Session["ConString"].ToString()); var _controllers = RootController.ControllerTypes; foreach (var item in pageList) { PageTranslationViewModel m = new PageTranslationViewModel(); m.PageName = item.PageName; m.PageName_Key = item.PageName_Key; var cMethods = _controllers.FirstOrDefault(c => c.Name.Replace("Controller", "") == item.PageName)?.GetMethods(); if (cMethods != null) { foreach (var a in cMethods) { var auth = (AuthenticateAttribute)a.GetCustomAttributes(typeof(AuthenticateAttribute), inherit: true).FirstOrDefault(); if (auth != null) { m.UIName = auth.PermissionKey; } } } else { m.UIName = item.PageName; } pageTranslationList.Add(m); } pageUI = pageTranslationList; }
/// <summary> /// Updates page sitemap nodes. /// </summary> private void UpdateSitemapNodes(DeletePageViewModel model, PageProperties page, IList <SitemapNode> sitemapNodes, Dictionary <Sitemap, bool> sitemaps, List <Language> languages, IList <SitemapNode> updatedNodes, IList <SitemapNode> deletedNodes) { if (sitemapNodes != null) { // Archive sitemaps before update. sitemaps.Select(pair => pair.Key).ToList().ForEach(sitemap => sitemapService.ArchiveSitemap(sitemap.Id)); foreach (var node in sitemapNodes) { if (!node.IsDeleted) { if (model.UpdateSitemap && sitemaps[node.Sitemap]) { // Delete sitemap node. sitemapService.DeleteNode(node, ref deletedNodes); } else { // Unlink sitemap node. if (node.Page != null && node.Page.Id == page.Id) { node.Page = null; node.Title = node.UsePageTitleAsNodeTitle ? page.Title : node.Title; node.Url = page.PageUrl; node.UrlHash = page.PageUrlHash; repository.Save(node); updatedNodes.Add(node); IEnumerable <PageTranslationViewModel> pageTranslations; if (page.LanguageGroupIdentifier.HasValue && !page.LanguageGroupIdentifier.Value.HasDefaultValue()) { pageTranslations = GetPageTranslations(page.LanguageGroupIdentifier.Value); } else { pageTranslations = new PageTranslationViewModel[0]; } // Assigned node URL and title is taken from default language, if such exists. var defaultPageTranslation = pageTranslations.FirstOrDefault(p => !p.LanguageId.HasValue); if (defaultPageTranslation != null) { node.Url = defaultPageTranslation.PageUrl; node.UrlHash = defaultPageTranslation.PageUrlHash; if (node.UsePageTitleAsNodeTitle) { node.Title = defaultPageTranslation.Title; } } // Update sitemap node translations. if (node.Translations == null) { node.Translations = new List <SitemapNodeTranslation>(); } node.Translations.ForEach( t => { var pageTranslation = GetPageTranslation(pageTranslations, t.Language.Id, node, page); if (t.UsePageTitleAsNodeTitle) { t.Title = pageTranslation.Title; } t.UsePageTitleAsNodeTitle = false; t.Url = pageTranslation.PageUrl; t.UrlHash = pageTranslation.PageUrlHash; }); // Create non-existing node translations for each language. languages.Where(language => node.Translations.All(nt => nt.Language.Id != language.Id)) .ForEach(language => { var pageTranslation = GetPageTranslation(pageTranslations, language.Id, node, page); var nodeTranslation = new SitemapNodeTranslation { Language = language, Node = node, UsePageTitleAsNodeTitle = false, Title = pageTranslation.Title, Url = pageTranslation.PageUrl, UrlHash = pageTranslation.PageUrlHash }; node.Translations.Add(nodeTranslation); }); } } } } } }