Пример #1
0
 /**
  * Save uploaded image according to comur_image field configuration
  *
  * @param Request $request
  */
 public function uploadImageAction(Request $request)
 {
     $config = json_decode($request->request->get('config'), true);
     $uploadUrl = $config['uploadConfig']['uploadUrl'];
     $uploadUrl = substr($uploadUrl, -strlen('/')) === '/' ? $uploadUrl : $uploadUrl . '/';
     // We must use a streamed response because the UploadHandler echoes directly
     $response = new StreamedResponse();
     $webDir = $config['uploadConfig']['webDir'];
     $webDir = substr($webDir, -strlen('/')) === '/' ? $webDir : $webDir . '/';
     $filename = sha1(uniqid(mt_rand(), true));
     $thumbsDir = $this->container->getParameter('comur_image.thumbs_dir');
     $thumbSize = $this->container->getParameter('comur_image.media_lib_thumb_size');
     $galleryDir = $this->container->getParameter('comur_image.gallery_dir');
     $gThumbSize = $this->container->getParameter('comur_image.gallery_thumb_size');
     $ext = $request->files->get('image_upload_file')->getClientOriginalExtension();
     //('image_upload_file');
     $completeName = $filename . '.' . $ext;
     $controller = $this;
     $handlerConfig = array('upload_dir' => $uploadUrl, 'param_name' => 'image_upload_file', 'file_name' => $filename, 'upload_url' => $config['uploadConfig']['webDir'], 'min_width' => $config['cropConfig']['minWidth'], 'min_height' => $config['cropConfig']['minHeight'], 'image_versions' => array('thumbnail' => array('upload_dir' => $uploadUrl . $thumbsDir . '/', 'upload_url' => $config['uploadConfig']['webDir'] . '/' . $thumbsDir . '/', 'crop' => true, 'max_width' => $thumbSize, 'max_height' => $thumbSize)));
     $transDomain = $this->container->getParameter('comur_image.translation_domain');
     $errorMessages = array(1 => $this->get('translator')->trans('The uploaded file exceeds the upload_max_filesize directive in php.ini', array(), $transDomain), 2 => $this->get('translator')->trans('The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form', array(), $transDomain), 3 => $this->get('translator')->trans('The uploaded file was only partially uploaded', array(), $transDomain), 4 => $this->get('translator')->trans('No file was uploaded', array(), $transDomain), 6 => $this->get('translator')->trans('Missing a temporary folder', array(), $transDomain), 7 => $this->get('translator')->trans('Failed to write file to disk', array(), $transDomain), 8 => $this->get('translator')->trans('A PHP extension stopped the file upload', array(), $transDomain), 'post_max_size' => $this->get('translator')->trans('The uploaded file exceeds the post_max_size directive in php.ini', array(), $transDomain), 'max_file_size' => $this->get('translator')->trans('File is too big', array(), $transDomain), 'min_file_size' => $this->get('translator')->trans('File is too small', array(), $transDomain), 'accept_file_types' => $this->get('translator')->trans('Filetype not allowed', array(), $transDomain), 'max_number_of_files' => $this->get('translator')->trans('Maximum number of files exceeded', array(), $transDomain), 'max_width' => $this->get('translator')->trans('Image exceeds maximum width', array(), $transDomain), 'min_width' => $this->get('translator')->trans('Image requires a minimum width (%min%)', array('%min%' => $config['cropConfig']['minWidth']), $transDomain), 'max_height' => $this->get('translator')->trans('Image exceeds maximum height', array(), $transDomain), 'min_height' => $this->get('translator')->trans('Image requires a minimum height (%min%)', array('%min%' => $config['cropConfig']['minHeight']), $transDomain), 'abort' => $this->get('translator')->trans('File upload aborted', array(), $transDomain), 'image_resize' => $this->get('translator')->trans('Failed to resize image', array(), $transDomain));
     $response->setCallback(function () use($handlerConfig, $errorMessages) {
         new UploadHandler($handlerConfig, true, $errorMessages);
     });
     return $response->send();
 }
Пример #2
0
 /**
  * Handle an incoming request.
  *
  * @param  \Illuminate\Http\Request  $request
  * @param  \Closure  $next
  * @return mixed
  */
 public function handle($request, Closure $next)
 {
     $uri = $request->path();
     $uri_arr = explode("/", $uri);
     if (in_array($uri, $this->noAuth)) {
         return $next($request);
     } else {
         if ($uri_arr[0] == "stream") {
             $res = $this->permissionForStream($request, $next, $uri_arr[2]);
             if ($res['status'] == "2") {
                 header('Content-Type: text/event-stream');
                 header('Cache-Control: no-cache');
                 $response = new StreamedResponse();
                 $response->setCallback(function () use($res) {
                     $output = json_encode($res);
                     echo "data:" . $output . "\n\n";
                     flush();
                     //sleep(1);
                 });
                 $response->send();
                 exit;
             } else {
                 return $next($request);
             }
         } else {
             $this->_init_($request);
             return $this->permissionToAccess($request, $next);
         }
     }
 }
