| [ Index ] |
PHP Cross Reference of Unnamed Project |
[Summary view] [Print] [Text view]
1 <?php 2 /** 3 * MyBB 1.6 4 * Copyright 2010 MyBB Group, All Rights Reserved 5 * 6 * Website: http://mybb.com 7 * License: http://mybb.com/about/license 8 * 9 * $Id: calendar.php 5420 2011-04-05 08:20:02Z Tomm $ 10 */ 11 12 define("IN_MYBB", 1); 13 define('THIS_SCRIPT', 'calendar.php'); 14 15 $templatelist = "calendar_weekdayheader,calendar_weekrow_day,calendar_weekrow,calendar_eventbit_public,calendar_eventbit_private,calendar"; 16 $templatelist .= ",calendar_weekview_day,calendar_weekview_day_event,calendar_mini_weekdayheader,calendar_mini_weekrow_day,calendar_mini_weekrow,calendar_mini,calendar_weekview_month,calendar_weekview,calendar_eventbit,calendar_addeventlink"; 17 $templatelist .= ",calendar_event_editbutton,calendar_event_modoptions,calendar_event,calendar_dayview_event,calendar_dayview,codebuttons,smilieinsert,calendar_editevent,calendar_dayview_birthdays_bday,calendar_dayview_birthdays,calendar_dayview_noevents,calendar_dayview_noevents"; 18 19 require_once "./global.php"; 20 21 require_once MYBB_ROOT."inc/functions_calendar.php"; 22 require_once MYBB_ROOT."inc/functions_post.php"; 23 require_once MYBB_ROOT."inc/class_parser.php"; 24 $parser = new postParser; 25 26 // Load global language phrases 27 $lang->load("calendar"); 28 29 if($mybb->settings['enablecalendar'] == 0) 30 { 31 error($lang->calendar_disabled); 32 } 33 34 if($mybb->usergroup['canviewcalendar'] == 0) 35 { 36 error_no_permission(); 37 } 38 39 $monthnames = array( 40 "offset", 41 $lang->alt_month_1, 42 $lang->alt_month_2, 43 $lang->alt_month_3, 44 $lang->alt_month_4, 45 $lang->alt_month_5, 46 $lang->alt_month_6, 47 $lang->alt_month_7, 48 $lang->alt_month_8, 49 $lang->alt_month_9, 50 $lang->alt_month_10, 51 $lang->alt_month_11, 52 $lang->alt_month_12 53 ); 54 55 // Make navigation 56 add_breadcrumb($lang->nav_calendar, "calendar.php"); 57 58 $calendar_jump = build_calendar_jump($mybb->input['calendar']); 59 60 // Add an event 61 if($mybb->input['action'] == "do_addevent" && $mybb->request_method == "post") 62 { 63 $query = $db->simple_select("calendars", "*", "cid='".intval($mybb->input['calendar'])."'"); 64 $calendar = $db->fetch_array($query); 65 66 // Invalid calendar? 67 if(!$calendar['cid']) 68 { 69 error($lang->invalid_calendar); 70 } 71 72 // Do we have permission to view this calendar or post events? 73 $calendar_permissions = get_calendar_permissions($calendar['cid']); 74 if($calendar_permissions['canviewcalendar'] != 1 || $calendar_permissions['canaddevents'] != 1) 75 { 76 error_no_permission(); 77 } 78 79 // Verify incoming POST request 80 verify_post_check($mybb->input['my_post_key']); 81 82 $plugins->run_hooks("calendar_do_addevent_start"); 83 84 // Set up event handler. 85 require_once MYBB_ROOT."inc/datahandler.php"; 86 require_once MYBB_ROOT."inc/datahandlers/event.php"; 87 $eventhandler = new EventDataHandler("insert"); 88 89 // Prepare an array for the eventhandler. 90 $event = array( 91 "cid" => $calendar['cid'], 92 "uid" => $mybb->user['uid'], 93 "name" => $mybb->input['name'], 94 "description" => $mybb->input['description'], 95 "private" => $mybb->input['private'], 96 "type" => $mybb->input['type'] 97 ); 98 99 // Now we add in our date/time info depending on the type of event 100 if($mybb->input['type'] == "single") 101 { 102 $event['start_date'] = array( 103 "day" => $mybb->input['single_day'], 104 "month" => $mybb->input['single_month'], 105 "year" => $mybb->input['single_year'] 106 ); 107 } 108 else if($mybb->input['type'] == "ranged") 109 { 110 $event['start_date'] = array( 111 "day" => $mybb->input['start_day'], 112 "month" => $mybb->input['start_month'], 113 "year" => $mybb->input['start_year'], 114 "time" => $mybb->input['start_time'] 115 ); 116 $event['end_date'] = array( 117 "day" => $mybb->input['end_day'], 118 "month" => $mybb->input['end_month'], 119 "year" => $mybb->input['end_year'], 120 "time" => $mybb->input['end_time'] 121 ); 122 $event['timezone'] = intval($mybb->input['timezone']); 123 $event['ignoretimezone'] = intval($mybb->input['ignoretimezone']); 124 $repeats = array(); 125 switch($mybb->input['repeats']) 126 { 127 case 1: 128 $repeats['repeats'] = 1; 129 $repeats['days'] = $mybb->input['repeats_1_days']; 130 break; 131 case 2: 132 $repeats['repeats'] = 2; 133 break; 134 case 3: 135 $repeats['repeats'] = 3; 136 $repeats['weeks'] = $mybb->input['repeats_3_weeks']; 137 if(!is_array($mybb->input['repeats_3_days'])) 138 { 139 $mybb->input['repeats_3_days'] = array(); 140 } 141 ksort($mybb->input['repeats_3_days']); 142 $days = array(); 143 foreach($mybb->input['repeats_3_days'] as $weekday => $value) 144 { 145 if($value != 1) continue; 146 $days[] = $weekday; 147 } 148 $repeats['days'] = $days; 149 break; 150 case 4: 151 $repeats['repeats'] = 4; 152 if($mybb->input['repeats_4_type'] == 1) 153 { 154 $repeats['day'] = $mybb->input['repeats_4_day']; 155 $repeats['months'] = $mybb->input['repeats_4_months']; 156 } 157 else 158 { 159 $repeats['months'] = $mybb->input['repeats_4_months2']; 160 $repeats['occurance'] = $mybb->input['repeats_4_occurance']; 161 $repeats['weekday'] = $mybb->input['repeats_4_weekday']; 162 } 163 break; 164 case 5: 165 $repeats['repeats'] = 5; 166 if($mybb->input['repeats_5_type'] == 1) 167 { 168 $repeats['day'] = $mybb->input['repeats_5_day']; 169 $repeats['month'] = $mybb->input['repeats_5_month']; 170 $repeats['years'] = $mybb->input['repeats_5_years']; 171 } 172 else 173 { 174 $repeats['occurance'] = $mybb->input['repeats_5_occurance']; 175 $repeats['weekday'] = $mybb->input['repeats_5_weekday']; 176 $repeats['month'] = $mybb->input['repeats_5_month2']; 177 $repeats['years'] = $mybb->input['repeats_5_years']; 178 } 179 break; 180 default: 181 $repeats['repeats'] = 0; 182 } 183 $event['repeats'] = $repeats; 184 } 185 186 $eventhandler->set_data($event); 187 188 // Now let the eventhandler do all the hard work. 189 if(!$eventhandler->validate_event()) 190 { 191 $event_errors = $eventhandler->get_friendly_errors(); 192 $event_errors = inline_error($event_errors); 193 $mybb->input['action'] = "addevent"; 194 } 195 else 196 { 197 $details = $eventhandler->insert_event(); 198 $plugins->run_hooks("calendar_do_addevent_end"); 199 if($details['visible'] == 1) 200 { 201 redirect(get_event_link($details['eid']), $lang->redirect_eventadded); 202 } 203 else 204 { 205 redirect(get_calendar_link($event['cid']), $lang->redirect_eventadded_moderation); 206 } 207 } 208 } 209 210 if($mybb->input['action'] == "addevent") 211 { 212 $query = $db->simple_select("calendars", "*", "cid='".intval($mybb->input['calendar'])."'"); 213 $calendar = $db->fetch_array($query); 214 215 // Invalid calendar? 216 if(!$calendar['cid']) 217 { 218 error($lang->invalid_calendar); 219 } 220 221 // Do we have permission to view this calendar or post events? 222 $calendar_permissions = get_calendar_permissions($calendar['cid']); 223 if($calendar_permissions['canviewcalendar'] != 1 || $calendar_permissions['canaddevents'] != 1) 224 { 225 error_no_permission(); 226 } 227 228 add_breadcrumb(htmlspecialchars_uni($calendar['name']), get_calendar_link($calendar['cid'])); 229 add_breadcrumb($lang->nav_addevent); 230 231 $plugins->run_hooks("calendar_addevent_start"); 232 233 // If MyCode is on for this forum and the MyCode editor is enabled inthe Admin CP, draw the code buttons and smilie inserter. 234 if($mybb->settings['bbcodeinserter'] != 0 && (!$mybb->user['uid'] || $mybb->user['showcodebuttons'] != 0) && $calendar['allowmycode'] == 1) 235 { 236 $codebuttons = build_mycode_inserter(); 237 if($calendar['allowsmilies'] == 1) 238 { 239 $smilieinserter = build_clickable_smilies(); 240 } 241 } 242 243 // Previous selections 244 $name = $description = ''; 245 if(isset($mybb->input['name'])) 246 { 247 $name = htmlspecialchars_uni($mybb->input['name']); 248 } 249 250 if(isset($mybb->input['description'])) 251 { 252 $description = htmlspecialchars_uni($mybb->input['description']); 253 } 254 255 if($mybb->request_method == "post") 256 { 257 $single_day = $mybb->input['single_day']; 258 $single_month[$mybb->input['single_month']] = " selected=\"selected\""; 259 $single_year = $mybb->input['single_year']; 260 $start_day = $mybb->input['start_day']; 261 $start_month[$mybb->input['start_month']] = " selected=\"selected\""; 262 $start_year = $mybb->input['start_year']; 263 $start_time = htmlspecialchars_uni($mybb->input['start_time']); 264 $end_day = $mybb->input['end_day']; 265 $end_month[$mybb->input['end_month']] = " selected=\"selected\""; 266 $end_year = $mybb->input['end_year']; 267 $end_time = htmlspecialchars_uni($mybb->input['end_time']); 268 if($mybb->input['type'] == "single") 269 { 270 $type_single = "checked=\"checked\""; 271 $type = "single"; 272 } 273 else 274 { 275 $type_ranged = "checked=\"checked\""; 276 $type = "ranged"; 277 } 278 if($mybb->input['repeats']) 279 { 280 $repeats_sel[$mybb->input['repeats']] = " selected=\"selected\""; 281 } 282 $repeats_1_days = intval($mybb->input['repeats_1_days']); 283 $repeats_3_weeks = intval($mybb->input['repeats_3_weeks']); 284 if(is_array($mybb->input['repeats_3_days'])) 285 { 286 foreach($mybb->input['repeats_3_days'] as $day => $val) 287 { 288 if($val != 1) 289 { 290 continue; 291 } 292 $day = intval($day); 293 $repeats_3_days[$day] = " checked=\"checked\""; 294 } 295 } 296 if($mybb->input['repeats_4_type'] == 1) 297 { 298 $repeats_4_type[1] = "checked=\"checked\""; 299 } 300 else 301 { 302 $repeats_4_type[2] = "checked=\"checked\""; 303 } 304 $repeats_4_day = intval($mybb->input['repeats_4_day']); 305 $repeats_4_months = intval($mybb->input['repeats_4_months']); 306 $repeats_4_occurance[$mybb->input['repeats_4_occurance']] = "selected=\"selected\""; 307 $repeats_4_weekday[$mybb->input['repeats_4_weekday']] = "selected=\"selected\""; 308 $repeats_4_months2 = intval($mybb->input['repeats_4_months2']); 309 if($mybb->input['repeats_5_type'] == 1) 310 { 311 $repeats_5_type[1] = "checked=\"checked\""; 312 } 313 else 314 { 315 $repeats_5_type[2] = "checked=\"checked\""; 316 } 317 $repeats_5_day = intval($mybb->input['repeats_5_day']); 318 $repeats_5_month[$mybb->input['repeats_5_month']] = "selected=\"selected\""; 319 $repeats_5_years = intval($mybb->input['repeats_5_years']); 320 $repeats_5_occurance[$mybb->input['repeats_5_occurance']] = "selected=\"selected\""; 321 $repeats_5_weekday[$mybb->input['repeats_5_weekday']] = "selected=\"selected\""; 322 $repeats_5_month2[$mybb->input['repeats_5_month2']] = "selected=\"selected\""; 323 $repeats_5_years2 = intval($mybb->input['repeats_5_years2']); 324 325 $timezone = $mybb->input['timezone']; 326 } 327 else 328 { 329 if($mybb->input['day']) 330 { 331 $single_day = $start_day = $end_day = intval($mybb->input['day']); 332 } 333 else 334 { 335 $single_day = $start_day = $end_day = my_date("j"); 336 } 337 if($mybb->input['month']) 338 { 339 $month = intval($mybb->input['month']); 340 } 341 else 342 { 343 $month = my_date("n"); 344 } 345 $single_month[$month] = $start_month[$month] = $end_month[$month] = "selected=\"selected\""; 346 if($mybb->input['year']) 347 { 348 $single_year = $start_year = $end_year = intval($mybb->input['year']); 349 } 350 else 351 { 352 $single_year = $start_year = $end_year = my_date("Y"); 353 } 354 $start_time = $end_time = ""; 355 $type_single = "checked=\"checked\""; 356 $type = "single"; 357 $repeats_1_days = 1; 358 $repeats_3_weeks = 1; 359 $repeats_4_type[1] = "checked=\"checked\""; 360 $repeats_4_day = 1; 361 $repeats_4_months = 1; 362 $repeats_4_occurance[1] = "selected=\"selected\""; 363 $repeats_4_weekday[0] = "selected=\"selected\""; 364 $repeats_4_months2 = 1; 365 $repeats_5_type[1] = "checked=\"checked\""; 366 $repeats_5_day = 1; 367 $repeats_5_month[1] = "selected=\"selected\""; 368 $repeats_5_years = 1; 369 $repeats_5_occurance[1] = "selected=\"selected\""; 370 $repeats_5_weekday[0] = "selected=\"selected\""; 371 $repeats_5_months2[1] = "selected=\"selected\""; 372 $repeats_5_years2 = 1; 373 $timezone = $mybb->user['timezone']; 374 } 375 376 // Construct option list for years 377 for($i = my_date('Y'); $i < (my_date('Y') + 5); ++$i) 378 { 379 if($i == $single_year) 380 { 381 $single_years .= "<option value=\"{$i}\" selected=\"selected\">{$i}</option>\n"; 382 } 383 else 384 { 385 $single_years .= "<option value=\"{$i}\">{$i}</option>\n"; 386 } 387 if($i == $start_year) 388 { 389 $start_years .= "<option value=\"{$i}\" selected=\"selected\">{$i}</option>\n"; 390 } 391 else 392 { 393 $start_years .= "<option value=\"{$i}\">{$i}</option>\n"; 394 } 395 if($i == $end_year) 396 { 397 $end_years .= "<option value=\"{$i}\" selected=\"selected\">{$i}</option>\n"; 398 } 399 else 400 { 401 $end_years .= "<option value=\"{$i}\">{$i}</option>\n"; 402 } 403 } 404 405 // Construct option list for days 406 for($i = 1; $i <= 31; ++$i) 407 { 408 if($i == $single_day) 409 { 410 $single_days .= "<option value=\"{$i}\" selected=\"selected\">{$i}</option>\n"; 411 } 412 else 413 { 414 $single_days .= "<option value=\"{$i}\">{$i}</option>\n"; 415 } 416 if($i == $start_day) 417 { 418 $start_days .= "<option value=\"{$i}\" selected=\"selected\">{$i}</option>\n"; 419 } 420 else 421 { 422 $start_days .= "<option value=\"{$i}\">{$i}</option>\n"; 423 } 424 if($i == $end_day) 425 { 426 $end_days .= "<option value=\"{$i}\" selected=\"selected\">{$i}</option>\n"; 427 } 428 else 429 { 430 $end_days .= "<option value=\"{$i}\">{$i}</option>\n"; 431 } 432 } 433 434 $timezones = build_timezone_select("timezone", $timezone); 435 436 if($mybb->input['ignoretimezone'] == 1) 437 { 438 $ignore_timezone = "checked=\"checked\""; 439 } 440 441 if($mybb->input['private'] == 1) 442 { 443 $privatecheck = " checked=\"checked\""; 444 } 445 446 // Build calendar select 447 $calendar_permissions = get_calendar_permissions(); 448 $query = $db->simple_select("calendars", "*", "", array("order_by" => "name", "order_dir" => "asc")); 449 while($calendar_option = $db->fetch_array($query)) 450 { 451 if($calendar_permissions[$calendar['cid']]['canviewcalendar'] == 1) 452 { 453 $calendar_option['name'] = htmlspecialchars_uni($calendar_option['name']); 454 if($calendar_option['cid'] == $mybb->input['calendar']) 455 { 456 $calendar_select .= "<option value=\"{$calendar_option['cid']}\" selected=\"selected\">{$calendar_option['name']}</option>\n"; 457 } 458 else 459 { 460 $calendar_select .= "<option value=\"{$calendar_option['cid']}\">{$calendar_option['name']}</option>\n"; 461 } 462 } 463 } 464 465 $plugins->run_hooks("calendar_addevent_end"); 466 467 eval("\$addevent = \"".$templates->get("calendar_addevent")."\";"); 468 output_page($addevent); 469 } 470 471 // Edit an event 472 if($mybb->input['action'] == "do_editevent" && $mybb->request_method == "post") 473 { 474 $query = $db->simple_select("events", "*", "eid='".intval($mybb->input['eid'])."'"); 475 $event = $db->fetch_array($query); 476 477 if(!is_numeric($event['eid'])) 478 { 479 error($lang->error_invalidevent); 480 } 481 482 $query = $db->simple_select("calendars", "*", "cid='{$event['cid']}'"); 483 $calendar = $db->fetch_array($query); 484 485 // Invalid calendar? 486 if(!$calendar['cid']) 487 { 488 error($lang->invalid_calendar); 489 } 490 491 // Do we have permission to view this calendar or post events? 492 $calendar_permissions = get_calendar_permissions($calendar['cid']); 493 if($calendar_permissions['canviewcalendar'] != 1 || $calendar_permissions['canaddevents'] != 1) 494 { 495 error_no_permission(); 496 } 497 498 if(($event['uid'] != $mybb->user['uid'] || $mybb->user['uid'] == 0) && $calendar_permissions['canmoderateevents'] != 1) 499 { 500 error_no_permission(); 501 } 502 503 // Verify incoming POST request 504 verify_post_check($mybb->input['my_post_key']); 505 506 // Are we going to delete this event or just edit it? 507 if($mybb->input['delete'] == 1) 508 { 509 $db->delete_query("events", "eid='{$event['eid']}'"); 510 511 // Redirect back to the main calendar view. 512 redirect("calendar.php", $lang->redirect_eventdeleted); 513 } 514 515 // Have we made a private event public? 516 if(!$mybb->input['private']) 517 { 518 $mybb->input['private'] = 0; 519 } 520 521 $plugins->run_hooks("calendar_do_editevent_start"); 522 523 // Set up event handler. 524 require_once MYBB_ROOT."inc/datahandler.php"; 525 require_once MYBB_ROOT."inc/datahandlers/event.php"; 526 $eventhandler = new EventDataHandler("update"); 527 528 // Prepare an array for the eventhandler. 529 $event = array( 530 "eid" => $event['eid'], 531 "name" => $mybb->input['name'], 532 "description" => $mybb->input['description'], 533 "private" => $mybb->input['private'], 534 "type" => $mybb->input['type'] 535 ); 536 537 // Now we add in our date/time info depending on the type of event 538 if($mybb->input['type'] == "single") 539 { 540 $event['start_date'] = array( 541 "day" => $mybb->input['single_day'], 542 "month" => $mybb->input['single_month'], 543 "year" => $mybb->input['single_year'] 544 ); 545 $event['repeats'] = ''; 546 } 547 else if($mybb->input['type'] == "ranged") 548 { 549 $event['start_date'] = array( 550 "day" => $mybb->input['start_day'], 551 "month" => $mybb->input['start_month'], 552 "year" => $mybb->input['start_year'], 553 "time" => $mybb->input['start_time'] 554 ); 555 $event['end_date'] = array( 556 "day" => $mybb->input['end_day'], 557 "month" => $mybb->input['end_month'], 558 "year" => $mybb->input['end_year'], 559 "time" => $mybb->input['end_time'] 560 ); 561 $event['timezone'] = $mybb->input['timezone']; 562 $event['ignoretimezone'] = intval($mybb->input['ignoretimezone']); 563 $repeats = array(); 564 switch($mybb->input['repeats']) 565 { 566 case 1: 567 $repeats['repeats'] = 1; 568 $repeats['days'] = $mybb->input['repeats_1_days']; 569 break; 570 case 2: 571 $repeats['repeats'] = 2; 572 break; 573 case 3: 574 $repeats['repeats'] = 3; 575 $repeats['weeks'] = $mybb->input['repeats_3_weeks']; 576 if(!is_array($mybb->input['repeats_3_days'])) 577 { 578 $mybb->input['repeats_3_days'] = array(); 579 } 580 ksort($mybb->input['repeats_3_days']); 581 $days = array(); 582 foreach($mybb->input['repeats_3_days'] as $weekday => $value) 583 { 584 if($value != 1) 585 { 586 continue; 587 } 588 $days[] = $weekday; 589 } 590 $repeats['days'] = $days; 591 break; 592 case 4: 593 $repeats['repeats'] = 4; 594 if($mybb->input['repeats_4_type'] == 1) 595 { 596 $repeats['day'] = $mybb->input['repeats_4_day']; 597 $repeats['months'] = $mybb->input['repeats_4_months']; 598 } 599 else 600 { 601 $repeats['months'] = $mybb->input['repeats_4_months2']; 602 $repeats['occurance'] = $mybb->input['repeats_4_occurance']; 603 $repeats['weekday'] = $mybb->input['repeats_4_weekday']; 604 } 605 break; 606 case 5: 607 $repeats['repeats'] = 5; 608 if($mybb->input['repeats_5_type'] == 1) 609 { 610 $repeats['day'] = $mybb->input['repeats_5_day']; 611 $repeats['month'] = $mybb->input['repeats_5_month']; 612 $repeats['years'] = $mybb->input['repeats_5_years']; 613 } 614 else 615 { 616 $repeats['occurance'] = $mybb->input['repeats_5_occurance']; 617 $repeats['weekday'] = $mybb->input['repeats_5_weekday']; 618 $repeats['month'] = $mybb->input['repeats_5_month2']; 619 $repeats['years'] = $mybb->input['repeats_5_years']; 620 } 621 break; 622 default: 623 $repeats['repeats'] = 0; 624 } 625 $event['repeats'] = $repeats; 626 } 627 628 $eventhandler->set_data($event); 629 630 // Now let the eventhandler do all the hard work. 631 if(!$eventhandler->validate_event()) 632 { 633 $event_errors = $eventhandler->get_friendly_errors(); 634 $event_errors = inline_error($event_errors); 635 $mybb->input['action'] = "editevent"; 636 } 637 else 638 { 639 $details = $eventhandler->update_event(); 640 $plugins->run_hooks("calendar_do_editevent_end"); 641 redirect(get_event_link($event['eid']), $lang->redirect_eventupdated); 642 } 643 } 644 645 if($mybb->input['action'] == "editevent") 646 { 647 $query = $db->simple_select("events", "*", "eid='".intval($mybb->input['eid'])."'"); 648 $event = $db->fetch_array($query); 649 650 if(!is_numeric($event['eid'])) 651 { 652 error($lang->error_invalidevent); 653 } 654 655 $query = $db->simple_select("calendars", "*", "cid='{$event['cid']}'"); 656 $calendar = $db->fetch_array($query); 657 658 // Invalid calendar? 659 if(!$calendar['cid']) 660 { 661 error($lang->invalid_calendar); 662 } 663 664 // Do we have permission to view this calendar or post events? 665 $calendar_permissions = get_calendar_permissions($calendar['cid']); 666 if($calendar_permissions['canviewcalendar'] != 1 || $calendar_permissions['canaddevents'] != 1) 667 { 668 error_no_permission(); 669 } 670 671 if(($event['uid'] != $mybb->user['uid'] || $mybb->user['uid'] == 0) && $calendar_permissions['canmoderateevents'] != 1) 672 { 673 error_no_permission(); 674 } 675 676 add_breadcrumb(htmlspecialchars_uni($calendar['name']), get_calendar_link($calendar['cid'])); 677 add_breadcrumb(htmlspecialchars_uni($event['name']), get_event_link($event['eid'])); 678 add_breadcrumb($lang->nav_editevent); 679 680 $plugins->run_hooks("calendar_editevent_start"); 681 682 // If MyCode is on for this forum and the MyCode editor is enabled inthe Admin CP, draw the code buttons and smilie inserter. 683 if($mybb->settings['bbcodeinserter'] != 0 && (!$mybb->user['uid'] || $mybb->user['showcodebuttons'] != 0) && $calendar['allowmycode'] == 1) 684 { 685 $codebuttons = build_mycode_inserter(); 686 if($calendar['allowsmilies'] == 1) 687 { 688 $smilieinserter = build_clickable_smilies(); 689 } 690 } 691 692 // Previous selections 693 if($event_errors) 694 { 695 $name = htmlspecialchars_uni($mybb->input['name']); 696 $description = htmlspecialchars_uni($mybb->input['description']); 697 $single_day = $mybb->input['single_day']; 698 $single_month[$mybb->input['single_month']] = " selected=\"selected\""; 699 $single_year = $mybb->input['single_year']; 700 $start_day = $mybb->input['start_day']; 701 $start_month[$mybb->input['start_month']] = " selected=\"selected\""; 702 $start_year = $mybb->input['start_year']; 703 $start_time = htmlspecialchars_uni($mybb->input['start_time']); 704 $end_day = $mybb->input['end_day']; 705 $end_month[$mybb->input['end_month']] = " selected=\"selected\""; 706 $end_year = $mybb->input['end_year']; 707 $end_time = htmlspecialchars_uni($mybb->input['end_time']); 708 if($mybb->input['type'] == "single") 709 { 710 $type_single = "checked=\"checked\""; 711 $type = "single"; 712 } 713 else 714 { 715 $type_ranged = "checked=\"checked\""; 716 $type = "ranged"; 717 } 718 if($mybb->input['repeats']) 719 { 720 $repeats_sel[$mybb->input['repeats']] = " selected=\"selected\""; 721 } 722 $repeats_1_days = intval($mybb->input['repeats_1_days']); 723 $repeats_3_weeks = intval($mybb->input['repeats_3_weeks']); 724 if(is_array($mybb->input['repeats_3_days'])) 725 { 726 foreach($mybb->input['repeats_3_days'] as $day => $val) 727 { 728 if($val != 1) continue; 729 $day = intval($day); 730 $repeats_3_days[$day] = " checked=\"checked\""; 731 } 732 } 733 if($mybb->input['repeats_4_type'] == 1) 734 { 735 $repeats_4_type[1] = "checked=\"checked\""; 736 } 737 else 738 { 739 $repeats_4_type[2] = "checked=\"checked\""; 740 } 741 $repeats_4_day = intval($mybb->input['repeats_4_day']); 742 $repeats_4_months = intval($mybb->input['repeats_4_months']); 743 $repeats_4_occurance[$mybb->input['repeats_4_occurance']] = "selected=\"selected\""; 744 $repeats_4_weekday[$mybb->input['repeats_4_weekday']] = "selected=\"selected\""; 745 $repeats_4_months2 = intval($mybb->input['repeats_4_months2']); 746 if($mybb->input['repeats_5_type'] == 1) 747 { 748 $repeats_5_type[1] = "checked=\"checked\""; 749 } 750 else 751 { 752 $repeats_5_type[2] = "checked=\"checked\""; 753 } 754 $repeats_5_day = intval($mybb->input['repeats_5_day']); 755 $repeats_5_month[$mybb->input['repeats_5_month']] = "selected=\"selected\""; 756 $repeats_5_years = intval($mybb->input['repeats_5_years']); 757 $repeats_5_occurance[$mybb->input['repeats_5_occurance']] = "selected=\"selected\""; 758 $repeats_5_weekday[$mybb->input['repeats_5_weekday']] = "selected=\"selected\""; 759 $repeats_5_month2[$mybb->input['repeats_5_month2']] = "selected=\"selected\""; 760 $repeats_5_years2 = intval($mybb->input['repeats_5_years2']); 761 762 if($mybb->input['private'] == 1) 763 { 764 $privatecheck = " checked=\"checked\""; 765 } 766 767 if($mybb->input['ignoretimezone'] == 1) 768 { 769 $ignore_timezone = "checked=\"checked\""; 770 } 771 772 $timezone = $mybb->input['timezone']; 773 } 774 else 775 { 776 $mybb->input['calendar'] = $event['cid']; 777 $name = htmlspecialchars_uni($event['name']); 778 $description = htmlspecialchars_uni($event['description']); 779 if($event['private'] == 1) 780 { 781 $privatecheck = " checked=\"checked\""; 782 } 783 $start_date = explode("-", gmdate("j-n-Y-g:i A", $event['starttime']+$event['timezone']*3600)); 784 $single_day = $start_date[0]; 785 $single_month[$start_date[1]] = " selected=\"selected\""; 786 $single_year = $start_date[2]; 787 $start_day = $start_date[0]; 788 $start_month[$start_date[1]] = " selected=\"selected\""; 789 $start_year = $start_date[2]; 790 if($event['usingtime']) 791 { 792 $start_time = gmdate($mybb->settings['timeformat'], $event['starttime']+$event['timezone']*3600); 793 } 794 if($event['endtime']) 795 { 796 $end_date = explode("-", gmdate("j-n-Y-g:i A", $event['endtime']+$event['timezone']*3600)); 797 $end_day = $end_date[0]; 798 $end_month[$end_date[1]] = " selected=\"selected\""; 799 $end_year = $end_date[2]; 800 if($event['usingtime']) 801 { 802 $end_time = gmdate($mybb->settings['timeformat'], $event['endtime']+$event['timezone']*3600); 803 } 804 $type_ranged = "checked=\"checked\""; 805 $type = "ranged"; 806 $repeats = unserialize($event['repeats']); 807 if($repeats['repeats'] >= 0) 808 { 809 $repeats_sel[$repeats['repeats']] = " selected=\"selected\""; 810 switch($repeats['repeats']) 811 { 812 case 1: 813 $repeats_1_days = $repeats['days']; 814 $repeats_3_weeks = 1; 815 $repeats_4_type[1] = "checked=\"checked\""; 816 $repeats_4_day = 1; 817 $repeats_4_months = 1; 818 $repeats_4_months2 = 1; 819 $repeats_5_type[1] = "checked=\"checked\""; 820 $repeats_5_day = 1; 821 $repeats_5_years = $repeats_5_years2 = 1; 822 break; 823 case 3: 824 $repeats_1_days = 1; 825 $repeats_3_weeks = $repeats['weeks']; 826 if(is_array($repeats['days'])) 827 { 828 foreach($repeats['days'] as $weekday) 829 { 830 $repeats_3_days[$weekday] = " checked=\"checked\""; 831 } 832 } 833 $repeats_4_type[1] = "checked=\"checked\""; 834 $repeats_4_day = 1; 835 $repeats_4_months = 1; 836 $repeats_4_months2 = 1; 837 $repeats_5_type[1] = "checked=\"checked\""; 838 $repeats_5_day = 1; 839 $repeats_5_years = $repeats_5_years2 = 1; 840 break; 841 case 4: 842 $repeats_1_days = 1; 843 $repeats_3_weeks = 1; 844 if($repeats['day']) 845 { 846 $repeats_4_type[1] = "checked=\"checked\""; 847 $repeats_4_day = $repeats['day']; 848 $repeats_4_months = $repeats_4_months2 = $repeats['months']; 849 } 850 else 851 { 852 $repeats_4_type[2] = "checked=\"checked\""; 853 $repeats_4_day = 1; 854 $repeats_4_months2 = $repeats_4_months = $repeats['months']; 855 $repeats_4_occurance[$repeats['occurance']] = "selected=\"selected\""; 856 $repeats_4_weekday[$repeats['weekday']] = "selected=\"selected\""; 857 } 858 $repeats_5_type[1] = "checked=\"checked\""; 859 $repeats_5_day = 1; 860 $repeats_5_years = $repeats_5_years2 = 1; 861 break; 862 case 5: 863 $repeats_1_days = 1; 864 $repeats_3_weeks = 1; 865 $repeats_4_type[1] = "checked=\"checked\""; 866 $repeats_4_day = 1; 867 $repeats_4_months = 1; 868 $repeats_4_months2 = 1; 869 if($repeats['day']) 870 { 871 $repeats_5_type[1] = "checked=\"checked\""; 872 $repeats_5_day = $repeats['day']; 873 $repeats_5_month[$repeats['month']] = $repeats_5_month2[$repeats['month']] = "selected=\"selected\""; 874 $repeats_5_years = $repeats_5_years2 = $repeats['years']; 875 } 876 else 877 { 878 $repeats_5_type[2] = "checked=\"checked\""; 879 $repeats_5_occurance[$repeats['occurance']] = "selected=\"selected\""; 880 $repeats_5_weekday[$repeats['weekday']] = "selected=\"selected\""; 881 $repeats_5_month[$repeats['month']] = $repeats_5_month2[$repeats['month']] = "selected=\"selected\""; 882 $repeats_5_years = $repeats_5_years2 = $repeats['years']; 883 } 884 break; 885 } 886 } 887 if($event['ignoretimezone']) 888 { 889 $timezone = 0; 890 $ignore_timezone = "checked=\"checked\""; 891 } 892 else 893 { 894 $timezone = $event['timezone']; 895 } 896 } 897 else 898 { 899 $type_single = "checked=\"checked\""; 900 $type = "single"; 901 // set some defaults if the user wants to make a ranged event 902 $end_day = $start_day; 903 $end_month = $start_month; 904 $end_year = $start_year; 905 } 906 } 907 908 // Construct option list for years 909 for($i = my_date('Y'); $i < (my_date('Y') + 5); ++$i) 910 { 911 if($i == $single_year) 912 { 913 $single_years .= "<option value=\"{$i}\" selected=\"selected\">{$i}</option>\n"; 914 } 915 else 916 { 917 $single_years .= "<option value=\"{$i}\">{$i}</option>\n"; 918 } 919 if($i == $start_year) 920 { 921 $start_years .= "<option value=\"{$i}\" selected=\"selected\">{$i}</option>\n"; 922 } 923 else 924 { 925 $start_years .= "<option value=\"{$i}\">{$i}</option>\n"; 926 } 927 if($i == $end_year) 928 { 929 $end_years .= "<option value=\"{$i}\" selected=\"selected\">{$i}</option>\n"; 930 } 931 else 932 { 933 $end_years .= "<option value=\"{$i}\">{$i}</option>\n"; 934 } 935 } 936 937 // Construct option list for days 938 for($i = 1; $i <= 31; ++$i) 939 { 940 if($i == $single_day) 941 { 942 $single_days .= "<option value=\"{$i}\" selected=\"selected\">{$i}</option>\n"; 943 } 944 else 945 { 946 $single_days .= "<option value=\"{$i}\">{$i}</option>\n"; 947 } 948 if($i == $start_day) 949 { 950 $start_days .= "<option value=\"{$i}\" selected=\"selected\">{$i}</option>\n"; 951 } 952 else 953 { 954 $start_days .= "<option value=\"{$i}\">{$i}</option>\n"; 955 } 956 if($i == $end_day) 957 { 958 $end_days .= "<option value=\"{$i}\" selected=\"selected\">{$i}</option>\n"; 959 } 960 else 961 { 962 $end_days .= "<option value=\"{$i}\">{$i}</option>\n"; 963 } 964 } 965 966 $timezones = build_timezone_select("timezone", $timezone); 967 968 $plugins->run_hooks("calendar_editevent_end"); 969 970 eval("\$editevent = \"".$templates->get("calendar_editevent")."\";"); 971 output_page($editevent); 972 } 973 974 // Move an event to another calendar 975 if($mybb->input['action'] == "move") 976 { 977 $query = $db->simple_select("events", "*", "eid='".intval($mybb->input['eid'])."'"); 978 $event = $db->fetch_array($query); 979 980 if(!is_numeric($event['eid'])) 981 { 982 error($lang->error_invalidevent); 983 } 984 985 $query = $db->simple_select("calendars", "*", "cid='{$event['cid']}'"); 986 $calendar = $db->fetch_array($query); 987 988 // Invalid calendar? 989 if(!$calendar['cid']) 990 { 991 error($lang->invalid_calendar); 992 } 993 994 // Do we have permission to view this calendar or post events? 995 $calendar_permissions = get_calendar_permissions(); 996 if($calendar_permissions[$calendar['cid']]['canviewcalendar'] != 1) 997 { 998 error_no_permission(); 999 } 1000 1001 if($calendar_permissions[$calendar['cid']]['canmoderateevents'] != 1) 1002 { 1003 error_no_permission(); 1004 } 1005 1006 add_breadcrumb(htmlspecialchars_uni($calendar['name']), get_calendar_link($calendar['cid'])); 1007 add_breadcrumb(htmlspecialchars_uni($event['name']), get_event_link($event['eid'])); 1008 add_breadcrumb($lang->nav_move_event); 1009 1010 $plugins->run_hooks("calendar_move_start"); 1011 1012 // Build calendar select 1013 $query = $db->simple_select("calendars", "*", "", array("order_by" => "name", "order_dir" => "asc")); 1014 while($calendar_option = $db->fetch_array($query)) 1015 { 1016 if($calendar_permissions[$calendar['cid']]['canviewcalendar'] == 1) 1017 { 1018 $calendar_option['name'] = htmlspecialchars_uni($calendar_option['name']); 1019 $calendar_select .= "<option value=\"{$calendar_option['cid']}\">{$calendar_option['name']}</option>\n"; 1020 } 1021 } 1022 1023 $plugins->run_hooks("calendar_move_end"); 1024 1025 eval("\$moveevent = \"".$templates->get("calendar_move")."\";"); 1026 output_page($moveevent); 1027 } 1028 1029 // Actually move the event 1030 if($mybb->input['action'] == "do_move" && $mybb->request_method == "post") 1031 { 1032 // Verify incoming POST request 1033 verify_post_check($mybb->input['my_post_key']); 1034 1035 $query = $db->simple_select("events", "*", "eid='".intval($mybb->input['eid'])."'"); 1036 $event = $db->fetch_array($query); 1037 1038 if(!is_numeric($event['eid'])) 1039 { 1040 error($lang->error_invalidevent); 1041 } 1042 1043 $query = $db->simple_select("calendars", "*", "cid='{$event['cid']}'"); 1044 $calendar = $db->fetch_array($query); 1045 1046 // Invalid calendar? 1047 if(!$calendar['cid']) 1048 { 1049 error($lang->invalid_calendar); 1050 } 1051 1052 // Do we have permission to view this calendar? 1053 $calendar_permissions = get_calendar_permissions(); 1054 if($calendar_permissions[$calendar['cid']]['canviewcalendar'] != 1) 1055 { 1056 error_no_permission(); 1057 } 1058 1059 if($calendar_permissions[$calendar['cid']]['canmoderateevents'] != 1) 1060 { 1061 error_no_permission(); 1062 } 1063 1064 1065 $query = $db->simple_select("calendars", "*", "cid='".intval($mybb->input['new_calendar'])."'"); 1066 $new_calendar = $db->fetch_array($query); 1067 1068 if(!$new_calendar['cid']) 1069 { 1070 error($lang->invalid_calendar); 1071 } 1072 1073 if($calendar_permissions[$mybb->input['new_calendar']]['canviewcalendar'] != 1) 1074 { 1075 error_no_permission(); 1076 } 1077 1078 $plugins->run_hooks("calendar_do_move_start"); 1079 1080 $updated_event = array( 1081 "cid" => $new_calendar['cid'] 1082 ); 1083 $db->update_query("events", $updated_event, "eid='{$event['eid']}'"); 1084 1085 $plugins->run_hooks("calendar_do_move_end"); 1086 1087 redirect(get_event_link($event['eid']), $lang->redirect_eventmoved); 1088 } 1089 1090 // Approve an event 1091 if($mybb->input['action'] == "approve") 1092 { 1093 // Verify incoming POST request 1094 verify_post_check($mybb->input['my_post_key']); 1095 1096 $query = $db->simple_select("events", "*", "eid='".intval($mybb->input['eid'])."'"); 1097 $event = $db->fetch_array($query); 1098 1099 if(!is_numeric($event['eid'])) 1100 { 1101 error($lang->error_invalidevent); 1102 } 1103 1104 $query = $db->simple_select("calendars", "*", "cid='{$event['cid']}'"); 1105 $calendar = $db->fetch_array($query); 1106 1107 // Invalid calendar? 1108 if(!$calendar['cid']) 1109 { 1110 error($lang->invalid_calendar); 1111 } 1112 1113 // Do we have permission to view this calendar? 1114 $calendar_permissions = get_calendar_permissions($calendar['cid']); 1115 if($calendar_permissions['canviewcalendar'] != 1) 1116 { 1117 error_no_permission(); 1118 } 1119 1120 if($calendar_permissions['canmoderateevents'] != 1) 1121 { 1122 error_no_permission(); 1123 } 1124 1125 $plugins->run_hooks("calendar_approve_start"); 1126 1127 $updated_event = array( 1128 "visible" => 1 1129 ); 1130 $db->update_query("events", $updated_event, "eid='{$event['eid']}'"); 1131 1132 $plugins->run_hooks("calendar_approve_end"); 1133 1134 redirect(get_event_link($event['eid']), $lang->redirect_eventapproved); 1135 } 1136 1137 // Unapprove an event 1138 if($mybb->input['action'] == "unapprove") 1139 { 1140 // Verify incoming POST request 1141 verify_post_check($mybb->input['my_post_key']); 1142 1143 $query = $db->simple_select("events", "*", "eid='".intval($mybb->input['eid'])."'"); 1144 $event = $db->fetch_array($query); 1145 1146 if(!is_numeric($event['eid'])) 1147 { 1148 error($lang->error_invalidevent); 1149 } 1150 1151 $query = $db->simple_select("calendars", "*", "cid='{$event['cid']}'"); 1152 $calendar = $db->fetch_array($query); 1153 1154 // Invalid calendar? 1155 if(!$calendar['cid']) 1156 { 1157 error($lang->invalid_calendar); 1158 } 1159 1160 // Do we have permission to view this calendar? 1161 $calendar_permissions = get_calendar_permissions($calendar['cid']); 1162 if($calendar_permissions['canviewcalendar'] != 1) 1163 { 1164 error_no_permission(); 1165 } 1166 1167 if($calendar_permissions['canmoderateevents'] != 1) 1168 { 1169 error_no_permission(); 1170 } 1171 1172 $plugins->run_hooks("calendar_unapprove_start"); 1173 1174 $updated_event = array( 1175 "visible" => 0 1176 ); 1177 $db->update_query("events", $updated_event, "eid='{$event['eid']}'"); 1178 1179 $plugins->run_hooks("calendar_unapprove_end"); 1180 1181 redirect(get_event_link($event['eid']), $lang->redirect_eventunapproved); 1182 } 1183 1184 // Showing specific event 1185 if($mybb->input['action'] == "event") 1186 { 1187 $query = $db->query(" 1188 SELECT u.*, e.* 1189 FROM ".TABLE_PREFIX."events e 1190 LEFT JOIN ".TABLE_PREFIX."users u ON (u.uid=e.uid) 1191 WHERE e.eid='".intval($mybb->input['eid'])."' 1192 "); 1193 $event = $db->fetch_array($query); 1194 1195 if(!is_numeric($event['eid']) || ($event['private'] == 1 && $event['uid'] != $mybb->user['uid'])) 1196 { 1197 error($lang->error_invalidevent); 1198 } 1199 1200 $query = $db->simple_select("calendars", "*", "cid='{$event['cid']}'"); 1201 $calendar = $db->fetch_array($query); 1202 1203 // Invalid calendar? 1204 if(!$calendar['cid']) 1205 { 1206 error($lang->invalid_calendar); 1207 } 1208 1209 // Do we have permission to view this calendar? 1210 $calendar_permissions = get_calendar_permissions($calendar['cid']); 1211 if($calendar_permissions['canviewcalendar'] != 1 || ($calendar_permissions['canmoderateevents'] != 1 && $event['visible'] == 0)) 1212 { 1213 error_no_permission(); 1214 } 1215 1216 add_breadcrumb(htmlspecialchars_uni($calendar['name']), get_calendar_link($calendar['cid'])); 1217 add_breadcrumb(htmlspecialchars_uni($event['name']), get_event_link($event['eid'])); 1218 1219 $plugins->run_hooks("calendar_event_start"); 1220 1221 $event['name'] = htmlspecialchars_uni($event['name']); 1222 1223 $event_parser_options = array( 1224 "allow_html" => $calendar['allowhtml'], 1225 "allow_mycode" => $calendar['allowmycode'], 1226 "allow_smilies" => $calendar['allowsmilies'], 1227 "allow_imgcode" => $calendar['allowimgcode'], 1228 "allow_videocode" => $calendar['allowvideocode'] 1229 ); 1230 1231 $event['description'] = $parser->parse_message($event['description'], $event_parser_options); 1232 1233 // Get the usergroup 1234 if($event['username']) 1235 { 1236 if(!$event['displaygroup']) 1237 { 1238 $event['displaygroup'] = $event['usergroup']; 1239 } 1240 $user_usergroup = $groupscache[$event['displaygroup']]; 1241 } 1242 else 1243 { 1244 $user_usergroup = $groupscache[1]; 1245 } 1246 1247 if(!is_array($titles_cache)) 1248 { 1249 // Get user titles (i guess we should improve this, maybe in version3. 1250 $query = $db->simple_select("usertitles", "*", "", array('order_by' => 'posts', 'order_dir' => 'DESC')); 1251 while($usertitle = $db->fetch_array($query)) 1252 { 1253 $titles_cache[$usertitle['posts']] = $usertitle; 1254 } 1255 unset($usertitle); 1256 } 1257 1258 // Event made by registered user 1259 if($event['uid'] > 0 && $event['username']) 1260 { 1261 $event['profilelink'] = build_profile_link(format_name($event['username'], $event['usergroup'], $event['displaygroup']), $event['uid']); 1262 1263 if(trim($event['usertitle']) != "") 1264 { 1265 $hascustomtitle = 1; 1266 } 1267 1268 if($user_usergroup['usertitle'] != "" && !$hascustomtitle) 1269 { 1270 $event['usertitle'] = $user_usergroup['usertitle']; 1271 } 1272 elseif(is_array($titles_cache) && !$user_usergroup['usertitle']) 1273 { 1274 reset($titles_cache); 1275 foreach($titles_cache as $key => $title) 1276 { 1277 if($event['postnum'] >= $key) 1278 { 1279 if(!$hascustomtitle) 1280 { 1281 $event['usertitle'] = $title['title']; 1282 } 1283 $event['stars'] = $title['stars']; 1284 $event['starimage'] = $title['starimage']; 1285 break; 1286 } 1287 } 1288 } 1289 1290 if($user_usergroup['stars']) 1291 { 1292 $event['stars'] = $user_usergroup['stars']; 1293 } 1294 1295 if(!$event['starimage']) 1296 { 1297 $event['starimage'] = $user_usergroup['starimage']; 1298 } 1299 $event['starimage'] = str_replace("{theme}", $theme['imgdir'], $event['starimage']); 1300 1301 for($i = 0; $i < $post['stars']; ++$i) 1302 { 1303 $event['userstars'] .= "<img src=\"".$event['starimage']."\" border=\"0\" alt=\"*\" />"; 1304 } 1305 1306 if($event['userstars'] && $event['starimage'] && $event['stars']) 1307 { 1308 $event['userstars'] .= "<br />"; 1309 } 1310 } 1311 // Created by a guest or an unknown user 1312 else 1313 { 1314 if(!$event['username']) 1315 { 1316 $event['username'] = $lang->guest; 1317 } 1318 1319 $event['username'] = $event['username']; 1320 $event['profilelink'] = format_name($event['username'], 1); 1321 1322 if($user_usergroup['usertitle']) 1323 { 1324 $event['usertitle'] = $user_usergroup['usertitle']; 1325 } 1326 else 1327 { 1328 $event['usertitle'] = $lang->guest; 1329 } 1330 } 1331 1332 if($event['ignoretimezone'] == 0) 1333 { 1334 $offset = $event['timezone']; 1335 } 1336 else 1337 { 1338 $offset = $mybb->user['timezone']; 1339 } 1340 1341 $event['starttime_user'] = $event['starttime']+$offset*3600; 1342 1343 // Events over more than one day 1344 $time_period = ''; 1345 if($event['endtime'] > 0 && $event['endtime'] != $event['starttime']) 1346 { 1347 $event['endtime_user'] = $event['endtime']+$offset*3600; 1348 $start_day = gmmktime(0, 0, 0, gmdate("n", $event['starttime_user']), gmdate("j", $event['starttime_user']), gmdate("Y", $event['starttime_user'])); 1349 $end_day = gmmktime(0, 0, 0, gmdate("n", $event['endtime_user']), gmdate("j", $event['endtime_user']), gmdate("Y", $event['endtime_user'])); 1350 $start_time = gmdate("Hi", $event['starttime_user']); 1351 $end_time = gmdate("Hi", $event['endtime_user']); 1352 1353 $event['repeats'] = unserialize($event['repeats']); 1354 1355 // Event only runs over one day 1356 if($start_day == $end_day && $event['repeats']['repeats'] == 0) 1357 { 1358 $time_period = gmdate($mybb->settings['dateformat'], $event['starttime_user']); 1359 // Event runs all day 1360 if($start_time != 0000 && $end_time != 2359) 1361 { 1362 $time_period .= $lang->comma.gmdate($mybb->settings['timeformat'], $event['starttime_user'])." - ".gmdate($mybb->settings['timeformat'], $event['endtime_user']); 1363 } 1364 else 1365 { 1366 $time_period .= $lang->comma.$lang->all_day; 1367 } 1368 } 1369 else 1370 { 1371 $time_period = gmdate($mybb->settings['dateformat'], $event['starttime_user']).", ".gmdate($mybb->settings['timeformat'], $event['starttime_user']); 1372 $time_period .= " - "; 1373 $time_period .= gmdate($mybb->settings['dateformat'], $event['endtime_user']).", ".gmdate($mybb->settings['timeformat'], $event['endtime_user']); 1374 } 1375 } 1376 else 1377 { 1378 $time_period = gmdate($mybb->settings['dateformat'], $event['starttime_user']); 1379 } 1380 1381 $repeats = fetch_friendly_repetition($event); 1382 if($repeats) 1383 { 1384 $repeats = "<span class=\"smalltext\"><strong>{$lang->repeats}</strong><br />{$repeats}</span>"; 1385 } 1386 1387 if($calendar_permissions['canmoderateevents'] == 1 || ($mybb->user['uid'] > 0 && $mybb->user['uid'] == $event['uid'])) 1388 { 1389 eval("\$edit_event = \"".$templates->get("calendar_event_editbutton")."\";"); 1390 if($calendar_permissions['canmoderateevents'] == 1) 1391 { 1392 if($event['visible'] == 1) 1393 { 1394 $approve = $lang->unapprove_event; 1395 $approve_value = "unapprove"; 1396 } 1397 else 1398 { 1399 $approve = $lang->approve_event; 1400 $approve_value = "approve"; 1401 } 1402 eval("\$moderator_options = \"".$templates->get("calendar_event_modoptions")."\";"); 1403 } 1404 1405 if($event['visible'] == 0) 1406 { 1407 $event_class = " trow_shaded"; 1408 } 1409 } 1410 1411 $month = my_date("n"); 1412 1413 $yearsel = ''; 1414 for($i = my_date("Y"); $i < (my_date("Y") + 5); ++$i) 1415 { 1416 $yearsel .= "<option value=\"$i\">$i</option>\n"; 1417 } 1418 1419 if($mybb->usergroup['canaddevents'] == 1) 1420 { 1421 eval("\$addevent = \"".$templates->get("calendar_addeventlink")."\";"); 1422 } 1423 1424 // Now output the page 1425 $plugins->run_hooks("calendar_event_end"); 1426 eval("\$event = \"".$templates->get("calendar_event")."\";"); 1427 output_page($event); 1428 } 1429 1430 // View all events on a specific day. 1431 if($mybb->input['action'] == "dayview") 1432 { 1433 // Showing a particular calendar 1434 if($mybb->input['calendar']) 1435 { 1436 $query = $db->simple_select("calendars", "*", "cid='".intval($mybb->input['calendar'])."'"); 1437 $calendar = $db->fetch_array($query); 1438 } 1439 // Showing the default calendar 1440 else 1441 { 1442 $query = $db->simple_select("calendars", "*", "disporder='1'"); 1443 $calendar = $db->fetch_array($query); 1444 } 1445 1446 // Invalid calendar? 1447 if(!$calendar['cid']) 1448 { 1449 error($lang->invalid_calendar); 1450 } 1451 1452 // Do we have permission to view this calendar? 1453 $calendar_permissions = get_calendar_permissions($calendar['cid']); 1454 if($calendar_permissions['canviewcalendar'] != 1) 1455 { 1456 error_no_permission(); 1457 } 1458 1459 // Incoming year? 1460 if($mybb->input['year'] && $mybb->input['year'] <= my_date("Y")+5) 1461 { 1462 $year = intval($mybb->input['year']); 1463 } 1464 else 1465 { 1466 $year = my_date("Y"); 1467 } 1468 1469 // Then the month 1470 if($mybb->input['month'] >=1 && $mybb->input['month'] <= 12) 1471 { 1472 $month = intval($mybb->input['month']); 1473 } 1474 else 1475 { 1476 $month = my_date("n"); 1477 } 1478 1479 // And day? 1480 if($mybb->input['day'] && $mybb->input['day'] <= gmdate("t", gmmktime(0, 0, 0, $month, 1, $year))) 1481 { 1482 $day = intval($mybb->input['day']); 1483 } 1484 else 1485 { 1486 $day = my_date("j"); 1487 } 1488 1489 add_breadcrumb(htmlspecialchars_uni($calendar['name']), get_calendar_link($calendar['cid'])); 1490 add_breadcrumb("$day $monthnames[$month] $year", get_calendar_link($calendar['cid'], $year, $month, $day)); 1491 1492 $plugins->run_hooks("calendar_dayview_start"); 1493 1494 // Load Birthdays for this day 1495 if($calendar['showbirthdays']) 1496 { 1497 $birthdays = get_birthdays($month, $day); 1498 $bdayhidden = 0; 1499 if(is_array($birthdays)) 1500 { 1501 foreach($birthdays as $birthday) 1502 { 1503 if($birthday['birthdayprivacy'] == 'all') 1504 { 1505 $bday = explode("-", $birthday['birthday']); 1506 if($bday[2] && $bday[2] < $year) 1507 { 1508 $age = $year - $bday[2]; 1509 $age = " (".$lang->sprintf($lang->years_old, $age).")"; 1510 } 1511 else 1512 { 1513 $age = ''; 1514 } 1515 1516 $birthday['username'] = format_name($birthday['username'], $birthday['usergroup'], $birthday['displaygroup']); 1517 $birthday['profilelink'] = build_profile_link($birthday['username'], $birthday['uid']); 1518 eval("\$birthday_list .= \"".$templates->get("calendar_dayview_birthdays_bday", 1, 0)."\";"); 1519 $comma = $lang->comma; 1520 } 1521 else 1522 { 1523 ++$bdayhidden; 1524 } 1525 } 1526 } 1527 if($bdayhidden > 0) 1528 { 1529 if($birthday_list) 1530 { 1531 $birthday_list .= " - "; 1532 } 1533 $birthday_list .= "{$bdayhidden} {$lang->birthdayhidden}"; 1534 } 1535 if($birthday_list) 1536 { 1537 $bdaydate = my_date($mybb->settings['dateformat'], gmmktime(0, 0, 0, $month, $day, $year), 0, 0); 1538 $lang->birthdays_on_day = $lang->sprintf($lang->birthdays_on_day, $bdaydate); 1539 eval("\$birthdays = \"".$templates->get("calendar_dayview_birthdays", 1, 0)."\";"); 1540 } 1541 } 1542 1543 // So now we fetch events for this month 1544 $start_timestamp = gmmktime(0, 0, 0, $month, $day, $year); 1545 $end_timestamp = gmmktime(23, 59, 59, $month, $day, $year); 1546 1547 $events_cache = get_events($calendar['cid'], $start_timestamp, $end_timestamp, $calendar_permissions['canmoderateevents']); 1548 1549 if(is_array($events_cache["$day-$month-$year"])) 1550 { 1551 foreach($events_cache["$day-$month-$year"] as $event) 1552 { 1553 $event['name'] = htmlspecialchars_uni($event['name']); 1554 1555 $event_parser_options = array( 1556 "allow_html" => $calendar['allowhtml'], 1557 "allow_mycode" => $calendar['allowmycode'], 1558 "allow_smilies" => $calendar['allowsmilies'], 1559 "allow_imgcode" => $calendar['allowimgcode'], 1560 "allow_videocode" => $calendar['allowvideocode'] 1561 ); 1562 1563 $event['description'] = $parser->parse_message($event['description'], $event_parser_options); 1564 1565 // Get the usergroup 1566 if($event['username']) 1567 { 1568 if(!$event['displaygroup']) 1569 { 1570 $event['displaygroup'] = $event['usergroup']; 1571 } 1572 $user_usergroup = $groupscache[$event['displaygroup']]; 1573 } 1574 else 1575 { 1576 $user_usergroup = $groupscache[1]; 1577 } 1578 1579 if(!is_array($titles_cache)) 1580 { 1581 // Get user titles (i guess we should improve this, maybe in version3. 1582 $query = $db->simple_select("usertitles", "*", "", array('order_by' => 'posts', 'order_dir' => 'DESC')); 1583 while($usertitle = $db->fetch_array($query)) 1584 { 1585 $titles_cache[$usertitle['posts']] = $usertitle; 1586 } 1587 unset($usertitle); 1588 } 1589 1590 // Event made by registered user 1591 if($event['uid'] > 0 && $event['username']) 1592 { 1593 $event['profilelink'] = build_profile_link(format_name($event['username'], $event['usergroup'], $event['displaygroup']), $event['uid']); 1594 1595 if(trim($event['usertitle']) != "") 1596 { 1597 $hascustomtitle = 1; 1598 } 1599 1600 if($user_usergroup['usertitle'] != "" && !$hascustomtitle) 1601 { 1602 $event['usertitle'] = $user_usergroup['usertitle']; 1603 } 1604 elseif(is_array($titles_cache) && !$user_usergroup['usertitle']) 1605 { 1606 reset($titles_cache); 1607 foreach($titles_cache as $key => $title) 1608 { 1609 if($event['postnum'] >= $key) 1610 { 1611 if(!$hascustomtitle) 1612 { 1613 $event['usertitle'] = $title['title']; 1614 } 1615 $event['stars'] = $title['stars']; 1616 $event['starimage'] = $title['starimage']; 1617 break; 1618 } 1619 } 1620 } 1621 1622 if($user_usergroup['stars']) 1623 { 1624 $event['stars'] = $user_usergroup['stars']; 1625 } 1626 1627 if(!$event['starimage']) 1628 { 1629 $event['starimage'] = $user_usergroup['starimage']; 1630 } 1631 1632 for($i = 0; $i < $post['stars']; ++$i) 1633 { 1634 $event['userstars'] .= "<img src=\"".$event['starimage']."\" border=\"0\" alt=\"*\" />"; 1635 } 1636 1637 if($event['userstars'] && $event['starimage'] && $event['stars']) 1638 { 1639 $event['userstars'] .= "<br />"; 1640 } 1641 } 1642 // Created by a guest or an unknown user 1643 else 1644 { 1645 if(!$event['username']) 1646 { 1647 $event['username'] = $lang->guest; 1648 } 1649 1650 $event['username'] = $event['username']; 1651 $event['profilelink'] = format_name($event['username'], 1); 1652 1653 if($user_usergroup['usertitle']) 1654 { 1655 $event['usertitle'] = $user_usergroup['usertitle']; 1656 } 1657 else 1658 { 1659 $event['usertitle'] = $lang->guest; 1660 } 1661 } 1662 1663 if($event['ignoretimezone'] == 0) 1664 { 1665 $offset = $event['timezone']; 1666 } 1667 else 1668 { 1669 $offset = $mybb->user['timezone']; 1670 } 1671 1672 $event['starttime_user'] = $event['starttime']+$offset*3600; 1673 1674 // Events over more than one day 1675 $time_period = ''; 1676 if($event['endtime'] > 0 && $event['endtime'] != $event['starttime']) 1677 { 1678 $event['endtime_user'] = $event['endtime']+$offset*3600; 1679 $start_day = gmmktime(0, 0, 0, gmdate("n", $event['starttime_user']), gmdate("j", $event['starttime_user']), gmdate("Y", $event['starttime_user'])); 1680 $end_day = gmmktime(0, 0, 0, gmdate("n", $event['endtime_user']), gmdate("j", $event['endtime_user']), gmdate("Y", $event['endtime_user'])); 1681 $start_time = gmdate("Hi", $event['starttime_user']); 1682 $end_time = gmdate("Hi", $event['endtime_user']); 1683 1684 // Event only runs over one day 1685 if($start_day == $end_day && $event['repeats']['repeats'] == 0) 1686 { 1687 $time_period = gmdate($mybb->settings['dateformat'], $event['starttime_user']); 1688 // Event runs all day 1689 if($start_time != 0000 && $end_time != 2359) 1690 { 1691 $time_period .= $lang->comma.gmdate($mybb->settings['timeformat'], $event['starttime_user'])." - ".gmdate($mybb->settings['timeformat'], $event['endtime_user']); 1692 } 1693 else 1694 { 1695 $time_period .= $lang->comma.$lang->all_day; 1696 } 1697 } 1698 else 1699 { 1700 $time_period = gmdate($mybb->settings['dateformat'], $event['starttime_user']).", ".gmdate($mybb->settings['timeformat'], $event['starttime_user']); 1701 $time_period .= " - "; 1702 $time_period .= gmdate($mybb->settings['dateformat'], $event['endtime_user']).", ".gmdate($mybb->settings['timeformat'], $event['endtime_user']); 1703 } 1704 } 1705 else 1706 { 1707 $time_period = gmdate($mybb->settings['dateformat'], $event['starttime_user']); 1708 } 1709 1710 $repeats = fetch_friendly_repetition($event); 1711 if($repeats) 1712 { 1713 $repeats = "<span class=\"smalltext\"><strong>{$lang->repeats}</strong><br />{$repeats}</span>"; 1714 } 1715 1716 $edit_event = $moderator_options = $event_class = ""; 1717 if($calendar_permissions['canmoderateevents'] == 1 || ($mybb->user['uid'] > 0 && $mybb->user['uid'] == $event['uid'])) 1718 { 1719 eval("\$edit_event = \"".$templates->get("calendar_event_editbutton")."\";"); 1720 if($calendar_permissions['canmoderateevents'] == 1) 1721 { 1722 if($event['visible'] == 1) 1723 { 1724 $approve = $lang->unapprove_event; 1725 $approve_value = "unapprove"; 1726 } 1727 else 1728 { 1729 $approve = $lang->approve_event; 1730 $approve_value = "approve"; 1731 } 1732 eval("\$moderator_options = \"".$templates->get("calendar_event_modoptions")."\";"); 1733 } 1734 if($event['visible'] == 0) 1735 { 1736 $event_class = " trow_shaded"; 1737 } 1738 } 1739 eval("\$events .= \"".$templates->get("calendar_dayview_event")."\";"); 1740 } 1741 } 1742 1743 $yearsel = ''; 1744 for($i = my_date("Y"); $i < (my_date("Y") + 5); ++$i) 1745 { 1746 $yearsel .= "<option value=\"$i\">$i</option>\n"; 1747 } 1748 1749 if($mybb->usergroup['canaddevents'] == 1) 1750 { 1751 eval("\$addevent = \"".$templates->get("calendar_addeventlink")."\";"); 1752 } 1753 1754 if(!$events) 1755 { 1756 $lang->no_events = $lang->sprintf($lang->no_events, $calendar['cid'], $day, $month, $year); 1757 eval("\$events = \"".$templates->get("calendar_dayview_noevents")."\";"); 1758 } 1759 1760 // Now output the page 1761 $plugins->run_hooks("calendar_dayview_end"); 1762 1763 eval("\$day_view = \"".$templates->get("calendar_dayview")."\";"); 1764 output_page($day_view); 1765 } 1766 1767 // View all events for a specific week 1768 if($mybb->input['action'] == "weekview") 1769 { 1770 // Showing a particular calendar 1771 if($mybb->input['calendar']) 1772 { 1773 $query = $db->simple_select("calendars", "*", "cid='".intval($mybb->input['calendar'])."'"); 1774 $calendar = $db->fetch_array($query); 1775 } 1776 // Showing the default calendar 1777 else 1778 { 1779 $query = $db->simple_select("calendars", "*", "disporder='1'"); 1780 $calendar = $db->fetch_array($query); 1781 } 1782 1783 // Invalid calendar? 1784 if(!$calendar['cid']) 1785 { 1786 error($lang->invalid_calendar); 1787 } 1788 1789 // Do we have permission to view this calendar? 1790 $calendar_permissions = get_calendar_permissions($calendar['cid']); 1791 if($calendar_permissions['canviewcalendar'] != 1) 1792 { 1793 error_no_permission(); 1794 } 1795 1796 $weekdays = fetch_weekday_structure($calendar['startofweek']); 1797 1798 $yearsel = ''; 1799 for($i = my_date("Y"); $i < (my_date("Y") + 5); ++$i) 1800 { 1801 $yearsel .= "<option value=\"$i\">$i</option>\n"; 1802 } 1803 1804 // No incoming week, show THIS week 1805 if(!$mybb->input['week']) 1806 { 1807 list($day, $month, $year) = explode("-", my_date("j-n-Y")); 1808 $php_weekday = gmdate("w", gmmktime(0, 0, 0, $month, $day, $year)); 1809 $my_weekday = array_search($php_weekday, $weekdays); 1810 // So now we have the start day of this week to show 1811 $start_day = $day-$my_weekday; 1812 $mybb->input['week'] = gmmktime(0, 0, 0, $month, $start_day, $year); 1813 } 1814 else 1815 { 1816 $mybb->input['week'] = (int)str_replace("n", "-", $mybb->input['week']); 1817 } 1818 1819 // This is where we've come from and where we're headed 1820 $week_from = explode("-", gmdate("j-n-Y", $mybb->input['week'])); 1821 $week_from_one = $week_from[1]; 1822 $friendly_week_from = gmdate($mybb->settings['dateformat'], $mybb->input['week']); 1823 $week_to_stamp = gmmktime(0, 0, 0, $week_from[1], $week_from[0]+6, $week_from[2]); 1824 $week_to = explode("-", gmdate("j-n-Y-t", $week_to_stamp)); 1825 $friendly_week_to = gmdate($mybb->settings['dateformat'], $week_to_stamp); 1826 1827 add_breadcrumb(htmlspecialchars_uni($calendar['name']), get_calendar_link($calendar['cid'])); 1828 add_breadcrumb("{$monthnames[$week_from[1]]} {$week_from[2]}", get_calendar_link($calendar['cid'], $week_from[2], $week_from[1])); 1829 add_breadcrumb($lang->weekly_overview); 1830 1831 // Establish if we have a month ending in this week 1832 if($week_from[1] != $week_to[1]) 1833 { 1834 $different_months = true; 1835 $week_months = array(array($week_from[1], $week_from[2]), array($week_to[1], $week_to[2])); 1836 $bday_months = array($week_from[1], $week_to[1]); 1837 } 1838 else 1839 { 1840 $week_months = array(array($week_from[1], $week_from[2])); 1841 $bday_months = array($week_from[1]); 1842 } 1843 1844 // Load Birthdays for this month 1845 if($calendar['showbirthdays'] == 1) 1846 { 1847 $birthdays = get_birthdays($bday_months); 1848 } 1849 1850 // We load events for the entire month date range - for our mini calendars too 1851 $events_from = gmmktime(0, 0, 0, $week_from[1], 1, $week_from[2]); 1852 $events_to = gmmktime(0, 0, 0, $week_to[1], $week_to[3], $week_to[2]); 1853 1854 $events_cache = get_events($calendar['cid'], $events_from, $events_to, $calendar_permissions['canmoderateevents']); 1855 1856 $today = my_date("dnY"); 1857 1858 $next_week = $mybb->input['week'] + 604800; 1859 $next_link = get_calendar_week_link($calendar['cid'], $next_week); 1860 $prev_week = $mybb->input['week'] - 604800; 1861 $prev_link = get_calendar_week_link($calendar['cid'], $prev_week); 1862 1863 $weekday_date = $mybb->input['week']; 1864 1865 while($weekday_date <= $week_to_stamp) 1866 { 1867 $weekday = gmdate("w", $weekday_date); 1868 $weekday_name = fetch_weekday_name($weekday); 1869 $weekday_month = gmdate("n", $weekday_date); 1870 $weekday_year = gmdate("Y", $weekday_date); 1871 $weekday_day = gmdate("j", $weekday_date); 1872 1873 // Special shading for today 1874 $day_shaded = ''; 1875 if(gmdate("dnY", $weekday_date) == $today) 1876 { 1877 $day_shaded = ' trow_shaded'; 1878 } 1879 1880 // Any events on this specific day? 1881 if(is_array($events_cache) && array_key_exists("{$weekday_day}-{$weekday_month}-{$weekday_year}", $events_cache)) 1882 { 1883 foreach($events_cache["$weekday_day-$weekday_month-$weekday_year"] as $event) 1884 { 1885 $event['eventlink'] = get_event_link($event['eid']); 1886 $event['name'] = htmlspecialchars_uni($event['name']); 1887 $event['fullname'] = $event['name']; 1888 if(my_strlen($event['name']) > 50) 1889 { 1890 $event['name'] = my_substr($event['name'], 0, 50) . "..."; 1891 } 1892 // Events over more than one day 1893 $time_period = ''; 1894 if($event['endtime'] > 0 && $event['endtime'] != $event['starttime']) 1895 { 1896 $start_day = gmmktime(0, 0, 0, gmdate("n", $event['starttime_user']), gmdate("j", $event['starttime_user']), gmdate("Y", $event['starttime_user'])); 1897 $end_day = gmmktime(0, 0, 0, gmdate("n", $event['endtime_user']), gmdate("j", $event['endtime_user']), gmdate("Y", $event['endtime_user'])); 1898 $start_time = gmdate("Hi", $event['starttime_user']); 1899 $end_time = gmdate("Hi", $event['endtime_user']); 1900 // Event only runs over one day 1901 if($start_day == $end_day || $event['repeats'] > 0) 1902 { 1903 // Event runs all day 1904 if($start_time == 0000 && $end_time == 2359) 1905 { 1906 $time_period = $lang->all_day; 1907 } 1908 else 1909 { 1910 $time_period = gmdate($mybb->settings['timeformat'], $event['starttime_user'])." - ".gmdate($mybb->settings['timeformat'], $event['endtime_user']); 1911 } 1912 } 1913 // Event starts on this day 1914 else if($start_day == $weekday_date) 1915 { 1916 // Event runs all day 1917 if($start_time == 0000) 1918 { 1919 $time_period = $lang->all_day; 1920 } 1921 else 1922 { 1923 $time_period = $lang->starts.gmdate($mybb->settings['timeformat'], $event['starttime_user']); 1924 } 1925 } 1926 // Event finishes on this day 1927 else if($end_day == $weekday_date) 1928 { 1929 // Event runs all day 1930 if($end_time == 2359) 1931 { 1932 $time_period = $lang->all_day; 1933 } 1934 else 1935 { 1936 $time_period = $lang->finishes.gmdate($mybb->settings['timeformat'], $event['endtime_user']); 1937 } 1938 } 1939 // Event is in the middle 1940 else 1941 { 1942 $time_period = $lang->all_day; 1943 } 1944 } 1945 $event_time = ''; 1946 if($time_period) 1947 { 1948 $event_time = "<span class=\"smalltext\"> ({$time_period})</span>"; 1949 } 1950 if($event['private'] == 1) 1951 { 1952 $event_class = " private_event"; 1953 } 1954 else 1955 { 1956 $event_class = " public_event"; 1957 } 1958 if($event['visible'] == 0) 1959 { 1960 $event_class .= " trow_shaded"; 1961 } 1962 eval("\$day_events .= \"".$templates->get("calendar_weekview_day_event")."\";"); 1963 } 1964 } 1965 1966 // Birthdays on this day? 1967 $day_birthdays = ""; 1968 if($calendar['showbirthdays'] && is_array($birthdays) && array_key_exists("{$weekday_day}-{$weekday_month}", $birthdays)) 1969 { 1970 $bday_count = count($birthdays["$weekday_day-$weekday_month"]); 1971 if($bday_count > 1) 1972 { 1973 $day_birthdays = "<a href=\"".get_calendar_link($calendar['cid'], $weekday_year, $weekday_month, $weekday_day)."\">{$bday_count} {$lang->birthdays}</a><br />\n"; 1974 } 1975 else 1976 { 1977 $day_birthdays = "<a href=\"".get_calendar_link($calendar['cid'], $weekday_year, $weekday_month, $weekday_day)."\">1 {$lang->birthday}</a><br />\n"; 1978 } 1979 } 1980 1981 $day_link = get_calendar_link($calendar['cid'], $weekday_year, $weekday_month, $weekday_day); 1982 eval("\$day_bits[$weekday_month] .= \"".$templates->get("calendar_weekview_day")."\";"); 1983 $day_events = $day_birthdays = ""; 1984 $weekday_date = gmmktime(0, 0, 0, $weekday_month, $weekday_day+1, $weekday_year); 1985 } 1986 1987 // Now we build our month headers 1988 foreach($week_months as $month) 1989 { 1990 $weekday_month = $monthnames[$month[0]]; 1991 $weekday_year = $month[1]; 1992 1993 // Fetch mini calendar for each month in this week 1994 $mini_calendars .= build_mini_calendar($calendar, $month[0], $weekday_year, $events_cache)."<br />"; 1995 1996 // Fetch out the days for this month 1997 $days = $day_bits[$month[0]]; 1998 1999 eval("\$weekday_bits .= \"".$templates->get("calendar_weekview_month")."\";"); 2000 } 2001 2002 if($mybb->usergroup['canaddevents'] == 1) 2003 { 2004 eval("\$addevent = \"".$templates->get("calendar_addeventlink")."\";"); 2005 } 2006 2007 // Now output the page 2008 $plugins->run_hooks("calendar_weekview_end"); 2009 2010 eval("\$weekview = \"".$templates->get("calendar_weekview")."\";"); 2011 output_page($weekview); 2012 } 2013 2014 // View yearly calendar 2015 if($mybb->input['action'] == "yearview") 2016 { 2017 } 2018 2019 // Showing a calendar 2020 if(!$mybb->input['action']) 2021 { 2022 // Showing a particular calendar 2023 if($mybb->input['calendar']) 2024 { 2025 $query = $db->simple_select("calendars", "*", "cid='".intval($mybb->input['calendar'])."'"); 2026 $calendar = $db->fetch_array($query); 2027 } 2028 // Showing the default calendar 2029 else 2030 { 2031 $query = $db->simple_select("calendars", "*", "", array('order_by' => 'disporder', 'limit' => 1)); 2032 $calendar = $db->fetch_array($query); 2033 } 2034 2035 // Invalid calendar? 2036 if(!$calendar['cid']) 2037 { 2038 error($lang->invalid_calendar); 2039 } 2040 2041 // Do we have permission to view this calendar? 2042 $calendar_permissions = get_calendar_permissions($calendar['cid']); 2043 2044 if($calendar_permissions['canviewcalendar'] != 1) 2045 { 2046 error_no_permission(); 2047 } 2048 2049 // Incoming month/year? 2050 if($mybb->input['year'] && $mybb->input['year'] <= my_date("Y")+5) 2051 { 2052 $year = intval($mybb->input['year']); 2053 } 2054 else 2055 { 2056 $year = my_date("Y"); 2057 } 2058 2059 // Then the month 2060 if($mybb->input['month'] >=1 && $mybb->input['month'] <= 12) 2061 { 2062 $month = intval($mybb->input['month']); 2063 } 2064 else 2065 { 2066 $month = my_date("n"); 2067 } 2068 2069 add_breadcrumb(htmlspecialchars_uni($calendar['name']), get_calendar_link($calendar['cid'])); 2070 add_breadcrumb("$monthnames[$month] $year", get_calendar_link($calendar['cid'], $year, $month)); 2071 2072 $next_month = get_next_month($month, $year); 2073 $prev_month = get_prev_month($month, $year); 2074 2075 $prev_link = get_calendar_link($calendar['cid'], $prev_month['year'], $prev_month['month']); 2076 $next_link = get_calendar_link($calendar['cid'], $next_month['year'], $next_month['month']); 2077 2078 // Start constructing the calendar 2079 2080 $weekdays = fetch_weekday_structure($calendar['startofweek']); 2081 2082 $month_start_weekday = gmdate("w", gmmktime(0, 0, 0, $month, $calendar['startofweek']+1, $year)); 2083 2084 // This is if we have days in the previous month to show 2085 if($month_start_weekday != $weekdays[0] || $calendar['startofweek'] != 0) 2086 { 2087 $day = gmdate("t", gmmktime(0, 0, 0, $prev_month['month'], 1, $prev_month['year'])); 2088 $day -= array_search(($month_start_weekday), $weekdays); 2089 $day += $calendar['startofweek']+1; 2090 $calendar_month = $prev_month['month']; 2091 $calendar_year = $prev_month['year']; 2092 } 2093 else 2094 { 2095 $day = $calendar['startofweek']+1; 2096 $calendar_month = $month; 2097 $calendar_year = $year; 2098 } 2099 2100 $prev_month_days = gmdate("t", gmmktime(0, 0, 0, $prev_month['month'], 1, $prev_month['year'])); 2101 2102 // So now we fetch events for this month (nb, cache events for past month, current month and next month for mini calendars too) 2103 $start_timestamp = gmmktime(0, 0, 0, $prev_month['month'], $day, $prev_month['year']); 2104 $num_days = gmdate("t", gmmktime(0, 0, 0, $next_month['month'], 1, $next_month['year'])); 2105 $end_timestamp = gmmktime(23, 59, 59, $next_month['month'], $num_days, $next_month['year']); 2106 2107 $num_days = gmdate("t", gmmktime(0, 0, 0, $month, 1, $year)); 2108 2109 if($day > 31 && in_array($next_month['month'], array(4, 6, 11, 9))) 2110 { 2111 // If we're a day over a 30 day month, gather the events from a week before too. 2112 // Otherwise it will start on events for the 2nd - not the 'start' date for the month. 2113 $start_timestamp -= (86400 * 7); 2114 } 2115 2116 $events_cache = get_events($calendar['cid'], $start_timestamp, $end_timestamp, $calendar_permissions['canmoderateevents']); 2117 2118 // Fetch birthdays 2119 if($calendar['showbirthdays']) 2120 { 2121 $bday_months = array($month, $prev_month['month'], $next_month['month']); 2122 $birthdays = get_birthdays($bday_months); 2123 } 2124 2125 $today = my_date("dnY"); 2126 2127 // Build weekday headers 2128 foreach($weekdays as $weekday) 2129 { 2130 $weekday_name = fetch_weekday_name($weekday); 2131 eval("\$weekday_headers .= \"".$templates->get("calendar_weekdayheader")."\";"); 2132 } 2133 2134 // Fix offset for Start Of Week being Saturday 2135 if($calendar_month == $prev_month['month'] && $calendar['startofweek'] > 0) 2136 { 2137 $day -= 7; 2138 2139 // Lets make sure we don't have a whole extra column for the last month 2140 if($prev_month_days-7 >= ($day-1)) 2141 { 2142 $day += 7; 2143 } 2144 } 2145 2146 for($row = 0; $row < 6; ++$row) // Iterate weeks (each week gets a row) 2147 { 2148 foreach($weekdays as $weekday_id => $weekday) 2149 { 2150 // Current month always starts on 1st row 2151 if($row == 0 && $day == $calendar['startofweek']+1) 2152 { 2153 $in_month = 1; 2154 $calendar_month = $month; 2155 $calendar_year = $year; 2156 } 2157 else if($calendar_month == $prev_month['month'] && $day > $prev_month_days) 2158 { 2159 $day = 1; 2160 $in_month = 1; 2161 $calendar_month = $month; 2162 $calendar_year = $year; 2163 } 2164 else if($day > $num_days && $calendar_month != $prev_month['month']) 2165 { 2166 $in_month = 0; 2167 $calendar_month = $next_month['month']; 2168 $calendar_year = $next_month['year']; 2169 $day = 1; 2170 if($calendar_month == $month) 2171 { 2172 $in_month = 1; 2173 } 2174 } 2175 2176 if($weekday_id == 0) 2177 { 2178 $week_stamp = gmmktime(0, 0, 0, $calendar_month, $day, $calendar_year); 2179 $week_link = get_calendar_week_link($calendar['cid'], $week_stamp); 2180 } 2181 2182 if($weekday_id == 0 && $calendar_month == $next_month['month']) 2183 { 2184 break; 2185 } 2186 2187 // Any events on this specific day? 2188 if(is_array($events_cache) && array_key_exists("{$day}-{$calendar_month}-{$calendar_year}", $events_cache)) 2189 { 2190 $total_events = count($events_cache["$day-$calendar_month-$calendar_year"]); 2191 if($total_events > $calendar['eventlimit'] && $calendar['eventlimit'] != 0) 2192 { 2193 if($total_events > 1) 2194 { 2195 $day_events = "<div style=\"margin-bottom: 4px;\"><a href=\"".get_calendar_link($calendar['cid'], $calendar_year, $calendar_month, $day)."\" class=\"smalltext\">{$total_events} {$lang->events}</a></div>\n"; 2196 } 2197 else 2198 { 2199 $day_events = "<div style=\"margin-bottom: 4px;\"><a href=\"".get_calendar_link($calendar['cid'], $calendar_year, $calendar_month, $day)."\" class=\"smalltext\">1 {$lang->event}</a></div>\n"; 2200 } 2201 } 2202 else 2203 { 2204 foreach($events_cache["$day-$calendar_month-$calendar_year"] as $event) 2205 { 2206 $event['eventlink'] = get_event_link($event['eid']); 2207 $event['fullname'] = htmlspecialchars_uni($event['name']); 2208 if(my_strlen($event['name']) > 15) 2209 { 2210 $event['name'] = my_substr($event['name'], 0, 15) . "..."; 2211 } 2212 $event['name'] = htmlspecialchars_uni($event['name']); 2213 if($event['private'] == 1) 2214 { 2215 $event_class = " private_event"; 2216 } 2217 else 2218 { 2219 $event_class = " public_event"; 2220 } 2221 if($event['visible'] == 0) 2222 { 2223 $event_class .= " trow_shaded"; 2224 } 2225 eval("\$day_events .= \"".$templates->get("calendar_eventbit")."\";"); 2226 } 2227 } 2228 } 2229 2230 // Birthdays on this day? 2231 $day_birthdays = ""; 2232 if($calendar['showbirthdays'] && is_array($birthdays) && array_key_exists("$day-$calendar_month", $birthdays)) 2233 { 2234 $bday_count = count($birthdays["$day-$calendar_month"]); 2235 if($bday_count > 1) 2236 { 2237 $day_birthdays = "<div style=\"margin-bottom: 4px;\"><a href=\"".get_calendar_link($calendar['cid'], $calendar_year, $calendar_month, $day)."\" class=\"smalltext\">{$bday_count} {$lang->birthdays}</a></div>\n"; 2238 } 2239 else 2240 { 2241 $day_birthdays = "<div style=\"margin-bottom: 4px;\"><a href=\"".get_calendar_link($calendar['cid'], $calendar_year, $calendar_month, $day)."\" class=\"smalltext\">1 {$lang->birthday}</a></div>\n"; 2242 } 2243 } 2244 2245 $day_link = get_calendar_link($calendar['cid'], $calendar_year, $calendar_month, $day); 2246 2247 // Is the current day 2248 if($day.$calendar_month.$year == $today && $month == $calendar_month) 2249 { 2250 $day_class = "trow_sep"; 2251 } 2252 // Not in this month 2253 else if($in_month == 0) 2254 { 2255 $day_class = "trow1"; 2256 } 2257 // Just a normal day in this month 2258 else 2259 { 2260 $day_class = "trow2"; 2261 } 2262 eval("\$day_bits .= \"".$templates->get("calendar_weekrow_day")."\";"); 2263 $day_birthdays = $day_events = ""; 2264 ++$day; 2265 } 2266 if($day_bits) 2267 { 2268 eval("\$calendar_rows .= \"".$templates->get("calendar_weekrow")."\";"); 2269 } 2270 $day_bits = ""; 2271 } 2272 2273 $yearsel = ''; 2274 for($i = my_date("Y"); $i < (my_date("Y") + 5); ++$i) 2275 { 2276 $yearsel .= "<option value=\"$i\">$i</option>\n"; 2277 } 2278 2279 if($mybb->usergroup['canaddevents'] == 1) 2280 { 2281 eval("\$addevent = \"".$templates->get("calendar_addeventlink")."\";"); 2282 } 2283 2284 $plugins->run_hooks("calendar_end"); 2285 2286 eval("\$calendar = \"".$templates->get("calendar")."\";"); 2287 output_page($calendar); 2288 } 2289 ?>
title
Description
Body
title
Description
Body
title
Description
Body
title
Body
| Generated: Sun Jan 1 10:49:49 2012 | Cross-referenced by PHPXref 0.7.1 |