PageRenderTime 65ms CodeModel.GetById 25ms RepoModel.GetById 1ms app.codeStats 0ms

/calendar.php

https://bitbucket.org/KamranMackey/mybb
PHP | 2293 lines | 1901 code | 254 blank | 138 comment | 468 complexity | 0b0829daa7f02c9932ca8dfa778368a2 MD5 | raw file
Possible License(s): LGPL-2.1

Large files files are truncated, but you can click here to view the full file

  1. <?php
  2. /**
  3. * MyBB 1.6
  4. * Copyright 2010 MyBB Group, All Rights Reserved
  5. *
  6. * Website: http://mybb.com
  7. * License: http://mybb.com/about/license
  8. *
  9. * $Id$
  10. */
  11. define("IN_MYBB", 1);
  12. define('THIS_SCRIPT', 'calendar.php');
  13. $templatelist = "calendar_weekdayheader,calendar_weekrow_day,calendar_weekrow,calendar_eventbit_public,calendar_eventbit_private,calendar";
  14. $templatelist .= ",calendar_weekview_day,calendar_weekview_day_event,calendar_mini_weekdayheader,calendar_mini_weekrow_day,calendar_mini_weekrow,calendar_mini,calendar_weekview_month,calendar_weekview,calendar_eventbit,calendar_addeventlink";
  15. $templatelist .= ",calendar_event_editbutton,calendar_event_modoptions,calendar_event,calendar_dayview_event,calendar_dayview,codebuttons,smilieinsert,calendar_editevent,calendar_dayview_birthdays_bday,calendar_dayview_birthdays,calendar_dayview_noevents,calendar_dayview_noevents";
  16. require_once "./global.php";
  17. require_once MYBB_ROOT."inc/functions_calendar.php";
  18. require_once MYBB_ROOT."inc/functions_post.php";
  19. require_once MYBB_ROOT."inc/class_parser.php";
  20. $parser = new postParser;
  21. // Load global language phrases
  22. $lang->load("calendar");
  23. if($mybb->settings['enablecalendar'] == 0)
  24. {
  25. error($lang->calendar_disabled);
  26. }
  27. if($mybb->usergroup['canviewcalendar'] == 0)
  28. {
  29. error_no_permission();
  30. }
  31. $monthnames = array(
  32. "offset",
  33. $lang->alt_month_1,
  34. $lang->alt_month_2,
  35. $lang->alt_month_3,
  36. $lang->alt_month_4,
  37. $lang->alt_month_5,
  38. $lang->alt_month_6,
  39. $lang->alt_month_7,
  40. $lang->alt_month_8,
  41. $lang->alt_month_9,
  42. $lang->alt_month_10,
  43. $lang->alt_month_11,
  44. $lang->alt_month_12
  45. );
  46. // Make navigation
  47. add_breadcrumb($lang->nav_calendar, "calendar.php");
  48. $calendar_jump = build_calendar_jump($mybb->input['calendar']);
  49. // Add an event
  50. if($mybb->input['action'] == "do_addevent" && $mybb->request_method == "post")
  51. {
  52. $query = $db->simple_select("calendars", "*", "cid='".intval($mybb->input['calendar'])."'");
  53. $calendar = $db->fetch_array($query);
  54. // Invalid calendar?
  55. if(!$calendar['cid'])
  56. {
  57. error($lang->invalid_calendar);
  58. }
  59. // Do we have permission to view this calendar or post events?
  60. $calendar_permissions = get_calendar_permissions($calendar['cid']);
  61. if($calendar_permissions['canviewcalendar'] != 1 || $calendar_permissions['canaddevents'] != 1)
  62. {
  63. error_no_permission();
  64. }
  65. // Verify incoming POST request
  66. verify_post_check($mybb->input['my_post_key']);
  67. $plugins->run_hooks("calendar_do_addevent_start");
  68. // Set up event handler.
  69. require_once MYBB_ROOT."inc/datahandler.php";
  70. require_once MYBB_ROOT."inc/datahandlers/event.php";
  71. $eventhandler = new EventDataHandler("insert");
  72. // Prepare an array for the eventhandler.
  73. $event = array(
  74. "cid" => $calendar['cid'],
  75. "uid" => $mybb->user['uid'],
  76. "name" => $mybb->input['name'],
  77. "description" => $mybb->input['description'],
  78. "private" => $mybb->input['private'],
  79. "type" => $mybb->input['type']
  80. );
  81. // Now we add in our date/time info depending on the type of event
  82. if($mybb->input['type'] == "single")
  83. {
  84. $event['start_date'] = array(
  85. "day" => $mybb->input['single_day'],
  86. "month" => $mybb->input['single_month'],
  87. "year" => $mybb->input['single_year']
  88. );
  89. }
  90. else if($mybb->input['type'] == "ranged")
  91. {
  92. $event['start_date'] = array(
  93. "day" => $mybb->input['start_day'],
  94. "month" => $mybb->input['start_month'],
  95. "year" => $mybb->input['start_year'],
  96. "time" => $mybb->input['start_time']
  97. );
  98. $event['end_date'] = array(
  99. "day" => $mybb->input['end_day'],
  100. "month" => $mybb->input['end_month'],
  101. "year" => $mybb->input['end_year'],
  102. "time" => $mybb->input['end_time']
  103. );
  104. $event['timezone'] = intval($mybb->input['timezone']);
  105. $event['ignoretimezone'] = intval($mybb->input['ignoretimezone']);
  106. $repeats = array();
  107. switch($mybb->input['repeats'])
  108. {
  109. case 1:
  110. $repeats['repeats'] = 1;
  111. $repeats['days'] = $mybb->input['repeats_1_days'];
  112. break;
  113. case 2:
  114. $repeats['repeats'] = 2;
  115. break;
  116. case 3:
  117. $repeats['repeats'] = 3;
  118. $repeats['weeks'] = $mybb->input['repeats_3_weeks'];
  119. if(!is_array($mybb->input['repeats_3_days']))
  120. {
  121. $mybb->input['repeats_3_days'] = array();
  122. }
  123. ksort($mybb->input['repeats_3_days']);
  124. $days = array();
  125. foreach($mybb->input['repeats_3_days'] as $weekday => $value)
  126. {
  127. if($value != 1) continue;
  128. $days[] = $weekday;
  129. }
  130. $repeats['days'] = $days;
  131. break;
  132. case 4:
  133. $repeats['repeats'] = 4;
  134. if($mybb->input['repeats_4_type'] == 1)
  135. {
  136. $repeats['day'] = $mybb->input['repeats_4_day'];
  137. $repeats['months'] = $mybb->input['repeats_4_months'];
  138. }
  139. else
  140. {
  141. $repeats['months'] = $mybb->input['repeats_4_months2'];
  142. $repeats['occurance'] = $mybb->input['repeats_4_occurance'];
  143. $repeats['weekday'] = $mybb->input['repeats_4_weekday'];
  144. }
  145. break;
  146. case 5:
  147. $repeats['repeats'] = 5;
  148. if($mybb->input['repeats_5_type'] == 1)
  149. {
  150. $repeats['day'] = $mybb->input['repeats_5_day'];
  151. $repeats['month'] = $mybb->input['repeats_5_month'];
  152. $repeats['years'] = $mybb->input['repeats_5_years'];
  153. }
  154. else
  155. {
  156. $repeats['occurance'] = $mybb->input['repeats_5_occurance'];
  157. $repeats['weekday'] = $mybb->input['repeats_5_weekday'];
  158. $repeats['month'] = $mybb->input['repeats_5_month2'];
  159. $repeats['years'] = $mybb->input['repeats_5_years'];
  160. }
  161. break;
  162. default:
  163. $repeats['repeats'] = 0;
  164. }
  165. $event['repeats'] = $repeats;
  166. }
  167. $eventhandler->set_data($event);
  168. // Now let the eventhandler do all the hard work.
  169. if(!$eventhandler->validate_event())
  170. {
  171. $event_errors = $eventhandler->get_friendly_errors();
  172. $event_errors = inline_error($event_errors);
  173. $mybb->input['action'] = "addevent";
  174. }
  175. else
  176. {
  177. $details = $eventhandler->insert_event();
  178. $plugins->run_hooks("calendar_do_addevent_end");
  179. if($details['visible'] == 1)
  180. {
  181. redirect(get_event_link($details['eid']), $lang->redirect_eventadded);
  182. }
  183. else
  184. {
  185. redirect(get_calendar_link($event['cid']), $lang->redirect_eventadded_moderation);
  186. }
  187. }
  188. }
  189. if($mybb->input['action'] == "addevent")
  190. {
  191. $query = $db->simple_select("calendars", "*", "cid='".intval($mybb->input['calendar'])."'");
  192. $calendar = $db->fetch_array($query);
  193. // Invalid calendar?
  194. if(!$calendar['cid'])
  195. {
  196. error($lang->invalid_calendar);
  197. }
  198. // Do we have permission to view this calendar or post events?
  199. $calendar_permissions = get_calendar_permissions($calendar['cid']);
  200. if($calendar_permissions['canviewcalendar'] != 1 || $calendar_permissions['canaddevents'] != 1)
  201. {
  202. error_no_permission();
  203. }
  204. add_breadcrumb(htmlspecialchars_uni($calendar['name']), get_calendar_link($calendar['cid']));
  205. add_breadcrumb($lang->nav_addevent);
  206. $plugins->run_hooks("calendar_addevent_start");
  207. // If MyCode is on for this forum and the MyCode editor is enabled inthe Admin CP, draw the code buttons and smilie inserter.
  208. if($mybb->settings['bbcodeinserter'] != 0 && (!$mybb->user['uid'] || $mybb->user['showcodebuttons'] != 0) && $calendar['allowmycode'] == 1)
  209. {
  210. $codebuttons = build_mycode_inserter();
  211. if($calendar['allowsmilies'] == 1)
  212. {
  213. $smilieinserter = build_clickable_smilies();
  214. }
  215. }
  216. // Previous selections
  217. $name = $description = '';
  218. if(isset($mybb->input['name']))
  219. {
  220. $name = htmlspecialchars_uni($mybb->input['name']);
  221. }
  222. if(isset($mybb->input['description']))
  223. {
  224. $description = htmlspecialchars_uni($mybb->input['description']);
  225. }
  226. if($mybb->request_method == "post")
  227. {
  228. $single_day = $mybb->input['single_day'];
  229. $single_month[$mybb->input['single_month']] = " selected=\"selected\"";
  230. $single_year = $mybb->input['single_year'];
  231. $start_day = $mybb->input['start_day'];
  232. $start_month[$mybb->input['start_month']] = " selected=\"selected\"";
  233. $start_year = $mybb->input['start_year'];
  234. $start_time = htmlspecialchars_uni($mybb->input['start_time']);
  235. $end_day = $mybb->input['end_day'];
  236. $end_month[$mybb->input['end_month']] = " selected=\"selected\"";
  237. $end_year = $mybb->input['end_year'];
  238. $end_time = htmlspecialchars_uni($mybb->input['end_time']);
  239. if($mybb->input['type'] == "single")
  240. {
  241. $type_single = "checked=\"checked\"";
  242. $type = "single";
  243. }
  244. else
  245. {
  246. $type_ranged = "checked=\"checked\"";
  247. $type = "ranged";
  248. }
  249. if($mybb->input['repeats'])
  250. {
  251. $repeats_sel[$mybb->input['repeats']] = " selected=\"selected\"";
  252. }
  253. $repeats_1_days = intval($mybb->input['repeats_1_days']);
  254. $repeats_3_weeks = intval($mybb->input['repeats_3_weeks']);
  255. if(is_array($mybb->input['repeats_3_days']))
  256. {
  257. foreach($mybb->input['repeats_3_days'] as $day => $val)
  258. {
  259. if($val != 1)
  260. {
  261. continue;
  262. }
  263. $day = intval($day);
  264. $repeats_3_days[$day] = " checked=\"checked\"";
  265. }
  266. }
  267. if($mybb->input['repeats_4_type'] == 1)
  268. {
  269. $repeats_4_type[1] = "checked=\"checked\"";
  270. }
  271. else
  272. {
  273. $repeats_4_type[2] = "checked=\"checked\"";
  274. }
  275. $repeats_4_day = intval($mybb->input['repeats_4_day']);
  276. $repeats_4_months = intval($mybb->input['repeats_4_months']);
  277. $repeats_4_occurance[$mybb->input['repeats_4_occurance']] = "selected=\"selected\"";
  278. $repeats_4_weekday[$mybb->input['repeats_4_weekday']] = "selected=\"selected\"";
  279. $repeats_4_months2 = intval($mybb->input['repeats_4_months2']);
  280. if($mybb->input['repeats_5_type'] == 1)
  281. {
  282. $repeats_5_type[1] = "checked=\"checked\"";
  283. }
  284. else
  285. {
  286. $repeats_5_type[2] = "checked=\"checked\"";
  287. }
  288. $repeats_5_day = intval($mybb->input['repeats_5_day']);
  289. $repeats_5_month[$mybb->input['repeats_5_month']] = "selected=\"selected\"";
  290. $repeats_5_years = intval($mybb->input['repeats_5_years']);
  291. $repeats_5_occurance[$mybb->input['repeats_5_occurance']] = "selected=\"selected\"";
  292. $repeats_5_weekday[$mybb->input['repeats_5_weekday']] = "selected=\"selected\"";
  293. $repeats_5_month2[$mybb->input['repeats_5_month2']] = "selected=\"selected\"";
  294. $repeats_5_years2 = intval($mybb->input['repeats_5_years2']);
  295. $timezone = $mybb->input['timezone'];
  296. }
  297. else
  298. {
  299. if($mybb->input['day'])
  300. {
  301. $single_day = $start_day = $end_day = intval($mybb->input['day']);
  302. }
  303. else
  304. {
  305. $single_day = $start_day = $end_day = my_date("j");
  306. }
  307. if($mybb->input['month'])
  308. {
  309. $month = intval($mybb->input['month']);
  310. }
  311. else
  312. {
  313. $month = my_date("n");
  314. }
  315. $single_month[$month] = $start_month[$month] = $end_month[$month] = "selected=\"selected\"";
  316. if($mybb->input['year'])
  317. {
  318. $single_year = $start_year = $end_year = intval($mybb->input['year']);
  319. }
  320. else
  321. {
  322. $single_year = $start_year = $end_year = my_date("Y");
  323. }
  324. $start_time = $end_time = "";
  325. $type_single = "checked=\"checked\"";
  326. $type = "single";
  327. $repeats_1_days = 1;
  328. $repeats_3_weeks = 1;
  329. $repeats_4_type[1] = "checked=\"checked\"";
  330. $repeats_4_day = 1;
  331. $repeats_4_months = 1;
  332. $repeats_4_occurance[1] = "selected=\"selected\"";
  333. $repeats_4_weekday[0] = "selected=\"selected\"";
  334. $repeats_4_months2 = 1;
  335. $repeats_5_type[1] = "checked=\"checked\"";
  336. $repeats_5_day = 1;
  337. $repeats_5_month[1] = "selected=\"selected\"";
  338. $repeats_5_years = 1;
  339. $repeats_5_occurance[1] = "selected=\"selected\"";
  340. $repeats_5_weekday[0] = "selected=\"selected\"";
  341. $repeats_5_months2[1] = "selected=\"selected\"";
  342. $repeats_5_years2 = 1;
  343. $timezone = $mybb->user['timezone'];
  344. }
  345. // Construct option list for years
  346. for($i = my_date('Y'); $i < (my_date('Y') + 5); ++$i)
  347. {
  348. if($i == $single_year)
  349. {
  350. $single_years .= "<option value=\"{$i}\" selected=\"selected\">{$i}</option>\n";
  351. }
  352. else
  353. {
  354. $single_years .= "<option value=\"{$i}\">{$i}</option>\n";
  355. }
  356. if($i == $start_year)
  357. {
  358. $start_years .= "<option value=\"{$i}\" selected=\"selected\">{$i}</option>\n";
  359. }
  360. else
  361. {
  362. $start_years .= "<option value=\"{$i}\">{$i}</option>\n";
  363. }
  364. if($i == $end_year)
  365. {
  366. $end_years .= "<option value=\"{$i}\" selected=\"selected\">{$i}</option>\n";
  367. }
  368. else
  369. {
  370. $end_years .= "<option value=\"{$i}\">{$i}</option>\n";
  371. }
  372. }
  373. // Construct option list for days
  374. for($i = 1; $i <= 31; ++$i)
  375. {
  376. if($i == $single_day)
  377. {
  378. $single_days .= "<option value=\"{$i}\" selected=\"selected\">{$i}</option>\n";
  379. }
  380. else
  381. {
  382. $single_days .= "<option value=\"{$i}\">{$i}</option>\n";
  383. }
  384. if($i == $start_day)
  385. {
  386. $start_days .= "<option value=\"{$i}\" selected=\"selected\">{$i}</option>\n";
  387. }
  388. else
  389. {
  390. $start_days .= "<option value=\"{$i}\">{$i}</option>\n";
  391. }
  392. if($i == $end_day)
  393. {
  394. $end_days .= "<option value=\"{$i}\" selected=\"selected\">{$i}</option>\n";
  395. }
  396. else
  397. {
  398. $end_days .= "<option value=\"{$i}\">{$i}</option>\n";
  399. }
  400. }
  401. $timezones = build_timezone_select("timezone", $timezone);
  402. if($mybb->input['ignoretimezone'] == 1)
  403. {
  404. $ignore_timezone = "checked=\"checked\"";
  405. }
  406. if($mybb->input['private'] == 1)
  407. {
  408. $privatecheck = " checked=\"checked\"";
  409. }
  410. // Build calendar select
  411. $calendar_permissions = get_calendar_permissions();
  412. $query = $db->simple_select("calendars", "*", "", array("order_by" => "name", "order_dir" => "asc"));
  413. while($calendar_option = $db->fetch_array($query))
  414. {
  415. if($calendar_permissions[$calendar['cid']]['canviewcalendar'] == 1)
  416. {
  417. $calendar_option['name'] = htmlspecialchars_uni($calendar_option['name']);
  418. if($calendar_option['cid'] == $mybb->input['calendar'])
  419. {
  420. $calendar_select .= "<option value=\"{$calendar_option['cid']}\" selected=\"selected\">{$calendar_option['name']}</option>\n";
  421. }
  422. else
  423. {
  424. $calendar_select .= "<option value=\"{$calendar_option['cid']}\">{$calendar_option['name']}</option>\n";
  425. }
  426. }
  427. }
  428. $plugins->run_hooks("calendar_addevent_end");
  429. eval("\$addevent = \"".$templates->get("calendar_addevent")."\";");
  430. output_page($addevent);
  431. }
  432. // Edit an event
  433. if($mybb->input['action'] == "do_editevent" && $mybb->request_method == "post")
  434. {
  435. $query = $db->simple_select("events", "*", "eid='".intval($mybb->input['eid'])."'");
  436. $event = $db->fetch_array($query);
  437. if(!is_numeric($event['eid']))
  438. {
  439. error($lang->error_invalidevent);
  440. }
  441. $query = $db->simple_select("calendars", "*", "cid='{$event['cid']}'");
  442. $calendar = $db->fetch_array($query);
  443. // Invalid calendar?
  444. if(!$calendar['cid'])
  445. {
  446. error($lang->invalid_calendar);
  447. }
  448. // Do we have permission to view this calendar or post events?
  449. $calendar_permissions = get_calendar_permissions($calendar['cid']);
  450. if($calendar_permissions['canviewcalendar'] != 1 || $calendar_permissions['canaddevents'] != 1)
  451. {
  452. error_no_permission();
  453. }
  454. if(($event['uid'] != $mybb->user['uid'] || $mybb->user['uid'] == 0) && $calendar_permissions['canmoderateevents'] != 1)
  455. {
  456. error_no_permission();
  457. }
  458. // Verify incoming POST request
  459. verify_post_check($mybb->input['my_post_key']);
  460. // Are we going to delete this event or just edit it?
  461. if($mybb->input['delete'] == 1)
  462. {
  463. $db->delete_query("events", "eid='{$event['eid']}'");
  464. // Redirect back to the main calendar view.
  465. redirect("calendar.php", $lang->redirect_eventdeleted);
  466. }
  467. // Have we made a private event public?
  468. if(!$mybb->input['private'])
  469. {
  470. $mybb->input['private'] = 0;
  471. }
  472. $plugins->run_hooks("calendar_do_editevent_start");
  473. // Set up event handler.
  474. require_once MYBB_ROOT."inc/datahandler.php";
  475. require_once MYBB_ROOT."inc/datahandlers/event.php";
  476. $eventhandler = new EventDataHandler("update");
  477. // Prepare an array for the eventhandler.
  478. $event = array(
  479. "eid" => $event['eid'],
  480. "name" => $mybb->input['name'],
  481. "description" => $mybb->input['description'],
  482. "private" => $mybb->input['private'],
  483. "type" => $mybb->input['type']
  484. );
  485. // Now we add in our date/time info depending on the type of event
  486. if($mybb->input['type'] == "single")
  487. {
  488. $event['start_date'] = array(
  489. "day" => $mybb->input['single_day'],
  490. "month" => $mybb->input['single_month'],
  491. "year" => $mybb->input['single_year']
  492. );
  493. $event['repeats'] = '';
  494. }
  495. else if($mybb->input['type'] == "ranged")
  496. {
  497. $event['start_date'] = array(
  498. "day" => $mybb->input['start_day'],
  499. "month" => $mybb->input['start_month'],
  500. "year" => $mybb->input['start_year'],
  501. "time" => $mybb->input['start_time']
  502. );
  503. $event['end_date'] = array(
  504. "day" => $mybb->input['end_day'],
  505. "month" => $mybb->input['end_month'],
  506. "year" => $mybb->input['end_year'],
  507. "time" => $mybb->input['end_time']
  508. );
  509. $event['timezone'] = $mybb->input['timezone'];
  510. $event['ignoretimezone'] = intval($mybb->input['ignoretimezone']);
  511. $repeats = array();
  512. switch($mybb->input['repeats'])
  513. {
  514. case 1:
  515. $repeats['repeats'] = 1;
  516. $repeats['days'] = $mybb->input['repeats_1_days'];
  517. break;
  518. case 2:
  519. $repeats['repeats'] = 2;
  520. break;
  521. case 3:
  522. $repeats['repeats'] = 3;
  523. $repeats['weeks'] = $mybb->input['repeats_3_weeks'];
  524. if(!is_array($mybb->input['repeats_3_days']))
  525. {
  526. $mybb->input['repeats_3_days'] = array();
  527. }
  528. ksort($mybb->input['repeats_3_days']);
  529. $days = array();
  530. foreach($mybb->input['repeats_3_days'] as $weekday => $value)
  531. {
  532. if($value != 1)
  533. {
  534. continue;
  535. }
  536. $days[] = $weekday;
  537. }
  538. $repeats['days'] = $days;
  539. break;
  540. case 4:
  541. $repeats['repeats'] = 4;
  542. if($mybb->input['repeats_4_type'] == 1)
  543. {
  544. $repeats['day'] = $mybb->input['repeats_4_day'];
  545. $repeats['months'] = $mybb->input['repeats_4_months'];
  546. }
  547. else
  548. {
  549. $repeats['months'] = $mybb->input['repeats_4_months2'];
  550. $repeats['occurance'] = $mybb->input['repeats_4_occurance'];
  551. $repeats['weekday'] = $mybb->input['repeats_4_weekday'];
  552. }
  553. break;
  554. case 5:
  555. $repeats['repeats'] = 5;
  556. if($mybb->input['repeats_5_type'] == 1)
  557. {
  558. $repeats['day'] = $mybb->input['repeats_5_day'];
  559. $repeats['month'] = $mybb->input['repeats_5_month'];
  560. $repeats['years'] = $mybb->input['repeats_5_years'];
  561. }
  562. else
  563. {
  564. $repeats['occurance'] = $mybb->input['repeats_5_occurance'];
  565. $repeats['weekday'] = $mybb->input['repeats_5_weekday'];
  566. $repeats['month'] = $mybb->input['repeats_5_month2'];
  567. $repeats['years'] = $mybb->input['repeats_5_years'];
  568. }
  569. break;
  570. default:
  571. $repeats['repeats'] = 0;
  572. }
  573. $event['repeats'] = $repeats;
  574. }
  575. $eventhandler->set_data($event);
  576. // Now let the eventhandler do all the hard work.
  577. if(!$eventhandler->validate_event())
  578. {
  579. $event_errors = $eventhandler->get_friendly_errors();
  580. $event_errors = inline_error($event_errors);
  581. $mybb->input['action'] = "editevent";
  582. }
  583. else
  584. {
  585. $details = $eventhandler->update_event();
  586. $plugins->run_hooks("calendar_do_editevent_end");
  587. redirect(get_event_link($event['eid']), $lang->redirect_eventupdated);
  588. }
  589. }
  590. if($mybb->input['action'] == "editevent")
  591. {
  592. $query = $db->simple_select("events", "*", "eid='".intval($mybb->input['eid'])."'");
  593. $event = $db->fetch_array($query);
  594. if(!is_numeric($event['eid']))
  595. {
  596. error($lang->error_invalidevent);
  597. }
  598. $query = $db->simple_select("calendars", "*", "cid='{$event['cid']}'");
  599. $calendar = $db->fetch_array($query);
  600. // Invalid calendar?
  601. if(!$calendar['cid'])
  602. {
  603. error($lang->invalid_calendar);
  604. }
  605. // Do we have permission to view this calendar or post events?
  606. $calendar_permissions = get_calendar_permissions($calendar['cid']);
  607. if($calendar_permissions['canviewcalendar'] != 1 || $calendar_permissions['canaddevents'] != 1)
  608. {
  609. error_no_permission();
  610. }
  611. if(($event['uid'] != $mybb->user['uid'] || $mybb->user['uid'] == 0) && $calendar_permissions['canmoderateevents'] != 1)
  612. {
  613. error_no_permission();
  614. }
  615. $event['name'] = htmlspecialchars_uni($event['name']);
  616. add_breadcrumb(htmlspecialchars_uni($calendar['name']), get_calendar_link($calendar['cid']));
  617. add_breadcrumb($event['name'], get_event_link($event['eid']));
  618. add_breadcrumb($lang->nav_editevent);
  619. $plugins->run_hooks("calendar_editevent_start");
  620. // If MyCode is on for this forum and the MyCode editor is enabled inthe Admin CP, draw the code buttons and smilie inserter.
  621. if($mybb->settings['bbcodeinserter'] != 0 && (!$mybb->user['uid'] || $mybb->user['showcodebuttons'] != 0) && $calendar['allowmycode'] == 1)
  622. {
  623. $codebuttons = build_mycode_inserter();
  624. if($calendar['allowsmilies'] == 1)
  625. {
  626. $smilieinserter = build_clickable_smilies();
  627. }
  628. }
  629. // Previous selections
  630. if($event_errors)
  631. {
  632. $name = htmlspecialchars_uni($mybb->input['name']);
  633. $description = htmlspecialchars_uni($mybb->input['description']);
  634. $single_day = $mybb->input['single_day'];
  635. $single_month[$mybb->input['single_month']] = " selected=\"selected\"";
  636. $single_year = $mybb->input['single_year'];
  637. $start_day = $mybb->input['start_day'];
  638. $start_month[$mybb->input['start_month']] = " selected=\"selected\"";
  639. $start_year = $mybb->input['start_year'];
  640. $start_time = htmlspecialchars_uni($mybb->input['start_time']);
  641. $end_day = $mybb->input['end_day'];
  642. $end_month[$mybb->input['end_month']] = " selected=\"selected\"";
  643. $end_year = $mybb->input['end_year'];
  644. $end_time = htmlspecialchars_uni($mybb->input['end_time']);
  645. if($mybb->input['type'] == "single")
  646. {
  647. $type_single = "checked=\"checked\"";
  648. $type = "single";
  649. }
  650. else
  651. {
  652. $type_ranged = "checked=\"checked\"";
  653. $type = "ranged";
  654. }
  655. if($mybb->input['repeats'])
  656. {
  657. $repeats_sel[$mybb->input['repeats']] = " selected=\"selected\"";
  658. }
  659. $repeats_1_days = intval($mybb->input['repeats_1_days']);
  660. $repeats_3_weeks = intval($mybb->input['repeats_3_weeks']);
  661. if(is_array($mybb->input['repeats_3_days']))
  662. {
  663. foreach($mybb->input['repeats_3_days'] as $day => $val)
  664. {
  665. if($val != 1) continue;
  666. $day = intval($day);
  667. $repeats_3_days[$day] = " checked=\"checked\"";
  668. }
  669. }
  670. if($mybb->input['repeats_4_type'] == 1)
  671. {
  672. $repeats_4_type[1] = "checked=\"checked\"";
  673. }
  674. else
  675. {
  676. $repeats_4_type[2] = "checked=\"checked\"";
  677. }
  678. $repeats_4_day = intval($mybb->input['repeats_4_day']);
  679. $repeats_4_months = intval($mybb->input['repeats_4_months']);
  680. $repeats_4_occurance[$mybb->input['repeats_4_occurance']] = "selected=\"selected\"";
  681. $repeats_4_weekday[$mybb->input['repeats_4_weekday']] = "selected=\"selected\"";
  682. $repeats_4_months2 = intval($mybb->input['repeats_4_months2']);
  683. if($mybb->input['repeats_5_type'] == 1)
  684. {
  685. $repeats_5_type[1] = "checked=\"checked\"";
  686. }
  687. else
  688. {
  689. $repeats_5_type[2] = "checked=\"checked\"";
  690. }
  691. $repeats_5_day = intval($mybb->input['repeats_5_day']);
  692. $repeats_5_month[$mybb->input['repeats_5_month']] = "selected=\"selected\"";
  693. $repeats_5_years = intval($mybb->input['repeats_5_years']);
  694. $repeats_5_occurance[$mybb->input['repeats_5_occurance']] = "selected=\"selected\"";
  695. $repeats_5_weekday[$mybb->input['repeats_5_weekday']] = "selected=\"selected\"";
  696. $repeats_5_month2[$mybb->input['repeats_5_month2']] = "selected=\"selected\"";
  697. $repeats_5_years2 = intval($mybb->input['repeats_5_years2']);
  698. if($mybb->input['private'] == 1)
  699. {
  700. $privatecheck = " checked=\"checked\"";
  701. }
  702. if($mybb->input['ignoretimezone'] == 1)
  703. {
  704. $ignore_timezone = "checked=\"checked\"";
  705. }
  706. $timezone = $mybb->input['timezone'];
  707. }
  708. else
  709. {
  710. $mybb->input['calendar'] = $event['cid'];
  711. $name = htmlspecialchars_uni($event['name']);
  712. $description = htmlspecialchars_uni($event['description']);
  713. if($event['private'] == 1)
  714. {
  715. $privatecheck = " checked=\"checked\"";
  716. }
  717. $start_date = explode("-", gmdate("j-n-Y-g:i A", $event['starttime']+$event['timezone']*3600));
  718. $single_day = $start_date[0];
  719. $single_month[$start_date[1]] = " selected=\"selected\"";
  720. $single_year = $start_date[2];
  721. $start_day = $start_date[0];
  722. $start_month[$start_date[1]] = " selected=\"selected\"";
  723. $start_year = $start_date[2];
  724. if($event['usingtime'])
  725. {
  726. $start_time = gmdate($mybb->settings['timeformat'], $event['starttime']+$event['timezone']*3600);
  727. }
  728. if($event['endtime'])
  729. {
  730. $end_date = explode("-", gmdate("j-n-Y-g:i A", $event['endtime']+$event['timezone']*3600));
  731. $end_day = $end_date[0];
  732. $end_month[$end_date[1]] = " selected=\"selected\"";
  733. $end_year = $end_date[2];
  734. if($event['usingtime'])
  735. {
  736. $end_time = gmdate($mybb->settings['timeformat'], $event['endtime']+$event['timezone']*3600);
  737. }
  738. $type_ranged = "checked=\"checked\"";
  739. $type = "ranged";
  740. $repeats = unserialize($event['repeats']);
  741. if($repeats['repeats'] >= 0)
  742. {
  743. $repeats_sel[$repeats['repeats']] = " selected=\"selected\"";
  744. switch($repeats['repeats'])
  745. {
  746. case 1:
  747. $repeats_1_days = $repeats['days'];
  748. $repeats_3_weeks = 1;
  749. $repeats_4_type[1] = "checked=\"checked\"";
  750. $repeats_4_day = 1;
  751. $repeats_4_months = 1;
  752. $repeats_4_months2 = 1;
  753. $repeats_5_type[1] = "checked=\"checked\"";
  754. $repeats_5_day = 1;
  755. $repeats_5_years = $repeats_5_years2 = 1;
  756. break;
  757. case 3:
  758. $repeats_1_days = 1;
  759. $repeats_3_weeks = $repeats['weeks'];
  760. if(is_array($repeats['days']))
  761. {
  762. foreach($repeats['days'] as $weekday)
  763. {
  764. $repeats_3_days[$weekday] = " checked=\"checked\"";
  765. }
  766. }
  767. $repeats_4_type[1] = "checked=\"checked\"";
  768. $repeats_4_day = 1;
  769. $repeats_4_months = 1;
  770. $repeats_4_months2 = 1;
  771. $repeats_5_type[1] = "checked=\"checked\"";
  772. $repeats_5_day = 1;
  773. $repeats_5_years = $repeats_5_years2 = 1;
  774. break;
  775. case 4:
  776. $repeats_1_days = 1;
  777. $repeats_3_weeks = 1;
  778. if($repeats['day'])
  779. {
  780. $repeats_4_type[1] = "checked=\"checked\"";
  781. $repeats_4_day = $repeats['day'];
  782. $repeats_4_months = $repeats_4_months2 = $repeats['months'];
  783. }
  784. else
  785. {
  786. $repeats_4_type[2] = "checked=\"checked\"";
  787. $repeats_4_day = 1;
  788. $repeats_4_months2 = $repeats_4_months = $repeats['months'];
  789. $repeats_4_occurance[$repeats['occurance']] = "selected=\"selected\"";
  790. $repeats_4_weekday[$repeats['weekday']] = "selected=\"selected\"";
  791. }
  792. $repeats_5_type[1] = "checked=\"checked\"";
  793. $repeats_5_day = 1;
  794. $repeats_5_years = $repeats_5_years2 = 1;
  795. break;
  796. case 5:
  797. $repeats_1_days = 1;
  798. $repeats_3_weeks = 1;
  799. $repeats_4_type[1] = "checked=\"checked\"";
  800. $repeats_4_day = 1;
  801. $repeats_4_months = 1;
  802. $repeats_4_months2 = 1;
  803. if($repeats['day'])
  804. {
  805. $repeats_5_type[1] = "checked=\"checked\"";
  806. $repeats_5_day = $repeats['day'];
  807. $repeats_5_month[$repeats['month']] = $repeats_5_month2[$repeats['month']] = "selected=\"selected\"";
  808. $repeats_5_years = $repeats_5_years2 = $repeats['years'];
  809. }
  810. else
  811. {
  812. $repeats_5_type[2] = "checked=\"checked\"";
  813. $repeats_5_occurance[$repeats['occurance']] = "selected=\"selected\"";
  814. $repeats_5_weekday[$repeats['weekday']] = "selected=\"selected\"";
  815. $repeats_5_month[$repeats['month']] = $repeats_5_month2[$repeats['month']] = "selected=\"selected\"";
  816. $repeats_5_years = $repeats_5_years2 = $repeats['years'];
  817. }
  818. break;
  819. }
  820. }
  821. if($event['ignoretimezone'])
  822. {
  823. $timezone = 0;
  824. $ignore_timezone = "checked=\"checked\"";
  825. }
  826. else
  827. {
  828. $timezone = $event['timezone'];
  829. }
  830. }
  831. else
  832. {
  833. $type_single = "checked=\"checked\"";
  834. $type = "single";
  835. // set some defaults if the user wants to make a ranged event
  836. $end_day = $start_day;
  837. $end_month = $start_month;
  838. $end_year = $start_year;
  839. }
  840. }
  841. // Construct option list for years
  842. for($i = my_date('Y'); $i < (my_date('Y') + 5); ++$i)
  843. {
  844. if($i == $single_year)
  845. {
  846. $single_years .= "<option value=\"{$i}\" selected=\"selected\">{$i}</option>\n";
  847. }
  848. else
  849. {
  850. $single_years .= "<option value=\"{$i}\">{$i}</option>\n";
  851. }
  852. if($i == $start_year)
  853. {
  854. $start_years .= "<option value=\"{$i}\" selected=\"selected\">{$i}</option>\n";
  855. }
  856. else
  857. {
  858. $start_years .= "<option value=\"{$i}\">{$i}</option>\n";
  859. }
  860. if($i == $end_year)
  861. {
  862. $end_years .= "<option value=\"{$i}\" selected=\"selected\">{$i}</option>\n";
  863. }
  864. else
  865. {
  866. $end_years .= "<option value=\"{$i}\">{$i}</option>\n";
  867. }
  868. }
  869. // Construct option list for days
  870. for($i = 1; $i <= 31; ++$i)
  871. {
  872. if($i == $single_day)
  873. {
  874. $single_days .= "<option value=\"{$i}\" selected=\"selected\">{$i}</option>\n";
  875. }
  876. else
  877. {
  878. $single_days .= "<option value=\"{$i}\">{$i}</option>\n";
  879. }
  880. if($i == $start_day)
  881. {
  882. $start_days .= "<option value=\"{$i}\" selected=\"selected\">{$i}</option>\n";
  883. }
  884. else
  885. {
  886. $start_days .= "<option value=\"{$i}\">{$i}</option>\n";
  887. }
  888. if($i == $end_day)
  889. {
  890. $end_days .= "<option value=\"{$i}\" selected=\"selected\">{$i}</option>\n";
  891. }
  892. else
  893. {
  894. $end_days .= "<option value=\"{$i}\">{$i}</option>\n";
  895. }
  896. }
  897. $timezones = build_timezone_select("timezone", $timezone);
  898. $plugins->run_hooks("calendar_editevent_end");
  899. eval("\$editevent = \"".$templates->get("calendar_editevent")."\";");
  900. output_page($editevent);
  901. }
  902. // Move an event to another calendar
  903. if($mybb->input['action'] == "move")
  904. {
  905. $query = $db->simple_select("events", "*", "eid='".intval($mybb->input['eid'])."'");
  906. $event = $db->fetch_array($query);
  907. if(!is_numeric($event['eid']))
  908. {
  909. error($lang->error_invalidevent);
  910. }
  911. $query = $db->simple_select("calendars", "*", "cid='{$event['cid']}'");
  912. $calendar = $db->fetch_array($query);
  913. // Invalid calendar?
  914. if(!$calendar['cid'])
  915. {
  916. error($lang->invalid_calendar);
  917. }
  918. // Do we have permission to view this calendar or post events?
  919. $calendar_permissions = get_calendar_permissions();
  920. if($calendar_permissions[$calendar['cid']]['canviewcalendar'] != 1)
  921. {
  922. error_no_permission();
  923. }
  924. if($calendar_permissions[$calendar['cid']]['canmoderateevents'] != 1)
  925. {
  926. error_no_permission();
  927. }
  928. $event['name'] = htmlspecialchars_uni($event['name']);
  929. add_breadcrumb(htmlspecialchars_uni($calendar['name']), get_calendar_link($calendar['cid']));
  930. add_breadcrumb($event['name'], get_event_link($event['eid']));
  931. add_breadcrumb($lang->nav_move_event);
  932. $plugins->run_hooks("calendar_move_start");
  933. // Build calendar select
  934. $query = $db->simple_select("calendars", "*", "", array("order_by" => "name", "order_dir" => "asc"));
  935. while($calendar_option = $db->fetch_array($query))
  936. {
  937. if($calendar_permissions[$calendar['cid']]['canviewcalendar'] == 1)
  938. {
  939. $calendar_option['name'] = htmlspecialchars_uni($calendar_option['name']);
  940. $calendar_select .= "<option value=\"{$calendar_option['cid']}\">{$calendar_option['name']}</option>\n";
  941. }
  942. }
  943. $plugins->run_hooks("calendar_move_end");
  944. eval("\$moveevent = \"".$templates->get("calendar_move")."\";");
  945. output_page($moveevent);
  946. }
  947. // Actually move the event
  948. if($mybb->input['action'] == "do_move" && $mybb->request_method == "post")
  949. {
  950. // Verify incoming POST request
  951. verify_post_check($mybb->input['my_post_key']);
  952. $query = $db->simple_select("events", "*", "eid='".intval($mybb->input['eid'])."'");
  953. $event = $db->fetch_array($query);
  954. if(!is_numeric($event['eid']))
  955. {
  956. error($lang->error_invalidevent);
  957. }
  958. $query = $db->simple_select("calendars", "*", "cid='{$event['cid']}'");
  959. $calendar = $db->fetch_array($query);
  960. // Invalid calendar?
  961. if(!$calendar['cid'])
  962. {
  963. error($lang->invalid_calendar);
  964. }
  965. // Do we have permission to view this calendar?
  966. $calendar_permissions = get_calendar_permissions();
  967. if($calendar_permissions[$calendar['cid']]['canviewcalendar'] != 1)
  968. {
  969. error_no_permission();
  970. }
  971. if($calendar_permissions[$calendar['cid']]['canmoderateevents'] != 1)
  972. {
  973. error_no_permission();
  974. }
  975. $query = $db->simple_select("calendars", "*", "cid='".intval($mybb->input['new_calendar'])."'");
  976. $new_calendar = $db->fetch_array($query);
  977. if(!$new_calendar['cid'])
  978. {
  979. error($lang->invalid_calendar);
  980. }
  981. if($calendar_permissions[$mybb->input['new_calendar']]['canviewcalendar'] != 1)
  982. {
  983. error_no_permission();
  984. }
  985. $plugins->run_hooks("calendar_do_move_start");
  986. $updated_event = array(
  987. "cid" => $new_calendar['cid']
  988. );
  989. $db->update_query("events", $updated_event, "eid='{$event['eid']}'");
  990. $plugins->run_hooks("calendar_do_move_end");
  991. redirect(get_event_link($event['eid']), $lang->redirect_eventmoved);
  992. }
  993. // Approve an event
  994. if($mybb->input['action'] == "approve")
  995. {
  996. // Verify incoming POST request
  997. verify_post_check($mybb->input['my_post_key']);
  998. $query = $db->simple_select("events", "*", "eid='".intval($mybb->input['eid'])."'");
  999. $event = $db->fetch_array($query);
  1000. if(!is_numeric($event['eid']))
  1001. {
  1002. error($lang->error_invalidevent);
  1003. }
  1004. $query = $db->simple_select("calendars", "*", "cid='{$event['cid']}'");
  1005. $calendar = $db->fetch_array($query);
  1006. // Invalid calendar?
  1007. if(!$calendar['cid'])
  1008. {
  1009. error($lang->invalid_calendar);
  1010. }
  1011. // Do we have permission to view this calendar?
  1012. $calendar_permissions = get_calendar_permissions($calendar['cid']);
  1013. if($calendar_permissions['canviewcalendar'] != 1)
  1014. {
  1015. error_no_permission();
  1016. }
  1017. if($calendar_permissions['canmoderateevents'] != 1)
  1018. {
  1019. error_no_permission();
  1020. }
  1021. $plugins->run_hooks("calendar_approve_start");
  1022. $updated_event = array(
  1023. "visible" => 1
  1024. );
  1025. $db->update_query("events", $updated_event, "eid='{$event['eid']}'");
  1026. $plugins->run_hooks("calendar_approve_end");
  1027. redirect(get_event_link($event['eid']), $lang->redirect_eventapproved);
  1028. }
  1029. // Unapprove an event
  1030. if($mybb->input['action'] == "unapprove")
  1031. {
  1032. // Verify incoming POST request
  1033. verify_post_check($mybb->input['my_post_key']);
  1034. $query = $db->simple_select("events", "*", "eid='".intval($mybb->input['eid'])."'");
  1035. $event = $db->fetch_array($query);
  1036. if(!is_numeric($event['eid']))
  1037. {
  1038. error($lang->error_invalidevent);
  1039. }
  1040. $query = $db->simple_select("calendars", "*", "cid='{$event['cid']}'");
  1041. $calendar = $db->fetch_array($query);
  1042. // Invalid calendar?
  1043. if(!$calendar['cid'])
  1044. {
  1045. error($lang->invalid_calendar);
  1046. }
  1047. // Do we have permission to view this calendar?
  1048. $calendar_permissions = get_calendar_permissions($calendar['cid']);
  1049. if($calendar_permissions['canviewcalendar'] != 1)
  1050. {
  1051. error_no_permission();
  1052. }
  1053. if($calendar_permissions['canmoderateevents'] != 1)
  1054. {
  1055. error_no_permission();
  1056. }
  1057. $plugins->run_hooks("calendar_unapprove_start");
  1058. $updated_event = array(
  1059. "visible" => 0
  1060. );
  1061. $db->update_query("events", $updated_event, "eid='{$event['eid']}'");
  1062. $plugins->run_hooks("calendar_unapprove_end");
  1063. redirect(get_event_link($event['eid']), $lang->redirect_eventunapproved);
  1064. }
  1065. // Showing specific event
  1066. if($mybb->input['action'] == "event")
  1067. {
  1068. $query = $db->query("
  1069. SELECT u.*, e.*
  1070. FROM ".TABLE_PREFIX."events e
  1071. LEFT JOIN ".TABLE_PREFIX."users u ON (u.uid=e.uid)
  1072. WHERE e.eid='".intval($mybb->input['eid'])."'
  1073. ");
  1074. $event = $db->fetch_array($query);
  1075. if(!is_numeric($event['eid']) || ($event['private'] == 1 && $event['uid'] != $mybb->user['uid']))
  1076. {
  1077. error($lang->error_invalidevent);
  1078. }
  1079. $query = $db->simple_select("calendars", "*", "cid='{$event['cid']}'");
  1080. $calendar = $db->fetch_array($query);
  1081. // Invalid calendar?
  1082. if(!$calendar['cid'])
  1083. {
  1084. error($lang->invalid_calendar);
  1085. }
  1086. // Do we have permission to view this calendar?
  1087. $calendar_permissions = get_calendar_permissions($calendar['cid']);
  1088. if($calendar_permissions['canviewcalendar'] != 1 || ($calendar_permissions['canmoderateevents'] != 1 && $event['visible'] == 0))
  1089. {
  1090. error_no_permission();
  1091. }
  1092. $event['name'] = htmlspecialchars_uni($event['name']);
  1093. add_breadcrumb(htmlspecialchars_uni($calendar['name']), get_calendar_link($calendar['cid']));
  1094. add_breadcrumb($event['name'], get_event_link($event['eid']));
  1095. $plugins->run_hooks("calendar_event_start");
  1096. $event_parser_options = array(
  1097. "allow_html" => $calendar['allowhtml'],
  1098. "allow_mycode" => $calendar['allowmycode'],
  1099. "allow_smilies" => $calendar['allowsmilies'],
  1100. "allow_imgcode" => $calendar['allowimgcode'],
  1101. "allow_videocode" => $calendar['allowvideocode']
  1102. );
  1103. $event['description'] = $parser->parse_message($event['description'], $event_parser_options);
  1104. // Get the usergroup
  1105. if($event['username'])
  1106. {
  1107. if(!$event['displaygroup'])
  1108. {
  1109. $event['displaygroup'] = $event['usergroup'];
  1110. }
  1111. $user_usergroup = $groupscache[$event['displaygroup']];
  1112. }
  1113. else
  1114. {
  1115. $user_usergroup = $groupscache[1];
  1116. }
  1117. if(!is_array($titles_cache))
  1118. {
  1119. // Get user titles (i guess we should improve this, maybe in version3.
  1120. $query = $db->simple_select("usertitles", "*", "", array('order_by' => 'posts', 'order_dir' => 'DESC'));
  1121. while($usertitle = $db->fetch_array($query))
  1122. {
  1123. $titles_cache[$usertitle['posts']] = $usertitle;
  1124. }
  1125. unset($usertitle);
  1126. }
  1127. // Event made by registered user
  1128. if($event['uid'] > 0 && $event['username'])
  1129. {
  1130. $event['profilelink'] = build_profile_link(format_name($event['username'], $event['usergroup'], $event['displaygroup']), $event['uid']);
  1131. if(trim($event['usertitle']) != "")
  1132. {
  1133. $hascustomtitle = 1;
  1134. }
  1135. if($user_usergroup['usertitle'] != "" && !$hascustomtitle)
  1136. {
  1137. $event['usertitle'] = $user_usergroup['usertitle'];
  1138. }
  1139. elseif(is_array($titles_cache) && !$user_usergroup['usertitle'])
  1140. {
  1141. reset($titles_cache);
  1142. foreach($titles_cache as $key => $title)
  1143. {
  1144. if($event['postnum'] >= $key)
  1145. {
  1146. if(!$hascustomtitle)
  1147. {
  1148. $event['usertitle'] = $title['title'];
  1149. }
  1150. $event['stars'] = $title['stars'];
  1151. $event['starimage'] = $title['starimage'];
  1152. break;
  1153. }
  1154. }
  1155. }
  1156. if($user_usergroup['stars'])
  1157. {
  1158. $event['stars'] = $user_usergroup['stars'];
  1159. }
  1160. if(!$event['starimage'])
  1161. {
  1162. $event['starimage'] = $user_usergroup['starimage'];
  1163. }
  1164. $event['starimage'] = str_replace("{theme}", $theme['imgdir'], $event['starimage']);
  1165. for($i = 0; $i < $post['stars']; ++$i)
  1166. {
  1167. $event['userstars'] .= "<img src=\"".$event['starimage']."\" border=\"0\" alt=\"*\" />";
  1168. }
  1169. if($event['userstars'] && $event['starimage'] && $event['stars'])
  1170. {
  1171. $event['userstars'] .= "<br />";
  1172. }
  1173. }
  1174. // Created by a guest or an unknown user
  1175. else
  1176. {
  1177. if(!$event['username'])
  1178. {
  1179. $event['username'] = $lang->guest;
  1180. }
  1181. $event['username'] = $event['username'];
  1182. $event['profilelink'] = format_name($event['username'], 1);
  1183. if($user_usergroup['usertitle'])
  1184. {
  1185. $event['usertitle'] = $user_usergroup['usertitle'];
  1186. }
  1187. else
  1188. {
  1189. $event['usertitle'] = $lang->guest;
  1190. }
  1191. }
  1192. if($event['ignoretimezone'] == 0)
  1193. {
  1194. $offset = $event['timezone'];
  1195. }
  1196. else
  1197. {
  1198. $offset = $mybb->user['timezone'];
  1199. }
  1200. $event['starttime_user'] = $event['starttime']+$offset*3600;
  1201. // Events over more than one day
  1202. $time_period = '';
  1203. if($event['endtime'] > 0 && $event['endtime'] != $event['starttime'])
  1204. {
  1205. $event['endtime_user'] = $event['endtime']+$offset*3600;
  1206. $start_day = gmmktime(0, 0, 0, gmdate("n", $event['starttime_user']), gmdate("j", $event['starttime_user']), gmdate("Y", $event['starttime_user']));
  1207. $end_day = gmmktime(0, 0, 0, gmdate("n", $event['endtime_user']), gmdate("j", $event['endtime_user']), gmdate("Y", $event['endtime_user']));
  1208. $start_time = gmdate("Hi", $event['starttime_user']);
  1209. $end_time = gmdate("Hi", $event['endtime_user']);
  1210. $event['repeats'] = unserialize($event['repeats']);
  1211. // Event only runs over one day
  1212. if($start_day == $end_day && $event['repeats']['repeats'] == 0)
  1213. {
  1214. $time_period = gmdate($mybb->settings['dateformat'], $event['starttime_user']);
  1215. // Event runs all day
  1216. if($start_time != 0000 && $end_time != 2359)
  1217. {
  1218. $time_period .= $lang->comma.gmdate($mybb->settings['timeformat'], $event['starttime_user'])." - ".gmdate($mybb->settings['timeformat'], $event['endtime_user']);
  1219. }
  1220. else
  1221. {
  1222. $time_period .= $lang->comma.$lang->all_day;
  1223. }
  1224. }
  1225. else
  1226. {
  1227. $time_period = gmdate($mybb->settings['dateformat'], $event['starttime_user']).", ".gmdate($mybb->settings['timeformat'], $event['starttime_user']);
  1228. $time_period .= " - ";
  1229. $time_period .= gmdate($mybb->settings['dateformat'], $event['endtime_user']).", ".gmdate($mybb->settings['timeformat'], $event['endtime_user']);
  1230. }
  1231. }
  1232. else
  1233. {
  1234. $time_period = gmdate($mybb->settings['dateformat'], $event['starttime_user']);
  1235. }
  1236. $repeats = fetch_friendly_repetition($event);
  1237. if($repeats)
  1238. {
  1239. $repeats = "<span class=\"smalltext\"><strong>{$lang->repeats}</strong><br />{$repeats}</span>";
  1240. }
  1241. if($calendar_permissions['canmoderateevents'] == 1 || ($mybb->user['uid'] > 0 && $mybb->user['uid'] == $event['uid']))
  1242. {
  1243. eval("\$edit_event = \"".$templates->get("calendar_event_editbutton")."\";");
  1244. if($calendar_permissions['canmoderateevents'] == 1)
  1245. {
  1246. if($event['visible'] == 1)
  1247. {
  1248. $approve = $lang->unapprove_event;
  1249. $approve_value = "unapprove";
  1250. }
  1251. else
  1252. {
  1253. $approve = $lang->approve_event;
  1254. $approve_value = "approve";
  1255. }
  1256. eval("\$moderator_options = \"".$templates->get("calendar_event_modoptions")."\";");
  1257. }
  1258. if($event['visible'] == 0)
  1259. {
  1260. $event_class = " trow_shaded";
  1261. }
  1262. }
  1263. $month = my_date("n");
  1264. $yearsel = '';
  1265. for($i = my_date("Y"); $i < (my_date("Y") + 5); ++$i)
  1266. {
  1267. $yearsel .= "<option value=\"$i\">$i</option>\n";
  1268. }
  1269. if($mybb->usergroup['canaddevents'] == 1)
  1270. {
  1271. eval("\$addevent = \"".$templates->get("calendar_addeventlink")."\";");
  1272. }
  1273. // Now output the page
  1274. $plugins->run_hooks("calendar_event_end");
  1275. eval("\$event = \"".$templates->get("calendar_event")."\";");
  1276. output_page($event);
  1277. }
  1278. // View all events on a specific day.
  1279. if($mybb->input['action'] == "dayview")
  1280. {
  1281. // Showing a particular calendar
  1282. if($mybb->input['calendar'])
  1283. {
  1284. $query = $db->simple_select("calendars", "*", "cid='".intval($mybb->input['calendar'])."'");
  1285. $calendar = $db->fetch_array($query);
  1286. }
  1287. // Showing the default calendar
  1288. else
  1289. {
  1290. $query = $db->simple_select("calendars", "*", "disporder='1'");
  1291. $calendar = $db->fetch_array($query);
  1292. }
  1293. // Invalid calendar?
  1294. if(!$calendar['cid'])
  1295. {
  1296. error($lang->invalid_calendar);
  1297. }
  1298. // Do we have permission to view this calendar?
  1299. $calendar_permissions = get_calendar_permissions($calendar['cid']);
  1300. if($calendar_permissions['canviewcalendar'] != 1)
  1301. {
  1302. error_no_permission();
  1303. }
  1304. // Incoming year?
  1305. if($mybb->input['year'] && $mybb->input['year'] <= my_date("Y")+5)
  1306. {
  1307. $year = intval($mybb->input['year']);
  1308. }
  1309. else
  1310. {
  1311. $year = my_date("Y");
  1312. }
  1313. // Then the month
  1314. if($mybb->input['month'] >=1 && $mybb->input['month'] <= 12)
  1315. {
  1316. $month = intval($mybb->input['month']);
  1317. }
  1318. else
  1319. {
  1320. $month = my_date("n");
  1321. }
  1322. // And day?
  1323. if($mybb->input['day'] && $mybb->input['day'] <= gmdate("t", gmmktime(0, 0, 0, $month, 1, $year)))
  1324. {
  1325. $day = intval($mybb->input['day']);
  1326. }
  1327. else
  1328. {
  1329. $day = my_date("j");
  1330. }
  1331. add_breadcrumb(htmlspecialchars_uni($calendar['name']), get_calendar_link($calendar['cid']));
  1332. add_breadcrumb("$day $monthnames[$month] $year", get_calendar_link($calendar['cid'], $year, $month, $day));
  1333. $plugins->run_hooks("calendar_dayview_start");
  1334. // Load Birthdays for this day
  1335. if($calendar['showbirthdays'])
  1336. {
  1337. $birthdays = get_birthdays($month, $day);
  1338. $bdayhidden = 0;
  1339. if(is_array($birthdays))
  1340. {
  1341. foreach($birthdays as $birthday)
  1342. {
  1343. if($birthday['birthdayprivacy'] == 'all')
  1344. {
  1345. $bday = explode("-", $birthday['birthday']);
  1346. if($bday[2] && $bday[2] < $year)
  1347. {
  1348. $age = $year - $bday[2];
  1349. $age = " (".$lang->sprintf($lang->years_old, $age).")";
  1350. }
  1351. else
  1352. {
  1353. $age = '';
  1354. }
  1355. $birthday['username'] = format_name($birthday['username'], $birthday['usergroup'], $birthday['displaygroup']);
  1356. $birthday['profilelink'] = build_profile_link($birthday['username'], $birthday['uid']);
  1357. eval("\$birthday_list .= \"".$templates->get("calendar_dayview_birthdays_bday", 1, 0)."\";");
  1358. $comma = $lang->comma;
  1359. }
  1360. else
  1361. {
  1362. ++$bdayhidden;
  1363. }
  1364. }
  1365. }
  1366. if($bdayhidden > 0)
  1367. {
  1368. if($birthday_list)
  1369. {
  1370. $birthday_list .= " - ";
  1371. }
  1372. $birthday_list .= "{$bdayhidden} {$lang->birthdayhidden}";
  1373. }
  1374. if($birthday_list)
  1375. {
  1376. $bdaydate = my_date($mybb->settings['dateformat'], gmmktime(0, 0, 0, $month, $day, $year), 0, 0);
  1377. $lang->birthdays_on_day = $lang->sprintf($lang->birthdays_on_day, $bdaydate);
  1378. eval("\$birthdays = \"".$templates->get("calendar_dayview_birthdays", 1, 0)."\";");
  1379. }
  1380. }
  1381. // So now we fetch events for this month
  1382. $start_timestamp = gmmktime(0, 0, 0, $month, $day, $year);
  1383. $end_timestamp = gmmktime(23, 59, 59, $month, $day, $year);
  1384. $events_cache = get_events($calendar['cid'], $start_timestamp, $end_timestamp, $calendar_permissions['canmoderateevents']);
  1385. if(is_array($events_cache["$day-$month-$year"]))
  1386. {
  1387. foreach($events_cache["$day-$month-$year"] as $event)
  1388. {
  1389. $event['name'] = htmlspecialchars_uni($event['name']);
  1390. $event_parser_options = array(
  1391. "allow_html" => $calendar['allowhtml'],
  1392. "allow_mycode" => $calendar['allowmycode'],
  1393. "allow_smilies" => $calendar['allowsmilies'],
  1394. "allow_imgcode" => $calendar['allowimgcode'],
  1395. "allow_videocode" => $calendar['allowvideocode']
  1396. );
  1397. $event['description'] = $parser->parse_message($event['description'], $event_parser_options);
  1398. // Get the usergroup
  1399. if($event['username'])
  1400. {
  1401. if(!$event['displaygroup'])
  1402. {
  1403. $event['displaygroup'] = $event['usergroup'];
  1404. }
  1405. $user_usergroup = $groupscache[$event['displaygroup']];
  1406. }
  1407. else
  1408. {
  1409. $user_usergroup = $groupscache[1];
  1410. }
  1411. if(!is_array($titles_cache))
  1412. {
  1413. // Get user titles (i guess we should improve this, maybe in version3.
  1414. $query = $db->simple_select("usertitles", "*", "", array('order_by' => 'posts', 'order_dir' => 'DESC'));
  1415. while($usertitle = $db->fetch_array($query))
  1416. {
  1417. $titles_cache[$usertitle['posts']] = $usertitle;
  1418. }
  1419. unset($usertitle);
  1420. }
  1421. // Event made by registered user
  1422. if($event['uid'] > 0 && $event['username'])
  1423. {
  1424. $event['profilelink'] = build_profile_link(format_name($event['username'], $event['usergroup'], $event['displaygroup']), $event['uid']);
  1425. if(trim($event['usertitle']) != "")
  1426. {
  1427. $hascustomtitle = 1;
  1428. }
  1429. if($user_usergroup['usertitle'] != "" && !$hascustomtitle)
  1430. {
  1431. $event['usertitle'] = $user_usergroup['usertitle'];
  1432. }
  1433. elseif(is_array($titles_cache) && !$user_usergroup['usertitle'])
  1434. {
  1435. reset($titles_cache);
  1436. foreach($titles_cache as $key => $title)
  1437. {
  1438. if($event['postnum'] >= $key)
  1439. {
  1440. if(!$hascustomtitle)
  1441. {
  1442. $event['usertitle'] = $title['title'];
  1443. }
  1444. $event['stars'] = $title['stars'];
  1445. $event['starimage'] = $title['starimage'];
  1446. break;
  1447. }
  1448. }
  1449. }
  1450. if($user_usergroup['stars'])
  1451. {
  1452. $event['stars'] = $user_usergroup['stars'];
  1453. }
  1454. if(!$event['starimage'])
  1455. {
  1456. $event['starimage'] = $user_usergroup['starimage'];
  1457. }
  1458. for($i = 0; $i < $post['stars']; ++$i)
  1459. {
  1460. $event['userstars'] .= "<img src=\"".$event['starimage']."\" border=\"0\" alt=\"*\" />";
  1461. }
  1462. if($event['userstars'] && $event['starimage'] && $event['stars'])
  1463. {
  1464. $event['userstars'] .= "<br />";
  1465. }
  1466. }
  1467. // Created by a guest or an unknown user
  1468. else
  1469. {
  1470. if(!$event['username'])
  1471. {
  1472. $event['username'] = $lang->guest;
  1473. }
  1474. $event['username'] = $event['username'];
  1475. $event['profilelink'] = format_name($event['username'], 1);
  1476. if($user_usergroup['usertitle'])
  1477. {
  1478. $event['usertitle'] = $user_usergroup['usertitle'];
  1479. }
  1480. else
  1481. {
  1482. $event['usertitle'] = $lang->guest;
  1483. }
  1484. }
  1485. if($event['ignoretimezone'] == 0)
  1486. {
  1487. $offset = $event['timezone'];
  1488. }
  1489. else
  1490. {
  1491. $offset = $mybb->user['timezone'];
  1492. }
  1493. $event['starttime_user'] = $event['starttime']+$offset*3600;
  1494. // Events over more than one day
  1495. $time_period = '';
  1496. if($event['endtime'] > 0 && $event['endtime'] != $event['starttime'])
  1497. {
  1498. $event['endtime_user'] = $event['endtime']+$offset*3600;
  1499. $start_day = gmmktime(0, 0, 0, gmdate("n", $event['starttime_user']), gmdate("j", $event['starttime_user']), gmdate("Y", $event['starttime_user']));
  1500. $end_day = gmmktime(0, 0, 0, gmdate("n", $event['endtime_user']), gmdate("j", $event['endtime_user']), gmdate("Y", $event['endtime_user']));
  1501. $start_time = gmdate("Hi", $event['starttime_user']);
  1502. $end_time = gmdate("Hi", $event['endtime_user']);
  1503. // Event only runs over one day
  1504. if($start_day == $end_day && $event['repeats']['repeats'] == 0)
  1505. {
  1506. $time_period = gmdate($mybb->settings['dateformat'], $event['starttime_user']);
  1507. // Event runs all day
  1508. if($start_time != 0000 && $end_time != 2359)
  1509. {
  1510. $time_period .= $lang->comma.gmdate($mybb->settings['timeformat'], $event['starttime_user'])." - ".gmdate($mybb->settings['timeformat'], $event['endtime_user']);
  1511. }
  1512. else
  1513. {
  1514. $time_period .= $lang->comma.$lang->all_day;
  1515. }
  1516. }
  1517. else
  1518. {
  1519. $time_period = gmdate($mybb->settings['dateformat'], $event['starttime_user']).", ".gmdate($mybb->settings['timeformat'], $event['starttime_user']);
  1520. $time_period .= " - ";
  1521. $time_period .= gmdate($mybb->settings['dateformat'], $event['endtime_user']).", ".gmdate($mybb->settings['timeformat'], $event['endtime_user']);
  1522. }
  1523. }
  1524. else
  1525. {
  1526. $time_period = gmdate($mybb->settings['dateformat'], $event['starttime_user']);
  1527. }
  1528. $repeats = fetch_friendly_repetition($event);
  1529. if($repeats)
  1530. {
  1531. $repeats = "<span class=\"smalltext\"><strong>{$lang->repeats}</strong><br />{$repeats}</span>";
  1532. }
  1533. $edit_event = $moderator_options = $event_class = "";
  1534. if($calendar_permissions['canmoderateevents'] == 1 || ($mybb->user['uid'] > 0 && $mybb->user['uid'] == $event['uid']))
  1535. {
  1536. eval("\$edit_event = \"".$templates->get("calendar_event_editbutton")."\";");
  1537. if($calendar_permissions['canmoderateevents'] == 1)
  1538. {
  1539. if($event['visible'] == 1)
  1540. {
  1541. $approve = $lang->unapprove_event;
  1542. $approve_value = "unapprove";
  1543. }
  1544. else
  1545. {
  1546. $approve = $lang->approve_event;
  1547. $approve_value = "approve";
  1548. }
  1549. eval("\$moderator_options = \"".$templates->get("calendar_event_modoptions")."\";");
  1550. }
  1551. if($event['visible'] == 0)
  1552. {
  1553. $event_class = " trow_shaded";
  1554. }
  1555. }
  1556. eval("\$events .= \"".$templates->get("calendar_dayview_event")."\";");
  1557. }
  1558. }

Large files files are truncated, but you can click here to view the full file