Пример #3
0
 /**
  * Export the workbook.
  *
  * @param null|string $filename
  *
  * @throws \Exception
  * @return mixed|void
  */
 public function stream($filename = null)
 {
     $filename = $this->getFilename($filename);
     $output = $this->getExportable()->getDriver()->getOutputFromHtml($this->convertToHtml($this->getExportable()));
     $response = new StreamedResponse(function () use($output) {
         echo $output;
     }, 200, ['Content-Type' => 'application/pdf', 'Content-Disposition' => 'inline; filename="' . $filename . '.' . $this->getExtension() . '"']);
     return $response->send();
 }
 /**
  * @Route(
  *     "/image/{node}",
  *     name="claro_image"
  * )
  */
 public function fileAction(ResourceNode $node)
 {
     $image = $this->get('claroline.manager.resource_manager')->getResourceFromNode($node);
     $response = new StreamedResponse();
     $path = $this->container->getParameter('claroline.param.files_directory') . DIRECTORY_SEPARATOR . $image->getHashName();
     $response->setCallBack(function () use($path) {
         readfile($path);
     });
     $response->headers->set('Content-Type', $node->getMimeType());
     return $response->send();
 }
 /**
  * CSV出力の共通処理
  * @param Application $app
  * @param Request $request
  * @param string $type CSV出力形式の種類
  * @return StreamedResponse
  */
 public function export(Application $app, Request $request, $type)
 {
     // タイムアウトを無効にする.
     set_time_limit(0);
     $response = new StreamedResponse();
     $response->setCallback(function () use($app, $request, $type) {
         $app['listing_ad_csv.service.listingad.data.creator']->create($app, $request, $type);
     });
     $response->headers->set('Content-Type', 'application/octet-stream');
     $response->headers->set('Content-Disposition', 'attachment; filename=' . $this->createFileName($type));
     $response->send();
     return $response;
 }
Пример #6
0
 /**
  * @EXT\Route(
  *     "resource/media/{node}",
  *     name="claro_file_get_media",
  *     options={"expose"=true}
  * )
  *
  * @param integer $id
  *
  * @return Response
  */
 public function streamMediaAction(ResourceNode $node)
 {
     $collection = new ResourceCollection(array($node));
     $this->checkAccess('OPEN', $collection);
     $file = $this->get('claroline.manager.resource_manager')->getResourceFromNode($node);
     $path = $this->container->getParameter('claroline.param.files_directory') . DIRECTORY_SEPARATOR . $file->getHashName();
     $response = new StreamedResponse();
     $response->setCallBack(function () use($path) {
         readfile($path);
     });
     $response->headers->set('Content-Type', $node->getMimeType());
     $response->send();
     return new Response();
 }
Пример #7
0
 /**
  * @EXT\Route(
  *     "/download/{pdf}",
  *     name="claro_pdf_download",
  *     options={"expose"=true}
  * )
  * @EXT\ParamConverter(
  *     "pdf",
  *     class="ClarolinePdfGeneratorBundle:Pdf",
  *     options={"mapping": {"pdf": "guid"}}
  * )
  *
  * @param array $nodes
  * @param bool  $forceArchive
  *
  * @return \Symfony\Component\HttpFoundation\Response
  */
 public function download(Pdf $pdf)
 {
     $response = new StreamedResponse();
     $file = $this->pdfManager->getFile($pdf);
     $response->setCallBack(function () use($file) {
         readfile($file);
     });
     $response->headers->set('Content-Transfer-Encoding', 'octet-stream');
     $response->headers->set('Content-Type', 'application/force-download');
     $response->headers->set('Content-Disposition', 'attachment; filename=' . urlencode($pdf->getName() . '.pdf'));
     $response->headers->set('Content-Type', 'application/pdf');
     $response->headers->set('Connection', 'close');
     $response->send();
 }
 /**
  * {@inheritdoc}
  */
 public function renderFile(CRUDEntity $entity, $entityName, $field)
 {
     $targetPath = $this->getPath($entityName, $entity, $field);
     $fileName = $entity->get($field);
     $file = $targetPath . '/' . $fileName;
     $response = new Response('');
     $finfo = finfo_open(FILEINFO_MIME_TYPE);
     $mimeType = finfo_file($finfo, $file);
     finfo_close($finfo);
     $size = filesize($file);
     if ($fileName && file_exists($file)) {
         $response = new StreamedResponse(CRUDStreamedFileResponse::getStreamedFileFunction($file), 200, array('Content-Type' => $mimeType, 'Content-Disposition' => 'attachment; filename="' . $fileName . '"', 'Content-length' => $size));
         $response->send();
     }
     return $response;
 }
