InviteController.php 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169
  1. <?php
  2. namespace App\Http\Controllers;
  3. use Illuminate\Support\Facades\Mail;
  4. use Illuminate\Support\Facades\Log;
  5. use Illuminate\Support\Str;
  6. use Illuminate\Http\Request;
  7. use App\Models\Invite;
  8. use App\Models\UserInfo;
  9. use App\Services\AuthService;
  10. use App\Http\Api\UserApi;
  11. use App\Http\Api\StudioApi;
  12. use App\Http\Resources\InviteResource;
  13. use App\Mail\InviteMail;
  14. class InviteController extends Controller
  15. {
  16. /**
  17. * Display a listing of the resource.
  18. *
  19. * @return \Illuminate\Http\Response
  20. */
  21. public function index(Request $request)
  22. {
  23. //
  24. $user = AuthService::current($request);
  25. if (!$user) {
  26. return $this->error(__('auth.failed'));
  27. }
  28. $table = Invite::select([
  29. 'id',
  30. 'user_uid',
  31. 'email',
  32. 'status',
  33. 'created_at',
  34. 'updated_at'
  35. ]);
  36. switch ($request->input('view')) {
  37. case 'studio':
  38. if (empty($request->input('studio'))) {
  39. return $this->error(__('auth.failed'));
  40. }
  41. //判断当前用户是否有指定的studio的权限
  42. if ($user['user_uid'] !== StudioApi::getIdByName($request->input('studio'))) {
  43. return $this->error(__('auth.failed'));
  44. }
  45. $table = $table->where('user_uid', $user["user_uid"]);
  46. break;
  47. case 'all':
  48. $user = UserApi::getByUuid($user['user_uid']);
  49. if (!$user || !isset($user['roles']) || !in_array('administrator', $user['roles'])) {
  50. return $this->error(__('auth.failed'));
  51. }
  52. break;
  53. }
  54. if ($request->has('search')) {
  55. $table = $table->where('email', 'like', '%' . $request->input('search') . "%");
  56. }
  57. $count = $table->count();
  58. $table = $table->orderBy(
  59. $request->input('order', 'updated_at'),
  60. $request->input('dir', 'desc')
  61. );
  62. $table = $table->skip($request->input('offset', 0))
  63. ->take($request->input('limit', 1000));
  64. $result = $table->get();
  65. return $this->ok(["rows" => InviteResource::collection($result), "count" => $count]);
  66. }
  67. /**
  68. * Store a newly created resource in storage.
  69. *
  70. * @param \Illuminate\Http\Request $request
  71. * @return \Illuminate\Http\Response
  72. */
  73. public function store(Request $request)
  74. {
  75. //
  76. $sender = '';
  77. if (!empty($request->input('studio'))) {
  78. $user = AuthService::current($request);
  79. if (!$user) {
  80. return $this->error(__('auth.failed'), 401, 401);
  81. }
  82. //判断当前用户是否有指定的studio的权限
  83. $studio_id = StudioApi::getIdByName($request->input('studio'));
  84. if ($user['user_uid'] !== $studio_id) {
  85. return $this->error(__('auth.failed'));
  86. }
  87. $sender = $studio_id;
  88. } else {
  89. $sender = config("mint.admin.root_uuid");
  90. }
  91. //查询是否重复
  92. if (
  93. Invite::where('email', $request->input('email'))->exists() ||
  94. UserInfo::where('email', $request->input('email'))->exists()
  95. ) {
  96. return $this->error('email.exists', __('validation.exists', ['email']), 200);
  97. }
  98. $uuid = Str::uuid();
  99. try {
  100. Mail::to($request->input('email'))
  101. ->send(new InviteMail(
  102. $uuid,
  103. $request->input('subject', 'sign up wikipali'),
  104. $request->input('lang'),
  105. $request->input('dashboard')
  106. ));
  107. } catch (\Exception $e) {
  108. Log::error('send invite email fail', [
  109. 'message' => $e->getMessage(),
  110. 'trace' => $e->getTraceAsString(),
  111. ]);
  112. return $this->error('send email fail', '', 200);
  113. }
  114. $invite = new Invite;
  115. $invite->id = $uuid;
  116. $invite->email = $request->input('email');
  117. $invite->user_uid = $sender;
  118. $invite->status = 'invited';
  119. $invite->save();
  120. return $this->ok(new InviteResource($invite));
  121. }
  122. /**
  123. * Display the specified resource.
  124. *
  125. * @param \App\Models\Invite $invite
  126. * @return \Illuminate\Http\Response
  127. */
  128. public function show(Invite $invite)
  129. {
  130. //
  131. return $this->ok(new InviteResource($invite));
  132. }
  133. /**
  134. * Update the specified resource in storage.
  135. *
  136. * @param \Illuminate\Http\Request $request
  137. * @param \App\Models\Invite $invite
  138. * @return \Illuminate\Http\Response
  139. */
  140. public function update(Request $request, Invite $invite)
  141. {
  142. //
  143. }
  144. /**
  145. * Remove the specified resource from storage.
  146. *
  147. * @param \App\Models\Invite $invite
  148. * @return \Illuminate\Http\Response
  149. */
  150. public function destroy(Invite $invite)
  151. {
  152. //
  153. }
  154. }