Index: trunk/kernel/include/custommetadata.php =================================================================== diff -u -r766 -r2497 --- trunk/kernel/include/custommetadata.php (.../custommetadata.php) (revision 766) +++ trunk/kernel/include/custommetadata.php (.../custommetadata.php) (revision 2497) @@ -115,25 +115,28 @@ $index = $this->GetDataItem($FieldId, true); if($index !== false) + { $d =& $this->Items[$index]; + } else + { $d = null; + } if(is_object($d)) { - $d->Set("Value",$Value); + $d->Set('Value', $Value); if(!strlen($Value)) { for($x=0;$xItems);$x++) { - if($this->Items[$x]->Get("CustomFieldId")==$FieldId && - $this->Items[$x]->Get("ResourceId")==$ResourceId) + if($this->Items[$x]->Get("CustomFieldId") == $FieldId && $this->Items[$x]->Get("ResourceId") == $ResourceId) { $this->Items[$x]->Set("CustomFieldId",0); break; } } - $d->Delete(); + $d->Delete(true); } } else @@ -176,19 +179,25 @@ $value = $f->Get("Value"); $ResId = $f->Get("ResourceId"); $DataId = $f->Get("CustomDataId"); + + if($FieldId > 0) + { if(is_numeric($DataId)) { $sql = "UPDATE ".$this->SourceTable." SET Value='".$value."' WHERE CustomFieldId='$FieldId' AND ResourceId='$ResId'"; $this->adodbConnection->Execute($sql); } else { - if($FieldId>0) - { $sql = "INSERT INTO ".$this->SourceTable." (ResourceId,CustomFieldId,Value) VALUES ('".$ResId."','$FieldId','$value')"; $this->adodbConnection->Execute($sql); } } + else + { + $sql = 'DELETE FROM '.$this->SourceTable.' WHERE CustomDataId = '.$DataId; + $this->adodbConnection->Execute($sql); + } } $rs = $this->adodbConnection->Execute("SELECT * FROM ".$this->SourceTable." WHERE CustomDataId=0 "); @@ -226,7 +235,7 @@ } - function CopyFromEditTable($ResourceId) + function CopyFromEditTable($idfield, $ResourceIds) { global $objSession; $GLOBALS['_CopyFromEditTable']=1; @@ -242,12 +251,10 @@ while($rs && !$rs->EOF) { $data = $rs->fields; - $c = $this->AddItemFromArray($data); - if(strlen($data["Value"])>0) - { + $c->Dirty(); - if($data["CustomDataId"]>0) + if($data[$idfield]>0) { $c->Update(); @@ -257,16 +264,14 @@ $c->UnsetIdField(); $c->Create(); } - $idlist[] = $c->Get("CustomDataId"); - } - else - { - $sql = "DELETE FROM ".$this->SourceTable." WHERE ResourceId=".$data["ResourceId"]." AND CustomFieldId=".$data["CustomFieldId"]; - //echo $sql."
\n"; - $this->adodbConnection->Execute($sql); - } + $idlist[] = $c->Get($idfield); + $rs->MoveNext(); } + + $sql = "DELETE FROM ".$this->SourceTable." WHERE ResourceId IN (".implode(',', $ResourceIds).') '.(count($idlist) > 0 ? "AND $idfield NOT IN (".implode(",",$idlist).")" : ""); + $this->adodbConnection->Execute($sql); + @$this->adodbConnection->Execute("DROP TABLE IF EXISTS $edit_table"); unset($GLOBALS['_CopyFromEditTable']); }