/** * 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; }
/** * 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); }
/** * 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))); } }