diff --git a/Tests/Util/DatatableTest.php b/Tests/Util/DatatableTest.php index 8efa278..674e68f 100644 --- a/Tests/Util/DatatableTest.php +++ b/Tests/Util/DatatableTest.php @@ -441,6 +441,52 @@ public function testSetSearchFields() $this->assertEquals(array(0), $this->_datatable->getSearchFields()); } + public function testGetSearchGlobalDisabled() + { + $this->_datatable + ->setEntity('Ali\DatatableBundle\Entity\Product', 'p') + ->setFields( + array( + "title" => 'p.name', + "_identifier_" => 'p.id')) + ->setOrder('p.id', 'asc') + ; + $this->assertFalse($this->_datatable->getSearchGlobal()); + + $this->_datatable + ->setSearch(true) + ; + + $this->assertFalse($this->_datatable->getSearchGlobal()); + + $this->_datatable + ->setSearch(true, false) + ; + + $this->assertFalse($this->_datatable->getSearchGlobal()); + + $this->_datatable + ->setSearch(false, false) + ; + + $this->assertFalse($this->_datatable->getSearchGlobal()); + + } + + public function testGetSearchGlobalEnabled() + { + $this->_datatable + ->setEntity('Ali\DatatableBundle\Entity\Product', 'p') + ->setFields( + array( + "title" => 'p.name', + "_identifier_" => 'p.id')) + ->setOrder('p.id', 'asc') + ->setSearch(true, true) + ; + $this->assertTrue($this->_datatable->getSearchGlobal()); + } + public function testSetRenderders() { $out = $this->_datatable diff --git a/Twig/Extension/AliDatatableExtension.php b/Twig/Extension/AliDatatableExtension.php index 22cc731..db0a363 100644 --- a/Twig/Extension/AliDatatableExtension.php +++ b/Twig/Extension/AliDatatableExtension.php @@ -79,6 +79,7 @@ public function datatable($options) $options['fields'] = $dt->getFields(); $options['delete_form'] = $this->createDeleteForm('_id_')->createView(); $options['search'] = $dt->getSearch(); + $options['search_global'] = $dt->getSearchGlobal(); $options['search_fields'] = $dt->getSearchFields(); $options['multiple'] = $dt->getMultiple(); $options['sort'] = is_null($dt->getOrderField()) ? NULL : array(array_search( diff --git a/Util/Datatable.php b/Util/Datatable.php index 38416d4..acd6230 100644 --- a/Util/Datatable.php +++ b/Util/Datatable.php @@ -51,6 +51,9 @@ class Datatable /** @var boolean */ protected $_search; + /** @var boolean */ + protected $_search_global = false; + /** @var array */ protected $_search_fields = array(); @@ -289,6 +292,16 @@ public function getSearch() return $this->_search; } + /** + * get global search + * + * @return boolean + */ + public function getSearchGlobal() + { + return $this->_search_global; + } + /** * set entity * @@ -523,13 +536,15 @@ public function setGroupBy($groupby) * set search * * @param bool $search + * @param bool $global * * @return \Ali\DatatableBundle\Util\Datatable */ - public function setSearch($search) + public function setSearch($search, $global = false) { - $this->_search = $search; - $this->_queryBuilder->setSearch($search); + $this->_search = $search; + $this->_search_global = $search && $global; + $this->_queryBuilder->setSearch($this->_search || $this->_search_global); return $this; } diff --git a/Util/Factory/Query/DoctrineBuilder.php b/Util/Factory/Query/DoctrineBuilder.php index 2895a4b..46a0447 100644 --- a/Util/Factory/Query/DoctrineBuilder.php +++ b/Util/Factory/Query/DoctrineBuilder.php @@ -90,6 +90,22 @@ protected function _addSearch(\Doctrine\ORM\QueryBuilder $queryBuilder) $queryBuilder->setParameter("ssearch{$i}", '%' . $request->get("sSearch_{$i}") . '%'); } } + + $search_param = $request->get("sSearch"); + if ($search_param !== false && $search_param != '') + { + $search_dql = array(); + foreach ($search_fields as $i => $search_field) + { + $field = explode(' ', trim($search_field)); + $search_field = $field[0]; + + $search_dql[] = "$search_field like :ssearch"; + } + + $queryBuilder->andWhere(implode(' OR ', $search_dql)); + $queryBuilder->setParameter("ssearch", '%' . $request->get("sSearch") . '%'); + } } }