private void ProvisionStructuralNavigationNodes(Web web, TokenParser parser, Enums.NavigationType navigationType, Model.NavigationNodeCollection nodes, PnPMonitoredScope scope, string parentNodeTitle = null)
        {
            foreach (var node in nodes)
            {
                var navNode = web.AddNavigationNode(
                    parser.ParseString(node.Title),
                    new Uri(parser.ParseString(node.Url), UriKind.RelativeOrAbsolute),
                    parser.ParseString(parentNodeTitle),
                    navigationType,
                    node.IsExternal);

                ProvisionStructuralNavigationNodes(
                    web,
                    parser,
                    navigationType,
                    node.NavigationNodes,
                    scope,
                    parser.ParseString(node.Title));

#if !SP2013
                if (node.Title.ContainsResourceToken())
                {
                    navNode.LocalizeNavigationNode(web, node.Title, parser, scope);
                }
#endif
            }
        }
        private void ProvisionStructuralNavigationNodes(Web web, TokenParser parser, Enums.NavigationType navigationType, Model.NavigationNodeCollection nodes, String parentNodeTitle = null)
        {
            foreach (var node in nodes)
            {
                web.AddNavigationNode(
                    node.Title,
                    new Uri(parser.ParseString(node.Url), UriKind.RelativeOrAbsolute),
                    parentNodeTitle,
                    navigationType,
                    node.IsExternal);

                ProvisionStructuralNavigationNodes(
                    web,
                    parser,
                    navigationType,
                    node.NavigationNodes,
                    node.Title);
            }
        }
Exemple #3
0
        private void ProvisionStructuralNavigationNodes(Web web, TokenParser parser, Enums.NavigationType navigationType, Model.NavigationNodeCollection nodes, PnPMonitoredScope scope, string parentNodeTitle = null, string l1ParentNodeTitle = null)
        {
            foreach (var node in nodes)
            {
                try
                {
                    string fileUrl = ReplaceFileUniqueToken(web, parser.ParseString(node.Url));

                    var navNode = web.AddNavigationNode(
                        parser.ParseString(node.Title),
                        new Uri(fileUrl, UriKind.RelativeOrAbsolute),
                        parser.ParseString(parentNodeTitle),
                        navigationType,
                        node.IsExternal,
                        l1ParentNodeTitle: l1ParentNodeTitle
                        );

#if !SP2013
                    if (node.Title.ContainsResourceToken())
                    {
                        navNode.LocalizeNavigationNode(web, node.Title, parser, scope);
                    }
#endif
                }
                catch (ServerException ex)
                {
                    // If the SharePoint link doesn't exist, provision it as external link
                    // when we provision as external link, the server side URL validation won't kick-in
                    // This handles the "no such file or url found" error

                    WriteMessage(String.Format(CoreResources.Provisioning_ObjectHandlers_Navigation_Link_Provisioning_Failed_Retry, node.Title), ProvisioningMessageType.Warning);

                    if (ex.ServerErrorCode == -2130247147)
                    {
                        try
                        {
                            string fileUrl = ReplaceFileUniqueToken(web, parser.ParseString(node.Url));
                            var    navNode = web.AddNavigationNode(
                                parser.ParseString(node.Title),
                                new Uri(fileUrl, UriKind.RelativeOrAbsolute),
                                parser.ParseString(parentNodeTitle),
                                navigationType,
                                true,
                                l1ParentNodeTitle: l1ParentNodeTitle
                                );
                        }
                        catch (Exception innerEx)
                        {
                            WriteMessage(String.Format(CoreResources.Provisioning_ObjectHandlers_Navigation_Link_Provisioning_Failed, innerEx.Message), ProvisioningMessageType.Warning);
                        }
                    }
                    else
                    {
                        WriteMessage(String.Format(CoreResources.Provisioning_ObjectHandlers_Navigation_Link_Provisioning_Failed, ex.Message), ProvisioningMessageType.Warning);
                    }
                }

                ProvisionStructuralNavigationNodes(
                    web,
                    parser,
                    navigationType,
                    node.NavigationNodes,
                    scope,
                    parser.ParseString(node.Title),
                    parentNodeTitle
                    );
            }
        }
