1313class RoomController extends Controller
1414{
1515 public function index ($ id_room ){
16-
16+ $ room = Room::all ()->where ('kode ' , $ id_room )->first ();
17+ if ($ room ->status == 0 ){
18+ # waiting room
19+ }
20+ else if ($ room ->status == 1 ){
21+ $ kumpulan_soal = $ this ->getAllSoalForRoom ($ room );
22+ return view ('room ' , compact ('kumpulan_soal ' ));
23+ }
1724 }
1825
1926 public function create (){
@@ -42,7 +49,6 @@ public function store(Request $request){
4249 return redirect ()->route ('soal ' , $ room ->kode )->with ([
4350 'id_room ' => $ room ->kode
4451 ]);
45- // return redirect('/room/create');
4652 }
4753
4854 public function soal ($ id_room ){
@@ -68,6 +74,11 @@ public function addSoal(Request $request, $id_room){
6874 ]);
6975 }
7076
77+ public function soalFromPaketSoal (Request $ request ){
78+ $ soals = Soal::all ()->where ('paket_id ' , $ request ->paket_id );
79+
80+ }
81+
7182 public function start (Request $ request , $ id_room ){
7283 $ room = Room::all ()->where ('kode ' , $ id_room );
7384 $ room ->status = 1 ;
@@ -76,40 +87,62 @@ public function start(Request $request, $id_room){
7687 }
7788
7889 public function scoreboard ($ id_room ){
79- $ skors = Skor::all ()->where ('room_id ' , $ id_room );
80- $ current_skor = array_map (function ($ skor ) {return array (User::find ($ skor ->user_id )->username => (int )$ skor ->skor );}, $ skors );
81- arsort ($ current_skor );
90+ $ room = Room::all ()->where ('kode ' , $ id_room )->first ();
91+ $ room_id = $ room ->id ;
92+ $ skors = Skor::where ('room_id ' , $ room_id )->orderBy ('skor_user ' , 'desc ' )->get ();
93+ $ current_skor = array ();
94+ foreach ($ skors as $ skor ){
95+ array_push ($ current_skor , array (User::find ($ skor ->user_id )->username => (int )$ skor ->skor_user ));
96+ }
8297 $ data = $ current_skor ;
8398 return view ('scoreboard ' , compact ('data ' ));
8499 }
85100
101+ public function scoreboard_data ($ id_room ){
102+ $ room = Room::all ()->where ('kode ' , $ id_room )->first ();
103+ $ room_id = $ room ->id ;
104+ $ skors = Skor::where ('room_id ' , $ room_id )->orderBy ('skor_user ' , 'desc ' )->get ();
105+ $ current_skor = array ();
106+ foreach ($ skors as $ skor ){
107+ array_push ($ current_skor , array (User::find ($ skor ->user_id )->username => (int )$ skor ->skor_user ));
108+ }
109+ $ data = $ current_skor ;
110+ return compact ('data ' );
111+ }
112+
86113 public function submit (Request $ request ){
87114 $ jawaban = new Jawaban ();
88115 $ jawaban ->soal_id = $ request ->soal_id ;
89116 $ jawaban ->user_id = $ request ->user_id ;
90117 $ jawaban ->jawaban = $ request ->jawaban ;
91118 $ jawaban ->save ();
92- $ this ->updateScoreBoard ($ request );
119+ $ benar = $ this ->updateScoreBoard ($ request );
93120 //broadcast
121+ return redirect ()->route ('room.scoreboard ' , ['id_room ' => $ request ->id_room ])->with ([
122+ 'benar ' => $ benar
123+ ]);
94124 }
95125
96126 private function updateScoreBoard ($ request ){
97127 $ soal = Soal::all ()->find ($ request ->soal_id );
98128 $ score = 0 ;
129+ $ benar = 0 ;
99130 if ($ request ->jawaban == $ soal ->jawaban ){
100- $ remaining_time = 300 - $ request ->elapsed_time ;
101- $ percentage = $ remaining_time /300 ;
131+ $ remaining_time = 15 - $ request ->elapsed_time ;
132+ $ percentage = $ remaining_time /15 ;
102133 $ score = 100 * $ percentage ;
134+ $ benar = 1 ;
103135 }
104136 $ skor = $ this ->checkIfScoreExisted ($ request ->room_id , $ request ->user_id );
137+ $ room = Room::all ()->where ('kode ' , $ request ->id_room )->first ();
105138 if (!$ skor ){
106139 $ skor = new Skor ();
107140 $ skor ->user_id = $ request ->user_id ;
108- $ skor ->room_id = $ request -> room_id ;
141+ $ skor ->room_id = $ room -> id ;
109142 $ skor ->skor_user = 0 ;
110143 }
111144 $ skor ->skor_user = $ skor ->skor_user + $ score ;
112-
145+ return $ benar ;
113146 }
114147
115148 private function checkIfScoreExisted ($ room_id , $ user_id ){
@@ -131,4 +164,31 @@ private function generateRandomString($length=10){
131164 }
132165 return $ randomString ;
133166 }
167+
168+ private function getAllSoalForRoom ($ room ){
169+ $ paket_soal = $ room ->paket_id ;
170+ $ paket_soal = explode ('| ' , $ paket_soal );
171+ $ kumpulan_soal = array ();
172+ foreach ($ paket_soal as $ paket ){
173+ $ kumpulan_soal = array_merge ($ kumpulan_soal , $ this ->getSoalFromPaket ($ paket ));
174+ }
175+ return $ kumpulan_soal ;
176+ }
177+
178+ private function getSoalFromPaket ($ id_paket ){
179+ $ soals = Soal::all ()->where ('paket_id ' , $ id_paket );
180+ $ kumpulan_soal = array ();
181+ foreach ($ soals as $ soal ){
182+ array_push ($ kumpulan_soal , $ this ->translateSoal ($ soal ));
183+ }
184+ return $ kumpulan_soal ;
185+ }
186+
187+ private function translateSoal ($ soal ){
188+ $ translated = array (
189+ 'soal ' => $ soal ->soal ,
190+ 'jawaban ' => unserialize ($ soal ->pilihan )
191+ );
192+ return $ translated ;
193+ }
134194}
0 commit comments