public virtual ActionResult ImportSite(ImportSiteModel model, string @return) { var data = new JsonResultData(ModelState); if (ModelState.IsValid) { data.RunWithTry((resultData) => { Site parent = null; if (!string.IsNullOrEmpty(model.Parent)) { parent = new Site(model.Parent); } var options = new CreateSiteOptions() { MembershipName = model.Membership, RepositoryName = model.Repository, UserName = User.Identity.Name }; Site createdSite = null; if (Request.Files.Count > 0) { createdSite = ServiceFactory.SiteManager.Create(parent, model.Name, Request.Files[0].InputStream, options); } else { var packageFile = _importedSiteManager.GetItemTemplate("", model.File); createdSite = ServiceFactory.SiteManager.Create(parent, model.Name, packageFile.TemplateFile, options); } resultData.RedirectUrl = Url.Action("SiteMap", new { controller = "Home", siteName = createdSite.FullName }); }); } return(Json(data)); }
private void CreateSubSite(Site parentSite, string siteName, CreateSiteOptions options) { if (parentSite == null) { throw new Exception("Parent site is required when create a sub site.".Localize()); } parentSite = Get(parentSite); var newSite = new Site(parentSite, siteName); newSite.Repository = options.RepositoryName; newSite.Culture = options.Culture; newSite.TimeZoneId = options.TimeZoneId; // Set the same settings with parent. newSite.Theme = parentSite.Theme; newSite.EnableJquery = parentSite.EnableJquery; newSite.EnableStyleEdting = parentSite.EnableStyleEdting; newSite.EnableVersioning = parentSite.EnableVersioning; newSite.InlineEditing = parentSite.InlineEditing; newSite.CustomFields = parentSite.CustomFields; newSite.Smtp = parentSite.Smtp; newSite.Membership = parentSite.Membership; Add(newSite); if (!string.IsNullOrEmpty(options.RepositoryName)) { CopyRepository(parentSite.GetRepository(), options.RepositoryName); } }
private void CreateMembership(Site site, CreateSiteOptions options) { site = Get(site); var membershipName = site.Membership; //如果用户没有指定新的Membership名称,直接使用站点原来使用的名称。(有可能是导入的情况) if (!string.IsNullOrEmpty(options.MembershipName)) { //如果有父站点,新的子站点的Membership名称使用 指定的名称+"_"+子站点的名称 if (site.Parent != null) { membershipName = options.MembershipName + "_" + site.Name; } else { membershipName = options.MembershipName; } } site.Membership = membershipName; if (!string.IsNullOrEmpty(membershipName)) { var membership = new Kooboo.CMS.Membership.Models.Membership(membershipName).AsActual(); if (membership == null) { var membershipFile = GetSiteRelatedFile(site, MembershipFileName); if (!string.IsNullOrEmpty(membershipFile) && File.Exists(membershipFile)) { using (FileStream fs = new FileStream(membershipFile, FileMode.Open, FileAccess.Read)) { _membershipProvider.Import(membershipName, fs); } try { File.Delete(membershipFile); } catch (Exception e) { Kooboo.HealthMonitoring.Log.LogException(e); } } else if (site.Parent != null && !string.IsNullOrEmpty(site.Membership)) { site.Membership = Get(site.Parent).Membership; } else { site.Membership = null; } } } Save(site); foreach (var childSite in ChildSites(site)) { CreateMembership(childSite, options); } }
public virtual Site Copy(Site sourceSite, string siteName, CreateSiteOptions options) { MemoryStream ms = new MemoryStream(); //var exportReposiotry = Kooboo.CMS.Content.Services.ServiceFactory.RepositoryManager.Get(sourceSite.Repository) == null; Export(sourceSite.FullName, ms, true, true); ms.Position = 0; return(Create(sourceSite.Parent, siteName, ms, options)); }
public CreateSiteOptions ToCreateSiteOptions() { var options = new CreateSiteOptions() { RepositoryName = Repository, MembershipName = Membership, }; return(options); }
private void CreateRepository(Site site, CreateSiteOptions options) { var repositoryName = Get(site).Repository; //如果用户没有指定新的内容名称,直接使用站点原来使用的名称。(有可能是导入的情况) if (!string.IsNullOrEmpty(options.RepositoryName)) { //如果有父站点,新的子站点的内容名称使用 指定的名称+"_"+子站点的名称 if (site.Parent != null) { repositoryName = options.RepositoryName + "_" + site.Name; } else { repositoryName = options.RepositoryName; } } site.Repository = repositoryName; if (!string.IsNullOrEmpty(repositoryName)) { var repository = new Repository(repositoryName).AsActual(); if (repository == null) { var repositoryFile = GetSiteRelatedFile(site, new[] { ContentDatabaseFileName, site.Repository }); if (!string.IsNullOrEmpty(repositoryFile) && File.Exists(repositoryFile)) { using (FileStream fs = new FileStream(repositoryFile, FileMode.Open, FileAccess.Read)) { _repositoryManager.Create(repositoryName, fs); } try { File.Delete(repositoryFile); } catch (Exception e) { Kooboo.HealthMonitoring.Log.LogException(e); } site.Repository = repositoryName; } else if (site.Parent != null && !string.IsNullOrEmpty(site.Repository)) { site.Repository = Get(site.Parent).Repository; } } } //Save the repository change. Save(site); foreach (var childSite in ChildSites(site)) { CreateRepository(childSite, options); } }
public Site Create(Site parentSite, string siteName, Stream packageStream, CreateSiteOptions options) { try { var site = inner.Create(parentSite, siteName, packageStream, options); return(site); } finally { CacheManagerFactory.DefaultCacheManager.ClearGlobalObjectCache(); } }
private void CreateSiteUsingPackage(Site site, System.IO.Stream packageStream, CreateSiteOptions options) { using (ZipFile zipFile = ZipFile.Read(packageStream)) { var action = ExtractExistingFileAction.OverwriteSilently; zipFile.ExtractAll(site.PhysicalPath, action); site = Get(site); CreateRepository(site, options); CreateMembership(site, options); if (site.Parent == null) { UpdateFileLink(site); } } Initialize(site); Online(site); if (!string.IsNullOrEmpty(options.Culture)) { site.Culture = options.Culture; } if (!string.IsNullOrEmpty(options.TimeZoneId)) { site.TimeZoneId = options.TimeZoneId; } Save(site); }
/// <summary> /// 1. Extract the site files. /// 2. Create and initialize the repository if the repository doest not exsits. /// </summary> /// <param name="parentSite"></param> /// <param name="siteName"></param> /// <param name="packageStream"></param> /// <returns></returns> public virtual Site Create(Site parentSite, string siteName, System.IO.Stream packageStream, CreateSiteOptions options) { Site site = new Site(parentSite, siteName); if (site.Exists()) { throw new Exception("The site already exists.".Localize()); } try { if (packageStream == null) { CreateSubSite(parentSite, siteName, options); } else { CreateSiteUsingPackage(site, packageStream, options); } } catch (Exception ex) { Kooboo.HealthMonitoring.Log.LogException(ex); Kooboo.IO.IOUtility.DeleteDirectory(site.PhysicalPath, true); throw; } return(site); }
/// <summary> /// Create site using package stream /// </summary> /// <param name="parent"></param> /// <param name="siteName"></param> /// <param name="stream">the package stream can be null. if it is null, it is going to create sub site.</param> /// <param name="options"></param> /// <returns></returns> public virtual Site Create(Site parent, string siteName, Stream stream, CreateSiteOptions options) { return(Provider.Create(parent, siteName, stream, options)); }
/// <summary> /// Create site using package file path /// </summary> /// <param name="parent"></param> /// <param name="siteName"></param> /// <param name="packageFilePath"></param> /// <param name="options"></param> /// <returns></returns> public virtual Site Create(Site parent, string siteName, string packageFilePath, CreateSiteOptions options) { using (FileStream fs = new FileStream(packageFilePath, FileMode.Open, FileAccess.Read, FileShare.Read)) { return(Create(parent, siteName, fs, options)); } }