Example #1
1
 public function csvImport($csvFile, $entity, $user, $fileRecord)
 {
     // Create and configure the reader
     $headers = new ParagonArray();
     $file = new \SplFileObject($csvFile);
     $csvReader = new CsvReader($file);
     $csvReader->setHeaderRowNumber(0);
     $csvReader->setStrict(false);
     $csvReader->setColumnHeaders($headers->csvReaderArray());
     $workflow = new Workflow($csvReader);
     $doctrineWriter = new DoctrineWriter($this->em, $entity);
     $doctrineWriter->disableTruncate();
     $workflow->addWriter($doctrineWriter);
     $dateConverter = new DateConventer($fileRecord->getPlanDate());
     $weekNumberConverter = new WeekNumberConventer($fileRecord->getPlanDate());
     $planNameConverter = new PlanNameConventer($fileRecord->getName());
     $routeNameConventer = new RouteNameConventer($fileRecord->getPlanDate());
     $dateTimeNow = new DateTimeNow();
     $dateToMicroConventer = new TimeToMicroConventer();
     $timeConverter = new DateTimeValueConverter('H:i');
     $uploadedBy = new UploadedBy($user);
     $planDateConvert = new PlanDateConvert($fileRecord->getPlanDate());
     //\Doctrine\Common\Util\Debug::dump($date->format('Y-m-d'));
     //die;
     $date = $fileRecord->getPlanDate();
     $workflow->setSkipItemOnFailure(true)->addValueConverter('routeNo', $routeNameConventer)->addValueConverter('startTime', $dateConverter)->addValueConverter('sourceDepotDepartureTime', $dateConverter)->addValueConverter('arrivalTime', $dateConverter)->addValueConverter('departTime', $dateConverter)->addValueConverter('endDepotArrivalTime', $dateConverter)->addValueConverter('tripStart', $dateConverter)->addValueConverter('destDepotArrivalTime', $dateConverter)->addValueConverter('destDepotDepartureTime', $dateConverter)->addValueConverter('sourceDepotArrivalTime2', $dateConverter)->addValueConverter('sourceDepotDepartureTime2', $dateConverter)->addValueConverter('startDepotDepartureTime', $dateConverter)->addValueConverter('endTime', $dateConverter)->addValueConverter('callDuration', $dateToMicroConventer)->addValueConverter('dutyTime', $dateToMicroConventer)->addValueConverter('driveTime', $dateToMicroConventer)->addValueConverter('emptyTime', $dateToMicroConventer)->addValueConverter('timeWindowStart', $dateConverter)->addValueConverter('timeWindowEnd', $dateConverter)->addValueConverter('uploadDate', $dateTimeNow)->addValueConverter('uploadedBy', $uploadedBy)->addValueConverter('planDate', $planDateConvert)->addValueConverter('planName', $planNameConverter)->addValueConverter('weekNumber', $weekNumberConverter);
     //        \Doctrine\Common\Util\Debug::dump($doctrineWriter);
     //        die;
     $result = $workflow->process();
     //update query to generate route and trip combination
     $query = $this->em->createQuery("UPDATE NTPBundle:ParagonData p SET p.routeNo = CONCAT(p.routeNo,'0', p.tripNo) " . "WHERE p.planDate=:date")->setParameter('date', $date);
     $query->execute();
     return $result;
 }
 /**
  * {@inheritdoc}
  */
 public function process()
 {
     $msg = 'Processing workflow';
     if ($this->workflow instanceof Workflow and $name = $this->workflow->getName()) {
         $msg .= ': ' . $name;
     }
     $this->climate->write($msg . "\n");
     $result = $this->workflow->process();
     $this->climate->info('Time elapsed: ' . $result->getElapsed()->format('%i minute(s) %s second(s)'));
     $this->climate->info('Total processed: ' . $result->getTotalProcessedCount() . ' row(s)');
     if ($errorCount = $result->getErrorCount() > 0) {
         $this->climate->error('Errors: ' . $errorCount);
     }
     return $result;
 }
Example #3
0
 /**
  * DefaultTask constructor.
  * Crawl sources configuration and get data from those readers
  * @param Configuration $config
  */
 public function __construct(Configuration $config)
 {
     // Get sources
     $sources = $config->get(array('sources'), array());
     foreach ($sources as $key => $source) {
         // Skip this source if not defined
         if (!is_array($source) || empty($source)) {
             continue;
         }
         // Empty data array
         $data = array();
         // Create reader with source conf
         $reader = Migrator::createReader(new Configuration($source));
         // Writer will set data in an array
         $writer = new CallbackWriter(function ($item) use(&$data) {
             array_push($data, $item);
         });
         // Create new workflow
         $workflow = new Workflow($reader);
         $workflow->addWriter($writer);
         $workflow->process();
         // Apply data to sources
         $this->sources[$key] = $data;
     }
     if (count($this->sources) > 0) {
         $this->data = current($this->sources);
     }
     // Exec main with this task config
     $this->main($config->export());
 }
 public function csvAction()
 {
     $usb_device = $this->getDoctrine()->getRepository('CacicCommonBundle:ComputadorColeta')->listar3g();
     // Gera cabeçalho
     $cabecalho = array('Identificador', 'Valor Coletado', 'Nome', 'Fabricante', 'Coletados');
     $dados = array_merge(array($cabecalho), $usb_device);
     // Gera CSV
     $reader = new ArrayReader($dados);
     // Create the workflow from the reader
     $workflow = new Workflow($reader);
     // Add the writer to the workflow
     $tmpfile = tempnam(sys_get_temp_dir(), "Relatório-Dispositivos-3g.csv");
     $file = new \SplFileObject($tmpfile, 'w');
     $writer = new CsvWriter($file);
     $workflow->addWriter($writer);
     // Process the workflow
     $workflow->process();
     // Retorna o arquivo
     $response = new BinaryFileResponse($tmpfile);
     $response->headers->set('Content-Type', 'text/csv');
     $filename = "Relatório-Dispositivos-3g.csv";
     $response->headers->set('Content-Disposition', "attachment; filename={$filename}");
     $response->headers->set('Content-Transfer-Encoding', 'binary');
     return $response;
 }
Example #5
0
 protected function execute(InputInterface $input, OutputInterface $output)
 {
     $reader = new CsvReader(new \SplFileObject($input->getArgument("file")));
     $reader->setHeaderRowNumber(0);
     $workflow = new Workflow($reader);
     $workflow->addWriter(new IssueWriter($this->client));
     $workflow->process();
 }
 public function register(Container $app)
 {
     $app['import.dbal'] = $app->protect(function ($conn = 'import', array $tables = ['project', 'product']) use($app) {
         //database connections
         $em = $app['orm.em'];
         $dbal = $app['dbs'][$conn];
         foreach ($tables as $table) {
             $class = 'MetaCat\\Entity\\' . ucfirst($table);
             //grab columns
             $metadata = $em->getClassMetadata($class);
             $columns = $metadata->getColumnNames();
             //add column for related entity
             if ($table === 'product') {
                 $columns['project'] = 'projectid AS project';
             }
             $sql = 'SELECT ' . implode(', ', $columns) . " FROM {$table};";
             //Preserve ids
             $metadata->setIdGeneratorType(ClassMetadata::GENERATOR_TYPE_NONE);
             $metadata->setIdGenerator(new AssignedGenerator());
             // Create and configure the reader
             $reader = new DbalReader($dbal, $sql);
             // Create the workflow from the reader
             $workflow = new Workflow($reader, isset($app['monolog']) ? $app['monolog'] : null);
             // Create a writer: you need Doctrine’s EntityManager.
             $doctrineWriter = new DoctrineWriter($em, $class);
             $workflow->addWriter($doctrineWriter);
             //set related entity
             if ($table === 'product') {
                 $converter = new CallbackValueConverter(function ($item) use($em) {
                     $val = $item ? $em->getReference('MetaCat\\Entity\\Project', $item) : null;
                     return $val;
                 });
                 $workflow->addValueConverter('project', $converter);
             }
             $converter = new CallbackValueConverter(function ($item) {
                 $val = json_decode($item);
                 return $val;
             });
             $workflow->addValueConverter('json', $converter);
             // Process the workflow
             $result[] = $workflow->process();
             //invalidate cache
             $em->getConfiguration()->getResultCacheImpl()->delete("mc_{$table}_owner");
             //touch update
             touch($app['config.dir'] . '../var/data/update');
         }
         return $result;
     });
 }
