N°3294 - Introduce counters in OQL menu entries (fix when silo changes)

This commit is contained in:
Eric
2021-01-22 11:19:06 +01:00
parent 46b4990252
commit 01006e55c0
2 changed files with 31 additions and 22 deletions

View File

@@ -181,6 +181,7 @@ class DisplayBlock
/** bool open by default the search */
'class', /** class name */
'search_header_force_dropdown', /** Html for <select> to choose the class to search */
'this',
], DataTableUIBlockFactory::GetAllowedParams()),
'search' => array_merge([
'baseClass',

View File

@@ -1157,33 +1157,41 @@ class OQLMenuNode extends MenuNode
public function GetEntriesCount()
{
// Count the entries up to 99
$oFilter = DBSearch::FromOQL($this->sOQL);
$oAppContext = new ApplicationContext();
$iCurrentOrganization = $oAppContext->GetCurrentValue('org_id');
$oSearch = DBSearch::FromOQL($this->sOQL);
if( isset($iCurrentOrganization) && $iCurrentOrganization!="" ) {
$aAllowedOrgs[] = intval( $iCurrentOrganization);
$aSettings['bSearchMode'] = true;
$aSelectedClasses = $oFilter->GetSelectedClasses();
foreach ($aSelectedClasses as $sClassAlias => $sClass) {
//MakeSelectFilter($sClass, $aAllowedOrgs, $aSettings = array(), $sAttCode = null)
$sAttCode = $sClass::MapContextParam('org_id');
if(!is_null($sAttCode) && MetaModel::IsValidAttCode($sClass,$sAttCode)) {
$oVisibleObjects = UserRights::MakeSelectFilter($sClass, $aAllowedOrgs, $aSettings, $sAttCode);
if ($oVisibleObjects === false) {
// Make sure this is a valid search object, saying NO for all
$oVisibleObjects = DBObjectSearch::FromEmptySet($sClass);
}
if (is_object($oVisibleObjects)) {
$oVisibleObjects->AllowAllData();
$oFilter = $oFilter->Filter($sClassAlias, $oVisibleObjects);
$oAppContext = new ApplicationContext();
$sClass = $oSearch->GetClass();
foreach ($oAppContext->GetNames() as $key) {
// Find the value of the object corresponding to each 'context' parameter
$aCallSpec = [$sClass, 'MapContextParam'];
$sAttCode = '';
if (is_callable($aCallSpec)) {
$sAttCode = call_user_func($aCallSpec, $key); // Returns null when there is no mapping for this parameter
}
if (MetaModel::IsValidAttCode($sClass, $sAttCode)) {
// Add Hierarchical condition if hierarchical key
$oAttDef = MetaModel::GetAttributeDef($sClass, $sAttCode);
if (isset($oAttDef) && ($oAttDef->IsExternalKey())) {
$defaultValue = intval($oAppContext->GetCurrentValue($key));
try {
/** @var AttributeExternalKey $oAttDef */
$sTargetClass = $oAttDef->GetTargetClass();
$sHierarchicalKeyCode = MetaModel::IsHierarchicalClass($sTargetClass);
if ($sHierarchicalKeyCode !== false) {
$oFilter = new DBObjectSearch($sTargetClass);
$oFilter->AddCondition('id', $defaultValue);
$oHKFilter = new DBObjectSearch($sTargetClass);
$oHKFilter->AddCondition_PointingTo($oFilter, $sHierarchicalKeyCode, TREE_OPERATOR_BELOW);
$oSearch->AddCondition_PointingTo($oHKFilter, $sAttCode);
}
} catch (Exception $e) {
}
}
}
}
$oSet = new DBObjectSet($oFilter);
$oSet = new DBObjectSet($oSearch);
$iCount = $oSet->CountWithLimit(99);
if ($iCount > 99) {
$iCount = "99+";