SpaceController.php 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157
  1. <?php
  2. /**
  3. * 用户空间
  4. */
  5. namespace App\Http\Controllers\Account;
  6. use App\Models\Credit;
  7. use App\Models\User;
  8. use Illuminate\Http\Request;
  9. use App\Http\Controllers\Controller;
  10. use Illuminate\Support\Facades\App;
  11. use Illuminate\Support\Facades\Config;
  12. use Illuminate\Support\Facades\View;
  13. class SpaceController extends Controller
  14. {
  15. protected $user;
  16. public function __construct(Request $request){
  17. if($request->route()){
  18. $userId = $request->route()->parameter('user_id',0);
  19. $user = User::with('userData')->find($userId);
  20. if(!$user){
  21. abort(404);
  22. }
  23. $this->user = $user;
  24. View::share("userInfo",$user);
  25. }
  26. }
  27. /**
  28. * 用户空间首页
  29. *
  30. * @return \Illuminate\Http\Response
  31. */
  32. public function index()
  33. {
  34. $doings = $this->user->doings()->orderBy('created_at','DESC')->paginate(10);
  35. $doings->map(function($doing){
  36. $doing->action_text = Config::get('tipask.user_actions.'.$doing->action);
  37. });
  38. $this->user->userData->increment('views');
  39. return view('theme::space.index')->with('doings',$doings);
  40. }
  41. /**
  42. * 用户提问
  43. * @return View
  44. */
  45. public function questions()
  46. {
  47. $questions = $this->user->questions()->orderBy('created_at','DESC')->paginate(10);
  48. return view('theme::space.questions')->with('questions',$questions);
  49. }
  50. /**
  51. * 用户回答
  52. * @return mixed
  53. */
  54. public function answers()
  55. {
  56. $answers = $this->user->answers()->with('question')->orderBy('created_at','DESC')->paginate(10);
  57. return view('theme::space.answers')->with('answers',$answers);
  58. }
  59. public function articles()
  60. {
  61. $articles = $this->user->articles()->orderBy('created_at','DESC')->paginate(10);
  62. return view('theme::space.articles')->with('articles',$articles);
  63. }
  64. /*我的金币*/
  65. public function coins()
  66. {
  67. $coins = Credit::where('user_id','=',$this->user->id)->where('coins','<>',0)->orderBy('created_at','DESC')->paginate(10);
  68. $coins->map(function($coin){
  69. $coin->actionText = Config::get('tipask.user_actions.'.$coin->action);
  70. });
  71. return view('theme::space.coins')->with('coins',$coins);
  72. }
  73. /*我的经验*/
  74. public function credits()
  75. {
  76. $credits = Credit::where('user_id','=',$this->user->id)->where('credits','<>',0)->orderBy('created_at','DESC')->paginate(10);
  77. $credits->map(function($credit){
  78. $credit->actionText = Config::get('tipask.user_actions.'.$credit->action);
  79. });
  80. return view('theme::space.credits')->with('credits',$credits);
  81. }
  82. /*我的粉丝*/
  83. public function followers()
  84. {
  85. $followers = $this->user->followers()->orderBy('attentions.created_at','asc')->paginate(10);
  86. return view('theme::space.followers')->with('followers',$followers);
  87. }
  88. /*我的关注*/
  89. public function attentions(Request $request)
  90. {
  91. $source_type = $request->route()->parameter('source_type');
  92. $sourceClassMap = [
  93. 'questions' => 'App\Models\Question',
  94. 'users' => 'App\Models\User',
  95. 'tags' => 'App\Models\Tag',
  96. ];
  97. if(!isset($sourceClassMap[$source_type])){
  98. abort(404);
  99. }
  100. $model = App::make($sourceClassMap[$source_type]);
  101. $attentions = $this->user->attentions()->where('source_type','=',$sourceClassMap[$source_type])->orderBy('attentions.created_at','desc')->paginate(10);
  102. $attentions->map(function($attention) use ($model) {
  103. $attention['info'] = $model::find($attention->source_id);
  104. });
  105. return view('theme::space.attentions')->with('attentions',$attentions)->with('source_type',$source_type);
  106. }
  107. public function collections(Request $request)
  108. {
  109. $source_type = $request->route()->parameter('source_type');
  110. $sourceClassMap = [
  111. 'questions' => 'App\Models\Question',
  112. 'articles' => 'App\Models\Article',
  113. ];
  114. if(!isset($sourceClassMap[$source_type])){
  115. abort(404);
  116. }
  117. $model = App::make($sourceClassMap[$source_type]);
  118. $collections = $this->user->collections()->where('source_type','=',$sourceClassMap[$source_type])->orderBy('collections.created_at','desc')->paginate(10);
  119. $collections->map(function($collection) use ($model) {
  120. $collection['info'] = $model::find($collection->source_id);
  121. });
  122. return view('theme::space.collections')->with('collections',$collections)->with('source_type',$source_type);
  123. }
  124. }