コード例 #1
0
        public override object Execute()
        {
            IEnumerable<TextContent> contents = new TextContent[0];

            contents = TextContentQuery.Schema.GetContents();

            if (TextContentQuery.Folder != null)
            {
                contents = contents.Where(it => it.FolderName.EqualsOrNullEmpty(TextContentQuery.Folder.FullName, StringComparison.CurrentCultureIgnoreCase));
            }

            QueryExpressionTranslator translator = new QueryExpressionTranslator();

            var contentQueryable = translator.Translate(TextContentQuery.Expression, contents.AsQueryable());

            foreach (var categoryQuery in translator.CategoryQueries)
            {
                var categories = (IEnumerable<TextContent>)ContentQueryExecutor.Execute(categoryQuery);

                var categoryData = TextContentQuery.Repository.GetCategoryData()
                    .Where(it => categories.Any(c => it.CategoryUUID.EqualsOrNullEmpty(c.UUID, StringComparison.CurrentCultureIgnoreCase)));

                contentQueryable = contentQueryable.Where(it => categoryData.Any(c => it.UUID.EqualsOrNullEmpty(c.ContentUUID, StringComparison.CurrentCultureIgnoreCase)));

            }

            return Execute(contentQueryable, translator.OrderExpressions, translator.CallType, translator.Skip, translator.Take);
        }
コード例 #2
0
ファイル: ContentVersionPath.cs プロジェクト: eyouyou/Bsc
 public ContentVersionPath(TextContent content)
 {
     var contentPath = new TextContentPath(content);
     var basePath = EngineContext.Current.Resolve<IBaseDir>();
     var versionPath = Path.Combine(basePath.DataPhysicalPath, VersionPathName);
     this.PhysicalPath = contentPath.PhysicalPath.Replace(basePath.DataPhysicalPath, versionPath);
 }
コード例 #3
0
 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);
     }
 }
コード例 #4
0
ファイル: VersionManager.cs プロジェクト: eyouyou/Bsc
 public VersionInfo GetVersion(TextContent content, int version)
 {
     string versionFile = GetVersionFile(content, version);
     if (File.Exists(versionFile))
     {
         var versionInfo = DataContractSerializationHelper.Deserialize<VersionInfo>(versionFile);
         versionInfo.Version = version;
         return versionInfo;
     }
     return null;
 }
コード例 #5
0
 protected virtual SendingSetting AllowSending(TextContent content, Repository repository, ContentEventContext eventContext)
 {
     if (!repository.EnableBroadcasting)
     {
         return null;
     }
     var list = Providers.DefaultProviderFactory.GetProvider<ISendingSettingProvider>().All(repository).Select(o => Providers.DefaultProviderFactory.GetProvider<ISendingSettingProvider>().Get(o));
     foreach (var item in list)
     {
         if (AllowSendingSetting(content, item, eventContext))
         {
             return item;
         }
     }
     return null;
 }
コード例 #6
0
ファイル: VersionManager.cs プロジェクト: eyouyou/Bsc
 public IEnumerable<int> AllVersions(TextContent content)
 {
     ContentVersionPath versionPath = new ContentVersionPath(content);
     if (Directory.Exists(versionPath.PhysicalPath))
     {
         foreach (var file in Directory.EnumerateFiles(versionPath.PhysicalPath))
         {
             string fileName = Path.GetFileNameWithoutExtension(file);
             int version;
             if (int.TryParse(fileName, out version))
             {
                 yield return version;
             }
         }
     }
 }
コード例 #7
0
ファイル: ChildrenQueryExecutor.cs プロジェクト: eyouyou/Bsc
        public override object Execute()
        {
            var parent = (IEnumerable<TextContent>)ContentQueryExecutor.Execute(ChildrenQuery.ParentQuery);
            IQueryable<TextContent> contents = new TextContent[0].AsQueryable();
            if (parent.Count() > 0)
            {

                contents = ChildrenQuery.ChildSchema.GetContents().AsQueryable();

            }

            QueryExpressionTranslator translator = new QueryExpressionTranslator();
            contents = translator.Translate(ChildrenQuery.Expression, contents);

            contents = contents.Where(it => parent.Any(c => it.ParentUUID.EqualsOrNullEmpty(c.UUID, StringComparison.CurrentCultureIgnoreCase)));

            return Execute(contents, translator.OrderExpressions, translator.CallType, translator.Skip, translator.Take);
        }
