Example #1
0
        public async Task <IActionResult> GoTopicDisable(int id, bool isDisable)
        {
            var data = new MoData();

            HttpContext.TryGetUserInfo(out var userInfo);
            var topic = await _uf.TopicRepository.GetByIdAsync(id);

            if (topic == null)
            {
                data.IsOk = false;
                data.Msg  = "找不到指定的帖子";
                return(Json(data));
            }

            if (!userInfo.Roles.Equals("SuperAdmin", StringComparison.OrdinalIgnoreCase))
            {
                if (!userInfo.Roles.Equals("Admin", StringComparison.OrdinalIgnoreCase) ||
                    !await _uf.BBSRepository.IsExistAsync(x => x.Id == topic.BbsId && x.UserId == userInfo.Id))
                {
                    data.IsOk = false;
                    data.Msg  = "您没有屏蔽此贴的权限";
                    return(Json(data));
                }
            }

            topic.TopicStatus = isDisable ? TopicStatus.Disabled : TopicStatus.Normal;
            _uf.TopicRepository.Update(topic);
            await _uf.SaveChangesAsync();

            data.IsOk = true;
            return(Json(data));
        }
        public async Task <IActionResult> RemoveBBS(int id)
        {
            var data = new MoData();
            var bbs  = await _uf.BBSRepository.GetByIdAsync(id);

            if (bbs == null)
            {
                data.IsOk = false;
                data.Msg  = "找不到该论坛编号";
                return(Json(data));
            }

            _uf.BBSRepository.Delete(bbs);
            var result = await _uf.SaveChangesAsync();

            if (result <= 0)
            {
                data.IsOk = false;
                data.Msg  = "删除该论坛失败";
                return(Json(data));
            }

            data.IsOk = true;
            return(Json(data));
        }
        public async Task <IActionResult> DeleteChildReply(int id)
        {
            var data       = new MoData();
            var childReply = await _uf.ReplyUserRepository.GetByIdAsync(id);

            if (childReply == null)
            {
                data.IsOk = false;
                data.Msg  = "找不到指定的评论";
                return(Json(data));
            }

            if (childReply.ReplyType == ReplyType.Image)
            {
                //var path = RootConfiguration.Root + Path.DirectorySeparatorChar + childReply.Message.Substring(6).Replace('/', Path.DirectorySeparatorChar);
                //if (System.IO.File.Exists(path))
                //{
                //    System.IO.File.Delete(path);
                //}
                DeleteImg(childReply.Message);
            }

            _uf.ReplyUserRepository.Delete(childReply);
            await _uf.SaveChangesAsync();

            data.IsOk = true;
            return(Json(data));
        }
        public async Task <IActionResult> GoUserStar(int id, bool isStar)
        {
            var data = new MoData();

            HttpContext.TryGetUserInfo(out var userInfo);
            if (userInfo.Id == id)
            {
                data.IsOk = false;
                data.Msg  = "你不能关注你自己";
                return(Json(data));
            }

            var user = await _uf.UserRepository.GetByIdAsync(id);

            if (user == null)
            {
                data.IsOk = false;
                data.Msg  = "找不到指定的用户";
                return(Json(data));
            }


            var userStar = await _uf.UserStarRepository.GetAsync(x => x.StarUserId == user.Id && x.UserId == userInfo.Id);

            if (isStar)
            {
                // 关注
                if (userStar != null)
                {
                    data.IsOk = false;
                    data.Msg  = $"你已经关注{user.UserName}";
                    return(Json(data));
                }

                var newUserStar = new UserStar
                {
                    StarUserId = user.Id,
                    UserId     = userInfo.Id
                };

                await _uf.UserStarRepository.InsertAsync(newUserStar);
            }
            else
            {
                // 取消关注
                if (userStar == null)
                {
                    data.IsOk = false;
                    data.Msg  = $"你还没有关注{user.UserName}";
                    return(Json(data));
                }

                _uf.UserStarRepository.Delete(userStar);
            }

            await _uf.SaveChangesAsync();

            data.IsOk = true;
            return(Json(data));
        }
        public async Task <IActionResult> GetTopicContent(int id, int page)
        {
            var data  = new MoData();
            var topic = await _uf.TopicRepository.GetAsync(x => x.Id == id && x.TopicStatus != TopicStatus.Disabled);

            if (topic == null)
            {
                data.IsOk = false;
                data.Msg  = "帖子丢失啦~~~";
                return(Json(data));
            }

            var replys = await _uf.ReplyRepository.GetTopicReplyAsync(id, topic.UserId, page, 20);

            if (replys == null && replys.PageData != null)
            {
                data.IsOk = false;
            }
            else
            {
                data.IsOk = true;
                data.Data = replys;
            }

            return(Json(data));
        }
        public async Task <IActionResult> GoUserDisable(int id, bool isDisable)
        {
            var data = new MoData();

            HttpContext.TryGetUserInfo(out var userInfo);
            if (userInfo.Id == id)
            {
                data.IsOk = false;
                data.Msg  = "你不能禁用你自己";
                return(Json(data));
            }

            var user = await _uf.UserRepository.GetByIdAsync(id);

            if (user == null)
            {
                data.IsOk = false;
                data.Msg  = "找不到指定的用户";
                return(Json(data));
            }

            if (isDisable)
            {
                // 禁用
                if (user.UserStatus == UserStatus.禁用)
                {
                    data.IsOk = false;
                    data.Msg  = "该用户已被禁用";
                    return(Json(data));
                }

                user.UserStatus = UserStatus.禁用;
            }
            else
            {
                // 取消禁用
                if (user.UserStatus != UserStatus.禁用)
                {
                    data.IsOk = false;
                    data.Msg  = "该用户未被禁用";
                    return(Json(data));
                }

                user.UserStatus = UserStatus.启用;
            }

            _uf.UserRepository.Update(user);
            if (await _uf.SaveChangesAsync() > 0)
            {
                data.IsOk = true;
            }
            else
            {
                data.IsOk = false;
                data.Msg  = "禁用失败,请稍后再试";
            }

            return(Json(data));
        }
