Jelajahi Sumber

#991 CSV export truncated (system dependent, since 2.0) due to a bug in iconv, the workaround is to do little by little

git-svn-id: http://svn.code.sf.net/p/itop/code/trunk@3352 a333f486-631f-4898-b8df-5754b55c2be0
romainq 10 tahun lalu
induk
melakukan
82de80cd7f
3 mengubah file dengan 11 tambahan dan 10 penghapusan
  1. 5 4
      application/cmdbabstract.class.inc.php
  2. 3 3
      pages/audit.php
  3. 3 3
      webservices/export.php

+ 5 - 4
application/cmdbabstract.class.inc.php

@@ -941,12 +941,12 @@ abstract class cmdbAbstractObject extends CMDBObject implements iDisplay
 		return $oDataTable->Display($oPage, $oSettings, $bDisplayMenu, $sSelectMode, $bViewLink, $aExtraParams);
 	}
 	
-	static function DisplaySetAsCSV(WebPage $oPage, CMDBObjectSet $oSet, $aParams = array())
+	static function DisplaySetAsCSV(WebPage $oPage, CMDBObjectSet $oSet, $aParams = array(), $sCharset = 'UTF-8')
 	{
-		$oPage->add(self::GetSetAsCSV($oSet, $aParams));
+		$oPage->add(self::GetSetAsCSV($oSet, $aParams, $sCharset));
 	}
 	
-	static function GetSetAsCSV(DBObjectSet $oSet, $aParams = array())
+	static function GetSetAsCSV(DBObjectSet $oSet, $aParams = array(), $sCharset = 'UTF-8')
 	{
 		$sSeparator = isset($aParams['separator']) ? $aParams['separator'] : ','; // default separator is comma
 		$sTextQualifier = isset($aParams['text_qualifier']) ? $aParams['text_qualifier'] : '"'; // default text qualifier is double quote
@@ -1064,7 +1064,8 @@ abstract class cmdbAbstractObject extends CMDBObject implements iDisplay
 					else
 					{
 						$value = $oObj->Get($sAttCodeEx);
-						$aRow[] = $oAttDef->GetAsCSV($value, $sSeparator, $sTextQualifier, $oObj, $bLocalize);
+						$sCSVValue = $oAttDef->GetAsCSV($value, $sSeparator, $sTextQualifier, $oObj, $bLocalize);
+						$aRow[] = iconv('UTF-8', $sCharset.'//IGNORE//TRANSLIT', $sCSVValue);
 					}
 				}
 			}

+ 3 - 3
pages/audit.php

@@ -180,15 +180,15 @@ try
 		if ($sFileName != null)
 		{
 			$oP = new CSVPage("iTop - Export");
-			$sCSVData = cmdbAbstractObject::GetSetAsCSV($oErrorObjectSet, array('localize_values' => true, 'fields_advanced' => $bAdvanced));
 			$sCharset = MetaModel::GetConfig()->Get('csv_file_default_charset');
+			$sCSVData = cmdbAbstractObject::GetSetAsCSV($oErrorObjectSet, array('localize_values' => true, 'fields_advanced' => $bAdvanced), $sCharset);
 			if ($sCharset == 'UTF-8')
 			{
-				$sOutputData = UTF8_BOM.iconv('UTF-8', 'UTF-8//IGNORE//TRANSLIT', $sCSVData);
+				$sOutputData = UTF8_BOM.$sCSVData;
 			}
 			else
 			{
-				$sOutputData = iconv('UTF-8', $sCharset.'//IGNORE//TRANSLIT', $sCSVData);
+				$sOutputData = $sCSVData;
 			}
 			if ($sFileName == '')
 			{

+ 3 - 3
webservices/export.php

@@ -223,15 +223,15 @@ if (!empty($sExpression))
 				case 'csv':
 				$oP = new CSVPage("iTop - Export");
 				$sFields = implode(',', $aFields);
-				$sCSVData = cmdbAbstractObject::GetSetAsCSV($oSet, array('fields' => $sFields, 'fields_advanced' => $bFieldsAdvanced, 'localize_values' => $bLocalize));
 				$sCharset = MetaModel::GetConfig()->Get('csv_file_default_charset');
+				$sCSVData = cmdbAbstractObject::GetSetAsCSV($oSet, array('fields' => $sFields, 'fields_advanced' => $bFieldsAdvanced, 'localize_values' => $bLocalize), $sCharset);
 				if ($sCharset == 'UTF-8')
 				{
-					$sOutputData = UTF8_BOM.iconv('UTF-8', 'UTF-8//IGNORE//TRANSLIT', $sCSVData);
+					$sOutputData = UTF8_BOM.$sCSVData;
 				}
 				else
 				{
-					$sOutputData = iconv('UTF-8', $sCharset.'//IGNORE//TRANSLIT', $sCSVData);
+					$sOutputData = $sCSVData;
 				}
 				if ($sFileName == '')
 				{