IndexController.php 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201
  1. <?php
  2. namespace App\Http\Controllers\Home;
  3. use App\Models\Article;
  4. use App\Models\ArticleTag;
  5. use App\Models\Chat;
  6. use App\Models\Comment;
  7. use App\Models\OauthUser;
  8. use App\Models\Tag;
  9. use Illuminate\Http\Request;
  10. use App\Http\Controllers\Controller;
  11. class IndexController extends Controller
  12. {
  13. /**
  14. * 首页
  15. *
  16. * @param Article $articleModel
  17. * @return mixed
  18. */
  19. public function index(Article $articleModel)
  20. {
  21. $article = $articleModel->getHomeList();
  22. $assign = [
  23. 'category_id' => 'index',
  24. 'article' => $article,
  25. 'tagName' => ''
  26. ];
  27. return view('home/index/index', $assign);
  28. }
  29. /**
  30. * 文章详情
  31. *
  32. * @param $id
  33. * @param Article $article
  34. * @param Comment $commentModel
  35. * @return mixed
  36. */
  37. public function article($id, Article $article, Comment $commentModel)
  38. {
  39. // 获取文章数据
  40. $data = $article->getDataById($id);
  41. echo $data->markdown;die;
  42. // 获取上一篇
  43. $prev = $article
  44. ->select('id', 'title')
  45. ->orderBy('created_at', 'asc')
  46. ->where('id', '>', $id)
  47. ->limit(1)
  48. ->first();
  49. // 获取下一篇
  50. $next = $article
  51. ->select('id', 'title')
  52. ->orderBy('created_at', 'desc')
  53. ->where('id', '<', $id)
  54. ->limit(1)
  55. ->first();
  56. // 获取评论
  57. $comment = $commentModel->getDataByArticleId($id);
  58. $assign = [
  59. 'category_id' => $data->category_id,
  60. 'data' => $data,
  61. 'prev' => $prev,
  62. 'next' => $next,
  63. 'comment' => $comment
  64. ];
  65. return view('home/index/article', $assign);
  66. }
  67. /**
  68. * 获取栏目下的文章
  69. *
  70. * @param Article $articleModel
  71. * @param $id
  72. * @return mixed
  73. */
  74. public function category(Article $articleModel, $id)
  75. {
  76. $map = [
  77. 'articles.category_id' => $id
  78. ];
  79. $article = $articleModel->getHomeList($map);
  80. $assign = [
  81. 'category_id' => $id,
  82. 'article' => $article,
  83. 'tagName' => ''
  84. ];
  85. return view('home/index/index', $assign);
  86. }
  87. /**
  88. * 获取标签下的文章
  89. *
  90. * @param $id
  91. * @param Article $articleModel
  92. * @return mixed
  93. */
  94. public function tag($id, Article $articleModel)
  95. {
  96. // 获取标签名
  97. $tagName = Tag::where('id', $id)->value('name');
  98. // 获取此标签下的文章id
  99. $articleIds = ArticleTag::where('tag_id', $id)
  100. ->pluck('article_id')
  101. ->toArray();
  102. // 获取文章数据
  103. $map = [
  104. 'articles.id' => ['in', $articleIds]
  105. ];
  106. $article = $articleModel->getHomeList($map);
  107. $assign = [
  108. 'category_id' => 'index',
  109. 'article' => $article,
  110. 'tagName' => $tagName
  111. ];
  112. return view('home/index/index', $assign);
  113. }
  114. /**
  115. * 随言碎语
  116. *
  117. * @return mixed
  118. */
  119. public function chat()
  120. {
  121. $chat = Chat::orderBy('created_at', 'desc')->get();
  122. $assign =[
  123. 'category_id' => 'chat',
  124. 'chat' => $chat
  125. ];
  126. return view('home/index/chat', $assign);
  127. }
  128. /**
  129. * 开源项目
  130. *
  131. * @return mixed
  132. */
  133. public function git()
  134. {
  135. $assign = [
  136. 'category_id' => 'git'
  137. ];
  138. return view('home/index/git', $assign);
  139. }
  140. /**
  141. * 文章评论
  142. *
  143. * @param Comment $commentModel
  144. */
  145. public function comment(Comment $commentModel, OauthUser $oauthUserModel)
  146. {
  147. $data = request()->all();
  148. if (empty($data['content'])) {
  149. die('内容不能为空');
  150. }
  151. if (empty(session('user.id'))) {
  152. die('未登录');
  153. }
  154. // 如果用户输入邮箱;则将邮箱记录入oauth_user表中
  155. $pattern = "/^([0-9A-Za-z\\-_\\.]+)@([0-9a-z]+\\.[a-z]{2,3}(\\.[a-z]{2})?)$/i";
  156. if (preg_match($pattern, $data['email'])) {
  157. // 获取用户id
  158. $user_id = session('user.id');
  159. // 修改邮箱
  160. $oauthUserMap = [
  161. 'id' => $user_id
  162. ];
  163. $oauthUserData = [
  164. 'email' => $data['email']
  165. ];
  166. $oauthUserModel->editData($oauthUserMap, $oauthUserData);
  167. session(['user.email' => $data['email']]);
  168. unset($data['email']);
  169. }
  170. // 存储评论
  171. $id = $commentModel->addData($data);
  172. echo $id;
  173. }
  174. /**
  175. * 检测是否登录
  176. */
  177. public function checkLogin()
  178. {
  179. if (empty(session('user.id'))) {
  180. return 0;
  181. } else {
  182. return 1;
  183. }
  184. }
  185. }