From 446a0679509f2206cbf26f4a795fe0468b715f64 Mon Sep 17 00:00:00 2001 From: Kevin Jardine Date: Mon, 27 Jun 2011 12:39:54 +0200 Subject: first git commit --- README | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 README diff --git a/README b/README new file mode 100644 index 000000000..e69de29bb -- cgit v1.2.3 From c07218b9c7b256e998f0a31c0226b3bd6d8011d7 Mon Sep 17 00:00:00 2001 From: Kevin Jardine Date: Mon, 27 Jun 2011 12:49:05 +0200 Subject: added main code --- trunk/CHANGES.txt | 150 +++ trunk/CONTRIBUTIONS.txt | 7 + trunk/README.txt | 83 ++ trunk/actions/add_to_group.php | 11 + trunk/actions/addtocalendar.php | 36 + trunk/actions/killrequest.php | 23 + trunk/actions/manage.php | 105 ++ trunk/actions/remove_from_group.php | 8 + trunk/actions/request_personal_calendar.php | 18 + trunk/actions/toggle_personal_calendar.php | 30 + trunk/datepicker.css | 234 +++++ trunk/delete_confirm.php | 36 + trunk/display_event_users.php | 42 + trunk/flora.datepicker.css | 234 +++++ trunk/images/calendar.gif | Bin 0 -> 269 bytes trunk/images/event_icon.gif | Bin 0 -> 1254 bytes trunk/images/event_icon_old.gif | Bin 0 -> 1531 bytes trunk/images/river_icon_event.gif | Bin 0 -> 586 bytes trunk/languages/en.php | 210 ++++ trunk/languages/es.php | 124 +++ trunk/languages/fr.php | 125 +++ trunk/manage_event.php | 57 ++ trunk/manifest.xml | 10 + trunk/models/model.php | 1045 ++++++++++++++++++++ trunk/pages/review_requests.php | 33 + trunk/show_event.php | 60 ++ trunk/show_events.php | 213 ++++ trunk/start.php | 190 ++++ trunk/ui.core.min.js | 9 + trunk/ui.datepicker.css | 62 ++ trunk/ui.datepicker.js | 212 ++++ trunk/ui.datepicker.min.js | 12 + trunk/ui.datepicker.packed.js | 2 + .../views/default/event_calendar/agenda_footer.php | 5 + .../views/default/event_calendar/agenda_header.php | 12 + .../default/event_calendar/agenda_item_view.php | 26 + trunk/views/default/event_calendar/agenda_view.php | 34 + trunk/views/default/event_calendar/calendar.php | 61 ++ trunk/views/default/event_calendar/css.php | 150 +++ .../event_calendar/entities/entity_list.php | 66 ++ .../default/event_calendar/entities/gallery.php | 44 + .../event_calendar/entities/gallery_item.php | 63 ++ .../default/event_calendar/forms/add_to_group.php | 64 ++ .../event_calendar/forms/delete_confirm.php | 13 + .../default/event_calendar/forms/manage_event.php | 22 + .../event_calendar/forms/manage_event_content.php | 254 +++++ .../event_calendar/groupprofile_calendar.php | 42 + .../default/event_calendar/input/longtext.php | 25 + trunk/views/default/event_calendar/metatags.php | 2 + trunk/views/default/event_calendar/nav.php | 38 + .../views/default/event_calendar/paged_footer.php | 4 + .../views/default/event_calendar/paged_header.php | 15 + .../default/event_calendar/paged_item_view.php | 29 + trunk/views/default/event_calendar/paged_view.php | 51 + .../default/event_calendar/personal_toggle_js.php | 20 + .../views/default/event_calendar/region_select.php | 23 + .../default/event_calendar/review_requests.php | 25 + trunk/views/default/event_calendar/show_events.php | 53 + trunk/views/default/event_calendar/strapline.php | 18 + .../default/icon/object/event_calendar/small.php | 3 + trunk/views/default/input/datepicker_inline.php | 52 + trunk/views/default/input/datepicker_popup.php | 30 + trunk/views/default/input/timepicker.php | 38 + trunk/views/default/object/event_calendar.php | 66 ++ .../default/river/object/event_calendar/create.php | 12 + .../default/river/object/event_calendar/update.php | 12 + .../views/default/settings/event_calendar/edit.php | 363 +++++++ .../views/default/widgets/event_calendar/edit.php | 35 + .../views/default/widgets/event_calendar/view.php | 39 + trunk/views/rss/event_calendar/show_events.php | 16 + trunk/views/rss/object/event_calendar.php | 60 ++ 71 files changed, 5266 insertions(+) create mode 100644 trunk/CHANGES.txt create mode 100644 trunk/CONTRIBUTIONS.txt create mode 100644 trunk/README.txt create mode 100644 trunk/actions/add_to_group.php create mode 100644 trunk/actions/addtocalendar.php create mode 100644 trunk/actions/killrequest.php create mode 100644 trunk/actions/manage.php create mode 100644 trunk/actions/remove_from_group.php create mode 100644 trunk/actions/request_personal_calendar.php create mode 100644 trunk/actions/toggle_personal_calendar.php create mode 100644 trunk/datepicker.css create mode 100644 trunk/delete_confirm.php create mode 100644 trunk/display_event_users.php create mode 100644 trunk/flora.datepicker.css create mode 100644 trunk/images/calendar.gif create mode 100644 trunk/images/event_icon.gif create mode 100644 trunk/images/event_icon_old.gif create mode 100644 trunk/images/river_icon_event.gif create mode 100644 trunk/languages/en.php create mode 100644 trunk/languages/es.php create mode 100644 trunk/languages/fr.php create mode 100644 trunk/manage_event.php create mode 100644 trunk/manifest.xml create mode 100644 trunk/models/model.php create mode 100644 trunk/pages/review_requests.php create mode 100644 trunk/show_event.php create mode 100644 trunk/show_events.php create mode 100644 trunk/start.php create mode 100644 trunk/ui.core.min.js create mode 100644 trunk/ui.datepicker.css create mode 100644 trunk/ui.datepicker.js create mode 100644 trunk/ui.datepicker.min.js create mode 100644 trunk/ui.datepicker.packed.js create mode 100644 trunk/views/default/event_calendar/agenda_footer.php create mode 100644 trunk/views/default/event_calendar/agenda_header.php create mode 100644 trunk/views/default/event_calendar/agenda_item_view.php create mode 100644 trunk/views/default/event_calendar/agenda_view.php create mode 100644 trunk/views/default/event_calendar/calendar.php create mode 100644 trunk/views/default/event_calendar/css.php create mode 100644 trunk/views/default/event_calendar/entities/entity_list.php create mode 100644 trunk/views/default/event_calendar/entities/gallery.php create mode 100644 trunk/views/default/event_calendar/entities/gallery_item.php create mode 100644 trunk/views/default/event_calendar/forms/add_to_group.php create mode 100644 trunk/views/default/event_calendar/forms/delete_confirm.php create mode 100644 trunk/views/default/event_calendar/forms/manage_event.php create mode 100644 trunk/views/default/event_calendar/forms/manage_event_content.php create mode 100644 trunk/views/default/event_calendar/groupprofile_calendar.php create mode 100644 trunk/views/default/event_calendar/input/longtext.php create mode 100644 trunk/views/default/event_calendar/metatags.php create mode 100644 trunk/views/default/event_calendar/nav.php create mode 100644 trunk/views/default/event_calendar/paged_footer.php create mode 100644 trunk/views/default/event_calendar/paged_header.php create mode 100644 trunk/views/default/event_calendar/paged_item_view.php create mode 100644 trunk/views/default/event_calendar/paged_view.php create mode 100644 trunk/views/default/event_calendar/personal_toggle_js.php create mode 100644 trunk/views/default/event_calendar/region_select.php create mode 100644 trunk/views/default/event_calendar/review_requests.php create mode 100644 trunk/views/default/event_calendar/show_events.php create mode 100644 trunk/views/default/event_calendar/strapline.php create mode 100644 trunk/views/default/icon/object/event_calendar/small.php create mode 100644 trunk/views/default/input/datepicker_inline.php create mode 100644 trunk/views/default/input/datepicker_popup.php create mode 100644 trunk/views/default/input/timepicker.php create mode 100644 trunk/views/default/object/event_calendar.php create mode 100644 trunk/views/default/river/object/event_calendar/create.php create mode 100644 trunk/views/default/river/object/event_calendar/update.php create mode 100644 trunk/views/default/settings/event_calendar/edit.php create mode 100644 trunk/views/default/widgets/event_calendar/edit.php create mode 100644 trunk/views/default/widgets/event_calendar/view.php create mode 100644 trunk/views/rss/event_calendar/show_events.php create mode 100644 trunk/views/rss/object/event_calendar.php diff --git a/trunk/CHANGES.txt b/trunk/CHANGES.txt new file mode 100644 index 000000000..0a484cebe --- /dev/null +++ b/trunk/CHANGES.txt @@ -0,0 +1,150 @@ +CHANGE LOG +0.84 + +Fixed tag search so it works for Elgg 1.7.x. + +Added French and Spanish language files provided by UNESCO. These are not +quite complete and additions are welcome. + +There is now an option to allow group admins to add any existing event to a +group calendar + +Fixed a bug which incorrectly removed the ability to change the date and year. + +Renamed a date picker view to avoid a conflict with the Profile Manager. + +Added unpacked js for ease in customisation and localisation. + +Restored the vanished RSS feed link. + +Fixed a bug in the region dropdown behaviour on listing pages. + +Fixed a case where the page was not properly displayed when clicking on a +pagination link. + +Added a sanity check for date formats. + +Changed the listing limit from 4 events to a more reasonable 15 events. + +Added real_end_time as an internal metadata value to compute collisions. + +Added three features that are turned off by default but can be enabled +through plugin settings: + +The spots feature allows you to specify how many users can add an event to +their personal calendars. This also adds an "open" filter to the show events page +so that you can see how many events are not full. + +The no collisions feature prevents someone from adding an event +if they already have another event on their personal calendar within +the same time period. (This will only work with new events or events that +you have resaved after updating this plugin as it needs the new real_end_time +field.) + +The add users feature provides a magic JavaScript field that +allows an event creator to add the event to the personal calendars of other users. +This appears on the event edit form. (Requires the separate autocomplete plugin.) + +There is a separate option (turned off by default) to send notifications to +users who have events added to their calendars through the add users feature. + +0.83 + +Fixed a bug that prevented region filtering with embedded blanks from +working properly (thanks Patrick!). + +Added a new paged view for events (not month specific) that allows adding/removing events +to a calendar with one click. + +Fixed some issues with the personal event calendar widget. + +0.82 + +Fixed a bug in displaying dates when the start and end date were the same. + +Fixed the form redisplay bug described here: +http://community.elgg.org/mod/groups/topicposts.php?topic=423853&group_guid=263011 + +Removed an error_log message that was accidentally left in. + +Added RSS feeds. + +Added the ability to filter events by regions if the region option is turned on. + +Added security tokens for Elgg 1.7 + +0.81 + +Fixed a problem with the group "widget" not displaying when it should. + +Hid the "Today" link as it was not behaving as most people expected. + +Forced the display into Month mode after Prev and Next is clicked. + +0.8 + +Removed a debugging message left in the event delete action. + +Sorted events properly by date/time rather than time created. + +Fixed an error in the parameters passed to elgg_view_entity_list that caused +problems with Elgg 1.6.1. + +Added an admin toggle to allow event times as well as dates. + +Added an admin toggle to show the venue in event listings. + +Added an admin toggle for an agenda view which should be useful for conferences +with multiple events on one day. + +Added the ability to "lock" the show_events page so that the calendar only +allows navigation between a first date and a last date. + +Added an admin toggle for an autogroup function that automatically adds all +group events to a user's calendar for all groups that the user is a member of. +Group events are also automatically removed if the user leaves the group. + +Added an admin toggle to add a region drop down to the event form and a field to +enter the allowable regions. + +0.7 + +Reworked design for Elgg 1.5 + +Fixed several bugs, including in the list of people who added an event to +their personal calendar (now shows the proper group navigation if this is +a group event). + +Added the ability to view all/friends/mine events for logged-in users. + +Added numerous configuration options (accessible via event_calendar settings +on the admin tools configuration page). This allows, for example, any logged-in +user to add events to the site calendar, to remove group calendars, etc. + +People who create an event now have the event automatically added to their +personal event calendar. This behaviour can be configured via the admin event +calendar settings. + +0.6 + +Fixed a bug that prevented more than one person adding a given event to +his/her personal calendar. + +Fixed a bug that made the page owner the person who created the event. This +is now the group for group events, otherwise the currently logged in user. + +Added river support. + +0.51 + +Fixed event overlap detection + +0.5 + +Initial release + + + + + + diff --git a/trunk/CONTRIBUTIONS.txt b/trunk/CONTRIBUTIONS.txt new file mode 100644 index 000000000..edadc2407 --- /dev/null +++ b/trunk/CONTRIBUTIONS.txt @@ -0,0 +1,7 @@ +Pete Harris from Curverider contributed the icons. Thanks Pete! + +Igor Nuk from UNESCO sent me Spanish and French language files as well +as a version tweaked to make it easier to customise. + +Many clients too numerous to mention have funded enhancements since the +original version was funded by the Royal Institute of British Architects. \ No newline at end of file diff --git a/trunk/README.txt b/trunk/README.txt new file mode 100644 index 000000000..3cb68ee3b --- /dev/null +++ b/trunk/README.txt @@ -0,0 +1,83 @@ +/** + * Manage and display events + * + * @package event_calendar + * @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.html GNU Public License version 2 + * @author Kevin Jardine + * @copyright Radagast Solutions 2008 + * @link http://radagast.biz/ + * + */ + + Note: this README.txt file is a bit outdated because it does not describe numerous + recently added features. For more information, check the CHANGES.txt file + or look at the event calendar settings available through Tools Administration. + +Version: 0.8 + +Requires: Elgg 1.5 or higher + +*Description* + +The event_calendar plugin adds a site-wide event calendar as well as +an event calendar to each group. Various options related to the site and group +calendars can be set using the event calendar settings on the tool +administration page. + +Group members can view events by month, week and day using a jQuery date +picker widget, and submit event descriptions including the venue, start date, +end date, tags, description, organiser, contact person, event access level, +and fees if any. + +Group events are aggregated into the site wide event calendar accessible from +the Tools menu drop down. + +Site admins (or optionally any user) can also add non-group-specific events to +the site-wide calendar. + +Users can add group or site-wide events to a personal calendar to showcase +events that they plan to attend or are interested in. They can optionally +display these events by dragging an Event calendar widget onto their profile +or dashboard. + +The number of users who have added an event to their personal gallery is listed +on each event page along with a link to a page that displays these users in a +gallery format. It is thus easy to find other people interested in the same +event. + +*Admin settings* + +Numerous options for the event calendar can be set in the event_calendar settings +area under Tool Administration. + +These include: + +Add starting and ending times as well as dates to events (default: no) + +Automatically add events a user creates to his/her personal calendar (default: yes) + +Automatically add group events for all members to their personal calendars (default: no) + +(If activated, the autogroup function automatically adds all group events to a +user's calendar for all groups that the user is a member of. Group events are +also automatically removed if the user leaves the group.) + +Use Agenda view (default: no) + +Useful for conferences with multiple events on the same day. + +Display venue in event listings (default: no) + +Add region dropdown (default: no), plus a way to specify the allowable regions + +First date displayable on show events pages (default: no first date) + +Last date displayable on show events pages (default: no last date) + +As well, there are numerous options for configuring the site wide and group calendars. + +*Acknowledgment* + +The initial development of the event calendar plugin was funded by the Research +& Development department at the Royal Institute of British Architects +(RIBA). Several other clients have funded enhancements. \ No newline at end of file diff --git a/trunk/actions/add_to_group.php b/trunk/actions/add_to_group.php new file mode 100644 index 000000000..b8c18ebb0 --- /dev/null +++ b/trunk/actions/add_to_group.php @@ -0,0 +1,11 @@ +canEdit()) { + add_entity_relationship($event_id, "display_on_group", $group_id ); + system_message(elgg_echo('event_calendar:add_to_group:success')); +} +forward($event->getUrl()); +?> \ No newline at end of file diff --git a/trunk/actions/addtocalendar.php b/trunk/actions/addtocalendar.php new file mode 100644 index 000000000..cb83aab88 --- /dev/null +++ b/trunk/actions/addtocalendar.php @@ -0,0 +1,36 @@ +site->guid, elgg_echo('event_calendar:add_users_notify:subject'), + sprintf( + elgg_echo('event_calendar:add_users_notify:body'), + $user->name, + $event->title, + $event->getURL() + ) + ); + system_message(elgg_echo('event_calendar:request_approved')); + + } +} else { + register_error(elgg_echo('event_calendar:review_requests_error')); +} + +forward($_SERVER['HTTP_REFERER']); diff --git a/trunk/actions/killrequest.php b/trunk/actions/killrequest.php new file mode 100644 index 000000000..66257230c --- /dev/null +++ b/trunk/actions/killrequest.php @@ -0,0 +1,23 @@ +guid, 'event_calendar_request', $event->guid)) + { + remove_entity_relationship($user->guid, 'event_calendar_request', $event->guid); + system_message(elgg_echo('event_calendar:requestkilled')); + } + + forward($_SERVER['HTTP_REFERER']); + +?> \ No newline at end of file diff --git a/trunk/actions/manage.php b/trunk/actions/manage.php new file mode 100644 index 000000000..5acf5c279 --- /dev/null +++ b/trunk/actions/manage.php @@ -0,0 +1,105 @@ + + * @copyright Radagast Solutions 2008 + * @link http://radagast.biz/ + * + */ + +// Load RIBA event model +require_once(dirname(dirname(__FILE__)) . "/models/model.php"); + +gatekeeper(); + +$event_action = get_input('event_action',''); +if ($event_action == 'add_event' || $event_action == 'manage_event') { + $result = event_calendar_set_event_from_form(); + if ($result->success) { + if ($event_action == 'manage_event') { + add_to_river('river/object/event_calendar/update','update',$_SESSION['user']->guid,$result->event->guid); + system_message(elgg_echo('event_calendar:manage_event_response')); + } else { + $event_calendar_autopersonal = get_plugin_setting('autopersonal', 'event_calendar'); + if (!$event_calendar_autopersonal || ($event_calendar_autopersonal == 'yes')) { + event_calendar_add_personal_event($result->event->guid,$_SESSION['user']->guid); + } + add_to_river('river/object/event_calendar/create','create',$_SESSION['user']->guid,$result->event->guid); + system_message(elgg_echo('event_calendar:add_event_response')); + } + + forward($result->event->getURL()); + } else { + // redisplay form with error message + register_error(elgg_echo('event_calendar:manage_event_error')); + $group_guid = (int) get_input('group_guid',0); + + if ($result->form_data->event_id) { + $event = get_entity($result->form_data->event_id); + if (!$event) { + register_error(elgg_echo('event_calendar:no_such_event_edit_error')); + forward(); + } else { + set_page_owner($event->container_guid); + if (page_owner_entity() instanceof ElggGroup) { + set_context('groups'); + } + } + + $title = elgg_echo('event_calendar:manage_event_title'); + } else { + $title = elgg_echo('event_calendar:add_event_title'); + if ($group_guid && $group = get_entity($group_guid)) { + // redefine context + set_context('groups'); + set_page_owner($group_guid); + } + } + $body = elgg_view('event_calendar/forms/manage_event', array('event'=>$result->form_data,'event_id'=>$result->form_data->event_id,'group_guid'=>$group_guid)); + + page_draw($title,elgg_view_layout("two_column_left_sidebar", '', elgg_view_title($title) . $body)); + } +} else if ($event_action == 'delete_event') { + $event_id = get_input('event_id',0); + if (($event_id = get_input('event_id',0)) && ($event = get_entity($event_id)) && $event->canEdit()) { + if (get_input('cancel','')) { + system_message(elgg_echo('event_calendar:delete_cancel_response')); + forward($event->getUrl()); + } else { + $container = get_entity($event->container_guid); + $event->delete(); + system_message(elgg_echo('event_calendar:delete_response')); + forward($container->getUrl()); + } + } else { + register_error(elgg_echo('event_calendar:error_delete')); + } +} else if ($event_action == 'add_personal') { + $event_id = get_input('event_id',0); + if (($event_id = get_input('event_id',0)) && ($event = get_entity($event_id))) { + $user_id = $_SESSION['user']->getGUID(); + if (!event_calendar_has_personal_event($event_id,$user_id)) { + if (event_calendar_add_personal_event($event_id,$user_id)) { + system_message(elgg_echo('event_calendar:add_to_my_calendar_response')); + } else { + register_error(elgg_echo('event_calendar:add_to_my_calendar_error')); + } + forward($event->getUrl()); + } + } +} else if ($event_action == 'remove_personal') { + $event_id = get_input('event_id',0); + if (($event_id = get_input('event_id',0)) && ($event = get_entity($event_id))) { + event_calendar_remove_personal_event($event_id,$_SESSION['user']->getGUID()); + system_message(elgg_echo('event_calendar:remove_from_my_calendar_response')); + forward($event->getUrl()); + } +} + +forward(); + +?> \ No newline at end of file diff --git a/trunk/actions/remove_from_group.php b/trunk/actions/remove_from_group.php new file mode 100644 index 000000000..4a7185245 --- /dev/null +++ b/trunk/actions/remove_from_group.php @@ -0,0 +1,8 @@ +getUrl()); +?> \ No newline at end of file diff --git a/trunk/actions/request_personal_calendar.php b/trunk/actions/request_personal_calendar.php new file mode 100644 index 000000000..4160326a6 --- /dev/null +++ b/trunk/actions/request_personal_calendar.php @@ -0,0 +1,18 @@ +getSubtype() == 'event_calendar')) { + if (event_calendar_send_event_request($event,$user_id)) { + system_message(elgg_echo('event_calendar:request_event_response')); + } else { + register_error(elgg_echo('event_calendar:request_event_error')); + } + + forward($event->getUrl()); + + exit; +} + +forward(); diff --git a/trunk/actions/toggle_personal_calendar.php b/trunk/actions/toggle_personal_calendar.php new file mode 100644 index 000000000..f36b5836f --- /dev/null +++ b/trunk/actions/toggle_personal_calendar.php @@ -0,0 +1,30 @@ + \ No newline at end of file diff --git a/trunk/datepicker.css b/trunk/datepicker.css new file mode 100644 index 000000000..64f486908 --- /dev/null +++ b/trunk/datepicker.css @@ -0,0 +1,234 @@ +/* Main Style Sheet for jQuery UI ui-datepicker */ +#ui-datepicker-div, .ui-datepicker-inline { + font-family: Arial,Helvetica,sans-serif; + font-size: 14px; + padding: 0; + margin: 0; + background: #F5F5F5; + width: 185px; +} +#ui-datepicker-div { + display: none; + border: 1px solid #FF9900; + z-index: 10; +} +.ui-datepicker-inline { + float: left; + display: block; + border: 0; +} +.ui-datepicker-rtl { + direction: rtl; +} +.ui-datepicker-dialog { + padding: 5px !important; + border: 4px ridge #83C948 !important; +} +button.ui-datepicker-trigger { + width: 25px; +} +img.ui-datepicker-trigger { + margin: 2px; + vertical-align: middle; +} +.ui-datepicker-prompt { + float: left; + padding: 2px; + background: #F5F5F5; + color: #000; +} +*html .ui-datepicker-prompt { + width: 185px; +} +.ui-datepicker-control, .ui-datepicker-links, .ui-datepicker-header, .ui-datepicker { + clear: both; + float: left; + width: 100%; + color: #FFF; +} +.ui-datepicker-control { + background: #FF9900; + padding: 2px 0px; +} +.ui-datepicker-links { + background: #F5F5F5; + padding: 2px 0px; +} +.ui-datepicker-control, .ui-datepicker-links { + font-weight: bold; + font-size: 80%; + letter-spacing: 1px; +} + +/* KJ change this to avoid weird display change */ +/*.ui-datepicker-links label { + padding: 2px 5px; + color: #888; +}*/ + +.ui-datepicker-links label { + font-weight: bold; + font-size: 100%; + padding: 2px 5px; + letter-spacing: 1px; +} +.ui-datepicker-clear, .ui-datepicker-prev { + float: left; + width: 34%; +} +.ui-datepicker-rtl .ui-datepicker-clear, .ui-datepicker-rtl .ui-datepicker-prev { + float: right; + text-align: right; +} +.ui-datepicker-current { + float: left; + width: 30%; + text-align: center; +} +.ui-datepicker-close, .ui-datepicker-next { + float: right; + width: 34%; + text-align: right; +} +.ui-datepicker-rtl .ui-datepicker-close, .ui-datepicker-rtl .ui-datepicker-next { + float: left; + text-align: left; +} +.ui-datepicker-header { + padding: 1px 0 3px; + background: #3873B6; + text-align: center; + font-weight: bold; + height: 1.3em; + color: #FFFFFF; +} +.ui-datepicker-header select { + background: #3873B6; + color: #FFFFFF; + border: 0px; + font-weight: bold; +} +.ui-datepicker { + background: #CCC; + text-align: center; + font-size: 100%; +} +.ui-datepicker a { + display: block; + width: 100%; +} +.ui-datepicker-title-row { + background: #E3E3E3; + color: #000; +} +.ui-datepicker-title-row .ui-datepicker-week-end-cell { + background: #E3E3E3; +} +.ui-datepicker-days-row { + background: #FFF; + /*color: #666;*/ +} +.ui-datepicker-week-col { + background: #E3E3E3; + color: #000; +} +.ui-datepicker-days-cell { + /*color: #000;*/ + border: 1px solid #DDD; +} +.ui-datepicker-days-cell a { + display: block; +} +.ui-datepicker-week-end-cell { + background: #F5F5F5; +} +.ui-datepicker-unselectable { + color: #888; +} +.ui-datepicker-week-over, .ui-datepicker-week-over .ui-datepicker-week-end-cell { + background: #E3E3E3 !important; +} +.ui-datepicker-days-cell-over, .ui-datepicker-days-cell-over.ui-datepicker-week-end-cell { + background: #FFF !important; + border: 1px solid #777; +} +* html .ui-datepicker-title-row .ui-datepicker-week-end-cell { + background: #E3E3E3 !important; +} +* html .ui-datepicker-week-end-cell { + background: #F5F5F5 !important; + border: 1px solid #DDD !important; +} +* html .ui-datepicker-days-cell-over { + background: #FFF !important; + border: 1px solid #777 !important; +} +* html .ui-datepicker-current-day { + background: #3873B6 !important; + color: #FFFFFF !important; +} +.ui-datepicker-today { + background: #E3E3E3 !important; +} +.ui-datepicker-current-day { + background: #3873B6 !important; + color: #FFFFFF !important; +} + +.ui-datepicker-current-day a { + background: #3873B6 !important; + color: #FFFFFF !important; +} + +.ui-datepicker-status { + background: #F5F5F5; + width: 100%; + font-size: 80%; + text-align: center; +} +#ui-datepicker-div a, .ui-datepicker-inline a { + cursor: pointer; + margin: 0; + padding: 0; + background: none; + color: 000000; +} +.ui-datepicker-inline .ui-datepicker-links a { + padding: 0 5px !important; +} +.ui-datepicker-control a, .ui-datepicker-links a { + padding: 2px 5px !important; + color: #000 !important; +} +.ui-datepicker-title-row a { + color: #000 !important; +} +.ui-datepicker-control a:hover { + background: #FDD !important; + color: #333 !important; +} +.ui-datepicker-links a:hover, .ui-datepicker-title-row a:hover { + background: #FFF !important; + color: #333 !important; +} +.ui-datepicker-multi .ui-datepicker { + border: 1px solid #3873B6; +} +.ui-datepicker-one-month { + float: left; + width: 185px; +} +.ui-datepicker-new-row { + clear: left; +} +.ui-datepicker-cover { + display: none; + display/**/: block; + position: absolute; + z-index: -1; + filter: mask(); + top: -4px; + left: -4px; + width: 193px; + height: 200px; +} diff --git a/trunk/delete_confirm.php b/trunk/delete_confirm.php new file mode 100644 index 000000000..81bcd9118 --- /dev/null +++ b/trunk/delete_confirm.php @@ -0,0 +1,36 @@ + + * @copyright Radagast Solutions 2008 + * @link http://radagast.biz/ + * + */ + +// Load Elgg engine +require_once(dirname(dirname(dirname(__FILE__))) . "/engine/start.php"); + +// Define context +set_context('event_calendar'); + +global $CONFIG; + +$event_id = get_input('event_id',0); +if ($event_id && ($event = get_entity($event_id))) { + set_page_owner($event->container_guid); + if (page_owner_entity() instanceOf ElggGroup) { + // Re-define context + set_context('groups'); + } + $body = elgg_view('event_calendar/forms/delete_confirm',array('event_id'=>$event_id,'title'=>$event->title)); + $title = elgg_echo('event_calendar:delete_confirm_title'); + page_draw($title,elgg_view_layout("two_column_left_sidebar", '', elgg_view_title($title) . $body)); +} else { + register_error('event_calendar:error_nosuchevent'); + forward(); +} +?> \ No newline at end of file diff --git a/trunk/display_event_users.php b/trunk/display_event_users.php new file mode 100644 index 000000000..c5d06cd8f --- /dev/null +++ b/trunk/display_event_users.php @@ -0,0 +1,42 @@ + + * @copyright Radagast Solutions 2008 + * @link http://radagast.biz/ + * + */ + +// Load Elgg engine +require_once(dirname(dirname(dirname(__FILE__))) . "/engine/start.php"); + +// Load event calendar model +require_once(dirname(__FILE__) . "/models/model.php"); + +set_context('event_calendar'); +$limit = get_input('limit', 12); +$offset = get_input('offset', 0); +if (($event_id = get_input('event_id', 0)) && $event = get_entity($event_id)) { + $event_container = get_entity($event->container_guid); + if ($event_container instanceOf ElggGroup) { + // Re-define context + set_context('groups'); + set_page_owner($event_container->getGUID()); + } + set_input('search_viewtype','gallery'); + $count = event_calendar_get_users_for_event($event_id,$limit,$offset,true); + $users = event_calendar_get_users_for_event($event_id,$limit,$offset,false); + $body = event_calendar_view_entity_list($users, $count, $offset, $limit, true, false); + + $body .= elgg_view('event_calendar/personal_toggle_js'); + + $title = sprintf(elgg_echo('event_calendar:users_for_event_title'),$event->title); + page_draw($title,elgg_view_layout("two_column_left_sidebar", '', elgg_view_title($title) . $body)); +} else { + register_error('event_calendar:error_nosuchevent'); + forward(); +} +?> \ No newline at end of file diff --git a/trunk/flora.datepicker.css b/trunk/flora.datepicker.css new file mode 100644 index 000000000..20c3dabb3 --- /dev/null +++ b/trunk/flora.datepicker.css @@ -0,0 +1,234 @@ +/* Main Flora Style Sheet for jQuery UI ui-datepicker */ +#ui-datepicker-div, .ui-datepicker-inline { + font-family: Arial,Helvetica,sans-serif; + font-size: 14px; + padding: 0; + margin: 0; + background: #E0F4D7; + width: 185px; +} +#ui-datepicker-div { + display: none; + border: 1px solid #FF9900; + z-index: 10; +} +.ui-datepicker-inline { + float: left; + display: block; + border: 0; +} +.ui-datepicker-rtl { + direction: rtl; +} +.ui-datepicker-dialog { + padding: 5px !important; + border: 4px ridge #83C948 !important; +} +button.ui-datepicker-trigger { + width: 25px; +} +img.ui-datepicker-trigger { + margin: 2px; + vertical-align: middle; +} +.ui-datepicker-prompt { + float: left; + padding: 2px; + background: #E0F4D7; + color: #000; +} +*html .ui-datepicker-prompt { + width: 185px; +} +.ui-datepicker-control, .ui-datepicker-links, .ui-datepicker-header, .ui-datepicker { + clear: both; + float: left; + width: 100%; + color: #FFF; +} +.ui-datepicker-control { + background: #FF9900; + padding: 2px 0px; +} +.ui-datepicker-links { + background: #E0F4D7; + padding: 2px 0px; +} +.ui-datepicker-control, .ui-datepicker-links { + font-weight: bold; + font-size: 80%; + letter-spacing: 1px; +} + +/* KJ change this to avoid weird display change */ +/*.ui-datepicker-links label { + padding: 2px 5px; + color: #888; +}*/ + +.ui-datepicker-links label { + font-weight: bold; + font-size: 100%; + padding: 2px 5px; + letter-spacing: 1px; +} +.ui-datepicker-clear, .ui-datepicker-prev { + float: left; + width: 34%; +} +.ui-datepicker-rtl .ui-datepicker-clear, .ui-datepicker-rtl .ui-datepicker-prev { + float: right; + text-align: right; +} +.ui-datepicker-current { + float: left; + width: 30%; + text-align: center; +} +.ui-datepicker-close, .ui-datepicker-next { + float: right; + width: 34%; + text-align: right; +} +.ui-datepicker-rtl .ui-datepicker-close, .ui-datepicker-rtl .ui-datepicker-next { + float: left; + text-align: left; +} +.ui-datepicker-header { + padding: 1px 0 3px; + background: #478787; + text-align: center; + font-weight: bold; + height: 1.3em; + color: #FFFFFF; +} +.ui-datepicker-header select { + background: #478787; + color: #FFFFFF; + border: 0px; + font-weight: bold; +} +.ui-datepicker { + background: #CCC; + text-align: center; + font-size: 100%; +} +.ui-datepicker a { + display: block; + width: 100%; +} +.ui-datepicker-title-row { + background: #DAE5DC; + color: #000; +} +.ui-datepicker-title-row .ui-datepicker-week-end-cell { + background: #DAE5DC; +} +.ui-datepicker-days-row { + background: #FFF; + /*color: #666;*/ +} +.ui-datepicker-week-col { + background: #DAE5DC; + color: #000; +} +.ui-datepicker-days-cell { + /*color: #000;*/ + border: 1px solid #DDD; +} +.ui-datepicker-days-cell a { + display: block; +} +.ui-datepicker-week-end-cell { + background: #E0F4D7; +} +.ui-datepicker-unselectable { + color: #888; +} +.ui-datepicker-week-over, .ui-datepicker-week-over .ui-datepicker-week-end-cell { + background: #DAE5DC !important; +} +.ui-datepicker-days-cell-over, .ui-datepicker-days-cell-over.ui-datepicker-week-end-cell { + background: #FFF !important; + border: 1px solid #777; +} +* html .ui-datepicker-title-row .ui-datepicker-week-end-cell { + background: #DAE5DC !important; +} +* html .ui-datepicker-week-end-cell { + background: #E0F4D7 !important; + border: 1px solid #DDD !important; +} +* html .ui-datepicker-days-cell-over { + background: #FFF !important; + border: 1px solid #777 !important; +} +* html .ui-datepicker-current-day { + background: #478787 !important; + color: #FFFFFF !important; +} +.ui-datepicker-today { + background: #DAE5DC !important; +} +.ui-datepicker-current-day { + background: #478787 !important; + color: #FFFFFF !important; +} + +.ui-datepicker-current-day a { + background: #478787 !important; + color: #FFFFFF !important; +} + +.ui-datepicker-status { + background: #E0F4D7; + width: 100%; + font-size: 80%; + text-align: center; +} +#ui-datepicker-div a, .ui-datepicker-inline a { + cursor: pointer; + margin: 0; + padding: 0; + background: none; + color: 000000; +} +.ui-datepicker-inline .ui-datepicker-links a { + padding: 0 5px !important; +} +.ui-datepicker-control a, .ui-datepicker-links a { + padding: 2px 5px !important; + color: #000 !important; +} +.ui-datepicker-title-row a { + color: #000 !important; +} +.ui-datepicker-control a:hover { + background: #FDD !important; + color: #333 !important; +} +.ui-datepicker-links a:hover, .ui-datepicker-title-row a:hover { + background: #FFF !important; + color: #333 !important; +} +.ui-datepicker-multi .ui-datepicker { + border: 1px solid #478787; +} +.ui-datepicker-one-month { + float: left; + width: 185px; +} +.ui-datepicker-new-row { + clear: left; +} +.ui-datepicker-cover { + display: none; + display/**/: block; + position: absolute; + z-index: -1; + filter: mask(); + top: -4px; + left: -4px; + width: 193px; + height: 200px; +} diff --git a/trunk/images/calendar.gif b/trunk/images/calendar.gif new file mode 100644 index 000000000..d0abaa7c0 Binary files /dev/null and b/trunk/images/calendar.gif differ diff --git a/trunk/images/event_icon.gif b/trunk/images/event_icon.gif new file mode 100644 index 000000000..a0ac7da52 Binary files /dev/null and b/trunk/images/event_icon.gif differ diff --git a/trunk/images/event_icon_old.gif b/trunk/images/event_icon_old.gif new file mode 100644 index 000000000..154d5af09 Binary files /dev/null and b/trunk/images/event_icon_old.gif differ diff --git a/trunk/images/river_icon_event.gif b/trunk/images/river_icon_event.gif new file mode 100644 index 000000000..d02e5395a Binary files /dev/null and b/trunk/images/river_icon_event.gif differ diff --git a/trunk/languages/en.php b/trunk/languages/en.php new file mode 100644 index 000000000..785b7392c --- /dev/null +++ b/trunk/languages/en.php @@ -0,0 +1,210 @@ + "Event calendar", + 'tag_names:event_tags' => "Tags", + 'event_calendar:optional' => "Optional.", + 'event_calendar:required' => "Required.", + 'event_calendar:new_event' => "New event", + 'event_calendar:no_such_event_edit_error' => "Error: There is no such event or you do not have permission to edit it.", + 'event_calendar:add_event_title' => "Add event", + 'event_calendar:manage_event_title' => "Edit event", + 'event_calendar:manage_event_description' => "Enter the details of your event below. " + ."The title, venue, and start date are required. " + ."You can click on the calendar icons to set the start and end dates.", + 'event_calendar:title_label' => "Title", + 'event_calendar:title_description' => "One to four words", + 'event_calendar:brief_description_label' => "Brief description", + 'event_calendar:brief_description_description' => "A short phrase.", + 'event_calendar:venue_label' => "Venue", + 'event_calendar:venue_description' => "Where will this event be held?", + 'event_calendar:start_date_label' => "Start date", + 'event_calendar:start_date_description' => "When will this event start?", + 'event_calendar:end_date_label' => "End date", + 'event_calendar:end_date_description' => "When will this event end? The start date will be " + ."used as the end date if this is not supplied.", + 'event_calendar:start_time_label' => "Start time", + 'event_calendar:start_time_description' => "What time will this event start?", + 'event_calendar:end_time_label' => "End time", + 'event_calendar:end_time_description' => "What time will this event end?", + 'event_calendar:fees_label' => "Fees", + 'event_calendar:fees_description' => "The cost of this event, if any.", + 'event_calendar:contact_label' => "Contact", + 'event_calendar:contact_description' => "The person to contact for more information, " + ."preferably with a telephone number or email address.", + 'event_calendar:organiser_label' => "Organiser", + 'event_calendar:organiser_description' => "The individual or organisation responsible for this event.", + 'event_calendar:event_tags_label' => "Tags", + 'event_calendar:event_tags_description' => "A comma-separated list of tags relevant to this event.", + 'event_calendar:long_description_label' => "Long description", + 'event_calendar:long_description_description' => "Can be a paragraph or more as required.", + 'event_calendar:manage_event_response' => "Your event has been saved.", + 'event_calendar:add_event_response' => "Your event has been added.", + 'event_calendar:manage_event_error' => "Error: There was an error in saving your event. " + ."Please make sure that you have provided the required fields.", + 'event_calendar:error_nosuchevent' => "Error: there is no such event.", + 'event_calendar:show_events_title' => "Event calendar", + 'event_calendar:day_label' => "Day", + 'event_calendar:week_label' => "Week", + 'event_calendar:month_label' => "Month", + 'event_calendar:group' => "Group calendar", + 'event_calendar:new' => "Add event", + 'event_calendar:submit' => "Submit", + 'event_calendar:cancel' => "Cancel", + 'event_calendar:widget_title' => "Event calendar", + 'event_calendar:widget:description' => "Displays your events.", + 'event_calendar:num_display' => "Number of events to display", + 'event_calendar:groupprofile' => "Upcoming events", + 'event_calendar:view_calendar' => "view calendar", + 'event_calendar:when_label' => "When", + 'event_calendar:site_wide_link' => "View all events", + 'event_calendar:view_link' => "View this event", + 'event_calendar:edit_link' => "Edit this event", + 'event_calendar:delete_link' => "Delete this event", + 'event_calendar:delete_confirm_title' => "Confirm event deletion", + 'event_calendar:delete_confirm_description' => "Are you sure that you want to delete this event (\"%s\")? This action cannot be undone.", + 'event_calendar:delete_response' => "This event has been deleted.", + 'event_calendar:error_delete' => "This event does not exist or you do not have the right to delete it.", + 'event_calendar:delete_cancel_response' => "Event delete cancelled.", + 'event_calendar:add_to_my_calendar' => "Add to my calendar", + 'event_calendar:remove_from_my_calendar' => "Remove from my calendar", + 'event_calendar:add_to_my_calendar_response' => "This event has been added to your personal calendar.", + 'event_calendar:add_to_my_calendar_error' => "This event could not added to your personal calendar. " + ."(Perhaps the event is full or is scheduled at the same time as another event in your personal calendar?)", + 'event_calendar:remove_from_my_calendar_response' => "This event has been removed from your personal calendar.", + 'event_calendar:add_to_the_calendar' => "Add to calendar", + 'event_calendar:remove_from_the_calendar' => "Remove from calendar", + 'event_calendar:add_to_the_calendar_response' => "Event added to this person's calendar.", + 'event_calendar:add_to_the_calendar_error' => "This event could not added to this person's calendar. " + ."(Perhaps the event is full or is scheduled at the same time as another event in this person's calendar?)", + 'event_calendar:remove_from_the_calendar_response' => "Event removed from this person's calendar.", + + 'event_calendar:users_for_event_title' => "People interested in event \"%s\"", + 'event_calendar:personal_event_calendars_link' => "Personal event calendars (%s)", + 'event_calendar:settings:group_profile_display:title' => "Group calendar profile display (if group calendars are enabled)", + 'event_calendar:settings:group_profile_display_option:left' => "left column", + 'event_calendar:settings:group_profile_display_option:right' => "right column", + 'event_calendar:settings:group_profile_display_option:none' => "none", + 'event_calendar:settings:times:title' => "Add time as well as date to events", + 'event_calendar:settings:autopersonal:title' => "Automatically add events a user creates to his/her personal calendar.", + 'event_calendar:settings:autogroup:title' => "Automatically add group events for all members to their personal calendars.", + 'event_calendar:settings:agenda_view:title' => "Use Agenda view", + 'event_calendar:settings:venue_view:title' => "Display venue in summary view (event listings)", + 'event_calendar:settings:yes' => "yes", + 'event_calendar:settings:no' => "no", + 'event_calendar:settings:site_calendar:title' => "Site calendar", + 'event_calendar:settings:site_calendar:admin' => "yes, only admins can post events", + 'event_calendar:settings:site_calendar:loggedin' => "yes, any logged-in user can post an event", + 'event_calendar:settings:group_calendar:title' => "Group calendars", + 'event_calendar:settings:group_calendar:admin' => "yes, only admins and group owners can post events", + 'event_calendar:settings:group_calendar:members' => "yes, any group member can post an event", + 'event_calendar:settings:group_default:title' => "New groups should by default have a group calendar (if group calendars are enabled)", + 'event_calendar:settings:group_default:no' => "no (but admins or group owners can turn a group calendar on if desired)", + 'event_calendar:settings:group_default:yes' => "yes (but admins or group owners can turn a group calendar off if desired)", + 'event_calendar:settings:group_always_display:title' => "If group calendar is enabled, always display it (even if empty)", + 'event_calendar:settings:region_display:title' => "Add region field to events", + 'event_calendar:settings:region_list:title' => "List of regions (one per line)", + 'event_calendar:region_label' => "Region", + 'event_calendar:region_description' => "Select the region that this event will be held in.", + 'event_calendar:settings:type_display:title' => "Add event type to events", + 'event_calendar:settings:type_list:title' => "List of event types (one per line)", + 'event_calendar:type_label' => "Type of event", + 'event_calendar:type_description' => "Select the type of event.", + 'event_calendar:all' => "All", + 'event_calendar:region_filter_by_label' => "Filter by region:", + 'event_calendar:settings:first_date:title' => "First allowable date (in YYYY-MM-DD format)", + 'event_calendar:settings:last_date:title' => "Last allowable date (in YYYY-MM-DD format)", + 'event_calendar:enable_event_calendar' => "Enable group event calendar", + 'event_calendar:no_events_found' => "No events found.", + 'event_calendar:mine' => "Mine", + 'event_calendar:feature' => "Feature", + 'event_calendar:unfeature' => "Unfeature", + 'event_calendar:agenda:column:time' => "Time", + 'event_calendar:agenda:column:session' => "Session", + 'event_calendar:agenda:column:venue' => "Location", + 'event_calendar:upcoming_events_title' => "Upcoming events", + 'event_calendar:settings:paged' => "paged", + 'event_calendar:settings:month' => "by month", + 'event_calendar:settings:listing_format:title' => "Event listing format", + 'event_calendar:paged:column:date' => "Date", + 'event_calendar:paged:column:time' => "Time", + 'event_calendar:paged:column:event' => "Event", + 'event_calendar:paged:column:venue' => "Location", + 'event_calendar:paged:column:calendar' => "Calendar", + 'event_calendar:settings:spots_display:title' => "Add a spots field for each " + ."event to allow you to limit the number of people who can add the event to their calendar", + 'event_calendar:settings:no_collisions:title' => "Collision detection: prevent people from adding two events at the same time to their personal calendar", + 'event_calendar:settings:collision_length:title' => "How long (in seconds) should an event be assumed to last if no end date or time is specified " + ."(used for collision detection). Defaults to 3600 seconds = 1 hour.", + 'event_calendar:spots_label' => "Spots", + 'event_calendar:spots_description' => "How many people are allowed to add this event to their personal calendars?", + 'event_calendar:open' => "Open", + 'event_calendar:settings:add_users:title' => "Allow event creators to add their event to other personal calendars (requires autocomplete plugin).", + 'event_calendar:add_user_label' => "Add users", + 'event_calendar:add_user_description' => "Add this event to personal calendars by typing two or more characters in the above text autocomplete field to select a user. " + ."You can add multiple users by clicking the \"+\" link. (You must submit this form to actually add the event to the calendars.)", + 'event_calendar:settings:add_users_notify:title' => "Notify users who have had an event added to their personal calendar by an admin or event creator.", + 'event_calendar:add_users_notify:subject' => "A new event has been added to your personal calendar", + 'event_calendar:add_users_notify:body' => "%s,\n\nThe \"%s\" event has been added to your calendar.\n\nYou can view it here: \n\n%s\n", + + 'event_calendar:settings:region_list_handles:title' => "The region strings above are string handles. Use the Elgg translation system to resolve them.", + 'event_calendar:settings:type_list_handles:title' => "The type strings above are string handles. Use the Elgg translation system to resolve them.", + + 'event_calendar:settings:personal_manage:title' => "Allow users to add/remove any event they can see to/from their personal calendars. (If no, only admins and the event creator can add/remove them).", + + 'event_calendar:strapline' => "Posted %s by %s", + + 'event_calendar:request_event_response' => "Your request to be added to this event has been sent.", + 'event_calendar:request_event_error' => "Error: Could not send your request to be added to this event.", + 'event_calendar:request_subject' => "You have received an event request", + 'event_calendar:request_message' => " %s has asked to have the event \"%s\", here: + + %s + + added to his/her personal calendar. + + You can manage calendar requests here: + + %s", + + 'event_calendar:review_requests_error' => "This event either does not exist or you do not have the authority to approve requests for it.", + 'event_calendar:review_requests_request_none' => "There are no requests to review for this event.", + 'event_calendar:request:remove:check' => 'Are you sure you want to reject this request?', + 'event_calendar:requestkilled' => 'The request has been removed.', + 'event_calendar:request_approved' => "This request has been approved.", + 'event_calendar:review_requests_title' => 'Review requests', + 'event_calendar:make_request_title' => 'Request this event', + + 'event_calendar:settings:hide_access:title' => "Hide event access drop down", + 'event_calendar:settings:default_access:title' => "If the event access is hidden, what should it default to?", + 'event_calendar:settings:hide_end:title' => "Hide end time and date fields", + 'event_calendar:settings:more_required:title' => "Make all visible fields except long description required.", + + 'event_calendar:add_to_group:remove_group_title' => "Remove this event from group", + 'event_calendar:add_to_group:remove_group_button' => "Remove from group", + 'event_calendar:remove_from_group:success' => "Event removed from group calendar", + 'event_calendar:add_to_group:add_group_title' => "Add this event to group", + 'event_calendar:add_to_group:add_group_button' => "Add to group", + 'event_calendar:add_to_group:success' => "Event added to group calendar", + 'event_calendar:settings:add_to_group_calendar:title' => "Allow group admins to add any existing event to a group calendar", + + /** + * Event calendar river + **/ + + //generic terms to use + 'event_calendar:river:created' => "%s added", + 'event_calendar:river:updated' => "%s updated", + 'event_calendar:river:annotated1' => "%s added", + 'event_calendar:river:annotated2' => "to his/her personal calendar.", + + //these get inserted into the river links to take the user to the entity + 'event_calendar:river:create' => "a new event titled", + 'event_calendar:river:the_event' => "an event titled", + + ); + + add_translation("en",$english); + +?> \ No newline at end of file diff --git a/trunk/languages/es.php b/trunk/languages/es.php new file mode 100644 index 000000000..1eefff2a3 --- /dev/null +++ b/trunk/languages/es.php @@ -0,0 +1,124 @@ + 'Calendario de eventos', + 'event_calendar:new_event' => 'Nuevo evento', + 'event_calendar:no_such_event_edit_error' => 'Error: No existe tal evento o usted no tiene autorización para editarlo.', + 'event_calendar:add_event_title' => 'Agregar evento', + 'event_calendar:manage_event_title' => 'Editar evento', + 'event_calendar:manage_event_description' => 'Introduzca los detalles de su evento a continuación. El título, lugar y fecha de inicio se requieren. Puede hacer clic en los íconos del calendario para establecer las fechas de inicio y fin.', + 'event_calendar:title_label' => 'Título', + 'event_calendar:title_description' => 'Una a cuatro palabras', + 'event_calendar:brief_description_label' => 'Descripción breve', + 'event_calendar:brief_description_description' => 'Una frase corta.', + 'event_calendar:venue_label' => 'Sede', + 'event_calendar:venue_description' => '¿Dónde se llevará a cabo este evento?', + 'event_calendar:start_date_label' => 'Fecha de inicio', + 'event_calendar:start_date_description' => '¿Cuándo comenzará este evento?', + 'event_calendar:end_date_label' => 'Fecha final', + 'event_calendar:end_date_description' => '¿Cuándo terminará este evento? La fecha de inicio será usada como la fecha de finalización si no se suministra esta información.', + 'event_calendar:start_time_label' => 'Hora de inicio', + 'event_calendar:start_time_description' => '¿A qué hora comenzará este evento?', + 'event_calendar:end_time_label' => 'Hora de finalización', + 'event_calendar:end_time_description' => '¿A qué hora terminará este evento?', + 'event_calendar:fees_label' => 'Tarifas', + 'event_calendar:fees_description' => 'El costo de este evento, si hay caso.', + 'event_calendar:contact_label' => 'Contacto', + 'event_calendar:contact_description' => 'Persona que será el contacto para brindar mayor información, preferiblemente con número de teléfono o dirección de correo electrónico.', + 'event_calendar:organiser_label' => 'Origanizador', + 'event_calendar:organiser_description' => 'La persona u organización responsable por este evento.', + 'event_calendar:event_tags_label' => 'Etiquetas', + 'event_calendar:event_tags_description' => 'Lista de etiquetas relativas al eventos, separadas por una coma.', + 'event_calendar:long_description_label' => 'Descripción larga', + 'event_calendar:long_description_description' => 'Puede ser un parágrafo o más, según lo requerido.', + 'event_calendar:manage_event_response' => 'Su evento ha sido guardado.', + 'event_calendar:add_event_response' => 'Su evento ha sido agregado.', + 'event_calendar:manage_event_error' => 'Error: Hubo un error al guardar su evento. Por favor asegúrese que todos los campos requeridos hayan sido proporcionados.', + 'event_calendar:error_nosuchevent' => 'Error: no existe tal evento.', + 'event_calendar:show_events_title' => 'Calendario del evento', + 'event_calendar:day_label' => 'Día', + 'event_calendar:week_label' => 'Semana', + 'event_calendar:month_label' => 'Mes', + 'event_calendar:group' => 'Calendario de grupo', + 'event_calendar:new' => 'Agregar evento', + 'event_calendar:submit' => 'Enviar', + 'event_calendar:cancel' => 'Cancelar', + 'event_calendar:widget_title' => 'Calendario del evento', + 'event_calendar:widget:description' => 'Exponer sus eventos.', + 'event_calendar:num_display' => 'Número de eventos expuestos', + 'event_calendar:groupprofile' => 'Eventos venideros', + 'event_calendar:view_calendar' => 'ver calendario', + 'event_calendar:when_label' => 'Cuando', + 'event_calendar:site_wide_link' => 'Ver todos los eventos', + 'event_calendar:view_link' => 'Ver este evento', + 'event_calendar:edit_link' => 'Editar este evento', + 'event_calendar:delete_link' => 'Eliminar este evento', + 'event_calendar:delete_confirm_title' => 'Confirmar eliminación de este evento', + 'event_calendar:delete_confirm_description' => '¿Está seguro que desea eliminar este evento ("%s")? Esta acción es irreversible.', + 'event_calendar:delete_response' => 'Este evento ha sido eliminado.', + 'event_calendar:error_delete' => 'Este evento no existe o usted no tiene el derecho de eliminarlo.', + 'event_calendar:delete_cancel_response' => 'Eliminación del evento cancelada.', + 'event_calendar:add_to_my_calendar' => 'Agregar a mi calendario', + 'event_calendar:remove_from_my_calendar' => 'Retirar de mi calendario', + 'event_calendar:add_to_my_calendar_response' => 'Este evento ha sido agregado a su calendario personal.', + 'event_calendar:remove_from_my_calendar_response' => 'Este evento ha sido retirado de su calendario personal.', + 'event_calendar:users_for_event_title' => 'Personas interesadas en el evento "%s"', + 'event_calendar:personal_event_calendars_link' => 'Eventos personales del calendario (%s)', + 'event_calendar:settings:group_profile_display:title' => 'Perfil de visualización del calendario de grupo (si están habilitados los calendarios de grupo)', + 'event_calendar:settings:group_profile_display_option:left' => 'Columna de la izquierda', + 'event_calendar:settings:group_profile_display_option:right' => 'Columna de la derecha', + 'event_calendar:settings:group_profile_display_option:none' => 'Ninguno', + 'event_calendar:settings:times:title' => 'Agregar hora y fecha a los eventos', + 'event_calendar:settings:autopersonal:title' => 'Agregar automáticamente a su calendario personal eventos que un usuario cree.', + 'event_calendar:settings:autogroup:title' => 'Agregar automáticamente los eventos de grupo al calendario personal de sus miembros.', + 'event_calendar:settings:agenda_view:title' => 'Usar Vista previa de Agenda', + 'event_calendar:settings:venue_view:title' => 'Mostrar sede en vista rápida (listados de eventos)', + 'event_calendar:settings:yes' => 'sí', + 'event_calendar:settings:no' => 'no', + 'event_calendar:settings:site_calendar:title' => 'Sitio del calendario', + 'event_calendar:settings:site_calendar:admin' => 'sí, solamente si administradores pueden anunciar eventos', + 'event_calendar:settings:site_calendar:loggedin' => 'sí, cualquier usuario registrado puede anunciar un evento', + 'event_calendar:settings:group_calendar:title' => 'Calendarios de grupo', + 'event_calendar:settings:group_calendar:admin' => 'sí, solamente administradores y propietarios de grupos pueden anunciar eventos', + 'event_calendar:settings:group_calendar:members' => 'sí, cualquier miembro de un grupo puede anunciar un evento', + 'event_calendar:settings:group_default:title' => 'Grupos nuevos deben tener un calendario de grupo por defecto (si los calendarios de grupo están activados)', + 'event_calendar:settings:group_default:no' => 'no (sin embargo administradores y propietarios de grupos pueden desactivar un calendario de grupo si lo desean)', + 'event_calendar:settings:group_default:yes' => 'sí (sin embargo administradores y propietarios de grupos pueden desactivar un calendario de grupo si lo desean)', + 'event_calendar:settings:group_always_display:title' => 'Si un calendario de grupo está activo, siempre exponerlo (aun si está vacío)', + 'event_calendar:settings:region_display:title' => 'Agregar campo región a eventos', + 'event_calendar:settings:region_list:title' => 'Lista de regiones (una por línea)', + 'event_calendar:region_label' => 'Región', + 'event_calendar:region_description' => 'Selecciona la región en la cual el evento se llevará a cabo', + 'event_calendar:settings:type_display:title' => 'Agregar tipo de eventos a eventos', + 'event_calendar:settings:type_list:title' => 'Lista de tipos de eventos (uno por línea)', + 'event_calendar:type_label' => 'Tipo de eventos', + 'event_calendar:type_description' => 'Seleccione un tipo de evento.', + 'event_calendar:all' => 'Todos', + 'event_calendar:region_filter_by_label' => 'Filtro por región:', + 'event_calendar:settings:first_date:title' => 'Primera fecha permitida (en el formato AAAA - MM- DD)', + 'event_calendar:settings:last_date:title' => 'Última fecha permitida (en el formato AAAA - MM- DD)', + 'event_calendar:enable_event_calendar' => 'Permitir clanedario de eventos de grupo', + 'event_calendar:no_events_found' => 'No se encontraron eventos.', + 'event_calendar:mine' => 'Mío', + 'event_calendar:feature' => 'Presentar', + 'event_calendar:unfeature' => 'No presentar', + 'event_calendar:agenda:column:time' => 'Hora', + 'event_calendar:agenda:column:session' => 'Sesión', + 'event_calendar:agenda:column:venue' => 'Lugar', + 'event_calendar:upcoming_events_title' => 'Eventor venideros', + 'event_calendar:settings:paged' => 'Paginado', + 'event_calendar:settings:month' => 'Por mes', + 'event_calendar:settings:listing_format:title' => 'Formato del listado de eventos', + 'event_calendar:paged:column:date' => 'Fecha', + 'event_calendar:paged:column:time' => 'Hora', + 'event_calendar:paged:column:event' => 'Evento', + 'event_calendar:paged:column:venue' => 'Lugar', + 'event_calendar:paged:column:calendar' => 'Calendario', + 'event_calendar:river:created' => '%s agregado', + 'event_calendar:river:updated' => '%s actualizado', + 'event_calendar:river:annotated1' => '%s agregado', + 'event_calendar:river:annotated2' => 'a su calendario personal.', + 'event_calendar:river:create' => 'un nuevo evento titulado', + 'event_calendar:river:the_event' => 'un evento titulado', +); +add_translation("es", $language); +?> \ No newline at end of file diff --git a/trunk/languages/fr.php b/trunk/languages/fr.php new file mode 100644 index 000000000..876a53ecb --- /dev/null +++ b/trunk/languages/fr.php @@ -0,0 +1,125 @@ + 'Entrez les détails de votre événement ci-dessous. Le titre, le lieu et la date de début sont obligatoires. Vous pouvez cliquer sur les icônes du calendrier pour indiquer les dates de début et de fin.', + 'event_calendar:start_time_label' => 'Horaire de départ', + 'event_calendar:start_time_description' => 'À quelle heure cet événement commence?', + 'event_calendar:end_time_label' => 'Horaire de fin', + 'event_calendar:end_time_description' => 'À quelle heure se termine cet événement?', + 'event_calendar:event_tags_label' => 'Balises', + 'event_calendar:event_tags_description' => 'Optionnel. Une liste de balises séparées par des virgules.', + 'event_calendar:error_nosuchevent' => 'Erreur: il n\'y a pas de tel événement.', + 'event_calendar:settings:times:title' => 'Ajouter du temps et la date aux événements', + 'event_calendar:settings:autogroup:title' => 'Ajouter automatiquement des événements de groupe à tous les membres dans leurs agendas personnels.', + 'event_calendar:settings:agenda_view:title' => 'Utilisez la vue Agenda', + 'event_calendar:settings:venue_view:title' => 'Afficher le lieu en vue sommaire (listings des événements)', + 'event_calendar:settings:group_always_display:title' => 'Si un calendrier de groupe est activé, toujours l\'afficher (même vides)', + 'event_calendar:settings:region_display:title' => 'Ajouter un champ région aux événements', + 'event_calendar:settings:region_list:title' => 'Liste des rListe des régions (un par ligne) + (une seule par ligne)', + 'event_calendar:region_label' => 'Régions', + 'event_calendar:region_description' => 'Sélectionnez la région dans laquelle cet événement aura lieu', + 'event_calendar:settings:type_display:title' => 'Ajouter le type d\'événement aux événements', + 'event_calendar:settings:type_list:title' => 'Liste des types d\'événement (un seul par ligne)', + 'event_calendar:type_label' => 'Type d\'événement', + 'event_calendar:type_description' => 'Sélectionnez le type d\'événement.', + 'event_calendar:all' => 'Tous', + 'event_calendar:region_filter_by_label' => 'Filtrer par région:', + 'event_calendar:settings:first_date:title' => 'Première date d\'entrée admissible (au format AAAA-MM-JJ)', + 'event_calendar:settings:last_date:title' => 'Dernière date admissible (au format AAAA-MM-JJ)', + 'event_calendar:mine' => 'Le mien', + 'event_calendar:feature' => 'Mise en vedette', + 'event_calendar:unfeature' => 'Enlever la mise en vedette', + 'event_calendar:agenda:column:time' => 'Heure', + 'event_calendar:agenda:column:session' => 'Session', + 'event_calendar:agenda:column:venue' => 'Lieu', + 'event_calendar:upcoming_events_title' => 'Événements à venir', + 'event_calendar:settings:paged' => 'Pagé', + 'event_calendar:settings:month' => 'par mois', + 'event_calendar:settings:listing_format:title' => 'Format des listes d\'événements', + 'event_calendar:paged:column:date' => 'Date', + 'event_calendar:paged:column:time' => 'Heure', + 'event_calendar:paged:column:event' => 'Evénement', + 'event_calendar:paged:column:venue' => 'Lieu', + 'event_calendar:paged:column:calendar' => 'Calendrier', + 'item:object:event_calendar' => 'Agenda', + 'event_calendar:new_event' => 'Nouvel événement', + 'event_calendar:no_such_event_edit_error' => 'Erreur: Il n\'y a pas de tel événement, ou vous n\'avez pas la permission de le modifier.', + 'event_calendar:add_event_title' => 'Ajouter un événement', + 'event_calendar:manage_event_title' => 'Modifier un événement', + 'event_calendar:title_label' => 'Titre', + 'event_calendar:title_description' => 'Obligatoire. Un à quatre mots', + 'event_calendar:brief_description_label' => 'Courte description', + 'event_calendar:brief_description_description' => 'Optionnel. Une phrase courte.', + 'event_calendar:venue_label' => 'Lieu', + 'event_calendar:venue_description' => 'Obligatoire. Où se tiendra l\'événement?', + 'event_calendar:start_date_label' => 'Date de départ', + 'event_calendar:start_date_description' => 'Obligatoire. A quelle date cet événement démarera?', + 'event_calendar:end_date_label' => 'Date de fin de l\'événement', + 'event_calendar:end_date_description' => 'Optionnel. Quand c\'est événement s\'achèvera-t-il? La date de départ sera utilisée comme date de fin si ce champ n\'est pas rempli.', + 'event_calendar:fees_label' => 'Prix d\'entrée', + 'event_calendar:fees_description' => 'Optionnel. Le côut de l\'événement.', + 'event_calendar:contact_label' => 'Contact', + 'event_calendar:contact_description' => 'Optionnel. La personne à contacter pour avoir plus de renseignements, préférablement avec un numéro de téléphone ou une adresse emailpreferably with a telephone number or email address.', + 'event_calendar:organiser_label' => 'Organisateur', + 'event_calendar:organiser_description' => 'Optionnel. La personne ou l\'organisation responsable de l\'événement.', + 'event_calendar:long_description_label' => 'Description longue', + 'event_calendar:long_description_description' => 'Optionnel. Peut être un paragraphe ou plus si nécessaire.', + 'event_calendar:manage_event_response' => 'Votre événement a été sauvegardé.', + 'event_calendar:add_event_response' => 'Votre événement a été ajouté.', + 'event_calendar:manage_event_error' => 'Erreur: Une erreur s\'est produite lors de l\'enregistrement de votre événement. Assurez-vous que les champs spécifiés ont bien été remplis.', + 'event_calendar:show_events_title' => 'Agenda des événements', + 'event_calendar:day_label' => 'Jour', + 'event_calendar:week_label' => 'Semaine', + 'event_calendar:month_label' => 'Mois', + 'event_calendar:group' => 'Agenda de groupe', + 'event_calendar:new' => 'Ajouter un événement', + 'event_calendar:submit' => 'Ok', + 'event_calendar:cancel' => 'Annuler', + 'event_calendar:widget_title' => 'Agenda des événements', + 'event_calendar:widget:description' => 'Afficher vos événements.', + 'event_calendar:num_display' => 'Nombre d\'événement à afficher', + 'event_calendar:groupprofile' => 'Les prochains événements', + 'event_calendar:view_calendar' => 'Voir l\'agenda', + 'event_calendar:when_label' => 'Quand', + 'event_calendar:site_wide_link' => 'Voir tous les événements', + 'event_calendar:view_link' => 'Voir cet événement', + 'event_calendar:edit_link' => 'Modifier cet événement', + 'event_calendar:delete_link' => 'Supprimer cet événement', + 'event_calendar:delete_confirm_title' => 'Confirmer la suppression de l\'événement', + 'event_calendar:delete_confirm_description' => 'Etes-vous sur de vouloir supprimer cet événement ("%s")? Cette action est irréversible.', + 'event_calendar:delete_response' => 'Cet événement a été supprimé.', + 'event_calendar:error_delete' => 'Cet événement n\'existe pas ou vous n\'avez pas le droit de le supprimer.', + 'event_calendar:delete_cancel_response' => 'Suppression de l\'événement annulé.', + 'event_calendar:add_to_my_calendar' => 'Ajouter à mon agenda', + 'event_calendar:remove_from_my_calendar' => 'Supprimer de mon agenda', + 'event_calendar:add_to_my_calendar_response' => 'Cet événement a été ajouté à votre agenda personnel.', + 'event_calendar:remove_from_my_calendar_response' => 'Cet événement a été supprimé de votre agenda personnel.', + 'event_calendar:users_for_event_title' => 'Membre du site intéressé par l\'événement "%s"\'', + 'event_calendar:personal_event_calendars_link' => 'Agenda des événements personnels de (%s)', + 'event_calendar:settings:group_profile_display:title' => 'Afficher le profil de l\'agenda du groupe (Si les agendas de groupe ont été permis)', + 'event_calendar:settings:group_profile_display_option:left' => 'Colonne de gauche', + 'event_calendar:settings:group_profile_display_option:right' => 'Colonne de droite', + 'event_calendar:settings:group_profile_display_option:none' => 'aucun', + 'event_calendar:settings:autopersonal:title' => 'Ajouter automatiquement les événements d\'un utilisateur à son agenda personnelA.', + 'event_calendar:settings:yes' => 'oui', + 'event_calendar:settings:no' => 'non', + 'event_calendar:settings:site_calendar:title' => 'Side de l\'agenda', + 'event_calendar:settings:site_calendar:admin' => 'oui, seuls les administrateurs peuvent proposer des événements', + 'event_calendar:settings:site_calendar:loggedin' => 'oui, seuls les utilisateurs identifiés peuvent publier un événement', + 'event_calendar:settings:group_calendar:title' => 'Les agendas du groupe', + 'event_calendar:settings:group_calendar:admin' => 'oui seuls les administrateurs et les créateurs du groupe peuvent publier un événement', + 'event_calendar:settings:group_calendar:members' => 'oui, les membres du groupe peuvent publier un événement', + 'event_calendar:settings:group_default:title' => 'Les nouveaux groupes par défaut peuvent avoir leur propre agenda (Si les agendas de groupe sont permis)', + 'event_calendar:settings:group_default:no' => 'non (mais les administrateurs du groupe peuvement ajouter la fonction agenda si désiré)', + 'event_calendar:settings:group_default:yes' => 'oui (mais les administrateurs ou les créateurs du groupe peuvent supprimer la fonction agenda si désiré)', + 'event_calendar:enable_event_calendar' => 'Ajouter la fonction agenda au groupe', + 'event_calendar:no_events_found' => 'Aucun événement trouvé.', + 'event_calendar:river:created' => '%s ajouté', + 'event_calendar:river:updated' => '%s mis à jour', + 'event_calendar:river:annotated1' => '%s ajouté', + 'event_calendar:river:annotated2' => 'à son agenda personnel.', + 'event_calendar:river:create' => 'un nouvel événement intitulé', + 'event_calendar:river:the_event' => 'un événement intitulé', +); +add_translation("fr", $language); +?> \ No newline at end of file diff --git a/trunk/manage_event.php b/trunk/manage_event.php new file mode 100644 index 000000000..0464a31df --- /dev/null +++ b/trunk/manage_event.php @@ -0,0 +1,57 @@ + + * @copyright Radagast Solutions 2008 + * @link http://radagast.biz/ + * + */ + +// Load Elgg engine +require_once(dirname(dirname(dirname(__FILE__))) . "/engine/start.php"); + +// Load event calendar model +require_once(dirname(__FILE__) . "/models/model.php"); + +// Define context +set_context('event_calendar'); + +global $CONFIG; + +gatekeeper(); + +$event = ''; + +$group_guid = (int) get_input('group_guid',0); + +if ($event_id = get_input('event_id',0)) { + $event = event_calendar_get_event_for_edit($event_id); + if (!$event) { + register_error(elgg_echo('event_calendar:no_such_event_edit_error')); + forward(); + } else { + set_page_owner($event->container_guid); + if (page_owner_entity() instanceof ElggGroup) { + set_context('groups'); + } + } + + $title = elgg_echo('event_calendar:manage_event_title'); +} else { + $title = elgg_echo('event_calendar:add_event_title'); + if ($group_guid && $group = get_entity($group_guid)) { + // redefine context + set_context('groups'); + set_page_owner($group_guid); + } +} + +$body = elgg_view('event_calendar/forms/manage_event', array('event'=>$event,'event_id'=>$event_id,'group_guid'=>$group_guid)); + +page_draw($title,elgg_view_layout("two_column_left_sidebar", '', elgg_view_title($title) . $body)); + +?> \ No newline at end of file diff --git a/trunk/manifest.xml b/trunk/manifest.xml new file mode 100644 index 000000000..c3ce812c1 --- /dev/null +++ b/trunk/manifest.xml @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/trunk/models/model.php b/trunk/models/model.php new file mode 100644 index 000000000..04a168e55 --- /dev/null +++ b/trunk/models/model.php @@ -0,0 +1,1045 @@ + + * @copyright Radagast Solutions 2008 + * @link http://radagast.biz/ + * + */ + +function event_calendar_get_event_for_edit($event_id) { + if ($event_id && $event = get_entity($event_id)) { + if ($event->canEdit()) { + return $event; + } else { + return false; + } + } else { + return false; + } +} + +function event_calendar_get_event_from_form() { + + // returns an event data object (not an ElggObject) + + $event_data = new stdClass(); + $event_data->form_data = true; + // debug message to test new add user feature + $event_data->event_id = get_input('event_id',0); + $event_data->access_id = get_input('access',ACCESS_PRIVATE); + $event_data->title = get_input('title',''); + $event_data->description = get_input('brief_description',''); + $event_data->venue = get_input('venue',''); + $event_calendar_times = get_plugin_setting('times', 'event_calendar'); + $event_calendar_region_display = get_plugin_setting('region_display', 'event_calendar'); + $event_calendar_type_display = get_plugin_setting('type_display', 'event_calendar'); + $event_calendar_spots_display = get_plugin_setting('spots_display', 'event_calendar'); + if ($event_calendar_times == 'yes') { + $sh = get_input('start_time_h',''); + $sm = get_input('start_time_m',''); + if (is_numeric($sh) && is_numeric($sm)) { + // workaround for pulldown zero value bug + $sh--; + $sm--; + $event_data->start_time = $sh*60+$sm; + } else { + $event_data->start_time = ''; + } + $eh = get_input('end_time_h',''); + $em = get_input('end_time_m',''); + if (is_numeric($eh) && is_numeric($em)) { + // workaround for pulldown zero value bug + $eh--; + $em--; + $event_data->end_time = $eh*60+$em; + } else { + $event_data->end_time = ''; + } + } + $event_data->start_date = get_input('start_date',''); + $event_data->end_date = get_input('end_date',''); + if ($event_calendar_spots_display == 'yes') { + $event_data->spots = get_input('spots',''); + } + if ($event_calendar_region_display == 'yes') { + $region = get_input('region',''); + if ($region == '-') { + $region = ''; + } + $event_data->region = $region; + } + if ($event_calendar_type_display == 'yes') { + $event_type = get_input('event_type',''); + if ($event_type == '-') { + $event_type = ''; + } + $event_data->event_type = $event_type; + } + $event_data->fees = get_input('fees',''); + $event_data->contact = get_input('contact',''); + $event_data->organiser = get_input('organiser',''); + $event_data->event_tags = get_input('event_tags',''); + $event_data->long_description = get_input('long_description',''); + + return $event_data; +} + +function event_calendar_set_event_from_form() { + global $CONFIG; + + $group_guid = 0; + $result = new stdClass(); + $ed = event_calendar_get_event_from_form(); + $result->form_data = $ed; + $fields_are_valid = TRUE; + $event_calendar_times = get_plugin_setting('times', 'event_calendar'); + $event_calendar_region_display = get_plugin_setting('region_display', 'event_calendar'); + $event_calendar_type_display = get_plugin_setting('type_display', 'event_calendar'); + $event_calendar_spots_display = get_plugin_setting('spots_display', 'event_calendar'); + $event_calendar_hide_end = get_plugin_setting('hide_end', 'event_calendar'); + $event_calendar_more_required = get_plugin_setting('more_required', 'event_calendar'); + + if ($event_calendar_more_required == 'yes') { + $required_fields = array('title','venue','start_date', + 'brief_description','fees','contact','organiser', + 'event_tags'); + + if ($event_calendar_times == 'yes') { + $required_fields[] = 'start_time'; + if ($event_calendar_hide_end != 'yes') { + $required_fields[] = 'end_time'; + } + } + if ($event_calendar_region_display == 'yes') { + $required_fields[] = 'region'; + } + if ($event_calendar_type_display == 'yes') { + $required_fields[] = 'event_type'; + } + if ($event_calendar_spots_display == 'yes') { + $required_fields[] = 'spots'; + } + } else { + $required_fields = array('title','venue','start_date'); + } + foreach ($required_fields as $fn) { + if (!trim($ed->$fn)) { + $fields_are_valid = FALSE; + break; + } + } + if ($fields_are_valid) { + if ($ed->event_id) { + $event = get_entity($ed->event_id); + if (!$event) { + // do nothing because this is a bad event id + $result->success = false; + } + } else { + $event = new ElggObject(); + $event->subtype = 'event_calendar'; + $event->owner_guid = $_SESSION['user']->getGUID(); + $group_guid = (int) get_input('group_guid',0); + if ($group_guid) { + $event->container_guid = $group_guid; + } else { + $event->container_guid = $event->owner_guid; + } + } + $event->access_id = $ed->access_id; + $event->title = $ed->title; + $event->description = $ed->description; + $event->venue = $ed->venue; + $event->start_date = strtotime($ed->start_date); + if ($ed->end_date) { + $event->end_date = strtotime($ed->end_date); + } else { + $event->end_date = $ed->end_date; + } + if ($event_calendar_times == 'yes') { + $event->start_time = $ed->start_time; + //$event->original_start_date = $event->start_date; + if (is_numeric($ed->start_time)) { + // Set start date to the Unix start time, if set. + // This allows sorting by date *and* time. + $event->start_date += $ed->start_time*60; + } + $event->end_time = $ed->end_time; + } + if ($event_calendar_spots_display == 'yes') { + $event->spots = trim($ed->spots); + } + if ($event_calendar_region_display == 'yes') { + $event->region = $ed->region; + } + if ($event_calendar_type_display == 'yes') { + $event->event_type = $ed->event_type; + } + $event->fees = $ed->fees; + $event->contact = $ed->contact; + $event->organiser = $ed->organiser; + $event->event_tags = array_reverse(string_to_tag_array($ed->event_tags)); + $event->long_description = $ed->long_description; + $event->real_end_time = event_calendar_get_end_time($event); + $result->success = $event->save(); + if ($result->success) { + if ($group_guid && (get_plugin_setting('autogroup', 'event_calendar') == 'yes')) { + event_calendar_add_personal_events_from_group($event->getGUID(),$group_guid); + } + if (get_plugin_setting('add_users', 'event_calendar') == 'yes') { + if (function_exists('autocomplete_member_to_user')) { + $addusers = get_input('adduser',array()); + foreach($addusers as $adduser) { + if ($adduser) { + $user = autocomplete_member_to_user($adduser); + $user_id = $user->guid; + event_calendar_add_personal_event($event->guid,$user_id); + if (get_plugin_setting('add_users_notify', 'event_calendar') == 'yes') { + notify_user($user_id, $CONFIG->site->guid, elgg_echo('event_calendar:add_users_notify:subject'), + sprintf( + elgg_echo('event_calendar:add_users_notify:body'), + $user->name, + $event->title, + $event->getURL() + ) + ); + } + } + } + } + } + } + $result->event = $event; + } else { + // required data missing + $result->success = false; + } + + return $result; +} + +function event_calendar_get_events_between($start_date,$end_date,$is_count,$limit=10,$offset=0,$container_guid=0,$region='-') { + if ($is_count) { + $count = event_calendar_get_entities_from_metadata_between('start_date','end_date', + $start_date, $end_date, "object", "event_calendar", 0, $container_guid, $limit,$offset,"",0,false,true,$region); + return $count; + } else { + $events = event_calendar_get_entities_from_metadata_between('start_date','end_date', + $start_date, $end_date, "object", "event_calendar", 0, $container_guid, $limit,$offset,"",0,false,false,$region); + //return event_calendar_vsort($events,'start_date'); + return $events; + } +} + +function event_calendar_get_open_events_between($start_date,$end_date, +$is_count,$limit=10,$offset=0,$container_guid=0,$region='-', $meta_max = 'spots', $annotation_name = 'personal_event') { + 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,$meta_max,$annotation_name); + return $count; + } else { + $events = 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,false,$region,$meta_max,$annotation_name); + //return event_calendar_vsort($events,'start_date'); + return $events; + } +} + +function event_calendar_get_events_for_user_between($start_date,$end_date,$is_count,$limit=10,$offset=0,$user_guid,$container_guid=0,$region='-') { + if ($is_count) { + $count = event_calendar_get_entities_from_metadata_between('start_date','end_date', + $start_date, $end_date, "object", "event_calendar", $user_guid, $container_guid, $limit,$offset,"",0,true,true,$region); + return $count; + } else { + $events = event_calendar_get_entities_from_metadata_between('start_date','end_date', + $start_date, $end_date, "object", "event_calendar", $user_guid, $container_guid, $limit,$offset,"",0,true,false,$region); + //return event_calendar_vsort($events,'start_date'); + return $events; + } +} + +// TODO - replace the original version with this one +function event_calendar_get_events_for_user_between2($start_date,$end_date,$is_count,$limit=10,$offset=0,$user_guid,$container_guid=0,$region='-') { + if ($is_count) { + $count = event_calendar_get_entities_from_metadata_between('start_date','real_end_time', + $start_date, $end_date, "object", "event_calendar", $user_guid, $container_guid, $limit,$offset,"",0,true,true,$region); + return $count; + } else { + $events = event_calendar_get_entities_from_metadata_between('start_date','real_end_time', + $start_date, $end_date, "object", "event_calendar", $user_guid, $container_guid, $limit,$offset,"",0,true,false,$region); + //return event_calendar_vsort($events,'start_date'); + return $events; + } +} + +function event_calendar_get_events_for_friends_between($start_date,$end_date,$is_count,$limit=10,$offset=0,$user_guid,$container_guid=0,$region='-') { + if ($user_guid) { + $friends = get_user_friends($user_guid,"",5000); + if ($friends) { + $friend_guids = array(); + foreach($friends as $friend) { + $friend_guids[] = $friend->getGUID(); + } + if ($is_count) { + $count = event_calendar_get_entities_from_metadata_between('start_date','end_date', + $start_date, $end_date, "object", "event_calendar", $friend_guids, $container_guid, $limit,$offset,"",0,true,true,$region); + return $count; + } else { + $events = event_calendar_get_entities_from_metadata_between('start_date','end_date', + $start_date, $end_date, "object", "event_calendar", $friend_guids, $container_guid, $limit,$offset,"",0,true,false,$region); + //return event_calendar_vsort($events,'start_date'); + return $events; + } + } + } + return array(); +} + +function event_calendar_vsort($original,$field, $descending = false) { + if (!$original) { + return $original; + } + $sortArr = array(); + + foreach ( $original as $key => $item ) { + $sortArr[ $key ] = $item->$field; + } + + if ( $descending ) { + arsort( $sortArr ); + } else { + asort( $sortArr ); + } + + $resultArr = array(); + foreach ( $sortArr as $key => $value ) { + $resultArr[ $key ] = $original[ $key ]; + } + + return $resultArr; +} + +/** + * Return a list of entities based on the given search criteria. + * In this case, returns entities with the given metadata between two values inclusive + * + * @param mixed $meta_start_name + * @param mixed $meta_end_name + * @param mixed $meta_start_value - start of metadata range, must be numerical value + * @param mixed $meta_end_value - end of metadata range, must be numerical value + * @param string $entity_type The type of entity to look for, eg 'site' or 'object' + * @param string $entity_subtype The subtype of the entity. + * @param mixed $owner_guid Either one integer user guid or an array of user guids + * @param int $container_guid If supplied, the result is restricted to events associated with a specific container + * @param int $limit + * @param int $offset + * @param string $order_by Optional ordering. + * @param int $site_guid The site to get entities for. Leave as 0 (default) for the current site; -1 for all sites. + * @param boolean $filter Filter by events in personal calendar if true + * @param true|false $count If set to true, returns the total number of entities rather than a list. (Default: false) + * + * @return int|array A list of entities, or a count if $count is set to true + */ +function event_calendar_get_entities_from_metadata_between($meta_start_name, $meta_end_name, $meta_start_value, $meta_end_value, $entity_type = "", $entity_subtype = "", $owner_guid = 0, $container_guid = 0, $limit = 10, $offset = 0, $order_by = "", $site_guid = 0, $filter = false, $count = false, $region='-') +{ + global $CONFIG; + + // This should not be possible, but a sanity check just in case + if (!is_numeric($meta_start_value) || !is_numeric($meta_end_value)) { + return FALSE; + } + + $meta_start_n = get_metastring_id($meta_start_name); + $meta_end_n = get_metastring_id($meta_end_name); + if ($region && $region != '-') { + $region_n = get_metastring_id('region'); + $region_value_n = get_metastring_id($region); + if (!$region_n || !$region_value_n) { + if ($count) { + return 0; + } else { + return FALSE; + } + } + } + + $entity_type = sanitise_string($entity_type); + $entity_subtype = get_subtype_id($entity_type, $entity_subtype); + $limit = (int)$limit; + $offset = (int)$offset; + //if ($order_by == "") $order_by = "e.time_created desc"; + if ($order_by == "") $order_by = "v.string asc"; + $order_by = sanitise_string($order_by); + $site_guid = (int) $site_guid; + if ((is_array($owner_guid) && (count($owner_guid)))) { + foreach($owner_guid as $key => $guid) { + $owner_guid[$key] = (int) $guid; + } + } else { + $owner_guid = (int) $owner_guid; + } + + if ((is_array($container_guid) && (count($container_guid)))) { + foreach($container_guid as $key => $guid) { + $container_guid[$key] = (int) $guid; + } + } else { + $container_guid = (int) $container_guid; + } + if ($site_guid == 0) + $site_guid = $CONFIG->site_guid; + + //$access = get_access_list(); + + $where = array(); + + if ($entity_type!="") + $where[] = "e.type='$entity_type'"; + if ($entity_subtype) + $where[] = "e.subtype=$entity_subtype"; + $where[] = "m.name_id='$meta_start_n'"; + $where[] = "m2.name_id='$meta_end_n'"; + $where[] = "((v.string >= $meta_start_value AND v.string <= $meta_end_value) OR ( v2.string >= $meta_start_value AND v2.string <= $meta_end_value) OR (v.string <= $meta_start_value AND v2.string >= $meta_start_value) OR ( v2.string <= $meta_end_value AND v2.string >= $meta_end_value))"; + if ($region && $region != '-') { + $where[] = "m3.name_id='$region_n'"; + $where[] = "m3.value_id='$region_value_n'"; + } + if ($site_guid > 0) + $where[] = "e.site_guid = {$site_guid}"; + if ($filter) { + if (is_array($owner_guid)) { + $where[] = "ms2.string in (".implode(",",$owner_guid).")"; + } else if ($owner_guid > 0) { + $where[] = "ms2.string = {$owner_guid}"; + } + + $where[] = "ms.string = 'personal_event'"; + } else { + if (is_array($owner_guid)) { + $where[] = "e.owner_guid in (".implode(",",$owner_guid).")"; + } else if ($owner_guid > 0) { + $where[] = "e.owner_guid = {$owner_guid}"; + } + } + + if (is_array($container_guid)) { + $where[] = "e.container_guid in (".implode(",",$container_guid).")"; + } else if ($container_guid > 0) + $where[] = "e.container_guid = {$container_guid}"; + + if (!$count) { + $query = "SELECT distinct e.* "; + } else { + $query = "SELECT count(distinct e.guid) as total "; + } + + $query .= "from {$CONFIG->dbprefix}entities e JOIN {$CONFIG->dbprefix}metadata m on e.guid = m.entity_guid JOIN {$CONFIG->dbprefix}metadata m2 on e.guid = m2.entity_guid "; + if ($filter) { + $query .= "JOIN {$CONFIG->dbprefix}annotations a ON (a.entity_guid = e.guid) "; + $query .= "JOIN {$CONFIG->dbprefix}metastrings ms ON (a.name_id = ms.id) "; + $query .= "JOIN {$CONFIG->dbprefix}metastrings ms2 ON (a.value_id = ms2.id) "; + } + if ($region && $region != '-') { + $query .= "JOIN {$CONFIG->dbprefix}metadata m3 ON (e.guid = m3.entity_guid) "; + } + $query .= "JOIN {$CONFIG->dbprefix}metastrings v on v.id = m.value_id JOIN {$CONFIG->dbprefix}metastrings v2 on v2.id = m2.value_id where"; + foreach ($where as $w) + $query .= " $w and "; + $query .= get_access_sql_suffix("e"); // Add access controls + $query .= ' and ' . get_access_sql_suffix("m"); // Add access controls + $query .= ' and ' . get_access_sql_suffix("m2"); // Add access controls + + + + if (!$count) { + $query .= " order by $order_by limit $offset, $limit"; // Add order and limit + $entities = get_data($query, "entity_row_to_elggstar"); + if (get_plugin_setting('add_to_group_calendar', 'event_calendar') == 'yes') { + if (get_entity($container_guid) instanceOf ElggGroup) { + $entities = event_calendar_get_entities_from_metadata_between_related($meta_start_name, $meta_end_name, + $meta_start_value, $meta_end_value, $entity_type, + $entity_subtype, $owner_guid, $container_guid, + $limit = 10, $offset = 0, $order_by = "", $site_guid = 0, + $filter = false, $count = false, $region='-',$entities); + } + } + return $entities; + } else { + if ($row = get_data_row($query)) + return $row->total; + } + return false; +} + +// adds any related events (has the display_on_group relation) +// that meet the appropriate criteria + +function event_calendar_get_entities_from_metadata_between_related($meta_start_name, $meta_end_name, + $meta_start_value, $meta_end_value, $entity_type = "", + $entity_subtype = "", $owner_guid = 0, $container_guid = 0, + $limit = 10, $offset = 0, $order_by = "", $site_guid = 0, + $filter = false, $count = false, $region='-',$main_events) { + + $main_list = array(); + if ($main_events) { + foreach ($main_events as $event) { + $main_list[$event->guid] = $event; + } + } + $related_list = array(); + $related_events = get_entities_from_relationship("display_on_group", $container_guid, TRUE); + if ($related_events) { + foreach ($related_events as $event) { + $related_list[$event->guid] = $event; + } + } + // get all the events (across all containers) that meet the criteria + $all_events = event_calendar_get_entities_from_metadata_between($meta_start_name, $meta_end_name, + $meta_start_value, $meta_end_value, $entity_type, $entity_subtype, $owner_guid, + 0, $limit, $offset, $order_by, $site_guid, $filter, $count, $region); + + if ($all_events) { + foreach($all_events as $event) { + if (array_key_exists($event->guid,$related_list) + && !array_key_exists($event->guid,$main_list)) { + // add to main events + $main_events[] = $event; + } + } + } + return event_calendar_vsort($main_events,$meta_start_name); +} + +// TODO: replace the original version with this one +/** + * Return a list of entities based on the given search criteria. + * In this case, returns entities with the given metadata between two values inclusive + * + * @param mixed $meta_start_name + * @param mixed $meta_end_name + * @param mixed $meta_start_value - start of metadata range, must be numerical value + * @param mixed $meta_end_value - end of metadata range, must be numerical value + * @param string $entity_type The type of entity to look for, eg 'site' or 'object' + * @param string $entity_subtype The subtype of the entity. + * @param mixed $owner_guid Either one integer user guid or an array of user guids + * @param int $container_guid If supplied, the result is restricted to events associated with a specific container + * @param int $limit + * @param int $offset + * @param string $order_by Optional ordering. + * @param int $site_guid The site to get entities for. Leave as 0 (default) for the current site; -1 for all sites. + * @param boolean $filter Filter by events in personal calendar if true + * @param true|false $count If set to true, returns the total number of entities rather than a list. (Default: false) + * @param string $meta_max metadata name containing maximum annotation count + * @param string $annotation_name annotation name to count + * + * @return int|array A list of entities, or a count if $count is set to true + */ +function event_calendar_get_entities_from_metadata_between2 +($meta_start_name, $meta_end_name, $meta_start_value, $meta_end_value, +$entity_type = "", $entity_subtype = "", $owner_guid = 0, $container_guid = 0, +$limit = 10, $offset = 0, $order_by = "", $site_guid = 0, $filter = false, +$count = false, $region='-', $meta_max = '', $annotation_name = '') +{ + global $CONFIG; + + // This should not be possible, but a sanity check just in case + if (!is_numeric($meta_start_value) || !is_numeric($meta_end_value)) { + return FALSE; + } + + $meta_start_n = get_metastring_id($meta_start_name); + $meta_end_n = get_metastring_id($meta_end_name); + if ($region && $region != '-') { + $region_n = get_metastring_id('region'); + $region_value_n = get_metastring_id($region); + if (!$region_n || !$region_value_n) { + if ($count) { + return 0; + } else { + return false; + } + } + } + + $entity_type = sanitise_string($entity_type); + $entity_subtype = get_subtype_id($entity_type, $entity_subtype); + $limit = (int)$limit; + $offset = (int)$offset; + //if ($order_by == "") $order_by = "e.time_created desc"; + if ($order_by == "") $order_by = "v.string asc"; + $order_by = sanitise_string($order_by); + $site_guid = (int) $site_guid; + if ((is_array($owner_guid) && (count($owner_guid)))) { + foreach($owner_guid as $key => $guid) { + $owner_guid[$key] = (int) $guid; + } + } else { + $owner_guid = (int) $owner_guid; + } + + if ((is_array($container_guid) && (count($container_guid)))) { + foreach($container_guid as $key => $guid) { + $container_guid[$key] = (int) $guid; + } + } else { + $container_guid = (int) $container_guid; + } + if ($site_guid == 0) + $site_guid = $CONFIG->site_guid; + + //$access = get_access_list(); + + $where = array(); + + if ($entity_type!="") + $where[] = "e.type='$entity_type'"; + if ($entity_subtype) + $where[] = "e.subtype=$entity_subtype"; + $where[] = "m.name_id='$meta_start_n'"; + $where[] = "m2.name_id='$meta_end_n'"; + $where[] = "((v.string >= $meta_start_value AND v.string <= $meta_end_value) OR ( v2.string >= $meta_start_value AND v2.string <= $meta_end_value) OR (v.string <= $meta_start_value AND v2.string >= $meta_start_value) OR ( v2.string <= $meta_end_value AND v2.string >= $meta_end_value))"; + if ($region && $region != '-') { + $where[] = "m3.name_id='$region_n'"; + $where[] = "m3.value_id='$region_value_n'"; + } + if ($site_guid > 0) + $where[] = "e.site_guid = {$site_guid}"; + if ($filter) { + if (is_array($owner_guid)) { + $where[] = "ms2.string in (".implode(",",$owner_guid).")"; + } else if ($owner_guid > 0) { + $where[] = "ms2.string = {$owner_guid}"; + } + + $where[] = "ms.string = 'personal_event'"; + } else { + if (is_array($owner_guid)) { + $where[] = "e.owner_guid in (".implode(",",$owner_guid).")"; + } else if ($owner_guid > 0) { + $where[] = "e.owner_guid = {$owner_guid}"; + } + } + + if (is_array($container_guid)) { + $where[] = "e.container_guid in (".implode(",",$container_guid).")"; + } else if ($container_guid > 0) + $where[] = "e.container_guid = {$container_guid}"; + + if (!$count) { + $query = "SELECT distinct e.* "; + } else { + $query = "SELECT count(distinct e.guid) as total "; + } + + $query .= "FROM {$CONFIG->dbprefix}entities e JOIN {$CONFIG->dbprefix}metadata m on e.guid = m.entity_guid JOIN {$CONFIG->dbprefix}metadata m2 on e.guid = m2.entity_guid "; + if ($filter) { + $query .= "JOIN {$CONFIG->dbprefix}annotations a ON (a.entity_guid = e.guid) "; + $query .= "JOIN {$CONFIG->dbprefix}metastrings ms ON (a.name_id = ms.id) "; + $query .= "JOIN {$CONFIG->dbprefix}metastrings ms2 ON (a.value_id = ms2.id) "; + } + if ($region && $region != '-') { + $query .= "JOIN {$CONFIG->dbprefix}metadata m3 ON (e.guid = m3.entity_guid) "; + } + if ($meta_max && $annotation_name) { + // This groups events for which the meta max name is defined + // perhaps this should be a left join and accept null values? + // so it would return groups with no spots defined as well + $meta_max_n = get_metastring_id($meta_max); + $ann_n = get_metastring_id($annotation_name); + if (!$meta_max_n || !$ann_n) { + if ($count) { + return 0; + } else { + return false; + } + } + + $query .= " LEFT JOIN {$CONFIG->dbprefix}metadata m4 ON (e.guid = m4.entity_guid AND m4.name_id=$meta_max_n) "; + $query .= " LEFT JOIN {$CONFIG->dbprefix}metastrings ms4 ON (m4.value_id = ms4.id) "; + $where[] = "((ms4.string is null) OR (ms4.string = \"\") OR (CONVERT(ms4.string,SIGNED) > (SELECT count(id) FROM {$CONFIG->dbprefix}annotations ann WHERE ann.entity_guid = e.guid AND name_id = $ann_n GROUP BY entity_guid)))"; + } + $query .= "JOIN {$CONFIG->dbprefix}metastrings v on v.id = m.value_id JOIN {$CONFIG->dbprefix}metastrings v2 on v2.id = m2.value_id where"; + foreach ($where as $w) + $query .= " $w AND "; + $query .= get_access_sql_suffix("e"); // Add access controls + $query .= ' AND ' . get_access_sql_suffix("m"); // Add access controls + $query .= ' AND ' . get_access_sql_suffix("m2"); // Add access controls + + if (!$count) { + $query .= " order by $order_by limit $offset, $limit"; // Add order and limit + return get_data($query, "entity_row_to_elggstar"); + } else { + if ($row = get_data_row($query)) + return $row->total; + } + return false; +} + +function event_calendar_has_personal_event($event_id,$user_id) { + $annotations = get_annotations($event_id, "object", "event_calendar", "personal_event", (int) $user_id, $user_id); + if ($annotations && count($annotations) > 0) { + return true; + } else { + return false; + } +} + +function event_calendar_add_personal_event($event_id,$user_id) { + if ($event_id && $user_id) { + if ( !event_calendar_has_personal_event($event_id,$user_id) + && !event_calendar_has_collision($event_id,$user_id)) { + if (!event_calendar_is_full($event_id)) { + create_annotation($event_id, "personal_event", (int) $user_id, 'integer', $user_id, ACCESS_PUBLIC); + return TRUE; + } + } + } + return FALSE; +} + +function event_calendar_add_personal_events_from_group($event_id,$group_guid) { + $members = get_group_members($group_guid, 100000); + foreach($members as $member) { + $member_id = $member->getGUID(); + event_calendar_add_personal_event($event_id,$member_id); + } +} + +function event_calendar_remove_personal_event($event_id,$user_id) { + $annotations = get_annotations($event_id, "object", "event_calendar", "personal_event", (int) $user_id, $user_id); + if ($annotations) { + foreach ($annotations as $annotation) { + $annotation->delete(); + } + } +} + +function event_calendar_get_personal_events_for_user($user_id,$limit) { + $events = get_entities_from_annotations("object", "event_calendar", "personal_event", $user_id,0, 0, 1000); + $final_events = array(); + if ($events) { + $now = time(); + $one_day = 60*60*24; + // don't show events that have been over for more than a day + foreach($events as $event) { + if (($event->start_date > $now-$one_day) || ($event->end_date && ($event->end_date > $now-$one_day))) { + $final_events[] = $event; + } + } + } + $sorted = event_calendar_vsort($final_events,'start_date'); + return array_slice($sorted,0,$limit); +} + +function event_calendar_get_users_for_event($event_id,$limit,$offset,$is_count) { + if ($is_count) { + return count_annotations($event_id, "object", "event_calendar", "personal_event"); + } else { + $users = array(); + $annotations = get_annotations($event_id, "object", "event_calendar", "personal_event", "", 0, $limit, $offset); + if ($annotations) { + foreach($annotations as $annotation) { + if (($user = get_entity($annotation->value)) && ($user instanceOf ElggUser)) { + $users[] = $user; + } + } + } + return $users; + } +} + +function event_calendar_security_fields() { + $ts = time(); + $token = generate_action_token($ts); + return "__elgg_token=$token&__elgg_ts=$ts"; +} + +function event_calendar_get_events_for_group($group_guid) { + return get_entities('object','event_calendar',0,"",0,0,false,0,$group_guid); +} + +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); + } +} + +function event_calendar_convert_time($time) { + $hour = floor($time/60); + $minute = sprintf("%02d",$time-60*$hour); + return "$hour:$minute"; +} + +function event_calendar_format_time($date,$time1,$time2='') { + if (is_numeric($time1)) { + $t = event_calendar_convert_time($time1); + if (is_numeric($time2)) { + $t .= " - ".event_calendar_convert_time($time2); + } + return "$t, $date"; + } else { + return $date; + } +} + +function event_calendar_activated_for_group($group) { + $group_calendar = get_plugin_setting('group_calendar', 'event_calendar'); + $group_default = get_plugin_setting('group_default', 'event_calendar'); + if ($group && ($group_calendar != 'no')) { + if ( ($group->event_calendar_enable == 'yes') || ((!$group->event_calendar_enable && (!$group_default || $group_default == 'yes')))) { + return true; + } + } + return false; +} + +function event_calendar_get_region($event) { + $event_calendar_region_list_handles = get_plugin_setting('region_list_handles', 'event_calendar'); + $region = trim($event->region); + if ($event_calendar_region_list_handles == 'yes') { + $region = elgg_echo('event_calendar:region:'.$region); + } + return htmlspecialchars($region); +} + +function event_calendar_get_type($event) { + $event_calendar_type_list_handles = get_plugin_setting('type_list_handles', 'event_calendar'); + $type = trim($event->event_type); + if ($event_calendar_type_list_handles == 'yes') { + $type = elgg_echo('event_calendar:type:'.$type); + } + return htmlspecialchars($type); +} + +function event_calendar_get_formatted_full_items($event) { + $time_bit = event_calendar_get_formatted_time($event); + $event_calendar_region_display = get_plugin_setting('region_display', 'event_calendar'); + $event_calendar_type_display = 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; + $item = new stdClass(); + $item->title = elgg_echo('event_calendar:venue_label'); + $item->value = htmlspecialchars($event->venue); + $event_items[] = $item; + if ($event_calendar_region_display == 'yes') { + $item = new stdClass(); + $item->title = elgg_echo('event_calendar:region_label'); + $item->value = event_calendar_get_region($event); + $event_items[] = $item; + } + if ($event_calendar_type_display == 'yes') { + $item = new stdClass(); + $item->title = elgg_echo('event_calendar:type_label'); + $item->value = event_calendar_get_type($event); + $event_items[] = $item; + } + $item = new stdClass(); + $item->title = elgg_echo('event_calendar:fees_label'); + $item->value = htmlspecialchars($event->fees); + $event_items[] = $item; + $item = new stdClass(); + $item->title = elgg_echo('event_calendar:organiser_label'); + $item->value = htmlspecialchars($event->organiser); + $event_items[] = $item; + $item = new stdClass(); + $item->title = elgg_echo('event_calendar:contact_label'); + $item->value = htmlspecialchars($event->contact); + $event_items[] = $item; + $item = new stdClass(); + $item->title = elgg_echo('event_calendar:event_tags_label'); + $item->value = elgg_view("output/tags",array('value'=>$event->event_tags)); + $event_items[] = $item; + + return $event_items; +} + +function event_calendar_get_formatted_time($event) { + $date_format = 'j M Y'; + $event_calendar_times = get_plugin_setting('times', 'event_calendar'); + + $start_date = date($date_format,$event->start_date); + if ((!$event->end_date) || ($event->end_date == $event->start_date)) { + if ($event_calendar_times) { + $start_date = event_calendar_format_time($start_date,$event->start_time,$event->end_time); + } + $time_bit = $start_date; + } else { + $end_date = date($date_format,$event->end_date); + if ($event_calendar_times) { + $start_date = event_calendar_format_time($start_date,$event->start_time); + $end_date = event_calendar_format_time($end_date,$event->end_time); + } + $time_bit = "$start_date - $end_date"; + } + + return $time_bit; +} + +function event_calendar_get_formatted_date($ts) { + // TODO: make the date format configurable + return date('j/n/Y',$ts); +} + +function event_calendar_is_full($event_id) { + $event_calendar_spots_display = get_plugin_setting('spots_display', 'event_calendar'); + if ($event_calendar_spots_display == 'yes') { + $count = event_calendar_get_users_for_event($event_id,0,0,TRUE); + $event = get_entity($event_id); + if ($event) { + $spots = $event->spots; + if (is_numeric($spots)) { + if ($count >= $spots) { + return TRUE; + } + } + } + } + return FALSE; +} + +function event_calendar_has_collision($event_id, $user_id) { + $no_collisions = get_plugin_setting('no_collisions', 'event_calendar'); + if ($no_collisions == 'yes') { + $event = get_entity($event_id); + if ($event) { + $start_time = $event->start_date; + $end_time = event_calendar_get_end_time($event); + // look to see if the user already has events within this period + $count = event_calendar_get_events_for_user_between2($start_time,$end_time,TRUE,10,0,$user_id); + if ($count > 0) { + return TRUE; + } else { + return FALSE; + } + } + } + + return FALSE; +} + +// this complicated bit of code determines the event end time +function event_calendar_get_end_time($event) { + $default_length = get_plugin_setting('collision_length', 'event_calendar'); + $start_time = $event->start_date; + $end_time = $event->end_time; + $end_date = $event->end_date; + if($end_date) { + if ($end_time) { + $end_time = $end_date+$end_time*60; + } else if ($start_time == $end_date) { + if (is_numeric($default_length)) { + $end_time = $end_date + $default_length; + } else { + // default to an hour length + $end_time = $start_time + 3600; + } + } else { + $end_time = $end_date; + } + } else { + if ($end_time) { + if ($event->start_time) { + $end_time = $start_time + ($end_time*60 - $event->start_time*60); + } else { + $end_time = $start_time + $end_time*60; + } + } else { + if (is_numeric($default_length)) { + $end_time = $start_time + $default_length; + } else { + // default to an hour length + $end_time = $start_time + 3600; + } + } + } + + return $end_time; +} + +// a version to allow for some customised options +function event_calendar_view_entity_list($entities, $count, $offset, $limit, $fullview = true, $viewtypetoggle = true, $pagination = true) { + $count = (int) $count; + $limit = (int) $limit; + + // do not require views to explicitly pass in the offset + if (!$offset = (int) $offset) { + $offset = sanitise_int(get_input('offset', 0)); + } + + $context = get_context(); + + $html = elgg_view('event_calendar/entities/entity_list',array( + 'entities' => $entities, + 'count' => $count, + 'offset' => $offset, + 'limit' => $limit, + 'baseurl' => $_SERVER['REQUEST_URI'], + 'fullview' => $fullview, + 'context' => $context, + 'viewtypetoggle' => $viewtypetoggle, + 'viewtype' => get_input('search_viewtype','list'), + 'pagination' => $pagination + )); + + return $html; +} + +function event_calendar_personal_can_manage($event,$user_id) { + $authorised = FALSE; + $event_calendar_personal_manage = get_plugin_setting('personal_manage', 'event_calendar'); + if ($event_calendar_personal_manage != 'no') { + $authorised = TRUE; + } else { + if(isadminloggedin()) { + $authorised = TRUE; + } else { + // load the event from the database + if ($event && ($event->owner_guid == $user_id)) { + $authorised = TRUE; + } + } + } + + return $authorised; +} + +function event_calendar_send_event_request($event,$user_id) { + global $CONFIG; + $result = FALSE; + if(add_entity_relationship($user_id, 'event_calendar_request', $event->guid)) { + $subject = elgg_echo('event_calendar:request_subject'); + $name = get_entity($user_id)->name; + $title = $event->title; + $url = $event->getUrl(); + $link = $CONFIG->wwwroot.'pg/event_calendar/review_requests/'.$event->guid; + $message = sprintf(elgg_echo('event_calendar:request_message'),$name,$title,$url,$link); + notify_user($event->owner_guid,$CONFIG->site->guid,$subject,$message); + $result = TRUE; + } + return $result; +} + +?> \ No newline at end of file diff --git a/trunk/pages/review_requests.php b/trunk/pages/review_requests.php new file mode 100644 index 000000000..fc6c3726a --- /dev/null +++ b/trunk/pages/review_requests.php @@ -0,0 +1,33 @@ + 'event_calendar_request', + 'relationship_guid' => $event_id, + 'inverse_relationship' => TRUE, + 'limit' => 9999) + ); + if ($requests) { + $body = elgg_view('event_calendar/review_requests',array('requests' => $requests, 'entity' => $event)); + //$body = elgg_view('page_elements/contentwrapper',array('body'=>$body)); + } else { + $body = elgg_view('page_elements/contentwrapper',array('body'=>elgg_echo('event_calendar:review_requests_request_none'))); + } +} else { + $body = elgg_view('page_elements/contentwrapper',array('body'=>elgg_echo('event_calendar:review_requests_error'))); +} + +$body = elgg_view_layout('two_column_left_sidebar', '', elgg_view_title($title).$body); + +page_draw($title, $body); +?> \ No newline at end of file diff --git a/trunk/show_event.php b/trunk/show_event.php new file mode 100644 index 000000000..f2869c36d --- /dev/null +++ b/trunk/show_event.php @@ -0,0 +1,60 @@ + + * @copyright Radagast Solutions 2008 + * @link http://radagast.biz/ + * + */ + +// Load Elgg engine +require_once(dirname(dirname(dirname(__FILE__))) . "/engine/start.php"); + +// Load event calendar model +require_once(dirname(__FILE__) . "/models/model.php"); + +// Define context +set_context('event_calendar'); + +global $CONFIG; + +$event_id = get_input('event_id',0); +if ($event_id && ($event = get_entity($event_id))) { + $event_container = get_entity($event->container_guid); + if ($event_container instanceOf ElggGroup) { + // Re-define context + set_context('groups'); + set_page_owner($event_container->getGUID()); + } + $count = event_calendar_get_users_for_event($event_id,0,0,true); + if ($count > 0) { + add_submenu_item(sprintf(elgg_echo('event_calendar:personal_event_calendars_link'),$count), $CONFIG->url . "mod/event_calendar/display_event_users.php?event_id=".$event_id, '0eventnonadmin'); + } + if (isloggedin()) { + $user_id = get_loggedin_userid(); + if (event_calendar_personal_can_manage($event,$user_id)) { + if (event_calendar_has_personal_event($event_id,$user_id)) { + add_submenu_item(elgg_echo('event_calendar:remove_from_my_calendar'), $CONFIG->url . "action/event_calendar/manage?event_action=remove_personal&event_id=".$event_id.'&'.event_calendar_security_fields(), '0eventnonadmin'); + } else { + if (!event_calendar_is_full($event_id) && !event_calendar_has_collision($event_id,$user_id)) { + add_submenu_item(elgg_echo('event_calendar:add_to_my_calendar'), $CONFIG->url . "action/event_calendar/manage?event_action=add_personal&event_id=".$event_id.'&'.event_calendar_security_fields(), '0eventnonadmin'); + } + } + } else { + if (!check_entity_relationship($user_id, 'event_calendar_request', $event_id)) { + add_submenu_item(elgg_echo('event_calendar:make_request_title'), $CONFIG->url . "action/event_calendar/request_personal_calendar?event_id=".$event_id.'&'.event_calendar_security_fields(), '0eventnonadmin'); + } + } + } + $body = elgg_view('object/event_calendar',array('entity'=>$event,'full'=>true)); + $title = $event->title; + page_draw($title,elgg_view_layout("two_column_left_sidebar", '', elgg_view_title($title) . $body)); +} else { + register_error('event_calendar:error_nosuchevent'); + forward(); +} +?> \ No newline at end of file diff --git a/trunk/show_events.php b/trunk/show_events.php new file mode 100644 index 000000000..4d8f09702 --- /dev/null +++ b/trunk/show_events.php @@ -0,0 +1,213 @@ + + * @copyright Radagast Solutions 2008 + * @link http://radagast.biz/ + * + */ + +// Load Elgg engine +require_once(dirname(dirname(dirname(__FILE__))) . "/engine/start.php"); + +// Load event model +require_once(dirname(__FILE__) . "/models/model.php"); + +// Define context +set_context('event_calendar'); + +global $CONFIG; + +global $autofeed; +$autofeed = true; + +$event = ''; + +$event_calendar_listing_format = get_plugin_setting('listing_format', 'event_calendar'); +$event_calendar_spots_display = trim(get_plugin_setting('spots_display', 'event_calendar')); +$event_calendar_first_date = trim(get_plugin_setting('first_date', 'event_calendar')); +$event_calendar_last_date = trim(get_plugin_setting('last_date', 'event_calendar')); + +$original_start_date = get_input('start_date',date('Y-m-d')); +if ( $event_calendar_first_date && ($original_start_date < $event_calendar_first_date) ) { + $original_start_date = $event_calendar_first_date; +} +if ( $event_calendar_last_date && ($original_start_date > $event_calendar_last_date) ) { + $original_start_date = $event_calendar_first_date; +} + +if ($event_calendar_listing_format == 'paged') { + $start_ts = strtotime($original_start_date); + $start_date = $original_start_date; + if ($event_calendar_last_date) { + $end_ts = strtotime($event_calendar_last_date); + } else { + // set to a large number + $end_ts = 2000000000; + } +} else { + + // the default interval is one month + $day = 60*60*24; + $week = 7*$day; + $month = 31*$day; + + $mode = trim(get_input('mode','')); + + if ($mode == "day") { + $start_date = $original_start_date; + $end_date = $start_date; + $start_ts = strtotime($start_date); + $end_ts = strtotime($end_date)+$day-1; + } else if ($mode == "week") { + // need to adjust start_date to be the beginning of the week + $start_ts = strtotime($original_start_date); + $start_ts -= date("w",$start_ts)*$day; + $end_ts = $start_ts + 6*$day; + + $start_date = date('Y-m-d',$start_ts); + $end_date = date('Y-m-d',$end_ts); + } else { + $start_ts = strtotime($original_start_date); + $month = date('m',$start_ts); + $year = date('Y',$start_ts); + $start_date = $year.'-'.$month.'-1'; + $end_date = $year.'-'.$month.'-'.getLastDayOfMonth($month,$year); + //$subtitle = elgg_echo('event_calendar:month_label').': '.date('F Y',$start_ts); + // RIBA wants month prefix removed + } + + if ($event_calendar_first_date && ($start_date < $event_calendar_first_date)) { + $start_date = $event_calendar_first_date; + } + + if ($event_calendar_last_date && ($end_date > $event_calendar_last_date)) { + $end_date = $event_calendar_last_date; + } + + $start_ts = strtotime($start_date); + + if ($mode == "day") { + $end_ts = strtotime($end_date)+$day-1; + $subtitle = elgg_echo('event_calendar:day_label').': '.date('j F Y',strtotime($start_date)); + } else if ($mode == "week") { + $end_ts = $start_ts + 6*$day; + $subtitle = elgg_echo('event_calendar:week_label').': '.date('j F',$start_ts) . ' - '.date('j F Y',$end_ts); + } else { + //$subtitle = elgg_echo('event_calendar:month_label').': '.date('F Y',$start_ts); + // RIBA wants month prefix removed + $end_ts = strtotime($end_date); + $subtitle = date('F Y',$start_ts); + } +} + +$group_guid = (int) get_input('group_guid',0); +if ($group_guid && $group = get_entity($group_guid)) { + // redefine context + set_context('groups'); + set_page_owner($group_guid); + $group_calendar = get_plugin_setting('group_calendar', 'event_calendar'); + if (!$group_calendar || $group_calendar == 'members') { + if (page_owner_entity()->canWriteToContainer($_SESSION['user'])){ + add_submenu_item(elgg_echo('event_calendar:new'), $CONFIG->url . "pg/event_calendar/new/?group_guid=" . page_owner(), '1eventcalendaradmin'); + } + } else if ($group_calendar == 'admin') { + if (isadminloggedin() || ($group->owner_guid == get_loggedin_userid())) { + add_submenu_item(elgg_echo('event_calendar:new'), $CONFIG->url . "pg/event_calendar/new/?group_guid=" . page_owner(), '1eventcalendaradmin'); + } + } +} + +$offset = get_input('offset'); + +if ($offset != NULL) { + // don't allow ajax magic during pagination + $offset = (int) $offset; + $callback=''; +} else { + $offset = 0; + $callback = get_input('callback',''); +} + +$limit = 15; +if ($event_calendar_spots_display == 'yes') { + $filter = get_input('filter','open'); +} else { + $filter = get_input('filter','all'); +} +$region = get_input('region','-'); +if ($filter == 'all') { + $count = event_calendar_get_events_between($start_ts,$end_ts,true,$limit,$offset,$group_guid,$region); + $events = event_calendar_get_events_between($start_ts,$end_ts,false,$limit,$offset,$group_guid,$region); +} else if ($filter == 'open') { + $count = event_calendar_get_open_events_between($start_ts,$end_ts,true,$limit,$offset,$group_guid,$region); + $events = event_calendar_get_open_events_between($start_ts,$end_ts,false,$limit,$offset,$group_guid,$region); +} else if ($filter == 'friends') { + $user_guid = get_loggedin_userid(); + $count = event_calendar_get_events_for_friends_between($start_ts,$end_ts,true,$limit,$offset,$user_guid,$group_guid,$region); + $events = event_calendar_get_events_for_friends_between($start_ts,$end_ts,false,$limit,$offset,$user_guid,$group_guid,$region); +} else if ($filter == 'mine') { + $user_guid = get_loggedin_userid(); + $count = event_calendar_get_events_for_user_between($start_ts,$end_ts,true,$limit,$offset,$user_guid,$group_guid,$region); + $events = event_calendar_get_events_for_user_between($start_ts,$end_ts,false,$limit,$offset,$user_guid,$group_guid,$region); +} + +extend_view('metatags','event_calendar/metatags'); + +$vars = array( 'original_start_date' => $original_start_date, + 'start_date' => $start_date, + 'end_date' => $end_date, + 'first_date' => $event_calendar_first_date, + 'last_date' => $event_calendar_last_date, + 'mode' => $mode, + 'events' => $events, + 'count' => $count, + 'offset' => $offset, + 'limit' => $limit, + 'group_guid' => $group_guid, + 'filter' => $filter, + 'region' => $region, + 'listing_format' => $event_calendar_listing_format, +); + +if ($callback) { + if (isloggedin()) { + $nav = elgg_view('event_calendar/nav',$vars); + } else { + $nav = ''; + } + if ($events) { + if (get_plugin_setting('agenda_view', 'event_calendar') == 'yes') { + $event_list = elgg_view('event_calendar/agenda_view',$vars); + } else { + $event_list = elgg_view_entity_list($events, $count, $offset, $limit, false, false); + } + } else { + $event_list = '

'.elgg_echo('event_calendar:no_events_found').'

'; + } + echo $nav.'
'.$event_list; +} else { + + $body = elgg_view('event_calendar/show_events', $vars); + + if ($event_calendar_listing_format == 'paged') { + $title = elgg_echo('event_calendar:upcoming_events_title'); + } else { + $title = elgg_echo('event_calendar:show_events_title'). ' ('.$subtitle.')'; + } + + $body = elgg_view('page_elements/contentwrapper',array('body' =>$body, 'subclass' => 'events')); + + page_draw($title,elgg_view_layout("two_column_left_sidebar", '', elgg_view_title($title).$body)); +} + +function getLastDayOfMonth($month,$year) { + return idate('d', mktime(0, 0, 0, ($month + 1), 0, $year)); +} + + +?> \ No newline at end of file diff --git a/trunk/start.php b/trunk/start.php new file mode 100644 index 000000000..d12f56848 --- /dev/null +++ b/trunk/start.php @@ -0,0 +1,190 @@ + + * @copyright Radagast Solutions 2008 + * @link http://radagast.biz/ + */ + // Load event calendar model + require_once(dirname(__FILE__) . "/models/model.php"); + /** + * event calendar initialisation + * + * These parameters are required for the event API, but we won't use them: + * + * @param unknown_type $event + * @param unknown_type $object_type + * @param unknown_type $object + */ + + function event_calendar_init() { + + // Load system configuration + global $CONFIG; + + // Register a page handler, so we can have nice URLs + register_page_handler('event_calendar','event_calendar_page_handler'); + + // Register URL handler + register_entity_url_handler('event_calendar_url','object', 'event_calendar'); + + // Register granular notification for this type + if (is_callable('register_notification_object')) + register_notification_object('object', 'event_calendar', elgg_echo('event_calendar:new_event')); + + // Set up menu for users + if (isloggedin()) { + $site_calendar = get_plugin_setting('site_calendar', 'event_calendar'); + if (!$site_calendar || $site_calendar != 'no') { + add_menu(elgg_echo('item:object:event_calendar'), $CONFIG->wwwroot . "pg/event_calendar/"); + } + } + // make tags searchable for Elgg 1.7.4 + if (function_exists('elgg_register_tag_metadata_name')) { + elgg_register_tag_metadata_name('event_tags'); + } + + //add to group profile page + $group_calendar = get_plugin_setting('group_calendar', 'event_calendar'); + if (!$group_calendar || $group_calendar != 'no') { + $group_profile_display = get_plugin_setting('group_profile_display', 'event_calendar'); + if (!$group_profile_display || $group_profile_display == 'right') { + extend_view('groups/right_column', 'event_calendar/groupprofile_calendar'); + } else if ($group_profile_display == 'left') { + extend_view('groups/left_column', 'event_calendar/groupprofile_calendar'); + } + } + + //add to the css + extend_view('css', 'event_calendar/css'); + + //add a widget + add_widget_type('event_calendar',elgg_echo("event_calendar:widget_title"),elgg_echo('event_calendar:widget:description')); + + // add the event calendar group tool option + if (function_exists('add_group_tool_option')) { + $event_calendar_group_default = get_plugin_setting('group_default', 'event_calendar'); + if (!$event_calendar_group_default || ($event_calendar_group_default == 'yes')) { + add_group_tool_option('event_calendar',elgg_echo('event_calendar:enable_event_calendar'),true); + } else { + add_group_tool_option('event_calendar',elgg_echo('event_calendar:enable_event_calendar'),false); + } + } + + // if autogroup is set, listen and respond to join/leave events + if (get_plugin_setting('autogroup', 'event_calendar') == 'yes') { + register_elgg_event_handler('join', 'group', 'event_calendar_handle_join'); + register_elgg_event_handler('leave', 'group', 'event_calendar_handle_leave'); + } + + register_entity_type('object','event_calendar'); + } + + function event_calendar_pagesetup() { + + global $CONFIG; + + $page_owner = page_owner_entity(); + + $context = get_context(); + + // Group submenu option + if ($page_owner instanceof ElggGroup && $context == 'groups') { + if (event_calendar_activated_for_group($page_owner)) { + add_submenu_item(elgg_echo("event_calendar:group"), $CONFIG->wwwroot . "pg/event_calendar/group/" . $page_owner->getGUID()); + } + } else if ($context == 'event_calendar'){ + add_submenu_item(elgg_echo("event_calendar:site_wide_link"), $CONFIG->wwwroot . "pg/event_calendar/"); + $site_calendar = get_plugin_setting('site_calendar', 'event_calendar'); + if (!$site_calendar || $site_calendar == 'admin') { + if (isadminloggedin()) { + // only admins can post directly to the site-wide calendar + add_submenu_item(elgg_echo('event_calendar:new'), $CONFIG->url . "pg/event_calendar/new/", 'eventcalendaractions'); + } + } else if ($site_calendar == 'loggedin') { + // any logged-in user can post to the site calendar + if (isloggedin()) { + add_submenu_item(elgg_echo('event_calendar:new'), $CONFIG->url . "pg/event_calendar/new/", 'eventcalendaractions'); + } + } + } + + if (($context == 'groups') || ($context == 'event_calendar')) { + if (($event_id = get_input('event_id',0)) && ($event = get_entity($event_id))) { + if (isadminloggedin() && (get_plugin_setting('allow_featured', 'event_calendar') == 'yes')) { + if ($event->featured) { + add_submenu_item(elgg_echo('event_calendar:unfeature'), $CONFIG->url . "action/event_calendar/unfeature?event_id=".$event_id.'&'.event_calendar_security_fields(), 'eventcalendaractions'); + } else { + add_submenu_item(elgg_echo('event_calendar:feature'), $CONFIG->url . "action/event_calendar/feature?event_id=".$event_id.'&'.event_calendar_security_fields(), 'eventcalendaractions'); + } + } + add_submenu_item(elgg_echo("event_calendar:view_link"), $CONFIG->wwwroot . "pg/event_calendar/view/" . $event_id,'0eventcalendaradmin'); + if ($event->canEdit()) { + add_submenu_item(elgg_echo("event_calendar:edit_link"), $CONFIG->wwwroot . "mod/event_calendar/manage_event.php?event_id=" . $event_id,'0eventcalendaradmin'); + add_submenu_item(elgg_echo("event_calendar:delete_link"), $CONFIG->wwwroot . "mod/event_calendar/delete_confirm.php?event_id=" . $event_id,'0eventcalendaradmin'); + $event_calendar_personal_manage = get_plugin_setting('personal_manage', 'event_calendar'); + if ($event_calendar_personal_manage == 'no') { + add_submenu_item(elgg_echo('event_calendar:review_requests_title'), $CONFIG->wwwroot . "pg/event_calendar/review_requests/".$event_id, '0eventcalendaradmin'); + } + } + } + } + } + + function event_calendar_url($entity) { + global $CONFIG; + return $CONFIG->url . 'pg/event_calendar/view/'.$entity->getGUID(); + } + + /** + * Page handler; allows the use of fancy URLs + * + * @param array $page From the page_handler function + * @return true|false Depending on success + */ + function event_calendar_page_handler($page) { + if (isset($page[0]) && $page[0]) { + if (($page[0] == 'group') && isset($page[1])) { + set_input('group_guid',$page[1]); + if (isset($page[2])) { + set_input('filter',$page[2]); + } + @include(dirname(__FILE__) . "/show_events.php"); + } else if (($page[0] == 'view') && isset($page[1])) { + set_input('event_id',$page[1]); + @include(dirname(__FILE__) . "/show_event.php"); + } else if ($page[0] == 'new') { + @include(dirname(__FILE__) . "/manage_event.php"); + } else if ($page[0] == 'review_requests' && isset($page[1])) { + set_input('event_id',$page[1]); + @include(dirname(__FILE__) . "/pages/review_requests.php"); + } else if (in_array($page[0],array('all','friends','mine'))) { + set_input('filter',$page[0]); + @include(dirname(__FILE__) . "/show_events.php"); + } + } else { + @include(dirname(__FILE__) . "/show_events.php"); + } + return true; + } + +// Make sure the event calendar functions are called + register_elgg_event_handler('init','system','event_calendar_init'); + register_elgg_event_handler('pagesetup','system','event_calendar_pagesetup'); + +// Register actions + + global $CONFIG; + register_action("event_calendar/manage",false,$CONFIG->pluginspath . "event_calendar/actions/manage.php"); + register_action("event_calendar/request_personal_calendar",false,$CONFIG->pluginspath . "event_calendar/actions/request_personal_calendar.php"); + register_action("event_calendar/toggle_personal_calendar",false,$CONFIG->pluginspath . "event_calendar/actions/toggle_personal_calendar.php"); + register_action("event_calendar/killrequest",false,$CONFIG->pluginspath . "event_calendar/actions/killrequest.php"); + register_action("event_calendar/addtocalendar",false,$CONFIG->pluginspath . "event_calendar/actions/addtocalendar.php"); + register_action("event_calendar/add_to_group",false,$CONFIG->pluginspath . "event_calendar/actions/add_to_group.php"); + register_action("event_calendar/remove_from_group",false,$CONFIG->pluginspath . "event_calendar/actions/remove_from_group.php"); + +?> \ No newline at end of file diff --git a/trunk/ui.core.min.js b/trunk/ui.core.min.js new file mode 100644 index 000000000..b2352c67f --- /dev/null +++ b/trunk/ui.core.min.js @@ -0,0 +1,9 @@ +/* + * jQuery UI 1.7.2 + * + * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT (MIT-LICENSE.txt) + * and GPL (GPL-LICENSE.txt) licenses. + * + * http://docs.jquery.com/UI + */ jQuery.ui||(function(c){var i=c.fn.remove,d=c.browser.mozilla&&(parseFloat(c.browser.version)<1.9);c.ui={version:"1.7.2",plugin:{add:function(k,l,n){var m=c.ui[k].prototype;for(var j in n){m.plugins[j]=m.plugins[j]||[];m.plugins[j].push([l,n[j]])}},call:function(j,l,k){var n=j.plugins[l];if(!n||!j.element[0].parentNode){return}for(var m=0;m0){return true}m[j]=1;l=(m[j]>0);m[j]=0;return l},isOverAxis:function(k,j,l){return(k>j)&&(k<(j+l))},isOver:function(o,k,n,m,j,l){return c.ui.isOverAxis(o,n,j)&&c.ui.isOverAxis(k,m,l)},keyCode:{BACKSPACE:8,CAPS_LOCK:20,COMMA:188,CONTROL:17,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,INSERT:45,LEFT:37,NUMPAD_ADD:107,NUMPAD_DECIMAL:110,NUMPAD_DIVIDE:111,NUMPAD_ENTER:108,NUMPAD_MULTIPLY:106,NUMPAD_SUBTRACT:109,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SHIFT:16,SPACE:32,TAB:9,UP:38}};if(d){var f=c.attr,e=c.fn.removeAttr,h="http://www.w3.org/2005/07/aaa",a=/^aria-/,b=/^wairole:/;c.attr=function(k,j,l){var m=l!==undefined;return(j=="role"?(m?f.call(this,k,j,"wairole:"+l):(f.apply(this,arguments)||"").replace(b,"")):(a.test(j)?(m?k.setAttributeNS(h,j.replace(a,"aaa:"),l):f.call(this,k,j.replace(a,"aaa:"))):f.apply(this,arguments)))};c.fn.removeAttr=function(j){return(a.test(j)?this.each(function(){this.removeAttributeNS(h,j.replace(a,""))}):e.call(this,j))}}c.fn.extend({remove:function(){c("*",this).add(this).each(function(){c(this).triggerHandler("remove")});return i.apply(this,arguments)},enableSelection:function(){return this.attr("unselectable","off").css("MozUserSelect","").unbind("selectstart.ui")},disableSelection:function(){return this.attr("unselectable","on").css("MozUserSelect","none").bind("selectstart.ui",function(){return false})},scrollParent:function(){var j;if((c.browser.msie&&(/(static|relative)/).test(this.css("position")))||(/absolute/).test(this.css("position"))){j=this.parents().filter(function(){return(/(relative|absolute|fixed)/).test(c.curCSS(this,"position",1))&&(/(auto|scroll)/).test(c.curCSS(this,"overflow",1)+c.curCSS(this,"overflow-y",1)+c.curCSS(this,"overflow-x",1))}).eq(0)}else{j=this.parents().filter(function(){return(/(auto|scroll)/).test(c.curCSS(this,"overflow",1)+c.curCSS(this,"overflow-y",1)+c.curCSS(this,"overflow-x",1))}).eq(0)}return(/fixed/).test(this.css("position"))||!j.length?c(document):j}});c.extend(c.expr[":"],{data:function(l,k,j){return !!c.data(l,j[3])},focusable:function(k){var l=k.nodeName.toLowerCase(),j=c.attr(k,"tabindex");return(/input|select|textarea|button|object/.test(l)?!k.disabled:"a"==l||"area"==l?k.href||!isNaN(j):!isNaN(j))&&!c(k)["area"==l?"parents":"closest"](":hidden").length},tabbable:function(k){var j=c.attr(k,"tabindex");return(isNaN(j)||j>=0)&&c(k).is(":focusable")}});function g(m,n,o,l){function k(q){var p=c[m][n][q]||[];return(typeof p=="string"?p.split(/,?\s+/):p)}var j=k("getter");if(l.length==1&&typeof l[0]=="string"){j=j.concat(k("getterSetter"))}return(c.inArray(o,j)!=-1)}c.widget=function(k,j){var l=k.split(".")[0];k=k.split(".")[1];c.fn[k]=function(p){var n=(typeof p=="string"),o=Array.prototype.slice.call(arguments,1);if(n&&p.substring(0,1)=="_"){return this}if(n&&g(l,k,p,o)){var m=c.data(this[0],k);return(m?m[p].apply(m,o):undefined)}return this.each(function(){var q=c.data(this,k);(!q&&!n&&c.data(this,k,new c[l][k](this,p))._init());(q&&n&&c.isFunction(q[p])&&q[p].apply(q,o))})};c[l]=c[l]||{};c[l][k]=function(o,n){var m=this;this.namespace=l;this.widgetName=k;this.widgetEventPrefix=c[l][k].eventPrefix||k;this.widgetBaseClass=l+"-"+k;this.options=c.extend({},c.widget.defaults,c[l][k].defaults,c.metadata&&c.metadata.get(o)[k],n);this.element=c(o).bind("setData."+k,function(q,p,r){if(q.target==o){return m._setData(p,r)}}).bind("getData."+k,function(q,p){if(q.target==o){return m._getData(p)}}).bind("remove",function(){return m.destroy()})};c[l][k].prototype=c.extend({},c.widget.prototype,j);c[l][k].getterSetter="option"};c.widget.prototype={_init:function(){},destroy:function(){this.element.removeData(this.widgetName).removeClass(this.widgetBaseClass+"-disabled "+this.namespace+"-state-disabled").removeAttr("aria-disabled")},option:function(l,m){var k=l,j=this;if(typeof l=="string"){if(m===undefined){return this._getData(l)}k={};k[l]=m}c.each(k,function(n,o){j._setData(n,o)})},_getData:function(j){return this.options[j]},_setData:function(j,k){this.options[j]=k;if(j=="disabled"){this.element[k?"addClass":"removeClass"](this.widgetBaseClass+"-disabled "+this.namespace+"-state-disabled").attr("aria-disabled",k)}},enable:function(){this._setData("disabled",false)},disable:function(){this._setData("disabled",true)},_trigger:function(l,m,n){var p=this.options[l],j=(l==this.widgetEventPrefix?l:this.widgetEventPrefix+l);m=c.Event(m);m.type=j;if(m.originalEvent){for(var k=c.event.props.length,o;k;){o=c.event.props[--k];m[o]=m.originalEvent[o]}}this.element.trigger(m,n);return !(c.isFunction(p)&&p.call(this.element[0],m,n)===false||m.isDefaultPrevented())}};c.widget.defaults={disabled:false};c.ui.mouse={_mouseInit:function(){var j=this;this.element.bind("mousedown."+this.widgetName,function(k){return j._mouseDown(k)}).bind("click."+this.widgetName,function(k){if(j._preventClickEvent){j._preventClickEvent=false;k.stopImmediatePropagation();return false}});if(c.browser.msie){this._mouseUnselectable=this.element.attr("unselectable");this.element.attr("unselectable","on")}this.started=false},_mouseDestroy:function(){this.element.unbind("."+this.widgetName);(c.browser.msie&&this.element.attr("unselectable",this._mouseUnselectable))},_mouseDown:function(l){l.originalEvent=l.originalEvent||{};if(l.originalEvent.mouseHandled){return}(this._mouseStarted&&this._mouseUp(l));this._mouseDownEvent=l;var k=this,m=(l.which==1),j=(typeof this.options.cancel=="string"?c(l.target).parents().add(l.target).filter(this.options.cancel).length:false);if(!m||j||!this._mouseCapture(l)){return true}this.mouseDelayMet=!this.options.delay;if(!this.mouseDelayMet){this._mouseDelayTimer=setTimeout(function(){k.mouseDelayMet=true},this.options.delay)}if(this._mouseDistanceMet(l)&&this._mouseDelayMet(l)){this._mouseStarted=(this._mouseStart(l)!==false);if(!this._mouseStarted){l.preventDefault();return true}}this._mouseMoveDelegate=function(n){return k._mouseMove(n)};this._mouseUpDelegate=function(n){return k._mouseUp(n)};c(document).bind("mousemove."+this.widgetName,this._mouseMoveDelegate).bind("mouseup."+this.widgetName,this._mouseUpDelegate);(c.browser.safari||l.preventDefault());l.originalEvent.mouseHandled=true;return true},_mouseMove:function(j){if(c.browser.msie&&!j.button){return this._mouseUp(j)}if(this._mouseStarted){this._mouseDrag(j);return j.preventDefault()}if(this._mouseDistanceMet(j)&&this._mouseDelayMet(j)){this._mouseStarted=(this._mouseStart(this._mouseDownEvent,j)!==false);(this._mouseStarted?this._mouseDrag(j):this._mouseUp(j))}return !this._mouseStarted},_mouseUp:function(j){c(document).unbind("mousemove."+this.widgetName,this._mouseMoveDelegate).unbind("mouseup."+this.widgetName,this._mouseUpDelegate);if(this._mouseStarted){this._mouseStarted=false;this._preventClickEvent=(j.target==this._mouseDownEvent.target);this._mouseStop(j)}return false},_mouseDistanceMet:function(j){return(Math.max(Math.abs(this._mouseDownEvent.pageX-j.pageX),Math.abs(this._mouseDownEvent.pageY-j.pageY))>=this.options.distance)},_mouseDelayMet:function(j){return this.mouseDelayMet},_mouseStart:function(j){},_mouseDrag:function(j){},_mouseStop:function(j){},_mouseCapture:function(j){return true}};c.ui.mouse.defaults={cancel:null,distance:1,delay:0}})(jQuery); \ No newline at end of file diff --git a/trunk/ui.datepicker.css b/trunk/ui.datepicker.css new file mode 100644 index 000000000..567f8c97b --- /dev/null +++ b/trunk/ui.datepicker.css @@ -0,0 +1,62 @@ +/* Datepicker +----------------------------------*/ +.ui-datepicker { width: 17em; padding: .2em .2em 0; } +.ui-datepicker .ui-datepicker-header { position:relative; padding:.2em 0; } +.ui-datepicker .ui-datepicker-prev, .ui-datepicker .ui-datepicker-next { position:absolute; top: 2px; width: 1.8em; height: 1.8em; } +.ui-datepicker .ui-datepicker-prev-hover, .ui-datepicker .ui-datepicker-next-hover { top: 1px; } +.ui-datepicker .ui-datepicker-prev { left:2px; } +.ui-datepicker .ui-datepicker-next { right:2px; } +.ui-datepicker .ui-datepicker-prev-hover { left:1px; } +.ui-datepicker .ui-datepicker-next-hover { right:1px; } +.ui-datepicker .ui-datepicker-prev span, .ui-datepicker .ui-datepicker-next span { display: block; position: absolute; left: 50%; margin-left: -8px; top: 50%; margin-top: -8px; } +.ui-datepicker .ui-datepicker-title { margin: 0 2.3em; line-height: 1.8em; text-align: center; } +.ui-datepicker .ui-datepicker-title select { float:left; font-size:1em; margin:1px 0; } +.ui-datepicker select.ui-datepicker-month-year {width: 100%;} +.ui-datepicker select.ui-datepicker-month, +.ui-datepicker select.ui-datepicker-year { width: 49%;} +.ui-datepicker .ui-datepicker-title select.ui-datepicker-year { float: right; } +.ui-datepicker table {width: 100%; font-size: .9em; border-collapse: collapse; margin:0 0 .4em; } +.ui-datepicker th { padding: .7em .3em; text-align: center; font-weight: bold; border: 0; } +.ui-datepicker td { border: 0; padding: 1px; } +.ui-datepicker td span, .ui-datepicker td a { display: block; padding: .2em; text-align: right; text-decoration: none; } +.ui-datepicker .ui-datepicker-buttonpane { background-image: none; margin: .7em 0 0 0; padding:0 .2em; border-left: 0; border-right: 0; border-bottom: 0; } +.ui-datepicker .ui-datepicker-buttonpane button { float: right; margin: .5em .2em .4em; cursor: pointer; padding: .2em .6em .3em .6em; width:auto; overflow:visible; } +.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current { float:left; } + +/* with multiple calendars */ +.ui-datepicker.ui-datepicker-multi { width:auto; } +.ui-datepicker-multi .ui-datepicker-group { float:left; } +.ui-datepicker-multi .ui-datepicker-group table { width:95%; margin:0 auto .4em; } +.ui-datepicker-multi-2 .ui-datepicker-group { width:50%; } +.ui-datepicker-multi-3 .ui-datepicker-group { width:33.3%; } +.ui-datepicker-multi-4 .ui-datepicker-group { width:25%; } +.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header { border-left-width:0; } +.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header { border-left-width:0; } +.ui-datepicker-multi .ui-datepicker-buttonpane { clear:left; } +.ui-datepicker-row-break { clear:both; width:100%; } + +/* RTL support */ +.ui-datepicker-rtl { direction: rtl; } +.ui-datepicker-rtl .ui-datepicker-prev { right: 2px; left: auto; } +.ui-datepicker-rtl .ui-datepicker-next { left: 2px; right: auto; } +.ui-datepicker-rtl .ui-datepicker-prev:hover { right: 1px; left: auto; } +.ui-datepicker-rtl .ui-datepicker-next:hover { left: 1px; right: auto; } +.ui-datepicker-rtl .ui-datepicker-buttonpane { clear:right; } +.ui-datepicker-rtl .ui-datepicker-buttonpane button { float: left; } +.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current { float:right; } +.ui-datepicker-rtl .ui-datepicker-group { float:right; } +.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header { border-right-width:0; border-left-width:1px; } +.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header { border-right-width:0; border-left-width:1px; } + +/* IE6 IFRAME FIX (taken from datepicker 1.5.3 */ +.ui-datepicker-cover { + display: none; /*sorry for IE5*/ + display/**/: block; /*sorry for IE5*/ + position: absolute; /*must have*/ + z-index: -1; /*must have*/ + filter: mask(); /*must have*/ + top: -4px; /*must have*/ + left: -4px; /*must have*/ + width: 200px; /*must have*/ + height: 200px; /*must have*/ +} \ No newline at end of file diff --git a/trunk/ui.datepicker.js b/trunk/ui.datepicker.js new file mode 100644 index 000000000..009582c7d --- /dev/null +++ b/trunk/ui.datepicker.js @@ -0,0 +1,212 @@ +(function($){ + var PROP_NAME="datepicker"; + function Datepicker(){ + this.debug=false; + this._curInst=null; + this._disabledInputs=[]; + this._datepickerShowing=false; + this._inDialog=false; + this._mainDivId="ui-datepicker-div"; + this._inlineClass="ui-datepicker-inline"; + this._appendClass="ui-datepicker-append"; + this._triggerClass="ui-datepicker-trigger"; + this._dialogClass="ui-datepicker-dialog"; + this._promptClass="ui-datepicker-prompt"; + this._disableClass="ui-datepicker-disabled"; + this._unselectableClass="ui-datepicker-unselectable"; + this._currentClass="ui-datepicker-current-day"; + this.regional=[]; + this.regional[""]={ + clearText:"Clear", + clearStatus:"Erase the current date", + closeText:"Close", + closeStatus:"Close without change", + prevText:"<Prev", + prevStatus:"Show the previous month", + prevBigText:"<<", + prevBigStatus:"Show the previous year", + nextText:"Next>", + nextStatus:"Show the next month", + nextBigText:">>", + nextBigStatus:"Show the next year", + currentText:"Today", + currentStatus:"Show the current month", + monthNames:["January","February","March","April","May","June","July","August","September","October","November","December"], + monthNamesShort:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"], + monthStatus:"Show a different month", + yearStatus:"Show a different year", + weekHeader:"Wk", + weekStatus:"Week of the year", + dayNames:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"], + dayNamesShort:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"], + dayNamesMin:["Su","Mo","Tu","We","Th","Fr","Sa"], + dayStatus:"Set DD as first week day", + dateStatus:"Select DD, M d", + dateFormat:"mm/dd/yy", + firstDay:0, + initStatus:"Select a date", + isRTL:false + }; + this._defaults={ + onChangeToday: false, + showOn:"focus", + showAnim:"show", + showOptions:{}, + defaultDate:null, + appendText:"", + buttonText:"...", + buttonImage:"", + buttonImageOnly:false, + closeAtTop:true, + mandatory:false, + hideIfNoPrevNext:false, + navigationAsDateFormat:false, + showBigPrevNext:false, + gotoCurrent:false, + changeMonth:true, + changeYear:true, + showMonthAfterYear:false, + yearRange:"-10:+10", + changeFirstDay:true, + highlightWeek:false, + showOtherMonths:false, + showWeeks:false, + calculateWeek:this.iso8601Week, + shortYearCutoff:"+10", + showStatus:false, + statusForDate:this.dateStatus, + minDate:null, + maxDate:null, + duration:"normal", + beforeShowDay:null, + beforeShow:null, + onSelect:null, + onChangeMonthYear:null, + onClose:null, + numberOfMonths:1, + showCurrentAtPos:0, + stepMonths:1, + stepBigMonths:12, + rangeSelect:false, + rangeSeparator:" - ", + altField:"", + altFormat:"" + }; + $.extend(this._defaults,this.regional[""]); + this.dpDiv=$('')} + $.extend( + Datepicker.prototype, + { + markerClassName:"hasDatepicker", + log:function(){ + if(this.debug){ + console.log.apply("",arguments) + } + }, + setDefaults: + function(settings){ + extendRemove(this._defaults,settings||{}); + return this + }, + + _attachDatepicker: + function(target,settings){ + var inlineSettings=null; + for(attrName in this._defaults){ + var attrValue=target.getAttribute("date:"+attrName); + if(attrValue){inlineSettings=inlineSettings||{};try{inlineSettings[attrName]=eval(attrValue)}catch(err){inlineSettings[attrName]=attrValue}}}var nodeName=target.nodeName.toLowerCase();var inline=(nodeName=="div"||nodeName=="span");if(!target.id){target.id="dp"+(++this.uuid)}var inst=this._newInst($(target),inline);inst.settings=$.extend({},settings||{},inlineSettings||{});if(nodeName=="input"){this._connectDatepicker(target,inst)}else{if(inline){this._inlineDatepicker(target,inst)}}},_newInst:function(target,inline){var id=target[0].id.replace(/([:\[\]\.])/g,"\\\\$1");return{id:id,input:target,selectedDay:0,selectedMonth:0,selectedYear:0,drawMonth:0,drawYear:0,inline:inline,dpDiv:(!inline?this.dpDiv:$('
'))}},_connectDatepicker:function(target,inst){var input=$(target);if(input.hasClass(this.markerClassName)){return}var appendText=this._get(inst,"appendText");var isRTL=this._get(inst,"isRTL");if(appendText){input[isRTL?"before":"after"](''+appendText+"")}var showOn=this._get(inst,"showOn");if(showOn=="focus"||showOn=="both"){input.focus(this._showDatepicker)}if(showOn=="button"||showOn=="both"){var buttonText=this._get(inst,"buttonText");var buttonImage=this._get(inst,"buttonImage");var trigger=$(this._get(inst,"buttonImageOnly")?$("").addClass(this._triggerClass).attr({src:buttonImage,alt:buttonText,title:buttonText}):$('').addClass(this._triggerClass).html(buttonImage==""?buttonText:$("").attr({src:buttonImage,alt:buttonText,title:buttonText})));input[isRTL?"before":"after"](trigger);trigger.click(function(){if($.datepicker._datepickerShowing&&$.datepicker._lastInput==target){$.datepicker._hideDatepicker()}else{$.datepicker._showDatepicker(target)}return false})}input.addClass(this.markerClassName).keydown(this._doKeyDown).keypress(this._doKeyPress).bind("setData.datepicker",function(event,key,value){inst.settings[key]=value}).bind("getData.datepicker",function(event,key){return this._get(inst,key)});$.data(target,PROP_NAME,inst)},_inlineDatepicker:function(target,inst){var divSpan=$(target);if(divSpan.hasClass(this.markerClassName)){return}divSpan.addClass(this.markerClassName).append(inst.dpDiv).bind("setData.datepicker",function(event,key,value){inst.settings[key]=value}).bind("getData.datepicker",function(event,key){return this._get(inst,key)});$.data(target,PROP_NAME,inst);this._setDate(inst,this._getDefaultDate(inst));this._updateDatepicker(inst)},_inlineShow:function(inst){var numMonths=this._getNumberOfMonths(inst);inst.dpDiv.width(numMonths[1]*$(".ui-datepicker",inst.dpDiv[0]).width())}, + + _dialogDatepicker: + function(input,dateText,onSelect,settings,pos){ + var inst=this._dialogInst; + if(!inst){var id="dp"+(++this.uuid); + this._dialogInput=$(''); + this._dialogInput.keydown(this._doKeyDown); + $("body").append(this._dialogInput); + inst=this._dialogInst=this._newInst(this._dialogInput,false); + inst.settings={}; + $.data(this._dialogInput[0],PROP_NAME,inst)} + extendRemove(inst.settings,settings||{}); + this._dialogInput.val(dateText); + this._pos=(pos?(pos.length?pos:[pos.pageX,pos.pageY]):null); + if(!this._pos){ + var browserWidth=window.innerWidth||document.documentElement.clientWidth||document.body.clientWidth;var browserHeight=window.innerHeight||document.documentElement.clientHeight||document.body.clientHeight; + var scrollX=document.documentElement.scrollLeft||document.body.scrollLeft;var scrollY=document.documentElement.scrollTop||document.body.scrollTop;this._pos=[(browserWidth/2)-100+scrollX,(browserHeight/2)-150+scrollY]}this._dialogInput.css("left",this._pos[0]+"px").css("top",this._pos[1]+"px"); + inst.settings.onSelect=onSelect; + this._inDialog=true; + this.dpDiv.addClass(this._dialogClass); + this._showDatepicker(this._dialogInput[0]);if($.blockUI){$.blockUI(this.dpDiv)}$.data(this._dialogInput[0],PROP_NAME,inst);return this},_destroyDatepicker:function(target){var $target=$(target);if(!$target.hasClass(this.markerClassName)){return}var nodeName=target.nodeName.toLowerCase();$.removeData(target,PROP_NAME);if(nodeName=="input"){$target.siblings("."+this._appendClass).remove().end().siblings("."+this._triggerClass).remove().end().removeClass(this.markerClassName).unbind("focus",this._showDatepicker).unbind("keydown",this._doKeyDown).unbind("keypress",this._doKeyPress)}else{if(nodeName=="div"||nodeName=="span"){$target.removeClass(this.markerClassName).empty()}}},_enableDatepicker:function(target){var $target=$(target);if(!$target.hasClass(this.markerClassName)){return}var nodeName=target.nodeName.toLowerCase();if(nodeName=="input"){target.disabled=false;$target.siblings("button."+this._triggerClass).each(function(){this.disabled=false}).end().siblings("img."+this._triggerClass).css({opacity:"1.0",cursor:""})}else{if(nodeName=="div"||nodeName=="span"){$target.children("."+this._disableClass).remove()}}this._disabledInputs=$.map(this._disabledInputs,function(value){return(value==target?null:value)})},_disableDatepicker:function(target){var $target=$(target);if(!$target.hasClass(this.markerClassName)){return}var nodeName=target.nodeName.toLowerCase();if(nodeName=="input"){target.disabled=true;$target.siblings("button."+this._triggerClass).each(function(){this.disabled=true}).end().siblings("img."+this._triggerClass).css({opacity:"0.5",cursor:"default"})}else{if(nodeName=="div"||nodeName=="span"){var inline=$target.children("."+this._inlineClass);var offset=inline.offset();var relOffset={left:0,top:0};inline.parents().each(function(){if($(this).css("position")=="relative"){relOffset=$(this).offset();return false}});$target.prepend('
')}}this._disabledInputs=$.map(this._disabledInputs,function(value){return(value==target?null:value)});this._disabledInputs[this._disabledInputs.length]=target},_isDisabledDatepicker:function(target){if(!target){return false}for(var i=0;i-1)},_showDatepicker:function(input){input=input.target||input;if(input.nodeName.toLowerCase()!="input"){input=$("input",input.parentNode)[0]}if($.datepicker._isDisabledDatepicker(input)||$.datepicker._lastInput==input){return}var inst=$.datepicker._getInst(input);var beforeShow=$.datepicker._get(inst,"beforeShow");extendRemove(inst.settings,(beforeShow?beforeShow.apply(input,[input,inst]):{}));$.datepicker._hideDatepicker(null,"");$.datepicker._lastInput=input;$.datepicker._setDateFromField(inst);if($.datepicker._inDialog){input.value=""}if(!$.datepicker._pos){$.datepicker._pos=$.datepicker._findPos(input);$.datepicker._pos[1]+=input.offsetHeight}var isFixed=false;$(input).parents().each(function(){isFixed|=$(this).css("position")=="fixed";return!isFixed});if(isFixed&&$.browser.opera){$.datepicker._pos[0]-=document.documentElement.scrollLeft;$.datepicker._pos[1]-=document.documentElement.scrollTop}var offset={left:$.datepicker._pos[0],top:$.datepicker._pos[1]};$.datepicker._pos=null;inst.rangeStart=null;inst.dpDiv.css({position:"absolute",display:"block",top:"-1000px"});$.datepicker._updateDatepicker(inst);inst.dpDiv.width($.datepicker._getNumberOfMonths(inst)[1]*$(".ui-datepicker",inst.dpDiv[0])[0].offsetWidth);offset=$.datepicker._checkOffset(inst,offset,isFixed);inst.dpDiv.css({position:($.datepicker._inDialog&&$.blockUI?"static":(isFixed?"fixed":"absolute")),display:"none",left:offset.left+"px",top:offset.top+"px"});if(!inst.inline){var showAnim=$.datepicker._get(inst,"showAnim")||"show";var duration=$.datepicker._get(inst,"duration");var postProcess=function(){$.datepicker._datepickerShowing=true;if($.browser.msie&&parseInt($.browser.version,10)<7){$("iframe.ui-datepicker-cover").css({width:inst.dpDiv.width()+4,height:inst.dpDiv.height()+4})}};if($.effects&&$.effects[showAnim]){inst.dpDiv.show(showAnim,$.datepicker._get(inst,"showOptions"),duration,postProcess)}else{inst.dpDiv[showAnim](duration,postProcess)}if(duration==""){postProcess()}if(inst.input[0].type!="hidden"){inst.input[0].focus()}$.datepicker._curInst=inst}},_updateDatepicker:function(inst){var dims={width:inst.dpDiv.width()+4,height:inst.dpDiv.height()+4};inst.dpDiv.empty().append(this._generateHTML(inst)).find("iframe.ui-datepicker-cover").css({width:dims.width,height:dims.height});var numMonths=this._getNumberOfMonths(inst);inst.dpDiv[(numMonths[0]!=1||numMonths[1]!=1?"add":"remove")+"Class"]("ui-datepicker-multi");inst.dpDiv[(this._get(inst,"isRTL")?"add":"remove")+"Class"]("ui-datepicker-rtl");if(inst.input&&inst.input[0].type!="hidden"){$(inst.input[0]).focus()}},_checkOffset:function(inst,offset,isFixed){var pos=inst.input?this._findPos(inst.input[0]):null;var browserWidth=window.innerWidth||document.documentElement.clientWidth;var browserHeight=window.innerHeight||document.documentElement.clientHeight;var scrollX=document.documentElement.scrollLeft||document.body.scrollLeft;var scrollY=document.documentElement.scrollTop||document.body.scrollTop;if(this._get(inst,"isRTL")||(offset.left+inst.dpDiv.width()-scrollX)>browserWidth){offset.left=Math.max((isFixed?0:scrollX),pos[0]+(inst.input?inst.input.width():0)-(isFixed?scrollX:0)-inst.dpDiv.width()-(isFixed&&$.browser.opera?document.documentElement.scrollLeft:0))}else{offset.left-=(isFixed?scrollX:0)}if((offset.top+inst.dpDiv.height()-scrollY)>browserHeight){offset.top=Math.max((isFixed?0:scrollY),pos[1]-(isFixed?scrollY:0)-(this._inDialog?0:inst.dpDiv.height())-(isFixed&&$.browser.opera?document.documentElement.scrollTop:0))}else{offset.top-=(isFixed?scrollY:0)}return offset},_findPos:function(obj){while(obj&&(obj.type=="hidden"||obj.nodeType!=1)){obj=obj.nextSibling}var position=$(obj).offset();return[position.left,position.top]},_hideDatepicker:function(input,duration){var inst=this._curInst;if(!inst||(input&&inst!=$.data(input,PROP_NAME))){return}var rangeSelect=this._get(inst,"rangeSelect");if(rangeSelect&&inst.stayOpen){this._selectDate("#"+inst.id,this._formatDate(inst,inst.currentDay,inst.currentMonth,inst.currentYear))}inst.stayOpen=false;if(this._datepickerShowing){duration=(duration!=null?duration:this._get(inst,"duration"));var showAnim=this._get(inst,"showAnim");var postProcess=function(){$.datepicker._tidyDialog(inst)};if(duration!=""&&$.effects&&$.effects[showAnim]){inst.dpDiv.hide(showAnim,$.datepicker._get(inst,"showOptions"),duration,postProcess)}else{inst.dpDiv[(duration==""?"hide":(showAnim=="slideDown"?"slideUp":(showAnim=="fadeIn"?"fadeOut":"hide")))](duration,postProcess)}if(duration==""){this._tidyDialog(inst)}var onClose=this._get(inst,"onClose");if(onClose){onClose.apply((inst.input?inst.input[0]:null),[(inst.input?inst.input.val():""),inst])}this._datepickerShowing=false;this._lastInput=null;inst.settings.prompt=null;if(this._inDialog){this._dialogInput.css({position:"absolute",left:"0",top:"-100px"});if($.blockUI){$.unblockUI();$("body").append(this.dpDiv)}}this._inDialog=false}this._curInst=null},_tidyDialog:function(inst){inst.dpDiv.removeClass(this._dialogClass).unbind(".ui-datepicker");$("."+this._promptClass,inst.dpDiv).remove()},_checkExternalClick:function(event){if(!$.datepicker._curInst){return}var $target=$(event.target);if(($target.parents("#"+$.datepicker._mainDivId).length==0)&&!$target.hasClass($.datepicker.markerClassName)&&!$target.hasClass($.datepicker._triggerClass)&&$.datepicker._datepickerShowing&&!($.datepicker._inDialog&&$.blockUI)){$.datepicker._hideDatepicker(null,"")}}, +_adjustDate: + function(id,offset,period){ + var target=$(id); + var inst=this._getInst(target[0]); + this._adjustInstDate(inst,offset,period); + this._updateDatepicker(inst) +}, +_gotoToday: +function(id){ + var target=$(id); + var inst=this._getInst(target[0]); + inst.onChangeToday=true; + if(this._get(inst,"gotoCurrent")&&inst.currentDay){ + inst.selectedDay=inst.currentDay; + inst.drawMonth=inst.selectedMonth=inst.currentMonth; + inst.drawYear=inst.selectedYear=inst.currentYear + }else{ + var date=new Date(); + inst.selectedDay=date.getDate(); + inst.drawMonth=inst.selectedMonth=date.getMonth(); + inst.drawYear=inst.selectedYear=date.getFullYear(); + } + + + this._notifyChange(inst); + this._adjustDate(target); + + +} +, +_selectMonthYear: + function(id,select,period){var target=$(id);var inst=this._getInst(target[0]);inst._selectingMonthYear=false;inst["selected"+(period=="M"?"Month":"Year")]=inst["draw"+(period=="M"?"Month":"Year")]=parseInt(select.options[select.selectedIndex].value,10);this._notifyChange(inst);this._adjustDate(target)},_clickMonthYear:function(id){var target=$(id);var inst=this._getInst(target[0]);if(inst.input&&inst._selectingMonthYear&&!$.browser.msie){inst.input[0].focus()}inst._selectingMonthYear=!inst._selectingMonthYear},_changeFirstDay:function(id,day){var target=$(id);var inst=this._getInst(target[0]);inst.settings.firstDay=day;this._updateDatepicker(inst)},_selectDay:function(id,month,year,td){if($(td).hasClass(this._unselectableClass)){return}var target=$(id);var inst=this._getInst(target[0]);var rangeSelect=this._get(inst,"rangeSelect");if(rangeSelect){inst.stayOpen=!inst.stayOpen;if(inst.stayOpen){$(".ui-datepicker td",inst.dpDiv).removeClass(this._currentClass);$(td).addClass(this._currentClass)}}inst.selectedDay=inst.currentDay=$("a",td).html();inst.selectedMonth=inst.currentMonth=month;inst.selectedYear=inst.currentYear=year;if(inst.stayOpen){inst.endDay=inst.endMonth=inst.endYear=null}else{if(rangeSelect){inst.endDay=inst.currentDay;inst.endMonth=inst.currentMonth;inst.endYear=inst.currentYear}}this._selectDate(id,this._formatDate(inst,inst.currentDay,inst.currentMonth,inst.currentYear));if(inst.stayOpen){inst.rangeStart=new Date(inst.currentYear,inst.currentMonth,inst.currentDay);this._updateDatepicker(inst)}else{if(rangeSelect){inst.selectedDay=inst.currentDay=inst.rangeStart.getDate();inst.selectedMonth=inst.currentMonth=inst.rangeStart.getMonth();inst.selectedYear=inst.currentYear=inst.rangeStart.getFullYear();inst.rangeStart=null;if(inst.inline){this._updateDatepicker(inst)}}}},_clearDate:function(id){var target=$(id);var inst=this._getInst(target[0]);if(this._get(inst,"mandatory")){return}inst.stayOpen=false;inst.endDay=inst.endMonth=inst.endYear=inst.rangeStart=null;this._selectDate(target,"")}, + _selectDate:function(id,dateStr){ + var target=$(id); + var inst=this._getInst(target[0]); + dateStr=(dateStr!=null?dateStr:this._formatDate(inst)); + if(this._get(inst,"rangeSelect")&&dateStr){ + dateStr=(inst.rangeStart?this._formatDate(inst,inst.rangeStart):dateStr)+this._get(inst,"rangeSeparator")+dateStr}if(inst.input){inst.input.val(dateStr)}this._updateAlternate(inst); + + var onSelect=this._get(inst,"onSelect"); + if(onSelect){ + onSelect.apply((inst.input?inst.input[0]:null),[dateStr,inst]) + }else{ + if(inst.input){ + inst.input.trigger("change")} + } + + if(inst.inline){ + this._updateDatepicker(inst)}else{if(!inst.stayOpen){this._hideDatepicker(null,this._get(inst,"duration"));this._lastInput=inst.input[0];if(typeof(inst.input[0])!="object"){inst.input[0].focus()}this._lastInput=null}}},_updateAlternate:function(inst){var altField=this._get(inst,"altField");if(altField){var altFormat=this._get(inst,"altFormat");var date=this._getDate(inst); + dateStr=(isArray(date)?(!date[0]&&!date[1]?"":this.formatDate(altFormat,date[0],this._getFormatConfig(inst))+this._get(inst,"rangeSeparator")+this.formatDate(altFormat,date[1]||date[0],this._getFormatConfig(inst))):this.formatDate(altFormat,date,this._getFormatConfig(inst))); + $(altField).each(function(){$(this).val(dateStr)})}},noWeekends:function(date){var day=date.getDay();return[(day>0&&day<6),""]},iso8601Week:function(date){var checkDate=new Date(date.getFullYear(),date.getMonth(),date.getDate(),(date.getTimezoneOffset()/-60));var firstMon=new Date(checkDate.getFullYear(),1-1,4);var firstDay=firstMon.getDay()||7;firstMon.setDate(firstMon.getDate()+1-firstDay);if(firstDay<4&&checkDatenew Date(checkDate.getFullYear(),12-1,28)){firstDay=new Date(checkDate.getFullYear()+1,1-1,4).getDay()||7;if(firstDay>4&&(checkDate.getDay()||7)0&&iValue="0"&&value.charAt(iValue)<="9"){num=num*10+parseInt(value.charAt(iValue++),10);size--}if(size==origSize){throw"Missing number at position "+iValue}return num};var getName=function(match,shortNames,longNames){var names=(lookAhead(match)?longNames:shortNames);var size=0;for(var j=0;j0&&iValue-1){month=1;day=doy;do{var dim=this._getDaysInMonth(year,month-1);if(day<=dim){break}month++;day-=dim}while(true)}var date=new Date(year,month-1,day);if(date.getFullYear()!=year||date.getMonth()+1!=month||date.getDate()!=day){throw"Invalid date"}return date},ATOM:"yy-mm-dd",COOKIE:"D, dd M yy",ISO_8601:"yy-mm-dd",RFC_822:"D, d M y",RFC_850:"DD, dd-M-y",RFC_1036:"D, d M y",RFC_1123:"D, d M yy",RFC_2822:"D, d M yy",RSS:"D, d M y",TIMESTAMP:"@",W3C:"yy-mm-dd",formatDate:function(format,date,settings){if(!date){return""}var dayNamesShort=(settings?settings.dayNamesShort:null)||this._defaults.dayNamesShort;var dayNames=(settings?settings.dayNames:null)||this._defaults.dayNames;var monthNamesShort=(settings?settings.monthNamesShort:null)||this._defaults.monthNamesShort;var monthNames=(settings?settings.monthNames:null)||this._defaults.monthNames;var lookAhead=function(match){var matches=(iFormat+1=0;m--){doy+=this._getDaysInMonth(date.getFullYear(),m)}output+=formatNumber("o",doy,3);break;case"m":output+=formatNumber("m",date.getMonth()+1,2);break;case"M":output+=formatName("M",date.getMonth(),monthNamesShort,monthNames);break;case"y":output+=(lookAhead("y")?date.getFullYear():(date.getYear()%100<10?"0":"")+date.getYear()%100);break;case"@":output+=date.getTime();break;case"'":if(lookAhead("'")){output+="'"}else{literal=true}break;default:output+=format.charAt(iFormat)}}}}return output},_possibleChars:function(format){var chars="";var literal=false;for(var iFormat=0;iFormat0){var settings=this._getFormatConfig(inst);if(dates.length>1){date=this.parseDate(dateFormat,dates[1],settings)||defaultDate;inst.endDay=date.getDate();inst.endMonth=date.getMonth();inst.endYear=date.getFullYear()}try{date=this.parseDate(dateFormat,dates[0],settings)||defaultDate}catch(e){this.log(e);date=defaultDate}}inst.selectedDay=date.getDate();inst.drawMonth=inst.selectedMonth=date.getMonth();inst.drawYear=inst.selectedYear=date.getFullYear();inst.currentDay=(dates[0]?date.getDate():0);inst.currentMonth=(dates[0]?date.getMonth():0);inst.currentYear=(dates[0]?date.getFullYear():0);this._adjustInstDate(inst)},_getDefaultDate:function(inst){var date=this._determineDate(this._get(inst,"defaultDate"),new Date());var minDate=this._getMinMaxDate(inst,"min",true);var maxDate=this._getMinMaxDate(inst,"max");date=(minDate&&datemaxDate?maxDate:date);return date},_determineDate:function(date,defaultDate){var offsetNumeric=function(offset){var date=new Date();date.setUTCDate(date.getUTCDate()+offset);return date};var offsetString=function(offset,getDaysInMonth){var date=new Date();var year=date.getFullYear();var month=date.getMonth();var day=date.getDate();var pattern=/([+-]?[0-9]+)\s*(d|D|w|W|m|M|y|Y)?/g;var matches=pattern.exec(offset);while(matches){switch(matches[2]||"d"){case"d":case"D":day+=parseInt(matches[1],10);break;case"w":case"W":day+=parseInt(matches[1],10)*7;break;case"m":case"M":month+=parseInt(matches[1],10);day=Math.min(day,getDaysInMonth(year,month));break;case"y":case"Y":year+=parseInt(matches[1],10);day=Math.min(day,getDaysInMonth(year,month));break}matches=pattern.exec(offset)}return new Date(year,month,day)};date=(date==null?defaultDate:(typeof date=="string"?offsetString(date,this._getDaysInMonth):(typeof date=="number"?(isNaN(date)?defaultDate:offsetNumeric(date)):date)));return(date&&date.toString()=="Invalid Date"?defaultDate:date)},_setDate:function(inst,date,endDate){var clear=!(date);var origMonth=inst.selectedMonth;var origYear=inst.selectedYear;date=this._determineDate(date,new Date());inst.selectedDay=inst.currentDay=date.getDate();inst.drawMonth=inst.selectedMonth=inst.currentMonth=date.getMonth();inst.drawYear=inst.selectedYear=inst.currentYear=date.getFullYear();if(this._get(inst,"rangeSelect")){if(endDate){endDate=this._determineDate(endDate,null);inst.endDay=endDate.getDate();inst.endMonth=endDate.getMonth();inst.endYear=endDate.getFullYear()}else{inst.endDay=inst.currentDay;inst.endMonth=inst.currentMonth;inst.endYear=inst.currentYear}}if(origMonth!=inst.selectedMonth||origYear!=inst.selectedYear){this._notifyChange(inst)}this._adjustInstDate(inst);if(inst.input){inst.input.val(clear?"":this._formatDate(inst)+(!this._get(inst,"rangeSelect")?"":this._get(inst,"rangeSeparator")+this._formatDate(inst,inst.endDay,inst.endMonth,inst.endYear)))}},_getDate:function(inst){var startDate=(!inst.currentYear||(inst.input&&inst.input.val()=="")?null:new Date(inst.currentYear,inst.currentMonth,inst.currentDay));if(this._get(inst,"rangeSelect")){return[inst.rangeStart||startDate,(!inst.endYear?inst.rangeStart||startDate:new Date(inst.endYear,inst.endMonth,inst.endDay))]}else{return startDate}},_generateHTML:function(inst){var today=new Date();today=new Date(today.getFullYear(),today.getMonth(),today.getDate());var showStatus=this._get(inst,"showStatus");var initStatus=this._get(inst,"initStatus")||" ";var isRTL=this._get(inst,"isRTL");var clear=(this._get(inst,"mandatory")?"":'");var controls='
'+(isRTL?"":clear)+'"+(isRTL?clear:"")+"
";var prompt=this._get(inst,"prompt");var closeAtTop=this._get(inst,"closeAtTop");var hideIfNoPrevNext=this._get(inst,"hideIfNoPrevNext");var navigationAsDateFormat=this._get(inst,"navigationAsDateFormat");var showBigPrevNext=this._get(inst,"showBigPrevNext");var numMonths=this._getNumberOfMonths(inst);var showCurrentAtPos=this._get(inst,"showCurrentAtPos");var stepMonths=this._get(inst,"stepMonths");var stepBigMonths=this._get(inst,"stepBigMonths");var isMultiMonth=(numMonths[0]!=1||numMonths[1]!=1);var currentDate=(!inst.currentDay?new Date(9999,9,9):new Date(inst.currentYear,inst.currentMonth,inst.currentDay));var minDate=this._getMinMaxDate(inst,"min",true);var maxDate=this._getMinMaxDate(inst,"max");var drawMonth=inst.drawMonth-showCurrentAtPos;var drawYear=inst.drawYear;if(drawMonth<0){drawMonth+=12;drawYear--}if(maxDate){var maxDraw=new Date(maxDate.getFullYear(),maxDate.getMonth()-numMonths[1]+1,maxDate.getDate());maxDraw=(minDate&&maxDrawmaxDraw){drawMonth--;if(drawMonth<0){drawMonth=11;drawYear--}}}var prevText=this._get(inst,"prevText");prevText=(!navigationAsDateFormat?prevText:this.formatDate(prevText,new Date(drawYear,drawMonth-stepMonths,1),this._getFormatConfig(inst)));var prevBigText=(showBigPrevNext?this._get(inst,"prevBigText"):"");prevBigText=(!navigationAsDateFormat?prevBigText:this.formatDate(prevBigText,new Date(drawYear,drawMonth-stepBigMonths,1),this._getFormatConfig(inst)));var prev='
'+(this._canAdjustMonth(inst,-1,drawYear,drawMonth)?(showBigPrevNext?""+prevBigText+"":"")+""+prevText+"":(hideIfNoPrevNext?"":""))+"
";var nextText=this._get(inst,"nextText");nextText=(!navigationAsDateFormat?nextText:this.formatDate(nextText,new Date(drawYear,drawMonth+stepMonths,1),this._getFormatConfig(inst)));var nextBigText=(showBigPrevNext?this._get(inst,"nextBigText"):"");nextBigText=(!navigationAsDateFormat?nextBigText:this.formatDate(nextBigText,new Date(drawYear,drawMonth+stepBigMonths,1),this._getFormatConfig(inst)));var next='
'+(this._canAdjustMonth(inst,+1,drawYear,drawMonth)?""+nextText+""+(showBigPrevNext?""+nextBigText+"":""):(hideIfNoPrevNext?"":""))+"
";var currentText=this._get(inst,"currentText");var gotoDate=(this._get(inst,"gotoCurrent")&&inst.currentDay?currentDate:today);currentText=(!navigationAsDateFormat?currentText:this.formatDate(currentText,gotoDate,this._getFormatConfig(inst))); + +var html=(prompt?'
'+ + prompt+ + "
":"")+ + (closeAtTop&&!inst.inline?controls:"")+ + '"; + +var firstDay=this._get(inst,"firstDay");var changeFirstDay=this._get(inst,"changeFirstDay");var dayNames=this._get(inst,"dayNames");var dayNamesShort=this._get(inst,"dayNamesShort");var dayNamesMin=this._get(inst,"dayNamesMin");var monthNames=this._get(inst,"monthNames");var beforeShowDay=this._get(inst,"beforeShowDay");var highlightWeek=this._get(inst,"highlightWeek");var showOtherMonths=this._get(inst,"showOtherMonths");var showWeeks=this._get(inst,"showWeeks");var calculateWeek=this._get(inst,"calculateWeek")||this.iso8601Week;var weekStatus=this._get(inst,"weekStatus");var status=(showStatus?this._get(inst,"dayStatus")||initStatus:"");var dateStatus=this._get(inst,"statusForDate")||this.dateStatus;var endDate=inst.endDay?new Date(inst.endYear,inst.endMonth,inst.endDay):currentDate;for(var row=0;row'+this._generateMonthYearHeader(inst,drawMonth,drawYear,minDate,maxDate,selectedDate,row>0||col>0,showStatus,initStatus,monthNames)+''+(showWeeks?""+this._get(inst,"weekHeader")+"":"");for(var dow=0;dow<7;dow++){var day=(dow+firstDay)%7;var dayStatus=(status.indexOf("DD")>-1?status.replace(/DD/,dayNames[day]):status.replace(/D/,dayNamesShort[day]));html+="=5?' class="ui-datepicker-week-end-cell"':"")+">"+(!changeFirstDay?"'+dayNamesMin[day]+(changeFirstDay?"":"")+""}html+="";var daysInMonth=this._getDaysInMonth(drawYear,drawMonth);if(drawYear==inst.selectedYear&&drawMonth==inst.selectedMonth){inst.selectedDay=Math.min(inst.selectedDay,daysInMonth)}var leadDays=(this._getFirstDayOfMonth(drawYear,drawMonth)-firstDay+7)%7;var tzDate=new Date(drawYear,drawMonth,1-leadDays);var utcDate=new Date(drawYear,drawMonth,1-leadDays);var printDate=utcDate;var numRows=(isMultiMonth?6:Math.ceil((leadDays+daysInMonth)/7));for(var dRow=0;dRow'+(showWeeks?'":"");for(var dow=0;dow<7;dow++){var daySettings=(beforeShowDay?beforeShowDay.apply((inst.input?inst.input[0]:null),[printDate]):[true,""]);var otherMonth=(printDate.getMonth()!=drawMonth);var unselectable=otherMonth||!daySettings[0]||(minDate&&printDatemaxDate);html+='";tzDate.setDate(tzDate.getDate()+1);utcDate.setUTCDate(utcDate.getUTCDate()+1);printDate=(tzDate>utcDate?tzDate:utcDate)}html+=""}drawMonth++;if(drawMonth>11){drawMonth=0;drawYear++}html+="
"+calculateWeek(printDate)+"=currentDate.getTime()&&printDate.getTime()<=endDate.getTime()?" "+this._currentClass:"")+(printDate.getTime()==today.getTime()?" ui-datepicker-today":""))+'"'+((!otherMonth||showOtherMonths)&&daySettings[2]?' title="'+daySettings[2]+'"':"")+(unselectable?(highlightWeek?" onmouseover=\"jQuery(this).parent().addClass('ui-datepicker-week-over');\" onmouseout=\"jQuery(this).parent().removeClass('ui-datepicker-week-over');\"":""):" onmouseover=\"jQuery(this).addClass('ui-datepicker-days-cell-over')"+(highlightWeek?".parent().addClass('ui-datepicker-week-over')":"")+";"+(!showStatus||(otherMonth&&!showOtherMonths)?"":"jQuery('#ui-datepicker-status-"+inst.id+"').html('"+(dateStatus.apply((inst.input?inst.input[0]:null),[printDate,inst])||initStatus)+"');")+"\" onmouseout=\"jQuery(this).removeClass('ui-datepicker-days-cell-over')"+(highlightWeek?".parent().removeClass('ui-datepicker-week-over')":"")+";"+(!showStatus||(otherMonth&&!showOtherMonths)?"":"jQuery('#ui-datepicker-status-"+inst.id+"').html('"+initStatus+"');")+'" onclick="jQuery.datepicker._selectDay(\'#'+inst.id+"',"+drawMonth+","+drawYear+', this);"')+">"+(otherMonth?(showOtherMonths?printDate.getDate():" "):(unselectable?printDate.getDate():""+printDate.getDate()+""))+"
"}}html+=(showStatus?'
'+initStatus+"
":"")+(!closeAtTop&&!inst.inline?controls:"")+'
'+($.browser.msie&&parseInt($.browser.version,10)<7&&!inst.inline?'':"");return html},_generateMonthYearHeader:function(inst,drawMonth,drawYear,minDate,maxDate,selectedDate,secondary,showStatus,initStatus,monthNames){minDate=(inst.rangeStart&&minDate&&selectedDate";for(var month=0;month<12;month++){if((!inMinYear||month>=minDate.getMonth())&&(!inMaxYear||month<=maxDate.getMonth())){monthHtml+='"}}monthHtml+=""}if(!showMonthAfterYear){html+=monthHtml}if(secondary||!this._get(inst,"changeYear")){html+=drawYear}else{var years=this._get(inst,"yearRange").split(":");var year=0;var endYear=0;if(years.length!=2){year=drawYear-10;endYear=drawYear+10}else{if(years[0].charAt(0)=="+"||years[0].charAt(0)=="-"){year=endYear=new Date().getFullYear();year+=parseInt(years[0],10);endYear+=parseInt(years[1],10)}else{year=parseInt(years[0],10);endYear=parseInt(years[1],10)}}year=(minDate?Math.max(year,minDate.getFullYear()):year);endYear=(maxDate?Math.min(endYear,maxDate.getFullYear()):endYear);html+='"}if(showMonthAfterYear){html+=monthHtml}html+="";return html},_addStatus:function(showStatus,id,text,initStatus){return(showStatus?" onmouseover=\"jQuery('#ui-datepicker-status-"+id+"').html('"+(text||initStatus)+"');\" onmouseout=\"jQuery('#ui-datepicker-status-"+id+"').html('"+initStatus+"');\"":"")},_adjustInstDate:function(inst,offset,period){var year=inst.drawYear+(period=="Y"?offset:0);var month=inst.drawMonth+(period=="M"?offset:0);var day=Math.min(inst.selectedDay,this._getDaysInMonth(year,month))+(period=="D"?offset:0);var date=new Date(year,month,day);var minDate=this._getMinMaxDate(inst,"min",true);var maxDate=this._getMinMaxDate(inst,"max");date=(minDate&&datemaxDate?maxDate:date);inst.selectedDay=date.getDate();inst.drawMonth=inst.selectedMonth=date.getMonth();inst.drawYear=inst.selectedYear=date.getFullYear();if(period=="M"||period=="Y"){this._notifyChange(inst)}}, +_notifyChange: + function(inst){ + var onChange=this._get(inst,"onChangeMonthYear"); + if(onChange){ + onChange.apply( + (inst.input?inst.input[0]:null), + [inst.selectedYear,inst.selectedMonth+1,inst] + ) + } + } +, +_getNumberOfMonths:function(inst){var numMonths=this._get(inst,"numberOfMonths");return(numMonths==null?[1,1]:(typeof numMonths=="number"?[1,numMonths]:numMonths))},_getMinMaxDate:function(inst,minMax,checkRange){var date=this._determineDate(this._get(inst,minMax+"Date"),null);if(date){date.setHours(0);date.setMinutes(0);date.setSeconds(0);date.setMilliseconds(0)}return(!checkRange||!inst.rangeStart?date:(!date||inst.rangeStart>date?inst.rangeStart:date))},_getDaysInMonth:function(year,month){return 32-new Date(year,month,32).getDate()},_getFirstDayOfMonth:function(year,month){return new Date(year,month,1).getDay()},_canAdjustMonth:function(inst,offset,curYear,curMonth){var numMonths=this._getNumberOfMonths(inst);var date=new Date(curYear,curMonth+(offset<0?offset:numMonths[1]),1);if(offset<0){date.setDate(this._getDaysInMonth(date.getFullYear(),date.getMonth()))}return this._isInRange(inst,date)},_isInRange:function(inst,date){var newMinDate=(!inst.rangeStart?null:new Date(inst.selectedYear,inst.selectedMonth,inst.selectedDay));newMinDate=(newMinDate&&inst.rangeStart=minDate)&&(!maxDate||date<=maxDate))},_getFormatConfig:function(inst){var shortYearCutoff=this._get(inst,"shortYearCutoff");shortYearCutoff=(typeof shortYearCutoff!="string"?shortYearCutoff:new Date().getFullYear()%100+parseInt(shortYearCutoff,10));return{shortYearCutoff:shortYearCutoff,dayNamesShort:this._get(inst,"dayNamesShort"),dayNames:this._get(inst,"dayNames"),monthNamesShort:this._get(inst,"monthNamesShort"),monthNames:this._get(inst,"monthNames")}},_formatDate:function(inst,day,month,year){if(!day){inst.currentDay=inst.selectedDay;inst.currentMonth=inst.selectedMonth;inst.currentYear=inst.selectedYear}var date=(day?(typeof day=="object"?day:new Date(year,month,day)):new Date(inst.currentYear,inst.currentMonth,inst.currentDay));return this.formatDate(this._get(inst,"dateFormat"),date,this._getFormatConfig(inst))}});function extendRemove(target,props){$.extend(target,props);for(var name in props){if(props[name]==null||props[name]==undefined){target[name]=props[name]}}return target}function isArray(a){return(a&&(($.browser.safari&&typeof a=="object"&&a.length)||(a.constructor&&a.constructor.toString().match(/\Array\(\)/))))}$.fn.datepicker=function(options){if(!$.datepicker.initialized){$(document.body).append($.datepicker.dpDiv).mousedown($.datepicker._checkExternalClick);$.datepicker.initialized=true}var otherArgs=Array.prototype.slice.call(arguments,1);if(typeof options=="string"&&(options=="isDisabled"||options=="getDate")){return $.datepicker["_"+options+"Datepicker"].apply($.datepicker,[this[0]].concat(otherArgs))}return this.each(function(){typeof options=="string"?$.datepicker["_"+options+"Datepicker"].apply($.datepicker,[this].concat(otherArgs)):$.datepicker._attachDatepicker(this,options)})};$.datepicker=new Datepicker();$.datepicker.initialized=false;$.datepicker.uuid=new Date().getTime()})(jQuery) diff --git a/trunk/ui.datepicker.min.js b/trunk/ui.datepicker.min.js new file mode 100644 index 000000000..155949aad --- /dev/null +++ b/trunk/ui.datepicker.min.js @@ -0,0 +1,12 @@ +/* + * jQuery UI Datepicker 1.7.2 + * + * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT (MIT-LICENSE.txt) + * and GPL (GPL-LICENSE.txt) licenses. + * + * http://docs.jquery.com/UI/Datepicker + * + * Depends: + * ui.core.js + */ (function($){$.extend($.ui,{datepicker:{version:"1.7.2"}});var PROP_NAME="datepicker";function Datepicker(){this.debug=false;this._curInst=null;this._keyEvent=false;this._disabledInputs=[];this._datepickerShowing=false;this._inDialog=false;this._mainDivId="ui-datepicker-div";this._inlineClass="ui-datepicker-inline";this._appendClass="ui-datepicker-append";this._triggerClass="ui-datepicker-trigger";this._dialogClass="ui-datepicker-dialog";this._disableClass="ui-datepicker-disabled";this._unselectableClass="ui-datepicker-unselectable";this._currentClass="ui-datepicker-current-day";this._dayOverClass="ui-datepicker-days-cell-over";this.regional=[];this.regional[""]={closeText:"Done",prevText:"Prev",nextText:"Next",currentText:"Today",monthNames:["January","February","March","April","May","June","July","August","September","October","November","December"],monthNamesShort:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],dayNames:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],dayNamesShort:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],dayNamesMin:["Su","Mo","Tu","We","Th","Fr","Sa"],dateFormat:"mm/dd/yy",firstDay:0,isRTL:false};this._defaults={showOn:"focus",showAnim:"show",showOptions:{},defaultDate:null,appendText:"",buttonText:"...",buttonImage:"",buttonImageOnly:false,hideIfNoPrevNext:false,navigationAsDateFormat:false,gotoCurrent:false,changeMonth:false,changeYear:false,showMonthAfterYear:false,yearRange:"-10:+10",showOtherMonths:false,calculateWeek:this.iso8601Week,shortYearCutoff:"+10",minDate:null,maxDate:null,duration:"normal",beforeShowDay:null,beforeShow:null,onSelect:null,onChangeMonthYear:null,onClose:null,numberOfMonths:1,showCurrentAtPos:0,stepMonths:1,stepBigMonths:12,altField:"",altFormat:"",constrainInput:true,showButtonPanel:false};$.extend(this._defaults,this.regional[""]);this.dpDiv=$('
')}$.extend(Datepicker.prototype,{markerClassName:"hasDatepicker",log:function(){if(this.debug){console.log.apply("",arguments)}},setDefaults:function(settings){extendRemove(this._defaults,settings||{});return this},_attachDatepicker:function(target,settings){var inlineSettings=null;for(var attrName in this._defaults){var attrValue=target.getAttribute("date:"+attrName);if(attrValue){inlineSettings=inlineSettings||{};try{inlineSettings[attrName]=eval(attrValue)}catch(err){inlineSettings[attrName]=attrValue}}}var nodeName=target.nodeName.toLowerCase();var inline=(nodeName=="div"||nodeName=="span");if(!target.id){target.id="dp"+(++this.uuid)}var inst=this._newInst($(target),inline);inst.settings=$.extend({},settings||{},inlineSettings||{});if(nodeName=="input"){this._connectDatepicker(target,inst)}else{if(inline){this._inlineDatepicker(target,inst)}}},_newInst:function(target,inline){var id=target[0].id.replace(/([:\[\]\.])/g,"\\\\$1");return{id:id,input:target,selectedDay:0,selectedMonth:0,selectedYear:0,drawMonth:0,drawYear:0,inline:inline,dpDiv:(!inline?this.dpDiv:$('
'))}},_connectDatepicker:function(target,inst){var input=$(target);inst.append=$([]);inst.trigger=$([]);if(input.hasClass(this.markerClassName)){return}var appendText=this._get(inst,"appendText");var isRTL=this._get(inst,"isRTL");if(appendText){inst.append=$(''+appendText+"");input[isRTL?"before":"after"](inst.append)}var showOn=this._get(inst,"showOn");if(showOn=="focus"||showOn=="both"){input.focus(this._showDatepicker)}if(showOn=="button"||showOn=="both"){var buttonText=this._get(inst,"buttonText");var buttonImage=this._get(inst,"buttonImage");inst.trigger=$(this._get(inst,"buttonImageOnly")?$("").addClass(this._triggerClass).attr({src:buttonImage,alt:buttonText,title:buttonText}):$('').addClass(this._triggerClass).html(buttonImage==""?buttonText:$("").attr({src:buttonImage,alt:buttonText,title:buttonText})));input[isRTL?"before":"after"](inst.trigger);inst.trigger.click(function(){if($.datepicker._datepickerShowing&&$.datepicker._lastInput==target){$.datepicker._hideDatepicker()}else{$.datepicker._showDatepicker(target)}return false})}input.addClass(this.markerClassName).keydown(this._doKeyDown).keypress(this._doKeyPress).bind("setData.datepicker",function(event,key,value){inst.settings[key]=value}).bind("getData.datepicker",function(event,key){return this._get(inst,key)});$.data(target,PROP_NAME,inst)},_inlineDatepicker:function(target,inst){var divSpan=$(target);if(divSpan.hasClass(this.markerClassName)){return}divSpan.addClass(this.markerClassName).append(inst.dpDiv).bind("setData.datepicker",function(event,key,value){inst.settings[key]=value}).bind("getData.datepicker",function(event,key){return this._get(inst,key)});$.data(target,PROP_NAME,inst);this._setDate(inst,this._getDefaultDate(inst));this._updateDatepicker(inst);this._updateAlternate(inst)},_dialogDatepicker:function(input,dateText,onSelect,settings,pos){var inst=this._dialogInst;if(!inst){var id="dp"+(++this.uuid);this._dialogInput=$('');this._dialogInput.keydown(this._doKeyDown);$("body").append(this._dialogInput);inst=this._dialogInst=this._newInst(this._dialogInput,false);inst.settings={};$.data(this._dialogInput[0],PROP_NAME,inst)}extendRemove(inst.settings,settings||{});this._dialogInput.val(dateText);this._pos=(pos?(pos.length?pos:[pos.pageX,pos.pageY]):null);if(!this._pos){var browserWidth=window.innerWidth||document.documentElement.clientWidth||document.body.clientWidth;var browserHeight=window.innerHeight||document.documentElement.clientHeight||document.body.clientHeight;var scrollX=document.documentElement.scrollLeft||document.body.scrollLeft;var scrollY=document.documentElement.scrollTop||document.body.scrollTop;this._pos=[(browserWidth/2)-100+scrollX,(browserHeight/2)-150+scrollY]}this._dialogInput.css("left",this._pos[0]+"px").css("top",this._pos[1]+"px");inst.settings.onSelect=onSelect;this._inDialog=true;this.dpDiv.addClass(this._dialogClass);this._showDatepicker(this._dialogInput[0]);if($.blockUI){$.blockUI(this.dpDiv)}$.data(this._dialogInput[0],PROP_NAME,inst);return this},_destroyDatepicker:function(target){var $target=$(target);var inst=$.data(target,PROP_NAME);if(!$target.hasClass(this.markerClassName)){return}var nodeName=target.nodeName.toLowerCase();$.removeData(target,PROP_NAME);if(nodeName=="input"){inst.append.remove();inst.trigger.remove();$target.removeClass(this.markerClassName).unbind("focus",this._showDatepicker).unbind("keydown",this._doKeyDown).unbind("keypress",this._doKeyPress)}else{if(nodeName=="div"||nodeName=="span"){$target.removeClass(this.markerClassName).empty()}}},_enableDatepicker:function(target){var $target=$(target);var inst=$.data(target,PROP_NAME);if(!$target.hasClass(this.markerClassName)){return}var nodeName=target.nodeName.toLowerCase();if(nodeName=="input"){target.disabled=false;inst.trigger.filter("button").each(function(){this.disabled=false}).end().filter("img").css({opacity:"1.0",cursor:""})}else{if(nodeName=="div"||nodeName=="span"){var inline=$target.children("."+this._inlineClass);inline.children().removeClass("ui-state-disabled")}}this._disabledInputs=$.map(this._disabledInputs,function(value){return(value==target?null:value)})},_disableDatepicker:function(target){var $target=$(target);var inst=$.data(target,PROP_NAME);if(!$target.hasClass(this.markerClassName)){return}var nodeName=target.nodeName.toLowerCase();if(nodeName=="input"){target.disabled=true;inst.trigger.filter("button").each(function(){this.disabled=true}).end().filter("img").css({opacity:"0.5",cursor:"default"})}else{if(nodeName=="div"||nodeName=="span"){var inline=$target.children("."+this._inlineClass);inline.children().addClass("ui-state-disabled")}}this._disabledInputs=$.map(this._disabledInputs,function(value){return(value==target?null:value)});this._disabledInputs[this._disabledInputs.length]=target},_isDisabledDatepicker:function(target){if(!target){return false}for(var i=0;i-1)}},_showDatepicker:function(input){input=input.target||input;if(input.nodeName.toLowerCase()!="input"){input=$("input",input.parentNode)[0]}if($.datepicker._isDisabledDatepicker(input)||$.datepicker._lastInput==input){return}var inst=$.datepicker._getInst(input);var beforeShow=$.datepicker._get(inst,"beforeShow");extendRemove(inst.settings,(beforeShow?beforeShow.apply(input,[input,inst]):{}));$.datepicker._hideDatepicker(null,"");$.datepicker._lastInput=input;$.datepicker._setDateFromField(inst);if($.datepicker._inDialog){input.value=""}if(!$.datepicker._pos){$.datepicker._pos=$.datepicker._findPos(input);$.datepicker._pos[1]+=input.offsetHeight}var isFixed=false;$(input).parents().each(function(){isFixed|=$(this).css("position")=="fixed";return !isFixed});if(isFixed&&$.browser.opera){$.datepicker._pos[0]-=document.documentElement.scrollLeft;$.datepicker._pos[1]-=document.documentElement.scrollTop}var offset={left:$.datepicker._pos[0],top:$.datepicker._pos[1]};$.datepicker._pos=null;inst.rangeStart=null;inst.dpDiv.css({position:"absolute",display:"block",top:"-1000px"});$.datepicker._updateDatepicker(inst);offset=$.datepicker._checkOffset(inst,offset,isFixed);inst.dpDiv.css({position:($.datepicker._inDialog&&$.blockUI?"static":(isFixed?"fixed":"absolute")),display:"none",left:offset.left+"px",top:offset.top+"px"});if(!inst.inline){var showAnim=$.datepicker._get(inst,"showAnim")||"show";var duration=$.datepicker._get(inst,"duration");var postProcess=function(){$.datepicker._datepickerShowing=true;if($.browser.msie&&parseInt($.browser.version,10)<7){$("iframe.ui-datepicker-cover").css({width:inst.dpDiv.width()+4,height:inst.dpDiv.height()+4})}};if($.effects&&$.effects[showAnim]){inst.dpDiv.show(showAnim,$.datepicker._get(inst,"showOptions"),duration,postProcess)}else{inst.dpDiv[showAnim](duration,postProcess)}if(duration==""){postProcess()}if(inst.input[0].type!="hidden"){inst.input[0].focus()}$.datepicker._curInst=inst}},_updateDatepicker:function(inst){var dims={width:inst.dpDiv.width()+4,height:inst.dpDiv.height()+4};var self=this;inst.dpDiv.empty().append(this._generateHTML(inst)).find("iframe.ui-datepicker-cover").css({width:dims.width,height:dims.height}).end().find("button, .ui-datepicker-prev, .ui-datepicker-next, .ui-datepicker-calendar td a").bind("mouseout",function(){$(this).removeClass("ui-state-hover");if(this.className.indexOf("ui-datepicker-prev")!=-1){$(this).removeClass("ui-datepicker-prev-hover")}if(this.className.indexOf("ui-datepicker-next")!=-1){$(this).removeClass("ui-datepicker-next-hover")}}).bind("mouseover",function(){if(!self._isDisabledDatepicker(inst.inline?inst.dpDiv.parent()[0]:inst.input[0])){$(this).parents(".ui-datepicker-calendar").find("a").removeClass("ui-state-hover");$(this).addClass("ui-state-hover");if(this.className.indexOf("ui-datepicker-prev")!=-1){$(this).addClass("ui-datepicker-prev-hover")}if(this.className.indexOf("ui-datepicker-next")!=-1){$(this).addClass("ui-datepicker-next-hover")}}}).end().find("."+this._dayOverClass+" a").trigger("mouseover").end();var numMonths=this._getNumberOfMonths(inst);var cols=numMonths[1];var width=17;if(cols>1){inst.dpDiv.addClass("ui-datepicker-multi-"+cols).css("width",(width*cols)+"em")}else{inst.dpDiv.removeClass("ui-datepicker-multi-2 ui-datepicker-multi-3 ui-datepicker-multi-4").width("")}inst.dpDiv[(numMonths[0]!=1||numMonths[1]!=1?"add":"remove")+"Class"]("ui-datepicker-multi");inst.dpDiv[(this._get(inst,"isRTL")?"add":"remove")+"Class"]("ui-datepicker-rtl");if(inst.input&&inst.input[0].type!="hidden"&&inst==$.datepicker._curInst){$(inst.input[0]).focus()}},_checkOffset:function(inst,offset,isFixed){var dpWidth=inst.dpDiv.outerWidth();var dpHeight=inst.dpDiv.outerHeight();var inputWidth=inst.input?inst.input.outerWidth():0;var inputHeight=inst.input?inst.input.outerHeight():0;var viewWidth=(window.innerWidth||document.documentElement.clientWidth||document.body.clientWidth)+$(document).scrollLeft();var viewHeight=(window.innerHeight||document.documentElement.clientHeight||document.body.clientHeight)+$(document).scrollTop();offset.left-=(this._get(inst,"isRTL")?(dpWidth-inputWidth):0);offset.left-=(isFixed&&offset.left==inst.input.offset().left)?$(document).scrollLeft():0;offset.top-=(isFixed&&offset.top==(inst.input.offset().top+inputHeight))?$(document).scrollTop():0;offset.left-=(offset.left+dpWidth>viewWidth&&viewWidth>dpWidth)?Math.abs(offset.left+dpWidth-viewWidth):0;offset.top-=(offset.top+dpHeight>viewHeight&&viewHeight>dpHeight)?Math.abs(offset.top+dpHeight+inputHeight*2-viewHeight):0;return offset},_findPos:function(obj){while(obj&&(obj.type=="hidden"||obj.nodeType!=1)){obj=obj.nextSibling}var position=$(obj).offset();return[position.left,position.top]},_hideDatepicker:function(input,duration){var inst=this._curInst;if(!inst||(input&&inst!=$.data(input,PROP_NAME))){return}if(inst.stayOpen){this._selectDate("#"+inst.id,this._formatDate(inst,inst.currentDay,inst.currentMonth,inst.currentYear))}inst.stayOpen=false;if(this._datepickerShowing){duration=(duration!=null?duration:this._get(inst,"duration"));var showAnim=this._get(inst,"showAnim");var postProcess=function(){$.datepicker._tidyDialog(inst)};if(duration!=""&&$.effects&&$.effects[showAnim]){inst.dpDiv.hide(showAnim,$.datepicker._get(inst,"showOptions"),duration,postProcess)}else{inst.dpDiv[(duration==""?"hide":(showAnim=="slideDown"?"slideUp":(showAnim=="fadeIn"?"fadeOut":"hide")))](duration,postProcess)}if(duration==""){this._tidyDialog(inst)}var onClose=this._get(inst,"onClose");if(onClose){onClose.apply((inst.input?inst.input[0]:null),[(inst.input?inst.input.val():""),inst])}this._datepickerShowing=false;this._lastInput=null;if(this._inDialog){this._dialogInput.css({position:"absolute",left:"0",top:"-100px"});if($.blockUI){$.unblockUI();$("body").append(this.dpDiv)}}this._inDialog=false}this._curInst=null},_tidyDialog:function(inst){inst.dpDiv.removeClass(this._dialogClass).unbind(".ui-datepicker-calendar")},_checkExternalClick:function(event){if(!$.datepicker._curInst){return}var $target=$(event.target);if(($target.parents("#"+$.datepicker._mainDivId).length==0)&&!$target.hasClass($.datepicker.markerClassName)&&!$target.hasClass($.datepicker._triggerClass)&&$.datepicker._datepickerShowing&&!($.datepicker._inDialog&&$.blockUI)){$.datepicker._hideDatepicker(null,"")}},_adjustDate:function(id,offset,period){var target=$(id);var inst=this._getInst(target[0]);if(this._isDisabledDatepicker(target[0])){return}this._adjustInstDate(inst,offset+(period=="M"?this._get(inst,"showCurrentAtPos"):0),period);this._updateDatepicker(inst)},_gotoToday:function(id){var target=$(id);var inst=this._getInst(target[0]);if(this._get(inst,"gotoCurrent")&&inst.currentDay){inst.selectedDay=inst.currentDay;inst.drawMonth=inst.selectedMonth=inst.currentMonth;inst.drawYear=inst.selectedYear=inst.currentYear}else{var date=new Date();inst.selectedDay=date.getDate();inst.drawMonth=inst.selectedMonth=date.getMonth();inst.drawYear=inst.selectedYear=date.getFullYear()}this._notifyChange(inst);this._adjustDate(target)},_selectMonthYear:function(id,select,period){var target=$(id);var inst=this._getInst(target[0]);inst._selectingMonthYear=false;inst["selected"+(period=="M"?"Month":"Year")]=inst["draw"+(period=="M"?"Month":"Year")]=parseInt(select.options[select.selectedIndex].value,10);this._notifyChange(inst);this._adjustDate(target)},_clickMonthYear:function(id){var target=$(id);var inst=this._getInst(target[0]);if(inst.input&&inst._selectingMonthYear&&!$.browser.msie){inst.input[0].focus()}inst._selectingMonthYear=!inst._selectingMonthYear},_selectDay:function(id,month,year,td){var target=$(id);if($(td).hasClass(this._unselectableClass)||this._isDisabledDatepicker(target[0])){return}var inst=this._getInst(target[0]);inst.selectedDay=inst.currentDay=$("a",td).html();inst.selectedMonth=inst.currentMonth=month;inst.selectedYear=inst.currentYear=year;if(inst.stayOpen){inst.endDay=inst.endMonth=inst.endYear=null}this._selectDate(id,this._formatDate(inst,inst.currentDay,inst.currentMonth,inst.currentYear));if(inst.stayOpen){inst.rangeStart=this._daylightSavingAdjust(new Date(inst.currentYear,inst.currentMonth,inst.currentDay));this._updateDatepicker(inst)}},_clearDate:function(id){var target=$(id);var inst=this._getInst(target[0]);inst.stayOpen=false;inst.endDay=inst.endMonth=inst.endYear=inst.rangeStart=null;this._selectDate(target,"")},_selectDate:function(id,dateStr){var target=$(id);var inst=this._getInst(target[0]);dateStr=(dateStr!=null?dateStr:this._formatDate(inst));if(inst.input){inst.input.val(dateStr)}this._updateAlternate(inst);var onSelect=this._get(inst,"onSelect");if(onSelect){onSelect.apply((inst.input?inst.input[0]:null),[dateStr,inst])}else{if(inst.input){inst.input.trigger("change")}}if(inst.inline){this._updateDatepicker(inst)}else{if(!inst.stayOpen){this._hideDatepicker(null,this._get(inst,"duration"));this._lastInput=inst.input[0];if(typeof(inst.input[0])!="object"){inst.input[0].focus()}this._lastInput=null}}},_updateAlternate:function(inst){var altField=this._get(inst,"altField");if(altField){var altFormat=this._get(inst,"altFormat")||this._get(inst,"dateFormat");var date=this._getDate(inst);dateStr=this.formatDate(altFormat,date,this._getFormatConfig(inst));$(altField).each(function(){$(this).val(dateStr)})}},noWeekends:function(date){var day=date.getDay();return[(day>0&&day<6),""]},iso8601Week:function(date){var checkDate=new Date(date.getFullYear(),date.getMonth(),date.getDate());var firstMon=new Date(checkDate.getFullYear(),1-1,4);var firstDay=firstMon.getDay()||7;firstMon.setDate(firstMon.getDate()+1-firstDay);if(firstDay<4&&checkDatenew Date(checkDate.getFullYear(),12-1,28)){firstDay=new Date(checkDate.getFullYear()+1,1-1,4).getDay()||7;if(firstDay>4&&(checkDate.getDay()||7)0&&iValue="0"&&value.charAt(iValue)<="9"){num=num*10+parseInt(value.charAt(iValue++),10);size--}if(size==origSize){throw"Missing number at position "+iValue}return num};var getName=function(match,shortNames,longNames){var names=(lookAhead(match)?longNames:shortNames);var size=0;for(var j=0;j0&&iValue-1){month=1;day=doy;do{var dim=this._getDaysInMonth(year,month-1);if(day<=dim){break}month++;day-=dim}while(true)}var date=this._daylightSavingAdjust(new Date(year,month-1,day));if(date.getFullYear()!=year||date.getMonth()+1!=month||date.getDate()!=day){throw"Invalid date"}return date},ATOM:"yy-mm-dd",COOKIE:"D, dd M yy",ISO_8601:"yy-mm-dd",RFC_822:"D, d M y",RFC_850:"DD, dd-M-y",RFC_1036:"D, d M y",RFC_1123:"D, d M yy",RFC_2822:"D, d M yy",RSS:"D, d M y",TIMESTAMP:"@",W3C:"yy-mm-dd",formatDate:function(format,date,settings){if(!date){return""}var dayNamesShort=(settings?settings.dayNamesShort:null)||this._defaults.dayNamesShort;var dayNames=(settings?settings.dayNames:null)||this._defaults.dayNames;var monthNamesShort=(settings?settings.monthNamesShort:null)||this._defaults.monthNamesShort;var monthNames=(settings?settings.monthNames:null)||this._defaults.monthNames;var lookAhead=function(match){var matches=(iFormat+1=0;m--){doy+=this._getDaysInMonth(date.getFullYear(),m)}output+=formatNumber("o",doy,3);break;case"m":output+=formatNumber("m",date.getMonth()+1,2);break;case"M":output+=formatName("M",date.getMonth(),monthNamesShort,monthNames);break;case"y":output+=(lookAhead("y")?date.getFullYear():(date.getYear()%100<10?"0":"")+date.getYear()%100);break;case"@":output+=date.getTime();break;case"'":if(lookAhead("'")){output+="'"}else{literal=true}break;default:output+=format.charAt(iFormat)}}}}return output},_possibleChars:function(format){var chars="";var literal=false;for(var iFormat=0;iFormatmaxDate?maxDate:date);return date},_determineDate:function(date,defaultDate){var offsetNumeric=function(offset){var date=new Date();date.setDate(date.getDate()+offset);return date};var offsetString=function(offset,getDaysInMonth){var date=new Date();var year=date.getFullYear();var month=date.getMonth();var day=date.getDate();var pattern=/([+-]?[0-9]+)\s*(d|D|w|W|m|M|y|Y)?/g;var matches=pattern.exec(offset);while(matches){switch(matches[2]||"d"){case"d":case"D":day+=parseInt(matches[1],10);break;case"w":case"W":day+=parseInt(matches[1],10)*7;break;case"m":case"M":month+=parseInt(matches[1],10);day=Math.min(day,getDaysInMonth(year,month));break;case"y":case"Y":year+=parseInt(matches[1],10);day=Math.min(day,getDaysInMonth(year,month));break}matches=pattern.exec(offset)}return new Date(year,month,day)};date=(date==null?defaultDate:(typeof date=="string"?offsetString(date,this._getDaysInMonth):(typeof date=="number"?(isNaN(date)?defaultDate:offsetNumeric(date)):date)));date=(date&&date.toString()=="Invalid Date"?defaultDate:date);if(date){date.setHours(0);date.setMinutes(0);date.setSeconds(0);date.setMilliseconds(0)}return this._daylightSavingAdjust(date)},_daylightSavingAdjust:function(date){if(!date){return null}date.setHours(date.getHours()>12?date.getHours()+2:0);return date},_setDate:function(inst,date,endDate){var clear=!(date);var origMonth=inst.selectedMonth;var origYear=inst.selectedYear;date=this._determineDate(date,new Date());inst.selectedDay=inst.currentDay=date.getDate();inst.drawMonth=inst.selectedMonth=inst.currentMonth=date.getMonth();inst.drawYear=inst.selectedYear=inst.currentYear=date.getFullYear();if(origMonth!=inst.selectedMonth||origYear!=inst.selectedYear){this._notifyChange(inst)}this._adjustInstDate(inst);if(inst.input){inst.input.val(clear?"":this._formatDate(inst))}},_getDate:function(inst){var startDate=(!inst.currentYear||(inst.input&&inst.input.val()=="")?null:this._daylightSavingAdjust(new Date(inst.currentYear,inst.currentMonth,inst.currentDay)));return startDate},_generateHTML:function(inst){var today=new Date();today=this._daylightSavingAdjust(new Date(today.getFullYear(),today.getMonth(),today.getDate()));var isRTL=this._get(inst,"isRTL");var showButtonPanel=this._get(inst,"showButtonPanel");var hideIfNoPrevNext=this._get(inst,"hideIfNoPrevNext");var navigationAsDateFormat=this._get(inst,"navigationAsDateFormat");var numMonths=this._getNumberOfMonths(inst);var showCurrentAtPos=this._get(inst,"showCurrentAtPos");var stepMonths=this._get(inst,"stepMonths");var stepBigMonths=this._get(inst,"stepBigMonths");var isMultiMonth=(numMonths[0]!=1||numMonths[1]!=1);var currentDate=this._daylightSavingAdjust((!inst.currentDay?new Date(9999,9,9):new Date(inst.currentYear,inst.currentMonth,inst.currentDay)));var minDate=this._getMinMaxDate(inst,"min",true);var maxDate=this._getMinMaxDate(inst,"max");var drawMonth=inst.drawMonth-showCurrentAtPos;var drawYear=inst.drawYear;if(drawMonth<0){drawMonth+=12;drawYear--}if(maxDate){var maxDraw=this._daylightSavingAdjust(new Date(maxDate.getFullYear(),maxDate.getMonth()-numMonths[1]+1,maxDate.getDate()));maxDraw=(minDate&&maxDrawmaxDraw){drawMonth--;if(drawMonth<0){drawMonth=11;drawYear--}}}inst.drawMonth=drawMonth;inst.drawYear=drawYear;var prevText=this._get(inst,"prevText");prevText=(!navigationAsDateFormat?prevText:this.formatDate(prevText,this._daylightSavingAdjust(new Date(drawYear,drawMonth-stepMonths,1)),this._getFormatConfig(inst)));var prev=(this._canAdjustMonth(inst,-1,drawYear,drawMonth)?''+prevText+"":(hideIfNoPrevNext?"":''+prevText+""));var nextText=this._get(inst,"nextText");nextText=(!navigationAsDateFormat?nextText:this.formatDate(nextText,this._daylightSavingAdjust(new Date(drawYear,drawMonth+stepMonths,1)),this._getFormatConfig(inst)));var next=(this._canAdjustMonth(inst,+1,drawYear,drawMonth)?''+nextText+"":(hideIfNoPrevNext?"":''+nextText+""));var currentText=this._get(inst,"currentText");var gotoDate=(this._get(inst,"gotoCurrent")&&inst.currentDay?currentDate:today);currentText=(!navigationAsDateFormat?currentText:this.formatDate(currentText,gotoDate,this._getFormatConfig(inst)));var controls=(!inst.inline?'":"");var buttonPanel=(showButtonPanel)?'
'+(isRTL?controls:"")+(this._isInRange(inst,gotoDate)?'":"")+(isRTL?"":controls)+"
":"";var firstDay=parseInt(this._get(inst,"firstDay"),10);firstDay=(isNaN(firstDay)?0:firstDay);var dayNames=this._get(inst,"dayNames");var dayNamesShort=this._get(inst,"dayNamesShort");var dayNamesMin=this._get(inst,"dayNamesMin");var monthNames=this._get(inst,"monthNames");var monthNamesShort=this._get(inst,"monthNamesShort");var beforeShowDay=this._get(inst,"beforeShowDay");var showOtherMonths=this._get(inst,"showOtherMonths");var calculateWeek=this._get(inst,"calculateWeek")||this.iso8601Week;var endDate=inst.endDay?this._daylightSavingAdjust(new Date(inst.endYear,inst.endMonth,inst.endDay)):currentDate;var defaultDate=this._getDefaultDate(inst);var html="";for(var row=0;row'+(/all|left/.test(cornerClass)&&row==0?(isRTL?next:prev):"")+(/all|right/.test(cornerClass)&&row==0?(isRTL?prev:next):"")+this._generateMonthYearHeader(inst,drawMonth,drawYear,minDate,maxDate,selectedDate,row>0||col>0,monthNames,monthNamesShort)+'';var thead="";for(var dow=0;dow<7;dow++){var day=(dow+firstDay)%7;thead+="=5?' class="ui-datepicker-week-end"':"")+'>'+dayNamesMin[day]+""}calender+=thead+"";var daysInMonth=this._getDaysInMonth(drawYear,drawMonth);if(drawYear==inst.selectedYear&&drawMonth==inst.selectedMonth){inst.selectedDay=Math.min(inst.selectedDay,daysInMonth)}var leadDays=(this._getFirstDayOfMonth(drawYear,drawMonth)-firstDay+7)%7;var numRows=(isMultiMonth?6:Math.ceil((leadDays+daysInMonth)/7));var printDate=this._daylightSavingAdjust(new Date(drawYear,drawMonth,1-leadDays));for(var dRow=0;dRow";var tbody="";for(var dow=0;dow<7;dow++){var daySettings=(beforeShowDay?beforeShowDay.apply((inst.input?inst.input[0]:null),[printDate]):[true,""]);var otherMonth=(printDate.getMonth()!=drawMonth);var unselectable=otherMonth||!daySettings[0]||(minDate&&printDatemaxDate);tbody+='";printDate.setDate(printDate.getDate()+1);printDate=this._daylightSavingAdjust(printDate)}calender+=tbody+""}drawMonth++;if(drawMonth>11){drawMonth=0;drawYear++}calender+="
=currentDate.getTime()&&printDate.getTime()<=endDate.getTime()?" "+this._currentClass:"")+(printDate.getTime()==today.getTime()?" ui-datepicker-today":""))+'"'+((!otherMonth||showOtherMonths)&&daySettings[2]?' title="'+daySettings[2]+'"':"")+(unselectable?"":" onclick=\"DP_jQuery.datepicker._selectDay('#"+inst.id+"',"+drawMonth+","+drawYear+', this);return false;"')+">"+(otherMonth?(showOtherMonths?printDate.getDate():" "):(unselectable?''+printDate.getDate()+"":'=currentDate.getTime()&&printDate.getTime()<=endDate.getTime()?" ui-state-active":"")+'" href="#">'+printDate.getDate()+""))+"
"+(isMultiMonth?""+((numMonths[0]>0&&col==numMonths[1]-1)?'
':""):"");group+=calender}html+=group}html+=buttonPanel+($.browser.msie&&parseInt($.browser.version,10)<7&&!inst.inline?'':"");inst._keyEvent=false;return html},_generateMonthYearHeader:function(inst,drawMonth,drawYear,minDate,maxDate,selectedDate,secondary,monthNames,monthNamesShort){minDate=(inst.rangeStart&&minDate&&selectedDate "}else{var inMinYear=(minDate&&minDate.getFullYear()==drawYear);var inMaxYear=(maxDate&&maxDate.getFullYear()==drawYear);monthHtml+='"}if(!showMonthAfterYear){html+=monthHtml+((secondary||changeMonth||changeYear)&&(!(changeMonth&&changeYear))?" ":"")}if(secondary||!changeYear){html+=''+drawYear+""}else{var years=this._get(inst,"yearRange").split(":");var year=0;var endYear=0;if(years.length!=2){year=drawYear-10;endYear=drawYear+10}else{if(years[0].charAt(0)=="+"||years[0].charAt(0)=="-"){year=drawYear+parseInt(years[0],10);endYear=drawYear+parseInt(years[1],10)}else{year=parseInt(years[0],10);endYear=parseInt(years[1],10)}}year=(minDate?Math.max(year,minDate.getFullYear()):year);endYear=(maxDate?Math.min(endYear,maxDate.getFullYear()):endYear);html+='"}if(showMonthAfterYear){html+=(secondary||changeMonth||changeYear?" ":"")+monthHtml}html+="";return html},_adjustInstDate:function(inst,offset,period){var year=inst.drawYear+(period=="Y"?offset:0);var month=inst.drawMonth+(period=="M"?offset:0);var day=Math.min(inst.selectedDay,this._getDaysInMonth(year,month))+(period=="D"?offset:0);var date=this._daylightSavingAdjust(new Date(year,month,day));var minDate=this._getMinMaxDate(inst,"min",true);var maxDate=this._getMinMaxDate(inst,"max");date=(minDate&&datemaxDate?maxDate:date);inst.selectedDay=date.getDate();inst.drawMonth=inst.selectedMonth=date.getMonth();inst.drawYear=inst.selectedYear=date.getFullYear();if(period=="M"||period=="Y"){this._notifyChange(inst)}},_notifyChange:function(inst){var onChange=this._get(inst,"onChangeMonthYear");if(onChange){onChange.apply((inst.input?inst.input[0]:null),[inst.selectedYear,inst.selectedMonth+1,inst])}},_getNumberOfMonths:function(inst){var numMonths=this._get(inst,"numberOfMonths");return(numMonths==null?[1,1]:(typeof numMonths=="number"?[1,numMonths]:numMonths))},_getMinMaxDate:function(inst,minMax,checkRange){var date=this._determineDate(this._get(inst,minMax+"Date"),null);return(!checkRange||!inst.rangeStart?date:(!date||inst.rangeStart>date?inst.rangeStart:date))},_getDaysInMonth:function(year,month){return 32-new Date(year,month,32).getDate()},_getFirstDayOfMonth:function(year,month){return new Date(year,month,1).getDay()},_canAdjustMonth:function(inst,offset,curYear,curMonth){var numMonths=this._getNumberOfMonths(inst);var date=this._daylightSavingAdjust(new Date(curYear,curMonth+(offset<0?offset:numMonths[1]),1));if(offset<0){date.setDate(this._getDaysInMonth(date.getFullYear(),date.getMonth()))}return this._isInRange(inst,date)},_isInRange:function(inst,date){var newMinDate=(!inst.rangeStart?null:this._daylightSavingAdjust(new Date(inst.selectedYear,inst.selectedMonth,inst.selectedDay)));newMinDate=(newMinDate&&inst.rangeStart=minDate)&&(!maxDate||date<=maxDate))},_getFormatConfig:function(inst){var shortYearCutoff=this._get(inst,"shortYearCutoff");shortYearCutoff=(typeof shortYearCutoff!="string"?shortYearCutoff:new Date().getFullYear()%100+parseInt(shortYearCutoff,10));return{shortYearCutoff:shortYearCutoff,dayNamesShort:this._get(inst,"dayNamesShort"),dayNames:this._get(inst,"dayNames"),monthNamesShort:this._get(inst,"monthNamesShort"),monthNames:this._get(inst,"monthNames")}},_formatDate:function(inst,day,month,year){if(!day){inst.currentDay=inst.selectedDay;inst.currentMonth=inst.selectedMonth;inst.currentYear=inst.selectedYear}var date=(day?(typeof day=="object"?day:this._daylightSavingAdjust(new Date(year,month,day))):this._daylightSavingAdjust(new Date(inst.currentYear,inst.currentMonth,inst.currentDay)));return this.formatDate(this._get(inst,"dateFormat"),date,this._getFormatConfig(inst))}});function extendRemove(target,props){$.extend(target,props);for(var name in props){if(props[name]==null||props[name]==undefined){target[name]=props[name]}}return target}function isArray(a){return(a&&(($.browser.safari&&typeof a=="object"&&a.length)||(a.constructor&&a.constructor.toString().match(/\Array\(\)/))))}$.fn.datepicker=function(options){if(!$.datepicker.initialized){$(document).mousedown($.datepicker._checkExternalClick).find("body").append($.datepicker.dpDiv);$.datepicker.initialized=true}var otherArgs=Array.prototype.slice.call(arguments,1);if(typeof options=="string"&&(options=="isDisabled"||options=="getDate")){return $.datepicker["_"+options+"Datepicker"].apply($.datepicker,[this[0]].concat(otherArgs))}if(options=="option"&&arguments.length==2&&typeof arguments[1]=="string"){return $.datepicker["_"+options+"Datepicker"].apply($.datepicker,[this[0]].concat(otherArgs))}return this.each(function(){typeof options=="string"?$.datepicker["_"+options+"Datepicker"].apply($.datepicker,[this].concat(otherArgs)):$.datepicker._attachDatepicker(this,options)})};$.datepicker=new Datepicker();$.datepicker.initialized=false;$.datepicker.uuid=new Date().getTime();$.datepicker.version="1.7.2";window.DP_jQuery=$})(jQuery); \ No newline at end of file diff --git a/trunk/ui.datepicker.packed.js b/trunk/ui.datepicker.packed.js new file mode 100644 index 000000000..919cade2d --- /dev/null +++ b/trunk/ui.datepicker.packed.js @@ -0,0 +1,2 @@ +eval(function(p,a,c,k,e,d){e=function(c){return(c35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--)d[e(c)]=k[c]||e(c);k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--)if(k[c])p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c]);return p}('(p($){c 2T="f";p 3Z(){b.7P=E;b.3Q=t;b.2y=[];b.3l=E;b.2S=E;b.5W="v-f-I";b.6f="v-f-1c";b.6h="v-f-3v";b.2w="v-f-4o";b.5Y="v-f-af";b.5B="v-f-3I";b.6e="v-f-4u";b.5v="v-f-49";b.4G="v-f-4O-H";b.6k=[];b.6k[""]={76:"ae",77:"ad 3s 4O h",74:"7U",75:"7U ac 7j",2M:"m;ab",72:"3t 3s 7T F",2N:"m;m;",73:"3t 3s 7T B",2L:"aal;",71:"3t 3s 3H F",2K:"l;l;",70:"3t 3s 3H B",3f:"a9",6Z:"3t 3s 4O F",1n:["a8","a7","a6","a5","7S","a4","a3","a2","a1","a0","9Z","9Y"],1Z:["9X","9W","9V","9U","7S","9T","9S","9R","9Q","9P","9O","9N"],6K:"3t a 7R F",6D:"3t a 7R B",6X:"9M",4d:"9L 9K 3s B",1v:["9J","9I","9H","9G","9F","9E","9D"],1z:["9C","9B","9A","9z","9y","9x","9w"],4K:["9v","9u","9t","9s","9r","9q","9p"],4L:"9o 4g 9n 9m 2F H",3d:"7Q 4g, M d",2X:"4U/3J/3k",1B:0,Z:"7Q a h",1I:E};b.1D={3r:"2P",1V:"69",62:{},2e:t,4v:"",2W:"...",3X:"",7N:E,47:1d,5E:E,4h:E,2I:E,3g:E,5C:E,6L:1d,6H:1d,44:E,6G:"-10:+10",4f:1d,3D:E,2C:E,4e:E,4I:b.4M,1F:"+10",15:E,6Y:b.3d,R:t,T:t,1j:"9l",4c:t,4s:t,2Q:t,6C:t,4q:t,6B:1,4P:0,2r:1,2q:12,1K:E,4j:" - ",4n:"",3N:""};$.4x(b.1D,b.6k[""]);b.O=$(\'\')}$.4x(3Z.6q,{29:"9k",5L:p(){k(b.7P){9j.5L.2k("",5d)}},9i:p(z){3x(b.1D,z||{});r b},6n:p(n,z){c 3Y=t;1l(59 6v b.1D){c 58=n.9h("h:"+59);k(58){3Y=3Y||{};5O{3Y[59]=9g(58)}5M(7x){3Y[59]=58}}}c 1a=n.1a.4t();c 1c=(1a=="I"||1a=="2H");k(!n.u){n.u="7F"+(++b.5a)}c 8=b.6i($(n),1c);8.z=$.4x({},z||{},3Y||{});k(1a=="q"){b.7O(n,8)}P{k(1c){b.7I(n,8)}}},6i:p(n,1c){c u=n[0].u.5y(/([:\\[\\]\\.])/g,"\\\\\\\\$1");r{u:u,q:n,1u:0,1m:0,1q:0,G:0,J:0,1c:1c,O:(!1c?b.O:$(\'\'))}},7O:p(n,8){c q=$(n);k(q.2R(b.29)){r}c 4v=b.l(8,"4v");c 1I=b.l(8,"1I");k(4v){q[1I?"7K":"7J"](\'<2H 16="\'+b.6h+\'">\'+4v+"")}c 3r=b.l(8,"3r");k(3r=="2P"||3r=="4D"){q.2P(b.3U)}k(3r=="3W"||3r=="4D"){c 2W=b.l(8,"2W");c 3X=b.l(8,"3X");c 4o=$(b.l(8,"7N")?$("<56/>").2o(b.2w).7M({5s:3X,7L:2W,4b:2W}):$(\'<3W 4r="3W">\').2o(b.2w).V(3X==""?2W:$("<56/>").7M({5s:3X,7L:2W,4b:2W})));q[1I?"7K":"7J"](4o);4o.9f(p(){k($.f.3l&&$.f.3O==n){$.f.2s()}P{$.f.3U(n)}r E})}q.2o(b.29).6g(b.54).7C(b.6d).57("7H.f",p(3P,2V,K){8.z[2V]=K}).57("7G.f",p(3P,2V){r b.l(8,2V)});$.3n(n,2T,8)},7I:p(n,8){c 6j=$(n);k(6j.2R(b.29)){r}6j.2o(b.29).3v(8.O).57("7H.f",p(3P,2V,K){8.z[2V]=K}).57("7G.f",p(3P,2V){r b.l(8,2V)});$.3n(n,2T,8);b.5G(8,b.5K(8));b.26(8)},9e:p(8){c 1i=b.3z(8);8.O.1E(1i[1]*$(".v-f",8.O[0]).1E())},9d:p(q,7D,2Q,z,2x){c 8=b.7E;k(!8){c u="7F"+(++b.5a);b.2g=$(\'\');b.2g.6g(b.54);$("2l").3v(b.2g);8=b.7E=b.6i(b.2g,E);8.z={};$.3n(b.2g[0],2T,8)}3x(8.z,z||{});b.2g.3i(7D);b.1O=(2x?(2x.1f?2x:[2x.9c,2x.9b]):t);k(!b.1O){c 52=53.7o||1e.1W.67||1e.2l.67;c 51=53.7n||1e.1W.66||1e.2l.66;c 3q=1e.1W.3T||1e.2l.3T;c 3p=1e.1W.3S||1e.2l.3S;b.1O=[(52/2)-2Z+3q,(51/2)-9a+3p]}b.2g.2a("1N",b.1O[0]+"2U").2a("1x",b.1O[1]+"2U");8.z.2Q=2Q;b.2S=1d;b.O.2o(b.5Y);b.3U(b.2g[0]);k($.4p){$.4p(b.O)}$.3n(b.2g[0],2T,8);r b},99:p(n){c $n=$(n);k(!$n.2R(b.29)){r}c 1a=n.1a.4t();$.98(n,2T);k(1a=="q"){$n.3V("."+b.6h).3R().3F().3V("."+b.2w).3R().3F().3b(b.29).4Y("2P",b.3U).4Y("6g",b.54).4Y("7C",b.6d)}P{k(1a=="I"||1a=="2H"){$n.3b(b.29).7s()}}},97:p(n){c $n=$(n);k(!$n.2R(b.29)){r}c 1a=n.1a.4t();k(1a=="q"){n.4u=E;$n.3V("3W."+b.2w).3u(p(){b.4u=E}).3F().3V("56."+b.2w).2a({7B:"1.0",7A:""})}P{k(1a=="I"||1a=="2H"){$n.7z("."+b.6e).3R()}}b.2y=$.7y(b.2y,p(K){r(K==n?t:K)})},96:p(n){c $n=$(n);k(!$n.2R(b.29)){r}c 1a=n.1a.4t();k(1a=="q"){n.4u=1d;$n.3V("3W."+b.2w).3u(p(){b.4u=1d}).3F().3V("56."+b.2w).2a({7B:"0.5",7A:"4l"})}P{k(1a=="I"||1a=="2H"){c 1c=$n.7z("."+b.6f);c L=1c.L();c 55={1N:0,1x:0};1c.5X().3u(p(){k($(b).2a("1T")=="95"){55=$(b).L();r E}});$n.94(\'\')}}b.2y=$.7y(b.2y,p(K){r(K==n?t:K)});b.2y[b.2y.1f]=n},7v:p(n){k(!n){r E}1l(c i=0;i-1)},3U:p(q){q=q.n||q;k(q.1a.4t()!="q"){q=$("q",q.8R)[0]}k($.f.7v(q)||$.f.3O==q){r}c 8=$.f.1r(q);c 4s=$.f.l(8,"4s");3x(8.z,(4s?4s.2k(q,[q,8]):{}));$.f.2s(t,"");$.f.3O=q;$.f.5P(8);k($.f.2S){q.K=""}k(!$.f.1O){$.f.1O=$.f.64(q);$.f.1O[1]+=q.8Q}c 1y=E;$(q).5X().3u(p(){1y|=$(b).2a("1T")=="7u";r!1y});k(1y&&$.2c.65){$.f.1O[0]-=1e.1W.3T;$.f.1O[1]-=1e.1W.3S}c L={1N:$.f.1O[0],1x:$.f.1O[1]};$.f.1O=t;8.1g=t;8.O.2a({1T:"4Z",6a:"8P",1x:"-8O"});$.f.26(8);8.O.1E($.f.3z(8)[1]*$(".v-f",8.O[0])[0].8N);L=$.f.7p(8,L,1y);8.O.2a({1T:($.f.2S&&$.4p?"8M":(1y?"7u":"4Z")),6a:"7t",1N:L.1N+"2U",1x:L.1x+"2U"});k(!8.1c){c 1V=$.f.l(8,"1V")||"69";c 1j=$.f.l(8,"1j");c 3m=p(){$.f.3l=1d;k($.2c.4C&&1G($.2c.6N,10)<7){$("4B.v-f-5r").2a({1E:8.O.1E()+4,2h:8.O.2h()+4})}};k($.50&&$.50[1V]){8.O.69(1V,$.f.l(8,"62"),1j,3m)}P{8.O[1V](1j,3m)}k(1j==""){3m()}k(8.q[0].4r!="63"){8.q[0].2P()}$.f.3Q=8}},26:p(8){c 68={1E:8.O.1E()+4,2h:8.O.2h()+4};8.O.7s().3v(b.78(8)).8L("4B.v-f-5r").2a({1E:68.1E,2h:68.2h});c 1i=b.3z(8);8.O[(1i[0]!=1||1i[1]!=1?"7r":"3R")+"7q"]("v-f-8K");8.O[(b.l(8,"1I")?"7r":"3R")+"7q"]("v-f-8J");k(8.q&&8.q[0].4r!="63"){$(8.q[0]).2P()}},7p:p(8,L,1y){c 2x=8.q?b.64(8.q[0]):t;c 52=53.7o||1e.1W.67;c 51=53.7n||1e.1W.66;c 3q=1e.1W.3T||1e.2l.3T;c 3p=1e.1W.3S||1e.2l.3S;k(b.l(8,"1I")||(L.1N+8.O.1E()-3q)>52){L.1N=21.2z((1y?0:3q),2x[0]+(8.q?8.q.1E():0)-(1y?3q:0)-8.O.1E()-(1y&&$.2c.65?1e.1W.3T:0))}P{L.1N-=(1y?3q:0)}k((L.1x+8.O.2h()-3p)>51){L.1x=21.2z((1y?0:3p),2x[1]-(1y?3p:0)-(b.2S?0:8.O.2h())-(1y&&$.2c.65?1e.1W.3S:0))}P{L.1x-=(1y?3p:0)}r L},64:p(3o){3h(3o&&(3o.4r=="63"||3o.8I!=1)){3o=3o.8H}c 1T=$(3o).L();r[1T.1N,1T.1x]},2s:p(q,1j){c 8=b.3Q;k(!8||(q&&8!=$.3n(q,2T))){r}c 1K=b.l(8,"1K");k(1K&&8.2v){b.4W("#"+8.u,b.2Y(8,8.1h,8.1t,8.1p))}8.2v=E;k(b.3l){1j=(1j!=t?1j:b.l(8,"1j"));c 1V=b.l(8,"1V");c 3m=p(){$.f.5Z(8)};k(1j!=""&&$.50&&$.50[1V]){8.O.61(1V,$.f.l(8,"62"),1j,3m)}P{8.O[(1j==""?"61":(1V=="8G"?"8F":(1V=="8E"?"8D":"61")))](1j,3m)}k(1j==""){b.5Z(8)}c 4q=b.l(8,"4q");k(4q){4q.2k((8.q?8.q[0]:t),[(8.q?8.q.3i():""),8])}b.3l=E;b.3O=t;8.z.3I=t;k(b.2S){b.2g.2a({1T:"4Z",1N:"0",1x:"-7m"});k($.4p){$.8C();$("2l").3v(b.O)}}b.2S=E}b.3Q=t},5Z:p(8){8.O.3b(b.5Y).4Y(".v-f");$("."+b.5B,8.O).3R()},6s:p(3P){k(!$.f.3Q){r}c $n=$(3P.n);k(($n.5X("#"+$.f.5W).1f==0)&&!$n.2R($.f.29)&&!$n.2R($.f.2w)&&$.f.3l&&!($.f.2S&&$.4p)){$.f.2s(t,"")}},1J:p(u,L,20){c n=$(u);c 8=b.1r(n[0]);b.4z(8,L,20);b.26(8)},5z:p(u){c n=$(u);c 8=b.1r(n[0]);k(b.l(8,"5C")&&8.1h){8.1u=8.1h;8.G=8.1m=8.1t;8.J=8.1q=8.1p}P{c h=x A();8.1u=h.S();8.G=8.1m=h.X();8.J=8.1q=h.Q()}b.43(8);b.1J(n)},5o:p(u,3a,20){c n=$(u);c 8=b.1r(n[0]);8.4X=E;8["45"+(20=="M"?"7l":"7k")]=8["8B"+(20=="M"?"7l":"7k")]=1G(3a.2j[3a.8A].K,10);b.43(8);b.1J(n)},5n:p(u){c n=$(u);c 8=b.1r(n[0]);k(8.q&&8.4X&&!$.2c.4C){8.q[0].2P()}8.4X=!8.4X},6V:p(u,H){c n=$(u);c 8=b.1r(n[0]);8.z.1B=H;b.26(8)},5u:p(u,F,B,1A){k($(1A).2R(b.5v)){r}c n=$(u);c 8=b.1r(n[0]);c 1K=b.l(8,"1K");k(1K){8.2v=!8.2v;k(8.2v){$(".v-f 1A",8.O).3b(b.4G);$(1A).2o(b.4G)}}8.1u=8.1h=$("a",1A).V();8.1m=8.1t=F;8.1q=8.1p=B;k(8.2v){8.1Q=8.24=8.19=t}P{k(1K){8.1Q=8.1h;8.24=8.1t;8.19=8.1p}}b.4W(u,b.2Y(8,8.1h,8.1t,8.1p));k(8.2v){8.1g=x A(8.1p,8.1t,8.1h);b.26(8)}P{k(1K){8.1u=8.1h=8.1g.S();8.1m=8.1t=8.1g.X();8.1q=8.1p=8.1g.Q();8.1g=t;k(8.1c){b.26(8)}}}},5D:p(u){c n=$(u);c 8=b.1r(n[0]);k(b.l(8,"5E")){r}8.2v=E;8.1Q=8.24=8.19=8.1g=t;b.4W(n,"")},4W:p(u,1U){c n=$(u);c 8=b.1r(n[0]);1U=(1U!=t?1U:b.2Y(8));k(b.l(8,"1K")&&1U){1U=(8.1g?b.2Y(8,8.1g):1U)+b.l(8,"4j")+1U}k(8.q){8.q.3i(1U)}b.5V(8);c 2Q=b.l(8,"2Q");k(2Q){2Q.2k((8.q?8.q[0]:t),[1U,8])}P{k(8.q){8.q.4o("7j")}}k(8.1c){b.26(8)}P{k(!8.2v){b.2s(t,b.l(8,"1j"));b.3O=8.q[0];k(1X(8.q[0])!="4w"){8.q[0].2P()}b.3O=t}}},5V:p(8){c 4n=b.l(8,"4n");k(4n){c 3N=b.l(8,"3N");c h=b.5F(8);1U=(6u(h)?(!h[0]&&!h[1]?"":b.1Y(3N,h[0],b.1P(8))+b.l(8,"4j")+b.1Y(3N,h[1]||h[0],b.1P(8))):b.1Y(3N,h,b.1P(8)));$(4n).3u(p(){$(b).3i(1U)})}},8z:p(h){c H=h.3A();r[(H>0&&H<6),""]},4M:p(h){c 25=x A(h.Q(),h.X(),h.S(),(h.8y()/-60));c 3M=x A(25.Q(),1-1,4);c 1B=3M.3A()||7;3M.4y(3M.S()+1-1B);k(1B<4&&25<3M){25.4y(25.S()-3);r $.f.4M(25)}P{k(25>x A(25.Q(),12-1,28)){1B=x A(25.Q()+1,1-1,4).3A()||7;k(1B>4&&(25.3A()||7)<1B-3){r 1}}}r 21.8x(((25-3M)/8w)/7)+1},3d:p(h,8){r $.f.1Y($.f.l(8,"3d"),h,$.f.1P(8))},5N:p(18,K,z){k(18==t||K==t){3K"5H 5d"}K=(1X K=="4w"?K.5e():K+"");k(K==""){r t}c 1F=(z?z.1F:t)||b.1D.1F;c 1z=(z?z.1z:t)||b.1D.1z;c 1v=(z?z.1v:t)||b.1D.1v;c 1Z=(z?z.1Z:t)||b.1D.1Z;c 1n=(z?z.1n:t)||b.1D.1n;c B=-1;c F=-1;c H=-1;c 3j=-1;c 1L=E;c 1M=p(1o){c 1C=(U+1<18.1f&&18.1b(U+1)==1o);k(1C){U++}r 1C};c 3L=p(1o){1M(1o);c 5U=(1o=="@"?14:(1o=="y"?4:(1o=="o"?3:2)));c 2f=5U;c 2u=0;3h(2f>0&&1S="0"&&K.1b(1S)<="9"){2u=2u*10+1G(K.1b(1S++),10);2f--}k(2f==5U){3K"7i 5i 5T 1T "+1S}r 2u};c 5S=p(1o,4S,4T){c 4m=(1M(1o)?4T:4S);c 2f=0;1l(c j=0;j<4m.1f;j++){2f=21.2z(2f,4m[j].1f)}c 1k="";c 7h=1S;3h(2f>0&&1S-1){F=1;H=3j;8t{c 5R=b.30(B,F-1);k(H<=5R){N}F++;H-=5R}3h(1d)}c h=x A(B,F-1,H);k(h.Q()!=B||h.X()+1!=F||h.S()!=H){3K"5H h"}r h},8s:"3k-4U-3J",8r:"D, 3J M 3k",8q:"3k-4U-3J",8p:"D, d M y",8o:"4g, 3J-M-y",8n:"D, d M y",8m:"D, d M 3k",8l:"D, d M 3k",8k:"D, d M y",8j:"@",8i:"3k-4U-3J",1Y:p(18,h,z){k(!h){r""}c 1z=(z?z.1z:t)||b.1D.1z;c 1v=(z?z.1v:t)||b.1D.1v;c 1Z=(z?z.1Z:t)||b.1D.1Z;c 1n=(z?z.1n:t)||b.1D.1n;c 1M=p(1o){c 1C=(U+1<18.1f&&18.1b(U+1)==1o);k(1C){U++}r 1C};c 4R=p(1o,K,7g){c 2u=""+K;k(1M(1o)){3h(2u.1f<7g){2u="0"+2u}}r 2u};c 5Q=p(1o,K,4S,4T){r(1M(1o)?4T[K]:4S[K])};c 1R="";c 1L=E;k(h){1l(c U=0;U<18.1f;U++){k(1L){k(18.1b(U)=="\'"&&!1M("\'")){1L=E}P{1R+=18.1b(U)}}P{4k(18.1b(U)){C"d":1R+=4R("d",h.S(),2);N;C"D":1R+=5Q("D",h.3A(),1z,1v);N;C"o":c 3j=h.S();1l(c m=h.X()-1;m>=0;m--){3j+=b.30(h.Q(),m)}1R+=4R("o",3j,3);N;C"m":1R+=4R("m",h.X()+1,2);N;C"M":1R+=5Q("M",h.X(),1Z,1n);N;C"y":1R+=(1M("y")?h.Q():(h.7f()%2Z<10?"0":"")+h.7f()%2Z);N;C"@":1R+=h.2b();N;C"\'":k(1M("\'")){1R+="\'"}P{1L=1d}N;4l:1R+=18.1b(U)}}}}r 1R},7e:p(18){c 2t="";c 1L=E;1l(c U=0;U<18.1f;U++){k(1L){k(18.1b(U)=="\'"&&!1M("\'")){1L=E}P{2t+=18.1b(U)}}P{4k(18.1b(U)){C"d":C"m":C"y":C"@":2t+="8h";N;C"D":C"M":r t;C"\'":k(1M("\'")){2t+="\'"}P{1L=1d}N;4l:2t+=18.1b(U)}}}r 2t},l:p(8,1k){r 8.z[1k]!==5f?8.z[1k]:b.1D[1k]},5P:p(8){c 2X=b.l(8,"2X");c 2O=8.q?8.q.3i().6F(b.l(8,"4j")):t;8.1Q=8.24=8.19=t;c h=2e=b.5K(8);k(2O.1f>0){c z=b.1P(8);k(2O.1f>1){h=b.5N(2X,2O[1],z)||2e;8.1Q=h.S();8.24=h.X();8.19=h.Q()}5O{h=b.5N(2X,2O[0],z)||2e}5M(e){b.5L(e);h=2e}}8.1u=h.S();8.G=8.1m=h.X();8.J=8.1q=h.Q();8.1h=(2O[0]?h.S():0);8.1t=(2O[0]?h.X():0);8.1p=(2O[0]?h.Q():0);b.4z(8)},5K:p(8){c h=b.42(b.l(8,"2e"),x A());c R=b.2m(8,"2n",1d);c T=b.2m(8,"2z");h=(R&&hT?T:h);r h},42:p(h,2e){c 7b=p(L){c h=x A();h.6R(h.6Q()+L);r h};c 7c=p(L,5J){c h=x A();c B=h.Q();c F=h.X();c H=h.S();c 5I=/([+-]?[0-9]+)\\s*(d|D|w|W|m|M|y|Y)?/g;c 1C=5I.7d(L);3h(1C){4k(1C[2]||"d"){C"d":C"D":H+=1G(1C[1],10);N;C"w":C"W":H+=1G(1C[1],10)*7;N;C"m":C"M":F+=1G(1C[1],10);H=21.2n(H,5J(B,F));N;C"y":C"Y":B+=1G(1C[1],10);H=21.2n(H,5J(B,F));N}1C=5I.7d(L)}r x A(B,F,H)};h=(h==t?2e:(1X h=="41"?7c(h,b.30):(1X h=="5i"?(8g(h)?2e:7b(h)):h)));r(h&&h.5e()=="5H A"?2e:h)},5G:p(8,h,23){c 2B=!(h);c 7a=8.1m;c 79=8.1q;h=b.42(h,x A());8.1u=8.1h=h.S();8.G=8.1m=8.1t=h.X();8.J=8.1q=8.1p=h.Q();k(b.l(8,"1K")){k(23){23=b.42(23,t);8.1Q=23.S();8.24=23.X();8.19=23.Q()}P{8.1Q=8.1h;8.24=8.1t;8.19=8.1p}}k(7a!=8.1m||79!=8.1q){b.43(8)}b.4z(8);k(8.q){8.q.3i(2B?"":b.2Y(8)+(!b.l(8,"1K")?"":b.l(8,"4j")+b.2Y(8,8.1Q,8.24,8.19)))}},5F:p(8){c 4Q=(!8.1p||(8.q&&8.q.3i()=="")?t:x A(8.1p,8.1t,8.1h));k(b.l(8,"1K")){r[8.1g||4Q,(!8.19?8.1g||4Q:x A(8.19,8.24,8.1Q))]}P{r 4Q}},78:p(8){c 2G=x A();2G=x A(2G.Q(),2G.X(),2G.S());c 15=b.l(8,"15");c Z=b.l(8,"Z")||"q;";c 1I=b.l(8,"1I");c 2B=(b.l(8,"5E")?"":\'"+b.l(8,"76")+"");c 5t=\'\'+(1I?"":2B)+\'"+b.l(8,"74")+""+(1I?2B:"")+"";c 3I=b.l(8,"3I");c 47=b.l(8,"47");c 4h=b.l(8,"4h");c 2I=b.l(8,"2I");c 3g=b.l(8,"3g");c 1i=b.3z(8);c 4P=b.l(8,"4P");c 2r=b.l(8,"2r");c 2q=b.l(8,"2q");c 6T=(1i[0]!=1||1i[1]!=1);c 4H=(!8.1h?x A(8d,9,9):x A(8.1p,8.1t,8.1h));c R=b.2m(8,"2n",1d);c T=b.2m(8,"2z");c G=8.G-4P;c J=8.J;k(G<0){G+=12;J--}k(T){c 4i=x A(T.Q(),T.X()-1i[1]+1,T.S());4i=(R&&4i4i){G--;k(G<0){G=11;J--}}}c 2M=b.l(8,"2M");2M=(!2I?2M:b.1Y(2M,x A(J,G-2r,1),b.1P(8)));c 2N=(3g?b.l(8,"2N"):"");2N=(!2I?2N:b.1Y(2N,x A(J,G-2q,1),b.1P(8)));c 4N=\'\'+(b.5h(8,-1,J,G)?(3g?""+2N+"":"")+""+2M+"":(4h?"":"<2J>"+2N+"<2J>"+2M+""))+"";c 2L=b.l(8,"2L");2L=(!2I?2L:b.1Y(2L,x A(J,G+2r,1),b.1P(8)));c 2K=(3g?b.l(8,"2K"):"");2K=(!2I?2K:b.1Y(2K,x A(J,G+2q,1),b.1P(8)));c 3H=\'\'+(b.5h(8,+1,J,G)?""+2L+""+(3g?""+2K+"":""):(4h?"":"<2J>"+2L+"<2J>"+2K+""))+"";c 3f=b.l(8,"3f");c 5A=(b.l(8,"5C")&&8.1h?4H:2G);3f=(!2I?3f:b.1Y(3f,5A,b.1P(8)));c V=(3I?\'\'+3I+"":"")+(47&&!8.1c?5t:"")+\'\'+(1I?3H:4N)+(b.5g(8,5A)?\'"+3f+"":"")+(1I?4N:3H)+"";c 1B=b.l(8,"1B");c 4f=b.l(8,"4f");c 1v=b.l(8,"1v");c 1z=b.l(8,"1z");c 4K=b.l(8,"4K");c 1n=b.l(8,"1n");c 4c=b.l(8,"4c");c 3D=b.l(8,"3D");c 2C=b.l(8,"2C");c 4e=b.l(8,"4e");c 4I=b.l(8,"4I")||b.4M;c 4d=b.l(8,"4d");c 2d=(15?b.l(8,"4L")||Z:"");c 3d=b.l(8,"6Y")||b.3d;c 23=8.1Q?x A(8.19,8.24,8.1Q):4H;1l(c 3e=0;3e<1i[0];3e++){1l(c 3G=0;3G<1i[1];3G++){c 3B=x A(J,G,8.1u);V+=\'\'+b.6M(8,G,J,R,T,3B,3e>0||3G>0,15,Z,1n)+\'<6O 16="v-f" 8a="0" 89="0"><6U><4E 16="v-f-4b-3e">\'+(4e?"<1A"+b.1H(15,8.u,4d,Z)+">"+b.l(8,"6X")+"":"");1l(c 2p=0;2p<7;2p++){c H=(2p+1B)%7;c 4L=(2d.6W("4g")>-1?2d.5y(/4g/,1v[H]):2d.5y(/D/,1z[H]));V+="<1A"+((2p+1B+6)%7>=5?\' 16="v-f-2F-3F-3c"\':"")+">"+(!4f?"<2H":"\'+4K[H]+(4f?"":"")+""}V+="<6P>";c 5x=b.30(J,G);k(J==8.1q&&G==8.1m){8.1u=21.2n(8.1u,5x)}c 4J=(b.6y(J,G)-1B+7)%7;c 48=x A(J,G,1-4J);c 3C=x A(J,G,1-4J);c 1w=3C;c 6S=(6T?6:21.88((4J+5x)/7));1l(c 5w=0;5w<6S;5w++){V+=\'<4E 16="v-f-3E-3e">\'+(4e?\'<1A 16="v-f-2F-3G"\'+b.1H(15,8.u,4d,Z)+">"+4I(1w)+"":"");1l(c 2p=0;2p<7;2p++){c 4a=(4c?4c.2k((8.q?8.q[0]:t),[1w]):[1d,""]);c 2D=(1w.X()!=G);c 49=2D||!4a[0]||(R&&1wT);V+=\'<1A 16="v-f-3E-3c\'+((2p+1B+6)%7>=5?" v-f-2F-3F-3c":"")+(2D?" v-f-87-F":"")+(1w.2b()==3B.2b()&&G==8.1m?" v-f-3E-3c-2E":"")+(49?" "+b.5v:"")+(2D&&!2C?"":" "+4a[1]+(1w.2b()>=4H.2b()&&1w.2b()<=23.2b()?" "+b.4G:"")+(1w.2b()==2G.2b()?" v-f-2G":""))+\'"\'+((!2D||2C)&&4a[2]?\' 4b="\'+4a[2]+\'"\':"")+(49?(3D?" 5m=\\"17(b).4F().2o(\'v-f-2F-2E\');\\" 5k=\\"17(b).4F().3b(\'v-f-2F-2E\');\\"":""):" 5m=\\"17(b).2o(\'v-f-3E-3c-2E\')"+(3D?".4F().2o(\'v-f-2F-2E\')":"")+";"+(!15||(2D&&!2C)?"":"17(\'#v-f-2d-"+8.u+"\').V(\'"+(3d.2k((8.q?8.q[0]:t),[1w,8])||Z)+"\');")+"\\" 5k=\\"17(b).3b(\'v-f-3E-3c-2E\')"+(3D?".4F().3b(\'v-f-2F-2E\')":"")+";"+(!15||(2D&&!2C)?"":"17(\'#v-f-2d-"+8.u+"\').V(\'"+Z+"\');")+\'" 22="17.f.5u(\\\'#\'+8.u+"\',"+G+","+J+\', b);"\')+">"+(2D?(2C?1w.S():"q;"):(49?1w.S():""+1w.S()+""))+"";48.4y(48.S()+1);3C.6R(3C.6Q()+1);1w=(48>3C?48:3C)}V+=""}G++;k(G>11){G=0;J++}V+=""}}V+=(15?\'\'+Z+"":"")+(!47&&!8.1c?5t:"")+\'\'+($.2c.4C&&1G($.2c.6N,10)<7&&!8.1c?\'<4B 5s="86:E;" 16="v-f-5r">\':"");r V},6M:p(8,G,J,R,T,3B,5p,15,Z,1n){R=(8.1g&&R&&3B\';c 31="";k(5p||!b.l(8,"6L")){31+=1n[G]+"q;"}P{c 6J=(R&&R.Q()==J);c 6I=(T&&T.Q()==J);31+=\'<3a 16="v-f-x-F" 6E="17.f.5o(\\\'#\'+8.u+"\', b, \'M\');\\" 22=\\"17.f.5n(\'#"+8.u+"\');\\""+b.1H(15,8.u,b.l(8,"6K"),Z)+">";1l(c F=0;F<12;F++){k((!6J||F>=R.X())&&(!6I||F<=T.X())){31+=\'<4A K="\'+F+\'"\'+(F==G?\' 45="45"\':"")+">"+1n[F]+""}}31+=""}k(!44){V+=31}k(5p||!b.l(8,"6H")){V+=J}P{c 2A=b.l(8,"6G").6F(":");c B=0;c 19=0;k(2A.1f!=2){B=J-10;19=J+10}P{k(2A[0].1b(0)=="+"||2A[0].1b(0)=="-"){B=19=x A().Q();B+=1G(2A[0],10);19+=1G(2A[1],10)}P{B=1G(2A[0],10);19=1G(2A[1],10)}}B=(R?21.2z(B,R.Q()):B);19=(T?21.2n(19,T.Q()):19);V+=\'<3a 16="v-f-x-B" 6E="17.f.5o(\\\'#\'+8.u+"\', b, \'Y\');\\" 22=\\"17.f.5n(\'#"+8.u+"\');\\""+b.1H(15,8.u,b.l(8,"6D"),Z)+">";1l(;B<=19;B++){V+=\'<4A K="\'+B+\'"\'+(B==J?\' 45="45"\':"")+">"+B+""}V+=""}k(44){V+=31}V+="";r V},1H:p(15,u,5l,Z){r(15?" 5m=\\"17(\'#v-f-2d-"+u+"\').V(\'"+(5l||Z)+"\');\\" 5k=\\"17(\'#v-f-2d-"+u+"\').V(\'"+Z+"\');\\"":"")},4z:p(8,L,20){c B=8.J+(20=="Y"?L:0);c F=8.G+(20=="M"?L:0);c H=21.2n(8.1u,b.30(B,F))+(20=="D"?L:0);c h=x A(B,F,H);c R=b.2m(8,"2n",1d);c T=b.2m(8,"2z");h=(R&&hT?T:h);8.1u=h.S();8.G=8.1m=h.X();8.J=8.1q=h.Q();k(20=="M"||20=="Y"){b.43(8)}},43:p(8){c 5j=b.l(8,"6C");k(5j){5j.2k((8.q?8.q[0]:t),[8.1q,8.1m+1,8])}},3z:p(8){c 1i=b.l(8,"6B");r(1i==t?[1,1]:(1X 1i=="5i"?[1,1i]:1i))},2m:p(8,6A,6z){c h=b.42(b.l(8,6A+"A"),t);k(h){h.84(0);h.83(0);h.82(0);h.81(0)}r(!6z||!8.1g?h:(!h||8.1g>h?8.1g:h))},30:p(B,F){r 32-x A(B,F,32).S()},6y:p(B,F){r x A(B,F,1).3A()},5h:p(8,L,6x,6w){c 1i=b.3z(8);c h=x A(6x,6w+(L<0?L:1i[1]),1);k(L<0){h.4y(b.30(h.Q(),h.X()))}r b.5g(8,h)},5g:p(8,h){c 3y=(!8.1g?t:x A(8.1q,8.1m,8.1u));3y=(3y&&8.1g<3y?8.1g:3y);c R=3y||b.2m(8,"2n");c T=b.2m(8,"2z");r((!R||h>=R)&&(!T||h<=T))},1P:p(8){c 1F=b.l(8,"1F");1F=(1X 1F!="41"?1F:x A().Q()%2Z+1G(1F,10));r{1F:1F,1z:b.l(8,"1z"),1v:b.l(8,"1v"),1Z:b.l(8,"1Z"),1n:b.l(8,"1n")}},2Y:p(8,H,F,B){k(!H){8.1h=8.1u;8.1t=8.1m;8.1p=8.1q}c h=(H?(1X H=="4w"?H:x A(B,F,H)):x A(8.1p,8.1t,8.1h));r b.1Y(b.l(8,"2X"),h,b.1P(8))}});p 3x(n,3w){$.4x(n,3w);1l(c 1k 6v 3w){k(3w[1k]==t||3w[1k]==5f){n[1k]=3w[1k]}}r n}p 6u(a){r(a&&(($.2c.80&&1X a=="4w"&&a.1f)||(a.6t&&a.6t.5e().1o(/\\6r\\(\\)/))))}$.7Z.f=p(2j){k(!$.f.5b){$(1e.2l).3v($.f.O).7Y($.f.6s);$.f.5b=1d}c 5c=6r.6q.7X.7W(5d,1);k(1X 2j=="41"&&(2j=="7V"||2j=="S")){r $.f["6p"+2j+"3Z"].2k($.f,[b[0]].6o(5c))}r b.3u(p(){1X 2j=="41"?$.f["6p"+2j+"3Z"].2k($.f,[b].6o(5c)):$.f.6n(b,2j)})};$.f=x 3Z();$.f.5b=E;$.f.5a=x A().2b()})(17)',62,636,'||||||||inst|||this|var|||datepicker||date|||if|_get||target||function|input|return||null|id|ui||new||settings|Date|year|case||false|month|drawMonth|day|div|drawYear|value|offset||break|dpDiv|else|getFullYear|minDate|getDate|maxDate|iFormat|html||getMonth||initStatus||||||showStatus|class|jQuery|format|endYear|nodeName|charAt|inline|true|document|length|rangeStart|currentDay|numMonths|duration|name|for|selectedMonth|monthNames|match|currentYear|selectedYear|_getInst|ctrlKey|currentMonth|selectedDay|dayNames|printDate|top|isFixed|dayNamesShort|td|firstDay|matches|_defaults|width|shortYearCutoff|parseInt|_addStatus|isRTL|_adjustDate|rangeSelect|literal|lookAhead|left|_pos|_getFormatConfig|endDay|output|iValue|position|dateStr|showAnim|documentElement|typeof|formatDate|monthNamesShort|period|Math|onclick|endDate|endMonth|checkDate|_updateDatepicker|||markerClassName|css|getTime|browser|status|defaultDate|size|_dialogInput|height|handled|options|apply|body|_getMinMaxDate|min|addClass|dow|stepBigMonths|stepMonths|_hideDatepicker|chars|num|stayOpen|_triggerClass|pos|_disabledInputs|max|years|clear|showOtherMonths|otherMonth|over|week|today|span|navigationAsDateFormat|label|nextBigText|nextText|prevText|prevBigText|dates|focus|onSelect|hasClass|_inDialog|PROP_NAME|px|key|buttonText|dateFormat|_formatDate|100|_getDaysInMonth|monthHtml|||||||||select|removeClass|cell|dateStatus|row|currentText|showBigPrevNext|while|val|doy|yy|_datepickerShowing|postProcess|data|obj|scrollY|scrollX|showOn|the|Show|each|append|props|extendRemove|newMinDate|_getNumberOfMonths|getDay|selectedDate|utcDate|highlightWeek|days|end|col|next|prompt|dd|throw|getNumber|firstMon|altFormat|_lastInput|event|_curInst|remove|scrollTop|scrollLeft|_showDatepicker|siblings|button|buttonImage|inlineSettings|Datepicker||string|_determineDate|_notifyChange|showMonthAfterYear|selected|style|closeAtTop|tzDate|unselectable|daySettings|title|beforeShowDay|weekStatus|showWeeks|changeFirstDay|DD|hideIfNoPrevNext|maxDraw|rangeSeparator|switch|default|names|altField|trigger|blockUI|onClose|type|beforeShow|toLowerCase|disabled|appendText|object|extend|setDate|_adjustInstDate|option|iframe|msie|both|tr|parent|_currentClass|currentDate|calculateWeek|leadDays|dayNamesMin|dayStatus|iso8601Week|prev|current|showCurrentAtPos|startDate|formatNumber|shortNames|longNames|mm|checkLiteral|_selectDate|_selectingMonthYear|unbind|absolute|effects|browserHeight|browserWidth|window|_doKeyDown|relOffset|img|bind|attrValue|attrName|uuid|initialized|otherArgs|arguments|toString|undefined|_isInRange|_canAdjustMonth|number|onChange|onmouseout|text|onmouseover|_clickMonthYear|_selectMonthYear|secondary|xa0|cover|src|controls|_selectDay|_unselectableClass|dRow|daysInMonth|replace|_gotoToday|gotoDate|_promptClass|gotoCurrent|_clearDate|mandatory|_getDate|_setDate|Invalid|pattern|getDaysInMonth|_getDefaultDate|log|catch|parseDate|try|_setDateFromField|formatName|dim|getName|at|origSize|_updateAlternate|_mainDivId|parents|_dialogClass|_tidyDialog||hide|showOptions|hidden|_findPos|opera|clientHeight|clientWidth|dims|show|display|chr|keyCode|_doKeyPress|_disableClass|_inlineClass|keydown|_appendClass|_newInst|divSpan|regional|x3e|x3c|_attachDatepicker|concat|_|prototype|Array|_checkExternalClick|constructor|isArray|in|curMonth|curYear|_getFirstDayOfMonth|checkRange|minMax|numberOfMonths|onChangeMonthYear|yearStatus|onchange|split|yearRange|changeYear|inMaxYear|inMinYear|monthStatus|changeMonth|_generateMonthYearHeader|version|table|tbody|getUTCDate|setUTCDate|numRows|isMultiMonth|thead|_changeFirstDay|indexOf|weekHeader|statusForDate|currentStatus|nextBigStatus|nextStatus|prevStatus|prevBigStatus|closeText|closeStatus|clearText|clearStatus|_generateHTML|origYear|origMonth|offsetNumeric|offsetString|exec|_possibleChars|getYear|len|iInit|Missing|change|Year|Month|100px|innerHeight|innerWidth|_checkOffset|Class|add|empty|none|fixed|_isDisabledDatepicker|charCode|err|map|children|cursor|opacity|keypress|dateText|_dialogInst|dp|getData|setData|_inlineDatepicker|after|before|alt|attr|buttonImageOnly|_connectDatepicker|debug|Select|different|May|previous|Close|isDisabled|call|slice|mousedown|fn|safari|setMilliseconds|setSeconds|setMinutes|setHours|header|javascript|other|ceil|cellspacing|cellpadding|one|links|9999|close|control|isNaN|0123456789|W3C|TIMESTAMP|RSS|RFC_2822|RFC_1123|RFC_1036|RFC_850|RFC_822|ISO_8601|COOKIE|ATOM|do|Unexpected|Unknown|86400000|floor|getTimezoneOffset|noWeekends|selectedIndex|draw|unblockUI|fadeOut|fadeIn|slideUp|slideDown|nextSibling|nodeType|rtl|multi|find|static|offsetWidth|1000px|block|offsetHeight|parentNode|fromCharCode|String|stopPropagation|preventDefault|_getDateDatepicker|_setDateDatepicker|_refreshDatepicker|_changeDatepicker|instance|transparent|color|background|prepend|relative|_disableDatepicker|_enableDatepicker|removeData|_destroyDatepicker|150|pageY|pageX|_dialogDatepicker|_inlineShow|click|eval|getAttribute|setDefaults|console|hasDatepicker|normal|first|as|Set|Sa|Fr|Th|We|Tu|Mo|Su|Sat|Fri|Thu|Wed|Tue|Mon|Sun|Saturday|Friday|Thursday|Wednesday|Tuesday|Monday|Sunday|of|Week|Wk|Dec|Nov|Oct|Sep|Aug|Jul|Jun|Apr|Mar|Feb|Jan|December|November|October|September|August|July|June|April|March|February|January|Today|Next|Prev|without|Erase|Clear|dialog'.split('|'),0,{})) + diff --git a/trunk/views/default/event_calendar/agenda_footer.php b/trunk/views/default/event_calendar/agenda_footer.php new file mode 100644 index 000000000..8749ebe08 --- /dev/null +++ b/trunk/views/default/event_calendar/agenda_footer.php @@ -0,0 +1,5 @@ +'; + +?> \ No newline at end of file diff --git a/trunk/views/default/event_calendar/agenda_header.php b/trunk/views/default/event_calendar/agenda_header.php new file mode 100644 index 000000000..712dbed8d --- /dev/null +++ b/trunk/views/default/event_calendar/agenda_header.php @@ -0,0 +1,12 @@ +'; +$header .= '
'.$vars['date'].'
'; +$header .= ''; +$header .= ''; +$header .= ''; +$header .= ''; +$header .= ''; + +echo $header; +?> \ No newline at end of file diff --git a/trunk/views/default/event_calendar/agenda_item_view.php b/trunk/views/default/event_calendar/agenda_item_view.php new file mode 100644 index 000000000..727b559ec --- /dev/null +++ b/trunk/views/default/event_calendar/agenda_item_view.php @@ -0,0 +1,26 @@ +start_time)) { + $time_bit = event_calendar_convert_time($event->start_time); + } + if (is_numeric($event->end_time)) { + $time_bit .= " - ".event_calendar_convert_time($event->end_time); + } + $time_bit .= ' '; +} +$info = ''; +$info .= ''; +$info .= ''; +$info .= ''; +$info .= ''; +if (trim($event->description)) { + $info .= ''; + $info .= ''; + $info .= ''; +} + +echo $info; +?> \ No newline at end of file diff --git a/trunk/views/default/event_calendar/agenda_view.php b/trunk/views/default/event_calendar/agenda_view.php new file mode 100644 index 000000000..bb693def0 --- /dev/null +++ b/trunk/views/default/event_calendar/agenda_view.php @@ -0,0 +1,34 @@ + $_SERVER['REQUEST_URI'], + 'baseurl' => $_SERVER['SCRIPT_NAME'].'/?'.$_SERVER['QUERY_STRING'], + 'offset' => $vars['offset'], + 'count' => $vars['count'], + 'limit' => $vars['limit'], + + )); +$event_calendar_times = get_plugin_setting('times', 'event_calendar'); +$events = $vars['events']; +$html = ''; +$date_format = 'j M Y'; +$current_date = ''; +if ($events) { + foreach($events as $event) { + $date = date($date_format,$event->start_date); + if ($date != $current_date) { + if ($html) { + $html .= elgg_view('event_calendar/agenda_footer'); + } + $html .= elgg_view('event_calendar/agenda_header',array('date'=>$date)); + + $current_date = $date; + } + $html .= elgg_view('event_calendar/agenda_item_view',array('event'=>$event,'times'=>$event_calendar_times)); + } + $html .= elgg_view('event_calendar/agenda_footer'); +} +$html = $nav.'
'.$html.'
'.$nav; + +echo $html; +?> \ No newline at end of file diff --git a/trunk/views/default/event_calendar/calendar.php b/trunk/views/default/event_calendar/calendar.php new file mode 100644 index 000000000..ebf4aa589 --- /dev/null +++ b/trunk/views/default/event_calendar/calendar.php @@ -0,0 +1,61 @@ + 'my_datepicker', + 'mode' => $vars['mode']?$vars['mode']:'month', + 'start_date' => $vars['start_date'], + 'end_date' => $vars['end_date'], + 'group_guid' => $vars['group_guid'], + 'range_bit' => $range_bit, + ) +); +$body .= '
'; +$body .= ''; +$body .= '
'; +echo $body; +?> \ No newline at end of file diff --git a/trunk/views/default/event_calendar/css.php b/trunk/views/default/event_calendar/css.php new file mode 100644 index 000000000..359fd1e13 --- /dev/null +++ b/trunk/views/default/event_calendar/css.php @@ -0,0 +1,150 @@ + + +/* hide Today as it is not working as expected */ +.ui-datepicker-current { visibility:hidden } + +div#calendarmenucontainer { + position: relative; +} + +ul#calendarmenu { + list-style: none; + position: absolute; + top: 0px; + left: -15px; +} + +ul#calendarmenu li { + float: left; + border-top: 1px solid #969696; + border-left: 1px solid #969696; + border-bottom: 1px solid #969696; + background-color: ; +} + + +ul#calendarmenu li.sys_calmenu_last { + border-right: 1px solid #969696; +} + +ul#calendarmenu li a { + text-decoration: none; + padding: 4px 12px; + float: left; +} + +ul#calendarmenu li a:hover, ul#calendarmenu li.sys_selected a{ + text-decoration: none; + padding: 4px 12px; + float: left; + color: #FFFFFF; + background: ; +} + +td.ui-datepicker-unselectable { + background-color: #FFFFFF !important; + color: #888888 !important; +} + +.river_object_event_calendar_create { + background: url(mod/event_calendar/images/river_icon_event.gif) no-repeat left -1px; +} +.river_object_event_calendar_update { + background: url(mod/event_calendar/images/river_icon_event.gif) no-repeat left -1px; +} +#event_list { + width:440px; + margin:0; + float:left; + padding:5px 0 0 0; +} +#event_list .search_listing { + border:2px solid #cccccc; + margin:0 0 5px 0; +} + +.events { + min-height: 300px; +} + +div.event_calendar_agenda_date_section { + margin-bottom: 10px; +} + +.event_calendar_agenda_date { + font-size: 1.3em; + font-weight: bold; + margin-bottom: 3px; +} + +th.agenda_header { + font-weight: bold; +} + +td.event_calendar_agenda_time { + width: 120px; +} + +.event_calendar_agenda_title a { + font-weight: bold; +} + +td.event_calendar_agenda_title { + width: 180px; +} + +.event_calendar_agenda_venue { + margin-bottom: 5px; +} + +.event_calendar_paged_month { + font-size: 1.3em; + font-weight: bold; + margin-bottom: 5px; + text-transform:uppercase; +} + +td.event_calendar_paged_date { + width: 80px; +} +td.event_calendar_paged_time { + width: 60px; +} +td.event_calendar_paged_title { + width: 280px; +} + +table.event_calendar_paged_table { + width:100%; + border-collapse:collapse; + border-bottom-width:1px; + border-bottom-style:solid; + border-bottom-color:#bfbfbf; + margin-bottom: 5px; +} + +table.event_calendar_paged_table td { + border-width:1px 0 0 0; + border-style:solid; + border-color:#bfbfbf; +} + +table.event_calendar_paged_table th { + font-family:verdana, helvetica, arial, sans-serif; + font-size:9pt; + color:#183e76; + background-color:#ececec; + font-weight:bold; + text-transform:none; + padding:3px 3px 3px 3px; +} + +.event_calendar_strapline { + font-size: 85%; +} \ No newline at end of file diff --git a/trunk/views/default/event_calendar/entities/entity_list.php b/trunk/views/default/event_calendar/entities/entity_list.php new file mode 100644 index 000000000..84c2c0b7d --- /dev/null +++ b/trunk/views/default/event_calendar/entities/entity_list.php @@ -0,0 +1,66 @@ + + * @link http://elgg.com/ + * + */ + +$context = $vars['context']; +$offset = $vars['offset']; +$entities = $vars['entities']; +$limit = $vars['limit']; +$count = $vars['count']; +$baseurl = $vars['baseurl']; +$context = $vars['context']; +$viewtype = $vars['viewtype']; +$pagination = $vars['pagination']; +$fullview = $vars['fullview']; + +$html = ""; +$nav = ""; + +if (isset($vars['viewtypetoggle'])) { + $viewtypetoggle = $vars['viewtypetoggle']; +} else { + $viewtypetoggle = true; +} + +if ($context == "search" && $count > 0 && $viewtypetoggle) { + $nav .= elgg_view('navigation/viewtype', array( + 'baseurl' => $baseurl, + 'offset' => $offset, + 'count' => $count, + 'viewtype' => $viewtype, + )); +} + +if ($pagination) { + $nav .= elgg_view('navigation/pagination',array( + 'baseurl' => $baseurl, + 'offset' => $offset, + 'count' => $count, + 'limit' => $limit, + )); +} + +$html .= $nav; +if ($viewtype == 'list') { + if (is_array($entities) && sizeof($entities) > 0) { + foreach($entities as $entity) { + $html .= elgg_view_entity($entity, $fullview); + } + } +} else { + if (is_array($entities) && sizeof($entities) > 0) { + $html .= elgg_view('event_calendar/entities/gallery', array('entities' => $entities)); + } +} + +if ($count) { + $html .= $nav; +} + +echo $html; \ No newline at end of file diff --git a/trunk/views/default/event_calendar/entities/gallery.php b/trunk/views/default/event_calendar/entities/gallery.php new file mode 100644 index 000000000..a12dfa84a --- /dev/null +++ b/trunk/views/default/event_calendar/entities/gallery.php @@ -0,0 +1,44 @@ + 0) { + +?> + +
'.elgg_echo('event_calendar:agenda:column:time').''.elgg_echo('event_calendar:agenda:column:session').''.elgg_echo('event_calendar:agenda:column:venue').'
'.$time_bit.''.$event->title.''.$event->venue.'
 '.$event->description.'
+ +"; + + } + echo ""; + $col++; + if ($col > 3) { + echo ""; + $col = 0; + } + } + if ($col > 0) echo ""; + +?> + + + + + * @copyright Curverider Ltd 2008-2010 + * @link http://elgg.com/ + * + * @uses $vars['entity'] The user entity + */ + +$icon = elgg_view( + "profile/icon", array( + 'entity' => $vars['entity'], + 'size' => 'medium', + ) + ); + +$banned = $vars['entity']->isBanned(); + +$rel = ""; +if (page_owner() == $vars['entity']->guid) + $rel = 'me'; +else if (check_entity_relationship(page_owner(), 'friend', $vars['entity']->guid)) + $rel = 'friend'; + +if (!$banned) + $info .= "

getUrl() . "\" rel=\"$rel\">" . $vars['entity']->name . "

"; +else + $info .= "

" . $vars['entity']->name . "
".elgg_echo('profile:banned')."

"; + +// TODO: look into a way to pass $authorised and $event_id in $vars +$authorised = FALSE; +$event_id = get_input('event_id', 0); +if ($event_id) { + if(isadminloggedin()) { + $authorised = TRUE; + } else { + // load the event from the database + $event = get_entity($event_id); + $user_id = get_loggedin_userid(); + if ($event && ($event->owner_guid == $user_id)) { + $authorised = TRUE; + } + } +} + +if ($authorised) { + $link = '

guid.'); return false;" '; + $link .= ' >'; + $link .= ''.elgg_echo('event_calendar:remove_from_the_calendar').''; + $link .= '

'; + $info .= $link; +} + +// echo elgg_view_listing($icon, $info); +echo elgg_view('search/gallery_listing',array('icon' => $icon, 'info' => $info)); + +?> \ No newline at end of file diff --git a/trunk/views/default/event_calendar/forms/add_to_group.php b/trunk/views/default/event_calendar/forms/add_to_group.php new file mode 100644 index 000000000..fc77495e1 --- /dev/null +++ b/trunk/views/default/event_calendar/forms/add_to_group.php @@ -0,0 +1,64 @@ +guid; +$event_container = $vars['event']->container_guid; + +// get the list of all groups: + +if (isadminloggedin()) { + $groups = get_entities("group","",0,"",5000); +} else { + $groups = get_entities("group","",get_loggedin_userid(),"",5000); +} + +// split the group list into two lists + +$add_options = array(); +$remove_options = array(); +$remove_group = get_entities_from_relationship("display_on_group",$event_id,FALSE,"","",0,"",5000); +$remove_group_ids = array(); +foreach ($remove_group as $group) { + $remove_group_ids[] = $group->guid; + if ($group->guid != $event_container && $group->canEdit()) { + $remove_options[$group->guid] = $group->name; + } +} + +if ($remove_group) { + foreach($groups as $group) { + if (($group->guid != $event_container) && !in_array($group->guid,$remove_group_ids)) { + $add_options[$group->guid] = $group->name; + } + } +} else { + foreach($groups as $group) { + if ($group->guid != $event_container && $group->canEdit()) { + $add_options[$group->guid] = $group->name; + } + } +} + +if ($add_options || $remove_options) { + echo '
'; + $event_bit = elgg_view('input/hidden', array("internalname" => "event_id","value" => $event_id)); + if ($add_options) { + echo "

".elgg_echo('event_calendar:add_to_group:add_group_title')."

"; + $add_pulldown = elgg_view("input/pulldown",array("internalname" => "group_id","options_values" => $add_options)); + $submit_button = "

".elgg_view("input/submit",array("value"=>elgg_echo('event_calendar:add_to_group:add_group_button')))."

"; + echo elgg_view ('input/form',array("body" => $event_bit.$add_pulldown.$submit_button,"action" => $vars['url']."action/event_calendar/add_to_group")); + } + + if ($remove_options) { + echo "

".elgg_echo('event_calendar:add_to_group:remove_group_title')."

"; + $remove_pulldown = elgg_view("input/pulldown",array("internalname" => "group_id","options_values" => $remove_options)); + $submit_button = "

".elgg_view("input/submit",array("value"=>elgg_echo('event_calendar:add_to_group:remove_group_button')))."

"; + echo elgg_view ('input/form',array("body" => $event_bit.$remove_pulldown.$submit_button,"action" => $vars['url']."action/event_calendar/remove_from_group")); + } + echo '
'; +} + +?> \ No newline at end of file diff --git a/trunk/views/default/event_calendar/forms/delete_confirm.php b/trunk/views/default/event_calendar/forms/delete_confirm.php new file mode 100644 index 000000000..37134e695 --- /dev/null +++ b/trunk/views/default/event_calendar/forms/delete_confirm.php @@ -0,0 +1,13 @@ +'.sprintf(elgg_echo('event_calendar:delete_confirm_description'),$vars['title']).'

'; + +$body .= '
'; +$body .= elgg_view('input/securitytoken'); +$body .= elgg_view('input/hidden',array('internalname'=>'event_action', 'value'=>'delete_event')); +$body .= elgg_view('input/hidden',array('internalname'=>'event_id', 'value'=>$vars['event_id'])); +$body .= elgg_view('input/submit', array('internalname'=>'submit','value'=>elgg_echo('event_calendar:submit'))); +$body .= '
'; + +echo elgg_view('page_elements/contentwrapper', array('body'=>$body)); +?> \ No newline at end of file diff --git a/trunk/views/default/event_calendar/forms/manage_event.php b/trunk/views/default/event_calendar/forms/manage_event.php new file mode 100644 index 000000000..35b9dba71 --- /dev/null +++ b/trunk/views/default/event_calendar/forms/manage_event.php @@ -0,0 +1,22 @@ + + * @copyright Radagast Solutions 2008 + * @link http://radagast.biz/ + * + */ + +extend_view('metatags','event_calendar/metatags'); + +$body = elgg_view('event_calendar/forms/manage_event_content',$vars); + +$body .= elgg_view('input/submit', array('internalname'=>'submit','value'=>elgg_echo('event_calendar:submit'))); +$form = elgg_view('input/form',array('action'=>$vars['url'].'action/event_calendar/manage','body'=>$body)); + +print elgg_view('page_elements/contentwrapper',array('body'=>$form)); +?> \ No newline at end of file diff --git a/trunk/views/default/event_calendar/forms/manage_event_content.php b/trunk/views/default/event_calendar/forms/manage_event_content.php new file mode 100644 index 000000000..59498e861 --- /dev/null +++ b/trunk/views/default/event_calendar/forms/manage_event_content.php @@ -0,0 +1,254 @@ +title; + $brief_description = $event->description; + $venue = $event->venue; + if ($event->form_data) { + // this is a form redisplay, so take the values as submitted + $start_date = $event->start_date; + $end_date = $event->end_date; + } else { + // the values are from the database, + // so convert + $start_date = date("l, F j, Y",$event->start_date); + if ($event->end_date) { + $end_date = date("l, F j, Y",$event->end_date); + } else { + $end_date = ''; + } + } + + if ($event_calendar_region_display) { + $region = $event->region; + if (!$region) { + $region = '-'; + } + } + + if ($event_calendar_spots_display) { + $spots = trim($event->spots); + } + if ($event_calendar_type_display) { + $event_type = $event->event_type; + if (!$event_type) { + $event_type = '-'; + } + } + $fees = $event->fees; + $contact = $event->contact; + $organiser = $event->organiser; + $event_tags = $event->event_tags; + $long_description = $event->long_description; + $access = $event->access_id; + if ($event_calendar_times == 'yes') { + $start_time = $event->start_time; + $end_time = $event->end_time; + } + $event_action = 'manage_event'; +} else { + $event_id = 0; + $title = ''; + $brief_description = ''; + $venue = ''; + $start_date = ''; + $end_date = ''; + $fees = ''; + if ($event_calendar_spots_display) { + $spots = ''; + } + if ($event_calendar_region_display) { + $region = '-'; + } + if ($event_calendar_type_display) { + $event_type = '-'; + } + $contact = ''; + $organiser = ''; + $event_tags = ''; + $long_description = ''; + $access = get_default_access(); + if ($event_calendar_times == 'yes') { + $start_time = ''; + $end_time = ''; + } + $event_action = 'add_event'; +} +$body = ''; + +$body .= elgg_view('input/hidden',array('internalname'=>'event_action', 'value'=>$event_action)); +$body .= elgg_view('input/hidden',array('internalname'=>'event_id', 'value'=>$event_id)); +$body .= elgg_view('input/hidden',array('internalname'=>'group_guid', 'value'=>$vars['group_guid'])); + +$body .= '

'; +$body .= '

'.$prefix['title'].elgg_echo('event_calendar:title_description').'

'; + +$body .= '

'; +$body .= '

'.$prefix['venue'].elgg_echo('event_calendar:venue_description').'

'; + +if ($event_calendar_times == 'yes') { + $body .= '


'; + $body .= elgg_view("input/timepicker",array('internalname' => 'start_time','value'=>$start_time)); + $body .= '

'; + $body .= '

'.$prefix['start_time'].elgg_echo('event_calendar:start_time_description').'

'; +} + +$body .= '

'; +$body .= '

'.$prefix['start_date'].elgg_echo('event_calendar:start_date_description').'

'; + +if ($event_calendar_hide_end != 'yes') { + if ($event_calendar_times == 'yes') { + $body .= '


'; + $body .= elgg_view("input/timepicker",array('internalname' => 'end_time','value'=>$end_time)); + $body .= '

'; + $body .= '

'.$prefix['end_time'].elgg_echo('event_calendar:end_time_description').'

'; + } + + $body .= '

'; + $body .= '

'.$prefix['end_date'].elgg_echo('event_calendar:end_date_description').'

'; +} + +if ($event_calendar_spots_display == 'yes') { + $body .= '

'; + $body .= '

'.$prefix['spots'].elgg_echo('event_calendar:spots_description').'

'; +} + +if ($event_calendar_add_users == 'yes') { + $body .= '



'; + $body .= '

'.elgg_echo('event_calendar:add_user_description').'

'; +} + +$body .= '

'; +$body .= '

'.$prefix['brief_description'].elgg_echo('event_calendar:brief_description_description').'

'; + +if ($event_calendar_region_display == 'yes') { + $region_list = trim(get_plugin_setting('region_list', 'event_calendar')); + $region_list_handles = get_plugin_setting('region_list_handles', 'event_calendar'); + // make sure that we are using Unix line endings + $region_list = str_replace("\r\n","\n",$region_list); + $region_list = str_replace("\r","\n",$region_list); + if ($region_list) { + $options = array(); + $options[] = '-'; + foreach(explode("\n",$region_list) as $region_item) { + $region_item = trim($region_item); + if ($region_list_handles == 'yes') { + $options[$region_item] = elgg_echo('event_calendar:region:'.$region_item); + } else { + $options[$region_item] = $region_item; + } + } + $body .= '

'; + $body .= '

'.$prefix['region'].elgg_echo('event_calendar:region_description').'

'; + } +} + +if ($event_calendar_type_display == 'yes') { + $type_list = trim(get_plugin_setting('type_list', 'event_calendar')); + $type_list_handles = get_plugin_setting('type_list_handles', 'event_calendar'); + // make sure that we are using Unix line endings + $type_list = str_replace("\r\n","\n",$type_list); + $type_list = str_replace("\r","\n",$type_list); + if ($type_list) { + $options = array(); + $options[] = '-'; + foreach(explode("\n",$type_list) as $type_item) { + $type_item = trim($type_item); + if ($type_list_handles == 'yes') { + $options[$type_item] = elgg_echo('event_calendar:type:'.$type_item); + } else { + $options[$type_item] = $type_item; + } + } + $body .= '

'; + $body .= '

'.$prefix['event_type'].elgg_echo('event_calendar:type_description').'

'; + } +} + +$body .= '

'; +$body .= '

'.$prefix['fees'].elgg_echo('event_calendar:fees_description').'

'; + +$body .= '

'; +$body .= '

'.$prefix['contact'].elgg_echo('event_calendar:contact_description').'

'; + +$body .= '

'; +$body .= '

'.$prefix['organiser'].elgg_echo('event_calendar:organiser_description').'

'; + +$body .= '

'; +$body .= '

'.$prefix['event_tags'].elgg_echo('event_calendar:event_tags_description').'

'; + +$body .= '

'; +$body .= '

'.$prefix['long_description'].elgg_echo('event_calendar:long_description_description').'

'; + +if($event_calendar_hide_access == 'yes') { + $event_calendar_default_access = get_plugin_setting('default_access', 'event_calendar'); + if($event_calendar_default_access) { + $body .= elgg_view("input/hidden",array('internalname' => 'access','value'=>$event_calendar_default_access)); + } else { + $body .= elgg_view("input/hidden",array('internalname' => 'access','value'=>ACCESS_PRIVATE)); + } +} else { + $body .= '

'; +} + +print $body; +?> \ No newline at end of file diff --git a/trunk/views/default/event_calendar/groupprofile_calendar.php b/trunk/views/default/event_calendar/groupprofile_calendar.php new file mode 100644 index 000000000..175098e0c --- /dev/null +++ b/trunk/views/default/event_calendar/groupprofile_calendar.php @@ -0,0 +1,42 @@ + + * @copyright Radagast Solutions 2008 + * @link http://radagast.biz/ + * + */ + +$page_owner_entity = page_owner_entity(); + +if (event_calendar_activated_for_group($page_owner_entity)) { + $num = 5; + // Get the upcoming events + $start_date = time(); // now + $end_date = $start_date + 60*60*24*365*2; // maximum is two years from now + $events = event_calendar_get_events_between($start_date,$end_date,false,$num,0,page_owner()); + + // If there are any events to view, view them + if (is_array($events) && sizeof($events) > 0) { + + echo '
'; + echo '

'.elgg_echo("event_calendar:groupprofile").'

'; + foreach($events as $event) { + echo elgg_view("object/event_calendar",array('entity' => $event)); + } + echo ''; + echo "
"; + + } else if (get_plugin_setting('group_always_display', 'event_calendar') == 'yes') { + echo '
'; + echo '

'.elgg_echo("event_calendar:groupprofile").'

'; + echo '
'.elgg_echo('event_calendar:no_events_found').'
'; + echo "
"; + } +} + +?> \ No newline at end of file diff --git a/trunk/views/default/event_calendar/input/longtext.php b/trunk/views/default/event_calendar/input/longtext.php new file mode 100644 index 000000000..86b0f3fc4 --- /dev/null +++ b/trunk/views/default/event_calendar/input/longtext.php @@ -0,0 +1,25 @@ + + + \ No newline at end of file diff --git a/trunk/views/default/event_calendar/metatags.php b/trunk/views/default/event_calendar/metatags.php new file mode 100644 index 000000000..8375ef118 --- /dev/null +++ b/trunk/views/default/event_calendar/metatags.php @@ -0,0 +1,2 @@ + + diff --git a/trunk/views/default/event_calendar/nav.php b/trunk/views/default/event_calendar/nav.php new file mode 100644 index 000000000..ceedfd485 --- /dev/null +++ b/trunk/views/default/event_calendar/nav.php @@ -0,0 +1,38 @@ + +
+
    + +
  • >
  • + +
  • >
  • +
  • >
  • +
  • >
  • +
+
+$url_start,'region'=>$vars['region'])); +} +?> \ No newline at end of file diff --git a/trunk/views/default/event_calendar/paged_footer.php b/trunk/views/default/event_calendar/paged_footer.php new file mode 100644 index 000000000..954769104 --- /dev/null +++ b/trunk/views/default/event_calendar/paged_footer.php @@ -0,0 +1,4 @@ +'; +?> + diff --git a/trunk/views/default/event_calendar/paged_header.php b/trunk/views/default/event_calendar/paged_header.php new file mode 100644 index 000000000..5f4b8e59c --- /dev/null +++ b/trunk/views/default/event_calendar/paged_header.php @@ -0,0 +1,15 @@ +'; +$header .= '
'.$vars['date'].'
'; +$header .= ''; +$header .= ''; +$header .= ''; +$header .= ''; +$header .= ''; +if ($vars['personal_manage'] != 'no') { + $header .= ''; +} +$header .= ''; + +echo $header; +?> \ No newline at end of file diff --git a/trunk/views/default/event_calendar/paged_item_view.php b/trunk/views/default/event_calendar/paged_item_view.php new file mode 100644 index 000000000..77c8bed4e --- /dev/null +++ b/trunk/views/default/event_calendar/paged_item_view.php @@ -0,0 +1,29 @@ +start_time)) { + $time_bit = event_calendar_convert_time($event->start_time); +} + +$date_bit = event_calendar_get_formatted_date($event->start_date); + +if (event_calendar_has_personal_event($event->guid,get_loggedin_userid())) { + $calendar_bit = 'checked = "checked"'; +} else { + $calendar_bit = ''; +} + +$calendar_bit .= ' onclick="javascript:event_calendar_personal_toggle('.$event->guid.'); return true;" '; + +$info = ''; +$info .= ''; +$info .= ''; +$info .= ''; +$info .= ''; +if ($vars['personal_manage'] != 'no') { + $info .= ''; +} +$info .= ''; + +echo $info; +?> \ No newline at end of file diff --git a/trunk/views/default/event_calendar/paged_view.php b/trunk/views/default/event_calendar/paged_view.php new file mode 100644 index 000000000..7c2ea2eaa --- /dev/null +++ b/trunk/views/default/event_calendar/paged_view.php @@ -0,0 +1,51 @@ + $_SERVER['REQUEST_URI'], + 'baseurl' => $_SERVER['SCRIPT_NAME'].'/?'.$_SERVER['QUERY_STRING'], + 'offset' => $vars['offset'], + 'count' => $vars['count'], + 'limit' => $vars['limit'], + + )); +$event_calendar_times = get_plugin_setting('times', 'event_calendar'); +$event_calendar_personal_manage = get_plugin_setting('personal_manage', 'event_calendar'); +$events = $vars['events']; +$html = ''; +$date_format = 'F Y'; +$current_month = ''; +if ($events) { + foreach($events as $event) { + $month = date($date_format,$event->start_date); + if ($month != $current_month) { + if ($html) { + $html .= elgg_view('event_calendar/paged_footer'); + } + $html .= elgg_view('event_calendar/paged_header',array('date'=>$month,'personal_manage'=>$event_calendar_personal_manage)); + + $current_month = $month; + } + $html .= elgg_view('event_calendar/paged_item_view',array('event'=>$event,'times'=>$event_calendar_times,'personal_manage'=>$event_calendar_personal_manage)); + } + $html .= elgg_view('event_calendar/paged_footer'); +} +$msgs = '
'; +$html = $msgs.$nav.'
'.$html.'
'.$nav; + +echo $html; +?> + \ No newline at end of file diff --git a/trunk/views/default/event_calendar/personal_toggle_js.php b/trunk/views/default/event_calendar/personal_toggle_js.php new file mode 100644 index 000000000..c0611e45c --- /dev/null +++ b/trunk/views/default/event_calendar/personal_toggle_js.php @@ -0,0 +1,20 @@ + + \ No newline at end of file diff --git a/trunk/views/default/event_calendar/region_select.php b/trunk/views/default/event_calendar/region_select.php new file mode 100644 index 000000000..81407b27d --- /dev/null +++ b/trunk/views/default/event_calendar/region_select.php @@ -0,0 +1,23 @@ +elgg_echo('event_calendar:all')); + foreach(explode("\n",$region_list) as $region_item) { + $region_item = trim($region_item); + $options_values[$region_item] = $region_item; + } + $js = "onchange=\"javascript:$('#event_list').load('".$vars['url_start'] + ."&callback=true®ion='+escape($('#region').val() ));\""; + //$js = "onchange=\"javascript:$('#event_list').load('".$vars['url_start']."&callback=true®ion='+$('#region').val());\""; + $body .= elgg_echo('event_calendar:region_filter_by_label'); + $body .= elgg_view("input/pulldown",array('internalid' => 'region','js'=>$js,'value'=>$vars['region'],'options_values'=>$options_values)); + $body .= '
'; +} + +echo $body; +?> \ No newline at end of file diff --git a/trunk/views/default/event_calendar/review_requests.php b/trunk/views/default/event_calendar/review_requests.php new file mode 100644 index 000000000..e1866a32b --- /dev/null +++ b/trunk/views/default/event_calendar/review_requests.php @@ -0,0 +1,25 @@ + $request, + 'size' => 'small' + )); + $info = ''.$request->name.''; + $info .= '
'; + $info .= elgg_view('output/confirmlink', + array( + 'class' => "cancel_button", + 'href' => $vars['url'] . 'action/event_calendar/killrequest?user_guid='.$request->guid.'&event_id=' . $vars['entity']->guid, + 'confirm' => elgg_echo('event_calendar:request:remove:check'), + 'text' => elgg_echo('delete'), + )); + $info .= '  '; + $url = elgg_add_action_tokens_to_url("{$vars['url']}action/event_calendar/addtocalendar?user_guid={$request->guid}&event_id={$vars['entity']->guid}"); + $info .= ''.elgg_echo('accept').''; + echo elgg_view_listing($icon,$info); + } +} + +?> diff --git a/trunk/views/default/event_calendar/show_events.php b/trunk/views/default/event_calendar/show_events.php new file mode 100644 index 000000000..31771f43d --- /dev/null +++ b/trunk/views/default/event_calendar/show_events.php @@ -0,0 +1,53 @@ + + * @copyright Radagast Solutions 2008 + * @link http://radagast.biz/ + * + */ + +$listing_format = $vars['listing_format']; + +if ($vars['events']) { + if (get_plugin_setting('agenda_view', 'event_calendar') == 'yes') { + $event_list = elgg_view('event_calendar/agenda_view',$vars); + } else { + if ($listing_format == 'paged') { + $event_list = elgg_view('event_calendar/paged_view',$vars); + } else { + $event_list = elgg_view_entity_list($vars['events'], $vars['count'], $vars['offset'], $vars['limit'], false, false); + } + } +} else { + $event_list = '

'.elgg_echo('event_calendar:no_events_found').'

'; +} +if ($listing_format == 'paged') { + echo $event_list; +} else { + if (isloggedin()) { + $nav = elgg_view('event_calendar/nav',$vars); + } else { + $nav = ''; + } +?> +
'.elgg_echo('event_calendar:paged:column:date').''.elgg_echo('event_calendar:paged:column:time').''.elgg_echo('event_calendar:paged:column:event').''.elgg_echo('event_calendar:paged:column:venue').''.elgg_echo('event_calendar:paged:column:calendar').'
'.$date_bit.''.$time_bit.''.$event->title.''.$event->venue.'
+ + +
+
+'.$event_list; +?> +
+
+ +
+ \ No newline at end of file diff --git a/trunk/views/default/event_calendar/strapline.php b/trunk/views/default/event_calendar/strapline.php new file mode 100644 index 000000000..15c7c98d9 --- /dev/null +++ b/trunk/views/default/event_calendar/strapline.php @@ -0,0 +1,18 @@ +
+ +time_created; + $owner_guid = $event->owner_guid; + $owner = get_entity($owner_guid); + + echo sprintf(elgg_echo('event_calendar:strapline'), + friendly_time($time_updated), + "getURL() . "\">" . $owner->name ."" + ); + +?> + +
\ No newline at end of file diff --git a/trunk/views/default/icon/object/event_calendar/small.php b/trunk/views/default/icon/object/event_calendar/small.php new file mode 100644 index 000000000..d30d14453 --- /dev/null +++ b/trunk/views/default/icon/object/event_calendar/small.php @@ -0,0 +1,3 @@ + \ No newline at end of file diff --git a/trunk/views/default/input/datepicker_inline.php b/trunk/views/default/input/datepicker_inline.php new file mode 100644 index 000000000..560074a2d --- /dev/null +++ b/trunk/views/default/input/datepicker_inline.php @@ -0,0 +1,52 @@ + + * @copyright Radagast Solutions 2008 + * @link http://radagast.biz/ + * + */ +?> + + +
+

\ No newline at end of file diff --git a/trunk/views/default/input/datepicker_popup.php b/trunk/views/default/input/datepicker_popup.php new file mode 100644 index 000000000..8e1120ce7 --- /dev/null +++ b/trunk/views/default/input/datepicker_popup.php @@ -0,0 +1,30 @@ + + * @copyright Radagast Solutions 2008 + * @link http://radagast.biz/ + * + */ +if ($vars['dateformat']) { + $date_format = $vars['dateformat']; +} else { + $date_format = "DD, MM d, yy"; +} +?> + + + \ No newline at end of file diff --git a/trunk/views/default/input/timepicker.php b/trunk/views/default/input/timepicker.php new file mode 100644 index 000000000..35fa5ac98 --- /dev/null +++ b/trunk/views/default/input/timepicker.php @@ -0,0 +1,38 @@ +$vars['internalname'].'_h','value'=>$hour,'options_values'=>$hours)); +echo elgg_view('input/pulldown',array('internalname'=>$vars['internalname'].'_m','value'=>$minute,'options_values'=>$minutes)); + +?> \ No newline at end of file diff --git a/trunk/views/default/object/event_calendar.php b/trunk/views/default/object/event_calendar.php new file mode 100644 index 000000000..70560bd2d --- /dev/null +++ b/trunk/views/default/object/event_calendar.php @@ -0,0 +1,66 @@ + + * @copyright Radagast Solutions 2008 + * @link http://radagast.biz/ + * + */ + +$event = $vars['entity']; + + +if ($vars['full']) { + $body = elgg_view('event_calendar/strapline',$vars); + $event_items = event_calendar_get_formatted_full_items($event); + $body .= '
'; + + foreach($event_items as $item) { + $value = $item->value; + if (!empty($value)) { + + //This function controls the alternating class + $even_odd = ( 'odd' != $even_odd ) ? 'odd' : 'even'; + $body .= "

"; + $body .= $item->title.': '; + $body .= $item->value; + + } + } + echo $body; + if ($event->long_description) { + echo '

'.$event->long_description.'

'; + } else { + echo '

'.$event->description.'

'; + } + echo '
'; + if (get_plugin_setting('add_to_group_calendar', 'event_calendar') == 'yes') { + echo elgg_view('event_calendar/forms/add_to_group',array('event' => $event)); + } +} else { + $time_bit = event_calendar_get_formatted_time($event); + $icon = elgg_view( + "graphics/icon", array( + 'entity' => $vars['entity'], + 'size' => 'small', + ) + ); + $info .= '

'.$event->title.''; + $info .= '
'.$time_bit; + if ($event->description) { + $info .= '

'.$event->description; + } + + if ($event_calendar_venue_view = get_plugin_setting('venue_view', 'event_calendar') == 'yes') { + $info .= '
'.$event->venue; + } + $info .= '

'; + + echo elgg_view_listing($icon, $info); +} + +?> \ No newline at end of file diff --git a/trunk/views/default/river/object/event_calendar/create.php b/trunk/views/default/river/object/event_calendar/create.php new file mode 100644 index 000000000..f144ca610 --- /dev/null +++ b/trunk/views/default/river/object/event_calendar/create.php @@ -0,0 +1,12 @@ +subject_guid); + $object = get_entity($vars['item']->object_guid); + + $url = "getURL()}\">{$performed_by->name}"; + $string = sprintf(elgg_echo("event_calendar:river:created"),$url) . " "; + $string .= elgg_echo("event_calendar:river:create")." getURL() . "\">" . $object->title . ""; + +?> + + \ No newline at end of file diff --git a/trunk/views/default/river/object/event_calendar/update.php b/trunk/views/default/river/object/event_calendar/update.php new file mode 100644 index 000000000..5a5d376b1 --- /dev/null +++ b/trunk/views/default/river/object/event_calendar/update.php @@ -0,0 +1,12 @@ +subject_guid); + $object = get_entity($vars['item']->object_guid); + + $url = "getURL()}\">{$performed_by->name}"; + $string = sprintf(elgg_echo("event_calendar:river:updated"),$url) . " "; + $string .= elgg_echo("event_calendar:river:the_event")." getURL() . "\">" . $object->title . ""; + +?> + + \ No newline at end of file diff --git a/trunk/views/default/settings/event_calendar/edit.php b/trunk/views/default/settings/event_calendar/edit.php new file mode 100644 index 000000000..429a85b26 --- /dev/null +++ b/trunk/views/default/settings/event_calendar/edit.php @@ -0,0 +1,363 @@ +'yes', + elgg_echo('event_calendar:settings:no')=>'no', +); + +$access_options = array( ACCESS_PRIVATE => elgg_echo("PRIVATE"), + ACCESS_LOGGED_IN => elgg_echo("LOGGED_IN"), + ACCESS_PUBLIC => elgg_echo("PUBLIC")); + +// TODO - merge the agenda view into the list format options + +$listing_options = array(elgg_echo('event_calendar:settings:paged')=>'paged', + elgg_echo('event_calendar:settings:month')=>'month', +); + +$body = ''; + +$event_calendar_hide_access = get_plugin_setting('hide_access', 'event_calendar'); +if (!$event_calendar_hide_access) { + $event_calendar_hide_access = 'no'; +} + +$body .= elgg_echo('event_calendar:settings:hide_access:title'); +$body .= '
'; +$body .= elgg_view('input/radio',array('internalname'=>'params[hide_access]','value'=>$event_calendar_hide_access,'options'=>$yn_options)); + +$body .= '
'; + +$event_calendar_default_access = get_plugin_setting('default_access', 'event_calendar'); +if (!$event_calendar_default_access) { + $event_calendar_default_access = ACCESS_LOGGED_IN; +} + +$body .= elgg_echo('event_calendar:settings:default_access:title'); +$body .= '
'; +$body .= elgg_view('input/pulldown',array('internalname'=>'params[default_access]','value'=>$event_calendar_default_access,'options_values'=>$access_options)); + +$body .= '

'; + +$event_calendar_hide_end = get_plugin_setting('hide_end', 'event_calendar'); +if (!$event_calendar_hide_end) { + $event_calendar_hide_end = 'no'; +} + +$body .= elgg_echo('event_calendar:settings:hide_end:title'); +$body .= '
'; +$body .= elgg_view('input/radio',array('internalname'=>'params[hide_end]','value'=>$event_calendar_hide_end,'options'=>$yn_options)); + +$body .= '
'; + +$event_calendar_listing_format = get_plugin_setting('listing_format', 'event_calendar'); +if (!$event_calendar_listing_format) { + $event_calendar_listing_format = 'month'; +} + +$body .= elgg_echo('event_calendar:settings:listing_format:title'); +$body .= '
'; +$body .= elgg_view('input/radio',array('internalname'=>'params[listing_format]','value'=>$event_calendar_listing_format,'options'=>$listing_options)); + +$body .= '
'; + +$event_calendar_times = get_plugin_setting('times', 'event_calendar'); +if (!$event_calendar_times) { + $event_calendar_times = 'no'; +} + +$body .= elgg_echo('event_calendar:settings:times:title'); +$body .= '
'; +$body .= elgg_view('input/radio',array('internalname'=>'params[times]','value'=>$event_calendar_times,'options'=>$yn_options)); + +$body .= '
'; + +$event_calendar_autopersonal = get_plugin_setting('autopersonal', 'event_calendar'); +if (!$event_calendar_autopersonal) { + $event_calendar_autopersonal = 'yes'; +} + +$body .= elgg_echo('event_calendar:settings:autopersonal:title'); +$body .= '
'; +$body .= elgg_view('input/radio',array('internalname'=>'params[autopersonal]','value'=>$event_calendar_autopersonal,'options'=>$yn_options)); + +$body .= '
'; + +$event_calendar_autogroup = get_plugin_setting('autogroup', 'event_calendar'); +if (!$event_calendar_autogroup) { + $event_calendar_autogroup = 'no'; +} + +$body .= elgg_echo('event_calendar:settings:autogroup:title'); +$body .= '
'; +$body .= elgg_view('input/radio',array('internalname'=>'params[autogroup]','value'=>$event_calendar_autogroup,'options'=>$yn_options)); + +$body .= '
'; + +$event_calendar_add_to_group_calendar = get_plugin_setting('add_to_group_calendar', 'event_calendar'); +if (!$event_calendar_add_to_group_calendar) { + $event_calendar_add_to_group_calendar = 'no'; +} + +$body .= elgg_echo('event_calendar:settings:add_to_group_calendar:title'); +$body .= '
'; +$body .= elgg_view('input/radio',array('internalname'=>'params[add_to_group_calendar]','value'=>$event_calendar_add_to_group_calendar,'options'=>$yn_options)); + +$body .= '
'; + +$event_calendar_agenda_view = get_plugin_setting('agenda_view', 'event_calendar'); +if (!$event_calendar_agenda_view) { + $event_calendar_agenda_view = 'no'; +} + +$body .= elgg_echo('event_calendar:settings:agenda_view:title'); +$body .= '
'; +$body .= elgg_view('input/radio',array('internalname'=>'params[agenda_view]','value'=>$event_calendar_agenda_view,'options'=>$yn_options)); + +$body .= '
'; + +$event_calendar_venue_view = get_plugin_setting('venue_view', 'event_calendar'); +if (!$event_calendar_venue_view) { + $event_calendar_venue_view = 'no'; +} + +$body .= elgg_echo('event_calendar:settings:venue_view:title'); +$body .= '
'; +$body .= elgg_view('input/radio',array('internalname'=>'params[venue_view]','value'=>$event_calendar_venue_view,'options'=>$yn_options)); + +$body .= '
'; + +$options = array(elgg_echo('event_calendar:settings:no')=>'no', + elgg_echo('event_calendar:settings:site_calendar:admin')=>'admin', + elgg_echo('event_calendar:settings:site_calendar:loggedin')=>'loggedin', +); + +$event_calendar_site_calendar = get_plugin_setting('site_calendar', 'event_calendar'); +if (!$event_calendar_site_calendar) { + $event_calendar_site_calendar = 'admin'; +} + +$body .= elgg_echo('event_calendar:settings:site_calendar:title').'
'; +$body .= elgg_view('input/radio',array('internalname'=>'params[site_calendar]','value'=>$event_calendar_site_calendar,'options'=>$options)); + +$body .= '
'; + +$options = array(elgg_echo('event_calendar:settings:no')=>'no', + elgg_echo('event_calendar:settings:group_calendar:admin')=>'admin', + elgg_echo('event_calendar:settings:group_calendar:members')=>'members', +); + +$event_calendar_group_calendar = get_plugin_setting('group_calendar', 'event_calendar'); +if (!$event_calendar_group_calendar) { + $event_calendar_group_calendar = 'members'; +} + +$body .= elgg_echo('event_calendar:settings:group_calendar:title').'
'; +$body .= elgg_view('input/radio',array('internalname'=>'params[group_calendar]','value'=>$event_calendar_group_calendar,'options'=>$options)); + +$body .= '
'; + +$options = array(elgg_echo('event_calendar:settings:group_default:yes')=>'yes', + elgg_echo('event_calendar:settings:group_default:no')=>'no', +); + +$event_calendar_group_default = get_plugin_setting('group_default', 'event_calendar'); +if (!$event_calendar_group_default) { + $event_calendar_group_default = 'yes'; +} + +$body .= elgg_echo('event_calendar:settings:group_default:title'); +$body .= '
'; +$body .= elgg_view('input/radio',array('internalname'=>'params[group_default]','value'=>$event_calendar_group_default,'options'=>$options)); + +$body .= '
'; + +$event_calendar_group_always_display = get_plugin_setting('group_always_display', 'event_calendar'); +if (!$event_calendar_group_always_display) { + $event_calendar_group_always_display = 'no'; +} + +$body .= elgg_echo('event_calendar:settings:group_always_display:title'); +$body .= '
'; +$body .= elgg_view('input/radio',array('internalname'=>'params[group_always_display]','value'=>$event_calendar_group_always_display,'options'=>$yn_options)); + +$body .= '
'; + +$options = array(elgg_echo('event_calendar:settings:group_profile_display_option:left')=>'left', + elgg_echo('event_calendar:settings:group_profile_display_option:right')=>'right', + elgg_echo('event_calendar:settings:group_profile_display_option:none')=>'none', +); + +$event_calendar_group_profile_display = get_plugin_setting('group_profile_display', 'event_calendar'); +if (!$event_calendar_group_profile_display) { + $event_calendar_group_profile_display = 'right'; +} + +$body .= elgg_echo('event_calendar:settings:group_profile_display:title').'
'; +$body .= elgg_view('input/radio',array('internalname'=>'params[group_profile_display]','value'=>$event_calendar_group_profile_display,'options'=>$options)); + +$body .= '
'; + +$event_calendar_add_users = get_plugin_setting('add_users', 'event_calendar'); +if (!$event_calendar_add_users) { + $event_calendar_add_users = 'no'; +} + +$body .= elgg_echo('event_calendar:settings:add_users:title'); +$body .= '
'; +$body .= elgg_view('input/radio',array('internalname'=>'params[add_users]','value'=>$event_calendar_add_users,'options'=>$yn_options)); + +$body .= '
'; + +$event_calendar_add_users_notify = get_plugin_setting('add_users_notify', 'event_calendar'); +if (!$event_calendar_add_users_notify) { + $event_calendar_add_users_notify = 'no'; +} + +$body .= elgg_echo('event_calendar:settings:add_users_notify:title'); +$body .= '
'; +$body .= elgg_view('input/radio',array('internalname'=>'params[add_users_notify]','value'=>$event_calendar_add_users_notify,'options'=>$yn_options)); + +$body .= '
'; + +$event_calendar_personal_manage = get_plugin_setting('personal_manage', 'event_calendar'); +if (!$event_calendar_personal_manage) { + $event_calendar_personal_manage = 'yes'; +} + +$body .= elgg_echo('event_calendar:settings:personal_manage:title'); +$body .= '
'; +$body .= elgg_view('input/radio',array('internalname'=>'params[personal_manage]','value'=>$event_calendar_personal_manage,'options'=>$yn_options)); + +$body .= '
'; + +$event_calendar_spots_display = get_plugin_setting('spots_display', 'event_calendar'); +if (!$event_calendar_spots_display) { + $event_calendar_spots_display = 'no'; +} + +$body .= elgg_echo('event_calendar:settings:spots_display:title'); +$body .= '
'; +$body .= elgg_view('input/radio',array('internalname'=>'params[spots_display]','value'=>$event_calendar_spots_display,'options'=>$yn_options)); + +$body .= '
'; + +$event_calendar_no_collisions = get_plugin_setting('no_collisions', 'event_calendar'); +if (!$event_calendar_no_collisions) { + $event_calendar_no_collisions = 'no'; +} + +$body .= elgg_echo('event_calendar:settings:no_collisions:title'); +$body .= '
'; +$body .= elgg_view('input/radio',array('internalname'=>'params[no_collisions]','value'=>$event_calendar_no_collisions,'options'=>$yn_options)); + +$body .= '
'; + +$event_calendar_collision_length = get_plugin_setting('collision_length', 'event_calendar'); +if (!$event_calendar_collision_length) { + $event_calendar_collision_length = '3600'; +} + +$body .= elgg_echo('event_calendar:settings:collision_length:title'); +$body .= '
'; +$body .= elgg_view('input/text',array('internalname'=>'params[collision_length]','value'=>$event_calendar_collision_length)); + +$body .= '

'; + +$event_calendar_region_display = get_plugin_setting('region_display', 'event_calendar'); +if (!$event_calendar_region_display) { + $event_calendar_region_display = 'no'; +} + +$body .= elgg_echo('event_calendar:settings:region_display:title'); +$body .= '
'; +$body .= elgg_view('input/radio',array('internalname'=>'params[region_display]','value'=>$event_calendar_region_display,'options'=>$yn_options)); + +$body .= '
'; + +$event_calendar_region_list = get_plugin_setting('region_list', 'event_calendar'); +if (!$event_calendar_region_list) { + $event_calendar_region_list = ''; +} + +$body .= elgg_echo('event_calendar:settings:region_list:title'); +$body .= '
'; +$body .= elgg_view('event_calendar/input/longtext',array('internalname'=>'params[region_list]','value'=>$event_calendar_region_list)); + +$body .= '
'; + +$event_calendar_region_list_handles = get_plugin_setting('region_list_handles', 'event_calendar'); +if (!$event_calendar_region_list_handles) { + $event_calendar_region_list_handles = 'no'; +} + +$body .= elgg_echo('event_calendar:settings:region_list_handles:title'); +$body .= '
'; +$body .= elgg_view('input/radio',array('internalname'=>'params[region_list_handles]','value'=>$event_calendar_region_list_handles,'options'=>$yn_options)); + +$body .= '
'; + +$event_calendar_type_display = get_plugin_setting('type_display', 'event_calendar'); +if (!$event_calendar_type_display) { + $event_calendar_type_display = 'no'; +} + +$body .= elgg_echo('event_calendar:settings:type_display:title'); +$body .= '
'; +$body .= elgg_view('input/radio',array('internalname'=>'params[type_display]','value'=>$event_calendar_type_display,'options'=>$yn_options)); + +$body .= '
'; + +$event_calendar_type_list = get_plugin_setting('type_list', 'event_calendar'); +if (!$event_calendar_type_list) { + $event_calendar_type_list = ''; +} + +$body .= elgg_echo('event_calendar:settings:type_list:title'); +$body .= '
'; +$body .= elgg_view('event_calendar/input/longtext',array('internalname'=>'params[type_list]','value'=>$event_calendar_type_list)); + +$body .= '
'; + +$event_calendar_type_list_handles = get_plugin_setting('type_list_handles', 'event_calendar'); +if (!$event_calendar_type_list_handles) { + $event_calendar_type_list_handles = 'no'; +} + +$body .= elgg_echo('event_calendar:settings:type_list_handles:title'); +$body .= '
'; +$body .= elgg_view('input/radio',array('internalname'=>'params[type_list_handles]','value'=>$event_calendar_type_list_handles,'options'=>$yn_options)); + +$body .= '
'; + +$event_calendar_first_date = get_plugin_setting('first_date', 'event_calendar'); +if (!$event_calendar_first_date) { + $event_calendar_first_date = ''; +} + +$body .= elgg_echo('event_calendar:settings:first_date:title'); +$body .= '
'; +$body .= elgg_view('input/text',array('internalname'=>'params[first_date]','value'=>$event_calendar_first_date)); + +$body .= '

'; + +$event_calendar_last_date = get_plugin_setting('last_date', 'event_calendar'); +if (!$event_calendar_last_date) { + $event_calendar_last_date = ''; +} + +$body .= elgg_echo('event_calendar:settings:last_date:title'); +$body .= '
'; +$body .= elgg_view('input/text',array('internalname'=>'params[last_date]','value'=>$event_calendar_last_date)); + +$body .= '

'; + +$event_calendar_more_required = get_plugin_setting('more_required', 'event_calendar'); +if (!$event_calendar_more_required) { + $event_calendar_more_required = 'no'; +} + +$body .= elgg_echo('event_calendar:settings:more_required:title'); +$body .= '
'; +$body .= elgg_view('input/radio',array('internalname'=>'params[more_required]','value'=>$event_calendar_more_required,'options'=>$yn_options)); + +echo $body; +?> \ No newline at end of file diff --git a/trunk/views/default/widgets/event_calendar/edit.php b/trunk/views/default/widgets/event_calendar/edit.php new file mode 100644 index 000000000..716920c8a --- /dev/null +++ b/trunk/views/default/widgets/event_calendar/edit.php @@ -0,0 +1,35 @@ + + * @copyright Radagast Solutions 2008 + * @link http://radagast.biz/ + * + */ + +if (!$vars['entity']->num_display) { + $num_display = 5; +} else { + $num_display = $vars['entity']->num_display; +} +?> + +

+ : + +

diff --git a/trunk/views/default/widgets/event_calendar/view.php b/trunk/views/default/widgets/event_calendar/view.php new file mode 100644 index 000000000..12fff6d60 --- /dev/null +++ b/trunk/views/default/widgets/event_calendar/view.php @@ -0,0 +1,39 @@ + + * @copyright Radagast Solutions 2008 + * @link http://radagast.biz/ + * + */ + + // Load event calendar model + require_once(dirname(dirname(dirname(dirname(dirname(__FILE__)))))."/models/model.php"); + + //the number of events to display + $num = (int) $vars['entity']->num_display; + if (!$num) + $num = 5; + + // Get the events + + $events = event_calendar_get_personal_events_for_user(page_owner(),$num); + + // If there are any events to view, view them + if (is_array($events) && sizeof($events) > 0) { + + echo "
"; + + foreach($events as $event) { + echo elgg_view("object/event_calendar",array('entity' => $event)); + } + + echo "
"; + + } + +?> \ No newline at end of file diff --git a/trunk/views/rss/event_calendar/show_events.php b/trunk/views/rss/event_calendar/show_events.php new file mode 100644 index 000000000..0b2fe5b70 --- /dev/null +++ b/trunk/views/rss/event_calendar/show_events.php @@ -0,0 +1,16 @@ + + * @copyright Radagast Solutions 2009 + * @link http://radagast.biz/ + * + */ + +if ($vars['events']) { + echo elgg_view_entity_list($vars['events'], $vars['count'], $vars['offset'], $vars['limit'], false, false); +} +?> \ No newline at end of file diff --git a/trunk/views/rss/object/event_calendar.php b/trunk/views/rss/object/event_calendar.php new file mode 100644 index 000000000..92f6fcc14 --- /dev/null +++ b/trunk/views/rss/object/event_calendar.php @@ -0,0 +1,60 @@ +title; + + $event_items = event_calendar_get_formatted_full_items($vars['entity']); + $items = array(); + foreach($event_items as $item) { + if (trim($item->value)) { + $items[] = ''.$item->title.': '.$item->value; + } + } + + $description = '

'.implode('
',$items).'

'; + + if ($vars['entity']->long_description) { + $description .= '

'.autop($vars['entity']->long_description).'

'; + } else { + $description .= '

'.$vars['entity']->description.'

'; + } + +?> + + + getURL()); ?> + getURL()); ?> + <![CDATA[<?php echo $title; ?>]]> + ]]> + getOwnerEntity(); + if ($owner) + { +?> + name; ?> + + getLongitude()) && + ($vars['entity']->getLatitude()) + ) { + ?> + getLatitude(); ?> getLongitude(); ?> + + + -- cgit v1.2.3 From 1dd01c7ff9685995b4bc9de0ceeb7856086c3f40 Mon Sep 17 00:00:00 2001 From: Kevin Jardine Date: Mon, 27 Jun 2011 12:51:54 +0200 Subject: put something in README! --- README | 1 + 1 file changed, 1 insertion(+) diff --git a/README b/README index e69de29bb..c518a539d 100644 --- a/README +++ b/README @@ -0,0 +1 @@ +I'm adding this plugin to github to make it easier to share development with others. \ No newline at end of file -- cgit v1.2.3 From 29792a9858484266952a53268e4fd0dd29b2f4a5 Mon Sep 17 00:00:00 2001 From: Cash Costello Date: Tue, 28 Jun 2011 18:12:41 -0400 Subject: moved the code into the base directory so that it is easier to work with --- CHANGES.txt | 150 +++ CONTRIBUTIONS.txt | 7 + README | 1 - README.txt | 83 ++ actions/add_to_group.php | 11 + actions/addtocalendar.php | 36 + actions/killrequest.php | 23 + actions/manage.php | 105 ++ actions/remove_from_group.php | 8 + actions/request_personal_calendar.php | 18 + actions/toggle_personal_calendar.php | 30 + datepicker.css | 234 +++++ delete_confirm.php | 36 + display_event_users.php | 42 + flora.datepicker.css | 234 +++++ images/calendar.gif | Bin 0 -> 269 bytes images/event_icon.gif | Bin 0 -> 1254 bytes images/event_icon_old.gif | Bin 0 -> 1531 bytes images/river_icon_event.gif | Bin 0 -> 586 bytes languages/en.php | 210 ++++ languages/es.php | 124 +++ languages/fr.php | 125 +++ manage_event.php | 57 ++ manifest.xml | 10 + models/model.php | 1045 ++++++++++++++++++++ pages/review_requests.php | 33 + show_event.php | 60 ++ show_events.php | 213 ++++ start.php | 190 ++++ trunk/CHANGES.txt | 150 --- trunk/CONTRIBUTIONS.txt | 7 - trunk/README.txt | 83 -- trunk/actions/add_to_group.php | 11 - trunk/actions/addtocalendar.php | 36 - trunk/actions/killrequest.php | 23 - trunk/actions/manage.php | 105 -- trunk/actions/remove_from_group.php | 8 - trunk/actions/request_personal_calendar.php | 18 - trunk/actions/toggle_personal_calendar.php | 30 - trunk/datepicker.css | 234 ----- trunk/delete_confirm.php | 36 - trunk/display_event_users.php | 42 - trunk/flora.datepicker.css | 234 ----- trunk/images/calendar.gif | Bin 269 -> 0 bytes trunk/images/event_icon.gif | Bin 1254 -> 0 bytes trunk/images/event_icon_old.gif | Bin 1531 -> 0 bytes trunk/images/river_icon_event.gif | Bin 586 -> 0 bytes trunk/languages/en.php | 210 ---- trunk/languages/es.php | 124 --- trunk/languages/fr.php | 125 --- trunk/manage_event.php | 57 -- trunk/manifest.xml | 10 - trunk/models/model.php | 1045 -------------------- trunk/pages/review_requests.php | 33 - trunk/show_event.php | 60 -- trunk/show_events.php | 213 ---- trunk/start.php | 190 ---- trunk/ui.core.min.js | 9 - trunk/ui.datepicker.css | 62 -- trunk/ui.datepicker.js | 212 ---- trunk/ui.datepicker.min.js | 12 - trunk/ui.datepicker.packed.js | 2 - .../views/default/event_calendar/agenda_footer.php | 5 - .../views/default/event_calendar/agenda_header.php | 12 - .../default/event_calendar/agenda_item_view.php | 26 - trunk/views/default/event_calendar/agenda_view.php | 34 - trunk/views/default/event_calendar/calendar.php | 61 -- trunk/views/default/event_calendar/css.php | 150 --- .../event_calendar/entities/entity_list.php | 66 -- .../default/event_calendar/entities/gallery.php | 44 - .../event_calendar/entities/gallery_item.php | 63 -- .../default/event_calendar/forms/add_to_group.php | 64 -- .../event_calendar/forms/delete_confirm.php | 13 - .../default/event_calendar/forms/manage_event.php | 22 - .../event_calendar/forms/manage_event_content.php | 254 ----- .../event_calendar/groupprofile_calendar.php | 42 - .../default/event_calendar/input/longtext.php | 25 - trunk/views/default/event_calendar/metatags.php | 2 - trunk/views/default/event_calendar/nav.php | 38 - .../views/default/event_calendar/paged_footer.php | 4 - .../views/default/event_calendar/paged_header.php | 15 - .../default/event_calendar/paged_item_view.php | 29 - trunk/views/default/event_calendar/paged_view.php | 51 - .../default/event_calendar/personal_toggle_js.php | 20 - .../views/default/event_calendar/region_select.php | 23 - .../default/event_calendar/review_requests.php | 25 - trunk/views/default/event_calendar/show_events.php | 53 - trunk/views/default/event_calendar/strapline.php | 18 - .../default/icon/object/event_calendar/small.php | 3 - trunk/views/default/input/datepicker_inline.php | 52 - trunk/views/default/input/datepicker_popup.php | 30 - trunk/views/default/input/timepicker.php | 38 - trunk/views/default/object/event_calendar.php | 66 -- .../default/river/object/event_calendar/create.php | 12 - .../default/river/object/event_calendar/update.php | 12 - .../views/default/settings/event_calendar/edit.php | 363 ------- .../views/default/widgets/event_calendar/edit.php | 35 - .../views/default/widgets/event_calendar/view.php | 39 - trunk/views/rss/event_calendar/show_events.php | 16 - trunk/views/rss/object/event_calendar.php | 60 -- ui.core.min.js | 9 + ui.datepicker.css | 62 ++ ui.datepicker.js | 212 ++++ ui.datepicker.min.js | 12 + ui.datepicker.packed.js | 2 + views/default/event_calendar/agenda_footer.php | 5 + views/default/event_calendar/agenda_header.php | 12 + views/default/event_calendar/agenda_item_view.php | 26 + views/default/event_calendar/agenda_view.php | 34 + views/default/event_calendar/calendar.php | 61 ++ views/default/event_calendar/css.php | 150 +++ .../event_calendar/entities/entity_list.php | 66 ++ views/default/event_calendar/entities/gallery.php | 44 + .../event_calendar/entities/gallery_item.php | 63 ++ .../default/event_calendar/forms/add_to_group.php | 64 ++ .../event_calendar/forms/delete_confirm.php | 13 + .../default/event_calendar/forms/manage_event.php | 22 + .../event_calendar/forms/manage_event_content.php | 254 +++++ .../event_calendar/groupprofile_calendar.php | 42 + views/default/event_calendar/input/longtext.php | 25 + views/default/event_calendar/metatags.php | 2 + views/default/event_calendar/nav.php | 38 + views/default/event_calendar/paged_footer.php | 4 + views/default/event_calendar/paged_header.php | 15 + views/default/event_calendar/paged_item_view.php | 29 + views/default/event_calendar/paged_view.php | 51 + .../default/event_calendar/personal_toggle_js.php | 20 + views/default/event_calendar/region_select.php | 23 + views/default/event_calendar/review_requests.php | 25 + views/default/event_calendar/show_events.php | 53 + views/default/event_calendar/strapline.php | 18 + views/default/icon/object/event_calendar/small.php | 3 + views/default/input/datepicker_inline.php | 52 + views/default/input/datepicker_popup.php | 30 + views/default/input/timepicker.php | 38 + views/default/object/event_calendar.php | 66 ++ .../default/river/object/event_calendar/create.php | 12 + .../default/river/object/event_calendar/update.php | 12 + views/default/settings/event_calendar/edit.php | 363 +++++++ views/default/widgets/event_calendar/edit.php | 35 + views/default/widgets/event_calendar/view.php | 39 + views/rss/event_calendar/show_events.php | 16 + views/rss/object/event_calendar.php | 60 ++ 143 files changed, 5266 insertions(+), 5267 deletions(-) create mode 100644 CHANGES.txt create mode 100644 CONTRIBUTIONS.txt delete mode 100644 README create mode 100644 README.txt create mode 100644 actions/add_to_group.php create mode 100644 actions/addtocalendar.php create mode 100644 actions/killrequest.php create mode 100644 actions/manage.php create mode 100644 actions/remove_from_group.php create mode 100644 actions/request_personal_calendar.php create mode 100644 actions/toggle_personal_calendar.php create mode 100644 datepicker.css create mode 100644 delete_confirm.php create mode 100644 display_event_users.php create mode 100644 flora.datepicker.css create mode 100644 images/calendar.gif create mode 100644 images/event_icon.gif create mode 100644 images/event_icon_old.gif create mode 100644 images/river_icon_event.gif create mode 100644 languages/en.php create mode 100644 languages/es.php create mode 100644 languages/fr.php create mode 100644 manage_event.php create mode 100644 manifest.xml create mode 100644 models/model.php create mode 100644 pages/review_requests.php create mode 100644 show_event.php create mode 100644 show_events.php create mode 100644 start.php delete mode 100644 trunk/CHANGES.txt delete mode 100644 trunk/CONTRIBUTIONS.txt delete mode 100644 trunk/README.txt delete mode 100644 trunk/actions/add_to_group.php delete mode 100644 trunk/actions/addtocalendar.php delete mode 100644 trunk/actions/killrequest.php delete mode 100644 trunk/actions/manage.php delete mode 100644 trunk/actions/remove_from_group.php delete mode 100644 trunk/actions/request_personal_calendar.php delete mode 100644 trunk/actions/toggle_personal_calendar.php delete mode 100644 trunk/datepicker.css delete mode 100644 trunk/delete_confirm.php delete mode 100644 trunk/display_event_users.php delete mode 100644 trunk/flora.datepicker.css delete mode 100644 trunk/images/calendar.gif delete mode 100644 trunk/images/event_icon.gif delete mode 100644 trunk/images/event_icon_old.gif delete mode 100644 trunk/images/river_icon_event.gif delete mode 100644 trunk/languages/en.php delete mode 100644 trunk/languages/es.php delete mode 100644 trunk/languages/fr.php delete mode 100644 trunk/manage_event.php delete mode 100644 trunk/manifest.xml delete mode 100644 trunk/models/model.php delete mode 100644 trunk/pages/review_requests.php delete mode 100644 trunk/show_event.php delete mode 100644 trunk/show_events.php delete mode 100644 trunk/start.php delete mode 100644 trunk/ui.core.min.js delete mode 100644 trunk/ui.datepicker.css delete mode 100644 trunk/ui.datepicker.js delete mode 100644 trunk/ui.datepicker.min.js delete mode 100644 trunk/ui.datepicker.packed.js delete mode 100644 trunk/views/default/event_calendar/agenda_footer.php delete mode 100644 trunk/views/default/event_calendar/agenda_header.php delete mode 100644 trunk/views/default/event_calendar/agenda_item_view.php delete mode 100644 trunk/views/default/event_calendar/agenda_view.php delete mode 100644 trunk/views/default/event_calendar/calendar.php delete mode 100644 trunk/views/default/event_calendar/css.php delete mode 100644 trunk/views/default/event_calendar/entities/entity_list.php delete mode 100644 trunk/views/default/event_calendar/entities/gallery.php delete mode 100644 trunk/views/default/event_calendar/entities/gallery_item.php delete mode 100644 trunk/views/default/event_calendar/forms/add_to_group.php delete mode 100644 trunk/views/default/event_calendar/forms/delete_confirm.php delete mode 100644 trunk/views/default/event_calendar/forms/manage_event.php delete mode 100644 trunk/views/default/event_calendar/forms/manage_event_content.php delete mode 100644 trunk/views/default/event_calendar/groupprofile_calendar.php delete mode 100644 trunk/views/default/event_calendar/input/longtext.php delete mode 100644 trunk/views/default/event_calendar/metatags.php delete mode 100644 trunk/views/default/event_calendar/nav.php delete mode 100644 trunk/views/default/event_calendar/paged_footer.php delete mode 100644 trunk/views/default/event_calendar/paged_header.php delete mode 100644 trunk/views/default/event_calendar/paged_item_view.php delete mode 100644 trunk/views/default/event_calendar/paged_view.php delete mode 100644 trunk/views/default/event_calendar/personal_toggle_js.php delete mode 100644 trunk/views/default/event_calendar/region_select.php delete mode 100644 trunk/views/default/event_calendar/review_requests.php delete mode 100644 trunk/views/default/event_calendar/show_events.php delete mode 100644 trunk/views/default/event_calendar/strapline.php delete mode 100644 trunk/views/default/icon/object/event_calendar/small.php delete mode 100644 trunk/views/default/input/datepicker_inline.php delete mode 100644 trunk/views/default/input/datepicker_popup.php delete mode 100644 trunk/views/default/input/timepicker.php delete mode 100644 trunk/views/default/object/event_calendar.php delete mode 100644 trunk/views/default/river/object/event_calendar/create.php delete mode 100644 trunk/views/default/river/object/event_calendar/update.php delete mode 100644 trunk/views/default/settings/event_calendar/edit.php delete mode 100644 trunk/views/default/widgets/event_calendar/edit.php delete mode 100644 trunk/views/default/widgets/event_calendar/view.php delete mode 100644 trunk/views/rss/event_calendar/show_events.php delete mode 100644 trunk/views/rss/object/event_calendar.php create mode 100644 ui.core.min.js create mode 100644 ui.datepicker.css create mode 100644 ui.datepicker.js create mode 100644 ui.datepicker.min.js create mode 100644 ui.datepicker.packed.js create mode 100644 views/default/event_calendar/agenda_footer.php create mode 100644 views/default/event_calendar/agenda_header.php create mode 100644 views/default/event_calendar/agenda_item_view.php create mode 100644 views/default/event_calendar/agenda_view.php create mode 100644 views/default/event_calendar/calendar.php create mode 100644 views/default/event_calendar/css.php create mode 100644 views/default/event_calendar/entities/entity_list.php create mode 100644 views/default/event_calendar/entities/gallery.php create mode 100644 views/default/event_calendar/entities/gallery_item.php create mode 100644 views/default/event_calendar/forms/add_to_group.php create mode 100644 views/default/event_calendar/forms/delete_confirm.php create mode 100644 views/default/event_calendar/forms/manage_event.php create mode 100644 views/default/event_calendar/forms/manage_event_content.php create mode 100644 views/default/event_calendar/groupprofile_calendar.php create mode 100644 views/default/event_calendar/input/longtext.php create mode 100644 views/default/event_calendar/metatags.php create mode 100644 views/default/event_calendar/nav.php create mode 100644 views/default/event_calendar/paged_footer.php create mode 100644 views/default/event_calendar/paged_header.php create mode 100644 views/default/event_calendar/paged_item_view.php create mode 100644 views/default/event_calendar/paged_view.php create mode 100644 views/default/event_calendar/personal_toggle_js.php create mode 100644 views/default/event_calendar/region_select.php create mode 100644 views/default/event_calendar/review_requests.php create mode 100644 views/default/event_calendar/show_events.php create mode 100644 views/default/event_calendar/strapline.php create mode 100644 views/default/icon/object/event_calendar/small.php create mode 100644 views/default/input/datepicker_inline.php create mode 100644 views/default/input/datepicker_popup.php create mode 100644 views/default/input/timepicker.php create mode 100644 views/default/object/event_calendar.php create mode 100644 views/default/river/object/event_calendar/create.php create mode 100644 views/default/river/object/event_calendar/update.php create mode 100644 views/default/settings/event_calendar/edit.php create mode 100644 views/default/widgets/event_calendar/edit.php create mode 100644 views/default/widgets/event_calendar/view.php create mode 100644 views/rss/event_calendar/show_events.php create mode 100644 views/rss/object/event_calendar.php diff --git a/CHANGES.txt b/CHANGES.txt new file mode 100644 index 000000000..0a484cebe --- /dev/null +++ b/CHANGES.txt @@ -0,0 +1,150 @@ +CHANGE LOG +0.84 + +Fixed tag search so it works for Elgg 1.7.x. + +Added French and Spanish language files provided by UNESCO. These are not +quite complete and additions are welcome. + +There is now an option to allow group admins to add any existing event to a +group calendar + +Fixed a bug which incorrectly removed the ability to change the date and year. + +Renamed a date picker view to avoid a conflict with the Profile Manager. + +Added unpacked js for ease in customisation and localisation. + +Restored the vanished RSS feed link. + +Fixed a bug in the region dropdown behaviour on listing pages. + +Fixed a case where the page was not properly displayed when clicking on a +pagination link. + +Added a sanity check for date formats. + +Changed the listing limit from 4 events to a more reasonable 15 events. + +Added real_end_time as an internal metadata value to compute collisions. + +Added three features that are turned off by default but can be enabled +through plugin settings: + +The spots feature allows you to specify how many users can add an event to +their personal calendars. This also adds an "open" filter to the show events page +so that you can see how many events are not full. + +The no collisions feature prevents someone from adding an event +if they already have another event on their personal calendar within +the same time period. (This will only work with new events or events that +you have resaved after updating this plugin as it needs the new real_end_time +field.) + +The add users feature provides a magic JavaScript field that +allows an event creator to add the event to the personal calendars of other users. +This appears on the event edit form. (Requires the separate autocomplete plugin.) + +There is a separate option (turned off by default) to send notifications to +users who have events added to their calendars through the add users feature. + +0.83 + +Fixed a bug that prevented region filtering with embedded blanks from +working properly (thanks Patrick!). + +Added a new paged view for events (not month specific) that allows adding/removing events +to a calendar with one click. + +Fixed some issues with the personal event calendar widget. + +0.82 + +Fixed a bug in displaying dates when the start and end date were the same. + +Fixed the form redisplay bug described here: +http://community.elgg.org/mod/groups/topicposts.php?topic=423853&group_guid=263011 + +Removed an error_log message that was accidentally left in. + +Added RSS feeds. + +Added the ability to filter events by regions if the region option is turned on. + +Added security tokens for Elgg 1.7 + +0.81 + +Fixed a problem with the group "widget" not displaying when it should. + +Hid the "Today" link as it was not behaving as most people expected. + +Forced the display into Month mode after Prev and Next is clicked. + +0.8 + +Removed a debugging message left in the event delete action. + +Sorted events properly by date/time rather than time created. + +Fixed an error in the parameters passed to elgg_view_entity_list that caused +problems with Elgg 1.6.1. + +Added an admin toggle to allow event times as well as dates. + +Added an admin toggle to show the venue in event listings. + +Added an admin toggle for an agenda view which should be useful for conferences +with multiple events on one day. + +Added the ability to "lock" the show_events page so that the calendar only +allows navigation between a first date and a last date. + +Added an admin toggle for an autogroup function that automatically adds all +group events to a user's calendar for all groups that the user is a member of. +Group events are also automatically removed if the user leaves the group. + +Added an admin toggle to add a region drop down to the event form and a field to +enter the allowable regions. + +0.7 + +Reworked design for Elgg 1.5 + +Fixed several bugs, including in the list of people who added an event to +their personal calendar (now shows the proper group navigation if this is +a group event). + +Added the ability to view all/friends/mine events for logged-in users. + +Added numerous configuration options (accessible via event_calendar settings +on the admin tools configuration page). This allows, for example, any logged-in +user to add events to the site calendar, to remove group calendars, etc. + +People who create an event now have the event automatically added to their +personal event calendar. This behaviour can be configured via the admin event +calendar settings. + +0.6 + +Fixed a bug that prevented more than one person adding a given event to +his/her personal calendar. + +Fixed a bug that made the page owner the person who created the event. This +is now the group for group events, otherwise the currently logged in user. + +Added river support. + +0.51 + +Fixed event overlap detection + +0.5 + +Initial release + + + + + + diff --git a/CONTRIBUTIONS.txt b/CONTRIBUTIONS.txt new file mode 100644 index 000000000..edadc2407 --- /dev/null +++ b/CONTRIBUTIONS.txt @@ -0,0 +1,7 @@ +Pete Harris from Curverider contributed the icons. Thanks Pete! + +Igor Nuk from UNESCO sent me Spanish and French language files as well +as a version tweaked to make it easier to customise. + +Many clients too numerous to mention have funded enhancements since the +original version was funded by the Royal Institute of British Architects. \ No newline at end of file diff --git a/README b/README deleted file mode 100644 index c518a539d..000000000 --- a/README +++ /dev/null @@ -1 +0,0 @@ -I'm adding this plugin to github to make it easier to share development with others. \ No newline at end of file diff --git a/README.txt b/README.txt new file mode 100644 index 000000000..3cb68ee3b --- /dev/null +++ b/README.txt @@ -0,0 +1,83 @@ +/** + * Manage and display events + * + * @package event_calendar + * @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.html GNU Public License version 2 + * @author Kevin Jardine + * @copyright Radagast Solutions 2008 + * @link http://radagast.biz/ + * + */ + + Note: this README.txt file is a bit outdated because it does not describe numerous + recently added features. For more information, check the CHANGES.txt file + or look at the event calendar settings available through Tools Administration. + +Version: 0.8 + +Requires: Elgg 1.5 or higher + +*Description* + +The event_calendar plugin adds a site-wide event calendar as well as +an event calendar to each group. Various options related to the site and group +calendars can be set using the event calendar settings on the tool +administration page. + +Group members can view events by month, week and day using a jQuery date +picker widget, and submit event descriptions including the venue, start date, +end date, tags, description, organiser, contact person, event access level, +and fees if any. + +Group events are aggregated into the site wide event calendar accessible from +the Tools menu drop down. + +Site admins (or optionally any user) can also add non-group-specific events to +the site-wide calendar. + +Users can add group or site-wide events to a personal calendar to showcase +events that they plan to attend or are interested in. They can optionally +display these events by dragging an Event calendar widget onto their profile +or dashboard. + +The number of users who have added an event to their personal gallery is listed +on each event page along with a link to a page that displays these users in a +gallery format. It is thus easy to find other people interested in the same +event. + +*Admin settings* + +Numerous options for the event calendar can be set in the event_calendar settings +area under Tool Administration. + +These include: + +Add starting and ending times as well as dates to events (default: no) + +Automatically add events a user creates to his/her personal calendar (default: yes) + +Automatically add group events for all members to their personal calendars (default: no) + +(If activated, the autogroup function automatically adds all group events to a +user's calendar for all groups that the user is a member of. Group events are +also automatically removed if the user leaves the group.) + +Use Agenda view (default: no) + +Useful for conferences with multiple events on the same day. + +Display venue in event listings (default: no) + +Add region dropdown (default: no), plus a way to specify the allowable regions + +First date displayable on show events pages (default: no first date) + +Last date displayable on show events pages (default: no last date) + +As well, there are numerous options for configuring the site wide and group calendars. + +*Acknowledgment* + +The initial development of the event calendar plugin was funded by the Research +& Development department at the Royal Institute of British Architects +(RIBA). Several other clients have funded enhancements. \ No newline at end of file diff --git a/actions/add_to_group.php b/actions/add_to_group.php new file mode 100644 index 000000000..b8c18ebb0 --- /dev/null +++ b/actions/add_to_group.php @@ -0,0 +1,11 @@ +canEdit()) { + add_entity_relationship($event_id, "display_on_group", $group_id ); + system_message(elgg_echo('event_calendar:add_to_group:success')); +} +forward($event->getUrl()); +?> \ No newline at end of file diff --git a/actions/addtocalendar.php b/actions/addtocalendar.php new file mode 100644 index 000000000..cb83aab88 --- /dev/null +++ b/actions/addtocalendar.php @@ -0,0 +1,36 @@ +site->guid, elgg_echo('event_calendar:add_users_notify:subject'), + sprintf( + elgg_echo('event_calendar:add_users_notify:body'), + $user->name, + $event->title, + $event->getURL() + ) + ); + system_message(elgg_echo('event_calendar:request_approved')); + + } +} else { + register_error(elgg_echo('event_calendar:review_requests_error')); +} + +forward($_SERVER['HTTP_REFERER']); diff --git a/actions/killrequest.php b/actions/killrequest.php new file mode 100644 index 000000000..66257230c --- /dev/null +++ b/actions/killrequest.php @@ -0,0 +1,23 @@ +guid, 'event_calendar_request', $event->guid)) + { + remove_entity_relationship($user->guid, 'event_calendar_request', $event->guid); + system_message(elgg_echo('event_calendar:requestkilled')); + } + + forward($_SERVER['HTTP_REFERER']); + +?> \ No newline at end of file diff --git a/actions/manage.php b/actions/manage.php new file mode 100644 index 000000000..5acf5c279 --- /dev/null +++ b/actions/manage.php @@ -0,0 +1,105 @@ + + * @copyright Radagast Solutions 2008 + * @link http://radagast.biz/ + * + */ + +// Load RIBA event model +require_once(dirname(dirname(__FILE__)) . "/models/model.php"); + +gatekeeper(); + +$event_action = get_input('event_action',''); +if ($event_action == 'add_event' || $event_action == 'manage_event') { + $result = event_calendar_set_event_from_form(); + if ($result->success) { + if ($event_action == 'manage_event') { + add_to_river('river/object/event_calendar/update','update',$_SESSION['user']->guid,$result->event->guid); + system_message(elgg_echo('event_calendar:manage_event_response')); + } else { + $event_calendar_autopersonal = get_plugin_setting('autopersonal', 'event_calendar'); + if (!$event_calendar_autopersonal || ($event_calendar_autopersonal == 'yes')) { + event_calendar_add_personal_event($result->event->guid,$_SESSION['user']->guid); + } + add_to_river('river/object/event_calendar/create','create',$_SESSION['user']->guid,$result->event->guid); + system_message(elgg_echo('event_calendar:add_event_response')); + } + + forward($result->event->getURL()); + } else { + // redisplay form with error message + register_error(elgg_echo('event_calendar:manage_event_error')); + $group_guid = (int) get_input('group_guid',0); + + if ($result->form_data->event_id) { + $event = get_entity($result->form_data->event_id); + if (!$event) { + register_error(elgg_echo('event_calendar:no_such_event_edit_error')); + forward(); + } else { + set_page_owner($event->container_guid); + if (page_owner_entity() instanceof ElggGroup) { + set_context('groups'); + } + } + + $title = elgg_echo('event_calendar:manage_event_title'); + } else { + $title = elgg_echo('event_calendar:add_event_title'); + if ($group_guid && $group = get_entity($group_guid)) { + // redefine context + set_context('groups'); + set_page_owner($group_guid); + } + } + $body = elgg_view('event_calendar/forms/manage_event', array('event'=>$result->form_data,'event_id'=>$result->form_data->event_id,'group_guid'=>$group_guid)); + + page_draw($title,elgg_view_layout("two_column_left_sidebar", '', elgg_view_title($title) . $body)); + } +} else if ($event_action == 'delete_event') { + $event_id = get_input('event_id',0); + if (($event_id = get_input('event_id',0)) && ($event = get_entity($event_id)) && $event->canEdit()) { + if (get_input('cancel','')) { + system_message(elgg_echo('event_calendar:delete_cancel_response')); + forward($event->getUrl()); + } else { + $container = get_entity($event->container_guid); + $event->delete(); + system_message(elgg_echo('event_calendar:delete_response')); + forward($container->getUrl()); + } + } else { + register_error(elgg_echo('event_calendar:error_delete')); + } +} else if ($event_action == 'add_personal') { + $event_id = get_input('event_id',0); + if (($event_id = get_input('event_id',0)) && ($event = get_entity($event_id))) { + $user_id = $_SESSION['user']->getGUID(); + if (!event_calendar_has_personal_event($event_id,$user_id)) { + if (event_calendar_add_personal_event($event_id,$user_id)) { + system_message(elgg_echo('event_calendar:add_to_my_calendar_response')); + } else { + register_error(elgg_echo('event_calendar:add_to_my_calendar_error')); + } + forward($event->getUrl()); + } + } +} else if ($event_action == 'remove_personal') { + $event_id = get_input('event_id',0); + if (($event_id = get_input('event_id',0)) && ($event = get_entity($event_id))) { + event_calendar_remove_personal_event($event_id,$_SESSION['user']->getGUID()); + system_message(elgg_echo('event_calendar:remove_from_my_calendar_response')); + forward($event->getUrl()); + } +} + +forward(); + +?> \ No newline at end of file diff --git a/actions/remove_from_group.php b/actions/remove_from_group.php new file mode 100644 index 000000000..4a7185245 --- /dev/null +++ b/actions/remove_from_group.php @@ -0,0 +1,8 @@ +getUrl()); +?> \ No newline at end of file diff --git a/actions/request_personal_calendar.php b/actions/request_personal_calendar.php new file mode 100644 index 000000000..4160326a6 --- /dev/null +++ b/actions/request_personal_calendar.php @@ -0,0 +1,18 @@ +getSubtype() == 'event_calendar')) { + if (event_calendar_send_event_request($event,$user_id)) { + system_message(elgg_echo('event_calendar:request_event_response')); + } else { + register_error(elgg_echo('event_calendar:request_event_error')); + } + + forward($event->getUrl()); + + exit; +} + +forward(); diff --git a/actions/toggle_personal_calendar.php b/actions/toggle_personal_calendar.php new file mode 100644 index 000000000..f36b5836f --- /dev/null +++ b/actions/toggle_personal_calendar.php @@ -0,0 +1,30 @@ + \ No newline at end of file diff --git a/datepicker.css b/datepicker.css new file mode 100644 index 000000000..64f486908 --- /dev/null +++ b/datepicker.css @@ -0,0 +1,234 @@ +/* Main Style Sheet for jQuery UI ui-datepicker */ +#ui-datepicker-div, .ui-datepicker-inline { + font-family: Arial,Helvetica,sans-serif; + font-size: 14px; + padding: 0; + margin: 0; + background: #F5F5F5; + width: 185px; +} +#ui-datepicker-div { + display: none; + border: 1px solid #FF9900; + z-index: 10; +} +.ui-datepicker-inline { + float: left; + display: block; + border: 0; +} +.ui-datepicker-rtl { + direction: rtl; +} +.ui-datepicker-dialog { + padding: 5px !important; + border: 4px ridge #83C948 !important; +} +button.ui-datepicker-trigger { + width: 25px; +} +img.ui-datepicker-trigger { + margin: 2px; + vertical-align: middle; +} +.ui-datepicker-prompt { + float: left; + padding: 2px; + background: #F5F5F5; + color: #000; +} +*html .ui-datepicker-prompt { + width: 185px; +} +.ui-datepicker-control, .ui-datepicker-links, .ui-datepicker-header, .ui-datepicker { + clear: both; + float: left; + width: 100%; + color: #FFF; +} +.ui-datepicker-control { + background: #FF9900; + padding: 2px 0px; +} +.ui-datepicker-links { + background: #F5F5F5; + padding: 2px 0px; +} +.ui-datepicker-control, .ui-datepicker-links { + font-weight: bold; + font-size: 80%; + letter-spacing: 1px; +} + +/* KJ change this to avoid weird display change */ +/*.ui-datepicker-links label { + padding: 2px 5px; + color: #888; +}*/ + +.ui-datepicker-links label { + font-weight: bold; + font-size: 100%; + padding: 2px 5px; + letter-spacing: 1px; +} +.ui-datepicker-clear, .ui-datepicker-prev { + float: left; + width: 34%; +} +.ui-datepicker-rtl .ui-datepicker-clear, .ui-datepicker-rtl .ui-datepicker-prev { + float: right; + text-align: right; +} +.ui-datepicker-current { + float: left; + width: 30%; + text-align: center; +} +.ui-datepicker-close, .ui-datepicker-next { + float: right; + width: 34%; + text-align: right; +} +.ui-datepicker-rtl .ui-datepicker-close, .ui-datepicker-rtl .ui-datepicker-next { + float: left; + text-align: left; +} +.ui-datepicker-header { + padding: 1px 0 3px; + background: #3873B6; + text-align: center; + font-weight: bold; + height: 1.3em; + color: #FFFFFF; +} +.ui-datepicker-header select { + background: #3873B6; + color: #FFFFFF; + border: 0px; + font-weight: bold; +} +.ui-datepicker { + background: #CCC; + text-align: center; + font-size: 100%; +} +.ui-datepicker a { + display: block; + width: 100%; +} +.ui-datepicker-title-row { + background: #E3E3E3; + color: #000; +} +.ui-datepicker-title-row .ui-datepicker-week-end-cell { + background: #E3E3E3; +} +.ui-datepicker-days-row { + background: #FFF; + /*color: #666;*/ +} +.ui-datepicker-week-col { + background: #E3E3E3; + color: #000; +} +.ui-datepicker-days-cell { + /*color: #000;*/ + border: 1px solid #DDD; +} +.ui-datepicker-days-cell a { + display: block; +} +.ui-datepicker-week-end-cell { + background: #F5F5F5; +} +.ui-datepicker-unselectable { + color: #888; +} +.ui-datepicker-week-over, .ui-datepicker-week-over .ui-datepicker-week-end-cell { + background: #E3E3E3 !important; +} +.ui-datepicker-days-cell-over, .ui-datepicker-days-cell-over.ui-datepicker-week-end-cell { + background: #FFF !important; + border: 1px solid #777; +} +* html .ui-datepicker-title-row .ui-datepicker-week-end-cell { + background: #E3E3E3 !important; +} +* html .ui-datepicker-week-end-cell { + background: #F5F5F5 !important; + border: 1px solid #DDD !important; +} +* html .ui-datepicker-days-cell-over { + background: #FFF !important; + border: 1px solid #777 !important; +} +* html .ui-datepicker-current-day { + background: #3873B6 !important; + color: #FFFFFF !important; +} +.ui-datepicker-today { + background: #E3E3E3 !important; +} +.ui-datepicker-current-day { + background: #3873B6 !important; + color: #FFFFFF !important; +} + +.ui-datepicker-current-day a { + background: #3873B6 !important; + color: #FFFFFF !important; +} + +.ui-datepicker-status { + background: #F5F5F5; + width: 100%; + font-size: 80%; + text-align: center; +} +#ui-datepicker-div a, .ui-datepicker-inline a { + cursor: pointer; + margin: 0; + padding: 0; + background: none; + color: 000000; +} +.ui-datepicker-inline .ui-datepicker-links a { + padding: 0 5px !important; +} +.ui-datepicker-control a, .ui-datepicker-links a { + padding: 2px 5px !important; + color: #000 !important; +} +.ui-datepicker-title-row a { + color: #000 !important; +} +.ui-datepicker-control a:hover { + background: #FDD !important; + color: #333 !important; +} +.ui-datepicker-links a:hover, .ui-datepicker-title-row a:hover { + background: #FFF !important; + color: #333 !important; +} +.ui-datepicker-multi .ui-datepicker { + border: 1px solid #3873B6; +} +.ui-datepicker-one-month { + float: left; + width: 185px; +} +.ui-datepicker-new-row { + clear: left; +} +.ui-datepicker-cover { + display: none; + display/**/: block; + position: absolute; + z-index: -1; + filter: mask(); + top: -4px; + left: -4px; + width: 193px; + height: 200px; +} diff --git a/delete_confirm.php b/delete_confirm.php new file mode 100644 index 000000000..81bcd9118 --- /dev/null +++ b/delete_confirm.php @@ -0,0 +1,36 @@ + + * @copyright Radagast Solutions 2008 + * @link http://radagast.biz/ + * + */ + +// Load Elgg engine +require_once(dirname(dirname(dirname(__FILE__))) . "/engine/start.php"); + +// Define context +set_context('event_calendar'); + +global $CONFIG; + +$event_id = get_input('event_id',0); +if ($event_id && ($event = get_entity($event_id))) { + set_page_owner($event->container_guid); + if (page_owner_entity() instanceOf ElggGroup) { + // Re-define context + set_context('groups'); + } + $body = elgg_view('event_calendar/forms/delete_confirm',array('event_id'=>$event_id,'title'=>$event->title)); + $title = elgg_echo('event_calendar:delete_confirm_title'); + page_draw($title,elgg_view_layout("two_column_left_sidebar", '', elgg_view_title($title) . $body)); +} else { + register_error('event_calendar:error_nosuchevent'); + forward(); +} +?> \ No newline at end of file diff --git a/display_event_users.php b/display_event_users.php new file mode 100644 index 000000000..c5d06cd8f --- /dev/null +++ b/display_event_users.php @@ -0,0 +1,42 @@ + + * @copyright Radagast Solutions 2008 + * @link http://radagast.biz/ + * + */ + +// Load Elgg engine +require_once(dirname(dirname(dirname(__FILE__))) . "/engine/start.php"); + +// Load event calendar model +require_once(dirname(__FILE__) . "/models/model.php"); + +set_context('event_calendar'); +$limit = get_input('limit', 12); +$offset = get_input('offset', 0); +if (($event_id = get_input('event_id', 0)) && $event = get_entity($event_id)) { + $event_container = get_entity($event->container_guid); + if ($event_container instanceOf ElggGroup) { + // Re-define context + set_context('groups'); + set_page_owner($event_container->getGUID()); + } + set_input('search_viewtype','gallery'); + $count = event_calendar_get_users_for_event($event_id,$limit,$offset,true); + $users = event_calendar_get_users_for_event($event_id,$limit,$offset,false); + $body = event_calendar_view_entity_list($users, $count, $offset, $limit, true, false); + + $body .= elgg_view('event_calendar/personal_toggle_js'); + + $title = sprintf(elgg_echo('event_calendar:users_for_event_title'),$event->title); + page_draw($title,elgg_view_layout("two_column_left_sidebar", '', elgg_view_title($title) . $body)); +} else { + register_error('event_calendar:error_nosuchevent'); + forward(); +} +?> \ No newline at end of file diff --git a/flora.datepicker.css b/flora.datepicker.css new file mode 100644 index 000000000..20c3dabb3 --- /dev/null +++ b/flora.datepicker.css @@ -0,0 +1,234 @@ +/* Main Flora Style Sheet for jQuery UI ui-datepicker */ +#ui-datepicker-div, .ui-datepicker-inline { + font-family: Arial,Helvetica,sans-serif; + font-size: 14px; + padding: 0; + margin: 0; + background: #E0F4D7; + width: 185px; +} +#ui-datepicker-div { + display: none; + border: 1px solid #FF9900; + z-index: 10; +} +.ui-datepicker-inline { + float: left; + display: block; + border: 0; +} +.ui-datepicker-rtl { + direction: rtl; +} +.ui-datepicker-dialog { + padding: 5px !important; + border: 4px ridge #83C948 !important; +} +button.ui-datepicker-trigger { + width: 25px; +} +img.ui-datepicker-trigger { + margin: 2px; + vertical-align: middle; +} +.ui-datepicker-prompt { + float: left; + padding: 2px; + background: #E0F4D7; + color: #000; +} +*html .ui-datepicker-prompt { + width: 185px; +} +.ui-datepicker-control, .ui-datepicker-links, .ui-datepicker-header, .ui-datepicker { + clear: both; + float: left; + width: 100%; + color: #FFF; +} +.ui-datepicker-control { + background: #FF9900; + padding: 2px 0px; +} +.ui-datepicker-links { + background: #E0F4D7; + padding: 2px 0px; +} +.ui-datepicker-control, .ui-datepicker-links { + font-weight: bold; + font-size: 80%; + letter-spacing: 1px; +} + +/* KJ change this to avoid weird display change */ +/*.ui-datepicker-links label { + padding: 2px 5px; + color: #888; +}*/ + +.ui-datepicker-links label { + font-weight: bold; + font-size: 100%; + padding: 2px 5px; + letter-spacing: 1px; +} +.ui-datepicker-clear, .ui-datepicker-prev { + float: left; + width: 34%; +} +.ui-datepicker-rtl .ui-datepicker-clear, .ui-datepicker-rtl .ui-datepicker-prev { + float: right; + text-align: right; +} +.ui-datepicker-current { + float: left; + width: 30%; + text-align: center; +} +.ui-datepicker-close, .ui-datepicker-next { + float: right; + width: 34%; + text-align: right; +} +.ui-datepicker-rtl .ui-datepicker-close, .ui-datepicker-rtl .ui-datepicker-next { + float: left; + text-align: left; +} +.ui-datepicker-header { + padding: 1px 0 3px; + background: #478787; + text-align: center; + font-weight: bold; + height: 1.3em; + color: #FFFFFF; +} +.ui-datepicker-header select { + background: #478787; + color: #FFFFFF; + border: 0px; + font-weight: bold; +} +.ui-datepicker { + background: #CCC; + text-align: center; + font-size: 100%; +} +.ui-datepicker a { + display: block; + width: 100%; +} +.ui-datepicker-title-row { + background: #DAE5DC; + color: #000; +} +.ui-datepicker-title-row .ui-datepicker-week-end-cell { + background: #DAE5DC; +} +.ui-datepicker-days-row { + background: #FFF; + /*color: #666;*/ +} +.ui-datepicker-week-col { + background: #DAE5DC; + color: #000; +} +.ui-datepicker-days-cell { + /*color: #000;*/ + border: 1px solid #DDD; +} +.ui-datepicker-days-cell a { + display: block; +} +.ui-datepicker-week-end-cell { + background: #E0F4D7; +} +.ui-datepicker-unselectable { + color: #888; +} +.ui-datepicker-week-over, .ui-datepicker-week-over .ui-datepicker-week-end-cell { + background: #DAE5DC !important; +} +.ui-datepicker-days-cell-over, .ui-datepicker-days-cell-over.ui-datepicker-week-end-cell { + background: #FFF !important; + border: 1px solid #777; +} +* html .ui-datepicker-title-row .ui-datepicker-week-end-cell { + background: #DAE5DC !important; +} +* html .ui-datepicker-week-end-cell { + background: #E0F4D7 !important; + border: 1px solid #DDD !important; +} +* html .ui-datepicker-days-cell-over { + background: #FFF !important; + border: 1px solid #777 !important; +} +* html .ui-datepicker-current-day { + background: #478787 !important; + color: #FFFFFF !important; +} +.ui-datepicker-today { + background: #DAE5DC !important; +} +.ui-datepicker-current-day { + background: #478787 !important; + color: #FFFFFF !important; +} + +.ui-datepicker-current-day a { + background: #478787 !important; + color: #FFFFFF !important; +} + +.ui-datepicker-status { + background: #E0F4D7; + width: 100%; + font-size: 80%; + text-align: center; +} +#ui-datepicker-div a, .ui-datepicker-inline a { + cursor: pointer; + margin: 0; + padding: 0; + background: none; + color: 000000; +} +.ui-datepicker-inline .ui-datepicker-links a { + padding: 0 5px !important; +} +.ui-datepicker-control a, .ui-datepicker-links a { + padding: 2px 5px !important; + color: #000 !important; +} +.ui-datepicker-title-row a { + color: #000 !important; +} +.ui-datepicker-control a:hover { + background: #FDD !important; + color: #333 !important; +} +.ui-datepicker-links a:hover, .ui-datepicker-title-row a:hover { + background: #FFF !important; + color: #333 !important; +} +.ui-datepicker-multi .ui-datepicker { + border: 1px solid #478787; +} +.ui-datepicker-one-month { + float: left; + width: 185px; +} +.ui-datepicker-new-row { + clear: left; +} +.ui-datepicker-cover { + display: none; + display/**/: block; + position: absolute; + z-index: -1; + filter: mask(); + top: -4px; + left: -4px; + width: 193px; + height: 200px; +} diff --git a/images/calendar.gif b/images/calendar.gif new file mode 100644 index 000000000..d0abaa7c0 Binary files /dev/null and b/images/calendar.gif differ diff --git a/images/event_icon.gif b/images/event_icon.gif new file mode 100644 index 000000000..a0ac7da52 Binary files /dev/null and b/images/event_icon.gif differ diff --git a/images/event_icon_old.gif b/images/event_icon_old.gif new file mode 100644 index 000000000..154d5af09 Binary files /dev/null and b/images/event_icon_old.gif differ diff --git a/images/river_icon_event.gif b/images/river_icon_event.gif new file mode 100644 index 000000000..d02e5395a Binary files /dev/null and b/images/river_icon_event.gif differ diff --git a/languages/en.php b/languages/en.php new file mode 100644 index 000000000..785b7392c --- /dev/null +++ b/languages/en.php @@ -0,0 +1,210 @@ + "Event calendar", + 'tag_names:event_tags' => "Tags", + 'event_calendar:optional' => "Optional.", + 'event_calendar:required' => "Required.", + 'event_calendar:new_event' => "New event", + 'event_calendar:no_such_event_edit_error' => "Error: There is no such event or you do not have permission to edit it.", + 'event_calendar:add_event_title' => "Add event", + 'event_calendar:manage_event_title' => "Edit event", + 'event_calendar:manage_event_description' => "Enter the details of your event below. " + ."The title, venue, and start date are required. " + ."You can click on the calendar icons to set the start and end dates.", + 'event_calendar:title_label' => "Title", + 'event_calendar:title_description' => "One to four words", + 'event_calendar:brief_description_label' => "Brief description", + 'event_calendar:brief_description_description' => "A short phrase.", + 'event_calendar:venue_label' => "Venue", + 'event_calendar:venue_description' => "Where will this event be held?", + 'event_calendar:start_date_label' => "Start date", + 'event_calendar:start_date_description' => "When will this event start?", + 'event_calendar:end_date_label' => "End date", + 'event_calendar:end_date_description' => "When will this event end? The start date will be " + ."used as the end date if this is not supplied.", + 'event_calendar:start_time_label' => "Start time", + 'event_calendar:start_time_description' => "What time will this event start?", + 'event_calendar:end_time_label' => "End time", + 'event_calendar:end_time_description' => "What time will this event end?", + 'event_calendar:fees_label' => "Fees", + 'event_calendar:fees_description' => "The cost of this event, if any.", + 'event_calendar:contact_label' => "Contact", + 'event_calendar:contact_description' => "The person to contact for more information, " + ."preferably with a telephone number or email address.", + 'event_calendar:organiser_label' => "Organiser", + 'event_calendar:organiser_description' => "The individual or organisation responsible for this event.", + 'event_calendar:event_tags_label' => "Tags", + 'event_calendar:event_tags_description' => "A comma-separated list of tags relevant to this event.", + 'event_calendar:long_description_label' => "Long description", + 'event_calendar:long_description_description' => "Can be a paragraph or more as required.", + 'event_calendar:manage_event_response' => "Your event has been saved.", + 'event_calendar:add_event_response' => "Your event has been added.", + 'event_calendar:manage_event_error' => "Error: There was an error in saving your event. " + ."Please make sure that you have provided the required fields.", + 'event_calendar:error_nosuchevent' => "Error: there is no such event.", + 'event_calendar:show_events_title' => "Event calendar", + 'event_calendar:day_label' => "Day", + 'event_calendar:week_label' => "Week", + 'event_calendar:month_label' => "Month", + 'event_calendar:group' => "Group calendar", + 'event_calendar:new' => "Add event", + 'event_calendar:submit' => "Submit", + 'event_calendar:cancel' => "Cancel", + 'event_calendar:widget_title' => "Event calendar", + 'event_calendar:widget:description' => "Displays your events.", + 'event_calendar:num_display' => "Number of events to display", + 'event_calendar:groupprofile' => "Upcoming events", + 'event_calendar:view_calendar' => "view calendar", + 'event_calendar:when_label' => "When", + 'event_calendar:site_wide_link' => "View all events", + 'event_calendar:view_link' => "View this event", + 'event_calendar:edit_link' => "Edit this event", + 'event_calendar:delete_link' => "Delete this event", + 'event_calendar:delete_confirm_title' => "Confirm event deletion", + 'event_calendar:delete_confirm_description' => "Are you sure that you want to delete this event (\"%s\")? This action cannot be undone.", + 'event_calendar:delete_response' => "This event has been deleted.", + 'event_calendar:error_delete' => "This event does not exist or you do not have the right to delete it.", + 'event_calendar:delete_cancel_response' => "Event delete cancelled.", + 'event_calendar:add_to_my_calendar' => "Add to my calendar", + 'event_calendar:remove_from_my_calendar' => "Remove from my calendar", + 'event_calendar:add_to_my_calendar_response' => "This event has been added to your personal calendar.", + 'event_calendar:add_to_my_calendar_error' => "This event could not added to your personal calendar. " + ."(Perhaps the event is full or is scheduled at the same time as another event in your personal calendar?)", + 'event_calendar:remove_from_my_calendar_response' => "This event has been removed from your personal calendar.", + 'event_calendar:add_to_the_calendar' => "Add to calendar", + 'event_calendar:remove_from_the_calendar' => "Remove from calendar", + 'event_calendar:add_to_the_calendar_response' => "Event added to this person's calendar.", + 'event_calendar:add_to_the_calendar_error' => "This event could not added to this person's calendar. " + ."(Perhaps the event is full or is scheduled at the same time as another event in this person's calendar?)", + 'event_calendar:remove_from_the_calendar_response' => "Event removed from this person's calendar.", + + 'event_calendar:users_for_event_title' => "People interested in event \"%s\"", + 'event_calendar:personal_event_calendars_link' => "Personal event calendars (%s)", + 'event_calendar:settings:group_profile_display:title' => "Group calendar profile display (if group calendars are enabled)", + 'event_calendar:settings:group_profile_display_option:left' => "left column", + 'event_calendar:settings:group_profile_display_option:right' => "right column", + 'event_calendar:settings:group_profile_display_option:none' => "none", + 'event_calendar:settings:times:title' => "Add time as well as date to events", + 'event_calendar:settings:autopersonal:title' => "Automatically add events a user creates to his/her personal calendar.", + 'event_calendar:settings:autogroup:title' => "Automatically add group events for all members to their personal calendars.", + 'event_calendar:settings:agenda_view:title' => "Use Agenda view", + 'event_calendar:settings:venue_view:title' => "Display venue in summary view (event listings)", + 'event_calendar:settings:yes' => "yes", + 'event_calendar:settings:no' => "no", + 'event_calendar:settings:site_calendar:title' => "Site calendar", + 'event_calendar:settings:site_calendar:admin' => "yes, only admins can post events", + 'event_calendar:settings:site_calendar:loggedin' => "yes, any logged-in user can post an event", + 'event_calendar:settings:group_calendar:title' => "Group calendars", + 'event_calendar:settings:group_calendar:admin' => "yes, only admins and group owners can post events", + 'event_calendar:settings:group_calendar:members' => "yes, any group member can post an event", + 'event_calendar:settings:group_default:title' => "New groups should by default have a group calendar (if group calendars are enabled)", + 'event_calendar:settings:group_default:no' => "no (but admins or group owners can turn a group calendar on if desired)", + 'event_calendar:settings:group_default:yes' => "yes (but admins or group owners can turn a group calendar off if desired)", + 'event_calendar:settings:group_always_display:title' => "If group calendar is enabled, always display it (even if empty)", + 'event_calendar:settings:region_display:title' => "Add region field to events", + 'event_calendar:settings:region_list:title' => "List of regions (one per line)", + 'event_calendar:region_label' => "Region", + 'event_calendar:region_description' => "Select the region that this event will be held in.", + 'event_calendar:settings:type_display:title' => "Add event type to events", + 'event_calendar:settings:type_list:title' => "List of event types (one per line)", + 'event_calendar:type_label' => "Type of event", + 'event_calendar:type_description' => "Select the type of event.", + 'event_calendar:all' => "All", + 'event_calendar:region_filter_by_label' => "Filter by region:", + 'event_calendar:settings:first_date:title' => "First allowable date (in YYYY-MM-DD format)", + 'event_calendar:settings:last_date:title' => "Last allowable date (in YYYY-MM-DD format)", + 'event_calendar:enable_event_calendar' => "Enable group event calendar", + 'event_calendar:no_events_found' => "No events found.", + 'event_calendar:mine' => "Mine", + 'event_calendar:feature' => "Feature", + 'event_calendar:unfeature' => "Unfeature", + 'event_calendar:agenda:column:time' => "Time", + 'event_calendar:agenda:column:session' => "Session", + 'event_calendar:agenda:column:venue' => "Location", + 'event_calendar:upcoming_events_title' => "Upcoming events", + 'event_calendar:settings:paged' => "paged", + 'event_calendar:settings:month' => "by month", + 'event_calendar:settings:listing_format:title' => "Event listing format", + 'event_calendar:paged:column:date' => "Date", + 'event_calendar:paged:column:time' => "Time", + 'event_calendar:paged:column:event' => "Event", + 'event_calendar:paged:column:venue' => "Location", + 'event_calendar:paged:column:calendar' => "Calendar", + 'event_calendar:settings:spots_display:title' => "Add a spots field for each " + ."event to allow you to limit the number of people who can add the event to their calendar", + 'event_calendar:settings:no_collisions:title' => "Collision detection: prevent people from adding two events at the same time to their personal calendar", + 'event_calendar:settings:collision_length:title' => "How long (in seconds) should an event be assumed to last if no end date or time is specified " + ."(used for collision detection). Defaults to 3600 seconds = 1 hour.", + 'event_calendar:spots_label' => "Spots", + 'event_calendar:spots_description' => "How many people are allowed to add this event to their personal calendars?", + 'event_calendar:open' => "Open", + 'event_calendar:settings:add_users:title' => "Allow event creators to add their event to other personal calendars (requires autocomplete plugin).", + 'event_calendar:add_user_label' => "Add users", + 'event_calendar:add_user_description' => "Add this event to personal calendars by typing two or more characters in the above text autocomplete field to select a user. " + ."You can add multiple users by clicking the \"+\" link. (You must submit this form to actually add the event to the calendars.)", + 'event_calendar:settings:add_users_notify:title' => "Notify users who have had an event added to their personal calendar by an admin or event creator.", + 'event_calendar:add_users_notify:subject' => "A new event has been added to your personal calendar", + 'event_calendar:add_users_notify:body' => "%s,\n\nThe \"%s\" event has been added to your calendar.\n\nYou can view it here: \n\n%s\n", + + 'event_calendar:settings:region_list_handles:title' => "The region strings above are string handles. Use the Elgg translation system to resolve them.", + 'event_calendar:settings:type_list_handles:title' => "The type strings above are string handles. Use the Elgg translation system to resolve them.", + + 'event_calendar:settings:personal_manage:title' => "Allow users to add/remove any event they can see to/from their personal calendars. (If no, only admins and the event creator can add/remove them).", + + 'event_calendar:strapline' => "Posted %s by %s", + + 'event_calendar:request_event_response' => "Your request to be added to this event has been sent.", + 'event_calendar:request_event_error' => "Error: Could not send your request to be added to this event.", + 'event_calendar:request_subject' => "You have received an event request", + 'event_calendar:request_message' => " %s has asked to have the event \"%s\", here: + + %s + + added to his/her personal calendar. + + You can manage calendar requests here: + + %s", + + 'event_calendar:review_requests_error' => "This event either does not exist or you do not have the authority to approve requests for it.", + 'event_calendar:review_requests_request_none' => "There are no requests to review for this event.", + 'event_calendar:request:remove:check' => 'Are you sure you want to reject this request?', + 'event_calendar:requestkilled' => 'The request has been removed.', + 'event_calendar:request_approved' => "This request has been approved.", + 'event_calendar:review_requests_title' => 'Review requests', + 'event_calendar:make_request_title' => 'Request this event', + + 'event_calendar:settings:hide_access:title' => "Hide event access drop down", + 'event_calendar:settings:default_access:title' => "If the event access is hidden, what should it default to?", + 'event_calendar:settings:hide_end:title' => "Hide end time and date fields", + 'event_calendar:settings:more_required:title' => "Make all visible fields except long description required.", + + 'event_calendar:add_to_group:remove_group_title' => "Remove this event from group", + 'event_calendar:add_to_group:remove_group_button' => "Remove from group", + 'event_calendar:remove_from_group:success' => "Event removed from group calendar", + 'event_calendar:add_to_group:add_group_title' => "Add this event to group", + 'event_calendar:add_to_group:add_group_button' => "Add to group", + 'event_calendar:add_to_group:success' => "Event added to group calendar", + 'event_calendar:settings:add_to_group_calendar:title' => "Allow group admins to add any existing event to a group calendar", + + /** + * Event calendar river + **/ + + //generic terms to use + 'event_calendar:river:created' => "%s added", + 'event_calendar:river:updated' => "%s updated", + 'event_calendar:river:annotated1' => "%s added", + 'event_calendar:river:annotated2' => "to his/her personal calendar.", + + //these get inserted into the river links to take the user to the entity + 'event_calendar:river:create' => "a new event titled", + 'event_calendar:river:the_event' => "an event titled", + + ); + + add_translation("en",$english); + +?> \ No newline at end of file diff --git a/languages/es.php b/languages/es.php new file mode 100644 index 000000000..1eefff2a3 --- /dev/null +++ b/languages/es.php @@ -0,0 +1,124 @@ + 'Calendario de eventos', + 'event_calendar:new_event' => 'Nuevo evento', + 'event_calendar:no_such_event_edit_error' => 'Error: No existe tal evento o usted no tiene autorización para editarlo.', + 'event_calendar:add_event_title' => 'Agregar evento', + 'event_calendar:manage_event_title' => 'Editar evento', + 'event_calendar:manage_event_description' => 'Introduzca los detalles de su evento a continuación. El título, lugar y fecha de inicio se requieren. Puede hacer clic en los íconos del calendario para establecer las fechas de inicio y fin.', + 'event_calendar:title_label' => 'Título', + 'event_calendar:title_description' => 'Una a cuatro palabras', + 'event_calendar:brief_description_label' => 'Descripción breve', + 'event_calendar:brief_description_description' => 'Una frase corta.', + 'event_calendar:venue_label' => 'Sede', + 'event_calendar:venue_description' => '¿Dónde se llevará a cabo este evento?', + 'event_calendar:start_date_label' => 'Fecha de inicio', + 'event_calendar:start_date_description' => '¿Cuándo comenzará este evento?', + 'event_calendar:end_date_label' => 'Fecha final', + 'event_calendar:end_date_description' => '¿Cuándo terminará este evento? La fecha de inicio será usada como la fecha de finalización si no se suministra esta información.', + 'event_calendar:start_time_label' => 'Hora de inicio', + 'event_calendar:start_time_description' => '¿A qué hora comenzará este evento?', + 'event_calendar:end_time_label' => 'Hora de finalización', + 'event_calendar:end_time_description' => '¿A qué hora terminará este evento?', + 'event_calendar:fees_label' => 'Tarifas', + 'event_calendar:fees_description' => 'El costo de este evento, si hay caso.', + 'event_calendar:contact_label' => 'Contacto', + 'event_calendar:contact_description' => 'Persona que será el contacto para brindar mayor información, preferiblemente con número de teléfono o dirección de correo electrónico.', + 'event_calendar:organiser_label' => 'Origanizador', + 'event_calendar:organiser_description' => 'La persona u organización responsable por este evento.', + 'event_calendar:event_tags_label' => 'Etiquetas', + 'event_calendar:event_tags_description' => 'Lista de etiquetas relativas al eventos, separadas por una coma.', + 'event_calendar:long_description_label' => 'Descripción larga', + 'event_calendar:long_description_description' => 'Puede ser un parágrafo o más, según lo requerido.', + 'event_calendar:manage_event_response' => 'Su evento ha sido guardado.', + 'event_calendar:add_event_response' => 'Su evento ha sido agregado.', + 'event_calendar:manage_event_error' => 'Error: Hubo un error al guardar su evento. Por favor asegúrese que todos los campos requeridos hayan sido proporcionados.', + 'event_calendar:error_nosuchevent' => 'Error: no existe tal evento.', + 'event_calendar:show_events_title' => 'Calendario del evento', + 'event_calendar:day_label' => 'Día', + 'event_calendar:week_label' => 'Semana', + 'event_calendar:month_label' => 'Mes', + 'event_calendar:group' => 'Calendario de grupo', + 'event_calendar:new' => 'Agregar evento', + 'event_calendar:submit' => 'Enviar', + 'event_calendar:cancel' => 'Cancelar', + 'event_calendar:widget_title' => 'Calendario del evento', + 'event_calendar:widget:description' => 'Exponer sus eventos.', + 'event_calendar:num_display' => 'Número de eventos expuestos', + 'event_calendar:groupprofile' => 'Eventos venideros', + 'event_calendar:view_calendar' => 'ver calendario', + 'event_calendar:when_label' => 'Cuando', + 'event_calendar:site_wide_link' => 'Ver todos los eventos', + 'event_calendar:view_link' => 'Ver este evento', + 'event_calendar:edit_link' => 'Editar este evento', + 'event_calendar:delete_link' => 'Eliminar este evento', + 'event_calendar:delete_confirm_title' => 'Confirmar eliminación de este evento', + 'event_calendar:delete_confirm_description' => '¿Está seguro que desea eliminar este evento ("%s")? Esta acción es irreversible.', + 'event_calendar:delete_response' => 'Este evento ha sido eliminado.', + 'event_calendar:error_delete' => 'Este evento no existe o usted no tiene el derecho de eliminarlo.', + 'event_calendar:delete_cancel_response' => 'Eliminación del evento cancelada.', + 'event_calendar:add_to_my_calendar' => 'Agregar a mi calendario', + 'event_calendar:remove_from_my_calendar' => 'Retirar de mi calendario', + 'event_calendar:add_to_my_calendar_response' => 'Este evento ha sido agregado a su calendario personal.', + 'event_calendar:remove_from_my_calendar_response' => 'Este evento ha sido retirado de su calendario personal.', + 'event_calendar:users_for_event_title' => 'Personas interesadas en el evento "%s"', + 'event_calendar:personal_event_calendars_link' => 'Eventos personales del calendario (%s)', + 'event_calendar:settings:group_profile_display:title' => 'Perfil de visualización del calendario de grupo (si están habilitados los calendarios de grupo)', + 'event_calendar:settings:group_profile_display_option:left' => 'Columna de la izquierda', + 'event_calendar:settings:group_profile_display_option:right' => 'Columna de la derecha', + 'event_calendar:settings:group_profile_display_option:none' => 'Ninguno', + 'event_calendar:settings:times:title' => 'Agregar hora y fecha a los eventos', + 'event_calendar:settings:autopersonal:title' => 'Agregar automáticamente a su calendario personal eventos que un usuario cree.', + 'event_calendar:settings:autogroup:title' => 'Agregar automáticamente los eventos de grupo al calendario personal de sus miembros.', + 'event_calendar:settings:agenda_view:title' => 'Usar Vista previa de Agenda', + 'event_calendar:settings:venue_view:title' => 'Mostrar sede en vista rápida (listados de eventos)', + 'event_calendar:settings:yes' => 'sí', + 'event_calendar:settings:no' => 'no', + 'event_calendar:settings:site_calendar:title' => 'Sitio del calendario', + 'event_calendar:settings:site_calendar:admin' => 'sí, solamente si administradores pueden anunciar eventos', + 'event_calendar:settings:site_calendar:loggedin' => 'sí, cualquier usuario registrado puede anunciar un evento', + 'event_calendar:settings:group_calendar:title' => 'Calendarios de grupo', + 'event_calendar:settings:group_calendar:admin' => 'sí, solamente administradores y propietarios de grupos pueden anunciar eventos', + 'event_calendar:settings:group_calendar:members' => 'sí, cualquier miembro de un grupo puede anunciar un evento', + 'event_calendar:settings:group_default:title' => 'Grupos nuevos deben tener un calendario de grupo por defecto (si los calendarios de grupo están activados)', + 'event_calendar:settings:group_default:no' => 'no (sin embargo administradores y propietarios de grupos pueden desactivar un calendario de grupo si lo desean)', + 'event_calendar:settings:group_default:yes' => 'sí (sin embargo administradores y propietarios de grupos pueden desactivar un calendario de grupo si lo desean)', + 'event_calendar:settings:group_always_display:title' => 'Si un calendario de grupo está activo, siempre exponerlo (aun si está vacío)', + 'event_calendar:settings:region_display:title' => 'Agregar campo región a eventos', + 'event_calendar:settings:region_list:title' => 'Lista de regiones (una por línea)', + 'event_calendar:region_label' => 'Región', + 'event_calendar:region_description' => 'Selecciona la región en la cual el evento se llevará a cabo', + 'event_calendar:settings:type_display:title' => 'Agregar tipo de eventos a eventos', + 'event_calendar:settings:type_list:title' => 'Lista de tipos de eventos (uno por línea)', + 'event_calendar:type_label' => 'Tipo de eventos', + 'event_calendar:type_description' => 'Seleccione un tipo de evento.', + 'event_calendar:all' => 'Todos', + 'event_calendar:region_filter_by_label' => 'Filtro por región:', + 'event_calendar:settings:first_date:title' => 'Primera fecha permitida (en el formato AAAA - MM- DD)', + 'event_calendar:settings:last_date:title' => 'Última fecha permitida (en el formato AAAA - MM- DD)', + 'event_calendar:enable_event_calendar' => 'Permitir clanedario de eventos de grupo', + 'event_calendar:no_events_found' => 'No se encontraron eventos.', + 'event_calendar:mine' => 'Mío', + 'event_calendar:feature' => 'Presentar', + 'event_calendar:unfeature' => 'No presentar', + 'event_calendar:agenda:column:time' => 'Hora', + 'event_calendar:agenda:column:session' => 'Sesión', + 'event_calendar:agenda:column:venue' => 'Lugar', + 'event_calendar:upcoming_events_title' => 'Eventor venideros', + 'event_calendar:settings:paged' => 'Paginado', + 'event_calendar:settings:month' => 'Por mes', + 'event_calendar:settings:listing_format:title' => 'Formato del listado de eventos', + 'event_calendar:paged:column:date' => 'Fecha', + 'event_calendar:paged:column:time' => 'Hora', + 'event_calendar:paged:column:event' => 'Evento', + 'event_calendar:paged:column:venue' => 'Lugar', + 'event_calendar:paged:column:calendar' => 'Calendario', + 'event_calendar:river:created' => '%s agregado', + 'event_calendar:river:updated' => '%s actualizado', + 'event_calendar:river:annotated1' => '%s agregado', + 'event_calendar:river:annotated2' => 'a su calendario personal.', + 'event_calendar:river:create' => 'un nuevo evento titulado', + 'event_calendar:river:the_event' => 'un evento titulado', +); +add_translation("es", $language); +?> \ No newline at end of file diff --git a/languages/fr.php b/languages/fr.php new file mode 100644 index 000000000..876a53ecb --- /dev/null +++ b/languages/fr.php @@ -0,0 +1,125 @@ + 'Entrez les détails de votre événement ci-dessous. Le titre, le lieu et la date de début sont obligatoires. Vous pouvez cliquer sur les icônes du calendrier pour indiquer les dates de début et de fin.', + 'event_calendar:start_time_label' => 'Horaire de départ', + 'event_calendar:start_time_description' => 'À quelle heure cet événement commence?', + 'event_calendar:end_time_label' => 'Horaire de fin', + 'event_calendar:end_time_description' => 'À quelle heure se termine cet événement?', + 'event_calendar:event_tags_label' => 'Balises', + 'event_calendar:event_tags_description' => 'Optionnel. Une liste de balises séparées par des virgules.', + 'event_calendar:error_nosuchevent' => 'Erreur: il n\'y a pas de tel événement.', + 'event_calendar:settings:times:title' => 'Ajouter du temps et la date aux événements', + 'event_calendar:settings:autogroup:title' => 'Ajouter automatiquement des événements de groupe à tous les membres dans leurs agendas personnels.', + 'event_calendar:settings:agenda_view:title' => 'Utilisez la vue Agenda', + 'event_calendar:settings:venue_view:title' => 'Afficher le lieu en vue sommaire (listings des événements)', + 'event_calendar:settings:group_always_display:title' => 'Si un calendrier de groupe est activé, toujours l\'afficher (même vides)', + 'event_calendar:settings:region_display:title' => 'Ajouter un champ région aux événements', + 'event_calendar:settings:region_list:title' => 'Liste des rListe des régions (un par ligne) + (une seule par ligne)', + 'event_calendar:region_label' => 'Régions', + 'event_calendar:region_description' => 'Sélectionnez la région dans laquelle cet événement aura lieu', + 'event_calendar:settings:type_display:title' => 'Ajouter le type d\'événement aux événements', + 'event_calendar:settings:type_list:title' => 'Liste des types d\'événement (un seul par ligne)', + 'event_calendar:type_label' => 'Type d\'événement', + 'event_calendar:type_description' => 'Sélectionnez le type d\'événement.', + 'event_calendar:all' => 'Tous', + 'event_calendar:region_filter_by_label' => 'Filtrer par région:', + 'event_calendar:settings:first_date:title' => 'Première date d\'entrée admissible (au format AAAA-MM-JJ)', + 'event_calendar:settings:last_date:title' => 'Dernière date admissible (au format AAAA-MM-JJ)', + 'event_calendar:mine' => 'Le mien', + 'event_calendar:feature' => 'Mise en vedette', + 'event_calendar:unfeature' => 'Enlever la mise en vedette', + 'event_calendar:agenda:column:time' => 'Heure', + 'event_calendar:agenda:column:session' => 'Session', + 'event_calendar:agenda:column:venue' => 'Lieu', + 'event_calendar:upcoming_events_title' => 'Événements à venir', + 'event_calendar:settings:paged' => 'Pagé', + 'event_calendar:settings:month' => 'par mois', + 'event_calendar:settings:listing_format:title' => 'Format des listes d\'événements', + 'event_calendar:paged:column:date' => 'Date', + 'event_calendar:paged:column:time' => 'Heure', + 'event_calendar:paged:column:event' => 'Evénement', + 'event_calendar:paged:column:venue' => 'Lieu', + 'event_calendar:paged:column:calendar' => 'Calendrier', + 'item:object:event_calendar' => 'Agenda', + 'event_calendar:new_event' => 'Nouvel événement', + 'event_calendar:no_such_event_edit_error' => 'Erreur: Il n\'y a pas de tel événement, ou vous n\'avez pas la permission de le modifier.', + 'event_calendar:add_event_title' => 'Ajouter un événement', + 'event_calendar:manage_event_title' => 'Modifier un événement', + 'event_calendar:title_label' => 'Titre', + 'event_calendar:title_description' => 'Obligatoire. Un à quatre mots', + 'event_calendar:brief_description_label' => 'Courte description', + 'event_calendar:brief_description_description' => 'Optionnel. Une phrase courte.', + 'event_calendar:venue_label' => 'Lieu', + 'event_calendar:venue_description' => 'Obligatoire. Où se tiendra l\'événement?', + 'event_calendar:start_date_label' => 'Date de départ', + 'event_calendar:start_date_description' => 'Obligatoire. A quelle date cet événement démarera?', + 'event_calendar:end_date_label' => 'Date de fin de l\'événement', + 'event_calendar:end_date_description' => 'Optionnel. Quand c\'est événement s\'achèvera-t-il? La date de départ sera utilisée comme date de fin si ce champ n\'est pas rempli.', + 'event_calendar:fees_label' => 'Prix d\'entrée', + 'event_calendar:fees_description' => 'Optionnel. Le côut de l\'événement.', + 'event_calendar:contact_label' => 'Contact', + 'event_calendar:contact_description' => 'Optionnel. La personne à contacter pour avoir plus de renseignements, préférablement avec un numéro de téléphone ou une adresse emailpreferably with a telephone number or email address.', + 'event_calendar:organiser_label' => 'Organisateur', + 'event_calendar:organiser_description' => 'Optionnel. La personne ou l\'organisation responsable de l\'événement.', + 'event_calendar:long_description_label' => 'Description longue', + 'event_calendar:long_description_description' => 'Optionnel. Peut être un paragraphe ou plus si nécessaire.', + 'event_calendar:manage_event_response' => 'Votre événement a été sauvegardé.', + 'event_calendar:add_event_response' => 'Votre événement a été ajouté.', + 'event_calendar:manage_event_error' => 'Erreur: Une erreur s\'est produite lors de l\'enregistrement de votre événement. Assurez-vous que les champs spécifiés ont bien été remplis.', + 'event_calendar:show_events_title' => 'Agenda des événements', + 'event_calendar:day_label' => 'Jour', + 'event_calendar:week_label' => 'Semaine', + 'event_calendar:month_label' => 'Mois', + 'event_calendar:group' => 'Agenda de groupe', + 'event_calendar:new' => 'Ajouter un événement', + 'event_calendar:submit' => 'Ok', + 'event_calendar:cancel' => 'Annuler', + 'event_calendar:widget_title' => 'Agenda des événements', + 'event_calendar:widget:description' => 'Afficher vos événements.', + 'event_calendar:num_display' => 'Nombre d\'événement à afficher', + 'event_calendar:groupprofile' => 'Les prochains événements', + 'event_calendar:view_calendar' => 'Voir l\'agenda', + 'event_calendar:when_label' => 'Quand', + 'event_calendar:site_wide_link' => 'Voir tous les événements', + 'event_calendar:view_link' => 'Voir cet événement', + 'event_calendar:edit_link' => 'Modifier cet événement', + 'event_calendar:delete_link' => 'Supprimer cet événement', + 'event_calendar:delete_confirm_title' => 'Confirmer la suppression de l\'événement', + 'event_calendar:delete_confirm_description' => 'Etes-vous sur de vouloir supprimer cet événement ("%s")? Cette action est irréversible.', + 'event_calendar:delete_response' => 'Cet événement a été supprimé.', + 'event_calendar:error_delete' => 'Cet événement n\'existe pas ou vous n\'avez pas le droit de le supprimer.', + 'event_calendar:delete_cancel_response' => 'Suppression de l\'événement annulé.', + 'event_calendar:add_to_my_calendar' => 'Ajouter à mon agenda', + 'event_calendar:remove_from_my_calendar' => 'Supprimer de mon agenda', + 'event_calendar:add_to_my_calendar_response' => 'Cet événement a été ajouté à votre agenda personnel.', + 'event_calendar:remove_from_my_calendar_response' => 'Cet événement a été supprimé de votre agenda personnel.', + 'event_calendar:users_for_event_title' => 'Membre du site intéressé par l\'événement "%s"\'', + 'event_calendar:personal_event_calendars_link' => 'Agenda des événements personnels de (%s)', + 'event_calendar:settings:group_profile_display:title' => 'Afficher le profil de l\'agenda du groupe (Si les agendas de groupe ont été permis)', + 'event_calendar:settings:group_profile_display_option:left' => 'Colonne de gauche', + 'event_calendar:settings:group_profile_display_option:right' => 'Colonne de droite', + 'event_calendar:settings:group_profile_display_option:none' => 'aucun', + 'event_calendar:settings:autopersonal:title' => 'Ajouter automatiquement les événements d\'un utilisateur à son agenda personnelA.', + 'event_calendar:settings:yes' => 'oui', + 'event_calendar:settings:no' => 'non', + 'event_calendar:settings:site_calendar:title' => 'Side de l\'agenda', + 'event_calendar:settings:site_calendar:admin' => 'oui, seuls les administrateurs peuvent proposer des événements', + 'event_calendar:settings:site_calendar:loggedin' => 'oui, seuls les utilisateurs identifiés peuvent publier un événement', + 'event_calendar:settings:group_calendar:title' => 'Les agendas du groupe', + 'event_calendar:settings:group_calendar:admin' => 'oui seuls les administrateurs et les créateurs du groupe peuvent publier un événement', + 'event_calendar:settings:group_calendar:members' => 'oui, les membres du groupe peuvent publier un événement', + 'event_calendar:settings:group_default:title' => 'Les nouveaux groupes par défaut peuvent avoir leur propre agenda (Si les agendas de groupe sont permis)', + 'event_calendar:settings:group_default:no' => 'non (mais les administrateurs du groupe peuvement ajouter la fonction agenda si désiré)', + 'event_calendar:settings:group_default:yes' => 'oui (mais les administrateurs ou les créateurs du groupe peuvent supprimer la fonction agenda si désiré)', + 'event_calendar:enable_event_calendar' => 'Ajouter la fonction agenda au groupe', + 'event_calendar:no_events_found' => 'Aucun événement trouvé.', + 'event_calendar:river:created' => '%s ajouté', + 'event_calendar:river:updated' => '%s mis à jour', + 'event_calendar:river:annotated1' => '%s ajouté', + 'event_calendar:river:annotated2' => 'à son agenda personnel.', + 'event_calendar:river:create' => 'un nouvel événement intitulé', + 'event_calendar:river:the_event' => 'un événement intitulé', +); +add_translation("fr", $language); +?> \ No newline at end of file diff --git a/manage_event.php b/manage_event.php new file mode 100644 index 000000000..0464a31df --- /dev/null +++ b/manage_event.php @@ -0,0 +1,57 @@ + + * @copyright Radagast Solutions 2008 + * @link http://radagast.biz/ + * + */ + +// Load Elgg engine +require_once(dirname(dirname(dirname(__FILE__))) . "/engine/start.php"); + +// Load event calendar model +require_once(dirname(__FILE__) . "/models/model.php"); + +// Define context +set_context('event_calendar'); + +global $CONFIG; + +gatekeeper(); + +$event = ''; + +$group_guid = (int) get_input('group_guid',0); + +if ($event_id = get_input('event_id',0)) { + $event = event_calendar_get_event_for_edit($event_id); + if (!$event) { + register_error(elgg_echo('event_calendar:no_such_event_edit_error')); + forward(); + } else { + set_page_owner($event->container_guid); + if (page_owner_entity() instanceof ElggGroup) { + set_context('groups'); + } + } + + $title = elgg_echo('event_calendar:manage_event_title'); +} else { + $title = elgg_echo('event_calendar:add_event_title'); + if ($group_guid && $group = get_entity($group_guid)) { + // redefine context + set_context('groups'); + set_page_owner($group_guid); + } +} + +$body = elgg_view('event_calendar/forms/manage_event', array('event'=>$event,'event_id'=>$event_id,'group_guid'=>$group_guid)); + +page_draw($title,elgg_view_layout("two_column_left_sidebar", '', elgg_view_title($title) . $body)); + +?> \ No newline at end of file diff --git a/manifest.xml b/manifest.xml new file mode 100644 index 000000000..c3ce812c1 --- /dev/null +++ b/manifest.xml @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/models/model.php b/models/model.php new file mode 100644 index 000000000..04a168e55 --- /dev/null +++ b/models/model.php @@ -0,0 +1,1045 @@ + + * @copyright Radagast Solutions 2008 + * @link http://radagast.biz/ + * + */ + +function event_calendar_get_event_for_edit($event_id) { + if ($event_id && $event = get_entity($event_id)) { + if ($event->canEdit()) { + return $event; + } else { + return false; + } + } else { + return false; + } +} + +function event_calendar_get_event_from_form() { + + // returns an event data object (not an ElggObject) + + $event_data = new stdClass(); + $event_data->form_data = true; + // debug message to test new add user feature + $event_data->event_id = get_input('event_id',0); + $event_data->access_id = get_input('access',ACCESS_PRIVATE); + $event_data->title = get_input('title',''); + $event_data->description = get_input('brief_description',''); + $event_data->venue = get_input('venue',''); + $event_calendar_times = get_plugin_setting('times', 'event_calendar'); + $event_calendar_region_display = get_plugin_setting('region_display', 'event_calendar'); + $event_calendar_type_display = get_plugin_setting('type_display', 'event_calendar'); + $event_calendar_spots_display = get_plugin_setting('spots_display', 'event_calendar'); + if ($event_calendar_times == 'yes') { + $sh = get_input('start_time_h',''); + $sm = get_input('start_time_m',''); + if (is_numeric($sh) && is_numeric($sm)) { + // workaround for pulldown zero value bug + $sh--; + $sm--; + $event_data->start_time = $sh*60+$sm; + } else { + $event_data->start_time = ''; + } + $eh = get_input('end_time_h',''); + $em = get_input('end_time_m',''); + if (is_numeric($eh) && is_numeric($em)) { + // workaround for pulldown zero value bug + $eh--; + $em--; + $event_data->end_time = $eh*60+$em; + } else { + $event_data->end_time = ''; + } + } + $event_data->start_date = get_input('start_date',''); + $event_data->end_date = get_input('end_date',''); + if ($event_calendar_spots_display == 'yes') { + $event_data->spots = get_input('spots',''); + } + if ($event_calendar_region_display == 'yes') { + $region = get_input('region',''); + if ($region == '-') { + $region = ''; + } + $event_data->region = $region; + } + if ($event_calendar_type_display == 'yes') { + $event_type = get_input('event_type',''); + if ($event_type == '-') { + $event_type = ''; + } + $event_data->event_type = $event_type; + } + $event_data->fees = get_input('fees',''); + $event_data->contact = get_input('contact',''); + $event_data->organiser = get_input('organiser',''); + $event_data->event_tags = get_input('event_tags',''); + $event_data->long_description = get_input('long_description',''); + + return $event_data; +} + +function event_calendar_set_event_from_form() { + global $CONFIG; + + $group_guid = 0; + $result = new stdClass(); + $ed = event_calendar_get_event_from_form(); + $result->form_data = $ed; + $fields_are_valid = TRUE; + $event_calendar_times = get_plugin_setting('times', 'event_calendar'); + $event_calendar_region_display = get_plugin_setting('region_display', 'event_calendar'); + $event_calendar_type_display = get_plugin_setting('type_display', 'event_calendar'); + $event_calendar_spots_display = get_plugin_setting('spots_display', 'event_calendar'); + $event_calendar_hide_end = get_plugin_setting('hide_end', 'event_calendar'); + $event_calendar_more_required = get_plugin_setting('more_required', 'event_calendar'); + + if ($event_calendar_more_required == 'yes') { + $required_fields = array('title','venue','start_date', + 'brief_description','fees','contact','organiser', + 'event_tags'); + + if ($event_calendar_times == 'yes') { + $required_fields[] = 'start_time'; + if ($event_calendar_hide_end != 'yes') { + $required_fields[] = 'end_time'; + } + } + if ($event_calendar_region_display == 'yes') { + $required_fields[] = 'region'; + } + if ($event_calendar_type_display == 'yes') { + $required_fields[] = 'event_type'; + } + if ($event_calendar_spots_display == 'yes') { + $required_fields[] = 'spots'; + } + } else { + $required_fields = array('title','venue','start_date'); + } + foreach ($required_fields as $fn) { + if (!trim($ed->$fn)) { + $fields_are_valid = FALSE; + break; + } + } + if ($fields_are_valid) { + if ($ed->event_id) { + $event = get_entity($ed->event_id); + if (!$event) { + // do nothing because this is a bad event id + $result->success = false; + } + } else { + $event = new ElggObject(); + $event->subtype = 'event_calendar'; + $event->owner_guid = $_SESSION['user']->getGUID(); + $group_guid = (int) get_input('group_guid',0); + if ($group_guid) { + $event->container_guid = $group_guid; + } else { + $event->container_guid = $event->owner_guid; + } + } + $event->access_id = $ed->access_id; + $event->title = $ed->title; + $event->description = $ed->description; + $event->venue = $ed->venue; + $event->start_date = strtotime($ed->start_date); + if ($ed->end_date) { + $event->end_date = strtotime($ed->end_date); + } else { + $event->end_date = $ed->end_date; + } + if ($event_calendar_times == 'yes') { + $event->start_time = $ed->start_time; + //$event->original_start_date = $event->start_date; + if (is_numeric($ed->start_time)) { + // Set start date to the Unix start time, if set. + // This allows sorting by date *and* time. + $event->start_date += $ed->start_time*60; + } + $event->end_time = $ed->end_time; + } + if ($event_calendar_spots_display == 'yes') { + $event->spots = trim($ed->spots); + } + if ($event_calendar_region_display == 'yes') { + $event->region = $ed->region; + } + if ($event_calendar_type_display == 'yes') { + $event->event_type = $ed->event_type; + } + $event->fees = $ed->fees; + $event->contact = $ed->contact; + $event->organiser = $ed->organiser; + $event->event_tags = array_reverse(string_to_tag_array($ed->event_tags)); + $event->long_description = $ed->long_description; + $event->real_end_time = event_calendar_get_end_time($event); + $result->success = $event->save(); + if ($result->success) { + if ($group_guid && (get_plugin_setting('autogroup', 'event_calendar') == 'yes')) { + event_calendar_add_personal_events_from_group($event->getGUID(),$group_guid); + } + if (get_plugin_setting('add_users', 'event_calendar') == 'yes') { + if (function_exists('autocomplete_member_to_user')) { + $addusers = get_input('adduser',array()); + foreach($addusers as $adduser) { + if ($adduser) { + $user = autocomplete_member_to_user($adduser); + $user_id = $user->guid; + event_calendar_add_personal_event($event->guid,$user_id); + if (get_plugin_setting('add_users_notify', 'event_calendar') == 'yes') { + notify_user($user_id, $CONFIG->site->guid, elgg_echo('event_calendar:add_users_notify:subject'), + sprintf( + elgg_echo('event_calendar:add_users_notify:body'), + $user->name, + $event->title, + $event->getURL() + ) + ); + } + } + } + } + } + } + $result->event = $event; + } else { + // required data missing + $result->success = false; + } + + return $result; +} + +function event_calendar_get_events_between($start_date,$end_date,$is_count,$limit=10,$offset=0,$container_guid=0,$region='-') { + if ($is_count) { + $count = event_calendar_get_entities_from_metadata_between('start_date','end_date', + $start_date, $end_date, "object", "event_calendar", 0, $container_guid, $limit,$offset,"",0,false,true,$region); + return $count; + } else { + $events = event_calendar_get_entities_from_metadata_between('start_date','end_date', + $start_date, $end_date, "object", "event_calendar", 0, $container_guid, $limit,$offset,"",0,false,false,$region); + //return event_calendar_vsort($events,'start_date'); + return $events; + } +} + +function event_calendar_get_open_events_between($start_date,$end_date, +$is_count,$limit=10,$offset=0,$container_guid=0,$region='-', $meta_max = 'spots', $annotation_name = 'personal_event') { + 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,$meta_max,$annotation_name); + return $count; + } else { + $events = 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,false,$region,$meta_max,$annotation_name); + //return event_calendar_vsort($events,'start_date'); + return $events; + } +} + +function event_calendar_get_events_for_user_between($start_date,$end_date,$is_count,$limit=10,$offset=0,$user_guid,$container_guid=0,$region='-') { + if ($is_count) { + $count = event_calendar_get_entities_from_metadata_between('start_date','end_date', + $start_date, $end_date, "object", "event_calendar", $user_guid, $container_guid, $limit,$offset,"",0,true,true,$region); + return $count; + } else { + $events = event_calendar_get_entities_from_metadata_between('start_date','end_date', + $start_date, $end_date, "object", "event_calendar", $user_guid, $container_guid, $limit,$offset,"",0,true,false,$region); + //return event_calendar_vsort($events,'start_date'); + return $events; + } +} + +// TODO - replace the original version with this one +function event_calendar_get_events_for_user_between2($start_date,$end_date,$is_count,$limit=10,$offset=0,$user_guid,$container_guid=0,$region='-') { + if ($is_count) { + $count = event_calendar_get_entities_from_metadata_between('start_date','real_end_time', + $start_date, $end_date, "object", "event_calendar", $user_guid, $container_guid, $limit,$offset,"",0,true,true,$region); + return $count; + } else { + $events = event_calendar_get_entities_from_metadata_between('start_date','real_end_time', + $start_date, $end_date, "object", "event_calendar", $user_guid, $container_guid, $limit,$offset,"",0,true,false,$region); + //return event_calendar_vsort($events,'start_date'); + return $events; + } +} + +function event_calendar_get_events_for_friends_between($start_date,$end_date,$is_count,$limit=10,$offset=0,$user_guid,$container_guid=0,$region='-') { + if ($user_guid) { + $friends = get_user_friends($user_guid,"",5000); + if ($friends) { + $friend_guids = array(); + foreach($friends as $friend) { + $friend_guids[] = $friend->getGUID(); + } + if ($is_count) { + $count = event_calendar_get_entities_from_metadata_between('start_date','end_date', + $start_date, $end_date, "object", "event_calendar", $friend_guids, $container_guid, $limit,$offset,"",0,true,true,$region); + return $count; + } else { + $events = event_calendar_get_entities_from_metadata_between('start_date','end_date', + $start_date, $end_date, "object", "event_calendar", $friend_guids, $container_guid, $limit,$offset,"",0,true,false,$region); + //return event_calendar_vsort($events,'start_date'); + return $events; + } + } + } + return array(); +} + +function event_calendar_vsort($original,$field, $descending = false) { + if (!$original) { + return $original; + } + $sortArr = array(); + + foreach ( $original as $key => $item ) { + $sortArr[ $key ] = $item->$field; + } + + if ( $descending ) { + arsort( $sortArr ); + } else { + asort( $sortArr ); + } + + $resultArr = array(); + foreach ( $sortArr as $key => $value ) { + $resultArr[ $key ] = $original[ $key ]; + } + + return $resultArr; +} + +/** + * Return a list of entities based on the given search criteria. + * In this case, returns entities with the given metadata between two values inclusive + * + * @param mixed $meta_start_name + * @param mixed $meta_end_name + * @param mixed $meta_start_value - start of metadata range, must be numerical value + * @param mixed $meta_end_value - end of metadata range, must be numerical value + * @param string $entity_type The type of entity to look for, eg 'site' or 'object' + * @param string $entity_subtype The subtype of the entity. + * @param mixed $owner_guid Either one integer user guid or an array of user guids + * @param int $container_guid If supplied, the result is restricted to events associated with a specific container + * @param int $limit + * @param int $offset + * @param string $order_by Optional ordering. + * @param int $site_guid The site to get entities for. Leave as 0 (default) for the current site; -1 for all sites. + * @param boolean $filter Filter by events in personal calendar if true + * @param true|false $count If set to true, returns the total number of entities rather than a list. (Default: false) + * + * @return int|array A list of entities, or a count if $count is set to true + */ +function event_calendar_get_entities_from_metadata_between($meta_start_name, $meta_end_name, $meta_start_value, $meta_end_value, $entity_type = "", $entity_subtype = "", $owner_guid = 0, $container_guid = 0, $limit = 10, $offset = 0, $order_by = "", $site_guid = 0, $filter = false, $count = false, $region='-') +{ + global $CONFIG; + + // This should not be possible, but a sanity check just in case + if (!is_numeric($meta_start_value) || !is_numeric($meta_end_value)) { + return FALSE; + } + + $meta_start_n = get_metastring_id($meta_start_name); + $meta_end_n = get_metastring_id($meta_end_name); + if ($region && $region != '-') { + $region_n = get_metastring_id('region'); + $region_value_n = get_metastring_id($region); + if (!$region_n || !$region_value_n) { + if ($count) { + return 0; + } else { + return FALSE; + } + } + } + + $entity_type = sanitise_string($entity_type); + $entity_subtype = get_subtype_id($entity_type, $entity_subtype); + $limit = (int)$limit; + $offset = (int)$offset; + //if ($order_by == "") $order_by = "e.time_created desc"; + if ($order_by == "") $order_by = "v.string asc"; + $order_by = sanitise_string($order_by); + $site_guid = (int) $site_guid; + if ((is_array($owner_guid) && (count($owner_guid)))) { + foreach($owner_guid as $key => $guid) { + $owner_guid[$key] = (int) $guid; + } + } else { + $owner_guid = (int) $owner_guid; + } + + if ((is_array($container_guid) && (count($container_guid)))) { + foreach($container_guid as $key => $guid) { + $container_guid[$key] = (int) $guid; + } + } else { + $container_guid = (int) $container_guid; + } + if ($site_guid == 0) + $site_guid = $CONFIG->site_guid; + + //$access = get_access_list(); + + $where = array(); + + if ($entity_type!="") + $where[] = "e.type='$entity_type'"; + if ($entity_subtype) + $where[] = "e.subtype=$entity_subtype"; + $where[] = "m.name_id='$meta_start_n'"; + $where[] = "m2.name_id='$meta_end_n'"; + $where[] = "((v.string >= $meta_start_value AND v.string <= $meta_end_value) OR ( v2.string >= $meta_start_value AND v2.string <= $meta_end_value) OR (v.string <= $meta_start_value AND v2.string >= $meta_start_value) OR ( v2.string <= $meta_end_value AND v2.string >= $meta_end_value))"; + if ($region && $region != '-') { + $where[] = "m3.name_id='$region_n'"; + $where[] = "m3.value_id='$region_value_n'"; + } + if ($site_guid > 0) + $where[] = "e.site_guid = {$site_guid}"; + if ($filter) { + if (is_array($owner_guid)) { + $where[] = "ms2.string in (".implode(",",$owner_guid).")"; + } else if ($owner_guid > 0) { + $where[] = "ms2.string = {$owner_guid}"; + } + + $where[] = "ms.string = 'personal_event'"; + } else { + if (is_array($owner_guid)) { + $where[] = "e.owner_guid in (".implode(",",$owner_guid).")"; + } else if ($owner_guid > 0) { + $where[] = "e.owner_guid = {$owner_guid}"; + } + } + + if (is_array($container_guid)) { + $where[] = "e.container_guid in (".implode(",",$container_guid).")"; + } else if ($container_guid > 0) + $where[] = "e.container_guid = {$container_guid}"; + + if (!$count) { + $query = "SELECT distinct e.* "; + } else { + $query = "SELECT count(distinct e.guid) as total "; + } + + $query .= "from {$CONFIG->dbprefix}entities e JOIN {$CONFIG->dbprefix}metadata m on e.guid = m.entity_guid JOIN {$CONFIG->dbprefix}metadata m2 on e.guid = m2.entity_guid "; + if ($filter) { + $query .= "JOIN {$CONFIG->dbprefix}annotations a ON (a.entity_guid = e.guid) "; + $query .= "JOIN {$CONFIG->dbprefix}metastrings ms ON (a.name_id = ms.id) "; + $query .= "JOIN {$CONFIG->dbprefix}metastrings ms2 ON (a.value_id = ms2.id) "; + } + if ($region && $region != '-') { + $query .= "JOIN {$CONFIG->dbprefix}metadata m3 ON (e.guid = m3.entity_guid) "; + } + $query .= "JOIN {$CONFIG->dbprefix}metastrings v on v.id = m.value_id JOIN {$CONFIG->dbprefix}metastrings v2 on v2.id = m2.value_id where"; + foreach ($where as $w) + $query .= " $w and "; + $query .= get_access_sql_suffix("e"); // Add access controls + $query .= ' and ' . get_access_sql_suffix("m"); // Add access controls + $query .= ' and ' . get_access_sql_suffix("m2"); // Add access controls + + + + if (!$count) { + $query .= " order by $order_by limit $offset, $limit"; // Add order and limit + $entities = get_data($query, "entity_row_to_elggstar"); + if (get_plugin_setting('add_to_group_calendar', 'event_calendar') == 'yes') { + if (get_entity($container_guid) instanceOf ElggGroup) { + $entities = event_calendar_get_entities_from_metadata_between_related($meta_start_name, $meta_end_name, + $meta_start_value, $meta_end_value, $entity_type, + $entity_subtype, $owner_guid, $container_guid, + $limit = 10, $offset = 0, $order_by = "", $site_guid = 0, + $filter = false, $count = false, $region='-',$entities); + } + } + return $entities; + } else { + if ($row = get_data_row($query)) + return $row->total; + } + return false; +} + +// adds any related events (has the display_on_group relation) +// that meet the appropriate criteria + +function event_calendar_get_entities_from_metadata_between_related($meta_start_name, $meta_end_name, + $meta_start_value, $meta_end_value, $entity_type = "", + $entity_subtype = "", $owner_guid = 0, $container_guid = 0, + $limit = 10, $offset = 0, $order_by = "", $site_guid = 0, + $filter = false, $count = false, $region='-',$main_events) { + + $main_list = array(); + if ($main_events) { + foreach ($main_events as $event) { + $main_list[$event->guid] = $event; + } + } + $related_list = array(); + $related_events = get_entities_from_relationship("display_on_group", $container_guid, TRUE); + if ($related_events) { + foreach ($related_events as $event) { + $related_list[$event->guid] = $event; + } + } + // get all the events (across all containers) that meet the criteria + $all_events = event_calendar_get_entities_from_metadata_between($meta_start_name, $meta_end_name, + $meta_start_value, $meta_end_value, $entity_type, $entity_subtype, $owner_guid, + 0, $limit, $offset, $order_by, $site_guid, $filter, $count, $region); + + if ($all_events) { + foreach($all_events as $event) { + if (array_key_exists($event->guid,$related_list) + && !array_key_exists($event->guid,$main_list)) { + // add to main events + $main_events[] = $event; + } + } + } + return event_calendar_vsort($main_events,$meta_start_name); +} + +// TODO: replace the original version with this one +/** + * Return a list of entities based on the given search criteria. + * In this case, returns entities with the given metadata between two values inclusive + * + * @param mixed $meta_start_name + * @param mixed $meta_end_name + * @param mixed $meta_start_value - start of metadata range, must be numerical value + * @param mixed $meta_end_value - end of metadata range, must be numerical value + * @param string $entity_type The type of entity to look for, eg 'site' or 'object' + * @param string $entity_subtype The subtype of the entity. + * @param mixed $owner_guid Either one integer user guid or an array of user guids + * @param int $container_guid If supplied, the result is restricted to events associated with a specific container + * @param int $limit + * @param int $offset + * @param string $order_by Optional ordering. + * @param int $site_guid The site to get entities for. Leave as 0 (default) for the current site; -1 for all sites. + * @param boolean $filter Filter by events in personal calendar if true + * @param true|false $count If set to true, returns the total number of entities rather than a list. (Default: false) + * @param string $meta_max metadata name containing maximum annotation count + * @param string $annotation_name annotation name to count + * + * @return int|array A list of entities, or a count if $count is set to true + */ +function event_calendar_get_entities_from_metadata_between2 +($meta_start_name, $meta_end_name, $meta_start_value, $meta_end_value, +$entity_type = "", $entity_subtype = "", $owner_guid = 0, $container_guid = 0, +$limit = 10, $offset = 0, $order_by = "", $site_guid = 0, $filter = false, +$count = false, $region='-', $meta_max = '', $annotation_name = '') +{ + global $CONFIG; + + // This should not be possible, but a sanity check just in case + if (!is_numeric($meta_start_value) || !is_numeric($meta_end_value)) { + return FALSE; + } + + $meta_start_n = get_metastring_id($meta_start_name); + $meta_end_n = get_metastring_id($meta_end_name); + if ($region && $region != '-') { + $region_n = get_metastring_id('region'); + $region_value_n = get_metastring_id($region); + if (!$region_n || !$region_value_n) { + if ($count) { + return 0; + } else { + return false; + } + } + } + + $entity_type = sanitise_string($entity_type); + $entity_subtype = get_subtype_id($entity_type, $entity_subtype); + $limit = (int)$limit; + $offset = (int)$offset; + //if ($order_by == "") $order_by = "e.time_created desc"; + if ($order_by == "") $order_by = "v.string asc"; + $order_by = sanitise_string($order_by); + $site_guid = (int) $site_guid; + if ((is_array($owner_guid) && (count($owner_guid)))) { + foreach($owner_guid as $key => $guid) { + $owner_guid[$key] = (int) $guid; + } + } else { + $owner_guid = (int) $owner_guid; + } + + if ((is_array($container_guid) && (count($container_guid)))) { + foreach($container_guid as $key => $guid) { + $container_guid[$key] = (int) $guid; + } + } else { + $container_guid = (int) $container_guid; + } + if ($site_guid == 0) + $site_guid = $CONFIG->site_guid; + + //$access = get_access_list(); + + $where = array(); + + if ($entity_type!="") + $where[] = "e.type='$entity_type'"; + if ($entity_subtype) + $where[] = "e.subtype=$entity_subtype"; + $where[] = "m.name_id='$meta_start_n'"; + $where[] = "m2.name_id='$meta_end_n'"; + $where[] = "((v.string >= $meta_start_value AND v.string <= $meta_end_value) OR ( v2.string >= $meta_start_value AND v2.string <= $meta_end_value) OR (v.string <= $meta_start_value AND v2.string >= $meta_start_value) OR ( v2.string <= $meta_end_value AND v2.string >= $meta_end_value))"; + if ($region && $region != '-') { + $where[] = "m3.name_id='$region_n'"; + $where[] = "m3.value_id='$region_value_n'"; + } + if ($site_guid > 0) + $where[] = "e.site_guid = {$site_guid}"; + if ($filter) { + if (is_array($owner_guid)) { + $where[] = "ms2.string in (".implode(",",$owner_guid).")"; + } else if ($owner_guid > 0) { + $where[] = "ms2.string = {$owner_guid}"; + } + + $where[] = "ms.string = 'personal_event'"; + } else { + if (is_array($owner_guid)) { + $where[] = "e.owner_guid in (".implode(",",$owner_guid).")"; + } else if ($owner_guid > 0) { + $where[] = "e.owner_guid = {$owner_guid}"; + } + } + + if (is_array($container_guid)) { + $where[] = "e.container_guid in (".implode(",",$container_guid).")"; + } else if ($container_guid > 0) + $where[] = "e.container_guid = {$container_guid}"; + + if (!$count) { + $query = "SELECT distinct e.* "; + } else { + $query = "SELECT count(distinct e.guid) as total "; + } + + $query .= "FROM {$CONFIG->dbprefix}entities e JOIN {$CONFIG->dbprefix}metadata m on e.guid = m.entity_guid JOIN {$CONFIG->dbprefix}metadata m2 on e.guid = m2.entity_guid "; + if ($filter) { + $query .= "JOIN {$CONFIG->dbprefix}annotations a ON (a.entity_guid = e.guid) "; + $query .= "JOIN {$CONFIG->dbprefix}metastrings ms ON (a.name_id = ms.id) "; + $query .= "JOIN {$CONFIG->dbprefix}metastrings ms2 ON (a.value_id = ms2.id) "; + } + if ($region && $region != '-') { + $query .= "JOIN {$CONFIG->dbprefix}metadata m3 ON (e.guid = m3.entity_guid) "; + } + if ($meta_max && $annotation_name) { + // This groups events for which the meta max name is defined + // perhaps this should be a left join and accept null values? + // so it would return groups with no spots defined as well + $meta_max_n = get_metastring_id($meta_max); + $ann_n = get_metastring_id($annotation_name); + if (!$meta_max_n || !$ann_n) { + if ($count) { + return 0; + } else { + return false; + } + } + + $query .= " LEFT JOIN {$CONFIG->dbprefix}metadata m4 ON (e.guid = m4.entity_guid AND m4.name_id=$meta_max_n) "; + $query .= " LEFT JOIN {$CONFIG->dbprefix}metastrings ms4 ON (m4.value_id = ms4.id) "; + $where[] = "((ms4.string is null) OR (ms4.string = \"\") OR (CONVERT(ms4.string,SIGNED) > (SELECT count(id) FROM {$CONFIG->dbprefix}annotations ann WHERE ann.entity_guid = e.guid AND name_id = $ann_n GROUP BY entity_guid)))"; + } + $query .= "JOIN {$CONFIG->dbprefix}metastrings v on v.id = m.value_id JOIN {$CONFIG->dbprefix}metastrings v2 on v2.id = m2.value_id where"; + foreach ($where as $w) + $query .= " $w AND "; + $query .= get_access_sql_suffix("e"); // Add access controls + $query .= ' AND ' . get_access_sql_suffix("m"); // Add access controls + $query .= ' AND ' . get_access_sql_suffix("m2"); // Add access controls + + if (!$count) { + $query .= " order by $order_by limit $offset, $limit"; // Add order and limit + return get_data($query, "entity_row_to_elggstar"); + } else { + if ($row = get_data_row($query)) + return $row->total; + } + return false; +} + +function event_calendar_has_personal_event($event_id,$user_id) { + $annotations = get_annotations($event_id, "object", "event_calendar", "personal_event", (int) $user_id, $user_id); + if ($annotations && count($annotations) > 0) { + return true; + } else { + return false; + } +} + +function event_calendar_add_personal_event($event_id,$user_id) { + if ($event_id && $user_id) { + if ( !event_calendar_has_personal_event($event_id,$user_id) + && !event_calendar_has_collision($event_id,$user_id)) { + if (!event_calendar_is_full($event_id)) { + create_annotation($event_id, "personal_event", (int) $user_id, 'integer', $user_id, ACCESS_PUBLIC); + return TRUE; + } + } + } + return FALSE; +} + +function event_calendar_add_personal_events_from_group($event_id,$group_guid) { + $members = get_group_members($group_guid, 100000); + foreach($members as $member) { + $member_id = $member->getGUID(); + event_calendar_add_personal_event($event_id,$member_id); + } +} + +function event_calendar_remove_personal_event($event_id,$user_id) { + $annotations = get_annotations($event_id, "object", "event_calendar", "personal_event", (int) $user_id, $user_id); + if ($annotations) { + foreach ($annotations as $annotation) { + $annotation->delete(); + } + } +} + +function event_calendar_get_personal_events_for_user($user_id,$limit) { + $events = get_entities_from_annotations("object", "event_calendar", "personal_event", $user_id,0, 0, 1000); + $final_events = array(); + if ($events) { + $now = time(); + $one_day = 60*60*24; + // don't show events that have been over for more than a day + foreach($events as $event) { + if (($event->start_date > $now-$one_day) || ($event->end_date && ($event->end_date > $now-$one_day))) { + $final_events[] = $event; + } + } + } + $sorted = event_calendar_vsort($final_events,'start_date'); + return array_slice($sorted,0,$limit); +} + +function event_calendar_get_users_for_event($event_id,$limit,$offset,$is_count) { + if ($is_count) { + return count_annotations($event_id, "object", "event_calendar", "personal_event"); + } else { + $users = array(); + $annotations = get_annotations($event_id, "object", "event_calendar", "personal_event", "", 0, $limit, $offset); + if ($annotations) { + foreach($annotations as $annotation) { + if (($user = get_entity($annotation->value)) && ($user instanceOf ElggUser)) { + $users[] = $user; + } + } + } + return $users; + } +} + +function event_calendar_security_fields() { + $ts = time(); + $token = generate_action_token($ts); + return "__elgg_token=$token&__elgg_ts=$ts"; +} + +function event_calendar_get_events_for_group($group_guid) { + return get_entities('object','event_calendar',0,"",0,0,false,0,$group_guid); +} + +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); + } +} + +function event_calendar_convert_time($time) { + $hour = floor($time/60); + $minute = sprintf("%02d",$time-60*$hour); + return "$hour:$minute"; +} + +function event_calendar_format_time($date,$time1,$time2='') { + if (is_numeric($time1)) { + $t = event_calendar_convert_time($time1); + if (is_numeric($time2)) { + $t .= " - ".event_calendar_convert_time($time2); + } + return "$t, $date"; + } else { + return $date; + } +} + +function event_calendar_activated_for_group($group) { + $group_calendar = get_plugin_setting('group_calendar', 'event_calendar'); + $group_default = get_plugin_setting('group_default', 'event_calendar'); + if ($group && ($group_calendar != 'no')) { + if ( ($group->event_calendar_enable == 'yes') || ((!$group->event_calendar_enable && (!$group_default || $group_default == 'yes')))) { + return true; + } + } + return false; +} + +function event_calendar_get_region($event) { + $event_calendar_region_list_handles = get_plugin_setting('region_list_handles', 'event_calendar'); + $region = trim($event->region); + if ($event_calendar_region_list_handles == 'yes') { + $region = elgg_echo('event_calendar:region:'.$region); + } + return htmlspecialchars($region); +} + +function event_calendar_get_type($event) { + $event_calendar_type_list_handles = get_plugin_setting('type_list_handles', 'event_calendar'); + $type = trim($event->event_type); + if ($event_calendar_type_list_handles == 'yes') { + $type = elgg_echo('event_calendar:type:'.$type); + } + return htmlspecialchars($type); +} + +function event_calendar_get_formatted_full_items($event) { + $time_bit = event_calendar_get_formatted_time($event); + $event_calendar_region_display = get_plugin_setting('region_display', 'event_calendar'); + $event_calendar_type_display = 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; + $item = new stdClass(); + $item->title = elgg_echo('event_calendar:venue_label'); + $item->value = htmlspecialchars($event->venue); + $event_items[] = $item; + if ($event_calendar_region_display == 'yes') { + $item = new stdClass(); + $item->title = elgg_echo('event_calendar:region_label'); + $item->value = event_calendar_get_region($event); + $event_items[] = $item; + } + if ($event_calendar_type_display == 'yes') { + $item = new stdClass(); + $item->title = elgg_echo('event_calendar:type_label'); + $item->value = event_calendar_get_type($event); + $event_items[] = $item; + } + $item = new stdClass(); + $item->title = elgg_echo('event_calendar:fees_label'); + $item->value = htmlspecialchars($event->fees); + $event_items[] = $item; + $item = new stdClass(); + $item->title = elgg_echo('event_calendar:organiser_label'); + $item->value = htmlspecialchars($event->organiser); + $event_items[] = $item; + $item = new stdClass(); + $item->title = elgg_echo('event_calendar:contact_label'); + $item->value = htmlspecialchars($event->contact); + $event_items[] = $item; + $item = new stdClass(); + $item->title = elgg_echo('event_calendar:event_tags_label'); + $item->value = elgg_view("output/tags",array('value'=>$event->event_tags)); + $event_items[] = $item; + + return $event_items; +} + +function event_calendar_get_formatted_time($event) { + $date_format = 'j M Y'; + $event_calendar_times = get_plugin_setting('times', 'event_calendar'); + + $start_date = date($date_format,$event->start_date); + if ((!$event->end_date) || ($event->end_date == $event->start_date)) { + if ($event_calendar_times) { + $start_date = event_calendar_format_time($start_date,$event->start_time,$event->end_time); + } + $time_bit = $start_date; + } else { + $end_date = date($date_format,$event->end_date); + if ($event_calendar_times) { + $start_date = event_calendar_format_time($start_date,$event->start_time); + $end_date = event_calendar_format_time($end_date,$event->end_time); + } + $time_bit = "$start_date - $end_date"; + } + + return $time_bit; +} + +function event_calendar_get_formatted_date($ts) { + // TODO: make the date format configurable + return date('j/n/Y',$ts); +} + +function event_calendar_is_full($event_id) { + $event_calendar_spots_display = get_plugin_setting('spots_display', 'event_calendar'); + if ($event_calendar_spots_display == 'yes') { + $count = event_calendar_get_users_for_event($event_id,0,0,TRUE); + $event = get_entity($event_id); + if ($event) { + $spots = $event->spots; + if (is_numeric($spots)) { + if ($count >= $spots) { + return TRUE; + } + } + } + } + return FALSE; +} + +function event_calendar_has_collision($event_id, $user_id) { + $no_collisions = get_plugin_setting('no_collisions', 'event_calendar'); + if ($no_collisions == 'yes') { + $event = get_entity($event_id); + if ($event) { + $start_time = $event->start_date; + $end_time = event_calendar_get_end_time($event); + // look to see if the user already has events within this period + $count = event_calendar_get_events_for_user_between2($start_time,$end_time,TRUE,10,0,$user_id); + if ($count > 0) { + return TRUE; + } else { + return FALSE; + } + } + } + + return FALSE; +} + +// this complicated bit of code determines the event end time +function event_calendar_get_end_time($event) { + $default_length = get_plugin_setting('collision_length', 'event_calendar'); + $start_time = $event->start_date; + $end_time = $event->end_time; + $end_date = $event->end_date; + if($end_date) { + if ($end_time) { + $end_time = $end_date+$end_time*60; + } else if ($start_time == $end_date) { + if (is_numeric($default_length)) { + $end_time = $end_date + $default_length; + } else { + // default to an hour length + $end_time = $start_time + 3600; + } + } else { + $end_time = $end_date; + } + } else { + if ($end_time) { + if ($event->start_time) { + $end_time = $start_time + ($end_time*60 - $event->start_time*60); + } else { + $end_time = $start_time + $end_time*60; + } + } else { + if (is_numeric($default_length)) { + $end_time = $start_time + $default_length; + } else { + // default to an hour length + $end_time = $start_time + 3600; + } + } + } + + return $end_time; +} + +// a version to allow for some customised options +function event_calendar_view_entity_list($entities, $count, $offset, $limit, $fullview = true, $viewtypetoggle = true, $pagination = true) { + $count = (int) $count; + $limit = (int) $limit; + + // do not require views to explicitly pass in the offset + if (!$offset = (int) $offset) { + $offset = sanitise_int(get_input('offset', 0)); + } + + $context = get_context(); + + $html = elgg_view('event_calendar/entities/entity_list',array( + 'entities' => $entities, + 'count' => $count, + 'offset' => $offset, + 'limit' => $limit, + 'baseurl' => $_SERVER['REQUEST_URI'], + 'fullview' => $fullview, + 'context' => $context, + 'viewtypetoggle' => $viewtypetoggle, + 'viewtype' => get_input('search_viewtype','list'), + 'pagination' => $pagination + )); + + return $html; +} + +function event_calendar_personal_can_manage($event,$user_id) { + $authorised = FALSE; + $event_calendar_personal_manage = get_plugin_setting('personal_manage', 'event_calendar'); + if ($event_calendar_personal_manage != 'no') { + $authorised = TRUE; + } else { + if(isadminloggedin()) { + $authorised = TRUE; + } else { + // load the event from the database + if ($event && ($event->owner_guid == $user_id)) { + $authorised = TRUE; + } + } + } + + return $authorised; +} + +function event_calendar_send_event_request($event,$user_id) { + global $CONFIG; + $result = FALSE; + if(add_entity_relationship($user_id, 'event_calendar_request', $event->guid)) { + $subject = elgg_echo('event_calendar:request_subject'); + $name = get_entity($user_id)->name; + $title = $event->title; + $url = $event->getUrl(); + $link = $CONFIG->wwwroot.'pg/event_calendar/review_requests/'.$event->guid; + $message = sprintf(elgg_echo('event_calendar:request_message'),$name,$title,$url,$link); + notify_user($event->owner_guid,$CONFIG->site->guid,$subject,$message); + $result = TRUE; + } + return $result; +} + +?> \ No newline at end of file diff --git a/pages/review_requests.php b/pages/review_requests.php new file mode 100644 index 000000000..fc6c3726a --- /dev/null +++ b/pages/review_requests.php @@ -0,0 +1,33 @@ + 'event_calendar_request', + 'relationship_guid' => $event_id, + 'inverse_relationship' => TRUE, + 'limit' => 9999) + ); + if ($requests) { + $body = elgg_view('event_calendar/review_requests',array('requests' => $requests, 'entity' => $event)); + //$body = elgg_view('page_elements/contentwrapper',array('body'=>$body)); + } else { + $body = elgg_view('page_elements/contentwrapper',array('body'=>elgg_echo('event_calendar:review_requests_request_none'))); + } +} else { + $body = elgg_view('page_elements/contentwrapper',array('body'=>elgg_echo('event_calendar:review_requests_error'))); +} + +$body = elgg_view_layout('two_column_left_sidebar', '', elgg_view_title($title).$body); + +page_draw($title, $body); +?> \ No newline at end of file diff --git a/show_event.php b/show_event.php new file mode 100644 index 000000000..f2869c36d --- /dev/null +++ b/show_event.php @@ -0,0 +1,60 @@ + + * @copyright Radagast Solutions 2008 + * @link http://radagast.biz/ + * + */ + +// Load Elgg engine +require_once(dirname(dirname(dirname(__FILE__))) . "/engine/start.php"); + +// Load event calendar model +require_once(dirname(__FILE__) . "/models/model.php"); + +// Define context +set_context('event_calendar'); + +global $CONFIG; + +$event_id = get_input('event_id',0); +if ($event_id && ($event = get_entity($event_id))) { + $event_container = get_entity($event->container_guid); + if ($event_container instanceOf ElggGroup) { + // Re-define context + set_context('groups'); + set_page_owner($event_container->getGUID()); + } + $count = event_calendar_get_users_for_event($event_id,0,0,true); + if ($count > 0) { + add_submenu_item(sprintf(elgg_echo('event_calendar:personal_event_calendars_link'),$count), $CONFIG->url . "mod/event_calendar/display_event_users.php?event_id=".$event_id, '0eventnonadmin'); + } + if (isloggedin()) { + $user_id = get_loggedin_userid(); + if (event_calendar_personal_can_manage($event,$user_id)) { + if (event_calendar_has_personal_event($event_id,$user_id)) { + add_submenu_item(elgg_echo('event_calendar:remove_from_my_calendar'), $CONFIG->url . "action/event_calendar/manage?event_action=remove_personal&event_id=".$event_id.'&'.event_calendar_security_fields(), '0eventnonadmin'); + } else { + if (!event_calendar_is_full($event_id) && !event_calendar_has_collision($event_id,$user_id)) { + add_submenu_item(elgg_echo('event_calendar:add_to_my_calendar'), $CONFIG->url . "action/event_calendar/manage?event_action=add_personal&event_id=".$event_id.'&'.event_calendar_security_fields(), '0eventnonadmin'); + } + } + } else { + if (!check_entity_relationship($user_id, 'event_calendar_request', $event_id)) { + add_submenu_item(elgg_echo('event_calendar:make_request_title'), $CONFIG->url . "action/event_calendar/request_personal_calendar?event_id=".$event_id.'&'.event_calendar_security_fields(), '0eventnonadmin'); + } + } + } + $body = elgg_view('object/event_calendar',array('entity'=>$event,'full'=>true)); + $title = $event->title; + page_draw($title,elgg_view_layout("two_column_left_sidebar", '', elgg_view_title($title) . $body)); +} else { + register_error('event_calendar:error_nosuchevent'); + forward(); +} +?> \ No newline at end of file diff --git a/show_events.php b/show_events.php new file mode 100644 index 000000000..4d8f09702 --- /dev/null +++ b/show_events.php @@ -0,0 +1,213 @@ + + * @copyright Radagast Solutions 2008 + * @link http://radagast.biz/ + * + */ + +// Load Elgg engine +require_once(dirname(dirname(dirname(__FILE__))) . "/engine/start.php"); + +// Load event model +require_once(dirname(__FILE__) . "/models/model.php"); + +// Define context +set_context('event_calendar'); + +global $CONFIG; + +global $autofeed; +$autofeed = true; + +$event = ''; + +$event_calendar_listing_format = get_plugin_setting('listing_format', 'event_calendar'); +$event_calendar_spots_display = trim(get_plugin_setting('spots_display', 'event_calendar')); +$event_calendar_first_date = trim(get_plugin_setting('first_date', 'event_calendar')); +$event_calendar_last_date = trim(get_plugin_setting('last_date', 'event_calendar')); + +$original_start_date = get_input('start_date',date('Y-m-d')); +if ( $event_calendar_first_date && ($original_start_date < $event_calendar_first_date) ) { + $original_start_date = $event_calendar_first_date; +} +if ( $event_calendar_last_date && ($original_start_date > $event_calendar_last_date) ) { + $original_start_date = $event_calendar_first_date; +} + +if ($event_calendar_listing_format == 'paged') { + $start_ts = strtotime($original_start_date); + $start_date = $original_start_date; + if ($event_calendar_last_date) { + $end_ts = strtotime($event_calendar_last_date); + } else { + // set to a large number + $end_ts = 2000000000; + } +} else { + + // the default interval is one month + $day = 60*60*24; + $week = 7*$day; + $month = 31*$day; + + $mode = trim(get_input('mode','')); + + if ($mode == "day") { + $start_date = $original_start_date; + $end_date = $start_date; + $start_ts = strtotime($start_date); + $end_ts = strtotime($end_date)+$day-1; + } else if ($mode == "week") { + // need to adjust start_date to be the beginning of the week + $start_ts = strtotime($original_start_date); + $start_ts -= date("w",$start_ts)*$day; + $end_ts = $start_ts + 6*$day; + + $start_date = date('Y-m-d',$start_ts); + $end_date = date('Y-m-d',$end_ts); + } else { + $start_ts = strtotime($original_start_date); + $month = date('m',$start_ts); + $year = date('Y',$start_ts); + $start_date = $year.'-'.$month.'-1'; + $end_date = $year.'-'.$month.'-'.getLastDayOfMonth($month,$year); + //$subtitle = elgg_echo('event_calendar:month_label').': '.date('F Y',$start_ts); + // RIBA wants month prefix removed + } + + if ($event_calendar_first_date && ($start_date < $event_calendar_first_date)) { + $start_date = $event_calendar_first_date; + } + + if ($event_calendar_last_date && ($end_date > $event_calendar_last_date)) { + $end_date = $event_calendar_last_date; + } + + $start_ts = strtotime($start_date); + + if ($mode == "day") { + $end_ts = strtotime($end_date)+$day-1; + $subtitle = elgg_echo('event_calendar:day_label').': '.date('j F Y',strtotime($start_date)); + } else if ($mode == "week") { + $end_ts = $start_ts + 6*$day; + $subtitle = elgg_echo('event_calendar:week_label').': '.date('j F',$start_ts) . ' - '.date('j F Y',$end_ts); + } else { + //$subtitle = elgg_echo('event_calendar:month_label').': '.date('F Y',$start_ts); + // RIBA wants month prefix removed + $end_ts = strtotime($end_date); + $subtitle = date('F Y',$start_ts); + } +} + +$group_guid = (int) get_input('group_guid',0); +if ($group_guid && $group = get_entity($group_guid)) { + // redefine context + set_context('groups'); + set_page_owner($group_guid); + $group_calendar = get_plugin_setting('group_calendar', 'event_calendar'); + if (!$group_calendar || $group_calendar == 'members') { + if (page_owner_entity()->canWriteToContainer($_SESSION['user'])){ + add_submenu_item(elgg_echo('event_calendar:new'), $CONFIG->url . "pg/event_calendar/new/?group_guid=" . page_owner(), '1eventcalendaradmin'); + } + } else if ($group_calendar == 'admin') { + if (isadminloggedin() || ($group->owner_guid == get_loggedin_userid())) { + add_submenu_item(elgg_echo('event_calendar:new'), $CONFIG->url . "pg/event_calendar/new/?group_guid=" . page_owner(), '1eventcalendaradmin'); + } + } +} + +$offset = get_input('offset'); + +if ($offset != NULL) { + // don't allow ajax magic during pagination + $offset = (int) $offset; + $callback=''; +} else { + $offset = 0; + $callback = get_input('callback',''); +} + +$limit = 15; +if ($event_calendar_spots_display == 'yes') { + $filter = get_input('filter','open'); +} else { + $filter = get_input('filter','all'); +} +$region = get_input('region','-'); +if ($filter == 'all') { + $count = event_calendar_get_events_between($start_ts,$end_ts,true,$limit,$offset,$group_guid,$region); + $events = event_calendar_get_events_between($start_ts,$end_ts,false,$limit,$offset,$group_guid,$region); +} else if ($filter == 'open') { + $count = event_calendar_get_open_events_between($start_ts,$end_ts,true,$limit,$offset,$group_guid,$region); + $events = event_calendar_get_open_events_between($start_ts,$end_ts,false,$limit,$offset,$group_guid,$region); +} else if ($filter == 'friends') { + $user_guid = get_loggedin_userid(); + $count = event_calendar_get_events_for_friends_between($start_ts,$end_ts,true,$limit,$offset,$user_guid,$group_guid,$region); + $events = event_calendar_get_events_for_friends_between($start_ts,$end_ts,false,$limit,$offset,$user_guid,$group_guid,$region); +} else if ($filter == 'mine') { + $user_guid = get_loggedin_userid(); + $count = event_calendar_get_events_for_user_between($start_ts,$end_ts,true,$limit,$offset,$user_guid,$group_guid,$region); + $events = event_calendar_get_events_for_user_between($start_ts,$end_ts,false,$limit,$offset,$user_guid,$group_guid,$region); +} + +extend_view('metatags','event_calendar/metatags'); + +$vars = array( 'original_start_date' => $original_start_date, + 'start_date' => $start_date, + 'end_date' => $end_date, + 'first_date' => $event_calendar_first_date, + 'last_date' => $event_calendar_last_date, + 'mode' => $mode, + 'events' => $events, + 'count' => $count, + 'offset' => $offset, + 'limit' => $limit, + 'group_guid' => $group_guid, + 'filter' => $filter, + 'region' => $region, + 'listing_format' => $event_calendar_listing_format, +); + +if ($callback) { + if (isloggedin()) { + $nav = elgg_view('event_calendar/nav',$vars); + } else { + $nav = ''; + } + if ($events) { + if (get_plugin_setting('agenda_view', 'event_calendar') == 'yes') { + $event_list = elgg_view('event_calendar/agenda_view',$vars); + } else { + $event_list = elgg_view_entity_list($events, $count, $offset, $limit, false, false); + } + } else { + $event_list = '

'.elgg_echo('event_calendar:no_events_found').'

'; + } + echo $nav.'
'.$event_list; +} else { + + $body = elgg_view('event_calendar/show_events', $vars); + + if ($event_calendar_listing_format == 'paged') { + $title = elgg_echo('event_calendar:upcoming_events_title'); + } else { + $title = elgg_echo('event_calendar:show_events_title'). ' ('.$subtitle.')'; + } + + $body = elgg_view('page_elements/contentwrapper',array('body' =>$body, 'subclass' => 'events')); + + page_draw($title,elgg_view_layout("two_column_left_sidebar", '', elgg_view_title($title).$body)); +} + +function getLastDayOfMonth($month,$year) { + return idate('d', mktime(0, 0, 0, ($month + 1), 0, $year)); +} + + +?> \ No newline at end of file diff --git a/start.php b/start.php new file mode 100644 index 000000000..d12f56848 --- /dev/null +++ b/start.php @@ -0,0 +1,190 @@ + + * @copyright Radagast Solutions 2008 + * @link http://radagast.biz/ + */ + // Load event calendar model + require_once(dirname(__FILE__) . "/models/model.php"); + /** + * event calendar initialisation + * + * These parameters are required for the event API, but we won't use them: + * + * @param unknown_type $event + * @param unknown_type $object_type + * @param unknown_type $object + */ + + function event_calendar_init() { + + // Load system configuration + global $CONFIG; + + // Register a page handler, so we can have nice URLs + register_page_handler('event_calendar','event_calendar_page_handler'); + + // Register URL handler + register_entity_url_handler('event_calendar_url','object', 'event_calendar'); + + // Register granular notification for this type + if (is_callable('register_notification_object')) + register_notification_object('object', 'event_calendar', elgg_echo('event_calendar:new_event')); + + // Set up menu for users + if (isloggedin()) { + $site_calendar = get_plugin_setting('site_calendar', 'event_calendar'); + if (!$site_calendar || $site_calendar != 'no') { + add_menu(elgg_echo('item:object:event_calendar'), $CONFIG->wwwroot . "pg/event_calendar/"); + } + } + // make tags searchable for Elgg 1.7.4 + if (function_exists('elgg_register_tag_metadata_name')) { + elgg_register_tag_metadata_name('event_tags'); + } + + //add to group profile page + $group_calendar = get_plugin_setting('group_calendar', 'event_calendar'); + if (!$group_calendar || $group_calendar != 'no') { + $group_profile_display = get_plugin_setting('group_profile_display', 'event_calendar'); + if (!$group_profile_display || $group_profile_display == 'right') { + extend_view('groups/right_column', 'event_calendar/groupprofile_calendar'); + } else if ($group_profile_display == 'left') { + extend_view('groups/left_column', 'event_calendar/groupprofile_calendar'); + } + } + + //add to the css + extend_view('css', 'event_calendar/css'); + + //add a widget + add_widget_type('event_calendar',elgg_echo("event_calendar:widget_title"),elgg_echo('event_calendar:widget:description')); + + // add the event calendar group tool option + if (function_exists('add_group_tool_option')) { + $event_calendar_group_default = get_plugin_setting('group_default', 'event_calendar'); + if (!$event_calendar_group_default || ($event_calendar_group_default == 'yes')) { + add_group_tool_option('event_calendar',elgg_echo('event_calendar:enable_event_calendar'),true); + } else { + add_group_tool_option('event_calendar',elgg_echo('event_calendar:enable_event_calendar'),false); + } + } + + // if autogroup is set, listen and respond to join/leave events + if (get_plugin_setting('autogroup', 'event_calendar') == 'yes') { + register_elgg_event_handler('join', 'group', 'event_calendar_handle_join'); + register_elgg_event_handler('leave', 'group', 'event_calendar_handle_leave'); + } + + register_entity_type('object','event_calendar'); + } + + function event_calendar_pagesetup() { + + global $CONFIG; + + $page_owner = page_owner_entity(); + + $context = get_context(); + + // Group submenu option + if ($page_owner instanceof ElggGroup && $context == 'groups') { + if (event_calendar_activated_for_group($page_owner)) { + add_submenu_item(elgg_echo("event_calendar:group"), $CONFIG->wwwroot . "pg/event_calendar/group/" . $page_owner->getGUID()); + } + } else if ($context == 'event_calendar'){ + add_submenu_item(elgg_echo("event_calendar:site_wide_link"), $CONFIG->wwwroot . "pg/event_calendar/"); + $site_calendar = get_plugin_setting('site_calendar', 'event_calendar'); + if (!$site_calendar || $site_calendar == 'admin') { + if (isadminloggedin()) { + // only admins can post directly to the site-wide calendar + add_submenu_item(elgg_echo('event_calendar:new'), $CONFIG->url . "pg/event_calendar/new/", 'eventcalendaractions'); + } + } else if ($site_calendar == 'loggedin') { + // any logged-in user can post to the site calendar + if (isloggedin()) { + add_submenu_item(elgg_echo('event_calendar:new'), $CONFIG->url . "pg/event_calendar/new/", 'eventcalendaractions'); + } + } + } + + if (($context == 'groups') || ($context == 'event_calendar')) { + if (($event_id = get_input('event_id',0)) && ($event = get_entity($event_id))) { + if (isadminloggedin() && (get_plugin_setting('allow_featured', 'event_calendar') == 'yes')) { + if ($event->featured) { + add_submenu_item(elgg_echo('event_calendar:unfeature'), $CONFIG->url . "action/event_calendar/unfeature?event_id=".$event_id.'&'.event_calendar_security_fields(), 'eventcalendaractions'); + } else { + add_submenu_item(elgg_echo('event_calendar:feature'), $CONFIG->url . "action/event_calendar/feature?event_id=".$event_id.'&'.event_calendar_security_fields(), 'eventcalendaractions'); + } + } + add_submenu_item(elgg_echo("event_calendar:view_link"), $CONFIG->wwwroot . "pg/event_calendar/view/" . $event_id,'0eventcalendaradmin'); + if ($event->canEdit()) { + add_submenu_item(elgg_echo("event_calendar:edit_link"), $CONFIG->wwwroot . "mod/event_calendar/manage_event.php?event_id=" . $event_id,'0eventcalendaradmin'); + add_submenu_item(elgg_echo("event_calendar:delete_link"), $CONFIG->wwwroot . "mod/event_calendar/delete_confirm.php?event_id=" . $event_id,'0eventcalendaradmin'); + $event_calendar_personal_manage = get_plugin_setting('personal_manage', 'event_calendar'); + if ($event_calendar_personal_manage == 'no') { + add_submenu_item(elgg_echo('event_calendar:review_requests_title'), $CONFIG->wwwroot . "pg/event_calendar/review_requests/".$event_id, '0eventcalendaradmin'); + } + } + } + } + } + + function event_calendar_url($entity) { + global $CONFIG; + return $CONFIG->url . 'pg/event_calendar/view/'.$entity->getGUID(); + } + + /** + * Page handler; allows the use of fancy URLs + * + * @param array $page From the page_handler function + * @return true|false Depending on success + */ + function event_calendar_page_handler($page) { + if (isset($page[0]) && $page[0]) { + if (($page[0] == 'group') && isset($page[1])) { + set_input('group_guid',$page[1]); + if (isset($page[2])) { + set_input('filter',$page[2]); + } + @include(dirname(__FILE__) . "/show_events.php"); + } else if (($page[0] == 'view') && isset($page[1])) { + set_input('event_id',$page[1]); + @include(dirname(__FILE__) . "/show_event.php"); + } else if ($page[0] == 'new') { + @include(dirname(__FILE__) . "/manage_event.php"); + } else if ($page[0] == 'review_requests' && isset($page[1])) { + set_input('event_id',$page[1]); + @include(dirname(__FILE__) . "/pages/review_requests.php"); + } else if (in_array($page[0],array('all','friends','mine'))) { + set_input('filter',$page[0]); + @include(dirname(__FILE__) . "/show_events.php"); + } + } else { + @include(dirname(__FILE__) . "/show_events.php"); + } + return true; + } + +// Make sure the event calendar functions are called + register_elgg_event_handler('init','system','event_calendar_init'); + register_elgg_event_handler('pagesetup','system','event_calendar_pagesetup'); + +// Register actions + + global $CONFIG; + register_action("event_calendar/manage",false,$CONFIG->pluginspath . "event_calendar/actions/manage.php"); + register_action("event_calendar/request_personal_calendar",false,$CONFIG->pluginspath . "event_calendar/actions/request_personal_calendar.php"); + register_action("event_calendar/toggle_personal_calendar",false,$CONFIG->pluginspath . "event_calendar/actions/toggle_personal_calendar.php"); + register_action("event_calendar/killrequest",false,$CONFIG->pluginspath . "event_calendar/actions/killrequest.php"); + register_action("event_calendar/addtocalendar",false,$CONFIG->pluginspath . "event_calendar/actions/addtocalendar.php"); + register_action("event_calendar/add_to_group",false,$CONFIG->pluginspath . "event_calendar/actions/add_to_group.php"); + register_action("event_calendar/remove_from_group",false,$CONFIG->pluginspath . "event_calendar/actions/remove_from_group.php"); + +?> \ No newline at end of file diff --git a/trunk/CHANGES.txt b/trunk/CHANGES.txt deleted file mode 100644 index 0a484cebe..000000000 --- a/trunk/CHANGES.txt +++ /dev/null @@ -1,150 +0,0 @@ -CHANGE LOG -0.84 - -Fixed tag search so it works for Elgg 1.7.x. - -Added French and Spanish language files provided by UNESCO. These are not -quite complete and additions are welcome. - -There is now an option to allow group admins to add any existing event to a -group calendar - -Fixed a bug which incorrectly removed the ability to change the date and year. - -Renamed a date picker view to avoid a conflict with the Profile Manager. - -Added unpacked js for ease in customisation and localisation. - -Restored the vanished RSS feed link. - -Fixed a bug in the region dropdown behaviour on listing pages. - -Fixed a case where the page was not properly displayed when clicking on a -pagination link. - -Added a sanity check for date formats. - -Changed the listing limit from 4 events to a more reasonable 15 events. - -Added real_end_time as an internal metadata value to compute collisions. - -Added three features that are turned off by default but can be enabled -through plugin settings: - -The spots feature allows you to specify how many users can add an event to -their personal calendars. This also adds an "open" filter to the show events page -so that you can see how many events are not full. - -The no collisions feature prevents someone from adding an event -if they already have another event on their personal calendar within -the same time period. (This will only work with new events or events that -you have resaved after updating this plugin as it needs the new real_end_time -field.) - -The add users feature provides a magic JavaScript field that -allows an event creator to add the event to the personal calendars of other users. -This appears on the event edit form. (Requires the separate autocomplete plugin.) - -There is a separate option (turned off by default) to send notifications to -users who have events added to their calendars through the add users feature. - -0.83 - -Fixed a bug that prevented region filtering with embedded blanks from -working properly (thanks Patrick!). - -Added a new paged view for events (not month specific) that allows adding/removing events -to a calendar with one click. - -Fixed some issues with the personal event calendar widget. - -0.82 - -Fixed a bug in displaying dates when the start and end date were the same. - -Fixed the form redisplay bug described here: -http://community.elgg.org/mod/groups/topicposts.php?topic=423853&group_guid=263011 - -Removed an error_log message that was accidentally left in. - -Added RSS feeds. - -Added the ability to filter events by regions if the region option is turned on. - -Added security tokens for Elgg 1.7 - -0.81 - -Fixed a problem with the group "widget" not displaying when it should. - -Hid the "Today" link as it was not behaving as most people expected. - -Forced the display into Month mode after Prev and Next is clicked. - -0.8 - -Removed a debugging message left in the event delete action. - -Sorted events properly by date/time rather than time created. - -Fixed an error in the parameters passed to elgg_view_entity_list that caused -problems with Elgg 1.6.1. - -Added an admin toggle to allow event times as well as dates. - -Added an admin toggle to show the venue in event listings. - -Added an admin toggle for an agenda view which should be useful for conferences -with multiple events on one day. - -Added the ability to "lock" the show_events page so that the calendar only -allows navigation between a first date and a last date. - -Added an admin toggle for an autogroup function that automatically adds all -group events to a user's calendar for all groups that the user is a member of. -Group events are also automatically removed if the user leaves the group. - -Added an admin toggle to add a region drop down to the event form and a field to -enter the allowable regions. - -0.7 - -Reworked design for Elgg 1.5 - -Fixed several bugs, including in the list of people who added an event to -their personal calendar (now shows the proper group navigation if this is -a group event). - -Added the ability to view all/friends/mine events for logged-in users. - -Added numerous configuration options (accessible via event_calendar settings -on the admin tools configuration page). This allows, for example, any logged-in -user to add events to the site calendar, to remove group calendars, etc. - -People who create an event now have the event automatically added to their -personal event calendar. This behaviour can be configured via the admin event -calendar settings. - -0.6 - -Fixed a bug that prevented more than one person adding a given event to -his/her personal calendar. - -Fixed a bug that made the page owner the person who created the event. This -is now the group for group events, otherwise the currently logged in user. - -Added river support. - -0.51 - -Fixed event overlap detection - -0.5 - -Initial release - - - - - - diff --git a/trunk/CONTRIBUTIONS.txt b/trunk/CONTRIBUTIONS.txt deleted file mode 100644 index edadc2407..000000000 --- a/trunk/CONTRIBUTIONS.txt +++ /dev/null @@ -1,7 +0,0 @@ -Pete Harris from Curverider contributed the icons. Thanks Pete! - -Igor Nuk from UNESCO sent me Spanish and French language files as well -as a version tweaked to make it easier to customise. - -Many clients too numerous to mention have funded enhancements since the -original version was funded by the Royal Institute of British Architects. \ No newline at end of file diff --git a/trunk/README.txt b/trunk/README.txt deleted file mode 100644 index 3cb68ee3b..000000000 --- a/trunk/README.txt +++ /dev/null @@ -1,83 +0,0 @@ -/** - * Manage and display events - * - * @package event_calendar - * @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.html GNU Public License version 2 - * @author Kevin Jardine - * @copyright Radagast Solutions 2008 - * @link http://radagast.biz/ - * - */ - - Note: this README.txt file is a bit outdated because it does not describe numerous - recently added features. For more information, check the CHANGES.txt file - or look at the event calendar settings available through Tools Administration. - -Version: 0.8 - -Requires: Elgg 1.5 or higher - -*Description* - -The event_calendar plugin adds a site-wide event calendar as well as -an event calendar to each group. Various options related to the site and group -calendars can be set using the event calendar settings on the tool -administration page. - -Group members can view events by month, week and day using a jQuery date -picker widget, and submit event descriptions including the venue, start date, -end date, tags, description, organiser, contact person, event access level, -and fees if any. - -Group events are aggregated into the site wide event calendar accessible from -the Tools menu drop down. - -Site admins (or optionally any user) can also add non-group-specific events to -the site-wide calendar. - -Users can add group or site-wide events to a personal calendar to showcase -events that they plan to attend or are interested in. They can optionally -display these events by dragging an Event calendar widget onto their profile -or dashboard. - -The number of users who have added an event to their personal gallery is listed -on each event page along with a link to a page that displays these users in a -gallery format. It is thus easy to find other people interested in the same -event. - -*Admin settings* - -Numerous options for the event calendar can be set in the event_calendar settings -area under Tool Administration. - -These include: - -Add starting and ending times as well as dates to events (default: no) - -Automatically add events a user creates to his/her personal calendar (default: yes) - -Automatically add group events for all members to their personal calendars (default: no) - -(If activated, the autogroup function automatically adds all group events to a -user's calendar for all groups that the user is a member of. Group events are -also automatically removed if the user leaves the group.) - -Use Agenda view (default: no) - -Useful for conferences with multiple events on the same day. - -Display venue in event listings (default: no) - -Add region dropdown (default: no), plus a way to specify the allowable regions - -First date displayable on show events pages (default: no first date) - -Last date displayable on show events pages (default: no last date) - -As well, there are numerous options for configuring the site wide and group calendars. - -*Acknowledgment* - -The initial development of the event calendar plugin was funded by the Research -& Development department at the Royal Institute of British Architects -(RIBA). Several other clients have funded enhancements. \ No newline at end of file diff --git a/trunk/actions/add_to_group.php b/trunk/actions/add_to_group.php deleted file mode 100644 index b8c18ebb0..000000000 --- a/trunk/actions/add_to_group.php +++ /dev/null @@ -1,11 +0,0 @@ -canEdit()) { - add_entity_relationship($event_id, "display_on_group", $group_id ); - system_message(elgg_echo('event_calendar:add_to_group:success')); -} -forward($event->getUrl()); -?> \ No newline at end of file diff --git a/trunk/actions/addtocalendar.php b/trunk/actions/addtocalendar.php deleted file mode 100644 index cb83aab88..000000000 --- a/trunk/actions/addtocalendar.php +++ /dev/null @@ -1,36 +0,0 @@ -site->guid, elgg_echo('event_calendar:add_users_notify:subject'), - sprintf( - elgg_echo('event_calendar:add_users_notify:body'), - $user->name, - $event->title, - $event->getURL() - ) - ); - system_message(elgg_echo('event_calendar:request_approved')); - - } -} else { - register_error(elgg_echo('event_calendar:review_requests_error')); -} - -forward($_SERVER['HTTP_REFERER']); diff --git a/trunk/actions/killrequest.php b/trunk/actions/killrequest.php deleted file mode 100644 index 66257230c..000000000 --- a/trunk/actions/killrequest.php +++ /dev/null @@ -1,23 +0,0 @@ -guid, 'event_calendar_request', $event->guid)) - { - remove_entity_relationship($user->guid, 'event_calendar_request', $event->guid); - system_message(elgg_echo('event_calendar:requestkilled')); - } - - forward($_SERVER['HTTP_REFERER']); - -?> \ No newline at end of file diff --git a/trunk/actions/manage.php b/trunk/actions/manage.php deleted file mode 100644 index 5acf5c279..000000000 --- a/trunk/actions/manage.php +++ /dev/null @@ -1,105 +0,0 @@ - - * @copyright Radagast Solutions 2008 - * @link http://radagast.biz/ - * - */ - -// Load RIBA event model -require_once(dirname(dirname(__FILE__)) . "/models/model.php"); - -gatekeeper(); - -$event_action = get_input('event_action',''); -if ($event_action == 'add_event' || $event_action == 'manage_event') { - $result = event_calendar_set_event_from_form(); - if ($result->success) { - if ($event_action == 'manage_event') { - add_to_river('river/object/event_calendar/update','update',$_SESSION['user']->guid,$result->event->guid); - system_message(elgg_echo('event_calendar:manage_event_response')); - } else { - $event_calendar_autopersonal = get_plugin_setting('autopersonal', 'event_calendar'); - if (!$event_calendar_autopersonal || ($event_calendar_autopersonal == 'yes')) { - event_calendar_add_personal_event($result->event->guid,$_SESSION['user']->guid); - } - add_to_river('river/object/event_calendar/create','create',$_SESSION['user']->guid,$result->event->guid); - system_message(elgg_echo('event_calendar:add_event_response')); - } - - forward($result->event->getURL()); - } else { - // redisplay form with error message - register_error(elgg_echo('event_calendar:manage_event_error')); - $group_guid = (int) get_input('group_guid',0); - - if ($result->form_data->event_id) { - $event = get_entity($result->form_data->event_id); - if (!$event) { - register_error(elgg_echo('event_calendar:no_such_event_edit_error')); - forward(); - } else { - set_page_owner($event->container_guid); - if (page_owner_entity() instanceof ElggGroup) { - set_context('groups'); - } - } - - $title = elgg_echo('event_calendar:manage_event_title'); - } else { - $title = elgg_echo('event_calendar:add_event_title'); - if ($group_guid && $group = get_entity($group_guid)) { - // redefine context - set_context('groups'); - set_page_owner($group_guid); - } - } - $body = elgg_view('event_calendar/forms/manage_event', array('event'=>$result->form_data,'event_id'=>$result->form_data->event_id,'group_guid'=>$group_guid)); - - page_draw($title,elgg_view_layout("two_column_left_sidebar", '', elgg_view_title($title) . $body)); - } -} else if ($event_action == 'delete_event') { - $event_id = get_input('event_id',0); - if (($event_id = get_input('event_id',0)) && ($event = get_entity($event_id)) && $event->canEdit()) { - if (get_input('cancel','')) { - system_message(elgg_echo('event_calendar:delete_cancel_response')); - forward($event->getUrl()); - } else { - $container = get_entity($event->container_guid); - $event->delete(); - system_message(elgg_echo('event_calendar:delete_response')); - forward($container->getUrl()); - } - } else { - register_error(elgg_echo('event_calendar:error_delete')); - } -} else if ($event_action == 'add_personal') { - $event_id = get_input('event_id',0); - if (($event_id = get_input('event_id',0)) && ($event = get_entity($event_id))) { - $user_id = $_SESSION['user']->getGUID(); - if (!event_calendar_has_personal_event($event_id,$user_id)) { - if (event_calendar_add_personal_event($event_id,$user_id)) { - system_message(elgg_echo('event_calendar:add_to_my_calendar_response')); - } else { - register_error(elgg_echo('event_calendar:add_to_my_calendar_error')); - } - forward($event->getUrl()); - } - } -} else if ($event_action == 'remove_personal') { - $event_id = get_input('event_id',0); - if (($event_id = get_input('event_id',0)) && ($event = get_entity($event_id))) { - event_calendar_remove_personal_event($event_id,$_SESSION['user']->getGUID()); - system_message(elgg_echo('event_calendar:remove_from_my_calendar_response')); - forward($event->getUrl()); - } -} - -forward(); - -?> \ No newline at end of file diff --git a/trunk/actions/remove_from_group.php b/trunk/actions/remove_from_group.php deleted file mode 100644 index 4a7185245..000000000 --- a/trunk/actions/remove_from_group.php +++ /dev/null @@ -1,8 +0,0 @@ -getUrl()); -?> \ No newline at end of file diff --git a/trunk/actions/request_personal_calendar.php b/trunk/actions/request_personal_calendar.php deleted file mode 100644 index 4160326a6..000000000 --- a/trunk/actions/request_personal_calendar.php +++ /dev/null @@ -1,18 +0,0 @@ -getSubtype() == 'event_calendar')) { - if (event_calendar_send_event_request($event,$user_id)) { - system_message(elgg_echo('event_calendar:request_event_response')); - } else { - register_error(elgg_echo('event_calendar:request_event_error')); - } - - forward($event->getUrl()); - - exit; -} - -forward(); diff --git a/trunk/actions/toggle_personal_calendar.php b/trunk/actions/toggle_personal_calendar.php deleted file mode 100644 index f36b5836f..000000000 --- a/trunk/actions/toggle_personal_calendar.php +++ /dev/null @@ -1,30 +0,0 @@ - \ No newline at end of file diff --git a/trunk/datepicker.css b/trunk/datepicker.css deleted file mode 100644 index 64f486908..000000000 --- a/trunk/datepicker.css +++ /dev/null @@ -1,234 +0,0 @@ -/* Main Style Sheet for jQuery UI ui-datepicker */ -#ui-datepicker-div, .ui-datepicker-inline { - font-family: Arial,Helvetica,sans-serif; - font-size: 14px; - padding: 0; - margin: 0; - background: #F5F5F5; - width: 185px; -} -#ui-datepicker-div { - display: none; - border: 1px solid #FF9900; - z-index: 10; -} -.ui-datepicker-inline { - float: left; - display: block; - border: 0; -} -.ui-datepicker-rtl { - direction: rtl; -} -.ui-datepicker-dialog { - padding: 5px !important; - border: 4px ridge #83C948 !important; -} -button.ui-datepicker-trigger { - width: 25px; -} -img.ui-datepicker-trigger { - margin: 2px; - vertical-align: middle; -} -.ui-datepicker-prompt { - float: left; - padding: 2px; - background: #F5F5F5; - color: #000; -} -*html .ui-datepicker-prompt { - width: 185px; -} -.ui-datepicker-control, .ui-datepicker-links, .ui-datepicker-header, .ui-datepicker { - clear: both; - float: left; - width: 100%; - color: #FFF; -} -.ui-datepicker-control { - background: #FF9900; - padding: 2px 0px; -} -.ui-datepicker-links { - background: #F5F5F5; - padding: 2px 0px; -} -.ui-datepicker-control, .ui-datepicker-links { - font-weight: bold; - font-size: 80%; - letter-spacing: 1px; -} - -/* KJ change this to avoid weird display change */ -/*.ui-datepicker-links label { - padding: 2px 5px; - color: #888; -}*/ - -.ui-datepicker-links label { - font-weight: bold; - font-size: 100%; - padding: 2px 5px; - letter-spacing: 1px; -} -.ui-datepicker-clear, .ui-datepicker-prev { - float: left; - width: 34%; -} -.ui-datepicker-rtl .ui-datepicker-clear, .ui-datepicker-rtl .ui-datepicker-prev { - float: right; - text-align: right; -} -.ui-datepicker-current { - float: left; - width: 30%; - text-align: center; -} -.ui-datepicker-close, .ui-datepicker-next { - float: right; - width: 34%; - text-align: right; -} -.ui-datepicker-rtl .ui-datepicker-close, .ui-datepicker-rtl .ui-datepicker-next { - float: left; - text-align: left; -} -.ui-datepicker-header { - padding: 1px 0 3px; - background: #3873B6; - text-align: center; - font-weight: bold; - height: 1.3em; - color: #FFFFFF; -} -.ui-datepicker-header select { - background: #3873B6; - color: #FFFFFF; - border: 0px; - font-weight: bold; -} -.ui-datepicker { - background: #CCC; - text-align: center; - font-size: 100%; -} -.ui-datepicker a { - display: block; - width: 100%; -} -.ui-datepicker-title-row { - background: #E3E3E3; - color: #000; -} -.ui-datepicker-title-row .ui-datepicker-week-end-cell { - background: #E3E3E3; -} -.ui-datepicker-days-row { - background: #FFF; - /*color: #666;*/ -} -.ui-datepicker-week-col { - background: #E3E3E3; - color: #000; -} -.ui-datepicker-days-cell { - /*color: #000;*/ - border: 1px solid #DDD; -} -.ui-datepicker-days-cell a { - display: block; -} -.ui-datepicker-week-end-cell { - background: #F5F5F5; -} -.ui-datepicker-unselectable { - color: #888; -} -.ui-datepicker-week-over, .ui-datepicker-week-over .ui-datepicker-week-end-cell { - background: #E3E3E3 !important; -} -.ui-datepicker-days-cell-over, .ui-datepicker-days-cell-over.ui-datepicker-week-end-cell { - background: #FFF !important; - border: 1px solid #777; -} -* html .ui-datepicker-title-row .ui-datepicker-week-end-cell { - background: #E3E3E3 !important; -} -* html .ui-datepicker-week-end-cell { - background: #F5F5F5 !important; - border: 1px solid #DDD !important; -} -* html .ui-datepicker-days-cell-over { - background: #FFF !important; - border: 1px solid #777 !important; -} -* html .ui-datepicker-current-day { - background: #3873B6 !important; - color: #FFFFFF !important; -} -.ui-datepicker-today { - background: #E3E3E3 !important; -} -.ui-datepicker-current-day { - background: #3873B6 !important; - color: #FFFFFF !important; -} - -.ui-datepicker-current-day a { - background: #3873B6 !important; - color: #FFFFFF !important; -} - -.ui-datepicker-status { - background: #F5F5F5; - width: 100%; - font-size: 80%; - text-align: center; -} -#ui-datepicker-div a, .ui-datepicker-inline a { - cursor: pointer; - margin: 0; - padding: 0; - background: none; - color: 000000; -} -.ui-datepicker-inline .ui-datepicker-links a { - padding: 0 5px !important; -} -.ui-datepicker-control a, .ui-datepicker-links a { - padding: 2px 5px !important; - color: #000 !important; -} -.ui-datepicker-title-row a { - color: #000 !important; -} -.ui-datepicker-control a:hover { - background: #FDD !important; - color: #333 !important; -} -.ui-datepicker-links a:hover, .ui-datepicker-title-row a:hover { - background: #FFF !important; - color: #333 !important; -} -.ui-datepicker-multi .ui-datepicker { - border: 1px solid #3873B6; -} -.ui-datepicker-one-month { - float: left; - width: 185px; -} -.ui-datepicker-new-row { - clear: left; -} -.ui-datepicker-cover { - display: none; - display/**/: block; - position: absolute; - z-index: -1; - filter: mask(); - top: -4px; - left: -4px; - width: 193px; - height: 200px; -} diff --git a/trunk/delete_confirm.php b/trunk/delete_confirm.php deleted file mode 100644 index 81bcd9118..000000000 --- a/trunk/delete_confirm.php +++ /dev/null @@ -1,36 +0,0 @@ - - * @copyright Radagast Solutions 2008 - * @link http://radagast.biz/ - * - */ - -// Load Elgg engine -require_once(dirname(dirname(dirname(__FILE__))) . "/engine/start.php"); - -// Define context -set_context('event_calendar'); - -global $CONFIG; - -$event_id = get_input('event_id',0); -if ($event_id && ($event = get_entity($event_id))) { - set_page_owner($event->container_guid); - if (page_owner_entity() instanceOf ElggGroup) { - // Re-define context - set_context('groups'); - } - $body = elgg_view('event_calendar/forms/delete_confirm',array('event_id'=>$event_id,'title'=>$event->title)); - $title = elgg_echo('event_calendar:delete_confirm_title'); - page_draw($title,elgg_view_layout("two_column_left_sidebar", '', elgg_view_title($title) . $body)); -} else { - register_error('event_calendar:error_nosuchevent'); - forward(); -} -?> \ No newline at end of file diff --git a/trunk/display_event_users.php b/trunk/display_event_users.php deleted file mode 100644 index c5d06cd8f..000000000 --- a/trunk/display_event_users.php +++ /dev/null @@ -1,42 +0,0 @@ - - * @copyright Radagast Solutions 2008 - * @link http://radagast.biz/ - * - */ - -// Load Elgg engine -require_once(dirname(dirname(dirname(__FILE__))) . "/engine/start.php"); - -// Load event calendar model -require_once(dirname(__FILE__) . "/models/model.php"); - -set_context('event_calendar'); -$limit = get_input('limit', 12); -$offset = get_input('offset', 0); -if (($event_id = get_input('event_id', 0)) && $event = get_entity($event_id)) { - $event_container = get_entity($event->container_guid); - if ($event_container instanceOf ElggGroup) { - // Re-define context - set_context('groups'); - set_page_owner($event_container->getGUID()); - } - set_input('search_viewtype','gallery'); - $count = event_calendar_get_users_for_event($event_id,$limit,$offset,true); - $users = event_calendar_get_users_for_event($event_id,$limit,$offset,false); - $body = event_calendar_view_entity_list($users, $count, $offset, $limit, true, false); - - $body .= elgg_view('event_calendar/personal_toggle_js'); - - $title = sprintf(elgg_echo('event_calendar:users_for_event_title'),$event->title); - page_draw($title,elgg_view_layout("two_column_left_sidebar", '', elgg_view_title($title) . $body)); -} else { - register_error('event_calendar:error_nosuchevent'); - forward(); -} -?> \ No newline at end of file diff --git a/trunk/flora.datepicker.css b/trunk/flora.datepicker.css deleted file mode 100644 index 20c3dabb3..000000000 --- a/trunk/flora.datepicker.css +++ /dev/null @@ -1,234 +0,0 @@ -/* Main Flora Style Sheet for jQuery UI ui-datepicker */ -#ui-datepicker-div, .ui-datepicker-inline { - font-family: Arial,Helvetica,sans-serif; - font-size: 14px; - padding: 0; - margin: 0; - background: #E0F4D7; - width: 185px; -} -#ui-datepicker-div { - display: none; - border: 1px solid #FF9900; - z-index: 10; -} -.ui-datepicker-inline { - float: left; - display: block; - border: 0; -} -.ui-datepicker-rtl { - direction: rtl; -} -.ui-datepicker-dialog { - padding: 5px !important; - border: 4px ridge #83C948 !important; -} -button.ui-datepicker-trigger { - width: 25px; -} -img.ui-datepicker-trigger { - margin: 2px; - vertical-align: middle; -} -.ui-datepicker-prompt { - float: left; - padding: 2px; - background: #E0F4D7; - color: #000; -} -*html .ui-datepicker-prompt { - width: 185px; -} -.ui-datepicker-control, .ui-datepicker-links, .ui-datepicker-header, .ui-datepicker { - clear: both; - float: left; - width: 100%; - color: #FFF; -} -.ui-datepicker-control { - background: #FF9900; - padding: 2px 0px; -} -.ui-datepicker-links { - background: #E0F4D7; - padding: 2px 0px; -} -.ui-datepicker-control, .ui-datepicker-links { - font-weight: bold; - font-size: 80%; - letter-spacing: 1px; -} - -/* KJ change this to avoid weird display change */ -/*.ui-datepicker-links label { - padding: 2px 5px; - color: #888; -}*/ - -.ui-datepicker-links label { - font-weight: bold; - font-size: 100%; - padding: 2px 5px; - letter-spacing: 1px; -} -.ui-datepicker-clear, .ui-datepicker-prev { - float: left; - width: 34%; -} -.ui-datepicker-rtl .ui-datepicker-clear, .ui-datepicker-rtl .ui-datepicker-prev { - float: right; - text-align: right; -} -.ui-datepicker-current { - float: left; - width: 30%; - text-align: center; -} -.ui-datepicker-close, .ui-datepicker-next { - float: right; - width: 34%; - text-align: right; -} -.ui-datepicker-rtl .ui-datepicker-close, .ui-datepicker-rtl .ui-datepicker-next { - float: left; - text-align: left; -} -.ui-datepicker-header { - padding: 1px 0 3px; - background: #478787; - text-align: center; - font-weight: bold; - height: 1.3em; - color: #FFFFFF; -} -.ui-datepicker-header select { - background: #478787; - color: #FFFFFF; - border: 0px; - font-weight: bold; -} -.ui-datepicker { - background: #CCC; - text-align: center; - font-size: 100%; -} -.ui-datepicker a { - display: block; - width: 100%; -} -.ui-datepicker-title-row { - background: #DAE5DC; - color: #000; -} -.ui-datepicker-title-row .ui-datepicker-week-end-cell { - background: #DAE5DC; -} -.ui-datepicker-days-row { - background: #FFF; - /*color: #666;*/ -} -.ui-datepicker-week-col { - background: #DAE5DC; - color: #000; -} -.ui-datepicker-days-cell { - /*color: #000;*/ - border: 1px solid #DDD; -} -.ui-datepicker-days-cell a { - display: block; -} -.ui-datepicker-week-end-cell { - background: #E0F4D7; -} -.ui-datepicker-unselectable { - color: #888; -} -.ui-datepicker-week-over, .ui-datepicker-week-over .ui-datepicker-week-end-cell { - background: #DAE5DC !important; -} -.ui-datepicker-days-cell-over, .ui-datepicker-days-cell-over.ui-datepicker-week-end-cell { - background: #FFF !important; - border: 1px solid #777; -} -* html .ui-datepicker-title-row .ui-datepicker-week-end-cell { - background: #DAE5DC !important; -} -* html .ui-datepicker-week-end-cell { - background: #E0F4D7 !important; - border: 1px solid #DDD !important; -} -* html .ui-datepicker-days-cell-over { - background: #FFF !important; - border: 1px solid #777 !important; -} -* html .ui-datepicker-current-day { - background: #478787 !important; - color: #FFFFFF !important; -} -.ui-datepicker-today { - background: #DAE5DC !important; -} -.ui-datepicker-current-day { - background: #478787 !important; - color: #FFFFFF !important; -} - -.ui-datepicker-current-day a { - background: #478787 !important; - color: #FFFFFF !important; -} - -.ui-datepicker-status { - background: #E0F4D7; - width: 100%; - font-size: 80%; - text-align: center; -} -#ui-datepicker-div a, .ui-datepicker-inline a { - cursor: pointer; - margin: 0; - padding: 0; - background: none; - color: 000000; -} -.ui-datepicker-inline .ui-datepicker-links a { - padding: 0 5px !important; -} -.ui-datepicker-control a, .ui-datepicker-links a { - padding: 2px 5px !important; - color: #000 !important; -} -.ui-datepicker-title-row a { - color: #000 !important; -} -.ui-datepicker-control a:hover { - background: #FDD !important; - color: #333 !important; -} -.ui-datepicker-links a:hover, .ui-datepicker-title-row a:hover { - background: #FFF !important; - color: #333 !important; -} -.ui-datepicker-multi .ui-datepicker { - border: 1px solid #478787; -} -.ui-datepicker-one-month { - float: left; - width: 185px; -} -.ui-datepicker-new-row { - clear: left; -} -.ui-datepicker-cover { - display: none; - display/**/: block; - position: absolute; - z-index: -1; - filter: mask(); - top: -4px; - left: -4px; - width: 193px; - height: 200px; -} diff --git a/trunk/images/calendar.gif b/trunk/images/calendar.gif deleted file mode 100644 index d0abaa7c0..000000000 Binary files a/trunk/images/calendar.gif and /dev/null differ diff --git a/trunk/images/event_icon.gif b/trunk/images/event_icon.gif deleted file mode 100644 index a0ac7da52..000000000 Binary files a/trunk/images/event_icon.gif and /dev/null differ diff --git a/trunk/images/event_icon_old.gif b/trunk/images/event_icon_old.gif deleted file mode 100644 index 154d5af09..000000000 Binary files a/trunk/images/event_icon_old.gif and /dev/null differ diff --git a/trunk/images/river_icon_event.gif b/trunk/images/river_icon_event.gif deleted file mode 100644 index d02e5395a..000000000 Binary files a/trunk/images/river_icon_event.gif and /dev/null differ diff --git a/trunk/languages/en.php b/trunk/languages/en.php deleted file mode 100644 index 785b7392c..000000000 --- a/trunk/languages/en.php +++ /dev/null @@ -1,210 +0,0 @@ - "Event calendar", - 'tag_names:event_tags' => "Tags", - 'event_calendar:optional' => "Optional.", - 'event_calendar:required' => "Required.", - 'event_calendar:new_event' => "New event", - 'event_calendar:no_such_event_edit_error' => "Error: There is no such event or you do not have permission to edit it.", - 'event_calendar:add_event_title' => "Add event", - 'event_calendar:manage_event_title' => "Edit event", - 'event_calendar:manage_event_description' => "Enter the details of your event below. " - ."The title, venue, and start date are required. " - ."You can click on the calendar icons to set the start and end dates.", - 'event_calendar:title_label' => "Title", - 'event_calendar:title_description' => "One to four words", - 'event_calendar:brief_description_label' => "Brief description", - 'event_calendar:brief_description_description' => "A short phrase.", - 'event_calendar:venue_label' => "Venue", - 'event_calendar:venue_description' => "Where will this event be held?", - 'event_calendar:start_date_label' => "Start date", - 'event_calendar:start_date_description' => "When will this event start?", - 'event_calendar:end_date_label' => "End date", - 'event_calendar:end_date_description' => "When will this event end? The start date will be " - ."used as the end date if this is not supplied.", - 'event_calendar:start_time_label' => "Start time", - 'event_calendar:start_time_description' => "What time will this event start?", - 'event_calendar:end_time_label' => "End time", - 'event_calendar:end_time_description' => "What time will this event end?", - 'event_calendar:fees_label' => "Fees", - 'event_calendar:fees_description' => "The cost of this event, if any.", - 'event_calendar:contact_label' => "Contact", - 'event_calendar:contact_description' => "The person to contact for more information, " - ."preferably with a telephone number or email address.", - 'event_calendar:organiser_label' => "Organiser", - 'event_calendar:organiser_description' => "The individual or organisation responsible for this event.", - 'event_calendar:event_tags_label' => "Tags", - 'event_calendar:event_tags_description' => "A comma-separated list of tags relevant to this event.", - 'event_calendar:long_description_label' => "Long description", - 'event_calendar:long_description_description' => "Can be a paragraph or more as required.", - 'event_calendar:manage_event_response' => "Your event has been saved.", - 'event_calendar:add_event_response' => "Your event has been added.", - 'event_calendar:manage_event_error' => "Error: There was an error in saving your event. " - ."Please make sure that you have provided the required fields.", - 'event_calendar:error_nosuchevent' => "Error: there is no such event.", - 'event_calendar:show_events_title' => "Event calendar", - 'event_calendar:day_label' => "Day", - 'event_calendar:week_label' => "Week", - 'event_calendar:month_label' => "Month", - 'event_calendar:group' => "Group calendar", - 'event_calendar:new' => "Add event", - 'event_calendar:submit' => "Submit", - 'event_calendar:cancel' => "Cancel", - 'event_calendar:widget_title' => "Event calendar", - 'event_calendar:widget:description' => "Displays your events.", - 'event_calendar:num_display' => "Number of events to display", - 'event_calendar:groupprofile' => "Upcoming events", - 'event_calendar:view_calendar' => "view calendar", - 'event_calendar:when_label' => "When", - 'event_calendar:site_wide_link' => "View all events", - 'event_calendar:view_link' => "View this event", - 'event_calendar:edit_link' => "Edit this event", - 'event_calendar:delete_link' => "Delete this event", - 'event_calendar:delete_confirm_title' => "Confirm event deletion", - 'event_calendar:delete_confirm_description' => "Are you sure that you want to delete this event (\"%s\")? This action cannot be undone.", - 'event_calendar:delete_response' => "This event has been deleted.", - 'event_calendar:error_delete' => "This event does not exist or you do not have the right to delete it.", - 'event_calendar:delete_cancel_response' => "Event delete cancelled.", - 'event_calendar:add_to_my_calendar' => "Add to my calendar", - 'event_calendar:remove_from_my_calendar' => "Remove from my calendar", - 'event_calendar:add_to_my_calendar_response' => "This event has been added to your personal calendar.", - 'event_calendar:add_to_my_calendar_error' => "This event could not added to your personal calendar. " - ."(Perhaps the event is full or is scheduled at the same time as another event in your personal calendar?)", - 'event_calendar:remove_from_my_calendar_response' => "This event has been removed from your personal calendar.", - 'event_calendar:add_to_the_calendar' => "Add to calendar", - 'event_calendar:remove_from_the_calendar' => "Remove from calendar", - 'event_calendar:add_to_the_calendar_response' => "Event added to this person's calendar.", - 'event_calendar:add_to_the_calendar_error' => "This event could not added to this person's calendar. " - ."(Perhaps the event is full or is scheduled at the same time as another event in this person's calendar?)", - 'event_calendar:remove_from_the_calendar_response' => "Event removed from this person's calendar.", - - 'event_calendar:users_for_event_title' => "People interested in event \"%s\"", - 'event_calendar:personal_event_calendars_link' => "Personal event calendars (%s)", - 'event_calendar:settings:group_profile_display:title' => "Group calendar profile display (if group calendars are enabled)", - 'event_calendar:settings:group_profile_display_option:left' => "left column", - 'event_calendar:settings:group_profile_display_option:right' => "right column", - 'event_calendar:settings:group_profile_display_option:none' => "none", - 'event_calendar:settings:times:title' => "Add time as well as date to events", - 'event_calendar:settings:autopersonal:title' => "Automatically add events a user creates to his/her personal calendar.", - 'event_calendar:settings:autogroup:title' => "Automatically add group events for all members to their personal calendars.", - 'event_calendar:settings:agenda_view:title' => "Use Agenda view", - 'event_calendar:settings:venue_view:title' => "Display venue in summary view (event listings)", - 'event_calendar:settings:yes' => "yes", - 'event_calendar:settings:no' => "no", - 'event_calendar:settings:site_calendar:title' => "Site calendar", - 'event_calendar:settings:site_calendar:admin' => "yes, only admins can post events", - 'event_calendar:settings:site_calendar:loggedin' => "yes, any logged-in user can post an event", - 'event_calendar:settings:group_calendar:title' => "Group calendars", - 'event_calendar:settings:group_calendar:admin' => "yes, only admins and group owners can post events", - 'event_calendar:settings:group_calendar:members' => "yes, any group member can post an event", - 'event_calendar:settings:group_default:title' => "New groups should by default have a group calendar (if group calendars are enabled)", - 'event_calendar:settings:group_default:no' => "no (but admins or group owners can turn a group calendar on if desired)", - 'event_calendar:settings:group_default:yes' => "yes (but admins or group owners can turn a group calendar off if desired)", - 'event_calendar:settings:group_always_display:title' => "If group calendar is enabled, always display it (even if empty)", - 'event_calendar:settings:region_display:title' => "Add region field to events", - 'event_calendar:settings:region_list:title' => "List of regions (one per line)", - 'event_calendar:region_label' => "Region", - 'event_calendar:region_description' => "Select the region that this event will be held in.", - 'event_calendar:settings:type_display:title' => "Add event type to events", - 'event_calendar:settings:type_list:title' => "List of event types (one per line)", - 'event_calendar:type_label' => "Type of event", - 'event_calendar:type_description' => "Select the type of event.", - 'event_calendar:all' => "All", - 'event_calendar:region_filter_by_label' => "Filter by region:", - 'event_calendar:settings:first_date:title' => "First allowable date (in YYYY-MM-DD format)", - 'event_calendar:settings:last_date:title' => "Last allowable date (in YYYY-MM-DD format)", - 'event_calendar:enable_event_calendar' => "Enable group event calendar", - 'event_calendar:no_events_found' => "No events found.", - 'event_calendar:mine' => "Mine", - 'event_calendar:feature' => "Feature", - 'event_calendar:unfeature' => "Unfeature", - 'event_calendar:agenda:column:time' => "Time", - 'event_calendar:agenda:column:session' => "Session", - 'event_calendar:agenda:column:venue' => "Location", - 'event_calendar:upcoming_events_title' => "Upcoming events", - 'event_calendar:settings:paged' => "paged", - 'event_calendar:settings:month' => "by month", - 'event_calendar:settings:listing_format:title' => "Event listing format", - 'event_calendar:paged:column:date' => "Date", - 'event_calendar:paged:column:time' => "Time", - 'event_calendar:paged:column:event' => "Event", - 'event_calendar:paged:column:venue' => "Location", - 'event_calendar:paged:column:calendar' => "Calendar", - 'event_calendar:settings:spots_display:title' => "Add a spots field for each " - ."event to allow you to limit the number of people who can add the event to their calendar", - 'event_calendar:settings:no_collisions:title' => "Collision detection: prevent people from adding two events at the same time to their personal calendar", - 'event_calendar:settings:collision_length:title' => "How long (in seconds) should an event be assumed to last if no end date or time is specified " - ."(used for collision detection). Defaults to 3600 seconds = 1 hour.", - 'event_calendar:spots_label' => "Spots", - 'event_calendar:spots_description' => "How many people are allowed to add this event to their personal calendars?", - 'event_calendar:open' => "Open", - 'event_calendar:settings:add_users:title' => "Allow event creators to add their event to other personal calendars (requires autocomplete plugin).", - 'event_calendar:add_user_label' => "Add users", - 'event_calendar:add_user_description' => "Add this event to personal calendars by typing two or more characters in the above text autocomplete field to select a user. " - ."You can add multiple users by clicking the \"+\" link. (You must submit this form to actually add the event to the calendars.)", - 'event_calendar:settings:add_users_notify:title' => "Notify users who have had an event added to their personal calendar by an admin or event creator.", - 'event_calendar:add_users_notify:subject' => "A new event has been added to your personal calendar", - 'event_calendar:add_users_notify:body' => "%s,\n\nThe \"%s\" event has been added to your calendar.\n\nYou can view it here: \n\n%s\n", - - 'event_calendar:settings:region_list_handles:title' => "The region strings above are string handles. Use the Elgg translation system to resolve them.", - 'event_calendar:settings:type_list_handles:title' => "The type strings above are string handles. Use the Elgg translation system to resolve them.", - - 'event_calendar:settings:personal_manage:title' => "Allow users to add/remove any event they can see to/from their personal calendars. (If no, only admins and the event creator can add/remove them).", - - 'event_calendar:strapline' => "Posted %s by %s", - - 'event_calendar:request_event_response' => "Your request to be added to this event has been sent.", - 'event_calendar:request_event_error' => "Error: Could not send your request to be added to this event.", - 'event_calendar:request_subject' => "You have received an event request", - 'event_calendar:request_message' => " %s has asked to have the event \"%s\", here: - - %s - - added to his/her personal calendar. - - You can manage calendar requests here: - - %s", - - 'event_calendar:review_requests_error' => "This event either does not exist or you do not have the authority to approve requests for it.", - 'event_calendar:review_requests_request_none' => "There are no requests to review for this event.", - 'event_calendar:request:remove:check' => 'Are you sure you want to reject this request?', - 'event_calendar:requestkilled' => 'The request has been removed.', - 'event_calendar:request_approved' => "This request has been approved.", - 'event_calendar:review_requests_title' => 'Review requests', - 'event_calendar:make_request_title' => 'Request this event', - - 'event_calendar:settings:hide_access:title' => "Hide event access drop down", - 'event_calendar:settings:default_access:title' => "If the event access is hidden, what should it default to?", - 'event_calendar:settings:hide_end:title' => "Hide end time and date fields", - 'event_calendar:settings:more_required:title' => "Make all visible fields except long description required.", - - 'event_calendar:add_to_group:remove_group_title' => "Remove this event from group", - 'event_calendar:add_to_group:remove_group_button' => "Remove from group", - 'event_calendar:remove_from_group:success' => "Event removed from group calendar", - 'event_calendar:add_to_group:add_group_title' => "Add this event to group", - 'event_calendar:add_to_group:add_group_button' => "Add to group", - 'event_calendar:add_to_group:success' => "Event added to group calendar", - 'event_calendar:settings:add_to_group_calendar:title' => "Allow group admins to add any existing event to a group calendar", - - /** - * Event calendar river - **/ - - //generic terms to use - 'event_calendar:river:created' => "%s added", - 'event_calendar:river:updated' => "%s updated", - 'event_calendar:river:annotated1' => "%s added", - 'event_calendar:river:annotated2' => "to his/her personal calendar.", - - //these get inserted into the river links to take the user to the entity - 'event_calendar:river:create' => "a new event titled", - 'event_calendar:river:the_event' => "an event titled", - - ); - - add_translation("en",$english); - -?> \ No newline at end of file diff --git a/trunk/languages/es.php b/trunk/languages/es.php deleted file mode 100644 index 1eefff2a3..000000000 --- a/trunk/languages/es.php +++ /dev/null @@ -1,124 +0,0 @@ - 'Calendario de eventos', - 'event_calendar:new_event' => 'Nuevo evento', - 'event_calendar:no_such_event_edit_error' => 'Error: No existe tal evento o usted no tiene autorización para editarlo.', - 'event_calendar:add_event_title' => 'Agregar evento', - 'event_calendar:manage_event_title' => 'Editar evento', - 'event_calendar:manage_event_description' => 'Introduzca los detalles de su evento a continuación. El título, lugar y fecha de inicio se requieren. Puede hacer clic en los íconos del calendario para establecer las fechas de inicio y fin.', - 'event_calendar:title_label' => 'Título', - 'event_calendar:title_description' => 'Una a cuatro palabras', - 'event_calendar:brief_description_label' => 'Descripción breve', - 'event_calendar:brief_description_description' => 'Una frase corta.', - 'event_calendar:venue_label' => 'Sede', - 'event_calendar:venue_description' => '¿Dónde se llevará a cabo este evento?', - 'event_calendar:start_date_label' => 'Fecha de inicio', - 'event_calendar:start_date_description' => '¿Cuándo comenzará este evento?', - 'event_calendar:end_date_label' => 'Fecha final', - 'event_calendar:end_date_description' => '¿Cuándo terminará este evento? La fecha de inicio será usada como la fecha de finalización si no se suministra esta información.', - 'event_calendar:start_time_label' => 'Hora de inicio', - 'event_calendar:start_time_description' => '¿A qué hora comenzará este evento?', - 'event_calendar:end_time_label' => 'Hora de finalización', - 'event_calendar:end_time_description' => '¿A qué hora terminará este evento?', - 'event_calendar:fees_label' => 'Tarifas', - 'event_calendar:fees_description' => 'El costo de este evento, si hay caso.', - 'event_calendar:contact_label' => 'Contacto', - 'event_calendar:contact_description' => 'Persona que será el contacto para brindar mayor información, preferiblemente con número de teléfono o dirección de correo electrónico.', - 'event_calendar:organiser_label' => 'Origanizador', - 'event_calendar:organiser_description' => 'La persona u organización responsable por este evento.', - 'event_calendar:event_tags_label' => 'Etiquetas', - 'event_calendar:event_tags_description' => 'Lista de etiquetas relativas al eventos, separadas por una coma.', - 'event_calendar:long_description_label' => 'Descripción larga', - 'event_calendar:long_description_description' => 'Puede ser un parágrafo o más, según lo requerido.', - 'event_calendar:manage_event_response' => 'Su evento ha sido guardado.', - 'event_calendar:add_event_response' => 'Su evento ha sido agregado.', - 'event_calendar:manage_event_error' => 'Error: Hubo un error al guardar su evento. Por favor asegúrese que todos los campos requeridos hayan sido proporcionados.', - 'event_calendar:error_nosuchevent' => 'Error: no existe tal evento.', - 'event_calendar:show_events_title' => 'Calendario del evento', - 'event_calendar:day_label' => 'Día', - 'event_calendar:week_label' => 'Semana', - 'event_calendar:month_label' => 'Mes', - 'event_calendar:group' => 'Calendario de grupo', - 'event_calendar:new' => 'Agregar evento', - 'event_calendar:submit' => 'Enviar', - 'event_calendar:cancel' => 'Cancelar', - 'event_calendar:widget_title' => 'Calendario del evento', - 'event_calendar:widget:description' => 'Exponer sus eventos.', - 'event_calendar:num_display' => 'Número de eventos expuestos', - 'event_calendar:groupprofile' => 'Eventos venideros', - 'event_calendar:view_calendar' => 'ver calendario', - 'event_calendar:when_label' => 'Cuando', - 'event_calendar:site_wide_link' => 'Ver todos los eventos', - 'event_calendar:view_link' => 'Ver este evento', - 'event_calendar:edit_link' => 'Editar este evento', - 'event_calendar:delete_link' => 'Eliminar este evento', - 'event_calendar:delete_confirm_title' => 'Confirmar eliminación de este evento', - 'event_calendar:delete_confirm_description' => '¿Está seguro que desea eliminar este evento ("%s")? Esta acción es irreversible.', - 'event_calendar:delete_response' => 'Este evento ha sido eliminado.', - 'event_calendar:error_delete' => 'Este evento no existe o usted no tiene el derecho de eliminarlo.', - 'event_calendar:delete_cancel_response' => 'Eliminación del evento cancelada.', - 'event_calendar:add_to_my_calendar' => 'Agregar a mi calendario', - 'event_calendar:remove_from_my_calendar' => 'Retirar de mi calendario', - 'event_calendar:add_to_my_calendar_response' => 'Este evento ha sido agregado a su calendario personal.', - 'event_calendar:remove_from_my_calendar_response' => 'Este evento ha sido retirado de su calendario personal.', - 'event_calendar:users_for_event_title' => 'Personas interesadas en el evento "%s"', - 'event_calendar:personal_event_calendars_link' => 'Eventos personales del calendario (%s)', - 'event_calendar:settings:group_profile_display:title' => 'Perfil de visualización del calendario de grupo (si están habilitados los calendarios de grupo)', - 'event_calendar:settings:group_profile_display_option:left' => 'Columna de la izquierda', - 'event_calendar:settings:group_profile_display_option:right' => 'Columna de la derecha', - 'event_calendar:settings:group_profile_display_option:none' => 'Ninguno', - 'event_calendar:settings:times:title' => 'Agregar hora y fecha a los eventos', - 'event_calendar:settings:autopersonal:title' => 'Agregar automáticamente a su calendario personal eventos que un usuario cree.', - 'event_calendar:settings:autogroup:title' => 'Agregar automáticamente los eventos de grupo al calendario personal de sus miembros.', - 'event_calendar:settings:agenda_view:title' => 'Usar Vista previa de Agenda', - 'event_calendar:settings:venue_view:title' => 'Mostrar sede en vista rápida (listados de eventos)', - 'event_calendar:settings:yes' => 'sí', - 'event_calendar:settings:no' => 'no', - 'event_calendar:settings:site_calendar:title' => 'Sitio del calendario', - 'event_calendar:settings:site_calendar:admin' => 'sí, solamente si administradores pueden anunciar eventos', - 'event_calendar:settings:site_calendar:loggedin' => 'sí, cualquier usuario registrado puede anunciar un evento', - 'event_calendar:settings:group_calendar:title' => 'Calendarios de grupo', - 'event_calendar:settings:group_calendar:admin' => 'sí, solamente administradores y propietarios de grupos pueden anunciar eventos', - 'event_calendar:settings:group_calendar:members' => 'sí, cualquier miembro de un grupo puede anunciar un evento', - 'event_calendar:settings:group_default:title' => 'Grupos nuevos deben tener un calendario de grupo por defecto (si los calendarios de grupo están activados)', - 'event_calendar:settings:group_default:no' => 'no (sin embargo administradores y propietarios de grupos pueden desactivar un calendario de grupo si lo desean)', - 'event_calendar:settings:group_default:yes' => 'sí (sin embargo administradores y propietarios de grupos pueden desactivar un calendario de grupo si lo desean)', - 'event_calendar:settings:group_always_display:title' => 'Si un calendario de grupo está activo, siempre exponerlo (aun si está vacío)', - 'event_calendar:settings:region_display:title' => 'Agregar campo región a eventos', - 'event_calendar:settings:region_list:title' => 'Lista de regiones (una por línea)', - 'event_calendar:region_label' => 'Región', - 'event_calendar:region_description' => 'Selecciona la región en la cual el evento se llevará a cabo', - 'event_calendar:settings:type_display:title' => 'Agregar tipo de eventos a eventos', - 'event_calendar:settings:type_list:title' => 'Lista de tipos de eventos (uno por línea)', - 'event_calendar:type_label' => 'Tipo de eventos', - 'event_calendar:type_description' => 'Seleccione un tipo de evento.', - 'event_calendar:all' => 'Todos', - 'event_calendar:region_filter_by_label' => 'Filtro por región:', - 'event_calendar:settings:first_date:title' => 'Primera fecha permitida (en el formato AAAA - MM- DD)', - 'event_calendar:settings:last_date:title' => 'Última fecha permitida (en el formato AAAA - MM- DD)', - 'event_calendar:enable_event_calendar' => 'Permitir clanedario de eventos de grupo', - 'event_calendar:no_events_found' => 'No se encontraron eventos.', - 'event_calendar:mine' => 'Mío', - 'event_calendar:feature' => 'Presentar', - 'event_calendar:unfeature' => 'No presentar', - 'event_calendar:agenda:column:time' => 'Hora', - 'event_calendar:agenda:column:session' => 'Sesión', - 'event_calendar:agenda:column:venue' => 'Lugar', - 'event_calendar:upcoming_events_title' => 'Eventor venideros', - 'event_calendar:settings:paged' => 'Paginado', - 'event_calendar:settings:month' => 'Por mes', - 'event_calendar:settings:listing_format:title' => 'Formato del listado de eventos', - 'event_calendar:paged:column:date' => 'Fecha', - 'event_calendar:paged:column:time' => 'Hora', - 'event_calendar:paged:column:event' => 'Evento', - 'event_calendar:paged:column:venue' => 'Lugar', - 'event_calendar:paged:column:calendar' => 'Calendario', - 'event_calendar:river:created' => '%s agregado', - 'event_calendar:river:updated' => '%s actualizado', - 'event_calendar:river:annotated1' => '%s agregado', - 'event_calendar:river:annotated2' => 'a su calendario personal.', - 'event_calendar:river:create' => 'un nuevo evento titulado', - 'event_calendar:river:the_event' => 'un evento titulado', -); -add_translation("es", $language); -?> \ No newline at end of file diff --git a/trunk/languages/fr.php b/trunk/languages/fr.php deleted file mode 100644 index 876a53ecb..000000000 --- a/trunk/languages/fr.php +++ /dev/null @@ -1,125 +0,0 @@ - 'Entrez les détails de votre événement ci-dessous. Le titre, le lieu et la date de début sont obligatoires. Vous pouvez cliquer sur les icônes du calendrier pour indiquer les dates de début et de fin.', - 'event_calendar:start_time_label' => 'Horaire de départ', - 'event_calendar:start_time_description' => 'À quelle heure cet événement commence?', - 'event_calendar:end_time_label' => 'Horaire de fin', - 'event_calendar:end_time_description' => 'À quelle heure se termine cet événement?', - 'event_calendar:event_tags_label' => 'Balises', - 'event_calendar:event_tags_description' => 'Optionnel. Une liste de balises séparées par des virgules.', - 'event_calendar:error_nosuchevent' => 'Erreur: il n\'y a pas de tel événement.', - 'event_calendar:settings:times:title' => 'Ajouter du temps et la date aux événements', - 'event_calendar:settings:autogroup:title' => 'Ajouter automatiquement des événements de groupe à tous les membres dans leurs agendas personnels.', - 'event_calendar:settings:agenda_view:title' => 'Utilisez la vue Agenda', - 'event_calendar:settings:venue_view:title' => 'Afficher le lieu en vue sommaire (listings des événements)', - 'event_calendar:settings:group_always_display:title' => 'Si un calendrier de groupe est activé, toujours l\'afficher (même vides)', - 'event_calendar:settings:region_display:title' => 'Ajouter un champ région aux événements', - 'event_calendar:settings:region_list:title' => 'Liste des rListe des régions (un par ligne) - (une seule par ligne)', - 'event_calendar:region_label' => 'Régions', - 'event_calendar:region_description' => 'Sélectionnez la région dans laquelle cet événement aura lieu', - 'event_calendar:settings:type_display:title' => 'Ajouter le type d\'événement aux événements', - 'event_calendar:settings:type_list:title' => 'Liste des types d\'événement (un seul par ligne)', - 'event_calendar:type_label' => 'Type d\'événement', - 'event_calendar:type_description' => 'Sélectionnez le type d\'événement.', - 'event_calendar:all' => 'Tous', - 'event_calendar:region_filter_by_label' => 'Filtrer par région:', - 'event_calendar:settings:first_date:title' => 'Première date d\'entrée admissible (au format AAAA-MM-JJ)', - 'event_calendar:settings:last_date:title' => 'Dernière date admissible (au format AAAA-MM-JJ)', - 'event_calendar:mine' => 'Le mien', - 'event_calendar:feature' => 'Mise en vedette', - 'event_calendar:unfeature' => 'Enlever la mise en vedette', - 'event_calendar:agenda:column:time' => 'Heure', - 'event_calendar:agenda:column:session' => 'Session', - 'event_calendar:agenda:column:venue' => 'Lieu', - 'event_calendar:upcoming_events_title' => 'Événements à venir', - 'event_calendar:settings:paged' => 'Pagé', - 'event_calendar:settings:month' => 'par mois', - 'event_calendar:settings:listing_format:title' => 'Format des listes d\'événements', - 'event_calendar:paged:column:date' => 'Date', - 'event_calendar:paged:column:time' => 'Heure', - 'event_calendar:paged:column:event' => 'Evénement', - 'event_calendar:paged:column:venue' => 'Lieu', - 'event_calendar:paged:column:calendar' => 'Calendrier', - 'item:object:event_calendar' => 'Agenda', - 'event_calendar:new_event' => 'Nouvel événement', - 'event_calendar:no_such_event_edit_error' => 'Erreur: Il n\'y a pas de tel événement, ou vous n\'avez pas la permission de le modifier.', - 'event_calendar:add_event_title' => 'Ajouter un événement', - 'event_calendar:manage_event_title' => 'Modifier un événement', - 'event_calendar:title_label' => 'Titre', - 'event_calendar:title_description' => 'Obligatoire. Un à quatre mots', - 'event_calendar:brief_description_label' => 'Courte description', - 'event_calendar:brief_description_description' => 'Optionnel. Une phrase courte.', - 'event_calendar:venue_label' => 'Lieu', - 'event_calendar:venue_description' => 'Obligatoire. Où se tiendra l\'événement?', - 'event_calendar:start_date_label' => 'Date de départ', - 'event_calendar:start_date_description' => 'Obligatoire. A quelle date cet événement démarera?', - 'event_calendar:end_date_label' => 'Date de fin de l\'événement', - 'event_calendar:end_date_description' => 'Optionnel. Quand c\'est événement s\'achèvera-t-il? La date de départ sera utilisée comme date de fin si ce champ n\'est pas rempli.', - 'event_calendar:fees_label' => 'Prix d\'entrée', - 'event_calendar:fees_description' => 'Optionnel. Le côut de l\'événement.', - 'event_calendar:contact_label' => 'Contact', - 'event_calendar:contact_description' => 'Optionnel. La personne à contacter pour avoir plus de renseignements, préférablement avec un numéro de téléphone ou une adresse emailpreferably with a telephone number or email address.', - 'event_calendar:organiser_label' => 'Organisateur', - 'event_calendar:organiser_description' => 'Optionnel. La personne ou l\'organisation responsable de l\'événement.', - 'event_calendar:long_description_label' => 'Description longue', - 'event_calendar:long_description_description' => 'Optionnel. Peut être un paragraphe ou plus si nécessaire.', - 'event_calendar:manage_event_response' => 'Votre événement a été sauvegardé.', - 'event_calendar:add_event_response' => 'Votre événement a été ajouté.', - 'event_calendar:manage_event_error' => 'Erreur: Une erreur s\'est produite lors de l\'enregistrement de votre événement. Assurez-vous que les champs spécifiés ont bien été remplis.', - 'event_calendar:show_events_title' => 'Agenda des événements', - 'event_calendar:day_label' => 'Jour', - 'event_calendar:week_label' => 'Semaine', - 'event_calendar:month_label' => 'Mois', - 'event_calendar:group' => 'Agenda de groupe', - 'event_calendar:new' => 'Ajouter un événement', - 'event_calendar:submit' => 'Ok', - 'event_calendar:cancel' => 'Annuler', - 'event_calendar:widget_title' => 'Agenda des événements', - 'event_calendar:widget:description' => 'Afficher vos événements.', - 'event_calendar:num_display' => 'Nombre d\'événement à afficher', - 'event_calendar:groupprofile' => 'Les prochains événements', - 'event_calendar:view_calendar' => 'Voir l\'agenda', - 'event_calendar:when_label' => 'Quand', - 'event_calendar:site_wide_link' => 'Voir tous les événements', - 'event_calendar:view_link' => 'Voir cet événement', - 'event_calendar:edit_link' => 'Modifier cet événement', - 'event_calendar:delete_link' => 'Supprimer cet événement', - 'event_calendar:delete_confirm_title' => 'Confirmer la suppression de l\'événement', - 'event_calendar:delete_confirm_description' => 'Etes-vous sur de vouloir supprimer cet événement ("%s")? Cette action est irréversible.', - 'event_calendar:delete_response' => 'Cet événement a été supprimé.', - 'event_calendar:error_delete' => 'Cet événement n\'existe pas ou vous n\'avez pas le droit de le supprimer.', - 'event_calendar:delete_cancel_response' => 'Suppression de l\'événement annulé.', - 'event_calendar:add_to_my_calendar' => 'Ajouter à mon agenda', - 'event_calendar:remove_from_my_calendar' => 'Supprimer de mon agenda', - 'event_calendar:add_to_my_calendar_response' => 'Cet événement a été ajouté à votre agenda personnel.', - 'event_calendar:remove_from_my_calendar_response' => 'Cet événement a été supprimé de votre agenda personnel.', - 'event_calendar:users_for_event_title' => 'Membre du site intéressé par l\'événement "%s"\'', - 'event_calendar:personal_event_calendars_link' => 'Agenda des événements personnels de (%s)', - 'event_calendar:settings:group_profile_display:title' => 'Afficher le profil de l\'agenda du groupe (Si les agendas de groupe ont été permis)', - 'event_calendar:settings:group_profile_display_option:left' => 'Colonne de gauche', - 'event_calendar:settings:group_profile_display_option:right' => 'Colonne de droite', - 'event_calendar:settings:group_profile_display_option:none' => 'aucun', - 'event_calendar:settings:autopersonal:title' => 'Ajouter automatiquement les événements d\'un utilisateur à son agenda personnelA.', - 'event_calendar:settings:yes' => 'oui', - 'event_calendar:settings:no' => 'non', - 'event_calendar:settings:site_calendar:title' => 'Side de l\'agenda', - 'event_calendar:settings:site_calendar:admin' => 'oui, seuls les administrateurs peuvent proposer des événements', - 'event_calendar:settings:site_calendar:loggedin' => 'oui, seuls les utilisateurs identifiés peuvent publier un événement', - 'event_calendar:settings:group_calendar:title' => 'Les agendas du groupe', - 'event_calendar:settings:group_calendar:admin' => 'oui seuls les administrateurs et les créateurs du groupe peuvent publier un événement', - 'event_calendar:settings:group_calendar:members' => 'oui, les membres du groupe peuvent publier un événement', - 'event_calendar:settings:group_default:title' => 'Les nouveaux groupes par défaut peuvent avoir leur propre agenda (Si les agendas de groupe sont permis)', - 'event_calendar:settings:group_default:no' => 'non (mais les administrateurs du groupe peuvement ajouter la fonction agenda si désiré)', - 'event_calendar:settings:group_default:yes' => 'oui (mais les administrateurs ou les créateurs du groupe peuvent supprimer la fonction agenda si désiré)', - 'event_calendar:enable_event_calendar' => 'Ajouter la fonction agenda au groupe', - 'event_calendar:no_events_found' => 'Aucun événement trouvé.', - 'event_calendar:river:created' => '%s ajouté', - 'event_calendar:river:updated' => '%s mis à jour', - 'event_calendar:river:annotated1' => '%s ajouté', - 'event_calendar:river:annotated2' => 'à son agenda personnel.', - 'event_calendar:river:create' => 'un nouvel événement intitulé', - 'event_calendar:river:the_event' => 'un événement intitulé', -); -add_translation("fr", $language); -?> \ No newline at end of file diff --git a/trunk/manage_event.php b/trunk/manage_event.php deleted file mode 100644 index 0464a31df..000000000 --- a/trunk/manage_event.php +++ /dev/null @@ -1,57 +0,0 @@ - - * @copyright Radagast Solutions 2008 - * @link http://radagast.biz/ - * - */ - -// Load Elgg engine -require_once(dirname(dirname(dirname(__FILE__))) . "/engine/start.php"); - -// Load event calendar model -require_once(dirname(__FILE__) . "/models/model.php"); - -// Define context -set_context('event_calendar'); - -global $CONFIG; - -gatekeeper(); - -$event = ''; - -$group_guid = (int) get_input('group_guid',0); - -if ($event_id = get_input('event_id',0)) { - $event = event_calendar_get_event_for_edit($event_id); - if (!$event) { - register_error(elgg_echo('event_calendar:no_such_event_edit_error')); - forward(); - } else { - set_page_owner($event->container_guid); - if (page_owner_entity() instanceof ElggGroup) { - set_context('groups'); - } - } - - $title = elgg_echo('event_calendar:manage_event_title'); -} else { - $title = elgg_echo('event_calendar:add_event_title'); - if ($group_guid && $group = get_entity($group_guid)) { - // redefine context - set_context('groups'); - set_page_owner($group_guid); - } -} - -$body = elgg_view('event_calendar/forms/manage_event', array('event'=>$event,'event_id'=>$event_id,'group_guid'=>$group_guid)); - -page_draw($title,elgg_view_layout("two_column_left_sidebar", '', elgg_view_title($title) . $body)); - -?> \ No newline at end of file diff --git a/trunk/manifest.xml b/trunk/manifest.xml deleted file mode 100644 index c3ce812c1..000000000 --- a/trunk/manifest.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - - - diff --git a/trunk/models/model.php b/trunk/models/model.php deleted file mode 100644 index 04a168e55..000000000 --- a/trunk/models/model.php +++ /dev/null @@ -1,1045 +0,0 @@ - - * @copyright Radagast Solutions 2008 - * @link http://radagast.biz/ - * - */ - -function event_calendar_get_event_for_edit($event_id) { - if ($event_id && $event = get_entity($event_id)) { - if ($event->canEdit()) { - return $event; - } else { - return false; - } - } else { - return false; - } -} - -function event_calendar_get_event_from_form() { - - // returns an event data object (not an ElggObject) - - $event_data = new stdClass(); - $event_data->form_data = true; - // debug message to test new add user feature - $event_data->event_id = get_input('event_id',0); - $event_data->access_id = get_input('access',ACCESS_PRIVATE); - $event_data->title = get_input('title',''); - $event_data->description = get_input('brief_description',''); - $event_data->venue = get_input('venue',''); - $event_calendar_times = get_plugin_setting('times', 'event_calendar'); - $event_calendar_region_display = get_plugin_setting('region_display', 'event_calendar'); - $event_calendar_type_display = get_plugin_setting('type_display', 'event_calendar'); - $event_calendar_spots_display = get_plugin_setting('spots_display', 'event_calendar'); - if ($event_calendar_times == 'yes') { - $sh = get_input('start_time_h',''); - $sm = get_input('start_time_m',''); - if (is_numeric($sh) && is_numeric($sm)) { - // workaround for pulldown zero value bug - $sh--; - $sm--; - $event_data->start_time = $sh*60+$sm; - } else { - $event_data->start_time = ''; - } - $eh = get_input('end_time_h',''); - $em = get_input('end_time_m',''); - if (is_numeric($eh) && is_numeric($em)) { - // workaround for pulldown zero value bug - $eh--; - $em--; - $event_data->end_time = $eh*60+$em; - } else { - $event_data->end_time = ''; - } - } - $event_data->start_date = get_input('start_date',''); - $event_data->end_date = get_input('end_date',''); - if ($event_calendar_spots_display == 'yes') { - $event_data->spots = get_input('spots',''); - } - if ($event_calendar_region_display == 'yes') { - $region = get_input('region',''); - if ($region == '-') { - $region = ''; - } - $event_data->region = $region; - } - if ($event_calendar_type_display == 'yes') { - $event_type = get_input('event_type',''); - if ($event_type == '-') { - $event_type = ''; - } - $event_data->event_type = $event_type; - } - $event_data->fees = get_input('fees',''); - $event_data->contact = get_input('contact',''); - $event_data->organiser = get_input('organiser',''); - $event_data->event_tags = get_input('event_tags',''); - $event_data->long_description = get_input('long_description',''); - - return $event_data; -} - -function event_calendar_set_event_from_form() { - global $CONFIG; - - $group_guid = 0; - $result = new stdClass(); - $ed = event_calendar_get_event_from_form(); - $result->form_data = $ed; - $fields_are_valid = TRUE; - $event_calendar_times = get_plugin_setting('times', 'event_calendar'); - $event_calendar_region_display = get_plugin_setting('region_display', 'event_calendar'); - $event_calendar_type_display = get_plugin_setting('type_display', 'event_calendar'); - $event_calendar_spots_display = get_plugin_setting('spots_display', 'event_calendar'); - $event_calendar_hide_end = get_plugin_setting('hide_end', 'event_calendar'); - $event_calendar_more_required = get_plugin_setting('more_required', 'event_calendar'); - - if ($event_calendar_more_required == 'yes') { - $required_fields = array('title','venue','start_date', - 'brief_description','fees','contact','organiser', - 'event_tags'); - - if ($event_calendar_times == 'yes') { - $required_fields[] = 'start_time'; - if ($event_calendar_hide_end != 'yes') { - $required_fields[] = 'end_time'; - } - } - if ($event_calendar_region_display == 'yes') { - $required_fields[] = 'region'; - } - if ($event_calendar_type_display == 'yes') { - $required_fields[] = 'event_type'; - } - if ($event_calendar_spots_display == 'yes') { - $required_fields[] = 'spots'; - } - } else { - $required_fields = array('title','venue','start_date'); - } - foreach ($required_fields as $fn) { - if (!trim($ed->$fn)) { - $fields_are_valid = FALSE; - break; - } - } - if ($fields_are_valid) { - if ($ed->event_id) { - $event = get_entity($ed->event_id); - if (!$event) { - // do nothing because this is a bad event id - $result->success = false; - } - } else { - $event = new ElggObject(); - $event->subtype = 'event_calendar'; - $event->owner_guid = $_SESSION['user']->getGUID(); - $group_guid = (int) get_input('group_guid',0); - if ($group_guid) { - $event->container_guid = $group_guid; - } else { - $event->container_guid = $event->owner_guid; - } - } - $event->access_id = $ed->access_id; - $event->title = $ed->title; - $event->description = $ed->description; - $event->venue = $ed->venue; - $event->start_date = strtotime($ed->start_date); - if ($ed->end_date) { - $event->end_date = strtotime($ed->end_date); - } else { - $event->end_date = $ed->end_date; - } - if ($event_calendar_times == 'yes') { - $event->start_time = $ed->start_time; - //$event->original_start_date = $event->start_date; - if (is_numeric($ed->start_time)) { - // Set start date to the Unix start time, if set. - // This allows sorting by date *and* time. - $event->start_date += $ed->start_time*60; - } - $event->end_time = $ed->end_time; - } - if ($event_calendar_spots_display == 'yes') { - $event->spots = trim($ed->spots); - } - if ($event_calendar_region_display == 'yes') { - $event->region = $ed->region; - } - if ($event_calendar_type_display == 'yes') { - $event->event_type = $ed->event_type; - } - $event->fees = $ed->fees; - $event->contact = $ed->contact; - $event->organiser = $ed->organiser; - $event->event_tags = array_reverse(string_to_tag_array($ed->event_tags)); - $event->long_description = $ed->long_description; - $event->real_end_time = event_calendar_get_end_time($event); - $result->success = $event->save(); - if ($result->success) { - if ($group_guid && (get_plugin_setting('autogroup', 'event_calendar') == 'yes')) { - event_calendar_add_personal_events_from_group($event->getGUID(),$group_guid); - } - if (get_plugin_setting('add_users', 'event_calendar') == 'yes') { - if (function_exists('autocomplete_member_to_user')) { - $addusers = get_input('adduser',array()); - foreach($addusers as $adduser) { - if ($adduser) { - $user = autocomplete_member_to_user($adduser); - $user_id = $user->guid; - event_calendar_add_personal_event($event->guid,$user_id); - if (get_plugin_setting('add_users_notify', 'event_calendar') == 'yes') { - notify_user($user_id, $CONFIG->site->guid, elgg_echo('event_calendar:add_users_notify:subject'), - sprintf( - elgg_echo('event_calendar:add_users_notify:body'), - $user->name, - $event->title, - $event->getURL() - ) - ); - } - } - } - } - } - } - $result->event = $event; - } else { - // required data missing - $result->success = false; - } - - return $result; -} - -function event_calendar_get_events_between($start_date,$end_date,$is_count,$limit=10,$offset=0,$container_guid=0,$region='-') { - if ($is_count) { - $count = event_calendar_get_entities_from_metadata_between('start_date','end_date', - $start_date, $end_date, "object", "event_calendar", 0, $container_guid, $limit,$offset,"",0,false,true,$region); - return $count; - } else { - $events = event_calendar_get_entities_from_metadata_between('start_date','end_date', - $start_date, $end_date, "object", "event_calendar", 0, $container_guid, $limit,$offset,"",0,false,false,$region); - //return event_calendar_vsort($events,'start_date'); - return $events; - } -} - -function event_calendar_get_open_events_between($start_date,$end_date, -$is_count,$limit=10,$offset=0,$container_guid=0,$region='-', $meta_max = 'spots', $annotation_name = 'personal_event') { - 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,$meta_max,$annotation_name); - return $count; - } else { - $events = 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,false,$region,$meta_max,$annotation_name); - //return event_calendar_vsort($events,'start_date'); - return $events; - } -} - -function event_calendar_get_events_for_user_between($start_date,$end_date,$is_count,$limit=10,$offset=0,$user_guid,$container_guid=0,$region='-') { - if ($is_count) { - $count = event_calendar_get_entities_from_metadata_between('start_date','end_date', - $start_date, $end_date, "object", "event_calendar", $user_guid, $container_guid, $limit,$offset,"",0,true,true,$region); - return $count; - } else { - $events = event_calendar_get_entities_from_metadata_between('start_date','end_date', - $start_date, $end_date, "object", "event_calendar", $user_guid, $container_guid, $limit,$offset,"",0,true,false,$region); - //return event_calendar_vsort($events,'start_date'); - return $events; - } -} - -// TODO - replace the original version with this one -function event_calendar_get_events_for_user_between2($start_date,$end_date,$is_count,$limit=10,$offset=0,$user_guid,$container_guid=0,$region='-') { - if ($is_count) { - $count = event_calendar_get_entities_from_metadata_between('start_date','real_end_time', - $start_date, $end_date, "object", "event_calendar", $user_guid, $container_guid, $limit,$offset,"",0,true,true,$region); - return $count; - } else { - $events = event_calendar_get_entities_from_metadata_between('start_date','real_end_time', - $start_date, $end_date, "object", "event_calendar", $user_guid, $container_guid, $limit,$offset,"",0,true,false,$region); - //return event_calendar_vsort($events,'start_date'); - return $events; - } -} - -function event_calendar_get_events_for_friends_between($start_date,$end_date,$is_count,$limit=10,$offset=0,$user_guid,$container_guid=0,$region='-') { - if ($user_guid) { - $friends = get_user_friends($user_guid,"",5000); - if ($friends) { - $friend_guids = array(); - foreach($friends as $friend) { - $friend_guids[] = $friend->getGUID(); - } - if ($is_count) { - $count = event_calendar_get_entities_from_metadata_between('start_date','end_date', - $start_date, $end_date, "object", "event_calendar", $friend_guids, $container_guid, $limit,$offset,"",0,true,true,$region); - return $count; - } else { - $events = event_calendar_get_entities_from_metadata_between('start_date','end_date', - $start_date, $end_date, "object", "event_calendar", $friend_guids, $container_guid, $limit,$offset,"",0,true,false,$region); - //return event_calendar_vsort($events,'start_date'); - return $events; - } - } - } - return array(); -} - -function event_calendar_vsort($original,$field, $descending = false) { - if (!$original) { - return $original; - } - $sortArr = array(); - - foreach ( $original as $key => $item ) { - $sortArr[ $key ] = $item->$field; - } - - if ( $descending ) { - arsort( $sortArr ); - } else { - asort( $sortArr ); - } - - $resultArr = array(); - foreach ( $sortArr as $key => $value ) { - $resultArr[ $key ] = $original[ $key ]; - } - - return $resultArr; -} - -/** - * Return a list of entities based on the given search criteria. - * In this case, returns entities with the given metadata between two values inclusive - * - * @param mixed $meta_start_name - * @param mixed $meta_end_name - * @param mixed $meta_start_value - start of metadata range, must be numerical value - * @param mixed $meta_end_value - end of metadata range, must be numerical value - * @param string $entity_type The type of entity to look for, eg 'site' or 'object' - * @param string $entity_subtype The subtype of the entity. - * @param mixed $owner_guid Either one integer user guid or an array of user guids - * @param int $container_guid If supplied, the result is restricted to events associated with a specific container - * @param int $limit - * @param int $offset - * @param string $order_by Optional ordering. - * @param int $site_guid The site to get entities for. Leave as 0 (default) for the current site; -1 for all sites. - * @param boolean $filter Filter by events in personal calendar if true - * @param true|false $count If set to true, returns the total number of entities rather than a list. (Default: false) - * - * @return int|array A list of entities, or a count if $count is set to true - */ -function event_calendar_get_entities_from_metadata_between($meta_start_name, $meta_end_name, $meta_start_value, $meta_end_value, $entity_type = "", $entity_subtype = "", $owner_guid = 0, $container_guid = 0, $limit = 10, $offset = 0, $order_by = "", $site_guid = 0, $filter = false, $count = false, $region='-') -{ - global $CONFIG; - - // This should not be possible, but a sanity check just in case - if (!is_numeric($meta_start_value) || !is_numeric($meta_end_value)) { - return FALSE; - } - - $meta_start_n = get_metastring_id($meta_start_name); - $meta_end_n = get_metastring_id($meta_end_name); - if ($region && $region != '-') { - $region_n = get_metastring_id('region'); - $region_value_n = get_metastring_id($region); - if (!$region_n || !$region_value_n) { - if ($count) { - return 0; - } else { - return FALSE; - } - } - } - - $entity_type = sanitise_string($entity_type); - $entity_subtype = get_subtype_id($entity_type, $entity_subtype); - $limit = (int)$limit; - $offset = (int)$offset; - //if ($order_by == "") $order_by = "e.time_created desc"; - if ($order_by == "") $order_by = "v.string asc"; - $order_by = sanitise_string($order_by); - $site_guid = (int) $site_guid; - if ((is_array($owner_guid) && (count($owner_guid)))) { - foreach($owner_guid as $key => $guid) { - $owner_guid[$key] = (int) $guid; - } - } else { - $owner_guid = (int) $owner_guid; - } - - if ((is_array($container_guid) && (count($container_guid)))) { - foreach($container_guid as $key => $guid) { - $container_guid[$key] = (int) $guid; - } - } else { - $container_guid = (int) $container_guid; - } - if ($site_guid == 0) - $site_guid = $CONFIG->site_guid; - - //$access = get_access_list(); - - $where = array(); - - if ($entity_type!="") - $where[] = "e.type='$entity_type'"; - if ($entity_subtype) - $where[] = "e.subtype=$entity_subtype"; - $where[] = "m.name_id='$meta_start_n'"; - $where[] = "m2.name_id='$meta_end_n'"; - $where[] = "((v.string >= $meta_start_value AND v.string <= $meta_end_value) OR ( v2.string >= $meta_start_value AND v2.string <= $meta_end_value) OR (v.string <= $meta_start_value AND v2.string >= $meta_start_value) OR ( v2.string <= $meta_end_value AND v2.string >= $meta_end_value))"; - if ($region && $region != '-') { - $where[] = "m3.name_id='$region_n'"; - $where[] = "m3.value_id='$region_value_n'"; - } - if ($site_guid > 0) - $where[] = "e.site_guid = {$site_guid}"; - if ($filter) { - if (is_array($owner_guid)) { - $where[] = "ms2.string in (".implode(",",$owner_guid).")"; - } else if ($owner_guid > 0) { - $where[] = "ms2.string = {$owner_guid}"; - } - - $where[] = "ms.string = 'personal_event'"; - } else { - if (is_array($owner_guid)) { - $where[] = "e.owner_guid in (".implode(",",$owner_guid).")"; - } else if ($owner_guid > 0) { - $where[] = "e.owner_guid = {$owner_guid}"; - } - } - - if (is_array($container_guid)) { - $where[] = "e.container_guid in (".implode(",",$container_guid).")"; - } else if ($container_guid > 0) - $where[] = "e.container_guid = {$container_guid}"; - - if (!$count) { - $query = "SELECT distinct e.* "; - } else { - $query = "SELECT count(distinct e.guid) as total "; - } - - $query .= "from {$CONFIG->dbprefix}entities e JOIN {$CONFIG->dbprefix}metadata m on e.guid = m.entity_guid JOIN {$CONFIG->dbprefix}metadata m2 on e.guid = m2.entity_guid "; - if ($filter) { - $query .= "JOIN {$CONFIG->dbprefix}annotations a ON (a.entity_guid = e.guid) "; - $query .= "JOIN {$CONFIG->dbprefix}metastrings ms ON (a.name_id = ms.id) "; - $query .= "JOIN {$CONFIG->dbprefix}metastrings ms2 ON (a.value_id = ms2.id) "; - } - if ($region && $region != '-') { - $query .= "JOIN {$CONFIG->dbprefix}metadata m3 ON (e.guid = m3.entity_guid) "; - } - $query .= "JOIN {$CONFIG->dbprefix}metastrings v on v.id = m.value_id JOIN {$CONFIG->dbprefix}metastrings v2 on v2.id = m2.value_id where"; - foreach ($where as $w) - $query .= " $w and "; - $query .= get_access_sql_suffix("e"); // Add access controls - $query .= ' and ' . get_access_sql_suffix("m"); // Add access controls - $query .= ' and ' . get_access_sql_suffix("m2"); // Add access controls - - - - if (!$count) { - $query .= " order by $order_by limit $offset, $limit"; // Add order and limit - $entities = get_data($query, "entity_row_to_elggstar"); - if (get_plugin_setting('add_to_group_calendar', 'event_calendar') == 'yes') { - if (get_entity($container_guid) instanceOf ElggGroup) { - $entities = event_calendar_get_entities_from_metadata_between_related($meta_start_name, $meta_end_name, - $meta_start_value, $meta_end_value, $entity_type, - $entity_subtype, $owner_guid, $container_guid, - $limit = 10, $offset = 0, $order_by = "", $site_guid = 0, - $filter = false, $count = false, $region='-',$entities); - } - } - return $entities; - } else { - if ($row = get_data_row($query)) - return $row->total; - } - return false; -} - -// adds any related events (has the display_on_group relation) -// that meet the appropriate criteria - -function event_calendar_get_entities_from_metadata_between_related($meta_start_name, $meta_end_name, - $meta_start_value, $meta_end_value, $entity_type = "", - $entity_subtype = "", $owner_guid = 0, $container_guid = 0, - $limit = 10, $offset = 0, $order_by = "", $site_guid = 0, - $filter = false, $count = false, $region='-',$main_events) { - - $main_list = array(); - if ($main_events) { - foreach ($main_events as $event) { - $main_list[$event->guid] = $event; - } - } - $related_list = array(); - $related_events = get_entities_from_relationship("display_on_group", $container_guid, TRUE); - if ($related_events) { - foreach ($related_events as $event) { - $related_list[$event->guid] = $event; - } - } - // get all the events (across all containers) that meet the criteria - $all_events = event_calendar_get_entities_from_metadata_between($meta_start_name, $meta_end_name, - $meta_start_value, $meta_end_value, $entity_type, $entity_subtype, $owner_guid, - 0, $limit, $offset, $order_by, $site_guid, $filter, $count, $region); - - if ($all_events) { - foreach($all_events as $event) { - if (array_key_exists($event->guid,$related_list) - && !array_key_exists($event->guid,$main_list)) { - // add to main events - $main_events[] = $event; - } - } - } - return event_calendar_vsort($main_events,$meta_start_name); -} - -// TODO: replace the original version with this one -/** - * Return a list of entities based on the given search criteria. - * In this case, returns entities with the given metadata between two values inclusive - * - * @param mixed $meta_start_name - * @param mixed $meta_end_name - * @param mixed $meta_start_value - start of metadata range, must be numerical value - * @param mixed $meta_end_value - end of metadata range, must be numerical value - * @param string $entity_type The type of entity to look for, eg 'site' or 'object' - * @param string $entity_subtype The subtype of the entity. - * @param mixed $owner_guid Either one integer user guid or an array of user guids - * @param int $container_guid If supplied, the result is restricted to events associated with a specific container - * @param int $limit - * @param int $offset - * @param string $order_by Optional ordering. - * @param int $site_guid The site to get entities for. Leave as 0 (default) for the current site; -1 for all sites. - * @param boolean $filter Filter by events in personal calendar if true - * @param true|false $count If set to true, returns the total number of entities rather than a list. (Default: false) - * @param string $meta_max metadata name containing maximum annotation count - * @param string $annotation_name annotation name to count - * - * @return int|array A list of entities, or a count if $count is set to true - */ -function event_calendar_get_entities_from_metadata_between2 -($meta_start_name, $meta_end_name, $meta_start_value, $meta_end_value, -$entity_type = "", $entity_subtype = "", $owner_guid = 0, $container_guid = 0, -$limit = 10, $offset = 0, $order_by = "", $site_guid = 0, $filter = false, -$count = false, $region='-', $meta_max = '', $annotation_name = '') -{ - global $CONFIG; - - // This should not be possible, but a sanity check just in case - if (!is_numeric($meta_start_value) || !is_numeric($meta_end_value)) { - return FALSE; - } - - $meta_start_n = get_metastring_id($meta_start_name); - $meta_end_n = get_metastring_id($meta_end_name); - if ($region && $region != '-') { - $region_n = get_metastring_id('region'); - $region_value_n = get_metastring_id($region); - if (!$region_n || !$region_value_n) { - if ($count) { - return 0; - } else { - return false; - } - } - } - - $entity_type = sanitise_string($entity_type); - $entity_subtype = get_subtype_id($entity_type, $entity_subtype); - $limit = (int)$limit; - $offset = (int)$offset; - //if ($order_by == "") $order_by = "e.time_created desc"; - if ($order_by == "") $order_by = "v.string asc"; - $order_by = sanitise_string($order_by); - $site_guid = (int) $site_guid; - if ((is_array($owner_guid) && (count($owner_guid)))) { - foreach($owner_guid as $key => $guid) { - $owner_guid[$key] = (int) $guid; - } - } else { - $owner_guid = (int) $owner_guid; - } - - if ((is_array($container_guid) && (count($container_guid)))) { - foreach($container_guid as $key => $guid) { - $container_guid[$key] = (int) $guid; - } - } else { - $container_guid = (int) $container_guid; - } - if ($site_guid == 0) - $site_guid = $CONFIG->site_guid; - - //$access = get_access_list(); - - $where = array(); - - if ($entity_type!="") - $where[] = "e.type='$entity_type'"; - if ($entity_subtype) - $where[] = "e.subtype=$entity_subtype"; - $where[] = "m.name_id='$meta_start_n'"; - $where[] = "m2.name_id='$meta_end_n'"; - $where[] = "((v.string >= $meta_start_value AND v.string <= $meta_end_value) OR ( v2.string >= $meta_start_value AND v2.string <= $meta_end_value) OR (v.string <= $meta_start_value AND v2.string >= $meta_start_value) OR ( v2.string <= $meta_end_value AND v2.string >= $meta_end_value))"; - if ($region && $region != '-') { - $where[] = "m3.name_id='$region_n'"; - $where[] = "m3.value_id='$region_value_n'"; - } - if ($site_guid > 0) - $where[] = "e.site_guid = {$site_guid}"; - if ($filter) { - if (is_array($owner_guid)) { - $where[] = "ms2.string in (".implode(",",$owner_guid).")"; - } else if ($owner_guid > 0) { - $where[] = "ms2.string = {$owner_guid}"; - } - - $where[] = "ms.string = 'personal_event'"; - } else { - if (is_array($owner_guid)) { - $where[] = "e.owner_guid in (".implode(",",$owner_guid).")"; - } else if ($owner_guid > 0) { - $where[] = "e.owner_guid = {$owner_guid}"; - } - } - - if (is_array($container_guid)) { - $where[] = "e.container_guid in (".implode(",",$container_guid).")"; - } else if ($container_guid > 0) - $where[] = "e.container_guid = {$container_guid}"; - - if (!$count) { - $query = "SELECT distinct e.* "; - } else { - $query = "SELECT count(distinct e.guid) as total "; - } - - $query .= "FROM {$CONFIG->dbprefix}entities e JOIN {$CONFIG->dbprefix}metadata m on e.guid = m.entity_guid JOIN {$CONFIG->dbprefix}metadata m2 on e.guid = m2.entity_guid "; - if ($filter) { - $query .= "JOIN {$CONFIG->dbprefix}annotations a ON (a.entity_guid = e.guid) "; - $query .= "JOIN {$CONFIG->dbprefix}metastrings ms ON (a.name_id = ms.id) "; - $query .= "JOIN {$CONFIG->dbprefix}metastrings ms2 ON (a.value_id = ms2.id) "; - } - if ($region && $region != '-') { - $query .= "JOIN {$CONFIG->dbprefix}metadata m3 ON (e.guid = m3.entity_guid) "; - } - if ($meta_max && $annotation_name) { - // This groups events for which the meta max name is defined - // perhaps this should be a left join and accept null values? - // so it would return groups with no spots defined as well - $meta_max_n = get_metastring_id($meta_max); - $ann_n = get_metastring_id($annotation_name); - if (!$meta_max_n || !$ann_n) { - if ($count) { - return 0; - } else { - return false; - } - } - - $query .= " LEFT JOIN {$CONFIG->dbprefix}metadata m4 ON (e.guid = m4.entity_guid AND m4.name_id=$meta_max_n) "; - $query .= " LEFT JOIN {$CONFIG->dbprefix}metastrings ms4 ON (m4.value_id = ms4.id) "; - $where[] = "((ms4.string is null) OR (ms4.string = \"\") OR (CONVERT(ms4.string,SIGNED) > (SELECT count(id) FROM {$CONFIG->dbprefix}annotations ann WHERE ann.entity_guid = e.guid AND name_id = $ann_n GROUP BY entity_guid)))"; - } - $query .= "JOIN {$CONFIG->dbprefix}metastrings v on v.id = m.value_id JOIN {$CONFIG->dbprefix}metastrings v2 on v2.id = m2.value_id where"; - foreach ($where as $w) - $query .= " $w AND "; - $query .= get_access_sql_suffix("e"); // Add access controls - $query .= ' AND ' . get_access_sql_suffix("m"); // Add access controls - $query .= ' AND ' . get_access_sql_suffix("m2"); // Add access controls - - if (!$count) { - $query .= " order by $order_by limit $offset, $limit"; // Add order and limit - return get_data($query, "entity_row_to_elggstar"); - } else { - if ($row = get_data_row($query)) - return $row->total; - } - return false; -} - -function event_calendar_has_personal_event($event_id,$user_id) { - $annotations = get_annotations($event_id, "object", "event_calendar", "personal_event", (int) $user_id, $user_id); - if ($annotations && count($annotations) > 0) { - return true; - } else { - return false; - } -} - -function event_calendar_add_personal_event($event_id,$user_id) { - if ($event_id && $user_id) { - if ( !event_calendar_has_personal_event($event_id,$user_id) - && !event_calendar_has_collision($event_id,$user_id)) { - if (!event_calendar_is_full($event_id)) { - create_annotation($event_id, "personal_event", (int) $user_id, 'integer', $user_id, ACCESS_PUBLIC); - return TRUE; - } - } - } - return FALSE; -} - -function event_calendar_add_personal_events_from_group($event_id,$group_guid) { - $members = get_group_members($group_guid, 100000); - foreach($members as $member) { - $member_id = $member->getGUID(); - event_calendar_add_personal_event($event_id,$member_id); - } -} - -function event_calendar_remove_personal_event($event_id,$user_id) { - $annotations = get_annotations($event_id, "object", "event_calendar", "personal_event", (int) $user_id, $user_id); - if ($annotations) { - foreach ($annotations as $annotation) { - $annotation->delete(); - } - } -} - -function event_calendar_get_personal_events_for_user($user_id,$limit) { - $events = get_entities_from_annotations("object", "event_calendar", "personal_event", $user_id,0, 0, 1000); - $final_events = array(); - if ($events) { - $now = time(); - $one_day = 60*60*24; - // don't show events that have been over for more than a day - foreach($events as $event) { - if (($event->start_date > $now-$one_day) || ($event->end_date && ($event->end_date > $now-$one_day))) { - $final_events[] = $event; - } - } - } - $sorted = event_calendar_vsort($final_events,'start_date'); - return array_slice($sorted,0,$limit); -} - -function event_calendar_get_users_for_event($event_id,$limit,$offset,$is_count) { - if ($is_count) { - return count_annotations($event_id, "object", "event_calendar", "personal_event"); - } else { - $users = array(); - $annotations = get_annotations($event_id, "object", "event_calendar", "personal_event", "", 0, $limit, $offset); - if ($annotations) { - foreach($annotations as $annotation) { - if (($user = get_entity($annotation->value)) && ($user instanceOf ElggUser)) { - $users[] = $user; - } - } - } - return $users; - } -} - -function event_calendar_security_fields() { - $ts = time(); - $token = generate_action_token($ts); - return "__elgg_token=$token&__elgg_ts=$ts"; -} - -function event_calendar_get_events_for_group($group_guid) { - return get_entities('object','event_calendar',0,"",0,0,false,0,$group_guid); -} - -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); - } -} - -function event_calendar_convert_time($time) { - $hour = floor($time/60); - $minute = sprintf("%02d",$time-60*$hour); - return "$hour:$minute"; -} - -function event_calendar_format_time($date,$time1,$time2='') { - if (is_numeric($time1)) { - $t = event_calendar_convert_time($time1); - if (is_numeric($time2)) { - $t .= " - ".event_calendar_convert_time($time2); - } - return "$t, $date"; - } else { - return $date; - } -} - -function event_calendar_activated_for_group($group) { - $group_calendar = get_plugin_setting('group_calendar', 'event_calendar'); - $group_default = get_plugin_setting('group_default', 'event_calendar'); - if ($group && ($group_calendar != 'no')) { - if ( ($group->event_calendar_enable == 'yes') || ((!$group->event_calendar_enable && (!$group_default || $group_default == 'yes')))) { - return true; - } - } - return false; -} - -function event_calendar_get_region($event) { - $event_calendar_region_list_handles = get_plugin_setting('region_list_handles', 'event_calendar'); - $region = trim($event->region); - if ($event_calendar_region_list_handles == 'yes') { - $region = elgg_echo('event_calendar:region:'.$region); - } - return htmlspecialchars($region); -} - -function event_calendar_get_type($event) { - $event_calendar_type_list_handles = get_plugin_setting('type_list_handles', 'event_calendar'); - $type = trim($event->event_type); - if ($event_calendar_type_list_handles == 'yes') { - $type = elgg_echo('event_calendar:type:'.$type); - } - return htmlspecialchars($type); -} - -function event_calendar_get_formatted_full_items($event) { - $time_bit = event_calendar_get_formatted_time($event); - $event_calendar_region_display = get_plugin_setting('region_display', 'event_calendar'); - $event_calendar_type_display = 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; - $item = new stdClass(); - $item->title = elgg_echo('event_calendar:venue_label'); - $item->value = htmlspecialchars($event->venue); - $event_items[] = $item; - if ($event_calendar_region_display == 'yes') { - $item = new stdClass(); - $item->title = elgg_echo('event_calendar:region_label'); - $item->value = event_calendar_get_region($event); - $event_items[] = $item; - } - if ($event_calendar_type_display == 'yes') { - $item = new stdClass(); - $item->title = elgg_echo('event_calendar:type_label'); - $item->value = event_calendar_get_type($event); - $event_items[] = $item; - } - $item = new stdClass(); - $item->title = elgg_echo('event_calendar:fees_label'); - $item->value = htmlspecialchars($event->fees); - $event_items[] = $item; - $item = new stdClass(); - $item->title = elgg_echo('event_calendar:organiser_label'); - $item->value = htmlspecialchars($event->organiser); - $event_items[] = $item; - $item = new stdClass(); - $item->title = elgg_echo('event_calendar:contact_label'); - $item->value = htmlspecialchars($event->contact); - $event_items[] = $item; - $item = new stdClass(); - $item->title = elgg_echo('event_calendar:event_tags_label'); - $item->value = elgg_view("output/tags",array('value'=>$event->event_tags)); - $event_items[] = $item; - - return $event_items; -} - -function event_calendar_get_formatted_time($event) { - $date_format = 'j M Y'; - $event_calendar_times = get_plugin_setting('times', 'event_calendar'); - - $start_date = date($date_format,$event->start_date); - if ((!$event->end_date) || ($event->end_date == $event->start_date)) { - if ($event_calendar_times) { - $start_date = event_calendar_format_time($start_date,$event->start_time,$event->end_time); - } - $time_bit = $start_date; - } else { - $end_date = date($date_format,$event->end_date); - if ($event_calendar_times) { - $start_date = event_calendar_format_time($start_date,$event->start_time); - $end_date = event_calendar_format_time($end_date,$event->end_time); - } - $time_bit = "$start_date - $end_date"; - } - - return $time_bit; -} - -function event_calendar_get_formatted_date($ts) { - // TODO: make the date format configurable - return date('j/n/Y',$ts); -} - -function event_calendar_is_full($event_id) { - $event_calendar_spots_display = get_plugin_setting('spots_display', 'event_calendar'); - if ($event_calendar_spots_display == 'yes') { - $count = event_calendar_get_users_for_event($event_id,0,0,TRUE); - $event = get_entity($event_id); - if ($event) { - $spots = $event->spots; - if (is_numeric($spots)) { - if ($count >= $spots) { - return TRUE; - } - } - } - } - return FALSE; -} - -function event_calendar_has_collision($event_id, $user_id) { - $no_collisions = get_plugin_setting('no_collisions', 'event_calendar'); - if ($no_collisions == 'yes') { - $event = get_entity($event_id); - if ($event) { - $start_time = $event->start_date; - $end_time = event_calendar_get_end_time($event); - // look to see if the user already has events within this period - $count = event_calendar_get_events_for_user_between2($start_time,$end_time,TRUE,10,0,$user_id); - if ($count > 0) { - return TRUE; - } else { - return FALSE; - } - } - } - - return FALSE; -} - -// this complicated bit of code determines the event end time -function event_calendar_get_end_time($event) { - $default_length = get_plugin_setting('collision_length', 'event_calendar'); - $start_time = $event->start_date; - $end_time = $event->end_time; - $end_date = $event->end_date; - if($end_date) { - if ($end_time) { - $end_time = $end_date+$end_time*60; - } else if ($start_time == $end_date) { - if (is_numeric($default_length)) { - $end_time = $end_date + $default_length; - } else { - // default to an hour length - $end_time = $start_time + 3600; - } - } else { - $end_time = $end_date; - } - } else { - if ($end_time) { - if ($event->start_time) { - $end_time = $start_time + ($end_time*60 - $event->start_time*60); - } else { - $end_time = $start_time + $end_time*60; - } - } else { - if (is_numeric($default_length)) { - $end_time = $start_time + $default_length; - } else { - // default to an hour length - $end_time = $start_time + 3600; - } - } - } - - return $end_time; -} - -// a version to allow for some customised options -function event_calendar_view_entity_list($entities, $count, $offset, $limit, $fullview = true, $viewtypetoggle = true, $pagination = true) { - $count = (int) $count; - $limit = (int) $limit; - - // do not require views to explicitly pass in the offset - if (!$offset = (int) $offset) { - $offset = sanitise_int(get_input('offset', 0)); - } - - $context = get_context(); - - $html = elgg_view('event_calendar/entities/entity_list',array( - 'entities' => $entities, - 'count' => $count, - 'offset' => $offset, - 'limit' => $limit, - 'baseurl' => $_SERVER['REQUEST_URI'], - 'fullview' => $fullview, - 'context' => $context, - 'viewtypetoggle' => $viewtypetoggle, - 'viewtype' => get_input('search_viewtype','list'), - 'pagination' => $pagination - )); - - return $html; -} - -function event_calendar_personal_can_manage($event,$user_id) { - $authorised = FALSE; - $event_calendar_personal_manage = get_plugin_setting('personal_manage', 'event_calendar'); - if ($event_calendar_personal_manage != 'no') { - $authorised = TRUE; - } else { - if(isadminloggedin()) { - $authorised = TRUE; - } else { - // load the event from the database - if ($event && ($event->owner_guid == $user_id)) { - $authorised = TRUE; - } - } - } - - return $authorised; -} - -function event_calendar_send_event_request($event,$user_id) { - global $CONFIG; - $result = FALSE; - if(add_entity_relationship($user_id, 'event_calendar_request', $event->guid)) { - $subject = elgg_echo('event_calendar:request_subject'); - $name = get_entity($user_id)->name; - $title = $event->title; - $url = $event->getUrl(); - $link = $CONFIG->wwwroot.'pg/event_calendar/review_requests/'.$event->guid; - $message = sprintf(elgg_echo('event_calendar:request_message'),$name,$title,$url,$link); - notify_user($event->owner_guid,$CONFIG->site->guid,$subject,$message); - $result = TRUE; - } - return $result; -} - -?> \ No newline at end of file diff --git a/trunk/pages/review_requests.php b/trunk/pages/review_requests.php deleted file mode 100644 index fc6c3726a..000000000 --- a/trunk/pages/review_requests.php +++ /dev/null @@ -1,33 +0,0 @@ - 'event_calendar_request', - 'relationship_guid' => $event_id, - 'inverse_relationship' => TRUE, - 'limit' => 9999) - ); - if ($requests) { - $body = elgg_view('event_calendar/review_requests',array('requests' => $requests, 'entity' => $event)); - //$body = elgg_view('page_elements/contentwrapper',array('body'=>$body)); - } else { - $body = elgg_view('page_elements/contentwrapper',array('body'=>elgg_echo('event_calendar:review_requests_request_none'))); - } -} else { - $body = elgg_view('page_elements/contentwrapper',array('body'=>elgg_echo('event_calendar:review_requests_error'))); -} - -$body = elgg_view_layout('two_column_left_sidebar', '', elgg_view_title($title).$body); - -page_draw($title, $body); -?> \ No newline at end of file diff --git a/trunk/show_event.php b/trunk/show_event.php deleted file mode 100644 index f2869c36d..000000000 --- a/trunk/show_event.php +++ /dev/null @@ -1,60 +0,0 @@ - - * @copyright Radagast Solutions 2008 - * @link http://radagast.biz/ - * - */ - -// Load Elgg engine -require_once(dirname(dirname(dirname(__FILE__))) . "/engine/start.php"); - -// Load event calendar model -require_once(dirname(__FILE__) . "/models/model.php"); - -// Define context -set_context('event_calendar'); - -global $CONFIG; - -$event_id = get_input('event_id',0); -if ($event_id && ($event = get_entity($event_id))) { - $event_container = get_entity($event->container_guid); - if ($event_container instanceOf ElggGroup) { - // Re-define context - set_context('groups'); - set_page_owner($event_container->getGUID()); - } - $count = event_calendar_get_users_for_event($event_id,0,0,true); - if ($count > 0) { - add_submenu_item(sprintf(elgg_echo('event_calendar:personal_event_calendars_link'),$count), $CONFIG->url . "mod/event_calendar/display_event_users.php?event_id=".$event_id, '0eventnonadmin'); - } - if (isloggedin()) { - $user_id = get_loggedin_userid(); - if (event_calendar_personal_can_manage($event,$user_id)) { - if (event_calendar_has_personal_event($event_id,$user_id)) { - add_submenu_item(elgg_echo('event_calendar:remove_from_my_calendar'), $CONFIG->url . "action/event_calendar/manage?event_action=remove_personal&event_id=".$event_id.'&'.event_calendar_security_fields(), '0eventnonadmin'); - } else { - if (!event_calendar_is_full($event_id) && !event_calendar_has_collision($event_id,$user_id)) { - add_submenu_item(elgg_echo('event_calendar:add_to_my_calendar'), $CONFIG->url . "action/event_calendar/manage?event_action=add_personal&event_id=".$event_id.'&'.event_calendar_security_fields(), '0eventnonadmin'); - } - } - } else { - if (!check_entity_relationship($user_id, 'event_calendar_request', $event_id)) { - add_submenu_item(elgg_echo('event_calendar:make_request_title'), $CONFIG->url . "action/event_calendar/request_personal_calendar?event_id=".$event_id.'&'.event_calendar_security_fields(), '0eventnonadmin'); - } - } - } - $body = elgg_view('object/event_calendar',array('entity'=>$event,'full'=>true)); - $title = $event->title; - page_draw($title,elgg_view_layout("two_column_left_sidebar", '', elgg_view_title($title) . $body)); -} else { - register_error('event_calendar:error_nosuchevent'); - forward(); -} -?> \ No newline at end of file diff --git a/trunk/show_events.php b/trunk/show_events.php deleted file mode 100644 index 4d8f09702..000000000 --- a/trunk/show_events.php +++ /dev/null @@ -1,213 +0,0 @@ - - * @copyright Radagast Solutions 2008 - * @link http://radagast.biz/ - * - */ - -// Load Elgg engine -require_once(dirname(dirname(dirname(__FILE__))) . "/engine/start.php"); - -// Load event model -require_once(dirname(__FILE__) . "/models/model.php"); - -// Define context -set_context('event_calendar'); - -global $CONFIG; - -global $autofeed; -$autofeed = true; - -$event = ''; - -$event_calendar_listing_format = get_plugin_setting('listing_format', 'event_calendar'); -$event_calendar_spots_display = trim(get_plugin_setting('spots_display', 'event_calendar')); -$event_calendar_first_date = trim(get_plugin_setting('first_date', 'event_calendar')); -$event_calendar_last_date = trim(get_plugin_setting('last_date', 'event_calendar')); - -$original_start_date = get_input('start_date',date('Y-m-d')); -if ( $event_calendar_first_date && ($original_start_date < $event_calendar_first_date) ) { - $original_start_date = $event_calendar_first_date; -} -if ( $event_calendar_last_date && ($original_start_date > $event_calendar_last_date) ) { - $original_start_date = $event_calendar_first_date; -} - -if ($event_calendar_listing_format == 'paged') { - $start_ts = strtotime($original_start_date); - $start_date = $original_start_date; - if ($event_calendar_last_date) { - $end_ts = strtotime($event_calendar_last_date); - } else { - // set to a large number - $end_ts = 2000000000; - } -} else { - - // the default interval is one month - $day = 60*60*24; - $week = 7*$day; - $month = 31*$day; - - $mode = trim(get_input('mode','')); - - if ($mode == "day") { - $start_date = $original_start_date; - $end_date = $start_date; - $start_ts = strtotime($start_date); - $end_ts = strtotime($end_date)+$day-1; - } else if ($mode == "week") { - // need to adjust start_date to be the beginning of the week - $start_ts = strtotime($original_start_date); - $start_ts -= date("w",$start_ts)*$day; - $end_ts = $start_ts + 6*$day; - - $start_date = date('Y-m-d',$start_ts); - $end_date = date('Y-m-d',$end_ts); - } else { - $start_ts = strtotime($original_start_date); - $month = date('m',$start_ts); - $year = date('Y',$start_ts); - $start_date = $year.'-'.$month.'-1'; - $end_date = $year.'-'.$month.'-'.getLastDayOfMonth($month,$year); - //$subtitle = elgg_echo('event_calendar:month_label').': '.date('F Y',$start_ts); - // RIBA wants month prefix removed - } - - if ($event_calendar_first_date && ($start_date < $event_calendar_first_date)) { - $start_date = $event_calendar_first_date; - } - - if ($event_calendar_last_date && ($end_date > $event_calendar_last_date)) { - $end_date = $event_calendar_last_date; - } - - $start_ts = strtotime($start_date); - - if ($mode == "day") { - $end_ts = strtotime($end_date)+$day-1; - $subtitle = elgg_echo('event_calendar:day_label').': '.date('j F Y',strtotime($start_date)); - } else if ($mode == "week") { - $end_ts = $start_ts + 6*$day; - $subtitle = elgg_echo('event_calendar:week_label').': '.date('j F',$start_ts) . ' - '.date('j F Y',$end_ts); - } else { - //$subtitle = elgg_echo('event_calendar:month_label').': '.date('F Y',$start_ts); - // RIBA wants month prefix removed - $end_ts = strtotime($end_date); - $subtitle = date('F Y',$start_ts); - } -} - -$group_guid = (int) get_input('group_guid',0); -if ($group_guid && $group = get_entity($group_guid)) { - // redefine context - set_context('groups'); - set_page_owner($group_guid); - $group_calendar = get_plugin_setting('group_calendar', 'event_calendar'); - if (!$group_calendar || $group_calendar == 'members') { - if (page_owner_entity()->canWriteToContainer($_SESSION['user'])){ - add_submenu_item(elgg_echo('event_calendar:new'), $CONFIG->url . "pg/event_calendar/new/?group_guid=" . page_owner(), '1eventcalendaradmin'); - } - } else if ($group_calendar == 'admin') { - if (isadminloggedin() || ($group->owner_guid == get_loggedin_userid())) { - add_submenu_item(elgg_echo('event_calendar:new'), $CONFIG->url . "pg/event_calendar/new/?group_guid=" . page_owner(), '1eventcalendaradmin'); - } - } -} - -$offset = get_input('offset'); - -if ($offset != NULL) { - // don't allow ajax magic during pagination - $offset = (int) $offset; - $callback=''; -} else { - $offset = 0; - $callback = get_input('callback',''); -} - -$limit = 15; -if ($event_calendar_spots_display == 'yes') { - $filter = get_input('filter','open'); -} else { - $filter = get_input('filter','all'); -} -$region = get_input('region','-'); -if ($filter == 'all') { - $count = event_calendar_get_events_between($start_ts,$end_ts,true,$limit,$offset,$group_guid,$region); - $events = event_calendar_get_events_between($start_ts,$end_ts,false,$limit,$offset,$group_guid,$region); -} else if ($filter == 'open') { - $count = event_calendar_get_open_events_between($start_ts,$end_ts,true,$limit,$offset,$group_guid,$region); - $events = event_calendar_get_open_events_between($start_ts,$end_ts,false,$limit,$offset,$group_guid,$region); -} else if ($filter == 'friends') { - $user_guid = get_loggedin_userid(); - $count = event_calendar_get_events_for_friends_between($start_ts,$end_ts,true,$limit,$offset,$user_guid,$group_guid,$region); - $events = event_calendar_get_events_for_friends_between($start_ts,$end_ts,false,$limit,$offset,$user_guid,$group_guid,$region); -} else if ($filter == 'mine') { - $user_guid = get_loggedin_userid(); - $count = event_calendar_get_events_for_user_between($start_ts,$end_ts,true,$limit,$offset,$user_guid,$group_guid,$region); - $events = event_calendar_get_events_for_user_between($start_ts,$end_ts,false,$limit,$offset,$user_guid,$group_guid,$region); -} - -extend_view('metatags','event_calendar/metatags'); - -$vars = array( 'original_start_date' => $original_start_date, - 'start_date' => $start_date, - 'end_date' => $end_date, - 'first_date' => $event_calendar_first_date, - 'last_date' => $event_calendar_last_date, - 'mode' => $mode, - 'events' => $events, - 'count' => $count, - 'offset' => $offset, - 'limit' => $limit, - 'group_guid' => $group_guid, - 'filter' => $filter, - 'region' => $region, - 'listing_format' => $event_calendar_listing_format, -); - -if ($callback) { - if (isloggedin()) { - $nav = elgg_view('event_calendar/nav',$vars); - } else { - $nav = ''; - } - if ($events) { - if (get_plugin_setting('agenda_view', 'event_calendar') == 'yes') { - $event_list = elgg_view('event_calendar/agenda_view',$vars); - } else { - $event_list = elgg_view_entity_list($events, $count, $offset, $limit, false, false); - } - } else { - $event_list = '

'.elgg_echo('event_calendar:no_events_found').'

'; - } - echo $nav.'
'.$event_list; -} else { - - $body = elgg_view('event_calendar/show_events', $vars); - - if ($event_calendar_listing_format == 'paged') { - $title = elgg_echo('event_calendar:upcoming_events_title'); - } else { - $title = elgg_echo('event_calendar:show_events_title'). ' ('.$subtitle.')'; - } - - $body = elgg_view('page_elements/contentwrapper',array('body' =>$body, 'subclass' => 'events')); - - page_draw($title,elgg_view_layout("two_column_left_sidebar", '', elgg_view_title($title).$body)); -} - -function getLastDayOfMonth($month,$year) { - return idate('d', mktime(0, 0, 0, ($month + 1), 0, $year)); -} - - -?> \ No newline at end of file diff --git a/trunk/start.php b/trunk/start.php deleted file mode 100644 index d12f56848..000000000 --- a/trunk/start.php +++ /dev/null @@ -1,190 +0,0 @@ - - * @copyright Radagast Solutions 2008 - * @link http://radagast.biz/ - */ - // Load event calendar model - require_once(dirname(__FILE__) . "/models/model.php"); - /** - * event calendar initialisation - * - * These parameters are required for the event API, but we won't use them: - * - * @param unknown_type $event - * @param unknown_type $object_type - * @param unknown_type $object - */ - - function event_calendar_init() { - - // Load system configuration - global $CONFIG; - - // Register a page handler, so we can have nice URLs - register_page_handler('event_calendar','event_calendar_page_handler'); - - // Register URL handler - register_entity_url_handler('event_calendar_url','object', 'event_calendar'); - - // Register granular notification for this type - if (is_callable('register_notification_object')) - register_notification_object('object', 'event_calendar', elgg_echo('event_calendar:new_event')); - - // Set up menu for users - if (isloggedin()) { - $site_calendar = get_plugin_setting('site_calendar', 'event_calendar'); - if (!$site_calendar || $site_calendar != 'no') { - add_menu(elgg_echo('item:object:event_calendar'), $CONFIG->wwwroot . "pg/event_calendar/"); - } - } - // make tags searchable for Elgg 1.7.4 - if (function_exists('elgg_register_tag_metadata_name')) { - elgg_register_tag_metadata_name('event_tags'); - } - - //add to group profile page - $group_calendar = get_plugin_setting('group_calendar', 'event_calendar'); - if (!$group_calendar || $group_calendar != 'no') { - $group_profile_display = get_plugin_setting('group_profile_display', 'event_calendar'); - if (!$group_profile_display || $group_profile_display == 'right') { - extend_view('groups/right_column', 'event_calendar/groupprofile_calendar'); - } else if ($group_profile_display == 'left') { - extend_view('groups/left_column', 'event_calendar/groupprofile_calendar'); - } - } - - //add to the css - extend_view('css', 'event_calendar/css'); - - //add a widget - add_widget_type('event_calendar',elgg_echo("event_calendar:widget_title"),elgg_echo('event_calendar:widget:description')); - - // add the event calendar group tool option - if (function_exists('add_group_tool_option')) { - $event_calendar_group_default = get_plugin_setting('group_default', 'event_calendar'); - if (!$event_calendar_group_default || ($event_calendar_group_default == 'yes')) { - add_group_tool_option('event_calendar',elgg_echo('event_calendar:enable_event_calendar'),true); - } else { - add_group_tool_option('event_calendar',elgg_echo('event_calendar:enable_event_calendar'),false); - } - } - - // if autogroup is set, listen and respond to join/leave events - if (get_plugin_setting('autogroup', 'event_calendar') == 'yes') { - register_elgg_event_handler('join', 'group', 'event_calendar_handle_join'); - register_elgg_event_handler('leave', 'group', 'event_calendar_handle_leave'); - } - - register_entity_type('object','event_calendar'); - } - - function event_calendar_pagesetup() { - - global $CONFIG; - - $page_owner = page_owner_entity(); - - $context = get_context(); - - // Group submenu option - if ($page_owner instanceof ElggGroup && $context == 'groups') { - if (event_calendar_activated_for_group($page_owner)) { - add_submenu_item(elgg_echo("event_calendar:group"), $CONFIG->wwwroot . "pg/event_calendar/group/" . $page_owner->getGUID()); - } - } else if ($context == 'event_calendar'){ - add_submenu_item(elgg_echo("event_calendar:site_wide_link"), $CONFIG->wwwroot . "pg/event_calendar/"); - $site_calendar = get_plugin_setting('site_calendar', 'event_calendar'); - if (!$site_calendar || $site_calendar == 'admin') { - if (isadminloggedin()) { - // only admins can post directly to the site-wide calendar - add_submenu_item(elgg_echo('event_calendar:new'), $CONFIG->url . "pg/event_calendar/new/", 'eventcalendaractions'); - } - } else if ($site_calendar == 'loggedin') { - // any logged-in user can post to the site calendar - if (isloggedin()) { - add_submenu_item(elgg_echo('event_calendar:new'), $CONFIG->url . "pg/event_calendar/new/", 'eventcalendaractions'); - } - } - } - - if (($context == 'groups') || ($context == 'event_calendar')) { - if (($event_id = get_input('event_id',0)) && ($event = get_entity($event_id))) { - if (isadminloggedin() && (get_plugin_setting('allow_featured', 'event_calendar') == 'yes')) { - if ($event->featured) { - add_submenu_item(elgg_echo('event_calendar:unfeature'), $CONFIG->url . "action/event_calendar/unfeature?event_id=".$event_id.'&'.event_calendar_security_fields(), 'eventcalendaractions'); - } else { - add_submenu_item(elgg_echo('event_calendar:feature'), $CONFIG->url . "action/event_calendar/feature?event_id=".$event_id.'&'.event_calendar_security_fields(), 'eventcalendaractions'); - } - } - add_submenu_item(elgg_echo("event_calendar:view_link"), $CONFIG->wwwroot . "pg/event_calendar/view/" . $event_id,'0eventcalendaradmin'); - if ($event->canEdit()) { - add_submenu_item(elgg_echo("event_calendar:edit_link"), $CONFIG->wwwroot . "mod/event_calendar/manage_event.php?event_id=" . $event_id,'0eventcalendaradmin'); - add_submenu_item(elgg_echo("event_calendar:delete_link"), $CONFIG->wwwroot . "mod/event_calendar/delete_confirm.php?event_id=" . $event_id,'0eventcalendaradmin'); - $event_calendar_personal_manage = get_plugin_setting('personal_manage', 'event_calendar'); - if ($event_calendar_personal_manage == 'no') { - add_submenu_item(elgg_echo('event_calendar:review_requests_title'), $CONFIG->wwwroot . "pg/event_calendar/review_requests/".$event_id, '0eventcalendaradmin'); - } - } - } - } - } - - function event_calendar_url($entity) { - global $CONFIG; - return $CONFIG->url . 'pg/event_calendar/view/'.$entity->getGUID(); - } - - /** - * Page handler; allows the use of fancy URLs - * - * @param array $page From the page_handler function - * @return true|false Depending on success - */ - function event_calendar_page_handler($page) { - if (isset($page[0]) && $page[0]) { - if (($page[0] == 'group') && isset($page[1])) { - set_input('group_guid',$page[1]); - if (isset($page[2])) { - set_input('filter',$page[2]); - } - @include(dirname(__FILE__) . "/show_events.php"); - } else if (($page[0] == 'view') && isset($page[1])) { - set_input('event_id',$page[1]); - @include(dirname(__FILE__) . "/show_event.php"); - } else if ($page[0] == 'new') { - @include(dirname(__FILE__) . "/manage_event.php"); - } else if ($page[0] == 'review_requests' && isset($page[1])) { - set_input('event_id',$page[1]); - @include(dirname(__FILE__) . "/pages/review_requests.php"); - } else if (in_array($page[0],array('all','friends','mine'))) { - set_input('filter',$page[0]); - @include(dirname(__FILE__) . "/show_events.php"); - } - } else { - @include(dirname(__FILE__) . "/show_events.php"); - } - return true; - } - -// Make sure the event calendar functions are called - register_elgg_event_handler('init','system','event_calendar_init'); - register_elgg_event_handler('pagesetup','system','event_calendar_pagesetup'); - -// Register actions - - global $CONFIG; - register_action("event_calendar/manage",false,$CONFIG->pluginspath . "event_calendar/actions/manage.php"); - register_action("event_calendar/request_personal_calendar",false,$CONFIG->pluginspath . "event_calendar/actions/request_personal_calendar.php"); - register_action("event_calendar/toggle_personal_calendar",false,$CONFIG->pluginspath . "event_calendar/actions/toggle_personal_calendar.php"); - register_action("event_calendar/killrequest",false,$CONFIG->pluginspath . "event_calendar/actions/killrequest.php"); - register_action("event_calendar/addtocalendar",false,$CONFIG->pluginspath . "event_calendar/actions/addtocalendar.php"); - register_action("event_calendar/add_to_group",false,$CONFIG->pluginspath . "event_calendar/actions/add_to_group.php"); - register_action("event_calendar/remove_from_group",false,$CONFIG->pluginspath . "event_calendar/actions/remove_from_group.php"); - -?> \ No newline at end of file diff --git a/trunk/ui.core.min.js b/trunk/ui.core.min.js deleted file mode 100644 index b2352c67f..000000000 --- a/trunk/ui.core.min.js +++ /dev/null @@ -1,9 +0,0 @@ -/* - * jQuery UI 1.7.2 - * - * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT (MIT-LICENSE.txt) - * and GPL (GPL-LICENSE.txt) licenses. - * - * http://docs.jquery.com/UI - */ jQuery.ui||(function(c){var i=c.fn.remove,d=c.browser.mozilla&&(parseFloat(c.browser.version)<1.9);c.ui={version:"1.7.2",plugin:{add:function(k,l,n){var m=c.ui[k].prototype;for(var j in n){m.plugins[j]=m.plugins[j]||[];m.plugins[j].push([l,n[j]])}},call:function(j,l,k){var n=j.plugins[l];if(!n||!j.element[0].parentNode){return}for(var m=0;m0){return true}m[j]=1;l=(m[j]>0);m[j]=0;return l},isOverAxis:function(k,j,l){return(k>j)&&(k<(j+l))},isOver:function(o,k,n,m,j,l){return c.ui.isOverAxis(o,n,j)&&c.ui.isOverAxis(k,m,l)},keyCode:{BACKSPACE:8,CAPS_LOCK:20,COMMA:188,CONTROL:17,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,INSERT:45,LEFT:37,NUMPAD_ADD:107,NUMPAD_DECIMAL:110,NUMPAD_DIVIDE:111,NUMPAD_ENTER:108,NUMPAD_MULTIPLY:106,NUMPAD_SUBTRACT:109,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SHIFT:16,SPACE:32,TAB:9,UP:38}};if(d){var f=c.attr,e=c.fn.removeAttr,h="http://www.w3.org/2005/07/aaa",a=/^aria-/,b=/^wairole:/;c.attr=function(k,j,l){var m=l!==undefined;return(j=="role"?(m?f.call(this,k,j,"wairole:"+l):(f.apply(this,arguments)||"").replace(b,"")):(a.test(j)?(m?k.setAttributeNS(h,j.replace(a,"aaa:"),l):f.call(this,k,j.replace(a,"aaa:"))):f.apply(this,arguments)))};c.fn.removeAttr=function(j){return(a.test(j)?this.each(function(){this.removeAttributeNS(h,j.replace(a,""))}):e.call(this,j))}}c.fn.extend({remove:function(){c("*",this).add(this).each(function(){c(this).triggerHandler("remove")});return i.apply(this,arguments)},enableSelection:function(){return this.attr("unselectable","off").css("MozUserSelect","").unbind("selectstart.ui")},disableSelection:function(){return this.attr("unselectable","on").css("MozUserSelect","none").bind("selectstart.ui",function(){return false})},scrollParent:function(){var j;if((c.browser.msie&&(/(static|relative)/).test(this.css("position")))||(/absolute/).test(this.css("position"))){j=this.parents().filter(function(){return(/(relative|absolute|fixed)/).test(c.curCSS(this,"position",1))&&(/(auto|scroll)/).test(c.curCSS(this,"overflow",1)+c.curCSS(this,"overflow-y",1)+c.curCSS(this,"overflow-x",1))}).eq(0)}else{j=this.parents().filter(function(){return(/(auto|scroll)/).test(c.curCSS(this,"overflow",1)+c.curCSS(this,"overflow-y",1)+c.curCSS(this,"overflow-x",1))}).eq(0)}return(/fixed/).test(this.css("position"))||!j.length?c(document):j}});c.extend(c.expr[":"],{data:function(l,k,j){return !!c.data(l,j[3])},focusable:function(k){var l=k.nodeName.toLowerCase(),j=c.attr(k,"tabindex");return(/input|select|textarea|button|object/.test(l)?!k.disabled:"a"==l||"area"==l?k.href||!isNaN(j):!isNaN(j))&&!c(k)["area"==l?"parents":"closest"](":hidden").length},tabbable:function(k){var j=c.attr(k,"tabindex");return(isNaN(j)||j>=0)&&c(k).is(":focusable")}});function g(m,n,o,l){function k(q){var p=c[m][n][q]||[];return(typeof p=="string"?p.split(/,?\s+/):p)}var j=k("getter");if(l.length==1&&typeof l[0]=="string"){j=j.concat(k("getterSetter"))}return(c.inArray(o,j)!=-1)}c.widget=function(k,j){var l=k.split(".")[0];k=k.split(".")[1];c.fn[k]=function(p){var n=(typeof p=="string"),o=Array.prototype.slice.call(arguments,1);if(n&&p.substring(0,1)=="_"){return this}if(n&&g(l,k,p,o)){var m=c.data(this[0],k);return(m?m[p].apply(m,o):undefined)}return this.each(function(){var q=c.data(this,k);(!q&&!n&&c.data(this,k,new c[l][k](this,p))._init());(q&&n&&c.isFunction(q[p])&&q[p].apply(q,o))})};c[l]=c[l]||{};c[l][k]=function(o,n){var m=this;this.namespace=l;this.widgetName=k;this.widgetEventPrefix=c[l][k].eventPrefix||k;this.widgetBaseClass=l+"-"+k;this.options=c.extend({},c.widget.defaults,c[l][k].defaults,c.metadata&&c.metadata.get(o)[k],n);this.element=c(o).bind("setData."+k,function(q,p,r){if(q.target==o){return m._setData(p,r)}}).bind("getData."+k,function(q,p){if(q.target==o){return m._getData(p)}}).bind("remove",function(){return m.destroy()})};c[l][k].prototype=c.extend({},c.widget.prototype,j);c[l][k].getterSetter="option"};c.widget.prototype={_init:function(){},destroy:function(){this.element.removeData(this.widgetName).removeClass(this.widgetBaseClass+"-disabled "+this.namespace+"-state-disabled").removeAttr("aria-disabled")},option:function(l,m){var k=l,j=this;if(typeof l=="string"){if(m===undefined){return this._getData(l)}k={};k[l]=m}c.each(k,function(n,o){j._setData(n,o)})},_getData:function(j){return this.options[j]},_setData:function(j,k){this.options[j]=k;if(j=="disabled"){this.element[k?"addClass":"removeClass"](this.widgetBaseClass+"-disabled "+this.namespace+"-state-disabled").attr("aria-disabled",k)}},enable:function(){this._setData("disabled",false)},disable:function(){this._setData("disabled",true)},_trigger:function(l,m,n){var p=this.options[l],j=(l==this.widgetEventPrefix?l:this.widgetEventPrefix+l);m=c.Event(m);m.type=j;if(m.originalEvent){for(var k=c.event.props.length,o;k;){o=c.event.props[--k];m[o]=m.originalEvent[o]}}this.element.trigger(m,n);return !(c.isFunction(p)&&p.call(this.element[0],m,n)===false||m.isDefaultPrevented())}};c.widget.defaults={disabled:false};c.ui.mouse={_mouseInit:function(){var j=this;this.element.bind("mousedown."+this.widgetName,function(k){return j._mouseDown(k)}).bind("click."+this.widgetName,function(k){if(j._preventClickEvent){j._preventClickEvent=false;k.stopImmediatePropagation();return false}});if(c.browser.msie){this._mouseUnselectable=this.element.attr("unselectable");this.element.attr("unselectable","on")}this.started=false},_mouseDestroy:function(){this.element.unbind("."+this.widgetName);(c.browser.msie&&this.element.attr("unselectable",this._mouseUnselectable))},_mouseDown:function(l){l.originalEvent=l.originalEvent||{};if(l.originalEvent.mouseHandled){return}(this._mouseStarted&&this._mouseUp(l));this._mouseDownEvent=l;var k=this,m=(l.which==1),j=(typeof this.options.cancel=="string"?c(l.target).parents().add(l.target).filter(this.options.cancel).length:false);if(!m||j||!this._mouseCapture(l)){return true}this.mouseDelayMet=!this.options.delay;if(!this.mouseDelayMet){this._mouseDelayTimer=setTimeout(function(){k.mouseDelayMet=true},this.options.delay)}if(this._mouseDistanceMet(l)&&this._mouseDelayMet(l)){this._mouseStarted=(this._mouseStart(l)!==false);if(!this._mouseStarted){l.preventDefault();return true}}this._mouseMoveDelegate=function(n){return k._mouseMove(n)};this._mouseUpDelegate=function(n){return k._mouseUp(n)};c(document).bind("mousemove."+this.widgetName,this._mouseMoveDelegate).bind("mouseup."+this.widgetName,this._mouseUpDelegate);(c.browser.safari||l.preventDefault());l.originalEvent.mouseHandled=true;return true},_mouseMove:function(j){if(c.browser.msie&&!j.button){return this._mouseUp(j)}if(this._mouseStarted){this._mouseDrag(j);return j.preventDefault()}if(this._mouseDistanceMet(j)&&this._mouseDelayMet(j)){this._mouseStarted=(this._mouseStart(this._mouseDownEvent,j)!==false);(this._mouseStarted?this._mouseDrag(j):this._mouseUp(j))}return !this._mouseStarted},_mouseUp:function(j){c(document).unbind("mousemove."+this.widgetName,this._mouseMoveDelegate).unbind("mouseup."+this.widgetName,this._mouseUpDelegate);if(this._mouseStarted){this._mouseStarted=false;this._preventClickEvent=(j.target==this._mouseDownEvent.target);this._mouseStop(j)}return false},_mouseDistanceMet:function(j){return(Math.max(Math.abs(this._mouseDownEvent.pageX-j.pageX),Math.abs(this._mouseDownEvent.pageY-j.pageY))>=this.options.distance)},_mouseDelayMet:function(j){return this.mouseDelayMet},_mouseStart:function(j){},_mouseDrag:function(j){},_mouseStop:function(j){},_mouseCapture:function(j){return true}};c.ui.mouse.defaults={cancel:null,distance:1,delay:0}})(jQuery); \ No newline at end of file diff --git a/trunk/ui.datepicker.css b/trunk/ui.datepicker.css deleted file mode 100644 index 567f8c97b..000000000 --- a/trunk/ui.datepicker.css +++ /dev/null @@ -1,62 +0,0 @@ -/* Datepicker -----------------------------------*/ -.ui-datepicker { width: 17em; padding: .2em .2em 0; } -.ui-datepicker .ui-datepicker-header { position:relative; padding:.2em 0; } -.ui-datepicker .ui-datepicker-prev, .ui-datepicker .ui-datepicker-next { position:absolute; top: 2px; width: 1.8em; height: 1.8em; } -.ui-datepicker .ui-datepicker-prev-hover, .ui-datepicker .ui-datepicker-next-hover { top: 1px; } -.ui-datepicker .ui-datepicker-prev { left:2px; } -.ui-datepicker .ui-datepicker-next { right:2px; } -.ui-datepicker .ui-datepicker-prev-hover { left:1px; } -.ui-datepicker .ui-datepicker-next-hover { right:1px; } -.ui-datepicker .ui-datepicker-prev span, .ui-datepicker .ui-datepicker-next span { display: block; position: absolute; left: 50%; margin-left: -8px; top: 50%; margin-top: -8px; } -.ui-datepicker .ui-datepicker-title { margin: 0 2.3em; line-height: 1.8em; text-align: center; } -.ui-datepicker .ui-datepicker-title select { float:left; font-size:1em; margin:1px 0; } -.ui-datepicker select.ui-datepicker-month-year {width: 100%;} -.ui-datepicker select.ui-datepicker-month, -.ui-datepicker select.ui-datepicker-year { width: 49%;} -.ui-datepicker .ui-datepicker-title select.ui-datepicker-year { float: right; } -.ui-datepicker table {width: 100%; font-size: .9em; border-collapse: collapse; margin:0 0 .4em; } -.ui-datepicker th { padding: .7em .3em; text-align: center; font-weight: bold; border: 0; } -.ui-datepicker td { border: 0; padding: 1px; } -.ui-datepicker td span, .ui-datepicker td a { display: block; padding: .2em; text-align: right; text-decoration: none; } -.ui-datepicker .ui-datepicker-buttonpane { background-image: none; margin: .7em 0 0 0; padding:0 .2em; border-left: 0; border-right: 0; border-bottom: 0; } -.ui-datepicker .ui-datepicker-buttonpane button { float: right; margin: .5em .2em .4em; cursor: pointer; padding: .2em .6em .3em .6em; width:auto; overflow:visible; } -.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current { float:left; } - -/* with multiple calendars */ -.ui-datepicker.ui-datepicker-multi { width:auto; } -.ui-datepicker-multi .ui-datepicker-group { float:left; } -.ui-datepicker-multi .ui-datepicker-group table { width:95%; margin:0 auto .4em; } -.ui-datepicker-multi-2 .ui-datepicker-group { width:50%; } -.ui-datepicker-multi-3 .ui-datepicker-group { width:33.3%; } -.ui-datepicker-multi-4 .ui-datepicker-group { width:25%; } -.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header { border-left-width:0; } -.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header { border-left-width:0; } -.ui-datepicker-multi .ui-datepicker-buttonpane { clear:left; } -.ui-datepicker-row-break { clear:both; width:100%; } - -/* RTL support */ -.ui-datepicker-rtl { direction: rtl; } -.ui-datepicker-rtl .ui-datepicker-prev { right: 2px; left: auto; } -.ui-datepicker-rtl .ui-datepicker-next { left: 2px; right: auto; } -.ui-datepicker-rtl .ui-datepicker-prev:hover { right: 1px; left: auto; } -.ui-datepicker-rtl .ui-datepicker-next:hover { left: 1px; right: auto; } -.ui-datepicker-rtl .ui-datepicker-buttonpane { clear:right; } -.ui-datepicker-rtl .ui-datepicker-buttonpane button { float: left; } -.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current { float:right; } -.ui-datepicker-rtl .ui-datepicker-group { float:right; } -.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header { border-right-width:0; border-left-width:1px; } -.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header { border-right-width:0; border-left-width:1px; } - -/* IE6 IFRAME FIX (taken from datepicker 1.5.3 */ -.ui-datepicker-cover { - display: none; /*sorry for IE5*/ - display/**/: block; /*sorry for IE5*/ - position: absolute; /*must have*/ - z-index: -1; /*must have*/ - filter: mask(); /*must have*/ - top: -4px; /*must have*/ - left: -4px; /*must have*/ - width: 200px; /*must have*/ - height: 200px; /*must have*/ -} \ No newline at end of file diff --git a/trunk/ui.datepicker.js b/trunk/ui.datepicker.js deleted file mode 100644 index 009582c7d..000000000 --- a/trunk/ui.datepicker.js +++ /dev/null @@ -1,212 +0,0 @@ -(function($){ - var PROP_NAME="datepicker"; - function Datepicker(){ - this.debug=false; - this._curInst=null; - this._disabledInputs=[]; - this._datepickerShowing=false; - this._inDialog=false; - this._mainDivId="ui-datepicker-div"; - this._inlineClass="ui-datepicker-inline"; - this._appendClass="ui-datepicker-append"; - this._triggerClass="ui-datepicker-trigger"; - this._dialogClass="ui-datepicker-dialog"; - this._promptClass="ui-datepicker-prompt"; - this._disableClass="ui-datepicker-disabled"; - this._unselectableClass="ui-datepicker-unselectable"; - this._currentClass="ui-datepicker-current-day"; - this.regional=[]; - this.regional[""]={ - clearText:"Clear", - clearStatus:"Erase the current date", - closeText:"Close", - closeStatus:"Close without change", - prevText:"<Prev", - prevStatus:"Show the previous month", - prevBigText:"<<", - prevBigStatus:"Show the previous year", - nextText:"Next>", - nextStatus:"Show the next month", - nextBigText:">>", - nextBigStatus:"Show the next year", - currentText:"Today", - currentStatus:"Show the current month", - monthNames:["January","February","March","April","May","June","July","August","September","October","November","December"], - monthNamesShort:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"], - monthStatus:"Show a different month", - yearStatus:"Show a different year", - weekHeader:"Wk", - weekStatus:"Week of the year", - dayNames:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"], - dayNamesShort:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"], - dayNamesMin:["Su","Mo","Tu","We","Th","Fr","Sa"], - dayStatus:"Set DD as first week day", - dateStatus:"Select DD, M d", - dateFormat:"mm/dd/yy", - firstDay:0, - initStatus:"Select a date", - isRTL:false - }; - this._defaults={ - onChangeToday: false, - showOn:"focus", - showAnim:"show", - showOptions:{}, - defaultDate:null, - appendText:"", - buttonText:"...", - buttonImage:"", - buttonImageOnly:false, - closeAtTop:true, - mandatory:false, - hideIfNoPrevNext:false, - navigationAsDateFormat:false, - showBigPrevNext:false, - gotoCurrent:false, - changeMonth:true, - changeYear:true, - showMonthAfterYear:false, - yearRange:"-10:+10", - changeFirstDay:true, - highlightWeek:false, - showOtherMonths:false, - showWeeks:false, - calculateWeek:this.iso8601Week, - shortYearCutoff:"+10", - showStatus:false, - statusForDate:this.dateStatus, - minDate:null, - maxDate:null, - duration:"normal", - beforeShowDay:null, - beforeShow:null, - onSelect:null, - onChangeMonthYear:null, - onClose:null, - numberOfMonths:1, - showCurrentAtPos:0, - stepMonths:1, - stepBigMonths:12, - rangeSelect:false, - rangeSeparator:" - ", - altField:"", - altFormat:"" - }; - $.extend(this._defaults,this.regional[""]); - this.dpDiv=$('')} - $.extend( - Datepicker.prototype, - { - markerClassName:"hasDatepicker", - log:function(){ - if(this.debug){ - console.log.apply("",arguments) - } - }, - setDefaults: - function(settings){ - extendRemove(this._defaults,settings||{}); - return this - }, - - _attachDatepicker: - function(target,settings){ - var inlineSettings=null; - for(attrName in this._defaults){ - var attrValue=target.getAttribute("date:"+attrName); - if(attrValue){inlineSettings=inlineSettings||{};try{inlineSettings[attrName]=eval(attrValue)}catch(err){inlineSettings[attrName]=attrValue}}}var nodeName=target.nodeName.toLowerCase();var inline=(nodeName=="div"||nodeName=="span");if(!target.id){target.id="dp"+(++this.uuid)}var inst=this._newInst($(target),inline);inst.settings=$.extend({},settings||{},inlineSettings||{});if(nodeName=="input"){this._connectDatepicker(target,inst)}else{if(inline){this._inlineDatepicker(target,inst)}}},_newInst:function(target,inline){var id=target[0].id.replace(/([:\[\]\.])/g,"\\\\$1");return{id:id,input:target,selectedDay:0,selectedMonth:0,selectedYear:0,drawMonth:0,drawYear:0,inline:inline,dpDiv:(!inline?this.dpDiv:$('
'))}},_connectDatepicker:function(target,inst){var input=$(target);if(input.hasClass(this.markerClassName)){return}var appendText=this._get(inst,"appendText");var isRTL=this._get(inst,"isRTL");if(appendText){input[isRTL?"before":"after"](''+appendText+"")}var showOn=this._get(inst,"showOn");if(showOn=="focus"||showOn=="both"){input.focus(this._showDatepicker)}if(showOn=="button"||showOn=="both"){var buttonText=this._get(inst,"buttonText");var buttonImage=this._get(inst,"buttonImage");var trigger=$(this._get(inst,"buttonImageOnly")?$("").addClass(this._triggerClass).attr({src:buttonImage,alt:buttonText,title:buttonText}):$('').addClass(this._triggerClass).html(buttonImage==""?buttonText:$("").attr({src:buttonImage,alt:buttonText,title:buttonText})));input[isRTL?"before":"after"](trigger);trigger.click(function(){if($.datepicker._datepickerShowing&&$.datepicker._lastInput==target){$.datepicker._hideDatepicker()}else{$.datepicker._showDatepicker(target)}return false})}input.addClass(this.markerClassName).keydown(this._doKeyDown).keypress(this._doKeyPress).bind("setData.datepicker",function(event,key,value){inst.settings[key]=value}).bind("getData.datepicker",function(event,key){return this._get(inst,key)});$.data(target,PROP_NAME,inst)},_inlineDatepicker:function(target,inst){var divSpan=$(target);if(divSpan.hasClass(this.markerClassName)){return}divSpan.addClass(this.markerClassName).append(inst.dpDiv).bind("setData.datepicker",function(event,key,value){inst.settings[key]=value}).bind("getData.datepicker",function(event,key){return this._get(inst,key)});$.data(target,PROP_NAME,inst);this._setDate(inst,this._getDefaultDate(inst));this._updateDatepicker(inst)},_inlineShow:function(inst){var numMonths=this._getNumberOfMonths(inst);inst.dpDiv.width(numMonths[1]*$(".ui-datepicker",inst.dpDiv[0]).width())}, - - _dialogDatepicker: - function(input,dateText,onSelect,settings,pos){ - var inst=this._dialogInst; - if(!inst){var id="dp"+(++this.uuid); - this._dialogInput=$(''); - this._dialogInput.keydown(this._doKeyDown); - $("body").append(this._dialogInput); - inst=this._dialogInst=this._newInst(this._dialogInput,false); - inst.settings={}; - $.data(this._dialogInput[0],PROP_NAME,inst)} - extendRemove(inst.settings,settings||{}); - this._dialogInput.val(dateText); - this._pos=(pos?(pos.length?pos:[pos.pageX,pos.pageY]):null); - if(!this._pos){ - var browserWidth=window.innerWidth||document.documentElement.clientWidth||document.body.clientWidth;var browserHeight=window.innerHeight||document.documentElement.clientHeight||document.body.clientHeight; - var scrollX=document.documentElement.scrollLeft||document.body.scrollLeft;var scrollY=document.documentElement.scrollTop||document.body.scrollTop;this._pos=[(browserWidth/2)-100+scrollX,(browserHeight/2)-150+scrollY]}this._dialogInput.css("left",this._pos[0]+"px").css("top",this._pos[1]+"px"); - inst.settings.onSelect=onSelect; - this._inDialog=true; - this.dpDiv.addClass(this._dialogClass); - this._showDatepicker(this._dialogInput[0]);if($.blockUI){$.blockUI(this.dpDiv)}$.data(this._dialogInput[0],PROP_NAME,inst);return this},_destroyDatepicker:function(target){var $target=$(target);if(!$target.hasClass(this.markerClassName)){return}var nodeName=target.nodeName.toLowerCase();$.removeData(target,PROP_NAME);if(nodeName=="input"){$target.siblings("."+this._appendClass).remove().end().siblings("."+this._triggerClass).remove().end().removeClass(this.markerClassName).unbind("focus",this._showDatepicker).unbind("keydown",this._doKeyDown).unbind("keypress",this._doKeyPress)}else{if(nodeName=="div"||nodeName=="span"){$target.removeClass(this.markerClassName).empty()}}},_enableDatepicker:function(target){var $target=$(target);if(!$target.hasClass(this.markerClassName)){return}var nodeName=target.nodeName.toLowerCase();if(nodeName=="input"){target.disabled=false;$target.siblings("button."+this._triggerClass).each(function(){this.disabled=false}).end().siblings("img."+this._triggerClass).css({opacity:"1.0",cursor:""})}else{if(nodeName=="div"||nodeName=="span"){$target.children("."+this._disableClass).remove()}}this._disabledInputs=$.map(this._disabledInputs,function(value){return(value==target?null:value)})},_disableDatepicker:function(target){var $target=$(target);if(!$target.hasClass(this.markerClassName)){return}var nodeName=target.nodeName.toLowerCase();if(nodeName=="input"){target.disabled=true;$target.siblings("button."+this._triggerClass).each(function(){this.disabled=true}).end().siblings("img."+this._triggerClass).css({opacity:"0.5",cursor:"default"})}else{if(nodeName=="div"||nodeName=="span"){var inline=$target.children("."+this._inlineClass);var offset=inline.offset();var relOffset={left:0,top:0};inline.parents().each(function(){if($(this).css("position")=="relative"){relOffset=$(this).offset();return false}});$target.prepend('
')}}this._disabledInputs=$.map(this._disabledInputs,function(value){return(value==target?null:value)});this._disabledInputs[this._disabledInputs.length]=target},_isDisabledDatepicker:function(target){if(!target){return false}for(var i=0;i-1)},_showDatepicker:function(input){input=input.target||input;if(input.nodeName.toLowerCase()!="input"){input=$("input",input.parentNode)[0]}if($.datepicker._isDisabledDatepicker(input)||$.datepicker._lastInput==input){return}var inst=$.datepicker._getInst(input);var beforeShow=$.datepicker._get(inst,"beforeShow");extendRemove(inst.settings,(beforeShow?beforeShow.apply(input,[input,inst]):{}));$.datepicker._hideDatepicker(null,"");$.datepicker._lastInput=input;$.datepicker._setDateFromField(inst);if($.datepicker._inDialog){input.value=""}if(!$.datepicker._pos){$.datepicker._pos=$.datepicker._findPos(input);$.datepicker._pos[1]+=input.offsetHeight}var isFixed=false;$(input).parents().each(function(){isFixed|=$(this).css("position")=="fixed";return!isFixed});if(isFixed&&$.browser.opera){$.datepicker._pos[0]-=document.documentElement.scrollLeft;$.datepicker._pos[1]-=document.documentElement.scrollTop}var offset={left:$.datepicker._pos[0],top:$.datepicker._pos[1]};$.datepicker._pos=null;inst.rangeStart=null;inst.dpDiv.css({position:"absolute",display:"block",top:"-1000px"});$.datepicker._updateDatepicker(inst);inst.dpDiv.width($.datepicker._getNumberOfMonths(inst)[1]*$(".ui-datepicker",inst.dpDiv[0])[0].offsetWidth);offset=$.datepicker._checkOffset(inst,offset,isFixed);inst.dpDiv.css({position:($.datepicker._inDialog&&$.blockUI?"static":(isFixed?"fixed":"absolute")),display:"none",left:offset.left+"px",top:offset.top+"px"});if(!inst.inline){var showAnim=$.datepicker._get(inst,"showAnim")||"show";var duration=$.datepicker._get(inst,"duration");var postProcess=function(){$.datepicker._datepickerShowing=true;if($.browser.msie&&parseInt($.browser.version,10)<7){$("iframe.ui-datepicker-cover").css({width:inst.dpDiv.width()+4,height:inst.dpDiv.height()+4})}};if($.effects&&$.effects[showAnim]){inst.dpDiv.show(showAnim,$.datepicker._get(inst,"showOptions"),duration,postProcess)}else{inst.dpDiv[showAnim](duration,postProcess)}if(duration==""){postProcess()}if(inst.input[0].type!="hidden"){inst.input[0].focus()}$.datepicker._curInst=inst}},_updateDatepicker:function(inst){var dims={width:inst.dpDiv.width()+4,height:inst.dpDiv.height()+4};inst.dpDiv.empty().append(this._generateHTML(inst)).find("iframe.ui-datepicker-cover").css({width:dims.width,height:dims.height});var numMonths=this._getNumberOfMonths(inst);inst.dpDiv[(numMonths[0]!=1||numMonths[1]!=1?"add":"remove")+"Class"]("ui-datepicker-multi");inst.dpDiv[(this._get(inst,"isRTL")?"add":"remove")+"Class"]("ui-datepicker-rtl");if(inst.input&&inst.input[0].type!="hidden"){$(inst.input[0]).focus()}},_checkOffset:function(inst,offset,isFixed){var pos=inst.input?this._findPos(inst.input[0]):null;var browserWidth=window.innerWidth||document.documentElement.clientWidth;var browserHeight=window.innerHeight||document.documentElement.clientHeight;var scrollX=document.documentElement.scrollLeft||document.body.scrollLeft;var scrollY=document.documentElement.scrollTop||document.body.scrollTop;if(this._get(inst,"isRTL")||(offset.left+inst.dpDiv.width()-scrollX)>browserWidth){offset.left=Math.max((isFixed?0:scrollX),pos[0]+(inst.input?inst.input.width():0)-(isFixed?scrollX:0)-inst.dpDiv.width()-(isFixed&&$.browser.opera?document.documentElement.scrollLeft:0))}else{offset.left-=(isFixed?scrollX:0)}if((offset.top+inst.dpDiv.height()-scrollY)>browserHeight){offset.top=Math.max((isFixed?0:scrollY),pos[1]-(isFixed?scrollY:0)-(this._inDialog?0:inst.dpDiv.height())-(isFixed&&$.browser.opera?document.documentElement.scrollTop:0))}else{offset.top-=(isFixed?scrollY:0)}return offset},_findPos:function(obj){while(obj&&(obj.type=="hidden"||obj.nodeType!=1)){obj=obj.nextSibling}var position=$(obj).offset();return[position.left,position.top]},_hideDatepicker:function(input,duration){var inst=this._curInst;if(!inst||(input&&inst!=$.data(input,PROP_NAME))){return}var rangeSelect=this._get(inst,"rangeSelect");if(rangeSelect&&inst.stayOpen){this._selectDate("#"+inst.id,this._formatDate(inst,inst.currentDay,inst.currentMonth,inst.currentYear))}inst.stayOpen=false;if(this._datepickerShowing){duration=(duration!=null?duration:this._get(inst,"duration"));var showAnim=this._get(inst,"showAnim");var postProcess=function(){$.datepicker._tidyDialog(inst)};if(duration!=""&&$.effects&&$.effects[showAnim]){inst.dpDiv.hide(showAnim,$.datepicker._get(inst,"showOptions"),duration,postProcess)}else{inst.dpDiv[(duration==""?"hide":(showAnim=="slideDown"?"slideUp":(showAnim=="fadeIn"?"fadeOut":"hide")))](duration,postProcess)}if(duration==""){this._tidyDialog(inst)}var onClose=this._get(inst,"onClose");if(onClose){onClose.apply((inst.input?inst.input[0]:null),[(inst.input?inst.input.val():""),inst])}this._datepickerShowing=false;this._lastInput=null;inst.settings.prompt=null;if(this._inDialog){this._dialogInput.css({position:"absolute",left:"0",top:"-100px"});if($.blockUI){$.unblockUI();$("body").append(this.dpDiv)}}this._inDialog=false}this._curInst=null},_tidyDialog:function(inst){inst.dpDiv.removeClass(this._dialogClass).unbind(".ui-datepicker");$("."+this._promptClass,inst.dpDiv).remove()},_checkExternalClick:function(event){if(!$.datepicker._curInst){return}var $target=$(event.target);if(($target.parents("#"+$.datepicker._mainDivId).length==0)&&!$target.hasClass($.datepicker.markerClassName)&&!$target.hasClass($.datepicker._triggerClass)&&$.datepicker._datepickerShowing&&!($.datepicker._inDialog&&$.blockUI)){$.datepicker._hideDatepicker(null,"")}}, -_adjustDate: - function(id,offset,period){ - var target=$(id); - var inst=this._getInst(target[0]); - this._adjustInstDate(inst,offset,period); - this._updateDatepicker(inst) -}, -_gotoToday: -function(id){ - var target=$(id); - var inst=this._getInst(target[0]); - inst.onChangeToday=true; - if(this._get(inst,"gotoCurrent")&&inst.currentDay){ - inst.selectedDay=inst.currentDay; - inst.drawMonth=inst.selectedMonth=inst.currentMonth; - inst.drawYear=inst.selectedYear=inst.currentYear - }else{ - var date=new Date(); - inst.selectedDay=date.getDate(); - inst.drawMonth=inst.selectedMonth=date.getMonth(); - inst.drawYear=inst.selectedYear=date.getFullYear(); - } - - - this._notifyChange(inst); - this._adjustDate(target); - - -} -, -_selectMonthYear: - function(id,select,period){var target=$(id);var inst=this._getInst(target[0]);inst._selectingMonthYear=false;inst["selected"+(period=="M"?"Month":"Year")]=inst["draw"+(period=="M"?"Month":"Year")]=parseInt(select.options[select.selectedIndex].value,10);this._notifyChange(inst);this._adjustDate(target)},_clickMonthYear:function(id){var target=$(id);var inst=this._getInst(target[0]);if(inst.input&&inst._selectingMonthYear&&!$.browser.msie){inst.input[0].focus()}inst._selectingMonthYear=!inst._selectingMonthYear},_changeFirstDay:function(id,day){var target=$(id);var inst=this._getInst(target[0]);inst.settings.firstDay=day;this._updateDatepicker(inst)},_selectDay:function(id,month,year,td){if($(td).hasClass(this._unselectableClass)){return}var target=$(id);var inst=this._getInst(target[0]);var rangeSelect=this._get(inst,"rangeSelect");if(rangeSelect){inst.stayOpen=!inst.stayOpen;if(inst.stayOpen){$(".ui-datepicker td",inst.dpDiv).removeClass(this._currentClass);$(td).addClass(this._currentClass)}}inst.selectedDay=inst.currentDay=$("a",td).html();inst.selectedMonth=inst.currentMonth=month;inst.selectedYear=inst.currentYear=year;if(inst.stayOpen){inst.endDay=inst.endMonth=inst.endYear=null}else{if(rangeSelect){inst.endDay=inst.currentDay;inst.endMonth=inst.currentMonth;inst.endYear=inst.currentYear}}this._selectDate(id,this._formatDate(inst,inst.currentDay,inst.currentMonth,inst.currentYear));if(inst.stayOpen){inst.rangeStart=new Date(inst.currentYear,inst.currentMonth,inst.currentDay);this._updateDatepicker(inst)}else{if(rangeSelect){inst.selectedDay=inst.currentDay=inst.rangeStart.getDate();inst.selectedMonth=inst.currentMonth=inst.rangeStart.getMonth();inst.selectedYear=inst.currentYear=inst.rangeStart.getFullYear();inst.rangeStart=null;if(inst.inline){this._updateDatepicker(inst)}}}},_clearDate:function(id){var target=$(id);var inst=this._getInst(target[0]);if(this._get(inst,"mandatory")){return}inst.stayOpen=false;inst.endDay=inst.endMonth=inst.endYear=inst.rangeStart=null;this._selectDate(target,"")}, - _selectDate:function(id,dateStr){ - var target=$(id); - var inst=this._getInst(target[0]); - dateStr=(dateStr!=null?dateStr:this._formatDate(inst)); - if(this._get(inst,"rangeSelect")&&dateStr){ - dateStr=(inst.rangeStart?this._formatDate(inst,inst.rangeStart):dateStr)+this._get(inst,"rangeSeparator")+dateStr}if(inst.input){inst.input.val(dateStr)}this._updateAlternate(inst); - - var onSelect=this._get(inst,"onSelect"); - if(onSelect){ - onSelect.apply((inst.input?inst.input[0]:null),[dateStr,inst]) - }else{ - if(inst.input){ - inst.input.trigger("change")} - } - - if(inst.inline){ - this._updateDatepicker(inst)}else{if(!inst.stayOpen){this._hideDatepicker(null,this._get(inst,"duration"));this._lastInput=inst.input[0];if(typeof(inst.input[0])!="object"){inst.input[0].focus()}this._lastInput=null}}},_updateAlternate:function(inst){var altField=this._get(inst,"altField");if(altField){var altFormat=this._get(inst,"altFormat");var date=this._getDate(inst); - dateStr=(isArray(date)?(!date[0]&&!date[1]?"":this.formatDate(altFormat,date[0],this._getFormatConfig(inst))+this._get(inst,"rangeSeparator")+this.formatDate(altFormat,date[1]||date[0],this._getFormatConfig(inst))):this.formatDate(altFormat,date,this._getFormatConfig(inst))); - $(altField).each(function(){$(this).val(dateStr)})}},noWeekends:function(date){var day=date.getDay();return[(day>0&&day<6),""]},iso8601Week:function(date){var checkDate=new Date(date.getFullYear(),date.getMonth(),date.getDate(),(date.getTimezoneOffset()/-60));var firstMon=new Date(checkDate.getFullYear(),1-1,4);var firstDay=firstMon.getDay()||7;firstMon.setDate(firstMon.getDate()+1-firstDay);if(firstDay<4&&checkDatenew Date(checkDate.getFullYear(),12-1,28)){firstDay=new Date(checkDate.getFullYear()+1,1-1,4).getDay()||7;if(firstDay>4&&(checkDate.getDay()||7)0&&iValue="0"&&value.charAt(iValue)<="9"){num=num*10+parseInt(value.charAt(iValue++),10);size--}if(size==origSize){throw"Missing number at position "+iValue}return num};var getName=function(match,shortNames,longNames){var names=(lookAhead(match)?longNames:shortNames);var size=0;for(var j=0;j0&&iValue-1){month=1;day=doy;do{var dim=this._getDaysInMonth(year,month-1);if(day<=dim){break}month++;day-=dim}while(true)}var date=new Date(year,month-1,day);if(date.getFullYear()!=year||date.getMonth()+1!=month||date.getDate()!=day){throw"Invalid date"}return date},ATOM:"yy-mm-dd",COOKIE:"D, dd M yy",ISO_8601:"yy-mm-dd",RFC_822:"D, d M y",RFC_850:"DD, dd-M-y",RFC_1036:"D, d M y",RFC_1123:"D, d M yy",RFC_2822:"D, d M yy",RSS:"D, d M y",TIMESTAMP:"@",W3C:"yy-mm-dd",formatDate:function(format,date,settings){if(!date){return""}var dayNamesShort=(settings?settings.dayNamesShort:null)||this._defaults.dayNamesShort;var dayNames=(settings?settings.dayNames:null)||this._defaults.dayNames;var monthNamesShort=(settings?settings.monthNamesShort:null)||this._defaults.monthNamesShort;var monthNames=(settings?settings.monthNames:null)||this._defaults.monthNames;var lookAhead=function(match){var matches=(iFormat+1=0;m--){doy+=this._getDaysInMonth(date.getFullYear(),m)}output+=formatNumber("o",doy,3);break;case"m":output+=formatNumber("m",date.getMonth()+1,2);break;case"M":output+=formatName("M",date.getMonth(),monthNamesShort,monthNames);break;case"y":output+=(lookAhead("y")?date.getFullYear():(date.getYear()%100<10?"0":"")+date.getYear()%100);break;case"@":output+=date.getTime();break;case"'":if(lookAhead("'")){output+="'"}else{literal=true}break;default:output+=format.charAt(iFormat)}}}}return output},_possibleChars:function(format){var chars="";var literal=false;for(var iFormat=0;iFormat0){var settings=this._getFormatConfig(inst);if(dates.length>1){date=this.parseDate(dateFormat,dates[1],settings)||defaultDate;inst.endDay=date.getDate();inst.endMonth=date.getMonth();inst.endYear=date.getFullYear()}try{date=this.parseDate(dateFormat,dates[0],settings)||defaultDate}catch(e){this.log(e);date=defaultDate}}inst.selectedDay=date.getDate();inst.drawMonth=inst.selectedMonth=date.getMonth();inst.drawYear=inst.selectedYear=date.getFullYear();inst.currentDay=(dates[0]?date.getDate():0);inst.currentMonth=(dates[0]?date.getMonth():0);inst.currentYear=(dates[0]?date.getFullYear():0);this._adjustInstDate(inst)},_getDefaultDate:function(inst){var date=this._determineDate(this._get(inst,"defaultDate"),new Date());var minDate=this._getMinMaxDate(inst,"min",true);var maxDate=this._getMinMaxDate(inst,"max");date=(minDate&&datemaxDate?maxDate:date);return date},_determineDate:function(date,defaultDate){var offsetNumeric=function(offset){var date=new Date();date.setUTCDate(date.getUTCDate()+offset);return date};var offsetString=function(offset,getDaysInMonth){var date=new Date();var year=date.getFullYear();var month=date.getMonth();var day=date.getDate();var pattern=/([+-]?[0-9]+)\s*(d|D|w|W|m|M|y|Y)?/g;var matches=pattern.exec(offset);while(matches){switch(matches[2]||"d"){case"d":case"D":day+=parseInt(matches[1],10);break;case"w":case"W":day+=parseInt(matches[1],10)*7;break;case"m":case"M":month+=parseInt(matches[1],10);day=Math.min(day,getDaysInMonth(year,month));break;case"y":case"Y":year+=parseInt(matches[1],10);day=Math.min(day,getDaysInMonth(year,month));break}matches=pattern.exec(offset)}return new Date(year,month,day)};date=(date==null?defaultDate:(typeof date=="string"?offsetString(date,this._getDaysInMonth):(typeof date=="number"?(isNaN(date)?defaultDate:offsetNumeric(date)):date)));return(date&&date.toString()=="Invalid Date"?defaultDate:date)},_setDate:function(inst,date,endDate){var clear=!(date);var origMonth=inst.selectedMonth;var origYear=inst.selectedYear;date=this._determineDate(date,new Date());inst.selectedDay=inst.currentDay=date.getDate();inst.drawMonth=inst.selectedMonth=inst.currentMonth=date.getMonth();inst.drawYear=inst.selectedYear=inst.currentYear=date.getFullYear();if(this._get(inst,"rangeSelect")){if(endDate){endDate=this._determineDate(endDate,null);inst.endDay=endDate.getDate();inst.endMonth=endDate.getMonth();inst.endYear=endDate.getFullYear()}else{inst.endDay=inst.currentDay;inst.endMonth=inst.currentMonth;inst.endYear=inst.currentYear}}if(origMonth!=inst.selectedMonth||origYear!=inst.selectedYear){this._notifyChange(inst)}this._adjustInstDate(inst);if(inst.input){inst.input.val(clear?"":this._formatDate(inst)+(!this._get(inst,"rangeSelect")?"":this._get(inst,"rangeSeparator")+this._formatDate(inst,inst.endDay,inst.endMonth,inst.endYear)))}},_getDate:function(inst){var startDate=(!inst.currentYear||(inst.input&&inst.input.val()=="")?null:new Date(inst.currentYear,inst.currentMonth,inst.currentDay));if(this._get(inst,"rangeSelect")){return[inst.rangeStart||startDate,(!inst.endYear?inst.rangeStart||startDate:new Date(inst.endYear,inst.endMonth,inst.endDay))]}else{return startDate}},_generateHTML:function(inst){var today=new Date();today=new Date(today.getFullYear(),today.getMonth(),today.getDate());var showStatus=this._get(inst,"showStatus");var initStatus=this._get(inst,"initStatus")||" ";var isRTL=this._get(inst,"isRTL");var clear=(this._get(inst,"mandatory")?"":'");var controls='
'+(isRTL?"":clear)+'"+(isRTL?clear:"")+"
";var prompt=this._get(inst,"prompt");var closeAtTop=this._get(inst,"closeAtTop");var hideIfNoPrevNext=this._get(inst,"hideIfNoPrevNext");var navigationAsDateFormat=this._get(inst,"navigationAsDateFormat");var showBigPrevNext=this._get(inst,"showBigPrevNext");var numMonths=this._getNumberOfMonths(inst);var showCurrentAtPos=this._get(inst,"showCurrentAtPos");var stepMonths=this._get(inst,"stepMonths");var stepBigMonths=this._get(inst,"stepBigMonths");var isMultiMonth=(numMonths[0]!=1||numMonths[1]!=1);var currentDate=(!inst.currentDay?new Date(9999,9,9):new Date(inst.currentYear,inst.currentMonth,inst.currentDay));var minDate=this._getMinMaxDate(inst,"min",true);var maxDate=this._getMinMaxDate(inst,"max");var drawMonth=inst.drawMonth-showCurrentAtPos;var drawYear=inst.drawYear;if(drawMonth<0){drawMonth+=12;drawYear--}if(maxDate){var maxDraw=new Date(maxDate.getFullYear(),maxDate.getMonth()-numMonths[1]+1,maxDate.getDate());maxDraw=(minDate&&maxDrawmaxDraw){drawMonth--;if(drawMonth<0){drawMonth=11;drawYear--}}}var prevText=this._get(inst,"prevText");prevText=(!navigationAsDateFormat?prevText:this.formatDate(prevText,new Date(drawYear,drawMonth-stepMonths,1),this._getFormatConfig(inst)));var prevBigText=(showBigPrevNext?this._get(inst,"prevBigText"):"");prevBigText=(!navigationAsDateFormat?prevBigText:this.formatDate(prevBigText,new Date(drawYear,drawMonth-stepBigMonths,1),this._getFormatConfig(inst)));var prev='
'+(this._canAdjustMonth(inst,-1,drawYear,drawMonth)?(showBigPrevNext?""+prevBigText+"":"")+""+prevText+"":(hideIfNoPrevNext?"":""))+"
";var nextText=this._get(inst,"nextText");nextText=(!navigationAsDateFormat?nextText:this.formatDate(nextText,new Date(drawYear,drawMonth+stepMonths,1),this._getFormatConfig(inst)));var nextBigText=(showBigPrevNext?this._get(inst,"nextBigText"):"");nextBigText=(!navigationAsDateFormat?nextBigText:this.formatDate(nextBigText,new Date(drawYear,drawMonth+stepBigMonths,1),this._getFormatConfig(inst)));var next='
'+(this._canAdjustMonth(inst,+1,drawYear,drawMonth)?""+nextText+""+(showBigPrevNext?""+nextBigText+"":""):(hideIfNoPrevNext?"":""))+"
";var currentText=this._get(inst,"currentText");var gotoDate=(this._get(inst,"gotoCurrent")&&inst.currentDay?currentDate:today);currentText=(!navigationAsDateFormat?currentText:this.formatDate(currentText,gotoDate,this._getFormatConfig(inst))); - -var html=(prompt?'
'+ - prompt+ - "
":"")+ - (closeAtTop&&!inst.inline?controls:"")+ - '"; - -var firstDay=this._get(inst,"firstDay");var changeFirstDay=this._get(inst,"changeFirstDay");var dayNames=this._get(inst,"dayNames");var dayNamesShort=this._get(inst,"dayNamesShort");var dayNamesMin=this._get(inst,"dayNamesMin");var monthNames=this._get(inst,"monthNames");var beforeShowDay=this._get(inst,"beforeShowDay");var highlightWeek=this._get(inst,"highlightWeek");var showOtherMonths=this._get(inst,"showOtherMonths");var showWeeks=this._get(inst,"showWeeks");var calculateWeek=this._get(inst,"calculateWeek")||this.iso8601Week;var weekStatus=this._get(inst,"weekStatus");var status=(showStatus?this._get(inst,"dayStatus")||initStatus:"");var dateStatus=this._get(inst,"statusForDate")||this.dateStatus;var endDate=inst.endDay?new Date(inst.endYear,inst.endMonth,inst.endDay):currentDate;for(var row=0;row'+this._generateMonthYearHeader(inst,drawMonth,drawYear,minDate,maxDate,selectedDate,row>0||col>0,showStatus,initStatus,monthNames)+''+(showWeeks?""+this._get(inst,"weekHeader")+"":"");for(var dow=0;dow<7;dow++){var day=(dow+firstDay)%7;var dayStatus=(status.indexOf("DD")>-1?status.replace(/DD/,dayNames[day]):status.replace(/D/,dayNamesShort[day]));html+="=5?' class="ui-datepicker-week-end-cell"':"")+">"+(!changeFirstDay?"'+dayNamesMin[day]+(changeFirstDay?"":"")+""}html+="";var daysInMonth=this._getDaysInMonth(drawYear,drawMonth);if(drawYear==inst.selectedYear&&drawMonth==inst.selectedMonth){inst.selectedDay=Math.min(inst.selectedDay,daysInMonth)}var leadDays=(this._getFirstDayOfMonth(drawYear,drawMonth)-firstDay+7)%7;var tzDate=new Date(drawYear,drawMonth,1-leadDays);var utcDate=new Date(drawYear,drawMonth,1-leadDays);var printDate=utcDate;var numRows=(isMultiMonth?6:Math.ceil((leadDays+daysInMonth)/7));for(var dRow=0;dRow'+(showWeeks?'":"");for(var dow=0;dow<7;dow++){var daySettings=(beforeShowDay?beforeShowDay.apply((inst.input?inst.input[0]:null),[printDate]):[true,""]);var otherMonth=(printDate.getMonth()!=drawMonth);var unselectable=otherMonth||!daySettings[0]||(minDate&&printDatemaxDate);html+='";tzDate.setDate(tzDate.getDate()+1);utcDate.setUTCDate(utcDate.getUTCDate()+1);printDate=(tzDate>utcDate?tzDate:utcDate)}html+=""}drawMonth++;if(drawMonth>11){drawMonth=0;drawYear++}html+="
"+calculateWeek(printDate)+"=currentDate.getTime()&&printDate.getTime()<=endDate.getTime()?" "+this._currentClass:"")+(printDate.getTime()==today.getTime()?" ui-datepicker-today":""))+'"'+((!otherMonth||showOtherMonths)&&daySettings[2]?' title="'+daySettings[2]+'"':"")+(unselectable?(highlightWeek?" onmouseover=\"jQuery(this).parent().addClass('ui-datepicker-week-over');\" onmouseout=\"jQuery(this).parent().removeClass('ui-datepicker-week-over');\"":""):" onmouseover=\"jQuery(this).addClass('ui-datepicker-days-cell-over')"+(highlightWeek?".parent().addClass('ui-datepicker-week-over')":"")+";"+(!showStatus||(otherMonth&&!showOtherMonths)?"":"jQuery('#ui-datepicker-status-"+inst.id+"').html('"+(dateStatus.apply((inst.input?inst.input[0]:null),[printDate,inst])||initStatus)+"');")+"\" onmouseout=\"jQuery(this).removeClass('ui-datepicker-days-cell-over')"+(highlightWeek?".parent().removeClass('ui-datepicker-week-over')":"")+";"+(!showStatus||(otherMonth&&!showOtherMonths)?"":"jQuery('#ui-datepicker-status-"+inst.id+"').html('"+initStatus+"');")+'" onclick="jQuery.datepicker._selectDay(\'#'+inst.id+"',"+drawMonth+","+drawYear+', this);"')+">"+(otherMonth?(showOtherMonths?printDate.getDate():" "):(unselectable?printDate.getDate():""+printDate.getDate()+""))+"
"}}html+=(showStatus?'
'+initStatus+"
":"")+(!closeAtTop&&!inst.inline?controls:"")+'
'+($.browser.msie&&parseInt($.browser.version,10)<7&&!inst.inline?'':"");return html},_generateMonthYearHeader:function(inst,drawMonth,drawYear,minDate,maxDate,selectedDate,secondary,showStatus,initStatus,monthNames){minDate=(inst.rangeStart&&minDate&&selectedDate";for(var month=0;month<12;month++){if((!inMinYear||month>=minDate.getMonth())&&(!inMaxYear||month<=maxDate.getMonth())){monthHtml+='"}}monthHtml+=""}if(!showMonthAfterYear){html+=monthHtml}if(secondary||!this._get(inst,"changeYear")){html+=drawYear}else{var years=this._get(inst,"yearRange").split(":");var year=0;var endYear=0;if(years.length!=2){year=drawYear-10;endYear=drawYear+10}else{if(years[0].charAt(0)=="+"||years[0].charAt(0)=="-"){year=endYear=new Date().getFullYear();year+=parseInt(years[0],10);endYear+=parseInt(years[1],10)}else{year=parseInt(years[0],10);endYear=parseInt(years[1],10)}}year=(minDate?Math.max(year,minDate.getFullYear()):year);endYear=(maxDate?Math.min(endYear,maxDate.getFullYear()):endYear);html+='"}if(showMonthAfterYear){html+=monthHtml}html+="";return html},_addStatus:function(showStatus,id,text,initStatus){return(showStatus?" onmouseover=\"jQuery('#ui-datepicker-status-"+id+"').html('"+(text||initStatus)+"');\" onmouseout=\"jQuery('#ui-datepicker-status-"+id+"').html('"+initStatus+"');\"":"")},_adjustInstDate:function(inst,offset,period){var year=inst.drawYear+(period=="Y"?offset:0);var month=inst.drawMonth+(period=="M"?offset:0);var day=Math.min(inst.selectedDay,this._getDaysInMonth(year,month))+(period=="D"?offset:0);var date=new Date(year,month,day);var minDate=this._getMinMaxDate(inst,"min",true);var maxDate=this._getMinMaxDate(inst,"max");date=(minDate&&datemaxDate?maxDate:date);inst.selectedDay=date.getDate();inst.drawMonth=inst.selectedMonth=date.getMonth();inst.drawYear=inst.selectedYear=date.getFullYear();if(period=="M"||period=="Y"){this._notifyChange(inst)}}, -_notifyChange: - function(inst){ - var onChange=this._get(inst,"onChangeMonthYear"); - if(onChange){ - onChange.apply( - (inst.input?inst.input[0]:null), - [inst.selectedYear,inst.selectedMonth+1,inst] - ) - } - } -, -_getNumberOfMonths:function(inst){var numMonths=this._get(inst,"numberOfMonths");return(numMonths==null?[1,1]:(typeof numMonths=="number"?[1,numMonths]:numMonths))},_getMinMaxDate:function(inst,minMax,checkRange){var date=this._determineDate(this._get(inst,minMax+"Date"),null);if(date){date.setHours(0);date.setMinutes(0);date.setSeconds(0);date.setMilliseconds(0)}return(!checkRange||!inst.rangeStart?date:(!date||inst.rangeStart>date?inst.rangeStart:date))},_getDaysInMonth:function(year,month){return 32-new Date(year,month,32).getDate()},_getFirstDayOfMonth:function(year,month){return new Date(year,month,1).getDay()},_canAdjustMonth:function(inst,offset,curYear,curMonth){var numMonths=this._getNumberOfMonths(inst);var date=new Date(curYear,curMonth+(offset<0?offset:numMonths[1]),1);if(offset<0){date.setDate(this._getDaysInMonth(date.getFullYear(),date.getMonth()))}return this._isInRange(inst,date)},_isInRange:function(inst,date){var newMinDate=(!inst.rangeStart?null:new Date(inst.selectedYear,inst.selectedMonth,inst.selectedDay));newMinDate=(newMinDate&&inst.rangeStart=minDate)&&(!maxDate||date<=maxDate))},_getFormatConfig:function(inst){var shortYearCutoff=this._get(inst,"shortYearCutoff");shortYearCutoff=(typeof shortYearCutoff!="string"?shortYearCutoff:new Date().getFullYear()%100+parseInt(shortYearCutoff,10));return{shortYearCutoff:shortYearCutoff,dayNamesShort:this._get(inst,"dayNamesShort"),dayNames:this._get(inst,"dayNames"),monthNamesShort:this._get(inst,"monthNamesShort"),monthNames:this._get(inst,"monthNames")}},_formatDate:function(inst,day,month,year){if(!day){inst.currentDay=inst.selectedDay;inst.currentMonth=inst.selectedMonth;inst.currentYear=inst.selectedYear}var date=(day?(typeof day=="object"?day:new Date(year,month,day)):new Date(inst.currentYear,inst.currentMonth,inst.currentDay));return this.formatDate(this._get(inst,"dateFormat"),date,this._getFormatConfig(inst))}});function extendRemove(target,props){$.extend(target,props);for(var name in props){if(props[name]==null||props[name]==undefined){target[name]=props[name]}}return target}function isArray(a){return(a&&(($.browser.safari&&typeof a=="object"&&a.length)||(a.constructor&&a.constructor.toString().match(/\Array\(\)/))))}$.fn.datepicker=function(options){if(!$.datepicker.initialized){$(document.body).append($.datepicker.dpDiv).mousedown($.datepicker._checkExternalClick);$.datepicker.initialized=true}var otherArgs=Array.prototype.slice.call(arguments,1);if(typeof options=="string"&&(options=="isDisabled"||options=="getDate")){return $.datepicker["_"+options+"Datepicker"].apply($.datepicker,[this[0]].concat(otherArgs))}return this.each(function(){typeof options=="string"?$.datepicker["_"+options+"Datepicker"].apply($.datepicker,[this].concat(otherArgs)):$.datepicker._attachDatepicker(this,options)})};$.datepicker=new Datepicker();$.datepicker.initialized=false;$.datepicker.uuid=new Date().getTime()})(jQuery) diff --git a/trunk/ui.datepicker.min.js b/trunk/ui.datepicker.min.js deleted file mode 100644 index 155949aad..000000000 --- a/trunk/ui.datepicker.min.js +++ /dev/null @@ -1,12 +0,0 @@ -/* - * jQuery UI Datepicker 1.7.2 - * - * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT (MIT-LICENSE.txt) - * and GPL (GPL-LICENSE.txt) licenses. - * - * http://docs.jquery.com/UI/Datepicker - * - * Depends: - * ui.core.js - */ (function($){$.extend($.ui,{datepicker:{version:"1.7.2"}});var PROP_NAME="datepicker";function Datepicker(){this.debug=false;this._curInst=null;this._keyEvent=false;this._disabledInputs=[];this._datepickerShowing=false;this._inDialog=false;this._mainDivId="ui-datepicker-div";this._inlineClass="ui-datepicker-inline";this._appendClass="ui-datepicker-append";this._triggerClass="ui-datepicker-trigger";this._dialogClass="ui-datepicker-dialog";this._disableClass="ui-datepicker-disabled";this._unselectableClass="ui-datepicker-unselectable";this._currentClass="ui-datepicker-current-day";this._dayOverClass="ui-datepicker-days-cell-over";this.regional=[];this.regional[""]={closeText:"Done",prevText:"Prev",nextText:"Next",currentText:"Today",monthNames:["January","February","March","April","May","June","July","August","September","October","November","December"],monthNamesShort:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],dayNames:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],dayNamesShort:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],dayNamesMin:["Su","Mo","Tu","We","Th","Fr","Sa"],dateFormat:"mm/dd/yy",firstDay:0,isRTL:false};this._defaults={showOn:"focus",showAnim:"show",showOptions:{},defaultDate:null,appendText:"",buttonText:"...",buttonImage:"",buttonImageOnly:false,hideIfNoPrevNext:false,navigationAsDateFormat:false,gotoCurrent:false,changeMonth:false,changeYear:false,showMonthAfterYear:false,yearRange:"-10:+10",showOtherMonths:false,calculateWeek:this.iso8601Week,shortYearCutoff:"+10",minDate:null,maxDate:null,duration:"normal",beforeShowDay:null,beforeShow:null,onSelect:null,onChangeMonthYear:null,onClose:null,numberOfMonths:1,showCurrentAtPos:0,stepMonths:1,stepBigMonths:12,altField:"",altFormat:"",constrainInput:true,showButtonPanel:false};$.extend(this._defaults,this.regional[""]);this.dpDiv=$('
')}$.extend(Datepicker.prototype,{markerClassName:"hasDatepicker",log:function(){if(this.debug){console.log.apply("",arguments)}},setDefaults:function(settings){extendRemove(this._defaults,settings||{});return this},_attachDatepicker:function(target,settings){var inlineSettings=null;for(var attrName in this._defaults){var attrValue=target.getAttribute("date:"+attrName);if(attrValue){inlineSettings=inlineSettings||{};try{inlineSettings[attrName]=eval(attrValue)}catch(err){inlineSettings[attrName]=attrValue}}}var nodeName=target.nodeName.toLowerCase();var inline=(nodeName=="div"||nodeName=="span");if(!target.id){target.id="dp"+(++this.uuid)}var inst=this._newInst($(target),inline);inst.settings=$.extend({},settings||{},inlineSettings||{});if(nodeName=="input"){this._connectDatepicker(target,inst)}else{if(inline){this._inlineDatepicker(target,inst)}}},_newInst:function(target,inline){var id=target[0].id.replace(/([:\[\]\.])/g,"\\\\$1");return{id:id,input:target,selectedDay:0,selectedMonth:0,selectedYear:0,drawMonth:0,drawYear:0,inline:inline,dpDiv:(!inline?this.dpDiv:$('
'))}},_connectDatepicker:function(target,inst){var input=$(target);inst.append=$([]);inst.trigger=$([]);if(input.hasClass(this.markerClassName)){return}var appendText=this._get(inst,"appendText");var isRTL=this._get(inst,"isRTL");if(appendText){inst.append=$(''+appendText+"");input[isRTL?"before":"after"](inst.append)}var showOn=this._get(inst,"showOn");if(showOn=="focus"||showOn=="both"){input.focus(this._showDatepicker)}if(showOn=="button"||showOn=="both"){var buttonText=this._get(inst,"buttonText");var buttonImage=this._get(inst,"buttonImage");inst.trigger=$(this._get(inst,"buttonImageOnly")?$("").addClass(this._triggerClass).attr({src:buttonImage,alt:buttonText,title:buttonText}):$('').addClass(this._triggerClass).html(buttonImage==""?buttonText:$("").attr({src:buttonImage,alt:buttonText,title:buttonText})));input[isRTL?"before":"after"](inst.trigger);inst.trigger.click(function(){if($.datepicker._datepickerShowing&&$.datepicker._lastInput==target){$.datepicker._hideDatepicker()}else{$.datepicker._showDatepicker(target)}return false})}input.addClass(this.markerClassName).keydown(this._doKeyDown).keypress(this._doKeyPress).bind("setData.datepicker",function(event,key,value){inst.settings[key]=value}).bind("getData.datepicker",function(event,key){return this._get(inst,key)});$.data(target,PROP_NAME,inst)},_inlineDatepicker:function(target,inst){var divSpan=$(target);if(divSpan.hasClass(this.markerClassName)){return}divSpan.addClass(this.markerClassName).append(inst.dpDiv).bind("setData.datepicker",function(event,key,value){inst.settings[key]=value}).bind("getData.datepicker",function(event,key){return this._get(inst,key)});$.data(target,PROP_NAME,inst);this._setDate(inst,this._getDefaultDate(inst));this._updateDatepicker(inst);this._updateAlternate(inst)},_dialogDatepicker:function(input,dateText,onSelect,settings,pos){var inst=this._dialogInst;if(!inst){var id="dp"+(++this.uuid);this._dialogInput=$('');this._dialogInput.keydown(this._doKeyDown);$("body").append(this._dialogInput);inst=this._dialogInst=this._newInst(this._dialogInput,false);inst.settings={};$.data(this._dialogInput[0],PROP_NAME,inst)}extendRemove(inst.settings,settings||{});this._dialogInput.val(dateText);this._pos=(pos?(pos.length?pos:[pos.pageX,pos.pageY]):null);if(!this._pos){var browserWidth=window.innerWidth||document.documentElement.clientWidth||document.body.clientWidth;var browserHeight=window.innerHeight||document.documentElement.clientHeight||document.body.clientHeight;var scrollX=document.documentElement.scrollLeft||document.body.scrollLeft;var scrollY=document.documentElement.scrollTop||document.body.scrollTop;this._pos=[(browserWidth/2)-100+scrollX,(browserHeight/2)-150+scrollY]}this._dialogInput.css("left",this._pos[0]+"px").css("top",this._pos[1]+"px");inst.settings.onSelect=onSelect;this._inDialog=true;this.dpDiv.addClass(this._dialogClass);this._showDatepicker(this._dialogInput[0]);if($.blockUI){$.blockUI(this.dpDiv)}$.data(this._dialogInput[0],PROP_NAME,inst);return this},_destroyDatepicker:function(target){var $target=$(target);var inst=$.data(target,PROP_NAME);if(!$target.hasClass(this.markerClassName)){return}var nodeName=target.nodeName.toLowerCase();$.removeData(target,PROP_NAME);if(nodeName=="input"){inst.append.remove();inst.trigger.remove();$target.removeClass(this.markerClassName).unbind("focus",this._showDatepicker).unbind("keydown",this._doKeyDown).unbind("keypress",this._doKeyPress)}else{if(nodeName=="div"||nodeName=="span"){$target.removeClass(this.markerClassName).empty()}}},_enableDatepicker:function(target){var $target=$(target);var inst=$.data(target,PROP_NAME);if(!$target.hasClass(this.markerClassName)){return}var nodeName=target.nodeName.toLowerCase();if(nodeName=="input"){target.disabled=false;inst.trigger.filter("button").each(function(){this.disabled=false}).end().filter("img").css({opacity:"1.0",cursor:""})}else{if(nodeName=="div"||nodeName=="span"){var inline=$target.children("."+this._inlineClass);inline.children().removeClass("ui-state-disabled")}}this._disabledInputs=$.map(this._disabledInputs,function(value){return(value==target?null:value)})},_disableDatepicker:function(target){var $target=$(target);var inst=$.data(target,PROP_NAME);if(!$target.hasClass(this.markerClassName)){return}var nodeName=target.nodeName.toLowerCase();if(nodeName=="input"){target.disabled=true;inst.trigger.filter("button").each(function(){this.disabled=true}).end().filter("img").css({opacity:"0.5",cursor:"default"})}else{if(nodeName=="div"||nodeName=="span"){var inline=$target.children("."+this._inlineClass);inline.children().addClass("ui-state-disabled")}}this._disabledInputs=$.map(this._disabledInputs,function(value){return(value==target?null:value)});this._disabledInputs[this._disabledInputs.length]=target},_isDisabledDatepicker:function(target){if(!target){return false}for(var i=0;i-1)}},_showDatepicker:function(input){input=input.target||input;if(input.nodeName.toLowerCase()!="input"){input=$("input",input.parentNode)[0]}if($.datepicker._isDisabledDatepicker(input)||$.datepicker._lastInput==input){return}var inst=$.datepicker._getInst(input);var beforeShow=$.datepicker._get(inst,"beforeShow");extendRemove(inst.settings,(beforeShow?beforeShow.apply(input,[input,inst]):{}));$.datepicker._hideDatepicker(null,"");$.datepicker._lastInput=input;$.datepicker._setDateFromField(inst);if($.datepicker._inDialog){input.value=""}if(!$.datepicker._pos){$.datepicker._pos=$.datepicker._findPos(input);$.datepicker._pos[1]+=input.offsetHeight}var isFixed=false;$(input).parents().each(function(){isFixed|=$(this).css("position")=="fixed";return !isFixed});if(isFixed&&$.browser.opera){$.datepicker._pos[0]-=document.documentElement.scrollLeft;$.datepicker._pos[1]-=document.documentElement.scrollTop}var offset={left:$.datepicker._pos[0],top:$.datepicker._pos[1]};$.datepicker._pos=null;inst.rangeStart=null;inst.dpDiv.css({position:"absolute",display:"block",top:"-1000px"});$.datepicker._updateDatepicker(inst);offset=$.datepicker._checkOffset(inst,offset,isFixed);inst.dpDiv.css({position:($.datepicker._inDialog&&$.blockUI?"static":(isFixed?"fixed":"absolute")),display:"none",left:offset.left+"px",top:offset.top+"px"});if(!inst.inline){var showAnim=$.datepicker._get(inst,"showAnim")||"show";var duration=$.datepicker._get(inst,"duration");var postProcess=function(){$.datepicker._datepickerShowing=true;if($.browser.msie&&parseInt($.browser.version,10)<7){$("iframe.ui-datepicker-cover").css({width:inst.dpDiv.width()+4,height:inst.dpDiv.height()+4})}};if($.effects&&$.effects[showAnim]){inst.dpDiv.show(showAnim,$.datepicker._get(inst,"showOptions"),duration,postProcess)}else{inst.dpDiv[showAnim](duration,postProcess)}if(duration==""){postProcess()}if(inst.input[0].type!="hidden"){inst.input[0].focus()}$.datepicker._curInst=inst}},_updateDatepicker:function(inst){var dims={width:inst.dpDiv.width()+4,height:inst.dpDiv.height()+4};var self=this;inst.dpDiv.empty().append(this._generateHTML(inst)).find("iframe.ui-datepicker-cover").css({width:dims.width,height:dims.height}).end().find("button, .ui-datepicker-prev, .ui-datepicker-next, .ui-datepicker-calendar td a").bind("mouseout",function(){$(this).removeClass("ui-state-hover");if(this.className.indexOf("ui-datepicker-prev")!=-1){$(this).removeClass("ui-datepicker-prev-hover")}if(this.className.indexOf("ui-datepicker-next")!=-1){$(this).removeClass("ui-datepicker-next-hover")}}).bind("mouseover",function(){if(!self._isDisabledDatepicker(inst.inline?inst.dpDiv.parent()[0]:inst.input[0])){$(this).parents(".ui-datepicker-calendar").find("a").removeClass("ui-state-hover");$(this).addClass("ui-state-hover");if(this.className.indexOf("ui-datepicker-prev")!=-1){$(this).addClass("ui-datepicker-prev-hover")}if(this.className.indexOf("ui-datepicker-next")!=-1){$(this).addClass("ui-datepicker-next-hover")}}}).end().find("."+this._dayOverClass+" a").trigger("mouseover").end();var numMonths=this._getNumberOfMonths(inst);var cols=numMonths[1];var width=17;if(cols>1){inst.dpDiv.addClass("ui-datepicker-multi-"+cols).css("width",(width*cols)+"em")}else{inst.dpDiv.removeClass("ui-datepicker-multi-2 ui-datepicker-multi-3 ui-datepicker-multi-4").width("")}inst.dpDiv[(numMonths[0]!=1||numMonths[1]!=1?"add":"remove")+"Class"]("ui-datepicker-multi");inst.dpDiv[(this._get(inst,"isRTL")?"add":"remove")+"Class"]("ui-datepicker-rtl");if(inst.input&&inst.input[0].type!="hidden"&&inst==$.datepicker._curInst){$(inst.input[0]).focus()}},_checkOffset:function(inst,offset,isFixed){var dpWidth=inst.dpDiv.outerWidth();var dpHeight=inst.dpDiv.outerHeight();var inputWidth=inst.input?inst.input.outerWidth():0;var inputHeight=inst.input?inst.input.outerHeight():0;var viewWidth=(window.innerWidth||document.documentElement.clientWidth||document.body.clientWidth)+$(document).scrollLeft();var viewHeight=(window.innerHeight||document.documentElement.clientHeight||document.body.clientHeight)+$(document).scrollTop();offset.left-=(this._get(inst,"isRTL")?(dpWidth-inputWidth):0);offset.left-=(isFixed&&offset.left==inst.input.offset().left)?$(document).scrollLeft():0;offset.top-=(isFixed&&offset.top==(inst.input.offset().top+inputHeight))?$(document).scrollTop():0;offset.left-=(offset.left+dpWidth>viewWidth&&viewWidth>dpWidth)?Math.abs(offset.left+dpWidth-viewWidth):0;offset.top-=(offset.top+dpHeight>viewHeight&&viewHeight>dpHeight)?Math.abs(offset.top+dpHeight+inputHeight*2-viewHeight):0;return offset},_findPos:function(obj){while(obj&&(obj.type=="hidden"||obj.nodeType!=1)){obj=obj.nextSibling}var position=$(obj).offset();return[position.left,position.top]},_hideDatepicker:function(input,duration){var inst=this._curInst;if(!inst||(input&&inst!=$.data(input,PROP_NAME))){return}if(inst.stayOpen){this._selectDate("#"+inst.id,this._formatDate(inst,inst.currentDay,inst.currentMonth,inst.currentYear))}inst.stayOpen=false;if(this._datepickerShowing){duration=(duration!=null?duration:this._get(inst,"duration"));var showAnim=this._get(inst,"showAnim");var postProcess=function(){$.datepicker._tidyDialog(inst)};if(duration!=""&&$.effects&&$.effects[showAnim]){inst.dpDiv.hide(showAnim,$.datepicker._get(inst,"showOptions"),duration,postProcess)}else{inst.dpDiv[(duration==""?"hide":(showAnim=="slideDown"?"slideUp":(showAnim=="fadeIn"?"fadeOut":"hide")))](duration,postProcess)}if(duration==""){this._tidyDialog(inst)}var onClose=this._get(inst,"onClose");if(onClose){onClose.apply((inst.input?inst.input[0]:null),[(inst.input?inst.input.val():""),inst])}this._datepickerShowing=false;this._lastInput=null;if(this._inDialog){this._dialogInput.css({position:"absolute",left:"0",top:"-100px"});if($.blockUI){$.unblockUI();$("body").append(this.dpDiv)}}this._inDialog=false}this._curInst=null},_tidyDialog:function(inst){inst.dpDiv.removeClass(this._dialogClass).unbind(".ui-datepicker-calendar")},_checkExternalClick:function(event){if(!$.datepicker._curInst){return}var $target=$(event.target);if(($target.parents("#"+$.datepicker._mainDivId).length==0)&&!$target.hasClass($.datepicker.markerClassName)&&!$target.hasClass($.datepicker._triggerClass)&&$.datepicker._datepickerShowing&&!($.datepicker._inDialog&&$.blockUI)){$.datepicker._hideDatepicker(null,"")}},_adjustDate:function(id,offset,period){var target=$(id);var inst=this._getInst(target[0]);if(this._isDisabledDatepicker(target[0])){return}this._adjustInstDate(inst,offset+(period=="M"?this._get(inst,"showCurrentAtPos"):0),period);this._updateDatepicker(inst)},_gotoToday:function(id){var target=$(id);var inst=this._getInst(target[0]);if(this._get(inst,"gotoCurrent")&&inst.currentDay){inst.selectedDay=inst.currentDay;inst.drawMonth=inst.selectedMonth=inst.currentMonth;inst.drawYear=inst.selectedYear=inst.currentYear}else{var date=new Date();inst.selectedDay=date.getDate();inst.drawMonth=inst.selectedMonth=date.getMonth();inst.drawYear=inst.selectedYear=date.getFullYear()}this._notifyChange(inst);this._adjustDate(target)},_selectMonthYear:function(id,select,period){var target=$(id);var inst=this._getInst(target[0]);inst._selectingMonthYear=false;inst["selected"+(period=="M"?"Month":"Year")]=inst["draw"+(period=="M"?"Month":"Year")]=parseInt(select.options[select.selectedIndex].value,10);this._notifyChange(inst);this._adjustDate(target)},_clickMonthYear:function(id){var target=$(id);var inst=this._getInst(target[0]);if(inst.input&&inst._selectingMonthYear&&!$.browser.msie){inst.input[0].focus()}inst._selectingMonthYear=!inst._selectingMonthYear},_selectDay:function(id,month,year,td){var target=$(id);if($(td).hasClass(this._unselectableClass)||this._isDisabledDatepicker(target[0])){return}var inst=this._getInst(target[0]);inst.selectedDay=inst.currentDay=$("a",td).html();inst.selectedMonth=inst.currentMonth=month;inst.selectedYear=inst.currentYear=year;if(inst.stayOpen){inst.endDay=inst.endMonth=inst.endYear=null}this._selectDate(id,this._formatDate(inst,inst.currentDay,inst.currentMonth,inst.currentYear));if(inst.stayOpen){inst.rangeStart=this._daylightSavingAdjust(new Date(inst.currentYear,inst.currentMonth,inst.currentDay));this._updateDatepicker(inst)}},_clearDate:function(id){var target=$(id);var inst=this._getInst(target[0]);inst.stayOpen=false;inst.endDay=inst.endMonth=inst.endYear=inst.rangeStart=null;this._selectDate(target,"")},_selectDate:function(id,dateStr){var target=$(id);var inst=this._getInst(target[0]);dateStr=(dateStr!=null?dateStr:this._formatDate(inst));if(inst.input){inst.input.val(dateStr)}this._updateAlternate(inst);var onSelect=this._get(inst,"onSelect");if(onSelect){onSelect.apply((inst.input?inst.input[0]:null),[dateStr,inst])}else{if(inst.input){inst.input.trigger("change")}}if(inst.inline){this._updateDatepicker(inst)}else{if(!inst.stayOpen){this._hideDatepicker(null,this._get(inst,"duration"));this._lastInput=inst.input[0];if(typeof(inst.input[0])!="object"){inst.input[0].focus()}this._lastInput=null}}},_updateAlternate:function(inst){var altField=this._get(inst,"altField");if(altField){var altFormat=this._get(inst,"altFormat")||this._get(inst,"dateFormat");var date=this._getDate(inst);dateStr=this.formatDate(altFormat,date,this._getFormatConfig(inst));$(altField).each(function(){$(this).val(dateStr)})}},noWeekends:function(date){var day=date.getDay();return[(day>0&&day<6),""]},iso8601Week:function(date){var checkDate=new Date(date.getFullYear(),date.getMonth(),date.getDate());var firstMon=new Date(checkDate.getFullYear(),1-1,4);var firstDay=firstMon.getDay()||7;firstMon.setDate(firstMon.getDate()+1-firstDay);if(firstDay<4&&checkDatenew Date(checkDate.getFullYear(),12-1,28)){firstDay=new Date(checkDate.getFullYear()+1,1-1,4).getDay()||7;if(firstDay>4&&(checkDate.getDay()||7)0&&iValue="0"&&value.charAt(iValue)<="9"){num=num*10+parseInt(value.charAt(iValue++),10);size--}if(size==origSize){throw"Missing number at position "+iValue}return num};var getName=function(match,shortNames,longNames){var names=(lookAhead(match)?longNames:shortNames);var size=0;for(var j=0;j0&&iValue-1){month=1;day=doy;do{var dim=this._getDaysInMonth(year,month-1);if(day<=dim){break}month++;day-=dim}while(true)}var date=this._daylightSavingAdjust(new Date(year,month-1,day));if(date.getFullYear()!=year||date.getMonth()+1!=month||date.getDate()!=day){throw"Invalid date"}return date},ATOM:"yy-mm-dd",COOKIE:"D, dd M yy",ISO_8601:"yy-mm-dd",RFC_822:"D, d M y",RFC_850:"DD, dd-M-y",RFC_1036:"D, d M y",RFC_1123:"D, d M yy",RFC_2822:"D, d M yy",RSS:"D, d M y",TIMESTAMP:"@",W3C:"yy-mm-dd",formatDate:function(format,date,settings){if(!date){return""}var dayNamesShort=(settings?settings.dayNamesShort:null)||this._defaults.dayNamesShort;var dayNames=(settings?settings.dayNames:null)||this._defaults.dayNames;var monthNamesShort=(settings?settings.monthNamesShort:null)||this._defaults.monthNamesShort;var monthNames=(settings?settings.monthNames:null)||this._defaults.monthNames;var lookAhead=function(match){var matches=(iFormat+1=0;m--){doy+=this._getDaysInMonth(date.getFullYear(),m)}output+=formatNumber("o",doy,3);break;case"m":output+=formatNumber("m",date.getMonth()+1,2);break;case"M":output+=formatName("M",date.getMonth(),monthNamesShort,monthNames);break;case"y":output+=(lookAhead("y")?date.getFullYear():(date.getYear()%100<10?"0":"")+date.getYear()%100);break;case"@":output+=date.getTime();break;case"'":if(lookAhead("'")){output+="'"}else{literal=true}break;default:output+=format.charAt(iFormat)}}}}return output},_possibleChars:function(format){var chars="";var literal=false;for(var iFormat=0;iFormatmaxDate?maxDate:date);return date},_determineDate:function(date,defaultDate){var offsetNumeric=function(offset){var date=new Date();date.setDate(date.getDate()+offset);return date};var offsetString=function(offset,getDaysInMonth){var date=new Date();var year=date.getFullYear();var month=date.getMonth();var day=date.getDate();var pattern=/([+-]?[0-9]+)\s*(d|D|w|W|m|M|y|Y)?/g;var matches=pattern.exec(offset);while(matches){switch(matches[2]||"d"){case"d":case"D":day+=parseInt(matches[1],10);break;case"w":case"W":day+=parseInt(matches[1],10)*7;break;case"m":case"M":month+=parseInt(matches[1],10);day=Math.min(day,getDaysInMonth(year,month));break;case"y":case"Y":year+=parseInt(matches[1],10);day=Math.min(day,getDaysInMonth(year,month));break}matches=pattern.exec(offset)}return new Date(year,month,day)};date=(date==null?defaultDate:(typeof date=="string"?offsetString(date,this._getDaysInMonth):(typeof date=="number"?(isNaN(date)?defaultDate:offsetNumeric(date)):date)));date=(date&&date.toString()=="Invalid Date"?defaultDate:date);if(date){date.setHours(0);date.setMinutes(0);date.setSeconds(0);date.setMilliseconds(0)}return this._daylightSavingAdjust(date)},_daylightSavingAdjust:function(date){if(!date){return null}date.setHours(date.getHours()>12?date.getHours()+2:0);return date},_setDate:function(inst,date,endDate){var clear=!(date);var origMonth=inst.selectedMonth;var origYear=inst.selectedYear;date=this._determineDate(date,new Date());inst.selectedDay=inst.currentDay=date.getDate();inst.drawMonth=inst.selectedMonth=inst.currentMonth=date.getMonth();inst.drawYear=inst.selectedYear=inst.currentYear=date.getFullYear();if(origMonth!=inst.selectedMonth||origYear!=inst.selectedYear){this._notifyChange(inst)}this._adjustInstDate(inst);if(inst.input){inst.input.val(clear?"":this._formatDate(inst))}},_getDate:function(inst){var startDate=(!inst.currentYear||(inst.input&&inst.input.val()=="")?null:this._daylightSavingAdjust(new Date(inst.currentYear,inst.currentMonth,inst.currentDay)));return startDate},_generateHTML:function(inst){var today=new Date();today=this._daylightSavingAdjust(new Date(today.getFullYear(),today.getMonth(),today.getDate()));var isRTL=this._get(inst,"isRTL");var showButtonPanel=this._get(inst,"showButtonPanel");var hideIfNoPrevNext=this._get(inst,"hideIfNoPrevNext");var navigationAsDateFormat=this._get(inst,"navigationAsDateFormat");var numMonths=this._getNumberOfMonths(inst);var showCurrentAtPos=this._get(inst,"showCurrentAtPos");var stepMonths=this._get(inst,"stepMonths");var stepBigMonths=this._get(inst,"stepBigMonths");var isMultiMonth=(numMonths[0]!=1||numMonths[1]!=1);var currentDate=this._daylightSavingAdjust((!inst.currentDay?new Date(9999,9,9):new Date(inst.currentYear,inst.currentMonth,inst.currentDay)));var minDate=this._getMinMaxDate(inst,"min",true);var maxDate=this._getMinMaxDate(inst,"max");var drawMonth=inst.drawMonth-showCurrentAtPos;var drawYear=inst.drawYear;if(drawMonth<0){drawMonth+=12;drawYear--}if(maxDate){var maxDraw=this._daylightSavingAdjust(new Date(maxDate.getFullYear(),maxDate.getMonth()-numMonths[1]+1,maxDate.getDate()));maxDraw=(minDate&&maxDrawmaxDraw){drawMonth--;if(drawMonth<0){drawMonth=11;drawYear--}}}inst.drawMonth=drawMonth;inst.drawYear=drawYear;var prevText=this._get(inst,"prevText");prevText=(!navigationAsDateFormat?prevText:this.formatDate(prevText,this._daylightSavingAdjust(new Date(drawYear,drawMonth-stepMonths,1)),this._getFormatConfig(inst)));var prev=(this._canAdjustMonth(inst,-1,drawYear,drawMonth)?''+prevText+"":(hideIfNoPrevNext?"":''+prevText+""));var nextText=this._get(inst,"nextText");nextText=(!navigationAsDateFormat?nextText:this.formatDate(nextText,this._daylightSavingAdjust(new Date(drawYear,drawMonth+stepMonths,1)),this._getFormatConfig(inst)));var next=(this._canAdjustMonth(inst,+1,drawYear,drawMonth)?''+nextText+"":(hideIfNoPrevNext?"":''+nextText+""));var currentText=this._get(inst,"currentText");var gotoDate=(this._get(inst,"gotoCurrent")&&inst.currentDay?currentDate:today);currentText=(!navigationAsDateFormat?currentText:this.formatDate(currentText,gotoDate,this._getFormatConfig(inst)));var controls=(!inst.inline?'":"");var buttonPanel=(showButtonPanel)?'
'+(isRTL?controls:"")+(this._isInRange(inst,gotoDate)?'":"")+(isRTL?"":controls)+"
":"";var firstDay=parseInt(this._get(inst,"firstDay"),10);firstDay=(isNaN(firstDay)?0:firstDay);var dayNames=this._get(inst,"dayNames");var dayNamesShort=this._get(inst,"dayNamesShort");var dayNamesMin=this._get(inst,"dayNamesMin");var monthNames=this._get(inst,"monthNames");var monthNamesShort=this._get(inst,"monthNamesShort");var beforeShowDay=this._get(inst,"beforeShowDay");var showOtherMonths=this._get(inst,"showOtherMonths");var calculateWeek=this._get(inst,"calculateWeek")||this.iso8601Week;var endDate=inst.endDay?this._daylightSavingAdjust(new Date(inst.endYear,inst.endMonth,inst.endDay)):currentDate;var defaultDate=this._getDefaultDate(inst);var html="";for(var row=0;row'+(/all|left/.test(cornerClass)&&row==0?(isRTL?next:prev):"")+(/all|right/.test(cornerClass)&&row==0?(isRTL?prev:next):"")+this._generateMonthYearHeader(inst,drawMonth,drawYear,minDate,maxDate,selectedDate,row>0||col>0,monthNames,monthNamesShort)+'';var thead="";for(var dow=0;dow<7;dow++){var day=(dow+firstDay)%7;thead+="=5?' class="ui-datepicker-week-end"':"")+'>'+dayNamesMin[day]+""}calender+=thead+"";var daysInMonth=this._getDaysInMonth(drawYear,drawMonth);if(drawYear==inst.selectedYear&&drawMonth==inst.selectedMonth){inst.selectedDay=Math.min(inst.selectedDay,daysInMonth)}var leadDays=(this._getFirstDayOfMonth(drawYear,drawMonth)-firstDay+7)%7;var numRows=(isMultiMonth?6:Math.ceil((leadDays+daysInMonth)/7));var printDate=this._daylightSavingAdjust(new Date(drawYear,drawMonth,1-leadDays));for(var dRow=0;dRow";var tbody="";for(var dow=0;dow<7;dow++){var daySettings=(beforeShowDay?beforeShowDay.apply((inst.input?inst.input[0]:null),[printDate]):[true,""]);var otherMonth=(printDate.getMonth()!=drawMonth);var unselectable=otherMonth||!daySettings[0]||(minDate&&printDatemaxDate);tbody+='";printDate.setDate(printDate.getDate()+1);printDate=this._daylightSavingAdjust(printDate)}calender+=tbody+""}drawMonth++;if(drawMonth>11){drawMonth=0;drawYear++}calender+="
=currentDate.getTime()&&printDate.getTime()<=endDate.getTime()?" "+this._currentClass:"")+(printDate.getTime()==today.getTime()?" ui-datepicker-today":""))+'"'+((!otherMonth||showOtherMonths)&&daySettings[2]?' title="'+daySettings[2]+'"':"")+(unselectable?"":" onclick=\"DP_jQuery.datepicker._selectDay('#"+inst.id+"',"+drawMonth+","+drawYear+', this);return false;"')+">"+(otherMonth?(showOtherMonths?printDate.getDate():" "):(unselectable?''+printDate.getDate()+"":'=currentDate.getTime()&&printDate.getTime()<=endDate.getTime()?" ui-state-active":"")+'" href="#">'+printDate.getDate()+""))+"
"+(isMultiMonth?""+((numMonths[0]>0&&col==numMonths[1]-1)?'
':""):"");group+=calender}html+=group}html+=buttonPanel+($.browser.msie&&parseInt($.browser.version,10)<7&&!inst.inline?'':"");inst._keyEvent=false;return html},_generateMonthYearHeader:function(inst,drawMonth,drawYear,minDate,maxDate,selectedDate,secondary,monthNames,monthNamesShort){minDate=(inst.rangeStart&&minDate&&selectedDate "}else{var inMinYear=(minDate&&minDate.getFullYear()==drawYear);var inMaxYear=(maxDate&&maxDate.getFullYear()==drawYear);monthHtml+='"}if(!showMonthAfterYear){html+=monthHtml+((secondary||changeMonth||changeYear)&&(!(changeMonth&&changeYear))?" ":"")}if(secondary||!changeYear){html+=''+drawYear+""}else{var years=this._get(inst,"yearRange").split(":");var year=0;var endYear=0;if(years.length!=2){year=drawYear-10;endYear=drawYear+10}else{if(years[0].charAt(0)=="+"||years[0].charAt(0)=="-"){year=drawYear+parseInt(years[0],10);endYear=drawYear+parseInt(years[1],10)}else{year=parseInt(years[0],10);endYear=parseInt(years[1],10)}}year=(minDate?Math.max(year,minDate.getFullYear()):year);endYear=(maxDate?Math.min(endYear,maxDate.getFullYear()):endYear);html+='"}if(showMonthAfterYear){html+=(secondary||changeMonth||changeYear?" ":"")+monthHtml}html+="";return html},_adjustInstDate:function(inst,offset,period){var year=inst.drawYear+(period=="Y"?offset:0);var month=inst.drawMonth+(period=="M"?offset:0);var day=Math.min(inst.selectedDay,this._getDaysInMonth(year,month))+(period=="D"?offset:0);var date=this._daylightSavingAdjust(new Date(year,month,day));var minDate=this._getMinMaxDate(inst,"min",true);var maxDate=this._getMinMaxDate(inst,"max");date=(minDate&&datemaxDate?maxDate:date);inst.selectedDay=date.getDate();inst.drawMonth=inst.selectedMonth=date.getMonth();inst.drawYear=inst.selectedYear=date.getFullYear();if(period=="M"||period=="Y"){this._notifyChange(inst)}},_notifyChange:function(inst){var onChange=this._get(inst,"onChangeMonthYear");if(onChange){onChange.apply((inst.input?inst.input[0]:null),[inst.selectedYear,inst.selectedMonth+1,inst])}},_getNumberOfMonths:function(inst){var numMonths=this._get(inst,"numberOfMonths");return(numMonths==null?[1,1]:(typeof numMonths=="number"?[1,numMonths]:numMonths))},_getMinMaxDate:function(inst,minMax,checkRange){var date=this._determineDate(this._get(inst,minMax+"Date"),null);return(!checkRange||!inst.rangeStart?date:(!date||inst.rangeStart>date?inst.rangeStart:date))},_getDaysInMonth:function(year,month){return 32-new Date(year,month,32).getDate()},_getFirstDayOfMonth:function(year,month){return new Date(year,month,1).getDay()},_canAdjustMonth:function(inst,offset,curYear,curMonth){var numMonths=this._getNumberOfMonths(inst);var date=this._daylightSavingAdjust(new Date(curYear,curMonth+(offset<0?offset:numMonths[1]),1));if(offset<0){date.setDate(this._getDaysInMonth(date.getFullYear(),date.getMonth()))}return this._isInRange(inst,date)},_isInRange:function(inst,date){var newMinDate=(!inst.rangeStart?null:this._daylightSavingAdjust(new Date(inst.selectedYear,inst.selectedMonth,inst.selectedDay)));newMinDate=(newMinDate&&inst.rangeStart=minDate)&&(!maxDate||date<=maxDate))},_getFormatConfig:function(inst){var shortYearCutoff=this._get(inst,"shortYearCutoff");shortYearCutoff=(typeof shortYearCutoff!="string"?shortYearCutoff:new Date().getFullYear()%100+parseInt(shortYearCutoff,10));return{shortYearCutoff:shortYearCutoff,dayNamesShort:this._get(inst,"dayNamesShort"),dayNames:this._get(inst,"dayNames"),monthNamesShort:this._get(inst,"monthNamesShort"),monthNames:this._get(inst,"monthNames")}},_formatDate:function(inst,day,month,year){if(!day){inst.currentDay=inst.selectedDay;inst.currentMonth=inst.selectedMonth;inst.currentYear=inst.selectedYear}var date=(day?(typeof day=="object"?day:this._daylightSavingAdjust(new Date(year,month,day))):this._daylightSavingAdjust(new Date(inst.currentYear,inst.currentMonth,inst.currentDay)));return this.formatDate(this._get(inst,"dateFormat"),date,this._getFormatConfig(inst))}});function extendRemove(target,props){$.extend(target,props);for(var name in props){if(props[name]==null||props[name]==undefined){target[name]=props[name]}}return target}function isArray(a){return(a&&(($.browser.safari&&typeof a=="object"&&a.length)||(a.constructor&&a.constructor.toString().match(/\Array\(\)/))))}$.fn.datepicker=function(options){if(!$.datepicker.initialized){$(document).mousedown($.datepicker._checkExternalClick).find("body").append($.datepicker.dpDiv);$.datepicker.initialized=true}var otherArgs=Array.prototype.slice.call(arguments,1);if(typeof options=="string"&&(options=="isDisabled"||options=="getDate")){return $.datepicker["_"+options+"Datepicker"].apply($.datepicker,[this[0]].concat(otherArgs))}if(options=="option"&&arguments.length==2&&typeof arguments[1]=="string"){return $.datepicker["_"+options+"Datepicker"].apply($.datepicker,[this[0]].concat(otherArgs))}return this.each(function(){typeof options=="string"?$.datepicker["_"+options+"Datepicker"].apply($.datepicker,[this].concat(otherArgs)):$.datepicker._attachDatepicker(this,options)})};$.datepicker=new Datepicker();$.datepicker.initialized=false;$.datepicker.uuid=new Date().getTime();$.datepicker.version="1.7.2";window.DP_jQuery=$})(jQuery); \ No newline at end of file diff --git a/trunk/ui.datepicker.packed.js b/trunk/ui.datepicker.packed.js deleted file mode 100644 index 919cade2d..000000000 --- a/trunk/ui.datepicker.packed.js +++ /dev/null @@ -1,2 +0,0 @@ -eval(function(p,a,c,k,e,d){e=function(c){return(c35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--)d[e(c)]=k[c]||e(c);k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--)if(k[c])p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c]);return p}('(p($){c 2T="f";p 3Z(){b.7P=E;b.3Q=t;b.2y=[];b.3l=E;b.2S=E;b.5W="v-f-I";b.6f="v-f-1c";b.6h="v-f-3v";b.2w="v-f-4o";b.5Y="v-f-af";b.5B="v-f-3I";b.6e="v-f-4u";b.5v="v-f-49";b.4G="v-f-4O-H";b.6k=[];b.6k[""]={76:"ae",77:"ad 3s 4O h",74:"7U",75:"7U ac 7j",2M:"m;ab",72:"3t 3s 7T F",2N:"m;m;",73:"3t 3s 7T B",2L:"aal;",71:"3t 3s 3H F",2K:"l;l;",70:"3t 3s 3H B",3f:"a9",6Z:"3t 3s 4O F",1n:["a8","a7","a6","a5","7S","a4","a3","a2","a1","a0","9Z","9Y"],1Z:["9X","9W","9V","9U","7S","9T","9S","9R","9Q","9P","9O","9N"],6K:"3t a 7R F",6D:"3t a 7R B",6X:"9M",4d:"9L 9K 3s B",1v:["9J","9I","9H","9G","9F","9E","9D"],1z:["9C","9B","9A","9z","9y","9x","9w"],4K:["9v","9u","9t","9s","9r","9q","9p"],4L:"9o 4g 9n 9m 2F H",3d:"7Q 4g, M d",2X:"4U/3J/3k",1B:0,Z:"7Q a h",1I:E};b.1D={3r:"2P",1V:"69",62:{},2e:t,4v:"",2W:"...",3X:"",7N:E,47:1d,5E:E,4h:E,2I:E,3g:E,5C:E,6L:1d,6H:1d,44:E,6G:"-10:+10",4f:1d,3D:E,2C:E,4e:E,4I:b.4M,1F:"+10",15:E,6Y:b.3d,R:t,T:t,1j:"9l",4c:t,4s:t,2Q:t,6C:t,4q:t,6B:1,4P:0,2r:1,2q:12,1K:E,4j:" - ",4n:"",3N:""};$.4x(b.1D,b.6k[""]);b.O=$(\'\')}$.4x(3Z.6q,{29:"9k",5L:p(){k(b.7P){9j.5L.2k("",5d)}},9i:p(z){3x(b.1D,z||{});r b},6n:p(n,z){c 3Y=t;1l(59 6v b.1D){c 58=n.9h("h:"+59);k(58){3Y=3Y||{};5O{3Y[59]=9g(58)}5M(7x){3Y[59]=58}}}c 1a=n.1a.4t();c 1c=(1a=="I"||1a=="2H");k(!n.u){n.u="7F"+(++b.5a)}c 8=b.6i($(n),1c);8.z=$.4x({},z||{},3Y||{});k(1a=="q"){b.7O(n,8)}P{k(1c){b.7I(n,8)}}},6i:p(n,1c){c u=n[0].u.5y(/([:\\[\\]\\.])/g,"\\\\\\\\$1");r{u:u,q:n,1u:0,1m:0,1q:0,G:0,J:0,1c:1c,O:(!1c?b.O:$(\'\'))}},7O:p(n,8){c q=$(n);k(q.2R(b.29)){r}c 4v=b.l(8,"4v");c 1I=b.l(8,"1I");k(4v){q[1I?"7K":"7J"](\'<2H 16="\'+b.6h+\'">\'+4v+"")}c 3r=b.l(8,"3r");k(3r=="2P"||3r=="4D"){q.2P(b.3U)}k(3r=="3W"||3r=="4D"){c 2W=b.l(8,"2W");c 3X=b.l(8,"3X");c 4o=$(b.l(8,"7N")?$("<56/>").2o(b.2w).7M({5s:3X,7L:2W,4b:2W}):$(\'<3W 4r="3W">\').2o(b.2w).V(3X==""?2W:$("<56/>").7M({5s:3X,7L:2W,4b:2W})));q[1I?"7K":"7J"](4o);4o.9f(p(){k($.f.3l&&$.f.3O==n){$.f.2s()}P{$.f.3U(n)}r E})}q.2o(b.29).6g(b.54).7C(b.6d).57("7H.f",p(3P,2V,K){8.z[2V]=K}).57("7G.f",p(3P,2V){r b.l(8,2V)});$.3n(n,2T,8)},7I:p(n,8){c 6j=$(n);k(6j.2R(b.29)){r}6j.2o(b.29).3v(8.O).57("7H.f",p(3P,2V,K){8.z[2V]=K}).57("7G.f",p(3P,2V){r b.l(8,2V)});$.3n(n,2T,8);b.5G(8,b.5K(8));b.26(8)},9e:p(8){c 1i=b.3z(8);8.O.1E(1i[1]*$(".v-f",8.O[0]).1E())},9d:p(q,7D,2Q,z,2x){c 8=b.7E;k(!8){c u="7F"+(++b.5a);b.2g=$(\'\');b.2g.6g(b.54);$("2l").3v(b.2g);8=b.7E=b.6i(b.2g,E);8.z={};$.3n(b.2g[0],2T,8)}3x(8.z,z||{});b.2g.3i(7D);b.1O=(2x?(2x.1f?2x:[2x.9c,2x.9b]):t);k(!b.1O){c 52=53.7o||1e.1W.67||1e.2l.67;c 51=53.7n||1e.1W.66||1e.2l.66;c 3q=1e.1W.3T||1e.2l.3T;c 3p=1e.1W.3S||1e.2l.3S;b.1O=[(52/2)-2Z+3q,(51/2)-9a+3p]}b.2g.2a("1N",b.1O[0]+"2U").2a("1x",b.1O[1]+"2U");8.z.2Q=2Q;b.2S=1d;b.O.2o(b.5Y);b.3U(b.2g[0]);k($.4p){$.4p(b.O)}$.3n(b.2g[0],2T,8);r b},99:p(n){c $n=$(n);k(!$n.2R(b.29)){r}c 1a=n.1a.4t();$.98(n,2T);k(1a=="q"){$n.3V("."+b.6h).3R().3F().3V("."+b.2w).3R().3F().3b(b.29).4Y("2P",b.3U).4Y("6g",b.54).4Y("7C",b.6d)}P{k(1a=="I"||1a=="2H"){$n.3b(b.29).7s()}}},97:p(n){c $n=$(n);k(!$n.2R(b.29)){r}c 1a=n.1a.4t();k(1a=="q"){n.4u=E;$n.3V("3W."+b.2w).3u(p(){b.4u=E}).3F().3V("56."+b.2w).2a({7B:"1.0",7A:""})}P{k(1a=="I"||1a=="2H"){$n.7z("."+b.6e).3R()}}b.2y=$.7y(b.2y,p(K){r(K==n?t:K)})},96:p(n){c $n=$(n);k(!$n.2R(b.29)){r}c 1a=n.1a.4t();k(1a=="q"){n.4u=1d;$n.3V("3W."+b.2w).3u(p(){b.4u=1d}).3F().3V("56."+b.2w).2a({7B:"0.5",7A:"4l"})}P{k(1a=="I"||1a=="2H"){c 1c=$n.7z("."+b.6f);c L=1c.L();c 55={1N:0,1x:0};1c.5X().3u(p(){k($(b).2a("1T")=="95"){55=$(b).L();r E}});$n.94(\'\')}}b.2y=$.7y(b.2y,p(K){r(K==n?t:K)});b.2y[b.2y.1f]=n},7v:p(n){k(!n){r E}1l(c i=0;i-1)},3U:p(q){q=q.n||q;k(q.1a.4t()!="q"){q=$("q",q.8R)[0]}k($.f.7v(q)||$.f.3O==q){r}c 8=$.f.1r(q);c 4s=$.f.l(8,"4s");3x(8.z,(4s?4s.2k(q,[q,8]):{}));$.f.2s(t,"");$.f.3O=q;$.f.5P(8);k($.f.2S){q.K=""}k(!$.f.1O){$.f.1O=$.f.64(q);$.f.1O[1]+=q.8Q}c 1y=E;$(q).5X().3u(p(){1y|=$(b).2a("1T")=="7u";r!1y});k(1y&&$.2c.65){$.f.1O[0]-=1e.1W.3T;$.f.1O[1]-=1e.1W.3S}c L={1N:$.f.1O[0],1x:$.f.1O[1]};$.f.1O=t;8.1g=t;8.O.2a({1T:"4Z",6a:"8P",1x:"-8O"});$.f.26(8);8.O.1E($.f.3z(8)[1]*$(".v-f",8.O[0])[0].8N);L=$.f.7p(8,L,1y);8.O.2a({1T:($.f.2S&&$.4p?"8M":(1y?"7u":"4Z")),6a:"7t",1N:L.1N+"2U",1x:L.1x+"2U"});k(!8.1c){c 1V=$.f.l(8,"1V")||"69";c 1j=$.f.l(8,"1j");c 3m=p(){$.f.3l=1d;k($.2c.4C&&1G($.2c.6N,10)<7){$("4B.v-f-5r").2a({1E:8.O.1E()+4,2h:8.O.2h()+4})}};k($.50&&$.50[1V]){8.O.69(1V,$.f.l(8,"62"),1j,3m)}P{8.O[1V](1j,3m)}k(1j==""){3m()}k(8.q[0].4r!="63"){8.q[0].2P()}$.f.3Q=8}},26:p(8){c 68={1E:8.O.1E()+4,2h:8.O.2h()+4};8.O.7s().3v(b.78(8)).8L("4B.v-f-5r").2a({1E:68.1E,2h:68.2h});c 1i=b.3z(8);8.O[(1i[0]!=1||1i[1]!=1?"7r":"3R")+"7q"]("v-f-8K");8.O[(b.l(8,"1I")?"7r":"3R")+"7q"]("v-f-8J");k(8.q&&8.q[0].4r!="63"){$(8.q[0]).2P()}},7p:p(8,L,1y){c 2x=8.q?b.64(8.q[0]):t;c 52=53.7o||1e.1W.67;c 51=53.7n||1e.1W.66;c 3q=1e.1W.3T||1e.2l.3T;c 3p=1e.1W.3S||1e.2l.3S;k(b.l(8,"1I")||(L.1N+8.O.1E()-3q)>52){L.1N=21.2z((1y?0:3q),2x[0]+(8.q?8.q.1E():0)-(1y?3q:0)-8.O.1E()-(1y&&$.2c.65?1e.1W.3T:0))}P{L.1N-=(1y?3q:0)}k((L.1x+8.O.2h()-3p)>51){L.1x=21.2z((1y?0:3p),2x[1]-(1y?3p:0)-(b.2S?0:8.O.2h())-(1y&&$.2c.65?1e.1W.3S:0))}P{L.1x-=(1y?3p:0)}r L},64:p(3o){3h(3o&&(3o.4r=="63"||3o.8I!=1)){3o=3o.8H}c 1T=$(3o).L();r[1T.1N,1T.1x]},2s:p(q,1j){c 8=b.3Q;k(!8||(q&&8!=$.3n(q,2T))){r}c 1K=b.l(8,"1K");k(1K&&8.2v){b.4W("#"+8.u,b.2Y(8,8.1h,8.1t,8.1p))}8.2v=E;k(b.3l){1j=(1j!=t?1j:b.l(8,"1j"));c 1V=b.l(8,"1V");c 3m=p(){$.f.5Z(8)};k(1j!=""&&$.50&&$.50[1V]){8.O.61(1V,$.f.l(8,"62"),1j,3m)}P{8.O[(1j==""?"61":(1V=="8G"?"8F":(1V=="8E"?"8D":"61")))](1j,3m)}k(1j==""){b.5Z(8)}c 4q=b.l(8,"4q");k(4q){4q.2k((8.q?8.q[0]:t),[(8.q?8.q.3i():""),8])}b.3l=E;b.3O=t;8.z.3I=t;k(b.2S){b.2g.2a({1T:"4Z",1N:"0",1x:"-7m"});k($.4p){$.8C();$("2l").3v(b.O)}}b.2S=E}b.3Q=t},5Z:p(8){8.O.3b(b.5Y).4Y(".v-f");$("."+b.5B,8.O).3R()},6s:p(3P){k(!$.f.3Q){r}c $n=$(3P.n);k(($n.5X("#"+$.f.5W).1f==0)&&!$n.2R($.f.29)&&!$n.2R($.f.2w)&&$.f.3l&&!($.f.2S&&$.4p)){$.f.2s(t,"")}},1J:p(u,L,20){c n=$(u);c 8=b.1r(n[0]);b.4z(8,L,20);b.26(8)},5z:p(u){c n=$(u);c 8=b.1r(n[0]);k(b.l(8,"5C")&&8.1h){8.1u=8.1h;8.G=8.1m=8.1t;8.J=8.1q=8.1p}P{c h=x A();8.1u=h.S();8.G=8.1m=h.X();8.J=8.1q=h.Q()}b.43(8);b.1J(n)},5o:p(u,3a,20){c n=$(u);c 8=b.1r(n[0]);8.4X=E;8["45"+(20=="M"?"7l":"7k")]=8["8B"+(20=="M"?"7l":"7k")]=1G(3a.2j[3a.8A].K,10);b.43(8);b.1J(n)},5n:p(u){c n=$(u);c 8=b.1r(n[0]);k(8.q&&8.4X&&!$.2c.4C){8.q[0].2P()}8.4X=!8.4X},6V:p(u,H){c n=$(u);c 8=b.1r(n[0]);8.z.1B=H;b.26(8)},5u:p(u,F,B,1A){k($(1A).2R(b.5v)){r}c n=$(u);c 8=b.1r(n[0]);c 1K=b.l(8,"1K");k(1K){8.2v=!8.2v;k(8.2v){$(".v-f 1A",8.O).3b(b.4G);$(1A).2o(b.4G)}}8.1u=8.1h=$("a",1A).V();8.1m=8.1t=F;8.1q=8.1p=B;k(8.2v){8.1Q=8.24=8.19=t}P{k(1K){8.1Q=8.1h;8.24=8.1t;8.19=8.1p}}b.4W(u,b.2Y(8,8.1h,8.1t,8.1p));k(8.2v){8.1g=x A(8.1p,8.1t,8.1h);b.26(8)}P{k(1K){8.1u=8.1h=8.1g.S();8.1m=8.1t=8.1g.X();8.1q=8.1p=8.1g.Q();8.1g=t;k(8.1c){b.26(8)}}}},5D:p(u){c n=$(u);c 8=b.1r(n[0]);k(b.l(8,"5E")){r}8.2v=E;8.1Q=8.24=8.19=8.1g=t;b.4W(n,"")},4W:p(u,1U){c n=$(u);c 8=b.1r(n[0]);1U=(1U!=t?1U:b.2Y(8));k(b.l(8,"1K")&&1U){1U=(8.1g?b.2Y(8,8.1g):1U)+b.l(8,"4j")+1U}k(8.q){8.q.3i(1U)}b.5V(8);c 2Q=b.l(8,"2Q");k(2Q){2Q.2k((8.q?8.q[0]:t),[1U,8])}P{k(8.q){8.q.4o("7j")}}k(8.1c){b.26(8)}P{k(!8.2v){b.2s(t,b.l(8,"1j"));b.3O=8.q[0];k(1X(8.q[0])!="4w"){8.q[0].2P()}b.3O=t}}},5V:p(8){c 4n=b.l(8,"4n");k(4n){c 3N=b.l(8,"3N");c h=b.5F(8);1U=(6u(h)?(!h[0]&&!h[1]?"":b.1Y(3N,h[0],b.1P(8))+b.l(8,"4j")+b.1Y(3N,h[1]||h[0],b.1P(8))):b.1Y(3N,h,b.1P(8)));$(4n).3u(p(){$(b).3i(1U)})}},8z:p(h){c H=h.3A();r[(H>0&&H<6),""]},4M:p(h){c 25=x A(h.Q(),h.X(),h.S(),(h.8y()/-60));c 3M=x A(25.Q(),1-1,4);c 1B=3M.3A()||7;3M.4y(3M.S()+1-1B);k(1B<4&&25<3M){25.4y(25.S()-3);r $.f.4M(25)}P{k(25>x A(25.Q(),12-1,28)){1B=x A(25.Q()+1,1-1,4).3A()||7;k(1B>4&&(25.3A()||7)<1B-3){r 1}}}r 21.8x(((25-3M)/8w)/7)+1},3d:p(h,8){r $.f.1Y($.f.l(8,"3d"),h,$.f.1P(8))},5N:p(18,K,z){k(18==t||K==t){3K"5H 5d"}K=(1X K=="4w"?K.5e():K+"");k(K==""){r t}c 1F=(z?z.1F:t)||b.1D.1F;c 1z=(z?z.1z:t)||b.1D.1z;c 1v=(z?z.1v:t)||b.1D.1v;c 1Z=(z?z.1Z:t)||b.1D.1Z;c 1n=(z?z.1n:t)||b.1D.1n;c B=-1;c F=-1;c H=-1;c 3j=-1;c 1L=E;c 1M=p(1o){c 1C=(U+1<18.1f&&18.1b(U+1)==1o);k(1C){U++}r 1C};c 3L=p(1o){1M(1o);c 5U=(1o=="@"?14:(1o=="y"?4:(1o=="o"?3:2)));c 2f=5U;c 2u=0;3h(2f>0&&1S="0"&&K.1b(1S)<="9"){2u=2u*10+1G(K.1b(1S++),10);2f--}k(2f==5U){3K"7i 5i 5T 1T "+1S}r 2u};c 5S=p(1o,4S,4T){c 4m=(1M(1o)?4T:4S);c 2f=0;1l(c j=0;j<4m.1f;j++){2f=21.2z(2f,4m[j].1f)}c 1k="";c 7h=1S;3h(2f>0&&1S-1){F=1;H=3j;8t{c 5R=b.30(B,F-1);k(H<=5R){N}F++;H-=5R}3h(1d)}c h=x A(B,F-1,H);k(h.Q()!=B||h.X()+1!=F||h.S()!=H){3K"5H h"}r h},8s:"3k-4U-3J",8r:"D, 3J M 3k",8q:"3k-4U-3J",8p:"D, d M y",8o:"4g, 3J-M-y",8n:"D, d M y",8m:"D, d M 3k",8l:"D, d M 3k",8k:"D, d M y",8j:"@",8i:"3k-4U-3J",1Y:p(18,h,z){k(!h){r""}c 1z=(z?z.1z:t)||b.1D.1z;c 1v=(z?z.1v:t)||b.1D.1v;c 1Z=(z?z.1Z:t)||b.1D.1Z;c 1n=(z?z.1n:t)||b.1D.1n;c 1M=p(1o){c 1C=(U+1<18.1f&&18.1b(U+1)==1o);k(1C){U++}r 1C};c 4R=p(1o,K,7g){c 2u=""+K;k(1M(1o)){3h(2u.1f<7g){2u="0"+2u}}r 2u};c 5Q=p(1o,K,4S,4T){r(1M(1o)?4T[K]:4S[K])};c 1R="";c 1L=E;k(h){1l(c U=0;U<18.1f;U++){k(1L){k(18.1b(U)=="\'"&&!1M("\'")){1L=E}P{1R+=18.1b(U)}}P{4k(18.1b(U)){C"d":1R+=4R("d",h.S(),2);N;C"D":1R+=5Q("D",h.3A(),1z,1v);N;C"o":c 3j=h.S();1l(c m=h.X()-1;m>=0;m--){3j+=b.30(h.Q(),m)}1R+=4R("o",3j,3);N;C"m":1R+=4R("m",h.X()+1,2);N;C"M":1R+=5Q("M",h.X(),1Z,1n);N;C"y":1R+=(1M("y")?h.Q():(h.7f()%2Z<10?"0":"")+h.7f()%2Z);N;C"@":1R+=h.2b();N;C"\'":k(1M("\'")){1R+="\'"}P{1L=1d}N;4l:1R+=18.1b(U)}}}}r 1R},7e:p(18){c 2t="";c 1L=E;1l(c U=0;U<18.1f;U++){k(1L){k(18.1b(U)=="\'"&&!1M("\'")){1L=E}P{2t+=18.1b(U)}}P{4k(18.1b(U)){C"d":C"m":C"y":C"@":2t+="8h";N;C"D":C"M":r t;C"\'":k(1M("\'")){2t+="\'"}P{1L=1d}N;4l:2t+=18.1b(U)}}}r 2t},l:p(8,1k){r 8.z[1k]!==5f?8.z[1k]:b.1D[1k]},5P:p(8){c 2X=b.l(8,"2X");c 2O=8.q?8.q.3i().6F(b.l(8,"4j")):t;8.1Q=8.24=8.19=t;c h=2e=b.5K(8);k(2O.1f>0){c z=b.1P(8);k(2O.1f>1){h=b.5N(2X,2O[1],z)||2e;8.1Q=h.S();8.24=h.X();8.19=h.Q()}5O{h=b.5N(2X,2O[0],z)||2e}5M(e){b.5L(e);h=2e}}8.1u=h.S();8.G=8.1m=h.X();8.J=8.1q=h.Q();8.1h=(2O[0]?h.S():0);8.1t=(2O[0]?h.X():0);8.1p=(2O[0]?h.Q():0);b.4z(8)},5K:p(8){c h=b.42(b.l(8,"2e"),x A());c R=b.2m(8,"2n",1d);c T=b.2m(8,"2z");h=(R&&hT?T:h);r h},42:p(h,2e){c 7b=p(L){c h=x A();h.6R(h.6Q()+L);r h};c 7c=p(L,5J){c h=x A();c B=h.Q();c F=h.X();c H=h.S();c 5I=/([+-]?[0-9]+)\\s*(d|D|w|W|m|M|y|Y)?/g;c 1C=5I.7d(L);3h(1C){4k(1C[2]||"d"){C"d":C"D":H+=1G(1C[1],10);N;C"w":C"W":H+=1G(1C[1],10)*7;N;C"m":C"M":F+=1G(1C[1],10);H=21.2n(H,5J(B,F));N;C"y":C"Y":B+=1G(1C[1],10);H=21.2n(H,5J(B,F));N}1C=5I.7d(L)}r x A(B,F,H)};h=(h==t?2e:(1X h=="41"?7c(h,b.30):(1X h=="5i"?(8g(h)?2e:7b(h)):h)));r(h&&h.5e()=="5H A"?2e:h)},5G:p(8,h,23){c 2B=!(h);c 7a=8.1m;c 79=8.1q;h=b.42(h,x A());8.1u=8.1h=h.S();8.G=8.1m=8.1t=h.X();8.J=8.1q=8.1p=h.Q();k(b.l(8,"1K")){k(23){23=b.42(23,t);8.1Q=23.S();8.24=23.X();8.19=23.Q()}P{8.1Q=8.1h;8.24=8.1t;8.19=8.1p}}k(7a!=8.1m||79!=8.1q){b.43(8)}b.4z(8);k(8.q){8.q.3i(2B?"":b.2Y(8)+(!b.l(8,"1K")?"":b.l(8,"4j")+b.2Y(8,8.1Q,8.24,8.19)))}},5F:p(8){c 4Q=(!8.1p||(8.q&&8.q.3i()=="")?t:x A(8.1p,8.1t,8.1h));k(b.l(8,"1K")){r[8.1g||4Q,(!8.19?8.1g||4Q:x A(8.19,8.24,8.1Q))]}P{r 4Q}},78:p(8){c 2G=x A();2G=x A(2G.Q(),2G.X(),2G.S());c 15=b.l(8,"15");c Z=b.l(8,"Z")||"q;";c 1I=b.l(8,"1I");c 2B=(b.l(8,"5E")?"":\'"+b.l(8,"76")+"");c 5t=\'\'+(1I?"":2B)+\'"+b.l(8,"74")+""+(1I?2B:"")+"";c 3I=b.l(8,"3I");c 47=b.l(8,"47");c 4h=b.l(8,"4h");c 2I=b.l(8,"2I");c 3g=b.l(8,"3g");c 1i=b.3z(8);c 4P=b.l(8,"4P");c 2r=b.l(8,"2r");c 2q=b.l(8,"2q");c 6T=(1i[0]!=1||1i[1]!=1);c 4H=(!8.1h?x A(8d,9,9):x A(8.1p,8.1t,8.1h));c R=b.2m(8,"2n",1d);c T=b.2m(8,"2z");c G=8.G-4P;c J=8.J;k(G<0){G+=12;J--}k(T){c 4i=x A(T.Q(),T.X()-1i[1]+1,T.S());4i=(R&&4i4i){G--;k(G<0){G=11;J--}}}c 2M=b.l(8,"2M");2M=(!2I?2M:b.1Y(2M,x A(J,G-2r,1),b.1P(8)));c 2N=(3g?b.l(8,"2N"):"");2N=(!2I?2N:b.1Y(2N,x A(J,G-2q,1),b.1P(8)));c 4N=\'\'+(b.5h(8,-1,J,G)?(3g?""+2N+"":"")+""+2M+"":(4h?"":"<2J>"+2N+"<2J>"+2M+""))+"";c 2L=b.l(8,"2L");2L=(!2I?2L:b.1Y(2L,x A(J,G+2r,1),b.1P(8)));c 2K=(3g?b.l(8,"2K"):"");2K=(!2I?2K:b.1Y(2K,x A(J,G+2q,1),b.1P(8)));c 3H=\'\'+(b.5h(8,+1,J,G)?""+2L+""+(3g?""+2K+"":""):(4h?"":"<2J>"+2L+"<2J>"+2K+""))+"";c 3f=b.l(8,"3f");c 5A=(b.l(8,"5C")&&8.1h?4H:2G);3f=(!2I?3f:b.1Y(3f,5A,b.1P(8)));c V=(3I?\'\'+3I+"":"")+(47&&!8.1c?5t:"")+\'\'+(1I?3H:4N)+(b.5g(8,5A)?\'"+3f+"":"")+(1I?4N:3H)+"";c 1B=b.l(8,"1B");c 4f=b.l(8,"4f");c 1v=b.l(8,"1v");c 1z=b.l(8,"1z");c 4K=b.l(8,"4K");c 1n=b.l(8,"1n");c 4c=b.l(8,"4c");c 3D=b.l(8,"3D");c 2C=b.l(8,"2C");c 4e=b.l(8,"4e");c 4I=b.l(8,"4I")||b.4M;c 4d=b.l(8,"4d");c 2d=(15?b.l(8,"4L")||Z:"");c 3d=b.l(8,"6Y")||b.3d;c 23=8.1Q?x A(8.19,8.24,8.1Q):4H;1l(c 3e=0;3e<1i[0];3e++){1l(c 3G=0;3G<1i[1];3G++){c 3B=x A(J,G,8.1u);V+=\'\'+b.6M(8,G,J,R,T,3B,3e>0||3G>0,15,Z,1n)+\'<6O 16="v-f" 8a="0" 89="0"><6U><4E 16="v-f-4b-3e">\'+(4e?"<1A"+b.1H(15,8.u,4d,Z)+">"+b.l(8,"6X")+"":"");1l(c 2p=0;2p<7;2p++){c H=(2p+1B)%7;c 4L=(2d.6W("4g")>-1?2d.5y(/4g/,1v[H]):2d.5y(/D/,1z[H]));V+="<1A"+((2p+1B+6)%7>=5?\' 16="v-f-2F-3F-3c"\':"")+">"+(!4f?"<2H":"\'+4K[H]+(4f?"":"")+""}V+="<6P>";c 5x=b.30(J,G);k(J==8.1q&&G==8.1m){8.1u=21.2n(8.1u,5x)}c 4J=(b.6y(J,G)-1B+7)%7;c 48=x A(J,G,1-4J);c 3C=x A(J,G,1-4J);c 1w=3C;c 6S=(6T?6:21.88((4J+5x)/7));1l(c 5w=0;5w<6S;5w++){V+=\'<4E 16="v-f-3E-3e">\'+(4e?\'<1A 16="v-f-2F-3G"\'+b.1H(15,8.u,4d,Z)+">"+4I(1w)+"":"");1l(c 2p=0;2p<7;2p++){c 4a=(4c?4c.2k((8.q?8.q[0]:t),[1w]):[1d,""]);c 2D=(1w.X()!=G);c 49=2D||!4a[0]||(R&&1wT);V+=\'<1A 16="v-f-3E-3c\'+((2p+1B+6)%7>=5?" v-f-2F-3F-3c":"")+(2D?" v-f-87-F":"")+(1w.2b()==3B.2b()&&G==8.1m?" v-f-3E-3c-2E":"")+(49?" "+b.5v:"")+(2D&&!2C?"":" "+4a[1]+(1w.2b()>=4H.2b()&&1w.2b()<=23.2b()?" "+b.4G:"")+(1w.2b()==2G.2b()?" v-f-2G":""))+\'"\'+((!2D||2C)&&4a[2]?\' 4b="\'+4a[2]+\'"\':"")+(49?(3D?" 5m=\\"17(b).4F().2o(\'v-f-2F-2E\');\\" 5k=\\"17(b).4F().3b(\'v-f-2F-2E\');\\"":""):" 5m=\\"17(b).2o(\'v-f-3E-3c-2E\')"+(3D?".4F().2o(\'v-f-2F-2E\')":"")+";"+(!15||(2D&&!2C)?"":"17(\'#v-f-2d-"+8.u+"\').V(\'"+(3d.2k((8.q?8.q[0]:t),[1w,8])||Z)+"\');")+"\\" 5k=\\"17(b).3b(\'v-f-3E-3c-2E\')"+(3D?".4F().3b(\'v-f-2F-2E\')":"")+";"+(!15||(2D&&!2C)?"":"17(\'#v-f-2d-"+8.u+"\').V(\'"+Z+"\');")+\'" 22="17.f.5u(\\\'#\'+8.u+"\',"+G+","+J+\', b);"\')+">"+(2D?(2C?1w.S():"q;"):(49?1w.S():""+1w.S()+""))+"";48.4y(48.S()+1);3C.6R(3C.6Q()+1);1w=(48>3C?48:3C)}V+=""}G++;k(G>11){G=0;J++}V+=""}}V+=(15?\'\'+Z+"":"")+(!47&&!8.1c?5t:"")+\'\'+($.2c.4C&&1G($.2c.6N,10)<7&&!8.1c?\'<4B 5s="86:E;" 16="v-f-5r">\':"");r V},6M:p(8,G,J,R,T,3B,5p,15,Z,1n){R=(8.1g&&R&&3B\';c 31="";k(5p||!b.l(8,"6L")){31+=1n[G]+"q;"}P{c 6J=(R&&R.Q()==J);c 6I=(T&&T.Q()==J);31+=\'<3a 16="v-f-x-F" 6E="17.f.5o(\\\'#\'+8.u+"\', b, \'M\');\\" 22=\\"17.f.5n(\'#"+8.u+"\');\\""+b.1H(15,8.u,b.l(8,"6K"),Z)+">";1l(c F=0;F<12;F++){k((!6J||F>=R.X())&&(!6I||F<=T.X())){31+=\'<4A K="\'+F+\'"\'+(F==G?\' 45="45"\':"")+">"+1n[F]+""}}31+=""}k(!44){V+=31}k(5p||!b.l(8,"6H")){V+=J}P{c 2A=b.l(8,"6G").6F(":");c B=0;c 19=0;k(2A.1f!=2){B=J-10;19=J+10}P{k(2A[0].1b(0)=="+"||2A[0].1b(0)=="-"){B=19=x A().Q();B+=1G(2A[0],10);19+=1G(2A[1],10)}P{B=1G(2A[0],10);19=1G(2A[1],10)}}B=(R?21.2z(B,R.Q()):B);19=(T?21.2n(19,T.Q()):19);V+=\'<3a 16="v-f-x-B" 6E="17.f.5o(\\\'#\'+8.u+"\', b, \'Y\');\\" 22=\\"17.f.5n(\'#"+8.u+"\');\\""+b.1H(15,8.u,b.l(8,"6D"),Z)+">";1l(;B<=19;B++){V+=\'<4A K="\'+B+\'"\'+(B==J?\' 45="45"\':"")+">"+B+""}V+=""}k(44){V+=31}V+="";r V},1H:p(15,u,5l,Z){r(15?" 5m=\\"17(\'#v-f-2d-"+u+"\').V(\'"+(5l||Z)+"\');\\" 5k=\\"17(\'#v-f-2d-"+u+"\').V(\'"+Z+"\');\\"":"")},4z:p(8,L,20){c B=8.J+(20=="Y"?L:0);c F=8.G+(20=="M"?L:0);c H=21.2n(8.1u,b.30(B,F))+(20=="D"?L:0);c h=x A(B,F,H);c R=b.2m(8,"2n",1d);c T=b.2m(8,"2z");h=(R&&hT?T:h);8.1u=h.S();8.G=8.1m=h.X();8.J=8.1q=h.Q();k(20=="M"||20=="Y"){b.43(8)}},43:p(8){c 5j=b.l(8,"6C");k(5j){5j.2k((8.q?8.q[0]:t),[8.1q,8.1m+1,8])}},3z:p(8){c 1i=b.l(8,"6B");r(1i==t?[1,1]:(1X 1i=="5i"?[1,1i]:1i))},2m:p(8,6A,6z){c h=b.42(b.l(8,6A+"A"),t);k(h){h.84(0);h.83(0);h.82(0);h.81(0)}r(!6z||!8.1g?h:(!h||8.1g>h?8.1g:h))},30:p(B,F){r 32-x A(B,F,32).S()},6y:p(B,F){r x A(B,F,1).3A()},5h:p(8,L,6x,6w){c 1i=b.3z(8);c h=x A(6x,6w+(L<0?L:1i[1]),1);k(L<0){h.4y(b.30(h.Q(),h.X()))}r b.5g(8,h)},5g:p(8,h){c 3y=(!8.1g?t:x A(8.1q,8.1m,8.1u));3y=(3y&&8.1g<3y?8.1g:3y);c R=3y||b.2m(8,"2n");c T=b.2m(8,"2z");r((!R||h>=R)&&(!T||h<=T))},1P:p(8){c 1F=b.l(8,"1F");1F=(1X 1F!="41"?1F:x A().Q()%2Z+1G(1F,10));r{1F:1F,1z:b.l(8,"1z"),1v:b.l(8,"1v"),1Z:b.l(8,"1Z"),1n:b.l(8,"1n")}},2Y:p(8,H,F,B){k(!H){8.1h=8.1u;8.1t=8.1m;8.1p=8.1q}c h=(H?(1X H=="4w"?H:x A(B,F,H)):x A(8.1p,8.1t,8.1h));r b.1Y(b.l(8,"2X"),h,b.1P(8))}});p 3x(n,3w){$.4x(n,3w);1l(c 1k 6v 3w){k(3w[1k]==t||3w[1k]==5f){n[1k]=3w[1k]}}r n}p 6u(a){r(a&&(($.2c.80&&1X a=="4w"&&a.1f)||(a.6t&&a.6t.5e().1o(/\\6r\\(\\)/))))}$.7Z.f=p(2j){k(!$.f.5b){$(1e.2l).3v($.f.O).7Y($.f.6s);$.f.5b=1d}c 5c=6r.6q.7X.7W(5d,1);k(1X 2j=="41"&&(2j=="7V"||2j=="S")){r $.f["6p"+2j+"3Z"].2k($.f,[b[0]].6o(5c))}r b.3u(p(){1X 2j=="41"?$.f["6p"+2j+"3Z"].2k($.f,[b].6o(5c)):$.f.6n(b,2j)})};$.f=x 3Z();$.f.5b=E;$.f.5a=x A().2b()})(17)',62,636,'||||||||inst|||this|var|||datepicker||date|||if|_get||target||function|input|return||null|id|ui||new||settings|Date|year|case||false|month|drawMonth|day|div|drawYear|value|offset||break|dpDiv|else|getFullYear|minDate|getDate|maxDate|iFormat|html||getMonth||initStatus||||||showStatus|class|jQuery|format|endYear|nodeName|charAt|inline|true|document|length|rangeStart|currentDay|numMonths|duration|name|for|selectedMonth|monthNames|match|currentYear|selectedYear|_getInst|ctrlKey|currentMonth|selectedDay|dayNames|printDate|top|isFixed|dayNamesShort|td|firstDay|matches|_defaults|width|shortYearCutoff|parseInt|_addStatus|isRTL|_adjustDate|rangeSelect|literal|lookAhead|left|_pos|_getFormatConfig|endDay|output|iValue|position|dateStr|showAnim|documentElement|typeof|formatDate|monthNamesShort|period|Math|onclick|endDate|endMonth|checkDate|_updateDatepicker|||markerClassName|css|getTime|browser|status|defaultDate|size|_dialogInput|height|handled|options|apply|body|_getMinMaxDate|min|addClass|dow|stepBigMonths|stepMonths|_hideDatepicker|chars|num|stayOpen|_triggerClass|pos|_disabledInputs|max|years|clear|showOtherMonths|otherMonth|over|week|today|span|navigationAsDateFormat|label|nextBigText|nextText|prevText|prevBigText|dates|focus|onSelect|hasClass|_inDialog|PROP_NAME|px|key|buttonText|dateFormat|_formatDate|100|_getDaysInMonth|monthHtml|||||||||select|removeClass|cell|dateStatus|row|currentText|showBigPrevNext|while|val|doy|yy|_datepickerShowing|postProcess|data|obj|scrollY|scrollX|showOn|the|Show|each|append|props|extendRemove|newMinDate|_getNumberOfMonths|getDay|selectedDate|utcDate|highlightWeek|days|end|col|next|prompt|dd|throw|getNumber|firstMon|altFormat|_lastInput|event|_curInst|remove|scrollTop|scrollLeft|_showDatepicker|siblings|button|buttonImage|inlineSettings|Datepicker||string|_determineDate|_notifyChange|showMonthAfterYear|selected|style|closeAtTop|tzDate|unselectable|daySettings|title|beforeShowDay|weekStatus|showWeeks|changeFirstDay|DD|hideIfNoPrevNext|maxDraw|rangeSeparator|switch|default|names|altField|trigger|blockUI|onClose|type|beforeShow|toLowerCase|disabled|appendText|object|extend|setDate|_adjustInstDate|option|iframe|msie|both|tr|parent|_currentClass|currentDate|calculateWeek|leadDays|dayNamesMin|dayStatus|iso8601Week|prev|current|showCurrentAtPos|startDate|formatNumber|shortNames|longNames|mm|checkLiteral|_selectDate|_selectingMonthYear|unbind|absolute|effects|browserHeight|browserWidth|window|_doKeyDown|relOffset|img|bind|attrValue|attrName|uuid|initialized|otherArgs|arguments|toString|undefined|_isInRange|_canAdjustMonth|number|onChange|onmouseout|text|onmouseover|_clickMonthYear|_selectMonthYear|secondary|xa0|cover|src|controls|_selectDay|_unselectableClass|dRow|daysInMonth|replace|_gotoToday|gotoDate|_promptClass|gotoCurrent|_clearDate|mandatory|_getDate|_setDate|Invalid|pattern|getDaysInMonth|_getDefaultDate|log|catch|parseDate|try|_setDateFromField|formatName|dim|getName|at|origSize|_updateAlternate|_mainDivId|parents|_dialogClass|_tidyDialog||hide|showOptions|hidden|_findPos|opera|clientHeight|clientWidth|dims|show|display|chr|keyCode|_doKeyPress|_disableClass|_inlineClass|keydown|_appendClass|_newInst|divSpan|regional|x3e|x3c|_attachDatepicker|concat|_|prototype|Array|_checkExternalClick|constructor|isArray|in|curMonth|curYear|_getFirstDayOfMonth|checkRange|minMax|numberOfMonths|onChangeMonthYear|yearStatus|onchange|split|yearRange|changeYear|inMaxYear|inMinYear|monthStatus|changeMonth|_generateMonthYearHeader|version|table|tbody|getUTCDate|setUTCDate|numRows|isMultiMonth|thead|_changeFirstDay|indexOf|weekHeader|statusForDate|currentStatus|nextBigStatus|nextStatus|prevStatus|prevBigStatus|closeText|closeStatus|clearText|clearStatus|_generateHTML|origYear|origMonth|offsetNumeric|offsetString|exec|_possibleChars|getYear|len|iInit|Missing|change|Year|Month|100px|innerHeight|innerWidth|_checkOffset|Class|add|empty|none|fixed|_isDisabledDatepicker|charCode|err|map|children|cursor|opacity|keypress|dateText|_dialogInst|dp|getData|setData|_inlineDatepicker|after|before|alt|attr|buttonImageOnly|_connectDatepicker|debug|Select|different|May|previous|Close|isDisabled|call|slice|mousedown|fn|safari|setMilliseconds|setSeconds|setMinutes|setHours|header|javascript|other|ceil|cellspacing|cellpadding|one|links|9999|close|control|isNaN|0123456789|W3C|TIMESTAMP|RSS|RFC_2822|RFC_1123|RFC_1036|RFC_850|RFC_822|ISO_8601|COOKIE|ATOM|do|Unexpected|Unknown|86400000|floor|getTimezoneOffset|noWeekends|selectedIndex|draw|unblockUI|fadeOut|fadeIn|slideUp|slideDown|nextSibling|nodeType|rtl|multi|find|static|offsetWidth|1000px|block|offsetHeight|parentNode|fromCharCode|String|stopPropagation|preventDefault|_getDateDatepicker|_setDateDatepicker|_refreshDatepicker|_changeDatepicker|instance|transparent|color|background|prepend|relative|_disableDatepicker|_enableDatepicker|removeData|_destroyDatepicker|150|pageY|pageX|_dialogDatepicker|_inlineShow|click|eval|getAttribute|setDefaults|console|hasDatepicker|normal|first|as|Set|Sa|Fr|Th|We|Tu|Mo|Su|Sat|Fri|Thu|Wed|Tue|Mon|Sun|Saturday|Friday|Thursday|Wednesday|Tuesday|Monday|Sunday|of|Week|Wk|Dec|Nov|Oct|Sep|Aug|Jul|Jun|Apr|Mar|Feb|Jan|December|November|October|September|August|July|June|April|March|February|January|Today|Next|Prev|without|Erase|Clear|dialog'.split('|'),0,{})) - diff --git a/trunk/views/default/event_calendar/agenda_footer.php b/trunk/views/default/event_calendar/agenda_footer.php deleted file mode 100644 index 8749ebe08..000000000 --- a/trunk/views/default/event_calendar/agenda_footer.php +++ /dev/null @@ -1,5 +0,0 @@ -'; - -?> \ No newline at end of file diff --git a/trunk/views/default/event_calendar/agenda_header.php b/trunk/views/default/event_calendar/agenda_header.php deleted file mode 100644 index 712dbed8d..000000000 --- a/trunk/views/default/event_calendar/agenda_header.php +++ /dev/null @@ -1,12 +0,0 @@ -'; -$header .= '
'.$vars['date'].'
'; -$header .= ''; -$header .= ''; -$header .= ''; -$header .= ''; -$header .= ''; - -echo $header; -?> \ No newline at end of file diff --git a/trunk/views/default/event_calendar/agenda_item_view.php b/trunk/views/default/event_calendar/agenda_item_view.php deleted file mode 100644 index 727b559ec..000000000 --- a/trunk/views/default/event_calendar/agenda_item_view.php +++ /dev/null @@ -1,26 +0,0 @@ -start_time)) { - $time_bit = event_calendar_convert_time($event->start_time); - } - if (is_numeric($event->end_time)) { - $time_bit .= " - ".event_calendar_convert_time($event->end_time); - } - $time_bit .= ' '; -} -$info = ''; -$info .= ''; -$info .= ''; -$info .= ''; -$info .= ''; -if (trim($event->description)) { - $info .= ''; - $info .= ''; - $info .= ''; -} - -echo $info; -?> \ No newline at end of file diff --git a/trunk/views/default/event_calendar/agenda_view.php b/trunk/views/default/event_calendar/agenda_view.php deleted file mode 100644 index bb693def0..000000000 --- a/trunk/views/default/event_calendar/agenda_view.php +++ /dev/null @@ -1,34 +0,0 @@ - $_SERVER['REQUEST_URI'], - 'baseurl' => $_SERVER['SCRIPT_NAME'].'/?'.$_SERVER['QUERY_STRING'], - 'offset' => $vars['offset'], - 'count' => $vars['count'], - 'limit' => $vars['limit'], - - )); -$event_calendar_times = get_plugin_setting('times', 'event_calendar'); -$events = $vars['events']; -$html = ''; -$date_format = 'j M Y'; -$current_date = ''; -if ($events) { - foreach($events as $event) { - $date = date($date_format,$event->start_date); - if ($date != $current_date) { - if ($html) { - $html .= elgg_view('event_calendar/agenda_footer'); - } - $html .= elgg_view('event_calendar/agenda_header',array('date'=>$date)); - - $current_date = $date; - } - $html .= elgg_view('event_calendar/agenda_item_view',array('event'=>$event,'times'=>$event_calendar_times)); - } - $html .= elgg_view('event_calendar/agenda_footer'); -} -$html = $nav.'
'.$html.'
'.$nav; - -echo $html; -?> \ No newline at end of file diff --git a/trunk/views/default/event_calendar/calendar.php b/trunk/views/default/event_calendar/calendar.php deleted file mode 100644 index ebf4aa589..000000000 --- a/trunk/views/default/event_calendar/calendar.php +++ /dev/null @@ -1,61 +0,0 @@ - 'my_datepicker', - 'mode' => $vars['mode']?$vars['mode']:'month', - 'start_date' => $vars['start_date'], - 'end_date' => $vars['end_date'], - 'group_guid' => $vars['group_guid'], - 'range_bit' => $range_bit, - ) -); -$body .= '
'; -$body .= ''; -$body .= '
'; -echo $body; -?> \ No newline at end of file diff --git a/trunk/views/default/event_calendar/css.php b/trunk/views/default/event_calendar/css.php deleted file mode 100644 index 359fd1e13..000000000 --- a/trunk/views/default/event_calendar/css.php +++ /dev/null @@ -1,150 +0,0 @@ - - -/* hide Today as it is not working as expected */ -.ui-datepicker-current { visibility:hidden } - -div#calendarmenucontainer { - position: relative; -} - -ul#calendarmenu { - list-style: none; - position: absolute; - top: 0px; - left: -15px; -} - -ul#calendarmenu li { - float: left; - border-top: 1px solid #969696; - border-left: 1px solid #969696; - border-bottom: 1px solid #969696; - background-color: ; -} - - -ul#calendarmenu li.sys_calmenu_last { - border-right: 1px solid #969696; -} - -ul#calendarmenu li a { - text-decoration: none; - padding: 4px 12px; - float: left; -} - -ul#calendarmenu li a:hover, ul#calendarmenu li.sys_selected a{ - text-decoration: none; - padding: 4px 12px; - float: left; - color: #FFFFFF; - background: ; -} - -td.ui-datepicker-unselectable { - background-color: #FFFFFF !important; - color: #888888 !important; -} - -.river_object_event_calendar_create { - background: url(mod/event_calendar/images/river_icon_event.gif) no-repeat left -1px; -} -.river_object_event_calendar_update { - background: url(mod/event_calendar/images/river_icon_event.gif) no-repeat left -1px; -} -#event_list { - width:440px; - margin:0; - float:left; - padding:5px 0 0 0; -} -#event_list .search_listing { - border:2px solid #cccccc; - margin:0 0 5px 0; -} - -.events { - min-height: 300px; -} - -div.event_calendar_agenda_date_section { - margin-bottom: 10px; -} - -.event_calendar_agenda_date { - font-size: 1.3em; - font-weight: bold; - margin-bottom: 3px; -} - -th.agenda_header { - font-weight: bold; -} - -td.event_calendar_agenda_time { - width: 120px; -} - -.event_calendar_agenda_title a { - font-weight: bold; -} - -td.event_calendar_agenda_title { - width: 180px; -} - -.event_calendar_agenda_venue { - margin-bottom: 5px; -} - -.event_calendar_paged_month { - font-size: 1.3em; - font-weight: bold; - margin-bottom: 5px; - text-transform:uppercase; -} - -td.event_calendar_paged_date { - width: 80px; -} -td.event_calendar_paged_time { - width: 60px; -} -td.event_calendar_paged_title { - width: 280px; -} - -table.event_calendar_paged_table { - width:100%; - border-collapse:collapse; - border-bottom-width:1px; - border-bottom-style:solid; - border-bottom-color:#bfbfbf; - margin-bottom: 5px; -} - -table.event_calendar_paged_table td { - border-width:1px 0 0 0; - border-style:solid; - border-color:#bfbfbf; -} - -table.event_calendar_paged_table th { - font-family:verdana, helvetica, arial, sans-serif; - font-size:9pt; - color:#183e76; - background-color:#ececec; - font-weight:bold; - text-transform:none; - padding:3px 3px 3px 3px; -} - -.event_calendar_strapline { - font-size: 85%; -} \ No newline at end of file diff --git a/trunk/views/default/event_calendar/entities/entity_list.php b/trunk/views/default/event_calendar/entities/entity_list.php deleted file mode 100644 index 84c2c0b7d..000000000 --- a/trunk/views/default/event_calendar/entities/entity_list.php +++ /dev/null @@ -1,66 +0,0 @@ - - * @link http://elgg.com/ - * - */ - -$context = $vars['context']; -$offset = $vars['offset']; -$entities = $vars['entities']; -$limit = $vars['limit']; -$count = $vars['count']; -$baseurl = $vars['baseurl']; -$context = $vars['context']; -$viewtype = $vars['viewtype']; -$pagination = $vars['pagination']; -$fullview = $vars['fullview']; - -$html = ""; -$nav = ""; - -if (isset($vars['viewtypetoggle'])) { - $viewtypetoggle = $vars['viewtypetoggle']; -} else { - $viewtypetoggle = true; -} - -if ($context == "search" && $count > 0 && $viewtypetoggle) { - $nav .= elgg_view('navigation/viewtype', array( - 'baseurl' => $baseurl, - 'offset' => $offset, - 'count' => $count, - 'viewtype' => $viewtype, - )); -} - -if ($pagination) { - $nav .= elgg_view('navigation/pagination',array( - 'baseurl' => $baseurl, - 'offset' => $offset, - 'count' => $count, - 'limit' => $limit, - )); -} - -$html .= $nav; -if ($viewtype == 'list') { - if (is_array($entities) && sizeof($entities) > 0) { - foreach($entities as $entity) { - $html .= elgg_view_entity($entity, $fullview); - } - } -} else { - if (is_array($entities) && sizeof($entities) > 0) { - $html .= elgg_view('event_calendar/entities/gallery', array('entities' => $entities)); - } -} - -if ($count) { - $html .= $nav; -} - -echo $html; \ No newline at end of file diff --git a/trunk/views/default/event_calendar/entities/gallery.php b/trunk/views/default/event_calendar/entities/gallery.php deleted file mode 100644 index a12dfa84a..000000000 --- a/trunk/views/default/event_calendar/entities/gallery.php +++ /dev/null @@ -1,44 +0,0 @@ - 0) { - -?> - -
'.elgg_echo('event_calendar:agenda:column:time').''.elgg_echo('event_calendar:agenda:column:session').''.elgg_echo('event_calendar:agenda:column:venue').'
'.$time_bit.''.$event->title.''.$event->venue.'
 '.$event->description.'
- -"; - - } - echo ""; - $col++; - if ($col > 3) { - echo ""; - $col = 0; - } - } - if ($col > 0) echo ""; - -?> - - - - - * @copyright Curverider Ltd 2008-2010 - * @link http://elgg.com/ - * - * @uses $vars['entity'] The user entity - */ - -$icon = elgg_view( - "profile/icon", array( - 'entity' => $vars['entity'], - 'size' => 'medium', - ) - ); - -$banned = $vars['entity']->isBanned(); - -$rel = ""; -if (page_owner() == $vars['entity']->guid) - $rel = 'me'; -else if (check_entity_relationship(page_owner(), 'friend', $vars['entity']->guid)) - $rel = 'friend'; - -if (!$banned) - $info .= "

getUrl() . "\" rel=\"$rel\">" . $vars['entity']->name . "

"; -else - $info .= "

" . $vars['entity']->name . "
".elgg_echo('profile:banned')."

"; - -// TODO: look into a way to pass $authorised and $event_id in $vars -$authorised = FALSE; -$event_id = get_input('event_id', 0); -if ($event_id) { - if(isadminloggedin()) { - $authorised = TRUE; - } else { - // load the event from the database - $event = get_entity($event_id); - $user_id = get_loggedin_userid(); - if ($event && ($event->owner_guid == $user_id)) { - $authorised = TRUE; - } - } -} - -if ($authorised) { - $link = '

guid.'); return false;" '; - $link .= ' >'; - $link .= ''.elgg_echo('event_calendar:remove_from_the_calendar').''; - $link .= '

'; - $info .= $link; -} - -// echo elgg_view_listing($icon, $info); -echo elgg_view('search/gallery_listing',array('icon' => $icon, 'info' => $info)); - -?> \ No newline at end of file diff --git a/trunk/views/default/event_calendar/forms/add_to_group.php b/trunk/views/default/event_calendar/forms/add_to_group.php deleted file mode 100644 index fc77495e1..000000000 --- a/trunk/views/default/event_calendar/forms/add_to_group.php +++ /dev/null @@ -1,64 +0,0 @@ -guid; -$event_container = $vars['event']->container_guid; - -// get the list of all groups: - -if (isadminloggedin()) { - $groups = get_entities("group","",0,"",5000); -} else { - $groups = get_entities("group","",get_loggedin_userid(),"",5000); -} - -// split the group list into two lists - -$add_options = array(); -$remove_options = array(); -$remove_group = get_entities_from_relationship("display_on_group",$event_id,FALSE,"","",0,"",5000); -$remove_group_ids = array(); -foreach ($remove_group as $group) { - $remove_group_ids[] = $group->guid; - if ($group->guid != $event_container && $group->canEdit()) { - $remove_options[$group->guid] = $group->name; - } -} - -if ($remove_group) { - foreach($groups as $group) { - if (($group->guid != $event_container) && !in_array($group->guid,$remove_group_ids)) { - $add_options[$group->guid] = $group->name; - } - } -} else { - foreach($groups as $group) { - if ($group->guid != $event_container && $group->canEdit()) { - $add_options[$group->guid] = $group->name; - } - } -} - -if ($add_options || $remove_options) { - echo '
'; - $event_bit = elgg_view('input/hidden', array("internalname" => "event_id","value" => $event_id)); - if ($add_options) { - echo "

".elgg_echo('event_calendar:add_to_group:add_group_title')."

"; - $add_pulldown = elgg_view("input/pulldown",array("internalname" => "group_id","options_values" => $add_options)); - $submit_button = "

".elgg_view("input/submit",array("value"=>elgg_echo('event_calendar:add_to_group:add_group_button')))."

"; - echo elgg_view ('input/form',array("body" => $event_bit.$add_pulldown.$submit_button,"action" => $vars['url']."action/event_calendar/add_to_group")); - } - - if ($remove_options) { - echo "

".elgg_echo('event_calendar:add_to_group:remove_group_title')."

"; - $remove_pulldown = elgg_view("input/pulldown",array("internalname" => "group_id","options_values" => $remove_options)); - $submit_button = "

".elgg_view("input/submit",array("value"=>elgg_echo('event_calendar:add_to_group:remove_group_button')))."

"; - echo elgg_view ('input/form',array("body" => $event_bit.$remove_pulldown.$submit_button,"action" => $vars['url']."action/event_calendar/remove_from_group")); - } - echo '
'; -} - -?> \ No newline at end of file diff --git a/trunk/views/default/event_calendar/forms/delete_confirm.php b/trunk/views/default/event_calendar/forms/delete_confirm.php deleted file mode 100644 index 37134e695..000000000 --- a/trunk/views/default/event_calendar/forms/delete_confirm.php +++ /dev/null @@ -1,13 +0,0 @@ -'.sprintf(elgg_echo('event_calendar:delete_confirm_description'),$vars['title']).'

'; - -$body .= '
'; -$body .= elgg_view('input/securitytoken'); -$body .= elgg_view('input/hidden',array('internalname'=>'event_action', 'value'=>'delete_event')); -$body .= elgg_view('input/hidden',array('internalname'=>'event_id', 'value'=>$vars['event_id'])); -$body .= elgg_view('input/submit', array('internalname'=>'submit','value'=>elgg_echo('event_calendar:submit'))); -$body .= '
'; - -echo elgg_view('page_elements/contentwrapper', array('body'=>$body)); -?> \ No newline at end of file diff --git a/trunk/views/default/event_calendar/forms/manage_event.php b/trunk/views/default/event_calendar/forms/manage_event.php deleted file mode 100644 index 35b9dba71..000000000 --- a/trunk/views/default/event_calendar/forms/manage_event.php +++ /dev/null @@ -1,22 +0,0 @@ - - * @copyright Radagast Solutions 2008 - * @link http://radagast.biz/ - * - */ - -extend_view('metatags','event_calendar/metatags'); - -$body = elgg_view('event_calendar/forms/manage_event_content',$vars); - -$body .= elgg_view('input/submit', array('internalname'=>'submit','value'=>elgg_echo('event_calendar:submit'))); -$form = elgg_view('input/form',array('action'=>$vars['url'].'action/event_calendar/manage','body'=>$body)); - -print elgg_view('page_elements/contentwrapper',array('body'=>$form)); -?> \ No newline at end of file diff --git a/trunk/views/default/event_calendar/forms/manage_event_content.php b/trunk/views/default/event_calendar/forms/manage_event_content.php deleted file mode 100644 index 59498e861..000000000 --- a/trunk/views/default/event_calendar/forms/manage_event_content.php +++ /dev/null @@ -1,254 +0,0 @@ -title; - $brief_description = $event->description; - $venue = $event->venue; - if ($event->form_data) { - // this is a form redisplay, so take the values as submitted - $start_date = $event->start_date; - $end_date = $event->end_date; - } else { - // the values are from the database, - // so convert - $start_date = date("l, F j, Y",$event->start_date); - if ($event->end_date) { - $end_date = date("l, F j, Y",$event->end_date); - } else { - $end_date = ''; - } - } - - if ($event_calendar_region_display) { - $region = $event->region; - if (!$region) { - $region = '-'; - } - } - - if ($event_calendar_spots_display) { - $spots = trim($event->spots); - } - if ($event_calendar_type_display) { - $event_type = $event->event_type; - if (!$event_type) { - $event_type = '-'; - } - } - $fees = $event->fees; - $contact = $event->contact; - $organiser = $event->organiser; - $event_tags = $event->event_tags; - $long_description = $event->long_description; - $access = $event->access_id; - if ($event_calendar_times == 'yes') { - $start_time = $event->start_time; - $end_time = $event->end_time; - } - $event_action = 'manage_event'; -} else { - $event_id = 0; - $title = ''; - $brief_description = ''; - $venue = ''; - $start_date = ''; - $end_date = ''; - $fees = ''; - if ($event_calendar_spots_display) { - $spots = ''; - } - if ($event_calendar_region_display) { - $region = '-'; - } - if ($event_calendar_type_display) { - $event_type = '-'; - } - $contact = ''; - $organiser = ''; - $event_tags = ''; - $long_description = ''; - $access = get_default_access(); - if ($event_calendar_times == 'yes') { - $start_time = ''; - $end_time = ''; - } - $event_action = 'add_event'; -} -$body = ''; - -$body .= elgg_view('input/hidden',array('internalname'=>'event_action', 'value'=>$event_action)); -$body .= elgg_view('input/hidden',array('internalname'=>'event_id', 'value'=>$event_id)); -$body .= elgg_view('input/hidden',array('internalname'=>'group_guid', 'value'=>$vars['group_guid'])); - -$body .= '

'; -$body .= '

'.$prefix['title'].elgg_echo('event_calendar:title_description').'

'; - -$body .= '

'; -$body .= '

'.$prefix['venue'].elgg_echo('event_calendar:venue_description').'

'; - -if ($event_calendar_times == 'yes') { - $body .= '


'; - $body .= elgg_view("input/timepicker",array('internalname' => 'start_time','value'=>$start_time)); - $body .= '

'; - $body .= '

'.$prefix['start_time'].elgg_echo('event_calendar:start_time_description').'

'; -} - -$body .= '

'; -$body .= '

'.$prefix['start_date'].elgg_echo('event_calendar:start_date_description').'

'; - -if ($event_calendar_hide_end != 'yes') { - if ($event_calendar_times == 'yes') { - $body .= '


'; - $body .= elgg_view("input/timepicker",array('internalname' => 'end_time','value'=>$end_time)); - $body .= '

'; - $body .= '

'.$prefix['end_time'].elgg_echo('event_calendar:end_time_description').'

'; - } - - $body .= '

'; - $body .= '

'.$prefix['end_date'].elgg_echo('event_calendar:end_date_description').'

'; -} - -if ($event_calendar_spots_display == 'yes') { - $body .= '

'; - $body .= '

'.$prefix['spots'].elgg_echo('event_calendar:spots_description').'

'; -} - -if ($event_calendar_add_users == 'yes') { - $body .= '



'; - $body .= '

'.elgg_echo('event_calendar:add_user_description').'

'; -} - -$body .= '

'; -$body .= '

'.$prefix['brief_description'].elgg_echo('event_calendar:brief_description_description').'

'; - -if ($event_calendar_region_display == 'yes') { - $region_list = trim(get_plugin_setting('region_list', 'event_calendar')); - $region_list_handles = get_plugin_setting('region_list_handles', 'event_calendar'); - // make sure that we are using Unix line endings - $region_list = str_replace("\r\n","\n",$region_list); - $region_list = str_replace("\r","\n",$region_list); - if ($region_list) { - $options = array(); - $options[] = '-'; - foreach(explode("\n",$region_list) as $region_item) { - $region_item = trim($region_item); - if ($region_list_handles == 'yes') { - $options[$region_item] = elgg_echo('event_calendar:region:'.$region_item); - } else { - $options[$region_item] = $region_item; - } - } - $body .= '

'; - $body .= '

'.$prefix['region'].elgg_echo('event_calendar:region_description').'

'; - } -} - -if ($event_calendar_type_display == 'yes') { - $type_list = trim(get_plugin_setting('type_list', 'event_calendar')); - $type_list_handles = get_plugin_setting('type_list_handles', 'event_calendar'); - // make sure that we are using Unix line endings - $type_list = str_replace("\r\n","\n",$type_list); - $type_list = str_replace("\r","\n",$type_list); - if ($type_list) { - $options = array(); - $options[] = '-'; - foreach(explode("\n",$type_list) as $type_item) { - $type_item = trim($type_item); - if ($type_list_handles == 'yes') { - $options[$type_item] = elgg_echo('event_calendar:type:'.$type_item); - } else { - $options[$type_item] = $type_item; - } - } - $body .= '

'; - $body .= '

'.$prefix['event_type'].elgg_echo('event_calendar:type_description').'

'; - } -} - -$body .= '

'; -$body .= '

'.$prefix['fees'].elgg_echo('event_calendar:fees_description').'

'; - -$body .= '

'; -$body .= '

'.$prefix['contact'].elgg_echo('event_calendar:contact_description').'

'; - -$body .= '

'; -$body .= '

'.$prefix['organiser'].elgg_echo('event_calendar:organiser_description').'

'; - -$body .= '

'; -$body .= '

'.$prefix['event_tags'].elgg_echo('event_calendar:event_tags_description').'

'; - -$body .= '

'; -$body .= '

'.$prefix['long_description'].elgg_echo('event_calendar:long_description_description').'

'; - -if($event_calendar_hide_access == 'yes') { - $event_calendar_default_access = get_plugin_setting('default_access', 'event_calendar'); - if($event_calendar_default_access) { - $body .= elgg_view("input/hidden",array('internalname' => 'access','value'=>$event_calendar_default_access)); - } else { - $body .= elgg_view("input/hidden",array('internalname' => 'access','value'=>ACCESS_PRIVATE)); - } -} else { - $body .= '

'; -} - -print $body; -?> \ No newline at end of file diff --git a/trunk/views/default/event_calendar/groupprofile_calendar.php b/trunk/views/default/event_calendar/groupprofile_calendar.php deleted file mode 100644 index 175098e0c..000000000 --- a/trunk/views/default/event_calendar/groupprofile_calendar.php +++ /dev/null @@ -1,42 +0,0 @@ - - * @copyright Radagast Solutions 2008 - * @link http://radagast.biz/ - * - */ - -$page_owner_entity = page_owner_entity(); - -if (event_calendar_activated_for_group($page_owner_entity)) { - $num = 5; - // Get the upcoming events - $start_date = time(); // now - $end_date = $start_date + 60*60*24*365*2; // maximum is two years from now - $events = event_calendar_get_events_between($start_date,$end_date,false,$num,0,page_owner()); - - // If there are any events to view, view them - if (is_array($events) && sizeof($events) > 0) { - - echo '
'; - echo '

'.elgg_echo("event_calendar:groupprofile").'

'; - foreach($events as $event) { - echo elgg_view("object/event_calendar",array('entity' => $event)); - } - echo ''; - echo "
"; - - } else if (get_plugin_setting('group_always_display', 'event_calendar') == 'yes') { - echo '
'; - echo '

'.elgg_echo("event_calendar:groupprofile").'

'; - echo '
'.elgg_echo('event_calendar:no_events_found').'
'; - echo "
"; - } -} - -?> \ No newline at end of file diff --git a/trunk/views/default/event_calendar/input/longtext.php b/trunk/views/default/event_calendar/input/longtext.php deleted file mode 100644 index 86b0f3fc4..000000000 --- a/trunk/views/default/event_calendar/input/longtext.php +++ /dev/null @@ -1,25 +0,0 @@ - - - \ No newline at end of file diff --git a/trunk/views/default/event_calendar/metatags.php b/trunk/views/default/event_calendar/metatags.php deleted file mode 100644 index 8375ef118..000000000 --- a/trunk/views/default/event_calendar/metatags.php +++ /dev/null @@ -1,2 +0,0 @@ - - diff --git a/trunk/views/default/event_calendar/nav.php b/trunk/views/default/event_calendar/nav.php deleted file mode 100644 index ceedfd485..000000000 --- a/trunk/views/default/event_calendar/nav.php +++ /dev/null @@ -1,38 +0,0 @@ - -
-
    - -
  • >
  • - -
  • >
  • -
  • >
  • -
  • >
  • -
-
-$url_start,'region'=>$vars['region'])); -} -?> \ No newline at end of file diff --git a/trunk/views/default/event_calendar/paged_footer.php b/trunk/views/default/event_calendar/paged_footer.php deleted file mode 100644 index 954769104..000000000 --- a/trunk/views/default/event_calendar/paged_footer.php +++ /dev/null @@ -1,4 +0,0 @@ -'; -?> - diff --git a/trunk/views/default/event_calendar/paged_header.php b/trunk/views/default/event_calendar/paged_header.php deleted file mode 100644 index 5f4b8e59c..000000000 --- a/trunk/views/default/event_calendar/paged_header.php +++ /dev/null @@ -1,15 +0,0 @@ -'; -$header .= '
'.$vars['date'].'
'; -$header .= ''; -$header .= ''; -$header .= ''; -$header .= ''; -$header .= ''; -if ($vars['personal_manage'] != 'no') { - $header .= ''; -} -$header .= ''; - -echo $header; -?> \ No newline at end of file diff --git a/trunk/views/default/event_calendar/paged_item_view.php b/trunk/views/default/event_calendar/paged_item_view.php deleted file mode 100644 index 77c8bed4e..000000000 --- a/trunk/views/default/event_calendar/paged_item_view.php +++ /dev/null @@ -1,29 +0,0 @@ -start_time)) { - $time_bit = event_calendar_convert_time($event->start_time); -} - -$date_bit = event_calendar_get_formatted_date($event->start_date); - -if (event_calendar_has_personal_event($event->guid,get_loggedin_userid())) { - $calendar_bit = 'checked = "checked"'; -} else { - $calendar_bit = ''; -} - -$calendar_bit .= ' onclick="javascript:event_calendar_personal_toggle('.$event->guid.'); return true;" '; - -$info = ''; -$info .= ''; -$info .= ''; -$info .= ''; -$info .= ''; -if ($vars['personal_manage'] != 'no') { - $info .= ''; -} -$info .= ''; - -echo $info; -?> \ No newline at end of file diff --git a/trunk/views/default/event_calendar/paged_view.php b/trunk/views/default/event_calendar/paged_view.php deleted file mode 100644 index 7c2ea2eaa..000000000 --- a/trunk/views/default/event_calendar/paged_view.php +++ /dev/null @@ -1,51 +0,0 @@ - $_SERVER['REQUEST_URI'], - 'baseurl' => $_SERVER['SCRIPT_NAME'].'/?'.$_SERVER['QUERY_STRING'], - 'offset' => $vars['offset'], - 'count' => $vars['count'], - 'limit' => $vars['limit'], - - )); -$event_calendar_times = get_plugin_setting('times', 'event_calendar'); -$event_calendar_personal_manage = get_plugin_setting('personal_manage', 'event_calendar'); -$events = $vars['events']; -$html = ''; -$date_format = 'F Y'; -$current_month = ''; -if ($events) { - foreach($events as $event) { - $month = date($date_format,$event->start_date); - if ($month != $current_month) { - if ($html) { - $html .= elgg_view('event_calendar/paged_footer'); - } - $html .= elgg_view('event_calendar/paged_header',array('date'=>$month,'personal_manage'=>$event_calendar_personal_manage)); - - $current_month = $month; - } - $html .= elgg_view('event_calendar/paged_item_view',array('event'=>$event,'times'=>$event_calendar_times,'personal_manage'=>$event_calendar_personal_manage)); - } - $html .= elgg_view('event_calendar/paged_footer'); -} -$msgs = '
'; -$html = $msgs.$nav.'
'.$html.'
'.$nav; - -echo $html; -?> - \ No newline at end of file diff --git a/trunk/views/default/event_calendar/personal_toggle_js.php b/trunk/views/default/event_calendar/personal_toggle_js.php deleted file mode 100644 index c0611e45c..000000000 --- a/trunk/views/default/event_calendar/personal_toggle_js.php +++ /dev/null @@ -1,20 +0,0 @@ - - \ No newline at end of file diff --git a/trunk/views/default/event_calendar/region_select.php b/trunk/views/default/event_calendar/region_select.php deleted file mode 100644 index 81407b27d..000000000 --- a/trunk/views/default/event_calendar/region_select.php +++ /dev/null @@ -1,23 +0,0 @@ -elgg_echo('event_calendar:all')); - foreach(explode("\n",$region_list) as $region_item) { - $region_item = trim($region_item); - $options_values[$region_item] = $region_item; - } - $js = "onchange=\"javascript:$('#event_list').load('".$vars['url_start'] - ."&callback=true®ion='+escape($('#region').val() ));\""; - //$js = "onchange=\"javascript:$('#event_list').load('".$vars['url_start']."&callback=true®ion='+$('#region').val());\""; - $body .= elgg_echo('event_calendar:region_filter_by_label'); - $body .= elgg_view("input/pulldown",array('internalid' => 'region','js'=>$js,'value'=>$vars['region'],'options_values'=>$options_values)); - $body .= '
'; -} - -echo $body; -?> \ No newline at end of file diff --git a/trunk/views/default/event_calendar/review_requests.php b/trunk/views/default/event_calendar/review_requests.php deleted file mode 100644 index e1866a32b..000000000 --- a/trunk/views/default/event_calendar/review_requests.php +++ /dev/null @@ -1,25 +0,0 @@ - $request, - 'size' => 'small' - )); - $info = ''.$request->name.''; - $info .= '
'; - $info .= elgg_view('output/confirmlink', - array( - 'class' => "cancel_button", - 'href' => $vars['url'] . 'action/event_calendar/killrequest?user_guid='.$request->guid.'&event_id=' . $vars['entity']->guid, - 'confirm' => elgg_echo('event_calendar:request:remove:check'), - 'text' => elgg_echo('delete'), - )); - $info .= '  '; - $url = elgg_add_action_tokens_to_url("{$vars['url']}action/event_calendar/addtocalendar?user_guid={$request->guid}&event_id={$vars['entity']->guid}"); - $info .= ''.elgg_echo('accept').''; - echo elgg_view_listing($icon,$info); - } -} - -?> diff --git a/trunk/views/default/event_calendar/show_events.php b/trunk/views/default/event_calendar/show_events.php deleted file mode 100644 index 31771f43d..000000000 --- a/trunk/views/default/event_calendar/show_events.php +++ /dev/null @@ -1,53 +0,0 @@ - - * @copyright Radagast Solutions 2008 - * @link http://radagast.biz/ - * - */ - -$listing_format = $vars['listing_format']; - -if ($vars['events']) { - if (get_plugin_setting('agenda_view', 'event_calendar') == 'yes') { - $event_list = elgg_view('event_calendar/agenda_view',$vars); - } else { - if ($listing_format == 'paged') { - $event_list = elgg_view('event_calendar/paged_view',$vars); - } else { - $event_list = elgg_view_entity_list($vars['events'], $vars['count'], $vars['offset'], $vars['limit'], false, false); - } - } -} else { - $event_list = '

'.elgg_echo('event_calendar:no_events_found').'

'; -} -if ($listing_format == 'paged') { - echo $event_list; -} else { - if (isloggedin()) { - $nav = elgg_view('event_calendar/nav',$vars); - } else { - $nav = ''; - } -?> -
'.elgg_echo('event_calendar:paged:column:date').''.elgg_echo('event_calendar:paged:column:time').''.elgg_echo('event_calendar:paged:column:event').''.elgg_echo('event_calendar:paged:column:venue').''.elgg_echo('event_calendar:paged:column:calendar').'
'.$date_bit.''.$time_bit.''.$event->title.''.$event->venue.'
- - -
-
-'.$event_list; -?> -
-
- -
- \ No newline at end of file diff --git a/trunk/views/default/event_calendar/strapline.php b/trunk/views/default/event_calendar/strapline.php deleted file mode 100644 index 15c7c98d9..000000000 --- a/trunk/views/default/event_calendar/strapline.php +++ /dev/null @@ -1,18 +0,0 @@ -
- -time_created; - $owner_guid = $event->owner_guid; - $owner = get_entity($owner_guid); - - echo sprintf(elgg_echo('event_calendar:strapline'), - friendly_time($time_updated), - "getURL() . "\">" . $owner->name ."" - ); - -?> - -
\ No newline at end of file diff --git a/trunk/views/default/icon/object/event_calendar/small.php b/trunk/views/default/icon/object/event_calendar/small.php deleted file mode 100644 index d30d14453..000000000 --- a/trunk/views/default/icon/object/event_calendar/small.php +++ /dev/null @@ -1,3 +0,0 @@ - \ No newline at end of file diff --git a/trunk/views/default/input/datepicker_inline.php b/trunk/views/default/input/datepicker_inline.php deleted file mode 100644 index 560074a2d..000000000 --- a/trunk/views/default/input/datepicker_inline.php +++ /dev/null @@ -1,52 +0,0 @@ - - * @copyright Radagast Solutions 2008 - * @link http://radagast.biz/ - * - */ -?> - - -
-

\ No newline at end of file diff --git a/trunk/views/default/input/datepicker_popup.php b/trunk/views/default/input/datepicker_popup.php deleted file mode 100644 index 8e1120ce7..000000000 --- a/trunk/views/default/input/datepicker_popup.php +++ /dev/null @@ -1,30 +0,0 @@ - - * @copyright Radagast Solutions 2008 - * @link http://radagast.biz/ - * - */ -if ($vars['dateformat']) { - $date_format = $vars['dateformat']; -} else { - $date_format = "DD, MM d, yy"; -} -?> - - - \ No newline at end of file diff --git a/trunk/views/default/input/timepicker.php b/trunk/views/default/input/timepicker.php deleted file mode 100644 index 35fa5ac98..000000000 --- a/trunk/views/default/input/timepicker.php +++ /dev/null @@ -1,38 +0,0 @@ -$vars['internalname'].'_h','value'=>$hour,'options_values'=>$hours)); -echo elgg_view('input/pulldown',array('internalname'=>$vars['internalname'].'_m','value'=>$minute,'options_values'=>$minutes)); - -?> \ No newline at end of file diff --git a/trunk/views/default/object/event_calendar.php b/trunk/views/default/object/event_calendar.php deleted file mode 100644 index 70560bd2d..000000000 --- a/trunk/views/default/object/event_calendar.php +++ /dev/null @@ -1,66 +0,0 @@ - - * @copyright Radagast Solutions 2008 - * @link http://radagast.biz/ - * - */ - -$event = $vars['entity']; - - -if ($vars['full']) { - $body = elgg_view('event_calendar/strapline',$vars); - $event_items = event_calendar_get_formatted_full_items($event); - $body .= '
'; - - foreach($event_items as $item) { - $value = $item->value; - if (!empty($value)) { - - //This function controls the alternating class - $even_odd = ( 'odd' != $even_odd ) ? 'odd' : 'even'; - $body .= "

"; - $body .= $item->title.': '; - $body .= $item->value; - - } - } - echo $body; - if ($event->long_description) { - echo '

'.$event->long_description.'

'; - } else { - echo '

'.$event->description.'

'; - } - echo '
'; - if (get_plugin_setting('add_to_group_calendar', 'event_calendar') == 'yes') { - echo elgg_view('event_calendar/forms/add_to_group',array('event' => $event)); - } -} else { - $time_bit = event_calendar_get_formatted_time($event); - $icon = elgg_view( - "graphics/icon", array( - 'entity' => $vars['entity'], - 'size' => 'small', - ) - ); - $info .= '

'.$event->title.''; - $info .= '
'.$time_bit; - if ($event->description) { - $info .= '

'.$event->description; - } - - if ($event_calendar_venue_view = get_plugin_setting('venue_view', 'event_calendar') == 'yes') { - $info .= '
'.$event->venue; - } - $info .= '

'; - - echo elgg_view_listing($icon, $info); -} - -?> \ No newline at end of file diff --git a/trunk/views/default/river/object/event_calendar/create.php b/trunk/views/default/river/object/event_calendar/create.php deleted file mode 100644 index f144ca610..000000000 --- a/trunk/views/default/river/object/event_calendar/create.php +++ /dev/null @@ -1,12 +0,0 @@ -subject_guid); - $object = get_entity($vars['item']->object_guid); - - $url = "getURL()}\">{$performed_by->name}"; - $string = sprintf(elgg_echo("event_calendar:river:created"),$url) . " "; - $string .= elgg_echo("event_calendar:river:create")." getURL() . "\">" . $object->title . ""; - -?> - - \ No newline at end of file diff --git a/trunk/views/default/river/object/event_calendar/update.php b/trunk/views/default/river/object/event_calendar/update.php deleted file mode 100644 index 5a5d376b1..000000000 --- a/trunk/views/default/river/object/event_calendar/update.php +++ /dev/null @@ -1,12 +0,0 @@ -subject_guid); - $object = get_entity($vars['item']->object_guid); - - $url = "getURL()}\">{$performed_by->name}"; - $string = sprintf(elgg_echo("event_calendar:river:updated"),$url) . " "; - $string .= elgg_echo("event_calendar:river:the_event")." getURL() . "\">" . $object->title . ""; - -?> - - \ No newline at end of file diff --git a/trunk/views/default/settings/event_calendar/edit.php b/trunk/views/default/settings/event_calendar/edit.php deleted file mode 100644 index 429a85b26..000000000 --- a/trunk/views/default/settings/event_calendar/edit.php +++ /dev/null @@ -1,363 +0,0 @@ -'yes', - elgg_echo('event_calendar:settings:no')=>'no', -); - -$access_options = array( ACCESS_PRIVATE => elgg_echo("PRIVATE"), - ACCESS_LOGGED_IN => elgg_echo("LOGGED_IN"), - ACCESS_PUBLIC => elgg_echo("PUBLIC")); - -// TODO - merge the agenda view into the list format options - -$listing_options = array(elgg_echo('event_calendar:settings:paged')=>'paged', - elgg_echo('event_calendar:settings:month')=>'month', -); - -$body = ''; - -$event_calendar_hide_access = get_plugin_setting('hide_access', 'event_calendar'); -if (!$event_calendar_hide_access) { - $event_calendar_hide_access = 'no'; -} - -$body .= elgg_echo('event_calendar:settings:hide_access:title'); -$body .= '
'; -$body .= elgg_view('input/radio',array('internalname'=>'params[hide_access]','value'=>$event_calendar_hide_access,'options'=>$yn_options)); - -$body .= '
'; - -$event_calendar_default_access = get_plugin_setting('default_access', 'event_calendar'); -if (!$event_calendar_default_access) { - $event_calendar_default_access = ACCESS_LOGGED_IN; -} - -$body .= elgg_echo('event_calendar:settings:default_access:title'); -$body .= '
'; -$body .= elgg_view('input/pulldown',array('internalname'=>'params[default_access]','value'=>$event_calendar_default_access,'options_values'=>$access_options)); - -$body .= '

'; - -$event_calendar_hide_end = get_plugin_setting('hide_end', 'event_calendar'); -if (!$event_calendar_hide_end) { - $event_calendar_hide_end = 'no'; -} - -$body .= elgg_echo('event_calendar:settings:hide_end:title'); -$body .= '
'; -$body .= elgg_view('input/radio',array('internalname'=>'params[hide_end]','value'=>$event_calendar_hide_end,'options'=>$yn_options)); - -$body .= '
'; - -$event_calendar_listing_format = get_plugin_setting('listing_format', 'event_calendar'); -if (!$event_calendar_listing_format) { - $event_calendar_listing_format = 'month'; -} - -$body .= elgg_echo('event_calendar:settings:listing_format:title'); -$body .= '
'; -$body .= elgg_view('input/radio',array('internalname'=>'params[listing_format]','value'=>$event_calendar_listing_format,'options'=>$listing_options)); - -$body .= '
'; - -$event_calendar_times = get_plugin_setting('times', 'event_calendar'); -if (!$event_calendar_times) { - $event_calendar_times = 'no'; -} - -$body .= elgg_echo('event_calendar:settings:times:title'); -$body .= '
'; -$body .= elgg_view('input/radio',array('internalname'=>'params[times]','value'=>$event_calendar_times,'options'=>$yn_options)); - -$body .= '
'; - -$event_calendar_autopersonal = get_plugin_setting('autopersonal', 'event_calendar'); -if (!$event_calendar_autopersonal) { - $event_calendar_autopersonal = 'yes'; -} - -$body .= elgg_echo('event_calendar:settings:autopersonal:title'); -$body .= '
'; -$body .= elgg_view('input/radio',array('internalname'=>'params[autopersonal]','value'=>$event_calendar_autopersonal,'options'=>$yn_options)); - -$body .= '
'; - -$event_calendar_autogroup = get_plugin_setting('autogroup', 'event_calendar'); -if (!$event_calendar_autogroup) { - $event_calendar_autogroup = 'no'; -} - -$body .= elgg_echo('event_calendar:settings:autogroup:title'); -$body .= '
'; -$body .= elgg_view('input/radio',array('internalname'=>'params[autogroup]','value'=>$event_calendar_autogroup,'options'=>$yn_options)); - -$body .= '
'; - -$event_calendar_add_to_group_calendar = get_plugin_setting('add_to_group_calendar', 'event_calendar'); -if (!$event_calendar_add_to_group_calendar) { - $event_calendar_add_to_group_calendar = 'no'; -} - -$body .= elgg_echo('event_calendar:settings:add_to_group_calendar:title'); -$body .= '
'; -$body .= elgg_view('input/radio',array('internalname'=>'params[add_to_group_calendar]','value'=>$event_calendar_add_to_group_calendar,'options'=>$yn_options)); - -$body .= '
'; - -$event_calendar_agenda_view = get_plugin_setting('agenda_view', 'event_calendar'); -if (!$event_calendar_agenda_view) { - $event_calendar_agenda_view = 'no'; -} - -$body .= elgg_echo('event_calendar:settings:agenda_view:title'); -$body .= '
'; -$body .= elgg_view('input/radio',array('internalname'=>'params[agenda_view]','value'=>$event_calendar_agenda_view,'options'=>$yn_options)); - -$body .= '
'; - -$event_calendar_venue_view = get_plugin_setting('venue_view', 'event_calendar'); -if (!$event_calendar_venue_view) { - $event_calendar_venue_view = 'no'; -} - -$body .= elgg_echo('event_calendar:settings:venue_view:title'); -$body .= '
'; -$body .= elgg_view('input/radio',array('internalname'=>'params[venue_view]','value'=>$event_calendar_venue_view,'options'=>$yn_options)); - -$body .= '
'; - -$options = array(elgg_echo('event_calendar:settings:no')=>'no', - elgg_echo('event_calendar:settings:site_calendar:admin')=>'admin', - elgg_echo('event_calendar:settings:site_calendar:loggedin')=>'loggedin', -); - -$event_calendar_site_calendar = get_plugin_setting('site_calendar', 'event_calendar'); -if (!$event_calendar_site_calendar) { - $event_calendar_site_calendar = 'admin'; -} - -$body .= elgg_echo('event_calendar:settings:site_calendar:title').'
'; -$body .= elgg_view('input/radio',array('internalname'=>'params[site_calendar]','value'=>$event_calendar_site_calendar,'options'=>$options)); - -$body .= '
'; - -$options = array(elgg_echo('event_calendar:settings:no')=>'no', - elgg_echo('event_calendar:settings:group_calendar:admin')=>'admin', - elgg_echo('event_calendar:settings:group_calendar:members')=>'members', -); - -$event_calendar_group_calendar = get_plugin_setting('group_calendar', 'event_calendar'); -if (!$event_calendar_group_calendar) { - $event_calendar_group_calendar = 'members'; -} - -$body .= elgg_echo('event_calendar:settings:group_calendar:title').'
'; -$body .= elgg_view('input/radio',array('internalname'=>'params[group_calendar]','value'=>$event_calendar_group_calendar,'options'=>$options)); - -$body .= '
'; - -$options = array(elgg_echo('event_calendar:settings:group_default:yes')=>'yes', - elgg_echo('event_calendar:settings:group_default:no')=>'no', -); - -$event_calendar_group_default = get_plugin_setting('group_default', 'event_calendar'); -if (!$event_calendar_group_default) { - $event_calendar_group_default = 'yes'; -} - -$body .= elgg_echo('event_calendar:settings:group_default:title'); -$body .= '
'; -$body .= elgg_view('input/radio',array('internalname'=>'params[group_default]','value'=>$event_calendar_group_default,'options'=>$options)); - -$body .= '
'; - -$event_calendar_group_always_display = get_plugin_setting('group_always_display', 'event_calendar'); -if (!$event_calendar_group_always_display) { - $event_calendar_group_always_display = 'no'; -} - -$body .= elgg_echo('event_calendar:settings:group_always_display:title'); -$body .= '
'; -$body .= elgg_view('input/radio',array('internalname'=>'params[group_always_display]','value'=>$event_calendar_group_always_display,'options'=>$yn_options)); - -$body .= '
'; - -$options = array(elgg_echo('event_calendar:settings:group_profile_display_option:left')=>'left', - elgg_echo('event_calendar:settings:group_profile_display_option:right')=>'right', - elgg_echo('event_calendar:settings:group_profile_display_option:none')=>'none', -); - -$event_calendar_group_profile_display = get_plugin_setting('group_profile_display', 'event_calendar'); -if (!$event_calendar_group_profile_display) { - $event_calendar_group_profile_display = 'right'; -} - -$body .= elgg_echo('event_calendar:settings:group_profile_display:title').'
'; -$body .= elgg_view('input/radio',array('internalname'=>'params[group_profile_display]','value'=>$event_calendar_group_profile_display,'options'=>$options)); - -$body .= '
'; - -$event_calendar_add_users = get_plugin_setting('add_users', 'event_calendar'); -if (!$event_calendar_add_users) { - $event_calendar_add_users = 'no'; -} - -$body .= elgg_echo('event_calendar:settings:add_users:title'); -$body .= '
'; -$body .= elgg_view('input/radio',array('internalname'=>'params[add_users]','value'=>$event_calendar_add_users,'options'=>$yn_options)); - -$body .= '
'; - -$event_calendar_add_users_notify = get_plugin_setting('add_users_notify', 'event_calendar'); -if (!$event_calendar_add_users_notify) { - $event_calendar_add_users_notify = 'no'; -} - -$body .= elgg_echo('event_calendar:settings:add_users_notify:title'); -$body .= '
'; -$body .= elgg_view('input/radio',array('internalname'=>'params[add_users_notify]','value'=>$event_calendar_add_users_notify,'options'=>$yn_options)); - -$body .= '
'; - -$event_calendar_personal_manage = get_plugin_setting('personal_manage', 'event_calendar'); -if (!$event_calendar_personal_manage) { - $event_calendar_personal_manage = 'yes'; -} - -$body .= elgg_echo('event_calendar:settings:personal_manage:title'); -$body .= '
'; -$body .= elgg_view('input/radio',array('internalname'=>'params[personal_manage]','value'=>$event_calendar_personal_manage,'options'=>$yn_options)); - -$body .= '
'; - -$event_calendar_spots_display = get_plugin_setting('spots_display', 'event_calendar'); -if (!$event_calendar_spots_display) { - $event_calendar_spots_display = 'no'; -} - -$body .= elgg_echo('event_calendar:settings:spots_display:title'); -$body .= '
'; -$body .= elgg_view('input/radio',array('internalname'=>'params[spots_display]','value'=>$event_calendar_spots_display,'options'=>$yn_options)); - -$body .= '
'; - -$event_calendar_no_collisions = get_plugin_setting('no_collisions', 'event_calendar'); -if (!$event_calendar_no_collisions) { - $event_calendar_no_collisions = 'no'; -} - -$body .= elgg_echo('event_calendar:settings:no_collisions:title'); -$body .= '
'; -$body .= elgg_view('input/radio',array('internalname'=>'params[no_collisions]','value'=>$event_calendar_no_collisions,'options'=>$yn_options)); - -$body .= '
'; - -$event_calendar_collision_length = get_plugin_setting('collision_length', 'event_calendar'); -if (!$event_calendar_collision_length) { - $event_calendar_collision_length = '3600'; -} - -$body .= elgg_echo('event_calendar:settings:collision_length:title'); -$body .= '
'; -$body .= elgg_view('input/text',array('internalname'=>'params[collision_length]','value'=>$event_calendar_collision_length)); - -$body .= '

'; - -$event_calendar_region_display = get_plugin_setting('region_display', 'event_calendar'); -if (!$event_calendar_region_display) { - $event_calendar_region_display = 'no'; -} - -$body .= elgg_echo('event_calendar:settings:region_display:title'); -$body .= '
'; -$body .= elgg_view('input/radio',array('internalname'=>'params[region_display]','value'=>$event_calendar_region_display,'options'=>$yn_options)); - -$body .= '
'; - -$event_calendar_region_list = get_plugin_setting('region_list', 'event_calendar'); -if (!$event_calendar_region_list) { - $event_calendar_region_list = ''; -} - -$body .= elgg_echo('event_calendar:settings:region_list:title'); -$body .= '
'; -$body .= elgg_view('event_calendar/input/longtext',array('internalname'=>'params[region_list]','value'=>$event_calendar_region_list)); - -$body .= '
'; - -$event_calendar_region_list_handles = get_plugin_setting('region_list_handles', 'event_calendar'); -if (!$event_calendar_region_list_handles) { - $event_calendar_region_list_handles = 'no'; -} - -$body .= elgg_echo('event_calendar:settings:region_list_handles:title'); -$body .= '
'; -$body .= elgg_view('input/radio',array('internalname'=>'params[region_list_handles]','value'=>$event_calendar_region_list_handles,'options'=>$yn_options)); - -$body .= '
'; - -$event_calendar_type_display = get_plugin_setting('type_display', 'event_calendar'); -if (!$event_calendar_type_display) { - $event_calendar_type_display = 'no'; -} - -$body .= elgg_echo('event_calendar:settings:type_display:title'); -$body .= '
'; -$body .= elgg_view('input/radio',array('internalname'=>'params[type_display]','value'=>$event_calendar_type_display,'options'=>$yn_options)); - -$body .= '
'; - -$event_calendar_type_list = get_plugin_setting('type_list', 'event_calendar'); -if (!$event_calendar_type_list) { - $event_calendar_type_list = ''; -} - -$body .= elgg_echo('event_calendar:settings:type_list:title'); -$body .= '
'; -$body .= elgg_view('event_calendar/input/longtext',array('internalname'=>'params[type_list]','value'=>$event_calendar_type_list)); - -$body .= '
'; - -$event_calendar_type_list_handles = get_plugin_setting('type_list_handles', 'event_calendar'); -if (!$event_calendar_type_list_handles) { - $event_calendar_type_list_handles = 'no'; -} - -$body .= elgg_echo('event_calendar:settings:type_list_handles:title'); -$body .= '
'; -$body .= elgg_view('input/radio',array('internalname'=>'params[type_list_handles]','value'=>$event_calendar_type_list_handles,'options'=>$yn_options)); - -$body .= '
'; - -$event_calendar_first_date = get_plugin_setting('first_date', 'event_calendar'); -if (!$event_calendar_first_date) { - $event_calendar_first_date = ''; -} - -$body .= elgg_echo('event_calendar:settings:first_date:title'); -$body .= '
'; -$body .= elgg_view('input/text',array('internalname'=>'params[first_date]','value'=>$event_calendar_first_date)); - -$body .= '

'; - -$event_calendar_last_date = get_plugin_setting('last_date', 'event_calendar'); -if (!$event_calendar_last_date) { - $event_calendar_last_date = ''; -} - -$body .= elgg_echo('event_calendar:settings:last_date:title'); -$body .= '
'; -$body .= elgg_view('input/text',array('internalname'=>'params[last_date]','value'=>$event_calendar_last_date)); - -$body .= '

'; - -$event_calendar_more_required = get_plugin_setting('more_required', 'event_calendar'); -if (!$event_calendar_more_required) { - $event_calendar_more_required = 'no'; -} - -$body .= elgg_echo('event_calendar:settings:more_required:title'); -$body .= '
'; -$body .= elgg_view('input/radio',array('internalname'=>'params[more_required]','value'=>$event_calendar_more_required,'options'=>$yn_options)); - -echo $body; -?> \ No newline at end of file diff --git a/trunk/views/default/widgets/event_calendar/edit.php b/trunk/views/default/widgets/event_calendar/edit.php deleted file mode 100644 index 716920c8a..000000000 --- a/trunk/views/default/widgets/event_calendar/edit.php +++ /dev/null @@ -1,35 +0,0 @@ - - * @copyright Radagast Solutions 2008 - * @link http://radagast.biz/ - * - */ - -if (!$vars['entity']->num_display) { - $num_display = 5; -} else { - $num_display = $vars['entity']->num_display; -} -?> - -

- : - -

diff --git a/trunk/views/default/widgets/event_calendar/view.php b/trunk/views/default/widgets/event_calendar/view.php deleted file mode 100644 index 12fff6d60..000000000 --- a/trunk/views/default/widgets/event_calendar/view.php +++ /dev/null @@ -1,39 +0,0 @@ - - * @copyright Radagast Solutions 2008 - * @link http://radagast.biz/ - * - */ - - // Load event calendar model - require_once(dirname(dirname(dirname(dirname(dirname(__FILE__)))))."/models/model.php"); - - //the number of events to display - $num = (int) $vars['entity']->num_display; - if (!$num) - $num = 5; - - // Get the events - - $events = event_calendar_get_personal_events_for_user(page_owner(),$num); - - // If there are any events to view, view them - if (is_array($events) && sizeof($events) > 0) { - - echo "
"; - - foreach($events as $event) { - echo elgg_view("object/event_calendar",array('entity' => $event)); - } - - echo "
"; - - } - -?> \ No newline at end of file diff --git a/trunk/views/rss/event_calendar/show_events.php b/trunk/views/rss/event_calendar/show_events.php deleted file mode 100644 index 0b2fe5b70..000000000 --- a/trunk/views/rss/event_calendar/show_events.php +++ /dev/null @@ -1,16 +0,0 @@ - - * @copyright Radagast Solutions 2009 - * @link http://radagast.biz/ - * - */ - -if ($vars['events']) { - echo elgg_view_entity_list($vars['events'], $vars['count'], $vars['offset'], $vars['limit'], false, false); -} -?> \ No newline at end of file diff --git a/trunk/views/rss/object/event_calendar.php b/trunk/views/rss/object/event_calendar.php deleted file mode 100644 index 92f6fcc14..000000000 --- a/trunk/views/rss/object/event_calendar.php +++ /dev/null @@ -1,60 +0,0 @@ -title; - - $event_items = event_calendar_get_formatted_full_items($vars['entity']); - $items = array(); - foreach($event_items as $item) { - if (trim($item->value)) { - $items[] = ''.$item->title.': '.$item->value; - } - } - - $description = '

'.implode('
',$items).'

'; - - if ($vars['entity']->long_description) { - $description .= '

'.autop($vars['entity']->long_description).'

'; - } else { - $description .= '

'.$vars['entity']->description.'

'; - } - -?> - - - getURL()); ?> - getURL()); ?> - <![CDATA[<?php echo $title; ?>]]> - ]]> - getOwnerEntity(); - if ($owner) - { -?> - name; ?> - - getLongitude()) && - ($vars['entity']->getLatitude()) - ) { - ?> - getLatitude(); ?> getLongitude(); ?> - - - diff --git a/ui.core.min.js b/ui.core.min.js new file mode 100644 index 000000000..b2352c67f --- /dev/null +++ b/ui.core.min.js @@ -0,0 +1,9 @@ +/* + * jQuery UI 1.7.2 + * + * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT (MIT-LICENSE.txt) + * and GPL (GPL-LICENSE.txt) licenses. + * + * http://docs.jquery.com/UI + */ jQuery.ui||(function(c){var i=c.fn.remove,d=c.browser.mozilla&&(parseFloat(c.browser.version)<1.9);c.ui={version:"1.7.2",plugin:{add:function(k,l,n){var m=c.ui[k].prototype;for(var j in n){m.plugins[j]=m.plugins[j]||[];m.plugins[j].push([l,n[j]])}},call:function(j,l,k){var n=j.plugins[l];if(!n||!j.element[0].parentNode){return}for(var m=0;m0){return true}m[j]=1;l=(m[j]>0);m[j]=0;return l},isOverAxis:function(k,j,l){return(k>j)&&(k<(j+l))},isOver:function(o,k,n,m,j,l){return c.ui.isOverAxis(o,n,j)&&c.ui.isOverAxis(k,m,l)},keyCode:{BACKSPACE:8,CAPS_LOCK:20,COMMA:188,CONTROL:17,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,INSERT:45,LEFT:37,NUMPAD_ADD:107,NUMPAD_DECIMAL:110,NUMPAD_DIVIDE:111,NUMPAD_ENTER:108,NUMPAD_MULTIPLY:106,NUMPAD_SUBTRACT:109,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SHIFT:16,SPACE:32,TAB:9,UP:38}};if(d){var f=c.attr,e=c.fn.removeAttr,h="http://www.w3.org/2005/07/aaa",a=/^aria-/,b=/^wairole:/;c.attr=function(k,j,l){var m=l!==undefined;return(j=="role"?(m?f.call(this,k,j,"wairole:"+l):(f.apply(this,arguments)||"").replace(b,"")):(a.test(j)?(m?k.setAttributeNS(h,j.replace(a,"aaa:"),l):f.call(this,k,j.replace(a,"aaa:"))):f.apply(this,arguments)))};c.fn.removeAttr=function(j){return(a.test(j)?this.each(function(){this.removeAttributeNS(h,j.replace(a,""))}):e.call(this,j))}}c.fn.extend({remove:function(){c("*",this).add(this).each(function(){c(this).triggerHandler("remove")});return i.apply(this,arguments)},enableSelection:function(){return this.attr("unselectable","off").css("MozUserSelect","").unbind("selectstart.ui")},disableSelection:function(){return this.attr("unselectable","on").css("MozUserSelect","none").bind("selectstart.ui",function(){return false})},scrollParent:function(){var j;if((c.browser.msie&&(/(static|relative)/).test(this.css("position")))||(/absolute/).test(this.css("position"))){j=this.parents().filter(function(){return(/(relative|absolute|fixed)/).test(c.curCSS(this,"position",1))&&(/(auto|scroll)/).test(c.curCSS(this,"overflow",1)+c.curCSS(this,"overflow-y",1)+c.curCSS(this,"overflow-x",1))}).eq(0)}else{j=this.parents().filter(function(){return(/(auto|scroll)/).test(c.curCSS(this,"overflow",1)+c.curCSS(this,"overflow-y",1)+c.curCSS(this,"overflow-x",1))}).eq(0)}return(/fixed/).test(this.css("position"))||!j.length?c(document):j}});c.extend(c.expr[":"],{data:function(l,k,j){return !!c.data(l,j[3])},focusable:function(k){var l=k.nodeName.toLowerCase(),j=c.attr(k,"tabindex");return(/input|select|textarea|button|object/.test(l)?!k.disabled:"a"==l||"area"==l?k.href||!isNaN(j):!isNaN(j))&&!c(k)["area"==l?"parents":"closest"](":hidden").length},tabbable:function(k){var j=c.attr(k,"tabindex");return(isNaN(j)||j>=0)&&c(k).is(":focusable")}});function g(m,n,o,l){function k(q){var p=c[m][n][q]||[];return(typeof p=="string"?p.split(/,?\s+/):p)}var j=k("getter");if(l.length==1&&typeof l[0]=="string"){j=j.concat(k("getterSetter"))}return(c.inArray(o,j)!=-1)}c.widget=function(k,j){var l=k.split(".")[0];k=k.split(".")[1];c.fn[k]=function(p){var n=(typeof p=="string"),o=Array.prototype.slice.call(arguments,1);if(n&&p.substring(0,1)=="_"){return this}if(n&&g(l,k,p,o)){var m=c.data(this[0],k);return(m?m[p].apply(m,o):undefined)}return this.each(function(){var q=c.data(this,k);(!q&&!n&&c.data(this,k,new c[l][k](this,p))._init());(q&&n&&c.isFunction(q[p])&&q[p].apply(q,o))})};c[l]=c[l]||{};c[l][k]=function(o,n){var m=this;this.namespace=l;this.widgetName=k;this.widgetEventPrefix=c[l][k].eventPrefix||k;this.widgetBaseClass=l+"-"+k;this.options=c.extend({},c.widget.defaults,c[l][k].defaults,c.metadata&&c.metadata.get(o)[k],n);this.element=c(o).bind("setData."+k,function(q,p,r){if(q.target==o){return m._setData(p,r)}}).bind("getData."+k,function(q,p){if(q.target==o){return m._getData(p)}}).bind("remove",function(){return m.destroy()})};c[l][k].prototype=c.extend({},c.widget.prototype,j);c[l][k].getterSetter="option"};c.widget.prototype={_init:function(){},destroy:function(){this.element.removeData(this.widgetName).removeClass(this.widgetBaseClass+"-disabled "+this.namespace+"-state-disabled").removeAttr("aria-disabled")},option:function(l,m){var k=l,j=this;if(typeof l=="string"){if(m===undefined){return this._getData(l)}k={};k[l]=m}c.each(k,function(n,o){j._setData(n,o)})},_getData:function(j){return this.options[j]},_setData:function(j,k){this.options[j]=k;if(j=="disabled"){this.element[k?"addClass":"removeClass"](this.widgetBaseClass+"-disabled "+this.namespace+"-state-disabled").attr("aria-disabled",k)}},enable:function(){this._setData("disabled",false)},disable:function(){this._setData("disabled",true)},_trigger:function(l,m,n){var p=this.options[l],j=(l==this.widgetEventPrefix?l:this.widgetEventPrefix+l);m=c.Event(m);m.type=j;if(m.originalEvent){for(var k=c.event.props.length,o;k;){o=c.event.props[--k];m[o]=m.originalEvent[o]}}this.element.trigger(m,n);return !(c.isFunction(p)&&p.call(this.element[0],m,n)===false||m.isDefaultPrevented())}};c.widget.defaults={disabled:false};c.ui.mouse={_mouseInit:function(){var j=this;this.element.bind("mousedown."+this.widgetName,function(k){return j._mouseDown(k)}).bind("click."+this.widgetName,function(k){if(j._preventClickEvent){j._preventClickEvent=false;k.stopImmediatePropagation();return false}});if(c.browser.msie){this._mouseUnselectable=this.element.attr("unselectable");this.element.attr("unselectable","on")}this.started=false},_mouseDestroy:function(){this.element.unbind("."+this.widgetName);(c.browser.msie&&this.element.attr("unselectable",this._mouseUnselectable))},_mouseDown:function(l){l.originalEvent=l.originalEvent||{};if(l.originalEvent.mouseHandled){return}(this._mouseStarted&&this._mouseUp(l));this._mouseDownEvent=l;var k=this,m=(l.which==1),j=(typeof this.options.cancel=="string"?c(l.target).parents().add(l.target).filter(this.options.cancel).length:false);if(!m||j||!this._mouseCapture(l)){return true}this.mouseDelayMet=!this.options.delay;if(!this.mouseDelayMet){this._mouseDelayTimer=setTimeout(function(){k.mouseDelayMet=true},this.options.delay)}if(this._mouseDistanceMet(l)&&this._mouseDelayMet(l)){this._mouseStarted=(this._mouseStart(l)!==false);if(!this._mouseStarted){l.preventDefault();return true}}this._mouseMoveDelegate=function(n){return k._mouseMove(n)};this._mouseUpDelegate=function(n){return k._mouseUp(n)};c(document).bind("mousemove."+this.widgetName,this._mouseMoveDelegate).bind("mouseup."+this.widgetName,this._mouseUpDelegate);(c.browser.safari||l.preventDefault());l.originalEvent.mouseHandled=true;return true},_mouseMove:function(j){if(c.browser.msie&&!j.button){return this._mouseUp(j)}if(this._mouseStarted){this._mouseDrag(j);return j.preventDefault()}if(this._mouseDistanceMet(j)&&this._mouseDelayMet(j)){this._mouseStarted=(this._mouseStart(this._mouseDownEvent,j)!==false);(this._mouseStarted?this._mouseDrag(j):this._mouseUp(j))}return !this._mouseStarted},_mouseUp:function(j){c(document).unbind("mousemove."+this.widgetName,this._mouseMoveDelegate).unbind("mouseup."+this.widgetName,this._mouseUpDelegate);if(this._mouseStarted){this._mouseStarted=false;this._preventClickEvent=(j.target==this._mouseDownEvent.target);this._mouseStop(j)}return false},_mouseDistanceMet:function(j){return(Math.max(Math.abs(this._mouseDownEvent.pageX-j.pageX),Math.abs(this._mouseDownEvent.pageY-j.pageY))>=this.options.distance)},_mouseDelayMet:function(j){return this.mouseDelayMet},_mouseStart:function(j){},_mouseDrag:function(j){},_mouseStop:function(j){},_mouseCapture:function(j){return true}};c.ui.mouse.defaults={cancel:null,distance:1,delay:0}})(jQuery); \ No newline at end of file diff --git a/ui.datepicker.css b/ui.datepicker.css new file mode 100644 index 000000000..567f8c97b --- /dev/null +++ b/ui.datepicker.css @@ -0,0 +1,62 @@ +/* Datepicker +----------------------------------*/ +.ui-datepicker { width: 17em; padding: .2em .2em 0; } +.ui-datepicker .ui-datepicker-header { position:relative; padding:.2em 0; } +.ui-datepicker .ui-datepicker-prev, .ui-datepicker .ui-datepicker-next { position:absolute; top: 2px; width: 1.8em; height: 1.8em; } +.ui-datepicker .ui-datepicker-prev-hover, .ui-datepicker .ui-datepicker-next-hover { top: 1px; } +.ui-datepicker .ui-datepicker-prev { left:2px; } +.ui-datepicker .ui-datepicker-next { right:2px; } +.ui-datepicker .ui-datepicker-prev-hover { left:1px; } +.ui-datepicker .ui-datepicker-next-hover { right:1px; } +.ui-datepicker .ui-datepicker-prev span, .ui-datepicker .ui-datepicker-next span { display: block; position: absolute; left: 50%; margin-left: -8px; top: 50%; margin-top: -8px; } +.ui-datepicker .ui-datepicker-title { margin: 0 2.3em; line-height: 1.8em; text-align: center; } +.ui-datepicker .ui-datepicker-title select { float:left; font-size:1em; margin:1px 0; } +.ui-datepicker select.ui-datepicker-month-year {width: 100%;} +.ui-datepicker select.ui-datepicker-month, +.ui-datepicker select.ui-datepicker-year { width: 49%;} +.ui-datepicker .ui-datepicker-title select.ui-datepicker-year { float: right; } +.ui-datepicker table {width: 100%; font-size: .9em; border-collapse: collapse; margin:0 0 .4em; } +.ui-datepicker th { padding: .7em .3em; text-align: center; font-weight: bold; border: 0; } +.ui-datepicker td { border: 0; padding: 1px; } +.ui-datepicker td span, .ui-datepicker td a { display: block; padding: .2em; text-align: right; text-decoration: none; } +.ui-datepicker .ui-datepicker-buttonpane { background-image: none; margin: .7em 0 0 0; padding:0 .2em; border-left: 0; border-right: 0; border-bottom: 0; } +.ui-datepicker .ui-datepicker-buttonpane button { float: right; margin: .5em .2em .4em; cursor: pointer; padding: .2em .6em .3em .6em; width:auto; overflow:visible; } +.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current { float:left; } + +/* with multiple calendars */ +.ui-datepicker.ui-datepicker-multi { width:auto; } +.ui-datepicker-multi .ui-datepicker-group { float:left; } +.ui-datepicker-multi .ui-datepicker-group table { width:95%; margin:0 auto .4em; } +.ui-datepicker-multi-2 .ui-datepicker-group { width:50%; } +.ui-datepicker-multi-3 .ui-datepicker-group { width:33.3%; } +.ui-datepicker-multi-4 .ui-datepicker-group { width:25%; } +.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header { border-left-width:0; } +.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header { border-left-width:0; } +.ui-datepicker-multi .ui-datepicker-buttonpane { clear:left; } +.ui-datepicker-row-break { clear:both; width:100%; } + +/* RTL support */ +.ui-datepicker-rtl { direction: rtl; } +.ui-datepicker-rtl .ui-datepicker-prev { right: 2px; left: auto; } +.ui-datepicker-rtl .ui-datepicker-next { left: 2px; right: auto; } +.ui-datepicker-rtl .ui-datepicker-prev:hover { right: 1px; left: auto; } +.ui-datepicker-rtl .ui-datepicker-next:hover { left: 1px; right: auto; } +.ui-datepicker-rtl .ui-datepicker-buttonpane { clear:right; } +.ui-datepicker-rtl .ui-datepicker-buttonpane button { float: left; } +.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current { float:right; } +.ui-datepicker-rtl .ui-datepicker-group { float:right; } +.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header { border-right-width:0; border-left-width:1px; } +.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header { border-right-width:0; border-left-width:1px; } + +/* IE6 IFRAME FIX (taken from datepicker 1.5.3 */ +.ui-datepicker-cover { + display: none; /*sorry for IE5*/ + display/**/: block; /*sorry for IE5*/ + position: absolute; /*must have*/ + z-index: -1; /*must have*/ + filter: mask(); /*must have*/ + top: -4px; /*must have*/ + left: -4px; /*must have*/ + width: 200px; /*must have*/ + height: 200px; /*must have*/ +} \ No newline at end of file diff --git a/ui.datepicker.js b/ui.datepicker.js new file mode 100644 index 000000000..009582c7d --- /dev/null +++ b/ui.datepicker.js @@ -0,0 +1,212 @@ +(function($){ + var PROP_NAME="datepicker"; + function Datepicker(){ + this.debug=false; + this._curInst=null; + this._disabledInputs=[]; + this._datepickerShowing=false; + this._inDialog=false; + this._mainDivId="ui-datepicker-div"; + this._inlineClass="ui-datepicker-inline"; + this._appendClass="ui-datepicker-append"; + this._triggerClass="ui-datepicker-trigger"; + this._dialogClass="ui-datepicker-dialog"; + this._promptClass="ui-datepicker-prompt"; + this._disableClass="ui-datepicker-disabled"; + this._unselectableClass="ui-datepicker-unselectable"; + this._currentClass="ui-datepicker-current-day"; + this.regional=[]; + this.regional[""]={ + clearText:"Clear", + clearStatus:"Erase the current date", + closeText:"Close", + closeStatus:"Close without change", + prevText:"<Prev", + prevStatus:"Show the previous month", + prevBigText:"<<", + prevBigStatus:"Show the previous year", + nextText:"Next>", + nextStatus:"Show the next month", + nextBigText:">>", + nextBigStatus:"Show the next year", + currentText:"Today", + currentStatus:"Show the current month", + monthNames:["January","February","March","April","May","June","July","August","September","October","November","December"], + monthNamesShort:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"], + monthStatus:"Show a different month", + yearStatus:"Show a different year", + weekHeader:"Wk", + weekStatus:"Week of the year", + dayNames:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"], + dayNamesShort:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"], + dayNamesMin:["Su","Mo","Tu","We","Th","Fr","Sa"], + dayStatus:"Set DD as first week day", + dateStatus:"Select DD, M d", + dateFormat:"mm/dd/yy", + firstDay:0, + initStatus:"Select a date", + isRTL:false + }; + this._defaults={ + onChangeToday: false, + showOn:"focus", + showAnim:"show", + showOptions:{}, + defaultDate:null, + appendText:"", + buttonText:"...", + buttonImage:"", + buttonImageOnly:false, + closeAtTop:true, + mandatory:false, + hideIfNoPrevNext:false, + navigationAsDateFormat:false, + showBigPrevNext:false, + gotoCurrent:false, + changeMonth:true, + changeYear:true, + showMonthAfterYear:false, + yearRange:"-10:+10", + changeFirstDay:true, + highlightWeek:false, + showOtherMonths:false, + showWeeks:false, + calculateWeek:this.iso8601Week, + shortYearCutoff:"+10", + showStatus:false, + statusForDate:this.dateStatus, + minDate:null, + maxDate:null, + duration:"normal", + beforeShowDay:null, + beforeShow:null, + onSelect:null, + onChangeMonthYear:null, + onClose:null, + numberOfMonths:1, + showCurrentAtPos:0, + stepMonths:1, + stepBigMonths:12, + rangeSelect:false, + rangeSeparator:" - ", + altField:"", + altFormat:"" + }; + $.extend(this._defaults,this.regional[""]); + this.dpDiv=$('')} + $.extend( + Datepicker.prototype, + { + markerClassName:"hasDatepicker", + log:function(){ + if(this.debug){ + console.log.apply("",arguments) + } + }, + setDefaults: + function(settings){ + extendRemove(this._defaults,settings||{}); + return this + }, + + _attachDatepicker: + function(target,settings){ + var inlineSettings=null; + for(attrName in this._defaults){ + var attrValue=target.getAttribute("date:"+attrName); + if(attrValue){inlineSettings=inlineSettings||{};try{inlineSettings[attrName]=eval(attrValue)}catch(err){inlineSettings[attrName]=attrValue}}}var nodeName=target.nodeName.toLowerCase();var inline=(nodeName=="div"||nodeName=="span");if(!target.id){target.id="dp"+(++this.uuid)}var inst=this._newInst($(target),inline);inst.settings=$.extend({},settings||{},inlineSettings||{});if(nodeName=="input"){this._connectDatepicker(target,inst)}else{if(inline){this._inlineDatepicker(target,inst)}}},_newInst:function(target,inline){var id=target[0].id.replace(/([:\[\]\.])/g,"\\\\$1");return{id:id,input:target,selectedDay:0,selectedMonth:0,selectedYear:0,drawMonth:0,drawYear:0,inline:inline,dpDiv:(!inline?this.dpDiv:$('
'))}},_connectDatepicker:function(target,inst){var input=$(target);if(input.hasClass(this.markerClassName)){return}var appendText=this._get(inst,"appendText");var isRTL=this._get(inst,"isRTL");if(appendText){input[isRTL?"before":"after"](''+appendText+"")}var showOn=this._get(inst,"showOn");if(showOn=="focus"||showOn=="both"){input.focus(this._showDatepicker)}if(showOn=="button"||showOn=="both"){var buttonText=this._get(inst,"buttonText");var buttonImage=this._get(inst,"buttonImage");var trigger=$(this._get(inst,"buttonImageOnly")?$("").addClass(this._triggerClass).attr({src:buttonImage,alt:buttonText,title:buttonText}):$('').addClass(this._triggerClass).html(buttonImage==""?buttonText:$("").attr({src:buttonImage,alt:buttonText,title:buttonText})));input[isRTL?"before":"after"](trigger);trigger.click(function(){if($.datepicker._datepickerShowing&&$.datepicker._lastInput==target){$.datepicker._hideDatepicker()}else{$.datepicker._showDatepicker(target)}return false})}input.addClass(this.markerClassName).keydown(this._doKeyDown).keypress(this._doKeyPress).bind("setData.datepicker",function(event,key,value){inst.settings[key]=value}).bind("getData.datepicker",function(event,key){return this._get(inst,key)});$.data(target,PROP_NAME,inst)},_inlineDatepicker:function(target,inst){var divSpan=$(target);if(divSpan.hasClass(this.markerClassName)){return}divSpan.addClass(this.markerClassName).append(inst.dpDiv).bind("setData.datepicker",function(event,key,value){inst.settings[key]=value}).bind("getData.datepicker",function(event,key){return this._get(inst,key)});$.data(target,PROP_NAME,inst);this._setDate(inst,this._getDefaultDate(inst));this._updateDatepicker(inst)},_inlineShow:function(inst){var numMonths=this._getNumberOfMonths(inst);inst.dpDiv.width(numMonths[1]*$(".ui-datepicker",inst.dpDiv[0]).width())}, + + _dialogDatepicker: + function(input,dateText,onSelect,settings,pos){ + var inst=this._dialogInst; + if(!inst){var id="dp"+(++this.uuid); + this._dialogInput=$(''); + this._dialogInput.keydown(this._doKeyDown); + $("body").append(this._dialogInput); + inst=this._dialogInst=this._newInst(this._dialogInput,false); + inst.settings={}; + $.data(this._dialogInput[0],PROP_NAME,inst)} + extendRemove(inst.settings,settings||{}); + this._dialogInput.val(dateText); + this._pos=(pos?(pos.length?pos:[pos.pageX,pos.pageY]):null); + if(!this._pos){ + var browserWidth=window.innerWidth||document.documentElement.clientWidth||document.body.clientWidth;var browserHeight=window.innerHeight||document.documentElement.clientHeight||document.body.clientHeight; + var scrollX=document.documentElement.scrollLeft||document.body.scrollLeft;var scrollY=document.documentElement.scrollTop||document.body.scrollTop;this._pos=[(browserWidth/2)-100+scrollX,(browserHeight/2)-150+scrollY]}this._dialogInput.css("left",this._pos[0]+"px").css("top",this._pos[1]+"px"); + inst.settings.onSelect=onSelect; + this._inDialog=true; + this.dpDiv.addClass(this._dialogClass); + this._showDatepicker(this._dialogInput[0]);if($.blockUI){$.blockUI(this.dpDiv)}$.data(this._dialogInput[0],PROP_NAME,inst);return this},_destroyDatepicker:function(target){var $target=$(target);if(!$target.hasClass(this.markerClassName)){return}var nodeName=target.nodeName.toLowerCase();$.removeData(target,PROP_NAME);if(nodeName=="input"){$target.siblings("."+this._appendClass).remove().end().siblings("."+this._triggerClass).remove().end().removeClass(this.markerClassName).unbind("focus",this._showDatepicker).unbind("keydown",this._doKeyDown).unbind("keypress",this._doKeyPress)}else{if(nodeName=="div"||nodeName=="span"){$target.removeClass(this.markerClassName).empty()}}},_enableDatepicker:function(target){var $target=$(target);if(!$target.hasClass(this.markerClassName)){return}var nodeName=target.nodeName.toLowerCase();if(nodeName=="input"){target.disabled=false;$target.siblings("button."+this._triggerClass).each(function(){this.disabled=false}).end().siblings("img."+this._triggerClass).css({opacity:"1.0",cursor:""})}else{if(nodeName=="div"||nodeName=="span"){$target.children("."+this._disableClass).remove()}}this._disabledInputs=$.map(this._disabledInputs,function(value){return(value==target?null:value)})},_disableDatepicker:function(target){var $target=$(target);if(!$target.hasClass(this.markerClassName)){return}var nodeName=target.nodeName.toLowerCase();if(nodeName=="input"){target.disabled=true;$target.siblings("button."+this._triggerClass).each(function(){this.disabled=true}).end().siblings("img."+this._triggerClass).css({opacity:"0.5",cursor:"default"})}else{if(nodeName=="div"||nodeName=="span"){var inline=$target.children("."+this._inlineClass);var offset=inline.offset();var relOffset={left:0,top:0};inline.parents().each(function(){if($(this).css("position")=="relative"){relOffset=$(this).offset();return false}});$target.prepend('
')}}this._disabledInputs=$.map(this._disabledInputs,function(value){return(value==target?null:value)});this._disabledInputs[this._disabledInputs.length]=target},_isDisabledDatepicker:function(target){if(!target){return false}for(var i=0;i-1)},_showDatepicker:function(input){input=input.target||input;if(input.nodeName.toLowerCase()!="input"){input=$("input",input.parentNode)[0]}if($.datepicker._isDisabledDatepicker(input)||$.datepicker._lastInput==input){return}var inst=$.datepicker._getInst(input);var beforeShow=$.datepicker._get(inst,"beforeShow");extendRemove(inst.settings,(beforeShow?beforeShow.apply(input,[input,inst]):{}));$.datepicker._hideDatepicker(null,"");$.datepicker._lastInput=input;$.datepicker._setDateFromField(inst);if($.datepicker._inDialog){input.value=""}if(!$.datepicker._pos){$.datepicker._pos=$.datepicker._findPos(input);$.datepicker._pos[1]+=input.offsetHeight}var isFixed=false;$(input).parents().each(function(){isFixed|=$(this).css("position")=="fixed";return!isFixed});if(isFixed&&$.browser.opera){$.datepicker._pos[0]-=document.documentElement.scrollLeft;$.datepicker._pos[1]-=document.documentElement.scrollTop}var offset={left:$.datepicker._pos[0],top:$.datepicker._pos[1]};$.datepicker._pos=null;inst.rangeStart=null;inst.dpDiv.css({position:"absolute",display:"block",top:"-1000px"});$.datepicker._updateDatepicker(inst);inst.dpDiv.width($.datepicker._getNumberOfMonths(inst)[1]*$(".ui-datepicker",inst.dpDiv[0])[0].offsetWidth);offset=$.datepicker._checkOffset(inst,offset,isFixed);inst.dpDiv.css({position:($.datepicker._inDialog&&$.blockUI?"static":(isFixed?"fixed":"absolute")),display:"none",left:offset.left+"px",top:offset.top+"px"});if(!inst.inline){var showAnim=$.datepicker._get(inst,"showAnim")||"show";var duration=$.datepicker._get(inst,"duration");var postProcess=function(){$.datepicker._datepickerShowing=true;if($.browser.msie&&parseInt($.browser.version,10)<7){$("iframe.ui-datepicker-cover").css({width:inst.dpDiv.width()+4,height:inst.dpDiv.height()+4})}};if($.effects&&$.effects[showAnim]){inst.dpDiv.show(showAnim,$.datepicker._get(inst,"showOptions"),duration,postProcess)}else{inst.dpDiv[showAnim](duration,postProcess)}if(duration==""){postProcess()}if(inst.input[0].type!="hidden"){inst.input[0].focus()}$.datepicker._curInst=inst}},_updateDatepicker:function(inst){var dims={width:inst.dpDiv.width()+4,height:inst.dpDiv.height()+4};inst.dpDiv.empty().append(this._generateHTML(inst)).find("iframe.ui-datepicker-cover").css({width:dims.width,height:dims.height});var numMonths=this._getNumberOfMonths(inst);inst.dpDiv[(numMonths[0]!=1||numMonths[1]!=1?"add":"remove")+"Class"]("ui-datepicker-multi");inst.dpDiv[(this._get(inst,"isRTL")?"add":"remove")+"Class"]("ui-datepicker-rtl");if(inst.input&&inst.input[0].type!="hidden"){$(inst.input[0]).focus()}},_checkOffset:function(inst,offset,isFixed){var pos=inst.input?this._findPos(inst.input[0]):null;var browserWidth=window.innerWidth||document.documentElement.clientWidth;var browserHeight=window.innerHeight||document.documentElement.clientHeight;var scrollX=document.documentElement.scrollLeft||document.body.scrollLeft;var scrollY=document.documentElement.scrollTop||document.body.scrollTop;if(this._get(inst,"isRTL")||(offset.left+inst.dpDiv.width()-scrollX)>browserWidth){offset.left=Math.max((isFixed?0:scrollX),pos[0]+(inst.input?inst.input.width():0)-(isFixed?scrollX:0)-inst.dpDiv.width()-(isFixed&&$.browser.opera?document.documentElement.scrollLeft:0))}else{offset.left-=(isFixed?scrollX:0)}if((offset.top+inst.dpDiv.height()-scrollY)>browserHeight){offset.top=Math.max((isFixed?0:scrollY),pos[1]-(isFixed?scrollY:0)-(this._inDialog?0:inst.dpDiv.height())-(isFixed&&$.browser.opera?document.documentElement.scrollTop:0))}else{offset.top-=(isFixed?scrollY:0)}return offset},_findPos:function(obj){while(obj&&(obj.type=="hidden"||obj.nodeType!=1)){obj=obj.nextSibling}var position=$(obj).offset();return[position.left,position.top]},_hideDatepicker:function(input,duration){var inst=this._curInst;if(!inst||(input&&inst!=$.data(input,PROP_NAME))){return}var rangeSelect=this._get(inst,"rangeSelect");if(rangeSelect&&inst.stayOpen){this._selectDate("#"+inst.id,this._formatDate(inst,inst.currentDay,inst.currentMonth,inst.currentYear))}inst.stayOpen=false;if(this._datepickerShowing){duration=(duration!=null?duration:this._get(inst,"duration"));var showAnim=this._get(inst,"showAnim");var postProcess=function(){$.datepicker._tidyDialog(inst)};if(duration!=""&&$.effects&&$.effects[showAnim]){inst.dpDiv.hide(showAnim,$.datepicker._get(inst,"showOptions"),duration,postProcess)}else{inst.dpDiv[(duration==""?"hide":(showAnim=="slideDown"?"slideUp":(showAnim=="fadeIn"?"fadeOut":"hide")))](duration,postProcess)}if(duration==""){this._tidyDialog(inst)}var onClose=this._get(inst,"onClose");if(onClose){onClose.apply((inst.input?inst.input[0]:null),[(inst.input?inst.input.val():""),inst])}this._datepickerShowing=false;this._lastInput=null;inst.settings.prompt=null;if(this._inDialog){this._dialogInput.css({position:"absolute",left:"0",top:"-100px"});if($.blockUI){$.unblockUI();$("body").append(this.dpDiv)}}this._inDialog=false}this._curInst=null},_tidyDialog:function(inst){inst.dpDiv.removeClass(this._dialogClass).unbind(".ui-datepicker");$("."+this._promptClass,inst.dpDiv).remove()},_checkExternalClick:function(event){if(!$.datepicker._curInst){return}var $target=$(event.target);if(($target.parents("#"+$.datepicker._mainDivId).length==0)&&!$target.hasClass($.datepicker.markerClassName)&&!$target.hasClass($.datepicker._triggerClass)&&$.datepicker._datepickerShowing&&!($.datepicker._inDialog&&$.blockUI)){$.datepicker._hideDatepicker(null,"")}}, +_adjustDate: + function(id,offset,period){ + var target=$(id); + var inst=this._getInst(target[0]); + this._adjustInstDate(inst,offset,period); + this._updateDatepicker(inst) +}, +_gotoToday: +function(id){ + var target=$(id); + var inst=this._getInst(target[0]); + inst.onChangeToday=true; + if(this._get(inst,"gotoCurrent")&&inst.currentDay){ + inst.selectedDay=inst.currentDay; + inst.drawMonth=inst.selectedMonth=inst.currentMonth; + inst.drawYear=inst.selectedYear=inst.currentYear + }else{ + var date=new Date(); + inst.selectedDay=date.getDate(); + inst.drawMonth=inst.selectedMonth=date.getMonth(); + inst.drawYear=inst.selectedYear=date.getFullYear(); + } + + + this._notifyChange(inst); + this._adjustDate(target); + + +} +, +_selectMonthYear: + function(id,select,period){var target=$(id);var inst=this._getInst(target[0]);inst._selectingMonthYear=false;inst["selected"+(period=="M"?"Month":"Year")]=inst["draw"+(period=="M"?"Month":"Year")]=parseInt(select.options[select.selectedIndex].value,10);this._notifyChange(inst);this._adjustDate(target)},_clickMonthYear:function(id){var target=$(id);var inst=this._getInst(target[0]);if(inst.input&&inst._selectingMonthYear&&!$.browser.msie){inst.input[0].focus()}inst._selectingMonthYear=!inst._selectingMonthYear},_changeFirstDay:function(id,day){var target=$(id);var inst=this._getInst(target[0]);inst.settings.firstDay=day;this._updateDatepicker(inst)},_selectDay:function(id,month,year,td){if($(td).hasClass(this._unselectableClass)){return}var target=$(id);var inst=this._getInst(target[0]);var rangeSelect=this._get(inst,"rangeSelect");if(rangeSelect){inst.stayOpen=!inst.stayOpen;if(inst.stayOpen){$(".ui-datepicker td",inst.dpDiv).removeClass(this._currentClass);$(td).addClass(this._currentClass)}}inst.selectedDay=inst.currentDay=$("a",td).html();inst.selectedMonth=inst.currentMonth=month;inst.selectedYear=inst.currentYear=year;if(inst.stayOpen){inst.endDay=inst.endMonth=inst.endYear=null}else{if(rangeSelect){inst.endDay=inst.currentDay;inst.endMonth=inst.currentMonth;inst.endYear=inst.currentYear}}this._selectDate(id,this._formatDate(inst,inst.currentDay,inst.currentMonth,inst.currentYear));if(inst.stayOpen){inst.rangeStart=new Date(inst.currentYear,inst.currentMonth,inst.currentDay);this._updateDatepicker(inst)}else{if(rangeSelect){inst.selectedDay=inst.currentDay=inst.rangeStart.getDate();inst.selectedMonth=inst.currentMonth=inst.rangeStart.getMonth();inst.selectedYear=inst.currentYear=inst.rangeStart.getFullYear();inst.rangeStart=null;if(inst.inline){this._updateDatepicker(inst)}}}},_clearDate:function(id){var target=$(id);var inst=this._getInst(target[0]);if(this._get(inst,"mandatory")){return}inst.stayOpen=false;inst.endDay=inst.endMonth=inst.endYear=inst.rangeStart=null;this._selectDate(target,"")}, + _selectDate:function(id,dateStr){ + var target=$(id); + var inst=this._getInst(target[0]); + dateStr=(dateStr!=null?dateStr:this._formatDate(inst)); + if(this._get(inst,"rangeSelect")&&dateStr){ + dateStr=(inst.rangeStart?this._formatDate(inst,inst.rangeStart):dateStr)+this._get(inst,"rangeSeparator")+dateStr}if(inst.input){inst.input.val(dateStr)}this._updateAlternate(inst); + + var onSelect=this._get(inst,"onSelect"); + if(onSelect){ + onSelect.apply((inst.input?inst.input[0]:null),[dateStr,inst]) + }else{ + if(inst.input){ + inst.input.trigger("change")} + } + + if(inst.inline){ + this._updateDatepicker(inst)}else{if(!inst.stayOpen){this._hideDatepicker(null,this._get(inst,"duration"));this._lastInput=inst.input[0];if(typeof(inst.input[0])!="object"){inst.input[0].focus()}this._lastInput=null}}},_updateAlternate:function(inst){var altField=this._get(inst,"altField");if(altField){var altFormat=this._get(inst,"altFormat");var date=this._getDate(inst); + dateStr=(isArray(date)?(!date[0]&&!date[1]?"":this.formatDate(altFormat,date[0],this._getFormatConfig(inst))+this._get(inst,"rangeSeparator")+this.formatDate(altFormat,date[1]||date[0],this._getFormatConfig(inst))):this.formatDate(altFormat,date,this._getFormatConfig(inst))); + $(altField).each(function(){$(this).val(dateStr)})}},noWeekends:function(date){var day=date.getDay();return[(day>0&&day<6),""]},iso8601Week:function(date){var checkDate=new Date(date.getFullYear(),date.getMonth(),date.getDate(),(date.getTimezoneOffset()/-60));var firstMon=new Date(checkDate.getFullYear(),1-1,4);var firstDay=firstMon.getDay()||7;firstMon.setDate(firstMon.getDate()+1-firstDay);if(firstDay<4&&checkDatenew Date(checkDate.getFullYear(),12-1,28)){firstDay=new Date(checkDate.getFullYear()+1,1-1,4).getDay()||7;if(firstDay>4&&(checkDate.getDay()||7)0&&iValue="0"&&value.charAt(iValue)<="9"){num=num*10+parseInt(value.charAt(iValue++),10);size--}if(size==origSize){throw"Missing number at position "+iValue}return num};var getName=function(match,shortNames,longNames){var names=(lookAhead(match)?longNames:shortNames);var size=0;for(var j=0;j0&&iValue-1){month=1;day=doy;do{var dim=this._getDaysInMonth(year,month-1);if(day<=dim){break}month++;day-=dim}while(true)}var date=new Date(year,month-1,day);if(date.getFullYear()!=year||date.getMonth()+1!=month||date.getDate()!=day){throw"Invalid date"}return date},ATOM:"yy-mm-dd",COOKIE:"D, dd M yy",ISO_8601:"yy-mm-dd",RFC_822:"D, d M y",RFC_850:"DD, dd-M-y",RFC_1036:"D, d M y",RFC_1123:"D, d M yy",RFC_2822:"D, d M yy",RSS:"D, d M y",TIMESTAMP:"@",W3C:"yy-mm-dd",formatDate:function(format,date,settings){if(!date){return""}var dayNamesShort=(settings?settings.dayNamesShort:null)||this._defaults.dayNamesShort;var dayNames=(settings?settings.dayNames:null)||this._defaults.dayNames;var monthNamesShort=(settings?settings.monthNamesShort:null)||this._defaults.monthNamesShort;var monthNames=(settings?settings.monthNames:null)||this._defaults.monthNames;var lookAhead=function(match){var matches=(iFormat+1=0;m--){doy+=this._getDaysInMonth(date.getFullYear(),m)}output+=formatNumber("o",doy,3);break;case"m":output+=formatNumber("m",date.getMonth()+1,2);break;case"M":output+=formatName("M",date.getMonth(),monthNamesShort,monthNames);break;case"y":output+=(lookAhead("y")?date.getFullYear():(date.getYear()%100<10?"0":"")+date.getYear()%100);break;case"@":output+=date.getTime();break;case"'":if(lookAhead("'")){output+="'"}else{literal=true}break;default:output+=format.charAt(iFormat)}}}}return output},_possibleChars:function(format){var chars="";var literal=false;for(var iFormat=0;iFormat0){var settings=this._getFormatConfig(inst);if(dates.length>1){date=this.parseDate(dateFormat,dates[1],settings)||defaultDate;inst.endDay=date.getDate();inst.endMonth=date.getMonth();inst.endYear=date.getFullYear()}try{date=this.parseDate(dateFormat,dates[0],settings)||defaultDate}catch(e){this.log(e);date=defaultDate}}inst.selectedDay=date.getDate();inst.drawMonth=inst.selectedMonth=date.getMonth();inst.drawYear=inst.selectedYear=date.getFullYear();inst.currentDay=(dates[0]?date.getDate():0);inst.currentMonth=(dates[0]?date.getMonth():0);inst.currentYear=(dates[0]?date.getFullYear():0);this._adjustInstDate(inst)},_getDefaultDate:function(inst){var date=this._determineDate(this._get(inst,"defaultDate"),new Date());var minDate=this._getMinMaxDate(inst,"min",true);var maxDate=this._getMinMaxDate(inst,"max");date=(minDate&&datemaxDate?maxDate:date);return date},_determineDate:function(date,defaultDate){var offsetNumeric=function(offset){var date=new Date();date.setUTCDate(date.getUTCDate()+offset);return date};var offsetString=function(offset,getDaysInMonth){var date=new Date();var year=date.getFullYear();var month=date.getMonth();var day=date.getDate();var pattern=/([+-]?[0-9]+)\s*(d|D|w|W|m|M|y|Y)?/g;var matches=pattern.exec(offset);while(matches){switch(matches[2]||"d"){case"d":case"D":day+=parseInt(matches[1],10);break;case"w":case"W":day+=parseInt(matches[1],10)*7;break;case"m":case"M":month+=parseInt(matches[1],10);day=Math.min(day,getDaysInMonth(year,month));break;case"y":case"Y":year+=parseInt(matches[1],10);day=Math.min(day,getDaysInMonth(year,month));break}matches=pattern.exec(offset)}return new Date(year,month,day)};date=(date==null?defaultDate:(typeof date=="string"?offsetString(date,this._getDaysInMonth):(typeof date=="number"?(isNaN(date)?defaultDate:offsetNumeric(date)):date)));return(date&&date.toString()=="Invalid Date"?defaultDate:date)},_setDate:function(inst,date,endDate){var clear=!(date);var origMonth=inst.selectedMonth;var origYear=inst.selectedYear;date=this._determineDate(date,new Date());inst.selectedDay=inst.currentDay=date.getDate();inst.drawMonth=inst.selectedMonth=inst.currentMonth=date.getMonth();inst.drawYear=inst.selectedYear=inst.currentYear=date.getFullYear();if(this._get(inst,"rangeSelect")){if(endDate){endDate=this._determineDate(endDate,null);inst.endDay=endDate.getDate();inst.endMonth=endDate.getMonth();inst.endYear=endDate.getFullYear()}else{inst.endDay=inst.currentDay;inst.endMonth=inst.currentMonth;inst.endYear=inst.currentYear}}if(origMonth!=inst.selectedMonth||origYear!=inst.selectedYear){this._notifyChange(inst)}this._adjustInstDate(inst);if(inst.input){inst.input.val(clear?"":this._formatDate(inst)+(!this._get(inst,"rangeSelect")?"":this._get(inst,"rangeSeparator")+this._formatDate(inst,inst.endDay,inst.endMonth,inst.endYear)))}},_getDate:function(inst){var startDate=(!inst.currentYear||(inst.input&&inst.input.val()=="")?null:new Date(inst.currentYear,inst.currentMonth,inst.currentDay));if(this._get(inst,"rangeSelect")){return[inst.rangeStart||startDate,(!inst.endYear?inst.rangeStart||startDate:new Date(inst.endYear,inst.endMonth,inst.endDay))]}else{return startDate}},_generateHTML:function(inst){var today=new Date();today=new Date(today.getFullYear(),today.getMonth(),today.getDate());var showStatus=this._get(inst,"showStatus");var initStatus=this._get(inst,"initStatus")||" ";var isRTL=this._get(inst,"isRTL");var clear=(this._get(inst,"mandatory")?"":'");var controls='
'+(isRTL?"":clear)+'"+(isRTL?clear:"")+"
";var prompt=this._get(inst,"prompt");var closeAtTop=this._get(inst,"closeAtTop");var hideIfNoPrevNext=this._get(inst,"hideIfNoPrevNext");var navigationAsDateFormat=this._get(inst,"navigationAsDateFormat");var showBigPrevNext=this._get(inst,"showBigPrevNext");var numMonths=this._getNumberOfMonths(inst);var showCurrentAtPos=this._get(inst,"showCurrentAtPos");var stepMonths=this._get(inst,"stepMonths");var stepBigMonths=this._get(inst,"stepBigMonths");var isMultiMonth=(numMonths[0]!=1||numMonths[1]!=1);var currentDate=(!inst.currentDay?new Date(9999,9,9):new Date(inst.currentYear,inst.currentMonth,inst.currentDay));var minDate=this._getMinMaxDate(inst,"min",true);var maxDate=this._getMinMaxDate(inst,"max");var drawMonth=inst.drawMonth-showCurrentAtPos;var drawYear=inst.drawYear;if(drawMonth<0){drawMonth+=12;drawYear--}if(maxDate){var maxDraw=new Date(maxDate.getFullYear(),maxDate.getMonth()-numMonths[1]+1,maxDate.getDate());maxDraw=(minDate&&maxDrawmaxDraw){drawMonth--;if(drawMonth<0){drawMonth=11;drawYear--}}}var prevText=this._get(inst,"prevText");prevText=(!navigationAsDateFormat?prevText:this.formatDate(prevText,new Date(drawYear,drawMonth-stepMonths,1),this._getFormatConfig(inst)));var prevBigText=(showBigPrevNext?this._get(inst,"prevBigText"):"");prevBigText=(!navigationAsDateFormat?prevBigText:this.formatDate(prevBigText,new Date(drawYear,drawMonth-stepBigMonths,1),this._getFormatConfig(inst)));var prev='
'+(this._canAdjustMonth(inst,-1,drawYear,drawMonth)?(showBigPrevNext?""+prevBigText+"":"")+""+prevText+"":(hideIfNoPrevNext?"":""))+"
";var nextText=this._get(inst,"nextText");nextText=(!navigationAsDateFormat?nextText:this.formatDate(nextText,new Date(drawYear,drawMonth+stepMonths,1),this._getFormatConfig(inst)));var nextBigText=(showBigPrevNext?this._get(inst,"nextBigText"):"");nextBigText=(!navigationAsDateFormat?nextBigText:this.formatDate(nextBigText,new Date(drawYear,drawMonth+stepBigMonths,1),this._getFormatConfig(inst)));var next='
'+(this._canAdjustMonth(inst,+1,drawYear,drawMonth)?""+nextText+""+(showBigPrevNext?""+nextBigText+"":""):(hideIfNoPrevNext?"":""))+"
";var currentText=this._get(inst,"currentText");var gotoDate=(this._get(inst,"gotoCurrent")&&inst.currentDay?currentDate:today);currentText=(!navigationAsDateFormat?currentText:this.formatDate(currentText,gotoDate,this._getFormatConfig(inst))); + +var html=(prompt?'
'+ + prompt+ + "
":"")+ + (closeAtTop&&!inst.inline?controls:"")+ + '"; + +var firstDay=this._get(inst,"firstDay");var changeFirstDay=this._get(inst,"changeFirstDay");var dayNames=this._get(inst,"dayNames");var dayNamesShort=this._get(inst,"dayNamesShort");var dayNamesMin=this._get(inst,"dayNamesMin");var monthNames=this._get(inst,"monthNames");var beforeShowDay=this._get(inst,"beforeShowDay");var highlightWeek=this._get(inst,"highlightWeek");var showOtherMonths=this._get(inst,"showOtherMonths");var showWeeks=this._get(inst,"showWeeks");var calculateWeek=this._get(inst,"calculateWeek")||this.iso8601Week;var weekStatus=this._get(inst,"weekStatus");var status=(showStatus?this._get(inst,"dayStatus")||initStatus:"");var dateStatus=this._get(inst,"statusForDate")||this.dateStatus;var endDate=inst.endDay?new Date(inst.endYear,inst.endMonth,inst.endDay):currentDate;for(var row=0;row'+this._generateMonthYearHeader(inst,drawMonth,drawYear,minDate,maxDate,selectedDate,row>0||col>0,showStatus,initStatus,monthNames)+''+(showWeeks?""+this._get(inst,"weekHeader")+"":"");for(var dow=0;dow<7;dow++){var day=(dow+firstDay)%7;var dayStatus=(status.indexOf("DD")>-1?status.replace(/DD/,dayNames[day]):status.replace(/D/,dayNamesShort[day]));html+="=5?' class="ui-datepicker-week-end-cell"':"")+">"+(!changeFirstDay?"'+dayNamesMin[day]+(changeFirstDay?"":"")+""}html+="";var daysInMonth=this._getDaysInMonth(drawYear,drawMonth);if(drawYear==inst.selectedYear&&drawMonth==inst.selectedMonth){inst.selectedDay=Math.min(inst.selectedDay,daysInMonth)}var leadDays=(this._getFirstDayOfMonth(drawYear,drawMonth)-firstDay+7)%7;var tzDate=new Date(drawYear,drawMonth,1-leadDays);var utcDate=new Date(drawYear,drawMonth,1-leadDays);var printDate=utcDate;var numRows=(isMultiMonth?6:Math.ceil((leadDays+daysInMonth)/7));for(var dRow=0;dRow'+(showWeeks?'":"");for(var dow=0;dow<7;dow++){var daySettings=(beforeShowDay?beforeShowDay.apply((inst.input?inst.input[0]:null),[printDate]):[true,""]);var otherMonth=(printDate.getMonth()!=drawMonth);var unselectable=otherMonth||!daySettings[0]||(minDate&&printDatemaxDate);html+='";tzDate.setDate(tzDate.getDate()+1);utcDate.setUTCDate(utcDate.getUTCDate()+1);printDate=(tzDate>utcDate?tzDate:utcDate)}html+=""}drawMonth++;if(drawMonth>11){drawMonth=0;drawYear++}html+="
"+calculateWeek(printDate)+"=currentDate.getTime()&&printDate.getTime()<=endDate.getTime()?" "+this._currentClass:"")+(printDate.getTime()==today.getTime()?" ui-datepicker-today":""))+'"'+((!otherMonth||showOtherMonths)&&daySettings[2]?' title="'+daySettings[2]+'"':"")+(unselectable?(highlightWeek?" onmouseover=\"jQuery(this).parent().addClass('ui-datepicker-week-over');\" onmouseout=\"jQuery(this).parent().removeClass('ui-datepicker-week-over');\"":""):" onmouseover=\"jQuery(this).addClass('ui-datepicker-days-cell-over')"+(highlightWeek?".parent().addClass('ui-datepicker-week-over')":"")+";"+(!showStatus||(otherMonth&&!showOtherMonths)?"":"jQuery('#ui-datepicker-status-"+inst.id+"').html('"+(dateStatus.apply((inst.input?inst.input[0]:null),[printDate,inst])||initStatus)+"');")+"\" onmouseout=\"jQuery(this).removeClass('ui-datepicker-days-cell-over')"+(highlightWeek?".parent().removeClass('ui-datepicker-week-over')":"")+";"+(!showStatus||(otherMonth&&!showOtherMonths)?"":"jQuery('#ui-datepicker-status-"+inst.id+"').html('"+initStatus+"');")+'" onclick="jQuery.datepicker._selectDay(\'#'+inst.id+"',"+drawMonth+","+drawYear+', this);"')+">"+(otherMonth?(showOtherMonths?printDate.getDate():" "):(unselectable?printDate.getDate():""+printDate.getDate()+""))+"
"}}html+=(showStatus?'
'+initStatus+"
":"")+(!closeAtTop&&!inst.inline?controls:"")+'
'+($.browser.msie&&parseInt($.browser.version,10)<7&&!inst.inline?'':"");return html},_generateMonthYearHeader:function(inst,drawMonth,drawYear,minDate,maxDate,selectedDate,secondary,showStatus,initStatus,monthNames){minDate=(inst.rangeStart&&minDate&&selectedDate";for(var month=0;month<12;month++){if((!inMinYear||month>=minDate.getMonth())&&(!inMaxYear||month<=maxDate.getMonth())){monthHtml+='"}}monthHtml+=""}if(!showMonthAfterYear){html+=monthHtml}if(secondary||!this._get(inst,"changeYear")){html+=drawYear}else{var years=this._get(inst,"yearRange").split(":");var year=0;var endYear=0;if(years.length!=2){year=drawYear-10;endYear=drawYear+10}else{if(years[0].charAt(0)=="+"||years[0].charAt(0)=="-"){year=endYear=new Date().getFullYear();year+=parseInt(years[0],10);endYear+=parseInt(years[1],10)}else{year=parseInt(years[0],10);endYear=parseInt(years[1],10)}}year=(minDate?Math.max(year,minDate.getFullYear()):year);endYear=(maxDate?Math.min(endYear,maxDate.getFullYear()):endYear);html+='"}if(showMonthAfterYear){html+=monthHtml}html+="";return html},_addStatus:function(showStatus,id,text,initStatus){return(showStatus?" onmouseover=\"jQuery('#ui-datepicker-status-"+id+"').html('"+(text||initStatus)+"');\" onmouseout=\"jQuery('#ui-datepicker-status-"+id+"').html('"+initStatus+"');\"":"")},_adjustInstDate:function(inst,offset,period){var year=inst.drawYear+(period=="Y"?offset:0);var month=inst.drawMonth+(period=="M"?offset:0);var day=Math.min(inst.selectedDay,this._getDaysInMonth(year,month))+(period=="D"?offset:0);var date=new Date(year,month,day);var minDate=this._getMinMaxDate(inst,"min",true);var maxDate=this._getMinMaxDate(inst,"max");date=(minDate&&datemaxDate?maxDate:date);inst.selectedDay=date.getDate();inst.drawMonth=inst.selectedMonth=date.getMonth();inst.drawYear=inst.selectedYear=date.getFullYear();if(period=="M"||period=="Y"){this._notifyChange(inst)}}, +_notifyChange: + function(inst){ + var onChange=this._get(inst,"onChangeMonthYear"); + if(onChange){ + onChange.apply( + (inst.input?inst.input[0]:null), + [inst.selectedYear,inst.selectedMonth+1,inst] + ) + } + } +, +_getNumberOfMonths:function(inst){var numMonths=this._get(inst,"numberOfMonths");return(numMonths==null?[1,1]:(typeof numMonths=="number"?[1,numMonths]:numMonths))},_getMinMaxDate:function(inst,minMax,checkRange){var date=this._determineDate(this._get(inst,minMax+"Date"),null);if(date){date.setHours(0);date.setMinutes(0);date.setSeconds(0);date.setMilliseconds(0)}return(!checkRange||!inst.rangeStart?date:(!date||inst.rangeStart>date?inst.rangeStart:date))},_getDaysInMonth:function(year,month){return 32-new Date(year,month,32).getDate()},_getFirstDayOfMonth:function(year,month){return new Date(year,month,1).getDay()},_canAdjustMonth:function(inst,offset,curYear,curMonth){var numMonths=this._getNumberOfMonths(inst);var date=new Date(curYear,curMonth+(offset<0?offset:numMonths[1]),1);if(offset<0){date.setDate(this._getDaysInMonth(date.getFullYear(),date.getMonth()))}return this._isInRange(inst,date)},_isInRange:function(inst,date){var newMinDate=(!inst.rangeStart?null:new Date(inst.selectedYear,inst.selectedMonth,inst.selectedDay));newMinDate=(newMinDate&&inst.rangeStart=minDate)&&(!maxDate||date<=maxDate))},_getFormatConfig:function(inst){var shortYearCutoff=this._get(inst,"shortYearCutoff");shortYearCutoff=(typeof shortYearCutoff!="string"?shortYearCutoff:new Date().getFullYear()%100+parseInt(shortYearCutoff,10));return{shortYearCutoff:shortYearCutoff,dayNamesShort:this._get(inst,"dayNamesShort"),dayNames:this._get(inst,"dayNames"),monthNamesShort:this._get(inst,"monthNamesShort"),monthNames:this._get(inst,"monthNames")}},_formatDate:function(inst,day,month,year){if(!day){inst.currentDay=inst.selectedDay;inst.currentMonth=inst.selectedMonth;inst.currentYear=inst.selectedYear}var date=(day?(typeof day=="object"?day:new Date(year,month,day)):new Date(inst.currentYear,inst.currentMonth,inst.currentDay));return this.formatDate(this._get(inst,"dateFormat"),date,this._getFormatConfig(inst))}});function extendRemove(target,props){$.extend(target,props);for(var name in props){if(props[name]==null||props[name]==undefined){target[name]=props[name]}}return target}function isArray(a){return(a&&(($.browser.safari&&typeof a=="object"&&a.length)||(a.constructor&&a.constructor.toString().match(/\Array\(\)/))))}$.fn.datepicker=function(options){if(!$.datepicker.initialized){$(document.body).append($.datepicker.dpDiv).mousedown($.datepicker._checkExternalClick);$.datepicker.initialized=true}var otherArgs=Array.prototype.slice.call(arguments,1);if(typeof options=="string"&&(options=="isDisabled"||options=="getDate")){return $.datepicker["_"+options+"Datepicker"].apply($.datepicker,[this[0]].concat(otherArgs))}return this.each(function(){typeof options=="string"?$.datepicker["_"+options+"Datepicker"].apply($.datepicker,[this].concat(otherArgs)):$.datepicker._attachDatepicker(this,options)})};$.datepicker=new Datepicker();$.datepicker.initialized=false;$.datepicker.uuid=new Date().getTime()})(jQuery) diff --git a/ui.datepicker.min.js b/ui.datepicker.min.js new file mode 100644 index 000000000..155949aad --- /dev/null +++ b/ui.datepicker.min.js @@ -0,0 +1,12 @@ +/* + * jQuery UI Datepicker 1.7.2 + * + * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT (MIT-LICENSE.txt) + * and GPL (GPL-LICENSE.txt) licenses. + * + * http://docs.jquery.com/UI/Datepicker + * + * Depends: + * ui.core.js + */ (function($){$.extend($.ui,{datepicker:{version:"1.7.2"}});var PROP_NAME="datepicker";function Datepicker(){this.debug=false;this._curInst=null;this._keyEvent=false;this._disabledInputs=[];this._datepickerShowing=false;this._inDialog=false;this._mainDivId="ui-datepicker-div";this._inlineClass="ui-datepicker-inline";this._appendClass="ui-datepicker-append";this._triggerClass="ui-datepicker-trigger";this._dialogClass="ui-datepicker-dialog";this._disableClass="ui-datepicker-disabled";this._unselectableClass="ui-datepicker-unselectable";this._currentClass="ui-datepicker-current-day";this._dayOverClass="ui-datepicker-days-cell-over";this.regional=[];this.regional[""]={closeText:"Done",prevText:"Prev",nextText:"Next",currentText:"Today",monthNames:["January","February","March","April","May","June","July","August","September","October","November","December"],monthNamesShort:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],dayNames:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],dayNamesShort:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],dayNamesMin:["Su","Mo","Tu","We","Th","Fr","Sa"],dateFormat:"mm/dd/yy",firstDay:0,isRTL:false};this._defaults={showOn:"focus",showAnim:"show",showOptions:{},defaultDate:null,appendText:"",buttonText:"...",buttonImage:"",buttonImageOnly:false,hideIfNoPrevNext:false,navigationAsDateFormat:false,gotoCurrent:false,changeMonth:false,changeYear:false,showMonthAfterYear:false,yearRange:"-10:+10",showOtherMonths:false,calculateWeek:this.iso8601Week,shortYearCutoff:"+10",minDate:null,maxDate:null,duration:"normal",beforeShowDay:null,beforeShow:null,onSelect:null,onChangeMonthYear:null,onClose:null,numberOfMonths:1,showCurrentAtPos:0,stepMonths:1,stepBigMonths:12,altField:"",altFormat:"",constrainInput:true,showButtonPanel:false};$.extend(this._defaults,this.regional[""]);this.dpDiv=$('
')}$.extend(Datepicker.prototype,{markerClassName:"hasDatepicker",log:function(){if(this.debug){console.log.apply("",arguments)}},setDefaults:function(settings){extendRemove(this._defaults,settings||{});return this},_attachDatepicker:function(target,settings){var inlineSettings=null;for(var attrName in this._defaults){var attrValue=target.getAttribute("date:"+attrName);if(attrValue){inlineSettings=inlineSettings||{};try{inlineSettings[attrName]=eval(attrValue)}catch(err){inlineSettings[attrName]=attrValue}}}var nodeName=target.nodeName.toLowerCase();var inline=(nodeName=="div"||nodeName=="span");if(!target.id){target.id="dp"+(++this.uuid)}var inst=this._newInst($(target),inline);inst.settings=$.extend({},settings||{},inlineSettings||{});if(nodeName=="input"){this._connectDatepicker(target,inst)}else{if(inline){this._inlineDatepicker(target,inst)}}},_newInst:function(target,inline){var id=target[0].id.replace(/([:\[\]\.])/g,"\\\\$1");return{id:id,input:target,selectedDay:0,selectedMonth:0,selectedYear:0,drawMonth:0,drawYear:0,inline:inline,dpDiv:(!inline?this.dpDiv:$('
'))}},_connectDatepicker:function(target,inst){var input=$(target);inst.append=$([]);inst.trigger=$([]);if(input.hasClass(this.markerClassName)){return}var appendText=this._get(inst,"appendText");var isRTL=this._get(inst,"isRTL");if(appendText){inst.append=$(''+appendText+"");input[isRTL?"before":"after"](inst.append)}var showOn=this._get(inst,"showOn");if(showOn=="focus"||showOn=="both"){input.focus(this._showDatepicker)}if(showOn=="button"||showOn=="both"){var buttonText=this._get(inst,"buttonText");var buttonImage=this._get(inst,"buttonImage");inst.trigger=$(this._get(inst,"buttonImageOnly")?$("").addClass(this._triggerClass).attr({src:buttonImage,alt:buttonText,title:buttonText}):$('').addClass(this._triggerClass).html(buttonImage==""?buttonText:$("").attr({src:buttonImage,alt:buttonText,title:buttonText})));input[isRTL?"before":"after"](inst.trigger);inst.trigger.click(function(){if($.datepicker._datepickerShowing&&$.datepicker._lastInput==target){$.datepicker._hideDatepicker()}else{$.datepicker._showDatepicker(target)}return false})}input.addClass(this.markerClassName).keydown(this._doKeyDown).keypress(this._doKeyPress).bind("setData.datepicker",function(event,key,value){inst.settings[key]=value}).bind("getData.datepicker",function(event,key){return this._get(inst,key)});$.data(target,PROP_NAME,inst)},_inlineDatepicker:function(target,inst){var divSpan=$(target);if(divSpan.hasClass(this.markerClassName)){return}divSpan.addClass(this.markerClassName).append(inst.dpDiv).bind("setData.datepicker",function(event,key,value){inst.settings[key]=value}).bind("getData.datepicker",function(event,key){return this._get(inst,key)});$.data(target,PROP_NAME,inst);this._setDate(inst,this._getDefaultDate(inst));this._updateDatepicker(inst);this._updateAlternate(inst)},_dialogDatepicker:function(input,dateText,onSelect,settings,pos){var inst=this._dialogInst;if(!inst){var id="dp"+(++this.uuid);this._dialogInput=$('');this._dialogInput.keydown(this._doKeyDown);$("body").append(this._dialogInput);inst=this._dialogInst=this._newInst(this._dialogInput,false);inst.settings={};$.data(this._dialogInput[0],PROP_NAME,inst)}extendRemove(inst.settings,settings||{});this._dialogInput.val(dateText);this._pos=(pos?(pos.length?pos:[pos.pageX,pos.pageY]):null);if(!this._pos){var browserWidth=window.innerWidth||document.documentElement.clientWidth||document.body.clientWidth;var browserHeight=window.innerHeight||document.documentElement.clientHeight||document.body.clientHeight;var scrollX=document.documentElement.scrollLeft||document.body.scrollLeft;var scrollY=document.documentElement.scrollTop||document.body.scrollTop;this._pos=[(browserWidth/2)-100+scrollX,(browserHeight/2)-150+scrollY]}this._dialogInput.css("left",this._pos[0]+"px").css("top",this._pos[1]+"px");inst.settings.onSelect=onSelect;this._inDialog=true;this.dpDiv.addClass(this._dialogClass);this._showDatepicker(this._dialogInput[0]);if($.blockUI){$.blockUI(this.dpDiv)}$.data(this._dialogInput[0],PROP_NAME,inst);return this},_destroyDatepicker:function(target){var $target=$(target);var inst=$.data(target,PROP_NAME);if(!$target.hasClass(this.markerClassName)){return}var nodeName=target.nodeName.toLowerCase();$.removeData(target,PROP_NAME);if(nodeName=="input"){inst.append.remove();inst.trigger.remove();$target.removeClass(this.markerClassName).unbind("focus",this._showDatepicker).unbind("keydown",this._doKeyDown).unbind("keypress",this._doKeyPress)}else{if(nodeName=="div"||nodeName=="span"){$target.removeClass(this.markerClassName).empty()}}},_enableDatepicker:function(target){var $target=$(target);var inst=$.data(target,PROP_NAME);if(!$target.hasClass(this.markerClassName)){return}var nodeName=target.nodeName.toLowerCase();if(nodeName=="input"){target.disabled=false;inst.trigger.filter("button").each(function(){this.disabled=false}).end().filter("img").css({opacity:"1.0",cursor:""})}else{if(nodeName=="div"||nodeName=="span"){var inline=$target.children("."+this._inlineClass);inline.children().removeClass("ui-state-disabled")}}this._disabledInputs=$.map(this._disabledInputs,function(value){return(value==target?null:value)})},_disableDatepicker:function(target){var $target=$(target);var inst=$.data(target,PROP_NAME);if(!$target.hasClass(this.markerClassName)){return}var nodeName=target.nodeName.toLowerCase();if(nodeName=="input"){target.disabled=true;inst.trigger.filter("button").each(function(){this.disabled=true}).end().filter("img").css({opacity:"0.5",cursor:"default"})}else{if(nodeName=="div"||nodeName=="span"){var inline=$target.children("."+this._inlineClass);inline.children().addClass("ui-state-disabled")}}this._disabledInputs=$.map(this._disabledInputs,function(value){return(value==target?null:value)});this._disabledInputs[this._disabledInputs.length]=target},_isDisabledDatepicker:function(target){if(!target){return false}for(var i=0;i-1)}},_showDatepicker:function(input){input=input.target||input;if(input.nodeName.toLowerCase()!="input"){input=$("input",input.parentNode)[0]}if($.datepicker._isDisabledDatepicker(input)||$.datepicker._lastInput==input){return}var inst=$.datepicker._getInst(input);var beforeShow=$.datepicker._get(inst,"beforeShow");extendRemove(inst.settings,(beforeShow?beforeShow.apply(input,[input,inst]):{}));$.datepicker._hideDatepicker(null,"");$.datepicker._lastInput=input;$.datepicker._setDateFromField(inst);if($.datepicker._inDialog){input.value=""}if(!$.datepicker._pos){$.datepicker._pos=$.datepicker._findPos(input);$.datepicker._pos[1]+=input.offsetHeight}var isFixed=false;$(input).parents().each(function(){isFixed|=$(this).css("position")=="fixed";return !isFixed});if(isFixed&&$.browser.opera){$.datepicker._pos[0]-=document.documentElement.scrollLeft;$.datepicker._pos[1]-=document.documentElement.scrollTop}var offset={left:$.datepicker._pos[0],top:$.datepicker._pos[1]};$.datepicker._pos=null;inst.rangeStart=null;inst.dpDiv.css({position:"absolute",display:"block",top:"-1000px"});$.datepicker._updateDatepicker(inst);offset=$.datepicker._checkOffset(inst,offset,isFixed);inst.dpDiv.css({position:($.datepicker._inDialog&&$.blockUI?"static":(isFixed?"fixed":"absolute")),display:"none",left:offset.left+"px",top:offset.top+"px"});if(!inst.inline){var showAnim=$.datepicker._get(inst,"showAnim")||"show";var duration=$.datepicker._get(inst,"duration");var postProcess=function(){$.datepicker._datepickerShowing=true;if($.browser.msie&&parseInt($.browser.version,10)<7){$("iframe.ui-datepicker-cover").css({width:inst.dpDiv.width()+4,height:inst.dpDiv.height()+4})}};if($.effects&&$.effects[showAnim]){inst.dpDiv.show(showAnim,$.datepicker._get(inst,"showOptions"),duration,postProcess)}else{inst.dpDiv[showAnim](duration,postProcess)}if(duration==""){postProcess()}if(inst.input[0].type!="hidden"){inst.input[0].focus()}$.datepicker._curInst=inst}},_updateDatepicker:function(inst){var dims={width:inst.dpDiv.width()+4,height:inst.dpDiv.height()+4};var self=this;inst.dpDiv.empty().append(this._generateHTML(inst)).find("iframe.ui-datepicker-cover").css({width:dims.width,height:dims.height}).end().find("button, .ui-datepicker-prev, .ui-datepicker-next, .ui-datepicker-calendar td a").bind("mouseout",function(){$(this).removeClass("ui-state-hover");if(this.className.indexOf("ui-datepicker-prev")!=-1){$(this).removeClass("ui-datepicker-prev-hover")}if(this.className.indexOf("ui-datepicker-next")!=-1){$(this).removeClass("ui-datepicker-next-hover")}}).bind("mouseover",function(){if(!self._isDisabledDatepicker(inst.inline?inst.dpDiv.parent()[0]:inst.input[0])){$(this).parents(".ui-datepicker-calendar").find("a").removeClass("ui-state-hover");$(this).addClass("ui-state-hover");if(this.className.indexOf("ui-datepicker-prev")!=-1){$(this).addClass("ui-datepicker-prev-hover")}if(this.className.indexOf("ui-datepicker-next")!=-1){$(this).addClass("ui-datepicker-next-hover")}}}).end().find("."+this._dayOverClass+" a").trigger("mouseover").end();var numMonths=this._getNumberOfMonths(inst);var cols=numMonths[1];var width=17;if(cols>1){inst.dpDiv.addClass("ui-datepicker-multi-"+cols).css("width",(width*cols)+"em")}else{inst.dpDiv.removeClass("ui-datepicker-multi-2 ui-datepicker-multi-3 ui-datepicker-multi-4").width("")}inst.dpDiv[(numMonths[0]!=1||numMonths[1]!=1?"add":"remove")+"Class"]("ui-datepicker-multi");inst.dpDiv[(this._get(inst,"isRTL")?"add":"remove")+"Class"]("ui-datepicker-rtl");if(inst.input&&inst.input[0].type!="hidden"&&inst==$.datepicker._curInst){$(inst.input[0]).focus()}},_checkOffset:function(inst,offset,isFixed){var dpWidth=inst.dpDiv.outerWidth();var dpHeight=inst.dpDiv.outerHeight();var inputWidth=inst.input?inst.input.outerWidth():0;var inputHeight=inst.input?inst.input.outerHeight():0;var viewWidth=(window.innerWidth||document.documentElement.clientWidth||document.body.clientWidth)+$(document).scrollLeft();var viewHeight=(window.innerHeight||document.documentElement.clientHeight||document.body.clientHeight)+$(document).scrollTop();offset.left-=(this._get(inst,"isRTL")?(dpWidth-inputWidth):0);offset.left-=(isFixed&&offset.left==inst.input.offset().left)?$(document).scrollLeft():0;offset.top-=(isFixed&&offset.top==(inst.input.offset().top+inputHeight))?$(document).scrollTop():0;offset.left-=(offset.left+dpWidth>viewWidth&&viewWidth>dpWidth)?Math.abs(offset.left+dpWidth-viewWidth):0;offset.top-=(offset.top+dpHeight>viewHeight&&viewHeight>dpHeight)?Math.abs(offset.top+dpHeight+inputHeight*2-viewHeight):0;return offset},_findPos:function(obj){while(obj&&(obj.type=="hidden"||obj.nodeType!=1)){obj=obj.nextSibling}var position=$(obj).offset();return[position.left,position.top]},_hideDatepicker:function(input,duration){var inst=this._curInst;if(!inst||(input&&inst!=$.data(input,PROP_NAME))){return}if(inst.stayOpen){this._selectDate("#"+inst.id,this._formatDate(inst,inst.currentDay,inst.currentMonth,inst.currentYear))}inst.stayOpen=false;if(this._datepickerShowing){duration=(duration!=null?duration:this._get(inst,"duration"));var showAnim=this._get(inst,"showAnim");var postProcess=function(){$.datepicker._tidyDialog(inst)};if(duration!=""&&$.effects&&$.effects[showAnim]){inst.dpDiv.hide(showAnim,$.datepicker._get(inst,"showOptions"),duration,postProcess)}else{inst.dpDiv[(duration==""?"hide":(showAnim=="slideDown"?"slideUp":(showAnim=="fadeIn"?"fadeOut":"hide")))](duration,postProcess)}if(duration==""){this._tidyDialog(inst)}var onClose=this._get(inst,"onClose");if(onClose){onClose.apply((inst.input?inst.input[0]:null),[(inst.input?inst.input.val():""),inst])}this._datepickerShowing=false;this._lastInput=null;if(this._inDialog){this._dialogInput.css({position:"absolute",left:"0",top:"-100px"});if($.blockUI){$.unblockUI();$("body").append(this.dpDiv)}}this._inDialog=false}this._curInst=null},_tidyDialog:function(inst){inst.dpDiv.removeClass(this._dialogClass).unbind(".ui-datepicker-calendar")},_checkExternalClick:function(event){if(!$.datepicker._curInst){return}var $target=$(event.target);if(($target.parents("#"+$.datepicker._mainDivId).length==0)&&!$target.hasClass($.datepicker.markerClassName)&&!$target.hasClass($.datepicker._triggerClass)&&$.datepicker._datepickerShowing&&!($.datepicker._inDialog&&$.blockUI)){$.datepicker._hideDatepicker(null,"")}},_adjustDate:function(id,offset,period){var target=$(id);var inst=this._getInst(target[0]);if(this._isDisabledDatepicker(target[0])){return}this._adjustInstDate(inst,offset+(period=="M"?this._get(inst,"showCurrentAtPos"):0),period);this._updateDatepicker(inst)},_gotoToday:function(id){var target=$(id);var inst=this._getInst(target[0]);if(this._get(inst,"gotoCurrent")&&inst.currentDay){inst.selectedDay=inst.currentDay;inst.drawMonth=inst.selectedMonth=inst.currentMonth;inst.drawYear=inst.selectedYear=inst.currentYear}else{var date=new Date();inst.selectedDay=date.getDate();inst.drawMonth=inst.selectedMonth=date.getMonth();inst.drawYear=inst.selectedYear=date.getFullYear()}this._notifyChange(inst);this._adjustDate(target)},_selectMonthYear:function(id,select,period){var target=$(id);var inst=this._getInst(target[0]);inst._selectingMonthYear=false;inst["selected"+(period=="M"?"Month":"Year")]=inst["draw"+(period=="M"?"Month":"Year")]=parseInt(select.options[select.selectedIndex].value,10);this._notifyChange(inst);this._adjustDate(target)},_clickMonthYear:function(id){var target=$(id);var inst=this._getInst(target[0]);if(inst.input&&inst._selectingMonthYear&&!$.browser.msie){inst.input[0].focus()}inst._selectingMonthYear=!inst._selectingMonthYear},_selectDay:function(id,month,year,td){var target=$(id);if($(td).hasClass(this._unselectableClass)||this._isDisabledDatepicker(target[0])){return}var inst=this._getInst(target[0]);inst.selectedDay=inst.currentDay=$("a",td).html();inst.selectedMonth=inst.currentMonth=month;inst.selectedYear=inst.currentYear=year;if(inst.stayOpen){inst.endDay=inst.endMonth=inst.endYear=null}this._selectDate(id,this._formatDate(inst,inst.currentDay,inst.currentMonth,inst.currentYear));if(inst.stayOpen){inst.rangeStart=this._daylightSavingAdjust(new Date(inst.currentYear,inst.currentMonth,inst.currentDay));this._updateDatepicker(inst)}},_clearDate:function(id){var target=$(id);var inst=this._getInst(target[0]);inst.stayOpen=false;inst.endDay=inst.endMonth=inst.endYear=inst.rangeStart=null;this._selectDate(target,"")},_selectDate:function(id,dateStr){var target=$(id);var inst=this._getInst(target[0]);dateStr=(dateStr!=null?dateStr:this._formatDate(inst));if(inst.input){inst.input.val(dateStr)}this._updateAlternate(inst);var onSelect=this._get(inst,"onSelect");if(onSelect){onSelect.apply((inst.input?inst.input[0]:null),[dateStr,inst])}else{if(inst.input){inst.input.trigger("change")}}if(inst.inline){this._updateDatepicker(inst)}else{if(!inst.stayOpen){this._hideDatepicker(null,this._get(inst,"duration"));this._lastInput=inst.input[0];if(typeof(inst.input[0])!="object"){inst.input[0].focus()}this._lastInput=null}}},_updateAlternate:function(inst){var altField=this._get(inst,"altField");if(altField){var altFormat=this._get(inst,"altFormat")||this._get(inst,"dateFormat");var date=this._getDate(inst);dateStr=this.formatDate(altFormat,date,this._getFormatConfig(inst));$(altField).each(function(){$(this).val(dateStr)})}},noWeekends:function(date){var day=date.getDay();return[(day>0&&day<6),""]},iso8601Week:function(date){var checkDate=new Date(date.getFullYear(),date.getMonth(),date.getDate());var firstMon=new Date(checkDate.getFullYear(),1-1,4);var firstDay=firstMon.getDay()||7;firstMon.setDate(firstMon.getDate()+1-firstDay);if(firstDay<4&&checkDatenew Date(checkDate.getFullYear(),12-1,28)){firstDay=new Date(checkDate.getFullYear()+1,1-1,4).getDay()||7;if(firstDay>4&&(checkDate.getDay()||7)0&&iValue="0"&&value.charAt(iValue)<="9"){num=num*10+parseInt(value.charAt(iValue++),10);size--}if(size==origSize){throw"Missing number at position "+iValue}return num};var getName=function(match,shortNames,longNames){var names=(lookAhead(match)?longNames:shortNames);var size=0;for(var j=0;j0&&iValue-1){month=1;day=doy;do{var dim=this._getDaysInMonth(year,month-1);if(day<=dim){break}month++;day-=dim}while(true)}var date=this._daylightSavingAdjust(new Date(year,month-1,day));if(date.getFullYear()!=year||date.getMonth()+1!=month||date.getDate()!=day){throw"Invalid date"}return date},ATOM:"yy-mm-dd",COOKIE:"D, dd M yy",ISO_8601:"yy-mm-dd",RFC_822:"D, d M y",RFC_850:"DD, dd-M-y",RFC_1036:"D, d M y",RFC_1123:"D, d M yy",RFC_2822:"D, d M yy",RSS:"D, d M y",TIMESTAMP:"@",W3C:"yy-mm-dd",formatDate:function(format,date,settings){if(!date){return""}var dayNamesShort=(settings?settings.dayNamesShort:null)||this._defaults.dayNamesShort;var dayNames=(settings?settings.dayNames:null)||this._defaults.dayNames;var monthNamesShort=(settings?settings.monthNamesShort:null)||this._defaults.monthNamesShort;var monthNames=(settings?settings.monthNames:null)||this._defaults.monthNames;var lookAhead=function(match){var matches=(iFormat+1=0;m--){doy+=this._getDaysInMonth(date.getFullYear(),m)}output+=formatNumber("o",doy,3);break;case"m":output+=formatNumber("m",date.getMonth()+1,2);break;case"M":output+=formatName("M",date.getMonth(),monthNamesShort,monthNames);break;case"y":output+=(lookAhead("y")?date.getFullYear():(date.getYear()%100<10?"0":"")+date.getYear()%100);break;case"@":output+=date.getTime();break;case"'":if(lookAhead("'")){output+="'"}else{literal=true}break;default:output+=format.charAt(iFormat)}}}}return output},_possibleChars:function(format){var chars="";var literal=false;for(var iFormat=0;iFormatmaxDate?maxDate:date);return date},_determineDate:function(date,defaultDate){var offsetNumeric=function(offset){var date=new Date();date.setDate(date.getDate()+offset);return date};var offsetString=function(offset,getDaysInMonth){var date=new Date();var year=date.getFullYear();var month=date.getMonth();var day=date.getDate();var pattern=/([+-]?[0-9]+)\s*(d|D|w|W|m|M|y|Y)?/g;var matches=pattern.exec(offset);while(matches){switch(matches[2]||"d"){case"d":case"D":day+=parseInt(matches[1],10);break;case"w":case"W":day+=parseInt(matches[1],10)*7;break;case"m":case"M":month+=parseInt(matches[1],10);day=Math.min(day,getDaysInMonth(year,month));break;case"y":case"Y":year+=parseInt(matches[1],10);day=Math.min(day,getDaysInMonth(year,month));break}matches=pattern.exec(offset)}return new Date(year,month,day)};date=(date==null?defaultDate:(typeof date=="string"?offsetString(date,this._getDaysInMonth):(typeof date=="number"?(isNaN(date)?defaultDate:offsetNumeric(date)):date)));date=(date&&date.toString()=="Invalid Date"?defaultDate:date);if(date){date.setHours(0);date.setMinutes(0);date.setSeconds(0);date.setMilliseconds(0)}return this._daylightSavingAdjust(date)},_daylightSavingAdjust:function(date){if(!date){return null}date.setHours(date.getHours()>12?date.getHours()+2:0);return date},_setDate:function(inst,date,endDate){var clear=!(date);var origMonth=inst.selectedMonth;var origYear=inst.selectedYear;date=this._determineDate(date,new Date());inst.selectedDay=inst.currentDay=date.getDate();inst.drawMonth=inst.selectedMonth=inst.currentMonth=date.getMonth();inst.drawYear=inst.selectedYear=inst.currentYear=date.getFullYear();if(origMonth!=inst.selectedMonth||origYear!=inst.selectedYear){this._notifyChange(inst)}this._adjustInstDate(inst);if(inst.input){inst.input.val(clear?"":this._formatDate(inst))}},_getDate:function(inst){var startDate=(!inst.currentYear||(inst.input&&inst.input.val()=="")?null:this._daylightSavingAdjust(new Date(inst.currentYear,inst.currentMonth,inst.currentDay)));return startDate},_generateHTML:function(inst){var today=new Date();today=this._daylightSavingAdjust(new Date(today.getFullYear(),today.getMonth(),today.getDate()));var isRTL=this._get(inst,"isRTL");var showButtonPanel=this._get(inst,"showButtonPanel");var hideIfNoPrevNext=this._get(inst,"hideIfNoPrevNext");var navigationAsDateFormat=this._get(inst,"navigationAsDateFormat");var numMonths=this._getNumberOfMonths(inst);var showCurrentAtPos=this._get(inst,"showCurrentAtPos");var stepMonths=this._get(inst,"stepMonths");var stepBigMonths=this._get(inst,"stepBigMonths");var isMultiMonth=(numMonths[0]!=1||numMonths[1]!=1);var currentDate=this._daylightSavingAdjust((!inst.currentDay?new Date(9999,9,9):new Date(inst.currentYear,inst.currentMonth,inst.currentDay)));var minDate=this._getMinMaxDate(inst,"min",true);var maxDate=this._getMinMaxDate(inst,"max");var drawMonth=inst.drawMonth-showCurrentAtPos;var drawYear=inst.drawYear;if(drawMonth<0){drawMonth+=12;drawYear--}if(maxDate){var maxDraw=this._daylightSavingAdjust(new Date(maxDate.getFullYear(),maxDate.getMonth()-numMonths[1]+1,maxDate.getDate()));maxDraw=(minDate&&maxDrawmaxDraw){drawMonth--;if(drawMonth<0){drawMonth=11;drawYear--}}}inst.drawMonth=drawMonth;inst.drawYear=drawYear;var prevText=this._get(inst,"prevText");prevText=(!navigationAsDateFormat?prevText:this.formatDate(prevText,this._daylightSavingAdjust(new Date(drawYear,drawMonth-stepMonths,1)),this._getFormatConfig(inst)));var prev=(this._canAdjustMonth(inst,-1,drawYear,drawMonth)?''+prevText+"":(hideIfNoPrevNext?"":''+prevText+""));var nextText=this._get(inst,"nextText");nextText=(!navigationAsDateFormat?nextText:this.formatDate(nextText,this._daylightSavingAdjust(new Date(drawYear,drawMonth+stepMonths,1)),this._getFormatConfig(inst)));var next=(this._canAdjustMonth(inst,+1,drawYear,drawMonth)?''+nextText+"":(hideIfNoPrevNext?"":''+nextText+""));var currentText=this._get(inst,"currentText");var gotoDate=(this._get(inst,"gotoCurrent")&&inst.currentDay?currentDate:today);currentText=(!navigationAsDateFormat?currentText:this.formatDate(currentText,gotoDate,this._getFormatConfig(inst)));var controls=(!inst.inline?'":"");var buttonPanel=(showButtonPanel)?'
'+(isRTL?controls:"")+(this._isInRange(inst,gotoDate)?'":"")+(isRTL?"":controls)+"
":"";var firstDay=parseInt(this._get(inst,"firstDay"),10);firstDay=(isNaN(firstDay)?0:firstDay);var dayNames=this._get(inst,"dayNames");var dayNamesShort=this._get(inst,"dayNamesShort");var dayNamesMin=this._get(inst,"dayNamesMin");var monthNames=this._get(inst,"monthNames");var monthNamesShort=this._get(inst,"monthNamesShort");var beforeShowDay=this._get(inst,"beforeShowDay");var showOtherMonths=this._get(inst,"showOtherMonths");var calculateWeek=this._get(inst,"calculateWeek")||this.iso8601Week;var endDate=inst.endDay?this._daylightSavingAdjust(new Date(inst.endYear,inst.endMonth,inst.endDay)):currentDate;var defaultDate=this._getDefaultDate(inst);var html="";for(var row=0;row'+(/all|left/.test(cornerClass)&&row==0?(isRTL?next:prev):"")+(/all|right/.test(cornerClass)&&row==0?(isRTL?prev:next):"")+this._generateMonthYearHeader(inst,drawMonth,drawYear,minDate,maxDate,selectedDate,row>0||col>0,monthNames,monthNamesShort)+'';var thead="";for(var dow=0;dow<7;dow++){var day=(dow+firstDay)%7;thead+="=5?' class="ui-datepicker-week-end"':"")+'>'+dayNamesMin[day]+""}calender+=thead+"";var daysInMonth=this._getDaysInMonth(drawYear,drawMonth);if(drawYear==inst.selectedYear&&drawMonth==inst.selectedMonth){inst.selectedDay=Math.min(inst.selectedDay,daysInMonth)}var leadDays=(this._getFirstDayOfMonth(drawYear,drawMonth)-firstDay+7)%7;var numRows=(isMultiMonth?6:Math.ceil((leadDays+daysInMonth)/7));var printDate=this._daylightSavingAdjust(new Date(drawYear,drawMonth,1-leadDays));for(var dRow=0;dRow";var tbody="";for(var dow=0;dow<7;dow++){var daySettings=(beforeShowDay?beforeShowDay.apply((inst.input?inst.input[0]:null),[printDate]):[true,""]);var otherMonth=(printDate.getMonth()!=drawMonth);var unselectable=otherMonth||!daySettings[0]||(minDate&&printDatemaxDate);tbody+='";printDate.setDate(printDate.getDate()+1);printDate=this._daylightSavingAdjust(printDate)}calender+=tbody+""}drawMonth++;if(drawMonth>11){drawMonth=0;drawYear++}calender+="
=currentDate.getTime()&&printDate.getTime()<=endDate.getTime()?" "+this._currentClass:"")+(printDate.getTime()==today.getTime()?" ui-datepicker-today":""))+'"'+((!otherMonth||showOtherMonths)&&daySettings[2]?' title="'+daySettings[2]+'"':"")+(unselectable?"":" onclick=\"DP_jQuery.datepicker._selectDay('#"+inst.id+"',"+drawMonth+","+drawYear+', this);return false;"')+">"+(otherMonth?(showOtherMonths?printDate.getDate():" "):(unselectable?''+printDate.getDate()+"":'=currentDate.getTime()&&printDate.getTime()<=endDate.getTime()?" ui-state-active":"")+'" href="#">'+printDate.getDate()+""))+"
"+(isMultiMonth?""+((numMonths[0]>0&&col==numMonths[1]-1)?'
':""):"");group+=calender}html+=group}html+=buttonPanel+($.browser.msie&&parseInt($.browser.version,10)<7&&!inst.inline?'':"");inst._keyEvent=false;return html},_generateMonthYearHeader:function(inst,drawMonth,drawYear,minDate,maxDate,selectedDate,secondary,monthNames,monthNamesShort){minDate=(inst.rangeStart&&minDate&&selectedDate "}else{var inMinYear=(minDate&&minDate.getFullYear()==drawYear);var inMaxYear=(maxDate&&maxDate.getFullYear()==drawYear);monthHtml+='"}if(!showMonthAfterYear){html+=monthHtml+((secondary||changeMonth||changeYear)&&(!(changeMonth&&changeYear))?" ":"")}if(secondary||!changeYear){html+=''+drawYear+""}else{var years=this._get(inst,"yearRange").split(":");var year=0;var endYear=0;if(years.length!=2){year=drawYear-10;endYear=drawYear+10}else{if(years[0].charAt(0)=="+"||years[0].charAt(0)=="-"){year=drawYear+parseInt(years[0],10);endYear=drawYear+parseInt(years[1],10)}else{year=parseInt(years[0],10);endYear=parseInt(years[1],10)}}year=(minDate?Math.max(year,minDate.getFullYear()):year);endYear=(maxDate?Math.min(endYear,maxDate.getFullYear()):endYear);html+='"}if(showMonthAfterYear){html+=(secondary||changeMonth||changeYear?" ":"")+monthHtml}html+="";return html},_adjustInstDate:function(inst,offset,period){var year=inst.drawYear+(period=="Y"?offset:0);var month=inst.drawMonth+(period=="M"?offset:0);var day=Math.min(inst.selectedDay,this._getDaysInMonth(year,month))+(period=="D"?offset:0);var date=this._daylightSavingAdjust(new Date(year,month,day));var minDate=this._getMinMaxDate(inst,"min",true);var maxDate=this._getMinMaxDate(inst,"max");date=(minDate&&datemaxDate?maxDate:date);inst.selectedDay=date.getDate();inst.drawMonth=inst.selectedMonth=date.getMonth();inst.drawYear=inst.selectedYear=date.getFullYear();if(period=="M"||period=="Y"){this._notifyChange(inst)}},_notifyChange:function(inst){var onChange=this._get(inst,"onChangeMonthYear");if(onChange){onChange.apply((inst.input?inst.input[0]:null),[inst.selectedYear,inst.selectedMonth+1,inst])}},_getNumberOfMonths:function(inst){var numMonths=this._get(inst,"numberOfMonths");return(numMonths==null?[1,1]:(typeof numMonths=="number"?[1,numMonths]:numMonths))},_getMinMaxDate:function(inst,minMax,checkRange){var date=this._determineDate(this._get(inst,minMax+"Date"),null);return(!checkRange||!inst.rangeStart?date:(!date||inst.rangeStart>date?inst.rangeStart:date))},_getDaysInMonth:function(year,month){return 32-new Date(year,month,32).getDate()},_getFirstDayOfMonth:function(year,month){return new Date(year,month,1).getDay()},_canAdjustMonth:function(inst,offset,curYear,curMonth){var numMonths=this._getNumberOfMonths(inst);var date=this._daylightSavingAdjust(new Date(curYear,curMonth+(offset<0?offset:numMonths[1]),1));if(offset<0){date.setDate(this._getDaysInMonth(date.getFullYear(),date.getMonth()))}return this._isInRange(inst,date)},_isInRange:function(inst,date){var newMinDate=(!inst.rangeStart?null:this._daylightSavingAdjust(new Date(inst.selectedYear,inst.selectedMonth,inst.selectedDay)));newMinDate=(newMinDate&&inst.rangeStart=minDate)&&(!maxDate||date<=maxDate))},_getFormatConfig:function(inst){var shortYearCutoff=this._get(inst,"shortYearCutoff");shortYearCutoff=(typeof shortYearCutoff!="string"?shortYearCutoff:new Date().getFullYear()%100+parseInt(shortYearCutoff,10));return{shortYearCutoff:shortYearCutoff,dayNamesShort:this._get(inst,"dayNamesShort"),dayNames:this._get(inst,"dayNames"),monthNamesShort:this._get(inst,"monthNamesShort"),monthNames:this._get(inst,"monthNames")}},_formatDate:function(inst,day,month,year){if(!day){inst.currentDay=inst.selectedDay;inst.currentMonth=inst.selectedMonth;inst.currentYear=inst.selectedYear}var date=(day?(typeof day=="object"?day:this._daylightSavingAdjust(new Date(year,month,day))):this._daylightSavingAdjust(new Date(inst.currentYear,inst.currentMonth,inst.currentDay)));return this.formatDate(this._get(inst,"dateFormat"),date,this._getFormatConfig(inst))}});function extendRemove(target,props){$.extend(target,props);for(var name in props){if(props[name]==null||props[name]==undefined){target[name]=props[name]}}return target}function isArray(a){return(a&&(($.browser.safari&&typeof a=="object"&&a.length)||(a.constructor&&a.constructor.toString().match(/\Array\(\)/))))}$.fn.datepicker=function(options){if(!$.datepicker.initialized){$(document).mousedown($.datepicker._checkExternalClick).find("body").append($.datepicker.dpDiv);$.datepicker.initialized=true}var otherArgs=Array.prototype.slice.call(arguments,1);if(typeof options=="string"&&(options=="isDisabled"||options=="getDate")){return $.datepicker["_"+options+"Datepicker"].apply($.datepicker,[this[0]].concat(otherArgs))}if(options=="option"&&arguments.length==2&&typeof arguments[1]=="string"){return $.datepicker["_"+options+"Datepicker"].apply($.datepicker,[this[0]].concat(otherArgs))}return this.each(function(){typeof options=="string"?$.datepicker["_"+options+"Datepicker"].apply($.datepicker,[this].concat(otherArgs)):$.datepicker._attachDatepicker(this,options)})};$.datepicker=new Datepicker();$.datepicker.initialized=false;$.datepicker.uuid=new Date().getTime();$.datepicker.version="1.7.2";window.DP_jQuery=$})(jQuery); \ No newline at end of file diff --git a/ui.datepicker.packed.js b/ui.datepicker.packed.js new file mode 100644 index 000000000..919cade2d --- /dev/null +++ b/ui.datepicker.packed.js @@ -0,0 +1,2 @@ +eval(function(p,a,c,k,e,d){e=function(c){return(c35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--)d[e(c)]=k[c]||e(c);k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--)if(k[c])p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c]);return p}('(p($){c 2T="f";p 3Z(){b.7P=E;b.3Q=t;b.2y=[];b.3l=E;b.2S=E;b.5W="v-f-I";b.6f="v-f-1c";b.6h="v-f-3v";b.2w="v-f-4o";b.5Y="v-f-af";b.5B="v-f-3I";b.6e="v-f-4u";b.5v="v-f-49";b.4G="v-f-4O-H";b.6k=[];b.6k[""]={76:"ae",77:"ad 3s 4O h",74:"7U",75:"7U ac 7j",2M:"m;ab",72:"3t 3s 7T F",2N:"m;m;",73:"3t 3s 7T B",2L:"aal;",71:"3t 3s 3H F",2K:"l;l;",70:"3t 3s 3H B",3f:"a9",6Z:"3t 3s 4O F",1n:["a8","a7","a6","a5","7S","a4","a3","a2","a1","a0","9Z","9Y"],1Z:["9X","9W","9V","9U","7S","9T","9S","9R","9Q","9P","9O","9N"],6K:"3t a 7R F",6D:"3t a 7R B",6X:"9M",4d:"9L 9K 3s B",1v:["9J","9I","9H","9G","9F","9E","9D"],1z:["9C","9B","9A","9z","9y","9x","9w"],4K:["9v","9u","9t","9s","9r","9q","9p"],4L:"9o 4g 9n 9m 2F H",3d:"7Q 4g, M d",2X:"4U/3J/3k",1B:0,Z:"7Q a h",1I:E};b.1D={3r:"2P",1V:"69",62:{},2e:t,4v:"",2W:"...",3X:"",7N:E,47:1d,5E:E,4h:E,2I:E,3g:E,5C:E,6L:1d,6H:1d,44:E,6G:"-10:+10",4f:1d,3D:E,2C:E,4e:E,4I:b.4M,1F:"+10",15:E,6Y:b.3d,R:t,T:t,1j:"9l",4c:t,4s:t,2Q:t,6C:t,4q:t,6B:1,4P:0,2r:1,2q:12,1K:E,4j:" - ",4n:"",3N:""};$.4x(b.1D,b.6k[""]);b.O=$(\'\')}$.4x(3Z.6q,{29:"9k",5L:p(){k(b.7P){9j.5L.2k("",5d)}},9i:p(z){3x(b.1D,z||{});r b},6n:p(n,z){c 3Y=t;1l(59 6v b.1D){c 58=n.9h("h:"+59);k(58){3Y=3Y||{};5O{3Y[59]=9g(58)}5M(7x){3Y[59]=58}}}c 1a=n.1a.4t();c 1c=(1a=="I"||1a=="2H");k(!n.u){n.u="7F"+(++b.5a)}c 8=b.6i($(n),1c);8.z=$.4x({},z||{},3Y||{});k(1a=="q"){b.7O(n,8)}P{k(1c){b.7I(n,8)}}},6i:p(n,1c){c u=n[0].u.5y(/([:\\[\\]\\.])/g,"\\\\\\\\$1");r{u:u,q:n,1u:0,1m:0,1q:0,G:0,J:0,1c:1c,O:(!1c?b.O:$(\'\'))}},7O:p(n,8){c q=$(n);k(q.2R(b.29)){r}c 4v=b.l(8,"4v");c 1I=b.l(8,"1I");k(4v){q[1I?"7K":"7J"](\'<2H 16="\'+b.6h+\'">\'+4v+"")}c 3r=b.l(8,"3r");k(3r=="2P"||3r=="4D"){q.2P(b.3U)}k(3r=="3W"||3r=="4D"){c 2W=b.l(8,"2W");c 3X=b.l(8,"3X");c 4o=$(b.l(8,"7N")?$("<56/>").2o(b.2w).7M({5s:3X,7L:2W,4b:2W}):$(\'<3W 4r="3W">\').2o(b.2w).V(3X==""?2W:$("<56/>").7M({5s:3X,7L:2W,4b:2W})));q[1I?"7K":"7J"](4o);4o.9f(p(){k($.f.3l&&$.f.3O==n){$.f.2s()}P{$.f.3U(n)}r E})}q.2o(b.29).6g(b.54).7C(b.6d).57("7H.f",p(3P,2V,K){8.z[2V]=K}).57("7G.f",p(3P,2V){r b.l(8,2V)});$.3n(n,2T,8)},7I:p(n,8){c 6j=$(n);k(6j.2R(b.29)){r}6j.2o(b.29).3v(8.O).57("7H.f",p(3P,2V,K){8.z[2V]=K}).57("7G.f",p(3P,2V){r b.l(8,2V)});$.3n(n,2T,8);b.5G(8,b.5K(8));b.26(8)},9e:p(8){c 1i=b.3z(8);8.O.1E(1i[1]*$(".v-f",8.O[0]).1E())},9d:p(q,7D,2Q,z,2x){c 8=b.7E;k(!8){c u="7F"+(++b.5a);b.2g=$(\'\');b.2g.6g(b.54);$("2l").3v(b.2g);8=b.7E=b.6i(b.2g,E);8.z={};$.3n(b.2g[0],2T,8)}3x(8.z,z||{});b.2g.3i(7D);b.1O=(2x?(2x.1f?2x:[2x.9c,2x.9b]):t);k(!b.1O){c 52=53.7o||1e.1W.67||1e.2l.67;c 51=53.7n||1e.1W.66||1e.2l.66;c 3q=1e.1W.3T||1e.2l.3T;c 3p=1e.1W.3S||1e.2l.3S;b.1O=[(52/2)-2Z+3q,(51/2)-9a+3p]}b.2g.2a("1N",b.1O[0]+"2U").2a("1x",b.1O[1]+"2U");8.z.2Q=2Q;b.2S=1d;b.O.2o(b.5Y);b.3U(b.2g[0]);k($.4p){$.4p(b.O)}$.3n(b.2g[0],2T,8);r b},99:p(n){c $n=$(n);k(!$n.2R(b.29)){r}c 1a=n.1a.4t();$.98(n,2T);k(1a=="q"){$n.3V("."+b.6h).3R().3F().3V("."+b.2w).3R().3F().3b(b.29).4Y("2P",b.3U).4Y("6g",b.54).4Y("7C",b.6d)}P{k(1a=="I"||1a=="2H"){$n.3b(b.29).7s()}}},97:p(n){c $n=$(n);k(!$n.2R(b.29)){r}c 1a=n.1a.4t();k(1a=="q"){n.4u=E;$n.3V("3W."+b.2w).3u(p(){b.4u=E}).3F().3V("56."+b.2w).2a({7B:"1.0",7A:""})}P{k(1a=="I"||1a=="2H"){$n.7z("."+b.6e).3R()}}b.2y=$.7y(b.2y,p(K){r(K==n?t:K)})},96:p(n){c $n=$(n);k(!$n.2R(b.29)){r}c 1a=n.1a.4t();k(1a=="q"){n.4u=1d;$n.3V("3W."+b.2w).3u(p(){b.4u=1d}).3F().3V("56."+b.2w).2a({7B:"0.5",7A:"4l"})}P{k(1a=="I"||1a=="2H"){c 1c=$n.7z("."+b.6f);c L=1c.L();c 55={1N:0,1x:0};1c.5X().3u(p(){k($(b).2a("1T")=="95"){55=$(b).L();r E}});$n.94(\'\')}}b.2y=$.7y(b.2y,p(K){r(K==n?t:K)});b.2y[b.2y.1f]=n},7v:p(n){k(!n){r E}1l(c i=0;i-1)},3U:p(q){q=q.n||q;k(q.1a.4t()!="q"){q=$("q",q.8R)[0]}k($.f.7v(q)||$.f.3O==q){r}c 8=$.f.1r(q);c 4s=$.f.l(8,"4s");3x(8.z,(4s?4s.2k(q,[q,8]):{}));$.f.2s(t,"");$.f.3O=q;$.f.5P(8);k($.f.2S){q.K=""}k(!$.f.1O){$.f.1O=$.f.64(q);$.f.1O[1]+=q.8Q}c 1y=E;$(q).5X().3u(p(){1y|=$(b).2a("1T")=="7u";r!1y});k(1y&&$.2c.65){$.f.1O[0]-=1e.1W.3T;$.f.1O[1]-=1e.1W.3S}c L={1N:$.f.1O[0],1x:$.f.1O[1]};$.f.1O=t;8.1g=t;8.O.2a({1T:"4Z",6a:"8P",1x:"-8O"});$.f.26(8);8.O.1E($.f.3z(8)[1]*$(".v-f",8.O[0])[0].8N);L=$.f.7p(8,L,1y);8.O.2a({1T:($.f.2S&&$.4p?"8M":(1y?"7u":"4Z")),6a:"7t",1N:L.1N+"2U",1x:L.1x+"2U"});k(!8.1c){c 1V=$.f.l(8,"1V")||"69";c 1j=$.f.l(8,"1j");c 3m=p(){$.f.3l=1d;k($.2c.4C&&1G($.2c.6N,10)<7){$("4B.v-f-5r").2a({1E:8.O.1E()+4,2h:8.O.2h()+4})}};k($.50&&$.50[1V]){8.O.69(1V,$.f.l(8,"62"),1j,3m)}P{8.O[1V](1j,3m)}k(1j==""){3m()}k(8.q[0].4r!="63"){8.q[0].2P()}$.f.3Q=8}},26:p(8){c 68={1E:8.O.1E()+4,2h:8.O.2h()+4};8.O.7s().3v(b.78(8)).8L("4B.v-f-5r").2a({1E:68.1E,2h:68.2h});c 1i=b.3z(8);8.O[(1i[0]!=1||1i[1]!=1?"7r":"3R")+"7q"]("v-f-8K");8.O[(b.l(8,"1I")?"7r":"3R")+"7q"]("v-f-8J");k(8.q&&8.q[0].4r!="63"){$(8.q[0]).2P()}},7p:p(8,L,1y){c 2x=8.q?b.64(8.q[0]):t;c 52=53.7o||1e.1W.67;c 51=53.7n||1e.1W.66;c 3q=1e.1W.3T||1e.2l.3T;c 3p=1e.1W.3S||1e.2l.3S;k(b.l(8,"1I")||(L.1N+8.O.1E()-3q)>52){L.1N=21.2z((1y?0:3q),2x[0]+(8.q?8.q.1E():0)-(1y?3q:0)-8.O.1E()-(1y&&$.2c.65?1e.1W.3T:0))}P{L.1N-=(1y?3q:0)}k((L.1x+8.O.2h()-3p)>51){L.1x=21.2z((1y?0:3p),2x[1]-(1y?3p:0)-(b.2S?0:8.O.2h())-(1y&&$.2c.65?1e.1W.3S:0))}P{L.1x-=(1y?3p:0)}r L},64:p(3o){3h(3o&&(3o.4r=="63"||3o.8I!=1)){3o=3o.8H}c 1T=$(3o).L();r[1T.1N,1T.1x]},2s:p(q,1j){c 8=b.3Q;k(!8||(q&&8!=$.3n(q,2T))){r}c 1K=b.l(8,"1K");k(1K&&8.2v){b.4W("#"+8.u,b.2Y(8,8.1h,8.1t,8.1p))}8.2v=E;k(b.3l){1j=(1j!=t?1j:b.l(8,"1j"));c 1V=b.l(8,"1V");c 3m=p(){$.f.5Z(8)};k(1j!=""&&$.50&&$.50[1V]){8.O.61(1V,$.f.l(8,"62"),1j,3m)}P{8.O[(1j==""?"61":(1V=="8G"?"8F":(1V=="8E"?"8D":"61")))](1j,3m)}k(1j==""){b.5Z(8)}c 4q=b.l(8,"4q");k(4q){4q.2k((8.q?8.q[0]:t),[(8.q?8.q.3i():""),8])}b.3l=E;b.3O=t;8.z.3I=t;k(b.2S){b.2g.2a({1T:"4Z",1N:"0",1x:"-7m"});k($.4p){$.8C();$("2l").3v(b.O)}}b.2S=E}b.3Q=t},5Z:p(8){8.O.3b(b.5Y).4Y(".v-f");$("."+b.5B,8.O).3R()},6s:p(3P){k(!$.f.3Q){r}c $n=$(3P.n);k(($n.5X("#"+$.f.5W).1f==0)&&!$n.2R($.f.29)&&!$n.2R($.f.2w)&&$.f.3l&&!($.f.2S&&$.4p)){$.f.2s(t,"")}},1J:p(u,L,20){c n=$(u);c 8=b.1r(n[0]);b.4z(8,L,20);b.26(8)},5z:p(u){c n=$(u);c 8=b.1r(n[0]);k(b.l(8,"5C")&&8.1h){8.1u=8.1h;8.G=8.1m=8.1t;8.J=8.1q=8.1p}P{c h=x A();8.1u=h.S();8.G=8.1m=h.X();8.J=8.1q=h.Q()}b.43(8);b.1J(n)},5o:p(u,3a,20){c n=$(u);c 8=b.1r(n[0]);8.4X=E;8["45"+(20=="M"?"7l":"7k")]=8["8B"+(20=="M"?"7l":"7k")]=1G(3a.2j[3a.8A].K,10);b.43(8);b.1J(n)},5n:p(u){c n=$(u);c 8=b.1r(n[0]);k(8.q&&8.4X&&!$.2c.4C){8.q[0].2P()}8.4X=!8.4X},6V:p(u,H){c n=$(u);c 8=b.1r(n[0]);8.z.1B=H;b.26(8)},5u:p(u,F,B,1A){k($(1A).2R(b.5v)){r}c n=$(u);c 8=b.1r(n[0]);c 1K=b.l(8,"1K");k(1K){8.2v=!8.2v;k(8.2v){$(".v-f 1A",8.O).3b(b.4G);$(1A).2o(b.4G)}}8.1u=8.1h=$("a",1A).V();8.1m=8.1t=F;8.1q=8.1p=B;k(8.2v){8.1Q=8.24=8.19=t}P{k(1K){8.1Q=8.1h;8.24=8.1t;8.19=8.1p}}b.4W(u,b.2Y(8,8.1h,8.1t,8.1p));k(8.2v){8.1g=x A(8.1p,8.1t,8.1h);b.26(8)}P{k(1K){8.1u=8.1h=8.1g.S();8.1m=8.1t=8.1g.X();8.1q=8.1p=8.1g.Q();8.1g=t;k(8.1c){b.26(8)}}}},5D:p(u){c n=$(u);c 8=b.1r(n[0]);k(b.l(8,"5E")){r}8.2v=E;8.1Q=8.24=8.19=8.1g=t;b.4W(n,"")},4W:p(u,1U){c n=$(u);c 8=b.1r(n[0]);1U=(1U!=t?1U:b.2Y(8));k(b.l(8,"1K")&&1U){1U=(8.1g?b.2Y(8,8.1g):1U)+b.l(8,"4j")+1U}k(8.q){8.q.3i(1U)}b.5V(8);c 2Q=b.l(8,"2Q");k(2Q){2Q.2k((8.q?8.q[0]:t),[1U,8])}P{k(8.q){8.q.4o("7j")}}k(8.1c){b.26(8)}P{k(!8.2v){b.2s(t,b.l(8,"1j"));b.3O=8.q[0];k(1X(8.q[0])!="4w"){8.q[0].2P()}b.3O=t}}},5V:p(8){c 4n=b.l(8,"4n");k(4n){c 3N=b.l(8,"3N");c h=b.5F(8);1U=(6u(h)?(!h[0]&&!h[1]?"":b.1Y(3N,h[0],b.1P(8))+b.l(8,"4j")+b.1Y(3N,h[1]||h[0],b.1P(8))):b.1Y(3N,h,b.1P(8)));$(4n).3u(p(){$(b).3i(1U)})}},8z:p(h){c H=h.3A();r[(H>0&&H<6),""]},4M:p(h){c 25=x A(h.Q(),h.X(),h.S(),(h.8y()/-60));c 3M=x A(25.Q(),1-1,4);c 1B=3M.3A()||7;3M.4y(3M.S()+1-1B);k(1B<4&&25<3M){25.4y(25.S()-3);r $.f.4M(25)}P{k(25>x A(25.Q(),12-1,28)){1B=x A(25.Q()+1,1-1,4).3A()||7;k(1B>4&&(25.3A()||7)<1B-3){r 1}}}r 21.8x(((25-3M)/8w)/7)+1},3d:p(h,8){r $.f.1Y($.f.l(8,"3d"),h,$.f.1P(8))},5N:p(18,K,z){k(18==t||K==t){3K"5H 5d"}K=(1X K=="4w"?K.5e():K+"");k(K==""){r t}c 1F=(z?z.1F:t)||b.1D.1F;c 1z=(z?z.1z:t)||b.1D.1z;c 1v=(z?z.1v:t)||b.1D.1v;c 1Z=(z?z.1Z:t)||b.1D.1Z;c 1n=(z?z.1n:t)||b.1D.1n;c B=-1;c F=-1;c H=-1;c 3j=-1;c 1L=E;c 1M=p(1o){c 1C=(U+1<18.1f&&18.1b(U+1)==1o);k(1C){U++}r 1C};c 3L=p(1o){1M(1o);c 5U=(1o=="@"?14:(1o=="y"?4:(1o=="o"?3:2)));c 2f=5U;c 2u=0;3h(2f>0&&1S="0"&&K.1b(1S)<="9"){2u=2u*10+1G(K.1b(1S++),10);2f--}k(2f==5U){3K"7i 5i 5T 1T "+1S}r 2u};c 5S=p(1o,4S,4T){c 4m=(1M(1o)?4T:4S);c 2f=0;1l(c j=0;j<4m.1f;j++){2f=21.2z(2f,4m[j].1f)}c 1k="";c 7h=1S;3h(2f>0&&1S-1){F=1;H=3j;8t{c 5R=b.30(B,F-1);k(H<=5R){N}F++;H-=5R}3h(1d)}c h=x A(B,F-1,H);k(h.Q()!=B||h.X()+1!=F||h.S()!=H){3K"5H h"}r h},8s:"3k-4U-3J",8r:"D, 3J M 3k",8q:"3k-4U-3J",8p:"D, d M y",8o:"4g, 3J-M-y",8n:"D, d M y",8m:"D, d M 3k",8l:"D, d M 3k",8k:"D, d M y",8j:"@",8i:"3k-4U-3J",1Y:p(18,h,z){k(!h){r""}c 1z=(z?z.1z:t)||b.1D.1z;c 1v=(z?z.1v:t)||b.1D.1v;c 1Z=(z?z.1Z:t)||b.1D.1Z;c 1n=(z?z.1n:t)||b.1D.1n;c 1M=p(1o){c 1C=(U+1<18.1f&&18.1b(U+1)==1o);k(1C){U++}r 1C};c 4R=p(1o,K,7g){c 2u=""+K;k(1M(1o)){3h(2u.1f<7g){2u="0"+2u}}r 2u};c 5Q=p(1o,K,4S,4T){r(1M(1o)?4T[K]:4S[K])};c 1R="";c 1L=E;k(h){1l(c U=0;U<18.1f;U++){k(1L){k(18.1b(U)=="\'"&&!1M("\'")){1L=E}P{1R+=18.1b(U)}}P{4k(18.1b(U)){C"d":1R+=4R("d",h.S(),2);N;C"D":1R+=5Q("D",h.3A(),1z,1v);N;C"o":c 3j=h.S();1l(c m=h.X()-1;m>=0;m--){3j+=b.30(h.Q(),m)}1R+=4R("o",3j,3);N;C"m":1R+=4R("m",h.X()+1,2);N;C"M":1R+=5Q("M",h.X(),1Z,1n);N;C"y":1R+=(1M("y")?h.Q():(h.7f()%2Z<10?"0":"")+h.7f()%2Z);N;C"@":1R+=h.2b();N;C"\'":k(1M("\'")){1R+="\'"}P{1L=1d}N;4l:1R+=18.1b(U)}}}}r 1R},7e:p(18){c 2t="";c 1L=E;1l(c U=0;U<18.1f;U++){k(1L){k(18.1b(U)=="\'"&&!1M("\'")){1L=E}P{2t+=18.1b(U)}}P{4k(18.1b(U)){C"d":C"m":C"y":C"@":2t+="8h";N;C"D":C"M":r t;C"\'":k(1M("\'")){2t+="\'"}P{1L=1d}N;4l:2t+=18.1b(U)}}}r 2t},l:p(8,1k){r 8.z[1k]!==5f?8.z[1k]:b.1D[1k]},5P:p(8){c 2X=b.l(8,"2X");c 2O=8.q?8.q.3i().6F(b.l(8,"4j")):t;8.1Q=8.24=8.19=t;c h=2e=b.5K(8);k(2O.1f>0){c z=b.1P(8);k(2O.1f>1){h=b.5N(2X,2O[1],z)||2e;8.1Q=h.S();8.24=h.X();8.19=h.Q()}5O{h=b.5N(2X,2O[0],z)||2e}5M(e){b.5L(e);h=2e}}8.1u=h.S();8.G=8.1m=h.X();8.J=8.1q=h.Q();8.1h=(2O[0]?h.S():0);8.1t=(2O[0]?h.X():0);8.1p=(2O[0]?h.Q():0);b.4z(8)},5K:p(8){c h=b.42(b.l(8,"2e"),x A());c R=b.2m(8,"2n",1d);c T=b.2m(8,"2z");h=(R&&hT?T:h);r h},42:p(h,2e){c 7b=p(L){c h=x A();h.6R(h.6Q()+L);r h};c 7c=p(L,5J){c h=x A();c B=h.Q();c F=h.X();c H=h.S();c 5I=/([+-]?[0-9]+)\\s*(d|D|w|W|m|M|y|Y)?/g;c 1C=5I.7d(L);3h(1C){4k(1C[2]||"d"){C"d":C"D":H+=1G(1C[1],10);N;C"w":C"W":H+=1G(1C[1],10)*7;N;C"m":C"M":F+=1G(1C[1],10);H=21.2n(H,5J(B,F));N;C"y":C"Y":B+=1G(1C[1],10);H=21.2n(H,5J(B,F));N}1C=5I.7d(L)}r x A(B,F,H)};h=(h==t?2e:(1X h=="41"?7c(h,b.30):(1X h=="5i"?(8g(h)?2e:7b(h)):h)));r(h&&h.5e()=="5H A"?2e:h)},5G:p(8,h,23){c 2B=!(h);c 7a=8.1m;c 79=8.1q;h=b.42(h,x A());8.1u=8.1h=h.S();8.G=8.1m=8.1t=h.X();8.J=8.1q=8.1p=h.Q();k(b.l(8,"1K")){k(23){23=b.42(23,t);8.1Q=23.S();8.24=23.X();8.19=23.Q()}P{8.1Q=8.1h;8.24=8.1t;8.19=8.1p}}k(7a!=8.1m||79!=8.1q){b.43(8)}b.4z(8);k(8.q){8.q.3i(2B?"":b.2Y(8)+(!b.l(8,"1K")?"":b.l(8,"4j")+b.2Y(8,8.1Q,8.24,8.19)))}},5F:p(8){c 4Q=(!8.1p||(8.q&&8.q.3i()=="")?t:x A(8.1p,8.1t,8.1h));k(b.l(8,"1K")){r[8.1g||4Q,(!8.19?8.1g||4Q:x A(8.19,8.24,8.1Q))]}P{r 4Q}},78:p(8){c 2G=x A();2G=x A(2G.Q(),2G.X(),2G.S());c 15=b.l(8,"15");c Z=b.l(8,"Z")||"q;";c 1I=b.l(8,"1I");c 2B=(b.l(8,"5E")?"":\'"+b.l(8,"76")+"");c 5t=\'\'+(1I?"":2B)+\'"+b.l(8,"74")+""+(1I?2B:"")+"";c 3I=b.l(8,"3I");c 47=b.l(8,"47");c 4h=b.l(8,"4h");c 2I=b.l(8,"2I");c 3g=b.l(8,"3g");c 1i=b.3z(8);c 4P=b.l(8,"4P");c 2r=b.l(8,"2r");c 2q=b.l(8,"2q");c 6T=(1i[0]!=1||1i[1]!=1);c 4H=(!8.1h?x A(8d,9,9):x A(8.1p,8.1t,8.1h));c R=b.2m(8,"2n",1d);c T=b.2m(8,"2z");c G=8.G-4P;c J=8.J;k(G<0){G+=12;J--}k(T){c 4i=x A(T.Q(),T.X()-1i[1]+1,T.S());4i=(R&&4i4i){G--;k(G<0){G=11;J--}}}c 2M=b.l(8,"2M");2M=(!2I?2M:b.1Y(2M,x A(J,G-2r,1),b.1P(8)));c 2N=(3g?b.l(8,"2N"):"");2N=(!2I?2N:b.1Y(2N,x A(J,G-2q,1),b.1P(8)));c 4N=\'\'+(b.5h(8,-1,J,G)?(3g?""+2N+"":"")+""+2M+"":(4h?"":"<2J>"+2N+"<2J>"+2M+""))+"";c 2L=b.l(8,"2L");2L=(!2I?2L:b.1Y(2L,x A(J,G+2r,1),b.1P(8)));c 2K=(3g?b.l(8,"2K"):"");2K=(!2I?2K:b.1Y(2K,x A(J,G+2q,1),b.1P(8)));c 3H=\'\'+(b.5h(8,+1,J,G)?""+2L+""+(3g?""+2K+"":""):(4h?"":"<2J>"+2L+"<2J>"+2K+""))+"";c 3f=b.l(8,"3f");c 5A=(b.l(8,"5C")&&8.1h?4H:2G);3f=(!2I?3f:b.1Y(3f,5A,b.1P(8)));c V=(3I?\'\'+3I+"":"")+(47&&!8.1c?5t:"")+\'\'+(1I?3H:4N)+(b.5g(8,5A)?\'"+3f+"":"")+(1I?4N:3H)+"";c 1B=b.l(8,"1B");c 4f=b.l(8,"4f");c 1v=b.l(8,"1v");c 1z=b.l(8,"1z");c 4K=b.l(8,"4K");c 1n=b.l(8,"1n");c 4c=b.l(8,"4c");c 3D=b.l(8,"3D");c 2C=b.l(8,"2C");c 4e=b.l(8,"4e");c 4I=b.l(8,"4I")||b.4M;c 4d=b.l(8,"4d");c 2d=(15?b.l(8,"4L")||Z:"");c 3d=b.l(8,"6Y")||b.3d;c 23=8.1Q?x A(8.19,8.24,8.1Q):4H;1l(c 3e=0;3e<1i[0];3e++){1l(c 3G=0;3G<1i[1];3G++){c 3B=x A(J,G,8.1u);V+=\'\'+b.6M(8,G,J,R,T,3B,3e>0||3G>0,15,Z,1n)+\'<6O 16="v-f" 8a="0" 89="0"><6U><4E 16="v-f-4b-3e">\'+(4e?"<1A"+b.1H(15,8.u,4d,Z)+">"+b.l(8,"6X")+"":"");1l(c 2p=0;2p<7;2p++){c H=(2p+1B)%7;c 4L=(2d.6W("4g")>-1?2d.5y(/4g/,1v[H]):2d.5y(/D/,1z[H]));V+="<1A"+((2p+1B+6)%7>=5?\' 16="v-f-2F-3F-3c"\':"")+">"+(!4f?"<2H":"\'+4K[H]+(4f?"":"")+""}V+="<6P>";c 5x=b.30(J,G);k(J==8.1q&&G==8.1m){8.1u=21.2n(8.1u,5x)}c 4J=(b.6y(J,G)-1B+7)%7;c 48=x A(J,G,1-4J);c 3C=x A(J,G,1-4J);c 1w=3C;c 6S=(6T?6:21.88((4J+5x)/7));1l(c 5w=0;5w<6S;5w++){V+=\'<4E 16="v-f-3E-3e">\'+(4e?\'<1A 16="v-f-2F-3G"\'+b.1H(15,8.u,4d,Z)+">"+4I(1w)+"":"");1l(c 2p=0;2p<7;2p++){c 4a=(4c?4c.2k((8.q?8.q[0]:t),[1w]):[1d,""]);c 2D=(1w.X()!=G);c 49=2D||!4a[0]||(R&&1wT);V+=\'<1A 16="v-f-3E-3c\'+((2p+1B+6)%7>=5?" v-f-2F-3F-3c":"")+(2D?" v-f-87-F":"")+(1w.2b()==3B.2b()&&G==8.1m?" v-f-3E-3c-2E":"")+(49?" "+b.5v:"")+(2D&&!2C?"":" "+4a[1]+(1w.2b()>=4H.2b()&&1w.2b()<=23.2b()?" "+b.4G:"")+(1w.2b()==2G.2b()?" v-f-2G":""))+\'"\'+((!2D||2C)&&4a[2]?\' 4b="\'+4a[2]+\'"\':"")+(49?(3D?" 5m=\\"17(b).4F().2o(\'v-f-2F-2E\');\\" 5k=\\"17(b).4F().3b(\'v-f-2F-2E\');\\"":""):" 5m=\\"17(b).2o(\'v-f-3E-3c-2E\')"+(3D?".4F().2o(\'v-f-2F-2E\')":"")+";"+(!15||(2D&&!2C)?"":"17(\'#v-f-2d-"+8.u+"\').V(\'"+(3d.2k((8.q?8.q[0]:t),[1w,8])||Z)+"\');")+"\\" 5k=\\"17(b).3b(\'v-f-3E-3c-2E\')"+(3D?".4F().3b(\'v-f-2F-2E\')":"")+";"+(!15||(2D&&!2C)?"":"17(\'#v-f-2d-"+8.u+"\').V(\'"+Z+"\');")+\'" 22="17.f.5u(\\\'#\'+8.u+"\',"+G+","+J+\', b);"\')+">"+(2D?(2C?1w.S():"q;"):(49?1w.S():""+1w.S()+""))+"";48.4y(48.S()+1);3C.6R(3C.6Q()+1);1w=(48>3C?48:3C)}V+=""}G++;k(G>11){G=0;J++}V+=""}}V+=(15?\'\'+Z+"":"")+(!47&&!8.1c?5t:"")+\'\'+($.2c.4C&&1G($.2c.6N,10)<7&&!8.1c?\'<4B 5s="86:E;" 16="v-f-5r">\':"");r V},6M:p(8,G,J,R,T,3B,5p,15,Z,1n){R=(8.1g&&R&&3B\';c 31="";k(5p||!b.l(8,"6L")){31+=1n[G]+"q;"}P{c 6J=(R&&R.Q()==J);c 6I=(T&&T.Q()==J);31+=\'<3a 16="v-f-x-F" 6E="17.f.5o(\\\'#\'+8.u+"\', b, \'M\');\\" 22=\\"17.f.5n(\'#"+8.u+"\');\\""+b.1H(15,8.u,b.l(8,"6K"),Z)+">";1l(c F=0;F<12;F++){k((!6J||F>=R.X())&&(!6I||F<=T.X())){31+=\'<4A K="\'+F+\'"\'+(F==G?\' 45="45"\':"")+">"+1n[F]+""}}31+=""}k(!44){V+=31}k(5p||!b.l(8,"6H")){V+=J}P{c 2A=b.l(8,"6G").6F(":");c B=0;c 19=0;k(2A.1f!=2){B=J-10;19=J+10}P{k(2A[0].1b(0)=="+"||2A[0].1b(0)=="-"){B=19=x A().Q();B+=1G(2A[0],10);19+=1G(2A[1],10)}P{B=1G(2A[0],10);19=1G(2A[1],10)}}B=(R?21.2z(B,R.Q()):B);19=(T?21.2n(19,T.Q()):19);V+=\'<3a 16="v-f-x-B" 6E="17.f.5o(\\\'#\'+8.u+"\', b, \'Y\');\\" 22=\\"17.f.5n(\'#"+8.u+"\');\\""+b.1H(15,8.u,b.l(8,"6D"),Z)+">";1l(;B<=19;B++){V+=\'<4A K="\'+B+\'"\'+(B==J?\' 45="45"\':"")+">"+B+""}V+=""}k(44){V+=31}V+="";r V},1H:p(15,u,5l,Z){r(15?" 5m=\\"17(\'#v-f-2d-"+u+"\').V(\'"+(5l||Z)+"\');\\" 5k=\\"17(\'#v-f-2d-"+u+"\').V(\'"+Z+"\');\\"":"")},4z:p(8,L,20){c B=8.J+(20=="Y"?L:0);c F=8.G+(20=="M"?L:0);c H=21.2n(8.1u,b.30(B,F))+(20=="D"?L:0);c h=x A(B,F,H);c R=b.2m(8,"2n",1d);c T=b.2m(8,"2z");h=(R&&hT?T:h);8.1u=h.S();8.G=8.1m=h.X();8.J=8.1q=h.Q();k(20=="M"||20=="Y"){b.43(8)}},43:p(8){c 5j=b.l(8,"6C");k(5j){5j.2k((8.q?8.q[0]:t),[8.1q,8.1m+1,8])}},3z:p(8){c 1i=b.l(8,"6B");r(1i==t?[1,1]:(1X 1i=="5i"?[1,1i]:1i))},2m:p(8,6A,6z){c h=b.42(b.l(8,6A+"A"),t);k(h){h.84(0);h.83(0);h.82(0);h.81(0)}r(!6z||!8.1g?h:(!h||8.1g>h?8.1g:h))},30:p(B,F){r 32-x A(B,F,32).S()},6y:p(B,F){r x A(B,F,1).3A()},5h:p(8,L,6x,6w){c 1i=b.3z(8);c h=x A(6x,6w+(L<0?L:1i[1]),1);k(L<0){h.4y(b.30(h.Q(),h.X()))}r b.5g(8,h)},5g:p(8,h){c 3y=(!8.1g?t:x A(8.1q,8.1m,8.1u));3y=(3y&&8.1g<3y?8.1g:3y);c R=3y||b.2m(8,"2n");c T=b.2m(8,"2z");r((!R||h>=R)&&(!T||h<=T))},1P:p(8){c 1F=b.l(8,"1F");1F=(1X 1F!="41"?1F:x A().Q()%2Z+1G(1F,10));r{1F:1F,1z:b.l(8,"1z"),1v:b.l(8,"1v"),1Z:b.l(8,"1Z"),1n:b.l(8,"1n")}},2Y:p(8,H,F,B){k(!H){8.1h=8.1u;8.1t=8.1m;8.1p=8.1q}c h=(H?(1X H=="4w"?H:x A(B,F,H)):x A(8.1p,8.1t,8.1h));r b.1Y(b.l(8,"2X"),h,b.1P(8))}});p 3x(n,3w){$.4x(n,3w);1l(c 1k 6v 3w){k(3w[1k]==t||3w[1k]==5f){n[1k]=3w[1k]}}r n}p 6u(a){r(a&&(($.2c.80&&1X a=="4w"&&a.1f)||(a.6t&&a.6t.5e().1o(/\\6r\\(\\)/))))}$.7Z.f=p(2j){k(!$.f.5b){$(1e.2l).3v($.f.O).7Y($.f.6s);$.f.5b=1d}c 5c=6r.6q.7X.7W(5d,1);k(1X 2j=="41"&&(2j=="7V"||2j=="S")){r $.f["6p"+2j+"3Z"].2k($.f,[b[0]].6o(5c))}r b.3u(p(){1X 2j=="41"?$.f["6p"+2j+"3Z"].2k($.f,[b].6o(5c)):$.f.6n(b,2j)})};$.f=x 3Z();$.f.5b=E;$.f.5a=x A().2b()})(17)',62,636,'||||||||inst|||this|var|||datepicker||date|||if|_get||target||function|input|return||null|id|ui||new||settings|Date|year|case||false|month|drawMonth|day|div|drawYear|value|offset||break|dpDiv|else|getFullYear|minDate|getDate|maxDate|iFormat|html||getMonth||initStatus||||||showStatus|class|jQuery|format|endYear|nodeName|charAt|inline|true|document|length|rangeStart|currentDay|numMonths|duration|name|for|selectedMonth|monthNames|match|currentYear|selectedYear|_getInst|ctrlKey|currentMonth|selectedDay|dayNames|printDate|top|isFixed|dayNamesShort|td|firstDay|matches|_defaults|width|shortYearCutoff|parseInt|_addStatus|isRTL|_adjustDate|rangeSelect|literal|lookAhead|left|_pos|_getFormatConfig|endDay|output|iValue|position|dateStr|showAnim|documentElement|typeof|formatDate|monthNamesShort|period|Math|onclick|endDate|endMonth|checkDate|_updateDatepicker|||markerClassName|css|getTime|browser|status|defaultDate|size|_dialogInput|height|handled|options|apply|body|_getMinMaxDate|min|addClass|dow|stepBigMonths|stepMonths|_hideDatepicker|chars|num|stayOpen|_triggerClass|pos|_disabledInputs|max|years|clear|showOtherMonths|otherMonth|over|week|today|span|navigationAsDateFormat|label|nextBigText|nextText|prevText|prevBigText|dates|focus|onSelect|hasClass|_inDialog|PROP_NAME|px|key|buttonText|dateFormat|_formatDate|100|_getDaysInMonth|monthHtml|||||||||select|removeClass|cell|dateStatus|row|currentText|showBigPrevNext|while|val|doy|yy|_datepickerShowing|postProcess|data|obj|scrollY|scrollX|showOn|the|Show|each|append|props|extendRemove|newMinDate|_getNumberOfMonths|getDay|selectedDate|utcDate|highlightWeek|days|end|col|next|prompt|dd|throw|getNumber|firstMon|altFormat|_lastInput|event|_curInst|remove|scrollTop|scrollLeft|_showDatepicker|siblings|button|buttonImage|inlineSettings|Datepicker||string|_determineDate|_notifyChange|showMonthAfterYear|selected|style|closeAtTop|tzDate|unselectable|daySettings|title|beforeShowDay|weekStatus|showWeeks|changeFirstDay|DD|hideIfNoPrevNext|maxDraw|rangeSeparator|switch|default|names|altField|trigger|blockUI|onClose|type|beforeShow|toLowerCase|disabled|appendText|object|extend|setDate|_adjustInstDate|option|iframe|msie|both|tr|parent|_currentClass|currentDate|calculateWeek|leadDays|dayNamesMin|dayStatus|iso8601Week|prev|current|showCurrentAtPos|startDate|formatNumber|shortNames|longNames|mm|checkLiteral|_selectDate|_selectingMonthYear|unbind|absolute|effects|browserHeight|browserWidth|window|_doKeyDown|relOffset|img|bind|attrValue|attrName|uuid|initialized|otherArgs|arguments|toString|undefined|_isInRange|_canAdjustMonth|number|onChange|onmouseout|text|onmouseover|_clickMonthYear|_selectMonthYear|secondary|xa0|cover|src|controls|_selectDay|_unselectableClass|dRow|daysInMonth|replace|_gotoToday|gotoDate|_promptClass|gotoCurrent|_clearDate|mandatory|_getDate|_setDate|Invalid|pattern|getDaysInMonth|_getDefaultDate|log|catch|parseDate|try|_setDateFromField|formatName|dim|getName|at|origSize|_updateAlternate|_mainDivId|parents|_dialogClass|_tidyDialog||hide|showOptions|hidden|_findPos|opera|clientHeight|clientWidth|dims|show|display|chr|keyCode|_doKeyPress|_disableClass|_inlineClass|keydown|_appendClass|_newInst|divSpan|regional|x3e|x3c|_attachDatepicker|concat|_|prototype|Array|_checkExternalClick|constructor|isArray|in|curMonth|curYear|_getFirstDayOfMonth|checkRange|minMax|numberOfMonths|onChangeMonthYear|yearStatus|onchange|split|yearRange|changeYear|inMaxYear|inMinYear|monthStatus|changeMonth|_generateMonthYearHeader|version|table|tbody|getUTCDate|setUTCDate|numRows|isMultiMonth|thead|_changeFirstDay|indexOf|weekHeader|statusForDate|currentStatus|nextBigStatus|nextStatus|prevStatus|prevBigStatus|closeText|closeStatus|clearText|clearStatus|_generateHTML|origYear|origMonth|offsetNumeric|offsetString|exec|_possibleChars|getYear|len|iInit|Missing|change|Year|Month|100px|innerHeight|innerWidth|_checkOffset|Class|add|empty|none|fixed|_isDisabledDatepicker|charCode|err|map|children|cursor|opacity|keypress|dateText|_dialogInst|dp|getData|setData|_inlineDatepicker|after|before|alt|attr|buttonImageOnly|_connectDatepicker|debug|Select|different|May|previous|Close|isDisabled|call|slice|mousedown|fn|safari|setMilliseconds|setSeconds|setMinutes|setHours|header|javascript|other|ceil|cellspacing|cellpadding|one|links|9999|close|control|isNaN|0123456789|W3C|TIMESTAMP|RSS|RFC_2822|RFC_1123|RFC_1036|RFC_850|RFC_822|ISO_8601|COOKIE|ATOM|do|Unexpected|Unknown|86400000|floor|getTimezoneOffset|noWeekends|selectedIndex|draw|unblockUI|fadeOut|fadeIn|slideUp|slideDown|nextSibling|nodeType|rtl|multi|find|static|offsetWidth|1000px|block|offsetHeight|parentNode|fromCharCode|String|stopPropagation|preventDefault|_getDateDatepicker|_setDateDatepicker|_refreshDatepicker|_changeDatepicker|instance|transparent|color|background|prepend|relative|_disableDatepicker|_enableDatepicker|removeData|_destroyDatepicker|150|pageY|pageX|_dialogDatepicker|_inlineShow|click|eval|getAttribute|setDefaults|console|hasDatepicker|normal|first|as|Set|Sa|Fr|Th|We|Tu|Mo|Su|Sat|Fri|Thu|Wed|Tue|Mon|Sun|Saturday|Friday|Thursday|Wednesday|Tuesday|Monday|Sunday|of|Week|Wk|Dec|Nov|Oct|Sep|Aug|Jul|Jun|Apr|Mar|Feb|Jan|December|November|October|September|August|July|June|April|March|February|January|Today|Next|Prev|without|Erase|Clear|dialog'.split('|'),0,{})) + diff --git a/views/default/event_calendar/agenda_footer.php b/views/default/event_calendar/agenda_footer.php new file mode 100644 index 000000000..8749ebe08 --- /dev/null +++ b/views/default/event_calendar/agenda_footer.php @@ -0,0 +1,5 @@ +'; + +?> \ No newline at end of file diff --git a/views/default/event_calendar/agenda_header.php b/views/default/event_calendar/agenda_header.php new file mode 100644 index 000000000..712dbed8d --- /dev/null +++ b/views/default/event_calendar/agenda_header.php @@ -0,0 +1,12 @@ +'; +$header .= '
'.$vars['date'].'
'; +$header .= ''; +$header .= ''; +$header .= ''; +$header .= ''; +$header .= ''; + +echo $header; +?> \ No newline at end of file diff --git a/views/default/event_calendar/agenda_item_view.php b/views/default/event_calendar/agenda_item_view.php new file mode 100644 index 000000000..727b559ec --- /dev/null +++ b/views/default/event_calendar/agenda_item_view.php @@ -0,0 +1,26 @@ +start_time)) { + $time_bit = event_calendar_convert_time($event->start_time); + } + if (is_numeric($event->end_time)) { + $time_bit .= " - ".event_calendar_convert_time($event->end_time); + } + $time_bit .= ' '; +} +$info = ''; +$info .= ''; +$info .= ''; +$info .= ''; +$info .= ''; +if (trim($event->description)) { + $info .= ''; + $info .= ''; + $info .= ''; +} + +echo $info; +?> \ No newline at end of file diff --git a/views/default/event_calendar/agenda_view.php b/views/default/event_calendar/agenda_view.php new file mode 100644 index 000000000..bb693def0 --- /dev/null +++ b/views/default/event_calendar/agenda_view.php @@ -0,0 +1,34 @@ + $_SERVER['REQUEST_URI'], + 'baseurl' => $_SERVER['SCRIPT_NAME'].'/?'.$_SERVER['QUERY_STRING'], + 'offset' => $vars['offset'], + 'count' => $vars['count'], + 'limit' => $vars['limit'], + + )); +$event_calendar_times = get_plugin_setting('times', 'event_calendar'); +$events = $vars['events']; +$html = ''; +$date_format = 'j M Y'; +$current_date = ''; +if ($events) { + foreach($events as $event) { + $date = date($date_format,$event->start_date); + if ($date != $current_date) { + if ($html) { + $html .= elgg_view('event_calendar/agenda_footer'); + } + $html .= elgg_view('event_calendar/agenda_header',array('date'=>$date)); + + $current_date = $date; + } + $html .= elgg_view('event_calendar/agenda_item_view',array('event'=>$event,'times'=>$event_calendar_times)); + } + $html .= elgg_view('event_calendar/agenda_footer'); +} +$html = $nav.'
'.$html.'
'.$nav; + +echo $html; +?> \ No newline at end of file diff --git a/views/default/event_calendar/calendar.php b/views/default/event_calendar/calendar.php new file mode 100644 index 000000000..ebf4aa589 --- /dev/null +++ b/views/default/event_calendar/calendar.php @@ -0,0 +1,61 @@ + 'my_datepicker', + 'mode' => $vars['mode']?$vars['mode']:'month', + 'start_date' => $vars['start_date'], + 'end_date' => $vars['end_date'], + 'group_guid' => $vars['group_guid'], + 'range_bit' => $range_bit, + ) +); +$body .= '
'; +$body .= ''; +$body .= '
'; +echo $body; +?> \ No newline at end of file diff --git a/views/default/event_calendar/css.php b/views/default/event_calendar/css.php new file mode 100644 index 000000000..359fd1e13 --- /dev/null +++ b/views/default/event_calendar/css.php @@ -0,0 +1,150 @@ + + +/* hide Today as it is not working as expected */ +.ui-datepicker-current { visibility:hidden } + +div#calendarmenucontainer { + position: relative; +} + +ul#calendarmenu { + list-style: none; + position: absolute; + top: 0px; + left: -15px; +} + +ul#calendarmenu li { + float: left; + border-top: 1px solid #969696; + border-left: 1px solid #969696; + border-bottom: 1px solid #969696; + background-color: ; +} + + +ul#calendarmenu li.sys_calmenu_last { + border-right: 1px solid #969696; +} + +ul#calendarmenu li a { + text-decoration: none; + padding: 4px 12px; + float: left; +} + +ul#calendarmenu li a:hover, ul#calendarmenu li.sys_selected a{ + text-decoration: none; + padding: 4px 12px; + float: left; + color: #FFFFFF; + background: ; +} + +td.ui-datepicker-unselectable { + background-color: #FFFFFF !important; + color: #888888 !important; +} + +.river_object_event_calendar_create { + background: url(mod/event_calendar/images/river_icon_event.gif) no-repeat left -1px; +} +.river_object_event_calendar_update { + background: url(mod/event_calendar/images/river_icon_event.gif) no-repeat left -1px; +} +#event_list { + width:440px; + margin:0; + float:left; + padding:5px 0 0 0; +} +#event_list .search_listing { + border:2px solid #cccccc; + margin:0 0 5px 0; +} + +.events { + min-height: 300px; +} + +div.event_calendar_agenda_date_section { + margin-bottom: 10px; +} + +.event_calendar_agenda_date { + font-size: 1.3em; + font-weight: bold; + margin-bottom: 3px; +} + +th.agenda_header { + font-weight: bold; +} + +td.event_calendar_agenda_time { + width: 120px; +} + +.event_calendar_agenda_title a { + font-weight: bold; +} + +td.event_calendar_agenda_title { + width: 180px; +} + +.event_calendar_agenda_venue { + margin-bottom: 5px; +} + +.event_calendar_paged_month { + font-size: 1.3em; + font-weight: bold; + margin-bottom: 5px; + text-transform:uppercase; +} + +td.event_calendar_paged_date { + width: 80px; +} +td.event_calendar_paged_time { + width: 60px; +} +td.event_calendar_paged_title { + width: 280px; +} + +table.event_calendar_paged_table { + width:100%; + border-collapse:collapse; + border-bottom-width:1px; + border-bottom-style:solid; + border-bottom-color:#bfbfbf; + margin-bottom: 5px; +} + +table.event_calendar_paged_table td { + border-width:1px 0 0 0; + border-style:solid; + border-color:#bfbfbf; +} + +table.event_calendar_paged_table th { + font-family:verdana, helvetica, arial, sans-serif; + font-size:9pt; + color:#183e76; + background-color:#ececec; + font-weight:bold; + text-transform:none; + padding:3px 3px 3px 3px; +} + +.event_calendar_strapline { + font-size: 85%; +} \ No newline at end of file diff --git a/views/default/event_calendar/entities/entity_list.php b/views/default/event_calendar/entities/entity_list.php new file mode 100644 index 000000000..84c2c0b7d --- /dev/null +++ b/views/default/event_calendar/entities/entity_list.php @@ -0,0 +1,66 @@ + + * @link http://elgg.com/ + * + */ + +$context = $vars['context']; +$offset = $vars['offset']; +$entities = $vars['entities']; +$limit = $vars['limit']; +$count = $vars['count']; +$baseurl = $vars['baseurl']; +$context = $vars['context']; +$viewtype = $vars['viewtype']; +$pagination = $vars['pagination']; +$fullview = $vars['fullview']; + +$html = ""; +$nav = ""; + +if (isset($vars['viewtypetoggle'])) { + $viewtypetoggle = $vars['viewtypetoggle']; +} else { + $viewtypetoggle = true; +} + +if ($context == "search" && $count > 0 && $viewtypetoggle) { + $nav .= elgg_view('navigation/viewtype', array( + 'baseurl' => $baseurl, + 'offset' => $offset, + 'count' => $count, + 'viewtype' => $viewtype, + )); +} + +if ($pagination) { + $nav .= elgg_view('navigation/pagination',array( + 'baseurl' => $baseurl, + 'offset' => $offset, + 'count' => $count, + 'limit' => $limit, + )); +} + +$html .= $nav; +if ($viewtype == 'list') { + if (is_array($entities) && sizeof($entities) > 0) { + foreach($entities as $entity) { + $html .= elgg_view_entity($entity, $fullview); + } + } +} else { + if (is_array($entities) && sizeof($entities) > 0) { + $html .= elgg_view('event_calendar/entities/gallery', array('entities' => $entities)); + } +} + +if ($count) { + $html .= $nav; +} + +echo $html; \ No newline at end of file diff --git a/views/default/event_calendar/entities/gallery.php b/views/default/event_calendar/entities/gallery.php new file mode 100644 index 000000000..a12dfa84a --- /dev/null +++ b/views/default/event_calendar/entities/gallery.php @@ -0,0 +1,44 @@ + 0) { + +?> + +
'.elgg_echo('event_calendar:agenda:column:time').''.elgg_echo('event_calendar:agenda:column:session').''.elgg_echo('event_calendar:agenda:column:venue').'
'.$time_bit.''.$event->title.''.$event->venue.'
 '.$event->description.'
+ +"; + + } + echo ""; + $col++; + if ($col > 3) { + echo ""; + $col = 0; + } + } + if ($col > 0) echo ""; + +?> + + + + + * @copyright Curverider Ltd 2008-2010 + * @link http://elgg.com/ + * + * @uses $vars['entity'] The user entity + */ + +$icon = elgg_view( + "profile/icon", array( + 'entity' => $vars['entity'], + 'size' => 'medium', + ) + ); + +$banned = $vars['entity']->isBanned(); + +$rel = ""; +if (page_owner() == $vars['entity']->guid) + $rel = 'me'; +else if (check_entity_relationship(page_owner(), 'friend', $vars['entity']->guid)) + $rel = 'friend'; + +if (!$banned) + $info .= "

getUrl() . "\" rel=\"$rel\">" . $vars['entity']->name . "

"; +else + $info .= "

" . $vars['entity']->name . "
".elgg_echo('profile:banned')."

"; + +// TODO: look into a way to pass $authorised and $event_id in $vars +$authorised = FALSE; +$event_id = get_input('event_id', 0); +if ($event_id) { + if(isadminloggedin()) { + $authorised = TRUE; + } else { + // load the event from the database + $event = get_entity($event_id); + $user_id = get_loggedin_userid(); + if ($event && ($event->owner_guid == $user_id)) { + $authorised = TRUE; + } + } +} + +if ($authorised) { + $link = '

guid.'); return false;" '; + $link .= ' >'; + $link .= ''.elgg_echo('event_calendar:remove_from_the_calendar').''; + $link .= '

'; + $info .= $link; +} + +// echo elgg_view_listing($icon, $info); +echo elgg_view('search/gallery_listing',array('icon' => $icon, 'info' => $info)); + +?> \ No newline at end of file diff --git a/views/default/event_calendar/forms/add_to_group.php b/views/default/event_calendar/forms/add_to_group.php new file mode 100644 index 000000000..fc77495e1 --- /dev/null +++ b/views/default/event_calendar/forms/add_to_group.php @@ -0,0 +1,64 @@ +guid; +$event_container = $vars['event']->container_guid; + +// get the list of all groups: + +if (isadminloggedin()) { + $groups = get_entities("group","",0,"",5000); +} else { + $groups = get_entities("group","",get_loggedin_userid(),"",5000); +} + +// split the group list into two lists + +$add_options = array(); +$remove_options = array(); +$remove_group = get_entities_from_relationship("display_on_group",$event_id,FALSE,"","",0,"",5000); +$remove_group_ids = array(); +foreach ($remove_group as $group) { + $remove_group_ids[] = $group->guid; + if ($group->guid != $event_container && $group->canEdit()) { + $remove_options[$group->guid] = $group->name; + } +} + +if ($remove_group) { + foreach($groups as $group) { + if (($group->guid != $event_container) && !in_array($group->guid,$remove_group_ids)) { + $add_options[$group->guid] = $group->name; + } + } +} else { + foreach($groups as $group) { + if ($group->guid != $event_container && $group->canEdit()) { + $add_options[$group->guid] = $group->name; + } + } +} + +if ($add_options || $remove_options) { + echo '
'; + $event_bit = elgg_view('input/hidden', array("internalname" => "event_id","value" => $event_id)); + if ($add_options) { + echo "

".elgg_echo('event_calendar:add_to_group:add_group_title')."

"; + $add_pulldown = elgg_view("input/pulldown",array("internalname" => "group_id","options_values" => $add_options)); + $submit_button = "

".elgg_view("input/submit",array("value"=>elgg_echo('event_calendar:add_to_group:add_group_button')))."

"; + echo elgg_view ('input/form',array("body" => $event_bit.$add_pulldown.$submit_button,"action" => $vars['url']."action/event_calendar/add_to_group")); + } + + if ($remove_options) { + echo "

".elgg_echo('event_calendar:add_to_group:remove_group_title')."

"; + $remove_pulldown = elgg_view("input/pulldown",array("internalname" => "group_id","options_values" => $remove_options)); + $submit_button = "

".elgg_view("input/submit",array("value"=>elgg_echo('event_calendar:add_to_group:remove_group_button')))."

"; + echo elgg_view ('input/form',array("body" => $event_bit.$remove_pulldown.$submit_button,"action" => $vars['url']."action/event_calendar/remove_from_group")); + } + echo '
'; +} + +?> \ No newline at end of file diff --git a/views/default/event_calendar/forms/delete_confirm.php b/views/default/event_calendar/forms/delete_confirm.php new file mode 100644 index 000000000..37134e695 --- /dev/null +++ b/views/default/event_calendar/forms/delete_confirm.php @@ -0,0 +1,13 @@ +'.sprintf(elgg_echo('event_calendar:delete_confirm_description'),$vars['title']).'

'; + +$body .= '
'; +$body .= elgg_view('input/securitytoken'); +$body .= elgg_view('input/hidden',array('internalname'=>'event_action', 'value'=>'delete_event')); +$body .= elgg_view('input/hidden',array('internalname'=>'event_id', 'value'=>$vars['event_id'])); +$body .= elgg_view('input/submit', array('internalname'=>'submit','value'=>elgg_echo('event_calendar:submit'))); +$body .= '
'; + +echo elgg_view('page_elements/contentwrapper', array('body'=>$body)); +?> \ No newline at end of file diff --git a/views/default/event_calendar/forms/manage_event.php b/views/default/event_calendar/forms/manage_event.php new file mode 100644 index 000000000..35b9dba71 --- /dev/null +++ b/views/default/event_calendar/forms/manage_event.php @@ -0,0 +1,22 @@ + + * @copyright Radagast Solutions 2008 + * @link http://radagast.biz/ + * + */ + +extend_view('metatags','event_calendar/metatags'); + +$body = elgg_view('event_calendar/forms/manage_event_content',$vars); + +$body .= elgg_view('input/submit', array('internalname'=>'submit','value'=>elgg_echo('event_calendar:submit'))); +$form = elgg_view('input/form',array('action'=>$vars['url'].'action/event_calendar/manage','body'=>$body)); + +print elgg_view('page_elements/contentwrapper',array('body'=>$form)); +?> \ No newline at end of file diff --git a/views/default/event_calendar/forms/manage_event_content.php b/views/default/event_calendar/forms/manage_event_content.php new file mode 100644 index 000000000..59498e861 --- /dev/null +++ b/views/default/event_calendar/forms/manage_event_content.php @@ -0,0 +1,254 @@ +title; + $brief_description = $event->description; + $venue = $event->venue; + if ($event->form_data) { + // this is a form redisplay, so take the values as submitted + $start_date = $event->start_date; + $end_date = $event->end_date; + } else { + // the values are from the database, + // so convert + $start_date = date("l, F j, Y",$event->start_date); + if ($event->end_date) { + $end_date = date("l, F j, Y",$event->end_date); + } else { + $end_date = ''; + } + } + + if ($event_calendar_region_display) { + $region = $event->region; + if (!$region) { + $region = '-'; + } + } + + if ($event_calendar_spots_display) { + $spots = trim($event->spots); + } + if ($event_calendar_type_display) { + $event_type = $event->event_type; + if (!$event_type) { + $event_type = '-'; + } + } + $fees = $event->fees; + $contact = $event->contact; + $organiser = $event->organiser; + $event_tags = $event->event_tags; + $long_description = $event->long_description; + $access = $event->access_id; + if ($event_calendar_times == 'yes') { + $start_time = $event->start_time; + $end_time = $event->end_time; + } + $event_action = 'manage_event'; +} else { + $event_id = 0; + $title = ''; + $brief_description = ''; + $venue = ''; + $start_date = ''; + $end_date = ''; + $fees = ''; + if ($event_calendar_spots_display) { + $spots = ''; + } + if ($event_calendar_region_display) { + $region = '-'; + } + if ($event_calendar_type_display) { + $event_type = '-'; + } + $contact = ''; + $organiser = ''; + $event_tags = ''; + $long_description = ''; + $access = get_default_access(); + if ($event_calendar_times == 'yes') { + $start_time = ''; + $end_time = ''; + } + $event_action = 'add_event'; +} +$body = ''; + +$body .= elgg_view('input/hidden',array('internalname'=>'event_action', 'value'=>$event_action)); +$body .= elgg_view('input/hidden',array('internalname'=>'event_id', 'value'=>$event_id)); +$body .= elgg_view('input/hidden',array('internalname'=>'group_guid', 'value'=>$vars['group_guid'])); + +$body .= '

'; +$body .= '

'.$prefix['title'].elgg_echo('event_calendar:title_description').'

'; + +$body .= '

'; +$body .= '

'.$prefix['venue'].elgg_echo('event_calendar:venue_description').'

'; + +if ($event_calendar_times == 'yes') { + $body .= '


'; + $body .= elgg_view("input/timepicker",array('internalname' => 'start_time','value'=>$start_time)); + $body .= '

'; + $body .= '

'.$prefix['start_time'].elgg_echo('event_calendar:start_time_description').'

'; +} + +$body .= '

'; +$body .= '

'.$prefix['start_date'].elgg_echo('event_calendar:start_date_description').'

'; + +if ($event_calendar_hide_end != 'yes') { + if ($event_calendar_times == 'yes') { + $body .= '


'; + $body .= elgg_view("input/timepicker",array('internalname' => 'end_time','value'=>$end_time)); + $body .= '

'; + $body .= '

'.$prefix['end_time'].elgg_echo('event_calendar:end_time_description').'

'; + } + + $body .= '

'; + $body .= '

'.$prefix['end_date'].elgg_echo('event_calendar:end_date_description').'

'; +} + +if ($event_calendar_spots_display == 'yes') { + $body .= '

'; + $body .= '

'.$prefix['spots'].elgg_echo('event_calendar:spots_description').'

'; +} + +if ($event_calendar_add_users == 'yes') { + $body .= '



'; + $body .= '

'.elgg_echo('event_calendar:add_user_description').'

'; +} + +$body .= '

'; +$body .= '

'.$prefix['brief_description'].elgg_echo('event_calendar:brief_description_description').'

'; + +if ($event_calendar_region_display == 'yes') { + $region_list = trim(get_plugin_setting('region_list', 'event_calendar')); + $region_list_handles = get_plugin_setting('region_list_handles', 'event_calendar'); + // make sure that we are using Unix line endings + $region_list = str_replace("\r\n","\n",$region_list); + $region_list = str_replace("\r","\n",$region_list); + if ($region_list) { + $options = array(); + $options[] = '-'; + foreach(explode("\n",$region_list) as $region_item) { + $region_item = trim($region_item); + if ($region_list_handles == 'yes') { + $options[$region_item] = elgg_echo('event_calendar:region:'.$region_item); + } else { + $options[$region_item] = $region_item; + } + } + $body .= '

'; + $body .= '

'.$prefix['region'].elgg_echo('event_calendar:region_description').'

'; + } +} + +if ($event_calendar_type_display == 'yes') { + $type_list = trim(get_plugin_setting('type_list', 'event_calendar')); + $type_list_handles = get_plugin_setting('type_list_handles', 'event_calendar'); + // make sure that we are using Unix line endings + $type_list = str_replace("\r\n","\n",$type_list); + $type_list = str_replace("\r","\n",$type_list); + if ($type_list) { + $options = array(); + $options[] = '-'; + foreach(explode("\n",$type_list) as $type_item) { + $type_item = trim($type_item); + if ($type_list_handles == 'yes') { + $options[$type_item] = elgg_echo('event_calendar:type:'.$type_item); + } else { + $options[$type_item] = $type_item; + } + } + $body .= '

'; + $body .= '

'.$prefix['event_type'].elgg_echo('event_calendar:type_description').'

'; + } +} + +$body .= '

'; +$body .= '

'.$prefix['fees'].elgg_echo('event_calendar:fees_description').'

'; + +$body .= '

'; +$body .= '

'.$prefix['contact'].elgg_echo('event_calendar:contact_description').'

'; + +$body .= '

'; +$body .= '

'.$prefix['organiser'].elgg_echo('event_calendar:organiser_description').'

'; + +$body .= '

'; +$body .= '

'.$prefix['event_tags'].elgg_echo('event_calendar:event_tags_description').'

'; + +$body .= '

'; +$body .= '

'.$prefix['long_description'].elgg_echo('event_calendar:long_description_description').'

'; + +if($event_calendar_hide_access == 'yes') { + $event_calendar_default_access = get_plugin_setting('default_access', 'event_calendar'); + if($event_calendar_default_access) { + $body .= elgg_view("input/hidden",array('internalname' => 'access','value'=>$event_calendar_default_access)); + } else { + $body .= elgg_view("input/hidden",array('internalname' => 'access','value'=>ACCESS_PRIVATE)); + } +} else { + $body .= '

'; +} + +print $body; +?> \ No newline at end of file diff --git a/views/default/event_calendar/groupprofile_calendar.php b/views/default/event_calendar/groupprofile_calendar.php new file mode 100644 index 000000000..175098e0c --- /dev/null +++ b/views/default/event_calendar/groupprofile_calendar.php @@ -0,0 +1,42 @@ + + * @copyright Radagast Solutions 2008 + * @link http://radagast.biz/ + * + */ + +$page_owner_entity = page_owner_entity(); + +if (event_calendar_activated_for_group($page_owner_entity)) { + $num = 5; + // Get the upcoming events + $start_date = time(); // now + $end_date = $start_date + 60*60*24*365*2; // maximum is two years from now + $events = event_calendar_get_events_between($start_date,$end_date,false,$num,0,page_owner()); + + // If there are any events to view, view them + if (is_array($events) && sizeof($events) > 0) { + + echo '
'; + echo '

'.elgg_echo("event_calendar:groupprofile").'

'; + foreach($events as $event) { + echo elgg_view("object/event_calendar",array('entity' => $event)); + } + echo ''; + echo "
"; + + } else if (get_plugin_setting('group_always_display', 'event_calendar') == 'yes') { + echo '
'; + echo '

'.elgg_echo("event_calendar:groupprofile").'

'; + echo '
'.elgg_echo('event_calendar:no_events_found').'
'; + echo "
"; + } +} + +?> \ No newline at end of file diff --git a/views/default/event_calendar/input/longtext.php b/views/default/event_calendar/input/longtext.php new file mode 100644 index 000000000..86b0f3fc4 --- /dev/null +++ b/views/default/event_calendar/input/longtext.php @@ -0,0 +1,25 @@ + + + \ No newline at end of file diff --git a/views/default/event_calendar/metatags.php b/views/default/event_calendar/metatags.php new file mode 100644 index 000000000..8375ef118 --- /dev/null +++ b/views/default/event_calendar/metatags.php @@ -0,0 +1,2 @@ + + diff --git a/views/default/event_calendar/nav.php b/views/default/event_calendar/nav.php new file mode 100644 index 000000000..ceedfd485 --- /dev/null +++ b/views/default/event_calendar/nav.php @@ -0,0 +1,38 @@ + +
+
    + +
  • >
  • + +
  • >
  • +
  • >
  • +
  • >
  • +
+
+$url_start,'region'=>$vars['region'])); +} +?> \ No newline at end of file diff --git a/views/default/event_calendar/paged_footer.php b/views/default/event_calendar/paged_footer.php new file mode 100644 index 000000000..954769104 --- /dev/null +++ b/views/default/event_calendar/paged_footer.php @@ -0,0 +1,4 @@ +'; +?> + diff --git a/views/default/event_calendar/paged_header.php b/views/default/event_calendar/paged_header.php new file mode 100644 index 000000000..5f4b8e59c --- /dev/null +++ b/views/default/event_calendar/paged_header.php @@ -0,0 +1,15 @@ +'; +$header .= '
'.$vars['date'].'
'; +$header .= ''; +$header .= ''; +$header .= ''; +$header .= ''; +$header .= ''; +if ($vars['personal_manage'] != 'no') { + $header .= ''; +} +$header .= ''; + +echo $header; +?> \ No newline at end of file diff --git a/views/default/event_calendar/paged_item_view.php b/views/default/event_calendar/paged_item_view.php new file mode 100644 index 000000000..77c8bed4e --- /dev/null +++ b/views/default/event_calendar/paged_item_view.php @@ -0,0 +1,29 @@ +start_time)) { + $time_bit = event_calendar_convert_time($event->start_time); +} + +$date_bit = event_calendar_get_formatted_date($event->start_date); + +if (event_calendar_has_personal_event($event->guid,get_loggedin_userid())) { + $calendar_bit = 'checked = "checked"'; +} else { + $calendar_bit = ''; +} + +$calendar_bit .= ' onclick="javascript:event_calendar_personal_toggle('.$event->guid.'); return true;" '; + +$info = ''; +$info .= ''; +$info .= ''; +$info .= ''; +$info .= ''; +if ($vars['personal_manage'] != 'no') { + $info .= ''; +} +$info .= ''; + +echo $info; +?> \ No newline at end of file diff --git a/views/default/event_calendar/paged_view.php b/views/default/event_calendar/paged_view.php new file mode 100644 index 000000000..7c2ea2eaa --- /dev/null +++ b/views/default/event_calendar/paged_view.php @@ -0,0 +1,51 @@ + $_SERVER['REQUEST_URI'], + 'baseurl' => $_SERVER['SCRIPT_NAME'].'/?'.$_SERVER['QUERY_STRING'], + 'offset' => $vars['offset'], + 'count' => $vars['count'], + 'limit' => $vars['limit'], + + )); +$event_calendar_times = get_plugin_setting('times', 'event_calendar'); +$event_calendar_personal_manage = get_plugin_setting('personal_manage', 'event_calendar'); +$events = $vars['events']; +$html = ''; +$date_format = 'F Y'; +$current_month = ''; +if ($events) { + foreach($events as $event) { + $month = date($date_format,$event->start_date); + if ($month != $current_month) { + if ($html) { + $html .= elgg_view('event_calendar/paged_footer'); + } + $html .= elgg_view('event_calendar/paged_header',array('date'=>$month,'personal_manage'=>$event_calendar_personal_manage)); + + $current_month = $month; + } + $html .= elgg_view('event_calendar/paged_item_view',array('event'=>$event,'times'=>$event_calendar_times,'personal_manage'=>$event_calendar_personal_manage)); + } + $html .= elgg_view('event_calendar/paged_footer'); +} +$msgs = '
'; +$html = $msgs.$nav.'
'.$html.'
'.$nav; + +echo $html; +?> + \ No newline at end of file diff --git a/views/default/event_calendar/personal_toggle_js.php b/views/default/event_calendar/personal_toggle_js.php new file mode 100644 index 000000000..c0611e45c --- /dev/null +++ b/views/default/event_calendar/personal_toggle_js.php @@ -0,0 +1,20 @@ + + \ No newline at end of file diff --git a/views/default/event_calendar/region_select.php b/views/default/event_calendar/region_select.php new file mode 100644 index 000000000..81407b27d --- /dev/null +++ b/views/default/event_calendar/region_select.php @@ -0,0 +1,23 @@ +elgg_echo('event_calendar:all')); + foreach(explode("\n",$region_list) as $region_item) { + $region_item = trim($region_item); + $options_values[$region_item] = $region_item; + } + $js = "onchange=\"javascript:$('#event_list').load('".$vars['url_start'] + ."&callback=true®ion='+escape($('#region').val() ));\""; + //$js = "onchange=\"javascript:$('#event_list').load('".$vars['url_start']."&callback=true®ion='+$('#region').val());\""; + $body .= elgg_echo('event_calendar:region_filter_by_label'); + $body .= elgg_view("input/pulldown",array('internalid' => 'region','js'=>$js,'value'=>$vars['region'],'options_values'=>$options_values)); + $body .= '
'; +} + +echo $body; +?> \ No newline at end of file diff --git a/views/default/event_calendar/review_requests.php b/views/default/event_calendar/review_requests.php new file mode 100644 index 000000000..e1866a32b --- /dev/null +++ b/views/default/event_calendar/review_requests.php @@ -0,0 +1,25 @@ + $request, + 'size' => 'small' + )); + $info = ''.$request->name.''; + $info .= '
'; + $info .= elgg_view('output/confirmlink', + array( + 'class' => "cancel_button", + 'href' => $vars['url'] . 'action/event_calendar/killrequest?user_guid='.$request->guid.'&event_id=' . $vars['entity']->guid, + 'confirm' => elgg_echo('event_calendar:request:remove:check'), + 'text' => elgg_echo('delete'), + )); + $info .= '  '; + $url = elgg_add_action_tokens_to_url("{$vars['url']}action/event_calendar/addtocalendar?user_guid={$request->guid}&event_id={$vars['entity']->guid}"); + $info .= ''.elgg_echo('accept').''; + echo elgg_view_listing($icon,$info); + } +} + +?> diff --git a/views/default/event_calendar/show_events.php b/views/default/event_calendar/show_events.php new file mode 100644 index 000000000..31771f43d --- /dev/null +++ b/views/default/event_calendar/show_events.php @@ -0,0 +1,53 @@ + + * @copyright Radagast Solutions 2008 + * @link http://radagast.biz/ + * + */ + +$listing_format = $vars['listing_format']; + +if ($vars['events']) { + if (get_plugin_setting('agenda_view', 'event_calendar') == 'yes') { + $event_list = elgg_view('event_calendar/agenda_view',$vars); + } else { + if ($listing_format == 'paged') { + $event_list = elgg_view('event_calendar/paged_view',$vars); + } else { + $event_list = elgg_view_entity_list($vars['events'], $vars['count'], $vars['offset'], $vars['limit'], false, false); + } + } +} else { + $event_list = '

'.elgg_echo('event_calendar:no_events_found').'

'; +} +if ($listing_format == 'paged') { + echo $event_list; +} else { + if (isloggedin()) { + $nav = elgg_view('event_calendar/nav',$vars); + } else { + $nav = ''; + } +?> +
'.elgg_echo('event_calendar:paged:column:date').''.elgg_echo('event_calendar:paged:column:time').''.elgg_echo('event_calendar:paged:column:event').''.elgg_echo('event_calendar:paged:column:venue').''.elgg_echo('event_calendar:paged:column:calendar').'
'.$date_bit.''.$time_bit.''.$event->title.''.$event->venue.'
+ + +
+
+'.$event_list; +?> +
+
+ +
+ \ No newline at end of file diff --git a/views/default/event_calendar/strapline.php b/views/default/event_calendar/strapline.php new file mode 100644 index 000000000..15c7c98d9 --- /dev/null +++ b/views/default/event_calendar/strapline.php @@ -0,0 +1,18 @@ +
+ +time_created; + $owner_guid = $event->owner_guid; + $owner = get_entity($owner_guid); + + echo sprintf(elgg_echo('event_calendar:strapline'), + friendly_time($time_updated), + "getURL() . "\">" . $owner->name ."" + ); + +?> + +
\ No newline at end of file diff --git a/views/default/icon/object/event_calendar/small.php b/views/default/icon/object/event_calendar/small.php new file mode 100644 index 000000000..d30d14453 --- /dev/null +++ b/views/default/icon/object/event_calendar/small.php @@ -0,0 +1,3 @@ + \ No newline at end of file diff --git a/views/default/input/datepicker_inline.php b/views/default/input/datepicker_inline.php new file mode 100644 index 000000000..560074a2d --- /dev/null +++ b/views/default/input/datepicker_inline.php @@ -0,0 +1,52 @@ + + * @copyright Radagast Solutions 2008 + * @link http://radagast.biz/ + * + */ +?> + + +
+

\ No newline at end of file diff --git a/views/default/input/datepicker_popup.php b/views/default/input/datepicker_popup.php new file mode 100644 index 000000000..8e1120ce7 --- /dev/null +++ b/views/default/input/datepicker_popup.php @@ -0,0 +1,30 @@ + + * @copyright Radagast Solutions 2008 + * @link http://radagast.biz/ + * + */ +if ($vars['dateformat']) { + $date_format = $vars['dateformat']; +} else { + $date_format = "DD, MM d, yy"; +} +?> + + + \ No newline at end of file diff --git a/views/default/input/timepicker.php b/views/default/input/timepicker.php new file mode 100644 index 000000000..35fa5ac98 --- /dev/null +++ b/views/default/input/timepicker.php @@ -0,0 +1,38 @@ +$vars['internalname'].'_h','value'=>$hour,'options_values'=>$hours)); +echo elgg_view('input/pulldown',array('internalname'=>$vars['internalname'].'_m','value'=>$minute,'options_values'=>$minutes)); + +?> \ No newline at end of file diff --git a/views/default/object/event_calendar.php b/views/default/object/event_calendar.php new file mode 100644 index 000000000..70560bd2d --- /dev/null +++ b/views/default/object/event_calendar.php @@ -0,0 +1,66 @@ + + * @copyright Radagast Solutions 2008 + * @link http://radagast.biz/ + * + */ + +$event = $vars['entity']; + + +if ($vars['full']) { + $body = elgg_view('event_calendar/strapline',$vars); + $event_items = event_calendar_get_formatted_full_items($event); + $body .= '
'; + + foreach($event_items as $item) { + $value = $item->value; + if (!empty($value)) { + + //This function controls the alternating class + $even_odd = ( 'odd' != $even_odd ) ? 'odd' : 'even'; + $body .= "

"; + $body .= $item->title.': '; + $body .= $item->value; + + } + } + echo $body; + if ($event->long_description) { + echo '

'.$event->long_description.'

'; + } else { + echo '

'.$event->description.'

'; + } + echo '
'; + if (get_plugin_setting('add_to_group_calendar', 'event_calendar') == 'yes') { + echo elgg_view('event_calendar/forms/add_to_group',array('event' => $event)); + } +} else { + $time_bit = event_calendar_get_formatted_time($event); + $icon = elgg_view( + "graphics/icon", array( + 'entity' => $vars['entity'], + 'size' => 'small', + ) + ); + $info .= '

'.$event->title.''; + $info .= '
'.$time_bit; + if ($event->description) { + $info .= '

'.$event->description; + } + + if ($event_calendar_venue_view = get_plugin_setting('venue_view', 'event_calendar') == 'yes') { + $info .= '
'.$event->venue; + } + $info .= '

'; + + echo elgg_view_listing($icon, $info); +} + +?> \ No newline at end of file diff --git a/views/default/river/object/event_calendar/create.php b/views/default/river/object/event_calendar/create.php new file mode 100644 index 000000000..f144ca610 --- /dev/null +++ b/views/default/river/object/event_calendar/create.php @@ -0,0 +1,12 @@ +subject_guid); + $object = get_entity($vars['item']->object_guid); + + $url = "getURL()}\">{$performed_by->name}"; + $string = sprintf(elgg_echo("event_calendar:river:created"),$url) . " "; + $string .= elgg_echo("event_calendar:river:create")." getURL() . "\">" . $object->title . ""; + +?> + + \ No newline at end of file diff --git a/views/default/river/object/event_calendar/update.php b/views/default/river/object/event_calendar/update.php new file mode 100644 index 000000000..5a5d376b1 --- /dev/null +++ b/views/default/river/object/event_calendar/update.php @@ -0,0 +1,12 @@ +subject_guid); + $object = get_entity($vars['item']->object_guid); + + $url = "getURL()}\">{$performed_by->name}"; + $string = sprintf(elgg_echo("event_calendar:river:updated"),$url) . " "; + $string .= elgg_echo("event_calendar:river:the_event")." getURL() . "\">" . $object->title . ""; + +?> + + \ No newline at end of file diff --git a/views/default/settings/event_calendar/edit.php b/views/default/settings/event_calendar/edit.php new file mode 100644 index 000000000..429a85b26 --- /dev/null +++ b/views/default/settings/event_calendar/edit.php @@ -0,0 +1,363 @@ +'yes', + elgg_echo('event_calendar:settings:no')=>'no', +); + +$access_options = array( ACCESS_PRIVATE => elgg_echo("PRIVATE"), + ACCESS_LOGGED_IN => elgg_echo("LOGGED_IN"), + ACCESS_PUBLIC => elgg_echo("PUBLIC")); + +// TODO - merge the agenda view into the list format options + +$listing_options = array(elgg_echo('event_calendar:settings:paged')=>'paged', + elgg_echo('event_calendar:settings:month')=>'month', +); + +$body = ''; + +$event_calendar_hide_access = get_plugin_setting('hide_access', 'event_calendar'); +if (!$event_calendar_hide_access) { + $event_calendar_hide_access = 'no'; +} + +$body .= elgg_echo('event_calendar:settings:hide_access:title'); +$body .= '
'; +$body .= elgg_view('input/radio',array('internalname'=>'params[hide_access]','value'=>$event_calendar_hide_access,'options'=>$yn_options)); + +$body .= '
'; + +$event_calendar_default_access = get_plugin_setting('default_access', 'event_calendar'); +if (!$event_calendar_default_access) { + $event_calendar_default_access = ACCESS_LOGGED_IN; +} + +$body .= elgg_echo('event_calendar:settings:default_access:title'); +$body .= '
'; +$body .= elgg_view('input/pulldown',array('internalname'=>'params[default_access]','value'=>$event_calendar_default_access,'options_values'=>$access_options)); + +$body .= '

'; + +$event_calendar_hide_end = get_plugin_setting('hide_end', 'event_calendar'); +if (!$event_calendar_hide_end) { + $event_calendar_hide_end = 'no'; +} + +$body .= elgg_echo('event_calendar:settings:hide_end:title'); +$body .= '
'; +$body .= elgg_view('input/radio',array('internalname'=>'params[hide_end]','value'=>$event_calendar_hide_end,'options'=>$yn_options)); + +$body .= '
'; + +$event_calendar_listing_format = get_plugin_setting('listing_format', 'event_calendar'); +if (!$event_calendar_listing_format) { + $event_calendar_listing_format = 'month'; +} + +$body .= elgg_echo('event_calendar:settings:listing_format:title'); +$body .= '
'; +$body .= elgg_view('input/radio',array('internalname'=>'params[listing_format]','value'=>$event_calendar_listing_format,'options'=>$listing_options)); + +$body .= '
'; + +$event_calendar_times = get_plugin_setting('times', 'event_calendar'); +if (!$event_calendar_times) { + $event_calendar_times = 'no'; +} + +$body .= elgg_echo('event_calendar:settings:times:title'); +$body .= '
'; +$body .= elgg_view('input/radio',array('internalname'=>'params[times]','value'=>$event_calendar_times,'options'=>$yn_options)); + +$body .= '
'; + +$event_calendar_autopersonal = get_plugin_setting('autopersonal', 'event_calendar'); +if (!$event_calendar_autopersonal) { + $event_calendar_autopersonal = 'yes'; +} + +$body .= elgg_echo('event_calendar:settings:autopersonal:title'); +$body .= '
'; +$body .= elgg_view('input/radio',array('internalname'=>'params[autopersonal]','value'=>$event_calendar_autopersonal,'options'=>$yn_options)); + +$body .= '
'; + +$event_calendar_autogroup = get_plugin_setting('autogroup', 'event_calendar'); +if (!$event_calendar_autogroup) { + $event_calendar_autogroup = 'no'; +} + +$body .= elgg_echo('event_calendar:settings:autogroup:title'); +$body .= '
'; +$body .= elgg_view('input/radio',array('internalname'=>'params[autogroup]','value'=>$event_calendar_autogroup,'options'=>$yn_options)); + +$body .= '
'; + +$event_calendar_add_to_group_calendar = get_plugin_setting('add_to_group_calendar', 'event_calendar'); +if (!$event_calendar_add_to_group_calendar) { + $event_calendar_add_to_group_calendar = 'no'; +} + +$body .= elgg_echo('event_calendar:settings:add_to_group_calendar:title'); +$body .= '
'; +$body .= elgg_view('input/radio',array('internalname'=>'params[add_to_group_calendar]','value'=>$event_calendar_add_to_group_calendar,'options'=>$yn_options)); + +$body .= '
'; + +$event_calendar_agenda_view = get_plugin_setting('agenda_view', 'event_calendar'); +if (!$event_calendar_agenda_view) { + $event_calendar_agenda_view = 'no'; +} + +$body .= elgg_echo('event_calendar:settings:agenda_view:title'); +$body .= '
'; +$body .= elgg_view('input/radio',array('internalname'=>'params[agenda_view]','value'=>$event_calendar_agenda_view,'options'=>$yn_options)); + +$body .= '
'; + +$event_calendar_venue_view = get_plugin_setting('venue_view', 'event_calendar'); +if (!$event_calendar_venue_view) { + $event_calendar_venue_view = 'no'; +} + +$body .= elgg_echo('event_calendar:settings:venue_view:title'); +$body .= '
'; +$body .= elgg_view('input/radio',array('internalname'=>'params[venue_view]','value'=>$event_calendar_venue_view,'options'=>$yn_options)); + +$body .= '
'; + +$options = array(elgg_echo('event_calendar:settings:no')=>'no', + elgg_echo('event_calendar:settings:site_calendar:admin')=>'admin', + elgg_echo('event_calendar:settings:site_calendar:loggedin')=>'loggedin', +); + +$event_calendar_site_calendar = get_plugin_setting('site_calendar', 'event_calendar'); +if (!$event_calendar_site_calendar) { + $event_calendar_site_calendar = 'admin'; +} + +$body .= elgg_echo('event_calendar:settings:site_calendar:title').'
'; +$body .= elgg_view('input/radio',array('internalname'=>'params[site_calendar]','value'=>$event_calendar_site_calendar,'options'=>$options)); + +$body .= '
'; + +$options = array(elgg_echo('event_calendar:settings:no')=>'no', + elgg_echo('event_calendar:settings:group_calendar:admin')=>'admin', + elgg_echo('event_calendar:settings:group_calendar:members')=>'members', +); + +$event_calendar_group_calendar = get_plugin_setting('group_calendar', 'event_calendar'); +if (!$event_calendar_group_calendar) { + $event_calendar_group_calendar = 'members'; +} + +$body .= elgg_echo('event_calendar:settings:group_calendar:title').'
'; +$body .= elgg_view('input/radio',array('internalname'=>'params[group_calendar]','value'=>$event_calendar_group_calendar,'options'=>$options)); + +$body .= '
'; + +$options = array(elgg_echo('event_calendar:settings:group_default:yes')=>'yes', + elgg_echo('event_calendar:settings:group_default:no')=>'no', +); + +$event_calendar_group_default = get_plugin_setting('group_default', 'event_calendar'); +if (!$event_calendar_group_default) { + $event_calendar_group_default = 'yes'; +} + +$body .= elgg_echo('event_calendar:settings:group_default:title'); +$body .= '
'; +$body .= elgg_view('input/radio',array('internalname'=>'params[group_default]','value'=>$event_calendar_group_default,'options'=>$options)); + +$body .= '
'; + +$event_calendar_group_always_display = get_plugin_setting('group_always_display', 'event_calendar'); +if (!$event_calendar_group_always_display) { + $event_calendar_group_always_display = 'no'; +} + +$body .= elgg_echo('event_calendar:settings:group_always_display:title'); +$body .= '
'; +$body .= elgg_view('input/radio',array('internalname'=>'params[group_always_display]','value'=>$event_calendar_group_always_display,'options'=>$yn_options)); + +$body .= '
'; + +$options = array(elgg_echo('event_calendar:settings:group_profile_display_option:left')=>'left', + elgg_echo('event_calendar:settings:group_profile_display_option:right')=>'right', + elgg_echo('event_calendar:settings:group_profile_display_option:none')=>'none', +); + +$event_calendar_group_profile_display = get_plugin_setting('group_profile_display', 'event_calendar'); +if (!$event_calendar_group_profile_display) { + $event_calendar_group_profile_display = 'right'; +} + +$body .= elgg_echo('event_calendar:settings:group_profile_display:title').'
'; +$body .= elgg_view('input/radio',array('internalname'=>'params[group_profile_display]','value'=>$event_calendar_group_profile_display,'options'=>$options)); + +$body .= '
'; + +$event_calendar_add_users = get_plugin_setting('add_users', 'event_calendar'); +if (!$event_calendar_add_users) { + $event_calendar_add_users = 'no'; +} + +$body .= elgg_echo('event_calendar:settings:add_users:title'); +$body .= '
'; +$body .= elgg_view('input/radio',array('internalname'=>'params[add_users]','value'=>$event_calendar_add_users,'options'=>$yn_options)); + +$body .= '
'; + +$event_calendar_add_users_notify = get_plugin_setting('add_users_notify', 'event_calendar'); +if (!$event_calendar_add_users_notify) { + $event_calendar_add_users_notify = 'no'; +} + +$body .= elgg_echo('event_calendar:settings:add_users_notify:title'); +$body .= '
'; +$body .= elgg_view('input/radio',array('internalname'=>'params[add_users_notify]','value'=>$event_calendar_add_users_notify,'options'=>$yn_options)); + +$body .= '
'; + +$event_calendar_personal_manage = get_plugin_setting('personal_manage', 'event_calendar'); +if (!$event_calendar_personal_manage) { + $event_calendar_personal_manage = 'yes'; +} + +$body .= elgg_echo('event_calendar:settings:personal_manage:title'); +$body .= '
'; +$body .= elgg_view('input/radio',array('internalname'=>'params[personal_manage]','value'=>$event_calendar_personal_manage,'options'=>$yn_options)); + +$body .= '
'; + +$event_calendar_spots_display = get_plugin_setting('spots_display', 'event_calendar'); +if (!$event_calendar_spots_display) { + $event_calendar_spots_display = 'no'; +} + +$body .= elgg_echo('event_calendar:settings:spots_display:title'); +$body .= '
'; +$body .= elgg_view('input/radio',array('internalname'=>'params[spots_display]','value'=>$event_calendar_spots_display,'options'=>$yn_options)); + +$body .= '
'; + +$event_calendar_no_collisions = get_plugin_setting('no_collisions', 'event_calendar'); +if (!$event_calendar_no_collisions) { + $event_calendar_no_collisions = 'no'; +} + +$body .= elgg_echo('event_calendar:settings:no_collisions:title'); +$body .= '
'; +$body .= elgg_view('input/radio',array('internalname'=>'params[no_collisions]','value'=>$event_calendar_no_collisions,'options'=>$yn_options)); + +$body .= '
'; + +$event_calendar_collision_length = get_plugin_setting('collision_length', 'event_calendar'); +if (!$event_calendar_collision_length) { + $event_calendar_collision_length = '3600'; +} + +$body .= elgg_echo('event_calendar:settings:collision_length:title'); +$body .= '
'; +$body .= elgg_view('input/text',array('internalname'=>'params[collision_length]','value'=>$event_calendar_collision_length)); + +$body .= '

'; + +$event_calendar_region_display = get_plugin_setting('region_display', 'event_calendar'); +if (!$event_calendar_region_display) { + $event_calendar_region_display = 'no'; +} + +$body .= elgg_echo('event_calendar:settings:region_display:title'); +$body .= '
'; +$body .= elgg_view('input/radio',array('internalname'=>'params[region_display]','value'=>$event_calendar_region_display,'options'=>$yn_options)); + +$body .= '
'; + +$event_calendar_region_list = get_plugin_setting('region_list', 'event_calendar'); +if (!$event_calendar_region_list) { + $event_calendar_region_list = ''; +} + +$body .= elgg_echo('event_calendar:settings:region_list:title'); +$body .= '
'; +$body .= elgg_view('event_calendar/input/longtext',array('internalname'=>'params[region_list]','value'=>$event_calendar_region_list)); + +$body .= '
'; + +$event_calendar_region_list_handles = get_plugin_setting('region_list_handles', 'event_calendar'); +if (!$event_calendar_region_list_handles) { + $event_calendar_region_list_handles = 'no'; +} + +$body .= elgg_echo('event_calendar:settings:region_list_handles:title'); +$body .= '
'; +$body .= elgg_view('input/radio',array('internalname'=>'params[region_list_handles]','value'=>$event_calendar_region_list_handles,'options'=>$yn_options)); + +$body .= '
'; + +$event_calendar_type_display = get_plugin_setting('type_display', 'event_calendar'); +if (!$event_calendar_type_display) { + $event_calendar_type_display = 'no'; +} + +$body .= elgg_echo('event_calendar:settings:type_display:title'); +$body .= '
'; +$body .= elgg_view('input/radio',array('internalname'=>'params[type_display]','value'=>$event_calendar_type_display,'options'=>$yn_options)); + +$body .= '
'; + +$event_calendar_type_list = get_plugin_setting('type_list', 'event_calendar'); +if (!$event_calendar_type_list) { + $event_calendar_type_list = ''; +} + +$body .= elgg_echo('event_calendar:settings:type_list:title'); +$body .= '
'; +$body .= elgg_view('event_calendar/input/longtext',array('internalname'=>'params[type_list]','value'=>$event_calendar_type_list)); + +$body .= '
'; + +$event_calendar_type_list_handles = get_plugin_setting('type_list_handles', 'event_calendar'); +if (!$event_calendar_type_list_handles) { + $event_calendar_type_list_handles = 'no'; +} + +$body .= elgg_echo('event_calendar:settings:type_list_handles:title'); +$body .= '
'; +$body .= elgg_view('input/radio',array('internalname'=>'params[type_list_handles]','value'=>$event_calendar_type_list_handles,'options'=>$yn_options)); + +$body .= '
'; + +$event_calendar_first_date = get_plugin_setting('first_date', 'event_calendar'); +if (!$event_calendar_first_date) { + $event_calendar_first_date = ''; +} + +$body .= elgg_echo('event_calendar:settings:first_date:title'); +$body .= '
'; +$body .= elgg_view('input/text',array('internalname'=>'params[first_date]','value'=>$event_calendar_first_date)); + +$body .= '

'; + +$event_calendar_last_date = get_plugin_setting('last_date', 'event_calendar'); +if (!$event_calendar_last_date) { + $event_calendar_last_date = ''; +} + +$body .= elgg_echo('event_calendar:settings:last_date:title'); +$body .= '
'; +$body .= elgg_view('input/text',array('internalname'=>'params[last_date]','value'=>$event_calendar_last_date)); + +$body .= '

'; + +$event_calendar_more_required = get_plugin_setting('more_required', 'event_calendar'); +if (!$event_calendar_more_required) { + $event_calendar_more_required = 'no'; +} + +$body .= elgg_echo('event_calendar:settings:more_required:title'); +$body .= '
'; +$body .= elgg_view('input/radio',array('internalname'=>'params[more_required]','value'=>$event_calendar_more_required,'options'=>$yn_options)); + +echo $body; +?> \ No newline at end of file diff --git a/views/default/widgets/event_calendar/edit.php b/views/default/widgets/event_calendar/edit.php new file mode 100644 index 000000000..716920c8a --- /dev/null +++ b/views/default/widgets/event_calendar/edit.php @@ -0,0 +1,35 @@ + + * @copyright Radagast Solutions 2008 + * @link http://radagast.biz/ + * + */ + +if (!$vars['entity']->num_display) { + $num_display = 5; +} else { + $num_display = $vars['entity']->num_display; +} +?> + +

+ : + +

diff --git a/views/default/widgets/event_calendar/view.php b/views/default/widgets/event_calendar/view.php new file mode 100644 index 000000000..12fff6d60 --- /dev/null +++ b/views/default/widgets/event_calendar/view.php @@ -0,0 +1,39 @@ + + * @copyright Radagast Solutions 2008 + * @link http://radagast.biz/ + * + */ + + // Load event calendar model + require_once(dirname(dirname(dirname(dirname(dirname(__FILE__)))))."/models/model.php"); + + //the number of events to display + $num = (int) $vars['entity']->num_display; + if (!$num) + $num = 5; + + // Get the events + + $events = event_calendar_get_personal_events_for_user(page_owner(),$num); + + // If there are any events to view, view them + if (is_array($events) && sizeof($events) > 0) { + + echo "
"; + + foreach($events as $event) { + echo elgg_view("object/event_calendar",array('entity' => $event)); + } + + echo "
"; + + } + +?> \ No newline at end of file diff --git a/views/rss/event_calendar/show_events.php b/views/rss/event_calendar/show_events.php new file mode 100644 index 000000000..0b2fe5b70 --- /dev/null +++ b/views/rss/event_calendar/show_events.php @@ -0,0 +1,16 @@ + + * @copyright Radagast Solutions 2009 + * @link http://radagast.biz/ + * + */ + +if ($vars['events']) { + echo elgg_view_entity_list($vars['events'], $vars['count'], $vars['offset'], $vars['limit'], false, false); +} +?> \ No newline at end of file diff --git a/views/rss/object/event_calendar.php b/views/rss/object/event_calendar.php new file mode 100644 index 000000000..92f6fcc14 --- /dev/null +++ b/views/rss/object/event_calendar.php @@ -0,0 +1,60 @@ +title; + + $event_items = event_calendar_get_formatted_full_items($vars['entity']); + $items = array(); + foreach($event_items as $item) { + if (trim($item->value)) { + $items[] = ''.$item->title.': '.$item->value; + } + } + + $description = '

'.implode('
',$items).'

'; + + if ($vars['entity']->long_description) { + $description .= '

'.autop($vars['entity']->long_description).'

'; + } else { + $description .= '

'.$vars['entity']->description.'

'; + } + +?> + + + getURL()); ?> + getURL()); ?> + <![CDATA[<?php echo $title; ?>]]> + ]]> + getOwnerEntity(); + if ($owner) + { +?> + name; ?> + + getLongitude()) && + ($vars['entity']->getLatitude()) + ) { + ?> + getLatitude(); ?> getLongitude(); ?> + + + -- cgit v1.2.3 From b1ef9493829d407f87b8cc14810ccdac07d345a8 Mon Sep 17 00:00:00 2001 From: cash Date: Wed, 29 Jun 2011 20:52:46 -0400 Subject: removed uses of extend_view() and some checks for whether a function exists --- show_events.php | 2 +- start.php | 21 +++++++++------------ views/default/event_calendar/forms/manage_event.php | 2 +- 3 files changed, 11 insertions(+), 14 deletions(-) diff --git a/show_events.php b/show_events.php index 4d8f09702..d3cd8c76a 100644 --- a/show_events.php +++ b/show_events.php @@ -156,7 +156,7 @@ if ($filter == 'all') { $events = event_calendar_get_events_for_user_between($start_ts,$end_ts,false,$limit,$offset,$user_guid,$group_guid,$region); } -extend_view('metatags','event_calendar/metatags'); +elgg_extend_view('metatags','event_calendar/metatags'); $vars = array( 'original_start_date' => $original_start_date, 'start_date' => $start_date, diff --git a/start.php b/start.php index d12f56848..57007fa77 100644 --- a/start.php +++ b/start.php @@ -33,8 +33,7 @@ register_entity_url_handler('event_calendar_url','object', 'event_calendar'); // Register granular notification for this type - if (is_callable('register_notification_object')) - register_notification_object('object', 'event_calendar', elgg_echo('event_calendar:new_event')); + register_notification_object('object', 'event_calendar', elgg_echo('event_calendar:new_event')); // Set up menu for users if (isloggedin()) { @@ -53,26 +52,24 @@ if (!$group_calendar || $group_calendar != 'no') { $group_profile_display = get_plugin_setting('group_profile_display', 'event_calendar'); if (!$group_profile_display || $group_profile_display == 'right') { - extend_view('groups/right_column', 'event_calendar/groupprofile_calendar'); + elgg_extend_view('groups/right_column', 'event_calendar/groupprofile_calendar'); } else if ($group_profile_display == 'left') { - extend_view('groups/left_column', 'event_calendar/groupprofile_calendar'); + elgg_extend_view('groups/left_column', 'event_calendar/groupprofile_calendar'); } } //add to the css - extend_view('css', 'event_calendar/css'); + elgg_extend_view('css', 'event_calendar/css'); //add a widget add_widget_type('event_calendar',elgg_echo("event_calendar:widget_title"),elgg_echo('event_calendar:widget:description')); // add the event calendar group tool option - if (function_exists('add_group_tool_option')) { - $event_calendar_group_default = get_plugin_setting('group_default', 'event_calendar'); - if (!$event_calendar_group_default || ($event_calendar_group_default == 'yes')) { - add_group_tool_option('event_calendar',elgg_echo('event_calendar:enable_event_calendar'),true); - } else { - add_group_tool_option('event_calendar',elgg_echo('event_calendar:enable_event_calendar'),false); - } + $event_calendar_group_default = get_plugin_setting('group_default', 'event_calendar'); + if (!$event_calendar_group_default || ($event_calendar_group_default == 'yes')) { + add_group_tool_option('event_calendar',elgg_echo('event_calendar:enable_event_calendar'),true); + } else { + add_group_tool_option('event_calendar',elgg_echo('event_calendar:enable_event_calendar'),false); } // if autogroup is set, listen and respond to join/leave events diff --git a/views/default/event_calendar/forms/manage_event.php b/views/default/event_calendar/forms/manage_event.php index 35b9dba71..f9d78e3f4 100644 --- a/views/default/event_calendar/forms/manage_event.php +++ b/views/default/event_calendar/forms/manage_event.php @@ -11,7 +11,7 @@ * */ -extend_view('metatags','event_calendar/metatags'); +elgg_extend_view('metatags','event_calendar/metatags'); $body = elgg_view('event_calendar/forms/manage_event_content',$vars); -- cgit v1.2.3 From b92a38c8a696db700beafab2d1538bd74c302d94 Mon Sep 17 00:00:00 2001 From: cash Date: Wed, 29 Jun 2011 21:34:30 -0400 Subject: replaced all uses of deprecated get_entities* functions --- models/model.php | 22 +++++++++++++++++++--- .../default/event_calendar/forms/add_to_group.php | 18 +++++++++++++++--- 2 files changed, 34 insertions(+), 6 deletions(-) diff --git a/models/model.php b/models/model.php index 04a168e55..dcc9506f3 100644 --- a/models/model.php +++ b/models/model.php @@ -491,7 +491,11 @@ function event_calendar_get_entities_from_metadata_between_related($meta_start_n } } $related_list = array(); - $related_events = get_entities_from_relationship("display_on_group", $container_guid, TRUE); + $related_events = elgg_get_entities_from_relationship(array( + 'relationship' => 'display_on_group', + 'relationship_guid' => $container_guid, + 'inverse_relationship' => TRUE, + )); if ($related_events) { foreach ($related_events as $event) { $related_list[$event->guid] = $event; @@ -719,7 +723,13 @@ function event_calendar_remove_personal_event($event_id,$user_id) { } function event_calendar_get_personal_events_for_user($user_id,$limit) { - $events = get_entities_from_annotations("object", "event_calendar", "personal_event", $user_id,0, 0, 1000); + $events = elgg_get_entities_from_annotations(array( + 'type' => 'object', + 'subtype' => 'event_calendar', + 'annotation_names' => 'personal_event', + 'annotation_value' => $user_id, + 'limit' => 1000, + )); $final_events = array(); if ($events) { $now = time(); @@ -759,7 +769,13 @@ function event_calendar_security_fields() { } function event_calendar_get_events_for_group($group_guid) { - return get_entities('object','event_calendar',0,"",0,0,false,0,$group_guid); + $options = array( + 'type' => 'object', + 'subtype' => 'event_calendar', + 'container_guid' => $group_guid, + 'limit' => 0, + ); + return elgg_get_entities($options); } function event_calendar_handle_join($event, $object_type, $object) { diff --git a/views/default/event_calendar/forms/add_to_group.php b/views/default/event_calendar/forms/add_to_group.php index fc77495e1..07e2e8b33 100644 --- a/views/default/event_calendar/forms/add_to_group.php +++ b/views/default/event_calendar/forms/add_to_group.php @@ -10,16 +10,28 @@ $event_container = $vars['event']->container_guid; // get the list of all groups: if (isadminloggedin()) { - $groups = get_entities("group","",0,"",5000); + $groups = elgg_get_entities(array( + 'type' => 'group', + 'limit' => 5000, + )); } else { - $groups = get_entities("group","",get_loggedin_userid(),"",5000); + $groups = elgg_get_entities(array( + 'type' => 'group', + 'owner_guid' => get_loggedin_userid(), + 'limit' => 5000, + )); } // split the group list into two lists $add_options = array(); $remove_options = array(); -$remove_group = get_entities_from_relationship("display_on_group",$event_id,FALSE,"","",0,"",5000); +$remove_group = elgg_get_entities_from_relationship(array( + 'relationship' => 'display_on_group', + 'relationship_guid' => $event_id, + 'inverse_relationship' => FALSE, + 'limit' => 5000, +)); $remove_group_ids = array(); foreach ($remove_group as $group) { $remove_group_ids[] = $group->guid; -- cgit v1.2.3 From 2557245a41579a15dd960e2033f4d5f39ff566ac Mon Sep 17 00:00:00 2001 From: Kevin Jardine Date: Mon, 29 Aug 2011 20:59:54 +0200 Subject: first step in rewrite for Elgg 1.8 --- actions/event_calendar/add_personal.php | 17 + actions/event_calendar/delete.php | 21 + actions/event_calendar/edit.php | 51 ++ actions/event_calendar/remove_personal.php | 12 + .../event_calendar/request_personal_calendar.php | 16 + actions/manage.php | 105 ---- actions/request_personal_calendar.php | 18 - datepicker.css | 234 ------- flora.datepicker.css | 234 ------- languages/en.php | 6 + manifest.xml | 4 +- models/model.php | 695 +++++++++++++++------ start.php | 431 ++++++++----- ui.core.min.js | 9 - ui.datepicker.css | 62 -- ui.datepicker.js | 212 ------- ui.datepicker.min.js | 12 - ui.datepicker.packed.js | 2 - views/default/event_calendar/calendar.php | 19 +- views/default/event_calendar/css.php | 23 +- views/default/event_calendar/filter_menu.php | 54 ++ views/default/event_calendar/group_module.php | 43 ++ .../event_calendar/groupprofile_calendar.php | 4 +- views/default/event_calendar/show_events.php | 33 +- views/default/forms/event_calendar/edit.php | 246 ++++++++ views/default/input/datepicker_inline.php | 44 +- views/default/input/datepicker_popup.php | 1 + views/default/object/event_calendar.php | 66 +- views/default/widgets/event_calendar/view.php | 4 +- 29 files changed, 1358 insertions(+), 1320 deletions(-) create mode 100644 actions/event_calendar/add_personal.php create mode 100644 actions/event_calendar/delete.php create mode 100644 actions/event_calendar/edit.php create mode 100644 actions/event_calendar/remove_personal.php create mode 100644 actions/event_calendar/request_personal_calendar.php delete mode 100644 actions/manage.php delete mode 100644 actions/request_personal_calendar.php delete mode 100644 datepicker.css delete mode 100644 flora.datepicker.css delete mode 100644 ui.core.min.js delete mode 100644 ui.datepicker.css delete mode 100644 ui.datepicker.js delete mode 100644 ui.datepicker.min.js delete mode 100644 ui.datepicker.packed.js create mode 100644 views/default/event_calendar/filter_menu.php create mode 100644 views/default/event_calendar/group_module.php create mode 100644 views/default/forms/event_calendar/edit.php diff --git a/actions/event_calendar/add_personal.php b/actions/event_calendar/add_personal.php new file mode 100644 index 000000000..fd6f6cee2 --- /dev/null +++ b/actions/event_calendar/add_personal.php @@ -0,0 +1,17 @@ +canEdit()) { + if (get_input('cancel','')) { + system_message(elgg_echo('event_calendar:delete_cancel_response')); + } else { + $container = get_entity($event->container_guid); + $event->delete(); + system_message(elgg_echo('event_calendar:delete_response')); + if (elgg_instanceof($container,'group')) { + forward('event_calendar/group/'.$container->guid); + } else { + forward('event_calendar/list'); + } + } +} else { + register_error(elgg_echo('event_calendar:error_delete')); +} + +forward(REFERER); \ No newline at end of file diff --git a/actions/event_calendar/edit.php b/actions/event_calendar/edit.php new file mode 100644 index 000000000..2365d3965 --- /dev/null +++ b/actions/event_calendar/edit.php @@ -0,0 +1,51 @@ + + * @copyright Radagast Solutions 2008 + * @link http://radagast.biz/ + * + */ + +elgg_load_library('elgg:event_calendar'); + +// start a new sticky form session in case of failure +elgg_make_sticky_form('event_calendar'); + +$event_guid = get_input('event_guid',0); +$group_guid = get_input('group_guid',0); +$event = event_calendar_set_event_from_form($event_guid,$group_guid); +if ($event) { + // remove sticky form entries + elgg_clear_sticky_form('event_calendar'); + $user_guid = elgg_get_logged_in_user_guid(); + if ($event_guid) { + add_to_river('river/object/event_calendar/update','update',$user_guid,$event_guid); + system_message(elgg_echo('event_calendar:manage_event_response')); + } else { + $event_calendar_autopersonal = elgg_get_plugin_setting('autopersonal', 'event_calendar'); + if (!$event_calendar_autopersonal || ($event_calendar_autopersonal == 'yes')) { + event_calendar_add_personal_event($event_guid,$user_guid); + } + add_to_river('river/object/event_calendar/create','create',$user_guid,$event_guid); + system_message(elgg_echo('event_calendar:add_event_response')); + } + + forward($event->getURL()); +} else { + // redisplay form with error message + register_error(elgg_echo('event_calendar:manage_event_error')); + if ($event_guid) { + forward('event_calendar/edit/'.$event_guid); + } else { + if ($group_guid) { + forward('event_calendar/add/'.$group_guid); + } else { + forward('event_calendar/add/'); + } + } +} diff --git a/actions/event_calendar/remove_personal.php b/actions/event_calendar/remove_personal.php new file mode 100644 index 000000000..1308b17e9 --- /dev/null +++ b/actions/event_calendar/remove_personal.php @@ -0,0 +1,12 @@ + - * @copyright Radagast Solutions 2008 - * @link http://radagast.biz/ - * - */ - -// Load RIBA event model -require_once(dirname(dirname(__FILE__)) . "/models/model.php"); - -gatekeeper(); - -$event_action = get_input('event_action',''); -if ($event_action == 'add_event' || $event_action == 'manage_event') { - $result = event_calendar_set_event_from_form(); - if ($result->success) { - if ($event_action == 'manage_event') { - add_to_river('river/object/event_calendar/update','update',$_SESSION['user']->guid,$result->event->guid); - system_message(elgg_echo('event_calendar:manage_event_response')); - } else { - $event_calendar_autopersonal = get_plugin_setting('autopersonal', 'event_calendar'); - if (!$event_calendar_autopersonal || ($event_calendar_autopersonal == 'yes')) { - event_calendar_add_personal_event($result->event->guid,$_SESSION['user']->guid); - } - add_to_river('river/object/event_calendar/create','create',$_SESSION['user']->guid,$result->event->guid); - system_message(elgg_echo('event_calendar:add_event_response')); - } - - forward($result->event->getURL()); - } else { - // redisplay form with error message - register_error(elgg_echo('event_calendar:manage_event_error')); - $group_guid = (int) get_input('group_guid',0); - - if ($result->form_data->event_id) { - $event = get_entity($result->form_data->event_id); - if (!$event) { - register_error(elgg_echo('event_calendar:no_such_event_edit_error')); - forward(); - } else { - set_page_owner($event->container_guid); - if (page_owner_entity() instanceof ElggGroup) { - set_context('groups'); - } - } - - $title = elgg_echo('event_calendar:manage_event_title'); - } else { - $title = elgg_echo('event_calendar:add_event_title'); - if ($group_guid && $group = get_entity($group_guid)) { - // redefine context - set_context('groups'); - set_page_owner($group_guid); - } - } - $body = elgg_view('event_calendar/forms/manage_event', array('event'=>$result->form_data,'event_id'=>$result->form_data->event_id,'group_guid'=>$group_guid)); - - page_draw($title,elgg_view_layout("two_column_left_sidebar", '', elgg_view_title($title) . $body)); - } -} else if ($event_action == 'delete_event') { - $event_id = get_input('event_id',0); - if (($event_id = get_input('event_id',0)) && ($event = get_entity($event_id)) && $event->canEdit()) { - if (get_input('cancel','')) { - system_message(elgg_echo('event_calendar:delete_cancel_response')); - forward($event->getUrl()); - } else { - $container = get_entity($event->container_guid); - $event->delete(); - system_message(elgg_echo('event_calendar:delete_response')); - forward($container->getUrl()); - } - } else { - register_error(elgg_echo('event_calendar:error_delete')); - } -} else if ($event_action == 'add_personal') { - $event_id = get_input('event_id',0); - if (($event_id = get_input('event_id',0)) && ($event = get_entity($event_id))) { - $user_id = $_SESSION['user']->getGUID(); - if (!event_calendar_has_personal_event($event_id,$user_id)) { - if (event_calendar_add_personal_event($event_id,$user_id)) { - system_message(elgg_echo('event_calendar:add_to_my_calendar_response')); - } else { - register_error(elgg_echo('event_calendar:add_to_my_calendar_error')); - } - forward($event->getUrl()); - } - } -} else if ($event_action == 'remove_personal') { - $event_id = get_input('event_id',0); - if (($event_id = get_input('event_id',0)) && ($event = get_entity($event_id))) { - event_calendar_remove_personal_event($event_id,$_SESSION['user']->getGUID()); - system_message(elgg_echo('event_calendar:remove_from_my_calendar_response')); - forward($event->getUrl()); - } -} - -forward(); - -?> \ No newline at end of file diff --git a/actions/request_personal_calendar.php b/actions/request_personal_calendar.php deleted file mode 100644 index 4160326a6..000000000 --- a/actions/request_personal_calendar.php +++ /dev/null @@ -1,18 +0,0 @@ -getSubtype() == 'event_calendar')) { - if (event_calendar_send_event_request($event,$user_id)) { - system_message(elgg_echo('event_calendar:request_event_response')); - } else { - register_error(elgg_echo('event_calendar:request_event_error')); - } - - forward($event->getUrl()); - - exit; -} - -forward(); diff --git a/datepicker.css b/datepicker.css deleted file mode 100644 index 64f486908..000000000 --- a/datepicker.css +++ /dev/null @@ -1,234 +0,0 @@ -/* Main Style Sheet for jQuery UI ui-datepicker */ -#ui-datepicker-div, .ui-datepicker-inline { - font-family: Arial,Helvetica,sans-serif; - font-size: 14px; - padding: 0; - margin: 0; - background: #F5F5F5; - width: 185px; -} -#ui-datepicker-div { - display: none; - border: 1px solid #FF9900; - z-index: 10; -} -.ui-datepicker-inline { - float: left; - display: block; - border: 0; -} -.ui-datepicker-rtl { - direction: rtl; -} -.ui-datepicker-dialog { - padding: 5px !important; - border: 4px ridge #83C948 !important; -} -button.ui-datepicker-trigger { - width: 25px; -} -img.ui-datepicker-trigger { - margin: 2px; - vertical-align: middle; -} -.ui-datepicker-prompt { - float: left; - padding: 2px; - background: #F5F5F5; - color: #000; -} -*html .ui-datepicker-prompt { - width: 185px; -} -.ui-datepicker-control, .ui-datepicker-links, .ui-datepicker-header, .ui-datepicker { - clear: both; - float: left; - width: 100%; - color: #FFF; -} -.ui-datepicker-control { - background: #FF9900; - padding: 2px 0px; -} -.ui-datepicker-links { - background: #F5F5F5; - padding: 2px 0px; -} -.ui-datepicker-control, .ui-datepicker-links { - font-weight: bold; - font-size: 80%; - letter-spacing: 1px; -} - -/* KJ change this to avoid weird display change */ -/*.ui-datepicker-links label { - padding: 2px 5px; - color: #888; -}*/ - -.ui-datepicker-links label { - font-weight: bold; - font-size: 100%; - padding: 2px 5px; - letter-spacing: 1px; -} -.ui-datepicker-clear, .ui-datepicker-prev { - float: left; - width: 34%; -} -.ui-datepicker-rtl .ui-datepicker-clear, .ui-datepicker-rtl .ui-datepicker-prev { - float: right; - text-align: right; -} -.ui-datepicker-current { - float: left; - width: 30%; - text-align: center; -} -.ui-datepicker-close, .ui-datepicker-next { - float: right; - width: 34%; - text-align: right; -} -.ui-datepicker-rtl .ui-datepicker-close, .ui-datepicker-rtl .ui-datepicker-next { - float: left; - text-align: left; -} -.ui-datepicker-header { - padding: 1px 0 3px; - background: #3873B6; - text-align: center; - font-weight: bold; - height: 1.3em; - color: #FFFFFF; -} -.ui-datepicker-header select { - background: #3873B6; - color: #FFFFFF; - border: 0px; - font-weight: bold; -} -.ui-datepicker { - background: #CCC; - text-align: center; - font-size: 100%; -} -.ui-datepicker a { - display: block; - width: 100%; -} -.ui-datepicker-title-row { - background: #E3E3E3; - color: #000; -} -.ui-datepicker-title-row .ui-datepicker-week-end-cell { - background: #E3E3E3; -} -.ui-datepicker-days-row { - background: #FFF; - /*color: #666;*/ -} -.ui-datepicker-week-col { - background: #E3E3E3; - color: #000; -} -.ui-datepicker-days-cell { - /*color: #000;*/ - border: 1px solid #DDD; -} -.ui-datepicker-days-cell a { - display: block; -} -.ui-datepicker-week-end-cell { - background: #F5F5F5; -} -.ui-datepicker-unselectable { - color: #888; -} -.ui-datepicker-week-over, .ui-datepicker-week-over .ui-datepicker-week-end-cell { - background: #E3E3E3 !important; -} -.ui-datepicker-days-cell-over, .ui-datepicker-days-cell-over.ui-datepicker-week-end-cell { - background: #FFF !important; - border: 1px solid #777; -} -* html .ui-datepicker-title-row .ui-datepicker-week-end-cell { - background: #E3E3E3 !important; -} -* html .ui-datepicker-week-end-cell { - background: #F5F5F5 !important; - border: 1px solid #DDD !important; -} -* html .ui-datepicker-days-cell-over { - background: #FFF !important; - border: 1px solid #777 !important; -} -* html .ui-datepicker-current-day { - background: #3873B6 !important; - color: #FFFFFF !important; -} -.ui-datepicker-today { - background: #E3E3E3 !important; -} -.ui-datepicker-current-day { - background: #3873B6 !important; - color: #FFFFFF !important; -} - -.ui-datepicker-current-day a { - background: #3873B6 !important; - color: #FFFFFF !important; -} - -.ui-datepicker-status { - background: #F5F5F5; - width: 100%; - font-size: 80%; - text-align: center; -} -#ui-datepicker-div a, .ui-datepicker-inline a { - cursor: pointer; - margin: 0; - padding: 0; - background: none; - color: 000000; -} -.ui-datepicker-inline .ui-datepicker-links a { - padding: 0 5px !important; -} -.ui-datepicker-control a, .ui-datepicker-links a { - padding: 2px 5px !important; - color: #000 !important; -} -.ui-datepicker-title-row a { - color: #000 !important; -} -.ui-datepicker-control a:hover { - background: #FDD !important; - color: #333 !important; -} -.ui-datepicker-links a:hover, .ui-datepicker-title-row a:hover { - background: #FFF !important; - color: #333 !important; -} -.ui-datepicker-multi .ui-datepicker { - border: 1px solid #3873B6; -} -.ui-datepicker-one-month { - float: left; - width: 185px; -} -.ui-datepicker-new-row { - clear: left; -} -.ui-datepicker-cover { - display: none; - display/**/: block; - position: absolute; - z-index: -1; - filter: mask(); - top: -4px; - left: -4px; - width: 193px; - height: 200px; -} diff --git a/flora.datepicker.css b/flora.datepicker.css deleted file mode 100644 index 20c3dabb3..000000000 --- a/flora.datepicker.css +++ /dev/null @@ -1,234 +0,0 @@ -/* Main Flora Style Sheet for jQuery UI ui-datepicker */ -#ui-datepicker-div, .ui-datepicker-inline { - font-family: Arial,Helvetica,sans-serif; - font-size: 14px; - padding: 0; - margin: 0; - background: #E0F4D7; - width: 185px; -} -#ui-datepicker-div { - display: none; - border: 1px solid #FF9900; - z-index: 10; -} -.ui-datepicker-inline { - float: left; - display: block; - border: 0; -} -.ui-datepicker-rtl { - direction: rtl; -} -.ui-datepicker-dialog { - padding: 5px !important; - border: 4px ridge #83C948 !important; -} -button.ui-datepicker-trigger { - width: 25px; -} -img.ui-datepicker-trigger { - margin: 2px; - vertical-align: middle; -} -.ui-datepicker-prompt { - float: left; - padding: 2px; - background: #E0F4D7; - color: #000; -} -*html .ui-datepicker-prompt { - width: 185px; -} -.ui-datepicker-control, .ui-datepicker-links, .ui-datepicker-header, .ui-datepicker { - clear: both; - float: left; - width: 100%; - color: #FFF; -} -.ui-datepicker-control { - background: #FF9900; - padding: 2px 0px; -} -.ui-datepicker-links { - background: #E0F4D7; - padding: 2px 0px; -} -.ui-datepicker-control, .ui-datepicker-links { - font-weight: bold; - font-size: 80%; - letter-spacing: 1px; -} - -/* KJ change this to avoid weird display change */ -/*.ui-datepicker-links label { - padding: 2px 5px; - color: #888; -}*/ - -.ui-datepicker-links label { - font-weight: bold; - font-size: 100%; - padding: 2px 5px; - letter-spacing: 1px; -} -.ui-datepicker-clear, .ui-datepicker-prev { - float: left; - width: 34%; -} -.ui-datepicker-rtl .ui-datepicker-clear, .ui-datepicker-rtl .ui-datepicker-prev { - float: right; - text-align: right; -} -.ui-datepicker-current { - float: left; - width: 30%; - text-align: center; -} -.ui-datepicker-close, .ui-datepicker-next { - float: right; - width: 34%; - text-align: right; -} -.ui-datepicker-rtl .ui-datepicker-close, .ui-datepicker-rtl .ui-datepicker-next { - float: left; - text-align: left; -} -.ui-datepicker-header { - padding: 1px 0 3px; - background: #478787; - text-align: center; - font-weight: bold; - height: 1.3em; - color: #FFFFFF; -} -.ui-datepicker-header select { - background: #478787; - color: #FFFFFF; - border: 0px; - font-weight: bold; -} -.ui-datepicker { - background: #CCC; - text-align: center; - font-size: 100%; -} -.ui-datepicker a { - display: block; - width: 100%; -} -.ui-datepicker-title-row { - background: #DAE5DC; - color: #000; -} -.ui-datepicker-title-row .ui-datepicker-week-end-cell { - background: #DAE5DC; -} -.ui-datepicker-days-row { - background: #FFF; - /*color: #666;*/ -} -.ui-datepicker-week-col { - background: #DAE5DC; - color: #000; -} -.ui-datepicker-days-cell { - /*color: #000;*/ - border: 1px solid #DDD; -} -.ui-datepicker-days-cell a { - display: block; -} -.ui-datepicker-week-end-cell { - background: #E0F4D7; -} -.ui-datepicker-unselectable { - color: #888; -} -.ui-datepicker-week-over, .ui-datepicker-week-over .ui-datepicker-week-end-cell { - background: #DAE5DC !important; -} -.ui-datepicker-days-cell-over, .ui-datepicker-days-cell-over.ui-datepicker-week-end-cell { - background: #FFF !important; - border: 1px solid #777; -} -* html .ui-datepicker-title-row .ui-datepicker-week-end-cell { - background: #DAE5DC !important; -} -* html .ui-datepicker-week-end-cell { - background: #E0F4D7 !important; - border: 1px solid #DDD !important; -} -* html .ui-datepicker-days-cell-over { - background: #FFF !important; - border: 1px solid #777 !important; -} -* html .ui-datepicker-current-day { - background: #478787 !important; - color: #FFFFFF !important; -} -.ui-datepicker-today { - background: #DAE5DC !important; -} -.ui-datepicker-current-day { - background: #478787 !important; - color: #FFFFFF !important; -} - -.ui-datepicker-current-day a { - background: #478787 !important; - color: #FFFFFF !important; -} - -.ui-datepicker-status { - background: #E0F4D7; - width: 100%; - font-size: 80%; - text-align: center; -} -#ui-datepicker-div a, .ui-datepicker-inline a { - cursor: pointer; - margin: 0; - padding: 0; - background: none; - color: 000000; -} -.ui-datepicker-inline .ui-datepicker-links a { - padding: 0 5px !important; -} -.ui-datepicker-control a, .ui-datepicker-links a { - padding: 2px 5px !important; - color: #000 !important; -} -.ui-datepicker-title-row a { - color: #000 !important; -} -.ui-datepicker-control a:hover { - background: #FDD !important; - color: #333 !important; -} -.ui-datepicker-links a:hover, .ui-datepicker-title-row a:hover { - background: #FFF !important; - color: #333 !important; -} -.ui-datepicker-multi .ui-datepicker { - border: 1px solid #478787; -} -.ui-datepicker-one-month { - float: left; - width: 185px; -} -.ui-datepicker-new-row { - clear: left; -} -.ui-datepicker-cover { - display: none; - display/**/: block; - position: absolute; - z-index: -1; - filter: mask(); - top: -4px; - left: -4px; - width: 193px; - height: 200px; -} diff --git a/languages/en.php b/languages/en.php index 785b7392c..26312af25 100644 --- a/languages/en.php +++ b/languages/en.php @@ -189,6 +189,12 @@ 'event_calendar:add_to_group:success' => "Event added to group calendar", 'event_calendar:settings:add_to_group_calendar:title' => "Allow group admins to add any existing event to a group calendar", + 'event_calendar:group_breadcrumb' => "Group event calendar", + 'event_calendar:no_group' => "There is no such group.", + 'event_calendar:generic_error_title' => "Error", + 'event_calendar:error_event_edit' => "Error: there is no such event or you do not have permission to edit it.", + 'event_calendar:add' => "Add", + /** * Event calendar river **/ diff --git a/manifest.xml b/manifest.xml index c3ce812c1..dcbebc48a 100644 --- a/manifest.xml +++ b/manifest.xml @@ -1,10 +1,10 @@ - + - + diff --git a/models/model.php b/models/model.php index dcc9506f3..d4bc5d0a7 100644 --- a/models/model.php +++ b/models/model.php @@ -5,7 +5,7 @@ * @package event_calendar * @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.html GNU Public License version 2 * @author Kevin Jardine - * @copyright Radagast Solutions 2008 + * @copyright Radagast Solutions 2008-2011 * @link http://radagast.biz/ * */ @@ -22,91 +22,20 @@ function event_calendar_get_event_for_edit($event_id) { } } -function event_calendar_get_event_from_form() { - - // returns an event data object (not an ElggObject) - - $event_data = new stdClass(); - $event_data->form_data = true; - // debug message to test new add user feature - $event_data->event_id = get_input('event_id',0); - $event_data->access_id = get_input('access',ACCESS_PRIVATE); - $event_data->title = get_input('title',''); - $event_data->description = get_input('brief_description',''); - $event_data->venue = get_input('venue',''); - $event_calendar_times = get_plugin_setting('times', 'event_calendar'); - $event_calendar_region_display = get_plugin_setting('region_display', 'event_calendar'); - $event_calendar_type_display = get_plugin_setting('type_display', 'event_calendar'); - $event_calendar_spots_display = get_plugin_setting('spots_display', 'event_calendar'); - if ($event_calendar_times == 'yes') { - $sh = get_input('start_time_h',''); - $sm = get_input('start_time_m',''); - if (is_numeric($sh) && is_numeric($sm)) { - // workaround for pulldown zero value bug - $sh--; - $sm--; - $event_data->start_time = $sh*60+$sm; - } else { - $event_data->start_time = ''; - } - $eh = get_input('end_time_h',''); - $em = get_input('end_time_m',''); - if (is_numeric($eh) && is_numeric($em)) { - // workaround for pulldown zero value bug - $eh--; - $em--; - $event_data->end_time = $eh*60+$em; - } else { - $event_data->end_time = ''; - } - } - $event_data->start_date = get_input('start_date',''); - $event_data->end_date = get_input('end_date',''); - if ($event_calendar_spots_display == 'yes') { - $event_data->spots = get_input('spots',''); - } - if ($event_calendar_region_display == 'yes') { - $region = get_input('region',''); - if ($region == '-') { - $region = ''; - } - $event_data->region = $region; - } - if ($event_calendar_type_display == 'yes') { - $event_type = get_input('event_type',''); - if ($event_type == '-') { - $event_type = ''; - } - $event_data->event_type = $event_type; - } - $event_data->fees = get_input('fees',''); - $event_data->contact = get_input('contact',''); - $event_data->organiser = get_input('organiser',''); - $event_data->event_tags = get_input('event_tags',''); - $event_data->long_description = get_input('long_description',''); +// returns the event or FALSE +function event_calendar_set_event_from_form($event_guid,$group_guid) { - return $event_data; -} - -function event_calendar_set_event_from_form() { - global $CONFIG; - - $group_guid = 0; - $result = new stdClass(); - $ed = event_calendar_get_event_from_form(); - $result->form_data = $ed; - $fields_are_valid = TRUE; - $event_calendar_times = get_plugin_setting('times', 'event_calendar'); - $event_calendar_region_display = get_plugin_setting('region_display', 'event_calendar'); - $event_calendar_type_display = get_plugin_setting('type_display', 'event_calendar'); - $event_calendar_spots_display = get_plugin_setting('spots_display', 'event_calendar'); - $event_calendar_hide_end = get_plugin_setting('hide_end', 'event_calendar'); - $event_calendar_more_required = get_plugin_setting('more_required', 'event_calendar'); + $event_calendar_times = elgg_get_plugin_setting('times', 'event_calendar'); + $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_calendar_spots_display = elgg_get_plugin_setting('spots_display', 'event_calendar'); + $event_calendar_hide_end = elgg_get_plugin_setting('hide_end', 'event_calendar'); + $event_calendar_more_required = elgg_get_plugin_setting('more_required', 'event_calendar'); if ($event_calendar_more_required == 'yes') { $required_fields = array('title','venue','start_date', 'brief_description','fees','contact','organiser', - 'event_tags'); + 'tags'); if ($event_calendar_times == 'yes') { $required_fields[] = 'start_time'; @@ -126,100 +55,90 @@ function event_calendar_set_event_from_form() { } else { $required_fields = array('title','venue','start_date'); } - foreach ($required_fields as $fn) { - if (!trim($ed->$fn)) { - $fields_are_valid = FALSE; - break; - } - } - if ($fields_are_valid) { - if ($ed->event_id) { - $event = get_entity($ed->event_id); - if (!$event) { - // do nothing because this is a bad event id - $result->success = false; - } - } else { - $event = new ElggObject(); - $event->subtype = 'event_calendar'; - $event->owner_guid = $_SESSION['user']->getGUID(); - $group_guid = (int) get_input('group_guid',0); - if ($group_guid) { - $event->container_guid = $group_guid; - } else { - $event->container_guid = $event->owner_guid; - } + + if ($event_guid) { + $event = get_entity($event_guid); + if (!elgg_instanceof($event, 'object', 'event_calendar')) { + // do nothing because this is a bad event guid + return FALSE; } - $event->access_id = $ed->access_id; - $event->title = $ed->title; - $event->description = $ed->description; - $event->venue = $ed->venue; - $event->start_date = strtotime($ed->start_date); - if ($ed->end_date) { - $event->end_date = strtotime($ed->end_date); + } else { + $user_guid = elgg_get_logged_in_user_guid(); + $event = new ElggObject(); + $event->subtype = 'event_calendar'; + $event->owner_guid = $user_guid; + if ($group_guid) { + $event->container_guid = $group_guid; } else { - $event->end_date = $ed->end_date; - } - if ($event_calendar_times == 'yes') { - $event->start_time = $ed->start_time; - //$event->original_start_date = $event->start_date; - if (is_numeric($ed->start_time)) { - // Set start date to the Unix start time, if set. - // This allows sorting by date *and* time. - $event->start_date += $ed->start_time*60; - } - $event->end_time = $ed->end_time; - } - if ($event_calendar_spots_display == 'yes') { - $event->spots = trim($ed->spots); + $event->container_guid = $event->owner_guid; } - if ($event_calendar_region_display == 'yes') { - $event->region = $ed->region; + } + $event->access_id = get_input('access_id'); + $event->title = get_input('title'); + $event->description = get_input('description'); + $event->venue = get_input('venue'); + $event->start_date = get_input('start_date'); + $event->end_date = get_input('end_date'); + + if ($event_calendar_times == 'yes') { + $event->start_time = get_input('start_time'); + //$event->original_start_date = $event->start_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_type_display == 'yes') { - $event->event_type = $ed->event_type; + $event->end_time = get_input('end_time'); + } + if ($event_calendar_spots_display == 'yes') { + $event->spots = trim(get_input('spots')); + } + if ($event_calendar_region_display == 'yes') { + $event->region = get_input('region'); + } + if ($event_calendar_type_display == 'yes') { + $event->event_type = get_input('event_type'); + } + $event->fees = get_input('fees'); + $event->contact = get_input('contact'); + $event->organiser = get_input('organiser'); + $event->tags = string_to_tag_array(get_input('tags')); + $event->long_description = get_input('long_description'); + $event->real_end_time = event_calendar_get_end_time($event); + foreach ($required_fields as $fn) { + if (!trim($event->$fn)) { + return FALSE; + break; + } + } + if ($event->save()) { + if ($group_guid && (elgg_get_plugin_setting('autogroup', 'event_calendar') == 'yes')) { + event_calendar_add_personal_events_from_group($event->guid,$group_guid); } - $event->fees = $ed->fees; - $event->contact = $ed->contact; - $event->organiser = $ed->organiser; - $event->event_tags = array_reverse(string_to_tag_array($ed->event_tags)); - $event->long_description = $ed->long_description; - $event->real_end_time = event_calendar_get_end_time($event); - $result->success = $event->save(); - if ($result->success) { - if ($group_guid && (get_plugin_setting('autogroup', 'event_calendar') == 'yes')) { - event_calendar_add_personal_events_from_group($event->getGUID(),$group_guid); - } - if (get_plugin_setting('add_users', 'event_calendar') == 'yes') { - if (function_exists('autocomplete_member_to_user')) { - $addusers = get_input('adduser',array()); - foreach($addusers as $adduser) { - if ($adduser) { - $user = autocomplete_member_to_user($adduser); - $user_id = $user->guid; - event_calendar_add_personal_event($event->guid,$user_id); - if (get_plugin_setting('add_users_notify', 'event_calendar') == 'yes') { - notify_user($user_id, $CONFIG->site->guid, elgg_echo('event_calendar:add_users_notify:subject'), - sprintf( - elgg_echo('event_calendar:add_users_notify:body'), - $user->name, - $event->title, - $event->getURL() - ) - ); - } + if (elgg_get_plugin_setting('add_users', 'event_calendar') == 'yes') { + if (function_exists('autocomplete_member_to_user')) { + $addusers = get_input('adduser',array()); + foreach($addusers as $adduser) { + if ($adduser) { + $user = autocomplete_member_to_user($adduser); + $user_id = $user->guid; + event_calendar_add_personal_event($event->guid,$user_id); + if (elgg_get_plugin_setting('add_users_notify', 'event_calendar') == 'yes') { + notify_user($user_id, $CONFIG->site->guid, elgg_echo('event_calendar:add_users_notify:subject'), + sprintf( + elgg_echo('event_calendar:add_users_notify:body'), + $user->name, + $event->title, + $event->getURL() + ) + ); } } } } } - $result->event = $event; - } else { - // required data missing - $result->success = false; } - - return $result; + return $event; } function event_calendar_get_events_between($start_date,$end_date,$is_count,$limit=10,$offset=0,$container_guid=0,$region='-') { @@ -518,7 +437,7 @@ function event_calendar_get_entities_from_metadata_between_related($meta_start_n return event_calendar_vsort($main_events,$meta_start_name); } -// TODO: replace the original version with this one +// TODO: try to replace this with new Elgg 1.7 API /** * Return a list of entities based on the given search criteria. * In this case, returns entities with the given metadata between two values inclusive @@ -683,21 +602,27 @@ $count = false, $region='-', $meta_max = '', $annotation_name = '') return false; } -function event_calendar_has_personal_event($event_id,$user_id) { - $annotations = get_annotations($event_id, "object", "event_calendar", "personal_event", (int) $user_id, $user_id); - if ($annotations && count($annotations) > 0) { - return true; +function event_calendar_has_personal_event($event_guid,$user_guid) { + // check legacy implementation and new one + if (check_entity_relationship($user_guid,'personal_event',$event_guid)) { + return TRUE; } else { - return false; + // use old method for now + $annotations = get_annotations($event_guid, "object", "event_calendar", "personal_event", (int) $user_guid, $user_guid); + if ($annotations && count($annotations) > 0) { + return true; + } else { + return false; + } } } -function event_calendar_add_personal_event($event_id,$user_id) { - if ($event_id && $user_id) { - if ( !event_calendar_has_personal_event($event_id,$user_id) - && !event_calendar_has_collision($event_id,$user_id)) { - if (!event_calendar_is_full($event_id)) { - create_annotation($event_id, "personal_event", (int) $user_id, 'integer', $user_id, ACCESS_PUBLIC); +function event_calendar_add_personal_event($event_guid,$user_guid) { + if ($event_guid && $user_guid) { + if (!event_calendar_has_personal_event($event_guid,$user_guid) + && !event_calendar_has_collision($event_guid,$user_guid)) { + if (!event_calendar_is_full($event_guid)) { + add_entity_relationship($user_guid,'personal_event',$event_guid); return TRUE; } } @@ -705,16 +630,18 @@ function event_calendar_add_personal_event($event_id,$user_id) { return FALSE; } -function event_calendar_add_personal_events_from_group($event_id,$group_guid) { +function event_calendar_add_personal_events_from_group($event_guid,$group_guid) { $members = get_group_members($group_guid, 100000); foreach($members as $member) { $member_id = $member->getGUID(); - event_calendar_add_personal_event($event_id,$member_id); + event_calendar_add_personal_event($event_guid,$member_id); } } -function event_calendar_remove_personal_event($event_id,$user_id) { - $annotations = get_annotations($event_id, "object", "event_calendar", "personal_event", (int) $user_id, $user_id); +function event_calendar_remove_personal_event($event_guid,$user_guid) { + remove_entity_relationship($user_guid,'personal_event',$event_guid); + // also use old method for now + $annotations = get_annotations($event_guid, "object", "event_calendar", "personal_event", (int) $user_guid, $user_guid); if ($annotations) { foreach ($annotations as $annotation) { $annotation->delete(); @@ -722,14 +649,25 @@ function event_calendar_remove_personal_event($event_id,$user_id) { } } -function event_calendar_get_personal_events_for_user($user_id,$limit) { - $events = elgg_get_entities_from_annotations(array( +function event_calendar_get_personal_events_for_user($user_guid,$limit) { + $events_old_way = elgg_get_entities_from_annotations(array( 'type' => 'object', 'subtype' => 'event_calendar', 'annotation_names' => 'personal_event', - 'annotation_value' => $user_id, - 'limit' => 1000, + 'annotation_value' => $user_guid, + 'limit' => 0, )); + + $events_new_way = elgg_get_entities_from_relationship(array( + 'type' => 'object', + 'subtype' => 'event_calendar', + 'relationship' => 'personal_event', + 'relationship_guid' => $user_guid, + 'limit' => 0, + )); + + $events = array_merge($events_old_way,$events_new_way); + $final_events = array(); if ($events) { $now = time(); @@ -745,20 +683,31 @@ function event_calendar_get_personal_events_for_user($user_id,$limit) { return array_slice($sorted,0,$limit); } -function event_calendar_get_users_for_event($event_id,$limit,$offset,$is_count) { +function event_calendar_get_users_for_event($event_guid,$limit,$offset,$is_count) { + $options = array( + 'type' => 'user', + 'relationship' => 'personal_event', + 'relationship_guid' => $event_guid, + 'inverse_relationship' => TRUE, + 'limit' => 0, + ); if ($is_count) { - return count_annotations($event_id, "object", "event_calendar", "personal_event"); + $count_old_way = count_annotations($event_guid, "object", "event_calendar", "personal_event"); + $options ['count'] = TRUE; + $count_new_way = elgg_get_entities_from_relationship($options); + return $count_old_way + $count_new_way; } else { - $users = array(); + $users_old_way = array(); $annotations = get_annotations($event_id, "object", "event_calendar", "personal_event", "", 0, $limit, $offset); if ($annotations) { foreach($annotations as $annotation) { if (($user = get_entity($annotation->value)) && ($user instanceOf ElggUser)) { - $users[] = $user; + $users_old_way[] = $user; } } } - return $users; + $users_new_way = elgg_get_entities_from_relationship($options); + return array_merge($users_old_way,$users_new_way); } } @@ -849,8 +798,8 @@ function event_calendar_get_type($event) { function event_calendar_get_formatted_full_items($event) { $time_bit = event_calendar_get_formatted_time($event); - $event_calendar_region_display = get_plugin_setting('region_display', 'event_calendar'); - $event_calendar_type_display = get_plugin_setting('type_display', 'event_calendar'); + $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'); @@ -884,17 +833,13 @@ function event_calendar_get_formatted_full_items($event) { $item->title = elgg_echo('event_calendar:contact_label'); $item->value = htmlspecialchars($event->contact); $event_items[] = $item; - $item = new stdClass(); - $item->title = elgg_echo('event_calendar:event_tags_label'); - $item->value = elgg_view("output/tags",array('value'=>$event->event_tags)); - $event_items[] = $item; return $event_items; } function event_calendar_get_formatted_time($event) { $date_format = 'j M Y'; - $event_calendar_times = get_plugin_setting('times', 'event_calendar'); + $event_calendar_times = elgg_get_plugin_setting('times', 'event_calendar'); $start_date = date($date_format,$event->start_date); if ((!$event->end_date) || ($event->end_date == $event->start_date)) { @@ -920,7 +865,7 @@ function event_calendar_get_formatted_date($ts) { } function event_calendar_is_full($event_id) { - $event_calendar_spots_display = get_plugin_setting('spots_display', 'event_calendar'); + $event_calendar_spots_display = elgg_get_plugin_setting('spots_display', 'event_calendar'); if ($event_calendar_spots_display == 'yes') { $count = event_calendar_get_users_for_event($event_id,0,0,TRUE); $event = get_entity($event_id); @@ -937,7 +882,7 @@ function event_calendar_is_full($event_id) { } function event_calendar_has_collision($event_id, $user_id) { - $no_collisions = get_plugin_setting('no_collisions', 'event_calendar'); + $no_collisions = elgg_get_plugin_setting('no_collisions', 'event_calendar'); if ($no_collisions == 'yes') { $event = get_entity($event_id); if ($event) { @@ -958,7 +903,7 @@ function event_calendar_has_collision($event_id, $user_id) { // this complicated bit of code determines the event end time function event_calendar_get_end_time($event) { - $default_length = get_plugin_setting('collision_length', 'event_calendar'); + $default_length = elgg_get_plugin_setting('collision_length', 'event_calendar'); $start_time = $event->start_date; $end_time = $event->end_time; $end_date = $event->end_date; @@ -1005,7 +950,7 @@ function event_calendar_view_entity_list($entities, $count, $offset, $limit, $fu $offset = sanitise_int(get_input('offset', 0)); } - $context = get_context(); + $context = elgg_get_context(); $html = elgg_view('event_calendar/entities/entity_list',array( 'entities' => $entities, @@ -1025,11 +970,11 @@ function event_calendar_view_entity_list($entities, $count, $offset, $limit, $fu function event_calendar_personal_can_manage($event,$user_id) { $authorised = FALSE; - $event_calendar_personal_manage = get_plugin_setting('personal_manage', 'event_calendar'); + $event_calendar_personal_manage = elgg_get_plugin_setting('personal_manage', 'event_calendar'); if ($event_calendar_personal_manage != 'no') { $authorised = TRUE; } else { - if(isadminloggedin()) { + if(elgg_is_admin_logged_in()) { $authorised = TRUE; } else { // load the event from the database @@ -1058,4 +1003,348 @@ function event_calendar_send_event_request($event,$user_id) { return $result; } -?> \ No newline at end of file +// pages + +function event_calendar_get_page_content_list($page_type,$group_guid,$start_date,$display_mode,$filter,$region='-') { + if ($page_type == 'group') { + if (!event_calendar_activated_for_group($group_guid)) { + forward(); + } + elgg_push_breadcrumb(elgg_echo('event_calendar:group_breadcrumb')); + elgg_set_context('groups'); + elgg_set_page_owner_guid($group_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()->canWriteToContainer($user_guid)){ + elgg_register_menu_item('title', array( + 'name' => 'add', + 'href' => "event_calendar/add/".$group_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)) { + elgg_register_menu_item('title', array( + 'name' => 'add', + 'href' => "event_calendar/add/".$group_guid, + 'text' => elgg_echo('event_calendar:add'), + 'class' => 'elgg-button elgg-button-action', + )); + } + } + } 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()) { + elgg_register_menu_item('title', array( + 'name' => 'add', + 'href' => "event_calendar/add", + 'text' => elgg_echo('event_calendar:add'), + 'class' => 'elgg-button elgg-button-action', + )); + } + } + } + + $params = event_calendar_generate_listing_params($page_type,$group_guid,$start_date,$display_mode,$filter,$region); + + $body = elgg_view_layout("content", $params); + + return elgg_view_page($title,$body); +} + +function event_calendar_get_page_content_edit($page_type,$guid) { + $vars = array(); + $vars['id'] = 'event-calendar-edit'; + $vars['name'] = 'event_calendar_edit'; + // just in case a feature adds an image upload + $vars['enctype'] = 'multipart/form-data'; + + $body_vars = array(); + + if ($page_type == 'edit') { + $title = elgg_echo('event_calendar:manage_event_title'); + $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); + $event_container = get_entity($event->container_guid); + if (elgg_instanceof($event_container, 'group')) { + elgg_push_breadcrumb(elgg_echo('event_calendar:group_breadcrumb'), 'event_calendar/group/'.$event->container_guid); + } else { + elgg_push_breadcrumb(elgg_echo('event_calendar:show_events_title'),'event_calendar/list'); + } + elgg_push_breadcrumb(elgg_echo('event_calendar:manage_event_title')); + + $content = elgg_view_form('event_calendar/edit', $vars,$body_vars); + } else { + $content = elgg_echo('event_calendar:error_event_edit'); + } + } else { + $title = elgg_echo('event_calendar:add_event_title'); + if ($guid) { + // add to group + $group = get_entity($guid); + if (elgg_instanceof($group, 'group')) { + $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(); + $content = elgg_view_form('event_calendar/edit', $vars, $body_vars); + } else { + $content = elgg_echo('event_calendar:no_group'); + } + } else { + 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(); + + $content = elgg_view_form('event_calendar/edit', $vars, $body_vars); + } + } + + $params = array('title' => $title, 'content' => $content,'filter' => ''); + + $body = elgg_view_layout("content", $params); + + return elgg_view_page($title,$body); +} + +/** + * Pull together variables for the edit form + * + * @param ElggObject $event + * @return array + */ +function event_calendar_prepare_edit_form_vars($event = NULL) { + + // input names => defaults + $values = array( + 'title' => NULL, + 'description' => NULL, + 'venue' => NULL, + 'start_date' => NULL, + 'end_date' => NULL, + 'start_time' => NULL, + 'end_time' => NULL, + 'spots' => NULL, + 'region' => '-', + 'event_type' => '-', + 'fees' => NULL, + 'contact' => NULL, + 'organiser' => NULL, + 'tags' => NULL, + 'long_description' => NULL, + 'access_id' => ACCESS_DEFAULT, + 'group_guid' => NULL, + ); + + if ($event) { + foreach (array_keys($values) as $field) { + if (isset($event->$field)) { + $values[$field] = $event->$field; + } + } + } + + if (elgg_is_sticky_form('event_calendar')) { + $sticky_values = elgg_get_sticky_values('event_calendar'); + foreach ($sticky_values as $key => $value) { + $values[$key] = $value; + } + } + + elgg_clear_sticky_form('event_calendar'); + + return $values; +} + +function event_calendar_generate_listing_params($page_type,$group_guid,$original_start_date,$display_mode,$filter,$region='-') { + $event_calendar_listing_format = elgg_get_plugin_setting('listing_format', 'event_calendar'); + $event_calendar_spots_display = trim(elgg_get_plugin_setting('spots_display', 'event_calendar')); + $event_calendar_first_date = trim(elgg_get_plugin_setting('first_date', 'event_calendar')); + $event_calendar_last_date = trim(elgg_get_plugin_setting('last_date', 'event_calendar')); + + if (!$original_start_date) { + $original_start_date = date('Y-m-d'); + } + if ( $event_calendar_first_date && ($original_start_date < $event_calendar_first_date) ) { + $original_start_date = $event_calendar_first_date; + } + if ( $event_calendar_last_date && ($original_start_date > $event_calendar_last_date) ) { + $original_start_date = $event_calendar_first_date; + } + + if ($event_calendar_listing_format == 'paged') { + $start_ts = strtotime($original_start_date); + $start_date = $original_start_date; + if ($event_calendar_last_date) { + $end_ts = strtotime($event_calendar_last_date); + } else { + // set to a large number + $end_ts = 2000000000; + } + $mode = 'paged'; + } else { + + // the default interval is one month + $day = 60*60*24; + $week = 7*$day; + $month = 31*$day; + + $mode = trim($display_mode); + if (!$mode) { + $mode = 'month'; + } + + if ($mode == "day") { + $start_date = $original_start_date; + $end_date = $start_date; + $start_ts = strtotime($start_date); + $end_ts = strtotime($end_date)+$day-1; + } else if ($mode == "week") { + // need to adjust start_date to be the beginning of the week + $start_ts = strtotime($original_start_date); + $start_ts -= date("w",$start_ts)*$day; + $end_ts = $start_ts + 6*$day; + + $start_date = date('Y-m-d',$start_ts); + $end_date = date('Y-m-d',$end_ts); + } else { + $start_ts = strtotime($original_start_date); + $month = date('m',$start_ts); + $year = date('Y',$start_ts); + $start_date = $year.'-'.$month.'-1'; + $end_date = $year.'-'.$month.'-'.getLastDayOfMonth($month,$year); + } + + if ($event_calendar_first_date && ($start_date < $event_calendar_first_date)) { + $start_date = $event_calendar_first_date; + } + + if ($event_calendar_last_date && ($end_date > $event_calendar_last_date)) { + $end_date = $event_calendar_last_date; + } + + $start_ts = strtotime($start_date); + + if ($mode == "day") { + $end_ts = strtotime($end_date)+$day-1; + $subtitle = elgg_echo('event_calendar:day_label').': '.date('j F Y',strtotime($start_date)); + } else if ($mode == "week") { + $end_ts = $start_ts + 6*$day; + $subtitle = elgg_echo('event_calendar:week_label').': '.date('j F',$start_ts) . ' - '.date('j F Y',$end_ts); + } else { + $end_ts = strtotime($end_date); + $subtitle = date('F Y',$start_ts); + } + } + + $user_guid = elgg_get_logged_in_user_guid(); + + $offset = get_input('offset'); + + $limit = 15; + if ($event_calendar_spots_display == 'yes') { + if (!$filter) { + $filter = 'open'; + } + } else { + if (!$filter) { + $filter = 'all'; + } + } + if ($filter == 'all') { + $count = event_calendar_get_events_between($start_ts,$end_ts,true,$limit,$offset,$group_guid,$region); + $events = event_calendar_get_events_between($start_ts,$end_ts,false,$limit,$offset,$group_guid,$region); + } else if ($filter == 'open') { + $count = event_calendar_get_open_events_between($start_ts,$end_ts,true,$limit,$offset,$group_guid,$region); + $events = event_calendar_get_open_events_between($start_ts,$end_ts,false,$limit,$offset,$group_guid,$region); + } else if ($filter == 'friends') { + $count = event_calendar_get_events_for_friends_between($start_ts,$end_ts,true,$limit,$offset,$user_guid,$group_guid,$region); + $events = event_calendar_get_events_for_friends_between($start_ts,$end_ts,false,$limit,$offset,$user_guid,$group_guid,$region); + } else if ($filter == 'mine') { + $count = event_calendar_get_events_for_user_between($start_ts,$end_ts,true,$limit,$offset,$user_guid,$group_guid,$region); + $events = event_calendar_get_events_for_user_between($start_ts,$end_ts,false,$limit,$offset,$user_guid,$group_guid,$region); + } + + $vars = array( + 'original_start_date' => $original_start_date, + 'start_date' => $start_date, + 'end_date' => $end_date, + 'first_date' => $event_calendar_first_date, + 'last_date' => $event_calendar_last_date, + 'mode' => $mode, + 'events' => $events, + 'count' => $count, + 'offset' => $offset, + 'limit' => $limit, + 'group_guid' => $group_guid, + 'filter' => $filter, + 'region' => $region, + 'listing_format' => $event_calendar_listing_format, + ); + + $content = elgg_view('event_calendar/show_events', $vars); + $filter_override = elgg_view('event_calendar/filter_menu',$vars); + + if ($event_calendar_listing_format == 'paged') { + $title = elgg_echo('event_calendar:upcoming_events_title'); + } else { + $title = elgg_echo('event_calendar:show_events_title'). ' ('.$subtitle.')'; + } + + $params = array('title' => $title, 'content' => $content, 'filter_override'=>$filter_override); + + return $params; +} + +function event_calendar_get_page_content_view($event_guid) { + // add personal calendar button and links + $event = get_entity($event_guid); + + if (!elgg_instanceof($event, 'object', 'event_calendar')) { + $content = elgg_echo('event_calendar:error_nosuchevent'); + $title = elgg_echo('event_calendar:generic_error_title'); + } else { + $title = htmlspecialchars($event->title); + $event_container = get_entity($event->container_guid); + if (elgg_instanceof($event_container, 'group')) { + elgg_push_breadcrumb(elgg_echo('event_calendar:group_breadcrumb'), 'event_calendar/group/'.$event->container_guid); + } else { + elgg_push_breadcrumb(elgg_echo('event_calendar:show_events_title'),'event_calendar/list'); + } + + elgg_push_breadcrumb($event->title); + $content = elgg_view_entity($event, array('full_view' => true)); + //check to see if comment are on - TODO - add this feature to all events + if ($event->comments_on != 'Off') { + $content .= elgg_view_comments($event); + } + } + + $params = array('title' => $title, 'content' => $content,'filter' => ''); + + $body = elgg_view_layout("content", $params); + + return elgg_view_page($title,$body); +} + +function getLastDayOfMonth($month,$year) { + return idate('d', mktime(0, 0, 0, ($month + 1), 0, $year)); +} diff --git a/start.php b/start.php index 57007fa77..967e40b8a 100644 --- a/start.php +++ b/start.php @@ -1,187 +1,292 @@ - * @copyright Radagast Solutions 2008 - * @link http://radagast.biz/ - */ - // Load event calendar model - require_once(dirname(__FILE__) . "/models/model.php"); - /** - * event calendar initialisation - * - * These parameters are required for the event API, but we won't use them: - * - * @param unknown_type $event - * @param unknown_type $object_type - * @param unknown_type $object - */ - - function event_calendar_init() { - - // Load system configuration - global $CONFIG; - - // Register a page handler, so we can have nice URLs - register_page_handler('event_calendar','event_calendar_page_handler'); - - // Register URL handler - register_entity_url_handler('event_calendar_url','object', 'event_calendar'); - - // Register granular notification for this type - register_notification_object('object', 'event_calendar', elgg_echo('event_calendar:new_event')); - - // Set up menu for users - if (isloggedin()) { - $site_calendar = get_plugin_setting('site_calendar', 'event_calendar'); - if (!$site_calendar || $site_calendar != 'no') { - add_menu(elgg_echo('item:object:event_calendar'), $CONFIG->wwwroot . "pg/event_calendar/"); - } - } - // make tags searchable for Elgg 1.7.4 - if (function_exists('elgg_register_tag_metadata_name')) { - elgg_register_tag_metadata_name('event_tags'); - } - - //add to group profile page - $group_calendar = get_plugin_setting('group_calendar', 'event_calendar'); - if (!$group_calendar || $group_calendar != 'no') { - $group_profile_display = get_plugin_setting('group_profile_display', 'event_calendar'); - if (!$group_profile_display || $group_profile_display == 'right') { - elgg_extend_view('groups/right_column', 'event_calendar/groupprofile_calendar'); - } else if ($group_profile_display == 'left') { - elgg_extend_view('groups/left_column', 'event_calendar/groupprofile_calendar'); - } - } - - //add to the css - elgg_extend_view('css', 'event_calendar/css'); - - //add a widget - add_widget_type('event_calendar',elgg_echo("event_calendar:widget_title"),elgg_echo('event_calendar:widget:description')); +/** + * Event calendar plugin + * + * @package event_calendar + * @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.html GNU Public License version 2 + * @author Kevin Jardine + * @copyright Radagast Solutions 2008-2011 + * @link http://radagast.biz/ + */ + + +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'); - // add the event calendar group tool option - $event_calendar_group_default = get_plugin_setting('group_default', 'event_calendar'); - if (!$event_calendar_group_default || ($event_calendar_group_default == 'yes')) { - add_group_tool_option('event_calendar',elgg_echo('event_calendar:enable_event_calendar'),true); - } else { - add_group_tool_option('event_calendar',elgg_echo('event_calendar:enable_event_calendar'),false); - } + // Register a page handler, so we can have nice URLs + elgg_register_page_handler('event_calendar','event_calendar_page_handler'); + + // Register URL handler + elgg_register_entity_url_handler('object', 'event_calendar','event_calendar_url'); + + // Register granular notification for this type + register_notification_object('object', 'event_calendar', elgg_echo('event_calendar:new_event')); - // if autogroup is set, listen and respond to join/leave events - if (get_plugin_setting('autogroup', 'event_calendar') == 'yes') { - register_elgg_event_handler('join', 'group', 'event_calendar_handle_join'); - register_elgg_event_handler('leave', 'group', 'event_calendar_handle_leave'); + // Set up site menu + $site_calendar = elgg_get_plugin_setting('site_calendar', 'event_calendar'); + if (!$site_calendar || $site_calendar != 'no') { + // add a site navigation item + $item = new ElggMenuItem('event_calendar', elgg_echo('item:object:event_calendar'), 'event_calendar/list/'); + elgg_register_menu_item('site', $item); + } + // make event calendar title and description searchable + elgg_register_entity_type('object','event_calendar'); + + // make legacy tags searchable + if (function_exists('elgg_register_tag_metadata_name')) { + elgg_register_tag_metadata_name('event_tags'); + } + + //add to group profile page + // TODO - are the left and right values still relevant for Elgg 1.8? + $group_calendar = elgg_get_plugin_setting('group_calendar', 'event_calendar'); + if (!$group_calendar || $group_calendar != 'no') { + $group_profile_display = elgg_get_plugin_setting('group_profile_display', 'event_calendar'); + if (!$group_profile_display || $group_profile_display == 'right') { + //elgg_extend_view('groups/right_column', 'event_calendar/groupprofile_calendar'); + elgg_extend_view('groups/tool_latest', 'event_calendar/groupprofile_calendar'); + } else if ($group_profile_display == 'left') { + elgg_extend_view('groups/tool_latest', 'event_calendar/groupprofile_calendar'); + //elgg_extend_view('groups/left_column', 'event_calendar/groupprofile_calendar'); } + } + + //add to the css + elgg_extend_view('css/elgg', 'event_calendar/css'); - register_entity_type('object','event_calendar'); + //add a widget + elgg_register_widget_type('event_calendar',elgg_echo("event_calendar:widget_title"),elgg_echo('event_calendar:widget:description')); + + // add the event calendar group tool option + $event_calendar_group_default = elgg_get_plugin_setting('group_default', 'event_calendar'); + if (!$event_calendar_group_default || ($event_calendar_group_default == 'yes')) { + add_group_tool_option('event_calendar',elgg_echo('event_calendar:enable_event_calendar'),true); + } else { + add_group_tool_option('event_calendar',elgg_echo('event_calendar:enable_event_calendar'),false); + } + + // if autogroup is set, listen and respond to join/leave events + if (elgg_get_plugin_setting('autogroup', 'event_calendar') == 'yes') { + elgg_register_event_handler('join', 'group', 'event_calendar_handle_join'); + elgg_register_event_handler('leave', 'group', 'event_calendar_handle_leave'); } - function event_calendar_pagesetup() { - - global $CONFIG; - - $page_owner = page_owner_entity(); - - $context = get_context(); - - // Group submenu option - if ($page_owner instanceof ElggGroup && $context == 'groups') { - if (event_calendar_activated_for_group($page_owner)) { - add_submenu_item(elgg_echo("event_calendar:group"), $CONFIG->wwwroot . "pg/event_calendar/group/" . $page_owner->getGUID()); + // entity menu + elgg_register_plugin_hook_handler('register', 'menu:entity', 'event_calendar_entity_menu_setup'); + + // register actions + $action_path = elgg_get_plugins_path() . 'event_calendar/actions/event_calendar'; + + elgg_register_action("event_calendar/edit","$action_path/edit.php"); + elgg_register_action("event_calendar/delete","$action_path/delete.php"); + elgg_register_action("event_calendar/add_personal","$action_path/add_personal.php"); + elgg_register_action("event_calendar/remove_personal","$action_path/remove_personal.php"); + elgg_register_action("event_calendar/request_personal_calendar","$action_path/request_personal_calendar.php"); + elgg_register_action("event_calendar/toggle_personal_calendar","$action_path/toggle_personal_calendar.php"); + elgg_register_action("event_calendar/killrequest","$action_path/killrequest.php"); + elgg_register_action("event_calendar/addtocalendar","$action_path/addtocalendar.php"); + elgg_register_action("event_calendar/add_to_group","$action_path/add_to_group.php"); + elgg_register_action("event_calendar/remove_from_group","$action_path/remove_from_group.php"); + +} + +// TODO: delete this once everything is recoded + +function event_calendar_pagesetup() { + + global $CONFIG; + + $page_owner = page_owner_entity(); + + $context = get_context(); + + // Group submenu option + if ($page_owner instanceof ElggGroup && $context == 'groups') { + if (event_calendar_activated_for_group($page_owner)) { + add_submenu_item(elgg_echo("event_calendar:group"), $CONFIG->wwwroot . "pg/event_calendar/group/" . $page_owner->getGUID()); + } + } else if ($context == 'event_calendar'){ + add_submenu_item(elgg_echo("event_calendar:site_wide_link"), $CONFIG->wwwroot . "pg/event_calendar/"); + $site_calendar = get_plugin_setting('site_calendar', 'event_calendar'); + if (!$site_calendar || $site_calendar == 'admin') { + if (isadminloggedin()) { + // only admins can post directly to the site-wide calendar + add_submenu_item(elgg_echo('event_calendar:new'), $CONFIG->url . "pg/event_calendar/new/", 'eventcalendaractions'); + } + } else if ($site_calendar == 'loggedin') { + // any logged-in user can post to the site calendar + if (isloggedin()) { + add_submenu_item(elgg_echo('event_calendar:new'), $CONFIG->url . "pg/event_calendar/new/", 'eventcalendaractions'); } - } else if ($context == 'event_calendar'){ - add_submenu_item(elgg_echo("event_calendar:site_wide_link"), $CONFIG->wwwroot . "pg/event_calendar/"); - $site_calendar = get_plugin_setting('site_calendar', 'event_calendar'); - if (!$site_calendar || $site_calendar == 'admin') { - if (isadminloggedin()) { - // only admins can post directly to the site-wide calendar - add_submenu_item(elgg_echo('event_calendar:new'), $CONFIG->url . "pg/event_calendar/new/", 'eventcalendaractions'); + } + } + + if (($context == 'groups') || ($context == 'event_calendar')) { + if (($event_id = get_input('event_id',0)) && ($event = get_entity($event_id))) { + if (isadminloggedin() && (get_plugin_setting('allow_featured', 'event_calendar') == 'yes')) { + if ($event->featured) { + add_submenu_item(elgg_echo('event_calendar:unfeature'), $CONFIG->url . "action/event_calendar/unfeature?event_id=".$event_id.'&'.event_calendar_security_fields(), 'eventcalendaractions'); + } else { + add_submenu_item(elgg_echo('event_calendar:feature'), $CONFIG->url . "action/event_calendar/feature?event_id=".$event_id.'&'.event_calendar_security_fields(), 'eventcalendaractions'); } - } else if ($site_calendar == 'loggedin') { - // any logged-in user can post to the site calendar - if (isloggedin()) { - add_submenu_item(elgg_echo('event_calendar:new'), $CONFIG->url . "pg/event_calendar/new/", 'eventcalendaractions'); + } + add_submenu_item(elgg_echo("event_calendar:view_link"), $CONFIG->wwwroot . "pg/event_calendar/view/" . $event_id,'0eventcalendaradmin'); + if ($event->canEdit()) { + add_submenu_item(elgg_echo("event_calendar:edit_link"), $CONFIG->wwwroot . "mod/event_calendar/manage_event.php?event_id=" . $event_id,'0eventcalendaradmin'); + add_submenu_item(elgg_echo("event_calendar:delete_link"), $CONFIG->wwwroot . "mod/event_calendar/delete_confirm.php?event_id=" . $event_id,'0eventcalendaradmin'); + $event_calendar_personal_manage = get_plugin_setting('personal_manage', 'event_calendar'); + if ($event_calendar_personal_manage == 'no') { + add_submenu_item(elgg_echo('event_calendar:review_requests_title'), $CONFIG->wwwroot . "pg/event_calendar/review_requests/".$event_id, '0eventcalendaradmin'); } } } - - if (($context == 'groups') || ($context == 'event_calendar')) { - if (($event_id = get_input('event_id',0)) && ($event = get_entity($event_id))) { - if (isadminloggedin() && (get_plugin_setting('allow_featured', 'event_calendar') == 'yes')) { - if ($event->featured) { - add_submenu_item(elgg_echo('event_calendar:unfeature'), $CONFIG->url . "action/event_calendar/unfeature?event_id=".$event_id.'&'.event_calendar_security_fields(), 'eventcalendaractions'); + } +} + +function event_calendar_url($entity) { + $friendly_title = elgg_get_friendly_title($entity->title); + return "event_calendar/view/{$entity->guid}/$friendly_title"; +} + +/** + * Dispatches event calendar pages. + * + * URLs take the form of + * Site event calendar: event_calendar/list//// + * Single event: event_calendar/view// + * New event: event_calendar/add + * Edit event: event_calendar/edit/<event_guid> + * Group event calendar: event_calendar/group/<group_guid>/<start_date>/<display_mode> + * Add group event: event_calendar/add/<group_guid> + * Review requests: event_calendar/review_requests/<event_guid> + * + * Title is ignored + * + * @param array $page + * @return NULL + */ +function event_calendar_page_handler($page) { + + elgg_load_library('elgg:event_calendar'); + $page_type = $page[0]; + switch ($page_type) { + case 'list': + if (isset($page[1])) { + $start_date = $page[1]; + if (isset($page[2])) { + $display_mode = $page[2]; + if (isset($page[3])) { + $filter_mode = $page[3]; + if (isset($page[4])) { + $region = $page[4]; + } else { + $region = ''; + } } else { - add_submenu_item(elgg_echo('event_calendar:feature'), $CONFIG->url . "action/event_calendar/feature?event_id=".$event_id.'&'.event_calendar_security_fields(), 'eventcalendaractions'); + $filter_mode = ''; } + } else { + $display_mode = ''; } - add_submenu_item(elgg_echo("event_calendar:view_link"), $CONFIG->wwwroot . "pg/event_calendar/view/" . $event_id,'0eventcalendaradmin'); - if ($event->canEdit()) { - add_submenu_item(elgg_echo("event_calendar:edit_link"), $CONFIG->wwwroot . "mod/event_calendar/manage_event.php?event_id=" . $event_id,'0eventcalendaradmin'); - add_submenu_item(elgg_echo("event_calendar:delete_link"), $CONFIG->wwwroot . "mod/event_calendar/delete_confirm.php?event_id=" . $event_id,'0eventcalendaradmin'); - $event_calendar_personal_manage = get_plugin_setting('personal_manage', 'event_calendar'); - if ($event_calendar_personal_manage == 'no') { - add_submenu_item(elgg_echo('event_calendar:review_requests_title'), $CONFIG->wwwroot . "pg/event_calendar/review_requests/".$event_id, '0eventcalendaradmin'); - } - } + } else { + $start_date = 0; } - } - } - - function event_calendar_url($entity) { - global $CONFIG; - return $CONFIG->url . 'pg/event_calendar/view/'.$entity->getGUID(); - } - - /** - * Page handler; allows the use of fancy URLs - * - * @param array $page From the page_handler function - * @return true|false Depending on success - */ - function event_calendar_page_handler($page) { - if (isset($page[0]) && $page[0]) { - if (($page[0] == 'group') && isset($page[1])) { - set_input('group_guid',$page[1]); + echo event_calendar_get_page_content_list($page_type,0,$start_date,$display_mode,$filter_mode,$region); + break; + case 'view': + echo event_calendar_get_page_content_view($page[1]); + break; + case 'add': + if (isset($page[1])) { + group_gatekeeper(); + $group_guid = $page[1]; + } else { + gatekeeper(); + $group_guid = 0; + } + echo event_calendar_get_page_content_edit($page_type,$group_guid); + break; + case 'edit': + gatekeeper(); + echo event_calendar_get_page_content_edit($page_type, $page[1]); + break; + case 'group': + group_gatekeeper(); + if (isset($page[1])) { + $group_guid = $page[1]; if (isset($page[2])) { - set_input('filter',$page[2]); + $start_date = $page[2]; + if (isset($page[3])) { + $display_mode = $page[3]; + } else { + $display_mode = ''; + } + } else { + $start_date = ''; } - @include(dirname(__FILE__) . "/show_events.php"); - } else if (($page[0] == 'view') && isset($page[1])) { - set_input('event_id',$page[1]); - @include(dirname(__FILE__) . "/show_event.php"); - } else if ($page[0] == 'new') { - @include(dirname(__FILE__) . "/manage_event.php"); - } else if ($page[0] == 'review_requests' && isset($page[1])) { - set_input('event_id',$page[1]); - @include(dirname(__FILE__) . "/pages/review_requests.php"); - } else if (in_array($page[0],array('all','friends','mine'))) { - set_input('filter',$page[0]); - @include(dirname(__FILE__) . "/show_events.php"); + } else { + $group_guid = 0; } + echo event_calendar_get_page_content_list($page_type,$group_guid,$start_date,$display_mode,''); + break; + case 'review_requests': + gatekeeper(); + $params = event_calendar_get_page_content_review_requests($page_type, $page[1], $page[2]); + break; + } +} + +/** + * Add particular blog links/info to entity menu + */ +function event_calendar_entity_menu_setup($hook, $type, $return, $params) { + if (elgg_in_context('widgets')) { + return $return; + } + + $entity = $params['entity']; + $handler = elgg_extract('handler', $params, false); + if ($handler != 'event_calendar') { + return $return; + } + $user_guid = elgg_get_logged_in_user_guid(); + if (event_calendar_personal_can_manage($entity,$user_guid)) { + if (event_calendar_has_personal_event($entity->guid,$user_guid)) { + $options = array( + 'name' => 'personal_calendar', + 'text' => elgg_echo('event_calendar:remove_from_the_calendar'), + 'title' => elgg_echo('event_calendar:remove_from_my_calendar'), + 'href' => elgg_add_action_tokens_to_url("action/event_calendar/remove_personal?guid={$entity->guid}"), + 'priority' => 150, + ); + $return[] = ElggMenuItem::factory($options); } else { - @include(dirname(__FILE__) . "/show_events.php"); + if (!event_calendar_is_full($entity->guid) && !event_calendar_has_collision($entity->guid,$user_guid)) { + $options = array( + 'name' => 'personal_calendar', + 'text' => elgg_echo('event_calendar:add_to_the_calendar'), + 'title' => elgg_echo('event_calendar:add_to_my_calendar'), + 'href' => elgg_add_action_tokens_to_url("action/event_calendar/add_personal?guid={$entity->guid}"), + 'priority' => 150, + ); + $return[] = ElggMenuItem::factory($options); } } - return true; + } else { + if (!check_entity_relationship($user_guid, 'event_calendar_request', $entity->guid)) { + $options = array( + 'name' => 'personal_calendar', + 'text' => elgg_echo('event_calendar:make_request_title'), + 'title' => elgg_echo('event_calendar:make_request_title'), + 'href' => elgg_add_action_tokens_to_url("action/event_calendar/request_personal_calendar?guid={$entity->guid}"), + 'priority' => 150, + ); + $return[] = ElggMenuItem::factory($options); + } } - -// Make sure the event calendar functions are called - register_elgg_event_handler('init','system','event_calendar_init'); - register_elgg_event_handler('pagesetup','system','event_calendar_pagesetup'); - -// Register actions - global $CONFIG; - register_action("event_calendar/manage",false,$CONFIG->pluginspath . "event_calendar/actions/manage.php"); - register_action("event_calendar/request_personal_calendar",false,$CONFIG->pluginspath . "event_calendar/actions/request_personal_calendar.php"); - register_action("event_calendar/toggle_personal_calendar",false,$CONFIG->pluginspath . "event_calendar/actions/toggle_personal_calendar.php"); - register_action("event_calendar/killrequest",false,$CONFIG->pluginspath . "event_calendar/actions/killrequest.php"); - register_action("event_calendar/addtocalendar",false,$CONFIG->pluginspath . "event_calendar/actions/addtocalendar.php"); - register_action("event_calendar/add_to_group",false,$CONFIG->pluginspath . "event_calendar/actions/add_to_group.php"); - register_action("event_calendar/remove_from_group",false,$CONFIG->pluginspath . "event_calendar/actions/remove_from_group.php"); - -?> \ No newline at end of file + return $return; +} diff --git a/ui.core.min.js b/ui.core.min.js deleted file mode 100644 index b2352c67f..000000000 --- a/ui.core.min.js +++ /dev/null @@ -1,9 +0,0 @@ -/* - * jQuery UI 1.7.2 - * - * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT (MIT-LICENSE.txt) - * and GPL (GPL-LICENSE.txt) licenses. - * - * http://docs.jquery.com/UI - */ jQuery.ui||(function(c){var i=c.fn.remove,d=c.browser.mozilla&&(parseFloat(c.browser.version)<1.9);c.ui={version:"1.7.2",plugin:{add:function(k,l,n){var m=c.ui[k].prototype;for(var j in n){m.plugins[j]=m.plugins[j]||[];m.plugins[j].push([l,n[j]])}},call:function(j,l,k){var n=j.plugins[l];if(!n||!j.element[0].parentNode){return}for(var m=0;m<n.length;m++){if(j.options[n[m][0]]){n[m][1].apply(j.element,k)}}}},contains:function(k,j){return document.compareDocumentPosition?k.compareDocumentPosition(j)&16:k!==j&&k.contains(j)},hasScroll:function(m,k){if(c(m).css("overflow")=="hidden"){return false}var j=(k&&k=="left")?"scrollLeft":"scrollTop",l=false;if(m[j]>0){return true}m[j]=1;l=(m[j]>0);m[j]=0;return l},isOverAxis:function(k,j,l){return(k>j)&&(k<(j+l))},isOver:function(o,k,n,m,j,l){return c.ui.isOverAxis(o,n,j)&&c.ui.isOverAxis(k,m,l)},keyCode:{BACKSPACE:8,CAPS_LOCK:20,COMMA:188,CONTROL:17,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,INSERT:45,LEFT:37,NUMPAD_ADD:107,NUMPAD_DECIMAL:110,NUMPAD_DIVIDE:111,NUMPAD_ENTER:108,NUMPAD_MULTIPLY:106,NUMPAD_SUBTRACT:109,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SHIFT:16,SPACE:32,TAB:9,UP:38}};if(d){var f=c.attr,e=c.fn.removeAttr,h="http://www.w3.org/2005/07/aaa",a=/^aria-/,b=/^wairole:/;c.attr=function(k,j,l){var m=l!==undefined;return(j=="role"?(m?f.call(this,k,j,"wairole:"+l):(f.apply(this,arguments)||"").replace(b,"")):(a.test(j)?(m?k.setAttributeNS(h,j.replace(a,"aaa:"),l):f.call(this,k,j.replace(a,"aaa:"))):f.apply(this,arguments)))};c.fn.removeAttr=function(j){return(a.test(j)?this.each(function(){this.removeAttributeNS(h,j.replace(a,""))}):e.call(this,j))}}c.fn.extend({remove:function(){c("*",this).add(this).each(function(){c(this).triggerHandler("remove")});return i.apply(this,arguments)},enableSelection:function(){return this.attr("unselectable","off").css("MozUserSelect","").unbind("selectstart.ui")},disableSelection:function(){return this.attr("unselectable","on").css("MozUserSelect","none").bind("selectstart.ui",function(){return false})},scrollParent:function(){var j;if((c.browser.msie&&(/(static|relative)/).test(this.css("position")))||(/absolute/).test(this.css("position"))){j=this.parents().filter(function(){return(/(relative|absolute|fixed)/).test(c.curCSS(this,"position",1))&&(/(auto|scroll)/).test(c.curCSS(this,"overflow",1)+c.curCSS(this,"overflow-y",1)+c.curCSS(this,"overflow-x",1))}).eq(0)}else{j=this.parents().filter(function(){return(/(auto|scroll)/).test(c.curCSS(this,"overflow",1)+c.curCSS(this,"overflow-y",1)+c.curCSS(this,"overflow-x",1))}).eq(0)}return(/fixed/).test(this.css("position"))||!j.length?c(document):j}});c.extend(c.expr[":"],{data:function(l,k,j){return !!c.data(l,j[3])},focusable:function(k){var l=k.nodeName.toLowerCase(),j=c.attr(k,"tabindex");return(/input|select|textarea|button|object/.test(l)?!k.disabled:"a"==l||"area"==l?k.href||!isNaN(j):!isNaN(j))&&!c(k)["area"==l?"parents":"closest"](":hidden").length},tabbable:function(k){var j=c.attr(k,"tabindex");return(isNaN(j)||j>=0)&&c(k).is(":focusable")}});function g(m,n,o,l){function k(q){var p=c[m][n][q]||[];return(typeof p=="string"?p.split(/,?\s+/):p)}var j=k("getter");if(l.length==1&&typeof l[0]=="string"){j=j.concat(k("getterSetter"))}return(c.inArray(o,j)!=-1)}c.widget=function(k,j){var l=k.split(".")[0];k=k.split(".")[1];c.fn[k]=function(p){var n=(typeof p=="string"),o=Array.prototype.slice.call(arguments,1);if(n&&p.substring(0,1)=="_"){return this}if(n&&g(l,k,p,o)){var m=c.data(this[0],k);return(m?m[p].apply(m,o):undefined)}return this.each(function(){var q=c.data(this,k);(!q&&!n&&c.data(this,k,new c[l][k](this,p))._init());(q&&n&&c.isFunction(q[p])&&q[p].apply(q,o))})};c[l]=c[l]||{};c[l][k]=function(o,n){var m=this;this.namespace=l;this.widgetName=k;this.widgetEventPrefix=c[l][k].eventPrefix||k;this.widgetBaseClass=l+"-"+k;this.options=c.extend({},c.widget.defaults,c[l][k].defaults,c.metadata&&c.metadata.get(o)[k],n);this.element=c(o).bind("setData."+k,function(q,p,r){if(q.target==o){return m._setData(p,r)}}).bind("getData."+k,function(q,p){if(q.target==o){return m._getData(p)}}).bind("remove",function(){return m.destroy()})};c[l][k].prototype=c.extend({},c.widget.prototype,j);c[l][k].getterSetter="option"};c.widget.prototype={_init:function(){},destroy:function(){this.element.removeData(this.widgetName).removeClass(this.widgetBaseClass+"-disabled "+this.namespace+"-state-disabled").removeAttr("aria-disabled")},option:function(l,m){var k=l,j=this;if(typeof l=="string"){if(m===undefined){return this._getData(l)}k={};k[l]=m}c.each(k,function(n,o){j._setData(n,o)})},_getData:function(j){return this.options[j]},_setData:function(j,k){this.options[j]=k;if(j=="disabled"){this.element[k?"addClass":"removeClass"](this.widgetBaseClass+"-disabled "+this.namespace+"-state-disabled").attr("aria-disabled",k)}},enable:function(){this._setData("disabled",false)},disable:function(){this._setData("disabled",true)},_trigger:function(l,m,n){var p=this.options[l],j=(l==this.widgetEventPrefix?l:this.widgetEventPrefix+l);m=c.Event(m);m.type=j;if(m.originalEvent){for(var k=c.event.props.length,o;k;){o=c.event.props[--k];m[o]=m.originalEvent[o]}}this.element.trigger(m,n);return !(c.isFunction(p)&&p.call(this.element[0],m,n)===false||m.isDefaultPrevented())}};c.widget.defaults={disabled:false};c.ui.mouse={_mouseInit:function(){var j=this;this.element.bind("mousedown."+this.widgetName,function(k){return j._mouseDown(k)}).bind("click."+this.widgetName,function(k){if(j._preventClickEvent){j._preventClickEvent=false;k.stopImmediatePropagation();return false}});if(c.browser.msie){this._mouseUnselectable=this.element.attr("unselectable");this.element.attr("unselectable","on")}this.started=false},_mouseDestroy:function(){this.element.unbind("."+this.widgetName);(c.browser.msie&&this.element.attr("unselectable",this._mouseUnselectable))},_mouseDown:function(l){l.originalEvent=l.originalEvent||{};if(l.originalEvent.mouseHandled){return}(this._mouseStarted&&this._mouseUp(l));this._mouseDownEvent=l;var k=this,m=(l.which==1),j=(typeof this.options.cancel=="string"?c(l.target).parents().add(l.target).filter(this.options.cancel).length:false);if(!m||j||!this._mouseCapture(l)){return true}this.mouseDelayMet=!this.options.delay;if(!this.mouseDelayMet){this._mouseDelayTimer=setTimeout(function(){k.mouseDelayMet=true},this.options.delay)}if(this._mouseDistanceMet(l)&&this._mouseDelayMet(l)){this._mouseStarted=(this._mouseStart(l)!==false);if(!this._mouseStarted){l.preventDefault();return true}}this._mouseMoveDelegate=function(n){return k._mouseMove(n)};this._mouseUpDelegate=function(n){return k._mouseUp(n)};c(document).bind("mousemove."+this.widgetName,this._mouseMoveDelegate).bind("mouseup."+this.widgetName,this._mouseUpDelegate);(c.browser.safari||l.preventDefault());l.originalEvent.mouseHandled=true;return true},_mouseMove:function(j){if(c.browser.msie&&!j.button){return this._mouseUp(j)}if(this._mouseStarted){this._mouseDrag(j);return j.preventDefault()}if(this._mouseDistanceMet(j)&&this._mouseDelayMet(j)){this._mouseStarted=(this._mouseStart(this._mouseDownEvent,j)!==false);(this._mouseStarted?this._mouseDrag(j):this._mouseUp(j))}return !this._mouseStarted},_mouseUp:function(j){c(document).unbind("mousemove."+this.widgetName,this._mouseMoveDelegate).unbind("mouseup."+this.widgetName,this._mouseUpDelegate);if(this._mouseStarted){this._mouseStarted=false;this._preventClickEvent=(j.target==this._mouseDownEvent.target);this._mouseStop(j)}return false},_mouseDistanceMet:function(j){return(Math.max(Math.abs(this._mouseDownEvent.pageX-j.pageX),Math.abs(this._mouseDownEvent.pageY-j.pageY))>=this.options.distance)},_mouseDelayMet:function(j){return this.mouseDelayMet},_mouseStart:function(j){},_mouseDrag:function(j){},_mouseStop:function(j){},_mouseCapture:function(j){return true}};c.ui.mouse.defaults={cancel:null,distance:1,delay:0}})(jQuery); \ No newline at end of file diff --git a/ui.datepicker.css b/ui.datepicker.css deleted file mode 100644 index 567f8c97b..000000000 --- a/ui.datepicker.css +++ /dev/null @@ -1,62 +0,0 @@ -/* Datepicker -----------------------------------*/ -.ui-datepicker { width: 17em; padding: .2em .2em 0; } -.ui-datepicker .ui-datepicker-header { position:relative; padding:.2em 0; } -.ui-datepicker .ui-datepicker-prev, .ui-datepicker .ui-datepicker-next { position:absolute; top: 2px; width: 1.8em; height: 1.8em; } -.ui-datepicker .ui-datepicker-prev-hover, .ui-datepicker .ui-datepicker-next-hover { top: 1px; } -.ui-datepicker .ui-datepicker-prev { left:2px; } -.ui-datepicker .ui-datepicker-next { right:2px; } -.ui-datepicker .ui-datepicker-prev-hover { left:1px; } -.ui-datepicker .ui-datepicker-next-hover { right:1px; } -.ui-datepicker .ui-datepicker-prev span, .ui-datepicker .ui-datepicker-next span { display: block; position: absolute; left: 50%; margin-left: -8px; top: 50%; margin-top: -8px; } -.ui-datepicker .ui-datepicker-title { margin: 0 2.3em; line-height: 1.8em; text-align: center; } -.ui-datepicker .ui-datepicker-title select { float:left; font-size:1em; margin:1px 0; } -.ui-datepicker select.ui-datepicker-month-year {width: 100%;} -.ui-datepicker select.ui-datepicker-month, -.ui-datepicker select.ui-datepicker-year { width: 49%;} -.ui-datepicker .ui-datepicker-title select.ui-datepicker-year { float: right; } -.ui-datepicker table {width: 100%; font-size: .9em; border-collapse: collapse; margin:0 0 .4em; } -.ui-datepicker th { padding: .7em .3em; text-align: center; font-weight: bold; border: 0; } -.ui-datepicker td { border: 0; padding: 1px; } -.ui-datepicker td span, .ui-datepicker td a { display: block; padding: .2em; text-align: right; text-decoration: none; } -.ui-datepicker .ui-datepicker-buttonpane { background-image: none; margin: .7em 0 0 0; padding:0 .2em; border-left: 0; border-right: 0; border-bottom: 0; } -.ui-datepicker .ui-datepicker-buttonpane button { float: right; margin: .5em .2em .4em; cursor: pointer; padding: .2em .6em .3em .6em; width:auto; overflow:visible; } -.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current { float:left; } - -/* with multiple calendars */ -.ui-datepicker.ui-datepicker-multi { width:auto; } -.ui-datepicker-multi .ui-datepicker-group { float:left; } -.ui-datepicker-multi .ui-datepicker-group table { width:95%; margin:0 auto .4em; } -.ui-datepicker-multi-2 .ui-datepicker-group { width:50%; } -.ui-datepicker-multi-3 .ui-datepicker-group { width:33.3%; } -.ui-datepicker-multi-4 .ui-datepicker-group { width:25%; } -.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header { border-left-width:0; } -.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header { border-left-width:0; } -.ui-datepicker-multi .ui-datepicker-buttonpane { clear:left; } -.ui-datepicker-row-break { clear:both; width:100%; } - -/* RTL support */ -.ui-datepicker-rtl { direction: rtl; } -.ui-datepicker-rtl .ui-datepicker-prev { right: 2px; left: auto; } -.ui-datepicker-rtl .ui-datepicker-next { left: 2px; right: auto; } -.ui-datepicker-rtl .ui-datepicker-prev:hover { right: 1px; left: auto; } -.ui-datepicker-rtl .ui-datepicker-next:hover { left: 1px; right: auto; } -.ui-datepicker-rtl .ui-datepicker-buttonpane { clear:right; } -.ui-datepicker-rtl .ui-datepicker-buttonpane button { float: left; } -.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current { float:right; } -.ui-datepicker-rtl .ui-datepicker-group { float:right; } -.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header { border-right-width:0; border-left-width:1px; } -.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header { border-right-width:0; border-left-width:1px; } - -/* IE6 IFRAME FIX (taken from datepicker 1.5.3 */ -.ui-datepicker-cover { - display: none; /*sorry for IE5*/ - display/**/: block; /*sorry for IE5*/ - position: absolute; /*must have*/ - z-index: -1; /*must have*/ - filter: mask(); /*must have*/ - top: -4px; /*must have*/ - left: -4px; /*must have*/ - width: 200px; /*must have*/ - height: 200px; /*must have*/ -} \ No newline at end of file diff --git a/ui.datepicker.js b/ui.datepicker.js deleted file mode 100644 index 009582c7d..000000000 --- a/ui.datepicker.js +++ /dev/null @@ -1,212 +0,0 @@ -(function($){ - var PROP_NAME="datepicker"; - function Datepicker(){ - this.debug=false; - this._curInst=null; - this._disabledInputs=[]; - this._datepickerShowing=false; - this._inDialog=false; - this._mainDivId="ui-datepicker-div"; - this._inlineClass="ui-datepicker-inline"; - this._appendClass="ui-datepicker-append"; - this._triggerClass="ui-datepicker-trigger"; - this._dialogClass="ui-datepicker-dialog"; - this._promptClass="ui-datepicker-prompt"; - this._disableClass="ui-datepicker-disabled"; - this._unselectableClass="ui-datepicker-unselectable"; - this._currentClass="ui-datepicker-current-day"; - this.regional=[]; - this.regional[""]={ - clearText:"Clear", - clearStatus:"Erase the current date", - closeText:"Close", - closeStatus:"Close without change", - prevText:"<Prev", - prevStatus:"Show the previous month", - prevBigText:"<<", - prevBigStatus:"Show the previous year", - nextText:"Next>", - nextStatus:"Show the next month", - nextBigText:">>", - nextBigStatus:"Show the next year", - currentText:"Today", - currentStatus:"Show the current month", - monthNames:["January","February","March","April","May","June","July","August","September","October","November","December"], - monthNamesShort:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"], - monthStatus:"Show a different month", - yearStatus:"Show a different year", - weekHeader:"Wk", - weekStatus:"Week of the year", - dayNames:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"], - dayNamesShort:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"], - dayNamesMin:["Su","Mo","Tu","We","Th","Fr","Sa"], - dayStatus:"Set DD as first week day", - dateStatus:"Select DD, M d", - dateFormat:"mm/dd/yy", - firstDay:0, - initStatus:"Select a date", - isRTL:false - }; - this._defaults={ - onChangeToday: false, - showOn:"focus", - showAnim:"show", - showOptions:{}, - defaultDate:null, - appendText:"", - buttonText:"...", - buttonImage:"", - buttonImageOnly:false, - closeAtTop:true, - mandatory:false, - hideIfNoPrevNext:false, - navigationAsDateFormat:false, - showBigPrevNext:false, - gotoCurrent:false, - changeMonth:true, - changeYear:true, - showMonthAfterYear:false, - yearRange:"-10:+10", - changeFirstDay:true, - highlightWeek:false, - showOtherMonths:false, - showWeeks:false, - calculateWeek:this.iso8601Week, - shortYearCutoff:"+10", - showStatus:false, - statusForDate:this.dateStatus, - minDate:null, - maxDate:null, - duration:"normal", - beforeShowDay:null, - beforeShow:null, - onSelect:null, - onChangeMonthYear:null, - onClose:null, - numberOfMonths:1, - showCurrentAtPos:0, - stepMonths:1, - stepBigMonths:12, - rangeSelect:false, - rangeSeparator:" - ", - altField:"", - altFormat:"" - }; - $.extend(this._defaults,this.regional[""]); - this.dpDiv=$('<div id="'+this._mainDivId+'" style="display: none;"></div>')} - $.extend( - Datepicker.prototype, - { - markerClassName:"hasDatepicker", - log:function(){ - if(this.debug){ - console.log.apply("",arguments) - } - }, - setDefaults: - function(settings){ - extendRemove(this._defaults,settings||{}); - return this - }, - - _attachDatepicker: - function(target,settings){ - var inlineSettings=null; - for(attrName in this._defaults){ - var attrValue=target.getAttribute("date:"+attrName); - if(attrValue){inlineSettings=inlineSettings||{};try{inlineSettings[attrName]=eval(attrValue)}catch(err){inlineSettings[attrName]=attrValue}}}var nodeName=target.nodeName.toLowerCase();var inline=(nodeName=="div"||nodeName=="span");if(!target.id){target.id="dp"+(++this.uuid)}var inst=this._newInst($(target),inline);inst.settings=$.extend({},settings||{},inlineSettings||{});if(nodeName=="input"){this._connectDatepicker(target,inst)}else{if(inline){this._inlineDatepicker(target,inst)}}},_newInst:function(target,inline){var id=target[0].id.replace(/([:\[\]\.])/g,"\\\\$1");return{id:id,input:target,selectedDay:0,selectedMonth:0,selectedYear:0,drawMonth:0,drawYear:0,inline:inline,dpDiv:(!inline?this.dpDiv:$('<div class="'+this._inlineClass+'"></div>'))}},_connectDatepicker:function(target,inst){var input=$(target);if(input.hasClass(this.markerClassName)){return}var appendText=this._get(inst,"appendText");var isRTL=this._get(inst,"isRTL");if(appendText){input[isRTL?"before":"after"]('<span class="'+this._appendClass+'">'+appendText+"</span>")}var showOn=this._get(inst,"showOn");if(showOn=="focus"||showOn=="both"){input.focus(this._showDatepicker)}if(showOn=="button"||showOn=="both"){var buttonText=this._get(inst,"buttonText");var buttonImage=this._get(inst,"buttonImage");var trigger=$(this._get(inst,"buttonImageOnly")?$("<img/>").addClass(this._triggerClass).attr({src:buttonImage,alt:buttonText,title:buttonText}):$('<button type="button"></button>').addClass(this._triggerClass).html(buttonImage==""?buttonText:$("<img/>").attr({src:buttonImage,alt:buttonText,title:buttonText})));input[isRTL?"before":"after"](trigger);trigger.click(function(){if($.datepicker._datepickerShowing&&$.datepicker._lastInput==target){$.datepicker._hideDatepicker()}else{$.datepicker._showDatepicker(target)}return false})}input.addClass(this.markerClassName).keydown(this._doKeyDown).keypress(this._doKeyPress).bind("setData.datepicker",function(event,key,value){inst.settings[key]=value}).bind("getData.datepicker",function(event,key){return this._get(inst,key)});$.data(target,PROP_NAME,inst)},_inlineDatepicker:function(target,inst){var divSpan=$(target);if(divSpan.hasClass(this.markerClassName)){return}divSpan.addClass(this.markerClassName).append(inst.dpDiv).bind("setData.datepicker",function(event,key,value){inst.settings[key]=value}).bind("getData.datepicker",function(event,key){return this._get(inst,key)});$.data(target,PROP_NAME,inst);this._setDate(inst,this._getDefaultDate(inst));this._updateDatepicker(inst)},_inlineShow:function(inst){var numMonths=this._getNumberOfMonths(inst);inst.dpDiv.width(numMonths[1]*$(".ui-datepicker",inst.dpDiv[0]).width())}, - - _dialogDatepicker: - function(input,dateText,onSelect,settings,pos){ - var inst=this._dialogInst; - if(!inst){var id="dp"+(++this.uuid); - this._dialogInput=$('<input type="text" id="'+id+'" size="1" style="position: absolute; top: -100px;"/>'); - this._dialogInput.keydown(this._doKeyDown); - $("body").append(this._dialogInput); - inst=this._dialogInst=this._newInst(this._dialogInput,false); - inst.settings={}; - $.data(this._dialogInput[0],PROP_NAME,inst)} - extendRemove(inst.settings,settings||{}); - this._dialogInput.val(dateText); - this._pos=(pos?(pos.length?pos:[pos.pageX,pos.pageY]):null); - if(!this._pos){ - var browserWidth=window.innerWidth||document.documentElement.clientWidth||document.body.clientWidth;var browserHeight=window.innerHeight||document.documentElement.clientHeight||document.body.clientHeight; - var scrollX=document.documentElement.scrollLeft||document.body.scrollLeft;var scrollY=document.documentElement.scrollTop||document.body.scrollTop;this._pos=[(browserWidth/2)-100+scrollX,(browserHeight/2)-150+scrollY]}this._dialogInput.css("left",this._pos[0]+"px").css("top",this._pos[1]+"px"); - inst.settings.onSelect=onSelect; - this._inDialog=true; - this.dpDiv.addClass(this._dialogClass); - this._showDatepicker(this._dialogInput[0]);if($.blockUI){$.blockUI(this.dpDiv)}$.data(this._dialogInput[0],PROP_NAME,inst);return this},_destroyDatepicker:function(target){var $target=$(target);if(!$target.hasClass(this.markerClassName)){return}var nodeName=target.nodeName.toLowerCase();$.removeData(target,PROP_NAME);if(nodeName=="input"){$target.siblings("."+this._appendClass).remove().end().siblings("."+this._triggerClass).remove().end().removeClass(this.markerClassName).unbind("focus",this._showDatepicker).unbind("keydown",this._doKeyDown).unbind("keypress",this._doKeyPress)}else{if(nodeName=="div"||nodeName=="span"){$target.removeClass(this.markerClassName).empty()}}},_enableDatepicker:function(target){var $target=$(target);if(!$target.hasClass(this.markerClassName)){return}var nodeName=target.nodeName.toLowerCase();if(nodeName=="input"){target.disabled=false;$target.siblings("button."+this._triggerClass).each(function(){this.disabled=false}).end().siblings("img."+this._triggerClass).css({opacity:"1.0",cursor:""})}else{if(nodeName=="div"||nodeName=="span"){$target.children("."+this._disableClass).remove()}}this._disabledInputs=$.map(this._disabledInputs,function(value){return(value==target?null:value)})},_disableDatepicker:function(target){var $target=$(target);if(!$target.hasClass(this.markerClassName)){return}var nodeName=target.nodeName.toLowerCase();if(nodeName=="input"){target.disabled=true;$target.siblings("button."+this._triggerClass).each(function(){this.disabled=true}).end().siblings("img."+this._triggerClass).css({opacity:"0.5",cursor:"default"})}else{if(nodeName=="div"||nodeName=="span"){var inline=$target.children("."+this._inlineClass);var offset=inline.offset();var relOffset={left:0,top:0};inline.parents().each(function(){if($(this).css("position")=="relative"){relOffset=$(this).offset();return false}});$target.prepend('<div class="'+this._disableClass+'" style="'+($.browser.msie?"background-color: transparent; ":"")+"width: "+inline.width()+"px; height: "+inline.height()+"px; left: "+(offset.left-relOffset.left)+"px; top: "+(offset.top-relOffset.top)+'px;"></div>')}}this._disabledInputs=$.map(this._disabledInputs,function(value){return(value==target?null:value)});this._disabledInputs[this._disabledInputs.length]=target},_isDisabledDatepicker:function(target){if(!target){return false}for(var i=0;i<this._disabledInputs.length;i++){if(this._disabledInputs[i]==target){return true}}return false},_getInst:function(target){try{return $.data(target,PROP_NAME)}catch(err){throw"Missing instance data for this datepicker"}},_changeDatepicker:function(target,name,value){var settings=name||{};if(typeof name=="string"){settings={};settings[name]=value}var inst=this._getInst(target);if(inst){if(this._curInst==inst){this._hideDatepicker(null)}extendRemove(inst.settings,settings);var date=new Date();extendRemove(inst,{rangeStart:null,endDay:null,endMonth:null,endYear:null,selectedDay:date.getDate(),selectedMonth:date.getMonth(),selectedYear:date.getFullYear(),currentDay:date.getDate(),currentMonth:date.getMonth(),currentYear:date.getFullYear(),drawMonth:date.getMonth(),drawYear:date.getFullYear()});this._updateDatepicker(inst)}},_refreshDatepicker:function(target){var inst=this._getInst(target);if(inst){this._updateDatepicker(inst)}},_setDateDatepicker:function(target,date,endDate){var inst=this._getInst(target);if(inst){this._setDate(inst,date,endDate);this._updateDatepicker(inst);this._updateAlternate(inst)}},_getDateDatepicker:function(target){var inst=this._getInst(target);if(inst&&!inst.inline){this._setDateFromField(inst)}return(inst?this._getDate(inst):null)},_doKeyDown:function(e){var inst=$.datepicker._getInst(e.target);var handled=true;if($.datepicker._datepickerShowing){switch(e.keyCode){case 9:$.datepicker._hideDatepicker(null,"");break;case 13:$.datepicker._selectDay(e.target,inst.selectedMonth,inst.selectedYear,$("td.ui-datepicker-days-cell-over",inst.dpDiv)[0]);return false;break;case 27:$.datepicker._hideDatepicker(null,$.datepicker._get(inst,"duration"));break;case 33:$.datepicker._adjustDate(e.target,(e.ctrlKey?-$.datepicker._get(inst,"stepBigMonths"):-$.datepicker._get(inst,"stepMonths")),"M");break;case 34:$.datepicker._adjustDate(e.target,(e.ctrlKey?+$.datepicker._get(inst,"stepBigMonths"):+$.datepicker._get(inst,"stepMonths")),"M");break;case 35:if(e.ctrlKey){$.datepicker._clearDate(e.target)}handled=e.ctrlKey;break;case 36:if(e.ctrlKey){$.datepicker._gotoToday(e.target)}handled=e.ctrlKey;break;case 37:if(e.ctrlKey){$.datepicker._adjustDate(e.target,-1,"D")}handled=e.ctrlKey;break;case 38:if(e.ctrlKey){$.datepicker._adjustDate(e.target,-7,"D")}handled=e.ctrlKey;break;case 39:if(e.ctrlKey){$.datepicker._adjustDate(e.target,+1,"D")}handled=e.ctrlKey;break;case 40:if(e.ctrlKey){$.datepicker._adjustDate(e.target,+7,"D")}handled=e.ctrlKey;break;default:handled=false}}else{if(e.keyCode==36&&e.ctrlKey){$.datepicker._showDatepicker(this)}else{handled=false}}if(handled){e.preventDefault();e.stopPropagation()}},_doKeyPress:function(e){var inst=$.datepicker._getInst(e.target);var chars=$.datepicker._possibleChars($.datepicker._get(inst,"dateFormat"));var chr=String.fromCharCode(e.charCode==undefined?e.keyCode:e.charCode);return e.ctrlKey||(chr<" "||!chars||chars.indexOf(chr)>-1)},_showDatepicker:function(input){input=input.target||input;if(input.nodeName.toLowerCase()!="input"){input=$("input",input.parentNode)[0]}if($.datepicker._isDisabledDatepicker(input)||$.datepicker._lastInput==input){return}var inst=$.datepicker._getInst(input);var beforeShow=$.datepicker._get(inst,"beforeShow");extendRemove(inst.settings,(beforeShow?beforeShow.apply(input,[input,inst]):{}));$.datepicker._hideDatepicker(null,"");$.datepicker._lastInput=input;$.datepicker._setDateFromField(inst);if($.datepicker._inDialog){input.value=""}if(!$.datepicker._pos){$.datepicker._pos=$.datepicker._findPos(input);$.datepicker._pos[1]+=input.offsetHeight}var isFixed=false;$(input).parents().each(function(){isFixed|=$(this).css("position")=="fixed";return!isFixed});if(isFixed&&$.browser.opera){$.datepicker._pos[0]-=document.documentElement.scrollLeft;$.datepicker._pos[1]-=document.documentElement.scrollTop}var offset={left:$.datepicker._pos[0],top:$.datepicker._pos[1]};$.datepicker._pos=null;inst.rangeStart=null;inst.dpDiv.css({position:"absolute",display:"block",top:"-1000px"});$.datepicker._updateDatepicker(inst);inst.dpDiv.width($.datepicker._getNumberOfMonths(inst)[1]*$(".ui-datepicker",inst.dpDiv[0])[0].offsetWidth);offset=$.datepicker._checkOffset(inst,offset,isFixed);inst.dpDiv.css({position:($.datepicker._inDialog&&$.blockUI?"static":(isFixed?"fixed":"absolute")),display:"none",left:offset.left+"px",top:offset.top+"px"});if(!inst.inline){var showAnim=$.datepicker._get(inst,"showAnim")||"show";var duration=$.datepicker._get(inst,"duration");var postProcess=function(){$.datepicker._datepickerShowing=true;if($.browser.msie&&parseInt($.browser.version,10)<7){$("iframe.ui-datepicker-cover").css({width:inst.dpDiv.width()+4,height:inst.dpDiv.height()+4})}};if($.effects&&$.effects[showAnim]){inst.dpDiv.show(showAnim,$.datepicker._get(inst,"showOptions"),duration,postProcess)}else{inst.dpDiv[showAnim](duration,postProcess)}if(duration==""){postProcess()}if(inst.input[0].type!="hidden"){inst.input[0].focus()}$.datepicker._curInst=inst}},_updateDatepicker:function(inst){var dims={width:inst.dpDiv.width()+4,height:inst.dpDiv.height()+4};inst.dpDiv.empty().append(this._generateHTML(inst)).find("iframe.ui-datepicker-cover").css({width:dims.width,height:dims.height});var numMonths=this._getNumberOfMonths(inst);inst.dpDiv[(numMonths[0]!=1||numMonths[1]!=1?"add":"remove")+"Class"]("ui-datepicker-multi");inst.dpDiv[(this._get(inst,"isRTL")?"add":"remove")+"Class"]("ui-datepicker-rtl");if(inst.input&&inst.input[0].type!="hidden"){$(inst.input[0]).focus()}},_checkOffset:function(inst,offset,isFixed){var pos=inst.input?this._findPos(inst.input[0]):null;var browserWidth=window.innerWidth||document.documentElement.clientWidth;var browserHeight=window.innerHeight||document.documentElement.clientHeight;var scrollX=document.documentElement.scrollLeft||document.body.scrollLeft;var scrollY=document.documentElement.scrollTop||document.body.scrollTop;if(this._get(inst,"isRTL")||(offset.left+inst.dpDiv.width()-scrollX)>browserWidth){offset.left=Math.max((isFixed?0:scrollX),pos[0]+(inst.input?inst.input.width():0)-(isFixed?scrollX:0)-inst.dpDiv.width()-(isFixed&&$.browser.opera?document.documentElement.scrollLeft:0))}else{offset.left-=(isFixed?scrollX:0)}if((offset.top+inst.dpDiv.height()-scrollY)>browserHeight){offset.top=Math.max((isFixed?0:scrollY),pos[1]-(isFixed?scrollY:0)-(this._inDialog?0:inst.dpDiv.height())-(isFixed&&$.browser.opera?document.documentElement.scrollTop:0))}else{offset.top-=(isFixed?scrollY:0)}return offset},_findPos:function(obj){while(obj&&(obj.type=="hidden"||obj.nodeType!=1)){obj=obj.nextSibling}var position=$(obj).offset();return[position.left,position.top]},_hideDatepicker:function(input,duration){var inst=this._curInst;if(!inst||(input&&inst!=$.data(input,PROP_NAME))){return}var rangeSelect=this._get(inst,"rangeSelect");if(rangeSelect&&inst.stayOpen){this._selectDate("#"+inst.id,this._formatDate(inst,inst.currentDay,inst.currentMonth,inst.currentYear))}inst.stayOpen=false;if(this._datepickerShowing){duration=(duration!=null?duration:this._get(inst,"duration"));var showAnim=this._get(inst,"showAnim");var postProcess=function(){$.datepicker._tidyDialog(inst)};if(duration!=""&&$.effects&&$.effects[showAnim]){inst.dpDiv.hide(showAnim,$.datepicker._get(inst,"showOptions"),duration,postProcess)}else{inst.dpDiv[(duration==""?"hide":(showAnim=="slideDown"?"slideUp":(showAnim=="fadeIn"?"fadeOut":"hide")))](duration,postProcess)}if(duration==""){this._tidyDialog(inst)}var onClose=this._get(inst,"onClose");if(onClose){onClose.apply((inst.input?inst.input[0]:null),[(inst.input?inst.input.val():""),inst])}this._datepickerShowing=false;this._lastInput=null;inst.settings.prompt=null;if(this._inDialog){this._dialogInput.css({position:"absolute",left:"0",top:"-100px"});if($.blockUI){$.unblockUI();$("body").append(this.dpDiv)}}this._inDialog=false}this._curInst=null},_tidyDialog:function(inst){inst.dpDiv.removeClass(this._dialogClass).unbind(".ui-datepicker");$("."+this._promptClass,inst.dpDiv).remove()},_checkExternalClick:function(event){if(!$.datepicker._curInst){return}var $target=$(event.target);if(($target.parents("#"+$.datepicker._mainDivId).length==0)&&!$target.hasClass($.datepicker.markerClassName)&&!$target.hasClass($.datepicker._triggerClass)&&$.datepicker._datepickerShowing&&!($.datepicker._inDialog&&$.blockUI)){$.datepicker._hideDatepicker(null,"")}}, -_adjustDate: - function(id,offset,period){ - var target=$(id); - var inst=this._getInst(target[0]); - this._adjustInstDate(inst,offset,period); - this._updateDatepicker(inst) -}, -_gotoToday: -function(id){ - var target=$(id); - var inst=this._getInst(target[0]); - inst.onChangeToday=true; - if(this._get(inst,"gotoCurrent")&&inst.currentDay){ - inst.selectedDay=inst.currentDay; - inst.drawMonth=inst.selectedMonth=inst.currentMonth; - inst.drawYear=inst.selectedYear=inst.currentYear - }else{ - var date=new Date(); - inst.selectedDay=date.getDate(); - inst.drawMonth=inst.selectedMonth=date.getMonth(); - inst.drawYear=inst.selectedYear=date.getFullYear(); - } - - - this._notifyChange(inst); - this._adjustDate(target); - - -} -, -_selectMonthYear: - function(id,select,period){var target=$(id);var inst=this._getInst(target[0]);inst._selectingMonthYear=false;inst["selected"+(period=="M"?"Month":"Year")]=inst["draw"+(period=="M"?"Month":"Year")]=parseInt(select.options[select.selectedIndex].value,10);this._notifyChange(inst);this._adjustDate(target)},_clickMonthYear:function(id){var target=$(id);var inst=this._getInst(target[0]);if(inst.input&&inst._selectingMonthYear&&!$.browser.msie){inst.input[0].focus()}inst._selectingMonthYear=!inst._selectingMonthYear},_changeFirstDay:function(id,day){var target=$(id);var inst=this._getInst(target[0]);inst.settings.firstDay=day;this._updateDatepicker(inst)},_selectDay:function(id,month,year,td){if($(td).hasClass(this._unselectableClass)){return}var target=$(id);var inst=this._getInst(target[0]);var rangeSelect=this._get(inst,"rangeSelect");if(rangeSelect){inst.stayOpen=!inst.stayOpen;if(inst.stayOpen){$(".ui-datepicker td",inst.dpDiv).removeClass(this._currentClass);$(td).addClass(this._currentClass)}}inst.selectedDay=inst.currentDay=$("a",td).html();inst.selectedMonth=inst.currentMonth=month;inst.selectedYear=inst.currentYear=year;if(inst.stayOpen){inst.endDay=inst.endMonth=inst.endYear=null}else{if(rangeSelect){inst.endDay=inst.currentDay;inst.endMonth=inst.currentMonth;inst.endYear=inst.currentYear}}this._selectDate(id,this._formatDate(inst,inst.currentDay,inst.currentMonth,inst.currentYear));if(inst.stayOpen){inst.rangeStart=new Date(inst.currentYear,inst.currentMonth,inst.currentDay);this._updateDatepicker(inst)}else{if(rangeSelect){inst.selectedDay=inst.currentDay=inst.rangeStart.getDate();inst.selectedMonth=inst.currentMonth=inst.rangeStart.getMonth();inst.selectedYear=inst.currentYear=inst.rangeStart.getFullYear();inst.rangeStart=null;if(inst.inline){this._updateDatepicker(inst)}}}},_clearDate:function(id){var target=$(id);var inst=this._getInst(target[0]);if(this._get(inst,"mandatory")){return}inst.stayOpen=false;inst.endDay=inst.endMonth=inst.endYear=inst.rangeStart=null;this._selectDate(target,"")}, - _selectDate:function(id,dateStr){ - var target=$(id); - var inst=this._getInst(target[0]); - dateStr=(dateStr!=null?dateStr:this._formatDate(inst)); - if(this._get(inst,"rangeSelect")&&dateStr){ - dateStr=(inst.rangeStart?this._formatDate(inst,inst.rangeStart):dateStr)+this._get(inst,"rangeSeparator")+dateStr}if(inst.input){inst.input.val(dateStr)}this._updateAlternate(inst); - - var onSelect=this._get(inst,"onSelect"); - if(onSelect){ - onSelect.apply((inst.input?inst.input[0]:null),[dateStr,inst]) - }else{ - if(inst.input){ - inst.input.trigger("change")} - } - - if(inst.inline){ - this._updateDatepicker(inst)}else{if(!inst.stayOpen){this._hideDatepicker(null,this._get(inst,"duration"));this._lastInput=inst.input[0];if(typeof(inst.input[0])!="object"){inst.input[0].focus()}this._lastInput=null}}},_updateAlternate:function(inst){var altField=this._get(inst,"altField");if(altField){var altFormat=this._get(inst,"altFormat");var date=this._getDate(inst); - dateStr=(isArray(date)?(!date[0]&&!date[1]?"":this.formatDate(altFormat,date[0],this._getFormatConfig(inst))+this._get(inst,"rangeSeparator")+this.formatDate(altFormat,date[1]||date[0],this._getFormatConfig(inst))):this.formatDate(altFormat,date,this._getFormatConfig(inst))); - $(altField).each(function(){$(this).val(dateStr)})}},noWeekends:function(date){var day=date.getDay();return[(day>0&&day<6),""]},iso8601Week:function(date){var checkDate=new Date(date.getFullYear(),date.getMonth(),date.getDate(),(date.getTimezoneOffset()/-60));var firstMon=new Date(checkDate.getFullYear(),1-1,4);var firstDay=firstMon.getDay()||7;firstMon.setDate(firstMon.getDate()+1-firstDay);if(firstDay<4&&checkDate<firstMon){checkDate.setDate(checkDate.getDate()-3);return $.datepicker.iso8601Week(checkDate)}else{if(checkDate>new Date(checkDate.getFullYear(),12-1,28)){firstDay=new Date(checkDate.getFullYear()+1,1-1,4).getDay()||7;if(firstDay>4&&(checkDate.getDay()||7)<firstDay-3){return 1}}}return Math.floor(((checkDate-firstMon)/86400000)/7)+1},dateStatus:function(date,inst){return $.datepicker.formatDate($.datepicker._get(inst,"dateStatus"),date,$.datepicker._getFormatConfig(inst))},parseDate:function(format,value,settings){if(format==null||value==null){throw"Invalid arguments"}value=(typeof value=="object"?value.toString():value+"");if(value==""){return null}var shortYearCutoff=(settings?settings.shortYearCutoff:null)||this._defaults.shortYearCutoff;var dayNamesShort=(settings?settings.dayNamesShort:null)||this._defaults.dayNamesShort;var dayNames=(settings?settings.dayNames:null)||this._defaults.dayNames;var monthNamesShort=(settings?settings.monthNamesShort:null)||this._defaults.monthNamesShort;var monthNames=(settings?settings.monthNames:null)||this._defaults.monthNames;var year=-1;var month=-1;var day=-1;var doy=-1;var literal=false;var lookAhead=function(match){var matches=(iFormat+1<format.length&&format.charAt(iFormat+1)==match);if(matches){iFormat++}return matches};var getNumber=function(match){lookAhead(match);var origSize=(match=="@"?14:(match=="y"?4:(match=="o"?3:2)));var size=origSize;var num=0;while(size>0&&iValue<value.length&&value.charAt(iValue)>="0"&&value.charAt(iValue)<="9"){num=num*10+parseInt(value.charAt(iValue++),10);size--}if(size==origSize){throw"Missing number at position "+iValue}return num};var getName=function(match,shortNames,longNames){var names=(lookAhead(match)?longNames:shortNames);var size=0;for(var j=0;j<names.length;j++){size=Math.max(size,names[j].length)}var name="";var iInit=iValue;while(size>0&&iValue<value.length){name+=value.charAt(iValue++);for(var i=0;i<names.length;i++){if(name==names[i]){return i+1}}size--}throw"Unknown name at position "+iInit};var checkLiteral=function(){if(value.charAt(iValue)!=format.charAt(iFormat)){throw"Unexpected literal at position "+iValue}iValue++};var iValue=0;for(var iFormat=0;iFormat<format.length;iFormat++){if(literal){if(format.charAt(iFormat)=="'"&&!lookAhead("'")){literal=false}else{checkLiteral()}}else{switch(format.charAt(iFormat)){case"d":day=getNumber("d");break;case"D":getName("D",dayNamesShort,dayNames);break;case"o":doy=getNumber("o");break;case"m":month=getNumber("m");break;case"M":month=getName("M",monthNamesShort,monthNames);break;case"y":year=getNumber("y");break;case"@":var date=new Date(getNumber("@"));year=date.getFullYear();month=date.getMonth()+1;day=date.getDate();break;case"'":if(lookAhead("'")){checkLiteral()}else{literal=true}break;default:checkLiteral()}}}if(year<100){year+=new Date().getFullYear()-new Date().getFullYear()%100+(year<=shortYearCutoff?0:-100)}if(doy>-1){month=1;day=doy;do{var dim=this._getDaysInMonth(year,month-1);if(day<=dim){break}month++;day-=dim}while(true)}var date=new Date(year,month-1,day);if(date.getFullYear()!=year||date.getMonth()+1!=month||date.getDate()!=day){throw"Invalid date"}return date},ATOM:"yy-mm-dd",COOKIE:"D, dd M yy",ISO_8601:"yy-mm-dd",RFC_822:"D, d M y",RFC_850:"DD, dd-M-y",RFC_1036:"D, d M y",RFC_1123:"D, d M yy",RFC_2822:"D, d M yy",RSS:"D, d M y",TIMESTAMP:"@",W3C:"yy-mm-dd",formatDate:function(format,date,settings){if(!date){return""}var dayNamesShort=(settings?settings.dayNamesShort:null)||this._defaults.dayNamesShort;var dayNames=(settings?settings.dayNames:null)||this._defaults.dayNames;var monthNamesShort=(settings?settings.monthNamesShort:null)||this._defaults.monthNamesShort;var monthNames=(settings?settings.monthNames:null)||this._defaults.monthNames;var lookAhead=function(match){var matches=(iFormat+1<format.length&&format.charAt(iFormat+1)==match);if(matches){iFormat++}return matches};var formatNumber=function(match,value,len){var num=""+value;if(lookAhead(match)){while(num.length<len){num="0"+num}}return num};var formatName=function(match,value,shortNames,longNames){return(lookAhead(match)?longNames[value]:shortNames[value])};var output="";var literal=false;if(date){for(var iFormat=0;iFormat<format.length;iFormat++){if(literal){if(format.charAt(iFormat)=="'"&&!lookAhead("'")){literal=false}else{output+=format.charAt(iFormat)}}else{switch(format.charAt(iFormat)){case"d":output+=formatNumber("d",date.getDate(),2);break;case"D":output+=formatName("D",date.getDay(),dayNamesShort,dayNames);break;case"o":var doy=date.getDate();for(var m=date.getMonth()-1;m>=0;m--){doy+=this._getDaysInMonth(date.getFullYear(),m)}output+=formatNumber("o",doy,3);break;case"m":output+=formatNumber("m",date.getMonth()+1,2);break;case"M":output+=formatName("M",date.getMonth(),monthNamesShort,monthNames);break;case"y":output+=(lookAhead("y")?date.getFullYear():(date.getYear()%100<10?"0":"")+date.getYear()%100);break;case"@":output+=date.getTime();break;case"'":if(lookAhead("'")){output+="'"}else{literal=true}break;default:output+=format.charAt(iFormat)}}}}return output},_possibleChars:function(format){var chars="";var literal=false;for(var iFormat=0;iFormat<format.length;iFormat++){if(literal){if(format.charAt(iFormat)=="'"&&!lookAhead("'")){literal=false}else{chars+=format.charAt(iFormat)}}else{switch(format.charAt(iFormat)){case"d":case"m":case"y":case"@":chars+="0123456789";break;case"D":case"M":return null;case"'":if(lookAhead("'")){chars+="'"}else{literal=true}break;default:chars+=format.charAt(iFormat)}}}return chars},_get:function(inst,name){return inst.settings[name]!==undefined?inst.settings[name]:this._defaults[name]},_setDateFromField:function(inst){var dateFormat=this._get(inst,"dateFormat");var dates=inst.input?inst.input.val().split(this._get(inst,"rangeSeparator")):null;inst.endDay=inst.endMonth=inst.endYear=null;var date=defaultDate=this._getDefaultDate(inst);if(dates.length>0){var settings=this._getFormatConfig(inst);if(dates.length>1){date=this.parseDate(dateFormat,dates[1],settings)||defaultDate;inst.endDay=date.getDate();inst.endMonth=date.getMonth();inst.endYear=date.getFullYear()}try{date=this.parseDate(dateFormat,dates[0],settings)||defaultDate}catch(e){this.log(e);date=defaultDate}}inst.selectedDay=date.getDate();inst.drawMonth=inst.selectedMonth=date.getMonth();inst.drawYear=inst.selectedYear=date.getFullYear();inst.currentDay=(dates[0]?date.getDate():0);inst.currentMonth=(dates[0]?date.getMonth():0);inst.currentYear=(dates[0]?date.getFullYear():0);this._adjustInstDate(inst)},_getDefaultDate:function(inst){var date=this._determineDate(this._get(inst,"defaultDate"),new Date());var minDate=this._getMinMaxDate(inst,"min",true);var maxDate=this._getMinMaxDate(inst,"max");date=(minDate&&date<minDate?minDate:date);date=(maxDate&&date>maxDate?maxDate:date);return date},_determineDate:function(date,defaultDate){var offsetNumeric=function(offset){var date=new Date();date.setUTCDate(date.getUTCDate()+offset);return date};var offsetString=function(offset,getDaysInMonth){var date=new Date();var year=date.getFullYear();var month=date.getMonth();var day=date.getDate();var pattern=/([+-]?[0-9]+)\s*(d|D|w|W|m|M|y|Y)?/g;var matches=pattern.exec(offset);while(matches){switch(matches[2]||"d"){case"d":case"D":day+=parseInt(matches[1],10);break;case"w":case"W":day+=parseInt(matches[1],10)*7;break;case"m":case"M":month+=parseInt(matches[1],10);day=Math.min(day,getDaysInMonth(year,month));break;case"y":case"Y":year+=parseInt(matches[1],10);day=Math.min(day,getDaysInMonth(year,month));break}matches=pattern.exec(offset)}return new Date(year,month,day)};date=(date==null?defaultDate:(typeof date=="string"?offsetString(date,this._getDaysInMonth):(typeof date=="number"?(isNaN(date)?defaultDate:offsetNumeric(date)):date)));return(date&&date.toString()=="Invalid Date"?defaultDate:date)},_setDate:function(inst,date,endDate){var clear=!(date);var origMonth=inst.selectedMonth;var origYear=inst.selectedYear;date=this._determineDate(date,new Date());inst.selectedDay=inst.currentDay=date.getDate();inst.drawMonth=inst.selectedMonth=inst.currentMonth=date.getMonth();inst.drawYear=inst.selectedYear=inst.currentYear=date.getFullYear();if(this._get(inst,"rangeSelect")){if(endDate){endDate=this._determineDate(endDate,null);inst.endDay=endDate.getDate();inst.endMonth=endDate.getMonth();inst.endYear=endDate.getFullYear()}else{inst.endDay=inst.currentDay;inst.endMonth=inst.currentMonth;inst.endYear=inst.currentYear}}if(origMonth!=inst.selectedMonth||origYear!=inst.selectedYear){this._notifyChange(inst)}this._adjustInstDate(inst);if(inst.input){inst.input.val(clear?"":this._formatDate(inst)+(!this._get(inst,"rangeSelect")?"":this._get(inst,"rangeSeparator")+this._formatDate(inst,inst.endDay,inst.endMonth,inst.endYear)))}},_getDate:function(inst){var startDate=(!inst.currentYear||(inst.input&&inst.input.val()=="")?null:new Date(inst.currentYear,inst.currentMonth,inst.currentDay));if(this._get(inst,"rangeSelect")){return[inst.rangeStart||startDate,(!inst.endYear?inst.rangeStart||startDate:new Date(inst.endYear,inst.endMonth,inst.endDay))]}else{return startDate}},_generateHTML:function(inst){var today=new Date();today=new Date(today.getFullYear(),today.getMonth(),today.getDate());var showStatus=this._get(inst,"showStatus");var initStatus=this._get(inst,"initStatus")||" ";var isRTL=this._get(inst,"isRTL");var clear=(this._get(inst,"mandatory")?"":'<div class="ui-datepicker-clear"><a onclick="jQuery.datepicker._clearDate(\'#'+inst.id+"');\""+this._addStatus(showStatus,inst.id,this._get(inst,"clearStatus"),initStatus)+">"+this._get(inst,"clearText")+"</a></div>");var controls='<div class="ui-datepicker-control">'+(isRTL?"":clear)+'<div class="ui-datepicker-close"><a onclick="jQuery.datepicker._hideDatepicker();"'+this._addStatus(showStatus,inst.id,this._get(inst,"closeStatus"),initStatus)+">"+this._get(inst,"closeText")+"</a></div>"+(isRTL?clear:"")+"</div>";var prompt=this._get(inst,"prompt");var closeAtTop=this._get(inst,"closeAtTop");var hideIfNoPrevNext=this._get(inst,"hideIfNoPrevNext");var navigationAsDateFormat=this._get(inst,"navigationAsDateFormat");var showBigPrevNext=this._get(inst,"showBigPrevNext");var numMonths=this._getNumberOfMonths(inst);var showCurrentAtPos=this._get(inst,"showCurrentAtPos");var stepMonths=this._get(inst,"stepMonths");var stepBigMonths=this._get(inst,"stepBigMonths");var isMultiMonth=(numMonths[0]!=1||numMonths[1]!=1);var currentDate=(!inst.currentDay?new Date(9999,9,9):new Date(inst.currentYear,inst.currentMonth,inst.currentDay));var minDate=this._getMinMaxDate(inst,"min",true);var maxDate=this._getMinMaxDate(inst,"max");var drawMonth=inst.drawMonth-showCurrentAtPos;var drawYear=inst.drawYear;if(drawMonth<0){drawMonth+=12;drawYear--}if(maxDate){var maxDraw=new Date(maxDate.getFullYear(),maxDate.getMonth()-numMonths[1]+1,maxDate.getDate());maxDraw=(minDate&&maxDraw<minDate?minDate:maxDraw);while(new Date(drawYear,drawMonth,1)>maxDraw){drawMonth--;if(drawMonth<0){drawMonth=11;drawYear--}}}var prevText=this._get(inst,"prevText");prevText=(!navigationAsDateFormat?prevText:this.formatDate(prevText,new Date(drawYear,drawMonth-stepMonths,1),this._getFormatConfig(inst)));var prevBigText=(showBigPrevNext?this._get(inst,"prevBigText"):"");prevBigText=(!navigationAsDateFormat?prevBigText:this.formatDate(prevBigText,new Date(drawYear,drawMonth-stepBigMonths,1),this._getFormatConfig(inst)));var prev='<div class="ui-datepicker-prev">'+(this._canAdjustMonth(inst,-1,drawYear,drawMonth)?(showBigPrevNext?"<a onclick=\"jQuery.datepicker._adjustDate('#"+inst.id+"', -"+stepBigMonths+", 'M');\""+this._addStatus(showStatus,inst.id,this._get(inst,"prevBigStatus"),initStatus)+">"+prevBigText+"</a>":"")+"<a onclick=\"jQuery.datepicker._adjustDate('#"+inst.id+"', -"+stepMonths+", 'M');\""+this._addStatus(showStatus,inst.id,this._get(inst,"prevStatus"),initStatus)+">"+prevText+"</a>":(hideIfNoPrevNext?"":"<label>"+prevBigText+"</label><label>"+prevText+"</label>"))+"</div>";var nextText=this._get(inst,"nextText");nextText=(!navigationAsDateFormat?nextText:this.formatDate(nextText,new Date(drawYear,drawMonth+stepMonths,1),this._getFormatConfig(inst)));var nextBigText=(showBigPrevNext?this._get(inst,"nextBigText"):"");nextBigText=(!navigationAsDateFormat?nextBigText:this.formatDate(nextBigText,new Date(drawYear,drawMonth+stepBigMonths,1),this._getFormatConfig(inst)));var next='<div class="ui-datepicker-next">'+(this._canAdjustMonth(inst,+1,drawYear,drawMonth)?"<a onclick=\"jQuery.datepicker._adjustDate('#"+inst.id+"', +"+stepMonths+", 'M');\""+this._addStatus(showStatus,inst.id,this._get(inst,"nextStatus"),initStatus)+">"+nextText+"</a>"+(showBigPrevNext?"<a onclick=\"jQuery.datepicker._adjustDate('#"+inst.id+"', +"+stepBigMonths+", 'M');\""+this._addStatus(showStatus,inst.id,this._get(inst,"nextBigStatus"),initStatus)+">"+nextBigText+"</a>":""):(hideIfNoPrevNext?"":"<label>"+nextText+"</label><label>"+nextBigText+"</label>"))+"</div>";var currentText=this._get(inst,"currentText");var gotoDate=(this._get(inst,"gotoCurrent")&&inst.currentDay?currentDate:today);currentText=(!navigationAsDateFormat?currentText:this.formatDate(currentText,gotoDate,this._getFormatConfig(inst))); - -var html=(prompt?'<div class="'+ - this._promptClass+'">'+ - prompt+ - "</div>":"")+ - (closeAtTop&&!inst.inline?controls:"")+ - '<div class="ui-datepicker-links">'+ - (isRTL?next:prev)+ - (this._isInRange(inst,gotoDate)?'<div class="ui-datepicker-current"><a onclick="jQuery.datepicker._gotoToday(\'#'+inst.id+"');\""+this._addStatus(showStatus,inst.id,this._get(inst,"currentStatus"),initStatus)+">"+currentText+"</a></div>":"")+(isRTL?prev:next)+"</div>"; - -var firstDay=this._get(inst,"firstDay");var changeFirstDay=this._get(inst,"changeFirstDay");var dayNames=this._get(inst,"dayNames");var dayNamesShort=this._get(inst,"dayNamesShort");var dayNamesMin=this._get(inst,"dayNamesMin");var monthNames=this._get(inst,"monthNames");var beforeShowDay=this._get(inst,"beforeShowDay");var highlightWeek=this._get(inst,"highlightWeek");var showOtherMonths=this._get(inst,"showOtherMonths");var showWeeks=this._get(inst,"showWeeks");var calculateWeek=this._get(inst,"calculateWeek")||this.iso8601Week;var weekStatus=this._get(inst,"weekStatus");var status=(showStatus?this._get(inst,"dayStatus")||initStatus:"");var dateStatus=this._get(inst,"statusForDate")||this.dateStatus;var endDate=inst.endDay?new Date(inst.endYear,inst.endMonth,inst.endDay):currentDate;for(var row=0;row<numMonths[0];row++){for(var col=0;col<numMonths[1];col++){var selectedDate=new Date(drawYear,drawMonth,inst.selectedDay);html+='<div class="ui-datepicker-one-month'+(col==0?" ui-datepicker-new-row":"")+'">'+this._generateMonthYearHeader(inst,drawMonth,drawYear,minDate,maxDate,selectedDate,row>0||col>0,showStatus,initStatus,monthNames)+'<table class="ui-datepicker" cellpadding="0" cellspacing="0"><thead><tr class="ui-datepicker-title-row">'+(showWeeks?"<td"+this._addStatus(showStatus,inst.id,weekStatus,initStatus)+">"+this._get(inst,"weekHeader")+"</td>":"");for(var dow=0;dow<7;dow++){var day=(dow+firstDay)%7;var dayStatus=(status.indexOf("DD")>-1?status.replace(/DD/,dayNames[day]):status.replace(/D/,dayNamesShort[day]));html+="<td"+((dow+firstDay+6)%7>=5?' class="ui-datepicker-week-end-cell"':"")+">"+(!changeFirstDay?"<span":"<a onclick=\"jQuery.datepicker._changeFirstDay('#"+inst.id+"', "+day+');"')+this._addStatus(showStatus,inst.id,dayStatus,initStatus)+' title="'+dayNames[day]+'">'+dayNamesMin[day]+(changeFirstDay?"</a>":"</span>")+"</td>"}html+="</tr></thead><tbody>";var daysInMonth=this._getDaysInMonth(drawYear,drawMonth);if(drawYear==inst.selectedYear&&drawMonth==inst.selectedMonth){inst.selectedDay=Math.min(inst.selectedDay,daysInMonth)}var leadDays=(this._getFirstDayOfMonth(drawYear,drawMonth)-firstDay+7)%7;var tzDate=new Date(drawYear,drawMonth,1-leadDays);var utcDate=new Date(drawYear,drawMonth,1-leadDays);var printDate=utcDate;var numRows=(isMultiMonth?6:Math.ceil((leadDays+daysInMonth)/7));for(var dRow=0;dRow<numRows;dRow++){html+='<tr class="ui-datepicker-days-row">'+(showWeeks?'<td class="ui-datepicker-week-col"'+this._addStatus(showStatus,inst.id,weekStatus,initStatus)+">"+calculateWeek(printDate)+"</td>":"");for(var dow=0;dow<7;dow++){var daySettings=(beforeShowDay?beforeShowDay.apply((inst.input?inst.input[0]:null),[printDate]):[true,""]);var otherMonth=(printDate.getMonth()!=drawMonth);var unselectable=otherMonth||!daySettings[0]||(minDate&&printDate<minDate)||(maxDate&&printDate>maxDate);html+='<td class="ui-datepicker-days-cell'+((dow+firstDay+6)%7>=5?" ui-datepicker-week-end-cell":"")+(otherMonth?" ui-datepicker-other-month":"")+(printDate.getTime()==selectedDate.getTime()&&drawMonth==inst.selectedMonth?" ui-datepicker-days-cell-over":"")+(unselectable?" "+this._unselectableClass:"")+(otherMonth&&!showOtherMonths?"":" "+daySettings[1]+(printDate.getTime()>=currentDate.getTime()&&printDate.getTime()<=endDate.getTime()?" "+this._currentClass:"")+(printDate.getTime()==today.getTime()?" ui-datepicker-today":""))+'"'+((!otherMonth||showOtherMonths)&&daySettings[2]?' title="'+daySettings[2]+'"':"")+(unselectable?(highlightWeek?" onmouseover=\"jQuery(this).parent().addClass('ui-datepicker-week-over');\" onmouseout=\"jQuery(this).parent().removeClass('ui-datepicker-week-over');\"":""):" onmouseover=\"jQuery(this).addClass('ui-datepicker-days-cell-over')"+(highlightWeek?".parent().addClass('ui-datepicker-week-over')":"")+";"+(!showStatus||(otherMonth&&!showOtherMonths)?"":"jQuery('#ui-datepicker-status-"+inst.id+"').html('"+(dateStatus.apply((inst.input?inst.input[0]:null),[printDate,inst])||initStatus)+"');")+"\" onmouseout=\"jQuery(this).removeClass('ui-datepicker-days-cell-over')"+(highlightWeek?".parent().removeClass('ui-datepicker-week-over')":"")+";"+(!showStatus||(otherMonth&&!showOtherMonths)?"":"jQuery('#ui-datepicker-status-"+inst.id+"').html('"+initStatus+"');")+'" onclick="jQuery.datepicker._selectDay(\'#'+inst.id+"',"+drawMonth+","+drawYear+', this);"')+">"+(otherMonth?(showOtherMonths?printDate.getDate():" "):(unselectable?printDate.getDate():"<a>"+printDate.getDate()+"</a>"))+"</td>";tzDate.setDate(tzDate.getDate()+1);utcDate.setUTCDate(utcDate.getUTCDate()+1);printDate=(tzDate>utcDate?tzDate:utcDate)}html+="</tr>"}drawMonth++;if(drawMonth>11){drawMonth=0;drawYear++}html+="</tbody></table></div>"}}html+=(showStatus?'<div style="clear: both;"></div><div id="ui-datepicker-status-'+inst.id+'" class="ui-datepicker-status">'+initStatus+"</div>":"")+(!closeAtTop&&!inst.inline?controls:"")+'<div style="clear: both;"></div>'+($.browser.msie&&parseInt($.browser.version,10)<7&&!inst.inline?'<iframe src="javascript:false;" class="ui-datepicker-cover"></iframe>':"");return html},_generateMonthYearHeader:function(inst,drawMonth,drawYear,minDate,maxDate,selectedDate,secondary,showStatus,initStatus,monthNames){minDate=(inst.rangeStart&&minDate&&selectedDate<minDate?selectedDate:minDate);var showMonthAfterYear=this._get(inst,"showMonthAfterYear");var html='<div class="ui-datepicker-header">';var monthHtml="";if(secondary||!this._get(inst,"changeMonth")){monthHtml+=monthNames[drawMonth]+" "}else{var inMinYear=(minDate&&minDate.getFullYear()==drawYear);var inMaxYear=(maxDate&&maxDate.getFullYear()==drawYear);monthHtml+='<select class="ui-datepicker-new-month" onchange="jQuery.datepicker._selectMonthYear(\'#'+inst.id+"', this, 'M');\" onclick=\"jQuery.datepicker._clickMonthYear('#"+inst.id+"');\""+this._addStatus(showStatus,inst.id,this._get(inst,"monthStatus"),initStatus)+">";for(var month=0;month<12;month++){if((!inMinYear||month>=minDate.getMonth())&&(!inMaxYear||month<=maxDate.getMonth())){monthHtml+='<option value="'+month+'"'+(month==drawMonth?' selected="selected"':"")+">"+monthNames[month]+"</option>"}}monthHtml+="</select>"}if(!showMonthAfterYear){html+=monthHtml}if(secondary||!this._get(inst,"changeYear")){html+=drawYear}else{var years=this._get(inst,"yearRange").split(":");var year=0;var endYear=0;if(years.length!=2){year=drawYear-10;endYear=drawYear+10}else{if(years[0].charAt(0)=="+"||years[0].charAt(0)=="-"){year=endYear=new Date().getFullYear();year+=parseInt(years[0],10);endYear+=parseInt(years[1],10)}else{year=parseInt(years[0],10);endYear=parseInt(years[1],10)}}year=(minDate?Math.max(year,minDate.getFullYear()):year);endYear=(maxDate?Math.min(endYear,maxDate.getFullYear()):endYear);html+='<select class="ui-datepicker-new-year" onchange="jQuery.datepicker._selectMonthYear(\'#'+inst.id+"', this, 'Y');\" onclick=\"jQuery.datepicker._clickMonthYear('#"+inst.id+"');\""+this._addStatus(showStatus,inst.id,this._get(inst,"yearStatus"),initStatus)+">";for(;year<=endYear;year++){html+='<option value="'+year+'"'+(year==drawYear?' selected="selected"':"")+">"+year+"</option>"}html+="</select>"}if(showMonthAfterYear){html+=monthHtml}html+="</div>";return html},_addStatus:function(showStatus,id,text,initStatus){return(showStatus?" onmouseover=\"jQuery('#ui-datepicker-status-"+id+"').html('"+(text||initStatus)+"');\" onmouseout=\"jQuery('#ui-datepicker-status-"+id+"').html('"+initStatus+"');\"":"")},_adjustInstDate:function(inst,offset,period){var year=inst.drawYear+(period=="Y"?offset:0);var month=inst.drawMonth+(period=="M"?offset:0);var day=Math.min(inst.selectedDay,this._getDaysInMonth(year,month))+(period=="D"?offset:0);var date=new Date(year,month,day);var minDate=this._getMinMaxDate(inst,"min",true);var maxDate=this._getMinMaxDate(inst,"max");date=(minDate&&date<minDate?minDate:date);date=(maxDate&&date>maxDate?maxDate:date);inst.selectedDay=date.getDate();inst.drawMonth=inst.selectedMonth=date.getMonth();inst.drawYear=inst.selectedYear=date.getFullYear();if(period=="M"||period=="Y"){this._notifyChange(inst)}}, -_notifyChange: - function(inst){ - var onChange=this._get(inst,"onChangeMonthYear"); - if(onChange){ - onChange.apply( - (inst.input?inst.input[0]:null), - [inst.selectedYear,inst.selectedMonth+1,inst] - ) - } - } -, -_getNumberOfMonths:function(inst){var numMonths=this._get(inst,"numberOfMonths");return(numMonths==null?[1,1]:(typeof numMonths=="number"?[1,numMonths]:numMonths))},_getMinMaxDate:function(inst,minMax,checkRange){var date=this._determineDate(this._get(inst,minMax+"Date"),null);if(date){date.setHours(0);date.setMinutes(0);date.setSeconds(0);date.setMilliseconds(0)}return(!checkRange||!inst.rangeStart?date:(!date||inst.rangeStart>date?inst.rangeStart:date))},_getDaysInMonth:function(year,month){return 32-new Date(year,month,32).getDate()},_getFirstDayOfMonth:function(year,month){return new Date(year,month,1).getDay()},_canAdjustMonth:function(inst,offset,curYear,curMonth){var numMonths=this._getNumberOfMonths(inst);var date=new Date(curYear,curMonth+(offset<0?offset:numMonths[1]),1);if(offset<0){date.setDate(this._getDaysInMonth(date.getFullYear(),date.getMonth()))}return this._isInRange(inst,date)},_isInRange:function(inst,date){var newMinDate=(!inst.rangeStart?null:new Date(inst.selectedYear,inst.selectedMonth,inst.selectedDay));newMinDate=(newMinDate&&inst.rangeStart<newMinDate?inst.rangeStart:newMinDate);var minDate=newMinDate||this._getMinMaxDate(inst,"min");var maxDate=this._getMinMaxDate(inst,"max");return((!minDate||date>=minDate)&&(!maxDate||date<=maxDate))},_getFormatConfig:function(inst){var shortYearCutoff=this._get(inst,"shortYearCutoff");shortYearCutoff=(typeof shortYearCutoff!="string"?shortYearCutoff:new Date().getFullYear()%100+parseInt(shortYearCutoff,10));return{shortYearCutoff:shortYearCutoff,dayNamesShort:this._get(inst,"dayNamesShort"),dayNames:this._get(inst,"dayNames"),monthNamesShort:this._get(inst,"monthNamesShort"),monthNames:this._get(inst,"monthNames")}},_formatDate:function(inst,day,month,year){if(!day){inst.currentDay=inst.selectedDay;inst.currentMonth=inst.selectedMonth;inst.currentYear=inst.selectedYear}var date=(day?(typeof day=="object"?day:new Date(year,month,day)):new Date(inst.currentYear,inst.currentMonth,inst.currentDay));return this.formatDate(this._get(inst,"dateFormat"),date,this._getFormatConfig(inst))}});function extendRemove(target,props){$.extend(target,props);for(var name in props){if(props[name]==null||props[name]==undefined){target[name]=props[name]}}return target}function isArray(a){return(a&&(($.browser.safari&&typeof a=="object"&&a.length)||(a.constructor&&a.constructor.toString().match(/\Array\(\)/))))}$.fn.datepicker=function(options){if(!$.datepicker.initialized){$(document.body).append($.datepicker.dpDiv).mousedown($.datepicker._checkExternalClick);$.datepicker.initialized=true}var otherArgs=Array.prototype.slice.call(arguments,1);if(typeof options=="string"&&(options=="isDisabled"||options=="getDate")){return $.datepicker["_"+options+"Datepicker"].apply($.datepicker,[this[0]].concat(otherArgs))}return this.each(function(){typeof options=="string"?$.datepicker["_"+options+"Datepicker"].apply($.datepicker,[this].concat(otherArgs)):$.datepicker._attachDatepicker(this,options)})};$.datepicker=new Datepicker();$.datepicker.initialized=false;$.datepicker.uuid=new Date().getTime()})(jQuery) diff --git a/ui.datepicker.min.js b/ui.datepicker.min.js deleted file mode 100644 index 155949aad..000000000 --- a/ui.datepicker.min.js +++ /dev/null @@ -1,12 +0,0 @@ -/* - * jQuery UI Datepicker 1.7.2 - * - * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT (MIT-LICENSE.txt) - * and GPL (GPL-LICENSE.txt) licenses. - * - * http://docs.jquery.com/UI/Datepicker - * - * Depends: - * ui.core.js - */ (function($){$.extend($.ui,{datepicker:{version:"1.7.2"}});var PROP_NAME="datepicker";function Datepicker(){this.debug=false;this._curInst=null;this._keyEvent=false;this._disabledInputs=[];this._datepickerShowing=false;this._inDialog=false;this._mainDivId="ui-datepicker-div";this._inlineClass="ui-datepicker-inline";this._appendClass="ui-datepicker-append";this._triggerClass="ui-datepicker-trigger";this._dialogClass="ui-datepicker-dialog";this._disableClass="ui-datepicker-disabled";this._unselectableClass="ui-datepicker-unselectable";this._currentClass="ui-datepicker-current-day";this._dayOverClass="ui-datepicker-days-cell-over";this.regional=[];this.regional[""]={closeText:"Done",prevText:"Prev",nextText:"Next",currentText:"Today",monthNames:["January","February","March","April","May","June","July","August","September","October","November","December"],monthNamesShort:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],dayNames:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],dayNamesShort:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],dayNamesMin:["Su","Mo","Tu","We","Th","Fr","Sa"],dateFormat:"mm/dd/yy",firstDay:0,isRTL:false};this._defaults={showOn:"focus",showAnim:"show",showOptions:{},defaultDate:null,appendText:"",buttonText:"...",buttonImage:"",buttonImageOnly:false,hideIfNoPrevNext:false,navigationAsDateFormat:false,gotoCurrent:false,changeMonth:false,changeYear:false,showMonthAfterYear:false,yearRange:"-10:+10",showOtherMonths:false,calculateWeek:this.iso8601Week,shortYearCutoff:"+10",minDate:null,maxDate:null,duration:"normal",beforeShowDay:null,beforeShow:null,onSelect:null,onChangeMonthYear:null,onClose:null,numberOfMonths:1,showCurrentAtPos:0,stepMonths:1,stepBigMonths:12,altField:"",altFormat:"",constrainInput:true,showButtonPanel:false};$.extend(this._defaults,this.regional[""]);this.dpDiv=$('<div id="'+this._mainDivId+'" class="ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all ui-helper-hidden-accessible"></div>')}$.extend(Datepicker.prototype,{markerClassName:"hasDatepicker",log:function(){if(this.debug){console.log.apply("",arguments)}},setDefaults:function(settings){extendRemove(this._defaults,settings||{});return this},_attachDatepicker:function(target,settings){var inlineSettings=null;for(var attrName in this._defaults){var attrValue=target.getAttribute("date:"+attrName);if(attrValue){inlineSettings=inlineSettings||{};try{inlineSettings[attrName]=eval(attrValue)}catch(err){inlineSettings[attrName]=attrValue}}}var nodeName=target.nodeName.toLowerCase();var inline=(nodeName=="div"||nodeName=="span");if(!target.id){target.id="dp"+(++this.uuid)}var inst=this._newInst($(target),inline);inst.settings=$.extend({},settings||{},inlineSettings||{});if(nodeName=="input"){this._connectDatepicker(target,inst)}else{if(inline){this._inlineDatepicker(target,inst)}}},_newInst:function(target,inline){var id=target[0].id.replace(/([:\[\]\.])/g,"\\\\$1");return{id:id,input:target,selectedDay:0,selectedMonth:0,selectedYear:0,drawMonth:0,drawYear:0,inline:inline,dpDiv:(!inline?this.dpDiv:$('<div class="'+this._inlineClass+' ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all"></div>'))}},_connectDatepicker:function(target,inst){var input=$(target);inst.append=$([]);inst.trigger=$([]);if(input.hasClass(this.markerClassName)){return}var appendText=this._get(inst,"appendText");var isRTL=this._get(inst,"isRTL");if(appendText){inst.append=$('<span class="'+this._appendClass+'">'+appendText+"</span>");input[isRTL?"before":"after"](inst.append)}var showOn=this._get(inst,"showOn");if(showOn=="focus"||showOn=="both"){input.focus(this._showDatepicker)}if(showOn=="button"||showOn=="both"){var buttonText=this._get(inst,"buttonText");var buttonImage=this._get(inst,"buttonImage");inst.trigger=$(this._get(inst,"buttonImageOnly")?$("<img/>").addClass(this._triggerClass).attr({src:buttonImage,alt:buttonText,title:buttonText}):$('<button type="button"></button>').addClass(this._triggerClass).html(buttonImage==""?buttonText:$("<img/>").attr({src:buttonImage,alt:buttonText,title:buttonText})));input[isRTL?"before":"after"](inst.trigger);inst.trigger.click(function(){if($.datepicker._datepickerShowing&&$.datepicker._lastInput==target){$.datepicker._hideDatepicker()}else{$.datepicker._showDatepicker(target)}return false})}input.addClass(this.markerClassName).keydown(this._doKeyDown).keypress(this._doKeyPress).bind("setData.datepicker",function(event,key,value){inst.settings[key]=value}).bind("getData.datepicker",function(event,key){return this._get(inst,key)});$.data(target,PROP_NAME,inst)},_inlineDatepicker:function(target,inst){var divSpan=$(target);if(divSpan.hasClass(this.markerClassName)){return}divSpan.addClass(this.markerClassName).append(inst.dpDiv).bind("setData.datepicker",function(event,key,value){inst.settings[key]=value}).bind("getData.datepicker",function(event,key){return this._get(inst,key)});$.data(target,PROP_NAME,inst);this._setDate(inst,this._getDefaultDate(inst));this._updateDatepicker(inst);this._updateAlternate(inst)},_dialogDatepicker:function(input,dateText,onSelect,settings,pos){var inst=this._dialogInst;if(!inst){var id="dp"+(++this.uuid);this._dialogInput=$('<input type="text" id="'+id+'" size="1" style="position: absolute; top: -100px;"/>');this._dialogInput.keydown(this._doKeyDown);$("body").append(this._dialogInput);inst=this._dialogInst=this._newInst(this._dialogInput,false);inst.settings={};$.data(this._dialogInput[0],PROP_NAME,inst)}extendRemove(inst.settings,settings||{});this._dialogInput.val(dateText);this._pos=(pos?(pos.length?pos:[pos.pageX,pos.pageY]):null);if(!this._pos){var browserWidth=window.innerWidth||document.documentElement.clientWidth||document.body.clientWidth;var browserHeight=window.innerHeight||document.documentElement.clientHeight||document.body.clientHeight;var scrollX=document.documentElement.scrollLeft||document.body.scrollLeft;var scrollY=document.documentElement.scrollTop||document.body.scrollTop;this._pos=[(browserWidth/2)-100+scrollX,(browserHeight/2)-150+scrollY]}this._dialogInput.css("left",this._pos[0]+"px").css("top",this._pos[1]+"px");inst.settings.onSelect=onSelect;this._inDialog=true;this.dpDiv.addClass(this._dialogClass);this._showDatepicker(this._dialogInput[0]);if($.blockUI){$.blockUI(this.dpDiv)}$.data(this._dialogInput[0],PROP_NAME,inst);return this},_destroyDatepicker:function(target){var $target=$(target);var inst=$.data(target,PROP_NAME);if(!$target.hasClass(this.markerClassName)){return}var nodeName=target.nodeName.toLowerCase();$.removeData(target,PROP_NAME);if(nodeName=="input"){inst.append.remove();inst.trigger.remove();$target.removeClass(this.markerClassName).unbind("focus",this._showDatepicker).unbind("keydown",this._doKeyDown).unbind("keypress",this._doKeyPress)}else{if(nodeName=="div"||nodeName=="span"){$target.removeClass(this.markerClassName).empty()}}},_enableDatepicker:function(target){var $target=$(target);var inst=$.data(target,PROP_NAME);if(!$target.hasClass(this.markerClassName)){return}var nodeName=target.nodeName.toLowerCase();if(nodeName=="input"){target.disabled=false;inst.trigger.filter("button").each(function(){this.disabled=false}).end().filter("img").css({opacity:"1.0",cursor:""})}else{if(nodeName=="div"||nodeName=="span"){var inline=$target.children("."+this._inlineClass);inline.children().removeClass("ui-state-disabled")}}this._disabledInputs=$.map(this._disabledInputs,function(value){return(value==target?null:value)})},_disableDatepicker:function(target){var $target=$(target);var inst=$.data(target,PROP_NAME);if(!$target.hasClass(this.markerClassName)){return}var nodeName=target.nodeName.toLowerCase();if(nodeName=="input"){target.disabled=true;inst.trigger.filter("button").each(function(){this.disabled=true}).end().filter("img").css({opacity:"0.5",cursor:"default"})}else{if(nodeName=="div"||nodeName=="span"){var inline=$target.children("."+this._inlineClass);inline.children().addClass("ui-state-disabled")}}this._disabledInputs=$.map(this._disabledInputs,function(value){return(value==target?null:value)});this._disabledInputs[this._disabledInputs.length]=target},_isDisabledDatepicker:function(target){if(!target){return false}for(var i=0;i<this._disabledInputs.length;i++){if(this._disabledInputs[i]==target){return true}}return false},_getInst:function(target){try{return $.data(target,PROP_NAME)}catch(err){throw"Missing instance data for this datepicker"}},_optionDatepicker:function(target,name,value){var inst=this._getInst(target);if(arguments.length==2&&typeof name=="string"){return(name=="defaults"?$.extend({},$.datepicker._defaults):(inst?(name=="all"?$.extend({},inst.settings):this._get(inst,name)):null))}var settings=name||{};if(typeof name=="string"){settings={};settings[name]=value}if(inst){if(this._curInst==inst){this._hideDatepicker(null)}var date=this._getDateDatepicker(target);extendRemove(inst.settings,settings);this._setDateDatepicker(target,date);this._updateDatepicker(inst)}},_changeDatepicker:function(target,name,value){this._optionDatepicker(target,name,value)},_refreshDatepicker:function(target){var inst=this._getInst(target);if(inst){this._updateDatepicker(inst)}},_setDateDatepicker:function(target,date,endDate){var inst=this._getInst(target);if(inst){this._setDate(inst,date,endDate);this._updateDatepicker(inst);this._updateAlternate(inst)}},_getDateDatepicker:function(target){var inst=this._getInst(target);if(inst&&!inst.inline){this._setDateFromField(inst)}return(inst?this._getDate(inst):null)},_doKeyDown:function(event){var inst=$.datepicker._getInst(event.target);var handled=true;var isRTL=inst.dpDiv.is(".ui-datepicker-rtl");inst._keyEvent=true;if($.datepicker._datepickerShowing){switch(event.keyCode){case 9:$.datepicker._hideDatepicker(null,"");break;case 13:var sel=$("td."+$.datepicker._dayOverClass+", td."+$.datepicker._currentClass,inst.dpDiv);if(sel[0]){$.datepicker._selectDay(event.target,inst.selectedMonth,inst.selectedYear,sel[0])}else{$.datepicker._hideDatepicker(null,$.datepicker._get(inst,"duration"))}return false;break;case 27:$.datepicker._hideDatepicker(null,$.datepicker._get(inst,"duration"));break;case 33:$.datepicker._adjustDate(event.target,(event.ctrlKey?-$.datepicker._get(inst,"stepBigMonths"):-$.datepicker._get(inst,"stepMonths")),"M");break;case 34:$.datepicker._adjustDate(event.target,(event.ctrlKey?+$.datepicker._get(inst,"stepBigMonths"):+$.datepicker._get(inst,"stepMonths")),"M");break;case 35:if(event.ctrlKey||event.metaKey){$.datepicker._clearDate(event.target)}handled=event.ctrlKey||event.metaKey;break;case 36:if(event.ctrlKey||event.metaKey){$.datepicker._gotoToday(event.target)}handled=event.ctrlKey||event.metaKey;break;case 37:if(event.ctrlKey||event.metaKey){$.datepicker._adjustDate(event.target,(isRTL?+1:-1),"D")}handled=event.ctrlKey||event.metaKey;if(event.originalEvent.altKey){$.datepicker._adjustDate(event.target,(event.ctrlKey?-$.datepicker._get(inst,"stepBigMonths"):-$.datepicker._get(inst,"stepMonths")),"M")}break;case 38:if(event.ctrlKey||event.metaKey){$.datepicker._adjustDate(event.target,-7,"D")}handled=event.ctrlKey||event.metaKey;break;case 39:if(event.ctrlKey||event.metaKey){$.datepicker._adjustDate(event.target,(isRTL?-1:+1),"D")}handled=event.ctrlKey||event.metaKey;if(event.originalEvent.altKey){$.datepicker._adjustDate(event.target,(event.ctrlKey?+$.datepicker._get(inst,"stepBigMonths"):+$.datepicker._get(inst,"stepMonths")),"M")}break;case 40:if(event.ctrlKey||event.metaKey){$.datepicker._adjustDate(event.target,+7,"D")}handled=event.ctrlKey||event.metaKey;break;default:handled=false}}else{if(event.keyCode==36&&event.ctrlKey){$.datepicker._showDatepicker(this)}else{handled=false}}if(handled){event.preventDefault();event.stopPropagation()}},_doKeyPress:function(event){var inst=$.datepicker._getInst(event.target);if($.datepicker._get(inst,"constrainInput")){var chars=$.datepicker._possibleChars($.datepicker._get(inst,"dateFormat"));var chr=String.fromCharCode(event.charCode==undefined?event.keyCode:event.charCode);return event.ctrlKey||(chr<" "||!chars||chars.indexOf(chr)>-1)}},_showDatepicker:function(input){input=input.target||input;if(input.nodeName.toLowerCase()!="input"){input=$("input",input.parentNode)[0]}if($.datepicker._isDisabledDatepicker(input)||$.datepicker._lastInput==input){return}var inst=$.datepicker._getInst(input);var beforeShow=$.datepicker._get(inst,"beforeShow");extendRemove(inst.settings,(beforeShow?beforeShow.apply(input,[input,inst]):{}));$.datepicker._hideDatepicker(null,"");$.datepicker._lastInput=input;$.datepicker._setDateFromField(inst);if($.datepicker._inDialog){input.value=""}if(!$.datepicker._pos){$.datepicker._pos=$.datepicker._findPos(input);$.datepicker._pos[1]+=input.offsetHeight}var isFixed=false;$(input).parents().each(function(){isFixed|=$(this).css("position")=="fixed";return !isFixed});if(isFixed&&$.browser.opera){$.datepicker._pos[0]-=document.documentElement.scrollLeft;$.datepicker._pos[1]-=document.documentElement.scrollTop}var offset={left:$.datepicker._pos[0],top:$.datepicker._pos[1]};$.datepicker._pos=null;inst.rangeStart=null;inst.dpDiv.css({position:"absolute",display:"block",top:"-1000px"});$.datepicker._updateDatepicker(inst);offset=$.datepicker._checkOffset(inst,offset,isFixed);inst.dpDiv.css({position:($.datepicker._inDialog&&$.blockUI?"static":(isFixed?"fixed":"absolute")),display:"none",left:offset.left+"px",top:offset.top+"px"});if(!inst.inline){var showAnim=$.datepicker._get(inst,"showAnim")||"show";var duration=$.datepicker._get(inst,"duration");var postProcess=function(){$.datepicker._datepickerShowing=true;if($.browser.msie&&parseInt($.browser.version,10)<7){$("iframe.ui-datepicker-cover").css({width:inst.dpDiv.width()+4,height:inst.dpDiv.height()+4})}};if($.effects&&$.effects[showAnim]){inst.dpDiv.show(showAnim,$.datepicker._get(inst,"showOptions"),duration,postProcess)}else{inst.dpDiv[showAnim](duration,postProcess)}if(duration==""){postProcess()}if(inst.input[0].type!="hidden"){inst.input[0].focus()}$.datepicker._curInst=inst}},_updateDatepicker:function(inst){var dims={width:inst.dpDiv.width()+4,height:inst.dpDiv.height()+4};var self=this;inst.dpDiv.empty().append(this._generateHTML(inst)).find("iframe.ui-datepicker-cover").css({width:dims.width,height:dims.height}).end().find("button, .ui-datepicker-prev, .ui-datepicker-next, .ui-datepicker-calendar td a").bind("mouseout",function(){$(this).removeClass("ui-state-hover");if(this.className.indexOf("ui-datepicker-prev")!=-1){$(this).removeClass("ui-datepicker-prev-hover")}if(this.className.indexOf("ui-datepicker-next")!=-1){$(this).removeClass("ui-datepicker-next-hover")}}).bind("mouseover",function(){if(!self._isDisabledDatepicker(inst.inline?inst.dpDiv.parent()[0]:inst.input[0])){$(this).parents(".ui-datepicker-calendar").find("a").removeClass("ui-state-hover");$(this).addClass("ui-state-hover");if(this.className.indexOf("ui-datepicker-prev")!=-1){$(this).addClass("ui-datepicker-prev-hover")}if(this.className.indexOf("ui-datepicker-next")!=-1){$(this).addClass("ui-datepicker-next-hover")}}}).end().find("."+this._dayOverClass+" a").trigger("mouseover").end();var numMonths=this._getNumberOfMonths(inst);var cols=numMonths[1];var width=17;if(cols>1){inst.dpDiv.addClass("ui-datepicker-multi-"+cols).css("width",(width*cols)+"em")}else{inst.dpDiv.removeClass("ui-datepicker-multi-2 ui-datepicker-multi-3 ui-datepicker-multi-4").width("")}inst.dpDiv[(numMonths[0]!=1||numMonths[1]!=1?"add":"remove")+"Class"]("ui-datepicker-multi");inst.dpDiv[(this._get(inst,"isRTL")?"add":"remove")+"Class"]("ui-datepicker-rtl");if(inst.input&&inst.input[0].type!="hidden"&&inst==$.datepicker._curInst){$(inst.input[0]).focus()}},_checkOffset:function(inst,offset,isFixed){var dpWidth=inst.dpDiv.outerWidth();var dpHeight=inst.dpDiv.outerHeight();var inputWidth=inst.input?inst.input.outerWidth():0;var inputHeight=inst.input?inst.input.outerHeight():0;var viewWidth=(window.innerWidth||document.documentElement.clientWidth||document.body.clientWidth)+$(document).scrollLeft();var viewHeight=(window.innerHeight||document.documentElement.clientHeight||document.body.clientHeight)+$(document).scrollTop();offset.left-=(this._get(inst,"isRTL")?(dpWidth-inputWidth):0);offset.left-=(isFixed&&offset.left==inst.input.offset().left)?$(document).scrollLeft():0;offset.top-=(isFixed&&offset.top==(inst.input.offset().top+inputHeight))?$(document).scrollTop():0;offset.left-=(offset.left+dpWidth>viewWidth&&viewWidth>dpWidth)?Math.abs(offset.left+dpWidth-viewWidth):0;offset.top-=(offset.top+dpHeight>viewHeight&&viewHeight>dpHeight)?Math.abs(offset.top+dpHeight+inputHeight*2-viewHeight):0;return offset},_findPos:function(obj){while(obj&&(obj.type=="hidden"||obj.nodeType!=1)){obj=obj.nextSibling}var position=$(obj).offset();return[position.left,position.top]},_hideDatepicker:function(input,duration){var inst=this._curInst;if(!inst||(input&&inst!=$.data(input,PROP_NAME))){return}if(inst.stayOpen){this._selectDate("#"+inst.id,this._formatDate(inst,inst.currentDay,inst.currentMonth,inst.currentYear))}inst.stayOpen=false;if(this._datepickerShowing){duration=(duration!=null?duration:this._get(inst,"duration"));var showAnim=this._get(inst,"showAnim");var postProcess=function(){$.datepicker._tidyDialog(inst)};if(duration!=""&&$.effects&&$.effects[showAnim]){inst.dpDiv.hide(showAnim,$.datepicker._get(inst,"showOptions"),duration,postProcess)}else{inst.dpDiv[(duration==""?"hide":(showAnim=="slideDown"?"slideUp":(showAnim=="fadeIn"?"fadeOut":"hide")))](duration,postProcess)}if(duration==""){this._tidyDialog(inst)}var onClose=this._get(inst,"onClose");if(onClose){onClose.apply((inst.input?inst.input[0]:null),[(inst.input?inst.input.val():""),inst])}this._datepickerShowing=false;this._lastInput=null;if(this._inDialog){this._dialogInput.css({position:"absolute",left:"0",top:"-100px"});if($.blockUI){$.unblockUI();$("body").append(this.dpDiv)}}this._inDialog=false}this._curInst=null},_tidyDialog:function(inst){inst.dpDiv.removeClass(this._dialogClass).unbind(".ui-datepicker-calendar")},_checkExternalClick:function(event){if(!$.datepicker._curInst){return}var $target=$(event.target);if(($target.parents("#"+$.datepicker._mainDivId).length==0)&&!$target.hasClass($.datepicker.markerClassName)&&!$target.hasClass($.datepicker._triggerClass)&&$.datepicker._datepickerShowing&&!($.datepicker._inDialog&&$.blockUI)){$.datepicker._hideDatepicker(null,"")}},_adjustDate:function(id,offset,period){var target=$(id);var inst=this._getInst(target[0]);if(this._isDisabledDatepicker(target[0])){return}this._adjustInstDate(inst,offset+(period=="M"?this._get(inst,"showCurrentAtPos"):0),period);this._updateDatepicker(inst)},_gotoToday:function(id){var target=$(id);var inst=this._getInst(target[0]);if(this._get(inst,"gotoCurrent")&&inst.currentDay){inst.selectedDay=inst.currentDay;inst.drawMonth=inst.selectedMonth=inst.currentMonth;inst.drawYear=inst.selectedYear=inst.currentYear}else{var date=new Date();inst.selectedDay=date.getDate();inst.drawMonth=inst.selectedMonth=date.getMonth();inst.drawYear=inst.selectedYear=date.getFullYear()}this._notifyChange(inst);this._adjustDate(target)},_selectMonthYear:function(id,select,period){var target=$(id);var inst=this._getInst(target[0]);inst._selectingMonthYear=false;inst["selected"+(period=="M"?"Month":"Year")]=inst["draw"+(period=="M"?"Month":"Year")]=parseInt(select.options[select.selectedIndex].value,10);this._notifyChange(inst);this._adjustDate(target)},_clickMonthYear:function(id){var target=$(id);var inst=this._getInst(target[0]);if(inst.input&&inst._selectingMonthYear&&!$.browser.msie){inst.input[0].focus()}inst._selectingMonthYear=!inst._selectingMonthYear},_selectDay:function(id,month,year,td){var target=$(id);if($(td).hasClass(this._unselectableClass)||this._isDisabledDatepicker(target[0])){return}var inst=this._getInst(target[0]);inst.selectedDay=inst.currentDay=$("a",td).html();inst.selectedMonth=inst.currentMonth=month;inst.selectedYear=inst.currentYear=year;if(inst.stayOpen){inst.endDay=inst.endMonth=inst.endYear=null}this._selectDate(id,this._formatDate(inst,inst.currentDay,inst.currentMonth,inst.currentYear));if(inst.stayOpen){inst.rangeStart=this._daylightSavingAdjust(new Date(inst.currentYear,inst.currentMonth,inst.currentDay));this._updateDatepicker(inst)}},_clearDate:function(id){var target=$(id);var inst=this._getInst(target[0]);inst.stayOpen=false;inst.endDay=inst.endMonth=inst.endYear=inst.rangeStart=null;this._selectDate(target,"")},_selectDate:function(id,dateStr){var target=$(id);var inst=this._getInst(target[0]);dateStr=(dateStr!=null?dateStr:this._formatDate(inst));if(inst.input){inst.input.val(dateStr)}this._updateAlternate(inst);var onSelect=this._get(inst,"onSelect");if(onSelect){onSelect.apply((inst.input?inst.input[0]:null),[dateStr,inst])}else{if(inst.input){inst.input.trigger("change")}}if(inst.inline){this._updateDatepicker(inst)}else{if(!inst.stayOpen){this._hideDatepicker(null,this._get(inst,"duration"));this._lastInput=inst.input[0];if(typeof(inst.input[0])!="object"){inst.input[0].focus()}this._lastInput=null}}},_updateAlternate:function(inst){var altField=this._get(inst,"altField");if(altField){var altFormat=this._get(inst,"altFormat")||this._get(inst,"dateFormat");var date=this._getDate(inst);dateStr=this.formatDate(altFormat,date,this._getFormatConfig(inst));$(altField).each(function(){$(this).val(dateStr)})}},noWeekends:function(date){var day=date.getDay();return[(day>0&&day<6),""]},iso8601Week:function(date){var checkDate=new Date(date.getFullYear(),date.getMonth(),date.getDate());var firstMon=new Date(checkDate.getFullYear(),1-1,4);var firstDay=firstMon.getDay()||7;firstMon.setDate(firstMon.getDate()+1-firstDay);if(firstDay<4&&checkDate<firstMon){checkDate.setDate(checkDate.getDate()-3);return $.datepicker.iso8601Week(checkDate)}else{if(checkDate>new Date(checkDate.getFullYear(),12-1,28)){firstDay=new Date(checkDate.getFullYear()+1,1-1,4).getDay()||7;if(firstDay>4&&(checkDate.getDay()||7)<firstDay-3){return 1}}}return Math.floor(((checkDate-firstMon)/86400000)/7)+1},parseDate:function(format,value,settings){if(format==null||value==null){throw"Invalid arguments"}value=(typeof value=="object"?value.toString():value+"");if(value==""){return null}var shortYearCutoff=(settings?settings.shortYearCutoff:null)||this._defaults.shortYearCutoff;var dayNamesShort=(settings?settings.dayNamesShort:null)||this._defaults.dayNamesShort;var dayNames=(settings?settings.dayNames:null)||this._defaults.dayNames;var monthNamesShort=(settings?settings.monthNamesShort:null)||this._defaults.monthNamesShort;var monthNames=(settings?settings.monthNames:null)||this._defaults.monthNames;var year=-1;var month=-1;var day=-1;var doy=-1;var literal=false;var lookAhead=function(match){var matches=(iFormat+1<format.length&&format.charAt(iFormat+1)==match);if(matches){iFormat++}return matches};var getNumber=function(match){lookAhead(match);var origSize=(match=="@"?14:(match=="y"?4:(match=="o"?3:2)));var size=origSize;var num=0;while(size>0&&iValue<value.length&&value.charAt(iValue)>="0"&&value.charAt(iValue)<="9"){num=num*10+parseInt(value.charAt(iValue++),10);size--}if(size==origSize){throw"Missing number at position "+iValue}return num};var getName=function(match,shortNames,longNames){var names=(lookAhead(match)?longNames:shortNames);var size=0;for(var j=0;j<names.length;j++){size=Math.max(size,names[j].length)}var name="";var iInit=iValue;while(size>0&&iValue<value.length){name+=value.charAt(iValue++);for(var i=0;i<names.length;i++){if(name==names[i]){return i+1}}size--}throw"Unknown name at position "+iInit};var checkLiteral=function(){if(value.charAt(iValue)!=format.charAt(iFormat)){throw"Unexpected literal at position "+iValue}iValue++};var iValue=0;for(var iFormat=0;iFormat<format.length;iFormat++){if(literal){if(format.charAt(iFormat)=="'"&&!lookAhead("'")){literal=false}else{checkLiteral()}}else{switch(format.charAt(iFormat)){case"d":day=getNumber("d");break;case"D":getName("D",dayNamesShort,dayNames);break;case"o":doy=getNumber("o");break;case"m":month=getNumber("m");break;case"M":month=getName("M",monthNamesShort,monthNames);break;case"y":year=getNumber("y");break;case"@":var date=new Date(getNumber("@"));year=date.getFullYear();month=date.getMonth()+1;day=date.getDate();break;case"'":if(lookAhead("'")){checkLiteral()}else{literal=true}break;default:checkLiteral()}}}if(year==-1){year=new Date().getFullYear()}else{if(year<100){year+=new Date().getFullYear()-new Date().getFullYear()%100+(year<=shortYearCutoff?0:-100)}}if(doy>-1){month=1;day=doy;do{var dim=this._getDaysInMonth(year,month-1);if(day<=dim){break}month++;day-=dim}while(true)}var date=this._daylightSavingAdjust(new Date(year,month-1,day));if(date.getFullYear()!=year||date.getMonth()+1!=month||date.getDate()!=day){throw"Invalid date"}return date},ATOM:"yy-mm-dd",COOKIE:"D, dd M yy",ISO_8601:"yy-mm-dd",RFC_822:"D, d M y",RFC_850:"DD, dd-M-y",RFC_1036:"D, d M y",RFC_1123:"D, d M yy",RFC_2822:"D, d M yy",RSS:"D, d M y",TIMESTAMP:"@",W3C:"yy-mm-dd",formatDate:function(format,date,settings){if(!date){return""}var dayNamesShort=(settings?settings.dayNamesShort:null)||this._defaults.dayNamesShort;var dayNames=(settings?settings.dayNames:null)||this._defaults.dayNames;var monthNamesShort=(settings?settings.monthNamesShort:null)||this._defaults.monthNamesShort;var monthNames=(settings?settings.monthNames:null)||this._defaults.monthNames;var lookAhead=function(match){var matches=(iFormat+1<format.length&&format.charAt(iFormat+1)==match);if(matches){iFormat++}return matches};var formatNumber=function(match,value,len){var num=""+value;if(lookAhead(match)){while(num.length<len){num="0"+num}}return num};var formatName=function(match,value,shortNames,longNames){return(lookAhead(match)?longNames[value]:shortNames[value])};var output="";var literal=false;if(date){for(var iFormat=0;iFormat<format.length;iFormat++){if(literal){if(format.charAt(iFormat)=="'"&&!lookAhead("'")){literal=false}else{output+=format.charAt(iFormat)}}else{switch(format.charAt(iFormat)){case"d":output+=formatNumber("d",date.getDate(),2);break;case"D":output+=formatName("D",date.getDay(),dayNamesShort,dayNames);break;case"o":var doy=date.getDate();for(var m=date.getMonth()-1;m>=0;m--){doy+=this._getDaysInMonth(date.getFullYear(),m)}output+=formatNumber("o",doy,3);break;case"m":output+=formatNumber("m",date.getMonth()+1,2);break;case"M":output+=formatName("M",date.getMonth(),monthNamesShort,monthNames);break;case"y":output+=(lookAhead("y")?date.getFullYear():(date.getYear()%100<10?"0":"")+date.getYear()%100);break;case"@":output+=date.getTime();break;case"'":if(lookAhead("'")){output+="'"}else{literal=true}break;default:output+=format.charAt(iFormat)}}}}return output},_possibleChars:function(format){var chars="";var literal=false;for(var iFormat=0;iFormat<format.length;iFormat++){if(literal){if(format.charAt(iFormat)=="'"&&!lookAhead("'")){literal=false}else{chars+=format.charAt(iFormat)}}else{switch(format.charAt(iFormat)){case"d":case"m":case"y":case"@":chars+="0123456789";break;case"D":case"M":return null;case"'":if(lookAhead("'")){chars+="'"}else{literal=true}break;default:chars+=format.charAt(iFormat)}}}return chars},_get:function(inst,name){return inst.settings[name]!==undefined?inst.settings[name]:this._defaults[name]},_setDateFromField:function(inst){var dateFormat=this._get(inst,"dateFormat");var dates=inst.input?inst.input.val():null;inst.endDay=inst.endMonth=inst.endYear=null;var date=defaultDate=this._getDefaultDate(inst);var settings=this._getFormatConfig(inst);try{date=this.parseDate(dateFormat,dates,settings)||defaultDate}catch(event){this.log(event);date=defaultDate}inst.selectedDay=date.getDate();inst.drawMonth=inst.selectedMonth=date.getMonth();inst.drawYear=inst.selectedYear=date.getFullYear();inst.currentDay=(dates?date.getDate():0);inst.currentMonth=(dates?date.getMonth():0);inst.currentYear=(dates?date.getFullYear():0);this._adjustInstDate(inst)},_getDefaultDate:function(inst){var date=this._determineDate(this._get(inst,"defaultDate"),new Date());var minDate=this._getMinMaxDate(inst,"min",true);var maxDate=this._getMinMaxDate(inst,"max");date=(minDate&&date<minDate?minDate:date);date=(maxDate&&date>maxDate?maxDate:date);return date},_determineDate:function(date,defaultDate){var offsetNumeric=function(offset){var date=new Date();date.setDate(date.getDate()+offset);return date};var offsetString=function(offset,getDaysInMonth){var date=new Date();var year=date.getFullYear();var month=date.getMonth();var day=date.getDate();var pattern=/([+-]?[0-9]+)\s*(d|D|w|W|m|M|y|Y)?/g;var matches=pattern.exec(offset);while(matches){switch(matches[2]||"d"){case"d":case"D":day+=parseInt(matches[1],10);break;case"w":case"W":day+=parseInt(matches[1],10)*7;break;case"m":case"M":month+=parseInt(matches[1],10);day=Math.min(day,getDaysInMonth(year,month));break;case"y":case"Y":year+=parseInt(matches[1],10);day=Math.min(day,getDaysInMonth(year,month));break}matches=pattern.exec(offset)}return new Date(year,month,day)};date=(date==null?defaultDate:(typeof date=="string"?offsetString(date,this._getDaysInMonth):(typeof date=="number"?(isNaN(date)?defaultDate:offsetNumeric(date)):date)));date=(date&&date.toString()=="Invalid Date"?defaultDate:date);if(date){date.setHours(0);date.setMinutes(0);date.setSeconds(0);date.setMilliseconds(0)}return this._daylightSavingAdjust(date)},_daylightSavingAdjust:function(date){if(!date){return null}date.setHours(date.getHours()>12?date.getHours()+2:0);return date},_setDate:function(inst,date,endDate){var clear=!(date);var origMonth=inst.selectedMonth;var origYear=inst.selectedYear;date=this._determineDate(date,new Date());inst.selectedDay=inst.currentDay=date.getDate();inst.drawMonth=inst.selectedMonth=inst.currentMonth=date.getMonth();inst.drawYear=inst.selectedYear=inst.currentYear=date.getFullYear();if(origMonth!=inst.selectedMonth||origYear!=inst.selectedYear){this._notifyChange(inst)}this._adjustInstDate(inst);if(inst.input){inst.input.val(clear?"":this._formatDate(inst))}},_getDate:function(inst){var startDate=(!inst.currentYear||(inst.input&&inst.input.val()=="")?null:this._daylightSavingAdjust(new Date(inst.currentYear,inst.currentMonth,inst.currentDay)));return startDate},_generateHTML:function(inst){var today=new Date();today=this._daylightSavingAdjust(new Date(today.getFullYear(),today.getMonth(),today.getDate()));var isRTL=this._get(inst,"isRTL");var showButtonPanel=this._get(inst,"showButtonPanel");var hideIfNoPrevNext=this._get(inst,"hideIfNoPrevNext");var navigationAsDateFormat=this._get(inst,"navigationAsDateFormat");var numMonths=this._getNumberOfMonths(inst);var showCurrentAtPos=this._get(inst,"showCurrentAtPos");var stepMonths=this._get(inst,"stepMonths");var stepBigMonths=this._get(inst,"stepBigMonths");var isMultiMonth=(numMonths[0]!=1||numMonths[1]!=1);var currentDate=this._daylightSavingAdjust((!inst.currentDay?new Date(9999,9,9):new Date(inst.currentYear,inst.currentMonth,inst.currentDay)));var minDate=this._getMinMaxDate(inst,"min",true);var maxDate=this._getMinMaxDate(inst,"max");var drawMonth=inst.drawMonth-showCurrentAtPos;var drawYear=inst.drawYear;if(drawMonth<0){drawMonth+=12;drawYear--}if(maxDate){var maxDraw=this._daylightSavingAdjust(new Date(maxDate.getFullYear(),maxDate.getMonth()-numMonths[1]+1,maxDate.getDate()));maxDraw=(minDate&&maxDraw<minDate?minDate:maxDraw);while(this._daylightSavingAdjust(new Date(drawYear,drawMonth,1))>maxDraw){drawMonth--;if(drawMonth<0){drawMonth=11;drawYear--}}}inst.drawMonth=drawMonth;inst.drawYear=drawYear;var prevText=this._get(inst,"prevText");prevText=(!navigationAsDateFormat?prevText:this.formatDate(prevText,this._daylightSavingAdjust(new Date(drawYear,drawMonth-stepMonths,1)),this._getFormatConfig(inst)));var prev=(this._canAdjustMonth(inst,-1,drawYear,drawMonth)?'<a class="ui-datepicker-prev ui-corner-all" onclick="DP_jQuery.datepicker._adjustDate(\'#'+inst.id+"', -"+stepMonths+", 'M');\" title=\""+prevText+'"><span class="ui-icon ui-icon-circle-triangle-'+(isRTL?"e":"w")+'">'+prevText+"</span></a>":(hideIfNoPrevNext?"":'<a class="ui-datepicker-prev ui-corner-all ui-state-disabled" title="'+prevText+'"><span class="ui-icon ui-icon-circle-triangle-'+(isRTL?"e":"w")+'">'+prevText+"</span></a>"));var nextText=this._get(inst,"nextText");nextText=(!navigationAsDateFormat?nextText:this.formatDate(nextText,this._daylightSavingAdjust(new Date(drawYear,drawMonth+stepMonths,1)),this._getFormatConfig(inst)));var next=(this._canAdjustMonth(inst,+1,drawYear,drawMonth)?'<a class="ui-datepicker-next ui-corner-all" onclick="DP_jQuery.datepicker._adjustDate(\'#'+inst.id+"', +"+stepMonths+", 'M');\" title=\""+nextText+'"><span class="ui-icon ui-icon-circle-triangle-'+(isRTL?"w":"e")+'">'+nextText+"</span></a>":(hideIfNoPrevNext?"":'<a class="ui-datepicker-next ui-corner-all ui-state-disabled" title="'+nextText+'"><span class="ui-icon ui-icon-circle-triangle-'+(isRTL?"w":"e")+'">'+nextText+"</span></a>"));var currentText=this._get(inst,"currentText");var gotoDate=(this._get(inst,"gotoCurrent")&&inst.currentDay?currentDate:today);currentText=(!navigationAsDateFormat?currentText:this.formatDate(currentText,gotoDate,this._getFormatConfig(inst)));var controls=(!inst.inline?'<button type="button" class="ui-datepicker-close ui-state-default ui-priority-primary ui-corner-all" onclick="DP_jQuery.datepicker._hideDatepicker();">'+this._get(inst,"closeText")+"</button>":"");var buttonPanel=(showButtonPanel)?'<div class="ui-datepicker-buttonpane ui-widget-content">'+(isRTL?controls:"")+(this._isInRange(inst,gotoDate)?'<button type="button" class="ui-datepicker-current ui-state-default ui-priority-secondary ui-corner-all" onclick="DP_jQuery.datepicker._gotoToday(\'#'+inst.id+"');\">"+currentText+"</button>":"")+(isRTL?"":controls)+"</div>":"";var firstDay=parseInt(this._get(inst,"firstDay"),10);firstDay=(isNaN(firstDay)?0:firstDay);var dayNames=this._get(inst,"dayNames");var dayNamesShort=this._get(inst,"dayNamesShort");var dayNamesMin=this._get(inst,"dayNamesMin");var monthNames=this._get(inst,"monthNames");var monthNamesShort=this._get(inst,"monthNamesShort");var beforeShowDay=this._get(inst,"beforeShowDay");var showOtherMonths=this._get(inst,"showOtherMonths");var calculateWeek=this._get(inst,"calculateWeek")||this.iso8601Week;var endDate=inst.endDay?this._daylightSavingAdjust(new Date(inst.endYear,inst.endMonth,inst.endDay)):currentDate;var defaultDate=this._getDefaultDate(inst);var html="";for(var row=0;row<numMonths[0];row++){var group="";for(var col=0;col<numMonths[1];col++){var selectedDate=this._daylightSavingAdjust(new Date(drawYear,drawMonth,inst.selectedDay));var cornerClass=" ui-corner-all";var calender="";if(isMultiMonth){calender+='<div class="ui-datepicker-group ui-datepicker-group-';switch(col){case 0:calender+="first";cornerClass=" ui-corner-"+(isRTL?"right":"left");break;case numMonths[1]-1:calender+="last";cornerClass=" ui-corner-"+(isRTL?"left":"right");break;default:calender+="middle";cornerClass="";break}calender+='">'}calender+='<div class="ui-datepicker-header ui-widget-header ui-helper-clearfix'+cornerClass+'">'+(/all|left/.test(cornerClass)&&row==0?(isRTL?next:prev):"")+(/all|right/.test(cornerClass)&&row==0?(isRTL?prev:next):"")+this._generateMonthYearHeader(inst,drawMonth,drawYear,minDate,maxDate,selectedDate,row>0||col>0,monthNames,monthNamesShort)+'</div><table class="ui-datepicker-calendar"><thead><tr>';var thead="";for(var dow=0;dow<7;dow++){var day=(dow+firstDay)%7;thead+="<th"+((dow+firstDay+6)%7>=5?' class="ui-datepicker-week-end"':"")+'><span title="'+dayNames[day]+'">'+dayNamesMin[day]+"</span></th>"}calender+=thead+"</tr></thead><tbody>";var daysInMonth=this._getDaysInMonth(drawYear,drawMonth);if(drawYear==inst.selectedYear&&drawMonth==inst.selectedMonth){inst.selectedDay=Math.min(inst.selectedDay,daysInMonth)}var leadDays=(this._getFirstDayOfMonth(drawYear,drawMonth)-firstDay+7)%7;var numRows=(isMultiMonth?6:Math.ceil((leadDays+daysInMonth)/7));var printDate=this._daylightSavingAdjust(new Date(drawYear,drawMonth,1-leadDays));for(var dRow=0;dRow<numRows;dRow++){calender+="<tr>";var tbody="";for(var dow=0;dow<7;dow++){var daySettings=(beforeShowDay?beforeShowDay.apply((inst.input?inst.input[0]:null),[printDate]):[true,""]);var otherMonth=(printDate.getMonth()!=drawMonth);var unselectable=otherMonth||!daySettings[0]||(minDate&&printDate<minDate)||(maxDate&&printDate>maxDate);tbody+='<td class="'+((dow+firstDay+6)%7>=5?" ui-datepicker-week-end":"")+(otherMonth?" ui-datepicker-other-month":"")+((printDate.getTime()==selectedDate.getTime()&&drawMonth==inst.selectedMonth&&inst._keyEvent)||(defaultDate.getTime()==printDate.getTime()&&defaultDate.getTime()==selectedDate.getTime())?" "+this._dayOverClass:"")+(unselectable?" "+this._unselectableClass+" ui-state-disabled":"")+(otherMonth&&!showOtherMonths?"":" "+daySettings[1]+(printDate.getTime()>=currentDate.getTime()&&printDate.getTime()<=endDate.getTime()?" "+this._currentClass:"")+(printDate.getTime()==today.getTime()?" ui-datepicker-today":""))+'"'+((!otherMonth||showOtherMonths)&&daySettings[2]?' title="'+daySettings[2]+'"':"")+(unselectable?"":" onclick=\"DP_jQuery.datepicker._selectDay('#"+inst.id+"',"+drawMonth+","+drawYear+', this);return false;"')+">"+(otherMonth?(showOtherMonths?printDate.getDate():" "):(unselectable?'<span class="ui-state-default">'+printDate.getDate()+"</span>":'<a class="ui-state-default'+(printDate.getTime()==today.getTime()?" ui-state-highlight":"")+(printDate.getTime()>=currentDate.getTime()&&printDate.getTime()<=endDate.getTime()?" ui-state-active":"")+'" href="#">'+printDate.getDate()+"</a>"))+"</td>";printDate.setDate(printDate.getDate()+1);printDate=this._daylightSavingAdjust(printDate)}calender+=tbody+"</tr>"}drawMonth++;if(drawMonth>11){drawMonth=0;drawYear++}calender+="</tbody></table>"+(isMultiMonth?"</div>"+((numMonths[0]>0&&col==numMonths[1]-1)?'<div class="ui-datepicker-row-break"></div>':""):"");group+=calender}html+=group}html+=buttonPanel+($.browser.msie&&parseInt($.browser.version,10)<7&&!inst.inline?'<iframe src="javascript:false;" class="ui-datepicker-cover" frameborder="0"></iframe>':"");inst._keyEvent=false;return html},_generateMonthYearHeader:function(inst,drawMonth,drawYear,minDate,maxDate,selectedDate,secondary,monthNames,monthNamesShort){minDate=(inst.rangeStart&&minDate&&selectedDate<minDate?selectedDate:minDate);var changeMonth=this._get(inst,"changeMonth");var changeYear=this._get(inst,"changeYear");var showMonthAfterYear=this._get(inst,"showMonthAfterYear");var html='<div class="ui-datepicker-title">';var monthHtml="";if(secondary||!changeMonth){monthHtml+='<span class="ui-datepicker-month">'+monthNames[drawMonth]+"</span> "}else{var inMinYear=(minDate&&minDate.getFullYear()==drawYear);var inMaxYear=(maxDate&&maxDate.getFullYear()==drawYear);monthHtml+='<select class="ui-datepicker-month" onchange="DP_jQuery.datepicker._selectMonthYear(\'#'+inst.id+"', this, 'M');\" onclick=\"DP_jQuery.datepicker._clickMonthYear('#"+inst.id+"');\">";for(var month=0;month<12;month++){if((!inMinYear||month>=minDate.getMonth())&&(!inMaxYear||month<=maxDate.getMonth())){monthHtml+='<option value="'+month+'"'+(month==drawMonth?' selected="selected"':"")+">"+monthNamesShort[month]+"</option>"}}monthHtml+="</select>"}if(!showMonthAfterYear){html+=monthHtml+((secondary||changeMonth||changeYear)&&(!(changeMonth&&changeYear))?" ":"")}if(secondary||!changeYear){html+='<span class="ui-datepicker-year">'+drawYear+"</span>"}else{var years=this._get(inst,"yearRange").split(":");var year=0;var endYear=0;if(years.length!=2){year=drawYear-10;endYear=drawYear+10}else{if(years[0].charAt(0)=="+"||years[0].charAt(0)=="-"){year=drawYear+parseInt(years[0],10);endYear=drawYear+parseInt(years[1],10)}else{year=parseInt(years[0],10);endYear=parseInt(years[1],10)}}year=(minDate?Math.max(year,minDate.getFullYear()):year);endYear=(maxDate?Math.min(endYear,maxDate.getFullYear()):endYear);html+='<select class="ui-datepicker-year" onchange="DP_jQuery.datepicker._selectMonthYear(\'#'+inst.id+"', this, 'Y');\" onclick=\"DP_jQuery.datepicker._clickMonthYear('#"+inst.id+"');\">";for(;year<=endYear;year++){html+='<option value="'+year+'"'+(year==drawYear?' selected="selected"':"")+">"+year+"</option>"}html+="</select>"}if(showMonthAfterYear){html+=(secondary||changeMonth||changeYear?" ":"")+monthHtml}html+="</div>";return html},_adjustInstDate:function(inst,offset,period){var year=inst.drawYear+(period=="Y"?offset:0);var month=inst.drawMonth+(period=="M"?offset:0);var day=Math.min(inst.selectedDay,this._getDaysInMonth(year,month))+(period=="D"?offset:0);var date=this._daylightSavingAdjust(new Date(year,month,day));var minDate=this._getMinMaxDate(inst,"min",true);var maxDate=this._getMinMaxDate(inst,"max");date=(minDate&&date<minDate?minDate:date);date=(maxDate&&date>maxDate?maxDate:date);inst.selectedDay=date.getDate();inst.drawMonth=inst.selectedMonth=date.getMonth();inst.drawYear=inst.selectedYear=date.getFullYear();if(period=="M"||period=="Y"){this._notifyChange(inst)}},_notifyChange:function(inst){var onChange=this._get(inst,"onChangeMonthYear");if(onChange){onChange.apply((inst.input?inst.input[0]:null),[inst.selectedYear,inst.selectedMonth+1,inst])}},_getNumberOfMonths:function(inst){var numMonths=this._get(inst,"numberOfMonths");return(numMonths==null?[1,1]:(typeof numMonths=="number"?[1,numMonths]:numMonths))},_getMinMaxDate:function(inst,minMax,checkRange){var date=this._determineDate(this._get(inst,minMax+"Date"),null);return(!checkRange||!inst.rangeStart?date:(!date||inst.rangeStart>date?inst.rangeStart:date))},_getDaysInMonth:function(year,month){return 32-new Date(year,month,32).getDate()},_getFirstDayOfMonth:function(year,month){return new Date(year,month,1).getDay()},_canAdjustMonth:function(inst,offset,curYear,curMonth){var numMonths=this._getNumberOfMonths(inst);var date=this._daylightSavingAdjust(new Date(curYear,curMonth+(offset<0?offset:numMonths[1]),1));if(offset<0){date.setDate(this._getDaysInMonth(date.getFullYear(),date.getMonth()))}return this._isInRange(inst,date)},_isInRange:function(inst,date){var newMinDate=(!inst.rangeStart?null:this._daylightSavingAdjust(new Date(inst.selectedYear,inst.selectedMonth,inst.selectedDay)));newMinDate=(newMinDate&&inst.rangeStart<newMinDate?inst.rangeStart:newMinDate);var minDate=newMinDate||this._getMinMaxDate(inst,"min");var maxDate=this._getMinMaxDate(inst,"max");return((!minDate||date>=minDate)&&(!maxDate||date<=maxDate))},_getFormatConfig:function(inst){var shortYearCutoff=this._get(inst,"shortYearCutoff");shortYearCutoff=(typeof shortYearCutoff!="string"?shortYearCutoff:new Date().getFullYear()%100+parseInt(shortYearCutoff,10));return{shortYearCutoff:shortYearCutoff,dayNamesShort:this._get(inst,"dayNamesShort"),dayNames:this._get(inst,"dayNames"),monthNamesShort:this._get(inst,"monthNamesShort"),monthNames:this._get(inst,"monthNames")}},_formatDate:function(inst,day,month,year){if(!day){inst.currentDay=inst.selectedDay;inst.currentMonth=inst.selectedMonth;inst.currentYear=inst.selectedYear}var date=(day?(typeof day=="object"?day:this._daylightSavingAdjust(new Date(year,month,day))):this._daylightSavingAdjust(new Date(inst.currentYear,inst.currentMonth,inst.currentDay)));return this.formatDate(this._get(inst,"dateFormat"),date,this._getFormatConfig(inst))}});function extendRemove(target,props){$.extend(target,props);for(var name in props){if(props[name]==null||props[name]==undefined){target[name]=props[name]}}return target}function isArray(a){return(a&&(($.browser.safari&&typeof a=="object"&&a.length)||(a.constructor&&a.constructor.toString().match(/\Array\(\)/))))}$.fn.datepicker=function(options){if(!$.datepicker.initialized){$(document).mousedown($.datepicker._checkExternalClick).find("body").append($.datepicker.dpDiv);$.datepicker.initialized=true}var otherArgs=Array.prototype.slice.call(arguments,1);if(typeof options=="string"&&(options=="isDisabled"||options=="getDate")){return $.datepicker["_"+options+"Datepicker"].apply($.datepicker,[this[0]].concat(otherArgs))}if(options=="option"&&arguments.length==2&&typeof arguments[1]=="string"){return $.datepicker["_"+options+"Datepicker"].apply($.datepicker,[this[0]].concat(otherArgs))}return this.each(function(){typeof options=="string"?$.datepicker["_"+options+"Datepicker"].apply($.datepicker,[this].concat(otherArgs)):$.datepicker._attachDatepicker(this,options)})};$.datepicker=new Datepicker();$.datepicker.initialized=false;$.datepicker.uuid=new Date().getTime();$.datepicker.version="1.7.2";window.DP_jQuery=$})(jQuery); \ No newline at end of file diff --git a/ui.datepicker.packed.js b/ui.datepicker.packed.js deleted file mode 100644 index 919cade2d..000000000 --- a/ui.datepicker.packed.js +++ /dev/null @@ -1,2 +0,0 @@ -eval(function(p,a,c,k,e,d){e=function(c){return(c<a?'':e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--)d[e(c)]=k[c]||e(c);k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--)if(k[c])p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c]);return p}('(p($){c 2T="f";p 3Z(){b.7P=E;b.3Q=t;b.2y=[];b.3l=E;b.2S=E;b.5W="v-f-I";b.6f="v-f-1c";b.6h="v-f-3v";b.2w="v-f-4o";b.5Y="v-f-af";b.5B="v-f-3I";b.6e="v-f-4u";b.5v="v-f-49";b.4G="v-f-4O-H";b.6k=[];b.6k[""]={76:"ae",77:"ad 3s 4O h",74:"7U",75:"7U ac 7j",2M:"m;ab",72:"3t 3s 7T F",2N:"m;m;",73:"3t 3s 7T B",2L:"aal;",71:"3t 3s 3H F",2K:"l;l;",70:"3t 3s 3H B",3f:"a9",6Z:"3t 3s 4O F",1n:["a8","a7","a6","a5","7S","a4","a3","a2","a1","a0","9Z","9Y"],1Z:["9X","9W","9V","9U","7S","9T","9S","9R","9Q","9P","9O","9N"],6K:"3t a 7R F",6D:"3t a 7R B",6X:"9M",4d:"9L 9K 3s B",1v:["9J","9I","9H","9G","9F","9E","9D"],1z:["9C","9B","9A","9z","9y","9x","9w"],4K:["9v","9u","9t","9s","9r","9q","9p"],4L:"9o 4g 9n 9m 2F H",3d:"7Q 4g, M d",2X:"4U/3J/3k",1B:0,Z:"7Q a h",1I:E};b.1D={3r:"2P",1V:"69",62:{},2e:t,4v:"",2W:"...",3X:"",7N:E,47:1d,5E:E,4h:E,2I:E,3g:E,5C:E,6L:1d,6H:1d,44:E,6G:"-10:+10",4f:1d,3D:E,2C:E,4e:E,4I:b.4M,1F:"+10",15:E,6Y:b.3d,R:t,T:t,1j:"9l",4c:t,4s:t,2Q:t,6C:t,4q:t,6B:1,4P:0,2r:1,2q:12,1K:E,4j:" - ",4n:"",3N:""};$.4x(b.1D,b.6k[""]);b.O=$(\'<I u="\'+b.5W+\'" 46="6a: 7t;"></I>\')}$.4x(3Z.6q,{29:"9k",5L:p(){k(b.7P){9j.5L.2k("",5d)}},9i:p(z){3x(b.1D,z||{});r b},6n:p(n,z){c 3Y=t;1l(59 6v b.1D){c 58=n.9h("h:"+59);k(58){3Y=3Y||{};5O{3Y[59]=9g(58)}5M(7x){3Y[59]=58}}}c 1a=n.1a.4t();c 1c=(1a=="I"||1a=="2H");k(!n.u){n.u="7F"+(++b.5a)}c 8=b.6i($(n),1c);8.z=$.4x({},z||{},3Y||{});k(1a=="q"){b.7O(n,8)}P{k(1c){b.7I(n,8)}}},6i:p(n,1c){c u=n[0].u.5y(/([:\\[\\]\\.])/g,"\\\\\\\\$1");r{u:u,q:n,1u:0,1m:0,1q:0,G:0,J:0,1c:1c,O:(!1c?b.O:$(\'<I 16="\'+b.6f+\'"></I>\'))}},7O:p(n,8){c q=$(n);k(q.2R(b.29)){r}c 4v=b.l(8,"4v");c 1I=b.l(8,"1I");k(4v){q[1I?"7K":"7J"](\'<2H 16="\'+b.6h+\'">\'+4v+"</2H>")}c 3r=b.l(8,"3r");k(3r=="2P"||3r=="4D"){q.2P(b.3U)}k(3r=="3W"||3r=="4D"){c 2W=b.l(8,"2W");c 3X=b.l(8,"3X");c 4o=$(b.l(8,"7N")?$("<56/>").2o(b.2w).7M({5s:3X,7L:2W,4b:2W}):$(\'<3W 4r="3W"></3W>\').2o(b.2w).V(3X==""?2W:$("<56/>").7M({5s:3X,7L:2W,4b:2W})));q[1I?"7K":"7J"](4o);4o.9f(p(){k($.f.3l&&$.f.3O==n){$.f.2s()}P{$.f.3U(n)}r E})}q.2o(b.29).6g(b.54).7C(b.6d).57("7H.f",p(3P,2V,K){8.z[2V]=K}).57("7G.f",p(3P,2V){r b.l(8,2V)});$.3n(n,2T,8)},7I:p(n,8){c 6j=$(n);k(6j.2R(b.29)){r}6j.2o(b.29).3v(8.O).57("7H.f",p(3P,2V,K){8.z[2V]=K}).57("7G.f",p(3P,2V){r b.l(8,2V)});$.3n(n,2T,8);b.5G(8,b.5K(8));b.26(8)},9e:p(8){c 1i=b.3z(8);8.O.1E(1i[1]*$(".v-f",8.O[0]).1E())},9d:p(q,7D,2Q,z,2x){c 8=b.7E;k(!8){c u="7F"+(++b.5a);b.2g=$(\'<q 4r="5l" u="\'+u+\'" 2f="1" 46="1T: 4Z; 1x: -7m;"/>\');b.2g.6g(b.54);$("2l").3v(b.2g);8=b.7E=b.6i(b.2g,E);8.z={};$.3n(b.2g[0],2T,8)}3x(8.z,z||{});b.2g.3i(7D);b.1O=(2x?(2x.1f?2x:[2x.9c,2x.9b]):t);k(!b.1O){c 52=53.7o||1e.1W.67||1e.2l.67;c 51=53.7n||1e.1W.66||1e.2l.66;c 3q=1e.1W.3T||1e.2l.3T;c 3p=1e.1W.3S||1e.2l.3S;b.1O=[(52/2)-2Z+3q,(51/2)-9a+3p]}b.2g.2a("1N",b.1O[0]+"2U").2a("1x",b.1O[1]+"2U");8.z.2Q=2Q;b.2S=1d;b.O.2o(b.5Y);b.3U(b.2g[0]);k($.4p){$.4p(b.O)}$.3n(b.2g[0],2T,8);r b},99:p(n){c $n=$(n);k(!$n.2R(b.29)){r}c 1a=n.1a.4t();$.98(n,2T);k(1a=="q"){$n.3V("."+b.6h).3R().3F().3V("."+b.2w).3R().3F().3b(b.29).4Y("2P",b.3U).4Y("6g",b.54).4Y("7C",b.6d)}P{k(1a=="I"||1a=="2H"){$n.3b(b.29).7s()}}},97:p(n){c $n=$(n);k(!$n.2R(b.29)){r}c 1a=n.1a.4t();k(1a=="q"){n.4u=E;$n.3V("3W."+b.2w).3u(p(){b.4u=E}).3F().3V("56."+b.2w).2a({7B:"1.0",7A:""})}P{k(1a=="I"||1a=="2H"){$n.7z("."+b.6e).3R()}}b.2y=$.7y(b.2y,p(K){r(K==n?t:K)})},96:p(n){c $n=$(n);k(!$n.2R(b.29)){r}c 1a=n.1a.4t();k(1a=="q"){n.4u=1d;$n.3V("3W."+b.2w).3u(p(){b.4u=1d}).3F().3V("56."+b.2w).2a({7B:"0.5",7A:"4l"})}P{k(1a=="I"||1a=="2H"){c 1c=$n.7z("."+b.6f);c L=1c.L();c 55={1N:0,1x:0};1c.5X().3u(p(){k($(b).2a("1T")=="95"){55=$(b).L();r E}});$n.94(\'<I 16="\'+b.6e+\'" 46="\'+($.2c.4C?"93-92: 91; ":"")+"1E: "+1c.1E()+"2U; 2h: "+1c.2h()+"2U; 1N: "+(L.1N-55.1N)+"2U; 1x: "+(L.1x-55.1x)+\'2U;"></I>\')}}b.2y=$.7y(b.2y,p(K){r(K==n?t:K)});b.2y[b.2y.1f]=n},7v:p(n){k(!n){r E}1l(c i=0;i<b.2y.1f;i++){k(b.2y[i]==n){r 1d}}r E},1r:p(n){5O{r $.3n(n,2T)}5M(7x){3K"7i 90 3n 1l b f"}},8Z:p(n,1k,K){c z=1k||{};k(1X 1k=="41"){z={};z[1k]=K}c 8=b.1r(n);k(8){k(b.3Q==8){b.2s(t)}3x(8.z,z);c h=x A();3x(8,{1g:t,1Q:t,24:t,19:t,1u:h.S(),1m:h.X(),1q:h.Q(),1h:h.S(),1t:h.X(),1p:h.Q(),G:h.X(),J:h.Q()});b.26(8)}},8Y:p(n){c 8=b.1r(n);k(8){b.26(8)}},8X:p(n,h,23){c 8=b.1r(n);k(8){b.5G(8,h,23);b.26(8);b.5V(8)}},8W:p(n){c 8=b.1r(n);k(8&&!8.1c){b.5P(8)}r(8?b.5F(8):t)},54:p(e){c 8=$.f.1r(e.n);c 2i=1d;k($.f.3l){4k(e.6c){C 9:$.f.2s(t,"");N;C 13:$.f.5u(e.n,8.1m,8.1q,$("1A.v-f-3E-3c-2E",8.O)[0]);r E;N;C 27:$.f.2s(t,$.f.l(8,"1j"));N;C 33:$.f.1J(e.n,(e.1s?-$.f.l(8,"2q"):-$.f.l(8,"2r")),"M");N;C 34:$.f.1J(e.n,(e.1s?+$.f.l(8,"2q"):+$.f.l(8,"2r")),"M");N;C 35:k(e.1s){$.f.5D(e.n)}2i=e.1s;N;C 36:k(e.1s){$.f.5z(e.n)}2i=e.1s;N;C 37:k(e.1s){$.f.1J(e.n,-1,"D")}2i=e.1s;N;C 38:k(e.1s){$.f.1J(e.n,-7,"D")}2i=e.1s;N;C 39:k(e.1s){$.f.1J(e.n,+1,"D")}2i=e.1s;N;C 40:k(e.1s){$.f.1J(e.n,+7,"D")}2i=e.1s;N;4l:2i=E}}P{k(e.6c==36&&e.1s){$.f.3U(b)}P{2i=E}}k(2i){e.8V();e.8U()}},6d:p(e){c 8=$.f.1r(e.n);c 2t=$.f.7e($.f.l(8,"2X"));c 6b=8T.8S(e.7w==5f?e.6c:e.7w);r e.1s||(6b<" "||!2t||2t.6W(6b)>-1)},3U:p(q){q=q.n||q;k(q.1a.4t()!="q"){q=$("q",q.8R)[0]}k($.f.7v(q)||$.f.3O==q){r}c 8=$.f.1r(q);c 4s=$.f.l(8,"4s");3x(8.z,(4s?4s.2k(q,[q,8]):{}));$.f.2s(t,"");$.f.3O=q;$.f.5P(8);k($.f.2S){q.K=""}k(!$.f.1O){$.f.1O=$.f.64(q);$.f.1O[1]+=q.8Q}c 1y=E;$(q).5X().3u(p(){1y|=$(b).2a("1T")=="7u";r!1y});k(1y&&$.2c.65){$.f.1O[0]-=1e.1W.3T;$.f.1O[1]-=1e.1W.3S}c L={1N:$.f.1O[0],1x:$.f.1O[1]};$.f.1O=t;8.1g=t;8.O.2a({1T:"4Z",6a:"8P",1x:"-8O"});$.f.26(8);8.O.1E($.f.3z(8)[1]*$(".v-f",8.O[0])[0].8N);L=$.f.7p(8,L,1y);8.O.2a({1T:($.f.2S&&$.4p?"8M":(1y?"7u":"4Z")),6a:"7t",1N:L.1N+"2U",1x:L.1x+"2U"});k(!8.1c){c 1V=$.f.l(8,"1V")||"69";c 1j=$.f.l(8,"1j");c 3m=p(){$.f.3l=1d;k($.2c.4C&&1G($.2c.6N,10)<7){$("4B.v-f-5r").2a({1E:8.O.1E()+4,2h:8.O.2h()+4})}};k($.50&&$.50[1V]){8.O.69(1V,$.f.l(8,"62"),1j,3m)}P{8.O[1V](1j,3m)}k(1j==""){3m()}k(8.q[0].4r!="63"){8.q[0].2P()}$.f.3Q=8}},26:p(8){c 68={1E:8.O.1E()+4,2h:8.O.2h()+4};8.O.7s().3v(b.78(8)).8L("4B.v-f-5r").2a({1E:68.1E,2h:68.2h});c 1i=b.3z(8);8.O[(1i[0]!=1||1i[1]!=1?"7r":"3R")+"7q"]("v-f-8K");8.O[(b.l(8,"1I")?"7r":"3R")+"7q"]("v-f-8J");k(8.q&&8.q[0].4r!="63"){$(8.q[0]).2P()}},7p:p(8,L,1y){c 2x=8.q?b.64(8.q[0]):t;c 52=53.7o||1e.1W.67;c 51=53.7n||1e.1W.66;c 3q=1e.1W.3T||1e.2l.3T;c 3p=1e.1W.3S||1e.2l.3S;k(b.l(8,"1I")||(L.1N+8.O.1E()-3q)>52){L.1N=21.2z((1y?0:3q),2x[0]+(8.q?8.q.1E():0)-(1y?3q:0)-8.O.1E()-(1y&&$.2c.65?1e.1W.3T:0))}P{L.1N-=(1y?3q:0)}k((L.1x+8.O.2h()-3p)>51){L.1x=21.2z((1y?0:3p),2x[1]-(1y?3p:0)-(b.2S?0:8.O.2h())-(1y&&$.2c.65?1e.1W.3S:0))}P{L.1x-=(1y?3p:0)}r L},64:p(3o){3h(3o&&(3o.4r=="63"||3o.8I!=1)){3o=3o.8H}c 1T=$(3o).L();r[1T.1N,1T.1x]},2s:p(q,1j){c 8=b.3Q;k(!8||(q&&8!=$.3n(q,2T))){r}c 1K=b.l(8,"1K");k(1K&&8.2v){b.4W("#"+8.u,b.2Y(8,8.1h,8.1t,8.1p))}8.2v=E;k(b.3l){1j=(1j!=t?1j:b.l(8,"1j"));c 1V=b.l(8,"1V");c 3m=p(){$.f.5Z(8)};k(1j!=""&&$.50&&$.50[1V]){8.O.61(1V,$.f.l(8,"62"),1j,3m)}P{8.O[(1j==""?"61":(1V=="8G"?"8F":(1V=="8E"?"8D":"61")))](1j,3m)}k(1j==""){b.5Z(8)}c 4q=b.l(8,"4q");k(4q){4q.2k((8.q?8.q[0]:t),[(8.q?8.q.3i():""),8])}b.3l=E;b.3O=t;8.z.3I=t;k(b.2S){b.2g.2a({1T:"4Z",1N:"0",1x:"-7m"});k($.4p){$.8C();$("2l").3v(b.O)}}b.2S=E}b.3Q=t},5Z:p(8){8.O.3b(b.5Y).4Y(".v-f");$("."+b.5B,8.O).3R()},6s:p(3P){k(!$.f.3Q){r}c $n=$(3P.n);k(($n.5X("#"+$.f.5W).1f==0)&&!$n.2R($.f.29)&&!$n.2R($.f.2w)&&$.f.3l&&!($.f.2S&&$.4p)){$.f.2s(t,"")}},1J:p(u,L,20){c n=$(u);c 8=b.1r(n[0]);b.4z(8,L,20);b.26(8)},5z:p(u){c n=$(u);c 8=b.1r(n[0]);k(b.l(8,"5C")&&8.1h){8.1u=8.1h;8.G=8.1m=8.1t;8.J=8.1q=8.1p}P{c h=x A();8.1u=h.S();8.G=8.1m=h.X();8.J=8.1q=h.Q()}b.43(8);b.1J(n)},5o:p(u,3a,20){c n=$(u);c 8=b.1r(n[0]);8.4X=E;8["45"+(20=="M"?"7l":"7k")]=8["8B"+(20=="M"?"7l":"7k")]=1G(3a.2j[3a.8A].K,10);b.43(8);b.1J(n)},5n:p(u){c n=$(u);c 8=b.1r(n[0]);k(8.q&&8.4X&&!$.2c.4C){8.q[0].2P()}8.4X=!8.4X},6V:p(u,H){c n=$(u);c 8=b.1r(n[0]);8.z.1B=H;b.26(8)},5u:p(u,F,B,1A){k($(1A).2R(b.5v)){r}c n=$(u);c 8=b.1r(n[0]);c 1K=b.l(8,"1K");k(1K){8.2v=!8.2v;k(8.2v){$(".v-f 1A",8.O).3b(b.4G);$(1A).2o(b.4G)}}8.1u=8.1h=$("a",1A).V();8.1m=8.1t=F;8.1q=8.1p=B;k(8.2v){8.1Q=8.24=8.19=t}P{k(1K){8.1Q=8.1h;8.24=8.1t;8.19=8.1p}}b.4W(u,b.2Y(8,8.1h,8.1t,8.1p));k(8.2v){8.1g=x A(8.1p,8.1t,8.1h);b.26(8)}P{k(1K){8.1u=8.1h=8.1g.S();8.1m=8.1t=8.1g.X();8.1q=8.1p=8.1g.Q();8.1g=t;k(8.1c){b.26(8)}}}},5D:p(u){c n=$(u);c 8=b.1r(n[0]);k(b.l(8,"5E")){r}8.2v=E;8.1Q=8.24=8.19=8.1g=t;b.4W(n,"")},4W:p(u,1U){c n=$(u);c 8=b.1r(n[0]);1U=(1U!=t?1U:b.2Y(8));k(b.l(8,"1K")&&1U){1U=(8.1g?b.2Y(8,8.1g):1U)+b.l(8,"4j")+1U}k(8.q){8.q.3i(1U)}b.5V(8);c 2Q=b.l(8,"2Q");k(2Q){2Q.2k((8.q?8.q[0]:t),[1U,8])}P{k(8.q){8.q.4o("7j")}}k(8.1c){b.26(8)}P{k(!8.2v){b.2s(t,b.l(8,"1j"));b.3O=8.q[0];k(1X(8.q[0])!="4w"){8.q[0].2P()}b.3O=t}}},5V:p(8){c 4n=b.l(8,"4n");k(4n){c 3N=b.l(8,"3N");c h=b.5F(8);1U=(6u(h)?(!h[0]&&!h[1]?"":b.1Y(3N,h[0],b.1P(8))+b.l(8,"4j")+b.1Y(3N,h[1]||h[0],b.1P(8))):b.1Y(3N,h,b.1P(8)));$(4n).3u(p(){$(b).3i(1U)})}},8z:p(h){c H=h.3A();r[(H>0&&H<6),""]},4M:p(h){c 25=x A(h.Q(),h.X(),h.S(),(h.8y()/-60));c 3M=x A(25.Q(),1-1,4);c 1B=3M.3A()||7;3M.4y(3M.S()+1-1B);k(1B<4&&25<3M){25.4y(25.S()-3);r $.f.4M(25)}P{k(25>x A(25.Q(),12-1,28)){1B=x A(25.Q()+1,1-1,4).3A()||7;k(1B>4&&(25.3A()||7)<1B-3){r 1}}}r 21.8x(((25-3M)/8w)/7)+1},3d:p(h,8){r $.f.1Y($.f.l(8,"3d"),h,$.f.1P(8))},5N:p(18,K,z){k(18==t||K==t){3K"5H 5d"}K=(1X K=="4w"?K.5e():K+"");k(K==""){r t}c 1F=(z?z.1F:t)||b.1D.1F;c 1z=(z?z.1z:t)||b.1D.1z;c 1v=(z?z.1v:t)||b.1D.1v;c 1Z=(z?z.1Z:t)||b.1D.1Z;c 1n=(z?z.1n:t)||b.1D.1n;c B=-1;c F=-1;c H=-1;c 3j=-1;c 1L=E;c 1M=p(1o){c 1C=(U+1<18.1f&&18.1b(U+1)==1o);k(1C){U++}r 1C};c 3L=p(1o){1M(1o);c 5U=(1o=="@"?14:(1o=="y"?4:(1o=="o"?3:2)));c 2f=5U;c 2u=0;3h(2f>0&&1S<K.1f&&K.1b(1S)>="0"&&K.1b(1S)<="9"){2u=2u*10+1G(K.1b(1S++),10);2f--}k(2f==5U){3K"7i 5i 5T 1T "+1S}r 2u};c 5S=p(1o,4S,4T){c 4m=(1M(1o)?4T:4S);c 2f=0;1l(c j=0;j<4m.1f;j++){2f=21.2z(2f,4m[j].1f)}c 1k="";c 7h=1S;3h(2f>0&&1S<K.1f){1k+=K.1b(1S++);1l(c i=0;i<4m.1f;i++){k(1k==4m[i]){r i+1}}2f--}3K"8v 1k 5T 1T "+7h};c 4V=p(){k(K.1b(1S)!=18.1b(U)){3K"8u 1L 5T 1T "+1S}1S++};c 1S=0;1l(c U=0;U<18.1f;U++){k(1L){k(18.1b(U)=="\'"&&!1M("\'")){1L=E}P{4V()}}P{4k(18.1b(U)){C"d":H=3L("d");N;C"D":5S("D",1z,1v);N;C"o":3j=3L("o");N;C"m":F=3L("m");N;C"M":F=5S("M",1Z,1n);N;C"y":B=3L("y");N;C"@":c h=x A(3L("@"));B=h.Q();F=h.X()+1;H=h.S();N;C"\'":k(1M("\'")){4V()}P{1L=1d}N;4l:4V()}}}k(B<2Z){B+=x A().Q()-x A().Q()%2Z+(B<=1F?0:-2Z)}k(3j>-1){F=1;H=3j;8t{c 5R=b.30(B,F-1);k(H<=5R){N}F++;H-=5R}3h(1d)}c h=x A(B,F-1,H);k(h.Q()!=B||h.X()+1!=F||h.S()!=H){3K"5H h"}r h},8s:"3k-4U-3J",8r:"D, 3J M 3k",8q:"3k-4U-3J",8p:"D, d M y",8o:"4g, 3J-M-y",8n:"D, d M y",8m:"D, d M 3k",8l:"D, d M 3k",8k:"D, d M y",8j:"@",8i:"3k-4U-3J",1Y:p(18,h,z){k(!h){r""}c 1z=(z?z.1z:t)||b.1D.1z;c 1v=(z?z.1v:t)||b.1D.1v;c 1Z=(z?z.1Z:t)||b.1D.1Z;c 1n=(z?z.1n:t)||b.1D.1n;c 1M=p(1o){c 1C=(U+1<18.1f&&18.1b(U+1)==1o);k(1C){U++}r 1C};c 4R=p(1o,K,7g){c 2u=""+K;k(1M(1o)){3h(2u.1f<7g){2u="0"+2u}}r 2u};c 5Q=p(1o,K,4S,4T){r(1M(1o)?4T[K]:4S[K])};c 1R="";c 1L=E;k(h){1l(c U=0;U<18.1f;U++){k(1L){k(18.1b(U)=="\'"&&!1M("\'")){1L=E}P{1R+=18.1b(U)}}P{4k(18.1b(U)){C"d":1R+=4R("d",h.S(),2);N;C"D":1R+=5Q("D",h.3A(),1z,1v);N;C"o":c 3j=h.S();1l(c m=h.X()-1;m>=0;m--){3j+=b.30(h.Q(),m)}1R+=4R("o",3j,3);N;C"m":1R+=4R("m",h.X()+1,2);N;C"M":1R+=5Q("M",h.X(),1Z,1n);N;C"y":1R+=(1M("y")?h.Q():(h.7f()%2Z<10?"0":"")+h.7f()%2Z);N;C"@":1R+=h.2b();N;C"\'":k(1M("\'")){1R+="\'"}P{1L=1d}N;4l:1R+=18.1b(U)}}}}r 1R},7e:p(18){c 2t="";c 1L=E;1l(c U=0;U<18.1f;U++){k(1L){k(18.1b(U)=="\'"&&!1M("\'")){1L=E}P{2t+=18.1b(U)}}P{4k(18.1b(U)){C"d":C"m":C"y":C"@":2t+="8h";N;C"D":C"M":r t;C"\'":k(1M("\'")){2t+="\'"}P{1L=1d}N;4l:2t+=18.1b(U)}}}r 2t},l:p(8,1k){r 8.z[1k]!==5f?8.z[1k]:b.1D[1k]},5P:p(8){c 2X=b.l(8,"2X");c 2O=8.q?8.q.3i().6F(b.l(8,"4j")):t;8.1Q=8.24=8.19=t;c h=2e=b.5K(8);k(2O.1f>0){c z=b.1P(8);k(2O.1f>1){h=b.5N(2X,2O[1],z)||2e;8.1Q=h.S();8.24=h.X();8.19=h.Q()}5O{h=b.5N(2X,2O[0],z)||2e}5M(e){b.5L(e);h=2e}}8.1u=h.S();8.G=8.1m=h.X();8.J=8.1q=h.Q();8.1h=(2O[0]?h.S():0);8.1t=(2O[0]?h.X():0);8.1p=(2O[0]?h.Q():0);b.4z(8)},5K:p(8){c h=b.42(b.l(8,"2e"),x A());c R=b.2m(8,"2n",1d);c T=b.2m(8,"2z");h=(R&&h<R?R:h);h=(T&&h>T?T:h);r h},42:p(h,2e){c 7b=p(L){c h=x A();h.6R(h.6Q()+L);r h};c 7c=p(L,5J){c h=x A();c B=h.Q();c F=h.X();c H=h.S();c 5I=/([+-]?[0-9]+)\\s*(d|D|w|W|m|M|y|Y)?/g;c 1C=5I.7d(L);3h(1C){4k(1C[2]||"d"){C"d":C"D":H+=1G(1C[1],10);N;C"w":C"W":H+=1G(1C[1],10)*7;N;C"m":C"M":F+=1G(1C[1],10);H=21.2n(H,5J(B,F));N;C"y":C"Y":B+=1G(1C[1],10);H=21.2n(H,5J(B,F));N}1C=5I.7d(L)}r x A(B,F,H)};h=(h==t?2e:(1X h=="41"?7c(h,b.30):(1X h=="5i"?(8g(h)?2e:7b(h)):h)));r(h&&h.5e()=="5H A"?2e:h)},5G:p(8,h,23){c 2B=!(h);c 7a=8.1m;c 79=8.1q;h=b.42(h,x A());8.1u=8.1h=h.S();8.G=8.1m=8.1t=h.X();8.J=8.1q=8.1p=h.Q();k(b.l(8,"1K")){k(23){23=b.42(23,t);8.1Q=23.S();8.24=23.X();8.19=23.Q()}P{8.1Q=8.1h;8.24=8.1t;8.19=8.1p}}k(7a!=8.1m||79!=8.1q){b.43(8)}b.4z(8);k(8.q){8.q.3i(2B?"":b.2Y(8)+(!b.l(8,"1K")?"":b.l(8,"4j")+b.2Y(8,8.1Q,8.24,8.19)))}},5F:p(8){c 4Q=(!8.1p||(8.q&&8.q.3i()=="")?t:x A(8.1p,8.1t,8.1h));k(b.l(8,"1K")){r[8.1g||4Q,(!8.19?8.1g||4Q:x A(8.19,8.24,8.1Q))]}P{r 4Q}},78:p(8){c 2G=x A();2G=x A(2G.Q(),2G.X(),2G.S());c 15=b.l(8,"15");c Z=b.l(8,"Z")||"q;";c 1I=b.l(8,"1I");c 2B=(b.l(8,"5E")?"":\'<I 16="v-f-2B"><a 22="17.f.5D(\\\'#\'+8.u+"\');\\""+b.1H(15,8.u,b.l(8,"77"),Z)+">"+b.l(8,"76")+"</a></I>");c 5t=\'<I 16="v-f-8f">\'+(1I?"":2B)+\'<I 16="v-f-8e"><a 22="17.f.2s();"\'+b.1H(15,8.u,b.l(8,"75"),Z)+">"+b.l(8,"74")+"</a></I>"+(1I?2B:"")+"</I>";c 3I=b.l(8,"3I");c 47=b.l(8,"47");c 4h=b.l(8,"4h");c 2I=b.l(8,"2I");c 3g=b.l(8,"3g");c 1i=b.3z(8);c 4P=b.l(8,"4P");c 2r=b.l(8,"2r");c 2q=b.l(8,"2q");c 6T=(1i[0]!=1||1i[1]!=1);c 4H=(!8.1h?x A(8d,9,9):x A(8.1p,8.1t,8.1h));c R=b.2m(8,"2n",1d);c T=b.2m(8,"2z");c G=8.G-4P;c J=8.J;k(G<0){G+=12;J--}k(T){c 4i=x A(T.Q(),T.X()-1i[1]+1,T.S());4i=(R&&4i<R?R:4i);3h(x A(J,G,1)>4i){G--;k(G<0){G=11;J--}}}c 2M=b.l(8,"2M");2M=(!2I?2M:b.1Y(2M,x A(J,G-2r,1),b.1P(8)));c 2N=(3g?b.l(8,"2N"):"");2N=(!2I?2N:b.1Y(2N,x A(J,G-2q,1),b.1P(8)));c 4N=\'<I 16="v-f-4N">\'+(b.5h(8,-1,J,G)?(3g?"<a 22=\\"17.f.1J(\'#"+8.u+"\', -"+2q+", \'M\');\\""+b.1H(15,8.u,b.l(8,"73"),Z)+">"+2N+"</a>":"")+"<a 22=\\"17.f.1J(\'#"+8.u+"\', -"+2r+", \'M\');\\""+b.1H(15,8.u,b.l(8,"72"),Z)+">"+2M+"</a>":(4h?"":"<2J>"+2N+"</2J><2J>"+2M+"</2J>"))+"</I>";c 2L=b.l(8,"2L");2L=(!2I?2L:b.1Y(2L,x A(J,G+2r,1),b.1P(8)));c 2K=(3g?b.l(8,"2K"):"");2K=(!2I?2K:b.1Y(2K,x A(J,G+2q,1),b.1P(8)));c 3H=\'<I 16="v-f-3H">\'+(b.5h(8,+1,J,G)?"<a 22=\\"17.f.1J(\'#"+8.u+"\', +"+2r+", \'M\');\\""+b.1H(15,8.u,b.l(8,"71"),Z)+">"+2L+"</a>"+(3g?"<a 22=\\"17.f.1J(\'#"+8.u+"\', +"+2q+", \'M\');\\""+b.1H(15,8.u,b.l(8,"70"),Z)+">"+2K+"</a>":""):(4h?"":"<2J>"+2L+"</2J><2J>"+2K+"</2J>"))+"</I>";c 3f=b.l(8,"3f");c 5A=(b.l(8,"5C")&&8.1h?4H:2G);3f=(!2I?3f:b.1Y(3f,5A,b.1P(8)));c V=(3I?\'<I 16="\'+b.5B+\'">\'+3I+"</I>":"")+(47&&!8.1c?5t:"")+\'<I 16="v-f-8c">\'+(1I?3H:4N)+(b.5g(8,5A)?\'<I 16="v-f-4O"><a 22="17.f.5z(\\\'#\'+8.u+"\');\\""+b.1H(15,8.u,b.l(8,"6Z"),Z)+">"+3f+"</a></I>":"")+(1I?4N:3H)+"</I>";c 1B=b.l(8,"1B");c 4f=b.l(8,"4f");c 1v=b.l(8,"1v");c 1z=b.l(8,"1z");c 4K=b.l(8,"4K");c 1n=b.l(8,"1n");c 4c=b.l(8,"4c");c 3D=b.l(8,"3D");c 2C=b.l(8,"2C");c 4e=b.l(8,"4e");c 4I=b.l(8,"4I")||b.4M;c 4d=b.l(8,"4d");c 2d=(15?b.l(8,"4L")||Z:"");c 3d=b.l(8,"6Y")||b.3d;c 23=8.1Q?x A(8.19,8.24,8.1Q):4H;1l(c 3e=0;3e<1i[0];3e++){1l(c 3G=0;3G<1i[1];3G++){c 3B=x A(J,G,8.1u);V+=\'<I 16="v-f-8b-F\'+(3G==0?" v-f-x-3e":"")+\'">\'+b.6M(8,G,J,R,T,3B,3e>0||3G>0,15,Z,1n)+\'<6O 16="v-f" 8a="0" 89="0"><6U><4E 16="v-f-4b-3e">\'+(4e?"<1A"+b.1H(15,8.u,4d,Z)+">"+b.l(8,"6X")+"</1A>":"");1l(c 2p=0;2p<7;2p++){c H=(2p+1B)%7;c 4L=(2d.6W("4g")>-1?2d.5y(/4g/,1v[H]):2d.5y(/D/,1z[H]));V+="<1A"+((2p+1B+6)%7>=5?\' 16="v-f-2F-3F-3c"\':"")+">"+(!4f?"<2H":"<a 22=\\"17.f.6V(\'#"+8.u+"\', "+H+\');"\')+b.1H(15,8.u,4L,Z)+\' 4b="\'+1v[H]+\'">\'+4K[H]+(4f?"</a>":"</2H>")+"</1A>"}V+="</4E></6U><6P>";c 5x=b.30(J,G);k(J==8.1q&&G==8.1m){8.1u=21.2n(8.1u,5x)}c 4J=(b.6y(J,G)-1B+7)%7;c 48=x A(J,G,1-4J);c 3C=x A(J,G,1-4J);c 1w=3C;c 6S=(6T?6:21.88((4J+5x)/7));1l(c 5w=0;5w<6S;5w++){V+=\'<4E 16="v-f-3E-3e">\'+(4e?\'<1A 16="v-f-2F-3G"\'+b.1H(15,8.u,4d,Z)+">"+4I(1w)+"</1A>":"");1l(c 2p=0;2p<7;2p++){c 4a=(4c?4c.2k((8.q?8.q[0]:t),[1w]):[1d,""]);c 2D=(1w.X()!=G);c 49=2D||!4a[0]||(R&&1w<R)||(T&&1w>T);V+=\'<1A 16="v-f-3E-3c\'+((2p+1B+6)%7>=5?" v-f-2F-3F-3c":"")+(2D?" v-f-87-F":"")+(1w.2b()==3B.2b()&&G==8.1m?" v-f-3E-3c-2E":"")+(49?" "+b.5v:"")+(2D&&!2C?"":" "+4a[1]+(1w.2b()>=4H.2b()&&1w.2b()<=23.2b()?" "+b.4G:"")+(1w.2b()==2G.2b()?" v-f-2G":""))+\'"\'+((!2D||2C)&&4a[2]?\' 4b="\'+4a[2]+\'"\':"")+(49?(3D?" 5m=\\"17(b).4F().2o(\'v-f-2F-2E\');\\" 5k=\\"17(b).4F().3b(\'v-f-2F-2E\');\\"":""):" 5m=\\"17(b).2o(\'v-f-3E-3c-2E\')"+(3D?".4F().2o(\'v-f-2F-2E\')":"")+";"+(!15||(2D&&!2C)?"":"17(\'#v-f-2d-"+8.u+"\').V(\'"+(3d.2k((8.q?8.q[0]:t),[1w,8])||Z)+"\');")+"\\" 5k=\\"17(b).3b(\'v-f-3E-3c-2E\')"+(3D?".4F().3b(\'v-f-2F-2E\')":"")+";"+(!15||(2D&&!2C)?"":"17(\'#v-f-2d-"+8.u+"\').V(\'"+Z+"\');")+\'" 22="17.f.5u(\\\'#\'+8.u+"\',"+G+","+J+\', b);"\')+">"+(2D?(2C?1w.S():"q;"):(49?1w.S():"<a>"+1w.S()+"</a>"))+"</1A>";48.4y(48.S()+1);3C.6R(3C.6Q()+1);1w=(48>3C?48:3C)}V+="</4E>"}G++;k(G>11){G=0;J++}V+="</6P></6O></I>"}}V+=(15?\'<I 46="2B: 4D;"></I><I u="v-f-2d-\'+8.u+\'" 16="v-f-2d">\'+Z+"</I>":"")+(!47&&!8.1c?5t:"")+\'<I 46="2B: 4D;"></I>\'+($.2c.4C&&1G($.2c.6N,10)<7&&!8.1c?\'<4B 5s="86:E;" 16="v-f-5r"></4B>\':"");r V},6M:p(8,G,J,R,T,3B,5p,15,Z,1n){R=(8.1g&&R&&3B<R?3B:R);c 44=b.l(8,"44");c V=\'<I 16="v-f-85">\';c 31="";k(5p||!b.l(8,"6L")){31+=1n[G]+"q;"}P{c 6J=(R&&R.Q()==J);c 6I=(T&&T.Q()==J);31+=\'<3a 16="v-f-x-F" 6E="17.f.5o(\\\'#\'+8.u+"\', b, \'M\');\\" 22=\\"17.f.5n(\'#"+8.u+"\');\\""+b.1H(15,8.u,b.l(8,"6K"),Z)+">";1l(c F=0;F<12;F++){k((!6J||F>=R.X())&&(!6I||F<=T.X())){31+=\'<4A K="\'+F+\'"\'+(F==G?\' 45="45"\':"")+">"+1n[F]+"</4A>"}}31+="</3a>"}k(!44){V+=31}k(5p||!b.l(8,"6H")){V+=J}P{c 2A=b.l(8,"6G").6F(":");c B=0;c 19=0;k(2A.1f!=2){B=J-10;19=J+10}P{k(2A[0].1b(0)=="+"||2A[0].1b(0)=="-"){B=19=x A().Q();B+=1G(2A[0],10);19+=1G(2A[1],10)}P{B=1G(2A[0],10);19=1G(2A[1],10)}}B=(R?21.2z(B,R.Q()):B);19=(T?21.2n(19,T.Q()):19);V+=\'<3a 16="v-f-x-B" 6E="17.f.5o(\\\'#\'+8.u+"\', b, \'Y\');\\" 22=\\"17.f.5n(\'#"+8.u+"\');\\""+b.1H(15,8.u,b.l(8,"6D"),Z)+">";1l(;B<=19;B++){V+=\'<4A K="\'+B+\'"\'+(B==J?\' 45="45"\':"")+">"+B+"</4A>"}V+="</3a>"}k(44){V+=31}V+="</I>";r V},1H:p(15,u,5l,Z){r(15?" 5m=\\"17(\'#v-f-2d-"+u+"\').V(\'"+(5l||Z)+"\');\\" 5k=\\"17(\'#v-f-2d-"+u+"\').V(\'"+Z+"\');\\"":"")},4z:p(8,L,20){c B=8.J+(20=="Y"?L:0);c F=8.G+(20=="M"?L:0);c H=21.2n(8.1u,b.30(B,F))+(20=="D"?L:0);c h=x A(B,F,H);c R=b.2m(8,"2n",1d);c T=b.2m(8,"2z");h=(R&&h<R?R:h);h=(T&&h>T?T:h);8.1u=h.S();8.G=8.1m=h.X();8.J=8.1q=h.Q();k(20=="M"||20=="Y"){b.43(8)}},43:p(8){c 5j=b.l(8,"6C");k(5j){5j.2k((8.q?8.q[0]:t),[8.1q,8.1m+1,8])}},3z:p(8){c 1i=b.l(8,"6B");r(1i==t?[1,1]:(1X 1i=="5i"?[1,1i]:1i))},2m:p(8,6A,6z){c h=b.42(b.l(8,6A+"A"),t);k(h){h.84(0);h.83(0);h.82(0);h.81(0)}r(!6z||!8.1g?h:(!h||8.1g>h?8.1g:h))},30:p(B,F){r 32-x A(B,F,32).S()},6y:p(B,F){r x A(B,F,1).3A()},5h:p(8,L,6x,6w){c 1i=b.3z(8);c h=x A(6x,6w+(L<0?L:1i[1]),1);k(L<0){h.4y(b.30(h.Q(),h.X()))}r b.5g(8,h)},5g:p(8,h){c 3y=(!8.1g?t:x A(8.1q,8.1m,8.1u));3y=(3y&&8.1g<3y?8.1g:3y);c R=3y||b.2m(8,"2n");c T=b.2m(8,"2z");r((!R||h>=R)&&(!T||h<=T))},1P:p(8){c 1F=b.l(8,"1F");1F=(1X 1F!="41"?1F:x A().Q()%2Z+1G(1F,10));r{1F:1F,1z:b.l(8,"1z"),1v:b.l(8,"1v"),1Z:b.l(8,"1Z"),1n:b.l(8,"1n")}},2Y:p(8,H,F,B){k(!H){8.1h=8.1u;8.1t=8.1m;8.1p=8.1q}c h=(H?(1X H=="4w"?H:x A(B,F,H)):x A(8.1p,8.1t,8.1h));r b.1Y(b.l(8,"2X"),h,b.1P(8))}});p 3x(n,3w){$.4x(n,3w);1l(c 1k 6v 3w){k(3w[1k]==t||3w[1k]==5f){n[1k]=3w[1k]}}r n}p 6u(a){r(a&&(($.2c.80&&1X a=="4w"&&a.1f)||(a.6t&&a.6t.5e().1o(/\\6r\\(\\)/))))}$.7Z.f=p(2j){k(!$.f.5b){$(1e.2l).3v($.f.O).7Y($.f.6s);$.f.5b=1d}c 5c=6r.6q.7X.7W(5d,1);k(1X 2j=="41"&&(2j=="7V"||2j=="S")){r $.f["6p"+2j+"3Z"].2k($.f,[b[0]].6o(5c))}r b.3u(p(){1X 2j=="41"?$.f["6p"+2j+"3Z"].2k($.f,[b].6o(5c)):$.f.6n(b,2j)})};$.f=x 3Z();$.f.5b=E;$.f.5a=x A().2b()})(17)',62,636,'||||||||inst|||this|var|||datepicker||date|||if|_get||target||function|input|return||null|id|ui||new||settings|Date|year|case||false|month|drawMonth|day|div|drawYear|value|offset||break|dpDiv|else|getFullYear|minDate|getDate|maxDate|iFormat|html||getMonth||initStatus||||||showStatus|class|jQuery|format|endYear|nodeName|charAt|inline|true|document|length|rangeStart|currentDay|numMonths|duration|name|for|selectedMonth|monthNames|match|currentYear|selectedYear|_getInst|ctrlKey|currentMonth|selectedDay|dayNames|printDate|top|isFixed|dayNamesShort|td|firstDay|matches|_defaults|width|shortYearCutoff|parseInt|_addStatus|isRTL|_adjustDate|rangeSelect|literal|lookAhead|left|_pos|_getFormatConfig|endDay|output|iValue|position|dateStr|showAnim|documentElement|typeof|formatDate|monthNamesShort|period|Math|onclick|endDate|endMonth|checkDate|_updateDatepicker|||markerClassName|css|getTime|browser|status|defaultDate|size|_dialogInput|height|handled|options|apply|body|_getMinMaxDate|min|addClass|dow|stepBigMonths|stepMonths|_hideDatepicker|chars|num|stayOpen|_triggerClass|pos|_disabledInputs|max|years|clear|showOtherMonths|otherMonth|over|week|today|span|navigationAsDateFormat|label|nextBigText|nextText|prevText|prevBigText|dates|focus|onSelect|hasClass|_inDialog|PROP_NAME|px|key|buttonText|dateFormat|_formatDate|100|_getDaysInMonth|monthHtml|||||||||select|removeClass|cell|dateStatus|row|currentText|showBigPrevNext|while|val|doy|yy|_datepickerShowing|postProcess|data|obj|scrollY|scrollX|showOn|the|Show|each|append|props|extendRemove|newMinDate|_getNumberOfMonths|getDay|selectedDate|utcDate|highlightWeek|days|end|col|next|prompt|dd|throw|getNumber|firstMon|altFormat|_lastInput|event|_curInst|remove|scrollTop|scrollLeft|_showDatepicker|siblings|button|buttonImage|inlineSettings|Datepicker||string|_determineDate|_notifyChange|showMonthAfterYear|selected|style|closeAtTop|tzDate|unselectable|daySettings|title|beforeShowDay|weekStatus|showWeeks|changeFirstDay|DD|hideIfNoPrevNext|maxDraw|rangeSeparator|switch|default|names|altField|trigger|blockUI|onClose|type|beforeShow|toLowerCase|disabled|appendText|object|extend|setDate|_adjustInstDate|option|iframe|msie|both|tr|parent|_currentClass|currentDate|calculateWeek|leadDays|dayNamesMin|dayStatus|iso8601Week|prev|current|showCurrentAtPos|startDate|formatNumber|shortNames|longNames|mm|checkLiteral|_selectDate|_selectingMonthYear|unbind|absolute|effects|browserHeight|browserWidth|window|_doKeyDown|relOffset|img|bind|attrValue|attrName|uuid|initialized|otherArgs|arguments|toString|undefined|_isInRange|_canAdjustMonth|number|onChange|onmouseout|text|onmouseover|_clickMonthYear|_selectMonthYear|secondary|xa0|cover|src|controls|_selectDay|_unselectableClass|dRow|daysInMonth|replace|_gotoToday|gotoDate|_promptClass|gotoCurrent|_clearDate|mandatory|_getDate|_setDate|Invalid|pattern|getDaysInMonth|_getDefaultDate|log|catch|parseDate|try|_setDateFromField|formatName|dim|getName|at|origSize|_updateAlternate|_mainDivId|parents|_dialogClass|_tidyDialog||hide|showOptions|hidden|_findPos|opera|clientHeight|clientWidth|dims|show|display|chr|keyCode|_doKeyPress|_disableClass|_inlineClass|keydown|_appendClass|_newInst|divSpan|regional|x3e|x3c|_attachDatepicker|concat|_|prototype|Array|_checkExternalClick|constructor|isArray|in|curMonth|curYear|_getFirstDayOfMonth|checkRange|minMax|numberOfMonths|onChangeMonthYear|yearStatus|onchange|split|yearRange|changeYear|inMaxYear|inMinYear|monthStatus|changeMonth|_generateMonthYearHeader|version|table|tbody|getUTCDate|setUTCDate|numRows|isMultiMonth|thead|_changeFirstDay|indexOf|weekHeader|statusForDate|currentStatus|nextBigStatus|nextStatus|prevStatus|prevBigStatus|closeText|closeStatus|clearText|clearStatus|_generateHTML|origYear|origMonth|offsetNumeric|offsetString|exec|_possibleChars|getYear|len|iInit|Missing|change|Year|Month|100px|innerHeight|innerWidth|_checkOffset|Class|add|empty|none|fixed|_isDisabledDatepicker|charCode|err|map|children|cursor|opacity|keypress|dateText|_dialogInst|dp|getData|setData|_inlineDatepicker|after|before|alt|attr|buttonImageOnly|_connectDatepicker|debug|Select|different|May|previous|Close|isDisabled|call|slice|mousedown|fn|safari|setMilliseconds|setSeconds|setMinutes|setHours|header|javascript|other|ceil|cellspacing|cellpadding|one|links|9999|close|control|isNaN|0123456789|W3C|TIMESTAMP|RSS|RFC_2822|RFC_1123|RFC_1036|RFC_850|RFC_822|ISO_8601|COOKIE|ATOM|do|Unexpected|Unknown|86400000|floor|getTimezoneOffset|noWeekends|selectedIndex|draw|unblockUI|fadeOut|fadeIn|slideUp|slideDown|nextSibling|nodeType|rtl|multi|find|static|offsetWidth|1000px|block|offsetHeight|parentNode|fromCharCode|String|stopPropagation|preventDefault|_getDateDatepicker|_setDateDatepicker|_refreshDatepicker|_changeDatepicker|instance|transparent|color|background|prepend|relative|_disableDatepicker|_enableDatepicker|removeData|_destroyDatepicker|150|pageY|pageX|_dialogDatepicker|_inlineShow|click|eval|getAttribute|setDefaults|console|hasDatepicker|normal|first|as|Set|Sa|Fr|Th|We|Tu|Mo|Su|Sat|Fri|Thu|Wed|Tue|Mon|Sun|Saturday|Friday|Thursday|Wednesday|Tuesday|Monday|Sunday|of|Week|Wk|Dec|Nov|Oct|Sep|Aug|Jul|Jun|Apr|Mar|Feb|Jan|December|November|October|September|August|July|June|April|March|February|January|Today|Next|Prev|without|Erase|Clear|dialog'.split('|'),0,{})) - diff --git a/views/default/event_calendar/calendar.php b/views/default/event_calendar/calendar.php index ebf4aa589..ea12ff603 100644 --- a/views/default/event_calendar/calendar.php +++ b/views/default/event_calendar/calendar.php @@ -4,7 +4,15 @@ if ($vars['mode']) { } else { $mode = 'month'; } -$link_bit = $vars['url'].'mod/event_calendar/show_events.php?start_date='.$vars['original_start_date'].'&group_guid='.$vars['group_guid'].'&filter='.$vars['filter'].'&mode='; + +# event_calendar/list/<start_date>/<display_mode>/<filter_context>/<region> +if ($vars['group_guid']) { + $link_bit = $vars['url']."event_calendar/group/{$vars['group_guid']}/{$vars['original_start_date']}/%s"; +} else { + $link_bit = $vars['url']."event_calendar/list/{$vars['original_start_date']}/%s/{$vars['filter']}"; +} + +#$link_bit = "event_calendar/show_events.php?start_date='.$vars['original_start_date'].'&group_guid='.$vars['group_guid'].'&filter='.$vars['filter'].'&mode='; $range_bit = ''; $first_date = $vars['first_date']; @@ -27,7 +35,7 @@ if ($first_date || $last_date) { $body .= elgg_view("input/datepicker_inline", array( - 'internalname' => 'my_datepicker', + 'name' => 'my_datepicker', 'mode' => $vars['mode']?$vars['mode']:'month', 'start_date' => $vars['start_date'], 'end_date' => $vars['end_date'], @@ -35,6 +43,7 @@ $body .= elgg_view("input/datepicker_inline", 'range_bit' => $range_bit, ) ); + $body .= '<div id="calendarmenucontainer">'; $body .= '<ul id="calendarmenu">'; if ($mode == 'day') { @@ -42,19 +51,19 @@ if ($mode == 'day') { } else { $link_class = ''; } -$body .= '<li'.$link_class.'><a href="'.$link_bit.'day">'.elgg_echo('event_calendar:day_label').'</a></li>'; +$body .= '<li'.$link_class.'><a href="'.sprintf($link_bit,'day').'">'.elgg_echo('event_calendar:day_label').'</a></li>'; if ($mode == 'week') { $link_class = ' class="sys_selected"'; } else { $link_class = ''; } -$body .= '<li'.$link_class.'><a href="'.$link_bit.'week">'.elgg_echo('event_calendar:week_label').'</a></li>'; +$body .= '<li'.$link_class.'><a href="'.sprintf($link_bit,'week').'">'.elgg_echo('event_calendar:week_label').'</a></li>'; if ($mode == 'month') { $link_class = ' class="sys_selected sys_calmenu_last"'; } else { $link_class = ' class="sys_calmenu_last"'; } -$body .= '<li'.$link_class.'><a href="'.$link_bit.'month">'.elgg_echo('event_calendar:month_label').'</a></li>'; +$body .= '<li'.$link_class.'><a href="'.sprintf($link_bit,'month').'">'.elgg_echo('event_calendar:month_label').'</a></li>'; $body .= '</ul>'; $body .= '</div>'; echo $body; diff --git a/views/default/event_calendar/css.php b/views/default/event_calendar/css.php index 359fd1e13..7e399c547 100644 --- a/views/default/event_calendar/css.php +++ b/views/default/event_calendar/css.php @@ -6,18 +6,9 @@ $background_colour = '#F5F5F5'; $highlight_colour = '#3874B7'; ?> -/* hide Today as it is not working as expected */ -.ui-datepicker-current { visibility:hidden } - -div#calendarmenucontainer { - position: relative; -} - -ul#calendarmenu { - list-style: none; - position: absolute; - top: 0px; - left: -15px; +#calendarmenucontainer { + position:relative; + left: 40px; } ul#calendarmenu li { @@ -52,6 +43,12 @@ td.ui-datepicker-unselectable { color: #888888 !important; } +#my_datepicker .week-highlight a { + text-decoration: none; + color: #FFFFFF; + background: <?php echo $highlight_colour; ?>; +} + .river_object_event_calendar_create { background: url(<?php echo $vars['url']; ?>mod/event_calendar/images/river_icon_event.gif) no-repeat left -1px; } @@ -59,7 +56,7 @@ td.ui-datepicker-unselectable { background: url(<?php echo $vars['url']; ?>mod/event_calendar/images/river_icon_event.gif) no-repeat left -1px; } #event_list { - width:440px; + width:510px; margin:0; float:left; padding:5px 0 0 0; diff --git a/views/default/event_calendar/filter_menu.php b/views/default/event_calendar/filter_menu.php new file mode 100644 index 000000000..62d38939b --- /dev/null +++ b/views/default/event_calendar/filter_menu.php @@ -0,0 +1,54 @@ +<?php +// generate a list of filter tabs +$group_guid = $vars['group_guid']; +$filter_context = $vars['filter']; +if ($group_guid) { + $url_start = "event_calendar/group/{$group_guid}/{$vars['start_date']}/{$vars['mode']}"; +} else { + $url_start = "event_calendar/list/{$vars['start_date']}/{$vars['mode']}"; +} + +$tabs = array( + 'all' => array( + 'text' => elgg_echo('all'), + 'href' => "$url_start/all", + 'selected' => ($filter_context == 'all'), + 'priority' => 200, + ), + 'mine' => array( + 'text' => elgg_echo('mine'), + 'href' => "$url_start/mine", + 'selected' => ($filter_context == 'mine'), + 'priority' => 300, + ), + 'friend' => array( + 'text' => elgg_echo('friends'), + 'href' => "$url_start/friends", + 'selected' => ($filter_context == 'friends'), + 'priority' => 400, + ), +); + +$event_calendar_spots_display = elgg_get_plugin_setting('spots_display', 'event_calendar'); +if ($event_calendar_spots_display == "yes") { + $tabs['open'] = array( + 'text' => elgg_echo('event_calendar:open'), + 'href' => "$url_start/open", + 'selected' => ($filter_context == 'open'), + 'priority' => 100, + ); +} + +foreach ($tabs as $name => $tab) { + $tab['name'] = $name; + + elgg_register_menu_item('filter', $tab); +} + +echo elgg_view_menu('filter', array('sort_by' => 'priority', 'class' => 'elgg-menu-hz')); + +$event_calendar_region_display = elgg_get_plugin_setting('region_display', 'event_calendar'); +if ($event_calendar_region_display == 'yes') { + $url_start .= "/$filter_context"; + echo elgg_view('event_calendar/region_select',array('url_start'=>$url_start,'region'=>$vars['region'])); +} \ No newline at end of file diff --git a/views/default/event_calendar/group_module.php b/views/default/event_calendar/group_module.php new file mode 100644 index 000000000..5fc644e8b --- /dev/null +++ b/views/default/event_calendar/group_module.php @@ -0,0 +1,43 @@ +<?php +/** + * Group event calendar module + */ + +$group = elgg_get_page_owner_entity(); + +if ($group->event_calendar_enable == "no") { + return true; +} + +$all_link = elgg_view('output/url', array( + 'href' => "event_calendar/group/$group->guid/all", + 'text' => elgg_echo('link:view:all'), +)); + +elgg_push_context('widgets'); +$options = array( + 'type' => 'object', + 'subtype' => 'event_calendar', + 'container_guid' => elgg_get_page_owner_guid(), + 'limit' => 6, + 'full_view' => false, + 'pagination' => false, +); +$content = elgg_list_entities($options); +elgg_pop_context(); + +if (!$content) { + $content = '<p>' . elgg_echo('event_calendar:no_events_found') . '</p>'; +} + +$new_link = elgg_view('output/url', array( + 'href' => "event_calendar/add/$group->guid", + 'text' => elgg_echo('event_calendar:new'), +)); + +echo elgg_view('groups/profile/module', array( + 'title' => elgg_echo('event_calendar:group'), + 'content' => $content, + 'all_link' => $all_link, + 'add_link' => $new_link, +)); diff --git a/views/default/event_calendar/groupprofile_calendar.php b/views/default/event_calendar/groupprofile_calendar.php index 175098e0c..826fafa67 100644 --- a/views/default/event_calendar/groupprofile_calendar.php +++ b/views/default/event_calendar/groupprofile_calendar.php @@ -11,7 +11,9 @@ * */ -$page_owner_entity = page_owner_entity(); +elgg_load_library('elgg:event_calendar'); + +$page_owner_entity = elgg_get_page_owner_entity(); if (event_calendar_activated_for_group($page_owner_entity)) { $num = 5; diff --git a/views/default/event_calendar/show_events.php b/views/default/event_calendar/show_events.php index 31771f43d..580fb5a45 100644 --- a/views/default/event_calendar/show_events.php +++ b/views/default/event_calendar/show_events.php @@ -13,13 +13,22 @@ $listing_format = $vars['listing_format']; if ($vars['events']) { - if (get_plugin_setting('agenda_view', 'event_calendar') == 'yes') { + if (elgg_get_plugin_setting('agenda_view', 'event_calendar') == 'yes') { $event_list = elgg_view('event_calendar/agenda_view',$vars); } else { if ($listing_format == 'paged') { $event_list = elgg_view('event_calendar/paged_view',$vars); } else { - $event_list = elgg_view_entity_list($vars['events'], $vars['count'], $vars['offset'], $vars['limit'], false, false); + $options = array( + 'list_class' => 'elgg-list-entity', + 'full_view' => FALSE, + 'pagination' => TRUE, + 'list_type' => 'listing', + 'list_type_toggle' => FALSE, + 'offset' => $vars['offset'], + 'limit' => $vars['limit'], + ); + $event_list = elgg_view_entity_list($vars['events'], $options); } } } else { @@ -28,26 +37,18 @@ if ($vars['events']) { if ($listing_format == 'paged') { echo $event_list; } else { - if (isloggedin()) { - $nav = elgg_view('event_calendar/nav',$vars); - } else { - $nav = ''; - } ?> -<table width="100%"> -<tr><td> -<div id="event_list"> +<div style="width:100%"> +<div id="event_list" style="float:left;"> <?php -echo $nav.'<br />'.$event_list; +echo $event_list; ?> </div> -</td> -<td align="right"> +<div style="float:right;"> <?php echo elgg_view('event_calendar/calendar',$vars); ?> -</td></tr> -</table> +</div> +</div> <?php } -?> \ No newline at end of file diff --git a/views/default/forms/event_calendar/edit.php b/views/default/forms/event_calendar/edit.php new file mode 100644 index 000000000..25062e2df --- /dev/null +++ b/views/default/forms/event_calendar/edit.php @@ -0,0 +1,246 @@ +<?php +$event = $vars['event']; +$fd = $vars['form_data']; + +$event_calendar_times = elgg_get_plugin_setting('times', 'event_calendar'); +$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_calendar_spots_display = elgg_get_plugin_setting('spots_display', 'event_calendar'); +$event_calendar_add_users = elgg_get_plugin_setting('add_users', 'event_calendar'); +$event_calendar_hide_access = elgg_get_plugin_setting('hide_access', 'event_calendar'); +$event_calendar_hide_end = elgg_get_plugin_setting('hide_end', 'event_calendar'); +$event_calendar_more_required = elgg_get_plugin_setting('more_required', 'event_calendar'); + +if ($event_calendar_more_required == 'yes') { + $required_fields = array('title','venue','start_date','start_time', + 'brief_description','region','event_type','fees','contact','organiser', + 'event_tags','spots'); +} else { + $required_fields = array('title','venue','start_date'); +} +$all_fields = array('title','venue','start_time','start_date','end_time','end_date', + 'brief_description','region','event_type','fees','contact','organiser','event_tags', + 'long_description','spots'); +$prefix = array(); +foreach ($all_fields as $fn) { + if (in_array($fn,$required_fields)) { + $prefix[$fn] = elgg_echo('event_calendar:required').' '; + } else { + $prefix[$fn] = elgg_echo('event_calendar:optional').' '; + } +} + +if ($event) { + $title = $event->title; + $brief_description = $event->description; + $venue = $event->venue; + // this is a form redisplay, so take the values as submitted + $start_date = $event->start_date; + $end_date = $event->end_date; + + if ($event_calendar_region_display) { + $region = $event->region; + if (!$region) { + $region = '-'; + } + } + + if ($event_calendar_spots_display) { + $spots = trim($event->spots); + } + if ($event_calendar_type_display) { + $event_type = $event->event_type; + if (!$event_type) { + $event_type = '-'; + } + } + $fees = $event->fees; + $contact = $event->contact; + $organiser = $event->organiser; + $event_tags = $event->event_tags; + $long_description = $event->long_description; + $access = $event->access_id; + if ($event_calendar_times == 'yes') { + $start_time = $event->start_time; + $end_time = $event->end_time; + } + $event_action = 'manage_event'; + $event_guid = $event->guid; +} else { + $title = $fd['title']; + $brief_description = $fd['description']; + $venue = $fd['venue']; + $start_date = $fd['start_date']; + $end_date = $fd['end_date']; + $fees = $fd['fees']; + if ($event_calendar_spots_display) { + $spots = $fd['spots']; + } + if ($event_calendar_region_display) { + $region = $fd['region']; + } + if ($event_calendar_type_display) { + $event_type = $fd['event_type']; + } + $contact = $fd['contact']; + $organiser = $fd['organiser']; + $event_tags = $fd['event_tags']; + $long_description = $fd['long_description']; + $access = $fd['access_id']; + if ($event_calendar_times == 'yes') { + $start_time = $fd['start_time']; + $end_time = $fd['end_time']; + } + $event_action = 'add_event'; + $event_guid = 0; +} +$body = ''; + +$body .= elgg_view('input/hidden',array('name'=>'event_action', 'value'=>$event_action)); +$body .= elgg_view('input/hidden',array('name'=>'event_guid', 'value'=>$event_guid)); +$body .= elgg_view('input/hidden',array('name'=>'group_guid', 'value'=>$vars['group_guid'])); + +$body .= '<p><label>'.elgg_echo("event_calendar:title_label").'<br />'; +$body .= elgg_view("input/text",array('name' => 'title','value'=>$title)); +$body .= '</label></p>'; +$body .= '<p class="description">'.$prefix['title'].elgg_echo('event_calendar:title_description').'</p>'; + +$body .= '<p><label>'.elgg_echo("event_calendar:venue_label").'<br />'; +$body .= elgg_view("input/text",array('name' => 'venue','value'=>$venue)); +$body .= '</label></p>'; +$body .= '<p class="description">'.$prefix['venue'].elgg_echo('event_calendar:venue_description').'</p>'; + +if ($event_calendar_times == 'yes') { + $body .= '<p><label>'.elgg_echo("event_calendar:start_time_label").'</label><br />'; + $body .= elgg_view("input/timepicker",array('name' => 'start_time','value'=>$start_time)); + $body .= '</p>'; + $body .= '<p class="description">'.$prefix['start_time'].elgg_echo('event_calendar:start_time_description').'</p>'; +} + +$body .= '<p><label>'.elgg_echo("event_calendar:start_date_label").'<br />'; +$body .= elgg_view("input/date",array('timestamp'=>TRUE, 'autocomplete'=>'off','name' => 'start_date','value'=>$start_date)); +$body .= '</label></p>'; +$body .= '<p class="description">'.$prefix['start_date'].elgg_echo('event_calendar:start_date_description').'</p>'; + +if ($event_calendar_hide_end != 'yes') { + if ($event_calendar_times == 'yes') { + $body .= '<p><label>'.elgg_echo("event_calendar:end_time_label").'</label><br />'; + $body .= elgg_view("input/timepicker",array('name' => 'end_time','value'=>$end_time)); + $body .= '</p>'; + $body .= '<p class="description">'.$prefix['end_time'].elgg_echo('event_calendar:end_time_description').'</p>'; + } + + $body .= '<p><label>'.elgg_echo("event_calendar:end_date_label").'<br />'; + $body .= elgg_view("input/date",array('timestamp'=>TRUE,'autocomplete'=>'off','name' => 'end_date','value'=>$end_date)); + $body .= '</label></p>'; + $body .= '<p class="description">'.$prefix['end_date'].elgg_echo('event_calendar:end_date_description').'</p>'; +} + +if ($event_calendar_spots_display == 'yes') { + $body .= '<p><label>'.elgg_echo("event_calendar:spots_label").'<br />'; + $body .= elgg_view("input/text",array('name' => 'spots','value'=>$spots)); + $body .= '</label></p>'; + $body .= '<p class="description">'.$prefix['spots'].elgg_echo('event_calendar:spots_description').'</p>'; +} + +if ($event_calendar_add_users == 'yes') { + $body .= '<p><label>'.elgg_echo("event_calendar:add_user_label").'<br />'; + $body .= elgg_view("input/adduser",array('name' => 'adduser','internalid' => 'do_adduser','width'=> 200, 'minChars'=>2)); + $body .= '</label></p><br /><br />'; + $body .= '<p class="description">'.elgg_echo('event_calendar:add_user_description').'</p>'; +} + +$body .= '<p><label>'.elgg_echo("event_calendar:brief_description_label").'<br />'; +$body .= elgg_view("input/text",array('name' => 'description','value'=>$brief_description)); +$body .= '</label></p>'; +$body .= '<p class="description">'.$prefix['brief_description'].elgg_echo('event_calendar:brief_description_description').'</p>'; + +if ($event_calendar_region_display == 'yes') { + $region_list = trim(elgg_get_plugin_setting('region_list', 'event_calendar')); + $region_list_handles = elgg_get_plugin_setting('region_list_handles', 'event_calendar'); + // make sure that we are using Unix line endings + $region_list = str_replace("\r\n","\n",$region_list); + $region_list = str_replace("\r","\n",$region_list); + if ($region_list) { + $options = array(); + $options[] = '-'; + foreach(explode("\n",$region_list) as $region_item) { + $region_item = trim($region_item); + if ($region_list_handles == 'yes') { + $options[$region_item] = elgg_echo('event_calendar:region:'.$region_item); + } else { + $options[$region_item] = $region_item; + } + } + $body .= '<p><label>'.elgg_echo("event_calendar:region_label").'<br />'; + $body .= elgg_view("input/pulldown",array('name' => 'region','value'=>$region,'options_values'=>$options)); + $body .= '</label></p>'; + $body .= '<p class="description">'.$prefix['region'].elgg_echo('event_calendar:region_description').'</p>'; + } +} + +if ($event_calendar_type_display == 'yes') { + $type_list = trim(elgg_get_plugin_setting('type_list', 'event_calendar')); + $type_list_handles = elgg_get_plugin_setting('type_list_handles', 'event_calendar'); + // make sure that we are using Unix line endings + $type_list = str_replace("\r\n","\n",$type_list); + $type_list = str_replace("\r","\n",$type_list); + if ($type_list) { + $options = array(); + $options[] = '-'; + foreach(explode("\n",$type_list) as $type_item) { + $type_item = trim($type_item); + if ($type_list_handles == 'yes') { + $options[$type_item] = elgg_echo('event_calendar:type:'.$type_item); + } else { + $options[$type_item] = $type_item; + } + } + $body .= '<p><label>'.elgg_echo("event_calendar:type_label").'<br />'; + $body .= elgg_view("input/pulldown",array('name' => 'event_type','value'=>$event_type,'options_values'=>$options)); + $body .= '</label></p>'; + $body .= '<p class="description">'.$prefix['event_type'].elgg_echo('event_calendar:type_description').'</p>'; + } +} + +$body .= '<p><label>'.elgg_echo("event_calendar:fees_label").'<br />'; +$body .= elgg_view("input/text",array('name' => 'fees','value'=>$fees)); +$body .= '</label></p>'; +$body .= '<p class="description">'.$prefix['fees'].elgg_echo('event_calendar:fees_description').'</p>'; + +$body .= '<p><label>'.elgg_echo("event_calendar:contact_label").'<br />'; +$body .= elgg_view("input/text",array('name' => 'contact','value'=>$contact)); +$body .= '</label></p>'; +$body .= '<p class="description">'.$prefix['contact'].elgg_echo('event_calendar:contact_description').'</p>'; + +$body .= '<p><label>'.elgg_echo("event_calendar:organiser_label").'<br />'; +$body .= elgg_view("input/text",array('name' => 'organiser','value'=>$organiser)); +$body .= '</label></p>'; +$body .= '<p class="description">'.$prefix['organiser'].elgg_echo('event_calendar:organiser_description').'</p>'; + +$body .= '<p><label>'.elgg_echo("event_calendar:event_tags_label").'<br />'; +$body .= elgg_view("input/tags",array('name' => 'tags','value'=>$event_tags)); +$body .= '</label></p>'; +$body .= '<p class="description">'.$prefix['event_tags'].elgg_echo('event_calendar:event_tags_description').'</p>'; + +$body .= '<p><label>'.elgg_echo("event_calendar:long_description_label").'<br />'; +$body .= elgg_view("input/longtext",array('name' => 'long_description','value'=>$long_description)); +$body .= '</label></p>'; +$body .= '<p class="description">'.$prefix['long_description'].elgg_echo('event_calendar:long_description_description').'</p>'; + +if($event_calendar_hide_access == 'yes') { + $event_calendar_default_access = elgg_get_plugin_setting('default_access', 'event_calendar'); + if($event_calendar_default_access) { + $body .= elgg_view("input/hidden",array('name' => 'access_id','value'=>$event_calendar_default_access)); + } else { + $body .= elgg_view("input/hidden",array('name' => 'access_id','value'=>ACCESS_PRIVATE)); + } +} else { + $body .= '<p><label>'.elgg_echo("access").'<br />'; + $body .= elgg_view("input/access",array('name' => 'access_id','value'=>$access)); + $body .= '</label></p>'; +} + +$body .= elgg_view('input/submit', array('name'=>'submit','value'=>elgg_echo('event_calendar:submit'))); + +echo $body; diff --git a/views/default/input/datepicker_inline.php b/views/default/input/datepicker_inline.php index 560074a2d..69520b9ef 100644 --- a/views/default/input/datepicker_inline.php +++ b/views/default/input/datepicker_inline.php @@ -6,16 +6,43 @@ * @package event_calendar * @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.html GNU Public License version 2 * @author Kevin Jardine <kevin@radagast.biz> - * @copyright Radagast Solutions 2008 + * @copyright Radagast Solutions 2008 -2011 * @link http://radagast.biz/ * */ +if ($vars['group_guid']) { + $link_bit = $vars['url']."event_calendar/group/{$vars['group_guid']}/%s/{$vars['mode']}"; +} else { + $link_bit = $vars['url']."event_calendar/list/%s/{$vars['mode']}/{$vars['filter']}"; +} + +if ($vars['mode'] == 'week') { + $selected_week = date('W',strtotime($vars['start_date']))+1; +} else { + $selected_week = ''; +} +// TODO - figure out how to move this JavaScript ?> <script language="javascript"> +var selectedWeek = "<?php echo $selected_week; ?>"; +highlightWeek = function(d) { + if (!selectedWeek) { return [true,''];} + //var date = $(this).datepicker('getDate'); + var dayOfWeek = d.getUTCDay(); + var weekNumber = $.datepicker.iso8601Week(d); + if (dayOfWeek == 6) { + weekNumber += 1; + } + + if (selectedWeek == weekNumber) { + return [true,'week-highlight']; + } + return [true,'']; +} $(document).ready(function(){ var done_loading = false; -$("#<?php echo $vars['internalname']; ?>").datepicker({ +$("#<?php echo $vars['name']; ?>").datepicker({ onChangeMonthYear: function(year, month, inst) { if(inst.onChangeToday){ day=inst.selectedDay; @@ -24,19 +51,17 @@ $("#<?php echo $vars['internalname']; ?>").datepicker({ } if (done_loading) { // in this case the mode is forced to month - document.location.href = "<?php echo $vars['url'].'mod/event_calendar/show_events.php?mode=month&group_guid='.$vars['group_guid'].'&start_date='; ?>" + year+'-'+month+'-1'; + document.location.href = "<?php echo $link_bit; ?>".replace('%s', year+'-'+month+'-1'); } }, onSelect: function(date) { // jump to the new page - document.location.href = "<?php echo $vars['url'].'mod/event_calendar/show_events.php?mode='.$vars['mode'].'&group_guid='.$vars['group_guid'].'&start_date='; ?>" + date.substring(0,10); + document.location.href = "<?php echo $link_bit; ?>".replace('%s', date.substring(0,10)); }, dateFormat: "yy-mm-dd", <?php echo $vars['range_bit']; ?> - hideIfNoPrevNext: true, defaultDate: "<?php echo $vars['start_date'] .' - '.$vars['end_date']; ?>", - <?php if ($vars['mode'] == 'week') echo 'highlightWeek: true,'; ?> - rangeSelect: true + beforeShowDay: highlightWeek }); var start_date = $.datepicker.parseDate("yy-mm-dd", "<?php echo $vars['start_date']; ?>"); var end_date = $.datepicker.parseDate("yy-mm-dd", "<?php echo $vars['end_date']; ?>"); @@ -44,9 +69,10 @@ var end_date = $.datepicker.parseDate("yy-mm-dd", "<?php echo $vars['end_date']; if ("<?php echo $vars['mode'] ?>" == "month") { end_date += 1; } -$("#<?php echo $vars['internalname']; ?>").datepicker("setDate", start_date, end_date); +$("#<?php echo $vars['name']; ?>").datepicker("setDate", start_date, end_date); var done_loading = true; }); + </script> -<div id="<?php echo $vars['internalname']; ?>" ></div> +<div style="position:relative;" id="<?php echo $vars['name']; ?>" ></div> <p style="clear: both;"><!-- See day-by-day example for highlighting days code --></p> \ No newline at end of file diff --git a/views/default/input/datepicker_popup.php b/views/default/input/datepicker_popup.php index 8e1120ce7..5ed431e71 100644 --- a/views/default/input/datepicker_popup.php +++ b/views/default/input/datepicker_popup.php @@ -10,6 +10,7 @@ * @link http://radagast.biz/ * */ + if ($vars['dateformat']) { $date_format = $vars['dateformat']; } else { diff --git a/views/default/object/event_calendar.php b/views/default/object/event_calendar.php index 70560bd2d..97829e7c2 100644 --- a/views/default/object/event_calendar.php +++ b/views/default/object/event_calendar.php @@ -13,11 +13,10 @@ $event = $vars['entity']; - if ($vars['full']) { $body = elgg_view('event_calendar/strapline',$vars); $event_items = event_calendar_get_formatted_full_items($event); - $body .= '<div class="contentWrapper" >'; + $body .= '<br />'; foreach($event_items as $item) { $value = $item->value; @@ -28,39 +27,70 @@ if ($vars['full']) { $body .= "<p class=\"{$even_odd}\"><b>"; $body .= $item->title.':</b> '; $body .= $item->value; - } } + $metadata = elgg_view_menu('entity', array( + 'entity' => $event, + 'handler' => 'event_calendar', + 'sort_by' => 'priority', + 'class' => 'elgg-menu-hz', + )); + + $tags = elgg_view('output/tags', array('tags' => $event->event_tags)); + + $params = array( + 'entity' => $event, + 'metadata' => $metadata, + 'tags' => $tags, + 'title' => false, + ); + $list_body = elgg_view('object/elements/summary', $params); + echo $list_body; echo $body; if ($event->long_description) { echo '<p>'.$event->long_description.'</p>'; } else { echo '<p>'.$event->description.'</p>'; } - echo '</div>'; - if (get_plugin_setting('add_to_group_calendar', 'event_calendar') == 'yes') { + if (elgg_get_plugin_setting('add_to_group_calendar', 'event_calendar') == 'yes') { echo elgg_view('event_calendar/forms/add_to_group',array('event' => $event)); } } else { + $time_bit = event_calendar_get_formatted_time($event); - $icon = elgg_view( - "graphics/icon", array( - 'entity' => $vars['entity'], - 'size' => 'small', - ) - ); - $info .= '<p><b><a href="'.$event->getUrl().'">'.$event->title.'</a></b>'; - $info .= '<br />'.$time_bit; + $icon = '<img src="'.elgg_view("icon/object/event_calendar/small").'" />'; + $extras = array($time_bit); if ($event->description) { - $info .= '<br /><br />'.$event->description; + $extras[] = $event->description; } - if ($event_calendar_venue_view = get_plugin_setting('venue_view', 'event_calendar') == 'yes') { - $info .= '<br />'.$event->venue; + if ($event_calendar_venue_view = elgg_get_plugin_setting('venue_view', 'event_calendar') == 'yes') { + $extras[] = $event->venue; } - $info .= '</p>'; + if ($extras) { + $info = "<p>".implode("<br />",$extras)."</p>"; + } else { + $info = ''; + } + + $metadata = elgg_view_menu('entity', array( + 'entity' => $event, + 'handler' => 'event_calendar', + 'sort_by' => 'priority', + 'class' => 'elgg-menu-hz', + )); + + $tags = elgg_view('output/tags', array('tags' => $event->event_tags)); + + $params = array( + 'entity' => $event, + 'metadata' => $metadata, + 'subtitle' => $info, + 'tags' => $tags, + ); + $list_body = elgg_view('object/elements/summary', $params); - echo elgg_view_listing($icon, $info); + echo elgg_view_image_block($icon, $list_body); } ?> \ No newline at end of file diff --git a/views/default/widgets/event_calendar/view.php b/views/default/widgets/event_calendar/view.php index 12fff6d60..329046cb0 100644 --- a/views/default/widgets/event_calendar/view.php +++ b/views/default/widgets/event_calendar/view.php @@ -12,7 +12,7 @@ */ // Load event calendar model - require_once(dirname(dirname(dirname(dirname(dirname(__FILE__)))))."/models/model.php"); + elgg_load_library('elgg:event_calendar'); //the number of events to display $num = (int) $vars['entity']->num_display; @@ -21,7 +21,7 @@ // Get the events - $events = event_calendar_get_personal_events_for_user(page_owner(),$num); + $events = event_calendar_get_personal_events_for_user(elgg_get_page_owner_guid(),$num); // If there are any events to view, view them if (is_array($events) && sizeof($events) > 0) { -- cgit v1.2.3 From 6b20e80c9d577a3eeeb570a6d9fd706fe619709b Mon Sep 17 00:00:00 2001 From: Kevin Jardine <kevinjardine@yahoo.com> Date: Tue, 30 Aug 2011 17:52:12 +0200 Subject: a few small fixes --- models/model.php | 27 ++++++++++++++++++++++----- start.php | 2 +- views/default/input/timepicker.php | 6 +++--- views/default/object/event_calendar.php | 20 ++++++++++++-------- 4 files changed, 38 insertions(+), 17 deletions(-) diff --git a/models/model.php b/models/model.php index d4bc5d0a7..52fd472b3 100644 --- a/models/model.php +++ b/models/model.php @@ -81,14 +81,31 @@ function event_calendar_set_event_from_form($event_guid,$group_guid) { $event->end_date = get_input('end_date'); if ($event_calendar_times == 'yes') { - $event->start_time = get_input('start_time'); - //$event->original_start_date = $event->start_date; + $sh = get_input('start_time_h',''); + $sm = get_input('start_time_m',''); + if (is_numeric($sh) && is_numeric($sm)) { + // workaround for pulldown zero value bug + $sh--; + $sm--; + $event->start_time = $sh*60+$sm; + } else { + $event->start_time = ''; + } + $eh = get_input('end_time_h',''); + $em = get_input('end_time_m',''); + if (is_numeric($eh) && is_numeric($em)) { + // workaround for pulldown zero value bug + $eh--; + $em--; + $event->end_time = $eh*60+$em; + } else { + $event->end_time = ''; + } 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; } - $event->end_time = get_input('end_time'); } if ($event_calendar_spots_display == 'yes') { $event->spots = trim(get_input('spots')); @@ -377,7 +394,7 @@ function event_calendar_get_entities_from_metadata_between($meta_start_name, $me if (!$count) { $query .= " order by $order_by limit $offset, $limit"; // Add order and limit $entities = get_data($query, "entity_row_to_elggstar"); - if (get_plugin_setting('add_to_group_calendar', 'event_calendar') == 'yes') { + if (elgg_get_plugin_setting('add_to_group_calendar', 'event_calendar') == 'yes') { if (get_entity($container_guid) instanceOf ElggGroup) { $entities = event_calendar_get_entities_from_metadata_between_related($meta_start_name, $meta_end_name, $meta_start_value, $meta_end_value, $entity_type, @@ -1011,7 +1028,7 @@ function event_calendar_get_page_content_list($page_type,$group_guid,$start_date forward(); } elgg_push_breadcrumb(elgg_echo('event_calendar:group_breadcrumb')); - elgg_set_context('groups'); + elgg_push_context('groups'); elgg_set_page_owner_guid($group_guid); $user_guid = elgg_get_logged_in_user_guid(); $group_calendar = elgg_get_plugin_setting('group_calendar', 'event_calendar'); diff --git a/start.php b/start.php index 967e40b8a..330f10092 100644 --- a/start.php +++ b/start.php @@ -241,7 +241,7 @@ function event_calendar_page_handler($page) { } /** - * Add particular blog links/info to entity menu + * Add particular event calendar links/info to entity menu */ function event_calendar_entity_menu_setup($hook, $type, $return, $params) { if (elgg_in_context('widgets')) { diff --git a/views/default/input/timepicker.php b/views/default/input/timepicker.php index 35fa5ac98..faadd6450 100644 --- a/views/default/input/timepicker.php +++ b/views/default/input/timepicker.php @@ -1,6 +1,6 @@ <?php -$time_format = get_plugin_setting('timeformat', 'event_calendar'); +$time_format = elgg_get_plugin_setting('timeformat', 'event_calendar'); if (!$time_format) { $time_format = 24; } @@ -32,7 +32,7 @@ for($i=0;$i<60;$i=$i+5) { $minutes[$i+1] = sprintf("%02d",$i); } -echo elgg_view('input/pulldown',array('internalname'=>$vars['internalname'].'_h','value'=>$hour,'options_values'=>$hours)); -echo elgg_view('input/pulldown',array('internalname'=>$vars['internalname'].'_m','value'=>$minute,'options_values'=>$minutes)); +echo elgg_view('input/dropdown',array('name'=>$vars['name'].'_h','value'=>$hour,'options_values'=>$hours)); +echo elgg_view('input/dropdown',array('name'=>$vars['name'].'_m','value'=>$minute,'options_values'=>$minutes)); ?> \ No newline at end of file diff --git a/views/default/object/event_calendar.php b/views/default/object/event_calendar.php index 97829e7c2..43e7847dc 100644 --- a/views/default/object/event_calendar.php +++ b/views/default/object/event_calendar.php @@ -36,7 +36,7 @@ if ($vars['full']) { 'class' => 'elgg-menu-hz', )); - $tags = elgg_view('output/tags', array('tags' => $event->event_tags)); + $tags = elgg_view('output/tags', array('tags' => $event->tags)); $params = array( 'entity' => $event, @@ -73,14 +73,18 @@ if ($vars['full']) { $info = ''; } - $metadata = elgg_view_menu('entity', array( - 'entity' => $event, - 'handler' => 'event_calendar', - 'sort_by' => 'priority', - 'class' => 'elgg-menu-hz', - )); + if (elgg_in_context('widgets')) { + $metadata = ''; + } else { + $metadata = elgg_view_menu('entity', array( + 'entity' => $event, + 'handler' => 'event_calendar', + 'sort_by' => 'priority', + 'class' => 'elgg-menu-hz', + )); + } - $tags = elgg_view('output/tags', array('tags' => $event->event_tags)); + $tags = elgg_view('output/tags', array('tags' => $event->tags)); $params = array( 'entity' => $event, -- cgit v1.2.3 From 804dfcf6c4b5b6380d607c8ec6b843d56ac82247 Mon Sep 17 00:00:00 2001 From: Kevin Jardine <kevinjardine@yahoo.com> Date: Mon, 26 Sep 2011 12:42:11 +0200 Subject: major changes for Elgg 1.8 --- CHANGES.txt | 4 + actions/event_calendar/add_to_group.php | 11 ++ actions/event_calendar/addtocalendar.php | 33 ++++ actions/event_calendar/edit.php | 4 +- actions/event_calendar/killrequest.php | 23 +++ actions/event_calendar/remove_from_group.php | 8 + .../event_calendar/toggle_personal_calendar.php | 32 ++++ delete_confirm.php | 36 ---- display_event_users.php | 42 ---- languages/en.php | 47 +++-- manage_event.php | 57 ------ manifest.xml | 26 ++- models/model.php | 110 ++++++++++- pages/review_requests.php | 33 ---- show_event.php | 60 ------ show_events.php | 213 --------------------- start.php | 78 ++++++-- views/default/event_calendar/calendar_toggle.php | 20 ++ views/default/event_calendar/css.php | 15 +- views/default/event_calendar/filter_menu.php | 1 + views/default/event_calendar/group_module.php | 48 ++--- .../event_calendar/groupprofile_calendar.php | 11 +- .../groupprofile_calendar_deprecated.php | 44 +++++ views/default/event_calendar/paged_item_view.php | 6 +- views/default/event_calendar/paged_view.php | 21 +- views/default/event_calendar/region_select.php | 10 +- views/default/event_calendar/review_requests.php | 21 +- views/default/event_calendar/show_events.php | 28 ++- views/default/js/event_calendar/event_calendar.php | 69 +++++++ views/default/object/event_calendar.php | 3 +- .../default/river/object/event_calendar/create.php | 18 +- .../default/river/object/event_calendar/update.php | 12 +- views/default/settings/event_calendar/edit.php | 71 +++---- 33 files changed, 596 insertions(+), 619 deletions(-) create mode 100644 actions/event_calendar/add_to_group.php create mode 100644 actions/event_calendar/addtocalendar.php create mode 100644 actions/event_calendar/killrequest.php create mode 100644 actions/event_calendar/remove_from_group.php create mode 100644 actions/event_calendar/toggle_personal_calendar.php delete mode 100644 delete_confirm.php delete mode 100644 display_event_users.php delete mode 100644 manage_event.php delete mode 100644 pages/review_requests.php delete mode 100644 show_event.php delete mode 100644 show_events.php create mode 100644 views/default/event_calendar/calendar_toggle.php create mode 100644 views/default/event_calendar/groupprofile_calendar_deprecated.php create mode 100644 views/default/js/event_calendar/event_calendar.php diff --git a/CHANGES.txt b/CHANGES.txt index 0a484cebe..269ede4ae 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,4 +1,8 @@ CHANGE LOG +0.85 + +First version for Elgg 1.8 + 0.84 Fixed tag search so it works for Elgg 1.7.x. diff --git a/actions/event_calendar/add_to_group.php b/actions/event_calendar/add_to_group.php new file mode 100644 index 000000000..b8c18ebb0 --- /dev/null +++ b/actions/event_calendar/add_to_group.php @@ -0,0 +1,11 @@ +<?php +$event_id = get_input("event_id",0); +$group_id = get_input("group_id",0); +$event = get_entity($event_id); +$group = get_entity($group_id); +if ($group && $group->canEdit()) { + add_entity_relationship($event_id, "display_on_group", $group_id ); + system_message(elgg_echo('event_calendar:add_to_group:success')); +} +forward($event->getUrl()); +?> \ No newline at end of file diff --git a/actions/event_calendar/addtocalendar.php b/actions/event_calendar/addtocalendar.php new file mode 100644 index 000000000..e5b689d73 --- /dev/null +++ b/actions/event_calendar/addtocalendar.php @@ -0,0 +1,33 @@ +<?php +// this action allows an admin or event owner to approve a calendar request + +elgg_load_library('elgg:event_calendar'); + +$user_guid = get_input('user_guid', elgg_get_logged_in_user_guid()); +$event_guid = get_input('event_guid'); + +$user = get_entity($user_guid); +$event = get_entity($event_guid); + +if (elgg_instanceof($event, 'object', 'event_calendar') + && elgg_instanceof($user, 'user') + && event_calendar_personal_can_manage($event,$user_guid) + && check_entity_relationship($user_guid, 'event_calendar_request', $event_guid)) { + + if (event_calendar_add_personal_event($event_guid,$user_guid)) { + remove_entity_relationship($user_guid, 'event_calendar_request', $event_guid); + notify_user($user_guid, $CONFIG->site->guid, elgg_echo('event_calendar:add_users_notify:subject'), + sprintf( + elgg_echo('event_calendar:add_users_notify:body'), + $user->name, + $event->title, + $event->getURL() + ) + ); + system_message(elgg_echo('event_calendar:request_approved')); + } +} else { + register_error(elgg_echo('event_calendar:review_requests:error:approve')); +} + +forward(REFERER); diff --git a/actions/event_calendar/edit.php b/actions/event_calendar/edit.php index 2365d3965..0cc956d73 100644 --- a/actions/event_calendar/edit.php +++ b/actions/event_calendar/edit.php @@ -29,9 +29,9 @@ if ($event) { } else { $event_calendar_autopersonal = elgg_get_plugin_setting('autopersonal', 'event_calendar'); if (!$event_calendar_autopersonal || ($event_calendar_autopersonal == 'yes')) { - event_calendar_add_personal_event($event_guid,$user_guid); + event_calendar_add_personal_event($event->guid,$user_guid); } - add_to_river('river/object/event_calendar/create','create',$user_guid,$event_guid); + add_to_river('river/object/event_calendar/create','create',$user_guid,$event->guid); system_message(elgg_echo('event_calendar:add_event_response')); } diff --git a/actions/event_calendar/killrequest.php b/actions/event_calendar/killrequest.php new file mode 100644 index 000000000..b58e804cd --- /dev/null +++ b/actions/event_calendar/killrequest.php @@ -0,0 +1,23 @@ +<?php +// this action allows an admin or event owner to reject a calendar request + +elgg_load_library('elgg:event_calendar'); + +$user_guid = get_input('user_guid', elgg_get_logged_in_user_guid()); +$event_guid = get_input('event_guid'); + +$user = get_entity($user_guid); +$event = get_entity($event_guid); + +if (elgg_instanceof($event, 'object', 'event_calendar') + && elgg_instanceof($user, 'user') + && event_calendar_personal_can_manage($event,$user_guid) + && check_entity_relationship($user_guid, 'event_calendar_request', $event_guid)) { + + remove_entity_relationship($user->guid, 'event_calendar_request', $event_guid); + system_message(elgg_echo('event_calendar:requestkilled')); +} else { + register_error(elgg_echo('event_calendar:review_requests:error:reject')); +} + +forward(REFERER); diff --git a/actions/event_calendar/remove_from_group.php b/actions/event_calendar/remove_from_group.php new file mode 100644 index 000000000..4a7185245 --- /dev/null +++ b/actions/event_calendar/remove_from_group.php @@ -0,0 +1,8 @@ +<?php +$event_id = get_input("event_id",0); +$group_id = get_input("group_id",0); +$event = get_entity($event_id); +remove_entity_relationship($event_id, "display_on_group", $group_id ); +system_message(elgg_echo('event_calendar:remove_from_group:success')); +forward($event->getUrl()); +?> \ No newline at end of file diff --git a/actions/event_calendar/toggle_personal_calendar.php b/actions/event_calendar/toggle_personal_calendar.php new file mode 100644 index 000000000..26192953f --- /dev/null +++ b/actions/event_calendar/toggle_personal_calendar.php @@ -0,0 +1,32 @@ +<?php +elgg_load_library('elgg:event_calendar'); +$event_guid = get_input('event_guid',0); +$user_guid = get_input('user_id',elgg_get_logged_in_user_guid()); +$other = get_input('other',''); +if ($other) { + $remove_response = elgg_echo('event_calendar:added_to_the_calendar'); + $add_response = elgg_echo('event_calendar:removed_from_the_calendar'); + $add_error = elgg_echo('event_calendar:add_to_the_calendar_error'); +} else { + $remove_response = elgg_echo('event_calendar:remove_from_my_calendar_response'); + $add_response = elgg_echo('event_calendar:add_to_my_calendar_response'); + $add_error = elgg_echo('event_calendar:add_to_my_calendar_error'); +} +// three character prefix to indicate success or failure + +if (event_calendar_has_personal_event($event_guid,$user_guid)) { + $button_text = elgg_echo('event_calendar:add_to_the_calendar'); + event_calendar_remove_personal_event($event_guid,$user_guid); + $response = array('success'=>TRUE, 'message' => $remove_response, 'button_text'=>$button_text); +} else { + if (event_calendar_add_personal_event($event_guid,$user_guid)) { + $button_text = elgg_echo('event_calendar:remove_from_the_calendar_button'); + $response = array('success'=>TRUE, 'message' => $add_response, 'button_text'=>$button_text); + } else { + $response = array('success'=>FALSE, 'message' =>$add_error); + } +} + +echo json_encode($response); + +exit; diff --git a/delete_confirm.php b/delete_confirm.php deleted file mode 100644 index 81bcd9118..000000000 --- a/delete_confirm.php +++ /dev/null @@ -1,36 +0,0 @@ -<?php - -/** - * Show event - * - * @package event_calendar - * @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.html GNU Public License version 2 - * @author Kevin Jardine <kevin@radagast.biz> - * @copyright Radagast Solutions 2008 - * @link http://radagast.biz/ - * - */ - -// Load Elgg engine -require_once(dirname(dirname(dirname(__FILE__))) . "/engine/start.php"); - -// Define context -set_context('event_calendar'); - -global $CONFIG; - -$event_id = get_input('event_id',0); -if ($event_id && ($event = get_entity($event_id))) { - set_page_owner($event->container_guid); - if (page_owner_entity() instanceOf ElggGroup) { - // Re-define context - set_context('groups'); - } - $body = elgg_view('event_calendar/forms/delete_confirm',array('event_id'=>$event_id,'title'=>$event->title)); - $title = elgg_echo('event_calendar:delete_confirm_title'); - page_draw($title,elgg_view_layout("two_column_left_sidebar", '', elgg_view_title($title) . $body)); -} else { - register_error('event_calendar:error_nosuchevent'); - forward(); -} -?> \ No newline at end of file diff --git a/display_event_users.php b/display_event_users.php deleted file mode 100644 index c5d06cd8f..000000000 --- a/display_event_users.php +++ /dev/null @@ -1,42 +0,0 @@ -<?php -/** - * Display users who have added a given event to their personal calendars - * - * @package event_calendar - * @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.html GNU Public License version 2 - * @author Kevin Jardine <kevin@radagast.biz> - * @copyright Radagast Solutions 2008 - * @link http://radagast.biz/ - * - */ - -// Load Elgg engine -require_once(dirname(dirname(dirname(__FILE__))) . "/engine/start.php"); - -// Load event calendar model -require_once(dirname(__FILE__) . "/models/model.php"); - -set_context('event_calendar'); -$limit = get_input('limit', 12); -$offset = get_input('offset', 0); -if (($event_id = get_input('event_id', 0)) && $event = get_entity($event_id)) { - $event_container = get_entity($event->container_guid); - if ($event_container instanceOf ElggGroup) { - // Re-define context - set_context('groups'); - set_page_owner($event_container->getGUID()); - } - set_input('search_viewtype','gallery'); - $count = event_calendar_get_users_for_event($event_id,$limit,$offset,true); - $users = event_calendar_get_users_for_event($event_id,$limit,$offset,false); - $body = event_calendar_view_entity_list($users, $count, $offset, $limit, true, false); - - $body .= elgg_view('event_calendar/personal_toggle_js'); - - $title = sprintf(elgg_echo('event_calendar:users_for_event_title'),$event->title); - page_draw($title,elgg_view_layout("two_column_left_sidebar", '', elgg_view_title($title) . $body)); -} else { - register_error('event_calendar:error_nosuchevent'); - forward(); -} -?> \ No newline at end of file diff --git a/languages/en.php b/languages/en.php index 26312af25..5aa96adee 100644 --- a/languages/en.php +++ b/languages/en.php @@ -74,14 +74,19 @@ ."(Perhaps the event is full or is scheduled at the same time as another event in your personal calendar?)", 'event_calendar:remove_from_my_calendar_response' => "This event has been removed from your personal calendar.", 'event_calendar:add_to_the_calendar' => "Add to calendar", - 'event_calendar:remove_from_the_calendar' => "Remove from calendar", + 'event_calendar:remove_from_the_calendar' => "Remove", + 'event_calendar:remove_from_the_calendar_button' => "Remove from calendar", + 'event_calendar:added_to_the_calendar' => "Added to calendar", + 'event_calendar:removed_from_the_calendar' => "Removed calendar", 'event_calendar:add_to_the_calendar_response' => "Event added to this person's calendar.", 'event_calendar:add_to_the_calendar_error' => "This event could not added to this person's calendar. " ."(Perhaps the event is full or is scheduled at the same time as another event in this person's calendar?)", 'event_calendar:remove_from_the_calendar_response' => "Event removed from this person's calendar.", - 'event_calendar:users_for_event_title' => "People interested in event \"%s\"", - 'event_calendar:personal_event_calendars_link' => "Personal event calendars (%s)", + 'event_calendar:users_for_event_menu_title' => "People listing this event on their personal calendars", + 'event_calendar:users_for_event_title' => "Personal calendars for \"%s'\"", + 'event_calendar:personal_event_calendars_link' => "Calendars (%s)", + 'event_calendar:users_for_event_breadcrumb' => "Personal calendars", 'event_calendar:settings:group_profile_display:title' => "Group calendar profile display (if group calendars are enabled)", 'event_calendar:settings:group_profile_display_option:left' => "left column", 'event_calendar:settings:group_profile_display_option:right' => "right column", @@ -112,7 +117,7 @@ 'event_calendar:type_label' => "Type of event", 'event_calendar:type_description' => "Select the type of event.", 'event_calendar:all' => "All", - 'event_calendar:region_filter_by_label' => "Filter by region:", + 'event_calendar:region_filter_by_label' => "Filter by region: ", 'event_calendar:settings:first_date:title' => "First allowable date (in YYYY-MM-DD format)", 'event_calendar:settings:last_date:title' => "Last allowable date (in YYYY-MM-DD format)", 'event_calendar:enable_event_calendar' => "Enable group event calendar", @@ -125,6 +130,7 @@ 'event_calendar:agenda:column:venue' => "Location", 'event_calendar:upcoming_events_title' => "Upcoming events", 'event_calendar:settings:paged' => "paged", + 'event_calendar:settings:agenda' => "agenda", 'event_calendar:settings:month' => "by month", 'event_calendar:settings:listing_format:title' => "Event listing format", 'event_calendar:paged:column:date' => "Date", @@ -158,23 +164,31 @@ 'event_calendar:request_event_response' => "Your request to be added to this event has been sent.", 'event_calendar:request_event_error' => "Error: Could not send your request to be added to this event.", 'event_calendar:request_subject' => "You have received an event request", - 'event_calendar:request_message' => " %s has asked to have the event \"%s\", here: - - %s - - added to his/her personal calendar. - - You can manage calendar requests here: - - %s", + 'event_calendar:request_message' => "%s has asked to have the event \"%s\", here: + +%s + +added to his/her personal calendar. + +You can manage calendar requests for this event here: + +%s +", 'event_calendar:review_requests_error' => "This event either does not exist or you do not have the authority to approve requests for it.", 'event_calendar:review_requests_request_none' => "There are no requests to review for this event.", 'event_calendar:request:remove:check' => 'Are you sure you want to reject this request?', - 'event_calendar:requestkilled' => 'The request has been removed.', + 'event_calendar:requestkilled' => 'This request has been rejected.', 'event_calendar:request_approved' => "This request has been approved.", - 'event_calendar:review_requests_title' => 'Review requests', + 'event_calendar:review_requests_title' => "Review requests for \"%s\"", + 'event_calendar:review_requests_menu_title' => "Review requests", 'event_calendar:make_request_title' => 'Request this event', + 'event_calendar:review_requests:reject' => "Reject", + 'event_calendar:review_requests:reject:title' => "Reject this request", + 'event_calendar:review_requests:accept' => "Accept", + 'event_calendar:review_requests:accept:title' => "Accept this request", + 'event_calendar:review_requests:error:approve' => "Error: could not approve this request.", + 'event_calendar:review_requests:error:reject' => "Error: could not reject this request.", 'event_calendar:settings:hide_access:title' => "Hide event access drop down", 'event_calendar:settings:default_access:title' => "If the event access is hidden, what should it default to?", @@ -200,6 +214,9 @@ **/ //generic terms to use + + 'river:update:object:event_calendar' => "%s updated the event %s", + 'river:create:object:event_calendar' => "%s added the event %s", 'event_calendar:river:created' => "%s added", 'event_calendar:river:updated' => "%s updated", 'event_calendar:river:annotated1' => "%s added", diff --git a/manage_event.php b/manage_event.php deleted file mode 100644 index 0464a31df..000000000 --- a/manage_event.php +++ /dev/null @@ -1,57 +0,0 @@ -<?php - -/** - * Manage event - * - * @package event_calendar - * @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.html GNU Public License version 2 - * @author Kevin Jardine <kevin@radagast.biz> - * @copyright Radagast Solutions 2008 - * @link http://radagast.biz/ - * - */ - -// Load Elgg engine -require_once(dirname(dirname(dirname(__FILE__))) . "/engine/start.php"); - -// Load event calendar model -require_once(dirname(__FILE__) . "/models/model.php"); - -// Define context -set_context('event_calendar'); - -global $CONFIG; - -gatekeeper(); - -$event = ''; - -$group_guid = (int) get_input('group_guid',0); - -if ($event_id = get_input('event_id',0)) { - $event = event_calendar_get_event_for_edit($event_id); - if (!$event) { - register_error(elgg_echo('event_calendar:no_such_event_edit_error')); - forward(); - } else { - set_page_owner($event->container_guid); - if (page_owner_entity() instanceof ElggGroup) { - set_context('groups'); - } - } - - $title = elgg_echo('event_calendar:manage_event_title'); -} else { - $title = elgg_echo('event_calendar:add_event_title'); - if ($group_guid && $group = get_entity($group_guid)) { - // redefine context - set_context('groups'); - set_page_owner($group_guid); - } -} - -$body = elgg_view('event_calendar/forms/manage_event', array('event'=>$event,'event_id'=>$event_id,'group_guid'=>$group_guid)); - -page_draw($title,elgg_view_layout("two_column_left_sidebar", '', elgg_view_title($title) . $body)); - -?> \ No newline at end of file diff --git a/manifest.xml b/manifest.xml index dcbebc48a..62cfeacf9 100644 --- a/manifest.xml +++ b/manifest.xml @@ -1,10 +1,18 @@ <?xml version="1.0" encoding="UTF-8"?> -<plugin_manifest> - <field key="author" value="Kevin Jardine <kevin@radagast.biz>" /> - <field key="version" value="0.81" /> - <field key="description" value="Elgg event calendar plugin" /> - <field key="website" value="http://radagast.biz/" /> - <field key="copyright" value="(C) Radagast Solutions 2009-2011" /> - <field key="licence" value="GNU Public License version 2" /> - <field key="elgg_version" value="2009030101" /> -</plugin_manifest> +<plugin_manifest xmlns="http://www.elgg.org/plugin_manifest/1.8"> + <name>Event Calendar</name> + <author>Kevin Jardine <kevin@radagast.biz></author> + <version>0.85</version> + <category>third-party</category> + <category>content</category> + <category>widget</category> + <blurb>Event calendar</blurb> + <description>Adds configurable group and/or site-wide event calendars.</description> + <website>http://radagast.biz/</website> + <copyright>(C) Radagast Solutions 2009-2011</copyright> + <license>GNU Public License version 2</license> + <requires> + <type>elgg_version</type> + <version>2010030101</version> + </requires> +</plugin_manifest> \ No newline at end of file diff --git a/models/model.php b/models/model.php index 52fd472b3..c887cc7b0 100644 --- a/models/model.php +++ b/models/model.php @@ -78,7 +78,7 @@ function event_calendar_set_event_from_form($event_guid,$group_guid) { $event->description = get_input('description'); $event->venue = get_input('venue'); $event->start_date = get_input('start_date'); - $event->end_date = get_input('end_date'); + $event->end_date = get_input('end_date',''); if ($event_calendar_times == 'yes') { $sh = get_input('start_time_h',''); @@ -1004,17 +1004,16 @@ function event_calendar_personal_can_manage($event,$user_id) { return $authorised; } -function event_calendar_send_event_request($event,$user_id) { - global $CONFIG; +function event_calendar_send_event_request($event,$user_guid) { $result = FALSE; - if(add_entity_relationship($user_id, 'event_calendar_request', $event->guid)) { + if(add_entity_relationship($user_guid, 'event_calendar_request', $event->guid)) { $subject = elgg_echo('event_calendar:request_subject'); - $name = get_entity($user_id)->name; + $name = get_entity($user_guid)->name; $title = $event->title; $url = $event->getUrl(); - $link = $CONFIG->wwwroot.'pg/event_calendar/review_requests/'.$event->guid; + $link = elgg_get_site_url().'event_calendar/review_requests/'.$event->guid; $message = sprintf(elgg_echo('event_calendar:request_message'),$name,$title,$url,$link); - notify_user($event->owner_guid,$CONFIG->site->guid,$subject,$message); + notify_user($event->owner_guid,elgg_get_site_entity()->guid,$subject,$message); $result = TRUE; } return $result; @@ -1033,7 +1032,7 @@ function event_calendar_get_page_content_list($page_type,$group_guid,$start_date $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()->canWriteToContainer($user_guid)){ + if (elgg_get_page_owner_entity()->canWriteToContainer($user_guid)){ elgg_register_menu_item('title', array( 'name' => 'add', 'href' => "event_calendar/add/".$group_guid, @@ -1339,6 +1338,7 @@ function event_calendar_get_page_content_view($event_guid) { $content = elgg_echo('event_calendar:error_nosuchevent'); $title = elgg_echo('event_calendar:generic_error_title'); } else { + event_calendar_handle_menu($event_guid); $title = htmlspecialchars($event->title); $event_container = get_entity($event->container_guid); if (elgg_instanceof($event_container, 'group')) { @@ -1362,6 +1362,100 @@ function event_calendar_get_page_content_view($event_guid) { return elgg_view_page($title,$body); } +function event_calendar_get_page_content_display_users($event_guid) { + elgg_load_js('elgg.event_calendar'); + $event = get_entity($event_guid); + + if (!elgg_instanceof($event, 'object', 'event_calendar')) { + $content = elgg_echo('event_calendar:error_nosuchevent'); + $title = elgg_echo('event_calendar:generic_error_title'); + } else { + event_calendar_handle_menu($event_guid); + $title = elgg_echo('event_calendar:users_for_event_title',array(htmlspecialchars($event->title))); + $event_container = get_entity($event->container_guid); + if (elgg_instanceof($event_container, 'group')) { + elgg_push_context('groups'); + elgg_set_page_owner_guid($event->container_guid); + elgg_push_breadcrumb(elgg_echo('event_calendar:group_breadcrumb'), 'event_calendar/group/'.$event->container_guid); + } else { + elgg_push_breadcrumb(elgg_echo('event_calendar:show_events_title'),'event_calendar/list'); + } + elgg_push_breadcrumb($event->title,$event->getURL()); + elgg_push_breadcrumb(elgg_echo('event_calendar:users_for_event_breadcrumb')); + $limit = 12; + $offset = get_input('offset', 0); + $users = event_calendar_get_users_for_event($event_guid,$limit,$offset,false); + $options = array( + 'full_view' => FALSE, + 'list_type_toggle' => FALSE, + 'limit'=>$limit, + 'event_calendar_event'=>$event, + ); + elgg_extend_view('user/default','event_calendar/calendar_toggle'); + $content = elgg_view_entity_list($users,$options); + } + $params = array('title' => $title, 'content' => $content,'filter' => ''); + + $body = elgg_view_layout("content", $params); + + return elgg_view_page($title,$body); +} + +function event_calendar_get_page_content_review_requests($event_guid) { + $event = get_entity($event_guid); + + if (!elgg_instanceof($event, 'object', 'event_calendar')) { + $content = elgg_echo('event_calendar:error_nosuchevent'); + $title = elgg_echo('event_calendar:generic_error_title'); + } else { + event_calendar_handle_menu($event_guid); + $title = elgg_echo('event_calendar:review_requests_title',array(htmlspecialchars($event->title))); + $event_container = get_entity($event->container_guid); + if (elgg_instanceof($event_container, 'group')) { + elgg_push_context('groups'); + elgg_set_page_owner_guid($event->container_guid); + elgg_push_breadcrumb(elgg_echo('event_calendar:group_breadcrumb'), 'event_calendar/group/'.$event->container_guid); + } else { + elgg_push_breadcrumb(elgg_echo('event_calendar:show_events_title'),'event_calendar/list'); + } + elgg_push_breadcrumb($event->title,$event->getURL()); + elgg_push_breadcrumb(elgg_echo('event_calendar:review_requests_menu_title')); + $user_guid = elgg_get_logged_in_user_guid(); + + if (event_calendar_personal_can_manage($event,$user_guid)) { + $requests = elgg_get_entities_from_relationship( + array( + 'relationship' => 'event_calendar_request', + 'relationship_guid' => $event_guid, + 'inverse_relationship' => TRUE, + 'limit' => 0) + ); + if ($requests) { + $content = elgg_view('event_calendar/review_requests',array('requests' => $requests, 'entity' => $event)); + } else { + $content = elgg_echo('event_calendar:review_requests_request_none'); + } + } else { + $content = elgg_echo('event_calendar:review_requests_error'); + } + } + $params = array('title' => $title, 'content' => $content,'filter' => ''); + + $body = elgg_view_layout("content", $params); + + return elgg_view_page($title,$body); +} + +function event_calendar_handle_menu($event_guid) { + $event_calendar_personal_manage = elgg_get_plugin_setting('personal_manage', 'event_calendar'); + if ($event_calendar_personal_manage == 'no') { + $url = "event_calendar/review_requests/$event_guid"; + $item = new ElggMenuItem('event-calendar-menu', elgg_echo('event_calendar:review_requests_menu_title'), $url); + elgg_register_menu_item('page', $item); + //add_submenu_item(elgg_echo('event_calendar:review_requests_title'), $CONFIG->wwwroot . "pg/event_calendar/review_requests/".$event_id, '0eventcalendaradmin'); + } +} + function getLastDayOfMonth($month,$year) { return idate('d', mktime(0, 0, 0, ($month + 1), 0, $year)); } diff --git a/pages/review_requests.php b/pages/review_requests.php deleted file mode 100644 index fc6c3726a..000000000 --- a/pages/review_requests.php +++ /dev/null @@ -1,33 +0,0 @@ -<?php - -gatekeeper(); - -$event_id = get_input('event_id',0); - -$title = elgg_echo('event_calendar:review_requests_title'); - -$event = get_entity($event_id); -$user_id = get_loggedin_userid(); - -if (event_calendar_personal_can_manage($event,$user_id)) { - $requests = elgg_get_entities_from_relationship( - array( - 'relationship' => 'event_calendar_request', - 'relationship_guid' => $event_id, - 'inverse_relationship' => TRUE, - 'limit' => 9999) - ); - if ($requests) { - $body = elgg_view('event_calendar/review_requests',array('requests' => $requests, 'entity' => $event)); - //$body = elgg_view('page_elements/contentwrapper',array('body'=>$body)); - } else { - $body = elgg_view('page_elements/contentwrapper',array('body'=>elgg_echo('event_calendar:review_requests_request_none'))); - } -} else { - $body = elgg_view('page_elements/contentwrapper',array('body'=>elgg_echo('event_calendar:review_requests_error'))); -} - -$body = elgg_view_layout('two_column_left_sidebar', '', elgg_view_title($title).$body); - -page_draw($title, $body); -?> \ No newline at end of file diff --git a/show_event.php b/show_event.php deleted file mode 100644 index f2869c36d..000000000 --- a/show_event.php +++ /dev/null @@ -1,60 +0,0 @@ -<?php - -/** - * Show event - * - * @package event_calendar - * @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.html GNU Public License version 2 - * @author Kevin Jardine <kevin@radagast.biz> - * @copyright Radagast Solutions 2008 - * @link http://radagast.biz/ - * - */ - -// Load Elgg engine -require_once(dirname(dirname(dirname(__FILE__))) . "/engine/start.php"); - -// Load event calendar model -require_once(dirname(__FILE__) . "/models/model.php"); - -// Define context -set_context('event_calendar'); - -global $CONFIG; - -$event_id = get_input('event_id',0); -if ($event_id && ($event = get_entity($event_id))) { - $event_container = get_entity($event->container_guid); - if ($event_container instanceOf ElggGroup) { - // Re-define context - set_context('groups'); - set_page_owner($event_container->getGUID()); - } - $count = event_calendar_get_users_for_event($event_id,0,0,true); - if ($count > 0) { - add_submenu_item(sprintf(elgg_echo('event_calendar:personal_event_calendars_link'),$count), $CONFIG->url . "mod/event_calendar/display_event_users.php?event_id=".$event_id, '0eventnonadmin'); - } - if (isloggedin()) { - $user_id = get_loggedin_userid(); - if (event_calendar_personal_can_manage($event,$user_id)) { - if (event_calendar_has_personal_event($event_id,$user_id)) { - add_submenu_item(elgg_echo('event_calendar:remove_from_my_calendar'), $CONFIG->url . "action/event_calendar/manage?event_action=remove_personal&event_id=".$event_id.'&'.event_calendar_security_fields(), '0eventnonadmin'); - } else { - if (!event_calendar_is_full($event_id) && !event_calendar_has_collision($event_id,$user_id)) { - add_submenu_item(elgg_echo('event_calendar:add_to_my_calendar'), $CONFIG->url . "action/event_calendar/manage?event_action=add_personal&event_id=".$event_id.'&'.event_calendar_security_fields(), '0eventnonadmin'); - } - } - } else { - if (!check_entity_relationship($user_id, 'event_calendar_request', $event_id)) { - add_submenu_item(elgg_echo('event_calendar:make_request_title'), $CONFIG->url . "action/event_calendar/request_personal_calendar?event_id=".$event_id.'&'.event_calendar_security_fields(), '0eventnonadmin'); - } - } - } - $body = elgg_view('object/event_calendar',array('entity'=>$event,'full'=>true)); - $title = $event->title; - page_draw($title,elgg_view_layout("two_column_left_sidebar", '', elgg_view_title($title) . $body)); -} else { - register_error('event_calendar:error_nosuchevent'); - forward(); -} -?> \ No newline at end of file diff --git a/show_events.php b/show_events.php deleted file mode 100644 index d3cd8c76a..000000000 --- a/show_events.php +++ /dev/null @@ -1,213 +0,0 @@ -<?php - -/** - * Show events - * - * @package event_calendar - * @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.html GNU Public License version 2 - * @author Kevin Jardine <kevin@radagast.biz> - * @copyright Radagast Solutions 2008 - * @link http://radagast.biz/ - * - */ - -// Load Elgg engine -require_once(dirname(dirname(dirname(__FILE__))) . "/engine/start.php"); - -// Load event model -require_once(dirname(__FILE__) . "/models/model.php"); - -// Define context -set_context('event_calendar'); - -global $CONFIG; - -global $autofeed; -$autofeed = true; - -$event = ''; - -$event_calendar_listing_format = get_plugin_setting('listing_format', 'event_calendar'); -$event_calendar_spots_display = trim(get_plugin_setting('spots_display', 'event_calendar')); -$event_calendar_first_date = trim(get_plugin_setting('first_date', 'event_calendar')); -$event_calendar_last_date = trim(get_plugin_setting('last_date', 'event_calendar')); - -$original_start_date = get_input('start_date',date('Y-m-d')); -if ( $event_calendar_first_date && ($original_start_date < $event_calendar_first_date) ) { - $original_start_date = $event_calendar_first_date; -} -if ( $event_calendar_last_date && ($original_start_date > $event_calendar_last_date) ) { - $original_start_date = $event_calendar_first_date; -} - -if ($event_calendar_listing_format == 'paged') { - $start_ts = strtotime($original_start_date); - $start_date = $original_start_date; - if ($event_calendar_last_date) { - $end_ts = strtotime($event_calendar_last_date); - } else { - // set to a large number - $end_ts = 2000000000; - } -} else { - - // the default interval is one month - $day = 60*60*24; - $week = 7*$day; - $month = 31*$day; - - $mode = trim(get_input('mode','')); - - if ($mode == "day") { - $start_date = $original_start_date; - $end_date = $start_date; - $start_ts = strtotime($start_date); - $end_ts = strtotime($end_date)+$day-1; - } else if ($mode == "week") { - // need to adjust start_date to be the beginning of the week - $start_ts = strtotime($original_start_date); - $start_ts -= date("w",$start_ts)*$day; - $end_ts = $start_ts + 6*$day; - - $start_date = date('Y-m-d',$start_ts); - $end_date = date('Y-m-d',$end_ts); - } else { - $start_ts = strtotime($original_start_date); - $month = date('m',$start_ts); - $year = date('Y',$start_ts); - $start_date = $year.'-'.$month.'-1'; - $end_date = $year.'-'.$month.'-'.getLastDayOfMonth($month,$year); - //$subtitle = elgg_echo('event_calendar:month_label').': '.date('F Y',$start_ts); - // RIBA wants month prefix removed - } - - if ($event_calendar_first_date && ($start_date < $event_calendar_first_date)) { - $start_date = $event_calendar_first_date; - } - - if ($event_calendar_last_date && ($end_date > $event_calendar_last_date)) { - $end_date = $event_calendar_last_date; - } - - $start_ts = strtotime($start_date); - - if ($mode == "day") { - $end_ts = strtotime($end_date)+$day-1; - $subtitle = elgg_echo('event_calendar:day_label').': '.date('j F Y',strtotime($start_date)); - } else if ($mode == "week") { - $end_ts = $start_ts + 6*$day; - $subtitle = elgg_echo('event_calendar:week_label').': '.date('j F',$start_ts) . ' - '.date('j F Y',$end_ts); - } else { - //$subtitle = elgg_echo('event_calendar:month_label').': '.date('F Y',$start_ts); - // RIBA wants month prefix removed - $end_ts = strtotime($end_date); - $subtitle = date('F Y',$start_ts); - } -} - -$group_guid = (int) get_input('group_guid',0); -if ($group_guid && $group = get_entity($group_guid)) { - // redefine context - set_context('groups'); - set_page_owner($group_guid); - $group_calendar = get_plugin_setting('group_calendar', 'event_calendar'); - if (!$group_calendar || $group_calendar == 'members') { - if (page_owner_entity()->canWriteToContainer($_SESSION['user'])){ - add_submenu_item(elgg_echo('event_calendar:new'), $CONFIG->url . "pg/event_calendar/new/?group_guid=" . page_owner(), '1eventcalendaradmin'); - } - } else if ($group_calendar == 'admin') { - if (isadminloggedin() || ($group->owner_guid == get_loggedin_userid())) { - add_submenu_item(elgg_echo('event_calendar:new'), $CONFIG->url . "pg/event_calendar/new/?group_guid=" . page_owner(), '1eventcalendaradmin'); - } - } -} - -$offset = get_input('offset'); - -if ($offset != NULL) { - // don't allow ajax magic during pagination - $offset = (int) $offset; - $callback=''; -} else { - $offset = 0; - $callback = get_input('callback',''); -} - -$limit = 15; -if ($event_calendar_spots_display == 'yes') { - $filter = get_input('filter','open'); -} else { - $filter = get_input('filter','all'); -} -$region = get_input('region','-'); -if ($filter == 'all') { - $count = event_calendar_get_events_between($start_ts,$end_ts,true,$limit,$offset,$group_guid,$region); - $events = event_calendar_get_events_between($start_ts,$end_ts,false,$limit,$offset,$group_guid,$region); -} else if ($filter == 'open') { - $count = event_calendar_get_open_events_between($start_ts,$end_ts,true,$limit,$offset,$group_guid,$region); - $events = event_calendar_get_open_events_between($start_ts,$end_ts,false,$limit,$offset,$group_guid,$region); -} else if ($filter == 'friends') { - $user_guid = get_loggedin_userid(); - $count = event_calendar_get_events_for_friends_between($start_ts,$end_ts,true,$limit,$offset,$user_guid,$group_guid,$region); - $events = event_calendar_get_events_for_friends_between($start_ts,$end_ts,false,$limit,$offset,$user_guid,$group_guid,$region); -} else if ($filter == 'mine') { - $user_guid = get_loggedin_userid(); - $count = event_calendar_get_events_for_user_between($start_ts,$end_ts,true,$limit,$offset,$user_guid,$group_guid,$region); - $events = event_calendar_get_events_for_user_between($start_ts,$end_ts,false,$limit,$offset,$user_guid,$group_guid,$region); -} - -elgg_extend_view('metatags','event_calendar/metatags'); - -$vars = array( 'original_start_date' => $original_start_date, - 'start_date' => $start_date, - 'end_date' => $end_date, - 'first_date' => $event_calendar_first_date, - 'last_date' => $event_calendar_last_date, - 'mode' => $mode, - 'events' => $events, - 'count' => $count, - 'offset' => $offset, - 'limit' => $limit, - 'group_guid' => $group_guid, - 'filter' => $filter, - 'region' => $region, - 'listing_format' => $event_calendar_listing_format, -); - -if ($callback) { - if (isloggedin()) { - $nav = elgg_view('event_calendar/nav',$vars); - } else { - $nav = ''; - } - if ($events) { - if (get_plugin_setting('agenda_view', 'event_calendar') == 'yes') { - $event_list = elgg_view('event_calendar/agenda_view',$vars); - } else { - $event_list = elgg_view_entity_list($events, $count, $offset, $limit, false, false); - } - } else { - $event_list = '<p>'.elgg_echo('event_calendar:no_events_found').'</p>'; - } - echo $nav.'<br />'.$event_list; -} else { - - $body = elgg_view('event_calendar/show_events', $vars); - - if ($event_calendar_listing_format == 'paged') { - $title = elgg_echo('event_calendar:upcoming_events_title'); - } else { - $title = elgg_echo('event_calendar:show_events_title'). ' ('.$subtitle.')'; - } - - $body = elgg_view('page_elements/contentwrapper',array('body' =>$body, 'subclass' => 'events')); - - page_draw($title,elgg_view_layout("two_column_left_sidebar", '', elgg_view_title($title).$body)); -} - -function getLastDayOfMonth($month,$year) { - return idate('d', mktime(0, 0, 0, ($month + 1), 0, $year)); -} - - -?> \ No newline at end of file diff --git a/start.php b/start.php index 330f10092..3bf28c7d3 100644 --- a/start.php +++ b/start.php @@ -40,17 +40,23 @@ function event_calendar_init() { if (function_exists('elgg_register_tag_metadata_name')) { elgg_register_tag_metadata_name('event_tags'); } + + // register the plugin's JavaScript + $plugin_js = elgg_get_simplecache_url('js', 'event_calendar/event_calendar'); + elgg_register_js('elgg.event_calendar', $plugin_js); //add to group profile page // TODO - are the left and right values still relevant for Elgg 1.8? $group_calendar = elgg_get_plugin_setting('group_calendar', 'event_calendar'); if (!$group_calendar || $group_calendar != 'no') { + // add blog link to + elgg_register_plugin_hook_handler('register', 'menu:owner_block', 'event_calendar_owner_block_menu'); $group_profile_display = elgg_get_plugin_setting('group_profile_display', 'event_calendar'); if (!$group_profile_display || $group_profile_display == 'right') { //elgg_extend_view('groups/right_column', 'event_calendar/groupprofile_calendar'); - elgg_extend_view('groups/tool_latest', 'event_calendar/groupprofile_calendar'); + elgg_extend_view('groups/tool_latest', 'event_calendar/group_module'); } else if ($group_profile_display == 'left') { - elgg_extend_view('groups/tool_latest', 'event_calendar/groupprofile_calendar'); + elgg_extend_view('groups/tool_latest', 'event_calendar/group_module'); //elgg_extend_view('groups/left_column', 'event_calendar/groupprofile_calendar'); } } @@ -94,6 +100,21 @@ function event_calendar_init() { } +/** + * Add a menu item to an ownerblock + */ +function event_calendar_owner_block_menu($hook, $type, $return, $params) { + if (elgg_instanceof($params['entity'], 'group')) { + if ($params['entity']->event_calendar_enable != "no") { + $url = "event_calendar/group/{$params['entity']->guid}"; + $item = new ElggMenuItem('event_calendar', elgg_echo('event_calendar:group'), $url); + $return[] = $item; + } + } + + return $return; +} + // TODO: delete this once everything is recoded function event_calendar_pagesetup() { @@ -156,13 +177,14 @@ function event_calendar_url($entity) { * Dispatches event calendar pages. * * URLs take the form of - * Site event calendar: event_calendar/list/<start_date>/<display_mode>/<filter_context>/<region> - * Single event: event_calendar/view/<event_guid>/<title> - * New event: event_calendar/add - * Edit event: event_calendar/edit/<event_guid> - * Group event calendar: event_calendar/group/<group_guid>/<start_date>/<display_mode> - * Add group event: event_calendar/add/<group_guid> - * Review requests: event_calendar/review_requests/<event_guid> + * Site event calendar: event_calendar/list/<start_date>/<display_mode>/<filter_context>/<region> + * Single event: event_calendar/view/<event_guid>/<title> + * New event: event_calendar/add + * Edit event: event_calendar/edit/<event_guid> + * Group event calendar: event_calendar/group/<group_guid>/<start_date>/<display_mode>/<filter_context>/<region> + * Add group event: event_calendar/add/<group_guid> + * Review requests: event_calendar/review_requests/<event_guid> + * Display event subscribers: event_calendar/display_users/<event_guid> * * Title is ignored * @@ -200,6 +222,9 @@ function event_calendar_page_handler($page) { case 'view': echo event_calendar_get_page_content_view($page[1]); break; + case 'display_users': + echo event_calendar_get_page_content_display_users($page[1]); + break; case 'add': if (isset($page[1])) { group_gatekeeper(); @@ -221,7 +246,17 @@ function event_calendar_page_handler($page) { if (isset($page[2])) { $start_date = $page[2]; if (isset($page[3])) { - $display_mode = $page[3]; + $display_mode = $page[2]; + if (isset($page[3])) { + $filter_mode = $page[3]; + if (isset($page[4])) { + $region = $page[4]; + } else { + $region = ''; + } + } else { + $filter_mode = ''; + } } else { $display_mode = ''; } @@ -231,11 +266,11 @@ function event_calendar_page_handler($page) { } else { $group_guid = 0; } - echo event_calendar_get_page_content_list($page_type,$group_guid,$start_date,$display_mode,''); + echo event_calendar_get_page_content_list($page_type,$group_guid,$start_date,$display_mode,$filter_mode,$region); break; case 'review_requests': gatekeeper(); - $params = event_calendar_get_page_content_review_requests($page_type, $page[1], $page[2]); + echo event_calendar_get_page_content_review_requests($page[1]); break; } } @@ -276,7 +311,7 @@ function event_calendar_entity_menu_setup($hook, $type, $return, $params) { $return[] = ElggMenuItem::factory($options); } } } else { - if (!check_entity_relationship($user_guid, 'event_calendar_request', $entity->guid)) { + if (!event_calendar_has_personal_event($entity->guid,$user_guid) && !check_entity_relationship($user_guid, 'event_calendar_request', $entity->guid)) { $options = array( 'name' => 'personal_calendar', 'text' => elgg_echo('event_calendar:make_request_title'), @@ -287,6 +322,23 @@ function event_calendar_entity_menu_setup($hook, $type, $return, $params) { $return[] = ElggMenuItem::factory($options); } } + + $options = array( + 'name' => 'calendar_listing', + 'text' => elgg_echo('event_calendar:personal_event_calendars_link',array(event_calendar_get_users_for_event($entity->guid,0,0,true))), + 'title' => elgg_echo('event_calendar:users_for_event_menu_title'), + 'href' => "event_calendar/display_users/{$entity->guid}", + 'priority' => 150, + ); + $return[] = ElggMenuItem::factory($options); + + /*if (elgg_is_admin_logged_in() && (elgg_get_plugin_setting('allow_featured', 'event_calendar') == 'yes')) { + if ($event->featured) { + add_submenu_item(elgg_echo('event_calendar:unfeature'), $CONFIG->url . "action/event_calendar/unfeature?event_id=".$event_id.'&'.event_calendar_security_fields(), 'eventcalendaractions'); + } else { + add_submenu_item(elgg_echo('event_calendar:feature'), $CONFIG->url . "action/event_calendar/feature?event_id=".$event_id.'&'.event_calendar_security_fields(), 'eventcalendaractions'); + } + }*/ return $return; } diff --git a/views/default/event_calendar/calendar_toggle.php b/views/default/event_calendar/calendar_toggle.php new file mode 100644 index 000000000..7180dec75 --- /dev/null +++ b/views/default/event_calendar/calendar_toggle.php @@ -0,0 +1,20 @@ +<?php +$event = $vars['event_calendar_event']; +$user = $vars['entity']; +$container = get_entity($event->container_guid); + +if ($container->canEdit()) { + $link = '<p class="event-calendar-personal-calendar-toggle"><a href="javascript:void(0);" '; + $link .= 'onclick="javascript:event_calendar_personal_toggle('.$event->guid.','.$vars['entity']->guid.'); return false;" '; + $link .= ' >'; + $link .= '<span id="event_calendar_user_data_'.$vars['entity']->guid.'">'.elgg_echo('event_calendar:remove_from_the_calendar').'</span>'; + $link .= '</a></p>'; + + $button = elgg_view('input/button',array( + 'id'=>'event_calendar_user_data_'.$event->guid.'_'.$user->guid, + 'class' => "event-calendar-personal-calendar-toggle", + 'value' => elgg_echo('event_calendar:remove_from_the_calendar_button'), + )); +} + +echo '<div class="event-calendar-personal-calendar-toggle-wrapper">'.$button.'<div>'; diff --git a/views/default/event_calendar/css.php b/views/default/event_calendar/css.php index 7e399c547..2059a3ea9 100644 --- a/views/default/event_calendar/css.php +++ b/views/default/event_calendar/css.php @@ -8,7 +8,7 @@ $highlight_colour = '#3874B7'; #calendarmenucontainer { position:relative; - left: 40px; + left: 25px; } ul#calendarmenu li { @@ -117,6 +117,10 @@ td.event_calendar_paged_title { width: 280px; } +td.event_calendar_paged_calendar { + padding-left: 30px; +} + table.event_calendar_paged_table { width:100%; border-collapse:collapse; @@ -144,4 +148,13 @@ table.event_calendar_paged_table th { .event_calendar_strapline { font-size: 85%; +} + +.event-calendar-personal-calendar-toggle-wrapper { + width: 100%; + margin-bottom: 30px; +} + +.event-calendar-personal-calendar-toggle { + float: right; } \ No newline at end of file diff --git a/views/default/event_calendar/filter_menu.php b/views/default/event_calendar/filter_menu.php index 62d38939b..2d4805bd4 100644 --- a/views/default/event_calendar/filter_menu.php +++ b/views/default/event_calendar/filter_menu.php @@ -49,6 +49,7 @@ echo elgg_view_menu('filter', array('sort_by' => 'priority', 'class' => 'elgg-me $event_calendar_region_display = elgg_get_plugin_setting('region_display', 'event_calendar'); if ($event_calendar_region_display == 'yes') { + elgg_load_js("elgg.event_calendar"); $url_start .= "/$filter_context"; echo elgg_view('event_calendar/region_select',array('url_start'=>$url_start,'region'=>$vars['region'])); } \ No newline at end of file diff --git a/views/default/event_calendar/group_module.php b/views/default/event_calendar/group_module.php index 5fc644e8b..b1c1567e7 100644 --- a/views/default/event_calendar/group_module.php +++ b/views/default/event_calendar/group_module.php @@ -9,35 +9,29 @@ if ($group->event_calendar_enable == "no") { return true; } -$all_link = elgg_view('output/url', array( - 'href' => "event_calendar/group/$group->guid/all", - 'text' => elgg_echo('link:view:all'), -)); - elgg_push_context('widgets'); -$options = array( - 'type' => 'object', - 'subtype' => 'event_calendar', - 'container_guid' => elgg_get_page_owner_guid(), - 'limit' => 6, - 'full_view' => false, - 'pagination' => false, -); -$content = elgg_list_entities($options); +$content = elgg_view('event_calendar/groupprofile_calendar'); elgg_pop_context(); -if (!$content) { - $content = '<p>' . elgg_echo('event_calendar:no_events_found') . '</p>'; +if (!$content) { + if (elgg_get_plugin_setting('group_always_display', 'event_calendar') == 'yes') { + $content = elgg_echo('event_calendar:no_events_found'); + } } -$new_link = elgg_view('output/url', array( - 'href' => "event_calendar/add/$group->guid", - 'text' => elgg_echo('event_calendar:new'), -)); - -echo elgg_view('groups/profile/module', array( - 'title' => elgg_echo('event_calendar:group'), - 'content' => $content, - 'all_link' => $all_link, - 'add_link' => $new_link, -)); +if ($content) { + $all_link = elgg_view('output/url', array( + 'href' => "event_calendar/group/$group->guid", + 'text' => elgg_echo('link:view:all'), + )); + $new_link = elgg_view('output/url', array( + 'href' => "event_calendar/add/$group->guid", + 'text' => elgg_echo('event_calendar:new'), + )); + echo elgg_view('groups/profile/module', array( + 'title' => elgg_echo('event_calendar:group'), + 'content' => $content, + 'all_link' => $all_link, + 'add_link' => $new_link, + )); +} diff --git a/views/default/event_calendar/groupprofile_calendar.php b/views/default/event_calendar/groupprofile_calendar.php index 826fafa67..7ee09104f 100644 --- a/views/default/event_calendar/groupprofile_calendar.php +++ b/views/default/event_calendar/groupprofile_calendar.php @@ -20,24 +20,15 @@ if (event_calendar_activated_for_group($page_owner_entity)) { // Get the upcoming events $start_date = time(); // now $end_date = $start_date + 60*60*24*365*2; // maximum is two years from now - $events = event_calendar_get_events_between($start_date,$end_date,false,$num,0,page_owner()); + $events = event_calendar_get_events_between($start_date,$end_date,false,$num,0,elgg_get_page_owner_guid()); // If there are any events to view, view them if (is_array($events) && sizeof($events) > 0) { - echo '<div id="group_pages_widget">'; - echo '<h2>'.elgg_echo("event_calendar:groupprofile").'</h2>'; foreach($events as $event) { echo elgg_view("object/event_calendar",array('entity' => $event)); } - echo '<div class="forum_latest"><a href="'.$vars['url'].'pg/event_calendar/group/'.page_owner().'">'.elgg_echo('event_calendar:view_calendar').'</a></div>'; - echo "</div>"; - } else if (get_plugin_setting('group_always_display', 'event_calendar') == 'yes') { - echo '<div id="group_pages_widget">'; - echo '<h2>'.elgg_echo("event_calendar:groupprofile").'</h2>'; - echo '<div class="forum_latest">'.elgg_echo('event_calendar:no_events_found').'</div>'; - echo "</div>"; } } diff --git a/views/default/event_calendar/groupprofile_calendar_deprecated.php b/views/default/event_calendar/groupprofile_calendar_deprecated.php new file mode 100644 index 000000000..081a0eb2d --- /dev/null +++ b/views/default/event_calendar/groupprofile_calendar_deprecated.php @@ -0,0 +1,44 @@ +<?php + +/** + * Elgg event_calendar group profile content + * + * @package event_calendar + * @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.html GNU Public License version 2 + * @author Kevin Jardine <kevin@radagast.biz> + * @copyright Radagast Solutions 2008 + * @link http://radagast.biz/ + * + */ + +elgg_load_library('elgg:event_calendar'); + +$page_owner_entity = elgg_get_page_owner_entity(); + +if (event_calendar_activated_for_group($page_owner_entity)) { + $num = 5; + // Get the upcoming events + $start_date = time(); // now + $end_date = $start_date + 60*60*24*365*2; // maximum is two years from now + $events = event_calendar_get_events_between($start_date,$end_date,false,$num,0,elgg_get_page_owner_guid()); + + // If there are any events to view, view them + if (is_array($events) && sizeof($events) > 0) { + + echo '<div id="group_pages_widget">'; + echo '<h2>'.elgg_echo("event_calendar:groupprofile").'</h2>'; + foreach($events as $event) { + echo elgg_view("object/event_calendar",array('entity' => $event)); + } + echo '<div class="forum_latest"><a href="'.$vars['url'].'pg/event_calendar/group/'.page_owner().'">'.elgg_echo('event_calendar:view_calendar').'</a></div>'; + echo "</div>"; + + } else if (elgg_get_plugin_setting('group_always_display', 'event_calendar') == 'yes') { + echo '<div id="group_pages_widget">'; + echo '<h2>'.elgg_echo("event_calendar:groupprofile").'</h2>'; + echo '<div class="forum_latest">'.elgg_echo('event_calendar:no_events_found').'</div>'; + echo "</div>"; + } +} + +?> \ No newline at end of file diff --git a/views/default/event_calendar/paged_item_view.php b/views/default/event_calendar/paged_item_view.php index 77c8bed4e..f2092bafc 100644 --- a/views/default/event_calendar/paged_item_view.php +++ b/views/default/event_calendar/paged_item_view.php @@ -7,21 +7,19 @@ if (is_numeric($event->start_time)) { $date_bit = event_calendar_get_formatted_date($event->start_date); -if (event_calendar_has_personal_event($event->guid,get_loggedin_userid())) { +if (event_calendar_has_personal_event($event->guid,elgg_get_logged_in_user_guid())) { $calendar_bit = 'checked = "checked"'; } else { $calendar_bit = ''; } -$calendar_bit .= ' onclick="javascript:event_calendar_personal_toggle('.$event->guid.'); return true;" '; - $info = '<tr>'; $info .= '<td class="event_calendar_paged_date">'.$date_bit.'</td>'; $info .= '<td class="event_calendar_paged_time">'.$time_bit.'</td>'; $info .= '<td class="event_calendar_paged_title"><a href="'.$event->getUrl().'">'.$event->title.'</a></td>'; $info .= '<td class="event_calendar_paged_venue">'.$event->venue.'</td>'; if ($vars['personal_manage'] != 'no') { - $info .= '<td class="event_calendar_paged_calendar"><input id="event_calendar_paged_checkbox_'.$event->guid.'" type="checkbox" '.$calendar_bit.' /></td>'; + $info .= '<td class="event_calendar_paged_calendar"><input class="event_calendar_paged_checkbox" id="event_calendar_paged_checkbox_'.$event->guid.'" '.$calendar_bit.' type="checkbox" /></td>'; } $info .= '</tr>'; diff --git a/views/default/event_calendar/paged_view.php b/views/default/event_calendar/paged_view.php index 7c2ea2eaa..f8257792f 100644 --- a/views/default/event_calendar/paged_view.php +++ b/views/default/event_calendar/paged_view.php @@ -1,4 +1,5 @@ <?php +elgg_load_js('elgg.event_calendar'); $nav = elgg_view('navigation/pagination',array( // 'baseurl' => $_SERVER['REQUEST_URI'], @@ -8,8 +9,8 @@ $nav = elgg_view('navigation/pagination',array( 'limit' => $vars['limit'], )); -$event_calendar_times = get_plugin_setting('times', 'event_calendar'); -$event_calendar_personal_manage = get_plugin_setting('personal_manage', 'event_calendar'); +$event_calendar_times = elgg_get_plugin_setting('times', 'event_calendar'); +$event_calendar_personal_manage = elgg_get_plugin_setting('personal_manage', 'event_calendar'); $events = $vars['events']; $html = ''; $date_format = 'F Y'; @@ -33,19 +34,3 @@ $msgs = '<div id="event_calendar_paged_messages"></div>'; $html = $msgs.$nav.'<div class="event_calendar_paged">'.$html.'</div>'.$nav; echo $html; -?> -<script type="text/javascript"> -function event_calendar_personal_toggle(guid) { - $.get("<?php echo $vars['url'].'action/event_calendar/toggle_personal_calendar?'.event_calendar_security_fields().'&event_id='; ?>"+guid, - function (res) { - var flag = res.substring(0,3); - var msg = res.substring(3); - $('#event_calendar_paged_messages').html(msg); - if (flag == '@f@') { - // action failed so toggle checkbox - $("#event_calendar_paged_checkbox_"+guid).attr('checked',!$("#event_calendar_paged_checkbox_"+guid).attr('checked')); - } - } - ); -} -</script> \ No newline at end of file diff --git a/views/default/event_calendar/region_select.php b/views/default/event_calendar/region_select.php index 81407b27d..a987171a2 100644 --- a/views/default/event_calendar/region_select.php +++ b/views/default/event_calendar/region_select.php @@ -1,6 +1,6 @@ <?php -$region_list = trim(get_plugin_setting('region_list', 'event_calendar')); +$region_list = trim(elgg_get_plugin_setting('region_list', 'event_calendar')); // make sure that we are using Unix line endings $region_list = str_replace("\r\n","\n",$region_list); $region_list = str_replace("\r","\n",$region_list); @@ -11,13 +11,11 @@ if ($region_list) { $region_item = trim($region_item); $options_values[$region_item] = $region_item; } - $js = "onchange=\"javascript:$('#event_list').load('".$vars['url_start'] - ."&callback=true®ion='+escape($('#region').val() ));\""; - //$js = "onchange=\"javascript:$('#event_list').load('".$vars['url_start']."&callback=true®ion='+$('#region').val());\""; + $body .= elgg_echo('event_calendar:region_filter_by_label'); - $body .= elgg_view("input/pulldown",array('internalid' => 'region','js'=>$js,'value'=>$vars['region'],'options_values'=>$options_values)); + $body .= elgg_view('input/hidden',array('id'=>'event-calendar-region-url-start','value'=>$vars['url_start'])); + $body .= elgg_view("input/dropdown",array('id' => 'event-calendar-region','value'=>$vars['region'],'options_values'=>$options_values)); $body .= '<br />'; } echo $body; -?> \ No newline at end of file diff --git a/views/default/event_calendar/review_requests.php b/views/default/event_calendar/review_requests.php index e1866a32b..11916b4e3 100644 --- a/views/default/event_calendar/review_requests.php +++ b/views/default/event_calendar/review_requests.php @@ -10,16 +10,21 @@ foreach($vars['requests'] as $request) { $info .= '<div style="margin-top: 5px;" ></div>'; $info .= elgg_view('output/confirmlink', array( - 'class' => "cancel_button", - 'href' => $vars['url'] . 'action/event_calendar/killrequest?user_guid='.$request->guid.'&event_id=' . $vars['entity']->guid, + 'class' => "elgg-button elgg-button-delete", + 'href' => 'action/event_calendar/killrequest?user_guid='.$request->guid.'&event_guid=' . $vars['entity']->guid, 'confirm' => elgg_echo('event_calendar:request:remove:check'), - 'text' => elgg_echo('delete'), + 'text' => elgg_echo('event_calendar:review_requests:reject'), + 'title' => elgg_echo('event_calendar:review_requests:reject:title'), )); $info .= '  '; - $url = elgg_add_action_tokens_to_url("{$vars['url']}action/event_calendar/addtocalendar?user_guid={$request->guid}&event_id={$vars['entity']->guid}"); - $info .= '<a href="'.$url.'" class="add_topic_button">'.elgg_echo('accept').'</a>'; - echo elgg_view_listing($icon,$info); + $info .= elgg_view('output/url', array( + 'text' => elgg_echo('event_calendar:review_requests:accept'), + 'title' => elgg_echo('event_calendar:review_requests:accept:title'), + 'href' => "action/event_calendar/addtocalendar?user_guid={$request->guid}&event_guid={$vars['entity']->guid}", + 'class' => "elgg-button elgg-button-submit", + 'is_action' => TRUE, + )); + //$url = elgg_add_action_tokens_to_url("{$vars['url']}action/event_calendar/addtocalendar?user_guid={$request->guid}&event_guid={$vars['entity']->guid}"); + echo elgg_view_image_block($icon,$info); } } - -?> diff --git a/views/default/event_calendar/show_events.php b/views/default/event_calendar/show_events.php index 580fb5a45..b51b1c05f 100644 --- a/views/default/event_calendar/show_events.php +++ b/views/default/event_calendar/show_events.php @@ -13,23 +13,21 @@ $listing_format = $vars['listing_format']; if ($vars['events']) { - if (elgg_get_plugin_setting('agenda_view', 'event_calendar') == 'yes') { + if ($listing_format == 'agenda') { $event_list = elgg_view('event_calendar/agenda_view',$vars); + } else if ($listing_format == 'paged') { + $event_list = elgg_view('event_calendar/paged_view',$vars); } else { - if ($listing_format == 'paged') { - $event_list = elgg_view('event_calendar/paged_view',$vars); - } else { - $options = array( - 'list_class' => 'elgg-list-entity', - 'full_view' => FALSE, - 'pagination' => TRUE, - 'list_type' => 'listing', - 'list_type_toggle' => FALSE, - 'offset' => $vars['offset'], - 'limit' => $vars['limit'], - ); - $event_list = elgg_view_entity_list($vars['events'], $options); - } + $options = array( + 'list_class' => 'elgg-list-entity', + 'full_view' => FALSE, + 'pagination' => TRUE, + 'list_type' => 'listing', + 'list_type_toggle' => FALSE, + 'offset' => $vars['offset'], + 'limit' => $vars['limit'], + ); + $event_list = elgg_view_entity_list($vars['events'], $options); } } else { $event_list = '<p>'.elgg_echo('event_calendar:no_events_found').'</p>'; diff --git a/views/default/js/event_calendar/event_calendar.php b/views/default/js/event_calendar/event_calendar.php new file mode 100644 index 000000000..f3f5b68c8 --- /dev/null +++ b/views/default/js/event_calendar/event_calendar.php @@ -0,0 +1,69 @@ +//<script type="text/javascript"> +elgg.provide('elgg.event_calendar'); + +elgg.event_calendar.init = function () { + $('.event_calendar_paged_checkbox').click(elgg.event_calendar.handlePagedPersonalCalendarToggle); + $('.event-calendar-personal-calendar-toggle').click(elgg.event_calendar.handleDisplayPagePersonalCalendarToggle); + $('#event-calendar-region').change(elgg.event_calendar.handleRegionChange); +} + +elgg.event_calendar.handleRegionChange = function(e) { + url = $('#event-calendar-region-url-start').val()+"/"+escape($('#event-calendar-region').val()); + elgg.forward(url); +} + +elgg.event_calendar.handlePagedPersonalCalendarToggle = function() { + guid = parseInt($(this).attr('id').substring('event_calendar_paged_checkbox_'.length)); + elgg.event_calendar.togglePagedPersonalCalendar(guid); +} +elgg.event_calendar.togglePagedPersonalCalendar = function(guid) { + elgg.action('event_calendar/toggle_personal_calendar', + { + data: {event_guid: guid}, + success: function (res) { + var success = res.success; + var msg = res.message; + if (success) { + elgg.system_message(msg,2000); + } else { + elgg.register_error(msg,2000); + } + //$('#event_calendar_paged_messages').html(msg); + if (!success) { + // action failed so toggle checkbox + $("#event_calendar_paged_checkbox_"+guid).attr('checked',!$("#event_calendar_paged_checkbox_"+guid).attr('checked')); + } + } + } + ); +} + +elgg.event_calendar.handleDisplayPagePersonalCalendarToggle = function() { + var guidBit = $(this).attr('id').substring('event_calendar_user_data_'.length); + var guids = guidBit.split('_'); + var event_guid = parseInt(guids[0]); + var user_guid = parseInt(guids[1]); + elgg.event_calendar.toggleDisplayPagePersonalCalendar(event_guid,user_guid); +} + +elgg.event_calendar.toggleDisplayPagePersonalCalendar = function(event_guid,user_guid) { + elgg.action('event_calendar/toggle_personal_calendar', + { + data: {event_guid: event_guid,user_guid: user_guid, other: 'yes'}, + success: function (res) { + var success = res.success; + var msg = res.message; + if (success) { + var button_text = res.button_text; + $('#event_calendar_user_data_'+event_guid+'_'+user_guid).val(button_text); + //elgg.system_message(msg,2000); + } else { + elgg.register_error(msg,2000); + } + } + } + ); +} + +elgg.register_hook_handler('init', 'system', elgg.event_calendar.init); +//</script> \ No newline at end of file diff --git a/views/default/object/event_calendar.php b/views/default/object/event_calendar.php index 43e7847dc..c3c18cc92 100644 --- a/views/default/object/event_calendar.php +++ b/views/default/object/event_calendar.php @@ -12,8 +12,9 @@ */ $event = $vars['entity']; +$full = elgg_extract('full_view', $vars, FALSE); -if ($vars['full']) { +if ($full) { $body = elgg_view('event_calendar/strapline',$vars); $event_items = event_calendar_get_formatted_full_items($event); $body .= '<br />'; diff --git a/views/default/river/object/event_calendar/create.php b/views/default/river/object/event_calendar/create.php index f144ca610..e74a8f891 100644 --- a/views/default/river/object/event_calendar/create.php +++ b/views/default/river/object/event_calendar/create.php @@ -1,12 +1,22 @@ <?php - $performed_by = get_entity($vars['item']->subject_guid); + /*$performed_by = get_entity($vars['item']->subject_guid); $object = get_entity($vars['item']->object_guid); $url = "<a href=\"{$performed_by->getURL()}\">{$performed_by->name}</a>"; $string = sprintf(elgg_echo("event_calendar:river:created"),$url) . " "; - $string .= elgg_echo("event_calendar:river:create")." <a href=\"" . $object->getURL() . "\">" . $object->title . "</a>"; + $string .= elgg_echo("event_calendar:river:create")." <a href=\"" . $object->getURL() . "\">" . $object->title . "</a>";*/ -?> +/** + * Event calendar river view. + */ -<?php echo $string; ?> \ No newline at end of file +$object = $vars['item']->getObjectEntity(); +$excerpt = strip_tags($object->description); +$vars['excerpt'] = elgg_get_excerpt($excerpt); + +echo elgg_view('page/components/image_block', array( + 'image' => '<img src="'.$vars['url'] . 'mod/event_calendar/images/event_icon.gif" />', + 'body' => elgg_view('river/elements/body', $vars), + 'class' => 'elgg-river-item', +)); \ No newline at end of file diff --git a/views/default/river/object/event_calendar/update.php b/views/default/river/object/event_calendar/update.php index 5a5d376b1..f4526cd2a 100644 --- a/views/default/river/object/event_calendar/update.php +++ b/views/default/river/object/event_calendar/update.php @@ -1,12 +1,16 @@ <?php - $performed_by = get_entity($vars['item']->subject_guid); + /*$performed_by = get_entity($vars['item']->subject_guid); $object = get_entity($vars['item']->object_guid); $url = "<a href=\"{$performed_by->getURL()}\">{$performed_by->name}</a>"; $string = sprintf(elgg_echo("event_calendar:river:updated"),$url) . " "; - $string .= elgg_echo("event_calendar:river:the_event")." <a href=\"" . $object->getURL() . "\">" . $object->title . "</a>"; + $string .= elgg_echo("event_calendar:river:the_event")." <a href=\"" . $object->getURL() . "\">" . $object->title . "</a>";*/ -?> +$object = $vars['item']->getObjectEntity(); -<?php echo $string; ?> \ No newline at end of file +echo elgg_view('page/components/image_block', array( + 'image' => '<img src="'.$vars['url'] . 'mod/event_calendar/images/event_icon.gif" />', + 'body' => elgg_view('river/elements/body', $vars), + 'class' => 'elgg-river-item', +)); diff --git a/views/default/settings/event_calendar/edit.php b/views/default/settings/event_calendar/edit.php index 429a85b26..51bd2c49f 100644 --- a/views/default/settings/event_calendar/edit.php +++ b/views/default/settings/event_calendar/edit.php @@ -10,12 +10,13 @@ $access_options = array( ACCESS_PRIVATE => elgg_echo("PRIVATE"), // TODO - merge the agenda view into the list format options $listing_options = array(elgg_echo('event_calendar:settings:paged')=>'paged', + elgg_echo('event_calendar:settings:agenda')=>'agenda', elgg_echo('event_calendar:settings:month')=>'month', ); $body = ''; -$event_calendar_hide_access = get_plugin_setting('hide_access', 'event_calendar'); +$event_calendar_hide_access = elgg_get_plugin_setting('hide_access', 'event_calendar'); if (!$event_calendar_hide_access) { $event_calendar_hide_access = 'no'; } @@ -26,7 +27,7 @@ $body .= elgg_view('input/radio',array('internalname'=>'params[hide_access]','va $body .= '<br />'; -$event_calendar_default_access = get_plugin_setting('default_access', 'event_calendar'); +$event_calendar_default_access = elgg_get_plugin_setting('default_access', 'event_calendar'); if (!$event_calendar_default_access) { $event_calendar_default_access = ACCESS_LOGGED_IN; } @@ -37,7 +38,7 @@ $body .= elgg_view('input/pulldown',array('internalname'=>'params[default_access $body .= '<br /><br />'; -$event_calendar_hide_end = get_plugin_setting('hide_end', 'event_calendar'); +$event_calendar_hide_end = elgg_get_plugin_setting('hide_end', 'event_calendar'); if (!$event_calendar_hide_end) { $event_calendar_hide_end = 'no'; } @@ -48,7 +49,7 @@ $body .= elgg_view('input/radio',array('internalname'=>'params[hide_end]','value $body .= '<br />'; -$event_calendar_listing_format = get_plugin_setting('listing_format', 'event_calendar'); +$event_calendar_listing_format = elgg_get_plugin_setting('listing_format', 'event_calendar'); if (!$event_calendar_listing_format) { $event_calendar_listing_format = 'month'; } @@ -59,7 +60,7 @@ $body .= elgg_view('input/radio',array('internalname'=>'params[listing_format]', $body .= '<br />'; -$event_calendar_times = get_plugin_setting('times', 'event_calendar'); +$event_calendar_times = elgg_get_plugin_setting('times', 'event_calendar'); if (!$event_calendar_times) { $event_calendar_times = 'no'; } @@ -70,7 +71,7 @@ $body .= elgg_view('input/radio',array('internalname'=>'params[times]','value'=> $body .= '<br />'; -$event_calendar_autopersonal = get_plugin_setting('autopersonal', 'event_calendar'); +$event_calendar_autopersonal = elgg_get_plugin_setting('autopersonal', 'event_calendar'); if (!$event_calendar_autopersonal) { $event_calendar_autopersonal = 'yes'; } @@ -81,7 +82,7 @@ $body .= elgg_view('input/radio',array('internalname'=>'params[autopersonal]','v $body .= '<br />'; -$event_calendar_autogroup = get_plugin_setting('autogroup', 'event_calendar'); +$event_calendar_autogroup = elgg_get_plugin_setting('autogroup', 'event_calendar'); if (!$event_calendar_autogroup) { $event_calendar_autogroup = 'no'; } @@ -92,7 +93,7 @@ $body .= elgg_view('input/radio',array('internalname'=>'params[autogroup]','valu $body .= '<br />'; -$event_calendar_add_to_group_calendar = get_plugin_setting('add_to_group_calendar', 'event_calendar'); +$event_calendar_add_to_group_calendar = elgg_get_plugin_setting('add_to_group_calendar', 'event_calendar'); if (!$event_calendar_add_to_group_calendar) { $event_calendar_add_to_group_calendar = 'no'; } @@ -103,7 +104,9 @@ $body .= elgg_view('input/radio',array('internalname'=>'params[add_to_group_cale $body .= '<br />'; -$event_calendar_agenda_view = get_plugin_setting('agenda_view', 'event_calendar'); +// agenda view is now handled in the listing area + +/*$event_calendar_agenda_view = get_plugin_setting('agenda_view', 'event_calendar'); if (!$event_calendar_agenda_view) { $event_calendar_agenda_view = 'no'; } @@ -112,9 +115,9 @@ $body .= elgg_echo('event_calendar:settings:agenda_view:title'); $body .= '<br />'; $body .= elgg_view('input/radio',array('internalname'=>'params[agenda_view]','value'=>$event_calendar_agenda_view,'options'=>$yn_options)); -$body .= '<br />'; +$body .= '<br />';*/ -$event_calendar_venue_view = get_plugin_setting('venue_view', 'event_calendar'); +$event_calendar_venue_view = elgg_get_plugin_setting('venue_view', 'event_calendar'); if (!$event_calendar_venue_view) { $event_calendar_venue_view = 'no'; } @@ -130,7 +133,7 @@ $options = array(elgg_echo('event_calendar:settings:no')=>'no', elgg_echo('event_calendar:settings:site_calendar:loggedin')=>'loggedin', ); -$event_calendar_site_calendar = get_plugin_setting('site_calendar', 'event_calendar'); +$event_calendar_site_calendar = elgg_get_plugin_setting('site_calendar', 'event_calendar'); if (!$event_calendar_site_calendar) { $event_calendar_site_calendar = 'admin'; } @@ -145,7 +148,7 @@ $options = array(elgg_echo('event_calendar:settings:no')=>'no', elgg_echo('event_calendar:settings:group_calendar:members')=>'members', ); -$event_calendar_group_calendar = get_plugin_setting('group_calendar', 'event_calendar'); +$event_calendar_group_calendar = elgg_get_plugin_setting('group_calendar', 'event_calendar'); if (!$event_calendar_group_calendar) { $event_calendar_group_calendar = 'members'; } @@ -159,7 +162,7 @@ $options = array(elgg_echo('event_calendar:settings:group_default:yes')=>'yes', elgg_echo('event_calendar:settings:group_default:no')=>'no', ); -$event_calendar_group_default = get_plugin_setting('group_default', 'event_calendar'); +$event_calendar_group_default = elgg_get_plugin_setting('group_default', 'event_calendar'); if (!$event_calendar_group_default) { $event_calendar_group_default = 'yes'; } @@ -170,7 +173,7 @@ $body .= elgg_view('input/radio',array('internalname'=>'params[group_default]',' $body .= '<br />'; -$event_calendar_group_always_display = get_plugin_setting('group_always_display', 'event_calendar'); +$event_calendar_group_always_display = elgg_get_plugin_setting('group_always_display', 'event_calendar'); if (!$event_calendar_group_always_display) { $event_calendar_group_always_display = 'no'; } @@ -181,12 +184,14 @@ $body .= elgg_view('input/radio',array('internalname'=>'params[group_always_disp $body .= '<br />'; -$options = array(elgg_echo('event_calendar:settings:group_profile_display_option:left')=>'left', +// There does not seem to be a way to determine where the group calendar box will appear in Elgg 1.8 + +/*$options = array(elgg_echo('event_calendar:settings:group_profile_display_option:left')=>'left', elgg_echo('event_calendar:settings:group_profile_display_option:right')=>'right', elgg_echo('event_calendar:settings:group_profile_display_option:none')=>'none', ); -$event_calendar_group_profile_display = get_plugin_setting('group_profile_display', 'event_calendar'); +$event_calendar_group_profile_display = elgg_get_plugin_setting('group_profile_display', 'event_calendar'); if (!$event_calendar_group_profile_display) { $event_calendar_group_profile_display = 'right'; } @@ -194,9 +199,9 @@ if (!$event_calendar_group_profile_display) { $body .= elgg_echo('event_calendar:settings:group_profile_display:title').'<br />'; $body .= elgg_view('input/radio',array('internalname'=>'params[group_profile_display]','value'=>$event_calendar_group_profile_display,'options'=>$options)); -$body .= '<br />'; +$body .= '<br />';*/ -$event_calendar_add_users = get_plugin_setting('add_users', 'event_calendar'); +$event_calendar_add_users = elgg_get_plugin_setting('add_users', 'event_calendar'); if (!$event_calendar_add_users) { $event_calendar_add_users = 'no'; } @@ -207,7 +212,7 @@ $body .= elgg_view('input/radio',array('internalname'=>'params[add_users]','valu $body .= '<br />'; -$event_calendar_add_users_notify = get_plugin_setting('add_users_notify', 'event_calendar'); +$event_calendar_add_users_notify = elgg_get_plugin_setting('add_users_notify', 'event_calendar'); if (!$event_calendar_add_users_notify) { $event_calendar_add_users_notify = 'no'; } @@ -218,7 +223,7 @@ $body .= elgg_view('input/radio',array('internalname'=>'params[add_users_notify] $body .= '<br />'; -$event_calendar_personal_manage = get_plugin_setting('personal_manage', 'event_calendar'); +$event_calendar_personal_manage = elgg_get_plugin_setting('personal_manage', 'event_calendar'); if (!$event_calendar_personal_manage) { $event_calendar_personal_manage = 'yes'; } @@ -229,7 +234,7 @@ $body .= elgg_view('input/radio',array('internalname'=>'params[personal_manage]' $body .= '<br />'; -$event_calendar_spots_display = get_plugin_setting('spots_display', 'event_calendar'); +$event_calendar_spots_display = elgg_get_plugin_setting('spots_display', 'event_calendar'); if (!$event_calendar_spots_display) { $event_calendar_spots_display = 'no'; } @@ -240,7 +245,7 @@ $body .= elgg_view('input/radio',array('internalname'=>'params[spots_display]',' $body .= '<br />'; -$event_calendar_no_collisions = get_plugin_setting('no_collisions', 'event_calendar'); +$event_calendar_no_collisions = elgg_get_plugin_setting('no_collisions', 'event_calendar'); if (!$event_calendar_no_collisions) { $event_calendar_no_collisions = 'no'; } @@ -251,7 +256,7 @@ $body .= elgg_view('input/radio',array('internalname'=>'params[no_collisions]',' $body .= '<br />'; -$event_calendar_collision_length = get_plugin_setting('collision_length', 'event_calendar'); +$event_calendar_collision_length = elgg_get_plugin_setting('collision_length', 'event_calendar'); if (!$event_calendar_collision_length) { $event_calendar_collision_length = '3600'; } @@ -262,7 +267,7 @@ $body .= elgg_view('input/text',array('internalname'=>'params[collision_length]' $body .= '<br /><br />'; -$event_calendar_region_display = get_plugin_setting('region_display', 'event_calendar'); +$event_calendar_region_display = elgg_get_plugin_setting('region_display', 'event_calendar'); if (!$event_calendar_region_display) { $event_calendar_region_display = 'no'; } @@ -273,7 +278,7 @@ $body .= elgg_view('input/radio',array('internalname'=>'params[region_display]', $body .= '<br />'; -$event_calendar_region_list = get_plugin_setting('region_list', 'event_calendar'); +$event_calendar_region_list = elgg_get_plugin_setting('region_list', 'event_calendar'); if (!$event_calendar_region_list) { $event_calendar_region_list = ''; } @@ -284,7 +289,7 @@ $body .= elgg_view('event_calendar/input/longtext',array('internalname'=>'params $body .= '<br />'; -$event_calendar_region_list_handles = get_plugin_setting('region_list_handles', 'event_calendar'); +$event_calendar_region_list_handles = elgg_get_plugin_setting('region_list_handles', 'event_calendar'); if (!$event_calendar_region_list_handles) { $event_calendar_region_list_handles = 'no'; } @@ -295,7 +300,7 @@ $body .= elgg_view('input/radio',array('internalname'=>'params[region_list_handl $body .= '<br />'; -$event_calendar_type_display = get_plugin_setting('type_display', 'event_calendar'); +$event_calendar_type_display = elgg_get_plugin_setting('type_display', 'event_calendar'); if (!$event_calendar_type_display) { $event_calendar_type_display = 'no'; } @@ -306,7 +311,7 @@ $body .= elgg_view('input/radio',array('internalname'=>'params[type_display]','v $body .= '<br />'; -$event_calendar_type_list = get_plugin_setting('type_list', 'event_calendar'); +$event_calendar_type_list = elgg_get_plugin_setting('type_list', 'event_calendar'); if (!$event_calendar_type_list) { $event_calendar_type_list = ''; } @@ -317,7 +322,7 @@ $body .= elgg_view('event_calendar/input/longtext',array('internalname'=>'params $body .= '<br />'; -$event_calendar_type_list_handles = get_plugin_setting('type_list_handles', 'event_calendar'); +$event_calendar_type_list_handles = elgg_get_plugin_setting('type_list_handles', 'event_calendar'); if (!$event_calendar_type_list_handles) { $event_calendar_type_list_handles = 'no'; } @@ -328,7 +333,7 @@ $body .= elgg_view('input/radio',array('internalname'=>'params[type_list_handles $body .= '<br />'; -$event_calendar_first_date = get_plugin_setting('first_date', 'event_calendar'); +$event_calendar_first_date = elgg_get_plugin_setting('first_date', 'event_calendar'); if (!$event_calendar_first_date) { $event_calendar_first_date = ''; } @@ -339,7 +344,7 @@ $body .= elgg_view('input/text',array('internalname'=>'params[first_date]','valu $body .= '<br /><br />'; -$event_calendar_last_date = get_plugin_setting('last_date', 'event_calendar'); +$event_calendar_last_date = elgg_get_plugin_setting('last_date', 'event_calendar'); if (!$event_calendar_last_date) { $event_calendar_last_date = ''; } @@ -350,7 +355,7 @@ $body .= elgg_view('input/text',array('internalname'=>'params[last_date]','value $body .= '<br /><br />'; -$event_calendar_more_required = get_plugin_setting('more_required', 'event_calendar'); +$event_calendar_more_required = elgg_get_plugin_setting('more_required', 'event_calendar'); if (!$event_calendar_more_required) { $event_calendar_more_required = 'no'; } -- cgit v1.2.3 From 70c10a5b5989cff21d83566bf11b3911f5c85297 Mon Sep 17 00:00:00 2001 From: Kevin Jardine <kevinjardine@yahoo.com> Date: Tue, 27 Sep 2011 14:06:43 +0200 Subject: fixed filter tab behaviour --- .../event_calendar/toggle_personal_calendar.php | 1 - models/model.php | 276 +++++++++++++-------- start.php | 63 +---- 3 files changed, 180 insertions(+), 160 deletions(-) diff --git a/actions/event_calendar/toggle_personal_calendar.php b/actions/event_calendar/toggle_personal_calendar.php index 26192953f..f2341a91a 100644 --- a/actions/event_calendar/toggle_personal_calendar.php +++ b/actions/event_calendar/toggle_personal_calendar.php @@ -12,7 +12,6 @@ if ($other) { $add_response = elgg_echo('event_calendar:add_to_my_calendar_response'); $add_error = elgg_echo('event_calendar:add_to_my_calendar_error'); } -// three character prefix to indicate success or failure if (event_calendar_has_personal_event($event_guid,$user_guid)) { $button_text = elgg_echo('event_calendar:add_to_the_calendar'); diff --git a/models/model.php b/models/model.php index c887cc7b0..4a7da3dd1 100644 --- a/models/model.php +++ b/models/model.php @@ -29,14 +29,14 @@ function event_calendar_set_event_from_form($event_guid,$group_guid) { $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_calendar_spots_display = elgg_get_plugin_setting('spots_display', 'event_calendar'); - $event_calendar_hide_end = elgg_get_plugin_setting('hide_end', 'event_calendar'); + $event_calendar_hide_end = elgg_get_plugin_setting('hide_end', 'event_calendar'); $event_calendar_more_required = elgg_get_plugin_setting('more_required', 'event_calendar'); if ($event_calendar_more_required == 'yes') { $required_fields = array('title','venue','start_date', 'brief_description','fees','contact','organiser', 'tags'); - + if ($event_calendar_times == 'yes') { $required_fields[] = 'start_time'; if ($event_calendar_hide_end != 'yes') { @@ -55,7 +55,7 @@ function event_calendar_set_event_from_form($event_guid,$group_guid) { } else { $required_fields = array('title','venue','start_date'); } - + if ($event_guid) { $event = get_entity($event_guid); if (!elgg_instanceof($event, 'object', 'event_calendar')) { @@ -126,7 +126,7 @@ function event_calendar_set_event_from_form($event_guid,$group_guid) { if (!trim($event->$fn)) { return FALSE; break; - } + } } if ($event->save()) { if ($group_guid && (elgg_get_plugin_setting('autogroup', 'event_calendar') == 'yes')) { @@ -187,8 +187,10 @@ $is_count,$limit=10,$offset=0,$container_guid=0,$region='-', $meta_max = 'spots' function event_calendar_get_events_for_user_between($start_date,$end_date,$is_count,$limit=10,$offset=0,$user_guid,$container_guid=0,$region='-') { if ($is_count) { + // old way $count = event_calendar_get_entities_from_metadata_between('start_date','end_date', $start_date, $end_date, "object", "event_calendar", $user_guid, $container_guid, $limit,$offset,"",0,true,true,$region); + return $count; } else { $events = event_calendar_get_entities_from_metadata_between('start_date','end_date', @@ -198,17 +200,51 @@ function event_calendar_get_events_for_user_between($start_date,$end_date,$is_co } } -// TODO - replace the original version with this one function event_calendar_get_events_for_user_between2($start_date,$end_date,$is_count,$limit=10,$offset=0,$user_guid,$container_guid=0,$region='-') { + $options_new_way = array( + 'type' => 'object', + 'subtype' => 'event_calendar', + 'relationship' => 'personal_event', + 'relationship_guid' => $user_guid, + 'metadata_name_value_pairs' => array( array( 'name' => 'start_date', + 'value' => $start_date, + 'operand' => '>='), + array( 'name' => 'real_end_time', + 'value' => $end_date, + 'operand' => '<=') + ), + ); + + if ($container_guid) { + $options_new_way['container_guid'] = $container_guid; + } + if ($region && $region != '-') { + $options_new_way['metadata_name_value_pairs'][] = array('name'=>'region','value'=>sanitize_string($region)); + } if ($is_count) { - $count = event_calendar_get_entities_from_metadata_between('start_date','real_end_time', + // old way + $count_old_way = event_calendar_get_entities_from_metadata_between('start_date','real_end_time', $start_date, $end_date, "object", "event_calendar", $user_guid, $container_guid, $limit,$offset,"",0,true,true,$region); - return $count; + // new way + $options_new_way['count'] = TRUE; + $count_new_way = elgg_get_entities_from_relationship($options_new_way); + return $count_old_way+$count_new_way; } else { - $events = event_calendar_get_entities_from_metadata_between('start_date','real_end_time', + $events_old_way = event_calendar_get_entities_from_metadata_between('start_date','real_end_time', $start_date, $end_date, "object", "event_calendar", $user_guid, $container_guid, $limit,$offset,"",0,true,false,$region); + $options_new_way['limit'] = $limit; + $options_new_way['offset'] = $offset; + $options_new_way['order_by_metadata'] = array(array('name'=>'start_date','direction'=>'ASC','as'=>'integer')); + //print_r($options_new_way); + $events_new_way = elgg_get_entities_from_relationship($options_new_way); //return event_calendar_vsort($events,'start_date'); - return $events; + if (!$events_old_way) { + return $events_new_way; + } else if (!$events_new_way) { + return $events_old_way; + } else { + return array_merge($events_old_way,$events_new_way); + } } } @@ -220,15 +256,51 @@ function event_calendar_get_events_for_friends_between($start_date,$end_date,$is foreach($friends as $friend) { $friend_guids[] = $friend->getGUID(); } + $friend_list = implode(",",$friend_guids); + // elgg_get_entities_from_relationship does not take multiple relationship guids, so need some custom joins and wheres + $db_prefix = elgg_get_config('dbprefix'); + $options_new_way = array( + 'type' => 'object', + 'subtype' => 'event_calendar', + 'metadata_name_value_pairs' => array(array( 'name' => 'start_date', + 'value' => $start_date, + 'operand' => '>='), + array( 'name' => 'real_end_time', + 'value' => $end_date, + 'operand' => '<=') + ), + 'joins' => array("JOIN {$db_prefix}entity_relationships r ON (r.guid_two = e.guid)"), + 'wheres' => array("r.relationship = 'personal_event'","r.guid_one IN ($friend_list)"), + ); + + if ($container_guid) { + $options_new_way['container_guid'] = $container_guid; + } + if ($region && $region != '-') { + $options_new_way['metadata_name_value_pairs'][] = array('name'=>'region','value'=>sanitize_string($region)); + } if ($is_count) { - $count = event_calendar_get_entities_from_metadata_between('start_date','end_date', + $count_old_way = event_calendar_get_entities_from_metadata_between('start_date','end_date', $start_date, $end_date, "object", "event_calendar", $friend_guids, $container_guid, $limit,$offset,"",0,true,true,$region); - return $count; + $options_new_way['count'] = TRUE; + $count_new_way = elgg_get_entities_from_metadata($options_new_way); + return $count_old_way + $count_new_way; } else { - $events = event_calendar_get_entities_from_metadata_between('start_date','end_date', + $events_old_way = event_calendar_get_entities_from_metadata_between('start_date','end_date', $start_date, $end_date, "object", "event_calendar", $friend_guids, $container_guid, $limit,$offset,"",0,true,false,$region); //return event_calendar_vsort($events,'start_date'); - return $events; + $options_new_way['limit'] = $limit; + $options_new_way['offset'] = $offset; + $options_new_way['order_by_metadata'] = array(array('name'=>'start_date','direction'=>'ASC','as'=>'integer')); + //print_r($options_new_way); + $events_new_way = elgg_get_entities_from_metadata($options_new_way); + if (!$events_old_way) { + return $events_new_way; + } else if (!$events_new_way) { + return $events_old_way; + } else { + return array_merge($events_old_way,$events_new_way); + } } } } @@ -240,7 +312,7 @@ function event_calendar_vsort($original,$field, $descending = false) { return $original; } $sortArr = array(); - + foreach ( $original as $key => $item ) { $sortArr[ $key ] = $item->$field; } @@ -250,7 +322,7 @@ function event_calendar_vsort($original,$field, $descending = false) { } else { asort( $sortArr ); } - + $resultArr = array(); foreach ( $sortArr as $key => $value ) { $resultArr[ $key ] = $original[ $key ]; @@ -259,6 +331,8 @@ function event_calendar_vsort($original,$field, $descending = false) { return $resultArr; } +// TODO - replace with Elgg API if possible + /** * Return a list of entities based on the given search criteria. * In this case, returns entities with the given metadata between two values inclusive @@ -302,7 +376,7 @@ function event_calendar_get_entities_from_metadata_between($meta_start_name, $me } } } - + $entity_type = sanitise_string($entity_type); $entity_subtype = get_subtype_id($entity_type, $entity_subtype); $limit = (int)$limit; @@ -328,9 +402,9 @@ function event_calendar_get_entities_from_metadata_between($meta_start_name, $me } if ($site_guid == 0) $site_guid = $CONFIG->site_guid; - + //$access = get_access_list(); - + $where = array(); if ($entity_type!="") @@ -361,7 +435,7 @@ function event_calendar_get_entities_from_metadata_between($meta_start_name, $me $where[] = "e.owner_guid = {$owner_guid}"; } } - + if (is_array($container_guid)) { $where[] = "e.container_guid in (".implode(",",$container_guid).")"; } else if ($container_guid > 0) @@ -372,7 +446,7 @@ function event_calendar_get_entities_from_metadata_between($meta_start_name, $me } else { $query = "SELECT count(distinct e.guid) as total "; } - + $query .= "from {$CONFIG->dbprefix}entities e JOIN {$CONFIG->dbprefix}metadata m on e.guid = m.entity_guid JOIN {$CONFIG->dbprefix}metadata m2 on e.guid = m2.entity_guid "; if ($filter) { $query .= "JOIN {$CONFIG->dbprefix}annotations a ON (a.entity_guid = e.guid) "; @@ -388,19 +462,19 @@ function event_calendar_get_entities_from_metadata_between($meta_start_name, $me $query .= get_access_sql_suffix("e"); // Add access controls $query .= ' and ' . get_access_sql_suffix("m"); // Add access controls $query .= ' and ' . get_access_sql_suffix("m2"); // Add access controls - - + + if (!$count) { $query .= " order by $order_by limit $offset, $limit"; // Add order and limit $entities = get_data($query, "entity_row_to_elggstar"); if (elgg_get_plugin_setting('add_to_group_calendar', 'event_calendar') == 'yes') { if (get_entity($container_guid) instanceOf ElggGroup) { - $entities = event_calendar_get_entities_from_metadata_between_related($meta_start_name, $meta_end_name, - $meta_start_value, $meta_end_value, $entity_type, - $entity_subtype, $owner_guid, $container_guid, - $limit = 10, $offset = 0, $order_by = "", $site_guid = 0, - $filter = false, $count = false, $region='-',$entities); + $entities = event_calendar_get_entities_from_metadata_between_related($meta_start_name, $meta_end_name, + $meta_start_value, $meta_end_value, $entity_type, + $entity_subtype, $owner_guid, $container_guid, + $limit = 10, $offset = 0, $order_by = "", $site_guid = 0, + $filter = false, $count = false, $region='-',$entities); } } return $entities; @@ -414,12 +488,12 @@ function event_calendar_get_entities_from_metadata_between($meta_start_name, $me // adds any related events (has the display_on_group relation) // that meet the appropriate criteria -function event_calendar_get_entities_from_metadata_between_related($meta_start_name, $meta_end_name, - $meta_start_value, $meta_end_value, $entity_type = "", - $entity_subtype = "", $owner_guid = 0, $container_guid = 0, - $limit = 10, $offset = 0, $order_by = "", $site_guid = 0, - $filter = false, $count = false, $region='-',$main_events) { - +function event_calendar_get_entities_from_metadata_between_related($meta_start_name, $meta_end_name, +$meta_start_value, $meta_end_value, $entity_type = "", +$entity_subtype = "", $owner_guid = 0, $container_guid = 0, +$limit = 10, $offset = 0, $order_by = "", $site_guid = 0, +$filter = false, $count = false, $region='-',$main_events) { + $main_list = array(); if ($main_events) { foreach ($main_events as $event) { @@ -438,14 +512,14 @@ function event_calendar_get_entities_from_metadata_between_related($meta_start_n } } // get all the events (across all containers) that meet the criteria - $all_events = event_calendar_get_entities_from_metadata_between($meta_start_name, $meta_end_name, - $meta_start_value, $meta_end_value, $entity_type, $entity_subtype, $owner_guid, - 0, $limit, $offset, $order_by, $site_guid, $filter, $count, $region); - + $all_events = event_calendar_get_entities_from_metadata_between($meta_start_name, $meta_end_name, + $meta_start_value, $meta_end_value, $entity_type, $entity_subtype, $owner_guid, + 0, $limit, $offset, $order_by, $site_guid, $filter, $count, $region); + if ($all_events) { foreach($all_events as $event) { - if (array_key_exists($event->guid,$related_list) - && !array_key_exists($event->guid,$main_list)) { + if (array_key_exists($event->guid,$related_list) + && !array_key_exists($event->guid,$main_list)) { // add to main events $main_events[] = $event; } @@ -504,7 +578,7 @@ $count = false, $region='-', $meta_max = '', $annotation_name = '') } } } - + $entity_type = sanitise_string($entity_type); $entity_subtype = get_subtype_id($entity_type, $entity_subtype); $limit = (int)$limit; @@ -530,9 +604,9 @@ $count = false, $region='-', $meta_max = '', $annotation_name = '') } if ($site_guid == 0) $site_guid = $CONFIG->site_guid; - + //$access = get_access_list(); - + $where = array(); if ($entity_type!="") @@ -563,7 +637,7 @@ $count = false, $region='-', $meta_max = '', $annotation_name = '') $where[] = "e.owner_guid = {$owner_guid}"; } } - + if (is_array($container_guid)) { $where[] = "e.container_guid in (".implode(",",$container_guid).")"; } else if ($container_guid > 0) @@ -574,7 +648,7 @@ $count = false, $region='-', $meta_max = '', $annotation_name = '') } else { $query = "SELECT count(distinct e.guid) as total "; } - + $query .= "FROM {$CONFIG->dbprefix}entities e JOIN {$CONFIG->dbprefix}metadata m on e.guid = m.entity_guid JOIN {$CONFIG->dbprefix}metadata m2 on e.guid = m2.entity_guid "; if ($filter) { $query .= "JOIN {$CONFIG->dbprefix}annotations a ON (a.entity_guid = e.guid) "; @@ -674,7 +748,7 @@ function event_calendar_get_personal_events_for_user($user_guid,$limit) { 'annotation_value' => $user_guid, 'limit' => 0, )); - + $events_new_way = elgg_get_entities_from_relationship(array( 'type' => 'object', 'subtype' => 'event_calendar', @@ -682,9 +756,9 @@ function event_calendar_get_personal_events_for_user($user_guid,$limit) { 'relationship_guid' => $user_guid, 'limit' => 0, )); - + $events = array_merge($events_old_way,$events_new_way); - + $final_events = array(); if ($events) { $now = time(); @@ -961,7 +1035,7 @@ function event_calendar_get_end_time($event) { function event_calendar_view_entity_list($entities, $count, $offset, $limit, $fullview = true, $viewtypetoggle = true, $pagination = true) { $count = (int) $count; $limit = (int) $limit; - + // do not require views to explicitly pass in the offset if (!$offset = (int) $offset) { $offset = sanitise_int(get_input('offset', 0)); @@ -997,10 +1071,10 @@ function event_calendar_personal_can_manage($event,$user_id) { // load the event from the database if ($event && ($event->owner_guid == $user_id)) { $authorised = TRUE; - } + } } } - + return $authorised; } @@ -1038,16 +1112,16 @@ function event_calendar_get_page_content_list($page_type,$group_guid,$start_date 'href' => "event_calendar/add/".$group_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)) { + if (elgg_is_admin_logged_in() || ($group->owner_guid == $user_guid)) { elgg_register_menu_item('title', array( 'name' => 'add', 'href' => "event_calendar/add/".$group_guid, 'text' => elgg_echo('event_calendar:add'), 'class' => 'elgg-button elgg-button-action', - )); + )); } } } else { @@ -1061,7 +1135,7 @@ function event_calendar_get_page_content_list($page_type,$group_guid,$start_date '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 @@ -1075,11 +1149,11 @@ function event_calendar_get_page_content_list($page_type,$group_guid,$start_date } } } - + $params = event_calendar_generate_listing_params($page_type,$group_guid,$start_date,$display_mode,$filter,$region); $body = elgg_view_layout("content", $params); - + return elgg_view_page($title,$body); } @@ -1089,7 +1163,7 @@ function event_calendar_get_page_content_edit($page_type,$guid) { $vars['name'] = 'event_calendar_edit'; // just in case a feature adds an image upload $vars['enctype'] = 'multipart/form-data'; - + $body_vars = array(); if ($page_type == 'edit') { @@ -1119,7 +1193,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(); $content = elgg_view_form('event_calendar/edit', $vars, $body_vars); } else { $content = elgg_echo('event_calendar:no_group'); @@ -1129,16 +1203,16 @@ function event_calendar_get_page_content_edit($page_type,$guid) { elgg_push_breadcrumb(elgg_echo('event_calendar:add_event_title')); $body_vars['form_data'] = event_calendar_prepare_edit_form_vars(); - + $content = elgg_view_form('event_calendar/edit', $vars, $body_vars); - } + } } $params = array('title' => $title, 'content' => $content,'filter' => ''); $body = elgg_view_layout("content", $params); - - return elgg_view_page($title,$body); + + return elgg_view_page($title,$body); } /** @@ -1184,7 +1258,7 @@ function event_calendar_prepare_edit_form_vars($event = NULL) { $values[$key] = $value; } } - + elgg_clear_sticky_form('event_calendar'); return $values; @@ -1195,7 +1269,7 @@ function event_calendar_generate_listing_params($page_type,$group_guid,$original $event_calendar_spots_display = trim(elgg_get_plugin_setting('spots_display', 'event_calendar')); $event_calendar_first_date = trim(elgg_get_plugin_setting('first_date', 'event_calendar')); $event_calendar_last_date = trim(elgg_get_plugin_setting('last_date', 'event_calendar')); - + if (!$original_start_date) { $original_start_date = date('Y-m-d'); } @@ -1205,7 +1279,7 @@ function event_calendar_generate_listing_params($page_type,$group_guid,$original if ( $event_calendar_last_date && ($original_start_date > $event_calendar_last_date) ) { $original_start_date = $event_calendar_first_date; } - + if ($event_calendar_listing_format == 'paged') { $start_ts = strtotime($original_start_date); $start_date = $original_start_date; @@ -1217,17 +1291,17 @@ function event_calendar_generate_listing_params($page_type,$group_guid,$original } $mode = 'paged'; } else { - + // the default interval is one month $day = 60*60*24; $week = 7*$day; $month = 31*$day; - + $mode = trim($display_mode); if (!$mode) { $mode = 'month'; } - + if ($mode == "day") { $start_date = $original_start_date; $end_date = $start_date; @@ -1238,7 +1312,7 @@ function event_calendar_generate_listing_params($page_type,$group_guid,$original $start_ts = strtotime($original_start_date); $start_ts -= date("w",$start_ts)*$day; $end_ts = $start_ts + 6*$day; - + $start_date = date('Y-m-d',$start_ts); $end_date = date('Y-m-d',$end_ts); } else { @@ -1248,17 +1322,17 @@ function event_calendar_generate_listing_params($page_type,$group_guid,$original $start_date = $year.'-'.$month.'-1'; $end_date = $year.'-'.$month.'-'.getLastDayOfMonth($month,$year); } - + if ($event_calendar_first_date && ($start_date < $event_calendar_first_date)) { $start_date = $event_calendar_first_date; } - + if ($event_calendar_last_date && ($end_date > $event_calendar_last_date)) { $end_date = $event_calendar_last_date; } - + $start_ts = strtotime($start_date); - + if ($mode == "day") { $end_ts = strtotime($end_date)+$day-1; $subtitle = elgg_echo('event_calendar:day_label').': '.date('j F Y',strtotime($start_date)); @@ -1270,11 +1344,11 @@ function event_calendar_generate_listing_params($page_type,$group_guid,$original $subtitle = date('F Y',$start_ts); } } - - $user_guid = elgg_get_logged_in_user_guid(); - + + $user_guid = elgg_get_logged_in_user_guid(); + $offset = get_input('offset'); - + $limit = 15; if ($event_calendar_spots_display == 'yes') { if (!$filter) { @@ -1293,13 +1367,13 @@ function event_calendar_generate_listing_params($page_type,$group_guid,$original $events = event_calendar_get_open_events_between($start_ts,$end_ts,false,$limit,$offset,$group_guid,$region); } else if ($filter == 'friends') { $count = event_calendar_get_events_for_friends_between($start_ts,$end_ts,true,$limit,$offset,$user_guid,$group_guid,$region); - $events = event_calendar_get_events_for_friends_between($start_ts,$end_ts,false,$limit,$offset,$user_guid,$group_guid,$region); + $events = event_calendar_get_events_for_friends_between($start_ts,$end_ts,false,$limit,$offset,$user_guid,$group_guid,$region); } else if ($filter == 'mine') { - $count = event_calendar_get_events_for_user_between($start_ts,$end_ts,true,$limit,$offset,$user_guid,$group_guid,$region); - $events = event_calendar_get_events_for_user_between($start_ts,$end_ts,false,$limit,$offset,$user_guid,$group_guid,$region); + $count = event_calendar_get_events_for_user_between2($start_ts,$end_ts,true,$limit,$offset,$user_guid,$group_guid,$region); + $events = event_calendar_get_events_for_user_between2($start_ts,$end_ts,false,$limit,$offset,$user_guid,$group_guid,$region); } - - $vars = array( + + $vars = array( 'original_start_date' => $original_start_date, 'start_date' => $start_date, 'end_date' => $end_date, @@ -1315,18 +1389,18 @@ function event_calendar_generate_listing_params($page_type,$group_guid,$original 'region' => $region, 'listing_format' => $event_calendar_listing_format, ); - + $content = elgg_view('event_calendar/show_events', $vars); $filter_override = elgg_view('event_calendar/filter_menu',$vars); - + if ($event_calendar_listing_format == 'paged') { - $title = elgg_echo('event_calendar:upcoming_events_title'); + $title = elgg_echo('event_calendar:upcoming_events_title'); } else { $title = elgg_echo('event_calendar:show_events_title'). ' ('.$subtitle.')'; } - + $params = array('title' => $title, 'content' => $content, 'filter_override'=>$filter_override); - + return $params; } @@ -1346,7 +1420,7 @@ function event_calendar_get_page_content_view($event_guid) { } else { elgg_push_breadcrumb(elgg_echo('event_calendar:show_events_title'),'event_calendar/list'); } - + elgg_push_breadcrumb($event->title); $content = elgg_view_entity($event, array('full_view' => true)); //check to see if comment are on - TODO - add this feature to all events @@ -1354,12 +1428,12 @@ function event_calendar_get_page_content_view($event_guid) { $content .= elgg_view_comments($event); } } - + $params = array('title' => $title, 'content' => $content,'filter' => ''); - + $body = elgg_view_layout("content", $params); - - return elgg_view_page($title,$body); + + return elgg_view_page($title,$body); } function event_calendar_get_page_content_display_users($event_guid) { @@ -1383,7 +1457,7 @@ function event_calendar_get_page_content_display_users($event_guid) { elgg_push_breadcrumb($event->title,$event->getURL()); elgg_push_breadcrumb(elgg_echo('event_calendar:users_for_event_breadcrumb')); $limit = 12; - $offset = get_input('offset', 0); + $offset = get_input('offset', 0); $users = event_calendar_get_users_for_event($event_guid,$limit,$offset,false); $options = array( 'full_view' => FALSE, @@ -1395,10 +1469,10 @@ function event_calendar_get_page_content_display_users($event_guid) { $content = elgg_view_entity_list($users,$options); } $params = array('title' => $title, 'content' => $content,'filter' => ''); - + $body = elgg_view_layout("content", $params); - - return elgg_view_page($title,$body); + + return elgg_view_page($title,$body); } function event_calendar_get_page_content_review_requests($event_guid) { @@ -1421,10 +1495,10 @@ function event_calendar_get_page_content_review_requests($event_guid) { elgg_push_breadcrumb($event->title,$event->getURL()); elgg_push_breadcrumb(elgg_echo('event_calendar:review_requests_menu_title')); $user_guid = elgg_get_logged_in_user_guid(); - + if (event_calendar_personal_can_manage($event,$user_guid)) { $requests = elgg_get_entities_from_relationship( - array( + array( 'relationship' => 'event_calendar_request', 'relationship_guid' => $event_guid, 'inverse_relationship' => TRUE, @@ -1440,10 +1514,10 @@ function event_calendar_get_page_content_review_requests($event_guid) { } } $params = array('title' => $title, 'content' => $content,'filter' => ''); - + $body = elgg_view_layout("content", $params); - - return elgg_view_page($title,$body); + + return elgg_view_page($title,$body); } function event_calendar_handle_menu($event_guid) { diff --git a/start.php b/start.php index 3bf28c7d3..36b82c941 100644 --- a/start.php +++ b/start.php @@ -115,59 +115,6 @@ function event_calendar_owner_block_menu($hook, $type, $return, $params) { return $return; } -// TODO: delete this once everything is recoded - -function event_calendar_pagesetup() { - - global $CONFIG; - - $page_owner = page_owner_entity(); - - $context = get_context(); - - // Group submenu option - if ($page_owner instanceof ElggGroup && $context == 'groups') { - if (event_calendar_activated_for_group($page_owner)) { - add_submenu_item(elgg_echo("event_calendar:group"), $CONFIG->wwwroot . "pg/event_calendar/group/" . $page_owner->getGUID()); - } - } else if ($context == 'event_calendar'){ - add_submenu_item(elgg_echo("event_calendar:site_wide_link"), $CONFIG->wwwroot . "pg/event_calendar/"); - $site_calendar = get_plugin_setting('site_calendar', 'event_calendar'); - if (!$site_calendar || $site_calendar == 'admin') { - if (isadminloggedin()) { - // only admins can post directly to the site-wide calendar - add_submenu_item(elgg_echo('event_calendar:new'), $CONFIG->url . "pg/event_calendar/new/", 'eventcalendaractions'); - } - } else if ($site_calendar == 'loggedin') { - // any logged-in user can post to the site calendar - if (isloggedin()) { - add_submenu_item(elgg_echo('event_calendar:new'), $CONFIG->url . "pg/event_calendar/new/", 'eventcalendaractions'); - } - } - } - - if (($context == 'groups') || ($context == 'event_calendar')) { - if (($event_id = get_input('event_id',0)) && ($event = get_entity($event_id))) { - if (isadminloggedin() && (get_plugin_setting('allow_featured', 'event_calendar') == 'yes')) { - if ($event->featured) { - add_submenu_item(elgg_echo('event_calendar:unfeature'), $CONFIG->url . "action/event_calendar/unfeature?event_id=".$event_id.'&'.event_calendar_security_fields(), 'eventcalendaractions'); - } else { - add_submenu_item(elgg_echo('event_calendar:feature'), $CONFIG->url . "action/event_calendar/feature?event_id=".$event_id.'&'.event_calendar_security_fields(), 'eventcalendaractions'); - } - } - add_submenu_item(elgg_echo("event_calendar:view_link"), $CONFIG->wwwroot . "pg/event_calendar/view/" . $event_id,'0eventcalendaradmin'); - if ($event->canEdit()) { - add_submenu_item(elgg_echo("event_calendar:edit_link"), $CONFIG->wwwroot . "mod/event_calendar/manage_event.php?event_id=" . $event_id,'0eventcalendaradmin'); - add_submenu_item(elgg_echo("event_calendar:delete_link"), $CONFIG->wwwroot . "mod/event_calendar/delete_confirm.php?event_id=" . $event_id,'0eventcalendaradmin'); - $event_calendar_personal_manage = get_plugin_setting('personal_manage', 'event_calendar'); - if ($event_calendar_personal_manage == 'no') { - add_submenu_item(elgg_echo('event_calendar:review_requests_title'), $CONFIG->wwwroot . "pg/event_calendar/review_requests/".$event_id, '0eventcalendaradmin'); - } - } - } - } -} - function event_calendar_url($entity) { $friendly_title = elgg_get_friendly_title($entity->title); return "event_calendar/view/{$entity->guid}/$friendly_title"; @@ -246,11 +193,11 @@ function event_calendar_page_handler($page) { if (isset($page[2])) { $start_date = $page[2]; if (isset($page[3])) { - $display_mode = $page[2]; - if (isset($page[3])) { - $filter_mode = $page[3]; - if (isset($page[4])) { - $region = $page[4]; + $display_mode = $page[3]; + if (isset($page[4])) { + $filter_mode = $page[4]; + if (isset($page[5])) { + $region = $page[5]; } else { $region = ''; } -- cgit v1.2.3 From 665a96fb82314b1836a4dcedc1e52b25c202a25b Mon Sep 17 00:00:00 2001 From: Kevin Jardine <kevinjardine@yahoo.com> Date: Tue, 27 Sep 2011 14:31:35 +0200 Subject: added event-calendar-filter-period-PERIOD class to datepicker wrapper div --- views/default/input/datepicker_inline.php | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/views/default/input/datepicker_inline.php b/views/default/input/datepicker_inline.php index 69520b9ef..bcb7c85f5 100644 --- a/views/default/input/datepicker_inline.php +++ b/views/default/input/datepicker_inline.php @@ -21,6 +21,12 @@ if ($vars['mode'] == 'week') { } else { $selected_week = ''; } + +if ($vars['mode']) { + $wrapper_class = "event-calendar-filter-period-".$vars['mode']; +} else { + $wrapper_class = "event-calendar-filter-period-month"; +} // TODO - figure out how to move this JavaScript ?> @@ -74,5 +80,5 @@ var done_loading = true; }); </script> -<div style="position:relative;" id="<?php echo $vars['name']; ?>" ></div> +<div style="position:relative;" id="<?php echo $vars['name']; ?>" class="<?php echo $wrapper_class; ?>" ></div> <p style="clear: both;"><!-- See day-by-day example for highlighting days code --></p> \ No newline at end of file -- cgit v1.2.3 From 1bba961e3cea230e7d6a62a5016c5ea23a5c0e76 Mon Sep 17 00:00:00 2001 From: Kevin Jardine <kevinjardine@yahoo.com> Date: Tue, 27 Sep 2011 14:45:39 +0200 Subject: updated README.txt --- README.txt | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/README.txt b/README.txt index 3cb68ee3b..440f1707e 100644 --- a/README.txt +++ b/README.txt @@ -4,7 +4,7 @@ * @package event_calendar * @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.html GNU Public License version 2 * @author Kevin Jardine <kevin@radagast.biz> - * @copyright Radagast Solutions 2008 + * @copyright Radagast Solutions 2008-2011 * @link http://radagast.biz/ * */ @@ -13,9 +13,11 @@ recently added features. For more information, check the CHANGES.txt file or look at the event calendar settings available through Tools Administration. -Version: 0.8 +Version: 0.85 -Requires: Elgg 1.5 or higher +Requires: Elgg 1.8 or higher + +Should be installed in mod/event_calendar *Description* -- cgit v1.2.3 From 8b595e63700e1ebaf0f31b08b0009922acc780e3 Mon Sep 17 00:00:00 2001 From: Kevin Jardine <kevinjardine@yahoo.com> Date: Wed, 28 Sep 2011 17:02:51 +0200 Subject: restored RSS feed and added iCal feed --- images/ics.png | Bin 0 -> 344 bytes languages/en.php | 2 ++ models/model.php | 23 +++++++++++++++- views/ical/event_calendar/show_events.php | 7 +++++ views/ical/object/event_calendar.php | 44 ++++++++++++++++++++++++++++++ views/ical/page/default.php | 17 ++++++++++++ views/ical/page/layouts/default.php | 2 ++ views/rss/event_calendar/show_events.php | 1 - 8 files changed, 94 insertions(+), 2 deletions(-) create mode 100644 images/ics.png create mode 100644 views/ical/event_calendar/show_events.php create mode 100644 views/ical/object/event_calendar.php create mode 100644 views/ical/page/default.php create mode 100644 views/ical/page/layouts/default.php diff --git a/images/ics.png b/images/ics.png new file mode 100644 index 000000000..311ffa221 Binary files /dev/null and b/images/ics.png differ diff --git a/languages/en.php b/languages/en.php index 5aa96adee..883576b3b 100644 --- a/languages/en.php +++ b/languages/en.php @@ -209,6 +209,8 @@ You can manage calendar requests for this event here: 'event_calendar:error_event_edit' => "Error: there is no such event or you do not have permission to edit it.", 'event_calendar:add' => "Add", + 'feed:ical' => "iCal feed for this page", + /** * Event calendar river **/ diff --git a/models/model.php b/models/model.php index 4a7da3dd1..dafc10bc9 100644 --- a/models/model.php +++ b/models/model.php @@ -1096,6 +1096,8 @@ function event_calendar_send_event_request($event,$user_guid) { // pages function event_calendar_get_page_content_list($page_type,$group_guid,$start_date,$display_mode,$filter,$region='-') { + global $autofeed; + $autofeed = true; if ($page_type == 'group') { if (!event_calendar_activated_for_group($group_guid)) { forward(); @@ -1149,8 +1151,26 @@ function event_calendar_get_page_content_list($page_type,$group_guid,$start_date } } } + + $url = full_url(); + if (substr_count($url, '?')) { + $url .= "&view=ical"; + } else { + $url .= "?view=ical"; + } $params = event_calendar_generate_listing_params($page_type,$group_guid,$start_date,$display_mode,$filter,$region); + + $url = elgg_format_url($url); + $menu_options = array( + 'name' => 'ical', + 'text' => '<img src="'.elgg_get_site_url().'mod/event_calendar/images/ics.png" />', + 'href' => $url, + 'title' => elgg_echo('feed:ical'), + 'priority' => 800, + ); + $menu_item = ElggMenuItem::factory($menu_options); + elgg_register_menu_item('extras', $menu_item); $body = elgg_view_layout("content", $params); @@ -1348,8 +1368,8 @@ function event_calendar_generate_listing_params($page_type,$group_guid,$original $user_guid = elgg_get_logged_in_user_guid(); $offset = get_input('offset'); + $limit = get_input('limit',15); - $limit = 15; if ($event_calendar_spots_display == 'yes') { if (!$filter) { $filter = 'open'; @@ -1391,6 +1411,7 @@ function event_calendar_generate_listing_params($page_type,$group_guid,$original ); $content = elgg_view('event_calendar/show_events', $vars); + $filter_override = elgg_view('event_calendar/filter_menu',$vars); if ($event_calendar_listing_format == 'paged') { diff --git a/views/ical/event_calendar/show_events.php b/views/ical/event_calendar/show_events.php new file mode 100644 index 000000000..19981596f --- /dev/null +++ b/views/ical/event_calendar/show_events.php @@ -0,0 +1,7 @@ +<?php +if ($vars['events']) { + foreach ($vars['events'] as $entity) { + echo elgg_view_entity($entity); + } + //echo elgg_view_entity_list($vars['events'], $vars['count'], $vars['offset'], $vars['limit'], false, false); +} diff --git a/views/ical/object/event_calendar.php b/views/ical/object/event_calendar.php new file mode 100644 index 000000000..a6ed889e5 --- /dev/null +++ b/views/ical/object/event_calendar.php @@ -0,0 +1,44 @@ +<?php +$event = $vars['entity']; +if ($event->organizer) { + $organizer = "\nORGANIZER;CN={$event->organizer}\n"; +} else { + $organizer = ''; +} + +if ($event->description) { + // make sure that we are using Unix line endings + $description = str_replace("\r\n","\n",$event->description); + $description = str_replace("\r","\n",$description); + + // now convert to icalendar format + $description = str_replace("\n",'\n',$description); + $description = wordwrap($description,75,"\r\n ",TRUE); +} else { + $description = ''; +} +?> +BEGIN:VEVENT +UID:<?php echo elgg_get_site_url().'event_calendar/view/'.$event->guid; ?> + +URL:<?php echo elgg_get_site_url().'event_calendar/view/'.$event->guid; ?> + +DTSTAMP:<?php echo date("Ymd\THis\Z", $event->getTimeUpdated())?> + +CREATED:<?php echo date("Ymd\THis\Z", $event->getTimeCreated())?> + +LAST-MODIFIED:<?php echo date("Ymd\THis\Z", $event->getTimeUpdated()) ?> + +DTSTART:<?php echo date("Ymd\THis\Z", $event->start_date); ?> + +DTEND:<?php echo date("Ymd\THis\Z", $event->real_end_time); ?> + +SUMMARY:<?php echo $event->title; ?> + +DESCRIPTION:<?php echo $description; ?> + +LOCATION:<?php echo $event->venue; ?><?php echo $organizer; ?> + +CATEGORIES:<?php implode(",",$event->tags); ?> + +END:VEVENT diff --git a/views/ical/page/default.php b/views/ical/page/default.php new file mode 100644 index 000000000..b8347c9a0 --- /dev/null +++ b/views/ical/page/default.php @@ -0,0 +1,17 @@ +<?php +/** + * Elgg ICAL output pageshell + * + * @package Elgg + * @subpackage Core + * + */ + +header("Content-Type: text/calendar"); +header("Content-Disposition: attachment; filename=\"calendar.ics\""); +?> +BEGIN:VCALENDAR +VERSION:2.0 +PRODID:-//Curverider Ltd//NONSGML Elgg <?php echo get_version(true); ?>//EN +<?php echo $vars['body']; ?> +END:VCALENDAR diff --git a/views/ical/page/layouts/default.php b/views/ical/page/layouts/default.php new file mode 100644 index 000000000..57598fa1b --- /dev/null +++ b/views/ical/page/layouts/default.php @@ -0,0 +1,2 @@ +<?php +echo $vars['content']; \ No newline at end of file diff --git a/views/rss/event_calendar/show_events.php b/views/rss/event_calendar/show_events.php index 0b2fe5b70..add5b75db 100644 --- a/views/rss/event_calendar/show_events.php +++ b/views/rss/event_calendar/show_events.php @@ -9,7 +9,6 @@ * @link http://radagast.biz/ * */ - if ($vars['events']) { echo elgg_view_entity_list($vars['events'], $vars['count'], $vars['offset'], $vars['limit'], false, false); } -- cgit v1.2.3 From 289de3f16b258a3ca83c29b0bd74b95bfb097a95 Mon Sep 17 00:00:00 2001 From: Kevin Jardine <kevinjardine@yahoo.com> Date: Wed, 28 Sep 2011 17:10:47 +0200 Subject: removed file attachment header from iCal feed --- views/ical/page/default.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/views/ical/page/default.php b/views/ical/page/default.php index b8347c9a0..c269b5849 100644 --- a/views/ical/page/default.php +++ b/views/ical/page/default.php @@ -8,7 +8,7 @@ */ header("Content-Type: text/calendar"); -header("Content-Disposition: attachment; filename=\"calendar.ics\""); +//header("Content-Disposition: attachment; filename=\"calendar.ics\""); ?> BEGIN:VCALENDAR VERSION:2.0 -- cgit v1.2.3 From 61f6d5872829872c2067258e60759549516716e7 Mon Sep 17 00:00:00 2001 From: Kevin Jardine <kevinjardine@yahoo.com> Date: Thu, 29 Sep 2011 16:01:52 +0200 Subject: added auth token feature --- languages/en.php | 3 + models/model.php | 86 +++++++++++++++++++------- start.php | 31 ++++++++++ views/default/settings/event_calendar/edit.php | 8 +++ 4 files changed, 107 insertions(+), 21 deletions(-) diff --git a/languages/en.php b/languages/en.php index 883576b3b..88d66a1da 100644 --- a/languages/en.php +++ b/languages/en.php @@ -210,6 +210,9 @@ You can manage calendar requests for this event here: 'event_calendar:add' => "Add", 'feed:ical' => "iCal feed for this page", + 'event_calendar:ical_auth_file_name:title' => "Location of iCal authentication file on local file system (experimental - not needed for public feeds)", + + 'event_calendar:owner:permissions_error' => "You do not have permission to view that page.", /** * Event calendar river diff --git a/models/model.php b/models/model.php index dafc10bc9..dedb69efc 100644 --- a/models/model.php +++ b/models/model.php @@ -1095,23 +1095,23 @@ function event_calendar_send_event_request($event,$user_guid) { // pages -function event_calendar_get_page_content_list($page_type,$group_guid,$start_date,$display_mode,$filter,$region='-') { +function event_calendar_get_page_content_list($page_type,$container_guid,$start_date,$display_mode,$filter,$region='-') { global $autofeed; $autofeed = true; if ($page_type == 'group') { - if (!event_calendar_activated_for_group($group_guid)) { + if (!event_calendar_activated_for_group($container__guid)) { forward(); } elgg_push_breadcrumb(elgg_echo('event_calendar:group_breadcrumb')); elgg_push_context('groups'); - elgg_set_page_owner_guid($group_guid); + 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/".$group_guid, + 'href' => "event_calendar/add/".$container_guid, 'text' => elgg_echo('event_calendar:add'), 'class' => 'elgg-button elgg-button-action', )); @@ -1120,7 +1120,7 @@ function event_calendar_get_page_content_list($page_type,$group_guid,$start_date if (elgg_is_admin_logged_in() || ($group->owner_guid == $user_guid)) { elgg_register_menu_item('title', array( 'name' => 'add', - 'href' => "event_calendar/add/".$group_guid, + 'href' => "event_calendar/add/".$container_guid, 'text' => elgg_echo('event_calendar:add'), 'class' => 'elgg-button elgg-button-action', )); @@ -1151,6 +1151,8 @@ function event_calendar_get_page_content_list($page_type,$group_guid,$start_date } } } + + $params = event_calendar_generate_listing_params($page_type,$container_guid,$start_date,$display_mode,$filter,$region); $url = full_url(); if (substr_count($url, '?')) { @@ -1158,8 +1160,6 @@ function event_calendar_get_page_content_list($page_type,$group_guid,$start_date } else { $url .= "?view=ical"; } - - $params = event_calendar_generate_listing_params($page_type,$group_guid,$start_date,$display_mode,$filter,$region); $url = elgg_format_url($url); $menu_options = array( @@ -1284,7 +1284,7 @@ function event_calendar_prepare_edit_form_vars($event = NULL) { return $values; } -function event_calendar_generate_listing_params($page_type,$group_guid,$original_start_date,$display_mode,$filter,$region='-') { +function event_calendar_generate_listing_params($page_type,$container_guid,$original_start_date,$display_mode,$filter,$region='-') { $event_calendar_listing_format = elgg_get_plugin_setting('listing_format', 'event_calendar'); $event_calendar_spots_display = trim(elgg_get_plugin_setting('spots_display', 'event_calendar')); $event_calendar_first_date = trim(elgg_get_plugin_setting('first_date', 'event_calendar')); @@ -1364,8 +1364,38 @@ function event_calendar_generate_listing_params($page_type,$group_guid,$original $subtitle = date('F Y',$start_ts); } } - - $user_guid = elgg_get_logged_in_user_guid(); + + $current_user_guid = elgg_get_logged_in_user_guid(); + + $access_status = elgg_get_ignore_access(); + + if ($page_type == 'owner') { + $container = get_entity($container_guid); + if (elgg_instanceof($container, 'user')) { + $auth_token = get_input('auth_token'); + if ($auth_token) { + $secret_key = event_calendar_get_secret_key(); + if ($secret_key && ($auth_token === sha1($container->username . $secret_key))) { + elgg_set_ignore_access(TRUE); + } + } + if ($container->canEdit()) { + $user_guid = $container_guid; + $group_guid = 0; + } else { + register_error('event_calendar:owner:permissions_error'); + forward(); + exit; + } + } else { + register_error('event_calendar:owner:permissions_error'); + forward(); + exit; + } + } else { + $user_guid = $current_user_guid; + $group_guid = $container_guid; + } $offset = get_input('offset'); $limit = get_input('limit',15); @@ -1380,17 +1410,17 @@ function event_calendar_generate_listing_params($page_type,$group_guid,$original } } if ($filter == 'all') { - $count = event_calendar_get_events_between($start_ts,$end_ts,true,$limit,$offset,$group_guid,$region); - $events = event_calendar_get_events_between($start_ts,$end_ts,false,$limit,$offset,$group_guid,$region); + $count = event_calendar_get_events_between($start_ts,$end_ts,true,$limit,$offset,$container_guid,$region); + $events = event_calendar_get_events_between($start_ts,$end_ts,false,$limit,$offset,$container_guid,$region); } else if ($filter == 'open') { - $count = event_calendar_get_open_events_between($start_ts,$end_ts,true,$limit,$offset,$group_guid,$region); - $events = event_calendar_get_open_events_between($start_ts,$end_ts,false,$limit,$offset,$group_guid,$region); + $count = event_calendar_get_open_events_between($start_ts,$end_ts,true,$limit,$offset,$container_guid,$region); + $events = event_calendar_get_open_events_between($start_ts,$end_ts,false,$limit,$offset,$container_guid,$region); } else if ($filter == 'friends') { - $count = event_calendar_get_events_for_friends_between($start_ts,$end_ts,true,$limit,$offset,$user_guid,$group_guid,$region); - $events = event_calendar_get_events_for_friends_between($start_ts,$end_ts,false,$limit,$offset,$user_guid,$group_guid,$region); + $count = event_calendar_get_events_for_friends_between($start_ts,$end_ts,true,$limit,$offset,$user_guid,$container_guid,$region); + $events = event_calendar_get_events_for_friends_between($start_ts,$end_ts,false,$limit,$offset,$user_guid,$container_guid,$region); } else if ($filter == 'mine') { - $count = event_calendar_get_events_for_user_between2($start_ts,$end_ts,true,$limit,$offset,$user_guid,$group_guid,$region); - $events = event_calendar_get_events_for_user_between2($start_ts,$end_ts,false,$limit,$offset,$user_guid,$group_guid,$region); + $count = event_calendar_get_events_for_user_between2($start_ts,$end_ts,true,$limit,$offset,$user_guid,$container_guid,$region); + $events = event_calendar_get_events_for_user_between2($start_ts,$end_ts,false,$limit,$offset,$user_guid,$container_guid,$region); } $vars = array( @@ -1411,8 +1441,11 @@ function event_calendar_generate_listing_params($page_type,$group_guid,$original ); $content = elgg_view('event_calendar/show_events', $vars); - - $filter_override = elgg_view('event_calendar/filter_menu',$vars); + if ($page_type == 'owner') { + $filter_override = ''; + } else { + $filter_override = elgg_view('event_calendar/filter_menu',$vars); + } if ($event_calendar_listing_format == 'paged') { $title = elgg_echo('event_calendar:upcoming_events_title'); @@ -1421,7 +1454,7 @@ function event_calendar_generate_listing_params($page_type,$group_guid,$original } $params = array('title' => $title, 'content' => $content, 'filter_override'=>$filter_override); - + elgg_set_ignore_access($access_status); return $params; } @@ -1550,7 +1583,18 @@ function event_calendar_handle_menu($event_guid) { //add_submenu_item(elgg_echo('event_calendar:review_requests_title'), $CONFIG->wwwroot . "pg/event_calendar/review_requests/".$event_id, '0eventcalendaradmin'); } } +function event_calendar_get_secret_key() { + $key_file_name = elgg_get_plugin_setting('ical_auth_file_name','event_calendar'); + if ($key_file_name && file_exists($key_file_name)) { + $key = (require($key_file_name)); + + return $key['tokenSecretKey']; + } else { + return FALSE; + } +} function getLastDayOfMonth($month,$year) { return idate('d', mktime(0, 0, 0, ($month + 1), 0, $year)); } + diff --git a/start.php b/start.php index 36b82c941..54ab6e296 100644 --- a/start.php +++ b/start.php @@ -132,6 +132,7 @@ function event_calendar_url($entity) { * Add group event: event_calendar/add/<group_guid> * Review requests: event_calendar/review_requests/<event_guid> * Display event subscribers: event_calendar/display_users/<event_guid> + * Events for a user's calendar: event_calendar/owner/<username>/<start_date>/<display_mode>/<filter_context>/<region> * * Title is ignored * @@ -215,6 +216,36 @@ function event_calendar_page_handler($page) { } echo event_calendar_get_page_content_list($page_type,$group_guid,$start_date,$display_mode,$filter_mode,$region); break; + case 'owner': + if (isset($page[1])) { + $username = $page[1]; + $user = get_user_by_username($username); + $user_guid = $user->guid; + if (isset($page[2])) { + $start_date = $page[2]; + if (isset($page[3])) { + $display_mode = $page[3]; + if (isset($page[4])) { + $filter_mode = $page[4]; + if (isset($page[5])) { + $region = $page[5]; + } else { + $region = ''; + } + } else { + $filter_mode = ''; + } + } else { + $display_mode = ''; + } + } else { + $start_date = ''; + } + } else { + $group_guid = 0; + } + echo event_calendar_get_page_content_list($page_type,$user_guid,$start_date,$display_mode,$filter_mode,$region); + break; case 'review_requests': gatekeeper(); echo event_calendar_get_page_content_review_requests($page[1]); diff --git a/views/default/settings/event_calendar/edit.php b/views/default/settings/event_calendar/edit.php index 51bd2c49f..116a58b8a 100644 --- a/views/default/settings/event_calendar/edit.php +++ b/views/default/settings/event_calendar/edit.php @@ -364,5 +364,13 @@ $body .= elgg_echo('event_calendar:settings:more_required:title'); $body .= '<br />'; $body .= elgg_view('input/radio',array('internalname'=>'params[more_required]','value'=>$event_calendar_more_required,'options'=>$yn_options)); +$body .= '<br />'; + +$ical_auth_file_name = elgg_get_plugin_setting('ical_auth_file_name', 'event_calendar'); + +$body .= elgg_echo('event_calendar:ical_auth_file_name:title'); +$body .= '<br />'; +$body .= elgg_view('input/text',array('name'=>'params[ical_auth_file_name]','value'=>$ical_auth_file_name, 'class'=>'event-calendar-ical-auth-setting')); + echo $body; ?> \ No newline at end of file -- cgit v1.2.3 From a4976c9705cdd26918bab21b8dde9e4a9037e9fe Mon Sep 17 00:00:00 2001 From: cash <cash.costello@gmail.com> Date: Thu, 29 Sep 2011 20:12:04 -0400 Subject: updated deprecated option names in plugin settings view --- views/default/settings/event_calendar/edit.php | 60 +++++++++++++------------- 1 file changed, 30 insertions(+), 30 deletions(-) diff --git a/views/default/settings/event_calendar/edit.php b/views/default/settings/event_calendar/edit.php index 116a58b8a..d3c701c0c 100644 --- a/views/default/settings/event_calendar/edit.php +++ b/views/default/settings/event_calendar/edit.php @@ -23,7 +23,7 @@ if (!$event_calendar_hide_access) { $body .= elgg_echo('event_calendar:settings:hide_access:title'); $body .= '<br />'; -$body .= elgg_view('input/radio',array('internalname'=>'params[hide_access]','value'=>$event_calendar_hide_access,'options'=>$yn_options)); +$body .= elgg_view('input/radio',array('name'=>'params[hide_access]','value'=>$event_calendar_hide_access,'options'=>$yn_options)); $body .= '<br />'; @@ -34,7 +34,7 @@ if (!$event_calendar_default_access) { $body .= elgg_echo('event_calendar:settings:default_access:title'); $body .= '<br />'; -$body .= elgg_view('input/pulldown',array('internalname'=>'params[default_access]','value'=>$event_calendar_default_access,'options_values'=>$access_options)); +$body .= elgg_view('input/dropdown',array('name'=>'params[default_access]','value'=>$event_calendar_default_access,'options_values'=>$access_options)); $body .= '<br /><br />'; @@ -45,7 +45,7 @@ if (!$event_calendar_hide_end) { $body .= elgg_echo('event_calendar:settings:hide_end:title'); $body .= '<br />'; -$body .= elgg_view('input/radio',array('internalname'=>'params[hide_end]','value'=>$event_calendar_hide_end,'options'=>$yn_options)); +$body .= elgg_view('input/radio',array('name'=>'params[hide_end]','value'=>$event_calendar_hide_end,'options'=>$yn_options)); $body .= '<br />'; @@ -56,7 +56,7 @@ if (!$event_calendar_listing_format) { $body .= elgg_echo('event_calendar:settings:listing_format:title'); $body .= '<br />'; -$body .= elgg_view('input/radio',array('internalname'=>'params[listing_format]','value'=>$event_calendar_listing_format,'options'=>$listing_options)); +$body .= elgg_view('input/radio',array('name'=>'params[listing_format]','value'=>$event_calendar_listing_format,'options'=>$listing_options)); $body .= '<br />'; @@ -67,7 +67,7 @@ if (!$event_calendar_times) { $body .= elgg_echo('event_calendar:settings:times:title'); $body .= '<br />'; -$body .= elgg_view('input/radio',array('internalname'=>'params[times]','value'=>$event_calendar_times,'options'=>$yn_options)); +$body .= elgg_view('input/radio',array('name'=>'params[times]','value'=>$event_calendar_times,'options'=>$yn_options)); $body .= '<br />'; @@ -78,7 +78,7 @@ if (!$event_calendar_autopersonal) { $body .= elgg_echo('event_calendar:settings:autopersonal:title'); $body .= '<br />'; -$body .= elgg_view('input/radio',array('internalname'=>'params[autopersonal]','value'=>$event_calendar_autopersonal,'options'=>$yn_options)); +$body .= elgg_view('input/radio',array('name'=>'params[autopersonal]','value'=>$event_calendar_autopersonal,'options'=>$yn_options)); $body .= '<br />'; @@ -89,7 +89,7 @@ if (!$event_calendar_autogroup) { $body .= elgg_echo('event_calendar:settings:autogroup:title'); $body .= '<br />'; -$body .= elgg_view('input/radio',array('internalname'=>'params[autogroup]','value'=>$event_calendar_autogroup,'options'=>$yn_options)); +$body .= elgg_view('input/radio',array('name'=>'params[autogroup]','value'=>$event_calendar_autogroup,'options'=>$yn_options)); $body .= '<br />'; @@ -100,7 +100,7 @@ if (!$event_calendar_add_to_group_calendar) { $body .= elgg_echo('event_calendar:settings:add_to_group_calendar:title'); $body .= '<br />'; -$body .= elgg_view('input/radio',array('internalname'=>'params[add_to_group_calendar]','value'=>$event_calendar_add_to_group_calendar,'options'=>$yn_options)); +$body .= elgg_view('input/radio',array('name'=>'params[add_to_group_calendar]','value'=>$event_calendar_add_to_group_calendar,'options'=>$yn_options)); $body .= '<br />'; @@ -113,7 +113,7 @@ if (!$event_calendar_agenda_view) { $body .= elgg_echo('event_calendar:settings:agenda_view:title'); $body .= '<br />'; -$body .= elgg_view('input/radio',array('internalname'=>'params[agenda_view]','value'=>$event_calendar_agenda_view,'options'=>$yn_options)); +$body .= elgg_view('input/radio',array('name'=>'params[agenda_view]','value'=>$event_calendar_agenda_view,'options'=>$yn_options)); $body .= '<br />';*/ @@ -124,7 +124,7 @@ if (!$event_calendar_venue_view) { $body .= elgg_echo('event_calendar:settings:venue_view:title'); $body .= '<br />'; -$body .= elgg_view('input/radio',array('internalname'=>'params[venue_view]','value'=>$event_calendar_venue_view,'options'=>$yn_options)); +$body .= elgg_view('input/radio',array('name'=>'params[venue_view]','value'=>$event_calendar_venue_view,'options'=>$yn_options)); $body .= '<br />'; @@ -139,7 +139,7 @@ if (!$event_calendar_site_calendar) { } $body .= elgg_echo('event_calendar:settings:site_calendar:title').'<br />'; -$body .= elgg_view('input/radio',array('internalname'=>'params[site_calendar]','value'=>$event_calendar_site_calendar,'options'=>$options)); +$body .= elgg_view('input/radio',array('name'=>'params[site_calendar]','value'=>$event_calendar_site_calendar,'options'=>$options)); $body .= '<br />'; @@ -154,7 +154,7 @@ if (!$event_calendar_group_calendar) { } $body .= elgg_echo('event_calendar:settings:group_calendar:title').'<br />'; -$body .= elgg_view('input/radio',array('internalname'=>'params[group_calendar]','value'=>$event_calendar_group_calendar,'options'=>$options)); +$body .= elgg_view('input/radio',array('name'=>'params[group_calendar]','value'=>$event_calendar_group_calendar,'options'=>$options)); $body .= '<br />'; @@ -169,7 +169,7 @@ if (!$event_calendar_group_default) { $body .= elgg_echo('event_calendar:settings:group_default:title'); $body .= '<br />'; -$body .= elgg_view('input/radio',array('internalname'=>'params[group_default]','value'=>$event_calendar_group_default,'options'=>$options)); +$body .= elgg_view('input/radio',array('name'=>'params[group_default]','value'=>$event_calendar_group_default,'options'=>$options)); $body .= '<br />'; @@ -180,7 +180,7 @@ if (!$event_calendar_group_always_display) { $body .= elgg_echo('event_calendar:settings:group_always_display:title'); $body .= '<br />'; -$body .= elgg_view('input/radio',array('internalname'=>'params[group_always_display]','value'=>$event_calendar_group_always_display,'options'=>$yn_options)); +$body .= elgg_view('input/radio',array('name'=>'params[group_always_display]','value'=>$event_calendar_group_always_display,'options'=>$yn_options)); $body .= '<br />'; @@ -197,7 +197,7 @@ if (!$event_calendar_group_profile_display) { } $body .= elgg_echo('event_calendar:settings:group_profile_display:title').'<br />'; -$body .= elgg_view('input/radio',array('internalname'=>'params[group_profile_display]','value'=>$event_calendar_group_profile_display,'options'=>$options)); +$body .= elgg_view('input/radio',array('name'=>'params[group_profile_display]','value'=>$event_calendar_group_profile_display,'options'=>$options)); $body .= '<br />';*/ @@ -208,7 +208,7 @@ if (!$event_calendar_add_users) { $body .= elgg_echo('event_calendar:settings:add_users:title'); $body .= '<br />'; -$body .= elgg_view('input/radio',array('internalname'=>'params[add_users]','value'=>$event_calendar_add_users,'options'=>$yn_options)); +$body .= elgg_view('input/radio',array('name'=>'params[add_users]','value'=>$event_calendar_add_users,'options'=>$yn_options)); $body .= '<br />'; @@ -219,7 +219,7 @@ if (!$event_calendar_add_users_notify) { $body .= elgg_echo('event_calendar:settings:add_users_notify:title'); $body .= '<br />'; -$body .= elgg_view('input/radio',array('internalname'=>'params[add_users_notify]','value'=>$event_calendar_add_users_notify,'options'=>$yn_options)); +$body .= elgg_view('input/radio',array('name'=>'params[add_users_notify]','value'=>$event_calendar_add_users_notify,'options'=>$yn_options)); $body .= '<br />'; @@ -230,7 +230,7 @@ if (!$event_calendar_personal_manage) { $body .= elgg_echo('event_calendar:settings:personal_manage:title'); $body .= '<br />'; -$body .= elgg_view('input/radio',array('internalname'=>'params[personal_manage]','value'=>$event_calendar_personal_manage,'options'=>$yn_options)); +$body .= elgg_view('input/radio',array('name'=>'params[personal_manage]','value'=>$event_calendar_personal_manage,'options'=>$yn_options)); $body .= '<br />'; @@ -241,7 +241,7 @@ if (!$event_calendar_spots_display) { $body .= elgg_echo('event_calendar:settings:spots_display:title'); $body .= '<br />'; -$body .= elgg_view('input/radio',array('internalname'=>'params[spots_display]','value'=>$event_calendar_spots_display,'options'=>$yn_options)); +$body .= elgg_view('input/radio',array('name'=>'params[spots_display]','value'=>$event_calendar_spots_display,'options'=>$yn_options)); $body .= '<br />'; @@ -252,7 +252,7 @@ if (!$event_calendar_no_collisions) { $body .= elgg_echo('event_calendar:settings:no_collisions:title'); $body .= '<br />'; -$body .= elgg_view('input/radio',array('internalname'=>'params[no_collisions]','value'=>$event_calendar_no_collisions,'options'=>$yn_options)); +$body .= elgg_view('input/radio',array('name'=>'params[no_collisions]','value'=>$event_calendar_no_collisions,'options'=>$yn_options)); $body .= '<br />'; @@ -263,7 +263,7 @@ if (!$event_calendar_collision_length) { $body .= elgg_echo('event_calendar:settings:collision_length:title'); $body .= '<br />'; -$body .= elgg_view('input/text',array('internalname'=>'params[collision_length]','value'=>$event_calendar_collision_length)); +$body .= elgg_view('input/text',array('name'=>'params[collision_length]','value'=>$event_calendar_collision_length)); $body .= '<br /><br />'; @@ -274,7 +274,7 @@ if (!$event_calendar_region_display) { $body .= elgg_echo('event_calendar:settings:region_display:title'); $body .= '<br />'; -$body .= elgg_view('input/radio',array('internalname'=>'params[region_display]','value'=>$event_calendar_region_display,'options'=>$yn_options)); +$body .= elgg_view('input/radio',array('name'=>'params[region_display]','value'=>$event_calendar_region_display,'options'=>$yn_options)); $body .= '<br />'; @@ -285,7 +285,7 @@ if (!$event_calendar_region_list) { $body .= elgg_echo('event_calendar:settings:region_list:title'); $body .= '<br />'; -$body .= elgg_view('event_calendar/input/longtext',array('internalname'=>'params[region_list]','value'=>$event_calendar_region_list)); +$body .= elgg_view('event_calendar/input/longtext',array('name'=>'params[region_list]','value'=>$event_calendar_region_list)); $body .= '<br />'; @@ -296,7 +296,7 @@ if (!$event_calendar_region_list_handles) { $body .= elgg_echo('event_calendar:settings:region_list_handles:title'); $body .= '<br />'; -$body .= elgg_view('input/radio',array('internalname'=>'params[region_list_handles]','value'=>$event_calendar_region_list_handles,'options'=>$yn_options)); +$body .= elgg_view('input/radio',array('name'=>'params[region_list_handles]','value'=>$event_calendar_region_list_handles,'options'=>$yn_options)); $body .= '<br />'; @@ -307,7 +307,7 @@ if (!$event_calendar_type_display) { $body .= elgg_echo('event_calendar:settings:type_display:title'); $body .= '<br />'; -$body .= elgg_view('input/radio',array('internalname'=>'params[type_display]','value'=>$event_calendar_type_display,'options'=>$yn_options)); +$body .= elgg_view('input/radio',array('name'=>'params[type_display]','value'=>$event_calendar_type_display,'options'=>$yn_options)); $body .= '<br />'; @@ -318,7 +318,7 @@ if (!$event_calendar_type_list) { $body .= elgg_echo('event_calendar:settings:type_list:title'); $body .= '<br />'; -$body .= elgg_view('event_calendar/input/longtext',array('internalname'=>'params[type_list]','value'=>$event_calendar_type_list)); +$body .= elgg_view('event_calendar/input/longtext',array('name'=>'params[type_list]','value'=>$event_calendar_type_list)); $body .= '<br />'; @@ -329,7 +329,7 @@ if (!$event_calendar_type_list_handles) { $body .= elgg_echo('event_calendar:settings:type_list_handles:title'); $body .= '<br />'; -$body .= elgg_view('input/radio',array('internalname'=>'params[type_list_handles]','value'=>$event_calendar_type_list_handles,'options'=>$yn_options)); +$body .= elgg_view('input/radio',array('name'=>'params[type_list_handles]','value'=>$event_calendar_type_list_handles,'options'=>$yn_options)); $body .= '<br />'; @@ -340,7 +340,7 @@ if (!$event_calendar_first_date) { $body .= elgg_echo('event_calendar:settings:first_date:title'); $body .= '<br />'; -$body .= elgg_view('input/text',array('internalname'=>'params[first_date]','value'=>$event_calendar_first_date)); +$body .= elgg_view('input/text',array('name'=>'params[first_date]','value'=>$event_calendar_first_date)); $body .= '<br /><br />'; @@ -351,7 +351,7 @@ if (!$event_calendar_last_date) { $body .= elgg_echo('event_calendar:settings:last_date:title'); $body .= '<br />'; -$body .= elgg_view('input/text',array('internalname'=>'params[last_date]','value'=>$event_calendar_last_date)); +$body .= elgg_view('input/text',array('name'=>'params[last_date]','value'=>$event_calendar_last_date)); $body .= '<br /><br />'; @@ -362,7 +362,7 @@ if (!$event_calendar_more_required) { $body .= elgg_echo('event_calendar:settings:more_required:title'); $body .= '<br />'; -$body .= elgg_view('input/radio',array('internalname'=>'params[more_required]','value'=>$event_calendar_more_required,'options'=>$yn_options)); +$body .= elgg_view('input/radio',array('name'=>'params[more_required]','value'=>$event_calendar_more_required,'options'=>$yn_options)); $body .= '<br />'; -- cgit v1.2.3 From b83a145de0232780bebbce0099785af1ff6b6146 Mon Sep 17 00:00:00 2001 From: cash <cash.costello@gmail.com> Date: Thu, 29 Sep 2011 20:17:19 -0400 Subject: moved the plugin settings view to the new 1.8 location plugins/<plugin id>/settings.php --- views/default/settings/event_calendar/edit.php | 376 ------------------------- 1 file changed, 376 deletions(-) delete mode 100644 views/default/settings/event_calendar/edit.php diff --git a/views/default/settings/event_calendar/edit.php b/views/default/settings/event_calendar/edit.php deleted file mode 100644 index d3c701c0c..000000000 --- a/views/default/settings/event_calendar/edit.php +++ /dev/null @@ -1,376 +0,0 @@ -<?php -$yn_options = array(elgg_echo('event_calendar:settings:yes')=>'yes', - elgg_echo('event_calendar:settings:no')=>'no', -); - -$access_options = array( ACCESS_PRIVATE => elgg_echo("PRIVATE"), - ACCESS_LOGGED_IN => elgg_echo("LOGGED_IN"), - ACCESS_PUBLIC => elgg_echo("PUBLIC")); - -// TODO - merge the agenda view into the list format options - -$listing_options = array(elgg_echo('event_calendar:settings:paged')=>'paged', - elgg_echo('event_calendar:settings:agenda')=>'agenda', - elgg_echo('event_calendar:settings:month')=>'month', -); - -$body = ''; - -$event_calendar_hide_access = elgg_get_plugin_setting('hide_access', 'event_calendar'); -if (!$event_calendar_hide_access) { - $event_calendar_hide_access = 'no'; -} - -$body .= elgg_echo('event_calendar:settings:hide_access:title'); -$body .= '<br />'; -$body .= elgg_view('input/radio',array('name'=>'params[hide_access]','value'=>$event_calendar_hide_access,'options'=>$yn_options)); - -$body .= '<br />'; - -$event_calendar_default_access = elgg_get_plugin_setting('default_access', 'event_calendar'); -if (!$event_calendar_default_access) { - $event_calendar_default_access = ACCESS_LOGGED_IN; -} - -$body .= elgg_echo('event_calendar:settings:default_access:title'); -$body .= '<br />'; -$body .= elgg_view('input/dropdown',array('name'=>'params[default_access]','value'=>$event_calendar_default_access,'options_values'=>$access_options)); - -$body .= '<br /><br />'; - -$event_calendar_hide_end = elgg_get_plugin_setting('hide_end', 'event_calendar'); -if (!$event_calendar_hide_end) { - $event_calendar_hide_end = 'no'; -} - -$body .= elgg_echo('event_calendar:settings:hide_end:title'); -$body .= '<br />'; -$body .= elgg_view('input/radio',array('name'=>'params[hide_end]','value'=>$event_calendar_hide_end,'options'=>$yn_options)); - -$body .= '<br />'; - -$event_calendar_listing_format = elgg_get_plugin_setting('listing_format', 'event_calendar'); -if (!$event_calendar_listing_format) { - $event_calendar_listing_format = 'month'; -} - -$body .= elgg_echo('event_calendar:settings:listing_format:title'); -$body .= '<br />'; -$body .= elgg_view('input/radio',array('name'=>'params[listing_format]','value'=>$event_calendar_listing_format,'options'=>$listing_options)); - -$body .= '<br />'; - -$event_calendar_times = elgg_get_plugin_setting('times', 'event_calendar'); -if (!$event_calendar_times) { - $event_calendar_times = 'no'; -} - -$body .= elgg_echo('event_calendar:settings:times:title'); -$body .= '<br />'; -$body .= elgg_view('input/radio',array('name'=>'params[times]','value'=>$event_calendar_times,'options'=>$yn_options)); - -$body .= '<br />'; - -$event_calendar_autopersonal = elgg_get_plugin_setting('autopersonal', 'event_calendar'); -if (!$event_calendar_autopersonal) { - $event_calendar_autopersonal = 'yes'; -} - -$body .= elgg_echo('event_calendar:settings:autopersonal:title'); -$body .= '<br />'; -$body .= elgg_view('input/radio',array('name'=>'params[autopersonal]','value'=>$event_calendar_autopersonal,'options'=>$yn_options)); - -$body .= '<br />'; - -$event_calendar_autogroup = elgg_get_plugin_setting('autogroup', 'event_calendar'); -if (!$event_calendar_autogroup) { - $event_calendar_autogroup = 'no'; -} - -$body .= elgg_echo('event_calendar:settings:autogroup:title'); -$body .= '<br />'; -$body .= elgg_view('input/radio',array('name'=>'params[autogroup]','value'=>$event_calendar_autogroup,'options'=>$yn_options)); - -$body .= '<br />'; - -$event_calendar_add_to_group_calendar = elgg_get_plugin_setting('add_to_group_calendar', 'event_calendar'); -if (!$event_calendar_add_to_group_calendar) { - $event_calendar_add_to_group_calendar = 'no'; -} - -$body .= elgg_echo('event_calendar:settings:add_to_group_calendar:title'); -$body .= '<br />'; -$body .= elgg_view('input/radio',array('name'=>'params[add_to_group_calendar]','value'=>$event_calendar_add_to_group_calendar,'options'=>$yn_options)); - -$body .= '<br />'; - -// agenda view is now handled in the listing area - -/*$event_calendar_agenda_view = get_plugin_setting('agenda_view', 'event_calendar'); -if (!$event_calendar_agenda_view) { - $event_calendar_agenda_view = 'no'; -} - -$body .= elgg_echo('event_calendar:settings:agenda_view:title'); -$body .= '<br />'; -$body .= elgg_view('input/radio',array('name'=>'params[agenda_view]','value'=>$event_calendar_agenda_view,'options'=>$yn_options)); - -$body .= '<br />';*/ - -$event_calendar_venue_view = elgg_get_plugin_setting('venue_view', 'event_calendar'); -if (!$event_calendar_venue_view) { - $event_calendar_venue_view = 'no'; -} - -$body .= elgg_echo('event_calendar:settings:venue_view:title'); -$body .= '<br />'; -$body .= elgg_view('input/radio',array('name'=>'params[venue_view]','value'=>$event_calendar_venue_view,'options'=>$yn_options)); - -$body .= '<br />'; - -$options = array(elgg_echo('event_calendar:settings:no')=>'no', - elgg_echo('event_calendar:settings:site_calendar:admin')=>'admin', - elgg_echo('event_calendar:settings:site_calendar:loggedin')=>'loggedin', -); - -$event_calendar_site_calendar = elgg_get_plugin_setting('site_calendar', 'event_calendar'); -if (!$event_calendar_site_calendar) { - $event_calendar_site_calendar = 'admin'; -} - -$body .= elgg_echo('event_calendar:settings:site_calendar:title').'<br />'; -$body .= elgg_view('input/radio',array('name'=>'params[site_calendar]','value'=>$event_calendar_site_calendar,'options'=>$options)); - -$body .= '<br />'; - -$options = array(elgg_echo('event_calendar:settings:no')=>'no', - elgg_echo('event_calendar:settings:group_calendar:admin')=>'admin', - elgg_echo('event_calendar:settings:group_calendar:members')=>'members', -); - -$event_calendar_group_calendar = elgg_get_plugin_setting('group_calendar', 'event_calendar'); -if (!$event_calendar_group_calendar) { - $event_calendar_group_calendar = 'members'; -} - -$body .= elgg_echo('event_calendar:settings:group_calendar:title').'<br />'; -$body .= elgg_view('input/radio',array('name'=>'params[group_calendar]','value'=>$event_calendar_group_calendar,'options'=>$options)); - -$body .= '<br />'; - -$options = array(elgg_echo('event_calendar:settings:group_default:yes')=>'yes', - elgg_echo('event_calendar:settings:group_default:no')=>'no', -); - -$event_calendar_group_default = elgg_get_plugin_setting('group_default', 'event_calendar'); -if (!$event_calendar_group_default) { - $event_calendar_group_default = 'yes'; -} - -$body .= elgg_echo('event_calendar:settings:group_default:title'); -$body .= '<br />'; -$body .= elgg_view('input/radio',array('name'=>'params[group_default]','value'=>$event_calendar_group_default,'options'=>$options)); - -$body .= '<br />'; - -$event_calendar_group_always_display = elgg_get_plugin_setting('group_always_display', 'event_calendar'); -if (!$event_calendar_group_always_display) { - $event_calendar_group_always_display = 'no'; -} - -$body .= elgg_echo('event_calendar:settings:group_always_display:title'); -$body .= '<br />'; -$body .= elgg_view('input/radio',array('name'=>'params[group_always_display]','value'=>$event_calendar_group_always_display,'options'=>$yn_options)); - -$body .= '<br />'; - -// There does not seem to be a way to determine where the group calendar box will appear in Elgg 1.8 - -/*$options = array(elgg_echo('event_calendar:settings:group_profile_display_option:left')=>'left', - elgg_echo('event_calendar:settings:group_profile_display_option:right')=>'right', - elgg_echo('event_calendar:settings:group_profile_display_option:none')=>'none', -); - -$event_calendar_group_profile_display = elgg_get_plugin_setting('group_profile_display', 'event_calendar'); -if (!$event_calendar_group_profile_display) { - $event_calendar_group_profile_display = 'right'; -} - -$body .= elgg_echo('event_calendar:settings:group_profile_display:title').'<br />'; -$body .= elgg_view('input/radio',array('name'=>'params[group_profile_display]','value'=>$event_calendar_group_profile_display,'options'=>$options)); - -$body .= '<br />';*/ - -$event_calendar_add_users = elgg_get_plugin_setting('add_users', 'event_calendar'); -if (!$event_calendar_add_users) { - $event_calendar_add_users = 'no'; -} - -$body .= elgg_echo('event_calendar:settings:add_users:title'); -$body .= '<br />'; -$body .= elgg_view('input/radio',array('name'=>'params[add_users]','value'=>$event_calendar_add_users,'options'=>$yn_options)); - -$body .= '<br />'; - -$event_calendar_add_users_notify = elgg_get_plugin_setting('add_users_notify', 'event_calendar'); -if (!$event_calendar_add_users_notify) { - $event_calendar_add_users_notify = 'no'; -} - -$body .= elgg_echo('event_calendar:settings:add_users_notify:title'); -$body .= '<br />'; -$body .= elgg_view('input/radio',array('name'=>'params[add_users_notify]','value'=>$event_calendar_add_users_notify,'options'=>$yn_options)); - -$body .= '<br />'; - -$event_calendar_personal_manage = elgg_get_plugin_setting('personal_manage', 'event_calendar'); -if (!$event_calendar_personal_manage) { - $event_calendar_personal_manage = 'yes'; -} - -$body .= elgg_echo('event_calendar:settings:personal_manage:title'); -$body .= '<br />'; -$body .= elgg_view('input/radio',array('name'=>'params[personal_manage]','value'=>$event_calendar_personal_manage,'options'=>$yn_options)); - -$body .= '<br />'; - -$event_calendar_spots_display = elgg_get_plugin_setting('spots_display', 'event_calendar'); -if (!$event_calendar_spots_display) { - $event_calendar_spots_display = 'no'; -} - -$body .= elgg_echo('event_calendar:settings:spots_display:title'); -$body .= '<br />'; -$body .= elgg_view('input/radio',array('name'=>'params[spots_display]','value'=>$event_calendar_spots_display,'options'=>$yn_options)); - -$body .= '<br />'; - -$event_calendar_no_collisions = elgg_get_plugin_setting('no_collisions', 'event_calendar'); -if (!$event_calendar_no_collisions) { - $event_calendar_no_collisions = 'no'; -} - -$body .= elgg_echo('event_calendar:settings:no_collisions:title'); -$body .= '<br />'; -$body .= elgg_view('input/radio',array('name'=>'params[no_collisions]','value'=>$event_calendar_no_collisions,'options'=>$yn_options)); - -$body .= '<br />'; - -$event_calendar_collision_length = elgg_get_plugin_setting('collision_length', 'event_calendar'); -if (!$event_calendar_collision_length) { - $event_calendar_collision_length = '3600'; -} - -$body .= elgg_echo('event_calendar:settings:collision_length:title'); -$body .= '<br />'; -$body .= elgg_view('input/text',array('name'=>'params[collision_length]','value'=>$event_calendar_collision_length)); - -$body .= '<br /><br />'; - -$event_calendar_region_display = elgg_get_plugin_setting('region_display', 'event_calendar'); -if (!$event_calendar_region_display) { - $event_calendar_region_display = 'no'; -} - -$body .= elgg_echo('event_calendar:settings:region_display:title'); -$body .= '<br />'; -$body .= elgg_view('input/radio',array('name'=>'params[region_display]','value'=>$event_calendar_region_display,'options'=>$yn_options)); - -$body .= '<br />'; - -$event_calendar_region_list = elgg_get_plugin_setting('region_list', 'event_calendar'); -if (!$event_calendar_region_list) { - $event_calendar_region_list = ''; -} - -$body .= elgg_echo('event_calendar:settings:region_list:title'); -$body .= '<br />'; -$body .= elgg_view('event_calendar/input/longtext',array('name'=>'params[region_list]','value'=>$event_calendar_region_list)); - -$body .= '<br />'; - -$event_calendar_region_list_handles = elgg_get_plugin_setting('region_list_handles', 'event_calendar'); -if (!$event_calendar_region_list_handles) { - $event_calendar_region_list_handles = 'no'; -} - -$body .= elgg_echo('event_calendar:settings:region_list_handles:title'); -$body .= '<br />'; -$body .= elgg_view('input/radio',array('name'=>'params[region_list_handles]','value'=>$event_calendar_region_list_handles,'options'=>$yn_options)); - -$body .= '<br />'; - -$event_calendar_type_display = elgg_get_plugin_setting('type_display', 'event_calendar'); -if (!$event_calendar_type_display) { - $event_calendar_type_display = 'no'; -} - -$body .= elgg_echo('event_calendar:settings:type_display:title'); -$body .= '<br />'; -$body .= elgg_view('input/radio',array('name'=>'params[type_display]','value'=>$event_calendar_type_display,'options'=>$yn_options)); - -$body .= '<br />'; - -$event_calendar_type_list = elgg_get_plugin_setting('type_list', 'event_calendar'); -if (!$event_calendar_type_list) { - $event_calendar_type_list = ''; -} - -$body .= elgg_echo('event_calendar:settings:type_list:title'); -$body .= '<br />'; -$body .= elgg_view('event_calendar/input/longtext',array('name'=>'params[type_list]','value'=>$event_calendar_type_list)); - -$body .= '<br />'; - -$event_calendar_type_list_handles = elgg_get_plugin_setting('type_list_handles', 'event_calendar'); -if (!$event_calendar_type_list_handles) { - $event_calendar_type_list_handles = 'no'; -} - -$body .= elgg_echo('event_calendar:settings:type_list_handles:title'); -$body .= '<br />'; -$body .= elgg_view('input/radio',array('name'=>'params[type_list_handles]','value'=>$event_calendar_type_list_handles,'options'=>$yn_options)); - -$body .= '<br />'; - -$event_calendar_first_date = elgg_get_plugin_setting('first_date', 'event_calendar'); -if (!$event_calendar_first_date) { - $event_calendar_first_date = ''; -} - -$body .= elgg_echo('event_calendar:settings:first_date:title'); -$body .= '<br />'; -$body .= elgg_view('input/text',array('name'=>'params[first_date]','value'=>$event_calendar_first_date)); - -$body .= '<br /><br />'; - -$event_calendar_last_date = elgg_get_plugin_setting('last_date', 'event_calendar'); -if (!$event_calendar_last_date) { - $event_calendar_last_date = ''; -} - -$body .= elgg_echo('event_calendar:settings:last_date:title'); -$body .= '<br />'; -$body .= elgg_view('input/text',array('name'=>'params[last_date]','value'=>$event_calendar_last_date)); - -$body .= '<br /><br />'; - -$event_calendar_more_required = elgg_get_plugin_setting('more_required', 'event_calendar'); -if (!$event_calendar_more_required) { - $event_calendar_more_required = 'no'; -} - -$body .= elgg_echo('event_calendar:settings:more_required:title'); -$body .= '<br />'; -$body .= elgg_view('input/radio',array('name'=>'params[more_required]','value'=>$event_calendar_more_required,'options'=>$yn_options)); - -$body .= '<br />'; - -$ical_auth_file_name = elgg_get_plugin_setting('ical_auth_file_name', 'event_calendar'); - -$body .= elgg_echo('event_calendar:ical_auth_file_name:title'); -$body .= '<br />'; -$body .= elgg_view('input/text',array('name'=>'params[ical_auth_file_name]','value'=>$ical_auth_file_name, 'class'=>'event-calendar-ical-auth-setting')); - -echo $body; -?> \ No newline at end of file -- cgit v1.2.3 From 37abfb4d6f347b146ca56fc98b94532c57eb7606 Mon Sep 17 00:00:00 2001 From: Kevin Jardine <kevinjardine@yahoo.com> Date: Wed, 5 Oct 2011 11:56:10 +0200 Subject: restored missing settings file --- views/default/settings/event_calendar/edit.php | 376 +++++++++++++++++++++++++ 1 file changed, 376 insertions(+) create mode 100644 views/default/settings/event_calendar/edit.php diff --git a/views/default/settings/event_calendar/edit.php b/views/default/settings/event_calendar/edit.php new file mode 100644 index 000000000..9fb025755 --- /dev/null +++ b/views/default/settings/event_calendar/edit.php @@ -0,0 +1,376 @@ +<?php +$yn_options = array(elgg_echo('event_calendar:settings:yes')=>'yes', + elgg_echo('event_calendar:settings:no')=>'no', +); + +$access_options = array( ACCESS_PRIVATE => elgg_echo("PRIVATE"), + ACCESS_LOGGED_IN => elgg_echo("LOGGED_IN"), + ACCESS_PUBLIC => elgg_echo("PUBLIC")); + +// TODO - merge the agenda view into the list format options + +$listing_options = array(elgg_echo('event_calendar:settings:paged')=>'paged', + elgg_echo('event_calendar:settings:agenda')=>'agenda', + elgg_echo('event_calendar:settings:month')=>'month', +); + +$body = ''; + +$event_calendar_hide_access = elgg_get_plugin_setting('hide_access', 'event_calendar'); +if (!$event_calendar_hide_access) { + $event_calendar_hide_access = 'no'; +} + +$body .= elgg_echo('event_calendar:settings:hide_access:title'); +$body .= '<br />'; +$body .= elgg_view('input/radio',array('name'=>'params[hide_access]','value'=>$event_calendar_hide_access,'options'=>$yn_options)); + +$body .= '<br />'; + +$event_calendar_default_access = elgg_get_plugin_setting('default_access', 'event_calendar'); +if (!$event_calendar_default_access) { + $event_calendar_default_access = ACCESS_LOGGED_IN; +} + +$body .= elgg_echo('event_calendar:settings:default_access:title'); +$body .= '<br />'; +$body .= elgg_view('input/pulldown',array('name'=>'params[default_access]','value'=>$event_calendar_default_access,'options_values'=>$access_options)); + +$body .= '<br /><br />'; + +$event_calendar_hide_end = elgg_get_plugin_setting('hide_end', 'event_calendar'); +if (!$event_calendar_hide_end) { + $event_calendar_hide_end = 'no'; +} + +$body .= elgg_echo('event_calendar:settings:hide_end:title'); +$body .= '<br />'; +$body .= elgg_view('input/radio',array('name'=>'params[hide_end]','value'=>$event_calendar_hide_end,'options'=>$yn_options)); + +$body .= '<br />'; + +$event_calendar_listing_format = elgg_get_plugin_setting('listing_format', 'event_calendar'); +if (!$event_calendar_listing_format) { + $event_calendar_listing_format = 'month'; +} + +$body .= elgg_echo('event_calendar:settings:listing_format:title'); +$body .= '<br />'; +$body .= elgg_view('input/radio',array('name'=>'params[listing_format]','value'=>$event_calendar_listing_format,'options'=>$listing_options)); + +$body .= '<br />'; + +$event_calendar_times = elgg_get_plugin_setting('times', 'event_calendar'); +if (!$event_calendar_times) { + $event_calendar_times = 'no'; +} + +$body .= elgg_echo('event_calendar:settings:times:title'); +$body .= '<br />'; +$body .= elgg_view('input/radio',array('name'=>'params[times]','value'=>$event_calendar_times,'options'=>$yn_options)); + +$body .= '<br />'; + +$event_calendar_autopersonal = elgg_get_plugin_setting('autopersonal', 'event_calendar'); +if (!$event_calendar_autopersonal) { + $event_calendar_autopersonal = 'yes'; +} + +$body .= elgg_echo('event_calendar:settings:autopersonal:title'); +$body .= '<br />'; +$body .= elgg_view('input/radio',array('name'=>'params[autopersonal]','value'=>$event_calendar_autopersonal,'options'=>$yn_options)); + +$body .= '<br />'; + +$event_calendar_autogroup = elgg_get_plugin_setting('autogroup', 'event_calendar'); +if (!$event_calendar_autogroup) { + $event_calendar_autogroup = 'no'; +} + +$body .= elgg_echo('event_calendar:settings:autogroup:title'); +$body .= '<br />'; +$body .= elgg_view('input/radio',array('name'=>'params[autogroup]','value'=>$event_calendar_autogroup,'options'=>$yn_options)); + +$body .= '<br />'; + +$event_calendar_add_to_group_calendar = elgg_get_plugin_setting('add_to_group_calendar', 'event_calendar'); +if (!$event_calendar_add_to_group_calendar) { + $event_calendar_add_to_group_calendar = 'no'; +} + +$body .= elgg_echo('event_calendar:settings:add_to_group_calendar:title'); +$body .= '<br />'; +$body .= elgg_view('input/radio',array('name'=>'params[add_to_group_calendar]','value'=>$event_calendar_add_to_group_calendar,'options'=>$yn_options)); + +$body .= '<br />'; + +// agenda view is now handled in the listing area + +/*$event_calendar_agenda_view = get_plugin_setting('agenda_view', 'event_calendar'); +if (!$event_calendar_agenda_view) { + $event_calendar_agenda_view = 'no'; +} + +$body .= elgg_echo('event_calendar:settings:agenda_view:title'); +$body .= '<br />'; +$body .= elgg_view('input/radio',array('name'=>'params[agenda_view]','value'=>$event_calendar_agenda_view,'options'=>$yn_options)); + +$body .= '<br />';*/ + +$event_calendar_venue_view = elgg_get_plugin_setting('venue_view', 'event_calendar'); +if (!$event_calendar_venue_view) { + $event_calendar_venue_view = 'no'; +} + +$body .= elgg_echo('event_calendar:settings:venue_view:title'); +$body .= '<br />'; +$body .= elgg_view('input/radio',array('name'=>'params[venue_view]','value'=>$event_calendar_venue_view,'options'=>$yn_options)); + +$body .= '<br />'; + +$options = array(elgg_echo('event_calendar:settings:no')=>'no', + elgg_echo('event_calendar:settings:site_calendar:admin')=>'admin', + elgg_echo('event_calendar:settings:site_calendar:loggedin')=>'loggedin', +); + +$event_calendar_site_calendar = elgg_get_plugin_setting('site_calendar', 'event_calendar'); +if (!$event_calendar_site_calendar) { + $event_calendar_site_calendar = 'admin'; +} + +$body .= elgg_echo('event_calendar:settings:site_calendar:title').'<br />'; +$body .= elgg_view('input/radio',array('name'=>'params[site_calendar]','value'=>$event_calendar_site_calendar,'options'=>$options)); + +$body .= '<br />'; + +$options = array(elgg_echo('event_calendar:settings:no')=>'no', + elgg_echo('event_calendar:settings:group_calendar:admin')=>'admin', + elgg_echo('event_calendar:settings:group_calendar:members')=>'members', +); + +$event_calendar_group_calendar = elgg_get_plugin_setting('group_calendar', 'event_calendar'); +if (!$event_calendar_group_calendar) { + $event_calendar_group_calendar = 'members'; +} + +$body .= elgg_echo('event_calendar:settings:group_calendar:title').'<br />'; +$body .= elgg_view('input/radio',array('name'=>'params[group_calendar]','value'=>$event_calendar_group_calendar,'options'=>$options)); + +$body .= '<br />'; + +$options = array(elgg_echo('event_calendar:settings:group_default:yes')=>'yes', + elgg_echo('event_calendar:settings:group_default:no')=>'no', +); + +$event_calendar_group_default = elgg_get_plugin_setting('group_default', 'event_calendar'); +if (!$event_calendar_group_default) { + $event_calendar_group_default = 'yes'; +} + +$body .= elgg_echo('event_calendar:settings:group_default:title'); +$body .= '<br />'; +$body .= elgg_view('input/radio',array('name'=>'params[group_default]','value'=>$event_calendar_group_default,'options'=>$options)); + +$body .= '<br />'; + +$event_calendar_group_always_display = elgg_get_plugin_setting('group_always_display', 'event_calendar'); +if (!$event_calendar_group_always_display) { + $event_calendar_group_always_display = 'no'; +} + +$body .= elgg_echo('event_calendar:settings:group_always_display:title'); +$body .= '<br />'; +$body .= elgg_view('input/radio',array('name'=>'params[group_always_display]','value'=>$event_calendar_group_always_display,'options'=>$yn_options)); + +$body .= '<br />'; + +// There does not seem to be a way to determine where the group calendar box will appear in Elgg 1.8 + +/*$options = array(elgg_echo('event_calendar:settings:group_profile_display_option:left')=>'left', + elgg_echo('event_calendar:settings:group_profile_display_option:right')=>'right', + elgg_echo('event_calendar:settings:group_profile_display_option:none')=>'none', +); + +$event_calendar_group_profile_display = elgg_get_plugin_setting('group_profile_display', 'event_calendar'); +if (!$event_calendar_group_profile_display) { + $event_calendar_group_profile_display = 'right'; +} + +$body .= elgg_echo('event_calendar:settings:group_profile_display:title').'<br />'; +$body .= elgg_view('input/radio',array('name'=>'params[group_profile_display]','value'=>$event_calendar_group_profile_display,'options'=>$options)); + +$body .= '<br />';*/ + +$event_calendar_add_users = elgg_get_plugin_setting('add_users', 'event_calendar'); +if (!$event_calendar_add_users) { + $event_calendar_add_users = 'no'; +} + +$body .= elgg_echo('event_calendar:settings:add_users:title'); +$body .= '<br />'; +$body .= elgg_view('input/radio',array('name'=>'params[add_users]','value'=>$event_calendar_add_users,'options'=>$yn_options)); + +$body .= '<br />'; + +$event_calendar_add_users_notify = elgg_get_plugin_setting('add_users_notify', 'event_calendar'); +if (!$event_calendar_add_users_notify) { + $event_calendar_add_users_notify = 'no'; +} + +$body .= elgg_echo('event_calendar:settings:add_users_notify:title'); +$body .= '<br />'; +$body .= elgg_view('input/radio',array('name'=>'params[add_users_notify]','value'=>$event_calendar_add_users_notify,'options'=>$yn_options)); + +$body .= '<br />'; + +$event_calendar_personal_manage = elgg_get_plugin_setting('personal_manage', 'event_calendar'); +if (!$event_calendar_personal_manage) { + $event_calendar_personal_manage = 'yes'; +} + +$body .= elgg_echo('event_calendar:settings:personal_manage:title'); +$body .= '<br />'; +$body .= elgg_view('input/radio',array('name'=>'params[personal_manage]','value'=>$event_calendar_personal_manage,'options'=>$yn_options)); + +$body .= '<br />'; + +$event_calendar_spots_display = elgg_get_plugin_setting('spots_display', 'event_calendar'); +if (!$event_calendar_spots_display) { + $event_calendar_spots_display = 'no'; +} + +$body .= elgg_echo('event_calendar:settings:spots_display:title'); +$body .= '<br />'; +$body .= elgg_view('input/radio',array('name'=>'params[spots_display]','value'=>$event_calendar_spots_display,'options'=>$yn_options)); + +$body .= '<br />'; + +$event_calendar_no_collisions = elgg_get_plugin_setting('no_collisions', 'event_calendar'); +if (!$event_calendar_no_collisions) { + $event_calendar_no_collisions = 'no'; +} + +$body .= elgg_echo('event_calendar:settings:no_collisions:title'); +$body .= '<br />'; +$body .= elgg_view('input/radio',array('name'=>'params[no_collisions]','value'=>$event_calendar_no_collisions,'options'=>$yn_options)); + +$body .= '<br />'; + +$event_calendar_collision_length = elgg_get_plugin_setting('collision_length', 'event_calendar'); +if (!$event_calendar_collision_length) { + $event_calendar_collision_length = '3600'; +} + +$body .= elgg_echo('event_calendar:settings:collision_length:title'); +$body .= '<br />'; +$body .= elgg_view('input/text',array('name'=>'params[collision_length]','value'=>$event_calendar_collision_length)); + +$body .= '<br /><br />'; + +$event_calendar_region_display = elgg_get_plugin_setting('region_display', 'event_calendar'); +if (!$event_calendar_region_display) { + $event_calendar_region_display = 'no'; +} + +$body .= elgg_echo('event_calendar:settings:region_display:title'); +$body .= '<br />'; +$body .= elgg_view('input/radio',array('name'=>'params[region_display]','value'=>$event_calendar_region_display,'options'=>$yn_options)); + +$body .= '<br />'; + +$event_calendar_region_list = elgg_get_plugin_setting('region_list', 'event_calendar'); +if (!$event_calendar_region_list) { + $event_calendar_region_list = ''; +} + +$body .= elgg_echo('event_calendar:settings:region_list:title'); +$body .= '<br />'; +$body .= elgg_view('event_calendar/input/longtext',array('name'=>'params[region_list]','value'=>$event_calendar_region_list)); + +$body .= '<br />'; + +$event_calendar_region_list_handles = elgg_get_plugin_setting('region_list_handles', 'event_calendar'); +if (!$event_calendar_region_list_handles) { + $event_calendar_region_list_handles = 'no'; +} + +$body .= elgg_echo('event_calendar:settings:region_list_handles:title'); +$body .= '<br />'; +$body .= elgg_view('input/radio',array('name'=>'params[region_list_handles]','value'=>$event_calendar_region_list_handles,'options'=>$yn_options)); + +$body .= '<br />'; + +$event_calendar_type_display = elgg_get_plugin_setting('type_display', 'event_calendar'); +if (!$event_calendar_type_display) { + $event_calendar_type_display = 'no'; +} + +$body .= elgg_echo('event_calendar:settings:type_display:title'); +$body .= '<br />'; +$body .= elgg_view('input/radio',array('name'=>'params[type_display]','value'=>$event_calendar_type_display,'options'=>$yn_options)); + +$body .= '<br />'; + +$event_calendar_type_list = elgg_get_plugin_setting('type_list', 'event_calendar'); +if (!$event_calendar_type_list) { + $event_calendar_type_list = ''; +} + +$body .= elgg_echo('event_calendar:settings:type_list:title'); +$body .= '<br />'; +$body .= elgg_view('event_calendar/input/longtext',array('name'=>'params[type_list]','value'=>$event_calendar_type_list)); + +$body .= '<br />'; + +$event_calendar_type_list_handles = elgg_get_plugin_setting('type_list_handles', 'event_calendar'); +if (!$event_calendar_type_list_handles) { + $event_calendar_type_list_handles = 'no'; +} + +$body .= elgg_echo('event_calendar:settings:type_list_handles:title'); +$body .= '<br />'; +$body .= elgg_view('input/radio',array('name'=>'params[type_list_handles]','value'=>$event_calendar_type_list_handles,'options'=>$yn_options)); + +$body .= '<br />'; + +$event_calendar_first_date = elgg_get_plugin_setting('first_date', 'event_calendar'); +if (!$event_calendar_first_date) { + $event_calendar_first_date = ''; +} + +$body .= elgg_echo('event_calendar:settings:first_date:title'); +$body .= '<br />'; +$body .= elgg_view('input/text',array('name'=>'params[first_date]','value'=>$event_calendar_first_date)); + +$body .= '<br /><br />'; + +$event_calendar_last_date = elgg_get_plugin_setting('last_date', 'event_calendar'); +if (!$event_calendar_last_date) { + $event_calendar_last_date = ''; +} + +$body .= elgg_echo('event_calendar:settings:last_date:title'); +$body .= '<br />'; +$body .= elgg_view('input/text',array('name'=>'params[last_date]','value'=>$event_calendar_last_date)); + +$body .= '<br /><br />'; + +$event_calendar_more_required = elgg_get_plugin_setting('more_required', 'event_calendar'); +if (!$event_calendar_more_required) { + $event_calendar_more_required = 'no'; +} + +$body .= elgg_echo('event_calendar:settings:more_required:title'); +$body .= '<br />'; +$body .= elgg_view('input/radio',array('name'=>'params[more_required]','value'=>$event_calendar_more_required,'options'=>$yn_options)); + +$body .= '<br />'; + +$ical_auth_file_name = elgg_get_plugin_setting('ical_auth_file_name', 'event_calendar'); + +$body .= elgg_echo('event_calendar:ical_auth_file_name:title'); +$body .= '<br />'; +$body .= elgg_view('input/text',array('name'=>'params[ical_auth_file_name]','value'=>$ical_auth_file_name, 'class'=>'event-calendar-ical-auth-setting')); + +echo $body; +?> \ No newline at end of file -- cgit v1.2.3 From 812aaa3d110a83a571b2ecc9cc5b1448a3c616fe Mon Sep 17 00:00:00 2001 From: Kevin Jardine <kevinjardine@yahoo.com> Date: Wed, 5 Oct 2011 13:46:26 +0200 Subject: changed filter menu to more correctly describe the tabs --- languages/en.php | 6 +++++ views/default/event_calendar/css.php | 7 ++++++ views/default/event_calendar/filter_menu.php | 37 ++++++++++++++++++++++------ 3 files changed, 43 insertions(+), 7 deletions(-) diff --git a/languages/en.php b/languages/en.php index 88d66a1da..8c32bd842 100644 --- a/languages/en.php +++ b/languages/en.php @@ -214,6 +214,12 @@ You can manage calendar requests for this event here: 'event_calendar:owner:permissions_error' => "You do not have permission to view that page.", + 'event_calendar:show_all' => "Show all", + 'event_calendar:show_open' => "Show open", + 'event_calendar:show_mine' => "My calendar", + 'event_calendar:show_friends' => "My friends' calendars", + 'event_calendar:show_only' => "Show only those on:", + /** * Event calendar river **/ diff --git a/views/default/event_calendar/css.php b/views/default/event_calendar/css.php index 2059a3ea9..469f72de8 100644 --- a/views/default/event_calendar/css.php +++ b/views/default/event_calendar/css.php @@ -157,4 +157,11 @@ table.event_calendar_paged_table th { .event-calendar-personal-calendar-toggle { float: right; +} + +li.event-calendar-filter-menu-show-only { + border:0; + padding-top:.4em; + background:#fff; + margin:0 -.3em 0 1.5em; } \ No newline at end of file diff --git a/views/default/event_calendar/filter_menu.php b/views/default/event_calendar/filter_menu.php index 2d4805bd4..369d09e5f 100644 --- a/views/default/event_calendar/filter_menu.php +++ b/views/default/event_calendar/filter_menu.php @@ -10,42 +10,65 @@ if ($group_guid) { $tabs = array( 'all' => array( - 'text' => elgg_echo('all'), + 'text' => elgg_echo('event_calendar:show_all'), 'href' => "$url_start/all", 'selected' => ($filter_context == 'all'), 'priority' => 200, ), 'mine' => array( - 'text' => elgg_echo('mine'), + 'text' => elgg_echo('event_calendar:show_mine'), 'href' => "$url_start/mine", 'selected' => ($filter_context == 'mine'), 'priority' => 300, ), 'friend' => array( - 'text' => elgg_echo('friends'), + 'text' => elgg_echo('event_calendar:show_friends'), 'href' => "$url_start/friends", 'selected' => ($filter_context == 'friends'), 'priority' => 400, ), ); +$tab_rendered = array(); + $event_calendar_spots_display = elgg_get_plugin_setting('spots_display', 'event_calendar'); if ($event_calendar_spots_display == "yes") { $tabs['open'] = array( - 'text' => elgg_echo('event_calendar:open'), + 'text' => elgg_echo('event_calendar:show_open'), 'href' => "$url_start/open", 'selected' => ($filter_context == 'open'), 'priority' => 100, ); +} else { + $tab_rendered['open'] = ''; } foreach ($tabs as $name => $tab) { - $tab['name'] = $name; + if ($tab['selected']) { + $state_selected = ' class="elgg-state-selected"'; + } else { + $state_selected = ''; + } + $tab_rendered[$name] = '<li'.$state_selected.'><a href="'.elgg_normalize_url($tab['href']).'">'.$tab['text'].'</a></li>'; - elgg_register_menu_item('filter', $tab); + //elgg_register_menu_item('filter', $tab); } -echo elgg_view_menu('filter', array('sort_by' => 'priority', 'class' => 'elgg-menu-hz')); +//echo elgg_view_menu('filter', array('sort_by' => 'priority', 'class' => 'elgg-menu-hz')); + +$text_bit = '<li class="event-calendar-filter-menu-show-only">'.elgg_echo('event_calendar:show_only').'</li>'; + +$menu = <<<__MENU +<ul class="elgg-menu elgg-menu-filter elgg-menu-hz elgg-menu-filter-default"> + {$tab_rendered['open']} + {$tab_rendered['all']} + $text_bit + {$tab_rendered['mine']} + {$tab_rendered['friend']} +</ul> +__MENU; + +echo $menu; $event_calendar_region_display = elgg_get_plugin_setting('region_display', 'event_calendar'); if ($event_calendar_region_display == 'yes') { -- cgit v1.2.3 From e31ddb848d0aa949d8ca737c0acd92abce004ece Mon Sep 17 00:00:00 2001 From: Kevin Jardine <kevinjardine@yahoo.com> Date: Wed, 5 Oct 2011 14:06:07 +0200 Subject: removed old actions and an outdated settings comment --- actions/add_to_group.php | 11 ----------- actions/addtocalendar.php | 36 ------------------------------------ actions/killrequest.php | 23 ----------------------- actions/remove_from_group.php | 8 -------- actions/toggle_personal_calendar.php | 30 ------------------------------ 5 files changed, 108 deletions(-) delete mode 100644 actions/add_to_group.php delete mode 100644 actions/addtocalendar.php delete mode 100644 actions/killrequest.php delete mode 100644 actions/remove_from_group.php delete mode 100644 actions/toggle_personal_calendar.php diff --git a/actions/add_to_group.php b/actions/add_to_group.php deleted file mode 100644 index b8c18ebb0..000000000 --- a/actions/add_to_group.php +++ /dev/null @@ -1,11 +0,0 @@ -<?php -$event_id = get_input("event_id",0); -$group_id = get_input("group_id",0); -$event = get_entity($event_id); -$group = get_entity($group_id); -if ($group && $group->canEdit()) { - add_entity_relationship($event_id, "display_on_group", $group_id ); - system_message(elgg_echo('event_calendar:add_to_group:success')); -} -forward($event->getUrl()); -?> \ No newline at end of file diff --git a/actions/addtocalendar.php b/actions/addtocalendar.php deleted file mode 100644 index cb83aab88..000000000 --- a/actions/addtocalendar.php +++ /dev/null @@ -1,36 +0,0 @@ -<?php - -// this action allows an admin or event owner to approve a calendar request - -// Load configuration -global $CONFIG; - -gatekeeper(); - -$user_guid = get_input('user_guid', get_loggedin_userid()); -$event_id = get_input('event_id'); - -$user = get_entity($user_guid); -$event = get_entity($event_id); - -// If join request made -if (event_calendar_personal_can_manage($event,$user_guid) - && check_entity_relationship($user_guid, 'event_calendar_request', $event_id)) { - if (event_calendar_add_personal_event($event_id,$user_guid)) { - remove_entity_relationship($user_guid, 'event_calendar_request', $event_id); - notify_user($user_guid, $CONFIG->site->guid, elgg_echo('event_calendar:add_users_notify:subject'), - sprintf( - elgg_echo('event_calendar:add_users_notify:body'), - $user->name, - $event->title, - $event->getURL() - ) - ); - system_message(elgg_echo('event_calendar:request_approved')); - - } -} else { - register_error(elgg_echo('event_calendar:review_requests_error')); -} - -forward($_SERVER['HTTP_REFERER']); diff --git a/actions/killrequest.php b/actions/killrequest.php deleted file mode 100644 index 66257230c..000000000 --- a/actions/killrequest.php +++ /dev/null @@ -1,23 +0,0 @@ -<?php - - // Load configuration - global $CONFIG; - - gatekeeper(); - - $user_guid = get_input('user_guid', get_loggedin_userid()); - $event_id = get_input('event_id'); - - $user = get_entity($user_guid); - $event = get_entity($event_id); - - // If join request made - if (event_calendar_personal_can_manage($event,$user_guid) && check_entity_relationship($user->guid, 'event_calendar_request', $event->guid)) - { - remove_entity_relationship($user->guid, 'event_calendar_request', $event->guid); - system_message(elgg_echo('event_calendar:requestkilled')); - } - - forward($_SERVER['HTTP_REFERER']); - -?> \ No newline at end of file diff --git a/actions/remove_from_group.php b/actions/remove_from_group.php deleted file mode 100644 index 4a7185245..000000000 --- a/actions/remove_from_group.php +++ /dev/null @@ -1,8 +0,0 @@ -<?php -$event_id = get_input("event_id",0); -$group_id = get_input("group_id",0); -$event = get_entity($event_id); -remove_entity_relationship($event_id, "display_on_group", $group_id ); -system_message(elgg_echo('event_calendar:remove_from_group:success')); -forward($event->getUrl()); -?> \ No newline at end of file diff --git a/actions/toggle_personal_calendar.php b/actions/toggle_personal_calendar.php deleted file mode 100644 index f36b5836f..000000000 --- a/actions/toggle_personal_calendar.php +++ /dev/null @@ -1,30 +0,0 @@ -<?php -$event_id = get_input('event_id',0); -$user_id = get_input('user_id',get_loggedin_userid()); -$other = get_input('other',''); -$success = '@s@'; -$failure = '@f@'; -if ($other) { - $remove_response = elgg_echo('event_calendar:add_to_the_calendar'); - $add_response = elgg_echo('event_calendar:remove_from_the_calendar'); - $add_error = elgg_echo('event_calendar:add_to_the_calendar_error'); -} else { - $remove_response = $success.elgg_echo('event_calendar:remove_from_my_calendar_response'); - $add_response = $success.elgg_echo('event_calendar:add_to_my_calendar_response'); - $add_error = $failure.elgg_echo('event_calendar:add_to_my_calendar_error'); -} -// three character prefix to indicate success or failure - -if (event_calendar_has_personal_event($event_id,$user_id)) { - event_calendar_remove_personal_event($event_id,$user_id); - echo $remove_response; -} else { - if (event_calendar_add_personal_event($event_id,$user_id)) { - echo $success.$add_response; - } else { - echo $failure.$add_error; - } -} - -exit; -?> \ No newline at end of file -- cgit v1.2.3 From 934e73de5c3835e40d9154a4cd2b85434b5f4565 Mon Sep 17 00:00:00 2001 From: Kevin Jardine <kevinjardine@yahoo.com> Date: Wed, 5 Oct 2011 16:27:50 +0200 Subject: removed access levels from listing view and revised some text --- languages/en.php | 12 +++++++++-- models/model.php | 9 +++++--- start.php | 29 +++++++++++++++++++++++--- views/default/object/event_calendar.php | 2 +- views/default/settings/event_calendar/edit.php | 3 --- 5 files changed, 43 insertions(+), 12 deletions(-) diff --git a/languages/en.php b/languages/en.php index 8c32bd842..da055c6e5 100644 --- a/languages/en.php +++ b/languages/en.php @@ -75,6 +75,8 @@ 'event_calendar:remove_from_my_calendar_response' => "This event has been removed from your personal calendar.", 'event_calendar:add_to_the_calendar' => "Add to calendar", 'event_calendar:remove_from_the_calendar' => "Remove", + 'event_calendar:add_to_the_calendar_menu_text' => "Add to mine", + 'event_calendar:remove_from_the_calendar_menu_text' => "Remove from mine", 'event_calendar:remove_from_the_calendar_button' => "Remove from calendar", 'event_calendar:added_to_the_calendar' => "Added to calendar", 'event_calendar:removed_from_the_calendar' => "Removed calendar", @@ -85,7 +87,8 @@ 'event_calendar:users_for_event_menu_title' => "People listing this event on their personal calendars", 'event_calendar:users_for_event_title' => "Personal calendars for \"%s'\"", - 'event_calendar:personal_event_calendars_link' => "Calendars (%s)", + 'event_calendar:personal_event_calendars_link' => "On %s calendars", + 'event_calendar:personal_event_calendars_link_one' => "On 1 calendar", 'event_calendar:users_for_event_breadcrumb' => "Personal calendars", 'event_calendar:settings:group_profile_display:title' => "Group calendar profile display (if group calendars are enabled)", 'event_calendar:settings:group_profile_display_option:left' => "left column", @@ -203,7 +206,7 @@ You can manage calendar requests for this event here: 'event_calendar:add_to_group:success' => "Event added to group calendar", 'event_calendar:settings:add_to_group_calendar:title' => "Allow group admins to add any existing event to a group calendar", - 'event_calendar:group_breadcrumb' => "Group event calendar", + 'event_calendar:group_breadcrumb' => "Group calendar", 'event_calendar:no_group' => "There is no such group.", 'event_calendar:generic_error_title' => "Error", 'event_calendar:error_event_edit' => "Error: there is no such event or you do not have permission to edit it.", @@ -220,6 +223,11 @@ You can manage calendar requests for this event here: 'event_calendar:show_friends' => "My friends' calendars", 'event_calendar:show_only' => "Show only those on:", + 'event_calendar:listing_title:all' => "All events", + 'event_calendar:listing_title:open' => "Open events", + 'event_calendar:listing_title:mine' => "My calendar", + 'event_calendar:listing_title:friends' => "Friends' calendars", + /** * Event calendar river **/ diff --git a/models/model.php b/models/model.php index dedb69efc..446415e4b 100644 --- a/models/model.php +++ b/models/model.php @@ -1099,7 +1099,7 @@ function event_calendar_get_page_content_list($page_type,$container_guid,$start_ global $autofeed; $autofeed = true; if ($page_type == 'group') { - if (!event_calendar_activated_for_group($container__guid)) { + if (!event_calendar_activated_for_group($container_guid)) { forward(); } elgg_push_breadcrumb(elgg_echo('event_calendar:group_breadcrumb')); @@ -1150,7 +1150,7 @@ function event_calendar_get_page_content_list($page_type,$container_guid,$start_ )); } } - } + } $params = event_calendar_generate_listing_params($page_type,$container_guid,$start_date,$display_mode,$filter,$region); @@ -1449,8 +1449,10 @@ function event_calendar_generate_listing_params($page_type,$container_guid,$orig if ($event_calendar_listing_format == 'paged') { $title = elgg_echo('event_calendar:upcoming_events_title'); + } else if ($page_type == 'group') { + $title = elgg_echo('event_calendar:group'). ' ('.$subtitle.')'; } else { - $title = elgg_echo('event_calendar:show_events_title'). ' ('.$subtitle.')'; + $title = elgg_echo('event_calendar:listing_title:'.$filter). ' ('.$subtitle.')'; } $params = array('title' => $title, 'content' => $content, 'filter_override'=>$filter_override); @@ -1460,6 +1462,7 @@ function event_calendar_generate_listing_params($page_type,$container_guid,$orig function event_calendar_get_page_content_view($event_guid) { // add personal calendar button and links + elgg_push_context('event_calendar:view'); $event = get_entity($event_guid); if (!elgg_instanceof($event, 'object', 'event_calendar')) { diff --git a/start.php b/start.php index 54ab6e296..f99c6ceb9 100644 --- a/start.php +++ b/start.php @@ -83,6 +83,7 @@ function event_calendar_init() { // entity menu elgg_register_plugin_hook_handler('register', 'menu:entity', 'event_calendar_entity_menu_setup'); + elgg_register_plugin_hook_handler('prepare', 'menu:entity', 'event_calendar_entity_menu_prepare'); // register actions $action_path = elgg_get_plugins_path() . 'event_calendar/actions/event_calendar'; @@ -271,7 +272,7 @@ function event_calendar_entity_menu_setup($hook, $type, $return, $params) { if (event_calendar_has_personal_event($entity->guid,$user_guid)) { $options = array( 'name' => 'personal_calendar', - 'text' => elgg_echo('event_calendar:remove_from_the_calendar'), + 'text' => elgg_echo('event_calendar:remove_from_the_calendar_menu_text'), 'title' => elgg_echo('event_calendar:remove_from_my_calendar'), 'href' => elgg_add_action_tokens_to_url("action/event_calendar/remove_personal?guid={$entity->guid}"), 'priority' => 150, @@ -281,7 +282,7 @@ function event_calendar_entity_menu_setup($hook, $type, $return, $params) { if (!event_calendar_is_full($entity->guid) && !event_calendar_has_collision($entity->guid,$user_guid)) { $options = array( 'name' => 'personal_calendar', - 'text' => elgg_echo('event_calendar:add_to_the_calendar'), + 'text' => elgg_echo('event_calendar:add_to_the_calendar_menu_text'), 'title' => elgg_echo('event_calendar:add_to_my_calendar'), 'href' => elgg_add_action_tokens_to_url("action/event_calendar/add_personal?guid={$entity->guid}"), 'priority' => 150, @@ -301,9 +302,16 @@ function event_calendar_entity_menu_setup($hook, $type, $return, $params) { } } + $count = event_calendar_get_users_for_event($entity->guid,0,0,true); + if ($count == 1) { + $calendar_text = elgg_echo('event_calendar:personal_event_calendars_link_one'); + } else { + $calendar_text = elgg_echo('event_calendar:personal_event_calendars_link',array($count)); + } + $options = array( 'name' => 'calendar_listing', - 'text' => elgg_echo('event_calendar:personal_event_calendars_link',array(event_calendar_get_users_for_event($entity->guid,0,0,true))), + 'text' => $calendar_text, 'title' => elgg_echo('event_calendar:users_for_event_menu_title'), 'href' => "event_calendar/display_users/{$entity->guid}", 'priority' => 150, @@ -320,3 +328,18 @@ function event_calendar_entity_menu_setup($hook, $type, $return, $params) { return $return; } + +function event_calendar_entity_menu_prepare($hook, $type, $return, $params) { + // remove access level from listings + if (!elgg_in_context('event_calendar:view')) { + $new_return = array(); + foreach($return['default'] AS $item) { + if ($item->getName() != 'access') { + $new_return[] = $item; + } + } + $return['default'] = $new_return; + } + + return $return; +} diff --git a/views/default/object/event_calendar.php b/views/default/object/event_calendar.php index c3c18cc92..717e2803e 100644 --- a/views/default/object/event_calendar.php +++ b/views/default/object/event_calendar.php @@ -76,7 +76,7 @@ if ($full) { if (elgg_in_context('widgets')) { $metadata = ''; - } else { + } else { $metadata = elgg_view_menu('entity', array( 'entity' => $event, 'handler' => 'event_calendar', diff --git a/views/default/settings/event_calendar/edit.php b/views/default/settings/event_calendar/edit.php index 9fb025755..54ff5c1c3 100644 --- a/views/default/settings/event_calendar/edit.php +++ b/views/default/settings/event_calendar/edit.php @@ -7,8 +7,6 @@ $access_options = array( ACCESS_PRIVATE => elgg_echo("PRIVATE"), ACCESS_LOGGED_IN => elgg_echo("LOGGED_IN"), ACCESS_PUBLIC => elgg_echo("PUBLIC")); -// TODO - merge the agenda view into the list format options - $listing_options = array(elgg_echo('event_calendar:settings:paged')=>'paged', elgg_echo('event_calendar:settings:agenda')=>'agenda', elgg_echo('event_calendar:settings:month')=>'month', @@ -373,4 +371,3 @@ $body .= '<br />'; $body .= elgg_view('input/text',array('name'=>'params[ical_auth_file_name]','value'=>$ical_auth_file_name, 'class'=>'event-calendar-ical-auth-setting')); echo $body; -?> \ No newline at end of file -- cgit v1.2.3 From 3b6f9d887fea4a97ae9b948922a8679496862bbf Mon Sep 17 00:00:00 2001 From: Kevin Jardine <kevinjardine@yahoo.com> Date: Wed, 5 Oct 2011 16:51:08 +0200 Subject: added UTC date qualifier --- views/default/input/datepicker_inline.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/views/default/input/datepicker_inline.php b/views/default/input/datepicker_inline.php index bcb7c85f5..1d0a0689d 100644 --- a/views/default/input/datepicker_inline.php +++ b/views/default/input/datepicker_inline.php @@ -17,7 +17,7 @@ if ($vars['group_guid']) { } if ($vars['mode'] == 'week') { - $selected_week = date('W',strtotime($vars['start_date']))+1; + $selected_week = date('W',strtotime($vars['start_date'].' UTC'))+1; } else { $selected_week = ''; } -- cgit v1.2.3 From e40bd05afc559335bc9b326f4ae2400043104818 Mon Sep 17 00:00:00 2001 From: Kevin Jardine <kevinjardine@yahoo.com> Date: Wed, 19 Oct 2011 11:23:52 +0200 Subject: fixes personal calendar toggle bug and adds the ability to add any site member to a site event and any group member to a group event --- .../event_calendar/toggle_personal_calendar.php | 3 +- languages/en.php | 6 ++- models/model.php | 62 ++++++++++++++++++++-- start.php | 3 ++ views/default/event_calendar/calendar_toggle.php | 18 +++---- 5 files changed, 77 insertions(+), 15 deletions(-) diff --git a/actions/event_calendar/toggle_personal_calendar.php b/actions/event_calendar/toggle_personal_calendar.php index f2341a91a..977355d78 100644 --- a/actions/event_calendar/toggle_personal_calendar.php +++ b/actions/event_calendar/toggle_personal_calendar.php @@ -1,8 +1,9 @@ <?php elgg_load_library('elgg:event_calendar'); $event_guid = get_input('event_guid',0); -$user_guid = get_input('user_id',elgg_get_logged_in_user_guid()); +$user_guid = get_input('user_guid',elgg_get_logged_in_user_guid()); $other = get_input('other',''); +error_log("in toggle_personal_calendar: $event_guid, $user_guid, $other"); if ($other) { $remove_response = elgg_echo('event_calendar:added_to_the_calendar'); $add_response = elgg_echo('event_calendar:removed_from_the_calendar'); diff --git a/languages/en.php b/languages/en.php index da055c6e5..3239e07bc 100644 --- a/languages/en.php +++ b/languages/en.php @@ -226,7 +226,11 @@ You can manage calendar requests for this event here: 'event_calendar:listing_title:all' => "All events", 'event_calendar:listing_title:open' => "Open events", 'event_calendar:listing_title:mine' => "My calendar", - 'event_calendar:listing_title:friends' => "Friends' calendars", + 'event_calendar:listing_title:friends' => "Friends' calendars", + 'event_calendar:manage_users:title' => "Manage subscribers for \"%s\"", + 'event_calendar:manage_users:breadcrumb' => "Manage subscribers", + 'event_calendar:manage_users:description' => "You can add or remove events from personal calendars using the buttons below.", + 'event_calendar:manage_users:unauthorized' => "Error: you are not authorised to manage personal calendars for this event.", /** * Event calendar river diff --git a/models/model.php b/models/model.php index 446415e4b..378eeacce 100644 --- a/models/model.php +++ b/models/model.php @@ -701,9 +701,9 @@ function event_calendar_has_personal_event($event_guid,$user_guid) { // use old method for now $annotations = get_annotations($event_guid, "object", "event_calendar", "personal_event", (int) $user_guid, $user_guid); if ($annotations && count($annotations) > 0) { - return true; + return TRUE; } else { - return false; + return FALSE; } } } @@ -1532,6 +1532,59 @@ function event_calendar_get_page_content_display_users($event_guid) { return elgg_view_page($title,$body); } +// display a list of all the members of the container of $event_guid and allowing +// adding or removing them + +function event_calendar_get_page_content_manage_users($event_guid) { + // TODO: make this an optional feature, toggled off + elgg_load_js('elgg.event_calendar'); + $event = get_entity($event_guid); + $limit = 10; + $offset = get_input('offset', 0); + + if (!elgg_instanceof($event, 'object', 'event_calendar')) { + $content = elgg_echo('event_calendar:error_nosuchevent'); + $title = elgg_echo('event_calendar:generic_error_title'); + } else { + event_calendar_handle_menu($event_guid); + $title = elgg_echo('event_calendar:manage_users:title',array($event->title)); + $event_container = get_entity($event->container_guid); + if ($event_container->canEdit()) { + if (elgg_instanceof($event_container, 'group')) { + elgg_push_context('groups'); + elgg_set_page_owner_guid($event->container_guid); + elgg_push_breadcrumb(elgg_echo('event_calendar:group_breadcrumb'), 'event_calendar/group/'.$event->container_guid); + $users = $event_container->getMembers($limit,$offset); + $count = $event_container->getMembers($limit,$offset,TRUE); + } else { + elgg_push_breadcrumb(elgg_echo('event_calendar:show_events_title'),'event_calendar/list'); + $users = elgg_get_entities(array('type'=>'user','limit'=>$limit,'offset'=>$offset)); + $count = elgg_get_entities(array('type'=>'user','count'=>TRUE)); + } + elgg_push_breadcrumb($event->title,$event->getURL()); + elgg_push_breadcrumb(elgg_echo('event_calendar:manage_users:breadcrumb')); + $options = array( + 'full_view' => FALSE, + 'list_type_toggle' => FALSE, + 'limit'=>$limit, + 'event_calendar_event'=>$event, + 'pagination' => TRUE, + 'count'=>$count, + ); + elgg_extend_view('user/default','event_calendar/calendar_toggle'); + $content = '<p>'.elgg_echo('event_calendar:manage_users:description').'</p>'; + $content .= elgg_view_entity_list($users,$options,$offset,$limit); + } else { + $content = elgg_echo('event_calendar:manage_users:unauthorized'); + } + } + $params = array('title' => $title, 'content' => $content,'filter' => ''); + + $body = elgg_view_layout("content", $params); + + return elgg_view_page($title,$body); +} + function event_calendar_get_page_content_review_requests($event_guid) { $event = get_entity($event_guid); @@ -1581,10 +1634,13 @@ function event_calendar_handle_menu($event_guid) { $event_calendar_personal_manage = elgg_get_plugin_setting('personal_manage', 'event_calendar'); if ($event_calendar_personal_manage == 'no') { $url = "event_calendar/review_requests/$event_guid"; - $item = new ElggMenuItem('event-calendar-menu', elgg_echo('event_calendar:review_requests_menu_title'), $url); + $item = new ElggMenuItem('event-calendar-0review_requests', elgg_echo('event_calendar:review_requests_menu_title'), $url); elgg_register_menu_item('page', $item); //add_submenu_item(elgg_echo('event_calendar:review_requests_title'), $CONFIG->wwwroot . "pg/event_calendar/review_requests/".$event_id, '0eventcalendaradmin'); } + $url = "event_calendar/manage_users/$event_guid"; + $item = new ElggMenuItem('event-calendar-1manage_users', elgg_echo('event_calendar:manage_users:breadcrumb'), $url); + elgg_register_menu_item('page', $item); } function event_calendar_get_secret_key() { $key_file_name = elgg_get_plugin_setting('ical_auth_file_name','event_calendar'); diff --git a/start.php b/start.php index f99c6ceb9..8baf86a6b 100644 --- a/start.php +++ b/start.php @@ -174,6 +174,9 @@ function event_calendar_page_handler($page) { case 'display_users': echo event_calendar_get_page_content_display_users($page[1]); break; + case 'manage_users': + echo event_calendar_get_page_content_manage_users($page[1]); + break; case 'add': if (isset($page[1])) { group_gatekeeper(); diff --git a/views/default/event_calendar/calendar_toggle.php b/views/default/event_calendar/calendar_toggle.php index 7180dec75..30de15cf2 100644 --- a/views/default/event_calendar/calendar_toggle.php +++ b/views/default/event_calendar/calendar_toggle.php @@ -2,19 +2,17 @@ $event = $vars['event_calendar_event']; $user = $vars['entity']; $container = get_entity($event->container_guid); +if (event_calendar_has_personal_event($event->guid, $user->guid)) { + $label = elgg_echo('event_calendar:remove_from_the_calendar_button'); +} else { + $label = elgg_echo('event_calendar:add_to_the_calendar'); +} -if ($container->canEdit()) { - $link = '<p class="event-calendar-personal-calendar-toggle"><a href="javascript:void(0);" '; - $link .= 'onclick="javascript:event_calendar_personal_toggle('.$event->guid.','.$vars['entity']->guid.'); return false;" '; - $link .= ' >'; - $link .= '<span id="event_calendar_user_data_'.$vars['entity']->guid.'">'.elgg_echo('event_calendar:remove_from_the_calendar').'</span>'; - $link .= '</a></p>'; - +if ($container->canEdit()) { $button = elgg_view('input/button',array( 'id'=>'event_calendar_user_data_'.$event->guid.'_'.$user->guid, 'class' => "event-calendar-personal-calendar-toggle", - 'value' => elgg_echo('event_calendar:remove_from_the_calendar_button'), + 'value' => $label, )); + echo '<div class="event-calendar-personal-calendar-toggle-wrapper">'.$button.'<div>'; } - -echo '<div class="event-calendar-personal-calendar-toggle-wrapper">'.$button.'<div>'; -- cgit v1.2.3 From a4003502d860f39880d0368d2737f3b03445fafa Mon Sep 17 00:00:00 2001 From: Kevin Jardine <kevinjardine@yahoo.com> Date: Wed, 19 Oct 2011 15:33:46 +0200 Subject: removed error_log statement --- actions/event_calendar/toggle_personal_calendar.php | 1 - 1 file changed, 1 deletion(-) diff --git a/actions/event_calendar/toggle_personal_calendar.php b/actions/event_calendar/toggle_personal_calendar.php index 977355d78..9ad8d0a0e 100644 --- a/actions/event_calendar/toggle_personal_calendar.php +++ b/actions/event_calendar/toggle_personal_calendar.php @@ -3,7 +3,6 @@ elgg_load_library('elgg:event_calendar'); $event_guid = get_input('event_guid',0); $user_guid = get_input('user_guid',elgg_get_logged_in_user_guid()); $other = get_input('other',''); -error_log("in toggle_personal_calendar: $event_guid, $user_guid, $other"); if ($other) { $remove_response = elgg_echo('event_calendar:added_to_the_calendar'); $add_response = elgg_echo('event_calendar:removed_from_the_calendar'); -- cgit v1.2.3 From 52c341fb429b138f07cf99d1f5cde7ae8a86f8ee Mon Sep 17 00:00:00 2001 From: Kevin Jardine <kevinjardine@yahoo.com> Date: Wed, 19 Oct 2011 18:24:38 +0200 Subject: group events now have add all and remove all buttons when managing subscribers --- actions/event_calendar/add_to_group.php | 1 - actions/event_calendar/add_to_group_members.php | 15 +++++++++++++++ actions/event_calendar/remove_from_group_members.php | 15 +++++++++++++++ languages/en.php | 6 ++++++ models/model.php | 14 ++++++++++++++ start.php | 2 ++ 6 files changed, 52 insertions(+), 1 deletion(-) create mode 100644 actions/event_calendar/add_to_group_members.php create mode 100644 actions/event_calendar/remove_from_group_members.php diff --git a/actions/event_calendar/add_to_group.php b/actions/event_calendar/add_to_group.php index b8c18ebb0..b5eae4693 100644 --- a/actions/event_calendar/add_to_group.php +++ b/actions/event_calendar/add_to_group.php @@ -8,4 +8,3 @@ if ($group && $group->canEdit()) { system_message(elgg_echo('event_calendar:add_to_group:success')); } forward($event->getUrl()); -?> \ No newline at end of file diff --git a/actions/event_calendar/add_to_group_members.php b/actions/event_calendar/add_to_group_members.php new file mode 100644 index 000000000..d0d555b12 --- /dev/null +++ b/actions/event_calendar/add_to_group_members.php @@ -0,0 +1,15 @@ +<?php +elgg_load_library('elgg:event_calendar'); +$event_guid = get_input("event_guid",0); +$event = get_entity($event_guid); +$group = get_entity($event->container_guid); +if (elgg_instanceof($group,'group') && elgg_instanceof($event,'object','event_calendar') && $group->canEdit()) { + $members = $group->getMembers(0,0); + foreach($members as $member) { + event_calendar_add_personal_event($event->guid,$member->guid); + } + system_message(elgg_echo('event_calendar:add_to_group_members:success')); +} else { + register_error(elgg_echo('event_calendar:add_to_group_members:error')); +} +forward("event_calendar/manage_users/$event_guid"); diff --git a/actions/event_calendar/remove_from_group_members.php b/actions/event_calendar/remove_from_group_members.php new file mode 100644 index 000000000..a15b66c97 --- /dev/null +++ b/actions/event_calendar/remove_from_group_members.php @@ -0,0 +1,15 @@ +<?php +elgg_load_library('elgg:event_calendar'); +$event_guid = get_input("event_guid",0); +$event = get_entity($event_guid); +$group = get_entity($event->container_guid); +if (elgg_instanceof($group,'group') && elgg_instanceof($event,'object','event_calendar') && $group->canEdit()) { + $members = $group->getMembers(0,0); + foreach($members as $member) { + event_calendar_remove_personal_event($event->guid,$member->guid); + } + system_message(elgg_echo('event_calendar:remove_from_group_members:success')); +} else { + register_error(elgg_echo('event_calendar:remove_from_group_members:error')); +} +forward("event_calendar/manage_users/$event_guid"); diff --git a/languages/en.php b/languages/en.php index 3239e07bc..1155d76ed 100644 --- a/languages/en.php +++ b/languages/en.php @@ -231,6 +231,12 @@ You can manage calendar requests for this event here: 'event_calendar:manage_users:breadcrumb' => "Manage subscribers", 'event_calendar:manage_users:description' => "You can add or remove events from personal calendars using the buttons below.", 'event_calendar:manage_users:unauthorized' => "Error: you are not authorised to manage personal calendars for this event.", + 'event_calendar:add_to_group_members:success' => "This event has been added to the personal calendars of all group members.", + 'event_calendar:add_to_group_members:error' => "Error: could not add this event to the personal calendars of group members.", + 'event_calendar:remove_from_group_members:success' => "This event has been removed from the personal calendars of all group members.", + 'event_calendar:remove_from_group_members:error' => "Error: could not remove this event from the personal calendars of group members.", + 'event_calendar:add_to_group_members:button' => "Add to all", + 'event_calendar:remove_from_group_members:button' => "Remove from all", /** * Event calendar river diff --git a/models/model.php b/models/model.php index 378eeacce..51d4fb870 100644 --- a/models/model.php +++ b/models/model.php @@ -1556,6 +1556,18 @@ function event_calendar_get_page_content_manage_users($event_guid) { elgg_push_breadcrumb(elgg_echo('event_calendar:group_breadcrumb'), 'event_calendar/group/'.$event->container_guid); $users = $event_container->getMembers($limit,$offset); $count = $event_container->getMembers($limit,$offset,TRUE); + elgg_register_menu_item('title', array( + 'name' => 'remove_from_group_members', + 'href' => elgg_add_action_tokens_to_url('action/event_calendar/remove_from_group_members?event_guid='.$event_guid), + 'text' => elgg_echo('event_calendar:remove_from_group_members:button'), + 'class' => 'elgg-button elgg-button-action', + )); + elgg_register_menu_item('title', array( + 'name' => 'add_to_group_members', + 'href' => elgg_add_action_tokens_to_url('action/event_calendar/add_to_group_members?event_guid='.$event_guid), + 'text' => elgg_echo('event_calendar:add_to_group_members:button'), + 'class' => 'elgg-button elgg-button-action', + )); } else { elgg_push_breadcrumb(elgg_echo('event_calendar:show_events_title'),'event_calendar/list'); $users = elgg_get_entities(array('type'=>'user','limit'=>$limit,'offset'=>$offset)); @@ -1635,11 +1647,13 @@ function event_calendar_handle_menu($event_guid) { if ($event_calendar_personal_manage == 'no') { $url = "event_calendar/review_requests/$event_guid"; $item = new ElggMenuItem('event-calendar-0review_requests', elgg_echo('event_calendar:review_requests_menu_title'), $url); + $item->setSection('event_calendar'); elgg_register_menu_item('page', $item); //add_submenu_item(elgg_echo('event_calendar:review_requests_title'), $CONFIG->wwwroot . "pg/event_calendar/review_requests/".$event_id, '0eventcalendaradmin'); } $url = "event_calendar/manage_users/$event_guid"; $item = new ElggMenuItem('event-calendar-1manage_users', elgg_echo('event_calendar:manage_users:breadcrumb'), $url); + $item->setSection('event_calendar'); elgg_register_menu_item('page', $item); } function event_calendar_get_secret_key() { diff --git a/start.php b/start.php index 8baf86a6b..24a100f9f 100644 --- a/start.php +++ b/start.php @@ -98,6 +98,8 @@ function event_calendar_init() { elgg_register_action("event_calendar/addtocalendar","$action_path/addtocalendar.php"); elgg_register_action("event_calendar/add_to_group","$action_path/add_to_group.php"); elgg_register_action("event_calendar/remove_from_group","$action_path/remove_from_group.php"); + elgg_register_action("event_calendar/add_to_group_members","$action_path/add_to_group_members.php"); + elgg_register_action("event_calendar/remove_from_group_members","$action_path/remove_from_group_members.php"); } -- cgit v1.2.3 From 9fe3317951c5582e381bc4ab7b6b21f54ec26b36 Mon Sep 17 00:00:00 2001 From: Kevin Jardine <kevinjardine@yahoo.com> Date: Wed, 19 Oct 2011 18:52:07 +0200 Subject: check authority before displaying manage links --- models/model.php | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/models/model.php b/models/model.php index 51d4fb870..f2f48ca11 100644 --- a/models/model.php +++ b/models/model.php @@ -1469,12 +1469,17 @@ function event_calendar_get_page_content_view($event_guid) { $content = elgg_echo('event_calendar:error_nosuchevent'); $title = elgg_echo('event_calendar:generic_error_title'); } else { - event_calendar_handle_menu($event_guid); $title = htmlspecialchars($event->title); $event_container = get_entity($event->container_guid); if (elgg_instanceof($event_container, 'group')) { + if ($event_container->canEdit()) { + event_calendar_handle_menu($event_guid); + } elgg_push_breadcrumb(elgg_echo('event_calendar:group_breadcrumb'), 'event_calendar/group/'.$event->container_guid); } else { + if ($event->canEdit()) { + event_calendar_handle_menu($event_guid); + } elgg_push_breadcrumb(elgg_echo('event_calendar:show_events_title'),'event_calendar/list'); } -- cgit v1.2.3 From 1ca017f9f9f8b44fbdcb08105a52e059df6bb504 Mon Sep 17 00:00:00 2001 From: Kevin Jardine <kevinjardine@yahoo.com> Date: Wed, 19 Oct 2011 19:56:43 +0200 Subject: added proper check for group enabled calendar and renamed some deprecated functions --- models/model.php | 8 ++++---- start.php | 3 ++- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/models/model.php b/models/model.php index f2f48ca11..7f6c3d39d 100644 --- a/models/model.php +++ b/models/model.php @@ -859,8 +859,8 @@ function event_calendar_format_time($date,$time1,$time2='') { } function event_calendar_activated_for_group($group) { - $group_calendar = get_plugin_setting('group_calendar', 'event_calendar'); - $group_default = get_plugin_setting('group_default', 'event_calendar'); + $group_calendar = elgg_get_plugin_setting('group_calendar', 'event_calendar'); + $group_default = elgg_get_plugin_setting('group_default', 'event_calendar'); if ($group && ($group_calendar != 'no')) { if ( ($group->event_calendar_enable == 'yes') || ((!$group->event_calendar_enable && (!$group_default || $group_default == 'yes')))) { return true; @@ -870,7 +870,7 @@ function event_calendar_activated_for_group($group) { } function event_calendar_get_region($event) { - $event_calendar_region_list_handles = get_plugin_setting('region_list_handles', 'event_calendar'); + $event_calendar_region_list_handles = elgg_get_plugin_setting('region_list_handles', 'event_calendar'); $region = trim($event->region); if ($event_calendar_region_list_handles == 'yes') { $region = elgg_echo('event_calendar:region:'.$region); @@ -879,7 +879,7 @@ function event_calendar_get_region($event) { } function event_calendar_get_type($event) { - $event_calendar_type_list_handles = get_plugin_setting('type_list_handles', 'event_calendar'); + $event_calendar_type_list_handles = elgg_get_plugin_setting('type_list_handles', 'event_calendar'); $type = trim($event->event_type); if ($event_calendar_type_list_handles == 'yes') { $type = elgg_echo('event_calendar:type:'.$type); diff --git a/start.php b/start.php index 24a100f9f..ed0ba41db 100644 --- a/start.php +++ b/start.php @@ -107,8 +107,9 @@ function event_calendar_init() { * Add a menu item to an ownerblock */ function event_calendar_owner_block_menu($hook, $type, $return, $params) { + elgg_load_library('elgg:event_calendar'); if (elgg_instanceof($params['entity'], 'group')) { - if ($params['entity']->event_calendar_enable != "no") { + if (event_calendar_activated_for_group($params['entity'])) { $url = "event_calendar/group/{$params['entity']->guid}"; $item = new ElggMenuItem('event_calendar', elgg_echo('event_calendar:group'), $url); $return[] = $item; -- cgit v1.2.3 From db951f94b6ae60f899f719f17dce4aa6c47edf54 Mon Sep 17 00:00:00 2001 From: Kevin Jardine <kevinjardine@yahoo.com> Date: Mon, 24 Oct 2011 12:08:24 +0200 Subject: now uses a date_local view to consistently display events in local server time --- views/default/event_calendar/input/date_local.php | 56 +++++++++++++++++++++++ views/default/forms/event_calendar/edit.php | 4 +- 2 files changed, 58 insertions(+), 2 deletions(-) create mode 100644 views/default/event_calendar/input/date_local.php diff --git a/views/default/event_calendar/input/date_local.php b/views/default/event_calendar/input/date_local.php new file mode 100644 index 000000000..f9979cb38 --- /dev/null +++ b/views/default/event_calendar/input/date_local.php @@ -0,0 +1,56 @@ +<?php +/** + * Elgg date input + * Displays a text field with a popup date picker. + * + * The elgg.ui JavaScript library initializes the jQueryUI datepicker based + * on the CSS class .elgg-input-date. It uses the ISO 8601 standard for date + * representation: yyyy-mm-dd. + * + * Unix timestamps are supported by setting the 'timestamp' parameter to true. + * The date is still displayed to the user in a text format but is submitted as + * a unix timestamp in seconds. + * + * @uses $vars['value'] The current value, if any (as a unix timestamp) + * @uses $vars['class'] Additional CSS class + * @uses $vars['timestamp'] Store as a Unix timestamp in seconds. Default = false + * Note: you cannot use an id with the timestamp option. + */ + +//@todo popup_calendar deprecated in 1.8. Remove in 2.0 +if (isset($vars['class'])) { + $vars['class'] = "elgg-input-date popup_calendar {$vars['class']}"; +} else { + $vars['class'] = "elgg-input-date popup_calendar"; +} + +$defaults = array( + 'value' => '', + 'disabled' => false, + 'timestamp' => false, +); + +$vars = array_merge($defaults, $vars); + +$timestamp = $vars['timestamp']; +unset($vars['timestamp']); + +if ($timestamp) { + echo elgg_view('input/hidden', array( + 'name' => $vars['name'], + 'value' => $vars['value'], + )); + + $vars['class'] = "{$vars['class']} elgg-input-timestamp"; + $vars['id'] = $vars['name']; + unset($vars['name']); + unset($vars['internalname']); +} + +// convert timestamps to text for display +if (is_numeric($vars['value'])) { + $vars['value'] = date('Y/m/d', $vars['value']); +} + +$attributes = elgg_format_attributes($vars); +echo "<input type=\"text\" $attributes />"; diff --git a/views/default/forms/event_calendar/edit.php b/views/default/forms/event_calendar/edit.php index 25062e2df..214a51f4e 100644 --- a/views/default/forms/event_calendar/edit.php +++ b/views/default/forms/event_calendar/edit.php @@ -118,7 +118,7 @@ if ($event_calendar_times == 'yes') { } $body .= '<p><label>'.elgg_echo("event_calendar:start_date_label").'<br />'; -$body .= elgg_view("input/date",array('timestamp'=>TRUE, 'autocomplete'=>'off','name' => 'start_date','value'=>$start_date)); +$body .= elgg_view("event_calendar/input/date_local",array('timestamp'=>TRUE, 'autocomplete'=>'off','name' => 'start_date','value'=>$start_date)); $body .= '</label></p>'; $body .= '<p class="description">'.$prefix['start_date'].elgg_echo('event_calendar:start_date_description').'</p>'; @@ -131,7 +131,7 @@ if ($event_calendar_hide_end != 'yes') { } $body .= '<p><label>'.elgg_echo("event_calendar:end_date_label").'<br />'; - $body .= elgg_view("input/date",array('timestamp'=>TRUE,'autocomplete'=>'off','name' => 'end_date','value'=>$end_date)); + $body .= elgg_view("event_calendar/input/date_local",array('timestamp'=>TRUE,'autocomplete'=>'off','name' => 'end_date','value'=>$end_date)); $body .= '</label></p>'; $body .= '<p class="description">'.$prefix['end_date'].elgg_echo('event_calendar:end_date_description').'</p>'; } -- cgit v1.2.3 From 1520b0b67e7ec0129f40e8795eb7ffde4e7c2aac Mon Sep 17 00:00:00 2001 From: Kevin Jardine <kevinjardine@yahoo.com> Date: Tue, 8 Nov 2011 12:47:41 +0100 Subject: iCalendar fixes. --- languages/en.php | 1 + models/model.php | 6 ++++-- start.php | 10 ++++++---- views/default/js/event_calendar/event_calendar.php | 7 +++++++ views/ical/object/event_calendar.php | 4 ++-- views/ical/page/default.php | 2 +- 6 files changed, 21 insertions(+), 9 deletions(-) diff --git a/languages/en.php b/languages/en.php index 1155d76ed..285392e62 100644 --- a/languages/en.php +++ b/languages/en.php @@ -213,6 +213,7 @@ You can manage calendar requests for this event here: 'event_calendar:add' => "Add", 'feed:ical' => "iCal feed for this page", + 'event_calendar:ical_popup_message' => "You can use the following URL to get an iCalendar feed of the public events from this listing page: ", 'event_calendar:ical_auth_file_name:title' => "Location of iCal authentication file on local file system (experimental - not needed for public feeds)", 'event_calendar:owner:permissions_error' => "You do not have permission to view that page.", diff --git a/models/model.php b/models/model.php index 7f6c3d39d..db2bdf95d 100644 --- a/models/model.php +++ b/models/model.php @@ -160,11 +160,11 @@ function event_calendar_set_event_from_form($event_guid,$group_guid) { function event_calendar_get_events_between($start_date,$end_date,$is_count,$limit=10,$offset=0,$container_guid=0,$region='-') { if ($is_count) { - $count = event_calendar_get_entities_from_metadata_between('start_date','end_date', + $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); return $count; } else { - $events = event_calendar_get_entities_from_metadata_between('start_date','end_date', + $events = 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,false,$region); //return event_calendar_vsort($events,'start_date'); return $events; @@ -1096,6 +1096,7 @@ function event_calendar_send_event_request($event,$user_guid) { // pages function event_calendar_get_page_content_list($page_type,$container_guid,$start_date,$display_mode,$filter,$region='-') { + elgg_load_js('elgg.event_calendar'); global $autofeed; $autofeed = true; if ($page_type == 'group') { @@ -1164,6 +1165,7 @@ function event_calendar_get_page_content_list($page_type,$container_guid,$start_ $url = elgg_format_url($url); $menu_options = array( 'name' => 'ical', + 'id' => 'event-calendar-ical-link', 'text' => '<img src="'.elgg_get_site_url().'mod/event_calendar/images/ics.png" />', 'href' => $url, 'title' => elgg_echo('feed:ical'), diff --git a/start.php b/start.php index ed0ba41db..03f1a183a 100644 --- a/start.php +++ b/start.php @@ -337,11 +337,13 @@ function event_calendar_entity_menu_setup($hook, $type, $return, $params) { function event_calendar_entity_menu_prepare($hook, $type, $return, $params) { // remove access level from listings - if (!elgg_in_context('event_calendar:view')) { + if (elgg_in_context('event_calendar') && !elgg_in_context('event_calendar:view')) { $new_return = array(); - foreach($return['default'] AS $item) { - if ($item->getName() != 'access') { - $new_return[] = $item; + if ($return['default']) { + foreach($return['default'] AS $item) { + if ($item->getName() != 'access') { + $new_return[] = $item; + } } } $return['default'] = $new_return; diff --git a/views/default/js/event_calendar/event_calendar.php b/views/default/js/event_calendar/event_calendar.php index f3f5b68c8..8c4e735a6 100644 --- a/views/default/js/event_calendar/event_calendar.php +++ b/views/default/js/event_calendar/event_calendar.php @@ -5,6 +5,7 @@ elgg.event_calendar.init = function () { $('.event_calendar_paged_checkbox').click(elgg.event_calendar.handlePagedPersonalCalendarToggle); $('.event-calendar-personal-calendar-toggle').click(elgg.event_calendar.handleDisplayPagePersonalCalendarToggle); $('#event-calendar-region').change(elgg.event_calendar.handleRegionChange); + $('#event-calendar-ical-link').click(elgg.event_calendar.handleIcalPopup); } elgg.event_calendar.handleRegionChange = function(e) { @@ -12,6 +13,12 @@ elgg.event_calendar.handleRegionChange = function(e) { elgg.forward(url); } +elgg.event_calendar.handleIcalPopup = function(e) { + var message = elgg.echo('event_calendar:ical_popup_message')+"\n"+this.href; + alert(message); + return false; +} + elgg.event_calendar.handlePagedPersonalCalendarToggle = function() { guid = parseInt($(this).attr('id').substring('event_calendar_paged_checkbox_'.length)); elgg.event_calendar.togglePagedPersonalCalendar(guid); diff --git a/views/ical/object/event_calendar.php b/views/ical/object/event_calendar.php index a6ed889e5..36d71a66c 100644 --- a/views/ical/object/event_calendar.php +++ b/views/ical/object/event_calendar.php @@ -29,9 +29,9 @@ CREATED:<?php echo date("Ymd\THis\Z", $event->getTimeCreated())?> LAST-MODIFIED:<?php echo date("Ymd\THis\Z", $event->getTimeUpdated()) ?> -DTSTART:<?php echo date("Ymd\THis\Z", $event->start_date); ?> +DTSTART;VALUE=DATE:<?php echo date("Ymd\THis\Z", $event->start_date); ?> -DTEND:<?php echo date("Ymd\THis\Z", $event->real_end_time); ?> +DTEND;VALUE=DATE:<?php echo date("Ymd\THis\Z", $event->real_end_time); ?> SUMMARY:<?php echo $event->title; ?> diff --git a/views/ical/page/default.php b/views/ical/page/default.php index c269b5849..b4cd7eefb 100644 --- a/views/ical/page/default.php +++ b/views/ical/page/default.php @@ -8,7 +8,7 @@ */ header("Content-Type: text/calendar"); -//header("Content-Disposition: attachment; filename=\"calendar.ics\""); +header("Content-Disposition: inline; filename=\"calendar.ics\""); ?> BEGIN:VCALENDAR VERSION:2.0 -- cgit v1.2.3 From 52326aa6023bea7efc6208ce80f3e78797a3fcc9 Mon Sep 17 00:00:00 2001 From: Kevin Jardine <kevinjardine@yahoo.com> Date: Thu, 10 Nov 2011 21:32:54 +0100 Subject: Added foreach check to avoid a warning --- start.php | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/start.php b/start.php index 03f1a183a..b8c79ca37 100644 --- a/start.php +++ b/start.php @@ -49,7 +49,6 @@ function event_calendar_init() { // TODO - are the left and right values still relevant for Elgg 1.8? $group_calendar = elgg_get_plugin_setting('group_calendar', 'event_calendar'); if (!$group_calendar || $group_calendar != 'no') { - // add blog link to elgg_register_plugin_hook_handler('register', 'menu:owner_block', 'event_calendar_owner_block_menu'); $group_profile_display = elgg_get_plugin_setting('group_profile_display', 'event_calendar'); if (!$group_profile_display || $group_profile_display == 'right') { @@ -339,7 +338,7 @@ function event_calendar_entity_menu_prepare($hook, $type, $return, $params) { // remove access level from listings if (elgg_in_context('event_calendar') && !elgg_in_context('event_calendar:view')) { $new_return = array(); - if ($return['default']) { + if (isset($return['default']) && is_array($return['default'])) { foreach($return['default'] AS $item) { if ($item->getName() != 'access') { $new_return[] = $item; -- cgit v1.2.3 From aa04adce03438348c52477eacbd611c83d3caf68 Mon Sep 17 00:00:00 2001 From: Kevin Jardine <kevinjardine@yahoo.com> Date: Mon, 2 Jan 2012 15:09:06 +0100 Subject: added new userpicker for site-wide event user management --- actions/event_calendar/manage_subscribers.php | 17 ++++++++++++ languages/en.php | 5 +++- models/model.php | 30 +++++++++++----------- start.php | 1 + .../forms/event_calendar/manage_subscribers.php | 14 ++++++++++ 5 files changed, 51 insertions(+), 16 deletions(-) create mode 100644 actions/event_calendar/manage_subscribers.php create mode 100644 views/default/forms/event_calendar/manage_subscribers.php diff --git a/actions/event_calendar/manage_subscribers.php b/actions/event_calendar/manage_subscribers.php new file mode 100644 index 000000000..212150082 --- /dev/null +++ b/actions/event_calendar/manage_subscribers.php @@ -0,0 +1,17 @@ +<?php +$event_guid = get_input('event_guid'); +$event = get_entity($event_guid); +if (elgg_instanceof($event,'object','event_calendar') && $event->canEdit()) { + $members = get_input('members'); + // clear the event from all personal calendars + remove_entity_relationships($event_guid, 'personal_event', TRUE); + // add event to personal calendars + foreach ($members as $user_guid) { + add_entity_relationship($user_guid,'personal_event',$event_guid); + } + system_message(elgg_echo('event_calendar:manage_subscribers:success')); + forward($event->getURL()); +} else { + register_error(elgg_echo('event_calendar:manage_subscribers:error')); + forward(); +} diff --git a/languages/en.php b/languages/en.php index 285392e62..d16085994 100644 --- a/languages/en.php +++ b/languages/en.php @@ -230,7 +230,7 @@ You can manage calendar requests for this event here: 'event_calendar:listing_title:friends' => "Friends' calendars", 'event_calendar:manage_users:title' => "Manage subscribers for \"%s\"", 'event_calendar:manage_users:breadcrumb' => "Manage subscribers", - 'event_calendar:manage_users:description' => "You can add or remove events from personal calendars using the buttons below.", + 'event_calendar:manage_users:description' => "Add or remove events from personal calendars.", 'event_calendar:manage_users:unauthorized' => "Error: you are not authorised to manage personal calendars for this event.", 'event_calendar:add_to_group_members:success' => "This event has been added to the personal calendars of all group members.", 'event_calendar:add_to_group_members:error' => "Error: could not add this event to the personal calendars of group members.", @@ -239,6 +239,9 @@ You can manage calendar requests for this event here: 'event_calendar:add_to_group_members:button' => "Add to all", 'event_calendar:remove_from_group_members:button' => "Remove from all", + 'event_calendar:manage_subscribers:success' => "Personal calendars updated.", + 'event_calendar:manage_subscribers:error' => "Error: could not update personal calendars.", + /** * Event calendar river **/ diff --git a/models/model.php b/models/model.php index db2bdf95d..65a9215af 100644 --- a/models/model.php +++ b/models/model.php @@ -1561,8 +1561,6 @@ function event_calendar_get_page_content_manage_users($event_guid) { elgg_push_context('groups'); elgg_set_page_owner_guid($event->container_guid); elgg_push_breadcrumb(elgg_echo('event_calendar:group_breadcrumb'), 'event_calendar/group/'.$event->container_guid); - $users = $event_container->getMembers($limit,$offset); - $count = $event_container->getMembers($limit,$offset,TRUE); elgg_register_menu_item('title', array( 'name' => 'remove_from_group_members', 'href' => elgg_add_action_tokens_to_url('action/event_calendar/remove_from_group_members?event_guid='.$event_guid), @@ -1575,24 +1573,26 @@ function event_calendar_get_page_content_manage_users($event_guid) { 'text' => elgg_echo('event_calendar:add_to_group_members:button'), 'class' => 'elgg-button elgg-button-action', )); + $users = $event_container->getMembers($limit,$offset); + $count = $event_container->getMembers($limit,$offset,TRUE); + elgg_extend_view('user/default','event_calendar/calendar_toggle'); + $options = array( + 'full_view' => FALSE, + 'list_type_toggle' => FALSE, + 'limit'=>$limit, + 'event_calendar_event'=>$event, + 'pagination' => TRUE, + 'count'=>$count, + ); + $content .= elgg_view_entity_list($users,$options,$offset,$limit); } else { elgg_push_breadcrumb(elgg_echo('event_calendar:show_events_title'),'event_calendar/list'); - $users = elgg_get_entities(array('type'=>'user','limit'=>$limit,'offset'=>$offset)); - $count = elgg_get_entities(array('type'=>'user','count'=>TRUE)); + $content = '<p>'.elgg_echo('event_calendar:manage_users:description').'</p>'; + $content .= elgg_view_form('event_calendar/manage_subscribers',array(),array('event'=>$event)); } elgg_push_breadcrumb($event->title,$event->getURL()); elgg_push_breadcrumb(elgg_echo('event_calendar:manage_users:breadcrumb')); - $options = array( - 'full_view' => FALSE, - 'list_type_toggle' => FALSE, - 'limit'=>$limit, - 'event_calendar_event'=>$event, - 'pagination' => TRUE, - 'count'=>$count, - ); - elgg_extend_view('user/default','event_calendar/calendar_toggle'); - $content = '<p>'.elgg_echo('event_calendar:manage_users:description').'</p>'; - $content .= elgg_view_entity_list($users,$options,$offset,$limit); + } else { $content = elgg_echo('event_calendar:manage_users:unauthorized'); } diff --git a/start.php b/start.php index b8c79ca37..5cfc9fd3a 100644 --- a/start.php +++ b/start.php @@ -99,6 +99,7 @@ function event_calendar_init() { elgg_register_action("event_calendar/remove_from_group","$action_path/remove_from_group.php"); elgg_register_action("event_calendar/add_to_group_members","$action_path/add_to_group_members.php"); elgg_register_action("event_calendar/remove_from_group_members","$action_path/remove_from_group_members.php"); + elgg_register_action("event_calendar/manage_subscribers","$action_path/manage_subscribers.php"); } diff --git a/views/default/forms/event_calendar/manage_subscribers.php b/views/default/forms/event_calendar/manage_subscribers.php new file mode 100644 index 000000000..8039c5015 --- /dev/null +++ b/views/default/forms/event_calendar/manage_subscribers.php @@ -0,0 +1,14 @@ +<?php +$event = $vars['event']; +$users = event_calendar_get_users_for_event($event->guid,0); +$guids = array(); +foreach($users as $user) { + $guids[] = $user->guid; +} +// TODO: if the event container is a group need to restrict user picker to the members of the group? +$content = elgg_view('input/userpicker_plus',array('value'=> $guids)); +$content .= '<br /><br />'; +$content .= elgg_view('input/hidden',array('name'=>'event_guid','value'=>$event->guid)); +$content .= elgg_view('input/submit',array('value'=>elgg_echo('submit'),'name'=>'submit_manage_subscribers','id'=>'submit-manage-subscribers')); + +echo $content; -- cgit v1.2.3 From 2cef39baed704f34c54221301a214f363d2ce65a Mon Sep 17 00:00:00 2001 From: Kevin Jardine <kevinjardine@yahoo.com> Date: Wed, 25 Jan 2012 11:35:41 +0100 Subject: reactivated add_users and add_users_notify settings (both off by default) --- actions/event_calendar/manage_subscribers.php | 11 +- languages/en.php | 6 +- models/model.php | 18 +- views/default/plugins/event_calendar/settings.php | 373 ++++++++++++++++++++++ views/default/settings/event_calendar/edit.php | 373 ---------------------- 5 files changed, 401 insertions(+), 380 deletions(-) create mode 100644 views/default/plugins/event_calendar/settings.php delete mode 100644 views/default/settings/event_calendar/edit.php diff --git a/actions/event_calendar/manage_subscribers.php b/actions/event_calendar/manage_subscribers.php index 212150082..d20c73cbd 100644 --- a/actions/event_calendar/manage_subscribers.php +++ b/actions/event_calendar/manage_subscribers.php @@ -1,13 +1,22 @@ <?php $event_guid = get_input('event_guid'); $event = get_entity($event_guid); -if (elgg_instanceof($event,'object','event_calendar') && $event->canEdit()) { +$event_calendar_add_users = elgg_get_plugin_setting('add_users', 'event_calendar'); +if (($event_calendar_add_users == 'yes') && elgg_instanceof($event,'object','event_calendar') && $event->canEdit()) { $members = get_input('members'); // clear the event from all personal calendars remove_entity_relationships($event_guid, 'personal_event', TRUE); // add event to personal calendars + $event_calendar_add_users_notify = elgg_get_plugin_setting('add_users_notify', 'event_calendar'); + $site_guid = elgg_get_site_entity()->guid; foreach ($members as $user_guid) { add_entity_relationship($user_guid,'personal_event',$event_guid); + if ($event_calendar_add_users_notify == 'yes') { + $subject = elgg_echo('event_calendar:add_users_notify:subject'); + $user = get_user($user_guid); + $message = elgg_echo('event_calendar:add_users_notify:body',array($user->name,$event->title,$event->getURL())); + notify_user($user_guid, $site_guid, $subject, $message); + } } system_message(elgg_echo('event_calendar:manage_subscribers:success')); forward($event->getURL()); diff --git a/languages/en.php b/languages/en.php index d16085994..621387103 100644 --- a/languages/en.php +++ b/languages/en.php @@ -149,11 +149,11 @@ 'event_calendar:spots_label' => "Spots", 'event_calendar:spots_description' => "How many people are allowed to add this event to their personal calendars?", 'event_calendar:open' => "Open", - 'event_calendar:settings:add_users:title' => "Allow event creators to add their event to other personal calendars (requires autocomplete plugin).", + 'event_calendar:settings:add_users:title' => "Allow event creators and site admins to add their event to other personal calendars.", 'event_calendar:add_user_label' => "Add users", 'event_calendar:add_user_description' => "Add this event to personal calendars by typing two or more characters in the above text autocomplete field to select a user. " ."You can add multiple users by clicking the \"+\" link. (You must submit this form to actually add the event to the calendars.)", - 'event_calendar:settings:add_users_notify:title' => "Notify users who have had an event added to their personal calendar by an admin or event creator.", + 'event_calendar:settings:add_users_notify:title' => "Email users who have had an event added to their personal calendar by an admin or event creator.", 'event_calendar:add_users_notify:subject' => "A new event has been added to your personal calendar", 'event_calendar:add_users_notify:body' => "%s,\n\nThe \"%s\" event has been added to your calendar.\n\nYou can view it here: \n\n%s\n", @@ -217,6 +217,7 @@ You can manage calendar requests for this event here: 'event_calendar:ical_auth_file_name:title' => "Location of iCal authentication file on local file system (experimental - not needed for public feeds)", 'event_calendar:owner:permissions_error' => "You do not have permission to view that page.", + 'event_calendar:feature_not_activated' => "This feature is not activated", 'event_calendar:show_all' => "Show all", 'event_calendar:show_open' => "Show open", @@ -250,6 +251,7 @@ You can manage calendar requests for this event here: 'river:update:object:event_calendar' => "%s updated the event %s", 'river:create:object:event_calendar' => "%s added the event %s", + 'river:comment:object:event_calendar' => '%s commented on the event %s', 'event_calendar:river:created' => "%s added", 'event_calendar:river:updated' => "%s updated", 'event_calendar:river:annotated1' => "%s added", diff --git a/models/model.php b/models/model.php index 65a9215af..90f20fba3 100644 --- a/models/model.php +++ b/models/model.php @@ -1548,6 +1548,13 @@ function event_calendar_get_page_content_manage_users($event_guid) { $event = get_entity($event_guid); $limit = 10; $offset = get_input('offset', 0); + + $event_calendar_add_users = elgg_get_plugin_setting('add_users', 'event_calendar'); + if ($event_calendar_add_users != 'yes') { + register_error(elgg_echo('event_calendar:feature_not_activated')); + forward(); + exit; + } if (!elgg_instanceof($event, 'object', 'event_calendar')) { $content = elgg_echo('event_calendar:error_nosuchevent'); @@ -1658,10 +1665,13 @@ function event_calendar_handle_menu($event_guid) { elgg_register_menu_item('page', $item); //add_submenu_item(elgg_echo('event_calendar:review_requests_title'), $CONFIG->wwwroot . "pg/event_calendar/review_requests/".$event_id, '0eventcalendaradmin'); } - $url = "event_calendar/manage_users/$event_guid"; - $item = new ElggMenuItem('event-calendar-1manage_users', elgg_echo('event_calendar:manage_users:breadcrumb'), $url); - $item->setSection('event_calendar'); - elgg_register_menu_item('page', $item); + $event_calendar_add_users = elgg_get_plugin_setting('add_users', 'event_calendar'); + if ($event_calendar_add_users == 'yes') { + $url = "event_calendar/manage_users/$event_guid"; + $item = new ElggMenuItem('event-calendar-1manage_users', elgg_echo('event_calendar:manage_users:breadcrumb'), $url); + $item->setSection('event_calendar'); + elgg_register_menu_item('page', $item); + } } function event_calendar_get_secret_key() { $key_file_name = elgg_get_plugin_setting('ical_auth_file_name','event_calendar'); diff --git a/views/default/plugins/event_calendar/settings.php b/views/default/plugins/event_calendar/settings.php new file mode 100644 index 000000000..54ff5c1c3 --- /dev/null +++ b/views/default/plugins/event_calendar/settings.php @@ -0,0 +1,373 @@ +<?php +$yn_options = array(elgg_echo('event_calendar:settings:yes')=>'yes', + elgg_echo('event_calendar:settings:no')=>'no', +); + +$access_options = array( ACCESS_PRIVATE => elgg_echo("PRIVATE"), + ACCESS_LOGGED_IN => elgg_echo("LOGGED_IN"), + ACCESS_PUBLIC => elgg_echo("PUBLIC")); + +$listing_options = array(elgg_echo('event_calendar:settings:paged')=>'paged', + elgg_echo('event_calendar:settings:agenda')=>'agenda', + elgg_echo('event_calendar:settings:month')=>'month', +); + +$body = ''; + +$event_calendar_hide_access = elgg_get_plugin_setting('hide_access', 'event_calendar'); +if (!$event_calendar_hide_access) { + $event_calendar_hide_access = 'no'; +} + +$body .= elgg_echo('event_calendar:settings:hide_access:title'); +$body .= '<br />'; +$body .= elgg_view('input/radio',array('name'=>'params[hide_access]','value'=>$event_calendar_hide_access,'options'=>$yn_options)); + +$body .= '<br />'; + +$event_calendar_default_access = elgg_get_plugin_setting('default_access', 'event_calendar'); +if (!$event_calendar_default_access) { + $event_calendar_default_access = ACCESS_LOGGED_IN; +} + +$body .= elgg_echo('event_calendar:settings:default_access:title'); +$body .= '<br />'; +$body .= elgg_view('input/pulldown',array('name'=>'params[default_access]','value'=>$event_calendar_default_access,'options_values'=>$access_options)); + +$body .= '<br /><br />'; + +$event_calendar_hide_end = elgg_get_plugin_setting('hide_end', 'event_calendar'); +if (!$event_calendar_hide_end) { + $event_calendar_hide_end = 'no'; +} + +$body .= elgg_echo('event_calendar:settings:hide_end:title'); +$body .= '<br />'; +$body .= elgg_view('input/radio',array('name'=>'params[hide_end]','value'=>$event_calendar_hide_end,'options'=>$yn_options)); + +$body .= '<br />'; + +$event_calendar_listing_format = elgg_get_plugin_setting('listing_format', 'event_calendar'); +if (!$event_calendar_listing_format) { + $event_calendar_listing_format = 'month'; +} + +$body .= elgg_echo('event_calendar:settings:listing_format:title'); +$body .= '<br />'; +$body .= elgg_view('input/radio',array('name'=>'params[listing_format]','value'=>$event_calendar_listing_format,'options'=>$listing_options)); + +$body .= '<br />'; + +$event_calendar_times = elgg_get_plugin_setting('times', 'event_calendar'); +if (!$event_calendar_times) { + $event_calendar_times = 'no'; +} + +$body .= elgg_echo('event_calendar:settings:times:title'); +$body .= '<br />'; +$body .= elgg_view('input/radio',array('name'=>'params[times]','value'=>$event_calendar_times,'options'=>$yn_options)); + +$body .= '<br />'; + +$event_calendar_autopersonal = elgg_get_plugin_setting('autopersonal', 'event_calendar'); +if (!$event_calendar_autopersonal) { + $event_calendar_autopersonal = 'yes'; +} + +$body .= elgg_echo('event_calendar:settings:autopersonal:title'); +$body .= '<br />'; +$body .= elgg_view('input/radio',array('name'=>'params[autopersonal]','value'=>$event_calendar_autopersonal,'options'=>$yn_options)); + +$body .= '<br />'; + +$event_calendar_autogroup = elgg_get_plugin_setting('autogroup', 'event_calendar'); +if (!$event_calendar_autogroup) { + $event_calendar_autogroup = 'no'; +} + +$body .= elgg_echo('event_calendar:settings:autogroup:title'); +$body .= '<br />'; +$body .= elgg_view('input/radio',array('name'=>'params[autogroup]','value'=>$event_calendar_autogroup,'options'=>$yn_options)); + +$body .= '<br />'; + +$event_calendar_add_to_group_calendar = elgg_get_plugin_setting('add_to_group_calendar', 'event_calendar'); +if (!$event_calendar_add_to_group_calendar) { + $event_calendar_add_to_group_calendar = 'no'; +} + +$body .= elgg_echo('event_calendar:settings:add_to_group_calendar:title'); +$body .= '<br />'; +$body .= elgg_view('input/radio',array('name'=>'params[add_to_group_calendar]','value'=>$event_calendar_add_to_group_calendar,'options'=>$yn_options)); + +$body .= '<br />'; + +// agenda view is now handled in the listing area + +/*$event_calendar_agenda_view = get_plugin_setting('agenda_view', 'event_calendar'); +if (!$event_calendar_agenda_view) { + $event_calendar_agenda_view = 'no'; +} + +$body .= elgg_echo('event_calendar:settings:agenda_view:title'); +$body .= '<br />'; +$body .= elgg_view('input/radio',array('name'=>'params[agenda_view]','value'=>$event_calendar_agenda_view,'options'=>$yn_options)); + +$body .= '<br />';*/ + +$event_calendar_venue_view = elgg_get_plugin_setting('venue_view', 'event_calendar'); +if (!$event_calendar_venue_view) { + $event_calendar_venue_view = 'no'; +} + +$body .= elgg_echo('event_calendar:settings:venue_view:title'); +$body .= '<br />'; +$body .= elgg_view('input/radio',array('name'=>'params[venue_view]','value'=>$event_calendar_venue_view,'options'=>$yn_options)); + +$body .= '<br />'; + +$options = array(elgg_echo('event_calendar:settings:no')=>'no', + elgg_echo('event_calendar:settings:site_calendar:admin')=>'admin', + elgg_echo('event_calendar:settings:site_calendar:loggedin')=>'loggedin', +); + +$event_calendar_site_calendar = elgg_get_plugin_setting('site_calendar', 'event_calendar'); +if (!$event_calendar_site_calendar) { + $event_calendar_site_calendar = 'admin'; +} + +$body .= elgg_echo('event_calendar:settings:site_calendar:title').'<br />'; +$body .= elgg_view('input/radio',array('name'=>'params[site_calendar]','value'=>$event_calendar_site_calendar,'options'=>$options)); + +$body .= '<br />'; + +$options = array(elgg_echo('event_calendar:settings:no')=>'no', + elgg_echo('event_calendar:settings:group_calendar:admin')=>'admin', + elgg_echo('event_calendar:settings:group_calendar:members')=>'members', +); + +$event_calendar_group_calendar = elgg_get_plugin_setting('group_calendar', 'event_calendar'); +if (!$event_calendar_group_calendar) { + $event_calendar_group_calendar = 'members'; +} + +$body .= elgg_echo('event_calendar:settings:group_calendar:title').'<br />'; +$body .= elgg_view('input/radio',array('name'=>'params[group_calendar]','value'=>$event_calendar_group_calendar,'options'=>$options)); + +$body .= '<br />'; + +$options = array(elgg_echo('event_calendar:settings:group_default:yes')=>'yes', + elgg_echo('event_calendar:settings:group_default:no')=>'no', +); + +$event_calendar_group_default = elgg_get_plugin_setting('group_default', 'event_calendar'); +if (!$event_calendar_group_default) { + $event_calendar_group_default = 'yes'; +} + +$body .= elgg_echo('event_calendar:settings:group_default:title'); +$body .= '<br />'; +$body .= elgg_view('input/radio',array('name'=>'params[group_default]','value'=>$event_calendar_group_default,'options'=>$options)); + +$body .= '<br />'; + +$event_calendar_group_always_display = elgg_get_plugin_setting('group_always_display', 'event_calendar'); +if (!$event_calendar_group_always_display) { + $event_calendar_group_always_display = 'no'; +} + +$body .= elgg_echo('event_calendar:settings:group_always_display:title'); +$body .= '<br />'; +$body .= elgg_view('input/radio',array('name'=>'params[group_always_display]','value'=>$event_calendar_group_always_display,'options'=>$yn_options)); + +$body .= '<br />'; + +// There does not seem to be a way to determine where the group calendar box will appear in Elgg 1.8 + +/*$options = array(elgg_echo('event_calendar:settings:group_profile_display_option:left')=>'left', + elgg_echo('event_calendar:settings:group_profile_display_option:right')=>'right', + elgg_echo('event_calendar:settings:group_profile_display_option:none')=>'none', +); + +$event_calendar_group_profile_display = elgg_get_plugin_setting('group_profile_display', 'event_calendar'); +if (!$event_calendar_group_profile_display) { + $event_calendar_group_profile_display = 'right'; +} + +$body .= elgg_echo('event_calendar:settings:group_profile_display:title').'<br />'; +$body .= elgg_view('input/radio',array('name'=>'params[group_profile_display]','value'=>$event_calendar_group_profile_display,'options'=>$options)); + +$body .= '<br />';*/ + +$event_calendar_add_users = elgg_get_plugin_setting('add_users', 'event_calendar'); +if (!$event_calendar_add_users) { + $event_calendar_add_users = 'no'; +} + +$body .= elgg_echo('event_calendar:settings:add_users:title'); +$body .= '<br />'; +$body .= elgg_view('input/radio',array('name'=>'params[add_users]','value'=>$event_calendar_add_users,'options'=>$yn_options)); + +$body .= '<br />'; + +$event_calendar_add_users_notify = elgg_get_plugin_setting('add_users_notify', 'event_calendar'); +if (!$event_calendar_add_users_notify) { + $event_calendar_add_users_notify = 'no'; +} + +$body .= elgg_echo('event_calendar:settings:add_users_notify:title'); +$body .= '<br />'; +$body .= elgg_view('input/radio',array('name'=>'params[add_users_notify]','value'=>$event_calendar_add_users_notify,'options'=>$yn_options)); + +$body .= '<br />'; + +$event_calendar_personal_manage = elgg_get_plugin_setting('personal_manage', 'event_calendar'); +if (!$event_calendar_personal_manage) { + $event_calendar_personal_manage = 'yes'; +} + +$body .= elgg_echo('event_calendar:settings:personal_manage:title'); +$body .= '<br />'; +$body .= elgg_view('input/radio',array('name'=>'params[personal_manage]','value'=>$event_calendar_personal_manage,'options'=>$yn_options)); + +$body .= '<br />'; + +$event_calendar_spots_display = elgg_get_plugin_setting('spots_display', 'event_calendar'); +if (!$event_calendar_spots_display) { + $event_calendar_spots_display = 'no'; +} + +$body .= elgg_echo('event_calendar:settings:spots_display:title'); +$body .= '<br />'; +$body .= elgg_view('input/radio',array('name'=>'params[spots_display]','value'=>$event_calendar_spots_display,'options'=>$yn_options)); + +$body .= '<br />'; + +$event_calendar_no_collisions = elgg_get_plugin_setting('no_collisions', 'event_calendar'); +if (!$event_calendar_no_collisions) { + $event_calendar_no_collisions = 'no'; +} + +$body .= elgg_echo('event_calendar:settings:no_collisions:title'); +$body .= '<br />'; +$body .= elgg_view('input/radio',array('name'=>'params[no_collisions]','value'=>$event_calendar_no_collisions,'options'=>$yn_options)); + +$body .= '<br />'; + +$event_calendar_collision_length = elgg_get_plugin_setting('collision_length', 'event_calendar'); +if (!$event_calendar_collision_length) { + $event_calendar_collision_length = '3600'; +} + +$body .= elgg_echo('event_calendar:settings:collision_length:title'); +$body .= '<br />'; +$body .= elgg_view('input/text',array('name'=>'params[collision_length]','value'=>$event_calendar_collision_length)); + +$body .= '<br /><br />'; + +$event_calendar_region_display = elgg_get_plugin_setting('region_display', 'event_calendar'); +if (!$event_calendar_region_display) { + $event_calendar_region_display = 'no'; +} + +$body .= elgg_echo('event_calendar:settings:region_display:title'); +$body .= '<br />'; +$body .= elgg_view('input/radio',array('name'=>'params[region_display]','value'=>$event_calendar_region_display,'options'=>$yn_options)); + +$body .= '<br />'; + +$event_calendar_region_list = elgg_get_plugin_setting('region_list', 'event_calendar'); +if (!$event_calendar_region_list) { + $event_calendar_region_list = ''; +} + +$body .= elgg_echo('event_calendar:settings:region_list:title'); +$body .= '<br />'; +$body .= elgg_view('event_calendar/input/longtext',array('name'=>'params[region_list]','value'=>$event_calendar_region_list)); + +$body .= '<br />'; + +$event_calendar_region_list_handles = elgg_get_plugin_setting('region_list_handles', 'event_calendar'); +if (!$event_calendar_region_list_handles) { + $event_calendar_region_list_handles = 'no'; +} + +$body .= elgg_echo('event_calendar:settings:region_list_handles:title'); +$body .= '<br />'; +$body .= elgg_view('input/radio',array('name'=>'params[region_list_handles]','value'=>$event_calendar_region_list_handles,'options'=>$yn_options)); + +$body .= '<br />'; + +$event_calendar_type_display = elgg_get_plugin_setting('type_display', 'event_calendar'); +if (!$event_calendar_type_display) { + $event_calendar_type_display = 'no'; +} + +$body .= elgg_echo('event_calendar:settings:type_display:title'); +$body .= '<br />'; +$body .= elgg_view('input/radio',array('name'=>'params[type_display]','value'=>$event_calendar_type_display,'options'=>$yn_options)); + +$body .= '<br />'; + +$event_calendar_type_list = elgg_get_plugin_setting('type_list', 'event_calendar'); +if (!$event_calendar_type_list) { + $event_calendar_type_list = ''; +} + +$body .= elgg_echo('event_calendar:settings:type_list:title'); +$body .= '<br />'; +$body .= elgg_view('event_calendar/input/longtext',array('name'=>'params[type_list]','value'=>$event_calendar_type_list)); + +$body .= '<br />'; + +$event_calendar_type_list_handles = elgg_get_plugin_setting('type_list_handles', 'event_calendar'); +if (!$event_calendar_type_list_handles) { + $event_calendar_type_list_handles = 'no'; +} + +$body .= elgg_echo('event_calendar:settings:type_list_handles:title'); +$body .= '<br />'; +$body .= elgg_view('input/radio',array('name'=>'params[type_list_handles]','value'=>$event_calendar_type_list_handles,'options'=>$yn_options)); + +$body .= '<br />'; + +$event_calendar_first_date = elgg_get_plugin_setting('first_date', 'event_calendar'); +if (!$event_calendar_first_date) { + $event_calendar_first_date = ''; +} + +$body .= elgg_echo('event_calendar:settings:first_date:title'); +$body .= '<br />'; +$body .= elgg_view('input/text',array('name'=>'params[first_date]','value'=>$event_calendar_first_date)); + +$body .= '<br /><br />'; + +$event_calendar_last_date = elgg_get_plugin_setting('last_date', 'event_calendar'); +if (!$event_calendar_last_date) { + $event_calendar_last_date = ''; +} + +$body .= elgg_echo('event_calendar:settings:last_date:title'); +$body .= '<br />'; +$body .= elgg_view('input/text',array('name'=>'params[last_date]','value'=>$event_calendar_last_date)); + +$body .= '<br /><br />'; + +$event_calendar_more_required = elgg_get_plugin_setting('more_required', 'event_calendar'); +if (!$event_calendar_more_required) { + $event_calendar_more_required = 'no'; +} + +$body .= elgg_echo('event_calendar:settings:more_required:title'); +$body .= '<br />'; +$body .= elgg_view('input/radio',array('name'=>'params[more_required]','value'=>$event_calendar_more_required,'options'=>$yn_options)); + +$body .= '<br />'; + +$ical_auth_file_name = elgg_get_plugin_setting('ical_auth_file_name', 'event_calendar'); + +$body .= elgg_echo('event_calendar:ical_auth_file_name:title'); +$body .= '<br />'; +$body .= elgg_view('input/text',array('name'=>'params[ical_auth_file_name]','value'=>$ical_auth_file_name, 'class'=>'event-calendar-ical-auth-setting')); + +echo $body; diff --git a/views/default/settings/event_calendar/edit.php b/views/default/settings/event_calendar/edit.php deleted file mode 100644 index 54ff5c1c3..000000000 --- a/views/default/settings/event_calendar/edit.php +++ /dev/null @@ -1,373 +0,0 @@ -<?php -$yn_options = array(elgg_echo('event_calendar:settings:yes')=>'yes', - elgg_echo('event_calendar:settings:no')=>'no', -); - -$access_options = array( ACCESS_PRIVATE => elgg_echo("PRIVATE"), - ACCESS_LOGGED_IN => elgg_echo("LOGGED_IN"), - ACCESS_PUBLIC => elgg_echo("PUBLIC")); - -$listing_options = array(elgg_echo('event_calendar:settings:paged')=>'paged', - elgg_echo('event_calendar:settings:agenda')=>'agenda', - elgg_echo('event_calendar:settings:month')=>'month', -); - -$body = ''; - -$event_calendar_hide_access = elgg_get_plugin_setting('hide_access', 'event_calendar'); -if (!$event_calendar_hide_access) { - $event_calendar_hide_access = 'no'; -} - -$body .= elgg_echo('event_calendar:settings:hide_access:title'); -$body .= '<br />'; -$body .= elgg_view('input/radio',array('name'=>'params[hide_access]','value'=>$event_calendar_hide_access,'options'=>$yn_options)); - -$body .= '<br />'; - -$event_calendar_default_access = elgg_get_plugin_setting('default_access', 'event_calendar'); -if (!$event_calendar_default_access) { - $event_calendar_default_access = ACCESS_LOGGED_IN; -} - -$body .= elgg_echo('event_calendar:settings:default_access:title'); -$body .= '<br />'; -$body .= elgg_view('input/pulldown',array('name'=>'params[default_access]','value'=>$event_calendar_default_access,'options_values'=>$access_options)); - -$body .= '<br /><br />'; - -$event_calendar_hide_end = elgg_get_plugin_setting('hide_end', 'event_calendar'); -if (!$event_calendar_hide_end) { - $event_calendar_hide_end = 'no'; -} - -$body .= elgg_echo('event_calendar:settings:hide_end:title'); -$body .= '<br />'; -$body .= elgg_view('input/radio',array('name'=>'params[hide_end]','value'=>$event_calendar_hide_end,'options'=>$yn_options)); - -$body .= '<br />'; - -$event_calendar_listing_format = elgg_get_plugin_setting('listing_format', 'event_calendar'); -if (!$event_calendar_listing_format) { - $event_calendar_listing_format = 'month'; -} - -$body .= elgg_echo('event_calendar:settings:listing_format:title'); -$body .= '<br />'; -$body .= elgg_view('input/radio',array('name'=>'params[listing_format]','value'=>$event_calendar_listing_format,'options'=>$listing_options)); - -$body .= '<br />'; - -$event_calendar_times = elgg_get_plugin_setting('times', 'event_calendar'); -if (!$event_calendar_times) { - $event_calendar_times = 'no'; -} - -$body .= elgg_echo('event_calendar:settings:times:title'); -$body .= '<br />'; -$body .= elgg_view('input/radio',array('name'=>'params[times]','value'=>$event_calendar_times,'options'=>$yn_options)); - -$body .= '<br />'; - -$event_calendar_autopersonal = elgg_get_plugin_setting('autopersonal', 'event_calendar'); -if (!$event_calendar_autopersonal) { - $event_calendar_autopersonal = 'yes'; -} - -$body .= elgg_echo('event_calendar:settings:autopersonal:title'); -$body .= '<br />'; -$body .= elgg_view('input/radio',array('name'=>'params[autopersonal]','value'=>$event_calendar_autopersonal,'options'=>$yn_options)); - -$body .= '<br />'; - -$event_calendar_autogroup = elgg_get_plugin_setting('autogroup', 'event_calendar'); -if (!$event_calendar_autogroup) { - $event_calendar_autogroup = 'no'; -} - -$body .= elgg_echo('event_calendar:settings:autogroup:title'); -$body .= '<br />'; -$body .= elgg_view('input/radio',array('name'=>'params[autogroup]','value'=>$event_calendar_autogroup,'options'=>$yn_options)); - -$body .= '<br />'; - -$event_calendar_add_to_group_calendar = elgg_get_plugin_setting('add_to_group_calendar', 'event_calendar'); -if (!$event_calendar_add_to_group_calendar) { - $event_calendar_add_to_group_calendar = 'no'; -} - -$body .= elgg_echo('event_calendar:settings:add_to_group_calendar:title'); -$body .= '<br />'; -$body .= elgg_view('input/radio',array('name'=>'params[add_to_group_calendar]','value'=>$event_calendar_add_to_group_calendar,'options'=>$yn_options)); - -$body .= '<br />'; - -// agenda view is now handled in the listing area - -/*$event_calendar_agenda_view = get_plugin_setting('agenda_view', 'event_calendar'); -if (!$event_calendar_agenda_view) { - $event_calendar_agenda_view = 'no'; -} - -$body .= elgg_echo('event_calendar:settings:agenda_view:title'); -$body .= '<br />'; -$body .= elgg_view('input/radio',array('name'=>'params[agenda_view]','value'=>$event_calendar_agenda_view,'options'=>$yn_options)); - -$body .= '<br />';*/ - -$event_calendar_venue_view = elgg_get_plugin_setting('venue_view', 'event_calendar'); -if (!$event_calendar_venue_view) { - $event_calendar_venue_view = 'no'; -} - -$body .= elgg_echo('event_calendar:settings:venue_view:title'); -$body .= '<br />'; -$body .= elgg_view('input/radio',array('name'=>'params[venue_view]','value'=>$event_calendar_venue_view,'options'=>$yn_options)); - -$body .= '<br />'; - -$options = array(elgg_echo('event_calendar:settings:no')=>'no', - elgg_echo('event_calendar:settings:site_calendar:admin')=>'admin', - elgg_echo('event_calendar:settings:site_calendar:loggedin')=>'loggedin', -); - -$event_calendar_site_calendar = elgg_get_plugin_setting('site_calendar', 'event_calendar'); -if (!$event_calendar_site_calendar) { - $event_calendar_site_calendar = 'admin'; -} - -$body .= elgg_echo('event_calendar:settings:site_calendar:title').'<br />'; -$body .= elgg_view('input/radio',array('name'=>'params[site_calendar]','value'=>$event_calendar_site_calendar,'options'=>$options)); - -$body .= '<br />'; - -$options = array(elgg_echo('event_calendar:settings:no')=>'no', - elgg_echo('event_calendar:settings:group_calendar:admin')=>'admin', - elgg_echo('event_calendar:settings:group_calendar:members')=>'members', -); - -$event_calendar_group_calendar = elgg_get_plugin_setting('group_calendar', 'event_calendar'); -if (!$event_calendar_group_calendar) { - $event_calendar_group_calendar = 'members'; -} - -$body .= elgg_echo('event_calendar:settings:group_calendar:title').'<br />'; -$body .= elgg_view('input/radio',array('name'=>'params[group_calendar]','value'=>$event_calendar_group_calendar,'options'=>$options)); - -$body .= '<br />'; - -$options = array(elgg_echo('event_calendar:settings:group_default:yes')=>'yes', - elgg_echo('event_calendar:settings:group_default:no')=>'no', -); - -$event_calendar_group_default = elgg_get_plugin_setting('group_default', 'event_calendar'); -if (!$event_calendar_group_default) { - $event_calendar_group_default = 'yes'; -} - -$body .= elgg_echo('event_calendar:settings:group_default:title'); -$body .= '<br />'; -$body .= elgg_view('input/radio',array('name'=>'params[group_default]','value'=>$event_calendar_group_default,'options'=>$options)); - -$body .= '<br />'; - -$event_calendar_group_always_display = elgg_get_plugin_setting('group_always_display', 'event_calendar'); -if (!$event_calendar_group_always_display) { - $event_calendar_group_always_display = 'no'; -} - -$body .= elgg_echo('event_calendar:settings:group_always_display:title'); -$body .= '<br />'; -$body .= elgg_view('input/radio',array('name'=>'params[group_always_display]','value'=>$event_calendar_group_always_display,'options'=>$yn_options)); - -$body .= '<br />'; - -// There does not seem to be a way to determine where the group calendar box will appear in Elgg 1.8 - -/*$options = array(elgg_echo('event_calendar:settings:group_profile_display_option:left')=>'left', - elgg_echo('event_calendar:settings:group_profile_display_option:right')=>'right', - elgg_echo('event_calendar:settings:group_profile_display_option:none')=>'none', -); - -$event_calendar_group_profile_display = elgg_get_plugin_setting('group_profile_display', 'event_calendar'); -if (!$event_calendar_group_profile_display) { - $event_calendar_group_profile_display = 'right'; -} - -$body .= elgg_echo('event_calendar:settings:group_profile_display:title').'<br />'; -$body .= elgg_view('input/radio',array('name'=>'params[group_profile_display]','value'=>$event_calendar_group_profile_display,'options'=>$options)); - -$body .= '<br />';*/ - -$event_calendar_add_users = elgg_get_plugin_setting('add_users', 'event_calendar'); -if (!$event_calendar_add_users) { - $event_calendar_add_users = 'no'; -} - -$body .= elgg_echo('event_calendar:settings:add_users:title'); -$body .= '<br />'; -$body .= elgg_view('input/radio',array('name'=>'params[add_users]','value'=>$event_calendar_add_users,'options'=>$yn_options)); - -$body .= '<br />'; - -$event_calendar_add_users_notify = elgg_get_plugin_setting('add_users_notify', 'event_calendar'); -if (!$event_calendar_add_users_notify) { - $event_calendar_add_users_notify = 'no'; -} - -$body .= elgg_echo('event_calendar:settings:add_users_notify:title'); -$body .= '<br />'; -$body .= elgg_view('input/radio',array('name'=>'params[add_users_notify]','value'=>$event_calendar_add_users_notify,'options'=>$yn_options)); - -$body .= '<br />'; - -$event_calendar_personal_manage = elgg_get_plugin_setting('personal_manage', 'event_calendar'); -if (!$event_calendar_personal_manage) { - $event_calendar_personal_manage = 'yes'; -} - -$body .= elgg_echo('event_calendar:settings:personal_manage:title'); -$body .= '<br />'; -$body .= elgg_view('input/radio',array('name'=>'params[personal_manage]','value'=>$event_calendar_personal_manage,'options'=>$yn_options)); - -$body .= '<br />'; - -$event_calendar_spots_display = elgg_get_plugin_setting('spots_display', 'event_calendar'); -if (!$event_calendar_spots_display) { - $event_calendar_spots_display = 'no'; -} - -$body .= elgg_echo('event_calendar:settings:spots_display:title'); -$body .= '<br />'; -$body .= elgg_view('input/radio',array('name'=>'params[spots_display]','value'=>$event_calendar_spots_display,'options'=>$yn_options)); - -$body .= '<br />'; - -$event_calendar_no_collisions = elgg_get_plugin_setting('no_collisions', 'event_calendar'); -if (!$event_calendar_no_collisions) { - $event_calendar_no_collisions = 'no'; -} - -$body .= elgg_echo('event_calendar:settings:no_collisions:title'); -$body .= '<br />'; -$body .= elgg_view('input/radio',array('name'=>'params[no_collisions]','value'=>$event_calendar_no_collisions,'options'=>$yn_options)); - -$body .= '<br />'; - -$event_calendar_collision_length = elgg_get_plugin_setting('collision_length', 'event_calendar'); -if (!$event_calendar_collision_length) { - $event_calendar_collision_length = '3600'; -} - -$body .= elgg_echo('event_calendar:settings:collision_length:title'); -$body .= '<br />'; -$body .= elgg_view('input/text',array('name'=>'params[collision_length]','value'=>$event_calendar_collision_length)); - -$body .= '<br /><br />'; - -$event_calendar_region_display = elgg_get_plugin_setting('region_display', 'event_calendar'); -if (!$event_calendar_region_display) { - $event_calendar_region_display = 'no'; -} - -$body .= elgg_echo('event_calendar:settings:region_display:title'); -$body .= '<br />'; -$body .= elgg_view('input/radio',array('name'=>'params[region_display]','value'=>$event_calendar_region_display,'options'=>$yn_options)); - -$body .= '<br />'; - -$event_calendar_region_list = elgg_get_plugin_setting('region_list', 'event_calendar'); -if (!$event_calendar_region_list) { - $event_calendar_region_list = ''; -} - -$body .= elgg_echo('event_calendar:settings:region_list:title'); -$body .= '<br />'; -$body .= elgg_view('event_calendar/input/longtext',array('name'=>'params[region_list]','value'=>$event_calendar_region_list)); - -$body .= '<br />'; - -$event_calendar_region_list_handles = elgg_get_plugin_setting('region_list_handles', 'event_calendar'); -if (!$event_calendar_region_list_handles) { - $event_calendar_region_list_handles = 'no'; -} - -$body .= elgg_echo('event_calendar:settings:region_list_handles:title'); -$body .= '<br />'; -$body .= elgg_view('input/radio',array('name'=>'params[region_list_handles]','value'=>$event_calendar_region_list_handles,'options'=>$yn_options)); - -$body .= '<br />'; - -$event_calendar_type_display = elgg_get_plugin_setting('type_display', 'event_calendar'); -if (!$event_calendar_type_display) { - $event_calendar_type_display = 'no'; -} - -$body .= elgg_echo('event_calendar:settings:type_display:title'); -$body .= '<br />'; -$body .= elgg_view('input/radio',array('name'=>'params[type_display]','value'=>$event_calendar_type_display,'options'=>$yn_options)); - -$body .= '<br />'; - -$event_calendar_type_list = elgg_get_plugin_setting('type_list', 'event_calendar'); -if (!$event_calendar_type_list) { - $event_calendar_type_list = ''; -} - -$body .= elgg_echo('event_calendar:settings:type_list:title'); -$body .= '<br />'; -$body .= elgg_view('event_calendar/input/longtext',array('name'=>'params[type_list]','value'=>$event_calendar_type_list)); - -$body .= '<br />'; - -$event_calendar_type_list_handles = elgg_get_plugin_setting('type_list_handles', 'event_calendar'); -if (!$event_calendar_type_list_handles) { - $event_calendar_type_list_handles = 'no'; -} - -$body .= elgg_echo('event_calendar:settings:type_list_handles:title'); -$body .= '<br />'; -$body .= elgg_view('input/radio',array('name'=>'params[type_list_handles]','value'=>$event_calendar_type_list_handles,'options'=>$yn_options)); - -$body .= '<br />'; - -$event_calendar_first_date = elgg_get_plugin_setting('first_date', 'event_calendar'); -if (!$event_calendar_first_date) { - $event_calendar_first_date = ''; -} - -$body .= elgg_echo('event_calendar:settings:first_date:title'); -$body .= '<br />'; -$body .= elgg_view('input/text',array('name'=>'params[first_date]','value'=>$event_calendar_first_date)); - -$body .= '<br /><br />'; - -$event_calendar_last_date = elgg_get_plugin_setting('last_date', 'event_calendar'); -if (!$event_calendar_last_date) { - $event_calendar_last_date = ''; -} - -$body .= elgg_echo('event_calendar:settings:last_date:title'); -$body .= '<br />'; -$body .= elgg_view('input/text',array('name'=>'params[last_date]','value'=>$event_calendar_last_date)); - -$body .= '<br /><br />'; - -$event_calendar_more_required = elgg_get_plugin_setting('more_required', 'event_calendar'); -if (!$event_calendar_more_required) { - $event_calendar_more_required = 'no'; -} - -$body .= elgg_echo('event_calendar:settings:more_required:title'); -$body .= '<br />'; -$body .= elgg_view('input/radio',array('name'=>'params[more_required]','value'=>$event_calendar_more_required,'options'=>$yn_options)); - -$body .= '<br />'; - -$ical_auth_file_name = elgg_get_plugin_setting('ical_auth_file_name', 'event_calendar'); - -$body .= elgg_echo('event_calendar:ical_auth_file_name:title'); -$body .= '<br />'; -$body .= elgg_view('input/text',array('name'=>'params[ical_auth_file_name]','value'=>$ical_auth_file_name, 'class'=>'event-calendar-ical-auth-setting')); - -echo $body; -- cgit v1.2.3 From a62fc25059fb7b67358b285b6d6f3a4a469f35bb Mon Sep 17 00:00:00 2001 From: Kevin Jardine <kevinjardine@yahoo.com> Date: Wed, 25 Jan 2012 11:48:15 +0100 Subject: removed calendar entity menu items if no user is logged in --- start.php | 54 ++++++++++++++++++++++++++++-------------------------- 1 file changed, 28 insertions(+), 26 deletions(-) diff --git a/start.php b/start.php index 5cfc9fd3a..607a3be7c 100644 --- a/start.php +++ b/start.php @@ -274,38 +274,40 @@ function event_calendar_entity_menu_setup($hook, $type, $return, $params) { return $return; } $user_guid = elgg_get_logged_in_user_guid(); - if (event_calendar_personal_can_manage($entity,$user_guid)) { - if (event_calendar_has_personal_event($entity->guid,$user_guid)) { - $options = array( - 'name' => 'personal_calendar', - 'text' => elgg_echo('event_calendar:remove_from_the_calendar_menu_text'), - 'title' => elgg_echo('event_calendar:remove_from_my_calendar'), - 'href' => elgg_add_action_tokens_to_url("action/event_calendar/remove_personal?guid={$entity->guid}"), - 'priority' => 150, - ); - $return[] = ElggMenuItem::factory($options); + if ($user_guid) { + if (event_calendar_personal_can_manage($entity,$user_guid)) { + if (event_calendar_has_personal_event($entity->guid,$user_guid)) { + $options = array( + 'name' => 'personal_calendar', + 'text' => elgg_echo('event_calendar:remove_from_the_calendar_menu_text'), + 'title' => elgg_echo('event_calendar:remove_from_my_calendar'), + 'href' => elgg_add_action_tokens_to_url("action/event_calendar/remove_personal?guid={$entity->guid}"), + 'priority' => 150, + ); + $return[] = ElggMenuItem::factory($options); + } else { + if (!event_calendar_is_full($entity->guid) && !event_calendar_has_collision($entity->guid,$user_guid)) { + $options = array( + 'name' => 'personal_calendar', + 'text' => elgg_echo('event_calendar:add_to_the_calendar_menu_text'), + 'title' => elgg_echo('event_calendar:add_to_my_calendar'), + 'href' => elgg_add_action_tokens_to_url("action/event_calendar/add_personal?guid={$entity->guid}"), + 'priority' => 150, + ); + $return[] = ElggMenuItem::factory($options); } + } } else { - if (!event_calendar_is_full($entity->guid) && !event_calendar_has_collision($entity->guid,$user_guid)) { + if (!event_calendar_has_personal_event($entity->guid,$user_guid) && !check_entity_relationship($user_guid, 'event_calendar_request', $entity->guid)) { $options = array( 'name' => 'personal_calendar', - 'text' => elgg_echo('event_calendar:add_to_the_calendar_menu_text'), - 'title' => elgg_echo('event_calendar:add_to_my_calendar'), - 'href' => elgg_add_action_tokens_to_url("action/event_calendar/add_personal?guid={$entity->guid}"), + 'text' => elgg_echo('event_calendar:make_request_title'), + 'title' => elgg_echo('event_calendar:make_request_title'), + 'href' => elgg_add_action_tokens_to_url("action/event_calendar/request_personal_calendar?guid={$entity->guid}"), 'priority' => 150, ); - $return[] = ElggMenuItem::factory($options); } + $return[] = ElggMenuItem::factory($options); + } } - } else { - if (!event_calendar_has_personal_event($entity->guid,$user_guid) && !check_entity_relationship($user_guid, 'event_calendar_request', $entity->guid)) { - $options = array( - 'name' => 'personal_calendar', - 'text' => elgg_echo('event_calendar:make_request_title'), - 'title' => elgg_echo('event_calendar:make_request_title'), - 'href' => elgg_add_action_tokens_to_url("action/event_calendar/request_personal_calendar?guid={$entity->guid}"), - 'priority' => 150, - ); - $return[] = ElggMenuItem::factory($options); - } } $count = event_calendar_get_users_for_event($entity->guid,0,0,true); -- cgit v1.2.3 From 2a3e34d1c5724b29a4f2404081f30b425fcdee50 Mon Sep 17 00:00:00 2001 From: Kevin Jardine <kevinjardine@yahoo.com> Date: Wed, 25 Jan 2012 12:10:45 +0100 Subject: more for add_users and add_users_notify features --- actions/event_calendar/manage_subscribers.php | 2 +- actions/event_calendar/toggle_personal_calendar.php | 9 +++++++++ views/default/forms/event_calendar/edit.php | 8 +++++--- 3 files changed, 15 insertions(+), 4 deletions(-) diff --git a/actions/event_calendar/manage_subscribers.php b/actions/event_calendar/manage_subscribers.php index d20c73cbd..079c3628f 100644 --- a/actions/event_calendar/manage_subscribers.php +++ b/actions/event_calendar/manage_subscribers.php @@ -15,7 +15,7 @@ if (($event_calendar_add_users == 'yes') && elgg_instanceof($event,'object','eve $subject = elgg_echo('event_calendar:add_users_notify:subject'); $user = get_user($user_guid); $message = elgg_echo('event_calendar:add_users_notify:body',array($user->name,$event->title,$event->getURL())); - notify_user($user_guid, $site_guid, $subject, $message); + notify_user($user_guid, $site_guid, $subject, $message, NULL, 'email'); } } system_message(elgg_echo('event_calendar:manage_subscribers:success')); diff --git a/actions/event_calendar/toggle_personal_calendar.php b/actions/event_calendar/toggle_personal_calendar.php index 9ad8d0a0e..8eb20e6b9 100644 --- a/actions/event_calendar/toggle_personal_calendar.php +++ b/actions/event_calendar/toggle_personal_calendar.php @@ -19,6 +19,15 @@ if (event_calendar_has_personal_event($event_guid,$user_guid)) { $response = array('success'=>TRUE, 'message' => $remove_response, 'button_text'=>$button_text); } else { if (event_calendar_add_personal_event($event_guid,$user_guid)) { + $event_calendar_add_users_notify = elgg_get_plugin_setting('add_users_notify', 'event_calendar'); + if ($event_calendar_add_users_notify == 'yes') { + $subject = elgg_echo('event_calendar:add_users_notify:subject'); + $user = get_user($user_guid); + $event = get_entity($event_guid); + $site_guid = elgg_get_site_entity()->guid; + $message = elgg_echo('event_calendar:add_users_notify:body',array($user->name,$event->title,$event->getURL())); + notify_user($user_guid, $site_guid, $subject, $message, NULL, 'email'); + } $button_text = elgg_echo('event_calendar:remove_from_the_calendar_button'); $response = array('success'=>TRUE, 'message' => $add_response, 'button_text'=>$button_text); } else { diff --git a/views/default/forms/event_calendar/edit.php b/views/default/forms/event_calendar/edit.php index 214a51f4e..a84a79407 100644 --- a/views/default/forms/event_calendar/edit.php +++ b/views/default/forms/event_calendar/edit.php @@ -6,7 +6,7 @@ $event_calendar_times = elgg_get_plugin_setting('times', 'event_calendar'); $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_calendar_spots_display = elgg_get_plugin_setting('spots_display', 'event_calendar'); -$event_calendar_add_users = elgg_get_plugin_setting('add_users', 'event_calendar'); +//$event_calendar_add_users = elgg_get_plugin_setting('add_users', 'event_calendar'); $event_calendar_hide_access = elgg_get_plugin_setting('hide_access', 'event_calendar'); $event_calendar_hide_end = elgg_get_plugin_setting('hide_end', 'event_calendar'); $event_calendar_more_required = elgg_get_plugin_setting('more_required', 'event_calendar'); @@ -143,12 +143,14 @@ if ($event_calendar_spots_display == 'yes') { $body .= '<p class="description">'.$prefix['spots'].elgg_echo('event_calendar:spots_description').'</p>'; } -if ($event_calendar_add_users == 'yes') { +// the following feature has been superceded by the manage subscribers feature + +/*if ($event_calendar_add_users == 'yes') { $body .= '<p><label>'.elgg_echo("event_calendar:add_user_label").'<br />'; $body .= elgg_view("input/adduser",array('name' => 'adduser','internalid' => 'do_adduser','width'=> 200, 'minChars'=>2)); $body .= '</label></p><br /><br />'; $body .= '<p class="description">'.elgg_echo('event_calendar:add_user_description').'</p>'; -} +}*/ $body .= '<p><label>'.elgg_echo("event_calendar:brief_description_label").'<br />'; $body .= elgg_view("input/text",array('name' => 'description','value'=>$brief_description)); -- cgit v1.2.3 From 3e1e4d60de443a067aeb18f2873f5e35b4a5f4e2 Mon Sep 17 00:00:00 2001 From: Kevin Jardine <kevinjardine@yahoo.com> Date: Fri, 27 Jan 2012 15:09:49 +0100 Subject: removed two deprecated function calls --- models/model.php | 27 +++++++++++++++++++++++---- 1 file changed, 23 insertions(+), 4 deletions(-) diff --git a/models/model.php b/models/model.php index 90f20fba3..ad0bde1a9 100644 --- a/models/model.php +++ b/models/model.php @@ -699,8 +699,9 @@ function event_calendar_has_personal_event($event_guid,$user_guid) { return TRUE; } else { // use old method for now - $annotations = get_annotations($event_guid, "object", "event_calendar", "personal_event", (int) $user_guid, $user_guid); - if ($annotations && count($annotations) > 0) { + $options = array('guid'=>$event_guid,'annotation_name' => 'personal_event', 'annotation_value' => $user_guid,'count'=>TRUE); + //$annotations = get_annotations($event_guid, "object", "event_calendar", "personal_event", (int) $user_guid, $user_guid); + if (elgg_get_annotations($options)) { return TRUE; } else { return FALSE; @@ -774,6 +775,9 @@ function event_calendar_get_personal_events_for_user($user_guid,$limit) { return array_slice($sorted,0,$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) { $options = array( 'type' => 'user', @@ -783,13 +787,28 @@ function event_calendar_get_users_for_event($event_guid,$limit,$offset,$is_count 'limit' => 0, ); if ($is_count) { - $count_old_way = count_annotations($event_guid, "object", "event_calendar", "personal_event"); + //$count_old_way = count_annotations($event_guid, "object", "event_calendar", "personal_event"); + $count_old_way = elgg_get_annotations(array( + 'guid'=>$event_guid, + 'type'=>"object", + 'subtype'=>"event_calendar", + 'annotation_name' => "personal_event", + 'count'=>TRUE) + ); $options ['count'] = TRUE; $count_new_way = elgg_get_entities_from_relationship($options); return $count_old_way + $count_new_way; } else { $users_old_way = array(); - $annotations = get_annotations($event_id, "object", "event_calendar", "personal_event", "", 0, $limit, $offset); + //$annotations = get_annotations($event_id, "object", "event_calendar", "personal_event", "", 0, $limit, $offset); + $annotations = elgg_get_annotations(array( + 'guid'=>$event_guid, + 'type'=>"object", + 'subtype'=>"event_calendar", + 'annotation_name' => "personal_event", + 'limit' => $limit, + 'offset' => $offset) + ); if ($annotations) { foreach($annotations as $annotation) { if (($user = get_entity($annotation->value)) && ($user instanceOf ElggUser)) { -- cgit v1.2.3 From c5ea58b3403c794f6e4de4e70f7802a89269bbb2 Mon Sep 17 00:00:00 2001 From: Kevin Jardine <kevinjardine@yahoo.com> Date: Tue, 31 Jan 2012 11:09:13 +0100 Subject: tentative fix for end of month/week bug --- models/model.php | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/models/model.php b/models/model.php index ad0bde1a9..7ef49ff25 100644 --- a/models/model.php +++ b/models/model.php @@ -1378,10 +1378,14 @@ function event_calendar_generate_listing_params($page_type,$container_guid,$orig $end_ts = strtotime($end_date)+$day-1; $subtitle = elgg_echo('event_calendar:day_label').': '.date('j F Y',strtotime($start_date)); } else if ($mode == "week") { - $end_ts = $start_ts + 6*$day; + // KJ - fix for end date bug + //$end_ts = $start_ts + 6*$day; + $end_ts = $start_ts + 7*$day; $subtitle = elgg_echo('event_calendar:week_label').': '.date('j F',$start_ts) . ' - '.date('j F Y',$end_ts); } else { - $end_ts = strtotime($end_date); + // KJ - fix for end date bug + //$end_ts = strtotime($end_date); + $end_ts = strtotime($end_date)+24*60*60-1; $subtitle = date('F Y',$start_ts); } } -- cgit v1.2.3 From 5aadcdd48153b4197c44bdacfc504ebd7db34c3f Mon Sep 17 00:00:00 2001 From: Kevin Jardine <kevinjardine@yahoo.com> Date: Tue, 31 Jan 2012 11:59:41 +0100 Subject: updated page handler --- start.php | 3 +++ 1 file changed, 3 insertions(+) diff --git a/start.php b/start.php index 607a3be7c..14c64b426 100644 --- a/start.php +++ b/start.php @@ -257,7 +257,10 @@ function event_calendar_page_handler($page) { gatekeeper(); echo event_calendar_get_page_content_review_requests($page[1]); break; + default: + return FALSE; } + return TRUE; } /** -- cgit v1.2.3 From e0e9ff33a7f5fc334af8127fc8680925ce967d14 Mon Sep 17 00:00:00 2001 From: Kevin Jardine <kevinjardine@yahoo.com> Date: Thu, 2 Feb 2012 16:19:37 +0100 Subject: added support for new personal calendar management options --- actions/event_calendar/add_personal.php | 2 +- actions/event_calendar/addtocalendar.php | 2 +- actions/event_calendar/killrequest.php | 2 +- languages/en.php | 14 ++++++-- models/model.php | 38 ++++++++++++++-------- start.php | 5 +-- views/default/forms/event_calendar/edit.php | 30 +++++++++++++++-- views/default/plugins/event_calendar/settings.php | 16 +++++++--- views/default/widgets/event_calendar/content.php | 39 +++++++++++++++++++++++ 9 files changed, 120 insertions(+), 28 deletions(-) create mode 100644 views/default/widgets/event_calendar/content.php diff --git a/actions/event_calendar/add_personal.php b/actions/event_calendar/add_personal.php index fd6f6cee2..ed4eb3092 100644 --- a/actions/event_calendar/add_personal.php +++ b/actions/event_calendar/add_personal.php @@ -14,4 +14,4 @@ if (elgg_instanceof($event,'object','event_calendar')) { } } -forward(REFERER); \ No newline at end of file +forward(REFERER); diff --git a/actions/event_calendar/addtocalendar.php b/actions/event_calendar/addtocalendar.php index e5b689d73..0144dfba1 100644 --- a/actions/event_calendar/addtocalendar.php +++ b/actions/event_calendar/addtocalendar.php @@ -11,7 +11,7 @@ $event = get_entity($event_guid); if (elgg_instanceof($event, 'object', 'event_calendar') && elgg_instanceof($user, 'user') - && event_calendar_personal_can_manage($event,$user_guid) + && $event->canEdit() && check_entity_relationship($user_guid, 'event_calendar_request', $event_guid)) { if (event_calendar_add_personal_event($event_guid,$user_guid)) { diff --git a/actions/event_calendar/killrequest.php b/actions/event_calendar/killrequest.php index b58e804cd..f4f3c3135 100644 --- a/actions/event_calendar/killrequest.php +++ b/actions/event_calendar/killrequest.php @@ -11,7 +11,7 @@ $event = get_entity($event_guid); if (elgg_instanceof($event, 'object', 'event_calendar') && elgg_instanceof($user, 'user') - && event_calendar_personal_can_manage($event,$user_guid) + && $event->canEdit() && check_entity_relationship($user_guid, 'event_calendar_request', $event_guid)) { remove_entity_relationship($user->guid, 'event_calendar_request', $event_guid); diff --git a/languages/en.php b/languages/en.php index 621387103..b3caefcf2 100644 --- a/languages/en.php +++ b/languages/en.php @@ -160,8 +160,11 @@ 'event_calendar:settings:region_list_handles:title' => "The region strings above are string handles. Use the Elgg translation system to resolve them.", 'event_calendar:settings:type_list_handles:title' => "The type strings above are string handles. Use the Elgg translation system to resolve them.", - 'event_calendar:settings:personal_manage:title' => "Allow users to add/remove any event they can see to/from their personal calendars. (If no, only admins and the event creator can add/remove them).", - + 'event_calendar:settings:personal_manage:title' => "Calendar permissions", + 'event_calendar:settings:personal_manage:description' => "Determines whether people can add events to their personal calendars (open), " + ."need to request the event creator to do so (closed), have no option at all (private), or allow event creators to determine this for each event (by event). " + ."Note if you set this to private you should probably activate the option above to allow event creators and site admins to " + ."add their events to other personal calendars.", 'event_calendar:strapline' => "Posted %s by %s", 'event_calendar:request_event_response' => "Your request to be added to this event has been sent.", @@ -242,6 +245,13 @@ You can manage calendar requests for this event here: 'event_calendar:manage_subscribers:success' => "Personal calendars updated.", 'event_calendar:manage_subscribers:error' => "Error: could not update personal calendars.", + 'event_calendar:personal_manage:open' => "open", + 'event_calendar:personal_manage:closed' => "closed", + 'event_calendar:personal_manage:private' => "private", + 'event_calendar:personal_manage:by_event' => "by event", + 'event_calendar:personal_manage:label' => "Calendar permission", + 'event_calendar:personal_manage:description' => "Determines whether people can add this event to their calendars (open), " + ."need to apply to do so (closed) or have no option at all (private - so only you or a site admin can add the event to calendars).", /** * Event calendar river diff --git a/models/model.php b/models/model.php index 7ef49ff25..66091ba67 100644 --- a/models/model.php +++ b/models/model.php @@ -31,6 +31,7 @@ function event_calendar_set_event_from_form($event_guid,$group_guid) { $event_calendar_spots_display = elgg_get_plugin_setting('spots_display', 'event_calendar'); $event_calendar_hide_end = elgg_get_plugin_setting('hide_end', 'event_calendar'); $event_calendar_more_required = elgg_get_plugin_setting('more_required', 'event_calendar'); + $event_calendar_personal_manage = elgg_get_plugin_setting('personal_manage', 'event_calendar'); if ($event_calendar_more_required == 'yes') { $required_fields = array('title','venue','start_date', @@ -116,6 +117,9 @@ function event_calendar_set_event_from_form($event_guid,$group_guid) { if ($event_calendar_type_display == 'yes') { $event->event_type = get_input('event_type'); } + if ($event_calendar_personal_manage == 'by_event') { + $event->personal_manage = get_input('personal_manage'); + } $event->fees = get_input('fees'); $event->contact = get_input('contact'); $event->organiser = get_input('organiser'); @@ -1078,23 +1082,29 @@ function event_calendar_view_entity_list($entities, $count, $offset, $limit, $fu return $html; } +// returns open, closed or private for the given event and user function event_calendar_personal_can_manage($event,$user_id) { - $authorised = FALSE; + $status = 'private'; $event_calendar_personal_manage = elgg_get_plugin_setting('personal_manage', 'event_calendar'); - if ($event_calendar_personal_manage != 'no') { - $authorised = TRUE; + if (!$event_calendar_personal_manage + || $event_calendar_personal_manage == 'open' + || $event_calendar_personal_manage == 'yes' + || (($event_calendar_personal_manage == 'by_event' && (!$event->personal_manage || ($event->personal_manage == 'open'))))) { + $status = 'open'; } else { + // in this case only admins or event owners can manage events on their personal calendars if(elgg_is_admin_logged_in()) { - $authorised = TRUE; - } else { - // load the event from the database - if ($event && ($event->owner_guid == $user_id)) { - $authorised = TRUE; - } + $status = 'open'; + } else if ($event && ($event->owner_guid == $user_id)) { + $status = 'open'; + } else if (($event_calendar_personal_manage == 'closed') + || ($event_calendar_personal_manage == 'no') + || (($event_calendar_personal_manage == 'by_event') && ($event->personal_manage == 'closed'))) { + $status = 'closed'; } } - return $authorised; + return $status; } function event_calendar_send_event_request($event,$user_guid) { @@ -1280,6 +1290,7 @@ function event_calendar_prepare_edit_form_vars($event = NULL) { 'contact' => NULL, 'organiser' => NULL, 'tags' => NULL, + 'personal_manage' => NULL, 'long_description' => NULL, 'access_id' => ACCESS_DEFAULT, 'group_guid' => NULL, @@ -1653,9 +1664,8 @@ function event_calendar_get_page_content_review_requests($event_guid) { } elgg_push_breadcrumb($event->title,$event->getURL()); elgg_push_breadcrumb(elgg_echo('event_calendar:review_requests_menu_title')); - $user_guid = elgg_get_logged_in_user_guid(); - if (event_calendar_personal_can_manage($event,$user_guid)) { + if ($event->canEdit()) { $requests = elgg_get_entities_from_relationship( array( 'relationship' => 'event_calendar_request', @@ -1680,8 +1690,10 @@ function event_calendar_get_page_content_review_requests($event_guid) { } function event_calendar_handle_menu($event_guid) { + $event = get_entity($event_guid); $event_calendar_personal_manage = elgg_get_plugin_setting('personal_manage', 'event_calendar'); - if ($event_calendar_personal_manage == 'no') { + if ((($event_calendar_personal_manage == 'by_event') && ($event->personal_manage == 'closed')) + || (($event_calendar_personal_manage == 'closed') || ($event_calendar_personal_manage == 'no'))) { $url = "event_calendar/review_requests/$event_guid"; $item = new ElggMenuItem('event-calendar-0review_requests', elgg_echo('event_calendar:review_requests_menu_title'), $url); $item->setSection('event_calendar'); diff --git a/start.php b/start.php index 14c64b426..21f79c9fa 100644 --- a/start.php +++ b/start.php @@ -278,7 +278,8 @@ function event_calendar_entity_menu_setup($hook, $type, $return, $params) { } $user_guid = elgg_get_logged_in_user_guid(); if ($user_guid) { - if (event_calendar_personal_can_manage($entity,$user_guid)) { + $calendar_status = event_calendar_personal_can_manage($entity,$user_guid); + if ($calendar_status == 'open') { if (event_calendar_has_personal_event($entity->guid,$user_guid)) { $options = array( 'name' => 'personal_calendar', @@ -299,7 +300,7 @@ function event_calendar_entity_menu_setup($hook, $type, $return, $params) { ); $return[] = ElggMenuItem::factory($options); } } - } else { + } else if ($calendar_status == 'closed') { if (!event_calendar_has_personal_event($entity->guid,$user_guid) && !check_entity_relationship($user_guid, 'event_calendar_request', $entity->guid)) { $options = array( 'name' => 'personal_calendar', diff --git a/views/default/forms/event_calendar/edit.php b/views/default/forms/event_calendar/edit.php index a84a79407..1830ef168 100644 --- a/views/default/forms/event_calendar/edit.php +++ b/views/default/forms/event_calendar/edit.php @@ -2,6 +2,12 @@ $event = $vars['event']; $fd = $vars['form_data']; +$personal_manage_options = array( + elgg_echo('event_calendar:personal_manage:open') => 'open', + elgg_echo('event_calendar:personal_manage:closed') => 'closed', + elgg_echo('event_calendar:personal_manage:private') => 'private', +); + $event_calendar_times = elgg_get_plugin_setting('times', 'event_calendar'); $event_calendar_region_display = elgg_get_plugin_setting('region_display', 'event_calendar'); $event_calendar_type_display = elgg_get_plugin_setting('type_display', 'event_calendar'); @@ -10,6 +16,7 @@ $event_calendar_spots_display = elgg_get_plugin_setting('spots_display', 'event_ $event_calendar_hide_access = elgg_get_plugin_setting('hide_access', 'event_calendar'); $event_calendar_hide_end = elgg_get_plugin_setting('hide_end', 'event_calendar'); $event_calendar_more_required = elgg_get_plugin_setting('more_required', 'event_calendar'); +$event_calendar_personal_manage = elgg_get_plugin_setting('personal_manage', 'event_calendar'); if ($event_calendar_more_required == 'yes') { $required_fields = array('title','venue','start_date','start_time', @@ -20,7 +27,8 @@ if ($event_calendar_more_required == 'yes') { } $all_fields = array('title','venue','start_time','start_date','end_time','end_date', 'brief_description','region','event_type','fees','contact','organiser','event_tags', - 'long_description','spots'); + 'long_description','spots','personal_manage'); + $prefix = array(); foreach ($all_fields as $fn) { if (in_array($fn,$required_fields)) { @@ -64,6 +72,12 @@ if ($event) { $start_time = $event->start_time; $end_time = $event->end_time; } + if ($event_calendar_personal_manage == 'by_event') { + $personal_manage = $event->personal_manage; + if (!$personal_manage) { + $personal_manage = 'open'; + } + } $event_action = 'manage_event'; $event_guid = $event->guid; } else { @@ -91,6 +105,9 @@ if ($event) { $start_time = $fd['start_time']; $end_time = $fd['end_time']; } + if ($event_calendar_personal_manage == 'by_event') { + $personal_manage = $fd['personal_manage']; + } $event_action = 'add_event'; $event_guid = 0; } @@ -175,7 +192,7 @@ if ($event_calendar_region_display == 'yes') { } } $body .= '<p><label>'.elgg_echo("event_calendar:region_label").'<br />'; - $body .= elgg_view("input/pulldown",array('name' => 'region','value'=>$region,'options_values'=>$options)); + $body .= elgg_view("input/dropdown",array('name' => 'region','value'=>$region,'options_values'=>$options)); $body .= '</label></p>'; $body .= '<p class="description">'.$prefix['region'].elgg_echo('event_calendar:region_description').'</p>'; } @@ -199,7 +216,7 @@ if ($event_calendar_type_display == 'yes') { } } $body .= '<p><label>'.elgg_echo("event_calendar:type_label").'<br />'; - $body .= elgg_view("input/pulldown",array('name' => 'event_type','value'=>$event_type,'options_values'=>$options)); + $body .= elgg_view("input/dropdown",array('name' => 'event_type','value'=>$event_type,'options_values'=>$options)); $body .= '</label></p>'; $body .= '<p class="description">'.$prefix['event_type'].elgg_echo('event_calendar:type_description').'</p>'; } @@ -220,6 +237,13 @@ $body .= elgg_view("input/text",array('name' => 'organiser','value'=>$organiser) $body .= '</label></p>'; $body .= '<p class="description">'.$prefix['organiser'].elgg_echo('event_calendar:organiser_description').'</p>'; +if ($event_calendar_personal_manage == 'by_event') { + $body .= '<p><label>'.elgg_echo('event_calendar:personal_manage:label').'<br />'; + $body .= elgg_view("input/radio",array('name' => 'personal_manage','value'=>$personal_manage,'options'=>$personal_manage_options)); + $body .= '</label></p>'; + $body .= '<p class="description">'.$prefix['personal_manage'].elgg_echo('event_calendar:personal_manage:description').'</p>'; +} + $body .= '<p><label>'.elgg_echo("event_calendar:event_tags_label").'<br />'; $body .= elgg_view("input/tags",array('name' => 'tags','value'=>$event_tags)); $body .= '</label></p>'; diff --git a/views/default/plugins/event_calendar/settings.php b/views/default/plugins/event_calendar/settings.php index 54ff5c1c3..963f64549 100644 --- a/views/default/plugins/event_calendar/settings.php +++ b/views/default/plugins/event_calendar/settings.php @@ -3,6 +3,13 @@ $yn_options = array(elgg_echo('event_calendar:settings:yes')=>'yes', elgg_echo('event_calendar:settings:no')=>'no', ); +$membership_options = array( + elgg_echo('event_calendar:personal_manage:open') => 'open' , + elgg_echo('event_calendar:personal_manage:closed') => 'closed', + elgg_echo('event_calendar:personal_manage:private') => 'private', + elgg_echo('event_calendar:personal_manage:by_event') => 'by_event', +); + $access_options = array( ACCESS_PRIVATE => elgg_echo("PRIVATE"), ACCESS_LOGGED_IN => elgg_echo("LOGGED_IN"), ACCESS_PUBLIC => elgg_echo("PUBLIC")); @@ -222,15 +229,14 @@ $body .= elgg_view('input/radio',array('name'=>'params[add_users_notify]','value $body .= '<br />'; $event_calendar_personal_manage = elgg_get_plugin_setting('personal_manage', 'event_calendar'); -if (!$event_calendar_personal_manage) { - $event_calendar_personal_manage = 'yes'; +if (!$event_calendar_personal_manage && $personal_manage == 'yes') { + $event_calendar_personal_manage = 'open'; } $body .= elgg_echo('event_calendar:settings:personal_manage:title'); $body .= '<br />'; -$body .= elgg_view('input/radio',array('name'=>'params[personal_manage]','value'=>$event_calendar_personal_manage,'options'=>$yn_options)); - -$body .= '<br />'; +$body .= elgg_view('input/radio',array('name'=>'params[personal_manage]','value'=>$event_calendar_personal_manage,'options'=>$membership_options)); +$body .= '<p>'.elgg_echo('event_calendar:settings:personal_manage:description').'</p>'; $event_calendar_spots_display = elgg_get_plugin_setting('spots_display', 'event_calendar'); if (!$event_calendar_spots_display) { diff --git a/views/default/widgets/event_calendar/content.php b/views/default/widgets/event_calendar/content.php new file mode 100644 index 000000000..329046cb0 --- /dev/null +++ b/views/default/widgets/event_calendar/content.php @@ -0,0 +1,39 @@ +<?php + +/** + * Elgg event calendar widget + * + * @package event_calendar + * @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.html GNU Public License version 2 + * @author Kevin Jardine <kevin@radagast.biz> + * @copyright Radagast Solutions 2008 + * @link http://radagast.biz/ + * + */ + + // Load event calendar model + elgg_load_library('elgg:event_calendar'); + + //the number of events to display + $num = (int) $vars['entity']->num_display; + if (!$num) + $num = 5; + + // Get the events + + $events = event_calendar_get_personal_events_for_user(elgg_get_page_owner_guid(),$num); + + // If there are any events to view, view them + if (is_array($events) && sizeof($events) > 0) { + + echo "<div id=\"widget_calendar\">"; + + foreach($events as $event) { + echo elgg_view("object/event_calendar",array('entity' => $event)); + } + + echo "</div>"; + + } + +?> \ No newline at end of file -- cgit v1.2.3 From 1150f289dfb488cc0aaf9f1ae56183e752226312 Mon Sep 17 00:00:00 2001 From: Kevin Jardine <kevinjardine@yahoo.com> Date: Tue, 13 Mar 2012 16:40:49 +0100 Subject: replaced deprecated friendly time, dates now stored properly in GMT and displayed in server time, added beginning of full calendar option --- languages/en.php | 3 + models/model.php | 12 +- start.php | 7 + .../default/event_calendar/full_calendar_view.php | 46 + views/default/event_calendar/input/date_local.php | 2 +- views/default/event_calendar/show_events.php | 6 +- views/default/event_calendar/strapline.php | 2 +- views/default/fullcalendar/css.php | 618 +++ views/default/fullcalendar/fullcalendar.print.css | 61 + views/default/input/datepicker_popup.php | 2 +- .../default/js/event_calendar/fullcalendar.min.js | 114 + views/default/js/event_calendar/fullcalendar.php | 5228 ++++++++++++++++++++ views/default/js/event_calendar/gcal.js | 112 + views/default/plugins/event_calendar/settings.php | 12 + 14 files changed, 6218 insertions(+), 7 deletions(-) create mode 100644 views/default/event_calendar/full_calendar_view.php create mode 100644 views/default/fullcalendar/css.php create mode 100644 views/default/fullcalendar/fullcalendar.print.css create mode 100644 views/default/js/event_calendar/fullcalendar.min.js create mode 100644 views/default/js/event_calendar/fullcalendar.php create mode 100644 views/default/js/event_calendar/gcal.js diff --git a/languages/en.php b/languages/en.php index b3caefcf2..d58e35523 100644 --- a/languages/en.php +++ b/languages/en.php @@ -135,6 +135,7 @@ 'event_calendar:settings:paged' => "paged", 'event_calendar:settings:agenda' => "agenda", 'event_calendar:settings:month' => "by month", + 'event_calendar:settings:full' => "full view", 'event_calendar:settings:listing_format:title' => "Event listing format", 'event_calendar:paged:column:date' => "Date", 'event_calendar:paged:column:time' => "Time", @@ -252,6 +253,8 @@ You can manage calendar requests for this event here: 'event_calendar:personal_manage:label' => "Calendar permission", 'event_calendar:personal_manage:description' => "Determines whether people can add this event to their calendars (open), " ."need to apply to do so (closed) or have no option at all (private - so only you or a site admin can add the event to calendars).", + + 'event_calendar:settings:full_calendar:title' => "Support full calendar", /** * Event calendar river diff --git a/models/model.php b/models/model.php index 66091ba67..76d2d7b61 100644 --- a/models/model.php +++ b/models/model.php @@ -78,7 +78,11 @@ function event_calendar_set_event_from_form($event_guid,$group_guid) { $event->title = get_input('title'); $event->description = get_input('description'); $event->venue = get_input('venue'); - $event->start_date = get_input('start_date'); + // convert start date from current server time to GMT + $start_date = get_input('start_date'); + $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',''); if ($event_calendar_times == 'yes') { @@ -881,6 +885,10 @@ function event_calendar_format_time($date,$time1,$time2='') { } } +function event_calender_get_gmt_from_server_time($server_time) { + $gmtime = $server_time - (int)substr(date('O'),0,3)*60*60; +} + function event_calendar_activated_for_group($group) { $group_calendar = elgg_get_plugin_setting('group_calendar', 'event_calendar'); $group_default = elgg_get_plugin_setting('group_default', 'event_calendar'); @@ -953,7 +961,7 @@ function event_calendar_get_formatted_full_items($event) { function event_calendar_get_formatted_time($event) { $date_format = 'j M Y'; - $event_calendar_times = elgg_get_plugin_setting('times', 'event_calendar'); + $event_calendar_times = elgg_get_plugin_setting('times', 'event_calendar') == 'yes'; $start_date = date($date_format,$event->start_date); if ((!$event->end_date) || ($event->end_date == $event->start_date)) { diff --git a/start.php b/start.php index 21f79c9fa..ca96624dc 100644 --- a/start.php +++ b/start.php @@ -62,6 +62,13 @@ function event_calendar_init() { //add to the css 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') { + 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); + } //add a widget elgg_register_widget_type('event_calendar',elgg_echo("event_calendar:widget_title"),elgg_echo('event_calendar:widget:description')); diff --git a/views/default/event_calendar/full_calendar_view.php b/views/default/event_calendar/full_calendar_view.php new file mode 100644 index 000000000..b6c725908 --- /dev/null +++ b/views/default/event_calendar/full_calendar_view.php @@ -0,0 +1,46 @@ +<?php +elgg_load_js('elgg.full_calendar'); + +$events = $vars['events']; + +$event_array = array(); + +foreach($events as $e) { + $event_array[] = array( + 'id' => $e->guid, + 'title' => $e->title, + 'start_date' => $e->start_date, + 'end_date' => $e->real_end_time, + ); +} + +$json_events_string = json_encode($event_array); + +// TODO: is there an easy way to avoid embedding JS? +?> +<script> +$(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, + title : events[i].title, + start : new Date(1000*events[i].start_date), + end : new Date(1000*events[i].end_date), + allDay: false + }); + } + + $('#calendar').fullCalendar({ + header: { + left: 'prev,next today', + center: 'title', + right: 'month,agendaWeek,agendaDay' + }, + editable: true, + events: cal_events + }); +}); +</script> +<div id='calendar'></div> \ No newline at end of file diff --git a/views/default/event_calendar/input/date_local.php b/views/default/event_calendar/input/date_local.php index f9979cb38..f4cb48d11 100644 --- a/views/default/event_calendar/input/date_local.php +++ b/views/default/event_calendar/input/date_local.php @@ -49,7 +49,7 @@ if ($timestamp) { // convert timestamps to text for display if (is_numeric($vars['value'])) { - $vars['value'] = date('Y/m/d', $vars['value']); + $vars['value'] = date('Y-m-d', $vars['value']); } $attributes = elgg_format_attributes($vars); diff --git a/views/default/event_calendar/show_events.php b/views/default/event_calendar/show_events.php index b51b1c05f..63d722247 100644 --- a/views/default/event_calendar/show_events.php +++ b/views/default/event_calendar/show_events.php @@ -5,7 +5,7 @@ * @package event_calendar * @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.html GNU Public License version 2 * @author Kevin Jardine <kevin@radagast.biz> - * @copyright Radagast Solutions 2008 + * @copyright Radagast Solutions 2008-12 * @link http://radagast.biz/ * */ @@ -17,6 +17,8 @@ if ($vars['events']) { $event_list = elgg_view('event_calendar/agenda_view',$vars); } else if ($listing_format == 'paged') { $event_list = elgg_view('event_calendar/paged_view',$vars); + } else if ($listing_format == 'full') { + $event_list = elgg_view('event_calendar/full_calendar_view',$vars); } else { $options = array( 'list_class' => 'elgg-list-entity', @@ -32,7 +34,7 @@ if ($vars['events']) { } else { $event_list = '<p>'.elgg_echo('event_calendar:no_events_found').'</p>'; } -if ($listing_format == 'paged') { +if ($listing_format == 'paged' || $listing_format == 'full') { echo $event_list; } else { ?> diff --git a/views/default/event_calendar/strapline.php b/views/default/event_calendar/strapline.php index 15c7c98d9..edc60aa3e 100644 --- a/views/default/event_calendar/strapline.php +++ b/views/default/event_calendar/strapline.php @@ -9,7 +9,7 @@ $owner = get_entity($owner_guid); echo sprintf(elgg_echo('event_calendar:strapline'), - friendly_time($time_updated), + elgg_view_friendly_time($time_updated), "<a href=\"" . $owner->getURL() . "\">" . $owner->name ."</a>" ); diff --git a/views/default/fullcalendar/css.php b/views/default/fullcalendar/css.php new file mode 100644 index 000000000..04f118493 --- /dev/null +++ b/views/default/fullcalendar/css.php @@ -0,0 +1,618 @@ +/* + * FullCalendar v1.5.3 Stylesheet + * + * Copyright (c) 2011 Adam Shaw + * Dual licensed under the MIT and GPL licenses, located in + * MIT-LICENSE.txt and GPL-LICENSE.txt respectively. + * + * Date: Mon Feb 6 22:40:40 2012 -0800 + * + */ + + +.fc { + direction: ltr; + text-align: left; + } + +.fc table { + border-collapse: collapse; + border-spacing: 0; + } + +html .fc, +.fc table { + font-size: 1em; + } + +.fc td, +.fc th { + padding: 0; + vertical-align: top; + } + + + +/* Header +------------------------------------------------------------------------*/ + +.fc-header td { + white-space: nowrap; + } + +.fc-header-left { + width: 25%; + text-align: left; + } + +.fc-header-center { + text-align: center; + } + +.fc-header-right { + width: 25%; + text-align: right; + } + +.fc-header-title { + display: inline-block; + vertical-align: top; + } + +.fc-header-title h2 { + margin-top: 0; + white-space: nowrap; + } + +.fc .fc-header-space { + padding-left: 10px; + } + +.fc-header .fc-button { + margin-bottom: 1em; + vertical-align: top; + } + +/* buttons edges butting together */ + +.fc-header .fc-button { + margin-right: -1px; + } + +.fc-header .fc-corner-right { + margin-right: 1px; /* back to normal */ + } + +.fc-header .ui-corner-right { + margin-right: 0; /* back to normal */ + } + +/* button layering (for border precedence) */ + +.fc-header .fc-state-hover, +.fc-header .ui-state-hover { + z-index: 2; + } + +.fc-header .fc-state-down { + z-index: 3; + } + +.fc-header .fc-state-active, +.fc-header .ui-state-active { + z-index: 4; + } + + + +/* Content +------------------------------------------------------------------------*/ + +.fc-content { + clear: both; + } + +.fc-view { + width: 100%; /* needed for view switching (when view is absolute) */ + overflow: hidden; + } + + + +/* Cell Styles +------------------------------------------------------------------------*/ + +.fc-widget-header, /* <th>, usually */ +.fc-widget-content { /* <td>, usually */ + border: 1px solid #ccc; + } + +.fc-state-highlight { /* <td> today cell */ /* TODO: add .fc-today to <th> */ + background: #ffc; + } + +.fc-cell-overlay { /* semi-transparent rectangle while dragging */ + background: #9cf; + opacity: .2; + filter: alpha(opacity=20); /* for IE */ + } + + + +/* Buttons +------------------------------------------------------------------------*/ + +.fc-button { + position: relative; + display: inline-block; + cursor: pointer; + } + +.fc-state-default { /* non-theme */ + border-style: solid; + border-width: 1px 0; + } + +.fc-button-inner { + position: relative; + float: left; + overflow: hidden; + } + +.fc-state-default .fc-button-inner { /* non-theme */ + border-style: solid; + border-width: 0 1px; + } + +.fc-button-content { + position: relative; + float: left; + height: 1.9em; + line-height: 1.9em; + padding: 0 .6em; + white-space: nowrap; + } + +/* icon (for jquery ui) */ + +.fc-button-content .fc-icon-wrap { + position: relative; + float: left; + top: 50%; + } + +.fc-button-content .ui-icon { + position: relative; + float: left; + margin-top: -50%; + *margin-top: 0; + *top: -50%; + } + +/* gloss effect */ + +.fc-state-default .fc-button-effect { + position: absolute; + top: 50%; + left: 0; + } + +.fc-state-default .fc-button-effect span { + position: absolute; + top: -100px; + left: 0; + width: 500px; + height: 100px; + border-width: 100px 0 0 1px; + border-style: solid; + border-color: #fff; + background: #444; + opacity: .09; + filter: alpha(opacity=9); + } + +/* button states (determines colors) */ + +.fc-state-default, +.fc-state-default .fc-button-inner { + border-style: solid; + border-color: #ccc #bbb #aaa; + background: #F3F3F3; + color: #000; + } + +.fc-state-hover, +.fc-state-hover .fc-button-inner { + border-color: #999; + } + +.fc-state-down, +.fc-state-down .fc-button-inner { + border-color: #555; + background: #777; + } + +.fc-state-active, +.fc-state-active .fc-button-inner { + border-color: #555; + background: #777; + color: #fff; + } + +.fc-state-disabled, +.fc-state-disabled .fc-button-inner { + color: #999; + border-color: #ddd; + } + +.fc-state-disabled { + cursor: default; + } + +.fc-state-disabled .fc-button-effect { + display: none; + } + + + +/* Global Event Styles +------------------------------------------------------------------------*/ + +.fc-event { + border-style: solid; + border-width: 0; + font-size: .85em; + cursor: default; + } + +a.fc-event, +.fc-event-draggable { + cursor: pointer; + } + +a.fc-event { + text-decoration: none; + } + +.fc-rtl .fc-event { + text-align: right; + } + +.fc-event-skin { + border-color: #36c; /* default BORDER color */ + background-color: #36c; /* default BACKGROUND color */ + color: #fff; /* default TEXT color */ + } + +.fc-event-inner { + position: relative; + width: 100%; + height: 100%; + border-style: solid; + border-width: 0; + overflow: hidden; + } + +.fc-event-time, +.fc-event-title { + padding: 0 1px; + } + +.fc .ui-resizable-handle { /*** TODO: don't use ui-resizable anymore, change class ***/ + display: block; + position: absolute; + z-index: 99999; + overflow: hidden; /* hacky spaces (IE6/7) */ + font-size: 300%; /* */ + line-height: 50%; /* */ + } + + + +/* Horizontal Events +------------------------------------------------------------------------*/ + +.fc-event-hori { + border-width: 1px 0; + margin-bottom: 1px; + } + +/* resizable */ + +.fc-event-hori .ui-resizable-e { + top: 0 !important; /* importants override pre jquery ui 1.7 styles */ + right: -3px !important; + width: 7px !important; + height: 100% !important; + cursor: e-resize; + } + +.fc-event-hori .ui-resizable-w { + top: 0 !important; + left: -3px !important; + width: 7px !important; + height: 100% !important; + cursor: w-resize; + } + +.fc-event-hori .ui-resizable-handle { + _padding-bottom: 14px; /* IE6 had 0 height */ + } + + + +/* Fake Rounded Corners (for buttons and events) +------------------------------------------------------------*/ + +.fc-corner-left { + margin-left: 1px; + } + +.fc-corner-left .fc-button-inner, +.fc-corner-left .fc-event-inner { + margin-left: -1px; + } + +.fc-corner-right { + margin-right: 1px; + } + +.fc-corner-right .fc-button-inner, +.fc-corner-right .fc-event-inner { + margin-right: -1px; + } + +.fc-corner-top { + margin-top: 1px; + } + +.fc-corner-top .fc-event-inner { + margin-top: -1px; + } + +.fc-corner-bottom { + margin-bottom: 1px; + } + +.fc-corner-bottom .fc-event-inner { + margin-bottom: -1px; + } + + + +/* Fake Rounded Corners SPECIFICALLY FOR EVENTS +-----------------------------------------------------------------*/ + +.fc-corner-left .fc-event-inner { + border-left-width: 1px; + } + +.fc-corner-right .fc-event-inner { + border-right-width: 1px; + } + +.fc-corner-top .fc-event-inner { + border-top-width: 1px; + } + +.fc-corner-bottom .fc-event-inner { + border-bottom-width: 1px; + } + + + +/* Reusable Separate-border Table +------------------------------------------------------------*/ + +table.fc-border-separate { + border-collapse: separate; + } + +.fc-border-separate th, +.fc-border-separate td { + border-width: 1px 0 0 1px; + } + +.fc-border-separate th.fc-last, +.fc-border-separate td.fc-last { + border-right-width: 1px; + } + +.fc-border-separate tr.fc-last th, +.fc-border-separate tr.fc-last td { + border-bottom-width: 1px; + } + +.fc-border-separate tbody tr.fc-first td, +.fc-border-separate tbody tr.fc-first th { + border-top-width: 0; + } + + + +/* Month View, Basic Week View, Basic Day View +------------------------------------------------------------------------*/ + +.fc-grid th { + text-align: center; + } + +.fc-grid .fc-day-number { + float: right; + padding: 0 2px; + } + +.fc-grid .fc-other-month .fc-day-number { + opacity: 0.3; + filter: alpha(opacity=30); /* for IE */ + /* opacity with small font can sometimes look too faded + might want to set the 'color' property instead + making day-numbers bold also fixes the problem */ + } + +.fc-grid .fc-day-content { + clear: both; + padding: 2px 2px 1px; /* distance between events and day edges */ + } + +/* event styles */ + +.fc-grid .fc-event-time { + font-weight: bold; + } + +/* right-to-left */ + +.fc-rtl .fc-grid .fc-day-number { + float: left; + } + +.fc-rtl .fc-grid .fc-event-time { + float: right; + } + + + +/* Agenda Week View, Agenda Day View +------------------------------------------------------------------------*/ + +.fc-agenda table { + border-collapse: separate; + } + +.fc-agenda-days th { + text-align: center; + } + +.fc-agenda .fc-agenda-axis { + width: 50px; + padding: 0 4px; + vertical-align: middle; + text-align: right; + white-space: nowrap; + font-weight: normal; + } + +.fc-agenda .fc-day-content { + padding: 2px 2px 1px; + } + +/* make axis border take precedence */ + +.fc-agenda-days .fc-agenda-axis { + border-right-width: 1px; + } + +.fc-agenda-days .fc-col0 { + border-left-width: 0; + } + +/* all-day area */ + +.fc-agenda-allday th { + border-width: 0 1px; + } + +.fc-agenda-allday .fc-day-content { + min-height: 34px; /* TODO: doesnt work well in quirksmode */ + _height: 34px; + } + +/* divider (between all-day and slots) */ + +.fc-agenda-divider-inner { + height: 2px; + overflow: hidden; + } + +.fc-widget-header .fc-agenda-divider-inner { + background: #eee; + } + +/* slot rows */ + +.fc-agenda-slots th { + border-width: 1px 1px 0; + } + +.fc-agenda-slots td { + border-width: 1px 0 0; + background: none; + } + +.fc-agenda-slots td div { + height: 20px; + } + +.fc-agenda-slots tr.fc-slot0 th, +.fc-agenda-slots tr.fc-slot0 td { + border-top-width: 0; + } + +.fc-agenda-slots tr.fc-minor th, +.fc-agenda-slots tr.fc-minor td { + border-top-style: dotted; + } + +.fc-agenda-slots tr.fc-minor th.ui-widget-header { + *border-top-style: solid; /* doesn't work with background in IE6/7 */ + } + + + +/* Vertical Events +------------------------------------------------------------------------*/ + +.fc-event-vert { + border-width: 0 1px; + } + +.fc-event-vert .fc-event-head, +.fc-event-vert .fc-event-content { + position: relative; + z-index: 2; + width: 100%; + overflow: hidden; + } + +.fc-event-vert .fc-event-time { + white-space: nowrap; + font-size: 10px; + } + +.fc-event-vert .fc-event-bg { /* makes the event lighter w/ a semi-transparent overlay */ + position: absolute; + z-index: 1; + top: 0; + left: 0; + width: 100%; + height: 100%; + background: #fff; + opacity: .3; + filter: alpha(opacity=30); + } + +.fc .ui-draggable-dragging .fc-event-bg, /* TODO: something nicer like .fc-opacity */ +.fc-select-helper .fc-event-bg { + display: none\9; /* for IE6/7/8. nested opacity filters while dragging don't work */ + } + +/* resizable */ + +.fc-event-vert .ui-resizable-s { + bottom: 0 !important; /* importants override pre jquery ui 1.7 styles */ + width: 100% !important; + height: 8px !important; + overflow: hidden !important; + line-height: 8px !important; + font-size: 11px !important; + font-family: monospace; + text-align: center; + cursor: s-resize; + } + +.fc-agenda .ui-resizable-resizing { /* TODO: better selector */ + _overflow: hidden; + } + + diff --git a/views/default/fullcalendar/fullcalendar.print.css b/views/default/fullcalendar/fullcalendar.print.css new file mode 100644 index 000000000..e11c18163 --- /dev/null +++ b/views/default/fullcalendar/fullcalendar.print.css @@ -0,0 +1,61 @@ +/* + * FullCalendar v1.5.3 Print Stylesheet + * + * Include this stylesheet on your page to get a more printer-friendly calendar. + * When including this stylesheet, use the media='print' attribute of the <link> tag. + * Make sure to include this stylesheet IN ADDITION to the regular fullcalendar.css. + * + * Copyright (c) 2011 Adam Shaw + * Dual licensed under the MIT and GPL licenses, located in + * MIT-LICENSE.txt and GPL-LICENSE.txt respectively. + * + * Date: Mon Feb 6 22:40:40 2012 -0800 + * + */ + + + /* Events +-----------------------------------------------------*/ + +.fc-event-skin { + background: none !important; + color: #000 !important; + } + +/* horizontal events */ + +.fc-event-hori { + border-width: 0 0 1px 0 !important; + border-bottom-style: dotted !important; + border-bottom-color: #000 !important; + padding: 1px 0 0 0 !important; + } + +.fc-event-hori .fc-event-inner { + border-width: 0 !important; + padding: 0 1px !important; + } + +/* vertical events */ + +.fc-event-vert { + border-width: 0 0 0 1px !important; + border-left-style: dotted !important; + border-left-color: #000 !important; + padding: 0 1px 0 0 !important; + } + +.fc-event-vert .fc-event-inner { + border-width: 0 !important; + padding: 1px 0 !important; + } + +.fc-event-bg { + display: none !important; + } + +.fc-event .ui-resizable-handle { + display: none !important; + } + + diff --git a/views/default/input/datepicker_popup.php b/views/default/input/datepicker_popup.php index 5ed431e71..0daeb7307 100644 --- a/views/default/input/datepicker_popup.php +++ b/views/default/input/datepicker_popup.php @@ -14,7 +14,7 @@ if ($vars['dateformat']) { $date_format = $vars['dateformat']; } else { - $date_format = "DD, MM d, yy"; + $date_format = "yy/mm/dd"; } ?> diff --git a/views/default/js/event_calendar/fullcalendar.min.js b/views/default/js/event_calendar/fullcalendar.min.js new file mode 100644 index 000000000..df37bdfd8 --- /dev/null +++ b/views/default/js/event_calendar/fullcalendar.min.js @@ -0,0 +1,114 @@ +/* + + FullCalendar v1.5.3 + http://arshaw.com/fullcalendar/ + + Use fullcalendar.css for basic styling. + For event drag & drop, requires jQuery UI draggable. + For event resizing, requires jQuery UI resizable. + + Copyright (c) 2011 Adam Shaw + Dual licensed under the MIT and GPL licenses, located in + MIT-LICENSE.txt and GPL-LICENSE.txt respectively. + + Date: Mon Feb 6 22:40:40 2012 -0800 + +*/ +(function(m,ma){function wb(a){m.extend(true,Ya,a)}function Yb(a,b,e){function d(k){if(E){u();q();na();S(k)}else f()}function f(){B=b.theme?"ui":"fc";a.addClass("fc");b.isRTL&&a.addClass("fc-rtl");b.theme&&a.addClass("ui-widget");E=m("<div class='fc-content' style='position:relative'/>").prependTo(a);C=new Zb(X,b);(P=C.render())&&a.prepend(P);y(b.defaultView);m(window).resize(oa);t()||g()}function g(){setTimeout(function(){!n.start&&t()&&S()},0)}function l(){m(window).unbind("resize",oa);C.destroy(); +E.remove();a.removeClass("fc fc-rtl ui-widget")}function j(){return i.offsetWidth!==0}function t(){return m("body")[0].offsetWidth!==0}function y(k){if(!n||k!=n.name){F++;pa();var D=n,Z;if(D){(D.beforeHide||xb)();Za(E,E.height());D.element.hide()}else Za(E,1);E.css("overflow","hidden");if(n=Y[k])n.element.show();else n=Y[k]=new Ja[k](Z=s=m("<div class='fc-view fc-view-"+k+"' style='position:absolute'/>").appendTo(E),X);D&&C.deactivateButton(D.name);C.activateButton(k);S();E.css("overflow","");D&& +Za(E,1);Z||(n.afterShow||xb)();F--}}function S(k){if(j()){F++;pa();o===ma&&u();var D=false;if(!n.start||k||r<n.start||r>=n.end){n.render(r,k||0);fa(true);D=true}else if(n.sizeDirty){n.clearEvents();fa();D=true}else if(n.eventsDirty){n.clearEvents();D=true}n.sizeDirty=false;n.eventsDirty=false;ga(D);W=a.outerWidth();C.updateTitle(n.title);k=new Date;k>=n.start&&k<n.end?C.disableButton("today"):C.enableButton("today");F--;n.trigger("viewDisplay",i)}}function Q(){q();if(j()){u();fa();pa();n.clearEvents(); +n.renderEvents(J);n.sizeDirty=false}}function q(){m.each(Y,function(k,D){D.sizeDirty=true})}function u(){o=b.contentHeight?b.contentHeight:b.height?b.height-(P?P.height():0)-Sa(E):Math.round(E.width()/Math.max(b.aspectRatio,0.5))}function fa(k){F++;n.setHeight(o,k);if(s){s.css("position","relative");s=null}n.setWidth(E.width(),k);F--}function oa(){if(!F)if(n.start){var k=++v;setTimeout(function(){if(k==v&&!F&&j())if(W!=(W=a.outerWidth())){F++;Q();n.trigger("windowResize",i);F--}},200)}else g()}function ga(k){if(!b.lazyFetching|| +ya(n.visStart,n.visEnd))ra();else k&&da()}function ra(){K(n.visStart,n.visEnd)}function sa(k){J=k;da()}function ha(k){da(k)}function da(k){na();if(j()){n.clearEvents();n.renderEvents(J,k);n.eventsDirty=false}}function na(){m.each(Y,function(k,D){D.eventsDirty=true})}function ua(k,D,Z){n.select(k,D,Z===ma?true:Z)}function pa(){n&&n.unselect()}function U(){S(-1)}function ca(){S(1)}function ka(){gb(r,-1);S()}function qa(){gb(r,1);S()}function G(){r=new Date;S()}function p(k,D,Z){if(k instanceof Date)r= +N(k);else yb(r,k,D,Z);S()}function L(k,D,Z){k!==ma&&gb(r,k);D!==ma&&hb(r,D);Z!==ma&&ba(r,Z);S()}function c(){return N(r)}function z(){return n}function H(k,D){if(D===ma)return b[k];if(k=="height"||k=="contentHeight"||k=="aspectRatio"){b[k]=D;Q()}}function T(k,D){if(b[k])return b[k].apply(D||i,Array.prototype.slice.call(arguments,2))}var X=this;X.options=b;X.render=d;X.destroy=l;X.refetchEvents=ra;X.reportEvents=sa;X.reportEventChange=ha;X.rerenderEvents=da;X.changeView=y;X.select=ua;X.unselect=pa; +X.prev=U;X.next=ca;X.prevYear=ka;X.nextYear=qa;X.today=G;X.gotoDate=p;X.incrementDate=L;X.formatDate=function(k,D){return Oa(k,D,b)};X.formatDates=function(k,D,Z){return ib(k,D,Z,b)};X.getDate=c;X.getView=z;X.option=H;X.trigger=T;$b.call(X,b,e);var ya=X.isFetchNeeded,K=X.fetchEvents,i=a[0],C,P,E,B,n,Y={},W,o,s,v=0,F=0,r=new Date,J=[],M;yb(r,b.year,b.month,b.date);b.droppable&&m(document).bind("dragstart",function(k,D){var Z=k.target,ja=m(Z);if(!ja.parents(".fc").length){var ia=b.dropAccept;if(m.isFunction(ia)? +ia.call(Z,ja):ja.is(ia)){M=Z;n.dragStart(M,k,D)}}}).bind("dragstop",function(k,D){if(M){n.dragStop(M,k,D);M=null}})}function Zb(a,b){function e(){q=b.theme?"ui":"fc";if(b.header)return Q=m("<table class='fc-header' style='width:100%'/>").append(m("<tr/>").append(f("left")).append(f("center")).append(f("right")))}function d(){Q.remove()}function f(u){var fa=m("<td class='fc-header-"+u+"'/>");(u=b.header[u])&&m.each(u.split(" "),function(oa){oa>0&&fa.append("<span class='fc-header-space'/>");var ga; +m.each(this.split(","),function(ra,sa){if(sa=="title"){fa.append("<span class='fc-header-title'><h2> </h2></span>");ga&&ga.addClass(q+"-corner-right");ga=null}else{var ha;if(a[sa])ha=a[sa];else if(Ja[sa])ha=function(){na.removeClass(q+"-state-hover");a.changeView(sa)};if(ha){ra=b.theme?jb(b.buttonIcons,sa):null;var da=jb(b.buttonText,sa),na=m("<span class='fc-button fc-button-"+sa+" "+q+"-state-default'><span class='fc-button-inner'><span class='fc-button-content'>"+(ra?"<span class='fc-icon-wrap'><span class='ui-icon ui-icon-"+ +ra+"'/></span>":da)+"</span><span class='fc-button-effect'><span></span></span></span></span>");if(na){na.click(function(){na.hasClass(q+"-state-disabled")||ha()}).mousedown(function(){na.not("."+q+"-state-active").not("."+q+"-state-disabled").addClass(q+"-state-down")}).mouseup(function(){na.removeClass(q+"-state-down")}).hover(function(){na.not("."+q+"-state-active").not("."+q+"-state-disabled").addClass(q+"-state-hover")},function(){na.removeClass(q+"-state-hover").removeClass(q+"-state-down")}).appendTo(fa); +ga||na.addClass(q+"-corner-left");ga=na}}}});ga&&ga.addClass(q+"-corner-right")});return fa}function g(u){Q.find("h2").html(u)}function l(u){Q.find("span.fc-button-"+u).addClass(q+"-state-active")}function j(u){Q.find("span.fc-button-"+u).removeClass(q+"-state-active")}function t(u){Q.find("span.fc-button-"+u).addClass(q+"-state-disabled")}function y(u){Q.find("span.fc-button-"+u).removeClass(q+"-state-disabled")}var S=this;S.render=e;S.destroy=d;S.updateTitle=g;S.activateButton=l;S.deactivateButton= +j;S.disableButton=t;S.enableButton=y;var Q=m([]),q}function $b(a,b){function e(c,z){return!ca||c<ca||z>ka}function d(c,z){ca=c;ka=z;L=[];c=++qa;G=z=U.length;for(var H=0;H<z;H++)f(U[H],c)}function f(c,z){g(c,function(H){if(z==qa){if(H){for(var T=0;T<H.length;T++){H[T].source=c;oa(H[T])}L=L.concat(H)}G--;G||ua(L)}})}function g(c,z){var H,T=Aa.sourceFetchers,X;for(H=0;H<T.length;H++){X=T[H](c,ca,ka,z);if(X===true)return;else if(typeof X=="object"){g(X,z);return}}if(H=c.events)if(m.isFunction(H)){u(); +H(N(ca),N(ka),function(C){z(C);fa()})}else m.isArray(H)?z(H):z();else if(c.url){var ya=c.success,K=c.error,i=c.complete;H=m.extend({},c.data||{});T=Ta(c.startParam,a.startParam);X=Ta(c.endParam,a.endParam);if(T)H[T]=Math.round(+ca/1E3);if(X)H[X]=Math.round(+ka/1E3);u();m.ajax(m.extend({},ac,c,{data:H,success:function(C){C=C||[];var P=$a(ya,this,arguments);if(m.isArray(P))C=P;z(C)},error:function(){$a(K,this,arguments);z()},complete:function(){$a(i,this,arguments);fa()}}))}else z()}function l(c){if(c= +j(c)){G++;f(c,qa)}}function j(c){if(m.isFunction(c)||m.isArray(c))c={events:c};else if(typeof c=="string")c={url:c};if(typeof c=="object"){ga(c);U.push(c);return c}}function t(c){U=m.grep(U,function(z){return!ra(z,c)});L=m.grep(L,function(z){return!ra(z.source,c)});ua(L)}function y(c){var z,H=L.length,T,X=na().defaultEventEnd,ya=c.start-c._start,K=c.end?c.end-(c._end||X(c)):0;for(z=0;z<H;z++){T=L[z];if(T._id==c._id&&T!=c){T.start=new Date(+T.start+ya);T.end=c.end?T.end?new Date(+T.end+K):new Date(+X(T)+ +K):null;T.title=c.title;T.url=c.url;T.allDay=c.allDay;T.className=c.className;T.editable=c.editable;T.color=c.color;T.backgroudColor=c.backgroudColor;T.borderColor=c.borderColor;T.textColor=c.textColor;oa(T)}}oa(c);ua(L)}function S(c,z){oa(c);if(!c.source){if(z){pa.events.push(c);c.source=pa}L.push(c)}ua(L)}function Q(c){if(c){if(!m.isFunction(c)){var z=c+"";c=function(T){return T._id==z}}L=m.grep(L,c,true);for(H=0;H<U.length;H++)if(m.isArray(U[H].events))U[H].events=m.grep(U[H].events,c,true)}else{L= +[];for(var H=0;H<U.length;H++)if(m.isArray(U[H].events))U[H].events=[]}ua(L)}function q(c){if(m.isFunction(c))return m.grep(L,c);else if(c){c+="";return m.grep(L,function(z){return z._id==c})}return L}function u(){p++||da("loading",null,true)}function fa(){--p||da("loading",null,false)}function oa(c){var z=c.source||{},H=Ta(z.ignoreTimezone,a.ignoreTimezone);c._id=c._id||(c.id===ma?"_fc"+bc++:c.id+"");if(c.date){if(!c.start)c.start=c.date;delete c.date}c._start=N(c.start=kb(c.start,H));c.end=kb(c.end, +H);if(c.end&&c.end<=c.start)c.end=null;c._end=c.end?N(c.end):null;if(c.allDay===ma)c.allDay=Ta(z.allDayDefault,a.allDayDefault);if(c.className){if(typeof c.className=="string")c.className=c.className.split(/\s+/)}else c.className=[]}function ga(c){if(c.className){if(typeof c.className=="string")c.className=c.className.split(/\s+/)}else c.className=[];for(var z=Aa.sourceNormalizers,H=0;H<z.length;H++)z[H](c)}function ra(c,z){return c&&z&&sa(c)==sa(z)}function sa(c){return(typeof c=="object"?c.events|| +c.url:"")||c}var ha=this;ha.isFetchNeeded=e;ha.fetchEvents=d;ha.addEventSource=l;ha.removeEventSource=t;ha.updateEvent=y;ha.renderEvent=S;ha.removeEvents=Q;ha.clientEvents=q;ha.normalizeEvent=oa;var da=ha.trigger,na=ha.getView,ua=ha.reportEvents,pa={events:[]},U=[pa],ca,ka,qa=0,G=0,p=0,L=[];for(ha=0;ha<b.length;ha++)j(b[ha])}function gb(a,b,e){a.setFullYear(a.getFullYear()+b);e||Ka(a);return a}function hb(a,b,e){if(+a){b=a.getMonth()+b;var d=N(a);d.setDate(1);d.setMonth(b);a.setMonth(b);for(e||Ka(a);a.getMonth()!= +d.getMonth();)a.setDate(a.getDate()+(a<d?1:-1))}return a}function ba(a,b,e){if(+a){b=a.getDate()+b;var d=N(a);d.setHours(9);d.setDate(b);a.setDate(b);e||Ka(a);lb(a,d)}return a}function lb(a,b){if(+a)for(;a.getDate()!=b.getDate();)a.setTime(+a+(a<b?1:-1)*cc)}function xa(a,b){a.setMinutes(a.getMinutes()+b);return a}function Ka(a){a.setHours(0);a.setMinutes(0);a.setSeconds(0);a.setMilliseconds(0);return a}function N(a,b){if(b)return Ka(new Date(+a));return new Date(+a)}function zb(){var a=0,b;do b=new Date(1970, +a++,1);while(b.getHours());return b}function Fa(a,b,e){for(b=b||1;!a.getDay()||e&&a.getDay()==1||!e&&a.getDay()==6;)ba(a,b);return a}function Ca(a,b){return Math.round((N(a,true)-N(b,true))/Ab)}function yb(a,b,e,d){if(b!==ma&&b!=a.getFullYear()){a.setDate(1);a.setMonth(0);a.setFullYear(b)}if(e!==ma&&e!=a.getMonth()){a.setDate(1);a.setMonth(e)}d!==ma&&a.setDate(d)}function kb(a,b){if(typeof a=="object")return a;if(typeof a=="number")return new Date(a*1E3);if(typeof a=="string"){if(a.match(/^\d+(\.\d+)?$/))return new Date(parseFloat(a)* +1E3);if(b===ma)b=true;return Bb(a,b)||(a?new Date(a):null)}return null}function Bb(a,b){a=a.match(/^([0-9]{4})(-([0-9]{2})(-([0-9]{2})([T ]([0-9]{2}):([0-9]{2})(:([0-9]{2})(\.([0-9]+))?)?(Z|(([-+])([0-9]{2})(:?([0-9]{2}))?))?)?)?)?$/);if(!a)return null;var e=new Date(a[1],0,1);if(b||!a[13]){b=new Date(a[1],0,1,9,0);if(a[3]){e.setMonth(a[3]-1);b.setMonth(a[3]-1)}if(a[5]){e.setDate(a[5]);b.setDate(a[5])}lb(e,b);a[7]&&e.setHours(a[7]);a[8]&&e.setMinutes(a[8]);a[10]&&e.setSeconds(a[10]);a[12]&&e.setMilliseconds(Number("0."+ +a[12])*1E3);lb(e,b)}else{e.setUTCFullYear(a[1],a[3]?a[3]-1:0,a[5]||1);e.setUTCHours(a[7]||0,a[8]||0,a[10]||0,a[12]?Number("0."+a[12])*1E3:0);if(a[14]){b=Number(a[16])*60+(a[18]?Number(a[18]):0);b*=a[15]=="-"?1:-1;e=new Date(+e+b*60*1E3)}}return e}function mb(a){if(typeof a=="number")return a*60;if(typeof a=="object")return a.getHours()*60+a.getMinutes();if(a=a.match(/(\d+)(?::(\d+))?\s*(\w+)?/)){var b=parseInt(a[1],10);if(a[3]){b%=12;if(a[3].toLowerCase().charAt(0)=="p")b+=12}return b*60+(a[2]?parseInt(a[2], +10):0)}}function Oa(a,b,e){return ib(a,null,b,e)}function ib(a,b,e,d){d=d||Ya;var f=a,g=b,l,j=e.length,t,y,S,Q="";for(l=0;l<j;l++){t=e.charAt(l);if(t=="'")for(y=l+1;y<j;y++){if(e.charAt(y)=="'"){if(f){Q+=y==l+1?"'":e.substring(l+1,y);l=y}break}}else if(t=="(")for(y=l+1;y<j;y++){if(e.charAt(y)==")"){l=Oa(f,e.substring(l+1,y),d);if(parseInt(l.replace(/\D/,""),10))Q+=l;l=y;break}}else if(t=="[")for(y=l+1;y<j;y++){if(e.charAt(y)=="]"){t=e.substring(l+1,y);l=Oa(f,t,d);if(l!=Oa(g,t,d))Q+=l;l=y;break}}else if(t== +"{"){f=b;g=a}else if(t=="}"){f=a;g=b}else{for(y=j;y>l;y--)if(S=dc[e.substring(l,y)]){if(f)Q+=S(f,d);l=y-1;break}if(y==l)if(f)Q+=t}}return Q}function Ua(a){return a.end?ec(a.end,a.allDay):ba(N(a.start),1)}function ec(a,b){a=N(a);return b||a.getHours()||a.getMinutes()?ba(a,1):Ka(a)}function fc(a,b){return(b.msLength-a.msLength)*100+(a.event.start-b.event.start)}function Cb(a,b){return a.end>b.start&&a.start<b.end}function nb(a,b,e,d){var f=[],g,l=a.length,j,t,y,S,Q;for(g=0;g<l;g++){j=a[g];t=j.start; +y=b[g];if(y>e&&t<d){if(t<e){t=N(e);S=false}else{t=t;S=true}if(y>d){y=N(d);Q=false}else{y=y;Q=true}f.push({event:j,start:t,end:y,isStart:S,isEnd:Q,msLength:y-t})}}return f.sort(fc)}function ob(a){var b=[],e,d=a.length,f,g,l,j;for(e=0;e<d;e++){f=a[e];for(g=0;;){l=false;if(b[g])for(j=0;j<b[g].length;j++)if(Cb(b[g][j],f)){l=true;break}if(l)g++;else break}if(b[g])b[g].push(f);else b[g]=[f]}return b}function Db(a,b,e){a.unbind("mouseover").mouseover(function(d){for(var f=d.target,g;f!=this;){g=f;f=f.parentNode}if((f= +g._fci)!==ma){g._fci=ma;g=b[f];e(g.event,g.element,g);m(d.target).trigger(d)}d.stopPropagation()})}function Va(a,b,e){for(var d=0,f;d<a.length;d++){f=m(a[d]);f.width(Math.max(0,b-pb(f,e)))}}function Eb(a,b,e){for(var d=0,f;d<a.length;d++){f=m(a[d]);f.height(Math.max(0,b-Sa(f,e)))}}function pb(a,b){return gc(a)+hc(a)+(b?ic(a):0)}function gc(a){return(parseFloat(m.curCSS(a[0],"paddingLeft",true))||0)+(parseFloat(m.curCSS(a[0],"paddingRight",true))||0)}function ic(a){return(parseFloat(m.curCSS(a[0], +"marginLeft",true))||0)+(parseFloat(m.curCSS(a[0],"marginRight",true))||0)}function hc(a){return(parseFloat(m.curCSS(a[0],"borderLeftWidth",true))||0)+(parseFloat(m.curCSS(a[0],"borderRightWidth",true))||0)}function Sa(a,b){return jc(a)+kc(a)+(b?Fb(a):0)}function jc(a){return(parseFloat(m.curCSS(a[0],"paddingTop",true))||0)+(parseFloat(m.curCSS(a[0],"paddingBottom",true))||0)}function Fb(a){return(parseFloat(m.curCSS(a[0],"marginTop",true))||0)+(parseFloat(m.curCSS(a[0],"marginBottom",true))||0)} +function kc(a){return(parseFloat(m.curCSS(a[0],"borderTopWidth",true))||0)+(parseFloat(m.curCSS(a[0],"borderBottomWidth",true))||0)}function Za(a,b){b=typeof b=="number"?b+"px":b;a.each(function(e,d){d.style.cssText+=";min-height:"+b+";_height:"+b})}function xb(){}function Gb(a,b){return a-b}function Hb(a){return Math.max.apply(Math,a)}function Pa(a){return(a<10?"0":"")+a}function jb(a,b){if(a[b]!==ma)return a[b];b=b.split(/(?=[A-Z])/);for(var e=b.length-1,d;e>=0;e--){d=a[b[e].toLowerCase()];if(d!== +ma)return d}return a[""]}function Qa(a){return a.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/'/g,"'").replace(/"/g,""").replace(/\n/g,"<br />")}function Ib(a){return a.id+"/"+a.className+"/"+a.style.cssText.replace(/(^|;)\s*(top|left|width|height)\s*:[^;]*/ig,"")}function qb(a){a.attr("unselectable","on").css("MozUserSelect","none").bind("selectstart.ui",function(){return false})}function ab(a){a.children().removeClass("fc-first fc-last").filter(":first-child").addClass("fc-first").end().filter(":last-child").addClass("fc-last")} +function rb(a,b){a.each(function(e,d){d.className=d.className.replace(/^fc-\w*/,"fc-"+lc[b.getDay()])})}function Jb(a,b){var e=a.source||{},d=a.color,f=e.color,g=b("eventColor"),l=a.backgroundColor||d||e.backgroundColor||f||b("eventBackgroundColor")||g;d=a.borderColor||d||e.borderColor||f||b("eventBorderColor")||g;a=a.textColor||e.textColor||b("eventTextColor");b=[];l&&b.push("background-color:"+l);d&&b.push("border-color:"+d);a&&b.push("color:"+a);return b.join(";")}function $a(a,b,e){if(m.isFunction(a))a= +[a];if(a){var d,f;for(d=0;d<a.length;d++)f=a[d].apply(b,e)||f;return f}}function Ta(){for(var a=0;a<arguments.length;a++)if(arguments[a]!==ma)return arguments[a]}function mc(a,b){function e(j,t){if(t){hb(j,t);j.setDate(1)}j=N(j,true);j.setDate(1);t=hb(N(j),1);var y=N(j),S=N(t),Q=f("firstDay"),q=f("weekends")?0:1;if(q){Fa(y);Fa(S,-1,true)}ba(y,-((y.getDay()-Math.max(Q,q)+7)%7));ba(S,(7-S.getDay()+Math.max(Q,q))%7);Q=Math.round((S-y)/(Ab*7));if(f("weekMode")=="fixed"){ba(S,(6-Q)*7);Q=6}d.title=l(j, +f("titleFormat"));d.start=j;d.end=t;d.visStart=y;d.visEnd=S;g(6,Q,q?5:7,true)}var d=this;d.render=e;sb.call(d,a,b,"month");var f=d.opt,g=d.renderBasic,l=b.formatDate}function nc(a,b){function e(j,t){t&&ba(j,t*7);j=ba(N(j),-((j.getDay()-f("firstDay")+7)%7));t=ba(N(j),7);var y=N(j),S=N(t),Q=f("weekends");if(!Q){Fa(y);Fa(S,-1,true)}d.title=l(y,ba(N(S),-1),f("titleFormat"));d.start=j;d.end=t;d.visStart=y;d.visEnd=S;g(1,1,Q?7:5,false)}var d=this;d.render=e;sb.call(d,a,b,"basicWeek");var f=d.opt,g=d.renderBasic, +l=b.formatDates}function oc(a,b){function e(j,t){if(t){ba(j,t);f("weekends")||Fa(j,t<0?-1:1)}d.title=l(j,f("titleFormat"));d.start=d.visStart=N(j,true);d.end=d.visEnd=ba(N(d.start),1);g(1,1,1,false)}var d=this;d.render=e;sb.call(d,a,b,"basicDay");var f=d.opt,g=d.renderBasic,l=b.formatDate}function sb(a,b,e){function d(w,I,R,V){v=I;F=R;f();(I=!C)?g(w,V):z();l(I)}function f(){if(k=L("isRTL")){D=-1;Z=F-1}else{D=1;Z=0}ja=L("firstDay");ia=L("weekends")?0:1;la=L("theme")?"ui":"fc";$=L("columnFormat")}function g(w, +I){var R,V=la+"-widget-header",ea=la+"-widget-content",aa;R="<table class='fc-border-separate' style='width:100%' cellspacing='0'><thead><tr>";for(aa=0;aa<F;aa++)R+="<th class='fc- "+V+"'/>";R+="</tr></thead><tbody>";for(aa=0;aa<w;aa++){R+="<tr class='fc-week"+aa+"'>";for(V=0;V<F;V++)R+="<td class='fc- "+ea+" fc-day"+(aa*F+V)+"'><div>"+(I?"<div class='fc-day-number'/>":"")+"<div class='fc-day-content'><div style='position:relative'> </div></div></div></td>";R+="</tr>"}R+="</tbody></table>";w= +m(R).appendTo(a);K=w.find("thead");i=K.find("th");C=w.find("tbody");P=C.find("tr");E=C.find("td");B=E.filter(":first-child");n=P.eq(0).find("div.fc-day-content div");ab(K.add(K.find("tr")));ab(P);P.eq(0).addClass("fc-first");y(E);Y=m("<div style='position:absolute;z-index:8;top:0;left:0'/>").appendTo(a)}function l(w){var I=w||v==1,R=p.start.getMonth(),V=Ka(new Date),ea,aa,va;I&&i.each(function(wa,Ga){ea=m(Ga);aa=ca(wa);ea.html(ya(aa,$));rb(ea,aa)});E.each(function(wa,Ga){ea=m(Ga);aa=ca(wa);aa.getMonth()== +R?ea.removeClass("fc-other-month"):ea.addClass("fc-other-month");+aa==+V?ea.addClass(la+"-state-highlight fc-today"):ea.removeClass(la+"-state-highlight fc-today");ea.find("div.fc-day-number").text(aa.getDate());I&&rb(ea,aa)});P.each(function(wa,Ga){va=m(Ga);if(wa<v){va.show();wa==v-1?va.addClass("fc-last"):va.removeClass("fc-last")}else va.hide()})}function j(w){o=w;w=o-K.height();var I,R,V;if(L("weekMode")=="variable")I=R=Math.floor(w/(v==1?2:6));else{I=Math.floor(w/v);R=w-I*(v-1)}B.each(function(ea, +aa){if(ea<v){V=m(aa);Za(V.find("> div"),(ea==v-1?R:I)-Sa(V))}})}function t(w){W=w;M.clear();s=Math.floor(W/F);Va(i.slice(0,-1),s)}function y(w){w.click(S).mousedown(X)}function S(w){if(!L("selectable")){var I=parseInt(this.className.match(/fc\-day(\d+)/)[1]);I=ca(I);c("dayClick",this,I,true,w)}}function Q(w,I,R){R&&r.build();R=N(p.visStart);for(var V=ba(N(R),F),ea=0;ea<v;ea++){var aa=new Date(Math.max(R,w)),va=new Date(Math.min(V,I));if(aa<va){var wa;if(k){wa=Ca(va,R)*D+Z+1;aa=Ca(aa,R)*D+Z+1}else{wa= +Ca(aa,R);aa=Ca(va,R)}y(q(ea,wa,ea,aa-1))}ba(R,7);ba(V,7)}}function q(w,I,R,V){w=r.rect(w,I,R,V,a);return H(w,a)}function u(w){return N(w)}function fa(w,I){Q(w,ba(N(I),1),true)}function oa(){T()}function ga(w,I,R){var V=ua(w);c("dayClick",E[V.row*F+V.col],w,I,R)}function ra(w,I){J.start(function(R){T();R&&q(R.row,R.col,R.row,R.col)},I)}function sa(w,I,R){var V=J.stop();T();if(V){V=pa(V);c("drop",w,V,true,I,R)}}function ha(w){return N(w.start)}function da(w){return M.left(w)}function na(w){return M.right(w)} +function ua(w){return{row:Math.floor(Ca(w,p.visStart)/7),col:ka(w.getDay())}}function pa(w){return U(w.row,w.col)}function U(w,I){return ba(N(p.visStart),w*7+I*D+Z)}function ca(w){return U(Math.floor(w/F),w%F)}function ka(w){return(w-Math.max(ja,ia)+F)%F*D+Z}function qa(w){return P.eq(w)}function G(){return{left:0,right:W}}var p=this;p.renderBasic=d;p.setHeight=j;p.setWidth=t;p.renderDayOverlay=Q;p.defaultSelectionEnd=u;p.renderSelection=fa;p.clearSelection=oa;p.reportDayClick=ga;p.dragStart=ra;p.dragStop= +sa;p.defaultEventEnd=ha;p.getHoverListener=function(){return J};p.colContentLeft=da;p.colContentRight=na;p.dayOfWeekCol=ka;p.dateCell=ua;p.cellDate=pa;p.cellIsAllDay=function(){return true};p.allDayRow=qa;p.allDayBounds=G;p.getRowCnt=function(){return v};p.getColCnt=function(){return F};p.getColWidth=function(){return s};p.getDaySegmentContainer=function(){return Y};Kb.call(p,a,b,e);Lb.call(p);Mb.call(p);pc.call(p);var L=p.opt,c=p.trigger,z=p.clearEvents,H=p.renderOverlay,T=p.clearOverlays,X=p.daySelectionMousedown, +ya=b.formatDate,K,i,C,P,E,B,n,Y,W,o,s,v,F,r,J,M,k,D,Z,ja,ia,la,$;qb(a.addClass("fc-grid"));r=new Nb(function(w,I){var R,V,ea;i.each(function(aa,va){R=m(va);V=R.offset().left;if(aa)ea[1]=V;ea=[V];I[aa]=ea});ea[1]=V+R.outerWidth();P.each(function(aa,va){if(aa<v){R=m(va);V=R.offset().top;if(aa)ea[1]=V;ea=[V];w[aa]=ea}});ea[1]=V+R.outerHeight()});J=new Ob(r);M=new Pb(function(w){return n.eq(w)})}function pc(){function a(U,ca){S(U);ua(e(U),ca)}function b(){Q();ga().empty()}function e(U){var ca=da(),ka= +na(),qa=N(g.visStart);ka=ba(N(qa),ka);var G=m.map(U,Ua),p,L,c,z,H,T,X=[];for(p=0;p<ca;p++){L=ob(nb(U,G,qa,ka));for(c=0;c<L.length;c++){z=L[c];for(H=0;H<z.length;H++){T=z[H];T.row=p;T.level=c;X.push(T)}}ba(qa,7);ba(ka,7)}return X}function d(U,ca,ka){t(U)&&f(U,ca);ka.isEnd&&y(U)&&pa(U,ca,ka);q(U,ca)}function f(U,ca){var ka=ra(),qa;ca.draggable({zIndex:9,delay:50,opacity:l("dragOpacity"),revertDuration:l("dragRevertDuration"),start:function(G,p){j("eventDragStart",ca,U,G,p);fa(U,ca);ka.start(function(L, +c,z,H){ca.draggable("option","revert",!L||!z&&!H);ha();if(L){qa=z*7+H*(l("isRTL")?-1:1);sa(ba(N(U.start),qa),ba(Ua(U),qa))}else qa=0},G,"drag")},stop:function(G,p){ka.stop();ha();j("eventDragStop",ca,U,G,p);if(qa)oa(this,U,qa,0,U.allDay,G,p);else{ca.css("filter","");u(U,ca)}}})}var g=this;g.renderEvents=a;g.compileDaySegs=e;g.clearEvents=b;g.bindDaySeg=d;Qb.call(g);var l=g.opt,j=g.trigger,t=g.isEventDraggable,y=g.isEventResizable,S=g.reportEvents,Q=g.reportEventClear,q=g.eventElementHandlers,u=g.showEvents, +fa=g.hideEvents,oa=g.eventDrop,ga=g.getDaySegmentContainer,ra=g.getHoverListener,sa=g.renderDayOverlay,ha=g.clearOverlays,da=g.getRowCnt,na=g.getColCnt,ua=g.renderDaySegs,pa=g.resizableDayEvent}function qc(a,b){function e(j,t){t&&ba(j,t*7);j=ba(N(j),-((j.getDay()-f("firstDay")+7)%7));t=ba(N(j),7);var y=N(j),S=N(t),Q=f("weekends");if(!Q){Fa(y);Fa(S,-1,true)}d.title=l(y,ba(N(S),-1),f("titleFormat"));d.start=j;d.end=t;d.visStart=y;d.visEnd=S;g(Q?7:5)}var d=this;d.render=e;Rb.call(d,a,b,"agendaWeek"); +var f=d.opt,g=d.renderAgenda,l=b.formatDates}function rc(a,b){function e(j,t){if(t){ba(j,t);f("weekends")||Fa(j,t<0?-1:1)}t=N(j,true);var y=ba(N(t),1);d.title=l(j,f("titleFormat"));d.start=d.visStart=t;d.end=d.visEnd=y;g(1)}var d=this;d.render=e;Rb.call(d,a,b,"agendaDay");var f=d.opt,g=d.renderAgenda,l=b.formatDate}function Rb(a,b,e){function d(h){Ba=h;f();v?P():g();l()}function f(){Wa=i("theme")?"ui":"fc";Sb=i("weekends")?0:1;Tb=i("firstDay");if(Ub=i("isRTL")){Ha=-1;Ia=Ba-1}else{Ha=1;Ia=0}La=mb(i("minTime")); +bb=mb(i("maxTime"));Vb=i("columnFormat")}function g(){var h=Wa+"-widget-header",O=Wa+"-widget-content",x,A,ta,za,Da,Ea=i("slotMinutes")%15==0;x="<table style='width:100%' class='fc-agenda-days fc-border-separate' cellspacing='0'><thead><tr><th class='fc-agenda-axis "+h+"'> </th>";for(A=0;A<Ba;A++)x+="<th class='fc- fc-col"+A+" "+h+"'/>";x+="<th class='fc-agenda-gutter "+h+"'> </th></tr></thead><tbody><tr><th class='fc-agenda-axis "+h+"'> </th>";for(A=0;A<Ba;A++)x+="<td class='fc- fc-col"+ +A+" "+O+"'><div><div class='fc-day-content'><div style='position:relative'> </div></div></div></td>";x+="<td class='fc-agenda-gutter "+O+"'> </td></tr></tbody></table>";v=m(x).appendTo(a);F=v.find("thead");r=F.find("th").slice(1,-1);J=v.find("tbody");M=J.find("td").slice(0,-1);k=M.find("div.fc-day-content div");D=M.eq(0);Z=D.find("> div");ab(F.add(F.find("tr")));ab(J.add(J.find("tr")));aa=F.find("th:first");va=v.find(".fc-agenda-gutter");ja=m("<div style='position:absolute;z-index:2;left:0;width:100%'/>").appendTo(a); +if(i("allDaySlot")){ia=m("<div style='position:absolute;z-index:8;top:0;left:0'/>").appendTo(ja);x="<table style='width:100%' class='fc-agenda-allday' cellspacing='0'><tr><th class='"+h+" fc-agenda-axis'>"+i("allDayText")+"</th><td><div class='fc-day-content'><div style='position:relative'/></div></td><th class='"+h+" fc-agenda-gutter'> </th></tr></table>";la=m(x).appendTo(ja);$=la.find("tr");q($.find("td"));aa=aa.add(la.find("th:first"));va=va.add(la.find("th.fc-agenda-gutter"));ja.append("<div class='fc-agenda-divider "+ +h+"'><div class='fc-agenda-divider-inner'/></div>")}else ia=m([]);w=m("<div style='position:absolute;width:100%;overflow-x:hidden;overflow-y:auto'/>").appendTo(ja);I=m("<div style='position:relative;width:100%;overflow:hidden'/>").appendTo(w);R=m("<div style='position:absolute;z-index:8;top:0;left:0'/>").appendTo(I);x="<table class='fc-agenda-slots' style='width:100%' cellspacing='0'><tbody>";ta=zb();za=xa(N(ta),bb);xa(ta,La);for(A=tb=0;ta<za;A++){Da=ta.getMinutes();x+="<tr class='fc-slot"+A+" "+ +(!Da?"":"fc-minor")+"'><th class='fc-agenda-axis "+h+"'>"+(!Ea||!Da?s(ta,i("axisFormat")):" ")+"</th><td class='"+O+"'><div style='position:relative'> </div></td></tr>";xa(ta,i("slotMinutes"));tb++}x+="</tbody></table>";V=m(x).appendTo(I);ea=V.find("div:first");u(V.find("td"));aa=aa.add(V.find("th:first"))}function l(){var h,O,x,A,ta=Ka(new Date);for(h=0;h<Ba;h++){A=ua(h);O=r.eq(h);O.html(s(A,Vb));x=M.eq(h);+A==+ta?x.addClass(Wa+"-state-highlight fc-today"):x.removeClass(Wa+"-state-highlight fc-today"); +rb(O.add(x),A)}}function j(h,O){if(h===ma)h=Wb;Wb=h;ub={};var x=J.position().top,A=w.position().top;h=Math.min(h-x,V.height()+A+1);Z.height(h-Sa(D));ja.css("top",x);w.height(h-A-1);Xa=ea.height()+1;O&&y()}function t(h){Ga=h;cb.clear();Ma=0;Va(aa.width("").each(function(O,x){Ma=Math.max(Ma,m(x).outerWidth())}),Ma);h=w[0].clientWidth;if(vb=w.width()-h){Va(va,vb);va.show().prev().removeClass("fc-last")}else va.hide().prev().addClass("fc-last");db=Math.floor((h-Ma)/Ba);Va(r.slice(0,-1),db)}function y(){function h(){w.scrollTop(A)} +var O=zb(),x=N(O);x.setHours(i("firstHour"));var A=ca(O,x)+1;h();setTimeout(h,0)}function S(){Xb=w.scrollTop()}function Q(){w.scrollTop(Xb)}function q(h){h.click(fa).mousedown(W)}function u(h){h.click(fa).mousedown(H)}function fa(h){if(!i("selectable")){var O=Math.min(Ba-1,Math.floor((h.pageX-v.offset().left-Ma)/db)),x=ua(O),A=this.parentNode.className.match(/fc-slot(\d+)/);if(A){A=parseInt(A[1])*i("slotMinutes");var ta=Math.floor(A/60);x.setHours(ta);x.setMinutes(A%60+La);C("dayClick",M[O],x,false, +h)}else C("dayClick",M[O],x,true,h)}}function oa(h,O,x){x&&Na.build();var A=N(K.visStart);if(Ub){x=Ca(O,A)*Ha+Ia+1;h=Ca(h,A)*Ha+Ia+1}else{x=Ca(h,A);h=Ca(O,A)}x=Math.max(0,x);h=Math.min(Ba,h);x<h&&q(ga(0,x,0,h-1))}function ga(h,O,x,A){h=Na.rect(h,O,x,A,ja);return E(h,ja)}function ra(h,O){for(var x=N(K.visStart),A=ba(N(x),1),ta=0;ta<Ba;ta++){var za=new Date(Math.max(x,h)),Da=new Date(Math.min(A,O));if(za<Da){var Ea=ta*Ha+Ia;Ea=Na.rect(0,Ea,0,Ea,I);za=ca(x,za);Da=ca(x,Da);Ea.top=za;Ea.height=Da-za;u(E(Ea, +I))}ba(x,1);ba(A,1)}}function sa(h){return cb.left(h)}function ha(h){return cb.right(h)}function da(h){return{row:Math.floor(Ca(h,K.visStart)/7),col:U(h.getDay())}}function na(h){var O=ua(h.col);h=h.row;i("allDaySlot")&&h--;h>=0&&xa(O,La+h*i("slotMinutes"));return O}function ua(h){return ba(N(K.visStart),h*Ha+Ia)}function pa(h){return i("allDaySlot")&&!h.row}function U(h){return(h-Math.max(Tb,Sb)+Ba)%Ba*Ha+Ia}function ca(h,O){h=N(h,true);if(O<xa(N(h),La))return 0;if(O>=xa(N(h),bb))return V.height(); +h=i("slotMinutes");O=O.getHours()*60+O.getMinutes()-La;var x=Math.floor(O/h),A=ub[x];if(A===ma)A=ub[x]=V.find("tr:eq("+x+") td div")[0].offsetTop;return Math.max(0,Math.round(A-1+Xa*(O%h/h)))}function ka(){return{left:Ma,right:Ga-vb}}function qa(){return $}function G(h){var O=N(h.start);if(h.allDay)return O;return xa(O,i("defaultEventMinutes"))}function p(h,O){if(O)return N(h);return xa(N(h),i("slotMinutes"))}function L(h,O,x){if(x)i("allDaySlot")&&oa(h,ba(N(O),1),true);else c(h,O)}function c(h,O){var x= +i("selectHelper");Na.build();if(x){var A=Ca(h,K.visStart)*Ha+Ia;if(A>=0&&A<Ba){A=Na.rect(0,A,0,A,I);var ta=ca(h,h),za=ca(h,O);if(za>ta){A.top=ta;A.height=za-ta;A.left+=2;A.width-=5;if(m.isFunction(x)){if(h=x(h,O)){A.position="absolute";A.zIndex=8;wa=m(h).css(A).appendTo(I)}}else{A.isStart=true;A.isEnd=true;wa=m(o({title:"",start:h,end:O,className:["fc-select-helper"],editable:false},A));wa.css("opacity",i("dragOpacity"))}if(wa){u(wa);I.append(wa);Va(wa,A.width,true);Eb(wa,A.height,true)}}}}else ra(h, +O)}function z(){B();if(wa){wa.remove();wa=null}}function H(h){if(h.which==1&&i("selectable")){Y(h);var O;Ra.start(function(x,A){z();if(x&&x.col==A.col&&!pa(x)){A=na(A);x=na(x);O=[A,xa(N(A),i("slotMinutes")),x,xa(N(x),i("slotMinutes"))].sort(Gb);c(O[0],O[3])}else O=null},h);m(document).one("mouseup",function(x){Ra.stop();if(O){+O[0]==+O[1]&&T(O[0],false,x);n(O[0],O[3],false,x)}})}}function T(h,O,x){C("dayClick",M[U(h.getDay())],h,O,x)}function X(h,O){Ra.start(function(x){B();if(x)if(pa(x))ga(x.row, +x.col,x.row,x.col);else{x=na(x);var A=xa(N(x),i("defaultEventMinutes"));ra(x,A)}},O)}function ya(h,O,x){var A=Ra.stop();B();A&&C("drop",h,na(A),pa(A),O,x)}var K=this;K.renderAgenda=d;K.setWidth=t;K.setHeight=j;K.beforeHide=S;K.afterShow=Q;K.defaultEventEnd=G;K.timePosition=ca;K.dayOfWeekCol=U;K.dateCell=da;K.cellDate=na;K.cellIsAllDay=pa;K.allDayRow=qa;K.allDayBounds=ka;K.getHoverListener=function(){return Ra};K.colContentLeft=sa;K.colContentRight=ha;K.getDaySegmentContainer=function(){return ia}; +K.getSlotSegmentContainer=function(){return R};K.getMinMinute=function(){return La};K.getMaxMinute=function(){return bb};K.getBodyContent=function(){return I};K.getRowCnt=function(){return 1};K.getColCnt=function(){return Ba};K.getColWidth=function(){return db};K.getSlotHeight=function(){return Xa};K.defaultSelectionEnd=p;K.renderDayOverlay=oa;K.renderSelection=L;K.clearSelection=z;K.reportDayClick=T;K.dragStart=X;K.dragStop=ya;Kb.call(K,a,b,e);Lb.call(K);Mb.call(K);sc.call(K);var i=K.opt,C=K.trigger, +P=K.clearEvents,E=K.renderOverlay,B=K.clearOverlays,n=K.reportSelection,Y=K.unselect,W=K.daySelectionMousedown,o=K.slotSegHtml,s=b.formatDate,v,F,r,J,M,k,D,Z,ja,ia,la,$,w,I,R,V,ea,aa,va,wa,Ga,Wb,Ma,db,vb,Xa,Xb,Ba,tb,Na,Ra,cb,ub={},Wa,Tb,Sb,Ub,Ha,Ia,La,bb,Vb;qb(a.addClass("fc-agenda"));Na=new Nb(function(h,O){function x(eb){return Math.max(Ea,Math.min(tc,eb))}var A,ta,za;r.each(function(eb,uc){A=m(uc);ta=A.offset().left;if(eb)za[1]=ta;za=[ta];O[eb]=za});za[1]=ta+A.outerWidth();if(i("allDaySlot")){A= +$;ta=A.offset().top;h[0]=[ta,ta+A.outerHeight()]}for(var Da=I.offset().top,Ea=w.offset().top,tc=Ea+w.outerHeight(),fb=0;fb<tb;fb++)h.push([x(Da+Xa*fb),x(Da+Xa*(fb+1))])});Ra=new Ob(Na);cb=new Pb(function(h){return k.eq(h)})}function sc(){function a(o,s){sa(o);var v,F=o.length,r=[],J=[];for(v=0;v<F;v++)o[v].allDay?r.push(o[v]):J.push(o[v]);if(u("allDaySlot")){L(e(r),s);na()}g(d(J),s)}function b(){ha();ua().empty();pa().empty()}function e(o){o=ob(nb(o,m.map(o,Ua),q.visStart,q.visEnd));var s,v=o.length, +F,r,J,M=[];for(s=0;s<v;s++){F=o[s];for(r=0;r<F.length;r++){J=F[r];J.row=0;J.level=s;M.push(J)}}return M}function d(o){var s=z(),v=ka(),F=ca(),r=xa(N(q.visStart),v),J=m.map(o,f),M,k,D,Z,ja,ia,la=[];for(M=0;M<s;M++){k=ob(nb(o,J,r,xa(N(r),F-v)));vc(k);for(D=0;D<k.length;D++){Z=k[D];for(ja=0;ja<Z.length;ja++){ia=Z[ja];ia.col=M;ia.level=D;la.push(ia)}}ba(r,1,true)}return la}function f(o){return o.end?N(o.end):xa(N(o.start),u("defaultEventMinutes"))}function g(o,s){var v,F=o.length,r,J,M,k,D,Z,ja,ia,la, +$="",w,I,R={},V={},ea=pa(),aa;v=z();if(w=u("isRTL")){I=-1;aa=v-1}else{I=1;aa=0}for(v=0;v<F;v++){r=o[v];J=r.event;M=qa(r.start,r.start);k=qa(r.start,r.end);D=r.col;Z=r.level;ja=r.forward||0;ia=G(D*I+aa);la=p(D*I+aa)-ia;la=Math.min(la-6,la*0.95);D=Z?la/(Z+ja+1):ja?(la/(ja+1)-6)*2:la;Z=ia+la/(Z+ja+1)*Z*I+(w?la-D:0);r.top=M;r.left=Z;r.outerWidth=D;r.outerHeight=k-M;$+=l(J,r)}ea[0].innerHTML=$;w=ea.children();for(v=0;v<F;v++){r=o[v];J=r.event;$=m(w[v]);I=fa("eventRender",J,J,$);if(I===false)$.remove(); +else{if(I&&I!==true){$.remove();$=m(I).css({position:"absolute",top:r.top,left:r.left}).appendTo(ea)}r.element=$;if(J._id===s)t(J,$,r);else $[0]._fci=v;ya(J,$)}}Db(ea,o,t);for(v=0;v<F;v++){r=o[v];if($=r.element){J=R[s=r.key=Ib($[0])];r.vsides=J===ma?(R[s]=Sa($,true)):J;J=V[s];r.hsides=J===ma?(V[s]=pb($,true)):J;s=$.find("div.fc-event-content");if(s.length)r.contentTop=s[0].offsetTop}}for(v=0;v<F;v++){r=o[v];if($=r.element){$[0].style.width=Math.max(0,r.outerWidth-r.hsides)+"px";R=Math.max(0,r.outerHeight- +r.vsides);$[0].style.height=R+"px";J=r.event;if(r.contentTop!==ma&&R-r.contentTop<10){$.find("div.fc-event-time").text(Y(J.start,u("timeFormat"))+" - "+J.title);$.find("div.fc-event-title").remove()}fa("eventAfterRender",J,J,$)}}}function l(o,s){var v="<",F=o.url,r=Jb(o,u),J=r?" style='"+r+"'":"",M=["fc-event","fc-event-skin","fc-event-vert"];oa(o)&&M.push("fc-event-draggable");s.isStart&&M.push("fc-corner-top");s.isEnd&&M.push("fc-corner-bottom");M=M.concat(o.className);if(o.source)M=M.concat(o.source.className|| +[]);v+=F?"a href='"+Qa(o.url)+"'":"div";v+=" class='"+M.join(" ")+"' style='position:absolute;z-index:8;top:"+s.top+"px;left:"+s.left+"px;"+r+"'><div class='fc-event-inner fc-event-skin'"+J+"><div class='fc-event-head fc-event-skin'"+J+"><div class='fc-event-time'>"+Qa(W(o.start,o.end,u("timeFormat")))+"</div></div><div class='fc-event-content'><div class='fc-event-title'>"+Qa(o.title)+"</div></div><div class='fc-event-bg'></div></div>";if(s.isEnd&&ga(o))v+="<div class='ui-resizable-handle ui-resizable-s'>=</div>"; +v+="</"+(F?"a":"div")+">";return v}function j(o,s,v){oa(o)&&y(o,s,v.isStart);v.isEnd&&ga(o)&&c(o,s,v);da(o,s)}function t(o,s,v){var F=s.find("div.fc-event-time");oa(o)&&S(o,s,F);v.isEnd&&ga(o)&&Q(o,s,F);da(o,s)}function y(o,s,v){function F(){if(!M){s.width(r).height("").draggable("option","grid",null);M=true}}var r,J,M=true,k,D=u("isRTL")?-1:1,Z=U(),ja=H(),ia=T(),la=ka();s.draggable({zIndex:9,opacity:u("dragOpacity","month"),revertDuration:u("dragRevertDuration"),start:function($,w){fa("eventDragStart", +s,o,$,w);i(o,s);r=s.width();Z.start(function(I,R,V,ea){B();if(I){J=false;k=ea*D;if(I.row)if(v){if(M){s.width(ja-10);Eb(s,ia*Math.round((o.end?(o.end-o.start)/wc:u("defaultEventMinutes"))/u("slotMinutes")));s.draggable("option","grid",[ja,1]);M=false}}else J=true;else{E(ba(N(o.start),k),ba(Ua(o),k));F()}J=J||M&&!k}else{F();J=true}s.draggable("option","revert",J)},$,"drag")},stop:function($,w){Z.stop();B();fa("eventDragStop",s,o,$,w);if(J){F();s.css("filter","");K(o,s)}else{var I=0;M||(I=Math.round((s.offset().top- +X().offset().top)/ia)*u("slotMinutes")+la-(o.start.getHours()*60+o.start.getMinutes()));C(this,o,k,I,M,$,w)}}})}function S(o,s,v){function F(I){var R=xa(N(o.start),I),V;if(o.end)V=xa(N(o.end),I);v.text(W(R,V,u("timeFormat")))}function r(){if(M){v.css("display","");s.draggable("option","grid",[$,w]);M=false}}var J,M=false,k,D,Z,ja=u("isRTL")?-1:1,ia=U(),la=z(),$=H(),w=T();s.draggable({zIndex:9,scroll:false,grid:[$,w],axis:la==1?"y":false,opacity:u("dragOpacity"),revertDuration:u("dragRevertDuration"), +start:function(I,R){fa("eventDragStart",s,o,I,R);i(o,s);J=s.position();D=Z=0;ia.start(function(V,ea,aa,va){s.draggable("option","revert",!V);B();if(V){k=va*ja;if(u("allDaySlot")&&!V.row){if(!M){M=true;v.hide();s.draggable("option","grid",null)}E(ba(N(o.start),k),ba(Ua(o),k))}else r()}},I,"drag")},drag:function(I,R){D=Math.round((R.position.top-J.top)/w)*u("slotMinutes");if(D!=Z){M||F(D);Z=D}},stop:function(I,R){var V=ia.stop();B();fa("eventDragStop",s,o,I,R);if(V&&(k||D||M))C(this,o,k,M?0:D,M,I,R); +else{r();s.css("filter","");s.css(J);F(0);K(o,s)}}})}function Q(o,s,v){var F,r,J=T();s.resizable({handles:{s:"div.ui-resizable-s"},grid:J,start:function(M,k){F=r=0;i(o,s);s.css("z-index",9);fa("eventResizeStart",this,o,M,k)},resize:function(M,k){F=Math.round((Math.max(J,s.height())-k.originalSize.height)/J);if(F!=r){v.text(W(o.start,!F&&!o.end?null:xa(ra(o),u("slotMinutes")*F),u("timeFormat")));r=F}},stop:function(M,k){fa("eventResizeStop",this,o,M,k);if(F)P(this,o,0,u("slotMinutes")*F,M,k);else{s.css("z-index", +8);K(o,s)}}})}var q=this;q.renderEvents=a;q.compileDaySegs=e;q.clearEvents=b;q.slotSegHtml=l;q.bindDaySeg=j;Qb.call(q);var u=q.opt,fa=q.trigger,oa=q.isEventDraggable,ga=q.isEventResizable,ra=q.eventEnd,sa=q.reportEvents,ha=q.reportEventClear,da=q.eventElementHandlers,na=q.setHeight,ua=q.getDaySegmentContainer,pa=q.getSlotSegmentContainer,U=q.getHoverListener,ca=q.getMaxMinute,ka=q.getMinMinute,qa=q.timePosition,G=q.colContentLeft,p=q.colContentRight,L=q.renderDaySegs,c=q.resizableDayEvent,z=q.getColCnt, +H=q.getColWidth,T=q.getSlotHeight,X=q.getBodyContent,ya=q.reportEventElement,K=q.showEvents,i=q.hideEvents,C=q.eventDrop,P=q.eventResize,E=q.renderDayOverlay,B=q.clearOverlays,n=q.calendar,Y=n.formatDate,W=n.formatDates}function vc(a){var b,e,d,f,g,l;for(b=a.length-1;b>0;b--){f=a[b];for(e=0;e<f.length;e++){g=f[e];for(d=0;d<a[b-1].length;d++){l=a[b-1][d];if(Cb(g,l))l.forward=Math.max(l.forward||0,(g.forward||0)+1)}}}}function Kb(a,b,e){function d(G,p){G=qa[G];if(typeof G=="object")return jb(G,p||e); +return G}function f(G,p){return b.trigger.apply(b,[G,p||da].concat(Array.prototype.slice.call(arguments,2),[da]))}function g(G){return j(G)&&!d("disableDragging")}function l(G){return j(G)&&!d("disableResizing")}function j(G){return Ta(G.editable,(G.source||{}).editable,d("editable"))}function t(G){U={};var p,L=G.length,c;for(p=0;p<L;p++){c=G[p];if(U[c._id])U[c._id].push(c);else U[c._id]=[c]}}function y(G){return G.end?N(G.end):na(G)}function S(G,p){ca.push(p);if(ka[G._id])ka[G._id].push(p);else ka[G._id]= +[p]}function Q(){ca=[];ka={}}function q(G,p){p.click(function(L){if(!p.hasClass("ui-draggable-dragging")&&!p.hasClass("ui-resizable-resizing"))return f("eventClick",this,G,L)}).hover(function(L){f("eventMouseover",this,G,L)},function(L){f("eventMouseout",this,G,L)})}function u(G,p){oa(G,p,"show")}function fa(G,p){oa(G,p,"hide")}function oa(G,p,L){G=ka[G._id];var c,z=G.length;for(c=0;c<z;c++)if(!p||G[c][0]!=p[0])G[c][L]()}function ga(G,p,L,c,z,H,T){var X=p.allDay,ya=p._id;sa(U[ya],L,c,z);f("eventDrop", +G,p,L,c,z,function(){sa(U[ya],-L,-c,X);pa(ya)},H,T);pa(ya)}function ra(G,p,L,c,z,H){var T=p._id;ha(U[T],L,c);f("eventResize",G,p,L,c,function(){ha(U[T],-L,-c);pa(T)},z,H);pa(T)}function sa(G,p,L,c){L=L||0;for(var z,H=G.length,T=0;T<H;T++){z=G[T];if(c!==ma)z.allDay=c;xa(ba(z.start,p,true),L);if(z.end)z.end=xa(ba(z.end,p,true),L);ua(z,qa)}}function ha(G,p,L){L=L||0;for(var c,z=G.length,H=0;H<z;H++){c=G[H];c.end=xa(ba(y(c),p,true),L);ua(c,qa)}}var da=this;da.element=a;da.calendar=b;da.name=e;da.opt= +d;da.trigger=f;da.isEventDraggable=g;da.isEventResizable=l;da.reportEvents=t;da.eventEnd=y;da.reportEventElement=S;da.reportEventClear=Q;da.eventElementHandlers=q;da.showEvents=u;da.hideEvents=fa;da.eventDrop=ga;da.eventResize=ra;var na=da.defaultEventEnd,ua=b.normalizeEvent,pa=b.reportEventChange,U={},ca=[],ka={},qa=b.options}function Qb(){function a(i,C){var P=z(),E=pa(),B=U(),n=0,Y,W,o=i.length,s,v;P[0].innerHTML=e(i);d(i,P.children());f(i);g(i,P,C);l(i);j(i);t(i);C=y();for(P=0;P<E;P++){Y=[];for(W= +0;W<B;W++)Y[W]=0;for(;n<o&&(s=i[n]).row==P;){W=Hb(Y.slice(s.startCol,s.endCol));s.top=W;W+=s.outerHeight;for(v=s.startCol;v<s.endCol;v++)Y[v]=W;n++}C[P].height(Hb(Y))}Q(i,S(C))}function b(i,C,P){var E=m("<div/>"),B=z(),n=i.length,Y;E[0].innerHTML=e(i);E=E.children();B.append(E);d(i,E);l(i);j(i);t(i);Q(i,S(y()));E=[];for(B=0;B<n;B++)if(Y=i[B].element){i[B].row===C&&Y.css("top",P);E.push(Y[0])}return m(E)}function e(i){var C=fa("isRTL"),P,E=i.length,B,n,Y,W;P=ka();var o=P.left,s=P.right,v,F,r,J,M,k= +"";for(P=0;P<E;P++){B=i[P];n=B.event;W=["fc-event","fc-event-skin","fc-event-hori"];ga(n)&&W.push("fc-event-draggable");if(C){B.isStart&&W.push("fc-corner-right");B.isEnd&&W.push("fc-corner-left");v=p(B.end.getDay()-1);F=p(B.start.getDay());r=B.isEnd?qa(v):o;J=B.isStart?G(F):s}else{B.isStart&&W.push("fc-corner-left");B.isEnd&&W.push("fc-corner-right");v=p(B.start.getDay());F=p(B.end.getDay()-1);r=B.isStart?qa(v):o;J=B.isEnd?G(F):s}W=W.concat(n.className);if(n.source)W=W.concat(n.source.className|| +[]);Y=n.url;M=Jb(n,fa);k+=Y?"<a href='"+Qa(Y)+"'":"<div";k+=" class='"+W.join(" ")+"' style='position:absolute;z-index:8;left:"+r+"px;"+M+"'><div class='fc-event-inner fc-event-skin'"+(M?" style='"+M+"'":"")+">";if(!n.allDay&&B.isStart)k+="<span class='fc-event-time'>"+Qa(T(n.start,n.end,fa("timeFormat")))+"</span>";k+="<span class='fc-event-title'>"+Qa(n.title)+"</span></div>";if(B.isEnd&&ra(n))k+="<div class='ui-resizable-handle ui-resizable-"+(C?"w":"e")+"'>   </div>";k+="</"+(Y? +"a":"div")+">";B.left=r;B.outerWidth=J-r;B.startCol=v;B.endCol=F+1}return k}function d(i,C){var P,E=i.length,B,n,Y;for(P=0;P<E;P++){B=i[P];n=B.event;Y=m(C[P]);n=oa("eventRender",n,n,Y);if(n===false)Y.remove();else{if(n&&n!==true){n=m(n).css({position:"absolute",left:B.left});Y.replaceWith(n);Y=n}B.element=Y}}}function f(i){var C,P=i.length,E,B;for(C=0;C<P;C++){E=i[C];(B=E.element)&&ha(E.event,B)}}function g(i,C,P){var E,B=i.length,n,Y,W;for(E=0;E<B;E++){n=i[E];if(Y=n.element){W=n.event;if(W._id=== +P)H(W,Y,n);else Y[0]._fci=E}}Db(C,i,H)}function l(i){var C,P=i.length,E,B,n,Y,W={};for(C=0;C<P;C++){E=i[C];if(B=E.element){n=E.key=Ib(B[0]);Y=W[n];if(Y===ma)Y=W[n]=pb(B,true);E.hsides=Y}}}function j(i){var C,P=i.length,E,B;for(C=0;C<P;C++){E=i[C];if(B=E.element)B[0].style.width=Math.max(0,E.outerWidth-E.hsides)+"px"}}function t(i){var C,P=i.length,E,B,n,Y,W={};for(C=0;C<P;C++){E=i[C];if(B=E.element){n=E.key;Y=W[n];if(Y===ma)Y=W[n]=Fb(B);E.outerHeight=B[0].offsetHeight+Y}}}function y(){var i,C=pa(), +P=[];for(i=0;i<C;i++)P[i]=ca(i).find("td:first div.fc-day-content > div");return P}function S(i){var C,P=i.length,E=[];for(C=0;C<P;C++)E[C]=i[C][0].offsetTop;return E}function Q(i,C){var P,E=i.length,B,n;for(P=0;P<E;P++){B=i[P];if(n=B.element){n[0].style.top=C[B.row]+(B.top||0)+"px";B=B.event;oa("eventAfterRender",B,B,n)}}}function q(i,C,P){var E=fa("isRTL"),B=E?"w":"e",n=C.find("div.ui-resizable-"+B),Y=false;qb(C);C.mousedown(function(W){W.preventDefault()}).click(function(W){if(Y){W.preventDefault(); +W.stopImmediatePropagation()}});n.mousedown(function(W){function o(ia){oa("eventResizeStop",this,i,ia);m("body").css("cursor","");s.stop();ya();k&&ua(this,i,k,0,ia);setTimeout(function(){Y=false},0)}if(W.which==1){Y=true;var s=u.getHoverListener(),v=pa(),F=U(),r=E?-1:1,J=E?F-1:0,M=C.css("top"),k,D,Z=m.extend({},i),ja=L(i.start);K();m("body").css("cursor",B+"-resize").one("mouseup",o);oa("eventResizeStart",this,i,W);s.start(function(ia,la){if(ia){var $=Math.max(ja.row,ia.row);ia=ia.col;if(v==1)$=0; +if($==ja.row)ia=E?Math.min(ja.col,ia):Math.max(ja.col,ia);k=$*7+ia*r+J-(la.row*7+la.col*r+J);la=ba(sa(i),k,true);if(k){Z.end=la;$=D;D=b(c([Z]),P.row,M);D.find("*").css("cursor",B+"-resize");$&&$.remove();na(i)}else if(D){da(i);D.remove();D=null}ya();X(i.start,ba(N(la),1))}},W)}})}var u=this;u.renderDaySegs=a;u.resizableDayEvent=q;var fa=u.opt,oa=u.trigger,ga=u.isEventDraggable,ra=u.isEventResizable,sa=u.eventEnd,ha=u.reportEventElement,da=u.showEvents,na=u.hideEvents,ua=u.eventResize,pa=u.getRowCnt, +U=u.getColCnt,ca=u.allDayRow,ka=u.allDayBounds,qa=u.colContentLeft,G=u.colContentRight,p=u.dayOfWeekCol,L=u.dateCell,c=u.compileDaySegs,z=u.getDaySegmentContainer,H=u.bindDaySeg,T=u.calendar.formatDates,X=u.renderDayOverlay,ya=u.clearOverlays,K=u.clearSelection}function Mb(){function a(Q,q,u){b();q||(q=j(Q,u));t(Q,q,u);e(Q,q,u)}function b(Q){if(S){S=false;y();l("unselect",null,Q)}}function e(Q,q,u,fa){S=true;l("select",null,Q,q,u,fa)}function d(Q){var q=f.cellDate,u=f.cellIsAllDay,fa=f.getHoverListener(), +oa=f.reportDayClick;if(Q.which==1&&g("selectable")){b(Q);var ga;fa.start(function(ra,sa){y();if(ra&&u(ra)){ga=[q(sa),q(ra)].sort(Gb);t(ga[0],ga[1],true)}else ga=null},Q);m(document).one("mouseup",function(ra){fa.stop();if(ga){+ga[0]==+ga[1]&&oa(ga[0],true,ra);e(ga[0],ga[1],true,ra)}})}}var f=this;f.select=a;f.unselect=b;f.reportSelection=e;f.daySelectionMousedown=d;var g=f.opt,l=f.trigger,j=f.defaultSelectionEnd,t=f.renderSelection,y=f.clearSelection,S=false;g("selectable")&&g("unselectAuto")&&m(document).mousedown(function(Q){var q= +g("unselectCancel");if(q)if(m(Q.target).parents(q).length)return;b(Q)})}function Lb(){function a(g,l){var j=f.shift();j||(j=m("<div class='fc-cell-overlay' style='position:absolute;z-index:3'/>"));j[0].parentNode!=l[0]&&j.appendTo(l);d.push(j.css(g).show());return j}function b(){for(var g;g=d.shift();)f.push(g.hide().unbind())}var e=this;e.renderOverlay=a;e.clearOverlays=b;var d=[],f=[]}function Nb(a){var b=this,e,d;b.build=function(){e=[];d=[];a(e,d)};b.cell=function(f,g){var l=e.length,j=d.length, +t,y=-1,S=-1;for(t=0;t<l;t++)if(g>=e[t][0]&&g<e[t][1]){y=t;break}for(t=0;t<j;t++)if(f>=d[t][0]&&f<d[t][1]){S=t;break}return y>=0&&S>=0?{row:y,col:S}:null};b.rect=function(f,g,l,j,t){t=t.offset();return{top:e[f][0]-t.top,left:d[g][0]-t.left,width:d[j][1]-d[g][0],height:e[l][1]-e[f][0]}}}function Ob(a){function b(j){xc(j);j=a.cell(j.pageX,j.pageY);if(!j!=!l||j&&(j.row!=l.row||j.col!=l.col)){if(j){g||(g=j);f(j,g,j.row-g.row,j.col-g.col)}else f(j,g);l=j}}var e=this,d,f,g,l;e.start=function(j,t,y){f=j; +g=l=null;a.build();b(t);d=y||"mousemove";m(document).bind(d,b)};e.stop=function(){m(document).unbind(d,b);return l}}function xc(a){if(a.pageX===ma){a.pageX=a.originalEvent.pageX;a.pageY=a.originalEvent.pageY}}function Pb(a){function b(l){return d[l]=d[l]||a(l)}var e=this,d={},f={},g={};e.left=function(l){return f[l]=f[l]===ma?b(l).position().left:f[l]};e.right=function(l){return g[l]=g[l]===ma?e.left(l)+b(l).width():g[l]};e.clear=function(){d={};f={};g={}}}var Ya={defaultView:"month",aspectRatio:1.35, +header:{left:"title",center:"",right:"today prev,next"},weekends:true,allDayDefault:true,ignoreTimezone:true,lazyFetching:true,startParam:"start",endParam:"end",titleFormat:{month:"MMMM yyyy",week:"MMM d[ yyyy]{ '—'[ MMM] d yyyy}",day:"dddd, MMM d, yyyy"},columnFormat:{month:"ddd",week:"ddd M/d",day:"dddd M/d"},timeFormat:{"":"h(:mm)t"},isRTL:false,firstDay:0,monthNames:["January","February","March","April","May","June","July","August","September","October","November","December"],monthNamesShort:["Jan", +"Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],dayNames:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],dayNamesShort:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],buttonText:{prev:" ◄ ",next:" ► ",prevYear:" << ",nextYear:" >> ",today:"today",month:"month",week:"week",day:"day"},theme:false,buttonIcons:{prev:"circle-triangle-w",next:"circle-triangle-e"},unselectAuto:true,dropAccept:"*"},yc= +{header:{left:"next,prev today",center:"",right:"title"},buttonText:{prev:" ► ",next:" ◄ ",prevYear:" >> ",nextYear:" << "},buttonIcons:{prev:"circle-triangle-e",next:"circle-triangle-w"}},Aa=m.fullCalendar={version:"1.5.3"},Ja=Aa.views={};m.fn.fullCalendar=function(a){if(typeof a=="string"){var b=Array.prototype.slice.call(arguments,1),e;this.each(function(){var f=m.data(this,"fullCalendar");if(f&&m.isFunction(f[a])){f=f[a].apply(f, +b);if(e===ma)e=f;a=="destroy"&&m.removeData(this,"fullCalendar")}});if(e!==ma)return e;return this}var d=a.eventSources||[];delete a.eventSources;if(a.events){d.push(a.events);delete a.events}a=m.extend(true,{},Ya,a.isRTL||a.isRTL===ma&&Ya.isRTL?yc:{},a);this.each(function(f,g){f=m(g);g=new Yb(f,a,d);f.data("fullCalendar",g);g.render()});return this};Aa.sourceNormalizers=[];Aa.sourceFetchers=[];var ac={dataType:"json",cache:false},bc=1;Aa.addDays=ba;Aa.cloneDate=N;Aa.parseDate=kb;Aa.parseISO8601= +Bb;Aa.parseTime=mb;Aa.formatDate=Oa;Aa.formatDates=ib;var lc=["sun","mon","tue","wed","thu","fri","sat"],Ab=864E5,cc=36E5,wc=6E4,dc={s:function(a){return a.getSeconds()},ss:function(a){return Pa(a.getSeconds())},m:function(a){return a.getMinutes()},mm:function(a){return Pa(a.getMinutes())},h:function(a){return a.getHours()%12||12},hh:function(a){return Pa(a.getHours()%12||12)},H:function(a){return a.getHours()},HH:function(a){return Pa(a.getHours())},d:function(a){return a.getDate()},dd:function(a){return Pa(a.getDate())}, +ddd:function(a,b){return b.dayNamesShort[a.getDay()]},dddd:function(a,b){return b.dayNames[a.getDay()]},M:function(a){return a.getMonth()+1},MM:function(a){return Pa(a.getMonth()+1)},MMM:function(a,b){return b.monthNamesShort[a.getMonth()]},MMMM:function(a,b){return b.monthNames[a.getMonth()]},yy:function(a){return(a.getFullYear()+"").substring(2)},yyyy:function(a){return a.getFullYear()},t:function(a){return a.getHours()<12?"a":"p"},tt:function(a){return a.getHours()<12?"am":"pm"},T:function(a){return a.getHours()< +12?"A":"P"},TT:function(a){return a.getHours()<12?"AM":"PM"},u:function(a){return Oa(a,"yyyy-MM-dd'T'HH:mm:ss'Z'")},S:function(a){a=a.getDate();if(a>10&&a<20)return"th";return["st","nd","rd"][a%10-1]||"th"}};Aa.applyAll=$a;Ja.month=mc;Ja.basicWeek=nc;Ja.basicDay=oc;wb({weekMode:"fixed"});Ja.agendaWeek=qc;Ja.agendaDay=rc;wb({allDaySlot:true,allDayText:"all-day",firstHour:6,slotMinutes:30,defaultEventMinutes:120,axisFormat:"h(:mm)tt",timeFormat:{agenda:"h:mm{ - h:mm}"},dragOpacity:{agenda:0.5},minTime:0, +maxTime:24})})(jQuery); diff --git a/views/default/js/event_calendar/fullcalendar.php b/views/default/js/event_calendar/fullcalendar.php new file mode 100644 index 000000000..a3cd090a0 --- /dev/null +++ b/views/default/js/event_calendar/fullcalendar.php @@ -0,0 +1,5228 @@ + +//<script> +/** + * @preserve + * FullCalendar v1.5.3 + * http://arshaw.com/fullcalendar/ + * + * Use fullcalendar.css for basic styling. + * For event drag & drop, requires jQuery UI draggable. + * For event resizing, requires jQuery UI resizable. + * + * Copyright (c) 2011 Adam Shaw + * Dual licensed under the MIT and GPL licenses, located in + * MIT-LICENSE.txt and GPL-LICENSE.txt respectively. + * + * Date: Mon Feb 6 22:40:40 2012 -0800 + * + */ + +(function($, undefined) { + + +var defaults = { + + // display + defaultView: 'month', + aspectRatio: 1.35, + header: { + left: 'title', + center: '', + right: 'today prev,next' + }, + weekends: true, + + // editing + //editable: false, + //disableDragging: false, + //disableResizing: false, + + allDayDefault: true, + ignoreTimezone: true, + + // event ajax + lazyFetching: true, + startParam: 'start', + endParam: 'end', + + // time formats + titleFormat: { + month: 'MMMM yyyy', + week: "MMM d[ yyyy]{ '—'[ MMM] d yyyy}", + day: 'dddd, MMM d, yyyy' + }, + columnFormat: { + month: 'ddd', + week: 'ddd M/d', + day: 'dddd M/d' + }, + timeFormat: { // for event elements + '': 'h(:mm)t' // default + }, + + // locale + isRTL: false, + firstDay: 0, + monthNames: ['January','February','March','April','May','June','July','August','September','October','November','December'], + monthNamesShort: ['Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec'], + dayNames: ['Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday'], + dayNamesShort: ['Sun','Mon','Tue','Wed','Thu','Fri','Sat'], + buttonText: { + prev: ' ◄ ', + next: ' ► ', + prevYear: ' << ', + nextYear: ' >> ', + today: 'today', + month: 'month', + week: 'week', + day: 'day' + }, + + // jquery-ui theming + theme: false, + buttonIcons: { + prev: 'circle-triangle-w', + next: 'circle-triangle-e' + }, + + //selectable: false, + unselectAuto: true, + + dropAccept: '*' + +}; + +// right-to-left defaults +var rtlDefaults = { + header: { + left: 'next,prev today', + center: '', + right: 'title' + }, + buttonText: { + prev: ' ► ', + next: ' ◄ ', + prevYear: ' >> ', + nextYear: ' << ' + }, + buttonIcons: { + prev: 'circle-triangle-e', + next: 'circle-triangle-w' + } +}; + + + +var fc = $.fullCalendar = { version: "1.5.3" }; +var fcViews = fc.views = {}; + + +$.fn.fullCalendar = function(options) { + + + // method calling + if (typeof options == 'string') { + var args = Array.prototype.slice.call(arguments, 1); + var res; + this.each(function() { + var calendar = $.data(this, 'fullCalendar'); + if (calendar && $.isFunction(calendar[options])) { + var r = calendar[options].apply(calendar, args); + if (res === undefined) { + res = r; + } + if (options == 'destroy') { + $.removeData(this, 'fullCalendar'); + } + } + }); + if (res !== undefined) { + return res; + } + return this; + } + + + // would like to have this logic in EventManager, but needs to happen before options are recursively extended + var eventSources = options.eventSources || []; + delete options.eventSources; + if (options.events) { + eventSources.push(options.events); + delete options.events; + } + + + options = $.extend(true, {}, + defaults, + (options.isRTL || options.isRTL===undefined && defaults.isRTL) ? rtlDefaults : {}, + options + ); + + + this.each(function(i, _element) { + var element = $(_element); + var calendar = new Calendar(element, options, eventSources); + element.data('fullCalendar', calendar); // TODO: look into memory leak implications + calendar.render(); + }); + + + return this; + +}; + + +// function for adding/overriding defaults +function setDefaults(d) { + $.extend(true, defaults, d); +} + + + + +function Calendar(element, options, eventSources) { + var t = this; + + + // exports + t.options = options; + t.render = render; + t.destroy = destroy; + t.refetchEvents = refetchEvents; + t.reportEvents = reportEvents; + t.reportEventChange = reportEventChange; + t.rerenderEvents = rerenderEvents; + t.changeView = changeView; + t.select = select; + t.unselect = unselect; + t.prev = prev; + t.next = next; + t.prevYear = prevYear; + t.nextYear = nextYear; + t.today = today; + t.gotoDate = gotoDate; + t.incrementDate = incrementDate; + t.formatDate = function(format, date) { return formatDate(format, date, options) }; + t.formatDates = function(format, date1, date2) { return formatDates(format, date1, date2, options) }; + t.getDate = getDate; + t.getView = getView; + t.option = option; + t.trigger = trigger; + + + // imports + EventManager.call(t, options, eventSources); + var isFetchNeeded = t.isFetchNeeded; + var fetchEvents = t.fetchEvents; + + + // locals + var _element = element[0]; + var header; + var headerElement; + var content; + var tm; // for making theme classes + var currentView; + var viewInstances = {}; + var elementOuterWidth; + var suggestedViewHeight; + var absoluteViewElement; + var resizeUID = 0; + var ignoreWindowResize = 0; + var date = new Date(); + var events = []; + var _dragElement; + + + + /* Main Rendering + -----------------------------------------------------------------------------*/ + + + setYMD(date, options.year, options.month, options.date); + + + function render(inc) { + if (!content) { + initialRender(); + }else{ + calcSize(); + markSizesDirty(); + markEventsDirty(); + renderView(inc); + } + } + + + function initialRender() { + tm = options.theme ? 'ui' : 'fc'; + element.addClass('fc'); + if (options.isRTL) { + element.addClass('fc-rtl'); + } + if (options.theme) { + element.addClass('ui-widget'); + } + content = $("<div class='fc-content' style='position:relative'/>") + .prependTo(element); + header = new Header(t, options); + headerElement = header.render(); + if (headerElement) { + element.prepend(headerElement); + } + changeView(options.defaultView); + $(window).resize(windowResize); + // needed for IE in a 0x0 iframe, b/c when it is resized, never triggers a windowResize + if (!bodyVisible()) { + lateRender(); + } + } + + + // called when we know the calendar couldn't be rendered when it was initialized, + // but we think it's ready now + function lateRender() { + setTimeout(function() { // IE7 needs this so dimensions are calculated correctly + if (!currentView.start && bodyVisible()) { // !currentView.start makes sure this never happens more than once + renderView(); + } + },0); + } + + + function destroy() { + $(window).unbind('resize', windowResize); + header.destroy(); + content.remove(); + element.removeClass('fc fc-rtl ui-widget'); + } + + + + function elementVisible() { + return _element.offsetWidth !== 0; + } + + + function bodyVisible() { + return $('body')[0].offsetWidth !== 0; + } + + + + /* View Rendering + -----------------------------------------------------------------------------*/ + + // TODO: improve view switching (still weird transition in IE, and FF has whiteout problem) + + function changeView(newViewName) { + if (!currentView || newViewName != currentView.name) { + ignoreWindowResize++; // because setMinHeight might change the height before render (and subsequently setSize) is reached + + unselect(); + + var oldView = currentView; + var newViewElement; + + if (oldView) { + (oldView.beforeHide || noop)(); // called before changing min-height. if called after, scroll state is reset (in Opera) + setMinHeight(content, content.height()); + oldView.element.hide(); + }else{ + setMinHeight(content, 1); // needs to be 1 (not 0) for IE7, or else view dimensions miscalculated + } + content.css('overflow', 'hidden'); + + currentView = viewInstances[newViewName]; + if (currentView) { + currentView.element.show(); + }else{ + currentView = viewInstances[newViewName] = new fcViews[newViewName]( + newViewElement = absoluteViewElement = + $("<div class='fc-view fc-view-" + newViewName + "' style='position:absolute'/>") + .appendTo(content), + t // the calendar object + ); + } + + if (oldView) { + header.deactivateButton(oldView.name); + } + header.activateButton(newViewName); + + renderView(); // after height has been set, will make absoluteViewElement's position=relative, then set to null + + content.css('overflow', ''); + if (oldView) { + setMinHeight(content, 1); + } + + if (!newViewElement) { + (currentView.afterShow || noop)(); // called after setting min-height/overflow, so in final scroll state (for Opera) + } + + ignoreWindowResize--; + } + } + + + + function renderView(inc) { + if (elementVisible()) { + ignoreWindowResize++; // because renderEvents might temporarily change the height before setSize is reached + + unselect(); + + if (suggestedViewHeight === undefined) { + calcSize(); + } + + var forceEventRender = false; + if (!currentView.start || inc || date < currentView.start || date >= currentView.end) { + // view must render an entire new date range (and refetch/render events) + currentView.render(date, inc || 0); // responsible for clearing events + setSize(true); + forceEventRender = true; + } + else if (currentView.sizeDirty) { + // view must resize (and rerender events) + currentView.clearEvents(); + setSize(); + forceEventRender = true; + } + else if (currentView.eventsDirty) { + currentView.clearEvents(); + forceEventRender = true; + } + currentView.sizeDirty = false; + currentView.eventsDirty = false; + updateEvents(forceEventRender); + + elementOuterWidth = element.outerWidth(); + + header.updateTitle(currentView.title); + var today = new Date(); + if (today >= currentView.start && today < currentView.end) { + header.disableButton('today'); + }else{ + header.enableButton('today'); + } + + ignoreWindowResize--; + currentView.trigger('viewDisplay', _element); + } + } + + + + /* Resizing + -----------------------------------------------------------------------------*/ + + + function updateSize() { + markSizesDirty(); + if (elementVisible()) { + calcSize(); + setSize(); + unselect(); + currentView.clearEvents(); + currentView.renderEvents(events); + currentView.sizeDirty = false; + } + } + + + function markSizesDirty() { + $.each(viewInstances, function(i, inst) { + inst.sizeDirty = true; + }); + } + + + function calcSize() { + if (options.contentHeight) { + suggestedViewHeight = options.contentHeight; + } + else if (options.height) { + suggestedViewHeight = options.height - (headerElement ? headerElement.height() : 0) - vsides(content); + } + else { + suggestedViewHeight = Math.round(content.width() / Math.max(options.aspectRatio, .5)); + } + } + + + function setSize(dateChanged) { // todo: dateChanged? + ignoreWindowResize++; + currentView.setHeight(suggestedViewHeight, dateChanged); + if (absoluteViewElement) { + absoluteViewElement.css('position', 'relative'); + absoluteViewElement = null; + } + currentView.setWidth(content.width(), dateChanged); + ignoreWindowResize--; + } + + + function windowResize() { + if (!ignoreWindowResize) { + if (currentView.start) { // view has already been rendered + var uid = ++resizeUID; + setTimeout(function() { // add a delay + if (uid == resizeUID && !ignoreWindowResize && elementVisible()) { + if (elementOuterWidth != (elementOuterWidth = element.outerWidth())) { + ignoreWindowResize++; // in case the windowResize callback changes the height + updateSize(); + currentView.trigger('windowResize', _element); + ignoreWindowResize--; + } + } + }, 200); + }else{ + // calendar must have been initialized in a 0x0 iframe that has just been resized + lateRender(); + } + } + } + + + + /* Event Fetching/Rendering + -----------------------------------------------------------------------------*/ + + + // fetches events if necessary, rerenders events if necessary (or if forced) + function updateEvents(forceRender) { + if (!options.lazyFetching || isFetchNeeded(currentView.visStart, currentView.visEnd)) { + refetchEvents(); + } + else if (forceRender) { + rerenderEvents(); + } + } + + + function refetchEvents() { + fetchEvents(currentView.visStart, currentView.visEnd); // will call reportEvents + } + + + // called when event data arrives + function reportEvents(_events) { + events = _events; + rerenderEvents(); + } + + + // called when a single event's data has been changed + function reportEventChange(eventID) { + rerenderEvents(eventID); + } + + + // attempts to rerenderEvents + function rerenderEvents(modifiedEventID) { + markEventsDirty(); + if (elementVisible()) { + currentView.clearEvents(); + currentView.renderEvents(events, modifiedEventID); + currentView.eventsDirty = false; + } + } + + + function markEventsDirty() { + $.each(viewInstances, function(i, inst) { + inst.eventsDirty = true; + }); + } + + + + /* Selection + -----------------------------------------------------------------------------*/ + + + function select(start, end, allDay) { + currentView.select(start, end, allDay===undefined ? true : allDay); + } + + + function unselect() { // safe to be called before renderView + if (currentView) { + currentView.unselect(); + } + } + + + + /* Date + -----------------------------------------------------------------------------*/ + + + function prev() { + renderView(-1); + } + + + function next() { + renderView(1); + } + + + function prevYear() { + addYears(date, -1); + renderView(); + } + + + function nextYear() { + addYears(date, 1); + renderView(); + } + + + function today() { + date = new Date(); + renderView(); + } + + + function gotoDate(year, month, dateOfMonth) { + if (year instanceof Date) { + date = cloneDate(year); // provided 1 argument, a Date + }else{ + setYMD(date, year, month, dateOfMonth); + } + renderView(); + } + + + function incrementDate(years, months, days) { + if (years !== undefined) { + addYears(date, years); + } + if (months !== undefined) { + addMonths(date, months); + } + if (days !== undefined) { + addDays(date, days); + } + renderView(); + } + + + function getDate() { + return cloneDate(date); + } + + + + /* Misc + -----------------------------------------------------------------------------*/ + + + function getView() { + return currentView; + } + + + function option(name, value) { + if (value === undefined) { + return options[name]; + } + if (name == 'height' || name == 'contentHeight' || name == 'aspectRatio') { + options[name] = value; + updateSize(); + } + } + + + function trigger(name, thisObj) { + if (options[name]) { + return options[name].apply( + thisObj || _element, + Array.prototype.slice.call(arguments, 2) + ); + } + } + + + + /* External Dragging + ------------------------------------------------------------------------*/ + + if (options.droppable) { + $(document) + .bind('dragstart', function(ev, ui) { + var _e = ev.target; + var e = $(_e); + if (!e.parents('.fc').length) { // not already inside a calendar + var accept = options.dropAccept; + if ($.isFunction(accept) ? accept.call(_e, e) : e.is(accept)) { + _dragElement = _e; + currentView.dragStart(_dragElement, ev, ui); + } + } + }) + .bind('dragstop', function(ev, ui) { + if (_dragElement) { + currentView.dragStop(_dragElement, ev, ui); + _dragElement = null; + } + }); + } + + +} + +function Header(calendar, options) { + var t = this; + + + // exports + t.render = render; + t.destroy = destroy; + t.updateTitle = updateTitle; + t.activateButton = activateButton; + t.deactivateButton = deactivateButton; + t.disableButton = disableButton; + t.enableButton = enableButton; + + + // locals + var element = $([]); + var tm; + + + + function render() { + tm = options.theme ? 'ui' : 'fc'; + var sections = options.header; + if (sections) { + element = $("<table class='fc-header' style='width:100%'/>") + .append( + $("<tr/>") + .append(renderSection('left')) + .append(renderSection('center')) + .append(renderSection('right')) + ); + return element; + } + } + + + function destroy() { + element.remove(); + } + + + function renderSection(position) { + var e = $("<td class='fc-header-" + position + "'/>"); + var buttonStr = options.header[position]; + if (buttonStr) { + $.each(buttonStr.split(' '), function(i) { + if (i > 0) { + e.append("<span class='fc-header-space'/>"); + } + var prevButton; + $.each(this.split(','), function(j, buttonName) { + if (buttonName == 'title') { + e.append("<span class='fc-header-title'><h2> </h2></span>"); + if (prevButton) { + prevButton.addClass(tm + '-corner-right'); + } + prevButton = null; + }else{ + var buttonClick; + if (calendar[buttonName]) { + buttonClick = calendar[buttonName]; // calendar method + } + else if (fcViews[buttonName]) { + buttonClick = function() { + button.removeClass(tm + '-state-hover'); // forget why + calendar.changeView(buttonName); + }; + } + if (buttonClick) { + var icon = options.theme ? smartProperty(options.buttonIcons, buttonName) : null; // why are we using smartProperty here? + var text = smartProperty(options.buttonText, buttonName); // why are we using smartProperty here? + var button = $( + "<span class='fc-button fc-button-" + buttonName + " " + tm + "-state-default'>" + + "<span class='fc-button-inner'>" + + "<span class='fc-button-content'>" + + (icon ? + "<span class='fc-icon-wrap'>" + + "<span class='ui-icon ui-icon-" + icon + "'/>" + + "</span>" : + text + ) + + "</span>" + + "<span class='fc-button-effect'><span></span></span>" + + "</span>" + + "</span>" + ); + if (button) { + button + .click(function() { + if (!button.hasClass(tm + '-state-disabled')) { + buttonClick(); + } + }) + .mousedown(function() { + button + .not('.' + tm + '-state-active') + .not('.' + tm + '-state-disabled') + .addClass(tm + '-state-down'); + }) + .mouseup(function() { + button.removeClass(tm + '-state-down'); + }) + .hover( + function() { + button + .not('.' + tm + '-state-active') + .not('.' + tm + '-state-disabled') + .addClass(tm + '-state-hover'); + }, + function() { + button + .removeClass(tm + '-state-hover') + .removeClass(tm + '-state-down'); + } + ) + .appendTo(e); + if (!prevButton) { + button.addClass(tm + '-corner-left'); + } + prevButton = button; + } + } + } + }); + if (prevButton) { + prevButton.addClass(tm + '-corner-right'); + } + }); + } + return e; + } + + + function updateTitle(html) { + element.find('h2') + .html(html); + } + + + function activateButton(buttonName) { + element.find('span.fc-button-' + buttonName) + .addClass(tm + '-state-active'); + } + + + function deactivateButton(buttonName) { + element.find('span.fc-button-' + buttonName) + .removeClass(tm + '-state-active'); + } + + + function disableButton(buttonName) { + element.find('span.fc-button-' + buttonName) + .addClass(tm + '-state-disabled'); + } + + + function enableButton(buttonName) { + element.find('span.fc-button-' + buttonName) + .removeClass(tm + '-state-disabled'); + } + + +} + +fc.sourceNormalizers = []; +fc.sourceFetchers = []; + +var ajaxDefaults = { + dataType: 'json', + cache: false +}; + +var eventGUID = 1; + + +function EventManager(options, _sources) { + var t = this; + + + // exports + t.isFetchNeeded = isFetchNeeded; + t.fetchEvents = fetchEvents; + t.addEventSource = addEventSource; + t.removeEventSource = removeEventSource; + t.updateEvent = updateEvent; + t.renderEvent = renderEvent; + t.removeEvents = removeEvents; + t.clientEvents = clientEvents; + t.normalizeEvent = normalizeEvent; + + + // imports + var trigger = t.trigger; + var getView = t.getView; + var reportEvents = t.reportEvents; + + + // locals + var stickySource = { events: [] }; + var sources = [ stickySource ]; + var rangeStart, rangeEnd; + var currentFetchID = 0; + var pendingSourceCnt = 0; + var loadingLevel = 0; + var cache = []; + + + for (var i=0; i<_sources.length; i++) { + _addEventSource(_sources[i]); + } + + + + /* Fetching + -----------------------------------------------------------------------------*/ + + + function isFetchNeeded(start, end) { + return !rangeStart || start < rangeStart || end > rangeEnd; + } + + + function fetchEvents(start, end) { + rangeStart = start; + rangeEnd = end; + cache = []; + var fetchID = ++currentFetchID; + var len = sources.length; + pendingSourceCnt = len; + for (var i=0; i<len; i++) { + fetchEventSource(sources[i], fetchID); + } + } + + + function fetchEventSource(source, fetchID) { + _fetchEventSource(source, function(events) { + if (fetchID == currentFetchID) { + if (events) { + for (var i=0; i<events.length; i++) { + events[i].source = source; + normalizeEvent(events[i]); + } + cache = cache.concat(events); + } + pendingSourceCnt--; + if (!pendingSourceCnt) { + reportEvents(cache); + } + } + }); + } + + + function _fetchEventSource(source, callback) { + var i; + var fetchers = fc.sourceFetchers; + var res; + for (i=0; i<fetchers.length; i++) { + res = fetchers[i](source, rangeStart, rangeEnd, callback); + if (res === true) { + // the fetcher is in charge. made its own async request + return; + } + else if (typeof res == 'object') { + // the fetcher returned a new source. process it + _fetchEventSource(res, callback); + return; + } + } + var events = source.events; + if (events) { + if ($.isFunction(events)) { + pushLoading(); + events(cloneDate(rangeStart), cloneDate(rangeEnd), function(events) { + callback(events); + popLoading(); + }); + } + else if ($.isArray(events)) { + callback(events); + } + else { + callback(); + } + }else{ + var url = source.url; + if (url) { + var success = source.success; + var error = source.error; + var complete = source.complete; + var data = $.extend({}, source.data || {}); + var startParam = firstDefined(source.startParam, options.startParam); + var endParam = firstDefined(source.endParam, options.endParam); + if (startParam) { + data[startParam] = Math.round(+rangeStart / 1000); + } + if (endParam) { + data[endParam] = Math.round(+rangeEnd / 1000); + } + pushLoading(); + $.ajax($.extend({}, ajaxDefaults, source, { + data: data, + success: function(events) { + events = events || []; + var res = applyAll(success, this, arguments); + if ($.isArray(res)) { + events = res; + } + callback(events); + }, + error: function() { + applyAll(error, this, arguments); + callback(); + }, + complete: function() { + applyAll(complete, this, arguments); + popLoading(); + } + })); + }else{ + callback(); + } + } + } + + + + /* Sources + -----------------------------------------------------------------------------*/ + + + function addEventSource(source) { + source = _addEventSource(source); + if (source) { + pendingSourceCnt++; + fetchEventSource(source, currentFetchID); // will eventually call reportEvents + } + } + + + function _addEventSource(source) { + if ($.isFunction(source) || $.isArray(source)) { + source = { events: source }; + } + else if (typeof source == 'string') { + source = { url: source }; + } + if (typeof source == 'object') { + normalizeSource(source); + sources.push(source); + return source; + } + } + + + function removeEventSource(source) { + sources = $.grep(sources, function(src) { + return !isSourcesEqual(src, source); + }); + // remove all client events from that source + cache = $.grep(cache, function(e) { + return !isSourcesEqual(e.source, source); + }); + reportEvents(cache); + } + + + + /* Manipulation + -----------------------------------------------------------------------------*/ + + + function updateEvent(event) { // update an existing event + var i, len = cache.length, e, + defaultEventEnd = getView().defaultEventEnd, // getView??? + startDelta = event.start - event._start, + endDelta = event.end ? + (event.end - (event._end || defaultEventEnd(event))) // event._end would be null if event.end + : 0; // was null and event was just resized + for (i=0; i<len; i++) { + e = cache[i]; + if (e._id == event._id && e != event) { + e.start = new Date(+e.start + startDelta); + if (event.end) { + if (e.end) { + e.end = new Date(+e.end + endDelta); + }else{ + e.end = new Date(+defaultEventEnd(e) + endDelta); + } + }else{ + e.end = null; + } + e.title = event.title; + e.url = event.url; + e.allDay = event.allDay; + e.className = event.className; + e.editable = event.editable; + e.color = event.color; + e.backgroudColor = event.backgroudColor; + e.borderColor = event.borderColor; + e.textColor = event.textColor; + normalizeEvent(e); + } + } + normalizeEvent(event); + reportEvents(cache); + } + + + function renderEvent(event, stick) { + normalizeEvent(event); + if (!event.source) { + if (stick) { + stickySource.events.push(event); + event.source = stickySource; + } + cache.push(event); + } + reportEvents(cache); + } + + + function removeEvents(filter) { + if (!filter) { // remove all + cache = []; + // clear all array sources + for (var i=0; i<sources.length; i++) { + if ($.isArray(sources[i].events)) { + sources[i].events = []; + } + } + }else{ + if (!$.isFunction(filter)) { // an event ID + var id = filter + ''; + filter = function(e) { + return e._id == id; + }; + } + cache = $.grep(cache, filter, true); + // remove events from array sources + for (var i=0; i<sources.length; i++) { + if ($.isArray(sources[i].events)) { + sources[i].events = $.grep(sources[i].events, filter, true); + } + } + } + reportEvents(cache); + } + + + function clientEvents(filter) { + if ($.isFunction(filter)) { + return $.grep(cache, filter); + } + else if (filter) { // an event ID + filter += ''; + return $.grep(cache, function(e) { + return e._id == filter; + }); + } + return cache; // else, return all + } + + + + /* Loading State + -----------------------------------------------------------------------------*/ + + + function pushLoading() { + if (!loadingLevel++) { + trigger('loading', null, true); + } + } + + + function popLoading() { + if (!--loadingLevel) { + trigger('loading', null, false); + } + } + + + + /* Event Normalization + -----------------------------------------------------------------------------*/ + + + function normalizeEvent(event) { + var source = event.source || {}; + var ignoreTimezone = firstDefined(source.ignoreTimezone, options.ignoreTimezone); + event._id = event._id || (event.id === undefined ? '_fc' + eventGUID++ : event.id + ''); + if (event.date) { + if (!event.start) { + event.start = event.date; + } + delete event.date; + } + event._start = cloneDate(event.start = parseDate(event.start, ignoreTimezone)); + event.end = parseDate(event.end, ignoreTimezone); + if (event.end && event.end <= event.start) { + event.end = null; + } + event._end = event.end ? cloneDate(event.end) : null; + if (event.allDay === undefined) { + event.allDay = firstDefined(source.allDayDefault, options.allDayDefault); + } + if (event.className) { + if (typeof event.className == 'string') { + event.className = event.className.split(/\s+/); + } + }else{ + event.className = []; + } + // TODO: if there is no start date, return false to indicate an invalid event + } + + + + /* Utils + ------------------------------------------------------------------------------*/ + + + function normalizeSource(source) { + if (source.className) { + // TODO: repeat code, same code for event classNames + if (typeof source.className == 'string') { + source.className = source.className.split(/\s+/); + } + }else{ + source.className = []; + } + var normalizers = fc.sourceNormalizers; + for (var i=0; i<normalizers.length; i++) { + normalizers[i](source); + } + } + + + function isSourcesEqual(source1, source2) { + return source1 && source2 && getSourcePrimitive(source1) == getSourcePrimitive(source2); + } + + + function getSourcePrimitive(source) { + return ((typeof source == 'object') ? (source.events || source.url) : '') || source; + } + + +} + + +fc.addDays = addDays; +fc.cloneDate = cloneDate; +fc.parseDate = parseDate; +fc.parseISO8601 = parseISO8601; +fc.parseTime = parseTime; +fc.formatDate = formatDate; +fc.formatDates = formatDates; + + + +/* Date Math +-----------------------------------------------------------------------------*/ + +var dayIDs = ['sun', 'mon', 'tue', 'wed', 'thu', 'fri', 'sat'], + DAY_MS = 86400000, + HOUR_MS = 3600000, + MINUTE_MS = 60000; + + +function addYears(d, n, keepTime) { + d.setFullYear(d.getFullYear() + n); + if (!keepTime) { + clearTime(d); + } + return d; +} + + +function addMonths(d, n, keepTime) { // prevents day overflow/underflow + if (+d) { // prevent infinite looping on invalid dates + var m = d.getMonth() + n, + check = cloneDate(d); + check.setDate(1); + check.setMonth(m); + d.setMonth(m); + if (!keepTime) { + clearTime(d); + } + while (d.getMonth() != check.getMonth()) { + d.setDate(d.getDate() + (d < check ? 1 : -1)); + } + } + return d; +} + + +function addDays(d, n, keepTime) { // deals with daylight savings + if (+d) { + var dd = d.getDate() + n, + check = cloneDate(d); + check.setHours(9); // set to middle of day + check.setDate(dd); + d.setDate(dd); + if (!keepTime) { + clearTime(d); + } + fixDate(d, check); + } + return d; +} + + +function fixDate(d, check) { // force d to be on check's YMD, for daylight savings purposes + if (+d) { // prevent infinite looping on invalid dates + while (d.getDate() != check.getDate()) { + d.setTime(+d + (d < check ? 1 : -1) * HOUR_MS); + } + } +} + + +function addMinutes(d, n) { + d.setMinutes(d.getMinutes() + n); + return d; +} + + +function clearTime(d) { + d.setHours(0); + d.setMinutes(0); + d.setSeconds(0); + d.setMilliseconds(0); + return d; +} + + +function cloneDate(d, dontKeepTime) { + if (dontKeepTime) { + return clearTime(new Date(+d)); + } + return new Date(+d); +} + + +function zeroDate() { // returns a Date with time 00:00:00 and dateOfMonth=1 + var i=0, d; + do { + d = new Date(1970, i++, 1); + } while (d.getHours()); // != 0 + return d; +} + + +function skipWeekend(date, inc, excl) { + inc = inc || 1; + while (!date.getDay() || (excl && date.getDay()==1 || !excl && date.getDay()==6)) { + addDays(date, inc); + } + return date; +} + + +function dayDiff(d1, d2) { // d1 - d2 + return Math.round((cloneDate(d1, true) - cloneDate(d2, true)) / DAY_MS); +} + + +function setYMD(date, y, m, d) { + if (y !== undefined && y != date.getFullYear()) { + date.setDate(1); + date.setMonth(0); + date.setFullYear(y); + } + if (m !== undefined && m != date.getMonth()) { + date.setDate(1); + date.setMonth(m); + } + if (d !== undefined) { + date.setDate(d); + } +} + + + +/* Date Parsing +-----------------------------------------------------------------------------*/ + + +function parseDate(s, ignoreTimezone) { // ignoreTimezone defaults to true + if (typeof s == 'object') { // already a Date object + return s; + } + if (typeof s == 'number') { // a UNIX timestamp + return new Date(s * 1000); + } + if (typeof s == 'string') { + if (s.match(/^\d+(\.\d+)?$/)) { // a UNIX timestamp + return new Date(parseFloat(s) * 1000); + } + if (ignoreTimezone === undefined) { + ignoreTimezone = true; + } + return parseISO8601(s, ignoreTimezone) || (s ? new Date(s) : null); + } + // TODO: never return invalid dates (like from new Date(<string>)), return null instead + return null; +} + + +function parseISO8601(s, ignoreTimezone) { // ignoreTimezone defaults to false + // derived from http://delete.me.uk/2005/03/iso8601.html + // TODO: for a know glitch/feature, read tests/issue_206_parseDate_dst.html + var m = s.match(/^([0-9]{4})(-([0-9]{2})(-([0-9]{2})([T ]([0-9]{2}):([0-9]{2})(:([0-9]{2})(\.([0-9]+))?)?(Z|(([-+])([0-9]{2})(:?([0-9]{2}))?))?)?)?)?$/); + if (!m) { + return null; + } + var date = new Date(m[1], 0, 1); + if (ignoreTimezone || !m[13]) { + var check = new Date(m[1], 0, 1, 9, 0); + if (m[3]) { + date.setMonth(m[3] - 1); + check.setMonth(m[3] - 1); + } + if (m[5]) { + date.setDate(m[5]); + check.setDate(m[5]); + } + fixDate(date, check); + if (m[7]) { + date.setHours(m[7]); + } + if (m[8]) { + date.setMinutes(m[8]); + } + if (m[10]) { + date.setSeconds(m[10]); + } + if (m[12]) { + date.setMilliseconds(Number("0." + m[12]) * 1000); + } + fixDate(date, check); + }else{ + date.setUTCFullYear( + m[1], + m[3] ? m[3] - 1 : 0, + m[5] || 1 + ); + date.setUTCHours( + m[7] || 0, + m[8] || 0, + m[10] || 0, + m[12] ? Number("0." + m[12]) * 1000 : 0 + ); + if (m[14]) { + var offset = Number(m[16]) * 60 + (m[18] ? Number(m[18]) : 0); + offset *= m[15] == '-' ? 1 : -1; + date = new Date(+date + (offset * 60 * 1000)); + } + } + return date; +} + + +function parseTime(s) { // returns minutes since start of day + if (typeof s == 'number') { // an hour + return s * 60; + } + if (typeof s == 'object') { // a Date object + return s.getHours() * 60 + s.getMinutes(); + } + var m = s.match(/(\d+)(?::(\d+))?\s*(\w+)?/); + if (m) { + var h = parseInt(m[1], 10); + if (m[3]) { + h %= 12; + if (m[3].toLowerCase().charAt(0) == 'p') { + h += 12; + } + } + return h * 60 + (m[2] ? parseInt(m[2], 10) : 0); + } +} + + + +/* Date Formatting +-----------------------------------------------------------------------------*/ +// TODO: use same function formatDate(date, [date2], format, [options]) + + +function formatDate(date, format, options) { + return formatDates(date, null, format, options); +} + + +function formatDates(date1, date2, format, options) { + options = options || defaults; + var date = date1, + otherDate = date2, + i, len = format.length, c, + i2, formatter, + res = ''; + for (i=0; i<len; i++) { + c = format.charAt(i); + if (c == "'") { + for (i2=i+1; i2<len; i2++) { + if (format.charAt(i2) == "'") { + if (date) { + if (i2 == i+1) { + res += "'"; + }else{ + res += format.substring(i+1, i2); + } + i = i2; + } + break; + } + } + } + else if (c == '(') { + for (i2=i+1; i2<len; i2++) { + if (format.charAt(i2) == ')') { + var subres = formatDate(date, format.substring(i+1, i2), options); + if (parseInt(subres.replace(/\D/, ''), 10)) { + res += subres; + } + i = i2; + break; + } + } + } + else if (c == '[') { + for (i2=i+1; i2<len; i2++) { + if (format.charAt(i2) == ']') { + var subformat = format.substring(i+1, i2); + var subres = formatDate(date, subformat, options); + if (subres != formatDate(otherDate, subformat, options)) { + res += subres; + } + i = i2; + break; + } + } + } + else if (c == '{') { + date = date2; + otherDate = date1; + } + else if (c == '}') { + date = date1; + otherDate = date2; + } + else { + for (i2=len; i2>i; i2--) { + if (formatter = dateFormatters[format.substring(i, i2)]) { + if (date) { + res += formatter(date, options); + } + i = i2 - 1; + break; + } + } + if (i2 == i) { + if (date) { + res += c; + } + } + } + } + return res; +}; + + +var dateFormatters = { + s : function(d) { return d.getSeconds() }, + ss : function(d) { return zeroPad(d.getSeconds()) }, + m : function(d) { return d.getMinutes() }, + mm : function(d) { return zeroPad(d.getMinutes()) }, + h : function(d) { return d.getHours() % 12 || 12 }, + hh : function(d) { return zeroPad(d.getHours() % 12 || 12) }, + H : function(d) { return d.getHours() }, + HH : function(d) { return zeroPad(d.getHours()) }, + d : function(d) { return d.getDate() }, + dd : function(d) { return zeroPad(d.getDate()) }, + ddd : function(d,o) { return o.dayNamesShort[d.getDay()] }, + dddd: function(d,o) { return o.dayNames[d.getDay()] }, + M : function(d) { return d.getMonth() + 1 }, + MM : function(d) { return zeroPad(d.getMonth() + 1) }, + MMM : function(d,o) { return o.monthNamesShort[d.getMonth()] }, + MMMM: function(d,o) { return o.monthNames[d.getMonth()] }, + yy : function(d) { return (d.getFullYear()+'').substring(2) }, + yyyy: function(d) { return d.getFullYear() }, + t : function(d) { return d.getHours() < 12 ? 'a' : 'p' }, + tt : function(d) { return d.getHours() < 12 ? 'am' : 'pm' }, + T : function(d) { return d.getHours() < 12 ? 'A' : 'P' }, + TT : function(d) { return d.getHours() < 12 ? 'AM' : 'PM' }, + u : function(d) { return formatDate(d, "yyyy-MM-dd'T'HH:mm:ss'Z'") }, + S : function(d) { + var date = d.getDate(); + if (date > 10 && date < 20) { + return 'th'; + } + return ['st', 'nd', 'rd'][date%10-1] || 'th'; + } +}; + + + +fc.applyAll = applyAll; + + +/* Event Date Math +-----------------------------------------------------------------------------*/ + + +function exclEndDay(event) { + if (event.end) { + return _exclEndDay(event.end, event.allDay); + }else{ + return addDays(cloneDate(event.start), 1); + } +} + + +function _exclEndDay(end, allDay) { + end = cloneDate(end); + return allDay || end.getHours() || end.getMinutes() ? addDays(end, 1) : clearTime(end); +} + + +function segCmp(a, b) { + return (b.msLength - a.msLength) * 100 + (a.event.start - b.event.start); +} + + +function segsCollide(seg1, seg2) { + return seg1.end > seg2.start && seg1.start < seg2.end; +} + + + +/* Event Sorting +-----------------------------------------------------------------------------*/ + + +// event rendering utilities +function sliceSegs(events, visEventEnds, start, end) { + var segs = [], + i, len=events.length, event, + eventStart, eventEnd, + segStart, segEnd, + isStart, isEnd; + for (i=0; i<len; i++) { + event = events[i]; + eventStart = event.start; + eventEnd = visEventEnds[i]; + if (eventEnd > start && eventStart < end) { + if (eventStart < start) { + segStart = cloneDate(start); + isStart = false; + }else{ + segStart = eventStart; + isStart = true; + } + if (eventEnd > end) { + segEnd = cloneDate(end); + isEnd = false; + }else{ + segEnd = eventEnd; + isEnd = true; + } + segs.push({ + event: event, + start: segStart, + end: segEnd, + isStart: isStart, + isEnd: isEnd, + msLength: segEnd - segStart + }); + } + } + return segs.sort(segCmp); +} + + +// event rendering calculation utilities +function stackSegs(segs) { + var levels = [], + i, len = segs.length, seg, + j, collide, k; + for (i=0; i<len; i++) { + seg = segs[i]; + j = 0; // the level index where seg should belong + while (true) { + collide = false; + if (levels[j]) { + for (k=0; k<levels[j].length; k++) { + if (segsCollide(levels[j][k], seg)) { + collide = true; + break; + } + } + } + if (collide) { + j++; + }else{ + break; + } + } + if (levels[j]) { + levels[j].push(seg); + }else{ + levels[j] = [seg]; + } + } + return levels; +} + + + +/* Event Element Binding +-----------------------------------------------------------------------------*/ + + +function lazySegBind(container, segs, bindHandlers) { + container.unbind('mouseover').mouseover(function(ev) { + var parent=ev.target, e, + i, seg; + while (parent != this) { + e = parent; + parent = parent.parentNode; + } + if ((i = e._fci) !== undefined) { + e._fci = undefined; + seg = segs[i]; + bindHandlers(seg.event, seg.element, seg); + $(ev.target).trigger(ev); + } + ev.stopPropagation(); + }); +} + + + +/* Element Dimensions +-----------------------------------------------------------------------------*/ + + +function setOuterWidth(element, width, includeMargins) { + for (var i=0, e; i<element.length; i++) { + e = $(element[i]); + e.width(Math.max(0, width - hsides(e, includeMargins))); + } +} + + +function setOuterHeight(element, height, includeMargins) { + for (var i=0, e; i<element.length; i++) { + e = $(element[i]); + e.height(Math.max(0, height - vsides(e, includeMargins))); + } +} + + +// TODO: curCSS has been deprecated (jQuery 1.4.3 - 10/16/2010) + + +function hsides(element, includeMargins) { + return hpadding(element) + hborders(element) + (includeMargins ? hmargins(element) : 0); +} + + +function hpadding(element) { + return (parseFloat($.curCSS(element[0], 'paddingLeft', true)) || 0) + + (parseFloat($.curCSS(element[0], 'paddingRight', true)) || 0); +} + + +function hmargins(element) { + return (parseFloat($.curCSS(element[0], 'marginLeft', true)) || 0) + + (parseFloat($.curCSS(element[0], 'marginRight', true)) || 0); +} + + +function hborders(element) { + return (parseFloat($.curCSS(element[0], 'borderLeftWidth', true)) || 0) + + (parseFloat($.curCSS(element[0], 'borderRightWidth', true)) || 0); +} + + +function vsides(element, includeMargins) { + return vpadding(element) + vborders(element) + (includeMargins ? vmargins(element) : 0); +} + + +function vpadding(element) { + return (parseFloat($.curCSS(element[0], 'paddingTop', true)) || 0) + + (parseFloat($.curCSS(element[0], 'paddingBottom', true)) || 0); +} + + +function vmargins(element) { + return (parseFloat($.curCSS(element[0], 'marginTop', true)) || 0) + + (parseFloat($.curCSS(element[0], 'marginBottom', true)) || 0); +} + + +function vborders(element) { + return (parseFloat($.curCSS(element[0], 'borderTopWidth', true)) || 0) + + (parseFloat($.curCSS(element[0], 'borderBottomWidth', true)) || 0); +} + + +function setMinHeight(element, height) { + height = (typeof height == 'number' ? height + 'px' : height); + element.each(function(i, _element) { + _element.style.cssText += ';min-height:' + height + ';_height:' + height; + // why can't we just use .css() ? i forget + }); +} + + + +/* Misc Utils +-----------------------------------------------------------------------------*/ + + +//TODO: arraySlice +//TODO: isFunction, grep ? + + +function noop() { } + + +function cmp(a, b) { + return a - b; +} + + +function arrayMax(a) { + return Math.max.apply(Math, a); +} + + +function zeroPad(n) { + return (n < 10 ? '0' : '') + n; +} + + +function smartProperty(obj, name) { // get a camel-cased/namespaced property of an object + if (obj[name] !== undefined) { + return obj[name]; + } + var parts = name.split(/(?=[A-Z])/), + i=parts.length-1, res; + for (; i>=0; i--) { + res = obj[parts[i].toLowerCase()]; + if (res !== undefined) { + return res; + } + } + return obj['']; +} + + +function htmlEscape(s) { + return s.replace(/&/g, '&') + .replace(/</g, '<') + .replace(/>/g, '>') + .replace(/'/g, ''') + .replace(/"/g, '"') + .replace(/\n/g, '<br />'); +} + + +function cssKey(_element) { + return _element.id + '/' + _element.className + '/' + _element.style.cssText.replace(/(^|;)\s*(top|left|width|height)\s*:[^;]*/ig, ''); +} + + +function disableTextSelection(element) { + element + .attr('unselectable', 'on') + .css('MozUserSelect', 'none') + .bind('selectstart.ui', function() { return false; }); +} + + +/* +function enableTextSelection(element) { + element + .attr('unselectable', 'off') + .css('MozUserSelect', '') + .unbind('selectstart.ui'); +} +*/ + + +function markFirstLast(e) { + e.children() + .removeClass('fc-first fc-last') + .filter(':first-child') + .addClass('fc-first') + .end() + .filter(':last-child') + .addClass('fc-last'); +} + + +function setDayID(cell, date) { + cell.each(function(i, _cell) { + _cell.className = _cell.className.replace(/^fc-\w*/, 'fc-' + dayIDs[date.getDay()]); + // TODO: make a way that doesn't rely on order of classes + }); +} + + +function getSkinCss(event, opt) { + var source = event.source || {}; + var eventColor = event.color; + var sourceColor = source.color; + var optionColor = opt('eventColor'); + var backgroundColor = + event.backgroundColor || + eventColor || + source.backgroundColor || + sourceColor || + opt('eventBackgroundColor') || + optionColor; + var borderColor = + event.borderColor || + eventColor || + source.borderColor || + sourceColor || + opt('eventBorderColor') || + optionColor; + var textColor = + event.textColor || + source.textColor || + opt('eventTextColor'); + var statements = []; + if (backgroundColor) { + statements.push('background-color:' + backgroundColor); + } + if (borderColor) { + statements.push('border-color:' + borderColor); + } + if (textColor) { + statements.push('color:' + textColor); + } + return statements.join(';'); +} + + +function applyAll(functions, thisObj, args) { + if ($.isFunction(functions)) { + functions = [ functions ]; + } + if (functions) { + var i; + var ret; + for (i=0; i<functions.length; i++) { + ret = functions[i].apply(thisObj, args) || ret; + } + return ret; + } +} + + +function firstDefined() { + for (var i=0; i<arguments.length; i++) { + if (arguments[i] !== undefined) { + return arguments[i]; + } + } +} + + + +fcViews.month = MonthView; + +function MonthView(element, calendar) { + var t = this; + + + // exports + t.render = render; + + + // imports + BasicView.call(t, element, calendar, 'month'); + var opt = t.opt; + var renderBasic = t.renderBasic; + var formatDate = calendar.formatDate; + + + + function render(date, delta) { + if (delta) { + addMonths(date, delta); + date.setDate(1); + } + var start = cloneDate(date, true); + start.setDate(1); + var end = addMonths(cloneDate(start), 1); + var visStart = cloneDate(start); + var visEnd = cloneDate(end); + var firstDay = opt('firstDay'); + var nwe = opt('weekends') ? 0 : 1; + if (nwe) { + skipWeekend(visStart); + skipWeekend(visEnd, -1, true); + } + addDays(visStart, -((visStart.getDay() - Math.max(firstDay, nwe) + 7) % 7)); + addDays(visEnd, (7 - visEnd.getDay() + Math.max(firstDay, nwe)) % 7); + var rowCnt = Math.round((visEnd - visStart) / (DAY_MS * 7)); + if (opt('weekMode') == 'fixed') { + addDays(visEnd, (6 - rowCnt) * 7); + rowCnt = 6; + } + t.title = formatDate(start, opt('titleFormat')); + t.start = start; + t.end = end; + t.visStart = visStart; + t.visEnd = visEnd; + renderBasic(6, rowCnt, nwe ? 5 : 7, true); + } + + +} + +fcViews.basicWeek = BasicWeekView; + +function BasicWeekView(element, calendar) { + var t = this; + + + // exports + t.render = render; + + + // imports + BasicView.call(t, element, calendar, 'basicWeek'); + var opt = t.opt; + var renderBasic = t.renderBasic; + var formatDates = calendar.formatDates; + + + + function render(date, delta) { + if (delta) { + addDays(date, delta * 7); + } + var start = addDays(cloneDate(date), -((date.getDay() - opt('firstDay') + 7) % 7)); + var end = addDays(cloneDate(start), 7); + var visStart = cloneDate(start); + var visEnd = cloneDate(end); + var weekends = opt('weekends'); + if (!weekends) { + skipWeekend(visStart); + skipWeekend(visEnd, -1, true); + } + t.title = formatDates( + visStart, + addDays(cloneDate(visEnd), -1), + opt('titleFormat') + ); + t.start = start; + t.end = end; + t.visStart = visStart; + t.visEnd = visEnd; + renderBasic(1, 1, weekends ? 7 : 5, false); + } + + +} + +fcViews.basicDay = BasicDayView; + +//TODO: when calendar's date starts out on a weekend, shouldn't happen + + +function BasicDayView(element, calendar) { + var t = this; + + + // exports + t.render = render; + + + // imports + BasicView.call(t, element, calendar, 'basicDay'); + var opt = t.opt; + var renderBasic = t.renderBasic; + var formatDate = calendar.formatDate; + + + + function render(date, delta) { + if (delta) { + addDays(date, delta); + if (!opt('weekends')) { + skipWeekend(date, delta < 0 ? -1 : 1); + } + } + t.title = formatDate(date, opt('titleFormat')); + t.start = t.visStart = cloneDate(date, true); + t.end = t.visEnd = addDays(cloneDate(t.start), 1); + renderBasic(1, 1, 1, false); + } + + +} + +setDefaults({ + weekMode: 'fixed' +}); + + +function BasicView(element, calendar, viewName) { + var t = this; + + + // exports + t.renderBasic = renderBasic; + t.setHeight = setHeight; + t.setWidth = setWidth; + t.renderDayOverlay = renderDayOverlay; + t.defaultSelectionEnd = defaultSelectionEnd; + t.renderSelection = renderSelection; + t.clearSelection = clearSelection; + t.reportDayClick = reportDayClick; // for selection (kinda hacky) + t.dragStart = dragStart; + t.dragStop = dragStop; + t.defaultEventEnd = defaultEventEnd; + t.getHoverListener = function() { return hoverListener }; + t.colContentLeft = colContentLeft; + t.colContentRight = colContentRight; + t.dayOfWeekCol = dayOfWeekCol; + t.dateCell = dateCell; + t.cellDate = cellDate; + t.cellIsAllDay = function() { return true }; + t.allDayRow = allDayRow; + t.allDayBounds = allDayBounds; + t.getRowCnt = function() { return rowCnt }; + t.getColCnt = function() { return colCnt }; + t.getColWidth = function() { return colWidth }; + t.getDaySegmentContainer = function() { return daySegmentContainer }; + + + // imports + View.call(t, element, calendar, viewName); + OverlayManager.call(t); + SelectionManager.call(t); + BasicEventRenderer.call(t); + var opt = t.opt; + var trigger = t.trigger; + var clearEvents = t.clearEvents; + var renderOverlay = t.renderOverlay; + var clearOverlays = t.clearOverlays; + var daySelectionMousedown = t.daySelectionMousedown; + var formatDate = calendar.formatDate; + + + // locals + + var head; + var headCells; + var body; + var bodyRows; + var bodyCells; + var bodyFirstCells; + var bodyCellTopInners; + var daySegmentContainer; + + var viewWidth; + var viewHeight; + var colWidth; + + var rowCnt, colCnt; + var coordinateGrid; + var hoverListener; + var colContentPositions; + + var rtl, dis, dit; + var firstDay; + var nwe; + var tm; + var colFormat; + + + + /* Rendering + ------------------------------------------------------------*/ + + + disableTextSelection(element.addClass('fc-grid')); + + + function renderBasic(maxr, r, c, showNumbers) { + rowCnt = r; + colCnt = c; + updateOptions(); + var firstTime = !body; + if (firstTime) { + buildSkeleton(maxr, showNumbers); + }else{ + clearEvents(); + } + updateCells(firstTime); + } + + + + function updateOptions() { + rtl = opt('isRTL'); + if (rtl) { + dis = -1; + dit = colCnt - 1; + }else{ + dis = 1; + dit = 0; + } + firstDay = opt('firstDay'); + nwe = opt('weekends') ? 0 : 1; + tm = opt('theme') ? 'ui' : 'fc'; + colFormat = opt('columnFormat'); + } + + + + function buildSkeleton(maxRowCnt, showNumbers) { + var s; + var headerClass = tm + "-widget-header"; + var contentClass = tm + "-widget-content"; + var i, j; + var table; + + s = + "<table class='fc-border-separate' style='width:100%' cellspacing='0'>" + + "<thead>" + + "<tr>"; + for (i=0; i<colCnt; i++) { + s += + "<th class='fc- " + headerClass + "'/>"; // need fc- for setDayID + } + s += + "</tr>" + + "</thead>" + + "<tbody>"; + for (i=0; i<maxRowCnt; i++) { + s += + "<tr class='fc-week" + i + "'>"; + for (j=0; j<colCnt; j++) { + s += + "<td class='fc- " + contentClass + " fc-day" + (i*colCnt+j) + "'>" + // need fc- for setDayID + "<div>" + + (showNumbers ? + "<div class='fc-day-number'/>" : + '' + ) + + "<div class='fc-day-content'>" + + "<div style='position:relative'> </div>" + + "</div>" + + "</div>" + + "</td>"; + } + s += + "</tr>"; + } + s += + "</tbody>" + + "</table>"; + table = $(s).appendTo(element); + + head = table.find('thead'); + headCells = head.find('th'); + body = table.find('tbody'); + bodyRows = body.find('tr'); + bodyCells = body.find('td'); + bodyFirstCells = bodyCells.filter(':first-child'); + bodyCellTopInners = bodyRows.eq(0).find('div.fc-day-content div'); + + markFirstLast(head.add(head.find('tr'))); // marks first+last tr/th's + markFirstLast(bodyRows); // marks first+last td's + bodyRows.eq(0).addClass('fc-first'); // fc-last is done in updateCells + + dayBind(bodyCells); + + daySegmentContainer = + $("<div style='position:absolute;z-index:8;top:0;left:0'/>") + .appendTo(element); + } + + + + function updateCells(firstTime) { + var dowDirty = firstTime || rowCnt == 1; // could the cells' day-of-weeks need updating? + var month = t.start.getMonth(); + var today = clearTime(new Date()); + var cell; + var date; + var row; + + if (dowDirty) { + headCells.each(function(i, _cell) { + cell = $(_cell); + date = indexDate(i); + cell.html(formatDate(date, colFormat)); + setDayID(cell, date); + }); + } + + bodyCells.each(function(i, _cell) { + cell = $(_cell); + date = indexDate(i); + if (date.getMonth() == month) { + cell.removeClass('fc-other-month'); + }else{ + cell.addClass('fc-other-month'); + } + if (+date == +today) { + cell.addClass(tm + '-state-highlight fc-today'); + }else{ + cell.removeClass(tm + '-state-highlight fc-today'); + } + cell.find('div.fc-day-number').text(date.getDate()); + if (dowDirty) { + setDayID(cell, date); + } + }); + + bodyRows.each(function(i, _row) { + row = $(_row); + if (i < rowCnt) { + row.show(); + if (i == rowCnt-1) { + row.addClass('fc-last'); + }else{ + row.removeClass('fc-last'); + } + }else{ + row.hide(); + } + }); + } + + + + function setHeight(height) { + viewHeight = height; + + var bodyHeight = viewHeight - head.height(); + var rowHeight; + var rowHeightLast; + var cell; + + if (opt('weekMode') == 'variable') { + rowHeight = rowHeightLast = Math.floor(bodyHeight / (rowCnt==1 ? 2 : 6)); + }else{ + rowHeight = Math.floor(bodyHeight / rowCnt); + rowHeightLast = bodyHeight - rowHeight * (rowCnt-1); + } + + bodyFirstCells.each(function(i, _cell) { + if (i < rowCnt) { + cell = $(_cell); + setMinHeight( + cell.find('> div'), + (i==rowCnt-1 ? rowHeightLast : rowHeight) - vsides(cell) + ); + } + }); + + } + + + function setWidth(width) { + viewWidth = width; + colContentPositions.clear(); + colWidth = Math.floor(viewWidth / colCnt); + setOuterWidth(headCells.slice(0, -1), colWidth); + } + + + + /* Day clicking and binding + -----------------------------------------------------------*/ + + + function dayBind(days) { + days.click(dayClick) + .mousedown(daySelectionMousedown); + } + + + function dayClick(ev) { + if (!opt('selectable')) { // if selectable, SelectionManager will worry about dayClick + var index = parseInt(this.className.match(/fc\-day(\d+)/)[1]); // TODO: maybe use .data + var date = indexDate(index); + trigger('dayClick', this, date, true, ev); + } + } + + + + /* Semi-transparent Overlay Helpers + ------------------------------------------------------*/ + + + function renderDayOverlay(overlayStart, overlayEnd, refreshCoordinateGrid) { // overlayEnd is exclusive + if (refreshCoordinateGrid) { + coordinateGrid.build(); + } + var rowStart = cloneDate(t.visStart); + var rowEnd = addDays(cloneDate(rowStart), colCnt); + for (var i=0; i<rowCnt; i++) { + var stretchStart = new Date(Math.max(rowStart, overlayStart)); + var stretchEnd = new Date(Math.min(rowEnd, overlayEnd)); + if (stretchStart < stretchEnd) { + var colStart, colEnd; + if (rtl) { + colStart = dayDiff(stretchEnd, rowStart)*dis+dit+1; + colEnd = dayDiff(stretchStart, rowStart)*dis+dit+1; + }else{ + colStart = dayDiff(stretchStart, rowStart); + colEnd = dayDiff(stretchEnd, rowStart); + } + dayBind( + renderCellOverlay(i, colStart, i, colEnd-1) + ); + } + addDays(rowStart, 7); + addDays(rowEnd, 7); + } + } + + + function renderCellOverlay(row0, col0, row1, col1) { // row1,col1 is inclusive + var rect = coordinateGrid.rect(row0, col0, row1, col1, element); + return renderOverlay(rect, element); + } + + + + /* Selection + -----------------------------------------------------------------------*/ + + + function defaultSelectionEnd(startDate, allDay) { + return cloneDate(startDate); + } + + + function renderSelection(startDate, endDate, allDay) { + renderDayOverlay(startDate, addDays(cloneDate(endDate), 1), true); // rebuild every time??? + } + + + function clearSelection() { + clearOverlays(); + } + + + function reportDayClick(date, allDay, ev) { + var cell = dateCell(date); + var _element = bodyCells[cell.row*colCnt + cell.col]; + trigger('dayClick', _element, date, allDay, ev); + } + + + + /* External Dragging + -----------------------------------------------------------------------*/ + + + function dragStart(_dragElement, ev, ui) { + hoverListener.start(function(cell) { + clearOverlays(); + if (cell) { + renderCellOverlay(cell.row, cell.col, cell.row, cell.col); + } + }, ev); + } + + + function dragStop(_dragElement, ev, ui) { + var cell = hoverListener.stop(); + clearOverlays(); + if (cell) { + var d = cellDate(cell); + trigger('drop', _dragElement, d, true, ev, ui); + } + } + + + + /* Utilities + --------------------------------------------------------*/ + + + function defaultEventEnd(event) { + return cloneDate(event.start); + } + + + coordinateGrid = new CoordinateGrid(function(rows, cols) { + var e, n, p; + headCells.each(function(i, _e) { + e = $(_e); + n = e.offset().left; + if (i) { + p[1] = n; + } + p = [n]; + cols[i] = p; + }); + p[1] = n + e.outerWidth(); + bodyRows.each(function(i, _e) { + if (i < rowCnt) { + e = $(_e); + n = e.offset().top; + if (i) { + p[1] = n; + } + p = [n]; + rows[i] = p; + } + }); + p[1] = n + e.outerHeight(); + }); + + + hoverListener = new HoverListener(coordinateGrid); + + + colContentPositions = new HorizontalPositionCache(function(col) { + return bodyCellTopInners.eq(col); + }); + + + function colContentLeft(col) { + return colContentPositions.left(col); + } + + + function colContentRight(col) { + return colContentPositions.right(col); + } + + + + + function dateCell(date) { + return { + row: Math.floor(dayDiff(date, t.visStart) / 7), + col: dayOfWeekCol(date.getDay()) + }; + } + + + function cellDate(cell) { + return _cellDate(cell.row, cell.col); + } + + + function _cellDate(row, col) { + return addDays(cloneDate(t.visStart), row*7 + col*dis+dit); + // what about weekends in middle of week? + } + + + function indexDate(index) { + return _cellDate(Math.floor(index/colCnt), index%colCnt); + } + + + function dayOfWeekCol(dayOfWeek) { + return ((dayOfWeek - Math.max(firstDay, nwe) + colCnt) % colCnt) * dis + dit; + } + + + + + function allDayRow(i) { + return bodyRows.eq(i); + } + + + function allDayBounds(i) { + return { + left: 0, + right: viewWidth + }; + } + + +} + +function BasicEventRenderer() { + var t = this; + + + // exports + t.renderEvents = renderEvents; + t.compileDaySegs = compileSegs; // for DayEventRenderer + t.clearEvents = clearEvents; + t.bindDaySeg = bindDaySeg; + + + // imports + DayEventRenderer.call(t); + var opt = t.opt; + var trigger = t.trigger; + //var setOverflowHidden = t.setOverflowHidden; + var isEventDraggable = t.isEventDraggable; + var isEventResizable = t.isEventResizable; + var reportEvents = t.reportEvents; + var reportEventClear = t.reportEventClear; + var eventElementHandlers = t.eventElementHandlers; + var showEvents = t.showEvents; + var hideEvents = t.hideEvents; + var eventDrop = t.eventDrop; + var getDaySegmentContainer = t.getDaySegmentContainer; + var getHoverListener = t.getHoverListener; + var renderDayOverlay = t.renderDayOverlay; + var clearOverlays = t.clearOverlays; + var getRowCnt = t.getRowCnt; + var getColCnt = t.getColCnt; + var renderDaySegs = t.renderDaySegs; + var resizableDayEvent = t.resizableDayEvent; + + + + /* Rendering + --------------------------------------------------------------------*/ + + + function renderEvents(events, modifiedEventId) { + reportEvents(events); + renderDaySegs(compileSegs(events), modifiedEventId); + } + + + function clearEvents() { + reportEventClear(); + getDaySegmentContainer().empty(); + } + + + function compileSegs(events) { + var rowCnt = getRowCnt(), + colCnt = getColCnt(), + d1 = cloneDate(t.visStart), + d2 = addDays(cloneDate(d1), colCnt), + visEventsEnds = $.map(events, exclEndDay), + i, row, + j, level, + k, seg, + segs=[]; + for (i=0; i<rowCnt; i++) { + row = stackSegs(sliceSegs(events, visEventsEnds, d1, d2)); + for (j=0; j<row.length; j++) { + level = row[j]; + for (k=0; k<level.length; k++) { + seg = level[k]; + seg.row = i; + seg.level = j; // not needed anymore + segs.push(seg); + } + } + addDays(d1, 7); + addDays(d2, 7); + } + return segs; + } + + + function bindDaySeg(event, eventElement, seg) { + if (isEventDraggable(event)) { + draggableDayEvent(event, eventElement); + } + if (seg.isEnd && isEventResizable(event)) { + resizableDayEvent(event, eventElement, seg); + } + eventElementHandlers(event, eventElement); + // needs to be after, because resizableDayEvent might stopImmediatePropagation on click + } + + + + /* Dragging + ----------------------------------------------------------------------------*/ + + + function draggableDayEvent(event, eventElement) { + var hoverListener = getHoverListener(); + var dayDelta; + eventElement.draggable({ + zIndex: 9, + delay: 50, + opacity: opt('dragOpacity'), + revertDuration: opt('dragRevertDuration'), + start: function(ev, ui) { + trigger('eventDragStart', eventElement, event, ev, ui); + hideEvents(event, eventElement); + hoverListener.start(function(cell, origCell, rowDelta, colDelta) { + eventElement.draggable('option', 'revert', !cell || !rowDelta && !colDelta); + clearOverlays(); + if (cell) { + //setOverflowHidden(true); + dayDelta = rowDelta*7 + colDelta * (opt('isRTL') ? -1 : 1); + renderDayOverlay( + addDays(cloneDate(event.start), dayDelta), + addDays(exclEndDay(event), dayDelta) + ); + }else{ + //setOverflowHidden(false); + dayDelta = 0; + } + }, ev, 'drag'); + }, + stop: function(ev, ui) { + hoverListener.stop(); + clearOverlays(); + trigger('eventDragStop', eventElement, event, ev, ui); + if (dayDelta) { + eventDrop(this, event, dayDelta, 0, event.allDay, ev, ui); + }else{ + eventElement.css('filter', ''); // clear IE opacity side-effects + showEvents(event, eventElement); + } + //setOverflowHidden(false); + } + }); + } + + +} + +fcViews.agendaWeek = AgendaWeekView; + +function AgendaWeekView(element, calendar) { + var t = this; + + + // exports + t.render = render; + + + // imports + AgendaView.call(t, element, calendar, 'agendaWeek'); + var opt = t.opt; + var renderAgenda = t.renderAgenda; + var formatDates = calendar.formatDates; + + + + function render(date, delta) { + if (delta) { + addDays(date, delta * 7); + } + var start = addDays(cloneDate(date), -((date.getDay() - opt('firstDay') + 7) % 7)); + var end = addDays(cloneDate(start), 7); + var visStart = cloneDate(start); + var visEnd = cloneDate(end); + var weekends = opt('weekends'); + if (!weekends) { + skipWeekend(visStart); + skipWeekend(visEnd, -1, true); + } + t.title = formatDates( + visStart, + addDays(cloneDate(visEnd), -1), + opt('titleFormat') + ); + t.start = start; + t.end = end; + t.visStart = visStart; + t.visEnd = visEnd; + renderAgenda(weekends ? 7 : 5); + } + + +} + +fcViews.agendaDay = AgendaDayView; + +function AgendaDayView(element, calendar) { + var t = this; + + + // exports + t.render = render; + + + // imports + AgendaView.call(t, element, calendar, 'agendaDay'); + var opt = t.opt; + var renderAgenda = t.renderAgenda; + var formatDate = calendar.formatDate; + + + + function render(date, delta) { + if (delta) { + addDays(date, delta); + if (!opt('weekends')) { + skipWeekend(date, delta < 0 ? -1 : 1); + } + } + var start = cloneDate(date, true); + var end = addDays(cloneDate(start), 1); + t.title = formatDate(date, opt('titleFormat')); + t.start = t.visStart = start; + t.end = t.visEnd = end; + renderAgenda(1); + } + + +} + +setDefaults({ + allDaySlot: true, + allDayText: 'all-day', + firstHour: 6, + slotMinutes: 30, + defaultEventMinutes: 120, + axisFormat: 'h(:mm)tt', + timeFormat: { + agenda: 'h:mm{ - h:mm}' + }, + dragOpacity: { + agenda: .5 + }, + minTime: 0, + maxTime: 24 +}); + + +// TODO: make it work in quirks mode (event corners, all-day height) +// TODO: test liquid width, especially in IE6 + + +function AgendaView(element, calendar, viewName) { + var t = this; + + + // exports + t.renderAgenda = renderAgenda; + t.setWidth = setWidth; + t.setHeight = setHeight; + t.beforeHide = beforeHide; + t.afterShow = afterShow; + t.defaultEventEnd = defaultEventEnd; + t.timePosition = timePosition; + t.dayOfWeekCol = dayOfWeekCol; + t.dateCell = dateCell; + t.cellDate = cellDate; + t.cellIsAllDay = cellIsAllDay; + t.allDayRow = getAllDayRow; + t.allDayBounds = allDayBounds; + t.getHoverListener = function() { return hoverListener }; + t.colContentLeft = colContentLeft; + t.colContentRight = colContentRight; + t.getDaySegmentContainer = function() { return daySegmentContainer }; + t.getSlotSegmentContainer = function() { return slotSegmentContainer }; + t.getMinMinute = function() { return minMinute }; + t.getMaxMinute = function() { return maxMinute }; + t.getBodyContent = function() { return slotContent }; // !!?? + t.getRowCnt = function() { return 1 }; + t.getColCnt = function() { return colCnt }; + t.getColWidth = function() { return colWidth }; + t.getSlotHeight = function() { return slotHeight }; + t.defaultSelectionEnd = defaultSelectionEnd; + t.renderDayOverlay = renderDayOverlay; + t.renderSelection = renderSelection; + t.clearSelection = clearSelection; + t.reportDayClick = reportDayClick; // selection mousedown hack + t.dragStart = dragStart; + t.dragStop = dragStop; + + + // imports + View.call(t, element, calendar, viewName); + OverlayManager.call(t); + SelectionManager.call(t); + AgendaEventRenderer.call(t); + var opt = t.opt; + var trigger = t.trigger; + var clearEvents = t.clearEvents; + var renderOverlay = t.renderOverlay; + var clearOverlays = t.clearOverlays; + var reportSelection = t.reportSelection; + var unselect = t.unselect; + var daySelectionMousedown = t.daySelectionMousedown; + var slotSegHtml = t.slotSegHtml; + var formatDate = calendar.formatDate; + + + // locals + + var dayTable; + var dayHead; + var dayHeadCells; + var dayBody; + var dayBodyCells; + var dayBodyCellInners; + var dayBodyFirstCell; + var dayBodyFirstCellStretcher; + var slotLayer; + var daySegmentContainer; + var allDayTable; + var allDayRow; + var slotScroller; + var slotContent; + var slotSegmentContainer; + var slotTable; + var slotTableFirstInner; + var axisFirstCells; + var gutterCells; + var selectionHelper; + + var viewWidth; + var viewHeight; + var axisWidth; + var colWidth; + var gutterWidth; + var slotHeight; // TODO: what if slotHeight changes? (see issue 650) + var savedScrollTop; + + var colCnt; + var slotCnt; + var coordinateGrid; + var hoverListener; + var colContentPositions; + var slotTopCache = {}; + + var tm; + var firstDay; + var nwe; // no weekends (int) + var rtl, dis, dit; // day index sign / translate + var minMinute, maxMinute; + var colFormat; + + + + /* Rendering + -----------------------------------------------------------------------------*/ + + + disableTextSelection(element.addClass('fc-agenda')); + + + function renderAgenda(c) { + colCnt = c; + updateOptions(); + if (!dayTable) { + buildSkeleton(); + }else{ + clearEvents(); + } + updateCells(); + } + + + + function updateOptions() { + tm = opt('theme') ? 'ui' : 'fc'; + nwe = opt('weekends') ? 0 : 1; + firstDay = opt('firstDay'); + if (rtl = opt('isRTL')) { + dis = -1; + dit = colCnt - 1; + }else{ + dis = 1; + dit = 0; + } + minMinute = parseTime(opt('minTime')); + maxMinute = parseTime(opt('maxTime')); + colFormat = opt('columnFormat'); + } + + + + function buildSkeleton() { + var headerClass = tm + "-widget-header"; + var contentClass = tm + "-widget-content"; + var s; + var i; + var d; + var maxd; + var minutes; + var slotNormal = opt('slotMinutes') % 15 == 0; + + s = + "<table style='width:100%' class='fc-agenda-days fc-border-separate' cellspacing='0'>" + + "<thead>" + + "<tr>" + + "<th class='fc-agenda-axis " + headerClass + "'> </th>"; + for (i=0; i<colCnt; i++) { + s += + "<th class='fc- fc-col" + i + ' ' + headerClass + "'/>"; // fc- needed for setDayID + } + s += + "<th class='fc-agenda-gutter " + headerClass + "'> </th>" + + "</tr>" + + "</thead>" + + "<tbody>" + + "<tr>" + + "<th class='fc-agenda-axis " + headerClass + "'> </th>"; + for (i=0; i<colCnt; i++) { + s += + "<td class='fc- fc-col" + i + ' ' + contentClass + "'>" + // fc- needed for setDayID + "<div>" + + "<div class='fc-day-content'>" + + "<div style='position:relative'> </div>" + + "</div>" + + "</div>" + + "</td>"; + } + s += + "<td class='fc-agenda-gutter " + contentClass + "'> </td>" + + "</tr>" + + "</tbody>" + + "</table>"; + dayTable = $(s).appendTo(element); + dayHead = dayTable.find('thead'); + dayHeadCells = dayHead.find('th').slice(1, -1); + dayBody = dayTable.find('tbody'); + dayBodyCells = dayBody.find('td').slice(0, -1); + dayBodyCellInners = dayBodyCells.find('div.fc-day-content div'); + dayBodyFirstCell = dayBodyCells.eq(0); + dayBodyFirstCellStretcher = dayBodyFirstCell.find('> div'); + + markFirstLast(dayHead.add(dayHead.find('tr'))); + markFirstLast(dayBody.add(dayBody.find('tr'))); + + axisFirstCells = dayHead.find('th:first'); + gutterCells = dayTable.find('.fc-agenda-gutter'); + + slotLayer = + $("<div style='position:absolute;z-index:2;left:0;width:100%'/>") + .appendTo(element); + + if (opt('allDaySlot')) { + + daySegmentContainer = + $("<div style='position:absolute;z-index:8;top:0;left:0'/>") + .appendTo(slotLayer); + + s = + "<table style='width:100%' class='fc-agenda-allday' cellspacing='0'>" + + "<tr>" + + "<th class='" + headerClass + " fc-agenda-axis'>" + opt('allDayText') + "</th>" + + "<td>" + + "<div class='fc-day-content'><div style='position:relative'/></div>" + + "</td>" + + "<th class='" + headerClass + " fc-agenda-gutter'> </th>" + + "</tr>" + + "</table>"; + allDayTable = $(s).appendTo(slotLayer); + allDayRow = allDayTable.find('tr'); + + dayBind(allDayRow.find('td')); + + axisFirstCells = axisFirstCells.add(allDayTable.find('th:first')); + gutterCells = gutterCells.add(allDayTable.find('th.fc-agenda-gutter')); + + slotLayer.append( + "<div class='fc-agenda-divider " + headerClass + "'>" + + "<div class='fc-agenda-divider-inner'/>" + + "</div>" + ); + + }else{ + + daySegmentContainer = $([]); // in jQuery 1.4, we can just do $() + + } + + slotScroller = + $("<div style='position:absolute;width:100%;overflow-x:hidden;overflow-y:auto'/>") + .appendTo(slotLayer); + + slotContent = + $("<div style='position:relative;width:100%;overflow:hidden'/>") + .appendTo(slotScroller); + + slotSegmentContainer = + $("<div style='position:absolute;z-index:8;top:0;left:0'/>") + .appendTo(slotContent); + + s = + "<table class='fc-agenda-slots' style='width:100%' cellspacing='0'>" + + "<tbody>"; + d = zeroDate(); + maxd = addMinutes(cloneDate(d), maxMinute); + addMinutes(d, minMinute); + slotCnt = 0; + for (i=0; d < maxd; i++) { + minutes = d.getMinutes(); + s += + "<tr class='fc-slot" + i + ' ' + (!minutes ? '' : 'fc-minor') + "'>" + + "<th class='fc-agenda-axis " + headerClass + "'>" + + ((!slotNormal || !minutes) ? formatDate(d, opt('axisFormat')) : ' ') + + "</th>" + + "<td class='" + contentClass + "'>" + + "<div style='position:relative'> </div>" + + "</td>" + + "</tr>"; + addMinutes(d, opt('slotMinutes')); + slotCnt++; + } + s += + "</tbody>" + + "</table>"; + slotTable = $(s).appendTo(slotContent); + slotTableFirstInner = slotTable.find('div:first'); + + slotBind(slotTable.find('td')); + + axisFirstCells = axisFirstCells.add(slotTable.find('th:first')); + } + + + + function updateCells() { + var i; + var headCell; + var bodyCell; + var date; + var today = clearTime(new Date()); + for (i=0; i<colCnt; i++) { + date = colDate(i); + headCell = dayHeadCells.eq(i); + headCell.html(formatDate(date, colFormat)); + bodyCell = dayBodyCells.eq(i); + if (+date == +today) { + bodyCell.addClass(tm + '-state-highlight fc-today'); + }else{ + bodyCell.removeClass(tm + '-state-highlight fc-today'); + } + setDayID(headCell.add(bodyCell), date); + } + } + + + + function setHeight(height, dateChanged) { + if (height === undefined) { + height = viewHeight; + } + viewHeight = height; + slotTopCache = {}; + + var headHeight = dayBody.position().top; + var allDayHeight = slotScroller.position().top; // including divider + var bodyHeight = Math.min( // total body height, including borders + height - headHeight, // when scrollbars + slotTable.height() + allDayHeight + 1 // when no scrollbars. +1 for bottom border + ); + + dayBodyFirstCellStretcher + .height(bodyHeight - vsides(dayBodyFirstCell)); + + slotLayer.css('top', headHeight); + + slotScroller.height(bodyHeight - allDayHeight - 1); + + slotHeight = slotTableFirstInner.height() + 1; // +1 for border + + if (dateChanged) { + resetScroll(); + } + } + + + + function setWidth(width) { + viewWidth = width; + colContentPositions.clear(); + + axisWidth = 0; + setOuterWidth( + axisFirstCells + .width('') + .each(function(i, _cell) { + axisWidth = Math.max(axisWidth, $(_cell).outerWidth()); + }), + axisWidth + ); + + var slotTableWidth = slotScroller[0].clientWidth; // needs to be done after axisWidth (for IE7) + //slotTable.width(slotTableWidth); + + gutterWidth = slotScroller.width() - slotTableWidth; + if (gutterWidth) { + setOuterWidth(gutterCells, gutterWidth); + gutterCells + .show() + .prev() + .removeClass('fc-last'); + }else{ + gutterCells + .hide() + .prev() + .addClass('fc-last'); + } + + colWidth = Math.floor((slotTableWidth - axisWidth) / colCnt); + setOuterWidth(dayHeadCells.slice(0, -1), colWidth); + } + + + + function resetScroll() { + var d0 = zeroDate(); + var scrollDate = cloneDate(d0); + scrollDate.setHours(opt('firstHour')); + var top = timePosition(d0, scrollDate) + 1; // +1 for the border + function scroll() { + slotScroller.scrollTop(top); + } + scroll(); + setTimeout(scroll, 0); // overrides any previous scroll state made by the browser + } + + + function beforeHide() { + savedScrollTop = slotScroller.scrollTop(); + } + + + function afterShow() { + slotScroller.scrollTop(savedScrollTop); + } + + + + /* Slot/Day clicking and binding + -----------------------------------------------------------------------*/ + + + function dayBind(cells) { + cells.click(slotClick) + .mousedown(daySelectionMousedown); + } + + + function slotBind(cells) { + cells.click(slotClick) + .mousedown(slotSelectionMousedown); + } + + + function slotClick(ev) { + if (!opt('selectable')) { // if selectable, SelectionManager will worry about dayClick + var col = Math.min(colCnt-1, Math.floor((ev.pageX - dayTable.offset().left - axisWidth) / colWidth)); + var date = colDate(col); + var rowMatch = this.parentNode.className.match(/fc-slot(\d+)/); // TODO: maybe use data + if (rowMatch) { + var mins = parseInt(rowMatch[1]) * opt('slotMinutes'); + var hours = Math.floor(mins/60); + date.setHours(hours); + date.setMinutes(mins%60 + minMinute); + trigger('dayClick', dayBodyCells[col], date, false, ev); + }else{ + trigger('dayClick', dayBodyCells[col], date, true, ev); + } + } + } + + + + /* Semi-transparent Overlay Helpers + -----------------------------------------------------*/ + + + function renderDayOverlay(startDate, endDate, refreshCoordinateGrid) { // endDate is exclusive + if (refreshCoordinateGrid) { + coordinateGrid.build(); + } + var visStart = cloneDate(t.visStart); + var startCol, endCol; + if (rtl) { + startCol = dayDiff(endDate, visStart)*dis+dit+1; + endCol = dayDiff(startDate, visStart)*dis+dit+1; + }else{ + startCol = dayDiff(startDate, visStart); + endCol = dayDiff(endDate, visStart); + } + startCol = Math.max(0, startCol); + endCol = Math.min(colCnt, endCol); + if (startCol < endCol) { + dayBind( + renderCellOverlay(0, startCol, 0, endCol-1) + ); + } + } + + + function renderCellOverlay(row0, col0, row1, col1) { // only for all-day? + var rect = coordinateGrid.rect(row0, col0, row1, col1, slotLayer); + return renderOverlay(rect, slotLayer); + } + + + function renderSlotOverlay(overlayStart, overlayEnd) { + var dayStart = cloneDate(t.visStart); + var dayEnd = addDays(cloneDate(dayStart), 1); + for (var i=0; i<colCnt; i++) { + var stretchStart = new Date(Math.max(dayStart, overlayStart)); + var stretchEnd = new Date(Math.min(dayEnd, overlayEnd)); + if (stretchStart < stretchEnd) { + var col = i*dis+dit; + var rect = coordinateGrid.rect(0, col, 0, col, slotContent); // only use it for horizontal coords + var top = timePosition(dayStart, stretchStart); + var bottom = timePosition(dayStart, stretchEnd); + rect.top = top; + rect.height = bottom - top; + slotBind( + renderOverlay(rect, slotContent) + ); + } + addDays(dayStart, 1); + addDays(dayEnd, 1); + } + } + + + + /* Coordinate Utilities + -----------------------------------------------------------------------------*/ + + + coordinateGrid = new CoordinateGrid(function(rows, cols) { + var e, n, p; + dayHeadCells.each(function(i, _e) { + e = $(_e); + n = e.offset().left; + if (i) { + p[1] = n; + } + p = [n]; + cols[i] = p; + }); + p[1] = n + e.outerWidth(); + if (opt('allDaySlot')) { + e = allDayRow; + n = e.offset().top; + rows[0] = [n, n+e.outerHeight()]; + } + var slotTableTop = slotContent.offset().top; + var slotScrollerTop = slotScroller.offset().top; + var slotScrollerBottom = slotScrollerTop + slotScroller.outerHeight(); + function constrain(n) { + return Math.max(slotScrollerTop, Math.min(slotScrollerBottom, n)); + } + for (var i=0; i<slotCnt; i++) { + rows.push([ + constrain(slotTableTop + slotHeight*i), + constrain(slotTableTop + slotHeight*(i+1)) + ]); + } + }); + + + hoverListener = new HoverListener(coordinateGrid); + + + colContentPositions = new HorizontalPositionCache(function(col) { + return dayBodyCellInners.eq(col); + }); + + + function colContentLeft(col) { + return colContentPositions.left(col); + } + + + function colContentRight(col) { + return colContentPositions.right(col); + } + + + + + function dateCell(date) { // "cell" terminology is now confusing + return { + row: Math.floor(dayDiff(date, t.visStart) / 7), + col: dayOfWeekCol(date.getDay()) + }; + } + + + function cellDate(cell) { + var d = colDate(cell.col); + var slotIndex = cell.row; + if (opt('allDaySlot')) { + slotIndex--; + } + if (slotIndex >= 0) { + addMinutes(d, minMinute + slotIndex * opt('slotMinutes')); + } + return d; + } + + + function colDate(col) { // returns dates with 00:00:00 + return addDays(cloneDate(t.visStart), col*dis+dit); + } + + + function cellIsAllDay(cell) { + return opt('allDaySlot') && !cell.row; + } + + + function dayOfWeekCol(dayOfWeek) { + return ((dayOfWeek - Math.max(firstDay, nwe) + colCnt) % colCnt)*dis+dit; + } + + + + + // get the Y coordinate of the given time on the given day (both Date objects) + function timePosition(day, time) { // both date objects. day holds 00:00 of current day + day = cloneDate(day, true); + if (time < addMinutes(cloneDate(day), minMinute)) { + return 0; + } + if (time >= addMinutes(cloneDate(day), maxMinute)) { + return slotTable.height(); + } + var slotMinutes = opt('slotMinutes'), + minutes = time.getHours()*60 + time.getMinutes() - minMinute, + slotI = Math.floor(minutes / slotMinutes), + slotTop = slotTopCache[slotI]; + if (slotTop === undefined) { + slotTop = slotTopCache[slotI] = slotTable.find('tr:eq(' + slotI + ') td div')[0].offsetTop; //.position().top; // need this optimization??? + } + return Math.max(0, Math.round( + slotTop - 1 + slotHeight * ((minutes % slotMinutes) / slotMinutes) + )); + } + + + function allDayBounds() { + return { + left: axisWidth, + right: viewWidth - gutterWidth + } + } + + + function getAllDayRow(index) { + return allDayRow; + } + + + function defaultEventEnd(event) { + var start = cloneDate(event.start); + if (event.allDay) { + return start; + } + return addMinutes(start, opt('defaultEventMinutes')); + } + + + + /* Selection + ---------------------------------------------------------------------------------*/ + + + function defaultSelectionEnd(startDate, allDay) { + if (allDay) { + return cloneDate(startDate); + } + return addMinutes(cloneDate(startDate), opt('slotMinutes')); + } + + + function renderSelection(startDate, endDate, allDay) { // only for all-day + if (allDay) { + if (opt('allDaySlot')) { + renderDayOverlay(startDate, addDays(cloneDate(endDate), 1), true); + } + }else{ + renderSlotSelection(startDate, endDate); + } + } + + + function renderSlotSelection(startDate, endDate) { + var helperOption = opt('selectHelper'); + coordinateGrid.build(); + if (helperOption) { + var col = dayDiff(startDate, t.visStart) * dis + dit; + if (col >= 0 && col < colCnt) { // only works when times are on same day + var rect = coordinateGrid.rect(0, col, 0, col, slotContent); // only for horizontal coords + var top = timePosition(startDate, startDate); + var bottom = timePosition(startDate, endDate); + if (bottom > top) { // protect against selections that are entirely before or after visible range + rect.top = top; + rect.height = bottom - top; + rect.left += 2; + rect.width -= 5; + if ($.isFunction(helperOption)) { + var helperRes = helperOption(startDate, endDate); + if (helperRes) { + rect.position = 'absolute'; + rect.zIndex = 8; + selectionHelper = $(helperRes) + .css(rect) + .appendTo(slotContent); + } + }else{ + rect.isStart = true; // conside rect a "seg" now + rect.isEnd = true; // + selectionHelper = $(slotSegHtml( + { + title: '', + start: startDate, + end: endDate, + className: ['fc-select-helper'], + editable: false + }, + rect + )); + selectionHelper.css('opacity', opt('dragOpacity')); + } + if (selectionHelper) { + slotBind(selectionHelper); + slotContent.append(selectionHelper); + setOuterWidth(selectionHelper, rect.width, true); // needs to be after appended + setOuterHeight(selectionHelper, rect.height, true); + } + } + } + }else{ + renderSlotOverlay(startDate, endDate); + } + } + + + function clearSelection() { + clearOverlays(); + if (selectionHelper) { + selectionHelper.remove(); + selectionHelper = null; + } + } + + + function slotSelectionMousedown(ev) { + if (ev.which == 1 && opt('selectable')) { // ev.which==1 means left mouse button + unselect(ev); + var dates; + hoverListener.start(function(cell, origCell) { + clearSelection(); + if (cell && cell.col == origCell.col && !cellIsAllDay(cell)) { + var d1 = cellDate(origCell); + var d2 = cellDate(cell); + dates = [ + d1, + addMinutes(cloneDate(d1), opt('slotMinutes')), + d2, + addMinutes(cloneDate(d2), opt('slotMinutes')) + ].sort(cmp); + renderSlotSelection(dates[0], dates[3]); + }else{ + dates = null; + } + }, ev); + $(document).one('mouseup', function(ev) { + hoverListener.stop(); + if (dates) { + if (+dates[0] == +dates[1]) { + reportDayClick(dates[0], false, ev); + } + reportSelection(dates[0], dates[3], false, ev); + } + }); + } + } + + + function reportDayClick(date, allDay, ev) { + trigger('dayClick', dayBodyCells[dayOfWeekCol(date.getDay())], date, allDay, ev); + } + + + + /* External Dragging + --------------------------------------------------------------------------------*/ + + + function dragStart(_dragElement, ev, ui) { + hoverListener.start(function(cell) { + clearOverlays(); + if (cell) { + if (cellIsAllDay(cell)) { + renderCellOverlay(cell.row, cell.col, cell.row, cell.col); + }else{ + var d1 = cellDate(cell); + var d2 = addMinutes(cloneDate(d1), opt('defaultEventMinutes')); + renderSlotOverlay(d1, d2); + } + } + }, ev); + } + + + function dragStop(_dragElement, ev, ui) { + var cell = hoverListener.stop(); + clearOverlays(); + if (cell) { + trigger('drop', _dragElement, cellDate(cell), cellIsAllDay(cell), ev, ui); + } + } + + +} + +function AgendaEventRenderer() { + var t = this; + + + // exports + t.renderEvents = renderEvents; + t.compileDaySegs = compileDaySegs; // for DayEventRenderer + t.clearEvents = clearEvents; + t.slotSegHtml = slotSegHtml; + t.bindDaySeg = bindDaySeg; + + + // imports + DayEventRenderer.call(t); + var opt = t.opt; + var trigger = t.trigger; + //var setOverflowHidden = t.setOverflowHidden; + var isEventDraggable = t.isEventDraggable; + var isEventResizable = t.isEventResizable; + var eventEnd = t.eventEnd; + var reportEvents = t.reportEvents; + var reportEventClear = t.reportEventClear; + var eventElementHandlers = t.eventElementHandlers; + var setHeight = t.setHeight; + var getDaySegmentContainer = t.getDaySegmentContainer; + var getSlotSegmentContainer = t.getSlotSegmentContainer; + var getHoverListener = t.getHoverListener; + var getMaxMinute = t.getMaxMinute; + var getMinMinute = t.getMinMinute; + var timePosition = t.timePosition; + var colContentLeft = t.colContentLeft; + var colContentRight = t.colContentRight; + var renderDaySegs = t.renderDaySegs; + var resizableDayEvent = t.resizableDayEvent; // TODO: streamline binding architecture + var getColCnt = t.getColCnt; + var getColWidth = t.getColWidth; + var getSlotHeight = t.getSlotHeight; + var getBodyContent = t.getBodyContent; + var reportEventElement = t.reportEventElement; + var showEvents = t.showEvents; + var hideEvents = t.hideEvents; + var eventDrop = t.eventDrop; + var eventResize = t.eventResize; + var renderDayOverlay = t.renderDayOverlay; + var clearOverlays = t.clearOverlays; + var calendar = t.calendar; + var formatDate = calendar.formatDate; + var formatDates = calendar.formatDates; + + + + /* Rendering + ----------------------------------------------------------------------------*/ + + + function renderEvents(events, modifiedEventId) { + reportEvents(events); + var i, len=events.length, + dayEvents=[], + slotEvents=[]; + for (i=0; i<len; i++) { + if (events[i].allDay) { + dayEvents.push(events[i]); + }else{ + slotEvents.push(events[i]); + } + } + if (opt('allDaySlot')) { + renderDaySegs(compileDaySegs(dayEvents), modifiedEventId); + setHeight(); // no params means set to viewHeight + } + renderSlotSegs(compileSlotSegs(slotEvents), modifiedEventId); + } + + + function clearEvents() { + reportEventClear(); + getDaySegmentContainer().empty(); + getSlotSegmentContainer().empty(); + } + + + function compileDaySegs(events) { + var levels = stackSegs(sliceSegs(events, $.map(events, exclEndDay), t.visStart, t.visEnd)), + i, levelCnt=levels.length, level, + j, seg, + segs=[]; + for (i=0; i<levelCnt; i++) { + level = levels[i]; + for (j=0; j<level.length; j++) { + seg = level[j]; + seg.row = 0; + seg.level = i; // not needed anymore + segs.push(seg); + } + } + return segs; + } + + + function compileSlotSegs(events) { + var colCnt = getColCnt(), + minMinute = getMinMinute(), + maxMinute = getMaxMinute(), + d = addMinutes(cloneDate(t.visStart), minMinute), + visEventEnds = $.map(events, slotEventEnd), + i, col, + j, level, + k, seg, + segs=[]; + for (i=0; i<colCnt; i++) { + col = stackSegs(sliceSegs(events, visEventEnds, d, addMinutes(cloneDate(d), maxMinute-minMinute))); + countForwardSegs(col); + for (j=0; j<col.length; j++) { + level = col[j]; + for (k=0; k<level.length; k++) { + seg = level[k]; + seg.col = i; + seg.level = j; + segs.push(seg); + } + } + addDays(d, 1, true); + } + return segs; + } + + + function slotEventEnd(event) { + if (event.end) { + return cloneDate(event.end); + }else{ + return addMinutes(cloneDate(event.start), opt('defaultEventMinutes')); + } + } + + + // renders events in the 'time slots' at the bottom + + function renderSlotSegs(segs, modifiedEventId) { + + var i, segCnt=segs.length, seg, + event, + classes, + top, bottom, + colI, levelI, forward, + leftmost, + availWidth, + outerWidth, + left, + html='', + eventElements, + eventElement, + triggerRes, + vsideCache={}, + hsideCache={}, + key, val, + contentElement, + height, + slotSegmentContainer = getSlotSegmentContainer(), + rtl, dis, dit, + colCnt = getColCnt(); + + if (rtl = opt('isRTL')) { + dis = -1; + dit = colCnt - 1; + }else{ + dis = 1; + dit = 0; + } + + // calculate position/dimensions, create html + for (i=0; i<segCnt; i++) { + seg = segs[i]; + event = seg.event; + top = timePosition(seg.start, seg.start); + bottom = timePosition(seg.start, seg.end); + colI = seg.col; + levelI = seg.level; + forward = seg.forward || 0; + leftmost = colContentLeft(colI*dis + dit); + availWidth = colContentRight(colI*dis + dit) - leftmost; + availWidth = Math.min(availWidth-6, availWidth*.95); // TODO: move this to CSS + if (levelI) { + // indented and thin + outerWidth = availWidth / (levelI + forward + 1); + }else{ + if (forward) { + // moderately wide, aligned left still + outerWidth = ((availWidth / (forward + 1)) - (12/2)) * 2; // 12 is the predicted width of resizer = + }else{ + // can be entire width, aligned left + outerWidth = availWidth; + } + } + left = leftmost + // leftmost possible + (availWidth / (levelI + forward + 1) * levelI) // indentation + * dis + (rtl ? availWidth - outerWidth : 0); // rtl + seg.top = top; + seg.left = left; + seg.outerWidth = outerWidth; + seg.outerHeight = bottom - top; + html += slotSegHtml(event, seg); + } + slotSegmentContainer[0].innerHTML = html; // faster than html() + eventElements = slotSegmentContainer.children(); + + // retrieve elements, run through eventRender callback, bind event handlers + for (i=0; i<segCnt; i++) { + seg = segs[i]; + event = seg.event; + eventElement = $(eventElements[i]); // faster than eq() + triggerRes = trigger('eventRender', event, event, eventElement); + if (triggerRes === false) { + eventElement.remove(); + }else{ + if (triggerRes && triggerRes !== true) { + eventElement.remove(); + eventElement = $(triggerRes) + .css({ + position: 'absolute', + top: seg.top, + left: seg.left + }) + .appendTo(slotSegmentContainer); + } + seg.element = eventElement; + if (event._id === modifiedEventId) { + bindSlotSeg(event, eventElement, seg); + }else{ + eventElement[0]._fci = i; // for lazySegBind + } + reportEventElement(event, eventElement); + } + } + + lazySegBind(slotSegmentContainer, segs, bindSlotSeg); + + // record event sides and title positions + for (i=0; i<segCnt; i++) { + seg = segs[i]; + if (eventElement = seg.element) { + val = vsideCache[key = seg.key = cssKey(eventElement[0])]; + seg.vsides = val === undefined ? (vsideCache[key] = vsides(eventElement, true)) : val; + val = hsideCache[key]; + seg.hsides = val === undefined ? (hsideCache[key] = hsides(eventElement, true)) : val; + contentElement = eventElement.find('div.fc-event-content'); + if (contentElement.length) { + seg.contentTop = contentElement[0].offsetTop; + } + } + } + + // set all positions/dimensions at once + for (i=0; i<segCnt; i++) { + seg = segs[i]; + if (eventElement = seg.element) { + eventElement[0].style.width = Math.max(0, seg.outerWidth - seg.hsides) + 'px'; + height = Math.max(0, seg.outerHeight - seg.vsides); + eventElement[0].style.height = height + 'px'; + event = seg.event; + if (seg.contentTop !== undefined && height - seg.contentTop < 10) { + // not enough room for title, put it in the time header + eventElement.find('div.fc-event-time') + .text(formatDate(event.start, opt('timeFormat')) + ' - ' + event.title); + eventElement.find('div.fc-event-title') + .remove(); + } + trigger('eventAfterRender', event, event, eventElement); + } + } + + } + + + function slotSegHtml(event, seg) { + var html = "<"; + var url = event.url; + var skinCss = getSkinCss(event, opt); + var skinCssAttr = (skinCss ? " style='" + skinCss + "'" : ''); + var classes = ['fc-event', 'fc-event-skin', 'fc-event-vert']; + if (isEventDraggable(event)) { + classes.push('fc-event-draggable'); + } + if (seg.isStart) { + classes.push('fc-corner-top'); + } + if (seg.isEnd) { + classes.push('fc-corner-bottom'); + } + classes = classes.concat(event.className); + if (event.source) { + classes = classes.concat(event.source.className || []); + } + if (url) { + html += "a href='" + htmlEscape(event.url) + "'"; + }else{ + html += "div"; + } + html += + " class='" + classes.join(' ') + "'" + + " style='position:absolute;z-index:8;top:" + seg.top + "px;left:" + seg.left + "px;" + skinCss + "'" + + ">" + + "<div class='fc-event-inner fc-event-skin'" + skinCssAttr + ">" + + "<div class='fc-event-head fc-event-skin'" + skinCssAttr + ">" + + "<div class='fc-event-time'>" + + htmlEscape(formatDates(event.start, event.end, opt('timeFormat'))) + + "</div>" + + "</div>" + + "<div class='fc-event-content'>" + + "<div class='fc-event-title'>" + + htmlEscape(event.title) + + "</div>" + + "</div>" + + "<div class='fc-event-bg'></div>" + + "</div>"; // close inner + if (seg.isEnd && isEventResizable(event)) { + html += + "<div class='ui-resizable-handle ui-resizable-s'>=</div>"; + } + html += + "</" + (url ? "a" : "div") + ">"; + return html; + } + + + function bindDaySeg(event, eventElement, seg) { + if (isEventDraggable(event)) { + draggableDayEvent(event, eventElement, seg.isStart); + } + if (seg.isEnd && isEventResizable(event)) { + resizableDayEvent(event, eventElement, seg); + } + eventElementHandlers(event, eventElement); + // needs to be after, because resizableDayEvent might stopImmediatePropagation on click + } + + + function bindSlotSeg(event, eventElement, seg) { + var timeElement = eventElement.find('div.fc-event-time'); + if (isEventDraggable(event)) { + draggableSlotEvent(event, eventElement, timeElement); + } + if (seg.isEnd && isEventResizable(event)) { + resizableSlotEvent(event, eventElement, timeElement); + } + eventElementHandlers(event, eventElement); + } + + + + /* Dragging + -----------------------------------------------------------------------------------*/ + + + // when event starts out FULL-DAY + + function draggableDayEvent(event, eventElement, isStart) { + var origWidth; + var revert; + var allDay=true; + var dayDelta; + var dis = opt('isRTL') ? -1 : 1; + var hoverListener = getHoverListener(); + var colWidth = getColWidth(); + var slotHeight = getSlotHeight(); + var minMinute = getMinMinute(); + eventElement.draggable({ + zIndex: 9, + opacity: opt('dragOpacity', 'month'), // use whatever the month view was using + revertDuration: opt('dragRevertDuration'), + start: function(ev, ui) { + trigger('eventDragStart', eventElement, event, ev, ui); + hideEvents(event, eventElement); + origWidth = eventElement.width(); + hoverListener.start(function(cell, origCell, rowDelta, colDelta) { + clearOverlays(); + if (cell) { + //setOverflowHidden(true); + revert = false; + dayDelta = colDelta * dis; + if (!cell.row) { + // on full-days + renderDayOverlay( + addDays(cloneDate(event.start), dayDelta), + addDays(exclEndDay(event), dayDelta) + ); + resetElement(); + }else{ + // mouse is over bottom slots + if (isStart) { + if (allDay) { + // convert event to temporary slot-event + eventElement.width(colWidth - 10); // don't use entire width + setOuterHeight( + eventElement, + slotHeight * Math.round( + (event.end ? ((event.end - event.start) / MINUTE_MS) : opt('defaultEventMinutes')) + / opt('slotMinutes') + ) + ); + eventElement.draggable('option', 'grid', [colWidth, 1]); + allDay = false; + } + }else{ + revert = true; + } + } + revert = revert || (allDay && !dayDelta); + }else{ + resetElement(); + //setOverflowHidden(false); + revert = true; + } + eventElement.draggable('option', 'revert', revert); + }, ev, 'drag'); + }, + stop: function(ev, ui) { + hoverListener.stop(); + clearOverlays(); + trigger('eventDragStop', eventElement, event, ev, ui); + if (revert) { + // hasn't moved or is out of bounds (draggable has already reverted) + resetElement(); + eventElement.css('filter', ''); // clear IE opacity side-effects + showEvents(event, eventElement); + }else{ + // changed! + var minuteDelta = 0; + if (!allDay) { + minuteDelta = Math.round((eventElement.offset().top - getBodyContent().offset().top) / slotHeight) + * opt('slotMinutes') + + minMinute + - (event.start.getHours() * 60 + event.start.getMinutes()); + } + eventDrop(this, event, dayDelta, minuteDelta, allDay, ev, ui); + } + //setOverflowHidden(false); + } + }); + function resetElement() { + if (!allDay) { + eventElement + .width(origWidth) + .height('') + .draggable('option', 'grid', null); + allDay = true; + } + } + } + + + // when event starts out IN TIMESLOTS + + function draggableSlotEvent(event, eventElement, timeElement) { + var origPosition; + var allDay=false; + var dayDelta; + var minuteDelta; + var prevMinuteDelta; + var dis = opt('isRTL') ? -1 : 1; + var hoverListener = getHoverListener(); + var colCnt = getColCnt(); + var colWidth = getColWidth(); + var slotHeight = getSlotHeight(); + eventElement.draggable({ + zIndex: 9, + scroll: false, + grid: [colWidth, slotHeight], + axis: colCnt==1 ? 'y' : false, + opacity: opt('dragOpacity'), + revertDuration: opt('dragRevertDuration'), + start: function(ev, ui) { + trigger('eventDragStart', eventElement, event, ev, ui); + hideEvents(event, eventElement); + origPosition = eventElement.position(); + minuteDelta = prevMinuteDelta = 0; + hoverListener.start(function(cell, origCell, rowDelta, colDelta) { + eventElement.draggable('option', 'revert', !cell); + clearOverlays(); + if (cell) { + dayDelta = colDelta * dis; + if (opt('allDaySlot') && !cell.row) { + // over full days + if (!allDay) { + // convert to temporary all-day event + allDay = true; + timeElement.hide(); + eventElement.draggable('option', 'grid', null); + } + renderDayOverlay( + addDays(cloneDate(event.start), dayDelta), + addDays(exclEndDay(event), dayDelta) + ); + }else{ + // on slots + resetElement(); + } + } + }, ev, 'drag'); + }, + drag: function(ev, ui) { + minuteDelta = Math.round((ui.position.top - origPosition.top) / slotHeight) * opt('slotMinutes'); + if (minuteDelta != prevMinuteDelta) { + if (!allDay) { + updateTimeText(minuteDelta); + } + prevMinuteDelta = minuteDelta; + } + }, + stop: function(ev, ui) { + var cell = hoverListener.stop(); + clearOverlays(); + trigger('eventDragStop', eventElement, event, ev, ui); + if (cell && (dayDelta || minuteDelta || allDay)) { + // changed! + eventDrop(this, event, dayDelta, allDay ? 0 : minuteDelta, allDay, ev, ui); + }else{ + // either no change or out-of-bounds (draggable has already reverted) + resetElement(); + eventElement.css('filter', ''); // clear IE opacity side-effects + eventElement.css(origPosition); // sometimes fast drags make event revert to wrong position + updateTimeText(0); + showEvents(event, eventElement); + } + } + }); + function updateTimeText(minuteDelta) { + var newStart = addMinutes(cloneDate(event.start), minuteDelta); + var newEnd; + if (event.end) { + newEnd = addMinutes(cloneDate(event.end), minuteDelta); + } + timeElement.text(formatDates(newStart, newEnd, opt('timeFormat'))); + } + function resetElement() { + // convert back to original slot-event + if (allDay) { + timeElement.css('display', ''); // show() was causing display=inline + eventElement.draggable('option', 'grid', [colWidth, slotHeight]); + allDay = false; + } + } + } + + + + /* Resizing + --------------------------------------------------------------------------------------*/ + + + function resizableSlotEvent(event, eventElement, timeElement) { + var slotDelta, prevSlotDelta; + var slotHeight = getSlotHeight(); + eventElement.resizable({ + handles: { + s: 'div.ui-resizable-s' + }, + grid: slotHeight, + start: function(ev, ui) { + slotDelta = prevSlotDelta = 0; + hideEvents(event, eventElement); + eventElement.css('z-index', 9); + trigger('eventResizeStart', this, event, ev, ui); + }, + resize: function(ev, ui) { + // don't rely on ui.size.height, doesn't take grid into account + slotDelta = Math.round((Math.max(slotHeight, eventElement.height()) - ui.originalSize.height) / slotHeight); + if (slotDelta != prevSlotDelta) { + timeElement.text( + formatDates( + event.start, + (!slotDelta && !event.end) ? null : // no change, so don't display time range + addMinutes(eventEnd(event), opt('slotMinutes')*slotDelta), + opt('timeFormat') + ) + ); + prevSlotDelta = slotDelta; + } + }, + stop: function(ev, ui) { + trigger('eventResizeStop', this, event, ev, ui); + if (slotDelta) { + eventResize(this, event, 0, opt('slotMinutes')*slotDelta, ev, ui); + }else{ + eventElement.css('z-index', 8); + showEvents(event, eventElement); + // BUG: if event was really short, need to put title back in span + } + } + }); + } + + +} + + +function countForwardSegs(levels) { + var i, j, k, level, segForward, segBack; + for (i=levels.length-1; i>0; i--) { + level = levels[i]; + for (j=0; j<level.length; j++) { + segForward = level[j]; + for (k=0; k<levels[i-1].length; k++) { + segBack = levels[i-1][k]; + if (segsCollide(segForward, segBack)) { + segBack.forward = Math.max(segBack.forward||0, (segForward.forward||0)+1); + } + } + } + } +} + + + + +function View(element, calendar, viewName) { + var t = this; + + + // exports + t.element = element; + t.calendar = calendar; + t.name = viewName; + t.opt = opt; + t.trigger = trigger; + //t.setOverflowHidden = setOverflowHidden; + t.isEventDraggable = isEventDraggable; + t.isEventResizable = isEventResizable; + t.reportEvents = reportEvents; + t.eventEnd = eventEnd; + t.reportEventElement = reportEventElement; + t.reportEventClear = reportEventClear; + t.eventElementHandlers = eventElementHandlers; + t.showEvents = showEvents; + t.hideEvents = hideEvents; + t.eventDrop = eventDrop; + t.eventResize = eventResize; + // t.title + // t.start, t.end + // t.visStart, t.visEnd + + + // imports + var defaultEventEnd = t.defaultEventEnd; + var normalizeEvent = calendar.normalizeEvent; // in EventManager + var reportEventChange = calendar.reportEventChange; + + + // locals + var eventsByID = {}; + var eventElements = []; + var eventElementsByID = {}; + var options = calendar.options; + + + + function opt(name, viewNameOverride) { + var v = options[name]; + if (typeof v == 'object') { + return smartProperty(v, viewNameOverride || viewName); + } + return v; + } + + + function trigger(name, thisObj) { + return calendar.trigger.apply( + calendar, + [name, thisObj || t].concat(Array.prototype.slice.call(arguments, 2), [t]) + ); + } + + + /* + function setOverflowHidden(bool) { + element.css('overflow', bool ? 'hidden' : ''); + } + */ + + + function isEventDraggable(event) { + return isEventEditable(event) && !opt('disableDragging'); + } + + + function isEventResizable(event) { // but also need to make sure the seg.isEnd == true + return isEventEditable(event) && !opt('disableResizing'); + } + + + function isEventEditable(event) { + return firstDefined(event.editable, (event.source || {}).editable, opt('editable')); + } + + + + /* Event Data + ------------------------------------------------------------------------------*/ + + + // report when view receives new events + function reportEvents(events) { // events are already normalized at this point + eventsByID = {}; + var i, len=events.length, event; + for (i=0; i<len; i++) { + event = events[i]; + if (eventsByID[event._id]) { + eventsByID[event._id].push(event); + }else{ + eventsByID[event._id] = [event]; + } + } + } + + + // returns a Date object for an event's end + function eventEnd(event) { + return event.end ? cloneDate(event.end) : defaultEventEnd(event); + } + + + + /* Event Elements + ------------------------------------------------------------------------------*/ + + + // report when view creates an element for an event + function reportEventElement(event, element) { + eventElements.push(element); + if (eventElementsByID[event._id]) { + eventElementsByID[event._id].push(element); + }else{ + eventElementsByID[event._id] = [element]; + } + } + + + function reportEventClear() { + eventElements = []; + eventElementsByID = {}; + } + + + // attaches eventClick, eventMouseover, eventMouseout + function eventElementHandlers(event, eventElement) { + eventElement + .click(function(ev) { + if (!eventElement.hasClass('ui-draggable-dragging') && + !eventElement.hasClass('ui-resizable-resizing')) { + return trigger('eventClick', this, event, ev); + } + }) + .hover( + function(ev) { + trigger('eventMouseover', this, event, ev); + }, + function(ev) { + trigger('eventMouseout', this, event, ev); + } + ); + // TODO: don't fire eventMouseover/eventMouseout *while* dragging is occuring (on subject element) + // TODO: same for resizing + } + + + function showEvents(event, exceptElement) { + eachEventElement(event, exceptElement, 'show'); + } + + + function hideEvents(event, exceptElement) { + eachEventElement(event, exceptElement, 'hide'); + } + + + function eachEventElement(event, exceptElement, funcName) { + var elements = eventElementsByID[event._id], + i, len = elements.length; + for (i=0; i<len; i++) { + if (!exceptElement || elements[i][0] != exceptElement[0]) { + elements[i][funcName](); + } + } + } + + + + /* Event Modification Reporting + ---------------------------------------------------------------------------------*/ + + + function eventDrop(e, event, dayDelta, minuteDelta, allDay, ev, ui) { + var oldAllDay = event.allDay; + var eventId = event._id; + moveEvents(eventsByID[eventId], dayDelta, minuteDelta, allDay); + trigger( + 'eventDrop', + e, + event, + dayDelta, + minuteDelta, + allDay, + function() { + // TODO: investigate cases where this inverse technique might not work + moveEvents(eventsByID[eventId], -dayDelta, -minuteDelta, oldAllDay); + reportEventChange(eventId); + }, + ev, + ui + ); + reportEventChange(eventId); + } + + + function eventResize(e, event, dayDelta, minuteDelta, ev, ui) { + var eventId = event._id; + elongateEvents(eventsByID[eventId], dayDelta, minuteDelta); + trigger( + 'eventResize', + e, + event, + dayDelta, + minuteDelta, + function() { + // TODO: investigate cases where this inverse technique might not work + elongateEvents(eventsByID[eventId], -dayDelta, -minuteDelta); + reportEventChange(eventId); + }, + ev, + ui + ); + reportEventChange(eventId); + } + + + + /* Event Modification Math + ---------------------------------------------------------------------------------*/ + + + function moveEvents(events, dayDelta, minuteDelta, allDay) { + minuteDelta = minuteDelta || 0; + for (var e, len=events.length, i=0; i<len; i++) { + e = events[i]; + if (allDay !== undefined) { + e.allDay = allDay; + } + addMinutes(addDays(e.start, dayDelta, true), minuteDelta); + if (e.end) { + e.end = addMinutes(addDays(e.end, dayDelta, true), minuteDelta); + } + normalizeEvent(e, options); + } + } + + + function elongateEvents(events, dayDelta, minuteDelta) { + minuteDelta = minuteDelta || 0; + for (var e, len=events.length, i=0; i<len; i++) { + e = events[i]; + e.end = addMinutes(addDays(eventEnd(e), dayDelta, true), minuteDelta); + normalizeEvent(e, options); + } + } + + +} + +function DayEventRenderer() { + var t = this; + + + // exports + t.renderDaySegs = renderDaySegs; + t.resizableDayEvent = resizableDayEvent; + + + // imports + var opt = t.opt; + var trigger = t.trigger; + var isEventDraggable = t.isEventDraggable; + var isEventResizable = t.isEventResizable; + var eventEnd = t.eventEnd; + var reportEventElement = t.reportEventElement; + var showEvents = t.showEvents; + var hideEvents = t.hideEvents; + var eventResize = t.eventResize; + var getRowCnt = t.getRowCnt; + var getColCnt = t.getColCnt; + var getColWidth = t.getColWidth; + var allDayRow = t.allDayRow; + var allDayBounds = t.allDayBounds; + var colContentLeft = t.colContentLeft; + var colContentRight = t.colContentRight; + var dayOfWeekCol = t.dayOfWeekCol; + var dateCell = t.dateCell; + var compileDaySegs = t.compileDaySegs; + var getDaySegmentContainer = t.getDaySegmentContainer; + var bindDaySeg = t.bindDaySeg; //TODO: streamline this + var formatDates = t.calendar.formatDates; + var renderDayOverlay = t.renderDayOverlay; + var clearOverlays = t.clearOverlays; + var clearSelection = t.clearSelection; + + + + /* Rendering + -----------------------------------------------------------------------------*/ + + + function renderDaySegs(segs, modifiedEventId) { + var segmentContainer = getDaySegmentContainer(); + var rowDivs; + var rowCnt = getRowCnt(); + var colCnt = getColCnt(); + var i = 0; + var rowI; + var levelI; + var colHeights; + var j; + var segCnt = segs.length; + var seg; + var top; + var k; + segmentContainer[0].innerHTML = daySegHTML(segs); // faster than .html() + daySegElementResolve(segs, segmentContainer.children()); + daySegElementReport(segs); + daySegHandlers(segs, segmentContainer, modifiedEventId); + daySegCalcHSides(segs); + daySegSetWidths(segs); + daySegCalcHeights(segs); + rowDivs = getRowDivs(); + // set row heights, calculate event tops (in relation to row top) + for (rowI=0; rowI<rowCnt; rowI++) { + levelI = 0; + colHeights = []; + for (j=0; j<colCnt; j++) { + colHeights[j] = 0; + } + while (i<segCnt && (seg = segs[i]).row == rowI) { + // loop through segs in a row + top = arrayMax(colHeights.slice(seg.startCol, seg.endCol)); + seg.top = top; + top += seg.outerHeight; + for (k=seg.startCol; k<seg.endCol; k++) { + colHeights[k] = top; + } + i++; + } + rowDivs[rowI].height(arrayMax(colHeights)); + } + daySegSetTops(segs, getRowTops(rowDivs)); + } + + + function renderTempDaySegs(segs, adjustRow, adjustTop) { + var tempContainer = $("<div/>"); + var elements; + var segmentContainer = getDaySegmentContainer(); + var i; + var segCnt = segs.length; + var element; + tempContainer[0].innerHTML = daySegHTML(segs); // faster than .html() + elements = tempContainer.children(); + segmentContainer.append(elements); + daySegElementResolve(segs, elements); + daySegCalcHSides(segs); + daySegSetWidths(segs); + daySegCalcHeights(segs); + daySegSetTops(segs, getRowTops(getRowDivs())); + elements = []; + for (i=0; i<segCnt; i++) { + element = segs[i].element; + if (element) { + if (segs[i].row === adjustRow) { + element.css('top', adjustTop); + } + elements.push(element[0]); + } + } + return $(elements); + } + + + function daySegHTML(segs) { // also sets seg.left and seg.outerWidth + var rtl = opt('isRTL'); + var i; + var segCnt=segs.length; + var seg; + var event; + var url; + var classes; + var bounds = allDayBounds(); + var minLeft = bounds.left; + var maxLeft = bounds.right; + var leftCol; + var rightCol; + var left; + var right; + var skinCss; + var html = ''; + // calculate desired position/dimensions, create html + for (i=0; i<segCnt; i++) { + seg = segs[i]; + event = seg.event; + classes = ['fc-event', 'fc-event-skin', 'fc-event-hori']; + if (isEventDraggable(event)) { + classes.push('fc-event-draggable'); + } + if (rtl) { + if (seg.isStart) { + classes.push('fc-corner-right'); + } + if (seg.isEnd) { + classes.push('fc-corner-left'); + } + leftCol = dayOfWeekCol(seg.end.getDay()-1); + rightCol = dayOfWeekCol(seg.start.getDay()); + left = seg.isEnd ? colContentLeft(leftCol) : minLeft; + right = seg.isStart ? colContentRight(rightCol) : maxLeft; + }else{ + if (seg.isStart) { + classes.push('fc-corner-left'); + } + if (seg.isEnd) { + classes.push('fc-corner-right'); + } + leftCol = dayOfWeekCol(seg.start.getDay()); + rightCol = dayOfWeekCol(seg.end.getDay()-1); + left = seg.isStart ? colContentLeft(leftCol) : minLeft; + right = seg.isEnd ? colContentRight(rightCol) : maxLeft; + } + classes = classes.concat(event.className); + if (event.source) { + classes = classes.concat(event.source.className || []); + } + url = event.url; + skinCss = getSkinCss(event, opt); + if (url) { + html += "<a href='" + htmlEscape(url) + "'"; + }else{ + html += "<div"; + } + html += + " class='" + classes.join(' ') + "'" + + " style='position:absolute;z-index:8;left:"+left+"px;" + skinCss + "'" + + ">" + + "<div" + + " class='fc-event-inner fc-event-skin'" + + (skinCss ? " style='" + skinCss + "'" : '') + + ">"; + if (!event.allDay && seg.isStart) { + html += + "<span class='fc-event-time'>" + + htmlEscape(formatDates(event.start, event.end, opt('timeFormat'))) + + "</span>"; + } + html += + "<span class='fc-event-title'>" + htmlEscape(event.title) + "</span>" + + "</div>"; + if (seg.isEnd && isEventResizable(event)) { + html += + "<div class='ui-resizable-handle ui-resizable-" + (rtl ? 'w' : 'e') + "'>" + + "   " + // makes hit area a lot better for IE6/7 + "</div>"; + } + html += + "</" + (url ? "a" : "div" ) + ">"; + seg.left = left; + seg.outerWidth = right - left; + seg.startCol = leftCol; + seg.endCol = rightCol + 1; // needs to be exclusive + } + return html; + } + + + function daySegElementResolve(segs, elements) { // sets seg.element + var i; + var segCnt = segs.length; + var seg; + var event; + var element; + var triggerRes; + for (i=0; i<segCnt; i++) { + seg = segs[i]; + event = seg.event; + element = $(elements[i]); // faster than .eq() + triggerRes = trigger('eventRender', event, event, element); + if (triggerRes === false) { + element.remove(); + }else{ + if (triggerRes && triggerRes !== true) { + triggerRes = $(triggerRes) + .css({ + position: 'absolute', + left: seg.left + }); + element.replaceWith(triggerRes); + element = triggerRes; + } + seg.element = element; + } + } + } + + + function daySegElementReport(segs) { + var i; + var segCnt = segs.length; + var seg; + var element; + for (i=0; i<segCnt; i++) { + seg = segs[i]; + element = seg.element; + if (element) { + reportEventElement(seg.event, element); + } + } + } + + + function daySegHandlers(segs, segmentContainer, modifiedEventId) { + var i; + var segCnt = segs.length; + var seg; + var element; + var event; + // retrieve elements, run through eventRender callback, bind handlers + for (i=0; i<segCnt; i++) { + seg = segs[i]; + element = seg.element; + if (element) { + event = seg.event; + if (event._id === modifiedEventId) { + bindDaySeg(event, element, seg); + }else{ + element[0]._fci = i; // for lazySegBind + } + } + } + lazySegBind(segmentContainer, segs, bindDaySeg); + } + + + function daySegCalcHSides(segs) { // also sets seg.key + var i; + var segCnt = segs.length; + var seg; + var element; + var key, val; + var hsideCache = {}; + // record event horizontal sides + for (i=0; i<segCnt; i++) { + seg = segs[i]; + element = seg.element; + if (element) { + key = seg.key = cssKey(element[0]); + val = hsideCache[key]; + if (val === undefined) { + val = hsideCache[key] = hsides(element, true); + } + seg.hsides = val; + } + } + } + + + function daySegSetWidths(segs) { + var i; + var segCnt = segs.length; + var seg; + var element; + for (i=0; i<segCnt; i++) { + seg = segs[i]; + element = seg.element; + if (element) { + element[0].style.width = Math.max(0, seg.outerWidth - seg.hsides) + 'px'; + } + } + } + + + function daySegCalcHeights(segs) { + var i; + var segCnt = segs.length; + var seg; + var element; + var key, val; + var vmarginCache = {}; + // record event heights + for (i=0; i<segCnt; i++) { + seg = segs[i]; + element = seg.element; + if (element) { + key = seg.key; // created in daySegCalcHSides + val = vmarginCache[key]; + if (val === undefined) { + val = vmarginCache[key] = vmargins(element); + } + seg.outerHeight = element[0].offsetHeight + val; + } + } + } + + + function getRowDivs() { + var i; + var rowCnt = getRowCnt(); + var rowDivs = []; + for (i=0; i<rowCnt; i++) { + rowDivs[i] = allDayRow(i) + .find('td:first div.fc-day-content > div'); // optimal selector? + } + return rowDivs; + } + + + function getRowTops(rowDivs) { + var i; + var rowCnt = rowDivs.length; + var tops = []; + for (i=0; i<rowCnt; i++) { + tops[i] = rowDivs[i][0].offsetTop; // !!?? but this means the element needs position:relative if in a table cell!!!! + } + return tops; + } + + + function daySegSetTops(segs, rowTops) { // also triggers eventAfterRender + var i; + var segCnt = segs.length; + var seg; + var element; + var event; + for (i=0; i<segCnt; i++) { + seg = segs[i]; + element = seg.element; + if (element) { + element[0].style.top = rowTops[seg.row] + (seg.top||0) + 'px'; + event = seg.event; + trigger('eventAfterRender', event, event, element); + } + } + } + + + + /* Resizing + -----------------------------------------------------------------------------------*/ + + + function resizableDayEvent(event, element, seg) { + var rtl = opt('isRTL'); + var direction = rtl ? 'w' : 'e'; + var handle = element.find('div.ui-resizable-' + direction); + var isResizing = false; + + // TODO: look into using jquery-ui mouse widget for this stuff + disableTextSelection(element); // prevent native <a> selection for IE + element + .mousedown(function(ev) { // prevent native <a> selection for others + ev.preventDefault(); + }) + .click(function(ev) { + if (isResizing) { + ev.preventDefault(); // prevent link from being visited (only method that worked in IE6) + ev.stopImmediatePropagation(); // prevent fullcalendar eventClick handler from being called + // (eventElementHandlers needs to be bound after resizableDayEvent) + } + }); + + handle.mousedown(function(ev) { + if (ev.which != 1) { + return; // needs to be left mouse button + } + isResizing = true; + var hoverListener = t.getHoverListener(); + var rowCnt = getRowCnt(); + var colCnt = getColCnt(); + var dis = rtl ? -1 : 1; + var dit = rtl ? colCnt-1 : 0; + var elementTop = element.css('top'); + var dayDelta; + var helpers; + var eventCopy = $.extend({}, event); + var minCell = dateCell(event.start); + clearSelection(); + $('body') + .css('cursor', direction + '-resize') + .one('mouseup', mouseup); + trigger('eventResizeStart', this, event, ev); + hoverListener.start(function(cell, origCell) { + if (cell) { + var r = Math.max(minCell.row, cell.row); + var c = cell.col; + if (rowCnt == 1) { + r = 0; // hack for all-day area in agenda views + } + if (r == minCell.row) { + if (rtl) { + c = Math.min(minCell.col, c); + }else{ + c = Math.max(minCell.col, c); + } + } + dayDelta = (r*7 + c*dis+dit) - (origCell.row*7 + origCell.col*dis+dit); + var newEnd = addDays(eventEnd(event), dayDelta, true); + if (dayDelta) { + eventCopy.end = newEnd; + var oldHelpers = helpers; + helpers = renderTempDaySegs(compileDaySegs([eventCopy]), seg.row, elementTop); + helpers.find('*').css('cursor', direction + '-resize'); + if (oldHelpers) { + oldHelpers.remove(); + } + hideEvents(event); + }else{ + if (helpers) { + showEvents(event); + helpers.remove(); + helpers = null; + } + } + clearOverlays(); + renderDayOverlay(event.start, addDays(cloneDate(newEnd), 1)); // coordinate grid already rebuild at hoverListener.start + } + }, ev); + + function mouseup(ev) { + trigger('eventResizeStop', this, event, ev); + $('body').css('cursor', ''); + hoverListener.stop(); + clearOverlays(); + if (dayDelta) { + eventResize(this, event, dayDelta, 0, ev); + // event redraw will clear helpers + } + // otherwise, the drag handler already restored the old events + + setTimeout(function() { // make this happen after the element's click event + isResizing = false; + },0); + } + + }); + } + + +} + +//BUG: unselect needs to be triggered when events are dragged+dropped + +function SelectionManager() { + var t = this; + + + // exports + t.select = select; + t.unselect = unselect; + t.reportSelection = reportSelection; + t.daySelectionMousedown = daySelectionMousedown; + + + // imports + var opt = t.opt; + var trigger = t.trigger; + var defaultSelectionEnd = t.defaultSelectionEnd; + var renderSelection = t.renderSelection; + var clearSelection = t.clearSelection; + + + // locals + var selected = false; + + + + // unselectAuto + if (opt('selectable') && opt('unselectAuto')) { + $(document).mousedown(function(ev) { + var ignore = opt('unselectCancel'); + if (ignore) { + if ($(ev.target).parents(ignore).length) { // could be optimized to stop after first match + return; + } + } + unselect(ev); + }); + } + + + function select(startDate, endDate, allDay) { + unselect(); + if (!endDate) { + endDate = defaultSelectionEnd(startDate, allDay); + } + renderSelection(startDate, endDate, allDay); + reportSelection(startDate, endDate, allDay); + } + + + function unselect(ev) { + if (selected) { + selected = false; + clearSelection(); + trigger('unselect', null, ev); + } + } + + + function reportSelection(startDate, endDate, allDay, ev) { + selected = true; + trigger('select', null, startDate, endDate, allDay, ev); + } + + + function daySelectionMousedown(ev) { // not really a generic manager method, oh well + var cellDate = t.cellDate; + var cellIsAllDay = t.cellIsAllDay; + var hoverListener = t.getHoverListener(); + var reportDayClick = t.reportDayClick; // this is hacky and sort of weird + if (ev.which == 1 && opt('selectable')) { // which==1 means left mouse button + unselect(ev); + var _mousedownElement = this; + var dates; + hoverListener.start(function(cell, origCell) { // TODO: maybe put cellDate/cellIsAllDay info in cell + clearSelection(); + if (cell && cellIsAllDay(cell)) { + dates = [ cellDate(origCell), cellDate(cell) ].sort(cmp); + renderSelection(dates[0], dates[1], true); + }else{ + dates = null; + } + }, ev); + $(document).one('mouseup', function(ev) { + hoverListener.stop(); + if (dates) { + if (+dates[0] == +dates[1]) { + reportDayClick(dates[0], true, ev); + } + reportSelection(dates[0], dates[1], true, ev); + } + }); + } + } + + +} + +function OverlayManager() { + var t = this; + + + // exports + t.renderOverlay = renderOverlay; + t.clearOverlays = clearOverlays; + + + // locals + var usedOverlays = []; + var unusedOverlays = []; + + + function renderOverlay(rect, parent) { + var e = unusedOverlays.shift(); + if (!e) { + e = $("<div class='fc-cell-overlay' style='position:absolute;z-index:3'/>"); + } + if (e[0].parentNode != parent[0]) { + e.appendTo(parent); + } + usedOverlays.push(e.css(rect).show()); + return e; + } + + + function clearOverlays() { + var e; + while (e = usedOverlays.shift()) { + unusedOverlays.push(e.hide().unbind()); + } + } + + +} + +function CoordinateGrid(buildFunc) { + + var t = this; + var rows; + var cols; + + + t.build = function() { + rows = []; + cols = []; + buildFunc(rows, cols); + }; + + + t.cell = function(x, y) { + var rowCnt = rows.length; + var colCnt = cols.length; + var i, r=-1, c=-1; + for (i=0; i<rowCnt; i++) { + if (y >= rows[i][0] && y < rows[i][1]) { + r = i; + break; + } + } + for (i=0; i<colCnt; i++) { + if (x >= cols[i][0] && x < cols[i][1]) { + c = i; + break; + } + } + return (r>=0 && c>=0) ? { row:r, col:c } : null; + }; + + + t.rect = function(row0, col0, row1, col1, originElement) { // row1,col1 is inclusive + var origin = originElement.offset(); + return { + top: rows[row0][0] - origin.top, + left: cols[col0][0] - origin.left, + width: cols[col1][1] - cols[col0][0], + height: rows[row1][1] - rows[row0][0] + }; + }; + +} + +function HoverListener(coordinateGrid) { + + + var t = this; + var bindType; + var change; + var firstCell; + var cell; + + + t.start = function(_change, ev, _bindType) { + change = _change; + firstCell = cell = null; + coordinateGrid.build(); + mouse(ev); + bindType = _bindType || 'mousemove'; + $(document).bind(bindType, mouse); + }; + + + function mouse(ev) { + _fixUIEvent(ev); // see below + var newCell = coordinateGrid.cell(ev.pageX, ev.pageY); + if (!newCell != !cell || newCell && (newCell.row != cell.row || newCell.col != cell.col)) { + if (newCell) { + if (!firstCell) { + firstCell = newCell; + } + change(newCell, firstCell, newCell.row-firstCell.row, newCell.col-firstCell.col); + }else{ + change(newCell, firstCell); + } + cell = newCell; + } + } + + + t.stop = function() { + $(document).unbind(bindType, mouse); + return cell; + }; + + +} + + + +// this fix was only necessary for jQuery UI 1.8.16 (and jQuery 1.7 or 1.7.1) +// upgrading to jQuery UI 1.8.17 (and using either jQuery 1.7 or 1.7.1) fixed the problem +// but keep this in here for 1.8.16 users +// and maybe remove it down the line + +function _fixUIEvent(event) { // for issue 1168 + if (event.pageX === undefined) { + event.pageX = event.originalEvent.pageX; + event.pageY = event.originalEvent.pageY; + } +} +function HorizontalPositionCache(getElement) { + + var t = this, + elements = {}, + lefts = {}, + rights = {}; + + function e(i) { + return elements[i] = elements[i] || getElement(i); + } + + t.left = function(i) { + return lefts[i] = lefts[i] === undefined ? e(i).position().left : lefts[i]; + }; + + t.right = function(i) { + return rights[i] = rights[i] === undefined ? t.left(i) + e(i).width() : rights[i]; + }; + + t.clear = function() { + elements = {}; + lefts = {}; + rights = {}; + }; + +} + +})(jQuery); + +//</script> diff --git a/views/default/js/event_calendar/gcal.js b/views/default/js/event_calendar/gcal.js new file mode 100644 index 000000000..e9bbe26d8 --- /dev/null +++ b/views/default/js/event_calendar/gcal.js @@ -0,0 +1,112 @@ +/* + * FullCalendar v1.5.3 Google Calendar Plugin + * + * Copyright (c) 2011 Adam Shaw + * Dual licensed under the MIT and GPL licenses, located in + * MIT-LICENSE.txt and GPL-LICENSE.txt respectively. + * + * Date: Mon Feb 6 22:40:40 2012 -0800 + * + */ + +(function($) { + + +var fc = $.fullCalendar; +var formatDate = fc.formatDate; +var parseISO8601 = fc.parseISO8601; +var addDays = fc.addDays; +var applyAll = fc.applyAll; + + +fc.sourceNormalizers.push(function(sourceOptions) { + if (sourceOptions.dataType == 'gcal' || + sourceOptions.dataType === undefined && + (sourceOptions.url || '').match(/^(http|https):\/\/www.google.com\/calendar\/feeds\//)) { + sourceOptions.dataType = 'gcal'; + if (sourceOptions.editable === undefined) { + sourceOptions.editable = false; + } + } +}); + + +fc.sourceFetchers.push(function(sourceOptions, start, end) { + if (sourceOptions.dataType == 'gcal') { + return transformOptions(sourceOptions, start, end); + } +}); + + +function transformOptions(sourceOptions, start, end) { + + var success = sourceOptions.success; + var data = $.extend({}, sourceOptions.data || {}, { + 'start-min': formatDate(start, 'u'), + 'start-max': formatDate(end, 'u'), + 'singleevents': true, + 'max-results': 9999 + }); + + var ctz = sourceOptions.currentTimezone; + if (ctz) { + data.ctz = ctz = ctz.replace(' ', '_'); + } + + return $.extend({}, sourceOptions, { + url: sourceOptions.url.replace(/\/basic$/, '/full') + '?alt=json-in-script&callback=?', + dataType: 'jsonp', + data: data, + startParam: false, + endParam: false, + success: function(data) { + var events = []; + if (data.feed.entry) { + $.each(data.feed.entry, function(i, entry) { + var startStr = entry['gd$when'][0]['startTime']; + var start = parseISO8601(startStr, true); + var end = parseISO8601(entry['gd$when'][0]['endTime'], true); + var allDay = startStr.indexOf('T') == -1; + var url; + $.each(entry.link, function(i, link) { + if (link.type == 'text/html') { + url = link.href; + if (ctz) { + url += (url.indexOf('?') == -1 ? '?' : '&') + 'ctz=' + ctz; + } + } + }); + if (allDay) { + addDays(end, -1); // make inclusive + } + events.push({ + id: entry['gCal$uid']['value'], + title: entry['title']['$t'], + url: url, + start: start, + end: end, + allDay: allDay, + location: entry['gd$where'][0]['valueString'], + description: entry['content']['$t'] + }); + }); + } + var args = [events].concat(Array.prototype.slice.call(arguments, 1)); + var res = applyAll(success, this, args); + if ($.isArray(res)) { + return res; + } + return events; + } + }); + +} + + +// legacy +fc.gcalFeed = function(url, sourceOptions) { + return $.extend({}, sourceOptions, { url: url, dataType: 'gcal' }); +}; + + +})(jQuery); diff --git a/views/default/plugins/event_calendar/settings.php b/views/default/plugins/event_calendar/settings.php index 963f64549..c8dcdf299 100644 --- a/views/default/plugins/event_calendar/settings.php +++ b/views/default/plugins/event_calendar/settings.php @@ -17,10 +17,22 @@ $access_options = array( ACCESS_PRIVATE => elgg_echo("PRIVATE"), $listing_options = array(elgg_echo('event_calendar:settings:paged')=>'paged', elgg_echo('event_calendar:settings:agenda')=>'agenda', elgg_echo('event_calendar:settings:month')=>'month', + elgg_echo('event_calendar:settings:full')=>'full', ); $body = ''; +/*$event_calendar_full_calendar = elgg_get_plugin_setting('full_calendar', 'event_calendar'); +if (!$event_calendar_full_calendar) { + $event_calendar_full_calendar = 'no'; +} + +$body .= elgg_echo('event_calendar:settings:full_calendar:title'); +$body .= '<br />'; +$body .= elgg_view('input/radio',array('name'=>'params[full_calendar]','value'=>$event_calendar_full_calendar,'options'=>$yn_options)); + +$body .= '<br />';*/ + $event_calendar_hide_access = elgg_get_plugin_setting('hide_access', 'event_calendar'); if (!$event_calendar_hide_access) { $event_calendar_hide_access = 'no'; -- cgit v1.2.3 From 2eaf95a47bccd543951e41d608cdcb44acf9a0ff Mon Sep 17 00:00:00 2001 From: Kevin Jardine <kevinjardine@yahoo.com> Date: Tue, 13 Mar 2012 17:02:07 +0100 Subject: replaced pulldown with dropdown --- views/default/event_calendar/forms/add_to_group.php | 8 ++++---- views/default/event_calendar/forms/manage_event_content.php | 12 ++++++------ views/default/plugins/event_calendar/settings.php | 2 +- 3 files changed, 11 insertions(+), 11 deletions(-) diff --git a/views/default/event_calendar/forms/add_to_group.php b/views/default/event_calendar/forms/add_to_group.php index 07e2e8b33..330f72526 100644 --- a/views/default/event_calendar/forms/add_to_group.php +++ b/views/default/event_calendar/forms/add_to_group.php @@ -9,7 +9,7 @@ $event_container = $vars['event']->container_guid; // get the list of all groups: -if (isadminloggedin()) { +if (elgg_is_admin_logged_in()) { $groups = elgg_get_entities(array( 'type' => 'group', 'limit' => 5000, @@ -17,7 +17,7 @@ if (isadminloggedin()) { } else { $groups = elgg_get_entities(array( 'type' => 'group', - 'owner_guid' => get_loggedin_userid(), + 'owner_guid' => elgg_get_logged_in_user_guid(), 'limit' => 5000, )); } @@ -59,14 +59,14 @@ if ($add_options || $remove_options) { $event_bit = elgg_view('input/hidden', array("internalname" => "event_id","value" => $event_id)); if ($add_options) { echo "<h4>".elgg_echo('event_calendar:add_to_group:add_group_title')."</h4>"; - $add_pulldown = elgg_view("input/pulldown",array("internalname" => "group_id","options_values" => $add_options)); + $add_pulldown = elgg_view("input/dropdown",array("internalname" => "group_id","options_values" => $add_options)); $submit_button = "<p>".elgg_view("input/submit",array("value"=>elgg_echo('event_calendar:add_to_group:add_group_button')))."</p>"; echo elgg_view ('input/form',array("body" => $event_bit.$add_pulldown.$submit_button,"action" => $vars['url']."action/event_calendar/add_to_group")); } if ($remove_options) { echo "<h4>".elgg_echo('event_calendar:add_to_group:remove_group_title')."</h4>"; - $remove_pulldown = elgg_view("input/pulldown",array("internalname" => "group_id","options_values" => $remove_options)); + $remove_pulldown = elgg_view("input/dropdown",array("internalname" => "group_id","options_values" => $remove_options)); $submit_button = "<p>".elgg_view("input/submit",array("value"=>elgg_echo('event_calendar:add_to_group:remove_group_button')))."</p>"; echo elgg_view ('input/form',array("body" => $event_bit.$remove_pulldown.$submit_button,"action" => $vars['url']."action/event_calendar/remove_from_group")); } diff --git a/views/default/event_calendar/forms/manage_event_content.php b/views/default/event_calendar/forms/manage_event_content.php index 59498e861..6ae3f60ce 100644 --- a/views/default/event_calendar/forms/manage_event_content.php +++ b/views/default/event_calendar/forms/manage_event_content.php @@ -165,8 +165,8 @@ $body .= '</label></p>'; $body .= '<p class="description">'.$prefix['brief_description'].elgg_echo('event_calendar:brief_description_description').'</p>'; if ($event_calendar_region_display == 'yes') { - $region_list = trim(get_plugin_setting('region_list', 'event_calendar')); - $region_list_handles = get_plugin_setting('region_list_handles', 'event_calendar'); + $region_list = trim(elgg_get_plugin_setting('region_list', 'event_calendar')); + $region_list_handles = elgg_get_plugin_setting('region_list_handles', 'event_calendar'); // make sure that we are using Unix line endings $region_list = str_replace("\r\n","\n",$region_list); $region_list = str_replace("\r","\n",$region_list); @@ -182,15 +182,15 @@ if ($event_calendar_region_display == 'yes') { } } $body .= '<p><label>'.elgg_echo("event_calendar:region_label").'<br />'; - $body .= elgg_view("input/pulldown",array('internalname' => 'region','value'=>$region,'options_values'=>$options)); + $body .= elgg_view("input/dropdown",array('internalname' => 'region','value'=>$region,'options_values'=>$options)); $body .= '</label></p>'; $body .= '<p class="description">'.$prefix['region'].elgg_echo('event_calendar:region_description').'</p>'; } } if ($event_calendar_type_display == 'yes') { - $type_list = trim(get_plugin_setting('type_list', 'event_calendar')); - $type_list_handles = get_plugin_setting('type_list_handles', 'event_calendar'); + $type_list = trim(elgg_get_plugin_setting('type_list', 'event_calendar')); + $type_list_handles = elgg_get_plugin_setting('type_list_handles', 'event_calendar'); // make sure that we are using Unix line endings $type_list = str_replace("\r\n","\n",$type_list); $type_list = str_replace("\r","\n",$type_list); @@ -206,7 +206,7 @@ if ($event_calendar_type_display == 'yes') { } } $body .= '<p><label>'.elgg_echo("event_calendar:type_label").'<br />'; - $body .= elgg_view("input/pulldown",array('internalname' => 'event_type','value'=>$event_type,'options_values'=>$options)); + $body .= elgg_view("input/dropdown",array('internalname' => 'event_type','value'=>$event_type,'options_values'=>$options)); $body .= '</label></p>'; $body .= '<p class="description">'.$prefix['event_type'].elgg_echo('event_calendar:type_description').'</p>'; } diff --git a/views/default/plugins/event_calendar/settings.php b/views/default/plugins/event_calendar/settings.php index c8dcdf299..a1c8e3d41 100644 --- a/views/default/plugins/event_calendar/settings.php +++ b/views/default/plugins/event_calendar/settings.php @@ -51,7 +51,7 @@ if (!$event_calendar_default_access) { $body .= elgg_echo('event_calendar:settings:default_access:title'); $body .= '<br />'; -$body .= elgg_view('input/pulldown',array('name'=>'params[default_access]','value'=>$event_calendar_default_access,'options_values'=>$access_options)); +$body .= elgg_view('input/dropdown',array('name'=>'params[default_access]','value'=>$event_calendar_default_access,'options_values'=>$access_options)); $body .= '<br /><br />'; -- cgit v1.2.3 From 5e5777559cd36d2ef32a786b93d047a1a7a3037e Mon Sep 17 00:00:00 2001 From: Kevin Jardine <kevinjardine@yahoo.com> Date: Tue, 13 Mar 2012 17:34:40 +0100 Subject: event times are now supported by default --- views/default/event_calendar/agenda_item_view.php | 2 +- views/default/event_calendar/agenda_view.php | 2 +- views/default/event_calendar/forms/manage_event_content.php | 4 ++-- views/default/event_calendar/full_calendar_view.php | 12 ++++++++++-- views/default/forms/event_calendar/edit.php | 8 ++++---- views/default/plugins/event_calendar/settings.php | 2 +- 6 files changed, 19 insertions(+), 11 deletions(-) diff --git a/views/default/event_calendar/agenda_item_view.php b/views/default/event_calendar/agenda_item_view.php index 727b559ec..807982665 100644 --- a/views/default/event_calendar/agenda_item_view.php +++ b/views/default/event_calendar/agenda_item_view.php @@ -2,7 +2,7 @@ $event = $vars['event']; $times = $vars['times']; $time_bit = ''; -if ($times) { +if ($times != 'no') { if (is_numeric($event->start_time)) { $time_bit = event_calendar_convert_time($event->start_time); } diff --git a/views/default/event_calendar/agenda_view.php b/views/default/event_calendar/agenda_view.php index bb693def0..05cdb6461 100644 --- a/views/default/event_calendar/agenda_view.php +++ b/views/default/event_calendar/agenda_view.php @@ -8,7 +8,7 @@ $nav = elgg_view('navigation/pagination',array( 'limit' => $vars['limit'], )); -$event_calendar_times = get_plugin_setting('times', 'event_calendar'); +$event_calendar_times = elgg_get_plugin_setting('times', 'event_calendar'); $events = $vars['events']; $html = ''; $date_format = 'j M Y'; diff --git a/views/default/event_calendar/forms/manage_event_content.php b/views/default/event_calendar/forms/manage_event_content.php index 6ae3f60ce..f28788132 100644 --- a/views/default/event_calendar/forms/manage_event_content.php +++ b/views/default/event_calendar/forms/manage_event_content.php @@ -119,7 +119,7 @@ $body .= elgg_view("input/text",array('internalname' => 'venue','value'=>$venue) $body .= '</label></p>'; $body .= '<p class="description">'.$prefix['venue'].elgg_echo('event_calendar:venue_description').'</p>'; -if ($event_calendar_times == 'yes') { +if ($event_calendar_times != 'no') { $body .= '<p><label>'.elgg_echo("event_calendar:start_time_label").'</label><br />'; $body .= elgg_view("input/timepicker",array('internalname' => 'start_time','value'=>$start_time)); $body .= '</p>'; @@ -132,7 +132,7 @@ $body .= '</label></p>'; $body .= '<p class="description">'.$prefix['start_date'].elgg_echo('event_calendar:start_date_description').'</p>'; if ($event_calendar_hide_end != 'yes') { - if ($event_calendar_times == 'yes') { + if ($event_calendar_times != 'no') { $body .= '<p><label>'.elgg_echo("event_calendar:end_time_label").'</label><br />'; $body .= elgg_view("input/timepicker",array('internalname' => 'end_time','value'=>$end_time)); $body .= '</p>'; diff --git a/views/default/event_calendar/full_calendar_view.php b/views/default/event_calendar/full_calendar_view.php index b6c725908..80406ac13 100644 --- a/views/default/event_calendar/full_calendar_view.php +++ b/views/default/event_calendar/full_calendar_view.php @@ -4,14 +4,22 @@ elgg_load_js('elgg.full_calendar'); $events = $vars['events']; $event_array = array(); +$times_supported = elgg_get_plugin_setting('times','event_calendar') != 'no'; foreach($events as $e) { - $event_array[] = array( + $event_item = array( 'id' => $e->guid, 'title' => $e->title, 'start_date' => $e->start_date, 'end_date' => $e->real_end_time, ); + if ($times_supported) { + $event_item['allDay'] = FALSE; + } else { + $event_item['allDay'] = TRUE; + } + + $event_array[] = $event_item; } $json_events_string = json_encode($event_array); @@ -28,7 +36,7 @@ $(document).ready(function() { title : events[i].title, start : new Date(1000*events[i].start_date), end : new Date(1000*events[i].end_date), - allDay: false + allDay: events[i].allDay }); } diff --git a/views/default/forms/event_calendar/edit.php b/views/default/forms/event_calendar/edit.php index 1830ef168..7613a79f1 100644 --- a/views/default/forms/event_calendar/edit.php +++ b/views/default/forms/event_calendar/edit.php @@ -68,7 +68,7 @@ if ($event) { $event_tags = $event->event_tags; $long_description = $event->long_description; $access = $event->access_id; - if ($event_calendar_times == 'yes') { + if ($event_calendar_times != 'no') { $start_time = $event->start_time; $end_time = $event->end_time; } @@ -101,7 +101,7 @@ if ($event) { $event_tags = $fd['event_tags']; $long_description = $fd['long_description']; $access = $fd['access_id']; - if ($event_calendar_times == 'yes') { + if ($event_calendar_times != 'no') { $start_time = $fd['start_time']; $end_time = $fd['end_time']; } @@ -127,7 +127,7 @@ $body .= elgg_view("input/text",array('name' => 'venue','value'=>$venue)); $body .= '</label></p>'; $body .= '<p class="description">'.$prefix['venue'].elgg_echo('event_calendar:venue_description').'</p>'; -if ($event_calendar_times == 'yes') { +if ($event_calendar_times != 'no') { $body .= '<p><label>'.elgg_echo("event_calendar:start_time_label").'</label><br />'; $body .= elgg_view("input/timepicker",array('name' => 'start_time','value'=>$start_time)); $body .= '</p>'; @@ -140,7 +140,7 @@ $body .= '</label></p>'; $body .= '<p class="description">'.$prefix['start_date'].elgg_echo('event_calendar:start_date_description').'</p>'; if ($event_calendar_hide_end != 'yes') { - if ($event_calendar_times == 'yes') { + if ($event_calendar_times != 'no') { $body .= '<p><label>'.elgg_echo("event_calendar:end_time_label").'</label><br />'; $body .= elgg_view("input/timepicker",array('name' => 'end_time','value'=>$end_time)); $body .= '</p>'; diff --git a/views/default/plugins/event_calendar/settings.php b/views/default/plugins/event_calendar/settings.php index a1c8e3d41..42ac601e5 100644 --- a/views/default/plugins/event_calendar/settings.php +++ b/views/default/plugins/event_calendar/settings.php @@ -79,7 +79,7 @@ $body .= '<br />'; $event_calendar_times = elgg_get_plugin_setting('times', 'event_calendar'); if (!$event_calendar_times) { - $event_calendar_times = 'no'; + $event_calendar_times = 'yes'; } $body .= elgg_echo('event_calendar:settings:times:title'); -- cgit v1.2.3 From 28016443bad102a76074095576da46993182dc92 Mon Sep 17 00:00:00 2001 From: Kevin Jardine <kevinjardine@yahoo.com> Date: Thu, 15 Mar 2012 12:01:15 +0100 Subject: end date and time now also stored properly as GMT --- actions/event_calendar/modify_full_calendar.php | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 actions/event_calendar/modify_full_calendar.php diff --git a/actions/event_calendar/modify_full_calendar.php b/actions/event_calendar/modify_full_calendar.php new file mode 100644 index 000000000..595bdbe4b --- /dev/null +++ b/actions/event_calendar/modify_full_calendar.php @@ -0,0 +1,15 @@ +<?php +elgg_load_library('elgg:event_calendar'); +$event_guid = get_input('event_guid',0); +$day_delta = get_input('dayDelta'); +$minute_delta = get_input('minuteDelta',''); + +if (event_calendar_modify_full_calendar($event_guid,$day_delta,$minute_delta)) { + $response = array('success'=>TRUE); +} else { + $response = array('success'=>FALSE, 'message' =>elgg_echo('event_calendar:modify_full_calendar:error')); +} + +echo json_encode($response); + +exit; -- cgit v1.2.3 From 978d6aa6283933c805622d4d24fa6068833f7817 Mon Sep 17 00:00:00 2001 From: Kevin Jardine <kevinjardine@yahoo.com> Date: Thu, 15 Mar 2012 14:43:49 +0100 Subject: added full calendar drag and drop --- languages/en.php | 1 + models/model.php | 39 +++++++++++++++++++--- start.php | 1 + .../default/event_calendar/full_calendar_view.php | 37 +++++++++++++++++--- 4 files changed, 70 insertions(+), 8 deletions(-) diff --git a/languages/en.php b/languages/en.php index d58e35523..1a356524b 100644 --- a/languages/en.php +++ b/languages/en.php @@ -255,6 +255,7 @@ You can manage calendar requests for this event here: ."need to apply to do so (closed) or have no option at all (private - so only you or a site admin can add the event to calendars).", 'event_calendar:settings:full_calendar:title' => "Support full calendar", + 'event_calendar:modify_full_calendar:error' => "Error: could not modify full calendar", /** * Event calendar river diff --git a/models/model.php b/models/model.php index 76d2d7b61..f1ed39369 100644 --- a/models/model.php +++ b/models/model.php @@ -38,7 +38,7 @@ function event_calendar_set_event_from_form($event_guid,$group_guid) { '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'; @@ -83,9 +83,15 @@ function event_calendar_set_event_from_form($event_guid,$group_guid) { $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)) { @@ -961,7 +967,7 @@ function event_calendar_get_formatted_full_items($event) { 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)) { @@ -1731,3 +1737,28 @@ function getLastDayOfMonth($month,$year) { 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; +} diff --git a/start.php b/start.php index ca96624dc..e838194f5 100644 --- a/start.php +++ b/start.php @@ -107,6 +107,7 @@ function event_calendar_init() { elgg_register_action("event_calendar/add_to_group_members","$action_path/add_to_group_members.php"); elgg_register_action("event_calendar/remove_from_group_members","$action_path/remove_from_group_members.php"); elgg_register_action("event_calendar/manage_subscribers","$action_path/manage_subscribers.php"); + elgg_register_action("event_calendar/modify_full_calendar","$action_path/modify_full_calendar.php"); } diff --git a/views/default/event_calendar/full_calendar_view.php b/views/default/event_calendar/full_calendar_view.php index 80406ac13..d4e85724e 100644 --- a/views/default/event_calendar/full_calendar_view.php +++ b/views/default/event_calendar/full_calendar_view.php @@ -8,7 +8,7 @@ $times_supported = elgg_get_plugin_setting('times','event_calendar') != 'no'; 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, @@ -18,7 +18,7 @@ foreach($events as $e) { } else { $event_item['allDay'] = TRUE; } - + $event_array[] = $event_item; } @@ -27,12 +27,39 @@ $json_events_string = json_encode($event_array); // 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), @@ -47,8 +74,10 @@ $(document).ready(function() { 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> -- cgit v1.2.3 From 2d19bfa232be5eff43bb6c1d1eef12e681552956 Mon Sep 17 00:00:00 2001 From: Kevin Jardine <kevinjardine@yahoo.com> Date: Mon, 19 Mar 2012 17:09:30 +0100 Subject: full calendar click to view, time system revamp --- languages/en.php | 5 ++ models/model.php | 45 +++++++++------- views/default/event_calendar/css.php | 11 ++++ .../default/event_calendar/full_calendar_view.php | 22 +++++--- views/default/forms/event_calendar/edit.php | 41 ++++++++------- views/default/input/timepicker.php | 61 ++++++++++++++-------- views/default/input/timepicker_old.php | 38 ++++++++++++++ views/default/plugins/event_calendar/settings.php | 13 +++++ 8 files changed, 167 insertions(+), 69 deletions(-) create mode 100644 views/default/input/timepicker_old.php diff --git a/languages/en.php b/languages/en.php index 1a356524b..2e4c3373a 100644 --- a/languages/en.php +++ b/languages/en.php @@ -256,6 +256,11 @@ You can manage calendar requests for this event here: 'event_calendar:settings:full_calendar:title' => "Support full calendar", 'event_calendar:modify_full_calendar:error' => "Error: could not modify full calendar", + 'event_calendar:from_label' => "From:", + 'event_calendar:to_label' => "To:", + 'event_calendar:settings:timeformat:title' => "Time format", + 'event_calendar:time_format:12hour' => "12 hour (am/pm)", + 'event_calendar:time_format:24hour' => "24 hour", /** * Event calendar river diff --git a/models/model.php b/models/model.php index f1ed39369..aa97bfddb 100644 --- a/models/model.php +++ b/models/model.php @@ -92,23 +92,15 @@ function event_calendar_set_event_from_form($event_guid,$group_guid) { } if ($event_calendar_times != 'no') { - $sh = get_input('start_time_h',''); - $sm = get_input('start_time_m',''); - if (is_numeric($sh) && is_numeric($sm)) { - // workaround for pulldown zero value bug - $sh--; - $sm--; - $event->start_time = $sh*60+$sm; + $st = get_input('start_time',''); + if (is_numeric($st)) { + $event->start_time = $st; } else { $event->start_time = ''; } - $eh = get_input('end_time_h',''); - $em = get_input('end_time_m',''); - if (is_numeric($eh) && is_numeric($em)) { - // workaround for pulldown zero value bug - $eh--; - $em--; - $event->end_time = $eh*60+$em; + $et = get_input('end_time',''); + if (is_numeric($et)) { + $event->end_time = $et; } else { $event->end_time = ''; } @@ -874,9 +866,21 @@ function event_calendar_handle_leave($event, $object_type, $object) { } function event_calendar_convert_time($time) { - $hour = floor($time/60); - $minute = sprintf("%02d",$time-60*$hour); - return "$hour:$minute"; + $event_calendar_time_format = elgg_get_plugin_setting('timeformat','event_calendar'); + if ($event_calendar_time_format == '12') { + $hour = floor($time/60); + $minute = sprintf("%02d",$time-60*$hour); + if ($hour < 12) { + return "$hour:$minute am"; + } else { + $hour -= 12; + return "$hour:$minute pm"; + } + } else { + $hour = floor($time/60); + $minute = sprintf("%02d",$time-60*$hour); + return "$hour:$minute"; + } } function event_calendar_format_time($date,$time1,$time2='') { @@ -970,13 +974,15 @@ function event_calendar_get_formatted_time($event) { $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)) { + if ($event->end_date) { + $end_date = date($date_format,$event->end_date); + } + if ((!$event->end_date) || ($end_date == $start_date)) { if ($event_calendar_times) { $start_date = event_calendar_format_time($start_date,$event->start_time,$event->end_time); } $time_bit = $start_date; } else { - $end_date = date($date_format,$event->end_date); if ($event_calendar_times) { $start_date = event_calendar_format_time($start_date,$event->start_time); $end_date = event_calendar_format_time($end_date,$event->end_time); @@ -1243,6 +1249,7 @@ function event_calendar_get_page_content_edit($page_type,$guid) { } else { elgg_push_breadcrumb(elgg_echo('event_calendar:show_events_title'),'event_calendar/list'); } + elgg_push_breadcrumb($event->title,$event->getURL()); elgg_push_breadcrumb(elgg_echo('event_calendar:manage_event_title')); $content = elgg_view_form('event_calendar/edit', $vars,$body_vars); diff --git a/views/default/event_calendar/css.php b/views/default/event_calendar/css.php index 469f72de8..a2437e065 100644 --- a/views/default/event_calendar/css.php +++ b/views/default/event_calendar/css.php @@ -164,4 +164,15 @@ li.event-calendar-filter-menu-show-only { padding-top:.4em; background:#fff; margin:0 -.3em 0 1.5em; +} + +.event-calendar-compressed-date { + width: 150px !important; + margin-right: 10px; +} + +.event-calendar-date-time-setter label { + float: left; + width: 50px; + margin-top: 5px; } \ No newline at end of file diff --git a/views/default/event_calendar/full_calendar_view.php b/views/default/event_calendar/full_calendar_view.php index d4e85724e..58aefe741 100644 --- a/views/default/event_calendar/full_calendar_view.php +++ b/views/default/event_calendar/full_calendar_view.php @@ -9,7 +9,9 @@ $times_supported = elgg_get_plugin_setting('times','event_calendar') != 'no'; foreach($events as $e) { $event_item = array( 'guid' => $e->guid, + //'title' => '<a href="'.$e->url.'">'.$e->title.'</a>', 'title' => $e->title, + 'url' => $e->getURL(), 'start_date' => $e->start_date, 'end_date' => $e->real_end_time, ); @@ -28,13 +30,14 @@ $json_events_string = json_encode($event_array); ?> <script> -handleEventDrop = function(event,dayDelta,minuteDelta,allDay,revertFunc) { +handleEventClick = function(event) { + if (event.url) { + window.location.href = event.url; + return false; + } +}; - alert( - event.title + "(" + event.guid + ") was moved " + - dayDelta + " days and " + - minuteDelta + " minutes." - ); +handleEventDrop = function(event,dayDelta,minuteDelta,allDay,revertFunc) { if (!confirm("Are you sure about this change?")) { revertFunc(); @@ -53,7 +56,8 @@ handleEventDrop = function(event,dayDelta,minuteDelta,allDay,revertFunc) { } ); } -} +}; + $(document).ready(function() { var events = <?php echo $json_events_string; ?>; var cal_events = []; @@ -61,6 +65,7 @@ $(document).ready(function() { cal_events.push({ guid: events[i].guid, title : events[i].title, + url: events[i].url, start : new Date(1000*events[i].start_date), end : new Date(1000*events[i].end_date), allDay: events[i].allDay @@ -74,8 +79,9 @@ $(document).ready(function() { right: 'month,agendaWeek,agendaDay' }, editable: true, - slotMinutes: 5, + slotMinutes: 15, eventDrop: handleEventDrop, + eventClick: handleEventClick, events: cal_events }); }); diff --git a/views/default/forms/event_calendar/edit.php b/views/default/forms/event_calendar/edit.php index 7613a79f1..3526627a7 100644 --- a/views/default/forms/event_calendar/edit.php +++ b/views/default/forms/event_calendar/edit.php @@ -128,29 +128,32 @@ $body .= '</label></p>'; $body .= '<p class="description">'.$prefix['venue'].elgg_echo('event_calendar:venue_description').'</p>'; if ($event_calendar_times != 'no') { - $body .= '<p><label>'.elgg_echo("event_calendar:start_time_label").'</label><br />'; + $body .= '<div class="event-calendar-date-time-setter">'; + if ($event_calendar_hide_end != 'yes') { + $body .= '<p><label>'.elgg_echo('event_calendar:from_label').'</label>'; + } + $body .= elgg_view("event_calendar/input/date_local",array('timestamp'=>TRUE, 'autocomplete'=>'off','class'=>'event-calendar-compressed-date','name' => 'start_date','value'=>$start_date)); $body .= elgg_view("input/timepicker",array('name' => 'start_time','value'=>$start_time)); - $body .= '</p>'; - $body .= '<p class="description">'.$prefix['start_time'].elgg_echo('event_calendar:start_time_description').'</p>'; -} - -$body .= '<p><label>'.elgg_echo("event_calendar:start_date_label").'<br />'; -$body .= elgg_view("event_calendar/input/date_local",array('timestamp'=>TRUE, 'autocomplete'=>'off','name' => 'start_date','value'=>$start_date)); -$body .= '</label></p>'; -$body .= '<p class="description">'.$prefix['start_date'].elgg_echo('event_calendar:start_date_description').'</p>'; - -if ($event_calendar_hide_end != 'yes') { - if ($event_calendar_times != 'no') { - $body .= '<p><label>'.elgg_echo("event_calendar:end_time_label").'</label><br />'; + if ($event_calendar_hide_end != 'yes') { + $body .= '</p><p><label>'.elgg_echo('event_calendar:to_label').'</label>'; + $body .= elgg_view("event_calendar/input/date_local",array('timestamp'=>TRUE,'autocomplete'=>'off','class'=>'event-calendar-compressed-date','name' => 'end_date','value'=>$end_date)); $body .= elgg_view("input/timepicker",array('name' => 'end_time','value'=>$end_time)); - $body .= '</p>'; - $body .= '<p class="description">'.$prefix['end_time'].elgg_echo('event_calendar:end_time_description').'</p>'; } - - $body .= '<p><label>'.elgg_echo("event_calendar:end_date_label").'<br />'; - $body .= elgg_view("event_calendar/input/date_local",array('timestamp'=>TRUE,'autocomplete'=>'off','name' => 'end_date','value'=>$end_date)); + $body .= '</p>'; + $body .= '</div>'; +} else { + + $body .= '<p><label>'.elgg_echo("event_calendar:start_date_label").'<br />'; + $body .= elgg_view("event_calendar/input/date_local",array('timestamp'=>TRUE, 'autocomplete'=>'off','name' => 'start_date','value'=>$start_date)); $body .= '</label></p>'; - $body .= '<p class="description">'.$prefix['end_date'].elgg_echo('event_calendar:end_date_description').'</p>'; + $body .= '<p class="description">'.$prefix['start_date'].elgg_echo('event_calendar:start_date_description').'</p>'; + + if ($event_calendar_hide_end != 'yes') { + $body .= '<p><label>'.elgg_echo("event_calendar:end_date_label").'<br />'; + $body .= elgg_view("event_calendar/input/date_local",array('timestamp'=>TRUE,'autocomplete'=>'off','name' => 'end_date','value'=>$end_date)); + $body .= '</label></p>'; + $body .= '<p class="description">'.$prefix['end_date'].elgg_echo('event_calendar:end_date_description').'</p>'; + } } if ($event_calendar_spots_display == 'yes') { diff --git a/views/default/input/timepicker.php b/views/default/input/timepicker.php index faadd6450..d7df04699 100644 --- a/views/default/input/timepicker.php +++ b/views/default/input/timepicker.php @@ -2,37 +2,52 @@ $time_format = elgg_get_plugin_setting('timeformat', 'event_calendar'); if (!$time_format) { - $time_format = 24; + $time_format = '24'; } $value = $vars['value']; if (is_numeric($value)) { $hour = floor($value/60); - $minute = ($value -60*$hour); - - // add 1 to avoid pulldown 0 bug - $hour++; - $minute++; + $minute = ($value -60*$hour); + $time = $hour*60+$minute; } else { - $hour = '-'; - $minute = '-'; + $time = '-'; } -$hours = array(); -$hours['-'] = '-'; - -for($i=0;$i<$time_format;$i++) { - $hours[$i+1] = $i; -} - -$minutes = array(); -$minutes['-'] = '-'; - -for($i=0;$i<60;$i=$i+5) { - $minutes[$i+1] = sprintf("%02d",$i); +$dates = array(); +$dates['-'] = '-'; + +if ($time_format == '12') { + for($h=0;$h<=12;$h++) { + $ht = sprintf("%02d",$h); + for($m=0;$m<60;$m=$m+15) { + $mt = sprintf("%02d",$m); + $t = $h*60+$m; + if ($h < 12) { + $dates[$t] = "$ht:$mt am"; + } else { + $dates[$t] = "$ht:$mt pm"; + } + } + } + for($h=1;$h<12;$h++) { + $ht = sprintf("%02d",$h); + for($m=0;$m<60;$m=$m+15) { + $mt = sprintf("%02d",$m); + $t = 12*60+$h*60+$m; + $dates[$t] = "$ht:$mt pm"; + } + } +} else { + for($h=0;$h<24;$h++) { + $ht = sprintf("%02d",$h); + for($m=0;$m<60;$m=$m+15) { + $mt = sprintf("%02d",$m); + $t = $h*60+$m; + $dates[$t] = "$ht:$mt"; + } + } } -echo elgg_view('input/dropdown',array('name'=>$vars['name'].'_h','value'=>$hour,'options_values'=>$hours)); -echo elgg_view('input/dropdown',array('name'=>$vars['name'].'_m','value'=>$minute,'options_values'=>$minutes)); +echo elgg_view('input/dropdown',array('name'=>$vars['name'],'value'=>$time,'options_values'=>$dates)); -?> \ No newline at end of file diff --git a/views/default/input/timepicker_old.php b/views/default/input/timepicker_old.php new file mode 100644 index 000000000..1d2156cda --- /dev/null +++ b/views/default/input/timepicker_old.php @@ -0,0 +1,38 @@ +<?php + +$time_format = elgg_get_plugin_setting('timeformat', 'event_calendar'); +if (!$time_format) { + $time_format = 24; +} + +$value = $vars['value']; +if (is_numeric($value)) { + $hour = floor($value/60); + $minute = ($value -60*$hour); + + // add 1 to avoid pulldown 0 bug + $hour++; + $minute++; +} else { + $hour = '-'; + $minute = '-'; +} + +$hours = array(); +$hours['-'] = '-'; + +for($i=0;$i<$time_format;$i++) { + $hours[$i+1] = $i; +} + +$minutes = array(); +$minutes['-'] = '-'; + +for($i=0;$i<60;$i=$i+15) { + $minutes[$i+1] = sprintf("%02d",$i); +} + +echo elgg_view('input/dropdown',array('name'=>$vars['name'].'_h','value'=>$hour,'options_values'=>$hours)); +echo elgg_view('input/dropdown',array('name'=>$vars['name'].'_m','value'=>$minute,'options_values'=>$minutes)); + +?> \ No newline at end of file diff --git a/views/default/plugins/event_calendar/settings.php b/views/default/plugins/event_calendar/settings.php index 42ac601e5..93724484c 100644 --- a/views/default/plugins/event_calendar/settings.php +++ b/views/default/plugins/event_calendar/settings.php @@ -3,6 +3,8 @@ $yn_options = array(elgg_echo('event_calendar:settings:yes')=>'yes', elgg_echo('event_calendar:settings:no')=>'no', ); +$time_format_options = array(elgg_echo('event_calendar:time_format:12hour')=>'12',elgg_echo('event_calendar:time_format:24hour')=>'24'); + $membership_options = array( elgg_echo('event_calendar:personal_manage:open') => 'open' , elgg_echo('event_calendar:personal_manage:closed') => 'closed', @@ -88,6 +90,17 @@ $body .= elgg_view('input/radio',array('name'=>'params[times]','value'=>$event_c $body .= '<br />'; +$event_calendar_time_format = elgg_get_plugin_setting('timeformat', 'event_calendar'); +if (!$event_calendar_time_format) { + $event_calendar_time_format = '24'; +} + +$body .= elgg_echo('event_calendar:settings:timeformat:title'); +$body .= '<br />'; +$body .= elgg_view('input/radio',array('name'=>'params[timeformat]','value'=>$event_calendar_time_format,'options'=>$time_format_options)); + +$body .= '<br />'; + $event_calendar_autopersonal = elgg_get_plugin_setting('autopersonal', 'event_calendar'); if (!$event_calendar_autopersonal) { $event_calendar_autopersonal = 'yes'; -- cgit v1.2.3 From 0b25adcd921149b50845647980284e8ab66d8fed Mon Sep 17 00:00:00 2001 From: Kevin Jardine <kevinjardine@yahoo.com> Date: Tue, 3 Apr 2012 12:31:42 +0200 Subject: major changes to add new features, including a full calendar and repeating events --- languages/en.php | 49 ++- models/model.php | 456 ++++++++++++++++++--- start.php | 25 ++ views/default/event_calendar/container.php | 24 ++ views/default/event_calendar/css.php | 98 ++++- views/default/event_calendar/datetime_edit.php | 45 ++ .../default/event_calendar/full_calendar_view.php | 64 ++- .../default/event_calendar/repeat_form_element.php | 43 ++ views/default/event_calendar/show_events.php | 12 +- views/default/forms/event_calendar/edit.php | 388 +++++++++++------- views/default/input/timepicker.php | 38 +- views/default/js/event_calendar/event_calendar.php | 58 +++ views/default/plugins/event_calendar/settings.php | 44 ++ 13 files changed, 1088 insertions(+), 256 deletions(-) create mode 100644 views/default/event_calendar/container.php create mode 100644 views/default/event_calendar/datetime_edit.php create mode 100644 views/default/event_calendar/repeat_form_element.php diff --git a/languages/en.php b/languages/en.php index 2e4c3373a..cef293be0 100644 --- a/languages/en.php +++ b/languages/en.php @@ -15,7 +15,7 @@ ."You can click on the calendar icons to set the start and end dates.", 'event_calendar:title_label' => "Title", 'event_calendar:title_description' => "One to four words", - 'event_calendar:brief_description_label' => "Brief description", + 'event_calendar:brief_description_label' => "Description", 'event_calendar:brief_description_description' => "A short phrase.", 'event_calendar:venue_label' => "Venue", 'event_calendar:venue_description' => "Where will this event be held?", @@ -250,9 +250,12 @@ You can manage calendar requests for this event here: 'event_calendar:personal_manage:closed' => "closed", 'event_calendar:personal_manage:private' => "private", 'event_calendar:personal_manage:by_event' => "by event", - 'event_calendar:personal_manage:label' => "Calendar permission", + 'event_calendar:personal_manage:label' => "Personal calendars", 'event_calendar:personal_manage:description' => "Determines whether people can add this event to their calendars (open), " ."need to apply to do so (closed) or have no option at all (private - so only you or a site admin can add the event to calendars).", + 'event_calendar:personal_manage:by_event:open' => "Open. People can freely add this event to their personal calendars.", + 'event_calendar:personal_manage:by_event:closed' => "Closed. People can request to add this event to their personal calendars. You can review and approve requests.", + 'event_calendar:personal_manage:by_event:private' => "Private. You or another event administrator must add this event to personal calendars. There is no way for other users to add or request this event.", 'event_calendar:settings:full_calendar:title' => "Support full calendar", 'event_calendar:modify_full_calendar:error' => "Error: could not modify full calendar", @@ -261,6 +264,48 @@ You can manage calendar requests for this event here: 'event_calendar:settings:timeformat:title' => "Time format", 'event_calendar:time_format:12hour' => "12 hour (am/pm)", 'event_calendar:time_format:24hour' => "24 hour", + 'event_calendar:all_day_label' => "All-day event", + 'event_calendar:repeat_interval_label' => "Repeat every", + 'event_calendar:repeat_weeks' => "week(s)", + 'event_calendar:on_these_days' => "on these days:", + 'event_calendar:day_abbrev:monday' => "M", + 'event_calendar:day_abbrev:tuesday' => "T", + 'event_calendar:day_abbrev:wednesday' => "W", + 'event_calendar:day_abbrev:thursday' => "T", + 'event_calendar:day_abbrev:friday' => "F", + 'event_calendar:day_abbrev:saturday' => "S", + 'event_calendar:day_abbrev:sunday' => "S", + 'event_calendar:dow:full:monday' => "Monday", + 'event_calendar:dow:full:tuesday' => "Tuesday", + 'event_calendar:dow:full:wednesday' => "Wednesday", + 'event_calendar:dow:full:thursday' => "Thursday", + 'event_calendar:dow:full:friday' => "Friday", + 'event_calendar:dow:full:saturday' => "Saturday", + 'event_calendar:dow:full:sunday' => "Sunday", + 'event_calendar:schedule_type:poll' => "Create poll asking invitees about day/time", + 'event_calendar:schedule_type:fixed' => "Set day/time", + 'elgg_calendar:send_reminder_label' => "Send reminder", + 'elgg_calendar:send_reminder_before' => "before", + 'event_calendar:interval:minute' => "minute(s)", + 'event_calendar:interval:hour' => "hour(s)", + 'event_calendar:interval:day' => "day(s)", + 'event_calendar:site_calendar' => "Site-wide calendar", + 'event_calendar:calendar_label' => "Calendar", + 'event_calendar:calendar_description' => "Calendar for this event.", + 'event_calendar:schedule:header' => "Schedule", + 'event_calendar:permissions:header' => "Permissions", + 'event_calendar:read_access' => "Read access", + 'event_calendar:web_conference_label' => "Include a web conference for this event.", + 'event_calendar:share_ownership:label' => "Share ownership of this event", + '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: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.", + '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 river diff --git a/models/model.php b/models/model.php index aa97bfddb..b29ad2ad7 100644 --- a/models/model.php +++ b/models/model.php @@ -32,6 +32,7 @@ function event_calendar_set_event_from_form($event_guid,$group_guid) { $event_calendar_hide_end = elgg_get_plugin_setting('hide_end', 'event_calendar'); $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'); if ($event_calendar_more_required == 'yes') { $required_fields = array('title','venue','start_date', @@ -54,7 +55,7 @@ function event_calendar_set_event_from_form($event_guid,$group_guid) { $required_fields[] = 'spots'; } } else { - $required_fields = array('title','venue','start_date'); + $required_fields = array('title','start_date'); } if ($event_guid) { @@ -78,15 +79,21 @@ function event_calendar_set_event_from_form($event_guid,$group_guid) { $event->title = get_input('title'); $event->description = get_input('description'); $event->venue = get_input('venue'); - // convert start date from current server time to GMT + $start_date = get_input('start_date'); - $start_date_text = date("Y-m-d",$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 = date("Y-m-d",$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 = ''; } @@ -122,11 +129,29 @@ function event_calendar_set_event_from_form($event_guid,$group_guid) { if ($event_calendar_personal_manage == 'by_event') { $event->personal_manage = get_input('personal_manage'); } + + if ($event_calendar_repeating_events != 'no') { + $repeats = get_input('repeats'); + $event->repeats = $repeats; + if ($repeats == 'yes') { + $event->repeat_interval = get_input('repeat_interval'); + $dow = array('monday','tuesday','wednesday','thursday','friday','saturday','sunday'); + foreach ($dow as $w) { + $v = 'event-calendar-repeating-'.$w.'-value'; + $event->$v = get_input($v); + } + } + } $event->fees = get_input('fees'); $event->contact = get_input('contact'); $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->send_reminder = get_input('send_reminder'); + $event->reminder_number = get_input('reminder_number'); + $event->reminder_interval = get_input('reminder_interval'); $event->real_end_time = event_calendar_get_end_time($event); foreach ($required_fields as $fn) { if (!trim($event->$fn)) { @@ -171,10 +196,127 @@ function event_calendar_get_events_between($start_date,$end_date,$is_count,$limi return $count; } else { $events = 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,false,$region); - //return event_calendar_vsort($events,'start_date'); - return $events; + $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); + return $all_events; + } +} + +function event_calendar_merge_repeating_events($events, $repeating_events) { + $non_repeating_events = array(); + foreach($events as $e) { + if ($e->repeats != 'yes') { + $non_repeating_events[] = array('event' => $e,'data' => array(array('start_time' => $e->start_date, 'end_time' => $e->real_end_time))); + } + } + + return array_merge($non_repeating_events, $repeating_events); +} + +function event_calendar_get_repeating_events_between($start_date,$end_date,$container_guid,$region) { + // game plan: get all repeating events with start date <= $end_date and then generate all possible events + // sanity check + if ($start_date <= $end_date) { + $options = array( + 'type' => 'object', + 'subtype' => 'event_calendar', + 'limit' => 0, + 'metadata_name_value_pairs' => array( + array( + 'name' => 'start_date', + 'value' => $end_date, + 'operand' => '<=' + ), + array( + 'name' => 'repeats', + 'value' => 'yes' + ), + ) + ); + if ($container_guid) { + if (is_array($container_guid)) { + $options['container_guids'] = $container_guid; + } else { + $options['container_guid'] = $container_guid; + } + } + + if ($region && $region != '-') { + $options['metadata_name_value_pairs'][] = array( + 'name' => 'region', + 'value' => $region + ); + } + + $events = elgg_get_entities_from_metadata($options); } + return event_calendar_get_repeating_event_structure($events, $start_date, $end_date); +} + + +function event_calendar_get_repeating_event_structure($events, $start_date, $end_date) { + $dow = array('monday','tuesday','wednesday','thursday','friday','saturday','sunday'); + $repeating_events = array(); + if ($events) { + $incs = array(); + foreach($events as $e) { + $repeat_data = array(); + $day_num = date('N',$e->start_date)-1; + for($d=0;$d<7;$d++) { + $fn = 'event-calendar-repeating-'.$dow[$d].'-value'; + if ($e->$fn) { + $increment = $d - $day_num; + $incs[] = $increment; + } + } + if ($incs) { + sort($incs); + + $repeat_interval = $e->repeat_interval; + $event_start_time = $e->start_date; + $event_end_time = $e->real_end_time; + $week = 0; + if ($event_start_time <= $event_end_time) { + $more_to_do = TRUE; + $cur_start_time = $event_start_time; + $cur_end_time = $event_end_time; + // keep generating events until after $end_date + // repeat_times is a sanity check to prevent infinite loops in case of bad data + $repeat_times = 0; + do { + foreach($incs as $inc) { + //$seconds = $inc*60*60*24; + if ($inc >=0) { + $tinc = "+ " . $inc; + } else { + $tinc = $inc; + } + $this_start_time = strtotime($tinc . " day", $cur_start_time); + $this_end_time = strtotime($tinc . " day", $cur_end_time); + if ($this_start_time > $end_date) { + $more_to_do = FALSE; + break; + } + if ($this_start_time >= $event_start_time) { + $repeat_data[] = array ( + 'start_time' => $this_start_time, + 'end_time' => $this_end_time, + ); + } + } + // repeat_interval weeks later + $week += $repeat_interval; + $cur_start_time = strtotime("+" . $week . " week", $event_start_time); + $cur_end_time = strtotime("+" . $week ." week", $event_end_time); + $repeat_times += 1; + } while ($repeat_times < 1000 && $more_to_do); + } + } + $repeating_events[] = array('event'=>$e,'data'=>$repeat_data); + } + } + return $repeating_events; } function event_calendar_get_open_events_between($start_date,$end_date, @@ -187,10 +329,73 @@ $is_count,$limit=10,$offset=0,$container_guid=0,$region='-', $meta_max = 'spots' $events = 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,false,$region,$meta_max,$annotation_name); //return event_calendar_vsort($events,'start_date'); - return $events; + $repeating_events = event_calendar_get_open_repeating_events_between($start_date,$end_date,$container_guid,$region); + $all_events = event_calendar_merge_repeating_events($events, $repeating_events); + return $all_events; } } +function event_calendar_get_open_repeating_events_between($start_date,$end_date,$container_guid,$region) { + $db_prefix = elgg_get_config('dbprefix'); + $meta_max = 'spots'; + $annotation_name = 'personal_event'; + $joins = array(); + $wheres = array(); + $meta_max_n = get_metastring_id($meta_max); + $ann_n = get_metastring_id($annotation_name); + if (!$meta_max_n || !$ann_n) { + if ($count) { + return 0; + } else { + return false; + } + } + + $joins[] = "LEFT JOIN {$dbprefix}metadata m4 ON (e.guid = m4.entity_guid AND m4.name_id=$meta_max_n) "; + $joins[] = "LEFT JOIN {$dbprefix}metastrings ms4 ON (m4.value_id = ms4.id) "; + $wheres[] = "((ms4.string is null) OR (ms4.string = \"\") OR (CONVERT(ms4.string,SIGNED) > (SELECT count(id) FROM {$dbprefix}annotations ann WHERE ann.entity_guid = e.guid AND name_id = $ann_n GROUP BY entity_guid)))"; + + // sanity check + if ($start_date <= $end_date) { + $options = array( + 'type' => 'object', + 'subtype' => 'event_calendar', + 'limit' => 0, + 'metadata_name_value_pairs' => array( + array( + 'name' => 'start_date', + 'value' => $end_date, + 'operand' => '<=' + ), + array( + 'name' => 'repeats', + 'value' => 'yes' + ), + ), + 'joins' => $joins, + 'wheres' => $wheres, + + ); + if ($container_guid) { + if (is_array($container_guid)) { + $options['container_guids'] = $container_guid; + } else { + $options['container_guid'] = $container_guid; + } + } + + if ($region && $region != '-') { + $options['metadata_name_value_pairs'][] = array( + 'name' => 'region', + 'value' => $region + ); + } + + $events = elgg_get_entities_from_metadata($options); + } + return event_calendar_get_repeating_event_structure($events, $start_date, $end_date); +} + function event_calendar_get_events_for_user_between($start_date,$end_date,$is_count,$limit=10,$offset=0,$user_guid,$container_guid=0,$region='-') { if ($is_count) { // old way @@ -244,14 +449,82 @@ function event_calendar_get_events_for_user_between2($start_date,$end_date,$is_c //print_r($options_new_way); $events_new_way = elgg_get_entities_from_relationship($options_new_way); //return event_calendar_vsort($events,'start_date'); - if (!$events_old_way) { - return $events_new_way; - } else if (!$events_new_way) { - return $events_old_way; + $repeating_events = event_calendar_get_repeating_events_for_user_between($user_guid,$start_date,$end_date,$container_guid,$region); + $all_events = event_calendar_merge_repeating_events(array_merge($events_old_way,$events_new_way), $repeating_events); + return $all_events; + } +} + +function event_calendar_get_repeating_events_for_user_between($user_guid,$start_date,$end_date,$container_guid,$region) { + $options = array( + 'type' => 'object', + 'subtype' => 'event_calendar', + 'relationship' => 'personal_event', + 'relationship_guid' => $user_guid, + 'metadata_name_value_pairs' => array( + array( + 'name' => 'start_date', + 'value' => $end_date, + 'operand' => '<=' + ), + array( + 'name' => 'repeats', + 'value' => 'yes' + ), + ) + ); + + if ($container_guid) { + if (is_array($container_guid)) { + $options['container_guids'] = $container_guid; + } else { + $options['container_guid'] = $container_guid; + } + } + + if ($region && $region != '-') { + $options['metadata_name_value_pairs'][] = array( + 'name' => 'region', + 'value' => $region + ); + } + + $events = elgg_get_entities_from_relationship($options); + return event_calendar_get_repeating_event_structure($events, $start_date, $end_date); +} + +function event_calendar_get_repeating_events_for_friends_between($user_guid,$friend_list,$start_date,$end_date,$container_guid=0,$region='-') { + + $db_prefix = elgg_get_config('dbprefix'); + $options = array( + 'type' => 'object', + 'subtype' => 'event_calendar', + 'metadata_name_value_pairs' => array( + array( 'name' => 'start_date', + 'value' => $end_date, + 'operand' => '<=' + ), + array( 'name' => 'repeats', + 'value' => 'yes' + ) + ), + 'joins' => array("JOIN {$db_prefix}entity_relationships r ON (r.guid_two = e.guid)"), + 'wheres' => array("r.relationship = 'personal_event'","r.guid_one IN ($friend_list)"), + ); + + if ($container_guid) { + if (is_array($container_guid)) { + $options['container_guids'] = $container_guid; } else { - return array_merge($events_old_way,$events_new_way); + $options['container_guid'] = $container_guid; } } + if ($region && $region != '-') { + $options['metadata_name_value_pairs'][] = array('name'=>'region','value'=>sanitize_string($region)); + } + + $events = elgg_get_entities_from_relationship($options); + return event_calendar_get_repeating_event_structure($events, $start_date, $end_date); } function event_calendar_get_events_for_friends_between($start_date,$end_date,$is_count,$limit=10,$offset=0,$user_guid,$container_guid=0,$region='-') { @@ -300,13 +573,9 @@ function event_calendar_get_events_for_friends_between($start_date,$end_date,$is $options_new_way['order_by_metadata'] = array(array('name'=>'start_date','direction'=>'ASC','as'=>'integer')); //print_r($options_new_way); $events_new_way = elgg_get_entities_from_metadata($options_new_way); - if (!$events_old_way) { - return $events_new_way; - } else if (!$events_new_way) { - return $events_old_way; - } else { - return array_merge($events_old_way,$events_new_way); - } + $repeating_events = event_calendar_get_repeating_events_for_friends_between($user_guid,$friend_list,$start_date,$end_date,$container_guid,$region); + $all_events = event_calendar_merge_repeating_events(array_merge($events_old_way,$events_new_way), $repeating_events); + return $all_events; } } } @@ -469,18 +738,19 @@ function event_calendar_get_entities_from_metadata_between($meta_start_name, $me $query .= ' and ' . get_access_sql_suffix("m"); // Add access controls $query .= ' and ' . get_access_sql_suffix("m2"); // Add access controls - - if (!$count) { - $query .= " order by $order_by limit $offset, $limit"; // Add order and limit + $query .= " order by $order_by"; + if ($limit) { + $query .= " limit $offset, $limit"; // Add order and limit + } $entities = get_data($query, "entity_row_to_elggstar"); if (elgg_get_plugin_setting('add_to_group_calendar', 'event_calendar') == 'yes') { if (get_entity($container_guid) instanceOf ElggGroup) { $entities = event_calendar_get_entities_from_metadata_between_related($meta_start_name, $meta_end_name, - $meta_start_value, $meta_end_value, $entity_type, - $entity_subtype, $owner_guid, $container_guid, - $limit = 10, $offset = 0, $order_by = "", $site_guid = 0, - $filter = false, $count = false, $region='-',$entities); + $meta_start_value, $meta_end_value, $entity_type, + $entity_subtype, $owner_guid, $container_guid, + 0, 0, "", 0, + false, false, '-',$entities); } } return $entities; @@ -557,6 +827,8 @@ $filter = false, $count = false, $region='-',$main_events) { * @param string $annotation_name annotation name to count * * @return int|array A list of entities, or a count if $count is set to true + * + * TODO: see if the new API is robust enough to avoid this custom query */ function event_calendar_get_entities_from_metadata_between2 ($meta_start_name, $meta_end_name, $meta_start_value, $meta_end_value, @@ -690,7 +962,10 @@ $count = false, $region='-', $meta_max = '', $annotation_name = '') $query .= ' AND ' . get_access_sql_suffix("m2"); // Add access controls if (!$count) { - $query .= " order by $order_by limit $offset, $limit"; // Add order and limit + $query .= " order by $order_by"; + if ($limit) { + $query .= " limit $offset, $limit"; // Add order and limit + } return get_data($query, "entity_row_to_elggstar"); } else { if ($row = get_data_row($query)) @@ -843,28 +1118,6 @@ function event_calendar_get_events_for_group($group_guid) { return elgg_get_entities($options); } -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); - } -} - function event_calendar_convert_time($time) { $event_calendar_time_format = elgg_get_plugin_setting('timeformat','event_calendar'); if ($event_calendar_time_format == '12') { @@ -978,17 +1231,35 @@ function event_calendar_get_formatted_time($event) { $end_date = date($date_format,$event->end_date); } if ((!$event->end_date) || ($end_date == $start_date)) { - if ($event_calendar_times) { + if (!$event->all_day && $event_calendar_times) { $start_date = event_calendar_format_time($start_date,$event->start_time,$event->end_time); } $time_bit = $start_date; } else { - if ($event_calendar_times) { + if (!$event->all_day && $event_calendar_times) { $start_date = event_calendar_format_time($start_date,$event->start_time); $end_date = event_calendar_format_time($end_date,$event->end_time); } $time_bit = "$start_date - $end_date"; } + + if ($event->repeats == 'yes') { + $dow = array('monday','tuesday','wednesday','thursday','friday','saturday','sunday'); + $r = array(); + foreach ($dow as $w) { + $fn = 'event-calendar-repeating-'.$w.'-value'; + if ($event->$fn) { + $r[] = elgg_echo('event_calendar:dow:full:'.$w); + } + } + $week_bit = implode(", ",$r); + if ($event->repeat_interval > 1) { + $week_bit .= ' '.elgg_echo('event_calendar:repeated_event:week_interval',array($event->repeat_interval)); + } else { + $week_bit .= ' '.elgg_echo('event_calendar:repeated_event:week_single'); + } + $time_bit = elgg_echo('event_calendar:repeated_event:format',array($time_bit, $week_bit)); + } return $time_bit; } @@ -1229,6 +1500,7 @@ function event_calendar_get_page_content_list($page_type,$container_guid,$start_ } function event_calendar_get_page_content_edit($page_type,$guid) { + elgg_load_js('elgg.event_calendar'); $vars = array(); $vars['id'] = 'event-calendar-edit'; $vars['name'] = 'event_calendar_edit'; @@ -1311,7 +1583,21 @@ function event_calendar_prepare_edit_form_vars($event = NULL) { 'contact' => NULL, 'organiser' => NULL, 'tags' => NULL, - 'personal_manage' => 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, + 'event-calendar-repeating-tuesday-value' => 0, + 'event-calendar-repeating-wednesday-value' => 0, + 'event-calendar-repeating-thursday-value' => 0, + 'event-calendar-repeating-friday-value' => 0, + 'event-calendar-repeating-saturday-value' => 0, + 'event-calendar-repeating-sunday-value' => 0, + 'personal_manage' => 'open', 'long_description' => NULL, 'access_id' => ACCESS_DEFAULT, 'group_guid' => NULL, @@ -1466,6 +1752,7 @@ function event_calendar_generate_listing_params($page_type,$container_guid,$orig $filter = 'all'; } } + if ($filter == 'all') { $count = event_calendar_get_events_between($start_ts,$end_ts,true,$limit,$offset,$container_guid,$region); $events = event_calendar_get_events_between($start_ts,$end_ts,false,$limit,$offset,$container_guid,$region); @@ -1506,6 +1793,8 @@ function event_calendar_generate_listing_params($page_type,$container_guid,$orig if ($event_calendar_listing_format == 'paged') { $title = elgg_echo('event_calendar:upcoming_events_title'); + } else if ($event_calendar_listing_format == 'full') { + $title = elgg_echo('event_calendar:show_events_title'); } else if ($page_type == 'group') { $title = elgg_echo('event_calendar:group'). ' ('.$subtitle.')'; } else { @@ -1769,3 +2058,64 @@ function event_calendar_modify_full_calendar($event_guid,$day_delta,$minute_delt } return FALSE; } + +function event_calendar_get_page_content_fullcalendar_events($start_date,$end_date,$filter='all',$container_guid=0,$region='-') { + //print "$start_date - $end_date"; + $start_ts = strtotime($start_date); + $end_ts = strtotime($end_date); + if ($filter == 'all') { + $events = event_calendar_get_events_between($start_ts,$end_ts,false,0,0,$container_guid,$region); + } else if ($filter == 'open') { + $events = event_calendar_get_open_events_between($start_ts,$end_ts,false,0,0,$container_guid,$region); + } else if ($filter == 'friends') { + $user_guid = elgg_get_logged_in_user_guid(); + $events = event_calendar_get_events_for_friends_between($start_ts,$end_ts,false,0,0,$user_guid,$container_guid,$region); + } else if ($filter == 'mine') { + $user_guid = elgg_get_logged_in_user_guid(); + $events = event_calendar_get_events_for_user_between2($start_ts,$end_ts,false,0,0,$user_guid,$container_guid,$region); + } + $event_array = array(); + $times_supported = elgg_get_plugin_setting('times','event_calendar') != 'no'; + foreach($events as $e) { + $event = $e['event']; + $event_data = $e['data']; + $c = count($event_data); + foreach($event_data as $ed) { + $event_item = array( + 'id' => $event->guid, + 'guid' => $event->guid, + 'title' => $event->title, + 'url' => $event->getURL(), + 'start' => date('c',$ed['start_time']), + 'end' => date('c',$ed['end_time']), + ); + if (!$times_supported || $event->all_day) { + $event_item['allDay'] = TRUE; + } else { + $event_item['allDay'] = FALSE; + } + + $event_array[] = $event_item; + } + } + + $json_events_string = json_encode($event_array); + return $json_events_string; +} + +// right now this does not return repeated events in sorted order, so repeated events only really work properly for the full calendar +// TODO: find another solution for displaying repeated events + +function event_calendar_flatten_event_structure($events) { + $flattened = array(); + $guids = array(); + foreach($events as $e) { + $this_event = $e['event']; + $guid = $this_event->guid; + if (!in_array($guid,$guids)) { + $guids[] = $guid; + $flattened[] = $this_event; + } + } + return $flattened; +} \ No newline at end of file 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); + } +} diff --git a/views/default/event_calendar/container.php b/views/default/event_calendar/container.php new file mode 100644 index 000000000..fdd7da2c6 --- /dev/null +++ b/views/default/event_calendar/container.php @@ -0,0 +1,24 @@ +<?php +elgg_load_library('elgg:event_calendar'); +$site_calendar = elgg_get_plugin_setting('site_calendar', 'event_calendar'); +$admin = elgg_is_admin_logged_in(); +$containers = array(0 => elgg_echo('event_calendar:site_calendar')); +$user = elgg_get_logged_in_user_entity(); +$groups = $user->getGroups('',0,0); +foreach ($groups as $group) { + if (event_calendar_activated_for_group($group)) { + if ($admin || !$group_calendar || $group_calendar == 'members') { + if ($group->canWriteToContainer($user->guid)) { + $containers[$group->guid] = $group->name; + } + } else if ($group->canEdit()) { + $containers[$group->guid] = $group->name; + } + } +} +if ($vars['container_guid']) { + $value = $vars['container_guid']; +} else { + $value = 0; +} +echo elgg_view('input/dropdown',array('name'=>'group_guid', 'value'=>$vars['container_guid'],'options_values'=>$containers)); diff --git a/views/default/event_calendar/css.php b/views/default/event_calendar/css.php index a2437e065..4d68f500f 100644 --- a/views/default/event_calendar/css.php +++ b/views/default/event_calendar/css.php @@ -171,8 +171,102 @@ li.event-calendar-filter-menu-show-only { margin-right: 10px; } -.event-calendar-date-time-setter label { +.event-calendar-medium-text { + width: 500px !important; +} + +.event-calendar-edit-form-block label { float: left; - width: 50px; + width: 90px; + margin-top: 5px; +} + +.event-calendar-long-text { + width: 500px !important; +} + +.event-calendar-edit-form-other-block .mceLayout { + width: 500px !important; +} + +.event-calendar-edit-form { + background-color: #FFFFFF; +} + +.event-calendar-edit-form-block { + width: 90%; + background-color: #DDDDDD; + border-width:1px; + border-style:solid; + border-color:#bfbfbf; + padding: 5px; + margin-bottom: 10px; + clear: both; +} + +.event-calendar-repeating-wrapper { + padding: 0; margin-top: 5px; +} +.event-calendar-repeating-unselected { + font-size: 16px; + font-weight: bold; + color: #DDDDDD; + background-color: #AAAAAA; + border: 1px solid #444444; + padding: 5px; + width: 25px; + text-align: center; + display: inline-block; + margin: 0; +} + +.event-calendar-repeating-unselected:hover { + text-decoration: none; +} + +.event-calendar-repeating-selected { + font-size: 16px; + font-weight: bold; + color: #000000; + background-color: #FFFFFF; + border: 1px solid #000000; + padding: 5px; + width: 25px; + text-align: center; + display: inline-block; + margin: 0; +} + +.event-calendar-repeating-selected:hover { + text-decoration: none; + color: #CCCCCC; +} + +.event-calendar-edit-form-schedule-block ul.elgg-vertical li { + display: block !important; + clear: both; +} + +.event-calendar-edit-form-block ul.elgg-vertical li label { + font-weight: normal; + width: 500px; +} + +.event-calendar-edit-form-block h2 { + font-size: 18px; + color: #000000; +} + +.event-calendar-edit-date-wrapper { + clear: both; + margin-left: 20px; +} + +.event-calendar-edit-reminder-wrapper { + margin-top: 10px; +} + +.event-calendar-description { + display: none; } \ No newline at end of file diff --git a/views/default/event_calendar/datetime_edit.php b/views/default/event_calendar/datetime_edit.php new file mode 100644 index 000000000..aa3a8f2de --- /dev/null +++ b/views/default/event_calendar/datetime_edit.php @@ -0,0 +1,45 @@ +<?php +$event_calendar_times = elgg_get_plugin_setting('times', 'event_calendar'); +$event_calendar_hide_end = elgg_get_plugin_setting('hide_end', 'event_calendar'); +$prefix = $vars['prefix']; +$body = ''; + +if ($event_calendar_times != 'no') { + if ($event_calendar_hide_end != 'yes') { + $body .= '<p><label>'.elgg_echo('event_calendar:from_label').'</label>'; + } + $body .= elgg_view("event_calendar/input/date_local",array( + '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 .= '</p><p><label>'.elgg_echo('event_calendar:to_label').'</label>'; + $body .= elgg_view("event_calendar/input/date_local",array( + 'timestamp'=>TRUE, + 'autocomplete'=>'off', + 'class'=>'event-calendar-compressed-date', + 'name' => 'end_date', + 'value'=>$vars['end_date'], + )); + $body .= elgg_view("input/timepicker",array('name' => 'end_time','value'=>$vars['end_time'])); + } + $body .= '</p>'; +} else { + + $body .= '<p><label>'.elgg_echo("event_calendar:start_date_label").'<br />'; + $body .= elgg_view("event_calendar/input/date_local",array('timestamp'=>TRUE, 'autocomplete'=>'off','name' => 'start_date','value'=>$vars['start_date'])); + $body .= '</label></p>'; + $body .= '<p class="description">'.$prefix['start_date'].elgg_echo('event_calendar:start_date_description').'</p>'; + + if ($event_calendar_hide_end != 'yes') { + $body .= '<p><label>'.elgg_echo("event_calendar:end_date_label").'<br />'; + $body .= elgg_view("event_calendar/input/date_local",array('timestamp'=>TRUE,'autocomplete'=>'off','name' => 'end_date','value'=>$vars['end_date'])); + $body .= '</label></p>'; + $body .= '<p class="description">'.$prefix['end_date'].elgg_echo('event_calendar:end_date_description').'</p>'; + } +} + +echo $body; \ No newline at end of file diff --git a/views/default/event_calendar/full_calendar_view.php b/views/default/event_calendar/full_calendar_view.php index 58aefe741..2c97eb159 100644 --- a/views/default/event_calendar/full_calendar_view.php +++ b/views/default/event_calendar/full_calendar_view.php @@ -1,31 +1,6 @@ <?php elgg_load_js('elgg.full_calendar'); -$events = $vars['events']; - -$event_array = array(); -$times_supported = elgg_get_plugin_setting('times','event_calendar') != 'no'; - -foreach($events as $e) { - $event_item = array( - 'guid' => $e->guid, - //'title' => '<a href="'.$e->url.'">'.$e->title.'</a>', - 'title' => $e->title, - 'url' => $e->getURL(), - 'start_date' => $e->start_date, - 'end_date' => $e->real_end_time, - ); - if ($times_supported) { - $event_item['allDay'] = FALSE; - } else { - $event_item['allDay'] = TRUE; - } - - $event_array[] = $event_item; -} - -$json_events_string = json_encode($event_array); - // TODO: is there an easy way to avoid embedding JS? ?> <script> @@ -58,31 +33,40 @@ handleEventDrop = function(event,dayDelta,minuteDelta,allDay,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({ - guid: events[i].guid, - title : events[i].title, - url: events[i].url, - start : new Date(1000*events[i].start_date), - end : new Date(1000*events[i].end_date), - allDay: events[i].allDay - }); - } - +getISODate = function(d) { + var year = d.getFullYear(); + var month = d.getMonth()+1; + month = month < 10 ? '0' + month : month; + var day = d.getDay()+1; + day = day < 10 ? '0' + day : day; + return year +"-"+month+"-"+day; +} + +handleGetEvents = function(start, end, callback) { + var start_date = getISODate(start); + var end_date = getISODate(end); + var url = "event_calendar/get_fullcalendar_events/"+start_date+"/"+end_date+"/<?php echo $vars['filter']; ?>/<?php echo $vars['group_guid']; ?>"; + elgg.getJSON(url, {success: + function(events) { + callback(events); + } + }); +} + +$(document).ready(function() { $('#calendar').fullCalendar({ header: { left: 'prev,next today', center: 'title', right: 'month,agendaWeek,agendaDay' }, + month: <?php echo date('n',strtotime($vars['start_date']))-1; ?>, + ignoreTimezone: true, editable: true, slotMinutes: 15, eventDrop: handleEventDrop, eventClick: handleEventClick, - events: cal_events + events: handleGetEvents }); }); </script> diff --git a/views/default/event_calendar/repeat_form_element.php b/views/default/event_calendar/repeat_form_element.php new file mode 100644 index 000000000..45fdabfa1 --- /dev/null +++ b/views/default/event_calendar/repeat_form_element.php @@ -0,0 +1,43 @@ +<?php +$event = $vars['event']; +$fd = $vars['form_data']; +if ($fd['repeats'] == 'yes') { + echo elgg_view('input/checkbox',array('name'=>'repeats','value'=>'yes','checked'=>'checked')); +} else { + echo elgg_view('input/checkbox',array('name'=>'repeats','value'=>'yes')); +} +echo elgg_echo('event_calendar:repeat_interval_label').' '; +echo elgg_view('input/dropdown',array('name'=>'repeat_interval','value'=>$fd['repeat_interval'],'options_values'=>array('1'=>'1','2'=>'2','3'=>'3','4'=>'4','5'=>'5','6'=>'6','7'=>'7','8'=>'8'))); +echo ' '.elgg_echo('event_calendar:repeat_weeks'); +echo ' '.elgg_echo('event_calendar:on_these_days'); +?> +<div class="event-calendar-repeating-wrapper"> +<a id="event-calendar-repeating-monday" href="javascript:void(0);" class="event-calendar-repeating-unselected"> + <?php echo elgg_echo('event_calendar:day_abbrev:monday'); ?> +</a> +<a id="event-calendar-repeating-tuesday" href="javascript:void(0);" class="event-calendar-repeating-unselected"> + <?php echo elgg_echo('event_calendar:day_abbrev:tuesday'); ?> +</a> +<a id="event-calendar-repeating-wednesday" href="javascript:void(0);" class="event-calendar-repeating-unselected"> + <?php echo elgg_echo('event_calendar:day_abbrev:wednesday'); ?> +</a> +<a id="event-calendar-repeating-thursday" href="javascript:void(0);" class="event-calendar-repeating-unselected"> + <?php echo elgg_echo('event_calendar:day_abbrev:thursday'); ?> +</a> +<a id="event-calendar-repeating-friday" href="javascript:void(0);" class="event-calendar-repeating-unselected"> + <?php echo elgg_echo('event_calendar:day_abbrev:friday'); ?> +</a> +<a id="event-calendar-repeating-saturday" href="javascript:void(0);" class="event-calendar-repeating-unselected"> + <?php echo elgg_echo('event_calendar:day_abbrev:saturday'); ?> +</a> +<a id="event-calendar-repeating-sunday" href="javascript:void(0);" class="event-calendar-repeating-unselected"> + <?php echo elgg_echo('event_calendar:day_abbrev:sunday'); ?> +</a> +</div> +<input type="hidden" name="event-calendar-repeating-monday-value" value="<?php echo $fd['event-calendar-repeating-monday-value']; ?>"> +<input type="hidden" name="event-calendar-repeating-tuesday-value" value="<?php echo $fd['event-calendar-repeating-tuesday-value']; ?>"> +<input type="hidden" name="event-calendar-repeating-wednesday-value" value="<?php echo $fd['event-calendar-repeating-wednesday-value']; ?>"> +<input type="hidden" name="event-calendar-repeating-thursday-value" value="<?php echo $fd['event-calendar-repeating-thursday-value']; ?>"> +<input type="hidden" name="event-calendar-repeating-friday-value" value="<?php echo $fd['event-calendar-repeating-friday-value']; ?>"> +<input type="hidden" name="event-calendar-repeating-saturday-value" value="<?php echo $fd['event-calendar-repeating-saturday-value']; ?>"> +<input type="hidden" name="event-calendar-repeating-sunday-value" value="<?php echo $fd['event-calendar-repeating-sunday-value']; ?>"> diff --git a/views/default/event_calendar/show_events.php b/views/default/event_calendar/show_events.php index 63d722247..3a484e756 100644 --- a/views/default/event_calendar/show_events.php +++ b/views/default/event_calendar/show_events.php @@ -10,16 +10,21 @@ * */ +elgg_load_library('elgg:event_calendar'); + $listing_format = $vars['listing_format']; if ($vars['events']) { if ($listing_format == 'agenda') { + $vars['events'] = event_calendar_flatten_event_structure($vars['events']); $event_list = elgg_view('event_calendar/agenda_view',$vars); } else if ($listing_format == 'paged') { + $vars['events'] = event_calendar_flatten_event_structure($vars['events']); $event_list = elgg_view('event_calendar/paged_view',$vars); } else if ($listing_format == 'full') { $event_list = elgg_view('event_calendar/full_calendar_view',$vars); } else { + $vars['events'] = event_calendar_flatten_event_structure($vars['events']); $options = array( 'list_class' => 'elgg-list-entity', 'full_view' => FALSE, @@ -32,7 +37,12 @@ if ($vars['events']) { $event_list = elgg_view_entity_list($vars['events'], $options); } } else { - $event_list = '<p>'.elgg_echo('event_calendar:no_events_found').'</p>'; + if ($listing_format == 'full') { + // show the empty calendar + $event_list = elgg_view('event_calendar/full_calendar_view',$vars); + } else { + $event_list = '<p>'.elgg_echo('event_calendar:no_events_found').'</p>'; + } } if ($listing_format == 'paged' || $listing_format == 'full') { echo $event_list; diff --git a/views/default/forms/event_calendar/edit.php b/views/default/forms/event_calendar/edit.php index 3526627a7..713fb9abc 100644 --- a/views/default/forms/event_calendar/edit.php +++ b/views/default/forms/event_calendar/edit.php @@ -3,20 +3,29 @@ $event = $vars['event']; $fd = $vars['form_data']; $personal_manage_options = array( - elgg_echo('event_calendar:personal_manage:open') => 'open', - elgg_echo('event_calendar:personal_manage:closed') => 'closed', - elgg_echo('event_calendar:personal_manage:private') => 'private', + elgg_echo('event_calendar:personal_manage:by_event:open') => 'open', + elgg_echo('event_calendar:personal_manage:by_event:closed') => 'closed', + elgg_echo('event_calendar:personal_manage:by_event:private') => 'private', ); -$event_calendar_times = elgg_get_plugin_setting('times', 'event_calendar'); +$schedule_options = array( + elgg_echo('event_calendar:schedule_type:poll')=>'poll', + elgg_echo('event_calendar:schedule_type:fixed')=>'fixed', +); + +$event_calendar_fewer_fields = elgg_get_plugin_setting('fewer_fields', 'event_calendar'); +$event_calendar_repeating_events = elgg_get_plugin_setting('repeating_events', 'event_calendar'); + $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_calendar_spots_display = elgg_get_plugin_setting('spots_display', 'event_calendar'); //$event_calendar_add_users = elgg_get_plugin_setting('add_users', 'event_calendar'); $event_calendar_hide_access = elgg_get_plugin_setting('hide_access', 'event_calendar'); -$event_calendar_hide_end = elgg_get_plugin_setting('hide_end', 'event_calendar'); + $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_repeated_events = elgg_get_plugin_setting('repeated_events', 'event_calendar'); +$event_calendar_reminders = elgg_get_plugin_setting('reminders', 'event_calendar'); if ($event_calendar_more_required == 'yes') { $required_fields = array('title','venue','start_date','start_time', @@ -39,7 +48,7 @@ foreach ($all_fields as $fn) { } if ($event) { - $title = $event->title; + /*$title = $event->title; $brief_description = $event->description; $venue = $event->venue; // this is a form redisplay, so take the values as submitted @@ -65,7 +74,15 @@ if ($event) { $fees = $event->fees; $contact = $event->contact; $organiser = $event->organiser; - $event_tags = $event->event_tags; + if ($event->tags) { + $event_tags = $event->tags; + } else { + // old way + $event_tags = $event->event_tags; + } + $reminder_number = $event->reminder_number; + $reminder_interval = $event->reminder_interval; + $long_description = $event->long_description; $access = $event->access_id; if ($event_calendar_times != 'no') { @@ -77,91 +94,144 @@ if ($event) { if (!$personal_manage) { $personal_manage = 'open'; } - } + }*/ $event_action = 'manage_event'; $event_guid = $event->guid; -} else { - $title = $fd['title']; - $brief_description = $fd['description']; - $venue = $fd['venue']; - $start_date = $fd['start_date']; - $end_date = $fd['end_date']; - $fees = $fd['fees']; - if ($event_calendar_spots_display) { - $spots = $fd['spots']; - } - if ($event_calendar_region_display) { - $region = $fd['region']; - } - if ($event_calendar_type_display) { - $event_type = $fd['event_type']; - } - $contact = $fd['contact']; - $organiser = $fd['organiser']; - $event_tags = $fd['event_tags']; - $long_description = $fd['long_description']; - $access = $fd['access_id']; - if ($event_calendar_times != 'no') { - $start_time = $fd['start_time']; - $end_time = $fd['end_time']; - } - if ($event_calendar_personal_manage == 'by_event') { - $personal_manage = $fd['personal_manage']; - } +} else { $event_action = 'add_event'; $event_guid = 0; } -$body = ''; + +$title = $fd['title']; +$brief_description = $fd['description']; +$venue = $fd['venue']; +$start_date = $fd['start_date']; +$end_date = $fd['end_date']; +$fees = $fd['fees']; +if ($event_calendar_spots_display) { + $spots = $fd['spots']; +} +if ($event_calendar_region_display) { + $region = $fd['region']; +} +if ($event_calendar_type_display) { + $event_type = $fd['event_type']; +} +$contact = $fd['contact']; +$organiser = $fd['organiser']; +$event_tags = $fd['tags']; +$all_day = $fd['all_day']; +$send_reminder = $fd['send_reminder']; +$reminder_number = $fd['reminder_number']; +$reminder_interval = $fd['reminder_interval']; +$schedule_type = $fd['schedule_type']; +$long_description = $fd['long_description']; +$access = $fd['access_id']; +if ($event_calendar_times != 'no') { + $start_time = $fd['start_time']; + $end_time = $fd['end_time']; +} +if ($event_calendar_personal_manage == 'by_event') { + $personal_manage = $fd['personal_manage']; +} + +$body = '<div class="event-calendar-edit-form">'; $body .= elgg_view('input/hidden',array('name'=>'event_action', 'value'=>$event_action)); $body .= elgg_view('input/hidden',array('name'=>'event_guid', 'value'=>$event_guid)); $body .= elgg_view('input/hidden',array('name'=>'group_guid', 'value'=>$vars['group_guid'])); -$body .= '<p><label>'.elgg_echo("event_calendar:title_label").'<br />'; -$body .= elgg_view("input/text",array('name' => 'title','value'=>$title)); -$body .= '</label></p>'; -$body .= '<p class="description">'.$prefix['title'].elgg_echo('event_calendar:title_description').'</p>'; +$body .= '<div class="event-calendar-edit-form-block event-calendar-edit-form-top-block">'; -$body .= '<p><label>'.elgg_echo("event_calendar:venue_label").'<br />'; -$body .= elgg_view("input/text",array('name' => 'venue','value'=>$venue)); -$body .= '</label></p>'; -$body .= '<p class="description">'.$prefix['venue'].elgg_echo('event_calendar:venue_description').'</p>'; +$body .= '<p><label>'.elgg_echo("event_calendar:title_label").'</label>'; +$body .= elgg_view("input/text",array('name' => 'title','class'=>'event-calendar-medium-text','value'=>$title)); +$body .= '</p>'; +$body .= '<p class="event-calendar-description">'.$prefix['title'].elgg_echo('event_calendar:title_description').'</p>'; -if ($event_calendar_times != 'no') { - $body .= '<div class="event-calendar-date-time-setter">'; - if ($event_calendar_hide_end != 'yes') { - $body .= '<p><label>'.elgg_echo('event_calendar:from_label').'</label>'; - } - $body .= elgg_view("event_calendar/input/date_local",array('timestamp'=>TRUE, 'autocomplete'=>'off','class'=>'event-calendar-compressed-date','name' => 'start_date','value'=>$start_date)); - $body .= elgg_view("input/timepicker",array('name' => 'start_time','value'=>$start_time)); - if ($event_calendar_hide_end != 'yes') { - $body .= '</p><p><label>'.elgg_echo('event_calendar:to_label').'</label>'; - $body .= elgg_view("event_calendar/input/date_local",array('timestamp'=>TRUE,'autocomplete'=>'off','class'=>'event-calendar-compressed-date','name' => 'end_date','value'=>$end_date)); - $body .= elgg_view("input/timepicker",array('name' => 'end_time','value'=>$end_time)); - } +$body .= '<p><label>'.elgg_echo("event_calendar:venue_label").'</label>'; +$body .= elgg_view("input/text",array('name' => 'venue','class'=>'event-calendar-medium-text','value'=>$venue)); +$body .= '</p>'; +$body .= '<p class="event-calendar-description">'.$prefix['venue'].elgg_echo('event_calendar:venue_description').'</p>'; + +$body .= '<p><label>'.elgg_echo("event_calendar:brief_description_label").'</label>'; +$body .= elgg_view("input/text",array('name' => 'description','class'=>'event-calendar-medium-text','value'=>$brief_description)); +$body .= '</p>'; +$body .= '<p class="event-calendar-description">'.$prefix['brief_description'].elgg_echo('event_calendar:brief_description_description').'</p>'; + +$body .= '<p><label>'.elgg_echo("event_calendar:event_tags_label").'</label>'; +$body .= elgg_view("input/tags",array('name' => 'tags','class'=>'event-calendar-medium-text','value'=>$event_tags)); +$body .= '</p>'; +$body .= '<p class="event-calendar-description">'.$prefix['event_tags'].elgg_echo('event_calendar:event_tags_description').'</p>'; + +$body .= '<p><label>'.elgg_echo("event_calendar:calendar_label").'</label>'; +$body .= elgg_view('event_calendar/container',array('container_guid'=>$vars['container_guid'])); +$body .= '</p>'; +$body .= '<p class="event-calendar-description">'.$prefix['calendar'].elgg_echo('event_calendar:calendar_description').'</p>'; + +if(elgg_plugin_exists('sched_conf')) { + $body .= '<p>'; + $body .= elgg_view('input/checkbox',array('name'=>'web_conference','value'=>$web_conference,'options_values'=>array('1'))); + $body .= elgg_echo('event_calendar:web_conference_label'); $body .= '</p>'; - $body .= '</div>'; -} else { +} - $body .= '<p><label>'.elgg_echo("event_calendar:start_date_label").'<br />'; - $body .= elgg_view("event_calendar/input/date_local",array('timestamp'=>TRUE, 'autocomplete'=>'off','name' => 'start_date','value'=>$start_date)); - $body .= '</label></p>'; - $body .= '<p class="description">'.$prefix['start_date'].elgg_echo('event_calendar:start_date_description').'</p>'; - - if ($event_calendar_hide_end != 'yes') { - $body .= '<p><label>'.elgg_echo("event_calendar:end_date_label").'<br />'; - $body .= elgg_view("event_calendar/input/date_local",array('timestamp'=>TRUE,'autocomplete'=>'off','name' => 'end_date','value'=>$end_date)); - $body .= '</label></p>'; - $body .= '<p class="description">'.$prefix['end_date'].elgg_echo('event_calendar:end_date_description').'</p>'; +$body .= '</div>'; + +$body .= '<div class="event-calendar-edit-form-block event-calendar-edit-form-schedule-block">'; +$body .= '<h2>'.elgg_echo('event_calendar:schedule:header').'</h2>'; +if ($all_day) { + $body .= elgg_view('input/checkbox',array('name'=>'all_day','value'=>1,'checked'=>'checked')); +} else { + $body .= elgg_view('input/checkbox',array('name'=>'all_day','value'=>1)); +} +$body .= elgg_echo('event_calendar:all_day_label'); +if(elgg_plugin_exists('event_poll')) { + $body .= elgg_view('input/radio',array('name'=>'schedule_type','value'=>$schedule_type,'options'=>$schedule_options)); +} +$body .= '<div class="event-calendar-edit-date-wrapper">'; +$body .= elgg_view('event_calendar/datetime_edit', + array( + 'start_date' => $start_date, + 'end_date' => $end_date, + 'start_time' => $start_time, + 'end_time' => $end_time, + 'prefix' => $prefix, +)); +if ($event_calendar_repeated_events == 'yes') { + $body .= elgg_view('event_calendar/repeat_form_element',$vars); +} +if ($event_calendar_reminders == 'yes') { + $body .= '<div class="event-calendar-edit-reminder-wrapper">'; + if ($send_reminder) { + $body .= elgg_view('input/checkbox',array('name'=>'send_reminder','checked' => 'checked','value'=>1)); + } else { + $body .= elgg_view('input/checkbox',array('name'=>'send_reminder','value'=>1)); + } + $body .= elgg_echo('elgg_calendar:send_reminder_label'). ' '; + $numbers = array(); + for ($i=1;$i<60;$i++) { + $numbers[$i] = $i; } + $intervals = array( + 1 => elgg_echo('event_calendar:interval:minute'), + 60 => elgg_echo('event_calendar:interval:hour'), + 60*24 => elgg_echo('event_calendar:interval:day'), + ); + + $body .= elgg_view('input/dropdown',array('name'=>'reminder_number','options_values'=>$numbers,'value'=>$reminder_number)); + $body .= elgg_view('input/dropdown',array('name'=>'reminder_interval','options_values'=>$intervals,'value'=>$reminder_interval)); + $body .= elgg_echo('elgg_calendar:send_reminder_before'); + $body .= '</div>'; } if ($event_calendar_spots_display == 'yes') { $body .= '<p><label>'.elgg_echo("event_calendar:spots_label").'<br />'; - $body .= elgg_view("input/text",array('name' => 'spots','value'=>$spots)); + $body .= elgg_view("input/text",array('name' => 'spots','class'=>'event-calendar-medium-text','value'=>$spots)); $body .= '</label></p>'; - $body .= '<p class="description">'.$prefix['spots'].elgg_echo('event_calendar:spots_description').'</p>'; + $body .= '<p class="event-calendar-description">'.$prefix['spots'].elgg_echo('event_calendar:spots_description').'</p>'; } +$body .= '</div>'; +$body .= '</div>'; // the following feature has been superceded by the manage subscribers feature @@ -172,91 +242,17 @@ if ($event_calendar_spots_display == 'yes') { $body .= '<p class="description">'.elgg_echo('event_calendar:add_user_description').'</p>'; }*/ -$body .= '<p><label>'.elgg_echo("event_calendar:brief_description_label").'<br />'; -$body .= elgg_view("input/text",array('name' => 'description','value'=>$brief_description)); -$body .= '</label></p>'; -$body .= '<p class="description">'.$prefix['brief_description'].elgg_echo('event_calendar:brief_description_description').'</p>'; - -if ($event_calendar_region_display == 'yes') { - $region_list = trim(elgg_get_plugin_setting('region_list', 'event_calendar')); - $region_list_handles = elgg_get_plugin_setting('region_list_handles', 'event_calendar'); - // make sure that we are using Unix line endings - $region_list = str_replace("\r\n","\n",$region_list); - $region_list = str_replace("\r","\n",$region_list); - if ($region_list) { - $options = array(); - $options[] = '-'; - foreach(explode("\n",$region_list) as $region_item) { - $region_item = trim($region_item); - if ($region_list_handles == 'yes') { - $options[$region_item] = elgg_echo('event_calendar:region:'.$region_item); - } else { - $options[$region_item] = $region_item; - } - } - $body .= '<p><label>'.elgg_echo("event_calendar:region_label").'<br />'; - $body .= elgg_view("input/dropdown",array('name' => 'region','value'=>$region,'options_values'=>$options)); - $body .= '</label></p>'; - $body .= '<p class="description">'.$prefix['region'].elgg_echo('event_calendar:region_description').'</p>'; - } -} - -if ($event_calendar_type_display == 'yes') { - $type_list = trim(elgg_get_plugin_setting('type_list', 'event_calendar')); - $type_list_handles = elgg_get_plugin_setting('type_list_handles', 'event_calendar'); - // make sure that we are using Unix line endings - $type_list = str_replace("\r\n","\n",$type_list); - $type_list = str_replace("\r","\n",$type_list); - if ($type_list) { - $options = array(); - $options[] = '-'; - foreach(explode("\n",$type_list) as $type_item) { - $type_item = trim($type_item); - if ($type_list_handles == 'yes') { - $options[$type_item] = elgg_echo('event_calendar:type:'.$type_item); - } else { - $options[$type_item] = $type_item; - } - } - $body .= '<p><label>'.elgg_echo("event_calendar:type_label").'<br />'; - $body .= elgg_view("input/dropdown",array('name' => 'event_type','value'=>$event_type,'options_values'=>$options)); - $body .= '</label></p>'; - $body .= '<p class="description">'.$prefix['event_type'].elgg_echo('event_calendar:type_description').'</p>'; - } -} - -$body .= '<p><label>'.elgg_echo("event_calendar:fees_label").'<br />'; -$body .= elgg_view("input/text",array('name' => 'fees','value'=>$fees)); -$body .= '</label></p>'; -$body .= '<p class="description">'.$prefix['fees'].elgg_echo('event_calendar:fees_description').'</p>'; - -$body .= '<p><label>'.elgg_echo("event_calendar:contact_label").'<br />'; -$body .= elgg_view("input/text",array('name' => 'contact','value'=>$contact)); -$body .= '</label></p>'; -$body .= '<p class="description">'.$prefix['contact'].elgg_echo('event_calendar:contact_description').'</p>'; - -$body .= '<p><label>'.elgg_echo("event_calendar:organiser_label").'<br />'; -$body .= elgg_view("input/text",array('name' => 'organiser','value'=>$organiser)); -$body .= '</label></p>'; -$body .= '<p class="description">'.$prefix['organiser'].elgg_echo('event_calendar:organiser_description').'</p>'; - if ($event_calendar_personal_manage == 'by_event') { - $body .= '<p><label>'.elgg_echo('event_calendar:personal_manage:label').'<br />'; + $body .= '<div class="event-calendar-edit-form-block event-calendar-edit-form-membership-block">'; + $body .= '<h2>'.elgg_echo('event_calendar:personal_manage:label').'</h2>'; $body .= elgg_view("input/radio",array('name' => 'personal_manage','value'=>$personal_manage,'options'=>$personal_manage_options)); - $body .= '</label></p>'; - $body .= '<p class="description">'.$prefix['personal_manage'].elgg_echo('event_calendar:personal_manage:description').'</p>'; + //$body .= '<p class="event-calendar-description">'.$prefix['personal_manage'].elgg_echo('event_calendar:personal_manage:description').'</p>'; + $body .= '<br clear="both" />'; + $body .= '</div>'; } -$body .= '<p><label>'.elgg_echo("event_calendar:event_tags_label").'<br />'; -$body .= elgg_view("input/tags",array('name' => 'tags','value'=>$event_tags)); -$body .= '</label></p>'; -$body .= '<p class="description">'.$prefix['event_tags'].elgg_echo('event_calendar:event_tags_description').'</p>'; - -$body .= '<p><label>'.elgg_echo("event_calendar:long_description_label").'<br />'; -$body .= elgg_view("input/longtext",array('name' => 'long_description','value'=>$long_description)); -$body .= '</label></p>'; -$body .= '<p class="description">'.$prefix['long_description'].elgg_echo('event_calendar:long_description_description').'</p>'; - +$body .= '<div class="event-calendar-edit-form-block event-calendar-edit-form-share-block">'; +$body .= '<h2>'.elgg_echo('event_calendar:permissions:header').'</h2>'; if($event_calendar_hide_access == 'yes') { $event_calendar_default_access = elgg_get_plugin_setting('default_access', 'event_calendar'); if($event_calendar_default_access) { @@ -265,11 +261,95 @@ if($event_calendar_hide_access == 'yes') { $body .= elgg_view("input/hidden",array('name' => 'access_id','value'=>ACCESS_PRIVATE)); } } else { - $body .= '<p><label>'.elgg_echo("access").'<br />'; + $body .= '<p><label>'.elgg_echo('event_calendar:read_access').'</label>'; $body .= elgg_view("input/access",array('name' => 'access_id','value'=>$access)); - $body .= '</label></p>'; + $body .= '</p>'; +} +$body .= elgg_echo('event_calendar:share_ownership:label'); +$body .= '<br />'; +$body .= elgg_echo('event_calendar:share_ownership:description'); +$body .= elgg_view('input/entity_admins_dropdown',array('entity'=>$event)); +$body .= '</div>'; + +if ($event_calendar_region_display == 'yes' || $event_calendar_type_display == 'yes' || $event_calendar_fewer_fields != 'yes') { + $body .= '<div class="event-calendar-edit-form-block event-calendar-edit-form-other-block">'; + + if ($event_calendar_region_display == 'yes') { + $region_list = trim(elgg_get_plugin_setting('region_list', 'event_calendar')); + $region_list_handles = elgg_get_plugin_setting('region_list_handles', 'event_calendar'); + // make sure that we are using Unix line endings + $region_list = str_replace("\r\n","\n",$region_list); + $region_list = str_replace("\r","\n",$region_list); + if ($region_list) { + $options = array(); + $options[] = '-'; + foreach(explode("\n",$region_list) as $region_item) { + $region_item = trim($region_item); + if ($region_list_handles == 'yes') { + $options[$region_item] = elgg_echo('event_calendar:region:'.$region_item); + } else { + $options[$region_item] = $region_item; + } + } + $body .= '<p><label>'.elgg_echo("event_calendar:region_label").'</label>'; + $body .= elgg_view("input/dropdown",array('name' => 'region','value'=>$region,'options_values'=>$options)); + $body .= '</p>'; + $body .= '<p class="event-calendar-description">'.$prefix['region'].elgg_echo('event_calendar:region_description').'</p>'; + } + } + + if ($event_calendar_type_display == 'yes') { + $type_list = trim(elgg_get_plugin_setting('type_list', 'event_calendar')); + $type_list_handles = elgg_get_plugin_setting('type_list_handles', 'event_calendar'); + // make sure that we are using Unix line endings + $type_list = str_replace("\r\n","\n",$type_list); + $type_list = str_replace("\r","\n",$type_list); + if ($type_list) { + $options = array(); + $options[] = '-'; + foreach(explode("\n",$type_list) as $type_item) { + $type_item = trim($type_item); + if ($type_list_handles == 'yes') { + $options[$type_item] = elgg_echo('event_calendar:type:'.$type_item); + } else { + $options[$type_item] = $type_item; + } + } + $body .= '<p><label>'.elgg_echo("event_calendar:type_label").'</label>'; + $body .= elgg_view("input/dropdown",array('name' => 'event_type','value'=>$event_type,'options_values'=>$options)); + $body .= '</p>'; + $body .= '<p class="event-calendar-description">'.$prefix['event_type'].elgg_echo('event_calendar:type_description').'</p>'; + } + } + + if ($event_calendar_fewer_fields != 'yes') { + + $body .= '<p><label>'.elgg_echo("event_calendar:fees_label").'</label>'; + $body .= elgg_view("input/text",array('name' => 'fees','class'=>'event-calendar-medium-text','value'=>$fees)); + $body .= '</p>'; + $body .= '<p class="event-calendar-description">'.$prefix['fees'].elgg_echo('event_calendar:fees_description').'</p>'; + + $body .= '<p><label>'.elgg_echo("event_calendar:contact_label").'</label>'; + $body .= elgg_view("input/text",array('name' => 'contact','class'=>'event-calendar-medium-text','value'=>$contact)); + $body .= '</p>'; + $body .= '<p class="event-calendar-description">'.$prefix['contact'].elgg_echo('event_calendar:contact_description').'</p>'; + + $body .= '<p><label>'.elgg_echo("event_calendar:organiser_label").'</label>'; + $body .= elgg_view("input/text",array('name' => 'organiser','class'=>'event-calendar-medium-text','value'=>$organiser)); + $body .= '</p>'; + $body .= '<p class="event-calendar-description">'.$prefix['organiser'].elgg_echo('event_calendar:organiser_description').'</p>'; + + $body .= '<p><label>'.elgg_echo("event_calendar:long_description_label").'</label>'; + $body .= elgg_view("input/longtext",array('name' => 'long_description','class'=>'event-calendar-long-text','value'=>$long_description)); + $body .= '</p>'; + $body .= '<p class="event-calendar-description">'.$prefix['long_description'].elgg_echo('event_calendar:long_description_description').'</p>'; + } + + $body .= '</div>'; } $body .= elgg_view('input/submit', array('name'=>'submit','value'=>elgg_echo('event_calendar:submit'))); +$body .= '</div>'; + echo $body; diff --git a/views/default/input/timepicker.php b/views/default/input/timepicker.php index d7df04699..ccbb88778 100644 --- a/views/default/input/timepicker.php +++ b/views/default/input/timepicker.php @@ -1,5 +1,5 @@ <?php - +$event_calendar_restricted_times = elgg_get_plugin_setting('restricted_times', 'event_calendar'); $time_format = elgg_get_plugin_setting('timeformat', 'event_calendar'); if (!$time_format) { $time_format = '24'; @@ -18,7 +18,14 @@ $dates = array(); $dates['-'] = '-'; if ($time_format == '12') { - for($h=0;$h<=12;$h++) { + if ($event_calendar_restricted_times == 'yes') { + $h1 = 6; + $h2 = 9; + } else { + $h1 = 0; + $h2 = 11; + } + for($h=$h1;$h<=12;$h++) { $ht = sprintf("%02d",$h); for($m=0;$m<60;$m=$m+15) { $mt = sprintf("%02d",$m); @@ -30,7 +37,7 @@ if ($time_format == '12') { } } } - for($h=1;$h<12;$h++) { + for($h=1;$h<$h2;$h++) { $ht = sprintf("%02d",$h); for($m=0;$m<60;$m=$m+15) { $mt = sprintf("%02d",$m); @@ -38,8 +45,23 @@ if ($time_format == '12') { $dates[$t] = "$ht:$mt pm"; } } + if ($event_calendar_restricted_times == 'yes') { + $m = 0; + $h = 9; + $ht = sprintf("%02d",$h); + $mt = sprintf("%02d",$m); + $t = 12*60+$h*60+$m; + $dates[$t] = "$ht:$mt pm"; + } } else { - for($h=0;$h<24;$h++) { + if ($event_calendar_restricted_times == 'yes') { + $h1 = 6; + $h2 = 21; + } else { + $h1 = 0; + $h2 = 24; + } + for($h=$h1;$h<$h2;$h++) { $ht = sprintf("%02d",$h); for($m=0;$m<60;$m=$m+15) { $mt = sprintf("%02d",$m); @@ -47,6 +69,14 @@ if ($time_format == '12') { $dates[$t] = "$ht:$mt"; } } + if ($event_calendar_restricted_times == 'yes') { + $m = 0; + $h = 21; + $ht = sprintf("%02d",$h); + $mt = sprintf("%02d",$m); + $t = 12*60+$h*60+$m; + $dates[$t] = "$ht:$mt pm"; + } } echo elgg_view('input/dropdown',array('name'=>$vars['name'],'value'=>$time,'options_values'=>$dates)); diff --git a/views/default/js/event_calendar/event_calendar.php b/views/default/js/event_calendar/event_calendar.php index 8c4e735a6..b3ca2cc7b 100644 --- a/views/default/js/event_calendar/event_calendar.php +++ b/views/default/js/event_calendar/event_calendar.php @@ -6,6 +6,64 @@ elgg.event_calendar.init = function () { $('.event-calendar-personal-calendar-toggle').click(elgg.event_calendar.handleDisplayPagePersonalCalendarToggle); $('#event-calendar-region').change(elgg.event_calendar.handleRegionChange); $('#event-calendar-ical-link').click(elgg.event_calendar.handleIcalPopup); + $('.event-calendar-repeating-unselected').each(elgg.event_calendar.setRepeatingClass); + $('.event-calendar-repeating-unselected').live('click',elgg.event_calendar.handleRepeatingSelect); + $('.event-calendar-repeating-selected').live('click',elgg.event_calendar.handleRepeatingUnselect); + $('#event-calendar-edit').submit(elgg.event_calendar.handleEditFormSubmit); + + var all_day_field = $('[name="all_day"][type="checkbox"]'); + if (all_day_field.is(':checked')) { + $('[name="start_time"]').val(0); + $('[name="start_time"]').attr('disabled','disabled'); + $('[name="end_time"]').val(0); + $('[name="end_time"]').attr('disabled','disabled'); + } + all_day_field.change(elgg.event_calendar.handleAllDayField); +} + +elgg.event_calendar.handleAllDayField = function(e) { + var field = $('[name="start_time"]'); + if (field.attr('disabled') == 'disabled') { + field.removeAttr('disabled'); + } else { + field.attr('disabled','disabled'); + } + + field = $('[name="end_time"]'); + if (field.attr('disabled') == 'disabled') { + field.removeAttr('disabled'); + } else { + field.attr('disabled','disabled'); + } +} + +elgg.event_calendar.handleEditFormSubmit = function(e) { + if ($.trim($('[name="title"]').val()) == '') { + alert(elgg.echo('event_calendar:edit_form:error:missing_title')); + e.preventDefault(); + } +} + +elgg.event_calendar.setRepeatingClass = function(e) { + var id = $(this).attr('id'); + if ($("[name='"+id+"-value']").val() == 1) { + $(this).removeClass('event-calendar-repeating-unselected'); + $(this).addClass('event-calendar-repeating-selected'); + } +} + +elgg.event_calendar.handleRepeatingSelect = function(e) { + $(this).removeClass('event-calendar-repeating-unselected'); + $(this).addClass('event-calendar-repeating-selected'); + var id = $(this).attr('id'); + $("[name='"+id+"-value']").val(1); +} + +elgg.event_calendar.handleRepeatingUnselect = function(e) { + $(this).removeClass('event-calendar-repeating-selected'); + $(this).addClass('event-calendar-repeating-unselected'); + var id = $(this).attr('id'); + $("[name='"+id+"-value']").val(0); } elgg.event_calendar.handleRegionChange = function(e) { diff --git a/views/default/plugins/event_calendar/settings.php b/views/default/plugins/event_calendar/settings.php index 93724484c..908818998 100644 --- a/views/default/plugins/event_calendar/settings.php +++ b/views/default/plugins/event_calendar/settings.php @@ -79,6 +79,28 @@ $body .= elgg_view('input/radio',array('name'=>'params[listing_format]','value'= $body .= '<br />'; +$event_calendar_repeated_events = elgg_get_plugin_setting('repeated_events', 'event_calendar'); +if (!$event_calendar_repeated_events) { + $event_calendar_repeated_events = 'no'; +} + +$body .= elgg_echo('event_calendar:settings:repeated_events:title'); +$body .= '<br />'; +$body .= elgg_view('input/radio',array('name'=>'params[repeated_events]','value'=>$event_calendar_repeated_events,'options'=>$yn_options)); + +$body .= '<br />'; + +$event_calendar_reminders = elgg_get_plugin_setting('reminders', 'event_calendar'); +if (!$event_calendar_reminders) { + $event_calendar_reminders = 'no'; +} + +$body .= elgg_echo('event_calendar:settings:reminders:title'); +$body .= '<br />'; +$body .= elgg_view('input/radio',array('name'=>'params[reminders]','value'=>$event_calendar_reminders,'options'=>$yn_options)); + +$body .= '<br />'; + $event_calendar_times = elgg_get_plugin_setting('times', 'event_calendar'); if (!$event_calendar_times) { $event_calendar_times = 'yes'; @@ -90,6 +112,17 @@ $body .= elgg_view('input/radio',array('name'=>'params[times]','value'=>$event_c $body .= '<br />'; +$event_calendar_restricted_times = elgg_get_plugin_setting('restricted_times', 'event_calendar'); +if (!$event_calendar_restricted_times) { + $event_calendar_restricted_times = 'no'; +} + +$body .= elgg_echo('event_calendar:settings:restricted_times:title'); +$body .= '<br />'; +$body .= elgg_view('input/radio',array('name'=>'params[restricted_times]','value'=>$event_calendar_restricted_times,'options'=>$yn_options)); + +$body .= '<br />'; + $event_calendar_time_format = elgg_get_plugin_setting('timeformat', 'event_calendar'); if (!$event_calendar_time_format) { $event_calendar_time_format = '24'; @@ -158,6 +191,17 @@ $body .= elgg_view('input/radio',array('name'=>'params[venue_view]','value'=>$ev $body .= '<br />'; +$event_calendar_fewer_fields = elgg_get_plugin_setting('fewer_fields', 'event_calendar'); +if (!$event_calendar_fewer_fields) { + $event_calendar_fewer_fields = 'no'; +} + +$body .= elgg_echo('event_calendar:settings:fewer_fields:title'); +$body .= '<br />'; +$body .= elgg_view('input/radio',array('name'=>'params[fewer_fields]','value'=>$event_calendar_fewer_fields,'options'=>$yn_options)); + +$body .= '<br />'; + $options = array(elgg_echo('event_calendar:settings:no')=>'no', elgg_echo('event_calendar:settings:site_calendar:admin')=>'admin', elgg_echo('event_calendar:settings:site_calendar:loggedin')=>'loggedin', -- cgit v1.2.3 From 3e190494ee28af8d27d1b37993d10c110ee7d335 Mon Sep 17 00:00:00 2001 From: Kevin Jardine <kevinjardine@yahoo.com> Date: Wed, 4 Apr 2012 12:17:39 +0200 Subject: hide entity_admins bit if the entity_admins plugin is not active --- views/default/forms/event_calendar/edit.php | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/views/default/forms/event_calendar/edit.php b/views/default/forms/event_calendar/edit.php index 713fb9abc..260e8afe0 100644 --- a/views/default/forms/event_calendar/edit.php +++ b/views/default/forms/event_calendar/edit.php @@ -265,10 +265,12 @@ if($event_calendar_hide_access == 'yes') { $body .= elgg_view("input/access",array('name' => 'access_id','value'=>$access)); $body .= '</p>'; } -$body .= elgg_echo('event_calendar:share_ownership:label'); -$body .= '<br />'; -$body .= elgg_echo('event_calendar:share_ownership:description'); -$body .= elgg_view('input/entity_admins_dropdown',array('entity'=>$event)); +if (elgg_plugin_exists('entity_admins')) { + $body .= elgg_echo('event_calendar:share_ownership:label'); + $body .= '<br />'; + $body .= elgg_echo('event_calendar:share_ownership:description'); + $body .= elgg_view('input/entity_admins_dropdown',array('entity'=>$event)); +} $body .= '</div>'; if ($event_calendar_region_display == 'yes' || $event_calendar_type_display == 'yes' || $event_calendar_fewer_fields != 'yes') { -- cgit v1.2.3 From 10219dcdb85679e2d835d5f164ae025b1dedc291 Mon Sep 17 00:00:00 2001 From: Kevin Jardine <kevinjardine@yahoo.com> Date: Wed, 4 Apr 2012 18:55:08 +0200 Subject: filter menu now changes for logged out users --- views/default/event_calendar/filter_menu.php | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/views/default/event_calendar/filter_menu.php b/views/default/event_calendar/filter_menu.php index 369d09e5f..926a29d0d 100644 --- a/views/default/event_calendar/filter_menu.php +++ b/views/default/event_calendar/filter_menu.php @@ -15,19 +15,25 @@ $tabs = array( 'selected' => ($filter_context == 'all'), 'priority' => 200, ), - 'mine' => array( +); + +if (elgg_is_logged_in()) { + $tabs ['mine'] = array( 'text' => elgg_echo('event_calendar:show_mine'), 'href' => "$url_start/mine", 'selected' => ($filter_context == 'mine'), 'priority' => 300, - ), - 'friend' => array( + ); + $tabs['friend'] = array( 'text' => elgg_echo('event_calendar:show_friends'), 'href' => "$url_start/friends", 'selected' => ($filter_context == 'friends'), 'priority' => 400, - ), -); + ); + $text_bit = '<li class="event-calendar-filter-menu-show-only">'.elgg_echo('event_calendar:show_only').'</li>'; +} else { + $text_bit = ''; +} $tab_rendered = array(); @@ -56,8 +62,6 @@ foreach ($tabs as $name => $tab) { //echo elgg_view_menu('filter', array('sort_by' => 'priority', 'class' => 'elgg-menu-hz')); -$text_bit = '<li class="event-calendar-filter-menu-show-only">'.elgg_echo('event_calendar:show_only').'</li>'; - $menu = <<<__MENU <ul class="elgg-menu elgg-menu-filter elgg-menu-hz elgg-menu-filter-default"> {$tab_rendered['open']} -- cgit v1.2.3 From 7c417a57436497c47d0b950bc97af3a0d49712d8 Mon Sep 17 00:00:00 2001 From: Kevin Jardine <kevinjardine@yahoo.com> Date: Wed, 4 Apr 2012 19:24:17 +0200 Subject: fixed js date function call --- views/default/event_calendar/full_calendar_view.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/views/default/event_calendar/full_calendar_view.php b/views/default/event_calendar/full_calendar_view.php index 2c97eb159..6c21c42c8 100644 --- a/views/default/event_calendar/full_calendar_view.php +++ b/views/default/event_calendar/full_calendar_view.php @@ -37,7 +37,7 @@ getISODate = function(d) { var year = d.getFullYear(); var month = d.getMonth()+1; month = month < 10 ? '0' + month : month; - var day = d.getDay()+1; + var day = d.getDate(); day = day < 10 ? '0' + day : day; return year +"-"+month+"-"+day; } -- cgit v1.2.3 From 58126731fe957c604c1989d59d41534f8fbcf04b Mon Sep 17 00:00:00 2001 From: Kevin Jardine <kevinjardine@yahoo.com> 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(-) 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 <kevinjardine@yahoo.com> 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(-) 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 872381995dbcd77b90ac5175ffc7ba51ec75c42a Mon Sep 17 00:00:00 2001 From: Kevin Jardine <kevinjardine@yahoo.com> Date: Thu, 26 Apr 2012 16:21:00 +0200 Subject: Merges in BBB web conference functionality from now defunct sched_conf plugin --- languages/en.php | 10 +++ models/model.php | 79 ++++++++++++++++++++-- views/default/event_calendar/conference_button.php | 32 +++++++++ views/default/forms/event_calendar/edit.php | 9 ++- views/default/object/event_calendar.php | 4 ++ views/default/plugins/event_calendar/settings.php | 26 +++++++ 6 files changed, 152 insertions(+), 8 deletions(-) create mode 100644 views/default/event_calendar/conference_button.php diff --git a/languages/en.php b/languages/en.php index d4cb8ac9e..e23d78924 100644 --- a/languages/en.php +++ b/languages/en.php @@ -318,6 +318,16 @@ takes place at You can visit the event page here: %s ", + + /** + * BBB support + */ + + 'event_calendar:bbb_server_url' => "Big Blue Button server URL (must end with slash)", + 'event_calendar:bbb_security_salt' => "Big Blue Button security salt", + 'event_calendar:bbb_create_error' => "Error: unable to create BBB conference, message was: %s", + 'event_calendar:bbb_settings_error' => "Error: must set conference URL and salt in plugin settings", + 'event_calendar:join_conf_button' => "Join conference", /** * Event calendar river diff --git a/models/model.php b/models/model.php index 0dd72a595..cf00c4b1c 100644 --- a/models/model.php +++ b/models/model.php @@ -152,6 +152,7 @@ function event_calendar_set_event_from_form($event_guid,$group_guid) { $event->send_reminder = get_input('send_reminder'); $event->reminder_number = get_input('reminder_number'); $event->reminder_interval = get_input('reminder_interval'); + $event->web_conference = get_input('web_conference'); $event->real_end_time = event_calendar_get_end_time($event); foreach ($required_fields as $fn) { if (!trim($event->$fn)) { @@ -160,6 +161,9 @@ function event_calendar_set_event_from_form($event_guid,$group_guid) { } } if ($event->save()) { + if (!$event_guid && $event->web_conference) { + event_calendar_create_bbb_conf($event); + } if ($group_guid && (elgg_get_plugin_setting('autogroup', 'event_calendar') == 'yes')) { event_calendar_add_personal_events_from_group($event->guid,$group_guid); } @@ -173,12 +177,12 @@ function event_calendar_set_event_from_form($event_guid,$group_guid) { event_calendar_add_personal_event($event->guid,$user_id); if (elgg_get_plugin_setting('add_users_notify', 'event_calendar') == 'yes') { notify_user($user_id, $CONFIG->site->guid, elgg_echo('event_calendar:add_users_notify:subject'), - sprintf( - elgg_echo('event_calendar:add_users_notify:body'), - $user->name, - $event->title, - $event->getURL() - ) + sprintf( + elgg_echo('event_calendar:add_users_notify:body'), + $user->name, + $event->title, + $event->getURL() + ) ); } } @@ -1598,6 +1602,7 @@ function event_calendar_prepare_edit_form_vars($event = NULL) { 'event-calendar-repeating-saturday-value' => 0, 'event-calendar-repeating-sunday-value' => 0, 'personal_manage' => 'open', + 'web_conference' => NULL, 'long_description' => NULL, 'access_id' => ACCESS_DEFAULT, 'group_guid' => NULL, @@ -2210,3 +2215,65 @@ function event_calendar_queue_reminder($e) { message_queue_set_for_sending($m->guid); } } + +function event_calendar_create_bbb_conf($event) { + $bbb_security_salt = elgg_get_plugin_setting('bbb_security_salt','event_calendar'); + $bbb_server_url = rtrim(elgg_get_plugin_setting('bbb_server_url','event_calendar'), '/') . '/'; + if ($bbb_security_salt) { + $day_in_minutes = 60*24; + $duration = (int)(($event->real_end_time-$event->start_date)/60)+$day_in_minutes; + $title = urlencode($event->title); + $params = "name=$title&meetingID={$event->guid}&duration=$duration"; + $checksum = sha1('create'.$params.$bbb_security_salt); + $params .= "&checksum=$checksum"; + + // create curl resource + $ch = curl_init(); + + // set url + curl_setopt($ch, CURLOPT_URL, $bbb_server_url.'api/create?'.$params); + + //return the transfer as a string + curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); + + // $output contains the output string + $output = curl_exec($ch); + + // close curl resource to free up system resources + curl_close($ch); + + /*error_log("BBB create request:"); + error_log($bbb_server_url.'api/create?'.$params); + + error_log("BBB create response:"); + error_log($output);*/ + + $xml = new SimpleXMLElement($output); + if ($xml->returncode == 'SUCCESS') { + $event->bbb_attendee_password = (string) $xml->attendeePW; + $event->bbb_moderator_password = (string) $xml->moderatorPW; + } else { + register_error(elgg_echo('event_calendar:bbb_create_error',array($xml->message))); + } + } else { + register_error(elgg_echo('event_calendar:bbb_settings_error')); + } +} + +function event_calendar_get_join_bbb_url($event) { + $bbb_security_salt = elgg_get_plugin_setting('bbb_security_salt','event_calendar'); + $bbb_server_url = rtrim(elgg_get_plugin_setting('bbb_server_url','event_calendar'), '/') . '/'; + $user = elgg_get_logged_in_user_entity(); + $full_name = urlencode($user->name); + if ($event->canEdit()) { + $password = urlencode($event->bbb_moderator_password); + } else { + $password = urlencode($event->bbb_attendee_password); + } + $params = "fullName=$full_name&meetingID={$event->guid}&userID={$user->username}&password=$password"; + $checksum = sha1('join'.$params.$bbb_security_salt); + $params .= "&checksum=$checksum"; + $url = $bbb_server_url.'api/join?'.$params; + return $url; +} + diff --git a/views/default/event_calendar/conference_button.php b/views/default/event_calendar/conference_button.php new file mode 100644 index 000000000..f6fedf4f6 --- /dev/null +++ b/views/default/event_calendar/conference_button.php @@ -0,0 +1,32 @@ +<?php +// A non-admin / non-event-creator only sees the button if they have the event on his/her personal calendar +// and it is at most 15 minutes before the conference starts. + +// The button is removed for everyone (even admins) one day after the conference ends. + +$event = $vars['event']; + +if ($event) { + elgg_load_library('elgg:event_calendar'); + $user_guid = elgg_get_logged_in_user_guid(); + $termination_time = $event->real_end_time + 60*60*24; + if ($termination_time < time()) { + $in_time_window = FALSE; + } else if ($event->canEdit()) { + $in_time_window = TRUE; + } else if (event_calendar_has_personal_event($event->guid, $user_guid) && ($event->start_date - 15*60) >= time()) { + $in_time_window = TRUE; + } else { + $in_time_window = FALSE; + } + if ( $in_time_window ) { + $button = elgg_view('output/url', array( + 'href' => event_calendar_get_join_bbb_url($event), + 'text' => elgg_echo('event_calendar:join_conf_button'), + 'class' => 'elgg-button elgg-button-action', + 'target' => '_blank', + )); + + echo '<div class="event-calendar-conf-join-button">'.$button.'</div>'; + } +} diff --git a/views/default/forms/event_calendar/edit.php b/views/default/forms/event_calendar/edit.php index 260e8afe0..79e2a5d0b 100644 --- a/views/default/forms/event_calendar/edit.php +++ b/views/default/forms/event_calendar/edit.php @@ -26,6 +26,7 @@ $event_calendar_more_required = elgg_get_plugin_setting('more_required', 'event_ $event_calendar_personal_manage = elgg_get_plugin_setting('personal_manage', 'event_calendar'); $event_calendar_repeated_events = elgg_get_plugin_setting('repeated_events', 'event_calendar'); $event_calendar_reminders = elgg_get_plugin_setting('reminders', 'event_calendar'); +$event_calendar_bbb_server_url = elgg_get_plugin_setting('bbb_server_url', 'event_calendar'); if ($event_calendar_more_required == 'yes') { $required_fields = array('title','venue','start_date','start_time', @@ -168,9 +169,13 @@ $body .= elgg_view('event_calendar/container',array('container_guid'=>$vars['con $body .= '</p>'; $body .= '<p class="event-calendar-description">'.$prefix['calendar'].elgg_echo('event_calendar:calendar_description').'</p>'; -if(elgg_plugin_exists('sched_conf')) { +if($event_calendar_bbb_server_url) { $body .= '<p>'; - $body .= elgg_view('input/checkbox',array('name'=>'web_conference','value'=>$web_conference,'options_values'=>array('1'))); + if ($fd['web_conference']) { + $body .= elgg_view('input/checkbox',array('name'=>'web_conference','value'=>1,'checked'=>'checked')); + } else { + $body .= elgg_view('input/checkbox',array('name'=>'web_conference','value'=>1)); + } $body .= elgg_echo('event_calendar:web_conference_label'); $body .= '</p>'; } diff --git a/views/default/object/event_calendar.php b/views/default/object/event_calendar.php index 717e2803e..b72c869ea 100644 --- a/views/default/object/event_calendar.php +++ b/views/default/object/event_calendar.php @@ -16,6 +16,10 @@ $full = elgg_extract('full_view', $vars, FALSE); if ($full) { $body = elgg_view('event_calendar/strapline',$vars); + if ($event->web_conference) { + $body .= '<br />'; + $body .= elgg_view('event_calendar/conference_button',array('event'=>$event)); + } $event_items = event_calendar_get_formatted_full_items($event); $body .= '<br />'; diff --git a/views/default/plugins/event_calendar/settings.php b/views/default/plugins/event_calendar/settings.php index 908818998..2a2e043de 100644 --- a/views/default/plugins/event_calendar/settings.php +++ b/views/default/plugins/event_calendar/settings.php @@ -445,4 +445,30 @@ $body .= elgg_echo('event_calendar:ical_auth_file_name:title'); $body .= '<br />'; $body .= elgg_view('input/text',array('name'=>'params[ical_auth_file_name]','value'=>$ical_auth_file_name, 'class'=>'event-calendar-ical-auth-setting')); +$body .= '<br /><br />'; + +$event_calendar_bbb_server_url = elgg_get_plugin_setting('bbb_server_url', 'event_calendar'); + +$body .= elgg_echo('event_calendar:bbb_server_url'); +$body .= '<br />'; +$body .= elgg_view('input/text', array( + 'name' => 'params[bbb_server_url]', + 'value' => $event_calendar_bbb_server_url, + 'class' => 'text_input', +)); + +$body .= '<br /><br />'; + +$event_calendar_bbb_security_salt = elgg_get_plugin_setting('bbb_security_salt', 'event_calendar'); + +$body .= elgg_echo('event_calendar:bbb_security_salt'); +$body .= '<br />'; +$body .= elgg_view('input/text', array( + 'name' => 'params[bbb_security_salt]', + 'value' => $event_calendar_bbb_security_salt, + 'class' => 'text_input', +)); + +$body .= '<br /><br />'; + echo $body; -- cgit v1.2.3 From 8d753b7e693087f4d473383fafe7fbafadf4e5d1 Mon Sep 17 00:00:00 2001 From: Matt Beckett <beck24@gmail.com> Date: Thu, 26 Apr 2012 10:39:50 -0600 Subject: Fixes deprecation notice for form element input name --- views/default/event_calendar/forms/add_to_group.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/views/default/event_calendar/forms/add_to_group.php b/views/default/event_calendar/forms/add_to_group.php index 330f72526..a6675819a 100644 --- a/views/default/event_calendar/forms/add_to_group.php +++ b/views/default/event_calendar/forms/add_to_group.php @@ -59,14 +59,14 @@ if ($add_options || $remove_options) { $event_bit = elgg_view('input/hidden', array("internalname" => "event_id","value" => $event_id)); if ($add_options) { echo "<h4>".elgg_echo('event_calendar:add_to_group:add_group_title')."</h4>"; - $add_pulldown = elgg_view("input/dropdown",array("internalname" => "group_id","options_values" => $add_options)); + $add_pulldown = elgg_view("input/dropdown",array("name" => "group_id","options_values" => $add_options)); $submit_button = "<p>".elgg_view("input/submit",array("value"=>elgg_echo('event_calendar:add_to_group:add_group_button')))."</p>"; echo elgg_view ('input/form',array("body" => $event_bit.$add_pulldown.$submit_button,"action" => $vars['url']."action/event_calendar/add_to_group")); } if ($remove_options) { echo "<h4>".elgg_echo('event_calendar:add_to_group:remove_group_title')."</h4>"; - $remove_pulldown = elgg_view("input/dropdown",array("internalname" => "group_id","options_values" => $remove_options)); + $remove_pulldown = elgg_view("input/dropdown",array("name" => "group_id","options_values" => $remove_options)); $submit_button = "<p>".elgg_view("input/submit",array("value"=>elgg_echo('event_calendar:add_to_group:remove_group_button')))."</p>"; echo elgg_view ('input/form',array("body" => $event_bit.$remove_pulldown.$submit_button,"action" => $vars['url']."action/event_calendar/remove_from_group")); } -- cgit v1.2.3 From f6b8c737fb13df3d611cc0a0f072723aac174b14 Mon Sep 17 00:00:00 2001 From: Matt Beckett <beck24@gmail.com> Date: Thu, 26 Apr 2012 10:44:19 -0600 Subject: Update views/default/event_calendar/forms/add_to_group.php --- views/default/event_calendar/forms/add_to_group.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/views/default/event_calendar/forms/add_to_group.php b/views/default/event_calendar/forms/add_to_group.php index a6675819a..f9640733c 100644 --- a/views/default/event_calendar/forms/add_to_group.php +++ b/views/default/event_calendar/forms/add_to_group.php @@ -56,7 +56,7 @@ if ($remove_group) { if ($add_options || $remove_options) { echo '<div class="contentWrapper" >'; - $event_bit = elgg_view('input/hidden', array("internalname" => "event_id","value" => $event_id)); + $event_bit = elgg_view('input/hidden', array("name" => "event_id","value" => $event_id)); if ($add_options) { echo "<h4>".elgg_echo('event_calendar:add_to_group:add_group_title')."</h4>"; $add_pulldown = elgg_view("input/dropdown",array("name" => "group_id","options_values" => $add_options)); -- cgit v1.2.3 From 7f1d64ed5f005e701af71023798346193a445401 Mon Sep 17 00:00:00 2001 From: Kevin Jardine <kevinjardine@yahoo.com> Date: Wed, 9 May 2012 18:06:56 +0200 Subject: fixed default group edit bug --- models/model.php | 4 ++++ views/default/forms/event_calendar/edit.php | 4 ++-- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/models/model.php b/models/model.php index cf00c4b1c..b3ba4db80 100644 --- a/models/model.php +++ b/models/model.php @@ -1519,11 +1519,14 @@ function event_calendar_get_page_content_edit($page_type,$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); + $event_container = get_entity($event->container_guid); if (elgg_instanceof($event_container, 'group')) { elgg_push_breadcrumb(elgg_echo('event_calendar:group_breadcrumb'), 'event_calendar/group/'.$event->container_guid); + $body_vars['group_guid'] = $event_container->guid; } else { elgg_push_breadcrumb(elgg_echo('event_calendar:show_events_title'),'event_calendar/list'); + $body_vars['group_guid'] = 0; } elgg_push_breadcrumb($event->title,$event->getURL()); elgg_push_breadcrumb(elgg_echo('event_calendar:manage_event_title')); @@ -1547,6 +1550,7 @@ function event_calendar_get_page_content_edit($page_type,$guid) { $content = elgg_echo('event_calendar:no_group'); } } else { + $body_vars['group_guid'] = 0; elgg_push_breadcrumb(elgg_echo('event_calendar:show_events_title'),'event_calendar/list'); elgg_push_breadcrumb(elgg_echo('event_calendar:add_event_title')); diff --git a/views/default/forms/event_calendar/edit.php b/views/default/forms/event_calendar/edit.php index 79e2a5d0b..d1c7967c3 100644 --- a/views/default/forms/event_calendar/edit.php +++ b/views/default/forms/event_calendar/edit.php @@ -140,7 +140,7 @@ $body = '<div class="event-calendar-edit-form">'; $body .= elgg_view('input/hidden',array('name'=>'event_action', 'value'=>$event_action)); $body .= elgg_view('input/hidden',array('name'=>'event_guid', 'value'=>$event_guid)); -$body .= elgg_view('input/hidden',array('name'=>'group_guid', 'value'=>$vars['group_guid'])); +//$body .= elgg_view('input/hidden',array('name'=>'group_guid', 'value'=>$vars['group_guid'])); $body .= '<div class="event-calendar-edit-form-block event-calendar-edit-form-top-block">'; @@ -165,7 +165,7 @@ $body .= '</p>'; $body .= '<p class="event-calendar-description">'.$prefix['event_tags'].elgg_echo('event_calendar:event_tags_description').'</p>'; $body .= '<p><label>'.elgg_echo("event_calendar:calendar_label").'</label>'; -$body .= elgg_view('event_calendar/container',array('container_guid'=>$vars['container_guid'])); +$body .= elgg_view('event_calendar/container',array('container_guid'=>$vars['group_guid'])); $body .= '</p>'; $body .= '<p class="event-calendar-description">'.$prefix['calendar'].elgg_echo('event_calendar:calendar_description').'</p>'; -- cgit v1.2.3 From cea13ac10598078a6489650bf69c6efc45231e03 Mon Sep 17 00:00:00 2001 From: Kevin Jardine <kevinjardine@yahoo.com> Date: Wed, 9 May 2012 19:09:24 +0200 Subject: fixes for group event bugs --- views/default/event_calendar/container.php | 6 +++++- views/default/event_calendar/groupprofile_calendar.php | 4 +--- views/default/forms/event_calendar/edit.php | 13 ++++++++----- 3 files changed, 14 insertions(+), 9 deletions(-) diff --git a/views/default/event_calendar/container.php b/views/default/event_calendar/container.php index fdd7da2c6..cb5c8620c 100644 --- a/views/default/event_calendar/container.php +++ b/views/default/event_calendar/container.php @@ -1,8 +1,12 @@ <?php elgg_load_library('elgg:event_calendar'); $site_calendar = elgg_get_plugin_setting('site_calendar', 'event_calendar'); +$group_calendar = elgg_get_plugin_setting('group_calendar', 'event_calendar'); $admin = elgg_is_admin_logged_in(); -$containers = array(0 => elgg_echo('event_calendar:site_calendar')); +$containers = array(); +if (($site_calendar != 'no') && ($admin || !$site_calendar || ($site_calendar == 'loggedin'))) { + $containers[0] = elgg_echo('event_calendar:site_calendar'); +} $user = elgg_get_logged_in_user_entity(); $groups = $user->getGroups('',0,0); foreach ($groups as $group) { diff --git a/views/default/event_calendar/groupprofile_calendar.php b/views/default/event_calendar/groupprofile_calendar.php index 7ee09104f..c71780be8 100644 --- a/views/default/event_calendar/groupprofile_calendar.php +++ b/views/default/event_calendar/groupprofile_calendar.php @@ -26,10 +26,8 @@ if (event_calendar_activated_for_group($page_owner_entity)) { if (is_array($events) && sizeof($events) > 0) { foreach($events as $event) { - echo elgg_view("object/event_calendar",array('entity' => $event)); + echo elgg_view("object/event_calendar",array('entity' => $event['event'])); } } } - -?> \ No newline at end of file diff --git a/views/default/forms/event_calendar/edit.php b/views/default/forms/event_calendar/edit.php index d1c7967c3..278fdddce 100644 --- a/views/default/forms/event_calendar/edit.php +++ b/views/default/forms/event_calendar/edit.php @@ -140,7 +140,6 @@ $body = '<div class="event-calendar-edit-form">'; $body .= elgg_view('input/hidden',array('name'=>'event_action', 'value'=>$event_action)); $body .= elgg_view('input/hidden',array('name'=>'event_guid', 'value'=>$event_guid)); -//$body .= elgg_view('input/hidden',array('name'=>'group_guid', 'value'=>$vars['group_guid'])); $body .= '<div class="event-calendar-edit-form-block event-calendar-edit-form-top-block">'; @@ -164,10 +163,14 @@ $body .= elgg_view("input/tags",array('name' => 'tags','class'=>'event-calendar- $body .= '</p>'; $body .= '<p class="event-calendar-description">'.$prefix['event_tags'].elgg_echo('event_calendar:event_tags_description').'</p>'; -$body .= '<p><label>'.elgg_echo("event_calendar:calendar_label").'</label>'; -$body .= elgg_view('event_calendar/container',array('container_guid'=>$vars['group_guid'])); -$body .= '</p>'; -$body .= '<p class="event-calendar-description">'.$prefix['calendar'].elgg_echo('event_calendar:calendar_description').'</p>'; +if ($event || !$vars['group_guid']) { + $body .= '<p><label>'.elgg_echo("event_calendar:calendar_label").'</label>'; + $body .= elgg_view('event_calendar/container',array('container_guid'=>$vars['group_guid'])); + $body .= '</p>'; + $body .= '<p class="event-calendar-description">'.$prefix['calendar'].elgg_echo('event_calendar:calendar_description').'</p>'; +} else { + $body .= elgg_view('input/hidden',array('name'=>'group_guid', 'value'=>$vars['group_guid'])); +} if($event_calendar_bbb_server_url) { $body .= '<p>'; -- cgit v1.2.3 From f8b9db301d19813725b9f43020a52587b03baadc Mon Sep 17 00:00:00 2001 From: Kevin Jardine <kevinjardine@yahoo.com> Date: Thu, 10 May 2012 16:56:57 +0200 Subject: removed some outdated (pre Elgg 1.8) code and files --- languages/en.php | 4 +- .../default/event_calendar/forms/add_to_group.php | 8 +- .../event_calendar/forms/delete_confirm.php | 13 -- .../default/event_calendar/forms/manage_event.php | 22 -- .../event_calendar/forms/manage_event_content.php | 254 --------------------- views/default/event_calendar/input/date_local.php | 1 - views/default/event_calendar/input/longtext.php | 25 -- views/default/input/datepicker_popup.php | 31 --- views/default/plugins/event_calendar/settings.php | 4 +- 9 files changed, 6 insertions(+), 356 deletions(-) delete mode 100644 views/default/event_calendar/forms/delete_confirm.php delete mode 100644 views/default/event_calendar/forms/manage_event.php delete mode 100644 views/default/event_calendar/forms/manage_event_content.php delete mode 100644 views/default/event_calendar/input/longtext.php delete mode 100644 views/default/input/datepicker_popup.php diff --git a/languages/en.php b/languages/en.php index e23d78924..5f060748c 100644 --- a/languages/en.php +++ b/languages/en.php @@ -62,8 +62,6 @@ 'event_calendar:view_link' => "View this event", 'event_calendar:edit_link' => "Edit this event", 'event_calendar:delete_link' => "Delete this event", - 'event_calendar:delete_confirm_title' => "Confirm event deletion", - 'event_calendar:delete_confirm_description' => "Are you sure that you want to delete this event (\"%s\")? This action cannot be undone.", 'event_calendar:delete_response' => "This event has been deleted.", 'event_calendar:error_delete' => "This event does not exist or you do not have the right to delete it.", 'event_calendar:delete_cancel_response' => "Event delete cancelled.", @@ -117,7 +115,7 @@ 'event_calendar:region_description' => "Select the region that this event will be held in.", 'event_calendar:settings:type_display:title' => "Add event type to events", 'event_calendar:settings:type_list:title' => "List of event types (one per line)", - 'event_calendar:type_label' => "Type of event", + 'event_calendar:type_label' => "Type", 'event_calendar:type_description' => "Select the type of event.", 'event_calendar:all' => "All", 'event_calendar:region_filter_by_label' => "Filter by region: ", diff --git a/views/default/event_calendar/forms/add_to_group.php b/views/default/event_calendar/forms/add_to_group.php index 330f72526..2c8fdec53 100644 --- a/views/default/event_calendar/forms/add_to_group.php +++ b/views/default/event_calendar/forms/add_to_group.php @@ -56,21 +56,19 @@ if ($remove_group) { if ($add_options || $remove_options) { echo '<div class="contentWrapper" >'; - $event_bit = elgg_view('input/hidden', array("internalname" => "event_id","value" => $event_id)); + $event_bit = elgg_view('input/hidden', array("name" => "event_id","value" => $event_id)); if ($add_options) { echo "<h4>".elgg_echo('event_calendar:add_to_group:add_group_title')."</h4>"; - $add_pulldown = elgg_view("input/dropdown",array("internalname" => "group_id","options_values" => $add_options)); + $add_pulldown = elgg_view("input/dropdown",array("name" => "group_id","options_values" => $add_options)); $submit_button = "<p>".elgg_view("input/submit",array("value"=>elgg_echo('event_calendar:add_to_group:add_group_button')))."</p>"; echo elgg_view ('input/form',array("body" => $event_bit.$add_pulldown.$submit_button,"action" => $vars['url']."action/event_calendar/add_to_group")); } if ($remove_options) { echo "<h4>".elgg_echo('event_calendar:add_to_group:remove_group_title')."</h4>"; - $remove_pulldown = elgg_view("input/dropdown",array("internalname" => "group_id","options_values" => $remove_options)); + $remove_pulldown = elgg_view("input/dropdown",array("name" => "group_id","options_values" => $remove_options)); $submit_button = "<p>".elgg_view("input/submit",array("value"=>elgg_echo('event_calendar:add_to_group:remove_group_button')))."</p>"; echo elgg_view ('input/form',array("body" => $event_bit.$remove_pulldown.$submit_button,"action" => $vars['url']."action/event_calendar/remove_from_group")); } echo '</div>'; } - -?> \ No newline at end of file diff --git a/views/default/event_calendar/forms/delete_confirm.php b/views/default/event_calendar/forms/delete_confirm.php deleted file mode 100644 index 37134e695..000000000 --- a/views/default/event_calendar/forms/delete_confirm.php +++ /dev/null @@ -1,13 +0,0 @@ -<?php - -$body = '<p class="description">'.sprintf(elgg_echo('event_calendar:delete_confirm_description'),$vars['title']).'</p>'; - -$body .= '<form action="'.$vars['url'].'action/event_calendar/manage" method="post" >'; -$body .= elgg_view('input/securitytoken'); -$body .= elgg_view('input/hidden',array('internalname'=>'event_action', 'value'=>'delete_event')); -$body .= elgg_view('input/hidden',array('internalname'=>'event_id', 'value'=>$vars['event_id'])); -$body .= elgg_view('input/submit', array('internalname'=>'submit','value'=>elgg_echo('event_calendar:submit'))); -$body .= '</form>'; - -echo elgg_view('page_elements/contentwrapper', array('body'=>$body)); -?> \ No newline at end of file diff --git a/views/default/event_calendar/forms/manage_event.php b/views/default/event_calendar/forms/manage_event.php deleted file mode 100644 index f9d78e3f4..000000000 --- a/views/default/event_calendar/forms/manage_event.php +++ /dev/null @@ -1,22 +0,0 @@ -<?php - -/** - * Elgg manage event view - * - * @package event_calendar - * @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.html GNU Public License version 2 - * @author Kevin Jardine <kevin@radagast.biz> - * @copyright Radagast Solutions 2008 - * @link http://radagast.biz/ - * - */ - -elgg_extend_view('metatags','event_calendar/metatags'); - -$body = elgg_view('event_calendar/forms/manage_event_content',$vars); - -$body .= elgg_view('input/submit', array('internalname'=>'submit','value'=>elgg_echo('event_calendar:submit'))); -$form = elgg_view('input/form',array('action'=>$vars['url'].'action/event_calendar/manage','body'=>$body)); - -print elgg_view('page_elements/contentwrapper',array('body'=>$form)); -?> \ No newline at end of file diff --git a/views/default/event_calendar/forms/manage_event_content.php b/views/default/event_calendar/forms/manage_event_content.php deleted file mode 100644 index f28788132..000000000 --- a/views/default/event_calendar/forms/manage_event_content.php +++ /dev/null @@ -1,254 +0,0 @@ -<?php -$event = $vars['event']; -$event_id = $vars['event_id']; -$event_calendar_times = get_plugin_setting('times', 'event_calendar'); -$event_calendar_region_display = get_plugin_setting('region_display', 'event_calendar'); -$event_calendar_type_display = get_plugin_setting('type_display', 'event_calendar'); -$event_calendar_spots_display = get_plugin_setting('spots_display', 'event_calendar'); -$event_calendar_add_users = get_plugin_setting('add_users', 'event_calendar'); -$event_calendar_hide_access = get_plugin_setting('hide_access', 'event_calendar'); -$event_calendar_hide_end = get_plugin_setting('hide_end', 'event_calendar'); -$event_calendar_more_required = get_plugin_setting('more_required', 'event_calendar'); - -if ($event_calendar_more_required == 'yes') { - $required_fields = array('title','venue','start_date','start_time', - 'brief_description','region','event_type','fees','contact','organiser', - 'event_tags','spots'); -} else { - $required_fields = array('title','venue','start_date'); -} -$all_fields = array('title','venue','start_time','start_date','end_time','end_date', - 'brief_description','region','event_type','fees','contact','organiser','event_tags', - 'long_description','spots'); -$prefix = array(); -foreach ($all_fields as $fn) { - if (in_array($fn,$required_fields)) { - $prefix[$fn] = elgg_echo('event_calendar:required').' '; - } else { - $prefix[$fn] = elgg_echo('event_calendar:optional').' '; - } -} - -if ($event) { - $title = $event->title; - $brief_description = $event->description; - $venue = $event->venue; - if ($event->form_data) { - // this is a form redisplay, so take the values as submitted - $start_date = $event->start_date; - $end_date = $event->end_date; - } else { - // the values are from the database, - // so convert - $start_date = date("l, F j, Y",$event->start_date); - if ($event->end_date) { - $end_date = date("l, F j, Y",$event->end_date); - } else { - $end_date = ''; - } - } - - if ($event_calendar_region_display) { - $region = $event->region; - if (!$region) { - $region = '-'; - } - } - - if ($event_calendar_spots_display) { - $spots = trim($event->spots); - } - if ($event_calendar_type_display) { - $event_type = $event->event_type; - if (!$event_type) { - $event_type = '-'; - } - } - $fees = $event->fees; - $contact = $event->contact; - $organiser = $event->organiser; - $event_tags = $event->event_tags; - $long_description = $event->long_description; - $access = $event->access_id; - if ($event_calendar_times == 'yes') { - $start_time = $event->start_time; - $end_time = $event->end_time; - } - $event_action = 'manage_event'; -} else { - $event_id = 0; - $title = ''; - $brief_description = ''; - $venue = ''; - $start_date = ''; - $end_date = ''; - $fees = ''; - if ($event_calendar_spots_display) { - $spots = ''; - } - if ($event_calendar_region_display) { - $region = '-'; - } - if ($event_calendar_type_display) { - $event_type = '-'; - } - $contact = ''; - $organiser = ''; - $event_tags = ''; - $long_description = ''; - $access = get_default_access(); - if ($event_calendar_times == 'yes') { - $start_time = ''; - $end_time = ''; - } - $event_action = 'add_event'; -} -$body = ''; - -$body .= elgg_view('input/hidden',array('internalname'=>'event_action', 'value'=>$event_action)); -$body .= elgg_view('input/hidden',array('internalname'=>'event_id', 'value'=>$event_id)); -$body .= elgg_view('input/hidden',array('internalname'=>'group_guid', 'value'=>$vars['group_guid'])); - -$body .= '<p><label>'.elgg_echo("event_calendar:title_label").'<br />'; -$body .= elgg_view("input/text",array('internalname' => 'title','value'=>$title)); -$body .= '</label></p>'; -$body .= '<p class="description">'.$prefix['title'].elgg_echo('event_calendar:title_description').'</p>'; - -$body .= '<p><label>'.elgg_echo("event_calendar:venue_label").'<br />'; -$body .= elgg_view("input/text",array('internalname' => 'venue','value'=>$venue)); -$body .= '</label></p>'; -$body .= '<p class="description">'.$prefix['venue'].elgg_echo('event_calendar:venue_description').'</p>'; - -if ($event_calendar_times != 'no') { - $body .= '<p><label>'.elgg_echo("event_calendar:start_time_label").'</label><br />'; - $body .= elgg_view("input/timepicker",array('internalname' => 'start_time','value'=>$start_time)); - $body .= '</p>'; - $body .= '<p class="description">'.$prefix['start_time'].elgg_echo('event_calendar:start_time_description').'</p>'; -} - -$body .= '<p><label>'.elgg_echo("event_calendar:start_date_label").'<br />'; -$body .= elgg_view("input/datepicker_popup",array('internalname' => 'start_date','value'=>$start_date)); -$body .= '</label></p>'; -$body .= '<p class="description">'.$prefix['start_date'].elgg_echo('event_calendar:start_date_description').'</p>'; - -if ($event_calendar_hide_end != 'yes') { - if ($event_calendar_times != 'no') { - $body .= '<p><label>'.elgg_echo("event_calendar:end_time_label").'</label><br />'; - $body .= elgg_view("input/timepicker",array('internalname' => 'end_time','value'=>$end_time)); - $body .= '</p>'; - $body .= '<p class="description">'.$prefix['end_time'].elgg_echo('event_calendar:end_time_description').'</p>'; - } - - $body .= '<p><label>'.elgg_echo("event_calendar:end_date_label").'<br />'; - $body .= elgg_view("input/datepicker_popup",array('internalname' => 'end_date','value'=>$end_date)); - $body .= '</label></p>'; - $body .= '<p class="description">'.$prefix['end_date'].elgg_echo('event_calendar:end_date_description').'</p>'; -} - -if ($event_calendar_spots_display == 'yes') { - $body .= '<p><label>'.elgg_echo("event_calendar:spots_label").'<br />'; - $body .= elgg_view("input/text",array('internalname' => 'spots','value'=>$spots)); - $body .= '</label></p>'; - $body .= '<p class="description">'.$prefix['spots'].elgg_echo('event_calendar:spots_description').'</p>'; -} - -if ($event_calendar_add_users == 'yes') { - $body .= '<p><label>'.elgg_echo("event_calendar:add_user_label").'<br />'; - $body .= elgg_view("input/adduser",array('internalname' => 'adduser','internalid' => 'do_adduser','width'=> 200, 'minChars'=>2)); - $body .= '</label></p><br /><br />'; - $body .= '<p class="description">'.elgg_echo('event_calendar:add_user_description').'</p>'; -} - -$body .= '<p><label>'.elgg_echo("event_calendar:brief_description_label").'<br />'; -$body .= elgg_view("input/text",array('internalname' => 'brief_description','value'=>$brief_description)); -$body .= '</label></p>'; -$body .= '<p class="description">'.$prefix['brief_description'].elgg_echo('event_calendar:brief_description_description').'</p>'; - -if ($event_calendar_region_display == 'yes') { - $region_list = trim(elgg_get_plugin_setting('region_list', 'event_calendar')); - $region_list_handles = elgg_get_plugin_setting('region_list_handles', 'event_calendar'); - // make sure that we are using Unix line endings - $region_list = str_replace("\r\n","\n",$region_list); - $region_list = str_replace("\r","\n",$region_list); - if ($region_list) { - $options = array(); - $options[] = '-'; - foreach(explode("\n",$region_list) as $region_item) { - $region_item = trim($region_item); - if ($region_list_handles == 'yes') { - $options[$region_item] = elgg_echo('event_calendar:region:'.$region_item); - } else { - $options[$region_item] = $region_item; - } - } - $body .= '<p><label>'.elgg_echo("event_calendar:region_label").'<br />'; - $body .= elgg_view("input/dropdown",array('internalname' => 'region','value'=>$region,'options_values'=>$options)); - $body .= '</label></p>'; - $body .= '<p class="description">'.$prefix['region'].elgg_echo('event_calendar:region_description').'</p>'; - } -} - -if ($event_calendar_type_display == 'yes') { - $type_list = trim(elgg_get_plugin_setting('type_list', 'event_calendar')); - $type_list_handles = elgg_get_plugin_setting('type_list_handles', 'event_calendar'); - // make sure that we are using Unix line endings - $type_list = str_replace("\r\n","\n",$type_list); - $type_list = str_replace("\r","\n",$type_list); - if ($type_list) { - $options = array(); - $options[] = '-'; - foreach(explode("\n",$type_list) as $type_item) { - $type_item = trim($type_item); - if ($type_list_handles == 'yes') { - $options[$type_item] = elgg_echo('event_calendar:type:'.$type_item); - } else { - $options[$type_item] = $type_item; - } - } - $body .= '<p><label>'.elgg_echo("event_calendar:type_label").'<br />'; - $body .= elgg_view("input/dropdown",array('internalname' => 'event_type','value'=>$event_type,'options_values'=>$options)); - $body .= '</label></p>'; - $body .= '<p class="description">'.$prefix['event_type'].elgg_echo('event_calendar:type_description').'</p>'; - } -} - -$body .= '<p><label>'.elgg_echo("event_calendar:fees_label").'<br />'; -$body .= elgg_view("input/text",array('internalname' => 'fees','value'=>$fees)); -$body .= '</label></p>'; -$body .= '<p class="description">'.$prefix['fees'].elgg_echo('event_calendar:fees_description').'</p>'; - -$body .= '<p><label>'.elgg_echo("event_calendar:contact_label").'<br />'; -$body .= elgg_view("input/text",array('internalname' => 'contact','value'=>$contact)); -$body .= '</label></p>'; -$body .= '<p class="description">'.$prefix['contact'].elgg_echo('event_calendar:contact_description').'</p>'; - -$body .= '<p><label>'.elgg_echo("event_calendar:organiser_label").'<br />'; -$body .= elgg_view("input/text",array('internalname' => 'organiser','value'=>$organiser)); -$body .= '</label></p>'; -$body .= '<p class="description">'.$prefix['organiser'].elgg_echo('event_calendar:organiser_description').'</p>'; - -$body .= '<p><label>'.elgg_echo("event_calendar:event_tags_label").'<br />'; -$body .= elgg_view("input/tags",array('internalname' => 'event_tags','value'=>$event_tags)); -$body .= '</label></p>'; -$body .= '<p class="description">'.$prefix['event_tags'].elgg_echo('event_calendar:event_tags_description').'</p>'; - -$body .= '<p><label>'.elgg_echo("event_calendar:long_description_label").'<br />'; -$body .= elgg_view("input/longtext",array('internalname' => 'long_description','value'=>$long_description)); -$body .= '</label></p>'; -$body .= '<p class="description">'.$prefix['long_description'].elgg_echo('event_calendar:long_description_description').'</p>'; - -if($event_calendar_hide_access == 'yes') { - $event_calendar_default_access = get_plugin_setting('default_access', 'event_calendar'); - if($event_calendar_default_access) { - $body .= elgg_view("input/hidden",array('internalname' => 'access','value'=>$event_calendar_default_access)); - } else { - $body .= elgg_view("input/hidden",array('internalname' => 'access','value'=>ACCESS_PRIVATE)); - } -} else { - $body .= '<p><label>'.elgg_echo("access").'<br />'; - $body .= elgg_view("input/access",array('internalname' => 'access','value'=>$access)); - $body .= '</label></p>'; -} - -print $body; -?> \ No newline at end of file diff --git a/views/default/event_calendar/input/date_local.php b/views/default/event_calendar/input/date_local.php index f4cb48d11..a0ce7f4d3 100644 --- a/views/default/event_calendar/input/date_local.php +++ b/views/default/event_calendar/input/date_local.php @@ -44,7 +44,6 @@ if ($timestamp) { $vars['class'] = "{$vars['class']} elgg-input-timestamp"; $vars['id'] = $vars['name']; unset($vars['name']); - unset($vars['internalname']); } // convert timestamps to text for display diff --git a/views/default/event_calendar/input/longtext.php b/views/default/event_calendar/input/longtext.php deleted file mode 100644 index 86b0f3fc4..000000000 --- a/views/default/event_calendar/input/longtext.php +++ /dev/null @@ -1,25 +0,0 @@ -<?php - - /** - * Elgg long text input - * Displays a long text input field - * - * @package Elgg - * @subpackage Core - - * @author Curverider Ltd - - * @link http://elgg.org/ - * - * @uses $vars['value'] The current value, if any - * @uses $vars['js'] Any Javascript to enter into the input tag - * @uses $vars['internalname'] The name of the input field - * - */ - - $class = $vars['class']; - if (!$class) $class = "input-textarea"; - -?> - -<textarea class="<?php echo $class; ?>" name="<?php echo $vars['internalname']; ?>" <?php if (isset($vars['internalid'])) echo "id=\"{$vars['internalid']}\""; ?> <?php if ($vars['disabled']) echo ' disabled="yes" '; ?> <?php echo $vars['js']; ?>><?php echo htmlentities($vars['value'], ENT_QUOTES, 'UTF-8'); ?></textarea> \ No newline at end of file diff --git a/views/default/input/datepicker_popup.php b/views/default/input/datepicker_popup.php deleted file mode 100644 index 0daeb7307..000000000 --- a/views/default/input/datepicker_popup.php +++ /dev/null @@ -1,31 +0,0 @@ -<?php - -/** - * JQuery data picker - * - * @package event_calendar - * @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.html GNU Public License version 2 - * @author Kevin Jardine <kevin@radagast.biz> - * @copyright Radagast Solutions 2008 - * @link http://radagast.biz/ - * - */ - -if ($vars['dateformat']) { - $date_format = $vars['dateformat']; -} else { - $date_format = "yy/mm/dd"; -} -?> - -<script language="javascript"> -$(document).ready(function(){ -$("#<?php echo $vars['internalname']; ?>").datepicker({ - dateFormat: "<?php echo $date_format; ?>", - showOn: "both", - buttonImage: "<?php echo $vars['url']; ?>mod/event_calendar/images/calendar.gif", - buttonImageOnly: true -}) -}); -</script> -<input type="text" size="30" value="<?php echo $vars['value']; ?>" name="<?php echo $vars['internalname']; ?>" id="<?php echo $vars['internalname']; ?>"/> \ No newline at end of file diff --git a/views/default/plugins/event_calendar/settings.php b/views/default/plugins/event_calendar/settings.php index 2a2e043de..e91db9969 100644 --- a/views/default/plugins/event_calendar/settings.php +++ b/views/default/plugins/event_calendar/settings.php @@ -358,7 +358,7 @@ if (!$event_calendar_region_list) { $body .= elgg_echo('event_calendar:settings:region_list:title'); $body .= '<br />'; -$body .= elgg_view('event_calendar/input/longtext',array('name'=>'params[region_list]','value'=>$event_calendar_region_list)); +$body .= elgg_view('input/plaintext',array('name'=>'params[region_list]','value'=>$event_calendar_region_list)); $body .= '<br />'; @@ -391,7 +391,7 @@ if (!$event_calendar_type_list) { $body .= elgg_echo('event_calendar:settings:type_list:title'); $body .= '<br />'; -$body .= elgg_view('event_calendar/input/longtext',array('name'=>'params[type_list]','value'=>$event_calendar_type_list)); +$body .= elgg_view('input/plaintext',array('name'=>'params[type_list]','value'=>$event_calendar_type_list)); $body .= '<br />'; -- cgit v1.2.3 From 0f849b3526483df26b2228a51c1032c8504d64a1 Mon Sep 17 00:00:00 2001 From: Kevin Jardine <kevinjardine@yahoo.com> Date: Thu, 10 May 2012 17:15:21 +0200 Subject: empty event types are not displayed --- models/model.php | 23 +++++++++++++++-------- 1 file changed, 15 insertions(+), 8 deletions(-) diff --git a/models/model.php b/models/model.php index b3ba4db80..287adee54 100644 --- a/models/model.php +++ b/models/model.php @@ -1179,10 +1179,14 @@ function event_calendar_get_region($event) { function event_calendar_get_type($event) { $event_calendar_type_list_handles = elgg_get_plugin_setting('type_list_handles', 'event_calendar'); $type = trim($event->event_type); - if ($event_calendar_type_list_handles == 'yes') { - $type = elgg_echo('event_calendar:type:'.$type); - } - return htmlspecialchars($type); + if ($type) { + if ($event_calendar_type_list_handles == 'yes') { + $type = elgg_echo('event_calendar:type:'.$type); + } + return htmlspecialchars($type); + } else { + return $type; + } } function event_calendar_get_formatted_full_items($event) { @@ -1205,10 +1209,13 @@ function event_calendar_get_formatted_full_items($event) { $event_items[] = $item; } if ($event_calendar_type_display == 'yes') { - $item = new stdClass(); - $item->title = elgg_echo('event_calendar:type_label'); - $item->value = event_calendar_get_type($event); - $event_items[] = $item; + $event_type = event_calendar_get_type($event); + if ($event_type) { + $item = new stdClass(); + $item->title = elgg_echo('event_calendar:type_label'); + $item->value = event_calendar_get_type($event); + $event_items[] = $item; + } } $item = new stdClass(); $item->title = elgg_echo('event_calendar:fees_label'); -- cgit v1.2.3 From db347db3a2cedcfafaffba7fe220f34a33effd87 Mon Sep 17 00:00:00 2001 From: Kevin Jardine <kevinjardine@yahoo.com> Date: Thu, 10 May 2012 17:31:28 +0200 Subject: attempt to revive add_to_group feature --- models/model.php | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/models/model.php b/models/model.php index 287adee54..042d21736 100644 --- a/models/model.php +++ b/models/model.php @@ -970,7 +970,17 @@ $count = false, $region='-', $meta_max = '', $annotation_name = '') if ($limit) { $query .= " limit $offset, $limit"; // Add order and limit } - return get_data($query, "entity_row_to_elggstar"); + $entities = get_data($query, "entity_row_to_elggstar"); + if (elgg_get_plugin_setting('add_to_group_calendar', 'event_calendar') == 'yes') { + if (get_entity($container_guid) instanceOf ElggGroup) { + $entities = event_calendar_get_entities_from_metadata_between_related($meta_start_name, $meta_end_name, + $meta_start_value, $meta_end_value, $entity_type, + $entity_subtype, $owner_guid, $container_guid, + 0, 0, "", 0, + false, false, '-',$entities); + } + } + return $entities; } else { if ($row = get_data_row($query)) return $row->total; -- cgit v1.2.3 From fc04fcffb8a03c166467e8633f8195ef48b29f4a Mon Sep 17 00:00:00 2001 From: Kevin Jardine <kevinjardine@yahoo.com> Date: Thu, 10 May 2012 17:41:56 +0200 Subject: ical export works again for non-repeated-events --- views/ical/event_calendar/show_events.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/views/ical/event_calendar/show_events.php b/views/ical/event_calendar/show_events.php index 19981596f..d357908b9 100644 --- a/views/ical/event_calendar/show_events.php +++ b/views/ical/event_calendar/show_events.php @@ -1,7 +1,7 @@ <?php if ($vars['events']) { foreach ($vars['events'] as $entity) { - echo elgg_view_entity($entity); + echo elgg_view_entity($entity['event']); } //echo elgg_view_entity_list($vars['events'], $vars['count'], $vars['offset'], $vars['limit'], false, false); } -- cgit v1.2.3 From b8c3767f8c790febb35141919936d616d3ebe2d4 Mon Sep 17 00:00:00 2001 From: Kevin Jardine <kevinjardine@yahoo.com> 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 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 .= '<p><label>'.elgg_echo('event_calendar:from_label').'</label>'; } $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 .= '</p><p><label>'.elgg_echo('event_calendar:to_label').'</label>'; + $body .= '</p><p id="event-calendar-to-time-wrapper"><label>'.elgg_echo('event_calendar:to_label').'</label>'; $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 .= '</p>'; + $body .= '</p></span>'; } else { $body .= '<p><label>'.elgg_echo("event_calendar:start_date_label").'<br />'; @@ -35,10 +35,10 @@ if ($event_calendar_times != 'no') { $body .= '<p class="description">'.$prefix['start_date'].elgg_echo('event_calendar:start_date_description').'</p>'; if ($event_calendar_hide_end != 'yes') { - $body .= '<p><label>'.elgg_echo("event_calendar:end_date_label").'<br />'; + $body .= '<p id="event-calendar-to-time-wrapper"><label>'.elgg_echo("event_calendar:end_date_label").'<br />'; $body .= elgg_view("event_calendar/input/date_local",array('timestamp'=>TRUE,'autocomplete'=>'off','name' => 'end_date','value'=>$vars['end_date'])); $body .= '</label></p>'; - $body .= '<p class="description">'.$prefix['end_date'].elgg_echo('event_calendar:end_date_description').'</p>'; + //$body .= '<p class="description">'.$prefix['end_date'].elgg_echo('event_calendar:end_date_description').'</p>'; } } diff --git a/views/default/event_calendar/full_calendar_view.php b/views/default/event_calendar/full_calendar_view.php index 6c21c42c8..5fffff624 100644 --- a/views/default/event_calendar/full_calendar_view.php +++ b/views/default/event_calendar/full_calendar_view.php @@ -14,7 +14,7 @@ handleEventClick = function(event) { handleEventDrop = function(event,dayDelta,minuteDelta,allDay,revertFunc) { - if (!confirm("Are you sure about this change?")) { + if (!confirm("<?php echo elgg_echo('event_calendar:are_you_sure'); ?>")) { revertFunc(); } else { elgg.action('event_calendar/modify_full_calendar', diff --git a/views/default/event_calendar/personal_manage_section.php b/views/default/event_calendar/personal_manage_section.php new file mode 100644 index 000000000..9e03db0ab --- /dev/null +++ b/views/default/event_calendar/personal_manage_section.php @@ -0,0 +1,20 @@ +<?php +$fd = $vars['form_data']; +$event_calendar_personal_manage = elgg_get_plugin_setting('personal_manage', 'event_calendar'); +$body = ''; + +if ($event_calendar_personal_manage == 'by_event') { + $personal_manage_options = array( + elgg_echo('event_calendar:personal_manage:by_event:open') => 'open', + elgg_echo('event_calendar:personal_manage:by_event:closed') => 'closed', + elgg_echo('event_calendar:personal_manage:by_event:private') => 'private', + ); + $body .= '<div class="event-calendar-edit-form-block event-calendar-edit-form-membership-block">'; + $body .= '<h2>'.elgg_echo('event_calendar:personal_manage:label').'</h2>'; + $body .= elgg_view("input/radio",array('name' => 'personal_manage','value'=>$fd['personal_manage'],'options'=>$personal_manage_options)); + //$body .= '<p class="event-calendar-description">'.$prefix['personal_manage'].elgg_echo('event_calendar:personal_manage:description').'</p>'; + $body .= '<br clear="both" />'; + $body .= '</div>'; +} + +echo $body; diff --git a/views/default/event_calendar/reminder_section.php b/views/default/event_calendar/reminder_section.php new file mode 100644 index 000000000..fffa6d065 --- /dev/null +++ b/views/default/event_calendar/reminder_section.php @@ -0,0 +1,28 @@ +<?php +$fd = $vars['form_data']; +$event_calendar_reminders = elgg_get_plugin_setting('reminders', 'event_calendar'); +$body = ''; +if ($event_calendar_reminders == 'yes') { + $body .= '<div class="event-calendar-edit-reminder-wrapper">'; + if ($fd['send_reminder']) { + $body .= elgg_view('input/checkbox',array('name'=>'send_reminder','checked' => 'checked','value'=>1)); + } else { + $body .= elgg_view('input/checkbox',array('name'=>'send_reminder','value'=>1)); + } + $body .= elgg_echo('elgg_calendar:send_reminder_label'). ' '; + $numbers = array(); + for ($i=1;$i<60;$i++) { + $numbers[$i] = $i; + } + $intervals = array( + 1 => elgg_echo('event_calendar:interval:minute'), + 60 => elgg_echo('event_calendar:interval:hour'), + 60*24 => elgg_echo('event_calendar:interval:day'), + ); + + $body .= elgg_view('input/dropdown',array('name'=>'reminder_number','options_values'=>$numbers,'value'=>$fd['reminder_number'])); + $body .= elgg_view('input/dropdown',array('name'=>'reminder_interval','options_values'=>$intervals,'value'=>$fd['reminder_interval'])); + $body .= elgg_echo('elgg_calendar:send_reminder_before'); + $body .= '</div>'; +} +echo $body; diff --git a/views/default/event_calendar/schedule_section.php b/views/default/event_calendar/schedule_section.php new file mode 100644 index 000000000..3a74dc789 --- /dev/null +++ b/views/default/event_calendar/schedule_section.php @@ -0,0 +1,22 @@ +<?php +$event = $vars['event']; +$fd = $vars['form_data']; +$event_calendar_repeated_events = elgg_get_plugin_setting('repeated_events', 'event_calendar'); + +$body = '<div class="event-calendar-edit-date-wrapper">'; +$body .= elgg_view('event_calendar/datetime_edit', + array( + 'start_date' => $fd['start_date'], + 'end_date' => $fd['end_date'], + 'start_time' => $fd['start_time'], + 'end_time' => $fd['end_time'], + 'prefix' => $vars['prefix'], +)); +if ($event_calendar_repeated_events == 'yes') { + $body .= elgg_view('event_calendar/repeat_form_element',$vars); +} + +$body .= elgg_view('event_calendar/reminder_section',$vars); +$body .= '</div>'; + +echo $body; diff --git a/views/default/event_calendar/share_section.php b/views/default/event_calendar/share_section.php new file mode 100644 index 000000000..134f07656 --- /dev/null +++ b/views/default/event_calendar/share_section.php @@ -0,0 +1,26 @@ +<?php +$fd = $vars['form_data']; +$event_calendar_hide_access = elgg_get_plugin_setting('hide_access', 'event_calendar'); +$body = '<div class="event-calendar-edit-form-block event-calendar-edit-form-share-block">'; +$body .= '<h2>'.elgg_echo('event_calendar:permissions:header').'</h2>'; +if($event_calendar_hide_access == 'yes') { + $event_calendar_default_access = elgg_get_plugin_setting('default_access', 'event_calendar'); + if($event_calendar_default_access) { + $body .= elgg_view("input/hidden",array('name' => 'access_id','value'=>$event_calendar_default_access)); + } else { + $body .= elgg_view("input/hidden",array('name' => 'access_id','value'=>ACCESS_DEFAULT)); + } +} else { + $body .= '<p><label>'.elgg_echo('event_calendar:read_access').'</label>'; + $body .= elgg_view("input/access",array('name' => 'access_id','value'=>$fd['access_id'])); + $body .= '</p>'; +} +if (elgg_plugin_exists('entity_admins')) { + $body .= elgg_echo('event_calendar:share_ownership:label'); + $body .= '<br />'; + $body .= elgg_echo('event_calendar:share_ownership:description'); + $body .= elgg_view('input/entity_admins_dropdown',array('entity'=>$vars['event'])); +} +$body .= '</div>'; + +echo $body; diff --git a/views/default/forms/event_calendar/edit.php b/views/default/forms/event_calendar/edit.php index 278fdddce..6ea06a6b4 100644 --- a/views/default/forms/event_calendar/edit.php +++ b/views/default/forms/event_calendar/edit.php @@ -2,17 +2,15 @@ $event = $vars['event']; $fd = $vars['form_data']; -$personal_manage_options = array( - elgg_echo('event_calendar:personal_manage:by_event:open') => 'open', - elgg_echo('event_calendar:personal_manage:by_event:closed') => 'closed', - elgg_echo('event_calendar:personal_manage:by_event:private') => 'private', -); - $schedule_options = array( - elgg_echo('event_calendar:schedule_type:poll')=>'poll', + elgg_echo('event_calendar:all_day_label') => 'all_day', elgg_echo('event_calendar:schedule_type:fixed')=>'fixed', ); +if (elgg_plugin_exists('event_poll')) { + $schedule_options = array_merge(array(elgg_echo('event_calendar:schedule_type:poll')=>'poll'),$schedule_options); +} + $event_calendar_fewer_fields = elgg_get_plugin_setting('fewer_fields', 'event_calendar'); $event_calendar_repeating_events = elgg_get_plugin_setting('repeating_events', 'event_calendar'); @@ -20,12 +18,8 @@ $event_calendar_region_display = elgg_get_plugin_setting('region_display', 'even $event_calendar_type_display = elgg_get_plugin_setting('type_display', 'event_calendar'); $event_calendar_spots_display = elgg_get_plugin_setting('spots_display', 'event_calendar'); //$event_calendar_add_users = elgg_get_plugin_setting('add_users', 'event_calendar'); -$event_calendar_hide_access = elgg_get_plugin_setting('hide_access', 'event_calendar'); $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_repeated_events = elgg_get_plugin_setting('repeated_events', 'event_calendar'); -$event_calendar_reminders = elgg_get_plugin_setting('reminders', 'event_calendar'); $event_calendar_bbb_server_url = elgg_get_plugin_setting('bbb_server_url', 'event_calendar'); if ($event_calendar_more_required == 'yes') { @@ -49,53 +43,6 @@ foreach ($all_fields as $fn) { } if ($event) { - /*$title = $event->title; - $brief_description = $event->description; - $venue = $event->venue; - // this is a form redisplay, so take the values as submitted - $start_date = $event->start_date; - $end_date = $event->end_date; - - if ($event_calendar_region_display) { - $region = $event->region; - if (!$region) { - $region = '-'; - } - } - - if ($event_calendar_spots_display) { - $spots = trim($event->spots); - } - if ($event_calendar_type_display) { - $event_type = $event->event_type; - if (!$event_type) { - $event_type = '-'; - } - } - $fees = $event->fees; - $contact = $event->contact; - $organiser = $event->organiser; - if ($event->tags) { - $event_tags = $event->tags; - } else { - // old way - $event_tags = $event->event_tags; - } - $reminder_number = $event->reminder_number; - $reminder_interval = $event->reminder_interval; - - $long_description = $event->long_description; - $access = $event->access_id; - if ($event_calendar_times != 'no') { - $start_time = $event->start_time; - $end_time = $event->end_time; - } - if ($event_calendar_personal_manage == 'by_event') { - $personal_manage = $event->personal_manage; - if (!$personal_manage) { - $personal_manage = 'open'; - } - }*/ $event_action = 'manage_event'; $event_guid = $event->guid; } else { @@ -106,8 +53,7 @@ if ($event) { $title = $fd['title']; $brief_description = $fd['description']; $venue = $fd['venue']; -$start_date = $fd['start_date']; -$end_date = $fd['end_date']; + $fees = $fd['fees']; if ($event_calendar_spots_display) { $spots = $fd['spots']; @@ -122,19 +68,16 @@ $contact = $fd['contact']; $organiser = $fd['organiser']; $event_tags = $fd['tags']; $all_day = $fd['all_day']; -$send_reminder = $fd['send_reminder']; -$reminder_number = $fd['reminder_number']; -$reminder_interval = $fd['reminder_interval']; $schedule_type = $fd['schedule_type']; $long_description = $fd['long_description']; -$access = $fd['access_id']; -if ($event_calendar_times != 'no') { + +/*if ($event_calendar_times != 'no') { $start_time = $fd['start_time']; $end_time = $fd['end_time']; } if ($event_calendar_personal_manage == 'by_event') { $personal_manage = $fd['personal_manage']; -} +}*/ $body = '<div class="event-calendar-edit-form">'; @@ -187,15 +130,11 @@ $body .= '</div>'; $body .= '<div class="event-calendar-edit-form-block event-calendar-edit-form-schedule-block">'; $body .= '<h2>'.elgg_echo('event_calendar:schedule:header').'</h2>'; -if ($all_day) { - $body .= elgg_view('input/checkbox',array('name'=>'all_day','value'=>1,'checked'=>'checked')); -} else { - $body .= elgg_view('input/checkbox',array('name'=>'all_day','value'=>1)); -} -$body .= elgg_echo('event_calendar:all_day_label'); -if(elgg_plugin_exists('event_poll')) { - $body .= elgg_view('input/radio',array('name'=>'schedule_type','value'=>$schedule_type,'options'=>$schedule_options)); -} +$body .= elgg_view('input/radio',array('id'=>'event-calendar-edit-schedule-type','name'=>'schedule_type','value'=>$schedule_type,'options'=>$schedule_options)); + +$vars['prefix'] = $prefix; + +/* $body .= '<div class="event-calendar-edit-date-wrapper">'; $body .= elgg_view('event_calendar/datetime_edit', array( @@ -230,7 +169,9 @@ if ($event_calendar_reminders == 'yes') { $body .= elgg_view('input/dropdown',array('name'=>'reminder_interval','options_values'=>$intervals,'value'=>$reminder_interval)); $body .= elgg_echo('elgg_calendar:send_reminder_before'); $body .= '</div>'; -} +}*/ + +$body .= elgg_view('event_calendar/schedule_section',$vars); if ($event_calendar_spots_display == 'yes') { $body .= '<p><label>'.elgg_echo("event_calendar:spots_label").'<br />'; @@ -238,7 +179,8 @@ if ($event_calendar_spots_display == 'yes') { $body .= '</label></p>'; $body .= '<p class="event-calendar-description">'.$prefix['spots'].elgg_echo('event_calendar:spots_description').'</p>'; } -$body .= '</div>'; + +$body .= '<div class="event-calendar-edit-bottom"></div>'; $body .= '</div>'; // the following feature has been superceded by the manage subscribers feature @@ -250,23 +192,27 @@ $body .= '</div>'; $body .= '<p class="description">'.elgg_echo('event_calendar:add_user_description').'</p>'; }*/ -if ($event_calendar_personal_manage == 'by_event') { +$body .= elgg_view('event_calendar/personal_manage_section',$vars); + +/*if ($event_calendar_personal_manage == 'by_event') { $body .= '<div class="event-calendar-edit-form-block event-calendar-edit-form-membership-block">'; $body .= '<h2>'.elgg_echo('event_calendar:personal_manage:label').'</h2>'; $body .= elgg_view("input/radio",array('name' => 'personal_manage','value'=>$personal_manage,'options'=>$personal_manage_options)); //$body .= '<p class="event-calendar-description">'.$prefix['personal_manage'].elgg_echo('event_calendar:personal_manage:description').'</p>'; $body .= '<br clear="both" />'; $body .= '</div>'; -} +}*/ -$body .= '<div class="event-calendar-edit-form-block event-calendar-edit-form-share-block">'; +$body .= elgg_view('event_calendar/share_section',$vars); + +/*$body .= '<div class="event-calendar-edit-form-block event-calendar-edit-form-share-block">'; $body .= '<h2>'.elgg_echo('event_calendar:permissions:header').'</h2>'; if($event_calendar_hide_access == 'yes') { $event_calendar_default_access = elgg_get_plugin_setting('default_access', 'event_calendar'); if($event_calendar_default_access) { $body .= elgg_view("input/hidden",array('name' => 'access_id','value'=>$event_calendar_default_access)); } else { - $body .= elgg_view("input/hidden",array('name' => 'access_id','value'=>ACCESS_PRIVATE)); + $body .= elgg_view("input/hidden",array('name' => 'access_id','value'=>ACCESS_DEFAULT)); } } else { $body .= '<p><label>'.elgg_echo('event_calendar:read_access').'</label>'; @@ -279,7 +225,7 @@ if (elgg_plugin_exists('entity_admins')) { $body .= elgg_echo('event_calendar:share_ownership:description'); $body .= elgg_view('input/entity_admins_dropdown',array('entity'=>$event)); } -$body .= '</div>'; +$body .= '</div>';*/ if ($event_calendar_region_display == 'yes' || $event_calendar_type_display == 'yes' || $event_calendar_fewer_fields != 'yes') { $body .= '<div class="event-calendar-edit-form-block event-calendar-edit-form-other-block">'; diff --git a/views/default/input/datepicker_inline.php b/views/default/input/datepicker_inline.php index 1d0a0689d..3fd9c37af 100644 --- a/views/default/input/datepicker_inline.php +++ b/views/default/input/datepicker_inline.php @@ -65,7 +65,6 @@ $("#<?php echo $vars['name']; ?>").datepicker({ document.location.href = "<?php echo $link_bit; ?>".replace('%s', date.substring(0,10)); }, dateFormat: "yy-mm-dd", - <?php echo $vars['range_bit']; ?> defaultDate: "<?php echo $vars['start_date'] .' - '.$vars['end_date']; ?>", beforeShowDay: highlightWeek }); @@ -76,7 +75,7 @@ if ("<?php echo $vars['mode'] ?>" == "month") { end_date += 1; } $("#<?php echo $vars['name']; ?>").datepicker("setDate", start_date, end_date); -var done_loading = true; +done_loading = true; }); </script> diff --git a/views/default/input/timepicker.php b/views/default/input/timepicker.php index ccbb88778..2cc95ced7 100644 --- a/views/default/input/timepicker.php +++ b/views/default/input/timepicker.php @@ -1,5 +1,4 @@ <?php -$event_calendar_restricted_times = elgg_get_plugin_setting('restricted_times', 'event_calendar'); $time_format = elgg_get_plugin_setting('timeformat', 'event_calendar'); if (!$time_format) { $time_format = '24'; @@ -9,75 +8,44 @@ $value = $vars['value']; if (is_numeric($value)) { $hour = floor($value/60); $minute = ($value -60*$hour); - $time = $hour*60+$minute; } else { - $time = '-'; + $hour = 0; + $minute = 0; } -$dates = array(); -$dates['-'] = '-'; +$hours = array(); +$minutes = array(); if ($time_format == '12') { - if ($event_calendar_restricted_times == 'yes') { - $h1 = 6; - $h2 = 9; + $meridians = array('am'=>'am','pm'=>'pm'); + if ($hour == 0) { + $hour = 12; + $meridian = 'am'; + } else if ($hour == 12) { + $meridian = 'pm'; + } else if ($hour < 12) { + $meridian = 'am'; } else { - $h1 = 0; - $h2 = 11; + $hour -= 12; + $meridian = 'pm'; } - for($h=$h1;$h<=12;$h++) { - $ht = sprintf("%02d",$h); - for($m=0;$m<60;$m=$m+15) { - $mt = sprintf("%02d",$m); - $t = $h*60+$m; - if ($h < 12) { - $dates[$t] = "$ht:$mt am"; - } else { - $dates[$t] = "$ht:$mt pm"; - } - } - } - for($h=1;$h<$h2;$h++) { - $ht = sprintf("%02d",$h); - for($m=0;$m<60;$m=$m+15) { - $mt = sprintf("%02d",$m); - $t = 12*60+$h*60+$m; - $dates[$t] = "$ht:$mt pm"; - } - } - if ($event_calendar_restricted_times == 'yes') { - $m = 0; - $h = 9; - $ht = sprintf("%02d",$h); - $mt = sprintf("%02d",$m); - $t = 12*60+$h*60+$m; - $dates[$t] = "$ht:$mt pm"; + for($h=1;$h<=12;$h++) { + $hours[$h] = $h; } } else { - if ($event_calendar_restricted_times == 'yes') { - $h1 = 6; - $h2 = 21; - } else { - $h1 = 0; - $h2 = 24; - } - for($h=$h1;$h<$h2;$h++) { - $ht = sprintf("%02d",$h); - for($m=0;$m<60;$m=$m+15) { - $mt = sprintf("%02d",$m); - $t = $h*60+$m; - $dates[$t] = "$ht:$mt"; - } - } - if ($event_calendar_restricted_times == 'yes') { - $m = 0; - $h = 21; - $ht = sprintf("%02d",$h); - $mt = sprintf("%02d",$m); - $t = 12*60+$h*60+$m; - $dates[$t] = "$ht:$mt pm"; + for($h=0;$h<=23;$h++) { + $hours[$h] = $h; } -} +} -echo elgg_view('input/dropdown',array('name'=>$vars['name'],'value'=>$time,'options_values'=>$dates)); +for($m=0;$m<60;$m=$m+5) { + $mt = sprintf("%02d",$m); + $minutes[$m] = $mt; +} +echo elgg_view('input/dropdown',array('name'=>$vars['name'].'_hour','value'=>$hour,'options_values'=>$hours)); +echo " <b>:</b> "; +echo elgg_view('input/dropdown',array('name'=>$vars['name'].'_minute','value'=>$minute,'options_values'=>$minutes)); +if ($time_format == '12') { + echo elgg_view('input/dropdown',array('name'=>$vars['name'].'_meridian','value'=>$meridian,'options_values'=>$meridians)); +} diff --git a/views/default/js/event_calendar/event_calendar.php b/views/default/js/event_calendar/event_calendar.php index b3ca2cc7b..244846f96 100644 --- a/views/default/js/event_calendar/event_calendar.php +++ b/views/default/js/event_calendar/event_calendar.php @@ -10,6 +10,8 @@ elgg.event_calendar.init = function () { $('.event-calendar-repeating-unselected').live('click',elgg.event_calendar.handleRepeatingSelect); $('.event-calendar-repeating-selected').live('click',elgg.event_calendar.handleRepeatingUnselect); $('#event-calendar-edit').submit(elgg.event_calendar.handleEditFormSubmit); + $('#event-calendar-edit-schedule-type').click(elgg.event_calendar.handleScheduleType); + elgg.event_calendar.handleScheduleType(); var all_day_field = $('[name="all_day"][type="checkbox"]'); if (all_day_field.is(':checked')) { @@ -21,6 +23,28 @@ elgg.event_calendar.init = function () { all_day_field.change(elgg.event_calendar.handleAllDayField); } +elgg.event_calendar.handleScheduleType = function(e) { + var st = $('#event-calendar-edit-schedule-type:checked').val(); + if (st == 'poll') { + $(".event-calendar-edit-date-wrapper").hide(); + $(".event-calendar-edit-reminder-wrapper").hide(); + $(".event-calendar-edit-form-membership-block").hide(); + $(".event-calendar-edit-form-share-block").hide(); + } else { + $(".event-calendar-edit-date-wrapper").show(); + $(".event-calendar-edit-reminder-wrapper").show(); + $(".event-calendar-edit-form-membership-block").show(); + $(".event-calendar-edit-form-share-block").show(); + if (st == 'all_day') { + $("[name='start_time']").hide(); + $("#event-calendar-to-time-wrapper").hide(); + } else { + $("[name='start_time']").show(); + $("#event-calendar-to-time-wrapper").show(); + } + } +} + elgg.event_calendar.handleAllDayField = function(e) { var field = $('[name="start_time"]'); if (field.attr('disabled') == 'disabled') { -- cgit v1.2.3 From f22f6fd7a985b773bce95accf5172cdc2524575c Mon Sep 17 00:00:00 2001 From: Kevin Jardine <kevinjardine@yahoo.com> Date: Tue, 29 May 2012 12:35:20 +0200 Subject: added lightbox support for full calendar events --- models/model.php | 20 ++++++++++++-------- start.php | 3 +++ views/default/event_calendar/full_calendar_view.php | 5 ++++- 3 files changed, 19 insertions(+), 9 deletions(-) diff --git a/models/model.php b/models/model.php index 7de514802..b53471a44 100644 --- a/models/model.php +++ b/models/model.php @@ -1855,7 +1855,7 @@ function event_calendar_generate_listing_params($page_type,$container_guid,$orig return $params; } -function event_calendar_get_page_content_view($event_guid) { +function event_calendar_get_page_content_view($event_guid,$light_box = FALSE) { // add personal calendar button and links elgg_push_context('event_calendar:view'); $event = get_entity($event_guid); @@ -1885,12 +1885,16 @@ function event_calendar_get_page_content_view($event_guid) { $content .= elgg_view_comments($event); } } - - $params = array('title' => $title, 'content' => $content,'filter' => ''); - - $body = elgg_view_layout("content", $params); - - return elgg_view_page($title,$body); + + if ($light_box) { + return '<div class="event-calendar-lightbox">'.elgg_view_title($title).$content.'</div>'; + } else { + $params = array('title' => $title, 'content' => $content,'filter' => ''); + + $body = elgg_view_layout("content", $params); + + return elgg_view_page($title,$body); + } } function event_calendar_get_page_content_display_users($event_guid) { @@ -2135,7 +2139,7 @@ function event_calendar_get_page_content_fullcalendar_events($start_date,$end_da 'id' => $event->guid, 'guid' => $event->guid, 'title' => $event->title, - 'url' => $event->getURL(), + 'url' => elgg_get_site_url().'event_calendar/view_light_box/'.$event->guid, 'start' => date('c',$ed['start_time']), 'end' => date('c',$ed['end_time']), ); diff --git a/start.php b/start.php index c9f95c8d6..9d3d45e4d 100644 --- a/start.php +++ b/start.php @@ -184,6 +184,9 @@ function event_calendar_page_handler($page) { case 'view': echo event_calendar_get_page_content_view($page[1]); break; + case 'view_light_box': + echo event_calendar_get_page_content_view($page[1],TRUE); + break; case 'display_users': echo event_calendar_get_page_content_display_users($page[1]); break; diff --git a/views/default/event_calendar/full_calendar_view.php b/views/default/event_calendar/full_calendar_view.php index 5fffff624..d7b6d97a2 100644 --- a/views/default/event_calendar/full_calendar_view.php +++ b/views/default/event_calendar/full_calendar_view.php @@ -1,5 +1,7 @@ <?php elgg_load_js('elgg.full_calendar'); +elgg_load_js('lightbox'); +elgg_load_css('lightbox'); // TODO: is there an easy way to avoid embedding JS? ?> @@ -7,7 +9,8 @@ elgg_load_js('elgg.full_calendar'); handleEventClick = function(event) { if (event.url) { - window.location.href = event.url; + //window.location.href = event.url; + $.fancybox({'href':event.url}); return false; } }; -- cgit v1.2.3 From 321fbfdb059e39b921e13ba034855b019981fa44 Mon Sep 17 00:00:00 2001 From: Kevin Jardine <kevinjardine@yahoo.com> Date: Tue, 29 May 2012 18:09:16 +0200 Subject: added click on calendar to preselect new event date --- models/model.php | 17 ++++++---- start.php | 2 +- views/default/event_calendar/css.php | 4 +++ .../default/event_calendar/full_calendar_view.php | 39 ++++++++++++++++++++++ 4 files changed, 55 insertions(+), 7 deletions(-) diff --git a/models/model.php b/models/model.php index b53471a44..d25c8dca3 100644 --- a/models/model.php +++ b/models/model.php @@ -1533,7 +1533,7 @@ function event_calendar_get_page_content_list($page_type,$container_guid,$start_ return elgg_view_page($title,$body); } -function event_calendar_get_page_content_edit($page_type,$guid) { +function event_calendar_get_page_content_edit($page_type,$guid,$start_date='') { elgg_load_js('elgg.event_calendar'); $vars = array(); $vars['id'] = 'event-calendar-edit'; @@ -1575,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(NULL,$page_type); + $body_vars['form_data'] = event_calendar_prepare_edit_form_vars(NULL,$page_type,$start_date); $content = elgg_view_form('event_calendar/edit', $vars, $body_vars); } else { $content = elgg_echo('event_calendar:no_group'); @@ -1585,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(NULL,$page_type); + $body_vars['form_data'] = event_calendar_prepare_edit_form_vars(NULL,$page_type,$start_date); $content = elgg_view_form('event_calendar/edit', $vars, $body_vars); } @@ -1604,20 +1604,25 @@ function event_calendar_get_page_content_edit($page_type,$guid) { * @param ElggObject $event * @return array */ -function event_calendar_prepare_edit_form_vars($event = NULL, $page_type = '') { +function event_calendar_prepare_edit_form_vars($event = NULL, $page_type = '', $start_date = '') { // input names => defaults $now = time(); $iso_date = date('Y-m-d',$now); $now_midnight = strtotime($iso_date); + if ($start_date) { + $start_date = strtotime($start_date); + } else { + $start_date = $now+60*60; + } $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' => $now+60*60, - 'end_date' => $now+2*60*60, + 'start_date' => $start_date, + 'end_date' => $start_date+60*60, 'start_time' => $start_time, 'end_time' => $start_time + 60, 'spots' => NULL, diff --git a/start.php b/start.php index 9d3d45e4d..8c8bba19b 100644 --- a/start.php +++ b/start.php @@ -202,7 +202,7 @@ function event_calendar_page_handler($page) { gatekeeper(); $group_guid = 0; } - echo event_calendar_get_page_content_edit($page_type,$group_guid); + echo event_calendar_get_page_content_edit($page_type,$group_guid,$page[2]); break; case 'edit': gatekeeper(); diff --git a/views/default/event_calendar/css.php b/views/default/event_calendar/css.php index 9461a7fe9..b1e17e4df 100644 --- a/views/default/event_calendar/css.php +++ b/views/default/event_calendar/css.php @@ -275,3 +275,7 @@ li.event-calendar-filter-menu-show-only { clear: both; margin-bottom: 5px; } + +.event-calendar-date-selected { + background-color: #DDDDFF; +} diff --git a/views/default/event_calendar/full_calendar_view.php b/views/default/event_calendar/full_calendar_view.php index d7b6d97a2..d86a3ac27 100644 --- a/views/default/event_calendar/full_calendar_view.php +++ b/views/default/event_calendar/full_calendar_view.php @@ -15,6 +15,28 @@ handleEventClick = function(event) { } }; +handleDayClick = function(date,allDay,jsEvent,view) { + var iso = getISODate(date); + var link = $('.elgg-menu-item-event-calendar-0add').find('a').attr('href'); + var ss = link.split('/'); + var link = $('.elgg-menu-item-event-calendar-0add').find('a').attr('href'); + var ss = link.split('/'); + var last_ss = ss[ss.length-1]; + var group_guid; + if (last_ss == 'add') { + group_guid = 0; + } else if (last_ss.split('-').length == 3) { + group_guid = ss[ss.length-2]; + } else { + group_guid = last_ss; + } + var url = elgg.get_site_url(); + $('.elgg-menu-item-event-calendar-0add').find('a').attr('href',url+'event_calendar/add/'+group_guid+'/'+iso); + $('.elgg-menu-item-event-calendar-1schedule').find('a').attr('href',url+'event_calendar/schedule/'+group_guid+'/'+iso); + $('.fc-widget-content').removeClass('event-calendar-date-selected'); + $(this).addClass('event-calendar-date-selected'); +} + handleEventDrop = function(event,dayDelta,minuteDelta,allDay,revertFunc) { if (!confirm("<?php echo elgg_echo('event_calendar:are_you_sure'); ?>")) { @@ -54,6 +76,22 @@ handleGetEvents = function(start, end, callback) { callback(events); } }); + // reset date links and classes + $('.fc-widget-content').removeClass('event-calendar-date-selected'); + var link = $('.elgg-menu-item-event-calendar-0add').find('a').attr('href'); + var ss = link.split('/'); + var last_ss = ss[ss.length-1]; + var group_guid; + if (last_ss == 'add') { + group_guid = 0; + } else if (last_ss.split('-').length == 3) { + group_guid = ss[ss.length-2]; + } else { + group_guid = last_ss; + } + var url = elgg.get_site_url(); + $('.elgg-menu-item-event-calendar-0add').find('a').attr('href',url+'event_calendar/add/'+group_guid); + $('.elgg-menu-item-event-calendar-1schedule').find('a').attr('href',url+'event_calendar/schedule/'+group_guid); } $(document).ready(function() { @@ -69,6 +107,7 @@ $(document).ready(function() { slotMinutes: 15, eventDrop: handleEventDrop, eventClick: handleEventClick, + dayClick: handleDayClick, events: handleGetEvents }); }); -- cgit v1.2.3 From 425f301ef3ed02796442c4cff0d33eff25f98edf Mon Sep 17 00:00:00 2001 From: Kevin Jardine <kevinjardine@yahoo.com> Date: Mon, 4 Jun 2012 14:22:57 +0200 Subject: fixed schedule link and all day form behaviour --- start.php | 2 +- views/default/event_calendar/datetime_edit.php | 4 ++++ views/default/js/event_calendar/event_calendar.php | 16 ++++++++-------- 3 files changed, 13 insertions(+), 9 deletions(-) diff --git a/start.php b/start.php index 8c8bba19b..6d346b743 100644 --- a/start.php +++ b/start.php @@ -298,7 +298,7 @@ function event_calendar_entity_menu_setup($hook, $type, $return, $params) { 'name' => 'schedule', 'text' => elgg_echo('event_poll:schedule_button'), 'title' => elgg_echo('event_poll:schedule_button'), - 'href' => 'event_poll/schedule/'.$entity->guid, + 'href' => 'event_poll/vote/'.$entity->guid, 'priority' => 150, ); $return[] = ElggMenuItem::factory($options); diff --git a/views/default/event_calendar/datetime_edit.php b/views/default/event_calendar/datetime_edit.php index ceceeb20e..64af30f53 100644 --- a/views/default/event_calendar/datetime_edit.php +++ b/views/default/event_calendar/datetime_edit.php @@ -14,7 +14,9 @@ if ($event_calendar_times != 'no') { 'class'=>'event-calendar-compressed-date', 'name' => 'start_date', 'value'=>$vars['start_date'])); + $body .= '<span id="event-calendar-start-time-wrapper">'; $body .= elgg_view("input/timepicker",array('name' => 'start_time','value'=>$vars['start_time'])); + $body .= '</span>'; if ($event_calendar_hide_end != 'yes') { $body .= '</p><p id="event-calendar-to-time-wrapper"><label>'.elgg_echo('event_calendar:to_label').'</label>'; $body .= elgg_view("event_calendar/input/date_local",array( @@ -24,7 +26,9 @@ if ($event_calendar_times != 'no') { 'name' => 'end_date', 'value'=>$vars['end_date'], )); + $body .= '<span id="event-calendar-end-time-wrapper">'; $body .= elgg_view("input/timepicker",array('name' => 'end_time','value'=>$vars['end_time'])); + $body .= '</span>'; } $body .= '</p></span>'; } else { diff --git a/views/default/js/event_calendar/event_calendar.php b/views/default/js/event_calendar/event_calendar.php index 244846f96..65c4d2952 100644 --- a/views/default/js/event_calendar/event_calendar.php +++ b/views/default/js/event_calendar/event_calendar.php @@ -15,10 +15,10 @@ elgg.event_calendar.init = function () { var all_day_field = $('[name="all_day"][type="checkbox"]'); if (all_day_field.is(':checked')) { - $('[name="start_time"]').val(0); - $('[name="start_time"]').attr('disabled','disabled'); - $('[name="end_time"]').val(0); - $('[name="end_time"]').attr('disabled','disabled'); + //$('[name="start_time"]').val(0); + $('#event-calendar-start-time-wrapper').attr('disabled','disabled'); + //$('[name="end_time"]').val(0); + $('#event-calendar-end-time-wrapper').attr('disabled','disabled'); } all_day_field.change(elgg.event_calendar.handleAllDayField); } @@ -36,11 +36,11 @@ elgg.event_calendar.handleScheduleType = function(e) { $(".event-calendar-edit-form-membership-block").show(); $(".event-calendar-edit-form-share-block").show(); if (st == 'all_day') { - $("[name='start_time']").hide(); - $("#event-calendar-to-time-wrapper").hide(); + $("#event-calendar-start-time-wrapper").hide(); + $("#event-calendar-end-time-wrapper").hide(); } else { - $("[name='start_time']").show(); - $("#event-calendar-to-time-wrapper").show(); + $("#event-calendar-start-time-wrapper").show(); + $("#event-calendar-end-time-wrapper").show(); } } } -- cgit v1.2.3 From e75bc90b93afb36d75dd67695eb0f3b9599d7052 Mon Sep 17 00:00:00 2001 From: Kevin Jardine <kevinjardine@yahoo.com> Date: Fri, 15 Jun 2012 17:55:13 +0200 Subject: added missing library loads --- start.php | 2 ++ 1 file changed, 2 insertions(+) diff --git a/start.php b/start.php index 6d346b743..ebd88d541 100644 --- a/start.php +++ b/start.php @@ -386,6 +386,7 @@ function event_calendar_entity_menu_prepare($hook, $type, $return, $params) { } function event_calendar_handle_join($event, $object_type, $object) { + elgg_load_library('elgg:event_calendar'); $group = $object['group']; $user = $object['user']; $user_guid = $user->getGUID(); @@ -397,6 +398,7 @@ function event_calendar_handle_join($event, $object_type, $object) { } function event_calendar_handle_leave($event, $object_type, $object) { + elgg_load_library('elgg:event_calendar'); $group = $object['group']; $user = $object['user']; $user_guid = $user->getGUID(); -- cgit v1.2.3 From d760deb0117b3a1b1adec1b38c73ebe412d02e1e Mon Sep 17 00:00:00 2001 From: Kevin Jardine <kevinjardine@yahoo.com> Date: Thu, 21 Jun 2012 15:55:59 +0200 Subject: small tweaks for UF --- languages/en.php | 3 ++- models/model.php | 6 +++++- views/default/event_calendar/full_calendar_view.php | 21 +++++++++++++++++---- 3 files changed, 24 insertions(+), 6 deletions(-) diff --git a/languages/en.php b/languages/en.php index 782cd7a72..3d8c94e3f 100644 --- a/languages/en.php +++ b/languages/en.php @@ -50,7 +50,7 @@ 'event_calendar:month_label' => "Month", 'event_calendar:group' => "Group calendar", 'event_calendar:new' => "Add event", - 'event_calendar:submit' => "Submit", + 'event_calendar:submit' => "Save and Continue", 'event_calendar:cancel' => "Cancel", 'event_calendar:widget_title' => "Event calendar", 'event_calendar:widget:description' => "Displays your events.", @@ -310,6 +310,7 @@ You can manage calendar requests for this event here: 'event_calendar:settings:reminders:title' => "Allow sending reminders", 'event_calendar:reminder:subject' => "Reminder for event: %s", 'event_calendar:poll_suffix' => "(poll)", + 'event_calendar:cannot_drag_polls' => "Cannot change event polls.", 'event_calendar:reminder:body' => "The event %s diff --git a/models/model.php b/models/model.php index d25c8dca3..aea6bca2f 100644 --- a/models/model.php +++ b/models/model.php @@ -2144,7 +2144,6 @@ function event_calendar_get_page_content_fullcalendar_events($start_date,$end_da 'id' => $event->guid, 'guid' => $event->guid, 'title' => $event->title, - 'url' => elgg_get_site_url().'event_calendar/view_light_box/'.$event->guid, 'start' => date('c',$ed['start_time']), 'end' => date('c',$ed['end_time']), ); @@ -2157,6 +2156,11 @@ function event_calendar_get_page_content_fullcalendar_events($start_date,$end_da 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_item['is_event_poll'] = TRUE; + $event_item['url'] = elgg_get_site_url().'event_poll/vote/'.$event->guid; + } else { + $event_item['is_event_poll'] = FALSE; + $event_item['url'] = elgg_get_site_url().'event_calendar/view_light_box/'.$event->guid; } $event_array[] = $event_item; diff --git a/views/default/event_calendar/full_calendar_view.php b/views/default/event_calendar/full_calendar_view.php index d86a3ac27..bba3a66db 100644 --- a/views/default/event_calendar/full_calendar_view.php +++ b/views/default/event_calendar/full_calendar_view.php @@ -9,8 +9,12 @@ elgg_load_css('lightbox'); handleEventClick = function(event) { if (event.url) { - //window.location.href = event.url; - $.fancybox({'href':event.url}); + if (event.is_event_poll) { + window.location.href = event.url; + } else { + //window.location.href = event.url; + $.fancybox({'href':event.url}); + } return false; } }; @@ -38,8 +42,10 @@ handleDayClick = function(date,allDay,jsEvent,view) { } handleEventDrop = function(event,dayDelta,minuteDelta,allDay,revertFunc) { - - if (!confirm("<?php echo elgg_echo('event_calendar:are_you_sure'); ?>")) { + if (event.is_event_poll) { + alert("<?php echo elgg_echo('event_calendar:cannot_drag_polls'); ?>"); + revertFunc(); + } else if (!confirm("<?php echo elgg_echo('event_calendar:are_you_sure'); ?>")) { revertFunc(); } else { elgg.action('event_calendar/modify_full_calendar', @@ -67,6 +73,12 @@ getISODate = function(d) { return year +"-"+month+"-"+day; } +handleEventRender = function(event, element, view) { + if (event.is_event_poll) { + element.draggable = false; + } +} + handleGetEvents = function(start, end, callback) { var start_date = getISODate(start); var end_date = getISODate(end); @@ -105,6 +117,7 @@ $(document).ready(function() { ignoreTimezone: true, editable: true, slotMinutes: 15, + eventRender: handleEventRender, eventDrop: handleEventDrop, eventClick: handleEventClick, dayClick: handleDayClick, -- cgit v1.2.3 From f7096ad23eefdb9bab187975544bcbd6eddf8c88 Mon Sep 17 00:00:00 2001 From: Kevin Jardine <kevinjardine@yahoo.com> Date: Fri, 22 Jun 2012 17:48:26 +0200 Subject: improved selected date across month, week and day views --- .../default/event_calendar/full_calendar_view.php | 42 ++++++++++++++++++---- 1 file changed, 36 insertions(+), 6 deletions(-) diff --git a/views/default/event_calendar/full_calendar_view.php b/views/default/event_calendar/full_calendar_view.php index bba3a66db..6ba8fe892 100644 --- a/views/default/event_calendar/full_calendar_view.php +++ b/views/default/event_calendar/full_calendar_view.php @@ -7,6 +7,8 @@ elgg_load_css('lightbox'); ?> <script> +var goToDateFlag = 0; + handleEventClick = function(event) { if (event.url) { if (event.is_event_poll) { @@ -35,10 +37,20 @@ handleDayClick = function(date,allDay,jsEvent,view) { group_guid = last_ss; } var url = elgg.get_site_url(); - $('.elgg-menu-item-event-calendar-0add').find('a').attr('href',url+'event_calendar/add/'+group_guid+'/'+iso); - $('.elgg-menu-item-event-calendar-1schedule').find('a').attr('href',url+'event_calendar/schedule/'+group_guid+'/'+iso); $('.fc-widget-content').removeClass('event-calendar-date-selected'); - $(this).addClass('event-calendar-date-selected'); + var current_iso = $('#event-calendar-selected-date').val(); + if (current_iso == iso) { + // deselect + $('#event-calendar-selected-date').val(""); + $('.elgg-menu-item-event-calendar-0add').find('a').attr('href',url+'event_calendar/add/'+group_guid); + $('.elgg-menu-item-event-calendar-1schedule').find('a').attr('href',url+'event_calendar/schedule/'+group_guid); + } else { + $('#event-calendar-selected-date').val(iso); + $('.elgg-menu-item-event-calendar-0add').find('a').attr('href',url+'event_calendar/add/'+group_guid+'/'+iso); + $('.elgg-menu-item-event-calendar-1schedule').find('a').attr('href',url+'event_calendar/schedule/'+group_guid+'/'+iso); + + $(this).addClass('event-calendar-date-selected'); + } } handleEventDrop = function(event,dayDelta,minuteDelta,allDay,revertFunc) { @@ -79,7 +91,7 @@ handleEventRender = function(event, element, view) { } } -handleGetEvents = function(start, end, callback) { +handleGetEvents = function(start, end, callback) { var start_date = getISODate(start); var end_date = getISODate(end); var url = "event_calendar/get_fullcalendar_events/"+start_date+"/"+end_date+"/<?php echo $vars['filter']; ?>/<?php echo $vars['group_guid']; ?>"; @@ -89,7 +101,7 @@ handleGetEvents = function(start, end, callback) { } }); // reset date links and classes - $('.fc-widget-content').removeClass('event-calendar-date-selected'); + //$('.fc-widget-content').removeClass('event-calendar-date-selected'); var link = $('.elgg-menu-item-event-calendar-0add').find('a').attr('href'); var ss = link.split('/'); var last_ss = ss[ss.length-1]; @@ -106,6 +118,22 @@ handleGetEvents = function(start, end, callback) { $('.elgg-menu-item-event-calendar-1schedule').find('a').attr('href',url+'event_calendar/schedule/'+group_guid); } +handleViewDisplay = function(view) { + // TODO: finish this, need to highlight selected date if any + var current_iso = $('#event-calendar-selected-date').val(); + if (view == 'month') { + goToDateFlag = 0; + } else if (goToDateFlag == 0 && current_iso != "") { + goToDateFlag = 1; + var a = current_iso.split("-"); + $('#calendar').fullCalendar('gotoDate',parseInt(a[0],10),parseInt(a[1],10)-1,parseInt(a[2],10)); + //$('.fc-widget-content').removeClass('event-calendar-date-selected'); + //$(".fc-widget-content[data-date='"+ciso+"']").addClass('event-calendar-date-selected'); + } + + //$(".fc-widget-content[data-date='20120105']") +} + $(document).ready(function() { $('#calendar').fullCalendar({ header: { @@ -121,8 +149,10 @@ $(document).ready(function() { eventDrop: handleEventDrop, eventClick: handleEventClick, dayClick: handleDayClick, - events: handleGetEvents + events: handleGetEvents, + viewDisplay: handleViewDisplay, }); }); </script> <div id='calendar'></div> +<input type="hidden" id="event-calendar-selected-date" /> -- cgit v1.2.3 From 0e264d23ae1b4c4a186cb855ed984bb082908fbb Mon Sep 17 00:00:00 2001 From: Kevin Jardine <kevinjardine@yahoo.com> Date: Tue, 26 Jun 2012 21:41:58 +0200 Subject: more changes to support event polls --- actions/event_calendar/modify_full_calendar.php | 13 +++++- languages/en.php | 5 ++- models/model.php | 48 +++++++++++--------- start.php | 4 +- .../default/event_calendar/full_calendar_view.php | 51 ++++++++++++++-------- 5 files changed, 76 insertions(+), 45 deletions(-) diff --git a/actions/event_calendar/modify_full_calendar.php b/actions/event_calendar/modify_full_calendar.php index 595bdbe4b..9288eb0e0 100644 --- a/actions/event_calendar/modify_full_calendar.php +++ b/actions/event_calendar/modify_full_calendar.php @@ -3,9 +3,18 @@ elgg_load_library('elgg:event_calendar'); $event_guid = get_input('event_guid',0); $day_delta = get_input('dayDelta'); $minute_delta = get_input('minuteDelta',''); - -if (event_calendar_modify_full_calendar($event_guid,$day_delta,$minute_delta)) { +$start_time = get_input('startTime',''); +$resend = get_input('resend',''); +$minutes = get_input('minutes'); +$iso_date = get_input('iso_date'); +$result = event_calendar_modify_full_calendar($event_guid,$day_delta,$minute_delta,$start_time,$resend,$minutes,$iso_date); +if ($result) { $response = array('success'=>TRUE); + // specially handling for event polls + if (is_array($result)) { + $response['minutes'] = $result['minutes']; + $response['iso_date'] = $result['iso_date']; + } } else { $response = array('success'=>FALSE, 'message' =>elgg_echo('event_calendar:modify_full_calendar:error')); } diff --git a/languages/en.php b/languages/en.php index 3d8c94e3f..3fd9cf7cb 100644 --- a/languages/en.php +++ b/languages/en.php @@ -309,8 +309,6 @@ 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:cannot_drag_polls' => "Cannot change event polls.", 'event_calendar:reminder:body' => "The event %s @@ -332,6 +330,9 @@ You can visit the event page here: 'event_calendar:bbb_create_error' => "Error: unable to create BBB conference, message was: %s", 'event_calendar:bbb_settings_error' => "Error: must set conference URL and salt in plugin settings", 'event_calendar:join_conf_button' => "Join conference", + + 'event_calendar:poll_suffix' => "(poll)", + 'event_calendar:resend_poll_invitation' => "Do you want to alert poll invitees that the options have changed?", /** * Event calendar river diff --git a/models/model.php b/models/model.php index aea6bca2f..2752626bc 100644 --- a/models/model.php +++ b/models/model.php @@ -2091,28 +2091,34 @@ function getLastDayOfMonth($month,$year) { 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) { +function event_calendar_modify_full_calendar($event_guid,$day_delta,$minute_delta,$start_time,$resend,$minutes,$iso_date) { $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; + if ($event->is_event_poll) { + if (elgg_is_active_plugin('event_poll')) { + elgg_load_library('elgg:event_poll'); + return event_poll_change($event_guid,$day_delta,$minute_delta,$start_time,$resend,$minutes,$iso_date); + } else { + return FALSE; + } + } else { + $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 TRUE; } return FALSE; } @@ -2134,14 +2140,13 @@ 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'); + $polls_supported = elgg_is_active_plugin('event_poll'); foreach($events as $e) { $event = $e['event']; $event_data = $e['data']; $c = count($event_data); foreach($event_data as $ed) { $event_item = array( - 'id' => $event->guid, 'guid' => $event->guid, 'title' => $event->title, 'start' => date('c',$ed['start_time']), @@ -2158,7 +2163,10 @@ function event_calendar_get_page_content_fullcalendar_events($start_date,$end_da $event_item['title'] .= ' '.elgg_echo('event_calendar:poll_suffix'); $event_item['is_event_poll'] = TRUE; $event_item['url'] = elgg_get_site_url().'event_poll/vote/'.$event->guid; + $event_item['minutes'] = $ed['minutes']; + $event_item['iso_date'] = $ed['iso_date']; } else { + $event_item['id'] = $event->guid; $event_item['is_event_poll'] = FALSE; $event_item['url'] = elgg_get_site_url().'event_calendar/view_light_box/'.$event->guid; } diff --git a/start.php b/start.php index ebd88d541..dd5437944 100644 --- a/start.php +++ b/start.php @@ -66,7 +66,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 (elgg_plugin_exists('event_poll') || ($event_calendar_listing_format == 'full')) { + if (elgg_is_active_plugin('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); @@ -293,7 +293,7 @@ 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') { + if (elgg_is_active_plugin('event_poll') && $entity->canEdit() && $entity->schedule_type == 'poll') { $options = array( 'name' => 'schedule', 'text' => elgg_echo('event_poll:schedule_button'), diff --git a/views/default/event_calendar/full_calendar_view.php b/views/default/event_calendar/full_calendar_view.php index 6ba8fe892..4316b5359 100644 --- a/views/default/event_calendar/full_calendar_view.php +++ b/views/default/event_calendar/full_calendar_view.php @@ -54,21 +54,32 @@ handleDayClick = function(date,allDay,jsEvent,view) { } handleEventDrop = function(event,dayDelta,minuteDelta,allDay,revertFunc) { - if (event.is_event_poll) { - alert("<?php echo elgg_echo('event_calendar:cannot_drag_polls'); ?>"); - revertFunc(); - } else if (!confirm("<?php echo elgg_echo('event_calendar:are_you_sure'); ?>")) { + + if (!event.is_event_poll && !confirm("<?php echo elgg_echo('event_calendar:are_you_sure'); ?>")) { revertFunc(); } else { + if (event.is_event_poll) { + if (confirm("<?php echo elgg_echo('event_calendar:resend_poll_invitation'); ?>")) { + var resend = 1; + } else { + resend = 0; + } + var data = {event_guid: event.guid, startTime: event.start.toISOString(), dayDelta: dayDelta, minuteDelta: minuteDelta, resend: resend, minutes: event.minutes, iso_date: event.iso_date}; + } else { + data = {event_guid: event.guid, startTime: event.start.toISOString(), dayDelta: dayDelta, minuteDelta: minuteDelta}; + } elgg.action('event_calendar/modify_full_calendar', { - data: {event_guid: event.guid,dayDelta: dayDelta, minuteDelta: minuteDelta}, + data: data, success: function (res) { var success = res.success; var msg = res.message; if (!success) { elgg.register_error(msg,2000); revertFunc() + } else { + event.minutes = res.minutes; + event.iso_date = res.iso_date; } } } @@ -86,9 +97,9 @@ getISODate = function(d) { } handleEventRender = function(event, element, view) { - if (event.is_event_poll) { + /*if (event.is_event_poll) { element.draggable = false; - } + }*/ } handleGetEvents = function(start, end, callback) { @@ -103,19 +114,21 @@ handleGetEvents = function(start, end, callback) { // reset date links and classes //$('.fc-widget-content').removeClass('event-calendar-date-selected'); var link = $('.elgg-menu-item-event-calendar-0add').find('a').attr('href'); - var ss = link.split('/'); - var last_ss = ss[ss.length-1]; - var group_guid; - if (last_ss == 'add') { - group_guid = 0; - } else if (last_ss.split('-').length == 3) { - group_guid = ss[ss.length-2]; - } else { - group_guid = last_ss; + if (link != undefined) { + var ss = link.split('/'); + var last_ss = ss[ss.length-1]; + var group_guid; + if (last_ss == 'add') { + group_guid = 0; + } else if (last_ss.split('-').length == 3) { + group_guid = ss[ss.length-2]; + } else { + group_guid = last_ss; + } + var url = elgg.get_site_url(); + $('.elgg-menu-item-event-calendar-0add').find('a').attr('href',url+'event_calendar/add/'+group_guid); + $('.elgg-menu-item-event-calendar-1schedule').find('a').attr('href',url+'event_calendar/schedule/'+group_guid); } - var url = elgg.get_site_url(); - $('.elgg-menu-item-event-calendar-0add').find('a').attr('href',url+'event_calendar/add/'+group_guid); - $('.elgg-menu-item-event-calendar-1schedule').find('a').attr('href',url+'event_calendar/schedule/'+group_guid); } handleViewDisplay = function(view) { -- cgit v1.2.3 From 2d605dc207541121f02fda9893509acb8e605212 Mon Sep 17 00:00:00 2001 From: Kevin Jardine <kevinjardine@yahoo.com> Date: Wed, 27 Jun 2012 11:05:16 +0200 Subject: changed CSS to avoid form flash of irrelevant content for event polls, and deleted some commented out code --- actions/event_calendar/modify_full_calendar.php | 2 +- views/default/event_calendar/css.php | 6 ++ views/default/forms/event_calendar/edit.php | 86 ------------------------- 3 files changed, 7 insertions(+), 87 deletions(-) diff --git a/actions/event_calendar/modify_full_calendar.php b/actions/event_calendar/modify_full_calendar.php index 9288eb0e0..1e0bd3a01 100644 --- a/actions/event_calendar/modify_full_calendar.php +++ b/actions/event_calendar/modify_full_calendar.php @@ -10,7 +10,7 @@ $iso_date = get_input('iso_date'); $result = event_calendar_modify_full_calendar($event_guid,$day_delta,$minute_delta,$start_time,$resend,$minutes,$iso_date); if ($result) { $response = array('success'=>TRUE); - // specially handling for event polls + // special handling for event polls if (is_array($result)) { $response['minutes'] = $result['minutes']; $response['iso_date'] = $result['iso_date']; diff --git a/views/default/event_calendar/css.php b/views/default/event_calendar/css.php index b1e17e4df..c1dbf4633 100644 --- a/views/default/event_calendar/css.php +++ b/views/default/event_calendar/css.php @@ -261,10 +261,16 @@ li.event-calendar-filter-menu-show-only { .event-calendar-edit-date-wrapper { clear: both; margin-left: 20px; + display: none; } .event-calendar-edit-reminder-wrapper { margin-top: 10px; + display: none; +} + +.event-calendar-edit-form-membership-block, .event-calendar-edit-form-share-block { + display: none; } .event-calendar-description { diff --git a/views/default/forms/event_calendar/edit.php b/views/default/forms/event_calendar/edit.php index 6ea06a6b4..2ba744fc4 100644 --- a/views/default/forms/event_calendar/edit.php +++ b/views/default/forms/event_calendar/edit.php @@ -17,7 +17,6 @@ $event_calendar_repeating_events = elgg_get_plugin_setting('repeating_events', ' $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_calendar_spots_display = elgg_get_plugin_setting('spots_display', 'event_calendar'); -//$event_calendar_add_users = elgg_get_plugin_setting('add_users', 'event_calendar'); $event_calendar_more_required = elgg_get_plugin_setting('more_required', 'event_calendar'); $event_calendar_bbb_server_url = elgg_get_plugin_setting('bbb_server_url', 'event_calendar'); @@ -71,14 +70,6 @@ $all_day = $fd['all_day']; $schedule_type = $fd['schedule_type']; $long_description = $fd['long_description']; -/*if ($event_calendar_times != 'no') { - $start_time = $fd['start_time']; - $end_time = $fd['end_time']; -} -if ($event_calendar_personal_manage == 'by_event') { - $personal_manage = $fd['personal_manage']; -}*/ - $body = '<div class="event-calendar-edit-form">'; $body .= elgg_view('input/hidden',array('name'=>'event_action', 'value'=>$event_action)); @@ -134,43 +125,6 @@ $body .= elgg_view('input/radio',array('id'=>'event-calendar-edit-schedule-type' $vars['prefix'] = $prefix; -/* -$body .= '<div class="event-calendar-edit-date-wrapper">'; -$body .= elgg_view('event_calendar/datetime_edit', - array( - 'start_date' => $start_date, - 'end_date' => $end_date, - 'start_time' => $start_time, - 'end_time' => $end_time, - 'prefix' => $prefix, -)); -if ($event_calendar_repeated_events == 'yes') { - $body .= elgg_view('event_calendar/repeat_form_element',$vars); -} -if ($event_calendar_reminders == 'yes') { - $body .= '<div class="event-calendar-edit-reminder-wrapper">'; - if ($send_reminder) { - $body .= elgg_view('input/checkbox',array('name'=>'send_reminder','checked' => 'checked','value'=>1)); - } else { - $body .= elgg_view('input/checkbox',array('name'=>'send_reminder','value'=>1)); - } - $body .= elgg_echo('elgg_calendar:send_reminder_label'). ' '; - $numbers = array(); - for ($i=1;$i<60;$i++) { - $numbers[$i] = $i; - } - $intervals = array( - 1 => elgg_echo('event_calendar:interval:minute'), - 60 => elgg_echo('event_calendar:interval:hour'), - 60*24 => elgg_echo('event_calendar:interval:day'), - ); - - $body .= elgg_view('input/dropdown',array('name'=>'reminder_number','options_values'=>$numbers,'value'=>$reminder_number)); - $body .= elgg_view('input/dropdown',array('name'=>'reminder_interval','options_values'=>$intervals,'value'=>$reminder_interval)); - $body .= elgg_echo('elgg_calendar:send_reminder_before'); - $body .= '</div>'; -}*/ - $body .= elgg_view('event_calendar/schedule_section',$vars); if ($event_calendar_spots_display == 'yes') { @@ -183,50 +137,10 @@ if ($event_calendar_spots_display == 'yes') { $body .= '<div class="event-calendar-edit-bottom"></div>'; $body .= '</div>'; -// the following feature has been superceded by the manage subscribers feature - -/*if ($event_calendar_add_users == 'yes') { - $body .= '<p><label>'.elgg_echo("event_calendar:add_user_label").'<br />'; - $body .= elgg_view("input/adduser",array('name' => 'adduser','internalid' => 'do_adduser','width'=> 200, 'minChars'=>2)); - $body .= '</label></p><br /><br />'; - $body .= '<p class="description">'.elgg_echo('event_calendar:add_user_description').'</p>'; -}*/ - $body .= elgg_view('event_calendar/personal_manage_section',$vars); -/*if ($event_calendar_personal_manage == 'by_event') { - $body .= '<div class="event-calendar-edit-form-block event-calendar-edit-form-membership-block">'; - $body .= '<h2>'.elgg_echo('event_calendar:personal_manage:label').'</h2>'; - $body .= elgg_view("input/radio",array('name' => 'personal_manage','value'=>$personal_manage,'options'=>$personal_manage_options)); - //$body .= '<p class="event-calendar-description">'.$prefix['personal_manage'].elgg_echo('event_calendar:personal_manage:description').'</p>'; - $body .= '<br clear="both" />'; - $body .= '</div>'; -}*/ - $body .= elgg_view('event_calendar/share_section',$vars); -/*$body .= '<div class="event-calendar-edit-form-block event-calendar-edit-form-share-block">'; -$body .= '<h2>'.elgg_echo('event_calendar:permissions:header').'</h2>'; -if($event_calendar_hide_access == 'yes') { - $event_calendar_default_access = elgg_get_plugin_setting('default_access', 'event_calendar'); - if($event_calendar_default_access) { - $body .= elgg_view("input/hidden",array('name' => 'access_id','value'=>$event_calendar_default_access)); - } else { - $body .= elgg_view("input/hidden",array('name' => 'access_id','value'=>ACCESS_DEFAULT)); - } -} else { - $body .= '<p><label>'.elgg_echo('event_calendar:read_access').'</label>'; - $body .= elgg_view("input/access",array('name' => 'access_id','value'=>$access)); - $body .= '</p>'; -} -if (elgg_plugin_exists('entity_admins')) { - $body .= elgg_echo('event_calendar:share_ownership:label'); - $body .= '<br />'; - $body .= elgg_echo('event_calendar:share_ownership:description'); - $body .= elgg_view('input/entity_admins_dropdown',array('entity'=>$event)); -} -$body .= '</div>';*/ - if ($event_calendar_region_display == 'yes' || $event_calendar_type_display == 'yes' || $event_calendar_fewer_fields != 'yes') { $body .= '<div class="event-calendar-edit-form-block event-calendar-edit-form-other-block">'; -- cgit v1.2.3 From bd6840a34cd9d3b3afabf3f6c977f8cea5a32662 Mon Sep 17 00:00:00 2001 From: Matt Beckett <beck24@gmail.com> Date: Tue, 3 Jul 2012 12:54:06 -0600 Subject: removed old widget file Allows calendar widget to be useful in groups context --- models/model.php | 4 +-- views/default/widgets/event_calendar/content.php | 8 +++-- views/default/widgets/event_calendar/view.php | 39 ------------------------ 3 files changed, 8 insertions(+), 43 deletions(-) delete mode 100644 views/default/widgets/event_calendar/view.php diff --git a/models/model.php b/models/model.php index 2752626bc..ba1393a8c 100644 --- a/models/model.php +++ b/models/model.php @@ -1150,12 +1150,12 @@ function event_calendar_security_fields() { return "__elgg_token=$token&__elgg_ts=$ts"; } -function event_calendar_get_events_for_group($group_guid) { +function event_calendar_get_events_for_group($group_guid, $limit = 0) { $options = array( 'type' => 'object', 'subtype' => 'event_calendar', 'container_guid' => $group_guid, - 'limit' => 0, + 'limit' => $limit, ); return elgg_get_entities($options); } diff --git a/views/default/widgets/event_calendar/content.php b/views/default/widgets/event_calendar/content.php index 329046cb0..eaedb76bd 100644 --- a/views/default/widgets/event_calendar/content.php +++ b/views/default/widgets/event_calendar/content.php @@ -20,8 +20,12 @@ $num = 5; // Get the events - - $events = event_calendar_get_personal_events_for_user(elgg_get_page_owner_guid(),$num); + $owner = elgg_get_page_owner_entity(); + if(elgg_instanceof($owner, 'group')) { + $events = event_calendar_get_events_for_group(elgg_get_page_owner_guid(),$num); + } else { + $events = event_calendar_get_personal_events_for_user(elgg_get_page_owner_guid(),$num); + } // If there are any events to view, view them if (is_array($events) && sizeof($events) > 0) { diff --git a/views/default/widgets/event_calendar/view.php b/views/default/widgets/event_calendar/view.php deleted file mode 100644 index 329046cb0..000000000 --- a/views/default/widgets/event_calendar/view.php +++ /dev/null @@ -1,39 +0,0 @@ -<?php - -/** - * Elgg event calendar widget - * - * @package event_calendar - * @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.html GNU Public License version 2 - * @author Kevin Jardine <kevin@radagast.biz> - * @copyright Radagast Solutions 2008 - * @link http://radagast.biz/ - * - */ - - // Load event calendar model - elgg_load_library('elgg:event_calendar'); - - //the number of events to display - $num = (int) $vars['entity']->num_display; - if (!$num) - $num = 5; - - // Get the events - - $events = event_calendar_get_personal_events_for_user(elgg_get_page_owner_guid(),$num); - - // If there are any events to view, view them - if (is_array($events) && sizeof($events) > 0) { - - echo "<div id=\"widget_calendar\">"; - - foreach($events as $event) { - echo elgg_view("object/event_calendar",array('entity' => $event)); - } - - echo "</div>"; - - } - -?> \ No newline at end of file -- cgit v1.2.3 From 190a81e721df6efb1d051830c1ee852c1fe7b069 Mon Sep 17 00:00:00 2001 From: Matt Beckett <beck24@gmail.com> Date: Tue, 3 Jul 2012 13:13:35 -0600 Subject: enables group context for widget --- start.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/start.php b/start.php index dd5437944..49312599f 100644 --- a/start.php +++ b/start.php @@ -73,7 +73,7 @@ function event_calendar_init() { } //add a widget - elgg_register_widget_type('event_calendar',elgg_echo("event_calendar:widget_title"),elgg_echo('event_calendar:widget:description')); + elgg_register_widget_type('event_calendar',elgg_echo("event_calendar:widget_title"),elgg_echo('event_calendar:widget:description'), 'all,groups'); // add the event calendar group tool option $event_calendar_group_default = elgg_get_plugin_setting('group_default', 'event_calendar'); -- cgit v1.2.3 From 1246e9bc6cafc7f186e1d8fe4370786cd8179b27 Mon Sep 17 00:00:00 2001 From: Kevin Jardine <kevinjardine@yahoo.com> Date: Thu, 5 Jul 2012 14:31:34 +0200 Subject: removed deprecated plugin setting --- views/default/plugins/event_calendar/settings.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/views/default/plugins/event_calendar/settings.php b/views/default/plugins/event_calendar/settings.php index e91db9969..db6e00913 100644 --- a/views/default/plugins/event_calendar/settings.php +++ b/views/default/plugins/event_calendar/settings.php @@ -112,7 +112,7 @@ $body .= elgg_view('input/radio',array('name'=>'params[times]','value'=>$event_c $body .= '<br />'; -$event_calendar_restricted_times = elgg_get_plugin_setting('restricted_times', 'event_calendar'); +/*$event_calendar_restricted_times = elgg_get_plugin_setting('restricted_times', 'event_calendar'); if (!$event_calendar_restricted_times) { $event_calendar_restricted_times = 'no'; } @@ -121,7 +121,7 @@ $body .= elgg_echo('event_calendar:settings:restricted_times:title'); $body .= '<br />'; $body .= elgg_view('input/radio',array('name'=>'params[restricted_times]','value'=>$event_calendar_restricted_times,'options'=>$yn_options)); -$body .= '<br />'; +$body .= '<br />';*/ $event_calendar_time_format = elgg_get_plugin_setting('timeformat', 'event_calendar'); if (!$event_calendar_time_format) { -- cgit v1.2.3 From 5c7dcf2a382479a4f9cf7eafeaa4eb30faed440d Mon Sep 17 00:00:00 2001 From: Kevin Jardine <kevinjardine@yahoo.com> Date: Mon, 16 Jul 2012 10:56:17 +0200 Subject: load library in object view for external calls like search --- views/default/object/event_calendar.php | 2 ++ 1 file changed, 2 insertions(+) diff --git a/views/default/object/event_calendar.php b/views/default/object/event_calendar.php index b72c869ea..afd4325f1 100644 --- a/views/default/object/event_calendar.php +++ b/views/default/object/event_calendar.php @@ -11,6 +11,8 @@ * */ +elgg_load_library('elgg:event_calendar'); + $event = $vars['entity']; $full = elgg_extract('full_view', $vars, FALSE); -- cgit v1.2.3 From 43df50de769ce11dac12ebedef07c7c1a7e9b7ab Mon Sep 17 00:00:00 2001 From: Kevin Jardine <kevinjardine@yahoo.com> Date: Sun, 22 Jul 2012 13:08:19 +0200 Subject: add button always appears, even for event polls, fixes issue #37 --- models/model.php | 28 ++++++++++++---------------- 1 file changed, 12 insertions(+), 16 deletions(-) diff --git a/models/model.php b/models/model.php index 2752626bc..8e82052ec 100644 --- a/models/model.php +++ b/models/model.php @@ -1483,27 +1483,23 @@ function event_calendar_get_page_content_list($page_type,$container_guid,$start_ $user_guid = elgg_get_logged_in_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, - 'text' => elgg_echo('event_calendar:add'), - 'class' => 'elgg-button elgg-button-action', - )); - } + 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 { elgg_push_breadcrumb(elgg_echo('item:object:event_calendar')); $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", - 'text' => elgg_echo('event_calendar:add'), - 'class' => 'elgg-button elgg-button-action', - )); - } + elgg_register_menu_item('title', array( + 'name' => 'add', + 'href' => "event_calendar/add", + 'text' => elgg_echo('event_calendar:add'), + 'class' => 'elgg-button elgg-button-action', + )); } } -- cgit v1.2.3 From 5d0b300bd5c7603a94abc7c53b4144b53b9dd89f Mon Sep 17 00:00:00 2001 From: Kevin Jardine <kevinjardine@yahoo.com> Date: Sun, 22 Jul 2012 13:24:48 +0200 Subject: add button always appears, even for event polls, fixes issue #37 --- models/model.php | 1 - 1 file changed, 1 deletion(-) diff --git a/models/model.php b/models/model.php index 13fe907de..7d0d06a3f 100644 --- a/models/model.php +++ b/models/model.php @@ -1481,7 +1481,6 @@ 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(); - // 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)) { elgg_register_menu_item('title', array( 'name' => 'add', -- cgit v1.2.3 From dae9634f5d74824e3179942b0bc62dd52d850085 Mon Sep 17 00:00:00 2001 From: Kevin Jardine <kevinjardine@yahoo.com> Date: Sun, 22 Jul 2012 13:44:47 +0200 Subject: add button now honours selected date --- models/model.php | 4 ++-- views/default/event_calendar/full_calendar_view.php | 2 ++ 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/models/model.php b/models/model.php index 7d0d06a3f..fb2cf44c2 100644 --- a/models/model.php +++ b/models/model.php @@ -1486,7 +1486,7 @@ function event_calendar_get_page_content_list($page_type,$container_guid,$start_ 'name' => 'add', 'href' => "event_calendar/add/".$container_guid, 'text' => elgg_echo('event_calendar:add'), - 'class' => 'elgg-button elgg-button-action', + 'class' => 'elgg-button elgg-button-action event-calendar-button-add', )); } } else { @@ -1497,7 +1497,7 @@ function event_calendar_get_page_content_list($page_type,$container_guid,$start_ 'name' => 'add', 'href' => "event_calendar/add", 'text' => elgg_echo('event_calendar:add'), - 'class' => 'elgg-button elgg-button-action', + 'class' => 'elgg-button elgg-button-action event-calendar-button-add', )); } } diff --git a/views/default/event_calendar/full_calendar_view.php b/views/default/event_calendar/full_calendar_view.php index 4316b5359..3e0c583ce 100644 --- a/views/default/event_calendar/full_calendar_view.php +++ b/views/default/event_calendar/full_calendar_view.php @@ -43,10 +43,12 @@ handleDayClick = function(date,allDay,jsEvent,view) { // deselect $('#event-calendar-selected-date').val(""); $('.elgg-menu-item-event-calendar-0add').find('a').attr('href',url+'event_calendar/add/'+group_guid); + $('.event-calendar-button-add').attr('href',url+'event_calendar/add/'+group_guid); $('.elgg-menu-item-event-calendar-1schedule').find('a').attr('href',url+'event_calendar/schedule/'+group_guid); } else { $('#event-calendar-selected-date').val(iso); $('.elgg-menu-item-event-calendar-0add').find('a').attr('href',url+'event_calendar/add/'+group_guid+'/'+iso); + $('.event-calendar-button-add').attr('href',url+'event_calendar/add/'+group_guid+'/'+iso); $('.elgg-menu-item-event-calendar-1schedule').find('a').attr('href',url+'event_calendar/schedule/'+group_guid+'/'+iso); $(this).addClass('event-calendar-date-selected'); -- cgit v1.2.3 From 819cebeb27c5ab8b4a04fc8660667ec9a29681c1 Mon Sep 17 00:00:00 2001 From: Kevin Jardine <kevinjardine@yahoo.com> Date: Sun, 22 Jul 2012 14:05:50 +0200 Subject: manager subscribers link now appears on the lightbox version of an event (assuming that the add users plugin option is enabled) --- models/model.php | 2 +- views/default/object/event_calendar.php | 8 ++++++++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/models/model.php b/models/model.php index fb2cf44c2..85e605352 100644 --- a/models/model.php +++ b/models/model.php @@ -1879,7 +1879,7 @@ function event_calendar_get_page_content_view($event_guid,$light_box = FALSE) { } elgg_push_breadcrumb($event->title); - $content = elgg_view_entity($event, array('full_view' => true)); + $content = elgg_view_entity($event, array('full_view' => true,'light_box'=>$light_box)); //check to see if comment are on - TODO - add this feature to all events if ($event->comments_on != 'Off') { $content .= elgg_view_comments($event); diff --git a/views/default/object/event_calendar.php b/views/default/object/event_calendar.php index afd4325f1..5779c004c 100644 --- a/views/default/object/event_calendar.php +++ b/views/default/object/event_calendar.php @@ -59,9 +59,17 @@ if ($full) { } else { echo '<p>'.$event->description.'</p>'; } + if ($vars['light_box'] == TRUE) { + $event_calendar_add_users = elgg_get_plugin_setting('add_users', 'event_calendar'); + if ($event_calendar_add_users == 'yes') { + $url = "event_calendar/manage_users/$event->guid"; + echo '<p>'.elgg_view('output/url',array('text'=> elgg_echo('event_calendar:manage_users:breadcrumb'), 'href'=>$url)).'</p>'; + } + } if (elgg_get_plugin_setting('add_to_group_calendar', 'event_calendar') == 'yes') { echo elgg_view('event_calendar/forms/add_to_group',array('event' => $event)); } + } else { $time_bit = event_calendar_get_formatted_time($event); -- cgit v1.2.3 From 066365aa7ff1c407040a672e69d999ed8bd337f6 Mon Sep 17 00:00:00 2001 From: Sem <sembrestels@riseup.net> Date: Sat, 28 Jul 2012 06:26:29 +0200 Subject: Using elgg_view_icon instead hardcoded html in ical icon. --- models/model.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/models/model.php b/models/model.php index 85e605352..649d6027a 100644 --- a/models/model.php +++ b/models/model.php @@ -1515,7 +1515,7 @@ function event_calendar_get_page_content_list($page_type,$container_guid,$start_ $menu_options = array( 'name' => 'ical', 'id' => 'event-calendar-ical-link', - 'text' => '<img src="'.elgg_get_site_url().'mod/event_calendar/images/ics.png" />', + 'text' => elgg_view_icon('calendar'), 'href' => $url, 'title' => elgg_echo('feed:ical'), 'priority' => 800, -- cgit v1.2.3 From fd1af50b7497bd3313152c99dbafae9aa9d393ca Mon Sep 17 00:00:00 2001 From: Sem <sembrestels@riseup.net> Date: Fri, 10 Aug 2012 12:27:53 +0200 Subject: Improved languages. --- languages/en.php | 12 +++++------- languages/es.php | 11 +++++------ languages/fr.php | 1 - 3 files changed, 10 insertions(+), 14 deletions(-) diff --git a/languages/en.php b/languages/en.php index 3fd9cf7cb..8e42580de 100644 --- a/languages/en.php +++ b/languages/en.php @@ -2,7 +2,7 @@ $english = array( - 'item:object:event_calendar' => "Event calendar", + 'item:object:event_calendar' => "Calendar", 'tag_names:event_tags' => "Tags", 'event_calendar:optional' => "Optional.", 'event_calendar:required' => "Required.", @@ -17,7 +17,7 @@ 'event_calendar:title_description' => "One to four words", 'event_calendar:brief_description_label' => "Description", 'event_calendar:brief_description_description' => "A short phrase.", - 'event_calendar:venue_label' => "Venue", + 'event_calendar:venue_label' => "Where", 'event_calendar:venue_description' => "Where will this event be held?", 'event_calendar:start_date_label' => "Start date", 'event_calendar:start_date_description' => "When will this event start?", @@ -44,7 +44,7 @@ 'event_calendar:manage_event_error' => "Error: There was an error in saving your event. " ."Please make sure that you have provided the required fields.", 'event_calendar:error_nosuchevent' => "Error: there is no such event.", - 'event_calendar:show_events_title' => "Event calendar", + 'event_calendar:show_events_title' => "Calendar", 'event_calendar:day_label' => "Day", 'event_calendar:week_label' => "Week", 'event_calendar:month_label' => "Month", @@ -52,7 +52,7 @@ 'event_calendar:new' => "Add event", 'event_calendar:submit' => "Save and Continue", 'event_calendar:cancel' => "Cancel", - 'event_calendar:widget_title' => "Event calendar", + 'event_calendar:widget_title' => "Calendar", 'event_calendar:widget:description' => "Displays your events.", 'event_calendar:num_display' => "Number of events to display", 'event_calendar:groupprofile' => "Upcoming events", @@ -121,7 +121,7 @@ 'event_calendar:region_filter_by_label' => "Filter by region: ", 'event_calendar:settings:first_date:title' => "First allowable date (in YYYY-MM-DD format)", 'event_calendar:settings:last_date:title' => "Last allowable date (in YYYY-MM-DD format)", - 'event_calendar:enable_event_calendar' => "Enable group event calendar", + 'event_calendar:enable_event_calendar' => "Enable group calendar", 'event_calendar:no_events_found' => "No events found.", 'event_calendar:mine' => "Mine", 'event_calendar:feature' => "Feature", @@ -355,5 +355,3 @@ You can visit the event page here: ); add_translation("en",$english); - -?> \ No newline at end of file diff --git a/languages/es.php b/languages/es.php index 1eefff2a3..2f835f9f5 100644 --- a/languages/es.php +++ b/languages/es.php @@ -1,6 +1,6 @@ <?php $language = array ( - 'item:object:event_calendar' => 'Calendario de eventos', + 'item:object:event_calendar' => 'Calendario', 'event_calendar:new_event' => 'Nuevo evento', 'event_calendar:no_such_event_edit_error' => 'Error: No existe tal evento o usted no tiene autorización para editarlo.', 'event_calendar:add_event_title' => 'Agregar evento', @@ -10,7 +10,7 @@ $language = array ( 'event_calendar:title_description' => 'Una a cuatro palabras', 'event_calendar:brief_description_label' => 'Descripción breve', 'event_calendar:brief_description_description' => 'Una frase corta.', - 'event_calendar:venue_label' => 'Sede', + 'event_calendar:venue_label' => 'Lugar', 'event_calendar:venue_description' => '¿Dónde se llevará a cabo este evento?', 'event_calendar:start_date_label' => 'Fecha de inicio', 'event_calendar:start_date_description' => '¿Cuándo comenzará este evento?', @@ -34,7 +34,7 @@ $language = array ( 'event_calendar:add_event_response' => 'Su evento ha sido agregado.', 'event_calendar:manage_event_error' => 'Error: Hubo un error al guardar su evento. Por favor asegúrese que todos los campos requeridos hayan sido proporcionados.', 'event_calendar:error_nosuchevent' => 'Error: no existe tal evento.', - 'event_calendar:show_events_title' => 'Calendario del evento', + 'event_calendar:show_events_title' => 'Calendario', 'event_calendar:day_label' => 'Día', 'event_calendar:week_label' => 'Semana', 'event_calendar:month_label' => 'Mes', @@ -42,7 +42,7 @@ $language = array ( 'event_calendar:new' => 'Agregar evento', 'event_calendar:submit' => 'Enviar', 'event_calendar:cancel' => 'Cancelar', - 'event_calendar:widget_title' => 'Calendario del evento', + 'event_calendar:widget_title' => 'Calendario', 'event_calendar:widget:description' => 'Exponer sus eventos.', 'event_calendar:num_display' => 'Número de eventos expuestos', 'event_calendar:groupprofile' => 'Eventos venideros', @@ -74,7 +74,7 @@ $language = array ( 'event_calendar:settings:venue_view:title' => 'Mostrar sede en vista rápida (listados de eventos)', 'event_calendar:settings:yes' => 'sí', 'event_calendar:settings:no' => 'no', - 'event_calendar:settings:site_calendar:title' => 'Sitio del calendario', + 'event_calendar:settings:site_calendar:title' => 'Calendario del sitio', 'event_calendar:settings:site_calendar:admin' => 'sí, solamente si administradores pueden anunciar eventos', 'event_calendar:settings:site_calendar:loggedin' => 'sí, cualquier usuario registrado puede anunciar un evento', 'event_calendar:settings:group_calendar:title' => 'Calendarios de grupo', @@ -121,4 +121,3 @@ $language = array ( 'event_calendar:river:the_event' => 'un evento titulado', ); add_translation("es", $language); -?> \ No newline at end of file diff --git a/languages/fr.php b/languages/fr.php index 876a53ecb..6e2624691 100644 --- a/languages/fr.php +++ b/languages/fr.php @@ -122,4 +122,3 @@ $language = array ( 'event_calendar:river:the_event' => 'un événement intitulé', ); add_translation("fr", $language); -?> \ No newline at end of file -- cgit v1.2.3 From a27489bc198343d76376a6b16e4bcd81fd9a85ae Mon Sep 17 00:00:00 2001 From: Sem <sembrestels@riseup.net> Date: Fri, 10 Aug 2012 14:31:17 +0200 Subject: Added default options and replaced brief description by full description when fewer fields. --- activate.php | 4 ++++ views/default/forms/event_calendar/edit.php | 16 ++++++++++++---- 2 files changed, 16 insertions(+), 4 deletions(-) create mode 100644 activate.php diff --git a/activate.php b/activate.php new file mode 100644 index 000000000..3be14d287 --- /dev/null +++ b/activate.php @@ -0,0 +1,4 @@ +<?php + +elgg_set_plugin_setting('listing_format', 'full', 'event_calendar'); +elgg_set_plugin_setting('fewer_fields', 'yes', 'event_calendar'); \ No newline at end of file diff --git a/views/default/forms/event_calendar/edit.php b/views/default/forms/event_calendar/edit.php index 2ba744fc4..33849962c 100644 --- a/views/default/forms/event_calendar/edit.php +++ b/views/default/forms/event_calendar/edit.php @@ -87,10 +87,18 @@ $body .= elgg_view("input/text",array('name' => 'venue','class'=>'event-calendar $body .= '</p>'; $body .= '<p class="event-calendar-description">'.$prefix['venue'].elgg_echo('event_calendar:venue_description').'</p>'; -$body .= '<p><label>'.elgg_echo("event_calendar:brief_description_label").'</label>'; -$body .= elgg_view("input/text",array('name' => 'description','class'=>'event-calendar-medium-text','value'=>$brief_description)); -$body .= '</p>'; -$body .= '<p class="event-calendar-description">'.$prefix['brief_description'].elgg_echo('event_calendar:brief_description_description').'</p>'; +if ($event_calendar_fewer_fields != 'yes') { + $body .= '<p><label>'.elgg_echo("event_calendar:brief_description_label").'</label>'; + $body .= elgg_view("input/text",array('name' => 'description','class'=>'event-calendar-medium-text','value'=>$brief_description)); + $body .= '</p>'; + $body .= '<p class="event-calendar-description">'.$prefix['brief_description'].elgg_echo('event_calendar:brief_description_description').'</p>'; + +} else { + $body .= '<p><label>'.elgg_echo("event_calendar:long_description_label").'</label>'; + $body .= elgg_view("input/longtext",array('name' => 'long_description','class'=>'event-calendar-long-text','value'=>$long_description)); + $body .= '</p>'; + $body .= '<p class="event-calendar-description">'.$prefix['long_description'].elgg_echo('event_calendar:long_description_description').'</p>'; +} $body .= '<p><label>'.elgg_echo("event_calendar:event_tags_label").'</label>'; $body .= elgg_view("input/tags",array('name' => 'tags','class'=>'event-calendar-medium-text','value'=>$event_tags)); -- cgit v1.2.3 From 822b97cd05b048f88a78622fbff5322e42b05d69 Mon Sep 17 00:00:00 2001 From: Sem <sembrestels@riseup.net> Date: Fri, 10 Aug 2012 19:26:42 +0200 Subject: Added colorbox support. --- views/default/event_calendar/full_calendar_view.php | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/views/default/event_calendar/full_calendar_view.php b/views/default/event_calendar/full_calendar_view.php index 3e0c583ce..7a40c6da9 100644 --- a/views/default/event_calendar/full_calendar_view.php +++ b/views/default/event_calendar/full_calendar_view.php @@ -14,8 +14,11 @@ handleEventClick = function(event) { if (event.is_event_poll) { window.location.href = event.url; } else { - //window.location.href = event.url; - $.fancybox({'href':event.url}); + if ($.fancybox) { + $.fancybox({'href': event.url}); + } else if ($.colorbox) { + $.colorbox({'href': event.url}); + } } return false; } -- cgit v1.2.3 From 6879aa27f768b2284644606e84a8f5ae1a9012bd Mon Sep 17 00:00:00 2001 From: Sem <sembrestels@riseup.net> Date: Sat, 11 Aug 2012 01:41:00 +0200 Subject: Fixed moves of repeating events. --- models/model.php | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/models/model.php b/models/model.php index 649d6027a..c651b0055 100644 --- a/models/model.php +++ b/models/model.php @@ -2112,6 +2112,18 @@ function event_calendar_modify_full_calendar($event_guid,$day_delta,$minute_delt $event->end_time += $minute_delta; } } + $dow = array('monday','tuesday','wednesday','thursday','friday','saturday','sunday'); + $week_repeats = array(); + $weekday_delta = (($day_delta % 7) + 7) % 7; // Imagine delta is -12: ((-12 % 7) + 7 % 7) = +2 (thursdays are saturdays) + foreach ($dow as $i => $w) { + $v = 'event-calendar-repeating-'.$w.'-value'; + $new_day = $dow[($i+$weekday_delta)%7]; + $week_repeats[$new_day] = $event->$v; + } + foreach ($week_repeats as $w => $value) { + $v = 'event-calendar-repeating-'.$w.'-value'; + $event->$v = $value; + } return TRUE; } } -- cgit v1.2.3 From 7cf26f61b246a959b34d9ab86ce00e20267bebdb Mon Sep 17 00:00:00 2001 From: Sem <sembrestels@riseup.net> Date: Sun, 12 Aug 2012 02:49:45 +0200 Subject: Set all day events as default when creating an event. --- models/model.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/models/model.php b/models/model.php index c651b0055..69961969c 100644 --- a/models/model.php +++ b/models/model.php @@ -1649,7 +1649,7 @@ function event_calendar_prepare_edit_form_vars($event = NULL, $page_type = '', $ if ($page_type == 'schedule') { $values['schedule_type'] = 'poll'; } else { - $values['schedule_type'] = 'fixed'; + $values['schedule_type'] = 'all_day'; } if ($event) { -- cgit v1.2.3 From b09a37dc19b6af698b70bae21587c473ca98a3f6 Mon Sep 17 00:00:00 2001 From: Sem <sembrestels@riseup.net> Date: Sun, 12 Aug 2012 03:12:57 +0200 Subject: Removed text beetwen tabs. --- views/default/event_calendar/filter_menu.php | 4 ---- 1 file changed, 4 deletions(-) diff --git a/views/default/event_calendar/filter_menu.php b/views/default/event_calendar/filter_menu.php index 926a29d0d..1364902a8 100644 --- a/views/default/event_calendar/filter_menu.php +++ b/views/default/event_calendar/filter_menu.php @@ -30,9 +30,6 @@ if (elgg_is_logged_in()) { 'selected' => ($filter_context == 'friends'), 'priority' => 400, ); - $text_bit = '<li class="event-calendar-filter-menu-show-only">'.elgg_echo('event_calendar:show_only').'</li>'; -} else { - $text_bit = ''; } $tab_rendered = array(); @@ -66,7 +63,6 @@ $menu = <<<__MENU <ul class="elgg-menu elgg-menu-filter elgg-menu-hz elgg-menu-filter-default"> {$tab_rendered['open']} {$tab_rendered['all']} - $text_bit {$tab_rendered['mine']} {$tab_rendered['friend']} </ul> -- cgit v1.2.3 From 3544d24791d4df96fff45d4f385bce368769cd80 Mon Sep 17 00:00:00 2001 From: Kevin Jardine <kevinjardine@yahoo.com> Date: Mon, 20 Aug 2012 09:46:21 +0200 Subject: fixed conference duration bug --- models/model.php | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/models/model.php b/models/model.php index 85e605352..32a9c928a 100644 --- a/models/model.php +++ b/models/model.php @@ -2287,7 +2287,10 @@ function event_calendar_create_bbb_conf($event) { $bbb_server_url = rtrim(elgg_get_plugin_setting('bbb_server_url','event_calendar'), '/') . '/'; if ($bbb_security_salt) { $day_in_minutes = 60*24; - $duration = (int)(($event->real_end_time-$event->start_date)/60)+$day_in_minutes; + $now = time(); + // fix duration bug + # $duration = (int)(($event->real_end_time-$event->start_date)/60)+$day_in_minutes; + $duration = (int)(($event->real_end_time-$now)/60)+$day_in_minutes; $title = urlencode($event->title); $params = "name=$title&meetingID={$event->guid}&duration=$duration"; $checksum = sha1('create'.$params.$bbb_security_salt); -- cgit v1.2.3 From 381e87e243e357d804f6113758ac00b69a0b436b Mon Sep 17 00:00:00 2001 From: Kevin Jardine <kevinjardine@yahoo.com> Date: Mon, 20 Aug 2012 10:30:56 +0200 Subject: fixed conference button appearance time for non-admins --- views/default/event_calendar/conference_button.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/views/default/event_calendar/conference_button.php b/views/default/event_calendar/conference_button.php index f6fedf4f6..baa30cc68 100644 --- a/views/default/event_calendar/conference_button.php +++ b/views/default/event_calendar/conference_button.php @@ -9,12 +9,12 @@ $event = $vars['event']; if ($event) { elgg_load_library('elgg:event_calendar'); $user_guid = elgg_get_logged_in_user_guid(); - $termination_time = $event->real_end_time + 60*60*24; + $termination_time = strtotime("1 day",$event->real_end_time); if ($termination_time < time()) { $in_time_window = FALSE; } else if ($event->canEdit()) { $in_time_window = TRUE; - } else if (event_calendar_has_personal_event($event->guid, $user_guid) && ($event->start_date - 15*60) >= time()) { + } else if (event_calendar_has_personal_event($event->guid, $user_guid) && (strtotime('-15 minutes',$event->start_date) <= time())) { $in_time_window = TRUE; } else { $in_time_window = FALSE; -- cgit v1.2.3 From 0eda6a0b003c84729176be8e069b7e5ab9d9f43c Mon Sep 17 00:00:00 2001 From: Sem <sembrestels@riseup.net> Date: Wed, 29 Aug 2012 20:20:37 +0200 Subject: Internationalized fullcalendar. --- .../default/event_calendar/full_calendar_view.php | 67 ++++++++++++++++------ 1 file changed, 49 insertions(+), 18 deletions(-) diff --git a/views/default/event_calendar/full_calendar_view.php b/views/default/event_calendar/full_calendar_view.php index 7a40c6da9..adbb8a359 100644 --- a/views/default/event_calendar/full_calendar_view.php +++ b/views/default/event_calendar/full_calendar_view.php @@ -152,25 +152,56 @@ handleViewDisplay = function(view) { //$(".fc-widget-content[data-date='20120105']") } -$(document).ready(function() { - $('#calendar').fullCalendar({ - header: { - left: 'prev,next today', - center: 'title', - right: 'month,agendaWeek,agendaDay' - }, - month: <?php echo date('n',strtotime($vars['start_date']))-1; ?>, - ignoreTimezone: true, - editable: true, - slotMinutes: 15, - eventRender: handleEventRender, - eventDrop: handleEventDrop, - eventClick: handleEventClick, - dayClick: handleDayClick, - events: handleGetEvents, - viewDisplay: handleViewDisplay, +fullcalendarInit = function() { + + var loadFullCalendar = function() { + var locale = $.datepicker.regional[elgg.config.language]; + if (!locale) { + locale = $.datepicker.regional['']; + } + $('#calendar').fullCalendar({ + header: { + left: 'prev,next today', + center: 'title', + right: 'month,agendaWeek,agendaDay' + }, + month: <?php echo date('n',strtotime($vars['start_date']))-1; ?>, + ignoreTimezone: true, + editable: true, + slotMinutes: 15, + eventRender: handleEventRender, + eventDrop: handleEventDrop, + eventClick: handleEventClick, + dayClick: handleDayClick, + events: handleGetEvents, + viewDisplay: handleViewDisplay, + + isRTL: locale.isRTL, + firstDay: locale.firstDay, + monthNames: locale.monthNames, + monthNamesShort: locale.monthNamesShort, + dayNames: locale.dayNames, + dayNamesShort: locale.dayNamesShort, + buttonText: { + today: locale.currentText, + month: elgg.echo('event_calendar:month_label'), + week: elgg.echo('event_calendar:week_label'), + day: elgg.echo('event_calendar:day_label') + } + }); + } + + elgg.get({ + url: elgg.config.wwwroot + 'vendors/jquery/i18n/jquery.ui.datepicker-'+ elgg.get_language() +'.js', + dataType: "script", + cache: true, + success: loadFullCalendar, + error: loadFullCalendar, // english language is already loaded. }); -}); +} + +elgg.register_hook_handler('init', 'system', fullcalendarInit); + </script> <div id='calendar'></div> <input type="hidden" id="event-calendar-selected-date" /> -- cgit v1.2.3 From 3d72bfc22b8a538da08a0f0919fb9799bdc975ec Mon Sep 17 00:00:00 2001 From: Sem <sembrestels@riseup.net> Date: Wed, 29 Aug 2012 23:28:04 +0200 Subject: 24h supported for fullcalendar. --- views/default/event_calendar/full_calendar_view.php | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/views/default/event_calendar/full_calendar_view.php b/views/default/event_calendar/full_calendar_view.php index adbb8a359..6fc59fcc8 100644 --- a/views/default/event_calendar/full_calendar_view.php +++ b/views/default/event_calendar/full_calendar_view.php @@ -3,6 +3,8 @@ elgg_load_js('elgg.full_calendar'); elgg_load_js('lightbox'); elgg_load_css('lightbox'); +$timeformat = elgg_get_plugin_setting('timeformat', 'event_calendar') == 24 ? 'H(:mm)' : 'h(:mm)t'; + // TODO: is there an easy way to avoid embedding JS? ?> <script> @@ -187,7 +189,8 @@ fullcalendarInit = function() { month: elgg.echo('event_calendar:month_label'), week: elgg.echo('event_calendar:week_label'), day: elgg.echo('event_calendar:day_label') - } + }, + timeFormat: "<?php echo $timeformat; ?>", }); } -- cgit v1.2.3 From 471a4c609d72dd95c99b592ec40c624290e942d2 Mon Sep 17 00:00:00 2001 From: Sem <sembrestels@riseup.net> Date: Thu, 30 Aug 2012 02:04:03 +0200 Subject: Replaced javascript alert by elgg popup in ical button. --- models/model.php | 11 ++++++++++- views/default/event_calendar/css.php | 4 ++++ views/default/js/event_calendar/event_calendar.php | 5 ++--- 3 files changed, 16 insertions(+), 4 deletions(-) diff --git a/models/model.php b/models/model.php index 69961969c..e7f823d4c 100644 --- a/models/model.php +++ b/models/model.php @@ -1519,13 +1519,22 @@ function event_calendar_get_page_content_list($page_type,$container_guid,$start_ 'href' => $url, 'title' => elgg_echo('feed:ical'), 'priority' => 800, + 'rel' => 'popup', ); $menu_item = ElggMenuItem::factory($menu_options); elgg_register_menu_item('extras', $menu_item); $body = elgg_view_layout("content", $params); + $body .= elgg_view_module('popup', elgg_echo('feed:ical'), elgg_echo('event_calendar:ical_popup_message') . elgg_view('output/url', array( + 'href' => $url, + 'text' => elgg_echo('export'), + 'class' => 'elgg-button elgg-button-action', + )), array( + 'id' => 'event-calendar-ical', + 'class' => 'event-calendar-ical hidden', + )); - return elgg_view_page($title,$body); + return elgg_view_page($title, $body); } function event_calendar_get_page_content_edit($page_type,$guid,$start_date='') { diff --git a/views/default/event_calendar/css.php b/views/default/event_calendar/css.php index c1dbf4633..9ef2ecfa1 100644 --- a/views/default/event_calendar/css.php +++ b/views/default/event_calendar/css.php @@ -38,6 +38,10 @@ ul#calendarmenu li a:hover, ul#calendarmenu li.sys_selected a{ background: <?php echo $highlight_colour; ?>; } +.event-calendar-ical { + width: 200px; +} + td.ui-datepicker-unselectable { background-color: #FFFFFF !important; color: #888888 !important; diff --git a/views/default/js/event_calendar/event_calendar.php b/views/default/js/event_calendar/event_calendar.php index 65c4d2952..6150feb79 100644 --- a/views/default/js/event_calendar/event_calendar.php +++ b/views/default/js/event_calendar/event_calendar.php @@ -96,9 +96,8 @@ elgg.event_calendar.handleRegionChange = function(e) { } elgg.event_calendar.handleIcalPopup = function(e) { - var message = elgg.echo('event_calendar:ical_popup_message')+"\n"+this.href; - alert(message); - return false; + this.href = '#event-calendar-ical'; + e.preventDefault(); } elgg.event_calendar.handlePagedPersonalCalendarToggle = function() { -- cgit v1.2.3 From 2374f4ca4b0b064118cd6cc33f8315a60715c3d4 Mon Sep 17 00:00:00 2001 From: Sem <sembrestels@riseup.net> Date: Thu, 30 Aug 2012 04:01:58 +0200 Subject: Refactored edit form. --- languages/en.php | 1 + models/model.php | 1 - views/default/event_calendar/css.php | 37 +++------------- views/default/event_calendar/datetime_edit.php | 2 +- .../default/event_calendar/repeat_form_element.php | 49 +++++++++------------- views/default/event_calendar/share_section.php | 6 +-- views/default/forms/event_calendar/edit.php | 42 +++++++++---------- views/default/js/event_calendar/event_calendar.php | 4 +- 8 files changed, 52 insertions(+), 90 deletions(-) diff --git a/languages/en.php b/languages/en.php index 8e42580de..dfbe0cda4 100644 --- a/languages/en.php +++ b/languages/en.php @@ -291,6 +291,7 @@ You can manage calendar requests for this event here: '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:basic:header' => "Basic info", 'event_calendar:schedule:header' => "Schedule", 'event_calendar:permissions:header' => "Permissions", 'event_calendar:read_access' => "Read access", diff --git a/models/model.php b/models/model.php index e7f823d4c..4668f005a 100644 --- a/models/model.php +++ b/models/model.php @@ -1541,7 +1541,6 @@ function event_calendar_get_page_content_edit($page_type,$guid,$start_date='') { elgg_load_js('elgg.event_calendar'); $vars = array(); $vars['id'] = 'event-calendar-edit'; - $vars['name'] = 'event_calendar_edit'; // just in case a feature adds an image upload $vars['enctype'] = 'multipart/form-data'; diff --git a/views/default/event_calendar/css.php b/views/default/event_calendar/css.php index 9ef2ecfa1..00cfd6cbb 100644 --- a/views/default/event_calendar/css.php +++ b/views/default/event_calendar/css.php @@ -175,39 +175,12 @@ li.event-calendar-filter-menu-show-only { margin-right: 10px; } -.event-calendar-medium-text { - width: 500px !important; -} - -.event-calendar-edit-form-block label { - float: left; - width: 90px; - margin-top: 5px; -} - -.event-calendar-long-text { - width: 500px !important; -} - -.event-calendar-edit-form-other-block .mceLayout { - width: 500px !important; -} - -.event-calendar-edit-form { - background-color: #FFFFFF; -} - -.event-calendar-edit-form-block { - width: 90%; - background-color: #DDDDDD; - border-width:1px; - border-style:solid; - border-color:#bfbfbf; - padding: 5px; - margin-bottom: 10px; - clear: both; +fieldset > legend { + font-weight: bold; + font-size: 1.2em; + line-height: 1.1em; + padding-bottom: 5px; } - .event-calendar-repeating-wrapper { padding: 0; margin-top: 5px; diff --git a/views/default/event_calendar/datetime_edit.php b/views/default/event_calendar/datetime_edit.php index 64af30f53..7abc3bb62 100644 --- a/views/default/event_calendar/datetime_edit.php +++ b/views/default/event_calendar/datetime_edit.php @@ -30,7 +30,7 @@ if ($event_calendar_times != 'no') { $body .= elgg_view("input/timepicker",array('name' => 'end_time','value'=>$vars['end_time'])); $body .= '</span>'; } - $body .= '</p></span>'; + $body .= '</p>'; } else { $body .= '<p><label>'.elgg_echo("event_calendar:start_date_label").'<br />'; diff --git a/views/default/event_calendar/repeat_form_element.php b/views/default/event_calendar/repeat_form_element.php index 45fdabfa1..5de858caf 100644 --- a/views/default/event_calendar/repeat_form_element.php +++ b/views/default/event_calendar/repeat_form_element.php @@ -1,6 +1,8 @@ <?php $event = $vars['event']; $fd = $vars['form_data']; +$days = array('monday', 'tuesday', 'wednesday', 'thursday', 'friday', 'saturday', 'sunday'); + if ($fd['repeats'] == 'yes') { echo elgg_view('input/checkbox',array('name'=>'repeats','value'=>'yes','checked'=>'checked')); } else { @@ -10,34 +12,21 @@ echo elgg_echo('event_calendar:repeat_interval_label').' '; echo elgg_view('input/dropdown',array('name'=>'repeat_interval','value'=>$fd['repeat_interval'],'options_values'=>array('1'=>'1','2'=>'2','3'=>'3','4'=>'4','5'=>'5','6'=>'6','7'=>'7','8'=>'8'))); echo ' '.elgg_echo('event_calendar:repeat_weeks'); echo ' '.elgg_echo('event_calendar:on_these_days'); -?> -<div class="event-calendar-repeating-wrapper"> -<a id="event-calendar-repeating-monday" href="javascript:void(0);" class="event-calendar-repeating-unselected"> - <?php echo elgg_echo('event_calendar:day_abbrev:monday'); ?> + +echo '<div class="event-calendar-repeating-wrapper">'; + +foreach($days as $day) { + $label = elgg_echo("event_calendar:day_abbrev:$day"); + echo <<<HTML +<a id="event-calendar-repeating-$day" href="javascript:void(0);" class="event-calendar-repeating-unselected"> + $label </a> -<a id="event-calendar-repeating-tuesday" href="javascript:void(0);" class="event-calendar-repeating-unselected"> - <?php echo elgg_echo('event_calendar:day_abbrev:tuesday'); ?> -</a> -<a id="event-calendar-repeating-wednesday" href="javascript:void(0);" class="event-calendar-repeating-unselected"> - <?php echo elgg_echo('event_calendar:day_abbrev:wednesday'); ?> -</a> -<a id="event-calendar-repeating-thursday" href="javascript:void(0);" class="event-calendar-repeating-unselected"> - <?php echo elgg_echo('event_calendar:day_abbrev:thursday'); ?> -</a> -<a id="event-calendar-repeating-friday" href="javascript:void(0);" class="event-calendar-repeating-unselected"> - <?php echo elgg_echo('event_calendar:day_abbrev:friday'); ?> -</a> -<a id="event-calendar-repeating-saturday" href="javascript:void(0);" class="event-calendar-repeating-unselected"> - <?php echo elgg_echo('event_calendar:day_abbrev:saturday'); ?> -</a> -<a id="event-calendar-repeating-sunday" href="javascript:void(0);" class="event-calendar-repeating-unselected"> - <?php echo elgg_echo('event_calendar:day_abbrev:sunday'); ?> -</a> -</div> -<input type="hidden" name="event-calendar-repeating-monday-value" value="<?php echo $fd['event-calendar-repeating-monday-value']; ?>"> -<input type="hidden" name="event-calendar-repeating-tuesday-value" value="<?php echo $fd['event-calendar-repeating-tuesday-value']; ?>"> -<input type="hidden" name="event-calendar-repeating-wednesday-value" value="<?php echo $fd['event-calendar-repeating-wednesday-value']; ?>"> -<input type="hidden" name="event-calendar-repeating-thursday-value" value="<?php echo $fd['event-calendar-repeating-thursday-value']; ?>"> -<input type="hidden" name="event-calendar-repeating-friday-value" value="<?php echo $fd['event-calendar-repeating-friday-value']; ?>"> -<input type="hidden" name="event-calendar-repeating-saturday-value" value="<?php echo $fd['event-calendar-repeating-saturday-value']; ?>"> -<input type="hidden" name="event-calendar-repeating-sunday-value" value="<?php echo $fd['event-calendar-repeating-sunday-value']; ?>"> +HTML; + +} + +echo '</div>'; + +foreach($days as $day) { + echo elgg_view('input/hidden', array('name' => "event-calendar-repeating-$day-value", 'value' => $fd["event-calendar-repeating-$day-value"])); +} \ No newline at end of file diff --git a/views/default/event_calendar/share_section.php b/views/default/event_calendar/share_section.php index 134f07656..c4f6cf45f 100644 --- a/views/default/event_calendar/share_section.php +++ b/views/default/event_calendar/share_section.php @@ -1,8 +1,8 @@ <?php $fd = $vars['form_data']; $event_calendar_hide_access = elgg_get_plugin_setting('hide_access', 'event_calendar'); -$body = '<div class="event-calendar-edit-form-block event-calendar-edit-form-share-block">'; -$body .= '<h2>'.elgg_echo('event_calendar:permissions:header').'</h2>'; +$body = '<fieldset>'; +$body .= '<legend>'.elgg_echo('event_calendar:permissions:header').'</legend>'; if($event_calendar_hide_access == 'yes') { $event_calendar_default_access = elgg_get_plugin_setting('default_access', 'event_calendar'); if($event_calendar_default_access) { @@ -21,6 +21,6 @@ if (elgg_plugin_exists('entity_admins')) { $body .= elgg_echo('event_calendar:share_ownership:description'); $body .= elgg_view('input/entity_admins_dropdown',array('entity'=>$vars['event'])); } -$body .= '</div>'; +$body .= '</fieldset>'; echo $body; diff --git a/views/default/forms/event_calendar/edit.php b/views/default/forms/event_calendar/edit.php index 33849962c..d45fb387b 100644 --- a/views/default/forms/event_calendar/edit.php +++ b/views/default/forms/event_calendar/edit.php @@ -70,38 +70,38 @@ $all_day = $fd['all_day']; $schedule_type = $fd['schedule_type']; $long_description = $fd['long_description']; -$body = '<div class="event-calendar-edit-form">'; +$body = '<div>'; $body .= elgg_view('input/hidden',array('name'=>'event_action', 'value'=>$event_action)); $body .= elgg_view('input/hidden',array('name'=>'event_guid', 'value'=>$event_guid)); -$body .= '<div class="event-calendar-edit-form-block event-calendar-edit-form-top-block">'; +$body .= '<fieldset>'; +$body .= '<legend>' . elgg_echo('event_calendar:basic:header') . '</legend>'; $body .= '<p><label>'.elgg_echo("event_calendar:title_label").'</label>'; -$body .= elgg_view("input/text",array('name' => 'title','class'=>'event-calendar-medium-text','value'=>$title)); +$body .= elgg_view("input/text",array('name' => 'title', 'value' => $title)); $body .= '</p>'; $body .= '<p class="event-calendar-description">'.$prefix['title'].elgg_echo('event_calendar:title_description').'</p>'; $body .= '<p><label>'.elgg_echo("event_calendar:venue_label").'</label>'; -$body .= elgg_view("input/text",array('name' => 'venue','class'=>'event-calendar-medium-text','value'=>$venue)); +$body .= elgg_view("input/text",array('name' => 'venue', 'value' => $venue)); $body .= '</p>'; $body .= '<p class="event-calendar-description">'.$prefix['venue'].elgg_echo('event_calendar:venue_description').'</p>'; if ($event_calendar_fewer_fields != 'yes') { $body .= '<p><label>'.elgg_echo("event_calendar:brief_description_label").'</label>'; - $body .= elgg_view("input/text",array('name' => 'description','class'=>'event-calendar-medium-text','value'=>$brief_description)); + $body .= elgg_view("input/text",array('name' => 'description', 'value' => $brief_description)); $body .= '</p>'; $body .= '<p class="event-calendar-description">'.$prefix['brief_description'].elgg_echo('event_calendar:brief_description_description').'</p>'; } else { - $body .= '<p><label>'.elgg_echo("event_calendar:long_description_label").'</label>'; - $body .= elgg_view("input/longtext",array('name' => 'long_description','class'=>'event-calendar-long-text','value'=>$long_description)); - $body .= '</p>'; + $body .= '<label>'.elgg_echo("event_calendar:long_description_label").'</label>'; + $body .= elgg_view("input/longtext",array('name' => 'long_description', 'value' => $long_description)); $body .= '<p class="event-calendar-description">'.$prefix['long_description'].elgg_echo('event_calendar:long_description_description').'</p>'; } $body .= '<p><label>'.elgg_echo("event_calendar:event_tags_label").'</label>'; -$body .= elgg_view("input/tags",array('name' => 'tags','class'=>'event-calendar-medium-text','value'=>$event_tags)); +$body .= elgg_view("input/tags",array('name' => 'tags', 'value' => $event_tags)); $body .= '</p>'; $body .= '<p class="event-calendar-description">'.$prefix['event_tags'].elgg_echo('event_calendar:event_tags_description').'</p>'; @@ -125,11 +125,11 @@ if($event_calendar_bbb_server_url) { $body .= '</p>'; } -$body .= '</div>'; +$body .= '</fieldset>'; -$body .= '<div class="event-calendar-edit-form-block event-calendar-edit-form-schedule-block">'; -$body .= '<h2>'.elgg_echo('event_calendar:schedule:header').'</h2>'; -$body .= elgg_view('input/radio',array('id'=>'event-calendar-edit-schedule-type','name'=>'schedule_type','value'=>$schedule_type,'options'=>$schedule_options)); +$body .= '<fieldset>'; +$body .= '<legend>'.elgg_echo('event_calendar:schedule:header').'</legend>'; +$body .= elgg_view('input/radio',array('name'=>'schedule_type','value'=>$schedule_type,'options'=>$schedule_options)); $vars['prefix'] = $prefix; @@ -137,20 +137,20 @@ $body .= elgg_view('event_calendar/schedule_section',$vars); if ($event_calendar_spots_display == 'yes') { $body .= '<p><label>'.elgg_echo("event_calendar:spots_label").'<br />'; - $body .= elgg_view("input/text",array('name' => 'spots','class'=>'event-calendar-medium-text','value'=>$spots)); + $body .= elgg_view("input/text",array('name' => 'spots', 'value' => $spots)); $body .= '</label></p>'; $body .= '<p class="event-calendar-description">'.$prefix['spots'].elgg_echo('event_calendar:spots_description').'</p>'; } $body .= '<div class="event-calendar-edit-bottom"></div>'; -$body .= '</div>'; +$body .= '</fieldset>'; $body .= elgg_view('event_calendar/personal_manage_section',$vars); $body .= elgg_view('event_calendar/share_section',$vars); if ($event_calendar_region_display == 'yes' || $event_calendar_type_display == 'yes' || $event_calendar_fewer_fields != 'yes') { - $body .= '<div class="event-calendar-edit-form-block event-calendar-edit-form-other-block">'; + $body .= '<fieldset>'; if ($event_calendar_region_display == 'yes') { $region_list = trim(elgg_get_plugin_setting('region_list', 'event_calendar')); @@ -203,27 +203,27 @@ if ($event_calendar_region_display == 'yes' || $event_calendar_type_display == ' if ($event_calendar_fewer_fields != 'yes') { $body .= '<p><label>'.elgg_echo("event_calendar:fees_label").'</label>'; - $body .= elgg_view("input/text",array('name' => 'fees','class'=>'event-calendar-medium-text','value'=>$fees)); + $body .= elgg_view("input/text",array('name' => 'fees', 'value' => $fees)); $body .= '</p>'; $body .= '<p class="event-calendar-description">'.$prefix['fees'].elgg_echo('event_calendar:fees_description').'</p>'; $body .= '<p><label>'.elgg_echo("event_calendar:contact_label").'</label>'; - $body .= elgg_view("input/text",array('name' => 'contact','class'=>'event-calendar-medium-text','value'=>$contact)); + $body .= elgg_view("input/text",array('name' => 'contact', 'value' => $contact)); $body .= '</p>'; $body .= '<p class="event-calendar-description">'.$prefix['contact'].elgg_echo('event_calendar:contact_description').'</p>'; $body .= '<p><label>'.elgg_echo("event_calendar:organiser_label").'</label>'; - $body .= elgg_view("input/text",array('name' => 'organiser','class'=>'event-calendar-medium-text','value'=>$organiser)); + $body .= elgg_view("input/text",array('name' => 'organiser', 'value' => $organiser)); $body .= '</p>'; $body .= '<p class="event-calendar-description">'.$prefix['organiser'].elgg_echo('event_calendar:organiser_description').'</p>'; $body .= '<p><label>'.elgg_echo("event_calendar:long_description_label").'</label>'; - $body .= elgg_view("input/longtext",array('name' => 'long_description','class'=>'event-calendar-long-text','value'=>$long_description)); + $body .= elgg_view("input/longtext",array('name' => 'long_description', 'value' => $long_description)); $body .= '</p>'; $body .= '<p class="event-calendar-description">'.$prefix['long_description'].elgg_echo('event_calendar:long_description_description').'</p>'; } - $body .= '</div>'; + $body .= '</fieldset>'; } $body .= elgg_view('input/submit', array('name'=>'submit','value'=>elgg_echo('event_calendar:submit'))); diff --git a/views/default/js/event_calendar/event_calendar.php b/views/default/js/event_calendar/event_calendar.php index 6150feb79..360f39f6c 100644 --- a/views/default/js/event_calendar/event_calendar.php +++ b/views/default/js/event_calendar/event_calendar.php @@ -10,7 +10,7 @@ elgg.event_calendar.init = function () { $('.event-calendar-repeating-unselected').live('click',elgg.event_calendar.handleRepeatingSelect); $('.event-calendar-repeating-selected').live('click',elgg.event_calendar.handleRepeatingUnselect); $('#event-calendar-edit').submit(elgg.event_calendar.handleEditFormSubmit); - $('#event-calendar-edit-schedule-type').click(elgg.event_calendar.handleScheduleType); + $('input.elgg-input-radio[name="schedule_type"]').click(elgg.event_calendar.handleScheduleType); elgg.event_calendar.handleScheduleType(); var all_day_field = $('[name="all_day"][type="checkbox"]'); @@ -24,7 +24,7 @@ elgg.event_calendar.init = function () { } elgg.event_calendar.handleScheduleType = function(e) { - var st = $('#event-calendar-edit-schedule-type:checked').val(); + var st = $('input.elgg-input-radio[name="schedule_type"]:checked').val(); if (st == 'poll') { $(".event-calendar-edit-date-wrapper").hide(); $(".event-calendar-edit-reminder-wrapper").hide(); -- cgit v1.2.3 From 07e78b106e33c09dd46e874aca04c739e0140851 Mon Sep 17 00:00:00 2001 From: Sem <sembrestels@riseup.net> Date: Thu, 30 Aug 2012 06:17:57 +0200 Subject: Linked initial date and end date in edit form --- start.php | 2 ++ .../css/elements/forms/datepicker_multi.php | 39 ++++++++++++++++++++++ views/default/event_calendar/datetime_edit.php | 11 +++--- views/default/js/event_calendar/event_calendar.php | 13 ++++++++ 4 files changed, 58 insertions(+), 7 deletions(-) create mode 100644 views/default/css/elements/forms/datepicker_multi.php diff --git a/start.php b/start.php index 49312599f..bf22568cb 100644 --- a/start.php +++ b/start.php @@ -28,6 +28,8 @@ function event_calendar_init() { // Register granular notification for this type register_notification_object('object', 'event_calendar', elgg_echo('event_calendar:new_event')); + elgg_extend_view('css/elements/forms', 'css/elements/forms/datepicker_multi'); + // Set up site menu $site_calendar = elgg_get_plugin_setting('site_calendar', 'event_calendar'); if (!$site_calendar || $site_calendar != 'no') { diff --git a/views/default/css/elements/forms/datepicker_multi.php b/views/default/css/elements/forms/datepicker_multi.php new file mode 100644 index 000000000..4a18bdad1 --- /dev/null +++ b/views/default/css/elements/forms/datepicker_multi.php @@ -0,0 +1,39 @@ +<?php + +?> + +.ui-datepicker.ui-datepicker-multi { + width: auto; +} +.ui-datepicker-multi .ui-datepicker-group { + float: left; +} +.ui-datepicker-multi .ui-datepicker-group table { + margin-bottom: 0.4em; + margin-left: auto; + margin-right: auto; + margin-top: 0; + width: 95%; +} +.ui-datepicker-multi-2 .ui-datepicker-group { + width: 50%; +} +.ui-datepicker-multi-3 .ui-datepicker-group { + width: 33.3%; +} +.ui-datepicker-multi-4 .ui-datepicker-group { + width: 25%; +} +.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header { + border-left-width-ltr-source: physical; + border-left-width-rtl-source: physical; + border-left-width-value: 0; +} +.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header { + border-left-width-ltr-source: physical; + border-left-width-rtl-source: physical; + border-left-width-value: 0; +} +.ui-datepicker-multi .ui-datepicker-buttonpane { + clear: left; +} diff --git a/views/default/event_calendar/datetime_edit.php b/views/default/event_calendar/datetime_edit.php index 7abc3bb62..2e0830167 100644 --- a/views/default/event_calendar/datetime_edit.php +++ b/views/default/event_calendar/datetime_edit.php @@ -8,20 +8,17 @@ if ($event_calendar_times != 'no') { if ($event_calendar_hide_end != 'yes') { $body .= '<p><label>'.elgg_echo('event_calendar:from_label').'</label>'; } - $body .= elgg_view("event_calendar/input/date_local",array( - //'timestamp'=>TRUE, - 'autocomplete'=>'off', + $body .= elgg_view("input/date", array( 'class'=>'event-calendar-compressed-date', 'name' => 'start_date', - 'value'=>$vars['start_date'])); + 'value'=>$vars['start_date'], + )); $body .= '<span id="event-calendar-start-time-wrapper">'; $body .= elgg_view("input/timepicker",array('name' => 'start_time','value'=>$vars['start_time'])); $body .= '</span>'; if ($event_calendar_hide_end != 'yes') { $body .= '</p><p id="event-calendar-to-time-wrapper"><label>'.elgg_echo('event_calendar:to_label').'</label>'; - $body .= elgg_view("event_calendar/input/date_local",array( - //'timestamp'=>TRUE, - 'autocomplete'=>'off', + $body .= elgg_view("input/date", array( 'class'=>'event-calendar-compressed-date', 'name' => 'end_date', 'value'=>$vars['end_date'], diff --git a/views/default/js/event_calendar/event_calendar.php b/views/default/js/event_calendar/event_calendar.php index 360f39f6c..f9e3d63c2 100644 --- a/views/default/js/event_calendar/event_calendar.php +++ b/views/default/js/event_calendar/event_calendar.php @@ -21,6 +21,11 @@ elgg.event_calendar.init = function () { $('#event-calendar-end-time-wrapper').attr('disabled','disabled'); } all_day_field.change(elgg.event_calendar.handleAllDayField); + + $('.elgg-input-date[name="start_date"], .elgg-input-date[name="end_date"]').datepicker({ + numberOfMonths: 3, + onSelect: elgg.event_calendar.handleDateRangeSelect, + }); } elgg.event_calendar.handleScheduleType = function(e) { @@ -61,6 +66,14 @@ elgg.event_calendar.handleAllDayField = function(e) { } } +elgg.event_calendar.handleDateRangeSelect = function(selectedDate) { + if (this.name == 'start_date') { + $('.elgg-input-date[name="end_date"]').datepicker("option", "minDate", selectedDate); + } else { + $('.elgg-input-date[name="start_date"]').datepicker("option", "maxDate", selectedDate); + } +} + elgg.event_calendar.handleEditFormSubmit = function(e) { if ($.trim($('[name="title"]').val()) == '') { alert(elgg.echo('event_calendar:edit_form:error:missing_title')); -- cgit v1.2.3 From fd07413a72bb4a1fc8609dd0194e7d718ed98b18 Mon Sep 17 00:00:00 2001 From: Sem <sembrestels@riseup.net> Date: Thu, 30 Aug 2012 10:06:49 +0200 Subject: Fixed range datepicker. --- views/default/js/event_calendar/event_calendar.php | 1 + 1 file changed, 1 insertion(+) diff --git a/views/default/js/event_calendar/event_calendar.php b/views/default/js/event_calendar/event_calendar.php index f9e3d63c2..efa1dc1dd 100644 --- a/views/default/js/event_calendar/event_calendar.php +++ b/views/default/js/event_calendar/event_calendar.php @@ -23,6 +23,7 @@ elgg.event_calendar.init = function () { all_day_field.change(elgg.event_calendar.handleAllDayField); $('.elgg-input-date[name="start_date"], .elgg-input-date[name="end_date"]').datepicker({ + dateFormat: 'yy-mm-dd', numberOfMonths: 3, onSelect: elgg.event_calendar.handleDateRangeSelect, }); -- cgit v1.2.3 From e2410ff02068bd012174ff31b143c11f65f0f485 Mon Sep 17 00:00:00 2001 From: Kevin Jardine <kevinjardine@yahoo.com> Date: Fri, 7 Sep 2012 11:29:38 +0200 Subject: join now recreates conference if necessary --- actions/event_calendar/join_conference.php | 20 ++++ languages/en.php | 2 + models/model.php | 116 +++++++++++++++++++-- start.php | 2 +- views/default/event_calendar/conference_button.php | 5 +- views/default/forms/event_calendar/edit.php | 2 +- 6 files changed, 137 insertions(+), 10 deletions(-) create mode 100644 actions/event_calendar/join_conference.php diff --git a/actions/event_calendar/join_conference.php b/actions/event_calendar/join_conference.php new file mode 100644 index 000000000..9eb8f0da9 --- /dev/null +++ b/actions/event_calendar/join_conference.php @@ -0,0 +1,20 @@ +<?php +// extended logic for BBB +elgg_load_library('elgg:event_calendar'); + +$event_guid = get_input('event_guid'); +$event = get_entity($event_guid); +if (elgg_instanceof($event,'object','event_calendar')) { + // make sure that the conference still exists, and if not, try recreating it + if (event_calendar_conference_exists($event)) { + event_calendar_join_conference($event); + } else if (event_calendar_create_bbb_conf($event)) { + event_calendar_join_conference($event); + } else { + register_error(elgg_echo('event_calendar:couldnotjoin')); + forward($event->getURL()); + } +} else { + register_error(elgg_echo('event_calendar:error_nosuchevent')); + forward('event_calendar/list'); +} diff --git a/languages/en.php b/languages/en.php index 3fd9cf7cb..3b6f7f249 100644 --- a/languages/en.php +++ b/languages/en.php @@ -328,7 +328,9 @@ You can visit the event page here: 'event_calendar:bbb_server_url' => "Big Blue Button server URL (must end with slash)", 'event_calendar:bbb_security_salt' => "Big Blue Button security salt", 'event_calendar:bbb_create_error' => "Error: unable to create BBB conference, message was: %s", + 'event_calendar:conference_create_error' => "Error: unable to create web conference.", 'event_calendar:bbb_settings_error' => "Error: must set conference URL and salt in plugin settings", + 'event_calendar:couldnotjoin' => "Error: unable to join conference.", 'event_calendar:join_conf_button' => "Join conference", 'event_calendar:poll_suffix' => "(poll)", diff --git a/models/model.php b/models/model.php index 32a9c928a..6680409db 100644 --- a/models/model.php +++ b/models/model.php @@ -184,7 +184,9 @@ function event_calendar_set_event_from_form($event_guid,$group_guid) { } if ($event->save()) { if (!$event_guid && $event->web_conference) { - event_calendar_create_bbb_conf($event); + if (!event_calendar_create_bbb_conf($event)) { + register_error(elgg_echo('event_calendar:conference_create_error')); + } } if ($group_guid && (elgg_get_plugin_setting('autogroup', 'event_calendar') == 'yes')) { event_calendar_add_personal_events_from_group($event->guid,$group_guid); @@ -2282,7 +2284,7 @@ function event_calendar_queue_reminder($e) { } } -function event_calendar_create_bbb_conf($event) { +/*function event_calendar_create_bbb_conf($event) { $bbb_security_salt = elgg_get_plugin_setting('bbb_security_salt','event_calendar'); $bbb_server_url = rtrim(elgg_get_plugin_setting('bbb_server_url','event_calendar'), '/') . '/'; if ($bbb_security_salt) { @@ -2311,11 +2313,11 @@ function event_calendar_create_bbb_conf($event) { // close curl resource to free up system resources curl_close($ch); - /*error_log("BBB create request:"); - error_log($bbb_server_url.'api/create?'.$params); + #error_log("BBB create request:"); + #error_log($bbb_server_url.'api/create?'.$params); - error_log("BBB create response:"); - error_log($output);*/ + #error_log("BBB create response:"); + #error_log($output); $xml = new SimpleXMLElement($output); if ($xml->returncode == 'SUCCESS') { @@ -2327,6 +2329,108 @@ function event_calendar_create_bbb_conf($event) { } else { register_error(elgg_echo('event_calendar:bbb_settings_error')); } +}*/ + +// utility function for BBB api calls +function event_calendar_bbb_api($api_function,$params=NULL) { + + $bbb_security_salt = elgg_get_plugin_setting('bbb_security_salt','event_calendar'); + $bbb_server_url = rtrim(elgg_get_plugin_setting('bbb_server_url','event_calendar'), '/') . '/'; + if ($bbb_security_salt) { + if (isset($params) && is_array($params) && count($params) > 0) { + $query = array(); + foreach($params as $k => $v) { + $query[] = $k.'='.rawurlencode($v); + } + $qs = implode('&',$query); + } else { + $qs = ''; + } + $checksum = sha1($api_function.$qs.$bbb_security_salt); + if ($qs) { + $qs .= "&checksum=$checksum"; + } + + // create curl resource + $ch = curl_init(); + + // set url + curl_setopt($ch, CURLOPT_URL, $bbb_server_url.'api/'.$api_function.'?'.$qs); + + //return the transfer as a string + curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); + + // $output contains the output string + $output = curl_exec($ch); + + // close curl resource to free up system resources + curl_close($ch); + + error_log("BBB api call: ".$api_function); + error_log(print_r($params,TRUE)); + error_log("BBB response: \n".$output); + return $output; + } else { + return FALSE; + } +} + +function event_calendar_create_bbb_conf($event) { + $day_in_minutes = 60*24; + $now = time(); + // fix duration bug + # $duration = (int)(($event->real_end_time-$event->start_date)/60)+$day_in_minutes; + $duration = (int)(($event->real_end_time-$now)/60)+$day_in_minutes; + $title = urlencode($event->title); + $output = event_calendar_bbb_api('create',array('meetingID'=>$event->guid,'name'=>$title,'duration'=>$duration)); + if ($output) { + $xml = new SimpleXMLElement($output); + if ($xml->returncode == 'SUCCESS') { + $event->bbb_attendee_password = (string) $xml->attendeePW; + $event->bbb_moderator_password = (string) $xml->moderatorPW; + return TRUE; + } else { + return FALSE; + } + } else { + return FALSE; + } +} + +// checks to see if a BBB conference is actually running +function event_calendar_is_conference_running($event) { + $output = event_calendar_bbb_api('isMeetingRunning',array('meetingID'=>$event->guid)); + if (!$output) { + return FALSE; + } else { + $xml = new SimpleXMLElement($output); + if ($xml->returncode == 'SUCCESS' && $xml->running == 'true') { + return TRUE; + } else { + return FALSE; + } + } +} + +// checks to see if a BBB conference exists +function event_calendar_conference_exists($event) { + $output = event_calendar_bbb_api('getMeetingInfo',array('meetingID'=>$event->guid,'password'=>$event->bbb_moderator_password)); + if (!$output) { + return FALSE; + } else { + $xml = new SimpleXMLElement($output); + if ($xml->returncode == 'SUCCESS' && $xml->meetingID == $event->guid) { + return TRUE; + } else { + return FALSE; + } + } +} + +// forwards to the join link +// this function assumes that the conference is running +function event_calendar_join_conference($event) { + forward(event_calendar_get_join_bbb_url($event)); } function event_calendar_get_join_bbb_url($event) { diff --git a/start.php b/start.php index 49312599f..ad635c598 100644 --- a/start.php +++ b/start.php @@ -110,7 +110,7 @@ function event_calendar_init() { elgg_register_action("event_calendar/remove_from_group_members","$action_path/remove_from_group_members.php"); elgg_register_action("event_calendar/manage_subscribers","$action_path/manage_subscribers.php"); elgg_register_action("event_calendar/modify_full_calendar","$action_path/modify_full_calendar.php"); - + elgg_register_action("event_calendar/join_conference","$action_path/join_conference.php"); } /** diff --git a/views/default/event_calendar/conference_button.php b/views/default/event_calendar/conference_button.php index baa30cc68..79fa9c5a2 100644 --- a/views/default/event_calendar/conference_button.php +++ b/views/default/event_calendar/conference_button.php @@ -2,7 +2,7 @@ // A non-admin / non-event-creator only sees the button if they have the event on his/her personal calendar // and it is at most 15 minutes before the conference starts. -// The button is removed for everyone (even admins) one day after the conference ends. +// The button is removed for everyone (even admins) one day after the event end time. $event = $vars['event']; @@ -21,10 +21,11 @@ if ($event) { } if ( $in_time_window ) { $button = elgg_view('output/url', array( - 'href' => event_calendar_get_join_bbb_url($event), + 'href' => 'action/event_calendar/join_conference?event_guid='.$event->guid, 'text' => elgg_echo('event_calendar:join_conf_button'), 'class' => 'elgg-button elgg-button-action', 'target' => '_blank', + 'is_action' => TRUE, )); echo '<div class="event-calendar-conf-join-button">'.$button.'</div>'; diff --git a/views/default/forms/event_calendar/edit.php b/views/default/forms/event_calendar/edit.php index 2ba744fc4..c2210c5f8 100644 --- a/views/default/forms/event_calendar/edit.php +++ b/views/default/forms/event_calendar/edit.php @@ -7,7 +7,7 @@ $schedule_options = array( elgg_echo('event_calendar:schedule_type:fixed')=>'fixed', ); -if (elgg_plugin_exists('event_poll')) { +if (elgg_is_active_plugin('event_poll')) { $schedule_options = array_merge(array(elgg_echo('event_calendar:schedule_type:poll')=>'poll'),$schedule_options); } -- cgit v1.2.3 From b8e251041130fe0c26c9a7f0357b7317fae0bde4 Mon Sep 17 00:00:00 2001 From: Kevin Jardine <kevinjardine@yahoo.com> Date: Fri, 7 Sep 2012 11:41:57 +0200 Subject: do not create conferences with negative durations --- models/model.php | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/models/model.php b/models/model.php index 6680409db..05378217e 100644 --- a/models/model.php +++ b/models/model.php @@ -2381,14 +2381,18 @@ function event_calendar_create_bbb_conf($event) { // fix duration bug # $duration = (int)(($event->real_end_time-$event->start_date)/60)+$day_in_minutes; $duration = (int)(($event->real_end_time-$now)/60)+$day_in_minutes; - $title = urlencode($event->title); - $output = event_calendar_bbb_api('create',array('meetingID'=>$event->guid,'name'=>$title,'duration'=>$duration)); - if ($output) { - $xml = new SimpleXMLElement($output); - if ($xml->returncode == 'SUCCESS') { - $event->bbb_attendee_password = (string) $xml->attendeePW; - $event->bbb_moderator_password = (string) $xml->moderatorPW; - return TRUE; + if ($duration > 0) { + $title = urlencode($event->title); + $output = event_calendar_bbb_api('create',array('meetingID'=>$event->guid,'name'=>$title,'duration'=>$duration)); + if ($output) { + $xml = new SimpleXMLElement($output); + if ($xml->returncode == 'SUCCESS') { + $event->bbb_attendee_password = (string) $xml->attendeePW; + $event->bbb_moderator_password = (string) $xml->moderatorPW; + return TRUE; + } else { + return FALSE; + } } else { return FALSE; } -- cgit v1.2.3 From e858bc7203426e6782b99a627bbfa1668e9d590d Mon Sep 17 00:00:00 2001 From: Kevin Jardine <kevinjardine@yahoo.com> Date: Sat, 6 Oct 2012 08:55:10 +0200 Subject: fixed problem with multiple repeating events --- models/model.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/models/model.php b/models/model.php index 05378217e..6646442e8 100644 --- a/models/model.php +++ b/models/model.php @@ -293,8 +293,8 @@ function event_calendar_get_repeating_event_structure($events, $start_date, $end $dow = array('monday','tuesday','wednesday','thursday','friday','saturday','sunday'); $repeating_events = array(); if ($events) { - $incs = array(); foreach($events as $e) { + $incs = array(); $repeat_data = array(); $day_num = date('N',$e->start_date)-1; for($d=0;$d<7;$d++) { -- cgit v1.2.3 From 75bd3af84a76345928a831eecbc5d0f99f9fead4 Mon Sep 17 00:00:00 2001 From: Kevin Jardine <kevinjardine@yahoo.com> Date: Sat, 6 Oct 2012 09:10:39 +0200 Subject: RSS feeds now work again --- views/rss/event_calendar/show_events.php | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/views/rss/event_calendar/show_events.php b/views/rss/event_calendar/show_events.php index add5b75db..40c67ff6a 100644 --- a/views/rss/event_calendar/show_events.php +++ b/views/rss/event_calendar/show_events.php @@ -9,7 +9,16 @@ * @link http://radagast.biz/ * */ + +elgg_load_library('elgg:event_calendar'); if ($vars['events']) { - echo elgg_view_entity_list($vars['events'], $vars['count'], $vars['offset'], $vars['limit'], false, false); + $options = array( + 'count' => $vars['count'], + 'offset' => 0, + 'limit' => 15, + 'list_type_toggle' => FALSE, + 'pagination' => FALSE, + ); + // echo elgg_view_entity_list($vars['events'], $vars['count'], $vars['offset'], $vars['limit'], false, false); + echo elgg_view_entity_list(event_calendar_flatten_event_structure($vars['events']), $options); } -?> \ No newline at end of file -- cgit v1.2.3 From 49779a932de82bf4a9106d1bb373e9077f6f0bc6 Mon Sep 17 00:00:00 2001 From: Sem <sembrestels@riseup.net> Date: Sun, 21 Oct 2012 12:21:51 +0200 Subject: Changed river icons. --- .../default/river/object/event_calendar/create.php | 23 +++++++--------------- .../default/river/object/event_calendar/update.php | 19 ++++++++---------- 2 files changed, 15 insertions(+), 27 deletions(-) diff --git a/views/default/river/object/event_calendar/create.php b/views/default/river/object/event_calendar/create.php index e74a8f891..515389411 100644 --- a/views/default/river/object/event_calendar/create.php +++ b/views/default/river/object/event_calendar/create.php @@ -1,22 +1,13 @@ <?php - - /*$performed_by = get_entity($vars['item']->subject_guid); - $object = get_entity($vars['item']->object_guid); - - $url = "<a href=\"{$performed_by->getURL()}\">{$performed_by->name}</a>"; - $string = sprintf(elgg_echo("event_calendar:river:created"),$url) . " "; - $string .= elgg_echo("event_calendar:river:create")." <a href=\"" . $object->getURL() . "\">" . $object->title . "</a>";*/ - /** - * Event calendar river view. + * Event river view. */ +elgg_load_library('elgg:event_calendar'); + $object = $vars['item']->getObjectEntity(); -$excerpt = strip_tags($object->description); -$vars['excerpt'] = elgg_get_excerpt($excerpt); -echo elgg_view('page/components/image_block', array( - 'image' => '<img src="'.$vars['url'] . 'mod/event_calendar/images/event_icon.gif" />', - 'body' => elgg_view('river/elements/body', $vars), - 'class' => 'elgg-river-item', -)); \ No newline at end of file +echo elgg_view('river/elements/layout', array( + 'item' => $vars['item'], + 'message' => event_calendar_get_formatted_time($object), +)); diff --git a/views/default/river/object/event_calendar/update.php b/views/default/river/object/event_calendar/update.php index f4526cd2a..515389411 100644 --- a/views/default/river/object/event_calendar/update.php +++ b/views/default/river/object/event_calendar/update.php @@ -1,16 +1,13 @@ <?php +/** + * Event river view. + */ + +elgg_load_library('elgg:event_calendar'); - /*$performed_by = get_entity($vars['item']->subject_guid); - $object = get_entity($vars['item']->object_guid); - - $url = "<a href=\"{$performed_by->getURL()}\">{$performed_by->name}</a>"; - $string = sprintf(elgg_echo("event_calendar:river:updated"),$url) . " "; - $string .= elgg_echo("event_calendar:river:the_event")." <a href=\"" . $object->getURL() . "\">" . $object->title . "</a>";*/ - $object = $vars['item']->getObjectEntity(); -echo elgg_view('page/components/image_block', array( - 'image' => '<img src="'.$vars['url'] . 'mod/event_calendar/images/event_icon.gif" />', - 'body' => elgg_view('river/elements/body', $vars), - 'class' => 'elgg-river-item', +echo elgg_view('river/elements/layout', array( + 'item' => $vars['item'], + 'message' => event_calendar_get_formatted_time($object), )); -- cgit v1.2.3 From c9d2a7c80825ea508fa30faad4a5acb43e32574a Mon Sep 17 00:00:00 2001 From: Pablo Martin <caedes@sindominio.net> Date: Mon, 29 Oct 2012 19:16:58 +0000 Subject: little fix. --- languages/es.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/languages/es.php b/languages/es.php index 2f835f9f5..0ea5805ec 100644 --- a/languages/es.php +++ b/languages/es.php @@ -96,7 +96,7 @@ $language = array ( 'event_calendar:region_filter_by_label' => 'Filtro por región:', 'event_calendar:settings:first_date:title' => 'Primera fecha permitida (en el formato AAAA - MM- DD)', 'event_calendar:settings:last_date:title' => 'Última fecha permitida (en el formato AAAA - MM- DD)', - 'event_calendar:enable_event_calendar' => 'Permitir clanedario de eventos de grupo', + 'event_calendar:enable_event_calendar' => 'Permitir calendario de eventos de grupo', 'event_calendar:no_events_found' => 'No se encontraron eventos.', 'event_calendar:mine' => 'Mío', 'event_calendar:feature' => 'Presentar', -- cgit v1.2.3 From d967bbae11a664781807b9f3557671f609626faf Mon Sep 17 00:00:00 2001 From: Sem <sembrestels@riseup.net> Date: Thu, 1 Nov 2012 09:18:10 +0100 Subject: Fixed i18n. --- views/default/event_calendar/full_calendar_view.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/views/default/event_calendar/full_calendar_view.php b/views/default/event_calendar/full_calendar_view.php index 6fc59fcc8..44ffc70c3 100644 --- a/views/default/event_calendar/full_calendar_view.php +++ b/views/default/event_calendar/full_calendar_view.php @@ -157,7 +157,7 @@ handleViewDisplay = function(view) { fullcalendarInit = function() { var loadFullCalendar = function() { - var locale = $.datepicker.regional[elgg.config.language]; + var locale = $.datepicker.regional[elgg.get_language()]; if (!locale) { locale = $.datepicker.regional['']; } -- cgit v1.2.3 From fd65dd29376b0948a16b71b472c3cf1c70ead074 Mon Sep 17 00:00:00 2001 From: Kevin Jardine <kevinjardine@yahoo.com> Date: Thu, 1 Nov 2012 09:37:23 +0100 Subject: Update README.txt --- README.txt | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/README.txt b/README.txt index 440f1707e..fbfd172b0 100644 --- a/README.txt +++ b/README.txt @@ -1,3 +1,7 @@ +THIS VERSION IS DEPRECATED. USE THE VERSION IN + +https://github.com/kevinjardine/Elgg-Event-Calendar/tree/full + /** * Manage and display events * -- cgit v1.2.3 From b23e75b25f8db91bebf3a748a686e5a7e8747536 Mon Sep 17 00:00:00 2001 From: Sem <sembrestels@riseup.net> Date: Mon, 5 Nov 2012 04:01:33 +0100 Subject: Updated languages. --- languages/ca.php | 143 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ languages/es.php | 98 ++++++++++++++++++++++++++++++++++++-- 2 files changed, 238 insertions(+), 3 deletions(-) create mode 100644 languages/ca.php diff --git a/languages/ca.php b/languages/ca.php new file mode 100644 index 000000000..4881d7458 --- /dev/null +++ b/languages/ca.php @@ -0,0 +1,143 @@ +<?php +$language = array ( + 'item:object:event_calendar' => 'Calendari', + 'tag_names:event_tags' => 'Etiquetes', + 'event_calendar:optional' => 'Opcional.', + 'event_calendar:required' => 'Requerit.', + 'event_calendar:new_event' => 'Nou esdeveniment', + 'event_calendar:no_such_event_edit_error' => 'Error: no hi ha cap esdeveniment o no tens permissos per editar-lo.', + 'event_calendar:add_event_title' => 'Afegeix esdeveniment', + 'event_calendar:manage_event_title' => 'Edita esdeveniment', + 'event_calendar:manage_event_description' => 'Introdueix detalls del teu esdeveniment a sota. El títol, lloc on serà i data d\'inici són requerits. Pots fer clic a les icones del calendari per indicar les dates d\'inici i final.', + 'event_calendar:title_label' => 'Títol', + 'event_calendar:title_description' => 'D\'una a quatre paraules', + 'event_calendar:brief_description_label' => 'Descripció', + 'event_calendar:brief_description_description' => 'Una frase curta.', + 'event_calendar:venue_label' => 'On', + 'event_calendar:venue_description' => 'On serà aquest esdeveniment?', + 'event_calendar:start_date_label' => 'Data d\'inici', + 'event_calendar:start_date_description' => 'Quan començarà?', + 'event_calendar:end_date_label' => 'Data de finalització', + 'event_calendar:end_date_description' => 'Quan finalitzarà aquest esdeveniment? La data d\'inici serà utilitzada com a data de finalització si no en poses cap.', + 'event_calendar:start_time_label' => 'Hora d\'inici', + 'event_calendar:start_time_description' => 'A quina hora començarà aquest esdeveniment?', + 'event_calendar:end_time_label' => 'Hora de finalització', + 'event_calendar:end_time_description' => 'A quina hora finalitzarà aquest esdeveniment?', + 'event_calendar:fees_label' => 'Costos', + 'event_calendar:fees_description' => 'El cost d\'aquest esdeveniment, si és que en té.', + 'event_calendar:contact_label' => 'Contacte', + 'event_calendar:contact_description' => 'La persona de contacte per a més informació, preferiblement amb un número de telèfon o una adreça d\'email', + 'event_calendar:organiser_label' => 'Organitzadora', + 'event_calendar:organiser_description' => 'La persona o organització responsable d\'aquest esdeveniment.', + 'event_calendar:event_tags_label' => 'Etiquetes', + 'event_calendar:event_tags_description' => 'Una llista separada amb comes de les etiquetes més destacables per a aquest esdeveniment.', + 'event_calendar:long_description_label' => 'Descripció llarga', + 'event_calendar:long_description_description' => 'Pot ser un paràgraf o més com a requerit.', + 'event_calendar:manage_event_response' => 'El teu esdeveniment s\'ha desat correctament.', + 'event_calendar:add_event_response' => 'El teu esdeveniment s\'ha afegit correctament.', + 'event_calendar:show_events_title' => 'Calendari', + 'event_calendar:day_label' => 'Dia', + 'event_calendar:week_label' => 'Setmana', + 'event_calendar:month_label' => 'Mes', + 'event_calendar:group' => 'Calendari del grup', + 'event_calendar:new' => 'Afegir esdeveniment', + 'event_calendar:submit' => 'Desa i continua', + 'event_calendar:cancel' => 'Cancel·la', + 'event_calendar:widget_title' => 'Calendari', + 'event_calendar:widget:description' => 'Mostra els teus esdeveniments.', + 'event_calendar:num_display' => 'Número d\'esdeveniments per mostrar', + 'event_calendar:groupprofile' => 'Propers esdeveniments', + 'event_calendar:view_calendar' => 'vista del calendari', + 'event_calendar:when_label' => 'Quan', + 'event_calendar:site_wide_link' => 'Veure tots els esdeveniments', + 'event_calendar:view_link' => 'Veure aquest esdeveniment', + 'event_calendar:edit_link' => 'Edita aquest esdeveniment', + 'event_calendar:delete_link' => 'Esborra aquest esdeveniment', + 'event_calendar:delete_response' => 'Aquest esdeveniment ha estat esborrat.', + 'event_calendar:error_delete' => 'Aquest esdeveniment no existeix o no tens permisos per esborrar-lo.', + 'event_calendar:delete_cancel_response' => 'Esborrat de l\'esdeveniment cancel·lat.', + 'event_calendar:add_to_my_calendar' => 'Afegeix al meu calendari', + 'event_calendar:remove_from_my_calendar' => 'Treure del meu calendari', + 'event_calendar:add_to_my_calendar_response' => 'Aquest esdeveniment ha estat afegit al teu calendari personal', + 'event_calendar:add_to_the_calendar' => 'Afegeix al calendari', + 'event_calendar:remove_from_the_calendar' => 'Elimina', + 'event_calendar:add_to_the_calendar_menu_text' => 'Afegir al meu', + 'event_calendar:remove_from_the_calendar_menu_text' => 'Elimina del meu', + 'event_calendar:remove_from_the_calendar_button' => 'Elimina del calendari', + 'event_calendar:added_to_the_calendar' => 'Afegit al calendari', + 'event_calendar:removed_from_the_calendar' => 'Calendari eliminat', + 'event_calendar:personal_event_calendars_link' => 'A %s calendaris', + 'event_calendar:personal_event_calendars_link_one' => 'A un calendari', + 'event_calendar:users_for_event_breadcrumb' => 'Calendaris personals', + 'event_calendar:settings:group_profile_display_option:left' => 'columna esquerra', + 'event_calendar:settings:group_profile_display_option:right' => 'columna dreta', + 'event_calendar:settings:group_profile_display_option:none' => 'cap', + 'event_calendar:settings:agenda_view:title' => 'Utilitza la vista d\'agenda', + 'event_calendar:settings:yes' => 'sí', + 'event_calendar:settings:no' => 'no', + 'event_calendar:region_label' => 'Regió', + 'event_calendar:type_label' => 'Tipus', + 'event_calendar:all' => 'Tots', + 'event_calendar:no_events_found' => 'No s\'han trobat esdeveniments.', + 'event_calendar:mine' => 'Meus', + 'event_calendar:agenda:column:time' => 'Temps', + 'event_calendar:agenda:column:session' => 'Sessió', + 'event_calendar:agenda:column:venue' => 'Localització', + 'event_calendar:settings:agenda' => 'agenda', + 'event_calendar:settings:month' => 'per mes', + 'event_calendar:settings:full' => 'vista completa', + 'event_calendar:paged:column:date' => 'Data', + 'event_calendar:paged:column:time' => 'Hora', + 'event_calendar:paged:column:event' => 'Esdeveniment', + 'event_calendar:paged:column:venue' => 'Localització', + 'event_calendar:paged:column:calendar' => 'Calendari', + 'event_calendar:open' => 'Obrir', + 'event_calendar:add_user_label' => 'Afegir habitants', + 'event_calendar:show_all' => 'Tots', + 'event_calendar:show_mine' => 'El meu calendari', + 'event_calendar:show_friends' => 'Calendari de les amigues', + 'event_calendar:listing_title:all' => 'Tots', + 'event_calendar:listing_title:mine' => 'El meu calendari', + 'event_calendar:listing_title:friends' => 'Calendari de les amigues', + 'event_calendar:personal_manage:open' => 'obert', + 'event_calendar:personal_manage:closed' => 'tancat', + 'event_calendar:personal_manage:private' => 'privat', + 'event_calendar:from_label' => 'De:', + 'event_calendar:to_label' => 'A:', + 'event_calendar:settings:timeformat:title' => 'Format d\'hora', + 'event_calendar:time_format:12hour' => '12 hores (am/pm)', + 'event_calendar:time_format:24hour' => '24 hores', + 'event_calendar:all_day_label' => 'Event de tot el dia', + 'event_calendar:repeat_interval_label' => 'Repeteix cada', + 'event_calendar:repeat_weeks' => 'setmana(es)', + 'event_calendar:on_these_days' => 'en aquests dies', + 'event_calendar:day_abbrev:monday' => 'DL', + 'event_calendar:day_abbrev:tuesday' => 'DM', + 'event_calendar:day_abbrev:wednesday' => 'DC', + 'event_calendar:day_abbrev:thursday' => 'DJ', + 'event_calendar:day_abbrev:friday' => 'DV', + 'event_calendar:day_abbrev:saturday' => 'DS', + 'event_calendar:day_abbrev:sunday' => 'DG', + 'event_calendar:dow:full:monday' => 'Dilluns', + 'event_calendar:dow:full:tuesday' => 'Dimarts', + 'event_calendar:dow:full:wednesday' => 'Dimecres', + 'event_calendar:dow:full:thursday' => 'Dijous', + 'event_calendar:dow:full:friday' => 'Divendres', + 'event_calendar:dow:full:saturday' => 'Dissabte', + 'event_calendar:dow:full:sunday' => 'Diumenge', + 'event_calendar:schedule_type:fixed' => 'Posa data i hora', + 'event_calendar:interval:minute' => 'minut(s)', + 'event_calendar:interval:hour' => 'hora(es)', + 'event_calendar:interval:day' => 'dia(es)', + 'event_calendar:site_calendar' => 'Calendari del lloc', + 'event_calendar:calendar_label' => 'Calendari', + 'event_calendar:calendar_description' => 'Calendari per aquest esdeveniment.', + 'event_calendar:basic:header' => 'Informació bàsica', + 'event_calendar:schedule:header' => 'Horari', + 'event_calendar:permissions:header' => 'Permisos', + 'event_calendar:read_access' => 'Accés de lectura', + 'event_calendar:add_event' => 'Afegeix event', + 'event_calendar:poll_suffix' => '(enquesta)', + 'event_calendar:add' => 'Afegeix', +); +add_translation("ca", $language); diff --git a/languages/es.php b/languages/es.php index 0ea5805ec..2282591d3 100644 --- a/languages/es.php +++ b/languages/es.php @@ -1,5 +1,99 @@ <?php $language = array ( + 'tag_names:event_tags' => 'Etiqueta', + 'event_calendar:optional' => 'Opcional.', + 'event_calendar:required' => 'Requerido.', + 'event_calendar:add_to_my_calendar_error' => 'No se puede añadir ese evento a tu calendario personal. (Quizás tu calendario ya esté lleno o ¿intentas agendar dos eventos a la vez en tu calendario personal?)', + 'event_calendar:add_to_the_calendar' => 'Añadir al calendario', + 'event_calendar:remove_from_the_calendar' => 'Remover', + 'event_calendar:add_to_the_calendar_menu_text' => 'Añadir a mi calendario', + 'event_calendar:remove_from_the_calendar_menu_text' => 'Remover de mi calendario', + 'event_calendar:remove_from_the_calendar_button' => 'Remover del calendario', + 'event_calendar:added_to_the_calendar' => 'Añadir al calendario', + 'event_calendar:removed_from_the_calendar' => 'Remover calendario', + 'event_calendar:add_to_the_calendar_response' => 'Evento añadido al calendario personal', + 'event_calendar:add_to_the_calendar_error' => 'No se puede añadir ese evento a tu calendario personal. (Quizás tu calendario ya esté lleno o ¿intentas agendar dos eventos a la vez en tu calendario personal?)', + 'event_calendar:remove_from_the_calendar_response' => 'Evento borrado del calendario.', + 'event_calendar:users_for_event_menu_title' => 'Habitantes que apuntan ese evento en su calendario personal', + 'event_calendar:personal_event_calendars_link_one' => 'En 1 calendario', + 'event_calendar:users_for_event_breadcrumb' => 'Calendario personal', + 'event_calendar:settings:agenda' => 'Agenda', + 'event_calendar:settings:full' => 'Vista completa', + 'event_calendar:settings:spots_display:title' => 'Añade un campo para cada evento para que puedas limitar el numero de personas que pueden añadir el evento a su propio calendario', + 'event_calendar:settings:no_collisions:title' => 'Colisión detectada: evita que se añadan dos eventos a la vez en el calendario', + 'event_calendar:settings:collision_length:title' => 'Cuanto tiempo (en segundos) un evento puede ser considerado como activo si no se establece una fecha o hora para su fin (usado para la detección de colisiones). Por defecto: 3600 segundos = 1 hora.', + 'event_calendar:spots_description' => '¿A cuantas habitantes se aceptarán que añadan ese evento a sus calendarios personales?', + 'event_calendar:open' => 'Abierto', + 'event_calendar:add_user_label' => 'Añadir habitantes', + 'event_calendar:add_users_notify:subject' => 'Un nuevo evento se ha añadido a tu calendario personal', + 'event_calendar:add_users_notify:body' => '%s, + +Se ha añadido un evento de "%s" a tu calendario personal.', + 'event_calendar:settings:personal_manage:title' => 'Permisos del calendario', + 'event_calendar:request_event_response' => 'Tu petición para añadir ese evento ha sido enviada,', + 'event_calendar:request_event_error' => 'Error: Tu petición para añadir el evento al calendario no se ha enviado.', + 'event_calendar:request_subject' => 'Haz recebido una invitación de calendario', + 'event_calendar:review_requests_request_none' => 'No hay peticiones a revisar para ese evento.', + 'event_calendar:request:remove:check' => '¿Estas seguro que quieres rechazar esa petición?', + 'event_calendar:requestkilled' => 'La petición ha sido rechazada.', + 'event_calendar:request_approved' => 'La petición ha sido aceptada.', + 'event_calendar:make_request_title' => 'Enviar petición a ese evento', + 'event_calendar:review_requests:reject' => 'Rechazar', + 'event_calendar:review_requests:reject:title' => 'Rechazar la petición', + 'event_calendar:review_requests:accept' => 'Aceptar', + 'event_calendar:review_requests:accept:title' => 'Aceptar la petición', + 'event_calendar:review_requests:error:approve' => 'Error: la petición no se ha aprobado.', + 'event_calendar:review_requests:error:reject' => 'Error: No se ha podido rechazar la petición.', + 'event_calendar:settings:hide_access:title' => 'Ocultar acceso al calendario', + 'event_calendar:settings:hide_end:title' => 'Ocultar campos de fecha y hora', + 'event_calendar:settings:more_required:title' => 'Hacer visible todos los campos excepto si se requiere una larga descripción.', + 'event_calendar:add_to_group:remove_group_title' => 'Remover ese evento del grupo', + 'event_calendar:add_to_group:remove_group_button' => 'Remover del grupo', + 'event_calendar:remove_from_group:success' => 'Evento removido del calendario del grupo', + 'event_calendar:add_to_group:add_group_title' => 'Añadir ese evento al grupo', + 'event_calendar:add_to_group:add_group_button' => 'Adicionar al grupo', + 'event_calendar:add_to_group:success' => 'Evento añadido al calendario del grupo', + 'event_calendar:settings:add_to_group_calendar:title' => 'Aceptar que el grupo de operadores añadan cualquier evento existente al calendario del grupo', + 'event_calendar:group_breadcrumb' => 'Calendario del grupo', + 'event_calendar:generic_error_title' => 'Error', + 'event_calendar:add' => 'Añadir', + 'event_calendar:owner:permissions_error' => 'No ienes permisos para visualizar esa pagina.', + 'event_calendar:feature_not_activated' => 'Esa funcionalidad no esta activada', + 'event_calendar:show_all' => 'Muestra todo', + 'event_calendar:show_mine' => 'Mi calendario', + 'event_calendar:show_friends' => 'Calendario de mis amigas', + 'event_calendar:from_label' => 'Desde:', + 'event_calendar:to_label' => 'Hasta:', + 'event_calendar:time_format:12hour' => '12 horas (am/pm)', + 'event_calendar:time_format:24hour' => '24 horas', + 'event_calendar:all_day_label' => 'El evento dura todo el día', + 'event_calendar:repeat_interval_label' => 'Repite cada', + 'event_calendar:day_abbrev:monday' => 'L', + 'event_calendar:day_abbrev:tuesday' => 'M', + 'event_calendar:day_abbrev:wednesday' => 'M', + 'event_calendar:day_abbrev:thursday' => 'J', + 'event_calendar:day_abbrev:friday' => 'V', + 'event_calendar:day_abbrev:saturday' => 'S', + 'event_calendar:day_abbrev:sunday' => 'D', + 'event_calendar:dow:full:monday' => 'Lunes', + 'event_calendar:dow:full:tuesday' => 'Martes', + 'event_calendar:dow:full:wednesday' => 'Miércoles', + 'event_calendar:dow:full:thursday' => 'Jueves', + 'event_calendar:dow:full:friday' => 'Viernes', + 'event_calendar:dow:full:saturday' => 'Sabado', + 'event_calendar:dow:full:sunday' => 'Domingo', + 'event_calendar:schedule_type:fixed' => 'Selecciona dia/hora', + 'event_calendar:interval:minute' => 'minuto(s)', + 'event_calendar:interval:hour' => 'hora(s)', + 'event_calendar:interval:day' => 'día(s)', + 'event_calendar:site_calendar' => 'Calendario del sitio', + 'event_calendar:calendar_label' => 'Calendario', + 'event_calendar:basic:header' => 'Información básica', + 'event_calendar:schedule:header' => 'Fecha', + 'event_calendar:permissions:header' => 'Permisos', + 'event_calendar:read_access' => 'Acceso de lectura', + 'event_calendar:add_event' => 'Añadir evento', + 'event_calendar:schedule_event' => 'Evento agendado', 'item:object:event_calendar' => 'Calendario', 'event_calendar:new_event' => 'Nuevo evento', 'event_calendar:no_such_event_edit_error' => 'Error: No existe tal evento o usted no tiene autorización para editarlo.', @@ -52,8 +146,6 @@ $language = array ( 'event_calendar:view_link' => 'Ver este evento', 'event_calendar:edit_link' => 'Editar este evento', 'event_calendar:delete_link' => 'Eliminar este evento', - 'event_calendar:delete_confirm_title' => 'Confirmar eliminación de este evento', - 'event_calendar:delete_confirm_description' => '¿Está seguro que desea eliminar este evento ("%s")? Esta acción es irreversible.', 'event_calendar:delete_response' => 'Este evento ha sido eliminado.', 'event_calendar:error_delete' => 'Este evento no existe o usted no tiene el derecho de eliminarlo.', 'event_calendar:delete_cancel_response' => 'Eliminación del evento cancelada.', @@ -96,7 +188,7 @@ $language = array ( 'event_calendar:region_filter_by_label' => 'Filtro por región:', 'event_calendar:settings:first_date:title' => 'Primera fecha permitida (en el formato AAAA - MM- DD)', 'event_calendar:settings:last_date:title' => 'Última fecha permitida (en el formato AAAA - MM- DD)', - 'event_calendar:enable_event_calendar' => 'Permitir calendario de eventos de grupo', + 'event_calendar:enable_event_calendar' => 'Permitir clanedario de eventos de grupo', 'event_calendar:no_events_found' => 'No se encontraron eventos.', 'event_calendar:mine' => 'Mío', 'event_calendar:feature' => 'Presentar', -- cgit v1.2.3 From e2203e7aae84ec772eb61621a199be4bb7b32f0c Mon Sep 17 00:00:00 2001 From: Sem <sembrestels@riseup.net> Date: Tue, 6 Nov 2012 06:22:00 +0100 Subject: Removed lightbox from calendar. --- models/model.php | 4 ++-- start.php | 3 --- views/default/event_calendar/full_calendar_view.php | 14 ++------------ 3 files changed, 4 insertions(+), 17 deletions(-) diff --git a/models/model.php b/models/model.php index 4668f005a..9edfbc760 100644 --- a/models/model.php +++ b/models/model.php @@ -1504,7 +1504,7 @@ function event_calendar_get_page_content_list($page_type,$container_guid,$start_ $params = event_calendar_generate_listing_params($page_type,$container_guid,$start_date,$display_mode,$filter,$region); - $url = full_url(); + $url = current_page_url(); if (substr_count($url, '?')) { $url .= "&view=ical"; } else { @@ -2183,7 +2183,7 @@ function event_calendar_get_page_content_fullcalendar_events($start_date,$end_da } else { $event_item['id'] = $event->guid; $event_item['is_event_poll'] = FALSE; - $event_item['url'] = elgg_get_site_url().'event_calendar/view_light_box/'.$event->guid; + $event_item['url'] = elgg_get_site_url().'event_calendar/view/'.$event->guid; } $event_array[] = $event_item; diff --git a/start.php b/start.php index bf22568cb..752646a3e 100644 --- a/start.php +++ b/start.php @@ -186,9 +186,6 @@ function event_calendar_page_handler($page) { case 'view': echo event_calendar_get_page_content_view($page[1]); break; - case 'view_light_box': - echo event_calendar_get_page_content_view($page[1],TRUE); - break; case 'display_users': echo event_calendar_get_page_content_display_users($page[1]); break; diff --git a/views/default/event_calendar/full_calendar_view.php b/views/default/event_calendar/full_calendar_view.php index 44ffc70c3..1a58321b5 100644 --- a/views/default/event_calendar/full_calendar_view.php +++ b/views/default/event_calendar/full_calendar_view.php @@ -1,7 +1,5 @@ <?php elgg_load_js('elgg.full_calendar'); -elgg_load_js('lightbox'); -elgg_load_css('lightbox'); $timeformat = elgg_get_plugin_setting('timeformat', 'event_calendar') == 24 ? 'H(:mm)' : 'h(:mm)t'; @@ -13,16 +11,8 @@ var goToDateFlag = 0; handleEventClick = function(event) { if (event.url) { - if (event.is_event_poll) { - window.location.href = event.url; - } else { - if ($.fancybox) { - $.fancybox({'href': event.url}); - } else if ($.colorbox) { - $.colorbox({'href': event.url}); - } - } - return false; + window.location.href = event.url; + event.preventDefault(); } }; -- cgit v1.2.3 From 23d6fc3f778b3986490e46a64e73f9da795c939d Mon Sep 17 00:00:00 2001 From: Sem <sembrestels@riseup.net> Date: Wed, 7 Nov 2012 08:55:38 +0100 Subject: Using GMT timezone since input/date is using gmdate(). --- models/model.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/models/model.php b/models/model.php index 9edfbc760..b51b2ccbc 100644 --- a/models/model.php +++ b/models/model.php @@ -106,11 +106,11 @@ function event_calendar_set_event_from_form($event_guid,$group_guid) { //$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()); + $event->start_date = strtotime($start_date_text." GMT"); $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->end_date = strtotime($end_date_text." GMT"); //$event->munged_end_date_string = $end_date_text." ".date_default_timezone_get(); } else { $event->end_date = ''; -- cgit v1.2.3 From 06eded89dc986128602cedefa92df0b76e1a4f8f Mon Sep 17 00:00:00 2001 From: Sem <sembrestels@riseup.net> Date: Sun, 18 Nov 2012 21:50:32 +0100 Subject: Do not show tabs in group calendar view. --- models/model.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/models/model.php b/models/model.php index b51b2ccbc..a196fcebb 100644 --- a/models/model.php +++ b/models/model.php @@ -1842,7 +1842,7 @@ function event_calendar_generate_listing_params($page_type,$container_guid,$orig ); $content = elgg_view('event_calendar/show_events', $vars); - if ($page_type == 'owner') { + if ($page_type == 'group') { $filter_override = ''; } else { $filter_override = elgg_view('event_calendar/filter_menu',$vars); -- cgit v1.2.3 From 16e67e9f034ec36c346086ec27b05e15b9d937d9 Mon Sep 17 00:00:00 2001 From: Paul <tacid@tacid.kiev.ua> Date: Tue, 29 Jan 2013 18:54:32 +0200 Subject: Translation RU added --- languages/ru.php | 290 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 290 insertions(+) create mode 100644 languages/ru.php diff --git a/languages/ru.php b/languages/ru.php new file mode 100644 index 000000000..2e85b10f1 --- /dev/null +++ b/languages/ru.php @@ -0,0 +1,290 @@ +<?php + + $russian = array( + + 'item:object:event_calendar' => "Календарь", + 'tag_names:event_tags' => "Теги", + 'event_calendar:optional' => "Опционально.", + 'event_calendar:required' => "Обязательно.", + 'event_calendar:new_event' => "Новое событие", + 'event_calendar:no_such_event_edit_error' => "Ошибка: Нет такого события или у вас нет прав на его редактирование.", + 'event_calendar:add_event_title' => "Добавить событие", + 'event_calendar:manage_event_title' => "Изменить событие", + 'event_calendar:manage_event_description' => "Введите детали вашего события. " + ."Название, место и дата начала обязательны. " + ."Вы можете нажать на иконки календаря, чтобы установить начальную и конечную даты.", + 'event_calendar:title_label' => "Название", + 'event_calendar:title_description' => "От одного до четырех слов", + 'event_calendar:brief_description_label' => "Краткое описание", + 'event_calendar:brief_description_description' => "Короткая фраза.", + 'event_calendar:venue_label' => "Место", + 'event_calendar:venue_description' => "Где это событие будет проходить?", + 'event_calendar:start_date_label' => "Дата начала", + 'event_calendar:start_date_description' => "Когда это событие начнется?", + 'event_calendar:end_date_label' => "Дата окончания", + 'event_calendar:end_date_description' => "Когда событие закончится? Будет использована дата начала " + ."если не будет указано явно.", + 'event_calendar:start_time_label' => "Время начала", + 'event_calendar:start_time_description' => "В какое время событие начинается?", + 'event_calendar:end_time_label' => "Время окончания", + 'event_calendar:end_time_description' => "В какое время событие закончится?", + 'event_calendar:fees_label' => "Стоимость", + 'event_calendar:fees_description' => "Стоимость мероприятия, если есть.", + 'event_calendar:contact_label' => "Контакт", + 'event_calendar:contact_description' => "Лицо с которым можно связаться для уточнения информации, " + ."желательно с номером телефона или email адресом.", + 'event_calendar:organiser_label' => "Организатор", + 'event_calendar:organiser_description' => "Лицо или организация отвечающая за событие.", + 'event_calendar:event_tags_label' => "Теги", + 'event_calendar:event_tags_description' => "Список тегов относящихся к этому событию разделенный запятыми.", + 'event_calendar:long_description_label' => "Детальное описаное", + 'event_calendar:long_description_description' => "Может быть параграф или больше, сколько потребуется.", + 'event_calendar:manage_event_response' => "Ваше событие сохранено.", + 'event_calendar:add_event_response' => "Ваше событие добавлено.", + 'event_calendar:manage_event_error' => "Ошибка: При сохранении возникла ошибка. " + ."Пожалуйста удостовертесь что вы указали все обязательные поля.", + 'event_calendar:error_nosuchevent' => "Ошибка: нет такого события.", + 'event_calendar:show_events_title' => "Календарь", + 'event_calendar:day_label' => "День", + 'event_calendar:week_label' => "Неделя", + 'event_calendar:month_label' => "Месяц", + 'event_calendar:group' => "Календарь группы", + 'event_calendar:new' => "Добавить событие", + 'event_calendar:submit' => "Отправить", + 'event_calendar:cancel' => "Отменить", + 'event_calendar:widget_title' => "Календарь", + 'event_calendar:widget:description' => "Отображает ваши события.", + 'event_calendar:num_display' => "Количество событий", + 'event_calendar:events_type' => "Показывать", + 'event_calendar:personal_events' => "Персональные", + 'event_calendar:all_events' => "Все активные", + 'event_calendar:groupprofile' => "Предстоящие события", + 'event_calendar:view_calendar' => "просмотр календаря", + 'event_calendar:when_label' => "Когда", + 'event_calendar:site_wide_link' => "Просмотреть все события", + 'event_calendar:view_link' => "Просмотреть событие", + 'event_calendar:edit_link' => "Изменить событие", + 'event_calendar:delete_link' => "Удалить событие", + 'event_calendar:delete_confirm_title' => "Подтверждение удаление события", + 'event_calendar:delete_confirm_description' => "Вы уверены что хотите удалить событие (\"%s\")? Это действие не может быть отменено.", + 'event_calendar:delete_response' => "Событие было удалено.", + 'event_calendar:error_delete' => "Такого события не существует или у вас нет прав на его удаление.", + 'event_calendar:delete_cancel_response' => "Удаление события отменено.", + 'event_calendar:add_to_my_calendar' => "Добавить в мой календарь", + 'event_calendar:remove_from_my_calendar' => "Убрать мз моего каледаря", + 'event_calendar:add_to_my_calendar_response' => "Событие было добавлено в Ваш личный календарь.", + 'event_calendar:add_to_my_calendar_error' => "Событие не может быть добавлено в Ваш персональный каледарь. " + ."(Возможно событие уже заполнено или совпадает по времени с другим событием в Вашем персональном календаре?)", + 'event_calendar:remove_from_my_calendar_response' => "Событие было удалено из Вашего персонального календаря.", + 'event_calendar:add_to_the_calendar' => "Довить в календарь", + 'event_calendar:remove_from_the_calendar' => "Убрать", + 'event_calendar:add_to_the_calendar_menu_text' => "Добавить в мой", + 'event_calendar:remove_from_the_calendar_menu_text' => "Убрать из моего", + 'event_calendar:remove_from_the_calendar_button' => "Убрать из календаря", + 'event_calendar:added_to_the_calendar' => "Добавлено в календарь", + 'event_calendar:removed_from_the_calendar' => "Удалено из календаря", + 'event_calendar:add_to_the_calendar_response' => "Событие добавлено в календарь.", + 'event_calendar:add_to_the_calendar_error' => "This event could not added to this person's calendar. " + ."(Perhaps the event is full or is scheduled at the same time as another event in this person's calendar?)", + 'event_calendar:remove_from_the_calendar_response' => "Event removed from this person's calendar.", + + 'event_calendar:users_for_event_menu_title' => "People listing this event on their personal calendars", + 'event_calendar:users_for_event_title' => "Personal calendars for \"%s'\"", + 'event_calendar:personal_event_calendars_link' => "В %s календарях", + 'event_calendar:personal_event_calendars_link_one' => "В 1 календаре", + 'event_calendar:users_for_event_breadcrumb' => "Personal calendars", + 'event_calendar:settings:group_profile_display:title' => "Group calendar profile display (if group calendars are enabled)", + 'event_calendar:settings:group_profile_display_option:left' => "left column", + 'event_calendar:settings:group_profile_display_option:right' => "right column", + 'event_calendar:settings:group_profile_display_option:none' => "none", + 'event_calendar:settings:times:title' => "Add time as well as date to events", + 'event_calendar:settings:autopersonal:title' => "Automatically add events a user creates to his/her personal calendar.", + 'event_calendar:settings:autogroup:title' => "Automatically add group events for all members to their personal calendars.", + 'event_calendar:settings:agenda_view:title' => "Use Agenda view", + 'event_calendar:settings:venue_view:title' => "Display venue in summary view (event listings)", + 'event_calendar:settings:yes' => "yes", + 'event_calendar:settings:no' => "no", + 'event_calendar:settings:site_calendar:title' => "Site calendar", + 'event_calendar:settings:site_calendar:admin' => "yes, only admins can post events", + 'event_calendar:settings:site_calendar:loggedin' => "yes, any logged-in user can post an event", + 'event_calendar:settings:group_calendar:title' => "Group calendars", + 'event_calendar:settings:group_calendar:admin' => "yes, only admins and group owners can post events", + 'event_calendar:settings:group_calendar:members' => "yes, any group member can post an event", + 'event_calendar:settings:group_default:title' => "New groups should by default have a group calendar (if group calendars are enabled)", + 'event_calendar:settings:group_default:no' => "no (but admins or group owners can turn a group calendar on if desired)", + 'event_calendar:settings:group_default:yes' => "yes (but admins or group owners can turn a group calendar off if desired)", + 'event_calendar:settings:group_always_display:title' => "If group calendar is enabled, always display it (even if empty)", + 'event_calendar:settings:region_display:title' => "Add region field to events", + 'event_calendar:settings:region_list:title' => "List of regions (one per line)", + 'event_calendar:region_label' => "Region", + 'event_calendar:region_description' => "Select the region that this event will be held in.", + 'event_calendar:settings:type_display:title' => "Add event type to events", + 'event_calendar:settings:type_list:title' => "List of event types (one per line)", + 'event_calendar:type_label' => "Type of event", + 'event_calendar:type_description' => "Select the type of event.", + 'event_calendar:all' => "All", + 'event_calendar:region_filter_by_label' => "Filter by region: ", + 'event_calendar:settings:first_date:title' => "First allowable date (in YYYY-MM-DD format)", + 'event_calendar:settings:last_date:title' => "Last allowable date (in YYYY-MM-DD format)", + 'event_calendar:enable_event_calendar' => "Включить календарь группы", + 'event_calendar:no_events_found' => "No events found.", + 'event_calendar:mine' => "Mine", + 'event_calendar:feature' => "Feature", + 'event_calendar:unfeature' => "Unfeature", + 'event_calendar:agenda:column:time' => "Time", + 'event_calendar:agenda:column:session' => "Session", + 'event_calendar:agenda:column:venue' => "Location", + 'event_calendar:upcoming_events_title' => "Upcoming events", + 'event_calendar:settings:paged' => "paged", + 'event_calendar:settings:agenda' => "agenda", + 'event_calendar:settings:month' => "by month", + 'event_calendar:settings:full' => "full view", + 'event_calendar:settings:listing_format:title' => "Event listing format", + 'event_calendar:paged:column:date' => "Date", + 'event_calendar:paged:column:time' => "Time", + 'event_calendar:paged:column:event' => "Event", + 'event_calendar:paged:column:venue' => "Location", + 'event_calendar:paged:column:calendar' => "Calendar", + 'event_calendar:settings:spots_display:title' => "Add a spots field for each " + ."event to allow you to limit the number of people who can add the event to their calendar", + 'event_calendar:settings:no_collisions:title' => "Collision detection: prevent people from adding two events at the same time to their personal calendar", + 'event_calendar:settings:collision_length:title' => "How long (in seconds) should an event be assumed to last if no end date or time is specified " + ."(used for collision detection). Defaults to 3600 seconds = 1 hour.", + 'event_calendar:spots_label' => "Spots", + 'event_calendar:spots_description' => "How many people are allowed to add this event to their personal calendars?", + 'event_calendar:open' => "Open", + 'event_calendar:settings:add_users:title' => "Allow event creators and site admins to add their event to other personal calendars.", + 'event_calendar:add_user_label' => "Add users", + 'event_calendar:add_user_description' => "Add this event to personal calendars by typing two or more characters in the above text autocomplete field to select a user. " + ."You can add multiple users by clicking the \"+\" link. (You must submit this form to actually add the event to the calendars.)", + 'event_calendar:settings:add_users_notify:title' => "Email users who have had an event added to their personal calendar by an admin or event creator.", + 'event_calendar:add_users_notify:subject' => "A new event has been added to your personal calendar", + 'event_calendar:add_users_notify:body' => "%s,\n\nThe \"%s\" event has been added to your calendar.\n\nYou can view it here: \n\n%s\n", + + 'event_calendar:settings:region_list_handles:title' => "The region strings above are string handles. Use the Elgg translation system to resolve them.", + 'event_calendar:settings:type_list_handles:title' => "The type strings above are string handles. Use the Elgg translation system to resolve them.", + + 'event_calendar:settings:personal_manage:title' => "Calendar permissions", + 'event_calendar:settings:personal_manage:description' => "Determines whether people can add events to their personal calendars (open), " + ."need to request the event creator to do so (closed), have no option at all (private), or allow event creators to determine this for each event (by event). " + ."Note if you set this to private you should probably activate the option above to allow event creators and site admins to " + ."add their events to other personal calendars.", + 'event_calendar:strapline' => "Опубликовал(а) %s %s", + + 'event_calendar:request_event_response' => "Your request to be added to this event has been sent.", + 'event_calendar:request_event_error' => "Ошибка: Could not send your request to be added to this event.", + 'event_calendar:request_subject' => "You have received an event request", + 'event_calendar:request_message' => "%s has asked to have the event \"%s\", here: + +%s + +added to his/her personal calendar. + +You can manage calendar requests for this event here: + +%s +", + + 'event_calendar:review_requests_error' => "This event either does not exist or you do not have the authority to approve requests for it.", + 'event_calendar:review_requests_request_none' => "There are no requests to review for this event.", + 'event_calendar:request:remove:check' => 'Are you sure you want to reject this request?', + 'event_calendar:requestkilled' => 'This request has been rejected.', + 'event_calendar:request_approved' => "This request has been approved.", + 'event_calendar:review_requests_title' => "Review requests for \"%s\"", + 'event_calendar:review_requests_menu_title' => "Review requests", + 'event_calendar:make_request_title' => 'Request this event', + 'event_calendar:review_requests:reject' => "Reject", + 'event_calendar:review_requests:reject:title' => "Reject this request", + 'event_calendar:review_requests:accept' => "Accept", + 'event_calendar:review_requests:accept:title' => "Accept this request", + 'event_calendar:review_requests:error:approve' => "Ошибка: could not approve this request.", + 'event_calendar:review_requests:error:reject' => "Ошибка: could not reject this request.", + + 'event_calendar:settings:hide_access:title' => "Hide event access drop down", + 'event_calendar:settings:default_access:title' => "If the event access is hidden, what should it default to?", + 'event_calendar:settings:hide_end:title' => "Hide end time and date fields", + 'event_calendar:settings:more_required:title' => "Make all visible fields except long description required.", + + 'event_calendar:add_to_group:remove_group_title' => "Remove this event from group", + 'event_calendar:add_to_group:remove_group_button' => "Remove from group", + 'event_calendar:remove_from_group:success' => "Event removed from group calendar", + 'event_calendar:add_to_group:add_group_title' => "Add this event to group", + 'event_calendar:add_to_group:add_group_button' => "Add to group", + 'event_calendar:add_to_group:success' => "Event added to group calendar", + 'event_calendar:settings:add_to_group_calendar:title' => "Allow group admins to add any existing event to a group calendar", + + 'event_calendar:group_breadcrumb' => "Group calendar", + 'event_calendar:no_group' => "There is no such group.", + 'event_calendar:generic_error_title' => "Error", + 'event_calendar:error_event_edit' => "Ошибка: there is no such event or you do not have permission to edit it.", + 'event_calendar:add' => "Добавить", + + 'feed:ical' => "iCal feed for this page", + 'event_calendar:ical_popup_message' => "You can use the following URL to get an iCalendar feed of the public events from this listing page: ", + 'event_calendar:ical_auth_file_name:title' => "Location of iCal authentication file on local file system (experimental - not needed for public feeds)", + + 'event_calendar:owner:permissions_error' => "You do not have permission to view that page.", + 'event_calendar:feature_not_activated' => "This feature is not activated", + + 'event_calendar:show_all' => "Показать все", + 'event_calendar:show_open' => "Показать открытые", + 'event_calendar:show_mine' => "Мой календарь", + 'event_calendar:show_friends' => "Календарь друзей", + 'event_calendar:show_only' => "Показывать только:", + + 'event_calendar:listing_title:all' => "Все события", + 'event_calendar:listing_title:open' => "Открытые события", + 'event_calendar:listing_title:mine' => "Мой календарь", + 'event_calendar:listing_title:friends' => "Календари друзей", + 'event_calendar:manage_users:title' => "Manage subscribers for \"%s\"", + 'event_calendar:manage_users:breadcrumb' => "Manage subscribers", + 'event_calendar:manage_users:description' => "Add or remove events from personal calendars.", + 'event_calendar:manage_users:unauthorized' => "Ошибка: you are not authorised to manage personal calendars for this event.", + 'event_calendar:add_to_group_members:success' => "This event has been added to the personal calendars of all group members.", + 'event_calendar:add_to_group_members:error' => "Ошибка: could not add this event to the personal calendars of group members.", + 'event_calendar:remove_from_group_members:success' => "This event has been removed from the personal calendars of all group members.", + 'event_calendar:remove_from_group_members:error' => "Ошибка: could not remove this event from the personal calendars of group members.", + 'event_calendar:add_to_group_members:button' => "Add to all", + 'event_calendar:remove_from_group_members:button' => "Remove from all", + + 'event_calendar:manage_subscribers:success' => "Персональный календарь обновлен.", + 'event_calendar:manage_subscribers:error' => "Ошибка: не могу обновить персональный календарь.", + 'event_calendar:personal_manage:open' => "открытый", + 'event_calendar:personal_manage:closed' => "закрытый", + 'event_calendar:personal_manage:private' => "приватный", + 'event_calendar:personal_manage:by_event' => "по событию", + 'event_calendar:personal_manage:label' => "Доступ к календарю", + 'event_calendar:personal_manage:description' => "Определяет, может ли пользователь добавить это событие в свой календарях (открытый)," + ."требуется разрешние (закрытый) или не имеет возможности добавить вообще (приватное - такм образом только вы или сайт-админ могут добавять событие в календари).", + + 'event_calendar:settings:full_calendar:title' => "Поддержка полного календаря", + 'event_calendar:modify_full_calendar:error' => "Ошибка: не могу изменить весь календарь", + 'event_calendar:from_label' => "С:", + 'event_calendar:to_label' => "По:", + 'event_calendar:settings:timeformat:title' => "Формат времени", + 'event_calendar:time_format:12hour' => "12 часовой (am/pm)", + 'event_calendar:time_format:24hour' => "24 часовой", + + /** + * Event calendar river + **/ + + //generic terms to use + + 'river:update:object:event_calendar' => "%s обновил событие %s", + 'river:create:object:event_calendar' => "%s добавил событие %s", + 'river:comment:object:event_calendar' => '%s оставил комментарий на событие %s', + 'event_calendar:river:created' => "%s добавлено", + 'event_calendar:river:updated' => "%s обновлено", + 'event_calendar:river:annotated1' => "%s добавил", + 'event_calendar:river:annotated2' => "в его/ее календарь.", + + //these get inserted into the river links to take the user to the entity + 'event_calendar:river:create' => "новое событие", + 'event_calendar:river:the_event' => "событие", + + ); + + add_translation("ru",$russian); + +?> -- cgit v1.2.3 From b9d17033719d01f792391d901fdb83df661b0216 Mon Sep 17 00:00:00 2001 From: Paul <tacid@tacid.kiev.ua> Date: Tue, 29 Jan 2013 18:55:57 +0200 Subject: RSS fix --- views/rss/object/event_calendar.php | 1 + 1 file changed, 1 insertion(+) diff --git a/views/rss/object/event_calendar.php b/views/rss/object/event_calendar.php index 92f6fcc14..45b2d847a 100644 --- a/views/rss/object/event_calendar.php +++ b/views/rss/object/event_calendar.php @@ -11,6 +11,7 @@ * @link http://elgg.org/ */ + elgg_load_library('elgg:event_calendar'); $title = $vars['entity']->title; $event_items = event_calendar_get_formatted_full_items($vars['entity']); -- cgit v1.2.3 From f4171ae7ac428c702a1c23f037fc022cc687bbea Mon Sep 17 00:00:00 2001 From: Paul <tacid@tacid.kiev.ua> Date: Tue, 29 Jan 2013 18:57:52 +0200 Subject: description should be wrapped in <div class="eot-output"> frame --- views/default/object/event_calendar.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/views/default/object/event_calendar.php b/views/default/object/event_calendar.php index 5779c004c..17f7ff130 100644 --- a/views/default/object/event_calendar.php +++ b/views/default/object/event_calendar.php @@ -55,9 +55,9 @@ if ($full) { echo $list_body; echo $body; if ($event->long_description) { - echo '<p>'.$event->long_description.'</p>'; + echo '<div class="elgg-output">'.$event->long_description.'</div>'; } else { - echo '<p>'.$event->description.'</p>'; + echo '<div class="elgg-output">'.$event->description.'</div>'; } if ($vars['light_box'] == TRUE) { $event_calendar_add_users = elgg_get_plugin_setting('add_users', 'event_calendar'); @@ -112,4 +112,4 @@ if ($full) { echo elgg_view_image_block($icon, $list_body); } -?> \ No newline at end of file +?> -- cgit v1.2.3 From d6d192cfe852ef4d2014499da3146b60569fc68b Mon Sep 17 00:00:00 2001 From: Paul <tacid@tacid.kiev.ua> Date: Tue, 29 Jan 2013 18:58:56 +0200 Subject: Deprecated fix: context parameters for elgg_register_widget_type() should be passed as an array() --- start.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/start.php b/start.php index 5590544b8..27b6f9802 100644 --- a/start.php +++ b/start.php @@ -75,7 +75,7 @@ function event_calendar_init() { } //add a widget - elgg_register_widget_type('event_calendar',elgg_echo("event_calendar:widget_title"),elgg_echo('event_calendar:widget:description'), 'all,groups'); + elgg_register_widget_type('event_calendar',elgg_echo("event_calendar:widget_title"),elgg_echo('event_calendar:widget:description'),array('all','dashboard')); // add the event calendar group tool option $event_calendar_group_default = elgg_get_plugin_setting('group_default', 'event_calendar'); -- cgit v1.2.3 From 9c753966752a77b390504898fd7c28d59ffe9994 Mon Sep 17 00:00:00 2001 From: Tacid <tacid@tacid.kiev.ua> Date: Wed, 30 Jan 2013 02:17:08 +0200 Subject: Updated russian translation, keys are in sync with the english one --- languages/ru.php | 81 ++++++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 79 insertions(+), 2 deletions(-) diff --git a/languages/ru.php b/languages/ru.php index 2e85b10f1..6e95b0cb7 100644 --- a/languages/ru.php +++ b/languages/ru.php @@ -256,14 +256,91 @@ You can manage calendar requests for this event here: 'event_calendar:personal_manage:label' => "Доступ к календарю", 'event_calendar:personal_manage:description' => "Определяет, может ли пользователь добавить это событие в свой календарях (открытый)," ."требуется разрешние (закрытый) или не имеет возможности добавить вообще (приватное - такм образом только вы или сайт-админ могут добавять событие в календари).", + 'event_calendar:personal_manage:by_event:open' => "Open. People can freely add this event to their personal calendars.", + 'event_calendar:personal_manage:by_event:closed' => "Closed. People can request to add this event to their personal calendars. You can review and approve requests.", + 'event_calendar:personal_manage:by_event:private' => "Private. You or another event administrator must add this event to personal calendars. There is no way for other users to add or request this event.", 'event_calendar:settings:full_calendar:title' => "Поддержка полного календаря", 'event_calendar:modify_full_calendar:error' => "Ошибка: не могу изменить весь календарь", - 'event_calendar:from_label' => "С:", - 'event_calendar:to_label' => "По:", + 'event_calendar:from_label' => "С: ", + 'event_calendar:to_label' => "По: ", 'event_calendar:settings:timeformat:title' => "Формат времени", 'event_calendar:time_format:12hour' => "12 часовой (am/pm)", 'event_calendar:time_format:24hour' => "24 часовой", + 'event_calendar:all_day_label' => "Весь день", + 'event_calendar:repeat_interval_label' => "Повторять каждые", + 'event_calendar:repeat_weeks' => "неделю(и)", + 'event_calendar:on_these_days' => "в эти дни:", + 'event_calendar:day_abbrev:monday' => "П", + 'event_calendar:day_abbrev:tuesday' => "В", + 'event_calendar:day_abbrev:wednesday' => "С", + 'event_calendar:day_abbrev:thursday' => "Ч", + 'event_calendar:day_abbrev:friday' => "П", + 'event_calendar:day_abbrev:saturday' => "С", + 'event_calendar:day_abbrev:sunday' => "В", + 'event_calendar:dow:full:monday' => "Понедельник", + 'event_calendar:dow:full:tuesday' => "Вторник", + 'event_calendar:dow:full:wednesday' => "Среда", + 'event_calendar:dow:full:thursday' => "Четверг", + 'event_calendar:dow:full:friday' => "Пятница", + 'event_calendar:dow:full:saturday' => "Суббота", + 'event_calendar:dow:full:sunday' => "Воскресенье", + 'event_calendar:schedule_type:poll' => "Сделать опрос приглашенных про день/время", + 'event_calendar:schedule_type:fixed' => "Установить день/время", + 'elgg_calendar:send_reminder_label' => "Отправить напоминание", + 'elgg_calendar:send_reminder_before' => "перед", + 'event_calendar:interval:minute' => "менут", + 'event_calendar:interval:hour' => "часов", + 'event_calendar:interval:day' => "дней", + 'event_calendar:site_calendar' => "Календарь сайта", + 'event_calendar:calendar_label' => "Календарь", + 'event_calendar:calendar_description' => "Календарь для этого событияCalendar for this event.", + 'event_calendar:are_you_sure' => "Вы уверены в этом изменении?", + 'event_calendar:basic:header' => "Общая информация", + 'event_calendar:schedule:header' => "Расписание", + 'event_calendar:permissions:header' => "Разрешения", + 'event_calendar:read_access' => "Доступ на чтение ", + 'event_calendar:web_conference_label' => "Подключить веб-конференцию для этого события", + 'event_calendar:share_ownership:label' => "Добавить еще владельцев этого события", + 'event_calendar:share_ownership:description' => "Разрешить следующим людям редактировать или удалять это событие, приглашать участников", + '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' => "Добавить событие", + 'event_calendar:schedule_event' => "Расписание события", + 'event_calendar:list_polls' => "Показать голосования", + 'event_calendar:edit_form:error:missing_title' => "Ошибка: укажите название", + 'event_calendar:repeated_event:week_interval' => "каждые %s недели.", + 'event_calendar:repeated_event:week_single' => "каждую неделю.", + 'event_calendar:repeated_event:format' => "Начинать с %s и продолжать по %s", + 'event_calendar:settings:repeated_events:title' => "Разрешить повторяющиеся события (сейчас работает нормально только в режиме полного календаря)", + 'event_calendar:settings:reminders:title' => "Разрешить отправку напоминаний", + 'event_calendar:reminder:subject' => "Напоминане о событии: %s", + 'event_calendar:reminder:body' => "Событие + +%s + +будет проходть в + +%s. + +Вы можете просмотреть страницу события тут: +%s + ", + + /** + * BBB support + */ + + 'event_calendar:bbb_server_url' => "Big Blue Button server URL (must end with slash)", + 'event_calendar:bbb_security_salt' => "Big Blue Button security salt", + 'event_calendar:bbb_create_error' => "Error: unable to create BBB conference, message was: %s", + 'event_calendar:conference_create_error' => "Error: unable to create web conference.", + 'event_calendar:bbb_settings_error' => "Error: must set conference URL and salt in plugin settings", + 'event_calendar:couldnotjoin' => "Error: unable to join conference.", + 'event_calendar:join_conf_button' => "Join conference", + + 'event_calendar:poll_suffix' => "(опрос)", + 'event_calendar:resend_poll_invitation' => "Do you want to alert poll invitees that the options have changed?", /** * Event calendar river -- cgit v1.2.3 From f79c9b1eb133993e37591d6086b7cc37bd2d6d89 Mon Sep 17 00:00:00 2001 From: Tacid <tacid@tacid.kiev.ua> Date: Wed, 30 Jan 2013 02:42:55 +0200 Subject: russian translation: delete 2 unused keys delete_confirm_title and delete_confirm_description --- languages/ru.php | 2 -- 1 file changed, 2 deletions(-) diff --git a/languages/ru.php b/languages/ru.php index 6e95b0cb7..df5ee8d7d 100644 --- a/languages/ru.php +++ b/languages/ru.php @@ -65,8 +65,6 @@ 'event_calendar:view_link' => "Просмотреть событие", 'event_calendar:edit_link' => "Изменить событие", 'event_calendar:delete_link' => "Удалить событие", - 'event_calendar:delete_confirm_title' => "Подтверждение удаление события", - 'event_calendar:delete_confirm_description' => "Вы уверены что хотите удалить событие (\"%s\")? Это действие не может быть отменено.", 'event_calendar:delete_response' => "Событие было удалено.", 'event_calendar:error_delete' => "Такого события не существует или у вас нет прав на его удаление.", 'event_calendar:delete_cancel_response' => "Удаление события отменено.", -- cgit v1.2.3 From 5730b98c097a506c21163873a5d562cc872be4b5 Mon Sep 17 00:00:00 2001 From: artem-sv30 <artem.sv30@gmail.com> Date: Thu, 31 Jan 2013 18:04:07 +0200 Subject: Update languages/ru.php --- languages/ru.php | 296 +++++++++++++++++++++++++++---------------------------- 1 file changed, 148 insertions(+), 148 deletions(-) diff --git a/languages/ru.php b/languages/ru.php index df5ee8d7d..980c014f3 100644 --- a/languages/ru.php +++ b/languages/ru.php @@ -34,15 +34,15 @@ 'event_calendar:contact_description' => "Лицо с которым можно связаться для уточнения информации, " ."желательно с номером телефона или email адресом.", 'event_calendar:organiser_label' => "Организатор", - 'event_calendar:organiser_description' => "Лицо или организация отвечающая за событие.", + 'event_calendar:organiser_description' => "Лицо или организация, отвечающая за событие.", 'event_calendar:event_tags_label' => "Теги", - 'event_calendar:event_tags_description' => "Список тегов относящихся к этому событию разделенный запятыми.", - 'event_calendar:long_description_label' => "Детальное описаное", + 'event_calendar:event_tags_description' => "Список тегов, относящихся к этому событию, разделенный запятыми.", + 'event_calendar:long_description_label' => "Детальное описание", 'event_calendar:long_description_description' => "Может быть параграф или больше, сколько потребуется.", 'event_calendar:manage_event_response' => "Ваше событие сохранено.", 'event_calendar:add_event_response' => "Ваше событие добавлено.", 'event_calendar:manage_event_error' => "Ошибка: При сохранении возникла ошибка. " - ."Пожалуйста удостовертесь что вы указали все обязательные поля.", + ."Пожалуйста, удостоверьтесь, что вы указали все обязательные поля.", 'event_calendar:error_nosuchevent' => "Ошибка: нет такого события.", 'event_calendar:show_events_title' => "Календарь", 'event_calendar:day_label' => "День", @@ -69,12 +69,12 @@ 'event_calendar:error_delete' => "Такого события не существует или у вас нет прав на его удаление.", 'event_calendar:delete_cancel_response' => "Удаление события отменено.", 'event_calendar:add_to_my_calendar' => "Добавить в мой календарь", - 'event_calendar:remove_from_my_calendar' => "Убрать мз моего каледаря", + 'event_calendar:remove_from_my_calendar' => "Убрать мз моего календаря", 'event_calendar:add_to_my_calendar_response' => "Событие было добавлено в Ваш личный календарь.", 'event_calendar:add_to_my_calendar_error' => "Событие не может быть добавлено в Ваш персональный каледарь. " ."(Возможно событие уже заполнено или совпадает по времени с другим событием в Вашем персональном календаре?)", 'event_calendar:remove_from_my_calendar_response' => "Событие было удалено из Вашего персонального календаря.", - 'event_calendar:add_to_the_calendar' => "Довить в календарь", + 'event_calendar:add_to_the_calendar' => "Добавить в календарь", 'event_calendar:remove_from_the_calendar' => "Убрать", 'event_calendar:add_to_the_calendar_menu_text' => "Добавить в мой", 'event_calendar:remove_from_the_calendar_menu_text' => "Убрать из моего", @@ -82,147 +82,147 @@ 'event_calendar:added_to_the_calendar' => "Добавлено в календарь", 'event_calendar:removed_from_the_calendar' => "Удалено из календаря", 'event_calendar:add_to_the_calendar_response' => "Событие добавлено в календарь.", - 'event_calendar:add_to_the_calendar_error' => "This event could not added to this person's calendar. " - ."(Perhaps the event is full or is scheduled at the same time as another event in this person's calendar?)", - 'event_calendar:remove_from_the_calendar_response' => "Event removed from this person's calendar.", + 'event_calendar:add_to_the_calendar_error' => "Это событие не может быть добавлено в календарь этой персоны. " + ."(Возможно, событие уже заполнено или запланировано на время, совпадающее со временем другого события в календаре этой персоны)", + 'event_calendar:remove_from_the_calendar_response' => "Событие удалено из календаря этой персоны.", - 'event_calendar:users_for_event_menu_title' => "People listing this event on their personal calendars", - 'event_calendar:users_for_event_title' => "Personal calendars for \"%s'\"", + 'event_calendar:users_for_event_menu_title' => "Люди, регистрирующие это событие в своих календарях", + 'event_calendar:users_for_event_title' => "Персональные календари \"%s'\"", 'event_calendar:personal_event_calendars_link' => "В %s календарях", 'event_calendar:personal_event_calendars_link_one' => "В 1 календаре", - 'event_calendar:users_for_event_breadcrumb' => "Personal calendars", - 'event_calendar:settings:group_profile_display:title' => "Group calendar profile display (if group calendars are enabled)", - 'event_calendar:settings:group_profile_display_option:left' => "left column", - 'event_calendar:settings:group_profile_display_option:right' => "right column", - 'event_calendar:settings:group_profile_display_option:none' => "none", - 'event_calendar:settings:times:title' => "Add time as well as date to events", - 'event_calendar:settings:autopersonal:title' => "Automatically add events a user creates to his/her personal calendar.", - 'event_calendar:settings:autogroup:title' => "Automatically add group events for all members to their personal calendars.", - 'event_calendar:settings:agenda_view:title' => "Use Agenda view", - 'event_calendar:settings:venue_view:title' => "Display venue in summary view (event listings)", - 'event_calendar:settings:yes' => "yes", - 'event_calendar:settings:no' => "no", - 'event_calendar:settings:site_calendar:title' => "Site calendar", - 'event_calendar:settings:site_calendar:admin' => "yes, only admins can post events", - 'event_calendar:settings:site_calendar:loggedin' => "yes, any logged-in user can post an event", - 'event_calendar:settings:group_calendar:title' => "Group calendars", - 'event_calendar:settings:group_calendar:admin' => "yes, only admins and group owners can post events", - 'event_calendar:settings:group_calendar:members' => "yes, any group member can post an event", - 'event_calendar:settings:group_default:title' => "New groups should by default have a group calendar (if group calendars are enabled)", - 'event_calendar:settings:group_default:no' => "no (but admins or group owners can turn a group calendar on if desired)", - 'event_calendar:settings:group_default:yes' => "yes (but admins or group owners can turn a group calendar off if desired)", - 'event_calendar:settings:group_always_display:title' => "If group calendar is enabled, always display it (even if empty)", - 'event_calendar:settings:region_display:title' => "Add region field to events", - 'event_calendar:settings:region_list:title' => "List of regions (one per line)", - 'event_calendar:region_label' => "Region", - 'event_calendar:region_description' => "Select the region that this event will be held in.", - 'event_calendar:settings:type_display:title' => "Add event type to events", - 'event_calendar:settings:type_list:title' => "List of event types (one per line)", - 'event_calendar:type_label' => "Type of event", - 'event_calendar:type_description' => "Select the type of event.", - 'event_calendar:all' => "All", - 'event_calendar:region_filter_by_label' => "Filter by region: ", - 'event_calendar:settings:first_date:title' => "First allowable date (in YYYY-MM-DD format)", - 'event_calendar:settings:last_date:title' => "Last allowable date (in YYYY-MM-DD format)", + 'event_calendar:users_for_event_breadcrumb' => "Персональные календари", + 'event_calendar:settings:group_profile_display:title' => "Окно профиля календарей группы (если календари группы разрешены)", + 'event_calendar:settings:group_profile_display_option:left' => "левая колонка", + 'event_calendar:settings:group_profile_display_option:right' => "правая колонка", + 'event_calendar:settings:group_profile_display_option:none' => "никакая", + 'event_calendar:settings:times:title' => "Добавить время и дату к событиям", + 'event_calendar:settings:autopersonal:title' => "Автоматически добавлять события, которые пользователь создает в своем календаре.", + 'event_calendar:settings:autogroup:title' => "Автоматически добавлять групповые события в персональные календари всех членов группы.", + 'event_calendar:settings:agenda_view:title' => "Использовать вид План", + 'event_calendar:settings:venue_view:title' => "Показывать место проведения в итоговом виде (списки событий)", + 'event_calendar:settings:yes' => "да", + 'event_calendar:settings:no' => "нет", + 'event_calendar:settings:site_calendar:title' => "Календарь сайта", + 'event_calendar:settings:site_calendar:admin' => "да, только администраторы могут отправлять события", + 'event_calendar:settings:site_calendar:loggedin' => "да, только вошедшие пользователи могут отправлять события", + 'event_calendar:settings:group_calendar:title' => "Календари группы", + 'event_calendar:settings:group_calendar:admin' => "да, только администраторы и владельцы групп могут отправлять события", + 'event_calendar:settings:group_calendar:members' => "да, только члены групп могут отправлять события", + 'event_calendar:settings:group_default:title' => "По умолчанию новые группы должны иметь календарь группы (если календари группы разрешены)", + 'event_calendar:settings:group_default:no' => "нет (но администраторы или владельцы групп могут разрешить календари группы)", + 'event_calendar:settings:group_default:yes' => "да (но администраторы или владельцы групп могут запретить календари группы)", + 'event_calendar:settings:group_always_display:title' => "Всегда показывать календарь группы, если календари группы разрешены (даже если он пустой)", + 'event_calendar:settings:region_display:title' => "Добавить поле Регион в события", + 'event_calendar:settings:region_list:title' => "Список регионов (один на строку)", + 'event_calendar:region_label' => "Регион", + 'event_calendar:region_description' => "Выбрать регион, где будет проводиться событие.", + 'event_calendar:settings:type_display:title' => "Добавить тип события", + 'event_calendar:settings:type_list:title' => "Список типов событий (один на строку)", + 'event_calendar:type_label' => "Тип события", + 'event_calendar:type_description' => "Выбрать тип события.", + 'event_calendar:all' => "Все", + 'event_calendar:region_filter_by_label' => "Фильтровать по региону: ", + 'event_calendar:settings:first_date:title' => "Первая разрешенная дата (в формате ГГГГ-ММ-ДД)", + 'event_calendar:settings:last_date:title' => "Последняя разрешенная дата (в формате ГГГГ-ММ-ДД)", 'event_calendar:enable_event_calendar' => "Включить календарь группы", - 'event_calendar:no_events_found' => "No events found.", - 'event_calendar:mine' => "Mine", - 'event_calendar:feature' => "Feature", + 'event_calendar:no_events_found' => "Не найдено ни одного события.", + 'event_calendar:mine' => "Мои", + 'event_calendar:feature' => "Свойства", 'event_calendar:unfeature' => "Unfeature", - 'event_calendar:agenda:column:time' => "Time", - 'event_calendar:agenda:column:session' => "Session", - 'event_calendar:agenda:column:venue' => "Location", - 'event_calendar:upcoming_events_title' => "Upcoming events", - 'event_calendar:settings:paged' => "paged", - 'event_calendar:settings:agenda' => "agenda", - 'event_calendar:settings:month' => "by month", - 'event_calendar:settings:full' => "full view", - 'event_calendar:settings:listing_format:title' => "Event listing format", - 'event_calendar:paged:column:date' => "Date", - 'event_calendar:paged:column:time' => "Time", - 'event_calendar:paged:column:event' => "Event", - 'event_calendar:paged:column:venue' => "Location", - 'event_calendar:paged:column:calendar' => "Calendar", - 'event_calendar:settings:spots_display:title' => "Add a spots field for each " - ."event to allow you to limit the number of people who can add the event to their calendar", - 'event_calendar:settings:no_collisions:title' => "Collision detection: prevent people from adding two events at the same time to their personal calendar", - 'event_calendar:settings:collision_length:title' => "How long (in seconds) should an event be assumed to last if no end date or time is specified " - ."(used for collision detection). Defaults to 3600 seconds = 1 hour.", - 'event_calendar:spots_label' => "Spots", - 'event_calendar:spots_description' => "How many people are allowed to add this event to their personal calendars?", - 'event_calendar:open' => "Open", - 'event_calendar:settings:add_users:title' => "Allow event creators and site admins to add their event to other personal calendars.", - 'event_calendar:add_user_label' => "Add users", - 'event_calendar:add_user_description' => "Add this event to personal calendars by typing two or more characters in the above text autocomplete field to select a user. " - ."You can add multiple users by clicking the \"+\" link. (You must submit this form to actually add the event to the calendars.)", - 'event_calendar:settings:add_users_notify:title' => "Email users who have had an event added to their personal calendar by an admin or event creator.", - 'event_calendar:add_users_notify:subject' => "A new event has been added to your personal calendar", - 'event_calendar:add_users_notify:body' => "%s,\n\nThe \"%s\" event has been added to your calendar.\n\nYou can view it here: \n\n%s\n", + 'event_calendar:agenda:column:time' => "Время", + 'event_calendar:agenda:column:session' => "Сессия", + 'event_calendar:agenda:column:venue' => "Место", + 'event_calendar:upcoming_events_title' => "Предстоящие события", + 'event_calendar:settings:paged' => "постранично", + 'event_calendar:settings:agenda' => "план", + 'event_calendar:settings:month' => "по месяцам", + 'event_calendar:settings:full' => "полный вид", + 'event_calendar:settings:listing_format:title' => "Формат списка событий", + 'event_calendar:paged:column:date' => "Дата", + 'event_calendar:paged:column:time' => "Время", + 'event_calendar:paged:column:event' => "Событие", + 'event_calendar:paged:column:venue' => "Место", + 'event_calendar:paged:column:calendar' => "Календарь", + 'event_calendar:settings:spots_display:title' => "Добавить поле Количество к каждому " + ."чтобы ограничить количество людей, которые могут добавить событие к себе в календари", + 'event_calendar:settings:no_collisions:title' => "Определение конфликтов: запретить людям добавлять в календари два события с пересекающимися временами", + 'event_calendar:settings:collision_length:title' => "Какую длительность (в секундах) выставлять событию, если не установлена его конечная дата или время " + ."(используется для определения конфликтов). По умолчанию 3600 секунд = 1 час.", + 'event_calendar:spots_label' => "Количество", + 'event_calendar:spots_description' => "Скольким людям разрешено добавить это событие в свои персональные календари?", + 'event_calendar:open' => "Открыт", + 'event_calendar:settings:add_users:title' => "Разрешить создателям события и администраторам сайта добавлять свои события в другие персональные календари.", + 'event_calendar:add_user_label' => "Добавить пользователей", + 'event_calendar:add_user_description' => "Добавить это событие в персональные календари, выбирая пользователя в поле с автозаполнением выше. " + ."Вы можете добавить нескольких пользователей, нажимая на ссылку \"+\". (Вы должны отправить эту форму, чтобы добавить событие в календари.)", + 'event_calendar:settings:add_users_notify:title' => "Уведомить по электронной почте тех пользователей, которым администраторы сайта или создатель события добавили событие в персональный календарь.", + 'event_calendar:add_users_notify:subject' => "В ваш персональный календарь добавлено новое событие", + 'event_calendar:add_users_notify:body' => "%s,\n\nСобытие \"%s\" было добавлено в ваш календарь.\n\nВы можете посмотреть его здесь: \n\n%s\n", - 'event_calendar:settings:region_list_handles:title' => "The region strings above are string handles. Use the Elgg translation system to resolve them.", - 'event_calendar:settings:type_list_handles:title' => "The type strings above are string handles. Use the Elgg translation system to resolve them.", + 'event_calendar:settings:region_list_handles:title' => "Строки регионов выше - это строковые десктипторы. Используйте систему переводов Elgg для их разрешения.", + 'event_calendar:settings:type_list_handles:title' => "Строки типов выше - это строковые десктипторы. Используйте систему переводов Elgg для их разрешения.", - 'event_calendar:settings:personal_manage:title' => "Calendar permissions", - 'event_calendar:settings:personal_manage:description' => "Determines whether people can add events to their personal calendars (open), " - ."need to request the event creator to do so (closed), have no option at all (private), or allow event creators to determine this for each event (by event). " - ."Note if you set this to private you should probably activate the option above to allow event creators and site admins to " - ."add their events to other personal calendars.", + 'event_calendar:settings:personal_manage:title' => "Допуски календаря", + 'event_calendar:settings:personal_manage:description' => "Определяет, могут ли пользователи добавлять события в свои персональные календари (открытое), " + ."необходим запрос создателю события, чтобы сделать это (закрытое), невозможно вообще (частное), или позволить создателю события определять это для каждого события (по событию). " + ."Примечание. Если вы устанавливаете это в Частное, то, возможно, следует активировать опцию, позволяющую создателю события или администраторам сайта " + ."добавлять свои события в персональные календари других пользователей.", 'event_calendar:strapline' => "Опубликовал(а) %s %s", - 'event_calendar:request_event_response' => "Your request to be added to this event has been sent.", - 'event_calendar:request_event_error' => "Ошибка: Could not send your request to be added to this event.", - 'event_calendar:request_subject' => "You have received an event request", - 'event_calendar:request_message' => "%s has asked to have the event \"%s\", here: + 'event_calendar:request_event_response' => "Ваш запрос на добавление к этому событию был отправлен.", + 'event_calendar:request_event_error' => "Ошибка: ваш запрос на добавление к этому событию не может быть отправлен.", + 'event_calendar:request_subject' => "Вы получили запрос по событию", + 'event_calendar:request_message' => "%s просит разрешить добавить событие \"%s\", здесь: %s -added to his/her personal calendar. +в свой персональный календарь. -You can manage calendar requests for this event here: +Вы можете управлять календарными запросами на это событие тут: %s ", - 'event_calendar:review_requests_error' => "This event either does not exist or you do not have the authority to approve requests for it.", - 'event_calendar:review_requests_request_none' => "There are no requests to review for this event.", - 'event_calendar:request:remove:check' => 'Are you sure you want to reject this request?', - 'event_calendar:requestkilled' => 'This request has been rejected.', - 'event_calendar:request_approved' => "This request has been approved.", - 'event_calendar:review_requests_title' => "Review requests for \"%s\"", - 'event_calendar:review_requests_menu_title' => "Review requests", - 'event_calendar:make_request_title' => 'Request this event', - 'event_calendar:review_requests:reject' => "Reject", - 'event_calendar:review_requests:reject:title' => "Reject this request", - 'event_calendar:review_requests:accept' => "Accept", - 'event_calendar:review_requests:accept:title' => "Accept this request", - 'event_calendar:review_requests:error:approve' => "Ошибка: could not approve this request.", - 'event_calendar:review_requests:error:reject' => "Ошибка: could not reject this request.", + 'event_calendar:review_requests_error' => "Либо это событие не существует, либо у вас нет полномочий подтверждать запрос на него.", + 'event_calendar:review_requests_request_none' => "Для этого события нет запросов на обзор.", + 'event_calendar:request:remove:check' => 'Вы уверены, что хотите отклонить этот запрос?', + 'event_calendar:requestkilled' => 'Этот запрос был отклонен.', + 'event_calendar:request_approved' => "Этот запрос был подтвержден.", + 'event_calendar:review_requests_title' => "Обзор запросов на \"%s\"", + 'event_calendar:review_requests_menu_title' => "Обзор запросов", + 'event_calendar:make_request_title' => 'Запросить это событие', + 'event_calendar:review_requests:reject' => "Отклонить", + 'event_calendar:review_requests:reject:title' => "Отклонить этот запрос", + 'event_calendar:review_requests:accept' => "Принять", + 'event_calendar:review_requests:accept:title' => "Принять этот запрос", + 'event_calendar:review_requests:error:approve' => "Ошибка: не могу подтвердить этот запрос.", + 'event_calendar:review_requests:error:reject' => "Ошибка: не могу отклонить этот запрос.", - 'event_calendar:settings:hide_access:title' => "Hide event access drop down", - 'event_calendar:settings:default_access:title' => "If the event access is hidden, what should it default to?", - 'event_calendar:settings:hide_end:title' => "Hide end time and date fields", - 'event_calendar:settings:more_required:title' => "Make all visible fields except long description required.", + 'event_calendar:settings:hide_access:title' => "Скрыть выпадающий элемент с доступом к событию", + 'event_calendar:settings:default_access:title' => "Какое должно быть значение по умолчанию, если доступ к событию скрыт?", + 'event_calendar:settings:hide_end:title' => "Скрыть поля даты и времени окончания", + 'event_calendar:settings:more_required:title' => "Сделать обязательными все видимые поля, кроме долгих описаний.", - 'event_calendar:add_to_group:remove_group_title' => "Remove this event from group", - 'event_calendar:add_to_group:remove_group_button' => "Remove from group", - 'event_calendar:remove_from_group:success' => "Event removed from group calendar", - 'event_calendar:add_to_group:add_group_title' => "Add this event to group", - 'event_calendar:add_to_group:add_group_button' => "Add to group", - 'event_calendar:add_to_group:success' => "Event added to group calendar", - 'event_calendar:settings:add_to_group_calendar:title' => "Allow group admins to add any existing event to a group calendar", + 'event_calendar:add_to_group:remove_group_title' => "Удалить это событие из группы", + 'event_calendar:add_to_group:remove_group_button' => "Удалить из группы", + 'event_calendar:remove_from_group:success' => "Событие удалено из календаря группы", + 'event_calendar:add_to_group:add_group_title' => "Добавить это событие в группу", + 'event_calendar:add_to_group:add_group_button' => "Добавить в группу", + 'event_calendar:add_to_group:success' => "Событие добавлено в календарь группы", + 'event_calendar:settings:add_to_group_calendar:title' => "Разрешить администраторам группы добавлять любое существующее событие в календарь группы", - 'event_calendar:group_breadcrumb' => "Group calendar", - 'event_calendar:no_group' => "There is no such group.", - 'event_calendar:generic_error_title' => "Error", - 'event_calendar:error_event_edit' => "Ошибка: there is no such event or you do not have permission to edit it.", + 'event_calendar:group_breadcrumb' => "Календарь группы", + 'event_calendar:no_group' => "Такой группы не существует.", + 'event_calendar:generic_error_title' => "Ошибка", + 'event_calendar:error_event_edit' => "Ошибка: либо такого события не существует, либо у вас нет разрешения ее редактировать.", 'event_calendar:add' => "Добавить", - 'feed:ical' => "iCal feed for this page", - 'event_calendar:ical_popup_message' => "You can use the following URL to get an iCalendar feed of the public events from this listing page: ", - 'event_calendar:ical_auth_file_name:title' => "Location of iCal authentication file on local file system (experimental - not needed for public feeds)", + 'feed:ical' => "Лента iCal для этой страницы", + 'event_calendar:ical_popup_message' => "Вы можете использовать следующую ссылку, чтобы получить ленту iCalendar на все общие события из следующего списка: ", + 'event_calendar:ical_auth_file_name:title' => "Путь к файлу идентификации iCal в локальной файловой системе (экспериментально - не нужна для общих лент)", - 'event_calendar:owner:permissions_error' => "You do not have permission to view that page.", - 'event_calendar:feature_not_activated' => "This feature is not activated", + 'event_calendar:owner:permissions_error' => "У вас нет разрешения для просмотра этой страницы.", + 'event_calendar:feature_not_activated' => "Эта возможность не активирована", 'event_calendar:show_all' => "Показать все", 'event_calendar:show_open' => "Показать открытые", @@ -234,16 +234,16 @@ You can manage calendar requests for this event here: 'event_calendar:listing_title:open' => "Открытые события", 'event_calendar:listing_title:mine' => "Мой календарь", 'event_calendar:listing_title:friends' => "Календари друзей", - 'event_calendar:manage_users:title' => "Manage subscribers for \"%s\"", - 'event_calendar:manage_users:breadcrumb' => "Manage subscribers", - 'event_calendar:manage_users:description' => "Add or remove events from personal calendars.", - 'event_calendar:manage_users:unauthorized' => "Ошибка: you are not authorised to manage personal calendars for this event.", - 'event_calendar:add_to_group_members:success' => "This event has been added to the personal calendars of all group members.", - 'event_calendar:add_to_group_members:error' => "Ошибка: could not add this event to the personal calendars of group members.", - 'event_calendar:remove_from_group_members:success' => "This event has been removed from the personal calendars of all group members.", - 'event_calendar:remove_from_group_members:error' => "Ошибка: could not remove this event from the personal calendars of group members.", - 'event_calendar:add_to_group_members:button' => "Add to all", - 'event_calendar:remove_from_group_members:button' => "Remove from all", + 'event_calendar:manage_users:title' => "Управлять подписчиками на \"%s\"", + 'event_calendar:manage_users:breadcrumb' => "Управлять подписчиками", + 'event_calendar:manage_users:description' => "Добавить или удалить события из персональных календарей.", + 'event_calendar:manage_users:unauthorized' => "Ошибка: вы не уполномочены управлять персональными календарями для этого события.", + 'event_calendar:add_to_group_members:success' => "Это событие было добавлено в персональные календари всех членов группы.", + 'event_calendar:add_to_group_members:error' => "Ошибка: не могу добавить это событие в персональные календари членов группы.", + 'event_calendar:remove_from_group_members:success' => "Это событие было удалено из персональных календарей всех членов группы.", + 'event_calendar:remove_from_group_members:error' => "Ошибка: не могу удалить это событие из персональных календарей членов группы.", + 'event_calendar:add_to_group_members:button' => "Добавить всем", + 'event_calendar:remove_from_group_members:button' => "Удалить из всех", 'event_calendar:manage_subscribers:success' => "Персональный календарь обновлен.", 'event_calendar:manage_subscribers:error' => "Ошибка: не могу обновить персональный календарь.", @@ -254,9 +254,9 @@ You can manage calendar requests for this event here: 'event_calendar:personal_manage:label' => "Доступ к календарю", 'event_calendar:personal_manage:description' => "Определяет, может ли пользователь добавить это событие в свой календарях (открытый)," ."требуется разрешние (закрытый) или не имеет возможности добавить вообще (приватное - такм образом только вы или сайт-админ могут добавять событие в календари).", - 'event_calendar:personal_manage:by_event:open' => "Open. People can freely add this event to their personal calendars.", - 'event_calendar:personal_manage:by_event:closed' => "Closed. People can request to add this event to their personal calendars. You can review and approve requests.", - 'event_calendar:personal_manage:by_event:private' => "Private. You or another event administrator must add this event to personal calendars. There is no way for other users to add or request this event.", + 'event_calendar:personal_manage:by_event:open' => "Открытое. Пользователи могут свободно добавлять это событие в свои персональные календари.", + 'event_calendar:personal_manage:by_event:closed' => "Закрытое. Пользователи могут отправлять запрос, чтобы добавить это событие в свои персональные календари. Вы можете просматривать и подтверждать эти запросы.", + 'event_calendar:personal_manage:by_event:private' => "Частное. Вы или другой администратор события должны добавить это событие в персональные календари. У других пользователей нет возможности послать запрос на это событие.", 'event_calendar:settings:full_calendar:title' => "Поддержка полного календаря", 'event_calendar:modify_full_calendar:error' => "Ошибка: не могу изменить весь календарь", @@ -292,7 +292,7 @@ You can manage calendar requests for this event here: 'event_calendar:interval:day' => "дней", 'event_calendar:site_calendar' => "Календарь сайта", 'event_calendar:calendar_label' => "Календарь", - 'event_calendar:calendar_description' => "Календарь для этого событияCalendar for this event.", + 'event_calendar:calendar_description' => "Календарь для этого события.", 'event_calendar:are_you_sure' => "Вы уверены в этом изменении?", 'event_calendar:basic:header' => "Общая информация", 'event_calendar:schedule:header' => "Расписание", @@ -301,8 +301,8 @@ You can manage calendar requests for this event here: 'event_calendar:web_conference_label' => "Подключить веб-конференцию для этого события", 'event_calendar:share_ownership:label' => "Добавить еще владельцев этого события", 'event_calendar:share_ownership:description' => "Разрешить следующим людям редактировать или удалять это событие, приглашать участников", - '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:settings:fewer_fields:title' => "Скрыть платежную информацию, контакты, органайзер и длинные описательные поля", + 'event_calendar:settings:restricted_times:title' => "Ограниченное время между 6:00 and 21:00", 'event_calendar:add_event' => "Добавить событие", 'event_calendar:schedule_event' => "Расписание события", 'event_calendar:list_polls' => "Показать голосования", @@ -329,16 +329,16 @@ You can manage calendar requests for this event here: * BBB support */ - 'event_calendar:bbb_server_url' => "Big Blue Button server URL (must end with slash)", - 'event_calendar:bbb_security_salt' => "Big Blue Button security salt", - 'event_calendar:bbb_create_error' => "Error: unable to create BBB conference, message was: %s", - 'event_calendar:conference_create_error' => "Error: unable to create web conference.", - 'event_calendar:bbb_settings_error' => "Error: must set conference URL and salt in plugin settings", - 'event_calendar:couldnotjoin' => "Error: unable to join conference.", - 'event_calendar:join_conf_button' => "Join conference", + 'event_calendar:bbb_server_url' => "Адрес сервера Big Blue Button (должен заканчиваться косой чертой)", + 'event_calendar:bbb_security_salt' => "Случайное число безопасности Big Blue Button", + 'event_calendar:bbb_create_error' => "Ошибка: невозможно создать конференцию BBB, сообщение: %s", + 'event_calendar:conference_create_error' => "Ошибка: невозможно создать веб-конференцию.", + 'event_calendar:bbb_settings_error' => "Ошибка: необходимо установить адрес конференции и случайное число в настройках плагина", + 'event_calendar:couldnotjoin' => "Ошибка: невозможно присоединиться к конференции.", + 'event_calendar:join_conf_button' => "Присоединиться к конференции", 'event_calendar:poll_suffix' => "(опрос)", - 'event_calendar:resend_poll_invitation' => "Do you want to alert poll invitees that the options have changed?", + 'event_calendar:resend_poll_invitation' => "Вы хотите предупредить приглашенных пользователей, что эти опции изменились?", /** * Event calendar river -- cgit v1.2.3 From da191e2432b0853bd33515fb2bc33a0fe50952f9 Mon Sep 17 00:00:00 2001 From: hellekin <hellekin@cepheide.org> Date: Sat, 2 Mar 2013 12:41:39 -0300 Subject: Fix timezone shift (thank you d_urruti) --- views/default/js/event_calendar/fullcalendar.php | 1419 +++++++++++----------- 1 file changed, 709 insertions(+), 710 deletions(-) diff --git a/views/default/js/event_calendar/fullcalendar.php b/views/default/js/event_calendar/fullcalendar.php index a3cd090a0..d0321f64b 100644 --- a/views/default/js/event_calendar/fullcalendar.php +++ b/views/default/js/event_calendar/fullcalendar.php @@ -1,4 +1,3 @@ - //<script> /** * @preserve @@ -16,7 +15,7 @@ * Date: Mon Feb 6 22:40:40 2012 -0800 * */ - + (function($, undefined) { @@ -31,20 +30,20 @@ var defaults = { right: 'today prev,next' }, weekends: true, - + // editing //editable: false, //disableDragging: false, //disableResizing: false, - + allDayDefault: true, ignoreTimezone: true, - + // event ajax lazyFetching: true, startParam: 'start', endParam: 'end', - + // time formats titleFormat: { month: 'MMMM yyyy', @@ -59,7 +58,7 @@ var defaults = { timeFormat: { // for event elements '': 'h(:mm)t' // default }, - + // locale isRTL: false, firstDay: 0, @@ -77,19 +76,19 @@ var defaults = { week: 'week', day: 'day' }, - + // jquery-ui theming theme: false, buttonIcons: { prev: 'circle-triangle-w', next: 'circle-triangle-e' }, - + //selectable: false, unselectAuto: true, - + dropAccept: '*' - + }; // right-to-left defaults @@ -141,8 +140,8 @@ $.fn.fullCalendar = function(options) { } return this; } - - + + // would like to have this logic in EventManager, but needs to happen before options are recursively extended var eventSources = options.eventSources || []; delete options.eventSources; @@ -150,25 +149,25 @@ $.fn.fullCalendar = function(options) { eventSources.push(options.events); delete options.events; } - + options = $.extend(true, {}, defaults, (options.isRTL || options.isRTL===undefined && defaults.isRTL) ? rtlDefaults : {}, options ); - - + + this.each(function(i, _element) { var element = $(_element); var calendar = new Calendar(element, options, eventSources); element.data('fullCalendar', calendar); // TODO: look into memory leak implications calendar.render(); }); - - + + return this; - + }; @@ -179,11 +178,11 @@ function setDefaults(d) { - + function Calendar(element, options, eventSources) { var t = this; - - + + // exports t.options = options; t.render = render; @@ -208,14 +207,14 @@ function Calendar(element, options, eventSources) { t.getView = getView; t.option = option; t.trigger = trigger; - - + + // imports EventManager.call(t, options, eventSources); var isFetchNeeded = t.isFetchNeeded; var fetchEvents = t.fetchEvents; - - + + // locals var _element = element[0]; var header; @@ -232,16 +231,16 @@ function Calendar(element, options, eventSources) { var date = new Date(); var events = []; var _dragElement; - - - + + + /* Main Rendering -----------------------------------------------------------------------------*/ - - + + setYMD(date, options.year, options.month, options.date); - - + + function render(inc) { if (!content) { initialRender(); @@ -252,8 +251,8 @@ function Calendar(element, options, eventSources) { renderView(inc); } } - - + + function initialRender() { tm = options.theme ? 'ui' : 'fc'; element.addClass('fc'); @@ -277,8 +276,8 @@ function Calendar(element, options, eventSources) { lateRender(); } } - - + + // called when we know the calendar couldn't be rendered when it was initialized, // but we think it's ready now function lateRender() { @@ -288,42 +287,42 @@ function Calendar(element, options, eventSources) { } },0); } - - + + function destroy() { $(window).unbind('resize', windowResize); header.destroy(); content.remove(); element.removeClass('fc fc-rtl ui-widget'); } - - - + + + function elementVisible() { return _element.offsetWidth !== 0; } - - + + function bodyVisible() { return $('body')[0].offsetWidth !== 0; } - - - + + + /* View Rendering -----------------------------------------------------------------------------*/ - + // TODO: improve view switching (still weird transition in IE, and FF has whiteout problem) - + function changeView(newViewName) { if (!currentView || newViewName != currentView.name) { ignoreWindowResize++; // because setMinHeight might change the height before render (and subsequently setSize) is reached unselect(); - + var oldView = currentView; var newViewElement; - + if (oldView) { (oldView.beforeHide || noop)(); // called before changing min-height. if called after, scroll state is reset (in Opera) setMinHeight(content, content.height()); @@ -332,7 +331,7 @@ function Calendar(element, options, eventSources) { setMinHeight(content, 1); // needs to be 1 (not 0) for IE7, or else view dimensions miscalculated } content.css('overflow', 'hidden'); - + currentView = viewInstances[newViewName]; if (currentView) { currentView.element.show(); @@ -344,39 +343,39 @@ function Calendar(element, options, eventSources) { t // the calendar object ); } - + if (oldView) { header.deactivateButton(oldView.name); } header.activateButton(newViewName); - + renderView(); // after height has been set, will make absoluteViewElement's position=relative, then set to null - + content.css('overflow', ''); if (oldView) { setMinHeight(content, 1); } - + if (!newViewElement) { (currentView.afterShow || noop)(); // called after setting min-height/overflow, so in final scroll state (for Opera) } - + ignoreWindowResize--; } } - - - + + + function renderView(inc) { if (elementVisible()) { ignoreWindowResize++; // because renderEvents might temporarily change the height before setSize is reached unselect(); - + if (suggestedViewHeight === undefined) { calcSize(); } - + var forceEventRender = false; if (!currentView.start || inc || date < currentView.start || date >= currentView.end) { // view must render an entire new date range (and refetch/render events) @@ -397,9 +396,9 @@ function Calendar(element, options, eventSources) { currentView.sizeDirty = false; currentView.eventsDirty = false; updateEvents(forceEventRender); - + elementOuterWidth = element.outerWidth(); - + header.updateTitle(currentView.title); var today = new Date(); if (today >= currentView.start && today < currentView.end) { @@ -407,18 +406,18 @@ function Calendar(element, options, eventSources) { }else{ header.enableButton('today'); } - + ignoreWindowResize--; currentView.trigger('viewDisplay', _element); } } - - - + + + /* Resizing -----------------------------------------------------------------------------*/ - - + + function updateSize() { markSizesDirty(); if (elementVisible()) { @@ -430,15 +429,15 @@ function Calendar(element, options, eventSources) { currentView.sizeDirty = false; } } - - + + function markSizesDirty() { $.each(viewInstances, function(i, inst) { inst.sizeDirty = true; }); } - - + + function calcSize() { if (options.contentHeight) { suggestedViewHeight = options.contentHeight; @@ -450,8 +449,8 @@ function Calendar(element, options, eventSources) { suggestedViewHeight = Math.round(content.width() / Math.max(options.aspectRatio, .5)); } } - - + + function setSize(dateChanged) { // todo: dateChanged? ignoreWindowResize++; currentView.setHeight(suggestedViewHeight, dateChanged); @@ -462,8 +461,8 @@ function Calendar(element, options, eventSources) { currentView.setWidth(content.width(), dateChanged); ignoreWindowResize--; } - - + + function windowResize() { if (!ignoreWindowResize) { if (currentView.start) { // view has already been rendered @@ -484,13 +483,13 @@ function Calendar(element, options, eventSources) { } } } - - - + + + /* Event Fetching/Rendering -----------------------------------------------------------------------------*/ - - + + // fetches events if necessary, rerenders events if necessary (or if forced) function updateEvents(forceRender) { if (!options.lazyFetching || isFetchNeeded(currentView.visStart, currentView.visEnd)) { @@ -500,26 +499,26 @@ function Calendar(element, options, eventSources) { rerenderEvents(); } } - - + + function refetchEvents() { fetchEvents(currentView.visStart, currentView.visEnd); // will call reportEvents } - - + + // called when event data arrives function reportEvents(_events) { events = _events; rerenderEvents(); } - - + + // called when a single event's data has been changed function reportEventChange(eventID) { rerenderEvents(eventID); } - - + + // attempts to rerenderEvents function rerenderEvents(modifiedEventID) { markEventsDirty(); @@ -529,65 +528,65 @@ function Calendar(element, options, eventSources) { currentView.eventsDirty = false; } } - - + + function markEventsDirty() { $.each(viewInstances, function(i, inst) { inst.eventsDirty = true; }); } - + /* Selection -----------------------------------------------------------------------------*/ - + function select(start, end, allDay) { currentView.select(start, end, allDay===undefined ? true : allDay); } - + function unselect() { // safe to be called before renderView if (currentView) { currentView.unselect(); } } - - - + + + /* Date -----------------------------------------------------------------------------*/ - - + + function prev() { renderView(-1); } - - + + function next() { renderView(1); } - - + + function prevYear() { addYears(date, -1); renderView(); } - - + + function nextYear() { addYears(date, 1); renderView(); } - - + + function today() { date = new Date(); renderView(); } - - + + function gotoDate(year, month, dateOfMonth) { if (year instanceof Date) { date = cloneDate(year); // provided 1 argument, a Date @@ -596,8 +595,8 @@ function Calendar(element, options, eventSources) { } renderView(); } - - + + function incrementDate(years, months, days) { if (years !== undefined) { addYears(date, years); @@ -610,23 +609,23 @@ function Calendar(element, options, eventSources) { } renderView(); } - - + + function getDate() { return cloneDate(date); } - - - + + + /* Misc -----------------------------------------------------------------------------*/ - - + + function getView() { return currentView; } - - + + function option(name, value) { if (value === undefined) { return options[name]; @@ -636,8 +635,8 @@ function Calendar(element, options, eventSources) { updateSize(); } } - - + + function trigger(name, thisObj) { if (options[name]) { return options[name].apply( @@ -646,12 +645,12 @@ function Calendar(element, options, eventSources) { ); } } - - - + + + /* External Dragging ------------------------------------------------------------------------*/ - + if (options.droppable) { $(document) .bind('dragstart', function(ev, ui) { @@ -672,14 +671,14 @@ function Calendar(element, options, eventSources) { } }); } - + } function Header(calendar, options) { var t = this; - - + + // exports t.render = render; t.destroy = destroy; @@ -688,12 +687,12 @@ function Header(calendar, options) { t.deactivateButton = deactivateButton; t.disableButton = disableButton; t.enableButton = enableButton; - - + + // locals var element = $([]); var tm; - + function render() { @@ -710,13 +709,13 @@ function Header(calendar, options) { return element; } } - - + + function destroy() { element.remove(); } - - + + function renderSection(position) { var e = $("<td class='fc-header-" + position + "'/>"); var buttonStr = options.header[position]; @@ -807,32 +806,32 @@ function Header(calendar, options) { } return e; } - - + + function updateTitle(html) { element.find('h2') .html(html); } - - + + function activateButton(buttonName) { element.find('span.fc-button-' + buttonName) .addClass(tm + '-state-active'); } - - + + function deactivateButton(buttonName) { element.find('span.fc-button-' + buttonName) .removeClass(tm + '-state-active'); } - - + + function disableButton(buttonName) { element.find('span.fc-button-' + buttonName) .addClass(tm + '-state-disabled'); } - - + + function enableButton(buttonName) { element.find('span.fc-button-' + buttonName) .removeClass(tm + '-state-disabled'); @@ -854,8 +853,8 @@ var eventGUID = 1; function EventManager(options, _sources) { var t = this; - - + + // exports t.isFetchNeeded = isFetchNeeded; t.fetchEvents = fetchEvents; @@ -866,14 +865,14 @@ function EventManager(options, _sources) { t.removeEvents = removeEvents; t.clientEvents = clientEvents; t.normalizeEvent = normalizeEvent; - - + + // imports var trigger = t.trigger; var getView = t.getView; var reportEvents = t.reportEvents; - - + + // locals var stickySource = { events: [] }; var sources = [ stickySource ]; @@ -882,23 +881,23 @@ function EventManager(options, _sources) { var pendingSourceCnt = 0; var loadingLevel = 0; var cache = []; - - + + for (var i=0; i<_sources.length; i++) { _addEventSource(_sources[i]); } - - - + + + /* Fetching -----------------------------------------------------------------------------*/ - - + + function isFetchNeeded(start, end) { return !rangeStart || start < rangeStart || end > rangeEnd; } - - + + function fetchEvents(start, end) { rangeStart = start; rangeEnd = end; @@ -910,8 +909,8 @@ function EventManager(options, _sources) { fetchEventSource(sources[i], fetchID); } } - - + + function fetchEventSource(source, fetchID) { _fetchEventSource(source, function(events) { if (fetchID == currentFetchID) { @@ -929,8 +928,8 @@ function EventManager(options, _sources) { } }); } - - + + function _fetchEventSource(source, callback) { var i; var fetchers = fc.sourceFetchers; @@ -1002,12 +1001,12 @@ function EventManager(options, _sources) { } } } - - - + + + /* Sources -----------------------------------------------------------------------------*/ - + function addEventSource(source) { source = _addEventSource(source); @@ -1016,8 +1015,8 @@ function EventManager(options, _sources) { fetchEventSource(source, currentFetchID); // will eventually call reportEvents } } - - + + function _addEventSource(source) { if ($.isFunction(source) || $.isArray(source)) { source = { events: source }; @@ -1031,7 +1030,7 @@ function EventManager(options, _sources) { return source; } } - + function removeEventSource(source) { sources = $.grep(sources, function(src) { @@ -1043,13 +1042,13 @@ function EventManager(options, _sources) { }); reportEvents(cache); } - - - + + + /* Manipulation -----------------------------------------------------------------------------*/ - - + + function updateEvent(event) { // update an existing event var i, len = cache.length, e, defaultEventEnd = getView().defaultEventEnd, // getView??? @@ -1085,8 +1084,8 @@ function EventManager(options, _sources) { normalizeEvent(event); reportEvents(cache); } - - + + function renderEvent(event, stick) { normalizeEvent(event); if (!event.source) { @@ -1098,8 +1097,8 @@ function EventManager(options, _sources) { } reportEvents(cache); } - - + + function removeEvents(filter) { if (!filter) { // remove all cache = []; @@ -1126,8 +1125,8 @@ function EventManager(options, _sources) { } reportEvents(cache); } - - + + function clientEvents(filter) { if ($.isFunction(filter)) { return $.grep(cache, filter); @@ -1140,32 +1139,32 @@ function EventManager(options, _sources) { } return cache; // else, return all } - - - + + + /* Loading State -----------------------------------------------------------------------------*/ - - + + function pushLoading() { if (!loadingLevel++) { trigger('loading', null, true); } } - - + + function popLoading() { if (!--loadingLevel) { trigger('loading', null, false); } } - - - + + + /* Event Normalization -----------------------------------------------------------------------------*/ - - + + function normalizeEvent(event) { var source = event.source || {}; var ignoreTimezone = firstDefined(source.ignoreTimezone, options.ignoreTimezone); @@ -1194,13 +1193,13 @@ function EventManager(options, _sources) { } // TODO: if there is no start date, return false to indicate an invalid event } - - - + + + /* Utils ------------------------------------------------------------------------------*/ - - + + function normalizeSource(source) { if (source.className) { // TODO: repeat code, same code for event classNames @@ -1215,13 +1214,13 @@ function EventManager(options, _sources) { normalizers[i](source); } } - - + + function isSourcesEqual(source1, source2) { return source1 && source2 && getSourcePrimitive(source1) == getSourcePrimitive(source2); } - - + + function getSourcePrimitive(source) { return ((typeof source == 'object') ? (source.events || source.url) : '') || source; } @@ -1247,7 +1246,7 @@ var dayIDs = ['sun', 'mon', 'tue', 'wed', 'thu', 'fri', 'sat'], DAY_MS = 86400000, HOUR_MS = 3600000, MINUTE_MS = 60000; - + function addYears(d, n, keepTime) { d.setFullYear(d.getFullYear() + n); @@ -1310,7 +1309,7 @@ function addMinutes(d, n) { function clearTime(d) { d.setHours(0); d.setMinutes(0); - d.setSeconds(0); + d.setSeconds(0); d.setMilliseconds(0); return d; } @@ -1558,10 +1557,10 @@ var dateFormatters = { ss : function(d) { return zeroPad(d.getSeconds()) }, m : function(d) { return d.getMinutes() }, mm : function(d) { return zeroPad(d.getMinutes()) }, - h : function(d) { return d.getHours() % 12 || 12 }, - hh : function(d) { return zeroPad(d.getHours() % 12 || 12) }, - H : function(d) { return d.getHours() }, - HH : function(d) { return zeroPad(d.getHours()) }, + h : function(d) { return d.getUTCHours() % 12 || 12 }, + hh : function(d) { return zeroPad(d.getUTCHours() % 12 || 12) }, + H : function(d) { return d.getUTCHours() }, + HH : function(d) { return zeroPad(d.getUTCHours()) }, d : function(d) { return d.getDate() }, dd : function(d) { return zeroPad(d.getDate()) }, ddd : function(d,o) { return o.dayNamesShort[d.getDay()] }, @@ -1572,10 +1571,10 @@ var dateFormatters = { MMMM: function(d,o) { return o.monthNames[d.getMonth()] }, yy : function(d) { return (d.getFullYear()+'').substring(2) }, yyyy: function(d) { return d.getFullYear() }, - t : function(d) { return d.getHours() < 12 ? 'a' : 'p' }, - tt : function(d) { return d.getHours() < 12 ? 'am' : 'pm' }, - T : function(d) { return d.getHours() < 12 ? 'A' : 'P' }, - TT : function(d) { return d.getHours() < 12 ? 'AM' : 'PM' }, + t : function(d) { return d.getUTCHours() < 12 ? 'a' : 'p' }, + tt : function(d) { return d.getUTCHours() < 12 ? 'am' : 'pm' }, + T : function(d) { return d.getUTCHours() < 12 ? 'A' : 'P' }, + TT : function(d) { return d.getUTCHours() < 12 ? 'AM' : 'PM' }, u : function(d) { return formatDate(d, "yyyy-MM-dd'T'HH:mm:ss'Z'") }, S : function(d) { var date = d.getDate(); @@ -1660,7 +1659,7 @@ function sliceSegs(events, visEventEnds, start, end) { msLength: segEnd - segStart }); } - } + } return segs.sort(segCmp); } @@ -1963,20 +1962,20 @@ fcViews.month = MonthView; function MonthView(element, calendar) { var t = this; - - + + // exports t.render = render; - - + + // imports BasicView.call(t, element, calendar, 'month'); var opt = t.opt; var renderBasic = t.renderBasic; var formatDate = calendar.formatDate; - - - + + + function render(date, delta) { if (delta) { addMonths(date, delta); @@ -2007,28 +2006,28 @@ function MonthView(element, calendar) { t.visEnd = visEnd; renderBasic(6, rowCnt, nwe ? 5 : 7, true); } - - + + } fcViews.basicWeek = BasicWeekView; function BasicWeekView(element, calendar) { var t = this; - - + + // exports t.render = render; - - + + // imports BasicView.call(t, element, calendar, 'basicWeek'); var opt = t.opt; var renderBasic = t.renderBasic; var formatDates = calendar.formatDates; - - - + + + function render(date, delta) { if (delta) { addDays(date, delta * 7); @@ -2053,8 +2052,8 @@ function BasicWeekView(element, calendar) { t.visEnd = visEnd; renderBasic(1, 1, weekends ? 7 : 5, false); } - - + + } fcViews.basicDay = BasicDayView; @@ -2064,20 +2063,20 @@ fcViews.basicDay = BasicDayView; function BasicDayView(element, calendar) { var t = this; - - + + // exports t.render = render; - - + + // imports BasicView.call(t, element, calendar, 'basicDay'); var opt = t.opt; var renderBasic = t.renderBasic; var formatDate = calendar.formatDate; - - - + + + function render(date, delta) { if (delta) { addDays(date, delta); @@ -2090,8 +2089,8 @@ function BasicDayView(element, calendar) { t.end = t.visEnd = addDays(cloneDate(t.start), 1); renderBasic(1, 1, 1, false); } - - + + } setDefaults({ @@ -2101,8 +2100,8 @@ setDefaults({ function BasicView(element, calendar, viewName) { var t = this; - - + + // exports t.renderBasic = renderBasic; t.setHeight = setHeight; @@ -2128,8 +2127,8 @@ function BasicView(element, calendar, viewName) { t.getColCnt = function() { return colCnt }; t.getColWidth = function() { return colWidth }; t.getDaySegmentContainer = function() { return daySegmentContainer }; - - + + // imports View.call(t, element, calendar, viewName); OverlayManager.call(t); @@ -2142,10 +2141,10 @@ function BasicView(element, calendar, viewName) { var clearOverlays = t.clearOverlays; var daySelectionMousedown = t.daySelectionMousedown; var formatDate = calendar.formatDate; - - + + // locals - + var head; var headCells; var body; @@ -2154,31 +2153,31 @@ function BasicView(element, calendar, viewName) { var bodyFirstCells; var bodyCellTopInners; var daySegmentContainer; - + var viewWidth; var viewHeight; var colWidth; - + var rowCnt, colCnt; var coordinateGrid; var hoverListener; var colContentPositions; - + var rtl, dis, dit; var firstDay; var nwe; var tm; var colFormat; - - - + + + /* Rendering ------------------------------------------------------------*/ - - + + disableTextSelection(element.addClass('fc-grid')); - - + + function renderBasic(maxr, r, c, showNumbers) { rowCnt = r; colCnt = c; @@ -2191,9 +2190,9 @@ function BasicView(element, calendar, viewName) { } updateCells(firstTime); } - - - + + + function updateOptions() { rtl = opt('isRTL'); if (rtl) { @@ -2208,16 +2207,16 @@ function BasicView(element, calendar, viewName) { tm = opt('theme') ? 'ui' : 'fc'; colFormat = opt('columnFormat'); } - - - - function buildSkeleton(maxRowCnt, showNumbers) { + + + + function buildSkeleton(maxRowCnt, showNumbers) { var s; var headerClass = tm + "-widget-header"; var contentClass = tm + "-widget-content"; var i, j; var table; - + s = "<table class='fc-border-separate' style='width:100%' cellspacing='0'>" + "<thead>" + @@ -2254,7 +2253,7 @@ function BasicView(element, calendar, viewName) { "</tbody>" + "</table>"; table = $(s).appendTo(element); - + head = table.find('thead'); headCells = head.find('th'); body = table.find('tbody'); @@ -2262,20 +2261,20 @@ function BasicView(element, calendar, viewName) { bodyCells = body.find('td'); bodyFirstCells = bodyCells.filter(':first-child'); bodyCellTopInners = bodyRows.eq(0).find('div.fc-day-content div'); - + markFirstLast(head.add(head.find('tr'))); // marks first+last tr/th's markFirstLast(bodyRows); // marks first+last td's bodyRows.eq(0).addClass('fc-first'); // fc-last is done in updateCells - + dayBind(bodyCells); - + daySegmentContainer = $("<div style='position:absolute;z-index:8;top:0;left:0'/>") .appendTo(element); } - - - + + + function updateCells(firstTime) { var dowDirty = firstTime || rowCnt == 1; // could the cells' day-of-weeks need updating? var month = t.start.getMonth(); @@ -2283,7 +2282,7 @@ function BasicView(element, calendar, viewName) { var cell; var date; var row; - + if (dowDirty) { headCells.each(function(i, _cell) { cell = $(_cell); @@ -2292,7 +2291,7 @@ function BasicView(element, calendar, viewName) { setDayID(cell, date); }); } - + bodyCells.each(function(i, _cell) { cell = $(_cell); date = indexDate(i); @@ -2311,7 +2310,7 @@ function BasicView(element, calendar, viewName) { setDayID(cell, date); } }); - + bodyRows.each(function(i, _row) { row = $(_row); if (i < rowCnt) { @@ -2326,24 +2325,24 @@ function BasicView(element, calendar, viewName) { } }); } - - - + + + function setHeight(height) { viewHeight = height; - + var bodyHeight = viewHeight - head.height(); var rowHeight; var rowHeightLast; var cell; - + if (opt('weekMode') == 'variable') { rowHeight = rowHeightLast = Math.floor(bodyHeight / (rowCnt==1 ? 2 : 6)); }else{ rowHeight = Math.floor(bodyHeight / rowCnt); rowHeightLast = bodyHeight - rowHeight * (rowCnt-1); } - + bodyFirstCells.each(function(i, _cell) { if (i < rowCnt) { cell = $(_cell); @@ -2353,29 +2352,29 @@ function BasicView(element, calendar, viewName) { ); } }); - + } - - + + function setWidth(width) { viewWidth = width; colContentPositions.clear(); colWidth = Math.floor(viewWidth / colCnt); setOuterWidth(headCells.slice(0, -1), colWidth); } - - - + + + /* Day clicking and binding -----------------------------------------------------------*/ - - + + function dayBind(days) { days.click(dayClick) .mousedown(daySelectionMousedown); } - - + + function dayClick(ev) { if (!opt('selectable')) { // if selectable, SelectionManager will worry about dayClick var index = parseInt(this.className.match(/fc\-day(\d+)/)[1]); // TODO: maybe use .data @@ -2383,13 +2382,13 @@ function BasicView(element, calendar, viewName) { trigger('dayClick', this, date, true, ev); } } - - - + + + /* Semi-transparent Overlay Helpers ------------------------------------------------------*/ - - + + function renderDayOverlay(overlayStart, overlayEnd, refreshCoordinateGrid) { // overlayEnd is exclusive if (refreshCoordinateGrid) { coordinateGrid.build(); @@ -2416,46 +2415,46 @@ function BasicView(element, calendar, viewName) { addDays(rowEnd, 7); } } - - + + function renderCellOverlay(row0, col0, row1, col1) { // row1,col1 is inclusive var rect = coordinateGrid.rect(row0, col0, row1, col1, element); return renderOverlay(rect, element); } - - - + + + /* Selection -----------------------------------------------------------------------*/ - - + + function defaultSelectionEnd(startDate, allDay) { return cloneDate(startDate); } - - + + function renderSelection(startDate, endDate, allDay) { renderDayOverlay(startDate, addDays(cloneDate(endDate), 1), true); // rebuild every time??? } - - + + function clearSelection() { clearOverlays(); } - - + + function reportDayClick(date, allDay, ev) { var cell = dateCell(date); var _element = bodyCells[cell.row*colCnt + cell.col]; trigger('dayClick', _element, date, allDay, ev); } - - - + + + /* External Dragging -----------------------------------------------------------------------*/ - - + + function dragStart(_dragElement, ev, ui) { hoverListener.start(function(cell) { clearOverlays(); @@ -2464,8 +2463,8 @@ function BasicView(element, calendar, viewName) { } }, ev); } - - + + function dragStop(_dragElement, ev, ui) { var cell = hoverListener.stop(); clearOverlays(); @@ -2474,18 +2473,18 @@ function BasicView(element, calendar, viewName) { trigger('drop', _dragElement, d, true, ev, ui); } } - - - + + + /* Utilities --------------------------------------------------------*/ - - + + function defaultEventEnd(event) { return cloneDate(event.start); } - - + + coordinateGrid = new CoordinateGrid(function(rows, cols) { var e, n, p; headCells.each(function(i, _e) { @@ -2511,85 +2510,85 @@ function BasicView(element, calendar, viewName) { }); p[1] = n + e.outerHeight(); }); - - + + hoverListener = new HoverListener(coordinateGrid); - - + + colContentPositions = new HorizontalPositionCache(function(col) { return bodyCellTopInners.eq(col); }); - - + + function colContentLeft(col) { return colContentPositions.left(col); } - - + + function colContentRight(col) { return colContentPositions.right(col); } - - - - + + + + function dateCell(date) { return { row: Math.floor(dayDiff(date, t.visStart) / 7), col: dayOfWeekCol(date.getDay()) }; } - - + + function cellDate(cell) { return _cellDate(cell.row, cell.col); } - - + + function _cellDate(row, col) { return addDays(cloneDate(t.visStart), row*7 + col*dis+dit); // what about weekends in middle of week? } - - + + function indexDate(index) { return _cellDate(Math.floor(index/colCnt), index%colCnt); } - - + + function dayOfWeekCol(dayOfWeek) { return ((dayOfWeek - Math.max(firstDay, nwe) + colCnt) % colCnt) * dis + dit; } - - - - + + + + function allDayRow(i) { return bodyRows.eq(i); } - - + + function allDayBounds(i) { return { left: 0, right: viewWidth }; } - - + + } function BasicEventRenderer() { var t = this; - - + + // exports t.renderEvents = renderEvents; t.compileDaySegs = compileSegs; // for DayEventRenderer t.clearEvents = clearEvents; t.bindDaySeg = bindDaySeg; - - + + // imports DayEventRenderer.call(t); var opt = t.opt; @@ -2611,25 +2610,25 @@ function BasicEventRenderer() { var getColCnt = t.getColCnt; var renderDaySegs = t.renderDaySegs; var resizableDayEvent = t.resizableDayEvent; - - - + + + /* Rendering --------------------------------------------------------------------*/ - - + + function renderEvents(events, modifiedEventId) { reportEvents(events); renderDaySegs(compileSegs(events), modifiedEventId); } - - + + function clearEvents() { reportEventClear(); getDaySegmentContainer().empty(); } - - + + function compileSegs(events) { var rowCnt = getRowCnt(), colCnt = getColCnt(), @@ -2656,8 +2655,8 @@ function BasicEventRenderer() { } return segs; } - - + + function bindDaySeg(event, eventElement, seg) { if (isEventDraggable(event)) { draggableDayEvent(event, eventElement); @@ -2668,13 +2667,13 @@ function BasicEventRenderer() { eventElementHandlers(event, eventElement); // needs to be after, because resizableDayEvent might stopImmediatePropagation on click } - - - + + + /* Dragging ----------------------------------------------------------------------------*/ - - + + function draggableDayEvent(event, eventElement) { var hoverListener = getHoverListener(); var dayDelta; @@ -2724,20 +2723,20 @@ fcViews.agendaWeek = AgendaWeekView; function AgendaWeekView(element, calendar) { var t = this; - - + + // exports t.render = render; - - + + // imports AgendaView.call(t, element, calendar, 'agendaWeek'); var opt = t.opt; var renderAgenda = t.renderAgenda; var formatDates = calendar.formatDates; - - - + + + function render(date, delta) { if (delta) { addDays(date, delta * 7); @@ -2762,7 +2761,7 @@ function AgendaWeekView(element, calendar) { t.visEnd = visEnd; renderAgenda(weekends ? 7 : 5); } - + } @@ -2770,20 +2769,20 @@ fcViews.agendaDay = AgendaDayView; function AgendaDayView(element, calendar) { var t = this; - - + + // exports t.render = render; - - + + // imports AgendaView.call(t, element, calendar, 'agendaDay'); var opt = t.opt; var renderAgenda = t.renderAgenda; var formatDate = calendar.formatDate; - - - + + + function render(date, delta) { if (delta) { addDays(date, delta); @@ -2798,7 +2797,7 @@ function AgendaDayView(element, calendar) { t.end = t.visEnd = end; renderAgenda(1); } - + } @@ -2826,8 +2825,8 @@ setDefaults({ function AgendaView(element, calendar, viewName) { var t = this; - - + + // exports t.renderAgenda = renderAgenda; t.setWidth = setWidth; @@ -2861,8 +2860,8 @@ function AgendaView(element, calendar, viewName) { t.reportDayClick = reportDayClick; // selection mousedown hack t.dragStart = dragStart; t.dragStop = dragStop; - - + + // imports View.call(t, element, calendar, viewName); OverlayManager.call(t); @@ -2878,10 +2877,10 @@ function AgendaView(element, calendar, viewName) { var daySelectionMousedown = t.daySelectionMousedown; var slotSegHtml = t.slotSegHtml; var formatDate = calendar.formatDate; - - + + // locals - + var dayTable; var dayHead; var dayHeadCells; @@ -2902,7 +2901,7 @@ function AgendaView(element, calendar, viewName) { var axisFirstCells; var gutterCells; var selectionHelper; - + var viewWidth; var viewHeight; var axisWidth; @@ -2910,30 +2909,30 @@ function AgendaView(element, calendar, viewName) { var gutterWidth; var slotHeight; // TODO: what if slotHeight changes? (see issue 650) var savedScrollTop; - + var colCnt; var slotCnt; var coordinateGrid; var hoverListener; var colContentPositions; var slotTopCache = {}; - + var tm; var firstDay; var nwe; // no weekends (int) var rtl, dis, dit; // day index sign / translate var minMinute, maxMinute; var colFormat; - - + + /* Rendering -----------------------------------------------------------------------------*/ - - + + disableTextSelection(element.addClass('fc-agenda')); - - + + function renderAgenda(c) { colCnt = c; updateOptions(); @@ -2944,9 +2943,9 @@ function AgendaView(element, calendar, viewName) { } updateCells(); } - - - + + + function updateOptions() { tm = opt('theme') ? 'ui' : 'fc'; nwe = opt('weekends') ? 0 : 1; @@ -2962,9 +2961,9 @@ function AgendaView(element, calendar, viewName) { maxMinute = parseTime(opt('maxTime')); colFormat = opt('columnFormat'); } - - - + + + function buildSkeleton() { var headerClass = tm + "-widget-header"; var contentClass = tm + "-widget-content"; @@ -2974,7 +2973,7 @@ function AgendaView(element, calendar, viewName) { var maxd; var minutes; var slotNormal = opt('slotMinutes') % 15 == 0; - + s = "<table style='width:100%' class='fc-agenda-days fc-border-separate' cellspacing='0'>" + "<thead>" + @@ -3014,23 +3013,23 @@ function AgendaView(element, calendar, viewName) { dayBodyCellInners = dayBodyCells.find('div.fc-day-content div'); dayBodyFirstCell = dayBodyCells.eq(0); dayBodyFirstCellStretcher = dayBodyFirstCell.find('> div'); - + markFirstLast(dayHead.add(dayHead.find('tr'))); markFirstLast(dayBody.add(dayBody.find('tr'))); - + axisFirstCells = dayHead.find('th:first'); gutterCells = dayTable.find('.fc-agenda-gutter'); - + slotLayer = $("<div style='position:absolute;z-index:2;left:0;width:100%'/>") .appendTo(element); - + if (opt('allDaySlot')) { - + daySegmentContainer = $("<div style='position:absolute;z-index:8;top:0;left:0'/>") .appendTo(slotLayer); - + s = "<table style='width:100%' class='fc-agenda-allday' cellspacing='0'>" + "<tr>" + @@ -3043,36 +3042,36 @@ function AgendaView(element, calendar, viewName) { "</table>"; allDayTable = $(s).appendTo(slotLayer); allDayRow = allDayTable.find('tr'); - + dayBind(allDayRow.find('td')); - + axisFirstCells = axisFirstCells.add(allDayTable.find('th:first')); gutterCells = gutterCells.add(allDayTable.find('th.fc-agenda-gutter')); - + slotLayer.append( "<div class='fc-agenda-divider " + headerClass + "'>" + "<div class='fc-agenda-divider-inner'/>" + "</div>" ); - + }else{ - + daySegmentContainer = $([]); // in jQuery 1.4, we can just do $() - + } - + slotScroller = $("<div style='position:absolute;width:100%;overflow-x:hidden;overflow-y:auto'/>") .appendTo(slotLayer); - + slotContent = $("<div style='position:relative;width:100%;overflow:hidden'/>") .appendTo(slotScroller); - + slotSegmentContainer = $("<div style='position:absolute;z-index:8;top:0;left:0'/>") .appendTo(slotContent); - + s = "<table class='fc-agenda-slots' style='width:100%' cellspacing='0'>" + "<tbody>"; @@ -3099,14 +3098,14 @@ function AgendaView(element, calendar, viewName) { "</table>"; slotTable = $(s).appendTo(slotContent); slotTableFirstInner = slotTable.find('div:first'); - + slotBind(slotTable.find('td')); - + axisFirstCells = axisFirstCells.add(slotTable.find('th:first')); } - - - + + + function updateCells() { var i; var headCell; @@ -3126,43 +3125,43 @@ function AgendaView(element, calendar, viewName) { setDayID(headCell.add(bodyCell), date); } } - - - + + + function setHeight(height, dateChanged) { if (height === undefined) { height = viewHeight; } viewHeight = height; slotTopCache = {}; - + var headHeight = dayBody.position().top; var allDayHeight = slotScroller.position().top; // including divider var bodyHeight = Math.min( // total body height, including borders height - headHeight, // when scrollbars slotTable.height() + allDayHeight + 1 // when no scrollbars. +1 for bottom border ); - + dayBodyFirstCellStretcher .height(bodyHeight - vsides(dayBodyFirstCell)); - + slotLayer.css('top', headHeight); - + slotScroller.height(bodyHeight - allDayHeight - 1); - + slotHeight = slotTableFirstInner.height() + 1; // +1 for border - + if (dateChanged) { resetScroll(); } } - - - + + + function setWidth(width) { viewWidth = width; colContentPositions.clear(); - + axisWidth = 0; setOuterWidth( axisFirstCells @@ -3172,10 +3171,10 @@ function AgendaView(element, calendar, viewName) { }), axisWidth ); - + var slotTableWidth = slotScroller[0].clientWidth; // needs to be done after axisWidth (for IE7) //slotTable.width(slotTableWidth); - + gutterWidth = slotScroller.width() - slotTableWidth; if (gutterWidth) { setOuterWidth(gutterCells, gutterWidth); @@ -3189,11 +3188,11 @@ function AgendaView(element, calendar, viewName) { .prev() .addClass('fc-last'); } - + colWidth = Math.floor((slotTableWidth - axisWidth) / colCnt); setOuterWidth(dayHeadCells.slice(0, -1), colWidth); } - + function resetScroll() { @@ -3207,22 +3206,22 @@ function AgendaView(element, calendar, viewName) { scroll(); setTimeout(scroll, 0); // overrides any previous scroll state made by the browser } - - + + function beforeHide() { savedScrollTop = slotScroller.scrollTop(); } - - + + function afterShow() { slotScroller.scrollTop(savedScrollTop); } - - - + + + /* Slot/Day clicking and binding -----------------------------------------------------------------------*/ - + function dayBind(cells) { cells.click(slotClick) @@ -3234,8 +3233,8 @@ function AgendaView(element, calendar, viewName) { cells.click(slotClick) .mousedown(slotSelectionMousedown); } - - + + function slotClick(ev) { if (!opt('selectable')) { // if selectable, SelectionManager will worry about dayClick var col = Math.min(colCnt-1, Math.floor((ev.pageX - dayTable.offset().left - axisWidth) / colWidth)); @@ -3252,12 +3251,12 @@ function AgendaView(element, calendar, viewName) { } } } - - - + + + /* Semi-transparent Overlay Helpers -----------------------------------------------------*/ - + function renderDayOverlay(startDate, endDate, refreshCoordinateGrid) { // endDate is exclusive if (refreshCoordinateGrid) { @@ -3280,13 +3279,13 @@ function AgendaView(element, calendar, viewName) { ); } } - - + + function renderCellOverlay(row0, col0, row1, col1) { // only for all-day? var rect = coordinateGrid.rect(row0, col0, row1, col1, slotLayer); return renderOverlay(rect, slotLayer); } - + function renderSlotOverlay(overlayStart, overlayEnd) { var dayStart = cloneDate(t.visStart); @@ -3309,13 +3308,13 @@ function AgendaView(element, calendar, viewName) { addDays(dayEnd, 1); } } - - - + + + /* Coordinate Utilities -----------------------------------------------------------------------------*/ - - + + coordinateGrid = new CoordinateGrid(function(rows, cols) { var e, n, p; dayHeadCells.each(function(i, _e) { @@ -3346,36 +3345,36 @@ function AgendaView(element, calendar, viewName) { ]); } }); - - + + hoverListener = new HoverListener(coordinateGrid); - - + + colContentPositions = new HorizontalPositionCache(function(col) { return dayBodyCellInners.eq(col); }); - - + + function colContentLeft(col) { return colContentPositions.left(col); } - - + + function colContentRight(col) { return colContentPositions.right(col); } - - - - + + + + function dateCell(date) { // "cell" terminology is now confusing return { row: Math.floor(dayDiff(date, t.visStart) / 7), col: dayOfWeekCol(date.getDay()) }; } - - + + function cellDate(cell) { var d = colDate(cell.col); var slotIndex = cell.row; @@ -3387,25 +3386,25 @@ function AgendaView(element, calendar, viewName) { } return d; } - - + + function colDate(col) { // returns dates with 00:00:00 return addDays(cloneDate(t.visStart), col*dis+dit); } - - + + function cellIsAllDay(cell) { return opt('allDaySlot') && !cell.row; } - - + + function dayOfWeekCol(dayOfWeek) { return ((dayOfWeek - Math.max(firstDay, nwe) + colCnt) % colCnt)*dis+dit; } - - - - + + + + // get the Y coordinate of the given time on the given day (both Date objects) function timePosition(day, time) { // both date objects. day holds 00:00 of current day day = cloneDate(day, true); @@ -3426,21 +3425,21 @@ function AgendaView(element, calendar, viewName) { slotTop - 1 + slotHeight * ((minutes % slotMinutes) / slotMinutes) )); } - - + + function allDayBounds() { return { left: axisWidth, right: viewWidth - gutterWidth } } - - + + function getAllDayRow(index) { return allDayRow; } - - + + function defaultEventEnd(event) { var start = cloneDate(event.start); if (event.allDay) { @@ -3448,21 +3447,21 @@ function AgendaView(element, calendar, viewName) { } return addMinutes(start, opt('defaultEventMinutes')); } - - - + + + /* Selection ---------------------------------------------------------------------------------*/ - - + + function defaultSelectionEnd(startDate, allDay) { if (allDay) { return cloneDate(startDate); } return addMinutes(cloneDate(startDate), opt('slotMinutes')); } - - + + function renderSelection(startDate, endDate, allDay) { // only for all-day if (allDay) { if (opt('allDaySlot')) { @@ -3472,8 +3471,8 @@ function AgendaView(element, calendar, viewName) { renderSlotSelection(startDate, endDate); } } - - + + function renderSlotSelection(startDate, endDate) { var helperOption = opt('selectHelper'); coordinateGrid.build(); @@ -3524,8 +3523,8 @@ function AgendaView(element, calendar, viewName) { renderSlotOverlay(startDate, endDate); } } - - + + function clearSelection() { clearOverlays(); if (selectionHelper) { @@ -3533,8 +3532,8 @@ function AgendaView(element, calendar, viewName) { selectionHelper = null; } } - - + + function slotSelectionMousedown(ev) { if (ev.which == 1 && opt('selectable')) { // ev.which==1 means left mouse button unselect(ev); @@ -3566,18 +3565,18 @@ function AgendaView(element, calendar, viewName) { }); } } - - + + function reportDayClick(date, allDay, ev) { trigger('dayClick', dayBodyCells[dayOfWeekCol(date.getDay())], date, allDay, ev); } - - - + + + /* External Dragging --------------------------------------------------------------------------------*/ - - + + function dragStart(_dragElement, ev, ui) { hoverListener.start(function(cell) { clearOverlays(); @@ -3592,8 +3591,8 @@ function AgendaView(element, calendar, viewName) { } }, ev); } - - + + function dragStop(_dragElement, ev, ui) { var cell = hoverListener.stop(); clearOverlays(); @@ -3607,16 +3606,16 @@ function AgendaView(element, calendar, viewName) { function AgendaEventRenderer() { var t = this; - - + + // exports t.renderEvents = renderEvents; t.compileDaySegs = compileDaySegs; // for DayEventRenderer t.clearEvents = clearEvents; t.slotSegHtml = slotSegHtml; t.bindDaySeg = bindDaySeg; - - + + // imports DayEventRenderer.call(t); var opt = t.opt; @@ -3653,12 +3652,12 @@ function AgendaEventRenderer() { var calendar = t.calendar; var formatDate = calendar.formatDate; var formatDates = calendar.formatDates; - - - + + + /* Rendering ----------------------------------------------------------------------------*/ - + function renderEvents(events, modifiedEventId) { reportEvents(events); @@ -3678,15 +3677,15 @@ function AgendaEventRenderer() { } renderSlotSegs(compileSlotSegs(slotEvents), modifiedEventId); } - - + + function clearEvents() { reportEventClear(); getDaySegmentContainer().empty(); getSlotSegmentContainer().empty(); } - - + + function compileDaySegs(events) { var levels = stackSegs(sliceSegs(events, $.map(events, exclEndDay), t.visStart, t.visEnd)), i, levelCnt=levels.length, level, @@ -3703,8 +3702,8 @@ function AgendaEventRenderer() { } return segs; } - - + + function compileSlotSegs(events) { var colCnt = getColCnt(), minMinute = getMinMinute(), @@ -3731,8 +3730,8 @@ function AgendaEventRenderer() { } return segs; } - - + + function slotEventEnd(event) { if (event.end) { return cloneDate(event.end); @@ -3740,12 +3739,12 @@ function AgendaEventRenderer() { return addMinutes(cloneDate(event.start), opt('defaultEventMinutes')); } } - - + + // renders events in the 'time slots' at the bottom - + function renderSlotSegs(segs, modifiedEventId) { - + var i, segCnt=segs.length, seg, event, classes, @@ -3767,7 +3766,7 @@ function AgendaEventRenderer() { slotSegmentContainer = getSlotSegmentContainer(), rtl, dis, dit, colCnt = getColCnt(); - + if (rtl = opt('isRTL')) { dis = -1; dit = colCnt - 1; @@ -3775,7 +3774,7 @@ function AgendaEventRenderer() { dis = 1; dit = 0; } - + // calculate position/dimensions, create html for (i=0; i<segCnt; i++) { seg = segs[i]; @@ -3811,7 +3810,7 @@ function AgendaEventRenderer() { } slotSegmentContainer[0].innerHTML = html; // faster than html() eventElements = slotSegmentContainer.children(); - + // retrieve elements, run through eventRender callback, bind event handlers for (i=0; i<segCnt; i++) { seg = segs[i]; @@ -3840,9 +3839,9 @@ function AgendaEventRenderer() { reportEventElement(event, eventElement); } } - + lazySegBind(slotSegmentContainer, segs, bindSlotSeg); - + // record event sides and title positions for (i=0; i<segCnt; i++) { seg = segs[i]; @@ -3857,7 +3856,7 @@ function AgendaEventRenderer() { } } } - + // set all positions/dimensions at once for (i=0; i<segCnt; i++) { seg = segs[i]; @@ -3876,10 +3875,10 @@ function AgendaEventRenderer() { trigger('eventAfterRender', event, event, eventElement); } } - + } - - + + function slotSegHtml(event, seg) { var html = "<"; var url = event.url; @@ -3929,8 +3928,8 @@ function AgendaEventRenderer() { "</" + (url ? "a" : "div") + ">"; return html; } - - + + function bindDaySeg(event, eventElement, seg) { if (isEventDraggable(event)) { draggableDayEvent(event, eventElement, seg.isStart); @@ -3941,8 +3940,8 @@ function AgendaEventRenderer() { eventElementHandlers(event, eventElement); // needs to be after, because resizableDayEvent might stopImmediatePropagation on click } - - + + function bindSlotSeg(event, eventElement, seg) { var timeElement = eventElement.find('div.fc-event-time'); if (isEventDraggable(event)) { @@ -3953,15 +3952,15 @@ function AgendaEventRenderer() { } eventElementHandlers(event, eventElement); } - - - + + + /* Dragging -----------------------------------------------------------------------------------*/ - - + + // when event starts out FULL-DAY - + function draggableDayEvent(event, eventElement, isStart) { var origWidth; var revert; @@ -4055,10 +4054,10 @@ function AgendaEventRenderer() { } } } - - + + // when event starts out IN TIMESLOTS - + function draggableSlotEvent(event, eventElement, timeElement) { var origPosition; var allDay=false; @@ -4149,13 +4148,13 @@ function AgendaEventRenderer() { } } } - - - + + + /* Resizing --------------------------------------------------------------------------------------*/ - - + + function resizableSlotEvent(event, eventElement, timeElement) { var slotDelta, prevSlotDelta; var slotHeight = getSlotHeight(); @@ -4197,7 +4196,7 @@ function AgendaEventRenderer() { } }); } - + } @@ -4223,8 +4222,8 @@ function countForwardSegs(levels) { function View(element, calendar, viewName) { var t = this; - - + + // exports t.element = element; t.calendar = calendar; @@ -4246,22 +4245,22 @@ function View(element, calendar, viewName) { // t.title // t.start, t.end // t.visStart, t.visEnd - - + + // imports var defaultEventEnd = t.defaultEventEnd; var normalizeEvent = calendar.normalizeEvent; // in EventManager var reportEventChange = calendar.reportEventChange; - - + + // locals var eventsByID = {}; var eventElements = []; var eventElementsByID = {}; var options = calendar.options; - - - + + + function opt(name, viewNameOverride) { var v = options[name]; if (typeof v == 'object') { @@ -4270,42 +4269,42 @@ function View(element, calendar, viewName) { return v; } - + function trigger(name, thisObj) { return calendar.trigger.apply( calendar, [name, thisObj || t].concat(Array.prototype.slice.call(arguments, 2), [t]) ); } - - + + /* function setOverflowHidden(bool) { element.css('overflow', bool ? 'hidden' : ''); } */ - - + + function isEventDraggable(event) { return isEventEditable(event) && !opt('disableDragging'); } - - + + function isEventResizable(event) { // but also need to make sure the seg.isEnd == true return isEventEditable(event) && !opt('disableResizing'); } - - + + function isEventEditable(event) { return firstDefined(event.editable, (event.source || {}).editable, opt('editable')); } - - - + + + /* Event Data ------------------------------------------------------------------------------*/ - - + + // report when view receives new events function reportEvents(events) { // events are already normalized at this point eventsByID = {}; @@ -4319,19 +4318,19 @@ function View(element, calendar, viewName) { } } } - - + + // returns a Date object for an event's end function eventEnd(event) { return event.end ? cloneDate(event.end) : defaultEventEnd(event); } - - - + + + /* Event Elements ------------------------------------------------------------------------------*/ - - + + // report when view creates an element for an event function reportEventElement(event, element) { eventElements.push(element); @@ -4341,14 +4340,14 @@ function View(element, calendar, viewName) { eventElementsByID[event._id] = [element]; } } - - + + function reportEventClear() { eventElements = []; eventElementsByID = {}; } - - + + // attaches eventClick, eventMouseover, eventMouseout function eventElementHandlers(event, eventElement) { eventElement @@ -4369,18 +4368,18 @@ function View(element, calendar, viewName) { // TODO: don't fire eventMouseover/eventMouseout *while* dragging is occuring (on subject element) // TODO: same for resizing } - - + + function showEvents(event, exceptElement) { eachEventElement(event, exceptElement, 'show'); } - - + + function hideEvents(event, exceptElement) { eachEventElement(event, exceptElement, 'hide'); } - - + + function eachEventElement(event, exceptElement, funcName) { var elements = eventElementsByID[event._id], i, len = elements.length; @@ -4390,13 +4389,13 @@ function View(element, calendar, viewName) { } } } - - - + + + /* Event Modification Reporting ---------------------------------------------------------------------------------*/ - - + + function eventDrop(e, event, dayDelta, minuteDelta, allDay, ev, ui) { var oldAllDay = event.allDay; var eventId = event._id; @@ -4418,8 +4417,8 @@ function View(element, calendar, viewName) { ); reportEventChange(eventId); } - - + + function eventResize(e, event, dayDelta, minuteDelta, ev, ui) { var eventId = event._id; elongateEvents(eventsByID[eventId], dayDelta, minuteDelta); @@ -4439,13 +4438,13 @@ function View(element, calendar, viewName) { ); reportEventChange(eventId); } - - - + + + /* Event Modification Math ---------------------------------------------------------------------------------*/ - - + + function moveEvents(events, dayDelta, minuteDelta, allDay) { minuteDelta = minuteDelta || 0; for (var e, len=events.length, i=0; i<len; i++) { @@ -4460,8 +4459,8 @@ function View(element, calendar, viewName) { normalizeEvent(e, options); } } - - + + function elongateEvents(events, dayDelta, minuteDelta) { minuteDelta = minuteDelta || 0; for (var e, len=events.length, i=0; i<len; i++) { @@ -4470,19 +4469,19 @@ function View(element, calendar, viewName) { normalizeEvent(e, options); } } - + } function DayEventRenderer() { var t = this; - + // exports t.renderDaySegs = renderDaySegs; t.resizableDayEvent = resizableDayEvent; - - + + // imports var opt = t.opt; var trigger = t.trigger; @@ -4509,13 +4508,13 @@ function DayEventRenderer() { var renderDayOverlay = t.renderDayOverlay; var clearOverlays = t.clearOverlays; var clearSelection = t.clearSelection; - - - + + + /* Rendering -----------------------------------------------------------------------------*/ - - + + function renderDaySegs(segs, modifiedEventId) { var segmentContainer = getDaySegmentContainer(); var rowDivs; @@ -4559,8 +4558,8 @@ function DayEventRenderer() { } daySegSetTops(segs, getRowTops(rowDivs)); } - - + + function renderTempDaySegs(segs, adjustRow, adjustTop) { var tempContainer = $("<div/>"); var elements; @@ -4588,8 +4587,8 @@ function DayEventRenderer() { } return $(elements); } - - + + function daySegHTML(segs) { // also sets seg.left and seg.outerWidth var rtl = opt('isRTL'); var i; @@ -4681,8 +4680,8 @@ function DayEventRenderer() { } return html; } - - + + function daySegElementResolve(segs, elements) { // sets seg.element var i; var segCnt = segs.length; @@ -4711,8 +4710,8 @@ function DayEventRenderer() { } } } - - + + function daySegElementReport(segs) { var i; var segCnt = segs.length; @@ -4726,8 +4725,8 @@ function DayEventRenderer() { } } } - - + + function daySegHandlers(segs, segmentContainer, modifiedEventId) { var i; var segCnt = segs.length; @@ -4749,8 +4748,8 @@ function DayEventRenderer() { } lazySegBind(segmentContainer, segs, bindDaySeg); } - - + + function daySegCalcHSides(segs) { // also sets seg.key var i; var segCnt = segs.length; @@ -4772,8 +4771,8 @@ function DayEventRenderer() { } } } - - + + function daySegSetWidths(segs) { var i; var segCnt = segs.length; @@ -4787,8 +4786,8 @@ function DayEventRenderer() { } } } - - + + function daySegCalcHeights(segs) { var i; var segCnt = segs.length; @@ -4810,8 +4809,8 @@ function DayEventRenderer() { } } } - - + + function getRowDivs() { var i; var rowCnt = getRowCnt(); @@ -4822,8 +4821,8 @@ function DayEventRenderer() { } return rowDivs; } - - + + function getRowTops(rowDivs) { var i; var rowCnt = rowDivs.length; @@ -4833,8 +4832,8 @@ function DayEventRenderer() { } return tops; } - - + + function daySegSetTops(segs, rowTops) { // also triggers eventAfterRender var i; var segCnt = segs.length; @@ -4851,19 +4850,19 @@ function DayEventRenderer() { } } } - - - + + + /* Resizing -----------------------------------------------------------------------------------*/ - - + + function resizableDayEvent(event, element, seg) { var rtl = opt('isRTL'); var direction = rtl ? 'w' : 'e'; var handle = element.find('div.ui-resizable-' + direction); var isResizing = false; - + // TODO: look into using jquery-ui mouse widget for this stuff disableTextSelection(element); // prevent native <a> selection for IE element @@ -4877,7 +4876,7 @@ function DayEventRenderer() { // (eventElementHandlers needs to be bound after resizableDayEvent) } }); - + handle.mousedown(function(ev) { if (ev.which != 1) { return; // needs to be left mouse button @@ -4934,7 +4933,7 @@ function DayEventRenderer() { renderDayOverlay(event.start, addDays(cloneDate(newEnd), 1)); // coordinate grid already rebuild at hoverListener.start } }, ev); - + function mouseup(ev) { trigger('eventResizeStop', this, event, ev); $('body').css('cursor', ''); @@ -4945,15 +4944,15 @@ function DayEventRenderer() { // event redraw will clear helpers } // otherwise, the drag handler already restored the old events - + setTimeout(function() { // make this happen after the element's click event isResizing = false; },0); } - + }); } - + } @@ -4961,23 +4960,23 @@ function DayEventRenderer() { function SelectionManager() { var t = this; - - + + // exports t.select = select; t.unselect = unselect; t.reportSelection = reportSelection; t.daySelectionMousedown = daySelectionMousedown; - - + + // imports var opt = t.opt; var trigger = t.trigger; var defaultSelectionEnd = t.defaultSelectionEnd; var renderSelection = t.renderSelection; var clearSelection = t.clearSelection; - - + + // locals var selected = false; @@ -4995,7 +4994,7 @@ function SelectionManager() { unselect(ev); }); } - + function select(startDate, endDate, allDay) { unselect(); @@ -5005,8 +5004,8 @@ function SelectionManager() { renderSelection(startDate, endDate, allDay); reportSelection(startDate, endDate, allDay); } - - + + function unselect(ev) { if (selected) { selected = false; @@ -5014,14 +5013,14 @@ function SelectionManager() { trigger('unselect', null, ev); } } - - + + function reportSelection(startDate, endDate, allDay, ev) { selected = true; trigger('select', null, startDate, endDate, allDay, ev); } - - + + function daySelectionMousedown(ev) { // not really a generic manager method, oh well var cellDate = t.cellDate; var cellIsAllDay = t.cellIsAllDay; @@ -5054,21 +5053,21 @@ function SelectionManager() { } - + function OverlayManager() { var t = this; - - + + // exports t.renderOverlay = renderOverlay; t.clearOverlays = clearOverlays; - - + + // locals var usedOverlays = []; var unusedOverlays = []; - - + + function renderOverlay(rect, parent) { var e = unusedOverlays.shift(); if (!e) { @@ -5080,7 +5079,7 @@ function OverlayManager() { usedOverlays.push(e.css(rect).show()); return e; } - + function clearOverlays() { var e; @@ -5097,15 +5096,15 @@ function CoordinateGrid(buildFunc) { var t = this; var rows; var cols; - - + + t.build = function() { rows = []; cols = []; buildFunc(rows, cols); }; - - + + t.cell = function(x, y) { var rowCnt = rows.length; var colCnt = cols.length; @@ -5124,8 +5123,8 @@ function CoordinateGrid(buildFunc) { } return (r>=0 && c>=0) ? { row:r, col:c } : null; }; - - + + t.rect = function(row0, col0, row1, col1, originElement) { // row1,col1 is inclusive var origin = originElement.offset(); return { @@ -5146,8 +5145,8 @@ function HoverListener(coordinateGrid) { var change; var firstCell; var cell; - - + + t.start = function(_change, ev, _bindType) { change = _change; firstCell = cell = null; @@ -5156,8 +5155,8 @@ function HoverListener(coordinateGrid) { bindType = _bindType || 'mousemove'; $(document).bind(bindType, mouse); }; - - + + function mouse(ev) { _fixUIEvent(ev); // see below var newCell = coordinateGrid.cell(ev.pageX, ev.pageY); @@ -5173,14 +5172,14 @@ function HoverListener(coordinateGrid) { cell = newCell; } } - - + + t.stop = function() { $(document).unbind(bindType, mouse); return cell; }; - - + + } @@ -5202,25 +5201,25 @@ function HorizontalPositionCache(getElement) { elements = {}, lefts = {}, rights = {}; - + function e(i) { return elements[i] = elements[i] || getElement(i); } - + t.left = function(i) { return lefts[i] = lefts[i] === undefined ? e(i).position().left : lefts[i]; }; - + t.right = function(i) { return rights[i] = rights[i] === undefined ? t.left(i) + e(i).width() : rights[i]; }; - + t.clear = function() { elements = {}; lefts = {}; rights = {}; }; - + } })(jQuery); -- cgit v1.2.3 From f657a9ebb297ecae181714bb4e05b607dbe5e5a5 Mon Sep 17 00:00:00 2001 From: Sem <sembrestels@riseup.net> Date: Thu, 5 Sep 2013 21:10:06 +0200 Subject: Removed deprecated function uses. --- models/model.php | 2 +- start.php | 4 ++-- views/default/event_calendar/entities/gallery_item.php | 8 ++++---- views/default/event_calendar/groupprofile_calendar_deprecated.php | 2 +- views/default/event_calendar/nav.php | 4 ++-- views/default/plugins/event_calendar/settings.php | 2 +- 6 files changed, 11 insertions(+), 11 deletions(-) diff --git a/models/model.php b/models/model.php index 09e8b2092..7b4698f98 100644 --- a/models/model.php +++ b/models/model.php @@ -2071,7 +2071,7 @@ function event_calendar_handle_menu($event_guid) { $item = new ElggMenuItem('event-calendar-0review_requests', elgg_echo('event_calendar:review_requests_menu_title'), $url); $item->setSection('event_calendar'); elgg_register_menu_item('page', $item); - //add_submenu_item(elgg_echo('event_calendar:review_requests_title'), $CONFIG->wwwroot . "pg/event_calendar/review_requests/".$event_id, '0eventcalendaradmin'); + //elgg_register_menu_item(elgg_echo('event_calendar:review_requests_title'), $CONFIG->wwwroot . "pg/event_calendar/review_requests/".$event_id, '0eventcalendaradmin'); } $event_calendar_add_users = elgg_get_plugin_setting('add_users', 'event_calendar'); if ($event_calendar_add_users == 'yes') { diff --git a/start.php b/start.php index 27b6f9802..954c3400a 100644 --- a/start.php +++ b/start.php @@ -358,9 +358,9 @@ function event_calendar_entity_menu_setup($hook, $type, $return, $params) { /*if (elgg_is_admin_logged_in() && (elgg_get_plugin_setting('allow_featured', 'event_calendar') == 'yes')) { if ($event->featured) { - add_submenu_item(elgg_echo('event_calendar:unfeature'), $CONFIG->url . "action/event_calendar/unfeature?event_id=".$event_id.'&'.event_calendar_security_fields(), 'eventcalendaractions'); + elgg_register_menu_item(elgg_echo('event_calendar:unfeature'), $CONFIG->url . "action/event_calendar/unfeature?event_id=".$event_id.'&'.event_calendar_security_fields(), 'eventcalendaractions'); } else { - add_submenu_item(elgg_echo('event_calendar:feature'), $CONFIG->url . "action/event_calendar/feature?event_id=".$event_id.'&'.event_calendar_security_fields(), 'eventcalendaractions'); + elgg_register_menu_item(elgg_echo('event_calendar:feature'), $CONFIG->url . "action/event_calendar/feature?event_id=".$event_id.'&'.event_calendar_security_fields(), 'eventcalendaractions'); } }*/ diff --git a/views/default/event_calendar/entities/gallery_item.php b/views/default/event_calendar/entities/gallery_item.php index eb67cc772..9fc1edeca 100644 --- a/views/default/event_calendar/entities/gallery_item.php +++ b/views/default/event_calendar/entities/gallery_item.php @@ -22,9 +22,9 @@ $icon = elgg_view( $banned = $vars['entity']->isBanned(); $rel = ""; -if (page_owner() == $vars['entity']->guid) +if (elgg_get_page_owner_guid() == $vars['entity']->guid) $rel = 'me'; -else if (check_entity_relationship(page_owner(), 'friend', $vars['entity']->guid)) +else if (check_entity_relationship(elgg_get_page_owner_guid(), 'friend', $vars['entity']->guid)) $rel = 'friend'; if (!$banned) @@ -41,7 +41,7 @@ if ($event_id) { } else { // load the event from the database $event = get_entity($event_id); - $user_id = get_loggedin_userid(); + $user_id = elgg_get_logged_in_user_guid(); if ($event && ($event->owner_guid == $user_id)) { $authorised = TRUE; } @@ -57,7 +57,7 @@ if ($authorised) { $info .= $link; } -// echo elgg_view_listing($icon, $info); +// echo elgg_view_image_block($icon, $info); echo elgg_view('search/gallery_listing',array('icon' => $icon, 'info' => $info)); ?> \ No newline at end of file diff --git a/views/default/event_calendar/groupprofile_calendar_deprecated.php b/views/default/event_calendar/groupprofile_calendar_deprecated.php index 081a0eb2d..0d7d5101f 100644 --- a/views/default/event_calendar/groupprofile_calendar_deprecated.php +++ b/views/default/event_calendar/groupprofile_calendar_deprecated.php @@ -30,7 +30,7 @@ if (event_calendar_activated_for_group($page_owner_entity)) { foreach($events as $event) { echo elgg_view("object/event_calendar",array('entity' => $event)); } - echo '<div class="forum_latest"><a href="'.$vars['url'].'pg/event_calendar/group/'.page_owner().'">'.elgg_echo('event_calendar:view_calendar').'</a></div>'; + echo '<div class="forum_latest"><a href="'.$vars['url'].'pg/event_calendar/group/'.elgg_get_page_owner_guid().'">'.elgg_echo('event_calendar:view_calendar').'</a></div>'; echo "</div>"; } else if (elgg_get_plugin_setting('group_always_display', 'event_calendar') == 'yes') { diff --git a/views/default/event_calendar/nav.php b/views/default/event_calendar/nav.php index ceedfd485..746a46151 100644 --- a/views/default/event_calendar/nav.php +++ b/views/default/event_calendar/nav.php @@ -17,7 +17,7 @@ $url_start = $vars['url'].'mod/event_calendar/show_events.php?group_guid='.$vars <div id="elgg_horizontal_tabbed_nav"> <ul> <?php -$event_calendar_spots_display = get_plugin_setting('spots_display', 'event_calendar'); +$event_calendar_spots_display = elgg_get_plugin_setting('spots_display', 'event_calendar'); if ($event_calendar_spots_display == "yes") { ?> <li <?php echo $openselect; ?> ><a onclick="javascript:$('#event_list').load('<?php echo $url_start; ?>&filter=open&callback=true'); return false;" href="<?php echo $url_start; ?>&filter=open&callback=true"><?php echo elgg_echo('event_calendar:open'); ?></a></li> @@ -30,7 +30,7 @@ if ($event_calendar_spots_display == "yes") { </ul> </div> <?php -$event_calendar_region_display = get_plugin_setting('region_display', 'event_calendar'); +$event_calendar_region_display = elgg_get_plugin_setting('region_display', 'event_calendar'); if ($event_calendar_region_display == 'yes') { $url_start .= '&filter='.$vars['filter']; echo elgg_view('event_calendar/region_select',array('url_start'=>$url_start,'region'=>$vars['region'])); diff --git a/views/default/plugins/event_calendar/settings.php b/views/default/plugins/event_calendar/settings.php index db6e00913..a58647828 100644 --- a/views/default/plugins/event_calendar/settings.php +++ b/views/default/plugins/event_calendar/settings.php @@ -169,7 +169,7 @@ $body .= '<br />'; // agenda view is now handled in the listing area -/*$event_calendar_agenda_view = get_plugin_setting('agenda_view', 'event_calendar'); +/*$event_calendar_agenda_view = elgg_get_plugin_setting('agenda_view', 'event_calendar'); if (!$event_calendar_agenda_view) { $event_calendar_agenda_view = 'no'; } -- cgit v1.2.3 From a4409e30b3d357da07963b2787c192bdce29d513 Mon Sep 17 00:00:00 2001 From: Sem <sembrestels@riseup.net> Date: Fri, 8 Nov 2013 05:30:29 +0100 Subject: Version 1.8.0 --- manifest.xml | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/manifest.xml b/manifest.xml index 62cfeacf9..ab565f233 100644 --- a/manifest.xml +++ b/manifest.xml @@ -1,18 +1,16 @@ <?xml version="1.0" encoding="UTF-8"?> <plugin_manifest xmlns="http://www.elgg.org/plugin_manifest/1.8"> <name>Event Calendar</name> - <author>Kevin Jardine <kevin@radagast.biz></author> - <version>0.85</version> - <category>third-party</category> + <author>Kevin Jardine and Lorea Developers</author> + <version>1.8.0</version> <category>content</category> <category>widget</category> - <blurb>Event calendar</blurb> <description>Adds configurable group and/or site-wide event calendars.</description> - <website>http://radagast.biz/</website> - <copyright>(C) Radagast Solutions 2009-2011</copyright> + <website>https://lorea.org</website> + <copyright>(C) Radagast Solutions 2009-2011, Lorea Developers 2011-2013</copyright> <license>GNU Public License version 2</license> <requires> - <type>elgg_version</type> - <version>2010030101</version> + <type>elgg_release</type> + <version>1.8</version> </requires> -</plugin_manifest> \ No newline at end of file +</plugin_manifest> -- cgit v1.2.3