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/Neopoints/momsecurity.be/app/Komma/Dynamic/ComponentApiController.php
<?php


namespace App\Komma\Dynamic;

use App\Komma\Dynamic\Component\ComponentSaveState;
use App\Komma\Dynamic\Componentables\ComponentableService;
use App\Komma\Dynamic\ComponentArea\ComponentAreaService;
use App\Komma\Dynamic\ComponentType\ComponentType;
use App\Komma\Dynamic\ComponentType\ComponentTypeResolver;
use App\Komma\Kms\Core\Sections\AttributeKey;
use Illuminate\Http\Request;

/**
 * Class ComponentApiController
 *
 * Used by javascript to communicate with the DynamicGroupApiBackend
 *
 * @package App\Komma\Dynamic
 */
class ComponentApiController
{
    public function __construct()
    {

    }

    /**
     * Returns an array containing all available group names
     *
     * @return array
     */
    public function getAllAvailableComponentTypeNames()
    {
        $groupNames = [];

        ComponentTypeResolver::resolveAll()->each(function(ComponentType $dynamicGroup) use (&$groupNames) {
            $groupNames[] = $dynamicGroup->name;
        });

        return $groupNames;
    }

    public function resolveComponentTypeToViewFromRequest(Request $request) {
        $componentAreaAttributeKey = $request->input('componentAreaAttributeKey');
        $componentSaveState = $request->input('componentSaveState');
        $componentSaveState = json_decode($componentSaveState, true);
        return ComponentApiController::resolveComponentTypeToView($componentAreaAttributeKey, $componentSaveState);
    }

    /**
     * Resolves a dynamic group name to HTML
     *
     * @param Request $request
     * @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View
     */
    public function resolveComponentTypeToView($componentAreaAttributeKey, $componentSaveState)
    {
        //$componentAreaAttributeKey = $request->input('componentAreaAttributeKey');
        //$componentSaveState = $request->input('componentSaveState');
        //$componentSaveState = json_decode($componentSaveState, true);
        if(!$componentSaveState) throw new \RuntimeException('ComponentApiController:resolveComponentTypeToView. Encountered an invalid savestate string: '.request()->input('componentSaveState'));

        $componentSaveState = ComponentSaveState::fromArray($componentSaveState);

        /** @var ComponentType $componentType */
        $componentType = ComponentTypeResolver::resolve($componentSaveState->getComponentTypeId());
        if(!is_a($componentType, ComponentType::class)) abort(400, 'Could not resolve ComponentType" '.$componentSaveState->getComponentTypeId().'"');

        $componentType = ComponentAreaService::generateComponentAttributeKeysForComponent($componentType, $componentAreaAttributeKey, $componentSaveState->getId());

        $componentData = [
            'component' => $componentType,
            'id' => $componentSaveState->getId(), //An id of 0 represents a new component
        ];

        $componentableAutoCompleteInputs = collect();
        $componentAreaAttributeKeyInstance = AttributeKey::createInstanceFromString($componentAreaAttributeKey);
        ComponentTypeResolver::passComponentTypeComponentableTypeModelCollectionsToClosure($componentType, function($selectOptionCollection, $key)  use ($componentAreaAttributeKeyInstance, $componentSaveState, &$componentableAutoCompleteInputs){
            $componentableAutoCompleteInputs->push(ComponentableService::getComponentableAutoCompleteInputForComponent($selectOptionCollection, $componentAreaAttributeKeyInstance, $componentSaveState->getId(), $key));
        });

        $componentData['componentableAutoCompleteInputs'] = $componentableAutoCompleteInputs;

        return view('kms.partials.entity.component', $componentData);
    }

    /**
     * Resolves a set of dynamic group name to HTML
     *
     * @param Request $request
     * @return array
     */
    public function resolveComponentAreaToView(Request $request)
    {
        $componentAreaAttributeKey = $request->input('componentAreaAttributeKey');
        $componentSaveStates = json_decode($request->input('componentSaveStates'), true);
        $html = [];
        foreach ($componentSaveStates as $componentSaveState) {
            array_push($html, ComponentApiController::resolveComponentTypeToView($componentAreaAttributeKey, $componentSaveState)->render());
        }
        return $html;
    }
}