コード例 #8
0
ファイル: TextContentHelper.cs プロジェクト: eyouyou/Bsc
        public static TextContent ConvertToUTCTime(this TextContent textContent)
        {
            ITimeZoneHelper timeZoneHelper = Bsc.Dmtds.Core.Runtime.EngineContext.Current.Resolve<ITimeZoneHelper>();
            TextContent newTextContent = new TextContent(textContent);

            foreach (var key in newTextContent.Keys.ToArray())
            {
                if (newTextContent[key] is DateTime)
                {
                    DateTime dt = (DateTime)newTextContent[key];
                    if (dt.Kind != DateTimeKind.Utc)
                    {
                        newTextContent[key] = timeZoneHelper.ConvertToUtcTime(dt);
                    }
                }
            }

            return newTextContent;
        }
コード例 #9
0
ファイル: VersionManager.cs プロジェクト: eyouyou/Bsc
        public void LogVersion(TextContent content)
        {
            VersionInfo versionInfo = new VersionInfo()
            {
                CommitUser = content.UserId,
                UtcCommitDate = content.LastModificationDate,
                TextContent = new Dictionary<string, object>(content)
            };
            if (!string.IsNullOrEmpty(content.FolderName))
            {
                versionInfo.Categories = ServiceFactory.TextContentManager
                                     .QueryCategories(content.GetRepository(), content.FolderName, content.UUID)
                                     .Select(it => new Category()
                                     {
                                         FolderName = it.CategoryFolder.FullName,
                                         Contents = it.Contents.Select(c => new CategoryContent() { UUID = c.UUID, DisplayName = c.GetSummary() }).ToArray()
                                     })
                                     .ToArray();
            }

            DataContractSerializationHelper.Serialize(versionInfo, GetNextVersionFile(content));
        }
コード例 #10
0
        public override object Execute()
        {
            var contents = (IEnumerable<TextContent>)ContentQueryExecutor.Execute(CategoriesQuery.InnerQuery);
            IQueryable<TextContent> categories = new TextContent[0].AsQueryable();
            if (contents.Count() > 0)
            {
                categories = CategoriesQuery.CategoryFolder.GetSchema().GetContents().AsQueryable();
            }

            QueryExpressionTranslator translator = new QueryExpressionTranslator();

            categories = translator.Translate(CategoriesQuery.Expression, categories);

            var categoryData = CategoriesQuery.Repository.GetCategoryData()
                .Where(it => it.CategoryFolder.EqualsOrNullEmpty(CategoriesQuery.CategoryFolder.FullName, StringComparison.CurrentCultureIgnoreCase))
                .Where(it => contents.Any(c => it.ContentUUID.EqualsOrNullEmpty(c.UUID, StringComparison.CurrentCultureIgnoreCase)))
                .ToArray();

            categories = categories.Where(it => categoryData.Any(c => it.UUID.EqualsOrNullEmpty(c.CategoryUUID, StringComparison.CurrentCultureIgnoreCase)));

            var result = Execute(categories, translator.OrderExpressions, translator.CallType, translator.Skip, translator.Take);

            return result;
        }
コード例 #11
0
ファイル: TextContentManager.cs プロジェクト: eyouyou/Bsc
 public virtual void RemoveCategories(Repository repository, TextContent textContent, params TextContent[] categories)
 {
     var relations = categories.Select(it => new Category()
     {
         ContentUUID = textContent.UUID,
         CategoryFolder = it.FolderName,
         CategoryUUID = it.UUID
     });
     TextContentProvider.DeleteCategories(textContent, relations.ToArray());
 }
コード例 #12
0
ファイル: TextContentManager.cs プロジェクト: eyouyou/Bsc
        public virtual TextContent Copy(Schema schema, string uuid)
        {
            var repository = schema.Repository;
            var content = schema.CreateQuery().WhereEquals("UUID", uuid).FirstOrDefault();
            if (content != null)
            {
                var textContent = new TextContent(content);
                textContent.Id = "";
                textContent.UUID = "";
                textContent.CreationDate = DateTime.Now;
                textContent.LastModificationDate = DateTime.Now;
                textContent.Published = null;
                textContent.Sequence = 0;
                textContent.UserKey = null;
                var titleField = schema.AsActual().GetSummarizeColumn();
                if (titleField != null)
                {
                    textContent[titleField.Name] = (content[titleField.Name] ?? "") + " - Copy";
                }

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

                TextContentProvider.Add(textContent);

                var categories = this.QueryCategories(repository, content.FolderName, uuid);
                this.AddCategories(repository, textContent, categories.SelectMany(it => it.Contents).ToArray());

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

                return textContent;
            }
            return null;
        }
コード例 #13
0
ファイル: TextContentManager.cs プロジェクト: eyouyou/Bsc
        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;
        }
コード例 #14
0
ファイル: TextContentManager.cs プロジェクト: eyouyou/Bsc
 public virtual void ClearCategories(Repository repository, TextContent textContent)
 {
     TextContentProvider.ClearCategories(textContent);
 }
