From 6a49f5530035e3abccf9bfbd7c1825489632cfde Mon Sep 17 00:00:00 2001 From: Devansh Date: Thu, 30 Dec 2021 16:54:12 +0530 Subject: [PATCH] Global Flags Provided --- packages/Webkul/Core/src/Models/Locale.php | 48 ++++--- .../Webkul/Velocity/src/Helpers/Helper.php | 117 ++++++------------ public/flags/de.png | Bin 0 -> 1430 bytes public/flags/en.png | Bin 0 -> 3833 bytes public/flags/es.png | Bin 0 -> 2354 bytes public/flags/fr.png | Bin 0 -> 1563 bytes public/flags/nl.png | Bin 0 -> 1445 bytes public/flags/tr.png | Bin 0 -> 2454 bytes 8 files changed, 70 insertions(+), 95 deletions(-) create mode 100644 public/flags/de.png create mode 100644 public/flags/en.png create mode 100644 public/flags/es.png create mode 100644 public/flags/fr.png create mode 100644 public/flags/nl.png create mode 100644 public/flags/tr.png diff --git a/packages/Webkul/Core/src/Models/Locale.php b/packages/Webkul/Core/src/Models/Locale.php index 800dde858..28fc17b5c 100755 --- a/packages/Webkul/Core/src/Models/Locale.php +++ b/packages/Webkul/Core/src/Models/Locale.php @@ -13,6 +13,20 @@ class Locale extends Model implements LocaleContract { use HasFactory; + /** + * List of all default locale images for velocity. + * + * @var array + */ + protected $defaultImage = [ + 'de' => 'flags/de.png', + 'en' => 'flags/en.png', + 'es' => 'flags/es.png', + 'fr' => 'flags/fr.png', + 'nl' => 'flags/nl.png', + 'tr' => 'flags/tr.png', + ]; + /** * The attributes that are mass assignable. * @@ -46,19 +60,9 @@ class Locale extends Model implements LocaleContract * * @return string */ - public function image_url() + public function getImageUrlAttribute(): string { - if (! $this->locale_image) { - $defaultLocaleImagePath = 'themes/velocity/assets/images/flags/' . $this->code . '.png'; - - if (file_exists(public_path($defaultLocaleImagePath))) { - return asset($defaultLocaleImagePath); - } - - return ''; - } - - return Storage::url($this->locale_image); + return $this->image_url(); } /** @@ -66,8 +70,24 @@ class Locale extends Model implements LocaleContract * * @return string */ - public function getImageUrlAttribute() + public function image_url(): string { - return $this->image_url(); + if (! $this->locale_image) { + return $this->getDefaultImageSource(); + } + + return Storage::url($this->locale_image); + } + + /** + * Get default image source. + * + * @return string + */ + public function getDefaultImageSource(): string + { + return isset($this->defaultImage[$this->code]) && file_exists($this->defaultImage[$this->code]) + ? asset($this->defaultImage[$this->code]) + : ''; } } diff --git a/packages/Webkul/Velocity/src/Helpers/Helper.php b/packages/Webkul/Velocity/src/Helpers/Helper.php index 97aa443b7..871876506 100644 --- a/packages/Webkul/Velocity/src/Helpers/Helper.php +++ b/packages/Webkul/Velocity/src/Helpers/Helper.php @@ -2,7 +2,6 @@ namespace Webkul\Velocity\Helpers; -use Illuminate\Support\Facades\Storage; use Webkul\Attribute\Repositories\AttributeOptionRepository; use Webkul\Product\Facades\ProductImage; use Webkul\Product\Helpers\Review; @@ -64,20 +63,6 @@ class Helper extends Review */ protected $velocityMetadataRepository; - /** - * List of all default locale images for velocity. - * - * @var array - */ - protected $defaultLocaleImageSources = [ - 'de' => '/themes/velocity/assets/images/flags/de.png', - 'en' => '/themes/velocity/assets/images/flags/en.png', - 'es' => '/themes/velocity/assets/images/flags/es.png', - 'fr' => '/themes/velocity/assets/images/flags/fr.png', - 'nl' => '/themes/velocity/assets/images/flags/nl.png', - 'tr' => '/themes/velocity/assets/images/flags/tr.png' - ]; - /** * Create a helper instance. * @@ -97,9 +82,9 @@ class Helper extends Review ProductReviewRepository $productReviewRepository, VelocityMetadataRepository $velocityMetadataRepository ) { - $this->productModel = $productModel; + $this->productModel = $productModel; - $this->attributeOptionRepository = $attributeOptionRepository; + $this->attributeOptionRepository = $attributeOptionRepository; $this->productRepository = $productRepository; @@ -107,9 +92,9 @@ class Helper extends Review $this->orderBrandsRepository = $orderBrandsRepository; - $this->productReviewRepository = $productReviewRepository; + $this->productReviewRepository = $productReviewRepository; - $this->velocityMetadataRepository = $velocityMetadataRepository; + $this->velocityMetadataRepository = $velocityMetadataRepository; } /** @@ -181,7 +166,7 @@ class Helper extends Review } foreach ($brandName as $brandKey => $brandvalue) { - $brandImplode[$brandKey][] = implode(' | ', array_map("ucfirst", $brandvalue)); + $brandImplode[$brandKey][] = implode(' | ', array_map('ucfirst', $brandvalue)); } return $brandImplode; @@ -214,14 +199,14 @@ class Helper extends Review try { $metaData = $this->velocityMetadataRepository->findOneWhere([ - 'locale' => $locale, - 'channel' => $channel + 'locale' => $locale, + 'channel' => $channel, ]); if (! $metaData && $default) { $metaData = $this->velocityMetadataRepository->findOneWhere([ - 'locale' => 'en', - 'channel' => 'default' + 'locale' => 'en', + 'channel' => 'default', ]); } @@ -255,8 +240,8 @@ class Helper extends Review public function getMessage() { $message = [ - 'message' => '', - 'messageType' => '', + 'message' => '', + 'messageType' => '', 'messageLabel' => '', ]; @@ -291,7 +276,7 @@ class Helper extends Review if (is_string($path) && is_readable($path)) { return include $path; } else { - $currentLocale = "en"; + $currentLocale = 'en'; $path = __DIR__ . "/../Resources/lang/$currentLocale/app.php"; @@ -336,8 +321,8 @@ class Helper extends Review $galleryImages = ProductImage::getGalleryImages($product); $productImage = ProductImage::getProductBaseImage($product, $galleryImages)['medium_image_url']; - $largeProductImageName = "large-product-placeholder.png"; - $mediumProductImageName = "meduim-product-placeholder.png"; + $largeProductImageName = 'large-product-placeholder.png'; + $mediumProductImageName = 'meduim-product-placeholder.png'; if (strpos($productImage, $mediumProductImageName) > -1) { $productImageNameCollection = explode('/', $productImage); @@ -353,28 +338,28 @@ class Helper extends Review $isProductNew = ($product->new && ! strpos($priceHTML, 'sticker sale') > 0) ? __('shop::app.products.new') : false; return [ - 'priceHTML' => $priceHTML, - 'avgRating' => ceil($reviewHelper->getAverageRating($product)), - 'totalReviews' => $reviewHelper->getTotalReviews($product), - 'image' => $productImage, - 'new' => $isProductNew, - 'galleryImages' => $galleryImages, - 'name' => $product->name, - 'slug' => $product->url_key, - 'description' => $product->description, - 'shortDescription' => $product->short_description, - 'firstReviewText' => trans('velocity::app.products.be-first-review'), - 'addToCartHtml' => view('shop::products.add-to-cart', [ - 'product' => $product, - 'addWishlistClass' => ! (isset($list) && $list) ? '' : '', + 'priceHTML' => $priceHTML, + 'avgRating' => ceil($reviewHelper->getAverageRating($product)), + 'totalReviews' => $reviewHelper->getTotalReviews($product), + 'image' => $productImage, + 'new' => $isProductNew, + 'galleryImages' => $galleryImages, + 'name' => $product->name, + 'slug' => $product->url_key, + 'description' => $product->description, + 'shortDescription' => $product->short_description, + 'firstReviewText' => trans('velocity::app.products.be-first-review'), + 'addToCartHtml' => view('shop::products.add-to-cart', [ + 'product' => $product, + 'addWishlistClass' => ! (isset($list) && $list) ? '' : '', - 'showCompare' => core()->getConfigData('general.content.shop.compare_option') == "1" + 'showCompare' => core()->getConfigData('general.content.shop.compare_option') == '1' ? true : false, - 'btnText' => (isset($metaInformation['btnText']) && $metaInformation['btnText']) + 'btnText' => (isset($metaInformation['btnText']) && $metaInformation['btnText']) ? $metaInformation['btnText'] : null, - 'moveToCart' => (isset($metaInformation['moveToCart']) && $metaInformation['moveToCart']) + 'moveToCart' => (isset($metaInformation['moveToCart']) && $metaInformation['moveToCart']) ? $metaInformation['moveToCart'] : null, 'addToCartBtnClass' => ! (isset($list) && $list) ? 'small-padding' : '', @@ -399,48 +384,18 @@ class Helper extends Review if ($productFlat) { $formattedProduct = $this->formatProduct($productFlat, false, [ 'moveToCart' => $moveToCart, - 'btnText' => $moveToCart ? trans('shop::app.customer.account.wishlist.move-to-cart') : null, + 'btnText' => $moveToCart ? trans('shop::app.customer.account.wishlist.move-to-cart') : null, ]); return array_merge($productFlat->toArray(), [ - 'slug' => $productFlat->url_key, + 'slug' => $productFlat->url_key, 'product_image' => $formattedProduct['image'], - 'priceHTML' => $formattedProduct['priceHTML'], - 'new' => $formattedProduct['new'], + 'priceHTML' => $formattedProduct['priceHTML'], + 'new' => $formattedProduct['new'], 'addToCartHtml' => $formattedProduct['addToCartHtml'], - 'galleryImages' => $formattedProduct['galleryImages'] + 'galleryImages' => $formattedProduct['galleryImages'], ]); } })->toArray(); } - - /** - * Get current locale image source. - * - * @return string - */ - public function getCurrentLocaleImageSource(): string - { - $localeImages = core()->getCurrentChannel()->locales()->pluck('locale_image', 'code'); - - $currentLocaleImage = $localeImages[app()->getLocale()] ?? null; - - return $currentLocaleImage - ? Storage::url($currentLocaleImage) - : $this->getDefaultImageSourceOfCurrentLocale(); - } - - /** - * Get default image source of current locale. - * - * @return string - */ - public function getDefaultImageSourceOfCurrentLocale(): string - { - $currentLocale = app()->getLocale(); - - return isset($this->defaultLocaleImageSources[$currentLocale]) - ? asset($this->defaultLocaleImageSources[$currentLocale]) - : ''; - } } diff --git a/public/flags/de.png b/public/flags/de.png new file mode 100644 index 0000000000000000000000000000000000000000..b28cfd98af517823106ec899c69bc78b7e4a8335 GIT binary patch literal 1430 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 U1A}{^#Q*>R07*qoM6N<$f}^CC4FCWD literal 0 HcmV?d00001