templateRegistry->get($canvasSlug); if ($template === null) { return null; } $canvasType = $template->getDatabaseType(); // getBoard authorizes VIEW against the board's real project and returns false for a // missing/foreign/unauthorized board — so a foreign id is indistinguishable from a // non-existent one (no cross-project existence oracle). $canvasAry = $this->blueprintsService->getBoard($canvasId, $canvasType); if ($canvasAry === false || empty($canvasAry)) { return null; } $records = $this->blueprintsService->getBoardItems($canvasId, $canvasType, $template->getCommentModule()); $canvasTypes = $this->blueprintsService->getTranslatedBoxes($template); $xml = ''.PHP_EOL.PHP_EOL; $xml .= $this->buildXml($canvasType, $canvasAry[0]['title'], $records, $canvasTypes); return $xml; } /** * buildXml - generate XML markup for canvas data. * * @param string $canvasKey Database canvas type (e.g. "swotcanvas") * @param string $canvasTitle Canvas board title * @param array> $records Canvas item records * @param array> $canvasTypes Translated box definitions * @param int $indent Indent level * @return string XML data */ private function buildXml(string $canvasKey, string $canvasTitle, array $records, array $canvasTypes, int $indent = 0): string { $is = str_repeat(' ', 4 * $indent); $tab = str_repeat(' ', 4); $xml = $is.''.PHP_EOL; $xml .= $is.$tab.''.$canvasTitle.''.PHP_EOL; $xml .= $is.$tab.''.PHP_EOL; foreach ($canvasTypes as $key => $data) { $xml .= $is.$tab.$tab.''.PHP_EOL; foreach ($records as $record) { if ($record['box'] === $key) { $xml .= $is.$tab.$tab.$tab.''.PHP_EOL; $xml .= $is.$tab.$tab.$tab.$tab.''.($record['created'] ?? '').''.PHP_EOL; $xml .= $is.$tab.$tab.$tab.$tab.''.($record['modified'] ?? '').''.PHP_EOL; $xml .= $is.$tab.$tab.$tab.$tab.''.PHP_EOL; $xml .= $is.$tab.$tab.$tab.$tab.''.($record['description'] ?? '').''.PHP_EOL; $xml .= $is.$tab.$tab.$tab.$tab.''.PHP_EOL; $xml .= $is.$tab.$tab.$tab.$tab.''.PHP_EOL; $xml .= $is.$tab.$tab.$tab.$tab.''.($record['assumptions'] ?? '').''.PHP_EOL; $xml .= $is.$tab.$tab.$tab.$tab.''.($record['data'] ?? '').''.PHP_EOL; $xml .= $is.$tab.$tab.$tab.$tab.''.($record['conclusion'] ?? '').''.PHP_EOL; $xml .= $is.$tab.$tab.$tab.''.PHP_EOL; } } $xml .= $is.$tab.$tab.''.PHP_EOL; } $xml .= $is.$tab.''.PHP_EOL; $xml .= $is.''.PHP_EOL; return $xml; } }