summaryrefslogtreecommitdiffstats
path: root/apps/calendar/ajax/event/edit.form.php
blob: 1634e7ea416a10ff1d41d8314f0d3eb8d37d71d3 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
<?php
/**
 * Copyright (c) 2011 Bart Visscher <bartv@thisnet.nl>
 * This file is licensed under the Affero General Public License version 3 or
 * later.
 * See the COPYING-README file.
 */

 

if(!OC_USER::isLoggedIn()) {
	die('<script type="text/javascript">document.location = oc_webroot;</script>');
}
OC_JSON::checkAppEnabled('calendar');

$id = $_GET['id'];
$data = OC_Calendar_App::getEventObject($id);
$object = OC_VObject::parse($data['calendardata']);
$vevent = $object->VEVENT;

$dtstart = $vevent->DTSTART;
$dtend = OC_Calendar_Object::getDTEndFromVEvent($vevent);
switch($dtstart->getDateType()) {
	case Sabre_VObject_Element_DateTime::LOCALTZ:
	case Sabre_VObject_Element_DateTime::LOCAL:
		$startdate = $dtstart->getDateTime()->format('d-m-Y');
		$starttime = $dtstart->getDateTime()->format('H:i');
		$enddate = $dtend->getDateTime()->format('d-m-Y');
		$endtime = $dtend->getDateTime()->format('H:i');
		$allday = false;
		break;
	case Sabre_VObject_Element_DateTime::DATE:
		$startdate = $dtstart->getDateTime()->format('d-m-Y');
		$starttime = '';
		$dtend->getDateTime()->modify('-1 day');
		$enddate = $dtend->getDateTime()->format('d-m-Y');
		$endtime = '';
		$allday = true;
		break;
}

