url=getDiskUrl().'/'; } // 朋友圈列表 public function index() { $where = '(p.delete_time = 0 and p.privacy > 0) and '; $whereOr = $where . ' ( p.user_id = ' . $this->uid; $friendIds = Friend::getFriendIds($this->uid); if ($friendIds) { $friendIdStr = implode(',',$friendIds); $whereOr .= ' or ( p.privacy = 1 and p.user_id in (' . $friendIdStr . '))'; } $prefix = config('database.connections.mysql.prefix'); // 可见 $whereOr .= " 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 ))"; // 不可见 $whereOr .= " 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 )))"; $field = 'p.id,p.content,p.location,p.address as location_address,p.type,p.user_id,p.create_time'; $order = 'p.create_time desc'; $model = new PostsModel(); $list = $this->paginate($model->alias('p')->where($whereOr)->field($field)->order($order)); $data = []; if ($list) { $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['files'] = PostsFile::getPostsFile($item['id']); $userIdArr = $friendIds; $userIdArr[] = $this->uid; $likesData = Likes::getPostsLikes($item['id'], $this->uid, $userIdArr); $item['likes'] = $likesData['likes']; $item['is_like'] = $likesData['is_like']; $item['comment'] = Comment::getPostsComment($item['id'], $this->uid, $userIdArr); } } return success('', $data,$list->total(),$list->currentPage()); } // 我的朋友圈列表 public function myPosts() { $where = [ ['user_id', '=', $this->uid], ['privacy', 'in', [1,2,3,4]], ['delete_time', '=', 0] ]; $field = 'id,content,location,address,type,user_id,create_time'; $order = 'create_time desc'; $model = new PostsModel(); $list = $this->paginate($model->where($where)->field($field)->order($order)); $data = []; if ($list) { $data = $list->toArray()['data']; foreach ($data as &$item) { $item['files'] = PostsFile::getPostsFile($item['id']); } } return success('', $data,$list->total(),$list->currentPage()); } public function details() { $posts_id = $this->request->param('posts_id'); if (empty($posts_id)) { return warning(lang('system.error')); } $where = [ 'id' => $posts_id, 'user_id' => $this->uid, 'delete_time' => 0 ]; $field = 'id,content,location,address,type,user_id,create_time'; $data = (new PostsModel())->where($where)->field($field)->find(); if (!$data) { return warning(lang('system.error')); } $data['files'] = PostsFile::getPostsFile($data['id']); $friendIds = Friend::getFriendIds($this->uid); $friendIds[] = $this->uid; $likesData = Likes::getPostsLikes($data['id'], $this->uid, $friendIds); $data['likes'] = $likesData['likes']; $data['is_like'] = $likesData['is_like']; $data['comment'] = Comment::getPostsComment($data['id'], $this->uid, $friendIds); return success('', $data); } // 删除帖子 public function del() { try { $posts_id = $this->request->param('posts_id'); if (empty($posts_id)) { throw new \Exception(''); } $existsWhere = [ 'id' => $posts_id, 'user_id' => $this->uid, 'delete_time' => 0 ]; $exists = (new PostsModel())->where($existsWhere)->find(); if (!$exists) { throw new \Exception(''); } PostsModel::update(['delete_time' => time()], ['id' => $posts_id]); return success(lang('system.success')); } catch (\Exception $e) { return warning(lang('system.error')); } } // 添加帖子 public function add() { $content = $this->request->param('content', ''); $privacy = $this->request->param('privacy', ''); $location = $this->request->param('location', ''); $address = $this->request->param('address', ''); $video_file = $this->request->param('video_file', ''); $poster_file = $this->request->param('poster_file', ''); $imgArr = $this->request->param('img_arr', []); $posts_id = $this->request->param('posts_id', ''); $user_ids = $this->request->param('user_ids', []); $privacy_user_arr = [2,4]; if (in_array($privacy, $privacy_user_arr)) { if (empty($user_ids) || !is_array($user_ids)) { return error(lang('posts.user_empty')); } } $type = ''; if (!empty($content)) { $type = '1'; } if (!empty($imgArr)) { $type .= '2'; } elseif (!empty($video_file)) { $type .= '3'; } $exists = []; if ($posts_id) { $existsWhere = [ 'id' => $posts_id, 'privacy' => 0, 'user_id' => $this->uid ]; $exists = (new PostsModel())->where($existsWhere)->find()->toArray(); if (!$exists) { return error(lang('posts.exists')); } } Db::startTrans(); try { $info = [ 'user_id' => $this->uid, 'type' => $type, 'content' => $content, 'privacy' => $privacy, 'location' => $location ?? '', 'address' => $address ?? '' ]; if ($posts_id) { $info['update_time'] = time(); PostsModel::update($info,['id' => $posts_id]); PostsFile::update(['delete_time' => time()],['posts_id' => $posts_id]); if (in_array($exists['privacy'], $privacy_user_arr)) { (new PostsPrivacyUsers())->where(['posts_id' => $posts_id])->delete(); } } else { $info['create_time'] = time(); $posts_id = (new PostsModel())->insertGetId($info); } $fileSaveArr = []; if ($imgArr) { foreach ($imgArr as $key => $img_url) { $fileSaveArr = $this->addPostsFileData( $img_url, $posts_id, $fileSaveArr, $key + 1 ); } } elseif ($video_file && $poster_file) { $fileSaveArr = $this->addPostsFileData( $video_file, $posts_id, $fileSaveArr, 1, 2 ); $fileSaveArr = $this->addPostsFileData( $poster_file, $posts_id, $fileSaveArr, 2 ); } if ($imgArr || ($video_file && $poster_file)) { if (empty($fileSaveArr)) { throw new \Exception(lang('system.error')); } } if ($fileSaveArr) { (new PostsFile())->saveAll($fileSaveArr); } if (!empty($user_ids) && in_array($info['privacy'], $privacy_user_arr)) { $user_type = $info['privacy'] == 2 ? 1 : 2; $privacy_users = []; foreach ($user_ids as $user_id) { if (!is_numeric($user_id)) { throw new \Exception(lang('system.error')); } $privacy_users[] = [ 'posts_id' => $posts_id, 'user_id' => $user_id, 'type' => $user_type ]; } if ($privacy_users) { (new PostsPrivacyUsers())->saveAll($privacy_users); } } Db::commit(); return success(lang('system.addOk')); } catch (\Exception $e) { Db::rollback(); return warning(lang('system.error')); } } // 添加图片视频数据处理 protected function addPostsFileData($url, $posts_id, $data, $sort = 1, $type = 1) { $imgUrl = str_replace($this->url, '', $url); $whereFile = ['src' => $imgUrl, 'user_id' => $this->uid, 'delete_time' => 0]; $img_file_id = File::where($whereFile)->value('file_id'); if ($img_file_id) { $data[] = [ 'posts_id' => $posts_id, 'type' => $type, 'file_id' => $img_file_id, 'sort' => $sort ]; } return $data; } // 获取上传草稿帖子数据 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'; $data = PostsModel::where($existsWhere)->field($field)->find()->toArray(); if ($data) { $fileWhere = [ 'posts_id' => $data['posts_id'], 'delete_time' => 0 ]; $files = (new PostsFile()) ->where($fileWhere) ->field('file_id,type') ->order('sort asc') ->select() ->toArray(); foreach ($files as $fileKey => $fileValue) { $files[$fileKey]['src'] = File::where(['file_id' => $fileValue['file_id']])->value('src'); } $data['files'] = $files; } return success('', $data); } // 点赞帖子 public function like() { $posts_id = $this->request->param('posts_id'); if (empty($posts_id)) { return error(lang('system.fail')); } $info = [ 'user_id' => $this->uid, 'type' => 1, 'relevance_id' => $posts_id ]; $exists_id = Likes::where($info)->value('id'); if ($exists_id) { (new Likes())->where('id', $exists_id)->delete(); return success(lang('posts.cancel_like')); } $info['create_time'] = time(); (new Likes())->save($info); return success(lang('posts.success_like')); } // 评论帖子 public function comment() { $posts_id = $this->request->param('posts_id'); if (empty($posts_id)) { return error(lang('system.fail')); } $content = $this->request->param('content'); if (empty($content)) { return error(lang('system.fail')); } $pid = $this->request->param('pid', 0); $reply_user_id = 0; if (!empty($pid)) { $reply_user_id = Comment::where('id', $pid)->value('user_id'); } $info = [ 'user_id' => $this->uid, 'content' => $content, 'type' => 1, 'relevance_id' => $posts_id, 'reply_user_id' => $reply_user_id, 'pid' => $pid, 'create_time' => time() ]; Comment::create($info); return success(lang('system.success')); } // 删除评论 public function delComment() { $posts_id = $this->request->param('posts_id'); if (empty($posts_id)) { return error(lang('system.fail')); } $comment_id = $this->request->param('comment_id'); if (empty($comment_id)) { return error(lang('system.fail')); } $existsWhere = [ 'id' => $comment_id, 'user_id' => $this->uid, 'type' => 1, 'relevance_id' => $posts_id ]; $exists = (new Comment())->where($existsWhere)->find('id'); if (!$exists) { return error(lang('system.fail')); } $exists->delete_time = time(); $exists->save(); return success(lang('system.success')); } }