@@ -29,6 +29,14 @@ public function index(Request $request)
2929 $ servers = ModuleServerSetting::all ();
3030 return view ('k4Ranks.list ' , compact ('servers ' ));
3131 }
32+
33+ public function playtime (Request $ request )
34+ {
35+ $ serverId = $ request ->query ('server_id ' );
36+ ModuleHelper::useConnection ('Ranks ' , $ serverId );
37+ $ servers = ModuleServerSetting::all ();
38+ return view ('k4Ranks.playtime ' , compact ('servers ' ));
39+ }
3240 public function getPlayersList (Request $ request )
3341 {
3442 ModuleHelper::useConnection ('Ranks ' );
@@ -171,6 +179,105 @@ public function getPlayersList(Request $request)
171179 ]);
172180 }
173181
182+ public function getPlaytimeList (Request $ request )
183+ {
184+ ModuleHelper::useConnection ('Ranks ' );
185+
186+ $ start = $ request ->input ('start ' );
187+ $ length = $ request ->input ('length ' );
188+ $ searchValue = $ request ->input ('search.value ' );
189+ $ orderColumn = $ request ->input ('order.0.column ' );
190+ $ orderDirection = $ request ->input ('order.0.dir ' );
191+
192+ $ query = ZenithPlayerStorage::selectRaw ('*, (SELECT COUNT(*) + 1 FROM zenith_player_storage AS zps WHERE CAST(JSON_EXTRACT(zps.`K4-Zenith-TimeStats.storage`, "$.TotalPlaytime") AS UNSIGNED) > CAST(JSON_EXTRACT(zenith_player_storage.`K4-Zenith-TimeStats.storage`, "$.TotalPlaytime") AS UNSIGNED)) AS `position` ' );
193+
194+ if (!empty ($ searchValue )) {
195+ $ query ->where ('steam_id ' , 'like ' , '% ' . $ searchValue . '% ' )
196+ ->orWhere ('name ' , 'like ' , '% ' . $ searchValue . '% ' );
197+ }
198+
199+ if ($ orderColumn !== null ) {
200+ $ columnName = $ request ->input ('columns. ' . $ orderColumn . '.data ' );
201+ switch ($ columnName ) {
202+ case 'playtime ' :
203+ $ query ->orderByRaw ('CAST(JSON_UNQUOTE(JSON_EXTRACT(`K4-Zenith-TimeStats.storage`, "$.TotalPlaytime")) AS UNSIGNED) ' . $ orderDirection );
204+ break ;
205+ case 'kills ' :
206+ $ query ->orderByRaw ('CAST(JSON_UNQUOTE(JSON_EXTRACT(`K4-Zenith-Stats.storage`, "$.Kills")) AS UNSIGNED) ' . $ orderDirection );
207+ break ;
208+ case 'deaths ' :
209+ $ query ->orderByRaw ('CAST(JSON_UNQUOTE(JSON_EXTRACT(`K4-Zenith-Stats.storage`, "$.Deaths")) AS UNSIGNED) ' . $ orderDirection );
210+ break ;
211+ case 'assists ' :
212+ $ query ->orderByRaw ('CAST(JSON_UNQUOTE(JSON_EXTRACT(`K4-Zenith-Stats.storage`, "$.Assists")) AS UNSIGNED) ' . $ orderDirection );
213+ break ;
214+ case 'headshots ' :
215+ $ query ->orderByRaw ('CAST(JSON_UNQUOTE(JSON_EXTRACT(`K4-Zenith-Stats.storage`, "$.Headshots")) AS UNSIGNED) ' . $ orderDirection );
216+ break ;
217+ case 'rounds_ct ' :
218+ $ query ->orderByRaw ('CAST(JSON_UNQUOTE(JSON_EXTRACT(`K4-Zenith-Stats.storage`, "$.RoundsCT")) AS UNSIGNED) ' . $ orderDirection );
219+ break ;
220+ case 'rounds_t ' :
221+ $ query ->orderByRaw ('CAST(JSON_UNQUOTE(JSON_EXTRACT(`K4-Zenith-Stats.storage`, "$.RoundsT")) AS UNSIGNED) ' . $ orderDirection );
222+ break ;
223+ case 'rounds_overall ' :
224+ $ query ->orderByRaw ('(CAST(JSON_UNQUOTE(JSON_EXTRACT(`K4-Zenith-Stats.storage`, "$.RoundsCT")) AS UNSIGNED) + CAST(JSON_UNQUOTE(JSON_EXTRACT(`K4-Zenith-Stats.storage`, "$.RoundsT")) AS UNSIGNED)) ' . $ orderDirection );
225+ break ;
226+ case 'games_won ' :
227+ $ query ->orderByRaw ('CAST(JSON_UNQUOTE(JSON_EXTRACT(`K4-Zenith-Stats.storage`, "$.GameWin")) AS UNSIGNED) ' . $ orderDirection );
228+ break ;
229+ case 'games_lost ' :
230+ $ query ->orderByRaw ('CAST(JSON_UNQUOTE(JSON_EXTRACT(`K4-Zenith-Stats.storage`, "$.GameLose")) AS UNSIGNED) ' . $ orderDirection );
231+ break ;
232+ case 'position ' :
233+ $ query ->orderBy ('position ' , $ orderDirection );
234+ break ;
235+ default :
236+ $ query ->orderBy ($ columnName , $ orderDirection );
237+ break ;
238+ }
239+ } else {
240+ $ query ->orderByRaw ('CAST(JSON_UNQUOTE(JSON_EXTRACT(`K4-Zenith-TimeStats.storage`, "$.TotalPlaytime")) AS UNSIGNED) DESC ' );
241+ }
242+
243+ $ players = $ query ->offset ($ start )->limit ($ length )->get ();
244+
245+ $ formattedData = [];
246+ foreach ($ players as $ player ) {
247+ $ playerData = $ player ['K4-Zenith-Stats.storage ' ];
248+ $ playerRank = $ player ['K4-Zenith-Ranks.storage ' ];
249+ $ playerTime = $ player ['K4-Zenith-TimeStats.storage ' ];
250+ $ player ->player_steamid = $ player ->steam_id ;
251+ $ response = CommonHelper::steamProfile ($ player );
252+ $ serverId = Crypt::encrypt (Session::get ('Ranks_server ' ));
253+ $ formattedData [] = [
254+ "profile " => env ('VITE_SITE_DIR ' )."/ranks/profile/ $ player ->player_steamid / $ serverId " ,
255+ "position " => $ player ->position ,
256+ "name " => !empty ($ response ['response ' ]['players ' ][0 ]['personaname ' ]) ? $ response ['response ' ]['players ' ][0 ]['personaname ' ] : 'Profile ' ,
257+ "player_steamid " => $ player ->steam_id ,
258+ "playtime " => number_format (CarbonInterval::minutes ($ playerTime ['TotalPlaytime ' ] ?? 0 )->totalHours , 2 ),
259+ "kills " => $ playerData ['Kills ' ] ?? 0 ,
260+ "deaths " => $ playerData ['Deaths ' ] ?? 0 ,
261+ "assists " => $ playerData ['Assists ' ] ?? 0 ,
262+ "headshots " => $ playerData ['Headshots ' ] ?? 0 ,
263+ "rounds_ct " => $ playerData ['RoundsCT ' ] ?? 0 ,
264+ "rounds_t " => $ playerData ['RoundsT ' ] ?? 0 ,
265+ "rounds_overall " => ($ playerData ['RoundsCT ' ] ?? 0 ) + ($ playerData ['RoundsT ' ] ?? 0 ),
266+ "games_won " => $ playerData ['GameWin ' ] ?? 0 ,
267+ "games_lost " => $ playerData ['GameLose ' ] ?? 0 ,
268+ "avatar " => !empty ($ response ['response ' ]['players ' ][0 ]['avatar ' ]) ? $ response ['response ' ]['players ' ][0 ]['avatar ' ] : 'https://mdbootstrap.com/img/Photos/Avatars/img(32).jpg ' ,
269+ "last_seen " => Carbon::parse ($ player ->last_online ?? now ())->diffForHumans (),
270+ ];
271+ }
272+
273+ return response ()->json ([
274+ 'draw ' => $ request ->input ('draw ' ),
275+ "recordsTotal " => ZenithPlayerStorage::count (),
276+ "recordsFiltered " => !empty ($ searchValue ) ? count ($ formattedData ) : ZenithPlayerStorage::count (),
277+ "data " => $ formattedData
278+ ]);
279+ }
280+
174281 public function viewProfile (Request $ request , $ steam_id , $ server_id ) {
175282 ModuleHelper::useConnection ('Ranks ' ,$ server_id );
176283 $ player = ZenithPlayerStorage::where ('steam_id ' , $ steam_id )->firstOrFail ();
0 commit comments