add methods to get icon on article natures

This commit is contained in:
Ludovic CANDELLIER
2023-09-12 23:00:36 +02:00
parent 470560efb6
commit a29faabbf2
22 changed files with 583 additions and 155 deletions

View File

@@ -4,6 +4,7 @@ namespace App\Datatables\Admin\Shop;
use App\Datatables\ParentDataTable as DataTable;
use App\Models\Shop\ArticleNature;
use App\Repositories\Core\Medias;
use App\Repositories\Shop\ArticleNatures;
use Yajra\DataTables\Html\Column;
@@ -11,6 +12,8 @@ class ArticleNaturesDataTable extends DataTable
{
public $model_name = 'article_natures';
public $sortedColumn = 1;
public function query(ArticleNature $model)
{
$model = $model::withCount('Articles');
@@ -21,10 +24,15 @@ class ArticleNaturesDataTable extends DataTable
public function modifier($datatables)
{
$datatables
->editColumn('icon', function (ArticleNature $nature) {
$logo = Medias::getImage($nature, 'thumb');
return $logo ? "<img src='{$logo}'>" : '';
})
->editColumn('product_type', function (ArticleNature $nature) {
return ArticleNatures::getProductTypeName($nature->product_type);
})
->rawColumns(['action']);
->rawColumns(['icon', 'action']);
return parent::modifier($datatables);
}
@@ -32,6 +40,7 @@ class ArticleNaturesDataTable extends DataTable
protected function getColumns()
{
return [
Column::make('icon')->title('Icone')->width(40)->orderable(false),
Column::make('product_type')->title('Famille de produit')->width(140),
Column::make('name')->title('Nom'),
Column::make('articles_count')->title('Nb Art.')->addClass('text-right')->searchable(false)->width(60),

View File

@@ -20,24 +20,29 @@ class ArticleNatureController extends Controller
public function store(Request $request)
{
$ret = ArticleNatures::store($request->all());
$articleNature = ArticleNatures::store($request->all());
ArticleNatures::storeIcon($articleNature, $request->file('icon'));
return redirect()->route('Admin.Shop.ArticleNatures.index');
}
public function show($id)
{
$data['article_nature'] = ArticleNatures::get($id);
$data = [
'article_nature' => ArticleNatures::get($id),
];
return view('Admin.Shop.ArticleNatures.view', $data);
}
public function edit($id)
{
$data['article_nature'] = ArticleNatures::get($id);
$data['product_types'] = ArticleNatures::getProductTypes();
// dump($data);
// exit;
$data = [
'article_nature' => ArticleNatures::get($id),
'product_types' => ArticleNatures::getProductTypes(),
];
$data['article_nature']['icon'] = ArticleNatures::getIcon($id);
return view('Admin.Shop.ArticleNatures.edit', $data);
}

View File

@@ -33,6 +33,8 @@ class CategoryController extends Controller
]);
if (count($articleNatures) === 1) {
$articleNature = $articleNatures[0];
} else {
$articleNature = 'semences';
}
$productTypes = Articles::getProductTypesWithOffers([
'category_id' => $categoryId,
@@ -40,35 +42,12 @@ class CategoryController extends Controller
if (count($productTypes) === 1) {
$productType = $productTypes[0];
}
} else {
$productType = ArticleNatures::getProductTypeBySlug($articleNature);
}
switch ($articleNature) {
case 'semences':
$productType = 'botanic';
$articleNatureId = 1;
break;
case 'plants':
$productType = 'botanic';
$articleNatureId = 2;
break;
case 'legumes':
$productType = 'botanic';
$articleNatureId = 3;
break;
default:
if (!($productType ?? false)) {
$productType = 'botanic';
$articleNatureId = 1;
$articleNature = 'semences';
}
break;
}
// $productType = ArticleNatures::getProductType($articleNatureId);
// dump($productType);
// dump($articleNatureId);
// exit;
$articleNatureId = ArticleNatures::getIdBySlug($articleNature);
}
// exit;
$data = [
'category' => Categories::getFull($categoryId),
'breadcrumb' => Categories::getAncestorsByCategory($categoryId),
@@ -86,8 +65,6 @@ class CategoryController extends Controller
]),
'tags' => TagGroups::getWithTagsAndCountOffers($categoryId),
];
// dump($data);
// exit;
return view('Shop.Shelves.shelve', $data);
}

View File

