private static Guid GetSiteDesignId(CommonNoGroupSiteOptions siteCollectionCreationInformation) { if (siteCollectionCreationInformation.SiteDesignId != Guid.Empty) { return(siteCollectionCreationInformation.SiteDesignId); } else if (siteCollectionCreationInformation is CommunicationSiteOptions communicationSiteOptions) { switch (communicationSiteOptions.SiteDesign) { case CommunicationSiteDesign.Topic: { return(Guid.Empty); } case CommunicationSiteDesign.Showcase: { return(Guid.Parse("6142d2a0-63a5-4ba0-aede-d9fefca2c767")); } case CommunicationSiteDesign.Blank: { return(Guid.Parse("f6cc5403-0d63-442e-96c0-285923709ffc")); } } } return(Guid.Empty); }
private static Dictionary <string, object> BuildBaseCommonNoGroupSiteRequestPayload(CommonNoGroupSiteOptions siteCollectionCreationInformation) { return(new Dictionary <string, object> { { "Title", siteCollectionCreationInformation.Title }, { "Lcid", (int)siteCollectionCreationInformation.Language }, { "ShareByEmailEnabled", siteCollectionCreationInformation.ShareByEmailEnabled }, { "Url", siteCollectionCreationInformation.Url }, { "Classification", siteCollectionCreationInformation.Classification ?? "" }, { "Description", siteCollectionCreationInformation.Description ?? "" }, { "WebTemplate", siteCollectionCreationInformation.WebTemplate }, { "WebTemplateExtensionId", Guid.Empty }, { "Owner", siteCollectionCreationInformation.Owner } }); }
private static async Task <PnPContext> CreateCommonNoGroupSiteAsync(PnPContext context, CommonNoGroupSiteOptions siteToCreate, SiteCreationOptions creationOptions) { if (string.IsNullOrEmpty(siteToCreate.Owner) && creationOptions.UsingApplicationPermissions.Value) { throw new ClientException(ErrorType.Unsupported, "You need to set an owner when using Application permissions to create a communicaiton site"); } var payload = BuildBaseCommonNoGroupSiteRequestPayload(siteToCreate); var siteDesignId = GetSiteDesignId(siteToCreate); if (siteDesignId != Guid.Empty) { payload.Add("SiteDesignId", siteDesignId); // As per https://github.com/SharePoint/sp-dev-docs/issues/4810 the WebTemplateExtensionId property // is what currently drives the application of a custom site design during the creation of a modern site. payload["WebTemplateExtensionId"] = siteDesignId; } payload.Add("HubSiteId", siteToCreate.HubSiteId); // Sensitivity labels have replaced classification (see https://docs.microsoft.com/en-us/microsoft-365/compliance/sensitivity-labels-teams-groups-sites?view=o365-worldwide#classic-azure-ad-group-classification) // once enabled. Therefore we prefer setting a sensitivity label id over classification when specified. if (siteToCreate.SensitivityLabelId != Guid.Empty) { payload.Add("SensitivityLabel", siteToCreate.SensitivityLabelId); } else { payload["Classification"] = siteToCreate.Classification ?? ""; } return(await CreateSiteUsingSpoRestImplementationAsync(context, SiteCreationModel.SPSiteManagerCreate, payload, creationOptions).ConfigureAwait(false)); }