param ?? [] as $param) { if (empty($param['name'])) { continue; } $paramOut = $param['name']; if ($param['values'] ?? false) { $paramOut .= ': '; $outValues = []; foreach ($param['values'] as $value) { $out = $value['value'] ?? ''; if (!empty($value['descr'])) { $out .= ' ('.$value['descr'].')'; } $outValues[] = $out; } $paramOut .= implode(', ', $outValues); } $output[] = $paramOut; if (!empty($param['descr'])) { $output[] = 'Popis parametru '.$param['name'].': '.$param['descr']; } } return $this->implodeOutput($output); } public function getProductsTemplates(int $idProduct): string { if (!$idProduct) { return ''; } $blockIds = sqlQueryBuilder()->select('id_block')->from('templates_products', 'tp') ->innerJoin('tp', 'templates', 't', 't.id = tp.id_template') ->where(Operator::equals(['tp.id_product' => $idProduct])) ->execute()->fetchFirstColumn(); $output = []; foreach ($blockIds as $blockId) { $output[] = $this->getTextFromBlockId($blockId); $output[] = self::EMPTY_LINE; } return $this->implodeOutput($output); } public function getTextFromBlockId(?int $idBlock): string { if (!$idBlock) { return ''; } $output = []; foreach ($this->getBlocks($idBlock) as $block) { $output = array_merge($output, $this->extractTextFromBlocekJson($block['json_content'] ?? [])); $output[] = self::EMPTY_LINE; } return $this->implodeOutput($output); } public function getImageFromArray(?array $image): string { if (empty($image['src'])) { return 'žádný obrázek'; } $url = $this->urlFinder->staticUrlAbsolute($image['src']); return "{image:{$url}}"; } protected function extractTextFromBlocekJson(string|array $jsonContent): array { $blocks = is_array($jsonContent) ? $jsonContent : (json_decode($jsonContent, true) ?? []); $output = []; foreach ($blocks as $block) { if (in_array($block['type'], ['legacy', 'text', 'heading'])) { $output[] = $block['settings']['html'] ?? $block['settings']['text'] ?? null; } if (isset($block['children']) && is_array($block['children'])) { $output = array_merge($output, $this->extractTextFromBlocekJson($block['children'])); } } return $output; } public function getOrderHistory(\Order $order): string { $output = []; foreach ($order->getHistory() ?? [] as $message) { if ($message['comment']) { $output[] = "{$message['date']} (Status: {$message['status_text']}): {$message['comment']}"; } } if (empty($output)) { return 'Prázdná'; } return $this->implodeOutput($output); } public function getOrderData(\Order $order): string { $output = []; $output[] = 'Číslo objednávky: '.$order->order_no; $output[] = 'Datum vytvoření : '.$order->date_created->format('Y-m-d H:i:s'); $output[] = 'Celková cena s DPH: '.printPrice($order->total_price); $output[] = 'Celková cena bez DPH: '.printPrice($order->total_price_without_vat); $output[] = self::EMPTY_LINE; $output[] = 'Fakturační údaje:'; $output[] = $order->invoice_name.' '.$order->invoice_surname; $order->invoice_firm && ($output[] = 'Firma: '.$order->invoice_firm); $output[] = $order->invoice_street.' '.$order->invoice_city.' '.$order->invoice_zip.' '.$order->invoice_country; $output[] = $order->invoice_phone; $output[] = $order->invoice_email; $output[] = self::EMPTY_LINE; $output[] = 'Doručovací údaje:'; $output[] = $order->delivery_name.' '.$order->delivery_surname; $order->delivery_firm && ($output[] = 'Firma: '.$order->delivery_firm); $output[] = $order->delivery_street.' '.$order->delivery_city.' '.$order->delivery_zip.' '.$order->delivery_country; $output[] = $order->delivery_phone; $output[] = self::EMPTY_LINE; $output[] = 'Položky objednávky:'; foreach ($order->getItems() as $item) { $output[] = $item->getPieces().'x '.$item->getDescr().' Cena: '.printPrice($item->getTotalPrice()); } return $this->implodeOutput($output); } public function getAdminUserInfo(): string { $output = []; $admin = getAdminUser(); if ($admin['name'] ?? false) { $output[] = 'Jméno: '.$admin['name']; } if ($admin['email'] ?? false) { $output[] = 'Email: '.$admin['email']; } return $this->implodeOutput($output); } public function implodeOutput(array $output): string { $output = array_map(fn ($val) => StringUtil::unicode_trim($val), $output); $output = array_map(fn ($val) => str_replace(self::EMPTY_LINE, '', $val), array_filter($output)); return implode(PHP_EOL, $output); } }