AjaxController.php 8.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227
  1. <?php
  2. namespace App\Http\Controllers;
  3. use App\Models\Area;
  4. use App\Models\Message;
  5. use App\Models\Notification;
  6. use App\Models\Question;
  7. use App\Models\Tag;
  8. use App\Models\Taggable;
  9. use App\Models\User;
  10. use App\Models\UserTag;
  11. use App\Services\SmsService;
  12. use Illuminate\Http\Request;
  13. use Illuminate\Support\Facades\Validator;
  14. class AjaxController extends Controller
  15. {
  16. /**
  17. * 加载城市下拉项
  18. * @param $province_id 省份ID
  19. * @return \Illuminate\Contracts\Routing\ResponseFactory|\Symfony\Component\HttpFoundation\Response
  20. */
  21. public function loadCities($province_id)
  22. {
  23. $cities = Area::cities($province_id);
  24. $city_options = '';
  25. foreach($cities as $city){
  26. $city_options .= '<option value="'.$city->id.'">'.$city->name.'</option>';
  27. }
  28. return response($city_options);
  29. }
  30. /*未读通知数目*/
  31. public function unreadNotifications()
  32. {
  33. $total = Notification::where('to_user_id','=',Auth()->user()->id)->where('is_read','=',0)->count();
  34. $response = '<span class="fa fa-bell-o fa-lg"></span>';
  35. if( $total > 0 ){
  36. if($total > 99){
  37. $total = '99+' ;
  38. }
  39. $response = '<span class="fa fa-bell-o fa-lg"></span><span class="label label-danger">'.$total.'</span>';
  40. }
  41. return response($response);
  42. }
  43. public function unreadMessages()
  44. {
  45. $total = Message::where('to_user_id','=',Auth()->user()->id)->where('is_read','=',0)->where("to_deleted","<>",1)->where("from_deleted","<>",1)->count();
  46. $response = '<span class="fa fa-envelope-o fa-lg"></span>';
  47. if( $total > 0 ){
  48. if($total > 99){
  49. $total = '99+' ;
  50. }
  51. $response = '<span class="fa fa-envelope-o fa-lg"></span><span class="label label-success">'.$total.'</span>';
  52. }
  53. return response($response);
  54. }
  55. public function loadTags(Request $request)
  56. {
  57. $word = $request->input('word');
  58. $tags = [];
  59. if( strlen($word) > 10 ){
  60. return response()->json($tags);
  61. }
  62. $type = $request->input('type','all');
  63. if(!$word){
  64. $tags = Taggable::hottest($type,10);
  65. }else{
  66. $tags = Tag::where('name','like',$word.'%')->take(10)->get();
  67. }
  68. $selectTags = [];
  69. foreach ($tags as $tag){
  70. $selectTag = [];
  71. $selectTag['id'] = $tag->name;
  72. $selectTag['text'] = $tag->name;
  73. $selectTags[] = $selectTag;
  74. }
  75. return response()->json($selectTags);
  76. }
  77. public function loadUsers(Request $request)
  78. {
  79. $word = $request->input('word');
  80. $users = User::where('id','<>',$request->user()->id)->where('name','like',"$word%")->take(10)->get();
  81. $users->map(function($user){
  82. $user->avatar = get_user_avatar($user->id);
  83. $user->coins = $user->userData->coins;
  84. $user->answers = $user->userData->answers;
  85. $user->followers = $user->userData->followers;
  86. });
  87. return response()->json($users->toArray());
  88. }
  89. public function loadInviteUsers(Request $request)
  90. {
  91. $questionId = $request->input('question_id',0);
  92. $question = Question::find($questionId);
  93. if(!$question){
  94. return $this->ajaxError(10004,'notFund');
  95. }
  96. $tags = $question->tags()->get();
  97. $tagIds = array_pluck($tags,"id");
  98. if(!$tagIds){
  99. return $this->ajaxError(10004,'noData');
  100. }
  101. $word = $request->input('word','');
  102. if(trim($word)){
  103. $users = User::where('id','<>',$request->user()->id)->where('name','like',"$word%")->take(10)->get();
  104. $users->map(function($user) use($tagIds,$question) {
  105. $user->tag_name = '';
  106. $user->tag_answers = 0;
  107. $userTag = UserTag::where("user_id","=",$user->id)->whereIn("tag_id",$tagIds)->orderBy("answers","desc")->orderBy("created_at","desc")->first();
  108. if($userTag){
  109. $tag = Tag::find($userTag->tag_id);
  110. if($tag){
  111. $user->tag_name = $tag->name;
  112. }
  113. $user->tag_answers = $userTag->answers;
  114. }
  115. $user->avatar = get_user_avatar($user->id);
  116. $user->url = route('auth.space.index',['user_id'=>$user->user_id]);
  117. $user->isInvited = 0;
  118. });
  119. }else{
  120. $invitations = $question->invitations()->get();
  121. $invitedUserIds = array_pluck($invitations,'user_id');
  122. $userTags = UserTag::whereIn("tag_id",$tagIds)->whereNotIn("user_id",$invitedUserIds)->orderBy("answers","desc")->orderBy("supports","desc")->select("user_id","tag_id","answers","supports")->take(16)->groupBy("user_id")->get();
  123. $users = [];
  124. foreach($userTags as $userTag){
  125. $user = User::find($userTag->user_id);
  126. if(!$user){
  127. continue;
  128. }
  129. $user->tag_name = '';
  130. $user->tag_answers = 0;
  131. $tag = Tag::find($userTag->tag_id);
  132. if($tag){
  133. $user->tag_name = $tag->name;
  134. }
  135. $user->tag_answers = $userTag->answers;
  136. $user->avatar = get_user_avatar($userTag->user_id);
  137. $user->url = route('auth.space.index',['user_id'=>$userTag->user_id]);
  138. $user->isInvited = 0;
  139. $users[] = $user;
  140. }
  141. }
  142. return $this->ajaxSuccess($users);
  143. }
  144. public function sendSmsCode(Request $request){
  145. if($request->isMethod('post')){
  146. $validateRules['code'] = 'required|captcha';
  147. $validator = Validator::make($request->all(),$validateRules);
  148. if($validator->fails()){
  149. return $this->ajaxError(10003,'验证码错误');
  150. }
  151. $mobile = $request->input('mobile','');
  152. if(!is_mobile($mobile)){
  153. return $this->ajaxError(10004,'手机号格式码错误');
  154. }
  155. $sendType = $request->input('send_type','');
  156. if($request->user() && $sendType=='bind'){ //绑定手机号绑定处理
  157. /*黑名单校验*/
  158. if( $request->user()->status == -1 ){
  159. return $this->ajaxError(10011,'你无权进行该操作');
  160. }
  161. /*避免重复发送短信校验*/
  162. if($request->user()->mobile == $mobile && $request->user()->userData->mobile_status==1){
  163. return $this->ajaxError(10008,'您的手机号已绑定,不能重复绑定');
  164. }
  165. /*已注册手机号校验*/
  166. if(User::where("mobile","=",$mobile)->where("id","<>",$request->user()->id)->count() > 0){
  167. return $this->ajaxError(10009,'该手机号已注册,不能重复绑定');
  168. }
  169. }
  170. if( $sendType =='register' && User::where("mobile","=",$mobile)->count() > 0){ //注册发送处理
  171. return $this->ajaxError(10011,'该手机号已注册,不能重复注册');
  172. }else if($sendType =='findPassword' && User::where("mobile","=",$mobile)->count() == 0){ //找回密码处理
  173. return $this->ajaxError(10011,'该手机号不存在,请核实');
  174. }
  175. /*次数限制*/
  176. $sendTimes = $this->counter('send_sms_counter_'.$mobile);
  177. if($sendTimes > config('tipask.sms_limit_times',10)){
  178. return $this->ajaxError(10005,'短信验证码发送数量已超出当日最大限制,请明天再试');
  179. }
  180. if(!SmsService::sendSmsCode($mobile)){
  181. return $this->ajaxError(10006,'短信发送失败,请稍后再试');
  182. }
  183. $this->counter('send_sms_counter_'.$mobile,1);
  184. return $this->ajaxSuccess("success");
  185. }
  186. return $this->ajaxError(10007,"请求错误");
  187. }
  188. }