/** * @param array $requestData * @param array $filterParams * @return array * @throws \Exception */ public function export(array $requestData, array $filterParams) { $serviceHelpers = $this->buildServiceHelpers($requestData); $requestData['filter'] = $this->prepareFilter($serviceHelpers->getProfile()->getType(), $filterParams); $this->initializeDataIO($serviceHelpers->getDataIO(), $requestData); $dataTransformerChain = $this->createDataTransformerChain($serviceHelpers->getProfile(), $serviceHelpers->getFileWriter()->hasTreeStructure()); $dataWorkflow = new DataWorkflow($serviceHelpers->getDataIO(), $serviceHelpers->getProfile(), $dataTransformerChain, $serviceHelpers->getFileWriter()); $session = $serviceHelpers->getSession()->getEntity(); try { $resultData = $dataWorkflow->export($requestData); $message = sprintf('%s %s %s', $resultData['position'], SnippetsHelper::getNamespace('backend/swag_import_export/default_profiles')->get('type/' . $serviceHelpers->getProfile()->getType()), SnippetsHelper::getNamespace('backend/swag_import_export/log')->get('export/success')); $this->logProcessing('false', $resultData['fileName'], $serviceHelpers->getProfile()->getName(), $message, 'true', $session); unset($resultData['filter']); return $resultData; } catch (\Exception $e) { $this->logProcessing('true', $requestData['fileName'], $serviceHelpers->getProfile()->getName(), $e->getMessage(), 'false', $session); throw $e; } }
/** * Executes export action * * @return array */ public function exportAction() { $logger = $this->getLogger(); $postData = array('profileId' => (int) $this->profileEntity->getId(), 'type' => 'export', 'format' => $this->format, 'sessionId' => $this->sessionId, 'fileName' => basename($this->filePath), 'filter' => array(), 'limit' => array('limit' => $this->limit, 'offset' => $this->offset)); if ($this->exportVariants) { $postData['filter']['variants'] = $this->exportVariants; } if ($this->category) { $postData['filter']['categories'] = $this->category; } /** @var Profile $profile */ $profile = $this->Plugin()->getProfileFactory()->loadProfile($postData); /** @var DataFactory $dataFactory */ $dataFactory = $this->Plugin()->getDataFactory(); $dbAdapter = $dataFactory->createDbAdapter($profile->getType()); $dataSession = $dataFactory->loadSession($postData); //create dataIO $dataIO = $dataFactory->createDataIO($dbAdapter, $dataSession, $logger); $colOpts = $dataFactory->createColOpts($postData['columnOptions']); $limit = $dataFactory->createLimit($postData['limit']); $filter = $dataFactory->createFilter($postData['filter']); $maxRecordCount = $postData['max_record_count']; $type = $postData['type']; $format = $postData['format']; $dataIO->initialize($colOpts, $limit, $filter, $type, $format, $maxRecordCount); $dataIO->setUsername($this->username); // we create the file writer that will write (partially) the result file /** @var FileIOFactory $fileFactory */ $fileFactory = $this->Plugin()->getFileIOFactory(); /** @var FileWriter $fileWriter */ $fileWriter = $fileFactory->createFileWriter($postData['format']); /** @var DataTransformerChain $dataTransformerChain */ $dataTransformerChain = $this->Plugin()->getDataTransformerFactory()->createDataTransformerChain($profile, array('isTree' => $fileWriter->hasTreeStructure())); $dataWorkflow = new DataWorkflow($dataIO, $profile, $dataTransformerChain, $fileWriter); $post = $dataWorkflow->export($postData, $this->filePath); $message = sprintf('%s %s %s', $post['position'], SnippetsHelper::getNamespace('backend/swag_import_export/default_profiles')->get('type/' . $profile->getType()), SnippetsHelper::getNamespace('backend/swag_import_export/log')->get('export/success')); $logger->write($message, 'false', $dataSession->getEntity()); $logData = new LogDataStruct(date("Y-m-d H:i:s"), $post['fileName'], $profile->getName(), $message, 'true'); $logger->writeToFile($logData); $this->sessionId = $post['sessionId']; return $post; }