diff --git a/app/enterprise/controller/Posts.php b/app/enterprise/controller/Posts.php index 6f1478b..b71173c 100644 --- a/app/enterprise/controller/Posts.php +++ b/app/enterprise/controller/Posts.php @@ -17,6 +17,7 @@ class Posts extends BaseController { protected $url=''; + protected $privacyUserArr = [2,4]; public function __construct() { @@ -27,7 +28,7 @@ class Posts extends BaseController // 朋友圈列表 public function index() { - $where = '(p.delete_time = 0 and p.privacy > 0) '; + $where = '(p.delete_time = 0 and p.privacy > 0 and p.status = 1) '; $where .= ' and ( p.user_id = ' . $this->uid; $prefix = config('database.connections.mysql.prefix'); @@ -41,17 +42,16 @@ class Posts extends BaseController $where .= " or ( p.privacy = 2 and exists ( select 1 from {$prefix}posts_privacy_users pvu where pvu.posts_id = p.id and pvu.user_id = p.user_id - and pvu.type = 1 and pvu.user_id in ({$friendIdStr}) + and pvu.type = 1 and pvu.user_id in ({$this->uid}) ))"; - } - - // 不可见 - $where .= " or ( p.privacy = 4 and not exists ( + // 不可见 + $where .= " or ( p.privacy = 4 and not exists ( select 1 from {$prefix}posts_privacy_users peu where peu.posts_id = p.id and peu.user_id = p.user_id and peu.type = 2 and peu.user_id = {$this->uid} ))"; + } $where .= ')'; $field = 'p.id,p.content,p.location,p.address as location_address,p.type,p.user_id,p.create_time'; @@ -64,16 +64,7 @@ class Posts extends BaseController $data = $list->toArray()['data']; foreach ($data as &$item) { - $friendNickname = Friend::where(['create_user' => $this->uid, 'friend_user_id' => $item['user_id'], 'status' => 1])->value('nickname'); - $user = User::getUserInfo(['user_id' => $item['user_id'], 'status' => 1], 'realname, avatar, user_id'); - if (empty($friendNickname)) { - $friendNickname = $user['realname']; - } - $item['user'] = [ - 'user_id' => $item['user_id'], - 'avatar' => $user['avatar'] ?: avatarUrl($user['avatar'], $user['realname'], $user['user_id'], 120), - 'nickname' => $friendNickname - ]; + $item['user'] = $this->getFriendUserInfo($item['user_id']); $item['files'] = PostsFile::getPostsFile($item['id']); @@ -90,16 +81,32 @@ class Posts extends BaseController return success('', $data,$list->total(),$list->currentPage()); } + // 获取好友用户信息 + protected function getFriendUserInfo($user_id):array + { + $friendNickname = Friend::where(['create_user' => $this->uid, 'friend_user_id' => $user_id, 'status' => 1])->value('nickname'); + $user = User::getUserInfo(['user_id' => $user_id, 'status' => 1], 'realname, avatar, user_id'); + if (empty($friendNickname)) { + $friendNickname = $user['realname']; + } + return [ + 'user_id' => $user_id, + 'avatar' => $user['avatar'] ?: avatarUrl($user['avatar'], $user['realname'], $user['user_id'], 120), + 'nickname' => $friendNickname + ]; + } + // 我的朋友圈列表 public function myPosts() { $where = [ ['user_id', '=', $this->uid], ['privacy', 'in', [1,2,3,4]], + ['status', '=', 1], ['delete_time', '=', 0] ]; - $field = 'id,content,location,address,type,user_id,create_time'; + $field = 'id,content,location,address,type,user_id,create_time,privacy'; $order = 'create_time desc'; $model = new PostsModel(); @@ -126,9 +133,11 @@ class Posts extends BaseController $where = [ 'id' => $posts_id, 'user_id' => $this->uid, + ['privacy', 'in', [1,2,3,4]], + ['status', '=', 1], 'delete_time' => 0 ]; - $field = 'id,content,location,address,type,user_id,create_time'; + $field = 'id,content,location,address,type,user_id,create_time,privacy'; $data = (new PostsModel())->where($where)->field($field)->find(); if (!$data) { return warning(lang('system.error')); @@ -184,8 +193,13 @@ class Posts extends BaseController $imgArr = $this->request->param('img_arr', []); $posts_id = $this->request->param('posts_id', ''); $user_ids = $this->request->param('user_ids', []); + $status = $this->request->param('status', '1'); - $privacy_user_arr = [2,4]; + if (!in_array($status, ['1','2'])) { + return error(lang('posts.user_empty')); + } + + $privacy_user_arr = $this->privacyUserArr; if (in_array($privacy, $privacy_user_arr)) { if (empty($user_ids) || !is_array($user_ids)) { return error(lang('posts.user_empty')); @@ -205,7 +219,7 @@ class Posts extends BaseController if ($posts_id) { $existsWhere = [ 'id' => $posts_id, - 'privacy' => 0, + 'status' => 2, 'user_id' => $this->uid ]; $exists = (new PostsModel())->where($existsWhere)->find()->toArray(); @@ -222,7 +236,8 @@ class Posts extends BaseController 'content' => $content, 'privacy' => $privacy, 'location' => $location ?? '', - 'address' => $address ?? '' + 'address' => $address ?? '', + 'status' => $status ]; if ($posts_id) { $info['update_time'] = time(); @@ -318,8 +333,8 @@ class Posts extends BaseController // 获取上传草稿帖子数据 public function getLastPosts() { - $existsWhere = ['user_id' => $this->uid, 'privacy' => 0, 'delete_time' => 0]; - $field = 'id as posts_id,content,type,location,address as location_address'; + $existsWhere = ['user_id' => $this->uid, 'status' => 2, 'delete_time' => 0]; + $field = 'id as posts_id,content,type,location,address as location_address,privacy'; $data = PostsModel::where($existsWhere)->field($field)->find(); if ($data) { $fileWhere = [ @@ -336,6 +351,14 @@ class Posts extends BaseController $files[$fileKey]['src'] = File::where(['file_id' => $fileValue['file_id']])->value('src'); } $data['files'] = $files; + $privacy_user =[]; + if (in_array($data['privacy'], $this->privacyUserArr)) { + $PrivacyUsers = PostsPrivacyUsers::where(['posts_id' => $data['id']])->column('user_id'); + foreach ($PrivacyUsers as $user_id) { + $privacy_user[] = $this->getFriendUserInfo($user_id); + } + } + $data['privacy_user'] = $privacy_user; } return success('', $data); } diff --git a/public/sql/database.sql b/public/sql/database.sql index a423a32..d4c4001 100644 --- a/public/sql/database.sql +++ b/public/sql/database.sql @@ -343,11 +343,13 @@ CREATE TABLE `yu_posts` ( `user_id` INT(11) NOT NULL DEFAULT '0' COMMENT '用户id', `content` TEXT COMMENT '文字内容', `type` TINYINT(4) NOT NULL DEFAULT '0' COMMENT '1文字 2图片 3视频 12文字图片 13文字视频', - `privacy` TINYINT(4) NOT NULL DEFAULT '1' COMMENT '0草稿 1公开 2部分可见 3私密 4不给谁看', - `location` CHAR(15) DEFAULT NULL COMMENT '发布地址', + `privacy` TINYINT(4) NOT NULL DEFAULT '1' COMMENT '1公开 2部分可见 3私密 4不给谁看', + `location` VARCHAR(50) NOT NULL DEFAULT '' COMMENT '经纬度', `create_time` INT(11) NOT NULL DEFAULT '0' COMMENT '创建时间', `update_time` INT(11) NOT NULL DEFAULT '0' COMMENT '更新时间', `delete_time` INT(11) NOT NULL DEFAULT '0' COMMENT '删除时间', + `address` VARCHAR(255) NOT NULL DEFAULT '' COMMENT '发布位置', + `status` TINYINT(1) NOT NULL DEFAULT '1' COMMENT '状态 0禁止 1正常 2草稿', PRIMARY KEY (`id`), KEY `user_id` (`user_id`) ) ENGINE=INNODB DEFAULT CHARSET=utf8mb4 COMMENT='帖子';