Example #7
0
 private function process(Workflow $workflow, Import $import)
 {
     $e = null;
     $importRun = null;
     if ($this->eventDispatcher && ($importRun = $import->getRun())) {
         $e = new ImportProcessEvent($import);
     }
     if ($e && $importRun->getConfiguration()) {
         $this->eventDispatcher->dispatch(ImportProcessEvent::AFTER_PREPARE . '.' . $importRun->getConfiguration()->getImporterId(), $e);
     }
     $workflow->process();
     if ($e && $importRun->getConfiguration()) {
         $this->eventDispatcher->dispatch(ImportProcessEvent::AFTER_FINISH . '.' . $importRun->getConfiguration()->getImporterId(), $e);
     }
 }
 public function process()
 {
     //if no eventdispatcher has been set, use original functionality
     if (!$this->eventDispatcher) {
         return parent::process();
     }
     $count = 0;
     $exceptions = array();
     $startTime = new \DateTime();
     $importProcessEvent = new ImportProcessEvent();
     //Prepare
     $this->prepare($importProcessEvent);
     // Read all items
     foreach ($this->reader as $item) {
         //only create event once for every item-event for performance reasons
         $event = $importProcessEvent->newItemEvent($item);
         try {
             $this->processRead($item, $event);
             // Apply filters before conversion
             if (!$this->processFilter($item, $event)) {
                 continue;
             }
             // Convert item
             if (!($convertedItem = $this->processConvert($item, $event))) {
                 continue;
             }
             // Apply filters after conversion
             if (!$this->processConvertFilter($convertedItem, $event)) {
                 continue;
             }
             $this->processWrite($convertedItem, $item, $event);
         } catch (ExceptionInterface $e) {
             if ($this->skipItemOnFailure) {
                 $exceptions[] = $e;
                 $this->logger->error($e->getMessage());
             } else {
                 throw $e;
             }
         }
         ++$count;
     }
     //Finish
     $this->finish($importProcessEvent);
     return new Result($this->name, $startTime, new \DateTime(), $count, $exceptions);
 }
 public function importFileAction(Request $request)
 {
     // Create and configure the reader
     $file = new \SplFileObject('directly.csv', "r");
     //$file->setFlags(SplFileObject::READ_CSV);
     $csvReader = new CsvReader($file, ",");
     var_dump($csvReader);
     // Tell the reader that the first row in the CSV file contains column headers
     $csvReader->setHeaderRowNumber(0);
     // Create the workflow from the reader
     $workflow = new Workflow($csvReader);
     // Create a writer: you need Doctrine’s EntityManager.
     $em = $this->getDoctrine()->getManager();
     $doctrineWriter = new DoctrineWriter($em, 'SuppliercheckAdminBundle:Product');
     $workflow->addWriter($doctrineWriter);
     $doctrineWriter->setTruncate(false);
     //$entityMetadata=$em->getClassMetadata('AdminAdminBundle:Product');
     //$entityMetadata->setIdGeneratorType(\Doctrine\ORM\Mapping\ClassMetadata::GENERATOR_TYPE_AUTO);
     // Process the workflow
     $workflow->process();
     //var_dump($workflow);
     return $this->render('SuppliercheckAdminBundle:Default:csv_import.html.twig');
 }
Example #10
0
 /**
  * Generate a CSV file
  *
  * @Route("/csv", name="printer_csv")
  *
  */
 public function csvAction(Request $request)
 {
     $em = $this->getDoctrine()->getManager();
     $form = $request->query->get('form');
     if ($form) {
         $start = new \DateTime($form['startDate']);
         $start = $start->format('U');
         $end = new \DateTime($form['endDate']);
         $end = $end->format('U');
     }
     $start = isset($start) ? $start : time() - 60 * 60 * 24 * 30;
     $end = isset($end) ? $end : time();
     $printers = $em->getRepository('CocarBundle:PrinterCounter')->relatorioCsvGeral($start, $end);
     // Gera CSV
     $reader = new ArrayReader($printers);
     // Create the workflow from the reader
     $workflow = new Workflow($reader);
     // As you can see, the first names are not capitalized correctly. Let's fix
     // that with a value converter:
     $converter = new CallbackValueConverter(function ($input) {
         return date('d/m/Y', $input);
     });
     $workflow->addValueConverter('endDate', $converter);
     $workflow->addValueConverter('startDate', $converter);
     // Add the writer to the workflow
     $tmpfile = tempnam(sys_get_temp_dir(), 'impressoras');
     $file = new \SplFileObject($tmpfile, 'w');
     $writer = new CsvWriter($file);
     $workflow->addWriter($writer);
     // Process the workflow
     $workflow->process();
     // Retorna o arquivo
     $response = new BinaryFileResponse($tmpfile);
     $response->headers->set('Content-Type', 'text/csv');
     $response->headers->set('Content-Disposition', 'attachment; filename="impressoras.csv"');
     $response->headers->set('Content-Transfer-Encoding', 'binary');
     return $response;
 }
 /**
  * CSV do relatório de softwares removidos
  *
  * @param Request $request
  * @param $idAquisicaoItem
  * @return BinaryFileResponse
  * @throws \Ddeboer\DataImport\Exception\ExceptionInterface
  * @throws \Exception
  */
 public function removidosDetalhadoCsvAction(Request $request, $idAquisicaoItem)
 {
     $locale = $request->getLocale();
     $dados = $this->getDoctrine()->getRepository('CacicCommonBundle:AquisicaoItem')->removidosDetalhadoCsv($idAquisicaoItem);
     $cabecalho = array(array('ID', 'Nome da máquina', 'IP', 'MAC Address', 'Sistema Operacional', 'Local', 'Subrede', 'Data da coleta'));
     // Gera CSV
     $reader = new ArrayReader(array_merge($cabecalho, $dados));
     // Create the workflow from the reader
     $workflow = new Workflow($reader);
     $converter = new CallbackValueConverter(function ($input) {
         $date = new DateTime($input);
         return $date->format('d/m/Y H:m:s');
     });
     $workflow->addValueConverter('dtHrUltAcesso', $converter);
     $workflow->addValueConverter("reader", new CharsetValueConverter('UTF-8', $reader));
     // Add the writer to the workflow
     $filename = "relatorio-software.csv";
     $tmpfile = tempnam(sys_get_temp_dir(), $filename);
     $file = new \SplFileObject($tmpfile, 'w');
     $writer = new CsvWriter($file);
     $workflow->addWriter($writer);
     // Process the workflow
     $workflow->process();
     // Retorna o arquivo
     $response = new BinaryFileResponse($tmpfile);
     $response->headers->set('Content-Type', 'text/csv');
     $response->headers->set('Content-Disposition', "attachment; filename={$filename}");
     $response->headers->set('Content-Transfer-Encoding', 'binary');
     return $response;
 }
Example #12
0
 public function semColetaDetalharCsvAction(Request $request)
 {
     $em = $this->getDoctrine()->getManager();
     $locale = $request->getLocale();
     $idSo = $request->get('idSo');
     $idRede = $request->get('idRede');
     $idLocal = $request->get('idLocal');
     $idClasse = $request->get('idClasse');
     $computadores = $em->getRepository("CacicCommonBundle:Computador")->detalharClasseCsv($idClasse, $idRede, $idLocal, $idSo);
     // Gera CSV
     $reader = new ArrayReader($computadores);
     // Create the workflow from the reader
     $workflow = new Workflow($reader);
     // As you can see, the first names are not capitalized correctly. Let's fix
     // that with a value converter:
     $converter = new CallbackValueConverter(function ($input) {
         return $input->format('d/m/Y H:m:s');
     });
     $workflow->addValueConverter('dtHrUltAcesso', $converter);
     $workflow->addValueConverter("reader", new CharsetValueConverter('UTF-8', $reader));
     // Add the writer to the workflow
     $tmpfile = tempnam(sys_get_temp_dir(), 'Computadores-Subredes');
     $file = new \SplFileObject($tmpfile, 'w');
     $writer = new CsvWriter($file);
     $writer->writeItem(array('Computador', 'MAC Address', 'Endereço IP', 'SO', 'Local', 'Sub Rede', 'Data e Hora do último Acesso'));
     $workflow->addWriter($writer);
     // Process the workflow
     $workflow->process();
     // Retorna o arquivo
     $response = new BinaryFileResponse($tmpfile);
     $response->headers->set('Content-Type', 'text/csv');
     $response->headers->set('Content-Disposition', 'attachment; filename="WMI-sem-coleta.csv"');
     $response->headers->set('Content-Transfer-Encoding', 'binary');
     return $response;
 }
