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); } }
/// <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; }
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; }
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); }
public void Unpublish(TextFolder textFolder, string contentUUID, string userName = "") { this.Update(textFolder, contentUUID, "Published", false, userName); }
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) { } }
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); } }
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; }
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); }
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; }
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); }
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; }
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); } }
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; }
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; }