Skip to content

Commit

Permalink
Issue 25293 fix date format for fields (#25521)
Browse files Browse the repository at this point in the history
* #25293: return date fields as timestamp in content map to fix date format

* #25293: fix import statements

* #25293: added test to check date format for content map

* #25293: fixed expected date format in test
  • Loading branch information
dsolistorres authored and manuelrojas committed Jul 20, 2023
1 parent 8d77e57 commit 9f60a2d
Show file tree
Hide file tree
Showing 2 changed files with 81 additions and 2 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
import com.dotcms.contenttype.model.field.ImmutableFieldVariable;
import com.dotcms.contenttype.model.field.RelationshipField;
import com.dotcms.contenttype.model.field.TextField;
import com.dotcms.contenttype.model.field.DateField;
import com.dotcms.contenttype.model.type.ContentType;
import com.dotcms.contenttype.model.type.ContentTypeBuilder;
import com.dotcms.contenttype.model.type.SimpleContentType;
Expand Down Expand Up @@ -42,6 +43,10 @@
import com.dotmarketing.util.PageMode;
import com.dotmarketing.util.WebKeys.Relationship.RELATIONSHIP_CARDINALITY;
import com.liferay.portal.model.User;

import java.math.BigDecimal;
import java.text.DecimalFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import java.util.Map;
Expand Down Expand Up @@ -276,6 +281,58 @@ public void testGetRelationshipFieldFromContentMapWithMultilingualRelatedContent
}
}

@Test
public void testGetDateFieldFromContentMap() throws DotDataException, DotSecurityException {
ContentType contentType = null;
try {
final Date contentDate = new Date();

contentType = createContentType("testContentTypeWithDateField");

// create date field
createDateField("testDateField", contentType.id());

// create contentlet
final ContentletDataGen contentletDataGen = new ContentletDataGen(contentType.id());
final Contentlet contentlet = contentletDataGen
.setProperty("testDateField", contentDate).next();

// verify contentlet date field format
final Context velocityContext = mock(Context.class);

final ContentMap contentMap = new ContentMap(contentlet,
userAPI.getAnonymousUser(),
PageMode.LIVE, defaultHost, velocityContext);

final Date resultDate = (Date) contentMap.get("testDateField");
assertNotNull(resultDate);

final SimpleDateFormat dateFormat = new SimpleDateFormat(
"yyyy-MM-dd HH:mm:ss.SSS");
final String formattedExpectedDate = dateFormat.format(contentDate);
final String dateWithTrailingDigits = resultDate.toString();

final int startIndex = dateWithTrailingDigits.lastIndexOf('.');
String formattedResultDate = dateWithTrailingDigits;
if (startIndex > 1) {
final int endIndex = Math.min(startIndex + 4, dateWithTrailingDigits.length());
BigDecimal trailingDigits = new BigDecimal(
dateWithTrailingDigits.substring(startIndex - 1, endIndex));
DecimalFormat decimalFormat = new DecimalFormat("0.000");
formattedResultDate =
dateWithTrailingDigits.substring(0, startIndex - 1) +
decimalFormat.format(trailingDigits);
}

assertEquals(formattedExpectedDate, formattedResultDate);

} finally {
if (contentType != null) {
contentTypeAPI.delete(contentType);
}
}
}

/**
*
* @param name
Expand Down Expand Up @@ -325,4 +382,21 @@ private Field createRelationshipField(final String relationshipName, final Strin
return fieldAPI.save(field, user);
}

/**
*
* @param fieldName
* @param contentTypeId
* @return
* @throws DotSecurityException
* @throws DotDataException
*/
private Field createDateField(final String fieldName, final String contentTypeId)
throws DotSecurityException, DotDataException {

final Field field = FieldBuilder.builder(DateField.class).name(fieldName)
.contentTypeId(contentTypeId).build();

return fieldAPI.save(field, user);
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@
import java.io.File;
import java.io.IOException;
import java.io.StringWriter;
import java.util.ArrayList;
import java.sql.Timestamp;
import java.util.Collections;
import java.util.HashMap;
import java.util.Iterator;
Expand All @@ -55,7 +55,7 @@
import java.util.Map;
import java.util.Objects;
import java.util.Optional;
import java.util.Set;
import java.util.Date;
import java.util.stream.Collectors;

/**
Expand Down Expand Up @@ -402,6 +402,11 @@ public String toString() {
ret = conAPI.getFieldValue(content, f);
}

// if return value is date, convert to timestamp to be used in velocity
if (ret instanceof Date && !(ret instanceof Timestamp)) {
ret = new Timestamp(((Date) ret).getTime());
}

//handle Velocity Code
if(parseVelocity && ret != null && (f == null || f.getFieldType().equals(Field.FieldType.TEXT.toString()) || f.getFieldType().equals(Field.FieldType.TEXT_AREA.toString()) || f.getFieldType().equals(Field.FieldType.CUSTOM_FIELD.toString()) || f.getFieldType().equals(Field.FieldType.WYSIWYG.toString())) && (ret.toString().contains("#") || ret.toString().contains("$"))){
VelocityEngine ve = VelocityUtil.getEngine();
Expand Down

0 comments on commit 9f60a2d

Please sign in to comment.