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 CreateSubSite(CreateSubSiteViewModel model)
        {
            switch (model.Step)
            {
            case CreateSiteStep.SiteInformation:
                ModelState.Clear();

                // If it is the first time that we are here
                if (String.IsNullOrEmpty(model.Title))
                {
                    model.InheritPermissions = true;
                    using (var ctx = PnPPartnerPackContextProvider.GetAppOnlyClientContext(model.ParentSiteUrl))
                    {
                        Web web = ctx.Web;
                        ctx.Load(web, w => w.Language, w => w.RegionalSettings.TimeZone);
                        ctx.ExecuteQueryRetry();

                        model.Language = (Int32)web.Language;
                        model.TimeZone = web.RegionalSettings.TimeZone.Id;
                    }
                }
                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 Sub Site
                    SubSiteProvisioningJob job = new SubSiteProvisioningJob();

                    // 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.ParentSiteUrl           = model.ParentSiteUrl;
                    job.RelativeUrl             = model.RelativeUrl;
                    job.SitePolicy              = model.SitePolicy;
                    job.Owner                   = ClaimsPrincipal.Current.Identity.Name;
                    job.ProvisioningTemplateUrl = model.ProvisioningTemplateUrl;
                    job.InheritPermissions      = model.InheritPermissions;
                    job.Title                   = String.Format("Provisioning of Sub Site \"{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));
        }