diff --git a/application/utils.inc.php b/application/utils.inc.php index b1f2d2160..4d7aa7038 100644 --- a/application/utils.inc.php +++ b/application/utils.inc.php @@ -1090,5 +1090,28 @@ class utils } return $response; } + + /** + * Get a standard list of character sets + * + * @param array $aAdditionalEncodings Additional values + * @return array of iconv code => english label, sorted by label + */ + public static function GetPossibleEncodings($aAdditionalEncodings = array()) + { + // Encodings supported: + // ICONV_CODE => Display Name + // Each iconv installation supports different encodings + // Some reasonably common and useful encodings are listed here + $aPossibleEncodings = array( + 'UTF-8' => 'Unicode (UTF-8)', + 'ISO-8859-1' => 'Western (ISO-8859-1)', + 'WINDOWS-1251' => 'Cyrilic (Windows 1251)', + 'WINDOWS-1252' => 'Western (Windows 1252)', + 'ISO-8859-15' => 'Western (ISO-8859-15)', + ); + $aPossibleEncodings = array_merge($aPossibleEncodings, $aAdditionalEncodings); + asort($aPossibleEncodings); + return $aPossibleEncodings; + } } -?> diff --git a/core/csvbulkexport.class.inc.php b/core/csvbulkexport.class.inc.php index bc9d7ad90..409c58d1b 100644 --- a/core/csvbulkexport.class.inc.php +++ b/core/csvbulkexport.class.inc.php @@ -30,7 +30,7 @@ class CSVBulkExport extends TabularBulkExport $oP->p(" * csv format options:"); $oP->p(" *\tfields: (mandatory) the comma separated list of field codes to export (e.g: name,org_id,service_name...)."); $oP->p(" *\tseparator: (optional) character to be used as the separator (default is ',')."); - $oP->p(" *\tcharacter-set: (optional) character set for encoding the result (default is 'UTF-8')."); + $oP->p(" *\tcharset: (optional) character set for encoding the result (default is 'UTF-8')."); $oP->p(" *\ttext-qualifier: (optional) character to be used around text strings (default is '\"')."); $oP->p(" *\tno_localize: set to 1 to retrieve non-localized values (for instance for ENUM values). Default is 0 (= localized values)"); } @@ -54,7 +54,7 @@ class CSVBulkExport extends TabularBulkExport $this->aStatusInfo['text_qualifier'] = utils::ReadParam('other-text-qualifier', '"', true, 'raw_data'); } $this->aStatusInfo['localize'] = !((bool)utils::ReadParam('no_localize', 0, true, 'integer')); - $this->aStatusInfo['charset'] = strtoupper(utils::ReadParam('character-set', 'UTF-8', true, 'raw_data')); + $this->aStatusInfo['charset'] = strtoupper(utils::ReadParam('charset', 'UTF-8', true, 'raw_data')); } @@ -79,7 +79,7 @@ class CSVBulkExport extends TabularBulkExport public function EnumFormParts() { - return array_merge(parent::EnumFormParts(), array('csv_options' => array('separator', 'character-set', 'text-qualifier', 'no_localize') ,'interactive_fields_csv' => array('interactive_fields_csv'))); + return array_merge(parent::EnumFormParts(), array('csv_options' => array('separator', 'charset', 'text-qualifier', 'no_localize') ,'interactive_fields_csv' => array('interactive_fields_csv'))); } public function DisplayFormPart(WebPage $oP, $sPartId) @@ -141,6 +141,22 @@ class CSVBulkExport extends TabularBulkExport $oP->add(''); $oP->add('

'.Dict::S('Core:BulkExport:CSVLocalization').'

'); $oP->add(''); + $oP->add('
'); + $oP->add('
'); + $oP->add(Dict::S('UI:CSVImport:Encoding').': '); + $oP->add(''); $oP->add(''); @@ -201,16 +217,18 @@ class CSVBulkExport extends TabularBulkExport default: $oAttDef = MetaModel::GetAttributeDef($sClass, $sAttCode); - if ($oAttDef instanceof AttributeExternalField) + if (($oAttDef instanceof AttributeExternalField) || (($oAttDef instanceof AttributeFriendlyName) && ($oAttDef->GetKeyAttCode() != 'id'))) { + $oKeyAttDef = MetaModel::GetAttributeDef($sClass, $oAttDef->GetKeyAttCode()); + $oExtAttDef = MetaModel::GetAttributeDef($oKeyAttDef->GetTargetClass(), $oAttDef->GetExtAttCode()); if ($this->aStatusInfo['localize']) { $sStar = $oAttDef->IsNullAllowed() ? '' : '*'; - $sLabel = $oAttDef->GetKeyAttDef()->GetLabel().$sStar.'->'.$oAttDef->GetExtAttDef()->GetLabel(); + $sLabel = $oKeyAttDef->GetLabel().$sStar.'->'.$oExtAttDef->GetLabel(); } else { - $sLabel = $oAttDef->GetKeyAttDef()->GetCode().'->'.$oAttDef->GetExtAttDef()->GetCode(); + $sLabel = $oKeyAttDef->GetCode().'->'.$oExtAttDef->GetCode(); } } else diff --git a/pages/csvimport.php b/pages/csvimport.php index 58a2e6745..1c4d5af6d 100644 --- a/pages/csvimport.php +++ b/pages/csvimport.php @@ -1313,23 +1313,6 @@ EOF */ function Welcome(iTopWebPage $oPage) { - // Encodings supported: - // ICONV_CODE => Display Name - // Each iconv installation supports different encodings - // Some reasonably common and useful encodnings are listed here - $aPossibleEncodings = array( - 'UTF-8' => 'Unicode (UTF-8)', - 'ISO-8859-1' => 'Western (ISO-8859-1)', - 'WINDOWS-1251' => 'Cyrilic (Windows 1251)', - 'WINDOWS-1252' => 'Western (Windows 1252)', - 'ISO-8859-15' => 'Western (ISO-8859-15)', - ); - // Some more encodings can be specified in the config file - $aExtraCharsets = MetaModel::GetConfig()->GetCSVImportCharsets(); - - $aPossibleEncodings = array_merge($aPossibleEncodings, $aExtraCharsets); - asort($aPossibleEncodings); - $sSynchroScope = utils::ReadParam('synchro_scope', '', false, 'raw_data'); if (!empty($sSynchroScope)) { @@ -1365,7 +1348,8 @@ EOF '

'; $sFileLoadHtml .= '

'.Dict::S('UI:CSVImport:Encoding').': '; - $sFileLoadHtml .= ''; // IE 8 has some troubles if the font is different + $aPossibleEncodings = utils::GetPossibleEncodings(MetaModel::GetConfig()->GetCSVImportCharsets()); foreach($aPossibleEncodings as $sIconvCode => $sDisplayName ) { $sSelected = '';