Example #7
0
        public async Task <IActionResult> GoTopicTop(int id, bool isTop)
        {
            var data  = new MoData();
            var topic = await _uf.TopicRepository.GetByIdAsync(id);

            if (topic == null)
            {
                data.IsOk = false;
                data.Msg  = "找不到指定的帖子";
                return(Json(data));
            }

            HttpContext.TryGetUserInfo(out var userInfo);
            if (!userInfo.Roles.Equals("SuperAdmin", StringComparison.OrdinalIgnoreCase))
            {
                if (!(await _uf.BBSRepository.IsExistAsync(x => x.Id == topic.BbsId && x.UserId == userInfo.Id)))
                {
                    data.IsOk = false;
                    data.Msg  = "您不是该版块的版主,无法进行此操作";
                    return(Json(data));
                }
            }

            if (topic.TopicStatus == TopicStatus.Disabled)
            {
                data.IsOk = false;
                data.Msg  = "该帖子目前处于屏蔽状态,无法操作";
                return(Json(data));
            }

            if (isTop)
            {
                if (topic.TopicStatus == TopicStatus.Top)
                {
                    data.IsOk = false;
                    data.Msg  = "该帖子已被置顶,请勿反复操作";
                    return(Json(data));
                }

                topic.TopicStatus = TopicStatus.Top;
            }
            else
            {
                if (topic.TopicStatus == TopicStatus.Normal)
                {
                    data.IsOk = false;
                    data.Msg  = "该帖子未被置顶,请勿仿佛操作";
                    return(Json(data));
                }

                topic.TopicStatus = TopicStatus.Normal;
            }

            _uf.TopicRepository.Update(topic);
            await _uf.SaveChangesAsync();

            data.IsOk = true;
            return(Json(data));
        }
        public async Task <IActionResult> DeleteTopic(int id)
        {
            var data = new MoData();

            HttpContext.TryGetUserInfo(out var userInfo);

            var topic = await _uf.TopicRepository.GetByIdAsync(id);

            if (topic == null)
            {
                data.IsOk = false;
                data.Msg  = "找不到指定的帖子";
                return(Json(data));
            }

            if (userInfo.Id != topic.UserId)
            {
                if (!userInfo.Roles.Equals("SuperAdmin", StringComparison.OrdinalIgnoreCase))
                {
                    var bbs = await _uf.BBSRepository.GetByIdAsync(topic.BbsId);

                    if (bbs.UserId != userInfo.Id)
                    {
                        data.IsOk = false;
                        data.Msg  = "您没有删除此贴的权限";
                        return(Json(data));
                    }
                }
            }

            var separator = Path.DirectorySeparatorChar;
            var path      = RootConfiguration.Root + separator + _mapSetting.UpContentPhotoPath.Replace("\\", $"{separator}") + separator + topic.Id;

            if (Directory.Exists(path))
            {
                Directory.Delete(path, true);
            }

            var replies = await _uf.ReplyRepository.GetAllAsync(x => x.TopicId == topic.Id);

            foreach (var reply in replies)
            {
                JiebaLucene.Instance.Delete(reply.Id.ToString());
            }

            _uf.TopicRepository.Delete(topic);
            if (await _uf.SaveChangesAsync() > 0)
            {
                data.IsOk = true;
            }
            else
            {
                data.IsOk = false;
                data.Msg  = "删除失败,请稍后再试";
            }

            return(Json(data));
        }
        public async Task <IActionResult> GetUserTopicCount(int userId)
        {
            var data = new MoData
            {
                Data = (await _uf.TopicRepository
                        .GetAllAsync(x => x.UserId == userId))
                       .Count(),
                IsOk = true
            };

            return(Json(data));
        }
        public async Task <IActionResult> GetUserReplyCount(int userId)
        {
            var data = new MoData
            {
                Data = (await _uf.ReplyRepository
                        .GetAllAsync(x => x.UserId == userId && x.ReplyIndex != 0))
                       .Count(),
                IsOk = true
            };

            return(Json(data));
        }
        public async Task <IActionResult> DeleteAdmin(int id)
        {
            var data = new MoData();

            HttpContext.TryGetUserInfo(out var userInfo);
            using (var trans = _uf.BeginTransaction())
            {
                try
                {
                    var bbs = await _uf.BBSRepository.GetAsync(x => x.UserId == id);

                    if (bbs == null)
                    {
                        data.IsOk = false;
                        return(Json(data));
                    }

                    bbs.UserId = userInfo.Id;
                    _uf.BBSRepository.Update(bbs);

                    var role = await _uf.RoleRepository.GetAsync(x => x.RoleName.Equals("User", StringComparison.OrdinalIgnoreCase));

                    var userRole = await _uf.UserToRoleRepository.GetAsync(x => x.UserId == id);

                    userRole.RoleId = role.Id;
                    _uf.UserToRoleRepository.Update(userRole);

                    if (await _uf.SaveChangesAsync() > 0)
                    {
                        data.IsOk = true;
                    }
                    else
                    {
                        data.IsOk = false;
                    }

                    trans.Commit();
                }
                catch (Exception ex)
                {
                    trans.Rollback();
                    _logger.LogError(id, $"撤销版主失败-{ex.Message}:{DateTime.Now.ToStandardFormatString()}");
                    _uf.SaveChanges();
                    data.IsOk = false;
                }
            }


            return(Json(data));
        }
        public async Task <IActionResult> GetUserDisable(int page)
        {
            var data = new MoData();

            page      = page > 1 ? page : 1;
            data.Data = (await _uf.UserRepository.GetAllAsync(x => x.UserStatus == UserStatus.禁用))
                        .OrderByDescending(x => x.Id)
                        .Skip((page - 1) * 50)
                        .Take(50)
                        .Select(x => new { Id = x.Id, Email = x.Email, UserName = x.UserName })
                        .ToList();

            data.IsOk = true;
            return(Json(data));
        }
        public async Task <IActionResult> GetTopics(int id, int page = 1)
        {
            var data   = new MoData();
            var topics = await _uf.TopicRepository.GetLatelyTopicsAsync(page, 15, true, id);

            if (topics == null && !topics.Topics.Any())
            {
                data.IsOk = false;
            }
            else
            {
                data.IsOk = true;
                data.Data = topics;
            }
            return(Json(data));
        }
        private MoData GetData(string baseName)
        {
            if (!_moDatum.TryGetValue(baseName, out MoData database))
            {
                var path = Path.Combine(TextFolder, baseName + ".mo");
                if (!File.Exists(path))
                {
                    return(null);
                }

                database = MoData.ReadFrom(path);

                _moDatum.Add(baseName, database);
            }
            return(database);
        }
