- Add Jeux - instantWin
This commit is contained in:
parent
cf3dcb0132
commit
d68829921d
9 changed files with 238 additions and 18 deletions
64
app/Http/Controllers/GamesController.php
Normal file
64
app/Http/Controllers/GamesController.php
Normal file
|
|
@ -0,0 +1,64 @@
|
|||
<?php
|
||||
|
||||
namespace App\Http\Controllers;
|
||||
|
||||
use Illuminate\Http\Request;
|
||||
|
||||
class GamesController extends Controller
|
||||
{
|
||||
public function index(Request $request) {
|
||||
return view('games.index');
|
||||
}
|
||||
|
||||
public function instantWin(Request $request) {
|
||||
return view('games.instant-win');
|
||||
}
|
||||
|
||||
public function instantWinGenerate(Request $request) {
|
||||
$start_date = $request->start_date;
|
||||
$end_date = $request->end_date;
|
||||
$lots = $request->lots;
|
||||
$lots = json_decode($lots, true);
|
||||
|
||||
$begin = new \DateTime( $start_date );
|
||||
$end = new \DateTime( $end_date );
|
||||
$end = $end->modify( '+1 day' );
|
||||
$interval = new \DateInterval('P1D');
|
||||
$daterange = new \DatePeriod($begin, $interval ,$end);
|
||||
$dateGlobal = [];
|
||||
$lotsGlobal = [];
|
||||
|
||||
foreach ($lots as $k => $lot)
|
||||
for ($i = 0; $i < $lot['qty']; $i++)
|
||||
$lotsGlobal[] = ['id' => $lot['id'], 'name' => $lot['name'], 'hour' => str_pad(mt_rand(6, 22), 2, "0", STR_PAD_LEFT) . ":" . str_pad(mt_rand(0, 59), 2, "0", STR_PAD_LEFT) . ":00"];
|
||||
shuffle($lotsGlobal);
|
||||
foreach($daterange as $date)
|
||||
array_push($dateGlobal, ['date' => $date->format("Y-m-d"), 'lots' => []]);
|
||||
|
||||
|
||||
$res = $this->generate($lotsGlobal,$dateGlobal, 0);
|
||||
|
||||
return redirect()->route('games.instantwin')->with('generated', $res);
|
||||
}
|
||||
|
||||
private function generate($lotsGlobal, $dateGlobal, $lotsDone){
|
||||
$rKey = array_rand($dateGlobal, 1);
|
||||
if ($lotsDone < count($dateGlobal)) {
|
||||
if (count($dateGlobal[$rKey]['lots']) > 0) {
|
||||
return $this->generate($lotsGlobal, $dateGlobal, $lotsDone);
|
||||
}
|
||||
}
|
||||
array_push($dateGlobal[$rKey]['lots'], $lotsGlobal[$lotsDone++]);
|
||||
if ($lotsDone < count($lotsGlobal)) {
|
||||
return $this->generate($lotsGlobal, $dateGlobal, $lotsDone);
|
||||
}
|
||||
foreach ($dateGlobal as $k => $date)
|
||||
usort($dateGlobal[$k]['lots'], [$this, 'sortFunction']);
|
||||
return $dateGlobal;
|
||||
}
|
||||
|
||||
private function sortFunction( $a, $b ) {
|
||||
return strtotime($a["hour"]) - strtotime($b["hour"]);
|
||||
}
|
||||
|
||||
}
|
||||
2
public/js/app.js
vendored
2
public/js/app.js
vendored
File diff suppressed because one or more lines are too long
1
resources/js/app.js
vendored
1
resources/js/app.js
vendored
|
|
@ -22,6 +22,7 @@ window.Vue = require('vue');
|
|||
Vue.component('otp-form', require('./components/OTPFormComponent.vue').default);
|
||||
Vue.component('login-id', require('./components/LoginIDComponent.vue').default);
|
||||
Vue.component('wp-auto-login', require('./components/WPAutoLoginComponent.vue').default);
|
||||
Vue.component('instant-win', require('./components/InstantWinComponent.vue').default);
|
||||
|
||||
/**
|
||||
* Next, we will create a fresh Vue application instance and attach it to
|
||||
|
|
|
|||
77
resources/js/components/InstantWinComponent.vue
Normal file
77
resources/js/components/InstantWinComponent.vue
Normal file
|
|
@ -0,0 +1,77 @@
|
|||
<template>
|
||||
<div>
|
||||
<form :action="route" method="POST">
|
||||
<input type="hidden" name="_token" :value="csrf">
|
||||
<div class="row">
|
||||
<div class="col-md-6">
|
||||
<label>Début du jeu :</label>
|
||||
<input type="date" v-model="start_date" name="start_date" class="form-control" required>
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<label>Fin du jeu :</label>
|
||||
<input type="date" v-model="end_date" name="end_date" class="form-control" required>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row"style="margin-top: 10px;">
|
||||
<div v-if="datas.length > 0" class="col-md-12">
|
||||
<div class="row" v-for="(item, index) in datas">
|
||||
<div class="col-md-2">
|
||||
<div class="form-group">
|
||||
<input v-model="item.id" type="text" placeholder="ID du lot" class="form-control" required>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<div class="form-group">
|
||||
<input v-model="item.name" type="text" placeholder="Libelle du lot" class="form-control" required>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-2">
|
||||
<div class="form-group">
|
||||
<input v-model="item.qty" type="number" step="1" placeholder="Qté" class="form-control" required>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-2">
|
||||
<a @click="removeItem(index)" href="#" class="btn btn-danger"><i class="fas fa-times"></i></a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-12 text-center">
|
||||
<button @click="newItem" class="btn btn-primary" type="button"><i class="fas fa-plus"></i></button>
|
||||
<input type="hidden" name="lots" :value="JSON.stringify(datas)" required>
|
||||
</div>
|
||||
</div>
|
||||
<div v-if="datas.length > 0" class="row" style="margin-top: 10px;">
|
||||
<div class="col-md-12 text-center">
|
||||
<button class="btn btn-success" type="submit"><i class="fas fa-cog"></i> Générer</button>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
export default {
|
||||
mounted() {
|
||||
console.log('Instant Win Component mounted.');
|
||||
},
|
||||
props: [
|
||||
'csrf',
|
||||
'route'
|
||||
],
|
||||
data() {
|
||||
return {
|
||||
datas: [],
|
||||
start_date: '',
|
||||
end_date: '',
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
newItem() {
|
||||
this.datas.push({id: '', name: '', qty: ''});
|
||||
},
|
||||
removeItem(index) {
|
||||
this.datas.splice(index, 1);
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
29
resources/views/games/index.blade.php
Normal file
29
resources/views/games/index.blade.php
Normal file
|
|
@ -0,0 +1,29 @@
|
|||
@extends('layouts.app')
|
||||
|
||||
@section('content')
|
||||
<div class="container">
|
||||
<div class="row justify-content-center">
|
||||
<div class="col-md-8">
|
||||
<div class="card">
|
||||
<div class="card-header">Jeux</div>
|
||||
|
||||
<div class="card-body">
|
||||
@if (session('status'))
|
||||
<div class="alert alert-success" role="alert">
|
||||
{{ session('status') }}
|
||||
</div>
|
||||
@endif
|
||||
<div class="row">
|
||||
<div class="col-md-12 d-flex justify-content-around">
|
||||
<a href="{{route('games.instantwin')}}" class="btn btn-lg btn-primary">
|
||||
<i class="far fa-list-alt"></i><br>
|
||||
Instants Gagnants
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@endsection
|
||||
42
resources/views/games/instant-win.blade.php
Normal file
42
resources/views/games/instant-win.blade.php
Normal file
|
|
@ -0,0 +1,42 @@
|
|||
@extends('layouts.app')
|
||||
|
||||
@section('content')
|
||||
<div class="container">
|
||||
<div class="row justify-content-center">
|
||||
<div class="col-md-12">
|
||||
<div class="card">
|
||||
<div class="card-header">Jeux - Instants Gagnants</div>
|
||||
|
||||
<div class="card-body">
|
||||
@if (!session('generated'))
|
||||
<div class="row">
|
||||
<div class="col-md-12 d-flex justify-content-around">
|
||||
<instant-win route="{{route('games.instantwin-generate')}}" csrf="{{ csrf_token() }}"></instant-win>
|
||||
</div>
|
||||
</div>
|
||||
@endif
|
||||
@if (session('generated'))
|
||||
<div class="row">
|
||||
<div class="col-md-4">
|
||||
@foreach(session('generated') as $date)
|
||||
@foreach($date['lots'] as $lot)
|
||||
Le {{ date('d/m/Y', strtotime($date['date'])) }} à {{$lot['hour']}} : {{$lot['name']}} <br>
|
||||
@endforeach
|
||||
@endforeach
|
||||
</div>
|
||||
<div class="col-md-8">
|
||||
@foreach(session('generated') as $date)
|
||||
@foreach($date['lots'] as $lot)
|
||||
INSERT INTO ldcjeux_instantgagnant VALUES (0, {{$lot['id']}}, '{{$date['date']}} {{$lot['hour']}}', 0, 0);
|
||||
<br>
|
||||
@endforeach
|
||||
@endforeach
|
||||
</div>
|
||||
</div>
|
||||
@endif
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@endsection
|
||||
|
|
@ -47,6 +47,10 @@
|
|||
<i class="fas fa-network-wired"></i><br>
|
||||
Réseau LDC
|
||||
</a>
|
||||
<a href="{{route('games.index')}}" class="btn btn-lg btn-primary">
|
||||
<i class="fas fa-dice"></i><br>
|
||||
Jeux
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
|||
|
|
@ -43,27 +43,26 @@
|
|||
<li class="nav-item">
|
||||
<a href="/" class="nav-link">Dashboard</a>
|
||||
</li>
|
||||
<li class="nav-item">
|
||||
<a href="/projects" class="nav-link">EDL Web</a>
|
||||
</li>
|
||||
<li class="nav-item">
|
||||
<a href="/servers" class="nav-link">Serveurs</a>
|
||||
</li>
|
||||
<li class="nav-item">
|
||||
<a href="/dpccs" class="nav-link">Datastores PCC</a>
|
||||
</li>
|
||||
<li class="nav-item">
|
||||
<a href="/domain-names" class="nav-link">Noms de domaine</a>
|
||||
</li>
|
||||
<li class="nav-item">
|
||||
<a href="{{route('email-addresses.index')}}" class="nav-link">Adresses email</a>
|
||||
</li>
|
||||
<li class="nav-item">
|
||||
<a href="{{route('ldc-networks.index')}}" class="nav-link">Réseau LDC</a>
|
||||
<li class="nav-item dropdown">
|
||||
<a id="navbarDropdown" class="nav-link dropdown-toggle" href="#" role="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false" v-pre>
|
||||
Infra<span class="caret"></span>
|
||||
</a>
|
||||
|
||||
<div class="dropdown-menu dropdown-menu-right" aria-labelledby="navbarDropdown">
|
||||
<a class="dropdown-item" href="/projects" class="nav-link">EDL Web</a>
|
||||
<a class="dropdown-item" href="/servers" class="nav-link">Serveurs</a>
|
||||
<a class="dropdown-item" href="/dpccs" class="nav-link">Datastores PCC</a>
|
||||
<a class="dropdown-item" href="/domain-names" class="nav-link">Noms de domaine</a>
|
||||
<a class="dropdown-item" href="{{route('email-addresses.index')}}" class="nav-link">Adresses email</a>
|
||||
<a class="dropdown-item" href="{{route('ldc-networks.index')}}" class="nav-link">Réseau LDC</a>
|
||||
</div>
|
||||
</li>
|
||||
<li class="nav-item">
|
||||
<a href="/status-checker" class="nav-link">Status Checker</a>
|
||||
</li>
|
||||
<li class="nav-item">
|
||||
<a href="/games" class="nav-link">Jeux</a>
|
||||
</li>
|
||||
<li class="nav-item dropdown">
|
||||
<a id="navbarDropdown" class="nav-link dropdown-toggle" href="#" role="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false" v-pre>
|
||||
{{ Auth::user()->firstname }} {{ Auth::user()->lastname }}<span class="caret"></span>
|
||||
|
|
|
|||
|
|
@ -69,4 +69,8 @@ Route::group(['middleware' => ['auth']], function () {
|
|||
Route::post('/ldc-networks/{id}/update', 'LDCNetworkController@update')->name('ldc-networks.update');
|
||||
Route::get('/ldc-networks/{id}/delete', 'LDCNetworkController@delete')->name('ldc-networks.delete');
|
||||
Route::post('/ldc-networks/{id}/force-delete', 'LDCNetworkController@forceDelete')->name('ldc-networks.force-delete');
|
||||
/* JEUX */
|
||||
Route::get('/games', 'GamesController@index')->name('games.index');
|
||||
Route::get('/games/instant-win', 'GamesController@instantWin')->name('games.instantwin');
|
||||
Route::post('/games/instant-win/generate', 'GamesController@instantWinGenerate')->name('games.instantwin-generate');
|
||||
});
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue