private static void DeleteChildContents(TextContent textContent, TextFolder parentFolder, TextFolder childFolder)
 {
     var repository = textContent.GetRepository();
     var childContents = childFolder.CreateQuery().WhereEquals("ParentFolder", parentFolder.FullName)
         .WhereEquals("ParentUUID", textContent.UUID);
     foreach (var content in childContents)
     {
         Services.ServiceFactory.TextContentManager.Delete(repository, childFolder, content.UUID);
     }
 }
Beispiel #2
0
 /// <summary>
 /// Gets the folder form template.
 /// </summary>
 /// <param name="textFolder">The text folder.</param>
 /// <param name="type">The type.</param>
 /// <returns></returns>
 private static string GetFolderFormTemplate(TextFolder textFolder, FormType type)
 {
     string fileVirtualPath = "";
     var folderPath = new FolderPath(textFolder);
     string filePhysicalPath = Path.Combine(folderPath.PhysicalPath, SchemaExtensions.CUSTOM_TEMPLATES, string.Format("{0}.cshtml", type));
     if (File.Exists(filePhysicalPath))
     {
         fileVirtualPath = UrlUtility.Combine(folderPath.VirtualPath, SchemaExtensions.CUSTOM_TEMPLATES, string.Format("{0}.cshtml", type));
     }
     return fileVirtualPath;
 }
Beispiel #3
0
 private string GetFullyFriendlyText(string folderName)
 {
     var folder = new TextFolder(CategoryFolder.Repository, folderName).AsActual();
     var nameList = new List<string>() { folder.FriendlyText };
     var parent = folder.Parent;
     while (parent != null)
     {
         parent = parent.AsActual();
         if (parent != null)
         {
             nameList.Add(parent.FriendlyText);
             parent = parent.Parent;
         }
     }
     nameList.Reverse();
     return string.Join("/", nameList);
 }
        public EventResult Receive(IEventContext context)
        {
            EventResult eventResult = new EventResult();

            if (context is ContentEventContext)
            {
                var contentEventContext = (ContentEventContext)context;
                if (contentEventContext.ContentAction == Models.ContentAction.Delete)
                {
                    Task.Factory.StartNew(() =>
                    {
                        try
                        {
                            var textFolder = contentEventContext.Content.GetFolder().AsActual();

                            // Delete the child contents in this folder.
                            DeleteChildContents(contentEventContext.Content, textFolder, textFolder);

                            if (textFolder.EmbeddedFolders != null)
                            {
                                foreach (var folderName in textFolder.EmbeddedFolders)
                                {
                                    var childFolder = new TextFolder(textFolder.Repository, folderName);
                                    DeleteChildContents(contentEventContext.Content, textFolder, childFolder);
                                }
                            }
                        }
                        catch (Exception e)
                        {
                            eventResult.Exception = e;
                        }

                    });
                }
            }

            return eventResult;
        }
Beispiel #5
0
 public virtual ContentBase Update(Repository repository, TextFolder folder, string uuid, NameValueCollection values, string userid = "")
 {
     return Update(repository, folder, uuid, values, null, DateTime.UtcNow, null, null, userid);
 }
Beispiel #6
0
 public void Unpublish(TextFolder textFolder, string contentUUID, string userName = "")
 {
     this.Update(textFolder, contentUUID, "Published", false, userName);
 }
Beispiel #7
0
        public virtual void Top(Repository repository, string folderName, string uuid)
        {
            var folder = new TextFolder(repository, folderName).AsActual();
            var content = folder.CreateQuery().WhereEquals("UUID", uuid).FirstOrDefault();
            if (content != null)
            {

            }
        }
Beispiel #8
0
        public virtual void RevertTo(Repository repository, string folder, string schemaName, string uuid, int version, string user)
        {
            var textContent = new TextFolder(repository, folder).CreateQuery().WhereEquals("UUID", uuid).FirstOrDefault();
            if (textContent != null)
            {
                var versionInfo = Versioning.VersionManager.GetVersion(textContent, version);
                var @new = new TextContent(versionInfo.TextContent);
                @new.Repository = repository.Name;
                @new.UserId = user;
                @new.LastModificationDate = DateTime.Now;

                TextContentProvider.Update(@new, textContent);
                ClearCategories(repository, textContent);

                if (versionInfo.Categories != null)
                {
                    AddCategories(repository, textContent, versionInfo.Categories
                        .Where(it => it.Contents != null)
                        .SelectMany(it => it.Contents.Select(c => new TextContent(repository.Name, "", it.FolderName) { UUID = c.UUID }))
                            .ToArray());
                }

                if (string.IsNullOrEmpty(textContent.OriginalUUID))
                    EventBus.Content.ContentEvent.Fire(ContentAction.Update, @new);
            }
        }