Example #15
0
        public async Task <IActionResult> GetTopicsDisabled(int page, int?id)
        {
            var data = new MoData();

            HttpContext.TryGetUserInfo(out var userInfo);
            if (id == null)
            {
                if (!userInfo.Roles.Equals("SuperAdmin", StringComparison.OrdinalIgnoreCase))
                {
                    data.IsOk = false;
                    data.Msg  = "您不是超级管理员";
                    return(Json(data));
                }

                data.Data = (await _uf.TopicRepository.GetAllAsync(x => x.TopicStatus == TopicStatus.Disabled))
                            .Join(await _uf.UserRepository.GetAllAsync(), t => t.UserId, u => u.Id, (t, u) => new MoTopicDisabled
                {
                    TopicId    = t.Id,
                    TopicName  = t.TopicName,
                    UserId     = u.Id,
                    UserName   = u.UserName,
                    CreateTime = t.CreateTime.ToStandardFormatString()
                });
            }
            else
            {
                if (!userInfo.Roles.Equals("Admin") || !await _uf.BBSRepository.IsExistAsync(x => x.Id == id))
                {
                    data.IsOk = false;
                    data.Msg  = "您没有对该版块的管理权限";
                    return(Json(data));
                }

                data.Data = (await _uf.TopicRepository.GetAllAsync(x => x.BbsId == id && x.TopicStatus == TopicStatus.Disabled))
                            .Join(await _uf.UserRepository.GetAllAsync(), t => t.UserId, u => u.Id, (t, u) => new MoTopicDisabled
                {
                    TopicId    = t.Id,
                    TopicName  = t.TopicName,
                    UserId     = u.Id,
                    UserName   = u.UserName,
                    CreateTime = t.CreateTime.ToStandardFormatString()
                });
            }

            data.IsOk = true;
            return(Json(data));
        }
        public async Task <IActionResult> ModifyAdmin(int id, int bbsId)
        {
            var data = new MoData();

            HttpContext.TryGetUserInfo(out var userInfo);
            var admin = await _uf.UserRepository.GetByIdAsync(id);

            if (admin == null)
            {
                data.IsOk = false;
                data.Msg  = "找不到指定的用户";
                return(Json(data));
            }

            var bbs = await _uf.BBSRepository.GetByIdAsync(bbsId);

            var originBbs = await _uf.BBSRepository.GetAsync(x => x.UserId == id);

            if (bbs == null)
            {
                data.IsOk = false;
                data.Msg  = "找不到指定的版块";
                return(Json(data));
            }

            if (originBbs != null)
            {
                originBbs.UserId = userInfo.Id;
                _uf.BBSRepository.Update(originBbs);
            }

            if (bbs.UserId != userInfo.Id)
            {
                data.IsOk = false;
                data.Msg  = "一个版块只能有一个版主,该版块已经有其它版主了";
                return(Json(data));
            }

            bbs.UserId = id;
            _uf.BBSRepository.Update(bbs);
            await _uf.SaveChangesAsync();

            data.IsOk = true;
            return(Json(data));
        }
