Commit 44a604c3 authored by Goldenscarab's avatar Goldenscarab

Mise à jour avec générateur de code

parent 5cadf314
...@@ -14,12 +14,12 @@ use Modules\Small\Http\Repositories\SmallRepository; ...@@ -14,12 +14,12 @@ use Modules\Small\Http\Repositories\SmallRepository;
class SmallController extends Controller class SmallController extends Controller
{ {
private $small_repo; private $repository;
public function __construct(SmallRepository $small_repo) public function __construct(SmallRepository $repository)
{ {
$this->small_repo = $small_repo; $this->repository = $repository;
} }
/** /**
...@@ -28,15 +28,21 @@ class SmallController extends Controller ...@@ -28,15 +28,21 @@ class SmallController extends Controller
*/ */
public function index(Request $request) public function index(Request $request)
{ {
$sort = $request->get('sort', 'id'); $sort = $request->get('sort', 'id');
$direction = $request->get('direction', 'asc'); $direction = $request->get('direction', 'asc');
$persmall = $request->get('perpage', 15); $perpage = $request->get('perpage', 15);
$search = $request->get('search'); $search = $request->get('search');
$filter = $request->get('filter');
$include = $request->get('include');
$smalls = $this->small_repo->list($sort, $direction, $persmall, $search); $resources = $this->repository->list($sort, $direction, $perpage, $search, $filter);
$smalls->load('user');
return response()->json($smalls); // Ajout des relations
if (!empty($include)) {
$resources->load($include);
}
return response()->json($resources);
} }
/** /**
...@@ -56,10 +62,10 @@ class SmallController extends Controller ...@@ -56,10 +62,10 @@ class SmallController extends Controller
*/ */
public function show(Request $request, $public_id) public function show(Request $request, $public_id)
{ {
$small = $this->small_repo->findOrfail($public_id); $resource = $this->repository->findOrfail($public_id);
// Retourne avec un cache en secondes // Retourne avec un cache en secondes
return response()->json($small)->header('Cache-Control', 'max-age=60'); return response()->json($resource);
} }
/** /**
......
...@@ -24,7 +24,7 @@ class ConfigController extends Controller ...@@ -24,7 +24,7 @@ class ConfigController extends Controller
'config' => null 'config' => null
); );
return view('small::app.config.form')->with([ return view('small::config.form')->with([
'title' => '<i class="fa fa-cogs mr-2" aria-hidden="true"></i>Module Small', 'title' => '<i class="fa fa-cogs mr-2" aria-hidden="true"></i>Module Small',
'subtitle' => 'Configuration', 'subtitle' => 'Configuration',
'config' => $config, 'config' => $config,
......
...@@ -7,21 +7,22 @@ use Illuminate\Http\Request; ...@@ -7,21 +7,22 @@ use Illuminate\Http\Request;
use Illuminate\Routing\Controller; use Illuminate\Routing\Controller;
use Maatwebsite\Excel\Facades\Excel; use Maatwebsite\Excel\Facades\Excel;
use Modules\Small\Exports\SmallExport;
use Illuminate\Support\Facades\Session; use Illuminate\Support\Facades\Session;
use Illuminate\Support\Facades\Redirect; use Illuminate\Support\Facades\Redirect;
use Illuminate\Support\Facades\Response;
use Illuminate\Contracts\Support\Renderable; use Illuminate\Contracts\Support\Renderable;
use Modules\Small\Exports\SmallExport;
use Modules\Small\Http\Requests\SmallStoreRequest; use Modules\Small\Http\Requests\SmallStoreRequest;
use Modules\Small\Http\Repositories\SmallRepository; use Modules\Small\Http\Repositories\SmallRepository;
class SmallController extends Controller class SmallController extends Controller
{ {
private $small_repo; private $repository;
public function __construct(SmallRepository $small) public function __construct(SmallRepository $small)
{ {
$this->small_repo = $small; $this->repository = $small;
// Définition des permissions par méthode // Définition des permissions par méthode
$this->middleware('permission:module-small-read')->only(['index']); $this->middleware('permission:module-small-read')->only(['index']);
...@@ -43,8 +44,8 @@ class SmallController extends Controller ...@@ -43,8 +44,8 @@ class SmallController extends Controller
'Exemples' => null 'Exemples' => null
); );
return view('small::app.small.index')->with([ return view('small::small.index')->with([
'title' => '<i class="fa fa-magic mr-1" aria-hidden="true"></i>Exemples', 'title' => '<i class="fa fa-magic mr-2" aria-hidden="true"></i>Exemples',
'breadcrumb' => $breadcrumb, 'breadcrumb' => $breadcrumb,
]); ]);
} }
...@@ -55,7 +56,7 @@ class SmallController extends Controller ...@@ -55,7 +56,7 @@ class SmallController extends Controller
*/ */
public function create() public function create()
{ {
$small = $this->small_repo->new(); $small = $this->repository->new();
$breadcrumb = array( $breadcrumb = array(
'Accueil' => route('modulus.dashboard'), 'Accueil' => route('modulus.dashboard'),
...@@ -63,8 +64,8 @@ class SmallController extends Controller ...@@ -63,8 +64,8 @@ class SmallController extends Controller
'Ajouter' => null 'Ajouter' => null
); );
return view('small::app.small.form')->with([ return view('small::small.form')->with([
'title' => '<i class="fa fa-magic mr-1" aria-hidden="true"></i>Exemples', 'title' => '<i class="fa fa-magic mr-2" aria-hidden="true"></i>Exemples',
'action' => '<i class="fa fa-plus mr-2"></i>Création', 'action' => '<i class="fa fa-plus mr-2"></i>Création',
'breadcrumb' => $breadcrumb, 'breadcrumb' => $breadcrumb,
'item' => $small 'item' => $small
...@@ -78,7 +79,7 @@ class SmallController extends Controller ...@@ -78,7 +79,7 @@ class SmallController extends Controller
*/ */
public function edit($id) public function edit($id)
{ {
$small = $this->small_repo->findOrFail($id); $small = $this->repository->findOrFail($id);
$breadcrumb = array( $breadcrumb = array(
...@@ -87,8 +88,8 @@ class SmallController extends Controller ...@@ -87,8 +88,8 @@ class SmallController extends Controller
'Modifier' => null 'Modifier' => null
); );
return view('small::app.small.form')->with([ return view('small::small.form')->with([
'title' => '<i class="fa fa-magic mr-1"></i>Exemples', 'title' => '<i class="fa fa-magic mr-2"></i>Exemples',
'action' => '<i class="fa fa-plus mr-2"></i>Modification', 'action' => '<i class="fa fa-plus mr-2"></i>Modification',
'breadcrumb' => $breadcrumb, 'breadcrumb' => $breadcrumb,
'item' => $small 'item' => $small
...@@ -113,7 +114,7 @@ class SmallController extends Controller ...@@ -113,7 +114,7 @@ class SmallController extends Controller
*/ */
public function show(Request $request, $id) public function show(Request $request, $id)
{ {
$small = $this->small_repo->findOrFail($id); $small = $this->repository->findOrFail($id);
$breadcrumb = array( $breadcrumb = array(
'Accueil' => route('modulus.dashboard'), 'Accueil' => route('modulus.dashboard'),
...@@ -121,8 +122,8 @@ class SmallController extends Controller ...@@ -121,8 +122,8 @@ class SmallController extends Controller
'Voir' => null 'Voir' => null
); );
return view('small::app.small.show')->with([ return view('small::small.show')->with([
'title' => '<i class="fa fa-magic mr-1"></i>Exemples', 'title' => '<i class="fa fa-magic mr-2"></i>Exemples',
'subtitle' => $small->name, 'subtitle' => $small->name,
'breadcrumb' => $breadcrumb, 'breadcrumb' => $breadcrumb,
'item' => $small 'item' => $small
...@@ -133,24 +134,30 @@ class SmallController extends Controller ...@@ -133,24 +134,30 @@ class SmallController extends Controller
* Update the specified resource in storage. * Update the specified resource in storage.
* @param SmallStoreRequest $request * @param SmallStoreRequest $request
* @param int $id * @param int $id
* @return Renderable * @return Redirect
*/ */
public function update(SmallStoreRequest $request, $id) public function update(SmallStoreRequest $request, $id)
{ {
$small_data = collect($request->except(['_token'])); $small_data = collect($request->except(['_token']));
$small = $this->small_repo->store($small_data, $id); $small = $this->repository->store($small_data, $id);
Session::flash('success', "Exemple ". (is_null($id) ? 'créé' : 'modifié') . " avec succès"); Session::flash('success', "Exemple ". (is_null($id) ? 'créé' : 'modifié') . " avec succès");
return Redirect::route('module.small.index'); return Redirect::route('module.small.index');
} }
/**
* Duplicate the specified resource in storage
*
* @param int $id
* @return Redirect
*/
public function duplicate($id) public function duplicate($id)
{ {
$this->checkPermissionAccess($id); $this->checkPermissionAccess($id);
$this->small_repo->duplicate($id); $this->repository->duplicate($id);
Session::flash('success', "Exemple dupliqué avec succès"); Session::flash('success', "Exemple dupliqué avec succès");
...@@ -160,13 +167,13 @@ class SmallController extends Controller ...@@ -160,13 +167,13 @@ class SmallController extends Controller
/** /**
* Remove the specified resource from storage. * Remove the specified resource from storage.
* @param int $id * @param int $id
* @return Renderable * @return Redirect
*/ */
public function destroy($id) public function destroy($id)
{ {
$this->checkPermissionAccess($id); $this->checkPermissionAccess($id);
$this->small_repo->destroy($id); $this->repository->destroy($id);
Session::flash('success', 'Exemple supprimé avec succès'); Session::flash('success', 'Exemple supprimé avec succès');
...@@ -177,7 +184,7 @@ class SmallController extends Controller ...@@ -177,7 +184,7 @@ class SmallController extends Controller
* Exporte les données de la exemple * Exporte les données de la exemple
* *
* @param int $id * @param int $id
* @return void * @return Response
*/ */
public function export() public function export()
{ {
......
...@@ -8,35 +8,17 @@ use Modules\Small\Models\Small; ...@@ -8,35 +8,17 @@ use Modules\Small\Models\Small;
use Goldenscarab\Modulus\App\Http\Repositories\RepositoryInterface; use Goldenscarab\Modulus\App\Http\Repositories\RepositoryInterface;
class SmallRepository implements RepositoryInterface { class SmallRepository implements RepositoryInterface
{
public function all($columns = array('*')) public function all($columns = array('*'))
{ {
return Small::select($columns)->orderBy('id', 'asc')->get(); return Small::select($columns)->orderBy('id', 'asc')->get();
} }
public function list($sorting, $direction = 'asc', $perpage = 15, $search = "", $user_id = null) public function list($sorting, $direction = 'asc', $perpage = 15, $search = "", $filter = null)
{ {
// Si tri via relation return Small::search($search)->filter($filter)->sortBy($sorting, $direction)->paginate($perpage);
if (Str::contains($sorting, '.')) {
// Préparation de la jointure
$relation_filter = explode('.', $sorting);
$table_join = $relation_filter[0];
$primary_key = $table_join . '.id';
$foreign_key = Str::singular(collect(explode('_', $table_join))->last()) . '_id';
// Récupération des éléments
$list = Small::select('small.*')
->join($table_join, $primary_key, '=', $foreign_key)
->user($user_id)
->orderBy($sorting, $direction)
->search($search)->paginate($perpage);
} else {
$list = Small::search($search)->user($user_id)->orderBy($sorting, $direction)->paginate($perpage);
}
return $list;
} }
public function published($columns = array('*')) public function published($columns = array('*'))
...@@ -52,17 +34,17 @@ class SmallRepository implements RepositoryInterface { ...@@ -52,17 +34,17 @@ class SmallRepository implements RepositoryInterface {
public function store(Collection $data, $id = null) public function store(Collection $data, $id = null)
{ {
if (is_null($id)) { if (is_null($id)) {
$small = new Small; $resource = new Small;
} else { } else {
$small = Small::findOrFail($id); $resource = Small::findOrFail($id);
} }
$small->name = $data->get('name'); $resource->name = $data->get('name');
$small->user_id = $data->get('user_id'); $resource->user_id = $data->get('user_id');
$small->save(); $resource->save();
return $small; return $resource;
} }
public function find($id, $columns = array('*')) public function find($id, $columns = array('*'))
...@@ -118,8 +100,8 @@ class SmallRepository implements RepositoryInterface { ...@@ -118,8 +100,8 @@ class SmallRepository implements RepositoryInterface {
public function duplicate($id) public function duplicate($id)
{ {
$item = Small::findOrFail($id); $resource = Small::findOrFail($id);
$clone = $item->replicate(); $clone = $resource->replicate();
$availables = ['title', 'name', 'label', 'slug']; $availables = ['title', 'name', 'label', 'slug'];
...@@ -144,13 +126,13 @@ class SmallRepository implements RepositoryInterface { ...@@ -144,13 +126,13 @@ class SmallRepository implements RepositoryInterface {
private function calcNextPosition() private function calcNextPosition()
{ {
$item = Small::orderBy('position', 'desc')->first(); $resource = Small::orderBy('position', 'desc')->first();
if (is_null($item)) { if (is_null($resource)) {
return 1; return 1;
} }
return $item->position + 1; return $resource->position + 1;
} }
} }
...@@ -2,14 +2,18 @@ ...@@ -2,14 +2,18 @@
namespace Modules\Small\Models; namespace Modules\Small\Models;
use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Model;
use Goldenscarab\Modulus\App\Models\User; use Goldenscarab\Modulus\App\Models\User;
use Illuminate\Database\Eloquent\Builder; use Illuminate\Database\Eloquent\Builder;
use Goldenscarab\Modulus\App\Traits\ModelSortable;
use Goldenscarab\Modulus\App\Traits\ModelFilterable;
use Goldenscarab\Modulus\App\Traits\ModelSearchable;
class Small extends Model class Small extends Model
{ {
use ModelSortable, ModelFilterable, ModelSearchable;
protected $table = 'module_smalls'; protected $table = 'module_smalls';
protected $fillable = []; protected $fillable = [];
...@@ -23,7 +27,7 @@ class Small extends Model ...@@ -23,7 +27,7 @@ class Small extends Model
protected $appends = []; protected $appends = [];
/* Relation */ /* Relations */
public function user() public function user()
{ {
return $this->belongsTo(User::class, 'user_id'); return $this->belongsTo(User::class, 'user_id');
......
...@@ -42,7 +42,7 @@ ...@@ -42,7 +42,7 @@
]; ];
$params_list = [ $params_list = [
'source' => route('api.module.small.index'), 'source' => route('api.module.small.index', ['include' => ['user']),
'menu' => [ 'menu' => [
'button' => $am->make('[READ]', ['attributes' => ['class' => 'btn-sm btn-success']]), 'button' => $am->make('[READ]', ['attributes' => ['class' => 'btn-sm btn-success']]),
'dropdown' => [ 'dropdown' => [
......
...@@ -5,7 +5,7 @@ namespace Goldenscarab\Modulus\App\Console\Modulus; ...@@ -5,7 +5,7 @@ namespace Goldenscarab\Modulus\App\Console\Modulus;
use Illuminate\Console\Command; use Illuminate\Console\Command;
use Illuminate\Support\Facades\Mail; use Illuminate\Support\Facades\Mail;
class EmailTest extends Command class EmailTestCommand extends Command
{ {
/** /**
* The name and signature of the console command. * The name and signature of the console command.
...@@ -42,7 +42,7 @@ class EmailTest extends Command ...@@ -42,7 +42,7 @@ class EmailTest extends Command
$this->line(vsprintf('Expéditeur: %s <%s>', [config('mail.from.name'), config('mail.from.address')])); $this->line(vsprintf('Expéditeur: %s <%s>', [config('mail.from.name'), config('mail.from.address')]));
$this->line(sprintf('Destinataire: %s', $this->argument('email'))); $this->line(sprintf('Destinataire: %s', $this->argument('email')));
Mail::raw('Félicitation ! La configuration mail est bien opérationnelle', function($msg) { Mail::raw('Félicitation ! La configuration mail est bien opérationnelle', function ($msg) {
$msg->to($this->argument('email'))->subject('Modulus Test Email'); $msg->to($this->argument('email'))->subject('Modulus Test Email');
}); });
......
This diff is collapsed.
<?php
namespace $NAMESPACE$;
use Illuminate\Http\Request;
use Illuminate\Http\Response;
use Illuminate\Routing\Controller;
use Modules\$MODULE$\Http\Requests\$MODEL$\$REQUEST_INDEX$;
use Modules\$MODULE$\Http\Requests\$MODEL$\$REQUEST_SHOW$;
use Modules\$MODULE$\Http\Requests\$MODEL$\$REQUEST_STORE$;
use Modules\$MODULE$\Http\Requests\$MODEL$\$REQUEST_UPDATE$;
use Modules\$MODULE$\Http\Requests\$MODEL$\$REQUEST_DESTROY$;
use Modules\$MODULE$\Http\Repositories\$REPOSITORY$;
class $CLASS$ extends Controller
{
private $repository;
public function __construct($REPOSITORY$ $repository)
{
$this->repository = $repository;
}
/**
* Display a listing of the resources.
* @return Response
*/
public function index($REQUEST_INDEX$ $request)
{
$sort = $request->get('sort', 'id');
$direction = $request->get('direction', 'asc');
$perpage = $request->get('perpage', 13);
$search = $request->get('search');
$filter = $request->get('filter');
$include = $request->get('include');
$resources = $this->repository->list($sort, $direction, $perpage, $search, $filter);
// Ajout des relations
if (!empty($include)) {
$resources->load($include);
}
return response()->json($resources);
}
/**
* Show the specified resource.
* @param int $id
* @return Response
*/
public function show($REQUEST_SHOW$ $request, $id)
{
$resources = $this->repository->findOrfail($id);
return response()->json($resources);
}
/**
* Store a newly created resource in storage.
* @param Request $request
* @return Response
*/
public function store($REQUEST_STORE$ $request)
{
$data = $request->except(['_token']);
$resource = $this->repository->store($data);
return response()->json($resource);
}
/**
* Update the specified resource in storage.
* @param Request $request
* @param int $id
* @return Response
*/
public function update($REQUEST_UPDATE$ $request, $id)
{
$data = $request->except(['_token']);
$resource = $this->repository->store($data, $id);
return response()->json($resource);
}
/**
* Remove the specified resource from storage.
* @param int $id
* @return Response
*/
public function destroy($REQUEST_DESTROY$ $request, $id)
{
$this->repository->destroy($id);
return response()->noContent();
}
}
<?php
namespace $NAMESPACE$;
use Illuminate\Routing\Controller;
use Maatwebsite\Excel\Facades\Excel;
use Illuminate\Support\Facades\Session;
use Illuminate\Support\Facades\Redirect;
use Illuminate\Support\Facades\Response;
use Modules\$MODULE$\Exports\$EXPORT$;
use Illuminate\Contracts\Support\Renderable;
use Modules\$MODULE$\Http\Requests\$MODEL$\$REQUEST_STORE$;
use Modules\$MODULE$\Http\Repositories\$REPOSITORY$;
class $CLASS$ extends Controller
{
private $repository;
public function __construct($REPOSITORY$ $repository)
{
$this->repository = $repository;
// Définition des permissions par méthode
$this->middleware('permission:$PERMISSION_PREFIX$-read')->only(['index']);
$this->middleware('permission:$PERMISSION_PREFIX$-create')->only(['create', 'duplicate']);
$this->middleware('permission:$PERMISSION_PREFIX$-update')->only(['edit']);
$this->middleware('permission:$PERMISSION_PREFIX$-delete')->only(['destroy']);
view()->share('route_prefix', "$ROUTE_PREFIX$");
}
/**
* Display a listing of the resources.
* @return Renderable
*/
public function index()
{
$breadcrumb = array(
__('Accueil') => route('modulus.dashboard'),
__('$MODEL$') => null
);
return view('$VIEW_PREFIX$.index')->with([
'title' => '<i class="fa fa-asterisk mr-2"></i>' . __('$MODEL$'),
'subtitle' => 'Liste',
'breadcrumb' => $breadcrumb,
]);
}
/**
* Show the form for creating a new resource.
* @return Renderable
*/
public function create()
{
$resource = $this->repository->new();
$breadcrumb = array(
__('Accueil') => route('modulus.dashboard'),
__('$MODEL$') => route('$ROUTE_PREFIX$.index'),
__('Ajouter') => null
);
return view('$VIEW_PREFIX$.form')->with([
'title' => '<i class="fa fa-asterisk mr-2"></i>' . __('$MODEL$'),
'subtitle' => __('Nouveau'),
'breadcrumb' => $breadcrumb,
'item' => $resource
]);
}
/**
* Read the specified resource.
* @param int $id
* @return Renderable
*/
public function read($id)
{
$resource = $this->repository->findOrFail($id);
$breadcrumb = array(
__('Accueil') => route('modulus.dashboard'),
__('$MODEL$') => route('$ROUTE_PREFIX$.index'),
__('Consulter') => null
);
return view('$VIEW_PREFIX$.show')->with([
'title' => '<i class="fa fa-asterisk mr-2"></i>' . __('$MODEL$'),
'subtitle' => __('Consultation'),
'breadcrumb' => $breadcrumb,
'item' => $resource
]);
}
/**
* Show the form for editing the specified resource.
* @param int $id
* @return Renderable
*/
public function edit($id)
{
$resource = $this->repository->findOrFail($id);
$breadcrumb = array(
__('Accueil') => route('modulus.dashboard'),
__('$MODEL$') => route('$ROUTE_PREFIX$.index'),
__('Modifier') => null
);
return view('$VIEW_PREFIX$.form')->with([
'title' => '<i class="fa fa-asterisk mr-2"></i>' . __('$MODEL$'),
'subtitle' => __('Mise à jour'),
'breadcrumb' => $breadcrumb,
'item' => $resource
]);
}
/**
* Store a newly created resource in storage.
* @param $REQUEST_STORE$ $request
* @return Redirect
*/
public function store($REQUEST_STORE$ $request, $id = null)
{
return $this->update($request, $id);
}
/**
* Update the specified resource in storage.
* @param $REQUEST_STORE$ $request
* @param int $id
* @return Redirect
*/
public function update($REQUEST_STORE$ $request, $id)
{
$data = $request->except(['_token']);
$resource = $this->repository->store($data, $id);
Session::flash('success', __("Élément enregistré avec succès"));
return Redirect::route('$ROUTE_PREFIX$.index');
}
/**
* Duplicate the specified resource in storage
*
* @param int $id
* @return Redirect
*/
public function duplicate($id)
{
$this->repository->duplicate($id);
Session::flash('success', __("Élément dupliqué avec succès"));
return Redirect::route('$ROUTE_PREFIX$.index');
}
/**
* Remove the specified resource from storage.
* @param int $id
* @return Redirect
*/
public function destroy($id)
{
$this->repository->destroy($id);
Session::flash('success', __('Élément supprimé avec succès'));
return Redirect::route('$ROUTE_PREFIX$.index');
}
/**
* Exporte the resources
*
* @return Response
*/
public function export()
{
return Excel::download(new $EXPORT$, date('Ymd_His_') . 'export-$PERMISSION_PREFIX$.xlsx');
}
}
<?php
namespace $NAMESPACE$;
use Illuminate\Support\Collection;
use Maatwebsite\Excel\Events\AfterSheet;
use Maatwebsite\Excel\Concerns\WithEvents;
use Maatwebsite\Excel\Events\BeforeExport;
use Maatwebsite\Excel\Concerns\WithHeadings;
use Maatwebsite\Excel\Concerns\FromCollection;
use Maatwebsite\Excel\Concerns\ShouldAutoSize;
use Modules\$MODULE$\Http\Repositories\$REPOSITORY$;
class $CLASS$ implements FromCollection, WithHeadings, ShouldAutoSize, WithEvents
{
private $collection;
private $prop_title;
private $prop_description;
private $prop_author;
private $prop_subject;
private $prop_company;
private $sheet_columns;
public function __construct()
{
$this->prop_description = "Export des exemples du module $MODULE$";
$this->prop_title = "Liste des exemples";
$this->prop_author = "Sylvain";
$this->prop_subject = "Export";
$this->prop_company = "Goldenscarab";
$this->sheet_title = 'Clients';
$this->sheet_colums = array(
'id' => 'ID',
'name' => 'Nom',
'user.name' => 'Utilisateur',
'created_at' => 'Date'
);
}
/**
* Récupération des données depuis la BDD
* @return Collection La liste des données à exporter
*/
public function collection()
{
return app($REPOSITORY$::class)->all(array_keys($this->sheet_colums));
}
/**
* Ajout d'une ligne d'entêtes (les titres)
* @return array Les titres
*/
public function headings(): array
{
return array_values($this->sheet_colums);
}
/**
* Configuration de la feuille d'export
* @return array La config
*/
public function registerEvents(): array
{
return [
BeforeExport::class => function(BeforeExport $event) {
// Propriétées du tableau
$event->writer->getProperties()
->setCreator($this->prop_author)
->setLastModifiedBy($this->prop_author)
->setTitle($this->prop_title)
->setSubject($this->prop_subject)
->setCompany($this->prop_company)
->setDescription($this->prop_description);
},
AfterSheet::class => function(AfterSheet $event) {
// Calcul de la zone des titres
$title_end = chr(65 + count($this->sheet_colums) - 1);
$zone_title = sprintf('A1:%s1', $title_end);
// Style des titres
$event->sheet->getDelegate()->getStyle($zone_title)->getFont()->setBold(true);
// Filtre sur les titres
$event->sheet->setAutoFilter($zone_title);
// Volets verrouillés
$event->sheet->freezePane('A2');
// Titre de l'onglet
$event->sheet->setTitle($this->sheet_title);
},
];
}
}
<?php
namespace $NAMESPACE$;
use Modules\Belet\Models\$MODEL$;
use Illuminate\Database\Eloquent\Factories\Factory;
class $CLASS$ extends Factory
{
/**
* The name of the factory's corresponding model.
*
* @var string
*/
protected $model = $MODEL$::class;
/**
* Define the model's default state.
*
* @return array
*/
public function definition()
{
return [
//'name' => $this->faker->word(),
//'phone' => $this->faker->phoneNumber(),
//'description' => $this->faker->text(100),
];
}
/**
* Specific status
*
* @return \Illuminate\Database\Eloquent\Factories\Factory
*/
// public function status($status)
// {
// return $this->state(function (array $attributes) use ($status) {
// return [
// 'status' => $status,
// ];
// });
// }
}
<?php
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class $CLASS$ extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('$TABLE$', function (Blueprint $table) {
$table->increments('id');
$table->string('name');
// TODO
// $table->unsignedInteger('example_id');
// $table->foreign('example_id')->references('id')->on('table_examples');
$table->timestamps();
//$table->softDeletes();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
// Schema::table('module_belet_customers', function (Blueprint $table) {
// $table->dropForeign(['example_id']);
// });
Schema::dropIfExists('$TABLE$');
}
}
<?php
namespace $NAMESPACE$;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Builder;
//use Illuminate\Database\Eloquent\SoftDeletes;
use Goldenscarab\Modulus\App\Traits\ModelSortable;
use Goldenscarab\Modulus\App\Traits\ModelFilterable;
use Goldenscarab\Modulus\App\Traits\ModelSearchable;
class $CLASS$ extends Model
{
//use SoftDeletes;
use ModelSortable, ModelFilterable, ModelSearchable;
protected $table = '$TABLE$';
protected $fillable = [];
protected $dates = [];
protected $searchable = [];
protected $casts = [];
protected $appends = [];
/********************/
/* Relations */
/********************/
// public function examples()
// {
// return $this->hasMany(Example::class, 'example_id');
// }
/********************/
/* Attributs */
/********************/
// protected function getExampleAttribute()
// {
// return $this->attributes['example'];
// }
/********************/
/* Scopes */
/********************/
// public function scopeFilter(Builder $query, $value)
// {
// return $query->where('filter', $value);
// }
/********************/
/* Specific methods */
/********************/
}
<?php
namespace $NAMESPACE$;
use Modules\$MODULE$\Models\$MODEL$;
use Goldenscarab\Modulus\App\Http\Repositories\RepositoryInterface;
class $CLASS$ implements RepositoryInterface
{
public function all($columns = array('*'))
{
return $MODEL$::select($columns)->orderBy('id', 'asc')->get();
}
public function list($sorting, $direction = 'asc', $perpage = null, $search = "", $filter = null)
{
$query = $MODEL$::search($search)->filter($filter)->sortBy($sorting, $direction);
$resources = is_null($perpage) ? $query->get() : $query->paginate($perpage);
return $resources;
}
public function new()
{
return new $MODEL$;
}
public function store(array $data, $id = null)
{
if (is_null($id)) {
$resource = new $MODEL$;
} else {
$resource = $MODEL$::findOrFail($id);
}
$resource->name = data_get($data, 'name');
// $resource->example_id = data_get($data, 'example_id');
$resource->save();
return $resource;
}
public function find($id, $columns = array('*'))
{
return $MODEL$::select($columns)->find($id);
}
public function findOrFail($id, $columns = array('*'))
{
return $MODEL$::select($columns)->findOrFail($id);
}
public function findBy($field, $value, $columns = array('*'))
{
return $MODEL$::select($columns)->where($field, '=', $value)->first();
}
public function findOrFailBy($field, $value, $columns = array('*'))
{
return $MODEL$::select($columns)->where($field, '=', $value)->firstOrFail();
}
public function findAllBy($field, $value, $columns = array('*'))
{
return $MODEL$::select($columns)->where($field, '=', $value)->get();
}
public function findWhere($where, $columns = array('*'))
{
return $MODEL$::select($columns)->whereRaw($where)->get();
}
public function destroy($id)
{
$resource = $MODEL$::findOrFail($id);
return $resource->delete();
}
public function first()
{
return $MODEL$::first();
}
public function duplicate($id)
{
$resource = $MODEL$::findOrFail($id);
$clone = $resource->replicate();
$availables = ['title', 'name', 'label', 'slug'];
foreach ($availables as $available) {
if (isset($clone->{$available})) {
$clone->{$available} = $clone->{$available} . ' (copie)';
}
}
$clone->save();
return $clone;
}
public function truncate()
{
return $MODEL$::truncate();
}
private function calcNextPosition()
{
$resource = $MODEL$::orderBy('position', 'desc')->first();
if (is_null($resource)) {
return 1;
}
return $resource->position + 1;
}
}
<?php
namespace $NAMESPACE$;
use Illuminate\Foundation\Http\FormRequest;
class $CLASS$ extends FormRequest
{
/**
* Determine if the user is authorized to make this request.
*
* @return bool
*/
public function authorize()
{
if (empty($this->route('id'))) {
return auth()->user()->can('$PERMISSION_PREFIX$-create');
} else {
return auth()->user()->can('$PERMISSION_PREFIX$-update');
}
}
/**
* Get the validation rules that apply to the request.
*
* @return array
*/
public function rules()
{
return [
'name' => 'required|max:191'
// TODO - Règles des champs
];
}
/**
* Get custom attributes for validator errors.
*
* @return array
*/
public function attributes()
{
return [
'name' => __('Nom')
// TODO - Nom des champs
];
}
}
<?php
namespace $NAMESPACE$;
use Illuminate\Foundation\Http\FormRequest;
class $CLASS$ extends FormRequest
{
/**
* Determine if the user is authorized to make this request.
*
* @return bool
*/
public function authorize()
{
return auth($GUARD$)->check() && auth($GUARD$)->user()->can('$PERMISSION_PREFIX$-delete');
}
/**
* Get the validation rules that apply to the request.
*
* @return array
*/
public function rules()
{
return [];
}
/**
* Get custom attributes for validator errors.
*
* @return array
*/
public function attributes()
{
return [];
}
}
<?php
namespace $NAMESPACE$;
use Illuminate\Foundation\Http\FormRequest;
class $CLASS$ extends FormRequest
{
/**
* Determine if the user is authorized to make this request.
*
* @return bool
*/
public function authorize()
{
return auth($GUARD$)->check() && auth($GUARD$)->user()->can('$PERMISSION_PREFIX$-read');
}
/**
* Get the validation rules that apply to the request.
*
* @return array
*/
public function rules()
{
return [
'sort' => 'nullable|string',
'direction' => 'required_with:sort|string',
'perpage' => 'nullable|in:10,50,100,250,500',
'search' => 'nullable|string',
'filter' => 'nullable|string|regex:/^.*:.*$/',
'include' => 'nullable|array'
];
}
/**
* Get custom attributes for validator errors.
*
* @return array
*/
public function attributes()
{
return [
'sort' => __('Colonne'),
'direction' => __('Direction'),
'perpage' => __('Par page'),
'search' => __('Recherche'),
'filter' => __('Filtre'),
'include' => __('Relation')
];
}
}
<?php
namespace $NAMESPACE$;
use Illuminate\Foundation\Http\FormRequest;
class $CLASS$ extends FormRequest
{
/**
* Determine if the user is authorized to make this request.
*
* @return bool
*/
public function authorize()
{
return auth($GUARD$)->check() && auth($GUARD$)->user()->can('$PERMISSION_PREFIX$-read');
}
/**
* Get the validation rules that apply to the request.
*
* @return array
*/
public function rules()
{
return [];
}
/**
* Get custom attributes for validator errors.
*
* @return array
*/
public function attributes()
{
return [];
}
}
<?php
namespace $NAMESPACE$;
use Illuminate\Foundation\Http\FormRequest;
class $CLASS$ extends FormRequest
{
/**
* Determine if the user is authorized to make this request.
*
* @return bool
*/
public function authorize()
{
return auth($GUARD$)->check() && auth($GUARD$)->user()->can('$PERMISSION_PREFIX$-create');
}
/**
* Get the validation rules that apply to the request.
*
* @return array
*/
public function rules()
{
return [
// TODO
];
}
/**
* Get custom attributes for validator errors.
*
* @return array
*/
public function attributes()
{
return [
// TODO
];
}
}
<?php
namespace $NAMESPACE$;
use Illuminate\Foundation\Http\FormRequest;
class $CLASS$ extends FormRequest
{
/**
* Determine if the user is authorized to make this request.
*
* @return bool
*/
public function authorize()
{
return auth($GUARD$)->check() && auth($GUARD$)->user()->can('$PERMISSION_PREFIX$-update');
}
/**
* Get the validation rules that apply to the request.
*
* @return array
*/
public function rules()
{
return [
// TODO
];
}
/**
* Get custom attributes for validator errors.
*
* @return array
*/
public function attributes()
{
return [
// TODO
];
}
}
// $MODEL$
Route::resource('$ROUTE$', $CONTROLLER$::class);
// $MODEL$
Route::group(['prefix' => '$ROUTE$', 'as' => '$ROUTE$.'], function() {
Route::get('/', '$CONTROLLER$@index')->name('index');
Route::get('create', '$CONTROLLER$@create')->name('create');
Route::get('export', '$CONTROLLER$@export')->name('export');
Route::get('read/{id}', '$CONTROLLER$@read')->name('read');
Route::get('edit/{id}', '$CONTROLLER$@edit')->name('edit');
Route::get('duplicate/{id}', '$CONTROLLER$@duplicate')->name('duplicate');
Route::post('store/{id?}', '$CONTROLLER$@store')->name('store');
Route::get('destroy/{id}', '$CONTROLLER$@destroy')->name('destroy');
});
<?php
namespace $NAMESPACE$;
use Carbon\Carbon;
use Illuminate\Database\Seeder;
use Illuminate\Support\Facades\DB;
use Illuminate\Database\Eloquent\Model;
use Modules\$MODULE$\Database\factories\$FACTORY$;
class $CLASS$ extends Seeder
{
/**
* Run the database seeds.
*
* @return void
*/
public function run()
{
Model::unguard();
// Seeder fake
$FACTORY$::new()->count(20)->create();
// Seeder spécifique
// DB::table('$TABLE$')->insert([
// [
// 'name' => 'Custom name',
// 'example_id' => 1,
// 'created_at' => Carbon::now(),
// 'updated_at' => Carbon::now(),
// ]
// ]);
}
}
This diff is collapsed.
@extends('modulus::layouts.app.form')
@section('fields')
<div class="card">
<div class="card-header">
<h3 class="card-title">Général</h3>
</div>
<div class="card-body">
<div class="form-row">
<div class="col-sm-6">
{!! Field2::select([
'label' => 'Propriétaire',
'name' => 'user_id',
'value' => $item->user_id,
'prefix' => '<i class="fa fa-user"></i>',
'attributes' => [
'required' => true,
],
'options' => [
'source' => [
'call' => 'Goldenscarab\Modulus\App\Http\Controllers\Api\UserController@index',
'params' => ['perpage' => 999],
'target' => 'data'
],
'default' => ['value' => '', 'label' => 'Choisir...'],
'value' => ':id',
'label' => ['template' => [
'format' => '%s (%s)',
'args' => [':name', ':company']
]]
]
]) !!}
</div>
</div>
<div class="form-row">
<div class="col">
{!! Field2::input([
'label' => 'Nom',
'name' => 'name',
'value' => $item->name,
'prefix' => '<i class="fa fa-bookmark"></i>',
'attributes' => [
'placeholder' => 'ex : Le nom',
'required' => true,
]
]) !!}
</div>
</div>
</div>
</div>
@endsection
@push('scripts')
<script>
document.addEventListener('DOMContentLoaded', function() {
// TODO
});
</script>
@endpush
@extends('modulus::layouts.app.adminlte')
@php
$can_prefix = '$PERMISSION_PREFIX$';
$url_prefix = route('$ROUTE_PREFIX$.index');
$am = new \Goldenscarab\Modulus\Helpers\ActionMenu($can_prefix, $url_prefix);
$params_actions = [
[
'button' => $am->make('[CREATE]', ['attributes.class' => 'btn-sm btn-success']),
]
];
$params_filter = [
// [
// 'name' => 'filter',
// 'prefix' => 'Filtre catégorie',
// 'size' => 'sm',
// 'options' => [
// 'source' => [
// 'url' => route('api.module.belet.customers.categories.index', ['perpage' => null]),
// 'method' => 'GET',
// 'target' => 'data'
// ],
// 'placeholder' => ['value' => '', 'label' => '-- Toutes --'],
// 'value' => ['template' => [
// 'format' => '%s:%s',
// 'args' => ['category_id', ':id']
// ]],
// 'label' => ':name'
// ]
// ]
];
$params_header = [
'actions' => $params_actions,
'filters' => $params_filter,
'search' => true
];
$params_list = [
'source' => route('api.$ROUTE_PREFIX$.index'),
'menu' => [
'button' => $am->make('[READ]', ['attributes' => ['class' => 'btn-sm btn-success']]),
'dropdown' => [
'size' => 'sm',
'attributes' => ['class' => 'dropdown-menu-right'],
'items' => [
$am->make('[EDIT]'),
$am->make('[DUPLICATE]'),
$am->make('[SEPARATOR]'),
$am->make('[DESTROY]')
]
]
],
'row' => [],
'columns' => array(
[
'label' => '#',
'value' => ':id',
'sortable' => 'id'
], [
'label' => 'Nom',
'value' => ':name',
'sortable' => 'name'
],
// [
// 'label' => 'Téléphone',
// 'value' => ':phone',
// 'sortable' => 'phone',
// ], [
// 'label' => 'Description',
// 'value' => ':description',
// 'sortable' => 'description',
// 'render' => 'limit(70)'
// ], [
// 'label' => 'Statut',
// 'value' => ':status',
// 'sortable' => 'status',
// 'render' => 'boolean_html'
/ ],
[
'label' => ['value' => 'Date', 'attributes' => ['class' => 'text-center']],
'value' => ':updated_at',
'sortable' => 'updated_at',
'render' => 'date_human_fr',
'attributes' => ['class' => 'text-center']
]
)
];
@endphp
@section('content')
<div id="app">
<glist
v-bind:header="{{ json_encode($params_header) }}"
v-bind:list="{{ json_encode($params_list) }}"
></glist>
</div>
@endsection
@extends('modulus::layouts.app.adminlte')
@section('content')
<div class="card card-success card-outline">
<div class="card-header">
<h3 class="card-title">Fiche</h3>
</div>
<div class="card-body">
<h4>
<span class="badge badge-info mr-2">{{ $item->name }}</span>
<span class="badge badge-success float-right">{{ $item->category->name }}</span>
</h4>
<div class="row mt-4">
<div class="col-sm-6">
<table class="table">
<tbody>
<tr>
<th>Description</th>
<td>{{ $item->description }}</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
</div>
<div class="form-action">
<a href="{{ route('$ROUTE_PREFIX$.index') }}" class="btn btn-warning">
<i class="fa fa-reply" aria-hidden="true"></i>
</a>
</div>
@endsection
...@@ -59,7 +59,7 @@ class ModuleController extends Controller ...@@ -59,7 +59,7 @@ class ModuleController extends Controller
$modules = Module::toCollection(); $modules = Module::toCollection();
// Désactiver les modules non installé // Désactiver les modules non installé
$modules->each(function(&$m, $key) { $modules->each(function (&$m, $key) {
// Recherche de la config du module dans modulus // Recherche de la config du module dans modulus
$module = $this->module_repo->findBy('slug', $m->getAlias()); $module = $this->module_repo->findBy('slug', $m->getAlias());
...@@ -69,7 +69,7 @@ class ModuleController extends Controller ...@@ -69,7 +69,7 @@ class ModuleController extends Controller
}); });
// On supprime de la liste les modules caché // On supprime de la liste les modules caché
$modules = $modules->filter(function($module, $key) { $modules = $modules->filter(function ($module, $key) {
return $module->get('hidden') == false; return $module->get('hidden') == false;
}); });
...@@ -78,13 +78,13 @@ class ModuleController extends Controller ...@@ -78,13 +78,13 @@ class ModuleController extends Controller
'Modules' => null 'Modules' => null
); );
return view('modulus::app.module.index')->with([ return view('modulus::app.module.index')->with([
'seo_title' => 'Module liste', 'seo_title' => 'Module liste',
'title' => '<i class="fa fa-puzzle-piece mr-2"></i>Modules', 'title' => '<i class="fa fa-puzzle-piece mr-2"></i>Modules',
'subtitle' => 'Liste des modules disponibles', 'subtitle' => 'Liste des modules disponibles',
'breadcrumb' => $breadcrumb, 'breadcrumb' => $breadcrumb,
'modules' => $modules 'modules' => $modules
]); ]);
} }
...@@ -115,7 +115,7 @@ class ModuleController extends Controller ...@@ -115,7 +115,7 @@ class ModuleController extends Controller
'priority' => $module->get('priority') 'priority' => $module->get('priority')
); );
$this->module_repo->store(collect($module_config)); $this->module_repo->store($module_config);
// Ajout des permissions d'accès au module // Ajout des permissions d'accès au module
PermissionService::addPermissionsGroup('Module ' . $module->getName()); PermissionService::addPermissionsGroup('Module ' . $module->getName());
...@@ -165,11 +165,10 @@ class ModuleController extends Controller ...@@ -165,11 +165,10 @@ class ModuleController extends Controller
'priority' => $module->get('priority') 'priority' => $module->get('priority')
); );
$this->module_repo->store(collect($module_config)); $this->module_repo->store($module_config);
Session::flash('success', "Module mis à jour avec succès"); Session::flash('success', "Module mis à jour avec succès");
return Redirect::route('modulus.module.index'); return Redirect::route('modulus.module.index');
} }
} }
...@@ -47,11 +47,11 @@ class PermissionController extends Controller ...@@ -47,11 +47,11 @@ class PermissionController extends Controller
'Permissions' => null 'Permissions' => null
); );
return view('modulus::app.user.permission.list')->with([ return view('modulus::app.user.permission.list')->with([
'title' => '<i class="fa fa-unlock-alt mr-1" aria-hidden="true"></i>Permissions', 'title' => '<i class="fa fa-unlock-alt mr-1" aria-hidden="true"></i>Permissions',
'breadcrumb' => $breadcrumb, 'breadcrumb' => $breadcrumb,
'permissions' => $permissions, 'permissions' => $permissions,
]); ]);
} }
public function create() public function create()
...@@ -96,8 +96,7 @@ class PermissionController extends Controller ...@@ -96,8 +96,7 @@ class PermissionController extends Controller
public function store(PermissionStoreRequest $request, $id = null) public function store(PermissionStoreRequest $request, $id = null)
{ {
$permission_data = collect($request->except(['_token'])); $permission_data = $request->except(['_token']);
if (is_null($id)) { if (is_null($id)) {
$base_name = $request->get('name'); $base_name = $request->get('name');
...@@ -111,14 +110,14 @@ class PermissionController extends Controller ...@@ -111,14 +110,14 @@ class PermissionController extends Controller
$name = $base_name . '-' . $suffix; $name = $base_name . '-' . $suffix;
$perm = $this->permission_repo->findBy('name', $name); $perm = $this->permission_repo->findBy('name', $name);
$this->permission_repo->store(collect([ $this->permission_repo->store([
'name' => $request->get('name') . '-' . $suffix, 'name' => $request->get('name') . '-' . $suffix,
'display_name' => $request->get('display_name') . ' ' . ucfirst($suffix), 'display_name' => $request->get('display_name') . ' ' . ucfirst($suffix),
'description' => $request->get('description') . ' ' . $description, 'description' => $request->get('description') . ' ' . $description,
]), data_get($perm, 'id')); ], data_get($perm, 'id'));
} }
Session::flash('success', "Permission ". (is_null($id) ? 'créée' : 'modifiée') ." avec succès"); Session::flash('success', "Permission " . (is_null($id) ? 'créée' : 'modifiée') . " avec succès");
return Redirect::route('modulus.user.permission.index'); return Redirect::route('modulus.user.permission.index');
} }
...@@ -138,5 +137,4 @@ class PermissionController extends Controller ...@@ -138,5 +137,4 @@ class PermissionController extends Controller
return Redirect::route('modulus.user.permission.index'); return Redirect::route('modulus.user.permission.index');
} }
} }
...@@ -49,11 +49,11 @@ class RoleController extends Controller ...@@ -49,11 +49,11 @@ class RoleController extends Controller
'Rôles' => null 'Rôles' => null
); );
return view('modulus::app.user.role.list')->with([ return view('modulus::app.user.role.list')->with([
'title' => '<i class="fa fa-tags mr-1" aria-hidden="true"></i>Rôles', 'title' => '<i class="fa fa-tags mr-1" aria-hidden="true"></i>Rôles',
'breadcrumb' => $breadcrumb, 'breadcrumb' => $breadcrumb,
'roles' => $roles, 'roles' => $roles,
]); ]);
} }
public function create() public function create()
...@@ -84,9 +84,14 @@ class RoleController extends Controller ...@@ -84,9 +84,14 @@ class RoleController extends Controller
{ {
$role = $this->role_repo->findOrFail($id); $role = $this->role_repo->findOrFail($id);
$perms = $this->permission_repo->all(); $roles = $this->role_repo->findAllBy('name', $role->name);
$permissions = $this->formatPermissions($perms); $role->perms = collect();
foreach ($roles as $r) {
$role->perms = $role->perms->merge($r->permissions);
}
$permissions = $this->formatPermissions($this->permission_repo->all());
$breadcrumb = array( $breadcrumb = array(
'Accueil' => route('modulus.dashboard'), 'Accueil' => route('modulus.dashboard'),
...@@ -107,10 +112,10 @@ class RoleController extends Controller ...@@ -107,10 +112,10 @@ class RoleController extends Controller
private function formatPermissions($perms) private function formatPermissions($perms)
{ {
$permissions = []; $permissions = [];
// Traitement sur les permissions // Traitement sur les permissions web
$perms->each(function($item, $key) use (&$permissions) { $perms->where('guard_name', 'web')->each(function ($item, $key) use (&$permissions) {
// Si la permission est conforme // Si la permission est conforme
if (preg_match('/-(.[^-]+)$/i', $item->name, $match)) { if (preg_match('/-(.[^-]+)$/i', $item->name, $match)) {
...@@ -124,8 +129,25 @@ class RoleController extends Controller ...@@ -124,8 +129,25 @@ class RoleController extends Controller
$name = trim(str_ireplace($perm, '', $item->display_name)); $name = trim(str_ireplace($perm, '', $item->display_name));
$permissions[$name][$perm] = $item->id; $permissions['web'][$name][$perm] = $item->id;
});
// Traitement sur les permissions api
$perms->where('guard_name', 'api')->each(function ($item, $key) use (&$permissions) {
// Si la permission est conforme
if (preg_match('/-(.[^-]+)$/i', $item->name, $match)) {
$group = str_replace($match[0], '', $item->name);
$perm = $match[1];
} else {
$group = $item->name;
$perm = 'other';
}
$name = trim(str_ireplace($perm, '', $item->display_name));
$permissions['api'][$name][$perm] = $item->id;
}); });
return $permissions; return $permissions;
...@@ -133,11 +155,11 @@ class RoleController extends Controller ...@@ -133,11 +155,11 @@ class RoleController extends Controller
public function store(RoleStoreRequest $request, $id = null) public function store(RoleStoreRequest $request, $id = null)
{ {
$role_data = collect($request->except(['_token'])); $role_data = $request->except(['_token']);
$this->role_repo->store($role_data, $id); $this->role_repo->store($role_data, $id);
Session::flash('success', "Rôle ". (is_null($id) ? 'crée' : 'modifié') ." avec succès"); Session::flash('success', "Rôle " . (is_null($id) ? 'crée' : 'modifié') . " avec succès");
return Redirect::route('modulus.user.role.index'); return Redirect::route('modulus.user.role.index');
} }
...@@ -150,5 +172,4 @@ class RoleController extends Controller ...@@ -150,5 +172,4 @@ class RoleController extends Controller
return Redirect::route('modulus.user.role.index'); return Redirect::route('modulus.user.role.index');
} }
} }
...@@ -2,17 +2,17 @@ ...@@ -2,17 +2,17 @@
namespace Goldenscarab\Modulus\App\Http\Controllers\App; namespace Goldenscarab\Modulus\App\Http\Controllers\App;
use App\Http\Controllers\Controller;
use Illuminate\Support\Str; use Illuminate\Support\Str;
use Illuminate\Http\Request; use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB; use Illuminate\Support\Facades\DB;
use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\Hash; use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Facades\Mail; use Illuminate\Support\Facades\Mail;
use Maatwebsite\Excel\Facades\Excel; use Maatwebsite\Excel\Facades\Excel;
use Goldenscarab\Modulus\App\Mail\SendActiveAccountRequest;
use Goldenscarab\Modulus\App\Http\Requests\UserStoreRequest;
use Illuminate\Support\Facades\Session; use Illuminate\Support\Facades\Session;
use Illuminate\Support\Facades\Redirect; use Illuminate\Support\Facades\Redirect;
use Goldenscarab\Modulus\App\Http\Requests\UserStoreRequest;
use Goldenscarab\Modulus\App\Mails\SendActiveAccountRequest;
use Goldenscarab\Modulus\App\Http\Repositories\RoleRepository; use Goldenscarab\Modulus\App\Http\Repositories\RoleRepository;
use Goldenscarab\Modulus\App\Http\Repositories\UserRepository; use Goldenscarab\Modulus\App\Http\Repositories\UserRepository;
use Goldenscarab\Modulus\App\Http\Requests\ProfileStoreRequest; use Goldenscarab\Modulus\App\Http\Requests\ProfileStoreRequest;
...@@ -113,7 +113,7 @@ class UserController extends Controller ...@@ -113,7 +113,7 @@ class UserController extends Controller
public function store(UserStoreRequest $request, $id = null) public function store(UserStoreRequest $request, $id = null)
{ {
// On récupère les données utilisateur // On récupère les données utilisateur
$user_data = collect($request->except(['_token'])); $user_data = $request->except(['_token']);
// On sauvegarde les données utilisateur // On sauvegarde les données utilisateur
$user = $this->user_repo->store($user_data, $id); $user = $this->user_repo->store($user_data, $id);
...@@ -185,15 +185,15 @@ class UserController extends Controller ...@@ -185,15 +185,15 @@ class UserController extends Controller
} }
// Création du document Excel // Création du document Excel
Excel::create($file_name, function($excel) use ($datas_export) { Excel::create($file_name, function ($excel) use ($datas_export) {
// Paramétrage du tableau Excel // Paramétrage du tableau Excel
$excel->setTitle("Export du ". date('d/m/Y H:i:s')); $excel->setTitle("Export du " . date('d/m/Y H:i:s'));
$excel->setCreator('BMV Communication'); $excel->setCreator('BMV Communication');
$excel->setDescription(''); $excel->setDescription('');
// Création d'une nouvelle feuille de calcul // Création d'une nouvelle feuille de calcul
$excel->sheet('Utilisateur', function($sheet) use ($datas_export) { $excel->sheet('Utilisateur', function ($sheet) use ($datas_export) {
// Mise en style de la feuille de calcul // Mise en style de la feuille de calcul
$sheet->setFontFamily('Arial'); $sheet->setFontFamily('Arial');
...@@ -203,11 +203,11 @@ class UserController extends Controller ...@@ -203,11 +203,11 @@ class UserController extends Controller
$sheet->fromArray($datas_export, null, 'A1'); $sheet->fromArray($datas_export, null, 'A1');
// Ajout d'une ligne d'entête // Ajout d'une ligne d'entête
$sheet->prependRow(1, ["Export du ". date('d/m/Y H:i:s')]); $sheet->prependRow(1, ["Export du " . date('d/m/Y H:i:s')]);
$sheet->prependRow(2, [""]); $sheet->prependRow(2, [""]);
// Mise à caractère gras des titres (ligne 3) // Mise à caractère gras des titres (ligne 3)
$sheet->row(3, function($row) { $sheet->row(3, function ($row) {
$row->setFontWeight('bold'); $row->setFontWeight('bold');
}); });
...@@ -230,7 +230,7 @@ class UserController extends Controller ...@@ -230,7 +230,7 @@ class UserController extends Controller
public function profilPost(ProfileStoreRequest $request) public function profilPost(ProfileStoreRequest $request)
{ {
$data = collect($request->except(['_token'])); $data = $request->except(['_token']);
$user = $this->user_repo->store($data, auth()->user()->id); $user = $this->user_repo->store($data, auth()->user()->id);
Session::flash('success', "Profil enregistré avec succès"); Session::flash('success', "Profil enregistré avec succès");
...@@ -273,5 +273,4 @@ class UserController extends Controller ...@@ -273,5 +273,4 @@ class UserController extends Controller
// On envoi le mail de notification d'activation de compte // On envoi le mail de notification d'activation de compte
Mail::to($user->email)->queue(new SendActiveAccountRequest($user, $reset_token)); Mail::to($user->email)->queue(new SendActiveAccountRequest($user, $reset_token));
} }
} }
...@@ -7,120 +7,120 @@ use Illuminate\Support\Collection; ...@@ -7,120 +7,120 @@ use Illuminate\Support\Collection;
use Illuminate\Support\Facades\Cache; use Illuminate\Support\Facades\Cache;
class ModuleRepository implements RepositoryInterface { class ModuleRepository implements RepositoryInterface
{
public function all($columns = array('*'))
{ public function all($columns = array('*'))
return Module::select($columns)->get(); {
} return Module::select($columns)->get();
}
public function new()
{ public function new()
return new Module; {
} return new Module;
}
public function published($columns = array('*'))
{ public function published($columns = array('*'))
return false; {
} return false;
}
public function list($filter, $sort = 'asc', $per_page = 15, $search = "")
{ public function list($filter, $sort = 'asc', $per_page = 15, $search = "")
return Module::search($search)->orderBy($filter, $sort)->paginate($per_page); {
} return Module::search($search)->orderBy($filter, $sort)->paginate($per_page);
}
public function allByPosition()
{ public function allByPosition()
return Module::orderBy('priority', 'desc')->get(); {
} return Module::orderBy('priority', 'desc')->get();
}
public function store(Collection $data, $id = null)
{ public function store(array $data, $id = null)
if (is_null($id)) { {
$config = new Module; if (is_null($id)) {
} else { $config = new Module;
$config = Module::findOrFail($id); } else {
} $config = Module::findOrFail($id);
}
$config->name = $data->get('name');
$config->slug = $data->get('slug'); $config->name = data_get($data, 'name');
$config->menu = $data->get('menu'); $config->slug = data_get($data, 'slug');
$config->priority = $data->get('priority'); $config->menu = data_get($data, 'menu');
$config->priority = data_get($data, 'priority');
$config->save(); $config->save();
Cache::forget('module.configs'); Cache::forget('module.configs');
return $config; return $config;
} }
public function find($id, $columns = array('*')) public function find($id, $columns = array('*'))
{ {
return Module::select($columns)->find($id); return Module::select($columns)->find($id);
} }
public function findOrFail($id, $columns = array('*')) public function findOrFail($id, $columns = array('*'))
{ {
return Module::select($columns)->findOrFail($id); return Module::select($columns)->findOrFail($id);
} }
public function findBy($field, $value, $columns = array('*')) public function findBy($field, $value, $columns = array('*'))
{ {
return Module::select($columns)->where($field, '=', $value)->first(); return Module::select($columns)->where($field, '=', $value)->first();
} }
public function findOrFailBy($field, $value, $columns = array('*')) public function findOrFailBy($field, $value, $columns = array('*'))
{ {
return Module::select($columns)->where($field, '=', $value)->firstOrFail(); return Module::select($columns)->where($field, '=', $value)->firstOrFail();
} }
public function findAllBy($field, $value, $columns = array('*')) public function findAllBy($field, $value, $columns = array('*'))
{ {
return Module::select($columns)->where($field, '=', $value)->get(); return Module::select($columns)->where($field, '=', $value)->get();
} }
public function findWhere($where, $columns = array('*')) public function findWhere($where, $columns = array('*'))
{ {
return Module::select($columns)->whereRaw($where)->get(); return Module::select($columns)->whereRaw($where)->get();
} }
public function search($search) public function search($search)
{ {
return Module::search($search)->orderBy('position', 'asc')->get(); return Module::search($search)->orderBy('position', 'asc')->get();
} }
public function destroy($slug) public function destroy($slug)
{ {
$config = Module::where('slug', $slug)->delete(); $config = Module::where('slug', $slug)->delete();
Cache::forget('module.configs'); Cache::forget('module.configs');
return false; return false;
} }
public function first() public function first()
{ {
return Module::first(); return Module::first();
} }
public function lasts($limit) public function lasts($limit)
{ {
return Module::latest()->limit($limit)->get(); return Module::latest()->limit($limit)->get();
} }
public function duplicate($id) public function duplicate($id)
{ {
return false; return false;
} }
private function calcNextPosition() private function calcNextPosition()
{ {
$config = Module::orderBy('position', 'desc')->first(); $config = Module::orderBy('position', 'desc')->first();
if (is_null($config)) { if (is_null($config)) {
return 1; return 1;
} }
return $config->position + 1;
}
return $config->position + 1;
}
} }
...@@ -6,108 +6,109 @@ use Goldenscarab\Modulus\App\Models\Permission; ...@@ -6,108 +6,109 @@ use Goldenscarab\Modulus\App\Models\Permission;
use Illuminate\Support\Collection; use Illuminate\Support\Collection;
class PermissionRepository implements RepositoryInterface { class PermissionRepository implements RepositoryInterface
{
public function all($columns = array('*'))
{ public function all($columns = array('*'))
return Permission::select($columns)->get(); {
} return Permission::select($columns)->get();
}
public function new()
{ public function new()
return new Permission; {
} return new Permission;
}
public function published($columns = array('*'))
{ public function published($columns = array('*'))
return false; {
} return false;
}
public function list($filter, $sort = 'asc', $per_page = 15, $search = "")
{ public function list($filter, $sort = 'asc', $per_page = 15, $search = "")
return Permission::where(function($query) use ($search) { {
if (!empty($search)) { return Permission::where(function ($query) use ($search) {
$query->where('name', 'LIKE','%' . $search . '%') if (!empty($search)) {
->orWhere('display_name', 'LIKE','%' . $search . '%') $query->where('name', 'LIKE', '%' . $search . '%')
->orWhere('description', 'LIKE','%' . $search . '%'); ->orWhere('display_name', 'LIKE', '%' . $search . '%')
} ->orWhere('description', 'LIKE', '%' . $search . '%');
})->orderBy($filter, $sort)->paginate($per_page); }
} })->orderBy($filter, $sort)->paginate($per_page);
}
public function store(Collection $data, $id = null)
{ public function store(array $data, $id = null)
if (is_null($id)) { {
$permission = new Permission; if (is_null($id)) {
} else { $permission = new Permission;
$permission = Permission::findOrFail($id); } else {
} $permission = Permission::findOrFail($id);
}
$permission->name = $data->get('name');
//$permission->guard_name = $data->get('guard_name'); $permission->name = data_get($data, 'name');
$permission->display_name = $data->get('display_name'); $permission->guard_name = data_get($data, 'guard_name', 'web');
$permission->description = $data->get('description'); $permission->display_name = data_get($data, 'display_name');
$permission->save(); $permission->description = data_get($data, 'description');
$permission->save();
return $permission; return $permission;
} }
public function find($id, $columns = array('*')) public function find($id, $columns = array('*'))
{ {
return Permission::select($columns)->find($id); return Permission::select($columns)->find($id);
} }
public function findOrFail($id, $columns = array('*')) public function findOrFail($id, $columns = array('*'))
{ {
return Permission::select($columns)->findOrFail($id); return Permission::select($columns)->findOrFail($id);
} }
public function findBy($field, $value, $columns = array('*')) public function findBy($field, $value, $columns = array('*'))
{ {
return Permission::select($columns)->where($field, '=', $value)->first(); return Permission::select($columns)->where($field, '=', $value)->first();
} }
public function findOrFailBy($field, $value, $columns = array('*')) public function findOrFailBy($field, $value, $columns = array('*'))
{ {
return Permission::select($columns)->where($field, '=', $value)->firstOrFail(); return Permission::select($columns)->where($field, '=', $value)->firstOrFail();
} }
public function findAllBy($field, $value, $columns = array('*')) public function findAllBy($field, $value, $columns = array('*'))
{ {
return Permission::select($columns)->where($field, '=', $value)->get(); return Permission::select($columns)->where($field, '=', $value)->get();
} }
public function findWhere($where, $columns = array('*')) public function findWhere($where, $columns = array('*'))
{ {
return Permission::select($columns)->whereRaw($where)->get(); return Permission::select($columns)->whereRaw($where)->get();
} }
public function destroy($id) public function destroy($id)
{ {
return Permission::findOrFail($id)->delete(); return Permission::findOrFail($id)->delete();
} }
public function first() public function first()
{ {
return Permission::first(); return Permission::first();
} }
public function lasts($limit) public function lasts($limit)
{ {
return Permission::latest()->limit($limit)->get(); return Permission::latest()->limit($limit)->get();
} }
public function search($search) public function search($search)
{ {
return Permission::search($search)->get(); return Permission::search($search)->get();
} }
public function truncate() public function truncate()
{ {
return Permission::truncate(); return Permission::truncate();
} }
public function duplicate($id) public function duplicate($id)
{ {
return false; return false;
} }
} }
...@@ -7,35 +7,29 @@ use Illuminate\Support\Collection; ...@@ -7,35 +7,29 @@ use Illuminate\Support\Collection;
interface RepositoryInterface interface RepositoryInterface
{ {
public function all($columns = array('*')); public function all($columns = array('*'));
public function list($filter, $sort = 'asc', $per_page = 15, $search = ""); public function list($filter, $sort = 'asc', $per_page = 15, $search = "");
public function published($columns = array('*')); public function new();
public function new(); public function store(array $data, $id);
public function store(Collection $data, $id); public function find($id, $columns = array('*'));
public function find($id, $columns = array('*')); public function findOrFail($id, $columns = array('*'));
public function findOrFail($id, $columns = array('*')); public function findBy($field, $value, $columns = array('*'));
public function findBy($field, $value, $columns = array('*')); public function findOrFailBy($field, $value, $columns = array('*'));
public function findOrFailBy($field, $value, $columns = array('*')); public function findAllBy($field, $value, $columns = array('*'));
public function findAllBy($field, $value, $columns = array('*')); public function findWhere($where, $columns = array('*'));
public function findWhere($where, $columns = array('*')); public function first();
public function first(); public function duplicate($id);
public function lasts($limit); public function destroy($id);
public function search($search);
public function duplicate($id);
public function destroy($id);
} }
...@@ -6,116 +6,150 @@ use Spatie\Permission\Models\Role; ...@@ -6,116 +6,150 @@ use Spatie\Permission\Models\Role;
use Illuminate\Support\Collection; use Illuminate\Support\Collection;
class RoleRepository implements RepositoryInterface { class RoleRepository implements RepositoryInterface
{
public function all($columns = array('*'))
{ public function all($columns = array('*'))
return Role::select($columns)->get(); {
} return Role::select($columns)->get();
}
public function new()
{ public function new()
return new Role; {
} return new Role;
}
public function published($columns = array('*'))
{ public function published($columns = array('*'))
return false; {
} return false;
}
public function list($filter, $sort = 'asc', $per_page = 15, $search = "")
{ public function list($filter, $sort = 'asc', $per_page = 15, $search = "")
return Role::where(function($query) use ($search) { {
if (!empty($search)) { return Role::where(function ($query) use ($search) {
$query->where('name', 'LIKE','%' . $search . '%') if (!empty($search)) {
->orWhere('display_name', 'LIKE','%' . $search . '%') $query->where('name', 'LIKE', '%' . $search . '%')
->orWhere('description', 'LIKE','%' . $search . '%'); ->orWhere('display_name', 'LIKE', '%' . $search . '%')
} ->orWhere('description', 'LIKE', '%' . $search . '%');
})->orderBy($filter, $sort)->paginate($per_page); }
} })->orderBy($filter, $sort)->get()->unique('name');
}
public function store(Collection $data, $id)
{ public function store(array $data, $id)
if (is_null($id)) { {
$role = new Role; if (is_null($id)) {
} else { $role = new Role;
$role = Role::findOrFail($id);
} $role->name = data_get($data, 'name');
$role->guard_name = 'web';
$role->name = $data->get('name'); $role->display_name = data_get($data, 'display_name');
//$role->guard_name = $data->get('guard_name'); $role->description = data_get($data, 'description');
$role->display_name = $data->get('display_name');
$role->description = $data->get('description'); $role->save();
$role->save(); // Si il y a des permissions à activer
if (isset($data['permissions_web'])) {
// Si il y a des permissions à activer $role->syncPermissions(data_get($data, 'permissions_web'));
if ($data->has('permissions')) { }
$role->syncPermissions($data->get('permissions')); $role = new Role;
}
$role->name = data_get($data, 'name');
$role->guard_name = 'api';
$role->display_name = data_get($data, 'display_name');
$role->description = data_get($data, 'description');
$role->save();
// Si il y a des permissions à activer
if (isset($data['permissions_api'])) {
$role->syncPermissions(data_get($data, 'permissions_api'));
}
} else {
$r = Role::findOrFail($id);
$roles = Role::where('name', $r->name)->get();
foreach($roles as $role) {
$role->name = data_get($data, 'name');
$role->display_name = data_get($data, 'display_name');
$role->description = data_get($data, 'description');
$role->save();
// Si il y a des permissions à activer
if ($role->guard_name == 'web' && isset($data['permissions_web'])) {
$role->syncPermissions(data_get($data, 'permissions_web'));
}
// Si il y a des permissions à activer
if ($role->guard_name == 'api' && isset($data['permissions_api'])) {
$role->syncPermissions(data_get($data, 'permissions_api'));
}
}
}
return $role; return $role;
} }
public function find($id, $columns = array('*')) public function find($id, $columns = array('*'))
{ {
return Role::with('perms')->select($columns)->find($id); return Role::select($columns)->find($id);
} }
public function findOrFail($id, $columns = array('*')) public function findOrFail($id, $columns = array('*'))
{ {
return Role::select($columns)->findOrFail($id); return Role::select($columns)->findOrFail($id);
} }
public function findBy($field, $value, $columns = array('*')) public function findBy($field, $value, $columns = array('*'))
{ {
return Role::with('perms')->select($columns)->where($field, '=', $value)->first(); return Role::select($columns)->where($field, '=', $value)->first();
} }
public function findOrFailBy($field, $value, $columns = array('*')) public function findOrFailBy($field, $value, $columns = array('*'))
{ {
return Role::select($columns)->where($field, '=', $value)->firstOrFail(); return Role::select($columns)->where($field, '=', $value)->firstOrFail();
} }
public function findAllBy($field, $value, $columns = array('*')) public function findAllBy($field, $value, $columns = array('*'))
{ {
return Role::with('perms')->select($columns)->where($field, '=', $value)->get(); return Role::select($columns)->where($field, '=', $value)->get();
} }
public function findWhere($where, $columns = array('*')) public function findWhere($where, $columns = array('*'))
{ {
return Role::with('perms')->select($columns)->whereRaw($where)->get(); return Role::select($columns)->whereRaw($where)->get();
} }
public function search($search) public function search($search)
{ {
return Role::search($search)->get(); return Role::search($search)->get();
} }
public function destroy($id) public function destroy($id)
{ {
return Role::findOrFail($id)->delete(); return Role::findOrFail($id)->delete();
} }
public function first() public function first()
{ {
return Role::first(); return Role::first();
} }
public function lasts($limit) public function lasts($limit)
{ {
return Role::latest()->limit($limit)->get(); return Role::latest()->limit($limit)->get();
} }
public function truncate() public function truncate()
{ {
return Role::truncate(); return Role::truncate();
} }
public function duplicate($id) public function duplicate($id)
{ {
return false; return false;
} }
} }
...@@ -6,142 +6,143 @@ use Goldenscarab\Modulus\App\Models\Tracker; ...@@ -6,142 +6,143 @@ use Goldenscarab\Modulus\App\Models\Tracker;
use Illuminate\Support\Collection; use Illuminate\Support\Collection;
class TrackerRepository implements RepositoryInterface { class TrackerRepository implements RepositoryInterface
{
public function all($columns = array('*'))
{ public function all($columns = array('*'))
return Tracker::select($columns)->orderBy('id', 'desc')->get(); {
} return Tracker::select($columns)->orderBy('id', 'desc')->get();
}
public function list($filter, $sort = 'asc', $per_tracker = 15, $search = "")
{ public function list($filter, $sort = 'asc', $per_tracker = 15, $search = "")
return Tracker::search($search)->orderBy($filter, $sort)->paginate($per_tracker); {
} return Tracker::search($search)->orderBy($filter, $sort)->paginate($per_tracker);
}
public function published($columns = array('*'))
{ public function published($columns = array('*'))
return Tracker::select($columns)->active()->orderBy('title', 'asc')->get(); {
} return Tracker::select($columns)->active()->orderBy('title', 'asc')->get();
}
public function new()
{ public function new()
return new Tracker; {
} return new Tracker;
}
public function store(Collection $data, $id = null)
{ public function store(array $data, $id = null)
if (is_null($id)) { {
$tracker = new Tracker; if (is_null($id)) {
} else { $tracker = new Tracker;
$tracker = Tracker::findOrFail($id); } else {
} $tracker = Tracker::findOrFail($id);
}
$tracker->ip = $data->get('ip');
$tracker->connected_user = $data->get('connected_user'); $tracker->ip = data_get($data, 'ip');
$tracker->request_uri = $data->get('request_uri'); $tracker->connected_user = data_get($data, 'connected_user');
$tracker->request_method = $data->get('request_method'); $tracker->request_uri = data_get($data, 'request_uri');
$tracker->http_user_agent = $data->get('http_user_agent'); $tracker->request_method = data_get($data, 'request_method');
$tracker->provider = $data->get('provider'); $tracker->http_user_agent = data_get($data, 'http_user_agent');
$tracker->zip_code = $data->get('zip_code'); $tracker->provider = data_get($data, 'provider');
$tracker->city = $data->get('city'); $tracker->zip_code = data_get($data, 'zip_code');
$tracker->region_name = $data->get('region_name'); $tracker->city = data_get($data, 'city');
$tracker->country_name = $data->get('country_name'); $tracker->region_name = data_get($data, 'region_name');
$tracker->latitude = $data->get('latitude'); $tracker->country_name = data_get($data, 'country_name');
$tracker->longitude = $data->get('longitude'); $tracker->latitude = data_get($data, 'latitude');
$tracker->screen_width = $data->get('screen_width'); $tracker->longitude = data_get($data, 'longitude');
$tracker->screen_height = $data->get('screen_height'); $tracker->screen_width = data_get($data, 'screen_width');
$tracker->screen_height = data_get($data, 'screen_height');
$tracker->save(); $tracker->save();
return $tracker; return $tracker;
} }
public function find($id, $columns = array('*')) public function find($id, $columns = array('*'))
{ {
return Tracker::select($columns)->find($id); return Tracker::select($columns)->find($id);
} }
public function findOrFail($id, $columns = array('*')) public function findOrFail($id, $columns = array('*'))
{ {
return Tracker::select($columns)->findOrFail($id); return Tracker::select($columns)->findOrFail($id);
} }
public function findBy($field, $value, $columns = array('*')) public function findBy($field, $value, $columns = array('*'))
{ {
return Tracker::select($columns)->where($field, '=', $value)->first(); return Tracker::select($columns)->where($field, '=', $value)->first();
} }
public function findOrFailBy($field, $value, $columns = array('*')) public function findOrFailBy($field, $value, $columns = array('*'))
{ {
return Tracker::select($columns)->where($field, '=', $value)->firstOrFail(); return Tracker::select($columns)->where($field, '=', $value)->firstOrFail();
} }
public function findAllBy($field, $value, $columns = array('*')) public function findAllBy($field, $value, $columns = array('*'))
{ {
return Tracker::select($columns)->where($field, '=', $value)->get(); return Tracker::select($columns)->where($field, '=', $value)->get();
} }
public function findWhere($where, $columns = array('*')) public function findWhere($where, $columns = array('*'))
{ {
return Tracker::select($columns)->whereRaw($where)->get(); return Tracker::select($columns)->whereRaw($where)->get();
} }
public function search($search) public function search($search)
{ {
return Tracker::search($search)->orderBy('lastname', 'asc')->get(); return Tracker::search($search)->orderBy('lastname', 'asc')->get();
} }
public function destroy($id) public function destroy($id)
{ {
return Tracker::findOrFail($id)->delete(); return Tracker::findOrFail($id)->delete();
} }
public function first() public function first()
{ {
return Tracker::first(); return Tracker::first();
} }
public function lasts($limit) public function lasts($limit)
{ {
return Tracker::latest()->limit($limit)->get(); return Tracker::latest()->limit($limit)->get();
} }
public function truncate() public function truncate()
{ {
return Tracker::truncate(); return Tracker::truncate();
} }
public function currentWeek($columns = array('*')) public function currentWeek($columns = array('*'))
{ {
return Tracker::select($columns)->currentWeek()->orderBy('id', 'desc')->get(); return Tracker::select($columns)->currentWeek()->orderBy('id', 'desc')->get();
} }
public function lastWeek($columns = array('*')) public function lastWeek($columns = array('*'))
{ {
return Tracker::select($columns)->lastWeek()->orderBy('id', 'desc')->get(); return Tracker::select($columns)->lastWeek()->orderBy('id', 'desc')->get();
} }
public function currentMonth($columns = array('*')) public function currentMonth($columns = array('*'))
{ {
return Tracker::select($columns)->currentMonth()->orderBy('id', 'asc')->get(); return Tracker::select($columns)->currentMonth()->orderBy('id', 'asc')->get();
} }
public function lastMonth($columns = array('*')) public function lastMonth($columns = array('*'))
{ {
return Tracker::select($columns)->lastMonth()->orderBy('id', 'asc')->get(); return Tracker::select($columns)->lastMonth()->orderBy('id', 'asc')->get();
} }
public function currentYear($columns = array('*')) public function currentYear($columns = array('*'))
{ {
return Tracker::select($columns)->currentMonth()->orderBy('id', 'asc')->get(); return Tracker::select($columns)->currentMonth()->orderBy('id', 'asc')->get();
} }
public function lastYear($columns = array('*')) public function lastYear($columns = array('*'))
{ {
return Tracker::select($columns)->lastMonth()->orderBy('id', 'asc')->get(); return Tracker::select($columns)->lastMonth()->orderBy('id', 'asc')->get();
} }
public function duplicate($id) public function duplicate($id)
{ {
return false; return false;
} }
} }
...@@ -7,138 +7,138 @@ use Illuminate\Support\Str; ...@@ -7,138 +7,138 @@ use Illuminate\Support\Str;
use Illuminate\Support\Collection; use Illuminate\Support\Collection;
class UserRepository implements RepositoryInterface { class UserRepository implements RepositoryInterface
{
public function all($columns = array('*'))
{ public function all($columns = array('*'))
return User::with('roles')->select($columns)->orderBy('lastname', 'asc')->get(); {
} return User::with('roles')->select($columns)->orderBy('lastname', 'asc')->get();
}
public function list($filter, $sort = 'asc', $per_page = 15, $search = "", $role_id = null)
{ public function list($filter, $sort = 'asc', $per_page = 15, $search = "", $role_id = null)
if ($role_id) { {
if ($role_id) {
return User::whereHas('roles', function($query) use ($role_id) {
$query->where('role_id', $role_id); return User::whereHas('roles', function ($query) use ($role_id) {
})->search($search)->orderBy($filter, $sort)->paginate($per_page); $query->where('role_id', $role_id);
} })->search($search)->orderBy($filter, $sort)->paginate($per_page);
}
return User::with('roles')->search($search)->orderBy($filter, $sort)->paginate($per_page);
} return User::with('roles')->search($search)->orderBy($filter, $sort)->paginate($per_page);
}
public function published($columns = array('*'))
{ public function published($columns = array('*'))
return User::active()->select($columns)->orderBy('lastname', 'asc')->get(); {
} return User::active()->select($columns)->orderBy('lastname', 'asc')->get();
}
public function new()
{ public function new()
return new User; {
} return new User;
}
public function store(Collection $data, $id)
{ public function store(array $data, $id)
if (is_null($id)) { {
if (is_null($id)) {
$user = new User; $user = new User;
} else { } else {
$user = User::findOrFail($id); $user = User::findOrFail($id);
} }
$user->api_token = Str::random(60); $user->api_token = Str::random(60);
$user->avatar = $data->get('avatar'); $user->avatar = data_get($data, 'avatar');
$user->lastname = $data->get('lastname'); $user->lastname = data_get($data, 'lastname');
$user->firstname = $data->get('firstname'); $user->firstname = data_get($data, 'firstname');
$user->email = $data->get('email'); $user->email = data_get($data, 'email');
$user->comment = $data->get('comment'); $user->comment = data_get($data, 'comment');
$user->company = $data->get('company'); $user->company = data_get($data, 'company');
$user->activity = $data->get('activity'); $user->activity = data_get($data, 'activity');
$user->telephone = $data->get('telephone'); $user->telephone = data_get($data, 'telephone');
$user->address = $data->get('address'); $user->address = data_get($data, 'address');
$user->zipcode = $data->get('zipcode'); $user->zipcode = data_get($data, 'zipcode');
$user->city = $data->get('city'); $user->city = data_get($data, 'city');
// Si le champs active est donné // Si le champs active est donné
if ($data->has('active')) { if (isset($data['active'])) {
$user->active = $data->get('active'); $user->active = data_get($data, 'active');
} }
// Si le mot de passe est changé // Si le mot de passe est changé
if (!is_null($data->get('password'))) { if (isset($data['password'])) {
$user->password = bcrypt($data->get('password')); $user->password = bcrypt(data_get($data, 'password'));
} }
$user->save(); $user->save();
// Changement du role de l'utilisateur // Changement du role de l'utilisateur
if ($data->has('role')) { if (isset($data['role'])) {
$user->syncRoles($data->get('role')); $user->syncRoles(data_get($data, 'role'));
} }
return $user; return $user;
} }
public function find($id, $columns = array('*')) public function find($id, $columns = array('*'))
{ {
return User::with('roles')->select($columns)->find($id); return User::with('roles')->select($columns)->find($id);
} }
public function findOrFail($id, $columns = array('*')) public function findOrFail($id, $columns = array('*'))
{ {
return User::select($columns)->findOrFail($id); return User::select($columns)->findOrFail($id);
} }
public function findBy($field, $value, $columns = array('*')) public function findBy($field, $value, $columns = array('*'))
{ {
return User::with('roles')->select($columns)->where($field, '=', $value)->first(); return User::with('roles')->select($columns)->where($field, '=', $value)->first();
} }
public function findOrFailBy($field, $value, $columns = array('*')) public function findOrFailBy($field, $value, $columns = array('*'))
{ {
return User::select($columns)->where($field, '=', $value)->firstOrFail(); return User::select($columns)->where($field, '=', $value)->firstOrFail();
} }
public function findAllBy($field, $value, $columns = array('*')) public function findAllBy($field, $value, $columns = array('*'))
{ {
return User::with('roles')->select($columns)->where($field, '=', $value)->get(); return User::with('roles')->select($columns)->where($field, '=', $value)->get();
} }
public function findWhere($where, $columns = array('*')) public function findWhere($where, $columns = array('*'))
{ {
return User::with('roles')->select($columns)->whereRaw($where)->get(); return User::with('roles')->select($columns)->whereRaw($where)->get();
} }
public function search($search) public function search($search)
{ {
return User::search($search)->orderBy('lastname', 'asc')->get(); return User::search($search)->orderBy('lastname', 'asc')->get();
} }
public function destroy($id) public function destroy($id)
{ {
return User::findOrFail($id)->delete(); return User::findOrFail($id)->delete();
} }
public function first() public function first()
{ {
return User::first(); return User::first();
} }
public function lasts($limit) public function lasts($limit)
{ {
return User::latest()->limit($limit)->get(); return User::latest()->limit($limit)->get();
} }
public function truncate() public function truncate()
{ {
return User::truncate(); return User::truncate();
} }
public function duplicate($id) public function duplicate($id)
{ {
return false; return false;
} }
public function getAvatars() public function getAvatars()
{ {
return User::getAvatars(); return User::getAvatars();
} }
} }
<?php
namespace Goldenscarab\Modulus\App\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
class ApiIndexRequest extends FormRequest
{
/**
* Determine if the user is authorized to make this request.
*
* @return bool
*/
public function authorize()
{
return true;
}
/**
* Get the validation rules that apply to the request.
*
* @return array
*/
public function rules()
{
return [
'sort' => 'nullable|string',
'direction' => 'required_with:sort|string',
'perpage' => 'nullable|in:10,50,100,250,500',
'search' => 'nullable|string',
'filter' => 'nullable|string|regex:/^.*:.*$/',
'include' => 'nullable|array'
];
}
/**
* Get custom attributes for validator errors.
*
* @return array
*/
public function attributes()
{
return [];
}
}
...@@ -29,7 +29,7 @@ class RoleStoreRequest extends FormRequest ...@@ -29,7 +29,7 @@ class RoleStoreRequest extends FormRequest
{ {
return [ return [
'name' => 'required|max:254|string|unique:roles,name,' . $this->route('id'), 'name' => 'required|max:254|string',
'display_name' => 'required|max:254|string', 'display_name' => 'required|max:254|string',
'description' => 'nullable|max:254|string', 'description' => 'nullable|max:254|string',
]; ];
......
...@@ -10,80 +10,87 @@ use Goldenscarab\Modulus\App\Http\Repositories\PermissionRepository; ...@@ -10,80 +10,87 @@ use Goldenscarab\Modulus\App\Http\Repositories\PermissionRepository;
class PermissionService class PermissionService
{ {
private $perm_repo; private $perm_repo;
private $role_repo; private $role_repo;
private $types = array( private $types = array(
'read' => 'Lire', 'read' => 'Lire',
'create' => 'Ajouter', 'create' => 'Ajouter',
'update' => 'Modifier', 'update' => 'Modifier',
'delete' => 'Supprimer' 'delete' => 'Supprimer'
); );
public function __construct(PermissionRepository $permission) public function __construct(PermissionRepository $permission)
{ {
$this->perm_repo = $permission; $this->perm_repo = $permission;
$this->role_repo = new RoleRepository; $this->role_repo = new RoleRepository;
} }
public function addPermissionsGroup($display_name) public function addPermissionsGroup($display_name)
{ {
$name = Str::slug($display_name); $name = Str::slug($display_name);
// On vérifie que la permission n'existe pas déja // On vérifie que la permission n'existe pas déja
$perm = $this->perm_repo->findBy('name', $name . '-read'); $perm = $this->perm_repo->findBy('name', $name . '-read');
if($perm) { if ($perm) {
return false; return false;
} }
// On récupère le role admin pour associer les nouvelles permission // On récupère le role admin pour associer les nouvelles permission
$role = $this->role_repo->findOrFailBy('name', 'admin'); $role_web = $this->role_repo->findWhere("name = 'admin' AND guard_name = 'web'")->first();
$role_api = $this->role_repo->findWhere("name = 'admin' AND guard_name = 'api'")->first();
// Pour chaque élements du groupe
foreach ($this->types as $type => $human_type) { // Pour chaque élements du groupe
$data = collect([ foreach ($this->types as $type => $human_type) {
'name' => $name . '-' . $type, $data = [
'display_name' => $display_name . ' ' . ucfirst($type), 'name' => $name . '-' . $type,
'description' => $human_type . ' ' . $display_name 'guard_name' => 'web',
]); 'display_name' => $display_name . ' ' . ucfirst($type),
'description' => $human_type . ' ' . $display_name
// Création de la permission ];
$perm = $this->perm_repo->store($data);
// Création de la permission web
// Ajout de la permission au role admin $perm_web = $this->perm_repo->store($data);
if ($perm) {
$role->givePermissionTo($perm); // Création de la permission api
} $data['guard_name'] = 'api';
$perm_api = $this->perm_repo->store($data);
}
// Ajout de la permission au role admin
return true; if ($perm_web && $perm_api) {
} $role_web->givePermissionTo($perm_web);
$role_api->givePermissionTo($perm_api);
public function deletePermissionsGroup($display_name) }
{ }
return true;
}
public function deletePermissionsGroup($display_name)
{
// On récupère le role admin pour supprimer les permissions // On récupère le role admin pour supprimer les permissions
$role_admin = $this->role_repo->findOrFailBy('name', 'admin'); $role_admin = $this->role_repo->findOrFailBy('name', 'admin');
//$role_edit = $this->role_repo->findOrFailBy('name', 'editeur'); //$role_edit = $this->role_repo->findOrFailBy('name', 'editeur');
// Pour chaque élements du groupe // Pour chaque élements du groupe
foreach ($this->types as $type => $human_type) { foreach ($this->types as $type => $human_type) {
// Construction du nom de la permission // Construction du nom de la permission
$name = Str::slug($display_name) . '-' . $type; $name = Str::slug($display_name) . '-' . $type;
// Récupération de la permission // Récupération de la permission
$perm = $this->perm_repo->findBy('name', $name); $perms = $this->perm_repo->findAllBy('name', $name);
// Si la permission est trouvée, alors on la supprime // Si des permissions sont trouvées, alors on les supprimes
if($perm) { if ($perms->isNotEmpty()) {
$role_admin->revokePermissionTo($perm);
$perm->delete();
}
} foreach($perms as $perm) {
$role_admin->revokePermissionTo($perm);
return true; $perm->delete();
} }
}
}
return true;
}
} }
...@@ -2,10 +2,9 @@ ...@@ -2,10 +2,9 @@
namespace Goldenscarab\Modulus\App\Providers; namespace Goldenscarab\Modulus\App\Providers;
use Goldenscarab\Modulus\App\Console\Modulus\EmailTest;
use Illuminate\Support\ServiceProvider; use Illuminate\Support\ServiceProvider;
use Goldenscarab\Modulus\App\Console\Modulus\EmailTestCommand;
use Goldenscarab\Modulus\App\Console\Modulus\MakeResourceCommand;
class LoadServiceProvider extends ServiceProvider class LoadServiceProvider extends ServiceProvider
{ {
...@@ -18,12 +17,13 @@ class LoadServiceProvider extends ServiceProvider ...@@ -18,12 +17,13 @@ class LoadServiceProvider extends ServiceProvider
{ {
if ($this->app->runningInConsole()) { if ($this->app->runningInConsole()) {
$this->commands([ $this->commands([
EmailTest::class, EmailTestCommand::class,
MakeResourceCommand::class
]); ]);
} }
//$this->loadMigrationsFrom(__DIR__.'/../../database/migrations'); //$this->loadMigrationsFrom(__DIR__.'/../../database/migrations');
$this->loadTranslationsFrom(__DIR__.'/../../resources/lang', 'modulus'); $this->loadTranslationsFrom(__DIR__ . '/../../resources/lang', 'modulus');
$this->loadViewsFrom(__DIR__.'/../../resources/views', 'modulus'); $this->loadViewsFrom(__DIR__ . '/../../resources/views', 'modulus');
} }
} }
<?php
namespace Goldenscarab\Modulus\App\Rules;
use Illuminate\Contracts\Validation\Rule;
class Decimal implements Rule
{
private $precision;
/**
* Create a new rule instance.
*
* @return void
*/
public function __construct($precision = 3)
{
$this->precision = $precision;
}
/**
* Determine if the validation rule passes.
*
* @param string $attribute
* @param mixed $value
* @return bool
*/
public function passes($attribute, $value)
{
return preg_match('#^-?[0-9 ]+([.,][0-9]{0,'. $this->precision .'})?$#', $value) === 1;
}
/**
* Get the validation error message.
*
* @return string
*/
public function message()
{
return "Le champs :attribute doit être de type décimal. ex : 1234," . str_pad(1, $this->precision, 1);
}
}
<?php
namespace Goldenscarab\Modulus\App\Rules;
use Illuminate\Contracts\Validation\Rule;
class Period implements Rule
{
/**
* Create a new rule instance.
*
* @return void
*/
public function __construct()
{
//
}
/**
* Determine if the validation rule passes.
*
* @param string $attribute
* @param mixed $value
* @return bool
*/
public function passes($attribute, $value)
{
return preg_match('/^(0[1-9]|[12][0-9]|3[01])[\/-](0[1-9]|1[0-2])[\/-]\d{4}\s-\s(0[1-9]|[12][0-9]|3[01])[\/-](0[1-9]|1[0-2])[\/-]\d{4}$/', $value);
}
/**
* Get the validation error message.
*
* @return string
*/
public function message()
{
return 'La valeur du champs :attribute ne contient pas une période valide. ex: dd/mm/YY - dd/mm/YY';
}
}
<?php
namespace Goldenscarab\Modulus\App\Rules;
use Illuminate\Contracts\Validation\Rule;
class Siren implements Rule
{
/**
* Create a new rule instance.
*
* @return void
*/
public function __construct()
{
}
/**
* Determine if the validation rule passes.
*
* @param string $attribute
* @param mixed $value
* @return bool
*/
public function passes($attribute, $value)
{
return preg_match('#^[0-9]{3}\s?[0-9]{3}\s?[0-9]{3}$#', $value) === 1;
}
/**
* Get the validation error message.
*
* @return string
*/
public function message()
{
return "Le champs :attribute doit être de type SIREN. ex : 123 123 123";
}
}
<?php
namespace Goldenscarab\Modulus\App\Rules;
use Illuminate\Contracts\Validation\Rule;
class Siret implements Rule
{
/**
* Create a new rule instance.
*
* @return void
*/
public function __construct()
{
}
/**
* Determine if the validation rule passes.
*
* @param string $attribute
* @param mixed $value
* @return bool
*/
public function passes($attribute, $value)
{
return preg_match('#^[0-9]{3}\s?[0-9]{3}\s?[0-9]{3}\s?[0-9]{5,6}$#', $value) === 1;
}
/**
* Get the validation error message.
*
* @return string
*/
public function message()
{
return "Le champs :attribute doit être de type SIRET. ex : 123 123 123 00012";
}
}
...@@ -25,7 +25,7 @@ class Telephone implements Rule ...@@ -25,7 +25,7 @@ class Telephone implements Rule
*/ */
public function passes($attribute, $value) public function passes($attribute, $value)
{ {
return preg_match('/^(\+\d{2}|0)(\d|\s\d){1}([\s|\-|\.]{0,1}[\d]{2}){4}$/', $value); return preg_match('/^(\+\d{2}|0)(\d|\s\d|\s\(0\)\d){1}([\s|\-|\.]{0,1}[\d]{2}){4}$/', $value);
} }
/** /**
......
<?php
namespace Goldenscarab\Modulus\App\Rules;
use Illuminate\Contracts\Validation\Rule;
class Time implements Rule
{
/**
* Create a new rule instance.
*
* @return void
*/
public function __construct()
{
//
}
/**
* Determine if the validation rule passes.
*
* @param string $attribute
* @param mixed $value
* @return bool
*/
public function passes($attribute, $value)
{
return preg_match('/^([0-1]?[0-9]|2[0-3]):[0-5][0-9]$/', $value);
}
/**
* Get the validation error message.
*
* @return string
*/
public function message()
{
return 'La valeur du champs :attribute ne contient pas une heure valide. ex: HH:ii';
}
}
\ No newline at end of file
<?php
namespace Goldenscarab\Modulus\App\Rules;
use Illuminate\Contracts\Validation\Rule;
class ZipcodeFr implements Rule
{
/**
* Create a new rule instance.
*
* @return void
*/
public function __construct()
{
}
/**
* Determine if the validation rule passes.
*
* @param string $attribute
* @param mixed $value
* @return bool
*/
public function passes($attribute, $value)
{
return preg_match('#^[0-9]{5}$#', $value) === 1;
}
/**
* Get the validation error message.
*
* @return string
*/
public function message()
{
return "Le champs :attribute doit être de type code postal. ex : 12345";
}
}
<?php
namespace Goldenscarab\Modulus\App\Support;
class Stub
{
/**
* The stub path.
*
* @var string
*/
protected $path;
/**
* The base path of stub file.
*
* @var null|string
*/
protected static $basePath = null;
/**
* The replacements array.
*
* @var array
*/
protected $replaces = [];
/**
* The contructor.
*
* @param string $path
* @param array $replaces
*/
public function __construct($path, array $replaces = [])
{
$this->path = $path;
$this->replaces = $replaces;
}
/**
* Create new self instance.
*
* @param string $path
* @param array $replaces
*
* @return self
*/
public static function create($path, array $replaces = [])
{
return new static($path, $replaces);
}
/**
* Set stub path.
*
* @param string $path
*
* @return self
*/
public function setPath($path)
{
$this->path = $path;
return $this;
}
/**
* Get stub path.
*
* @return string
*/
public function getPath()
{
$path = static::getBasePath() . $this->path;
return file_exists($path) ? $path : __DIR__ . '/../Console/Modulus/stubs/' . $this->path;
}
/**
* Set base path.
*
* @param string $path
*/
public static function setBasePath($path)
{
static::$basePath = $path;
}
/**
* Get base path.
*
* @return string|null
*/
public static function getBasePath()
{
return static::$basePath;
}
/**
* Get stub contents.
*
* @return mixed|string
*/
public function getContents()
{
$contents = file_get_contents($this->getPath());
foreach ($this->replaces as $search => $replace) {
$contents = str_replace('$' . strtoupper($search) . '$', $replace, $contents);
}
return $contents;
}
/**
* Get stub contents.
*
* @return string
*/
public function render()
{
return $this->getContents();
}
/**
* Save stub to specific path.
*
* @param string $path
* @param string $filename
*
* @return bool
*/
public function saveTo($path, $filename)
{
return file_put_contents($path . '/' . $filename, $this->getContents());
}
/**
* Set replacements array.
*
* @param array $replaces
*
* @return $this
*/
public function replace(array $replaces = [])
{
$this->replaces = $replaces;
return $this;
}
/**
* Get replacements.
*
* @return array
*/
public function getReplaces()
{
return $this->replaces;
}
/**
* Handle magic method __toString.
*
* @return string
*/
public function __toString()
{
return $this->render();
}
}
<?php
namespace Goldenscarab\Modulus\App\Traits;
use Illuminate\Support\Str;
use Illuminate\Database\Eloquent\Builder;
trait ModelFilterable
{
/**
* Filtre depuis une colonne
* TODO - Ajout de sécurité (paramètre $filterable, dans le modèle)
*
* Syntax : [relation].[colonne]|[operator]|[value]
*
* Exemples :
* - $query->filter('colonne|=|value')->get();
* - $query->filter('relation.colonne|!=|value')->get();
* - $query->filter('relation1.relation2.colonne|>|value')->get();
*
* @param Builder $query
* @param string $filter
* @return Builder
*/
public function scopeFilter(Builder $query, $filter = null)
{
if (is_null($filter) || !Str::contains($filter, '|')) {
return $query;
}
$splited = explode('|', $filter);
$column = $splited[0];
$operator = $splited[1];
$value = $splited[2];
if (Str::contains($column, '.')) {
$this->relationFilter($query, $column, $operator, $value);
} else {
return $query->where($column, $operator, $value);
}
}
private function relationFilter(Builder $query, $column, $operator, $value)
{
preg_match('/([^.]*)\.(.*)/', $column, $match);
$relation = $match[1];
$target = $match[2];
$_this = $this;
$query->whereHas($relation, function ($query) use ($target, $value, &$_this, $operator) {
if (Str::contains($target, '.')) {
$_this->relationFilter($query, $target, $operator, $value);
} else {
$table = $query->getModel()->getTable();
$query->where($table . '.' . $target, $operator, $value);
}
});
}
}
<?php
namespace Goldenscarab\Modulus\App\Traits;
use Illuminate\Support\Str;
use Illuminate\Database\Eloquent\Builder;
trait ModelSearchable
{
/**
* Recherche dans colonne
*
* @param Builder $query
* @param String $search
* @return Builder
*/
public function scopeSearch(Builder $query, $search)
{
if (is_null($search)) return $query;
// Pour rechercher tous les mots d'une phrase dans le champs
$search = str_replace(' ', '%', $search);
$_this = $this;
foreach ($this->searchable as $key => $column) {
$method = $key == 0 ? 'where' : 'orWhere';
if (Str::contains($column, '.')) {
$query->{$method}(function ($query) use (&$_this, $column, $search) {
$_this->relationSearch($query, $column, $search);
});
} else {
$query->{$method}($column, 'LIKE', '%' . $search . '%');
}
}
return $query;
}
private function relationSearch(Builder $query, $column, $search)
{
preg_match('/([^.]*)\.(.*)/', $column, $match);
$relation = $match[1];
$target = $match[2];
$_this = $this;
$query->whereHas($relation, function ($query) use ($target, $search, &$_this) {
if (Str::contains($target, '.')) {
$_this->relationSearch($query, $target, $search);
} else {
$table = $query->getModel()->getTable();
$query->where($table . '.' . $target, 'LIKE', '%' . $search . '%');
}
});
}
}
This diff is collapsed.
This diff is collapsed.
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment