ArticleController.php 6.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198
  1. <?php
  2. namespace App\Http\Controllers;
  3. use App\Models\Article;
  4. use Illuminate\Http\Request;
  5. use Illuminate\Support\Str;
  6. use App\Http\Resources\ArticleResource;
  7. class ArticleController extends Controller
  8. {
  9. /**
  10. * Display a listing of the resource.
  11. *
  12. * @return \Illuminate\Http\Response
  13. */
  14. public function index(Request $request)
  15. {
  16. //
  17. $indexCol = ['uid','title','subtitle','summary','owner','lang','status','updated_at','created_at'];
  18. switch ($request->get('view')) {
  19. case 'studio':
  20. # 获取studio内所有channel
  21. $user = \App\Http\Api\AuthApi::current($request);
  22. if($user){
  23. //判断当前用户是否有指定的studio的权限
  24. if($user['user_uid'] === \App\Http\Api\StudioApi::getIdByName($request->get('name'))){
  25. $table = Article::select($indexCol)->where('owner', $user["user_uid"]);
  26. }else{
  27. return $this->error(__('auth.failed'));
  28. }
  29. }else{
  30. return $this->error(__('auth.failed'));
  31. }
  32. break;
  33. }
  34. //处理搜索
  35. if(isset($_GET["search"])){
  36. $table = $table->where('title', 'like', $_GET["search"]."%");
  37. }
  38. //获取记录总条数
  39. $count = $table->count();
  40. //处理排序
  41. if(isset($_GET["order"]) && isset($_GET["dir"])){
  42. $table = $table->orderBy($_GET["order"],$_GET["dir"]);
  43. }else{
  44. //默认排序
  45. $table = $table->orderBy('updated_at','desc');
  46. }
  47. //处理分页
  48. if($request->has("limit")){
  49. if($request->has("offset")){
  50. $offset = $request->get("offset");
  51. }else{
  52. $offset = 0;
  53. }
  54. $table = $table->skip($offset)->take($request->get("limit"));
  55. }
  56. //获取数据
  57. $result = $table->get();
  58. if($result){
  59. /*
  60. foreach ($result as $key => $value) {
  61. # 获取studio信息
  62. $studio = $userinfo->getName($value->owner_uid);
  63. $value->studio = [
  64. 'id'=>$value->owner_uid,
  65. 'nickName'=>$studio['nickname'],
  66. 'studioName'=>$studio['username'],
  67. 'avastar'=>'',
  68. 'owner' => [
  69. 'id'=>$value->owner_uid,
  70. 'nickName'=>$studio['nickname'],
  71. 'userName'=>$studio['username'],
  72. 'avastar'=>'',
  73. ]
  74. ];
  75. }*/
  76. return $this->ok(["rows"=>$result,"count"=>$count]);
  77. }else{
  78. return $this->error("没有查询到数据");
  79. }
  80. }
  81. /**
  82. * Store a newly created resource in storage.
  83. *
  84. * @param \Illuminate\Http\Request $request
  85. * @return \Illuminate\Http\Response
  86. */
  87. public function store(Request $request)
  88. {
  89. //
  90. $user = \App\Http\Api\AuthApi::current($request);
  91. if($user){
  92. //判断当前用户是否有指定的studio的权限
  93. if($user['user_uid'] === \App\Http\Api\StudioApi::getIdByName($request->get('studio'))){
  94. //查询是否重复
  95. if(Article::where('title',$request->get('title'))->where('owner',$user['user_uid'])->exists()){
  96. return $this->error(__('validation.exists'));
  97. }else{
  98. $newOne = new Article;
  99. $newOne->id = app('snowflake')->id();
  100. $newOne->uid = Str::uuid();
  101. $newOne->title = $request->get('title');
  102. $newOne->lang = $request->get('lang');
  103. $newOne->owner = $user['user_uid'];
  104. $newOne->owner_id = $user['user_id'];
  105. $newOne->editor_id = $user['user_id'];
  106. $newOne->create_time = time()*1000;
  107. $newOne->modify_time = time()*1000;
  108. $newOne->save();
  109. return $this->ok($newOne);
  110. }
  111. }else{
  112. return $this->error(__('auth.failed'));
  113. }
  114. }else{
  115. return $this->error(__('auth.failed'));
  116. }
  117. }
  118. /**
  119. * Display the specified resource.
  120. * @param \Illuminate\Http\Request $request
  121. * @param \App\Models\Article $article
  122. * @return \Illuminate\Http\Response
  123. */
  124. public function show(Request $request,Article $article)
  125. {
  126. //
  127. if(!$article){
  128. return $this->error("no recorder");
  129. }
  130. if($article->status<30){
  131. //私有文章,判断权限
  132. $user = \App\Http\Api\AuthApi::current($request);
  133. if($user){
  134. //判断当前用户是否有指定的studio的权限
  135. return $this->error(__('auth.failed'));
  136. }
  137. if($user['user_uid'] !== $article->owner){
  138. //非所有者
  139. //TODO 判断是否协作
  140. return $this->error(__('auth.failed'));
  141. }
  142. }
  143. return $this->ok(new ArticleResource($article));
  144. }
  145. /**
  146. * Update the specified resource in storage.
  147. *
  148. * @param \Illuminate\Http\Request $request
  149. * @param \App\Models\Article $article
  150. * @return \Illuminate\Http\Response
  151. */
  152. public function update(Request $request, Article $article)
  153. {
  154. //
  155. if($article){
  156. //鉴权
  157. $user = \App\Http\Api\AuthApi::current($request);
  158. if($user && $article->owner === $user["user_uid"]){
  159. $article->title = $request->get('title');
  160. $article->subtitle = $request->get('subtitle');
  161. $article->summary = $request->get('summary');
  162. $article->content = $request->get('content');
  163. $article->lang = $request->get('lang');
  164. $article->status = $request->get('status');
  165. $article->modify_time = time()*1000;
  166. $article->save();
  167. return $this->ok($article);
  168. }else{
  169. //鉴权失败
  170. //TODO 判断是否为协作
  171. return $this->error(__('auth.failed'));
  172. }
  173. }else{
  174. return $this->error("no recorder");
  175. }
  176. }
  177. /**
  178. * Remove the specified resource from storage.
  179. *
  180. * @param \App\Models\Article $article
  181. * @return \Illuminate\Http\Response
  182. */
  183. public function destroy(Article $article)
  184. {
  185. //
  186. }
  187. }