Skip to content

Commit

Permalink
XWIKI-19377: Display original author change in the diff
Browse files Browse the repository at this point in the history
  * Use the original author to compute diff metadata
  • Loading branch information
surli committed Feb 4, 2022
1 parent 7652f36 commit 6f25df1
Showing 1 changed file with 17 additions and 8 deletions.
Expand Up @@ -834,6 +834,16 @@ private UserReferenceResolver<DocumentReference> getUserReferenceDocumentReferen
new DefaultParameterizedType(null, UserReferenceResolver.class, DocumentReference.class), "document");
}

private UserReferenceSerializer<String> getUserReferenceStringSerializer()
{
return Utils.getComponent(new DefaultParameterizedType(null, UserReferenceSerializer.class, String.class));

This comment has been minimized.

Copy link
@mflorea

mflorea Feb 21, 2022

Member

This doesn't match the "compactwiki" serializer that was used in getAuthor (see userReferenceToString). Now the serialized reference always includes the wiki component (it's always absolute) while before your change the wiki reference was omitted if it was matching the wiki component of the document.

}

private UserReferenceResolver<String> getUserReferenceStringResolver()
{
return Utils.getComponent(new DefaultParameterizedType(null, UserReferenceResolver.class, String.class));
}

public XWikiStoreInterface getStore(XWikiContext context)
{
return context.getWiki().getStore();
Expand Down Expand Up @@ -6739,8 +6749,11 @@ public List<MetaDataDiff> getMetaDataDiff(XWikiDocument fromDoc, XWikiDocument t
list.add(new MetaDataDiff("parent", fromDoc.getParent(), toDoc.getParent()));
}

if (ObjectUtils.notEqual(fromDoc.getAuthorReference(), toDoc.getAuthorReference())) {
list.add(new MetaDataDiff("author", fromDoc.getAuthor(), toDoc.getAuthor()));
UserReference fromDocOriginalAuthor = fromDoc.getAuthors().getOriginalMetadataAuthor();
UserReference toDocOriginalAuthor = toDoc.getAuthors().getOriginalMetadataAuthor();
if (ObjectUtils.notEqual(fromDocOriginalAuthor, toDocOriginalAuthor)) {
list.add(new MetaDataDiff("author", getUserReferenceStringSerializer().serialize(fromDocOriginalAuthor),
getUserReferenceStringSerializer().serialize(toDocOriginalAuthor)));
}

if (ObjectUtils.notEqual(fromDoc.getDocumentReference(), toDoc.getDocumentReference())) {
Expand Down Expand Up @@ -9227,9 +9240,7 @@ private String getOriginalMetadataAuthorReference()
|| this.getAuthors().getOriginalMetadataAuthor() == GuestUserReference.INSTANCE) {
return "";
} else {
UserReferenceSerializer<String> userReferenceSerializer =
Utils.getComponent(new DefaultParameterizedType(null, UserReferenceSerializer.class, String.class));
return userReferenceSerializer.serialize(this.getAuthors().getOriginalMetadataAuthor());
return getUserReferenceStringSerializer().serialize(this.getAuthors().getOriginalMetadataAuthor());

This comment has been minimized.

Copy link
@mflorea

mflorea Feb 21, 2022

Member

This means you are saving the full user profile document reference, including the wiki component, all the time, even if the original meta data author and the target document are from the same wiki. This means the wiki name ends up in the wiki database so we can't rename the wiki without updating the content. Moreover, if I export this (sub) wiki and import the content in another (sub) wiki then the original meta data author reference will be broken.

}
}

Expand All @@ -9242,9 +9253,7 @@ private String getOriginalMetadataAuthorReference()
private void setOriginalMetadataAuthorReference(String serializedUserReference)
{
if (!StringUtils.isEmpty(serializedUserReference)) {
UserReferenceResolver<String> userReferenceResolver =
Utils.getComponent(new DefaultParameterizedType(null, UserReferenceResolver.class, String.class));
UserReference userReference = userReferenceResolver.resolve(serializedUserReference);
UserReference userReference = getUserReferenceStringResolver().resolve(serializedUserReference);

This comment has been minimized.

Copy link
@mflorea

mflorea Feb 21, 2022

Member

If you end up with a relative original metadata author reference in the database for some reason (XAR import?) then this code will resolve the missing wiki component as the main wiki instead of using the wiki of the target document, which is wrong.

this.authors.setOriginalMetadataAuthor(userReference);
}
}
Expand Down

1 comment on commit 6f25df1

@vmassol
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please sign in to comment.