示例#1
0
 /// <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);
 }
示例#2
0
        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);
        }
示例#3
0
        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);
        }
示例#4
0
        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());
        }
示例#5
0
 /// <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;
 }
示例#6
0
        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);
        }
示例#7
0
 /// <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;
 }
示例#8
0
        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, "成功删除了投稿")));
        }
示例#9
0
        /// <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);
                }
            }
        }
示例#10
0
        /// <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);
        }
示例#11
0
        /// <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;
        }
示例#12
0
 /// <summary>
 /// 任务执行的内容
 /// </summary>
 /// <param name="taskDetail">任务配置状态信息</param>
 public void Execute(TaskDetail taskDetail)
 {
     ContentItemService contentItemService = new ContentItemService();
     contentItemService.ExpireStickyContentItems();
 }
示例#13
0
        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)));
        }
示例#14
0
        /// <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));
        }
示例#15
0
        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));
        }
示例#16
0
        /// <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);
        }
示例#17
0
 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, "成功删除了投稿"));
 }
示例#18
0
 /// <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);
 }