public ActionResult CreateSiteCollection(CreateSiteCollectionViewModel model)
        {
            switch (model.Step)
            {
                case CreateSiteStep.SiteInformation:
                    ModelState.Clear();
                    if (String.IsNullOrEmpty(model.Title))
                    {
                        // Set initial value for PnP Partner Pack Extensions Enabled
                        model.PartnerPackExtensionsEnabled = true;
                        model.ResponsiveDesignEnabled = true;
                    }
                    break;
                case CreateSiteStep.TemplateParameters:
                    if (!ModelState.IsValid)
                    {
                        model.Step = CreateSiteStep.SiteInformation;
                    }
                    else
                    {
                        if (!String.IsNullOrEmpty(model.ProvisioningTemplateUrl) &&
                            model.ProvisioningTemplateUrl.IndexOf(PnPPartnerPackConstants.PnPProvisioningTemplates) > 0)
                        {
                            String templateSiteUrl = model.ProvisioningTemplateUrl.Substring(0, model.ProvisioningTemplateUrl.IndexOf(PnPPartnerPackConstants.PnPProvisioningTemplates));
                            String templateFileName = model.ProvisioningTemplateUrl.Substring(model.ProvisioningTemplateUrl.IndexOf(PnPPartnerPackConstants.PnPProvisioningTemplates) + PnPPartnerPackConstants.PnPProvisioningTemplates.Length + 1);
                            String templateFolder = String.Empty;

                            if (templateFileName.IndexOf("/") > 0)
                            {
                                templateFolder = templateFileName.Substring(0, templateFileName.LastIndexOf("/") - 1);
                                templateFileName = templateFileName.Substring(templateFolder.Length + 1);
                            }
                            model.TemplateParameters = PnPPartnerPackUtilities.GetProvisioningTemplateParameters(
                                    templateSiteUrl,
                                    templateFolder,
                                    templateFileName);
                        }
                    }
                    break;
                case CreateSiteStep.SiteCreated:
                    AntiForgery.Validate();
                    if (ModelState.IsValid)
                    {
                        // Prepare the Job to provision the Site Collection
                        SiteCollectionProvisioningJob job = new SiteCollectionProvisioningJob();

                        // Prepare all the other information about the Provisioning Job
                        job.SiteTitle = model.Title;
                        job.Description = model.Description;
                        job.Language = model.Language;
                        job.TimeZone = model.TimeZone;
                        job.RelativeUrl = String.Format("/{0}/{1}", model.ManagedPath, model.RelativeUrl);
                        job.SitePolicy = model.SitePolicy;
                        job.Owner = ClaimsPrincipal.Current.Identity.Name;
                        job.PrimarySiteCollectionAdmin = model.PrimarySiteCollectionAdmin != null &&
                            model.PrimarySiteCollectionAdmin.Length > 0 ? model.PrimarySiteCollectionAdmin[0].Email : null;
                        job.SecondarySiteCollectionAdmin = model.SecondarySiteCollectionAdmin != null &&
                            model.SecondarySiteCollectionAdmin.Length > 0 ? model.SecondarySiteCollectionAdmin[0].Email : null;
                        job.ProvisioningTemplateUrl = model.ProvisioningTemplateUrl;
                        job.StorageMaximumLevel = model.StorageMaximumLevel;
                        job.StorageWarningLevel = model.StorageWarningLevel;
                        job.UserCodeMaximumLevel = model.UserCodeMaximumLevel;
                        job.UserCodeWarningLevel = model.UserCodeWarningLevel;
                        job.ExternalSharingEnabled = model.ExternalSharingEnabled;
                        job.ResponsiveDesignEnabled = model.ResponsiveDesignEnabled;
                        job.PartnerPackExtensionsEnabled = model.PartnerPackExtensionsEnabled;
                        job.Title = String.Format("Provisioning of Site Collection \"{1}\" with Template \"{0}\" by {2}",
                            job.ProvisioningTemplateUrl,
                            job.RelativeUrl,
                            job.Owner);

                        job.TemplateParameters = model.TemplateParameters;

                        model.JobId = ProvisioningRepositoryFactory.Current.EnqueueProvisioningJob(job);
                    }
                    break;
                default:
                    break;
            }

            return PartialView(model.Step.ToString(), model);
        }
        public ActionResult CreateSiteCollection(CreateSiteCollectionViewModel model)
        {
            if (model.Step == CreateSiteStep.SiteInformation)
            {
                ModelState.Clear();
                if (String.IsNullOrEmpty(model.Title))
                {
                    // Set initial value for PnP Partner Pack Extensions Enabled
                    model.PartnerPackExtensionsEnabled = true;
                    model.ResponsiveDesignEnabled = true;
                }
            }
            if (model.Step == CreateSiteStep.TemplateParameters)
            {
                if (!ModelState.IsValid)
                {
                    model.Step = CreateSiteStep.SiteInformation;
                }
                else
                {
                    if (!String.IsNullOrEmpty(model.ProvisioningTemplateUrl) &&
                        !String.IsNullOrEmpty(model.TemplatesProviderTypeName))
                    {
                        var templatesProvider = PnPPartnerPackSettings.TemplatesProviders[model.TemplatesProviderTypeName];
                        if (templatesProvider != null)
                        {
                            var template = templatesProvider.GetProvisioningTemplate(model.ProvisioningTemplateUrl);
                            model.TemplateParameters = template.Parameters;
                        }
                    }

                    if (model.TemplateParameters == null || model.TemplateParameters.Count == 0)
                    {
                        model.Step = CreateSiteStep.SiteCreated;
                    }
                }
            }
            if (model.Step == CreateSiteStep.SiteCreated)
            {
                AntiForgery.Validate();
                if (ModelState.IsValid)
                {
                    // Prepare the Job to provision the Site Collection
                    SiteCollectionProvisioningJob job = new SiteCollectionProvisioningJob();

                    // Prepare all the other information about the Provisioning Job
                    job.SiteTitle = model.Title;
                    job.Description = model.Description;
                    job.Language = model.Language;
                    job.TimeZone = model.TimeZone;
                    job.RelativeUrl = String.Format("/{0}/{1}", model.ManagedPath, model.RelativeUrl);
                    job.SitePolicy = model.SitePolicy;
                    job.Owner = ClaimsPrincipal.Current.Identity.Name;
                    job.ApplyTenantBranding = model.ApplyTenantBranding;

                    job.PrimarySiteCollectionAdmin = model.PrimarySiteCollectionAdmin != null &&
                        model.PrimarySiteCollectionAdmin.Principals.Count > 0 ?
                            (!String.IsNullOrEmpty(model.PrimarySiteCollectionAdmin.Principals[0].Mail) ?
                            model.PrimarySiteCollectionAdmin.Principals[0].Mail :
                            null) : null;
                    job.SecondarySiteCollectionAdmin = model.SecondarySiteCollectionAdmin != null &&
                        model.SecondarySiteCollectionAdmin.Principals.Count > 0 ?
                            (!String.IsNullOrEmpty(model.SecondarySiteCollectionAdmin.Principals[0].Mail) ?
                            model.SecondarySiteCollectionAdmin.Principals[0].Mail :
                            null) : null;

                    job.ProvisioningTemplateUrl = model.ProvisioningTemplateUrl;
                    job.TemplatesProviderTypeName = model.TemplatesProviderTypeName;
                    job.StorageMaximumLevel = model.StorageMaximumLevel;
                    job.StorageWarningLevel = model.StorageWarningLevel;
                    job.UserCodeMaximumLevel = model.UserCodeMaximumLevel;
                    job.UserCodeWarningLevel = model.UserCodeWarningLevel;
                    job.ExternalSharingEnabled = model.ExternalSharingEnabled;
                    job.ResponsiveDesignEnabled = model.ResponsiveDesignEnabled;
                    job.PartnerPackExtensionsEnabled = model.PartnerPackExtensionsEnabled;
                    job.Title = String.Format("Provisioning of Site Collection \"{1}\" with Template \"{0}\" by {2}",
                        job.ProvisioningTemplateUrl,
                        job.RelativeUrl,
                        job.Owner);

                    job.TemplateParameters = model.TemplateParameters;

                    model.JobId = ProvisioningRepositoryFactory.Current.EnqueueProvisioningJob(job);
                }
            }

            return PartialView(model.Step.ToString(), model);
        }