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;
}
}