Bläddra i källkod

Export/CSV:
- Select the Character encoding (argument for CLI mode: charset)
- Make the correct column name for friendly names (ext key -> ext field)

git-svn-id: http://svn.code.sf.net/p/itop/code/trunk@3681 a333f486-631f-4898-b8df-5754b55c2be0

romainq 9 år sedan
förälder
incheckning
412766a151
3 ändrade filer med 50 tillägg och 25 borttagningar
  1. 24 1
      application/utils.inc.php
  2. 24 6
      core/csvbulkexport.class.inc.php
  3. 2 18
      pages/csvimport.php

+ 24 - 1
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;
+	}
 }
-?>

+ 24 - 6
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('</td><td style="vertical-align:top">');
 				$oP->add('<h3>'.Dict::S('Core:BulkExport:CSVLocalization').'</h3>');
 				$oP->add('<input type="checkbox" id="csv_no_localize" name="no_localize" value="1"'.$sChecked.'><label for="csv_no_localize"> '.Dict::S('Core:BulkExport:OptionNoLocalize').'</label>');
+				$oP->add('<br/>');
+				$oP->add('<br/>');
+				$oP->add(Dict::S('UI:CSVImport:Encoding').': <select name="charset" style="font-family:Arial,Helvetica,Sans-serif">'); // IE 8 has some troubles if the font is different
+				$aPossibleEncodings = utils::GetPossibleEncodings(MetaModel::GetConfig()->GetCSVImportCharsets());
+				$sDefaultEncoding = MetaModel::GetConfig()->Get('csv_file_default_charset');
+				foreach($aPossibleEncodings as $sIconvCode => $sDisplayName )
+				{
+					$sSelected  = '';
+					if ($sIconvCode == $sDefaultEncoding)
+					{
+						$sSelected = ' selected';
+					}
+					$oP->add('<option value="'.$sIconvCode.'"'.$sSelected.'>'.$sDisplayName.'</option>');
+				}
+				$oP->add('</select>');
+
 				$oP->add('</td></tr></table>');
 				
 				$oP->add('</fieldset>');
@@ -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

+ 2 - 18
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
 				'<p><input type="file" name="csvdata"/></p>';
 				
 		$sFileLoadHtml .= '<p>'.Dict::S('UI:CSVImport:Encoding').': ';
-		$sFileLoadHtml .= '<select name="encoding" style="font-family:Arial,Helvetica,Sans-serif"/>'; // IE 8 has some troubles if the font is different
+		$sFileLoadHtml .= '<select name="encoding" style="font-family:Arial,Helvetica,Sans-serif">'; // IE 8 has some troubles if the font is different
+		$aPossibleEncodings = utils::GetPossibleEncodings(MetaModel::GetConfig()->GetCSVImportCharsets());
 		foreach($aPossibleEncodings as $sIconvCode => $sDisplayName )
 		{
 			$sSelected  = '';