File "GameController.php"

Full Path: /home/trinadezambia/public_html/gambling/app/Http/Controllers/Admin/GameController.php
File size: 13.11 KB
MIME-type: text/x-php
Charset: utf-8

<?php

namespace App\Http\Controllers\Admin;

use App\Constants\Status;
use App\Http\Controllers\Controller;
use App\Models\Game;
use App\Models\GameLog;
use App\Models\GuessBonus;
use App\Rules\FileTypeValidate;
use Illuminate\Http\Request;

class GameController extends Controller {
    public function index() {
        $pageTitle = "Games";
        $games     = Game::searchable(['name'])->orderBy('id', 'desc')->get();
        return view('admin.game.index', compact('pageTitle', 'games'));
    }

    public function edit($id) {
        $game      = Game::findOrFail($id);
        $pageTitle = "Update " . $game->name;

        $view    = 'game_edit';
        $bonuses = null;

        $alias = ['number_guess', 'number_slot', 'roulette', 'casino_dice', 'keno', 'blackjack', 'mines', 'poker', 'crazy_times', 'dream_catcher'];
        if (in_array($game->alias, $alias)) {
            if (in_array($game->alias, ['number_guess', 'mines', 'poker'])) {
                $bonuses = GuessBonus::where('alias', $game->alias)->get();
            }
            $view = $game->alias;
        }
        return view('admin.game.' . $view, compact('pageTitle', 'game', 'bonuses'));
    }

    public function update(Request $request, $id) {
        $request->validate([
            'name'          => 'required',
            'min'           => 'required|numeric',
            'max'           => 'required|numeric',
            'instruction'   => 'required',
            'win'           => 'sometimes|required|numeric',
            'invest_back'   => 'sometimes|required',
            'trending'      => 'sometimes|required',
            'featured'      => 'sometimes|required',
            'probable'      => 'nullable|integer|max:100',
            'probable_demo' => 'nullable|integer|max:100',
            'level.*'       => 'sometimes|required',
            'chance.*'      => 'sometimes|required|numeric',
            'image'         => ['nullable', new FileTypeValidate(['jpg', 'jpeg', 'png'])],
        ], [
            'level.0.required'  => 'Level 1 field is required',
            'level.1.required'  => 'Level 2 field is required',
            'level.2.required'  => 'Level 3 field is required',
            'chance.0.required' => 'No win chance field required',
            'chance.1.required' => 'Double win chance field is required',
            'chance.2.required' => 'Single win chance field is required',
            'chance.3.required' => 'Triple win field is required',
            'chance.*.numeric'  => 'Chance field must be a number',
        ]);
        $winChance     = $request->probable;
        $winChanceDemo = $request->probable_demo;

        if (isset($request->chance)) {

            if (array_sum($request->chance) != 100) {
                $notify[] = ['error', 'The sum of winning chance must be equal of 100'];
                return back()->withNotify($notify);
            }

            $winChance     = $request->chance;
            $winChanceDemo = $request->chance;
        }

        $game = Game::findOrFail($id);

        $game->name              = $request->name;
        $game->min_limit         = $request->min;
        $game->max_limit         = $request->max;
        $game->probable_win      = $winChance;
        $game->probable_win_demo = $winChanceDemo;
        $game->invest_back       = $request->invest_back ? Status::YES : Status::NO;
        $game->trending          = $request->trending ? Status::YES : Status::NO;
        $game->featured          = $request->featured ? Status::YES : Status::NO;
        $game->instruction       = $request->instruction;
        $game->short_desc        = $request->short_desc;
        $game->level             = $request->level;
        $game->win               = $request->win;

        $oldImage = $game->image;

        if ($request->hasFile('image')) {
            try {
                $game->image = fileUploader($request->image, getFilePath('game'), getFileSize('game'), $oldImage);
            } catch (\Exception $e) {
                $notify[] = ['error', 'Could not upload the Image.'];
                return back()->withNotify($notify);
            }
        }

        $game->save();

        $notify[] = ['success', 'Game updated successfully'];
        return back()->withNotify($notify);
    }