Пример #9
0
 /**
  * @EXT\Route(
  *      "/download/invoice/{invoice}",
  *      name="invoice_download"
  * )
  *
  * @return Response
  */
 public function downloadAction(Invoice $invoice)
 {
     $user = $this->tokenStorage->getToken()->getUser();
     if ($invoice->getChart()->getOwner() !== $user && !$this->authorization->isGranted('ROLE_ADMIN')) {
         throw new AccessDeniedException();
     }
     $file = $this->invoiceManager->getPdf($invoice);
     $response = new StreamedResponse();
     $response->setCallBack(function () use($file) {
         readfile($file);
     });
     $response->headers->set('Content-Transfer-Encoding', 'octet-stream');
     $response->headers->set('Content-Type', 'application/force-download');
     $response->headers->set('Content-Disposition', 'attachment; filename=invoice-' . $invoice->getInvoiceNumber() . '.pdf');
     $response->headers->set('Content-Type', 'application/pdf');
     $response->headers->set('Connection', 'close');
     $response->send();
     return new Response();
 }
Пример #10
0
 public function recalculateAction(Player $me, $match)
 {
     $match = Match::get($match);
     // get a match even if it's deleted
     if (!$me->canEdit($match)) {
         throw new ForbiddenException("You are not allowed to edit that match.");
     }
     return $this->showConfirmationForm(function () use($match) {
         $response = new StreamedResponse();
         $response->headers->set('Content-Type', 'text/plain');
         $response->setCallback(function () use($match) {
             $this->recalculate($match);
         });
         $response->send();
     }, "Do you want to recalculate ELO history for all teams and matches after the specified match?", "ELO history recalculated", "Recalculate ELOs", function () use($match) {
         if ($match->isDeleted()) {
             return new RedirectResponse($match->getURL('list'));
         }
         return new RedirectResponse($match->getURL('show'));
     }, "Match/recalculate.html.twig", $noButton = true);
 }
Пример #11
0
 /**
  * 商品CSVの出力.
  *
  * @param Application $app
  * @param Request $request
  * @return StreamedResponse
  */
 public function export(Application $app, Request $request)
 {
     // タイムアウトを無効にする.
     set_time_limit(0);
     // sql loggerを無効にする.
     $em = $app['orm.em'];
     $em->getConfiguration()->setSQLLogger(null);
     $response = new StreamedResponse();
     $response->setCallback(function () use($app, $request) {
         // CSV種別を元に初期化.
         $app['eccube.service.csv.export']->initCsvType(CsvType::CSV_TYPE_PRODUCT);
         // ヘッダ行の出力.
         $app['eccube.service.csv.export']->exportHeader();
         // 商品データ検索用のクエリビルダを取得.
         $qb = $app['eccube.service.csv.export']->getProductQueryBuilder($request);
         // joinする場合はiterateが使えないため, select句をdistinctする.
         // http://qiita.com/suin/items/2b1e98105fa3ef89beb7
         // distinctのmysqlとpgsqlの挙動をあわせる.
         // http://uedatakeshi.blogspot.jp/2010/04/distinct-oeder-by-postgresmysql.html
         $qb->resetDQLPart('select')->resetDQLPart('orderBy')->select('p')->orderBy('p.update_date', 'DESC')->distinct();
         // データ行の出力.
         $app['eccube.service.csv.export']->setExportQueryBuilder($qb);
         $app['eccube.service.csv.export']->exportData(function ($entity, $csvService) {
             $Csvs = $csvService->getCsvs();
             /** @var $Product \Eccube\Entity\Product */
             $Product = $entity;
             /** @var $Product \Eccube\Entity\ProductClass[] */
             $ProductClassess = $Product->getProductClasses();
             foreach ($ProductClassess as $ProductClass) {
                 $row = array();
                 // CSV出力項目と合致するデータを取得.
                 foreach ($Csvs as $Csv) {
                     // 商品データを検索.
                     $data = $csvService->getData($Csv, $Product);
                     if (is_null($data)) {
                         // 商品規格情報を検索.
                         $data = $csvService->getData($Csv, $ProductClass);
                     }
                     $row[] = $data;
                 }
                 //$row[] = number_format(memory_get_usage(true));
                 // 出力.
                 $csvService->fputcsv($row);
             }
         });
     });
     $now = new \DateTime();
     $filename = 'product_' . $now->format('YmdHis') . '.csv';
     $response->headers->set('Content-Type', 'application/octet-stream');
     $response->headers->set('Content-Disposition', 'attachment; filename=' . $filename);
     $response->send();
     return $response;
 }
Пример #12
0
 /**
  * The controller for serving static files.
  *
  * @param Request $request
  * the current request
  * @param Application $app
  * the Silex application
  *
  * @return Response
  * redirects to the instance details page or 404 on invalid input
  */
 public function staticFile(Request $request, Application $app)
 {
     $fileParam = str_replace('..', '', $request->get('file'));
     $file = __DIR__ . '/../static/' . $fileParam;
     if (!$fileParam || !file_exists($file)) {
         return $this->getNotFoundPage($app, $app['translator']->trans('crudlex.resourceNotFound'));
     }
     $mimeTypes = new MimeTypes();
     $mimeType = $mimeTypes->getMimeType($file);
     $size = filesize($file);
     $streamedFileResponse = new StreamedFileResponse();
     $response = new StreamedResponse($streamedFileResponse->getStreamedFileFunction($file), 200, ['Content-Type' => $mimeType, 'Content-Disposition' => 'attachment; filename="' . basename($file) . '"', 'Content-length' => $size]);
     $response->setETag(filemtime($file))->setPublic()->isNotModified($request);
     $response->send();
     return $response;
 }
