1 package com.dotmarketing.portlets.htmlpageviews.action; 2 3 import java.util.Calendar ; 4 import java.util.GregorianCalendar ; 5 import java.util.List ; 6 7 import javax.portlet.ActionRequest; 8 import javax.portlet.ActionResponse; 9 import javax.portlet.PortletConfig; 10 import javax.portlet.RenderRequest; 11 import javax.portlet.RenderResponse; 12 import javax.portlet.WindowState; 13 import javax.servlet.http.HttpServletRequest ; 14 import javax.servlet.http.HttpServletResponse ; 15 import javax.servlet.http.HttpSession ; 16 import javax.servlet.jsp.PageContext ; 17 18 import org.apache.struts.action.ActionForm; 19 import org.apache.struts.action.ActionForward; 20 import org.apache.struts.action.ActionMapping; 21 22 import com.dotmarketing.beans.Host; 23 import com.dotmarketing.beans.Identifier; 24 import com.dotmarketing.beans.UserProxy; 25 import com.dotmarketing.factories.HostFactory; 26 import com.dotmarketing.factories.IdentifierFactory; 27 import com.dotmarketing.factories.InodeFactory; 28 import com.dotmarketing.factories.UserProxyFactory; 29 import com.dotmarketing.portal.struts.DotPortletAction; 30 import com.dotmarketing.portlets.htmlpages.model.HTMLPage; 31 import com.dotmarketing.portlets.htmlpageviews.factories.HTMLPageViewFactory; 32 import com.dotmarketing.portlets.mailinglists.factories.MailingListFactory; 33 import com.dotmarketing.portlets.mailinglists.model.MailingList; 34 import com.dotmarketing.portlets.virtuallinks.factories.VirtualLinkFactory; 35 import com.dotmarketing.portlets.virtuallinks.model.VirtualLink; 36 import com.dotmarketing.util.Logger; 37 import com.dotmarketing.util.UtilMethods; 38 import com.dotmarketing.util.WebKeys; 39 import com.liferay.portal.ejb.UserLocalManagerUtil; 40 import com.liferay.portal.model.User; 41 import com.liferay.portal.struts.ActionException; 42 import com.liferay.portal.util.Constants; 43 import com.liferay.portlet.ActionResponseImpl; 44 import com.liferay.util.servlet.SessionMessages; 45 46 53 public class ViewHTMLPageViewsAction extends DotPortletAction { 54 55 60 public ActionForward render(ActionMapping mapping, ActionForm form, PortletConfig config, RenderRequest req, 61 RenderResponse res) throws Exception { 62 63 Logger.debug(this, "Running ViewHTMLPagesAction!!!!"); 64 65 try { 66 User user = _getUser(req); 68 69 if (req.getWindowState().equals(WindowState.NORMAL)) { 70 return mapping.findForward("portlet.ext.htmlpageviews.view"); 71 } else { 72 List list = MailingListFactory.getMailingListsByUser(user); 74 list.add(MailingListFactory.getUnsubscribersMailingList()); 75 req.setAttribute(WebKeys.MAILING_LIST_VIEW, list); 76 77 78 _viewWebAssets(req, user); 79 return mapping.findForward("portlet.ext.htmlpageviews.view_htmlpage_views"); 80 } 81 } catch (Exception e) { 82 req.setAttribute(PageContext.EXCEPTION, e); 83 return mapping.findForward(Constants.COMMON_ERROR); 84 } 85 } 86 87 public void processAction(ActionMapping mapping, ActionForm form, PortletConfig config, ActionRequest req, ActionResponse res) 88 throws Exception { 89 90 ActionResponseImpl resImpl = (ActionResponseImpl) res; 92 HttpServletResponse httpRes = resImpl.getHttpServletResponse(); 93 94 _retrieveUsers(req); 95 96 if (Constants.SAVE.equals(req.getParameter(Constants.CMD))) { 97 _saveMailingList(form, req, res); 98 } 99 if (Constants.UPDATE.equals(req.getParameter(Constants.CMD))) { 100 _saveMailingList(form, req, res); 101 } 102 if (Constants.DELETE.equals(req.getParameter(Constants.CMD))) { 103 _removeFromMailingList(form, req, res); 104 } 105 return; 106 107 } 108 109 private void _viewWebAssets(RenderRequest req, User user) throws Exception { 112 113 com.liferay.portlet.RenderRequestImpl reqImpl = (com.liferay.portlet.RenderRequestImpl) req; 114 HttpServletRequest httpReq = reqImpl.getHttpServletRequest(); 115 HttpSession session = httpReq.getSession(); 117 118 java.util.Date startDate = null; 119 if (req.getParameter("searchStartDate") != null) { 120 Logger.debug(this, "searchStartDate" + req.getParameter("searchStartDate")); 121 startDate = UtilMethods.htmlToDate(req.getParameter("searchStartDate")); 122 } else { 123 GregorianCalendar gcal = new GregorianCalendar (); 124 gcal.set(Calendar.DAY_OF_MONTH, 1); 125 gcal.set(Calendar.HOUR, 0); 126 gcal.set(Calendar.MINUTE, 0); 127 gcal.set(Calendar.SECOND, 0); 128 startDate = gcal.getTime(); 129 130 } 131 Logger.debug(this, "startDate" + startDate); 132 req.setAttribute("startDate", startDate); 133 134 java.util.Date endDate = null; 135 if (req.getParameter("searchEndDate") != null) { 136 Logger.debug(this, "searchEndDate" + req.getParameter("searchEndDate")); 137 endDate = UtilMethods.htmlToDate(req.getParameter("searchEndDate")); 138 GregorianCalendar gcal = new GregorianCalendar (); 139 gcal.setTime(endDate); 140 gcal.set(Calendar.HOUR,23); 141 gcal.set(Calendar.MINUTE,59); 142 gcal.set(Calendar.SECOND,59); 143 endDate = gcal.getTime(); 144 } else { 145 GregorianCalendar gcal = new GregorianCalendar (); 146 gcal.add(Calendar.MONTH, 1); 147 gcal.set(Calendar.DAY_OF_MONTH, 1); 148 gcal.set(Calendar.HOUR, 0); 149 gcal.set(Calendar.MINUTE, 0); 150 gcal.set(Calendar.SECOND, 0); 151 endDate = gcal.getTime(); 152 153 } 154 Logger.debug(this, "endDate" + endDate); 155 req.setAttribute("endDate", endDate); 156 157 String uri = null; 158 if (req.getParameter("htmlpage") != null) { 159 HTMLPage myHTMLPage = (HTMLPage) InodeFactory.getInode(req.getParameter("htmlpage"), HTMLPage.class); 160 uri = IdentifierFactory.getIdentifierByInode(myHTMLPage).getURI(); 161 req.setAttribute("htmlPage", myHTMLPage); 162 } else if (req.getParameter("pageIdentifier") != null) { 163 Identifier id = (Identifier) InodeFactory.getInode(req.getParameter("pageIdentifier"), Identifier.class); 164 uri = id.getURI(); 165 HTMLPage myHTMLPage = (HTMLPage) IdentifierFactory.getLiveChildOfClass(id, HTMLPage.class); 166 req.setAttribute("htmlPage", myHTMLPage); 167 } 168 169 if (req.getParameter("pageURL") != null) { 170 uri = req.getParameter("pageURL"); 171 String [] parts = uri.split(":"); 172 Host host = null; 173 if (parts.length > 1) { 174 host = HostFactory.getHostByHostName(parts[0]); 175 uri = parts[1]; 176 } else { 177 host = HostFactory.getDefaultHost(); 178 } 179 180 Identifier id = IdentifierFactory.getIdentifierByURI(uri, host); 181 HTMLPage myHTMLPage = (HTMLPage) IdentifierFactory.getLiveChildOfClass(id, HTMLPage.class); 182 req.setAttribute("htmlPage", myHTMLPage); 183 if (id.getInode() == 0) { 184 185 VirtualLink vl = VirtualLinkFactory.getVirtualLinkByURL(uri); 186 if (vl.getInode() == 0) { 187 188 myHTMLPage.setTitle("Page Not Found"); 189 SessionMessages.add(req, "message", "message.htmlpageviews.pagenotfound"); 190 } else { 191 req.setAttribute(WebKeys.VIRTUAL_LINK_EDIT, vl); 192 } 193 } 194 } 195 196 try { 197 if (UtilMethods.isSet(uri)) { 198 int totalPageViews = HTMLPageViewFactory.getTotalHTMLPageViewsBetweenDates(uri, startDate, endDate); 199 int uniqueVisitors = HTMLPageViewFactory.getUniqueVisitorsBetweenDates(uri, startDate, endDate); 200 java.util.List totalPageViewsByLanguage = HTMLPageViewFactory.getTotalHTMLPageViewsByLanguageBetweenDates(uri, 201 startDate, endDate); 202 java.util.List internalReferers = HTMLPageViewFactory.getTopInternalReferringPages(uri, startDate, endDate); 203 java.util.List internalOutgoing = HTMLPageViewFactory.getTopInternalOutgoingPages(uri, startDate, endDate); 204 205 java.util.List externalReferers = HTMLPageViewFactory.getTopExternalReferringPages(uri, startDate, endDate); 206 207 java.util.List topUsers = HTMLPageViewFactory.getTopUsers(uri, startDate, endDate); 208 209 java.util.List <Long > contentsInodesViews = HTMLPageViewFactory.getContentsInodesViewsBetweenDates(uri, startDate, endDate); 210 java.util.List <Long > contentsInodesUniqueVisitors = HTMLPageViewFactory.getContentsInodesUniqueVisitorsBetweenDates(uri, startDate, endDate); 211 212 java.util.HashMap <Long , Integer > countContentsInodesViews = _countNumEachLongFromList(contentsInodesViews); 213 java.util.HashMap <Long , Integer > countContentsInodesUniqueVisitors = _countNumEachLongFromList(contentsInodesUniqueVisitors); 214 215 java.util.HashSet <Long > contentsInodes = new java.util.HashSet <Long >(contentsInodesViews); 216 contentsInodes.addAll(contentsInodesUniqueVisitors); 217 218 req.setAttribute("totalPageViews", (new Integer (totalPageViews))); 219 req.setAttribute("uniqueVisitors", (new Integer (uniqueVisitors))); 220 req.setAttribute("totalPageViewsByLanguage", totalPageViewsByLanguage); 221 req.setAttribute("internalReferers", internalReferers); 222 req.setAttribute("externalReferers", externalReferers); 223 req.setAttribute("internalOutgoing", internalOutgoing); 224 req.setAttribute("topUsers", topUsers); 225 req.setAttribute("uri", uri); 226 227 req.setAttribute("contentsInodes", contentsInodes); 228 req.setAttribute("countContentsInodesViews", countContentsInodesViews); 229 req.setAttribute("countContentsInodesUniqueVisitors", countContentsInodesUniqueVisitors); 230 } 231 } catch (Exception e) { 232 Logger.error(this, e.getMessage(), e); 233 throw new ActionException(e.getMessage()); 234 } 235 Logger.debug(this, "Done with ViewHTMLPageViewsAction"); 236 237 } 238 239 private void _retrieveUsers(ActionRequest req) { 240 User user = _getUser(req); 241 java.util.Date startDate = null; 242 if (req.getParameter("searchStartDate") != null) { 243 Logger.debug(this, "searchStartDate" + req.getParameter("searchStartDate")); 244 startDate = UtilMethods.htmlToDate(req.getParameter("searchStartDate")); 245 } else { 246 GregorianCalendar gcal = new GregorianCalendar (); 247 gcal.set(Calendar.DAY_OF_MONTH, 1); 248 gcal.set(Calendar.HOUR, 0); 249 gcal.set(Calendar.MINUTE, 0); 250 gcal.set(Calendar.SECOND, 0); 251 startDate = gcal.getTime(); 252 253 } 254 Logger.debug(this, "startDate" + startDate); 255 req.setAttribute("startDate", startDate); 256 257 java.util.Date endDate = null; 258 if (req.getParameter("searchEndDate") != null) { 259 Logger.debug(this, "searchEndDate" + req.getParameter("searchEndDate")); 260 endDate = UtilMethods.htmlToDate(req.getParameter("searchEndDate")); 261 } else { 262 GregorianCalendar gcal = new GregorianCalendar (); 263 gcal.add(Calendar.MONTH, 1); 264 gcal.set(Calendar.DAY_OF_MONTH, 1); 265 gcal.set(Calendar.HOUR, 0); 266 gcal.set(Calendar.MINUTE, 0); 267 gcal.set(Calendar.SECOND, 0); 268 endDate = gcal.getTime(); 269 270 } 271 Logger.debug(this, "endDate" + endDate); 272 req.setAttribute("endDate", endDate); 273 274 String uri = null; 275 java.util.List users = null; 276 277 if (req.getParameter("virtualLinkInode") != null) { 278 VirtualLink vl = VirtualLinkFactory.getVirtualLink(req.getParameter("virtualLinkInode")); 279 users = HTMLPageViewFactory.getAllUsers(vl.getUrl(), startDate, endDate); 280 } 281 282 else if (req.getParameter("htmlpage") != null) { 283 HTMLPage myHTMLPage = (HTMLPage) InodeFactory.getInode(req.getParameter("htmlpage"), HTMLPage.class); 284 uri = IdentifierFactory.getIdentifierByInode(myHTMLPage).getURI(); 285 req.setAttribute("htmlPage", myHTMLPage); 286 users = HTMLPageViewFactory.getAllUsers(uri, startDate, endDate); 287 } else if (req.getParameter("pageIdentifier") != null) { 288 Identifier id = (Identifier) InodeFactory.getInode(req.getParameter("pageIdentifier"), Identifier.class); 289 uri = id.getURI(); 290 HTMLPage myHTMLPage = (HTMLPage) IdentifierFactory.getLiveChildOfClass(id, HTMLPage.class); 291 req.setAttribute("htmlPage", myHTMLPage); 292 users = HTMLPageViewFactory.getAllUsers(uri, startDate, endDate); 293 294 } 295 296 req.setAttribute(WebKeys.MAILING_LIST_SUBSCRIBERS, users); 297 } 298 299 private void _saveMailingList(ActionForm form, ActionRequest req, ActionResponse res) throws Exception { 301 302 Logger.debug(this, "ViewHTMLPageViews: Saving List"); 303 User user = _getUser(req); 304 java.util.List users = (List ) req.getAttribute(WebKeys.MAILING_LIST_SUBSCRIBERS); 305 String mailingListInode = (req.getParameter("mailingListInode") == null || req.getParameter("mailingListInode") 306 .equals("")) ? "0" : req.getParameter("mailingListInode"); 307 String mailingListTitle = req.getParameter("mailingListTitle"); 308 String allowPublicToSubscribe = req.getParameter("allowPublicToSubscribe"); 309 310 MailingList ml = (MailingList) InodeFactory.getInode(mailingListInode, MailingList.class); 312 String cmd = req.getParameter(com.liferay.portal.util.Constants.CMD); 313 if (com.liferay.portal.util.Constants.SAVE.equals(cmd)) { 314 ml.setTitle(mailingListTitle); 315 if (allowPublicToSubscribe.equals("yes")) 316 ml.setPublicList(true); 317 else 318 ml.setPublicList(false); 319 ml.setUserId(user.getUserId()); 320 } 321 InodeFactory.saveInode(ml); 322 323 Logger.debug(this, "Saving: " + users.size() + " subscribers."); 324 java.util.Iterator userIter = users.iterator(); 326 while (userIter.hasNext()) { 327 java.util.HashMap userCounts = (java.util.HashMap ) userIter.next(); 328 if (userCounts.get("user_id") != null) { 329 String userId = (String ) userCounts.get("user_id"); 330 User webUser = UserLocalManagerUtil.getUserById(userId); 331 UserProxy s = UserProxyFactory.getUserProxy(webUser); 332 ml.addChild(s); 333 } 334 } 335 336 ml.setSubscriberCount(InodeFactory.getChildrenClass(ml, UserProxy.class).size()); 337 InodeFactory.saveInode(ml); 338 339 if (com.liferay.portal.util.Constants.SAVE.equals(cmd)) { 340 SessionMessages.add(req, "message", "message.mailinglist.save"); 341 } else { 342 SessionMessages.add(req, "message", "message.mailinglist.subscribers.added"); 343 } 344 } 345 346 private void _removeFromMailingList(ActionForm form, ActionRequest req, ActionResponse res) throws Exception { 347 348 Logger.debug(this, "ViewHTMLPageViews: Removing subscribers From List"); 349 java.util.List users = (List ) req.getAttribute(WebKeys.MAILING_LIST_SUBSCRIBERS); 350 String mailingListInode = (req.getParameter("mailingListInode") == null || req.getParameter("mailingListInode") 351 .equals("")) ? "0" : req.getParameter("mailingListInode"); 352 353 MailingList ml = (MailingList) InodeFactory.getInode(mailingListInode, MailingList.class); 355 356 Logger.debug(this, "Removing: " + users.size() + " subscribers. If they are in the list."); 357 java.util.Iterator userIter = users.iterator(); 359 while (userIter.hasNext()) { 360 java.util.HashMap userCounts = (java.util.HashMap ) userIter.next(); 361 if (userCounts.get("user_id") != null) { 362 String userId = (String ) userCounts.get("user_id"); 363 User webUser = UserLocalManagerUtil.getUserById(userId); 364 UserProxy s = UserProxyFactory.getUserProxy(webUser); 365 if (s.getInode() > 0) 366 ml.deleteChild(s); 367 } 368 } 369 370 ml.setSubscriberCount(InodeFactory.getChildrenClass(ml, UserProxy.class).size()); 371 InodeFactory.saveInode(ml); 372 373 SessionMessages.add(req, "message", "message.mailinglist.subscribers.deleted"); 374 } 375 376 private java.util.HashMap <Long , Integer > _countNumEachLongFromList(java.util.List <Long > inodesList) { 377 java.util.HashMap <Long , Integer > result = new java.util.HashMap <Long , Integer >(); 378 379 if (0 < inodesList.size()) { 380 Long lastInode = inodesList.get(0); 381 int count = 1; 382 Long inode; 383 384 for (int pos = 1; pos < inodesList.size(); ++pos) { 385 inode = inodesList.get(pos); 386 if (lastInode.longValue() != inode.longValue()) { 387 result.put(lastInode, count); 388 lastInode = inode; 389 count = 1; 390 } else { 391 ++count; 392 } 393 } 394 395 result.put(lastInode, count); 396 } 397 398 return result; 399 } 400 } | Popular Tags |