Fix for #427 implemented into branch 1.1 (delete all team members)

SVN:1.1[1330]
This commit is contained in:
Romain Quetiez
2011-07-05 09:38:04 +00:00
parent f6aeeb0aaa
commit 71d3a9e443
2 changed files with 68 additions and 50 deletions

View File

@@ -2069,59 +2069,34 @@ EOF
/** /**
* Updates the object from the POSTed parameters * Updates the object from the POSTed parameters
*/ */
public function UpdateObject($sFormPrefix = '') public function UpdateObject($sFormPrefix = '', $aAttList = null)
{ {
$aErrors = array(); $aErrors = array();
foreach(MetaModel::ListAttributeDefs(get_class($this)) as $sAttCode=>$oAttDef) if (!is_array($aAttList))
{ {
if ($oAttDef->IsLinkSet() && $oAttDef->IsIndirect()) $aAttList = $this->FlattenZList(MetaModel::GetZListItems(get_class($this), 'details'));
{ // Special case to process the case log, if any...
$aLinks = utils::ReadPostedParam("attr_{$sFormPrefix}{$sAttCode}", null); // WARNING: if you change this also check the functions DisplayModifyForm and DisplayCaseLog
if (is_null($aLinks)) continue; foreach(MetaModel::ListAttributeDefs(get_class($this)) as $sAttCode => $oAttDef)
$sLinkedClass = $oAttDef->GetLinkedClass();
$sExtKeyToRemote = $oAttDef->GetExtKeyToRemote();
$sExtKeyToMe = $oAttDef->GetExtKeyToMe();
$oLinkedSet = DBObjectSet::FromScratch($sLinkedClass);
if (is_array($aLinks))
{
foreach($aLinks as $id => $aData)
{
if (is_numeric($id))
{
if ($id < 0)
{
// New link to be created, the opposite of the id (-$id) is the ID of the remote object
$oLink = MetaModel::NewObject($sLinkedClass);
$oLink->Set($sExtKeyToRemote, -$id);
$oLink->Set($sExtKeyToMe, $this->GetKey());
}
else
{
// Existing link, potentially to be updated...
$oLink = MetaModel::GetObject($sLinkedClass, $id);
}
// Now populate the attributes
foreach($aData as $sName => $value)
{
if (MetaModel::IsValidAttCode($sLinkedClass, $sName))
{
$oLinkAttDef = MetaModel::GetAttributeDef($sLinkedClass, $sName);
if ($oLinkAttDef->IsWritable())
{
$oLink->Set($sName, $value);
}
}
}
$oLinkedSet->AddObject($oLink);
}
}
}
$this->Set($sAttCode, $oLinkedSet);
}
else if ($oAttDef->IsWritable())
{ {
$iFlags = $this->GetAttributeFlags($sAttCode); $iFlags = $this->GetAttributeFlags($sAttCode);
if ($oAttDef instanceof AttributeCaseLog)
{
if (!($iFlags & (OPT_ATT_HIDDEN|OPT_ATT_SLAVE|OPT_ATT_READONLY)))
{
// The case log is editable, append it to the list of fields to retrieve
$aAttList[] = $sAttCode;
}
}
}
}
foreach($aAttList as $sAttCode)
{
$oAttDef = MetaModel::GetAttributeDef(get_class($this), $sAttCode);
$iFlags = $this->GetAttributeFlags($sAttCode);
if ($oAttDef->IsWritable())
{
if ( $iFlags & (OPT_ATT_HIDDEN | OPT_ATT_READONLY)) if ( $iFlags & (OPT_ATT_HIDDEN | OPT_ATT_READONLY))
{ {
// Non-visible, or read-only attribute, do nothing // Non-visible, or read-only attribute, do nothing
@@ -2134,6 +2109,49 @@ EOF
$aErrors[] = Dict::Format('UI:AttemptingToSetASlaveAttribute_Name', $oAttDef->GetLabel()); $aErrors[] = Dict::Format('UI:AttemptingToSetASlaveAttribute_Name', $oAttDef->GetLabel());
} }
} }
elseif ($oAttDef->IsLinkSet() && $oAttDef->IsIndirect())
{
$aLinks = utils::ReadPostedParam("attr_{$sFormPrefix}{$sAttCode}", null);
$sLinkedClass = $oAttDef->GetLinkedClass();
$sExtKeyToRemote = $oAttDef->GetExtKeyToRemote();
$sExtKeyToMe = $oAttDef->GetExtKeyToMe();
$oLinkedSet = DBObjectSet::FromScratch($sLinkedClass);
if (is_array($aLinks))
{
foreach($aLinks as $id => $aData)
{
if (is_numeric($id))
{
if ($id < 0)
{
// New link to be created, the opposite of the id (-$id) is the ID of the remote object
$oLink = MetaModel::NewObject($sLinkedClass);
$oLink->Set($sExtKeyToRemote, -$id);
$oLink->Set($sExtKeyToMe, $this->GetKey());
}
else
{
// Existing link, potentially to be updated...
$oLink = MetaModel::GetObject($sLinkedClass, $id);
}
// Now populate the attributes
foreach($aData as $sName => $value)
{
if (MetaModel::IsValidAttCode($sLinkedClass, $sName))
{
$oLinkAttDef = MetaModel::GetAttributeDef($sLinkedClass, $sName);
if ($oLinkAttDef->IsWritable())
{
$oLink->Set($sName, $value);
}
}
}
$oLinkedSet->AddObject($oLink);
}
}
}
$this->Set($sAttCode, $oLinkedSet);
}
elseif ($oAttDef->GetEditClass() == 'Document') elseif ($oAttDef->GetEditClass() == 'Document')
{ {
// There should be an uploaded file with the named attr_<attCode> // There should be an uploaded file with the named attr_<attCode>

View File

@@ -456,9 +456,9 @@ EOF
return parent::GetAttributeFlags($sAttCode, $aReasons); return parent::GetAttributeFlags($sAttCode, $aReasons);
} }
public function UpdateObject($sFormPrefix = '') public function UpdateObject($sFormPrefix = '', $sAttList = null)
{ {
parent::UpdateObject($sFormPrefix); parent::UpdateObject($sFormPrefix, $sAttList);
// And now read the other post parameters... // And now read the other post parameters...
$oAttributeSet = $this->Get('attribute_list'); $oAttributeSet = $this->Get('attribute_list');
$aAttributes = array(); $aAttributes = array();