1 package com.dotmarketing.portlets.events.factories; 2 3 import java.util.ArrayList ; 4 import java.util.Calendar ; 5 import java.util.Date ; 6 import java.util.GregorianCalendar ; 7 import java.util.Iterator ; 8 import java.util.List ; 9 10 import com.dotmarketing.beans.Inode; 11 import com.dotmarketing.cms.factories.PublicCompanyFactory; 12 import com.dotmarketing.db.DotConnect; 13 import com.dotmarketing.db.DotHibernate; 14 import com.dotmarketing.factories.InodeFactory; 15 import com.dotmarketing.factories.RoleFactory; 16 import com.dotmarketing.portlets.categories.model.Category; 17 import com.dotmarketing.portlets.events.model.Event; 18 import com.dotmarketing.portlets.events.model.Recurance; 19 import com.dotmarketing.portlets.facilities.model.Facility; 20 import com.dotmarketing.util.Config; 21 import com.dotmarketing.util.Constants; 22 import com.dotmarketing.util.Logger; 23 import com.dotmarketing.util.Mailer; 24 import com.dotmarketing.util.UtilHTML; 25 import com.dotmarketing.util.UtilMethods; 26 import com.liferay.portal.PortalException; 27 import com.liferay.portal.SystemException; 28 import com.liferay.portal.ejb.RoleLocalManagerUtil; 29 import com.liferay.portal.ejb.UserLocalManagerUtil; 30 import com.liferay.portal.model.Role; 31 import com.liferay.portal.model.User; 32 33 37 38 public class EventFactory { 39 40 public static Event getEvent(String inode) { 41 DotHibernate dh = new DotHibernate(Event.class); 42 dh.setQuery("from inode in class com.dotmarketing.portlets.events.model.Event where inode = ?"); 43 dh.setParam(inode); 44 return (Event) dh.load(); 45 } 46 47 public static Event newInstance() { 48 Event e = new Event(); 49 50 return e; 51 } 52 53 public static void deleteEvent(Event e) { 54 InodeFactory.deleteInode(e); 55 } 56 57 public static void deleteEventSeries(Event e) { 58 if (InodeFactory.countChildrenOfClass(e, Recurance.class) > 0) { 59 Recurance r = (Recurance) InodeFactory.getChildOfClass(e, Recurance.class); 60 RecuranceFactory.deleteRecurringEvents(r); 61 } 62 } 63 64 public static java.util.List getEventsByDateRange(java.util.Date from, java.util.Date to) { 65 66 GregorianCalendar cal = new GregorianCalendar (); 67 cal.setTime(from); 68 cal.add(GregorianCalendar.SECOND, -1); 69 from = cal.getTime(); 70 71 cal.setTime(to); 72 cal.add(GregorianCalendar.SECOND, 1); 73 to = cal.getTime(); 74 75 DotHibernate dh = new DotHibernate(Event.class); 76 dh 77 .setSQLQuery("select {event.*} from event, inode event_1_ where event.inode = event_1_.inode and start_date > ? and start_date < ? order by start_date"); 78 79 dh.setParam(from); 80 dh.setParam(to); 81 82 return dh.list(); 83 84 } 85 86 public static java.util.List getEventsByDateRange(java.util.Date from, java.util.Date to, User user) { 87 88 GregorianCalendar cal = new GregorianCalendar (); 89 cal.setTime(from); 90 cal.add(GregorianCalendar.SECOND, -1); 91 from = cal.getTime(); 92 93 cal.setTime(to); 94 cal.add(GregorianCalendar.SECOND, 1); 95 to = cal.getTime(); 96 97 DotHibernate dh = new DotHibernate(Event.class); 98 String query = "select {event.*} from event, inode event_1_ where event.inode = event_1_.inode and start_date > ? and start_date < ? and " 99 + "(event.approval_status = " 100 + Constants.EVENT_APPROVED_STATUS 101 + " or event.user_id = '" 102 + user.getUserId() 103 + "') " + "order by start_date"; 104 105 dh.setSQLQuery(query); 106 107 dh.setParam(from); 108 dh.setParam(to); 109 110 return dh.list(); 111 112 } 113 114 public static java.util.List getEventsByDateRangeYParent(java.util.Date from, java.util.Date to, Category cat) { 115 116 GregorianCalendar cal = new GregorianCalendar (); 117 cal.setTime(from); 118 cal.add(GregorianCalendar.SECOND, -1); 119 from = cal.getTime(); 120 121 cal.setTime(to); 122 cal.add(GregorianCalendar.SECOND, 1); 123 to = cal.getTime(); 124 125 DotHibernate dh = new DotHibernate(Event.class); 126 dh 127 .setSQLQuery("select {event.*} from event, inode event_1_, tree where event.inode = event_1_.inode and tree.parent = ? and tree.child = event.inode and start_date > ? and start_date < ? order by start_date"); 128 129 dh.setParam(cat.getInode()); 130 dh.setParam(from); 131 dh.setParam(to); 132 133 return dh.list(); 134 135 } 136 137 public static java.util.List getPublicEventsByDateRangeYParent(java.util.Date from, java.util.Date to, Category cat) { 138 139 GregorianCalendar cal = new GregorianCalendar (); 140 cal.setTime(from); 141 cal.add(GregorianCalendar.SECOND, -1); 142 from = cal.getTime(); 143 144 cal.setTime(to); 145 cal.add(GregorianCalendar.SECOND, 1); 146 to = cal.getTime(); 147 148 DotHibernate dh = new DotHibernate(Event.class); 149 dh.setSQLQuery("select {event.*} from event, inode event_1_, tree where " 150 + "event.inode = event_1_.inode and tree.parent = ? and tree.child = event.inode and " 151 + "start_date > ? and start_date < ? and show_public = " + com.dotmarketing.db.DbConnectionFactory.getDBTrue() 152 + " and " + "event.approval_status = " + Constants.EVENT_APPROVED_STATUS + " " + "order by start_date"); 153 154 dh.setParam(cat.getInode()); 155 dh.setParam(from); 156 dh.setParam(to); 157 158 return dh.list(); 159 160 } 161 162 public static java.util.List getPublicEventsByDateRangeYParent(java.util.Date from, java.util.Date to, Category cat, 163 int maxEvents) { 164 165 GregorianCalendar cal = new GregorianCalendar (); 166 cal.setTime(from); 167 cal.add(GregorianCalendar.SECOND, -1); 168 from = cal.getTime(); 169 170 cal.setTime(to); 171 cal.add(GregorianCalendar.SECOND, 1); 172 to = cal.getTime(); 173 174 DotHibernate dh = new DotHibernate(Event.class); 175 dh.setSQLQuery("select {event.*} from event, inode event_1_, tree where " 176 + "event.inode = event_1_.inode and tree.parent = ? and tree.child = event.inode and " 177 + "start_date > ? and start_date < ? and show_public = " + com.dotmarketing.db.DbConnectionFactory.getDBTrue() 178 + " and " + "event.approval_status = " + Constants.EVENT_APPROVED_STATUS + " " + "order by start_date"); 179 180 dh.setParam(cat.getInode()); 181 dh.setParam(from); 182 dh.setParam(to); 183 dh.setMaxResults(maxEvents); 184 185 return dh.list(); 186 187 } 188 189 public static java.util.List getEventsByDateRangeYParent(java.util.Date from, java.util.Date to, Category cat1, 190 Category cat2, Category cat3, long facilityInode) { 191 192 GregorianCalendar cal = new GregorianCalendar (); 193 cal.setTime(from); 194 cal.add(GregorianCalendar.SECOND, -1); 195 from = cal.getTime(); 196 197 cal.setTime(to); 198 cal.add(GregorianCalendar.SECOND, 1); 199 to = cal.getTime(); 200 201 DotHibernate dh = new DotHibernate(Event.class); 202 203 StringBuffer query = new StringBuffer ("select {event.*} from event, inode event_1_ "); 204 205 if (cat1.getInode() > 0) 206 query.append(", tree tree1 "); 207 if (cat2.getInode() > 0) 208 query.append(", tree tree2 "); 209 if (cat3.getInode() > 0) 210 query.append(", tree tree3 "); 211 if (facilityInode > 0) 212 query.append(", tree tree4 "); 213 214 query.append("where event.inode = event_1_.inode and "); 215 216 if (cat1.getInode() > 0) { 217 query.append(" tree1.parent = ? and tree1.child = event.inode and "); 218 } 219 if (cat2.getInode() > 0) { 220 query.append(" tree2.parent = ? and tree2.child = event.inode and "); 221 } 222 if (cat3.getInode() > 0) { 223 query.append(" tree3.parent = ? and tree3.child = event.inode and "); 224 } 225 if (facilityInode > 0) 226 query.append(" tree4.parent = ? and tree4.child = event.inode and "); 227 if (facilityInode == 0) 228 query 229 .append(" event.inode not in (select tree4.child from tree tree4, facility where facility.inode = tree4.parent) and "); 230 231 query.append("start_date > ? and start_date < ? order by start_date"); 232 233 dh.setSQLQuery(query.toString()); 234 235 if (cat1.getInode() > 0) { 236 dh.setParam(cat1.getInode()); 237 } 238 if (cat2.getInode() > 0) { 239 dh.setParam(cat2.getInode()); 240 } 241 if (cat3.getInode() > 0) { 242 dh.setParam(cat3.getInode()); 243 } 244 if (facilityInode > 0) 245 dh.setParam(facilityInode); 246 247 dh.setParam(from); 248 dh.setParam(to); 249 250 return dh.list(); 251 252 } 253 254 public static java.util.List getEventsByDateRangeYParent(java.util.Date from, java.util.Date to, Category cat1, 255 Category cat2, Category cat3, long facilityInode, User user) { 256 257 GregorianCalendar cal = new GregorianCalendar (); 258 cal.setTime(from); 259 cal.add(GregorianCalendar.SECOND, -1); 260 from = cal.getTime(); 261 262 cal.setTime(to); 263 cal.add(GregorianCalendar.SECOND, 1); 264 to = cal.getTime(); 265 266 DotHibernate dh = new DotHibernate(Event.class); 267 268 StringBuffer query = new StringBuffer ("select {event.*} from event, inode event_1_ "); 269 270 if (cat1.getInode() > 0) 271 query.append(", tree tree1 "); 272 if (cat2.getInode() > 0) 273 query.append(", tree tree2 "); 274 if (cat3.getInode() > 0) 275 query.append(", tree tree3 "); 276 if (facilityInode > 0) 277 query.append(", tree tree4 "); 278 279 query.append("where event.inode = event_1_.inode and "); 280 281 if (cat1.getInode() > 0) { 282 query.append(" tree1.parent = ? and tree1.child = event.inode and "); 283 } 284 if (cat2.getInode() > 0) { 285 query.append(" tree2.parent = ? and tree2.child = event.inode and "); 286 } 287 if (cat3.getInode() > 0) { 288 query.append(" tree3.parent = ? and tree3.child = event.inode and "); 289 } 290 if (facilityInode > 0) 291 query.append(" tree4.parent = ? and tree4.child = event.inode and "); 292 if (facilityInode == 0) 293 query 294 .append(" event.inode not in (select tree4.child from tree tree4, facility where facility.inode = tree4.parent) and "); 295 296 query.append("start_date > ? and start_date < ? and "); 297 query.append("(event.approval_status = " + Constants.EVENT_APPROVED_STATUS + " or event.user_id = '" 298 + user.getUserId() + "') "); 299 query.append("order by start_date"); 300 301 dh.setSQLQuery(query.toString()); 302 303 if (cat1.getInode() > 0) { 304 dh.setParam(cat1.getInode()); 305 } 306 if (cat2.getInode() > 0) { 307 dh.setParam(cat2.getInode()); 308 } 309 if (cat3.getInode() > 0) { 310 dh.setParam(cat3.getInode()); 311 } 312 if (facilityInode > 0) 313 dh.setParam(facilityInode); 314 315 dh.setParam(from); 316 dh.setParam(to); 317 318 return dh.list(); 319 320 } 321 322 public static java.util.List getEventsByDateRangeYParent(java.util.Date from, java.util.Date to, List <Inode> parents, 323 User user) { 324 325 GregorianCalendar cal = new GregorianCalendar (); 326 cal.setTime(from); 327 cal.add(GregorianCalendar.SECOND, -1); 328 from = cal.getTime(); 329 330 cal.setTime(to); 331 cal.add(GregorianCalendar.SECOND, 1); 332 to = cal.getTime(); 333 334 DotHibernate dh = new DotHibernate(Event.class); 335 336 StringBuffer query = new StringBuffer ("select {event.*} from event, inode event_1_ "); 337 int i = 1; 338 for (Inode inode : parents) { 339 if (inode.getInode() > 0) 340 query.append(", tree tree" + i + " "); 341 i++; 342 } 343 query.append("where event.inode = event_1_.inode and "); 344 345 i = 1; 346 for (Inode inode : parents) { 347 if (inode.getInode() > 0) 348 query.append("tree" + i + ".parent = ? and tree" + i + ".child = event.inode and "); 349 i++; 350 } 351 query.append("start_date > ? and start_date < ? "); 352 query.append(" order by start_date"); 355 356 dh.setSQLQuery(query.toString()); 357 358 for (Inode inode : parents) { 359 if (inode.getInode() > 0){ 360 dh.setParam(inode.getInode()); 361 } 362 } 363 dh.setParam(from); 364 dh.setParam(to); 365 366 return dh.list(); 367 368 } 369 370 371 public static java.util.List getEventsByDateRangeYParent(java.util.Date from, java.util.Date to, List <Inode> parents) { 372 373 GregorianCalendar cal = new GregorianCalendar (); 374 cal.setTime(from); 375 cal.add(GregorianCalendar.SECOND, -1); 376 from = cal.getTime(); 377 378 cal.setTime(to); 379 cal.add(GregorianCalendar.SECOND, 1); 380 to = cal.getTime(); 381 382 DotHibernate dh = new DotHibernate(Event.class); 383 384 StringBuffer query = new StringBuffer ("select {event.*} from event, inode event_1_ "); 385 int i = 1; 386 for (Inode inode : parents) { 387 if (inode.getInode() > 0) 388 query.append(", tree tree" + i + " "); 389 i++; 390 } 391 query.append("where event.inode = event_1_.inode and "); 392 393 i = 1; 394 for (Inode inode : parents) { 395 if (inode.getInode() > 0) 396 query.append("tree" + i + ".parent = ? and tree" + i + ".child = event.inode and "); 397 i++; 398 } 399 query.append("event.start_date > ? and event.start_date < ? "); 400 query.append("order by event.start_date"); 402 403 dh.setSQLQuery(query.toString()); 404 405 for (Inode inode : parents) { 406 if (inode.getInode() > 0){ 407 dh.setParam(inode.getInode()); 408 } 409 } 410 dh.setParam(from); 411 dh.setParam(to); 412 413 return dh.list(); 414 415 } 416 417 418 public static java.util.List getPublicEventsByDateRangeYParent(java.util.Date from, java.util.Date to, Category cat1, 419 Category cat2, Category cat3) { 420 return getPublicEventsByDateRangeYParent(from, to, cat1, cat2, cat3, 0); 421 } 422 423 public static java.util.List getPublicEventsByDateRangeYParent(java.util.Date from, java.util.Date to, Category cat1, 424 Category cat2, Category cat3, int maxEvents) { 425 426 GregorianCalendar cal = new GregorianCalendar (); 427 cal.setTime(from); 428 cal.add(GregorianCalendar.SECOND, -1); 429 from = cal.getTime(); 430 431 cal.setTime(to); 432 cal.add(GregorianCalendar.SECOND, 1); 433 to = cal.getTime(); 434 435 DotHibernate dh = new DotHibernate(Event.class); 436 StringBuffer query = new StringBuffer ("select {event.*} from event, inode event_1_ "); 437 438 if (cat1.getInode() > 0) 439 query.append(", tree tree1 "); 440 if (cat2.getInode() > 0) 441 query.append(", tree tree2 "); 442 if (cat3.getInode() > 0) 443 query.append(", tree tree3 "); 444 445 query.append("where event.inode = event_1_.inode and "); 446 447 if (cat1.getInode() > 0) { 448 query.append(" tree1.parent = ? and tree1.child = event.inode and "); 449 } 450 if (cat2.getInode() > 0) { 451 query.append(" tree2.parent = ? and tree2.child = event.inode and "); 452 } 453 if (cat3.getInode() > 0) { 454 query.append(" tree3.parent = ? and tree3.child = event.inode and "); 455 } 456 457 query.append("show_public = " + com.dotmarketing.db.DbConnectionFactory.getDBTrue() 458 + " and start_date > ? and start_date < ? and event.approval_status = " + Constants.EVENT_APPROVED_STATUS 459 + " "); 460 query.append("order by start_date"); 461 462 dh.setSQLQuery(query.toString()); 463 464 if (cat1.getInode() > 0) { 465 dh.setParam(cat1.getInode()); 466 } 467 if (cat2.getInode() > 0) { 468 dh.setParam(cat2.getInode()); 469 } 470 if (cat3.getInode() > 0) { 471 dh.setParam(cat3.getInode()); 472 } 473 474 dh.setParam(from); 475 dh.setParam(to); 476 if (maxEvents > 0) 477 dh.setMaxResults(maxEvents); 478 479 return dh.list(); 480 481 } 482 483 public static java.util.List getPublicEvents(java.util.Date from, java.util.Date to, String keyword, String [] cats, int maxEvents) { 484 if (cats == null) 485 cats = new String [0]; 486 List <Integer > intCatsList = new ArrayList <Integer >(); 487 for (int i = 0; i < cats.length; i++) { 488 try { 489 intCatsList.add(Integer.parseInt(cats[i])); 490 } catch (NumberFormatException e) { } 491 } 492 int[] intCats = new int[intCatsList.size()]; 493 for (int i = 0; i < intCats.length; i++) { 494 intCats[i] = intCatsList.get(i); 495 } 496 return getPublicEvents (from, to, keyword, intCats, maxEvents); 497 } 498 499 public static java.util.List getPublicEvents(java.util.Date from, java.util.Date to, String keyword, int[] cats, int maxEvents) { 500 501 GregorianCalendar cal = new GregorianCalendar (); 502 cal.setTime(from); 503 cal.add(GregorianCalendar.SECOND, -1); 504 from = cal.getTime(); 505 506 cal.setTime(to); 507 cal.add(GregorianCalendar.SECOND, 1); 508 to = cal.getTime(); 509 510 DotHibernate dh = new DotHibernate(Event.class); 511 StringBuffer query = new StringBuffer ("select {event.*} from event, inode event_1_ "); 512 513 for (int i = 0; i < cats.length; i++) { 514 query.append(", tree tree" + i + " "); 515 } 516 517 query.append("where event.inode = event_1_.inode and "); 518 519 if (UtilMethods.isSet(keyword)) { 520 query.append("(event.title like '%" + keyword + "%' or "); 521 query.append("event.subtitle like '%" + keyword + "%' or "); 522 query.append("event.description like '%" + keyword + "%') and "); 523 } 524 525 for (int i = 0; i < cats.length; i++) { 526 query.append(" tree" + i + ".parent = " + cats[i] + " and tree" + i + ".child = event.inode and "); 527 } 528 529 query.append("show_public = " + com.dotmarketing.db.DbConnectionFactory.getDBTrue() 530 + " and start_date > ? and start_date < ? and event.approval_status = " + Constants.EVENT_APPROVED_STATUS 531 + " "); 532 query.append("order by start_date"); 533 534 dh.setSQLQuery(query.toString()); 535 dh.setParam(from); 536 dh.setParam(to); 537 if (maxEvents > 0) 538 dh.setMaxResults(maxEvents); 539 540 return dh.list(); 541 542 } 543 544 public static java.util.List getPublicEventsByDateRangeYParentNotInCat(java.util.Date from, java.util.Date to, 545 Category cat1, Category cat2, Category cat3, Category cat4) { 546 547 GregorianCalendar cal = new GregorianCalendar (); 548 cal.setTime(from); 549 cal.add(GregorianCalendar.SECOND, -1); 550 from = cal.getTime(); 551 552 cal.setTime(to); 553 cal.add(GregorianCalendar.SECOND, 1); 554 to = cal.getTime(); 555 556 long before = System.currentTimeMillis(); 557 DotHibernate dh = new DotHibernate(Event.class); 558 StringBuffer query = new StringBuffer ("select distinct {event.*} from event, inode event_1_ "); 559 560 if (cat1.getInode() > 0) 561 query.append(", tree tree1 "); 562 if (cat2.getInode() > 0) 563 query.append(", tree tree2 "); 564 if (cat3.getInode() > 0) 565 query.append(", tree tree3 "); 566 567 query.append(" where event.inode = event_1_.inode and "); 568 569 if (cat1.getInode() > 0) { 570 query.append(" tree1.parent = ? and tree1.child = event.inode and "); 571 } 572 if (cat2.getInode() > 0) { 573 query.append(" tree2.parent = ? and tree2.child = event.inode and "); 574 } 575 if (cat3.getInode() > 0) { 576 query.append(" tree3.parent = ? and tree3.child = event.inode and "); 577 } 578 if (cat4.getInode() > 0) { 579 query.append(" event.inode not in (select tree4.child from tree tree4 where tree4.parent = ?) and "); 580 } 581 582 query.append("show_public = " + com.dotmarketing.db.DbConnectionFactory.getDBTrue() 583 + " and start_date > ? and start_date < ? and event.approval_status = " + Constants.EVENT_APPROVED_STATUS 584 + " "); 585 query.append("order by start_date"); 586 587 dh.setSQLQuery(query.toString()); 588 589 if (cat1.getInode() > 0) { 590 dh.setParam(cat1.getInode()); 591 } 592 if (cat2.getInode() > 0) { 593 dh.setParam(cat2.getInode()); 594 } 595 if (cat3.getInode() > 0) { 596 dh.setParam(cat3.getInode()); 597 } 598 599 if (cat4.getInode() > 0) { 600 dh.setParam(cat4.getInode()); 601 } 602 603 dh.setParam(from); 604 dh.setParam(to); 605 606 java.util.List events = dh.list(); 607 long after = System.currentTimeMillis(); 608 return events; 609 610 } 611 612 public static java.util.List getPublicEventsByDateRangeYParentNotInCat(java.util.Date from, java.util.Date to, 613 Category cat1, Category cat2, Category cat3, Category cat4, int maxEvents) { 614 615 GregorianCalendar cal = new GregorianCalendar (); 616 cal.setTime(from); 617 cal.add(GregorianCalendar.SECOND, -1); 618 from = cal.getTime(); 619 620 cal.setTime(to); 621 cal.add(GregorianCalendar.SECOND, 1); 622 to = cal.getTime(); 623 624 long before = System.currentTimeMillis(); 625 DotHibernate dh = new DotHibernate(Event.class); 626 StringBuffer query = new StringBuffer ("select distinct {event.*} from event, inode event_1_ "); 627 628 if (cat1.getInode() > 0) 629 query.append(", tree tree1 "); 630 if (cat2.getInode() > 0) 631 query.append(", tree tree2 "); 632 if (cat3.getInode() > 0) 633 query.append(", tree tree3 "); 634 635 query.append(" where event.inode = event_1_.inode and "); 636 637 if (cat1.getInode() > 0) { 638 query.append(" tree1.parent = ? and tree1.child = event.inode and "); 639 } 640 if (cat2.getInode() > 0) { 641 query.append(" tree2.parent = ? and tree2.child = event.inode and "); 642 } 643 if (cat3.getInode() > 0) { 644 query.append(" tree3.parent = ? and tree3.child = event.inode and "); 645 } 646 if (cat4.getInode() > 0) { 647 query.append(" event.inode not in (select tree4.child from tree tree4 where tree4.parent = ?) and "); 648 } 649 650 query.append("show_public = " + com.dotmarketing.db.DbConnectionFactory.getDBTrue() 651 + " and start_date > ? and start_date < ? and event.approval_status = " + Constants.EVENT_APPROVED_STATUS 652 + " "); 653 query.append("order by start_date"); 654 655 dh.setSQLQuery(query.toString()); 656 657 if (cat1.getInode() > 0) { 658 dh.setParam(cat1.getInode()); 659 } 660 if (cat2.getInode() > 0) { 661 dh.setParam(cat2.getInode()); 662 } 663 if (cat3.getInode() > 0) { 664 dh.setParam(cat3.getInode()); 665 } 666 667 if (cat4.getInode() > 0) { 668 dh.setParam(cat4.getInode()); 669 } 670 671 dh.setParam(from); 672 dh.setParam(to); 673 dh.setMaxResults(maxEvents); 674 675 java.util.List events = dh.list(); 676 long after = System.currentTimeMillis(); 677 return events; 678 679 } 680 681 public static java.util.List <Event> getPublicEventsByDateRangeYParent(java.util.Date from, java.util.Date to, 682 String calendarCategories, String eventCategories, String keyword, int maxEvents) { 683 try { 684 List <Event> returnEvents; 685 GregorianCalendar cal = new GregorianCalendar (); 686 687 DotHibernate dh = new DotHibernate(Event.class); 688 String select = "select distinct {event.*} "; 689 String fromTables = "from event, inode event_1_ "; 690 String where = "where show_public = " + com.dotmarketing.db.DbConnectionFactory.getDBTrue() 691 + " and event.approval_status = " + Constants.EVENT_APPROVED_STATUS 692 + " and event.inode = event_1_.inode "; 693 694 if (UtilMethods.isSet(from)) { 695 cal.setTime(from); 696 cal.add(GregorianCalendar.SECOND, -1); 697 from = cal.getTime(); 698 where += "and start_date >= ? "; 699 } 700 701 if (UtilMethods.isSet(to)) { 702 cal.setTime(to); 703 cal.add(GregorianCalendar.SECOND, 1); 704 to = cal.getTime(); 705 where += "and start_date <= ? "; 706 } 707 708 if (UtilMethods.isSet(keyword)) { 709 where += "and event.title like '%" + keyword + "%' "; 710 } 711 712 if (UtilMethods.isSet(calendarCategories)) { 713 fromTables += ", tree calendarTree "; 714 where += "and calendarTree.parent in (" + calendarCategories + ") and calendarTree.child = event.inode "; 716 } 717 718 if (UtilMethods.isSet(eventCategories)) { 719 fromTables += ", tree eventTree "; 720 where += "and eventTree.parent in (" + eventCategories + ") and eventTree.child = event.inode "; 722 } 723 724 String order = "order by start_date"; 725 String query = select + fromTables + where + order; 726 727 dh.setSQLQuery(query); 728 729 if (UtilMethods.isSet(from)) { 730 dh.setParam(from); 731 } 732 733 if (UtilMethods.isSet(to)) { 734 dh.setParam(to); 735 } 736 737 if (maxEvents > 0) { 738 dh.setMaxResults(maxEvents); 739 } 740 741 returnEvents = dh.list(); 742 return returnEvents; 743 } catch (Exception ex) { 744 Logger.warn(EventFactory.class, ex.toString()); 745 return new ArrayList <Event>(); 746 } 747 } 748 749 public static java.util.List getUpcomingEventsByParent(Inode cat) { 750 751 return InodeFactory.getChildrenClassByConditionAndOrderBy(cat, Event.class, "start_date >= now()", "start_date"); 752 760 } 761 762 public static java.util.List getPublicUpcomingEventsByParent(Inode cat) { 763 return InodeFactory.getChildrenClassByConditionAndOrderBy(cat, Event.class, "end_date >= now() and show_public = " 764 + com.dotmarketing.db.DbConnectionFactory.getDBTrue() + " and event.approval_status = " 765 + Constants.EVENT_APPROVED_STATUS + " ", "start_date"); 766 } 767 768 public static java.util.List getEventsByFilter(String filter) { 769 770 DotHibernate dh = new DotHibernate(Event.class); 771 dh 772 .setQuery("from event in class com.dotmarketing.portlets.events.model.Event where title like ? or description like ? order by start_date"); 773 dh.setParam("%" + filter + "%"); 774 dh.setParam("%" + filter + "%"); 775 return dh.list(); 776 777 } 778 779 public static java.util.List getPublicEventsByPageHierarchy(java.util.List parents) { 780 781 java.util.List al = new java.util.ArrayList (); 782 java.util.Iterator i = parents.iterator(); 783 784 while (i.hasNext()) { 785 786 com.dotmarketing.portlets.categories.model.Category c = (com.dotmarketing.portlets.categories.model.Category) i 788 .next(); 789 al = getPublicUpcomingEventsByParent(c); 792 if (al.size() > 0) 793 break; 794 } 795 return al; 796 } 797 798 public static java.util.List getEventsByPageHierarchy(java.util.List parents) { 799 800 java.util.List al = new java.util.ArrayList (); 801 java.util.Iterator i = parents.iterator(); 802 803 while (i.hasNext()) { 804 805 Inode c = (Inode) i.next(); 806 807 al = getUpcomingEventsByParent(c); 808 if (al.size() > 0) 809 break; 810 811 } 812 813 return al; 814 } 815 816 823 public static List findConflicts(Event e, Facility f) { 824 if (e.isTimeTBD()) 825 return new ArrayList (); 826 if (f == null || f.getInode() == 0) 827 return new ArrayList (); 828 DotHibernate dh = new DotHibernate(Event.class); 829 837 String query = "select {event.*} from event, inode event_1_, tree where event.inode = event_1_.inode and setup_date <= ? and break_date >= ? and " 838 + "tree.child = event.inode and tree.parent = ? and event.inode <> ? and event.approval_status = " 839 + Constants.EVENT_APPROVED_STATUS + " " + "order by start_date"; 840 841 dh.setSQLQuery(query); 842 dh.setParam(e.getBreakDate()); 843 dh.setParam(e.getSetupDate()); 844 dh.setParam(f.getInode()); 845 dh.setParam(e.getInode()); 846 return dh.list(); 847 } 848 849 858 public static List findConflicts(Event e, Recurance r, Facility f) { 859 if (e.isTimeTBD()) 860 return new ArrayList (); 861 862 if (r == null || f == null || f.getInode() == 0) { 863 return new ArrayList (); 864 } 865 866 int interval = r.getInterval(); 868 869 GregorianCalendar startDate = new GregorianCalendar (); 870 GregorianCalendar endDate = new GregorianCalendar (); 871 GregorianCalendar endTime = new GregorianCalendar (); 872 873 GregorianCalendar setupDate = new GregorianCalendar (); 874 GregorianCalendar breakDate = new GregorianCalendar (); 875 876 startDate.setTime(r.getStarting()); 877 endDate.setTime(r.getEnding()); 878 endTime.setTime(r.getEnding()); 879 880 setupDate.setTime(e.getSetupDate()); 881 breakDate.setTime(e.getBreakDate()); 882 883 endDate.set(Calendar.HOUR_OF_DAY, 23); 884 endDate.set(Calendar.MINUTE, 59); 885 endDate.set(Calendar.SECOND, 59); 886 887 List datesList = new ArrayList (); 889 890 while (startDate.getTime().before(endDate.getTime())) { 891 892 if ("day".equals(r.getOccurs())) { 893 894 GregorianCalendar cal = new GregorianCalendar (); 896 cal.setTime(startDate.getTime()); 897 cal.set(Calendar.HOUR_OF_DAY, startDate.get(Calendar.HOUR_OF_DAY)); 898 cal.set(Calendar.MINUTE, startDate.get(Calendar.MINUTE)); 899 Date eventStartDate = cal.getTime(); 900 901 cal = new GregorianCalendar (); 903 cal.setTime(startDate.getTime()); 904 cal.set(Calendar.HOUR_OF_DAY, endTime.get(Calendar.HOUR_OF_DAY)); 905 cal.set(Calendar.MINUTE, endTime.get(Calendar.MINUTE)); 906 Date eventEndDate = cal.getTime(); 907 908 if (cal.getTime().after(endDate.getTime())) 910 break; 911 912 Date [] datePair = new Date [4]; 913 datePair[0] = eventStartDate; 914 datePair[1] = eventEndDate; 915 datePair[2] = setupDate.getTime(); 916 datePair[3] = breakDate.getTime(); 917 datesList.add(datePair); 918 919 startDate.add(Calendar.DAY_OF_MONTH, interval); 921 setupDate.add(Calendar.DAY_OF_MONTH, interval); 922 breakDate.add(Calendar.DAY_OF_MONTH, interval); 923 } 924 else if ("week".equals(r.getOccurs())) { 926 if (r.getDaysOfWeek() == null) { 927 return new ArrayList (); 928 } 929 for (int j = 1; j < 8; j++) { 930 String x = Integer.toString(startDate.get(Calendar.DAY_OF_WEEK)); 931 if (r.getDaysOfWeek().indexOf(x) > -1) { 932 933 GregorianCalendar cal = new GregorianCalendar (); 935 cal.setTime(startDate.getTime()); 936 cal.set(Calendar.HOUR_OF_DAY, startDate.get(Calendar.HOUR_OF_DAY)); 937 cal.set(Calendar.MINUTE, startDate.get(Calendar.MINUTE)); 938 Date eventStartDate = cal.getTime(); 939 940 cal = new GregorianCalendar (); 942 cal.setTime(startDate.getTime()); 943 cal.set(Calendar.HOUR_OF_DAY, endTime.get(Calendar.HOUR_OF_DAY)); 944 cal.set(Calendar.MINUTE, endTime.get(Calendar.MINUTE)); 945 Date eventEndDate = cal.getTime(); 946 947 if (cal.getTime().after(endDate.getTime())) 949 break; 950 951 Date [] datePair = new Date [4]; 952 datePair[0] = eventStartDate; 953 datePair[1] = eventEndDate; 954 datePair[2] = setupDate.getTime(); 955 datePair[3] = breakDate.getTime(); 956 datesList.add(datePair); 957 958 } 959 startDate.add(Calendar.DAY_OF_MONTH, 1); 960 setupDate.add(Calendar.DAY_OF_MONTH, 1); 961 breakDate.add(Calendar.DAY_OF_MONTH, 1); 962 } 963 startDate.add(Calendar.WEEK_OF_YEAR, interval - 1); 964 setupDate.add(Calendar.WEEK_OF_YEAR, interval - 1); 965 breakDate.add(Calendar.WEEK_OF_YEAR, interval - 1); 966 967 } else { 968 969 971 if (startDate.get(Calendar.DAY_OF_MONTH) > r.getDayOfMonth()) { 972 startDate.add(Calendar.MONTH, 1); 973 } 974 975 GregorianCalendar cal = new GregorianCalendar (); 976 cal.setTime(startDate.getTime()); 977 cal.set(Calendar.HOUR_OF_DAY, startDate.get(Calendar.HOUR_OF_DAY)); 978 cal.set(Calendar.MINUTE, startDate.get(Calendar.MINUTE)); 979 cal.set(Calendar.DAY_OF_MONTH, r.getDayOfMonth()); 980 Date eventStartDate = cal.getTime(); 981 982 cal = new GregorianCalendar (); 984 cal.setTime(startDate.getTime()); 985 cal.set(Calendar.HOUR_OF_DAY, endTime.get(Calendar.HOUR_OF_DAY)); 986 cal.set(Calendar.MINUTE, endTime.get(Calendar.MINUTE)); 987 cal.set(Calendar.DAY_OF_MONTH, r.getDayOfMonth()); 988 Date eventEndDate = cal.getTime(); 989 990 if (cal.getTime().after(endDate.getTime())) 992 break; 993 994 Date [] datePair = new Date [4]; 995 datePair[0] = eventStartDate; 996 datePair[1] = eventEndDate; 997 datePair[2] = setupDate.getTime(); 998 datePair[3] = breakDate.getTime(); 999 datesList.add(datePair); 1000 1001 startDate.add(Calendar.MONTH, interval); 1003 setupDate.add(Calendar.MONTH, interval); 1004 breakDate.add(Calendar.MONTH, interval); 1005 1006 } 1007 1008 } 1009 1010 List currentRecuranceEvents = InodeFactory.getParentsOfClass(r, Event.class); 1013 1014 StringBuffer sb = new StringBuffer (); 1016 1017 sb.append("select {event.*} from event, inode event_1_, tree where event.inode = event_1_.inode and ("); 1021 1022 1024 Iterator it = datesList.iterator(); 1026 while (it.hasNext()) { 1027 it.next(); 1028 sb.append("(setup_date <= ? and break_date >= ?)"); 1029 if (it.hasNext()) 1030 sb.append(" or "); 1031 } 1032 sb.append(") and "); 1033 1034 sb.append("event.inode not in ("); 1036 it = currentRecuranceEvents.iterator(); 1037 while (it.hasNext()) { 1038 Event ev = (Event) it.next(); 1039 sb.append(ev.getInode()); 1040 sb.append(", "); 1041 } 1042 sb.append(e.getInode()); 1043 sb.append(") and "); 1044 1045 sb.append("tree.child = event.inode and tree.parent = ? and "); 1047 1048 sb.append("event.approval_status = " + Constants.EVENT_APPROVED_STATUS + " "); 1049 sb.append("order by start_date"); 1050 1051 DotHibernate dh = new DotHibernate(Event.class); 1053 String query = sb.toString(); 1054 dh.setSQLQuery(query); 1055 1056 1058 it = datesList.iterator(); 1060 while (it.hasNext()) { 1061 Date [] datesPair = (Date []) it.next(); 1062 dh.setParam(datesPair[3]); 1063 dh.setParam(datesPair[2]); 1064 } 1065 dh.setParam(f.getInode()); 1066 return dh.list(); 1067 } 1068 1069 public static boolean hasPermissionsOverTheEvent(User user, Event ev) throws PortalException, SystemException { 1070 Iterator rolesIt = UserLocalManagerUtil.getRoles(user.getUserId()).iterator(); 1071 while (rolesIt.hasNext()) { 1072 Role role = (Role) rolesIt.next(); 1073 if (role.getName().equals(Config.getStringProperty("EVENTS_ADMINISTRATOR"))) { 1074 return true; 1075 } 1076 } 1077 if (ev.getUserId() == null || (ev.getUserId().equals(user.getUserId()))) 1078 return true; 1079 else 1080 return false; 1081 1082 } 1083 1084 public static boolean isAnEventAdministrator(User user) throws PortalException, SystemException { 1085 String x = Config.getStringProperty("EVENTS_ADMINISTRATOR"); 1086 return RoleFactory.userHasRole(user, x); 1087 } 1088 1089 1092 1093 public static List getEventsWaitingForApproval() { 1094 DotConnect dc = new DotConnect(); 1095 StringBuffer sb = new StringBuffer (); 1096 1097 1100 1108 sb.append("select inode "); 1109 sb.append("from event "); 1110 sb.append("where approval_status = " + Constants.EVENT_WAITING_APPROVAL_STATUS + " "); 1111 sb.append("order by start_date"); 1112 1113 dc.setSQL(sb.toString()); 1114 return dc.getResults(); 1115 } 1116 1117 public static List getEventAdministrators() throws PortalException, SystemException { 1118 Role adminRole = RoleLocalManagerUtil.getRoleByName(PublicCompanyFactory.getDefaultCompanyId(), Config 1119 .getStringProperty("EVENTS_ADMINISTRATOR")); 1120 return RoleLocalManagerUtil.getUsers(adminRole.getRoleId()); 1121 } 1122 1123 private static String _buildEmailHTMLBody(Event e, Facility fac, User u) { 1124 Recurance r = (Recurance) InodeFactory.getChildOfClass(e, Recurance.class); 1125 1126 StringBuffer emailBody = new StringBuffer (); 1127 1128 emailBody.append("<table border=\"0\">"); 1129 emailBody.append("<tr><td colspan=2 align=\"center\"><b>Event Info</b></td></tr>"); 1130 emailBody.append("<tr>"); 1131 emailBody.append(" <TD><strong>Event:</strong></TD>"); 1132 emailBody.append(" <TD>"); 1133 emailBody.append(e.getTitle()); 1134 emailBody.append(" </TD>"); 1135 emailBody.append("</tr>"); 1136 emailBody.append("<tr>"); 1137 emailBody.append(" <TD><strong>Approval Status:</strong></TD>"); 1138 emailBody.append(" <TD>"); 1139 emailBody.append(com.dotmarketing.util.Constants.EVENT_APPROVAL_STATUSES[e.getApprovalStatus()]); 1140 emailBody.append(" </TD>"); 1141 emailBody.append("</tr>"); 1142 emailBody.append("<tr>"); 1143 emailBody.append(" <TD><strong>Subtitle:</strong></TD>"); 1144 emailBody.append(" <TD>"); 1145 emailBody.append(e.getSubtitle()); 1146 emailBody.append(" </TD>"); 1147 emailBody.append("</tr>"); 1148 emailBody.append("<tr>"); 1149 emailBody.append(" <TD><strong>Date/Time:</strong></TD>"); 1150 emailBody.append(" <TD>"); 1151 if (e.isTimeTBD()) 1152 emailBody.append(UtilMethods.dateToHTMLDateRange(e.getSetupDate(), e.getBreakDate(), GregorianCalendar 1153 .getInstance().getTimeZone()) 1154 + " time TBD"); 1155 else 1156 emailBody.append(UtilMethods.dateToHTMLDateTimeRange(e.getSetupDate(), e.getBreakDate(), GregorianCalendar 1157 .getInstance().getTimeZone())); 1158 emailBody.append(" </TD>"); 1159 emailBody.append("</tr>"); 1160 emailBody.append("<tr>"); 1161 emailBody.append(" <td><strong>Event Occurs:</strong></td>"); 1162 emailBody.append(" <td>"); 1163 emailBody.append(UtilHTML.recuranceToString(e, r)); 1164 emailBody.append(" </td>"); 1165 emailBody.append("</tr>"); 1166 emailBody.append("<tr>"); 1167 emailBody.append(" <td><strong>Facility:</strong></td>"); 1168 emailBody.append(" <td>"); 1169 if (fac.getInode() > 0) 1170 emailBody.append(fac.getFacilityName()); 1171 else 1172 emailBody.append("None / Off-Campus"); 1173 emailBody.append(" </td>"); 1174 emailBody.append("</tr>"); 1175 emailBody.append("<tr>"); 1176 emailBody.append(" <td><strong>Web Address:</strong></td>"); 1177 emailBody.append(" <td>"); 1178 emailBody.append(e.getWebAddress()); 1179 emailBody.append(" </td>"); 1180 emailBody.append("</tr>"); 1181 emailBody.append("<tr>"); 1182 emailBody.append(" <td><strong>Received Administrative Approval:</strong></td>"); 1183 emailBody.append(" <td>"); 1184 emailBody.append(e.isReceivedAdminApproval() ? "Yes" : "No"); 1185 emailBody.append(" </td>"); 1186 emailBody.append("</tr>"); 1187 emailBody.append("<tr><td colspan=2 align=\"center\"> </tr>"); 1188 emailBody.append("<tr><td colspan=2 align=\"center\"><b>User Info</b></td></tr>"); 1189 emailBody.append("<tr>"); 1190 emailBody.append(" <td><strong>User Name:</strong></td>"); 1191 emailBody.append(" <td>" + u.getFullName() + "</td>"); 1192 emailBody.append("</tr>"); 1193 emailBody.append("<tr>"); 1194 emailBody.append(" <td><strong>User Email/Login:</strong></td>"); 1195 emailBody.append(" <td>" + u.getEmailAddress() + "</td>"); 1196 emailBody.append("</tr>"); 1197 emailBody.append("<tr><td colspan=2 align=\"center\"> </tr>"); 1198 emailBody.append("<tr><td colspan=2 align=\"center\"><b>Contact Info</b></td></tr>"); 1199 emailBody.append("<tr>"); 1200 emailBody.append(" <td><strong>Contact Name:</strong></td>"); 1201 emailBody.append(" <td>" + e.getContactName() + "</td>"); 1202 emailBody.append("</tr>"); 1203 emailBody.append("<tr>"); 1204 emailBody.append(" <td><strong>Contact Phone:</strong></td>"); 1205 emailBody.append(" <td>" + e.getContactPhone() + "</td>"); 1206 emailBody.append("</tr>"); 1207 emailBody.append("<tr>"); 1208 emailBody.append(" <td><strong>Contact Fax:</strong></td>"); 1209 emailBody.append(" <td>" + e.getContactFax() + "</td>"); 1210 emailBody.append("</tr>"); 1211 emailBody.append("<tr>"); 1212 emailBody.append(" <td><strong>Contact Email:</strong></td>"); 1213 emailBody.append(" <td>" + e.getContactEmail() + "</td>"); 1214 emailBody.append("</tr>"); 1215 emailBody.append("<tr>"); 1216 emailBody 1217 .append(" <td nowrap><span style=\"display: inline;\"><strong>Contact Organization:</strong></span></td>"); 1218 emailBody.append(" <td>" + e.getContactCompany() + "</td>"); 1219 emailBody.append("</tr>"); 1220 emailBody.append("<tr>"); 1221 emailBody.append(" <td colspan=\"2\">"); 1222 emailBody.append(" <strong>Description:</strong><BR>"); 1223 emailBody.append(" " + e.getDescription() + "</td>"); 1224 emailBody.append("</tr>"); 1225 emailBody.append("<tr>"); 1226 emailBody.append(" <td colspan=\"2\"><strong>Directions:</strong><BR>"); 1227 emailBody.append(" " + e.getDirections() + "</td>"); 1228 emailBody.append("</tr>"); 1229 emailBody.append("</table>"); 1230 1231 return emailBody.toString(); 1232 } 1233 1234 public static void sendEmailNotification(Event e, Facility fac, User currentUser, boolean eventChange) { 1235 if (e.getApprovalStatus() == com.dotmarketing.util.Constants.EVENT_WAITING_APPROVAL_STATUS) { 1236 if (!e.getContactEmail().trim().equals("")) { 1237 List administrators = new ArrayList (); 1238 try { 1239 administrators = EventFactory.getEventAdministrators(); 1240 } catch (PortalException e1) { 1241 e1.printStackTrace(); 1242 } catch (SystemException e1) { 1243 e1.printStackTrace(); 1244 } 1245 Iterator it = administrators.iterator(); 1246 while (it.hasNext()) { 1247 User admin = (User) it.next(); 1248 Mailer mailer = new Mailer(); 1249 mailer.setFromEmail(e.getContactEmail()); 1250 mailer.setFromName(e.getContactName()); 1251 mailer.setToEmail(admin.getEmailAddress()); 1252 mailer.setToName(admin.getFullName()); 1253 if (eventChange) 1254 mailer.setSubject("Event Change Notification (The event request has been modified)"); 1255 else 1256 mailer.setSubject("New Event Request Notification"); 1257 mailer.setHTMLBody(_buildEmailHTMLBody(e, fac, currentUser)); 1258 mailer.sendMessage(); 1259 } 1260 } 1261 } else { 1262 if (!e.getContactEmail().trim().equals("")) { 1263 1264 Mailer mailer = new Mailer(); 1265 mailer.setToEmail(e.getContactEmail()); 1266 mailer.setToName(e.getContactName()); 1267 mailer.setFromEmail(currentUser.getEmailAddress()); 1268 mailer.setFromName(currentUser.getFullName()); 1269 if (e.getApprovalStatus() == com.dotmarketing.util.Constants.EVENT_APPROVED_STATUS) 1270 mailer.setSubject("Event Approved Notification"); 1271 else 1272 mailer.setSubject("Event Disapproved Notification"); 1273 mailer.setHTMLBody(_buildEmailHTMLBody(e, fac, currentUser)); 1274 mailer.sendMessage(); 1275 } 1276 } 1277 } 1278 1279} 1280 | Popular Tags |