Files
intotheeast-com-content/plugins/flex-objects/classes/Api/FlexBlueprintController.php
T

49 lines
1.5 KiB
PHP

<?php
declare(strict_types=1);
namespace Grav\Plugin\FlexObjects\Api;
use Grav\Plugin\Api\Controllers\BlueprintController;
use Grav\Plugin\Api\Exceptions\NotFoundException;
use Grav\Plugin\Api\Response\ApiResponse;
use Grav\Plugin\FlexObjects\Flex;
use Psr\Http\Message\ResponseInterface;
use Psr\Http\Message\ServerRequestInterface;
use RocketTheme\Toolbox\Event\Event;
class FlexBlueprintController extends BlueprintController
{
/**
* GET /blueprints/flex-objects/{type} — Serve the flex directory blueprint for form rendering.
*/
public function flexBlueprint(ServerRequestInterface $request): ResponseInterface
{
$this->requirePermission($request, 'api.access');
$type = $this->getRouteParam($request, 'type');
/** @var Flex $flex */
$flex = $this->grav['flex_objects'];
$directory = $flex->getDirectory($type);
if (!$directory || !$directory->isEnabled()) {
throw new NotFoundException("Flex directory '{$type}' not found or not enabled.");
}
$blueprint = $directory->getBlueprint();
$data = $this->serializeBlueprint($blueprint, $type);
// Fire event to allow plugins to modify the serialized blueprint fields
$event = new Event([
'fields' => $data['fields'],
'template' => 'flex-objects/' . $type,
'user' => $this->getUser($request),
]);
$this->grav->fireEvent('onApiBlueprintResolved', $event);
$data['fields'] = $event['fields'];
return ApiResponse::create($data);
}
}