Pārlūkot izejas kodu

Date and time format finalization for the exports:
- properly display the date and time as expected in the preview during an interactive export
- differentiate date vs date&time formats in the Excel export
- use the custom format in the default URL provided by the query phrasebook

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

dflaven 9 gadi atpakaļ
vecāks
revīzija
077abf4085

+ 2 - 1
application/itopwebpage.class.inc.php

@@ -98,7 +98,8 @@ class iTopWebPage extends NiceWebPage implements iTabbedPage
 		$this->add_linked_script('../js/jquery.mousewheel.js');
 		$this->add_linked_script('../js/jquery.magnific-popup.min.js');
 		$this->add_linked_script('../js/breadcrumb.js');
-
+		$this->add_linked_script('../js/moment.min.js');
+		
 		
 		$sSearchAny = addslashes(Dict::S('UI:SearchValue:Any'));
 		$sSearchNbSelected = addslashes(Dict::S('UI:SearchValue:NbSelected'));

+ 1 - 1
application/query.class.inc.php

@@ -102,7 +102,7 @@ class QueryOQL extends Query
 			}
 			else 
 			{
-				$sUrl = utils::GetAbsoluteUrlAppRoot().'webservices/export-v2.php?format=spreadsheet&login_mode=basic&query='.$this->GetKey();
+				$sUrl = utils::GetAbsoluteUrlAppRoot().'webservices/export-v2.php?format=spreadsheet&login_mode=basic&date_format='.urlencode((string)AttributeDateTime::GetFormat()).'&query='.$this->GetKey();
 			}
 			$sOql = $this->Get('oql');
 			$sMessage = null;

+ 1 - 1
application/xlsxwriter.class.php