Пример #13
0
 /**
  * 配送CSVの出力.
  *
  * @param Application $app
  * @param Request $request
  * @return StreamedResponse
  */
 public function exportShipping(Application $app, Request $request)
 {
     // タイムアウトを無効にする.
     set_time_limit(0);
     // sql loggerを無効にする.
     $em = $app['orm.em'];
     $em->getConfiguration()->setSQLLogger(null);
     $response = new StreamedResponse();
     $response->setCallback(function () use($app, $request) {
         // CSV種別を元に初期化.
         $app['eccube.service.csv.export']->initCsvType(CsvType::CSV_TYPE_SHIPPING);
         // ヘッダ行の出力.
         $app['eccube.service.csv.export']->exportHeader();
         // 受注データ検索用のクエリビルダを取得.
         $qb = $app['eccube.service.csv.export']->getOrderQueryBuilder($request);
         // データ行の出力.
         $app['eccube.service.csv.export']->setExportQueryBuilder($qb);
         $app['eccube.service.csv.export']->exportData(function ($entity, $csvService) {
             $Csvs = $csvService->getCsvs();
             /** @var $Order \Eccube\Entity\Order */
             $Order = $entity;
             /** @var $Shippings \Eccube\Entity\Shipping[] */
             $Shippings = $Order->getShippings();
             foreach ($Shippings as $Shipping) {
                 /** @var $ShipmentItems \Eccube\Entity\ShipmentItem */
                 $ShipmentItems = $Shipping->getShipmentItems();
                 foreach ($ShipmentItems as $ShipmentItem) {
                     $row = array();
                     // CSV出力項目と合致するデータを取得.
                     foreach ($Csvs as $Csv) {
                         // 受注データを検索.
                         $data = $csvService->getData($Csv, $Order);
                         if (is_null($data)) {
                             // 配送情報を検索.
                             $data = $csvService->getData($Csv, $Shipping);
                         }
                         if (is_null($data)) {
                             // 配送商品を検索.
                             $data = $csvService->getData($Csv, $ShipmentItem);
                         }
                         $row[] = $data;
                     }
                     //$row[] = number_format(memory_get_usage(true));
                     // 出力.
                     $csvService->fputcsv($row);
                 }
             }
         });
     });
     $now = new \DateTime();
     $filename = 'shipping_' . $now->format('YmdHis') . '.csv';
     $response->headers->set('Content-Type', 'application/octet-stream');
     $response->headers->set('Content-Disposition', 'attachment; filename=' . $filename);
     $response->send();
     return $response;
 }
 /**
  * {@inheritdoc}
  */
 public function renderFile(CRUDEntity $entity, $entityName, $field)
 {
     $targetPath = $this->getPath($entityName, $entity, $field);
     $fileName = $entity->get($field);
     $file = $targetPath . '/' . $fileName;
     $response = new Response('');
     $finfo = finfo_open(FILEINFO_MIME_TYPE);
     $mimeType = finfo_file($finfo, $file);
     finfo_close($finfo);
     $size = filesize($file);
     if ($fileName && file_exists($file)) {
         $response = new StreamedResponse(function () use($file) {
             set_time_limit(0);
             $handle = fopen($file, "rb");
             if ($handle !== false) {
                 $chunkSize = 1024 * 1024;
                 while (!feof($handle)) {
                     $buffer = fread($handle, $chunkSize);
                     echo $buffer;
                     flush();
                 }
                 fclose($handle);
             }
         }, 200, array('Content-Type' => $mimeType, 'Content-Disposition' => 'attachment; filename="' . $fileName . '"', 'Content-length' => $size));
         $response->send();
     }
     return $response;
 }
