From e54d6ecc128ad348eccb5bcdab3c2f7ec06afa67 Mon Sep 17 00:00:00 2001 From: Denis Flaven Date: Mon, 14 Oct 2013 15:36:49 +0000 Subject: [PATCH] #777 mandatory fields that are external keys are now displayed with a star before the arrow: ExtkeyName*->ReconciliationField. In import the old syntax is supported as well. SVN:trunk[2908] --- application/cmdbabstract.class.inc.php | 7 +------ core/metamodel.class.php | 11 +++++++---- pages/ajax.csvimport.php | 15 ++++++++------- webservices/import.php | 8 +++++++- 4 files changed, 23 insertions(+), 18 deletions(-) diff --git a/application/cmdbabstract.class.inc.php b/application/cmdbabstract.class.inc.php index bc4603ec1..9378e6d32 100644 --- a/application/cmdbabstract.class.inc.php +++ b/application/cmdbabstract.class.inc.php @@ -1041,12 +1041,7 @@ abstract class cmdbAbstractObject extends CMDBObject implements iDisplay } foreach($aList[$sAlias] as $sAttCodeEx => $oAttDef) { - $sStar = ''; - if (!$oAttDef->IsNullAllowed() && isset($aParams['showMandatoryFields'])) - { - $sStar = '*'; - } - $aHeader[] = ($bLocalize ? MetaModel::GetLabel($sClassName, $sAttCodeEx) : $sAttCodeEx).$sStar; + $aHeader[] = $bLocalize ? MetaModel::GetLabel($sClassName, $sAttCodeEx, isset($aParams['showMandatoryFields'])) : $sAttCodeEx; } } $sHtml = implode($sSeparator, $aHeader)."\n"; diff --git a/core/metamodel.class.php b/core/metamodel.class.php index 0754c41dc..87ed1d53e 100644 --- a/core/metamodel.class.php +++ b/core/metamodel.class.php @@ -913,9 +913,10 @@ abstract class MetaModel * Get the attribute label * @param string sClass Persistent class * @param string sAttCodeEx Extended attribute code: attcode[->attcode] + * @param bool $bShowMandatory If true, add a star character (at the end or before the ->) to show that the field is mandatory * @return string A user friendly format of the string: AttributeName or AttributeName->ExtAttributeName */ - public static function GetLabel($sClass, $sAttCodeEx) + public static function GetLabel($sClass, $sAttCodeEx, $bShowMandatory = false) { $sLabel = ''; if (preg_match('/(.+)->(.+)/', $sAttCodeEx, $aMatches) > 0) @@ -923,16 +924,17 @@ abstract class MetaModel $sAttribute = $aMatches[1]; $sField = $aMatches[2]; $oAttDef = MetaModel::GetAttributeDef($sClass, $sAttribute); + $sMandatory = ($bShowMandatory && !$oAttDef->IsNullAllowed()) ? '*' : ''; if ($oAttDef->IsExternalKey()) { $sTargetClass = $oAttDef->GetTargetClass(); $oTargetAttDef = MetaModel::GetAttributeDef($sTargetClass, $sField); - $sLabel = $oAttDef->GetLabel().'->'.$oTargetAttDef->GetLabel(); + $sLabel = $oAttDef->GetLabel().$sMandatory.'->'.$oTargetAttDef->GetLabel(); } else { // Let's return something displayable... but this should never happen! - $sLabel = $oAttDef->GetLabel().'->'.$aMatches[2]; + $sLabel = $oAttDef->GetLabel().$sMandatory.'->'.$aMatches[2]; } } else @@ -944,7 +946,8 @@ abstract class MetaModel else { $oAttDef = MetaModel::GetAttributeDef($sClass, $sAttCodeEx); - $sLabel = $oAttDef->GetLabel(); + $sMandatory = ($bShowMandatory && !$oAttDef->IsNullAllowed()) ? '*' : ''; + $sLabel = $oAttDef->GetLabel().$sMandatory; } } return $sLabel; diff --git a/pages/ajax.csvimport.php b/pages/ajax.csvimport.php index 29227de1e..cecc8265f 100644 --- a/pages/ajax.csvimport.php +++ b/pages/ajax.csvimport.php @@ -113,6 +113,12 @@ function GetMappingForField($sClassName, $sFieldName, $iFieldIndex, $bAdvancedMo // A star character at the end can be used to indicate a mandatory field $sFieldName = $aMatches[1]; } + else if (preg_match('/^(.+)\*->(.+)$/', $sFieldName, $aMatches)) + { + // Remove any trailing "star" character before the arrow (->) + // A star character at the end can be used to indicate a mandatory field + $sFieldName = $aMatches[1].'->'.$aMatches[2]; + } if ($sFieldName == 'id') { $sFieldCode = 'id'; @@ -155,7 +161,7 @@ function GetMappingForField($sClassName, $sFieldName, $iFieldIndex, $bAdvancedMo { // When not in advanced mode do not allow to use reconciliation keys (on external keys) if they are themselves external keys ! - $aChoices[$sAttCode.'->'.$sTargetAttCode] = $oAttDef->GetLabel().'->'.$oTargetAttDef->GetLabel().$sSuffix.$sStar; + $aChoices[$sAttCode.'->'.$sTargetAttCode] = MetaModel::GetLabel($sClassName, $sAttCode.'->'.$sTargetAttCode, true); if ((strcasecmp($sFieldName, $oAttDef->GetLabel().'->'.$oTargetAttDef->GetLabel().$sSuffix) == 0) || (strcasecmp($sFieldName, ($sAttCode.'->'.$sTargetAttCode.$sSuffix)) == 0) ) { $sFieldCode = $sAttCode.'->'.$sTargetAttCode; @@ -166,12 +172,7 @@ function GetMappingForField($sClassName, $sFieldName, $iFieldIndex, $bAdvancedMo } else if ($oAttDef->IsWritable() && (!$oAttDef->IsLinkset() || ($bAdvancedMode && $oAttDef->IsIndirect()))) { - - if (!$oAttDef->IsNullAllowed()) - { - $sStar = '*'; - } - $aChoices[$sAttCode] = $oAttDef->GetLabel().$sStar; + $aChoices[$sAttCode] = MetaModel::GetLabel($sClassName, $sAttCode, true); if ( ($sFieldName == $oAttDef->GetLabel()) || ($sFieldName == $sAttCode)) { $sFieldCode = $sAttCode; diff --git a/webservices/import.php b/webservices/import.php index 60f0a6aba..ce09f1e2b 100644 --- a/webservices/import.php +++ b/webservices/import.php @@ -463,6 +463,12 @@ try // Ignore any trailing "star" (*) that simply indicates a mandatory field $sFieldName = $aMatches[1]; } + else if (preg_match('/^(.+)\*->(.+)$/', $sFieldName, $aMatches)) + { + // Remove any trailing "star" character before the arrow (->) + // A star character at the end can be used to indicate a mandatory field + $sFieldName = $aMatches[1].'->'.$aMatches[2]; + } if (array_key_exists(strtolower($sFieldName), $aKnownColumnNames)) { $aColumns = $aKnownColumnNames[strtolower($sFieldName)]; @@ -481,7 +487,7 @@ try { // Protect against XSS injection $sSafeName = str_replace(array('"', '<', '>'), '', $sFieldName); - throw new BulkLoadException("Unknown column: '$sSafeName'"); + throw new BulkLoadException("Unknown column: '$sSafeName'. Possible columns: ".implode(', ', array_keys($aKnownColumnNames))); } } // Note: at this stage the list of fields is supposed to be made of attcodes (and the symbol '->')