浏览代码

Add Export features

Thomas Rabaix 13 年之前
父节点
当前提交
46b88eeacc
共有 1 个文件被更改,包括 36 次插入6 次删除
  1. 36 6
      Model/ModelManager.php

+ 36 - 6
Model/ModelManager.php

@@ -26,13 +26,14 @@ use Symfony\Component\Form\Exception\PropertyAccessDeniedException;
 
 use Symfony\Bridge\Doctrine\RegistryInterface;
 
+use Exporter\Source\DoctrineORMQuerySourceIterator;
+
 class ModelManager implements ModelManagerInterface
 {
     protected $registry;
 
     /**
-     *
-     * @param \Doctrine\ORM\EntityManager $entityManager
+     * @param \Symfony\Bridge\Doctrine\RegistryInterface $registry
      */
     public function __construct(RegistryInterface $registry)
     {
@@ -42,9 +43,8 @@ class ModelManager implements ModelManagerInterface
     /**
      * Returns the related model's metadata
      *
-     * @abstract
-     * @param string $name
-     * @return \Doctrine\ORM\Mapping\ClassMetadataInfo
+     * @param $class
+     * @return \Doctrine\ORM\Mapping\ClassMetadata
      */
     public function getMetadata($class)
     {
@@ -229,7 +229,7 @@ class ModelManager implements ModelManagerInterface
     /**
      * @throws \RuntimeException
      * @param $entity
-     * @return
+     * @return mixed
      */
     public function getIdentifierValues($entity)
     {
@@ -331,6 +331,36 @@ class ModelManager implements ModelManagerInterface
         }
     }
 
+    /**
+     * @param \Sonata\AdminBundle\Datagrid\DatagridInterface $datagrid
+     * @param array $fields
+     * @param null $firstResult
+     * @param null $maxResult
+     * @return \Exporter\Source\DoctrineORMQuerySourceIterator
+     */
+    public function getDataSourceIterator(DatagridInterface $datagrid, array $fields, $firstResult = null, $maxResult = null)
+    {
+        $datagrid->buildPager();
+        $query = $datagrid->getQuery();
+
+        $query->select('DISTINCT '.$query->getRootAlias());
+        $query->setFirstResult($firstResult);
+        $query->setMaxResults($maxResult);
+
+        return new DoctrineORMQuerySourceIterator($query instanceof ProxyQuery ? $query->getQuery() : $query, $fields);
+    }
+
+    /**
+     * @param $class
+     * @return array
+     */
+    public function getExportFields($class)
+    {
+        $metadata = $this->registry->getEntityManager()->getClassMetadata($class);
+
+        return $metadata->getFieldNames();
+    }
+
     /**
      * Returns a new model instance
      * @param string $class