Пример #15
0
 /**
  * @EXT\Route(
  *     "/{workspace}/export",
  *     name="claro_workspace_export",
  *     options={"expose"=true}
  * )
  */
 public function exportAction(Workspace $workspace)
 {
     $archive = $this->container->get('claroline.manager.transfert_manager')->export($workspace);
     $fileName = $workspace->getCode() . '.zip';
     $mimeType = 'application/zip';
     $response = new StreamedResponse();
     $response->setCallBack(function () use($archive) {
         readfile($archive);
     });
     $response->headers->set('Content-Transfer-Encoding', 'octet-stream');
     $response->headers->set('Content-Type', 'application/force-download');
     $response->headers->set('Content-Disposition', 'attachment; filename=' . urlencode($fileName));
     $response->headers->set('Content-Length', filesize($archive));
     $response->headers->set('Content-Type', $mimeType);
     $response->headers->set('Connection', 'close');
     return $response->send();
 }
 /**
  * {@inheritdoc}
  */
 public function renderFile(Entity $entity, $entityName, $field)
 {
     $targetPath = $this->getPath($entityName, $entity, $field);
     $fileName = $entity->get($field);
     $file = $targetPath . '/' . $fileName;
     $response = new Response('');
     $mimeTypes = new MimeTypes();
     $mimeType = $mimeTypes->getMimeType($file);
     $size = filesize($file);
     if ($fileName && file_exists($file)) {
         $streamedFileResponse = new StreamedFileResponse();
         $response = new StreamedResponse($streamedFileResponse->getStreamedFileFunction($file), 200, ['Content-Type' => $mimeType, 'Content-Disposition' => 'attachment; filename="' . $fileName . '"', 'Content-length' => $size]);
         $response->send();
     }
     return $response;
 }
 public function downloadCsv(array $data, $reportName = 'reporte')
 {
     $response = new StreamedResponse();
     $contentDisposition = $response->headers->makeDisposition(ResponseHeaderBag::DISPOSITION_ATTACHMENT, $reportName . '.csv');
     $response->headers->set('Content-Disposition', $contentDisposition);
     $response->headers->set('Content-Type', 'text/csv; charset=utf-8');
     $response->setCallback(function () use($data) {
         $exporter = $this->get('intriro_csv.exporter.default');
         $exporter->export('php://output', $data);
     });
     $response->send();
     return $response;
 }
Пример #18
0
 /**
  * The controller for serving static files.
  *
  * @param Application $app
  * the Silex application
  *
  * @return Response
  * redirects to the instance details page or 404 on invalid input
  */
 public function staticFile(Application $app)
 {
     $fileParam = $app['request']->get('file');
     if (!$fileParam) {
         return $this->getNotFoundPage($app, $app['translator']->trans('crudlex.resourceNotFound'));
     }
     $file = __DIR__ . '/../static/' . $fileParam;
     if (!file_exists($file)) {
         return $this->getNotFoundPage($app, $app['translator']->trans('crudlex.resourceNotFound'));
     }
     $extension = pathinfo($file, PATHINFO_EXTENSION);
     $mimeType = '';
     if (strtolower($extension) === 'css') {
         $mimeType = 'text/css';
     } else {
         $finfo = finfo_open(FILEINFO_MIME_TYPE);
         $mimeType = finfo_file($finfo, $file);
         finfo_close($finfo);
     }
     $size = filesize($file);
     $response = new StreamedResponse(function () use($file) {
         set_time_limit(0);
         $handle = fopen($file, "rb");
         if ($handle !== false) {
             $chunkSize = 1024 * 1024;
             while (!feof($handle)) {
                 $buffer = fread($handle, $chunkSize);
                 echo $buffer;
                 flush();
             }
             fclose($handle);
         }
     }, 200, array('Content-Type' => $mimeType, 'Content-Disposition' => 'attachment; filename="' . basename($file) . '"', 'Content-length' => $size));
     $response->send();
     return $response;
 }
 /**
  * 商品CSVの出力.
  *
  * @param Application $app
  * @param Request $request
  * @return StreamedResponse
  */
 public function export(Application $app, Request $request)
 {
     // タイムアウトを無効にする.
     set_time_limit(0);
     // sql loggerを無効にする.
     $em = $app['orm.em'];
     $em->getConfiguration()->setSQLLogger(null);
     $response = new StreamedResponse();
     $response->setCallback(function () use($app, $request) {
         // CSV種別を元に初期化.
         $app['eccube.service.csv.export']->initCsvType(CsvType::CSV_TYPE_CATEGORY);
         // ヘッダ行の出力.
         $app['eccube.service.csv.export']->exportHeader();
         $qb = $app['eccube.repository.category']->createQueryBuilder('c')->orderBy('c.rank', 'DESC');
         // データ行の出力.
         $app['eccube.service.csv.export']->setExportQueryBuilder($qb);
         $app['eccube.service.csv.export']->exportData(function ($entity, $csvService) {
             $Csvs = $csvService->getCsvs();
             /** @var $Category \Eccube\Entity\Category */
             $Category = $entity;
             // CSV出力項目と合致するデータを取得.
             $row = array();
             foreach ($Csvs as $Csv) {
                 $row[] = $csvService->getData($Csv, $Category);
             }
             //$row[] = number_format(memory_get_usage(true));
             // 出力.
             $csvService->fputcsv($row);
         });
     });
     $now = new \DateTime();
     $filename = 'category_' . $now->format('YmdHis') . '.csv';
     $response->headers->set('Content-Type', 'application/octet-stream');
     $response->headers->set('Content-Disposition', 'attachment; filename=' . $filename);
     $response->send();
     return $response;
 }