$summary = $vevent->getAsString('SUMMARY');
$location = $vevent->getAsString('LOCATION');
$categories = $vevent->getAsString('CATEGORIES');
$description = $vevent->getAsString('DESCRIPTION');
$last_modified = $vevent->__get('LAST-MODIFIED');
if ($last_modified){
	$lastmodified = $last_modified->getDateTime()->format('U');
}else{
	$lastmodified = 0;
}
if($data['repeating'] == 1){
	$rrule = explode(';', $vevent->getAsString('RRULE'));
	$rrulearr = array();
	foreach($rrule as $rule){
		list($attr, $val) = explode('=', $rule);
		$rrulearr[$attr] = $val;
	}
	if(!isset($rrulearr['INTERVAL']) || $rrulearr['INTERVAL'] == ''){
		$rrulearr['INTERVAL'] = 1;
	}
	if(array_key_exists('BYDAY', $rrulearr)){
		if(substr_count($rrulearr['BYDAY'], ',') == 0){
			if(strlen($rrulearr['BYDAY']) == 2){
				$repeat['weekdays'] = array($rrulearr['BYDAY']);
			}elseif(strlen($rrulearr['BYDAY']) == 3){
				$repeat['weekofmonth'] = substr($rrulearr['BYDAY'], 0, 1);
				$repeat['weekdays'] = array(substr($rrulearr['BYDAY'], 1, 2));
			}elseif(strlen($rrulearr['BYDAY']) == 4){
				$repeat['weekofmonth'] = substr($rrulearr['BYDAY'], 0, 2);
				$repeat['weekdays'] = array(substr($rrulearr['BYDAY'], 2, 2));
			}
		}else{
			$byday_days = explode(',', $rrulearr['BYDAY']);
			foreach($byday_days as $byday_day){
				if(strlen($byday_day) == 2){
					$repeat['weekdays'][] = $byday_day;
				}elseif(strlen($byday_day) == 3){
					$repeat['weekofmonth'] = substr($byday_day , 0, 1);
					$repeat['weekdays'][] = substr($byday_day , 1, 2);
				}elseif(strlen($byday_day) == 4){
					$repeat['weekofmonth'] = substr($byday_day , 0, 2);
					$repeat['weekdays'][] = substr($byday_day , 2, 2);
				}
			}
		}
	}
	if(array_key_exists('BYMONTHDAY', $rrulearr)){
		if(substr_count($rrulearr['BYMONTHDAY'], ',') == 0){
			$repeat['bymonthday'][] = $rrulearr['BYMONTHDAY'];
		}else{
			$bymonthdays = explode(',', $rrulearr['BYMONTHDAY']);
			foreach($bymonthdays as $bymonthday){
				$repeat['bymonthday'][] = $bymonthday;
			}
		}
	}
	if(array_key_exists('BYYEARDAY', $rrulearr)){
		if(substr_count($rrulearr['BYYEARDAY'], ',') == 0){
			$repeat['byyearday'][] = $rrulearr['BYYEARDAY'];
		}else{
			$byyeardays = explode(',', $rrulearr['BYYEARDAY']);
			foreach($byyeardays  as $yearday){
				$repeat['byyearday'][] = $yearday;
			}
		}
	}
	if(array_key_exists('BYWEEKNO', $rrulearr)){
		if(substr_count($rrulearr['BYWEEKNO'], ',') == 0){
			$repeat['byweekno'][] = (string) $rrulearr['BYWEEKNO'];
		}else{
			$byweekno = explode(',', $rrulearr['BYWEEKNO']);
			foreach($byweekno as $weekno){
				$repeat['byweekno'][] = (string) $weekno;
			}
		}
	}
	if(array_key_exists('BYMONTH', $rrulearr)){
		$months = OC_Calendar_App::getByMonthOptions();
		if(substr_count($rrulearr['BYMONTH'], ',') == 0){
			$repeat['bymonth'][] = $months[$month];
		}else{
			$bymonth = explode(',', $rrulearr['BYMONTH']);
			foreach($bymonth as $month){
				$repeat['bymonth'][] = $months[$month];
			}
		}
	}
	switch($rrulearr['FREQ']){
		case 'DAILY':
			$repeat['repeat'] = 'daily';
			break;
		case 'WEEKLY':
			if($rrulearr['INTERVAL'] % 2 == 0){
				$repeat['repeat'] = 'biweekly';
				$rrulearr['INTERVAL'] = $rrulearr['INTERVAL'] / 2;
			}elseif($rrulearr['BYDAY'] == 'MO,TU,WE,TH,FR'){
				$repeat['repeat'] = 'weekday';
			}else{
				$repeat['repeat'] = 'weekly';
			}
			break;
		case 'MONTHLY':
			$repeat['repeat'] = 'monthly';
			if(array_key_exists('BYDAY', $rrulearr)){
				$repeat['month'] = 'weekday';
			}else{
				$repeat['month'] = 'monthday';
			}
			break;
		case 'YEARLY':
			$repeat['repeat'] = 'yearly';
			if(array_key_exists('BYMONTH', $rrulearr)){
				$repeat['year'] = 'bydaymonth';
			}elseif(array_key_exists('BYWEEKNO', $rrulearr)){
				$repeat['year'] = 'byweekno';
			}else{
				$repeat['year'] = 'byyearday';
			}
	}
	$repeat['interval'] = $rrulearr['INTERVAL'];
	if(array_key_exists('COUNT', $rrulearr)){
		$repeat['end'] = 'count';
		$repeat['count'] = $rrulearr['COUNT'];
	}elseif(array_key_exists('UNTIL', $rrulearr)){
		$repeat['end'] = 'date';
		$endbydate_day = substr($rrulearr['UNTIL'], 6, 2);
		$endbydate_month = substr($rrulearr['UNTIL'], 4, 2);
		$endbydate_year = substr($rrulearr['UNTIL'], 0, 4);
		$repeat['date'] = $endbydate_day . '-' .  $endbydate_month . '-' . $endbydate_year;
	}else{
		$repeat['end'] = 'never';
	}
	if(array_key_exists('weekdays', $repeat)){
		$repeat_weekdays_ = array();
		$days = OC_Calendar_App::getWeeklyOptions();
		foreach($repeat['weekdays'] as $weekday){
			$repeat_weekdays_[] = $days[$weekday];
		}
		$repeat['weekdays'] = $repeat_weekdays_;
	}
}else{
	$repeat['repeat'] = 'doesnotrepeat';
}

