mirror of
https://github.com/Combodo/iTop.git
synced 2026-02-13 07:24:13 +01:00
Advanced Search: Hidden criterion
SVN:b1162[5456]
This commit is contained in:
@@ -289,6 +289,23 @@ class UILinksWidgetDirect
|
|||||||
{
|
{
|
||||||
$sHtml = "<div class=\"wizContainer\" style=\"vertical-align:top;\">\n";
|
$sHtml = "<div class=\"wizContainer\" style=\"vertical-align:top;\">\n";
|
||||||
|
|
||||||
|
$oHiddenFilter = new DBObjectSearch($this->sLinkedClass);
|
||||||
|
if (($oCurrentObj != null) && MetaModel::IsSameFamilyBranch($this->sLinkedClass, $this->sClass))
|
||||||
|
{
|
||||||
|
// Prevent linking to self if the linked object is of the same family
|
||||||
|
// and already present in the database
|
||||||
|
if (!$oCurrentObj->IsNew())
|
||||||
|
{
|
||||||
|
$oHiddenFilter->AddCondition('id', $oCurrentObj->GetKey(), '!=');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (count($aAlreadyLinked) > 0)
|
||||||
|
{
|
||||||
|
$oHiddenFilter->AddCondition('id', $aAlreadyLinked, 'NOTIN');
|
||||||
|
}
|
||||||
|
$oHiddenCriteria = $oHiddenFilter->GetCriteria();
|
||||||
|
$sHiddenCriteria = $oHiddenCriteria->Render();
|
||||||
|
|
||||||
$oLinkSetDef = MetaModel::GetAttributeDef($this->sClass, $this->sAttCode);
|
$oLinkSetDef = MetaModel::GetAttributeDef($this->sClass, $this->sAttCode);
|
||||||
$valuesDef = $oLinkSetDef->GetValuesDef();
|
$valuesDef = $oLinkSetDef->GetValuesDef();
|
||||||
if ($valuesDef === null)
|
if ($valuesDef === null)
|
||||||
@@ -303,25 +320,11 @@ class UILinksWidgetDirect
|
|||||||
}
|
}
|
||||||
$oFilter = DBObjectSearch::FromOQL($valuesDef->GetFilterExpression());
|
$oFilter = DBObjectSearch::FromOQL($valuesDef->GetFilterExpression());
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($oCurrentObj != null)
|
if ($oCurrentObj != null)
|
||||||
{
|
{
|
||||||
$this->SetSearchDefaultFromContext($oCurrentObj, $oFilter);
|
$this->SetSearchDefaultFromContext($oCurrentObj, $oFilter);
|
||||||
}
|
|
||||||
if (($oCurrentObj != null) && MetaModel::IsSameFamilyBranch($this->sLinkedClass, $this->sClass))
|
|
||||||
{
|
|
||||||
// Prevent linking to self if the linked object is of the same family
|
|
||||||
// and already present in the database
|
|
||||||
if (!$oCurrentObj->IsNew())
|
|
||||||
{
|
|
||||||
$oFilter->AddCondition('id', $oCurrentObj->GetKey(), '!=');
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (count($aAlreadyLinked) > 0)
|
|
||||||
{
|
|
||||||
$oFilter->AddCondition('id', $aAlreadyLinked, 'NOTIN');
|
|
||||||
}
|
|
||||||
if ($oCurrentObj != null)
|
|
||||||
{
|
|
||||||
$aArgs = array_merge($oCurrentObj->ToArgs('this'), $oFilter->GetInternalParams());
|
$aArgs = array_merge($oCurrentObj->ToArgs('this'), $oFilter->GetInternalParams());
|
||||||
$oFilter->SetInternalParams($aArgs);
|
$oFilter->SetInternalParams($aArgs);
|
||||||
}
|
}
|
||||||
@@ -335,6 +338,7 @@ class UILinksWidgetDirect
|
|||||||
'table_inner_id' => "ResultsToAdd_{$this->sInputid}",
|
'table_inner_id' => "ResultsToAdd_{$this->sInputid}",
|
||||||
'cssCount' => "#count_{$this->sInputid}",
|
'cssCount' => "#count_{$this->sInputid}",
|
||||||
'query_params' => $oFilter->GetInternalParams(),
|
'query_params' => $oFilter->GetInternalParams(),
|
||||||
|
'hidden_criteria' => $sHiddenCriteria,
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
$sHtml .= "<form id=\"ObjectsAddForm_{$this->sInputid}\">\n";
|
$sHtml .= "<form id=\"ObjectsAddForm_{$this->sInputid}\">\n";
|
||||||
|
|||||||
@@ -397,11 +397,20 @@ EOF
|
|||||||
{
|
{
|
||||||
$bOpen = MetaModel::GetConfig()->Get('legacy_search_drawer_open');
|
$bOpen = MetaModel::GetConfig()->Get('legacy_search_drawer_open');
|
||||||
$sHtml = "<div class=\"wizContainer\" style=\"vertical-align:top;\">\n";
|
$sHtml = "<div class=\"wizContainer\" style=\"vertical-align:top;\">\n";
|
||||||
$oFilter = new DBObjectSearch($this->m_sRemoteClass);
|
|
||||||
|
$oAlreadyLinkedFilter = new DBObjectSearch($this->m_sRemoteClass);
|
||||||
if (!$this->m_bDuplicatesAllowed && count($aAlreadyLinkedIds) > 0)
|
if (!$this->m_bDuplicatesAllowed && count($aAlreadyLinkedIds) > 0)
|
||||||
{
|
{
|
||||||
$oFilter->AddCondition('id', $aAlreadyLinkedIds, 'NOTIN');
|
$oAlreadyLinkedFilter->AddCondition('id', $aAlreadyLinkedIds, 'NOTIN');
|
||||||
|
$oAlreadyLinkedExpression = $oAlreadyLinkedFilter->GetCriteria();
|
||||||
|
$sAlreadyLinkedExpression = $oAlreadyLinkedExpression->Render();
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
$sAlreadyLinkedExpression = '';
|
||||||
|
}
|
||||||
|
|
||||||
|
$oFilter = new DBObjectSearch($this->m_sRemoteClass);
|
||||||
if ($oCurrentObj != null)
|
if ($oCurrentObj != null)
|
||||||
{
|
{
|
||||||
$this->SetSearchDefaultFromContext($oCurrentObj, $oFilter);
|
$this->SetSearchDefaultFromContext($oCurrentObj, $oFilter);
|
||||||
@@ -418,6 +427,7 @@ EOF
|
|||||||
'json' => $sJson,
|
'json' => $sJson,
|
||||||
'cssCount' => '#count_'.$this->m_sAttCode.$this->m_sNameSuffix,
|
'cssCount' => '#count_'.$this->m_sAttCode.$this->m_sNameSuffix,
|
||||||
'query_params' => $oFilter->GetInternalParams(),
|
'query_params' => $oFilter->GetInternalParams(),
|
||||||
|
'hidden_criteria' => $sAlreadyLinkedExpression,
|
||||||
));
|
));
|
||||||
$sHtml .= "<form id=\"ObjectsAddForm_{$this->m_sAttCode}{$this->m_sNameSuffix}\">\n";
|
$sHtml .= "<form id=\"ObjectsAddForm_{$this->m_sAttCode}{$this->m_sNameSuffix}\">\n";
|
||||||
$sHtml .= "<div id=\"SearchResultsToAdd_{$this->m_sAttCode}{$this->m_sNameSuffix}\" style=\"vertical-align:top;background: #fff;height:100%;overflow:auto;padding:0;border:0;\">\n";
|
$sHtml .= "<div id=\"SearchResultsToAdd_{$this->m_sAttCode}{$this->m_sNameSuffix}\" style=\"vertical-align:top;background: #fff;height:100%;overflow:auto;padding:0;border:0;\">\n";
|
||||||
|
|||||||
@@ -50,12 +50,20 @@ try
|
|||||||
$oPage->no_cache();
|
$oPage->no_cache();
|
||||||
$oPage->SetContentType('text/html');
|
$oPage->SetContentType('text/html');
|
||||||
|
|
||||||
$aParams = json_decode($sParams, true);
|
|
||||||
$oFilter = CriterionParser::Parse($aParams['base_oql'], $aParams['criterion']);
|
|
||||||
$oDisplayBlock = new DisplayBlock($oFilter, 'list', false);
|
|
||||||
|
|
||||||
$sListParams = utils::ReadParam('list_params', '{}', false, 'raw_data');
|
$sListParams = utils::ReadParam('list_params', '{}', false, 'raw_data');
|
||||||
$aListParams = (array) json_decode($sListParams, true);
|
$aListParams = (array)json_decode($sListParams, true);
|
||||||
|
|
||||||
|
$aParams = json_decode($sParams, true);
|
||||||
|
if (array_key_exists('hidden_criteria', $aListParams))
|
||||||
|
{
|
||||||
|
$sHiddenCriteria = $aListParams['hidden_criteria'];
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
$sHiddenCriteria = '';
|
||||||
|
}
|
||||||
|
$oFilter = CriterionParser::Parse($aParams['base_oql'], $aParams['criterion'], $sHiddenCriteria);
|
||||||
|
$oDisplayBlock = new DisplayBlock($oFilter, 'list', false);
|
||||||
|
|
||||||
foreach($aListParams as $key => $value)
|
foreach($aListParams as $key => $value)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -31,6 +31,7 @@ namespace Combodo\iTop\Application\Search;
|
|||||||
|
|
||||||
use Combodo\iTop\Application\Search\CriterionConversion\CriterionToOQL;
|
use Combodo\iTop\Application\Search\CriterionConversion\CriterionToOQL;
|
||||||
use DBObjectSearch;
|
use DBObjectSearch;
|
||||||
|
use Expression;
|
||||||
use IssueLog;
|
use IssueLog;
|
||||||
use OQLException;
|
use OQLException;
|
||||||
|
|
||||||
@@ -40,10 +41,11 @@ class CriterionParser
|
|||||||
/**
|
/**
|
||||||
* @param $sBaseOql
|
* @param $sBaseOql
|
||||||
* @param $aCriterion
|
* @param $aCriterion
|
||||||
|
* @param $sHiddenCriteria
|
||||||
*
|
*
|
||||||
* @return \DBSearch
|
* @return \DBSearch
|
||||||
*/
|
*/
|
||||||
public static function Parse($sBaseOql, $aCriterion)
|
public static function Parse($sBaseOql, $aCriterion, $sHiddenCriteria = null)
|
||||||
{
|
{
|
||||||
$aExpression = array();
|
$aExpression = array();
|
||||||
$aOr = $aCriterion['or'];
|
$aOr = $aCriterion['or'];
|
||||||
@@ -60,14 +62,21 @@ class CriterionParser
|
|||||||
try
|
try
|
||||||
{
|
{
|
||||||
$oSearch = DBObjectSearch::FromOQL($sBaseOql);
|
$oSearch = DBObjectSearch::FromOQL($sBaseOql);
|
||||||
|
|
||||||
|
if (!empty($sHiddenCriteria))
|
||||||
|
{
|
||||||
|
$oHiddenCriteriaExpression = Expression::FromOQL($sHiddenCriteria);
|
||||||
|
$oSearch->AddConditionExpression($oHiddenCriteriaExpression);
|
||||||
|
}
|
||||||
|
|
||||||
if (empty($aExpression))
|
if (empty($aExpression))
|
||||||
{
|
{
|
||||||
return $oSearch;
|
return $oSearch;
|
||||||
}
|
}
|
||||||
|
|
||||||
$oExpression = \Expression::FromOQL(implode(" OR ", $aExpression));
|
$oExpression = Expression::FromOQL(implode(" OR ", $aExpression));
|
||||||
$oSearch->AddConditionExpression($oExpression);
|
$oSearch->AddConditionExpression($oExpression);
|
||||||
|
|
||||||
return $oSearch;
|
return $oSearch;
|
||||||
} catch (OQLException $e)
|
} catch (OQLException $e)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -146,6 +146,7 @@ class SearchForm
|
|||||||
{
|
{
|
||||||
$aListParams['table_inner_id'] = uniqid('table_inner_id_');
|
$aListParams['table_inner_id'] = uniqid('table_inner_id_');
|
||||||
}
|
}
|
||||||
|
// When table_id is different of result_list_outer_selector
|
||||||
if (array_key_exists('table_id2', $aExtraParams))
|
if (array_key_exists('table_id2', $aExtraParams))
|
||||||
{
|
{
|
||||||
$aListParams['table_id'] = $aExtraParams['table_id2'];
|
$aListParams['table_id'] = $aExtraParams['table_id2'];
|
||||||
|
|||||||
Reference in New Issue
Block a user