001
014
015 package com.liferay.portlet.socialactivity.action;
016
017 import com.liferay.portal.kernel.json.JSONArray;
018 import com.liferay.portal.kernel.json.JSONFactoryUtil;
019 import com.liferay.portal.kernel.json.JSONObject;
020 import com.liferay.portal.kernel.servlet.SessionErrors;
021 import com.liferay.portal.kernel.util.Constants;
022 import com.liferay.portal.kernel.util.GetterUtil;
023 import com.liferay.portal.kernel.util.ParamUtil;
024 import com.liferay.portal.security.auth.PrincipalException;
025 import com.liferay.portal.security.permission.comparator.ModelResourceComparator;
026 import com.liferay.portal.struts.PortletAction;
027 import com.liferay.portal.theme.ThemeDisplay;
028 import com.liferay.portal.util.WebKeys;
029 import com.liferay.portlet.social.model.SocialActivityCounterConstants;
030 import com.liferay.portlet.social.model.SocialActivityCounterDefinition;
031 import com.liferay.portlet.social.model.SocialActivityDefinition;
032 import com.liferay.portlet.social.model.SocialActivitySetting;
033 import com.liferay.portlet.social.service.SocialActivitySettingServiceUtil;
034 import com.liferay.portlet.social.util.SocialConfigurationUtil;
035
036 import java.util.ArrayList;
037 import java.util.Arrays;
038 import java.util.Comparator;
039 import java.util.LinkedHashMap;
040 import java.util.List;
041 import java.util.Map;
042
043 import javax.portlet.ActionRequest;
044 import javax.portlet.ActionResponse;
045 import javax.portlet.PortletConfig;
046 import javax.portlet.RenderRequest;
047 import javax.portlet.RenderResponse;
048
049 import org.apache.struts.action.ActionForm;
050 import org.apache.struts.action.ActionForward;
051 import org.apache.struts.action.ActionMapping;
052
053
057 public class ViewAction extends PortletAction {
058
059 @Override
060 public void processAction(
061 ActionMapping actionMapping, ActionForm actionForm,
062 PortletConfig portletConfig, ActionRequest actionRequest,
063 ActionResponse actionResponse)
064 throws Exception {
065
066 String cmd = ParamUtil.getString(actionRequest, Constants.CMD);
067
068 try {
069 if (cmd.equals(Constants.UPDATE)) {
070 updateActivitySettings(actionRequest);
071 }
072
073 sendRedirect(actionRequest, actionResponse);
074 }
075 catch (Exception e) {
076 if (e instanceof PrincipalException) {
077 SessionErrors.add(actionRequest, e.getClass());
078 }
079 else {
080 throw e;
081 }
082 }
083 }
084
085 @Override
086 public ActionForward render(
087 ActionMapping actionMapping, ActionForm actionForm,
088 PortletConfig portletConfig, RenderRequest renderRequest,
089 RenderResponse renderResponse)
090 throws Exception {
091
092 ThemeDisplay themeDisplay = (ThemeDisplay)renderRequest.getAttribute(
093 WebKeys.THEME_DISPLAY);
094
095 try {
096 renderRequest.setAttribute(
097 WebKeys.SOCIAL_ACTIVITY_SETTINGS_MAP,
098 getActivitySettingsMap(themeDisplay));
099 }
100 catch (Exception e) {
101 if (e instanceof PrincipalException) {
102 SessionErrors.add(renderRequest, e.getClass());
103
104 return actionMapping.findForward(
105 "portlet.social_activity.error");
106 }
107 else {
108 throw e;
109 }
110 }
111
112 return actionMapping.findForward("portlet.social_activity.view");
113 }
114
115 protected Map<String, Boolean> getActivitySettingsMap(
116 ThemeDisplay themeDisplay)
117 throws Exception {
118
119 Map<String, Boolean> activitySettingsMap = new LinkedHashMap<>();
120
121 List<SocialActivitySetting> activitySettings =
122 SocialActivitySettingServiceUtil.getActivitySettings(
123 themeDisplay.getSiteGroupIdOrLiveGroupId());
124
125 String[] modelNames = SocialConfigurationUtil.getActivityModelNames();
126
127 Comparator<String> comparator = new ModelResourceComparator(
128 themeDisplay.getLocale());
129
130 Arrays.sort(modelNames, comparator);
131
132 for (String modelName : modelNames) {
133 List<SocialActivityDefinition> activityDefinitions =
134 SocialActivitySettingServiceUtil.getActivityDefinitions(
135 themeDisplay.getScopeGroupId(), modelName);
136
137 for (SocialActivityDefinition activityDefinition :
138 activityDefinitions) {
139
140 if (activityDefinition.isCountersEnabled()) {
141 activitySettingsMap.put(modelName, false);
142
143 break;
144 }
145 }
146 }
147
148 for (SocialActivitySetting activitySetting : activitySettings) {
149 String name = activitySetting.getName();
150
151 if (name.equals("enabled") &&
152 activitySettingsMap.containsKey(
153 activitySetting.getClassName())) {
154
155 activitySettingsMap.put(
156 activitySetting.getClassName(),
157 GetterUtil.getBoolean(activitySetting.getValue()));
158 }
159 }
160
161 return activitySettingsMap;
162 }
163
164 protected SocialActivityCounterDefinition updateActivityCounterDefinition(
165 JSONObject actionJSONObject,
166 SocialActivityDefinition activityDefinition,
167 String activityCounterName) {
168
169 SocialActivityCounterDefinition activityCounterDefinition =
170 activityDefinition.getActivityCounterDefinition(
171 activityCounterName);
172
173 if (activityCounterDefinition == null) {
174 activityCounterDefinition = new SocialActivityCounterDefinition();
175
176 activityCounterDefinition.setName(activityCounterName);
177 }
178
179 if (activityCounterName.equals(
180 SocialActivityCounterConstants.NAME_CONTRIBUTION)) {
181
182 activityCounterDefinition.setOwnerType(
183 SocialActivityCounterConstants.TYPE_CREATOR);
184 }
185 else if (activityCounterName.equals(
186 SocialActivityCounterConstants.NAME_PARTICIPATION)) {
187
188 activityCounterDefinition.setOwnerType(
189 SocialActivityCounterConstants.TYPE_ACTOR);
190 }
191 else if (activityCounterName.equals(
192 SocialActivityCounterConstants.NAME_POPULARITY)) {
193
194 activityCounterDefinition.setOwnerType(
195 SocialActivityCounterConstants.TYPE_ASSET);
196
197 activityCounterName =
198 SocialActivityCounterConstants.NAME_CONTRIBUTION;
199 }
200 else {
201 throw new IllegalArgumentException();
202 }
203
204 activityCounterDefinition.setEnabled(
205 actionJSONObject.getBoolean("active"));
206 activityCounterDefinition.setIncrement(
207 actionJSONObject.getInt(activityCounterName + "Increment"));
208 activityCounterDefinition.setLimitPeriod(
209 actionJSONObject.getInt(activityCounterName + "LimitPeriod"));
210 activityCounterDefinition.setLimitValue(
211 actionJSONObject.getInt(activityCounterName + "LimitValue"));
212
213 return activityCounterDefinition;
214 }
215
216 protected void updateActivitySettings(ActionRequest actionRequest)
217 throws Exception {
218
219 ThemeDisplay themeDisplay = (ThemeDisplay)actionRequest.getAttribute(
220 WebKeys.THEME_DISPLAY);
221
222 String settingsJSON = ParamUtil.getString(
223 actionRequest, "settingsJSON");
224
225 JSONObject settingsJSONObject = JSONFactoryUtil.createJSONObject(
226 settingsJSON);
227
228 JSONArray actionsJSONArray = settingsJSONObject.getJSONArray("actions");
229
230 String modelName = settingsJSONObject.getString("modelName");
231
232 for (int i = 0; i < actionsJSONArray.length(); i++) {
233 JSONObject actionJSONObject = actionsJSONArray.getJSONObject(i);
234
235 int activityType = actionJSONObject.getInt("activityType");
236
237 SocialActivityDefinition activityDefinition =
238 SocialActivitySettingServiceUtil.getActivityDefinition(
239 themeDisplay.getSiteGroupIdOrLiveGroupId(), modelName,
240 activityType);
241
242 if (activityDefinition == null) {
243 continue;
244 }
245
246 List<SocialActivityCounterDefinition> activityCounterDefinitions =
247 new ArrayList<>();
248
249 activityCounterDefinitions.add(
250 updateActivityCounterDefinition(
251 actionJSONObject, activityDefinition,
252 SocialActivityCounterConstants.NAME_CONTRIBUTION));
253
254 activityCounterDefinitions.add(
255 updateActivityCounterDefinition(
256 actionJSONObject, activityDefinition,
257 SocialActivityCounterConstants.NAME_PARTICIPATION));
258
259 activityCounterDefinitions.add(
260 updateActivityCounterDefinition(
261 actionJSONObject, activityDefinition,
262 SocialActivityCounterConstants.NAME_POPULARITY));
263
264 SocialActivitySettingServiceUtil.updateActivitySettings(
265 themeDisplay.getSiteGroupIdOrLiveGroupId(), modelName,
266 activityType, activityCounterDefinitions);
267 }
268 }
269
270 }