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/marisrental/boldt.tech/app/Komma/Components/ComponentType/ComponentTypeFactory.php
<?php


namespace App\Komma\Components\ComponentType;

use App\Komma\Components\ComponentType\Types\AbstractComponentType;
use App\Komma\Components\ComponentType\Types\CTAJobs;
use App\Komma\Components\ComponentType\Types\CTADirk;
use App\Komma\Components\ComponentType\Types\CTAPerson;
use App\Komma\Components\ComponentType\Types\DoubleText;
use App\Komma\Components\ComponentType\Types\Image;
use App\Komma\Components\ComponentType\Types\ProjectCards;
use App\Komma\Components\ComponentType\Types\ServicesDisplay;
use App\Komma\Components\ComponentType\Types\TeamGrid;
use App\Komma\Components\ComponentType\Types\Text;
use App\Komma\Components\ComponentType\Types\TextImage;
use App\Komma\Components\ComponentType\Types\TripleText;
use App\Komma\Components\ComponentType\Types\Video;
use Illuminate\Support\Collection;

/**
 * Class ComponentTypeFactory
 *
 * Knows how to create component types by passing it an ComponentTypes enum.
 *
 * WARNING! The Factory only can create one instance of a componentType per request.
 * If you make componentTypes more then once in a request, you will get the same componentType.
 * This is because they must have unique attribute keys.
 *
 * @package App\Komma\Components\ComponentType
 */
class ComponentTypeFactory
{
    private static $maked = [];

    /**
     * Make componentTypes
     *
     * @param int $componentTypeId
     * @return AbstractComponentType|Collection
     * @throws \ReflectionException
     */
    static public function make(int $componentTypeId = null)
    {
        if ($componentTypeId === null) {
            $componentTypes = new Collection();
            foreach (ComponentTypes::getAsArray() as $componentTypeId) {
                if ($componentTypeId === 0) {
                    continue;
                }
                $componentTypes->push(self::makeSpecificType($componentTypeId));
            }
            $componentTypes = $componentTypes->filter(function ($type) {
                return !is_null($type);
            });

            $componentTypes = $componentTypes->keyBy(function (AbstractComponentType $componentType) {
                return $componentType->getId();
            });
            return $componentTypes;
        } else {
            return self::makeSpecificType($componentTypeId);
        }
    }

    /**
     * @param $componentTypeId
     * @return AbstractComponentType
     */
    private static function makeSpecificType($componentTypeId)
    {
        if (in_array($componentTypeId, array_keys(self::$maked), true)) {
            return self::$maked[$componentTypeId];
        }

        switch ($componentTypeId) {
            case ComponentTypes::TEXT_IMAGE:
                self::$maked[$componentTypeId] = new TextImage();
                break;
            case ComponentTypes::DOUBLE_TEXT:
                self::$maked[$componentTypeId] = new DoubleText();
                break;
            case ComponentTypes::VIDEO:
                self::$maked[$componentTypeId] = new Video();
                break;
            case ComponentTypes::TEXT:
                self::$maked[$componentTypeId] = new Text();
                break;
            case ComponentTypes::IMAGE:
                self::$maked[$componentTypeId] = new Image();
                break;
            case ComponentTypes::SERVICES_DISPLAY:
                self::$maked[$componentTypeId] = new ServicesDisplay();
                break;
            case ComponentTypes::PROJECT_CARDS:
                self::$maked[$componentTypeId] = new ProjectCards();
                break;
            case ComponentTypes::CTA_PERSON:
                self::$maked[$componentTypeId] = new CTAPerson();
                break;
            case ComponentTypes::TEAM_GRID:
                self::$maked[$componentTypeId] = new TeamGrid();
                break;
            case ComponentTypes::CTA_JOBS:
                self::$maked[$componentTypeId] = new CTAJobs();
                break;
            case ComponentTypes::TRIPLE_TEXT:
                self::$maked[$componentTypeId] = new TripleText();
                break;
            default:
                throw new \RuntimeException('Type "' . $componentTypeId . '" not makable since it is unknown');
        }

        return self::$maked[$componentTypeId];
    }
}