Advertisement
Guest User

mm

a guest
Mar 26th, 2019
88
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 45.94 KB | None | 0 0
  1. <?php
  2.  
  3. namespace App\Http\Controllers;
  4.  
  5. use App\Jobs\SendMatchReport;
  6. use Illuminate\Http\Request;
  7. use Carbon\Carbon;
  8. use Datatables;
  9. use App\League;
  10. use App\Fee;
  11.  
  12. class MatchManagerController extends Controller
  13. {
  14. public function __construct()
  15. {
  16. $this->middleware('matchmanager');
  17. }
  18.  
  19. public function index() {
  20. $teams = \App\Team::all();
  21. $users = \App\User::all();
  22. $match = \App\Match::all();
  23. $leagues = \App\League::ongoing()->orderBy('created_at', 'desc')->get();
  24. $types = \App\GameType::all();
  25. return view('admin.matchmanager', compact('teams', 'leagues', 'match', 'types'));
  26. }
  27.  
  28. public function editMatchManagerBet(Request $request) {
  29. $rules = [
  30. 'betid' => 'required'
  31. ];
  32. $validator = \Validator::make($request->all(), $rules);
  33. if ($validator->passes()) {
  34. $bet = \App\Bet::find($request->betid);
  35. $user = \Auth::user();
  36. if($bet) {
  37. $deduct_amount = $request->bet_amount - $bet->amount;
  38. $bet->amount = $request->bet_amount;
  39. $bet->save();
  40.  
  41. // Add to bet history
  42. \App\BetHistory::create([
  43. 'type' => 'update',
  44. 'match_id' => $bet->match_id,
  45. 'bet_id' => $bet->id,
  46. 'amount' => $request->bet_amount,
  47. 'user_id' => $user->id,
  48. 'curr_credits' => $user->credits
  49. ]);
  50.  
  51. $user->credits -= $deduct_amount;
  52. $user->save();
  53. return ['success' => true];
  54. }
  55. } else
  56. return ['success' => false, 'errors' => $validator->errors()];
  57. }
  58.  
  59. public function getAllTeams() {
  60. return Datatables::of(\App\Team::all())->make(true);
  61. }
  62.  
  63. public function showRawTeamsType(League $league) {
  64. if ($league->exists) {
  65. $league_teams = $league->teams;
  66. $teams = $league_teams->where('type', 'tbd')->count() ? $league_teams :
  67. $league_teams->merge(\App\Team::type('tbd')->get());
  68. return $league->exists ? $teams : [];
  69. }
  70. }
  71.  
  72. public function cancelAdminBet(Request $request) {
  73. $bet = \App\Bet::find($request->betid);
  74. if ($bet) {
  75. $bet->delete();
  76. return ['success' => true];
  77. } else
  78. return ['error' => 'This bet DOES not exist! Incident has been reported to Admins.'];
  79. }
  80.  
  81. public function listGameTypes() {
  82. return Datatables::of(\App\GameType::all())->make(true);
  83. }
  84.  
  85. public function addEditGameTypes(Request $request) {
  86. $rules = [
  87. 'name' => 'required|alpha_num|unique:game_types,name,'.$request->type_id,
  88. 'description' => 'required'
  89. ];
  90.  
  91. $validator = \Validator::make($request->all(), $rules);
  92. if ($validator->passes()) {
  93. $type = \App\GameType::find($request->type_id);
  94. if($type) {
  95. $type->fill($request->all());
  96. $type->save();
  97. } else
  98. $type = \App\GameType::create($request->all());
  99. return ['success' => true, 'type' => $type];
  100. } else
  101. return ['success' => false, 'errors' => $validator->errors()];
  102. }
  103.  
  104. public function delGameTypes(Request $request) {
  105. $type = \App\GameType::find($request->type_id);
  106. if(\App\Team::where('type', $type->name)->count()) {
  107. return ['error' => 'Could not delete type. Currently being used by teams'];
  108. } else
  109. $type->delete();
  110. return ['success' => true];
  111. }
  112.  
  113. public function getAllTeamsRaw() {
  114. return \App\Team::all();
  115. }
  116.  
  117. public function setFavoriteTeam(Request $request) {
  118. $league = League::find($request->league_id);
  119. $league->teams()->updateExistingPivot($request->team_id, [
  120. 'is_favorite' => $request->favopt
  121. ]);
  122. }
  123.  
  124. public function getOngoingLeagues() {
  125. return League::ongoing()->orderBy('created_at', 'desc')->get();
  126. }
  127.  
  128. public function setLeagueStatus(Request $request) {
  129. $league = League::find($request->league_id);
  130. if ($league) {
  131. switch ($request->type) {
  132. case 'inactive':
  133. $league->status = 0;
  134. break;
  135. case 'undo_inactive':
  136. $league->status = 1;
  137. break;
  138. case 'expire':
  139. if($league->matches()->activeMatches()->count())
  140. return ['error' => 'Could not process request. There are still active matches for this League.'];
  141. else
  142. $league->expired = 1;
  143. break;
  144. case 'undo_expire':
  145. $league->expired = 0;
  146. break;
  147. }
  148. $league->save();
  149. return ['success' => true];
  150. } else {
  151. return ['error' => 'Could not process request. Please try again'];
  152. }
  153. }
  154.  
  155. public function addEditTeams(Request $request) {
  156. $rules = [
  157. 'name' => 'required',
  158. 'shortname' => 'required|max:20',
  159. 'type' => 'required',
  160. 'image' => $request->team_id ? 'image|mimes:jpeg,png,jpg,gif,svg|max:2048' : 'required|image|mimes:jpeg,png,jpg,gif,svg|max:2048',
  161. ];
  162.  
  163. $validator = \Validator::make($request->all(), $rules);
  164. if ($validator->passes()) {
  165. $team = $request->team_id ? \App\Team::find($request->team_id) : new \App\Team;
  166. $team->name = $request->name;
  167. $team->shortname = $request->shortname;
  168. $team->type = $request->type;
  169. if ($request->image) {
  170. $image_file = time() . '.' . $request->image->getClientOriginalExtension();
  171. $request->image->move(storage_path('uploads'), $image_file);
  172. $team->image = 'public_image/' . $image_file;
  173. }
  174. $team->save();
  175. return ['success' => true, 'team' => $team];
  176. } else
  177. return ['succss' => false, 'errors' => $validator->errors()];
  178. }
  179.  
  180. public function deleteTeam(Request $request) {
  181. $team = \App\Team::find($request->team_id);
  182. if ($team->matches()->count() == 0) {
  183. $team->delete();
  184. return ['success' => true];
  185. } else
  186. return ['success' => false, 'error' => 'This team already exists on some matches and cannot be deleted.'];
  187. }
  188.  
  189. public function addEditLeagues(Request $request) {
  190. $validator = \Validator::make($request->all(), [
  191. 'name' => 'required',
  192. 'description' => 'required',
  193. 'type' => 'required',
  194. 'teams' => 'nullable|array',
  195. 'image' => $request->league_id ? 'image|mimes:jpeg,png,jpg,gif,svg|max:2048' : 'required|image|mimes:jpeg,png,jpg,gif,svg|max:2048',
  196. 'bottom_image' => $request->league_id ? 'image|mimes:jpeg,png,jpg,gif,svg|max:2048' : 'required|image|mimes:jpeg,png,jpg,gif,svg|max:2048',
  197. ]);
  198.  
  199. if ($validator->passes()) {
  200.  
  201. $input = $request->all();
  202. if ($request->image) {
  203. $input['image'] = time() . '.' . $request->image->getClientOriginalExtension();
  204. $request->image->move(storage_path('uploads'), $input['image']);
  205. }
  206. if ($request->bottom_image) {
  207. $input['bottom_image'] = time() . '.' . $request->bottom_image->getClientOriginalExtension();
  208. $request->bottom_image->move(storage_path('uploads'), $input['bottom_image']);
  209. }
  210.  
  211. if ($request->league_id) {
  212. $league = \App\League::find($request->league_id);
  213. if ($league->betting_status != -1) {
  214. $league->type = $request->type;
  215. $league->name = $request->name;
  216. $league->description = $request->description;
  217. $league->status = $request->status;
  218. $league->favorites_minimum = $request->favorites_minimum;
  219. $league->betting_status = $request->betting_status;
  220. if($request->expired && $league->matches()->activeMatches()->count())
  221. return ['error' => ['There are active matches for this league and cannot set to expire!']];
  222. else
  223. $league->expired = $request->expired;
  224. $league->betting_fee = $request->betting_fee / 100;
  225. if ($request->image)
  226. $league->image = $input['image'];
  227. if ($request->bottom_image)
  228. $league->bottom_image = 'public_image/' . $input['bottom_image'];
  229. $league->save();
  230. $league->teams()->sync($request->teams);
  231.  
  232. // Remove admin bets if betting is closed
  233. if ($league->betting_status == 0) {
  234. foreach ($league->bets as $bet) {
  235. if (hasMatchManagementAccess($bet->user))
  236. \App\Bet::find($bet->id)->delete();
  237. }
  238. }
  239. }
  240. } else {
  241. $league = \App\League::create([
  242. 'type' => $request->type,
  243. 'name' => $request->name,
  244. 'description' => $request->description,
  245. 'image' => $input['image'],
  246. 'league_winner' => 0
  247. ]);
  248. if ($request->bottom_image)
  249. $league->bottom_image = 'public_image/' . $input['bottom_image'];
  250. $league->status = $request->status;
  251. $league->betting_status = $request->betting_status;
  252. $league->favorites_minimum = $request->favorites_minimum;
  253. $league->save();
  254. $league->teams()->sync($request->teams);
  255. }
  256.  
  257. return ['success' => 'done'];
  258. }
  259.  
  260. return response()->json(['error' => $validator->errors()->all()]);
  261. }
  262.  
  263. public function deleteLeagues(Request $request) {
  264. $league = \App\League::find($request->league_id);
  265. if ($league->bets->count()) {
  266. return ['error' => 'There are matches/bets linked to this league and cannot be deleted.'];
  267. } else
  268. return ['league' => $league->delete()];
  269. }
  270.  
  271. public function listLeagues(Request $request) {
  272. $dt = Datatables::of(\App\League::all()->load('teams', 'champion'));
  273. $dt->addColumn('btn_options', function($dt) {
  274. $buttons = '';
  275. if ($dt->betting_status == -1) {
  276. if ($dt->status) {
  277. if (!$dt->expired) {
  278. return '<button type="button" class="btn btn-default btn-xs setLeagueStatus" data-sts_type="inactive">Inactive</button> ' .
  279. '<button type="button" class="btn btn-warning btn-xs setLeagueStatus" data-sts_type="expire">Expire</button>';
  280. } else {
  281. if ($dt->updated_at->diffInMinutes(Carbon::now()) < 60)
  282. return '<button type="button" class="btn btn-default btn-xs setLeagueStatus" data-sts_type="inactive">Inactive</button> ' .
  283. '<button type="button" class="btn btn-info btn-xs setLeagueStatus" data-sts_type="undo_expire">Undo Expire</button>';
  284. else
  285. return '<button type="button" class="btn btn-default btn-xs setLeagueStatus" data-sts_type="inactive">Inactive</button>';
  286. }
  287. } else {
  288. if (!$dt->expired) {
  289. if ($dt->updated_at->diffInMinutes(Carbon::now()) < 60)
  290. return '<button type="button" class="btn btn-success btn-xs setLeagueStatus" data-sts_type="undo_inactive">Set Active</button> ' .
  291. '<button type="button" class="btn btn-warning btn-xs setLeagueStatus" data-sts_type="expire">Expire</button>';
  292. else
  293. return '<button type="button" class="btn btn-warning btn-xs setLeagueStatus" data-sts_type="expire">Expire</button>';
  294. } else {
  295. if ($dt->updated_at->diffInMinutes(Carbon::now()) < 60)
  296. return '<button type="button" class="btn btn-success btn-xs setLeagueStatus" data-sts_type="undo_inactive">Set Active</button> ' .
  297. '<button type="button" class="btn btn-info btn-xs setLeagueStatus" data-sts_type="undo_expire">Undo Expire</button>';
  298. else
  299. return '';
  300. }
  301. }
  302. } else {
  303. return '';
  304. }
  305. });
  306. return $dt->make(true);
  307. }
  308.  
  309. public function listMatches(Request $request) {
  310. return Datatables::of(\App\Match::mainMatches()->schedNameSort()->get()->load('league', 'teamA', 'teamB', 'teamwinner'))->make(true);
  311. }
  312.  
  313. public function showSubMatches(\App\Match $mainmatch) {
  314. if($mainmatch) {
  315. if($mainmatch->type == 'main') {
  316. $sub_matches = $mainmatch->subMatches;
  317. $sub_matches = $sub_matches->prepend($mainmatch);
  318. return $sub_matches;
  319. } else
  320. return [];
  321. } else
  322. return [];
  323. }
  324.  
  325. public function addEditMatches(Request $request) {
  326. $validator = \Validator::make($request->all(), [
  327. 'league_id' => 'required',
  328. 'schedule' => 'required|date',
  329. 'best_of' => 'required',
  330. 'team_a' => 'sometimes|required',
  331. 'team_b' => 'sometimes|required'
  332. ]);
  333.  
  334. if ($validator->passes()) {
  335. $input = $request->all();
  336. $input['schedule'] = date('Y-m-d H:i:s', strtotime($request->schedule));
  337. $input['fee'] = ($request->fee / 100);
  338. if ($request->match_id) {
  339. $match = \App\Match::find($request->match_id);
  340. if ($match->status == 'open') {
  341. $match->fill($input);
  342. $match->save();
  343.  
  344. // Update teams on sub-matches
  345. foreach($match->subMatches as $subMatch) {
  346. $subMatch->name = str_replace([$subMatch->teamA->name, $subMatch->teamB->name], [$match->teamA->name, $match->teamB->name], $subMatch->name);
  347. $subMatch->team_a = $match->team_a;
  348. $subMatch->team_b = $match->team_b;
  349. $subMatch->save();
  350. }
  351.  
  352. if (in_array($request->status, ['cancelled', 'forfeit'])) {
  353. foreach ($match->bets as $bet) {
  354. $user = $bet->user;
  355. $user->credits += $bet->amount;
  356. $user->save();
  357. }
  358.  
  359. // Cancel all bets from existing sub-matches
  360. foreach($match->subMatches as $subMatch) {
  361. foreach ($subMatch->bets as $bet) {
  362. $user = $bet->user;
  363. $user->credits += $bet->amount;
  364. $user->save();
  365. }
  366. $subMatch->status = $request->status;
  367. $subMatch->save();
  368. }
  369. $match->status = $request->status;
  370. $match->save();
  371. }
  372.  
  373. if ($match->status == 'ongoing') {
  374. setupOngoingMatch($match);
  375. }
  376.  
  377. return ['success' => 'done1'];
  378. } else {
  379. return ['error' => [
  380. 'status' => ['Cannot edit match. This Match has already started!']
  381. ]];
  382. }
  383. } else {
  384. $mainmatch = \App\Match::create($input);
  385. if($request->submatches) {
  386. foreach($request->submatches as $sub_match) {
  387. $submatch = \App\SubMatch::create($input);
  388. $submatch->type = 'sub';
  389. $submatch->game_grp = $sub_match['ctr'];
  390. $submatch->sub_type = $sub_match['subtype'];
  391. $submatch->name = $sub_match['name'];
  392. $submatch->label = $sub_match['name'];
  393. if($sub_match['ctr'] > 1)
  394. $submatch->schedule = Carbon::createFromTimeString($request->schedule)
  395. ->addHours($sub_match['ctr']-1);
  396. $submatch->main_match = $mainmatch->id;
  397. $submatch->save();
  398. }
  399. }
  400. return ['success' => 'done'];
  401. }
  402. } else
  403. return ['error' => $validator->errors(), 'data' => $request->all()];
  404. }
  405. //edit match standings (match.blade.php)
  406. public function editMatch(Request $request) {
  407. $validator = \Validator::make($request->all(), [
  408. 'match_id' => 'required',
  409. 'schedule' => 'sometimes|nullable|date'
  410. ]);
  411. if ($validator->passes()) {
  412. $match = \App\Match::find($request->match_id);
  413. if ($match->status == 'open') {
  414. $match->name = $request->name;
  415. $match->label = $request->label;
  416. $match->fee = ($request->fee / 100);
  417. if($request->status)
  418. $match->status = $request->status;
  419. if($request->schedule)
  420. $match->schedule = date('Y-m-d H:i:s', strtotime($request->schedule));
  421. $match->save();
  422.  
  423. if ($match->status == 'ongoing')
  424. setupOngoingMatch($match);
  425.  
  426. return ['success' => 'done1'];
  427. }
  428. elseif($match->status =='ongoing'){
  429. $match->teama_score = $request->teama_score;
  430. $match->teamb_score = $request->teamb_score;
  431. $match->save();
  432. return ['success' => 'done1'];
  433. }
  434. elseif($match->status =='settled'){
  435. $match->teama_score = $request->teama_score;
  436. $match->teamb_score = $request->teamb_score;
  437. $match->save();
  438. return ['success' => 'done1'];
  439. }
  440. elseif($match->status =='draw'){
  441. $match->teama_score = $request->teama_score;
  442. $match->teamb_score = $request->teamb_score;
  443. $match->save();
  444. return ['success' => 'done1'];
  445. }
  446. } else
  447. return ['error' => $validator->errors(), 'data' => $request->all()];
  448. }
  449. //Edit stream (matchmanager)
  450. public function editStream(Request $request) {
  451. $validator = \Validator::make($request->all(), [
  452. 'match_id' => 'required',
  453. 'schedule' => 'sometimes|nullable|date'
  454. ]);
  455. if ($validator->passes()) {
  456. $match = \App\Match::find($request->match_id);
  457. if ($match->status == 'open') {
  458. if ($match->status == 'ongoing')
  459. setupOngoingMatch($match);
  460.  
  461. return ['success' => 'done1'];
  462. }
  463. elseif($match->status =='ongoing'){
  464. $match->stream_twitch = $request->stream_twitch;
  465. $match->stream_yt = $request->stream_yt;
  466. $match->stream_fb = $request->stream_fb;
  467. $match->save();
  468. return ['success' => 'done1'];
  469. }
  470. } else
  471. return ['error' => $validator->errors(), 'data' => $request->all()];
  472. }
  473. //set match score (matchmanager)
  474. public function editMatchStanding(Request $request) {
  475. $validator = \Validator::make($request->all(), [
  476. ]);
  477.  
  478. if ($validator->passes()) {
  479. $input = $request->all();
  480. $input['teama_score'] = ($request->teama_score);
  481. $input['teamb_score'] = ($request->teamb_score);
  482. if ($request->match_id) {
  483. $match = \App\Match::find($request->match_id);
  484. if ($match->status == 'ongoing') {
  485. $match->fill($input);
  486. $match->save();
  487.  
  488. return ['success' => 'done1'];
  489. }
  490. if ($match->status == 'settled') {
  491. $match->fill($input);
  492. $match->save();
  493.  
  494. return ['success' => 'done1'];
  495. }
  496. }
  497. } else
  498. return ['error' => $validator->errors(), 'data' => $request->all()];
  499. }
  500.  
  501. public function setMatchOpen(Request $request) {
  502. $match = \App\Match::find($request->match_id);
  503. if ($match && $match->status == 'ongoing') {
  504. if (Carbon::now()->diffInMinutes($match->updated_at) <= 10) {
  505. return $this->openOngoingMatch($match);
  506. } else {
  507. if($request->passcode && $request->passcode == env('OVERRIDE_CODE'))
  508. return $this->openOngoingMatch($match);
  509. else
  510. return ['success' => false, 'need_auth' => true, 'error' => 'Cannot open match, please contact admin to override!'];
  511. }
  512. } else
  513. return ['success' => false];
  514. }
  515.  
  516. private function openOngoingMatch(\App\Match $match) {
  517. $match->status = 'open';
  518. $match->re_opened = true;
  519. $match->save();
  520.  
  521. if ($match->type == 'main') {
  522. foreach ($match->subMatches as $subMatch) {
  523. if ($subMatch->status == 'ongoing') {
  524. $subMatch->status = 'open';
  525. $subMatch->re_opened = true;
  526. $subMatch->save();
  527. }
  528. }
  529. } else {
  530. $subMatches = \App\SubMatch::where('main_match', $match->main_match)
  531. ->where('game_grp', $match->game_grp)
  532. ->where('id', '!=', $match->id)->get();
  533. foreach ($subMatches as $submatch) {
  534. if ($submatch->status == 'ongoing') {
  535. $submatch->status = 'open';
  536. $submatch->re_opened = true;
  537. $submatch->save();
  538. }
  539. }
  540. }
  541. return ['success' => true];
  542. }
  543.  
  544. public function extendMatchTime(Request $request) {
  545. $match = \App\Match::find($request->match_id);
  546. if ($match) {
  547. $match->schedule = $match->schedule->addMinutes($request->ext_time);
  548. $match->save();
  549. return ['success' => true];
  550. } else
  551. return ['success' => false, 'data' => $request->all()];
  552. }
  553.  
  554. private function updateBetRatio($betID, $ratio) {
  555. $bet = \App\Bet::find($betID);
  556. $bet->ratio = $ratio;
  557. $bet->save();
  558. }
  559.  
  560. public function deleteMatches(Request $request) {
  561. $match = \App\Match::find($request->match_id);
  562. if ($match->bets->count()) {
  563. return ['error' => 'There are active bets on this match and cannot be deleted.'];
  564. } else {
  565. if ($match->subMatches) {
  566. foreach ($match->subMatches as $subMatch) {
  567. if ($subMatch->bets->count()) {
  568. return ['error' => 'There are active bets on this match and cannot be deleted.'];
  569. }
  570. }
  571. return ['match' => $match->delete()];
  572. } else
  573. return ['match' => $match->delete()];
  574. }
  575. }
  576.  
  577. public function settleMatches(Request $request) {
  578. $validator = \Validator::make($request->all(), [
  579. 'match_id' => 'required',
  580. 'team_winner' => 'required'
  581. ]);
  582.  
  583. if ($validator->passes()) {
  584. $match = \App\Match::find($request->match_id);
  585. if ($match->status != 'settled') {
  586. if (!in_array($request->team_winner, ['draw', 'cancelled']) && $match->type == 'main' && $match->subMatches()->activeMatches()->count())
  587. return ['error' => 'There are still active sub matches, Please settle them first!'];
  588. else {
  589. $total_circulating_credits = calculateCredits('total_circulating_credits');
  590. $match->team_winner = in_array($request->team_winner, ['draw', 'cancelled']) ? null : $request->team_winner;
  591. $match->status = in_array($request->team_winner, ['draw', 'cancelled']) ? $request->team_winner : 'settled';
  592. $match->save();
  593. foreach ($match->bets as $bet) {
  594. $user = $bet->user;
  595. if (in_array($request->team_winner, ['draw', 'cancelled'])) {
  596. $user->credits += $bet->amount;
  597. $user->level += 0;
  598. $user->curr_exp += 0;
  599. $user->prev_exp += 0;
  600. $user->exp_needed +0;
  601. $bet->gains = 0;
  602. $bet->save();
  603. $user->save();
  604. } else {
  605. if ($bet->team_id == $match->team_winner) {
  606. $gains = ($bet->amount * $bet->ratio);
  607. $gainexp = $bet->amount;
  608. $user->credits += $gains;
  609. $user->curr_exp += $gainexp;
  610. $bet->gains = ($gains - $bet->amount);
  611. $bet->save();
  612. $user->save();
  613. } else {
  614. $gainexp = $bet->amount;
  615. $user->curr_exp += $gainexp;
  616. $bet->gains = -($bet->amount);
  617. $user->save();
  618. $bet->save();
  619. }
  620. while($user->curr_exp >= $user->exp_needed){
  621. if($user->level <= 19){
  622. $user->curr_exp -= $user->exp_needed;
  623. $user->prev_exp = $user->exp_needed;
  624. $user->exp_needed = $user->prev_exp * 1.4;
  625. $user->level += 1;
  626. $user->save();
  627. }
  628. elseif($user->level >= 20 && $user->level <= 39){
  629. $user->curr_exp -= $user->exp_needed;
  630. $user->prev_exp = $user->exp_needed;
  631. $user->exp_needed = $user->prev_exp * 1.1;
  632. $user->level += 1;
  633. $user->save();
  634. }
  635. elseif($user->level >= 40 && $user->level <= 59){
  636. $user->curr_exp -= $user->exp_needed;
  637. $user->prev_exp = $user->exp_needed;
  638. $user->exp_needed = $user->prev_exp * 1.05;
  639. $user->level += 1;
  640. $user->save();
  641. }
  642. elseif($user->level >= 60 && $user->level <= 79){
  643. $user->curr_exp -= $user->exp_needed;
  644. $user->prev_exp = $user->exp_needed;
  645. $user->exp_needed = $user->prev_exp * 1.04;
  646. $user->level += 1;
  647. $user->save();
  648. }
  649. elseif($user->level >= 80 && $user->level <= 99){
  650. $user->curr_exp -= $user->exp_needed;
  651. $user->prev_exp = $user->exp_needed;
  652. $user->exp_needed = $user->prev_exp * 1.03;
  653. $user->level += 1;
  654. $user->save();
  655. }
  656. elseif($user->level == 100){
  657. $user->curr_exp = $user->curr_exp * 0;
  658. $user->prev_exp -= $user->exp_needed;
  659. $user->exp_needed = $user->exp_needed * 0;
  660. $user->level += 0;
  661. $user->save();
  662. }
  663. return ['success' => 'Level up!'];
  664. }
  665. }
  666. }
  667.  
  668. if ($request->team_winner == 'cancelled')
  669. $this->cancelChildMatches($match);
  670.  
  671. $this->saveMatchReport($match, $total_circulating_credits);
  672. return ['success' => 'done'];
  673. }
  674. } else
  675. return ['error' => 'Match was already settled, please refresh page!'];
  676. } else
  677. return ['error' => $validator->errors()];
  678. }
  679.  
  680. public function settleTournament(Request $request) {
  681. $validator = \Validator::make($request->all(), [
  682. 'league_id' => 'required',
  683. 'team_id' => 'required'
  684. ]);
  685.  
  686. if ($validator->passes()) {
  687. $league = \App\League::find($request->league_id);
  688. if ($league->betting_status == 1) {
  689. return ['success' => false, 'error' => 'Tournament betting is still open! Please close it first.'];
  690. } else {
  691. $league->league_winner = $request->team_id;
  692. $bets = \App\Bet::tournament($request->league_id)->get();
  693.  
  694. foreach ($bets as $bet) {
  695. $user = $bet->user;
  696. $teamRatio = tournamentRatioPerTeam($league->id, $bet->team_id);
  697.  
  698. if ($bet->team_id == $league->league_winner) {
  699. $gains = ($bet->amount * $teamRatio);
  700. $bet->gains = ($gains - $bet->amount);
  701. $user->credits += $gains;
  702. $user->save();
  703. } else
  704. $bet->gains = -($bet->amount);
  705.  
  706. $bet->ratio = $teamRatio;
  707. $bet->save();
  708. }
  709. $league->betting_status = -1;
  710. $league->save();
  711.  
  712. // Fee
  713. $fee = new Fee;
  714. $fee->meta_key = 'tournament';
  715. $fee->meta_value = $league->id;
  716. $fee->percent = $league->betting_fee;
  717. $fee->collected = \App\Bet::tournament($league->id)->sum('amount') * $league->betting_fee;
  718. $fee->save();
  719. return ['success' => true];
  720. }
  721. } else
  722. return ['error' => $validator->errors()];
  723. }
  724.  
  725. private function cancelChildMatches(\App\Match $match) {
  726. if ($match->type == 'main') {
  727. foreach ($match->subMatches as $submatch) {
  728. if (in_array($submatch->status, ['open', 'ongoing'])) {
  729. foreach ($submatch->bets as $bet) {
  730. $user = $bet->user;
  731. $user->credits += $bet->amount;
  732. $bet->gains = 0;
  733. $user->save();
  734. $bet->save();
  735. }
  736. $submatch->status = 'cancelled';
  737. $submatch->save();
  738. }
  739. }
  740. } else {
  741. if ($match->sub_type == 'main') {
  742. $subMatches = \App\SubMatch::where('main_match', $match->main_match)
  743. ->where('game_grp', $match->game_grp)
  744. ->where('id', '!=', $match->id)->get();
  745. foreach ($subMatches as $submatch) {
  746. if (in_array($submatch->status, ['open', 'ongoing'])) {
  747. foreach ($submatch->bets as $bet) {
  748. $user = $bet->user;
  749. $user->credits += $bet->amount;
  750. $bet->gains = 0;
  751. $user->save();
  752. $bet->save();
  753. }
  754. $submatch->status = 'cancelled';
  755. $submatch->save();
  756. }
  757. }
  758. }
  759. }
  760. }
  761.  
  762. /**
  763. * Save match report
  764. *
  765. * @param App\Match $match
  766. * @return Response $response
  767. */
  768. public function saveMatchReport(\App\Match $match,$total_circulating_credits)
  769. {
  770. $this->dispatch(new SendMatchReport(['type' => 'settled', 'match_id' => $match->id,'total_circulating_credits' => $total_circulating_credits,'settled_by' => \Auth::user()->id]));
  771. return response()->json(['success' => true, 'message' => 'Match report successfully save']);
  772. }
  773. /**
  774. * Get match reports
  775. * @param int match_id
  776. * @return html table of reports
  777. */
  778. public function returnMatchReport(Request $request)
  779. {
  780. if (hasMatchManagementAccess(\Auth::user())) {
  781. $match = \App\Match::find($request->match_id);
  782. $total_team_a_bettors=0;
  783. $total_team_a_bets=0;
  784. $total_team_a_profit=0;
  785. $total_team_b_bettors=0;
  786. $total_team_b_bets=0;
  787. $total_team_b_profit=0;
  788. $a_users_list = [];
  789. $b_users_list = [];
  790. $div = '';
  791. $div .= '<div class="m-container1" style="width: 98% !important;">';
  792. $div .= '<div class="main-ct" style="margin-bottom: 0">';
  793. $div .= '<div class="title">Admin Report</div>';
  794. $div .= '<div class="clearfix"></div>';
  795. $div .= '<div class="matchmain">';
  796. $div .= '<div class="col-md-12" style="max-height: 500px; overflow: auto">';
  797. $div .= '<div class="col-md-6">';
  798. $div .= '<table id="team_a_table" class="table table-striped" width="100%">';
  799. $div .= '<thead>';
  800. $div .= '<tr>';
  801. $div .= '<th>ID</th>';
  802. $div .= '<th>'.$match->teamA->name.' Bettors</th>';
  803. $div .= '<th>Bet Amount</th>';
  804. $div .= '<th>Profit/Loss</th>';
  805. $div .= '</tr>';
  806. $div .= '</thead>';
  807. $div .= '<tbody>';
  808. $color='black';
  809. foreach ($match->load('bets.user')->bets->sortBy('user_id') as $bet) {
  810. if($match->team_a == $bet->team_id){
  811. if($bet->user->type == 'user'){
  812. if(in_array($bet->user->id,$a_users_list)){
  813. $style = 'style="background:#ffbaca;"';
  814. }else{
  815. $style= '';
  816. }
  817. }else{
  818. $style = 'style="background:#bae6ff;"';
  819. }
  820. $total_team_a_bettors ++;
  821. $profit = $bet->team->potentialMatchWinningPerUser($bet->match->id, $bet->user->id) - $bet->amount;
  822. $div .= '<tr '.$style.'>';
  823. $div .='<td>'.$bet->user->id.'</td>';
  824. $div .='<td>'.$bet->user->name.'</td>';
  825. $div .= '<td>&#8369; '.number_format($bet->amount,2).'</td>';
  826. if($bet->team_id == $match->team_winner && $match->status =='settled'){
  827. $color = 'green';
  828. $div .= '<td><span style="color:green">&#8369; '.number_format($profit,2).'</span></td>';
  829. $total_team_a_profit+=$profit;
  830. }elseif ($match->status =='draw'){
  831. $color='black';
  832. $div .= '<td><span style="color:black">&#8369; 0.00</span></td>';
  833.  
  834. }elseif ($bet->team_id != $match->team_winner && $match->status =='settled') {
  835. $color='red';
  836. $div .= '<td><span style="color:red">&#8369; '.number_format($bet->amount,2).'</span></td>';
  837. $total_team_a_profit+=$bet->amount;
  838. }elseif ($match->status =='open' || $match->status =='ongoing') {
  839. $color='black';
  840. if($bet->user->type == 'user')
  841. $div .= '<td></td>';
  842. else
  843. $div .= '<td><button type="button" class="btn btn-danger btn-xs cancelAdminBet" data-betid="'.$bet->id.'">Cancel</button></td>';
  844. }
  845. $div .= '</tr>';
  846. $total_team_a_bets+=$bet->amount;
  847. array_push($a_users_list,$bet->user->id);
  848. }
  849. }
  850. $div .= ' <tr>';
  851. $div .= '<td></td>';
  852. $div .= '<td></td>';
  853. $div .= '<td style="font-weight: bold">&#8369; '.number_format($total_team_a_bets,2).'</td>';
  854. $div .= '<td style="font-weight: bold"><span style="color:'.$color.'">'.($total_team_a_profit != 0 ? '&#8369; '.number_format($total_team_a_profit,2) : '').'</span></td>';
  855. $div .= '</tr>';
  856. $div .= '</tbody>';
  857. $div .= '</table>';
  858. $div .= '</div>';
  859. $div .= '<div class="col-md-6">';
  860. $div .= '<table id="team_a_table" class="table table-striped" width="100%">';
  861. $div .= '<thead>';
  862. $div .= '<tr>';
  863. $div .= '<th>ID</th>';
  864. $div .= '<th>'.$match->teamB->name.' Bettors</th>';
  865. $div .= '<th>Bet Amount</th>';
  866. $div .= '<th>Profit/Loss</th>';
  867. $div .= '</tr>';
  868. $div .= '</thead>';
  869. $div .= '<tbody>';
  870. foreach ($match->load('bets.user')->bets->sortBy('user_id') as $bet) {
  871. if($match->team_b == $bet->team_id){
  872. if($bet->user->type == 'user'){
  873. if(in_array($bet->user->id,$b_users_list)){
  874. $style = 'style="background:#ffbaca;"';
  875. }else{
  876. $style= '';
  877. }
  878. }else{
  879. $style = 'style="background:#bae6ff;"';
  880. }
  881. $total_team_b_bettors ++;
  882. $profit = $bet->team->potentialMatchWinningPerUser($bet->match->id, $bet->user->id) - $bet->amount;
  883. $div .= '<tr '.$style.'>';
  884. $div .='<td>'.$bet->user->id.'</td>';
  885. $div .='<td>'.$bet->user->name.'</td>';
  886. $div .= '<td>&#8369; '.number_format($bet->amount,2).'</td>';
  887. if($bet->team_id == $match->team_winner && $match->status =='settled'){
  888. $color = 'green';
  889. $div .= '<td><span style="color:green">&#8369; '.number_format($profit,2).'</span></td>';
  890. $total_team_b_profit+=$profit;
  891. }elseif ($match->status =='draw'){
  892. $color='black';
  893. $div .= '<td><span style="color:black">&#8369; 0.00</span></td>';
  894.  
  895. }elseif ($bet->team_id != $match->team_winner && $match->status =='settled') {
  896. $color='red';
  897. $div .= '<td><span style="color:red">&#8369; '.number_format($bet->amount,2).'</span></td>';
  898. $total_team_b_profit+=$bet->amount;
  899. }elseif ($match->status =='open' || $match->status =='ongoing') {
  900. $color='black';
  901. if($bet->user->type == 'user')
  902. $div .= '<td></td>';
  903. else
  904. $div .= '<td><button type="button" class="btn btn-danger btn-xs cancelAdminBet" data-betid="'.$bet->id.'">Cancel</button></td>';
  905. }
  906. $div .= '</tr>';
  907. $total_team_b_bets+=$bet->amount;
  908. array_push($b_users_list,$bet->user->id);
  909. }
  910. }
  911. $div .= ' <tr>';
  912. $div .= '<td></td>';
  913. $div .= '<td></td>';
  914. $div .= '<td style="font-weight: bold">&#8369; '.number_format($total_team_b_bets,2).'</td>';
  915. $div .= '<td style="font-weight: bold"><span style="color:'.$color.'">'.($total_team_b_profit != 0 ? '&#8369; '.number_format($total_team_b_profit,2) : '').'</span></td>';
  916. $div .= '</tr>';
  917. $div .= '</tbody>';
  918. $div .= '</table>';
  919. $div .= '</div>';
  920. $div .= '</div>';
  921. $div .= '<div class="col-md-8" style="margin-top: 10px;">';
  922. $total_bets = $total_team_a_bets+$total_team_b_bets;
  923. switch ($match->status) {
  924. case 'draw':
  925. $collected_fees = 0.00;
  926. $total_payout = number_format(0,2);
  927. break;
  928. case 'open':
  929. $collected_fees = 0.00;
  930. $total_payout = number_format(0,2);
  931. break;
  932. case 'settled':
  933. $collected_fees = $total_bets*$match->fee;
  934. $total_payout = number_format($total_bets-$collected_fees,2);
  935. break;
  936. case 'ongoing':
  937. $collected_fees = $total_bets*$match->fee;
  938. $total_payout = number_format($total_bets-$collected_fees,2);
  939. break;
  940. case 'cancelled':
  941. $collected_fees = 0.00;
  942. $total_payout = number_format(0,2);
  943. break;
  944.  
  945. default:
  946. # code...
  947. break;
  948. }
  949. $div .= '<dt class="col-sm-5">Total Bettors on '.$match->teamA->name.'</dt>';
  950. $div .= '<dd class="col-sm-7">'.$total_team_a_bettors.'</dd>';
  951. $div .= '<dt class="col-sm-5">Total Bets on '.$match->teamA->name.'</dt>';
  952. $div .= '<dd class="col-sm-7">&#8369; '.number_format($total_team_a_bets,2).'</dd>';
  953. $div .= '<dt class="col-sm-5">Average Bets on '.$match->teamA->name.'</dt>';
  954. $div .= '<dd class="col-sm-7">&#8369; '.($total_team_a_bettors != 0 ? number_format($total_team_a_bets/$total_team_a_bettors,2) : '').'</dd>';
  955. $div .= '<dt class="col-sm-5">Total Bettors on '.$match->teamB->name.'</dt>';
  956. $div .= '<dd class="col-sm-7">'.$total_team_b_bettors.'</dd>';
  957. $div .= '<dt class="col-sm-5">Total Bets on '.$match->teamB->name.'</dt>';
  958. $div .= '<dd class="col-sm-7">&#8369; '.number_format($total_team_b_bets,2).'</dd>';
  959. $div .= '<dt class="col-sm-5">Average Bets on '.$match->teamB->name.'</dt>';
  960. $div .= '<dd class="col-sm-7">&#8369; '.($total_team_b_bettors != 0 ? number_format($total_team_b_bets/$total_team_b_bettors,2) : '').'</dd>';
  961. $div .= '<dt class="col-sm-5">Total Bettors on this match</dt>';
  962. $div .= '<dd class="col-sm-7">'.($total_team_b_bettors+$total_team_a_bettors).'</dd>';
  963. $div .= '<dt class="col-sm-5">Total Bets on this match</dt>';
  964. $div .= '<dd class="col-sm-7">&#8369; '.number_format($total_bets,2).'</dd>';
  965. $div .= '<dt class="col-sm-5">Average Bets on this match</dt>';
  966. $div .= '<dd class="col-sm-7">&#8369; '.($total_team_b_bettors != 0 || $total_team_a_bettors != 0 ? number_format($total_bets/($total_team_b_bettors+$total_team_a_bettors),2) : '').'</dd>';
  967. $div .= '<dt class="col-sm-5">Match Fee</dt>';
  968. $div .= '<dd class="col-sm-7">&#8369; '.($match->fee*100).'%</dd>';
  969. $div .= '<dt class="col-sm-5">Total Fees collected on this match</dt>';
  970. $div .= '<dd class="col-sm-7">&#8369; '.number_format($collected_fees,2).'</dd>';
  971. $div .= '<dt class="col-sm-5">Total Payout</dt>';
  972. $div .= '<dd class="col-sm-7">&#8369; '.$total_payout.'</dd>';
  973. $div .= '</div>';
  974. $div .= '</div>';
  975. $div .= '</div>';
  976. $div .= '</div>';
  977. return $div;
  978. } else {
  979. return '';
  980. }
  981. }
  982.  
  983. /**
  984. * Get League reports
  985. * @param int league_id
  986. * @return html table of reports
  987. */
  988. public function returnLeagueReport(Request $request)
  989. {
  990. if (hasMatchManagementAccess(\Auth::user())) {
  991. return returnLeagueReport($request->league_id,'div');
  992. } else {
  993. return '';
  994. }
  995. }
  996.  
  997. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement