/**
  * create action
  *
  * @return \Symfony\Component\HttpFoundation\Response
  */
 public function createAction()
 {
     $request = $this->get('request');
     $currentNode = $this->getNodeProvider()->getCurrentNode();
     $document = new Document($currentNode);
     $this->admin->setSubject($document);
     $form = $this->admin->getForm();
     $form->setData($document);
     $template = 'ErichardDmsBundle:Sonata/Document:form.html.twig';
     if ($this->isXmlHttpRequest()) {
         $template = 'ErichardDmsBundle:Sonata/Document:ajax_form.html.twig';
     }
     if ($request->isMethod('GET')) {
         $view = $form->createView();
         $this->get('twig')->getExtension('form')->renderer->setTheme($view, $this->admin->getFormTheme());
         $response = $this->render($template, array('node' => $currentNode, 'form' => $view, 'parent_node' => $this->getNodeProvider()->getRootNode(), 'action' => 'create', 'object' => $document));
     } else {
         $filenames = array_filter(explode(';', $request->request->get($this->admin->getUniqid())['document']['filename']));
         $tokens = array_filter(explode(';', $request->request->get($this->admin->getUniqid())['document']['token']));
         foreach ($filenames as $key => $filename) {
             $document = new Document($currentNode);
             $document->removeEmptyMetadatas();
             $this->get('dms.manager')->createDocument($filename, $tokens[$key], $currentNode, $document);
             if ($this->get('event_dispatcher')->hasListeners(DmsEvents::DOCUMENT_ADD)) {
                 $event = new DmsDocumentEvent($document);
                 $this->get('event_dispatcher')->dispatch(DmsEvents::DOCUMENT_ADD, $event);
             }
         }
         $this->addFlash('success', $this->admin->trans('flash_create_success', array('%name%' => $this->escapeHtml($this->admin->toString($document))), 'SonataAdminBundle'));
         $response = $this->redirect($this->get('router')->generate('admin_erichard_dms_documentnode_list', $request->query->all()));
     }
     return $response;
 }
Пример #2
0
 /**
  * getDocuments
  *
  * @return array
  */
 public function getDocuments()
 {
     $node = new DocumentNode();
     $document1 = new Document($node);
     $document1->setId(1)->setOriginalName('test.jpg');
     $document2 = new Document($node);
     $document2->setId(1234)->setOriginalName('test.doc');
     $document3 = new Document($node);
     $document3->setId(123400)->setOriginalName('test');
     return array(array($document1, '00/00/00/00000001.jpg'), array($document2, '00/00/12/00001234.doc'), array($document3, '00/12/34/00123400.noext'));
 }
 /**
  * importFile
  *
  * @param array   $currentNode
  * @param integer $depth
  * @param mixed   $file
  */
 public function importFile($currentNode, $depth, $file)
 {
     $document = new Document($currentNode[$depth]);
     $document->setName($file->getBaseName())->setOriginalName($file->getBaseName())->setFilename($file->getBaseName());
     if (isset($this->options['document_callback']) && is_callable($this->options['document_callback'])) {
         call_user_func_array($this->options['document_callback'], array($document));
     }
     $this->emn->persist($document);
     $this->emn->flush();
     $document->setFilename($document->getComputedFilename());
     $destFile = $this->options['storage_path'] . '/' . $document->getFilename();
     if (!is_dir(dirname($destFile))) {
         mkdir(dirname($destFile), 0755, true);
     }
     if ($this->options['copy']) {
         copy($file->getRealPath(), $destFile);
     } else {
         rename($file->getRealPath(), $destFile);
     }
     $this->emn->persist($document);
     $this->emn->flush();
     $this->emn->detach($document);
 }
