¨4.0.1¨

This commit is contained in:
¨NW¨
2023-12-03 14:07:47 +00:00
parent c08b36d1b6
commit f35052522d
1112 changed files with 43019 additions and 24987 deletions

View File

@@ -4,13 +4,16 @@ namespace Modules\Brand\Admin;
use Modules\Admin\Ui\AdminTable;
use Modules\Brand\Entities\Brand;
use Illuminate\Http\JsonResponse;
use Yajra\DataTables\Exceptions\Exception;
class BrandTable extends AdminTable
{
/**
* Make table response for the resource.
*
* @return \Illuminate\Http\JsonResponse
* @return JsonResponse
* @throws Exception
*/
public function make()
{

View File

@@ -16,6 +16,7 @@ class BrandTabs extends Tabs
->add($this->seo());
}
private function general()
{
return tap(new Tab('general', trans('brand::brands.tabs.general')), function (Tab $tab) {
@@ -26,9 +27,10 @@ class BrandTabs extends Tabs
});
}
private function images()
{
if (! auth()->user()->hasAccess('admin.media.index')) {
if (!auth()->user()->hasAccess('admin.media.index')) {
return;
}
@@ -38,6 +40,7 @@ class BrandTabs extends Tabs
});
}
private function seo()
{
return tap(new Tab('seo', trans('brand::brands.tabs.seo')), function (Tab $tab) {

View File

@@ -21,6 +21,7 @@ class CreateBrandsTable extends Migration
});
}
/**
* Reverse the migrations.
*

View File

@@ -23,6 +23,7 @@ class CreateBrandTranslationsTable extends Migration
});
}
/**
* Reverse the migrations.
*

View File

@@ -15,7 +15,6 @@ class BrandDatabaseSeeder extends Seeder
public function run()
{
Model::unguard();
// $this->call("OthersTableSeeder");
}
}

View File

@@ -3,6 +3,7 @@
namespace Modules\Brand\Entities;
use Modules\Media\Entities\File;
use Illuminate\Http\JsonResponse;
use Modules\Brand\Admin\BrandTable;
use Modules\Support\Eloquent\Model;
use Modules\Media\Eloquent\HasMedia;
@@ -11,25 +12,31 @@ use Modules\Product\Entities\Product;
use Modules\Meta\Eloquent\HasMetaData;
use Modules\Support\Eloquent\Sluggable;
use Modules\Support\Eloquent\Translatable;
use Illuminate\Database\Eloquent\Collection;
use Illuminate\Database\Eloquent\Relations\HasMany;
class Brand extends Model
{
use Translatable, Sluggable, HasMedia, HasMetaData;
/**
* The attributes that are translatable.
*
* @var array
*/
public $translatedAttributes = ['name'];
/**
* The relations to eager load on every query.
*
* @var array
*/
protected $with = ['translations'];
/**
* The attributes that are mass assignable.
*
* @var array
*/
protected $fillable = ['slug', 'is_active'];
/**
* The attributes that should be cast to native types.
*
@@ -38,14 +45,6 @@ class Brand extends Model
protected $casts = [
'is_active' => 'boolean',
];
/**
* The attributes that are translatable.
*
* @var array
*/
public $translatedAttributes = ['name'];
/**
* The attribute that will be slugged.
*
@@ -53,6 +52,33 @@ class Brand extends Model
*/
protected $slugAttribute = 'name';
/**
* Find a specific brand by the given slug.
*
* @param string $slug
*
* @return self
*/
public static function findBySlug($slug)
{
return self::where('slug', $slug)->firstOrNew([]);
}
/**
* Get brand list.
*
* @return Collection
*/
public static function list()
{
return Cache::tags('brands')->rememberForever(md5('brands.list:' . locale()), function () {
return self::all()->sortBy('name')->pluck('name', 'id');
});
}
/**
* Perform any actions required after the model boots.
*
@@ -63,6 +89,7 @@ class Brand extends Model
static::addActiveGlobalScope();
}
/**
* Get public url for the brand.
*
@@ -73,63 +100,44 @@ class Brand extends Model
return route('brands.products.index', $this->slug);
}
/**
* Find a specific brand by the given slug.
*
* @param string $slug
* @return self
*/
public static function findBySlug($slug)
{
return self::where('slug', $slug)->firstOrNew([]);
}
/**
* Get brand list.
*
* @return \Illuminate\Database\Eloquent\Collection
*/
public static function list()
{
return Cache::tags('brands')->rememberForever(md5('brands.list:' . locale()), function () {
return self::all()->sortBy('name')->pluck('name', 'id');
});
}
/**
* Get the brand's logo.
*
* @return \Modules\Media\Entities\File
* @return File
*/
public function getLogoAttribute()
{
return $this->files->where('pivot.zone', 'logo')->first() ?: new File;
}
/**
* Get the brand's banner.
*
* @return \Modules\Media\Entities\File
* @return File
*/
public function getBannerAttribute()
{
return $this->files->where('pivot.zone', 'banner')->first() ?: new File;
}
/**
* Get related products.
*
* @return \Illuminate\Database\Eloquent\Relations\HasMany
* @return HasMany
*/
public function products()
{
return $this->hasMany(Product::class);
}
/**
* Get table data for the resource
*
* @return \Illuminate\Http\JsonResponse
* @return JsonResponse
*/
public function table()
{

View File

@@ -2,6 +2,8 @@
namespace Modules\Brand\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Http\Response;
use Modules\Brand\Entities\Brand;
class BrandController
@@ -9,8 +11,9 @@ class BrandController
/**
* Display a listing of the resource.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
* @param Request $request
*
* @return Response
*/
public function index()
{

View File

@@ -2,6 +2,7 @@
namespace Modules\Brand\Http\Controllers;
use Illuminate\Http\Response;
use Modules\Brand\Entities\Brand;
use Modules\Product\Entities\Product;
use Modules\Product\Filters\ProductFilter;
@@ -15,9 +16,10 @@ class BrandProductController
* Display a listing of the resource.
*
* @param string $slug
* @param \Modules\Product\Entities\Product $model
* @param \Modules\Product\Filters\ProductFilter $productFilter
* @return \Illuminate\Http\Response
* @param Product $model
* @param ProductFilter $productFilter
*
* @return Response
*/
public function index($slug, Product $model, ProductFilter $productFilter)
{

View File

@@ -15,6 +15,7 @@ class SaveBrandRequest extends Request
*/
protected $availableAttributes = 'brand::attributes';
/**
* Get the validation rules that apply to the request.
*
@@ -28,6 +29,7 @@ class SaveBrandRequest extends Request
];
}
private function getSlugRules()
{
$rules = $this->route()->getName() === 'admin.brands.update'

View File

@@ -3,14 +3,11 @@
namespace Modules\Brand\Providers;
use Modules\Brand\Admin\BrandTabs;
use Modules\Support\Traits\AddsAsset;
use Illuminate\Support\ServiceProvider;
use Modules\Admin\Ui\Facades\TabManager;
class BrandServiceProvider extends ServiceProvider
{
use AddsAsset;
/**
* Bootstrap the application services.
*
@@ -19,9 +16,5 @@ class BrandServiceProvider extends ServiceProvider
public function boot()
{
TabManager::register('brands', BrandTabs::class);
$this->addAdminAssets('admin.brands.(create|edit)', [
'admin.media.css', 'admin.media.js', 'admin.brand.js',
]);
}
}

View File

@@ -2,6 +2,5 @@
return [
'name' => 'Name',
'slug' => 'URL',
'is_active' => 'Status',
];

View File

@@ -1,8 +1,8 @@
<?php
return [
'index' => 'Index Brand',
'create' => 'Create Brand',
'edit' => 'Edit Brand',
'destroy' => 'Delete Brand',
'index' => 'Index Test',
'create' => 'Create Test',
'edit' => 'Edit Test',
'destroy' => 'Delete Test',
];

View File

@@ -16,3 +16,11 @@
@endsection
@include('brand::admin.brands.partials.shortcuts')
@push('globals')
@vite([
'Modules/Brand/Resources/assets/admin/js/main.js',
'Modules/Media/Resources/assets/admin/sass/main.scss',
'Modules/Media/Resources/assets/admin/js/main.js',
])
@endpush

View File

@@ -18,3 +18,11 @@
@endsection
@include('brand::admin.brands.partials.shortcuts')
@push('globals')
@vite([
'Modules/Brand/Resources/assets/admin/js/main.js',
'Modules/Media/Resources/assets/admin/sass/main.scss',
'Modules/Media/Resources/assets/admin/js/main.js',
])
@endpush

View File

@@ -27,7 +27,7 @@
@endcomponent
@push('scripts')
<script>
<script type="module">
new DataTable('#brands-table .table', {
columns: [
{ data: 'checkbox', orderable: false, searchable: false, width: '3%' },

View File

@@ -6,7 +6,7 @@
@endpush
@push('scripts')
<script>
<script type="module">
keypressAction([
{ key: 'b', route: "{{ route('admin.brands.index') }}" }
]);

View File

@@ -38,4 +38,9 @@ Route::delete('brands/{ids?}', [
'middleware' => 'can:admin.brands.destroy',
]);
// append
Route::get('brands/index/table', [
'as' => 'admin.brands.table',
'uses' => 'BrandController@table',
'middleware' => 'can:admin.brands.index',
]);