Esempio n. 1
0
        public ActionResult DeleteSitemapNode(SitemapNodeViewModel node)
        {
            var success = GetCommand <DeleteSitemapNodeCommand>().ExecuteCommand(node);

            if (success)
            {
                Messages.AddSuccess(NavigationGlobalization.Sitemap_NodeDeletedSuccessfully_Message);
            }

            return(Json(new WireJson(success)));
        }
Esempio n. 2
0
        private bool AddToSearchResults(SitemapNodeViewModel model, string search)
        {
            if (ContainsSearchQuery(model.Title, search) || ContainsSearchQuery(model.Url, search))
            {
                return(true);
            }

            foreach (var childModel in model.ChildNodes)
            {
                var result = AddToSearchResults(childModel, search);
                if (result)
                {
                    return(true);
                }
            }

            return(false);
        }
Esempio n. 3
0
        public ActionResult SaveSitemapNode(SitemapNodeViewModel node)
        {
            if (ModelState.IsValid)
            {
                var response = GetCommand <SaveSitemapNodeCommand>().ExecuteCommand(node);
                if (response != null)
                {
                    if (node.Id.HasDefaultValue())
                    {
                        Messages.AddSuccess(NavigationGlobalization.Sitemap_NodeCreatedSuccessfully_Message);
                    }

                    return(Json(new WireJson {
                        Success = true, Data = response
                    }));
                }
            }

            return(Json(new WireJson {
                Success = false
            }));
        }
Esempio n. 4
0
        /// <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;
                }
            }
        }
Esempio n. 5
0
        /// <summary>
        /// Gets the sitemap nodes in hierarchy.
        /// </summary>
        /// <param name="enableMultilanguage">if set to <c>true</c> multi-language is enabled.</param>
        /// <param name="sitemapNodes">The sitemap nodes.</param>
        /// <param name="allNodes">All nodes.</param>
        /// <param name="languageIds">The languages.</param>
        /// <param name="pages">The pages.</param>
        /// <returns>
        /// The list with all root nodes.
        /// </returns>
        public static List <SitemapNodeViewModel> GetSitemapNodesInHierarchy(
            bool enableMultilanguage, IList <SitemapNode> sitemapNodes, IList <SitemapNode> allNodes, List <Guid> languageIds, List <PageData> pages)
        {
            var nodeList = new List <SitemapNodeViewModel>();

            foreach (var node in sitemapNodes.OrderBy(node => node.DisplayOrder))
            {
                var linkedPage = node.Page != null && !node.Page.IsDeleted
                                     ? pages.FirstOrDefault(p => p.Id == node.Page.Id)
                                 ?? new PageData
                {
                    Id                      = node.Page.Id,
                    Title                   = node.Page.Title,
                    Url                     = node.Page.PageUrl,
                    IsPublished             = node.Page.Status == PageStatus.Published,
                    LanguageId              = node.Page.Language != null ? node.Page.Language.Id : (Guid?)null,
                    LanguageGroupIdentifier = node.Page.LanguageGroupIdentifier
                }
                                     : null;

                var nodeViewModel = new SitemapNodeViewModel
                {
                    Id      = node.Id,
                    Version = node.Version,
                    Title   = linkedPage != null && node.UsePageTitleAsNodeTitle ? linkedPage.Title : node.Title,
                    UsePageTitleAsNodeTitle = node.UsePageTitleAsNodeTitle,
                    Url          = linkedPage != null ? linkedPage.Url : node.Url,
                    PageId       = linkedPage != null ? linkedPage.Id : Guid.Empty,
                    DisplayOrder = node.DisplayOrder,
                    ChildNodes   = GetSitemapNodesInHierarchy(enableMultilanguage, allNodes.Where(f => f.ParentNode == node).ToList(), allNodes, languageIds, pages),
                    Macro        = node.Macro
                };

                if (enableMultilanguage)
                {
                    nodeViewModel.Translations = new List <SitemapNodeTranslationViewModel>();

                    node.Translations.Distinct()
                    .Select(t => new SitemapNodeTranslationViewModel
                    {
                        Id         = t.Id,
                        LanguageId = t.Language.Id,
                        Title      = t.Title,
                        UsePageTitleAsNodeTitle = t.UsePageTitleAsNodeTitle,
                        Url     = t.Url,
                        Version = t.Version,
                        Macro   = t.Macro
                    })
                    .ToList()
                    .ForEach(nodeViewModel.Translations.Add);

                    if (linkedPage != null)
                    {
                        // Setup default language.
                        if (!linkedPage.LanguageId.HasValue)
                        {
                            nodeViewModel.Url = linkedPage.Url;
                            if (nodeViewModel.UsePageTitleAsNodeTitle)
                            {
                                nodeViewModel.Title = linkedPage.Title;
                            }
                        }
                        else if (linkedPage.LanguageGroupIdentifier.HasValue)
                        {
                            var pageTranslation = pages.FirstOrDefault(p => p.LanguageGroupIdentifier.HasValue &&
                                                                       p.LanguageGroupIdentifier.Value == linkedPage.LanguageGroupIdentifier.Value &&
                                                                       (!p.LanguageId.HasValue || p.LanguageId.Value.HasDefaultValue()));
                            if (pageTranslation != null)
                            {
                                nodeViewModel.Url = pageTranslation.Url;
                                if (nodeViewModel.UsePageTitleAsNodeTitle)
                                {
                                    nodeViewModel.Title = pageTranslation.Title;
                                }
                            }
                        }

                        // Setup other languages.
                        foreach (var languageId in languageIds)
                        {
                            var translationViewModel = nodeViewModel.Translations.FirstOrDefault(t => t.LanguageId == languageId);
                            if (translationViewModel == null)
                            {
                                translationViewModel = new SitemapNodeTranslationViewModel
                                {
                                    Id         = Guid.Empty,
                                    LanguageId = languageId,
                                    Title      = nodeViewModel.Title,
                                    Url        = nodeViewModel.Url,
                                    UsePageTitleAsNodeTitle = true,
                                    Version = 0,
                                    Macro   = string.Empty
                                };
                                nodeViewModel.Translations.Add(translationViewModel);
                            }

                            var title = nodeViewModel.Title;
                            var url   = nodeViewModel.Url;

                            if (linkedPage.LanguageId != null && linkedPage.LanguageId == languageId)
                            {
                                title = linkedPage.Title;
                                url   = linkedPage.Url;
                            }
                            else if (linkedPage.LanguageGroupIdentifier.HasValue)
                            {
                                var pageTranslation = pages.FirstOrDefault(p => p.LanguageGroupIdentifier.HasValue &&
                                                                           p.LanguageGroupIdentifier.Value == linkedPage.LanguageGroupIdentifier.Value &&
                                                                           p.LanguageId.HasValue &&
                                                                           p.LanguageId.Value == languageId);
                                if (pageTranslation != null)
                                {
                                    title = pageTranslation.Title;
                                    url   = pageTranslation.Url;
                                }
                            }

                            translationViewModel.Url = url;
                            if (translationViewModel.UsePageTitleAsNodeTitle)
                            {
                                translationViewModel.Title = title;
                            }
                        }
                    }
                }

                nodeList.Add(nodeViewModel);
            }

            return(nodeList);
        }