Example #1
0
 public static void InitialiseAllocatedSite(this Web value, ProvisionedSite provisionedSite, Task task, string serverRelativeUrl)
 {
     value.Title             = task.SiteTitle;
     value.ServerRelativeUrl = serverRelativeUrl;
     value.DeleteListFromWebByTitle(SharePointListNames.SharedDocuments);
     value.Update();
 }
Example #2
0
        public void ProvisionSite(int siteCollectionId, Task task)
        {
            Debug.WriteLine("Fujitsu.AFC.Services.ProvisioningService.cs -> Processing ProvisionSite.");
            var prfMonMethod = new PrfMon();

            var          siteCollection     = _provisionedSiteCollectionRepository.Single(x => x.Id == siteCollectionId);
            var          siteCollectionName = siteCollection.Name;
            const string sitePagesTitle     = "Site Pages";

            using (var context = new ClientContext(SiteCollectionUrl(siteCollection.Name)))
            {
                Debug.WriteLine("Fujitsu.AFC.Services.ProvisioningService.cs -> CreateWebLoadContextWebAndLists. Started.");

                var createWebLoadContextWebListsPrfMonTriggers = new PrfMon();
                var guid     = Guid.NewGuid().ToString();
                var creation = new WebCreationInformation
                {
                    Url         = guid,
                    Title       = guid,
                    WebTemplate = SiteTemplate,
                    UseSamePermissionsAsParentSite = false
                };
                context.Credentials = Credentials;
                var newWeb = context.Web.Webs.Add(creation);
                context.Load(newWeb, w => w.Title, w => w.Url);
                context.ExecuteQuery();
                Debug.WriteLine("Fujitsu.AFC.Services.ProvisioningService.cs -> CreateWebLoadContextWebAndLists. Completed. Average Execution: {0:0.000}s", createWebLoadContextWebListsPrfMonTriggers.Stop());

                Debug.WriteLine("Fujitsu.AFC.Services.ProvisioningService.cs -> LoadWebRootFolderAndFiles. Started.");
                var loadWebRootFolderAndFilesPrfMonTriggers = new PrfMon();
                var sitePages     = newWeb.Lists.GetByTitle(sitePagesTitle);
                var rootFolder    = sitePages.RootFolder;
                var files         = rootFolder.Files;
                var webRootFolder = newWeb.RootFolder;
                context.Load(webRootFolder);
                context.Load(rootFolder);
                context.Load(files);
                context.Load(newWeb.RegionalSettings);
                context.Load(newWeb.RegionalSettings.TimeZones);
                context.ExecuteQuery();
                Debug.WriteLine("Fujitsu.AFC.Services.ProvisioningService.cs -> LoadWebRootFolderAndFiles. Completed. Average Execution: {0:0.000}s", loadWebRootFolderAndFilesPrfMonTriggers.Stop());

                Debug.WriteLine("Fujitsu.AFC.Services.ProvisioningService.cs -> SetSiteLocaleAndTimeZone. Started.");
                var setSiteLocaleTimeZonePrfMonTriggers = new PrfMon();
                newWeb.RegionalSettings.LocaleId = 2057;
                const string utcTimeZone = "(UTC) Coordinated Universal Time";
                var          timeZone    = newWeb.RegionalSettings.TimeZones.FirstOrDefault(timezone => timezone.Description == utcTimeZone);
                if (timeZone != null)
                {
                    newWeb.RegionalSettings.TimeZone = timeZone;
                }
                newWeb.RegionalSettings.Update();
                context.ExecuteQuery();
                Debug.WriteLine("Fujitsu.AFC.Services.ProvisioningService.cs -> SetSiteLocaleAndTimeZone. Completed. Average Execution: {0:0.000}s", setSiteLocaleTimeZonePrfMonTriggers.Stop());


                Debug.WriteLine("Fujitsu.AFC.Services.ProvisioningService.cs -> AddHomePageAndAuditSiteCreation. Started.");
                var addHomePageAndAuditSiteCreationPrfMonTriggers = new PrfMon();
                var defaultPageName = rootFolder.GetPageName(files, "default");
                var defaultPageUrl  = $"{rootFolder.ServerRelativeUrl}/{defaultPageName}";
                rootFolder.Files.AddTemplateFile(defaultPageUrl, TemplateFileType.WikiPage);
                webRootFolder.WelcomePage = $"{sitePagesTitle.Replace(" ", "")}/{defaultPageName}";
                webRootFolder.Update();
                context.Web.AddAuditListItem(SharePointListNames.Audit, task, string.Format(TaskResources.Audit_CaseSiteProvisioning_SubSiteCreated, SiteUrl(siteCollectionName, guid)));
                context.ExecuteQuery();
                Debug.WriteLine("Fujitsu.AFC.Services.ProvisioningService.cs -> AddHomePageAndAuditSiteCreation. Completed. Average Execution: {0:0.000}s", addHomePageAndAuditSiteCreationPrfMonTriggers.Stop());

                Debug.WriteLine("Fujitsu.AFC.Services.ProvisioningService.cs -> SiteAccessPermissionsLevels. Started.");
                var addSiteAccessPermissionsLevelsPrfMonTriggers = new PrfMon();
                context.Load(newWeb, w => w.MembersCanShare, w => w.RequestAccessEmail);
                context.ExecuteQuery();
                newWeb.MembersCanShare    = false;
                newWeb.RequestAccessEmail = string.Empty;
                newWeb.Update();
                context.ExecuteQuery();
                Debug.WriteLine("Fujitsu.AFC.Services.ProvisioningService.cs -> SiteAccessPermissionsLevels. Completed. Average Execution: {0:0.000}s", addSiteAccessPermissionsLevelsPrfMonTriggers.Stop());

                Debug.WriteLine("Fujitsu.AFC.Services.ProvisioningService.cs -> DatabaseSynchronisation. Started.");
                var databaseSynchronisationPrfMonTriggers = new PrfMon();
                var now  = DateTime.Now;
                var site = new ProvisionedSite
                {
                    ProvisionedSiteCollectionId = siteCollectionId,
                    Name         = guid,
                    Url          = newWeb.Url,
                    InsertedDate = now,
                    InsertedBy   = _userIdentity.Name,
                    UpdatedDate  = now,
                    UpdatedBy    = _userIdentity.Name
                };

                RetryableOperation.Invoke(ExceptionPolicies.General,
                                          () =>
                {
                    _provisionedSiteRepository.Insert(site);
                    _unitOfWork.Save();
                });
                Debug.WriteLine("Fujitsu.AFC.Services.ProvisioningService.cs -> DatabaseSynchronisation. Completed. Average Execution: {0:0.000}s", databaseSynchronisationPrfMonTriggers.Stop());
            }

            Debug.WriteLine("Fujitsu.AFC.Services.ProvisioningService.cs -> Completed Processing ProvisionSite. Duration: {0:0.000}s", prfMonMethod.Stop());
        }