diff --git a/app/Http/Controllers/Bo/SiteController.php b/app/Http/Controllers/Bo/SiteController.php index f19c2da..be3d5f5 100644 --- a/app/Http/Controllers/Bo/SiteController.php +++ b/app/Http/Controllers/Bo/SiteController.php @@ -22,8 +22,18 @@ class SiteController extends Controller */ public function index(Request $request): \Illuminate\Contracts\View\View { - /** @var \Illuminate\Database\Eloquent\Builder $siteModels */ - $siteModels = Site::query(); + /** @var \App\Models\User $user */ + $user = \auth()->user(); + + if ($user->isAdmin()) { + /** @var \Illuminate\Database\Eloquent\Builder $siteModels */ + $siteModels = Site::query(); + } else { + /** @var \Illuminate\Database\Eloquent\Builder $siteModels */ + $siteModels = Site::whereHas('users', function (\Illuminate\Database\Eloquent\Builder $query) use ($user) { + $query->where('id', $user->id); + }); + } /** @var string $search Search field */ $search = $request->search; @@ -84,8 +94,8 @@ class SiteController extends Controller return DB::transaction(function () use ($request) { $site = new Site(); $site->fill($request->validated()); - $site->users()->attach(collect($request->validated('users'))->pluck('id')); if ($site->saveOrFail()) { + $site->users()->attach(collect($request->validated('users'))->pluck('id')); return redirect() ->route('bo.sites.edit', $site) ->with('success', trans( diff --git a/app/Http/Requests/Bo/Sites/StoreSiteRequest.php b/app/Http/Requests/Bo/Sites/StoreSiteRequest.php index 44b5a2d..de7035e 100644 --- a/app/Http/Requests/Bo/Sites/StoreSiteRequest.php +++ b/app/Http/Requests/Bo/Sites/StoreSiteRequest.php @@ -28,7 +28,9 @@ class StoreSiteRequest extends FormRequest 'name' => 'required|string|min:3|max:255', 'users' => 'nullable|array', 'users.*.id' => 'required|exists:users,id', - 'gitlab_project_id' => 'nullable|unique:sites,gitlab_project_id' + 'gitlab_project_id' => 'nullable|unique:sites,gitlab_project_id', + 'url_re7' => 'nullable|url', + 'url_prod' => 'nullable|url' ]; } @@ -43,7 +45,9 @@ class StoreSiteRequest extends FormRequest 'name' => trans('Nom du site'), 'users' => trans('Utilisateurs associés au site'), 'users.*.id' => trans('Élément parmis les Utilisateurs associés au site'), - 'gitlab_project_id' => trans('ID du dépôt Gitlab') + 'gitlab_project_id' => trans('ID du dépôt Gitlab'), + 'url_re7' => trans('Url de RECETTE'), + 'url_prod' => trans('Url de prod') ]; } } diff --git a/app/Models/Site.php b/app/Models/Site.php index d90b579..1a38c8c 100644 --- a/app/Models/Site.php +++ b/app/Models/Site.php @@ -2,12 +2,15 @@ namespace App\Models; +use App\Lib\Helpers\ToolboxHelper; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Casts\Attribute; /** * @property string $name + * @property string $url_re7 + * @property string $url_prod * @property integer $gitlab_project_id * @property Brand $brand_id */ @@ -22,6 +25,8 @@ class Site extends Model */ protected $fillable = [ 'name', + 'url_re7', + 'url_prod', 'gitlab_project_id' ]; @@ -33,6 +38,41 @@ class Site extends Model protected $appends = [ 'value' ]; + // * EVENTS + + /** + * Perform any actions required after the model boots. + * + * @return void + */ + protected static function booted() + { + static::creating(function (self $model) { + self::manageFields($model); + }); + static::updating(function (self $model) { + self::manageFields($model); + }); + } + + // * METHODS + + /** + * Common methods function. + * + * @param Model $model + * @return void + */ + private static function manageFields(Model $model) + { + if ($model->url_re7) { + ToolboxHelper::assertNoInternalUrls('url_re7', $model->url_re7); + } + if ($model->url_prod) { + ToolboxHelper::assertNoInternalUrls('url_prod', $model->url_prod); + } + } + // * RELATIONSHIPS diff --git a/app/Policies/SitePolicy.php b/app/Policies/SitePolicy.php new file mode 100644 index 0000000..1cf86d2 --- /dev/null +++ b/app/Policies/SitePolicy.php @@ -0,0 +1,20 @@ +check(); + } +} diff --git a/composer.lock b/composer.lock index 4410ac9..a9b32d0 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "4f5fe189b89c5ccc99fc4c7a913a64a6", + "content-hash": "e8c9db31822e28a9de96572bc85532bf", "packages": [ { "name": "brick/math", diff --git a/database/migrations/2023_08_14_171640_add_urls_to_sites_table.php b/database/migrations/2023_08_14_171640_add_urls_to_sites_table.php new file mode 100644 index 0000000..ec5427d --- /dev/null +++ b/database/migrations/2023_08_14_171640_add_urls_to_sites_table.php @@ -0,0 +1,33 @@ +string('url_re7')->nullable()->after('name'); + $table->string('url_prod')->nullable()->after('url_re7'); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down(): void + { + Schema::table('sites', function (Blueprint $table) { + $table->dropColumn(['url_re7', 'url_prod']); + }); + } +}; diff --git a/resources/lang/fr/crud.php b/resources/lang/fr/crud.php index 9dffa6c..f5216b3 100644 --- a/resources/lang/fr/crud.php +++ b/resources/lang/fr/crud.php @@ -69,6 +69,7 @@ return [ 'picture_alt_helper' => 'Doit décrire votre image pour les moteurs de recherche et les aveugles (5 à 6 mots)', 'picture_alt_label' => 'Attribut Alt de l\'image', 'text_warning' => 'Relisez votre contenu avant de le publier (minimum :number caractères)', + 'url' => 'Doit être une url valide.', ], 'pagination' => [ diff --git a/resources/lang/fr/validation.php b/resources/lang/fr/validation.php index b4f16c9..6103303 100644 --- a/resources/lang/fr/validation.php +++ b/resources/lang/fr/validation.php @@ -194,6 +194,8 @@ return [ 'total' => 'Montant total', 'type' => 'Type', 'updated_at' => 'Mis à jour', + 'url_re7' => 'Url de RECETTE', + 'url_prod' => 'Url de PROD', 'username' => 'nom d\'utilisateur', 'year' => 'année', ], diff --git a/resources/views/bo/pages/sites/form-inputs.blade.php b/resources/views/bo/pages/sites/form-inputs.blade.php index fa9a69d..3cbb516 100644 --- a/resources/views/bo/pages/sites/form-inputs.blade.php +++ b/resources/views/bo/pages/sites/form-inputs.blade.php @@ -87,6 +87,53 @@ + {{-- SITE URLS --}} +
+
+ {{ __('URLs du site') }} +
+ {{-- URL_RE7 --}} +
+ @include('bo.partials.inputs.varchar', [ + 'id' => 'siteUrlRe7', + 'label' => __(':field du :model', [ + 'field' => Str::ucfirst(__('validation.attributes.url_re7')), + 'model' => Str::singular(__('models.classes.sites')), + ]), + 'hasWordCounter' => true, + 'name' => 'url_re7', + 'required' => false, + 'model' => $siteModel ?? null, + 'helper' => __('crud.minicrud.url'), + 'placeholder' => __(':field du :model', [ + 'field' => Str::ucfirst(__('validation.attributes.url_re7')), + 'model' => Str::singular(__('models.classes.sites')), + ]), + ]) +
+ {{-- URL_PROD --}} +
+ @include('bo.partials.inputs.varchar', [ + 'id' => 'siteUrlProd', + 'label' => __(':field du :model', [ + 'field' => Str::ucfirst(__('validation.attributes.url_prod')), + 'model' => Str::singular(__('models.classes.sites')), + ]), + 'hasWordCounter' => true, + 'name' => 'url_prod', + 'required' => false, + 'model' => $siteModel ?? null, + 'helper' => __('crud.minicrud.url'), + 'placeholder' => __(':field du :model', [ + 'field' => Str::ucfirst(__('validation.attributes.url_prod')), + 'model' => Str::singular(__('models.classes.sites')), + ]), + ]) +
+ {{-- URL_PROD --}} +
+
+
@push('scripts') diff --git a/resources/views/bo/pages/sites/index.blade.php b/resources/views/bo/pages/sites/index.blade.php index 2598da4..a187e11 100644 --- a/resources/views/bo/pages/sites/index.blade.php +++ b/resources/views/bo/pages/sites/index.blade.php @@ -6,6 +6,7 @@ @section('content')
@include('breadcrumbs.breadcrumb-body') + @can('isAdmin') + @endcan
@include('bo.modules.search-bar') @@ -21,9 +23,9 @@ @include('bo.modules.table-col-sorter', [ 'cols' => [ 'name' => Str::ucfirst(__('validation.attributes.name')), - 'user_id' => Str::ucfirst(__('models.classes.users')), + 'url_re7' => Str::ucfirst(__('validation.attributes.url_re7')), + 'url_prod' => Str::ucfirst(__('validation.attributes.url_prod')), ], - 'ignore' => ['user_id'], ]) @@ -31,10 +33,20 @@ + + @can('isAdmin') + @endcan @endforeach diff --git a/resources/views/bo/pages/sites/show.blade.php b/resources/views/bo/pages/sites/show.blade.php index 1c6db8f..e61f1d5 100644 --- a/resources/views/bo/pages/sites/show.blade.php +++ b/resources/views/bo/pages/sites/show.blade.php @@ -61,6 +61,26 @@ @endforeach + + + + + + + + diff --git a/resources/views/home.blade.php b/resources/views/home.blade.php index d4d9829..76a16d6 100644 --- a/resources/views/home.blade.php +++ b/resources/views/home.blade.php @@ -10,6 +10,9 @@ {{ __('Créer un ticket') }} + + {{ __('Voir mes sites') }} +
diff --git a/resources/views/layout/nav.blade.php b/resources/views/layout/nav.blade.php index 3dea39e..2273b31 100644 --- a/resources/views/layout/nav.blade.php +++ b/resources/views/layout/nav.blade.php @@ -62,6 +62,11 @@ {{ __('models.classes.accounts') }} @endcan + @can('viewAny', App\Models\Site::class) + + @endcan @endif @can('isAdmin')
{{ $siteModel->name }} - @foreach ($siteModel->users as $user) - {{ $user->name }}@if (!$loop->last), @endif - @endforeach + @if ($siteModel->url_re7) + {{ $siteModel->url_re7 }} + @else + - + @endif + @if ($siteModel->url_prod) + {{ $siteModel->url_prod }} + @else + - + @endif +
{{ Str::ucfirst(__('validation.attributes.url_re7')) }} + @if ($siteModel->url_re7) + {{ $siteModel->url_re7 }} + @else + - + @endif +
{{ Str::ucfirst(__('validation.attributes.url_prod')) }} + @if ($siteModel->url_prod) + {{ $siteModel->url_prod }} + @else + - + @endif +
{{ Str::ucfirst(__('validation.attributes.created_at')) }} {{ $siteModel->created_at }}