Example #1
0
        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));
        }
Example #2
0
        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);
            }
        }
Example #3
0
        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);
            }
        }
Example #4
0
        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));
        }
Example #5
0
        public CreateSiteOptions ToCreateSiteOptions()
        {
            var options = new CreateSiteOptions()
            {
                RepositoryName = Repository,
                MembershipName = Membership,
            };

            return(options);
        }
Example #6
0
        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);
            }
        }
Example #7
0
        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();
            }
        }
Example #8
0
        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);
        }
Example #9
0
        /// <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);
        }
Example #10
0
 /// <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));
 }
Example #11
0
 /// <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));
     }
 }