예제 #1
0
        /// <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);
        }
예제 #2
0
        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;
        }
예제 #3
0
        /// <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);
                                });
                            }
                        }
                    }
                }
            }
        }