Пример #4
0
 /**
  * createDocument
  *
  * @param string                                  $filename
  * @param string                                  $token
  * @param \Erichard\DmsBundle\Entity\DocumentNode $currentNode
  * @param \Erichard\DmsBundle\Entity\Document     $document
  */
 public function createDocument($filename, $token, $currentNode, $document)
 {
     $currentNode->removeEmptyMetadatas();
     if (null === $document->getId()) {
         $document->setName($filename);
     }
     $document->setOriginalName($filename);
     $document->setFilename($token);
     $document->removeEmptyMetadatas();
     $emn = $this->registry->getManager();
     $emn->persist($document);
     $emn->flush();
     foreach ($document->getNode()->getDocuments() as $sibling) {
         $sibling->removeEmptyMetadatas();
     }
     $storageTmpPath = $this->container->getParameter('dms.storage.tmp_path');
     $storagePath = $this->container->getParameter('dms.storage.path');
     $filesystem = $this->container->get('filesystem');
     $absTmpFilename = $storageTmpPath . '/' . $document->getFilename();
     $absFilename = $storagePath . '/' . $document->getComputedFilename();
     $finder = new Finder();
     $finder->files()->in($storageTmpPath)->name($document->getFilename());
     foreach ($finder as $file) {
         $this->addMetadatas($file, $document, 'document');
     }
     // Delete existing thumbnails
     if (is_dir($this->container->getParameter('dms.cache.path'))) {
         $finder = new Finder();
         $finder->files()->in($this->container->getParameter('dms.cache.path'))->name("{$document->getSlug()}.png");
         foreach ($finder as $file) {
             $filesystem->remove($file);
         }
     }
     // overwrite file
     if (is_file($absFilename)) {
         unlink($absFilename);
     } elseif (!$filesystem->exists(dirname($absFilename))) {
         $filesystem->mkdir(dirname($absFilename));
     }
     $filesystem->rename($absTmpFilename, $absFilename);
     $document->setFilename($document->getComputedFilename());
     $emn->persist($document);
     $emn->flush();
 }
 /**
  * addAction
  *
  * @param string      $node
  * @param null|string $document
  *
  * @return \Symfony\Component\HttpFoundation\RedirectResponse|\Symfony\Component\HttpFoundation\Response
  */
 public function addAction($node, $document = null)
 {
     $documentNode = $this->findNodeOrThrowError($node);
     $request = $this->get('request');
     if (null !== $document) {
         $document = $this->findDocumentOrThrowError($document, $node);
         $firstEdition = false;
     } else {
         $document = new Document($documentNode);
         $firstEdition = true;
     }
     if ($request->isMethod('GET')) {
         $params = array('node' => $documentNode);
         if (null !== $document->getId()) {
             $params['document'] = $document;
         }
         return $this->render('ErichardDmsBundle:Standard/Document:add.html.twig', $params);
     } else {
         $filename = $request->request->get('filename');
         $documentNode->removeEmptyMetadatas();
         if (null === $document->getId()) {
             $document->setName($filename);
         }
         $document->setOriginalName($filename);
         $document->setFilename($request->request->get('token'));
         $document->removeEmptyMetadatas();
         foreach ($document->getNode()->getDocuments() as $sibling) {
             $sibling->removeEmptyMetadatas();
         }
         $emn = $this->get('doctrine')->getManager();
         $emn->persist($document);
         $emn->flush();
         $storageTmpPath = $this->container->getParameter('dms.storage.tmp_path');
         $storagePath = $this->container->getParameter('dms.storage.path');
         $filesystem = $this->get('filesystem');
         $absTmpFilename = $storageTmpPath . '/' . $document->getFilename();
         $absFilename = $storagePath . '/' . $document->getComputedFilename();
         // Delete existing thumbnails
         if (is_dir($this->container->getParameter('dms.cache.path'))) {
             $finder = new Finder();
             $finder->files()->in($this->container->getParameter('dms.cache.path'))->name("{$document->getSlug()}.png");
             foreach ($finder as $file) {
                 $filesystem->remove($file);
             }
         }
         // overwrite file
         if (is_file($absFilename)) {
             unlink($absFilename);
         } elseif (!$filesystem->exists(dirname($absFilename))) {
             $filesystem->mkdir(dirname($absFilename));
         }
         $filesystem->rename($absTmpFilename, $absFilename);
         $document->setFilename($document->getComputedFilename());
         $emn->persist($document);
         $emn->flush();
         if ($this->get('event_dispatcher')->hasListeners(DmsEvents::DOCUMENT_ADD)) {
             $event = new DmsDocumentEvent($document);
             $this->get('event_dispatcher')->dispatch(DmsEvents::DOCUMENT_ADD, $event);
         }
         return $this->redirect($this->get('router')->generate('erichard_dms_edit_document', array('document' => $document->getSlug(), 'node' => $documentNode->getSlug(), 'first' => $firstEdition)));
     }
 }