Пример #20
0
 public function concatenationWithVideosAction($id)
 {
     $em = $this->getEm();
     $bumper = $em->getRepository('AppBundle:Bumper')->find($id);
     $response = new StreamedResponse();
     $category = $bumper->getCategory();
     $response->setCallback(function () use($bumper, $category, $em) {
         echo $this->renderView('Backend/Bumper/concatenation.html.twig');
         $this->get('app.concat_videos')->concatenate($bumper, $bumper->getCategory());
     });
     return $response->send();
 }
Пример #21
0
 /**
  * @Route(
  *      "/{gridName}/export/",
  *      name="oro_datagrid_export_action",
  *      requirements={"gridName"="[\w\:-]+"}
  * )
  *
  * @param string $gridName
  *
  * @return Response
  */
 public function exportAction($gridName)
 {
     // Export time execution depends on a size of data
     ignore_user_abort(false);
     set_time_limit(0);
     $request = $this->getRequest();
     $format = $request->query->get('format');
     $parametersFactory = $this->get('oro_datagrid.datagrid.request_parameters_factory');
     $parameters = $parametersFactory->createParameters($gridName);
     $context = new ExportContext(array('gridName' => $gridName, 'gridParameters' => $parameters));
     // prepare export executor
     $executor = new StepExecutor();
     $executor->setBatchSize(self::EXPORT_BATCH_SIZE);
     $executor->setReader($this->get('oro_datagrid.importexport.export_connector'))->setProcessor($this->get('oro_datagrid.importexport.processor.export'))->setWriter($this->get(sprintf('oro_importexport.writer.echo.%s', $format)));
     foreach ([$executor->getReader(), $executor->getProcessor(), $executor->getWriter()] as $element) {
         if ($element instanceof ContextAwareInterface) {
             $element->setImportExportContext($context);
         }
     }
     /** @var MimeTypeGuesser $mimeTypeGuesser */
     $mimeTypeGuesser = $this->get('oro_importexport.file.mime_type_guesser');
     $contentType = $mimeTypeGuesser->guessByFileExtension($format);
     if (!$contentType) {
         $contentType = 'application/octet-stream';
     }
     // prepare response
     $response = new StreamedResponse($this->exportCallback($context, $executor));
     $response->headers->set('Content-Type', $contentType);
     $response->headers->set('Content-Transfer-Encoding', 'binary');
     $outputFileName = sprintf('datagrid_%s_%s.%s', str_replace('-', '_', $gridName), date('Y_m_d_H_i_s'), $format);
     $response->headers->set('Content-Disposition', $response->headers->makeDisposition(ResponseHeaderBag::DISPOSITION_ATTACHMENT, $outputFileName));
     return $response->send();
 }
Пример #22
0
 /**
  * 会員CSVの出力.
  * @param Application $app
  * @param Request $request
  * @return StreamedResponse
  */
 public function export(Application $app, Request $request)
 {
     // タイムアウトを無効にする.
     set_time_limit(0);
     // sql loggerを無効にする.
     $em = $app['orm.em'];
     $em->getConfiguration()->setSQLLogger(null);
     $response = new StreamedResponse();
     $response->setCallback(function () use($app, $request) {
         // CSV種別を元に初期化.
         $app['eccube.service.csv.export']->initCsvType(CsvType::CSV_TYPE_CUSTOMER);
         // ヘッダ行の出力.
         $app['eccube.service.csv.export']->exportHeader();
         // 会員データ検索用のクエリビルダを取得.
         $qb = $app['eccube.service.csv.export']->getCustomerQueryBuilder($request);
         // データ行の出力.
         $app['eccube.service.csv.export']->setExportQueryBuilder($qb);
         $app['eccube.service.csv.export']->exportData(function ($entity, $csvService) {
             $Csvs = $csvService->getCsvs();
             /** @var $Customer \Eccube\Entity\Customer */
             $Customer = $entity;
             $row = array();
             // CSV出力項目と合致するデータを取得.
             foreach ($Csvs as $Csv) {
                 // 会員データを検索.
                 $row[] = $csvService->getData($Csv, $Customer);
             }
             //$row[] = number_format(memory_get_usage(true));
             // 出力.
             $csvService->fputcsv($row);
         });
     });
     $now = new \DateTime();
     $filename = 'customer_' . $now->format('YmdHis') . '.csv';
     $response->headers->set('Content-Type', 'application/octet-stream');
     $response->headers->set('Content-Disposition', 'attachment; filename=' . $filename);
     $response->send();
     log_info("会員CSVファイル名", array($filename));
     return $response;
 }
Пример #23
0
 /**
  * @param int $idPool
  *
  * @return \Symfony\Component\HttpFoundation\Response
  */
 protected function generateCsvFromVouchers($idPool)
 {
     $generatedVouchers = $this->getQueryContainer()->queryVouchersByIdVoucherPool($idPool)->find();
     $streamedResponse = new StreamedResponse();
     $streamedResponse->setCallback(function () use($generatedVouchers) {
         $csvHandle = fopen('php://output', 'w+');
         fputcsv($csvHandle, ['Voucher Code']);
         foreach ($generatedVouchers as $voucher) {
             fputcsv($csvHandle, [$voucher->getCode()]);
         }
         fclose($csvHandle);
     });
     $streamedResponse->setStatusCode(Response::HTTP_OK);
     $streamedResponse->headers->set('Content-Type', 'text/csv; charset=utf-8');
     $streamedResponse->headers->set('Content-Disposition', 'attachment; filename="' . self::CSV_FILENAME . '"');
     return $streamedResponse->send();
 }
