Skip to content

Commit

Permalink
#25293 include in 23.01.5
Browse files Browse the repository at this point in the history
  • Loading branch information
erickgonzalez committed Jul 21, 2023
1 parent 1d23c76 commit 59ae96c
Show file tree
Hide file tree
Showing 3 changed files with 82 additions and 16 deletions.
Expand Up @@ -7,12 +7,7 @@
import com.dotcms.IntegrationTestBase;
import com.dotcms.contenttype.business.ContentTypeAPI;
import com.dotcms.contenttype.business.FieldAPI;
import com.dotcms.contenttype.model.field.Field;
import com.dotcms.contenttype.model.field.FieldBuilder;
import com.dotcms.contenttype.model.field.FieldVariable;
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.*;
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 +37,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 +275,75 @@ 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 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);
}

/**
*
* @param name
Expand Down
Expand Up @@ -46,16 +46,8 @@
import java.io.File;
import java.io.IOException;
import java.io.StringWriter;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.Optional;
import java.util.Set;
import java.sql.Timestamp;
import java.util.*;
import java.util.stream.Collectors;

/**
Expand Down Expand Up @@ -402,6 +394,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
1 change: 1 addition & 0 deletions hotfix_tracking.md
Expand Up @@ -84,3 +84,4 @@ This maintenance release includes the following code fixes:
66. https://github.com/dotCMS/core/issues/25120 : Stopped sites are not listed #25120
67. https://github.com/dotCMS/core/issues/25136 : Site Browser is not sorting items by default #25136
68. https://github.com/dotCMS/core/issues/25189 : Data mixing issue when ordering values of Content Type with multiple key/value fields #25189
69. https://github.com/dotCMS/core/issues/25293 : Date format has changed for fields in newer versions of dotCMS #25293

0 comments on commit 59ae96c

Please sign in to comment.