Example #13
0
 public function detalharCsvAction(Request $request)
 {
     $locale = $request->getLocale();
     $em = $this->getDoctrine()->getManager();
     $idRelatorio = $request->get('softwares');
     $nomeRelatorio = $request->get('nomeRelatorio');
     $idLocal = $request->get('locais');
     $idRede = $request->get('redes');
     $idSo = $request->get('so');
     $filtros = array('softwares' => $idRelatorio, 'nomeRelatorio' => $nomeRelatorio, 'locais' => $idLocal, 'redes' => $idRede, 'so' => $idSo);
     $saida = array();
     if (is_array($idRelatorio) && !empty($idRelatorio)) {
         foreach ($idRelatorio as $elm) {
             $relatorio = $em->getRepository("CacicCommonBundle:SoftwareRelatorio")->find($elm);
             if (!empty($relatorio)) {
                 array_push($saida, $relatorio);
             }
         }
     } elseif (!empty($idRelatorio)) {
         $relatorio = $em->getRepository("CacicCommonBundle:SoftwareRelatorio")->find($idRelatorio);
         if (!empty($relatorio)) {
             array_push($saida, $relatorio);
         }
     }
     if (is_array($nomeRelatorio) && !empty($nomeRelatorio)) {
         foreach ($nomeRelatorio as $elm) {
             $relatorio = $em->getRepository("CacicCommonBundle:SoftwareRelatorio")->findOneBy(array('nomeRelatorio' => $elm));
             if (!empty($relatorio)) {
                 array_push($saida, $relatorio);
             }
         }
     } elseif (!empty($nomeRelatorio)) {
         $relatorio = $em->getRepository("CacicCommonBundle:SoftwareRelatorio")->findOneBy(array('nomeRelatorio' => $nomeRelatorio));
         if (!empty($relatorio)) {
             array_push($saida, $relatorio);
         }
     }
     $dados = $em->getRepository("CacicCommonBundle:SoftwareRelatorio")->gerarRelatorioDetalharCsv($filtros);
     // Gera CSV
     $reader = new ArrayReader($dados);
     // Create the workflow from the reader
     $workflow = new Workflow($reader);
     $converter = new CallbackValueConverter(function ($input) {
         return $input->format('d/m/Y H:m:s');
     });
     $workflow->addValueConverter('dtHrUltAcesso', $converter);
     $workflow->addValueConverter("reader", new CharsetValueConverter('UTF-8', $reader));
     // Add the writer to the workflow
     $tmpfile = tempnam(sys_get_temp_dir(), 'Relatorio-Software-Detalhado.csv');
     $file = new \SplFileObject($tmpfile, 'w');
     $writer = new CsvWriter($file);
     $writer->writeItem(array('Computador', 'MAC Address', 'Endereço IP', 'Sistema Operacional', 'Local', 'Ip da Rede', 'Nome da Rede', 'Data/Hora do Último Acesso'));
     $workflow->addWriter($writer);
     // Process the workflow
     $workflow->process();
     // Retorna o arquivo
     $response = new BinaryFileResponse($tmpfile);
     $response->headers->set('Content-Type', 'text/csv');
     $response->headers->set('Content-Disposition', 'attachment; filename="Relatório-Software-Detalhado.csv"');
     $response->headers->set('Content-Transfer-Encoding', 'binary');
     return $response;
 }
Example #14
0
 public function arquivoEstacaoAction(Request $request)
 {
     $printers = $this->getDoctrine()->getManager()->getRepository('CacicCommonBundle:Computador')->estacaoSGConf();
     // Gera CSV
     $reader = new ArrayReader($printers);
     // Create the workflow from the reader
     $workflow = new Workflow($reader);
     // As you can see, the first names are not capitalized correctly. Let's fix
     // that with a value converter:
     $converter = new CallbackValueConverter(function ($input) {
         return $input->format('d/m/Y H:m:s');
     });
     $workflow->addValueConverter('dtHrUltAcesso', $converter);
     $workflow->addValueConverter("reader", new CharsetValueConverter('UTF-8', $reader));
     // Add the writer to the workflow
     $tmpfile = tempnam(sys_get_temp_dir(), 'SGConf_PGFN_Estacoes_CACIC_');
     $file = new \SplFileObject($tmpfile, 'w');
     $writer = new CsvWriter($file);
     $workflow->addWriter($writer);
     // Process the workflow
     $workflow->process();
     // Gera data e adiciona no nome do arquivo
     $today = date("Ymd");
     $nameArquivo = "SGConf_PGFN_Estacoes_CACIC_" . $today . ".csv";
     // Retorna o arquivo
     $response = new BinaryFileResponse($tmpfile);
     $response->headers->set('Content-Type', 'text/csv');
     $response->headers->set('Content-Disposition', 'attachment; filename=' . $nameArquivo . '');
     $response->headers->set('Content-Transfer-Encoding', 'binary');
     return $response;
 }
 /**
  * CSV da lista de computadores
  *
  * @param Request $request
  * @param null $idRede ID da Rede
  * @return BinaryFileResponse
  * @throws \Ddeboer\DataImport\Exception\ExceptionInterface
  * @throws \Exception
  */
 public function listarDetalhadoCsvAction(Request $request, $idRede = null)
 {
     $dataInicio = $request->get('dataInicio');
     $dataFim = $request->get('dataFim');
     $locale = $request->getLocale();
     $dados = $this->getDoctrine()->getRepository('CacicCommonBundle:Computador')->gerarRelatorioComputadoresCsv($filtros = array(), $idRede, $dataInicio, $dataFim);
     if (!empty($idRede)) {
         $rede = $dados[0]['nmRede'];
     } else {
         $rede = null;
     }
     // Gera CSV
     $reader = new ArrayReader($dados);
     // Create the workflow from the reader
     $workflow = new Workflow($reader);
     $workflow->addValueConverter("reader", new CharsetValueConverter('UTF-8', $reader));
     $converter = new CallbackValueConverter(function ($input) {
         return $input->format('d/m/Y H:m:s');
     });
     $workflow->addValueConverter('dtHrUltAcesso', $converter);
     // Add the writer to the workflow
     $tmpfile = tempnam(sys_get_temp_dir(), 'Computadores-lista');
     $file = new \SplFileObject($tmpfile, 'w');
     $writer = new CsvWriter($file);
     $writer->writeItem(array('Computador', 'Mac Address', 'Endereço IP', 'Sistema Operacional', 'Local', 'Subrede', 'IP Subrede', 'Data/Hora do Ùltimo Acesso'));
     $workflow->addWriter($writer);
     // Process the workflow
     $workflow->process();
     // Retorna o arquivo
     $response = new BinaryFileResponse($tmpfile);
     $response->headers->set('Content-Type', 'text/csv');
     $response->headers->set('Content-Disposition', 'attachment; filename="Computadores.csv"');
     $response->headers->set('Content-Transfer-Encoding', 'binary');
     return $response;
 }