Пример #24
0
 /**
  * Draw the Captcha
  *
  * @return  void
  */
 public function showCaptchaImg()
 {
     $this->createBackground();
     $this->drawlines();
     $this->generateCaptchaCode($this->caplength);
     $this->drawText();
     $response = new StreamedResponse();
     $img = $this->img;
     if (function_exists('imagejpeg')) {
         $response->headers->set('Content-Type', 'image/jpeg');
         $quality = (int) $this->quality;
         $response->setCallback(function () use($img, $quality) {
             imagejpeg($img, null, $quality);
         });
     } elseif (function_exists('imagegif')) {
         $response->headers->set('Content-Type', 'image/gif');
         $response->setCallback(function () use($img) {
             imagegif($img);
         });
     }
     $response->send();
     imagedestroy($this->img);
 }
 /**
  * 商品CSVの出力.
  *
  * @param Application $app
  * @param Request     $request
  * @param string      $type
  *
  * @return StreamedResponse
  */
 public function export(Application $app, Request $request, $type)
 {
     set_time_limit(0);
     $response = new StreamedResponse();
     $session = $request->getSession();
     if ($session->has('eccube.admin.plugin.sales_report.export')) {
         $searchData = $session->get('eccube.admin.plugin.sales_report.export');
     } else {
         $searchData = array();
     }
     $data = array('graph' => null, 'raw' => null);
     // Query data from database
     if ($searchData) {
         if ($searchData['term_end']) {
             $searchData['term_end'] = $searchData['term_end']->modify('- 1 day');
         }
         $data = $app['salesreport.service.sales_report']->setReportType($type)->setTerm($searchData['term_type'], $searchData)->getData();
     }
     $response->setCallback(function () use($data, $app, $request, $type) {
         //export data by type
         switch ($type) {
             case 'term':
                 $app['salesreport.service.sales_report']->exportTermCsv($data['raw'], $app['config']['csv_export_separator'], $app['config']['csv_export_encoding']);
                 break;
             case 'product':
                 $app['salesreport.service.sales_report']->exportProductCsv($data['raw'], $app['config']['csv_export_separator'], $app['config']['csv_export_encoding']);
                 break;
             case 'age':
                 $app['salesreport.service.sales_report']->exportAgeCsv($data['raw'], $app['config']['csv_export_separator'], $app['config']['csv_export_encoding']);
                 break;
             default:
                 $app['salesreport.service.sales_report']->exportTermCsv($data['raw'], $app['config']['csv_export_separator'], $app['config']['csv_export_encoding']);
         }
     });
     //set filename by type
     $now = new \DateTime();
     switch ($type) {
         case 'term':
             $filename = 'salesreport_term_' . $now->format('YmdHis') . '.csv';
             break;
         case 'product':
             $filename = 'salesreport_product_' . $now->format('YmdHis') . '.csv';
             break;
         case 'age':
             $filename = 'salesreport_age_' . $now->format('YmdHis') . '.csv';
             break;
         default:
             $filename = 'salesreport_term_' . $now->format('YmdHis') . '.csv';
     }
     $response->headers->set('Content-Type', 'application/octet-stream;');
     $response->headers->set('Content-Disposition', 'attachment; filename=' . $filename);
     $response->send();
     log_info('商品CSV出力ファイル名', array($filename));
     return $response;
 }
Пример #26
0
 public function downloadBlob($container, $blob)
 {
     try {
         $blob_get = $this->azureProxy->getBlob($container, $blob);
         $response = new StreamedResponse();
         $response->setCallback(function () use($blob_get) {
             fpassthru($blob_get->getContentStream());
         });
         $content = $response->headers->makeDisposition(ResponseHeaderBag::DISPOSITION_ATTACHMENT, $blob);
         $response->headers->set('Content-Disposition', $content);
         $response->send();
     } catch (ServiceException $e) {
         $code = $e->getCode();
         $error_message = $e->getMessage();
         throw new HttpException($code, $error_message);
     }
 }
Пример #27
0
 /**
  * アップロード用CSV雛形ファイルダウンロード
  */
 public function csvTemplate(Application $app, Request $request, $type)
 {
     set_time_limit(0);
     $response = new StreamedResponse();
     if ($type == 'product') {
         $headers = $this->getProductCsvHeader();
         $filename = 'product.csv';
     } else {
         if ($type == 'category') {
             $headers = $this->getCategoryCsvHeader();
             $filename = 'category.csv';
         } else {
             throw new NotFoundHttpException();
         }
     }
     $response->setCallback(function () use($app, $request, $headers) {
         // ヘッダ行の出力
         $row = array();
         foreach ($headers as $key => $value) {
             $row[] = mb_convert_encoding($key, $app['config']['csv_export_encoding'], 'UTF-8');
         }
         $fp = fopen('php://output', 'w');
         fputcsv($fp, $row, $app['config']['csv_export_separator']);
         fclose($fp);
     });
     $response->headers->set('Content-Type', 'application/octet-stream');
     $response->headers->set('Content-Disposition', 'attachment; filename=' . $filename);
     $response->send();
     return $response;
 }