@@ -164,7 +164,7 @@ Class XLSXWriter
 	{
 		static $styles = array('money'=>1,'dollar'=>1,'datetime'=>2,'date'=>3,'string'=>0);
 		$cell = self::xlsCell($row_number, $column_number);
-		$s = isset($styles[$cell_format]) ? $styles[$cell_format] : '0';
+		$s = isset($styles[$cell_format]) && ($value !== '') ? $styles[$cell_format] : '0';
 		
 		if (is_int($value) || is_float($value)) {
 			fwrite($fd,'<c r="'.$cell.'" s="'.$s.'" t="n"><v>'.($value*1).'</v></c>');//int,float, etc

+ 16 - 5
core/csvbulkexport.class.inc.php

@@ -59,7 +59,7 @@ class CSVBulkExport extends TabularBulkExport
 		$this->aStatusInfo['charset'] = strtoupper(utils::ReadParam('charset', 'UTF-8', true, 'raw_data'));
 		$this->aStatusInfo['formatted_text'] = (bool)utils::ReadParam('formatted_text', 0, true);
 		
-		$sDateFormatRadio = utils::ReadParam('date_format_radio', '');
+		$sDateFormatRadio = utils::ReadParam('csv_date_format_radio', '');
 		switch($sDateFormatRadio)
 		{
 			case 'default':
@@ -190,17 +190,19 @@ class CSVBulkExport extends TabularBulkExport
 				$oP->add('<h3>'.Dict::S('Core:BulkExport:DateTimeFormat').'</h3>');
 				$sDefaultFormat = htmlentities((string)AttributeDateTime::GetFormat(), ENT_QUOTES, 'UTF-8');
 				$sExample = htmlentities(date((string)AttributeDateTime::GetFormat()), ENT_QUOTES, 'UTF-8');
-				$oP->add('<input type="radio" id="csv_date_time_format_default" name="date_format_radio" value="default"'.$sDefaultChecked.'><label for="csv_date_time_format_default"> '.Dict::Format('Core:BulkExport:DateTimeFormatDefault_Example', $sDefaultFormat, $sExample).'</label><br/>');
+				$oP->add('<input type="radio" id="csv_date_time_format_default" name="csv_date_format_radio" value="default"'.$sDefaultChecked.'><label for="csv_date_time_format_default"> '.Dict::Format('Core:BulkExport:DateTimeFormatDefault_Example', $sDefaultFormat, $sExample).'</label><br/>');
 				$sFormatInput = '<input type="text" size="15" name="date_format" id="csv_custom_date_time_format" title="" value="'.htmlentities($sDateTimeFormat, ENT_QUOTES, 'UTF-8').'"/>';
-				$oP->add('<input type="radio" id="csv_date_time_format_custom" name="date_format_radio" value="custom"'.$sCustomChecked.'><label for="csv_date_time_format_custom"> '.Dict::Format('Core:BulkExport:DateTimeFormatCustom_Format', $sFormatInput).'</label>');
+				$oP->add('<input type="radio" id="csv_date_time_format_custom" name="csv_date_format_radio" value="custom"'.$sCustomChecked.'><label for="csv_date_time_format_custom"> '.Dict::Format('Core:BulkExport:DateTimeFormatCustom_Format', $sFormatInput).'</label>');
 				$oP->add('</td></tr></table>');
 				
 				$oP->add('</fieldset>');
 				$sJSTooltip = json_encode('<div class="date_format_tooltip">'.Dict::S('UI:CSVImport:CustomDateTimeFormatTooltip').'</div>');
+
 				$oP->add_ready_script(
 <<<EOF
 $('#csv_custom_date_time_format').tooltip({content: function() { return $sJSTooltip; } });
-$('#csv_custom_date_time_format').on('click', function() { $('#csv_date_time_format_custom').prop('checked', true); });
+$('#form_part_csv_options').on('preview_updated', function() { FormatDatesInPreview('csv', 'csv'); });
+$('#csv_custom_date_time_format').on('click', function() { $('#csv_date_time_format_custom').prop('checked', true); FormatDatesInPreview('csv', 'csv'); }).on('keyup', function() { FormatDatesInPreview('csv', 'csv'); });
 EOF
 				);
 				
@@ -213,7 +215,16 @@ EOF
 	}
 
 	protected function GetSampleData($oObj, $sAttCode)
-	{
+	{	
+		if ($sAttCode != 'id')
+		{
+			$oAttDef = MetaModel::GetAttributeDef(get_class($oObj), $sAttCode);
+			if ($oAttDef instanceof AttributeDateTime) // AttributeDate is derived from AttributeDateTime
+			{
+				$sClass = (get_class($oAttDef) == 'AttributeDateTime') ? 'user-formatted-date-time' : 'user-formatted-date';
+				return '<div class="'.$sClass.'" data-date="'.$oObj->Get($sAttCode).'">'.htmlentities($oAttDef->GetEditValue($oObj->Get($sAttCode), $oObj), ENT_QUOTES, 'UTF-8').'</div>';
+			}
+		}
 		return '<div class="text-preview">'.htmlentities($this->GetValue($oObj, $sAttCode), ENT_QUOTES, 'UTF-8').'</div>';
 	}
 

+ 96 - 3
core/datetimeformat.class.inc.php

@@ -218,7 +218,7 @@ class DateTimeFormat
 	 */
 	public function ToExcel()
 	{
-		return $this->Transform('datepicker', "%s");
+		return $this->Transform('excel', "%s");
 	}
 	
 	/**
@@ -229,7 +229,101 @@ class DateTimeFormat
 	{
 		return $this->Transform('moment', "[%s]", true /* escape all */);
 	}
+	
+	public static function GetJSSQLToCustomFormat()
+	{
+		$aPHPToMoment = array();
+		foreach(self::GetFormatMapping() as $sPHPCode => $aMapping)
+		{
+			$aPHPToMoment[$sPHPCode] = $aMapping['moment'];
+		}
+		$sJSMapping = json_encode($aPHPToMoment);
+		
+		$sFunction =
+<<<EOF
+function PHPDateTimeFormatToSubFormat(sPHPFormat, sPlaceholders)
+{
+	var iMax = 0;
+	var iMin = 999;
+	var bEscaping = false;
+	for(var i=0; i<sPHPFormat.length; i++)
+	{
+		var c = sPHPFormat[i];
+		if (c == '\\\\')
+		{
+			bEscaping = true;
+			continue;
+		}
+		
+		if (bEscaping)
+		{
+			bEscaping = false;
+			continue;
+		}
+		else
+		{
+			if (sPlaceholders.search(c) != -1)
+			{
+				iMax = Math.max(iMax, i);
+				iMin = Math.min(iMin, i);
+			}
+		}
+	}
+	return sPHPFormat.substr(iMin, iMax - iMin + 1);
+}
 
+function PHPDateTimeFormatToMomentFormat(sPHPFormat)
+{
+	var aFormatMapping = $sJSMapping;
+	var sMomentFormat = '';
+	
+	var bEscaping = false;
+	for(var i=0; i<sPHPFormat.length; i++)
+	{
+		var c = sPHPFormat[i];
+		if (c == '\\\\')
+		{
+			bEscaping = true;
+			continue;
+		}
+		
+		if (bEscaping)
+		{
+			sMomentFormat += '['+c+']';
+			bEscaping = false;
+		}
+		else
+		{
+			if (aFormatMapping[c] !== undefined)
+			{
+				sMomentFormat += aFormatMapping[c];
+			}
+			else
+			{
+				sMomentFormat += '['+c+']';
+			}
+		}
+	}
+	return sMomentFormat;
+}
+
+function DateFormatFromPHP(sSQLDate, sPHPFormat)
+{
+	var sPHPDateFormat = PHPDateTimeFormatToSubFormat(sPHPFormat, 'Yydjmn');
+	var sMomentFormat = PHPDateTimeFormatToMomentFormat(sPHPDateFormat);	
+	return moment(sSQLDate).format(sMomentFormat);
+}		
+
+function DateTimeFormatFromPHP(sSQLDate, sPHPFormat)
+{
+	var sMomentFormat = PHPDateTimeFormatToMomentFormat(sPHPFormat);	
+	return moment(sSQLDate).format(sMomentFormat);
+}		
+EOF
+		;
+		return $sFunction;
+	}
+	
 	/**
 	 * Get a placeholder text for a date or datetime format string
 	 * @return string The placeholder text (localized)
@@ -275,7 +369,6 @@ class DateTimeFormat
 	 */
 	protected function ToSubFormat($aPlaceholders)
 	{
-		$aDatePlaceholders = array('Y', 'y', 'd', 'j', 'm', 'n');
 		$iStart = 999;
 		$iEnd = 0;
 		
@@ -312,7 +405,7 @@ class DateTimeFormat
 	 */
 	public function ToTimeFormat()
 	{
-		return $this->ToSubFormat(array('H', 'h', 'G', 'g', 'i', 's'));
+		return $this->ToSubFormat(array('H', 'h', 'G', 'g', 'i', 's', 'a', 'A'));
 	}
 	
 	/**

+ 30 - 6
core/excelbulkexport.class.inc.php

@@ -55,7 +55,7 @@ class ExcelBulkExport extends TabularBulkExport
 		parent::ReadParameters();
 		$this->aStatusInfo['formatted_text'] = (bool)utils::ReadParam('formatted_text', 0, true);
 			
-		$sDateFormatRadio = utils::ReadParam('date_format_radio', '');
+		$sDateFormatRadio = utils::ReadParam('excel_date_format_radio', '');
 		switch($sDateFormatRadio)
 		{
 			case 'default':
@@ -103,9 +103,9 @@ class ExcelBulkExport extends TabularBulkExport
 				$oP->add('<h3>'.Dict::S('Core:BulkExport:DateTimeFormat').'</h3>');
 				$sDefaultFormat = htmlentities((string)AttributeDateTime::GetFormat(), ENT_QUOTES, 'UTF-8');
 				$sExample = htmlentities(date((string)AttributeDateTime::GetFormat()), ENT_QUOTES, 'UTF-8');
-				$oP->add('<input type="radio" id="excel_date_time_format_default" name="date_format_radio" value="default"'.$sDefaultChecked.'><label for="excel_date_time_format_default"> '.Dict::Format('Core:BulkExport:DateTimeFormatDefault_Example', $sDefaultFormat, $sExample).'</label><br/>');
+				$oP->add('<input type="radio" id="excel_date_time_format_default" name="excel_date_format_radio" value="default"'.$sDefaultChecked.'><label for="excel_date_time_format_default"> '.Dict::Format('Core:BulkExport:DateTimeFormatDefault_Example', $sDefaultFormat, $sExample).'</label><br/>');
 				$sFormatInput = '<input type="text" size="15" name="date_format" id="excel_custom_date_time_format" title="" value="'.htmlentities($sDateTimeFormat, ENT_QUOTES, 'UTF-8').'"/>';
-				$oP->add('<input type="radio" id="excel_date_time_format_custom" name="date_format_radio" value="custom"'.$sCustomChecked.'><label for="excel_date_time_format_custom"> '.Dict::Format('Core:BulkExport:DateTimeFormatCustom_Format', $sFormatInput).'</label>');
+				$oP->add('<input type="radio" id="excel_date_time_format_custom" name="excel_date_format_radio" value="custom"'.$sCustomChecked.'><label for="excel_date_time_format_custom"> '.Dict::Format('Core:BulkExport:DateTimeFormatCustom_Format', $sFormatInput).'</label>');
 				
 				$oP->add('</td></tr></table>');
 				
@@ -114,7 +114,8 @@ class ExcelBulkExport extends TabularBulkExport
 				$oP->add_ready_script(
 <<<EOF
 $('#excel_custom_date_time_format').tooltip({content: function() { return $sJSTooltip; } });
-$('#excel_custom_date_time_format').on('click', function() { $('#excel_date_time_format_custom').prop('checked', true); });
+$('#form_part_xlsx_options').on('preview_updated', function() { FormatDatesInPreview('excel', 'xlsx'); });
+$('#excel_custom_date_time_format').on('click', function() { $('#excel_date_time_format_custom').prop('checked', true); FormatDatesInPreview('excel', 'xlsx'); }).on('keyup', function() { FormatDatesInPreview('excel', 'xlsx'); });					
 EOF
 				);
 				break;
@@ -145,6 +146,15 @@ EOF
 
 	protected function GetSampleData($oObj, $sAttCode)
 	{
+		if ($sAttCode != 'id')
+		{
+			$oAttDef = MetaModel::GetAttributeDef(get_class($oObj), $sAttCode);
+			if ($oAttDef instanceof AttributeDateTime) // AttributeDate is derived from AttributeDateTime
+			{
+				$sClass = (get_class($oAttDef) == 'AttributeDateTime') ? 'user-formatted-date-time' : 'user-formatted-date';
+				return '<div class="'.$sClass.'" data-date="'.$oObj->Get($sAttCode).'">'.htmlentities($oAttDef->GetEditValue($oObj->Get($sAttCode), $oObj), ENT_QUOTES, 'UTF-8').'</div>';
+			}
+		}
 		return '<div class="text-preview">'.htmlentities($this->GetValue($oObj, $sAttCode), ENT_QUOTES, 'UTF-8').'</div>';
 	}
 
@@ -182,7 +192,15 @@ EOF
 				if ($oAttDef instanceof AttributeDateTime)
 				{
 					// Date and times are formatted using the ISO encoding, not the localized format
-					$sRet = $value;
+					if ($oAttDef->IsNull($value))
+					{
+						// NOt a valid date
+						$sRet = '';
+					}
+					else
+					{
+						$sRet = $value;
+					}
 				}
 				else if (array_key_exists('formatted_text', $this->aStatusInfo) && $this->aStatusInfo['formatted_text'])
 				{
@@ -220,7 +238,11 @@ EOF
 				default:
 					$oAttDef = MetaModel::GetAttributeDef($aFieldSpec['sClass'], $aFieldSpec['sAttCode']);
 					$sType = 'string';
-					if($oAttDef instanceof AttributeDateTime)
+					if($oAttDef instanceof AttributeDate)
+					{
+						$sType = 'date';
+					}
+					else if($oAttDef instanceof AttributeDateTime)
 					{
 						$sType = 'datetime';
 					}
@@ -314,6 +336,8 @@ EOF
 		$writer = new XLSXWriter();
 		$oDateTimeFormat = new DateTimeFormat($this->aStatusInfo['date_format']);
 		$writer->setDateTimeFormat($oDateTimeFormat->ToExcel());
+		$oDateFormat = new DateTimeFormat($oDateTimeFormat->ToDateFormat());
+		$writer->setDateFormat($oDateFormat->ToExcel());
 		$writer->setAuthor(UserRights::GetUserFriendlyName());
 		$aHeaderTypes = array();
 		$aHeaderNames = array();

+ 9 - 0
core/htmlbulkexport.class.inc.php

@@ -51,6 +51,15 @@ class HTMLBulkExport extends TabularBulkExport
 
 	protected function GetSampleData($oObj, $sAttCode)
 	{
+		if ($sAttCode != 'id')
+		{
+			$oAttDef = MetaModel::GetAttributeDef(get_class($oObj), $sAttCode);
+			if ($oAttDef instanceof AttributeDateTime) // AttributeDate is derived from AttributeDateTime
+			{
+				$sClass = (get_class($oAttDef) == 'AttributeDateTime') ? 'user-formatted-date-time' : 'user-formatted-date';
+				return '<div class="'.$sClass.'" data-date="'.$oObj->Get($sAttCode).'">'.htmlentities($oAttDef->GetEditValue($oObj->Get($sAttCode), $oObj), ENT_QUOTES, 'UTF-8').'</div>';
+			}
+		}
 		return $this->GetValue($oObj, $sAttCode);
 	}
 

+ 5 - 4
core/pdfbulkexport.class.inc.php

@@ -65,9 +65,9 @@ class PDFBulkExport extends HTMLBulkExport
 				$oP->add('<h3>'.Dict::S('Core:BulkExport:DateTimeFormat').'</h3>');
 				$sDefaultFormat = htmlentities((string)AttributeDateTime::GetFormat(), ENT_QUOTES, 'UTF-8');
 				$sExample = htmlentities(date((string)AttributeDateTime::GetFormat()), ENT_QUOTES, 'UTF-8');
-				$oP->add('<input type="radio" id="pdf_date_time_format_default" name="date_format_radio" value="default"'.$sDefaultChecked.'><label for="pdf_date_time_format_default"> '.Dict::Format('Core:BulkExport:DateTimeFormatDefault_Example', $sDefaultFormat, $sExample).'</label><br/>');
+				$oP->add('<input type="radio" id="pdf_date_time_format_default" name="pdf_date_format_radio" value="default"'.$sDefaultChecked.'><label for="pdf_date_time_format_default"> '.Dict::Format('Core:BulkExport:DateTimeFormatDefault_Example', $sDefaultFormat, $sExample).'</label><br/>');
 				$sFormatInput = '<input type="text" size="15" name="date_format" id="pdf_custom_date_time_format" title="" value="'.htmlentities($sDateTimeFormat, ENT_QUOTES, 'UTF-8').'"/>';
-				$oP->add('<input type="radio" id="pdf_date_time_format_custom" name="date_format_radio" value="custom"'.$sCustomChecked.'><label for="pdf_date_time_format_custom"> '.Dict::Format('Core:BulkExport:DateTimeFormatCustom_Format', $sFormatInput).'</label>');
+				$oP->add('<input type="radio" id="pdf_date_time_format_custom" name="pdf_date_format_radio" value="custom"'.$sCustomChecked.'><label for="pdf_date_time_format_custom"> '.Dict::Format('Core:BulkExport:DateTimeFormatCustom_Format', $sFormatInput).'</label>');
 				
 				$oP->add('</td></tr></table>');
 				
@@ -77,7 +77,8 @@ class PDFBulkExport extends HTMLBulkExport
 				$oP->add_ready_script(
 <<<EOF
 $('#pdf_custom_date_time_format').tooltip({content: function() { return $sJSTooltip; } });
-$('#pdf_custom_date_time_format').on('click', function() { $('#pdf_date_time_format_custom').prop('checked', true); });
+$('#form_part_pdf_options').on('preview_updated', function() { FormatDatesInPreview('pdf', 'html'); });
+$('#pdf_custom_date_time_format').on('click', function() { $('#pdf_date_time_format_custom').prop('checked', true); FormatDatesInPreview('pdf', 'html'); }).on('keyup', function() { FormatDatesInPreview('pdf', 'html'); });					
 EOF
 				);
 				break;
@@ -114,7 +115,7 @@ EOF
 		$this->aStatusInfo['page_size'] = utils::ReadParam('page_size', 'A4', true, 'raw_data');
 		$this->aStatusInfo['page_orientation'] = utils::ReadParam('page_orientation', 'L', true);
 		
-		$sDateFormatRadio = utils::ReadParam('date_format_radio', '');
+		$sDateFormatRadio = utils::ReadParam('pdf_date_format_radio', '');
 		switch($sDateFormatRadio)
 		{
 			case 'default':

+ 14 - 3
core/spreadsheetbulkexport.class.inc.php

@@ -61,9 +61,9 @@ class SpreadsheetBulkExport extends TabularBulkExport
 				$oP->add('<h3>'.Dict::S('Core:BulkExport:DateTimeFormat').'</h3>');
 				$sDefaultFormat = htmlentities((string)AttributeDateTime::GetFormat(), ENT_QUOTES, 'UTF-8');
 				$sExample = htmlentities(date((string)AttributeDateTime::GetFormat()), ENT_QUOTES, 'UTF-8');
-				$oP->add('<input type="radio" id="spreadsheet_date_time_format_default" name="date_format_radio" value="default"'.$sDefaultChecked.'><label for="spreadsheet_date_time_format_default"> '.Dict::Format('Core:BulkExport:DateTimeFormatDefault_Example', $sDefaultFormat, $sExample).'</label><br/>');
+				$oP->add('<input type="radio" id="spreadsheet_date_time_format_default" name="spreadsheet_date_format_radio" value="default"'.$sDefaultChecked.'><label for="spreadsheet_date_time_format_default"> '.Dict::Format('Core:BulkExport:DateTimeFormatDefault_Example', $sDefaultFormat, $sExample).'</label><br/>');
 				$sFormatInput = '<input type="text" size="15" name="date_format" id="spreadsheet_custom_date_time_format" title="" value="'.htmlentities($sDateTimeFormat, ENT_QUOTES, 'UTF-8').'"/>';
-				$oP->add('<input type="radio" id="spreadsheet_date_time_format_custom" name="date_format_radio" value="custom"'.$sCustomChecked.'><label for="spreadsheet_date_time_format_custom"> '.Dict::Format('Core:BulkExport:DateTimeFormatCustom_Format', $sFormatInput).'</label>');
+				$oP->add('<input type="radio" id="spreadsheet_date_time_format_custom" name="spreadsheet_date_format_radio" value="custom"'.$sCustomChecked.'><label for="spreadsheet_date_time_format_custom"> '.Dict::Format('Core:BulkExport:DateTimeFormatCustom_Format', $sFormatInput).'</label>');
 				$oP->add('</td>');
 				
 				$oP->add('</tr>');
@@ -73,7 +73,9 @@ class SpreadsheetBulkExport extends TabularBulkExport
 				$oP->add_ready_script(
 <<<EOF
 $('#spreadsheet_custom_date_time_format').tooltip({content: function() { return $sJSTooltip; } });
+$('#form_part_spreadsheet_options').on('preview_updated', function() { FormatDatesInPreview('spreadsheet', 'spreadsheet'); });
 $('#spreadsheet_custom_date_time_format').on('click', function() { $('#spreadsheet_date_time_format_custom').prop('checked', true); });
+$('#spreadsheet_custom_date_time_format').on('click', function() { $('#spreadsheet_date_time_format_custom').prop('checked', true); FormatDatesInPreview('spreadsheet', 'spreadsheet'); }).on('keyup', function() { FormatDatesInPreview('spreadsheet', 'spreadsheet'); });											
 EOF
 				);
 				break;
@@ -87,7 +89,7 @@ EOF
 	{
 		parent::ReadParameters();
 
-		$sDateFormatRadio = utils::ReadParam('date_format_radio', '');
+		$sDateFormatRadio = utils::ReadParam('spreadsheet_date_format_radio', '');
 		switch($sDateFormatRadio)
 		{
 			case 'default':
@@ -108,6 +110,15 @@ EOF
 	
 	protected function GetSampleData($oObj, $sAttCode)
 	{
+		if ($sAttCode != 'id')
+		{
+			$oAttDef = MetaModel::GetAttributeDef(get_class($oObj), $sAttCode);
+			if ($oAttDef instanceof AttributeDateTime) // AttributeDate is derived from AttributeDateTime
+			{
+				$sClass = (get_class($oAttDef) == 'AttributeDateTime') ? 'user-formatted-date-time' : 'user-formatted-date';
+				return '<div class="'.$sClass.'" data-date="'.$oObj->Get($sAttCode).'">'.htmlentities($oAttDef->GetEditValue($oObj->Get($sAttCode), $oObj), ENT_QUOTES, 'UTF-8').'</div>';
+			}
+		}
 		return $this->GetValue($oObj, $sAttCode);
 	}
 

Failā izmaiņas netiks attēlotas, jo tās ir par lielu
+ 5 - 0
js/moment.min.js


+ 1 - 0
js/tabularfieldsselector.js

@@ -290,6 +290,7 @@ $(function()
 				$('#'+this.sId+' .preview_header').hide();
 				$('#'+this.sId+' .table_preview').html('<div class="export_empty_preview">'+this.options.labels.empty_preview+'</div>');
 			}
+			$('.form_part:visible').trigger('preview_updated');
 		},
 		_get_field_by_code: function(sFieldCode)
 		{

+ 27 - 0
webservices/export-v2.php

@@ -189,6 +189,33 @@ EOF
 function DisplayForm(WebPage $oP, $sAction = '', $sExpression = '', $sQueryId = '', $sFormat = null)
 {
 	$oExportSearch = null;
+	$oP->add_script(DateTimeFormat::GetJSSQLToCustomFormat());
+	$sJSDefaultDateTimeFormat = json_encode((string)AttributeDateTime::GetFormat());
+	$oP->add_script(
+<<<EOF
+function FormatDatesInPreview(sRadioSelector, sPreviewSelector)
+{
+	if ($('#'+sRadioSelector+'_date_format_radio').prop('checked'))
+	{
+		sPHPFormat = '$sJSDefaultDateTimeFormat';
+	}
+	else
+	{
+		sPHPFormat = $('#'+sRadioSelector+'_custom_date_time_format').val();
+	}
+	$('#interactive_fields_'+sPreviewSelector+' .user-formatted-date-time').each(function() {
+		var val = $('this').attr('data-date');
+		var sDisplay = DateTimeFormatFromPHP(val, sPHPFormat);
+		$(this).html(sDisplay);
+	});
+	$('#interactive_fields_'+sPreviewSelector+' .user-formatted-date').each(function() {
+		var val = $('this').attr('data-date');
+		var sDisplay = DateFormatFromPHP(val, sPHPFormat);
+		$(this).html(sDisplay);
+	});
+}
+EOF
+	);
 	$oP->add_linked_script(utils::GetAbsoluteUrlAppRoot().'js/tabularfieldsselector.js');
 	$oP->add_linked_script(utils::GetAbsoluteUrlAppRoot().'js/jquery.dragtable.js');
 	$oP->add_linked_stylesheet(utils::GetAbsoluteUrlAppRoot().'css/dragtable.css');

Daži faili netika attēloti, jo izmaiņu fails ir pārāk liels