'brief_description','fees','contact','organiser',
'tags');
- if ($event_calendar_times == 'yes') {
+ if ($event_calendar_times != 'no') {
$required_fields[] = 'start_time';
if ($event_calendar_hide_end != 'yes') {
$required_fields[] = 'end_time';
$start_date_text = date("Y-m-d",$start_date);
$event->start_date = strtotime($start_date_text." ".date_default_timezone_get());
- $event->end_date = get_input('end_date','');
+ $end_date = trim(get_input('end_date',''));
+ if ($end_date) {
+ $end_date_text = date("Y-m-d",$end_date);
+ $event->end_date = strtotime($end_date_text." ".date_default_timezone_get());
+ } else {
+ $event->end_date = '';
+ }
- if ($event_calendar_times == 'yes') {
+ if ($event_calendar_times != 'no') {
$sh = get_input('start_time_h','');
$sm = get_input('start_time_m','');
if (is_numeric($sh) && is_numeric($sm)) {
function event_calendar_get_formatted_time($event) {
$date_format = 'j M Y';
- $event_calendar_times = elgg_get_plugin_setting('times', 'event_calendar') == 'yes';
+ $event_calendar_times = elgg_get_plugin_setting('times', 'event_calendar') != 'no';
$start_date = date($date_format,$event->start_date);
if ((!$event->end_date) || ($event->end_date == $event->start_date)) {
return idate('d', mktime(0, 0, 0, ($month + 1), 0, $year));
}
+// TODO - this is not quite right across daylight savings time divides
+// Possible solution: convert stored date to server date, do inc and then convert back to GMT
+
+function event_calendar_modify_full_calendar($event_guid,$day_delta,$minute_delta) {
+ $event = get_entity($event_guid);
+ if (elgg_instanceof($event,'object','event_calendar') && $event->canEdit()) {
+ $event->start_date = strtotime("$day_delta days",$event->start_date)+60*$minute_delta;
+ if ($event->end_date) {
+ $event->end_date = strtotime("$day_delta days",$event->end_date);
+ }
+ $times = elgg_get_plugin_setting('times','event_calendar');
+ //$inc = 24*60*60*$day_delta+60*$minute_delta;
+
+ //$event->real_end_time += $inc;
+ $event->real_end_time = strtotime("$day_delta days",$event->real_end_time)+60*$minute_delta;
+ if ($times != 'no') {
+ $event->start_time += $minute_delta;
+ if ($event->end_time) {
+ $event->end_time += $minute_delta;
+ }
+ }
+ return TRUE;
+ }
+ return FALSE;
+}
foreach($events as $e) {
$event_item = array(
- 'id' => $e->guid,
+ 'guid' => $e->guid,
'title' => $e->title,
'start_date' => $e->start_date,
'end_date' => $e->real_end_time,
} else {
$event_item['allDay'] = TRUE;
}
-
+
$event_array[] = $event_item;
}
// TODO: is there an easy way to avoid embedding JS?
?>
<script>
+
+handleEventDrop = function(event,dayDelta,minuteDelta,allDay,revertFunc) {
+
+ alert(
+ event.title + "(" + event.guid + ") was moved " +
+ dayDelta + " days and " +
+ minuteDelta + " minutes."
+ );
+
+ if (!confirm("Are you sure about this change?")) {
+ revertFunc();
+ } else {
+ elgg.action('event_calendar/modify_full_calendar',
+ {
+ data: {event_guid: event.guid,dayDelta: dayDelta, minuteDelta: minuteDelta},
+ success: function (res) {
+ var success = res.success;
+ var msg = res.message;
+ if (!success) {
+ elgg.register_error(msg,2000);
+ revertFunc()
+ }
+ }
+ }
+ );
+ }
+}
$(document).ready(function() {
var events = <?php echo $json_events_string; ?>;
var cal_events = [];
for (var i = 0; i < events.length; i++) {
cal_events.push({
- id: events[i].id,
+ guid: events[i].guid,
title : events[i].title,
start : new Date(1000*events[i].start_date),
end : new Date(1000*events[i].end_date),
right: 'month,agendaWeek,agendaDay'
},
editable: true,
+ slotMinutes: 5,
+ eventDrop: handleEventDrop,
events: cal_events
});
});
</script>
-<div id='calendar'></div>
\ No newline at end of file
+<div id='calendar'></div>