File: D:/HostingSpaces/SBogers95/rentman.io/app/Komma/PricingProducts/PricingProductService.php
<?php
namespace App\Komma\PricingProducts;
use App\Komma\Base\Service;
use App\Komma\Kms\Core\Attributes\Models\SelectOptionInterface;
use App\Komma\PricingProducts\Models\PricingProduct;
use Illuminate\Support\Collection;
use Illuminate\Support\Collection as BaseCollection;
class PricingProductService extends Service
{
public function getPricingProducts($pagination = false, $itemsPerPage = 9)
{
$pricingproducts = $this->site
->pricingproducts()
->with('translation', 'images', 'fallback_translation')
->orderBy('lft')
// We need to use a join to select the active pricingproducts because that is defined on the translations
->join('pricingproduct_translations', 'pricingproducts.id', '=', 'pricingproduct_translations.pricingproduct_id')
->select('pricingproducts.*', 'pricingproduct_translations.active', 'pricingproduct_translations.populate_from_english', 'pricingproduct_translations.language_id')
->where(function ($query) {
$query->where('active', '=', 1)
->orWhere('populate_from_english', '=', 1);
})
->where('language_id', \App::getLanguage()->id);
if ($pagination) {
$pricingproducts = $pricingproducts->paginate($itemsPerPage);
// Skip the population if language is already english
if (app()->getLocale() != 'en') {
$this->populatedFallbackTranslationOnCollection($pricingproducts->getCollection());
}
} else {
$pricingproducts = $pricingproducts->get();
// Skip the population if language is already english
if (app()->getLocale() != 'en') {
$this->populatedFallbackTranslationOnCollection($pricingproducts);
}
}
return $pricingproducts;
}
private function populatedFallbackTranslationOnCollection(Collection $pricingproducts)
{
foreach ($pricingproducts as $pricingproduct) {
// Skip if we don't need to populated
if (! $pricingproduct->translation->populate_from_english) {
continue;
}
$pricingproduct->translation = $pricingproduct->fallback_translation;
$pricingproduct->used_fallback_translation = true;
}
}
public function getOptionsForSelect($withRoot = false): BaseCollection
{
$selectOptions = collect();
$products = PricingProduct::with('translation');
if (! $withRoot) {
$products = $products->where('lft', '!=', 1);
}
$products = $products->get();
foreach ($products as $product) {
$name = $product->getDisplayName();
if (empty($name)) {
if ($product->lft == 1) {
$name = 'Root';
} else {
$name = __('kms/pricingproducts.entity').' '.$product->id;
}
}
/** @var SelectOptionInterface $selectOption */
$selectOption = (\App::make(SelectOptionInterface::class))
->setContent($name)
->setHtmlContent($name)
->setValue($product->id);
$selectOptions->push($selectOption);
}
return $selectOptions;
}
}