• Модуль: main
  • Путь к файлу: ~/bitrix/modules/main/classes/general/user.php
  • Класс: CAllUser
  • Вызов: CAllUser::SearchUserByName
static function SearchUserByName($arName, $email = '', $bLoginMode = false)
{
	global $DB;

	$arNameReady = [];
	foreach ($arName as $s)
	{
		$s = trim($s);
		if ($s != '')
		{
			$arNameReady[] = $s;
		}
	}

	if (empty($arNameReady))
	{
		return false;
	}

	$strSqlWhereEMail = (($email != '') ? " AND upper(U.EMAIL) = upper('" . $DB->ForSql($email) . "') " : '');

	if ($bLoginMode)
	{
		if (count($arNameReady) > 3)
		{
			$strSql =
				"SELECT U.ID, U.NAME, U.LAST_NAME, U.SECOND_NAME, U.LOGIN, U.EMAIL " .
				"FROM b_user U " .
				"WHERE (";
			$bFirst = true;
			for ($i = 0; $i < 4; $i++)
			{
				for ($j = 0; $j < 4; $j++)
				{
					if ($i == $j)
					{
						continue;
					}

					for ($k = 0; $k < 4; $k++)
					{
						if ($i == $k || $j == $k)
						{
							continue;
						}

						for ($l = 0; $l < 4; $l++)
						{
							if ($i == $l || $j == $l || $k == $l)
							{
								continue;
							}

							if (!$bFirst)
							{
								$strSql .= " OR ";
							}

							$strSql .= "(U.NAME IS NOT NULL AND upper(U.NAME) LIKE upper('" . $DB->ForSql($arNameReady[$i]) . "%') " .
								"AND U.LAST_NAME IS NOT NULL AND upper(U.LAST_NAME) LIKE upper('" . $DB->ForSql($arNameReady[$j]) . "%') " .
								"AND U.LOGIN IS NOT NULL AND upper(U.LOGIN) LIKE upper('" . $DB->ForSql($arNameReady[$k]) . "%') " .
								"AND U.EMAIL IS NOT NULL AND upper(U.EMAIL) LIKE upper('" . $DB->ForSql($arNameReady[$l]) . "%'))";

							$bFirst = false;
						}
					}
				}
			}
			$strSql .= ")";
		}
		elseif (Count($arNameReady) == 3)
		{
			$strSql =
				"SELECT U.ID, U.NAME, U.LAST_NAME, U.SECOND_NAME, U.LOGIN, U.EMAIL " .
				"FROM b_user U " .
				"WHERE (";
			$bFirst = true;
			for ($i = 0; $i < 3; $i++)
			{
				for ($j = 0; $j < 3; $j++)
				{
					if ($i == $j)
					{
						continue;
					}

					for ($k = 0; $k < 3; $k++)
					{
						if ($i == $k || $j == $k)
						{
							continue;
						}

						if (!$bFirst)
						{
							$strSql .= " OR ";
						}

						$strSql .= "(";
						$strSql .= "(U.NAME IS NOT NULL AND upper(U.NAME) LIKE upper('" . $DB->ForSql($arNameReady[$i]) . "%') " .
							"AND U.LAST_NAME IS NOT NULL AND upper(U.LAST_NAME) LIKE upper('" . $DB->ForSql($arNameReady[$j]) . "%') " .
							"AND U.LOGIN IS NOT NULL AND upper(U.LOGIN) LIKE upper('" . $DB->ForSql($arNameReady[$k]) . "%'))";
						$strSql .= " OR ";
						$strSql .= "(U.NAME IS NOT NULL AND upper(U.NAME) LIKE upper('" . $DB->ForSql($arNameReady[$i]) . "%') " .
							"AND U.LAST_NAME IS NOT NULL AND upper(U.LAST_NAME) LIKE upper('" . $DB->ForSql($arNameReady[$j]) . "%') " .
							"AND U.EMAIL IS NOT NULL AND upper(U.EMAIL) LIKE upper('" . $DB->ForSql($arNameReady[$k]) . "%'))";
						$strSql .= " OR ";
						$strSql .= "(U.NAME IS NOT NULL AND upper(U.NAME) LIKE upper('" . $DB->ForSql($arNameReady[$i]) . "%') " .
							"AND U.LOGIN IS NOT NULL AND upper(U.LOGIN) LIKE upper('" . $DB->ForSql($arNameReady[$j]) . "%') " .
							"AND U.EMAIL IS NOT NULL AND upper(U.EMAIL) LIKE upper('" . $DB->ForSql($arNameReady[$k]) . "%'))";
						$strSql .= " OR ";
						$strSql .= "(U.LAST_NAME IS NOT NULL AND upper(U.LAST_NAME) LIKE upper('" . $DB->ForSql($arNameReady[$i]) . "%') " .
							"AND U.LOGIN IS NOT NULL AND upper(U.LOGIN) LIKE upper('" . $DB->ForSql($arNameReady[$j]) . "%') " .
							"AND U.EMAIL IS NOT NULL AND upper(U.EMAIL) LIKE upper('" . $DB->ForSql($arNameReady[$k]) . "%'))";
						$strSql .= ")";

						$bFirst = false;
					}
				}
			}
			$strSql .= ")";
		}
		elseif (Count($arNameReady) == 2)
		{
			$strSql =
				"SELECT U.ID, U.NAME, U.LAST_NAME, U.SECOND_NAME, U.LOGIN, U.EMAIL " .
				"FROM b_user U " .
				"WHERE (";
			$bFirst = true;
			for ($i = 0; $i < 2; $i++)
			{
				for ($j = 0; $j < 2; $j++)
				{
					if ($i == $j)
					{
						continue;
					}

					if (!$bFirst)
					{
						$strSql .= " OR ";
					}

					$strSql .= "(";
					$strSql .= "(U.NAME IS NOT NULL AND upper(U.NAME) LIKE upper('" . $DB->ForSql($arNameReady[$i]) . "%') " .
						"AND U.LAST_NAME IS NOT NULL AND upper(U.LAST_NAME) LIKE upper('" . $DB->ForSql($arNameReady[$j]) . "%'))";
					$strSql .= " OR ";
					$strSql .= "(U.NAME IS NOT NULL AND upper(U.NAME) LIKE upper('" . $DB->ForSql($arNameReady[$i]) . "%') " .
						"AND U.LOGIN IS NOT NULL AND upper(U.LOGIN) LIKE upper('" . $DB->ForSql($arNameReady[$j]) . "%'))";
					$strSql .= " OR ";
					$strSql .= "(U.LAST_NAME IS NOT NULL AND upper(U.LAST_NAME) LIKE upper('" . $DB->ForSql($arNameReady[$i]) . "%') " .
						"AND U.LOGIN IS NOT NULL AND upper(U.LOGIN) LIKE upper('" . $DB->ForSql($arNameReady[$j]) . "%'))";
					$strSql .= " OR ";
					$strSql .= "(U.LAST_NAME IS NOT NULL AND upper(U.LAST_NAME) LIKE upper('" . $DB->ForSql($arNameReady[$i]) . "%') " .
						"AND U.EMAIL IS NOT NULL AND upper(U.EMAIL) LIKE upper('" . $DB->ForSql($arNameReady[$j]) . "%'))";
					$strSql .= " OR ";
					$strSql .= "(U.NAME IS NOT NULL AND upper(U.NAME) LIKE upper('" . $DB->ForSql($arNameReady[$i]) . "%') " .
						"AND U.EMAIL IS NOT NULL AND upper(U.EMAIL) LIKE upper('" . $DB->ForSql($arNameReady[$j]) . "%'))";
					$strSql .= " OR ";
					$strSql .= "(U.LOGIN IS NOT NULL AND upper(U.LOGIN) LIKE upper('" . $DB->ForSql($arNameReady[$i]) . "%') " .
						"AND U.EMAIL IS NOT NULL AND upper(U.EMAIL) LIKE upper('" . $DB->ForSql($arNameReady[$j]) . "%'))";
					$strSql .= ")";
					$bFirst = false;
				}
			}
			$strSql .= ")";
		}
		else
		{
			$strSql =
				"SELECT U.ID, U.NAME, U.LAST_NAME, U.SECOND_NAME, U.LOGIN, U.EMAIL " .
				"FROM b_user U " .
				"WHERE (U.LAST_NAME IS NOT NULL AND upper(U.LAST_NAME) LIKE upper('" . $DB->ForSql($arNameReady[0]) . "%') " .
				"	OR U.LOGIN IS NOT NULL AND upper(U.LOGIN) LIKE upper('" . $DB->ForSql($arNameReady[0]) . "%') " .
				"	OR U.EMAIL IS NOT NULL AND upper(U.EMAIL) LIKE upper('" . $DB->ForSql($arNameReady[0]) . "%') " .
				"	OR U.NAME IS NOT NULL AND upper(U.NAME) LIKE upper('" . $DB->ForSql($arNameReady[0]) . "%')) ";
		}
		$strSql .= $strSqlWhereEMail;
	}
	else
	{
		if (Count($arNameReady) >= 3)
		{
			$strSql =
				"SELECT U.ID, U.NAME, U.LAST_NAME, U.SECOND_NAME, U.LOGIN, U.EMAIL " .
				"FROM b_user U " .
				"WHERE ";
			$bFirst = true;
			for ($i = 0; $i < 3; $i++)
			{
				for ($j = 0; $j < 3; $j++)
				{
					if ($i == $j)
					{
						continue;
					}

					for ($k = 0; $k < 3; $k++)
					{
						if ($i == $k || $j == $k)
						{
							continue;
						}

						if (!$bFirst)
						{
							$strSql .= " OR ";
						}

						$strSql .= "(U.NAME IS NOT NULL AND upper(U.NAME) LIKE upper('" . $DB->ForSql($arNameReady[$i]) . "%') " .
							"AND U.LAST_NAME IS NOT NULL AND upper(U.LAST_NAME) LIKE upper('" . $DB->ForSql($arNameReady[$j]) . "%') " .
							"AND U.SECOND_NAME IS NOT NULL AND upper(U.SECOND_NAME) LIKE upper('" . $DB->ForSql($arNameReady[$k]) . "%')" . $strSqlWhereEMail . ")";

						$bFirst = false;
					}
				}
			}
		}
		elseif (Count($arNameReady) == 2)
		{
			$strSql =
				"SELECT U.ID, U.NAME, U.LAST_NAME, U.SECOND_NAME, U.LOGIN, U.EMAIL " .
				"FROM b_user U " .
				"WHERE ";
			$bFirst = true;
			for ($i = 0; $i < 2; $i++)
			{
				for ($j = 0; $j < 2; $j++)
				{
					if ($i == $j)
					{
						continue;
					}

					if (!$bFirst)
					{
						$strSql .= " OR ";
					}

					$strSql .= "(U.NAME IS NOT NULL AND upper(U.NAME) LIKE upper('" . $DB->ForSql($arNameReady[$i]) . "%') " .
						"AND U.LAST_NAME IS NOT NULL AND upper(U.LAST_NAME) LIKE upper('" . $DB->ForSql($arNameReady[$j]) . "%')" . $strSqlWhereEMail . ")";

					$bFirst = false;
				}
			}
		}
		else
		{
			$strSql =
				"SELECT U.ID, U.NAME, U.LAST_NAME, U.SECOND_NAME, U.LOGIN, U.EMAIL " .
				"FROM b_user U " .
				"WHERE U.LAST_NAME IS NOT NULL AND upper(U.LAST_NAME) LIKE upper('" . $DB->ForSql($arNameReady[0]) . "%') " .
				$strSqlWhereEMail;
		}
	}

	$dbRes = $DB->Query($strSql);
	return $dbRes;
}