Beispiel #9
0
        public virtual IEnumerable<CategoryContents> QueryCategories(Repository repository, string folder, string uuid)
        {
            var textFolder = (TextFolder)(FolderHelper.Parse<TextFolder>(repository, folder).AsActual());
            if (textFolder != null)
            {
                if (textFolder.Categories != null && textFolder.Categories.Count() > 0)
                {
                    foreach (var c in textFolder.Categories)
                    {
                        var categoryFolder = new TextFolder(repository, FolderHelper.SplitFullName(c.FolderName));
                        List<TextContent> categoryContents = new List<TextContent>();

                        if (!string.IsNullOrEmpty(uuid))
                        {
                            categoryContents = categoryContents.Concat(textFolder.CreateQuery().WhereEquals("UUID", uuid).Categories(categoryFolder)).ToList();

                            #region query all children folders of category

                            var childrenCategoryFolders = ServiceFactory.TextFolderManager.AllChildFoldersWithSameSchema(categoryFolder);

                            foreach (var sub in childrenCategoryFolders)
                            {
                                categoryContents = categoryContents.Concat(textFolder.CreateQuery().WhereEquals("UUID", uuid).Categories(sub)).ToList();
                            }
                            #endregion

                        }

                        yield return new CategoryContents() { CategoryFolder = categoryFolder, Contents = categoryContents, SingleChoice = c.SingleChoice };
                    }
                }
            }
        }
 public TranslatedTextContentQuery(Repository repository, Schema schema, TextFolder textFolder)
 {
     this.Repository = repository;
     this.Schema = schema;
     this.TextFolder = textFolder;
 }
Beispiel #11
0
 public virtual void Update(TextFolder textFolder, string uuid, string fieldName, object value, string userName = "", bool enableVersion = true)
 {
     Update(textFolder, uuid, new[] { fieldName }, new[] { value }, userName, enableVersion);
 }
Beispiel #12
0
        public virtual ContentBase Add(Repository repository, TextFolder folder, string parentFolder, string parentUUID, NameValueCollection values
            , HttpFileCollectionBase files, IEnumerable<TextContent> categories, string userid = "")
        {
            var textFolder = (TextFolder)folder.AsActual();
            var schema = new Schema(repository, textFolder.SchemaName);
            var textContent = new TextContent(repository.Name, schema.Name, textFolder.FullName);

            textContent = Binder.Bind(schema, textContent, values);

            if (!string.IsNullOrEmpty(values["UUID"]))
            {
                textContent.UUID = values["UUID"];
            }
            textContent.ParentFolder = parentFolder;
            textContent.ParentUUID = parentUUID;
            textContent.UserId = userid;
            textContent.LastModificationDate = textContent.CreationDate = DateTime.Now;

            textContent.ContentFiles = GetPostFiles(files);

            EventBus.Content.ContentEvent.Fire(ContentAction.PreAdd, textContent);

            TextContentProvider.Add(textContent);

            if (categories != null)
            {
                AddCategories(repository, textContent, categories.ToArray());
            }

            EventBus.Content.ContentEvent.Fire(ContentAction.Add, textContent);

            return textContent;
        }
Beispiel #13
0
 public virtual ContentBase Add(Repository repository, TextFolder folder, NameValueCollection values, HttpFileCollectionBase files,
   IEnumerable<TextContent> categories, string userid = "")
 {
     return Add(repository, folder, null, null, values, files, categories, userid);
 }
 /// <summary>
 /// 根据源内容查询广播的内容
 /// </summary>
 /// <param name="folder">The folder.</param>
 /// <param name="originalUUID">The original UUID.</param>
 /// <returns></returns>
 public static IEnumerable<TextContent> GetContentsByOriginalUUID(TextFolder folder, string originalUUID)
 {
     return folder.CreateQuery().WhereEquals("OriginalUUID", originalUUID);
 }
Beispiel #15
0
        public virtual ContentBase Update(Repository repository, TextFolder folder, string uuid, NameValueCollection values, HttpFileCollectionBase files,
         DateTime modificationDate, IEnumerable<TextContent> addedCateogries, IEnumerable<TextContent> removedCategories, string userid = "", bool enableVersion = true)
        {
            var textFolder = (TextFolder)folder.AsActual();
            var schema = new Schema(repository, textFolder.SchemaName);
            var textContent = textFolder.CreateQuery().WhereEquals("UUID", uuid).First();
            var old = new TextContent(textContent);

            textContent = Binder.Update(schema, textContent, values);
            textContent.Repository = repository.Name;
            textContent.UserId = userid;
            textContent.LastModificationDate = modificationDate;

            var parentFolder = values["ParentFolder"];
            if (!string.IsNullOrEmpty(parentFolder))
            {
                textContent.ParentFolder = parentFolder;
            }
            var parentUUID = values["ParentUUID"];
            if (!string.IsNullOrEmpty(parentUUID))
            {
                textContent.ParentUUID = parentUUID;
            }

            if (files != null)
            {
                textContent.ContentFiles = GetPostFiles(files);
            }
            textContent.___EnableVersion___ = enableVersion;
            //SaveFiles(textContent, schema, files);
            EventBus.Content.ContentEvent.Fire(ContentAction.PreUpdate, textContent);

            TextContentProvider.Update(textContent, old);

            if (addedCateogries != null)
            {
                AddCategories(repository, textContent, addedCateogries.ToArray());
            }
            if (removedCategories != null)
            {
                RemoveCategories(repository, textContent, removedCategories.ToArray());
            }

            EventBus.Content.ContentEvent.Fire(ContentAction.Update, textContent);
            return textContent;
        }
