/// <summary> /// 详细页面地址 /// </summary> /// <param name="itemId">推荐内容Id</param> /// <returns></returns> public string RecommendItemDetail(long itemId) { ContentItem contentItem = new ContentItemService().Get(itemId); if (contentItem == null) return string.Empty; return SiteUrls.Instance().ContentItemDetail(itemId); }
public void ContentItemService_Add_Test() { // Arrange Mock <IContentItemDao> mock = new Mock <IContentItemDao>(MockBehavior.Strict); mock.Setup(setup => setup.Add(It.IsAny <ContentItem>())) .Callback((ContentItem contentItem) => contentItem.Id = 123) .Returns((ContentItem contentItem) => { return(contentItem); }); ContentItemService target = new ContentItemService(mock.Object); // Act ContentItem result = target.Add(new ContentItem() { Title = "Bevrijding", BeginDate = 1945M, EndDate = 1945M, SourceURL = "UrlNaSource", HasChildren = false, }); // Assert Assert.IsNotNull(result); Assert.AreEqual(123, result.Id); Assert.AreEqual("Bevrijding", result.Title); Assert.AreEqual(1945M, result.BeginDate); Assert.AreEqual(1945M, result.EndDate); Assert.AreEqual("UrlNaSource", result.SourceURL); Assert.AreEqual(false, result.HasChildren); mock.Verify(verify => verify.Add(It.IsAny <ContentItem>()), Times.Once); }
public void ContentItemService_Find_Test() { // Arrange Mock <IContentItemDao> mock = new Mock <IContentItemDao>(MockBehavior.Strict); mock.Setup(setup => setup.Find(It.IsAny <long>(), It.IsAny <int>())).Returns(new ContentItem { Id = 1, Title = "Bevrijding", BeginDate = 1945M, EndDate = 1945M, SourceURL = "UrlNaSource", HasChildren = true, Children = new ContentItem[2] }); ContentItemService target = new ContentItemService(mock.Object); // Act ContentItem result = target.Find(1, 1); // Assert Assert.IsNotNull(result); Assert.AreEqual(1, result.Id); Assert.AreEqual("Bevrijding", result.Title); Assert.AreEqual(1945M, result.BeginDate); Assert.AreEqual(1945M, result.EndDate); Assert.AreEqual("UrlNaSource", result.SourceURL); Assert.AreEqual(true, result.HasChildren); Assert.AreEqual(2, result.Children.Length); mock.Verify(verify => verify.Find(It.IsAny <long>(), It.IsAny <int>()), Times.Once); }
public void ContentItemService_Add_DontCatchException_Test() { // Arrange Mock <IContentItemDao> mock = new Mock <IContentItemDao>(MockBehavior.Strict); mock.Setup(setup => setup.Add(It.IsAny <ContentItem>())).Throws(new Exception()); ContentItemService target = new ContentItemService(mock.Object); // Act target.Add(new ContentItem()); }
/// <summary> /// 获取被评论对象名称 /// </summary> /// <param name="commentedObjectId">被评论对象Id</param> /// <param name="tenantTypeId">租户类型Id</param> /// <returns></returns> public string GetCommentedObjectName(long commentedObjectId, string tenantTypeId) { if (tenantTypeId == TenantTypeIds.Instance().ContentItem()) { ContentItem contentItem = new ContentItemService().Get(commentedObjectId); if (contentItem != null) { return contentItem.Title; } } return string.Empty; }
public void ContentItemService_Update_Test() { // Arrange Mock <IContentItemDao> mock = new Mock <IContentItemDao>(MockBehavior.Strict); mock.Setup(setup => setup.Update(It.IsAny <ContentItem>())); ContentItemService target = new ContentItemService(mock.Object); ContentItem contentItem = new ContentItem(); // Act target.Update(contentItem); mock.Verify(verify => verify.Update(contentItem), Times.Once); }
/// <summary> /// 获取被评论对象(部分) /// </summary> /// <param name="commentedObjectId"></param> /// <returns></returns> public CommentedObject GetCommentedObject(long commentedObjectId) { ContentItem contentItem = new ContentItemService().Get(commentedObjectId); if (contentItem != null) { CommentedObject commentedObject = new CommentedObject(); commentedObject.DetailUrl = SiteUrls.Instance().ContentItemDetail(commentedObjectId); commentedObject.Name = contentItem.Title; commentedObject.Author = contentItem.Author; commentedObject.UserId = contentItem.UserId; return commentedObject; } return null; }
public ActionResult _DeleteContribute(long contentItemId) { var contentItemService = new ContentItemService(); ContentItem contentItem = contentItemService.Get(contentItemId); if (contentItem == null) { return(Json(new StatusMessageData(StatusMessageType.Error, "没有找到准备删除的投稿"))); } if (authorizer.CMS_DeleteContentItem(contentItem)) { contentItemService.Delete(contentItem); } else { return(Json(new StatusMessageData(StatusMessageType.Error, "您没有删除此投稿的权限"))); } return(Json(new StatusMessageData(StatusMessageType.Success, "成功删除了投稿"))); }
/// <summary> /// 评论资讯动态处理程序 /// </summary> /// <param name="comment"></param> /// <param name="eventArgs"></param> private void CmsCommentActivityEventModule_After(Comment comment, AuditEventArgs eventArgs) { NoticeService noticeService = new NoticeService(); ContentItem contentItem = null; if (comment.TenantTypeId == TenantTypeIds.Instance().ContentItem()) { //生成动态 ActivityService activityService = new ActivityService(); AuditService auditService = new AuditService(); bool? auditDirection = auditService.ResolveAuditDirection(eventArgs.OldAuditStatus, eventArgs.NewAuditStatus); if (auditDirection == true) { //创建评论的动态[关注评论者的粉丝可以看到该评论] Activity activity = Activity.New(); activity.ActivityItemKey = ActivityItemKeys.Instance().CreateCmsComment(); activity.ApplicationId = CmsConfig.Instance().ApplicationId; ContentItemService contentItemService = new ContentItemService(); contentItem = contentItemService.Get(comment.CommentedObjectId); if (contentItem == null || contentItem.UserId == comment.UserId) { return; } activity.IsOriginalThread = true; activity.IsPrivate = false; activity.OwnerId = comment.UserId; activity.OwnerName = comment.Author; activity.OwnerType = ActivityOwnerTypes.Instance().User(); activity.ReferenceId = contentItem.ContentItemId; activity.ReferenceTenantTypeId = TenantTypeIds.Instance().ContentItem(); activity.SourceId = comment.Id; activity.TenantTypeId = TenantTypeIds.Instance().Comment(); activity.UserId = comment.UserId; activityService.Generate(activity, false); } else if (auditDirection == false) { activityService.DeleteSource(TenantTypeIds.Instance().Comment(), comment.Id); } } }
/// <summary> /// 资讯详细显示页 /// </summary> public static string ContentItemDetail(this SiteUrls siteUrls, long contentItemId) { var contentItemService = new ContentItemService(); var item = contentItemService.Get(contentItemId); if (item == null) return string.Empty; if (item.ContentType != null && item.ContentType.ContentTypeKey == ContentTypeKeys.Instance().NewsLink()) return item.AdditionalProperties.Get<string>("LinkUrl", string.Empty); RouteValueDictionary routeValueDictionary = new RouteValueDictionary(); routeValueDictionary.Add("contentItemId", contentItemId); return CachedUrlHelper.Action("ContentItemDetail", "ChannelCms", CmsAreaName, routeValueDictionary); }
/// <summary> /// 将EditModel转换成数据库实体 /// </summary> public ContentItem AsContentItem(System.Web.HttpRequestBase Request) { ContentItem contentItem = null; if (this.ContentItemId > 0) { contentItem = new ContentItemService().Get(this.ContentItemId); } else { contentItem = new ContentItem(); contentItem.Author = UserContext.CurrentUser == null ? "" : UserContext.CurrentUser.DisplayName; contentItem.IP = WebUtility.GetIP(); contentItem.UserId = UserContext.CurrentUser == null ? 0 : UserContext.CurrentUser.UserId; contentItem.ContentTypeId = this.ContentTypeId; } if (this.ContentFolderId > 0) { ContentFolder folder = new ContentFolderService().Get(this.ContentFolderId); if (folder != null) { contentItem.ContentFolderId = this.ContentFolderId; if (this.AdditionalProperties == null) this.AdditionalProperties = new Dictionary<string, object>(); IEnumerable<ContentTypeColumnDefinition> contentTypeColumnDefinitions = new MetadataService().GetColumnsByContentTypeId(this.ContentTypeId); foreach (var item in contentTypeColumnDefinitions) { object value = null; switch (item.DataType) { case "int": case "long": value = Request.Form.Get<long>(item.ColumnName, 0); break; case "datetime": value = Request.Form.Get<DateTime>(item.ColumnName, DateTime.MinValue); break; case "bool": value = Request.Form.Get<bool>(item.ColumnName, false); break; default: value = Request.Form.Get<string>(item.ColumnName, string.Empty); break; } if (this.AdditionalProperties.ContainsKey(item.ColumnName)) this.AdditionalProperties[item.ColumnName] = value; else this.AdditionalProperties.Add(item.ColumnName, value); } } } contentItem.AdditionalProperties = this.AdditionalProperties; contentItem.IsEssential = false; contentItem.IsLocked = false; contentItem.IsGlobalSticky = this.IsGlobalSticky; if (this.GlobalStickyDate.CompareTo(DateTime.MinValue) > 0) contentItem.GlobalStickyDate = this.GlobalStickyDate; contentItem.IsFolderSticky = this.IsFolderSticky; if (this.FolderStickyDate.CompareTo(DateTime.MinValue) > 0) contentItem.FolderStickyDate = this.FolderStickyDate; contentItem.DisplayOrder = this.DisplayOrder; contentItem.FeaturedImageAttachmentId = this.FeaturedImageAttachmentId; contentItem.LastModified = DateTime.UtcNow; contentItem.Title = this.Title; if (this.ReleaseDate.CompareTo(DateTime.MinValue) > 0) contentItem.ReleaseDate = this.ReleaseDate.ToUniversalTime(); //摘要 contentItem.Summary = this.Summary ?? string.Empty; if (this.TrimBodyAsSummary) { string summary = HtmlUtility.TrimHtml(Request.Form.Get<string>("Body", string.Empty), TextLengthSettings.TEXT_DESCRIPTION_MAXLENGTH); contentItem.Summary = summary; } if (contentItem.AdditionalProperties.ContainsKey("AutoPage")) { bool autoPage = Request.Form.Get<bool>("AutoPage", false); int pageLength = Request.Form.Get<int>("PageLength", 1000); string body = contentItem.AdditionalProperties.Get<string>("Body", string.Empty); if (autoPage) { pageLength = pageLength > 0 ? pageLength : 1000; if (!string.IsNullOrEmpty(body)) { body = body.Replace(ContentPages.PageSeparator, ""); contentItem.AdditionalProperties["Body"] = string.Join(ContentPages.PageSeparator, ContentPages.GetPageContentForStorage(body, pageLength, true).ToArray()); } } else { pageLength = 0; body = body.Replace(ContentPages.PageSeparator, ""); contentItem.AdditionalProperties["Body"] = body; contentItem.AdditionalProperties["pageLength"] = pageLength; } } if (contentItem.AdditionalProperties.ContainsKey("Editor")) { string editor = contentItem.AdditionalProperties.Get<string>("Editor", string.Empty); if (string.IsNullOrEmpty(editor)) contentItem.AdditionalProperties["Editor"] = contentItem.ContentFolder.Editor; } if (contentItem.FeaturedImageAttachmentId > 0) { AttachmentService<Attachment> attachmentService = new AttachmentService<Attachment>(TenantTypeIds.Instance().ContentItem()); Attachment attachment = attachmentService.Get(contentItem.FeaturedImageAttachmentId); if (attachment != null) { contentItem.FeaturedImage = attachment.GetRelativePath() + "\\" + attachment.FileName; } else { contentItem.FeaturedImageAttachmentId = 0; } } else { contentItem.FeaturedImage = string.Empty; } return contentItem; }
/// <summary> /// 任务执行的内容 /// </summary> /// <param name="taskDetail">任务配置状态信息</param> public void Execute(TaskDetail taskDetail) { ContentItemService contentItemService = new ContentItemService(); contentItemService.ExpireStickyContentItems(); }
public ActionResult Contribute(ContentItemEditModel model) { ContentItem item = model.AsContentItem(Request); var contentItemService = new ContentItemService(); string errorMessage = string.Empty; if (item.ContentItemId > 0) { if (!authorizer.CMS_EditContentItem(item)) { errorMessage = "没有权限编辑资讯:" + item.Title; return(Redirect(SiteUrls.Instance().SystemMessage(TempData, new SystemMessageViewModel { Body = errorMessage, Title = "没有权限", StatusMessageType = StatusMessageType.Hint }, Request.RawUrl))); } } else { if (!authorizer.CMS_Contribute(out errorMessage)) { return(Redirect(SiteUrls.Instance().SystemMessage(TempData, new SystemMessageViewModel { Body = errorMessage, Title = "没有权限", StatusMessageType = StatusMessageType.Hint }, Request.RawUrl))); } } try { if (item.ContentItemId > 0) { contentItemService.Update(item); TempData["StatusMessageData"] = new StatusMessageData(StatusMessageType.Success, "更新成功"); //清除标签 tagService.ClearTagsFromItem(item.ContentItemId, item.UserId); } else { if (!authorizer.CMS_ManageContentFolder(item.ContentFolder)) { item.IsContributed = true; } item.ReleaseDate = DateTime.UtcNow; contentItemService.Create(item); TempData["StatusMessageData"] = new StatusMessageData(StatusMessageType.Success, "创建成功"); } } catch { TempData["StatusMessageData"] = new StatusMessageData(StatusMessageType.Error, "创建或者更新失败,请重试"); TempData["ContentItemEditModel"] = model; return(Redirect(SiteUrls.Instance().Contribute(item.ContentItemId))); } string tags = string.Join(",", model.TagNames); if (!string.IsNullOrEmpty(tags)) { tagService.AddTagsToItem(tags, item.UserId, item.ContentItemId); } return(Redirect(SiteUrls.Instance().ContentItemDetail(item.ContentItemId))); }
/// <summary> /// 投稿 /// </summary> /// <param name="contentItemId"></param> /// <returns></returns> public ActionResult Contribute(long?contentItemId = null) { pageResourceManager.InsertTitlePart("编辑资讯"); var metadataService = new MetadataService(); ContentTypeDefinition contentType = metadataService.GetContentType(ContentTypeKeys.Instance().News()); if (contentType == null) { return(HttpNotFound()); } if (UserContext.CurrentUser == null) { return(Redirect(SiteUrls.Instance().Login(true))); } ContentItemEditModel model = TempData.Get <ContentItemEditModel>("ContentItemEditModel", null); if (model == null) { ContentItem item = null; string errorMessage = string.Empty; if (contentItemId.HasValue && contentItemId.Value > 0) { item = new ContentItemService().Get(contentItemId.Value); if (item == null) { return(HttpNotFound()); } model = item.AsEditModel(); if (!authorizer.CMS_EditContentItem(item)) { errorMessage = "没有权限编辑资讯:" + item.Title; return(Redirect(SiteUrls.Instance().SystemMessage(TempData, new SystemMessageViewModel { Body = errorMessage, Title = "没有权限", StatusMessageType = StatusMessageType.Hint }, Request.RawUrl))); } } else { model = new ContentItemEditModel { ContentTypeId = contentType.ContentTypeId }; if (!authorizer.CMS_Contribute(out errorMessage)) { return(Redirect(SiteUrls.Instance().SystemMessage(TempData, new SystemMessageViewModel { Body = errorMessage, Title = "没有权限", StatusMessageType = StatusMessageType.Hint }, Request.RawUrl))); } } } else { TempData.Remove("ContentItemEditModel"); } return(View(contentItemId.HasValue ? contentType.Page_Edit : contentType.Page_New, model)); }
public ActionResult Contribute(ContentItemEditModel model) { ContentItem item = model.AsContentItem(Request); var contentItemService = new ContentItemService(); string errorMessage = string.Empty; if (item.ContentItemId > 0) { if (!authorizer.CMS_EditContentItem(item)) { errorMessage = "没有权限编辑资讯:" + item.Title; return Redirect(SiteUrls.Instance().SystemMessage(TempData, new SystemMessageViewModel { Body = errorMessage, Title = "没有权限", StatusMessageType = StatusMessageType.Hint }, Request.RawUrl)); } } else { if (!authorizer.CMS_Contribute(out errorMessage)) { return Redirect(SiteUrls.Instance().SystemMessage(TempData, new SystemMessageViewModel { Body = errorMessage, Title = "没有权限", StatusMessageType = StatusMessageType.Hint }, Request.RawUrl)); } } try { if (item.ContentItemId > 0) { contentItemService.Update(item); TempData["StatusMessageData"] = new StatusMessageData(StatusMessageType.Success, "更新成功"); //清除标签 tagService.ClearTagsFromItem(item.ContentItemId, item.UserId); } else { if (!authorizer.CMS_ManageContentFolder(item.ContentFolder)) item.IsContributed = true; item.ReleaseDate = DateTime.UtcNow; contentItemService.Create(item); TempData["StatusMessageData"] = new StatusMessageData(StatusMessageType.Success, "创建成功"); } } catch { TempData["StatusMessageData"] = new StatusMessageData(StatusMessageType.Error, "创建或者更新失败,请重试"); TempData["ContentItemEditModel"] = model; return Redirect(SiteUrls.Instance().Contribute(item.ContentItemId)); } string tags = string.Join(",", model.TagNames); if (!string.IsNullOrEmpty(tags)) { tagService.AddTagsToItem(tags, item.UserId, item.ContentItemId); } return Redirect(SiteUrls.Instance().ContentItemDetail(item.ContentItemId)); }
/// <summary> /// 投稿 /// </summary> /// <param name="contentItemId"></param> /// <returns></returns> public ActionResult Contribute(long? contentItemId = null) { pageResourceManager.InsertTitlePart("编辑资讯"); var metadataService = new MetadataService(); ContentTypeDefinition contentType = metadataService.GetContentType(ContentTypeKeys.Instance().News()); if (contentType == null) return HttpNotFound(); if (UserContext.CurrentUser == null) return Redirect(SiteUrls.Instance().Login(true)); ContentItemEditModel model = TempData.Get<ContentItemEditModel>("ContentItemEditModel", null); if (model == null) { ContentItem item = null; string errorMessage = string.Empty; if (contentItemId.HasValue && contentItemId.Value > 0) { item = new ContentItemService().Get(contentItemId.Value); if (item == null) return HttpNotFound(); model = item.AsEditModel(); if (!authorizer.CMS_EditContentItem(item)) { errorMessage = "没有权限编辑资讯:" + item.Title; return Redirect(SiteUrls.Instance().SystemMessage(TempData, new SystemMessageViewModel { Body = errorMessage, Title = "没有权限", StatusMessageType = StatusMessageType.Hint }, Request.RawUrl)); } } else { model = new ContentItemEditModel { ContentTypeId = contentType.ContentTypeId }; if (!authorizer.CMS_Contribute(out errorMessage)) { return Redirect(SiteUrls.Instance().SystemMessage(TempData, new SystemMessageViewModel { Body = errorMessage, Title = "没有权限", StatusMessageType = StatusMessageType.Hint }, Request.RawUrl)); } } } else { TempData.Remove("ContentItemEditModel"); } return View(contentItemId.HasValue ? contentType.Page_Edit : contentType.Page_New, model); }
public ActionResult _DeleteContribute(long contentItemId) { var contentItemService = new ContentItemService(); ContentItem contentItem = contentItemService.Get(contentItemId); if (contentItem == null) return Json(new StatusMessageData(StatusMessageType.Error, "没有找到准备删除的投稿")); if (authorizer.CMS_DeleteContentItem(contentItem)) contentItemService.Delete(contentItem); else return Json(new StatusMessageData(StatusMessageType.Error, "您没有删除此投稿的权限")); return Json(new StatusMessageData(StatusMessageType.Success, "成功删除了投稿")); }
/// <summary> /// 删除用户在应用中的数据 /// </summary> /// <param name="userId">用户Id</param> /// <param name="takeOverUserName">用于接管删除用户时不能删除的内容(例如:用户创建的群组)</param> /// <param name="isTakeOver">是否接管被删除用户可被接管的内容</param> protected override void DeleteUser(long userId, string takeOverUserName, bool isTakeOver) { ContentItemService contentItemService = new ContentItemService(); contentItemService.DeleteUser(userId, takeOverUserName, isTakeOver); }