From 35c57bb10c60843f7c92fdc38fd5ced0bc552bab Mon Sep 17 00:00:00 2001 From: Romain Quetiez Date: Wed, 26 Aug 2015 09:41:32 +0000 Subject: [PATCH] Export/XML: documented options (no_localize / linksets) + added external fields and friendly name for the external keys, both on the exported objects and the links (linkets=1) SVN:trunk[3697] --- core/attributedef.class.inc.php | 5 ++-- core/xmlbulkexport.class.inc.php | 49 +++++++++++++++++++++----------- 2 files changed, 35 insertions(+), 19 deletions(-) diff --git a/core/attributedef.class.inc.php b/core/attributedef.class.inc.php index d59599280..d7aa300f2 100644 --- a/core/attributedef.class.inc.php +++ b/core/attributedef.class.inc.php @@ -749,8 +749,9 @@ class AttributeLinkedSet extends AttributeDefinition } } if ($sAttCode == $this->GetExtKeyToMe()) continue; - if ($oAttDef->IsExternalField()) continue; - if (!$oAttDef->IsDirectField()) continue; + if ($oAttDef->IsExternalField() && ($oAttDef->GetKeyAttCode() == $this->GetExtKeyToMe())) continue; + if (($oAttDef instanceof AttributeFriendlyName) && ($oAttDef->GetKeyAttCode() == $this->GetExtKeyToMe())) continue; + if (($oAttDef instanceof AttributeFriendlyName) && ($oAttDef->GetKeyAttCode() == 'id')) continue; if (!$oAttDef->IsScalar()) continue; $sAttValue = $oObj->GetAsXML($sAttCode, $bLocalize); $sRes .= "<$sAttCode>$sAttValue\n"; diff --git a/core/xmlbulkexport.class.inc.php b/core/xmlbulkexport.class.inc.php index 6b2a24e0d..184a02dd9 100644 --- a/core/xmlbulkexport.class.inc.php +++ b/core/xmlbulkexport.class.inc.php @@ -28,7 +28,8 @@ class XMLBulkExport extends BulkExport public function DisplayUsage(Page $oP) { $oP->p(" * xml format options:"); - $oP->p(" *\tThere are no options for the XML format."); + $oP->p(" *\tno_localize: set to 1 to retrieve non-localized values (for instance for ENUM values). Default is 0 (= localized values)"); + $oP->p(" *\tlinksets: set to 1 to retrieve links to related objects (1-N or N-N relations). Default is 0 (= only scalar fields)"); } public function EnumFormParts() @@ -86,7 +87,7 @@ class XMLBulkExport extends BulkExport $oSet = new DBObjectSet($this->oSearch); $this->aStatusInfo['position'] = 0; $this->aStatusInfo['total'] = $oSet->Count(); - $sData = "<"."?xml version=\"1.0\" encoding=\"UTF-8\"?>\n\n"; + $sData = "<"."?xml version=\"1.0\" encoding=\"UTF-8\"?".">\n\n"; return $sData; } @@ -105,16 +106,39 @@ class XMLBulkExport extends BulkExport $aClasses = $this->oSearch->GetSelectedClasses(); $aAuthorizedClasses = array(); + $aClass2Attributes = array(); foreach($aClasses as $sAlias => $sClassName) { if (UserRights::IsActionAllowed($sClassName, UR_ACTION_BULK_READ, $oSet) && (UR_ALLOWED_YES || UR_ALLOWED_DEPENDS)) { $aAuthorizedClasses[$sAlias] = $sClassName; + $aAttributes = array(); + foreach(MetaModel::ListAttributeDefs($sClassName) as $sAttCode=>$oAttDef) + { + if ($oAttDef->IsLinkSet() && !$this->aStatusInfo['linksets']) + { + continue; + } + if (!$oAttDef->IsWritable()) + { + continue; + } + $aAttributes[$sAttCode] = $oAttDef; + if ($oAttDef->IsExternalKey()) + { + foreach(MetaModel::ListAttributeDefs($sClassName) as $sSubAttCode=>$oSubAttDef) + { + if ($oSubAttDef->IsExternalField() && ($oSubAttDef->GetKeyAttCode() == $sAttCode)) + { + $aAttributes[$sAttCode.'_friendlyname'] = MetaModel::GetAttributeDef($sClassName, $sAttCode.'_friendlyname'); + $aAttributes[$sSubAttCode] = $oSubAttDef; + } + } + } + } + $aClass2Attributes[$sAlias] = $aAttributes; } } - $aAttribs = array(); - $aList = array(); - $aList[$sAlias] = MetaModel::GetZListItems($sClassName, 'details'); $iPreviousTimeLimit = ini_get('max_execution_time'); $iLoopTimeLimit = MetaModel::GetConfig()->Get('max_execution_time_per_loop'); @@ -138,25 +162,16 @@ class XMLBulkExport extends BulkExport $sClassName = get_class($oObj); $sData .= "<$sClassName alias=\"$sAlias\" id=\"".$oObj->GetKey()."\">\n"; } - foreach(MetaModel::ListAttributeDefs($sClassName) as $sAttCode=>$oAttDef) + foreach($aClass2Attributes[$sAlias] as $sAttCode=>$oAttDef) { - if ($oAttDef->IsLinkSet() && !$this->aStatusInfo['linksets']) - { - // Skip link sets - continue; - } - if (is_null($oObj)) { $sData .= "<$sAttCode>null\n"; } else { - if ($oAttDef->IsWritable() ) - { - $sValue = $oObj->GetAsXML($sAttCode, $bLocalize); - $sData .= "<$sAttCode>$sValue\n"; - } + $sValue = $oObj->GetAsXML($sAttCode, $bLocalize); + $sData .= "<$sAttCode>$sValue\n"; } } $sData .= "\n";