Example #16
0
 /**
  * Import  from csv
  * using https://github.com/ddeboer/data-import
  *
  * @Route("/import/{filetype}/{entity}/{id}", name="import_upload")
  */
 public function importAction($id, $filetype, $entity)
 {
     $em = $this->getDoctrine()->getManager();
     // Create and configure the reader
     $upload = $em->getRepository('AppBundle:Upload')->find($id);
     $path = $this->get('kernel')->getRootDir() . '/../uploads/' . $upload->getName();
     $entity_namespace = 'AppBundle:' . $entity;
     $entity_redirect = $entity;
     $file = new \SplFileObject($path);
     $csvReader = new CsvReader($file);
     // Tell the reader that the first row in the CSV file contains column headers
     $csvReader->setHeaderRowNumber(0);
     $csvReader->setStrict(FALSE);
     // Create the workflow from the reader
     $workflow = new Workflow($csvReader);
     // Create a writer: you need Doctrine’s EntityManager.
     $doctrineWriter = new DoctrineWriter($em, $entity_namespace);
     $doctrineWriter->disableTruncate();
     $workflow->addWriter($doctrineWriter);
     // Process the workflow
     $workflow->process();
     return $this->redirect($this->generateUrl(strtolower($entity_redirect)));
 }
 public function importFileAction(Request $request)
 {
     // Get FileId to "import"
     $param = $request->request;
     $fileId = (int) trim($param->get("fileId"));
     $curType = trim($param->get("fileType"));
     $uploadedFile = $request->files->get("csvFile");
     // if upload was not ok, just redirect to "AdminStatWrongPArameters"
     if (!CSVTypes::existsType($curType) || $uploadedFile == null) {
         return 0;
     }
     // generate dummy dir
     $dummyImport = getcwd() . "/dummyImport";
     $fname = "directly.csv";
     $filename = $dummyImport . "/" . $fname;
     @mkdir($dummyImport);
     @unlink($filename);
     // move file to dummy filename
     $uploadedFile->move($dummyImport, $fname);
     echo "Starting to Import " . $filename . ", Type: " . CSVTypes::getNameOfType($curType) . "<br/>";
     // open file
     $source = new StreamSource($filename);
     if ($source === false) {
         die("Can't open filestream {$filename}");
     }
     $file = $source->getFile();
     if ($file === false) {
         die("Can't open file {$filename}");
     }
     // Create and configure the reader
     $csvReader = new CsvReader($file, ";");
     if ($csvReader === false) {
         die("Can't create csvReader {$filename}");
     }
     $csvReader->setHeaderRowNumber(1);
     var_dump($csvReader);
     // 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);
     echo "etape";
     var_dump($file);
     // Set Database into "nonchecking Foreign Keys"
     $em = $this->getDoctrine()->getManager();
     $em->getConnection()->exec("SET FOREIGN_KEY_CHECKS=0;");
     // Create the workflow
     $workflow = new Workflow($csvReader);
     if ($workflow === false) {
         die("Can't create workflow {$filename}");
     }
     $curEntityClass = CSVTypes::getEntityClass($curType);
     $writer = new DoctrineWriter($em, $curEntityClass);
     $writer->setTruncate(false);
     $entityMetadata = $em->getClassMetadata($curEntityClass);
     $entityMetadata->setIdGeneratorType(\Doctrine\ORM\Mapping\ClassMetadata::GENERATOR_TYPE_AUTO);
     // $entityMetadata->setIdGeneratorType(Doctrine\ORM\Mapping\::GENERATOR_TYPE_NONE);
     $workflow->addWriter($writer);
     $workflow->process();
     // RESetting Database Check Status
     $em->getConnection()->exec("SET FOREIGN_KEY_CHECKS=1;");
     // After successfully import, some files need special treatment --> Reset some DB fields
     /* if ($curType==CSVTypes::STOCK) {
          $q=$em->createQuery("UPDATE AdminAdminBundle:Product s
                            SET s.description = false");
            $q->execute();
        }*/
     // var_dump($workflow);
     return $this->render('SuppliercheckAdminBundle:Default:csv_import.html.twig');
 }
 /**
  * [CSV] Relatório de Softwares Inventariados gerado à partir dos filtros informados
  */
 public function desativadosRelatorioCsvAction(Request $request)
 {
     $logger = $this->get('logger');
     $rede = $request->get('teIpRede');
     if (is_array($rede)) {
         $rede = implode(',', $rede);
     }
     $software = $request->get('idSoftware');
     if (is_array($software)) {
         $software = implode(',', $software);
     }
     $local = $request->get('idLocal');
     if (is_array($local)) {
         $local = implode(',', $local);
     }
     // Adiciona rede à lista de filtros se for fornecido
     if (!empty($rede)) {
         $filtros['redes'] = $rede;
     }
     // Adiciona local à lista de filtros se for fornecido
     if (!empty($local)) {
         $filtros['local'] = $local;
     }
     // Adiciona Software à lista de filtros se for fornecido
     if (!empty($software)) {
         $filtros['softwares'] = $software;
     }
     $dados = $this->getDoctrine()->getRepository('CacicCommonBundle:ComputadorColeta')->gerarRelatorioSoftwaresDesativados($filtros);
     $locale = $request->getLocale();
     // Gera cabeçalho
     $cabecalho = array();
     foreach ($dados as $elm) {
         array_push($cabecalho, array_keys($elm));
         break;
     }
     // Gera CSV
     $reader = new ArrayReader(array_merge($cabecalho, $dados));
     // Create the workflow from the reader
     $workflow = new Workflow($reader);
     // Add the writer to the workflow
     $tmpfile = tempnam(sys_get_temp_dir(), "SoftwareDesativado.csv");
     $file = new \SplFileObject($tmpfile, 'w');
     $writer = new CsvWriter($file);
     $workflow->addWriter($writer);
     // Process the workflow
     $workflow->process();
     // Retorna o arquivo
     $response = new BinaryFileResponse($tmpfile);
     $response->headers->set('Content-Type', 'text/csv');
     $response->headers->set('Content-Disposition', "attachment; filename=SoftwareDesativado.csv");
     $response->headers->set('Content-Transfer-Encoding', 'binary');
     return $response;
 }
