made notification to members option configurable as default, see Feature #121

git-svn-id: https://svn.research-infrastructures.eu/d4science/gcube/trunk/portlets/user/share-updates@117026 82a268e6-3cf1-43bd-a215-b396298e98cf
This commit is contained in:
Massimiliano Assante 2015-07-06 13:11:58 +00:00
parent 96dcf96949
commit 499703699a
6 changed files with 69 additions and 32 deletions

View File

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<classpath> <classpath>
<classpathentry kind="src" output="target/share-updates-1.7.0-SNAPSHOT/WEB-INF/classes" path="src/main/java"> <classpathentry kind="src" output="target/share-updates-1.8.0-SNAPSHOT/WEB-INF/classes" path="src/main/java">
<attributes> <attributes>
<attribute name="optional" value="true"/> <attribute name="optional" value="true"/>
<attribute name="maven.pomderived" value="true"/> <attribute name="maven.pomderived" value="true"/>
@ -31,5 +31,5 @@
<attribute name="maven.pomderived" value="true"/> <attribute name="maven.pomderived" value="true"/>
</attributes> </attributes>
</classpathentry> </classpathentry>
<classpathentry kind="output" path="target/share-updates-1.7.0-SNAPSHOT/WEB-INF/classes"/> <classpathentry kind="output" path="target/share-updates-1.8.0-SNAPSHOT/WEB-INF/classes"/>
</classpath> </classpath>

View File

@ -1,4 +1,8 @@
<ReleaseNotes> <ReleaseNotes>
<Changeset component="org.gcube.portlets-user.shareupdates.1-8-0"
date="2015-07-06">
<Change>made notification to members option configurable as default, see Feature #121</Change>
</Changeset>
<Changeset component="org.gcube.portlets-user.shareupdates.1-7-0" <Changeset component="org.gcube.portlets-user.shareupdates.1-7-0"
date="2015-05-27"> date="2015-05-27">
<Change>Integrated gwt-bootstrap and revised css</Change> <Change>Integrated gwt-bootstrap and revised css</Change>
@ -7,7 +11,8 @@
<Changeset component="org.gcube.portlets-user.shareupdates.1-6-1" <Changeset component="org.gcube.portlets-user.shareupdates.1-6-1"
date="2014-12-13"> date="2014-12-13">
<Change>Added Client scope handler, to set the scope from the client <Change>Added Client scope handler, to set the scope from the client
and help preventing the browser back button cache problem</Change> and help preventing the browser back button cache problem
</Change>
</Changeset> </Changeset>
<Changeset component="org.gcube.portlets-user.shareupdates.1-6-0" <Changeset component="org.gcube.portlets-user.shareupdates.1-6-0"
date="2014-11-03"> date="2014-11-03">

View File

@ -13,7 +13,7 @@
<groupId>org.gcube.portlets.user</groupId> <groupId>org.gcube.portlets.user</groupId>
<artifactId>share-updates</artifactId> <artifactId>share-updates</artifactId>
<packaging>war</packaging> <packaging>war</packaging>
<version>1.7.0-SNAPSHOT</version> <version>1.8.0-SNAPSHOT</version>
<name>gCube Share Updates Portlet</name> <name>gCube Share Updates Portlet</name>
<description> <description>

View File