    public function gameLog(Request $request) {
        $pageTitle = "Game Logs";
        $logs      = GameLog::where('status', Status::ENABLE)->searchable(['user:username'])->filter(['win_status'])->with('user', 'game')->latest('id')->paginate(getPaginate());
        return view('admin.game.log', compact('pageTitle', 'logs'));
    }

    public function chanceCreate(Request $request, $alias = null) {
        $request->validate([
            'chance'    => 'required|array|min:1',
            'chance.*'  => 'required|integer|min:1',
            'percent'   => 'required|array',
            'percent.*' => 'required|numeric',
        ]);

        if ($request->alias == 'mines' && count($request->chance) != 20) {
            $notify[] = ['error', '20 mines commission is required'];
            return back()->withNotify($notify);
        }
        if ($request->alias == 'poker' && count($request->chance) != 10) {
            $notify[] = ['error', '10 rank commission is required'];
            return back()->withNotify($notify);
        }

        GuessBonus::where('alias', $request->alias)->delete();

        $data = [];
        for ($a = 0; $a < count($request->chance); $a++) {
            $data[] = [
                'alias'      => $alias,
                'chance'     => $request->chance[$a],
                'percent'    => $request->percent[$a],
                'status'     => Status::ENABLE,
                'created_at' => now(),
            ];
        }

        GuessBonus::insert($data);

        $notify[] = ['success', 'Chance bonus Create Successfully'];
        return back()->withNotify($notify);
    }

    public function status($id) {
        $game = Game::findOrFail($id);

        if ($game->status == Status::ENABLE) {
            $game->status = Status::DISABLE;
            $notify[]     = ['success', $game->name . ' disabled successfully'];
        } else {
            $game->status = Status::ENABLE;
            $notify[]     = ['success', $game->name . ' enabled successfully'];
        }

        $game->save();
        return back()->withNotify($notify);
    }

    public function kenoUpdate(Request $request, $id) {
        $request->validate([
            'name'              => 'required',
            'min'               => 'required|numeric',
            'max'               => 'required|numeric',
            'instruction'       => 'required',
            'invest_back'       => 'sometimes|required',
            'trending'          => 'sometimes|required',
            'featured'          => 'sometimes|required',
            'max_select_number' => 'required|integer|gte:4',
            'level.*'           => 'required|integer',
            'percent.*'         => 'required|numeric',
            'probable'          => 'required|integer|min:0|max:100',
            'probable_demo'     => 'required|integer|min:0|max:100',
            'image'             => ['nullable', new FileTypeValidate(['jpg', 'jpeg', 'png'])],
        ], [
            'level.*.required'   => 'Level field is required',
            'percent.*.required' => 'Commission field required',
            'percent.*.numeric'  => 'Commission field must be a number',
        ]);

        $game      = Game::findOrFail($id);
        $maxSelect = [
            'max_select_number' => $request->max_select_number,
        ];
        for ($i = 0; $i < count($request->percent); $i++) {
            $level[] = [
                'level'   => $request->level[$i],
                'percent' => $request->percent[$i],
            ];
        }
        $levels['levels'] = $level;
        $levels           = array_merge($maxSelect, $levels);

        $game->name              = $request->name;
        $game->min_limit         = $request->min;
        $game->max_limit         = $request->max;
        $game->invest_back       = $request->invest_back ? Status::YES : Status::NO;
        $game->trending          = $request->trending ? Status::YES : Status::NO;
        $game->featured          = $request->featured ? Status::YES : Status::NO;
        $game->instruction       = $request->instruction;
        $game->level             = $levels;
        $game->probable_win      = $request->probable;
        $game->probable_win_demo = $request->probable_demo;

        if ($request->hasFile('image')) {
            try {
                $game->image = fileUploader($request->image, getFilePath('game'), getFileSize('game'), $game?->image);
            } catch (\Exception $e) {
                $notify[] = ['error', 'Could not upload the Image.'];
                return back()->withNotify($notify);
            }
        }
        $game->save();

        $notify[] = ['success', 'Game updated successfully'];
        return back()->withNotify($notify);
    }
    public function crazyTimesUpdate(Request $request, $id) {
        $request->validate([
            'name'          => 'required',
            'min'           => 'required|numeric',
            'max'           => 'required|numeric',
            'instruction'   => 'required',
            'trending'      => 'sometimes|required',
            'featured'      => 'sometimes|required',
            'probable'      => 'required|integer|min:0|max:100',
            'probable_demo' => 'required|integer|min:0|max:100',
            'level.*'       => 'required|numeric|gte:0',
            'image'         => ['nullable', new FileTypeValidate(['jpg', 'jpeg', 'png'])],
        ], [
            'level.*.required' => 'probable field is required',
        ]);

        $game = Game::findOrFail($id);

        $game->name              = $request->name;
        $game->min_limit         = $request->min;
        $game->max_limit         = $request->max;
        $game->invest_back       = $request->invest_back ? Status::YES : Status::NO;
        $game->trending          = $request->trending ? Status::YES : Status::NO;
        $game->featured          = $request->featured ? Status::YES : Status::NO;
        $game->instruction       = $request->instruction;
        $game->probable_win      = $request->probable;
        $game->probable_win_demo = $request->probable_demo;
        $game->level             = $request->level;

        if ($request->hasFile('image')) {
            try {
                $game->image = fileUploader($request->image, getFilePath('game'), getFileSize('game'), $game?->image);
            } catch (\Exception $e) {
                $notify[] = ['error', 'Could not upload the Image.'];
                return back()->withNotify($notify);
            }
        }
        $game->save();

        $notify[] = ['success', 'Game updated successfully'];
        return back()->withNotify($notify);
    }

