HEX
Server: Microsoft-IIS/8.5
System: Windows NT YDAWBH120 6.3 build 9600 (Windows Server 2012 R2 Standard Edition) AMD64
User: tentjecom_web (0)
PHP: 7.4.14
Disabled: NONE
Upload Files
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;
    }
}