@@ -8,11 +8,17 @@ use App\Traits\Model\HasComments;
use App\Traits\Model\Imageable;
use Fico7489\Laravel\EloquentJoin\Traits\EloquentJoin;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
use Illuminate\Database\Eloquent\Relations\HasMany;
use Illuminate\Database\Eloquent\Relations\HasManyThrough;
use Illuminate\Database\Eloquent\Relations\MorphTo;
use Illuminate\Database\Eloquent\Relations\MorphToMany;
use Illuminate\Database\Eloquent\SoftDeletes;
use Kirschbaum\PowerJoins\PowerJoins;
use Rinvex\Categories\Traits\Categorizable;
use Rinvex\Tags\Traits\Taggable;
use Spatie\MediaLibrary\HasMedia;
use Staudenmeir\EloquentHasManyDeep\HasManyDeep;
use Staudenmeir\EloquentHasManyDeep\HasRelationships;
use \Venturecraft\Revisionable\RevisionableTrait;
use Wildside\Userstamps\Userstamps;
@@ -47,22 +53,22 @@ class Article extends Model implements HasMedia
'homepage',
];
public function article_nature()
public function article_nature(): BelongsTo
{
return $this->belongsTo(ArticleNature::class);
}
public function invoiceItems()
public function invoiceItems(): HasMany
{
return $this->hasMany(InvoiceItem::class);
}
public function offers()
public function offers(): HasMany
{
return $this->hasMany(Offer::class);
}
public function price_lists()
public function price_lists(): HasManyDeep
{
return $this->hasManyDeep(
PriceList::class,
@@ -72,7 +78,7 @@ class Article extends Model implements HasMedia
);
}
public function prices()
public function prices(): HasManyDeep
{
return $this->hasManyDeep(
PriceListValue::class,
@@ -82,22 +88,22 @@ class Article extends Model implements HasMedia
);
}
public function product()
public function product(): MorphTo
{
return $this->morphTo();
}
public function siblings()
public function siblings(): HasMany
{
return $this->hasMany(Article::class, 'name', 'name');
}
public function tags()
public function tags(): MorphToMany
{
return $this->morphToMany(Tag::class, 'taggable');
}
public function tariffs()
public function tariffs(): HasManyThrough
{
return $this->hasManyThrough(Tariff::class, Offer::class, 'article_id', 'id', 'id', 'tariff_id');
// return $this->belongsToMany(Tariff::class, Offer::$table, 'id', 'id', 'tariff_id', 'tariff_id');

View File

@@ -3,14 +3,19 @@
namespace App\Models\Shop;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\HasMany;
use Illuminate\Database\Eloquent\SoftDeletes;
use Spatie\Image\Manipulations;
use Spatie\MediaLibrary\HasMedia;
use Spatie\MediaLibrary\InteractsWithMedia;
use Spatie\MediaLibrary\MediaCollections\Models\Media;
use Staudenmeir\EloquentHasManyDeep\HasRelationships;
use \Venturecraft\Revisionable\RevisionableTrait;
use Venturecraft\Revisionable\RevisionableTrait;
use Wildside\Userstamps\Userstamps;
class ArticleNature extends Model
class ArticleNature extends Model implements HasMedia
{
use HasRelationships, SoftDeletes, RevisionableTrait, UserStamps;
use HasRelationships, InteractsWithMedia, SoftDeletes, RevisionableTrait, UserStamps;
protected $guarded = ['id'];
@@ -20,7 +25,7 @@ class ArticleNature extends Model
protected $keepRevisionOf = ['product_type', 'name', 'description'];
public function articles()
public function articles(): HasMany
{
return $this->hasMany(Article::class);
}
@@ -49,4 +54,11 @@ class ArticleNature extends Model
{
return $query->whereIn($this->table.'.id', $ids);
}
public function registerMediaConversions(Media $media = null): void
{
$this->addMediaConversion('thumb')->fit(Manipulations::FIT_MAX, 60, 32)->keepOriginalImageFormat()->nonQueued();
$this->addMediaConversion('normal')->fit(Manipulations::FIT_MAX, 360, 192)->keepOriginalImageFormat()->nonQueued();
}
}

View File

@@ -3,6 +3,7 @@
namespace App\Models\Shop;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
class Basket extends Model
{
@@ -10,7 +11,7 @@ class Basket extends Model
protected $table = 'shop_baskets';
public function Offer()
public function Offer(): BelongsTo
{
return $this->belongsTo(Offer::class);
}

View File

@@ -3,22 +3,24 @@
namespace App\Models\Shop;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
use Illuminate\Database\Eloquent\Relations\MorphTo;
class Categorizable extends Model
{
protected $table = 'categorizables';
public function categorizable()
public function categorizable(): MorphTo
{
return $this->morphTo();
}
public function category()
public function category(): BelongsTo
{
return $this->belongsTo(Category::class);
}
public function article()
public function article(): BelongsTo
{
return $this->belongsTo(Article::class, 'categorizable_id');
}

View File

@@ -4,6 +4,8 @@ namespace App\Models\Shop;
use App\Repositories\Shop\SaleChannels;
use Cesargb\Database\Support\CascadeDelete;
use Illuminate\Database\Eloquent\Relations\HasMany;
use Illuminate\Database\Eloquent\Relations\HasOne;
use Illuminate\Database\Eloquent\SoftDeletes;
use Kalnoy\Nestedset\NestedSet;
use Rinvex\Categories\Models\Category as parentCategory;
@@ -43,12 +45,12 @@ class Category extends parentCategory
return $this->tags->articles;
}
public function Parent()
public function Parent(): HasOne
{
return $this->hasOne(Category::class, 'id', 'parent_id');
}
public function categorizables()
public function categorizables(): HasMany
{
return $this->hasMany(Categorizable::class);
}

View File

@@ -4,6 +4,8 @@ namespace App\Models\Shop;
use App\Notifications\ResetPassword;
use App\Notifications\VerifyEmail;
use Illuminate\Database\Eloquent\Relations\BelongsToMany;
use Illuminate\Database\Eloquent\Relations\HasMany;
use Illuminate\Database\Eloquent\SoftDeletes;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Notifications\Notifiable;
@@ -21,27 +23,27 @@ class Customer extends Authenticatable
protected $casts = ['email_verified_at' => 'datetime'];
public function addresses()
public function addresses(): HasMany
{
return $this->hasMany(CustomerAddress::class);
}
public function customer_deliveries()
public function customer_deliveries(): HasMany
{
return $this->hasMany(CustomerDelivery::class);
}
public function deliveries()
public function deliveries(): BelongsToMany
{
return $this->belongsToMany(Delivery::class, CustomerDelivery::class);
}
public function invoices()
public function invoices(): HasMany
{
return $this->hasMany(Invoice::class);
}
public function orders()
public function orders(): HasMany
{
return $this->hasMany(Order::class);
}

View File

@@ -3,9 +3,10 @@
namespace App\Repositories\Core;
use Carbon\Carbon;
use function League\Period\interval_after;
use League\Period\Period;
use function League\Period\interval_after;
class DateRange
{
public static function today()
@@ -60,9 +61,10 @@ class DateRange
];
}
public static function getPeriodsLastMonthWithLabels($nb, $with_actual = true)
public static function getPeriodsLastMonthWithLabels($nb, $withActual = true)
{
$periods = DateRange::PeriodsToCarbon(DateRange::getPeriodsLastMonth($nb, $with_actual));
$data = [];
$periods = DateRange::PeriodsToCarbon(DateRange::getPeriodsLastMonth($nb, $withActual));
$labels = DateRange::getMonthNames($periods);
foreach ($labels as $label) {
$data[$label] = $periods;
@@ -76,13 +78,12 @@ class DateRange
return self::getMonthNames(self::PeriodsToCarbon(self::getPeriodsLastMonth(12)));
}
public static function getPeriodsLastMonth($nb = 1, $with_actual = true)
public static function getPeriodsLastMonth($nb = 1, $withActual = true)
{
$end = $with_actual ? Carbon::now()->endOfMonth() : self::lastMonth();
$begin = ($nb == 1) ? $end->copy()->startOfMonth() : $end->copy()->startOfMonth()->subMonth($nb - 1);
$t = self::getPeriodsbyMonth($begin, $end);
$end = $withActual ? Carbon::now()->endOfMonth() : self::lastMonth();
$begin = $nb === 1 ? $end->copy()->startOfMonth() : $end->copy()->startOfMonth()->subMonth($nb - 1);
return self::getPeriodsbyMonth($begin, $end);
return self::getPeriodsByMonth($begin, $end);
}
public static function getMonthNamesByPeriods($periods)
@@ -106,20 +107,20 @@ class DateRange
return $months;
}
public static function getPeriodsLastWeek($nb = 1, $with_actual = true)
public static function getPeriodsLastWeek($nb = 1, $withActual = true)
{
$end = $with_actual ? Carbon::now()->endOfWeek() : self::lastWeek();
$end = $withActual ? Carbon::now()->endOfWeek() : self::lastWeek();
$begin = $end->copy()->subWeek($nb);
return self::getPeriodsbyWeek($begin, $end);
return static::getPeriodsByWeek($begin, $end);
}
public static function getPeriodsLastDay($nb = 1, $with_actual = true)
public static function getPeriodsLastDay($nb = 1, $withActual = true)
{
$end = $with_actual ? Carbon::now()->endOfDay() : static::lastDay();
$end = $withActual ? Carbon::now()->endOfDay() : static::lastDay();
$begin = $end->copy()->subDay($nb);
return self::getPeriodsbyDay($begin, $end);
return static::getPeriodsByDay($begin, $end);
}
public static function byDay()
@@ -156,6 +157,8 @@ class DateRange
case 4:
$date = Carbon::now()->subMonth(3)->startOfQuarter();
break;
default:
return false;
}
return [$date, $date->addMonth(6)];
@@ -181,32 +184,38 @@ class DateRange
return Carbon::now()->subDay()->startOfDay();
}
public static function getPeriodsbyMonth($begin, $end, $interval = 1)
public static function getPeriodsByMonth($begin, $end, $interval = 1)
{
return self::getPeriods($begin, $end, "$interval MONTH");
return self::getPeriods($begin, $end, "{$interval} MONTH");
}
public static function getPeriodsbyWeek($begin, $end, $interval = 1)
public static function getPeriodsByWeek($begin, $end, $interval = 1)
{
return self::getPeriods($begin, $end, "$interval WEEK");
return self::getPeriods($begin, $end, "{$interval} WEEK");
}
public static function getPeriodsbyDay($begin, $end, $interval = 1)
public static function getPeriodsByDay($begin, $end, $interval = 1)
{
return self::getPeriods($begin, $end, "$interval DAY");
return self::getPeriods($begin, $end, "{$interval} DAY");
}
public static function getPeriods($begin, $end, $duration, $interval = 1)
public static function getPeriods($begin, $end, $duration)
{
$period = new Period($begin, $end, $interval);
$range = [];
$period = new Period($begin, $end);
foreach ($period->getDatePeriod($duration) as $day) {
$daterange[] = interval_after($day, $duration);
$range[] = interval_after($day, $duration);
}
return $daterange;
/*
foreach ($period->dateRangeForward($duration) as $day) {
$daterange[] = interval_after($day, $duration);
}
*/
return $range;
}
public static function PeriodsToCarbon($periods)
public static function periodsToCarbon($periods)
{
$data = [];
foreach ($periods as $period) {
@@ -216,13 +225,39 @@ class DateRange
return $data;
}
public static function PeriodToCarbon($period)
public static function periodToCarbon($period)
{
return ['start' => self::DatePointToCarbon($period->getStartDate()), 'end' => self::DatePointToCarbon($period->getEndDate())];
return [
'start' => self::DatePointToCarbon($period->getStartDate()),
'end' => self::DatePointToCarbon($period->getEndDate()),
];
}
public static function DatePointToCarbon($date)
public static function datePointToCarbon($date)
{
return Carbon::createFromFormat('Y-m-d H:i:s', $date->format('Y-m-d H:i:s'));
}
public static function convertPeriod($txt)
{
return array_values(self::convertDaterange($txt));
}
public static function convertDaterange($txt)
{
$dates = explode('-', $txt);
return [
'start' => DateTime::convert(trim($dates[0])),
'end' => DateTime::convert(trim($dates[1])),
];
}
public static function getPeriodByLocale($start, $end)
{
return [
'start' => DateTime::convert($start),
'end' => DateTime::convert($end),
];
}
}

