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;
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
*/
public function index(Request $request)
{
$sort = $request->get('sort', 'id');
$direction = $request->get('direction', 'asc');
$persmall = $request->get('perpage', 15);
$search = $request->get('search');
$sort = $request->get('sort', 'id');
$direction = $request->get('direction', 'asc');
$perpage = $request->get('perpage', 15);
$search = $request->get('search');
$filter = $request->get('filter');
$include = $request->get('include');
$smalls = $this->small_repo->list($sort, $direction, $persmall, $search);
$smalls->load('user');
$resources = $this->repository->list($sort, $direction, $perpage, $search, $filter);
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
*/
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
return response()->json($small)->header('Cache-Control', 'max-age=60');
return response()->json($resource);
}
/**
......
......@@ -24,7 +24,7 @@ class ConfigController extends Controller
'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',
'subtitle' => 'Configuration',
'config' => $config,
......
......@@ -7,21 +7,22 @@ use Illuminate\Http\Request;
use Illuminate\Routing\Controller;
use Maatwebsite\Excel\Facades\Excel;
use Modules\Small\Exports\SmallExport;
use Illuminate\Support\Facades\Session;
use Illuminate\Support\Facades\Redirect;
use Illuminate\Support\Facades\Response;
use Illuminate\Contracts\Support\Renderable;
use Modules\Small\Exports\SmallExport;
use Modules\Small\Http\Requests\SmallStoreRequest;
use Modules\Small\Http\Repositories\SmallRepository;
class SmallController extends Controller
{
private $small_repo;
private $repository;
public function __construct(SmallRepository $small)
{
$this->small_repo = $small;
$this->repository = $small;
// Définition des permissions par méthode
$this->middleware('permission:module-small-read')->only(['index']);
......@@ -43,8 +44,8 @@ class SmallController extends Controller
'Exemples' => null
);
return view('small::app.small.index')->with([
'title' => '<i class="fa fa-magic mr-1" aria-hidden="true"></i>Exemples',
return view('small::small.index')->with([
'title' => '<i class="fa fa-magic mr-2" aria-hidden="true"></i>Exemples',
'breadcrumb' => $breadcrumb,
]);
}
......@@ -55,7 +56,7 @@ class SmallController extends Controller
*/
public function create()
{
$small = $this->small_repo->new();
$small = $this->repository->new();
$breadcrumb = array(
'Accueil' => route('modulus.dashboard'),
......@@ -63,8 +64,8 @@ class SmallController extends Controller
'Ajouter' => null
);
return view('small::app.small.form')->with([
'title' => '<i class="fa fa-magic mr-1" aria-hidden="true"></i>Exemples',
return view('small::small.form')->with([
'title' => '<i class="fa fa-magic mr-2" aria-hidden="true"></i>Exemples',
'action' => '<i class="fa fa-plus mr-2"></i>Création',
'breadcrumb' => $breadcrumb,
'item' => $small
......@@ -78,7 +79,7 @@ class SmallController extends Controller
*/
public function edit($id)
{
$small = $this->small_repo->findOrFail($id);
$small = $this->repository->findOrFail($id);
$breadcrumb = array(
......@@ -87,8 +88,8 @@ class SmallController extends Controller
'Modifier' => null
);
return view('small::app.small.form')->with([
'title' => '<i class="fa fa-magic mr-1"></i>Exemples',
return view('small::small.form')->with([
'title' => '<i class="fa fa-magic mr-2"></i>Exemples',
'action' => '<i class="fa fa-plus mr-2"></i>Modification',
'breadcrumb' => $breadcrumb,
'item' => $small
......@@ -113,7 +114,7 @@ class SmallController extends Controller
*/
public function show(Request $request, $id)
{
$small = $this->small_repo->findOrFail($id);
$small = $this->repository->findOrFail($id);
$breadcrumb = array(
'Accueil' => route('modulus.dashboard'),
......@@ -121,8 +122,8 @@ class SmallController extends Controller
'Voir' => null
);
return view('small::app.small.show')->with([
'title' => '<i class="fa fa-magic mr-1"></i>Exemples',
return view('small::small.show')->with([
'title' => '<i class="fa fa-magic mr-2"></i>Exemples',
'subtitle' => $small->name,
'breadcrumb' => $breadcrumb,
'item' => $small
......@@ -133,24 +134,30 @@ class SmallController extends Controller
* Update the specified resource in storage.
* @param SmallStoreRequest $request
* @param int $id
* @return Renderable
* @return Redirect
*/
public function update(SmallStoreRequest $request, $id)
{
$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");
return Redirect::route('module.small.index');
}
/**
* Duplicate the specified resource in storage
*
* @param int $id
* @return Redirect
*/
public function duplicate($id)
{
$this->checkPermissionAccess($id);
$this->small_repo->duplicate($id);
$this->repository->duplicate($id);
Session::flash('success', "Exemple dupliqué avec succès");
......@@ -160,13 +167,13 @@ class SmallController extends Controller
/**
* Remove the specified resource from storage.
* @param int $id
* @return Renderable
* @return Redirect
*/
public function destroy($id)
{
$this->checkPermissionAccess($id);
$this->small_repo->destroy($id);
$this->repository->destroy($id);
Session::flash('success', 'Exemple supprimé avec succès');
......@@ -177,7 +184,7 @@ class SmallController extends Controller
* Exporte les données de la exemple
*
* @param int $id
* @return void
* @return Response
*/
public function export()
{
......
......@@ -8,35 +8,17 @@ use Modules\Small\Models\Small;
use Goldenscarab\Modulus\App\Http\Repositories\RepositoryInterface;
class SmallRepository implements RepositoryInterface {
class SmallRepository implements RepositoryInterface
{
public function all($columns = array('*'))
{
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
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;
return Small::search($search)->filter($filter)->sortBy($sorting, $direction)->paginate($perpage);
}
public function published($columns = array('*'))
......@@ -52,17 +34,17 @@ class SmallRepository implements RepositoryInterface {
public function store(Collection $data, $id = null)
{
if (is_null($id)) {
$small = new Small;
$resource = new Small;
} else {
$small = Small::findOrFail($id);
$resource = Small::findOrFail($id);
}
$small->name = $data->get('name');
$small->user_id = $data->get('user_id');
$resource->name = $data->get('name');
$resource->user_id = $data->get('user_id');
$small->save();
$resource->save();
return $small;
return $resource;
}
public function find($id, $columns = array('*'))
......@@ -118,8 +100,8 @@ class SmallRepository implements RepositoryInterface {
public function duplicate($id)
{
$item = Small::findOrFail($id);
$clone = $item->replicate();
$resource = Small::findOrFail($id);
$clone = $resource->replicate();
$availables = ['title', 'name', 'label', 'slug'];
......@@ -144,13 +126,13 @@ class SmallRepository implements RepositoryInterface {
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 $item->position + 1;
return $resource->position + 1;
}
}
......@@ -2,14 +2,18 @@
namespace Modules\Small\Models;
use Illuminate\Database\Eloquent\Model;
use Goldenscarab\Modulus\App\Models\User;
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
{
use ModelSortable, ModelFilterable, ModelSearchable;
protected $table = 'module_smalls';
protected $fillable = [];
......@@ -23,7 +27,7 @@ class Small extends Model
protected $appends = [];
/* Relation */
/* Relations */
public function user()
{
return $this->belongsTo(User::class, 'user_id');
......
......@@ -42,7 +42,7 @@
];
$params_list = [
'source' => route('api.module.small.index'),
'source' => route('api.module.small.index', ['include' => ['user']),
'menu' => [
'button' => $am->make('[READ]', ['attributes' => ['class' => 'btn-sm btn-success']]),
'dropdown' => [
......
......@@ -5,7 +5,7 @@ namespace Goldenscarab\Modulus\App\Console\Modulus;
use Illuminate\Console\Command;
use Illuminate\Support\Facades\Mail;
class EmailTest extends Command
class EmailTestCommand extends Command
{
/**
* The name and signature of the console 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(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');
});
......
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
$modules = Module::toCollection();
// Désactiver les modules non installé
$modules->each(function(&$m, $key) {
$modules->each(function (&$m, $key) {
// Recherche de la config du module dans modulus
$module = $this->module_repo->findBy('slug', $m->getAlias());
......@@ -69,7 +69,7 @@ class ModuleController extends Controller
});
// 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;
});
......@@ -78,13 +78,13 @@ class ModuleController extends Controller
'Modules' => null
);
return view('modulus::app.module.index')->with([
return view('modulus::app.module.index')->with([
'seo_title' => 'Module liste',
'title' => '<i class="fa fa-puzzle-piece mr-2"></i>Modules',
'subtitle' => 'Liste des modules disponibles',
'breadcrumb' => $breadcrumb,
'modules' => $modules
]);
]);
}
......@@ -115,7 +115,7 @@ class ModuleController extends Controller
'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
PermissionService::addPermissionsGroup('Module ' . $module->getName());
......@@ -165,11 +165,10 @@ class ModuleController extends Controller
'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");
return Redirect::route('modulus.module.index');
}
}
......@@ -47,11 +47,11 @@ class PermissionController extends Controller
'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',
'breadcrumb' => $breadcrumb,
'permissions' => $permissions,
]);
]);
}
public function create()
......@@ -96,8 +96,7 @@ class PermissionController extends Controller
public function store(PermissionStoreRequest $request, $id = null)
{
$permission_data = collect($request->except(['_token']));
$permission_data = $request->except(['_token']);
if (is_null($id)) {
$base_name = $request->get('name');
......@@ -111,14 +110,14 @@ class PermissionController extends Controller
$name = $base_name . '-' . $suffix;
$perm = $this->permission_repo->findBy('name', $name);
$this->permission_repo->store(collect([
$this->permission_repo->store([
'name' => $request->get('name') . '-' . $suffix,
'display_name' => $request->get('display_name') . ' ' . ucfirst($suffix),
'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');
}
......@@ -138,5 +137,4 @@ class PermissionController extends Controller
return Redirect::route('modulus.user.permission.index');
}
}
......@@ -49,11 +49,11 @@ class RoleController extends Controller
'Rôles' => null
);
return view('modulus::app.user.role.list')->with([
'title' => '<i class="fa fa-tags mr-1" aria-hidden="true"></i>Rôles',
return view('modulus::app.user.role.list')->with([
'title' => '<i class="fa fa-tags mr-1" aria-hidden="true"></i>Rôles',
'breadcrumb' => $breadcrumb,
'roles' => $roles,
]);
'roles' => $roles,
]);
}
public function create()
......@@ -84,9 +84,14 @@ class RoleController extends Controller
{
$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(
'Accueil' => route('modulus.dashboard'),
......@@ -107,10 +112,10 @@ class RoleController extends Controller
private function formatPermissions($perms)
{
$permissions = [];
$permissions = [];
// Traitement sur les permissions
$perms->each(function($item, $key) use (&$permissions) {
// Traitement sur les permissions web
$perms->where('guard_name', 'web')->each(function ($item, $key) use (&$permissions) {
// Si la permission est conforme
if (preg_match('/-(.[^-]+)$/i', $item->name, $match)) {
......@@ -124,8 +129,25 @@ class RoleController extends Controller
$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;
......@@ -133,11 +155,11 @@ class RoleController extends Controller
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);
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');
}
......@@ -150,5 +172,4 @@ class RoleController extends Controller
return Redirect::route('modulus.user.role.index');
}
}
......@@ -2,17 +2,17 @@
namespace Goldenscarab\Modulus\App\Http\Controllers\App;
use App\Http\Controllers\Controller;
use Illuminate\Support\Str;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Facades\Mail;
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\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\UserRepository;
use Goldenscarab\Modulus\App\Http\Requests\ProfileStoreRequest;
......@@ -113,7 +113,7 @@ class UserController extends Controller
public function store(UserStoreRequest $request, $id = null)
{
// 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
$user = $this->user_repo->store($user_data, $id);
......@@ -185,15 +185,15 @@ class UserController extends Controller
}
// 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
$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->setDescription('');
// 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
$sheet->setFontFamily('Arial');
......@@ -203,11 +203,11 @@ class UserController extends Controller
$sheet->fromArray($datas_export, null, 'A1');
// 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, [""]);
// Mise à caractère gras des titres (ligne 3)
$sheet->row(3, function($row) {
$sheet->row(3, function ($row) {
$row->setFontWeight('bold');
});
......@@ -230,7 +230,7 @@ class UserController extends Controller
public function profilPost(ProfileStoreRequest $request)
{
$data = collect($request->except(['_token']));
$data = $request->except(['_token']);
$user = $this->user_repo->store($data, auth()->user()->id);
Session::flash('success', "Profil enregistré avec succès");
......@@ -273,5 +273,4 @@ class UserController extends Controller
// On envoi le mail de notification d'activation de compte
Mail::to($user->email)->queue(new SendActiveAccountRequest($user, $reset_token));
}
}
......@@ -7,120 +7,120 @@ use Illuminate\Support\Collection;
use Illuminate\Support\Facades\Cache;
class ModuleRepository implements RepositoryInterface {
public function all($columns = array('*'))
{
return Module::select($columns)->get();
}
public function new()
{
return new Module;
}
public function published($columns = array('*'))
{
return false;
}
public function list($filter, $sort = 'asc', $per_page = 15, $search = "")
{
return Module::search($search)->orderBy($filter, $sort)->paginate($per_page);
}
public function allByPosition()
{
return Module::orderBy('priority', 'desc')->get();
}
public function store(Collection $data, $id = null)
{
if (is_null($id)) {
$config = new Module;
} else {
$config = Module::findOrFail($id);
}
$config->name = $data->get('name');
$config->slug = $data->get('slug');
$config->menu = $data->get('menu');
$config->priority = $data->get('priority');
class ModuleRepository implements RepositoryInterface
{
public function all($columns = array('*'))
{
return Module::select($columns)->get();
}
public function new()
{
return new Module;
}
public function published($columns = array('*'))
{
return false;
}
public function list($filter, $sort = 'asc', $per_page = 15, $search = "")
{
return Module::search($search)->orderBy($filter, $sort)->paginate($per_page);
}
public function allByPosition()
{
return Module::orderBy('priority', 'desc')->get();
}
public function store(array $data, $id = null)
{
if (is_null($id)) {
$config = new Module;
} else {
$config = Module::findOrFail($id);
}
$config->name = data_get($data, 'name');
$config->slug = data_get($data, 'slug');
$config->menu = data_get($data, 'menu');
$config->priority = data_get($data, 'priority');
$config->save();
Cache::forget('module.configs');
return $config;
}
public function find($id, $columns = array('*'))
{
return Module::select($columns)->find($id);
}
public function findOrFail($id, $columns = array('*'))
{
return Module::select($columns)->findOrFail($id);
}
public function findBy($field, $value, $columns = array('*'))
{
return Module::select($columns)->where($field, '=', $value)->first();
}
public function findOrFailBy($field, $value, $columns = array('*'))
{
return Module::select($columns)->where($field, '=', $value)->firstOrFail();
}
public function findAllBy($field, $value, $columns = array('*'))
{
return Module::select($columns)->where($field, '=', $value)->get();
}
public function findWhere($where, $columns = array('*'))
{
return Module::select($columns)->whereRaw($where)->get();
}
public function search($search)
{
return Module::search($search)->orderBy('position', 'asc')->get();
}
public function destroy($slug)
{
}
public function find($id, $columns = array('*'))
{
return Module::select($columns)->find($id);
}
public function findOrFail($id, $columns = array('*'))
{
return Module::select($columns)->findOrFail($id);
}
public function findBy($field, $value, $columns = array('*'))
{
return Module::select($columns)->where($field, '=', $value)->first();
}
public function findOrFailBy($field, $value, $columns = array('*'))
{
return Module::select($columns)->where($field, '=', $value)->firstOrFail();
}
public function findAllBy($field, $value, $columns = array('*'))
{
return Module::select($columns)->where($field, '=', $value)->get();
}
public function findWhere($where, $columns = array('*'))
{
return Module::select($columns)->whereRaw($where)->get();
}
public function search($search)
{
return Module::search($search)->orderBy('position', 'asc')->get();
}
public function destroy($slug)
{
$config = Module::where('slug', $slug)->delete();
Cache::forget('module.configs');
return false;
}
return false;
}
public function first()
{
return Module::first();
}
public function first()
{
return Module::first();
}
public function lasts($limit)
{
return Module::latest()->limit($limit)->get();
}
public function lasts($limit)
{
return Module::latest()->limit($limit)->get();
}
public function duplicate($id)
{
return false;
}
public function duplicate($id)
{
return false;
}
private function calcNextPosition()
{
$config = Module::orderBy('position', 'desc')->first();
private function calcNextPosition()
{
$config = Module::orderBy('position', 'desc')->first();
if (is_null($config)) {
return 1;
}
return $config->position + 1;
}
if (is_null($config)) {
return 1;
}
return $config->position + 1;
}
}
......@@ -6,108 +6,109 @@ use Goldenscarab\Modulus\App\Models\Permission;
use Illuminate\Support\Collection;
class PermissionRepository implements RepositoryInterface {
public function all($columns = array('*'))
{
return Permission::select($columns)->get();
}
public function new()
{
return new Permission;
}
public function published($columns = array('*'))
{
return false;
}
public function list($filter, $sort = 'asc', $per_page = 15, $search = "")
{
return Permission::where(function($query) use ($search) {
if (!empty($search)) {
$query->where('name', 'LIKE','%' . $search . '%')
->orWhere('display_name', 'LIKE','%' . $search . '%')
->orWhere('description', 'LIKE','%' . $search . '%');
}
})->orderBy($filter, $sort)->paginate($per_page);
}
public function store(Collection $data, $id = null)
{
if (is_null($id)) {
$permission = new Permission;
} else {
$permission = Permission::findOrFail($id);
}
$permission->name = $data->get('name');
//$permission->guard_name = $data->get('guard_name');
$permission->display_name = $data->get('display_name');
$permission->description = $data->get('description');
$permission->save();
class PermissionRepository implements RepositoryInterface
{
public function all($columns = array('*'))
{
return Permission::select($columns)->get();
}
public function new()
{
return new Permission;
}
public function published($columns = array('*'))
{
return false;
}
public function list($filter, $sort = 'asc', $per_page = 15, $search = "")
{
return Permission::where(function ($query) use ($search) {
if (!empty($search)) {
$query->where('name', 'LIKE', '%' . $search . '%')
->orWhere('display_name', 'LIKE', '%' . $search . '%')
->orWhere('description', 'LIKE', '%' . $search . '%');
}
})->orderBy($filter, $sort)->paginate($per_page);
}
public function store(array $data, $id = null)
{
if (is_null($id)) {
$permission = new Permission;
} else {
$permission = Permission::findOrFail($id);
}
$permission->name = data_get($data, 'name');
$permission->guard_name = data_get($data, 'guard_name', 'web');
$permission->display_name = data_get($data, 'display_name');
$permission->description = data_get($data, 'description');
$permission->save();
return $permission;
}
public function find($id, $columns = array('*'))
{
return Permission::select($columns)->find($id);
}
public function findOrFail($id, $columns = array('*'))
{
return Permission::select($columns)->findOrFail($id);
}
public function findBy($field, $value, $columns = array('*'))
{
return Permission::select($columns)->where($field, '=', $value)->first();
}
public function findOrFailBy($field, $value, $columns = array('*'))
{
return Permission::select($columns)->where($field, '=', $value)->firstOrFail();
}
public function findAllBy($field, $value, $columns = array('*'))
{
return Permission::select($columns)->where($field, '=', $value)->get();
}
public function findWhere($where, $columns = array('*'))
{
return Permission::select($columns)->whereRaw($where)->get();
}
public function destroy($id)
{
return Permission::findOrFail($id)->delete();
}
public function first()
{
return Permission::first();
}
public function lasts($limit)
{
return Permission::latest()->limit($limit)->get();
}
public function search($search)
{
return Permission::search($search)->get();
}
public function truncate()
{
return Permission::truncate();
}
public function duplicate($id)
{
return false;
}
}
public function find($id, $columns = array('*'))
{
return Permission::select($columns)->find($id);
}
public function findOrFail($id, $columns = array('*'))
{
return Permission::select($columns)->findOrFail($id);
}
public function findBy($field, $value, $columns = array('*'))
{
return Permission::select($columns)->where($field, '=', $value)->first();
}
public function findOrFailBy($field, $value, $columns = array('*'))
{
return Permission::select($columns)->where($field, '=', $value)->firstOrFail();
}
public function findAllBy($field, $value, $columns = array('*'))
{
return Permission::select($columns)->where($field, '=', $value)->get();
}
public function findWhere($where, $columns = array('*'))
{
return Permission::select($columns)->whereRaw($where)->get();
}
public function destroy($id)
{
return Permission::findOrFail($id)->delete();
}
public function first()
{
return Permission::first();
}
public function lasts($limit)
{
return Permission::latest()->limit($limit)->get();
}
public function search($search)
{
return Permission::search($search)->get();
}
public function truncate()
{
return Permission::truncate();
}
public function duplicate($id)
{
return false;
}
}
......@@ -7,35 +7,29 @@ use Illuminate\Support\Collection;
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 search($search);
public function duplicate($id);
public function destroy($id);
public function destroy($id);
}
......@@ -6,116 +6,150 @@ use Spatie\Permission\Models\Role;
use Illuminate\Support\Collection;
class RoleRepository implements RepositoryInterface {
public function all($columns = array('*'))
{
return Role::select($columns)->get();
}
public function new()
{
return new Role;
}
public function published($columns = array('*'))
{
return false;
}
public function list($filter, $sort = 'asc', $per_page = 15, $search = "")
{
return Role::where(function($query) use ($search) {
if (!empty($search)) {
$query->where('name', 'LIKE','%' . $search . '%')
->orWhere('display_name', 'LIKE','%' . $search . '%')
->orWhere('description', 'LIKE','%' . $search . '%');
}
})->orderBy($filter, $sort)->paginate($per_page);
}
public function store(Collection $data, $id)
{
if (is_null($id)) {
$role = new Role;
} else {
$role = Role::findOrFail($id);
}
$role->name = $data->get('name');
//$role->guard_name = $data->get('guard_name');
$role->display_name = $data->get('display_name');
$role->description = $data->get('description');
$role->save();
// Si il y a des permissions à activer
if ($data->has('permissions')) {
$role->syncPermissions($data->get('permissions'));
}
class RoleRepository implements RepositoryInterface
{
public function all($columns = array('*'))
{
return Role::select($columns)->get();
}
public function new()
{
return new Role;
}
public function published($columns = array('*'))
{
return false;
}
public function list($filter, $sort = 'asc', $per_page = 15, $search = "")
{
return Role::where(function ($query) use ($search) {
if (!empty($search)) {
$query->where('name', 'LIKE', '%' . $search . '%')
->orWhere('display_name', 'LIKE', '%' . $search . '%')
->orWhere('description', 'LIKE', '%' . $search . '%');
}
})->orderBy($filter, $sort)->get()->unique('name');
}
public function store(array $data, $id)
{
if (is_null($id)) {
$role = new Role;
$role->name = data_get($data, 'name');
$role->guard_name = 'web';
$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_web'])) {
$role->syncPermissions(data_get($data, 'permissions_web'));
}
$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;
}
public function find($id, $columns = array('*'))
{
return Role::with('perms')->select($columns)->find($id);
}
public function findOrFail($id, $columns = array('*'))
{
return Role::select($columns)->findOrFail($id);
}
public function findBy($field, $value, $columns = array('*'))
{
return Role::with('perms')->select($columns)->where($field, '=', $value)->first();
}
public function findOrFailBy($field, $value, $columns = array('*'))
{
return Role::select($columns)->where($field, '=', $value)->firstOrFail();
}
public function findAllBy($field, $value, $columns = array('*'))
{
return Role::with('perms')->select($columns)->where($field, '=', $value)->get();
}
public function findWhere($where, $columns = array('*'))
{
return Role::with('perms')->select($columns)->whereRaw($where)->get();
}
public function search($search)
{
return Role::search($search)->get();
}
public function destroy($id)
{
return Role::findOrFail($id)->delete();
}
public function first()
{
return Role::first();
}
public function lasts($limit)
{
return Role::latest()->limit($limit)->get();
}
public function truncate()
{
return Role::truncate();
}
public function duplicate($id)
{
return false;
}
}
public function find($id, $columns = array('*'))
{
return Role::select($columns)->find($id);
}
public function findOrFail($id, $columns = array('*'))
{
return Role::select($columns)->findOrFail($id);
}
public function findBy($field, $value, $columns = array('*'))
{
return Role::select($columns)->where($field, '=', $value)->first();
}
public function findOrFailBy($field, $value, $columns = array('*'))
{
return Role::select($columns)->where($field, '=', $value)->firstOrFail();
}
public function findAllBy($field, $value, $columns = array('*'))
{
return Role::select($columns)->where($field, '=', $value)->get();
}
public function findWhere($where, $columns = array('*'))
{
return Role::select($columns)->whereRaw($where)->get();
}
public function search($search)
{
return Role::search($search)->get();
}
public function destroy($id)
{
return Role::findOrFail($id)->delete();
}
public function first()
{
return Role::first();
}
public function lasts($limit)
{
return Role::latest()->limit($limit)->get();
}
public function truncate()
{
return Role::truncate();
}
public function duplicate($id)
{
return false;
}
}
......@@ -6,142 +6,143 @@ use Goldenscarab\Modulus\App\Models\Tracker;
use Illuminate\Support\Collection;
class TrackerRepository implements RepositoryInterface {
public function all($columns = array('*'))
{
return Tracker::select($columns)->orderBy('id', 'desc')->get();
}
public function list($filter, $sort = 'asc', $per_tracker = 15, $search = "")
{
return Tracker::search($search)->orderBy($filter, $sort)->paginate($per_tracker);
}
public function published($columns = array('*'))
{
return Tracker::select($columns)->active()->orderBy('title', 'asc')->get();
}
public function new()
{
return new Tracker;
}
public function store(Collection $data, $id = null)
{
if (is_null($id)) {
$tracker = new Tracker;
} else {
$tracker = Tracker::findOrFail($id);
}
$tracker->ip = $data->get('ip');
$tracker->connected_user = $data->get('connected_user');
$tracker->request_uri = $data->get('request_uri');
$tracker->request_method = $data->get('request_method');
$tracker->http_user_agent = $data->get('http_user_agent');
$tracker->provider = $data->get('provider');
$tracker->zip_code = $data->get('zip_code');
$tracker->city = $data->get('city');
$tracker->region_name = $data->get('region_name');
$tracker->country_name = $data->get('country_name');
$tracker->latitude = $data->get('latitude');
$tracker->longitude = $data->get('longitude');
$tracker->screen_width = $data->get('screen_width');
$tracker->screen_height = $data->get('screen_height');
class TrackerRepository implements RepositoryInterface
{
public function all($columns = array('*'))
{
return Tracker::select($columns)->orderBy('id', 'desc')->get();
}
public function list($filter, $sort = 'asc', $per_tracker = 15, $search = "")
{
return Tracker::search($search)->orderBy($filter, $sort)->paginate($per_tracker);
}
public function published($columns = array('*'))
{
return Tracker::select($columns)->active()->orderBy('title', 'asc')->get();
}
public function new()
{
return new Tracker;
}
public function store(array $data, $id = null)
{
if (is_null($id)) {
$tracker = new Tracker;
} else {
$tracker = Tracker::findOrFail($id);
}
$tracker->ip = data_get($data, 'ip');
$tracker->connected_user = data_get($data, 'connected_user');
$tracker->request_uri = data_get($data, 'request_uri');
$tracker->request_method = data_get($data, 'request_method');
$tracker->http_user_agent = data_get($data, 'http_user_agent');
$tracker->provider = data_get($data, 'provider');
$tracker->zip_code = data_get($data, 'zip_code');
$tracker->city = data_get($data, 'city');
$tracker->region_name = data_get($data, 'region_name');
$tracker->country_name = data_get($data, 'country_name');
$tracker->latitude = data_get($data, 'latitude');
$tracker->longitude = data_get($data, 'longitude');
$tracker->screen_width = data_get($data, 'screen_width');
$tracker->screen_height = data_get($data, 'screen_height');
$tracker->save();
return $tracker;
}
public function find($id, $columns = array('*'))
{
return Tracker::select($columns)->find($id);
}
public function findOrFail($id, $columns = array('*'))
{
return Tracker::select($columns)->findOrFail($id);
}
public function findBy($field, $value, $columns = array('*'))
{
return Tracker::select($columns)->where($field, '=', $value)->first();
}
public function findOrFailBy($field, $value, $columns = array('*'))
{
return Tracker::select($columns)->where($field, '=', $value)->firstOrFail();
}
public function findAllBy($field, $value, $columns = array('*'))
{
return Tracker::select($columns)->where($field, '=', $value)->get();
}
public function findWhere($where, $columns = array('*'))
{
return Tracker::select($columns)->whereRaw($where)->get();
}
public function search($search)
{
return Tracker::search($search)->orderBy('lastname', 'asc')->get();
}
public function destroy($id)
{
return Tracker::findOrFail($id)->delete();
}
public function first()
{
return Tracker::first();
}
public function lasts($limit)
{
return Tracker::latest()->limit($limit)->get();
}
public function truncate()
{
return Tracker::truncate();
}
public function currentWeek($columns = array('*'))
{
return Tracker::select($columns)->currentWeek()->orderBy('id', 'desc')->get();
}
public function lastWeek($columns = array('*'))
{
return Tracker::select($columns)->lastWeek()->orderBy('id', 'desc')->get();
}
public function currentMonth($columns = array('*'))
{
return Tracker::select($columns)->currentMonth()->orderBy('id', 'asc')->get();
}
public function lastMonth($columns = array('*'))
{
return Tracker::select($columns)->lastMonth()->orderBy('id', 'asc')->get();
}
public function currentYear($columns = array('*'))
{
return Tracker::select($columns)->currentMonth()->orderBy('id', 'asc')->get();
}
public function lastYear($columns = array('*'))
{
return Tracker::select($columns)->lastMonth()->orderBy('id', 'asc')->get();
}
public function duplicate($id)
{
return false;
}
}
public function find($id, $columns = array('*'))
{
return Tracker::select($columns)->find($id);
}
public function findOrFail($id, $columns = array('*'))
{
return Tracker::select($columns)->findOrFail($id);
}
public function findBy($field, $value, $columns = array('*'))
{
return Tracker::select($columns)->where($field, '=', $value)->first();
}
public function findOrFailBy($field, $value, $columns = array('*'))
{
return Tracker::select($columns)->where($field, '=', $value)->firstOrFail();
}
public function findAllBy($field, $value, $columns = array('*'))
{
return Tracker::select($columns)->where($field, '=', $value)->get();
}
public function findWhere($where, $columns = array('*'))
{
return Tracker::select($columns)->whereRaw($where)->get();
}
public function search($search)
{
return Tracker::search($search)->orderBy('lastname', 'asc')->get();
}
public function destroy($id)
{
return Tracker::findOrFail($id)->delete();
}
public function first()
{
return Tracker::first();
}
public function lasts($limit)
{
return Tracker::latest()->limit($limit)->get();
}
public function truncate()
{
return Tracker::truncate();
}
public function currentWeek($columns = array('*'))
{
return Tracker::select($columns)->currentWeek()->orderBy('id', 'desc')->get();
}
public function lastWeek($columns = array('*'))
{
return Tracker::select($columns)->lastWeek()->orderBy('id', 'desc')->get();
}
public function currentMonth($columns = array('*'))
{
return Tracker::select($columns)->currentMonth()->orderBy('id', 'asc')->get();
}
public function lastMonth($columns = array('*'))
{
return Tracker::select($columns)->lastMonth()->orderBy('id', 'asc')->get();
}
public function currentYear($columns = array('*'))
{
return Tracker::select($columns)->currentMonth()->orderBy('id', 'asc')->get();
}
public function lastYear($columns = array('*'))
{
return Tracker::select($columns)->lastMonth()->orderBy('id', 'asc')->get();
}
public function duplicate($id)
{
return false;
}
}
......@@ -7,138 +7,138 @@ use Illuminate\Support\Str;
use Illuminate\Support\Collection;
class UserRepository implements RepositoryInterface {
public function all($columns = array('*'))
{
return User::with('roles')->select($columns)->orderBy('lastname', 'asc')->get();
}
public function list($filter, $sort = 'asc', $per_page = 15, $search = "", $role_id = null)
{
if ($role_id) {
return User::whereHas('roles', function($query) use ($role_id) {
$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);
}
public function published($columns = array('*'))
{
return User::active()->select($columns)->orderBy('lastname', 'asc')->get();
}
public function new()
{
return new User;
}
public function store(Collection $data, $id)
{
if (is_null($id)) {
class UserRepository implements RepositoryInterface
{
public function all($columns = array('*'))
{
return User::with('roles')->select($columns)->orderBy('lastname', 'asc')->get();
}
public function list($filter, $sort = 'asc', $per_page = 15, $search = "", $role_id = null)
{
if ($role_id) {
return User::whereHas('roles', function ($query) use ($role_id) {
$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);
}
public function published($columns = array('*'))
{
return User::active()->select($columns)->orderBy('lastname', 'asc')->get();
}
public function new()
{
return new User;
}
public function store(array $data, $id)
{
if (is_null($id)) {
$user = new User;
} else {
$user = User::findOrFail($id);
}
} else {
$user = User::findOrFail($id);
}
$user->api_token = Str::random(60);
$user->avatar = $data->get('avatar');
$user->lastname = $data->get('lastname');
$user->firstname = $data->get('firstname');
$user->email = $data->get('email');
$user->comment = $data->get('comment');
$user->company = $data->get('company');
$user->activity = $data->get('activity');
$user->telephone = $data->get('telephone');
$user->address = $data->get('address');
$user->zipcode = $data->get('zipcode');
$user->city = $data->get('city');
// Si le champs active est donné
if ($data->has('active')) {
$user->active = $data->get('active');
}
// Si le mot de passe est changé
if (!is_null($data->get('password'))) {
$user->password = bcrypt($data->get('password'));
$user->avatar = data_get($data, 'avatar');
$user->lastname = data_get($data, 'lastname');
$user->firstname = data_get($data, 'firstname');
$user->email = data_get($data, 'email');
$user->comment = data_get($data, 'comment');
$user->company = data_get($data, 'company');
$user->activity = data_get($data, 'activity');
$user->telephone = data_get($data, 'telephone');
$user->address = data_get($data, 'address');
$user->zipcode = data_get($data, 'zipcode');
$user->city = data_get($data, 'city');
// Si le champs active est donné
if (isset($data['active'])) {
$user->active = data_get($data, 'active');
}
// Si le mot de passe est changé
if (isset($data['password'])) {
$user->password = bcrypt(data_get($data, 'password'));
}
$user->save();
// Changement du role de l'utilisateur
if ($data->has('role')) {
$user->syncRoles($data->get('role'));
if (isset($data['role'])) {
$user->syncRoles(data_get($data, 'role'));
}
return $user;
}
public function find($id, $columns = array('*'))
{
return User::with('roles')->select($columns)->find($id);
}
public function findOrFail($id, $columns = array('*'))
{
return User::select($columns)->findOrFail($id);
}
public function findBy($field, $value, $columns = array('*'))
{
return User::with('roles')->select($columns)->where($field, '=', $value)->first();
}
public function findOrFailBy($field, $value, $columns = array('*'))
{
return User::select($columns)->where($field, '=', $value)->firstOrFail();
}
public function findAllBy($field, $value, $columns = array('*'))
{
return User::with('roles')->select($columns)->where($field, '=', $value)->get();
}
public function findWhere($where, $columns = array('*'))
{
return User::with('roles')->select($columns)->whereRaw($where)->get();
}
public function search($search)
{
return User::search($search)->orderBy('lastname', 'asc')->get();
}
public function destroy($id)
{
return User::findOrFail($id)->delete();
}
public function first()
{
return User::first();
}
public function lasts($limit)
{
return User::latest()->limit($limit)->get();
}
public function truncate()
{
return User::truncate();
}
public function duplicate($id)
{
return false;
}
public function getAvatars()
{
return User::getAvatars();
}
}
public function find($id, $columns = array('*'))
{
return User::with('roles')->select($columns)->find($id);
}
public function findOrFail($id, $columns = array('*'))
{
return User::select($columns)->findOrFail($id);
}
public function findBy($field, $value, $columns = array('*'))
{
return User::with('roles')->select($columns)->where($field, '=', $value)->first();
}
public function findOrFailBy($field, $value, $columns = array('*'))
{
return User::select($columns)->where($field, '=', $value)->firstOrFail();
}
public function findAllBy($field, $value, $columns = array('*'))
{
return User::with('roles')->select($columns)->where($field, '=', $value)->get();
}
public function findWhere($where, $columns = array('*'))
{
return User::with('roles')->select($columns)->whereRaw($where)->get();
}
public function search($search)
{
return User::search($search)->orderBy('lastname', 'asc')->get();
}
public function destroy($id)
{
return User::findOrFail($id)->delete();
}
public function first()
{
return User::first();
}
public function lasts($limit)
{
return User::latest()->limit($limit)->get();
}
public function truncate()
{
return User::truncate();
}
public function duplicate($id)
{
return false;
}
public function 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
{
return [
'name' => 'required|max:254|string|unique:roles,name,' . $this->route('id'),
'name' => 'required|max:254|string',
'display_name' => 'required|max:254|string',
'description' => 'nullable|max:254|string',
];
......
......@@ -10,80 +10,87 @@ use Goldenscarab\Modulus\App\Http\Repositories\PermissionRepository;
class PermissionService
{
private $perm_repo;
private $role_repo;
private $types = array(
'read' => 'Lire',
'create' => 'Ajouter',
'update' => 'Modifier',
'delete' => 'Supprimer'
);
public function __construct(PermissionRepository $permission)
{
$this->perm_repo = $permission;
$this->role_repo = new RoleRepository;
}
public function addPermissionsGroup($display_name)
{
$name = Str::slug($display_name);
// On vérifie que la permission n'existe pas déja
$perm = $this->perm_repo->findBy('name', $name . '-read');
if($perm) {
return false;
}
// On récupère le role admin pour associer les nouvelles permission
$role = $this->role_repo->findOrFailBy('name', 'admin');
// Pour chaque élements du groupe
foreach ($this->types as $type => $human_type) {
$data = collect([
'name' => $name . '-' . $type,
'display_name' => $display_name . ' ' . ucfirst($type),
'description' => $human_type . ' ' . $display_name
]);
// Création de la permission
$perm = $this->perm_repo->store($data);
// Ajout de la permission au role admin
if ($perm) {
$role->givePermissionTo($perm);
}
}
return true;
}
public function deletePermissionsGroup($display_name)
{
private $perm_repo;
private $role_repo;
private $types = array(
'read' => 'Lire',
'create' => 'Ajouter',
'update' => 'Modifier',
'delete' => 'Supprimer'
);
public function __construct(PermissionRepository $permission)
{
$this->perm_repo = $permission;
$this->role_repo = new RoleRepository;
}
public function addPermissionsGroup($display_name)
{
$name = Str::slug($display_name);
// On vérifie que la permission n'existe pas déja
$perm = $this->perm_repo->findBy('name', $name . '-read');
if ($perm) {
return false;
}
// On récupère le role admin pour associer les nouvelles permission
$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) {
$data = [
'name' => $name . '-' . $type,
'guard_name' => 'web',
'display_name' => $display_name . ' ' . ucfirst($type),
'description' => $human_type . ' ' . $display_name
];
// Création de la permission web
$perm_web = $this->perm_repo->store($data);
// Création de la permission api
$data['guard_name'] = 'api';
$perm_api = $this->perm_repo->store($data);
// Ajout de la permission au role admin
if ($perm_web && $perm_api) {
$role_web->givePermissionTo($perm_web);
$role_api->givePermissionTo($perm_api);
}
}
return true;
}
public function deletePermissionsGroup($display_name)
{
// On récupère le role admin pour supprimer les permissions
$role_admin = $this->role_repo->findOrFailBy('name', 'admin');
//$role_edit = $this->role_repo->findOrFailBy('name', 'editeur');
$role_admin = $this->role_repo->findOrFailBy('name', 'admin');
//$role_edit = $this->role_repo->findOrFailBy('name', 'editeur');
// Pour chaque élements du groupe
foreach ($this->types as $type => $human_type) {
// Pour chaque élements du groupe
foreach ($this->types as $type => $human_type) {
// Construction du nom de la permission
$name = Str::slug($display_name) . '-' . $type;
// Récupération de la permission
$perm = $this->perm_repo->findBy('name', $name);
// Construction du nom de la permission
$name = Str::slug($display_name) . '-' . $type;
// Récupération de la permission
$perms = $this->perm_repo->findAllBy('name', $name);
// Si la permission est trouvée, alors on la supprime
if($perm) {
$role_admin->revokePermissionTo($perm);
$perm->delete();
}
// Si des permissions sont trouvées, alors on les supprimes
if ($perms->isNotEmpty()) {
}
return true;
}
foreach($perms as $perm) {
$role_admin->revokePermissionTo($perm);
$perm->delete();
}
}
}
return true;
}
}
......@@ -2,10 +2,9 @@
namespace Goldenscarab\Modulus\App\Providers;
use Goldenscarab\Modulus\App\Console\Modulus\EmailTest;
use Illuminate\Support\ServiceProvider;
use Goldenscarab\Modulus\App\Console\Modulus\EmailTestCommand;
use Goldenscarab\Modulus\App\Console\Modulus\MakeResourceCommand;
class LoadServiceProvider extends ServiceProvider
{
......@@ -18,12 +17,13 @@ class LoadServiceProvider extends ServiceProvider
{
if ($this->app->runningInConsole()) {
$this->commands([
EmailTest::class,
EmailTestCommand::class,
MakeResourceCommand::class
]);
}
//$this->loadMigrationsFrom(__DIR__.'/../../database/migrations');
$this->loadTranslationsFrom(__DIR__.'/../../resources/lang', 'modulus');
$this->loadViewsFrom(__DIR__.'/../../resources/views', 'modulus');
$this->loadTranslationsFrom(__DIR__ . '/../../resources/lang', '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
*/
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