1 31 package org.blojsom.plugin.admin; 32 33 import org.apache.commons.logging.Log; 34 import org.apache.commons.logging.LogFactory; 35 import org.blojsom.blog.*; 36 import org.blojsom.event.EventBroadcaster; 37 import org.blojsom.fetcher.Fetcher; 38 import org.blojsom.fetcher.FetcherException; 39 import org.blojsom.plugin.PluginException; 40 import org.blojsom.plugin.comment.event.CommentApprovedEvent; 41 import org.blojsom.plugin.comment.event.CommentDeletedEvent; 42 import org.blojsom.plugin.comment.event.CommentMarkedSpamEvent; 43 import org.blojsom.plugin.common.ResponseConstants; 44 import org.blojsom.plugin.pingback.event.PingbackApprovedEvent; 45 import org.blojsom.plugin.pingback.event.PingbackDeletedEvent; 46 import org.blojsom.plugin.pingback.event.PingbackMarkedSpamEvent; 47 import org.blojsom.plugin.trackback.event.TrackbackApprovedEvent; 48 import org.blojsom.plugin.trackback.event.TrackbackDeletedEvent; 49 import org.blojsom.plugin.trackback.event.TrackbackMarkedSpamEvent; 50 import org.blojsom.util.BlojsomConstants; 51 import org.blojsom.util.BlojsomUtils; 52 53 import javax.servlet.http.HttpServletRequest ; 54 import javax.servlet.http.HttpServletResponse ; 55 import java.util.Date ; 56 import java.util.Map ; 57 58 65 public class BulkResponseManagement extends BaseAdminPlugin { 66 67 private Log _logger = LogFactory.getLog(BulkResponseManagement.class); 68 69 private static final String BULK_RESPONSE_MANAGEMENT_PERMISSION = "bulk_response_management_permission"; 70 private static final String BLOJSOM_USER_OBJECT = "BLOJSOM_USER_OBJECT"; 71 72 private String [] DEFAULT_RESPONSE_STATUS_LIST = {ResponseConstants.NEW_STATUS, ResponseConstants.SPAM_STATUS}; 73 74 private static final String FAILED_BULK_PERMISSION_KEY = "failed.bulk.permission.text"; 76 private static final String SUCCESFUL_BULK_PROCESSING_KEY = "successful.bulk.processing.text"; 77 78 private static final String BULK_RESPONSE_MANAGEMENT_PAGE = "/org/blojsom/plugin/admin/templates/bulk-response-management"; 80 81 private static final String BULK_RESPONSE_MANAGEMENT_ACTION = "bulk-response-management"; 83 84 private static final String BULK_RESPONSES = "BULK_RESPONSES"; 86 87 private static final String DELETE_COMMENTS = "delete_comments"; 89 private static final String APPROVE_COMMENTS = "approve_comments"; 90 private static final String DELETE_TRACKBACKS = "delete_trackbacks"; 91 private static final String APPROVE_TRACKBACKS = "approve_trackbacks"; 92 private static final String DELETE_PINGBACKS = "delete_pingbacks"; 93 private static final String APPROVE_PINGBACKS = "approve_pingbacks"; 94 private static final String MARK_SPAM_COMMENTS = "mark_spam_comments"; 95 private static final String MARK_SPAM_TRACKBACKS = "mark_spam_trackbacks"; 96 private static final String MARK_SPAM_PINGBACKS = "mark_spam_pingbacks"; 97 private static final String QUERY = "query"; 98 99 private Fetcher _fetcher; 100 private EventBroadcaster _eventBroadcaster; 101 private String [] _responseStatusList = DEFAULT_RESPONSE_STATUS_LIST; 102 103 106 public BulkResponseManagement() { 107 } 108 109 114 public void setFetcher(Fetcher fetcher) { 115 _fetcher = fetcher; 116 } 117 118 123 public void setEventBroadcaster(EventBroadcaster eventBroadcaster) { 124 _eventBroadcaster = eventBroadcaster; 125 } 126 127 132 public void setResponseStatusList(String [] statusList) { 133 _responseStatusList = statusList; 134 } 135 136 147 public Entry[] process(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Blog blog, Map context, Entry[] entries) throws PluginException { 148 if (!authenticateUser(httpServletRequest, httpServletResponse, context, blog)) { 149 httpServletRequest.setAttribute(BlojsomConstants.PAGE_PARAM, ADMIN_LOGIN_PAGE); 150 151 return entries; 152 } 153 154 String username = getUsernameFromSession(httpServletRequest, blog); 155 if (!checkPermission(blog, null, username, BULK_RESPONSE_MANAGEMENT_PERMISSION)) { 156 httpServletRequest.setAttribute(BlojsomConstants.PAGE_PARAM, ADMIN_ADMINISTRATION_PAGE); 157 addOperationResultMessage(context, getAdminResource(FAILED_BULK_PERMISSION_KEY, FAILED_BULK_PERMISSION_KEY, blog.getBlogAdministrationLocale())); 158 159 return entries; 160 } 161 162 try { 163 context.put(BLOJSOM_USER_OBJECT, _fetcher.loadUser(blog, username)); 164 } catch (FetcherException e) { 165 if (_logger.isErrorEnabled()) { 166 _logger.error(e); 167 } 168 } 169 170 String action = BlojsomUtils.getRequestValue(ACTION_PARAM, httpServletRequest); 171 if (BlojsomUtils.checkNullOrBlank(action)) { 172 if (_logger.isDebugEnabled()) { 173 _logger.debug("User did not request edit action"); 174 } 175 httpServletRequest.setAttribute(BlojsomConstants.PAGE_PARAM, ADMIN_ADMINISTRATION_PAGE); 176 } else if (PAGE_ACTION.equals(action)) { 177 if (_logger.isDebugEnabled()) { 178 _logger.debug("User requested bulk response edit page"); 179 } 180 } else if (BULK_RESPONSE_MANAGEMENT_ACTION.equals(action)) { 181 if (_logger.isDebugEnabled()) { 182 _logger.debug("User requested bulk response management action"); 183 } 184 185 int commentsApproved = 0; 186 int commentsDeleted = 0; 187 int trackbacksApproved = 0; 188 int trackbacksDeleted = 0; 189 int pingbacksApproved = 0; 190 int pingbacksDeleted = 0; 191 192 Integer entityID; 193 194 String [] markspamComments = BlojsomUtils.getRequestValues(MARK_SPAM_COMMENTS, httpServletRequest); 195 for (int i = 0; i < markspamComments.length; i++) { 196 try { 197 String item = markspamComments[i]; 198 entityID = Integer.valueOf(item); 199 Comment comment = _fetcher.newComment(); 200 comment.setBlogId(blog.getId()); 201 comment.setId(entityID); 202 203 _fetcher.loadComment(blog, comment); 204 205 CommentMarkedSpamEvent commentMarkedSpamEvent = new CommentMarkedSpamEvent(this, new Date (), comment, blog); 206 _eventBroadcaster.broadcastEvent(commentMarkedSpamEvent); 207 208 if (_logger.isDebugEnabled()) { 209 _logger.debug("Marked comment as spam for comment ID: " + entityID); 210 } 211 } catch (NumberFormatException e) { 212 } catch (FetcherException e) { 213 if (_logger.isErrorEnabled()) { 214 _logger.error(e); 215 } 216 } 217 } 218 219 String [] markspamTrackbacks = BlojsomUtils.getRequestValues(MARK_SPAM_TRACKBACKS, httpServletRequest); 220 for (int i = 0; i < markspamTrackbacks.length; i++) { 221 try { 222 String item = markspamTrackbacks[i]; 223 entityID = Integer.valueOf(item); 224 Trackback trackback = _fetcher.newTrackback(); 225 trackback.setBlogId(blog.getId()); 226 trackback.setId(entityID); 227 228 _fetcher.loadTrackback(blog, trackback); 229 230 TrackbackMarkedSpamEvent trackbackMarkedSpamEvent = new TrackbackMarkedSpamEvent(this, new Date (), trackback, blog); 231 _eventBroadcaster.broadcastEvent(trackbackMarkedSpamEvent); 232 233 if (_logger.isDebugEnabled()) { 234 _logger.debug("Marked trackback as spam for trackback ID: " + entityID); 235 } 236 } catch (NumberFormatException e) { 237 } catch (FetcherException e) { 238 if (_logger.isErrorEnabled()) { 239 _logger.error(e); 240 } 241 } 242 } 243 244 String [] markspamPingbacks = BlojsomUtils.getRequestValues(MARK_SPAM_PINGBACKS, httpServletRequest); 245 for (int i = 0; i < markspamPingbacks.length; i++) { 246 try { 247 String item = markspamPingbacks[i]; 248 entityID = Integer.valueOf(item); 249 Pingback pingback = _fetcher.newPingback(); 250 pingback.setBlogId(blog.getId()); 251 pingback.setId(entityID); 252 253 _fetcher.loadPingback(blog, pingback); 254 255 PingbackMarkedSpamEvent pingbackMarkedSpamEvent = new PingbackMarkedSpamEvent(this, new Date (), pingback, blog); 256 _eventBroadcaster.broadcastEvent(pingbackMarkedSpamEvent); 257 258 if (_logger.isDebugEnabled()) { 259 _logger.debug("Marked pingback as spam for pingback ID: " + entityID); 260 } 261 } catch (NumberFormatException e) { 262 } catch (FetcherException e) { 263 if (_logger.isErrorEnabled()) { 264 _logger.error(e); 265 } 266 } 267 } 268 269 String [] delete = BlojsomUtils.getRequestValues(DELETE_COMMENTS, httpServletRequest); 270 for (int i = 0; i < delete.length; i++) { 271 String item = delete[i]; 272 try { 273 entityID = Integer.valueOf(item); 274 Comment comment = _fetcher.newComment(); 275 comment.setBlogId(blog.getId()); 276 comment.setId(entityID); 277 278 _fetcher.loadComment(blog, comment); 279 _fetcher.deleteComment(blog, comment); 280 commentsDeleted++; 281 282 _eventBroadcaster.broadcastEvent(new CommentDeletedEvent(this, new Date (), comment, blog)); 283 if (_logger.isDebugEnabled()) { 284 _logger.debug("Bulk delete comment ID: " + entityID); 285 } 286 } catch (NumberFormatException e) { 287 } catch (FetcherException e) { 288 if (_logger.isErrorEnabled()) { 289 _logger.error(e); 290 } 291 } 292 } 293 294 String [] approve = BlojsomUtils.getRequestValues(APPROVE_COMMENTS, httpServletRequest); 295 for (int i = 0; i < approve.length; i++) { 296 String item = approve[i]; 297 try { 298 entityID = Integer.valueOf(item); 299 Comment comment = _fetcher.newComment(); 300 comment.setBlogId(blog.getId()); 301 comment.setId(entityID); 302 303 _fetcher.loadComment(blog, comment); 304 comment.setStatus(ResponseConstants.APPROVED_STATUS); 305 _fetcher.saveComment(blog, comment); 306 commentsApproved += 1; 307 308 _eventBroadcaster.broadcastEvent(new CommentApprovedEvent(this, new Date (), comment, blog)); 309 if (_logger.isDebugEnabled()) { 310 _logger.debug("Bulk approve comment ID: " + entityID); 311 } 312 } catch (NumberFormatException e) { 313 } catch (FetcherException e) { 314 if (_logger.isErrorEnabled()) { 315 _logger.error(e); 316 } 317 } 318 } 319 320 delete = BlojsomUtils.getRequestValues(DELETE_TRACKBACKS, httpServletRequest); 321 for (int i = 0; i < delete.length; i++) { 322 String item = delete[i]; 323 try { 324 entityID = Integer.valueOf(item); 325 Trackback trackback = _fetcher.newTrackback(); 326 trackback.setBlogId(blog.getId()); 327 trackback.setId(entityID); 328 329 _fetcher.loadTrackback(blog, trackback); 330 _fetcher.deleteTrackback(blog, trackback); 331 trackbacksDeleted += 1; 332 333 _eventBroadcaster.broadcastEvent(new TrackbackDeletedEvent(this, new Date (), trackback, blog)); 334 if (_logger.isDebugEnabled()) { 335 _logger.debug("Bulk delete trackback ID: " + entityID); 336 } 337 } catch (NumberFormatException e) { 338 } catch (FetcherException e) { 339 if (_logger.isErrorEnabled()) { 340 _logger.error(e); 341 } 342 } 343 } 344 345 approve = BlojsomUtils.getRequestValues(APPROVE_TRACKBACKS, httpServletRequest); 346 for (int i = 0; i < approve.length; i++) { 347 String item = approve[i]; 348 try { 349 entityID = Integer.valueOf(item); 350 Trackback trackback = _fetcher.newTrackback(); 351 trackback.setBlogId(blog.getId()); 352 trackback.setId(entityID); 353 354 _fetcher.loadTrackback(blog, trackback); 355 trackback.setStatus(ResponseConstants.APPROVED_STATUS); 356 _fetcher.saveTrackback(blog, trackback); 357 trackbacksApproved += 1; 358 359 _eventBroadcaster.broadcastEvent(new TrackbackApprovedEvent(this, new Date (), trackback, blog)); 360 if (_logger.isDebugEnabled()) { 361 _logger.debug("Bulk approve trackback ID: " + entityID); 362 } 363 } catch (NumberFormatException e) { 364 } catch (FetcherException e) { 365 if (_logger.isErrorEnabled()) { 366 _logger.error(e); 367 } 368 } 369 } 370 371 delete = BlojsomUtils.getRequestValues(DELETE_PINGBACKS, httpServletRequest); 372 for (int i = 0; i < delete.length; i++) { 373 String item = delete[i]; 374 try { 375 entityID = Integer.valueOf(item); 376 Pingback pingback = _fetcher.newPingback(); 377 pingback.setBlogId(blog.getId()); 378 pingback.setId(entityID); 379 380 _fetcher.loadPingback(blog, pingback); 381 _fetcher.deletePingback(blog, pingback); 382 pingbacksDeleted += 1; 383 384 _eventBroadcaster.broadcastEvent(new PingbackDeletedEvent(this, new Date (), pingback, blog)); 385 if (_logger.isDebugEnabled()) { 386 _logger.debug("Bulk delete pingback ID: " + entityID); 387 } 388 } catch (NumberFormatException e) { 389 } catch (FetcherException e) { 390 if (_logger.isErrorEnabled()) { 391 _logger.error(e); 392 } 393 } 394 } 395 396 approve = BlojsomUtils.getRequestValues(APPROVE_PINGBACKS, httpServletRequest); 397 for (int i = 0; i < approve.length; i++) { 398 String item = approve[i]; 399 try { 400 entityID = Integer.valueOf(item); 401 Pingback pingback = _fetcher.newPingback(); 402 pingback.setBlogId(blog.getId()); 403 pingback.setId(entityID); 404 405 _fetcher.loadPingback(blog, pingback); 406 pingback.setStatus(ResponseConstants.APPROVED_STATUS); 407 _fetcher.savePingback(blog, pingback); 408 pingbacksApproved += 1; 409 410 _eventBroadcaster.broadcastEvent(new PingbackApprovedEvent(this, new Date (), pingback, blog)); 411 if (_logger.isDebugEnabled()) { 412 _logger.debug("Bulk approve pingback ID: " + entityID); 413 } 414 } catch (NumberFormatException e) { 415 } catch (FetcherException e) { 416 if (_logger.isErrorEnabled()) { 417 _logger.error(e); 418 } 419 } 420 } 421 422 if (commentsApproved > 0 || commentsDeleted > 0 || trackbacksApproved > 0 || trackbacksDeleted > 0 423 || pingbacksApproved > 0 || pingbacksDeleted > 0) { 424 addOperationResultMessage(context, formatAdminResource(SUCCESFUL_BULK_PROCESSING_KEY, SUCCESFUL_BULK_PROCESSING_KEY, 425 blog.getBlogAdministrationLocale(), 426 new Object [] {new Integer (commentsApproved), new Integer (commentsDeleted), 427 new Integer (trackbacksApproved), new Integer (trackbacksDeleted), 428 new Integer (pingbacksApproved), new Integer (pingbacksDeleted)})); 429 } 430 } 431 432 String query = BlojsomUtils.getRequestValue(QUERY, httpServletRequest); 433 434 try { 436 if (BlojsomUtils.checkNullOrBlank(query)) { 437 context.put(BULK_RESPONSES, _fetcher.findResponsesByStatus(blog, _responseStatusList)); 438 } else { 439 context.put(BULK_RESPONSES, _fetcher.findResponsesByQuery(blog, query)); 440 context.put(QUERY, BlojsomUtils.escapeString(query)); 441 } 442 } catch (FetcherException e) { 443 if (_logger.isErrorEnabled()) { 444 _logger.error(e); 445 } 446 } 447 448 httpServletRequest.setAttribute(BlojsomConstants.PAGE_PARAM, BULK_RESPONSE_MANAGEMENT_PAGE); 449 450 return entries; 451 } 452 } 453 | Popular Tags |