Compare commits

..

No commits in common. "3b8bba2b579797999b2b2f4d316e9e456ec18acf" and "559ceda34674927db315c25e691cd4fe32b6c6dc" have entirely different histories.

15 changed files with 31 additions and 556 deletions

View File

@ -15,14 +15,6 @@ DB_DATABASE=iLink_notifications
DB_USERNAME=root DB_USERNAME=root
DB_PASSWORD=vps@2017GA DB_PASSWORD=vps@2017GA
MAIL_HOST=mail.ilink-app.com
MAIL_USERNAME=noreply@ilink-app.com
MAIL_PASSWORD=ilink2017GA
MAIL_FROM_ADDRESS=noreply@ilink-app.com
MAIL_FROM_NAME="iLink World"
MAIL_ENCRYPTION=tls
CACHE_DRIVER=file CACHE_DRIVER=file
QUEUE_CONNECTION=sync QUEUE_CONNECTION=sync
@ -31,6 +23,3 @@ ACCEPTED_KEYS=RfXvPQzQRgwpzQYPnLfWpZzgx4QseHlg
ONESIGNAL_REST_API_KEY=OWU0NTRhNzItMjAzNy00YTc4LTlhMDUtYTU4MmNlNGZmMmU3 ONESIGNAL_REST_API_KEY=OWU0NTRhNzItMjAzNy00YTc4LTlhMDUtYTU4MmNlNGZmMmU3
ONESIGNAL_USER_AUTH_KEY= ONESIGNAL_USER_AUTH_KEY=
ONESIGNAL_APP_ID=e8e7251f-713d-4658-9510-86d877fa6a7c ONESIGNAL_APP_ID=e8e7251f-713d-4658-9510-86d877fa6a7c
WALLET_SERVICE_BASE_URL =https://ilink-app.com
WALLET_SERVICE_KEY=yhSTSSqIO1uSE1icu09edPOeSFGxIDjo

View File

@ -1,43 +0,0 @@
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Log;
use Illuminate\Support\Facades\Mail;
use Throwable;
class MailController extends Controller
{
/**
* Create a new controller instance.
*
* @return void
*/
public function __construct()
{
//
// Log::info("consturct mail");
}
public function send(Request $request)
{
$this->validate($request,[
'title' => 'required|string',
'message' => 'required|string',
'email' => 'required|email'
]);
$title = $request->input('title');
try {
$recipients = [$request->input('email')];
Mail::mailer('smtp')->raw($request->input('message'), function ($message) use ($recipients, $title) {
$message->subject($title);
$message->to($recipients);
});
} catch (Throwable $t) {
Log::error('-------- Mail not sent -----------');
Log::error($t->getMessage().'\n'.$t->getTraceAsString());
}
}
}

View File

@ -32,9 +32,9 @@ class NotificationController extends Controller
]); ]);
$notifications = []; $notifications = [];
if (isset($request->user_code)) if (isset($request->user_code))
$notifications = Notification::where('user_code', $request->user_code)->orderBy('date' , 'DESC')->get(); $notifications = Notification::where('user_code', $request->user_code)->get();
elseif (isset($request->agent_code)) elseif (isset($request->agent_code))
$notifications = Notification::where('agent_code', $request->agent_code)->orderBy('date' , 'DESC')->get(); $notifications = Notification::where('agent_code', $request->agent_code)->get();
foreach ($notifications as $notif) { foreach ($notifications as $notif) {
$notif->data = json_decode($notif->data); $notif->data = json_decode($notif->data);
@ -43,12 +43,5 @@ class NotificationController extends Controller
return $this->successResponse($notifications); return $this->successResponse($notifications);
} }
public function readNotification($id_notif){
$notif = Notification::findOrFail($id_notif);
$notif->read = true;
$notif->save();
return $this->successResponse('Success');
}
} }

View File

