. * * The interactive user interfaces in modified source and object code versions * of this program must display Appropriate Legal Notices, as required under * Section 5 of the GNU Affero General Public License version 3. * * In accordance with Section 7(b) of the GNU Affero General Public License version 3, * these Appropriate Legal Notices must retain the display of the "EspoCRM" word. ************************************************************************/ namespace Espo\Core\Utils\Client; use Espo\Core\Api\Response; use Espo\Core\Utils\Client\ActionRenderer\Params; use Espo\Core\Utils\Json; use Espo\Core\Utils\ClientManager; use Espo\Core\Utils\Theme\Direction; /** * Renders a front-end page that executes a controller action. Utilized by entry points. */ class ActionRenderer { public function __construct(private ClientManager $clientManager) {} /** * Writes to a body. */ public function write(Response $response, Params $params): void { $body = $this->render( controller: $params->getController(), action: $params->getAction(), data: $params->getData(), initAuth: $params->initAuth(), scripts: $params->getScripts(), pageTitle: $params->getPageTitle(), theme: $params->getTheme(), direction: $params->getDirection(), login: $params->login(), ); $securityParams = $params->getSecurityParams(); if (!$securityParams && $params->getFrameAncestors()) { $securityParams = new SecurityParams( frameAncestors: $params->getFrameAncestors(), ); } $this->clientManager->writeHeaders($response, $securityParams); $response->writeBody($body); } /** * @param ?array $data * @param Script[] $scripts */ private function render( string $controller, string $action, ?array $data, bool $initAuth, array $scripts, ?string $pageTitle, ?string $theme, ?Direction $direction, bool $login, ): string { $encodedData = Json::encode($data); $doActionPart = << { $doActionPart }, }); EOF; } else { $initAuthPart = $initAuth ? "app.initAuth();\n" : ''; $script = <<clientManager->render($params); } }