Пример #1
0
 /**
  * Runs task
  */
 protected function _run()
 {
     $this->_Process = new TaskProcess($this->_task['command'] . $this->_argsToString($this->_task['arguments']), $this->_task['path']);
     $this->_Process->setTimeout($this->_task['timeout']);
     try {
         $this->_Process->start(function ($type, $buffer) {
             if ('err' === $type) {
                 $this->_Shell->err($buffer);
                 $this->_task['stderr'] .= $buffer;
             } else {
                 $this->_Shell->out($buffer);
                 $this->_task['stdout'] .= $buffer;
             }
             $this->_TaskServer->updated($this->_task);
         });
         while ($this->_Process->isRunning()) {
             $this->_task['process_id'] = (int) $this->_Process->getPid();
             $this->_TaskServer->updateStatistics($this->_task);
             $this->_Process->checkTimeout();
             sleep(Configure::read('Task.checkInterval'));
             if ($this->_TaskServer->mustStop($this->_task['id'])) {
                 $this->_Process->stop(Configure::read('Task.stopTimeout'));
                 $this->_task['code'] = 143;
                 $this->_task['code_string'] = TaskProcess::$exitCodes[143];
                 return $this->_stopped(true);
             }
         }
         $this->_task['code'] = $this->_Process->getExitCode();
         $this->_task['code_string'] = $this->_Process->getExitCodeText();
     } catch (Exception $Exception) {
         $this->_task['code'] = 134;
         $this->_task['code_string'] = $Exception->getMessage();
     }
     $this->_stopped(false);
 }
 /**
  * {@inheritdoc}
  */
 public function importAction()
 {
     set_time_limit(1200);
     $this->getLockingAccessDenied();
     $import_counts = array();
     $messages = array();
     if (!empty($_FILES) && !empty($_FILES["inputFile"])) {
         $file = TMP_UPLOAD_PATH . '/' . $_FILES["inputFile"]["name"];
         $tmpFile = $_FILES["inputFile"]["tmp_name"];
         $inputFile = $_FILES['inputFile'];
         $error_counts = 0;
         if ($this->importFileValidate($inputFile)) {
             if (move_uploaded_file($tmpFile, $file)) {
                 $objReader = \PHPExcel_IOFactory::createReaderForFile($file);
                 if (get_class($objReader) == 'PHPExcel_Reader_CSV') {
                     unset($objReader);
                     $this->get('session')->setFlash('sonata_flash_error', $this->admin->trans('Fichier non lisible'));
                     return $this->render(':redirects:back.html.twig');
                 }
                 $_FILES = array();
                 //create fake process id
                 $pid = time();
                 $user = $this->get('security.context')->getToken()->getUser();
                 $kernel = $this->get('kernel');
                 $command = 'php ' . $kernel->getRootDir() . '/console clientoperationsbundle:import:excel ' . $user->getId() . ' ' . $this->client_id . ' application.sonata.admin.v01tva ' . $file . ' ' . $inputFile['name'] . ' ' . $this->getLocking() . ' ' . $this->_year . ' ' . $this->_month . ' ' . $pid . ' --env=' . $kernel->getEnvironment() . ' --no-debug ';
                 /* var_dump($command);
                   	exit; */
                 $process = new \Symfony\Component\Process\Process($command);
                 $process->setTimeout(3600);
                 $process->start();
                 $start = microtime(true);
                 while ($process->isRunning()) {
                     $total = microtime(true) - $start;
                     if ($total / 60 >= 2) {
                         // if process is too long (2 minutes)
                         //var_dump(($total/60));
                         $em = $this->getDoctrine()->getManager();
                         $importNotif = new ImportNotification();
                         $importNotif->setPid($pid)->setUser($user)->setClientId($this->client_id);
                         $em->persist($importNotif);
                         $em->flush();
                         $this->_hasImportErrors = true;
                         $this->get('session')->setFlash('sonata_flash_error', $this->admin->trans('There are too many data to be processed. We will just notify you once it\'s done. Check your email (' . $user->getEmail() . ') within few hours.'));
                         break;
                         return $this->render(':redirects:back.html.twig');
                     }
                 }
                 $output = unserialize($process->getOutput());
                 $messages = $output['messages'];
                 $import_counts = $output['import_counts'];
                 $error_counts = $output['error_counts'];
             }
         }
     }
     if (!empty($messages) || $error_counts) {
         $this->get('session')->setFlash('sonata_flash_info|raw', implode("<br/>", $messages));
     } else {
         $message = trim($this->get('session')->getFlash('sonata_flash_info|raw'));
         if ($message == '') {
             $this->get('session')->setFlash('sonata_flash_info|raw', $this->admin->trans('Imported : %count%', array('%count%' => 0)));
         } else {
             $this->get('session')->setFlash('sonata_flash_info|raw', $message);
         }
     }
     if (isset($import_counts['rows']['errors']) && !empty($import_counts['rows']['errors']) || $this->_hasImportErrors) {
         return $this->render(':redirects:back.html.twig');
     } else {
         return $this->redirect($this->generateUrl('rapprochement_index', array('client_id' => $this->client_id, 'month' => $this->_query_month, 'fromImport' => 1)));
     }
 }
