diff --git a/core/metamodel.class.php b/core/metamodel.class.php index b165340ad..230d4df06 100644 --- a/core/metamodel.class.php +++ b/core/metamodel.class.php @@ -918,6 +918,20 @@ abstract class MetaModel return self::$m_aAttribOrigins[$sClass][$sAttCode]; } + /** + * @deprecated + * @param string $sClass + * @param string $sAttCode + * + * @return mixed + * @throws \CoreException + */ + final static public function GetFilterCodeOrigin($sClass, $sAttCode) + { + self::_check_subclass($sClass); + return self::$m_aFilterOrigins[$sClass][$sAttCode]; + } + /** * @param string $sClass * @param string $sAttCode diff --git a/core/oqlactualclasstreeresolver.class.inc.php b/core/oqlactualclasstreeresolver.class.inc.php index ca2cb72a1..96fb87ac1 100644 --- a/core/oqlactualclasstreeresolver.class.inc.php +++ b/core/oqlactualclasstreeresolver.class.inc.php @@ -64,11 +64,20 @@ class OQLActualClassTreeResolver $aTranslateFields = array(); foreach ($aExpectedAttributes as $sAttCode => $oExpression) { - if (!MetaModel::IsValidAttCode($sClass, $sAttCode)) + // Attributes can be stored in attributes list or for magic ones into filter codes list. + $sOriginClass = null; + if (MetaModel::IsValidFilterCode($sClass, $sAttCode)) + { + $sOriginClass = MetaModel::GetFilterCodeOrigin($sClass, $sAttCode); + } + else if (MetaModel::IsValidAttCode($sClass, $sAttCode)) + { + $sOriginClass = MetaModel::GetAttributeOrigin($sClass, $sAttCode); + } + else { continue; } - $sOriginClass = MetaModel::GetAttributeOrigin($sClass, $sAttCode); if (is_null($aClassAndAncestorsNodes[$sOriginClass])) { if ($sOriginClass == $sClass) @@ -198,4 +207,4 @@ class OQLActualClassTreeResolver } } } -} \ No newline at end of file +}