/** * @param $focus * @param bool $preview * @param bool $ignoreMinify * * @return string */ public function generateJavascript($focus, $preview = false, $ignoreMinify = false) { if ($focus instanceof Focus) { $focus = $focus->toArray(); } if (!empty($focus['form'])) { $form = $this->formModel->getEntity($focus['form']); } else { $form = null; } if ($preview) { $content = ['style' => '', 'html' => $this->templating->getTemplating()->render('MauticFocusBundle:Builder:content.html.php', ['focus' => $focus, 'form' => $form, 'preview' => $preview])]; } else { // Generate link if applicable $url = ''; if ($focus['type'] == 'link') { $trackable = $this->trackableModel->getTrackableByUrl($focus['properties']['content']['link_url'], 'focus', $focus['id']); $url = $this->trackableModel->generateTrackableUrl($trackable, ['channel' => ['focus', $focus['id']]]); } $content = $this->templating->getTemplating()->render('MauticFocusBundle:Builder:generate.js.php', ['focus' => $focus, 'form' => $form, 'preview' => $preview, 'ignoreMinify' => $ignoreMinify, 'clickUrl' => $url]); if (!$ignoreMinify) { $content = \JSMin::minify($content); } } return $content; }
/** * @param Form $form * * @return string */ public function getFormScript(Form $form) { $theme = $form->getTemplate(); if (!empty($theme)) { $theme .= '|'; } $script = $this->templatingHelper->getTemplating()->render($theme . 'MauticFormBundle:Builder:script.html.php', ['form' => $form, 'theme' => $theme]); return $script; }
/** * @param $format * @param $form * @param $queryArgs * * @return StreamedResponse|Response * * @throws \Exception */ public function exportResults($format, $form, $queryArgs) { $viewOnlyFields = $this->formModel->getCustomComponents()['viewOnlyFields']; $queryArgs['viewOnlyFields'] = $viewOnlyFields; $results = $this->getEntities($queryArgs); $translator = $this->translator; $date = (new DateTimeHelper())->toLocalString(); $name = str_replace(' ', '_', $date) . '_' . $form->getAlias(); switch ($format) { case 'csv': $response = new StreamedResponse(function () use($results, $form, $translator, $viewOnlyFields) { $handle = fopen('php://output', 'r+'); //build the header row $fields = $form->getFields(); $header = [$translator->trans('mautic.core.id'), $translator->trans('mautic.form.result.thead.date'), $translator->trans('mautic.core.ipaddress'), $translator->trans('mautic.form.result.thead.referrer')]; foreach ($fields as $f) { if (in_array($f->getType(), $viewOnlyFields) || $f->getSaveResult() === false) { continue; } $header[] = $f->getLabel(); } //free memory unset($fields); //write the row fputcsv($handle, $header); //build the data rows foreach ($results as $k => $s) { $row = [$s['id'], $s['dateSubmitted']->format('Y-m-d H:i:s'), $s['ipAddress']['ipAddress'], $s['referer']]; foreach ($s['results'] as $k2 => $r) { if (in_array($r['type'], $viewOnlyFields)) { continue; } $row[] = $r['value']; //free memory unset($s['results'][$k2]); } fputcsv($handle, $row); //free memory unset($row, $results[$k]); } fclose($handle); }); $response->headers->set('Content-Type', 'application/force-download'); $response->headers->set('Content-Type', 'application/octet-stream'); $response->headers->set('Content-Disposition', 'attachment; filename="' . $name . '.csv"'); $response->headers->set('Expires', 0); $response->headers->set('Cache-Control', 'must-revalidate'); $response->headers->set('Pragma', 'public'); return $response; case 'html': $content = $this->templatingHelper->getTemplating()->renderResponse('MauticFormBundle:Result:export.html.php', ['form' => $form, 'results' => $results, 'pageTitle' => $name, 'viewOnlyFields' => $viewOnlyFields])->getContent(); return new Response($content); case 'xlsx': if (class_exists('PHPExcel')) { $response = new StreamedResponse(function () use($results, $form, $translator, $name, $viewOnlyFields) { $objPHPExcel = new \PHPExcel(); $objPHPExcel->getProperties()->setTitle($name); $objPHPExcel->createSheet(); //build the header row $fields = $form->getFields(); $header = [$translator->trans('mautic.core.id'), $translator->trans('mautic.form.result.thead.date'), $translator->trans('mautic.core.ipaddress'), $translator->trans('mautic.form.result.thead.referrer')]; foreach ($fields as $f) { if (in_array($f->getType(), $viewOnlyFields) || $f->getSaveResult() === false) { continue; } $header[] = $f->getLabel(); } //free memory unset($fields); //write the row $objPHPExcel->getActiveSheet()->fromArray($header, null, 'A1'); //build the data rows $count = 2; foreach ($results as $k => $s) { $row = [$s['id'], $s['dateSubmitted']->format('Y-m-d H:i:s'), $s['ipAddress']['ipAddress'], $s['referer']]; foreach ($s['results'] as $k2 => $r) { if (in_array($r['type'], $viewOnlyFields)) { continue; } $row[] = $r['value']; //free memory unset($s['results'][$k2]); } $objPHPExcel->getActiveSheet()->fromArray($row, null, "A{$count}"); //free memory unset($row, $results[$k]); //increment letter ++$count; } $objWriter = \PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007'); $objWriter->setPreCalculateFormulas(false); $objWriter->save('php://output'); }); $response->headers->set('Content-Type', 'application/force-download'); $response->headers->set('Content-Type', 'application/octet-stream'); $response->headers->set('Content-Disposition', 'attachment; filename="' . $name . '.xlsx"'); $response->headers->set('Expires', 0); $response->headers->set('Cache-Control', 'must-revalidate'); $response->headers->set('Pragma', 'public'); return $response; } throw new \Exception('PHPExcel is required to export to Excel spreadsheets'); default: return new Response(); } }
/** * Export report * * @param $format * @param $report * @param $reportData * * @return StreamedResponse|Response * @throws \Exception */ public function exportResults($format, $report, $reportData) { $formatter = $this->formatterHelper; $date = (new DateTimeHelper())->toLocalString(); $name = str_replace(' ', '_', $date) . '_' . InputHelper::alphanum($report->getName(), false, '-'); switch ($format) { case 'csv': $response = new StreamedResponse(function () use($reportData, $report, $formatter) { $handle = fopen('php://output', 'r+'); $header = []; //build the data rows foreach ($reportData['data'] as $count => $data) { $row = []; foreach ($data as $k => $v) { if ($count === 0) { //set the header $header[] = $k; } $row[] = $formatter->_($v, $reportData['columns'][$reportData['dataColumns'][$k]]['type'], true); } if ($count === 0) { //write the row fputcsv($handle, $header); } else { fputcsv($handle, $row); } //free memory unset($row, $reportData['data'][$count]); } fclose($handle); }); $response->headers->set('Content-Type', 'application/force-download'); $response->headers->set('Content-Type', 'application/octet-stream'); $response->headers->set('Content-Disposition', 'attachment; filename="' . $name . '.csv"'); $response->headers->set('Expires', 0); $response->headers->set('Cache-Control', 'must-revalidate'); $response->headers->set('Pragma', 'public'); return $response; case 'html': $content = $this->templatingHelper->getTemplating()->renderResponse('MauticReportBundle:Report:export.html.php', ['data' => $reportData['data'], 'columns' => $reportData['columns'], 'pageTitle' => $name, 'graphs' => $reportData['graphs'], 'report' => $report, 'dateFrom' => $reportData['dateFrom'], 'dateTo' => $reportData['dateTo']])->getContent(); return new Response($content); case 'xlsx': if (class_exists('PHPExcel')) { $response = new StreamedResponse(function () use($formatter, $reportData, $report, $name) { $objPHPExcel = new \PHPExcel(); $objPHPExcel->getProperties()->setTitle($name); $objPHPExcel->createSheet(); $header = []; //build the data rows foreach ($reportData['data'] as $count => $data) { $row = []; foreach ($data as $k => $v) { if ($count === 0) { //set the header $header[] = $k; } $row[] = $formatter->_($v, $reportData['columns'][$reportData['dataColumns'][$k]]['type'], true); } //write the row if ($count === 0) { $objPHPExcel->getActiveSheet()->fromArray($header, null, 'A1'); } else { $rowCount = $count + 1; $objPHPExcel->getActiveSheet()->fromArray($row, null, "A{$rowCount}"); } //free memory unset($row, $reportData['data'][$count]); } $objWriter = \PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007'); $objWriter->setPreCalculateFormulas(false); $objWriter->save('php://output'); }); $response->headers->set('Content-Type', 'application/force-download'); $response->headers->set('Content-Type', 'application/octet-stream'); $response->headers->set('Content-Disposition', 'attachment; filename="' . $name . '.xlsx"'); $response->headers->set('Expires', 0); $response->headers->set('Cache-Control', 'must-revalidate'); $response->headers->set('Pragma', 'public'); return $response; } throw new \Exception('PHPExcel is required to export to Excel spreadsheets'); default: return new Response(); } }
/** * @param TemplatingHelper $templatingHelper */ public function setTemplating(TemplatingHelper $templatingHelper) { $this->templating = $templatingHelper->getTemplating(); }