[ Index ]

PHP Cross Reference of MyBB 1.8.40

title

Body

[close]

/ -> calendar.php (source)

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


2005 - 2021 © MyBB.de | Alle Rechte vorbehalten! | Sponsor: netcup Cross-referenced by PHPXref