View File

@@ -2,9 +2,9 @@
namespace App\Repositories\Core;
use Carbon\Carbon;
use App;
use Illuminate\Support\Carbon;
use Illuminate\Support\Str;
use Jenssegers\Date\Date;
class DateTime
{
@@ -28,60 +28,90 @@ class DateTime
return $short ? $date->shortDayName : $date->dayName;
}
public static function DatetoLocale($date = null)
public static function getDateTime()
{
return self::datetimeToLocale(date('Y-m-d H:i:s'));
}
public static function getDate()
{
return self::dateToLocale(date('Y-m-d'));
}
public static function getLang()
{
return App::currentLocale();
// return session('locale') ? session('locale') : 'fr';
}
public static function datetoLocale($date = null)
{
$format = self::getLocaleFormatDate();
if (! is_null($date) && ! empty($date)) {
$date = Carbon::parse($date)->format($format);
} elseif ($date == 'now') {
} elseif ($date === 'now') {
$date = today()->format($format);
}
return $date;
}
public static function DatetimeToLocale($date = null)
public static function datetimeToLocale($date = null)
{
$format = self::getLocaleFormatDatetime();
if (! is_null($date) && ! empty($date)) {
$date = Carbon::parse($date)->format($format);
} elseif ($date == 'now') {
} elseif ($date === 'now') {
$date = now()->format($format);
}
return $date;
}
public static function getDateTime()
public static function countDaysFrom($date)
{
return self::DatetimeToLocale(date('Y-m-d H:i:s'));
$begin = DateTime::getCarbonTime($date);
return $begin->diffInDays(now()) + 1;
}
public static function getDate()
public static function getCarbonTime($date)
{
return self::DateToLocale(date('Y-m-d'));
$format = self::getLocaleFormatDatetime();
if (strlen($date) === 16) {
$date .= ':00';
}
return ! empty($date) ? Carbon::createFromFormat($format, $date) : null;
}
public static function getLang()
public static function getCarbonDate($date)
{
return session('locale') ? session('locale') : 'fr';
$format = self::getLocaleFormatDate();
return ! empty($date) ? Carbon::createFromFormat($format, $date) : null;
}
public static function convert($date)
{
$format = self::getLocaleFormatDate();
return ! empty($date) ? Carbon::createFromFormat($format, $date)->isoFormat('Y-MM-DD') : null;
return ! empty($date) ? self::getCarbonDate($date)->isoFormat('Y-MM-DD') : null;
}
public static function convertTime($date)
{
$format = self::getLocaleFormatDatetime();
if (strlen($date) == 16) {
$date .= ':00';
}
return ! empty($date) ? self::getCarbonTime($date)->isoFormat('Y-MM-DD HH:mm:ss') : null;
}
return ! empty($date) ? Carbon::createFromFormat($format, $date)->isoFormat('Y-MM-DD HH:mm:ss') : null;
public static function toLocale($date)
{
$format = self::getLocaleFormatDate();
return ! empty($date) ? Carbon::parse($date)->Format($format) : null;
}
public static function toISO($date)
{
return ! empty($date) ? Carbon::parse($date)->isoFormat('Y-MM-DD') : null;
}
public static function toFr($date)
@@ -97,7 +127,7 @@ class DateTime
public static function getYearFromDate($date)
{
// return date_format(DateTime::convert($signature_date), 'Y');
$date = DateTime::convert($date);
$date = self::convert($date);
$date = date_create($date);
return date_format($date, 'Y');
@@ -118,6 +148,20 @@ class DateTime
return $format;
}
public static function checkDateFormat($date)
{
if (preg_match("/^\d{2}\/\d{2}\/\d{4}$/", $date)) {
$day = substr($date, 0, 2);
$month = substr($date, 3, 2);
$year = substr($date, 6, 4);
if (checkdate($month, $day, $year)) {
return true;
}
}
return false;
}
public static function getLocaleFormatDatetime()
{
$locale = self::getLang();
@@ -165,7 +209,8 @@ class DateTime
return Carbon::parse($date)->isoFormat($format);
}
public static function relativeTime()
public static function convertTimeToDate($date)
{
return substr($date, 0, 10);
}
}

