diff --git a/composer.json b/composer.json index 0357655..3010d92 100644 --- a/composer.json +++ b/composer.json @@ -14,7 +14,8 @@ ], "require": { "php": ">=5.3.3", - "zendframework/zendframework": ">2.1.3" + "zendframework/zend-mvc": "^2.4.0", + "zendframework/zend-form": "^2.4.0" }, "require-dev": { "squizlabs/php_codesniffer": "1.5.*" diff --git a/src/ZfTable/AbstractTable.php b/src/ZfTable/AbstractTable.php index 82d57c2..ad9e889 100644 --- a/src/ZfTable/AbstractTable.php +++ b/src/ZfTable/AbstractTable.php @@ -195,6 +195,10 @@ public function setSource($source) $source = new Source\SqlSelect($source); } elseif ($source instanceof \Doctrine\ORM\QueryBuilder) { $source = new Source\DoctrineQueryBuilder($source); + } elseif ($source instanceof \Doctrine\ODM\MongoDB\Query\Builder) { + $source = new Source\DoctrineODMMongoDBQueryBuilder($source); + } elseif ($source instanceof \Doctrine\MongoDB\Query\Builder) { + $source = new Source\DoctrineMongoDBQueryBuilder($source); } elseif (is_array($source)) { $source = new Source\ArrayAdapter($source); } else { diff --git a/src/ZfTable/MongoDbPaginatorAdapter.php b/src/ZfTable/MongoDbPaginatorAdapter.php new file mode 100644 index 0000000..45e02cc --- /dev/null +++ b/src/ZfTable/MongoDbPaginatorAdapter.php @@ -0,0 +1,46 @@ +cursor = $cursor; + } + + /** + * @return int + */ + public function count() + { + return $this->cursor->count(); + } + + /** + * @param int $offset + * @param int $itemCountPerPage + * @return Cursor + */ + public function getItems($offset, $itemCountPerPage) + { + $this->cursor->skip($offset); + $this->cursor->limit($itemCountPerPage); + return $this->cursor; + } +} diff --git a/src/ZfTable/Source/DoctrineMongoDBQueryBuilder.php b/src/ZfTable/Source/DoctrineMongoDBQueryBuilder.php new file mode 100644 index 0000000..61bb0db --- /dev/null +++ b/src/ZfTable/Source/DoctrineMongoDBQueryBuilder.php @@ -0,0 +1,73 @@ +queryBuilder = $queryBuilder; + } + + protected function order() + { + $column = $this->getParamAdapter()->getColumn(); + $order = $this->getParamAdapter()->getOrder(); + + if (!$column) { + return; + } + $header = $this->getTable()->getHeader($column); + + if (!$header) { + return; + } + + if ($header->getTableAlias()) { + $tableAlias = $header->getTableAlias(); + } else { + $tableAlias = $header->getName(); + } + + $this->queryBuilder->sort($tableAlias, $order); + } + + public function getPaginator() + { + if (!$this->paginator) { + $this->order(); + $adapter = new MongoDbPaginatorAdapter($this->queryBuilder->getQuery()->execute()); + $this->paginator = new Paginator($adapter); + $this->initPaginator(); + + } + + return $this->paginator; + } + + /** + * @return Builder + */ + public function getSource() + { + return $this->queryBuilder; + } +} diff --git a/src/ZfTable/Source/DoctrineODMMongoDBQueryBuilder.php b/src/ZfTable/Source/DoctrineODMMongoDBQueryBuilder.php new file mode 100644 index 0000000..58256ce --- /dev/null +++ b/src/ZfTable/Source/DoctrineODMMongoDBQueryBuilder.php @@ -0,0 +1,86 @@ +query = $query; + } + + /** + * + * @return \Zend\Paginator\Paginator + */ + public function getPaginator() + { + if (!$this->paginator) { + + + $this->order(); + + $adapter = new DoctrineAdapter($this->getQuery()->getQuery()->execute()); + $this->paginator = new Paginator($adapter); + $this->initPaginator(); + + } + return $this->paginator; + } + + + + protected function order() + { + $column = $this->getParamAdapter()->getColumn(); + $order = $this->getParamAdapter()->getOrder(); + + if (!$column) { + return; + } + $header = $this->getTable()->getHeader($column); + + if (!$header) { + return; + } + + if ($header->getTableAlias()) { + $tableAlias = $header->getTableAlias(); + } else { + $tableAlias = $header->getName(); + } + $order = strcasecmp('asc', $order) === 0 ? 1 : -1; + $this->query->sort($tableAlias, $order); + } + + + public function getQuery() + { + return $this->query; + } + + public function getSource() + { + return $this->query; + } +}