From 0b25adcd921149b50845647980284e8ab66d8fed Mon Sep 17 00:00:00 2001
From: Kevin Jardine
Date: Tue, 3 Apr 2012 12:31:42 +0200
Subject: major changes to add new features, including a full calendar and
repeating events
---
start.php | 25 +++++++++++++++++++++++++
1 file changed, 25 insertions(+)
(limited to 'start.php')
diff --git a/start.php b/start.php
index e838194f5..523987154 100644
--- a/start.php
+++ b/start.php
@@ -265,6 +265,9 @@ function event_calendar_page_handler($page) {
gatekeeper();
echo event_calendar_get_page_content_review_requests($page[1]);
break;
+ case 'get_fullcalendar_events':
+ echo event_calendar_get_page_content_fullcalendar_events($page[1],$page[2],$page[3],$page[4]);
+ break;
default:
return FALSE;
}
@@ -365,3 +368,25 @@ function event_calendar_entity_menu_prepare($hook, $type, $return, $params) {
return $return;
}
+
+function event_calendar_handle_join($event, $object_type, $object) {
+ $group = $object['group'];
+ $user = $object['user'];
+ $user_guid = $user->getGUID();
+ $events = event_calendar_get_events_for_group($group->getGUID());
+ foreach ($events as $event) {
+ $event_id = $event->getGUID();
+ event_calendar_add_personal_event($event_id,$user_guid);
+ }
+}
+
+function event_calendar_handle_leave($event, $object_type, $object) {
+ $group = $object['group'];
+ $user = $object['user'];
+ $user_guid = $user->getGUID();
+ $events = event_calendar_get_events_for_group($group->getGUID());
+ foreach ($events as $event) {
+ $event_id = $event->getGUID();
+ event_calendar_remove_personal_event($event_id,$user_guid);
+ }
+}
--
cgit v1.2.3
From 58126731fe957c604c1989d59d41534f8fbcf04b Mon Sep 17 00:00:00 2001
From: Kevin Jardine
Date: Fri, 13 Apr 2012 17:20:49 +0200
Subject: added support for event polls (needs the event_poll plugin)
---
actions/event_calendar/edit.php | 4 ++++
models/model.php | 4 ++--
start.php | 12 +++++++++++-
3 files changed, 17 insertions(+), 3 deletions(-)
(limited to 'start.php')
diff --git a/actions/event_calendar/edit.php b/actions/event_calendar/edit.php
index 0cc956d73..aef1a59cc 100644
--- a/actions/event_calendar/edit.php
+++ b/actions/event_calendar/edit.php
@@ -34,6 +34,10 @@ if ($event) {
add_to_river('river/object/event_calendar/create','create',$user_guid,$event->guid);
system_message(elgg_echo('event_calendar:add_event_response'));
}
+
+ if ($event->schedule_type == 'poll') {
+ forward('event_poll/add/'.$event->guid);
+ }
forward($event->getURL());
} else {
diff --git a/models/model.php b/models/model.php
index b29ad2ad7..6fe54ab3d 100644
--- a/models/model.php
+++ b/models/model.php
@@ -55,7 +55,7 @@ function event_calendar_set_event_from_form($event_guid,$group_guid) {
$required_fields[] = 'spots';
}
} else {
- $required_fields = array('title','start_date');
+ $required_fields = array('title');
}
if ($event_guid) {
@@ -2118,4 +2118,4 @@ function event_calendar_flatten_event_structure($events) {
}
}
return $flattened;
-}
\ No newline at end of file
+}
diff --git a/start.php b/start.php
index 523987154..86a94fbd9 100644
--- a/start.php
+++ b/start.php
@@ -64,7 +64,7 @@ function event_calendar_init() {
elgg_extend_view('css/elgg', 'event_calendar/css');
$event_calendar_listing_format = elgg_get_plugin_setting('listing_format', 'event_calendar');
- if ($event_calendar_listing_format == 'full') {
+ if (elgg_plugin_exists('event_poll') || ($event_calendar_listing_format == 'full')) {
elgg_extend_view('css/elgg', 'fullcalendar/css');
$plugin_js = elgg_get_simplecache_url('js', 'event_calendar/fullcalendar');
elgg_register_js('elgg.full_calendar', $plugin_js);
@@ -287,6 +287,16 @@ function event_calendar_entity_menu_setup($hook, $type, $return, $params) {
if ($handler != 'event_calendar') {
return $return;
}
+ if (elgg_plugin_exists('event_poll') && $entity->canEdit() && $entity->schedule_type == 'poll') {
+ $options = array(
+ 'name' => 'schedule',
+ 'text' => elgg_echo('event_poll:schedule_button'),
+ 'title' => elgg_echo('event_poll:schedule_button'),
+ 'href' => 'event_poll/schedule/'.$entity->guid,
+ 'priority' => 150,
+ );
+ $return[] = ElggMenuItem::factory($options);
+ }
$user_guid = elgg_get_logged_in_user_guid();
if ($user_guid) {
$calendar_status = event_calendar_personal_can_manage($entity,$user_guid);
--
cgit v1.2.3
From a9a76a300972a6451aa45a83e094e697d4c51bf6 Mon Sep 17 00:00:00 2001
From: Kevin Jardine
Date: Thu, 26 Apr 2012 13:17:00 +0200
Subject: Reminder messages are now actually queued for sending (requires
message_queue plugin to actually send).
---
languages/en.php | 14 +++++++-
models/model.php | 99 +++++++++++++++++++++++++++++++++++++++++++++++++++++---
start.php | 7 ++++
3 files changed, 115 insertions(+), 5 deletions(-)
(limited to 'start.php')
diff --git a/languages/en.php b/languages/en.php
index cef293be0..d4cb8ac9e 100644
--- a/languages/en.php
+++ b/languages/en.php
@@ -305,7 +305,19 @@ You can manage calendar requests for this event here:
'event_calendar:repeated_event:week_single' => "every week.",
'event_calendar:repeated_event:format' => "Starting on %s and repeated on %s",
'event_calendar:settings:repeated_events:title' => "Allow repeated events (currently only works properly in full calendar mode)",
- 'event_calendar:settings:reminders:title' => "Allow sending reminders (To be done - currently does not send reminders)",
+ 'event_calendar:settings:reminders:title' => "Allow sending reminders",
+ 'event_calendar:reminder:subject' => "Reminder for event: %s",
+ 'event_calendar:reminder:body' => "The event
+
+%s
+
+takes place at
+
+%s.
+
+You can visit the event page here:
+%s
+ ",
/**
* Event calendar river
diff --git a/models/model.php b/models/model.php
index 6fe54ab3d..0dd72a595 100644
--- a/models/model.php
+++ b/models/model.php
@@ -85,7 +85,7 @@ function event_calendar_set_event_from_form($event_guid,$group_guid) {
//$end_date = trim(get_input('end_date',''));
// convert start date from current server time to GMT
$start_date_text = gmdate("Y-m-d",$start_date);
- $event->munged_start_date_string = $start_date_text." ".date_default_timezone_get();
+ //$event->munged_start_date_string = $start_date_text." ".date_default_timezone_get();
$event->start_date = strtotime($start_date_text." ".date_default_timezone_get());
$end_date = trim(get_input('end_date',''));
@@ -93,7 +93,7 @@ function event_calendar_set_event_from_form($event_guid,$group_guid) {
if ($end_date) {
$end_date_text = gmdate("Y-m-d",$end_date);
$event->end_date = strtotime($end_date_text." ".date_default_timezone_get());
- $event->munged_end_date_string = $end_date_text." ".date_default_timezone_get();
+ //$event->munged_end_date_string = $end_date_text." ".date_default_timezone_get();
} else {
$event->end_date = '';
}
@@ -189,7 +189,7 @@ function event_calendar_set_event_from_form($event_guid,$group_guid) {
return $event;
}
-function event_calendar_get_events_between($start_date,$end_date,$is_count,$limit=10,$offset=0,$container_guid=0,$region='-') {
+function event_calendar_get_events_between($start_date,$end_date,$is_count=FALSE,$limit=10,$offset=0,$container_guid=0,$region='-') {
if ($is_count) {
$count = event_calendar_get_entities_from_metadata_between2('start_date','end_date',
$start_date, $end_date, "object", "event_calendar", 0, $container_guid, $limit,$offset,"",0,false,true,$region);
@@ -1059,7 +1059,7 @@ function event_calendar_get_personal_events_for_user($user_guid,$limit) {
// the old way used annotations, and the new Elgg 1.8 way uses relationships
// for now this version attempts to bridge the gap by using both methods for older sites
-function event_calendar_get_users_for_event($event_guid,$limit,$offset,$is_count) {
+function event_calendar_get_users_for_event($event_guid,$limit,$offset=0,$is_count=FALSE) {
$options = array(
'type' => 'user',
'relationship' => 'personal_event',
@@ -2119,3 +2119,94 @@ function event_calendar_flatten_event_structure($events) {
}
return $flattened;
}
+
+function event_calendar_queue_reminders() {
+ // game plan - get all events up to 60 days ahead
+ // with no reminder sent
+ // compute reminder period
+ // if <= current time, set reminder_queued flag and queue the
+ // notification message using the message_queue plugin
+ if (elgg_plugin_exists('message_queue')) {
+ $now = time();
+ // oops - this does not work for repeated events
+ // need extra stuff for that
+ /*$options = array(
+ 'type' => 'object',
+ 'subtype' => 'event_calendar',
+ 'metadata_name_value_pairs' => array(
+ array('name' => 'reminder_queued', 'value' => 'no'),
+ array('name' => 'send_reminder', 'value' => 1),
+ array('name' => 'start_date', 'value' => $now + 60*24*60*60, 'operand' => '>='),
+ ),
+ 'limit' => 0,
+ );
+ $events = elgg_get_entities_from_metadata($options);
+ */
+ $event_list = event_calendar_get_events_between($now,$now + 60*24*60*60,FALSE,0);
+
+ foreach($event_list as $es) {
+ $e = $es['event'];
+ if ($e->send_reminder) {
+ $reminder_period = 60*$e->reminder_interval*$e->reminder_number;
+ if ($e->repeats) {
+ // repeated events require more complex handing
+ foreach($es['data'] as $d) {
+ // if event falls in the reminder period
+ if ($d->start_time - $reminder_period >= $now) {
+ // and the reminder has not already been queued
+ if (!event_calendar_repeat_reminder_logged($e,$d->start_time)) {
+ // set the reminder queued flag
+ event_calendar_repeat_reminder_log($e,$d->start_time);
+ // queue the reminder for sending
+ event_calendar_queue_reminder($e);
+ }
+ break;
+ }
+ }
+ } else {
+ // if this is just a normal non-repeated event, then we just need to set a flag and queue the reminder
+ if (($e->reminder_queued != 'yes') && ($e->start_date - $now <= $reminder_period)) {
+ $e->reminder_queued = 'yes';
+ event_calendar_queue_reminder($e);
+ }
+ }
+ }
+ }
+ }
+}
+
+function event_calendar_repeat_reminder_log($e,$start) {
+ // this simple log just uses annotations on the event
+ // TODO - remove log entries for past events
+ create_annotation($e->guid, 'repeat_reminder_log_item', $start, '',0,ACCESS_PUBLIC);
+}
+
+function event_calendar_repeat_reminder_logged($e,$start) {
+ $options = array(
+ 'guid' => $e->guid,
+ 'annotation_name' => 'repeat_reminder_log_item',
+ 'annotation_value' => $start,
+ 'limit' => 1
+ );
+
+ if (elgg_get_annotations($options)) {
+ return TRUE;
+ } else {
+ return FALSE;
+ }
+}
+
+function event_calendar_queue_reminder($e) {
+ elgg_load_library('elgg:message_queue');
+ $subject = elgg_echo('event_calendar:reminder:subject',array($e->title));
+ $time_string = event_calendar_get_formatted_time($e);
+ $body = elgg_echo('event_calendar:reminder:body',array($e->title,$time_string,$e->getURL()));
+ $m = message_queue_create_message($subject,$body);
+ if ($m) {
+ $users = event_calendar_get_users_for_event($e->guid,0);
+ foreach($users as $u) {
+ message_queue_add($m->guid,$u->guid);
+ }
+ message_queue_set_for_sending($m->guid);
+ }
+}
diff --git a/start.php b/start.php
index 86a94fbd9..4c17c719b 100644
--- a/start.php
+++ b/start.php
@@ -16,6 +16,8 @@ elgg_register_event_handler('init','system','event_calendar_init');
function event_calendar_init() {
elgg_register_library('elgg:event_calendar', elgg_get_plugins_path() . 'event_calendar/models/model.php');
+
+ elgg_register_plugin_hook_handler('cron', 'fiveminute', 'event_calendar_handle_reminders_cron',400);
// Register a page handler, so we can have nice URLs
elgg_register_page_handler('event_calendar','event_calendar_page_handler');
@@ -400,3 +402,8 @@ function event_calendar_handle_leave($event, $object_type, $object) {
event_calendar_remove_personal_event($event_id,$user_guid);
}
}
+
+function event_calendar_handle_reminders_cron() {
+ elgg_load_library('elgg:event_calendar');
+ event_calendar_queue_reminders();
+}
--
cgit v1.2.3
From b8c3767f8c790febb35141919936d616d3ebe2d4 Mon Sep 17 00:00:00 2001
From: Kevin Jardine
Date: Thu, 24 May 2012 20:00:18 +0200
Subject: changed time handling and added more suppport for event polls
---
languages/en.php | 5 +
models/model.php | 225 ++++++++++++++-------
start.php | 1 +
views/default/event_calendar/css.php | 7 +-
views/default/event_calendar/datetime_edit.php | 12 +-
.../default/event_calendar/full_calendar_view.php | 2 +-
.../event_calendar/personal_manage_section.php | 20 ++
views/default/event_calendar/reminder_section.php | 28 +++
views/default/event_calendar/schedule_section.php | 22 ++
views/default/event_calendar/share_section.php | 26 +++
views/default/forms/event_calendar/edit.php | 110 +++-------
views/default/input/datepicker_inline.php | 3 +-
views/default/input/timepicker.php | 90 +++------
views/default/js/event_calendar/event_calendar.php | 24 +++
14 files changed, 345 insertions(+), 230 deletions(-)
create mode 100644 views/default/event_calendar/personal_manage_section.php
create mode 100644 views/default/event_calendar/reminder_section.php
create mode 100644 views/default/event_calendar/schedule_section.php
create mode 100644 views/default/event_calendar/share_section.php
(limited to 'start.php')
diff --git a/languages/en.php b/languages/en.php
index 5f060748c..782cd7a72 100644
--- a/languages/en.php
+++ b/languages/en.php
@@ -290,6 +290,7 @@ You can manage calendar requests for this event here:
'event_calendar:site_calendar' => "Site-wide calendar",
'event_calendar:calendar_label' => "Calendar",
'event_calendar:calendar_description' => "Calendar for this event.",
+ 'event_calendar:are_you_sure' => "Are you sure about this change?",
'event_calendar:schedule:header' => "Schedule",
'event_calendar:permissions:header' => "Permissions",
'event_calendar:read_access' => "Read access",
@@ -298,6 +299,9 @@ You can manage calendar requests for this event here:
'event_calendar:share_ownership:description' => "Allow the following people to edit or delete this event, invite participants, etc.",
'event_calendar:settings:fewer_fields:title' => "Hide fees, contact, organiser and long description fields",
'event_calendar:settings:restricted_times:title' => "Restricted time to between 6am and 9pm (6:00 and 21:00)",
+ 'event_calendar:add_event' => "Add event",
+ 'event_calendar:schedule_event' => "Schedule event",
+ 'event_calendar:list_polls' => "List event polls",
'event_calendar:edit_form:error:missing_title' => "Error: please supply the missing title.",
'event_calendar:repeated_event:week_interval' => "every %s weeks.",
'event_calendar:repeated_event:week_single' => "every week.",
@@ -305,6 +309,7 @@ You can manage calendar requests for this event here:
'event_calendar:settings:repeated_events:title' => "Allow repeated events (currently only works properly in full calendar mode)",
'event_calendar:settings:reminders:title' => "Allow sending reminders",
'event_calendar:reminder:subject' => "Reminder for event: %s",
+ 'event_calendar:poll_suffix' => "(poll)",
'event_calendar:reminder:body' => "The event
%s
diff --git a/models/model.php b/models/model.php
index 042d21736..7de514802 100644
--- a/models/model.php
+++ b/models/model.php
@@ -22,6 +22,22 @@ function event_calendar_get_event_for_edit($event_id) {
}
}
+// converts to time in minutes since midnight
+function event_calendar_convert_to_time($hour,$minute,$meridian) {
+ if ($meridian) {
+ if ($meridian == 'am') {
+ if ($hour == 12) {
+ $hour = 0;
+ }
+ } else {
+ if ($hour < 12) {
+ $hour += 12;
+ }
+ }
+ }
+ return 60*$hour+$minute;
+}
+
// returns the event or FALSE
function event_calendar_set_event_from_form($event_guid,$group_guid) {
@@ -33,6 +49,7 @@ function event_calendar_set_event_from_form($event_guid,$group_guid) {
$event_calendar_more_required = elgg_get_plugin_setting('more_required', 'event_calendar');
$event_calendar_personal_manage = elgg_get_plugin_setting('personal_manage', 'event_calendar');
$event_calendar_repeating_events = elgg_get_plugin_setting('repeating_events', 'event_calendar');
+ $schedule_type = get_input('schedule_type');
if ($event_calendar_more_required == 'yes') {
$required_fields = array('title','venue','start_date',
@@ -80,41 +97,47 @@ function event_calendar_set_event_from_form($event_guid,$group_guid) {
$event->description = get_input('description');
$event->venue = get_input('venue');
- $start_date = get_input('start_date');
- $event->original_start_date = get_input('start_date');
- //$end_date = trim(get_input('end_date',''));
- // convert start date from current server time to GMT
- $start_date_text = gmdate("Y-m-d",$start_date);
- //$event->munged_start_date_string = $start_date_text." ".date_default_timezone_get();
-
- $event->start_date = strtotime($start_date_text." ".date_default_timezone_get());
- $end_date = trim(get_input('end_date',''));
- $event->original_end_date = get_input('end_date');
- if ($end_date) {
- $end_date_text = gmdate("Y-m-d",$end_date);
- $event->end_date = strtotime($end_date_text." ".date_default_timezone_get());
- //$event->munged_end_date_string = $end_date_text." ".date_default_timezone_get();
- } else {
- $event->end_date = '';
- }
-
- if ($event_calendar_times != 'no') {
- $st = get_input('start_time','');
- if (is_numeric($st)) {
- $event->start_time = $st;
- } else {
- $event->start_time = '';
- }
- $et = get_input('end_time','');
- if (is_numeric($et)) {
- $event->end_time = $et;
+ if ($schedule_type != 'poll') {
+ $start_date_text = trim(get_input('start_date'));
+ /*$event->original_start_date = get_input('start_date');
+ //$end_date = trim(get_input('end_date',''));
+ // convert start date from current server time to GMT
+ $start_date_text = gmdate("Y-m-d",$start_date);
+ //$event->munged_start_date_string = $start_date_text." ".date_default_timezone_get();*/
+
+ // TODO: is the timezone bit necessary?
+ $event->start_date = strtotime($start_date_text." ".date_default_timezone_get());
+ $end_date_text = trim(get_input('end_date',''));
+ //$event->original_end_date = get_input('end_date');
+ if ($end_date_text) {
+ $event->end_date = strtotime($end_date_text." ".date_default_timezone_get());
+ //$event->munged_end_date_string = $end_date_text." ".date_default_timezone_get();
} else {
- $event->end_time = '';
+ $event->end_date = '';
}
- if (is_numeric($event->start_time)) {
- // Set start date to the Unix start time, if set.
- // This allows sorting by date *and* time.
- $event->start_date += $event->start_time*60;
+
+ if ($event_calendar_times != 'no') {
+ $hour = get_input('start_time_hour','');
+ $minute = get_input('start_time_minute','');
+ $meridian = get_input('start_time_meridian','');
+ if (is_numeric($hour) && is_numeric($minute)) {
+ $event->start_time = event_calendar_convert_to_time($hour,$minute,$meridian);
+ } else {
+ $event->start_time = '';
+ }
+ $hour = get_input('end_time_hour','');
+ $minute = get_input('end_time_minute','');
+ $meridian = get_input('end_time_meridian','');
+ if (is_numeric($hour) && is_numeric($minute)) {
+ $event->end_time = event_calendar_convert_to_time($hour,$minute,$meridian);
+ } else {
+ $event->end_time = '';
+ }
+ if (is_numeric($event->start_date) && is_numeric($event->start_time)) {
+ // Set start date to the Unix start time, if set.
+ // This allows sorting by date *and* time.
+ $event->start_date += $event->start_time*60;
+ }
}
}
if ($event_calendar_spots_display == 'yes') {
@@ -147,8 +170,7 @@ function event_calendar_set_event_from_form($event_guid,$group_guid) {
$event->organiser = get_input('organiser');
$event->tags = string_to_tag_array(get_input('tags'));
$event->long_description = get_input('long_description');
- $event->all_day = get_input('all_day');
- $event->schedule_type = get_input('schedule_type');
+ $event->schedule_type = $schedule_type;
$event->send_reminder = get_input('send_reminder');
$event->reminder_number = get_input('reminder_number');
$event->reminder_interval = get_input('reminder_interval');
@@ -193,7 +215,8 @@ function event_calendar_set_event_from_form($event_guid,$group_guid) {
return $event;
}
-function event_calendar_get_events_between($start_date,$end_date,$is_count=FALSE,$limit=10,$offset=0,$container_guid=0,$region='-') {
+function event_calendar_get_events_between($start_date,$end_date,$is_count=FALSE,$limit=10,$offset=0,$container_guid=0,$region='-') {
+ $polls_supported = elgg_is_active_plugin('event_poll');
if ($is_count) {
$count = event_calendar_get_entities_from_metadata_between2('start_date','end_date',
$start_date, $end_date, "object", "event_calendar", 0, $container_guid, $limit,$offset,"",0,false,true,$region);
@@ -203,6 +226,11 @@ function event_calendar_get_events_between($start_date,$end_date,$is_count=FALSE
$start_date, $end_date, "object", "event_calendar", 0, $container_guid, $limit,$offset,"",0,false,false,$region);
$repeating_events = event_calendar_get_repeating_events_between($start_date,$end_date,$container_guid,$region);
$all_events = event_calendar_merge_repeating_events($events, $repeating_events);
+ if ($polls_supported) {
+ elgg_load_library('elgg:event_poll');
+ $all_events = event_poll_merge_poll_events($all_events,$start_date,$end_date);
+ }
+
return $all_events;
}
}
@@ -1204,10 +1232,12 @@ function event_calendar_get_formatted_full_items($event) {
$event_calendar_region_display = elgg_get_plugin_setting('region_display', 'event_calendar');
$event_calendar_type_display = elgg_get_plugin_setting('type_display', 'event_calendar');
$event_items = array();
- $item = new stdClass();
- $item->title = elgg_echo('event_calendar:when_label');
- $item->value = $time_bit;
- $event_items[] = $item;
+ if ($time_bit) {
+ $item = new stdClass();
+ $item->title = elgg_echo('event_calendar:when_label');
+ $item->value = $time_bit;
+ $event_items[] = $item;
+ }
$item = new stdClass();
$item->title = elgg_echo('event_calendar:venue_label');
$item->value = htmlspecialchars($event->venue);
@@ -1244,6 +1274,9 @@ function event_calendar_get_formatted_full_items($event) {
}
function event_calendar_get_formatted_time($event) {
+ if (!$event->start_date) {
+ return '';
+ }
$date_format = 'j M Y';
$event_calendar_times = elgg_get_plugin_setting('times', 'event_calendar') != 'no';
@@ -1448,18 +1481,9 @@ function event_calendar_get_page_content_list($page_type,$container_guid,$start_
elgg_push_context('groups');
elgg_set_page_owner_guid($container_guid);
$user_guid = elgg_get_logged_in_user_guid();
- $group_calendar = elgg_get_plugin_setting('group_calendar', 'event_calendar');
- if (!$group_calendar || $group_calendar == 'members') {
- if (elgg_get_page_owner_entity()->canWriteToContainer($user_guid)){
- elgg_register_menu_item('title', array(
- 'name' => 'add',
- 'href' => "event_calendar/add/".$container_guid,
- 'text' => elgg_echo('event_calendar:add'),
- 'class' => 'elgg-button elgg-button-action',
- ));
- }
- } else if ($group_calendar == 'admin') {
- if (elgg_is_admin_logged_in() || ($group->owner_guid == $user_guid)) {
+ // TODO - ideally avoid the check on the event_poll plugin, perhaps by having event_poll remove the menu item
+ if(event_calendar_can_add($container_guid)) {
+ if (!elgg_plugin_exists('event_poll')) {
elgg_register_menu_item('title', array(
'name' => 'add',
'href' => "event_calendar/add/".$container_guid,
@@ -1470,20 +1494,9 @@ function event_calendar_get_page_content_list($page_type,$container_guid,$start_
}
} else {
elgg_push_breadcrumb(elgg_echo('item:object:event_calendar'));
- $site_calendar = elgg_get_plugin_setting('site_calendar', 'event_calendar');
- if (!$site_calendar || $site_calendar == 'admin') {
- // only admins can post directly to the site-wide calendar
- if (elgg_is_admin_logged_in()) {
- elgg_register_menu_item('title', array(
- 'name' => 'add',
- 'href' => "event_calendar/add",
- 'text' => elgg_echo('event_calendar:add'),
- 'class' => 'elgg-button elgg-button-action',
- ));
- }
- } else if ($site_calendar == 'loggedin') {
- // any logged-in user can post to the site calendar
- if (elgg_is_logged_in()) {
+ $user_guid = elgg_get_logged_in_user_guid();
+ if(event_calendar_can_add($container_guid)) {
+ if (!elgg_plugin_exists('event_poll')) {
elgg_register_menu_item('title', array(
'name' => 'add',
'href' => "event_calendar/add",
@@ -1535,7 +1548,7 @@ function event_calendar_get_page_content_edit($page_type,$guid) {
$event = get_entity((int)$guid);
if (elgg_instanceof($event, 'object', 'event_calendar') && $event->canEdit()) {
$body_vars['event'] = $event;
- $body_vars['form_data'] = event_calendar_prepare_edit_form_vars($event);
+ $body_vars['form_data'] = event_calendar_prepare_edit_form_vars($event,$page_type);
$event_container = get_entity($event->container_guid);
if (elgg_instanceof($event_container, 'group')) {
@@ -1554,6 +1567,7 @@ function event_calendar_get_page_content_edit($page_type,$guid) {
}
} else {
$title = elgg_echo('event_calendar:add_event_title');
+
if ($guid) {
// add to group
$group = get_entity($guid);
@@ -1561,7 +1575,7 @@ function event_calendar_get_page_content_edit($page_type,$guid) {
$body_vars['group_guid'] = $guid;
elgg_push_breadcrumb(elgg_echo('event_calendar:group_breadcrumb'), 'event_calendar/group/'.$guid);
elgg_push_breadcrumb(elgg_echo('event_calendar:add_event_title'));
- $body_vars['form_data'] = event_calendar_prepare_edit_form_vars();
+ $body_vars['form_data'] = event_calendar_prepare_edit_form_vars(NULL,$page_type);
$content = elgg_view_form('event_calendar/edit', $vars, $body_vars);
} else {
$content = elgg_echo('event_calendar:no_group');
@@ -1571,7 +1585,7 @@ function event_calendar_get_page_content_edit($page_type,$guid) {
elgg_push_breadcrumb(elgg_echo('event_calendar:show_events_title'),'event_calendar/list');
elgg_push_breadcrumb(elgg_echo('event_calendar:add_event_title'));
- $body_vars['form_data'] = event_calendar_prepare_edit_form_vars();
+ $body_vars['form_data'] = event_calendar_prepare_edit_form_vars(NULL,$page_type);
$content = elgg_view_form('event_calendar/edit', $vars, $body_vars);
}
@@ -1590,17 +1604,22 @@ function event_calendar_get_page_content_edit($page_type,$guid) {
* @param ElggObject $event
* @return array
*/
-function event_calendar_prepare_edit_form_vars($event = NULL) {
+function event_calendar_prepare_edit_form_vars($event = NULL, $page_type = '') {
// input names => defaults
+ $now = time();
+ $iso_date = date('Y-m-d',$now);
+ $now_midnight = strtotime($iso_date);
+ $start_time = floor(($now-$now_midnight)/60) + 60;
+ $start_time = floor($start_time/5)*5;
$values = array(
'title' => NULL,
'description' => NULL,
'venue' => NULL,
- 'start_date' => NULL,
- 'end_date' => NULL,
- 'start_time' => NULL,
- 'end_time' => NULL,
+ 'start_date' => $now+60*60,
+ 'end_date' => $now+2*60*60,
+ 'start_time' => $start_time,
+ 'end_time' => $start_time + 60,
'spots' => NULL,
'region' => '-',
'event_type' => '-',
@@ -1608,11 +1627,9 @@ function event_calendar_prepare_edit_form_vars($event = NULL) {
'contact' => NULL,
'organiser' => NULL,
'tags' => NULL,
- 'all_day' => 0,
'send_reminder' => NULL,
'reminder_number' => 1,
'reminder_interval' => 60,
- 'schedule_type' => 'fixed',
'repeats' => NULL,
'repeat_interval' => 1,
'event-calendar-repeating-monday-value' => 0,
@@ -1628,6 +1645,12 @@ function event_calendar_prepare_edit_form_vars($event = NULL) {
'access_id' => ACCESS_DEFAULT,
'group_guid' => NULL,
);
+
+ if ($page_type == 'schedule') {
+ $values['schedule_type'] = 'poll';
+ } else {
+ $values['schedule_type'] = 'fixed';
+ }
if ($event) {
foreach (array_keys($values) as $field) {
@@ -2102,6 +2125,7 @@ function event_calendar_get_page_content_fullcalendar_events($start_date,$end_da
}
$event_array = array();
$times_supported = elgg_get_plugin_setting('times','event_calendar') != 'no';
+ $polls_supported = elgg_plugin_exists('event_poll');
foreach($events as $e) {
$event = $e['event'];
$event_data = $e['data'];
@@ -2115,11 +2139,16 @@ function event_calendar_get_page_content_fullcalendar_events($start_date,$end_da
'start' => date('c',$ed['start_time']),
'end' => date('c',$ed['end_time']),
);
- if (!$times_supported || $event->all_day) {
+ if (!$times_supported || ($event->schedule_type == 'all_day')) {
$event_item['allDay'] = TRUE;
} else {
$event_item['allDay'] = FALSE;
}
+
+ if ($polls_supported && isset($e['is_event_poll']) && $e['is_event_poll']) {
+ $event_item['className'] = 'event-poll-class';
+ $event_item['title'] .= ' '.elgg_echo('event_calendar:poll_suffix');
+ }
$event_array[] = $event_item;
}
@@ -2298,3 +2327,45 @@ function event_calendar_get_join_bbb_url($event) {
return $url;
}
+// returns TRUE if the given user can add an event to the given calendar
+// if group_guid is 0, this is assumed to be the site calendar
+function event_calendar_can_add($group_guid=0,$user_guid=0) {
+ if (!$user_guid) {
+ if (elgg_is_logged_in()) {
+ $user_guid = elgg_get_logged_in_user_guid();
+ } else {
+ return FALSE;
+ }
+ }
+ if ($group_guid) {
+ if (!event_calendar_activated_for_group($group_guid)) {
+ return FALSE;
+ }
+ $group = get_entity($group_guid);
+ if (elgg_instanceof($group,'group')) {
+ $group_calendar = elgg_get_plugin_setting('group_calendar', 'event_calendar');
+ if (!$group_calendar || $group_calendar == 'members') {
+ return $group->canWriteToContainer($user_guid);
+ } else if ($group_calendar == 'admin') {
+ if ($group->canEdit($user_guid)) {
+ return TRUE;
+ } else {
+ return FALSE;
+ }
+ }
+ } else {
+ return FALSE;
+ }
+ } else {
+ $site_calendar = elgg_get_plugin_setting('site_calendar', 'event_calendar');
+ if (!$site_calendar || $site_calendar == 'admin') {
+ // only admins can post directly to the site-wide calendar
+ return elgg_is_admin_user($user_guid);
+ } else if ($site_calendar == 'loggedin') {
+ // any logged-in user can post to the site calendar
+ return TRUE;
+ }
+ }
+
+ return FALSE;
+}
diff --git a/start.php b/start.php
index 4c17c719b..c9f95c8d6 100644
--- a/start.php
+++ b/start.php
@@ -190,6 +190,7 @@ function event_calendar_page_handler($page) {
case 'manage_users':
echo event_calendar_get_page_content_manage_users($page[1]);
break;
+ case 'schedule':
case 'add':
if (isset($page[1])) {
group_gatekeeper();
diff --git a/views/default/event_calendar/css.php b/views/default/event_calendar/css.php
index 4d68f500f..9461a7fe9 100644
--- a/views/default/event_calendar/css.php
+++ b/views/default/event_calendar/css.php
@@ -269,4 +269,9 @@ li.event-calendar-filter-menu-show-only {
.event-calendar-description {
display: none;
-}
\ No newline at end of file
+}
+
+.event-calendar-edit-bottom {
+ clear: both;
+ margin-bottom: 5px;
+}
diff --git a/views/default/event_calendar/datetime_edit.php b/views/default/event_calendar/datetime_edit.php
index aa3a8f2de..ceceeb20e 100644
--- a/views/default/event_calendar/datetime_edit.php
+++ b/views/default/event_calendar/datetime_edit.php
@@ -9,16 +9,16 @@ if ($event_calendar_times != 'no') {
$body .= '';
}
$body .= elgg_view("event_calendar/input/date_local",array(
- 'timestamp'=>TRUE,
+ //'timestamp'=>TRUE,
'autocomplete'=>'off',
'class'=>'event-calendar-compressed-date',
'name' => 'start_date',
'value'=>$vars['start_date']));
$body .= elgg_view("input/timepicker",array('name' => 'start_time','value'=>$vars['start_time']));
if ($event_calendar_hide_end != 'yes') {
- $body .= '
';
+ $body .= '
';
$body .= elgg_view("event_calendar/input/date_local",array(
- 'timestamp'=>TRUE,
+ //'timestamp'=>TRUE,
'autocomplete'=>'off',
'class'=>'event-calendar-compressed-date',
'name' => 'end_date',
@@ -26,7 +26,7 @@ if ($event_calendar_times != 'no') {
));
$body .= elgg_view("input/timepicker",array('name' => 'end_time','value'=>$vars['end_time']));
}
- $body .= '
';
+ $body .= '
';
} else {
$body .= '