View File

@@ -8,13 +8,66 @@ use SoftCreatR\MimeDetector\MimeDetectorException;
class File
{
public static function copy($source, $target)
{
$source = self::sanitize($source);
$target = self::sanitize($target);
if (! self::checkFile($source)) {
return false;
}
$dirname = self::relative(dirname($target));
self::checkDirOrCreate($dirname);
return copy($source, $target);
}
public static function checkDirOrCreate($dir)
{
return self::checkDir($dir) ? true : self::createDir($dir);
}
public static function sanitize($filename)
{
return str_replace('\\', '/', $filename);
}
public static function relative($filename)
{
return str_replace(self::getStorageAppPath(), '', $filename);
}
public static function getStorageAppPath()
{
return self::sanitize(storage_path()).'/app';
}
public static function getTree($path)
{
$tree = [];
$branch = [
'label' => basename($path),
];
foreach (\File::files($path) as $file) {
$branch['children'][] = basename($file);
}
foreach (\File::directories($path) as $directory) {
$branch['children'][] = self::getTree($directory);
}
return array_merge($tree, $branch);
}
public static function list($dir, $mask = '/*')
{
return glob($dir);
}
public static function checkDir($dir)
{
// return File::isDirectory($dir)
return is_dir($dir);
}
@@ -25,19 +78,17 @@ class File
public static function createDir($dir)
{
return mkdir($dir, '0777', true);
return Storage::makeDirectory($dir);
}
public static function deleteDir($dir)
{
Storage::deleteDirectory($dir);
return true;
return Storage::deleteDirectory($dir);
}
public static function createFile($file, $content)
{
Storage::put($file, $content);
return Storage::put($file, $content);
}
public static function getFile($file)
@@ -68,4 +119,27 @@ class File
exit('An error occured while trying to load the given file.');
}
}
public static function replaceInFile($path, $string, $replace)
{
set_time_limit(0);
$temp = false;
if (is_file($path) === true) {
$file = fopen($path, 'r');
$temp = tempnam('./', 'tmp');
if (is_resource($file) === true) {
while (feof($file) === false) {
file_put_contents($temp, str_replace($string, $replace, fgets($file)), FILE_APPEND);
}
fclose($file);
}
unlink($path);
}
return $temp ? rename($temp, $path) : false;
}
}