$calendar_options = OC_Calendar_Calendar::allCalendars(OC_User::getUser());
$repeat_options = OC_Calendar_App::getRepeatOptions();
$repeat_end_options = OC_Calendar_App::getEndOptions();
$repeat_month_options = OC_Calendar_App::getMonthOptions();
$repeat_year_options = OC_Calendar_App::getYearOptions();
$repeat_weekly_options = OC_Calendar_App::getWeeklyOptions();
$repeat_weekofmonth_options = OC_Calendar_App::getWeekofMonth();
$repeat_byyearday_options = OC_Calendar_App::getByYearDayOptions();
$repeat_bymonth_options = OC_Calendar_App::getByMonthOptions();
$repeat_byweekno_options = OC_Calendar_App::getByWeekNoOptions();
$repeat_bymonthday_options = OC_Calendar_App::getByMonthDayOptions();

$tmpl = new OC_Template('calendar', 'part.editevent');
$tmpl->assign('id', $id);
$tmpl->assign('lastmodified', $lastmodified);
$tmpl->assign('calendar_options', $calendar_options);
$tmpl->assign('repeat_options', $repeat_options);
$tmpl->assign('repeat_month_options', $repeat_month_options);
$tmpl->assign('repeat_weekly_options', $repeat_weekly_options);
$tmpl->assign('repeat_end_options', $repeat_end_options);
$tmpl->assign('repeat_year_options', $repeat_year_options);
$tmpl->assign('repeat_byyearday_options', $repeat_byyearday_options);
$tmpl->assign('repeat_bymonth_options', $repeat_bymonth_options);
$tmpl->assign('repeat_byweekno_options', $repeat_byweekno_options);
$tmpl->assign('repeat_bymonthday_options', $repeat_bymonthday_options);
$tmpl->assign('repeat_weekofmonth_options', $repeat_weekofmonth_options);

$tmpl->assign('title', $summary);
$tmpl->assign('location', $location);
$tmpl->assign('categories', $categories);
$tmpl->assign('calendar', $data['calendarid']);
$tmpl->assign('allday', $allday);
$tmpl->assign('startdate', $startdate);
$tmpl->assign('starttime', $starttime);
$tmpl->assign('enddate', $enddate);
$tmpl->assign('endtime', $endtime);
$tmpl->assign('description', $description);

$tmpl->assign('repeat', $repeat['repeat']);
if($repeat['repeat'] != 'doesnotrepeat'){
	$tmpl->assign('repeat_month', $repeat['month']);
	$tmpl->assign('repeat_weekdays', $repeat['weekdays']);
	$tmpl->assign('repeat_interval', $repeat['interval']);
	$tmpl->assign('repeat_end', $repeat['end']);
	$tmpl->assign('repeat_count', $repeat['count']);
	$tmpl->assign('repeat_weekofmonth', $repeat['weekofmonth']);
	$tmpl->assign('repeat_date', $repeat['date']);
	$tmpl->assign('repeat_year', $repeat['year']);
	$tmpl->assign('repeat_byyearday', $repeat['byyearday']);
	$tmpl->assign('repeat_bymonthday', $repeat['bymonthday']);
	$tmpl->assign('repeat_bymonth', $repeat['bymonth']);
	$tmpl->assign('repeat_byweekno', $repeat['byweekno']);
} else {
	$tmpl->assign('repeat_month', 'monthday');
	$tmpl->assign('repeat_weekdays', array());
	$tmpl->assign('repeat_interval', 1);
	$tmpl->assign('repeat_end', 'never');
	$tmpl->assign('repeat_count', '10');
	$tmpl->assign('repeat_weekofmonth', 'auto');
	$tmpl->assign('repeat_date', '');
	$tmpl->assign('repeat_year', 'bydate');
}
$tmpl->printpage();