Example #17
0
        public async Task <IActionResult> SendQuestion(string message)
        {
            var data = new MoData();

            HttpContext.TryGetUserInfo(out var userInfo);
            string url = $"http://www.tuling123.com/openapi/api?key=d62fe8c1764648d8a5b5633b816454a6&info={message}&userid={userInfo.Id}";

            string responseResult = await RequestApi(url, Encoding.UTF8);

            if (responseResult == String.Empty)
            {
                data.IsOk = false;
                return(Json(data));
            }

            data.Data = JsonConvert.DeserializeObject(responseResult);
            data.IsOk = true;
            return(Json(data));

            async Task <string> RequestApi(string apiUrl, Encoding encoding)
            {
                string result = String.Empty;

                try
                {
                    WebRequest request = WebRequest.Create(url);
                    request.Credentials = CredentialCache.DefaultCredentials; // 默认身份验证
                    request.Timeout     = 10000;
                    request.Method      = "POST";
                    WebResponse response = await request.GetResponseAsync();

                    using (var reader = new StreamReader(response.GetResponseStream(), encoding))
                    {
                        result = await reader.ReadToEndAsync();
                    }
                }
                catch
                {
                    return(String.Empty);
                }

                return(result);
            }
        }
        public async Task <IActionResult> GetTopicStarLog(int id, int page, int pageSize = 5)
        {
            var data = new MoData();

            page = page <= 0 ? 1 : page;
            var pageData = await _uf.TopicStarRepository.GetTopicStarListAsync(id, page, pageSize);

            if (pageData.PageData != null)
            {
                data.Data = pageData;
                data.IsOk = true;
            }
            else
            {
                data.IsOk = false;
            }

            return(Json(data));
        }
        public async Task <IActionResult> GetChildReply(int id, int index, int page, int pageSize)
        {
            var data  = new MoData();
            var topic = await _uf.TopicRepository.GetByIdAsync(id);

            MoPageData pageData = await _uf.ReplyUserRepository.GetChildReplyAsync(id, topic.UserId, index, page, pageSize);

            if (pageData.PageData != null)
            {
                data.Data = pageData;
                data.IsOk = true;
            }
            else
            {
                data.IsOk = false;
            }

            return(Json(data));
        }
