/**
* Import action
*
* @return Response
*
* @throws AccessDeniedException If access is not granted
*/
public function importAction(Request $request)
{
if (false === $this->admin->isGranted('IMPORT')) {
throw new AccessDeniedException();
}
$defaultData = array();
$form = $this->createFormBuilder($defaultData)->add('file', 'file')->getForm();
$form->handleRequest($request);
$data = array();
if ($form->isValid()) {
$fs = new Filesystem();
try {
$fs->mkdir('/tmp/import');
} catch (IOExceptionInterface $e) {
echo "An error occurred while creating your directory at " . $e->getPath();
}
$form['file']->getData()->move('/tmp/import', 'data.csv');
$file = new \SplFileObject('/tmp/import/data.csv');
// this must be done to import CSVs where one of the data-field has CRs within!
$file->setFlags(\SplFileObject::READ_CSV | \SplFileObject::SKIP_EMPTY | \SplFileObject::READ_AHEAD);
$reader = new Reader\CsvReader($file, ';');
$reader->setHeaderRowNumber(0);
if ($request->request->has('btn_preview')) {
foreach ($reader as $row) {
$data[] = $row;
}
} else {
// Set Database into "nonchecking Foreign Keys"
$em = $this->getDoctrine()->getManager();
$em->getConnection()->exec("SET FOREIGN_KEY_CHECKS=0;");
$writer = new DoctrineWriter($em, "AppBundle:Partner");
$writer->setTruncate(false);
$metadata = $em->getClassMetaData("AppBundle:Partner");
$metadata->setIdGeneratorType(ClassMetadata::GENERATOR_TYPE_NONE);
$mapping = new Step\MappingStep();
$mapping->map('[country_code]', '[country]');
$mapping->map('[category]', '[partnerCategory]');
$converter = new StringToObjectConverter($em->getRepository("AppBundle:PartnerCategory"), 'name');
$valueConverterStep = new Step\ValueConverterStep();
$valueConverterStep->add('[partnerCategory]', $converter);
// $converter = new CustomValueConverter();
// $converterStep = new Step\ConverterStep();
// $converterStep->add($converter);
$workflow = new Workflow\StepAggregator($reader);
$workflow->addStep($mapping);
$workflow->addStep($valueConverterStep);
// $workflow->addStep($converterStep);
$workflow->addWriter($writer);
$workflow->process();
// Resetting Database Check Status
$em->getConnection()->exec("SET FOREIGN_KEY_CHECKS=1;");
}
}
$formView = $form->createView();
// set the theme for the current Admin Form
$this->get('twig')->getExtension('form')->renderer->setTheme($formView, $this->admin->getFilterTheme());
return $this->render('CRUD/import_partner.html.twig', array('action' => 'import', 'form' => $formView, 'data' => $data));
}