Example #19
0
 public function testExceptionInterfaceThrownFromWriterIsCaught()
 {
     $originalData = array(array('foo' => 'bar'));
     $reader = new ArrayReader($originalData);
     $array = array();
     $writer = $this->getMock('Ddeboer\\DataImport\\Writer\\ArrayWriter', array(), array(&$array));
     $exception = new SourceNotFoundException("Log me!");
     $writer->expects($this->once())->method('writeItem')->with($originalData[0])->will($this->throwException($exception));
     $logger = $this->getMock('Psr\\Log\\LoggerInterface');
     $logger->expects($this->once())->method('error')->with($exception->getMessage());
     $workflow = new Workflow($reader, $logger);
     $workflow->setSkipItemOnFailure(true);
     $workflow->addWriter($writer);
     $workflow->process();
 }
 /**
  * CSV do usuário logado por computador
  *
  * @param Request $request
  * @param $idComputador
  * @return BinaryFileResponse
  * @throws \Ddeboer\DataImport\Exception\ExceptionInterface
  * @throws \Exception
  */
 public function logUsuarioCsvAction(Request $request, $idComputador)
 {
     $em = $this->getDoctrine()->getManager();
     $locale = $request->getLocale();
     $dataInicio = $request->get('dataInicio');
     $dataFim = $request->get('dataFim');
     $dados = $em->getRepository("CacicCommonBundle:LogUserLogado")->computadorData($idComputador, $dataInicio, $dataFim)->getArrayResult();
     // Gera CSV
     $reader = new ArrayReader($dados);
     // Create the workflow from the reader
     $workflow = new Workflow($reader);
     $workflow->addValueConverter("reader", new CharsetValueConverter('UTF-8', $reader));
     $converter = new CallbackValueConverter(function ($input) {
         return $input->format('d/m/Y H:m:s');
     });
     $workflow->addValueConverter('data', $converter);
     // Add the writer to the workflow
     $tmpfile = tempnam(sys_get_temp_dir(), 'Computadores-lista');
     $file = new \SplFileObject($tmpfile, 'w');
     $writer = new CsvWriter($file);
     $writer->writeItem(array('idLogAcesso', 'Data/Hora', 'Usuário'));
     $workflow->addWriter($writer);
     // Process the workflow
     $workflow->process();
     // Retorna o arquivo
     $response = new BinaryFileResponse($tmpfile);
     $response->headers->set('Content-Type', 'text/csv');
     $response->headers->set('Content-Disposition', 'attachment; filename="Log-Acesso-' . $idComputador . '.csv"');
     $response->headers->set('Content-Transfer-Encoding', 'binary');
     return $response;
 }
    /**
     * @return \Ddeboer\DataImport\Result
     * @throws \Ddeboer\DataImport\Exception\ExceptionInterface
     * @throws \Exception
     */
    public function processData()
    {
        $workflow = new Workflow($this->reader);
        $output   = new ConsoleOutput();
        // Don’t import the non-metadata
        $filter = new Filter\CallbackFilter(function ($row) {
            if (is_numeric($row['reg_id'])) {
                return true;
            }
            if ( ! trim($row['reg_id'])) {
                foreach ($row as $item) {
                    if ( ! is_array($item)) {
                        if (trim($item)) {
                            return true;
                        }
                    } else {
                        foreach ($item as $foo) {
                            if (trim($foo)) {
                                return true;
                            }
                        }
                    }
                }
            }

            return false;
        });

        $trimConverter = new CallbackItemConverter(function ($row) {
            foreach ($row as $key => $value) {
                $row[$key] = trim($row[$key]);
            }

            return $row;
        });

        $lexicalConverter = new CallbackItemConverter(function ($row) {
            foreach ($row as $key => $value) {
                if (isset( $this->prolog['columns'][$key]['id'] ) and $this->prolog['columns'][$key]['id'] == 27) {
                    $lang = $this->prolog['columns'][$key]['lang'];
                    //check for existing language suffix
                    if ($value and ! preg_match("/\\." . $lang . "$/u", $value)) {
                        $row[$key] = $value . "." . $lang;
                    }
                }
            }

            return $row;
        });

        $typeConverter = new MappingValueConverter([
                                                       'rdfs:class'    => 'class',
                                                       'rdfs:property' => 'property',
                                                       'class'         => 'class',
                                                       'property'      => 'property',
                                                       'Class'         => 'class',
                                                       'Property'      => 'property',
                                                       'subclass'      => 'class',
                                                       'subproperty'   => 'property',
                                                       ''              => '',
                                                   ]);

        $vocabWriter  = new Writer\CallbackWriter(function ($row) {
            $this->setPrologColumns();

            //todo: $row[59] (status) and $row[62] (uri) sre hardcoded but the array key should be set somewhere globally
            if ( ! isset( $row[59] )) {
                $row[59] = $this->prolog['defaults']['statusId'];
            }
            $rowStatus = $row[59];
            $language  = $this->prolog['defaults']['lang'];

            foreach ($row as $key => &$element) {
                $this->updateRowUris($key, $element);
            }

            $uri      = $this->getFqn($row[62]);
            $property = null;

            if ( ! empty( $row['reg_id'] )) {
                $property = \ConceptPeer::retrieveByPK($row['reg_id']);
            } else {
                //check for an existing property by uri
                /** @var \Concept $property */
                $property = \ConceptPeer::getConceptByUri($uri);
            }

            //even if we found a property, we kill it if it's in a different schema than we're populating
            if ($property and $property->getVocabularyId() !== $this->vocabId) {
                //todo: we should log this event
                unset( $property );
            }

            if (empty( $property )) { //it's a new property
                $property = new \Concept();
                $property->setVocabularyId($this->vocabId);
                $property->setCreatedUserId($this->userId);
                $property->setUpdatedUserId($this->userId);
                $property->setStatusId($rowStatus);
                $property->setLanguage($language);
                $property->setUri($uri);
                $property->save();
            }

            unset( $row['reg_id'] );

            if ($property) {
                //        if (8 == $rowStatus) {
//          //it's been deprecated and we don't do anything else
//          $property->setStatusId($rowStatus);
//          $this->updateElement($element, $dbElement, $property);
//        } else {
                $dbElements = $property->getElementsForImport($this->profileProperties);
                foreach ($dbElements as $key => $dbElement) {
                    /** @var string | array $rowElement */
                    $rowElement = isset( $row[$key] ) ? $row[$key] : null;
                    if (is_array($rowElement)) {
                        foreach ($rowElement as $elementKey => &$element) {
                            if ($this->updateConceptProperty($element, $dbElement, $property)) {
                                unset( $rowElement[$elementKey] );
                            }
                        }
                    } else {
                        if ($this->updateConceptProperty($rowElement, $dbElement, $property)) {
                            unset( $row[$key] );
                        }
                    }
                }
                foreach ($row as $key => $value) {
                    $dbElement = isset( $dbElements[$key] ) ? $dbElements[$key] : null;
                    if ( ! empty( $this->prolog['columns'][$key]['property'] )) {
                        $profileProperty = $this->prolog['columns'][$key]['property'];
                        if (is_array($value)) {
                            foreach ($value as &$oneValue) {
                                $language = $this->prolog['columns'][$key]['lang'][0];
                                $this->upsertConceptFromRow($dbElement,
                                                            $oneValue,
                                                            $rowStatus,
                                                            $property,
                                                            $profileProperty,
                                                            $language,
                                                            $key);
                            }
                        } else {
                            $language = $this->prolog['columns'][$key]['lang'];
                            $this->upsertConceptFromRow($dbElement,
                                                        $value,
                                                        $rowStatus,
                                                        $property,
                                                        $profileProperty,
                                                        $language,
                                                        $key);
                        }
                    }
                }
            }

            $property->setUri($uri);
            $property->setStatusId($rowStatus);

            $affectedRows = $property->save();

            if (empty( $property->getPrefLabel() )) {
                $prefLabel = \ConceptPropertyPeer::lookupProperty($property->getId(),
                                                                  19,
                                                                  $this->prolog['defaults']['lang']);
                if ( ! empty( $prefLabel )) {
                    $property->setPrefLabel($prefLabel->getObject());
                    $property->setPrefLabelId($prefLabel->getId());
                    $property->setLanguage($this->prolog['defaults']['lang']);
                    $property->save();
                }
            }

            return;

            //**************
            // CRUFT ALERT
            // The rest of this is never run!!
            //**************

            //build an array of references
            $newElements  = [ ];
            $newElements2 = [ ];
            if ( ! isset( $row['status'] )) {
                $row[14] = $this->prolog['defaults']['statusId'];
            }
            foreach ($row as $key => $element) {
                //skip it there's no property id
                $columnKey = $this->prolog['columns'][$key];
                if ( ! $columnKey['id']) {
                    continue;
                }

                if ( ! empty( $columnKey['type'] ) and $this->useCuries) {
                    $element = $this->getFqn($element);
                }

                $key2               = md5(strval($columnKey['id']) . strval($columnKey['lang']) . $element);
                $newElements[$key2] = [ ];
                $newElements[$key2] += $columnKey;
                $newElements[$key2]['val'] = $element;
                /** @var \ProfileProperty $profileProperty */
                if (isset( $columnKey['property'] )) {
                    $profileProperty = $columnKey['property'];
                    $var             = [
                        'matchkey' => $key2,
                        'val'      => $newElements[$key2],
                    ];
                    if (isset( $profileProperty ) and $profileProperty->getHasLanguage()) {
                        $newElements2[$columnKey['id']][$columnKey['lang']][] = $var;
                    } else {
                        $newElements2[$columnKey['id']][] = $var;
                    }
                }
            }
            if ( ! empty( $row['reg_id'] )) {
                $property = \SchemaPropertyPeer::retrieveByPK($row['reg_id']);
                if ($property) {
                    $dbElements  = $property->getSchemaPropertyElementsRelatedBySchemaPropertyIdJoinProfileProperty();
                    $dbElements2 = [ ];
                    /** @var \SchemaPropertyElement $dbElement */
                    foreach ($dbElements as $dbElement) {
                        if ($dbElement->getProfileProperty()->getHasLanguage()) {
                            $dbElements2[$dbElement->getProfilePropertyId()][$dbElement->getLanguage()][] = &$dbElement;
                        } else {
                            $dbElements2[$dbElement->getProfilePropertyId()][] = &$dbElement;
                        }
                    }

                    /** @var \SchemaPropertyElement $element */
                    foreach ($dbElements as $element) {
                        $language          = $element->getLanguage();
                        $profilePropertyId = $element->getProfilePropertyId();
                        $key               = md5(strval($profilePropertyId) . strval($language) . $element->getObject());
                        //if the newelement key matches then
                        if (isset( $newElements[$key] )) {
                            if ($element->getProfileProperty()->getHasLanguage()) {
                                $newElements2Array = $newElements2[$profilePropertyId][$language];
                            } else {
                                $newElements2Array = $newElements2[$profilePropertyId];
                            }
                            $count = count($newElements2Array);
                            for ($I = 0; $I < $count; $I++) {
                                if ($newElements2Array[$I]['matchkey'] == $key) {
                                    unset( $newElements2Array[$I] );
                                }
                            }
                            unset( $newElements[$key] );
                            $element->importStatus = 'match';
                            continue;
                        } else {
                            if ($element->getProfileProperty()->getHasLanguage()) {
                                if (isset( $newElements2[$profilePropertyId][$language] )) {
                                    $count = count($newElements2[$profilePropertyId][$language]);
                                    for ($I = 0; $I < $count; $I++) {
                                        if ($newElements2[$profilePropertyId][$language][$I]['val']['val'] == $element->getObject()) {
                                            unset( $newElements2[$profilePropertyId][$language][$I] );
                                            $element->importStatus = 'match';
                                            if ( ! count($newElements2[$profilePropertyId][$language])) {
                                                unset( $newElements2[$profilePropertyId][$language] );
                                            }
                                            continue;
                                        }
                                    }
                                }
                            } else {
                                //compare the old values with the new with the same key
                                $count = count($newElements2[$profilePropertyId]);
                                for ($I = 0; $I < $count; $I++) {
                                    if (isset( $newElements2[$profilePropertyId][$I] )) {
                                        if ($newElements2[$profilePropertyId][$I]['val']['val'] == $element->getObject()) {
                                            unset( $newElements2[$profilePropertyId][$I] );
                                            $element->importStatus = 'match';
                                            continue;
                                        }
                                    }
                                }
                            }
                            //if the key matches then
                            //if the value matches
                            //delete the newElement
                            //else the value doesn't match
                            //if the newElement value is empty
                            //delete the dbElement
                        }

                        $element->matchKey = $key;
                    }
                    //update the property values
                    $property->save();
                } else {
                    //there's no existing property an we have to create a new one
                    $property = new \SchemaProperty();
                }
                foreach ($newElements as $key => $newElement) {
                    if ( ! empty( $newElement['id'] ) and ! isset( $oldElements[$key] )) {
                        $profileProperty = $newElement['property'];
                        //walk the old elements looking for a match on predicate + language
                        /** @var \SchemaPropertyElement[] $oldElement */
                        foreach ($dbElements as $oldElement) {
                            /** @var \SchemaPropertyElement $oldOne */
                            $oldOne = &$oldElement['element'];
                            if ($newElement['id'] == $oldOne->getProfilePropertyId()) {
                                /** @var \ProfileProperty $profileProperty */
                                if (( $profileProperty->getHasLanguage() and $newElement['lang'] == $oldOne->getLanguage() ) or ! $profileProperty->getHasLanguage()) {
                                    if ( ! empty( $newElement['val'] )) {
                                        $oldOne->setObject($newElement['val']);
                                        $oldOne->setUpdatedUserId($this->userId);
                                        $oldOne->setStatusId($row['status']);
                                        //$oldOne->save();
                                        $oldElement['status'] = "updated";
                                    } else {
                                        $oldOne->delete();
                                        $oldElement['status'] = "deleted";
                                    }
                                    //update the property value
                                    if ($profileProperty->getIsInForm()) {
                                        $this->setPropertyValue($newElement['val'],
                                                                $property,
                                                                $profileProperty->getName(),
                                                                ! $profileProperty->getIsObjectProp());
                                    }
                                    break;
                                }
                            }
                        }
                        //we looked through them all, add a new one
                        if ( ! empty( $newElement['val'] )) {
                            $addMe = new \SchemaPropertyElement();
                            $addMe->setObject($newElement['val']);
                            //$addMe->setSchemaPropertyRelatedBySchemaPropertyId($property);
                            $addMe->setCreatedUserId($this->userId);
                            $addMe->setUpdatedUserId($this->userId);
                            $addMe->setLanguage($newElement['lang']);
                            $addMe->setProfilePropertyId($newElement['id']);
                            $addMe->setStatusId($row['status']);
                            $addMe->importId = $this->importId;
                            //$addMe->save();
                            $property->addSchemaPropertyElementRelatedBySchemaPropertyId($addMe);
                            //update the property value
                            if ($profileProperty->getIsInForm()) {
                                $this->setPropertyValue($newElement['val'],
                                                        $property,
                                                        $profileProperty->getName(),
                                                        ! $profileProperty->getIsObjectProp());
                            }
                        }
                    }
                }
                //update the property
                if ($property) {
                    $property->setStatusId($row['status']);
                    $property->save();
                }
            }
            //var_dump($row);
        });
        $schemaWriter = new Writer\CallbackWriter(function ($row) {
            $this->setPrologColumns();

            if ( ! isset( $row[14] )) {
                $row[14] = $this->prolog['defaults']['statusId'];
            }
            $rowStatus = $row[14];
            $language  = $this->prolog['defaults']['lang'];

            foreach ($row as $key => &$element) {
                $this->updateRowUris($key, $element);
            }

            $uri      = $row[13];
            $property = null;
            $schemaId = $this->vocabId;

            if ( ! empty( $row['reg_id'] )) {
                $property = \SchemaPropertyPeer::retrieveByPK($row['reg_id']);
            } else {
                //check for an existing property by uri
                /** @var \SchemaProperty $property */
                $property = \SchemaPropertyPeer::retrieveByUri($uri);
                if ($property) {
                    $schemaId = $property->getSchemaId();
                }
            }

            //even if we found a property, we kill it if it's in a different schema than we're populating
            if ($property and $schemaId !== $this->vocabId) {
                //todo: we should log this event
                unset( $property );
            }

            if (empty( $property )) { //it's a new property
                $property = new \SchemaProperty();
                $property->setSchemaId($this->vocabId);
                $property->setCreatedUserId($this->userId);
                $property->setUpdatedUserId($this->userId);
                $property->setStatusId($rowStatus);
                $property->setLanguage($language);
                $property->save();
            }

            unset( $row['reg_id'] );

            if ($property) {
                //        if (8 == $rowStatus) {
//          //it's been deprecated and we don't do anything else
//          $property->setStatusId($rowStatus);
//          $this->updateElement($element, $dbElement, $property);
//        } else {
                $dbElements = $property->getElementsForImport($this->profileProperties);
                foreach ($dbElements as $key => $dbElement) {
                    /** @var string | array $rowElement */
                    $rowElement = isset( $row[$key] ) ? $row[$key] : null;
                    if (is_array($rowElement)) {
                        foreach ($rowElement as $elementKey => &$element) {
                            if ($this->updateElement($element, $dbElement, $property)) {
                                unset( $rowElement[$elementKey] );
                            }
                        }
                    } else {
                        if ($this->updateElement($rowElement, $dbElement, $property)) {
                            unset( $row[$key] );
                        }
                    }
                }
                foreach ($row as $key => $value) {
                    $dbElement = isset( $dbElements[$key] ) ? $dbElements[$key] : null;
                    if ( ! empty( $this->prolog['columns'][$key]['property'] )) {
                        $profileProperty = $this->prolog['columns'][$key]['property'];
                        if (is_array($value)) {
                            foreach ($value as &$oneValue) {
                                $language = $this->prolog['columns'][$key]['lang'][0];
                                $this->upsertElementFromRow($dbElement,
                                                            $oneValue,
                                                            $rowStatus,
                                                            $property,
                                                            $profileProperty,
                                                            $language,
                                                            $key);
                            }
                        } else {
                            $language = $this->prolog['columns'][$key]['lang'];
                            $this->upsertElementFromRow($dbElement,
                                                        $value,
                                                        $rowStatus,
                                                        $property,
                                                        $profileProperty,
                                                        $language,
                                                        $key);
                        }
                        if ($key == 'parent_class' and strtolower($property->getType()) == 'class' and $row[$key] != $property->getParentUri()) {
                            $property->setParentUri($row[$key]);
                            //we'll set this later
                            $property->setIsSubpropertyOf(null);
                        }
                        if ($key == 'parent_property' and strtolower($property->getType()) == 'property' and $row[$key] != $property->getParentUri()) {
                            $property->setParentUri($row[$key]);
                            //we'll set this later
                            $property->setIsSubpropertyOf(null);
                        }
                    }
                }
            }

            $affectedRows = $property->save();

//      }

            return;
            //build an array of references
            $newElements  = [ ];
            $newElements2 = [ ];
            if ( ! isset( $row['status'] )) {
                $row[14] = $this->prolog['defaults']['statusId'];
            }
            foreach ($row as $key => $element) {
                //skip it there's no property id
                $columnKey = $this->prolog['columns'][$key];
                if ( ! $columnKey['id']) {
                    continue;
                }

                if ( ! empty( $columnKey['type'] ) and $this->useCuries) {
                    $element = $this->getFqn($element);
                }

                $key2               = md5(strval($columnKey['id']) . strval($columnKey['lang']) . $element);
                $newElements[$key2] = [ ];
                $newElements[$key2] += $columnKey;
                $newElements[$key2]['val'] = $element;
                /** @var \ProfileProperty $profileProperty */
                if (isset( $columnKey['property'] )) {
                    $profileProperty = $columnKey['property'];
                    $var             = [
                        'matchkey' => $key2,
                        'val'      => $newElements[$key2],
                    ];
                    if (isset( $profileProperty ) and $profileProperty->getHasLanguage()) {
                        $newElements2[$columnKey['id']][$columnKey['lang']][] = $var;
                    } else {
                        $newElements2[$columnKey['id']][] = $var;
                    }
                }
            }
            if ( ! empty( $row['reg_id'] )) {
                $property = \SchemaPropertyPeer::retrieveByPK($row['reg_id']);
                if ($property) {
                    $dbElements  = $property->getSchemaPropertyElementsRelatedBySchemaPropertyIdJoinProfileProperty();
                    $dbElements2 = [ ];
                    /** @var \SchemaPropertyElement $dbElement */
                    foreach ($dbElements as $dbElement) {
                        if ($dbElement->getProfileProperty()->getHasLanguage()) {
                            $dbElements2[$dbElement->getProfilePropertyId()][$dbElement->getLanguage()][] = &$dbElement;
                        } else {
                            $dbElements2[$dbElement->getProfilePropertyId()][] = &$dbElement;
                        }
                    }

                    /** @var \SchemaPropertyElement $element */
                    foreach ($dbElements as $element) {
                        $language          = $element->getLanguage();
                        $profilePropertyId = $element->getProfilePropertyId();
                        $key               = md5(strval($profilePropertyId) . strval($language) . $element->getObject());
                        //if the newelement key matches then
                        if (isset( $newElements[$key] )) {
                            if ($element->getProfileProperty()->getHasLanguage()) {
                                $newElements2Array = $newElements2[$profilePropertyId][$language];
                            } else {
                                $newElements2Array = $newElements2[$profilePropertyId];
                            }
                            $count = count($newElements2Array);
                            for ($I = 0; $I < $count; $I++) {
                                if ($newElements2Array[$I]['matchkey'] == $key) {
                                    unset( $newElements2Array[$I] );
                                }
                            }
                            unset( $newElements[$key] );
                            $element->importStatus = 'match';
                            continue;
                        } else {
                            if ($element->getProfileProperty()->getHasLanguage()) {
                                if (isset( $newElements2[$profilePropertyId][$language] )) {
                                    $count = count($newElements2[$profilePropertyId][$language]);
                                    for ($I = 0; $I < $count; $I++) {
                                        if ($newElements2[$profilePropertyId][$language][$I]['val']['val'] == $element->getObject()) {
                                            unset( $newElements2[$profilePropertyId][$language][$I] );
                                            $element->importStatus = 'match';
                                            if ( ! count($newElements2[$profilePropertyId][$language])) {
                                                unset( $newElements2[$profilePropertyId][$language] );
                                            }
                                            continue;
                                        }
                                    }
                                }
                            } else {
                                //compare the old values with the new with the same key
                                $count = count($newElements2[$profilePropertyId]);
                                for ($I = 0; $I < $count; $I++) {
                                    if (isset( $newElements2[$profilePropertyId][$I] )) {
                                        if ($newElements2[$profilePropertyId][$I]['val']['val'] == $element->getObject()) {
                                            unset( $newElements2[$profilePropertyId][$I] );
                                            $element->importStatus = 'match';
                                            continue;
                                        }
                                    }
                                }
                            }
                            //if the key matches then
                            //if the value matches
                            //delete the newElement
                            //else the value doesn't match
                            //if the newElement value is empty
                            //delete the dbElement
                        }

                        $element->matchKey = $key;
                    }
                    //update the property values
                    $property->save();
                } else {
                    //there's no existing property an we have to create a new one
                    $property = new \SchemaProperty();
                }
                foreach ($newElements as $key => $newElement) {
                    if ( ! empty( $newElement['id'] ) and ! isset( $oldElements[$key] )) {
                        $profileProperty = $newElement['property'];
                        //walk the old elements looking for a match on predicate + language
                        /** @var \SchemaPropertyElement[] $oldElement */
                        foreach ($dbElements as $oldElement) {
                            /** @var \SchemaPropertyElement $oldOne */
                            $oldOne = &$oldElement['element'];
                            if ($newElement['id'] == $oldOne->getProfilePropertyId()) {
                                /** @var \ProfileProperty $profileProperty */
                                if (( $profileProperty->getHasLanguage() and $newElement['lang'] == $oldOne->getLanguage() ) or ! $profileProperty->getHasLanguage()) {
                                    if ( ! empty( $newElement['val'] )) {
                                        $oldOne->setObject($newElement['val']);
                                        $oldOne->setUpdatedUserId($this->userId);
                                        $oldOne->setStatusId($row['status']);
                                        //$oldOne->save();
                                        $oldElement['status'] = "updated";
                                    } else {
                                        $oldOne->delete();
                                        $oldElement['status'] = "deleted";
                                    }
                                    //update the property value
                                    if ($profileProperty->getIsInForm()) {
                                        $this->setPropertyValue($newElement['val'],
                                                                $property,
                                                                $profileProperty->getName(),
                                                                ! $profileProperty->getIsObjectProp());
                                    }
                                    break;
                                }
                            }
                        }
                        //we looked through them all, add a new one
                        if ( ! empty( $newElement['val'] )) {
                            $addMe = new \SchemaPropertyElement();
                            $addMe->setObject($newElement['val']);
                            //$addMe->setSchemaPropertyRelatedBySchemaPropertyId($property);
                            $addMe->setCreatedUserId($this->userId);
                            $addMe->setUpdatedUserId($this->userId);
                            $addMe->setLanguage($newElement['lang']);
                            $addMe->setProfilePropertyId($newElement['id']);
                            $addMe->setStatusId($row['status']);
                            $addMe->importId = $this->importId;
                            //$addMe->save();
                            $property->addSchemaPropertyElementRelatedBySchemaPropertyId($addMe);
                            //update the property value
                            if ($profileProperty->getIsInForm()) {
                                $this->setPropertyValue($newElement['val'],
                                                        $property,
                                                        $profileProperty->getName(),
                                                        ! $profileProperty->getIsObjectProp());
                            }
                        }
                    }
                }
                //update the property
                if ($property) {
                    $property->setStatusId($row['status']);
                    $property->save();
                }
            }
            //var_dump($row);
        });

        $workflow->addItemConverter($this->mapping);
        $workflow->addFilter($filter);
        $workflow->addItemConverter($trimConverter);
        $workflow->addItemConverter($lexicalConverter);
        $workflow->addWriter(new Writer\ConsoleProgressWriter($output, $this->reader));
        $workflow->addValueConverter("4", $typeConverter);
        //add a database writer
        if ('schema' == $this->type) {
            $workflow->addWriter($schemaWriter);
        } else {
            $workflow->addWriter($vocabWriter);
        }
        /** @todo we need to make a second pass through to delete missing rows
         * for each schemaproperty in the database
         *   match to a row in the csv
         *   if the row value is empty and $this->deleteMissing
         *     delete the entire schemaproperty
         */

        $workResults               = $workflow->process();
        $this->DataWorkflowResults = $workResults;

        /** @TODO need to make a second pass through to lookup and set $element->related_schema_property_id */
        $this->processParents($this->vocabId);
        //use the prolog to configure namespaces, look up correct resources in the database
        //store the row number of the first non-meta line

        return $workResults;
    }
 public function importCsv($daysAgo, $analyzeCache)
 {
     if (!$analyzeCache) {
         $this->downloadReports($daysAgo);
     }
     $files = glob($this->download_directory . '*');
     // get all file names
     $shadow_server_csv_rows = array();
     foreach ($files as $file) {
         // iterate files
         if (is_file($file)) {
             $csv_file = new \SplFileObject($file);
             $reader = new CsvReader($csv_file);
             $reader->setHeaderRowNumber(0);
             foreach ($reader as $row) {
                 $header = array_keys($row);
                 $array_reader = new ArrayReader(array($row));
                 $workflow = new Workflow($array_reader);
                 $writer = new CsvWriter();
                 $shadow_server_report_evidence = '/tmp/' . uniqid('shadow_server_report_evidence') . ".csv";
                 touch($shadow_server_report_evidence);
                 chmod($shadow_server_report_evidence, 0777);
                 $writer->setStream(fopen($shadow_server_report_evidence, 'w'));
                 $writer->writeItem($header);
                 $workflow->addWriter($writer);
                 $workflow->process();
                 $reportType = $this->shadow_server_report_type_factory->getReportTypeFromCsvRow($row, $file, $shadow_server_report_evidence);
                 if ($reportType) {
                     $shadow_server_csv_rows[] = $reportType;
                 }
             }
         }
     }
     return $shadow_server_csv_rows;
 }
 public function desativadosGeralCsvAction(Request $request)
 {
     $locale = $request->getLocale();
     $logger = $this->get('logger');
     $filtros = $request->request->all();
     $dados = $this->getDoctrine()->getRepository('CacicCommonBundle:ComputadorColeta')->gerarRelatorioDesativadosCsv($filtros);
     // Gera CSV
     $reader = new ArrayReader($dados);
     // Create the workflow from the reader
     $workflow = new Workflow($reader);
     // As you can see, the first names are not capitalized correctly. Let's fix
     // that with a value converter:
     $converter = new CallbackValueConverter(function ($input) {
         return $input->format('d/m/Y H:m:s');
     });
     //$workflow->addValueConverter('dataExclusao', $converter);
     $workflow->addValueConverter("reader", new CharsetValueConverter('UTF-8', $reader));
     // Add the writer to the workflow
     $tmpfile = tempnam(sys_get_temp_dir(), 'Computadores-Subredes');
     $file = new \SplFileObject($tmpfile, 'w');
     $writer = new CsvWriter($file);
     $writer->writeItem(array('ID do Computador', 'Computador', 'MAC Address', 'Endereço IP', 'SO', 'Local', 'Subrede', 'IP da Subrede', 'Classe de Coleta', 'Propriedade', 'Valor', 'Data e Hora da Remoção'));
     $workflow->addWriter($writer);
     // Process the workflow
     $workflow->process();
     // Retorna o arquivo
     $response = new BinaryFileResponse($tmpfile);
     $response->headers->set('Content-Type', 'text/csv');
     $response->headers->set('Content-Disposition', 'attachment; filename="WMI-sem-coleta.csv"');
     $response->headers->set('Content-Transfer-Encoding', 'binary');
     return $response;
 }