Beispiel #16
0
        public virtual void Update(TextFolder textFolder, string uuid, IEnumerable<string> fieldNames, IEnumerable<object> fieldValues, string userName = "", bool enableVersion = true)
        {
            var content = textFolder.CreateQuery().WhereEquals("UUID", uuid).FirstOrDefault();
            if (content.IntegrateId != null)
            {
                var names = fieldNames.ToArray();
                var values = fieldValues.ToArray();
                for (int i = 0; i < names.Length; i++)
                {
                    content[names[i]] = values[i];
                }

                if (!string.IsNullOrEmpty(userName))
                {
                    content.UserId = userName;
                }
                content.___EnableVersion___ = enableVersion;
                content.LastModificationDate = DateTime.UtcNow;

                EventBus.Content.ContentEvent.Fire(ContentAction.PreUpdate, content);

                TextContentProvider.Update(content, content);

                EventBus.Content.ContentEvent.Fire(ContentAction.Update, content);

            }
        }
Beispiel #17
0
        public virtual ContentBase Copy(TextContent originalContent, TextFolder textFolder, bool keepStatus, bool keepUUID, NameValueCollection values)
        {
            textFolder = textFolder.AsActual();
            var repository = textFolder.Repository;
            var schema = new Schema(repository, textFolder.SchemaName);
            var copyedContent = new TextContent(originalContent);
            copyedContent.Id = "";
            copyedContent.UUID = "";
            if (keepUUID)
            {
                copyedContent.UUID = originalContent.UUID;
            }
            copyedContent.CreationDate = DateTime.UtcNow;
            copyedContent.Repository = textFolder.Repository.Name;
            copyedContent.FolderName = textFolder.FullName;
            copyedContent.SchemaName = textFolder.SchemaName;
            copyedContent.OriginalUUID = originalContent.UUID;
            copyedContent.OriginalRepository = originalContent.Repository;
            copyedContent.OriginalFolder = originalContent.FolderName;
            copyedContent.IsLocalized = false;
            copyedContent.Sequence = 0;
            copyedContent.UserId = originalContent.UserId;

            var versions = Versioning.VersionManager.AllVersionInfos(originalContent).ToArray();
            if (versions.Any())
            {
                copyedContent.OriginalLastestVisitedVersionId = versions.Max(it => it.Version);
            }

            if (values != null)
            {
                originalContent = Binder.Bind(schema, copyedContent, values);
            }

            if (!keepStatus)
            {
                copyedContent.Published = false;
            }
            //如果没有Content event,那么在发送设置的“转发”功能就会失效。
            EventBus.Content.ContentEvent.Fire(ContentAction.PreAdd, copyedContent);

            TextContentProvider.Add(copyedContent);

            if (textFolder.Categories != null && textFolder.Categories.Count > 0)
            {
                var originalRepository = originalContent.GetRepository();
                var originalFolder = originalContent.GetFolder().AsActual();
                var originalCategories = QueryCategories(originalRepository, originalFolder.FullName, originalContent.UUID);

                List<TextContent> categories = new List<TextContent>();

                foreach (var category in originalCategories)
                {
                    foreach (var originalCategoryContent in category.Contents)
                    {
                        foreach (var categoryFolder in textFolder.Categories)
                        {
                            var categoryContent = (new TextFolder(textFolder.Repository, categoryFolder.FolderName)).CreateQuery()
                                .WhereEquals("UUID", originalCategoryContent.UUID).FirstOrDefault();
                            if (categoryContent != null)
                            {
                                categories.Add(categoryContent);
                                break;
                            }
                        }
                    }
                }

                AddCategories(repository, copyedContent, categories.ToArray());
            }

            EventBus.Content.ContentEvent.Fire(ContentAction.Add, copyedContent);

            return copyedContent;
        }
Beispiel #18
0
 public virtual void Localize(TextFolder textFolder, string uuid)
 {
     Update(textFolder.Repository, textFolder.GetSchema(), uuid, new string[] { "IsLocalized" }, new object[] { true });
 }
 public TranslatedCategoriesQuery(Repository repository, TextFolder categoryFolder)
     : base(repository, new Schema(repository, categoryFolder.AsActual().SchemaName), categoryFolder)
 {
     this.CategoryFolder = categoryFolder;
 }