Example #20
0
        public async Task <IActionResult> GetRecommends()
        {
            var data = new MoData();

            try
            {
                var key = "recommends";
                List <MoRecommend> recommends;
                recommends = _cache.Get <List <MoRecommend> >(key);

                if (recommends == null || recommends.Count == 0)
                {
                    using (_uf)
                    {
                        recommends = (await _uf.TopicRepository.GetRecommends(5));

                        if (recommends != null && recommends.Count > 0)
                        {
                            data.Data = recommends;
                            data.IsOk = true;

                            _cache.Set <List <MoRecommend> >(key, recommends, TimeSpan.FromDays(1));
                        }
                        else
                        {
                            data.IsOk = false;
                        }
                    }
                }
                else
                {
                    data.IsOk = true;
                    data.Data = recommends;
                }
            }
            catch (Exception ex)
            {
                data.IsOk = false;
                _logger.LogError(0, $"在{nameof(HomeController)}.{nameof(GetRecommends)}中,{ex.Message}");
            }

            return(Json(data));
        }
        public async Task <IActionResult> DeleteReply(int id)
        {
            var data  = new MoData();
            var reply = await _uf.ReplyRepository.GetByIdAsync(id);

            if (reply == null)
            {
                data.IsOk = false;
                data.Msg  = "找不到指定的评论";
                return(Json(data));
            }

            if (reply.ReplyType == ReplyType.Image)
            {
                DeleteImg(reply.Message);
            }

            var childReplies = await _uf.ReplyUserRepository.GetAllAsync(x => x.TopicId == reply.TopicId && x.ReplyIndex == reply.ReplyIndex);

            if (childReplies != null && childReplies.Any())
            {
                foreach (var childReply in childReplies)
                {
                    if (childReply.ReplyType == ReplyType.Image)
                    {
                        DeleteImg(childReply.Message);
                    }
                }

                _uf.ReplyUserRepository.DeleteRange(childReplies);
            }

            _uf.ReplyRepository.Delete(reply);

            // 删除索引
            JiebaLucene.Instance.Delete(reply.Id.ToString());
            await _uf.SaveChangesAsync();

            data.IsOk = true;
            return(Json(data));
        }
        public JsonResult GetLoginInfo()
        {
            var data = new MoData();

            if (!HttpContext.TryGetUserInfo(out var userInfo))
            {
                data.IsOk = false;
                data.Msg  = "找不到该账号,请重新登录";
                return(Json(data));
            }

            if (userInfo.UserStatus == (int)UserStatus.禁用)
            {
                data.IsOk = false;
                data.Msg  = "该账号已被禁用";
            }

            data.Data = userInfo;
            data.IsOk = true;

            return(Json(data));
        }
