admin search in customer and products

This commit is contained in:
Etienne Roudeix
2013-10-24 20:26:00 +02:00
parent 6ea61ff68c
commit d8611c2965
5 changed files with 222 additions and 13 deletions

View File

@@ -253,7 +253,7 @@ abstract class BaseLoop
$searchTerm = explode(' ', $searchTerm);
break;
case SearchLoopInterface::MODE_SENTENCE:
$searchCriteria = Criteria::EQUAL;
$searchCriteria = Criteria::LIKE;
$searchTerm = '%' . $searchTerm . '%';
break;
case SearchLoopInterface::MODE_STRICT_SENTENCE:
@@ -262,8 +262,6 @@ abstract class BaseLoop
}
$this->doSearch($search, $searchTerm, $searchIn, $searchCriteria);
$in = 'true';
}
}

View File

@@ -31,9 +31,9 @@ use Symfony\Component\Validator\ExecutionContextInterface;
*/
interface SearchLoopInterface
{
const MODE_ANY_WORD = 1;
const MODE_SENTENCE = 2;
const MODE_STRICT_SENTENCE = 3;
const MODE_ANY_WORD = 'any_word';
const MODE_SENTENCE = 'sentence';
const MODE_STRICT_SENTENCE = 'strict_sentence';
/**
* @return array of available field to search in

View File

@@ -28,6 +28,7 @@ use Thelia\Core\Template\Element\BaseLoop;
use Thelia\Core\Template\Element\LoopResult;
use Thelia\Core\Template\Element\LoopResultRow;
use Thelia\Core\Template\Element\SearchLoopInterface;
use Thelia\Core\Template\Loop\Argument\ArgumentCollection;
use Thelia\Core\Template\Loop\Argument\Argument;
@@ -44,7 +45,7 @@ use Thelia\Type;
* @package Thelia\Core\Template\Loop
* @author Etienne Roudeix <eroudeix@openstudio.fr>
*/
class Customer extends BaseLoop
class Customer extends BaseLoop implements SearchLoopInterface
{
public $timestampable = true;
@@ -67,6 +68,47 @@ class Customer extends BaseLoop
);
}
public function getSearchIn()
{
return array(
"ref",
"firstname",
"lastname",
"email",
);
}
/**
* @param CustomerQuery $search
* @param $searchTerm
* @param $searchIn
* @param $searchCriteria
*/
public function doSearch(&$search, $searchTerm, $searchIn, $searchCriteria)
{
$search->_and();
foreach($searchIn as $index => $searchInElement) {
if($index > 0) {
$search->_or();
}
switch($searchInElement) {
case "ref":
$search->filterByRef($searchTerm, $searchCriteria);
break;
case "firstname":
$search->filterByFirstname($searchTerm, $searchCriteria);
break;
case "lastname":
$search->filterByLastname($searchTerm, $searchCriteria);
break;
case "email":
$search->filterByEmail($searchTerm, $searchCriteria);
break;
}
}
}
/**
* @param $pagination
*

View File

@@ -30,6 +30,7 @@ use Thelia\Core\Template\Element\BaseLoop;
use Thelia\Core\Template\Element\LoopResult;
use Thelia\Core\Template\Element\LoopResultRow;
use Thelia\Core\Template\Element\SearchLoopInterface;
use Thelia\Core\Template\Loop\Argument\ArgumentCollection;
use Thelia\Core\Template\Loop\Argument\Argument;
@@ -53,7 +54,7 @@ use Thelia\Type;
* @package Thelia\Core\Template\Loop
* @author Etienne Roudeix <eroudeix@openstudio.fr>
*/
class Product extends BaseI18nLoop
class Product extends BaseI18nLoop implements SearchLoopInterface
{
public $timestampable = true;
public $versionable = true;
@@ -129,6 +130,39 @@ class Product extends BaseI18nLoop
);
}
public function getSearchIn()
{
return array(
"ref",
"title",
);
}
/**
* @param ProductQuery $search
* @param $searchTerm
* @param $searchIn
* @param $searchCriteria
*/
public function doSearch(&$search, $searchTerm, $searchIn, $searchCriteria)
{
$search->_and();
foreach($searchIn as $index => $searchInElement) {
if($index > 0) {
$search->_or();
}
switch($searchInElement) {
case "ref":
$search->filterByRef($searchTerm, $searchCriteria);
break;
case "title":
$search->where("CASE WHEN NOT ISNULL(`requested_locale_i18n`.ID) THEN `requested_locale_i18n`.`TITLE` ELSE `default_locale_i18n`.`TITLE` END ".$searchCriteria." ?", $searchTerm, \PDO::PARAM_STR);
break;
}
}
}
/**
* @param $pagination
*