[ Index ]

PHP Cross Reference of MyBB 1.6.5

title

Body

[close]

/ -> calendar.php (source)

   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  ?>


Generated: Sun Dec 11 14:16:27 2011 Cross-referenced by PHPXref 0.7.1