N°5221 - DG Form: display related URs without the scope and its flag <ignore_silo>

This commit is contained in:
Anne-Cath
2025-11-27 12:00:22 +01:00
parent 03e25a226e
commit cf1eb4da61
3 changed files with 23 additions and 2 deletions

View File

@@ -52,6 +52,8 @@ class ormLinkSet implements iDBObjectSetIterator, Iterator, SeekableIterator
*/
protected $bHasDelta = false;
protected $bAllowAllData = false;
/**
* Object from the original set, minus the removed objects
* @var DBObject[] array of iObjectId => DBObject
@@ -118,6 +120,11 @@ class ormLinkSet implements iDBObjectSetIterator, Iterator, SeekableIterator
return clone $this->oOriginalSet->GetFilter();
}
public function AllowAllData(): void
{
$this->bAllowAllData = true;
}
/**
* Specify the subset of attributes to load (for each class of objects) before performing the SQL query for retrieving the rows from the DB
*
@@ -309,6 +316,7 @@ class ormLinkSet implements iDBObjectSetIterator, Iterator, SeekableIterator
return $ret;
}
/**
* Return the current element
*
@@ -329,7 +337,7 @@ class ormLinkSet implements iDBObjectSetIterator, Iterator, SeekableIterator
$iPreservedCount = count($this->aPreserved);
if ($this->iCursor < $iPreservedCount) {
$sId = key($this->aPreserved);
$oRet = MetaModel::GetObject($this->sClass, $sId);
$oRet = MetaModel::GetObject($this->sClass, $sId, true, $this->bAllowAllData);
} else {
$iModifiedCount = count($this->aModified);
if ($this->iCursor < $iPreservedCount + $iModifiedCount) {

View File

@@ -365,6 +365,9 @@ class ObjectFormManager extends FormManager
}
$oAttDef = MetaModel::GetAttributeDef(get_class($this->oObject), $sAttCode);
if ($oAttDef instanceof \AttributeLinkedSet && array_key_exists($sAttCode, $this->aExtraData) && array_key_exists('ignore_scopes', $this->aExtraData[$sAttCode])) {
$oAttDef->AllowAllData();
}
/** @var Field $oField */
$oField = null;
@@ -572,7 +575,11 @@ class ObjectFormManager extends FormManager
$aLimitedAccessItemIDs = [];
/** @var \ormLinkSet $oFieldOriginalSet */
$oFieldOriginalSet = $oField->GetCurrentValue();
if (array_key_exists($sAttCode, $this->aExtraData) && array_key_exists('ignore_scopes', $this->aExtraData[$sAttCode])) {
$oFieldOriginalSet->AllowAllData();
}
foreach ($oFieldOriginalSet as $oLink) {
if ($oField->IsIndirect()) {
$iRemoteKey = $oLink->Get($oAttDef->GetExtKeyToRemote());

View File

@@ -32,6 +32,7 @@ use ValueSetObjects;
*/
class AttributeLinkedSet extends AttributeDefinition
{
public $bAllowAllData = false;
/**
* Useless constructor, but if not present PHP 7.4.0/7.4.1 is crashing :( (N°2329)
*
@@ -50,6 +51,11 @@ class AttributeLinkedSet extends AttributeDefinition
$this->aCSSClasses[] = 'attribute-set';
}
public function AllowAllData()
{
$this->bAllowAllData = true;
}
public static function ListExpectedParams()
{
return array_merge(
@@ -89,7 +95,7 @@ class AttributeLinkedSet extends AttributeDefinition
$oValSetDef = $this->Get("allowed_values");
if (!$oValSetDef) {
// Let's propose every existing value
$oValSetDef = new ValueSetObjects('SELECT '.LinkSetModel::GetTargetClass($this));
$oValSetDef = new ValueSetObjects('SELECT '.LinkSetModel::GetTargetClass($this), '', [], $this->bAllowAllData);
}
return $oValSetDef;