@ -6,11 +6,9 @@ use App\Models\Notification;
use App\Models\OnesignalAgent; use App\Models\OnesignalAgent;
use App\Models\OnesignalUser; use App\Models\OnesignalUser;
use App\Traits\ApiResponser; use App\Traits\ApiResponser;
use GuzzleHttp\Exception\GuzzleException;
use Illuminate\Http\Response;
use Illuminate\Http\Request; use Illuminate\Http\Request;
use Berkayk\OneSignal\OneSignalFacade; use Berkayk\OneSignal\OneSignalFacade;
use Illuminate\Support\Facades\Log; use Mockery\Matcher\Not;
class OneSignalController extends Controller class OneSignalController extends Controller
{ {
@ -28,112 +26,47 @@ class OneSignalController extends Controller
public function addUserPlayerID(Request $request){ public function addUserPlayerID(Request $request){
$this->validate($request , [ $this->validate($request , [
'user_code'=> 'required', 'user_code'=> 'required',
'player_id'=> 'required', 'player_id'=> 'required'
'set_default' => 'required|boolean'
]); ]);
$records = OnesignalUser::where('user_code',$request->user_code)->get();
if($request->set_default){ $saveUser = OnesignalUser::where('user_code',$request->user_code)->where('player_id',$request->player_id)->first();
foreach ($records as $r){ if(!$saveUser){
$r->delete();
}
$user = new OnesignalUser(); $user = new OnesignalUser();
$user->fill($request->all()); $user->fill($request->all());
$user->save(); $user->save();
}else{
$saveUser = OnesignalUser::where('user_code',$request->user_code)->where('player_id',$request->player_id)->first();
if(!$saveUser){
if(sizeof($records)>0)
return $this->errorResponse(trans('errors.phone_already_associated'), Response::HTTP_CREATED);
$request->set_default = true;
return $this->addUserPlayerID($request);
}else{
if(sizeof($records)>1)
return $this->errorResponse(trans('errors.phone_already_associated'), Response::HTTP_CREATED);
}
} }
return $this->successResponse('Player ID saved');
return $this->successResponse(trans('messages.player_id_saved'));
} }
public function addAgentPlayerID(Request $request){ public function addAgentPlayerID(Request $request){
$this->validate($request , [ $this->validate($request , [
'code_membre'=> 'required', 'code_membre'=> 'required',
'player_id'=> 'required', 'player_id'=> 'required'
'set_default' => 'required|boolean'
]); ]);
$codes = []; $saveUser = OnesignalAgent::where('code_membre',$request->code_membre)->where('player_id',$request->player_id)->first();
// Recuperer tous les codes agents de l'agent if(!$saveUser){
$client = new \GuzzleHttp\Client([ $user = new OnesignalAgent();
'base_uri' => env('WALLET_SERVICE_BASE_URL'), $user->fill($request->all());
]); $user->save();
$headers = [
'Authorization' => env('WALLET_SERVICE_KEY'),
];
try {
$result = $client->request('GET', '/agent_codes/'.$request->code_membre, ['headers' => $headers]);
$response = json_decode($result->getBody()->getContents());
if($response)
$codes = $response->response;
} catch (GuzzleException $e) {
Log::error($e->getMessage());
} }
return $this->successResponse('Player ID saved');
if($request->set_default){
foreach ($codes as $code){
$records = OnesignalAgent::where('code_membre',$code->code_membre)->get();
foreach ($records as $r){
$r->delete();
}
$user = new OnesignalAgent();
$user->code_membre = $code->code_membre;
$user->player_id = $request->player_id;
$user->save();
}
}else{
$records = OnesignalAgent::where('code_membre',$request->code_membre)->get();
$saveUser = OnesignalAgent::where('code_membre',$request->code_membre)->where('player_id',$request->player_id)->first();
if(!$saveUser){
if(sizeof($records)>0)
return $this->errorResponse(trans('errors.phone_already_associated'), Response::HTTP_CREATED);
$request->set_default = true;
return $this->addAgentPlayerID($request);
}else{
if(sizeof($records)>1)
return $this->errorResponse(trans('errors.phone_already_associated'), Response::HTTP_CREATED);
}
}
return $this->successResponse(trans('messages.player_id_saved'));
} }
public function pushMessageToOneUser(Request $request){ public function pushMessageToOneUser(Request $request){
$this->validate($request , [ $this->validate($request , [
'user_code'=> 'required', 'user_code'=> 'required',
'message'=> 'required', 'message'=> 'required',
'data'=>'required', 'data'=>'required'
'date' => 'required|date|date_format:Y-m-d H:i:s',
'not_saved'=>'nullable|boolean',
]); ]);
$not_saved = $request->input('not_saved');
$userIds = OnesignalUser::where('user_code',$request->user_code)->get(); $userIds = OnesignalUser::where('user_code',$request->user_code)->get();
if(!$not_saved){ $notif = new Notification();
$notif = new Notification(); $notif->user_code = $request->user_code;
$notif->user_code = $request->user_code; $notif->message = $request->message;
$notif->message = $request->message; $notif->data = json_encode($request->data);
$notif->data = json_encode($request->data); $notif->read = false;
$notif->date = $request->date; $notif->save();
$notif->read = false;
$notif->save();
}
if($userIds){ if($userIds){
foreach ($userIds as $userId){ foreach ($userIds as $userId){
OneSignalFacade::async()->sendNotificationToUser($request->message, $userId->player_id, $url = null, $request->data); OneSignalFacade::async()->sendNotificationToUser($request->message, $userId->player_id, $url = null, $request->data);
@ -143,29 +76,4 @@ class OneSignalController extends Controller
return $this->successResponse('Notification delivered'); return $this->successResponse('Notification delivered');
} }
public function pushMessageToOneAgent(Request $request){
$this->validate($request , [
'agent_code'=> 'required',
'message'=> 'required',
'data'=>'required',
'date' => 'required|date|date_format:Y-m-d H:i:s'
]);
$userIds = OnesignalAgent::where('code_membre',$request->agent_code)->get();
$notif = new Notification();
$notif->agent_code = $request->agent_code;
$notif->message = $request->message;
$notif->data = json_encode($request->data);
$notif->date = $request->date;
$notif->read = false;
$notif->save();
if($userIds){
foreach ($userIds as $userId){
OneSignalFacade::async()->sendNotificationToUser($request->message, $userId->player_id, $url = null, $request->data);
}
}
return $this->successResponse('Notification delivered');
}
} }

View File

@ -1,37 +0,0 @@
<?php
namespace App\Http\Middleware;
use Closure;
use Illuminate\Http\Request;
class Localization
{
/**
* Handle an incoming request.
*
* @param Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
$enLangs=["en","en-US","en_US","ca","in","gb","GB","us","en-029","en-AU","en-BZ","en-CA","en-GB","en-IE","en-IN","en-JM","en-MY","en-NZ","en-PH","en-SG","en-TT","en-US","en-ZA","en-ZW","au","bz","ie","in","jm","my","nz","ph","sg","tt","za"];
// Check header request and determine localizaton
if ($request->hasHeader('X-localization')){
$local = $request->header('X-localization');
$pos=strpos($local,"-");
if($pos!=false){
$local=strtolower(explode("-",$local)[0]);
}
$local= in_array($local, $enLangs) ? 'en' : 'fr';
}else{
$local ='fr';
}
// set laravel localization
app()->setLocale($local);
// continue request
return $next($request);
}
}

View File

@ -6,19 +6,17 @@
namespace App\Models; namespace App\Models;
use Carbon\Carbon;
use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Model;
/** /**
* Class Notification * Class Notification
* *
* @property int $id * @property int $id
* @property string $user_code * @property string $user_code
* @property string $agent_code * @property string $agent_code
* @property string $message * @property string $message
* @property string $data * @property string $data
* @property int $read * @property int $read
* @property Carbon $date
* *
* @package App\Models * @package App\Models
*/ */
@ -28,12 +26,7 @@ class Notification extends Model
public $timestamps = false; public $timestamps = false;
protected $casts = [ protected $casts = [
'read' => 'int', 'read' => 'int'
'date' => 'datetime:Y-m-d H:i:s'
];
protected $dates = [
'date'
]; ];
protected $fillable = [ protected $fillable = [
@ -41,7 +34,6 @@ class Notification extends Model
'agent_code', 'agent_code',
'message', 'message',
'data', 'data',
'read', 'read'
'date'
]; ];
} }

View File

@ -86,8 +86,7 @@ $app->alias('mailer', Illuminate\Contracts\Mail\MailQueue::class);
$app->middleware([ $app->middleware([
// App\Http\Middleware\ExampleMiddleware::class // App\Http\Middleware\ExampleMiddleware::class
App\Http\Middleware\Localization::class, App\Http\Middleware\AuthenticateAccess::class
App\Http\Middleware\AuthenticateAccess::class
]); ]);
// $app->routeMiddleware([ // $app->routeMiddleware([

View File

@ -8,8 +8,7 @@
"php": "^7.2.5", "php": "^7.2.5",
"berkayk/onesignal-laravel": "^1.0", "berkayk/onesignal-laravel": "^1.0",
"illuminate/mail": "^7.22", "illuminate/mail": "^7.22",
"laravel/lumen-framework": "^7.0", "laravel/lumen-framework": "^7.0"
"ext-json": "*"
}, },
"require-dev": { "require-dev": {
"fzaninotto/faker": "^1.9.1", "fzaninotto/faker": "^1.9.1",

View File

@ -3,5 +3,4 @@ return [
'model_not_found' => 'Does not exist any instance of :model with given id', 'model_not_found' => 'Does not exist any instance of :model with given id',
'unexpected_error'=> 'Unexpected error. Try later', 'unexpected_error'=> 'Unexpected error. Try later',
'service_unavailable' => 'Service unavailable', 'service_unavailable' => 'Service unavailable',
"phone_already_associated" => "You already have a phone associated . Do you want to change it ?",
]; ];

View File

@ -1,4 +1,4 @@
<?php <?php
return [ return [
"player_id_saved" => "Player ID saved",
]; ];

View File

@ -1,151 +0,0 @@
<?php
return [
/*
|--------------------------------------------------------------------------
| Validation Language Lines
|--------------------------------------------------------------------------
|
| The following language lines contain the default error messages used by
| the validator class. Some of these rules have multiple versions such
| as the size rules. Feel free to tweak each of these messages here.
|
*/
'accepted' => 'The :attribute must be accepted.',
'active_url' => 'The :attribute is not a valid URL.',
'after' => 'The :attribute must be a date after :date.',
'after_or_equal' => 'The :attribute must be a date after or equal to :date.',
'alpha' => 'The :attribute may only contain letters.',
'alpha_dash' => 'The :attribute may only contain letters, numbers, dashes and underscores.',
'alpha_num' => 'The :attribute may only contain letters and numbers.',
'array' => 'The :attribute must be an array.',
'before' => 'The :attribute must be a date before :date.',
'before_or_equal' => 'The :attribute must be a date before or equal to :date.',
'between' => [
'numeric' => 'The :attribute must be between :min and :max.',
'file' => 'The :attribute must be between :min and :max kilobytes.',
'string' => 'The :attribute must be between :min and :max characters.',
'array' => 'The :attribute must have between :min and :max items.',
],
'boolean' => 'The :attribute field must be true or false.',
'confirmed' => 'The :attribute confirmation does not match.',
'date' => 'The :attribute is not a valid date.',
'date_equals' => 'The :attribute must be a date equal to :date.',
'date_format' => 'The :attribute does not match the format :format.',
'different' => 'The :attribute and :other must be different.',
'digits' => 'The :attribute must be :digits digits.',
'digits_between' => 'The :attribute must be between :min and :max digits.',
'dimensions' => 'The :attribute has invalid image dimensions.',
'distinct' => 'The :attribute field has a duplicate value.',
'email' => 'The :attribute must be a valid email address.',
'ends_with' => 'The :attribute must end with one of the following: :values',
'exists' => 'The selected :attribute is invalid.',
'file' => 'The :attribute must be a file.',
'filled' => 'The :attribute field must have a value.',
'gt' => [
'numeric' => 'The :attribute must be greater than :value.',
'file' => 'The :attribute must be greater than :value kilobytes.',
'string' => 'The :attribute must be greater than :value characters.',
'array' => 'The :attribute must have more than :value items.',
],
'gte' => [
'numeric' => 'The :attribute must be greater than or equal :value.',
'file' => 'The :attribute must be greater than or equal :value kilobytes.',
'string' => 'The :attribute must be greater than or equal :value characters.',
'array' => 'The :attribute must have :value items or more.',
],
'image' => 'The :attribute must be an image.',
'in' => 'The selected :attribute is invalid.',
'in_array' => 'The :attribute field does not exist in :other.',
'integer' => 'The :attribute must be an integer.',
'ip' => 'The :attribute must be a valid IP address.',
'ipv4' => 'The :attribute must be a valid IPv4 address.',
'ipv6' => 'The :attribute must be a valid IPv6 address.',
'json' => 'The :attribute must be a valid JSON string.',
'lt' => [
'numeric' => 'The :attribute must be less than :value.',
'file' => 'The :attribute must be less than :value kilobytes.',
'string' => 'The :attribute must be less than :value characters.',
'array' => 'The :attribute must have less than :value items.',
],
'lte' => [
'numeric' => 'The :attribute must be less than or equal :value.',
'file' => 'The :attribute must be less than or equal :value kilobytes.',
'string' => 'The :attribute must be less than or equal :value characters.',
'array' => 'The :attribute must not have more than :value items.',
],
'max' => [
'numeric' => 'The :attribute may not be greater than :max.',
'file' => 'The :attribute may not be greater than :max kilobytes.',
'string' => 'The :attribute may not be greater than :max characters.',
'array' => 'The :attribute may not have more than :max items.',
],
'mimes' => 'The :attribute must be a file of type: :values.',
'mimetypes' => 'The :attribute must be a file of type: :values.',
'min' => [
'numeric' => 'The :attribute must be at least :min.',
'file' => 'The :attribute must be at least :min kilobytes.',
'string' => 'The :attribute must be at least :min characters.',
'array' => 'The :attribute must have at least :min items.',
],
'not_in' => 'The selected :attribute is invalid.',
'not_regex' => 'The :attribute format is invalid.',
'numeric' => 'The :attribute must be a number.',
'password' => 'The password is incorrect.',
'present' => 'The :attribute field must be present.',
'regex' => 'The :attribute format is invalid.',
'required' => 'The :attribute field is required.',
'required_if' => 'The :attribute field is required when :other is :value.',
'required_unless' => 'The :attribute field is required unless :other is in :values.',
'required_with' => 'The :attribute field is required when :values is present.',
'required_with_all' => 'The :attribute field is required when :values are present.',
'required_without' => 'The :attribute field is required when :values is not present.',
'required_without_all' => 'The :attribute field is required when none of :values are present.',
'same' => 'The :attribute and :other must match.',
'size' => [
'numeric' => 'The :attribute must be :size.',
'file' => 'The :attribute must be :size kilobytes.',
'string' => 'The :attribute must be :size characters.',
'array' => 'The :attribute must contain :size items.',
],
'starts_with' => 'The :attribute must start with one of the following: :values',
'string' => 'The :attribute must be a string.',
'timezone' => 'The :attribute must be a valid zone.',
'unique' => 'The :attribute has already been taken.',
'uploaded' => 'The :attribute failed to upload.',
'url' => 'The :attribute format is invalid.',
'uuid' => 'The :attribute must be a valid UUID.',
/*
|--------------------------------------------------------------------------
| Custom Validation Language Lines
|--------------------------------------------------------------------------
|
| Here you may specify custom validation messages for attributes using the
| convention "attribute.rule" to name the lines. This makes it quick to
| specify a specific custom language line for a given attribute rule.
|
*/
'custom' => [
'attribute-name' => [
'rule-name' => 'custom-message',
],
],
/*
|--------------------------------------------------------------------------
| Custom Validation Attributes
|--------------------------------------------------------------------------
|
| The following language lines are used to swap our attribute placeholder
| with something more reader friendly such as "E-Mail Address" instead
| of "email". This simply helps us make our message more expressive.
|
*/
'attributes' => [],
];

View File

@ -3,5 +3,4 @@ return [
'model_not_found' => 'Il n\'existe aucune instance de :model avec l\'id donné', 'model_not_found' => 'Il n\'existe aucune instance de :model avec l\'id donné',
'unexpected_error'=> 'Erreur inattendue. Essayer plus tard', 'unexpected_error'=> 'Erreur inattendue. Essayer plus tard',
'service_unavailable' => 'Service non disponible', 'service_unavailable' => 'Service non disponible',
"phone_already_associated" => "Vous avez déjà un téléphone associé. Voulez-vous le changer ?"
]; ];