Example #24
0
 /**
  * Generate a CSV file
  *
  * @Route("/detalhado/csv", name="printer_csv_detalhado")
  *
  */
 public function csvDetalhadoAction(Request $request)
 {
     ini_set('memory_limit', '1024M');
     gc_enable();
     $em = $this->getDoctrine()->getManager();
     $form = $request->query->get('form');
     if ($form) {
         $start = new \DateTime($form['startDate']);
         $start = $start->format('U');
         $end = new \DateTime($form['endDate']);
         $end->setTime('23', '59', '59');
         $end = $end->format('U');
         $this->get('logger')->debug("Relatório CSV Detalhado. Início = " . $form['startDate'] . " Fim = " . $form['endDate']);
     }
     $start = isset($start) ? $start : time() - 60 * 60 * 24 * 30;
     $end = isset($end) ? $end : time();
     $printers = $em->getRepository('CocarBundle:PrinterCounter')->relatorioCsvGeralDetalhado($start, $end);
     // Gera cabeçalho
     $cabecalho = array();
     foreach ($printers as $elm) {
         array_push($cabecalho, array_keys($elm));
         break;
     }
     // Adiciona contagem no cabeçalho
     array_push($cabecalho[0], 'totalPrints');
     // Gera CSV
     $reader = new ArrayReader(array_merge($cabecalho, $printers));
     // Gera CSV
     //$reader = new ArrayReader($printers);
     // Create the workflow from the reader
     $workflow = new Workflow($reader);
     // Contador geral das impressorasa
     $converter = new CallbackItemConverter(function ($item) {
         if (array_key_exists('printsEnd', $item) && array_key_exists('printsStart', $item)) {
             $item['totalPrints'] = $item['printsEnd'] - $item['printsStart'];
         } else {
             $item['totalPrints'] = null;
         }
         return $item;
     });
     $workflow->addItemConverter($converter);
     // As you can see, the first names are not capitalized correctly. Let's fix
     // that with a value converter:
     $converter = new CallbackValueConverter(function ($input) {
         return date('d/m/Y', $input);
     });
     $workflow->addValueConverter('endDate', $converter);
     $workflow->addValueConverter('startDate', $converter);
     // Add the writer to the workflow
     $tmpfile = tempnam(sys_get_temp_dir(), 'impressoras');
     $file = new \SplFileObject($tmpfile, 'w');
     $writer = new CsvWriter($file);
     $workflow->addWriter($writer);
     // Process the workflow
     $workflow->process();
     // Retorna o arquivo
     $response = new BinaryFileResponse($tmpfile);
     $response->headers->set('Content-Type', 'text/csv');
     $response->headers->set('Content-Disposition', 'attachment; filename="impressoras.csv"');
     $response->headers->set('Content-Transfer-Encoding', 'binary');
     return $response;
 }
