WroteitController.php 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162
  1. <?php
  2. namespace App\Http\Controllers;
  3. use App\Models\Topic;
  4. use App\Models\Post;
  5. use App\Models\Message;
  6. use App\Models\User;
  7. use App\Models\SubtopicModerator;
  8. use App\Models\SubtopicSubscriber;
  9. use Auth;
  10. use Carbon\Carbon;
  11. use App\Http\Requests\NewMessageRequest;
  12. use App\Http\Requests\NewSubtopicRequest;
  13. use App\Http\Requests\NewSubtopicModeratorRequest;
  14. use Illuminate\Http\Request;
  15. class WroteitController extends Controller
  16. {
  17. // Views call and stuff
  18. public function main(){
  19. if(Auth::check()){
  20. $subbed = SubtopicSubscriber::select('subtopic')->where('subscriber_id',Auth::user()->id);
  21. $posts = Post::orderby('updated_at','desc')->whereIn('subwroteit',$subbed)->get();
  22. }
  23. else{
  24. $posts = Post::orderby('updated_at','desc')->get();
  25. }
  26. $posts = Post::orderby('updated_at','desc')->get();
  27. return view('wroteit.main')->with(['posts' => $posts]);
  28. }
  29. public function show_topic(string $sub){
  30. $topic = Topic::where('title',$sub)->first();
  31. $posts = Post::where('subwroteit',$sub)->get();
  32. $not_subbed = false;
  33. $not_moderator = false;
  34. if(Auth::check()){
  35. $isSubbed = SubtopicSubscriber::where('subscriber_id', '=', Auth::user()->id)->where('subtopic',$sub)->first();
  36. if(is_null($isSubbed)){
  37. $not_subbed = true;
  38. }
  39. }
  40. if(Auth::check()){
  41. $isModerator = SubtopicModerator::where('moderator_id','=',Auth::user()->id)->where('subtopic',$sub)->first();
  42. if(is_null($isModerator)){
  43. $not_moderator = true;
  44. }
  45. }
  46. return view('wroteit.show_topic')->with(['topic' => $topic])->with(['posts' => $posts])->with(['not_subbed' => $not_subbed])->with(['not_moderator' => $not_moderator]);
  47. }
  48. public function messages_main(){
  49. return view('wroteit.messages');
  50. }
  51. public function messages_receive(){
  52. $messages = Message::orderby('created_at','desc')->paginate(10);
  53. return view('wroteit.receive_messages')->with(['messages' => $messages]);
  54. }
  55. public function show_message(Message $mes){ // for received messages
  56. if(Auth::check()){
  57. if(Auth::user()->id == $mes->to_id){ // if the user can see this mail it goes with no problem
  58. return view('wroteit.show_message')->with(['message' => $mes]);
  59. }else{ // if it is not supposed to see it, he's redirected to the main page
  60. $topics = Topic::orderby('updated_at','desc')->paginate(6);
  61. return redirect()->route('main')->with(['topics' => $topics]);
  62. }
  63. }else{
  64. $topics = Topic::orderby('updated_at','desc')->paginate(6);
  65. return redirect()->route('main')->with(['topics' => $topics]);
  66. }
  67. }
  68. public function messages_send(){
  69. $messages = Message::orderby('created_at','desc')->paginate(10);
  70. return view('wroteit.send_messages')->with(['messages' => $messages]);
  71. }
  72. public function show_message2(Message $mes){ // for send messages
  73. if(Auth::check()){
  74. if(Auth::user()->id == $mes->from_id){ // if the user can see this mail it goes with no problem
  75. return view('wroteit.show_message2')->with(['message' => $mes]);
  76. }else{ // if it is not supposed to see it, he's redirected to the main page
  77. $topics = Topic::orderby('updated_at','desc')->paginate(6);
  78. return redirect()->route('main')->with(['topics' => $topics]);
  79. }
  80. }else{
  81. $topics = Topic::orderby('updated_at','desc')->paginate(6);
  82. return redirect()->route('main')->with(['topics' => $topics]);
  83. }
  84. }
  85. public function new_message(){
  86. $users = User::where('id', '!=', auth()->id())->get();
  87. return view('wroteit.send_message_to')->with(['users' => $users]);
  88. }
  89. public function store_new_message(NewMessageRequest $request){
  90. $mes = Message::create($request->only('title','body','from_id','to_id','created_at','updated_at'));
  91. return redirect()->route('show_message2',['mes'=>$mes->id]);
  92. }
  93. public function new_subtopic(){
  94. $subtopics = Topic::orderby('created_at','desc');
  95. return view('wroteit.new_subtopic')->with(['subtopics' => $subtopics]);
  96. }
  97. public function store_new_subtopic(NewSubtopicRequest $request){
  98. if(Auth::check()){
  99. Topic::create($request->only('title','description','posts_number','subscriptions','created_at','updated_at'));
  100. $subtopic_name = $request->input('title');
  101. $user_id = Auth::user()->id;
  102. $this->store_relation_subtopicModerator($subtopic_name, $user_id);
  103. $this->store_relation_subtopicSubscriber($subtopic_name, $user_id);
  104. return redirect()->route('main');
  105. }
  106. }
  107. public function store_relation_subtopicModerator($subtopic_name, $user_id){
  108. $rel = array('subtopic' => $subtopic_name, 'moderator_id' => $user_id);
  109. SubtopicModerator::create($rel);
  110. }
  111. public function store_relation_subtopicSubscriber($subtopic_name, $user_id){
  112. $rel = array('subtopic' => $subtopic_name, 'subscriber_id' => $user_id);
  113. SubtopicSubscriber::create($rel);
  114. }
  115. public function add_moderator(string $sub){
  116. $mods = SubtopicModerator::select('moderator_id')->where('subtopic','=',$sub)->get();
  117. $not_mods = User::whereNotIn('id', $mods)->get();
  118. return view('wroteit.new_mod')->with(['subtopic'=>$sub])->with(['not_mods'=>$not_mods]);
  119. }
  120. public function store_moderator(NewSubtopicModeratorRequest $request){
  121. SubtopicModerator::create($request->only('subtopic','moderator_id'));
  122. $subtopic_name = $request->input('subtopic');
  123. return redirect()->route('main');
  124. }
  125. // Static methods for injection
  126. public static function getSender(Message $mes){
  127. return User::find($mes->from_id);
  128. }
  129. public static function getReceiver(Message $mes){
  130. return User::find($mes->to_id);
  131. }
  132. public static function getCurrentTimeStamp(){
  133. return Carbon::now(); // the Carbon model is implemented with Laravel. It gives a ton of stuff to manage timestamps=>useful
  134. }
  135. }