Skip to content
46 changes: 46 additions & 0 deletions Tests/Util/DatatableTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
1 change: 1 addition & 0 deletions Twig/Extension/AliDatatableExtension.php
Original file line number Diff line number Diff line change
Expand Up @@ -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(
Expand Down
21 changes: 18 additions & 3 deletions Util/Datatable.php
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,9 @@ class Datatable
/** @var boolean */
protected $_search;

/** @var boolean */
protected $_search_global = false;

/** @var array */
protected $_search_fields = array();

Expand Down Expand Up @@ -289,6 +292,16 @@ public function getSearch()
return $this->_search;
}

/**
* get global search
*
* @return boolean
*/
public function getSearchGlobal()
{
return $this->_search_global;
}

/**
* set entity
*
Expand Down Expand Up @@ -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;
}

Expand Down
16 changes: 16 additions & 0 deletions Util/Factory/Query/DoctrineBuilder.php
Original file line number Diff line number Diff line change
Expand Up @@ -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") . '%');
}
}
}

Expand Down