@ -20,6 +20,7 @@ import org.gcube.portlets.widgets.fileupload.client.view.UploadProgressPanel;
import org.jsonmaker.gwt.client.Jsonizer; import org.jsonmaker.gwt.client.Jsonizer;
import com.google.gwt.core.client.GWT; import com.google.gwt.core.client.GWT;
import com.google.gwt.dom.client.Element;
import com.google.gwt.dom.client.Style.Display; import com.google.gwt.dom.client.Style.Display;
import com.google.gwt.dom.client.Style.Unit; import com.google.gwt.dom.client.Style.Unit;
import com.google.gwt.dom.client.Style.Visibility; import com.google.gwt.dom.client.Style.Visibility;
@ -30,7 +31,6 @@ import com.google.gwt.uibinder.client.UiBinder;
import com.google.gwt.uibinder.client.UiFactory; import com.google.gwt.uibinder.client.UiFactory;
import com.google.gwt.uibinder.client.UiField; import com.google.gwt.uibinder.client.UiField;
import com.google.gwt.uibinder.client.UiHandler; import com.google.gwt.uibinder.client.UiHandler;
import com.google.gwt.user.client.Element;
import com.google.gwt.user.client.Window; import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.rpc.AsyncCallback; import com.google.gwt.user.client.rpc.AsyncCallback;
import com.google.gwt.user.client.ui.Button; import com.google.gwt.user.client.ui.Button;
@ -46,7 +46,6 @@ import com.google.gwt.user.client.ui.Widget;
/** /**
* *
* @author Massimiliano Assante * @author Massimiliano Assante
* @version 1.2 Nov 2012
* *
*/ */
public class ShareUpdateForm extends Composite { public class ShareUpdateForm extends Composite {
@ -59,13 +58,13 @@ public class ShareUpdateForm extends Composite {
final PageBusAdapter pageBusAdapter = new PageBusAdapter(); final PageBusAdapter pageBusAdapter = new PageBusAdapter();
// the label for all Vres/channels // the label for all Vres/channels
private final static String ALL_VRES = "Share with: your Virtual Research Environments"; private final static String ALL_VRES = "Share with: your Virtual Research Environments";
protected final static String SHARE_UPDATE_TEXT = "Share an update or a link, use “@” to mention and “#” to add a topic"; protected final static String SHARE_UPDATE_TEXT = "Share an update or a link, use “@” to mention and “#” to add a topic";
protected final static String ERROR_UPDATE_TEXT = "Looks like empty to me!"; protected final static String ERROR_UPDATE_TEXT = "Looks like empty to me!";
public final static String NO_TEXT_FILE_SHARE = "_N0_73X7_SH4R3_"; public final static String NO_TEXT_FILE_SHARE = "_N0_73X7_SH4R3_";
private final static String LISTBOX_LEVEL = " - "; private final static String LISTBOX_LEVEL = " - ";
public static final String loading = GWT.getModuleBaseURL() + "../images/avatarLoader.gif"; public static final String loading = GWT.getModuleBaseURL() + "../images/avatarLoader.gif";
public static final String avatar_default = GWT.getModuleBaseURL() + "../images/Avatar_default.png"; public static final String avatar_default = GWT.getModuleBaseURL() + "../images/Avatar_default.png";
public static final String attach = GWT.getModuleBaseURL() + "../images/attach.png"; public static final String attach = GWT.getModuleBaseURL() + "../images/attach.png";
@ -75,7 +74,7 @@ public class ShareUpdateForm extends Composite {
*/ */
private String uploadedFilePathOnServer; private String uploadedFilePathOnServer;
private String uploadedFileNameOnServer; private String uploadedFileNameOnServer;
private HandlerManager eventBus = new HandlerManager(null); private HandlerManager eventBus = new HandlerManager(null);
private static ShareUpdateFormUiBinder uiBinder = GWT private static ShareUpdateFormUiBinder uiBinder = GWT
@ -110,10 +109,10 @@ public class ShareUpdateForm extends Composite {
@UiField SuperPosedTextArea shareTextArea; @UiField SuperPosedTextArea shareTextArea;
@UiField @UiField
ListBox privacyLevel = new ListBox(false); ListBox privacyLevel = new ListBox();
@UiField @UiField
ListBox notifyListbox = new ListBox(false); ListBox notifyListbox = new ListBox();
private UserInfo myUserInfo; private UserInfo myUserInfo;
@ -131,18 +130,18 @@ public class ShareUpdateForm extends Composite {
} }
}); });
} }
public ShareUpdateForm() { public ShareUpdateForm() {
initWidget(uiBinder.createAndBindUi(this)); initWidget(uiBinder.createAndBindUi(this));
singleton = this; singleton = this;
bind(); bind();
avatarImage.setUrl(loading); avatarImage.setUrl(loading);
shareTextArea.setText(SHARE_UPDATE_TEXT); shareTextArea.setText(SHARE_UPDATE_TEXT);
attachButton.getElement().getStyle().setDisplay(Display.INLINE); attachButton.getElement().getStyle().setDisplay(Display.INLINE);
attachButton.setHTML("<span style=\"padding: 5px 1px; background: url('"+attach+"') 50% 50% no-repeat;\">&nbsp;&nbsp;&nbsp;&nbsp;</span>"); attachButton.setHTML("<span style=\"padding: 5px 1px; background: url('"+attach+"') 50% 50% no-repeat;\">&nbsp;&nbsp;&nbsp;&nbsp;</span>");
shareupdateService.getUserSettings(new AsyncCallback<UserSettings>() { shareupdateService.getUserSettings(new AsyncCallback<UserSettings>() {
public void onFailure(Throwable caught) { public void onFailure(Throwable caught) {
avatarImage.setSize("60px", "60px"); avatarImage.setSize("60px", "60px");
@ -155,6 +154,9 @@ public class ShareUpdateForm extends Composite {
avatarImage.setSize("60px", "60px"); avatarImage.setSize("60px", "60px");
avatarImage.setUrl(myUserInfo.getAvatarId()); avatarImage.setUrl(myUserInfo.getAvatarId());
String singleVREName = ""; String singleVREName = "";
boolean notificationEmail = userSettings.isNotificationViaEmailEnabled();
if (myUserInfo.getOwnVREs().size() > 1) { if (myUserInfo.getOwnVREs().size() > 1) {
privacyLevel.addItem(ALL_VRES, PrivacyLevel.VRES.toString()); privacyLevel.addItem(ALL_VRES, PrivacyLevel.VRES.toString());
for (String vreId : myUserInfo.getOwnVREs().keySet()) for (String vreId : myUserInfo.getOwnVREs().keySet())
@ -171,9 +173,14 @@ public class ShareUpdateForm extends Composite {
privacyLevel.addItem("Share with: Everyone", PrivacyLevel.PORTAL.toString()); privacyLevel.addItem("Share with: Everyone", PrivacyLevel.PORTAL.toString());
//change css if deployed in VRE scope //change css if deployed in VRE scope
if (!userSettings.isInfrastructure()) { if (!userSettings.isInfrastructure()) {
mainPanel.addStyleName("framed"); mainPanel.addStyleName("framed");
notifyListbox.addItem("Share with: " + singleVREName); if (notificationEmail) {
notifyListbox.addItem("Share with: " + singleVREName+" + Notification to members"); notifyListbox.addItem("Share with: " + singleVREName+" + Notification to members");
notifyListbox.addItem("Share with: " + singleVREName);
} else {
notifyListbox.addItem("Share with: " + singleVREName);
notifyListbox.addItem("Share with: " + singleVREName+" + Notification to members");
}
notifyListbox.setVisible(true); notifyListbox.setVisible(true);
} }
else else
@ -181,7 +188,7 @@ public class ShareUpdateForm extends Composite {
} }
}); });
} }
/** Used by UiBinder to instantiate UploadProgressView */ /** Used by UiBinder to instantiate UploadProgressView */
@UiFactory @UiFactory
UploadProgressPanel instatiateProgressView() { UploadProgressPanel instatiateProgressView() {
@ -213,7 +220,7 @@ public class ShareUpdateForm extends Composite {
public static native void fileBrowse(Element el) /*-{ public static native void fileBrowse(Element el) /*-{
el.click(); el.click();
}-*/; }-*/;
@UiHandler("submitButton") @UiHandler("submitButton")
void onClick(ClickEvent e) { void onClick(ClickEvent e) {
@ -229,7 +236,7 @@ public class ShareUpdateForm extends Composite {
} }
myUserInfo = result.getUserInfo(); myUserInfo = result.getUserInfo();
String toShare = shareTextArea.getText().trim(); String toShare = shareTextArea.getText().trim();
//We allow to post a file without writing nothing in the sharing textarea //We allow to post a file without writing nothing in the sharing textarea
if (myLinkPreviewer != null && myLinkPreviewer.isSharingFile() && (toShare.equals(SHARE_UPDATE_TEXT) || toShare.equals(ERROR_UPDATE_TEXT) || toShare.equals("")) ) { if (myLinkPreviewer != null && myLinkPreviewer.isSharingFile() && (toShare.equals(SHARE_UPDATE_TEXT) || toShare.equals(ERROR_UPDATE_TEXT) || toShare.equals("")) ) {
toShare = NO_TEXT_FILE_SHARE; toShare = NO_TEXT_FILE_SHARE;
@ -280,7 +287,7 @@ public class ShareUpdateForm extends Composite {
} }
LinkPreview preview2Share = new LinkPreview(linkTitle, linkDescription, linkUrl, linkHost, null); LinkPreview preview2Share = new LinkPreview(linkTitle, linkDescription, linkUrl, linkHost, null);
boolean notifyGroup = notifyListbox.getSelectedIndex() > 0; boolean notifyGroup = notifyListbox.getSelectedIndex() > 0;
shareupdateService.share(toShare, FeedType.TWEET, getPrivacyLevel(), vreId, preview2Share, linkUrlThumbnail, mentionedUsers, fileName, filePath, notifyGroup, new AsyncCallback<ClientFeed>() { shareupdateService.share(toShare, FeedType.TWEET, getPrivacyLevel(), vreId, preview2Share, linkUrlThumbnail, mentionedUsers, fileName, filePath, notifyGroup, new AsyncCallback<ClientFeed>() {
public void onFailure(Throwable caught) { public void onFailure(Throwable caught) {
submitButton.setEnabled(true); submitButton.setEnabled(true);
@ -395,7 +402,7 @@ public class ShareUpdateForm extends Composite {
final Button close = new Button("Try Again"); final Button close = new Button("Try Again");
final HTML reportIssue = new HTML("<a href=\"https://support.d4science.research-infrastructures.eu\" target=\"_blank\">" final HTML reportIssue = new HTML("<a href=\"https://support.d4science.research-infrastructures.eu\" target=\"_blank\">"
+ "<span>Report the issue</span></a>"); + "<span>Report the issue</span></a>");
close.addClickHandler(new ClickHandler() { close.addClickHandler(new ClickHandler() {
@Override @Override
public void onClick(ClickEvent event) { public void onClick(ClickEvent event) {
@ -403,7 +410,7 @@ public class ShareUpdateForm extends Composite {
preview.remove(hp); preview.remove(hp);
} }
}); });
hp.setVerticalAlignment(HasAlignment.ALIGN_MIDDLE); hp.setVerticalAlignment(HasAlignment.ALIGN_MIDDLE);
hp.add(close); hp.add(close);
hp.add(reportIssue); hp.add(reportIssue);
@ -419,7 +426,7 @@ public class ShareUpdateForm extends Composite {
uploadedFilePathOnServer = absolutePathOnServer; uploadedFilePathOnServer = absolutePathOnServer;
uploadedFileNameOnServer = fileName; uploadedFileNameOnServer = fileName;
submitButton.setEnabled(true); submitButton.setEnabled(true);
} }
}); });
} }

View File

@ -28,7 +28,9 @@ import org.gcube.contentmanagement.blobstorage.service.IClient;
import org.gcube.contentmanager.storageclient.wrapper.AccessType; import org.gcube.contentmanager.storageclient.wrapper.AccessType;
import org.gcube.contentmanager.storageclient.wrapper.MemoryType; import org.gcube.contentmanager.storageclient.wrapper.MemoryType;
import org.gcube.contentmanager.storageclient.wrapper.StorageClient; import org.gcube.contentmanager.storageclient.wrapper.StorageClient;
import org.gcube.portal.custom.communitymanager.OrganizationManager;
import org.gcube.portal.custom.communitymanager.OrganizationsUtil; import org.gcube.portal.custom.communitymanager.OrganizationsUtil;
import org.gcube.portal.custom.communitymanager.impl.OrganizationManagerImpl;
import org.gcube.portal.custom.scopemanager.scopehelper.ScopeHelper; import org.gcube.portal.custom.scopemanager.scopehelper.ScopeHelper;
import org.gcube.portal.databook.server.DBCassandraAstyanaxImpl; import org.gcube.portal.databook.server.DBCassandraAstyanaxImpl;
import org.gcube.portal.databook.server.DatabookStore; import org.gcube.portal.databook.server.DatabookStore;
@ -116,7 +118,7 @@ public class ShareUpdateServiceImpl extends RemoteServiceServlet implements Shar
} }
public String getDevelopmentUser() { public String getDevelopmentUser() {
String user = TEST_USER; String user = TEST_USER;
// user = "massimiliano.assante"; user = "massimiliano.assante";
return user; return user;
} }
/** /**
@ -272,16 +274,20 @@ public class ShareUpdateServiceImpl extends RemoteServiceServlet implements Shar
String thumbnailURL = "images/Avatar_default.png"; String thumbnailURL = "images/Avatar_default.png";
if (isWithinPortal() && username.compareTo(TEST_USER) != 0) { if (isWithinPortal() && username.compareTo(TEST_USER) != 0) {
com.liferay.portal.model.UserModel user = UserLocalServiceUtil.getUserByScreenName(OrganizationsUtil.getCompany().getCompanyId(), username); long companyId = OrganizationsUtil.getCompany().getCompanyId();
com.liferay.portal.model.UserModel user = UserLocalServiceUtil.getUserByScreenName(companyId, username);
Organization currOrg = OrganizationLocalServiceUtil.getOrganization(session.getGroupId());
thumbnailURL = "/image/user_male_portrait?img_id="+user.getPortraitId(); thumbnailURL = "/image/user_male_portrait?img_id="+user.getPortraitId();
fullName = user.getFirstName() + " " + user.getLastName(); fullName = user.getFirstName() + " " + user.getLastName();
email = user.getEmailAddress(); email = user.getEmailAddress();
ThemeDisplay themeDisplay = (ThemeDisplay) this.getThreadLocalRequest().getSession().getAttribute(WebKeys.THEME_DISPLAY); ThemeDisplay themeDisplay = (ThemeDisplay) this.getThreadLocalRequest().getSession().getAttribute(WebKeys.THEME_DISPLAY);
String accountURL = themeDisplay.getURLMyAccount().toString(); String accountURL = themeDisplay.getURLMyAccount().toString();
HashMap<String, String> vreNames = getUserVreNames(username); HashMap<String, String> vreNames = getUserVreNames(username);
UserInfo userInfo = new UserInfo(username, fullName, thumbnailURL, user.getEmailAddress(), accountURL, true, isAdmin(), vreNames); UserInfo userInfo = new UserInfo(username, fullName, thumbnailURL, user.getEmailAddress(), accountURL, true, isAdmin(), vreNames);
UserSettings toReturn = new UserSettings(userInfo, 0, session.getScopeName(), isInfrastructureScope());
UserSettings toReturn = new UserSettings(userInfo, 0, session.getScopeName(), isInfrastructureScope(), isNotificationViaEmailEnabled(username, currOrg));
return toReturn; return toReturn;
} }
else { else {
@ -291,7 +297,7 @@ public class ShareUpdateServiceImpl extends RemoteServiceServlet implements Shar
//fakeVreNames.put("/gcube/devNext/NexNext","NexNext"); //fakeVreNames.put("/gcube/devNext/NexNext","NexNext");
UserInfo user = new UserInfo(session.getUsername(), fullName, thumbnailURL, email, "fakeAccountUrl", true, false, fakeVreNames); UserInfo user = new UserInfo(session.getUsername(), fullName, thumbnailURL, email, "fakeAccountUrl", true, false, fakeVreNames);
return new UserSettings(user, 0, session.getScopeName(), false); return new UserSettings(user, 0, session.getScopeName(), false, true);
} }
} catch (Exception e) { } catch (Exception e) {
@ -299,6 +305,12 @@ public class ShareUpdateServiceImpl extends RemoteServiceServlet implements Shar
} }
return new UserSettings(); return new UserSettings();
} }
private boolean isNotificationViaEmailEnabled(String username, Organization currOrg) {
final String ATTR_TO_CHECK = "PostNotificationViaEmail";
return OrganizationManagerImpl.get().readOrganizationCustomAttribute(username, currOrg, ATTR_TO_CHECK);
}
/** /**
* generate a preview of the file, upload the file on the storage and shorts the link * generate a preview of the file, upload the file on the storage and shorts the link
*/ */

View File

@ -10,17 +10,30 @@ public class UserSettings implements Serializable {
private int refreshingTimeInMillis; private int refreshingTimeInMillis;
private String currentScope; private String currentScope;
boolean isInfrastructure; boolean isInfrastructure;
boolean isNotificationViaEmailEnabled;
public UserSettings() { public UserSettings() {
super(); super();
} }
public UserSettings(UserInfo userInfo, int refreshingTimeInMillis, public UserSettings(UserInfo userInfo, int refreshingTimeInMillis,
String currentScope, boolean isInfrastructure) { String currentScope, boolean isInfrastructure,
boolean isNotificationViaEmailEnabled) {
super(); super();
this.userInfo = userInfo; this.userInfo = userInfo;
this.refreshingTimeInMillis = refreshingTimeInMillis; this.refreshingTimeInMillis = refreshingTimeInMillis;
this.currentScope = currentScope; this.currentScope = currentScope;
this.isInfrastructure = isInfrastructure; this.isInfrastructure = isInfrastructure;
this.isNotificationViaEmailEnabled = isNotificationViaEmailEnabled;
} }
public boolean isNotificationViaEmailEnabled() {
return isNotificationViaEmailEnabled;
}
public void setNotificationViaEmailEnabled(boolean isNotificationViaEmailEnabled) {
this.isNotificationViaEmailEnabled = isNotificationViaEmailEnabled;
}
public UserInfo getUserInfo() { public UserInfo getUserInfo() {
return userInfo; return userInfo;
} }