/// <summary> /// 删除和更新分类时触发 /// </summary> private void DeleteUpdateCategories_Before(Category sender, CommonEventArgs eventArgs) { if (sender.TenantTypeId == TenantTypeIds.Instance().Topic()) { if (eventArgs.EventOperationType == EventOperationType.Instance().Delete() || eventArgs.EventOperationType == EventOperationType.Instance().Update()) { IEnumerable<long> groupIds = categoryService.GetItemIds(sender.CategoryId, false); if (groupSearcher == null) { groupSearcher = (TopicSearcher)SearcherFactory.GetSearcher(TopicSearcher.CODE); } groupSearcher.Update(topicService.GetTopicEntitiesByIds(groupIds)); } } }
/// <summary> /// 删除和更新分类时触发 /// </summary> private void DeleteUpdateCategories_Before(Category sender, CommonEventArgs eventArgs) { if (sender.TenantTypeId == TenantTypeIds.Instance().Journals()) { if (eventArgs.EventOperationType == EventOperationType.Instance().Delete() || eventArgs.EventOperationType == EventOperationType.Instance().Update()) { IEnumerable<long> blogThreadIds = categoryService.GetItemIds(sender.CategoryId, false); if (journalSearcher == null) { journalSearcher = (JournalSearcher)SearcherFactory.GetSearcher(JournalSearcher.CODE); } journalSearcher.Update(journalService.GetJournalsByIds(blogThreadIds)); } } }
/// <summary> /// 迭代获取类别 /// </summary> /// <param name="category"></param> /// <param name="allParentCategories"></param> private void RecursiveGetAllParentCategories(Category category, ref List<Category> allParentCategories) { if (category == null) return; allParentCategories.Insert(0, category); Category parent = category.Parent; if (parent != null) RecursiveGetAllParentCategories(parent, ref allParentCategories); }
/// <summary> /// 递归获取所有父级(如果没有子级则不包含本级) /// </summary> /// <param name="category"></param> /// <param name="allParentCategories"></param> private void GetAllParentCategories(Category category, ref List<Category> allParentCategories) { if (category == null) return; if (category.ChildCount != 0) allParentCategories.Insert(0, category); GetAllParentCategories(category.Parent, ref allParentCategories); }
/// <summary> /// 获取当前分类是否是打开状态 /// </summary> /// <param name="category">当前分类</param> /// <param name="checkedCategoryIds">被选中的分类Id集合</param> /// <param name="openLevel">默认展开的层级</param> /// <returns>是否打开</returns> private static bool IsOpenedNode(Category category, List<long> checkedCategoryIds, int? openLevel) { //有选中分类的情况;该分类的所有父级分类展开,其他分类关闭 if (checkedCategoryIds != null && checkedCategoryIds.Count > 0) { return checkedCategoryIds.Contains(category.CategoryId); } //小于等于展开层级的分类展开,其他分类关闭 else if (openLevel.HasValue && openLevel.Value > 0) { return category.Depth <= openLevel; } return false; }
/// <summary> /// 是否具有编辑分类的权限 /// </summary> /// <returns></returns> public bool Category_Edit(Category category) { IUser currentUser = UserContext.CurrentUser; if (currentUser == null) return false; TenantType tenantType = tenantTypeService.Get(category.TenantTypeId); if (tenantType == null) return false; if (IsAdministrator(tenantType.ApplicationId)) return true; if (AuthorizationService.IsTenantManager(currentUser, category.TenantTypeId, category.OwnerId)) return true; return false; }
/// <summary> /// 新建实体时使用 /// </summary> public static Category New() { Category categorie = new Category() { CategoryName = string.Empty, Description = string.Empty, TenantTypeId = string.Empty, AuditStatus = AuditStatus.Success, PrivacyStatus = PrivacyStatus.Public, LastModified = DateTime.UtcNow, DateCreated = DateTime.UtcNow }; return categorie; }
/// <summary> /// 获取所有父类 /// </summary> /// <param name="categories">父分类列表</param> /// <param name="category">当前分类</param> /// <param name="includeSelf">是否包含自己</param> /// <param name="maxLength">最大个数(-1:不做限制,0:获取不到任何数据)(从本身一级开始往上数N级)</param> private static void GetAllParentCategory(Category category, ref List<Category> categories, bool includeSelf = true, int maxLength = -1) { if (category == null) return; if (maxLength == 0 || maxLength < -1) return; if (maxLength != -1) maxLength--; if (includeSelf) categories.Insert(0, category); if (category.Parent == null) return; GetAllParentCategory(category.Parent, ref categories, true, maxLength); }