Example #1
0
        internal static Dictionary <string, PublishingSiteScanResult> GeneratePublishingSiteResults(Mode mode,
                                                                                                    ConcurrentDictionary <string, PublishingWebScanResult> webScanResults,
                                                                                                    ConcurrentDictionary <string, PublishingPageScanResult> pageScanResults)
        {
            Dictionary <string, PublishingSiteScanResult> siteScanResults = new Dictionary <string, PublishingSiteScanResult>(500);

            // bail out when no work todo
            if (!Options.IncludePublishing(mode) || webScanResults.Count == 0)
            {
                return(null);
            }

            // iterate the web publishing results and consolidate into a single site level data line
            foreach (var item in webScanResults)
            {
                PublishingSiteScanResult siteResult = null;

                // Create or get the result instance
                if (!siteScanResults.ContainsKey(item.Value.SiteColUrl))
                {
                    siteResult = new PublishingSiteScanResult()
                    {
                        SiteColUrl     = item.Value.SiteColUrl,
                        SiteURL        = item.Value.SiteURL,
                        Classification = SiteComplexity.Simple
                    };
                    siteScanResults.Add(item.Value.SiteColUrl, siteResult);
                }
                else
                {
                    siteScanResults.TryGetValue(item.Value.SiteColUrl, out siteResult);
                }

                // Update the result instance
                siteResult.NumberOfWebs++;
                siteResult.NumberOfPages = siteResult.NumberOfPages + item.Value.PageCount;

                if (item.Value.SiteMasterPage != null && !siteResult.UsedSiteMasterPages.Contains(item.Value.SiteMasterPage))
                {
                    siteResult.UsedSiteMasterPages.Add(item.Value.SiteMasterPage);
                }

                if (item.Value.SystemMasterPage != null && !siteResult.UsedSystemMasterPages.Contains(item.Value.SystemMasterPage))
                {
                    siteResult.UsedSystemMasterPages.Add(item.Value.SystemMasterPage);
                }

                // If in a single site collection multiple languages are used then mark the publishing portal as complex
                if (!siteResult.UsedLanguages.Contains(item.Value.Language))
                {
                    siteResult.UsedLanguages.Add(item.Value.Language);
                }

                if (siteResult.UsedLanguages.Count > 1)
                {
                    siteResult.Classification = SiteComplexity.Complex;
                }

                // Check the classification based upon the web level data
                var webClassification = item.Value.WebClassification;
                if (webClassification > siteResult.Classification)
                {
                    siteResult.Classification = webClassification;
                }
            }

            // Iterate the publishing page results (if collected) and consolidate into a single site level data line
            if (Options.IncludePublishingWithPages(mode) && pageScanResults.Count > 0)
            {
                foreach (var item in pageScanResults)
                {
                    // Get the previously created record
                    siteScanResults.TryGetValue(item.Value.SiteColUrl, out PublishingSiteScanResult siteResult);

                    if (siteResult == null)
                    {
                        // Should not be possible...
                        continue;
                    }

                    // Update the result instance
                    if (item.Value.PageLayout != null && !siteResult.UsedPageLayouts.Contains(item.Value.PageLayout))
                    {
                        siteResult.UsedPageLayouts.Add(item.Value.PageLayout);
                    }

                    // Update last updated date
                    if (item.Value.ModifiedAt != DateTime.MinValue && item.Value.ModifiedAt != DateTime.MaxValue)
                    {
                        if (siteResult.LastPageUpdateDate == null || item.Value.ModifiedAt > siteResult.LastPageUpdateDate)
                        {
                            siteResult.LastPageUpdateDate = item.Value.ModifiedAt;
                        }
                    }

                    // Update complexity based upon data for the page

                    // Customized page layouts
                    var pageClassification = SiteComplexity.Simple;
                    if (item.Value.PageLayoutWasCustomized)
                    {
                        pageClassification = SiteComplexity.Medium;
                    }
                    if (pageClassification > siteResult.Classification)
                    {
                        siteResult.Classification = pageClassification;
                    }

                    // Audiences used
                    pageClassification = SiteComplexity.Simple;
                    if ((item.Value.GlobalAudiences != null && item.Value.GlobalAudiences.Count > 0) ||
                        (item.Value.SecurityGroupAudiences != null && item.Value.SecurityGroupAudiences.Count > 0) ||
                        (item.Value.SharePointGroupAudiences != null && item.Value.SharePointGroupAudiences.Count > 0))
                    {
                        pageClassification = SiteComplexity.Medium;
                    }
                    if (pageClassification > siteResult.Classification)
                    {
                        siteResult.Classification = pageClassification;
                    }
                }
            }

            // Push back the site collection complexity level as a column of the web rows as that data is exported for the dashboard
            foreach (var item in webScanResults)
            {
                if (siteScanResults.TryGetValue(item.Value.SiteColUrl, out PublishingSiteScanResult site))
                {
                    item.Value.SiteClassification = site.Classification.ToString();
                }
            }

            return(siteScanResults);
        }
        internal static Dictionary <string, PublishingSiteScanResult> GeneratePublishingSiteResults(Mode mode,
                                                                                                    ConcurrentDictionary <string, PublishingWebScanResult> webScanResults,
                                                                                                    ConcurrentDictionary <string, PublishingPageScanResult> pageScanResults)
        {
            Dictionary <string, PublishingSiteScanResult> siteScanResults = new Dictionary <string, PublishingSiteScanResult>(500);

            // bail out when no work todo
            if (!Options.IncludePublishing(mode) || webScanResults.Count == 0)
            {
                return(null);
            }

            // iterate the web publishing results and consolidate into a single site level data line
            foreach (var item in webScanResults)
            {
                PublishingSiteScanResult siteResult = null;

                // Create or get the result instance
                if (!siteScanResults.ContainsKey(item.Value.SiteColUrl))
                {
                    siteResult = new PublishingSiteScanResult()
                    {
                        SiteColUrl = item.Value.SiteColUrl,
                        SiteURL    = item.Value.SiteURL,
                    };
                    siteScanResults.Add(item.Value.SiteColUrl, siteResult);
                }
                else
                {
                    siteScanResults.TryGetValue(item.Value.SiteColUrl, out siteResult);
                }

                // Update the result instance
                siteResult.NumberOfWebs++;
                siteResult.NumberOfPages = siteResult.NumberOfPages + item.Value.PageCount;

                if (item.Value.SiteMasterPage != null && !siteResult.UsedSiteMasterPages.Contains(item.Value.SiteMasterPage))
                {
                    siteResult.UsedSiteMasterPages.Add(item.Value.SiteMasterPage);
                }

                if (item.Value.SystemMasterPage != null && !siteResult.UsedSystemMasterPages.Contains(item.Value.SystemMasterPage))
                {
                    siteResult.UsedSystemMasterPages.Add(item.Value.SystemMasterPage);
                }
            }

            // Iterate the publishing page results (if collected) and consolidate into a single site level data line
            if (Options.IncludePublishingWithPages(mode) && pageScanResults.Count > 0)
            {
                foreach (var item in pageScanResults)
                {
                    // Get the previously created record
                    siteScanResults.TryGetValue(item.Value.SiteColUrl, out PublishingSiteScanResult siteResult);

                    if (siteResult == null)
                    {
                        // Should not be possible...
                        continue;
                    }

                    // Update the result instance
                    if (item.Value.PageLayout != null && !siteResult.UsedPageLayouts.Contains(item.Value.PageLayout))
                    {
                        siteResult.UsedPageLayouts.Add(item.Value.PageLayout);
                    }

                    // Update last updated date
                    if (item.Value.ModifiedAt != DateTime.MinValue && item.Value.ModifiedAt != DateTime.MaxValue)
                    {
                        if (siteResult.LastPageUpdateDate == null || item.Value.ModifiedAt > siteResult.LastPageUpdateDate)
                        {
                            siteResult.LastPageUpdateDate = item.Value.ModifiedAt;
                        }
                    }
                }
            }

            return(siteScanResults);
        }