1<?php 2/** 3 * @package tikiwiki 4 */ 5// (c) Copyright by authors of the Tiki Wiki CMS Groupware Project 6// 7// All Rights Reserved. See copyright.txt for details and a complete list of authors. 8// Licensed under the GNU LESSER GENERAL PUBLIC LICENSE. See license.txt for details. 9// $Id$ 10 11$section = 'calendar'; 12require_once('tiki-setup.php'); 13 14$calendarlib = TikiLib::lib('calendar'); 15$categlib = TikiLib::lib('categ'); 16include_once('lib/newsletters/nllib.php'); 17 18$headerlib->add_cssfile('themes/base_files/feature_css/calendar.css', 20); 19# perms are 20# $tiki_p_view_calendar 21# $tiki_p_admin_calendar 22# $tiki_p_change_events 23# $tiki_p_add_events 24$access->check_feature('feature_calendar'); 25 26$maxSimultaneousWeekViewEvents = 3; 27 28$myurl = 'tiki-calendar.php'; 29$exportUrl = 'tiki-calendar_export_ical.php'; 30$iCalAdvParamsUrl = 'tiki-calendar_params_ical.php'; 31$bufid = []; 32$bufdata = []; 33$editable = []; 34if (! isset($cookietab)) { 35 $cookietab = '1'; 36} 37$rawcals = $calendarlib->list_calendars(); 38$cals_info = $rawcals; 39$rawcals['data'] = Perms::filter([ 'type' => 'calendar' ], 'object', $rawcals['data'], [ 'object' => 'calendarId' ], 'view_calendar'); 40$viewOneCal = $tiki_p_view_calendar; 41$modifTab = 0; 42 43$minHourOfDay = 12; 44$maxHourOfDay = 12; 45$manyEvents = []; 46 47foreach ($rawcals["data"] as $cal_data) { 48 $cal_id = $cal_data['calendarId']; 49 $minHourOfDay = min($minHourOfDay, (int)($cal_data['startday'] / 3600)); 50 $maxHourOfDay = max($maxHourOfDay, (int)(($cal_data['endday'] + 1) / 3600)); 51 if ($tiki_p_admin == 'y') { 52 $cal_data["tiki_p_view_calendar"] = 'y'; 53 $cal_data["tiki_p_view_events"] = 'y'; 54 $cal_data["tiki_p_add_events"] = 'y'; 55 $cal_data["tiki_p_change_events"] = 'y'; 56 } elseif ($cal_data["personal"] == "y") { 57 if ($user) { 58 $cal_data["tiki_p_view_calendar"] = 'y'; 59 $cal_data["tiki_p_view_events"] = 'y'; 60 $cal_data["tiki_p_add_events"] = 'y'; 61 $cal_data["tiki_p_change_events"] = 'y'; 62 } else { 63 $cal_data["tiki_p_view_calendar"] = 'n'; 64 $cal_data["tiki_p_view_events"] = 'y'; 65 $cal_data["tiki_p_add_events"] = 'n'; 66 $cal_data["tiki_p_change_events"] = 'n'; 67 } 68 } else { 69 $calperms = Perms::get([ 'type' => 'calendar', 'object' => $cal_id ]); 70 $cal_data["tiki_p_view_calendar"] = $calperms->view_calendar ? 'y' : 'n'; 71 $cal_data["tiki_p_view_events"] = $calperms->view_events ? 'y' : 'n'; 72 $cal_data["tiki_p_add_events"] = $calperms->add_events ? 'y' : 'n'; 73 $cal_data["tiki_p_change_events"] = $calperms->change_events ? 'y' : 'n'; 74 } 75 if ($cal_data["tiki_p_view_calendar"] == 'y') { 76 $viewOneCal = 'y'; 77 $bufid[] = $cal_id; 78 $bufdata["$cal_id"] = $cal_data; 79 } 80 if ($cal_data["tiki_p_view_events"] == 'y') { 81 $visible[] = $cal_id; 82 } 83 if ($cal_data["tiki_p_add_events"] == 'y') { 84 $modifTab = 1; 85 } 86 if ($cal_data["tiki_p_change_events"] == 'y') { 87 $modifTab = 1; 88 $editable[] = $cal_id; 89 $visible[] = $cal_id; 90 } 91} 92 93if ($viewOneCal != 'y') { 94 $smarty->assign('errortype', 401); 95 $smarty->assign('msg', tra("You do not have permission to view the calendar")); 96 $smarty->display("error.tpl"); 97 die; 98} 99 100$listcals = $bufid; 101$infocals["data"] = $bufdata; 102 103// set up list of groups 104$use_default_calendars = false; 105if (isset($_REQUEST["calIds"])and is_array($_REQUEST["calIds"])and count($_REQUEST["calIds"])) { 106 $_SESSION['CalendarViewGroups'] = array_intersect($_REQUEST["calIds"], $listcals); 107 if (! empty($user)) { 108 $tikilib->set_user_preference($user, 'default_calendars', serialize($_SESSION['CalendarViewGroups'])); 109 } 110} elseif (isset($_REQUEST["calIds"])and ! is_array($_REQUEST["calIds"])) { 111 $_SESSION['CalendarViewGroups'] = array_intersect([$_REQUEST["calIds"]], $listcals); 112 if (! empty($user)) { 113 $tikilib->set_user_preference($user, 'default_calendars', serialize($_SESSION['CalendarViewGroups'])); 114 } 115} elseif (! empty($_REQUEST['allCals'])) { 116 $_SESSION['CalendarViewGroups'] = $listcals; 117} elseif (! isset($_SESSION['CalendarViewGroups']) || ! empty($_REQUEST['allCals'])) { 118 $use_default_calendars = true; 119} elseif (isset($_REQUEST["refresh"])and ! isset($_REQUEST["calIds"])) { 120 $_SESSION['CalendarViewGroups'] = []; 121} elseif (! empty($user) || ! isset($_SESSION['CalendarViewGroups'])) { 122 $use_default_calendars = true; 123} 124 125if ($use_default_calendars) { 126 if ($prefs['feature_default_calendars'] == 'y') { 127 $_SESSION['CalendarViewGroups'] = array_intersect(is_array($prefs['default_calendars']) ? $prefs['default_calendars'] : unserialize($prefs['default_calendars']), $listcals); 128 } elseif (! empty($user)) { 129 $user_default_calendars = $tikilib->get_user_preference($user, 'default_calendars', $listcals); 130 if (is_string($user_default_calendars)) { 131 $user_default_calendars = unserialize($user_default_calendars); 132 } 133 $_SESSION['CalendarViewGroups'] = $user_default_calendars; 134 } else { 135 $_SESSION['CalendarViewGroups'] = $listcals; 136 } 137} 138 139$thiscal = []; 140$checkedCals = []; 141 142foreach ($listcals as $thatid) { 143 if (is_array($_SESSION['CalendarViewGroups']) && (in_array("$thatid", $_SESSION['CalendarViewGroups']))) { 144 $thiscal["$thatid"] = 1; 145 $checkedCals[] = $thatid; 146 } else { 147 $thiscal["$thatid"] = 0; 148 } 149} 150 151//include_once("tiki-calendar_setup.php"); 152 153// Calculate all the displayed days for the selected calendars 154/* 155$viewdays = array(); 156foreach ($_SESSION['CalendarViewGroups'] as $calendar) { 157 $info = $calendarlib->get_calendar($calendar); 158 if (is_array($info['viewdays'])) 159 $viewdays = array_merge($info['viewdays'],$viewdays); 160} 161if (empty($viewdays)) { 162 $viewdays = array(0,1,2,3,4,5,6); 163} 164sort($viewdays, SORT_NUMERIC); 165$viewdays = array_map("correct_start_day", array_unique($viewdays)); 166$viewdays2 = array_values($viewdays); 167*/ 168 169if (isset($_REQUEST['sort_mode'])) { 170 $sort_mode = $_REQUEST['sort_mode']; 171} 172 173$viewstart = $_REQUEST['start']; 174$viewend = $_REQUEST['end']; 175 176$viewstart = new DateTime($viewstart); 177$viewstart = $viewstart->getTimestamp(); 178 179$viewend = new DateTime($viewend); 180$viewend = $viewend->getTimestamp(); 181 182if ($_SESSION['CalendarViewGroups']) { 183 $listevents = $calendarlib->list_raw_items($_SESSION['CalendarViewGroups'], $user, $viewstart, $viewend, 0, -1); 184 for ($i = count($listevents) - 1; $i >= 0; --$i) { 185 $listevents[$i]['editable'] = in_array($listevents[$i]['calendarId'], $editable) ? "y" : "n"; 186 $listevents[$i]['visible'] = in_array($listevents[$i]['calendarId'], $visible) ? "y" : "n"; 187 } 188} else { 189 $listevents = []; 190} 191 192 193if ($prefs['feature_theme_control'] == 'y' and isset($_REQUEST['calIds'])) { 194 $cat_type = "calendar"; 195 $cat_objid = $_REQUEST['calIds'][0]; 196} 197 198$events = []; 199foreach ($listevents as $event) { 200 if ($event['editable'] === 'y' and $cal_data["tiki_p_change_events"] == 'y') { 201 $url = 'tiki-calendar_edit_item.php?fullcalendar=y&calitemId=' . $event['calitemId']; 202 } else { 203 $url = 'tiki-calendar_edit_item.php?viewcalitemId=' . $event['calitemId']; // removed fullcalendar=y param to prevent display without tpl for anons in some setups 204 } 205 $events[] = [ 'id' => $event['calitemId'], 206 'title' => $event['name'], 207 'description' => ! empty($event["description"]) ? TikiLib::lib('parser')->parse_data($event["description"], ['is_html' => $prefs['calendar_description_is_html'] === 'y']) : "", 208 'url' => $url, 209 'allDay' => $event['allday'] != 0 , 210 'start' => TikiLib::date_format("c", $event['date_start'], false, 5, false), 211 'end' => TikiLib::date_format("c", $event['date_end'], false, 5, false), 212 'editable' => $event['editable'] === 'y', 213 'color' => '#' . $cals_info['data'][$event['calendarId']]['custombgcolor'], 214 'textColor' => '#' . $cals_info['data'][$event['calendarId']]['customfgcolor']]; 215} 216 217echo json_encode($events); 218