View File

@@ -6,8 +6,6 @@ use Carbon\Carbon;
class HelperDate
{
public static $is_debug = true;
public static function toLocaleFormat($date)
{
if (! (! is_null($date) && ! empty($date))) {
@@ -24,9 +22,8 @@ class HelperDate
default:
$format = 'Y-m-d';
}
$date = Carbon::parse($date)->format($format);
return $date;
return Carbon::parse($date)->format($format);
}
public static function fromLocale($d)
@@ -61,7 +58,7 @@ class HelperDate
public static function toFrenchDate($d)
{
if ($d && $d != '0000-00-00') {
if ($d && $d !== '0000-00-00') {
return Carbon::createFromFormat('Y-m-d', $d)->format('d/m/Y');
}

View File

@@ -0,0 +1,31 @@
<?php
namespace App\Repositories\Core;
use Spatie\MediaLibrary\MediaCollections\Models\Media;
use Spatie\MediaLibrary\Support\PathGenerator\PathGenerator;
class MediaPathGenerator implements PathGenerator
{
public function getPath(Media $media): string
{
return $this->getBasePath($media).'/';
}
public function getPathForConversions(Media $media): string
{
return $this->getBasePath($media).'/conversions/';
}
public function getPathForResponsiveImages(Media $media): string
{
return $this->getBasePath($media).'/responsive-images/';
}
protected function getBasePath(Media $media): string
{
$model = basename(str_replace('\\', '/', $media->model_type));
return basename($model).'/images/'.$media->getKey();
}
}

View File

@@ -18,6 +18,16 @@ class Storage
return Storage2::disk('local')->has($dir);
}
public static function move($source, $target)
{
return Storage2::move($source, $target);
}
public static function copy($source, $target)
{
return Storage2::copy($source, $target);
}
public static function checkFile($file)
{
return Storage2::exists($file);

View File

@@ -7,12 +7,71 @@ use App\Models\Botanic\Variety;
use App\Models\Shop\Article;
use App\Models\Shop\ArticleNature;
use App\Models\Shop\Merchandise;
use App\Repositories\Core\Medias;
use App\Traits\Model\Basic;
class ArticleNatures
{
use Basic;
public static function getIconBySlug($slug, $conversion = 'normal', $collection = 'images')
{
return self::getIcon(self::getIdBySlug($slug), $conversion, $collection);
}
public static function getIcon($id, $conversion = 'normal', $collection = 'images')
{
return Medias::getImage(self::get($id), $conversion, $collection);
}
public static function getIdBySlug($slug)
{
switch ($slug) {
case 'semences':
$id = 1;
break;
case 'plants':
$id = 2;
break;
case 'legumes':
$id = 3;
break;
case 'marchandises':
$id = 4;
break;
default:
$id = 1;
break;
}
return $id;
}
public static function getProductTypeBySlug($slug)
{
switch ($slug) {
case 'semences':
case 'plants':
case 'legumes':
$productType = 'botanic';
break;
case 'marchandises':
$productType = 'merchandise';
break;
default:
$productType = 'botanic';
break;
}
return $productType;
}
public static function storeIcon($nature, $file, $collection = 'images')
{
Medias::deleteImages($nature, $collection);
return Medias::storeImage($nature, $file, $collection);
}
public static function getProductType($id)
{
$type = self::get($id)->product_type ?? false;

View File

@@ -4,11 +4,14 @@
'breadcrumb' => [__('shop.article_natures.title'), __('shop.article_natures.edit')]
])
@include('boilerplate::load.fileinput')
@section('content')
{{ Form::open(['route' => 'Admin.Shop.ArticleNatures.store', 'id' => 'article_nature-form', 'autocomplete' => 'off', 'files' => true]) }}
{{ Form::open([
'route' => 'Admin.Shop.ArticleNatures.store',
'id' => 'article_nature-form',
'autocomplete' => 'off',
'files' => true,
]) }}
<input type="hidden" name="id" value="{{ $article_nature['id'] }}">
@include('Admin.Shop.ArticleNatures.form')
</form>

View File

@@ -1,41 +1,59 @@
<div class="row">
<div class="col-4">
{{ Form::label('product_type', 'Famille de produit') }}
@include('components.form.select', [
'name' => 'product_type',
'value' => $article_nature['product_type'] ?? null,
'list' => $product_types ?? null,
'required' => true,
])
</div>
</div>
<div class="row">
<div class="col-md-8">
<div class="row mb-3">
<div class="col-8">
<div class="row mb-3">
<div class="col-12">
<div class="col-6">
{{ Form::label('product_type', 'Famille de produit') }}
@include('components.form.select', [
'name' => 'product_type',
'value' => $article_nature['product_type'] ?? null,
'list' => $product_types ?? null,
'required' => true,
])
</div>
<div class="col-6">
{{ Form::label('name', 'Nom') }}
@include('components.form.input', ['name' => 'name', 'value' => $article_nature['name'] ?? null, 'required' => true])
@include('components.form.input', [
'name' => 'name',
'value' => $article_nature['name'] ?? null,
'required' => true,
])
</div>
</div>
<div class="row mb-3">
<div class="col-12">
{{ Form::label('description', 'Description') }}
@include('components.form.textarea', ['name' => 'description', 'value' => $article_nature['description'] ?? null, 'class' => 'editor', 'required' => false])
@include('components.form.textarea', [
'name' => 'description',
'value' => $article_nature['description'] ?? null,
'class' => 'editor',
'required' => false,
])
</div>
</div>
</div>
<div class="col-4">
<x-card title="{{ __('icone') }}">
@include('components.widgets.imgUpload', [
'name' => 'icon',
'id_name' => 'icon',
'file' => $article_nature['icon'] ?? false,
])
</x-card>
</div>
</div>
@include('components.save')
<x-save />
@include('load.form.editor')
@include('load.form.upload.fileinput')
@include('load.form.save')
@push('js')
<script>
$(function() {
initEditor();
initUploadImage();
initSaveForm('#article_nature-form');
});
</script>

View File

@@ -4,10 +4,10 @@
@section('content')
<div class="row">
<div class="col-3">
<div class="col-lg-3 col-md-12">
@include('Shop.Customers.partials.user')
</div>
<div class="col-9">
<div class="col-lg-9 col-md-12">
@include('Shop.Customers.partials.sale')
</div>
</div>

View File

@@ -0,0 +1,21 @@
<div class="row">
<div class="col-12">
<div id="{{ $id_name ?? $name }}_preview" class="{{ ($file ?? false) ? '' : 'd-none' }}">
<img src="{{ $file ?? null }}" class="img-fluid">
@if (!($disabled ?? false))
<div class="mt-2 text-right">
<button type="button" class="btn btn-sm btn-danger img-delete"><i class="fa fa-trash"></i></button>
</div>
@endif
</div>
@if (!($disabled ?? false))
<div id="{{ $id_name ?? $name }}_uploader" class="{{ ($file ?? false) ? 'd-none' : '' }} uploader-input">
@include('components.form.file', [
'name' => $name,
'value' => $file ?? null,
])
</div>
@endif
</div>
</div>

View File

@@ -1,25 +1,144 @@
@if(!defined('LOAD_FILEINPUT'))
@push('css')
<link rel="stylesheet" href="{!! asset('/assets/plugins/bootstrap-fileinput/css/fileinput.min.css') !!}">
<link rel="stylesheet" href="/assets/plugins/bootstrap-fileinput/css/fileinput.min.css">
@endpush
@push('js')
<script src="{!! asset('/assets/plugins/bootstrap-fileinput/js/fileinput.min.js') !!}"></script>
@push('scripts')
<script src="/assets/plugins/bootstrap-fileinput/js/fileinput.min.js"></script>
@if(App::getLocale() !== 'en')
<script src="{!! asset('/assets/plugins/bootstrap-fileinput/js/locales/'. App::getLocale() .'.js') !!}"></script>
<script src="/assets/plugins/bootstrap-fileinput/js/locales/{{ App::getLocale() }}.js"></script>
<script src="/assets/plugins/bootstrap-fileinput/themes/fas/theme.min.js"></script>
<script>
$.fn.fileinput.defaults.language = '{{ App::getLocale() }}';
</script>
@endif
@component('boilerplate::minify')
<script>
function initUpload(selector) {
var selector = '.file';
$(selector).fileinput({
function UploadInit(sel, options, callbackUploaded) {
// console.log(options);
var selector = (typeof(sel) == 'undefined') ? '.fileinput' : sel;
$(selector).fileinput(options)
.on("filebatchselected", function(event, files) {
$(selector).fileinput("upload");
}).on('fileuploaded', function (event, data, previewId, index, fileId) {
// console.log('File uploaded', previewId, index, fileId);
var file = data.files[0];
// console.log(file);
var response = data.response.initialPreviewConfig.extra;
// console.log(response);
response.model = $(this).data('model');
// console.log(response);
if (typeof(callbackUploaded) !== 'undefined') {
// console.log('Callback');
eval(callbackUploaded);
}
}).on('filebatchuploadcomplete', function(event, preview, config, tags, extraData) {
console.log('File Batch Uploaded', preview, config, tags, extraData);
}).on('filebatchuploadsuccess', function(event, data) {
console.log('File batch upload success');
console.log(data);
}).on('fileuploaderror', function(event, data, msg) {
console.log('File upload error');
console.log(data);
console.log(msg);
});
}
function UploadOptions(options) {
return {
allowedFileExtensions: (typeof(options.allowedFileExtensions) == 'undefined') ? ['doc','docx','jpg','jpeg','png','xls','xlsx','pdf'] : options.allowedFileExtensions,
browseOnZoneClick: (typeof(options.browseOnZoneClick) == 'undefined') ? true : options.browseOnZoneClick,
dropZoneEnabled: (typeof(options.dropZoneEnabled) == 'undefined') ? false : options.dropZoneEnabled,
initialPreview: (typeof(options.initialPreview) == 'undefined') ? false : options.initialPreview,
initialPreviewAsData: (typeof(options.initialPreviewAsData) == 'undefined') ? false : options.initialPreviewAsData,
maxFilesize: (typeof(options.maxFilesize) == 'undefined') ? false : options.maxFilesize,
overwriteInitial: (typeof(options.overwriteInitial) == 'undefined') ? false : options.overwriteInitial,
showCaption: (typeof(options.showCaption) == 'undefined') ? true : options.showCaption,
showPreview: (typeof(options.showPreview) == 'undefined') ? true : options.showPreview,
showRemove: (typeof(options.showRemove) == 'undefined') ? false : options.showRemove,
showUpload: (typeof(options.showUpload) == 'undefined') ? false : options.showUpload,
showUploadStats: (typeof(options.showUploadStats) == 'undefined') ? true : options.showUploadStats,
theme: (typeof(options.theme) == 'undefined') ? 'fas' : options.theme,
uploadAsync: (typeof(options.uploadAsync) == 'undefined') ? false : options.uploadAsync,
};
}
function initUpload(sel, options, callbackUploaded) {
UploadInit(sel, UploadOptions(options), callbackUploaded);
}
function initUploadMultiple(sel, options, callbackUploaded) {
UploadInit(sel, Object.assign({}, UploadOptions({
uploadUrl: "/site/test-upload",
enableResumableUpload: true,
initialPreviewAsData: true,
deleteUrl: '/upload',
dropZoneEnabled: true,
overwriteInitial: false,
showCaption: false,
showPreview: true,
showRemove: true,
showUpload: false,
uploadAsync: true,
maxFileCount: 5,
}), options), callbackUploaded);
}
function initRowUpload(sel, options, callbackUploaded) {
UploadInit(sel, Object.assign({}, UploadOptions({
showCaption: true,
showPreview: false,
showRemove: true,
uploadAsync: true,
}), options), callbackUploaded);
}
function initPdfUpload(sel, options, callbackUploaded) {
UploadInit(sel, Object.assign({}, UploadOptions({
allowedFileExtensions: ['pdf'],
showCaption: false,
dropZoneEnabled: false,
showUpload: false,
}), options), callbackUploaded);
}
function initUploadImage(image, sel) {
var selector = (typeof(sel) == 'undefined') ? '.fileinput' : sel;
var imgs = image ? [image] : false;
initFileInputImage(imgs, selector);
$('.img-delete').click(function() {
$container = $(this).parents('.row');
// console.log($container);
$(this).closest('.row').find('.uploader-input').toggleClass('d-none');
$(this).closest('.row').find('img').toggleClass('d-none');
$(this).toggleClass('d-none');
});
}
function initFileInputImage(images, sel)
{
UploadInit(sel, {
allowedFileExtensions: ['jpg', 'jpeg', 'png', 'gif'],
overwriteInitial: true,
showPreview: true,
showUpload: false,
maxFileSize: 10000,
initialPreview: images,
initialPreviewAsData: false,
theme: 'fas',
});
}
function uploadShowImage(id, image)
{
$('#' + id + '_preview').toggleClass('d-none');
$('#' + id + '_preview').find('img').attr('src', image);
$('#' + id + '_uploader').toggleClass('d-none');
}
</script>
@endif
@endcomponent
@endpush
@php(define('LOAD_FILEINPUT', true))
@endif