TransferController.php 6.3 KB

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