diff --git a/src/main/java/org/gcube/datacatalogue/grsf_manage_widget/server/manage/GRSFNotificationService.java b/src/main/java/org/gcube/datacatalogue/grsf_manage_widget/server/manage/GRSFNotificationService.java
index e6bb6b9..7fba29f 100644
--- a/src/main/java/org/gcube/datacatalogue/grsf_manage_widget/server/manage/GRSFNotificationService.java
+++ b/src/main/java/org/gcube/datacatalogue/grsf_manage_widget/server/manage/GRSFNotificationService.java
@@ -395,12 +395,13 @@ public class GRSFNotificationService extends RemoteServiceServlet implements GRS
String baseUrl = "url of the record here";
String fullName = "Andrea Rossi";
+ String usernameCurrent = "andrea.rossi";
String uuid = UUID.randomUUID().toString();
String adminInUrl = "costantino.perciante";
String adminInUrlFullName = "Costantino Perciante";
long timestamp = System.currentTimeMillis() - 1000 * ((long)(Math.random() * 10 * 60 * 60));
return new RevertableOperationInfo(
- baseUrl, fullName, uuid, adminInUrlFullName, adminInUrl, timestamp, RevertableOperations.MERGE);
+ baseUrl, fullName, usernameCurrent, uuid, adminInUrlFullName, adminInUrl, timestamp, RevertableOperations.MERGE);
}
PortalContext pContext = PortalContext.getConfiguration();
@@ -445,14 +446,14 @@ public class GRSFNotificationService extends RemoteServiceServlet implements GRS
// check if it is a reviewer, than he can do what he wants (no matter the admin)
if(isReviewer){
return new RevertableOperationInfo(recordUrl,
- fullName, uuid, fullNameadminInUrl, userNameadminInUrl, decryptedUrl.getTimestamp(), decryptedUrl.getOperation());
+ fullName, username, uuid, fullNameadminInUrl, userNameadminInUrl, decryptedUrl.getTimestamp(), decryptedUrl.getOperation());
}else{
if(!username.equals(userNameadminInUrl))
throw new Exception("You are not the editor allowed to perform this operation!");
else
return new RevertableOperationInfo(recordUrl,
- fullName, uuid, fullNameadminInUrl, userNameadminInUrl, decryptedUrl.getTimestamp(), decryptedUrl.getOperation());
+ fullName, username, uuid, fullNameadminInUrl, userNameadminInUrl, decryptedUrl.getTimestamp(), decryptedUrl.getOperation());
}
}
diff --git a/src/main/java/org/gcube/datacatalogue/grsf_manage_widget/server/manage/SocialCommunications.java b/src/main/java/org/gcube/datacatalogue/grsf_manage_widget/server/manage/SocialCommunications.java
index 16a13a3..2b0ae29 100644
--- a/src/main/java/org/gcube/datacatalogue/grsf_manage_widget/server/manage/SocialCommunications.java
+++ b/src/main/java/org/gcube/datacatalogue/grsf_manage_widget/server/manage/SocialCommunications.java
@@ -4,6 +4,7 @@ import static org.gcube.resources.discovery.icclient.ICFactory.client;
import static org.gcube.resources.discovery.icclient.ICFactory.queryFor;
import java.util.ArrayList;
+import java.util.Base64;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@@ -12,6 +13,7 @@ import java.util.Set;
import javax.servlet.http.HttpServletRequest;
import org.gcube.common.authorization.library.provider.SecurityTokenProvider;
+import org.gcube.common.portal.GCubePortalConstants;
import org.gcube.common.resources.gcore.GCoreEndpoint;
import org.gcube.common.scope.api.ScopeProvider;
import org.gcube.datacatalogue.ckanutillibrary.server.DataCatalogue;
@@ -57,6 +59,8 @@ public class SocialCommunications {
private static final String serviceName = "SocialNetworking";
private static final String serviceClass = "Portal";
+ public static final String USER_PROFILE_OID = "userIdentificationParameter";
+
// social operations
private static final String SOCIAL_SERVICE_APPLICATION_TOKEN = "2/tokens/generate-application-token";
private static final String SOCIAL_SERVICE_WRITE_APPLICATION_POST = "2/posts/write-post-app";
@@ -150,8 +154,6 @@ public class SocialCommunications {
String currentScope = ScopeProvider.instance.get();
String tokenUser = SecurityTokenProvider.instance.get();
- //return "b159b50c-c0f8-4a4c-bac9-b6149d6b81fc-98187548";
-
logger.info("Current scope for requireApplicationToken is " + currentScope + " and token is " + tokenUser.substring(0, 10) + "***************");
String basePath = serviceUrl;
@@ -212,7 +214,7 @@ public class SocialCommunications {
* @throws Exception
*/
@SuppressWarnings("unchecked")
- public static void writePostOnRevert(String serviceUrl, RevertableOperationInfo rInfo, boolean enablePostNotification) throws Exception{
+ public static void writePostOnRevert(String serviceUrl, RevertableOperationInfo rInfo, boolean enablePostNotification, String userCurrentUrl) throws Exception{
// discover service endpoint for the social networking library
String currentScope = ScopeProvider.instance.get();
@@ -235,8 +237,20 @@ public class SocialCommunications {
// require url
String applicationToken = requireApplicationToken(serviceUrl);
+ final String profilePageURL = GCubePortalConstants.PREFIX_GROUP_URL + extractOrgFriendlyURL(userCurrentUrl) + GCubePortalConstants.USER_PROFILE_FRIENDLY_URL;
+
+ String userFullNameHighlightedCurrent = ""+rInfo.getFullNameCurrentAdmin()+
+ " ";
+
+ String userFullNameHighlightedOriginal = ""+rInfo.getFullNameOriginalAdmin()+
+ " ";
+
// replace
- String message = POST_ON_REVERT.replace("RECORD_URL", rInfo.getRecordUrl()).replace("ADMIN_WHO_CHANGED", rInfo.getFullNameCurrentAdmin()).replace("ORIGINAL_USER", rInfo.getFullNameOriginalAdmin());
+ String message = POST_ON_REVERT.replace("RECORD_URL", rInfo.getRecordUrl()).replace("ADMIN_WHO_CHANGED", userFullNameHighlightedCurrent).replace("ORIGINAL_USER",userFullNameHighlightedOriginal);
// add hashtag
message +="
";
@@ -275,7 +289,7 @@ public class SocialCommunications {
* @throws Exception
*/
@SuppressWarnings("unchecked")
- public static void writeProductPost(String serviceUrl, ManageProductBean bean, String username, String fullName, boolean enablePostNotification) throws Exception{
+ public static void writeProductPost(String serviceUrl, ManageProductBean bean, String username, String fullName, boolean enablePostNotification, String userCurrentUrl) throws Exception{
// discover service endpoint for the social networking library
String currentScope = ScopeProvider.instance.get();
@@ -298,9 +312,15 @@ public class SocialCommunications {
// require url
String applicationToken = requireApplicationToken(serviceUrl);
+ final String profilePageURL = GCubePortalConstants.PREFIX_GROUP_URL + extractOrgFriendlyURL(userCurrentUrl) + GCubePortalConstants.USER_PROFILE_FRIENDLY_URL;
+ String userFullNameHighlighted = ""+fullName+
+ " ";
+
// replace
String message = POST_MESSAGE.replace("PRODUCT_TITLE", bean.getTitle()).replace("LINK_RECORD", bean.getUrl()).
- replace("USER_FULLNAME", fullName);
+ replace("USER_FULLNAME", userFullNameHighlighted);
if(bean.getReport() != null && !bean.getReport().isEmpty())
message += ADD_REPORT.replace("REPORT_UPDATE", bean.getReport());
@@ -335,6 +355,21 @@ public class SocialCommunications {
}
}
+ private static String extractOrgFriendlyURL(String portalURL) {
+ String groupRegEx = "/group/";
+ if (portalURL.contains(groupRegEx)) {
+ String[] splits = portalURL.split(groupRegEx);
+ String friendlyURL = splits[1];
+ if (friendlyURL.contains("/")) {
+ friendlyURL = friendlyURL.split("/")[0];
+ } else {
+ friendlyURL = friendlyURL.split("\\?")[0].split("\\#")[0];
+ }
+ return "/"+friendlyURL;
+ }
+ return null;
+ }
+
/**
* Send an email to the administrator as well as the
* @param bean
@@ -527,7 +562,7 @@ public class SocialCommunications {
String messageToReviewer = EMAIL_REVIEWER_REVERT.replace("ADMIN_WHO_CHANGED", rInfo.getFullNameCurrentAdmin()).replace("RECORD_URL", rInfo.getRecordUrl()).
replace("ORIGINAL_USER", rInfo.getFullNameOriginalAdmin());
String subject = "Revert merge request on GRSF Record";
-
+
messageToEditor = messageToEditor.replace("
", "\n");
messageToReviewer = messageToReviewer.replace("
", "\n");
diff --git a/src/main/java/org/gcube/datacatalogue/grsf_manage_widget/server/manage/Utils.java b/src/main/java/org/gcube/datacatalogue/grsf_manage_widget/server/manage/Utils.java
index d8079b7..0784191 100644
--- a/src/main/java/org/gcube/datacatalogue/grsf_manage_widget/server/manage/Utils.java
+++ b/src/main/java/org/gcube/datacatalogue/grsf_manage_widget/server/manage/Utils.java
@@ -222,7 +222,7 @@ public class Utils {
groupId, currentBrowserUrl, bean.isMergesInvolved());
// create a post about the operation
- SocialCommunications.writeProductPost(baseUrlSocial, bean, username, fullName, false);
+ SocialCommunications.writeProductPost(baseUrlSocial, bean, username, fullName, false, currentBrowserUrl);
}catch(Exception e){
logger.error("Something failed while alerting editors/reviewers", e);
@@ -256,6 +256,9 @@ public class Utils {
// require social networking url
final String baseUrlSocial = SocialCommunications.getBaseUrlSocialService(httpServletRequest);
+ // and the user current browser url
+ final String currentBrowserUrl = Utils.getCurrentClientUrl(httpServletRequest).split("\\?")[0]; // ignore other parameters
+
// manage interactions through a separated thread but set there security token and context (and then reset them)
Thread t = new Thread(new Runnable() {
@@ -266,7 +269,7 @@ public class Utils {
try{
// write post about this
- SocialCommunications.writePostOnRevert(baseUrlSocial, rInfo, false);
+ SocialCommunications.writePostOnRevert(baseUrlSocial, rInfo, false, currentBrowserUrl);
// alert who's involved
SocialCommunications.sendEmailAdministratorsOnOperationReverted(baseUrlSocial, rInfo, groupId);
diff --git a/src/main/java/org/gcube/datacatalogue/grsf_manage_widget/shared/RevertableOperationInfo.java b/src/main/java/org/gcube/datacatalogue/grsf_manage_widget/shared/RevertableOperationInfo.java
index f378925..30633aa 100644
--- a/src/main/java/org/gcube/datacatalogue/grsf_manage_widget/shared/RevertableOperationInfo.java
+++ b/src/main/java/org/gcube/datacatalogue/grsf_manage_widget/shared/RevertableOperationInfo.java
@@ -7,6 +7,7 @@ public class RevertableOperationInfo implements Serializable{
private static final long serialVersionUID = 5274434342849474800L;
private String recordUrl;
private String fullNameCurrentAdmin; // the one who is thinking to revert it
+ private String userNameCurrentAdmin;
private String uuid;
private String fullNameOriginalAdmin; // the original admin in the link (his/her Full Name)
private String userNameOriginalAdmin; // the original admin's username
@@ -19,6 +20,7 @@ public class RevertableOperationInfo implements Serializable{
public RevertableOperationInfo(
String recordUrl,
String fullNameCurrentAdmin,
+ String userNameCurrentAdmin,
String uuid,
String fullNameOriginalAdmin,
String userNameOriginalAdmin,
@@ -27,12 +29,12 @@ public class RevertableOperationInfo implements Serializable{
super();
this.recordUrl = recordUrl;
this.fullNameCurrentAdmin = fullNameCurrentAdmin;
+ this.userNameCurrentAdmin = userNameCurrentAdmin;
this.uuid = uuid;
this.fullNameOriginalAdmin = fullNameOriginalAdmin;
this.userNameOriginalAdmin = userNameOriginalAdmin;
this.timestamp = timestamp;
this.operation = operation;
-
}
public long getTimestamp() {
@@ -82,6 +84,12 @@ public class RevertableOperationInfo implements Serializable{
this.userNameOriginalAdmin = userNameOriginalAdmin;
}
+ public String getUserNameCurrentAdmin() {
+ return userNameCurrentAdmin;
+ }
+ public void setUserNameCurrentAdmin(String userNameCurrentAdmin) {
+ this.userNameCurrentAdmin = userNameCurrentAdmin;
+ }
public String getUuid() {
return uuid;
}
@@ -91,7 +99,8 @@ public class RevertableOperationInfo implements Serializable{
@Override
public String toString() {
return "RevertableOperationInfo [recordUrl=" + recordUrl
- + ", fullNameCurrentAdmin=" + fullNameCurrentAdmin + ", uuid="
+ + ", fullNameCurrentAdmin=" + fullNameCurrentAdmin
+ + ", userNameCurrentAdmin=" + userNameCurrentAdmin + ", uuid="
+ uuid + ", fullNameOriginalAdmin=" + fullNameOriginalAdmin
+ ", userNameOriginalAdmin=" + userNameOriginalAdmin
+ ", timestamp=" + timestamp + ", operation=" + operation + "]";