    public function dreamCatcherUpdate(Request $request, $id) {
        $request->validate([
            'name'                => 'required',
            'min'                 => 'required|numeric',
            'max'                 => 'required|numeric',
            'instruction'         => 'required',
            'trending'            => 'sometimes|required',
            'featured'            => 'sometimes|required',
            'probable_win'        => ['required', 'array', 'min:1', function ($attribute, $value, $fail) {
                if (array_sum($value) != 100) {
                    $fail('The total sum of win probability is must be 100.');
                }
            }],
            'probable_win.*'      => 'required|numeric|gt:0|lte:100',
            'probable_win_demo'   => ['required', 'array', 'min:1', function ($attribute, $value, $fail) {
                if (array_sum($value) != 100) {
                    $fail('The total sum of demo win probability is must be 100.');
                }
            }],
            'probable_win_demo.*' => 'required|numeric|gt:0|lte:100',
            'image'               => ['nullable', new FileTypeValidate(['jpg', 'jpeg', 'png'])],
        ], [
            'probable_win.*.required' => 'Probable field is required',
        ]);
        $game                    = Game::findOrFail($id);
        $game->name              = $request->name;
        $game->min_limit         = $request->min;
        $game->max_limit         = $request->max;
        $game->invest_back       = $request->invest_back ? Status::YES : Status::NO;
        $game->trending          = $request->trending ? Status::YES : Status::NO;
        $game->featured          = $request->featured ? Status::YES : Status::NO;
        $game->instruction       = $request->instruction;
        $game->probable_win      = $request->probable_win;
        $game->probable_win_demo = $request->probable_win_demo;

        if ($request->hasFile('image')) {
            try {
                $game->image = fileUploader($request->image, getFilePath('game'), getFileSize('game'), $game?->image);
            } catch (\Exception $e) {
                $notify[] = ['error', 'Could not upload the Image.'];
                return back()->withNotify($notify);
            }
        }

        $game->save();

        $notify[] = ['success', 'Game updated successfully'];
        return back()->withNotify($notify);
    }
}