AuthenticationController.php 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163
  1. <?php
  2. namespace App\Http\Controllers\Account;
  3. use App\Models\Area;
  4. use App\Models\Attention;
  5. use App\Models\Authentication;
  6. use App\Models\Tag;
  7. use Illuminate\Http\Request;
  8. use App\Http\Requests;
  9. use App\Http\Controllers\Controller;
  10. use Illuminate\Support\Facades\Storage;
  11. class AuthenticationController extends Controller
  12. {
  13. protected $validateRules = [
  14. 'real_name' => 'required|max:64',
  15. 'title' => 'required|max:128',
  16. 'description' => 'sometimes|max:9999',
  17. 'id_card' => 'required|max:64|unique:authentications',
  18. 'id_card_image' => 'required|image|max:2048',
  19. 'skill' => 'required|max:128',
  20. 'skill_image' => 'required|image|max:2048',
  21. 'captcha' => 'required|captcha',
  22. ];
  23. protected $validateMessages = [
  24. 'real_name.required' => '真实姓名不能为空',
  25. 'real_name.max' => '真实姓名长度不能超过:max个字符',
  26. 'title.required' => '身份职业不能为空',
  27. 'title.max' => '身份职业不能超过:max个字符',
  28. 'description.max' => '个人介绍不能超过:max个字符',
  29. 'id_card.required' => '身份号码不能为空',
  30. 'id_card.max' => '身份证号码不能超过:max个字符',
  31. 'id_card_image.required' => '身份证正面图片不能为空',
  32. 'skill.required' => '认证领域不能为空',
  33. 'skill_image.required' => '认证领域图片不能为空',
  34. 'captcha.required' => '验证码不能为空',
  35. 'captcha.captcha' => '验证码错误',
  36. ];
  37. /**
  38. * 显示认证信息
  39. */
  40. public function getIndex(Request $request)
  41. {
  42. $provinces = Area::provinces();
  43. $cities = Area::cities($request->user()->province);
  44. $areaData = [
  45. 'provinces' => $provinces,
  46. 'cities' => $cities,
  47. ];
  48. return view('theme::authentication.index')->with(compact('areaData'));
  49. }
  50. /**
  51. * 认证信息提交
  52. */
  53. public function postStore(Request $request)
  54. {
  55. $this->validate($request,$this->validateRules,$this->validateMessages);
  56. $data = $request->all();
  57. $data['user_id'] = $request->user()->id;
  58. if($request->hasFile('id_card_image')){
  59. $file = $request->file('id_card_image');
  60. $path = 'avatar/' . date("Ym/d", time());
  61. $data['id_card_image'] = $this->upload_image($path, $file);
  62. }
  63. if($request->hasFile('skill_image')){
  64. $file = $request->file('skill_image');
  65. $path = 'avatar/' . date("Ym/d", time());
  66. $data['skill_image'] = $this->upload_image($path, $file);
  67. }
  68. Authentication::create($data);
  69. $this->attendToTags(explode(",",$data['skill']),$request->user()->id);
  70. return $this->success(route('auth.authentication.index'),'您的申请已经提交成功!我们会在3个工作日内完成审核,请耐心等待!');
  71. }
  72. /*修改认证信息*/
  73. public function anyEdit(Request $request)
  74. {
  75. if($request->isMethod('post')) {
  76. $this->validateRules['id_card'] = 'required|max:64|unique:authentications,id_card,'.$request->user()->id.',user_id';
  77. $this->validate($request, $this->validateRules,$this->validateMessages);
  78. $data = $request->all();
  79. $data['status'] = 0;
  80. if ($request->hasFile('id_card_image')) {
  81. $savePath = storage_path('app/authentications');
  82. $file = $request->file('id_card_image');
  83. $fileName = uniqid(str_random(8)) . '.' . $file->getClientOriginalExtension();
  84. $target = $file->move($savePath, $fileName);
  85. if ($target) {
  86. $data['id_card_image'] = 'authentications-' . $fileName;
  87. }
  88. }
  89. if ($request->hasFile('skill_image')) {
  90. $savePath = storage_path('app/authentications');
  91. $file = $request->file('skill_image');
  92. $fileName = uniqid(str_random(8)) . '.' . $file->getClientOriginalExtension();
  93. $target = $file->move($savePath, $fileName);
  94. if ($target) {
  95. $data['skill_image'] = 'authentications-' . $fileName;
  96. }
  97. }
  98. $request->user()->authentication->update($data);
  99. Tag::multiSave($data['skill'],$request->user());
  100. $this->attendToTags(explode(",",$data['skill']),$request->user()->id);
  101. return $this->success(route('auth.authentication.index'),'您的申请已经提交成功!我们会在3个工作日内完成审核,请耐心等待!');
  102. }
  103. $authentication = $request->user()->authentication;
  104. $provinces = Area::provinces();
  105. $cities = Area::cities($authentication->province);
  106. $areaData = [
  107. 'provinces' => $provinces,
  108. 'cities' => $cities,
  109. ];
  110. return view('theme::authentication.edit')->with(compact('authentication','areaData'));
  111. }
  112. /*关注标签*/
  113. private function attendToTags($tags,$userId){
  114. foreach( $tags as $tag ){
  115. $newTag = Tag::firstOrCreate(['name'=>$tag]);
  116. $attention = Attention::where("user_id",'=',$userId)->where('source_type','=',get_class($newTag))->where('source_id','=',$newTag->id)->first();
  117. if(!$attention){
  118. Attention::create([
  119. 'user_id' => $userId,
  120. 'source_id' => $newTag->id,
  121. 'source_type' => get_class($newTag),
  122. ]);
  123. Tag::find($newTag->id)->increment('followers');
  124. }
  125. }
  126. }
  127. function upload_image($path, $file, $drive = 'oss')
  128. {
  129. $disk = Storage::disk($drive);
  130. //将图片上传到OSS中,并返回图片路径信息 值如:avatar/WsH9mBklpAQUBQB4mL.jpeg
  131. $path = $disk->put($path, $file);
  132. //由于图片不在本地,所以我们应该获取图片的完整路径,
  133. //值如:https://test.oss-cn-hongkong.aliyuncs.com/avatar/8GdIcz1NaCZ.jpeg
  134. return $disk->url($path);
  135. }
  136. }