diff --git a/.classpath b/.classpath
index 2d35416..a59a67b 100644
--- a/.classpath
+++ b/.classpath
@@ -1,6 +1,6 @@
-
+
@@ -31,5 +31,5 @@
-
+
diff --git a/distro/changelog.xml b/distro/changelog.xml
index 160cb42..ae9320b 100644
--- a/distro/changelog.xml
+++ b/distro/changelog.xml
@@ -1,4 +1,8 @@
+
+ made notification to members option configurable as default, see Feature #121
+
Integrated gwt-bootstrap and revised css
@@ -7,7 +11,8 @@
Added Client scope handler, to set the scope from the client
- and help preventing the browser back button cache problem
+ and help preventing the browser back button cache problem
+
diff --git a/pom.xml b/pom.xml
index 8b77e91..8c91834 100644
--- a/pom.xml
+++ b/pom.xml
@@ -13,7 +13,7 @@
org.gcube.portlets.user
share-updates
war
- 1.7.0-SNAPSHOT
+ 1.8.0-SNAPSHOT
gCube Share Updates Portlet
diff --git a/src/main/java/org/gcube/portlets/user/shareupdates/client/view/ShareUpdateForm.java b/src/main/java/org/gcube/portlets/user/shareupdates/client/view/ShareUpdateForm.java
index feaf5ac..d6903ba 100644
--- a/src/main/java/org/gcube/portlets/user/shareupdates/client/view/ShareUpdateForm.java
+++ b/src/main/java/org/gcube/portlets/user/shareupdates/client/view/ShareUpdateForm.java
@@ -20,6 +20,7 @@ import org.gcube.portlets.widgets.fileupload.client.view.UploadProgressPanel;
import org.jsonmaker.gwt.client.Jsonizer;
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.Unit;
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.UiField;
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.rpc.AsyncCallback;
import com.google.gwt.user.client.ui.Button;
@@ -46,7 +46,6 @@ import com.google.gwt.user.client.ui.Widget;
/**
*
* @author Massimiliano Assante
- * @version 1.2 Nov 2012
*
*/
public class ShareUpdateForm extends Composite {
@@ -59,13 +58,13 @@ public class ShareUpdateForm extends Composite {
final PageBusAdapter pageBusAdapter = new PageBusAdapter();
// the label for all Vres/channels
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 ERROR_UPDATE_TEXT = "Looks like empty to me!";
public final static String NO_TEXT_FILE_SHARE = "_N0_73X7_SH4R3_";
private final static String LISTBOX_LEVEL = " - ";
-
-
+
+
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 attach = GWT.getModuleBaseURL() + "../images/attach.png";
@@ -75,7 +74,7 @@ public class ShareUpdateForm extends Composite {
*/
private String uploadedFilePathOnServer;
private String uploadedFileNameOnServer;
-
+
private HandlerManager eventBus = new HandlerManager(null);
private static ShareUpdateFormUiBinder uiBinder = GWT
@@ -110,10 +109,10 @@ public class ShareUpdateForm extends Composite {
@UiField SuperPosedTextArea shareTextArea;
@UiField
- ListBox privacyLevel = new ListBox(false);
-
+ ListBox privacyLevel = new ListBox();
+
@UiField
- ListBox notifyListbox = new ListBox(false);
+ ListBox notifyListbox = new ListBox();
private UserInfo myUserInfo;
@@ -131,18 +130,18 @@ public class ShareUpdateForm extends Composite {
}
});
}
-
+
public ShareUpdateForm() {
initWidget(uiBinder.createAndBindUi(this));
singleton = this;
bind();
avatarImage.setUrl(loading);
shareTextArea.setText(SHARE_UPDATE_TEXT);
-
+
attachButton.getElement().getStyle().setDisplay(Display.INLINE);
attachButton.setHTML(" ");
-
-
+
+
shareupdateService.getUserSettings(new AsyncCallback() {
public void onFailure(Throwable caught) {
avatarImage.setSize("60px", "60px");
@@ -155,6 +154,9 @@ public class ShareUpdateForm extends Composite {
avatarImage.setSize("60px", "60px");
avatarImage.setUrl(myUserInfo.getAvatarId());
String singleVREName = "";
+
+ boolean notificationEmail = userSettings.isNotificationViaEmailEnabled();
+
if (myUserInfo.getOwnVREs().size() > 1) {
privacyLevel.addItem(ALL_VRES, PrivacyLevel.VRES.toString());
for (String vreId : myUserInfo.getOwnVREs().keySet())
@@ -171,9 +173,14 @@ public class ShareUpdateForm extends Composite {
privacyLevel.addItem("Share with: Everyone", PrivacyLevel.PORTAL.toString());
//change css if deployed in VRE scope
if (!userSettings.isInfrastructure()) {
- mainPanel.addStyleName("framed");
- notifyListbox.addItem("Share with: " + singleVREName);
- notifyListbox.addItem("Share with: " + singleVREName+" + Notification to members");
+ mainPanel.addStyleName("framed");
+ if (notificationEmail) {
+ 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);
}
else
@@ -181,7 +188,7 @@ public class ShareUpdateForm extends Composite {
}
});
}
-
+
/** Used by UiBinder to instantiate UploadProgressView */
@UiFactory
UploadProgressPanel instatiateProgressView() {
@@ -213,7 +220,7 @@ public class ShareUpdateForm extends Composite {
public static native void fileBrowse(Element el) /*-{
el.click();
}-*/;
-
+
@UiHandler("submitButton")
void onClick(ClickEvent e) {
@@ -229,7 +236,7 @@ public class ShareUpdateForm extends Composite {
}
myUserInfo = result.getUserInfo();
String toShare = shareTextArea.getText().trim();
-
+
//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("")) ) {
toShare = NO_TEXT_FILE_SHARE;
@@ -280,7 +287,7 @@ public class ShareUpdateForm extends Composite {
}
LinkPreview preview2Share = new LinkPreview(linkTitle, linkDescription, linkUrl, linkHost, null);
boolean notifyGroup = notifyListbox.getSelectedIndex() > 0;
-
+
shareupdateService.share(toShare, FeedType.TWEET, getPrivacyLevel(), vreId, preview2Share, linkUrlThumbnail, mentionedUsers, fileName, filePath, notifyGroup, new AsyncCallback() {
public void onFailure(Throwable caught) {
submitButton.setEnabled(true);
@@ -395,7 +402,7 @@ public class ShareUpdateForm extends Composite {
final Button close = new Button("Try Again");
final HTML reportIssue = new HTML(""
+ "Report the issue");
-
+
close.addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
@@ -403,7 +410,7 @@ public class ShareUpdateForm extends Composite {
preview.remove(hp);
}
});
-
+
hp.setVerticalAlignment(HasAlignment.ALIGN_MIDDLE);
hp.add(close);
hp.add(reportIssue);
@@ -419,7 +426,7 @@ public class ShareUpdateForm extends Composite {
uploadedFilePathOnServer = absolutePathOnServer;
uploadedFileNameOnServer = fileName;
submitButton.setEnabled(true);
-
+
}
});
}
diff --git a/src/main/java/org/gcube/portlets/user/shareupdates/server/ShareUpdateServiceImpl.java b/src/main/java/org/gcube/portlets/user/shareupdates/server/ShareUpdateServiceImpl.java
index 6c1fa09..71055d2 100644
--- a/src/main/java/org/gcube/portlets/user/shareupdates/server/ShareUpdateServiceImpl.java
+++ b/src/main/java/org/gcube/portlets/user/shareupdates/server/ShareUpdateServiceImpl.java
@@ -28,7 +28,9 @@ import org.gcube.contentmanagement.blobstorage.service.IClient;
import org.gcube.contentmanager.storageclient.wrapper.AccessType;
import org.gcube.contentmanager.storageclient.wrapper.MemoryType;
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.impl.OrganizationManagerImpl;
import org.gcube.portal.custom.scopemanager.scopehelper.ScopeHelper;
import org.gcube.portal.databook.server.DBCassandraAstyanaxImpl;
import org.gcube.portal.databook.server.DatabookStore;
@@ -116,7 +118,7 @@ public class ShareUpdateServiceImpl extends RemoteServiceServlet implements Shar
}
public String getDevelopmentUser() {
String user = TEST_USER;
-// user = "massimiliano.assante";
+ user = "massimiliano.assante";
return user;
}
/**
@@ -272,16 +274,20 @@ public class ShareUpdateServiceImpl extends RemoteServiceServlet implements Shar
String thumbnailURL = "images/Avatar_default.png";
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();
fullName = user.getFirstName() + " " + user.getLastName();
email = user.getEmailAddress();
ThemeDisplay themeDisplay = (ThemeDisplay) this.getThreadLocalRequest().getSession().getAttribute(WebKeys.THEME_DISPLAY);
+
String accountURL = themeDisplay.getURLMyAccount().toString();
HashMap vreNames = getUserVreNames(username);
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;
}
else {
@@ -291,7 +297,7 @@ public class ShareUpdateServiceImpl extends RemoteServiceServlet implements Shar
//fakeVreNames.put("/gcube/devNext/NexNext","NexNext");
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) {
@@ -299,6 +305,12 @@ public class ShareUpdateServiceImpl extends RemoteServiceServlet implements Shar
}
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
*/
diff --git a/src/main/java/org/gcube/portlets/user/shareupdates/shared/UserSettings.java b/src/main/java/org/gcube/portlets/user/shareupdates/shared/UserSettings.java
index 6200aa8..d052306 100644
--- a/src/main/java/org/gcube/portlets/user/shareupdates/shared/UserSettings.java
+++ b/src/main/java/org/gcube/portlets/user/shareupdates/shared/UserSettings.java
@@ -10,17 +10,30 @@ public class UserSettings implements Serializable {
private int refreshingTimeInMillis;
private String currentScope;
boolean isInfrastructure;
+ boolean isNotificationViaEmailEnabled;
public UserSettings() {
super();
}
+
public UserSettings(UserInfo userInfo, int refreshingTimeInMillis,
- String currentScope, boolean isInfrastructure) {
+ String currentScope, boolean isInfrastructure,
+ boolean isNotificationViaEmailEnabled) {
super();
this.userInfo = userInfo;
this.refreshingTimeInMillis = refreshingTimeInMillis;
this.currentScope = currentScope;
this.isInfrastructure = isInfrastructure;
+ this.isNotificationViaEmailEnabled = isNotificationViaEmailEnabled;
}
+
+ public boolean isNotificationViaEmailEnabled() {
+ return isNotificationViaEmailEnabled;
+ }
+
+ public void setNotificationViaEmailEnabled(boolean isNotificationViaEmailEnabled) {
+ this.isNotificationViaEmailEnabled = isNotificationViaEmailEnabled;
+ }
+
public UserInfo getUserInfo() {
return userInfo;
}