added clickable users on posts
git-svn-id: http://svn.research-infrastructures.eu/public/d4science/gcube/trunk/portlets/widgets/grsf-manage-widget@163123 82a268e6-3cf1-43bd-a215-b396298e98cf
This commit is contained in:
parent
6a2dd96752
commit
f6d583c8da
|
@ -395,12 +395,13 @@ public class GRSFNotificationService extends RemoteServiceServlet implements GRS
|
||||||
|
|
||||||
String baseUrl = "url of the record here";
|
String baseUrl = "url of the record here";
|
||||||
String fullName = "Andrea Rossi";
|
String fullName = "Andrea Rossi";
|
||||||
|
String usernameCurrent = "andrea.rossi";
|
||||||
String uuid = UUID.randomUUID().toString();
|
String uuid = UUID.randomUUID().toString();
|
||||||
String adminInUrl = "costantino.perciante";
|
String adminInUrl = "costantino.perciante";
|
||||||
String adminInUrlFullName = "Costantino Perciante";
|
String adminInUrlFullName = "Costantino Perciante";
|
||||||
long timestamp = System.currentTimeMillis() - 1000 * ((long)(Math.random() * 10 * 60 * 60));
|
long timestamp = System.currentTimeMillis() - 1000 * ((long)(Math.random() * 10 * 60 * 60));
|
||||||
return new RevertableOperationInfo(
|
return new RevertableOperationInfo(
|
||||||
baseUrl, fullName, uuid, adminInUrlFullName, adminInUrl, timestamp, RevertableOperations.MERGE);
|
baseUrl, fullName, usernameCurrent, uuid, adminInUrlFullName, adminInUrl, timestamp, RevertableOperations.MERGE);
|
||||||
}
|
}
|
||||||
|
|
||||||
PortalContext pContext = PortalContext.getConfiguration();
|
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)
|
// check if it is a reviewer, than he can do what he wants (no matter the admin)
|
||||||
if(isReviewer){
|
if(isReviewer){
|
||||||
return new RevertableOperationInfo(recordUrl,
|
return new RevertableOperationInfo(recordUrl,
|
||||||
fullName, uuid, fullNameadminInUrl, userNameadminInUrl, decryptedUrl.getTimestamp(), decryptedUrl.getOperation());
|
fullName, username, uuid, fullNameadminInUrl, userNameadminInUrl, decryptedUrl.getTimestamp(), decryptedUrl.getOperation());
|
||||||
}else{
|
}else{
|
||||||
|
|
||||||
if(!username.equals(userNameadminInUrl))
|
if(!username.equals(userNameadminInUrl))
|
||||||
throw new Exception("You are not the editor allowed to perform this operation!");
|
throw new Exception("You are not the editor allowed to perform this operation!");
|
||||||
else
|
else
|
||||||
return new RevertableOperationInfo(recordUrl,
|
return new RevertableOperationInfo(recordUrl,
|
||||||
fullName, uuid, fullNameadminInUrl, userNameadminInUrl, decryptedUrl.getTimestamp(), decryptedUrl.getOperation());
|
fullName, username, uuid, fullNameadminInUrl, userNameadminInUrl, decryptedUrl.getTimestamp(), decryptedUrl.getOperation());
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -4,6 +4,7 @@ import static org.gcube.resources.discovery.icclient.ICFactory.client;
|
||||||
import static org.gcube.resources.discovery.icclient.ICFactory.queryFor;
|
import static org.gcube.resources.discovery.icclient.ICFactory.queryFor;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
import java.util.Base64;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
@ -12,6 +13,7 @@ import java.util.Set;
|
||||||
import javax.servlet.http.HttpServletRequest;
|
import javax.servlet.http.HttpServletRequest;
|
||||||
|
|
||||||
import org.gcube.common.authorization.library.provider.SecurityTokenProvider;
|
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.resources.gcore.GCoreEndpoint;
|
||||||
import org.gcube.common.scope.api.ScopeProvider;
|
import org.gcube.common.scope.api.ScopeProvider;
|
||||||
import org.gcube.datacatalogue.ckanutillibrary.server.DataCatalogue;
|
import org.gcube.datacatalogue.ckanutillibrary.server.DataCatalogue;
|
||||||
|
@ -57,6 +59,8 @@ public class SocialCommunications {
|
||||||
private static final String serviceName = "SocialNetworking";
|
private static final String serviceName = "SocialNetworking";
|
||||||
private static final String serviceClass = "Portal";
|
private static final String serviceClass = "Portal";
|
||||||
|
|
||||||
|
public static final String USER_PROFILE_OID = "userIdentificationParameter";
|
||||||
|
|
||||||
// social operations
|
// social operations
|
||||||
private static final String SOCIAL_SERVICE_APPLICATION_TOKEN = "2/tokens/generate-application-token";
|
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";
|
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 currentScope = ScopeProvider.instance.get();
|
||||||
String tokenUser = SecurityTokenProvider.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) + "***************");
|
logger.info("Current scope for requireApplicationToken is " + currentScope + " and token is " + tokenUser.substring(0, 10) + "***************");
|
||||||
String basePath = serviceUrl;
|
String basePath = serviceUrl;
|
||||||
|
|
||||||
|
@ -212,7 +214,7 @@ public class SocialCommunications {
|
||||||
* @throws Exception
|
* @throws Exception
|
||||||
*/
|
*/
|
||||||
@SuppressWarnings("unchecked")
|
@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
|
// discover service endpoint for the social networking library
|
||||||
String currentScope = ScopeProvider.instance.get();
|
String currentScope = ScopeProvider.instance.get();
|
||||||
|
@ -235,8 +237,20 @@ public class SocialCommunications {
|
||||||
// require url
|
// require url
|
||||||
String applicationToken = requireApplicationToken(serviceUrl);
|
String applicationToken = requireApplicationToken(serviceUrl);
|
||||||
|
|
||||||
|
final String profilePageURL = GCubePortalConstants.PREFIX_GROUP_URL + extractOrgFriendlyURL(userCurrentUrl) + GCubePortalConstants.USER_PROFILE_FRIENDLY_URL;
|
||||||
|
|
||||||
|
String userFullNameHighlightedCurrent = "<a class=\"link\" href=\"" + profilePageURL + "?"+
|
||||||
|
Base64.getEncoder().encodeToString(USER_PROFILE_OID.getBytes())+"="+
|
||||||
|
Base64.getEncoder().encodeToString(rInfo.getUserNameCurrentAdmin().getBytes())+"\">"+rInfo.getFullNameCurrentAdmin()+
|
||||||
|
"</a> ";
|
||||||
|
|
||||||
|
String userFullNameHighlightedOriginal = "<a class=\"link\" href=\"" + profilePageURL + "?"+
|
||||||
|
Base64.getEncoder().encodeToString(USER_PROFILE_OID.getBytes())+"="+
|
||||||
|
Base64.getEncoder().encodeToString(rInfo.getUserNameOriginalAdmin().getBytes())+"\">"+rInfo.getFullNameOriginalAdmin()+
|
||||||
|
"</a> ";
|
||||||
|
|
||||||
// replace
|
// 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
|
// add hashtag
|
||||||
message +="<br><br>";
|
message +="<br><br>";
|
||||||
|
@ -275,7 +289,7 @@ public class SocialCommunications {
|
||||||
* @throws Exception
|
* @throws Exception
|
||||||
*/
|
*/
|
||||||
@SuppressWarnings("unchecked")
|
@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
|
// discover service endpoint for the social networking library
|
||||||
String currentScope = ScopeProvider.instance.get();
|
String currentScope = ScopeProvider.instance.get();
|
||||||
|
@ -298,9 +312,15 @@ public class SocialCommunications {
|
||||||
// require url
|
// require url
|
||||||
String applicationToken = requireApplicationToken(serviceUrl);
|
String applicationToken = requireApplicationToken(serviceUrl);
|
||||||
|
|
||||||
|
final String profilePageURL = GCubePortalConstants.PREFIX_GROUP_URL + extractOrgFriendlyURL(userCurrentUrl) + GCubePortalConstants.USER_PROFILE_FRIENDLY_URL;
|
||||||
|
String userFullNameHighlighted = "<a class=\"link\" href=\"" + profilePageURL + "?"+
|
||||||
|
Base64.getEncoder().encodeToString(USER_PROFILE_OID.getBytes())+"="+
|
||||||
|
Base64.getEncoder().encodeToString(username.getBytes())+"\">"+fullName+
|
||||||
|
"</a> ";
|
||||||
|
|
||||||
// replace
|
// replace
|
||||||
String message = POST_MESSAGE.replace("PRODUCT_TITLE", bean.getTitle()).replace("LINK_RECORD", bean.getUrl()).
|
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())
|
if(bean.getReport() != null && !bean.getReport().isEmpty())
|
||||||
message += ADD_REPORT.replace("REPORT_UPDATE", bean.getReport());
|
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
|
* Send an email to the administrator as well as the
|
||||||
* @param bean
|
* @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()).
|
String messageToReviewer = EMAIL_REVIEWER_REVERT.replace("ADMIN_WHO_CHANGED", rInfo.getFullNameCurrentAdmin()).replace("RECORD_URL", rInfo.getRecordUrl()).
|
||||||
replace("ORIGINAL_USER", rInfo.getFullNameOriginalAdmin());
|
replace("ORIGINAL_USER", rInfo.getFullNameOriginalAdmin());
|
||||||
String subject = "Revert merge request on GRSF Record";
|
String subject = "Revert merge request on GRSF Record";
|
||||||
|
|
||||||
messageToEditor = messageToEditor.replace("<br>", "\n");
|
messageToEditor = messageToEditor.replace("<br>", "\n");
|
||||||
messageToReviewer = messageToReviewer.replace("<br>", "\n");
|
messageToReviewer = messageToReviewer.replace("<br>", "\n");
|
||||||
|
|
||||||
|
|
|
@ -222,7 +222,7 @@ public class Utils {
|
||||||
groupId, currentBrowserUrl, bean.isMergesInvolved());
|
groupId, currentBrowserUrl, bean.isMergesInvolved());
|
||||||
|
|
||||||
// create a post about the operation
|
// create a post about the operation
|
||||||
SocialCommunications.writeProductPost(baseUrlSocial, bean, username, fullName, false);
|
SocialCommunications.writeProductPost(baseUrlSocial, bean, username, fullName, false, currentBrowserUrl);
|
||||||
|
|
||||||
}catch(Exception e){
|
}catch(Exception e){
|
||||||
logger.error("Something failed while alerting editors/reviewers", e);
|
logger.error("Something failed while alerting editors/reviewers", e);
|
||||||
|
@ -256,6 +256,9 @@ public class Utils {
|
||||||
// require social networking url
|
// require social networking url
|
||||||
final String baseUrlSocial = SocialCommunications.getBaseUrlSocialService(httpServletRequest);
|
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)
|
// manage interactions through a separated thread but set there security token and context (and then reset them)
|
||||||
Thread t = new Thread(new Runnable() {
|
Thread t = new Thread(new Runnable() {
|
||||||
|
|
||||||
|
@ -266,7 +269,7 @@ public class Utils {
|
||||||
try{
|
try{
|
||||||
|
|
||||||
// write post about this
|
// write post about this
|
||||||
SocialCommunications.writePostOnRevert(baseUrlSocial, rInfo, false);
|
SocialCommunications.writePostOnRevert(baseUrlSocial, rInfo, false, currentBrowserUrl);
|
||||||
|
|
||||||
// alert who's involved
|
// alert who's involved
|
||||||
SocialCommunications.sendEmailAdministratorsOnOperationReverted(baseUrlSocial, rInfo, groupId);
|
SocialCommunications.sendEmailAdministratorsOnOperationReverted(baseUrlSocial, rInfo, groupId);
|
||||||
|
|
|
@ -7,6 +7,7 @@ public class RevertableOperationInfo implements Serializable{
|
||||||
private static final long serialVersionUID = 5274434342849474800L;
|
private static final long serialVersionUID = 5274434342849474800L;
|
||||||
private String recordUrl;
|
private String recordUrl;
|
||||||
private String fullNameCurrentAdmin; // the one who is thinking to revert it
|
private String fullNameCurrentAdmin; // the one who is thinking to revert it
|
||||||
|
private String userNameCurrentAdmin;
|
||||||
private String uuid;
|
private String uuid;
|
||||||
private String fullNameOriginalAdmin; // the original admin in the link (his/her Full Name)
|
private String fullNameOriginalAdmin; // the original admin in the link (his/her Full Name)
|
||||||
private String userNameOriginalAdmin; // the original admin's username
|
private String userNameOriginalAdmin; // the original admin's username
|
||||||
|
@ -19,6 +20,7 @@ public class RevertableOperationInfo implements Serializable{
|
||||||
public RevertableOperationInfo(
|
public RevertableOperationInfo(
|
||||||
String recordUrl,
|
String recordUrl,
|
||||||
String fullNameCurrentAdmin,
|
String fullNameCurrentAdmin,
|
||||||
|
String userNameCurrentAdmin,
|
||||||
String uuid,
|
String uuid,
|
||||||
String fullNameOriginalAdmin,
|
String fullNameOriginalAdmin,
|
||||||
String userNameOriginalAdmin,
|
String userNameOriginalAdmin,
|
||||||
|
@ -27,12 +29,12 @@ public class RevertableOperationInfo implements Serializable{
|
||||||
super();
|
super();
|
||||||
this.recordUrl = recordUrl;
|
this.recordUrl = recordUrl;
|
||||||
this.fullNameCurrentAdmin = fullNameCurrentAdmin;
|
this.fullNameCurrentAdmin = fullNameCurrentAdmin;
|
||||||
|
this.userNameCurrentAdmin = userNameCurrentAdmin;
|
||||||
this.uuid = uuid;
|
this.uuid = uuid;
|
||||||
this.fullNameOriginalAdmin = fullNameOriginalAdmin;
|
this.fullNameOriginalAdmin = fullNameOriginalAdmin;
|
||||||
this.userNameOriginalAdmin = userNameOriginalAdmin;
|
this.userNameOriginalAdmin = userNameOriginalAdmin;
|
||||||
this.timestamp = timestamp;
|
this.timestamp = timestamp;
|
||||||
this.operation = operation;
|
this.operation = operation;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public long getTimestamp() {
|
public long getTimestamp() {
|
||||||
|
@ -82,6 +84,12 @@ public class RevertableOperationInfo implements Serializable{
|
||||||
this.userNameOriginalAdmin = userNameOriginalAdmin;
|
this.userNameOriginalAdmin = userNameOriginalAdmin;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public String getUserNameCurrentAdmin() {
|
||||||
|
return userNameCurrentAdmin;
|
||||||
|
}
|
||||||
|
public void setUserNameCurrentAdmin(String userNameCurrentAdmin) {
|
||||||
|
this.userNameCurrentAdmin = userNameCurrentAdmin;
|
||||||
|
}
|
||||||
public String getUuid() {
|
public String getUuid() {
|
||||||
return uuid;
|
return uuid;
|
||||||
}
|
}
|
||||||
|
@ -91,7 +99,8 @@ public class RevertableOperationInfo implements Serializable{
|
||||||
@Override
|
@Override
|
||||||
public String toString() {
|
public String toString() {
|
||||||
return "RevertableOperationInfo [recordUrl=" + recordUrl
|
return "RevertableOperationInfo [recordUrl=" + recordUrl
|
||||||
+ ", fullNameCurrentAdmin=" + fullNameCurrentAdmin + ", uuid="
|
+ ", fullNameCurrentAdmin=" + fullNameCurrentAdmin
|
||||||
|
+ ", userNameCurrentAdmin=" + userNameCurrentAdmin + ", uuid="
|
||||||
+ uuid + ", fullNameOriginalAdmin=" + fullNameOriginalAdmin
|
+ uuid + ", fullNameOriginalAdmin=" + fullNameOriginalAdmin
|
||||||
+ ", userNameOriginalAdmin=" + userNameOriginalAdmin
|
+ ", userNameOriginalAdmin=" + userNameOriginalAdmin
|
||||||
+ ", timestamp=" + timestamp + ", operation=" + operation + "]";
|
+ ", timestamp=" + timestamp + ", operation=" + operation + "]";
|
||||||
|
|
Loading…
Reference in New Issue