2023-09-28 12:05:50 +02:00
< ? php
namespace App\Http\Controllers\Bo ;
use App\Http\Controllers\Controller ;
use App\Http\Requests\Bo\Services\StoreServiceRequest ;
use App\Http\Requests\Bo\Services\UpdateServiceRequest ;
use App\Mail\ServiceCredentialRenewed ;
use App\Models\ArcadiaBrand ;
use App\Models\Service ;
use Illuminate\Http\Request ;
use Illuminate\Support\Facades\DB ;
use Illuminate\Support\Facades\Hash ;
use Illuminate\Support\Facades\Mail ;
use Illuminate\Support\Str ;
/**
* @ codeCoverageIgnore
*/
class ServiceController extends Controller
{
/**
* Create the controller instance .
*/
public function __construct ()
{
$this -> authorizeResource ( Service :: class );
}
/**
* Display a listing of the resource .
*
* @ param \Illuminate\Http\Request $request
* @ return \Illuminate\Contracts\View\View
*/
public function index ( Request $request ) : \Illuminate\Contracts\View\View
{
/** @var \Illuminate\Database\Eloquent\Builder $query */
$query = Service :: query ();
if ( $request -> brand ) {
$query = $query -> whereHas ( 'arcadiaBrands' , $request -> brand );
}
if ( $request -> search ) {
$this -> searchQuery (
$query ,
$request -> search ,
null ,
'name' ,
);
}
$this -> sortQuery ( $query );
$searchFields = trans ( 'Nom' );
$serviceModels = $query -> paginate ( 12 );
return view ( 'bo.pages.services.index' , compact ( 'serviceModels' , 'searchFields' ));
}
/**
* Show the form for creating a new resource .
*
* @ param \App\Models\Service $service
* @ return \Illuminate\Contracts\View\View
*/
public function create ( Service $service ) : \Illuminate\Contracts\View\View
{
$brandModels = ArcadiaBrand :: all ();
return view ( 'bo.pages.services.create' , [
'serviceModel' => $service ,
'brandModels' => $brandModels
]);
}
/**
* Store a newly created resource in storage .
*
* @ param \App\Http\Requests\Bo\Services\StoreServiceRequest $request
* @ return \Illuminate\Http\RedirectResponse
*/
public function store ( StoreServiceRequest $request ) : \Illuminate\Http\RedirectResponse
{
return DB :: transaction ( function () use ( $request ) {
$service = new Service ();
$service -> fill ( $request -> validated ());
$service -> generateBearerToken ();
$service -> saveOrFail ();
$this -> generateServicePassword ( $service );
if ( $service -> saveOrFail ()) {
return redirect ()
-> route ( 'bo.services.edit' , $service )
-> with ( 'success' , trans (
':model a été créé.' ,
2023-09-28 16:21:05 +02:00
[ 'model' => Str :: singular ( trans ( 'models.classes.service' ))]
2023-09-28 12:05:50 +02:00
));
}
return redirect ()
-> back ()
-> with ( 'error' , trans (
':model n\'a pas été créé.' ,
2023-09-28 16:21:05 +02:00
[ 'model' => Str :: singular ( trans ( 'models.classes.service' ))]
2023-09-28 12:05:50 +02:00
));
});
}
/**
* Show the form for editing the specified resource .
*
* @ param \App\Models\Service $service
* @ return \Illuminate\Contracts\View\View
*/
public function edit ( Service $service ) : \Illuminate\Contracts\View\View
{
$brandModels = ArcadiaBrand :: all ();
return view ( 'bo.pages.services.edit' , [
'serviceModel' => $service ,
'brandModels' => $brandModels
]);
}
/**
* Update a spacific resource in storage .
*
* @ param \App\Http\Requests\Bo\Services\UpdateServiceRequest $request
* @ param \App\Models\Service $service
* @ return \Illuminate\Contracts\View\View
*/
public function update ( UpdateServiceRequest $request , Service $service ) : \Illuminate\Contracts\View\View
{
return DB :: transaction ( function () use ( $request , $service ) {
$service -> fill ( $request -> validated ());
if ( $service -> saveOrFail ()) {
return redirect ()
-> route ( 'bo.services.edit' , $service )
-> with ( 'success' , trans (
':model a été mis à jour.' ,
2023-09-28 16:21:05 +02:00
[ 'model' => Str :: singular ( trans ( 'models.classes.service' ))]
2023-09-28 12:05:50 +02:00
));
}
return redirect ()
-> back ()
-> with ( 'error' , trans (
':model n\'a pas été mis à jour.' ,
2023-09-28 16:21:05 +02:00
[ 'model' => Str :: singular ( trans ( 'models.classes.service' ))]
2023-09-28 12:05:50 +02:00
));
});
}
/**
* Show the specified resource .
*
* @ param \App\Models\Service $service
* @ return \Illuminate\Contracts\View\View
*/
public function show ( Service $service ) : \Illuminate\Contracts\View\View
{
return view ( 'bo.pages.services.show' , [
'serviceModel' => $service
]);
}
/**
* Remove the specified resource from storage .
*
* @ param \App\Models\Service $service
* @ return \Illuminate\Http\RedirectResponse
*/
public function destroy ( Service $service ) : \Illuminate\Http\RedirectResponse
{
if ( $service -> deleteOrFail ()) {
return redirect () -> route ( 'bo.services.index' )
-> with ( 'success' , trans (
':model a été supprimé.' ,
2023-09-28 16:21:05 +02:00
[ 'model' => Str :: singular ( trans ( 'models.classes.service' ))]
2023-09-28 12:05:50 +02:00
));
}
return redirect () -> back ()
-> with ( 'error' , trans (
':model n\'a pas pu être supprimé.' ,
2023-09-28 16:21:05 +02:00
[ 'model' => Str :: singular ( trans ( 'models.classes.service' ))]
2023-09-28 12:05:50 +02:00
));
}
/**
* Regen service credentials .
*
* @ param \App\Models\Service $service
* @ return \Illuminate\Http\RedirectResponse
*/
// phpcs:ignore Generic.CodeAnalysis.UnusedFunctionParameter.FoundInExtendedClassAfterLastUsed, Squiz.Commenting.FunctionComment.Missing
public function generateServicePassword ( Service $service ) : \Illuminate\Http\RedirectResponse
{
/** @var \App\Models\User $user */
$user = auth () -> user ();
// * Special Condition for migration from v2 to v3.
$service -> bearer_token = ! Hash :: needsRehash ( $service -> bearer_token ) ?
$service -> generateBearerToken () : $service -> bearer_token ;
$bearerPwd = $service -> generateBearerPassword ();
$service -> saveOrFail ();
Mail :: send ( new ServiceCredentialRenewed ( $service , $user ));
return back ()
// phpcs:ignore Generic.Files.LineLength.TooLong
2023-09-28 13:16:56 +02:00
-> with ( 'error' , " ATTENTION : METTEZ À JOUR LE SITE ! \n Nouveau token d'API de { $service -> name } : ' { $service -> bearer_token } ' et mot de passe ' { $bearerPwd } ' " );
2023-09-28 12:05:50 +02:00
}
}