Enhanced user queries

This commit is contained in:
Romain Neutron
2012-03-15 14:02:19 +01:00
parent 871a3511ec
commit d0ff7cd102
2 changed files with 22 additions and 17 deletions

View File

@@ -55,8 +55,7 @@ class UserProvider implements ControlProviderInterface
$users = $user_query $users = $user_query
->like(\User_Query::LIKE_EMAIL, $query) ->like(\User_Query::LIKE_EMAIL, $query)
->like(\User_Query::LIKE_FIRSTNAME, $query) ->like(\User_Query::LIKE_NAME, $query)
->like(\User_Query::LIKE_LASTNAME, $query)
->like(\User_Query::LIKE_LOGIN, $query) ->like(\User_Query::LIKE_LOGIN, $query)
->like_match(\User_Query::LIKE_MATCH_OR) ->like_match(\User_Query::LIKE_MATCH_OR)
->include_phantoms(true) ->include_phantoms(true)

View File

@@ -348,23 +348,29 @@ class User_Query implements User_QueryInterface
{ {
switch ($like_field) switch ($like_field)
{ {
case self::LIKE_FIRSTNAME: case self::LIKE_NAME:
case self::LIKE_LASTNAME:
$qrys = array(); $qrys = array();
foreach (explode(' ', $like_value) as $like_val) foreach (explode(' ', $like_value) as $like_val)
{ {
if (trim($like_val) === '')
continue;
$qrys[] = sprintf( $qrys[] = sprintf(
' usr.`%s` LIKE "%s%%" COLLATE utf8_unicode_ci ' ' (usr.`%s` LIKE "%s%%" COLLATE utf8_unicode_ci
, $like_field OR usr.`%s` LIKE "%s%%" COLLATE utf8_unicode_ci) '
, self::LIKE_FIRSTNAME
, str_replace(array('"', '%'), array('\"', '\%'), $like_val)
, self::LIKE_LASTNAME
, str_replace(array('"', '%'), array('\"', '\%'), $like_val) , str_replace(array('"', '%'), array('\"', '\%'), $like_val)
); );
} }
if (count($qrys) > 0) if (count($qrys) > 0)
$sql_like[] = ' (' . implode(' OR ', $qrys) . ') '; $sql_like[] = ' (' . implode(' AND ', $qrys) . ') ';
break; break;
case self::LIKE_FIRSTNAME:
case self::LIKE_LASTNAME:
case self::LIKE_COMPANY: case self::LIKE_COMPANY:
case self::LIKE_EMAIL: case self::LIKE_EMAIL:
case self::LIKE_LOGIN: case self::LIKE_LOGIN:
@@ -690,15 +696,15 @@ class User_Query implements User_QueryInterface
public function like($like_field, $like_value) public function like($like_field, $like_value)
{ {
if ($like_field == self::LIKE_NAME) // if ($like_field == self::LIKE_NAME)
{ // {
$this->like_field[self::LIKE_FIRSTNAME] = trim($like_value); // $this->like_field[self::LIKE_FIRSTNAME] = trim($like_value);
$this->like_field[self::LIKE_LASTNAME] = trim($like_value); // $this->like_field[self::LIKE_LASTNAME] = trim($like_value);
} // }
else // else
{ // {
$this->like_field[trim($like_field)] = trim($like_value); $this->like_field[trim($like_field)] = trim($like_value);
} // }
$this->total = $this->page = $this->total_page = null; $this->total = $this->page = $this->total_page = null;