mirror of
https://github.com/Combodo/iTop.git
synced 2026-04-21 17:48:43 +02:00
Implemented enhancement #130: keywords to narrow the scope of the global search
SVN:trunk[1369]
This commit is contained in:
@@ -582,7 +582,7 @@ EOF
|
||||
}
|
||||
echo "</style>\n";
|
||||
}
|
||||
echo "<link rel=\"search\" type=\"application/opensearchdescription+xml\" title=\"iTop\" href=\"./opensearch.xml.php\" />\n";
|
||||
echo "<link rel=\"search\" type=\"application/opensearchdescription+xml\" title=\"iTop\" href=\"".utils::GetAbsoluteUrlAppRoot()."opensearch.xml.php\" />\n";
|
||||
echo "</head>\n";
|
||||
echo "<body>\n";
|
||||
|
||||
@@ -606,7 +606,7 @@ EOF
|
||||
}
|
||||
|
||||
// Render the text of the global search form
|
||||
$sText = Utils::ReadParam('text', '');
|
||||
$sText = htmlentities(utils::ReadParam('text', ''), ENT_QUOTES, 'UTF-8');
|
||||
$sOnClick = "";
|
||||
if (empty($sText))
|
||||
{
|
||||
|
||||
@@ -310,13 +310,23 @@ abstract class MetaModel
|
||||
return self::GetName($sClass);
|
||||
}
|
||||
}
|
||||
final static public function GetClassFromLabel($sClassLabel)
|
||||
final static public function GetClassFromLabel($sClassLabel, $bCaseSensitive = true)
|
||||
{
|
||||
foreach(self::GetClasses() as $sClass)
|
||||
{
|
||||
if (self::GetName($sClass) == $sClassLabel)
|
||||
if ($bCaseSensitive)
|
||||
{
|
||||
return $sClass;
|
||||
if (self::GetName($sClass) == $sClassLabel)
|
||||
{
|
||||
return $sClass;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (strcasecmp(self::GetName($sClass), $sClassLabel) == 0)
|
||||
{
|
||||
return $sClass;
|
||||
}
|
||||
}
|
||||
}
|
||||
return null;
|
||||
|
||||
29
pages/UI.php
29
pages/UI.php
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user