Example #25
0
 public function consolidadoCsvAction(Request $request)
 {
     $em = $this->getDoctrine()->getManager();
     $locale = $request->getLocale();
     $so_lista = $em->getRepository('CacicCommonBundle:Computador')->countPorSOCsv();
     // Gera CSV
     $reader = new ArrayReader($so_lista);
     // Create the workflow from the reader
     $workflow = new Workflow($reader);
     $workflow->addValueConverter("reader", new CharsetValueConverter('UTF-8', $reader));
     $converter = new CallbackValueConverter(function ($input) {
         return $input->format('d/m/Y H:m:s');
     });
     $workflow->addValueConverter('dtHrUltAcesso', $converter);
     // Add the writer to the workflow
     $tmpfile = tempnam(sys_get_temp_dir(), 'Computadores-lista');
     $file = new \SplFileObject($tmpfile, 'w');
     $writer = new CsvWriter($file);
     $writer->writeItem(array('Sistema Operacional', 'Total de Estações'));
     $workflow->addWriter($writer);
     // Process the workflow
     $workflow->process();
     // Retorna o arquivo
     $response = new BinaryFileResponse($tmpfile);
     $response->headers->set('Content-Type', 'text/csv');
     $response->headers->set('Content-Disposition', 'attachment; filename="So-Consolidado.csv"');
     $response->headers->set('Content-Transfer-Encoding', 'binary');
     return $response;
 }
 public function usuarioCsvDinamicoAction(Request $request)
 {
     if ($request->isMethod('POST')) {
         $dataInicio = $request->get('dtAcaoInicio');
         $dataFim = $request->get('dtAcaoFim');
         $usuarioLogado = $request->get('usuarioLogado');
         $macCompDinamico = $request->get('macCompDinamico');
         $ipCompDinamico = $request->get('ipCompDinamico');
         /*
          * Verifica se existe filtro por data do CSV
          */
         if (empty($dataInicio)) {
             error_log("333333333333333333333333333333333333333");
             $semData = 'S';
             $dados = $this->getDoctrine()->getRepository('CacicCommonBundle:LogUserLogado')->gerarRelatorioUsuarioHistorico($usuarioLogado, $semData);
         } else {
             $semData = 'N';
             $dados = $this->getDoctrine()->getRepository('CacicCommonBundle:LogUserLogado')->gerarRelatorioUsuarioHistorico($usuarioLogado, $dataFim, $dataInicio, $semData, $macCompDinamico, $ipCompDinamico);
         }
     }
     // Gera CSV
     $reader = new ArrayReader($dados);
     // Create the workflow from the reader
     $workflow = new Workflow($reader);
     // As you can see, the first names are not capitalized correctly. Let's fix
     // that with a value converter:
     $converter = new CallbackValueConverter(function ($input) {
         return $input->format('d/m/Y H:m:s');
     });
     $workflow->addValueConverter('dtHrUltAcesso', $converter);
     $workflow->addValueConverter("reader", new CharsetValueConverter('UTF-8', $reader));
     // Add the writer to the workflow
     $tmpfile = tempnam(sys_get_temp_dir(), 'usuario_estatico_');
     $file = new \SplFileObject($tmpfile, 'w');
     $writer = new CsvWriter($file);
     if ($semData == 'S') {
         $writer->writeItem(array('Nome computador', 'Mac Address', 'IP computador', 'Local', 'Sub Rede', 'Usuário', 'Data', 'ID Computador'));
     } else {
         $writer->writeItem(array('Nome computador', 'Mac Address', 'IP computador', 'Local', 'Sub Rede', 'CPF Responsável', 'Data Pup-up', 'Usuário', 'Data', 'ID Computador'));
     }
     $workflow->addWriter($writer);
     // Process the workflow
     $workflow->process();
     // Gera data e adiciona no nome do arquivo
     $today = date("Ymd");
     $nameArquivo = "usuario_dinamico_" . $today . ".csv";
     // Retorna o arquivo
     $response = new BinaryFileResponse($tmpfile);
     $response->headers->set('Content-Type', 'text/csv');
     $response->headers->set('Content-Disposition', 'attachment; filename=' . $nameArquivo . '');
     $response->headers->set('Content-Transfer-Encoding', 'binary');
     return $response;
 }
Example #27
0
 /**
  * Gera CSV dos usuários cadastrados
  */
 public function csvAction()
 {
     $usuarios = $this->getDoctrine()->getRepository('CacicCommonBundle:Usuario')->csv();
     // Gera CSV
     $reader = new ArrayReader(array_merge($usuarios));
     // Create the workflow from the reader
     $workflow = new Workflow($reader);
     // Add the writer to the workflow
     $tmpfile = tempnam(sys_get_temp_dir(), "Usuarios.csv");
     $file = new \SplFileObject($tmpfile, 'w');
     $writer = new CsvWriter($file);
     $workflow->addWriter($writer);
     // Process the workflow
     $workflow->process();
     // Retorna o arquivo
     $response = new BinaryFileResponse($tmpfile);
     $response->headers->set('Content-Type', 'text/csv');
     $response->headers->set('Content-Disposition', "attachment; filename=Usuarios.csv");
     $response->headers->set('Content-Transfer-Encoding', 'binary');
     return $response;
 }