N°4718 - Remove "FilterCodes" - case of AttributeStopWatch and AttributePassword

This commit is contained in:
Anne-Cath
2025-08-12 15:50:51 +02:00
parent 1458ba877b
commit 2011570b84
2 changed files with 70 additions and 1 deletions

View File

@@ -955,6 +955,11 @@ abstract class AttributeDefinition
//abstract protected GetBasicFilterHTMLInput();
abstract public function GetBasicFilterSQLExpr($sOpCode, $value);
public function GetMagicAttributes()
{
return [];
}
public function GetEditValue($sValue, $oHostObj = null)
{
return (string)$sValue;
@@ -9084,6 +9089,24 @@ class AttributeStopWatch extends AttributeDefinition
return $aColumns;
}
public function GetMagicAttributes()
{
$aRes =[
$this->GetCode().'_started' ,
$this->GetCode().'_laststart',
$this->GetCode().'_stopped' ,
];
foreach ($this->ListThresholds() as $iThreshold => $aFoo) {
$sPrefix = $this->GetCode().'_'.$iThreshold;
$aRes[] = $sPrefix.'_deadline';
$aRes[] = $sPrefix.'_passed';
$aRes[] = $sPrefix.'_triggered';
$aRes[] = $sPrefix.'_overrun';
}
return $aRes;
}
public function GetBasicFilterOperators()
{
return array();

View File

@@ -1493,6 +1493,18 @@ abstract class MetaModel
final public static function GetFiltersList($sClass)
{
$aFilterList = MetaModel::GetAttributesList($sClass);
if (array_key_exists($sClass, self::$m_aFilterForbiddenAttributes)) {
// Remove the attributes that are not allowed in filters
foreach (self::$m_aFilterForbiddenAttributes[$sClass] as $sAttCode) {
if (array_key_exists($sAttCode, $aFilterList)) {
unset($aFilterList[$sAttCode]);
}
}
}
if (array_key_exists($sClass, self::$m_aMagicFields)) {
// Add the magic fields
$aFilterList = array_merge($aFilterList,self::$m_aMagicFields[$sClass]);
}
$aFilterList[] = 'id';
return $aFilterList;
}
@@ -1600,7 +1612,12 @@ abstract class MetaModel
if ($sFilterCode == 'id') {
return true;
}
if (array_key_exists($sClass, self::$m_aMagicFields) && array_key_exists($sFilterCode, self::$m_aMagicFields[$sClass])) {
return true;
}
if (array_key_exists($sClass, self::$m_aFilterForbiddenAttributes) && array_key_exists($sFilterCode, self::$m_aFilterForbiddenAttributes[$sClass])) {
return false;
}
return self::IsValidAttCode($sClass, $sFilterCode);
}
@@ -1882,6 +1899,16 @@ abstract class MetaModel
return "";
}
/**
* @var array array of MagicFieldName
*/
private static $m_aMagicFields = [];
/**
* @var array array of filter Forbidden Attributes
*/
private static $m_aFilterForbiddenAttributes = [];
/**
* @var array array of ("listcode" => various info on the list, common to every classes)
*/
@@ -3050,6 +3077,21 @@ abstract class MetaModel
// Add magic attributes to external keys (finalclass, friendlyname, archive_flag, obsolescence_flag)
foreach (self::GetClasses() as $sClass) {
foreach (self::$m_aAttribDefs[$sClass] as $sAttCode => $oAttDef) {
// Compute the filter codes
//
foreach ($oAttDef->GetMagicFields() as $sCode) {
if(!array_key_exists($sClass, self::$m_aMagicFields)) {
self::$m_aMagicFields[] = $sClass;
}
self::$m_aMagicFields[$sClass][] = $sCode;
}
if(!$oAttDef->IsSearchable()){
if(!array_key_exists($sClass, self::$m_aFilterForbiddenAttributes)) {
self::$m_aFilterForbiddenAttributes[] = $sClass;
}
self::$m_aFilterForbiddenAttributes[$sClass][] = $sCode;
}
// Compute the fields that will be used to display a pointer to another object
//
if ($oAttDef->IsExternalKey(EXTKEY_ABSOLUTE)) {
@@ -6414,6 +6456,8 @@ abstract class MetaModel
self::$m_aAttribDefs = $result['m_aAttribDefs'];
self::$m_aAttribOrigins = $result['m_aAttribOrigins'];
self::$m_aIgnoredAttributes = $result['m_aIgnoredAttributes'];
self::$m_aFilterForbiddenAttributes = $result['m_aFilterForbiddenAttributes'];
self::$m_aMagicFields = $result['m_aMagicFields'];
self::$m_aListInfos = $result['m_aListInfos'];
self::$m_aListData = $result['m_aListData'];
self::$m_aRelationInfos = $result['m_aRelationInfos'];
@@ -6449,6 +6493,8 @@ abstract class MetaModel
$aCache['m_aAttribDefs'] = self::$m_aAttribDefs; // array of ("classname" => array of attributes)
$aCache['m_aAttribOrigins'] = self::$m_aAttribOrigins; // array of ("classname" => array of ("attcode"=>"sourceclass"))
$aCache['m_aIgnoredAttributes'] = self::$m_aIgnoredAttributes; //array of ("classname" => array of ("attcode")
$aCache['m_aFilterForbiddenAttributes'] = self::$m_aFilterForbiddenAttributes; // array of ("classname" => array attributename)
$aCache['m_aMagicFields'] = self::$m_aMagicFields; // array of ("classname" => array fieldname)
$aCache['m_aListInfos'] = self::$m_aListInfos; // array of ("listcode" => various info on the list, common to every classes)
$aCache['m_aListData'] = self::$m_aListData; // array of ("classname" => array of "listcode" => list)
$aCache['m_aRelationInfos'] = self::$m_aRelationInfos; // array of ("relcode" => various info on the list, common to every classes)