Example #23
0
        public async Task <IActionResult> GetSearchResult(string query, int searchType, int page = 1)
        {
            var data = new MoData();

            // int转枚举型失败不会抛出异常,用default捕获
            switch ((SearchType)searchType)
            {
            case SearchType.Topic:
            {
                var topics = await _uf.TopicRepository.GetTopicSearchAsync(query, page, 15);

                if (topics != null && topics.PageData != null)
                {
                    data.Data = topics;
                    data.IsOk = true;
                }
                else
                {
                    data.IsOk = false;
                }

                break;
            }

            case SearchType.User:
            {
                var users = await _uf.UserRepository.GetUserSearchAsync(query, page, 15);

                if (users != null && users.PageData != null)
                {
                    data.Data = users;
                    data.IsOk = true;
                }
                else
                {
                    data.IsOk = false;
                }

                break;
            }

            case SearchType.Content:
            {
                try
                {
                    var(contents, totalCount) = await JiebaLucene.Instance.Search(query, page, 15);

                    if (contents == null || totalCount == 0)
                    {
                        data.IsOk = false;
                    }
                    else
                    {
                        data.Data = new MoPageData
                        {
                            CurrentPage  = page,
                            PreviousPage = page > 1 ? page - 1 : 0,
                            NextPage     = page < ((totalCount + 14) / 15) ? page + 1 : 0,
                            PageTotal    = totalCount,
                            PageData     = contents
                        };

                        data.IsOk = true;
                    }
                }
                catch (Exception ex)
                {
                    data.IsOk = false;
                }

                break;
            }

            default:
                data.IsOk = false;
                break;
            }

            return(Json(data));
        }
        public async Task <IActionResult> GetChatHistory(int targetUserId, bool isHistory, string nowTime = "")
        {
            var data = new MoData();

            HttpContext.TryGetUserInfo(out var userInfo);
            if (targetUserId == userInfo.Id)
            {
                data.IsOk = false;
                return(Json(data));
            }

            DateTime dt;

            if (String.IsNullOrWhiteSpace(nowTime))
            {
                dt = DateTime.Now;
            }
            else
            {
                dt = nowTime.ToCSharpDateTime();
            }

            IList <Chat> chats;

            if (isHistory)
            {
                // 对方的离线消息
                chats = (await _uf.ChatRepository.GetOffLineChatAsync(targetUserId, userInfo.Id, dt)).ToList();

                data.Data = chats.Select(x => new
                {
                    Id      = x.UserId,
                    Message = x.Message
                }).ToList();

                foreach (var chat in chats)
                {
                    chat.IsArrive = true;
                }

                _uf.ChatRepository.UpdateRange(chats);
                await _uf.SaveChangesAsync();
            }
            else
            {
                // 历史消息
                chats = (await _uf.ChatRepository
                         .GetOnLineChatAsync(userInfo.Id, targetUserId, dt))
                        .ToList();
            }

            data.Data = new
            {
                Chats = chats.Select(x => new
                {
                    Id      = x.UserId,
                    Message = x.Message
                }).ToList(),
                NowTime = (chats.Count > 0 ? chats.Last().CreateTime : DateTime.Now).ToJSString()
            };

            data.IsOk = true;
            return(Json(data));
        }
        public async Task <IActionResult> GoTopicStar(int id, bool isLike)
        {
            var data = new MoData();

            var topic = await _uf.TopicRepository.GetByIdAsync(id);

            if (topic == null)
            {
                data.IsOk = false;
                data.Msg  = "找不到指定的帖子";
                return(Json(data));
            }

            HttpContext.TryGetUserInfo(out var userInfo);
            if (userInfo.Id == topic.UserId)
            {
                data.IsOk = false;
                data.Msg  = "你不能点赞你自己的帖子";
                return(Json(data));
            }

            if (isLike)
            {
                // 点赞
                var isTemp = await _uf.TopicStarRepository.IsExistAsync(x => x.TopicId == id && x.UserId == userInfo.Id);

                if (isTemp)
                {
                    data.IsOk = false;
                    data.Msg  = "你已经赞过了";
                    return(Json(data));
                }

                var topicStar = new TopicStar
                {
                    TopicId = topic.Id,
                    UserId  = userInfo.Id
                };


                topic.StarCount = topic.StarCount + 1;
                await _uf.TopicStarRepository.InsertAsync(topicStar);
            }
            else
            {
                var topicStar = await _uf.TopicStarRepository.GetAsync(x => x.TopicId == id && x.UserId == userInfo.Id);

                if (topicStar != null)
                {
                    topic.StarCount = topic.StarCount - 1;
                    _uf.TopicStarRepository.Delete(topicStar);
                }
            }

            _uf.TopicRepository.Update(topic);
            await _uf.SaveChangesAsync();

            data.IsOk = true;
            data.Msg  = topic.StarCount.ToString();
            return(Json(data));
        }