コード例 #15
0
ファイル: TextContentManager.cs プロジェクト: eyouyou/Bsc
        public virtual TextContent Add(Repository repository, Schema schema, string parentUUID, NameValueCollection values, HttpFileCollectionBase files,
           string userid = "")
        {
            var textContent = new TextContent(repository.Name, schema.Name, null);
            textContent.ParentUUID = parentUUID;

            textContent = Binder.Bind(schema, textContent, values);
            textContent.LastModificationDate = textContent.CreationDate = DateTime.Now.ToUniversalTime();
            textContent.UserId = userid;

            if (files != null)
            {
                textContent.ContentFiles = GetPostFiles(files);
            }
            EventBus.Content.ContentEvent.Fire(ContentAction.PreAdd, textContent);

            TextContentProvider.Add(textContent);

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

            return textContent;
        }
コード例 #16
0
ファイル: TextContentManager.cs プロジェクト: eyouyou/Bsc
        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;
        }
コード例 #17
0
ファイル: VersionManager.cs プロジェクト: eyouyou/Bsc
 public static VersionInfo GetVersion(TextContent content, int version)
 {
     return VersionLogger.GetVersion(content, version);
 }
コード例 #18
0
ファイル: TextContentManager.cs プロジェクト: eyouyou/Bsc
        public virtual TextContent Update(Repository repository, Schema schema, string uuid, NameValueCollection values,
            HttpFileCollectionBase files, string userid = "")
        {
            var textContent = schema.CreateQuery().WhereEquals("UUID", uuid).First();
            var old = new TextContent(textContent);

            textContent = Binder.Update(schema, textContent, values);
            textContent.LastModificationDate = DateTime.Now.ToUniversalTime();
            textContent.UserId = userid;
            if (files != null)
            {
                textContent.ContentFiles = GetPostFiles(files);
            }

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

            TextContentProvider.Update(textContent, old);

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

            return textContent;
        }
コード例 #19
0
ファイル: TextContentManager.cs プロジェクト: eyouyou/Bsc
        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);
            }
        }
コード例 #20
0
ファイル: VersionManager.cs プロジェクト: eyouyou/Bsc
 private string GetVersionFile(TextContent content, int version)
 {
     ContentVersionPath versionPath = new ContentVersionPath(content);
     return Path.Combine(versionPath.PhysicalPath, string.Format("{0}.xml", version));
 }
コード例 #21
0
ファイル: VersionManager.cs プロジェクト: eyouyou/Bsc
 private string GetNextVersionFile(TextContent content)
 {
     var versions = AllVersions(content);
     var nextVersion = versions.Count() == 0 ? 1 : versions.Max() + 1;
     return GetVersionFile(content, nextVersion);
 }
コード例 #22
0
ファイル: ContentEvent.cs プロジェクト: eyouyou/Bsc
 public static void Fire(ContentAction contentAction, TextContent textContent)
 {
     EventBus.Send(new ContentEventContext(contentAction, textContent));
 } 
コード例 #23
0
ファイル: VersionManager.cs プロジェクト: eyouyou/Bsc
 public static void LogVersion(TextContent content)
 {
     if (content.GetRepository().AsActual().EnableVersioning.Value == true)
     {
         VersionLogger.LogVersion(content);
     }
 }
コード例 #24
0
ファイル: VersionManager.cs プロジェクト: eyouyou/Bsc
 public IEnumerable<VersionInfo> AllVersionInfos(TextContent content)
 {
     return AllVersions(content).Select(it => GetVersion(content, it)).OrderByDescending(it => it.Version);
 }
コード例 #25
0
ファイル: TextContentManager.cs プロジェクト: eyouyou/Bsc
        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;
        }
コード例 #26
0
 protected virtual bool AllowSendingSetting(TextContent content, SendingSetting sendingSetting, ContentEventContext eventContext)
 {
     if (!string.IsNullOrEmpty(sendingSetting.FolderName) && !sendingSetting.FolderName.Equals(content.FolderName, StringComparison.CurrentCultureIgnoreCase))
     {
         return false;
     }
     if (!string.IsNullOrEmpty(content.OriginalUUID))
     {
         if (content.IsLocalized == null || content.IsLocalized.Value == false)
         {
             if ((sendingSetting.SendReceived == null || sendingSetting.SendReceived.Value == false))
             {
                 return false;
             }
         }
     }
     return true;
 }
コード例 #27
0
ファイル: ContentEventContext.cs プロジェクト: eyouyou/Bsc
 public ContentEventContext(ContentAction contentAction, TextContent content)
 {
     this.ContentAction = contentAction;
     this.Content = content;
 }
コード例 #28
0
ファイル: VersionManager.cs プロジェクト: eyouyou/Bsc
 public static IEnumerable<int> AllVersions(TextContent content)
 {
     return VersionLogger.AllVersions(content);
 }