Пример #3
0
 /**
  * @param string      $command
  * @param bool        $async
  * @param string|null $cwd
  *
  * @return \Symfony\Component\Process\Process
  */
 private static function _runProcess($command, $async = false, $cwd = null)
 {
     $process = new \Symfony\Component\Process\Process($command, $cwd);
     self::_log(sprintf('Running command: %s', $command));
     if ($async) {
         $process->start();
         sleep(1);
         if (!$process->isRunning()) {
             throw new RuntimeException(sprintf('Failed to start %s: %s', $command, $process->getErrorOutput()));
         }
     } else {
         $process->run();
         if (!$process->isSuccessful()) {
             throw new RuntimeException(sprintf('Failed to run %s: %s', $command, $process->getErrorOutput()));
         }
     }
     return $process;
 }
 public function clientAction()
 {
     set_time_limit(0);
     //ini_set('max_execution_time', 0);
     //ini_set('memory_limit', '256M');
     if ($_SERVER['REQUEST_METHOD'] == 'POST') {
         if (!empty($_FILES) && !empty($_FILES["inputFile"]["name"])) {
             $file = TMP_UPLOAD_PATH . '/' . str_replace(array(' ', '+', '(', ')'), '', $_FILES["inputFile"]["name"]);
             $tmpFile = $_FILES["inputFile"]["tmp_name"];
             $inputFile = $_FILES['inputFile'];
             if (move_uploaded_file($tmpFile, $file)) {
                 /* @var $objReader \PHPExcel_Reader_Excel2007 */
                 $objReader = \PHPExcel_IOFactory::createReaderForFile($file);
                 if (get_class($objReader) == 'PHPExcel_Reader_CSV') {
                     $this->get('session')->setFlash('sonata_flash_error', $this->admin->trans('Fichier non lisible'));
                     return $this->render(':redirects:back.html.twig');
                 }
                 $_FILES = array();
                 //create fake process id
                 $pid = time();
                 $user = $this->get('security.context')->getToken()->getUser();
                 $kernel = $this->get('kernel');
                 $command = 'php ' . $kernel->getRootDir() . '/console clientbundle:import:initial client ' . $user->getId() . ' ' . realpath($file) . ' ' . $pid . ' --env=' . $kernel->getEnvironment();
                 // . ' --no-debug ';
                 /* var_dump($command);
                 			exit; */
                 $process = new \Symfony\Component\Process\Process($command);
                 $process->setTimeout(3600);
                 $process->start();
                 $start = microtime(true);
                 while ($process->isRunning()) {
                     $total = microtime(true) - $start;
                     if ($total / 60 >= 2) {
                         // if process is too long (2 minutes)
                         //var_dump(($total/60));
                         $em = $this->getDoctrine()->getManager();
                         $importNotif = new ImportNotification();
                         $importNotif->setPid($pid)->setUser($user)->setClientId(0);
                         $em->persist($importNotif);
                         $em->flush();
                         $this->_hasImportErrors = true;
                         $this->get('session')->setFlash('sonata_flash_error', \AppKernel::getStaticContainer()->get('translator')->trans('There are too many data to be processed. We will just notify you once it\'s done. Check your email (' . $user->getEmail() . ') within few hours.'));
                         break;
                         return $this->render(':redirects:back.html.twig');
                     }
                 }
                 $output = unserialize($process->getOutput());
                 $messages = $output['messages'];
                 $import_counts = $output['import_counts'];
             }
         } else {
             $this->get('session')->setFlash('sonata_flash_error|raw', 'Please upload a file');
         }
         //$messages = $this->getCountMessageImports();
         if (!empty($messages)) {
             $this->get('session')->setFlash('sonata_flash_info|raw', implode("<br />", $messages));
         }
         return $this->render(':redirects:back.html.twig');
     }
     return $this->render('ApplicationSonataClientBundle:InitialImport:client.html.twig');
 }
 /**
  * Deletes a Collection entity.
  *
  * @Route("/{id}/delete", name="collection_delete")
  * @Method("post")
  */
 public function collection_deleteAction($id)
 {
     $user = $this->container->get('security.context')->getToken()->getUser();
     $dm = $this->get('doctrine.odm.mongodb.document_manager');
     $dm->getConfiguration()->setDefaultDB($this->getDataBase($user, $dm));
     $collection = $dm->getRepository('PlantnetDataBundle:Collection')->findOneBy(array('id' => $id));
     if (!$collection) {
         throw $this->createNotFoundException('Unable to find Collection entity.');
     }
     $form = $this->createDeleteForm($id);
     $request = $this->getRequest();
     if ('POST' === $request->getMethod()) {
         $form->bind($request);
         if ($form->isValid()) {
             $collection->setDeleting(true);
             $dm->persist($collection);
             $dm->flush();
             $user = $this->container->get('security.context')->getToken()->getUser();
             $kernel = $this->get('kernel');
             $command = $this->container->getParameter('php_bin') . ' ' . $kernel->getRootDir() . '/console publish:delete collection ' . $id . ' ' . $user->getDbName() . ' &> /dev/null &';
             $process = new \Symfony\Component\Process\Process($command);
             $process->start();
             $this->get('session')->getFlashBag()->add('msg_success', 'Collection deleted');
         }
     }
     return $this->redirect($this->generateUrl('admin_index'));
 }
 /**
  * Deletes syn from Glossary entity.
  *
  * @Route("/{id}/syn_delete", name="glossary_syn_delete")
  * @Method("post")
  */
 public function glossary_syn_deleteAction($id)
 {
     $user = $this->container->get('security.context')->getToken()->getUser();
     $dm = $this->get('doctrine.odm.mongodb.document_manager');
     $dm->getConfiguration()->setDefaultDB($this->getDataBase($user, $dm));
     $glossary = $dm->getRepository('PlantnetDataBundle:Glossary')->find($id);
     if (!$glossary) {
         throw $this->createNotFoundException('Unable to find Glossary entity.');
     }
     $collection = $glossary->getCollection();
     if (!$collection) {
         throw $this->createNotFoundException('Unable to find Collection entity.');
     }
     $csv = __DIR__ . '/../../Resources/uploads/' . $collection->getAlias() . '/glossary_syn.csv';
     if (!file_exists($csv)) {
         throw $this->createNotFoundException('Unable to find Syn entity.');
     }
     $form = $this->createDeleteSynForm($id);
     $request = $this->getRequest();
     if ('POST' === $request->getMethod()) {
         $form->bind($request);
         if ($form->isValid()) {
             if (unlink($csv)) {
                 $dm = $this->get('doctrine.odm.mongodb.document_manager');
                 $dm->getConfiguration()->setDefaultDB($this->getDataBase($user, $dm));
                 $kernel = $this->get('kernel');
                 $command = $this->container->getParameter('php_bin') . ' ' . $kernel->getRootDir() . '/console publish:glossary unsyn ' . $id . ' ' . $user->getDbName() . ' ' . $user->getEmail() . ' &> /dev/null &';
                 $process = new \Symfony\Component\Process\Process($command);
                 $process->start();
                 $this->get('session')->getFlashBag()->add('msg_success', 'Glossary updated');
             }
         }
     }
     return $this->redirect($this->generateUrl('glossary_edit', array('id' => $id)));
 }