Пример #28
0
 /**
  * @EXT\Route(
  *     "/download",
  *     name="claro_resource_download",
  *     options={"expose"=true},
  *     defaults ={"forceArchive"=false}
  * )
  * @EXT\Route(
  *     "/download/{forceArchive}",
  *     name="claro_resource_download",
  *     options={"expose"=true},
  *     requirements={"forceArchive" = "^(true|false|0|1)$"},
  * )
  * @EXT\ParamConverter(
  *     "nodes",
  *     class="ClarolineCoreBundle:Resource\ResourceNode",
  *     options={"multipleIds" = true}
  * )
  *
  * This function takes an array of parameters. Theses parameters are the ids
  * of the resources which are going to be downloaded
  * (query string: "ids[]=1&ids[]=2" ...).
  *
  * @param array $nodes
  *
  * @param bool $forceArchive
  * @return \Symfony\Component\HttpFoundation\Response
  */
 public function downloadAction(array $nodes, $forceArchive = false)
 {
     $collection = new ResourceCollection($nodes);
     $this->checkAccess('EXPORT', $collection);
     $data = $this->resourceManager->download($nodes, $forceArchive);
     $file = $data['file'];
     $fileName = $data['name'];
     $mimeType = $data['mimeType'];
     $response = new StreamedResponse();
     $file = $data['file'] ?: tempnam('tmp', 'tmp');
     $response->setCallBack(function () use($file) {
         readfile($file);
     });
     $response->headers->set('Content-Transfer-Encoding', 'octet-stream');
     $response->headers->set('Content-Type', 'application/force-download');
     $response->headers->set('Content-Disposition', 'attachment; filename=' . urlencode($fileName));
     $response->headers->set('Content-Type', $mimeType);
     $response->headers->set('Connection', 'close');
     $response->send();
     return new Response();
 }
Пример #29
0
 /**
  * Handles response for csv-request.
  *
  * @param ViewHandler $handler
  * @param View $view
  * @param Request $request
  * @param string $format
  *
  * @return Response
  *
  * @throws ObjectNotSupportedException
  */
 public function createResponse(ViewHandler $handler, View $view, Request $request, $format)
 {
     if (!$view->getData() instanceof ListRepresentation) {
         throw new ObjectNotSupportedException($view);
     }
     $viewData = $view->getData();
     $data = new CallbackCollection($viewData->getData(), [$this, 'prepareData']);
     $fileName = sprintf('%s.csv', $viewData->getRel());
     $config = new ExporterConfig();
     $exporter = new Exporter($config);
     $data->rewind();
     if ($row = $data->current()) {
         $config->setColumnHeaders(array_keys($row));
     }
     $config->setDelimiter($this->convertValue($request->get('delimiter', ';'), self::$delimiterMap));
     $config->setNewline($this->convertValue($request->get('newLine', '\\n'), self::$newLineMap));
     $config->setEnclosure($request->get('enclosure', '"'));
     $config->setEscape($request->get('escape', '\\'));
     $response = new StreamedResponse();
     $disposition = $response->headers->makeDisposition(ResponseHeaderBag::DISPOSITION_ATTACHMENT, $fileName, $fileName);
     $response->headers->set('Content-Type', 'text/csv');
     $response->headers->set('Content-Disposition', $disposition);
     $response->setCallback(function () use($data, $exporter) {
         $exporter->export('php://output', $data);
     });
     $response->send();
     return $response;
 }
Пример #30
0
 /**
  * @EXT\Route(
  *     "/courses/export",
  *     name="claro_cursus_courses_export",
  *     options={"expose"=true}
  * )
  * @EXT\ParamConverter("authenticatedUser", options={"authenticatedUser" = true})
  */
 public function coursesExportAction()
 {
     $courses = $this->cursusManager->getAllCourses('', 'id', 'ASC', false);
     $zipName = 'courses.zip';
     $mimeType = 'application/zip';
     $file = $this->cursusManager->zipDatas($courses, 'course');
     $response = new StreamedResponse();
     $response->setCallBack(function () use($file) {
         readfile($file);
     });
     $response->headers->set('Content-Transfer-Encoding', 'octet-stream');
     $response->headers->set('Content-Type', 'application/force-download');
     $response->headers->set('Content-Disposition', 'attachment; filename=' . urlencode($zipName));
     $response->headers->set('Content-Type', $mimeType);
     $response->headers->set('Connection', 'close');
     $response->send();
     return new Response();
 }