Implemented enhancement #130: keywords to narrow the scope of the global search

SVN:trunk[1369]
This commit is contained in:
Denis Flaven
2011-07-26 14:18:33 +00:00
parent b6bcade4c0
commit 751ab5a4b4
3 changed files with 43 additions and 6 deletions

View File

@@ -627,6 +627,22 @@ try
$iBlock = 0;
// Search in full text mode in all the classes
$aMatches = array();
$sClassName = '';
// Check if a class name/label is supplied to limit the search
if (preg_match('/^(.+):(.+)$/', $sFullText, $aMatches))
{
$sClassName = $aMatches[1];
if (MetaModel::IsValidClass($sClassName))
{
$sFullText = $aMatches[2];
}
elseif ($sClassName = MetaModel::GetClassFromLabel($sClassName, false /* => not case sensitive */))
{
$sFullText = $aMatches[2];
}
}
if (preg_match('/^"(.*)"$/', $sFullText, $aMatches))
{
// The text is surrounded by double-quotes, remove the quotes and treat it as one single expression
@@ -637,7 +653,18 @@ try
// Split the text on the blanks and treat this as a search for <word1> AND <word2> AND <word3>
$aFullTextNeedles = explode(' ', $sFullText);
}
foreach(MetaModel::GetClasses('searchable') as $sClassName)
// Search is limited ot a given class, or not...
if (empty($sClassName))
{
$aSearchClasses = MetaModel::GetClasses('searchable');
}
else
{
$aSearchClasses = MetaModel::EnumChildClasses($sClassName, ENUM_CHILD_CLASSES_ALL);
}
foreach($aSearchClasses as $sClassName)
{
$oFilter = new DBObjectSearch($sClassName);
foreach($aFullTextNeedles as $sSearchText)