Exemple #4
0
        private StructuralNavigation GetStructuralNavigation(Web web, WebNavigationSettings navigationSettings, Enums.NavigationType navigationType, ProvisioningTemplate template, ProvisioningTemplateCreationInformation creationInfo)
        {
            // By default avoid removing existing nodes
            var result = new StructuralNavigation {
                RemoveExistingNodes = false
            };

            Microsoft.SharePoint.Client.NavigationNodeCollection sourceNodes = navigationType == Enums.NavigationType.QuickLaunch ?
                                                                               web.Navigation.QuickLaunch : navigationType == Enums.NavigationType.TopNavigationBar ? web.Navigation.TopNavigationBar : web.LoadSearchNavigation();

            if (sourceNodes == null)
            {
                return(result);
            }

            var clientContext = web.Context;

            clientContext.Load(web, w => w.ServerRelativeUrl, w => w.Language);
            clientContext.Load(sourceNodes);
            clientContext.ExecuteQueryRetry();
            var defaultCulture = new CultureInfo((int)web.Language);

            if (!sourceNodes.ServerObjectIsNull.Value)
            {
                result.NavigationNodes.AddRange(from n in sourceNodes.AsEnumerable()
                                                select n.ToDomainModelNavigationNode(web, creationInfo.PersistMultiLanguageResources, defaultCulture));

                if (creationInfo.PersistMultiLanguageResources)
                {
                    //need to get nodes and children for any other then default language
                    foreach (var language in template.SupportedUILanguages.Where(c => c.LCID != defaultCulture.LCID))
                    {
                        var currentCulture = new CultureInfo(language.LCID);
                        clientContext.Load(web, w => w.ServerRelativeUrl);
                        clientContext.Load(sourceNodes);
                        var acceptLanguage = clientContext.PendingRequest.RequestExecutor.WebRequest.Headers["Accept-Language"];
                        clientContext.PendingRequest.RequestExecutor.WebRequest.Headers["Accept-Language"] = currentCulture.Name;
                        clientContext.ExecuteQueryRetry();

                        if (!sourceNodes.ServerObjectIsNull.Value)
                        {
                            //we dont need to add to result - just extract Titles - to List as we need to
                            var alternateLang = (from n in sourceNodes.AsEnumerable()
                                                 select n.ToDomainModelNavigationNode(web, creationInfo.PersistMultiLanguageResources, currentCulture)).ToList();
                        }

                        clientContext.PendingRequest.RequestExecutor.WebRequest.Headers["Accept-Language"] = acceptLanguage;
                    }
                }
            }
            return(result);
        }
Exemple #5
0
        private void ProvisionStructuralNavigation(Web web, StructuralNavigation structuralNavigation, TokenParser parser, Enums.NavigationType navigationType, bool clearNavigation, PnPMonitoredScope scope)
        {
            // Determine the target structural navigation
            //var navigationType = currentNavigation ?
            //    Enums.NavigationType.QuickLaunch :
            //    Enums.NavigationType.TopNavigationBar;
            if (structuralNavigation != null)
            {
                // Remove existing nodes, if requested
                if (structuralNavigation.RemoveExistingNodes || clearNavigation)
                {
                    if (!structuralNavigation.RemoveExistingNodes && !ClearWarningShown)
                    {
                        WriteMessage("You chose to override the template value RemoveExistingNodes=\"false\" by specifying ClearNavigation", ProvisioningMessageType.Warning);
                        ClearWarningShown = true;
                    }
                    web.DeleteAllNavigationNodes(navigationType);
                }

                // Provision root level nodes, and children recursively
                if (structuralNavigation.NavigationNodes.Any())
                {
                    ProvisionStructuralNavigationNodes(
                        web,
                        parser,
                        navigationType,
                        structuralNavigation.NavigationNodes,
                        scope
                        );
                }
            }
        }