TransferController.php 7.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218
  1. <?php
  2. namespace App\Http\Controllers;
  3. use App\Models\Transfer;
  4. use App\Models\Channel;
  5. use App\Models\Article;
  6. use Illuminate\Http\Request;
  7. use App\Http\Api\AuthApi;
  8. use App\Http\Api\StudioApi;
  9. use App\Http\Api\UserApi;
  10. use App\Http\Resources\TransferResource;
  11. class TransferController extends Controller
  12. {
  13. /**
  14. * Display a listing of the resource.
  15. *
  16. * @return \Illuminate\Http\Response
  17. */
  18. public function index(Request $request)
  19. {
  20. switch ($request->get('view')) {
  21. case 'studio':
  22. # 获取studio内所有channel
  23. $user = AuthApi::current($request);
  24. if(!$user){
  25. return $this->error(__('auth.failed'));
  26. }
  27. //判断当前用户是否有指定的studio的管理权限
  28. $studioId = StudioApi::getIdByName($request->get('name'));
  29. if($user['user_uid'] !== $studioId){
  30. return $this->error(__('auth.failed'));
  31. }
  32. switch ($request->get('view2')) {
  33. case 'in':
  34. $table = Transfer::where('new_owner',$studioId);
  35. break;
  36. case 'out':
  37. $table = Transfer::where('origin_owner',$studioId);
  38. break;
  39. default:
  40. return $this->error('no view2');
  41. break;
  42. }
  43. $outNumber = Transfer::where('origin_owner',$studioId)
  44. ->where('status','transferred')
  45. ->count();
  46. $inNumber = Transfer::where('new_owner',$studioId)
  47. ->where('status','transferred')
  48. ->count();
  49. break;
  50. }
  51. if(!empty($search)){
  52. $table->where('title', 'like', $search."%");
  53. }
  54. $table->orderBy($request->get('order','updated_at'),
  55. $request->get('dir','desc'));
  56. $count = $table->count();
  57. $table->skip($request->get("offset",0))
  58. ->take($request->get('limit',100));
  59. $result = $table->get();
  60. return $this->ok(["rows"=>TransferResource::collection($result),
  61. "count"=>$count,
  62. 'out'=>$outNumber,
  63. 'in'=>$inNumber,
  64. ]);
  65. }
  66. /**
  67. * Store a newly created resource in storage.
  68. *
  69. * @param \Illuminate\Http\Request $request
  70. * @return \Illuminate\Http\Response
  71. */
  72. public function store(Request $request)
  73. {
  74. $user = AuthApi::current($request);
  75. if(!$user){
  76. return $this->error(__('auth.failed'));
  77. }
  78. //
  79. // validate
  80. // read more on validation at http://laravel.com/docs/validation
  81. $rules = array(
  82. 'res_id' => 'required',
  83. 'res_type' => 'required',
  84. 'new_owner' => 'required',
  85. );
  86. $validated = $request->validate($rules);
  87. $resId = $request->get('res_id');
  88. foreach ($resId as $id) {
  89. $transfer = new Transfer;
  90. //查看权限
  91. switch ($request->get('res_type')) {
  92. case 'channel':
  93. $oldRes = Channel::find($id);
  94. if($oldRes->owner_uid !== $user['user_uid']){
  95. return $this->error(__('auth.failed'),[403],403);
  96. }
  97. $transfer->origin_owner = $oldRes->owner_uid;
  98. break;
  99. case 'article':
  100. $oldRes = Article::find($id);
  101. if($oldRes->owner !== $user['user_uid']){
  102. return $this->error(__('auth.failed'),[403],403);
  103. }
  104. $transfer->origin_owner = $oldRes->owner;
  105. break;
  106. default:
  107. # code...
  108. break;
  109. }
  110. //查重
  111. if(Transfer::where('res_id',$id)
  112. ->where('res_type',$request->get('res_type'))
  113. ->where('status','transferred')
  114. ->exists()){
  115. return $this->error('该资源已经进入转让流程',[200],200);
  116. }
  117. $transfer->res_id = $id;
  118. $transfer->res_type = $request->get('res_type');
  119. $transfer->transferor_id = $user['user_uid'];
  120. $transfer->new_owner = $request->get('new_owner');
  121. $transfer->save();
  122. }
  123. return $this->ok(count($resId));
  124. }
  125. /**
  126. * Display the specified resource.
  127. *
  128. * @param \App\Models\Transfer $transfer
  129. * @return \Illuminate\Http\Response
  130. */
  131. public function show(Transfer $transfer)
  132. {
  133. //
  134. return $this->ok(new TransferResource($discussion));
  135. }
  136. /**
  137. * Update the specified resource in storage.
  138. *
  139. * @param \Illuminate\Http\Request $request
  140. * @param \App\Models\Transfer $transfer
  141. * @return \Illuminate\Http\Response
  142. */
  143. public function update(Request $request, Transfer $transfer)
  144. {
  145. $user = AuthApi::current($request);
  146. if(!$user){
  147. return $this->error(__('auth.failed'),[403],403);
  148. }
  149. //权限
  150. switch ($request->get('status')) {
  151. case 'accept':
  152. case 'refuse':
  153. if($transfer->new_owner!==$user['user_uid']){
  154. return $this->error(__('auth.failed'),[403],403);
  155. }
  156. $transfer->status = $request->get('status');
  157. break;
  158. case 'cancel':
  159. if($transfer->origin_owner!==$user['user_uid']){
  160. return $this->error(__('auth.failed'),[403],403);
  161. }
  162. $transfer->status = 'cancel';
  163. break;
  164. default:
  165. return $this->error(__('auth.failed'),[404],404);
  166. break;
  167. }
  168. $transfer->editor_id = $user['user_uid'];
  169. $transfer->save();
  170. if($request->get('status')==='accept'){
  171. switch ($transfer->res_type) {
  172. case 'channel':
  173. Channel::where('uid',$transfer->res_id)
  174. ->update(['owner_uid'=>$transfer->new_owner]);
  175. break;
  176. case 'article':
  177. $userId = UserApi::getIdByUuid($transfer->new_owner);
  178. Article::where('uid',$transfer->res_id)
  179. ->update(['owner'=>$transfer->new_owner,'owner_id'=>$userId]);
  180. break;
  181. default:
  182. # code...
  183. break;
  184. }
  185. }
  186. return $this->ok(new TransferResource($transfer));
  187. }
  188. /**
  189. * Remove the specified resource from storage.
  190. *
  191. * @param \App\Models\Transfer $transfer
  192. * @return \Illuminate\Http\Response
  193. */
  194. public function destroy(Transfer $transfer)
  195. {
  196. //
  197. }
  198. }