View File

@ -1,5 +1,4 @@
<?php <?php
return [ return [
"player_id_saved" => "Player ID enregistré",
""
]; ];

View File

@ -1,168 +0,0 @@
<?php
/*
|--------------------------------------------------------------------------
| Validation Language Lines
|--------------------------------------------------------------------------
|
| The following language lines contain the default error messages used by
| the validator class. Some of these rules have multiple versions such
| as the size rules. Feel free to tweak each of these messages here.
|
*/
return [
'accepted' => 'Le champ :attribute doit être accepté.',
'accepted_if' => 'Le champ :attribute doit être accepté quand :other a la valeur :value.',
'active_url' => 'Le champ :attribute n\'est pas une URL valide.',
'after' => 'Le champ :attribute doit être une date postérieure au :date.',
'after_or_equal' => 'Le champ :attribute doit être une date postérieure ou égale au :date.',
'alpha' => 'Le champ :attribute doit contenir uniquement des lettres.',
'alpha_dash' => 'Le champ :attribute doit contenir uniquement des lettres, des chiffres et des tirets.',
'alpha_num' => 'Le champ :attribute doit contenir uniquement des chiffres et des lettres.',
'array' => 'Le champ :attribute doit être un tableau.',
'attached' => ':attribute est déjà attaché(e).',
'before' => 'Le champ :attribute doit être une date antérieure au :date.',
'before_or_equal' => 'Le champ :attribute doit être une date antérieure ou égale au :date.',
'between' => [
'array' => 'Le tableau :attribute doit contenir entre :min et :max éléments.',
'file' => 'La taille du fichier de :attribute doit être comprise entre :min et :max kilo-octets.',
'numeric' => 'La valeur de :attribute doit être comprise entre :min et :max.',
'string' => 'Le texte :attribute doit contenir entre :min et :max caractères.',
],
'boolean' => 'Le champ :attribute doit être vrai ou faux.',
'confirmed' => 'Le champ de confirmation :attribute ne correspond pas.',
'current_password' => 'Le mot de passe est incorrect.',
'date' => 'Le champ :attribute n\'est pas une date valide.',
'date_equals' => 'Le champ :attribute doit être une date égale à :date.',
'date_format' => 'Le champ :attribute ne correspond pas au format :format.',
'declined' => 'Le champ :attribute doit être décliné.',
'declined_if' => 'Le champ :attribute doit être décliné quand :other a la valeur :value.',
'different' => 'Les champs :attribute et :other doivent être différents.',
'digits' => 'Le champ :attribute doit contenir :digits chiffres.',
'digits_between' => 'Le champ :attribute doit contenir entre :min et :max chiffres.',
'dimensions' => 'La taille de l\'image :attribute n\'est pas conforme.',
'distinct' => 'Le champ :attribute a une valeur en double.',
'email' => 'Le champ :attribute doit être une adresse e-mail valide.',
'ends_with' => 'Le champ :attribute doit se terminer par une des valeurs suivantes : :values',
'exists' => 'Le champ :attribute sélectionné est invalide.',
'file' => 'Le champ :attribute doit être un fichier.',
'filled' => 'Le champ :attribute doit avoir une valeur.',
'gt' => [
'array' => 'Le tableau :attribute doit contenir plus de :value éléments.',
'file' => 'La taille du fichier de :attribute doit être supérieure à :value kilo-octets.',
'numeric' => 'La valeur de :attribute doit être supérieure à :value.',
'string' => 'Le texte :attribute doit contenir plus de :value caractères.',
],
'gte' => [
'array' => 'Le tableau :attribute doit contenir au moins :value éléments.',
'file' => 'La taille du fichier de :attribute doit être supérieure ou égale à :value kilo-octets.',
'numeric' => 'La valeur de :attribute doit être supérieure ou égale à :value.',
'string' => 'Le texte :attribute doit contenir au moins :value caractères.',
],
'image' => 'Le champ :attribute doit être une image.',
'in' => 'Le champ :attribute est invalide.',
'in_array' => 'Le champ :attribute n\'existe pas dans :other.',
'integer' => 'Le champ :attribute doit être un entier.',
'ip' => 'Le champ :attribute doit être une adresse IP valide.',
'ipv4' => 'Le champ :attribute doit être une adresse IPv4 valide.',
'ipv6' => 'Le champ :attribute doit être une adresse IPv6 valide.',
'json' => 'Le champ :attribute doit être un document JSON valide.',
'lt' => [
'array' => 'Le tableau :attribute doit contenir moins de :value éléments.',
'file' => 'La taille du fichier de :attribute doit être inférieure à :value kilo-octets.',
'numeric' => 'La valeur de :attribute doit être inférieure à :value.',
'string' => 'Le texte :attribute doit contenir moins de :value caractères.',
],
'lte' => [
'array' => 'Le tableau :attribute doit contenir au plus :value éléments.',
'file' => 'La taille du fichier de :attribute doit être inférieure ou égale à :value kilo-octets.',
'numeric' => 'La valeur de :attribute doit être inférieure ou égale à :value.',
'string' => 'Le texte :attribute doit contenir au plus :value caractères.',
],
'max' => [
'array' => 'Le tableau :attribute ne peut contenir plus de :max éléments.',
'file' => 'La taille du fichier de :attribute ne peut pas dépasser :max kilo-octets.',
'numeric' => 'La valeur de :attribute ne peut être supérieure à :max.',
'string' => 'Le texte de :attribute ne peut contenir plus de :max caractères.',
],
'mimes' => 'Le champ :attribute doit être un fichier de type : :values.',
'mimetypes' => 'Le champ :attribute doit être un fichier de type : :values.',
'min' => [
'array' => 'Le tableau :attribute doit contenir au moins :min éléments.',
'file' => 'La taille du fichier de :attribute doit être supérieure à :min kilo-octets.',
'numeric' => 'La valeur de :attribute doit être supérieure ou égale à :min.',
'string' => 'Le texte :attribute doit contenir au moins :min caractères.',
],
'multiple_of' => 'La valeur de :attribute doit être un multiple de :value',
'not_in' => 'Le champ :attribute sélectionné n\'est pas valide.',
'not_regex' => 'Le format du champ :attribute n\'est pas valide.',
'numeric' => 'Le champ :attribute doit contenir un nombre.',
'password' => 'Le mot de passe est incorrect',
'present' => 'Le champ :attribute doit être présent.',
'prohibited' => 'Le champ :attribute est interdit.',
'prohibited_if' => 'Le champ :attribute est interdit quand :other a la valeur :value.',
'prohibited_unless' => 'Le champ :attribute est interdit à moins que :other est l\'une des valeurs :values.',
'prohibits' => 'Le champ :attribute interdit :other d\'être présent.',
'regex' => 'Le format du champ :attribute est invalide.',
'relatable' => ':attribute n\'est sans doute pas associé(e) avec cette donnée.',
'required' => 'Le champ :attribute est obligatoire.',
'required_if' => 'Le champ :attribute est obligatoire quand la valeur de :other est :value.',
'required_unless' => 'Le champ :attribute est obligatoire sauf si :other est :values.',
'required_with' => 'Le champ :attribute est obligatoire quand :values est présent.',
'required_with_all' => 'Le champ :attribute est obligatoire quand :values sont présents.',
'required_without' => 'Le champ :attribute est obligatoire quand :values n\'est pas présent.',
'required_without_all' => 'Le champ :attribute est requis quand aucun de :values n\'est présent.',
'same' => 'Les champs :attribute et :other doivent être identiques.',
'size' => [
'array' => 'Le tableau :attribute doit contenir :size éléments.',
'file' => 'La taille du fichier de :attribute doit être de :size kilo-octets.',
'numeric' => 'La valeur de :attribute doit être :size.',
'string' => 'Le texte de :attribute doit contenir :size caractères.',
],
'starts_with' => 'Le champ :attribute doit commencer avec une des valeurs suivantes : :values',
'string' => 'Le champ :attribute doit être une chaîne de caractères.',
'timezone' => 'Le champ :attribute doit être un fuseau horaire valide.',
'unique' => 'La valeur du champ :attribute est déjà utilisée.',
'uploaded' => 'Le fichier du champ :attribute n\'a pu être téléversé.',
'url' => 'Le format de l\'URL de :attribute n\'est pas valide.',
'uuid' => 'Le champ :attribute doit être un UUID valide',
'custom' => [
'attribute-name' => [
'rule-name' => 'custom-message',
],
],
'attributes' => [
'address' => 'adresse',
'age' => 'âge',
'available' => 'disponible',
'city' => 'ville',
'content' => 'contenu',
'country' => 'pays',
'current_password' => 'mot de passe actuel',
'date' => 'date',
'day' => 'jour',
'description' => 'description',
'email' => 'adresse e-mail',
'excerpt' => 'extrait',
'first_name' => 'prénom',
'gender' => 'genre',
'hour' => 'heure',
'last_name' => 'nom',
'minute' => 'minute',
'mobile' => 'portable',
'month' => 'mois',
'name' => 'nom',
'password' => 'mot de passe',
'password_confirmation' => 'confirmation du mot de passe',
'phone' => 'téléphone',
'second' => 'seconde',
'sex' => 'sexe',
'size' => 'taille',
'time' => 'heure',
'title' => 'titre',
'username' => 'nom d\'utilisateur',
'year' => 'année',
],
];

