示例#1
0
        /// <summary>
        /// 资讯详情页
        /// </summary>
        public ActionResult ContentItemDetail(long contentItemId)
        {
            ContentItem contentItem = contentItemService.Get(contentItemId);

            if (contentItem == null || contentItem.User == null)
            {
                return(HttpNotFound());
            }

            //验证是否通过审核
            long currentSpaceUserId = UserIdToUserNameDictionary.GetUserId(contentItem.User.UserName);

            if (!authorizer.IsAdministrator(CmsConfig.Instance().ApplicationId) && contentItem.UserId != currentSpaceUserId &&
                (int)contentItem.AuditStatus < (int)(new AuditService().GetPubliclyAuditStatus(CmsConfig.Instance().ApplicationId)))
            {
                return(Redirect(SiteUrls.Instance().SystemMessage(TempData, new SystemMessageViewModel
                {
                    Title = "尚未通过审核",
                    Body = "由于当前资讯尚未通过审核,您无法浏览当前内容。",
                    StatusMessageType = StatusMessageType.Hint
                })));
            }

            AttachmentService <Attachment> attachmentService = new AttachmentService <Attachment>(TenantTypeIds.Instance().ContentItem());


            //更新浏览计数
            CountService countService = new CountService(TenantTypeIds.Instance().ContentItem());

            countService.ChangeCount(CountTypes.Instance().HitTimes(), contentItem.ContentItemId, contentItem.UserId, 1, true);
            if (UserContext.CurrentUser != null)
            {
                //创建访客记录
                VisitService visitService = new VisitService(TenantTypeIds.Instance().ContentItem());
                visitService.CreateVisit(UserContext.CurrentUser.UserId, UserContext.CurrentUser.DisplayName, contentItem.ContentItemId, contentItem.Title);
            }
            //设置SEO信息
            pageResourceManager.InsertTitlePart(contentItem.Title);
            List <string> keywords = new List <string>();

            keywords.AddRange(contentItem.TagNames);
            string keyword = string.Join(" ", keywords.Distinct());

            keyword += " " + string.Join(" ", ClauseScrubber.TitleToKeywords(contentItem.Title));
            pageResourceManager.SetMetaOfKeywords(keyword);
            pageResourceManager.SetMetaOfDescription(contentItem.Summary);
            return(View(contentItem));
        }
示例#2
0
        /// <summary>
        /// 资讯标签选择器(支持自动提取)
        /// </summary>
        /// <param name="contentFolderId"></param>
        /// <param name="contentItemId"></param>
        /// <param name="title"></param>
        /// <returns></returns>
        public ActionResult _TagSelector(long contentItemId, int contentFolderId, string title = null)
        {
            IEnumerable <string> selectedTagNames = new List <string>();

            if (string.IsNullOrEmpty(title))
            {
                var contentItem = contentItemService.Get(contentItemId);
                if (contentItem != null)
                {
                    selectedTagNames = contentItem.TagNames;
                }
                ViewData["selectedTagNames"] = selectedTagNames;
                return(View());
            }
            string filteredPhrase = ClauseScrubber.LuceneKeywordsScrub(title);

            if (!string.IsNullOrEmpty(filteredPhrase))
            {
                string[] nameSegments = ClauseScrubber.SegmentForPhraseQuery(filteredPhrase);
                selectedTagNames             = nameSegments.Where(n => n.Length > 1).Take(5).ToList();
                ViewData["selectedTagNames"] = selectedTagNames;
            }
            return(View());
        }
示例#3
0
        /// <summary>
        /// 转换成BlogThread类型
        /// </summary>
        /// <returns>文章实体</returns>
        public BlogThread AsBlogThread()
        {
            BlogThread blogThread = null;

            //写文章
            if (this.ThreadId <= 0)
            {
                blogThread        = BlogThread.New();
                blogThread.UserId = UserContext.CurrentUser.UserId;
                blogThread.Author = UserContext.CurrentUser.DisplayName;
                if (this.OwnerId.HasValue)
                {
                    blogThread.OwnerId      = this.OwnerId.Value;
                    blogThread.TenantTypeId = TenantTypeIds.Instance().Group();
                }
                else
                {
                    blogThread.OwnerId      = UserContext.CurrentUser.UserId;
                    blogThread.TenantTypeId = TenantTypeIds.Instance().User();
                }
                blogThread.OriginalAuthorId = UserContext.CurrentUser.UserId;
                blogThread.IsDraft          = this.IsDraft;
            }
            //编辑文章
            else
            {
                BlogService blogService = new BlogService();
                blogThread = blogService.Get(this.ThreadId);
                blogThread.LastModified = DateTime.UtcNow;
            }

            blogThread.Subject       = this.Subject;
            blogThread.Body          = this.Body;
            blogThread.IsSticky      = this.IsSticky;
            blogThread.IsLocked      = this.IsLocked;
            blogThread.PrivacyStatus = this.PrivacyStatus;
            blogThread.Keywords      = this.Keywords;
            if (string.IsNullOrEmpty(blogThread.Keywords))
            {
                string[] keywords = ClauseScrubber.TitleToKeywords(this.Subject);
                if (keywords.Length > 0)
                {
                    blogThread.Keywords = string.Join(" ", keywords);
                }
                else
                {
                    blogThread.Keywords = string.Empty;
                }
            }
            blogThread.Summary = this.Summary;
            if (string.IsNullOrEmpty(this.Summary))
            {
                blogThread.Summary = HtmlUtility.TrimHtml(this.Body, 100);
            }

            blogThread.FeaturedImageAttachmentId = this.FeaturedImageAttachmentId;
            if (blogThread.FeaturedImageAttachmentId > 0)
            {
                Attachment attachment = attachmentService.Get(blogThread.FeaturedImageAttachmentId);
                if (attachment != null)
                {
                    blogThread.FeaturedImage = attachment.GetRelativePath() + "\\" + attachment.FileName;
                }
                else
                {
                    blogThread.FeaturedImageAttachmentId = 0;
                }
            }
            else
            {
                blogThread.FeaturedImage = string.Empty;
            }

            return(blogThread);
        }
示例#4
0
        /// <summary>
        /// 搜索“供职于同一公司”的用户
        /// </summary>
        /// <param name="userId">当前用户的ID</param>
        /// <param name="pageIndex">分页页码</param>
        /// <param name="pageSize">分页大小</param>
        /// <param name="companyNameDic">存储用户ID到标签公司名称列表的映射,用于页面列表输出</param>
        /// <returns></returns>
        public PagingDataSet <User> SearchInterestedWithCompanys(long userId, int pageIndex, int pageSize, out Dictionary <long, IEnumerable <string> > companyNameDic)
        {
            //Dictionary,用于页面列表输出
            companyNameDic = new Dictionary <long, IEnumerable <string> >();

            //无效用户ID,直接返回空列表
            if (userId <= 0)
            {
                return(new PagingDataSet <User>(new List <User>()));
            }

            Query  query  = null;
            Filter filter = null;
            Sort   sort   = null;

            //先搜索出当前用户的公司名称
            //使用LuceneSearchBuilder构建Lucene需要Query、Filter、Sort
            LuceneSearchBuilder searchBuilder = new LuceneSearchBuilder();

            searchBuilder.WithField(UserIndexDocument.UserId, userId.ToString(), true);
            searchBuilder.BuildQuery(out query, out filter, out sort);

            IEnumerable <Document> docs = searchEngine.Search(query, filter, sort, 1);

            //索引中无此用户,直接返回空列表
            if (docs == null || docs.Count <Document>() == 0)
            {
                return(new PagingDataSet <User>(new List <User>()));
            }

            string[] myCompanyNames = docs.First <Document>().GetValues(UserIndexDocument.CompanyName);

            //当前用户无公司名称,直接返回空列表
            if (myCompanyNames != null && myCompanyNames.Count() == 0)
            {
                return(new PagingDataSet <User>(new List <User>()));
            }

            //List<string> myCompanyNameList=myCompanyNames.Select(n=>ClauseScrubber.CompanyNameScrub(n)).ToList();

            //查找有相同公司名称的用户
            //先查询当前用户关注的人(包括“悄悄关注”的用户),此处需要调用数据库查询,因为索引中没有存储“是否悄悄关注”属性
            IEnumerable <long> myFollowedUserIds = followService.GetPortionFollowedUserIds(userId);
            //黑名单用户
            IEnumerable <long> stopUserIds = new PrivacyService().GetStopedUsers(userId).Select(n => n.Key);

            //使用LuceneSearchBuilder构建Lucene需要Query、Filter、Sort
            searchBuilder = new LuceneSearchBuilder(1);
            //搜索条件需要排除掉当前用户本身和已关注用户
            searchBuilder.WithPhrases(UserIndexDocument.CompanyName, myCompanyNames.Distinct().Take(3).Select(n => ClauseScrubber.CompanyNameScrub(n)))
            .NotWithField(UserIndexDocument.UserId, userId.ToString())                            //排除掉当前用户
            .NotWithFields(UserIndexDocument.UserId, myFollowedUserIds.Select(n => n.ToString())) //排除掉已关注用户
            .NotWithFields(UserIndexDocument.UserId, stopUserIds.Select(n => n.ToString()));      //排除掉黑名单用户
            searchBuilder.BuildQuery(out query, out filter, out sort);

            PagingDataSet <Document> searchResult = searchEngine.Search(query, filter, sort, pageIndex, pageSize);

            docs = searchResult.ToList <Document>();

            //如果没有使用相同公司名称的用户,直接返回空列表
            if (docs == null || docs.Count <Document>() == 0)
            {
                return(new PagingDataSet <User>(new List <User>()));
            }

            //“相同公司名称”的用户ID列表
            List <long> sameUserIds = new List <long>();

            foreach (Document doc in docs)
            {
                //比较获取“相同的公司名称”
                List <string> sameCompanyNames = new List <string>();
                string[]      companyNames     = doc.GetValues(UserIndexDocument.CompanyName);
                foreach (string myCompanyName in myCompanyNames)
                {
                    foreach (string companyName in companyNames)
                    {
                        if (companyName.Equals(myCompanyName) || companyName.Contains(myCompanyName))
                        {
                            sameCompanyNames.Add(myCompanyName);
                            break;
                        }
                    }
                }

                long sameUserId = long.Parse(doc.Get(UserIndexDocument.UserId));
                sameUserIds.Add(sameUserId);

                //加入Dictionary,用于页面列表输出
                if (!companyNameDic.ContainsKey(sameUserId))
                {
                    companyNameDic.Add(sameUserId, sameCompanyNames);
                }
            }

            //批量查询“相同公司名称”的用户列表
            IEnumerable <User> sameUsers = userService.GetFullUsers(sameUserIds).Where(n => n.IsCanbeFollow == true && n.IsActivated == true && n.IsBanned == false);

            //组装分页对象
            PagingDataSet <User> users = new PagingDataSet <User>(sameUsers)
            {
                TotalRecords  = searchResult.TotalRecords,
                PageSize      = searchResult.PageSize,
                PageIndex     = searchResult.PageIndex,
                QueryDuration = searchResult.QueryDuration
            };

            return(users);
        }