View File

@ -1,5 +1,5 @@
<?php <?php
/** @var \Laravel\Lumen\Routing\Router $router */
/* /*
|-------------------------------------------------------------------------- |--------------------------------------------------------------------------
| Application Routes | Application Routes
@ -16,17 +16,14 @@
// return $router->app->version(); // return $router->app->version();
//}); //});
$router->post('send-mail', 'MailController@send');
// OneSingal Notification // OneSingal Notification
$router->group(['prefix'=>'/onesignal'], function () use ($router) { $router->group(['prefix'=>'/onesignal'], function () use ($router) {
$router->post('pushToUser', 'OneSignalController@pushMessageToOneUser'); $router->post('pushToUser', 'OneSignalController@pushMessageToOneUser');
$router->post('pushToAgent', 'OneSignalController@pushMessageToOneAgent');
$router->post('saveUser', 'OneSignalController@addUserPlayerID'); $router->post('saveUser', 'OneSignalController@addUserPlayerID');
$router->post('saveAgent', 'OneSignalController@addAgentPlayerID'); $router->post('saveAgent', 'OneSignalController@addAgentPlayerID');
}); });
$router->group(['prefix'=>'/notifications'], function () use ($router) { $router->group(['prefix'=>'/notifications'], function () use ($router) {
$router->post('', 'NotificationController@getNotifcations'); $router->post('', 'NotificationController@getNotifcations');
$router->put('update/{id_notif}', 'NotificationController@readNotification');
}); });